:root{--bg: #f5f6fb;--surface: #ffffff;--surface-2: #f0f1f7;--border: #e2e4ee;--text: #1f2333;--muted: #7a7f95;--primary: #5b4fe0;--primary-2: #ece9ff;--primary-text: #fff;--green: #12a575;--green-bg: #e3f7ef;--red: #e0475c;--red-bg: #fde8eb;--orange: #e98a15;--orange-bg: #fff2df;--blue: #2b7de9;--blue-bg: #e5f0ff;--shadow: 0 1px 2px rgba(20, 22, 40, .05), 0 4px 16px rgba(20, 22, 40, .05);--radius: 12px;color-scheme:light}:root[data-theme=dark]{--bg: #12131a;--surface: #1b1d27;--surface-2: #252836;--border: #30344a;--text: #e8eaf3;--muted: #9096ad;--primary: #7b70ff;--primary-2: #2c2a52;--green-bg: #133628;--red-bg: #3d1c22;--orange-bg: #3a2a12;--blue-bg: #15294a;--shadow: 0 1px 2px rgba(0, 0, 0, .3), 0 4px 16px rgba(0, 0, 0, .25);color-scheme:dark}*{box-sizing:border-box}html,body,#root{margin:0;min-height:100%}body{font:15px/1.5 Inter,system-ui,-apple-system,Segoe UI,Roboto,sans-serif;background:var(--bg);color:var(--text)}a{color:var(--primary);text-decoration:none}h1{font-size:26px;margin:0 0 16px}h2{font-size:20px;margin:0}h3{font-size:16px;margin:0 0 8px}h4{margin:12px 0 6px;font-size:14px}input,select,textarea{font:inherit;color:var(--text);background:var(--surface);border:1px solid var(--border);border-radius:8px;padding:8px 10px;width:100%;outline:none;transition:border-color .15s}input:focus,select:focus,textarea:focus{border-color:var(--primary);box-shadow:0 0 0 3px var(--primary-2)}input[type=checkbox],input[type=radio]{width:auto;accent-color:var(--primary);margin:0 6px 0 0}textarea{resize:vertical}.muted{color:var(--muted)}.small{font-size:13px}.center{text-align:center}.grow{flex:1}.nowrap{white-space:nowrap}.pad{padding:16px}.red-text{color:var(--red)}.btn{display:inline-flex;align-items:center;justify-content:center;gap:6px;padding:8px 14px;border-radius:8px;border:1px solid var(--border);background:var(--surface);color:var(--text);font:inherit;font-weight:500;cursor:pointer;white-space:nowrap;transition:background .15s,transform .1s}.btn:hover:not(:disabled){background:var(--surface-2)}.btn:active:not(:disabled){transform:scale(.98)}.btn:disabled{opacity:.5;cursor:default}.btn.primary{background:var(--primary);border-color:var(--primary);color:var(--primary-text)}.btn.primary:hover:not(:disabled){filter:brightness(1.08);background:var(--primary)}.btn.ghost{background:transparent}.btn.danger{background:var(--red);border-color:var(--red);color:#fff}.btn.danger.ghost{background:transparent;color:var(--red);border-color:transparent}.btn.sm{padding:5px 10px;font-size:13px}.btn.lg{padding:12px 22px;font-size:16px}.btn.wide{width:100%}.icon-btn{border:none;background:transparent;color:var(--text);cursor:pointer;font-size:18px;padding:6px 8px;border-radius:8px;line-height:1;display:inline-flex;align-items:center;position:relative}.icon-btn:hover:not(:disabled){background:var(--surface-2)}.icon-btn:disabled{opacity:.35;cursor:default}.icon-btn.sm{font-size:14px;padding:4px 6px}.icon-btn.on{background:var(--primary-2);color:var(--primary)}.file-btn{cursor:pointer;align-self:flex-start}.shell{display:flex;min-height:100vh}.sidebar{width:236px;flex-shrink:0;background:var(--surface);border-right:1px solid var(--border);display:flex;flex-direction:column;position:sticky;top:0;height:100vh}.brand{font-weight:800;font-size:19px;padding:18px 20px;color:var(--text);letter-spacing:-.3px}.brand.big{font-size:26px;display:block;text-align:center;margin-bottom:20px}.sidebar nav{display:flex;flex-direction:column;padding:4px 10px;gap:2px;flex:1;overflow:auto}.sidebar nav a{display:flex;align-items:center;gap:10px;padding:9px 12px;border-radius:8px;color:var(--text);font-weight:500}.sidebar nav a:hover{background:var(--surface-2)}.sidebar nav a.active{background:var(--primary-2);color:var(--primary)}.nav-ic{width:22px;text-align:center}.sidebar-foot{padding:12px;border-top:1px solid var(--border)}.me{display:flex;gap:10px;align-items:center;color:var(--text);padding:6px;border-radius:8px}.me:hover{background:var(--surface-2)}.me small{display:block;color:var(--muted);font-size:12px}.main{flex:1;min-width:0;display:flex;flex-direction:column}.topbar{display:flex;align-items:center;gap:8px;padding:10px 24px;background:var(--surface);border-bottom:1px solid var(--border);position:sticky;top:0;z-index:20}.burger{display:none}.content{padding:24px;max-width:1200px;width:100%;margin:0 auto}.page-head{display:flex;align-items:center;gap:10px;margin-bottom:16px;flex-wrap:wrap}.page-head h1,.page-head h2{margin:0;flex:1}.back{display:inline-block;margin-bottom:10px;color:var(--muted)}.back:hover{color:var(--primary)}.narrow-page{max-width:640px}.card{background:var(--surface);border:1px solid var(--border);border-radius:var(--radius);padding:18px;box-shadow:var(--shadow);margin-bottom:16px}.card-head{display:flex;align-items:center;justify-content:space-between;margin-bottom:10px}.card-head h3{margin:0}.grid2{display:grid;grid-template-columns:1fr 1fr;gap:16px}.grid2 .card{margin:0}.stats{display:grid;grid-template-columns:repeat(auto-fill,minmax(180px,1fr));gap:12px;margin-bottom:16px}.stat{margin:0;display:flex;flex-direction:column;color:var(--text)}.stat b{font-size:24px}.stat span{color:var(--muted);font-size:13px}a.stat:hover{border-color:var(--primary)}.notice{background:var(--blue-bg);border-color:transparent;box-shadow:none}.notice.good{background:var(--green-bg)}.notice.warn{background:var(--orange-bg)}.notice p{margin:6px 0 0}.list-item{display:flex;justify-content:space-between;align-items:center;gap:10px;padding:10px 4px;border-bottom:1px solid var(--border);color:var(--text)}.list-item:last-child{border-bottom:none}a.list-item:hover,.btn-row:hover{background:var(--surface-2)}.btn-row{width:100%;background:none;border:none;border-bottom:1px solid var(--border);font:inherit;cursor:pointer;text-align:left}.row{display:flex;gap:10px;align-items:center;flex-wrap:wrap}.row>.field{flex:1;min-width:140px}.row.end{justify-content:flex-end}.row.top{align-items:flex-start}.form{display:flex;flex-direction:column;gap:12px}.form.narrow{max-width:480px}.field{display:flex;flex-direction:column;gap:4px}.field-label{font-size:13px;font-weight:600;color:var(--muted)}.hint{font-size:12px;color:var(--muted)}.copy-row{display:flex;gap:8px}.copy-row input{background:var(--surface-2)}.error-box{background:var(--red-bg);color:var(--red);padding:10px 12px;border-radius:8px}.badge{display:inline-block;padding:2px 8px;border-radius:99px;font-size:12px;font-weight:600;margin-left:4px;white-space:nowrap}.badge.green{background:var(--green-bg);color:var(--green)}.badge.red{background:var(--red-bg);color:var(--red)}.badge.orange{background:var(--orange-bg);color:var(--orange)}.badge.blue{background:var(--blue-bg);color:var(--blue)}.badge.gray{background:var(--surface-2);color:var(--muted)}.avatar{display:inline-flex;align-items:center;justify-content:center;border-radius:50%;color:#fff;font-weight:700;flex-shrink:0;vertical-align:middle}.empty{text-align:center;padding:32px 16px;color:var(--muted)}.empty-icon{font-size:40px}.empty h3{color:var(--text);margin:8px 0}.loader{display:flex;gap:6px;justify-content:center;padding:40px}.loader span{width:10px;height:10px;border-radius:50%;background:var(--primary);animation:bounce 1s infinite ease-in-out}.loader span:nth-child(2){animation-delay:.15s}.loader span:nth-child(3){animation-delay:.3s}@keyframes bounce{0%,80%,to{transform:scale(.5);opacity:.4}40%{transform:scale(1);opacity:1}}.tabs{display:flex;gap:4px;border-bottom:1px solid var(--border);margin-bottom:16px;overflow-x:auto}.tabs button{background:none;border:none;padding:10px 14px;font:inherit;font-weight:500;color:var(--muted);cursor:pointer;border-bottom:2px solid transparent;margin-bottom:-1px;white-space:nowrap}.tabs button.active{color:var(--primary);border-bottom-color:var(--primary)}.chips{display:flex;gap:6px;flex-wrap:wrap;margin-bottom:12px}.chip{display:inline-flex;align-items:center;gap:6px;padding:5px 12px;border-radius:99px;border:1px solid var(--border);background:var(--surface);color:var(--text);font:inherit;font-size:14px;cursor:pointer;-webkit-user-select:none;user-select:none}.chip:hover:not(:disabled){border-color:var(--primary)}.chip.on{background:var(--primary-2);border-color:var(--primary);color:var(--primary)}.chip.picked{background:var(--primary);color:#fff;border-color:var(--primary)}.chip.ok{background:var(--green-bg);border-color:var(--green);color:var(--green)}.chip.bad{background:var(--red-bg);border-color:var(--red);color:var(--red)}.chip:disabled{cursor:default}.table-wrap{overflow-x:auto;background:var(--surface);border:1px solid var(--border);border-radius:var(--radius)}.table{width:100%;border-collapse:collapse}.table th{text-align:left;font-size:12px;text-transform:uppercase;letter-spacing:.4px;color:var(--muted);padding:10px 12px;border-bottom:1px solid var(--border);font-weight:600}.table td{padding:10px 12px;border-bottom:1px solid var(--border);vertical-align:middle}.table tr:last-child td{border-bottom:none}.table .actions{text-align:right;white-space:nowrap}.who{display:flex;gap:10px;align-items:center;color:var(--text)}.who small{display:block}.modal-bg{position:fixed;top:0;right:0;bottom:0;left:0;background:#0a0c1973;display:flex;align-items:flex-start;justify-content:center;padding:6vh 16px;z-index:100;overflow:auto;animation:fade .15s}.modal{background:var(--surface);border-radius:14px;width:100%;max-width:480px;box-shadow:0 20px 60px #0000004d;animation:pop .18s ease-out}.modal.wide{max-width:760px}.modal-head{display:flex;align-items:center;justify-content:space-between;padding:16px 20px;border-bottom:1px solid var(--border)}.modal-head h3{margin:0}.modal-body{padding:20px}@keyframes fade{0%{opacity:0}}@keyframes pop{0%{transform:scale(.97);opacity:0}}.toasts{position:fixed;bottom:20px;right:20px;display:flex;flex-direction:column;gap:8px;z-index:200}.toast{background:var(--text);color:var(--bg);padding:10px 16px;border-radius:10px;box-shadow:var(--shadow);animation:pop .2s;max-width:360px}.toast.err{background:var(--red);color:#fff}.notif-wrap{position:relative}.dot{position:absolute;top:0;right:0;background:var(--red);color:#fff;font-size:10px;border-radius:99px;padding:1px 5px}.notif-pop{position:absolute;right:0;top:40px;width:340px;max-height:420px;overflow:auto;background:var(--surface);border:1px solid var(--border);border-radius:12px;box-shadow:0 10px 40px #00000026;z-index:50}.notif{display:block;width:100%;text-align:left;padding:10px 14px;border:none;border-bottom:1px solid var(--border);background:none;color:var(--text);font:inherit;font-size:14px;cursor:pointer}.notif small{display:block;color:var(--muted);font-size:12px}.notif.unread{background:var(--primary-2)}.notif:hover{background:var(--surface-2)}.landing{max-width:1120px;margin:0 auto;padding:0 20px}.land-head{display:flex;align-items:center;gap:10px;padding:16px 0}.land-head .brand{padding:0}.hero{text-align:center;padding:70px 0 50px}.hero h1{font-size:48px;line-height:1.1;letter-spacing:-1px;margin-bottom:18px}.hero p{font-size:18px;color:var(--muted);max-width:640px;margin:0 auto 28px}.accent{background:linear-gradient(90deg,var(--primary),#e84393);-webkit-background-clip:text;background-clip:text;color:transparent}.hero-cta{display:flex;gap:12px;justify-content:center;flex-wrap:wrap}.features{display:grid;grid-template-columns:repeat(auto-fill,minmax(320px,1fr));gap:16px;padding-bottom:40px}.feature p{color:var(--muted);margin:0}.feat-ic{font-size:32px;margin-bottom:8px}.land-foot{text-align:center;padding:24px}.auth-page{min-height:100vh;display:flex;flex-direction:column;align-items:center;justify-content:center;padding:20px}.auth-card{width:100%;max-width:440px}.role-pick{display:grid;grid-template-columns:1fr 1fr;gap:10px}.role-card{display:flex;flex-direction:column;align-items:center;gap:2px;padding:14px 8px;border:2px solid var(--border);border-radius:12px;background:var(--surface);color:var(--text);font:inherit;cursor:pointer}.role-card small{color:var(--muted);font-size:12px;text-align:center}.role-card.on{border-color:var(--primary);background:var(--primary-2)}.role-ic{font-size:28px}.invite-note{background:var(--green-bg);padding:10px;border-radius:8px}.cred{background:var(--surface-2);padding:12px;border-radius:8px;margin:10px 0;font-family:ui-monospace,monospace}.invite-card{display:flex;gap:16px;align-items:center;flex-wrap:wrap}.invite-card>div:first-child{flex:1;min-width:200px}.invite-card p{margin:0}.invite-card .copy-row{flex:1.4;min-width:300px}.course-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(260px,1fr));gap:16px}.course-card{padding:0;overflow:hidden;color:var(--text);display:flex;flex-direction:column;margin:0;transition:transform .15s,box-shadow .15s}.course-card:hover{transform:translateY(-2px);box-shadow:0 8px 24px #0000001a}.cover{height:110px;position:relative}.lvl{background:#ffffffe6;color:#222;font-weight:700;font-size:12px;padding:2px 8px;border-radius:6px}.cover .lvl{position:absolute;top:10px;left:10px}.cc-body{padding:14px;flex:1;display:flex;flex-direction:column}.cc-body p{margin:0 0 10px;flex:1}.clamp{display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden}.cc-foot{display:flex;align-items:center;justify-content:space-between;gap:8px}.covers{display:flex;gap:8px}.cover-pick{width:40px;height:28px;border-radius:6px;border:2px solid transparent;cursor:pointer}.cover-pick.on{border-color:var(--text)}.filters{display:flex;gap:10px;margin-bottom:16px}.filters input{max-width:360px}.filters select{max-width:180px}.course-hero{border-radius:var(--radius);padding:28px;color:#fff;margin-bottom:20px}.course-hero h1{margin:8px 0}.course-hero p{margin:0 0 6px;opacity:.9}.lesson-item{display:flex;align-items:center;gap:10px;padding:12px 16px;margin-bottom:8px}.lesson-item a{color:var(--text)}.num{display:inline-flex;width:26px;height:26px;align-items:center;justify-content:center;border-radius:50%;background:var(--primary-2);color:var(--primary);font-weight:700;font-size:13px;flex-shrink:0}.title-input{font-size:24px;font-weight:700;border-color:transparent;background:transparent;flex:1 1 380px;min-width:200px}.title-input:hover{border-color:var(--border)}.exercise{scroll-margin-top:80px;transition:box-shadow .2s,border-color .2s}.exercise.editing{border-color:var(--primary)}.exercise.focused{border-color:var(--primary);box-shadow:0 0 0 3px var(--primary-2)}.exercise.is-hidden{opacity:.55;border-style:dashed}.ex-head{display:flex;align-items:center;gap:10px;margin-bottom:12px}.ex-head h3{margin:0}.ex-num{display:inline-flex;width:28px;height:28px;align-items:center;justify-content:center;border-radius:8px;background:var(--primary);color:#fff;font-weight:700;font-size:14px;flex-shrink:0}.ex-type{font-size:12px;color:var(--muted);background:var(--surface-2);padding:2px 8px;border-radius:6px;white-space:nowrap}.ex-tools{display:flex;gap:2px}.ex-body{font-size:16px}.rich{line-height:1.7}.ex-media{margin:0}.ex-media img{max-width:100%;max-height:420px;border-radius:10px;display:block}.ex-media figcaption{color:var(--muted);font-size:14px;margin-top:6px}.video-wrap{position:relative;padding-top:56.25%;border-radius:10px;overflow:hidden;background:#000}.video-wrap iframe{position:absolute;top:0;right:0;bottom:0;left:0;width:100%;height:100%;border:0}.ex-video{width:100%;border-radius:10px}.ex-audio{width:100%}.inline-ex{line-height:2.4}.gap-wrap{display:inline-flex;align-items:baseline;gap:2px}.gap{display:inline-block;width:auto;padding:2px 8px;margin:0 3px;border-radius:6px;border:1px solid var(--border);border-bottom:2px solid var(--primary);background:var(--surface-2);font-size:15px}select.gap{padding-right:4px}.gap.ok,.ok>.match-left,.question.ok,.tf-row.ok,.match-row.ok,.order-row.ok{border-color:var(--green)!important;background:var(--green-bg)!important}.gap.bad,.question.bad,.tf-row.bad,.match-row.bad,.order-row.bad{border-color:var(--red)!important;background:var(--red-bg)!important}.key{color:var(--green);font-size:12px;font-weight:600;margin-left:4px}.question{padding:10px 12px;border:1px solid transparent;border-radius:10px;margin-bottom:6px}.q-title{font-weight:600;margin-bottom:6px}.option{display:flex;align-items:center;padding:6px 8px;border-radius:8px;cursor:pointer}.option:hover{background:var(--surface-2)}.option.key-opt{outline:1px dashed var(--green)}.tf-row,.match-row{display:flex;align-items:center;justify-content:space-between;gap:12px;padding:8px 12px;border:1px solid var(--border);border-radius:10px;margin-bottom:6px}.match-row{justify-content:flex-start}.match-left{font-weight:600;min-width:140px}.match-row select{max-width:260px}.arrow{color:var(--muted)}.seg{display:inline-flex;border:1px solid var(--border);border-radius:8px;overflow:hidden;flex-shrink:0}.seg button{border:none;background:var(--surface);color:var(--text);padding:6px 14px;font:inherit;font-size:14px;cursor:pointer}.seg button+button{border-left:1px solid var(--border)}.seg button.on{background:var(--primary);color:#fff}.order-row{border:1px solid var(--border);border-radius:10px;padding:10px;margin-bottom:8px}.order-answer{min-height:38px;display:flex;flex-wrap:wrap;gap:6px;padding-bottom:8px;border-bottom:1px dashed var(--border);margin-bottom:8px;align-items:center}.order-pool{display:flex;flex-wrap:wrap;gap:6px;margin-bottom:10px;min-height:30px}.cat-groups{display:grid;grid-template-columns:repeat(auto-fit,minmax(180px,1fr));gap:10px}.cat-group{border:2px dashed var(--border);border-radius:10px;padding:10px;min-height:90px;display:flex;flex-wrap:wrap;gap:6px;align-content:flex-start}.cat-group.droppable{border-color:var(--primary);background:var(--primary-2);cursor:pointer}.cat-title{width:100%;font-weight:700;font-size:14px}.essay{margin-top:10px}.recorder{display:flex;gap:10px;align-items:center;margin-top:10px;flex-wrap:wrap}.wordlist{border-collapse:collapse;margin-bottom:10px}.wordlist td{padding:4px 16px 4px 0}.score{margin-top:12px;font-weight:600;color:var(--orange)}.score.ok{color:var(--green)}.add-between{text-align:center;margin:-8px 0 8px}.add-between button{border:1px dashed var(--border);background:transparent;color:var(--muted);border-radius:99px;padding:3px 14px;font:inherit;font-size:13px;cursor:pointer;opacity:.6}.add-between button:hover{opacity:1;color:var(--primary);border-color:var(--primary)}.empty-lesson{text-align:center;color:var(--muted)}.type-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(150px,1fr));gap:10px}.type-card{display:flex;flex-direction:column;align-items:center;gap:4px;padding:16px 8px;border:1px solid var(--border);border-radius:12px;background:var(--surface);color:var(--text);font:inherit;cursor:pointer;text-align:center}.type-card:hover:not(:disabled){border-color:var(--primary);background:var(--primary-2)}.type-card:disabled{opacity:.4}.type-card small{color:var(--muted);font-size:12px}.type-ic{font-size:26px}.edit-panel{border-top:1px solid var(--border);padding-top:14px}.edit-cols{display:grid;grid-template-columns:1fr 1fr;gap:20px;margin-bottom:12px}.preview{background:var(--surface-2);border-radius:10px;padding:14px}.list-editor{display:flex;flex-direction:column;gap:8px}.list-row{display:flex;gap:8px;align-items:center}.list-row.col{align-items:flex-start}.q-edit{flex:1;display:flex;flex-direction:column;gap:6px}.q-edit .row{flex-wrap:nowrap}.check-list{display:flex;flex-direction:column;gap:4px;max-height:240px;overflow:auto;border:1px solid var(--border);border-radius:8px;padding:8px}.check-list label{display:flex;align-items:center;padding:3px 4px;cursor:pointer}.ex-comment{margin-top:12px;background:var(--orange-bg)}.teacher-comment{margin-top:12px;background:var(--orange-bg);padding:8px 12px;border-radius:8px}.sticky-bottom{position:sticky;bottom:12px;display:flex;justify-content:space-between;align-items:center;border-color:var(--primary)}.classroom{height:100vh;display:flex;flex-direction:column;background:var(--bg)}.class-top{display:flex;align-items:center;gap:10px;padding:8px 16px;background:var(--surface);border-bottom:1px solid var(--border);flex-wrap:wrap}.class-title{display:flex;flex-direction:column;line-height:1.2;min-width:0}.lesson-picker{display:flex;gap:6px}.lesson-picker select{max-width:220px;padding:5px 8px;font-size:14px}.peers{display:flex;gap:2px}.peer{opacity:.35;filter:grayscale(1);transition:.2s}.peer.on{opacity:1;filter:none}.conn{width:10px;height:10px;border-radius:50%;background:var(--red)}.conn.ok{background:var(--green)}.class-body{flex:1;display:grid;grid-template-columns:1fr 380px;min-height:0}.class-lesson{overflow:auto;padding:16px 20px 80px}.class-side{border-left:1px solid var(--border);background:var(--surface);display:flex;flex-direction:column;min-height:0}.class-side .tabs{margin:0;padding:0 8px}.class-side>*:not(.tabs){flex:1;min-height:0;overflow:auto}.side-pane{padding:12px}.side-pane[hidden]{display:none}.teacher-bar{display:flex;gap:8px;align-items:center;flex-wrap:wrap;padding:8px 12px;background:var(--surface);border:1px solid var(--border);border-radius:10px;margin-bottom:14px;position:sticky;top:0;z-index:5}.dot-status{width:8px;height:8px;border-radius:50%;background:var(--muted);display:inline-block}.dot-status.on{background:var(--green)}.timer-wrap{position:relative}.timer{font-weight:700;font-variant-numeric:tabular-nums;background:var(--primary-2);color:var(--primary);padding:4px 10px;border-radius:8px;cursor:pointer}.timer.done{background:var(--red);color:#fff;animation:pulse 1s infinite}@keyframes pulse{50%{opacity:.6}}.pop{position:absolute;top:36px;right:0;background:var(--surface);border:1px solid var(--border);border-radius:10px;padding:8px;display:grid;grid-template-columns:repeat(3,1fr);gap:6px;z-index:30;box-shadow:var(--shadow);width:220px}.video-idle{text-align:center;padding:30px 10px}.video-grid{display:grid;grid-template-columns:1fr;gap:8px}.vtile{position:relative;background:#000;border-radius:10px;overflow:hidden;aspect-ratio:4/3}.vtile video{width:100%;height:100%;object-fit:cover;display:block}.vtile span{position:absolute;left:8px;bottom:6px;color:#fff;font-size:12px;background:#00000080;padding:1px 6px;border-radius:4px}.call-ctrl{display:flex;gap:6px;justify-content:center;margin-top:10px}.board{padding:10px;display:flex;flex-direction:column;gap:8px}.board-tools{display:flex;gap:6px;align-items:center;flex-wrap:wrap}.board-tools select{width:auto;padding:3px 6px;font-size:13px}.swatch{width:22px;height:22px;border-radius:50%;border:2px solid transparent;cursor:pointer}.swatch.on{border-color:var(--text);box-shadow:0 0 0 2px var(--surface) inset}.board-canvas-wrap{width:100%}.board canvas{background:#fff;border:1px solid var(--border);border-radius:8px;touch-action:none;cursor:crosshair;display:block}.chat{display:flex;flex-direction:column;height:100%}.chat-list{flex:1;overflow:auto;padding:12px;display:flex;flex-direction:column;gap:6px}.msg{max-width:85%;background:var(--surface-2);padding:6px 10px;border-radius:12px 12px 12px 4px;align-self:flex-start;display:flex;flex-direction:column}.msg b{font-size:12px;color:var(--primary)}.msg small{font-size:11px;color:var(--muted);align-self:flex-end}.msg.mine{align-self:flex-end;background:var(--primary-2);border-radius:12px 12px 4px}.chat-input{display:flex;gap:6px;padding:10px;border-top:1px solid var(--border)}.notes{padding:12px}.notes .row{flex-wrap:nowrap}.calendar{background:var(--surface);border:1px solid var(--border);border-radius:var(--radius);overflow:auto}.cal-head,.cal-body{display:grid;grid-template-columns:56px repeat(7,minmax(110px,1fr));min-width:840px}.cal-head>div{padding:10px 8px;text-align:center;border-bottom:1px solid var(--border);font-size:13px;color:var(--muted)}.cal-head .today{color:var(--primary)}.cal-hours div{height:48px;font-size:11px;color:var(--muted);text-align:right;padding:2px 6px 0 0}.cal-day{position:relative;border-left:1px solid var(--border)}.cal-day.today{background:color-mix(in srgb,var(--primary-2) 40%,transparent)}.cal-slot{height:48px;border-bottom:1px solid var(--border);cursor:pointer}.cal-slot:hover{background:var(--surface-2)}.cal-event{position:absolute;left:3px;right:3px;background:var(--primary);color:#fff;border:none;border-radius:6px;padding:3px 6px;font:inherit;font-size:12px;text-align:left;overflow:hidden;cursor:pointer;line-height:1.3}.cal-event.group{background:#00a383}.cal-event.done{background:var(--green-bg);color:var(--green);border-left:3px solid var(--green)}.cal-event.cancelled{background:var(--surface-2);color:var(--muted);text-decoration:line-through}.profile-head{display:flex;gap:16px;align-items:center}.profile-head h1{margin:0}.balance-box{text-align:center}.balance-box b{font-size:32px;display:block}.balance-box span{color:var(--muted);font-size:13px}.bars{display:flex;align-items:flex-end;gap:6px;height:140px;padding:10px 0;border-bottom:1px solid var(--border);margin-bottom:10px}.bar-col{flex:1;max-width:36px;height:100%;display:flex;flex-direction:column;justify-content:flex-end;align-items:center;gap:2px}.bar{width:100%;border-radius:4px 4px 0 0}.bar-col small{font-size:10px;color:var(--muted)}.group-card .members{display:flex;flex-wrap:wrap;gap:6px;margin-bottom:12px}.room-card{text-align:center;margin:0}.room-ic{font-size:36px}.word-form input{flex:1;min-width:140px}.table.words td:first-child{width:40%}.level{display:inline-flex;gap:2px}.level i{width:6px;height:14px;border-radius:2px;background:var(--border)}.level i.on{background:var(--green)}.trainer{max-width:620px;margin:0 auto}.trainer form,.trainer>.center{display:flex;flex-direction:column;align-items:center;gap:14px;padding:20px 0}.progress{height:6px;background:var(--surface-2);border-radius:3px;overflow:hidden;margin:10px 0}.progress div{height:100%;background:var(--primary);transition:width .3s}.flashcard{width:100%;max-width:420px;min-height:180px;border:2px solid var(--border);border-radius:16px;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:10px;cursor:pointer;padding:20px;transition:border-color .2s}.flashcard.flipped{border-color:var(--primary)}.fc-word{font-size:28px;font-weight:700;display:flex;align-items:center;gap:6px}.fc-tr{font-size:22px;color:var(--primary)}.choose-grid{display:grid;grid-template-columns:1fr 1fr;gap:10px;width:100%;max-width:460px}.choose-grid .btn{padding:14px;white-space:normal}.big-input{font-size:22px;text-align:center;max-width:380px}.result{display:flex;justify-content:space-between;align-items:center;gap:12px;padding:12px 16px;border-radius:10px;font-weight:600}.result.ok{background:var(--green-bg);color:var(--green)}.result.bad{background:var(--red-bg);color:var(--red)}@media (max-width: 1000px){.class-body{grid-template-columns:1fr;grid-template-rows:1fr 45vh}.class-side{border-left:none;border-top:1px solid var(--border)}.edit-cols{grid-template-columns:1fr}}@media (max-width: 800px){.sidebar{position:fixed;left:0;top:0;z-index:60;transform:translate(-100%);transition:transform .2s;box-shadow:0 0 40px #0003}.sidebar.open{transform:none}.burger{display:inline-flex}.content{padding:16px}.grid2{grid-template-columns:1fr}.hero h1{font-size:34px}.topbar{padding:8px 12px}.features{grid-template-columns:1fr}.copy-row{flex-wrap:wrap}.invite-card .copy-row{min-width:0}}.synced-media{position:relative}.media-blocked{position:absolute;left:50%;top:50%;transform:translate(-50%,-50%);max-width:calc(100% - 24px);padding:12px 18px;border:0;border-radius:999px;background:var(--primary);color:#fff;font:inherit;font-weight:600;box-shadow:0 6px 24px #0000004d;cursor:pointer;z-index:2}.synced-media:has(audio) .media-blocked{position:static;transform:none;margin-top:8px}.vtile.reconnecting video{opacity:.35}.vtile .vstate{position:absolute;top:0;right:0;bottom:0;left:0;display:grid;place-items:center;color:#fff;font-style:normal;font-weight:600;font-size:13px;text-shadow:0 1px 4px rgba(0,0,0,.6);pointer-events:none}
