/* 학급 명단 허브 — 앱 전용 스타일 (색은 공용 테마 변수) */

.topbar h1{color:var(--ink)}
.eyebrow{color:var(--sage)}
.chip{background:var(--sage-soft);color:var(--ink);border-color:transparent}
.btn.primary{background:linear-gradient(135deg,var(--sage),var(--primary-soft))}
.link{color:var(--primary)}

.privacy-note{background:var(--sage-soft);border:1px solid var(--line);border-radius:12px;
  padding:12px 16px;font-size:13px;color:var(--ink);margin-bottom:20px;line-height:1.7}
.privacy-note a{color:var(--primary);text-decoration:none}
.privacy-note a:hover{text-decoration:underline}

.help{font-size:12px;color:var(--ink-soft);margin:4px 0 10px;line-height:1.6}

/* 학급 탭 */
.class-tabs{display:flex;gap:8px;flex-wrap:wrap}
.class-tab{display:inline-flex;align-items:center;gap:8px;padding:9px 14px;border-radius:10px;cursor:pointer;
  background:var(--paper-2);border:1px solid var(--line);color:var(--ink);font:inherit;font-size:14px}
.class-tab:hover{border-color:var(--primary-soft)}
.class-tab.active{background:var(--sage-soft);border-color:var(--sage);font-weight:700}
.class-tab .cnt{font-size:11px;color:var(--ink-soft);font-family:"Space Grotesk",sans-serif}
.class-tab .edit,.class-tab .del{opacity:.5;font-size:12px;cursor:pointer;padding:0 2px}
.class-tab .edit:hover,.class-tab .del:hover{opacity:1}
.class-empty{color:var(--ink-soft);font-size:13px;padding:6px 2px;display:flex;align-items:center;flex-wrap:wrap;gap:8px}

/* 드롭존 */
.dropzone{border:2px dashed var(--line);border-radius:12px;padding:34px 16px;text-align:center;
  color:var(--ink-soft);font-size:13px;line-height:1.7;cursor:pointer;transition:all .15s;background:var(--paper-2)}
.dropzone:hover,.dropzone.over{border-color:var(--sage);color:var(--ink);background:var(--sage-soft)}

/* 열 매핑 */
.map-wrap{margin-top:22px;border-top:1px solid var(--line-soft);padding-top:18px}
.map-row{display:grid;grid-template-columns:repeat(4,1fr);gap:12px;margin:10px 0 14px}
@media(max-width:720px){.map-row{grid-template-columns:1fr 1fr}}
.preview-box{max-height:220px;overflow:auto;border:1px solid var(--line);border-radius:10px;margin-bottom:14px}
.preview-box table{border-collapse:collapse;width:100%;font-size:12px}
.preview-box th,.preview-box td{border-bottom:1px solid var(--line-soft);padding:6px 10px;text-align:left;white-space:nowrap}
.preview-box th{position:sticky;top:0;background:var(--paper-2);color:var(--ink-soft);font-weight:700;font-size:11px}

/* 명단 테이블 */
.table-box{overflow-x:auto}
.roster-table{border-collapse:collapse;width:100%;font-size:14px}
.roster-table th{font-size:11px;color:var(--ink-soft);text-align:left;font-weight:500;letter-spacing:.06em;
  border-bottom:1px solid var(--line);padding:8px 10px}
.roster-table td{border-bottom:1px solid var(--line-soft);padding:4px 6px}
.roster-table input,.roster-table select{background:transparent;border:1px solid transparent;padding:7px 8px;width:100%;min-width:60px}
.roster-table input:hover,.roster-table select:hover{border-color:var(--line)}
.roster-table input:focus,.roster-table select:focus{border-color:var(--primary);background:var(--paper-2)}
.c-no{width:64px}.roster-table .c-no input{text-align:center}
.c-g{width:86px}
.c-x{width:40px}
.row-del{background:none;border:none;color:var(--ink-soft);cursor:pointer;font-size:14px;padding:6px}
.row-del:hover{color:var(--rose)}

.row-btns{display:flex;gap:10px;align-items:center;margin-top:12px;flex-wrap:wrap}
.row-inline{display:flex;gap:8px;flex-wrap:wrap;margin:8px 0}
.row-inline input{flex:1;min-width:200px}
.reg-box{margin:10px 0}
.reg-box summary{font-size:12.5px;color:var(--ink-soft);cursor:pointer}
.link.danger{color:var(--rose);background:none;border:none;font:inherit;font-size:13px;cursor:pointer}
.saved-note{font-size:12px;color:var(--sage);opacity:0;transition:opacity .3s}
.saved-note.show{opacity:1}

/* 토스트 */
.toast{position:fixed;left:50%;bottom:30px;transform:translateX(-50%);background:var(--ink);
  border:1px solid var(--line);color:var(--paper);padding:12px 20px;border-radius:12px;font-size:14px;
  z-index:99;opacity:0;transition:opacity .2s;pointer-events:none}
.toast.show{opacity:1}
