:root{
  --indigo:#4f46e5; --indigo2:#6d28d9; --indigo-soft:#eef0ff;
  --teal:#0d9488; --teal-soft:#e6f7f4;
  --ink:#1f2430; --mut:#6b7280; --line:#e5e8f0; --bg:#f7f8fc; --white:#fff;
  --warn:#ef4444; --warn-soft:#fdecec; --ok:#16a34a; --ok-soft:#e7f6ec; --amber-soft:#fef3d9;
}
*{box-sizing:border-box;margin:0;padding:0;}
body{
  font-family:-apple-system,BlinkMacSystemFont,"Segoe UI","Malgun Gothic","Apple SD Gothic Neo",sans-serif;
  background:var(--bg);color:var(--ink);-webkit-font-smoothing:antialiased;
}
button{font-family:inherit;cursor:pointer;}
.view{display:none;min-height:100vh;}
.view.active{display:block;}

/* ---- 로그인 / 회원가입 ---- */
.card{background:var(--white);border:1px solid var(--line);border-radius:18px;box-shadow:0 8px 30px rgba(31,36,48,.06);}
.brand{font-size:34px;font-weight:800;color:var(--indigo);letter-spacing:-1px;}
.brand.sm{font-size:22px;}
.brand-sub{color:var(--mut);margin-top:4px;margin-bottom:22px;font-size:14px;}
form{display:flex;flex-direction:column;gap:14px;text-align:left;}
label{display:flex;flex-direction:column;gap:6px;font-size:13px;font-weight:600;color:var(--mut);}
input,textarea,select{padding:12px 14px;border:1px solid var(--line);border-radius:11px;font-size:16px;color:var(--ink);font-family:inherit;width:100%;}
input:focus,textarea:focus,select:focus{outline:none;border-color:var(--indigo);}
.row2{display:flex;gap:12px;}
.row2 label{flex:1;}
button.primary{margin-top:6px;padding:13px;border:0;border-radius:11px;background:var(--indigo);color:#fff;font-size:16px;font-weight:700;}
button.primary:active{transform:translateY(1px);}
.error{color:#dc2626;font-size:13px;margin-top:12px;min-height:18px;}
.linkbtn{background:none;border:0;color:var(--indigo);font-size:13px;font-weight:700;margin-top:16px;padding:6px;}

/* ---- 로그인/회원가입 : 좌우 분할 ---- */
.auth-split{display:grid;grid-template-columns:1fr 1fr;min-height:100vh;}
.auth-left{background:linear-gradient(135deg,#7c3aed,#4338ca);color:#fff;padding:60px 64px;display:flex;flex-direction:column;justify-content:center;}
.auth-left .al-brand{font-size:19px;font-weight:800;letter-spacing:-.02em;}
.auth-left .al-brand .sub{font-size:13px;font-weight:600;opacity:.8;margin-left:8px;}
.auth-left h1{font-size:38px;font-weight:800;line-height:1.28;margin-top:28px;letter-spacing:-.01em;}
.auth-left p{font-size:14.5px;line-height:1.75;opacity:.88;margin-top:16px;}
.auth-right{display:flex;align-items:center;justify-content:center;padding:40px 24px;background:#fff;}
.auth-box{width:100%;max-width:380px;}
.auth-box.wide{max-width:440px;}
.auth-box.scroll{max-height:92vh;overflow-y:auto;padding:4px 4px 4px 0;}
.auth-box h2{font-size:23px;font-weight:800;}
.auth-box .auth-q{font-size:13.5px;color:var(--mut);margin-top:5px;margin-bottom:22px;}
.role-toggle{display:grid;grid-template-columns:1fr 1fr;gap:10px;margin-bottom:20px;}
.role-btn{display:flex;flex-direction:column;align-items:center;gap:6px;padding:14px 10px;border:1.5px solid var(--line);background:#fff;border-radius:12px;font-size:13.5px;font-weight:700;color:var(--mut);transition:.15s;}
.role-btn .ico{font-size:21px;}
.role-btn.active{border-color:var(--indigo);background:var(--indigo-soft);color:var(--indigo);}
.ic-field{position:relative;margin-bottom:14px;}
.ic-field .ic{position:absolute;left:14px;top:50%;transform:translateY(-50%);font-size:15px;color:#9aa2b4;pointer-events:none;}
.ic-field input{padding-left:40px;}
.remember{display:flex;flex-direction:row;align-items:center;gap:8px;font-size:12.5px;color:var(--mut);font-weight:600;margin:-2px 0 4px;}
.remember input{width:auto;accent-color:var(--indigo);}
.or-div{display:flex;align-items:center;gap:12px;margin:18px 0 14px;color:#c3c9d6;font-size:12px;font-weight:700;}
.or-div::before,.or-div::after{content:'';flex:1;height:1px;background:var(--line);}
.linkbtn2{width:100%;padding:12px;border:1.5px solid var(--line);border-radius:11px;background:#fff;font-size:14px;font-weight:700;color:var(--ink);}
.auth-foot{text-align:center;font-size:12px;color:#c3c9d6;margin-top:22px;}
@media (max-width:840px){ .auth-split{grid-template-columns:1fr;} .auth-left{display:none;} .auth-right{padding:36px 20px;} }

/* ---- 앱 셸 (사이드바 + 본문) ---- */
.app-shell{display:grid;grid-template-columns:236px 1fr;min-height:100vh;}
.side{background:#fafbfe;border-right:1px solid var(--line);padding:20px 15px;display:flex;flex-direction:column;gap:5px;}
.sbrand{display:flex;align-items:center;gap:10px;padding:4px 8px 16px;border-bottom:1px solid var(--line);margin-bottom:12px;}
.sbrand .m{font-size:22px;font-weight:800;color:var(--indigo);letter-spacing:-.02em;}
.side.teal .sbrand .m{color:var(--teal);}
.who-box .who-name{font-size:13px;font-weight:800;}
.who-box .who-sub{font-size:12px;color:var(--mut);}
.nav{display:flex;align-items:center;gap:11px;padding:11px 12px;border-radius:11px;font-size:14.5px;font-weight:700;color:#6b7280;background:transparent;border:0;text-align:left;width:100%;}
.nav.on{background:var(--indigo-soft);color:var(--indigo);}
.side.teal .nav.on{background:var(--teal-soft);color:var(--teal);}
.nav .cnt{margin-left:auto;font-size:11px;font-weight:800;padding:2px 8px;border-radius:999px;background:#eef0ff;color:var(--indigo);}
.nav .cnt.warn{background:var(--warn-soft);color:var(--warn);}
.side .sp{flex:1;}
.logout{font-size:13px;color:var(--mut);font-weight:700;padding:9px 12px;display:flex;align-items:center;gap:11px;background:none;border:0;text-align:left;}

.main{padding:22px 28px 60px;display:flex;flex-direction:column;gap:16px;background:#fbfcfe;min-height:100vh;}
.top{display:flex;align-items:center;gap:14px;flex-wrap:wrap;}
.top .hi{font-size:21px;font-weight:800;}
.top .hs{font-size:13px;color:var(--mut);margin-top:2px;}
.h2{font-size:22px;font-weight:800;}
.search{width:300px;background:#fff;border:1.5px solid var(--line);border-radius:12px;padding:11px 14px;font-size:13.5px;}
.addbtn{margin-left:auto;font-size:13px;font-weight:800;color:#fff;background:var(--indigo);padding:11px 16px;border-radius:11px;white-space:nowrap;border:0;}
.editbtn{margin-left:auto;font-size:13.5px;font-weight:800;color:var(--indigo);background:var(--indigo-soft);padding:10px 16px;border-radius:10px;border:0;}

/* ---- 상태 칩 ---- */
.statusrow{display:flex;gap:9px;align-items:center;flex-wrap:wrap;}
.schip{background:#fff;border:1px solid var(--line);border-radius:12px;padding:9px 15px;display:flex;flex-direction:column;gap:2px;text-align:center;min-width:76px;border:0;font-family:inherit;}
.schip{border:1px solid var(--line);}
.schip .v{font-size:18px;font-weight:800;line-height:1;color:var(--ink);}
.schip .l{font-size:11px;color:var(--mut);font-weight:700;}
.schip.on{background:var(--indigo);border-color:var(--indigo);}
.schip.on .v,.schip.on .l{color:#fff;}
.schip.star{background:#fff8ec;border-color:#f6e0b5;}
.schip.star .v{color:#b45309;}
.sdiv{width:1px;height:36px;background:var(--line);margin:0 3px;}

/* ---- 오답 리스트 ---- */
.list{display:flex;flex-direction:column;gap:10px;}
.item{background:#fff;border:1px solid var(--line);border-radius:13px;padding:12px 16px;display:flex;align-items:center;gap:14px;flex-wrap:wrap;}
.star-tg{font-size:22px;flex:none;width:26px;text-align:center;line-height:1;background:none;border:0;}
.star-tg.on{color:#f5a524;}
.star-tg.off{color:#cfd5e4;}
.qmeta{min-width:170px;flex:1 1 170px;cursor:pointer;}
.qmeta .book{font-size:14.5px;font-weight:800;}
.qmeta .detail{font-size:12.5px;color:var(--mut);margin-top:2px;}
.cmt{flex:2 1 200px;font-size:12.5px;color:#4b5162;background:#f4f5fb;border-radius:8px;padding:8px 11px;cursor:pointer;}
.cmt.warn{background:#fff7e6;color:#b45309;}
.cmt.ok{background:var(--ok-soft);color:#068a45;}
.action{font-size:12.5px;font-weight:800;color:#fff;background:var(--indigo);padding:10px 15px;border-radius:9px;white-space:nowrap;flex:none;border:0;}
.action.ghost{background:var(--indigo-soft);color:var(--indigo);}
.action.teacher{background:var(--teal);}
.action.ghost.teacher{background:var(--teal-soft);color:var(--teal);}
.badge{font-size:12px;font-weight:700;padding:4px 10px;border-radius:999px;white-space:nowrap;flex:none;}
.b-NEW{background:#eef0ff;color:#4f46e5;}
.b-GRADING{background:#fef3c7;color:#b45309;}
.b-RETRY{background:#fee2e2;color:#dc2626;}
.b-MASTERED{background:#dcfce7;color:#16a34a;}
.pager{display:flex;align-items:center;gap:10px;margin-top:4px;font-size:13px;color:var(--mut);font-weight:600;}
.pager button{border:1px solid var(--line);background:#fff;border-radius:8px;padding:7px 13px;font-weight:700;color:#6b7280;}
.pager button:disabled{opacity:.4;}
.empty{text-align:center;color:var(--mut);padding:40px 0;font-size:14px;}
.done{background:var(--ok-soft);border:1px solid #bfe6c9;border-radius:11px;padding:12px 16px;font-size:13.5px;color:#068a45;font-weight:600;}

/* ---- 선생님 학생 카드 ---- */
.lvl{font-size:13.5px;font-weight:800;color:var(--ink);margin:6px 0 2px;}
.cards{display:grid;grid-template-columns:repeat(auto-fill,minmax(230px,1fr));gap:14px;margin-bottom:8px;}
.scard{background:var(--white);border:1px solid var(--line);border-radius:15px;padding:16px 18px;cursor:pointer;transition:.15s;}
.scard:hover{border-color:var(--teal);box-shadow:0 6px 18px rgba(13,148,136,.1);}
.scard .st{display:flex;align-items:center;gap:11px;margin-bottom:10px;}
.scard .av{width:44px;height:44px;border-radius:12px;background:var(--indigo-soft);display:flex;align-items:center;justify-content:center;font-size:22px;flex:none;}
.scard .nm{font-size:16px;font-weight:800;}
.scard .lvchip{font-size:11px;font-weight:800;color:var(--indigo);background:var(--indigo-soft);padding:3px 9px;border-radius:7px;margin-left:auto;}
.scard .info{font-size:12.5px;color:var(--mut);line-height:1.5;}
.scard .foot{display:flex;align-items:center;gap:8px;margin-top:12px;padding-top:11px;border-top:1px solid #f1f3f8;}
.scard .wait{font-size:11px;font-weight:800;color:#b45309;background:var(--amber-soft);padding:4px 9px;border-radius:7px;}
.scard .clear{font-size:11px;font-weight:700;color:#16a34a;background:var(--ok-soft);padding:4px 9px;border-radius:7px;}
.scard .open{margin-left:auto;font-size:12px;font-weight:800;color:var(--teal);}
.scard.addcard{opacity:.6;border-style:dashed;display:flex;align-items:center;justify-content:center;min-height:96px;color:#9aa2b4;font-weight:700;}

/* ---- 채점 대기 큐 ---- */
.qrow{background:#fff;border:1px solid var(--line);border-radius:13px;padding:13px 16px;display:flex;align-items:center;gap:16px;flex-wrap:wrap;}
.stu{display:flex;align-items:center;gap:10px;width:150px;flex:none;}
.stu .av{width:40px;height:40px;border-radius:11px;background:var(--indigo-soft);display:flex;align-items:center;justify-content:center;font-size:20px;flex:none;}
.stu .nm{font-size:14.5px;font-weight:800;}
.stu .lv{font-size:11.5px;color:var(--mut);}
.shot{width:52px;height:52px;border-radius:10px;background:linear-gradient(135deg,#eef1f8,#e2e6f2);border:1px solid #dfe2ee;display:flex;align-items:center;justify-content:center;font-size:19px;color:#9aa2b4;flex:none;overflow:hidden;}
.shot img{width:100%;height:100%;object-fit:cover;}
.when{flex:1;font-size:12px;color:#9aa2b4;font-weight:600;text-align:right;min-width:80px;}

/* ---- 프로필(내 정보) ---- */
.profile{background:#fff;border:1px solid var(--line);border-radius:16px;padding:20px 22px;display:flex;align-items:center;gap:16px;flex-wrap:wrap;}
.avatar{width:64px;height:64px;border-radius:18px;background:linear-gradient(135deg,#a78bfa,#6366f1);display:flex;align-items:center;justify-content:center;font-size:32px;flex:none;}
.profile .nm{font-size:20px;font-weight:800;}
.profile .meta{font-size:13.5px;color:var(--mut);margin-top:2px;}
.profile .id{margin-left:auto;text-align:right;}
.profile .id .l{font-size:12px;color:var(--mut);}
.profile .id .v{font-size:14px;font-weight:700;}
.grid2{display:grid;grid-template-columns:1fr 1fr;gap:16px;margin-top:16px;}
.pcard{background:#fff;border:1px solid var(--line);border-radius:16px;padding:20px 22px;}
.pcard h4{font-size:15px;font-weight:800;margin-bottom:6px;}
.frow{display:flex;align-items:center;padding:11px 0;border-bottom:1px solid #f1f3f8;}
.frow:last-child{border-bottom:none;}
.frow .fl{width:110px;flex:none;color:var(--mut);font-size:13px;font-weight:600;}
.frow .fv{font-size:14.5px;font-weight:700;flex:1;}
.frow input{padding:8px 10px;font-size:14px;}
.full{grid-column:1 / -1;}

/* ---- 모달 ---- */
.overlay{position:fixed;inset:0;background:rgba(23,20,45,.5);display:none;align-items:center;justify-content:center;z-index:100;padding:20px;}
.overlay.active{display:flex;}
.modal{width:100%;max-width:680px;background:#fff;border-radius:18px;overflow:hidden;box-shadow:0 30px 80px -20px rgba(0,0,0,.5);max-height:90vh;display:flex;flex-direction:column;}
.modal.wide{max-width:780px;}
.mhead{display:flex;align-items:center;gap:12px;padding:18px 22px;border-bottom:1px solid var(--line);flex:none;}
.mhead .t{font-size:18px;font-weight:800;}
.mhead .s{font-size:12.5px;color:var(--mut);margin-top:2px;}
.mhead .x{margin-left:auto;width:34px;height:34px;border-radius:9px;background:#f3f4f8;display:flex;align-items:center;justify-content:center;font-size:16px;color:#6b7280;font-weight:700;border:0;flex:none;}
.mbody{padding:20px 22px;overflow-y:auto;flex:1;}
.mfoot{display:flex;align-items:center;gap:12px;padding:16px 22px;border-top:1px solid var(--line);background:#fbfcfe;flex:none;}
.mfoot .cancel{font-size:14px;font-weight:800;color:#6b7280;background:#f3f4f8;padding:12px 20px;border-radius:11px;border:0;}
.mfoot .submit{margin-left:auto;font-size:14px;font-weight:800;color:#fff;background:var(--indigo);padding:12px 22px;border-radius:11px;border:0;}
.field{margin-bottom:16px;}
.lab{font-size:13px;font-weight:800;color:#3a4051;margin-bottom:7px;}
.lab .opt{font-size:11px;font-weight:700;color:#aab0bf;}
.drop{border:2px dashed #cbb8f2;border-radius:14px;background:#faf9ff;padding:24px;text-align:center;color:#6b7280;}
.drop .big{font-size:32px;}
.drop .t{font-size:13.5px;font-weight:800;color:var(--indigo2);margin-top:6px;}
.drop input[type=file]{margin-top:12px;}
.drop.has img{max-width:100%;max-height:180px;border-radius:10px;margin-top:8px;}

.qinfo{background:#eef0ff;border:1px solid #d9dcfb;border-radius:14px;padding:14px 16px;margin-bottom:18px;}
.qinfo .qh{font-size:12px;font-weight:800;color:var(--indigo);margin-bottom:9px;}
.qinfo .qd{display:flex;align-items:center;gap:12px;flex-wrap:wrap;}
.qinfo .book{font-size:16px;font-weight:800;}
.qinfo .meta{font-size:13px;color:#5b6270;font-weight:600;}
.qinfo .round{margin-left:auto;font-size:12.5px;font-weight:800;color:#fff;background:var(--indigo);padding:7px 14px;border-radius:999px;}

/* ---- 오답 상세 / 채점판 ---- */
.rounds{display:flex;gap:9px;margin-bottom:14px;flex-wrap:wrap;}
.rt{display:flex;align-items:center;gap:8px;font-size:13px;font-weight:800;padding:9px 14px;border-radius:10px;background:#f5f6fb;border:1px solid var(--line);color:#5b6270;}
.rt .n{width:20px;height:20px;border-radius:50%;background:#c3c9d6;color:#fff;font-size:11px;font-weight:800;display:flex;align-items:center;justify-content:center;}
.rt.on{background:var(--indigo-soft);border-color:#c7ccff;color:var(--indigo);}
.rt.on .n{background:var(--indigo);}
.rt.g-CORRECT .n{background:var(--ok);}
.rt.g-WRONG .n{background:var(--warn);}
.imgbox{border-radius:14px;background:linear-gradient(135deg,#eef1f8,#e2e6f2);border:1px solid #dfe2ee;display:flex;align-items:center;justify-content:center;min-height:200px;overflow:hidden;}
.imgbox img{width:100%;max-height:420px;object-fit:contain;}
.gradebar{display:flex;align-items:center;gap:12px;margin-top:16px;}
.gbtn{flex:1;text-align:center;font-size:15px;font-weight:800;padding:13px;border-radius:12px;border:1.5px solid;background:#fff;}
.gbtn.o{background:var(--ok-soft);color:var(--ok);border-color:#bfe6c9;}
.gbtn.x{background:var(--warn-soft);color:var(--warn);border-color:#f3c9c9;}
.gbtn.o.picked{background:var(--ok);color:#fff;}
.gbtn.x.picked{background:var(--warn);color:#fff;}
.annot{margin-top:16px;background:#fbfaff;border:1px solid #ece6fb;border-radius:14px;padding:16px 18px;}
.annot .h{font-size:14px;font-weight:800;color:var(--indigo2);display:flex;align-items:center;gap:8px;margin-bottom:12px;}
.annot .h .edit{margin-left:auto;font-size:12px;font-weight:800;color:var(--indigo2);background:#fff;border:1px solid #e0d6fb;border-radius:8px;padding:6px 11px;}
.abub{background:#fff;border:1px solid var(--line);border-radius:12px;padding:11px 13px;font-size:13.5px;color:#374151;line-height:1.55;}
.abub .nm{font-size:11.5px;font-weight:800;color:var(--ink);display:block;margin-bottom:3px;}
.empty-annot{font-size:13px;color:#aab0bf;}
.annot textarea{min-height:80px;}
.annot .save{margin-top:10px;font-size:12.5px;font-weight:800;color:#fff;background:var(--indigo2);padding:9px 15px;border-radius:9px;border:0;}
.up-in-detail{margin-top:16px;font-size:13px;font-weight:800;color:#fff;background:var(--indigo);padding:11px 16px;border-radius:11px;border:0;width:100%;}
