:root{--bg: #f0f2f8;--surface: #fff;--border: #e4e8f4;--primary: #4361ee;--primary-light: #eef1ff;--text: #1a1d2e;--text2: #5c6080;--green: #2dc98e;--radius: 14px}*{box-sizing:border-box}body{margin:0;font-family:Segoe UI,system-ui,sans-serif;background:var(--bg);color:var(--text);font-size:14px}.hidden{display:none!important}.topbar{position:sticky;top:0;z-index:10;display:flex;align-items:center;gap:16px;padding:0 18px;height:56px;background:var(--surface);border-bottom:1px solid var(--border)}.topbar-brand{font-size:11px;color:var(--text2);text-transform:uppercase;letter-spacing:.06em}.topbar-title{flex:1;font-weight:700;font-size:16px}.topbar-actions{display:flex;gap:8px}.btn{border:1px solid var(--border);background:var(--surface);color:var(--text);border-radius:10px;padding:8px 14px;font:inherit;cursor:pointer}.btn-primary{background:var(--primary);border-color:var(--primary);color:#fff}.btn-success{background:#059669;border-color:#059669;color:#fff}.btn-success:hover{background:#047857;border-color:#047857}.btn-ghost{background:var(--surface)}.btn:disabled{opacity:.45;cursor:not-allowed}.submit-toast{position:fixed;bottom:20px;right:20px;z-index:20;max-width:min(420px,calc(100vw - 32px));padding:12px 16px;border-radius:12px;font-size:13px;line-height:1.45;box-shadow:0 8px 24px #0f172a1f;border:1px solid var(--border);background:var(--surface);color:var(--text)}.submit-toast.is-success{border-color:#6ee7b7;background:#ecfdf5;color:#065f46}.submit-toast.is-error{border-color:#fecaca;background:#fef2f2;color:#991b1b}.submit-toast.is-info{border-color:#fde68a;background:#fffbeb;color:#92400e}.page{width:100%;max-width:none;margin:0;padding:16px 20px 24px;display:grid;gap:16px}.load-error{color:#b91c1c;background:#fef2f2;border:1px solid #fecaca;padding:12px 14px;border-radius:10px}.card{background:var(--surface);border:1px solid var(--border);border-radius:var(--radius);box-shadow:0 2px 12px #4361ee0f;padding:16px 18px}.card-head{display:flex;align-items:center;justify-content:space-between;gap:12px;margin-bottom:14px}.card-head h2{margin:0;font-size:16px;display:flex;align-items:center;gap:8px}.step{width:24px;height:24px;border-radius:8px;background:var(--primary-light);color:var(--primary);display:inline-flex;align-items:center;justify-content:center;font-size:12px}.card-hint{color:var(--text2);font-size:12px}.student-scores-toolbar{display:flex;flex-wrap:wrap;align-items:center;gap:8px}.student-filter-search{width:min(220px,100%);padding:6px 12px;border:1px solid var(--border);border-radius:8px;font-size:13px;background:var(--surface);color:var(--text)}.student-filter-search:focus{outline:none;border-color:var(--primary);box-shadow:0 0 0 2px var(--primary-light)}.student-filter-range{display:flex;align-items:center;gap:4px;font-size:12px;color:var(--text2);white-space:nowrap}.student-filter-sep{opacity:.65}.student-filter-num{width:72px;padding:5px 8px;font-size:12px;border:1px solid var(--border);border-radius:6px;background:var(--surface);color:var(--text)}.student-filter-pct{width:64px}.student-filter-preset{padding:5px 8px;font-size:12px;max-width:168px;border:1px solid var(--border);border-radius:6px;background:var(--surface);color:var(--text)}.btn-reset-filters{padding:6px 10px;font-size:12px}.btn-autofill-max,.btn-random-scores-max,.btn-clear-scores-max{flex-shrink:0;width:34px;height:34px;padding:0;display:inline-flex;align-items:center;justify-content:center;border-radius:10px;cursor:pointer;transition:transform .15s ease,box-shadow .15s ease,background .15s ease,color .15s ease,border-color .15s ease}.btn-autofill-max{border:1.5px solid #86efac;background:linear-gradient(145deg,#ecfdf5,#d1fae5);color:#047857}.btn-autofill-max:hover:not(:disabled){transform:translateY(-1px);background:linear-gradient(145deg,#34d399,#10b981);color:#fff;border-color:#059669;box-shadow:0 4px 14px #10b98159}.btn-autofill-max.is-active{background:linear-gradient(145deg,#f59e0b,#d97706);color:#fff;border-color:#b45309;box-shadow:0 0 0 3px #f59e0b47}.btn-autofill-max:disabled{opacity:.45;cursor:not-allowed;box-shadow:none}.btn-clear-scores-max{border:1.5px solid #fecaca;background:linear-gradient(145deg,#fff1f2,#ffe4e6);color:#be123c}.btn-random-scores-max{border:1.5px solid #c4b5fd;background:linear-gradient(145deg,#f5f3ff,#ede9fe);color:#6d28d9}.btn-random-scores-max:hover:not(:disabled){transform:translateY(-1px);background:linear-gradient(145deg,#a78bfa,#8b5cf6);color:#fff;border-color:#7c3aed;box-shadow:0 4px 14px #8b5cf659}.btn-random-scores-max:disabled{opacity:.45;cursor:not-allowed;box-shadow:none}.btn-clear-scores-max:hover{transform:translateY(-1px);background:linear-gradient(145deg,#fb7185,#f43f5e);color:#fff;border-color:#e11d48;box-shadow:0 4px 14px #f43f5e52}.btn-autofill-icon,.btn-random-scores-icon,.btn-clear-scores-icon{width:18px;height:18px;display:block;pointer-events:none}.form-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(220px,1fr));gap:12px}.field{display:grid;gap:6px;font-size:12px;color:var(--text2)}.field input,textarea{width:100%;border:1px solid var(--border);border-radius:10px;padding:10px 12px;font:inherit;color:var(--text);background:#fff}.field input[readonly]{background:#f8fafc}.task-panel{display:flex;flex-direction:column;align-items:center;gap:10px;padding:2px 0}.task-summary-pill{display:inline-flex;align-items:baseline;gap:4px;padding:6px 14px;border-radius:999px;background:#f1f5f9;font-size:13px;font-weight:700;color:var(--text);transition:background .2s ease,color .2s ease,box-shadow .2s ease}.task-summary-pill.is-match{background:#d1fae5;color:#065f46;box-shadow:0 0 0 1px #10b98133}.task-summary-pill.is-mismatch{background:#fef2f2;color:#991b1b;box-shadow:0 0 0 1px #ef444426}.task-summary-sep{opacity:.45;font-weight:500}.task-summary-unit{font-size:11px;font-weight:600;opacity:.7;margin-left:2px}.task-controls{display:flex;align-items:stretch;justify-content:center;gap:10px;width:100%;max-width:680px;margin:0 auto}.task-config{display:flex;flex-wrap:wrap;justify-content:center;align-items:stretch;gap:8px;flex:1;min-width:0}.task-step-btn{flex:0 0 34px;width:34px;min-height:58px;border:1px solid var(--border);border-radius:12px;background:linear-gradient(180deg,#fff,#f8fafc);color:var(--primary);font-size:20px;font-weight:600;line-height:1;cursor:pointer;transition:transform .15s ease,box-shadow .15s ease,border-color .15s ease,background .15s ease;display:flex;align-items:center;justify-content:center;padding:0}.task-step-btn:hover:not(:disabled){border-color:#a5b4fc;background:var(--primary-light);transform:translateY(-1px);box-shadow:0 4px 14px #4361ee24}.task-step-btn:active:not(:disabled){transform:translateY(0);box-shadow:none}.task-step-btn:disabled{opacity:.35;cursor:not-allowed}.task-chip{display:flex;flex-direction:column;align-items:center;justify-content:center;gap:2px;min-width:58px;padding:8px 10px 6px;border:1px solid var(--border);border-radius:12px;background:#fff;transition:border-color .15s ease,box-shadow .15s ease,transform .15s ease}.task-chip:hover{border-color:#c7d2fe}.task-chip:focus-within{border-color:var(--primary);box-shadow:0 0 0 3px #4361ee1f;transform:translateY(-1px)}.task-chip-label{font-size:10px;font-weight:700;color:var(--primary);letter-spacing:.04em;text-transform:uppercase}.task-chip-input{width:48px;text-align:center;border:none;background:transparent;font-size:17px;font-weight:700;color:var(--text);padding:0;outline:none;appearance:textfield;-moz-appearance:textfield}.task-chip-input::-webkit-outer-spin-button,.task-chip-input::-webkit-inner-spin-button{-webkit-appearance:none;margin:0}.task-hint{margin:0;text-align:center;font-size:12px;color:var(--text2);min-height:18px}.task-hint.is-error{color:#b91c1c}.task-hint.is-ok{color:#047857}.emaktab-badge.is-empty{background:#f1f5f9;color:#64748b}.jami-ball-cell{font-weight:700}.jami-ball-cell.is-empty{background:#f8fafc;color:#64748b;font-weight:500}.jami-ball-cell.pct-good{background:#d1fae5;color:#065f46}.jami-ball-cell.pct-mid{background:#fef9c3;color:#854d0e}.jami-ball-cell.pct-low{background:#fecaca;color:#991b1b}.row-status{font-size:12px;font-weight:600;white-space:nowrap}.row-status.ok{color:#047857}.row-status.bad{color:#b91c1c}.row-status.warn{color:#b45309}.row-invalid td{background:#fff7ed}.row-valid td{background:#f0fdf4}.table-wrap{overflow:auto;border:1px solid var(--border);border-radius:12px;width:100%}.score-table{width:100%;border-collapse:collapse;table-layout:fixed;min-width:var(--table-min-px, 100%)}.score-table th,.score-table td{border:1px solid var(--border);padding:8px 10px;text-align:center;vertical-align:middle}.score-table col.col-select{width:40px}.score-table col.col-no{width:48px}.score-table th.col-select,.score-table td.col-select{width:40px;padding:6px 4px}.score-table th.col-select input,.score-table td.col-select input{width:16px;height:16px;margin:0 auto;display:block;cursor:pointer}.score-table col.col-name{width:var(--name-col-px, 220px)}.score-table col.col-task{width:var(--task-col-px, 72px)}.score-table col.col-jami{width:88px}.score-table col.col-pct{width:72px}.score-table col.col-status{width:112px}.student-name-cell{display:flex;align-items:center;gap:6px;min-width:0}.student-name-text{flex:1;min-width:0;white-space:nowrap}.student-name-input{flex:1;min-width:0;border:1px solid #cbd5e1;border-radius:8px;padding:6px 8px;font:inherit;background:#fff}.student-name-input:focus{outline:none;border-color:var(--primary);box-shadow:0 0 0 2px #4361ee26}.student-table-footer{display:flex;align-items:center;gap:10px;flex-wrap:wrap;margin-top:12px}.btn-delete-selected-students{display:inline-flex;align-items:center;gap:8px;padding:7px 14px;font-size:13px;font-weight:600;color:#f04438;background:#fef0ee;border:1.5px solid #fecdc9;border-radius:8px;cursor:pointer;transition:background .15s ease,color .15s ease,border-color .15s ease}.btn-delete-selected-students:hover:not(:disabled){background:#f04438;color:#fff;border-color:#f04438}.btn-delete-selected-students:disabled{opacity:.45;cursor:not-allowed}.btn-delete-selected-students .del-stud-icon{width:17px;height:17px;flex-shrink:0}.btn-add-student{font-size:13px}.student-row-score-actions{display:inline-flex;align-items:center;gap:4px;flex-shrink:0}.btn-autofill-row,.btn-random-scores-row,.btn-clear-scores-row{flex-shrink:0;width:28px;height:28px;padding:0;display:inline-flex;align-items:center;justify-content:center;border-radius:8px;cursor:pointer;transition:transform .15s ease,box-shadow .15s ease,background .15s ease,color .15s ease,border-color .15s ease}.btn-autofill-row{border:1.5px solid #86efac;background:linear-gradient(145deg,#ecfdf5,#d1fae5);color:#047857}.btn-autofill-row:hover{transform:translateY(-1px);background:linear-gradient(145deg,#34d399,#10b981);color:#fff;border-color:#059669;box-shadow:0 4px 14px #10b98159}.btn-autofill-row.is-active{background:linear-gradient(145deg,#f59e0b,#d97706);color:#fff;border-color:#b45309;box-shadow:0 0 0 3px #f59e0b47}.btn-clear-scores-row{border:1.5px solid #fecaca;background:linear-gradient(145deg,#fff1f2,#ffe4e6);color:#be123c}.btn-random-scores-row{border:1.5px solid #c4b5fd;background:linear-gradient(145deg,#f5f3ff,#ede9fe);color:#6d28d9}.btn-random-scores-row:hover{transform:translateY(-1px);background:linear-gradient(145deg,#a78bfa,#8b5cf6);color:#fff;border-color:#7c3aed;box-shadow:0 4px 14px #8b5cf659}.btn-clear-scores-row:hover{transform:translateY(-1px);background:linear-gradient(145deg,#fb7185,#f43f5e);color:#fff;border-color:#e11d48;box-shadow:0 4px 14px #f43f5e52}.btn-autofill-row .btn-autofill-icon,.btn-random-scores-row .btn-random-scores-icon,.btn-clear-scores-row .btn-clear-scores-icon{width:16px;height:16px}.score-table th.col-name,.score-table td.col-name{text-align:left}.score-table thead th{background:#f1f5f9;font-size:12px}.score-table thead th.task-col small{display:block;font-weight:500;color:var(--text2);margin-top:2px}.score-table tfoot td{background:#eef2ff;font-weight:700}.score-table td.task-col{padding:6px 8px}.score-input{width:100%;max-width:88px;margin:0 auto;display:block;text-align:center;border:1px solid #cbd5e1;border-radius:8px;padding:6px 8px;font:inherit;background:#fff;transition:border-color .15s ease,background-color .15s ease,box-shadow .15s ease}.score-input::placeholder{color:#94a3b8}.score-input.score-input--over-max,.score-input.score-input--invalid{border-color:#dc2626;background:#fef2f2;color:#991b1b;box-shadow:0 0 0 2px #dc262638}.score-table td.task-col--over-max{background:#fef2f2}.pct-good{background:#d1fae5;color:#065f46}.pct-mid{background:#fef9c3;color:#854d0e}.pct-low{background:#fecaca;color:#991b1b}body.is-preview-modal-open{overflow:hidden}.modal{position:fixed;inset:0;z-index:100;background:#0f172a73;display:flex;align-items:flex-end;justify-content:center;padding:0;padding-bottom:env(safe-area-inset-bottom,0);overflow:hidden}.modal-dialog{width:100%;max-width:100%;height:min(96dvh,920px);max-height:96dvh;background:#fff;border-radius:16px 16px 0 0;display:grid;grid-template-rows:auto auto minmax(0,1fr) auto;overflow:hidden;box-shadow:0 -8px 32px #0f172a2e}.modal-head,.modal-foot{display:flex;align-items:center;justify-content:space-between;gap:10px;padding:12px 14px;border-bottom:1px solid var(--border);flex-shrink:0}.modal-foot{border-bottom:0;border-top:1px solid var(--border);justify-content:stretch;gap:8px;padding-bottom:calc(12px + env(safe-area-inset-bottom,0))}.modal-foot .btn{flex:1;min-height:44px}.modal-head h3{margin:0;font-size:15px;line-height:1.3;flex:1;min-width:0}.preview-toolbar{display:flex;flex-wrap:wrap;align-items:center;gap:10px 12px;padding:10px 14px;border-bottom:1px solid var(--border);background:#f8fafc;flex-shrink:0;font-size:13px;max-height:min(44dvh,340px);overflow-x:hidden;overflow-y:auto;-webkit-overflow-scrolling:touch;overscroll-behavior:contain}.preview-toolbar-label{font-size:12px;color:var(--text2);width:100%}.preview-orient-label{display:inline-flex;align-items:center;gap:6px;cursor:pointer;color:var(--text2);min-height:36px}.preview-orient-label.is-active-recommend{color:var(--text);font-weight:500}.preview-toolbar-actions{width:100%;display:flex;gap:8px}.preview-toolbar-actions .btn{flex:1;min-height:40px}.bsb-export-font-row{display:flex;flex-wrap:wrap;align-items:flex-end;gap:10px 14px;width:100%;flex-basis:100%;padding:10px 0 2px;border-top:1px dashed var(--border);margin-top:4px}.bsb-export-font-row__hint{font-size:12px;color:var(--text2);width:100%;margin:0}.bsb-export-font-row label{display:flex;flex-direction:column;gap:3px;font-size:11px;color:var(--text2);cursor:default;flex:1 1 calc(50% - 8px);min-width:7.5rem}.bsb-export-font-row input[type=number]{width:100%;max-width:5.5rem;padding:6px 8px;font-size:13px;border:1px solid var(--border);border-radius:6px}.modal-foot .btn.is-loading:not(:disabled){opacity:.75;cursor:wait}.preview-frame-wrap{min-height:0;overflow-y:auto;overscroll-behavior:contain;background:#e2e8f0;-webkit-overflow-scrolling:touch}#preview-frame{width:100%;min-height:220px;height:100%;border:0;background:#e2e8f0;display:block}@media(min-width:640px){.modal{align-items:center;padding:16px}.modal-dialog{width:min(1120px,98vw);height:min(94dvh,920px);max-height:94dvh;border-radius:16px;box-shadow:0 16px 48px #0f172a33}.modal-head,.modal-foot{padding:12px 16px}.modal-foot{justify-content:flex-end;padding-bottom:12px}.modal-foot .btn{flex:0 1 auto;min-height:0}.modal-head h3{font-size:16px}.preview-toolbar{padding:12px 16px;max-height:none;overflow:visible}.preview-toolbar-label{width:auto}.preview-toolbar-actions{width:auto;margin-left:auto}.preview-toolbar-actions .btn{flex:0 1 auto;min-height:0}.bsb-export-font-row label{flex:0 1 auto;min-width:0}.bsb-export-font-row input[type=number]{width:4.2rem;max-width:none}}@media(max-width:639px){.topbar{flex-wrap:wrap;height:auto;min-height:56px;padding:10px 12px;gap:8px}.topbar-title{order:2;width:100%;font-size:15px}.topbar-actions{order:3;width:100%;flex-wrap:wrap}.topbar-actions .btn{flex:1 1 calc(50% - 4px);min-width:0;font-size:12px;padding:8px 10px;text-align:center}}
