:root{--blue:#2563eb;--line:#dbe3ef;--bg:#f6f9fd;--text:#1f2d3d;--muted:#7b8794;--card:#fff;--green:#16a34a;--red:#ef4444;--orange:#f59e0b}
*{box-sizing:border-box}body{margin:0;font-family:-apple-system,BlinkMacSystemFont,'Segoe UI',Roboto,'Noto Sans KR',Arial,sans-serif;background:var(--bg);color:var(--text)}
.topbar{display:flex;justify-content:space-between;align-items:center;padding:18px 24px;background:#fff;border-bottom:1px solid var(--line);position:sticky;top:0;z-index:10}.topbar strong{display:block;font-size:18px}.muted{color:var(--muted);font-size:13px}.sync{font-size:13px;color:var(--muted)}
.tabs{display:flex;gap:10px;padding:14px 22px;background:#fff;border-bottom:1px solid var(--line);overflow:auto}.tab{border:1px solid var(--line);background:#fff;border-radius:10px;padding:11px 15px;font-weight:700;color:#2272cf;white-space:nowrap}.tab.active{background:var(--blue);color:#fff;border-color:var(--blue)}
#app{padding:22px}.panel{background:#fff;border:1px solid var(--line);border-radius:18px;padding:20px;box-shadow:0 4px 16px rgba(15,23,42,.04)}.row{display:flex;gap:12px;align-items:center;flex-wrap:wrap}.btn{border:0;border-radius:10px;padding:11px 16px;background:var(--blue);color:#fff;font-weight:800;cursor:pointer}.btn.secondary{background:#fff;color:var(--blue);border:1px solid var(--line)}.btn.danger{background:#fff;color:var(--red);border:1px solid #fecaca}.btn.green{background:var(--green)}
select,input,textarea{border:1px solid var(--line);border-radius:10px;padding:11px 12px;font:inherit;background:#fff}textarea{width:100%;min-height:88px;resize:vertical}.grid{display:grid;grid-template-columns:330px 1fr;gap:18px}.list{background:#fff;border:1px solid var(--line);border-radius:18px;overflow:hidden}.listHead{padding:14px 16px;font-weight:900;border-bottom:1px solid var(--line)}.studentList{max-height:66vh;overflow:auto}.studentBtn{width:100%;display:grid;grid-template-columns:62px 1fr;align-items:center;border:0;background:#fff;border-bottom:1px solid var(--line);padding:0;cursor:pointer}.studentBtn.active{background:#eaf5ff}.num{font-weight:800;text-align:center;padding:18px 8px;border-right:1px solid var(--line)}.name{padding:12px 14px;text-align:center}.badge{display:inline-flex;gap:4px;align-items:center;border:2px solid #f2bd00;background:#fff7d6;color:#8a5a00;border-radius:999px;padding:8px 18px;font-weight:900}.count{color:#d97706;font-size:12px}.detail{background:#fff;border:1px solid var(--line);border-radius:18px;padding:22px}.detailTitle{text-align:center;font-size:22px;font-weight:900;border-bottom:3px solid #2396eb;padding-bottom:16px;margin-bottom:18px}.profile{display:flex;gap:22px;align-items:flex-start}.photo{width:150px;height:180px;border:2px dashed var(--line);border-radius:18px;display:flex;align-items:center;justify-content:center;color:var(--muted);overflow:hidden;background:#fafcff}.photo img{width:100%;height:100%;object-fit:cover}.fields{flex:1;display:grid;gap:10px}.field2{display:grid;grid-template-columns:1fr 1fr;gap:12px}.label{font-size:13px;color:var(--muted);font-weight:800}.noteItem{border:1px solid var(--line);border-left:5px solid #2396eb;background:#fbfdff;border-radius:10px;padding:12px;margin-top:8px;display:flex;justify-content:space-between;gap:8px}.empty{padding:50px;text-align:center;color:var(--muted)}.uploadBox{border:3px dashed #4aa3df;background:#f3fbff;border-radius:18px;padding:20px;text-align:center;margin-bottom:16px}.hint{font-size:13px;color:#6b7280}.placeholder{min-height:380px;display:flex;align-items:center;justify-content:center;text-align:center;color:var(--muted)}
@media(max-width:850px){#app{padding:14px}.grid{grid-template-columns:1fr}.profile{flex-direction:column}.photo{width:100%;height:220px}.field2{grid-template-columns:1fr}.topbar{padding:14px}.tabs{padding:10px}.studentList{max-height:none}}
.tableWrap{overflow:auto}.dataTable{width:100%;border-collapse:collapse;min-width:980px;background:#fff}.dataTable th,.dataTable td{border:1px solid var(--line);padding:8px;text-align:center;white-space:nowrap}.dataTable th{background:#f1f5f9;font-weight:900}.dataTable input,.dataTable select{width:100%;min-width:72px;padding:7px 8px}.dataTable .bmiCell{font-weight:900;color:#0f766e;background:#f0fdfa}

.papsTable th{white-space:nowrap;text-align:center}
.papsTable td{white-space:nowrap;text-align:center}
.papsTable .papsInput{width:72px;text-align:center}
.papsTable .bestCell,.papsTable .bmiCell{font-weight:700;background:#f8fafc}

.assessTable .assessInput{width:76px;text-align:center}.assessTable .assessTotal{font-weight:900;background:#f8fafc;color:#0f766e}

/* ===================== 홈/체육수업 달력 ===================== */
.calendarHeader h2{font-size:22px}.calTitle{text-align:center;font-weight:900;font-size:22px;margin-bottom:14px}.calWeekHead{display:grid;grid-template-columns:repeat(7,1fr);border:1px solid var(--line);border-bottom:0;background:#f8fafc;border-radius:14px 14px 0 0;overflow:hidden}.calWeekHead span{text-align:center;padding:10px;font-weight:900;border-right:1px solid var(--line)}.calWeekHead span:last-child{border-right:0}.calWeekHead span:first-child{color:#ef4444}.calWeekHead span:last-child{color:#2563eb}.calGrid{display:grid;grid-template-columns:repeat(7,1fr);border-left:1px solid var(--line);border-top:1px solid var(--line)}.calDay{min-height:132px;background:#fff;border-right:1px solid var(--line);border-bottom:1px solid var(--line);padding:8px;cursor:pointer;position:relative}.calDay:hover{background:#f8fbff}.calDay.other{background:#f8fafc;color:#94a3b8}.calDay.today{box-shadow:inset 0 0 0 3px #93c5fd;background:#eff6ff}.calDate{font-weight:900;margin-bottom:6px}.calEvents{display:grid;gap:5px}.lessonBadge,.moreBadge{border:1px solid #bfdbfe;background:#eff6ff;color:#1d4ed8;border-radius:9px;padding:5px 7px;font-size:12px;text-align:left;cursor:pointer;line-height:1.25}.lessonBadge:hover,.moreBadge:hover{background:#dbeafe}.lessonBadge b{color:#b45309}.calModal{position:fixed;inset:0;background:rgba(15,23,42,.38);z-index:100;display:flex;align-items:center;justify-content:center;padding:18px}.calModal.hidden{display:none}.calDialog{background:#fff;border-radius:18px;max-width:720px;width:min(720px,96vw);max-height:82vh;overflow:auto;padding:20px;box-shadow:0 20px 60px rgba(15,23,42,.28)}.calDialog h3{margin:0}.calDetailItem{border:1px solid var(--line);border-left:5px solid var(--blue);border-radius:12px;padding:12px;margin-top:10px;background:#fbfdff;line-height:1.8}.mobileDay{border:1px solid var(--line);border-radius:16px;margin-bottom:12px;background:#fff;overflow:hidden}.mobileDay.today{border-color:#60a5fa;box-shadow:0 0 0 3px #dbeafe}.mobileDate{display:flex;justify-content:space-between;gap:10px;align-items:center;background:#f8fafc;border-bottom:1px solid var(--line);padding:13px 14px}.mobileDate span{font-size:13px;color:var(--muted);font-weight:800}.mobileEvents{display:grid;gap:8px;padding:10px}.mobileLesson{border:1px solid #bfdbfe;background:#eff6ff;border-radius:12px;padding:12px;text-align:left;display:grid;gap:5px;color:#1e40af}.mobileLesson small{color:#475569;font-size:12px}.mobileLesson b{color:#b45309}
@media(max-width:760px){.calendarHeader .row{align-items:stretch}.calendarHeader input[type=month]{width:100%}.calendarHeader .btn{flex:1;padding:10px}.calTitle{font-size:18px;margin-bottom:12px}.calWeekHead,.calGrid{display:none}.calDialog{width:100%;max-height:88vh;padding:16px}.calModal{align-items:flex-end;padding:10px}.calDetailItem{font-size:14px}.mobileEvents .hint{padding:8px 4px}}
.grid2{display:grid;grid-template-columns:1fr 1fr;gap:16px}
.formGrid{display:grid;grid-template-columns:1fr 1fr;gap:12px}
.formGrid label,.panel label{display:block;margin-bottom:10px}
.wrap{flex-wrap:wrap}
.dangerPanel{border-color:#fecaca;background:#fffafa}.btn.danger{background:#dc2626;color:#fff;border-color:#dc2626}.btn.danger:hover{filter:brightness(.95)}
@media(max-width:760px){.grid2,.formGrid{grid-template-columns:1fr}.dangerPanel .row{align-items:stretch}.dangerPanel .btn{width:100%}}

/* v1.6.0 학교스포츠클럽 */
.clubDeptList{display:flex;flex-direction:column;gap:8px;margin-top:12px}
.clubDept{border:1px solid #e5e7eb;background:#fff;border-radius:14px;padding:12px;text-align:left;display:flex;justify-content:space-between;align-items:center;gap:8px;cursor:pointer}
.clubDept.active{border-color:#16a34a;background:#ecfdf5;box-shadow:0 0 0 2px rgba(22,163,74,.12)}
.clubDept span{font-size:13px;color:#6b7280}
.clubMemberList,.clubAttList{display:flex;flex-direction:column;gap:8px;margin-top:12px;max-height:360px;overflow:auto;padding-right:4px}
.clubMember,.clubAttRow{border:1px solid #e5e7eb;border-radius:12px;padding:10px;background:#fff;display:grid;grid-template-columns:1fr auto;gap:8px;align-items:center}
.clubAttRow{grid-template-columns:1fr 120px 1fr}
.clubAttRow select,.clubAttRow input{min-width:0}
.tableScroll{overflow:auto;margin-top:12px}.dataTable{width:100%;border-collapse:collapse}.dataTable th,.dataTable td{border-bottom:1px solid #e5e7eb;padding:9px;text-align:left;white-space:nowrap}.dataTable th{background:#f9fafb;color:#374151}
.checkinWrap{min-height:100vh;display:flex;align-items:center;justify-content:center;background:#f3f4f6;padding:20px}.checkinCard{max-width:520px;width:100%}
@media(max-width:760px){.clubAttRow{grid-template-columns:1fr}.clubMember{grid-template-columns:1fr auto}.clubDept{flex-direction:column;align-items:flex-start}.checkinWrap{align-items:flex-start}}
.importPanel{margin:10px 0;padding:12px;border:1px solid #dbeafe;border-radius:14px;background:#f8fbff}
.studentPickGrid{display:grid;grid-template-columns:repeat(auto-fill,minmax(150px,1fr));gap:8px;margin-top:10px;max-height:260px;overflow:auto;padding:4px}
.studentPick{display:flex;align-items:center;gap:8px;padding:9px 10px;border:1px solid #e5e7eb;border-radius:10px;background:#fff;font-size:14px}
.studentPick.disabled{opacity:.55;background:#f3f4f6}
.studentPick em{font-style:normal;color:#64748b;font-size:12px;margin-left:4px}

.qrPreviewBox{margin-top:12px;display:flex;justify-content:center}
.qrCard{display:flex;flex-direction:column;align-items:center;gap:6px;border:1px solid var(--border);border-radius:16px;padding:14px;background:#fff;max-width:320px;text-align:center}
.qrCard img{width:260px;height:260px;max-width:100%;image-rendering:auto}
.qrCard small{color:var(--muted)}
.lockedQrInfo{display:grid;gap:10px;margin:12px 0;padding:14px;border:1px solid var(--border);border-radius:14px;background:#f8fafc}
.lockedQrInfo>div{display:flex;justify-content:space-between;gap:12px;align-items:center}
.lockedQrInfo b{text-align:right}

/* v1.6.3 학교스포츠클럽 통계 세분화 + 출석 달력 */
.clubStatsTable th,.clubStatsTable td{text-align:center}.clubStatsTable td:first-child,.clubStatsTable th:first-child{text-align:left}
.clubCalendarPc{margin-top:12px}.clubCalWeek{display:grid;grid-template-columns:repeat(7,1fr);border:1px solid var(--line);border-bottom:0;border-radius:14px 14px 0 0;overflow:hidden;background:#f8fafc}.clubCalWeek span{text-align:center;font-weight:900;padding:10px;border-right:1px solid var(--line)}.clubCalWeek span:last-child{border-right:0}.clubCalGrid{display:grid;grid-template-columns:repeat(7,1fr);border-left:1px solid var(--line);border-top:1px solid var(--line)}.clubCalDay{min-height:140px;border-right:1px solid var(--line);border-bottom:1px solid var(--line);background:#fff;padding:9px;cursor:pointer}.clubCalDay.today{box-shadow:inset 0 0 0 3px #93c5fd;background:#eff6ff}.clubCalDay.other{background:#f8fafc}.clubCalEvents{display:grid;gap:6px;margin-top:8px}.clubCalBadge{border:1px solid #bfdbfe;background:#eff6ff;color:#1d4ed8;border-radius:10px;padding:7px 8px;text-align:left;display:grid;gap:3px;cursor:pointer;font-size:12px}.clubCalBadge:hover{background:#dbeafe}.clubCalBadge small{color:#475569}.clubCalEmpty{display:block;background:#f8fafc;color:#94a3b8;border-radius:9px;padding:7px 8px;font-size:12px}.clubCalendarMobile{display:none}.modalBackdrop{position:fixed;inset:0;background:rgba(15,23,42,.42);z-index:500;display:flex;align-items:center;justify-content:center;padding:18px}.modalCard{background:#fff;border-radius:18px;box-shadow:0 20px 60px rgba(15,23,42,.28);padding:20px;width:min(760px,96vw);max-height:84vh;overflow:auto}.clubDaySummary{width:100%;border:1px solid var(--line);border-radius:12px;background:#fff;padding:12px;margin-top:9px;display:flex;justify-content:space-between;gap:12px;align-items:center;text-align:left;cursor:pointer}.clubDaySummary:hover{background:#f8fbff}
@media(max-width:760px){.clubCalendarPc{display:none}.clubCalendarMobile{display:block;margin-top:12px}.modalBackdrop{align-items:flex-end;padding:10px}.modalCard{width:100%;max-height:88vh;padding:16px}.clubDaySummary{display:grid}.clubStatsTable{min-width:760px}}

/* ===================== v1.7.0 PE87 스타일 전체 레이아웃 ===================== */
body{background:#f3f7fb;color:#25364a}
.pe87Shell{display:grid;grid-template-columns:300px 1fr;min-height:100vh;background:#f3f7fb}
.pe87Side{position:sticky;top:0;height:100vh;padding:22px;background:#fff;border-right:1px solid #dbe3ef;box-shadow:4px 0 18px rgba(15,23,42,.04);overflow:auto;z-index:30}
.brandBox{border:1px solid #dbe3ef;border-radius:14px;padding:18px 16px;margin-bottom:14px;background:linear-gradient(180deg,#fff,#f8fbff)}
.brandBox strong{display:block;font-size:17px;color:#1f2d3d}.brandBox span{display:block;margin-top:6px;font-size:12px;color:#7b8794}
.pe87Main{min-width:0}.topbar{position:sticky;top:0;z-index:20;border-bottom:1px solid #dbe3ef;background:rgba(255,255,255,.92);backdrop-filter:blur(8px)}
.sideTabs{display:flex;flex-direction:column;gap:10px;padding:0;background:transparent;border:0;overflow:visible}.sideTabs .tab{width:100%;text-align:left;border:1px solid #dbe3ef;background:#fff;color:#263b53;border-radius:12px;padding:15px 16px;font-size:15px;box-shadow:0 2px 8px rgba(15,23,42,.03)}.sideTabs .tab.active{background:#203143;color:#fff;border-color:#203143;box-shadow:0 8px 18px rgba(32,49,67,.22)}
#app{padding:22px 28px}.panel,.detail,.list{border-radius:16px;border:1px solid #d8e1ec;box-shadow:0 5px 18px rgba(15,23,42,.04)}.grid{grid-template-columns:360px minmax(0,1fr);gap:18px}.studentList{max-height:calc(100vh - 260px)}.studentBtn{min-height:64px}.studentBtn.active{background:#e7f3ff}.badge{box-shadow:0 4px 12px rgba(245,158,11,.16)}.detailTitle{color:#203143;border-bottom-color:#2597eb}.uploadBox{background:#f5fbff;border-color:#3ba5e8}.btn{border-radius:10px}.photo{border-radius:18px;background:#fbfdff}
.pdfCropPanel{margin-top:16px;border:1px solid #bfdbfe;background:#f5fbff;border-radius:16px;padding:16px}.pdfCropHead{display:flex;justify-content:space-between;gap:12px;align-items:center;flex-wrap:wrap;margin-bottom:10px}.pdfCanvasWrap{position:relative;display:inline-block;max-width:100%;overflow:auto;border:1px solid #dbe3ef;border-radius:14px;background:#fff;padding:8px}.pdfCanvasWrap canvas{max-width:100%;height:auto;display:block}.cropBox{position:absolute;border:3px solid #f59e0b;background:rgba(245,158,11,.16);box-shadow:0 0 0 9999px rgba(15,23,42,.24);cursor:move;display:none}.cropHelp{font-size:13px;color:#64748b;margin-top:8px}.cropPreview{width:96px;height:118px;border:1px solid #dbe3ef;border-radius:12px;background:#fff;object-fit:cover}
@media(max-width:920px){.pe87Shell{display:block}.pe87Side{position:relative;height:auto;padding:12px;border-right:0;border-bottom:1px solid #dbe3ef}.brandBox{display:none}.sideTabs{flex-direction:row;overflow:auto;gap:8px}.sideTabs .tab{width:auto;white-space:nowrap;padding:12px 14px}.topbar{top:0}.grid{grid-template-columns:1fr}.studentList{max-height:46vh}#app{padding:14px}.pdfCropPanel{padding:12px}.pdfCropHead{align-items:stretch}.pdfCropHead .btn{flex:1}}

/* ===================== v1.7.1 PE87 원본 UI 복제 강화 ===================== */
:root{
  --pe87-navy:#2f4358;
  --pe87-navy-dark:#243648;
  --pe87-sky:#3498db;
  --pe87-bg:#f4f7fb;
  --pe87-line:#d9e1ea;
  --pe87-soft:#eef6ff;
  --pe87-text:#1f2d3d;
  --pe87-muted:#7a8795;
}
html,body{height:100%;}
body{background:var(--pe87-bg)!important;color:var(--pe87-text);font-size:14px;overflow-x:hidden;}
.pe87Top{
  height:76px;display:flex;align-items:center;justify-content:space-between;gap:18px;
  padding:0 18px;background:#fff;border-bottom:1px solid #cfd9e5;
  box-shadow:0 2px 8px rgba(15,23,42,.08);position:sticky;top:0;z-index:1000;
}
.pe87Brand{display:flex;align-items:center;gap:14px;min-width:250px;}
.pe87Logo{width:54px;height:54px;border-radius:50%;background:var(--pe87-navy);color:#fff;border:3px solid #2fa3ef;display:flex;align-items:center;justify-content:center;flex-direction:column;font-weight:900;font-size:10px;box-shadow:0 3px 10px rgba(15,23,42,.20);line-height:1.1;}
.pe87Logo>span{font-size:9px;margin-top:1px;}
.pe87Title strong{display:block;font-size:17px;line-height:1.25;color:#26364a;}
.pe87Title b{display:block;font-size:22px;color:#2b96e5;line-height:1.25;letter-spacing:-.04em;}
.pe87UserTools{display:flex;align-items:center;gap:8px;white-space:nowrap;}
.pe87User{font-weight:900;color:#3b2a60;font-size:13px;margin-right:4px;}
.miniBtn{border:0;border-radius:4px;padding:8px 12px;color:#fff;font-weight:900;font-size:12px;line-height:1;box-shadow:0 1px 2px rgba(15,23,42,.12);}
.miniBtn.orange{background:#f28b20}.miniBtn.gray{background:#7f8c8d}.miniBtn.red{background:#e84c3d}.sync{font-size:12px;color:#8b98a6;margin-left:4px;}
.pe87Shell{display:grid!important;grid-template-columns:245px minmax(0,1fr)!important;min-height:calc(100vh - 76px)!important;background:var(--pe87-bg)!important;}
.pe87Side{position:sticky!important;top:76px!important;height:calc(100vh - 76px)!important;background:#fff!important;border-right:1px solid var(--pe87-line)!important;padding:18px 14px!important;box-shadow:2px 0 8px rgba(15,23,42,.04)!important;overflow:auto!important;z-index:50!important;}
.brandBox{display:none!important;}
.pe87Main{min-width:0!important;padding:18px 18px 24px 18px!important;}
#app{padding:0!important;min-height:calc(100vh - 112px);background:#fff;border:1px solid #d6e0eb;border-radius:6px;box-shadow:0 2px 8px rgba(15,23,42,.04);padding:22px!important;}
.sideTabs{display:flex!important;flex-direction:column!important;gap:8px!important;background:transparent!important;border:0!important;padding:0!important;overflow:visible!important;}
.sideTabs .tab{width:100%!important;height:42px!important;text-align:left!important;border:1px solid #d9e1ea!important;background:#fff!important;color:#26364a!important;border-radius:7px!important;padding:0 14px!important;font-size:14px!important;font-weight:900!important;box-shadow:none!important;display:flex;align-items:center;gap:6px;}
.sideTabs .tab:hover{background:#f7fbff!important;border-color:#c7d7e8!important;}
.sideTabs .tab.active{background:var(--pe87-navy)!important;color:#fff!important;border-color:var(--pe87-navy)!important;box-shadow:0 2px 6px rgba(36,54,72,.22)!important;}
.panel,.detail,.list{background:#fff!important;border:1px solid #d6e0eb!important;border-radius:6px!important;box-shadow:0 2px 8px rgba(15,23,42,.035)!important;}
.panel{padding:18px!important;}
.uploadBox{border:3px dashed #2f9be7!important;border-radius:12px!important;background:#f5fbff!important;color:#243648!important;padding:26px 18px!important;}
.btn{border-radius:4px!important;padding:9px 14px!important;font-weight:900!important;background:#3498db!important;color:#fff!important;border:0!important;box-shadow:0 1px 2px rgba(15,23,42,.12)!important;}
.btn.green{background:#2ecc71!important}.btn.danger{background:#e74c3c!important;color:#fff!important}.btn.secondary{background:#fff!important;color:#3498db!important;border:1px solid #d7e4ef!important}
select,input,textarea{border:1px solid #d9e1ea!important;border-radius:4px!important;padding:8px 10px!important;background:#fff!important;font-size:14px!important;}
textarea{min-height:72px!important;}
.dataTable{border-collapse:collapse!important;background:#fff!important;min-width:980px;}
.dataTable th{background:#f5f7fa!important;color:#25364a!important;font-weight:900!important;border:1px solid #d9e1ea!important;padding:10px 8px!important;}
.dataTable td{border:1px solid #e1e7ef!important;padding:9px 8px!important;}
.grid{grid-template-columns:290px minmax(0,1fr)!important;gap:14px!important;}
.list{border-radius:6px!important;overflow:hidden!important;}
.listHead{background:#fff!important;border-bottom:1px solid #d9e1ea!important;font-size:16px!important;padding:12px 14px!important;}
.studentList{max-height:calc(100vh - 300px)!important;}
.studentBtn{grid-template-columns:70px 1fr!important;min-height:54px!important;background:#fff!important;border-bottom:1px solid #d9e1ea!important;}
.studentBtn.active{background:#e5f3ff!important;}
.num{padding:16px 8px!important;border-right:1px solid #d9e1ea!important;color:#1f2d3d!important;}
.name{padding:10px 12px!important;text-align:center!important;}
.badge{border:2px solid #f0be00!important;background:#fff8d8!important;color:#825400!important;border-radius:999px!important;padding:7px 18px!important;box-shadow:0 4px 12px rgba(245,158,11,.20)!important;}
.detail{padding:18px!important;}
.detailTitle{text-align:center!important;font-size:18px!important;font-weight:900!important;border-bottom:3px solid #2396eb!important;margin:0 0 18px 0!important;padding-bottom:14px!important;color:#25364a!important;}
.photo{width:138px!important;height:154px!important;border:2px dashed #d9e1ea!important;border-radius:10px!important;background:#fbfdff!important;}
.field2{grid-template-columns:1fr 1fr!important;}
.noteItem{border-radius:5px!important;border-left:4px solid #2f9be7!important;background:#fbfdff!important;}
.calTitle{font-size:20px!important;color:#1f2d3d!important;}
.calWeekHead{border-radius:0!important;background:#f5f7fa!important;}
.calDay{min-height:128px!important;border-color:#e1e7ef!important;}
.calDay.today{box-shadow:inset 0 0 0 3px #3498db!important;background:#fff!important;}
.lessonBadge,.moreBadge,.mobileLesson{border-radius:5px!important;background:#e8f2ff!important;border-color:#cae0ff!important;color:#1d6eb2!important;}
.clubCalDay{border-color:#e1e7ef!important;min-height:126px!important;}.clubCalWeek{border-radius:0!important;background:#f5f7fa!important}.clubCalBadge{border-radius:5px!important;background:#e8f2ff!important;color:#1d6eb2!important}.clubCalEmpty{border-radius:5px!important;background:#f8fafc!important}.clubDept{border-radius:6px!important}.clubDept.active{background:#e8f8ef!important;border-color:#2ecc71!important}.pdfCropPanel{border-radius:8px!important;background:#f5fbff!important}.pdfCanvasWrap{border-radius:6px!important}.cropPreview{border-radius:6px!important}
/* PE87 스타일의 상단 위치/제목 여백 보정 */
#app > .panel:first-child, #app > .calendarHeader, #app > div:first-child{margin-top:0;}
h1,h2,h3{letter-spacing:-.04em;color:#203143;}
.hint{font-size:12px!important;color:#7d8894!important}.muted{color:#7d8894!important;}
@media(max-width:920px){
  .pe87Top{height:auto;min-height:64px;padding:10px 12px;align-items:flex-start;}
  .pe87Logo{width:44px;height:44px;font-size:9px}.pe87Title strong{font-size:14px}.pe87Title b{font-size:18px}.pe87UserTools{display:none}.pe87Shell{display:block!important;min-height:auto!important}.pe87Side{position:relative!important;top:0!important;height:auto!important;padding:10px!important;border-right:0!important;border-bottom:1px solid #d9e1ea!important}.sideTabs{flex-direction:row!important;overflow:auto!important;gap:7px!important}.sideTabs .tab{width:auto!important;min-width:max-content!important;height:38px!important;padding:0 12px!important;font-size:13px!important}.pe87Main{padding:10px!important}#app{padding:12px!important;border-radius:6px!important;min-height:calc(100vh - 130px)}.grid{grid-template-columns:1fr!important}.studentList{max-height:46vh!important}.field2{grid-template-columns:1fr!important}.profile{flex-direction:column!important}.photo{width:100%!important;height:220px!important}.dataTable{font-size:13px}.panel{padding:12px!important}
}

/* v1.7.2 PE87 좌측 아코디언/진도표 원본형 보정 */
.sideTree{margin:4px 0 8px 16px;border-left:2px dashed #d8e2ed;padding-left:10px;display:flex;flex-direction:column;gap:4px}
.treeIndent{margin-left:12px;border-left:1px solid #e2e8f0;padding-left:8px;display:flex;flex-direction:column;gap:4px}
.treeYear,.treeSemester,.treeItem{border:0;background:transparent;color:#334155;text-align:left;height:28px;padding:0 8px;border-radius:4px;font-weight:800;font-size:13px;cursor:pointer}
.treeYear{background:#f1f5f9;color:#334155}.treeSemester{background:#eaf6ff;color:#2563eb}.treeSemester.active{background:#dff0ff}.treeItem{color:#475569}.treeItem.active{background:#3498db;color:#fff}.treeItem:hover,.treeYear:hover,.treeSemester:hover{filter:brightness(.98);background:#eef6ff}
.pe87Crumb{color:#7a8795;font-size:13px;font-weight:800;margin-bottom:10px}.pe87PageHead{display:flex;align-items:center;justify-content:space-between;margin-bottom:18px}.pe87PageHead h2{margin:0;font-size:20px}.pe87Meta{padding:12px!important;margin-bottom:12px;background:#fbfdff!important}.pe87Meta label{display:flex;align-items:center;gap:8px;margin:0}.pe87Meta input{height:34px;width:96px}.pe87SubjectPlan td textarea{min-height:42px;height:42px}.pe87SubjectPlan input,.pe87SubjectPlan textarea{text-align:left}.pe87ClassProgress .dateResetWrap{display:grid;grid-template-columns:1fr 54px;gap:6px;align-items:center}.pe87ClassProgress .rowReset{border:0;border-radius:4px;background:#e74c3c;color:#fff;font-size:12px;font-weight:900;padding:6px}.pe87ClassProgress .dateHint{font-size:12px;color:#3498db;margin-top:3px;text-align:center}.pe87ClassProgress input,.pe87ClassProgress select{text-align:center}.pe87ClassProgress td:nth-child(7) input{text-align:left}.pe87ClassProgress td:nth-child(8) input{text-align:center}.progressTable.dataTable{min-width:1280px}.pe87SubjectPlan.dataTable{min-width:1180px}.sideTabs .tab + .sideTree{margin-top:-3px;margin-bottom:8px}
@media(max-width:920px){.sideTree{display:none}.pe87PageHead{align-items:flex-start;gap:10px}.pe87ClassProgress .dateResetWrap{grid-template-columns:1fr}.pe87ClassProgress .rowReset{width:100%}}

/* v1.7.3 요청사항 반영: PE87 원본형 UI, 반별 색상, PAPS/수행평가 */
.lessonBadge,.mobileLesson{background:var(--class-color,#3498db)!important;border-color:var(--class-color,#3498db)!important;color:#fff!important}
.lessonBadge b,.mobileLesson b{color:#fff!important}.lessonBadge:hover,.mobileLesson:hover{filter:brightness(.95)}
.greenGuide{color:#18a957;font-size:13px;font-weight:900;margin-top:8px}.uploadBox.drag{background:#e8f6ff!important;box-shadow:0 0 0 4px rgba(52,152,219,.15)}
.papsEmptyGuide{padding:0!important;overflow:hidden}.papsGuideHead{text-align:center;border-bottom:1px solid #d9e1ea;padding:10px;font-weight:900}.papsExportFake{width:100%;margin-top:20px;border:0;border-radius:4px;padding:15px;background:#2ecc71;color:#fff;font-size:16px;font-weight:900}.papsPanel{padding:0!important}.pe87Paps{min-width:1380px!important}.pe87Paps th{font-size:14px}.pe87Paps td{height:118px;vertical-align:middle}.pe87Paps .papsInput{width:70px!important;text-align:center;margin:2px}.dual{display:grid;grid-template-columns:1fr 1fr;gap:3px;justify-content:center}.quad{display:grid;grid-template-columns:1fr 1fr;gap:3px;max-width:150px;margin:auto}.genderToggle{border:1px solid #8fd3ff;background:#e6f5ff;color:#2385c4;border-radius:14px;padding:5px 12px;font-weight:900;cursor:pointer}.genderToggle.female{border-color:#ff9b91;background:#fff0ee;color:#e65043}.papsGrade{display:block;width:max-content;margin:5px auto 0;padding:3px 7px;border-radius:4px;color:#fff;font-size:11px;font-weight:900}.papsGrade.g1{background:#20b95a}.papsGrade.g2{background:#2ecc71}.papsGrade.g3{background:#f39c12}.papsGrade.g4{background:#e67e22}.papsGrade.g5{background:#e74c3c}.papsGrade.bmi{background:#f2c94c;color:#6b4b00;border-radius:12px}.papsDash{display:block;color:#7d8894;margin-top:5px}.bmiValue{display:block;font-weight:900}.summaryScore,.summaryGrade{font-size:16px;background:#fbfdff!important}
.assessConfig{border:1px solid #d6e0eb;background:#fff;border-radius:6px;padding:12px;margin-bottom:12px}.assessConfigTitle{font-weight:900;margin-bottom:10px}.assessCards{display:grid;grid-template-columns:repeat(auto-fit,minmax(220px,1fr));gap:10px}.assessCard{border:1px solid #d9e1ea;border-radius:6px;padding:10px;text-align:center}.assessCard b{display:block;margin-bottom:9px}.assessCard label{display:inline-flex;align-items:center;gap:5px;margin:0 5px}.assessCard input{width:60px;text-align:center}.pe87Assess{min-width:1100px!important}.pe87Assess td{height:72px}.scoreControl{display:grid;grid-template-columns:1fr 22px;gap:4px}.scoreControl input{text-align:center}.stepBtns{display:grid;gap:2px}.stepBtns button{border:1px solid #aad7f4;background:#eaf6ff;color:#248ac8;font-size:10px;padding:0;border-radius:3px}.stepBtns button:last-child{border-color:#ffc8c3;background:#fff0ee;color:#e74c3c}.scorePill{display:inline-block;margin-top:4px;padding:2px 9px;border-radius:12px;background:#eaf6ff;color:#52768d;font-size:11px}.assessTotal{background:#eef9ff!important}
@media(max-width:920px){.pe87Paps,.pe87Assess{font-size:12px}.pe87Paps td{height:auto}.assessCards{grid-template-columns:1fr}.papsExportFake{font-size:14px}}

/* v1.7.4 PE87 원본 화면 정밀 보정 */
.authHidden{display:none!important}
.loginScreen{position:fixed;inset:0;z-index:9999;background:#2d4358;display:flex;align-items:center;justify-content:center;padding:22px}
.loginCard{width:400px;max-width:100%;background:#fff;border-radius:12px;padding:34px 40px 40px;text-align:center;box-shadow:0 18px 50px rgba(0,0,0,.24)}
.loginAvatar{width:132px;height:132px;margin:-6px auto 18px;border-radius:50%;border:4px solid #2f9be7;background:#344e66;color:#fff;display:flex;align-items:center;justify-content:center;font-size:36px;box-shadow:0 5px 14px rgba(0,0,0,.18)}
.loginCard h1{font-size:23px;margin:0 0 2px;color:#172b3d}.loginCard h2{font-size:29px;color:#2f9be7;margin:0 0 20px}.loginCard input{width:100%;height:46px;margin:6px 0;text-align:center;font-size:17px!important}.loginBtn{width:100%;height:48px;margin-top:10px;border:0;border-radius:5px;background:#2e455b;color:#fff;font-size:17px;font-weight:900}.loginMsg{min-height:20px;margin-top:10px;color:#e74c3c;font-size:13px}
.pe87Top{height:88px!important}.pe87Brand{gap:14px!important}.pe87Logo{width:62px!important;height:62px!important}.pe87Title strong{font-size:18px!important}.pe87Title b{font-size:25px!important}.pe87Shell{grid-template-columns:292px minmax(0,1fr)!important}.pe87Side{padding:16px!important}.pe87Main{padding:14px!important}#app{padding:18px!important}
.sideTabs .tab{height:48px!important;font-size:16px!important;padding:0 16px!important}.treeYear,.treeSemester,.treeItem{height:34px!important;font-size:14px!important}.sideTree{margin-left:18px!important}.treeIndent{margin-left:13px!important}
.panel{border-radius:6px!important;box-shadow:none!important}.pe87PageHead h2{font-size:22px!important}.pe87Crumb{font-size:13px!important}
.studentWaitingGrid{display:grid;grid-template-columns:360px 1fr;gap:12px}.waitingCard{min-height:360px;border:1px solid #d9e1ea;background:#fff;display:flex;flex-direction:column;align-items:center;justify-content:center;text-align:center;padding:30px}.waitingIcon{font-size:42px;margin-bottom:22px}.waitingCard h3{font-size:18px;margin:0 0 20px}.waitingCard p{color:#8b96a3;line-height:2;font-size:15px}
.pe87Paps th,.pe87Paps td{text-align:center!important;vertical-align:middle!important}.pe87Paps td>b{display:block;text-align:center;margin-top:4px}.pe87Paps .dual,.pe87Paps .quad{justify-content:center;align-items:center}.pe87Paps .papsInput{display:block;margin:2px auto!important}.pe87Paps .papsGrade{margin:5px auto 0!important;text-align:center}.pe87Paps .papsDash{text-align:center}.papsCenter{text-align:center!important}.summaryScore,.summaryGrade{text-align:center!important}
.assessConfigTitle{font-size:14px}.assessCard{text-align:center!important}.assessCard label{justify-content:center}.pe87Assess th,.pe87Assess td{text-align:center!important;vertical-align:middle!important}.pe87Assess .scoreControl{max-width:100%;margin:auto}.pe87Assess .scorePill{margin-left:auto;margin-right:auto}.assessTotal{text-align:center!important;line-height:1.5}.assessTotal small{font-size:12px;color:#172b3d}
.calGrid{grid-auto-rows:minmax(128px,auto)}
@media(max-width:920px){.studentWaitingGrid{grid-template-columns:1fr}.waitingCard{min-height:260px}.loginCard{padding:28px 22px}.loginAvatar{width:110px;height:110px}.pe87Top{height:auto!important}.pe87Shell{display:block!important}}

/* v1.7.5 안정화: 대기화면, PAPS/수행평가 정렬, 관리자 정돈 */
.sync{display:none!important}
.assessSettingRow{display:grid;grid-template-columns:auto 92px auto 92px;gap:8px;align-items:center;justify-content:center}
.numberStepper{display:grid;grid-template-columns:1fr 22px;gap:3px;align-items:stretch}
.numberStepper input{width:66px!important;height:36px!important;padding:5px!important;text-align:center!important}
.numberStepper>span{display:grid;grid-template-rows:1fr 1fr;gap:2px}
.cfgArrow{border:1px solid #b9d9ee;border-radius:3px;background:#edf7fd;color:#1688c8;font-size:9px;line-height:1;padding:0;cursor:pointer}
.cfgArrow[data-dir="down"]{background:#fff1ef;color:#e74c3c;border-color:#ffc9c4}
.grid2{display:grid;grid-template-columns:1fr 1fr;gap:16px;align-items:start}
.grid2>.panel{padding:20px!important;min-height:100%}
.formGrid{display:grid;grid-template-columns:1fr 1fr;gap:14px 18px;margin-bottom:16px}
.formGrid label,.grid2 label{display:grid;grid-template-columns:90px 1fr;align-items:center;gap:10px}
.formGrid input,.grid2 input,.grid2 textarea{width:100%;box-sizing:border-box}
.dangerPanel .row{gap:10px;align-items:center}
.pe87Paps td,.pe87Paps th,.pe87Assess td,.pe87Assess th{text-align:center!important;vertical-align:middle!important}
.pe87Paps td>*,.pe87Assess td>*{margin-left:auto;margin-right:auto}
.pe87Paps .dual,.pe87Paps .quad{justify-content:center!important;margin-left:auto!important;margin-right:auto!important}
.pe87Paps .papsGrade,.pe87Paps .papsDash,.pe87Paps td>b{display:block;text-align:center!important;margin-left:auto!important;margin-right:auto!important}
.studentWaitingGrid .waitingCard{border-radius:6px!important;box-shadow:none!important}
@media(max-width:920px){.grid2{grid-template-columns:1fr}.formGrid{grid-template-columns:1fr}.formGrid label,.grid2 label{grid-template-columns:1fr}.assessSettingRow{grid-template-columns:auto 88px auto 88px}}

.saveNotice{position:fixed;left:50%;top:24px;transform:translate(-50%,-20px);opacity:0;z-index:9999;background:#fff;border:1px solid #b8c7d9;border-radius:12px;box-shadow:0 10px 28px rgba(15,23,42,.2);padding:14px 22px;display:flex;gap:9px;align-items:center;font-size:16px;transition:.2s}.saveNotice.show{opacity:1;transform:translate(-50%,0)}
.clickableProfile{cursor:pointer}.pe87Logo img,.loginAvatar img{width:100%;height:100%;object-fit:cover;border-radius:50%;display:block}.logoFallback{display:flex;flex-direction:column;align-items:center;justify-content:center;width:100%;height:100%;font-size:20px}.logoFallback small{font-size:9px}
.miniBtn:hover{filter:brightness(.9);transform:translateY(-1px);box-shadow:0 4px 10px rgba(0,0,0,.18)}
.adminTopBar{display:flex;justify-content:space-between;align-items:center;padding:18px 22px;border:1px solid #9ccbf5;background:#eaf5ff;border-radius:6px;margin-bottom:18px}.adminGrid3{display:grid;grid-template-columns:1fr 1fr 1fr;gap:18px}.adminGrid2{display:grid;grid-template-columns:1fr 1fr;gap:18px;margin-top:18px}.adminCard h2{margin:0 0 18px;font-size:20px}.adminAddRow,.adminListRow{display:grid;grid-template-columns:1fr auto;gap:8px;margin-bottom:10px}.adminBasicFields{display:grid;grid-template-columns:1fr 1fr;gap:10px;margin-top:16px}.adminBasicFields label{display:flex;flex-direction:column;gap:6px}.toggleGrid{display:grid;grid-template-columns:repeat(3,1fr);gap:8px;margin:10px 0 18px}.classGrid{grid-template-columns:repeat(6,1fr)}.gradeToggle,.classToggle{border:1px solid #cbd5e1;background:#fff;border-radius:6px;padding:10px;cursor:pointer}.gradeToggle.active,.classToggle.active{background:#3498db;color:#fff;border-color:#3498db}.adminToggleTitle{font-weight:700;margin-top:8px}.resetInline{display:flex;flex-wrap:wrap;gap:8px}.attendanceControls{display:flex;align-items:end;gap:12px;margin-bottom:14px}.attendanceControls label{display:flex;flex-direction:column;gap:6px}.clubAttendanceTable th,.clubAttendanceTable td{text-align:center;vertical-align:middle;white-space:nowrap}.clubAttendanceTable input,.clubAttendanceTable select{width:100%;box-sizing:border-box}
@media(max-width:1000px){.adminGrid3{grid-template-columns:1fr}.adminGrid2{grid-template-columns:1fr}.classGrid{grid-template-columns:repeat(4,1fr)}}


/* v1.7.7 학생관리/PDF 크롭/수행평가 정밀 개선 */
.studentDetailHero{text-align:center}.studentDetailHero .detailTitle{max-width:100%;margin-bottom:16px}.heroPhoto{width:132px;height:132px;margin:0 auto;border:4px solid #2f9be7;border-radius:50%;background:#9aa8aa;box-shadow:0 5px 14px rgba(0,0,0,.16);overflow:hidden;display:flex;align-items:center;justify-content:center;cursor:pointer}.heroPhoto img{width:100%;height:100%;object-fit:cover}.heroPhotoFallback{width:100%;height:100%;align-items:center;justify-content:center;gap:5px;color:#fff}.heroPhotoActions{display:flex;justify-content:center;align-items:center;gap:8px;margin:12px 0 18px}.linkBtn{border:0;background:transparent;color:#2f9be7;font-weight:800;cursor:pointer}.orangeBtn{background:#f39c12!important;color:#fff!important;border-color:#f39c12!important}.studentInfoCard{border:1px solid #d9e1ea;border-radius:7px;background:#fafcff;padding:14px;display:grid;grid-template-columns:1fr 1fr;gap:12px}.studentInfoCard input,.studentInfoCard select{text-align:center;width:100%;box-sizing:border-box}.studentInfoSave{grid-column:1/-1;background:#3498db!important;color:#fff!important}.studentSectionRule{margin:18px 0;border:0;border-top:2px dashed #d7dde5}.studentNoteRow{display:grid;grid-template-columns:145px 1fr 88px;gap:8px}.studentNoteList{margin-top:12px}.photoRosterTools{margin-top:18px;border:1px solid #d7e9fb;background:linear-gradient(135deg,#f8fcff,#eef7ff);border-radius:10px;padding:14px 16px;display:flex;align-items:center;justify-content:space-between;gap:14px}.photoRosterTools p{margin:5px 0 0;color:#7f8c8d;font-size:12px}.photoRosterModal{position:fixed;inset:0;background:rgba(15,23,42,.72);z-index:20000;display:none;align-items:center;justify-content:center;padding:18px}.photoRosterModal.show{display:flex}.photoRosterDialog{width:min(1180px,96vw);height:min(900px,92vh);background:#fff;border-radius:16px;box-shadow:0 24px 80px rgba(0,0,0,.35);display:flex;flex-direction:column;overflow:hidden}.photoRosterHead{padding:15px 20px;border-bottom:1px solid #e5e7eb;display:flex;align-items:center;justify-content:space-between;font-size:18px}.photoRosterBody{flex:1;display:grid;grid-template-columns:1fr 320px;min-height:0}.photoRosterCanvasArea{background:#f1f5f9;overflow:auto;padding:18px;display:flex;justify-content:center;align-items:flex-start}.photoRosterSide{border-left:1px solid #e5e7eb;padding:16px;overflow:auto}.photoStepCard{border:1px solid #dfe6e9;border-radius:12px;padding:14px;margin-bottom:12px;background:#fbfdff}.photoStepCard h4{margin:0 0 10px}.photoRosterPreview{width:132px;height:160px;margin:8px auto 12px;border:2px dashed #b3d7f7;border-radius:12px;display:block;object-fit:cover;background:#f8fbff}.photoStepCard .btn.green{width:100%}.photoRosterModal .pdfCanvasWrap{padding:0;border:0;border-radius:0;box-shadow:0 6px 24px rgba(0,0,0,.18)}.photoRosterModal .cropBox{border-color:#2ecc71;background:rgba(46,204,113,.14)}
.pe87Assess .scoreControl{display:flex!important;align-items:center;justify-content:center;gap:5px;max-width:100%!important}.pe87Assess .scoreControl input{width:calc(100% - 32px)!important;min-width:72px}.pe87Assess .stepBtns{flex:0 0 22px}.pe87Assess .assessTotal b{white-space:nowrap}.saveNotice{top:28px!important;background:#fff!important;border:1px solid #a9bfd3!important;border-radius:10px!important;padding:13px 20px!important}
@media(max-width:920px){.studentInfoCard{grid-template-columns:1fr}.studentNoteRow{grid-template-columns:1fr}.photoRosterBody{grid-template-columns:1fr}.photoRosterSide{border-left:0;border-top:1px solid #e5e7eb}.photoRosterDialog{height:95vh}}
/* v1.7.8 auth flash / class PDF / academic summary */
body.auth-pending .pe87Top,body.auth-pending .pe87Shell{display:none!important}
body.auth-pending{background:#2f465d;min-height:100vh}
.classPdfPanel{border:1px solid #cbd8e6;border-radius:10px;background:#eef8ff;padding:16px}
.classPdfIntro b{font-size:17px}.classPdfIntro p{margin:5px 0 12px;color:#748398}
.classPdfToolbar{display:grid;grid-template-columns:minmax(220px,1fr) auto auto minmax(180px,260px) auto;gap:10px;align-items:center}
.classPdfWorkspace{display:grid;grid-template-columns:minmax(0,1fr) 220px;gap:14px;margin-top:14px;align-items:start}
.classPdfWorkspace .pdfCanvasWrap{min-height:320px;max-height:620px;overflow:auto;background:#fff;border:1px solid #cfd9e5;border-radius:8px;position:relative}
.classPdfWorkspace canvas{display:block;max-width:100%;height:auto;margin:auto}
.classPdfWorkspace aside{display:flex;flex-direction:column;gap:10px}.classPdfWorkspace .photoRosterPreview{width:100%;min-height:180px;object-fit:contain;background:#fff;border:1px solid #cfd9e5;border-radius:8px}
.studentAcademicSummary{border:1px solid #d4dde8;border-radius:8px;background:#fff;overflow:hidden}
.academicGrid{display:grid;grid-template-columns:repeat(9,minmax(90px,1fr))}.academicGrid>div{padding:12px 8px;text-align:center;border-right:1px solid #e0e6ee}.academicGrid>div:last-child{border-right:0}.academicGrid span{display:block;color:#65758a;font-size:12px;margin-bottom:6px}.academicGrid b{font-size:14px}.academicTotal{background:#eef8ff}
.miniAcademicTable{width:100%;border-collapse:collapse}.miniAcademicTable th,.miniAcademicTable td{border:1px solid #dce3eb;padding:10px;text-align:center}.miniAcademicTable th{background:#f3f6fa}
.scoreControl{display:flex!important;align-items:center!important;justify-content:center!important;gap:6px!important}.scoreControl .assessInput{width:110px!important;text-align:center!important}.scoreControl .stepBtns{position:static!important;display:flex!important;flex-direction:column!important;gap:2px!important}.assessTotal b{white-space:nowrap!important;display:inline-block!important}
@media(max-width:900px){.classPdfToolbar{grid-template-columns:1fr 1fr}.classPdfWorkspace{grid-template-columns:1fr}.academicGrid{grid-template-columns:repeat(2,1fr)}}
/* v1.7.9: 반 단위 PDF 사진 자르기 모달 */
.classPdfLauncher{display:flex;align-items:center;justify-content:space-between;gap:20px}
.pdfCropModal{position:fixed;inset:0;z-index:10050;background:rgba(25,38,55,.74);display:flex;align-items:center;justify-content:center;padding:20px}
.pdfCropModal.hidden{display:none!important}
.pdfCropDialog{width:min(1180px,96vw);height:min(820px,94vh);background:#fff;border-radius:16px;overflow:hidden;box-shadow:0 24px 70px rgba(0,0,0,.35);display:flex;flex-direction:column}
.pdfCropHeader{display:flex;align-items:center;justify-content:space-between;padding:14px 18px;border-bottom:1px solid #d5dde7;background:#fff}
.pdfCropHeader h3{margin:0;font-size:18px}
.pdfCropBody{display:grid;grid-template-columns:minmax(0,1fr) 290px;min-height:0;flex:1;background:#cfd4da}
.pdfCropStage{padding:14px;min-width:0;min-height:0;overflow:auto}
.pdfCropStage .pdfCanvasWrap{position:relative;background:#eee;min-height:600px;display:flex;align-items:flex-start;justify-content:center;overflow:auto}
.pdfCropStage canvas{display:block;max-width:100%;height:auto;background:white;box-shadow:0 2px 10px rgba(0,0,0,.12)}
.pdfCropSteps{background:#fff;padding:12px;overflow:auto;display:flex;flex-direction:column;gap:10px}
.pdfCropSteps section{border:1px solid #d9e1ea;border-radius:12px;padding:12px;background:#fbfcfd}
.pdfCropSteps h4{font-size:16px;margin:0 0 10px}.pdfCropSteps label{display:block;font-weight:700;margin:8px 0 4px}.pdfCropSteps select,.pdfCropSteps input{width:100%}
.pdfCropSteps .photoRosterPreview{width:130px;height:170px;object-fit:cover;margin:4px auto 10px;display:block;border:2px dashed #82c9ff;border-radius:8px;background:#fff}
.pdfCropSteps .btn{width:100%;margin-top:7px}.pdfCropSteps .row .btn{width:auto;flex:1}
.academicToolbar{display:flex;justify-content:flex-end;align-items:center;gap:8px;margin-bottom:10px}.academicToolbar select{width:auto;min-width:100px}
.papsStudentSummary td{text-align:center;vertical-align:middle}.papsStudentSummary .papsGrade{display:block;width:max-content;margin:6px auto 0}
@media(max-width:900px){.pdfCropModal{padding:0}.pdfCropDialog{width:100vw;height:100vh;border-radius:0}.pdfCropBody{grid-template-columns:1fr}.pdfCropSteps{max-height:45vh}.classPdfLauncher{align-items:stretch;flex-direction:column}}
/* v1.8.0 진도표·학생관리·PDF·수행평가 안정화 */
.studentRosterUpload{cursor:pointer;margin-bottom:12px}.studentRosterUpload.drag,.pdfDropZone.drag{background:#e5f4ff!important;border-color:#168fe3!important}.studentRosterTools{display:flex;align-items:center;gap:12px;justify-content:flex-start;border:1px solid #d7e0ea;border-radius:7px;padding:10px 14px;margin-bottom:14px;background:#fff}.studentRosterTools .hint{margin-left:auto}.statusDot{display:inline-block;width:10px;height:10px;border-radius:50%;background:#16a34a;margin-right:8px}
.pdfDropZone{transition:.15s}.pdfDropZone input{cursor:pointer}
.dateLine{display:grid;grid-template-columns:minmax(160px,1fr) 74px 58px;align-items:center;gap:7px}.dateLine .dateHint{font-size:12px;color:#3498db;text-align:center;white-space:nowrap}.progressActions{display:flex;justify-content:space-between;align-items:center;margin-top:12px}.progressActions .btn{min-width:140px}
.genderSegment{display:flex;border:1px solid #d4dde8;border-radius:8px;overflow:hidden;background:#fff;min-height:40px}.genderSegment button{flex:1;border:0;border-right:1px solid #d4dde8;background:#fff;color:#526273;font-weight:800;cursor:pointer}.genderSegment button:last-child{border-right:0}.genderSegment button.active.male{background:#e8f5ff;color:#1688c8}.genderSegment button.active.female{background:#fff0ef;color:#e74c3c}.genderSegment button.active.neutral{background:#eef2f5;color:#5f6f7f}
.academicEmpty{min-height:66px;display:flex;align-items:center;justify-content:center;border:1px solid #dce3eb;border-radius:7px;background:#f8fafc;color:#8a97a6;text-align:center;font-size:14px}
@media(max-width:920px){.studentRosterTools{align-items:flex-start;flex-wrap:wrap}.studentRosterTools .hint{margin-left:0;width:100%}.dateLine{grid-template-columns:1fr 64px 52px}.progressActions{gap:8px;flex-direction:column}.progressActions .btn{width:100%}}

/* v1.8.1 refinements */
.lessonBadge{background:var(--class-color)!important;border-color:var(--class-color)!important;color:#fff!important;font-weight:800}.lessonBadge b{color:#fff!important}.mobileLesson{border-left:7px solid var(--class-color)!important}.calDetailItem{border-left:7px solid var(--class-color)!important}.calEvents{gap:4px}.calDetailItem b{font-weight:900}
.pe87ClassProgress th,.pe87ClassProgress td{text-align:center!important;vertical-align:middle!important}.pe87ClassProgress td input,.pe87ClassProgress td select{margin-left:auto!important;margin-right:auto!important}.pe87ClassProgress td:nth-child(7) input{text-align:center!important}
.scorePill{white-space:nowrap}.pe87Assess td> .scoreControl{width:150px;max-width:150px!important;margin:0 auto}.pe87Assess .assessInput{width:112px!important;box-sizing:border-box}.pe87Assess .stepBtns{width:24px!important}.pe87Assess .stepBtns button{width:24px!important;height:22px!important}.pe87Assess td{text-align:center!important}.assessTotal b{white-space:nowrap!important}
.adminGridBalanced{grid-template-columns:minmax(320px,.8fr) minmax(360px,1.15fr) minmax(360px,1.15fr)!important;align-items:start}.adminGridBalanced .adminCard{min-width:0}.resetGrid3{display:grid!important;grid-template-columns:repeat(3,minmax(0,1fr))!important;gap:10px!important}.resetGrid3 .btn{width:100%;white-space:nowrap}.studentList{min-height:420px}
@media(max-width:1200px){.adminGridBalanced{grid-template-columns:1fr 1fr!important}.adminGridBalanced .adminCard:first-child{grid-column:1/-1}.resetGrid3{grid-template-columns:repeat(2,minmax(0,1fr))!important}}
@media(max-width:760px){.adminGridBalanced{grid-template-columns:1fr!important}.resetGrid3{grid-template-columns:1fr!important}}

/* v1.8.2 precise polish */
.overallGradeBadge{display:inline-flex;align-items:center;justify-content:center;min-width:58px;padding:5px 10px;border-radius:999px;color:#fff;font-weight:900;font-size:13px;line-height:1;box-shadow:0 2px 6px rgba(15,23,42,.12)}
.overallGradeBadge.grade1{background:#16a34a}.overallGradeBadge.grade2{background:#22c55e}.overallGradeBadge.grade3{background:#f59e0b}.overallGradeBadge.grade4{background:#f97316}.overallGradeBadge.grade5{background:#ef4444}
.academicToolbar{display:flex;justify-content:flex-end;align-items:center;gap:8px;padding:12px 8px 16px!important;margin-bottom:2px}.academicToolbar select{min-width:100px;height:40px;border-radius:6px}
.grid{align-items:start!important}.grid>.list{align-self:start!important}.studentList{min-height:0!important}
.adminGridBalanced{grid-template-columns:minmax(390px,1.02fr) minmax(440px,1.22fr) minmax(320px,.92fr)!important;gap:18px!important}
.adminYearCard,.adminClassCard,.adminSubjectCard{overflow:hidden!important}
.adminYearTable{table-layout:fixed;width:100%}.adminYearTable th:last-child,.adminYearTable td:last-child{width:86px}
.adminBasicFields{grid-template-columns:1fr 1fr!important}.adminBasicFields label:last-child{grid-column:1/-1}
.classHeadTeachers{margin-top:18px;border-top:1px solid #dbe3ec;padding-top:14px}.classHeadTeachers h3{margin:0 0 10px;font-size:15px}.headTeacherRow{display:grid;grid-template-columns:110px minmax(0,1fr);align-items:center;gap:10px;margin:7px 0}.headTeacherRow span{font-weight:800;color:#475569}.headTeacherRow input{width:100%;box-sizing:border-box}
.adminSubjectCard .adminListRow input{min-width:0}.adminSubjectCard .adminAddRow input{min-width:0}
@media(max-width:1250px){.adminGridBalanced{grid-template-columns:1fr 1fr!important}.adminSubjectCard{grid-column:1/-1}}
@media(max-width:900px){.adminGridBalanced{grid-template-columns:1fr!important}.adminSubjectCard{grid-column:auto}.headTeacherRow{grid-template-columns:90px 1fr}}

/* v1.8.3 */
#app .grid{align-items:stretch!important}
#studentDetail{min-height:520px}
.adminGridBalanced{grid-template-columns:minmax(430px,1.08fr) minmax(500px,1.32fr) minmax(330px,.88fr)!important}
.adminYearTable{width:100%!important;table-layout:fixed}.adminYearTable th:last-child,.adminYearTable td:last-child{width:88px}
.adminBasicFields{grid-template-columns:1fr 1fr!important}.adminTitleField{grid-column:1/-1}
.headTeacherDisplayGrid{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:8px}
.headTeacherDisplay{display:flex;align-items:center;justify-content:space-between;gap:10px;border:1px solid #dbe3ec;border-radius:7px;padding:9px 11px;background:#f8fbff}
.headTeacherDisplay span{font-weight:800;color:#475569;white-space:nowrap}.headTeacherDisplay b{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.adminNoSubjects{padding:12px;border:1px dashed #cbd5e1;border-radius:7px;text-align:center;margin-bottom:10px}
@media(max-width:1320px){.adminGridBalanced{grid-template-columns:1fr 1.18fr!important}.adminSubjectCard{grid-column:1/-1}.headTeacherDisplayGrid{grid-template-columns:repeat(3,minmax(0,1fr))}}
@media(max-width:900px){.adminGridBalanced{grid-template-columns:1fr!important}.adminSubjectCard{grid-column:auto}.headTeacherDisplayGrid{grid-template-columns:1fr}}

/* v1.8.4 stability fixes */
.clubAttendanceTable .clubAttRow{display:table-row!important;border:0!important;border-radius:0!important;padding:0!important;background:transparent!important}
.clubAttendanceTable{min-width:1180px!important;table-layout:auto!important}
.clubAttendanceTable th,.clubAttendanceTable td{padding:9px 8px!important;text-align:center!important;vertical-align:middle!important}
.clubAttendanceTable td:nth-child(1){min-width:54px}.clubAttendanceTable td:nth-child(2){min-width:82px}.clubAttendanceTable td:nth-child(3){min-width:92px}.clubAttendanceTable td:nth-child(4){min-width:130px}.clubAttendanceTable td:nth-child(5){min-width:110px}.clubAttendanceTable td:nth-child(6){min-width:130px}
.clubAttendanceTable .attStatus{min-width:98px!important}.clubAttendanceTable .attMemo{min-width:118px!important}
.classHeadTeacherTable{margin-top:18px}.classHeadTeacherTable h2{margin:0 0 14px;font-size:18px}.classHeadTeacherTable .dataTable th,.classHeadTeacherTable .dataTable td{text-align:center!important}
.treeYear.active{background:#eef6fd!important}

/* v1.8.5 settings/accordion/PDF/assessment refinements */
.treeSemester{color:#334155!important;background:#eaf6ff!important}
.treeSemester.active{color:#2563eb!important;background:#dff0ff!important}
.adminGridBalanced{align-items:stretch!important}
.adminGridBalanced>.adminCard{height:100%;display:flex;flex-direction:column;box-sizing:border-box}
.adminSubjectCard #adminSubjectRows{flex:1}
.adminYearList{display:grid;gap:8px;margin:10px 0 14px}
.adminYearItem{display:flex;align-items:center;justify-content:space-between;gap:10px;border:1px solid #d8e1ec;background:#f8fafc;border-radius:8px;padding:9px 10px;min-height:42px}
.adminYearActions{display:flex;gap:6px;flex-wrap:wrap}.adminYearActions .btn{padding:7px 10px;min-height:32px}
.semesterManager{border-top:1px solid #d8e1ec;margin-top:12px;padding-top:14px}
.semesterManagerHead{display:flex;align-items:center;justify-content:space-between;gap:10px;flex-wrap:wrap}
.semesterManagerHead>div{display:flex;gap:7px;flex-wrap:wrap}
.semesterManageBtn{border:1px solid #cbd5e1;background:#fff;color:#334155;border-radius:7px;padding:8px 12px;font-weight:800;cursor:pointer}
.semesterManageBtn.active{background:#3498db;border-color:#3498db;color:#fff}
.semesterActions{display:grid;grid-template-columns:1fr 1fr;gap:8px;margin-top:10px}
.adminBasicFields{margin-top:auto!important;padding-top:16px}
.pdfCropDialog{border-radius:18px!important}
.pdfCropHeader{background:linear-gradient(180deg,#ffffff,#f7fbff)!important}
.pdfCropBody{background:#dfe7ef!important}
.pdfCropSteps{background:#f8fbff!important;padding:14px!important}
.pdfCropSteps section{border-radius:14px!important;background:#fff!important;box-shadow:0 4px 14px rgba(30,64,175,.06)}
.pdfCropSteps h4{display:flex;align-items:center;gap:7px;color:#203143}
.pdfCropSteps section:nth-child(1) h4::before{content:'📂'}
.pdfCropSteps section:nth-child(2) h4::before{content:'📄'}
.pdfCropSteps section:nth-child(3) h4::before{content:'👨‍🎓'}
.pdfCropSteps section:nth-child(4) h4::before{content:'🖼️'}
.previewFrame{position:relative;min-height:188px;border:2px dashed #82c9ff;border-radius:12px;background:linear-gradient(135deg,#f8fcff,#eef8ff);display:flex;align-items:center;justify-content:center;overflow:hidden;margin-bottom:8px}
.previewFrame .photoRosterPreview{margin:0!important;border:0!important;width:130px!important;height:170px!important;position:relative;z-index:2;background:#fff}
.previewFrame .photoRosterPreview:not([src]),.previewFrame .photoRosterPreview[src=""]{display:none}
.previewPlaceholder{color:#7890a8;font-size:13px;text-align:center;padding:18px;position:absolute;inset:0;display:flex;align-items:center;justify-content:center}
.previewFrame .photoRosterPreview[src]:not([src=""])+.previewPlaceholder{display:none}
.pdfSaveStatus{height:24px;text-align:center;color:#16a34a;font-weight:900;opacity:0;transition:.2s}
.pdfSaveStatus.show{opacity:1}
.studentList{box-sizing:border-box!important}
.miniAcademicTable tbody td{padding-top:12px!important;padding-bottom:16px!important}
#studentAssessTable{padding-bottom:6px}
@media(max-width:900px){.semesterActions{grid-template-columns:1fr}.adminYearItem{align-items:flex-start;flex-direction:column}.adminYearActions{width:100%}.adminYearActions .btn{flex:1}}

/* v1.8.6 스포츠클럽 명단 가로 정렬 */
.clubMemberHead{display:flex;align-items:center;justify-content:space-between;gap:12px;margin-bottom:14px}
.clubMemberEntry{display:grid;grid-template-columns:80px 80px 90px minmax(140px,1fr) 100px auto;gap:8px;align-items:center;margin-bottom:10px}
.clubMemberEntry input,.clubMemberEntry select{width:100%;min-width:0;box-sizing:border-box}
.clubImportRow{display:flex;align-items:center;gap:8px;margin-bottom:10px}
.clubImportRow select{min-width:110px}
.clubMemberTableWrap{max-height:320px;overflow:auto;border:1px solid #dbe3ee;border-radius:8px}
.clubMemberTable{width:100%;min-width:560px;margin:0}
.clubMemberTable th,.clubMemberTable td{text-align:center!important;vertical-align:middle!important;white-space:nowrap}
.clubMemberTable .clubMemberDelete{padding:6px 12px}
@media(max-width:900px){.clubMemberEntry{grid-template-columns:repeat(3,minmax(0,1fr))}.clubMemberEntry .btn{width:100%}}
@media(max-width:600px){.clubMemberEntry{grid-template-columns:1fr 1fr}.clubMemberHead{align-items:flex-start}.clubImportRow{flex-wrap:wrap}}


/* v1.8.7 curriculum isolation + sports club layout */
.clubWorkGrid{grid-template-columns:minmax(620px,1.05fr) minmax(760px,1.55fr)!important;align-items:start!important}
.clubWorkGrid>.panel{min-width:0!important;overflow:hidden}
.clubMemberPanel{min-width:620px!important}
.clubMemberEntry{display:grid!important;grid-template-columns:78px 78px 86px minmax(150px,1fr) 96px 108px!important;gap:8px!important;align-items:center!important}
.clubMemberEntry>*{min-width:0!important;width:100%!important;margin:0!important}
.clubImportRow{display:flex!important;flex-direction:row!important;align-items:center!important;gap:8px!important;flex-wrap:wrap!important}
.clubMemberTableWrap{width:100%!important;overflow:auto!important}
@media(max-width:1450px){.clubWorkGrid{grid-template-columns:1fr!important}.clubMemberPanel{min-width:0!important}}
@media(max-width:760px){.clubMemberEntry{grid-template-columns:repeat(2,minmax(0,1fr))!important}}

/* v1.8.8 sidebar click isolation + stacked sports club panels */
.clubMemberPanel,.clubAttendancePanel{width:100%;min-width:0!important;overflow:hidden}
.clubAttendancePanel .tableScroll{width:100%;overflow-x:auto}
.clubAttendancePanel .clubAttendanceTable{width:100%;min-width:1180px!important}

/* v1.8.9: 스포츠클럽 출석 컨트롤 하단선 정렬 */
.attendanceControls{display:flex!important;align-items:flex-end!important;gap:16px!important;flex-wrap:wrap}
.attendanceControls label{display:flex!important;flex-direction:column!important;gap:8px!important;margin:0!important}
.attendanceControls input,.attendanceControls select{height:46px!important;box-sizing:border-box!important}
.attendanceControls>.btn{height:46px!important;min-height:46px!important;display:inline-flex!important;align-items:center!important;justify-content:center!important;margin:0!important;padding:0 20px!important}

/* 설정: 불필요한 학교명/프로그램 기본정보 대신 헤더 문구 관리 */
.adminBrandFields{margin-top:auto;padding-top:16px;border-top:1px solid #dbe4ee;display:grid;gap:10px}
.adminBrandFields h3{margin:0;font-size:16px}.adminBrandFields .hint{margin:0 0 2px}
.adminBrandFields label{display:grid;gap:6px;font-weight:700}.adminBrandFields input{width:100%;box-sizing:border-box}

/* v1.9.0 관리자 화면 재배열 + PAPS 원본 양식 내보내기 */
.adminMasterGrid{display:grid;grid-template-columns:minmax(360px,.95fr) minmax(360px,1.05fr);gap:18px;align-items:stretch}
.adminMasterGrid>.adminCard,.adminOpsGrid>.adminCard{height:100%;box-sizing:border-box;display:flex;flex-direction:column}
.adminOpsGrid{display:grid;grid-template-columns:minmax(480px,1.25fr) minmax(360px,.9fr);gap:18px;margin-top:18px;align-items:stretch}
.adminSemesterCard{justify-content:flex-start}
.semesterFixedGrid{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:14px;margin-top:18px}
.semesterFixedToggle{min-height:74px;border:1px solid #cbd5e1;background:#fff;border-radius:10px;font-size:19px;font-weight:800;color:#334155;cursor:pointer;display:flex;align-items:center;justify-content:center;gap:10px;transition:.18s ease}
.semesterFixedToggle:hover{border-color:#3498db;box-shadow:0 4px 12px rgba(52,152,219,.14);transform:translateY(-1px)}
.semesterFixedToggle.active{background:#edf7ff;border-color:#3498db;color:#1f6fa8}
.semesterFixedToggle.selected{box-shadow:0 0 0 3px rgba(52,152,219,.18)}
.semesterFixedToggle span{display:inline-flex;align-items:center;justify-content:center;width:25px;height:25px;border-radius:50%;background:#e2e8f0;color:#64748b}
.semesterFixedToggle.active span{background:#27ae60;color:#fff}
.semesterStateGuide{margin-top:18px;border:1px solid #dbe7f2;background:#f8fbfe;border-radius:9px;padding:15px 16px;line-height:1.7;color:#475569}
.semesterStateGuide span{font-size:13px;color:#7b8794}
.adminYearItem.selected{border-color:#3498db;background:#eef8ff}
.adminBrandFields{margin-top:auto;padding-top:16px;border-top:1px solid #d8e1ec}
.adminBrandFields label{display:flex;flex-direction:column;gap:6px;margin-top:10px}
.papsExportRow{display:flex;align-items:center;gap:14px;justify-content:flex-start;margin-top:14px;padding-top:14px;border-top:1px solid #d8e1ec;flex-wrap:wrap}
.papsExportRow .btn{min-width:230px}
@media(max-width:980px){.adminMasterGrid,.adminOpsGrid{grid-template-columns:1fr}.semesterFixedGrid{grid-template-columns:1fr}.papsExportRow{align-items:stretch}.papsExportRow .btn{width:100%}}

/* v1.9.1 설정 압축 배치 + 반별 체육부장 학기 완전 분리 + PAPS 원본 파일 재선택 */
.adminMasterGrid{align-items:stretch!important}
.adminYearCard,.adminSemesterCard{height:100%;box-sizing:border-box}
.adminSemesterCard{display:flex;flex-direction:column}
.semesterHeadCompact{margin-top:16px;padding-top:14px;border-top:1px solid #dbe3ec}
.semesterHeadCompact h3{margin:0 0 10px;font-size:15px}
.semesterHeadGrid{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:8px}
.semesterHeadItem{display:flex;align-items:center;justify-content:space-between;gap:8px;min-width:0;padding:8px 10px;border:1px solid #dbe3ec;border-radius:8px;background:#f8fbff;font-size:12px}
.semesterHeadItem b{white-space:nowrap;color:#334155}
.semesterHeadItem span{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;color:#0f172a;font-weight:800}
@media(max-width:1200px){.semesterHeadGrid{grid-template-columns:repeat(2,minmax(0,1fr))}}
@media(max-width:700px){.semesterHeadGrid{grid-template-columns:1fr}}

.calDetailTop{display:flex;align-items:center;justify-content:space-between;gap:12px;margin-bottom:4px}.deleteCalendarLesson{padding:7px 12px;min-width:auto}


/* v1.9.4 calendar edit */
.calDetailActions{display:flex;gap:7px;align-items:center}.calEditHeader{margin-bottom:10px;font-size:15px}.calEditGrid{display:grid;grid-template-columns:1fr 1fr;gap:10px}.calEditGrid label{display:grid;gap:5px}.calEditGrid label.wide{grid-column:1/-1}.calEditGrid span{font-size:12px;font-weight:900;color:#475569}.calEditGrid input,.calEditGrid textarea{width:100%;box-sizing:border-box;border:1px solid var(--line);border-radius:8px;padding:9px 10px;font:inherit;background:#fff}.calEditGrid textarea{resize:vertical}.calEditButtons{display:flex;justify-content:flex-end;gap:8px;margin-top:12px}
@media(max-width:760px){.calEditGrid{grid-template-columns:1fr}.calEditGrid label.wide{grid-column:auto}.calDetailTop{align-items:flex-start}.calDetailActions{flex-shrink:0}}

/* v1.9.7 홈 달력 편집 안정화 */
.calEditGrid select{width:100%;box-sizing:border-box;border:1px solid var(--line);border-radius:8px;padding:9px 10px;font:inherit;background:#fff;min-height:40px}
.calEditGrid textarea{user-select:text;-webkit-user-select:text}


/* v1.9.9 달력 편집 1줄 배치 + 장소 관리 */
.calEditGrid{grid-template-columns:repeat(3,minmax(0,1fr))!important;align-items:start}
.calEditGrid label.wide{grid-column:1/-1!important}
.adminMasterGrid{grid-template-columns:minmax(280px,.72fr) minmax(320px,.86fr) minmax(520px,1.42fr)!important}
.adminYearCard .adminAddRow input{max-width:150px}
.adminYearList{display:grid;gap:8px}
.adminPlaceCard{display:flex;flex-direction:column;min-width:0}
#adminPlaceRows{display:grid;gap:8px;max-height:250px;overflow:auto;padding-right:2px}
.adminPlaceCard .adminListRow{grid-template-columns:minmax(0,1fr) auto}
.adminPlaceAdd{margin-top:auto;padding-top:12px}
@media(max-width:1250px){.adminMasterGrid{grid-template-columns:1fr 1fr!important}.adminSemesterCard{grid-column:1/-1}}
@media(max-width:760px){.calEditGrid{grid-template-columns:1fr!important}.calEditGrid label.wide{grid-column:auto!important}.adminMasterGrid{grid-template-columns:1fr!important}.adminSemesterCard{grid-column:auto}}


/* v1.9.9 장소 관리 저장 안정화 + 컴팩트 2열 목록 + 카드 위치 교환 */
.adminMasterGrid{grid-template-columns:minmax(280px,.72fr) minmax(520px,1.42fr) minmax(320px,.86fr)!important}
.adminPlaceCard{justify-content:flex-start!important}
#adminPlaceRows{grid-template-columns:repeat(2,minmax(0,1fr));gap:8px;max-height:310px;overflow-y:auto;overflow-x:hidden;padding-right:4px}
.adminPlaceCard .adminListRow{display:grid;grid-template-columns:minmax(0,1fr) auto;gap:8px;align-items:center}
.adminPlaceCard .adminListRow input{min-height:38px;padding:7px 10px}
.adminPlaceCard .adminListRow .btn{min-height:38px;padding:7px 12px}
.adminPlaceAdd{margin-top:10px!important;padding-top:10px!important;border-top:1px solid #e2e8f0}
@media(max-width:1250px){.adminMasterGrid{grid-template-columns:1fr 1fr!important}.adminPlaceCard{grid-column:1/-1}#adminPlaceRows{grid-template-columns:repeat(2,minmax(0,1fr))}}
@media(max-width:760px){.adminMasterGrid{grid-template-columns:1fr!important}.adminPlaceCard{grid-column:auto}#adminPlaceRows{grid-template-columns:1fr}}


/* v1.10.0 연속 월 이동 + 대한민국 공휴일 + 설정 학교명 관리 */
.calDateRow{display:flex;align-items:flex-start;justify-content:space-between;gap:5px;min-width:0}
.calDay.holiday .calDate,.calDay.holiday .holidayName{color:#e53935!important;font-weight:900}
.holidayName{display:block;max-width:78%;font-size:10px;line-height:1.2;text-align:right;white-space:normal;word-break:keep-all;color:#e53935}
.mobileDay.holiday .mobileDate strong{color:#e53935}
.adminMasterGrid{grid-template-columns:minmax(270px,.68fr) minmax(360px,.92fr) minmax(540px,1.4fr)!important}
.adminPlaceAdd{margin-top:18px!important;padding-top:14px!important}
.adminOpsGridWithSchool{display:grid!important;grid-template-columns:minmax(520px,1.45fr) minmax(340px,.9fr) minmax(260px,.58fr)!important;gap:14px;align-items:stretch}
.adminOpsGridWithSchool>.adminCard{height:100%;box-sizing:border-box}
.adminSchoolCard{display:flex;flex-direction:column;min-width:0}
.adminSchoolLabel{display:grid;gap:8px;font-weight:800;color:#334155;margin-top:12px}
.adminSchoolLabel input{width:100%;box-sizing:border-box}
.adminSchoolPreview{margin-top:16px;padding:12px;border:1px solid #dbe3ec;border-radius:10px;background:#f8fbff;display:grid;gap:6px}
.adminSchoolPreview span{font-size:11px;color:#64748b}.adminSchoolPreview b{font-size:13px;color:#0f172a}
@media(max-width:1350px){.adminOpsGridWithSchool{grid-template-columns:1.2fr .8fr!important}.adminSchoolCard{grid-column:1/-1}.adminMasterGrid{grid-template-columns:1fr 1fr!important}.adminSemesterCard{grid-column:1/-1}}
@media(max-width:760px){.adminOpsGridWithSchool,.adminMasterGrid{grid-template-columns:1fr!important}.adminSchoolCard,.adminSemesterCard{grid-column:auto}.holidayName{max-width:72%;font-size:9px}}

/* v1.10.2 장소 입력 하단 정렬 */
.adminPlaceCard{display:flex!important;flex-direction:column!important}
.adminPlaceCard #adminPlaceRows{flex:0 1 auto!important}
.adminPlaceCard .adminPlaceAdd{margin-top:auto!important;padding-top:14px!important}

/* v1.10.2 focused refinements */
.adminOpsGridWithSchool{grid-template-columns:minmax(540px,1.55fr) minmax(300px,.72fr) minmax(300px,.73fr)!important}
.adminSchoolLabel{margin-top:18px!important;gap:12px!important}
.adminSchoolLabel span{display:block;margin-bottom:2px}
.adminSchoolPreview{margin-top:auto!important;padding-top:14px!important}
.adminSchoolCard{display:flex!important;flex-direction:column!important}
@media(max-width:1350px){.adminOpsGridWithSchool{grid-template-columns:1.2fr .8fr!important}.adminSchoolCard{grid-column:1/-1}}


/* v1.10.3 설정 카드 균등 배치 */
.adminMasterGrid{grid-template-columns:repeat(4,minmax(0,1fr))!important;align-items:stretch!important}
.adminMasterGrid>.adminCard{height:100%!important;min-height:0;box-sizing:border-box}
.adminHeadTeacherCard{display:flex;flex-direction:column;min-width:0}
.adminHeadTeacherCard .semesterHeadGrid{margin-top:8px}
.semesterHeadVertical{grid-template-columns:1fr!important;gap:8px!important}
.semesterHeadVertical .semesterHeadItem{min-height:38px}
.adminOpsGridWithSchool{grid-template-columns:repeat(3,minmax(0,1fr))!important;align-items:stretch!important}
.adminOpsGridWithSchool>.adminCard{height:100%!important;box-sizing:border-box}
.adminSchoolLabel{margin-top:22px!important;gap:14px!important}
.adminSchoolLabel span{margin-bottom:4px!important}
@media(max-width:1450px){
  .adminMasterGrid{grid-template-columns:repeat(2,minmax(0,1fr))!important}
  .adminOpsGridWithSchool{grid-template-columns:repeat(3,minmax(0,1fr))!important}
}
@media(max-width:1000px){
  .adminMasterGrid,.adminOpsGridWithSchool{grid-template-columns:1fr!important}
}


/* v1.10.5 달력 월 선택 UI 복구 */
.monthPickerWrap{position:relative;display:inline-flex;align-items:center}
.monthPickerButton{height:42px;min-width:180px;padding:0 14px;border:1px solid #cbd5e1;border-radius:7px;background:#fff;color:#0f172a;font:inherit;font-weight:700;display:inline-flex;align-items:center;justify-content:center;text-align:center;cursor:pointer;box-sizing:border-box}
.monthPickerButton:hover{border-color:#93c5fd;background:#f8fbff}
.monthPickerButton:focus-visible{outline:3px solid #bfdbfe;outline-offset:1px}
.monthSelectDialog{max-width:560px!important}
.monthSelectBody{display:grid;gap:18px;margin-top:18px}
.monthSelectBody label{display:grid;gap:8px;font-weight:800}
.monthSelectBody select{width:100%;height:44px;border:1px solid #cbd5e1;border-radius:8px;padding:0 12px;background:#fff;font:inherit}
.monthGrid{display:grid;grid-template-columns:repeat(4,1fr);gap:10px}
.monthChoice{height:44px;border:1px solid #cbd5e1;border-radius:9px;background:#fff;color:#0f172a;font:inherit;font-weight:800;cursor:pointer}
.monthChoice:hover{border-color:#60a5fa;background:#eff6ff}
.monthChoice.active{background:#3498db;color:#fff;border-color:#3498db}
@media(max-width:760px){.monthPickerButton{min-width:150px;height:40px;padding:0 10px}.calendarHeader .row{gap:8px}.monthGrid{grid-template-columns:repeat(3,1fr)}}.calendarHeader .row{gap:8px}}

/* v1.10.6 오늘 버튼 색상 유지 */
#calToday.btn.secondary{
  background:#f59e0b!important;
  border-color:#f59e0b!important;
  color:#fff!important;
}
#calToday.btn.secondary:hover{
  background:#d97706!important;
  border-color:#d97706!important;
  color:#fff!important;
}

/* =========================================================
   v1.11.0-mobile — 모바일 전용 안전 최적화
   데이터/API/저장 로직은 건드리지 않고 화면 배치만 조정합니다.
   ========================================================= */
@media (max-width: 768px) {
  html, body { width:100%; max-width:100%; overflow-x:hidden; }
  body { -webkit-text-size-adjust:100%; }

  /* 상단 헤더 */
  .pe87Top {
    min-height:64px!important;
    height:auto!important;
    padding:9px 12px!important;
    align-items:center!important;
    position:sticky!important;
    top:0!important;
    z-index:120!important;
  }
  .pe87Brand { min-width:0!important; gap:10px!important; }
  .pe87Logo { width:44px!important; height:44px!important; flex:0 0 44px!important; }
  .pe87Title { min-width:0!important; }
  .pe87Title strong { font-size:13px!important; line-height:1.25!important; white-space:nowrap; overflow:hidden; text-overflow:ellipsis; }
  .pe87Title b { font-size:18px!important; line-height:1.2!important; white-space:nowrap; overflow:hidden; text-overflow:ellipsis; }
  .pe87UserTools { display:none!important; }

  /* 좌측 메뉴를 모바일에서는 가로 스크롤 탭으로 */
  .pe87Shell { display:block!important; min-height:0!important; }
  .pe87Side {
    position:sticky!important;
    top:62px!important;
    z-index:110!important;
    width:100%!important;
    height:auto!important;
    max-height:none!important;
    padding:8px!important;
    border-right:0!important;
    border-bottom:1px solid #d9e1ea!important;
    overflow-x:auto!important;
    overflow-y:hidden!important;
    -webkit-overflow-scrolling:touch;
    background:#fff!important;
  }
  .sideTabs {
    display:flex!important;
    flex-direction:row!important;
    gap:7px!important;
    width:max-content!important;
    min-width:100%!important;
    padding:0!important;
    border:0!important;
    overflow:visible!important;
  }
  .sideTabs > .tab,
  .sideTabs .tab {
    flex:0 0 auto!important;
    width:auto!important;
    min-width:max-content!important;
    min-height:40px!important;
    padding:0 12px!important;
    font-size:13px!important;
    border-radius:8px!important;
  }
  .sideTabs .tree, .sideTabs .submenu, .sideTabs .accordionBody { display:none!important; }

  .pe87Main { padding:8px!important; }
  #app { padding:8px!important; min-height:calc(100vh - 126px)!important; border-radius:6px!important; }

  /* 터치 조작성 */
  button, .btn, select, input, textarea { font-size:16px; }
  button, .btn, select, input:not([type="checkbox"]):not([type="radio"]) { min-height:44px; }
  .btn { padding:10px 13px; border-radius:8px; }
  textarea { min-height:96px; }

  /* 공통 카드/배치 */
  .panel, .detail, .list, .adminCard, .waitingCard { border-radius:10px!important; }
  .panel, .detail, .adminCard { padding:12px!important; }
  .grid, .grid2, .formGrid, .adminGrid2, .adminGrid3,
  .adminMasterGrid, .adminOpsGridWithSchool, .studentWaitingGrid {
    grid-template-columns:1fr!important;
    gap:10px!important;
  }
  .row.mobileStack, .attendanceControls { align-items:stretch!important; }
  .attendanceControls { flex-wrap:wrap!important; }
  .attendanceControls label { flex:1 1 140px!important; }

  /* 홈 달력 조작부 — 한 줄 유지 */
  .calendarHeader .row {
    display:grid!important;
    grid-template-columns:auto minmax(122px,1fr) auto auto!important;
    gap:6px!important;
    align-items:center!important;
    flex-wrap:nowrap!important;
  }
  .calendarHeader .row > * { min-width:0!important; }
  .calendarHeader .btn { width:auto!important; min-width:0!important; padding:8px 10px!important; font-size:13px!important; }
  .monthPickerWrap { width:100%!important; min-width:0!important; }
  .monthPickerButton {
    width:100%!important;
    min-width:0!important;
    height:44px!important;
    padding:0 8px!important;
    font-size:15px!important;
    justify-content:center!important;
  }
  .calTitle { font-size:18px!important; }
  .calWeekHead, .calGrid { display:none!important; }
  .calendarMobile, .mobileCalendar, .calMobileList { display:block!important; }
  .mobileDay { margin-bottom:9px!important; border-radius:10px!important; }
  .mobileDate { padding:10px 11px!important; }
  .mobileLesson { padding:11px!important; }

  /* 모달은 모바일 하단 시트형 */
  .calModal, .photoRosterModal {
    padding:0!important;
    align-items:flex-end!important;
  }
  .calDialog {
    width:100%!important;
    max-width:none!important;
    max-height:92dvh!important;
    border-radius:16px 16px 0 0!important;
    padding:14px!important;
  }
  .calEditGrid { grid-template-columns:1fr!important; gap:9px!important; }
  .calEditGrid label.wide { grid-column:auto!important; }
  .calEditButtons { position:sticky; bottom:0; background:#fff; padding-top:10px; z-index:2; }
  .monthSelectDialog { width:100%!important; max-width:none!important; }
  .monthGrid { grid-template-columns:repeat(3,1fr)!important; gap:8px!important; }

  /* 표: 데스크톱 구조 보존 + 모바일에서 가로 스크롤 */
  .tableWrap, .tableScroll, .papsTableWrap, .assessmentTableWrap {
    width:100%!important;
    overflow-x:auto!important;
    overflow-y:hidden!important;
    -webkit-overflow-scrolling:touch;
    border-radius:8px;
  }
  .dataTable { min-width:820px!important; font-size:13px!important; }
  .papsTable, .pe87Paps .dataTable { min-width:1120px!important; }
  .assessTable, .pe87Assess .dataTable { min-width:900px!important; }
  .dataTable th, .dataTable td { padding:7px 6px!important; }
  .dataTable input, .dataTable select { min-height:38px!important; font-size:14px!important; }

  /* 반별 진도표 */
  .progressTable, .classProgressTable { min-width:1050px!important; }

  /* 학생 관리 */
  .grid { grid-template-columns:1fr!important; }
  .studentList { max-height:42vh!important; min-height:220px!important; }
  .studentBtn { grid-template-columns:54px 1fr!important; }
  .num { padding:13px 6px!important; }
  .name { padding:10px!important; }
  .badge { padding:7px 13px!important; }
  .studentInfoCard { grid-template-columns:1fr!important; padding:11px!important; }
  .studentInfoSave { grid-column:auto!important; }
  .studentNoteRow { grid-template-columns:1fr!important; }
  .photoRosterTools { flex-direction:column!important; align-items:stretch!important; }
  .photoRosterDialog {
    width:100%!important;
    height:96dvh!important;
    border-radius:16px 16px 0 0!important;
  }
  .photoRosterBody { grid-template-columns:1fr!important; overflow:auto!important; }
  .photoRosterCanvasArea { min-height:42vh!important; padding:10px!important; }
  .photoRosterSide { border-left:0!important; border-top:1px solid #e5e7eb!important; overflow:visible!important; }
  .classPdfToolbar, .classPdfWorkspace { grid-template-columns:1fr!important; }

  /* PAPS/수행평가 설정 카드 */
  .assessConfigGrid, .semesterHeadGrid { grid-template-columns:1fr!important; }
  .assessSettingRow { grid-template-columns:auto minmax(72px,1fr) auto minmax(72px,1fr)!important; }
  .papsExportRow { align-items:stretch!important; }
  .papsExportRow .btn { width:100%!important; }

  /* 스포츠클럽 */
  .clubWorkGrid { grid-template-columns:1fr!important; }
  .clubMemberEntry { grid-template-columns:1fr 1fr!important; }
  .clubMemberEntry .btn { width:100%!important; }
  .clubAttRow { grid-template-columns:1fr!important; }
  .clubAttendanceTable { min-width:1050px!important; }

  /* 설정 */
  .adminMasterGrid, .adminOpsGridWithSchool { grid-template-columns:1fr!important; }
  .adminMasterGrid > .adminCard, .adminOpsGridWithSchool > .adminCard { min-height:0!important; height:auto!important; }
  #adminPlaceRows { grid-template-columns:1fr!important; max-height:280px!important; }
  .toggleGrid { grid-template-columns:repeat(3,1fr)!important; }
  .classGrid { grid-template-columns:repeat(4,1fr)!important; }
  .adminTopBar { align-items:stretch!important; gap:10px!important; flex-direction:column!important; }
  .adminTopBar .btn { width:100%!important; }

  /* 저장 알림 */
  .saveNotice { top:10px!important; width:calc(100% - 20px)!important; max-width:420px!important; justify-content:center!important; text-align:center!important; }
}

@media (max-width: 420px) {
  .calendarHeader .row { grid-template-columns:auto minmax(105px,1fr) auto auto!important; gap:4px!important; }
  .calendarHeader .btn { padding:7px 8px!important; font-size:12px!important; }
  .monthPickerButton { font-size:14px!important; }
  .clubMemberEntry { grid-template-columns:1fr!important; }
  .classGrid { grid-template-columns:repeat(3,1fr)!important; }
  .toggleGrid { grid-template-columns:1fr!important; }
}

/* v1.11.6: 반별 진도표 날짜 월 앞자리 0 제거 */
.progressDatePicker{position:relative;width:100%}.progressDateDisplay{width:100%;height:38px;border:1px solid #d7e1ec;border-radius:6px;background:#fff;color:#111827;font:inherit;text-align:center;cursor:pointer;padding:0 12px}.progressDateDisplay:hover{border-color:#9fc7ee}.progressDateNative{position:absolute!important;right:8px;top:50%;transform:translateY(-50%);width:28px!important;height:28px!important;opacity:0;pointer-events:none}

/* v1.11.7: 반별 진도표 빈 종목의 이전 탭 종목 상속 방지 */

/* v1.11.8: 저장된 빈 차시 삭제 처리로 종목 선택 상태 유지 */

/* =========================================================
   v1.12.4 — 모바일 현재 탭 선택 + 바텀시트 메뉴
   PC 사이드바와 데이터/저장 로직은 그대로 유지합니다.
   ========================================================= */
.mobileTabBar,.mobileTabSheet{display:none}
@media (max-width:768px){
  body.mobileSheetOpen{overflow:hidden!important}

  /* 기존 PC 사이드바는 DOM에 그대로 두고 모바일에서만 숨김 */
  .pe87Side{display:none!important}
  .pe87Main{width:100%!important;min-width:0!important}

  .mobileTabBar{
    display:block;
    position:sticky;
    top:62px;
    z-index:112;
    padding:8px 10px;
    background:#f6f9fd;
    border-bottom:1px solid #d9e1ea;
  }
  .mobileTabCurrent{
    width:100%;
    min-height:48px;
    border:1px solid #cbd5e1;
    border-radius:12px;
    background:#fff;
    color:#203247;
    padding:0 15px;
    display:flex;
    align-items:center;
    justify-content:space-between;
    gap:12px;
    font-size:16px;
    font-weight:900;
    box-shadow:0 2px 8px rgba(15,23,42,.06);
    cursor:pointer;
  }
  .mobileTabCurrent:active{background:#f0f7ff}
  .mobileTabChevron{color:#3498db;font-size:19px;transition:transform .2s ease}
  .mobileTabCurrent[aria-expanded="true"] .mobileTabChevron{transform:rotate(180deg)}

  .mobileTabSheet{
    display:block;
    position:fixed;
    inset:0;
    z-index:1000;
    pointer-events:none;
    visibility:hidden;
  }
  .mobileTabSheet.open{pointer-events:auto;visibility:visible}
  .mobileTabBackdrop{
    position:absolute;
    inset:0;
    width:100%;height:100%;
    border:0;
    background:rgba(15,23,42,.48);
    opacity:0;
    transition:opacity .2s ease;
  }
  .mobileTabSheet.open .mobileTabBackdrop{opacity:1}
  .mobileTabSheetPanel{
    position:absolute;
    left:0;right:0;bottom:0;
    max-height:min(82dvh,720px);
    overflow:auto;
    overscroll-behavior:contain;
    background:#fff;
    border-radius:20px 20px 0 0;
    padding:10px 14px max(18px,env(safe-area-inset-bottom));
    box-shadow:0 -18px 55px rgba(15,23,42,.25);
    transform:translateY(102%);
    transition:transform .24s ease;
  }
  .mobileTabSheet.open .mobileTabSheetPanel{transform:translateY(0)}
  .mobileTabSheetPanel:before{
    content:"";display:block;width:42px;height:5px;border-radius:999px;background:#d5dde7;margin:0 auto 8px;
  }
  .mobileTabSheetHead{
    display:flex;align-items:center;justify-content:space-between;gap:12px;
    padding:6px 2px 12px;border-bottom:1px solid #e5eaf0;
  }
  .mobileTabSheetHead strong{font-size:19px;color:#203247}
  .mobileTabClose{
    width:42px;height:42px;min-height:42px;border:1px solid #dbe3ef;border-radius:10px;background:#fff;color:#526274;font-size:18px;cursor:pointer;
  }
  .mobileTabOptions{display:grid;grid-template-columns:1fr;gap:8px;padding-top:12px}
  .mobileTabOptions button{
    width:100%;min-height:52px;border:1px solid #dbe3ef;border-radius:12px;background:#fff;color:#203247;
    display:flex;align-items:center;gap:12px;padding:0 15px;text-align:left;font-size:16px;font-weight:800;cursor:pointer;
  }
  .mobileTabOptions button.active{background:#30475e;color:#fff;border-color:#30475e;box-shadow:0 4px 12px rgba(48,71,94,.18)}
  .mobileTabOptions button:not(.active):active{background:#eef6ff;border-color:#9fc7ee}

  /* 사이드바 제거에 맞춰 본문 높이만 자연스럽게 재계산 */
  #app{min-height:calc(100dvh - 130px)!important}
}
@media (min-width:769px){
  .mobileTabBar,.mobileTabSheet{display:none!important}
}
.mobileTabBar.authHidden{display:none!important}

/* =========================================================
   v1.12.7 — 모바일 홈 달력 오늘 날짜 정확 이동
   PC 레이아웃과 달력 데이터 로직은 변경하지 않습니다.
   ========================================================= */
@media (max-width:768px){
  /* 바깥 제목 영역과 안쪽 이동 버튼 영역을 분리 */
  .calendarHeader > .row{
    display:block!important;
  }
  .calendarHeader > .row > div:first-child{
    margin-bottom:12px!important;
  }
  .calendarHeader > .row > .row{
    display:grid!important;
    grid-template-columns:minmax(0,1fr) minmax(128px,1.35fr) minmax(0,1fr)!important;
    grid-template-areas:
      "prev today next"
      "month month month"!important;
    gap:8px!important;
    width:100%!important;
    align-items:center!important;
  }
  .calendarHeader #calPrev{grid-area:prev}
  .calendarHeader .monthPickerWrap{grid-area:month}
  .calendarHeader #calNext{grid-area:next}
  .calendarHeader #calToday{
    grid-area:today;
    width:100%!important;
    justify-self:stretch!important;
  }
  .calendarHeader .monthPickerWrap{
    width:min(220px,100%)!important;
    justify-self:center!important;
  }
  .calendarHeader #calPrev,
  .calendarHeader #calNext,
  .calendarHeader #calToday,
  .calendarHeader .monthPickerButton{
    min-width:0!important;
    min-height:44px!important;
    white-space:nowrap!important;
    writing-mode:horizontal-tb!important;
    word-break:keep-all!important;
    overflow:hidden!important;
    text-overflow:ellipsis!important;
  }
  .calendarHeader #calPrev,
  .calendarHeader #calNext{
    width:100%!important;
    padding:8px 6px!important;
    font-size:13px!important;
  }
  .calendarHeader .monthPickerButton{
    font-size:15px!important;
  }
}
@media (max-width:420px){
  .calendarHeader > .row > .row{
    grid-template-columns:minmax(0,1fr) minmax(116px,1.25fr) minmax(0,1fr)!important;
    gap:6px!important;
  }
  .calendarHeader #calPrev,
  .calendarHeader #calNext{
    font-size:12px!important;
    padding:7px 4px!important;
  }
  .calendarHeader .monthPickerButton{font-size:14px!important}
}

/* v1.12.7: 모바일 오늘 카드가 고정 헤더 아래에 숨지 않도록 여백 확보 */
@media (max-width:768px){.mobileDay.today{scroll-margin-top:138px!important}}

@media (max-width: 768px) {
  .mobileDay.mobileTodayFocus {
    outline:3px solid rgba(245,158,11,.55)!important;
    outline-offset:2px!important;
    transition:outline-color .35s ease!important;
  }
}

/* =========================================================
   v1.13.0 — 모바일 학생관리 학급·학생 선택기
   PC UI와 데이터/API 로직은 변경하지 않습니다.
   ========================================================= */
.mobileStudentSelector{display:none}
@media (max-width:768px){
  .mobileStudentSelector{
    display:block;
    margin:0 0 12px;
    padding:14px;
    border:1px solid #d8e2ee;
    border-radius:14px;
    background:linear-gradient(180deg,#fff,#f7fbff);
    box-shadow:0 3px 12px rgba(30,64,175,.07);
  }
  .mobileStudentSelectorTitle{display:flex;align-items:center;gap:8px;margin-bottom:12px;color:#203247}
  .mobileStudentSelectorTitle>span{font-size:21px}
  .mobileStudentSelectorTitle b{font-size:17px}
  .mobileStudentSelectorTitle small{margin-left:auto;color:#718096;font-size:12px;font-weight:700}
  .mobileStudentSelectorGrid{display:grid;grid-template-columns:1fr 1fr;gap:10px}
  .mobileStudentSelectorGrid label{display:flex;flex-direction:column;gap:5px;min-width:0}
  .mobileStudentSelectorGrid label>span{font-size:12px;font-weight:900;color:#526274}
  .mobileStudentSelectorGrid select{
    width:100%;min-width:0;height:44px;border:1px solid #cbd5e1;border-radius:10px;background:#fff;
    padding:0 10px;color:#172b3f;font-size:16px;font-weight:750;
  }
  .mobileStudentSelectorGrid select:disabled{background:#eef2f7;color:#8895a5}
  .mobileStudentPerson{grid-column:1/-1}
  .mobileStudentLoadBtn{
    width:100%;height:46px;margin-top:10px;border:0;border-radius:10px;background:#30475e;color:#fff;
    font-size:15px;font-weight:900;box-shadow:0 3px 9px rgba(48,71,94,.18);
  }
  .mobileStudentLoadBtn:active{transform:translateY(1px);background:#24384b}

  /* 학생관리 선택 후 모바일에서는 명렬→상세를 자연스럽게 세로 배치 */
  body:has(#mobileStudentSelector) #app .grid{grid-template-columns:1fr!important;gap:12px!important}
  body:has(#mobileStudentSelector) #app .grid>.list{height:auto!important;max-height:46dvh!important;min-height:220px!important}
  body:has(#mobileStudentSelector) #app .studentList{max-height:calc(46dvh - 48px)!important;overflow:auto!important}
  body:has(#mobileStudentSelector) #app #studentDetail{min-height:260px!important}
  body:has(#mobileStudentSelector) #app .studentRosterTools{align-items:flex-start!important}
}
@media (max-width:390px){
  .mobileStudentSelector{padding:12px}
  .mobileStudentSelectorTitle small{display:none}
  .mobileStudentSelectorGrid{gap:8px}
}

/* =========================================================
   v1.13.1 — 모바일 학생관리 선택 UI 및 폭 정렬 보정
   학년도/학기 · 학년/반 · 학생 선택 · 학급 불러오기
   PC UI와 데이터/API 로직은 변경하지 않습니다.
   ========================================================= */
@media (max-width:768px){
  body:has(#mobileStudentSelector){overflow-x:hidden!important}
  body:has(#mobileStudentSelector) .pe87Main,
  body:has(#mobileStudentSelector) #app{
    width:100%!important;
    max-width:100%!important;
    min-width:0!important;
    box-sizing:border-box!important;
    overflow-x:hidden!important;
  }
  #mobileStudentSelector{
    width:100%!important;
    max-width:100%!important;
    box-sizing:border-box!important;
  }
  #mobileStudentSelector .mobileStudentSelectorGrid{
    grid-template-columns:minmax(0,1fr) minmax(0,1fr)!important;
    gap:10px!important;
  }
  #mobileStudentSelector .mobileStudentPerson{grid-column:1/-1!important}

  /* 상단 선택 카드와 학생 명렬·상세 카드의 좌우 끝선을 동일하게 맞춤 */
  body:has(#mobileStudentSelector) #app > :not(.pdfCropModal),
  body:has(#mobileStudentSelector) #app .grid,
  body:has(#mobileStudentSelector) #app .grid > .list,
  body:has(#mobileStudentSelector) #app #studentDetail{
    width:100%!important;
    max-width:100%!important;
    min-width:0!important;
    box-sizing:border-box!important;
  }
  body:has(#mobileStudentSelector) #app .grid{
    display:grid!important;
    grid-template-columns:minmax(0,1fr)!important;
    gap:12px!important;
    overflow:visible!important;
  }
  body:has(#mobileStudentSelector) #app .grid > .list,
  body:has(#mobileStudentSelector) #app #studentDetail{
    margin-left:0!important;
    margin-right:0!important;
    overflow-x:hidden!important;
  }
  body:has(#mobileStudentSelector) #app .studentList{
    width:100%!important;
    max-width:100%!important;
    min-width:0!important;
    box-sizing:border-box!important;
    overflow-x:hidden!important;
  }
  body:has(#mobileStudentSelector) #app .studentBtn,
  body:has(#mobileStudentSelector) #app .studentRosterTools,
  body:has(#mobileStudentSelector) #app .studentDetailHero,
  body:has(#mobileStudentSelector) #app .basicInfoCard,
  body:has(#mobileStudentSelector) #app .academicSection,
  body:has(#mobileStudentSelector) #app .classPdfPanel,
  body:has(#mobileStudentSelector) #app .uploadBox{
    max-width:100%!important;
    min-width:0!important;
    box-sizing:border-box!important;
  }
  body:has(#mobileStudentSelector) #app table{
    max-width:none!important;
  }
  body:has(#mobileStudentSelector) #app .tableWrap,
  body:has(#mobileStudentSelector) #app .academicSection{
    overflow-x:auto!important;
    -webkit-overflow-scrolling:touch!important;
  }
}
@media (max-width:390px){
  #mobileStudentSelector .mobileStudentSelectorGrid{gap:8px!important}
  #mobileStudentSelector .mobileStudentSelectorGrid select{padding-left:8px!important;padding-right:8px!important}
}


/* =========================================================
   v1.13.2 — 모바일 학생 선택 바텀시트 + 학업기록 세로배열
   PC UI와 API/데이터 구조는 변경하지 않습니다.
   ========================================================= */
@media (max-width:768px){
  .mobileStudentPersonButton{
    width:100%;height:46px;border:1px solid #cbd5e1;border-radius:10px;background:#fff;
    padding:0 12px;display:flex;align-items:center;justify-content:space-between;gap:10px;
    color:#172b3f;font-size:16px;font-weight:800;text-align:left;cursor:pointer;
  }
  .mobileStudentPersonButton:disabled{background:#eef2f7;color:#8895a5;cursor:default}
  .mobileStudentPersonChevron{font-size:19px;color:#718096;line-height:1}

  .mobileStudentPickerSheet{position:fixed;inset:0;z-index:23000;display:none}
  .mobileStudentPickerSheet.open{display:block}
  .mobileStudentPickerBackdrop{position:absolute;inset:0;background:rgba(15,23,42,.48)}
  .mobileStudentPickerPanel{
    position:absolute;left:0;right:0;bottom:0;max-height:min(72dvh,620px);background:#fff;
    border-radius:20px 20px 0 0;padding:10px 14px max(18px,env(safe-area-inset-bottom));
    box-shadow:0 -18px 55px rgba(15,23,42,.28);display:flex;flex-direction:column;
  }
  .mobileStudentPickerHandle{width:42px;height:5px;border-radius:999px;background:#d5dde7;margin:0 auto 8px}
  .mobileStudentPickerHead{display:flex;align-items:center;justify-content:space-between;padding:5px 2px 12px;border-bottom:1px solid #e5eaf0}
  .mobileStudentPickerHead strong{font-size:19px;color:#203247}
  .mobileStudentPickerClose{width:42px;height:42px;border:1px solid #dbe3ef;border-radius:10px;background:#fff;color:#526274;font-size:18px}
  .mobileStudentPickerList{overflow:auto;-webkit-overflow-scrolling:touch;padding:10px 0 2px;display:grid;gap:7px}
  .mobileStudentPickerList button{
    width:100%;min-height:50px;border:1px solid #dbe3ef;border-radius:11px;background:#fff;
    padding:0 14px;display:grid;grid-template-columns:54px 1fr 24px;align-items:center;text-align:left;color:#203247;font-size:16px;
  }
  .mobileStudentPickerList button.active{background:#eef6ff;border-color:#77afe4;color:#1f5f99}
  .studentPickerNo{font-size:13px;color:#718096;font-weight:800}
  .studentPickerCheck{text-align:right;color:#2f80c7;font-weight:900}
  .mobileStudentPickerEmpty{padding:28px 12px;text-align:center;color:#718096;font-weight:700}

  /* 학생 상세의 PAPS / 수행평가 표를 모바일에서 세로 카드형으로 표시 */
  #studentPapsSummary table.mobileAcademicVertical,
  #studentAssessTable table.mobileAcademicVertical{
    display:block!important;width:100%!important;min-width:0!important;border:0!important;background:transparent!important;
  }
  #studentPapsSummary table.mobileAcademicVertical thead,
  #studentAssessTable table.mobileAcademicVertical thead{display:none!important}
  #studentPapsSummary table.mobileAcademicVertical tbody,
  #studentAssessTable table.mobileAcademicVertical tbody,
  #studentPapsSummary table.mobileAcademicVertical tr,
  #studentAssessTable table.mobileAcademicVertical tr{display:grid!important;grid-template-columns:1fr!important;width:100%!important;gap:8px!important}
  #studentPapsSummary table.mobileAcademicVertical td,
  #studentAssessTable table.mobileAcademicVertical td{
    display:grid!important;grid-template-columns:minmax(105px,42%) minmax(0,1fr)!important;align-items:center!important;
    width:100%!important;min-width:0!important;box-sizing:border-box!important;padding:11px 12px!important;
    border:1px solid #dde6f0!important;border-radius:10px!important;background:#fff!important;text-align:right!important;
  }
  #studentPapsSummary table.mobileAcademicVertical td::before,
  #studentAssessTable table.mobileAcademicVertical td::before{
    content:attr(data-label);text-align:left;color:#526274;font-size:13px;font-weight:900;line-height:1.3;
  }
  #studentPapsSummary table.mobileAcademicVertical td>*{justify-self:end}
  #studentPapsSummary,
  #studentAssessTable{overflow:visible!important}
  #studentAssessmentSummary .academicToolbar{display:grid!important;grid-template-columns:auto 1fr auto 1fr!important;gap:8px!important;align-items:center!important}
  #studentAssessmentSummary .academicToolbar select{width:100%!important;min-width:0!important}
}


/* =========================================================
   v1.13.3 — 모바일 학생 선택 바텀시트 확정 + PAPS 배지 정렬
   PC 화면에는 적용되지 않습니다.
   ========================================================= */
@media (max-width:768px){
  #mobileStudentSelector .mobileStudentPerson{grid-column:1 / -1!important}
  #mobileStudentSelector .mobileStudentPersonButton{
    appearance:none!important;-webkit-appearance:none!important;
    width:100%!important;min-width:0!important;height:48px!important;
    border:1px solid #bfcddd!important;border-radius:11px!important;background:#fff!important;
    box-shadow:0 1px 2px rgba(15,23,42,.04)!important;
  }
  #mobileStudentSelector .mobileStudentPersonButton:not(:disabled):active{background:#eef6ff!important;border-color:#63a4df!important}

  /* PAPS: 종목명 오른쪽에 등급 배지, 기록은 아래 한 줄 */
  #studentPapsSummary table.mobilePapsVertical td{
    display:flex!important;flex-direction:column!important;align-items:stretch!important;gap:8px!important;
    text-align:left!important;padding:11px 12px!important;
  }
  #studentPapsSummary table.mobilePapsVertical td::before{display:none!important}
  #studentPapsSummary .mobilePapsMetricHead{
    display:flex!important;align-items:center!important;justify-content:space-between!important;gap:8px!important;width:100%!important;
  }
  #studentPapsSummary .mobilePapsMetricTitle{font-size:13px!important;font-weight:900!important;color:#526274!important;line-height:1.25!important}
  #studentPapsSummary .mobilePapsMetricHead .papsGrade,
  #studentPapsSummary .mobilePapsMetricHead .overallGradeBadge{margin:0!important;white-space:nowrap!important;flex:0 0 auto!important}
  #studentPapsSummary table.mobilePapsVertical td>b{align-self:flex-end!important;font-size:16px!important;color:#1d2f43!important}

  /* 수행평가 모바일 카드의 항목명에는 '만점 20' 문구를 표시하지 않음 */
  #studentAssessTable table.mobileAssessVertical td::before{content:attr(data-label)!important}
}

/* =========================================================
   v1.13.4 — 학생 선택 메뉴형 바텀시트 + PAPS 1행 정렬
   모바일 전용. PC UI와 데이터/API 로직은 변경하지 않습니다.
   ========================================================= */
@media (max-width:768px){
  body.mobileStudentPickerOpen{overflow:hidden!important}
  .mobileStudentPickerSheet{z-index:32000!important}
  .mobileStudentPickerPanel{
    max-height:min(78dvh,680px)!important;
    padding:10px 18px max(20px,env(safe-area-inset-bottom))!important;
    border-radius:22px 22px 0 0!important;
  }
  .mobileStudentPickerHead{padding:7px 2px 14px!important}
  .mobileStudentPickerHead strong{font-size:21px!important;font-weight:900!important}
  .mobileStudentPickerSearchWrap{
    display:flex!important;align-items:center!important;gap:9px!important;
    margin:13px 0 5px!important;padding:0 13px!important;height:48px!important;
    border:1px solid #d8e0ea!important;border-radius:12px!important;background:#f8fafc!important;
  }
  .mobileStudentPickerSearchWrap input{
    flex:1!important;min-width:0!important;border:0!important;outline:0!important;background:transparent!important;
    height:100%!important;font-size:16px!important;color:#203247!important;
  }
  .mobileStudentPickerList{gap:9px!important;padding-top:9px!important}
  .mobileStudentPickerList .mobileStudentPickerOption{
    min-height:58px!important;grid-template-columns:40px minmax(0,1fr) 28px!important;
    border-radius:13px!important;padding:0 14px!important;font-size:17px!important;
    box-shadow:0 1px 2px rgba(15,23,42,.03)!important;
  }
  .mobileStudentPickerList .mobileStudentPickerOption.active{
    background:#314a63!important;border-color:#314a63!important;color:#fff!important;
  }
  .studentPickerIcon{font-size:21px!important}
  .studentPickerText{min-width:0!important;overflow:hidden!important;text-overflow:ellipsis!important;white-space:nowrap!important}
  .mobileStudentPickerList .active .studentPickerCheck{color:#fff!important}

  /* PAPS: 종목 | 등급 배지 | 기록을 한 줄에 표시 */
  #studentPapsSummary table.mobilePapsVertical td{
    display:block!important;padding:0!important;border:0!important;background:transparent!important;
  }
  #studentPapsSummary .mobilePapsMetricRow{
    display:grid!important;
    grid-template-columns:minmax(105px,1fr) auto minmax(48px,auto)!important;
    align-items:center!important;gap:9px!important;width:100%!important;
    min-height:48px!important;padding:10px 12px!important;box-sizing:border-box!important;
    border:1px solid #dde6f0!important;border-radius:10px!important;background:#fff!important;
  }
  #studentPapsSummary .mobilePapsMetricTitle{
    min-width:0!important;font-size:14px!important;font-weight:900!important;color:#33475b!important;
    white-space:nowrap!important;overflow:hidden!important;text-overflow:ellipsis!important;
  }
  #studentPapsSummary .mobilePapsBadgeSlot{display:flex!important;align-items:center!important;justify-content:center!important;min-width:0!important}
  #studentPapsSummary .mobilePapsBadgeSlot .papsGrade,
  #studentPapsSummary .mobilePapsBadgeSlot .overallGradeBadge{
    margin:0!important;white-space:nowrap!important;font-size:11px!important;line-height:1.2!important;
  }
  #studentPapsSummary .mobilePapsValue{
    justify-self:end!important;font-size:15px!important;font-weight:900!important;color:#172b3f!important;white-space:nowrap!important;
  }
}


/* =========================================================
   v1.13.7 — 모바일 학생 명렬 패널 숨김
   학생 선택은 바텀시트로만 처리하고 상세 화면은 전체 폭 사용.
   PC UI와 데이터/API 로직은 변경하지 않습니다.
   ========================================================= */
@media (max-width:768px){
  /* 기존 스크롤 학생 명렬은 모바일에서만 숨김 */
  body:has(#mobileStudentSelector) #app .grid > .list{
    display:none!important;
  }

  /* 상세 화면을 상단 선택 카드와 같은 폭으로 확장 */
  body:has(#mobileStudentSelector) #app .grid{
    display:block!important;
    width:100%!important;
    max-width:100%!important;
    min-width:0!important;
  }
  body:has(#mobileStudentSelector) #app #studentDetail{
    display:block!important;
    width:100%!important;
    max-width:100%!important;
    min-width:0!important;
    margin:0!important;
    box-sizing:border-box!important;
  }

  /* 상세 내부 카드도 화면 밖으로 넘치지 않게 유지 */
  body:has(#mobileStudentSelector) #app #studentDetail > *,
  body:has(#mobileStudentSelector) #app #studentDetail .card,
  body:has(#mobileStudentSelector) #app #studentDetail .panel{
    max-width:100%!important;
    min-width:0!important;
    box-sizing:border-box!important;
  }
}

/* v1.13.8 — 모바일 학년도/학기/학년/반 선택도 바텀시트로 통일 */
@media (max-width:768px){
  #mobileStudentSelector .mobileContextPickerButton{
    width:100%!important;
    min-height:46px!important;
    border:1px solid #cfd9e6!important;
    border-radius:10px!important;
    background:#fff!important;
    color:#24364a!important;
    padding:0 12px!important;
    display:flex!important;
    align-items:center!important;
    justify-content:space-between!important;
    font-size:15px!important;
    font-weight:800!important;
    text-align:left!important;
    -webkit-tap-highlight-color:transparent!important;
    touch-action:manipulation!important;
  }
  #mobileStudentSelector .mobileContextPickerButton:not(:disabled):active{
    background:#fff!important;
    border-color:#cfd9e6!important;
    box-shadow:none!important;
  }
  #mobileStudentSelector .mobileContextPickerButton:disabled{
    background:#eef2f7!important;
    color:#8a98a8!important;
  }
}

/* v1.13.9 — 모바일 학생 선택 후 상세 제목 정확 스크롤 */
@media (max-width:768px){
  #studentDetail .studentDetailHero .detailTitle{scroll-margin-top:72px!important;}
}

/* =========================================================
   v1.14.1 — iPhone 학생관리 터치 안정화 + PAPS 종합등급 배지만 표시
   모바일 전용. PC UI와 데이터/API는 변경하지 않습니다.
   ========================================================= */
@media (max-width:768px){
  #mobileStudentSelector .mobilePickerField{
    display:flex!important;
    flex-direction:column!important;
    gap:5px!important;
    min-width:0!important;
  }
  #mobileStudentSelector .mobilePickerField>span{
    font-size:12px!important;
    font-weight:900!important;
    color:#526274!important;
  }
  #mobileStudentSelector button{
    -webkit-user-select:none!important;
    user-select:none!important;
    -webkit-touch-callout:none!important;
    touch-action:manipulation!important;
  }
  #studentPapsSummary .mobilePapsMetricRow.badgeOnly{
    grid-template-columns:minmax(105px,1fr) auto!important;
  }
  #studentPapsSummary .mobilePapsMetricRow.badgeOnly .mobilePapsValue{
    display:none!important;
  }
}

/* =========================================================
   v1.14.2 — 모바일 PAPS 학급 선택 바텀시트
   PC UI와 저장/API 로직에는 영향을 주지 않습니다.
   ========================================================= */
@media (max-width:768px){
  #mobilePapsSelector{width:100%!important;max-width:100%!important;box-sizing:border-box!important;margin:0 0 12px!important;}
  #mobilePapsSelector .mobilePapsSelectorGrid{grid-template-columns:1fr 1fr!important;}
  #mobilePapsSelector .mobilePapsClassFull{grid-column:1 / -1!important;}
  #mobilePapsSelector .mobileContextPickerButton{width:100%!important;min-height:46px!important;border:1px solid #cfd9e6!important;border-radius:10px!important;background:#fff!important;color:#24364a!important;padding:0 12px!important;display:flex!important;align-items:center!important;justify-content:space-between!important;font-size:15px!important;font-weight:800!important;text-align:left!important;-webkit-tap-highlight-color:transparent!important;touch-action:manipulation!important;}
  #mobilePapsSelector .mobilePickerField{display:flex!important;flex-direction:column!important;gap:5px!important;min-width:0!important;}
  #mobilePapsSelector .mobilePickerField>span{font-size:12px!important;font-weight:900!important;color:#526274!important;}
  #mobilePapsSelector button{-webkit-user-select:none!important;user-select:none!important;-webkit-touch-callout:none!important;touch-action:manipulation!important;}
}

/* v1.14.4 모바일 PAPS 단일학생 모드 — PC에는 적용되지 않음 */
#mobilePapsHost{display:none}
@media(max-width:768px){
  #mobilePapsHost{display:block;width:100%;max-width:100%;box-sizing:border-box}
  #mobilePapsHost[hidden]{display:none!important}
  #mobilePapsSelector{margin:0 0 12px!important}
  #mobilePapsSelector .mobilePapsSelectorGrid{grid-template-columns:1fr 1fr!important;gap:8px!important}
  #mobilePapsSelector .mobileStudentLoadBtn{margin-top:10px!important}

  body.mobilePapsSingleMode #app .papsPanel #papsTableBox{display:none!important}
  body.mobilePapsSingleMode #app .papsPanel{padding-top:0!important}

  body.mobilePapsView #app .pe87PageHead{display:none!important}
  .mobilePapsDashboardCard{width:100%;box-sizing:border-box;background:#fff;border:1px solid #dbe4ef;border-radius:14px;padding:12px;margin:0 0 12px;box-shadow:0 4px 14px rgba(31,56,88,.08)}
  .mobilePapsDashboardCard h2{margin:0 0 10px;font-size:17px;line-height:1.35;color:#203247;text-align:center}
  .mobilePapsActionRow{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:6px;width:100%}
  .mobilePapsActionRow .btn{width:100%;min-width:0;min-height:46px;padding:6px 3px;margin:0;font-size:11px;line-height:1.15;white-space:normal;border-radius:9px}
  .mobilePapsActionRow .btn:disabled{opacity:.46;cursor:not-allowed}

  .mobilePapsStudentView{width:100%;max-width:100%;box-sizing:border-box;margin:0 0 12px}
  .mobilePapsEmpty{background:#fff;border:1px solid #dbe4ef;border-radius:12px;padding:28px 16px;text-align:center;color:#718096;font-weight:800}
  .mobilePapsStudentCard{width:100%;box-sizing:border-box;background:#fff;border:1px solid #dbe4ef;border-radius:14px;padding:14px;box-shadow:0 4px 14px rgba(31,56,88,.08)}
  .mobilePapsStudentCard>header{display:flex;align-items:center;justify-content:space-between;gap:8px;padding-bottom:12px;border-bottom:1px solid #e4eaf1}
  .mobilePapsStudentCard>header h3{margin:0;font-size:17px;line-height:1.3;color:#1f3348;white-space:nowrap;min-width:0}
  .mobilePapsRecordGroup{padding:14px 0;border-bottom:1px solid #e8edf3}
  .mobilePapsRecordGroup h4{margin:0 0 10px;font-size:15px;color:#2a3f55}
  .mobilePapsInputGrid{display:grid;grid-template-columns:1fr 1fr;gap:8px;margin-bottom:10px}
  .mobilePapsInputGrid.twoByTwo{grid-template-columns:1fr 1fr}
  .mobilePapsInputField{display:flex;flex-direction:column;gap:5px;min-width:0}
  .mobilePapsInputField>span{font-size:11px;font-weight:900;color:#68788a}
  .mobilePapsInputField input{width:100%;height:42px;box-sizing:border-box;border:1px solid #cdd8e5;border-radius:9px;padding:0 10px;text-align:center;font-size:16px;background:#fff}
  .mobilePapsMetricLine{display:grid;grid-template-columns:minmax(0,1fr) auto auto;align-items:center;gap:8px;min-height:36px}
  .mobilePapsMetricLine>strong{font-size:13px;color:#526274;white-space:nowrap}
  .mobilePapsMetricBadge{display:flex;align-items:center;justify-content:flex-end;min-width:0}
  .mobilePapsMetricBadge .papsGrade{display:inline-flex!important;align-items:center!important;margin:0!important;white-space:nowrap!important}
  .mobilePapsMetricLine>b{text-align:right;font-size:16px;color:#1f3348;white-space:nowrap;order:2}
  .mobilePapsMetricBadge{order:3}
  .mobilePapsSingleInput{margin-top:9px}
  .mobilePapsInputField.noLabel input{margin-top:0}
  .mobilePapsNoBadge{color:#9aa7b5}
  .mobilePapsSummaryLine{display:grid;grid-template-columns:1fr 1fr;gap:8px;padding-top:14px}
  .mobilePapsSummaryLine>div{display:flex;align-items:center;justify-content:space-between;gap:8px;background:#f7f9fc;border:1px solid #e0e7f0;border-radius:10px;padding:10px}
  .mobilePapsSummaryLine span:first-child{font-size:12px;font-weight:900;color:#607083}
  .mobilePapsSummaryLine b{font-size:16px;color:#173a61}
  .mobilePapsSummaryLine .overallGradeBadge{margin:0!important}
}


/* v1.14.5 — 모바일 학생명 전체 표시 + PAPS 업로드 카드 위치 정돈 */
@media (max-width:768px){
  .mobileStudentPickerList .studentPickerText{
    min-width:0!important;
    overflow:visible!important;
    text-overflow:clip!important;
    white-space:normal!important;
    word-break:keep-all!important;
    line-height:1.3!important;
  }
  .mobileStudentPickerList .mobileStudentPickerOption{
    grid-template-columns:40px minmax(0,1fr) 28px!important;
    height:auto!important;
    padding-top:10px!important;
    padding-bottom:10px!important;
  }
  #mobilePapsHost .mobilePapsUploadCard{
    width:100%!important;
    box-sizing:border-box!important;
    margin:0 0 12px!important;
  }
  #mobilePapsHost #papsResult{margin:0 0 10px!important;}
}


/* v1.14.6 — iPhone 스크롤 오작동 방지, 학생명 한 줄, PAPS 업로드 카드 복구 */
@media (max-width:768px){
  .mobileStudentPickerList .studentPickerText{
    display:block!important;
    min-width:0!important;
    overflow:hidden!important;
    text-overflow:ellipsis!important;
    white-space:nowrap!important;
    word-break:normal!important;
    line-height:1.35!important;
  }
  .mobileStudentPickerList .studentPickerText b{
    display:block!important;
    white-space:nowrap!important;
  }
  #mobilePapsHost .papsUpload.mobilePapsUploadCard{
    display:block!important;
    visibility:visible!important;
    opacity:1!important;
    position:relative!important;
    width:100%!important;
    max-width:100%!important;
    box-sizing:border-box!important;
    margin:0 0 12px!important;
  }
}


/* =========================================================
   v1.14.7 — 모바일 PAPS 안정화 마이크로 패치
   PC UI/API/데이터 구조에는 영향 없음
   ========================================================= */
@media (max-width:768px){
  /* PAPS 반 전체 명렬/기록표는 학급 로드 여부와 무관하게 모바일에서 항상 숨김 */
  body.mobilePapsView #app .papsPanel #papsTableBox,
  body.mobilePapsView #app .pe87Paps{display:none!important;}

  /* 모바일 전용 PAPS 업로드 카드는 항상 보이도록 고정 */
  #mobilePapsHost #mobilePapsUploadCard{
    display:block!important;visibility:visible!important;opacity:1!important;
    width:100%!important;max-width:100%!important;box-sizing:border-box!important;
    margin:0 0 12px!important;position:relative!important;cursor:pointer!important;
  }

  /* 학생 바텀시트: 번호와 이름을 한 줄 전체 표시 */
  .mobileStudentPickerList .mobileStudentPickerOption{
    display:grid!important;
    grid-template-columns:minmax(0,1fr) 28px!important;
    align-items:center!important;
    width:100%!important;
    min-width:0!important;
  }
  .mobileStudentPickerList .studentPickerIcon{display:none!important;}
  .mobileStudentPickerList .studentPickerText{
    display:block!important;min-width:0!important;width:100%!important;
    overflow:visible!important;text-overflow:clip!important;
    white-space:nowrap!important;word-break:keep-all!important;
    line-height:1.35!important;text-align:left!important;
  }
  .mobileStudentPickerList .studentPickerText b{
    display:block!important;width:100%!important;
    overflow:visible!important;text-overflow:clip!important;
    white-space:nowrap!important;font-size:16px!important;
  }

  /* iPhone 포함 모바일 학생관리 도구행: 한 줄 유지 */
  body:has(#mobileStudentSelector) #app .studentRosterTools{
    display:flex!important;flex-wrap:nowrap!important;align-items:center!important;
    gap:6px!important;width:100%!important;max-width:100%!important;
    overflow-x:auto!important;-webkit-overflow-scrolling:touch!important;
    padding:8px 9px!important;box-sizing:border-box!important;
  }
  body:has(#mobileStudentSelector) #app .studentRosterTools strong{
    flex:0 0 auto!important;white-space:nowrap!important;font-size:12px!important;
  }
  body:has(#mobileStudentSelector) #app .studentRosterTools .btn{
    flex:0 0 auto!important;white-space:nowrap!important;
    min-height:34px!important;padding:6px 8px!important;font-size:11px!important;
  }
  body:has(#mobileStudentSelector) #app .studentRosterTools .hint{display:none!important;}
}

/* v1.14.8 — 모바일 PAPS 업로드 카드 중복 제거
   mobilePapsHost 안의 원하는 카드만 유지하고, 기존 #app 하단의 중복 카드만 숨깁니다. */
@media (max-width:768px){
  body.mobilePapsView #app .papsUpload{
    display:none!important;
  }
}

@media (max-width:768px){.student-detail-card label,.student-detail label{display:block;margin-bottom:12px!important;}.student-detail-card input,.student-detail input,.student-detail select{margin-top:0!important;}}

@media (max-width:768px){.student-detail-card label,.student-detail label{display:block;margin-bottom:12px!important;}}


/* v1.14.10 Galaxy student detail spacing */
@media (max-width: 768px){
  .student-detail label,
  .student-info-card label,
  .student-detail .field-label{
    display:block;
    margin-bottom:12px !important;
  }
  .student-detail .field,
  .student-info-card .field{
    margin-bottom:18px !important;
  }
}


/* v1.14.11 — Android/Galaxy student basic-info field spacing only */
@media (max-width:768px){
  html.pe-android body:has(#mobileStudentSelector) #studentDetail .studentInfoCard{
    padding:14px !important;
    row-gap:15px !important;
  }
  html.pe-android body:has(#mobileStudentSelector) #studentDetail .studentInfoCard > div{
    display:flex !important;
    flex-direction:column !important;
    gap:9px !important;
    min-height:76px !important;
  }
  html.pe-android body:has(#mobileStudentSelector) #studentDetail .studentInfoCard > div > .label{
    display:block !important;
    margin:0 !important;
    line-height:1.35 !important;
  }
  html.pe-android body:has(#mobileStudentSelector) #studentDetail .studentInfoCard > div > input,
  html.pe-android body:has(#mobileStudentSelector) #studentDetail .studentInfoCard > div > .genderSegment{
    margin:0 !important;
    flex:0 0 auto !important;
  }
}


/* v1.14.12 — 모바일 PAPS 위치 경로 상단 이동 + 하단 여백 축소 */
@media (max-width:768px){
  body.mobilePapsView #mobilePapsHost .mobilePapsCrumb{
    display:block!important;
    width:100%!important;
    box-sizing:border-box!important;
    margin:0 0 10px!important;
    color:#7a8795!important;
    font-size:13px!important;
    font-weight:800!important;
    line-height:1.4!important;
  }
  body.mobilePapsView #app > .pe87Crumb{display:none!important;}
  body.mobilePapsView #app{
    min-height:0!important;
    height:auto!important;
    padding-bottom:8px!important;
  }
  body.mobilePapsView #app .papsPanel{
    margin-bottom:0!important;
    padding-bottom:12px!important;
  }
}

/* =========================================================
   v1.14.20 — 모바일 학생 선택 터치 효과 통일
   학생관리의 학생 선택 버튼·바텀시트에만 적용되며 PC와 다른 탭에는 영향 없음.
   ========================================================= */
@media (max-width:768px){
  #mobileStudentSelector .mobileStudentPersonButton,
  #mobileStudentPickerSheet .mobileStudentPickerBackdrop,
  #mobileStudentPickerSheet .mobileStudentPickerClose,
  #mobileStudentPickerSheet .mobileStudentPickerOption{
    -webkit-tap-highlight-color:transparent!important;
    -webkit-touch-callout:none!important;
    touch-action:manipulation!important;
  }
  #mobileStudentSelector .mobileStudentPersonButton,
  #mobileStudentPickerSheet .mobileStudentPickerOption{
    -webkit-user-select:none!important;
    user-select:none!important;
  }
  #mobileStudentSelector .mobileStudentPersonButton:not(:disabled):active{
    background:#fff!important;
    border-color:#bfcddd!important;
    box-shadow:0 1px 2px rgba(15,23,42,.04)!important;
  }
}

/* v1.14.42 mobile PAPS export-only footer and hard desktop-head suppression */
@media (max-width:768px){
  body.mobilePapsView #app .pe87PageHead,
  body.mobilePapsView #app .papsUpload,
  body.mobilePapsView #app .papsPanel{display:none!important;}
  .mobilePapsExportOnly{width:100%;box-sizing:border-box;background:#fff;border:1px solid #dbe4ef;border-radius:14px;padding:12px;margin:0 0 12px;box-shadow:0 4px 14px rgba(31,56,88,.08);}
  .mobilePapsExportOnly .btn{display:block;width:100%;min-height:46px;margin:0;padding:10px 12px;font-size:14px;font-weight:900;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;}
  .mobilePapsExportOnly p{margin:12px 0 0;padding-top:12px;border-top:1px solid #e2e8f0;color:#718096;font-size:12px;line-height:1.55;word-break:keep-all;}
}


/* v1.14.43 mobile PAPS: desktop control DOM fallback + export action stability */
@media (max-width:768px){
  body.mobilePapsView #app > .pe87PageHead,
  body.mobilePapsView #app > .papsUpload,
  body.mobilePapsView #app > .papsPanel,
  body.mobilePapsView #app #bulkMale,
  body.mobilePapsView #app #bulkFemale,
  body.mobilePapsView #app #exportPapsBtn,
  body.mobilePapsView #app #deletePapsBtn,
  body.mobilePapsView #app #savePapsBtn{display:none!important;visibility:hidden!important;pointer-events:none!important;}
  #mobilePapsHost{position:relative!important;z-index:1!important;display:block!important;width:100%!important;max-width:100%!important;}
  #mobilePapsHost[hidden]{display:none!important;}
  #mPapsExport{-webkit-tap-highlight-color:transparent!important;touch-action:manipulation!important;pointer-events:auto!important;}
}

/* v1.14.51 — iPhone Safari 홈 달력 수업 수정 모달 입력 확대 방지
   적용 범위: iPhone 크기 WebKit + 홈 달력 수정 폼만 */
@media (max-width: 430px) {
  @supports (-webkit-touch-callout: none) {
    .calModal .calEditGrid input,
    .calModal .calEditGrid select,
    .calModal .calEditGrid textarea {
      font-size: 16px !important;
      line-height: 1.35 !important;
      -webkit-text-size-adjust: 100% !important;
      text-size-adjust: 100% !important;
    }
  }
}

/* v1.14.52 — PC 종목별 진도표 헤더 및 차시 번호 중앙 정렬 */
.pe87SubjectPlan thead th {
  text-align: center !important;
  vertical-align: middle !important;
}
.pe87SubjectPlan tbody td:nth-child(2),
.pe87SubjectPlan tbody td:nth-child(2) > b {
  text-align: center !important;
  vertical-align: middle !important;
}
.pe87SubjectPlan tbody td:nth-child(2) > b {
  display: block !important;
  width: 100% !important;
}
