@import url('https://fonts.googleapis.com/css2?family=Prompt:wght@400;500;600;700&display=swap');
:root{--ink:#172740;--muted:#728198;--blue:#385be6;--blue2:#243dab;--bg:#f5f7fc;--border:#e5eaf2;--white:#fff;--green:#128364;--red:#d95454}*{box-sizing:border-box}body{margin:0;color:var(--ink);background:var(--bg);font-family:Prompt,'Segoe UI',Tahoma,sans-serif;font-size:13px}button,input,select,textarea{font:inherit}button{cursor:pointer}button:disabled{cursor:not-allowed;opacity:.5}.hidden{display:none!important}.auth-layout{display:grid;grid-template-columns:1.05fr .95fr;min-height:100vh}.auth-art{position:relative;background:linear-gradient(150deg,#14266c,#3556d7 60%,#6d8af2);color:white;padding:46px 55px;display:flex;flex-direction:column;justify-content:space-between;overflow:hidden}.auth-art:after{content:'';position:absolute;width:520px;height:520px;border:75px solid #ffffff10;border-radius:50%;right:-290px;bottom:-210px}.brand{font-size:19px;font-weight:700;display:flex;align-items:center;gap:12px;letter-spacing:-.4px}.brand small{display:block;font-size:9px;font-weight:500;letter-spacing:2px;text-transform:uppercase;color:#9daacf}.brand-white small{color:#ccd5ff}.brand-icon{width:38px;height:38px;background:#5b78f2;color:white;display:grid;place-items:center;border-radius:12px;font-size:15px;letter-spacing:-1px}.hero{z-index:1}.eyebrow{font-size:10px;letter-spacing:3px;color:#b9c9ff}.hero h1{font-size:42px;line-height:1.4;margin:15px 0}.hero p{color:#d3dcff;font-size:14px}.hero-tiles{display:flex;gap:10px;flex-wrap:wrap;margin-top:34px}.hero-tiles span{background:#ffffff1f;border:1px solid #ffffff30;padding:10px 14px;border-radius:12px}.auth-foot{color:#aebdfa}.auth-panel{display:grid;place-items:center;padding:30px}.auth-card{width:min(390px,100%)}.auth-card h2{font-size:27px;margin:18px 0 0}.muted{color:var(--muted)}.pill{font-size:11px;background:#eaf0ff;color:var(--blue);padding:6px 12px;border-radius:100px;font-weight:600}.auth-card form{display:grid;gap:18px;margin-top:30px}.auth-card label,.field{display:flex;flex-direction:column;gap:7px;font-weight:600}input,select,textarea{background:white;border:1px solid #dce3ef;border-radius:10px;outline:none;padding:10px 12px;min-width:0;color:var(--ink)}input:focus,textarea:focus,select:focus{border-color:#6a84f5;box-shadow:0 0 0 3px #6a84f522}input[type=checkbox]{width:16px;height:16px;accent-color:var(--blue)}.btn{border:1px solid transparent;border-radius:10px;padding:10px 14px;font-weight:600;background:white;color:var(--ink);display:inline-flex;align-items:center;gap:8px;justify-content:center}.btn-primary{background:var(--blue);color:white}.btn-primary:hover{background:var(--blue2)}.btn-outline{border-color:#dce3ee}.btn-soft{color:var(--blue);background:#edf1ff}.btn-danger{color:var(--red);background:#fff0f0}.btn-sm{font-size:11px;padding:7px 10px}.wide{width:100%}.divider-label{text-align:center;margin:18px;color:#abb4c3}.login-hint{font-size:11px;color:#8a96a9;line-height:1.8;margin-top:18px}.mobile-brand{display:none}.app{display:grid;grid-template-columns:252px 1fr;min-height:100vh}.sidebar{background:#fff;border-right:1px solid var(--border);padding:27px 17px;position:sticky;top:0;height:100vh;display:flex;flex-direction:column}.sidebar .brand{margin:0 8px 42px}.workspace-title{color:#a4afc0;letter-spacing:1.6px;font-size:10px;font-weight:700;margin:0 12px 6px}.mode-flag{background:#e8ecff;color:var(--blue);padding:3px 7px;border-radius:5px;letter-spacing:0}.school-name{font-size:13px;font-weight:600;margin:0 12px 23px}.navigation{display:grid;gap:5px}.navigation button{border:0;background:transparent;width:100%;text-align:left;padding:12px;border-radius:11px;color:#64748a;display:flex;align-items:center;gap:12px;font-weight:600}.navigation button.active{background:#ebefff;color:var(--blue)}.nav-icon{font-size:19px;width:22px;text-align:center}.sidebar-bottom{border-top:1px solid var(--border);margin-top:auto;padding:18px 3px 0;display:flex;align-items:center;gap:10px}.account-avatar{background:#e8edff;color:var(--blue);border-radius:50%;width:34px;height:34px;display:grid;place-items:center;font-weight:700}.account-info{display:flex;flex:1;flex-direction:column;min-width:0}.account-info b{white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.account-info small{color:var(--muted)}.icon-btn{border:0;background:transparent;color:#8794a6;font-size:20px}.main{min-width:0}.topbar{height:75px;background:white;border-bottom:1px solid var(--border);display:flex;align-items:center;justify-content:space-between;padding:0 36px}.breadcrumb{color:#8490a4}.breadcrumb span{padding:0 12px;color:#d0d5df}.breadcrumb b{color:var(--ink)}.top-actions{display:flex;align-items:center;gap:15px}.demo-notice{color:#9a6c20;font-size:11px;background:#fff6df;border-radius:8px;padding:8px}.content{padding:35px;max-width:1440px;margin:auto}.page-head{display:flex;align-items:start;justify-content:space-between;gap:16px;margin-bottom:27px}.page-head h1{font-size:26px;margin:0 0 5px;letter-spacing:-.4px}.page-head p{margin:0;color:var(--muted)}.stack{display:grid;gap:20px}.cards{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:16px}.card{border:1px solid var(--border);background:white;border-radius:16px;padding:22px;box-shadow:0 3px 17px #1c2a4605}.stat small{color:var(--muted)}.stat .value{font-size:30px;font-weight:700;margin-top:8px}.stat .sub{font-size:11px;color:var(--green)}.card h3{font-size:16px;margin:0 0 15px}.section-head{display:flex;justify-content:space-between;align-items:center;gap:12px;margin-bottom:16px}.section-head h3{margin:0}.grid2{display:grid;grid-template-columns:1fr 1fr;gap:17px}.grid3{display:grid;grid-template-columns:repeat(3,1fr);gap:13px}.table-wrap{overflow:auto}.data-table{width:100%;border-collapse:collapse}.data-table th{text-align:left;font-size:11px;color:#8b97aa;font-weight:600;background:#f9fafd}.data-table th,.data-table td{padding:13px 12px;border-bottom:1px solid #edf0f6;vertical-align:middle}.data-table tr:last-child td{border:0}.tiny{font-size:11px;color:var(--muted)}.tag{padding:5px 9px;background:#eaf1ff;color:#385bd3;border-radius:7px;font-size:11px;font-weight:600}.tag.green{background:#e1f7ee;color:#16845d}.tag.gray{background:#f0f2f6;color:#66758b}.empty{padding:36px;text-align:center;color:var(--muted)}.toolbar{display:flex;flex-wrap:wrap;gap:10px;align-items:center}.flex{display:flex;align-items:center;gap:10px}.grow{flex:1}.form-grid{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:16px}.form-actions{display:flex;gap:8px;justify-content:flex-end;margin-top:18px}.editor{display:grid;grid-template-columns:340px 1fr;gap:18px;align-items:start}.assignment-row{border:1px solid var(--border);border-radius:12px;padding:12px;margin-bottom:10px;display:grid;gap:9px}.assignment-row .form-grid{gap:7px}.print-preview{background:#e8edf5;padding:22px;overflow:auto;border-radius:14px}.paper{width:210mm;min-height:297mm;background:white;margin:auto;padding:11mm 10mm;box-shadow:0 4px 22px #182c4220;color:#18263c;font-family:Tahoma,Arial,sans-serif}.paper .paper-head{text-align:center;margin-bottom:8px}.paper h2{font-size:17px;margin:0 0 4px}.paper-sub{font-size:10px}.paper table{width:100%;border-collapse:collapse;table-layout:fixed;font-size:9px}.paper th,.paper td{border:1px solid #9aa9c1;padding:3px 2px;text-align:center;overflow-wrap:anywhere}.paper th{background:#e7eeff}.paper td.name{text-align:left;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.paper .legend{display:grid;grid-template-columns:1fr 1fr;gap:3px 12px;font-size:9px;margin-top:8px}.paper .legend div{break-inside:avoid}.paper .legend strong{color:#1f4db0}.paper .thick td{border-bottom:2px solid #4269cf}.score-input{width:57px;padding:5px;font-size:12px;text-align:center}.mini-input{padding:7px 8px;font-size:12px;width:100%}.danger-zone{border-color:#f1d9d9}.notice{background:#edf4ff;color:#38558e;padding:12px 14px;border-radius:11px;font-size:12px}.warning{background:#fff6e4;color:#986c21;padding:12px;border-radius:10px;font-size:12px}.mobile-menu{display:none}#toast{position:fixed;z-index:99;right:18px;bottom:20px;background:#223659;color:white;border-radius:12px;padding:12px 18px;max-width:420px;display:none;box-shadow:0 12px 30px #0002}#toast.visible{display:block}@media(max-width:1050px){.cards{grid-template-columns:repeat(2,1fr)}.editor{grid-template-columns:1fr}.paper{transform-origin:top left}}@media(max-width:720px){.auth-layout{display:block}.auth-art{display:none}.auth-panel{min-height:100vh}.mobile-brand{display:block;margin-bottom:26px;font-weight:700;color:var(--blue)}.app{display:block}.sidebar{position:fixed;z-index:30;transform:translateX(-100%);transition:transform .2s;box-shadow:0 6px 30px #0001}.sidebar.open{transform:translateX(0)}.mobile-menu{display:block}.topbar{padding:0 16px}.content{padding:18px}.cards,.grid2,.grid3,.form-grid{grid-template-columns:1fr}.page-head{flex-wrap:wrap}.demo-notice{display:none}.paper{transform:scale(.7);margin-bottom:-90mm}.print-preview{padding:5px}}@page{size:A4 portrait;margin:0}@media print{body{background:white}.sidebar,.topbar,.content>*:not(.print-only),.page-head,.toolbar,.no-print{display:none!important}.app,.main,.content{display:block!important;padding:0!important;margin:0!important}.print-only{display:block!important}.print-preview{background:white;padding:0;overflow:visible}.paper{width:210mm;height:297mm;min-height:0;box-shadow:none;margin:0;transform:none!important;padding:10mm}.paper .legend{font-size:8px}.paper th,.paper td{padding:2px 1px}} 
@media print{body>.print-only{display:block!important;position:absolute;left:0;top:0;width:210mm;z-index:100}body>.auth-layout,body>.app,body>#toast{display:none!important}.paper{overflow:hidden}.paper .legend{grid-template-columns:1fr 1fr}}

/* Print only a blank handwriting record: no saved scores or editor widgets. */
.record-print-only{display:none}
.record-paper .record-grid{font-size:8.4px}
.record-paper .record-grid th{font-weight:700;background:#eaf0ff;color:#17335b}
.record-paper .record-grid .record-sub{font-size:7px}
.record-paper .record-grid td{height:4.55mm;padding:0 1px}
.record-paper .record-grid td.name{padding-left:3px;text-overflow:clip}
.record-paper .record-grid th.record-code small{display:block;font-size:7px;font-weight:400}
.record-paper .record-legend{font-size:8px;line-height:1.4;margin-top:6px;display:block}
.record-paper .record-legend-title{font-weight:700;border-bottom:1px solid #a4b2cc;padding-bottom:2px;margin-bottom:4px}
.record-paper .record-legend-row{display:flex;gap:5px;margin:2px 0;break-inside:avoid;overflow-wrap:anywhere}
.record-paper .record-legend-row strong{flex:0 0 54px;color:#204f9c}
.record-paper .record-legend-row span{flex:1}
@media print{body>.record-print-only{display:block!important;position:absolute;inset:0;width:210mm;z-index:9999}body>.app,body>#login,body>#toast{display:none!important}.record-paper{height:297mm;min-height:0;padding:9mm 9mm;overflow:hidden}.record-paper .record-grid td{height:4.55mm}.record-paper .record-legend-row{font-size:8px}}

/* Visible print preview that stays mounted until the teacher closes it. */
.record-preview-overlay{position:fixed;inset:0;z-index:1000;background:#e8edf5;overflow:auto;padding:18px 12px 44px}
.record-preview-controls{position:sticky;top:0;z-index:3;max-width:900px;margin:0 auto 14px;padding:12px 15px;background:white;border:1px solid #dbe4f2;border-radius:12px;display:flex;align-items:center;gap:10px;flex-wrap:wrap;box-shadow:0 4px 14px #17274015}
.record-preview-controls b{font-size:14px}.record-preview-controls span{color:#718099;margin-right:auto;font-size:11px}
.record-preview-document .print-preview{background:transparent;padding:0;overflow:visible}
.record-preview-document .paper{max-width:100%;min-height:297mm}
@media print{
 @page{size:A4 portrait;margin:0}
 html,body{margin:0!important;padding:0!important;background:white!important}
 body>.app,body>#login,body>#toast,body>.print-only{display:none!important}
 body>.record-preview-overlay{display:block!important;position:static!important;inset:auto!important;width:210mm!important;height:auto!important;background:white!important;padding:0!important;margin:0!important;overflow:visible!important}
 .record-preview-controls{display:none!important}
 .record-preview-document,.record-preview-document .print-preview{margin:0!important;padding:0!important;background:white!important;overflow:visible!important}
 .record-preview-document .paper{width:210mm!important;height:297mm!important;min-height:0!important;max-width:none!important;margin:0!important;box-shadow:none!important;transform:none!important;padding:9mm!important;overflow:hidden!important}
}

/* Month-group pastel hues remain identical in print and preview. */
.record-paper .record-grid th.record-month{background:var(--month-bg,#eaf0ff)!important;color:var(--month-fg,#17335b)!important}
.record-paper .record-legend-row.record-month-legend{border-left:3px solid var(--month-fg,#17335b);background:var(--month-bg,#f6f8fc);padding:2px 4px;border-radius:2px}
.record-paper .record-legend-row.record-month-legend strong{color:var(--month-fg,#17335b)!important}
@media print{.record-paper .record-grid th.record-month,.record-paper .record-legend-row.record-month-legend{-webkit-print-color-adjust:exact!important;print-color-adjust:exact!important}}
