:root{--bg:#f5f6f8;--surface:#fff;--surface-muted:#f3f4f6;--border:#e3e5e9;--border-strong:#cdd1d7;--text:#16181d;--text-muted:#5b6270;--text-dim:#7c8390;--accent:#2563eb;--accent-hover:#1d4fd7;--accent-soft:#eaf0fe;--success:#15803d;--success-strong:#16a34a;--success-hover:#128a3e;--success-soft:#e9f7ee;--danger:#c92a2a;--danger-soft:#fdecec;--warning:#b45309;--warning-soft:#fdf3e3;--code-bg:#111827;--code-gutter:#6b7280;--code-text:#e5e7eb;--radius:8px;--radius-lg:12px;--shadow:0 1px 2px #1018280f;--shadow-lg:0 16px 40px #1018282e;--font-ui:"Segoe UI Variable Text", "Segoe UI", -apple-system, BlinkMacSystemFont, Roboto, Tahoma, Arial, sans-serif;--font-code:"Cascadia Code", "Cascadia Mono", Consolas, Menlo, Monaco, "Roboto Mono", "Courier New", monospace}*{box-sizing:border-box;scrollbar-width:thin;scrollbar-color:#c4c8cf transparent;margin:0;padding:0}body{height:100dvh;font-family:var(--font-ui);color:var(--text);background:var(--bg);-webkit-font-smoothing:antialiased;flex-direction:column;font-size:14px;display:flex;overflow:hidden}button,input,select,textarea{font:inherit;color:inherit}button{cursor:pointer}button:disabled{cursor:not-allowed;opacity:.55}a{color:var(--accent)}ul,ol{padding-left:20px}:focus-visible{outline:2px solid var(--accent);outline-offset:1px}.action-icon-btn,.tool-btn,.modal-btn,.auth-submit-btn,.btn-add-rule,.btn-insert-asset,.btn-del-custom,.btn-del-user,.btn-del-role,.console-action-btn{white-space:nowrap;border:1px solid var(--border-strong);border-radius:var(--radius);background:var(--surface);color:var(--text);justify-content:center;align-items:center;gap:6px;font-weight:500;transition:background-color .12s,border-color .12s;display:inline-flex}.action-icon-btn:hover:not(:disabled),.tool-btn:hover:not(:disabled),.modal-btn.secondary:hover:not(:disabled),.auth-submit-btn.secondary:hover:not(:disabled),.btn-add-rule:hover,.btn-insert-asset:hover{background:var(--surface-muted)}.action-icon-btn{background:0 0;border-color:#0000;height:34px;padding:0 12px;font-size:13.5px}.action-icon-btn.active{background:var(--accent);border-color:var(--accent);color:#fff}.action-icon-btn.active:hover:not(:disabled){background:var(--accent-hover)}.action-icon-btn.icon-only{width:34px;padding:0}.tool-btn{height:32px;padding:0 10px;font-size:13px}.file-label{cursor:pointer}.modal-btn{height:38px;padding:0 16px;font-weight:600}.modal-btn.primary,.auth-submit-btn.primary{background:var(--accent);border-color:var(--accent);color:#fff}.modal-btn.primary:hover:not(:disabled),.auth-submit-btn.primary:hover:not(:disabled){background:var(--accent-hover)}.auth-submit-btn{width:100%;height:40px;font-weight:600}.btn-add-rule{height:30px;color:var(--accent);border-color:var(--border);padding:0 10px;font-size:13px}.btn-insert-asset{width:100%;height:34px;font-size:13px}.btn-del-custom,.btn-del-user,.btn-del-role{height:32px;color:var(--danger);border-color:var(--border);padding:0 10px;font-size:13px}.btn-del-custom:hover,.btn-del-user:hover,.btn-del-role:hover{background:var(--danger-soft);border-color:#f2c4c4}.rule-remove-btn{border:1px solid var(--border);border-radius:var(--radius);background:var(--surface);width:30px;height:30px;color:var(--danger);flex:none;font-size:16px;line-height:1}.rule-remove-btn:hover{background:var(--danger-soft)}.app-header{background:var(--surface);border-bottom:1px solid var(--border);flex-shrink:0;align-items:center;gap:16px;min-height:56px;padding:8px 16px;display:flex}.brand-section{flex-shrink:0;align-items:center;gap:10px;display:flex}.brand-logo{border-radius:var(--radius);background:var(--accent);color:#fff;justify-content:center;align-items:center;width:30px;height:30px;display:flex}.brand-logo svg{width:18px;height:18px}.brand-title{letter-spacing:-.01em;font-size:15px;font-weight:700}.exercise-selector-bar{flex:auto;align-items:center;gap:10px;min-width:0;max-width:560px;display:flex}.ex-select-dropdown{border:1px solid var(--border-strong);border-radius:var(--radius);background:var(--surface);flex:1;min-width:0;height:36px;padding:0 10px;font-weight:600}.ex-level-badge{color:var(--text-muted);white-space:nowrap;flex-shrink:0;font-size:12px}.header-actions{flex-shrink:0;align-items:center;gap:4px;margin-left:auto;display:flex}#header-user-container,#header-user-container>div{align-items:center;gap:4px;display:flex}.user-badge-header{border-radius:var(--radius);cursor:pointer;align-items:center;gap:8px;height:40px;padding:0 8px;display:flex}.user-badge-header:hover{background:var(--surface-muted)}.user-avatar-small{background:var(--surface-muted);border-radius:50%;width:28px;height:28px}.user-meta-wrap{flex-direction:column;max-width:190px;line-height:1.25;display:flex}.user-name-text{text-overflow:ellipsis;white-space:nowrap;font-size:13px;font-weight:600;overflow:hidden}.user-school-tag{color:var(--text-muted);text-overflow:ellipsis;white-space:nowrap;font-size:11.5px;overflow:hidden}.app-workspace{background:var(--border);flex:1 1 0;grid-template-rows:minmax(0,1fr);grid-template-columns:320px minmax(0,1fr) minmax(0,1.12fr);gap:1px;min-height:0;display:grid}.panel{background:var(--surface);flex-direction:column;min-height:0;display:flex;overflow:hidden}.panel-header{border-bottom:1px solid var(--border);flex-shrink:0;justify-content:space-between;align-items:center;gap:10px;min-height:48px;padding:6px 14px;display:flex}.panel-title{white-space:nowrap;font-size:14px;font-weight:600}.target-badge{color:var(--text-muted);white-space:nowrap;font-size:12px}.editor-header-actions{align-items:center;gap:8px;display:flex}.btn-panel-run,.btn-panel-submit{border-radius:var(--radius);white-space:nowrap;align-items:center;gap:6px;height:36px;padding:0 14px;font-weight:600;transition:background-color .12s;display:inline-flex}.btn-panel-run{border:1px solid var(--accent);background:var(--surface);color:var(--accent)}.btn-panel-run:hover:not(:disabled){background:var(--accent-soft)}.btn-panel-submit{border:1px solid var(--success-strong);background:var(--success-strong);color:#fff}.btn-panel-submit:hover:not(:disabled){background:var(--success-hover)}.panel-exercise-body{flex-direction:column;flex:1;gap:16px;min-height:0;padding:16px;display:flex;overflow-y:auto}.ex-intro,.ex-details-box,.target-preview-card{flex-shrink:0}.ex-details-title{margin-bottom:6px;font-size:16px;font-weight:700;line-height:1.35}.ex-desc-text{color:var(--text);line-height:1.6}.target-preview-card{border:1px solid var(--border);border-radius:var(--radius-lg);overflow:hidden}.target-card-header{border-bottom:1px solid var(--border);justify-content:space-between;align-items:center;padding:8px 12px;display:flex}.target-card-title{font-size:13px;font-weight:600}.target-status{color:var(--text-dim);font-size:12px}.target-viewport-box{background:var(--surface-muted);justify-content:center;align-items:center;min-height:120px;padding:10px;display:flex}.target-canvas-el{max-width:100%;height:auto;box-shadow:var(--shadow);background:#fff;border-radius:4px;display:block}.ex-details-box{flex-direction:column;gap:14px;display:flex}.ex-section-label{margin-bottom:6px;font-size:13px;font-weight:600}.ex-tips{border-top:1px solid var(--border);padding-top:12px}.ex-tips summary{cursor:pointer;font-size:13px;font-weight:600}.ex-tips-list{color:var(--text-muted);margin-top:8px;font-size:13.5px;line-height:1.55}.ex-tips-list li{margin-bottom:4px}.dom-rules-list{flex-direction:column;gap:2px;display:flex}.rule-check-item{align-items:flex-start;gap:8px;padding:4px 0;font-size:13.5px;line-height:1.45;display:flex}.rule-check-item .status-icon{text-align:center;flex-shrink:0;width:18px;font-size:13px}.rule-check-item .rule-text{color:var(--text-muted)}.rule-check-item.passed .rule-text{color:var(--success)}.panel-body-editor{min-height:0}.code-editor-wrapper{flex-direction:column;flex:1;min-height:0;display:flex;overflow:hidden}.editor-quick-tags{border-bottom:1px solid var(--border);flex-shrink:0;align-items:center;height:40px;padding:0 10px;display:flex;overflow:hidden}.quick-tags-left{flex:1;align-items:center;gap:8px;min-width:0;display:flex}.quick-tags-label{color:var(--text-dim);flex-shrink:0;font-size:12px}.quick-tags-scroll{scrollbar-width:none;flex:1;gap:4px;min-width:0;display:flex;overflow-x:auto}.quick-tags-scroll::-webkit-scrollbar{display:none}.tag-chip{border:1px solid var(--border);background:var(--surface);height:26px;color:var(--text-muted);font-family:var(--font-code);white-space:nowrap;border-radius:6px;flex-shrink:0;padding:0 8px;font-size:12px}.tag-chip:hover{border-color:var(--accent);color:var(--accent)}.editor-main-area{background:var(--code-bg);flex:1;min-height:0;display:flex;position:relative;overflow:hidden}.editor-gutter{background:var(--code-bg);width:44px;color:var(--code-gutter);font-family:var(--font-code);text-align:right;-webkit-user-select:none;user-select:none;flex-direction:column;flex-shrink:0;padding:12px 8px;font-size:13.5px;line-height:24px;display:flex;overflow:hidden}.editor-gutter span{display:block}.editor-textarea-wrapper{flex:1;position:relative;overflow:hidden}.editor-textarea,.editor-highlight{width:100%;height:100%;font-family:var(--font-code);letter-spacing:0;white-space:pre;tab-size:2;border:none;outline:none;margin:0;padding:12px 14px;font-size:14px;line-height:24px;position:absolute;inset:0}.editor-textarea{z-index:2;resize:none;color:#0000;caret-color:#fff;scrollbar-color:#4b5563 transparent;background:0 0;overflow:auto}.editor-textarea::placeholder{color:var(--code-gutter)}.editor-textarea::selection{background:#60a5fa66}.editor-highlight{z-index:1;pointer-events:none;color:var(--code-text);overflow:hidden}.tok-tag{color:#f87171}.tok-attr-name{color:#fbbf24}.tok-attr-val{color:#34d399}.tok-comment{color:#9ca3af;font-style:italic}.tok-css-sel{color:#c4b5fd}.tok-css-prop{color:#7dd3fc}.tok-css-val{color:#f9a8d4}.editor-status-bar{border-top:1px solid var(--border);height:36px;color:var(--text-dim);flex-shrink:0;justify-content:space-between;align-items:center;gap:8px;padding:0 10px;font-size:12px;display:flex}.status-left{white-space:nowrap;align-items:center;gap:8px;min-width:0;display:flex;overflow:hidden}.status-right{flex-shrink:0;align-items:center;gap:2px;display:flex}.editor-action-btn{height:26px;color:var(--text-muted);white-space:nowrap;background:0 0;border:none;border-radius:6px;padding:0 8px;font-size:12.5px}.editor-action-btn:hover{background:var(--surface-muted);color:var(--text)}.editor-action-btn.danger:hover{background:var(--danger-soft);color:var(--danger)}.browser-simulator-window{flex-direction:column;flex:1;min-height:0;display:flex;overflow:hidden}.sim-status-pill{color:var(--success);white-space:nowrap;font-size:12px;font-weight:500}.sim-status-pill.running{color:var(--warning)}.sim-status-pill.error{color:var(--danger)}.simulator-toolbar{border-bottom:1px solid var(--border);flex-shrink:0;justify-content:space-between;align-items:center;gap:8px;min-height:40px;padding:0 10px;display:flex}.sim-view-tabs{align-items:center;gap:2px;min-width:0;display:flex}.sim-view-btn{height:28px;color:var(--text-muted);white-space:nowrap;background:0 0;border:none;border-radius:6px;padding:0 10px;font-size:13px;font-weight:500}.sim-view-btn:hover{background:var(--surface-muted);color:var(--text)}.sim-view-btn.active{background:var(--accent-soft);color:var(--accent);font-weight:600}.console-count{color:var(--text-dim);margin-left:2px;font-size:11px}.sim-toolbar-right{flex-shrink:0;align-items:center;gap:6px;display:flex}.sim-device-select{border:1px solid var(--border);background:var(--surface);height:28px;color:var(--text-muted);border-radius:6px;padding:0 6px;font-size:12.5px}.sim-download-btn{border:1px solid var(--border);background:var(--surface);height:28px;color:var(--text-muted);white-space:nowrap;border-radius:6px;padding:0 8px;font-size:12.5px}.sim-download-btn:hover{background:var(--surface-muted);color:var(--text)}.simulator-body-area{background:var(--surface-muted);flex:1;min-height:0;position:relative;overflow:hidden}.sim-pane{flex-direction:column;display:none;position:absolute;inset:0}.sim-pane.active{display:flex}.sim-device-viewport-outer{flex:1;min-height:0;padding:12px;display:flex;overflow:auto}.sim-device-mockup{box-shadow:0 0 0 1px var(--border-strong), var(--shadow);border-radius:var(--radius);background:#fff;flex-direction:column;flex-shrink:0;margin:auto;display:flex;overflow:hidden}.sim-device-mockup.mobile,.sim-device-mockup.tablet{border:8px solid #374151;border-radius:20px}.sim-iframe{background:#fff;border:none;width:100%;height:100%;display:block}.sim-console-wrapper,.sim-dom-wrapper{background:var(--surface);flex-direction:column;flex:1;min-height:0;display:flex;overflow:hidden}.console-toolbar{border-bottom:1px solid var(--border);flex-shrink:0;justify-content:flex-end;padding:6px 10px;display:flex}.console-action-btn{border-color:var(--border);height:26px;color:var(--text-muted);padding:0 8px;font-size:12px}.console-log-list{min-height:0;font-family:var(--font-code);flex-direction:column;flex:1;gap:4px;padding:8px 10px;display:flex;overflow-y:auto}.console-empty,.dom-empty{text-align:center;color:var(--text-dim);font-family:var(--font-ui);padding:20px;font-size:13px}.console-item{border-radius:6px;align-items:flex-start;gap:8px;padding:6px 8px;font-size:12.5px;line-height:1.5;display:flex}.console-item.error{background:var(--danger-soft);color:var(--danger)}.console-item.warn{background:var(--warning-soft);color:var(--warning)}.log-time{color:var(--text-dim);flex-shrink:0;font-size:11px}.log-text{word-break:break-word}.dom-tree-tree{min-height:0;font-family:var(--font-code);flex:1;padding:10px 14px;font-size:12.5px;line-height:20px;overflow:auto}.dom-node{border-left:1px solid var(--border);margin-left:12px;padding-left:6px}.dom-tag{color:#be123c}.dom-attr-name{color:var(--warning)}.dom-attr-val{color:var(--success)}.dom-text-leaf{color:var(--text-muted);margin-left:16px;display:block}.simulator-footer-bar{border-top:1px solid var(--border);height:30px;color:var(--text-dim);flex-shrink:0;justify-content:space-between;align-items:center;gap:8px;padding:0 10px;font-size:12px;display:flex}.sim-footer-left{white-space:nowrap;gap:6px;display:flex;overflow:hidden}.auto-run-label{color:var(--text-muted);cursor:pointer;white-space:nowrap;align-items:center;gap:6px;display:flex}.modal-backdrop{z-index:100;opacity:0;pointer-events:none;background:#11182773;justify-content:center;align-items:center;padding:20px;transition:opacity .15s;display:flex;position:fixed;inset:0}.modal-backdrop.visible{opacity:1;pointer-events:auto}.modal-card{border-radius:var(--radius-lg);background:var(--surface);width:100%;max-height:calc(100vh - 40px);box-shadow:var(--shadow-lg);flex-direction:column;display:flex;overflow:hidden}.auth-modal-card{max-width:480px}.asset-modal-card{max-width:720px}.teacher-modal-card,.submission-modal-card,.lesson-modal-card{max-width:900px}.admin-modal-card{max-width:1000px}.modal-header{border-bottom:1px solid var(--border);flex-shrink:0;justify-content:space-between;align-items:center;gap:12px;padding:14px 20px;display:flex}.modal-title-group{align-items:center;gap:10px;min-width:0;display:flex}.modal-title-group h2{font-size:17px;font-weight:700;line-height:1.3}.modal-title-group .modal-badge{display:none}.modal-title-group #modal-rank-badge{display:inline-block}.modal-badge{white-space:nowrap;border-radius:6px;flex-shrink:0;padding:3px 8px;font-size:12px;font-weight:600}.modal-badge.rank-s,.modal-badge.rank-a{background:var(--success-soft);color:var(--success)}.modal-badge.rank-b{background:var(--accent-soft);color:var(--accent)}.modal-badge.rank-c{background:var(--warning-soft);color:var(--warning)}.modal-badge.rank-d{background:var(--danger-soft);color:var(--danger)}.modal-close-btn{border-radius:var(--radius);width:32px;height:32px;color:var(--text-muted);background:0 0;border:none;flex-shrink:0;font-size:22px;line-height:1}.modal-close-btn:hover{background:var(--surface-muted);color:var(--text)}.modal-body{flex:1;min-height:0;padding:20px;overflow-y:auto}.modal-footer{border-top:1px solid var(--border);flex-shrink:0;justify-content:flex-end;gap:10px;padding:12px 20px;display:flex}.teacher-form,.auth-form-pane{flex-direction:column;gap:14px;display:flex}.form-grid-2{grid-template-columns:1fr 1fr;gap:14px;display:grid}.form-field{flex-direction:column;gap:5px;min-width:0;display:flex}.form-field label,.section-title{font-size:13px;font-weight:600}.field-hint,.actions-hint,.row-meta{color:var(--text-muted);font-size:12.5px;line-height:1.45}.modal-card :where(input:not([type=radio],[type=checkbox],[type=file]),select,textarea){border:1px solid var(--border-strong);border-radius:var(--radius);background:var(--surface);width:100%;min-height:36px;padding:7px 10px}.modal-card textarea{resize:vertical;line-height:1.5}.modal-card input:focus,.modal-card select:focus,.modal-card textarea:focus{border-color:var(--accent);box-shadow:0 0 0 2px var(--accent-soft);outline:none}.modal-card ::placeholder{color:var(--text-dim)}.code-font{font-family:var(--font-code);font-size:13px}.form-section-box{border:1px solid var(--border);border-radius:var(--radius-lg);flex-direction:column;gap:10px;padding:14px;display:flex}.radio-choices{flex-direction:column;gap:6px;display:flex}.radio-label{cursor:pointer;align-items:flex-start;gap:8px;font-size:13.5px;line-height:1.4;display:flex}.radio-label input{margin-top:3px}.target-sub-section{flex-direction:column;gap:6px;display:flex}.image-preview-thumb{align-items:center;gap:8px;display:flex}.image-preview-thumb img{border-radius:6px;max-height:100px}.rules-header{flex-wrap:wrap;justify-content:space-between;align-items:center;gap:10px;display:flex}.rules-list-container{flex-direction:column;gap:10px;display:flex}.rules-empty,.empty-list-note{color:var(--text-muted);padding:8px 0;font-size:13.5px}.rule-row{flex-wrap:wrap;align-items:center;gap:8px;display:flex}.modal-card .rule-row select,.modal-card .rule-row input:not([type=radio]){width:auto}.modal-card .rule-row .rule-selector-input,.modal-card .rule-row .rule-name-input,.modal-card .rule-row .rule-value-input{flex:130px;min-width:0}.modal-card .rule-row .rule-count-input{width:64px}.modal-card .rule-row .rule-label-input{flex:100%;order:2}.modal-card .lesson-editor-question .rule-row .lesson-option-input{flex:1 1 0;order:0}.tab-nav{border-bottom:1px solid var(--border);flex-wrap:wrap;gap:4px;margin-bottom:16px;display:flex}.tab-btn{height:38px;color:var(--text-muted);background:0 0;border:none;border-bottom:2px solid #0000;padding:0 12px;font-weight:500}.tab-btn:hover{color:var(--text)}.tab-btn.active{border-bottom-color:var(--accent);color:var(--accent);font-weight:600}.teacher-pane{display:none}.teacher-pane.active{display:block}.teacher-quick-actions{flex-wrap:wrap;gap:8px;margin-bottom:12px;display:flex}.custom-list-items,.lesson-list{flex-direction:column;gap:8px;display:flex}.custom-ex-row{border:1px solid var(--border);border-radius:var(--radius);justify-content:space-between;align-items:center;gap:12px;padding:10px 12px;display:flex}.row-info{flex-direction:column;gap:2px;min-width:0;display:flex}.row-actions,.lesson-row-actions{flex-wrap:wrap;align-items:center;gap:6px;display:flex}.row-actions{flex-shrink:0}.form-actions{justify-content:flex-end;gap:10px;display:flex}.admin-table-wrapper{border:1px solid var(--border);border-radius:var(--radius);max-height:420px;overflow:auto}.admin-table{border-collapse:collapse;text-align:left;width:100%;font-size:13.5px}.admin-table th{background:var(--surface-muted);color:var(--text-muted);white-space:nowrap;border-bottom:1px solid var(--border);padding:9px 12px;font-size:12.5px;font-weight:600;position:sticky;top:0}.admin-table td{border-bottom:1px solid var(--border);vertical-align:middle;padding:9px 12px}.admin-table tbody tr:last-child td{border-bottom:none}.admin-table tbody tr:hover td{background:#fafbfc}.text-center-empty{text-align:center;color:var(--text-muted);padding:24px!important}.text-muted-locked{color:var(--text-dim);font-size:12.5px}.results-toolbar{flex-wrap:wrap;gap:8px;margin:10px 0;display:flex}.modal-card .results-toolbar select,.modal-card .results-toolbar input{flex:150px;width:auto;max-width:260px}.submission-viewer{margin-top:12px}.modal-card .submission-viewer select{width:auto;max-width:280px}.submission-viewer-grid{grid-template-columns:repeat(auto-fit,minmax(300px,1fr));gap:10px;display:grid}.submission-viewer-grid pre{max-height:340px;overflow:auto}.submission-viewer-grid iframe{border:1px solid var(--border);border-radius:var(--radius);background:#fff;width:100%;height:340px}.scores-banner{grid-template-columns:repeat(auto-fit,minmax(170px,1fr));gap:10px;margin-bottom:16px;display:grid}.score-card{border:1px solid var(--border);border-radius:var(--radius-lg);flex-direction:column;gap:2px;padding:12px 14px;display:flex}.score-label{color:var(--text-muted);font-size:12.5px}.score-value-row{align-items:baseline;gap:4px;display:flex}.score-number{letter-spacing:-.02em;font-size:34px;font-weight:700;line-height:1.15}.score-max{color:var(--text-dim)}.score-sub-number{font-size:24px;font-weight:700;line-height:1.25}.score-sub-text{color:var(--text-muted);font-size:12.5px}.score-stars{display:none}.diff-view-nav{border-bottom:1px solid var(--border);margin-bottom:14px}.tabs-group{flex-wrap:wrap;gap:4px;display:flex}.diff-tab-btn{height:36px;color:var(--text-muted);background:0 0;border:none;border-bottom:2px solid #0000;padding:0 12px;font-size:13.5px;font-weight:500}.diff-tab-btn:hover{color:var(--text)}.diff-tab-btn.active{border-bottom-color:var(--accent);color:var(--accent);font-weight:600}.diff-tab-pane{display:none}.diff-tab-pane.active{display:block}.slider-comparison-box{border:1px solid var(--border);border-radius:var(--radius);-webkit-user-select:none;user-select:none;background:#fff;max-width:100%;margin:0 auto;position:relative;overflow:hidden}.slider-image-layer{position:absolute;inset:0;overflow:hidden}.slider-image-layer canvas{width:100%;height:100%;display:block}.layer-tag{z-index:5;color:#fff;background:#111827bf;border-radius:6px;padding:3px 8px;font-size:12px;position:absolute;top:8px}.target-tag{left:8px}.student-tag{right:8px}.slider-divider{touch-action:none;z-index:10;background:var(--accent);cursor:ew-resize;width:2px;position:absolute;top:0;bottom:0;transform:translate(-50%)}.slider-handle{background:var(--accent);color:#fff;border-radius:50%;justify-content:center;align-items:center;width:32px;height:32px;display:flex;position:absolute;top:50%;left:50%;transform:translate(-50%,-50%)}.slider-hint{text-align:center;color:var(--text-muted);margin-top:10px;font-size:12.5px}.heatmap-view-wrapper{flex-direction:column;align-items:center;gap:12px;display:flex}.heatmap-canvas-container canvas{border-radius:var(--radius);max-width:100%;height:auto;display:block}.heatmap-legend{color:var(--text-muted);flex-wrap:wrap;justify-content:center;gap:6px 18px;font-size:12.5px;display:flex}.legend-item{align-items:center;gap:6px;display:flex}.legend-color{border-radius:3px;width:12px;height:12px}.legend-color.diff{background:#ff1450}.legend-color.match{background:#4b5563}.side-by-side-grid{grid-template-columns:repeat(auto-fit,minmax(280px,1fr));gap:12px;display:grid}.side-card h4{margin-bottom:6px;font-size:13px;font-weight:600}.side-canvas-box canvas{border:1px solid var(--border);border-radius:var(--radius);width:100%;height:auto;display:block}.checklist-header{justify-content:space-between;align-items:center;margin-bottom:10px;display:flex}.checklist-header h4{font-size:14px}.checklist-score{color:var(--text-muted);font-weight:700}.checklist-items{flex-direction:column;gap:6px;display:flex}.checklist-item{border:1px solid var(--border);border-radius:var(--radius);gap:10px;padding:10px 12px;display:flex}.checklist-item.pass{background:var(--success-soft);border-color:#cdebd8}.checklist-item.fail{background:var(--danger-soft);border-color:#f6d3d3}.item-label{font-size:13.5px;font-weight:600}.item-msg{color:var(--text-muted);font-size:13px}.checklist-suggestions{border-radius:var(--radius);background:var(--warning-soft);margin-top:10px;padding:10px 12px;font-size:13px}.checklist-suggestions h5{margin-bottom:4px;font-size:13px}.code-errors-box{margin-bottom:12px}.code-errors-box ul{margin-top:6px}.lesson-body{flex-direction:column;gap:14px;display:flex}.lesson-progress-row,.lesson-nav{justify-content:space-between;align-items:center;gap:10px;display:flex}.lesson-progress-bar{background:var(--border);border-radius:2px;flex-shrink:0;height:4px;overflow:hidden}.lesson-progress-bar span{background:var(--accent);height:100%;display:block}.lesson-section,.lesson-questions,.lesson-summary{flex-direction:column;gap:12px;display:flex}.lesson-section h3,.lesson-summary h3{font-size:19px;font-weight:700}.lesson-questions h4{font-size:15px}.lesson-text{white-space:pre-wrap;font-size:15px;line-height:1.65}.lesson-image{border-radius:var(--radius);align-self:center;max-width:100%;max-height:420px}.lesson-video{aspect-ratio:16/9;border-radius:var(--radius);border:0;width:100%}.lesson-code{border-radius:var(--radius);background:var(--code-bg);color:var(--code-text);font-family:var(--font-code);padding:12px 14px;font-size:13px;line-height:1.55;overflow-x:auto}.lesson-question,.lesson-editor-question{border:1px solid var(--border);border-radius:var(--radius-lg);flex-direction:column;align-items:flex-start;gap:8px;padding:12px 14px;display:flex}.lesson-editor-question{align-items:stretch}.lesson-prompt{line-height:1.5}.lesson-option{cursor:pointer;align-items:center;gap:8px;display:flex}.modal-card .lesson-fill-input{width:min(100%,360px)}.lesson-feedback{width:100%}.lesson-feedback:empty{display:none}.lesson-feedback-box{border-radius:var(--radius);padding:8px 12px;font-size:13.5px;line-height:1.5}.lesson-feedback-box.correct{background:var(--success-soft);color:var(--success)}.lesson-feedback-box.wrong{background:var(--danger-soft);color:var(--danger)}.lesson-summary .rule-check-item{border:1px solid var(--border);border-radius:var(--radius);padding:8px 12px}.lesson-stat-summary{margin:2px 0}.auth-tabs{border-bottom:1px solid var(--border);gap:4px;margin-bottom:16px;display:flex}.auth-tab-btn{height:38px;color:var(--text-muted);background:0 0;border:none;border-bottom:2px solid #0000;flex:1;font-weight:500}.auth-tab-btn.active{border-bottom-color:var(--accent);color:var(--accent);font-weight:600}.auth-alert{border-radius:var(--radius);margin-bottom:12px;padding:9px 12px;font-size:13.5px;line-height:1.45}.auth-alert.error{background:var(--danger-soft);color:var(--danger)}.auth-alert.success{background:var(--success-soft);color:var(--success)}.auth-switch-link{text-align:center;color:var(--text-muted);font-size:13px}.profile-card-view{flex-direction:column;gap:16px;display:flex}.profile-summary{align-items:center;gap:12px;display:flex}.profile-avatar-large{background:var(--surface-muted);border-radius:50%;width:48px;height:48px}.profile-summary h3{font-size:16px;font-weight:700}#form-change-password,.profile-actions-row{border-top:1px solid var(--border);padding-top:16px}.badge-role-admin,.badge-role-teacher,.badge-role-student,.badge-role-custom,.role-sys-pill,.role-custom-pill,.class-pill,.perm-tag{background:var(--surface-muted);color:var(--text-muted);white-space:nowrap;border-radius:6px;padding:2px 7px;font-size:12px;font-weight:500;display:inline-block}.badge-role-admin,.badge-role-teacher{background:var(--accent-soft);color:var(--accent)}.asset-intro{color:var(--text-muted);margin-bottom:14px;line-height:1.5}.asset-grid{grid-template-columns:repeat(auto-fill,minmax(190px,1fr));gap:12px;display:grid}.asset-card{border:1px solid var(--border);border-radius:var(--radius-lg);flex-direction:column;gap:8px;padding:12px;display:flex}.asset-img-box{justify-content:center;height:64px;display:flex}.asset-img-box img{max-height:100%}.asset-info h5{font-size:13.5px}.asset-info p{color:var(--text-muted);font-size:12.5px}.asset-info code{color:var(--text-dim);font-size:11.5px}.admin-msg-banner{border-radius:var(--radius);margin-bottom:12px;padding:9px 12px;font-size:13.5px}.admin-msg-banner.success{background:var(--success-soft);color:var(--success)}.admin-msg-banner.error{background:var(--danger-soft);color:var(--danger)}.admin-stats-row{grid-template-columns:repeat(auto-fit,minmax(150px,1fr));gap:10px;margin-bottom:16px;display:grid}.admin-stat-card{border:1px solid var(--border);border-radius:var(--radius-lg);padding:10px 14px}.stat-icon{display:none}.stat-info{flex-direction:column;display:flex}.stat-num{font-size:22px;font-weight:700;line-height:1.25}.stat-lbl{color:var(--text-muted);font-size:12.5px}.admin-tabs-nav{border-bottom:1px solid var(--border);gap:4px;margin-bottom:16px;display:flex}.admin-tab-btn{height:38px;color:var(--text-muted);background:0 0;border:none;border-bottom:2px solid #0000;padding:0 12px;font-weight:500}.admin-tab-btn.active{border-bottom-color:var(--accent);color:var(--accent);font-weight:600}.admin-section-header{flex-wrap:wrap;justify-content:space-between;align-items:flex-end;gap:10px;margin-bottom:12px;display:flex}.admin-section-header h3{font-size:15px}.admin-section-sub{color:var(--text-muted);font-size:12.5px}.admin-header-actions{flex-wrap:wrap;align-items:center;gap:8px;display:flex}.modal-card .admin-filter-select,.modal-card .admin-search-input{width:auto}.modal-card .admin-role-select{width:auto;min-width:130px}.user-row-cell{align-items:center;gap:8px;display:flex}.user-avatar-tiny{background:var(--surface-muted);border-radius:50%;flex-shrink:0;width:24px;height:24px}#admin-users-table-body td:last-child{white-space:nowrap}#admin-users-table-body td:last-child>*{vertical-align:middle;margin-right:4px;display:inline-flex}.create-role-box{border:1px solid var(--border);border-radius:var(--radius-lg);flex-direction:column;gap:10px;margin:14px 0;padding:14px;display:flex}.create-role-title{font-size:14px}.create-role-desc{color:var(--text-muted);font-size:12.5px;line-height:1.45}.create-role-form{flex-direction:column;gap:12px;display:flex}.role-permissions-selector{flex-direction:column;gap:6px;display:flex}.perms-label{font-size:13px;font-weight:600}.perms-checkbox-list{flex-direction:column;gap:6px;display:flex}.perm-check-label{cursor:pointer;align-items:flex-start;gap:8px;font-size:13.5px;line-height:1.4;display:flex}.perm-check-label input{margin-top:3px}#admin-temp-password{word-break:break-word;margin-bottom:14px}.roles-group-title{margin:16px 0 8px;font-size:14px}.roles-cards-grid{grid-template-columns:repeat(auto-fill,minmax(260px,1fr));gap:10px;margin-bottom:14px;display:grid}.role-management-card{border:1px solid var(--border);border-radius:var(--radius-lg);flex-direction:column;gap:8px;padding:12px;display:flex}.role-card-top{align-items:center;gap:8px;display:flex}.role-card-icon{display:none}.role-card-header-info{flex-direction:column;flex:1;align-items:flex-start;gap:2px;min-width:0;display:flex}.role-card-header-info h4{font-size:14px}.role-member-count{color:var(--text-muted);white-space:nowrap;font-size:12.5px}.role-card-desc{color:var(--text-muted);font-size:13px;line-height:1.45}.role-perms-chips{flex-wrap:wrap;gap:4px;display:flex}.perm-tag.active{background:var(--success-soft);color:var(--success)}.custom-roles-empty{color:var(--text-muted);padding:8px 0;font-size:13.5px}[hidden]{display:none!important}.offline-banner{background:var(--warning-soft);color:var(--warning);flex-shrink:0;padding:6px 16px;font-size:13px;line-height:1.4}.mobile-tabbar,.touch-only{display:none}@media (width<=1200px){.app-header{padding-top:max(8px, env(safe-area-inset-top));padding-left:max(16px, env(safe-area-inset-left));padding-right:max(16px, env(safe-area-inset-right));flex-wrap:wrap;gap:8px 12px}.exercise-selector-bar{flex:100%;order:3;max-width:none}.app-workspace{background:var(--surface);display:block;position:relative}.panel{visibility:hidden;position:absolute;inset:0}body[data-panel=exercise] .panel-exercise,body[data-panel=code] .panel-editor,body[data-panel=result] .panel-simulator{visibility:visible}.panel-editor>.panel-header{border:none;min-height:0;padding:0}.panel-editor .panel-title{display:none}.editor-header-actions{z-index:20;right:max(10px, env(safe-area-inset-right));bottom:calc(9px + env(safe-area-inset-bottom));visibility:visible;position:fixed}.btn-panel-run,.btn-panel-submit{height:42px;padding:0 14px}.mobile-tabbar{min-height:60px;padding:9px max(10px, env(safe-area-inset-left));padding-bottom:calc(9px + env(safe-area-inset-bottom));background:var(--surface);border-top:1px solid var(--border);flex-shrink:0;gap:2px;display:flex}.mobile-tab{border-radius:var(--radius);height:42px;color:var(--text-muted);white-space:nowrap;background:0 0;border:none;padding:0 12px;font-weight:500}.mobile-tab.active{background:var(--accent-soft);color:var(--accent);font-weight:600}}@media (width<=600px){.brand-title,.ex-level-badge,.user-meta-wrap,.quick-tags-label,.sim-footer-left,#editor-char-count{display:none}.app-header{padding-left:10px;padding-right:10px}.header-actions .action-icon-btn{padding:0 8px}.form-grid-2{grid-template-columns:1fr}.modal-backdrop{align-items:flex-end;padding:0}.modal-card{border-radius:var(--radius-lg) var(--radius-lg) 0 0;max-height:100dvh}.modal-body{padding:14px;padding-bottom:calc(14px + env(safe-area-inset-bottom))}.modal-header{padding:12px 14px}.modal-footer{padding:10px 14px;padding-bottom:calc(10px + env(safe-area-inset-bottom))}.mobile-tab{padding:0 8px;font-size:13.5px}.btn-panel-run,.btn-panel-submit{padding:0 10px;font-size:13.5px}.simulator-toolbar{flex-wrap:wrap;padding:6px 10px}.sim-view-btn{padding:0 7px}.scores-banner{grid-template-columns:1fr 1fr}.score-card.primary{grid-column:1/-1}}@media (pointer:coarse){input,select,textarea,.ex-select-dropdown,.sim-device-select{font-size:16px!important}.touch-only{align-items:center;display:inline-flex}.action-icon-btn,.tool-btn,.modal-btn,.btn-add-rule,.btn-del-custom,.btn-del-user,.btn-del-role,.console-action-btn{min-height:42px}.action-icon-btn.icon-only{width:42px}.tag-chip,.editor-action-btn,.sim-view-btn,.sim-download-btn,.sim-device-select,.diff-tab-btn,.tab-btn,.admin-tab-btn,.auth-tab-btn{min-height:40px}.ex-select-dropdown{height:42px}.editor-quick-tags{height:54px}.editor-status-bar{height:48px}.simulator-toolbar{min-height:52px}.simulator-footer-bar{height:44px}.rule-remove-btn,.modal-close-btn{width:42px;height:42px}.slider-handle{width:44px;height:44px}}@media (prefers-reduced-motion:reduce){*,:before,:after{transition-duration:.01ms!important;animation-duration:.01ms!important}}
