@font-face{font-family:Koryo;src:local('Segoe UI')}*{box-sizing:border-box}body{margin:0;background:#f5f4ef;color:#202b28;font-family:Koryo,system-ui,sans-serif;font-size:15px}button,input,select,textarea{font:inherit}button,a,input,select,textarea{touch-action:manipulation}button{cursor:pointer}button:disabled{opacity:.45;cursor:not-allowed}a{color:inherit}button:focus-visible,a:focus-visible{outline:3px solid #bb8a35;outline-offset:3px}input:focus,select:focus,textarea:focus{outline:2px solid #7d9888;outline-offset:1px}input,select,textarea{width:100%;background:#fff;border:1px solid #d8ddd7;border-radius:10px;padding:12px;color:#202b28}input[type=checkbox]{width:18px;height:18px;accent-color:#265942;margin:0}textarea{resize:vertical;min-height:80px}label{display:block;font-weight:600;font-size:13px}label>input,label>select,label>textarea{margin-top:7px}h1,h2,h3,p{margin-top:0}h1{font-size:34px;letter-spacing:-1.1px;line-height:1.2;margin-bottom:10px}h2{font-size:22px;letter-spacing:-.5px}h3{font-size:17px}small,.muted{color:#6b766f}.shell{display:grid;grid-template-columns:218px 1fr;min-height:100vh}.side{position:sticky;top:0;height:100vh;background:#fff;border-right:1px solid #e5e8e0;padding:36px 23px;display:flex;flex-direction:column}.brand{font-size:29px;font-weight:800;letter-spacing:5px;margin-bottom:3px}.brand small{display:block;font-size:10px;letter-spacing:2px;margin-top:8px}.brand-rule{width:26px;height:3px;background:#a22d3b;margin:20px 0 35px}.nav{display:grid;gap:8px}.nav button{border:0;text-align:left;background:transparent;padding:14px 16px;border-radius:12px;color:#6d7771;font-weight:600}.nav button.active{background:#eaf0e9;color:#265942}.side-foot{margin-top:auto;font-size:12px;line-height:1.8}.side-foot a{display:block;margin-top:12px}.main{width:100%;max-width:1330px;padding:38px 48px 100px}.topline{display:flex;align-items:center;justify-content:space-between;gap:16px;margin-bottom:34px}.eyebrow{font-size:11px;letter-spacing:2px;text-transform:uppercase;color:#707d74;font-weight:600}.trial{padding:7px 12px;background:#fbf1dc;border:1px solid #e8dab8;border-radius:99px;color:#806226;font-size:12px}.avatar{display:inline-flex;align-items:center;justify-content:center;width:36px;height:36px;border-radius:50%;background:#e7ece5;color:#305844;font-weight:700}.intro{margin-bottom:28px}.intro p{color:#6b766f;line-height:1.6}.panel,.student-card,.management-card{background:#fff;border:1px solid #e2e7dd;border-radius:18px;box-shadow:0 2px 4px #172b1b03}.panel{padding:22px}.filters{display:grid;grid-template-columns:1fr 1.2fr .9fr auto;gap:16px;align-items:end}.primary,.secondary,.textbutton{border-radius:10px;padding:12px 19px;font-weight:600;min-height:44px;border:1px solid transparent;white-space:nowrap}.primary{background:#265942;color:#fff}.primary:hover{background:#1b4633}.secondary{background:#fff;border-color:#d8dfd4;color:#365240}.secondary:hover{background:#f2f5ef}.textbutton{background:transparent;color:#476750;padding:8px 10px;min-height:36px}.danger{color:#a34d3b}.row{display:flex;justify-content:space-between;align-items:center;gap:15px}.wrap{flex-wrap:wrap}.roster-top{padding:27px 1px 16px}.roster-top h2{margin:0}.session-state{font-size:12px;color:#6b766f}.roster{display:grid;gap:14px}.student-card{padding:20px 23px}.student-head{display:flex;align-items:center;gap:14px;flex-wrap:wrap;margin-bottom:20px}.initials{width:42px;height:42px;border-radius:13px;background:#f1f2ed;display:grid;place-items:center;font-weight:600;color:#52634f}.student-name{margin:0;font-size:17px;font-weight:650;background:none;border:0;padding:0;text-align:left;color:#202b28}.student-name:hover{text-decoration:underline}.student-sub{font-size:12px;color:#748071;margin-top:4px}.belt-thumb{width:66px;height:43px;object-fit:contain;margin-left:auto}.attendance{width:auto;padding:9px 12px;font-size:13px;min-width:157px;background:#f6f8f3}.scores{display:grid;grid-template-columns:repeat(4,1fr);gap:24px}.scorelabel{display:block;font-size:12px;font-weight:600;margin-bottom:8px}.segmented{display:flex;border:1px solid #e3e7df;background:#f8f9f5;border-radius:10px;padding:3px;gap:3px;max-width:190px}.score{border:0;background:transparent;border-radius:7px;min-height:36px;flex:1;font-weight:600;color:#657269}.score[aria-pressed=true][data-value="2"]{background:#d8ebdd;color:#1b6538}.score[aria-pressed=true][data-value="1"]{background:#f5e8bf;color:#805e0c}.score[aria-pressed=true][data-value="0"]{background:#f4ddd3;color:#96402d}.student-bottom{border-top:1px solid #f0f2eb;margin-top:17px;padding-top:13px;display:flex;align-items:center;gap:20px;flex-wrap:wrap}.check{display:inline-flex;align-items:center;gap:8px;font-weight:400;font-size:13px}.points{margin-left:auto;color:#265942;font-size:13px;font-weight:650}.note-link{font-size:13px;padding:0;min-height:25px}.notes{margin-top:14px;display:grid;grid-template-columns:1fr 1fr;gap:14px}.notice{padding:14px 16px;border-radius:12px;background:#f4f7f0;color:#526951;line-height:1.6;font-size:14px}.notice.warn{background:#fcf0e1;color:#875a26}.empty{padding:50px 25px;text-align:center;background:#fff;border:1px dashed #d8dfd3;border-radius:18px;color:#6b766f}.empty h2{color:#2b4734}.actionbar{position:sticky;bottom:14px;display:flex;align-items:center;justify-content:space-between;background:#fffefa;border:1px solid #dae2d2;border-radius:16px;box-shadow:0 6px 28px #1c3a1720;padding:15px 22px;margin-top:22px;gap:15px;z-index:5}.actionbar small{display:block;margin-top:3px}.actionbar .buttons{display:flex;gap:10px}.toast{position:fixed;bottom:24px;left:50%;transform:translateX(-50%);padding:14px 22px;background:#254c38;color:#fff;box-shadow:0 5px 24px #17382430;border-radius:12px;z-index:100;max-width:90vw;line-height:1.5}.toast.error{background:#a04435}.grid{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:18px}.management-card{padding:24px}.management-card h3{margin-bottom:7px}.management-card .eyebrow{margin-bottom:12px}.management-card .sub{line-height:1.6;color:#6b766f;margin-bottom:18px}.class-list{display:grid;gap:10px;margin:20px 0}.class-item{padding:14px;border-radius:12px;background:#f7f8f3;display:flex;align-items:center;justify-content:space-between;gap:10px;font-size:13px}.class-item strong{display:block;font-size:14px;margin-bottom:4px}.student-list{display:grid;gap:10px}.list-person{width:100%;text-align:left;background:#fff;border:1px solid #e2e7dd;border-radius:14px;padding:18px;display:flex;align-items:center;gap:15px}.list-person:hover{border-color:#a5bba9}.list-person .name{font-weight:600;display:block}.list-person .small{font-size:12px;color:#6b766f;display:block;margin-top:5px}.list-person .total{margin-left:auto;text-align:right;font-weight:600;color:#365640}.list-person .total small{display:block;font-size:11px;font-weight:400}.searchrow{margin-bottom:20px;display:flex;gap:15px}.searchrow input{max-width:500px}.modal-backdrop{position:fixed;inset:0;background:#10281960;display:flex;align-items:center;justify-content:center;padding:25px;z-index:20;backdrop-filter:blur(3px)}.modal{position:relative;background:#fffdfa;border-radius:22px;width:660px;max-width:100%;max-height:90vh;overflow:auto;padding:28px 30px;box-shadow:0 16px 70px #14241f40}.modal.wide{width:1020px}.modal .close{position:absolute;top:14px;right:14px;background:#f0f3ec;border:0;border-radius:50%;width:34px;height:34px;font-size:20px;color:#556353}.modal h2{padding-right:25px;margin-bottom:20px}.form-grid{display:grid;grid-template-columns:1fr 1fr;gap:18px}.form-grid .full{grid-column:1/-1}.form-actions{margin-top:24px;display:flex;justify-content:flex-end;gap:10px}.checks{display:grid;gap:11px;background:#f4f6ef;border-radius:12px;padding:15px}.profile-top{display:flex;align-items:center;gap:18px;margin-bottom:20px}.profile-top img{width:150px;max-width:40%;height:100px;object-fit:contain}.profile-total{font-size:34px;font-weight:650}.profile-total small{display:block;font-size:12px;font-weight:400;margin-top:3px}.bar{height:9px;background:#e4e9df;border-radius:99px;overflow:hidden;margin:12px 0}.bar>span{display:block;height:100%;background:#527855}.stripe-set{display:grid;grid-template-columns:repeat(4,1fr);gap:14px;margin:20px 0 12px}.vessel{height:66px;border:2px solid var(--stripe);border-radius:9px;position:relative;overflow:hidden;background:#f6f7f3}.vessel>span{position:absolute;bottom:0;left:0;right:0;height:var(--fill);background:var(--stripe)}.vessel>em{position:absolute;inset:0;display:grid;place-items:center;font-size:13px;font-style:normal;font-weight:700;color:var(--text)}.progress-caption{font-size:13px;color:#6b766f;line-height:1.6}.profile-section{border-top:1px solid #e5e9df;padding-top:20px;margin-top:20px}.history-item{padding:12px 0;border-bottom:1px solid #e9ede4;font-size:13px;display:flex;justify-content:space-between;gap:12px}.report-frame{width:100%;height:600px;border:1px solid #e5e9e0;border-radius:12px;background:#f3f5ef}.import-table{width:100%;border-collapse:collapse;font-size:13px;margin-top:20px}.import-table td,.import-table th{padding:12px;border-bottom:1px solid #e5e9df;text-align:left}.import-scroll{overflow:auto;max-height:430px}.badge{font-size:11px;padding:4px 8px;background:#e9f0e5;color:#466c3a;border-radius:99px;display:inline-block}.badge.bad{background:#f7e1d7;color:#9b4230}.settings-grid{display:grid;grid-template-columns:repeat(3,1fr);gap:14px}.settings-grid label{font-size:12px}.loading{padding:60px;text-align:center;color:#6b766f}.inline-form{display:flex;gap:10px;align-items:end}.inline-form label{flex:1}.section-gap{margin-top:24px}.hidden{display:none!important}
@media(min-width:1450px){.main{margin:0 auto}}@media(max-width:1100px){.shell{grid-template-columns:180px 1fr}.side{padding:30px 18px}.main{padding:30px 28px 90px}.scores{gap:12px}.filters{grid-template-columns:1fr 1fr}.filters .primary{align-self:end}}@media(max-width:720px){.shell{display:block}.side{position:static;width:100%;height:auto;padding:18px 20px;border-right:0;border-bottom:1px solid #e2e7dd;flex-direction:row;align-items:center;gap:20px}.brand{font-size:21px;letter-spacing:3px}.brand small,.brand-rule,.side-foot{display:none}.nav{display:flex;margin-left:auto;gap:3px}.nav button{font-size:12px;padding:10px}.main{padding:24px 18px 80px}.topline{margin-bottom:24px}.topline .user-name{display:none}h1{font-size:29px}.intro{margin-bottom:20px}.filters{gap:13px;grid-template-columns:1fr 1fr}.filters label:nth-child(2){grid-column:2}.panel{padding:16px;border-radius:14px}.student-card{padding:17px}.student-head{gap:10px;margin-bottom:17px}.belt-thumb{width:58px}.attendance{width:100%;min-width:0}.scores{grid-template-columns:1fr 1fr;gap:14px 20px}.segmented{max-width:none}.score{min-height:42px}.student-bottom{gap:13px}.points{margin-left:auto}.notes{grid-template-columns:1fr}.actionbar{padding:14px;bottom:10px;flex-wrap:wrap}.actionbar .buttons{width:100%;justify-content:flex-end}.actionbar .buttons button{flex:1;font-size:13px;padding:11px}.actionbar .row{width:100%}.roster-top h2{font-size:18px}.roster-top{gap:6px;flex-wrap:wrap}.roster-top .textbutton{font-size:12px}.grid{grid-template-columns:1fr}.management-card{padding:20px}.modal-backdrop{padding:12px}.modal{padding:24px 20px;max-height:92vh;border-radius:17px}.form-grid{grid-template-columns:1fr}.settings-grid{grid-template-columns:1fr 1fr}.searchrow{flex-wrap:wrap}.list-person{padding:14px}.list-person .belt-thumb{display:none}.profile-top img{width:125px}.profile-total{font-size:28px}.inline-form{flex-wrap:wrap}.report-frame{height:65vh}}

/* Fast classroom grading */
.quick-grading{margin-bottom:18px}.bulk-scores{display:grid;grid-template-columns:repeat(3,1fr);gap:12px}.bulk-grade{border:1px solid;border-radius:14px;min-height:76px;display:grid;place-content:center;gap:4px;padding:12px}.bulk-grade strong{font-size:16px}.bulk-grade span{font-size:12px;opacity:.85}.bulk-grade.green{background:#e1f0e4;border-color:#94b89c;color:#245c37}.bulk-grade.yellow{background:#fbefc8;border-color:#d0b756;color:#765d10}.bulk-grade.red{background:#f7e0db;border-color:#ce9488;color:#983c2a}.bulk-grade:hover{filter:brightness(.97)}.quick-help{font-size:12px;line-height:1.5;color:#748071;padding:10px 2px;display:flex;align-items:center;justify-content:space-between;gap:10px}.quick-help .textbutton{font-size:12px;padding:0}.all-present{width:100%;background:#fff;border:1px solid #dce3d7;border-radius:13px;display:flex;align-items:center;justify-content:space-between;min-height:56px;padding:12px 17px;color:#3a4d3e;font-weight:600}.all-present:disabled{opacity:1;color:#657269}.presence-tick{display:grid;place-items:center;border:1px solid #c6d3c0;background:#f1f5ed;border-radius:8px;width:34px;height:34px;font-size:23px;color:#426343;flex:none}.presence-tick.checked{background:#265942;border-color:#265942;color:white}.student-head{margin-bottom:10px;flex-wrap:nowrap}.student-title{min-width:0;flex:1}.present-check{position:relative;display:block}.present-check input{position:absolute;inset:0;width:100%;height:100%;opacity:0;margin:0;cursor:pointer}.present-check .presence-tick{color:transparent}.present-check input:checked+.presence-tick{background:#265942;border-color:#265942;color:#fff}.present-check input:focus-visible+.presence-tick{outline:3px solid #bb8a35;outline-offset:3px}.attendance-options{font-size:12px;color:#6b766f;margin-bottom:14px}.attendance-options summary{cursor:pointer;width:fit-content}.attendance-options select{margin-top:8px;min-width:0}.compact-scores{grid-template-columns:repeat(4,minmax(0,1fr));gap:12px}.compact-scores .scorelabel{font-size:11px;color:#687567;font-weight:500;margin-bottom:7px}.grade-cell{border:1px solid;border-radius:11px;width:100%;height:55px;font-size:22px;font-weight:650}.grade-cell.empty{border:1px dashed #cdd6c5;background:#f7f9f4;color:#8d9988}.grade-cell.grade-2{background:#def0e2;border-color:#a8c3ac;color:#28683c}.grade-cell.grade-1{background:#faf0cd;border-color:#d9c06a;color:#806511}.grade-cell.grade-0{background:#f7e1db;border-color:#d8a096;color:#993f31}.grade-cell:disabled{opacity:.65}.compact-scores+.notice{margin-top:12px}.student-bottom{gap:16px;margin-top:14px;padding-top:12px}.card-poomsae{display:flex;justify-content:space-between;align-items:center;gap:10px;background:#f8f1dd;border:1px solid #e5d7b4;border-radius:10px;padding:11px 13px;margin-top:15px}.card-poomsae label{font-weight:600;color:#765e25}.card-poomsae small{font-size:11px;color:#937d4a}.card-summary{display:grid;grid-template-columns:80px 90px minmax(0,1fr);align-items:center;gap:15px;margin-top:17px}.card-metric{border:1px solid #e4e9dd;border-radius:12px;text-align:center;padding:10px 8px;background:#fbfcf8}.card-metric span{display:block;font-size:11px;color:#7a8675;margin-bottom:4px}.card-metric strong{font-size:25px;color:#345940}.card-metric.belt-metric{background:#faf5e8;border-color:#eadab2}.card-metric.belt-metric strong{color:#967328}.card-progress .scorelabel{font-size:11px;font-weight:400;color:#748071}.stripe-track{position:relative;height:26px;background:#edf0e8;border:1px solid #dce2d5;border-radius:99px;overflow:hidden}.stripe-track>span{position:absolute;inset:0 auto 0 0;background:var(--active-stripe);opacity:.65}.stripe-track>b{position:absolute;inset:0;display:grid;place-items:center;font-size:12px;color:#1f3022;text-shadow:0 1px 2px #fff;font-weight:700}.card-belt-caption{font-size:11px;color:#7c8677;margin-top:10px;text-align:right}.language-switch{width:auto;padding:7px 10px;font-size:12px;margin:0;background:#fff;max-width:115px}.topline>.row{gap:10px}.notes textarea{font-size:14px}
@media(max-width:720px){.bulk-scores{gap:9px}.bulk-grade{min-height:74px;padding:10px 6px}.bulk-grade strong{font-size:14px}.quick-help{font-size:11px;flex-wrap:wrap}.student-name{font-size:18px}.student-sub{font-size:11px;line-height:1.5}.compact-scores{grid-template-columns:repeat(4,minmax(0,1fr));gap:8px}.compact-scores .scorelabel{font-size:10px;letter-spacing:-.2px;white-space:nowrap}.grade-cell{height:52px;font-size:22px}.card-summary{grid-template-columns:62px 70px minmax(0,1fr);gap:9px}.card-metric{padding:9px 4px}.card-metric strong{font-size:23px}.card-progress .scorelabel{font-size:10px}.card-poomsae{padding:10px}.student-bottom{gap:12px}.student-bottom .note-link{font-size:12px}.topline{align-items:flex-start;gap:8px;margin-bottom:20px}.topline>.eyebrow{max-width:100px;line-height:1.5}.topline>.row{gap:7px;flex-wrap:wrap;justify-content:flex-end}.topline .avatar{display:none}.trial{font-size:10px;padding:6px 8px}.language-switch{font-size:11px;padding:6px 8px}.intro h1{font-size:26px}.intro p{font-size:13px}.roster-top{padding-top:20px}.card-poomsae small{font-size:10px}}
