*{box-sizing:border-box;-webkit-user-select:none;user-select:none}:root{--lightningcss-light:initial;--lightningcss-dark: ;color-scheme:light;--bg:#f3f6f8;--surface:#fff;--surface-soft:#f7f9fb;--surface-strong:#eef2f5;--sidebar:#0b1724;--sidebar-soft:#122335;--text:#17212b;--text-soft:#5b6977;--text-faint:#84919e;--line:#dfe5ea;--line-strong:#cbd4dc;--primary:#087cf0;--primary-dark:#066bd0;--primary-soft:#e8f3ff;--cyan:#19a7ce;--green:#16a36a;--green-soft:#e8f8f1;--amber:#d98a08;--amber-soft:#fff5df;--red:#dd3f4e;--red-soft:#fff0f1;--violet:#7b61d1;--violet-soft:#f0edff;--shadow:0 1px 2px #1222310d, 0 8px 24px #1222310f;--shadow-lg:0 22px 64px #0917252e;--radius:6px;--titlebar-height:40px;--sidebar-width:224px;font-family:Segoe UI,Microsoft YaHei UI,Microsoft YaHei,sans-serif}:root[data-theme=dark]{--lightningcss-light: ;--lightningcss-dark:initial;color-scheme:dark;--bg:#0d151d;--surface:#121e29;--surface-soft:#172531;--surface-strong:#1d2c38;--sidebar:#08121c;--sidebar-soft:#112231;--text:#e8eef3;--text-soft:#a8b5c0;--text-faint:#7f909e;--line:#273746;--line-strong:#364858;--primary:#2b94f5;--primary-dark:#1680df;--primary-soft:#122f49;--green:#43ca8d;--green-soft:#12372a;--amber:#f0ad3b;--amber-soft:#3b2b13;--red:#ff6976;--red-soft:#401b21;--violet:#9d8be7;--violet-soft:#2a2448;--shadow:0 1px 2px #0003, 0 10px 28px #00000029;--shadow-lg:0 22px 64px #00000061}html,body,#root{min-width:320px;min-height:100%;margin:0}body{background:var(--bg);min-height:100vh;color:var(--text);letter-spacing:0;overflow:hidden}button,input,select,textarea{font:inherit;letter-spacing:0}input,textarea{-webkit-user-select:text;user-select:text}button{color:inherit}button,select,label[for]{cursor:pointer}button:focus-visible,input:focus-visible,select:focus-visible,textarea:focus-visible{outline:2px solid var(--primary);outline-offset:2px}button:disabled{cursor:not-allowed;opacity:.48}h1,h2,h3,p{margin:0}.mono{font-family:Cascadia Mono,Consolas,Microsoft YaHei UI,monospace}.desktop-app,.login-page{background:var(--bg);height:100vh}.titlebar,.login-titlebar{height:var(--titlebar-height);border-bottom:1px solid var(--line);background:var(--surface);-webkit-user-select:none;user-select:none;align-items:center;display:flex}.titlebar{padding:0 13px}.titlebar-brand{align-items:center;gap:9px;font-size:13px;font-weight:700;display:flex}.brand-mark{color:#fff;background:var(--primary);border-radius:5px;justify-content:center;align-items:center;width:22px;height:22px;font-family:Cascadia Mono,monospace;font-size:14px;font-weight:800;display:inline-flex}.window-context{border-left:1px solid var(--line);color:var(--text-faint);margin-left:11px;padding-left:11px;font-size:12px}.window-dots{align-items:center;gap:22px;margin-left:auto;padding-right:8px;display:flex}.window-dots i{border:1px solid var(--text-faint);width:10px;height:10px}.window-dots i:first-child{background:var(--text-faint);border:0;width:11px;height:1px}.window-dots i:last-child{border:0;position:relative}.window-dots i:last-child:before,.window-dots i:last-child:after{content:"";background:var(--text-faint);width:13px;height:1px;position:absolute;top:5px;left:-1px;transform:rotate(45deg)}.window-dots i:last-child:after{transform:rotate(-45deg)}.app-frame{height:calc(100vh - var(--titlebar-height));display:flex}.sidebar{width:var(--sidebar-width);flex:0 0 var(--sidebar-width);background:var(--sidebar);color:#dce7ef;border-right:1px solid #ffffff0a;flex-direction:column;display:flex}.product-name{color:#fff;font-size:22px;font-weight:750}.nav-list{flex-direction:column;gap:4px;padding:8px 12px;display:flex}.nav-item{color:#91a5b7;text-align:left;background:0 0;border:0;border-radius:5px;align-items:center;gap:11px;width:100%;min-height:40px;padding:0 12px;font-size:13px;transition:background-color .18s,color .18s;display:flex}.nav-item:hover{color:#dfeaf2;background:#ffffff0e}.nav-item.active{background:var(--primary);color:#fff;box-shadow:0 6px 18px #087cf03d}.server-card{background:#ffffff06;border:1px solid #ffffff12;border-radius:5px;margin:auto 12px 14px;padding:12px}.server-line{color:#d9e5ed;align-items:center;gap:8px;font-size:11px;font-weight:600;display:flex}.status-pulse{background:#32ca85;border-radius:50%;flex:none;width:7px;height:7px;display:inline-block;box-shadow:0 0 0 4px #32ca851f}.server-card small{color:#71889a;margin:7px 0 0 15px;font-size:10px;display:block}.server-card.offline .status-pulse{background:#ef6b72;box-shadow:0 0 0 4px #ef6b721f}.server-card.offline .server-line{color:#f0c3c6}.connection-pill.offline{color:var(--red);background:var(--red-soft)}.account-block{background:#0000001c;border-top:1px solid #fff1;align-items:center;gap:10px;min-height:67px;padding:11px 12px;display:flex}.avatar,.large-avatar,.student-avatar{color:#fff;background:#2f75af;border-radius:50%;flex:none;justify-content:center;align-items:center;font-weight:700;display:inline-flex}.avatar{width:34px;height:34px;font-size:13px}.account-copy{flex-direction:column;flex:1;gap:3px;min-width:0;display:flex}.account-copy strong{color:#f2f7fa;font-size:12px}.account-copy small{color:#71889a;font-size:10px}.main-shell{flex-direction:column;flex:1;min-width:0;display:flex}.topbar{border-bottom:1px solid var(--line);background:var(--surface);align-items:center;gap:14px;min-height:66px;padding:11px 24px;display:flex}.topbar h1{font-size:18px;line-height:1.2}.topbar p{color:var(--text-faint);margin-top:3px;font-size:10px}.top-actions{align-items:center;gap:8px;margin-left:auto;display:flex}.connection-pill{border:1px solid var(--line);height:30px;color:var(--green);background:var(--surface-soft);border-radius:4px;align-items:center;gap:6px;padding:0 10px;font-size:11px;font-weight:600;display:flex}.icon-button{border:1px solid var(--line);background:var(--surface);width:32px;height:32px;color:var(--text-soft);border-radius:5px;flex:none;justify-content:center;align-items:center;transition:background-color .18s,border-color .18s,color .18s;display:inline-flex}.icon-button:hover{border-color:var(--line-strong);background:var(--surface-strong);color:var(--text)}.icon-button.dark{color:#8298aa;background:0 0;border-color:#ffffff14}.notification{position:relative}.notification span{border:1px solid var(--surface);background:var(--red);border-radius:50%;width:6px;height:6px;position:absolute;top:6px;right:6px}.mobile-menu{display:none}.page-scroll{flex:1;min-height:0;overflow:auto}.page-content{width:100%;max-width:1480px;margin:0 auto;padding:20px 24px 28px}.welcome-strip,.student-welcome{border:1px solid var(--line);border-left:4px solid var(--primary);border-radius:var(--radius);background:var(--surface);min-height:106px;box-shadow:var(--shadow);align-items:center;gap:20px;padding:20px 22px;display:flex}.eyebrow{color:var(--primary);margin-bottom:6px;font-size:10px;font-weight:750;display:block}.welcome-strip h2,.student-welcome h2{font-size:21px}.welcome-strip p,.student-welcome p{color:var(--text-soft);margin-top:5px;font-size:12px}.welcome-actions{gap:9px;margin-left:auto;display:flex}.primary-button,.secondary-button,.danger-button,.back-button{border-radius:5px;justify-content:center;align-items:center;gap:7px;min-height:34px;padding:0 13px;font-size:12px;font-weight:650;transition:background-color .18s,border-color .18s,color .18s,box-shadow .18s;display:inline-flex}.primary-button{border:1px solid var(--primary);background:var(--primary);color:#fff}.primary-button:hover{border-color:var(--primary-dark);background:var(--primary-dark);box-shadow:0 6px 16px #087cf02e}.secondary-button,.back-button{border:1px solid var(--line-strong);background:var(--surface);color:var(--text-soft)}.secondary-button:hover,.back-button:hover{border-color:var(--primary);background:var(--primary-soft);color:var(--primary)}.danger-button{border:1px solid var(--red);background:var(--red);color:#fff}.danger-button:hover{background:#c93140}.danger-button.subtle{background:var(--red-soft);min-height:30px;color:var(--red);border-color:#0000}.primary-button.large{min-height:42px;padding:0 18px}.full{width:100%}.metric-grid{grid-template-columns:repeat(4,minmax(0,1fr));gap:12px;margin-top:14px;display:grid}.metric-card{border:1px solid var(--line);border-radius:var(--radius);background:var(--surface);min-width:0;box-shadow:var(--shadow);padding:15px 16px 14px 54px;position:relative}.metric-icon{border-radius:5px;justify-content:center;align-items:center;width:29px;height:29px;display:flex;position:absolute;top:15px;left:15px}.metric-icon.blue,.activity-icon.blue{color:var(--primary);background:var(--primary-soft)}.metric-icon.green,.activity-icon.green{color:var(--green);background:var(--green-soft)}.metric-icon.amber,.activity-icon.amber{color:var(--amber);background:var(--amber-soft)}.metric-icon.violet,.activity-icon.violet{color:var(--violet);background:var(--violet-soft)}.metric-label{color:var(--text-soft);font-size:10px}.metric-value{margin-top:5px;font-size:24px;font-weight:750;line-height:1}.metric-value span{color:var(--text-soft);margin-left:4px;font-size:10px;font-weight:500}.metric-hint{margin-top:9px;font-size:9px}.metric-hint.blue{color:var(--primary)}.metric-hint.green{color:var(--green)}.metric-hint.amber{color:var(--amber)}.metric-hint.violet{color:var(--violet)}.dashboard-grid{grid-template-columns:minmax(0,1.7fr) minmax(300px,.8fr);gap:12px;margin:14px 0;display:grid}.panel{border:1px solid var(--line);border-radius:var(--radius);background:var(--surface);box-shadow:var(--shadow)}.panel-head{border-bottom:1px solid var(--line);align-items:center;gap:12px;min-height:55px;padding:11px 15px;display:flex}.panel-head>div:first-child{min-width:0}.panel-head h3{font-size:13px}.panel-head p{color:var(--text-faint);margin-top:3px;font-size:9px}.panel-head>button{margin-left:auto}.text-button{color:var(--primary);background:0 0;border:0;align-items:center;gap:2px;padding:3px;font-size:11px;font-weight:600;display:inline-flex}.text-button:hover{color:var(--primary-dark)}.dashboard-overview{gap:17px;padding:20px 18px 22px;display:grid}.overview-row{gap:8px;display:grid}.overview-row-head{color:var(--text-soft);justify-content:space-between;align-items:baseline;gap:12px;font-size:10px;display:flex}.overview-row-head strong{color:var(--text);text-align:right;font-size:11px;font-weight:650}.overview-track{background:var(--surface-strong);border-radius:4px;height:7px;overflow:hidden}.overview-track i{border-radius:inherit;background:var(--primary);width:0;height:100%;transition:width .25s;display:block}.overview-track i.green{background:var(--green)}.overview-track i.amber{background:var(--amber)}.overview-track i.violet{background:var(--violet)}.activity-list{padding:5px 14px}.activity-row{border-bottom:1px solid var(--line);align-items:center;gap:10px;min-height:49px;display:flex}.activity-row:last-child{border-bottom:0}.activity-icon{border-radius:50%;flex:none;justify-content:center;align-items:center;width:29px;height:29px;display:flex}.activity-row>div:last-child{flex-direction:column;gap:3px;min-width:0;display:flex}.activity-row strong{text-overflow:ellipsis;white-space:nowrap;font-size:10px;overflow:hidden}.activity-row span{color:var(--text-faint);font-size:8px}.table-scroll{overflow:auto}table{border-collapse:collapse;width:100%;font-size:10px}th,td{border-bottom:1px solid var(--line);text-align:left;white-space:nowrap;height:43px;padding:7px 12px}th{height:34px;color:var(--text-soft);background:var(--surface-soft);font-size:9px;font-weight:650}tbody tr:last-child td{border-bottom:0}tbody tr{transition:background-color .15s}tbody tr:hover{background:var(--surface-soft)}.student-cell{align-items:center;gap:8px;display:flex}.student-avatar{background:#2d7fba;width:27px;height:27px;font-size:10px}.student-cell strong{font-size:10px}.student-cell-button{min-width:0;color:var(--text);cursor:pointer;text-align:left;background:0 0;border:0;padding:3px 5px 3px 0}.student-cell-button:hover strong{color:var(--primary);text-underline-offset:3px;text-decoration:underline}.student-cell-button:focus-visible{outline:2px solid var(--primary);outline-offset:2px;border-radius:4px}.status-badge{border-radius:4px;justify-content:center;align-items:center;min-height:20px;padding:2px 7px;font-size:9px;font-weight:650;display:inline-flex}.status-badge.green{color:var(--green);background:var(--green-soft)}.status-badge.blue{color:var(--primary);background:var(--primary-soft)}.status-badge.amber{color:var(--amber);background:var(--amber-soft)}.status-badge.red{color:var(--red);background:var(--red-soft)}.minimum-accuracy-field{gap:8px;display:grid}.minimum-accuracy-field small{color:var(--muted);font-size:12px;line-height:1.55}.result-check.failed{color:var(--red);background:var(--red-soft)}.status-badge.gray{color:var(--text-soft);background:var(--surface-strong)}.online-badge{color:var(--text-faint);align-items:center;gap:6px;font-size:9px;display:inline-flex}.online-badge i{background:var(--text-faint);border-radius:50%;width:6px;height:6px}.online-badge.online{color:var(--green)}.online-badge.online i{background:var(--green);box-shadow:0 0 0 3px var(--green-soft)}.progress-cell{align-items:center;gap:8px;width:160px;display:flex}.progress-cell>div{background:var(--surface-strong);border-radius:5px;flex:1;height:5px;overflow:hidden}.progress-cell i{border-radius:inherit;background:var(--primary);height:100%;display:block}.progress-cell span{width:28px;font-size:9px}.progress-cell.compact{width:115px}.progress-drilldown{cursor:pointer;background:0 0;border:0;width:100%;min-width:92px;padding:4px}.progress-drilldown:disabled{cursor:default;opacity:.55}.completed-content-list{border:1px solid var(--line);background:var(--line);border-radius:6px;gap:1px;display:grid;overflow:hidden}.completed-content-row{background:var(--surface);min-height:72px;color:var(--text);cursor:pointer;text-align:left;border:0;grid-template-columns:42px minmax(220px,1fr) 110px 110px 22px;align-items:center;gap:14px;padding:11px 14px;transition:background-color .15s;display:grid}.completed-content-row:hover,.completed-content-row:focus-visible{background:var(--surface-soft)}.completed-content-row:focus-visible{outline:2px solid var(--primary);outline-offset:-2px}.completed-content-row>div:nth-child(2),.completed-content-row>div:nth-child(3),.completed-content-row>div:nth-child(4){gap:5px;min-width:0;display:grid}.completed-content-row>div:nth-child(2) strong{text-overflow:ellipsis;white-space:nowrap;font-size:11px;overflow:hidden}.completed-content-row span{color:var(--text-faint);font-size:9px}.completed-content-row>svg{color:var(--text-faint)}.detail-back-button{min-height:32px;color:var(--primary);cursor:pointer;background:0 0;border:0;align-items:center;gap:6px;margin-bottom:14px;padding:0 4px;font-size:10px;font-weight:650;display:inline-flex}.detail-back-button:hover{text-underline-offset:3px;text-decoration:underline}.student-score-summary{border:1px solid var(--line);background:var(--surface-soft);border-radius:6px;grid-template-columns:repeat(3,1fr);margin-bottom:16px;display:grid}.student-score-summary>div{border-right:1px solid var(--line);gap:5px;padding:13px 16px;display:grid}.student-score-summary>div:last-child{border-right:0}.student-score-summary span{color:var(--text-faint);font-size:9px}.student-score-summary strong{font-size:15px}.student-attempt-table table{min-width:980px}.attempt-score-row{cursor:pointer;transition:background-color .16s,box-shadow .16s}.attempt-score-row:hover{background:var(--primary-soft);box-shadow:inset 3px 0 0 var(--primary)}.attempt-score-row:focus-visible{outline:2px solid var(--primary);outline-offset:-2px}.attempt-score-row.loading{cursor:progress;opacity:.68}.attempt-detail-summary{border:1px solid var(--line);background:var(--surface-soft);border-radius:6px;grid-template-columns:repeat(4,1fr);margin-bottom:14px;display:grid}.attempt-detail-summary>div{border-right:1px solid var(--line);gap:5px;padding:12px 14px;display:grid}.attempt-detail-summary>div:last-child{border-right:0}.attempt-detail-summary span{color:var(--text-faint);font-size:9px}.attempt-detail-summary strong{font-size:13px}.attempt-comparison{gap:12px;display:grid}.attempt-text-pane{border:1px solid var(--line);background:var(--surface);border-radius:6px;overflow:hidden}.attempt-text-pane>header{border-bottom:1px solid var(--line);background:var(--surface-soft);justify-content:space-between;align-items:center;min-height:36px;padding:0 12px;display:flex}.attempt-text-pane>header strong{font-size:10px}.attempt-text-pane>header span{color:var(--text-faint);font-size:9px}.attempt-text-scroll{tab-size:4;max-height:210px;padding:10px 0;font-family:Cascadia Mono,Consolas,monospace;font-size:12px;line-height:1.75;overflow:auto}.attempt-text-line{min-width:max-content;padding-right:24px;display:flex}.attempt-line-number{width:46px;color:var(--text-faint);background:var(--surface);text-align:right;-webkit-user-select:none;user-select:none;flex:none;padding-right:11px;position:sticky;left:0}.attempt-text-line code{color:var(--text);font:inherit;white-space:pre}.attempt-text-line .answer-correct{color:var(--green);background:var(--green-soft)}.attempt-text-line .answer-wrong{color:var(--red);background:var(--red-soft);box-shadow:inset 0 -2px var(--red)}.attempt-text-line .answer-line-break{opacity:.85;margin-left:3px;font-size:.8em}.attempt-text-line .answer-empty{color:var(--text-faint);font-size:9px}.class-create-row{grid-template-columns:90px minmax(0,1fr) auto;align-items:center;gap:10px;margin-bottom:15px;display:grid}.class-create-row label{color:var(--text-soft);font-size:10px;font-weight:650}.class-create-row input,.class-manager-row input{border:1px solid var(--line-strong);background:var(--surface);width:100%;height:36px;color:var(--text);border-radius:5px;outline:0;padding:0 10px;font-size:11px}.class-create-row input:focus,.class-manager-row input:focus{border-color:var(--primary);box-shadow:0 0 0 3px var(--primary-soft)}.class-manager-list{gap:8px;max-height:390px;display:grid;overflow:auto}.class-manager-row{border:1px solid var(--line);background:var(--surface-soft);border-radius:6px;grid-template-columns:minmax(170px,.8fr) minmax(220px,1fr) auto;align-items:center;gap:12px;padding:10px 12px;display:grid}.class-manager-identity{min-width:0;color:var(--primary);align-items:center;gap:9px;display:flex}.class-manager-identity span{gap:2px;min-width:0;display:grid}.class-manager-identity strong{color:var(--text);text-overflow:ellipsis;white-space:nowrap;font-size:11px;overflow:hidden}.class-manager-identity small{color:var(--text-faint);font-size:8px}.class-manager-actions{align-items:center;gap:6px;display:flex}.class-delete-confirm{border:1px solid color-mix(in srgb, var(--red) 35%, var(--line));color:var(--red);background:var(--red-soft);border-radius:5px;grid-column:1/-1;align-items:center;gap:9px;padding:9px 10px;display:flex}.class-delete-confirm span{min-width:0;color:var(--text-soft);flex:1;font-size:9px}.empty-state{color:var(--text-muted);text-align:center;padding:30px 20px}.summary-line{align-items:center;gap:10px;min-height:46px;margin-bottom:12px;display:flex}.summary-stat{border:1px solid var(--line);height:42px;color:var(--text-soft);background:var(--surface);border-radius:5px;align-items:center;gap:9px;padding:0 13px;display:flex}.summary-stat svg{color:var(--primary)}.summary-stat span{font-size:10px}.summary-stat strong{color:var(--text);margin-right:2px;font-size:15px}.summary-spacer,.filter-spacer{flex:1}.section-title{font-size:18px}.section-subtitle{color:var(--text-faint);margin-top:3px;font-size:10px}.filterbar,.content-toolbar,.task-page-head{border-bottom:1px solid var(--line);align-items:center;gap:8px;min-height:53px;padding:10px 12px;display:flex}.search-box{border:1px solid var(--line-strong);background:var(--surface);width:220px;height:31px;color:var(--text-faint);border-radius:5px;align-items:center;gap:8px;padding:0 10px;display:flex}.search-box:focus-within{border-color:var(--primary);box-shadow:0 0 0 3px var(--primary-soft)}.search-box input{min-width:0;color:var(--text);background:0 0;border:0;outline:0;flex:1;font-size:10px}.search-box input::placeholder,input::placeholder,textarea::placeholder{color:var(--text-faint)}.select-shell{border:1px solid var(--line-strong);height:31px;color:var(--text-faint);background:var(--surface);border-radius:5px;align-items:center;gap:5px;padding:0 8px;display:flex}.select-shell select{appearance:none;min-width:88px;color:var(--text-soft);background:0 0;border:0;outline:0;font-size:10px}.selected-count{color:var(--text-soft);font-size:10px}.auto-sync-label{color:var(--green);align-items:center;gap:5px;font-size:10px;font-weight:700;display:inline-flex}.check-col{width:38px}.action-col{width:124px}.roster-group-row td{border-top:1px solid var(--line-strong);border-bottom:1px solid var(--line);background:var(--surface-strong);height:40px}.roster-group-row:first-child td{border-top:0}.roster-group-row:hover td{background:var(--surface-strong)}.roster-group-toggle{width:100%;min-height:32px;color:var(--text-soft);text-align:left;background:0 0;border:0;align-items:center;gap:8px;padding:0;display:flex}.roster-group-toggle>svg:first-child{color:var(--text-faint)}.roster-group-toggle>svg:nth-child(2){color:var(--primary)}.roster-group-toggle strong{color:var(--text);font-size:11px}.roster-group-toggle span,.roster-group-toggle small{color:var(--text-soft);font-size:9px}.roster-group-toggle small{margin-left:auto;padding-right:4px}.roster-student-row td:nth-child(2){padding-left:24px}input[type=checkbox]{width:14px;height:14px;accent-color:var(--primary)}.row-actions{align-items:center;gap:4px;display:flex}.row-actions button{width:28px;height:28px;color:var(--text-faint);background:0 0;border:1px solid #0000;border-radius:4px;justify-content:center;align-items:center;display:inline-flex}.row-actions button:hover{border-color:var(--line);background:var(--surface-strong);color:var(--primary)}.row-actions button.danger-icon:hover{background:var(--red-soft);color:var(--red)}.table-footer{border-top:1px solid var(--line);min-height:45px;color:var(--text-faint);align-items:center;padding:0 13px;font-size:9px;display:flex}.pagination{gap:3px;margin-left:auto;display:flex}.pagination button{border:1px solid var(--line);background:var(--surface);width:27px;height:27px;color:var(--text-soft);border-radius:4px;justify-content:center;align-items:center;font-size:9px;display:inline-flex}.pagination button.active{border-color:var(--primary);background:var(--primary);color:#fff}.tabs{align-items:center;gap:3px;display:flex}.tabs button{min-height:30px;color:var(--text-soft);background:0 0;border:0;border-radius:4px;align-items:center;gap:6px;padding:0 10px;font-size:10px;display:inline-flex}.tabs button span{background:var(--surface-strong);border-radius:3px;justify-content:center;align-items:center;min-width:17px;height:17px;font-size:8px;display:inline-flex}.tabs button.active{background:var(--primary-soft);color:var(--primary);font-weight:650}.content-toolbar .search-box{margin-left:auto}.class-filter-menu{z-index:12;position:relative}.class-filter-trigger{border:1px solid var(--line-strong);width:164px;height:34px;color:var(--text-soft);background:var(--surface);cursor:pointer;border-radius:6px;align-items:center;gap:8px;padding:0 10px;transition:border-color .16s,background-color .16s,box-shadow .16s;display:flex}.class-filter-trigger:hover{border-color:color-mix(in srgb, var(--primary) 42%, var(--line-strong));background:var(--surface-strong)}.class-filter-trigger:focus-visible,.class-filter-menu.open .class-filter-trigger{border-color:var(--primary);box-shadow:0 0 0 3px var(--primary-soft);outline:0}.class-filter-trigger>span{text-align:left;text-overflow:ellipsis;white-space:nowrap;flex:1;min-width:0;overflow:hidden}.class-filter-chevron{flex:none;transition:transform .16s ease-out}.class-filter-menu.open .class-filter-chevron{transform:rotate(180deg)}.class-filter-popover{visibility:hidden;opacity:0;transform-origin:0 0;border:1px solid var(--line);background:var(--surface);pointer-events:none;border-radius:8px;width:210px;max-height:286px;padding:5px;transition:opacity .16s ease-out,transform .16s ease-out,visibility 0s linear .16s;position:absolute;top:calc(100% + 7px);left:0;overflow:auto;transform:translateY(-6px)scale(.985);box-shadow:0 14px 32px #10202629,0 3px 10px #10202614}.class-filter-menu.open .class-filter-popover{visibility:visible;opacity:1;pointer-events:auto;transition-delay:0s;transform:translateY(0)scale(1)}.class-filter-option{width:100%;min-height:36px;color:var(--text-soft);cursor:pointer;text-align:left;background:0 0;border:0;border-radius:5px;align-items:center;gap:7px;padding:0 9px 0 7px;font-size:12px;transition:color .14s,background-color .14s;display:flex}.class-filter-option:hover,.class-filter-option:focus-visible{color:var(--text);background:var(--surface-strong);outline:0}.class-filter-option.selected{color:var(--primary);background:var(--primary-soft);font-weight:700}.class-filter-check{flex:none;justify-content:center;align-items:center;width:16px;height:16px;display:inline-flex}.content-list .content-row{animation:.18s ease-out both content-row-reveal}@keyframes content-row-reveal{0%{opacity:0;transform:translateY(4px)}to{opacity:1;transform:translateY(0)}}.content-row{border-bottom:1px solid var(--line);align-items:center;gap:13px;min-height:82px;padding:12px 15px;transition:background-color .15s;display:flex}.content-row:last-child{border-bottom:0}.content-row:hover{background:var(--surface-soft)}.content-row-clickable{cursor:pointer;outline:none}.content-row-clickable:focus-visible{background:var(--surface-soft);box-shadow:inset 3px 0 var(--primary)}.file-type-icon{width:39px;height:39px;color:var(--primary);background:var(--primary-soft);border-radius:5px;flex:none;justify-content:center;align-items:center;display:inline-flex}.file-type-icon.code{color:var(--violet);background:var(--violet-soft)}.content-main{flex:1;min-width:280px}.content-title-line{align-items:center;gap:8px;display:flex}.content-title-line h3{text-overflow:ellipsis;white-space:nowrap;font-size:12px;overflow:hidden}.content-meta{color:var(--text-faint);flex-wrap:wrap;gap:7px 14px;margin-top:8px;font-size:9px;display:flex}.content-meta span{align-items:center;gap:4px;display:inline-flex}.completion-block,.updated-block{flex-direction:column;gap:4px;width:105px;display:flex}.completion-block>span,.updated-block>span{color:var(--text-faint);font-size:8px}.completion-block strong,.updated-block strong{font-size:10px}.tiny-progress{background:var(--surface-strong);border-radius:4px;width:72px;height:4px;overflow:hidden}.tiny-progress i{background:var(--primary);height:100%;display:block}.content-progress-summary{border:1px solid var(--line);background:var(--surface-soft);border-radius:6px;grid-template-columns:repeat(5,1fr);display:grid}.content-progress-summary>div{border-right:1px solid var(--line);gap:5px;padding:14px 18px;display:grid}.content-progress-summary>div:last-child{border-right:0}.content-progress-summary span{color:var(--text-faint);font-size:10px}.content-progress-summary strong{font-size:21px}.class-progress-list{gap:18px;margin-top:18px;display:grid}.class-progress-group{border:1px solid var(--line);border-radius:6px;overflow:hidden}.class-progress-group>header{border-bottom:1px solid var(--line);background:var(--surface-soft);align-items:center;gap:14px;min-height:48px;padding:8px 13px;display:flex}.class-progress-group>header>div:first-child,.class-progress-counts{align-items:center;gap:8px;display:flex}.class-progress-group header svg{color:var(--primary)}.class-progress-group header span:not(.status-badge){color:var(--text-faint);font-size:10px}.class-progress-counts{margin-left:auto}.class-progress-group table{min-width:760px}@media (width<=720px){.content-progress-summary{grid-template-columns:repeat(2,1fr)}.content-progress-summary>div:nth-child(2n){border-right:0}.content-progress-summary>div:not(:last-child){border-bottom:1px solid var(--line)}.class-progress-group>header{flex-direction:column;align-items:flex-start}.class-progress-counts{margin-left:0}.completed-content-row{grid-template-columns:42px minmax(180px,1fr) 22px}.completed-content-row>div:nth-child(3),.completed-content-row>div:nth-child(4){display:none}.student-score-summary{grid-template-columns:1fr}.student-score-summary>div{border-right:0;border-bottom:1px solid var(--line)}.student-score-summary>div:last-child{border-bottom:0}}.spin{animation:.9s linear infinite update-spin}@keyframes update-spin{to{transform:rotate(360deg)}}.editor-overlay{z-index:1200;background:var(--bg);position:fixed;inset:0}.editor-page{flex-direction:column;height:100%;display:flex}.editor-header{border-bottom:1px solid var(--line);background:var(--surface);align-items:center;gap:12px;min-height:66px;padding:10px 22px;display:flex}.editor-header h2{font-size:16px}.editor-header p{color:var(--text-faint);margin-top:3px;font-size:9px}.editor-header-actions{gap:8px;margin-left:auto;display:flex}.editor-layout{flex:1;grid-template-columns:minmax(0,1fr) 310px;min-height:0;display:grid}.editor-main{flex-direction:column;min-width:0;padding:18px 22px;display:flex;overflow:auto}.field-label{color:var(--text-soft);margin:0 0 7px;font-size:10px;font-weight:650;display:block}.title-input,.modal-form input,.modal-form select,.publish-settings input,.publish-settings select,.inline-select select{border:1px solid var(--line-strong);background:var(--surface);width:100%;height:36px;color:var(--text);border-radius:5px;outline:0;padding:0 10px;font-size:11px}.title-input:focus,.modal-form input:focus,.modal-form select:focus,.publish-settings input:focus,.publish-settings select:focus{border-color:var(--primary);box-shadow:0 0 0 3px var(--primary-soft)}.title-input{height:42px;font-size:15px;font-weight:650}.publish-settings .duration-input{max-width:150px}.editor-type-row{align-items:center;gap:10px;margin:12px 0 15px;display:flex}.editor-type-row .segmented,.hidden-file-input{display:none}.segmented{border:1px solid var(--line);background:var(--surface-strong);border-radius:5px;padding:3px;display:flex}.segmented button{height:29px;color:var(--text-soft);background:0 0;border:0;border-radius:4px;align-items:center;gap:6px;padding:0 11px;font-size:10px;display:inline-flex}.segmented button.active{background:var(--surface);color:var(--primary);box-shadow:0 1px 3px #00000014}.char-count{color:var(--text-faint);margin-left:auto;font-size:9px}.content-editor-textarea{resize:none;border:1px solid var(--line-strong);background:var(--surface);min-height:340px;color:var(--text);white-space:pre;tab-size:4;border-radius:5px;outline:0;flex:1;padding:17px;font-size:13px;line-height:1.8}.content-editor-textarea:focus{border-color:var(--primary);box-shadow:0 0 0 3px var(--primary-soft)}.format-notice,.info-callout,.warning-callout,.assignment-note{color:var(--primary);background:var(--primary-soft);border:1px solid #bcdcff;border-radius:5px;align-items:flex-start;gap:8px;margin-top:10px;padding:9px 10px;font-size:9px;line-height:1.5;display:flex}.format-notice svg,.info-callout svg,.warning-callout svg,.assignment-note svg{flex:none}.warning-callout{color:var(--amber);background:var(--amber-soft);border-color:#f0cb78}.publish-settings{border-left:1px solid var(--line);background:var(--surface);padding:19px;overflow:auto}.publish-settings h3{margin-bottom:17px;font-size:13px}.assignment-group{margin-top:0}.assignment-modes{grid-template-columns:repeat(2,minmax(0,1fr));gap:6px;margin-bottom:8px;display:grid}.assignment-modes button{border:1px solid var(--line);background:var(--surface-soft);min-height:31px;color:var(--text-soft);cursor:pointer;border-radius:5px;padding:5px 6px;font-size:9px;transition:border-color .18s,background-color .18s,color .18s}.assignment-modes button:hover,.assignment-modes button.active{border-color:var(--primary);background:var(--primary-soft);color:var(--primary)}.assignment-options{border:1px solid var(--line);background:var(--surface-soft);border-radius:5px;gap:2px;max-height:145px;margin:0 0 8px;padding:5px;display:grid;overflow:auto}.assignment-option{min-height:29px;color:var(--text-soft);cursor:pointer;border-radius:4px;align-items:center;gap:7px;margin:0;padding:4px 5px;font-size:9px;font-weight:500;display:flex}.assignment-option:hover{background:var(--surface-strong)}.assignment-option input{width:14px;height:14px;accent-color:var(--primary);margin:0}.assignment-option span{text-overflow:ellipsis;white-space:nowrap;min-width:0;overflow:hidden}.assignment-option small{color:var(--text-faint);font-family:var(--mono);margin-left:4px}.assignment-empty{color:var(--text-faint);text-align:center;padding:10px 5px;font-size:9px}.assignment-selection-summary{border:1px solid var(--line);min-width:0;color:var(--primary);background:var(--primary-soft);border-radius:5px;align-items:flex-start;gap:7px;padding:8px;font-size:9px;line-height:1.45;display:flex}.assignment-selection-summary svg{flex:none}.assignment-selection-summary span{overflow-wrap:anywhere}.publish-settings>label,.modal-form label,.inline-select{color:var(--text-soft);flex-direction:column;gap:6px;margin-bottom:14px;font-size:10px;font-weight:600;display:flex}.setting-group{margin:17px 0}.setting-label{color:var(--text-soft);margin-bottom:8px;font-size:10px;font-weight:600;display:block}.radio-cards{grid-template-columns:1fr 1fr;gap:7px;display:grid}.radio-cards button{border:1px solid var(--line);background:var(--surface-soft);min-height:58px;color:var(--text-soft);text-align:left;border-radius:5px;align-items:center;gap:8px;padding:8px;display:flex}.radio-cards button.active{border-color:var(--primary);color:var(--primary);background:var(--primary-soft)}.radio-cards span{flex-direction:column;gap:3px;display:flex}.radio-cards strong{font-size:9px}.radio-cards small{font-size:8px}.toggle-row{border-top:1px solid var(--line);border-bottom:1px solid var(--line);align-items:center;gap:10px;margin:15px 0;padding:11px 0;display:flex}.toggle-row>div:first-child{flex-direction:column;flex:1;gap:3px;min-width:0;display:flex}.toggle-row strong{font-size:10px}.toggle-row span{color:var(--text-faint);font-size:8px}.toggle{background:var(--line-strong);border:0;border-radius:20px;flex:none;width:36px;height:20px;padding:0;transition:background-color .2s;position:relative}.toggle i{background:#fff;border-radius:50%;width:14px;height:14px;transition:left .2s;position:absolute;top:3px;left:3px;box-shadow:0 1px 3px #0003}.toggle.on{background:var(--primary)}.toggle.on i{left:19px}.modal-backdrop{z-index:100;-webkit-backdrop-filter:blur(2px);backdrop-filter:blur(2px);background:#050d1594;justify-content:center;align-items:center;padding:24px;display:flex;position:fixed;inset:0}.modal{border:1px solid var(--line);background:var(--surface);width:min(420px,100%);max-height:calc(100vh - 48px);box-shadow:var(--shadow-lg);border-radius:7px;overflow:auto}.modal.wide{width:min(920px,100%)}.modal-header{border-bottom:1px solid var(--line);align-items:flex-start;gap:14px;min-height:67px;padding:16px 18px;display:flex}.modal-header>div:first-child{flex:1;min-width:0}.modal-header h2{font-size:16px}.modal-header p{color:var(--text-faint);margin-top:5px;font-size:9px;line-height:1.5}.modal-body{padding:18px}.modal-actions{justify-content:flex-end;gap:8px;margin-top:19px;display:flex}.form-error{color:var(--red);align-items:center;gap:6px;margin:8px 0;font-size:10px;display:flex}.form-success{color:var(--teal,#0f9a83);align-items:center;gap:6px;margin:8px 0;font-size:10px;display:flex}.confirm-content{text-align:center}.confirm-icon{width:48px;height:48px;color:var(--amber);background:var(--amber-soft);border-radius:50%;justify-content:center;align-items:center;margin:2px auto 14px;display:flex}.confirm-icon.danger{color:var(--red);background:var(--red-soft)}.confirm-content p{color:var(--text-soft);font-size:11px;line-height:1.8}.confirm-content .modal-actions{justify-content:center}.import-flow .stepper{justify-content:center;align-items:center;margin-bottom:17px;display:flex}.stepper span{border:1px solid var(--line-strong);width:24px;height:24px;color:var(--text-faint);border-radius:50%;justify-content:center;align-items:center;font-size:9px;display:flex}.stepper span.active{border-color:var(--primary);background:var(--primary);color:#fff}.stepper i{background:var(--line);width:66px;height:1px}.dropzone{border:1px dashed var(--line-strong);background:var(--surface-soft);border-radius:6px;flex-direction:column;justify-content:center;align-items:center;gap:7px;min-height:158px;transition:border-color .18s,background-color .18s;display:flex}.dropzone:hover,.dropzone.has-file{border-color:var(--primary);background:var(--primary-soft)}.dropzone input{display:none}.dropzone-icon{width:48px;height:48px;color:var(--primary);background:var(--surface);box-shadow:var(--shadow);border-radius:50%;justify-content:center;align-items:center;display:flex}.dropzone strong{font-size:11px}.dropzone span{color:var(--text-faint);font-size:9px}.import-note{border:1px solid var(--line);background:var(--surface-soft);border-radius:5px;gap:10px;margin:13px 0;padding:10px;display:flex}.import-note svg{color:var(--primary);flex:none}.import-note strong{font-size:10px}.import-note p{color:var(--text-soft);margin-top:4px;font-size:9px;line-height:1.5}.settings-layout{grid-template-columns:190px minmax(0,1fr);gap:14px;display:grid}.settings-index{border:1px solid var(--line);border-radius:var(--radius);background:var(--surface);box-shadow:var(--shadow);flex-direction:column;align-self:start;gap:4px;padding:8px;display:flex}.settings-index button{min-height:38px;color:var(--text-soft);text-align:left;background:0 0;border:0;border-radius:4px;align-items:center;gap:9px;padding:0 10px;font-size:10px;display:flex}.settings-index button span{min-width:0}.settings-index button:hover{background:var(--surface-soft)}.settings-index button.active{background:var(--primary-soft);color:var(--primary);font-weight:650}.settings-content{flex-direction:column;gap:13px;min-width:0;display:flex}.settings-content.single{max-width:900px;margin:0 auto}.profile-setting{align-items:center;gap:12px;min-height:78px;padding:12px 16px;display:flex}.large-avatar{width:47px;height:47px;font-size:16px}.profile-setting>div:nth-child(2){flex-direction:column;flex:1;gap:5px;min-width:0;display:flex}.profile-setting span{color:var(--text-faint);font-size:9px}.setting-rows{border-top:1px solid var(--line)}.setting-row{border-bottom:1px solid var(--line);align-items:center;gap:11px;min-height:63px;padding:10px 16px;display:flex}.setting-row:last-child{border-bottom:0}.setting-row-icon{width:32px;height:32px;color:var(--primary);background:var(--primary-soft);border-radius:5px;flex:none;justify-content:center;align-items:center;display:flex}.setting-row>div:nth-child(2){flex-direction:column;flex:1;gap:4px;min-width:0;display:flex}.setting-row span{color:var(--text-faint);font-size:8px}.update-card{border:1px solid var(--line);background:var(--surface-soft);border-radius:5px;align-items:center;gap:12px;min-height:69px;margin:12px;padding:11px;display:flex}.update-icon{width:40px;height:40px;color:var(--primary);background:var(--primary-soft);border-radius:5px;flex:none;justify-content:center;align-items:center;display:flex}.update-card>div:nth-child(2){flex-direction:column;flex:1;gap:4px;min-width:0;display:flex}.update-card span{color:var(--text-faint);font-size:8px}.server-detail-grid{grid-template-columns:repeat(3,1fr);gap:10px;padding:13px;display:grid}.server-detail-grid>div{border:1px solid var(--line);background:var(--surface-soft);border-radius:5px;flex-direction:column;gap:5px;padding:12px;display:flex}.server-detail-grid svg{color:var(--primary);margin-bottom:6px}.server-detail-grid span{color:var(--text-faint);font-size:8px}.server-detail-grid strong{font-size:10px}.settings-save{justify-content:flex-end;padding:0 13px 13px;display:flex}.student-welcome{border-left-color:var(--cyan);min-height:122px}.streak{border-left:1px solid var(--line);min-width:95px;margin-left:auto;padding-left:21px}.streak span{color:var(--text-faint);font-size:9px;display:block}.streak strong{color:var(--amber);margin-top:4px;font-size:30px;display:block}.streak small{margin-left:3px;font-size:10px}.continue-card{border:1px solid var(--line);border-radius:var(--radius);background:var(--surface);min-height:119px;box-shadow:var(--shadow);align-items:center;gap:16px;margin:14px 0;padding:17px 19px;display:flex}.continue-icon{width:52px;height:52px;color:var(--primary);background:var(--primary-soft);border-radius:6px;flex:none;justify-content:center;align-items:center;display:flex}.continue-main{flex:1;min-width:0}.continue-main h3{font-size:15px}.task-tags{flex-wrap:wrap;gap:5px;margin-top:7px;display:flex}.task-tags span{color:var(--text-soft);background:var(--surface-strong);border-radius:3px;padding:3px 6px;font-size:8px}.continue-progress{align-items:center;gap:9px;margin-top:9px;display:flex}.continue-progress>div{background:var(--surface-strong);border-radius:5px;width:min(260px,70%);height:5px;overflow:hidden}.continue-progress i{background:var(--primary);height:100%;display:block}.continue-progress span{color:var(--text-faint);font-size:8px}.student-grid{grid-template-columns:minmax(0,1.1fr) minmax(360px,.9fr);gap:12px;display:grid}.student-metrics{margin-bottom:18px}.student-metrics+.continue-card{margin-top:0}.compact-task-list{padding:4px 14px}.compact-task-list>button{border:0;border-bottom:1px solid var(--line);text-align:left;background:0 0;align-items:center;gap:10px;width:100%;min-height:60px;padding:8px 0;display:flex}.compact-task-list>button:last-child{border-bottom:0}.compact-task-list>button:hover strong{color:var(--primary)}.compact-task-list .file-type-icon{width:34px;height:34px}.compact-task-list button>div:nth-child(2){flex-direction:column;flex:1;gap:4px;min-width:0;display:flex}.compact-task-list strong{text-overflow:ellipsis;white-space:nowrap;font-size:10px;overflow:hidden}.compact-task-list span{color:var(--text-faint);font-size:8px}.score-list{padding:4px 14px}.score-row{border-bottom:1px solid var(--line);grid-template-columns:1.5fr repeat(3,.7fr);align-items:center;gap:8px;min-height:60px;display:grid}.score-row:last-child{border-bottom:0}.score-row>div{flex-direction:column;gap:4px;display:flex}.score-row span{color:var(--text-faint);font-size:8px}.score-row strong{font-size:9px}.task-page-head{border:1px solid var(--line);border-radius:var(--radius);background:var(--surface);margin-bottom:12px}.task-page-head .search-box{margin-left:auto}.task-card-grid{grid-template-columns:repeat(3,minmax(0,1fr));gap:12px;display:grid}.task-card{border:1px solid var(--line);border-radius:var(--radius);background:var(--surface);min-width:0;box-shadow:var(--shadow);padding:16px}.task-card-top{justify-content:space-between;align-items:flex-start;display:flex}.task-card h3{text-overflow:ellipsis;white-space:nowrap;margin-top:14px;font-size:13px;overflow:hidden}.task-details{flex-direction:column;gap:8px;margin:13px 0 16px;display:flex}.task-details span{color:var(--text-soft);align-items:center;gap:7px;font-size:9px;display:flex}.metric-blue{color:var(--primary)}.test-intro,.result-page{min-height:calc(100vh - 107px);padding:24px}.test-intro-card,.result-card{border:1px solid var(--line);background:var(--surface);width:min(630px,100%);box-shadow:var(--shadow);text-align:center;border-radius:7px;margin:30px auto 0;padding:28px}.test-intro-icon,.result-check{width:61px;height:61px;color:var(--primary);background:var(--primary-soft);border-radius:50%;justify-content:center;align-items:center;margin:0 auto 13px;display:flex}.test-intro-card h2,.result-card h2{font-size:22px}.test-intro-card>p,.result-card>p{max-width:480px;color:var(--text-soft);margin:9px auto 18px;font-size:10px;line-height:1.75}.test-rule-grid,.result-grid{grid-template-columns:repeat(3,1fr);gap:8px;margin:18px 0;display:grid}.test-rule-grid>div,.result-grid>div{border:1px solid var(--line);background:var(--surface-soft);border-radius:5px;flex-direction:column;align-items:center;gap:6px;min-width:0;padding:14px 8px;display:flex}.test-rule-grid svg{color:var(--primary)}.test-rule-grid span,.result-grid span{color:var(--text-faint);font-size:8px}.test-rule-grid strong{font-size:10px}.test-intro-card .warning-callout{text-align:left;justify-content:center;margin:15px 0}.test-intro-card>.primary-button{min-width:160px}.result-check{color:var(--green);background:var(--green-soft)}.result-grid{grid-template-columns:repeat(4,1fr)}.result-grid strong{font-size:25px}.result-grid small{color:var(--text-soft);margin-left:3px;font-size:8px;font-weight:500}.result-actions{justify-content:center;gap:9px;margin-top:20px;display:flex}.typing-screen{background:var(--surface-soft);flex-direction:column;height:calc(100vh - 107px);min-height:400px;display:flex}.typing-toolbar{border-bottom:1px solid var(--line);background:var(--surface);align-items:center;gap:14px;min-height:57px;padding:8px 17px;display:flex}.typing-toolbar .back-button{border:0;padding:0 5px}.test-title{flex-direction:column;gap:2px;min-width:180px;display:flex}.test-title span{font-size:11px;font-weight:650}.test-title small{color:var(--text-faint);font-size:8px}.test-progress{align-items:center;gap:8px;width:min(290px,25vw);display:flex}.test-progress span{color:var(--text-soft);white-space:nowrap;font-size:8px}.test-progress>div{background:var(--surface-strong);border-radius:5px;flex:1;height:5px;overflow:hidden}.test-progress i{background:var(--primary);height:100%;display:block}.test-clock{min-width:84px;color:var(--primary);justify-content:center;align-items:center;gap:7px;margin-left:auto;display:flex}.test-clock strong{font-family:Cascadia Mono,monospace;font-size:15px}.test-clock.urgent{color:var(--red)}.typing-workspace{--typing-scroll-runway:clamp(220px, 26vw, 360px);cursor:text;flex-direction:column;flex:1;gap:16px;min-height:0;padding:clamp(20px,4vh,44px) clamp(24px,8vw,120px);display:flex;position:relative;overflow:auto}.typing-pane{border:1px solid var(--line);background:var(--surface);width:min(1060px,100%);box-shadow:0 4px 16px color-mix(in srgb, var(--text) 5%, transparent);border-radius:12px;margin:0 auto;position:relative;overflow:hidden}.typing-pane-label{border-bottom:1px solid var(--line);background:var(--surface-soft);justify-content:space-between;align-items:center;min-height:38px;padding:0 15px;display:flex}.typing-pane-label span{color:var(--text);font-size:11px;font-weight:700}.typing-pane-label small{color:var(--text-faint);font-size:9px}.target-text{min-height:105px;max-height:31vh;color:var(--text);white-space:pre;word-break:normal;margin:0;padding:20px 22px 20px 70px;font-family:Microsoft YaHei UI,sans-serif;font-size:clamp(17px,1.5vw,22px);line-height:1.9;overflow:auto}.target-text.code-target{tab-size:4;white-space:pre;word-break:normal;font-family:Cascadia Mono,Consolas,monospace;font-size:16px;line-height:1.7}.target-text span{border-radius:2px;transition:color .12s,background-color .12s}.typing-line{border-radius:4px;width:max-content;min-width:100%;min-height:1.9em;display:block;position:relative}.typing-line:before{content:attr(data-line-number);width:38px;color:var(--text-faint);text-align:right;opacity:.72;justify-content:flex-end;align-items:center;font-family:Cascadia Mono,Consolas,monospace;font-size:.72em;line-height:1;display:flex;position:absolute;top:0;bottom:0;left:-52px}.typing-line:after{content:"";width:var(--typing-scroll-runway);height:1px;display:inline-block}.typing-line.active-line{background:color-mix(in srgb, var(--primary) 9%, transparent);box-shadow:-56px 0 0 color-mix(in srgb, var(--primary) 9%, transparent), 18px 0 0 color-mix(in srgb, var(--primary) 9%, transparent)}.typing-line.active-line:before{color:var(--primary);opacity:1;font-weight:700}.target-text .target-current-character{background:var(--primary);min-width:.62em;box-shadow:0 0 0 2px var(--primary-soft);border-radius:3px;display:inline-block;color:#fff!important}.target-text .target-mistyped:not(.target-current-character){background:var(--red-soft);box-shadow:inset 0 -2px var(--red);border-radius:2px;color:var(--red)!important}.target-text .target-position-marker{vertical-align:-.14em;width:3px;min-width:3px;height:1.08em;margin-left:2px}.target-text.code-target .typing-line{min-height:1.7em}.target-text span.correct{color:var(--green);background:var(--green-soft)}.target-text span.wrong{color:var(--red);background:var(--red-soft);text-decoration:underline;-webkit-text-decoration-color:var(--red);text-decoration-color:var(--red);text-underline-offset:4px}.target-text span.current{color:#fff;background:var(--primary);box-shadow:0 0 0 2px var(--primary-soft)}.target-text span.syntax-keyword{color:#9b59d0}.target-text span.syntax-string{color:#1b9a67}.target-text span.syntax-number{color:#c27b16}.target-text span.syntax-comment{color:var(--text-faint);font-style:italic}.target-text span.syntax-builtin{color:#1686b7}.target-text span.syntax-operator{color:#c44c75}.target-text span.correct{color:var(--green)}.target-text span.wrong{color:var(--red)}.target-text span.current{color:#fff}.input-pane{min-height:132px}.typed-preview{min-height:93px;max-height:27vh;color:var(--text);white-space:pre;word-break:normal;margin:0;padding:20px 22px 20px 70px;font-family:Microsoft YaHei UI,sans-serif;font-size:clamp(17px,1.5vw,22px);line-height:1.9;overflow:auto}.typed-preview.code-target{white-space:pre;word-break:normal;tab-size:4;font-family:Cascadia Mono,Consolas,monospace;font-size:16px;line-height:1.7}.typed-preview .typing-line{min-height:1.9em;display:block}.typed-preview.code-target .typing-line{min-height:1.7em}.typed-preview .line-break-wrong:after{content:"↵";color:var(--red);opacity:.9;margin-left:4px;display:none}.typed-preview .typed-correct{color:var(--green)}.target-line-break,.typed-line-break{opacity:.8;margin-left:4px;font-family:Cascadia Mono,Consolas,monospace;font-size:.72em}.target-line-break{color:var(--text-faint)}.typed-preview .typed-wrong{color:var(--red);background:var(--red-soft);text-decoration:underline;-webkit-text-decoration-color:var(--red);text-decoration-color:var(--red);text-underline-offset:4px}.input-caret{vertical-align:-.15em;background:var(--primary);width:2px;height:1.05em;margin-left:2px;animation:1s step-end infinite typing-caret;display:inline-block}@keyframes typing-caret{50%{opacity:0}}.typing-input{resize:none;color:#0000;width:100%;height:calc(100% - 38px);caret-color:var(--primary);white-space:pre;word-break:normal;opacity:.01;cursor:text;background:0 0;border:0;outline:0;padding:20px 22px 20px 70px;font-family:Microsoft YaHei UI,sans-serif;font-size:clamp(17px,1.5vw,22px);font-weight:400;line-height:1.9;position:absolute;inset:38px 0 0;overflow:auto}.typing-input::-webkit-scrollbar{height:8px}.typing-input::-webkit-scrollbar-thumb{background:color-mix(in srgb, var(--text-faint) 45%, transparent);border-radius:4px}.code-workspace .typing-input{white-space:pre;word-break:normal;tab-size:4;font-family:Cascadia Mono,Consolas,monospace;font-size:16px;line-height:1.7}.copybook-workspace{grid-template-rows:minmax(310px,1fr);grid-template-columns:minmax(0,1060px);place-content:stretch center;gap:0;display:grid}.copybook-workspace .typing-sheet{grid-area:1/1;width:100%;height:100%;min-height:310px;margin:0}.copybook-workspace .typing-document{box-sizing:border-box;scroll-behavior:smooth;scrollbar-gutter:stable both-edges;background:0 0;width:100%;height:calc(100% - 38px);min-height:0;max-height:none}.copybook-workspace .typing-capture-input{z-index:-1;pointer-events:none;caret-color:#0000;opacity:0;overflow:hidden}.copybook-workspace .target-text span.correct{box-shadow:none;background:0 0;text-decoration:none;color:var(--green)!important}.copybook-workspace .target-text span.wrong{background:var(--red-soft);box-shadow:none;border-radius:3px;text-decoration:none;color:var(--red)!important}.copybook-workspace .typed-line-run,.copybook-workspace .target-line-suffix{white-space:pre}.copybook-workspace .typed-run-character,.copybook-workspace .target-reference-character{white-space:pre;min-width:0;display:inline;box-shadow:none!important;text-decoration:none!important}.copybook-workspace .typed-run-character{z-index:1;position:relative}.copybook-workspace .typed-tab,.copybook-workspace .target-tab{vertical-align:-.1em;white-space:pre;tab-size:4;width:4ch;height:1em;display:inline-block;overflow:hidden}.copybook-workspace .typed-run-character.wrong{min-width:0;color:var(--red);background:var(--red-soft);box-shadow:none;white-space:pre;display:inline-block}.copybook-workspace .typing-follow-anchor{vertical-align:-.15em;pointer-events:none;width:0;height:1em;display:inline-block;position:relative}.copybook-workspace .typing-follow-anchor:after{content:"";z-index:3;background:var(--primary);width:2px;height:1.18em;box-shadow:0 0 0 1px color-mix(in srgb, var(--surface) 55%, transparent);border-radius:2px;animation:1.05s step-end infinite copybook-caret-blink;position:absolute;top:-.08em;left:0}@keyframes copybook-caret-blink{0%,52%{opacity:1}53%,to{opacity:0}}@media (prefers-reduced-motion:reduce){.copybook-workspace .typing-follow-anchor:after{animation:none}}.web-data-loading-page .login-layout{width:min(460px,100% - 40px);height:auto;min-height:0;margin:auto}.web-data-loading-page .login-form-panel{min-height:0;padding:52px 38px 34px}.web-data-loading-page .startup-security{margin-top:28px}.pause-overlay{background:color-mix(in srgb, var(--surface) 93%, transparent);-webkit-backdrop-filter:blur(4px);backdrop-filter:blur(4px);cursor:default;flex-direction:column;justify-content:center;align-items:center;gap:9px;display:flex;position:absolute;inset:0}.pause-overlay svg{color:var(--primary)}.pause-overlay strong{font-size:17px}.pause-overlay span{color:var(--text-soft);margin-bottom:7px;font-size:10px}.typing-stats{border-top:1px solid var(--line);background:var(--surface);align-items:center;min-height:72px;padding:7px 18px;display:flex}.typing-stats>div:not(.typing-hint){border-right:1px solid var(--line);grid-template-rows:1fr 1fr;grid-template-columns:24px 1fr;min-width:122px;padding:3px 18px;display:grid}.typing-stats svg{color:var(--primary);grid-row:1/3;align-self:center}.typing-stats span{color:var(--text-faint);font-size:8px}.typing-stats strong{font-size:13px}.typing-stats small{color:var(--text-soft);font-size:8px;font-weight:500}.typing-stats .error-stat svg,.typing-stats .error-stat strong{color:var(--red)}.typing-hint{color:var(--text-faint);align-items:center;gap:7px;margin-left:auto;font-size:8px;display:flex}.typing-hint svg{color:var(--green)}.toast{z-index:200;min-height:42px;color:var(--green);background:var(--surface);box-shadow:var(--shadow-lg);border:1px solid #b7e6d0;border-radius:5px;align-items:center;gap:9px;padding:0 14px;font-size:11px;font-weight:600;animation:.2s ease-out toast-in;display:flex;position:fixed;bottom:24px;right:24px}.toast.error{color:var(--red);border-color:#f2b9c0}@keyframes toast-in{0%{opacity:0;transform:translateY(8px)}to{opacity:1;transform:translateY(0)}}.login-titlebar{justify-content:space-between;padding:0 14px}.login-layout{height:calc(100vh - var(--titlebar-height));grid-template-columns:minmax(360px,43%) minmax(440px,57%);display:grid}.login-brand-panel{color:#eef7ff;background:#0b1724;justify-content:center;align-items:center;display:flex;position:relative;overflow:hidden}.login-brand-panel:before{content:"";opacity:.28;background-image:linear-gradient(#ffffff0a 1px,#0000 1px),linear-gradient(90deg,#ffffff0a 1px,#0000 1px);background-size:42px 42px;position:absolute;inset:0;-webkit-mask-image:linear-gradient(#0000,#000 25% 75%,#0000);mask-image:linear-gradient(#0000,#000 25% 75%,#0000)}.brand-panel-content{text-align:center;width:min(420px,80%);position:relative}.login-logo{background:var(--primary);border:1px solid #ffffff38;border-radius:10px;justify-content:center;align-items:center;width:66px;height:66px;margin:0 auto 18px;display:flex;box-shadow:0 14px 32px #087cf040}.login-logo span{font-family:Cascadia Mono,monospace;font-size:37px;font-weight:800}.brand-panel-content h1{font-size:34px}.brand-panel-content>p{color:#92a8ba;margin-top:10px;font-size:12px}.brand-metrics{border-top:1px solid #ffffff17;border-bottom:1px solid #ffffff17;grid-template-columns:repeat(3,1fr);margin-top:43px;display:grid}.brand-metrics>div{border-right:1px solid #ffffff17;flex-direction:column;gap:5px;padding:15px 8px;display:flex}.brand-metrics>div:last-child{border-right:0}.brand-metrics strong{color:#fff;font-size:13px}.brand-metrics span{color:#6f879a;font-size:9px}.version-label{color:#556d7f;font-size:9px;position:absolute;bottom:16px;left:22px}.login-form-panel{background:var(--surface);justify-content:center;align-items:center;display:flex}.form-intro h2{font-size:23px}.form-intro p{color:var(--text-faint);margin-top:6px;font-size:10px}.role-switch{border:1px solid var(--line);background:var(--surface-strong);border-radius:6px;grid-template-columns:1fr 1fr;gap:4px;margin-bottom:19px;padding:4px;display:grid}.role-switch button{height:34px;color:var(--text-soft);background:0 0;border:0;border-radius:4px;justify-content:center;align-items:center;gap:7px;font-size:11px;display:flex}.role-switch button.active{background:var(--surface);color:var(--primary);font-weight:650;box-shadow:0 1px 4px #00000017}.role-switch.single{grid-template-columns:1fr}.input-shell{border:1px solid var(--line-strong);height:41px;color:var(--text-faint);background:var(--surface);border-radius:5px;align-items:center;gap:9px;margin-bottom:15px;padding:0 11px;display:flex}.input-shell:focus-within{border-color:var(--primary);box-shadow:0 0 0 3px var(--primary-soft);color:var(--primary)}.input-shell input{min-width:0;color:var(--text);background:0 0;border:0;outline:0;flex:1;font-size:12px}.input-icon{width:25px;height:30px;color:var(--text-faint);background:0 0;border:0;justify-content:center;align-items:center;padding:0;display:flex}.form-options{align-items:center;margin:2px 0 14px;display:flex}.form-options label{color:var(--text-soft);align-items:center;gap:7px;font-size:9px;display:flex}.form-options button{margin-left:auto}.login-submit{width:100%;min-height:41px}.register-row{color:var(--text-faint);justify-content:center;gap:5px;margin-top:15px;font-size:9px;display:flex}.connection-state{border-top:1px solid var(--line);color:var(--text-faint);justify-content:center;align-items:center;gap:8px;margin-top:29px;padding-top:16px;font-size:8px;display:flex}.server-endpoint-config,.host-mode-notice{margin:0 0 18px}.connection-mode-switch{grid-template-columns:1fr 1fr;gap:5px;margin:0 0 10px;display:grid}.connection-mode-switch button{border:1px solid var(--line-strong);background:var(--surface);min-height:34px;color:var(--text-soft);border-radius:5px;justify-content:center;align-items:center;gap:6px;font-size:10px;display:inline-flex}.connection-mode-switch button.active{border-color:var(--primary);background:var(--primary-soft);color:var(--primary);font-weight:650}.endpoint-hint{color:var(--text-faint);text-overflow:ellipsis;white-space:nowrap;margin-top:6px;font-size:9px;display:block;overflow:hidden}.server-endpoint-row{border:1px solid var(--line-strong);min-height:40px;color:var(--text-faint);background:var(--surface);border-radius:5px;align-items:center;gap:8px;padding:0 8px 0 11px;display:flex}.server-endpoint-row:focus-within{border-color:var(--primary);box-shadow:0 0 0 3px var(--primary-soft);color:var(--primary)}.server-endpoint-row input{min-width:0;height:36px;color:var(--text);background:0 0;border:0;outline:0;flex:1;font-size:11px}.server-endpoint-row .secondary-button{min-height:30px;padding:0 9px;font-size:10px}.host-mode-notice{border:1px solid var(--primary);color:var(--primary);background:var(--primary-soft);border-radius:5px;align-items:flex-start;gap:8px;padding:10px 11px;font-size:11px;line-height:1.45;display:flex}.server-host-addresses{border-top:1px solid var(--line);flex-direction:column;grid-column:1/-1;gap:7px;padding-top:12px;display:flex}.server-host-addresses>span{color:var(--text-faint);font-size:11px}.server-host-addresses strong{color:var(--primary)}.server-host-addresses small{color:var(--text-muted);font-size:11px;line-height:1.5}.sync-settings{border-top:1px solid var(--line);gap:10px;margin:0 13px 13px;padding:14px;display:grid}.sync-settings-head{justify-content:space-between;align-items:center;gap:14px;display:flex}.sync-settings-head>div{gap:4px;display:grid}.sync-settings-head span{color:var(--text-faint);font-size:11px}.sync-settings label{color:var(--text-soft);gap:5px;font-size:11px;display:grid}.sync-settings input{border:1px solid var(--line-strong);background:var(--surface);width:100%;height:36px;color:var(--text);border-radius:5px;outline:0;padding:0 10px}.sync-settings input:focus{border-color:var(--primary);box-shadow:0 0 0 3px var(--primary-soft)}.sync-actions{flex-wrap:wrap;justify-content:flex-end;gap:8px;margin-top:3px;display:flex}@media (width<=1040px){.metric-grid{grid-template-columns:repeat(2,minmax(0,1fr))}.dashboard-grid,.student-grid{grid-template-columns:1fr}.task-card-grid{grid-template-columns:repeat(2,minmax(0,1fr))}.completion-block,.updated-block,.summary-stat{display:none}.typing-stats>div:not(.typing-hint){min-width:100px;padding:3px 10px}.typing-hint{display:none}}@media (width<=820px){:root{--sidebar-width:215px}.sidebar{z-index:80;top:var(--titlebar-height);box-shadow:var(--shadow-lg);transition:transform .22s;position:fixed;bottom:0;left:0;transform:translate(-100%)}.sidebar.open{transform:translate(0)}.mobile-menu{display:inline-flex}.page-content{padding:15px}.topbar{padding:10px 15px}.window-context{display:none}.login-layout{grid-template-columns:1fr}.login-brand-panel{display:none}.editor-layout{grid-template-columns:1fr;overflow:auto}.editor-main{overflow:visible}.publish-settings{border-top:1px solid var(--line);border-left:0}.settings-layout{grid-template-columns:1fr}.settings-index{grid-template-columns:repeat(4,1fr);display:grid}.settings-index button{justify-content:center;padding:0 4px}.settings-index button span{display:none}.typing-toolbar{gap:7px}.test-title,.test-progress{display:none}.test-clock{margin-left:auto}}.login-page .login-theme{z-index:3;position:fixed;top:22px;right:26px}.login-page .login-layout{z-index:1;width:min(440px,100%);height:auto;min-height:0;box-shadow:none;background:0 0;border:0;border-radius:0;grid-template-columns:none;margin:0;display:block;position:relative;overflow:visible}.desktop-app{border:1px solid var(--line);border-radius:14px;overflow:hidden;box-shadow:0 22px 54px #0917252e}.desktop-app .modal-backdrop{-webkit-app-region:no-drag;padding-top:16px;top:76px}.desktop-app .modal{-webkit-app-region:no-drag;max-height:calc(100vh - 116px)}.desktop-app .modal-header .icon-button{z-index:1;pointer-events:auto;-webkit-app-region:no-drag;position:relative}.startup-screen{background:0 0;width:100vw;height:100vh;padding:10px;display:block;position:relative;overflow:hidden}.startup-screen .login-windowbar{top:10px;left:10px;right:10px}.startup-screen .startup-card{border:1px solid var(--line);background:var(--surface);border-radius:14px;justify-content:center;align-items:center;width:100%;height:100%;min-height:0;padding:52px 34px 28px;display:flex;box-shadow:0 22px 54px #09172538}@media (width<=560px){.startup-screen .startup-card{padding:52px 24px 22px}.startup-card-content{min-height:min(470px,100vh - 92px)}}:root{--control-radius:7px;--control-height:40px}button{cursor:pointer}.primary-button,.secondary-button,.danger-button,.back-button{min-height:var(--control-height);border-radius:var(--control-radius);white-space:nowrap;padding:0 16px;font-size:14px;font-weight:650;transition:background-color .16s,border-color .16s,color .16s,box-shadow .16s}.primary-button:hover:not(:disabled){box-shadow:0 7px 18px color-mix(in srgb, var(--primary) 22%, transparent)}.secondary-button:hover:not(:disabled),.back-button:hover:not(:disabled){border-color:color-mix(in srgb, var(--primary) 58%, var(--line))}.text-button{border-radius:5px;align-items:center;gap:4px;min-height:34px;padding:0 8px;display:inline-flex}.text-button:hover:not(:disabled){background:var(--primary-soft)}.nav-item,.tabs button,.settings-index button,.assignment-modes button,.radio-cards button,.completed-content-row,.compact-task-list button,.content-row-clickable,.student-cell-button,.task-card button,.dropzone{cursor:pointer}.nav-item,.settings-index button,.tabs button,.assignment-modes button,.radio-cards button{transition:background-color .16s,border-color .16s,color .16s}.row-actions button{border-radius:6px;width:34px;height:34px}.notification span{display:none}.pagination-prev{transform:rotate(90deg)}.pagination button:disabled{opacity:.35}.task-empty{border:1px dashed var(--line-strong);background:var(--surface);border-radius:7px;grid-column:1/-1;min-height:220px}.settings-index button{justify-content:flex-start;width:100%}.profile-setting>.status-badge{margin-left:auto}.editor-type-row .segmented{display:none}@media (prefers-reduced-motion:reduce){*,:before,:after{scroll-behavior:auto!important;transition-duration:.01ms!important}}.update-login-page .update-form-panel{justify-content:center}.update-form-wrap{flex-direction:column;min-height:500px;display:flex}.update-form-wrap .startup-state-icon{border-radius:16px;width:68px;height:68px;margin:46px auto 22px}.update-form-wrap .startup-copy h1{font-size:24px}.update-form-wrap .startup-copy p{min-height:0}.update-form-wrap .startup-progress{margin-top:30px}.update-form-wrap .startup-actions{min-height:40px;margin-top:24px}.update-form-wrap .startup-actions .primary-button,.update-form-wrap .startup-actions .secondary-button{min-width:132px}.update-form-wrap .startup-actions .text-button{border:1px solid var(--line-strong);background:var(--surface);min-width:132px;color:var(--text-soft);border-radius:7px}.update-form-wrap .startup-actions .text-button:hover{border-color:color-mix(in srgb, var(--primary) 58%, var(--line));background:var(--primary-soft);color:var(--primary)}.update-form-wrap .startup-security{margin-top:auto}.student-connect-wrap{min-height:540px}.student-connect-wrap .startup-state-icon{margin-top:54px}.student-connect-form{margin-top:28px}.student-connect-form .startup-actions{justify-content:stretch;gap:10px}.student-connect-form .startup-actions button{flex:1}.student-connect-page .startup-copy>.mono{color:var(--primary);word-break:break-all;margin-top:8px;display:inline-block}@media (width<=560px){.update-form-wrap{min-height:470px}}[data-theme=dark] .login-page .login-form-panel{box-shadow:0 14px 38px #00000042}.login-page .login-theme-row{justify-content:flex-end;min-height:40px;margin-bottom:6px;display:flex}.login-page .login-app-brand{border-bottom:1px solid var(--line);align-items:center;gap:13px;padding-bottom:24px;display:flex}.login-page .login-app-brand img{object-fit:contain;flex:0 0 46px;width:46px;height:46px}.login-page .login-app-brand div{gap:3px;min-width:0;display:grid}.login-page .login-app-brand strong{color:var(--text);font-size:18px;font-weight:700;line-height:1.25}.login-page .login-app-brand span{color:var(--muted);font-size:12px;line-height:1.35}.login-page .login-version{color:var(--muted);text-align:center;font-size:11px;position:fixed;bottom:20px;left:0;right:0}@media (width<=560px){.login-page{place-items:start center;padding:68px 18px 48px}.login-page .login-theme{top:16px;right:18px}.login-page .login-layout{width:100%;min-height:0;margin:0}.login-page .login-form-panel{padding:28px 24px 24px}}.startup-screen{background:linear-gradient(#087cf009 1px, transparent 1px), linear-gradient(90deg, #087cf009 1px, transparent 1px), var(--bg);background-size:34px 34px;place-items:center;width:100vw;height:100vh;padding:32px;display:grid;overflow:hidden}.startup-card{border:1px solid var(--line);background:var(--surface);width:min(430px,100%);min-height:520px;box-shadow:var(--shadow-lg);border-radius:18px;flex-direction:column;align-items:center;padding:32px 34px 26px;display:flex}.startup-brand{align-items:center;gap:12px;width:100%;display:flex}.startup-brand img{border-radius:10px;width:42px;height:42px}.startup-brand div{gap:2px;display:grid}.startup-brand strong{font-size:17px;line-height:1.2}.startup-brand span{color:var(--text-soft);font-size:12px}.startup-state-icon{background:var(--primary-soft);width:76px;height:76px;color:var(--primary);border-radius:20px;flex:none;place-items:center;margin:58px 0 24px;display:grid}.startup-state-icon.ready{background:var(--green-soft);color:var(--green)}.startup-state-icon.error{background:var(--red-soft);color:var(--red)}.startup-copy{text-align:center;width:100%}.startup-copy h1{font-size:24px;line-height:1.35}.startup-copy p{min-height:42px;color:var(--text-soft);margin-top:8px;font-size:14px;line-height:1.5}.startup-copy>span{background:var(--surface-strong);color:var(--text-soft);border-radius:6px;margin-top:6px;padding:4px 9px;font-size:12px;display:inline-flex}.startup-progress{width:100%;margin-top:30px}.startup-progress-track{background:var(--surface-strong);border-radius:4px;height:8px;position:relative;overflow:hidden}.startup-progress-track>span{border-radius:inherit;background:var(--primary);height:100%;transition:width .2s;display:block}.startup-progress-track.indeterminate>span{width:38%;animation:1.2s ease-in-out infinite startup-indeterminate}@keyframes startup-indeterminate{0%{transform:translate(-110%)}to{transform:translate(280%)}}.startup-progress-meta{color:var(--text-soft);justify-content:space-between;margin-top:10px;font-size:13px;display:flex}.startup-progress-meta strong{color:var(--text)}.startup-progress small{color:var(--text-faint);margin-top:5px;font-size:12px;display:block}.startup-actions{justify-content:center;gap:10px;width:100%;min-height:42px;margin-top:24px;display:flex}.startup-actions button{min-height:40px}.startup-actions .text-button{color:var(--text-soft);background:0 0;border:0;padding:0 12px}.startup-actions .text-button:hover{color:var(--primary)}.startup-security{border-top:1px solid var(--line);width:100%;color:var(--text-faint);text-align:center;justify-content:center;align-items:center;gap:7px;margin-top:auto;padding-top:22px;font-size:12px;display:flex}.login-page .form-options{justify-content:space-between;gap:18px}.login-page .form-options label{min-height:28px}@media (prefers-reduced-motion:reduce){.spin,.startup-progress-track.indeterminate>span{animation-duration:2.4s}.startup-progress-track>span{transition:none}}@media (width<=520px){.startup-screen{padding:16px}.startup-card{min-height:min(520px,100vh - 32px);padding:26px 24px 22px}.startup-state-icon{margin-top:46px}}.login-page{background:0 0;width:100vw;height:100vh;padding:10px;position:relative;overflow:hidden}.login-windowbar{z-index:20;border:1px solid var(--line);background:var(--surface);height:42px;color:var(--text);-webkit-app-region:drag;border-bottom:0;border-radius:0;justify-content:space-between;align-items:center;padding-left:16px;display:flex;position:absolute;top:10px;left:10px;right:10px}.window-drag-title{align-items:center;gap:9px;font-size:13px;font-weight:650;display:flex}.window-drag-title img{border-radius:5px;width:22px;height:22px}.window-controls{-webkit-app-region:no-drag;align-items:stretch;height:100%;display:inline-flex}.window-controls button{width:42px;height:100%;color:var(--text-soft);background:0 0;border:0;place-items:center;transition:background-color .16s,color .16s;display:grid}.window-controls button:hover{background:var(--surface-strong);color:var(--text)}.window-controls .window-close:hover{background:var(--red);color:#fff}.login-page .login-layout{border:1px solid var(--line);background:var(--surface);border-radius:0;width:100%;height:100%;min-height:0;margin:0;padding-top:42px;display:block;overflow:hidden;box-shadow:0 22px 54px #09172538}.desktop-app{background:var(--bg)}.desktop-app .window-controls{border:1px solid var(--line);background:var(--surface);border-radius:7px;height:36px;margin-left:2px;overflow:hidden}.desktop-app .window-controls button{width:38px}@media (width<=560px){.login-page .login-form-panel{width:min(460px,100% - 20px);padding:28px 24px 24px}}.update-banner{z-index:1000;border:1px solid var(--line-strong);background:var(--surface);border-radius:8px;grid-template-columns:42px minmax(0,1fr) auto auto;align-items:center;gap:14px;width:min(680px,100vw - 40px);min-height:72px;padding:13px 14px;display:grid;position:fixed;bottom:22px;left:50%;transform:translate(-50%);box-shadow:0 16px 42px #0d1d2238}.update-banner-icon{width:42px;height:42px;color:var(--primary);background:var(--primary-soft);border-radius:6px;place-items:center;display:grid}.update-banner>div:nth-child(2){gap:3px;min-width:0;display:grid}.update-banner strong{color:var(--text);font-size:14px}.update-banner span{color:var(--muted);font-size:12px;line-height:1.45}@media (width<=680px){.update-banner{grid-template-columns:38px minmax(0,1fr) auto}.update-banner>.secondary-button{display:none}}.theme-toggle{border:1px solid var(--line);width:38px;height:38px;color:var(--muted);background:var(--surface);cursor:pointer;border-radius:6px;flex:0 0 38px;justify-content:center;align-items:center;padding:0;transition:color .16s,border-color .16s,background .16s;display:inline-flex}.theme-toggle:hover{color:var(--text);border-color:var(--line-strong);background:var(--surface-muted)}.theme-toggle:focus-visible{outline:2px solid var(--primary);outline-offset:2px}.login-page{background:var(--bg);place-items:center;min-height:100vh;padding:72px 32px 52px;display:grid;position:relative;overflow:auto}.login-page:before{content:"";pointer-events:none;background:linear-gradient(to bottom, color-mix(in srgb, var(--surface) 55%, transparent), transparent 280px);position:fixed;inset:0}.login-theme{z-index:3;position:fixed;top:22px;right:26px}.login-layout{z-index:1;width:min(440px,100%);height:auto;min-height:0;box-shadow:none;background:0 0;border:0;border-radius:0;margin:0;display:block;position:relative;overflow:visible}.login-form-panel{border:1px solid var(--line);background:var(--surface);border-radius:8px;padding:34px 36px 30px;display:block;box-shadow:0 12px 34px #1b262b14}[data-theme=dark] .login-form-panel{box-shadow:0 14px 38px #00000042}.login-form-wrap{width:100%;max-width:none}.login-app-brand{border-bottom:1px solid var(--line);align-items:center;gap:13px;padding-bottom:24px;display:flex}.login-app-brand img{object-fit:contain;flex:0 0 46px;width:46px;height:46px}.login-app-brand div{gap:3px;min-width:0;display:grid}.login-app-brand strong{color:var(--text);font-size:18px;font-weight:700;line-height:1.25}.login-app-brand span{color:var(--muted);font-size:12px;line-height:1.35}.login-page .form-intro{margin:26px 0 22px}.login-page .form-intro h1{color:var(--text);margin:0;font-size:24px;font-weight:700;line-height:1.35}.login-page .form-intro p{color:var(--muted);margin-top:5px;font-size:13px;line-height:1.5}.login-page .role-switch{border:1px solid var(--line);background:var(--surface-muted);border-radius:6px;height:44px;margin-bottom:22px;padding:3px}.login-page .role-switch button{border-radius:4px;height:36px;font-size:13px}.login-page .field-label{margin-bottom:7px;font-size:13px}.login-page .input-shell{border-radius:5px;height:44px;margin-bottom:17px}.login-page .form-options{margin-top:1px}.login-page .login-submit{border-radius:5px;min-height:44px;margin-top:17px}.login-page .register-row{margin-top:18px}.login-page .connection-state{border-top:1px solid var(--line);margin-top:20px;padding-top:16px;font-size:12px}.login-version{color:var(--muted);text-align:center;font-size:11px;position:fixed;bottom:20px;left:0;right:0}.top-actions>.theme-toggle{flex-basis:36px;width:36px;height:36px}@media (width<=560px){.login-page{place-items:start center;padding:68px 18px 48px}.login-theme{top:16px;right:18px}.login-form-panel{padding:28px 24px 24px}}@media (prefers-reduced-motion:reduce){.theme-toggle{transition:none}.class-filter-popover,.class-filter-chevron,.content-list .content-row{transition:none;animation:none}}@media (width<=620px){.metric-grid,.task-card-grid,.server-detail-grid{grid-template-columns:1fr}.welcome-strip,.student-welcome,.continue-card,.summary-line{flex-direction:column;align-items:flex-start}.welcome-actions,.continue-card>.primary-button,.summary-line>.primary-button,.summary-line>.secondary-button{width:100%}.streak{border-top:1px solid var(--line);border-left:0;margin-left:0;padding-top:12px;padding-left:0}.filterbar,.content-toolbar,.task-page-head{flex-wrap:wrap}.search-box{width:100%}.tabs{max-width:100%;overflow:auto}.content-toolbar .search-box,.task-page-head .search-box{margin-left:0}.class-filter-menu,.class-filter-trigger,.class-filter-popover{width:100%}.content-row{flex-wrap:wrap;align-items:flex-start}.content-main{min-width:calc(100% - 56px)}.content-row>.row-actions{margin-left:51px}.editor-header{flex-wrap:wrap}.editor-header-actions{width:100%;margin-left:44px}.editor-type-row{flex-wrap:wrap}.char-count{width:100%;margin-left:0}.settings-index,.result-grid,.test-rule-grid{grid-template-columns:repeat(2,1fr)}.typing-stats{justify-content:space-between}.typing-stats>div:not(.typing-hint){border-right:0;flex-direction:column;min-width:0;display:flex}.typing-stats>div:not(.typing-hint) svg{display:none}.target-text{font-size:18px}.typing-workspace{padding:24px 18px}.connection-pill{display:none}}@media (prefers-reduced-motion:reduce){*,:before,:after{scroll-behavior:auto!important;transition-duration:.01ms!important;animation-duration:.01ms!important;animation-iteration-count:1!important}}:root{--bg:#f4f6f7;--surface:#fff;--surface-soft:#f7f9f9;--surface-strong:#edf1f1;--sidebar:#14242b;--sidebar-soft:#1c3038;--text:#172126;--text-soft:#526168;--text-faint:#718087;--line:#dce3e3;--line-strong:#c7d1d1;--primary:#118f79;--primary-dark:#0b7765;--primary-soft:#e3f4f0;--green:#15805f;--green-soft:#e5f4ed;--shadow:0 1px 2px #10232a0a, 0 10px 28px #10232a0e;--shadow-lg:0 24px 70px #0a1c2333;--radius:7px;--sidebar-width:238px}:root[data-theme=dark]{--bg:#101719;--surface:#172124;--surface-soft:#1b282c;--surface-strong:#223136;--sidebar:#0d171b;--sidebar-soft:#15262c;--text:#edf3f2;--text-soft:#b5c2c0;--text-faint:#8b9b99;--line:#2b3b3f;--line-strong:#3a4d51;--primary:#37b69d;--primary-dark:#249c85;--primary-soft:#173c35;--green:#55c998;--green-soft:#173a2e}body{font-size:14px}.desktop-app,.login-page,.app-frame{height:100vh}.app-frame{min-height:0}.titlebar,.login-titlebar{display:none}.sidebar-head{padding:24px 18px 18px}.sidebar-brand{align-items:center;gap:12px;display:flex}.sidebar-brand img{object-fit:contain;width:42px;height:42px}.product-name{font-size:20px;line-height:1.2}.product-caption{color:#8da3a8;margin-top:4px;font-size:12px}.nav-list{gap:6px;padding:8px 12px}.nav-item{color:#a8b8bc;border-radius:6px;min-height:46px;padding:0 14px;font-size:14px}.nav-item.active{box-shadow:none;background:#1e776a}.server-card{background:#ffffff09;border-color:#ffffff1a;padding:14px}.server-line,.account-copy strong{font-size:13px}.server-card small,.account-copy small{font-size:12px}.account-block{min-height:76px;padding:14px}.avatar{background:#277d70;width:38px;height:38px;font-size:14px}.topbar{min-height:76px;padding:13px 28px}.topbar h1{font-size:22px}.topbar p{margin-top:5px;font-size:13px}.connection-pill{border-radius:6px;height:36px;padding:0 12px;font-size:13px}.icon-button{border-radius:6px;width:36px;height:36px}.theme-control{border:1px solid var(--line);background:var(--surface-strong);border-radius:6px;grid-template-columns:1fr 1fr;gap:2px;height:36px;padding:3px;display:inline-grid}.theme-control button{min-width:66px;color:var(--text-soft);background:0 0;border:0;border-radius:4px;justify-content:center;align-items:center;gap:6px;padding:0 9px;font-size:12px;transition:color .18s,background-color .18s,box-shadow .18s;display:inline-flex}.theme-control button.active{color:var(--text);background:var(--surface);box-shadow:0 1px 3px #0d1f251f}.page-content{padding:24px 28px 32px}.panel,.metric-card,.task-card,.content-row,.welcome-strip,.student-welcome{border-radius:7px}.panel-head h2,.panel-head h3{font-size:17px}.panel-head p,.metric-label,.metric-caption,.table-wrap th,.table-wrap td,.content-row,.task-card,.filterbar,.modal-form,.setting-row,.settings-section,.history-table,.student-task-list{font-size:13px}.metric-value{font-size:28px}.mono.small{font-size:13px}.profile-setting strong{font-size:14px}.profile-setting span{font-size:12px}.setting-row{gap:13px;min-height:70px;padding:12px 18px}.setting-row strong{font-size:14px}.setting-row span{font-size:12px;line-height:1.5}.update-card strong{font-size:14px}.update-card span{font-size:12px}.settings-index button{min-height:44px;font-size:13px}.server-detail-grid span{font-size:12px}.server-detail-grid strong{overflow-wrap:anywhere;font-size:13px;line-height:1.45}.dropzone span,.import-note p,.import-note strong{font-size:12px}.primary-button,.secondary-button,.danger-button,.text-button,input,select,textarea{font-size:14px}.login-page{background:var(--bg);position:relative;overflow:hidden}.login-toolbar{z-index:10;position:absolute;top:22px;right:max(44px,50vw - 536px)}.login-toolbar-brand{display:none}.login-layout{border:1px solid var(--line);background:var(--surface);border-radius:8px;grid-template-columns:minmax(380px,.9fr) minmax(440px,1.1fr);width:min(1120px,100% - 72px);height:min(720px,100vh - 72px);margin:36px auto;display:grid;overflow:hidden;box-shadow:0 26px 80px #10232a1f}.login-brand-panel{background:#14242b;justify-content:flex-start;padding:64px 56px}.login-brand-panel:before{opacity:.18;background-size:56px 56px}.brand-panel-content{text-align:left;width:100%;max-width:420px}.login-logo{width:78px;height:78px;box-shadow:none;background:0 0;border:0;justify-content:flex-start;margin:0 0 32px}.login-logo img{object-fit:contain;width:78px;height:78px}.brand-kicker{color:#55c8b0;font-size:13px;font-weight:700}.brand-panel-content h1{color:#f4f8f7;margin-top:12px;font-size:36px;line-height:1.25}.brand-panel-content>p{color:#a9bbc0;max-width:360px;margin-top:16px;font-size:15px;line-height:1.8}.typing-preview{background:#ffffff0b;border:1px solid #ffffff1a;border-radius:7px;margin-top:44px;padding:20px}.typing-preview-head{color:#90a7ac;justify-content:space-between;font-size:12px;display:flex}.typing-preview-head strong{color:#60d0b8;font-weight:650}.typing-preview p{color:#f2f7f6;align-items:center;margin:18px 0 14px;font-family:Cascadia Mono,Microsoft YaHei UI,monospace;font-size:17px;display:flex}.typing-preview p i{background:#55c8b0;width:2px;height:22px;margin-left:3px}.typing-preview>div:last-child{background:#ffffff17;border-radius:3px;height:5px;overflow:hidden}.typing-preview>div:last-child b{border-radius:inherit;background:#37b69d;height:100%;display:block}.version-label{color:#779096;font-size:11px;bottom:32px;left:56px}.login-form-panel{padding:64px}.login-form-wrap{width:min(430px,100%)}.form-intro{margin-bottom:28px}.eyebrow{color:var(--primary);font-size:13px}.form-intro h2{margin-top:8px;font-size:29px}.form-intro p{margin-top:9px;font-size:14px;line-height:1.6}.role-switch{border-radius:7px;margin-bottom:24px;padding:4px}.role-switch button{border-radius:5px;height:42px;font-size:14px}.field-label{margin-bottom:8px;font-size:13px}.input-shell{border-radius:6px;height:48px;margin-bottom:19px;padding:0 14px}.input-shell input{font-size:15px}.form-options label,.register-row,.connection-state{font-size:13px}.login-submit{min-height:48px;margin-top:4px}.connection-state{margin-top:26px;padding-top:18px}.connection-state.offline .status-pulse{background:var(--red);box-shadow:0 0 0 4px var(--red-soft)}@media (width<=980px){.login-layout{grid-template-columns:1fr;width:min(560px,100% - 40px);height:auto;min-height:calc(100vh - 40px);margin:20px auto}.login-brand-panel{display:none}.login-toolbar{top:30px;right:30px}.login-form-panel{padding:72px 48px 48px}}@media (width<=820px){.sidebar{top:0}.theme-control button{min-width:36px}.top-actions .theme-control span{display:none}}.login-page .login-layout{width:min(460px,100%);height:auto;min-height:0;box-shadow:none;background:0 0;border:0;border-radius:0;grid-template-columns:none;margin:0;display:block;overflow:visible}.login-page .login-form-panel{border:1px solid var(--line);background:var(--surface);border-radius:14px;padding:36px 38px 32px;display:block;box-shadow:0 18px 48px #1b262b1c}.login-page .login-form-wrap{width:100%;max-width:none}.login-page .login-app-brand strong{font-size:20px}.login-page .login-app-brand span{font-size:13px}.login-page .form-intro h1{font-size:26px}.login-page .form-intro p,.login-page .role-switch button,.login-page .field-label{font-size:14px}.login-page .input-shell input{font-size:15px}.login-page .connection-state{font-size:13px}.login-page .login-app-brand .theme-toggle{margin-left:auto}.login-page .role-switch{border-radius:10px}.login-page .role-switch button{border-radius:7px}.login-page .input-shell,.login-page .login-submit{border-radius:9px}.login-page .theme-toggle{border-radius:8px}@media (width<=560px){.login-page .login-layout{width:100%;min-height:0;margin:0}.login-page .login-form-panel{padding:28px 24px 24px}}html,body,#root{background:0 0}.login-page,.startup-screen{background:0 0;width:100vw;height:100vh;padding:0;display:block;position:relative;overflow:hidden}.login-windowbar{z-index:20;background:var(--surface);height:42px;color:var(--text);-webkit-app-region:drag;border:0;border-radius:14px 14px 0 0;justify-content:space-between;align-items:center;padding-left:16px;display:flex;position:absolute;top:0;left:0;right:0}.window-drag-title,.window-controls{-webkit-app-region:no-drag}.startup-screen .login-windowbar{-webkit-app-region:drag}.login-page .login-layout{background:var(--surface);width:100%;height:100%;min-height:0;box-shadow:none;border:0;border-radius:14px;margin:0;padding-top:42px;display:block;overflow:hidden}.login-page .login-form-panel{width:min(460px,100% - 48px);min-height:calc(100% - 42px);box-shadow:none;background:0 0;border:0;border-radius:0;align-items:center;margin:0 auto;padding:36px 38px 32px;display:flex}.desktop-app{box-shadow:none;border:0;border-radius:0;overflow:hidden}.desktop-app .topbar{-webkit-app-region:drag}.desktop-app .topbar button,.desktop-app .topbar input,.desktop-app .topbar a,.desktop-app .topbar .theme-control,.desktop-app .topbar .window-controls{-webkit-app-region:no-drag}.startup-screen .startup-card{background:var(--surface);width:100%;height:100%;min-height:0;box-shadow:none;border:0;border-radius:0;justify-content:center;align-items:center;padding:52px 34px 28px;display:flex}.startup-card-content{flex-direction:column;align-items:center;width:min(430px,100%);min-height:470px;display:flex}.startup-card-content .startup-brand{width:100%}@media (width<=560px){.login-page .login-form-panel{width:min(460px,100% - 20px);padding:28px 24px 24px}.startup-screen .startup-card{padding:52px 24px 22px}.startup-card-content{min-height:min(470px,100vh - 92px)}}.login-page .login-layout{scrollbar-gutter:stable;overflow-y:auto}.login-page .login-form-panel{align-items:flex-start;height:auto;min-height:0;max-height:calc(100vh - 42px);padding:58px 38px 30px;position:relative;overflow-y:auto}.login-page .login-theme-row{min-height:0;margin:0;position:absolute;top:18px;right:38px}.login-page .form-intro{margin-top:8px;margin-bottom:16px}.login-page .role-switch{margin-bottom:16px}.login-page .server-endpoint-config,.login-page .host-mode-notice{margin-bottom:14px}.login-page .login-submit{margin-bottom:2px}.auth-login-page .login-layout{scrollbar-gutter:auto;overflow:hidden}.auth-login-page .login-form-panel{max-height:none;padding-top:24px;padding-bottom:20px;overflow:visible}.auth-login-page .login-theme-row{top:24px}.auth-login-page .form-intro{margin:0 0 12px;padding-right:46px}.auth-login-page .role-switch,.auth-login-page .server-endpoint-config,.auth-login-page .host-mode-notice,.auth-login-page .input-shell{margin-bottom:12px}.auth-login-page .form-options{margin:0}.auth-login-page .login-submit{margin-top:10px}@media (width>=721px) and (height<=680px){.auth-login-page .login-form-panel{width:min(820px,100% - 32px)}.auth-login-page .login-form-wrap{grid-template-columns:minmax(0,1fr) minmax(0,1fr);align-items:start;column-gap:28px;width:100%;max-width:none;display:grid}.auth-login-page .form-intro,.auth-login-page .role-switch,.auth-login-page .login-form-wrap>.form-error{grid-column:1/-1}.auth-login-page .login-form-wrap>form{min-width:0}}.sidebar-backdrop{display:none}@media (width<=720px){:root{--mobile-gutter:12px}html,body,#root{width:100%;min-width:320px;min-height:100%}body{overflow:hidden}.desktop-app,.app-frame{height:100dvh;min-height:0}.app-frame{position:relative}.main-shell{width:100%;min-width:0}.sidebar{width:min(280px,82vw);max-width:280px;top:0;bottom:0}.sidebar-backdrop{z-index:70;cursor:pointer;background:#08131961;border:0;padding:0;display:block;position:fixed;inset:0}.topbar{min-height:60px;padding:9px var(--mobile-gutter);gap:9px}.mobile-menu,.top-actions>.theme-toggle,.top-actions>.icon-button{width:40px;min-width:40px;height:40px;min-height:40px}.topbar h1{text-overflow:ellipsis;white-space:nowrap;font-size:18px;overflow:hidden}.topbar p{text-overflow:ellipsis;white-space:nowrap;max-width:36vw;font-size:11px;overflow:hidden}.top-actions{gap:5px}.top-actions .connection-pill,.top-actions .window-controls{display:none}.page-scroll{overscroll-behavior-y:contain;-webkit-overflow-scrolling:touch;overflow-x:hidden}.page-content{padding:16px var(--mobile-gutter) calc(28px + env(safe-area-inset-bottom,0px))}.welcome-strip,.student-welcome{width:100%;padding:18px 16px}.welcome-strip h2,.student-welcome h2{font-size:20px;line-height:1.35}.welcome-actions{flex-wrap:wrap;width:100%;margin-left:0}.welcome-actions>*{flex:140px}.metric-grid{gap:10px;margin-top:10px}.metric-card{padding:14px 14px 13px 50px}.metric-value{font-size:25px}.dashboard-grid,.student-grid{gap:10px;margin:10px 0}.panel-head{align-items:flex-start;min-height:58px;padding:12px 13px}.panel-head>button{flex:none}.filterbar,.content-toolbar,.task-page-head{align-items:stretch;gap:8px;padding:10px}.tabs{scrollbar-width:none;width:100%;max-width:100%;overflow-x:auto}.tabs::-webkit-scrollbar{display:none}.tabs button{flex:none;min-height:38px;padding:0 11px;font-size:12px}.task-page-head .search-box,.content-toolbar .search-box{width:100%;height:42px;margin-left:0}.search-box input{font-size:14px}.task-card-grid{gap:10px}.task-card{padding:15px}.task-card h3{font-size:15px}.task-details span{font-size:12px}.task-card .primary-button,.task-card .secondary-button,.welcome-actions button,.continue-card button{min-height:44px}.content-row{align-items:flex-start;gap:10px;padding:14px 12px}.content-main{min-width:0}.content-title-line h3{font-size:14px}.content-meta{gap:7px 10px;font-size:11px}.row-actions{margin-left:auto}.table-scroll{-webkit-overflow-scrolling:touch;width:100%;overflow-x:auto}.table-scroll table{min-width:max-content}th,td{padding:9px 10px}.settings-content.single{max-width:none}.profile-setting{flex-wrap:wrap;align-items:flex-start;padding:14px}.profile-setting>button{width:100%;margin-left:0}.setting-row{align-items:flex-start;gap:10px;min-height:0;padding:14px}.setting-row>div:nth-child(2){min-width:0}.setting-row>div:last-child{flex:none}.server-detail-grid{grid-template-columns:1fr}.editor-header{flex-wrap:wrap;align-items:flex-start;min-height:62px;padding:10px 12px}.editor-header-actions{width:100%;margin-left:44px}.editor-header-actions>button{flex:1 1 0;min-height:42px}.editor-main{padding:14px 12px}.editor-type-row{flex-wrap:wrap;align-items:stretch}.editor-type-row>.secondary-button{flex:220px;min-height:42px}.char-count{width:100%;margin-left:0}.publish-settings{padding:16px 14px}.modal-backdrop{padding:max(10px, env(safe-area-inset-top,0px)) 10px calc(10px + env(safe-area-inset-bottom,0px));align-items:flex-start}.modal,.modal.wide{width:100%;max-height:calc(100dvh - 20px - env(safe-area-inset-top,0px) - env(safe-area-inset-bottom,0px));border-radius:10px}.modal-header{min-height:60px;padding:13px 14px}.modal-body{padding:14px}.modal-actions{flex-wrap:wrap}.modal-actions>button{flex:120px;min-height:44px}.test-intro,.result-page{min-height:100%;padding:16px var(--mobile-gutter) calc(28px + env(safe-area-inset-bottom,0px))}.test-intro-card,.result-card{width:100%;margin-top:16px;padding:22px 16px}.test-intro-card h2,.result-card h2{overflow-wrap:anywhere;font-size:20px;line-height:1.4}.test-intro-card>p,.result-card>p{font-size:12px;line-height:1.7}.test-rule-grid,.result-grid{grid-template-columns:repeat(2,minmax(0,1fr));gap:7px}.test-rule-grid>div,.result-grid>div{padding:12px 6px}.result-grid strong{font-size:22px}.result-actions{flex-direction:column}.result-actions button{width:100%;min-height:44px}.typing-screen{height:100%;min-height:0}.typing-toolbar{gap:6px;min-height:58px;padding:8px 10px}.typing-toolbar .back-button{width:40px;min-width:40px;height:40px;min-height:40px;padding:0;font-size:0}.typing-toolbar .test-clock{gap:4px;min-width:70px}.typing-toolbar .test-clock strong{font-size:14px}.typing-toolbar .icon-button,.typing-toolbar .primary-button{width:40px;min-width:40px;height:40px;min-height:40px}.typing-toolbar .primary-button{padding:0;font-size:0}.typing-workspace{--typing-scroll-runway:120px;overscroll-behavior:contain;gap:10px;padding:12px 10px}.copybook-workspace{grid-template-rows:minmax(260px,1fr)}.copybook-workspace .typing-sheet{min-height:260px}.typing-pane{border-radius:8px}.typing-pane-label{gap:8px;min-height:42px;padding:0 10px}.typing-pane-label small{text-overflow:ellipsis;white-space:nowrap;max-width:65%;overflow:hidden}.target-text,.typed-preview,.typing-input{padding:16px 12px 16px 48px;font-size:18px;line-height:1.75}.target-text.code-target,.typed-preview.code-target,.code-workspace .typing-input{font-size:15px;line-height:1.65}.typing-line:before{width:28px;font-size:.65em;left:-38px}.typing-line.active-line{box-shadow:-42px 0 0 color-mix(in srgb, var(--primary) 9%, transparent), 12px 0 0 color-mix(in srgb, var(--primary) 9%, transparent)}.typing-stats{min-height:60px;padding:4px 6px calc(4px + env(safe-area-inset-bottom,0px))}.typing-stats>div:not(.typing-hint){text-align:center;flex:1 1 0;grid-template-rows:auto auto;grid-template-columns:1fr;justify-items:center;min-width:0;padding:3px 4px}.typing-stats>div:not(.typing-hint) svg{display:none}.typing-stats span{font-size:9px}.typing-stats strong{font-size:12px}.typing-hint{display:none}.toast{right:12px;bottom:calc(12px + env(safe-area-inset-bottom,0px));text-align:center;justify-content:center;min-height:44px;padding:10px 12px;left:12px}.login-page,.startup-screen{width:100%;height:100dvh;min-height:100dvh;overflow:auto}.login-windowbar{border-radius:0;height:42px;padding:0 12px;top:0;left:0;right:0}.window-drag-title{gap:7px;font-size:12px}.window-drag-title img{width:20px;height:20px}.login-page .login-layout{height:auto;min-height:100%;padding-top:42px;overflow:visible}.login-page .login-form-panel{width:100%;min-height:calc(100dvh - 42px);max-height:none;padding:32px 18px calc(26px + env(safe-area-inset-bottom,0px));overflow:visible}.login-page .login-theme-row{top:14px;right:18px}.login-page .form-intro h1,.login-page .form-intro h2{font-size:26px}.login-page .role-switch button{min-height:46px}.login-page .input-shell{height:50px}.login-page .server-endpoint-row{min-height:46px}.login-page .server-endpoint-row .secondary-button{min-height:38px}.login-page .login-submit{min-height:50px}.web-data-loading-page .login-layout{width:100%}.class-create-row{grid-template-columns:1fr;gap:6px}.class-create-row input,.class-create-row button{height:42px;min-height:42px}.class-create-row button{width:100%}.class-manager-row{grid-template-columns:minmax(0,1fr) auto;gap:8px;padding:10px}.class-manager-row input{grid-area:2/1/auto/-1;height:40px}.class-manager-actions{grid-area:1/2}.class-delete-confirm{flex-wrap:wrap}.class-delete-confirm span{flex-basis:calc(100% - 26px)}.class-delete-confirm button{flex:100px;min-height:40px}}@media (width<=360px),(width<=720px) and (height<=600px){.login-page .login-form-panel{padding-top:24px}.login-page .form-intro,.login-page .role-switch{margin-bottom:12px}.login-page .server-endpoint-config,.login-page .host-mode-notice{margin-bottom:10px}.login-page .input-shell{height:46px;margin-bottom:14px}.login-page .server-endpoint-row{min-height:44px}.login-page .login-submit{min-height:46px}}
