:root{--bg:#0f1115;--panel:#171a21;--panel-2:#1f232c;--line:#2a2f3a;--text:#e8eaef;--muted:#9097a6;--accent:#4f8cff;--accent-2:#3b74e0;--live:#ef4444;--ok:#22c55e;--warn:#f59e0b;--radius:12px;--snail-h:clamp(44px, 9vh, 80px);--snail-w:calc(var(--snail-h) * 390 / 310);--lightningcss-light: ;--lightningcss-dark:initial;color-scheme:dark;color:var(--text);background:var(--bg);font-family:system-ui,-apple-system,Segoe UI,Roboto,sans-serif;font-size:15px;line-height:1.4}*{box-sizing:border-box}html,body,#app,.app{height:100%;margin:0}body{background:var(--bg);overscroll-behavior:none;-webkit-tap-highlight-color:transparent}h1,h2,h3{margin:0;font-weight:600}.muted{color:var(--muted)}.small{font-size:13px}.error{color:#fca5a5}kbd{border:1px solid var(--line);color:var(--muted);border-radius:4px;padding:1px 5px;font:11px ui-monospace,monospace}input,select{font:inherit;color:var(--text);background:var(--panel-2);border:1px solid var(--line);border-radius:8px;min-width:0;padding:10px 12px}input:focus,select:focus{outline:2px solid var(--accent);outline-offset:-1px}.btn{font:inherit;color:var(--text);background:var(--panel-2);border:1px solid var(--line);cursor:pointer;white-space:nowrap;border-radius:8px;justify-content:center;align-items:center;gap:8px;min-height:40px;padding:8px 14px;font-weight:500;transition:background .15s;display:inline-flex}.btn:hover:not(:disabled){background:#2a2f3b}.btn:disabled{opacity:.45;cursor:default}.btn.primary{background:var(--accent);border-color:var(--accent);color:#fff}.btn.primary:hover:not(:disabled){background:var(--accent-2)}.btn.danger{color:#fecaca;background:#3a1d22;border-color:#5b2730}.btn.active{background:var(--accent);border-color:var(--accent);color:#fff}.btn.ghost{background:0 0;border-color:#0000}.btn.big{min-height:50px;padding:12px 22px;font-size:17px}.btn.small{min-height:32px;padding:4px 10px;font-size:13px}.btn.tiny{min-height:24px;margin-left:auto;padding:2px 6px}.btn.icon{width:44px;padding:8px}.btn.round{border-radius:50%;width:52px;height:52px;padding:0}.video{background:#000;width:100%;height:100%;display:block}.message,.home,.lobby{text-align:center;flex-direction:column;justify-content:center;align-items:center;gap:16px;min-height:100%;padding:24px 16px;display:flex}.message p{max-width:460px;color:var(--muted);margin:0}.home-card,.lobby-card{text-align:left;flex-direction:column;gap:16px;width:100%;max-width:440px;display:flex}.home-card h1,.lobby-card h1{font-size:28px}.home-card p{margin:0}.login-form{flex-direction:column;gap:8px;display:flex}.join-form{border-top:1px solid var(--line);flex-direction:column;gap:8px;padding-top:16px;display:flex}.row{gap:8px;display:flex}.row input{flex:1}.lobby-preview{aspect-ratio:16/9;border-radius:var(--radius);background:var(--panel);position:relative;overflow:hidden}.btn.preview-switch{background:#171a21d9;width:44px;height:44px;position:absolute;bottom:12px;right:12px}.avatar{width:100%;height:100%;color:var(--muted);background:var(--panel-2);place-items:center;font-size:40px;font-weight:600;display:grid}.avatar.big{background:0 0;font-size:120px}.overlay{z-index:20;background:#0009;place-items:center;padding:16px;display:grid;position:fixed;inset:0}.dialog{background:var(--panel);border:1px solid var(--line);border-radius:16px;width:100%;max-width:900px;max-height:100%;padding:20px;overflow:auto}.dialog header{justify-content:space-between;align-items:center;margin-bottom:16px;display:flex}.dot{border-radius:50%;width:10px;height:10px;display:inline-block}.dot.ok{background:var(--ok)}.dot.warn{background:var(--warn);animation:1s infinite alternate pulse}@keyframes pulse{to{opacity:.3}}.banner{color:#fde68a;background:#3a2e12;padding:8px 16px;font-size:14px}.teacher{height:100%;padding:0 env(safe-area-inset-right) env(safe-area-inset-bottom) env(safe-area-inset-left);flex-direction:column;display:flex}.topbar{padding:10px 16px;padding-top:calc(10px + env(safe-area-inset-top));border-bottom:1px solid var(--line);background:var(--panel);flex-wrap:wrap;justify-content:space-between;align-items:center;gap:12px;display:flex;position:relative}.brand{white-space:nowrap;align-items:center;gap:10px;display:flex}.actions{flex-wrap:wrap;justify-content:flex-end;gap:8px;margin-left:auto;display:flex}.mic-btn{position:relative;overflow:hidden}.teacher-main{flex:1;grid-template-columns:minmax(320px,420px) 1fr;min-height:0;display:grid}.sources{border-right:1px solid var(--line);flex-direction:column;gap:12px;padding:16px;display:flex;overflow:auto}.sources h2,.students h2{color:var(--muted);font-size:15px;font-weight:500}.sources h2 b{color:var(--text)}.program{aspect-ratio:16/9;border-radius:var(--radius);border:2px solid var(--live);background:#000;position:relative;overflow:hidden}.program .avatar{position:absolute;inset:0}.live-badge{background:var(--live);color:#fff;letter-spacing:.05em;border-radius:4px;padding:2px 8px;font-size:11px;font-weight:700;position:absolute;top:8px;left:8px}.source-grid{grid-template-columns:1fr 1fr;gap:10px;display:grid}.source{background:var(--panel);border:2px solid var(--line);border-radius:10px;position:relative;overflow:hidden}.source.active{border-color:var(--live)}.source-view{aspect-ratio:16/10;cursor:pointer;background:#000;border:0;width:100%;padding:0;display:block}.source-view:disabled{cursor:default}.source-empty{background:var(--panel-2);width:100%;height:100%}.source-placeholder{text-align:center;place-items:center;padding:8px;display:grid;position:absolute;inset:0 0 34px}.source-bar{align-items:center;gap:6px;height:34px;padding:6px 8px;font-size:13px;display:flex}.source-bar>span{text-overflow:ellipsis;white-space:nowrap;min-width:0;overflow:hidden}.source-bar kbd{margin-left:auto}.source-bar .btn.tiny{margin-left:0}.source.active .source-bar{background:var(--live);color:#fff}.source.active kbd{color:#fff;border-color:#ffffff80}.students{flex-direction:column;gap:12px;min-width:0;padding:16px;display:flex;overflow:auto}.count{background:var(--panel-2);min-width:22px;color:var(--text);text-align:center;border-radius:11px;padding:0 6px;font-size:13px;display:inline-block}.grid{grid-template-columns:repeat(auto-fill,minmax(240px,1fr));align-content:start;gap:10px;display:grid}.grid.n1{grid-template-columns:minmax(240px,720px)}.grid.n2,.grid.n4{grid-template-columns:repeat(auto-fill,minmax(280px,1fr))}.tile{aspect-ratio:16/9;background:var(--panel);border:1px solid var(--line);border-radius:10px;position:relative;overflow:hidden}.tile:hover{border-color:var(--accent)}.tile-open{width:100%;height:100%;color:inherit;font:inherit;cursor:zoom-in;text-align:left;background:0 0;border:0;padding:0;display:block}.tile-bar{background:linear-gradient(#0000,#000000b3);align-items:center;gap:6px;padding:6px 44px 8px 8px;display:flex;position:absolute;bottom:0;left:0;right:0}.tile-name{text-overflow:ellipsis;white-space:nowrap;text-shadow:0 1px 2px #000;font-size:14px;font-weight:500;overflow:hidden}.badge-off{background:var(--live);color:#fff;border-radius:50%;flex:none;place-items:center;width:22px;height:22px;display:inline-grid}.tile-status{color:var(--warn);background:#0009;border-radius:4px;padding:2px 8px;font-size:12px;position:absolute;top:8px;left:8px}.tile-expand{opacity:0;background:#00000080;border-radius:6px;place-items:center;width:28px;height:28px;transition:opacity .15s;display:grid;position:absolute;top:8px;right:8px}.tile:hover .tile-expand,.tile-open:focus-visible .tile-expand{opacity:1}.tile-mute{color:#fff;cursor:pointer;background:#00000080;border:1px solid #ffffff40;border-radius:50%;place-items:center;width:28px;height:28px;padding:0;transition:background .15s;display:grid;position:absolute;bottom:6px;right:8px}.tile-mute:hover{background:var(--live);border-color:var(--live)}.tile-snap{color:#fff;cursor:pointer;opacity:0;background:#00000080;border:1px solid #ffffff40;border-radius:6px;place-items:center;width:28px;height:28px;padding:0;transition:opacity .15s,background .15s;display:grid;position:absolute;top:8px;right:42px}.tile:hover .tile-snap:not(:disabled),.tile-snap:focus-visible,.tile-snap.sent,.tile-snap.failed{opacity:1}.tile-snap:hover:not(:disabled),.tile-snap.sent{background:var(--accent);border-color:var(--accent)}.tile-snap.failed,.snap-btn.failed{background:var(--live);border-color:var(--live)}.tile-snap:disabled{cursor:default}.snap-btn.sent{background:var(--ok);border-color:var(--ok);color:#fff}.tile.on-air{border:2px solid var(--live)}.tile-air{color:#fff;cursor:pointer;opacity:0;background:#00000080;border:1px solid #ffffff40;border-radius:6px;place-items:center;width:28px;height:28px;padding:0;transition:opacity .15s,background .15s;display:grid;position:absolute;top:8px;right:76px}.tile:hover .tile-air:not(:disabled),.tile-air:focus-visible,.tile-air.on{opacity:1}.tile-air:hover:not(:disabled),.tile-air.on,.air-btn.on{background:var(--live);border-color:var(--live);color:#fff}.tile-air:disabled{cursor:default}.kick-btn:hover{background:var(--live);border-color:var(--live);color:#fff}.level{height:3px;position:absolute;bottom:0;left:0;right:0}.level>div{background:var(--ok);transform-origin:0;height:100%;transform:scaleX(0)}.empty{color:var(--muted);border:1px dashed var(--line);border-radius:var(--radius);flex-direction:column;flex:1;justify-content:center;align-items:center;gap:12px;min-height:240px;display:flex}.focus{z-index:30;cursor:zoom-out;background:#000;grid-template:minmax(0,1fr)/minmax(0,1fr);display:grid;position:fixed;inset:0}.focus .video{background:#000}.focus-bar{cursor:default;background:#171a21e6;border-radius:12px;align-items:center;gap:12px;max-width:calc(100% - 32px);padding:6px 8px 6px 16px;display:flex;position:absolute;bottom:20px;left:50%;overflow:hidden;transform:translate(-50%)}.focus-name{align-items:center;gap:8px;font-size:17px;font-weight:600;display:flex}.pair-grid{grid-template-columns:repeat(auto-fit,minmax(220px,1fr));gap:12px;margin-bottom:12px;display:grid}.pair-card{border-radius:var(--radius);background:var(--panel-2);text-align:center;flex-direction:column;align-items:center;gap:10px;padding:16px;display:flex}.pair-card h3{align-items:center;gap:8px;font-size:16px;display:flex}.pair-card p{margin:0}.qr{background:#fff;border-radius:8px;width:180px;height:180px;padding:6px}.qr img{width:100%;height:100%;display:block}.pair-done{width:180px;height:180px;color:var(--ok);background:#22c55e1f;border-radius:8px;place-items:center;font-weight:600;display:grid}.student,.device{background:#000;height:100%;position:relative;overflow:hidden}.stage{position:absolute;inset:0}.stage-status,.stage-label{background:#0009;border-radius:20px;padding:6px 14px;font-size:14px;position:absolute;top:16px;left:50%;transform:translate(-50%)}.stage-label.self-air{background:var(--live);color:#fff}.stage-status{font-size:16px;top:50%}.stage-avatar{background:var(--panel);color:var(--muted);flex-direction:column;justify-content:center;align-items:center;gap:16px;display:flex;position:absolute;inset:0}.stage-avatar-icon{background:var(--panel-2);border-radius:50%;place-items:center;width:140px;height:140px;display:grid}.unmute{position:absolute;top:50%;left:50%;transform:translate(-50%,-50%)}.stage-notice{left:50%;bottom:calc(96px + env(safe-area-inset-bottom));white-space:nowrap;background:#000000bf;border-radius:20px;padding:8px 16px;font-size:14px;position:absolute;transform:translate(-50%)}.self{top:calc(16px + env(safe-area-inset-top));right:calc(16px + env(safe-area-inset-right));aspect-ratio:4/3;border:1px solid #fff3;border-radius:10px;width:min(14vw,160px);transition:width .3s,opacity .3s;position:absolute;overflow:hidden;box-shadow:0 4px 20px #00000080}.student.idle .self{opacity:.8;width:min(8vw,96px)}.self-off{background:var(--panel);color:var(--muted);place-items:center;font-size:12px;display:grid;position:absolute;inset:0}.self-off.avatar{font-size:28px}.controls{left:50%;bottom:calc(16px + env(safe-area-inset-bottom));background:#171a21d9;border-radius:40px;align-items:center;gap:12px;padding:8px;transition:opacity .3s;display:flex;position:absolute;transform:translate(-50%)}.student.idle{cursor:none}.student.idle .controls{opacity:0;pointer-events:none}.device{flex-direction:column;display:flex}.device-view{flex:1;min-height:0}.device-start{text-align:center;flex-direction:column;justify-content:center;align-items:center;gap:16px;height:100%;padding:24px;display:flex}.device-status{text-align:center;background:var(--panel-2);color:var(--muted);padding:8px 14px;font-size:14px;font-weight:500}.device-status.ok{color:var(--ok)}.device-status.live{background:var(--live);color:#fff}.device-status.error{color:#fca5a5}.board-app{-webkit-user-select:none;user-select:none;background:#2b2f38;flex-direction:column;height:100%;display:flex}.toolbar{padding:8px 12px;padding-top:calc(8px + env(safe-area-inset-top));background:var(--panel);border-bottom:1px solid var(--line);flex-wrap:wrap;align-items:center;gap:8px 16px;display:flex}.toolbar .group{align-items:center;gap:4px;display:flex}.page-counter{text-align:center;font-variant-numeric:tabular-nums;min-width:56px}.toolbar .device-status{border-radius:8px;margin-left:auto;padding:6px 12px}.swatch{border:2px solid var(--line);cursor:pointer;border-radius:50%;width:32px;height:32px;padding:0}.swatch.active{box-shadow:0 0 0 2px var(--accent);border-color:#fff}.size-dot{background:currentColor;border-radius:50%;display:block}.board-canvas{object-fit:contain;touch-action:none;cursor:crosshair;flex:1;width:100%;min-height:0}@media (width<=860px){.teacher-main{grid-template-columns:minmax(0,1fr);overflow:auto}.sources{border-right:0;border-bottom:1px solid var(--line);overflow:visible}.students{overflow:visible}.hide-sm{display:none}.self{width:22vw}.student.idle .self{width:14vw}}@media (width<=560px){.topbar{padding:8px 12px;padding-top:calc(8px + env(safe-area-inset-top));gap:8px}.actions{gap:6px}.actions .btn{padding:8px 10px}.timer-control{position:static}.timer-menu{width:auto;left:12px;right:12px}.sources,.students{padding:12px}.grid,.grid.n1,.grid.n2,.grid.n4{grid-template-columns:repeat(auto-fill,minmax(min(240px,100%),1fr))}}@media (orientation:landscape) and (height<=540px){.topbar{padding:6px 12px;padding-top:calc(6px + env(safe-area-inset-top))}.topbar .btn{min-height:36px;padding:6px 10px}.teacher-main{grid-template-columns:minmax(0,1fr) minmax(0,1fr);overflow:hidden}.sources{border-right:1px solid var(--line);border-bottom:0;gap:8px;padding:8px;overflow:hidden}.sources h2,.hotkeys-hint{display:none}.students{gap:8px;padding:8px;overflow:auto}.program{aspect-ratio:auto;flex:1;min-height:0}.source-grid{grid-template-columns:repeat(4,minmax(0,1fr));gap:6px}.source-view{aspect-ratio:16/9}.source-bar{justify-content:center;height:28px;padding:4px}.source-bar>span{display:none}.source-placeholder{padding:2px;font-size:11px;inset:0 0 28px}.source-placeholder .small{font-size:11px}.source-placeholder .btn.small{white-space:normal;min-height:26px;padding:2px 6px;font-size:11px;line-height:1.2}.empty{min-height:0}.timer-menu{max-height:calc(100vh - 60px);overflow:auto}}@media (hover:none){.tile-snap:not(:disabled),.tile-air:not(:disabled){opacity:1}.source-bar kbd,.hotkeys-hint{display:none}}.timer-bar{--timer-color:var(--accent);z-index:50;pointer-events:none;background:#ffffff1f;height:8px;position:fixed;bottom:0;left:0;right:0}.timer-bar.warn{--timer-color:var(--warn)}.timer-bar.done{--timer-color:var(--live)}.timer-fill{background:var(--timer-color);transform-origin:0;height:100%;transition:background .3s;animation-name:timer-drain;animation-timing-function:linear;animation-fill-mode:both}.timer-bar.done .timer-fill{animation:1s ease-in-out infinite timer-blink}@keyframes timer-drain{0%{transform:scaleX(1)}to{transform:scaleX(0)}}@keyframes timer-blink{0%,to{opacity:1;transform:none}50%{opacity:.35;transform:none}}.timer-label{right:calc(12px + env(safe-area-inset-right));color:var(--text);font-variant-numeric:tabular-nums;box-shadow:inset 0 0 0 1px var(--timer-color);background:#000000a6;border-radius:12px;padding:3px 10px;font-size:14px;position:absolute;bottom:14px}.timer-bar.cartoon{height:calc(var(--snail-h) + 4px);background:0 0}.timer-bar.cartoon:before{content:"";background:#ffffff1f;height:4px;position:absolute;bottom:0;left:0;right:0}.timer-track{width:calc(100% - var(--snail-w));height:100%;position:absolute;bottom:0;left:0}.timer-trail{background:var(--timer-color);transform-origin:0;height:4px;transition:background .3s;animation-name:timer-grow;animation-timing-function:linear;animation-fill-mode:both;position:absolute;bottom:0;left:0;right:0}.timer-walker{animation-name:timer-walk;animation-timing-function:linear;animation-fill-mode:both;position:absolute;inset:0}.timer-snail{width:var(--snail-w);height:var(--snail-h);filter:drop-shadow(0 2px 4px #00000080);-webkit-user-select:none;user-select:none;position:absolute;bottom:2px;left:0}.timer-bar.cartoon .timer-label{bottom:calc(var(--snail-h) + 14px)}.timer-bar.cartoon.done .timer-trail,.timer-bar.cartoon.done .timer-label{animation:1s ease-in-out infinite timer-blink}@keyframes timer-grow{0%{transform:scaleX(0)}to{transform:scaleX(1)}}@keyframes timer-walk{0%{transform:translate(0)}to{transform:translate(100%)}}.teacher.with-timer-bar{padding-bottom:max(8px, env(safe-area-inset-bottom))}.teacher.with-timer-cartoon{padding-bottom:max(calc(var(--snail-h) + 4px), env(safe-area-inset-bottom))}.timer-looks{grid-template-columns:1fr 1fr;gap:6px;display:grid}.timer-control{position:relative}.timer-time{font-variant-numeric:tabular-nums}.btn.timer-on:not(.danger){border-color:var(--accent)}.timer-menu{z-index:60;border-radius:var(--radius);background:var(--panel);border:1px solid var(--line);flex-direction:column;gap:12px;width:280px;padding:14px;display:flex;position:absolute;top:calc(100% + 8px);right:0;box-shadow:0 10px 30px #00000080}.timer-status{color:var(--muted);font-size:13px}.timer-presets{grid-template-columns:repeat(6,1fr);gap:6px;display:grid}.timer-presets .btn{padding:4px 0}.timer-minutes{color:var(--muted);align-items:center;gap:8px;display:flex}.timer-minutes input{flex:1}.timer-buttons{grid-template-columns:1fr 1fr;gap:8px;display:grid}.timer-buttons .btn:first-child{grid-column:1/-1}
