:root{--c-primary: #2483c5;--c-primary-dark: #1a6fa8;--c-primary-soft: #e8f3fa;--c-mint: #a4c639;--c-mint-soft: #f2f8e4;--c-coral: #f58220;--c-coral-soft: #fff3e8;--c-lavender: #5e9fd4;--c-lavender-soft: #edf5fb;--c-text: #2c4a5e;--c-text-muted: #5e7c8f;--c-border: #d4e6f2;--c-surface: #ffffff;--c-bg: #eef6fc;--c-bg-end: #f8fcf5;--c-success: #8fb32e;--c-danger: #e85d5d;--radius-lg: 18px;--radius-md: 14px;--radius-sm: 10px;--shadow: 0 14px 40px rgba(36, 131, 197, .12);--shadow-sm: 0 8px 24px rgba(36, 131, 197, .1)}*{box-sizing:border-box}body{margin:0;font-family:Segoe UI,PingFang SC,Microsoft YaHei,sans-serif;color:var(--c-text);background:linear-gradient(180deg,var(--c-bg) 0%,var(--c-bg-end) 100%);min-height:100vh}.app-shell{width:100%;max-width:none;margin:0;padding:20px 28px 36px;min-height:100vh}.app-shell.is-login{max-width:none;padding:0;min-height:100vh}.login-screen{min-height:100vh;display:flex;align-items:center;justify-content:center;padding:24px;background:linear-gradient(160deg,#e8f3fa 0%,#f8fcf5 50%,#eef6fc 100%)}.login-panel{width:100%;max-width:420px;display:flex;flex-direction:column;gap:28px}.login-card{width:100%;background:var(--c-surface);border:2px solid var(--c-border);border-radius:24px;padding:28px 28px 24px;box-shadow:var(--shadow-sm)}.login-brand{text-align:center}.brand-icon-box{width:88px;height:88px;margin:0 auto 16px;overflow:hidden;border-radius:20px;box-shadow:0 8px 20px #2483c533}.brand-icon-img{width:88px;display:block}.login-brand h1{margin:0;font-size:28px;font-weight:800;color:var(--c-primary);letter-spacing:1px}.login-card-title{margin:0 0 20px;font-size:18px;font-weight:700;color:var(--c-text);text-align:center}.login-sub{margin:12px 0 0;color:var(--c-text-muted);font-size:14px}.login-form{display:grid;gap:16px}.login-hint{margin:20px 0 0;text-align:center;color:var(--c-text-muted);font-size:13px;line-height:1.6}.login-hint.sub{margin-top:6px;font-size:12px;color:#a8bdd4}.login-card .notice{margin-bottom:16px}.button:disabled{opacity:.65;cursor:not-allowed}.workspace{display:grid;grid-template-columns:240px minmax(0,1fr);gap:20px;align-items:start;width:100%}@media (min-width: 1400px){.workspace{grid-template-columns:260px minmax(0,1fr);gap:24px}.app-shell:not(.is-login){padding:20px 36px 40px}}.sidebar{position:sticky;top:18px}.panel-stack{display:grid;gap:20px}.topbar{display:flex;justify-content:space-between;align-items:center;margin-bottom:12px;gap:12px;padding:10px 18px;background:var(--c-surface);border-radius:var(--radius-md);box-shadow:var(--shadow-sm);border:2px solid rgba(255,255,255,.9)}.topbar-actions{display:flex;align-items:center;gap:14px;flex-shrink:0}.topbar-user{display:flex;align-items:center;gap:8px;font-size:13px;color:var(--c-text-muted)}.topbar-user-name{font-size:13px;font-weight:600;color:var(--c-text)}.topbar-brand{display:flex;align-items:center;gap:14px}.brand-icon-box.sm{width:36px;height:36px;overflow:hidden;border-radius:10px;flex-shrink:0;box-shadow:0 4px 12px #2483c526}.brand-icon-box.sm img{width:36px;display:block}.topbar-brand h1{margin:0;font-size:18px;font-weight:800;color:var(--c-primary)}.eyebrow{margin:0;color:var(--c-primary-dark);letter-spacing:.1em;font-weight:700;text-transform:uppercase;font-size:11px}h1{margin:6px 0 0;font-size:30px;font-weight:800;color:var(--c-text)}.muted{margin:0;color:var(--c-text-muted)}.role-tag{background:linear-gradient(135deg,var(--c-primary-soft),#f0f7ff);color:var(--c-primary-dark);border:2px solid var(--c-border);border-radius:999px;padding:8px 16px;font-size:13px;font-weight:700}.role-tag.sm{padding:3px 10px;font-size:11px;border-width:1px}.role-tag.sm{padding:4px 10px;font-size:12px;border-width:1px}.card{background:var(--c-surface);border:2px solid rgba(255,255,255,.95);border-radius:var(--radius-lg);padding:22px;margin-bottom:20px;box-shadow:var(--shadow-sm)}.card-head{display:flex;align-items:center;justify-content:space-between;margin-bottom:16px}.card-title{margin:0 0 14px;font-size:20px;font-weight:700;color:var(--c-text)}.no-bottom{margin-bottom:0}.tabs{display:flex;gap:10px;margin:12px 0 16px;flex-wrap:wrap}.tabs.vertical{flex-direction:column}.tab-btn{border:2px solid var(--c-border);background:#fbfdff;color:var(--c-text);border-radius:var(--radius-sm);padding:12px 16px;cursor:pointer;font-weight:600;text-align:left;transition:all .2s ease}.tab-btn:hover{border-color:var(--c-primary);background:var(--c-primary-soft)}.tab-btn.active{border-color:transparent;color:#fff;background:linear-gradient(135deg,#3a9ad4,var(--c-primary-dark));box-shadow:0 6px 16px #2483c54d}.form-grid{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:16px;margin-bottom:16px}.two-cols{grid-template-columns:repeat(2,minmax(0,1fr))}.field{display:flex;flex-direction:column;gap:6px}.field span{font-size:13px;color:var(--c-text-muted);font-weight:600}.full-col{grid-column:1 / -1}input,textarea,select{width:100%;border:2px solid var(--c-border);border-radius:var(--radius-sm);padding:11px 14px;font-size:14px;background:#fbfdff;color:var(--c-text);transition:border-color .2s ease,box-shadow .2s ease}input:focus,textarea:focus,select:focus{outline:none;border-color:var(--c-primary);box-shadow:0 0 0 3px #5bb5ff33}textarea{min-height:110px;resize:vertical}.button{border:none;padding:11px 18px;border-radius:var(--radius-sm);font-weight:600;cursor:pointer;transition:transform .15s ease,box-shadow .15s ease}.button:active{transform:scale(.98)}.button.primary{background:linear-gradient(135deg,#3a9ad4 0%,var(--c-primary-dark) 100%);color:#fff;box-shadow:0 6px 18px #2483c559}.button.primary:hover{box-shadow:0 8px 22px #2483c573}.button.ghost{border:2px solid var(--c-border);background:#fbfdff;color:var(--c-text)}.button.ghost:hover{background:var(--c-primary-soft);border-color:var(--c-primary)}.full{width:100%}.notice{margin:0 0 14px;padding:14px;border-radius:var(--radius-sm);font-weight:500}.error{background:#fff0f0;color:#d64545;border:2px solid #ffd4d4}.loading{background:var(--c-primary-soft);color:var(--c-primary-dark);border:2px solid var(--c-border)}.list-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(220px,1fr));gap:14px}.item-card{border:2px solid var(--c-border);border-radius:var(--radius-md);background:#fbfdff;padding:16px;transition:all .2s ease}.item-card h3{font-size:15px;margin:0 0 8px;font-weight:700;color:var(--c-text)}.item-card p{margin:4px 0;font-size:13px;color:#5a6f85}.item-card.clickable{cursor:pointer}.item-card.clickable:hover{border-color:var(--c-primary);box-shadow:var(--shadow-sm);transform:translateY(-2px)}.item-card .preview{display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden;color:var(--c-text-muted);font-size:12px;line-height:1.45;min-height:34px}.item-card-actions{display:flex;gap:8px;margin-top:14px;padding-top:12px;border-top:2px solid var(--c-border)}.assignment-type-tabs{display:flex;flex-wrap:wrap;gap:10px;margin-bottom:20px}.assignment-type-tab{display:inline-flex;align-items:center;gap:8px;padding:10px 16px;border:2px solid var(--c-border);border-radius:var(--radius-md);background:#fff;color:var(--c-text);font-size:14px;font-weight:600;cursor:pointer;transition:all .15s ease}.assignment-type-tab:hover{border-color:var(--c-primary);background:var(--c-primary-soft)}.assignment-type-tab.active{color:#fff;border-color:transparent;background:var(--c-primary)}.assignment-type-tab--reading.active{background:var(--c-primary)}.assignment-type-tab--translation.active{background:#0ea5e9}.assignment-type-tab--reading_composition.active{background:var(--c-coral, #f58220)}.assignment-type-tab--translation_extra.active{background:#8b5cf6}.assignment-type-tab--word_translation.active{background:var(--c-coral, #f58220)}.assignment-type-tab--word_choice.active{background:#a855f7}.list-toolbar{margin-bottom:16px}.submission-type-tabs{margin-bottom:14px}.submission-time-tabs{display:flex;flex-wrap:wrap;gap:8px;margin-bottom:20px}.submission-time-tab{display:inline-flex;align-items:center;gap:6px;padding:8px 14px;border:2px solid var(--c-border);border-radius:999px;background:#fff;color:var(--c-text-muted);font-size:13px;font-weight:600;cursor:pointer;transition:all .15s ease}.submission-time-tab:hover{border-color:var(--c-primary);color:var(--c-primary-dark)}.submission-time-tab.active{background:var(--c-primary-soft);border-color:var(--c-primary);color:var(--c-primary-dark)}.submission-time-tab-count{min-width:20px;padding:1px 6px;border-radius:999px;font-size:11px;background:rgba(0,0,0,.06);text-align:center}.submission-time-tab.active .submission-time-tab-count{background:rgba(36,131,197,.15)}.submission-table{overflow-x:auto}.col-student{font-weight:600;color:var(--c-text);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.col-score{font-weight:600;color:var(--c-text);white-space:nowrap}.grade-mini{margin-left:6px;font-size:11px;font-weight:600;color:var(--c-text-muted)}.col-pass{font-weight:600;text-align:center}.pass-ok{color:var(--c-success)}.pass-fail{color:var(--c-danger)}@media (max-width: 1100px){.submission-table .submission-row.assignment-row-head{display:none}.submission-table .submission-row.assignment-row-body{grid-template-columns:48px minmax(0,1fr) auto;grid-template-areas:"id student actions" "id title actions" "id score actions" "id pass meta" "id date actions" "id preview actions";gap:4px 10px;align-items:start}.submission-row .col-id{grid-area:id;align-self:start;padding-top:2px}.submission-row .col-student{grid-area:student}.submission-row .col-title{grid-area:title;font-size:12px}.submission-row .col-score{grid-area:score;font-size:12px}.submission-row .col-pass{grid-area:pass;font-size:12px;text-align:left}.col-meta{grid-area:meta;font-size:12px;max-width:100%}.col-actions{grid-area:actions;align-self:start;flex-shrink:0}.submission-row .col-date{grid-area:date;font-size:12px;display:block;max-width:100%}.submission-row .col-preview{grid-area:preview;font-size:12px;white-space:normal;display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden;max-width:100%}}.video-type-tabs{margin-top:0;margin-bottom:20px}.video-type-tab--text_reading.active{background:var(--c-primary)}.video-type-tab--homework_reading.active{background:#0ea5e9}.video-type-tab--word_speed.active{background:var(--c-coral, #f58220)}.video-type-tab--word_reading.active{background:#a855f7}.video-group--text_reading .assignment-group-head{border-bottom-color:var(--c-primary)}.video-group--homework_reading .assignment-group-head{border-bottom-color:#38bdf8}.video-group--word_speed .assignment-group-head{border-bottom-color:var(--c-coral, #f58220)}.video-group--word_reading .assignment-group-head{border-bottom-color:#c084fc}.video-row{grid-template-columns:56px minmax(120px,1.2fr) minmax(140px,2fr) 80px 150px minmax(150px,auto)}.col-size{color:#5a6f85;white-space:nowrap;font-variant-numeric:tabular-nums}@media (max-width: 960px){.video-row{grid-template-columns:48px 1fr 100px;grid-template-areas:"id title actions" "id preview actions" "id meta actions"}.video-row .col-size{display:none}.video-row .col-date{display:block;grid-area:meta;font-size:12px}}.assignment-type-tab-count{min-width:22px;padding:2px 7px;border-radius:999px;font-size:12px;font-weight:700;background:rgba(0,0,0,.08);text-align:center}.assignment-type-tab.active .assignment-type-tab-count{background:rgba(255,255,255,.25)}.assignment-group{margin-top:4px}.assignment-empty{margin:0;padding:32px 16px;text-align:center;border:2px dashed var(--c-border);border-radius:var(--radius-md);background:#fbfdff;display:flex;flex-direction:column;align-items:center;gap:12px}.assignment-empty .empty-action{margin-top:4px}.assignment-group-head{display:flex;align-items:center;justify-content:space-between;margin-bottom:10px;padding-bottom:8px;border-bottom:3px solid var(--c-border)}.assignment-group--reading .assignment-group-head{border-bottom-color:var(--c-primary)}.assignment-group--translation .assignment-group-head{border-bottom-color:#38bdf8}.assignment-group--reading_composition .assignment-group-head{border-bottom-color:var(--c-coral, #f58220)}.assignment-group--translation_extra .assignment-group-head{border-bottom-color:#c084fc}.assignment-group--word_translation .assignment-group-head{border-bottom-color:var(--c-coral, #f58220)}.assignment-group--word_choice .assignment-group-head{border-bottom-color:#c084fc}.assignment-group-title{margin:0;font-size:16px;font-weight:700;color:var(--c-text)}.assignment-group-count{font-size:13px;color:var(--c-text-muted);background:var(--c-primary-soft);padding:4px 10px;border-radius:999px}.assignment-table{border:2px solid var(--c-border);border-radius:var(--radius-md);overflow:hidden;background:#fbfdff}.assignment-row{display:grid;grid-template-columns:52px 72px minmax(100px,1.1fr) minmax(120px,1.6fr) 100px minmax(172px,1.2fr) minmax(200px,auto);gap:12px;align-items:center;padding:12px 14px;font-size:13px}.assignment-row>*{min-width:0}.assignment-row.student-row{grid-template-columns:52px minmax(100px,1fr) minmax(120px,1.2fr) minmax(100px,1fr) minmax(200px,auto)}.assignment-row.submission-row{grid-template-columns:52px minmax(72px,96px) minmax(72px,1fr) 92px 44px minmax(100px,118px) minmax(158px,172px) minmax(72px,1fr) minmax(72px,auto);min-width:960px}.assignment-row-head{background:#f1f5f9;font-weight:600;color:#64748b;font-size:12px;border-bottom:2px solid var(--c-border)}.assignment-row-body{border-bottom:1px solid var(--c-border);cursor:pointer;transition:background .15s ease}.assignment-row-body:last-child{border-bottom:none}.assignment-row-body:hover{background:var(--c-primary-soft)}.col-id{color:var(--c-text-muted);font-weight:600;font-variant-numeric:tabular-nums}.col-grade{color:#5a6f85;font-weight:600;white-space:nowrap}.grade-tabs{margin-bottom:8px}.assignment-grade-tab.active{background:#eef2ff;border-color:#6366f1;color:#4338ca}.col-title{font-weight:600;color:var(--c-text);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.col-preview{color:var(--c-text-muted);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.col-date,.col-meta{color:#5a6f85;white-space:nowrap;font-variant-numeric:tabular-nums;overflow:hidden;text-overflow:ellipsis}.col-actions{display:flex;gap:6px;justify-content:flex-end;flex-wrap:nowrap;flex-shrink:0}@media (max-width: 960px){.assignment-row:not(.submission-row){grid-template-columns:48px minmax(0,1fr) auto;grid-template-areas:"id title actions" "id preview actions" "id date actions" "id meta actions";gap:4px 10px;padding:12px}.assignment-row-head{display:none}.col-id{grid-area:id;align-self:start;padding-top:2px}.col-title{grid-area:title}.col-preview{grid-area:preview;font-size:12px}.col-date{grid-area:date;font-size:12px;display:block;max-width:100%}.col-meta{grid-area:meta;font-size:12px;max-width:100%}.col-actions{grid-area:actions;align-self:start;flex-shrink:0}}.button.sm{padding:7px 14px;font-size:13px}.submission-word-results{display:flex;flex-direction:column;gap:8px;margin:0;padding:0;list-style:none}.submission-word-item{padding:10px 12px;border:1px solid var(--c-border);border-radius:var(--radius-sm);background:#fff;font-size:13px;line-height:1.5}.submission-word-item.ok{border-color:#22c55e59;background:rgba(34,197,94,.06)}.submission-word-item.fail{border-color:#ef444459;background:rgba(239,68,68,.05)}.submission-word-head{display:flex;align-items:center;justify-content:space-between;gap:8px;font-weight:600}.submission-word-meta{margin-top:4px;color:var(--c-text-muted);font-size:12px}.modal-backdrop{position:fixed;top:0;right:0;bottom:0;left:0;z-index:100;background:rgba(51,65,85,.4);-webkit-backdrop-filter:blur(4px);backdrop-filter:blur(4px);display:flex;align-items:flex-start;justify-content:center;padding:40px 16px;overflow-y:auto}.alert-backdrop{align-items:center;z-index:200}.alert-modal{width:min(400px,100%);text-align:center;padding:28px 24px 24px;border-radius:var(--radius-lg)}.alert-title{margin:0 0 12px;font-size:18px;font-weight:700;color:var(--c-text)}.alert-message{margin:0 0 20px;color:#5a6f85;line-height:1.6;word-break:break-word}.alert-ok{min-width:120px}.modal.assignment-panel{width:min(760px,100%);max-height:calc(100vh - 80px);overflow-y:auto;border-radius:var(--radius-lg)}.detail-grid{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:12px 20px;margin-bottom:16px}.detail-grid dt{font-size:12px;color:var(--c-text-muted);margin-bottom:4px;font-weight:600}.detail-grid dd{margin:0;font-size:14px;color:var(--c-text)}.detail-block{margin-bottom:14px}.detail-block h4{margin:0 0 8px;font-size:14px;color:var(--c-text);font-weight:700}.detail-text{margin:0;padding:14px;background:var(--c-primary-soft);border:2px solid var(--c-border);border-radius:var(--radius-sm);font-size:13px;line-height:1.55;white-space:pre-wrap;word-break:break-word}.panel-actions{display:flex;justify-content:flex-end;gap:10px;margin-top:16px;padding-top:14px;border-top:2px solid var(--c-border)}.inline{display:flex;align-items:center;gap:10px;margin-bottom:12px}.summary-count{font-size:13px;color:var(--c-primary-dark);padding:6px 14px;background:var(--c-primary-soft);border:2px solid var(--c-border);border-radius:999px;font-weight:600}.checkbox{flex-direction:row;align-items:center;gap:8px}.result{margin-top:14px;background:linear-gradient(135deg,#2a3544,#1e293b);color:#dbeafe;border-radius:var(--radius-sm);padding:14px;font-size:13px;white-space:pre-wrap}.empty{margin:8px 0 0;color:var(--c-text-muted);text-align:center;padding:24px}.pass-student-list{margin:0;padding:0;list-style:none}.pass-student-list li{padding:8px 12px;border-bottom:1px solid var(--c-border);font-size:13px}.pass-student-list li.pass-ok{color:var(--c-success)}.pass-student-list li.pass-fail{color:var(--c-danger)}.student-list-block{margin-top:28px}@media (max-width: 960px){.assignment-row.student-row{grid-template-columns:48px minmax(0,1fr) auto;grid-template-areas:"id title actions" "id preview actions" "id meta actions"}}@media (max-width: 900px){.workspace{grid-template-columns:1fr}.sidebar{position:static}.form-grid,.two-cols,.detail-grid{grid-template-columns:1fr}.topbar{flex-direction:column;align-items:flex-start}.topbar-actions{width:100%;flex-wrap:wrap;justify-content:space-between}h1{font-size:26px}}.file-hint{margin:8px 0 0;font-size:13px;color:#5a6f85}.file-hint.muted{color:#a8bdd4}.video-filter{margin-top:24px;margin-bottom:16px}.button.danger{color:var(--c-danger);border:2px solid #ffd4d4;background:#fff5f5}.button.danger:hover{background:#fff0f0}
