.tabs { flex-wrap: wrap; }
.tab[data-tab="academy"] { min-height: 44px; }

.academy-admin { width: 100%; min-width: 0; }
.academy-admin * { box-sizing: border-box; }
.academy-admin h2 { font-size: 24px; margin: 0; }
.academy-admin h3 { font-size: 16px; margin: 0 0 16px; color: var(--accent, #ffd700); }
.academy-admin h4 { font-size: 14px; margin: 0 0 6px; }
.academy-admin h5 { font-size: 14px; margin: 0 0 6px; }
.academy-admin p { line-height: 1.6; margin: 0 0 12px; overflow-wrap: anywhere; }

.academy-admin .academy-heading { display: flex; align-items: flex-start; justify-content: space-between; gap: 16px; margin-bottom: 12px; }
.academy-admin .academy-heading .btn { flex: none; }
.academy-admin .academy-notice { color: var(--text2, #b0b0b0); font-size: 13px; }
.academy-admin .academy-status { min-height: 22px; margin: 0 0 16px; color: var(--text2, #b0b0b0); font-size: 13px; }
.academy-admin .academy-status:focus { outline: none; }
.academy-admin .academy-overview { display: flex; flex-wrap: wrap; gap: 8px 24px; margin-bottom: 16px; padding: 12px 16px; background: var(--bg2, #111); border: 1px solid var(--border, #2a2a2a); border-radius: 10px; }
.academy-admin .academy-overview-item { display: inline-flex; align-items: baseline; gap: 7px; min-width: 0; }
.academy-admin .academy-overview-label { color: var(--text2, #b0b0b0); font-size: 12px; }
.academy-admin .academy-overview-value { color: var(--text, #e8e8e8); font-size: 15px; font-weight: 700; font-variant-numeric: tabular-nums; }
.academy-admin .academy-count { display: inline-flex; align-items: center; min-height: 28px; padding: 4px 9px; border: 1px solid var(--border, #2a2a2a); border-radius: 999px; color: var(--text, #e8e8e8); font-size: 12px; font-weight: 700; font-variant-numeric: tabular-nums; white-space: nowrap; }
.academy-admin .academy-student-sort { display: flex; flex-wrap: wrap; align-items: center; gap: 8px; margin: -4px 0 8px; padding-bottom: 12px; border-bottom: 1px solid var(--border, #2a2a2a); }
.academy-admin .academy-student-sort-label { margin-right: 4px; color: var(--text2, #b0b0b0); font-size: 12px; font-weight: 600; }
.academy-admin .academy-sort-button[aria-pressed="true"] { border-color: var(--accent, #ffd700); color: var(--accent, #ffd700); }

.academy-admin .academy-card { background: var(--bg2, #111); border: 1px solid var(--border, #2a2a2a); border-radius: 12px; padding: 20px; margin-bottom: 16px; }
.academy-admin .academy-management-card > .academy-notice { margin-top: -8px; }
.academy-admin .academy-roster-add { margin-top: 20px; }
.academy-admin .academy-roster-add .academy-fields { display: grid; grid-template-columns: minmax(120px, .7fr) minmax(140px, .9fr) minmax(220px, 1.25fr) minmax(150px, .8fr); align-items: end; }
.academy-admin .academy-roster-add .academy-fields label:last-child { grid-column: 1 / -1; }
.academy-admin .academy-roster-management { margin-top: 24px; padding-top: 24px; border-top: 1px solid var(--border, #2a2a2a); }
.academy-admin .academy-roster-management > .academy-disclosure { margin-top: 16px; }
.academy-admin .academy-roster-controls { display: flex; flex: none; align-items: flex-end; gap: 8px; }
.academy-admin .academy-roster-filter { flex: 0 1 220px; min-width: 180px; }
.academy-admin .academy-roster-filter select { min-height: 44px; }
.academy-admin .academy-roster-row { display: flex; align-items: flex-start; justify-content: space-between; gap: 16px; }
.academy-admin .academy-roster-identity { min-width: 0; }
.academy-admin .academy-roster-identity p { margin-bottom: 0; }
.academy-admin .academy-roster-actions { display: flex; flex: none; gap: 8px; }
.academy-admin .academy-roster-actions .btn { min-width: 68px; min-height: 44px; }
.academy-admin .academy-roster-readonly { align-self: center; color: var(--text2, #b0b0b0); font-size: 12px; white-space: nowrap; }
.academy-admin .academy-roster-panel { margin-top: 12px; padding: 14px; border: 1px solid var(--border, #2a2a2a); border-radius: 10px; background: var(--bg3, #1a1a1a); }
.academy-admin .academy-roster-panel[hidden] { display: none; }
.academy-admin .academy-roster-panel .academy-fields { margin-top: 0; }
.academy-admin .academy-card > .academy-record:first-of-type { border-top: 0; }
.academy-admin .academy-management-group + .academy-management-group { margin-top: 24px; padding-top: 24px; border-top: 1px solid var(--border, #2a2a2a); }
.academy-admin .academy-management-group > h4 { font-size: 15px; margin-bottom: 6px; }
.academy-admin .academy-section-heading { display: flex; align-items: flex-start; justify-content: space-between; gap: 16px; margin-bottom: 12px; }
.academy-admin .academy-section-heading h4 { font-size: 15px; margin: 0 0 4px; }
.academy-admin .academy-section-heading p { margin-bottom: 0; }
.academy-admin .academy-cohort-list { display: grid; grid-template-columns: repeat(auto-fit, minmax(min(100%, 280px), 1fr)); gap: 10px; margin-top: 12px; }
.academy-admin .academy-cohort-card { min-width: 0; padding: 14px; background: var(--bg3, #1a1a1a); border: 1px solid var(--border, #2a2a2a); border-radius: 10px; }
.academy-admin .academy-record-heading { display: flex; align-items: center; justify-content: space-between; gap: 12px; }
.academy-admin .academy-record-heading h5 { min-width: 0; margin: 0; }
.academy-admin .academy-state { display: inline-flex; align-items: center; min-height: 24px; padding: 3px 8px; border: 1px solid var(--border, #2a2a2a); border-radius: 999px; color: var(--text2, #b0b0b0); font-size: 12px; font-weight: 700; white-space: nowrap; }
.academy-admin .academy-state-open { border-color: #5b8d70; color: #a9e2be; background: rgba(72, 125, 91, .18); }
.academy-admin .academy-state-closed { background: rgba(255, 255, 255, .035); }
.academy-admin .academy-cohort-meta { display: grid; grid-template-columns: minmax(0, 1fr); gap: 10px 18px; margin: 12px 0 0; }
.academy-admin .academy-meta-item { min-width: 0; }
.academy-admin .academy-meta-item dt { margin-bottom: 3px; color: var(--text2, #b0b0b0); font-size: 12px; }
.academy-admin .academy-meta-item dd { margin: 0; color: var(--text, #e8e8e8); font-size: 13px; font-variant-numeric: tabular-nums; overflow-wrap: anywhere; }
.academy-admin .academy-roster-state { display: flex; flex-wrap: wrap; align-items: center; gap: 8px; margin-top: 8px; color: var(--text2, #b0b0b0); font-size: 12px; }
.academy-admin .academy-empty-state { display: flex; align-items: center; justify-content: space-between; gap: 16px; padding: 16px; border: 1px dashed var(--border, #2a2a2a); border-radius: 10px; background: rgba(255, 255, 255, .02); }
.academy-admin .academy-empty-state strong { display: block; margin-bottom: 4px; color: var(--text, #e8e8e8); font-size: 14px; }
.academy-admin .academy-empty-state p { margin: 0; }
.academy-admin .academy-empty-state .btn { flex: none; }
.academy-admin .academy-empty-copy { margin: 0; padding: 14px; border: 1px dashed var(--border, #2a2a2a); border-radius: 10px; color: var(--text2, #b0b0b0); font-size: 13px; }
.academy-admin .academy-record { padding: 16px 0; border-top: 1px solid var(--border, #2a2a2a); }
.academy-admin .academy-record:last-child { padding-bottom: 0; }
.academy-admin .academy-record p { color: var(--text2, #b0b0b0); font-size: 13px; }
.academy-admin .academy-disclosure { margin-top: 8px; border-top: 1px solid var(--border, #2a2a2a); }
.academy-admin .academy-disclosure summary { display: flex; align-items: center; justify-content: space-between; gap: 12px; min-height: 44px; padding: 8px 28px 8px 0; position: relative; cursor: pointer; color: var(--text2, #b0b0b0); font-size: 13px; font-weight: 600; list-style: none; }
.academy-admin .academy-disclosure summary::-webkit-details-marker { display: none; }
.academy-admin .academy-disclosure summary::after { content: ''; position: absolute; right: 4px; width: 7px; height: 7px; border-right: 2px solid currentColor; border-bottom: 2px solid currentColor; transform: rotate(45deg) translateY(-2px); transition: transform 160ms ease-out; }
.academy-admin .academy-disclosure[open] summary::after { transform: rotate(225deg) translate(-2px, -2px); }
.academy-admin .academy-disclosure summary:hover { color: var(--accent, #ffd700); }
.academy-admin .academy-disclosure summary:active { opacity: .78; }
.academy-admin .academy-disclosure summary:focus-visible { outline: 2px solid var(--accent, #ffd700); outline-offset: 2px; }
.academy-admin .academy-disclosure-title { color: var(--text, #e8e8e8); }
.academy-admin .academy-disclosure-meta { color: var(--text2, #b0b0b0); font-weight: 400; }
.academy-admin .academy-disclosure-body { padding: 4px 0 12px; }
.academy-admin .academy-actions { display: flex; flex-wrap: wrap; gap: 8px; }
.academy-admin .academy-fields { display: flex; flex-wrap: wrap; gap: 12px; margin: 12px 0; align-items: end; }
.academy-admin label { display: flex; flex: 1 1 200px; flex-direction: column; gap: 4px; color: var(--text2, #b0b0b0); font-size: 12px; }
.academy-admin input, .academy-admin select { width: 100%; min-height: 40px; padding: 10px 14px; border: 1px solid var(--border, #2a2a2a); border-radius: 8px; outline: none; background: var(--bg3, #1a1a1a); color: var(--text, #e8e8e8); font: inherit; font-size: 14px; }
.academy-admin input:focus, .academy-admin select:focus { border-color: var(--accent, #ffd700); }
.academy-admin .btn { min-height: 40px; }
.academy-admin button:disabled, .academy-admin input:disabled, .academy-admin select:disabled { opacity: .5; cursor: default; }
.academy-admin :is(button, input, select):focus-visible { outline: 2px solid var(--accent, #ffd700); outline-offset: 2px; }
.academy-admin [role="alert"] { color: #ff8da1; }
.academy-admin .academy-pagination { display: flex; gap: 8px; margin: 4px 0 12px; }
.academy-admin .academy-history-list { margin: 0 0 8px; padding-left: 20px; }
.academy-admin .academy-history-list li { margin: 8px 0; color: var(--text2, #b0b0b0); font-size: 13px; line-height: 1.55; overflow-wrap: anywhere; }

/* ★수강생·가입 신청은 다른 탭들과 같은 **표**다 — 한 사람 = 한 줄 (사용자 2026-09-14).
   앞 네 칸의 순서는 어느 표에서나 같다: 이메일 · 성함 · 끝 4자리 · 기수. */
.academy-admin .academy-table { width: 100%; border-collapse: collapse; }
.academy-admin .academy-table td { vertical-align: middle; }
.academy-admin .academy-table th,
.academy-admin .academy-table td { white-space: nowrap; }
.academy-admin .academy-cell-id { font-weight: 600; color: var(--text, #e8e8e8); }
.academy-admin .academy-cell-four { font-variant-numeric: tabular-nums; }
.academy-admin .academy-cell-cohort { color: var(--text2, #b0b0b0); font-size: 13px; }
.academy-admin .academy-table .actions { display: flex; gap: 6px; align-items: center; white-space: nowrap; }
/* 칸 안의 입력은 제 몫만 차지한다 — 기본값 width:100% 면 칸이 끝없이 넓어진다. */
/* 칸 안의 입력은 **정해진 폭**을 쓴다. width:auto 로 두면 <select> 는 가장 긴 보기
   (「유유스 1기 · 홍길동 · hong@gmail.com」)에, <input> 은 안내 문구 길이에 맞춰 커져
   표가 1711px 이 됐다 — 보이는 폭 1189px 를 522px 넘겨 관리 칸이 잘렸다 (2026-09-14). */
.academy-admin .academy-table select,
.academy-admin .academy-table input[type="text"] { width: 130px; min-width: 0; max-width: 130px; padding: 8px 10px; }
/* 칸이 아홉이라 좌우 여백 3px 씩만 줄여도 27px 이 돌아온다. */
.academy-admin .academy-table th,
.academy-admin .academy-table td { padding-left: 9px; padding-right: 9px; }
.academy-admin .academy-table .academy-notice { max-width: 200px; margin: 4px 0 0; font-size: 12px; white-space: normal; }
/* 접기를 칸 안에 넣으면 기본 여백·테두리·44px 높이가 줄을 하나 더 만든다. */
.academy-admin .academy-table .academy-disclosure { margin-top: 0; border-top: 0; }
.academy-admin .academy-table .academy-disclosure summary { min-height: 0; padding: 2px 22px 2px 0; }
.academy-admin .badge-suspended { background: rgba(255, 152, 0, .15); color: #ff9800; }

/* ★준비 단계 두 카드는 늘 같이 본다 — 기수를 만들고 그 기수에 명단을 넣는다.
   명단 쪽이 넓어야 하므로 1 : 1.45 로 준다 (사용자 2026-09-14). */
.academy-admin .academy-setup { display: grid; grid-template-columns: minmax(0, 1fr) minmax(0, 1.45fr); gap: 16px; align-items: start; }
.academy-admin .academy-setup > .academy-card { margin-bottom: 0; }
.academy-admin .academy-add-actions { display: flex; flex-wrap: wrap; align-items: center; gap: 8px; margin-top: 4px; }
.academy-admin .academy-file-input { display: none; }
.academy-admin .academy-add-stop { color: #ff8da1; font-weight: 600; }
.academy-admin .academy-bulk-note { margin: 8px 0 0; color: var(--text2, #b0b0b0); font-size: 12.5px; }

@media (max-width: 1180px) {
  .academy-admin .academy-setup { grid-template-columns: minmax(0, 1fr); }
  .academy-admin .academy-setup > .academy-card { margin-bottom: 16px; }
}

/* ★명단은 길어져도 **아래로 늘어나지 않는다** — 표 안에서 세로로 구른다 (사용자 2026-09-14).
   100명이면 예전 카드 방식으로 300줄이었다. 머리글은 붙여 두어 굴러도 무슨 칸인지 안다. */
.academy-admin .academy-roster-scroll { max-height: 420px; overflow-y: auto; overscroll-behavior: contain; }
.academy-admin .academy-roster-table { min-width: 0; }
.academy-admin .academy-roster-table thead th { position: sticky; top: 0; z-index: 1; background: var(--bg2, #111); }
.academy-admin .academy-roster-table .academy-roster-actions { display: flex; gap: 6px; white-space: nowrap; }
.academy-admin .academy-roster-table .academy-roster-actions .btn { min-width: 0; min-height: 0; padding: 5px 10px; }
/* 수정·취소 입력 칸은 접혀 있을 때 줄을 만들지 않는다. */
.academy-admin .academy-roster-panel-row > td { padding: 0; border-bottom: 0; }
.academy-admin .academy-roster-table .academy-roster-panel { margin: 0 0 12px; }
.academy-admin .academy-roster-filter input { min-height: 36px; }

/* 고른 기수는 눈에 보여야 한다 — 오른쪽 명단이 그 기수만 보이고 있다는 뜻이다. */
.academy-admin .academy-cohort-card > .btn { width: 100%; margin-top: 10px; justify-content: center; }
.academy-admin .academy-cohort-picked { border-color: var(--accent, #ffd700); background: rgba(255, 215, 0, .05); }

@media (max-width: 720px) {
  .academy-admin .academy-heading { align-items: stretch; flex-direction: column; }
  .academy-admin .academy-heading .btn { width: fit-content; min-height: 44px; }
  .academy-admin .academy-overview { gap: 8px 18px; padding: 12px 14px; }
  .academy-admin .academy-student-sort-label { flex-basis: 100%; }
  .academy-admin .academy-fields { display: grid; grid-template-columns: 1fr; }
  .academy-admin .academy-roster-add .academy-fields { grid-template-columns: 1fr; }
  .academy-admin .academy-roster-add .academy-fields label:last-child { grid-column: auto; }
  .academy-admin label { min-width: 0; }
  .academy-admin input, .academy-admin select { font-size: 16px; }
  .academy-admin .academy-card { padding: 16px; }
  .academy-admin .academy-roster-management > .academy-section-heading { align-items: stretch; flex-direction: column; }
  .academy-admin .academy-roster-controls { align-items: stretch; }
  .academy-admin .academy-roster-filter { flex: 1 1 auto; min-width: 0; }
  .academy-admin .academy-roster-row { flex-direction: column; }
  .academy-admin .academy-roster-actions { display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); width: 100%; }
  .academy-admin .academy-roster-actions .btn { width: 100%; }
  .academy-admin .academy-roster-panel { padding: 12px; }
  .academy-admin .academy-record-heading { align-items: flex-start; flex-direction: column; gap: 8px; }
  .academy-admin .academy-cohort-meta { grid-template-columns: 1fr; }
  .academy-admin .academy-empty-state { align-items: stretch; flex-direction: column; }
  .academy-admin .academy-empty-state .btn { width: 100%; justify-content: center; }
  .academy-admin .btn { min-height: 44px; }
  .academy-admin .academy-actions { display: grid; grid-template-columns: 1fr; }
  .academy-admin .academy-record .btn { width: 100%; justify-content: center; }
}

@media (prefers-reduced-motion: reduce) {
  .academy-admin *, .academy-admin *::before, .academy-admin *::after { scroll-behavior: auto !important; transition-duration: .01ms !important; }
}
