/*
  전달본 이후에 정해진 디자인 변경만 모읍니다 — 반드시 **맨 뒤**에 실립니다.

  왜 별도 파일인가
  ----------------
  전달본 CSS(tokens~appendix 13개)는 확정 디자인 원본과 같아야 합니다(AGENTS 규칙).
  그래서 그 파일들은 건드리지 않고, 이후에 바뀐 것만 여기 모아 마지막에 덮습니다.
  ua-headings.css 가 맨 앞에서 브라우저 기본값을 되살리는 것과 짝입니다.

  규칙
  ----
  · 전달본과 **같은 선택자**를 쓰고, 순서(맨 뒤)로 이깁니다. 명시도를 억지로
    올리지 않습니다 — 올려두면 나중에 전달본이 갱신돼도 이 파일이 계속 이깁니다.
  · 항목마다 "누가 언제 왜" 를 적습니다. 근거가 없으면 지울 수 없게 됩니다.
*/

/* 합격후기 목록 — 카드 호버 배경 제거 (2026-08-07, 디자인 요청)
   전달본 review.css 는 .review-row:hover 에서 배경을 --surface-sunken 으로
   바꿉니다. 카드가 링크가 아니라 눌리는 느낌만 주고 실제로는 아무 일도
   일어나지 않아 빼기로 했습니다. 기본 배경(--surface)으로 되돌립니다. */
.review-row:hover { background: var(--surface) }

/* ==========================================================================
   체크박스 통일 (2026-08-07, 디자인 요청)
   Figma checkbox — https://figma.com/design/jIRU9Nf4klrKpzgtdhW3br?node-id=882-2236
     882:2233 기본 · 882:2230 선택 — 24x24 · radius 4 · 1px 테두리 · 16px 체크

   전달본은 자리마다 모양이 갈려 있었습니다.
     input[type=checkbox]      20px · 1px --line   (로그인·가입·약관)
     .select-toggle__box       15px · 테두리 없음  (수강신청 과목 선택)
     .filter-item::before      16px · 1.5px        (수강신청 사이드바)
     .fsheet__item::before     18px · 1.5px        (수강신청 필터 시트)

   모양(테두리 1px · radius 4 · 가운데 체크)은 시안을 따르되 두 가지는
   사이트에 맞춰 조정했습니다.

     크기  시안 24px → 18px (체크 12px). 14px 본문 옆에 놓이는 자리가
           대부분이고 사이드바 필터처럼 촘촘한 목록도 있어 줄였습니다.
           체크 아이콘은 시안 비율(2/3)을 그대로 유지합니다.
     색    시안의 raw hex(#D9D9D9 / #007BFF) 대신 사이트 토큰(--line / --blue).
           팔레트 일관성을 위한 것으로, 전달본이 이미 내린 판단과 같은
           방향입니다(account.css 주석 참고).
   ========================================================================== */
:root {
  /* 체크 아이콘 — account.css 가 쓰던 것과 같은 SVG 입니다 */
  --cb-check-off: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' viewBox='0 0 16 16'%3E%3Cpath d='M10.9706 4.97C11.1115 4.83589 11.299 4.76175 11.4935 4.76322C11.688 4.76469 11.8743 4.84166 12.0131 4.97789C12.1519 5.11412 12.2324 5.29895 12.2375 5.49338C12.2427 5.68781 12.1721 5.87663 12.0406 6.02L8.05065 11.01C7.98204 11.0839 7.89923 11.1432 7.80718 11.1844C7.71513 11.2255 7.61572 11.2477 7.5149 11.2496C7.41408 11.2514 7.31392 11.233 7.2204 11.1952C7.12689 11.1575 7.04194 11.1013 6.97065 11.03L4.32465 8.384C4.25096 8.31534 4.19186 8.23254 4.15086 8.14054C4.10987 8.04854 4.08783 7.94923 4.08605 7.84852C4.08428 7.74782 4.1028 7.64779 4.14052 7.5544C4.17824 7.46102 4.23439 7.37618 4.30561 7.30496C4.37683 7.23374 4.46166 7.1776 4.55505 7.13988C4.64844 7.10216 4.74847 7.08363 4.84917 7.08541C4.94987 7.08719 5.04918 7.10923 5.14118 7.15022C5.23318 7.19121 5.31598 7.25031 5.38465 7.324L7.47865 9.417L10.9516 4.992L10.9706 4.97Z' fill='%23D9D9D9'/%3E%3C/svg%3E");
  --cb-check-on: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' viewBox='0 0 16 16'%3E%3Cpath d='M10.9706 4.97C11.1115 4.83589 11.299 4.76175 11.4935 4.76322C11.688 4.76469 11.8743 4.84166 12.0131 4.97789C12.1519 5.11412 12.2324 5.29895 12.2375 5.49338C12.2427 5.68781 12.1721 5.87663 12.0406 6.02L8.05065 11.01C7.98204 11.0839 7.89923 11.1432 7.80718 11.1844C7.71513 11.2255 7.61572 11.2477 7.5149 11.2496C7.41408 11.2514 7.31392 11.233 7.2204 11.1952C7.12689 11.1575 7.04194 11.1013 6.97065 11.03L4.32465 8.384C4.25096 8.31534 4.19186 8.23254 4.15086 8.14054C4.10987 8.04854 4.08783 7.94923 4.08605 7.84852C4.08428 7.74782 4.1028 7.64779 4.14052 7.5544C4.17824 7.46102 4.23439 7.37618 4.30561 7.30496C4.37683 7.23374 4.46166 7.1776 4.55505 7.13988C4.64844 7.10216 4.74847 7.08363 4.84917 7.08541C4.94987 7.08719 5.04918 7.10923 5.14118 7.15022C5.23318 7.19121 5.31598 7.25031 5.38465 7.324L7.47865 9.417L10.9516 4.992L10.9706 4.97Z' fill='%23fff'/%3E%3C/svg%3E");
}

/* --- 기본(미선택) --- */
input[type="checkbox"],
.select-toggle__box,
.filter-item::before,
.fsheet__item::before {
  width: 18px; height: 18px;
  border: 1px solid var(--line); border-radius: var(--r-sm);
  background: var(--surface) var(--cb-check-off) center / 12px no-repeat;
  transition: background-color .15s, border-color .15s;
}

/* --- 선택 ---
   여기서도 background 단축 속성을 씁니다. 전달본의 선택 규칙들이 단축 속성
   (예: .select-toggle[aria-pressed="true"] .select-toggle__box{ background:… })
   이라 size·position 을 초기값으로 되돌립니다. 색과 이미지만 덮으면 그 초기값이
   남아 체크가 좌상단(0% 0%)에 원본 크기로 찍힙니다. */
input[type="checkbox"]:checked,
.select-toggle[aria-pressed="true"] .select-toggle__box,
.filter-item[aria-pressed="true"]::before,
.fsheet__item[aria-pressed="true"]::before {
  border-color: var(--line);
  background: var(--blue) var(--cb-check-on) center / 12px no-repeat;
}

/* 전달본이 ::after 로 찍던 ✓ 는 이제 배경 아이콘이 대신합니다 */
.select-toggle[aria-pressed="true"] .select-toggle__box::after { content: none }

/* 호버해도 체크박스는 그대로 (2026-08-07, 디자인 요청)
   전달본은 수강신청 사이드바 필터에서만 마우스를 올리면 테두리가 진해집니다
   (.filter-item:hover::before{ border-color:var(--faint) }).
   체크박스는 어디서나 같아 보이도록 기본 테두리색을 유지합니다.
   행 배경이 밝아지는 것(.filter-item:hover)은 목록 항목의 신호라 남겨둡니다. */
.filter-item:hover::before { border-color: var(--line) }

/* 로그인 '아이디 저장' 줄 (2026-08-07, 디자인 요청)
   전달본 .agree 는 회색 박스(--surface-sunken)에 여러 줄 약관을 담는 자리라
   align-items:flex-start + input margin-top:3px 로 되어 있습니다. 한 줄짜리
   '아이디 저장'에는 박스가 과하고, 그 두 값 때문에 체크박스가 글자보다
   1px 내려가 보입니다. 이 줄에만 붙는 agree--plain 으로 떼어냅니다.
   (회원가입 전체동의·고객센터 개인정보 동의는 회색 박스를 그대로 씁니다) */
.agree--plain {
  background: none; padding: 0;
  align-items: center;
}
.agree--plain input { margin-top: 0 }

/* 수강신청 목록 — 강의 정보표를 아래·왼쪽으로 2px 들입니다 (2026-08-10, 디자인 요청)
   전달본은 이 표가 위 제목 블록과 왼쪽 선이 정확히 같고(실측 592.5px 동일),
   마지막 줄 '주무부처'의 아랫선도 왼쪽 썸네일 아랫선과 정확히 같습니다(실측 0px).
   양쪽 다 딱 맞으면 표가 사진·제목보다 조금 흘러 보여, 살짝 안쪽으로 들여
   균형을 맞춥니다.
   박스는 grid-area 와 height:100% 로 자리가 고정돼 있어 글자 줄만 움직이고
   표 자체의 정렬은 그대로입니다. */
.course-row .spec-table { padding-bottom: 2px; padding-left: 2px }

/* 본문이 짧아도 푸터가 화면에 보이지 않게 (2026-08-11, 디자인 요청)
   전달본은 body{min-height:100vh} + main{flex:1 0 auto} 로 스티키 푸터를 만듭니다.
   그래서 본문이 짧으면 푸터가 화면 **바닥에 붙어** 보입니다(= 화면 안에 들어옵니다).
   내용이 몇 줄뿐인 화면에서는 푸터가 본문처럼 커 보여, 아예 한 화면 아래로
   내리기로 했습니다.

   본문 최소 높이를 '화면 높이 - 헤더' 로 두면 본문 끝이 정확히 화면 끝에
   떨어지고 푸터는 그 아래에서 시작합니다 — 스크롤해야 보입니다.
   --header-h 는 전달본이 폭에 따라 64/56px 로 바꿔 주므로 그대로 씁니다.
   내용이 이미 긴 화면에는 아무 영향이 없습니다. */
main { min-height: calc(100vh - var(--header-h)) }

/* 기출문제 풀이 — 정보 칸을 항목 수에 맞춥니다 (2026-08-10, 디자인 요청)
   전달본 .exam-info 는 4칸 고정(repeat(4,1fr))입니다. 수료시험은 시험명·응시기간·
   문항수·시험시간 넷이라 딱 맞는데, 기출문제 풀이는 과정·문항수·유형 셋이라
   네 번째 칸이 빈 채로 남아 오른쪽이 휑했습니다.
   세 번째 칸이 마지막이면 3칸으로 나눠 양옆을 맞춥니다.
   좁은 화면(≤980px)의 2칸 규칙은 전달본 것을 그대로 둡니다. */
@media (min-width: 981px) {
  .exam-info:has(> div:nth-child(3):last-child) { grid-template-columns: repeat(3, 1fr) }
}

/* 시험성적 — 미응시는 회색 (2026-08-10, 디자인 요청)
   전달본은 합격(초록)·불합격(.is-fail 빨강) 둘로만 나눕니다. 미응시는 나쁜
   결과가 아니라 아직 아무것도 하지 않은 상태라 빨강으로 겁줄 이유가 없습니다.
   합격/불합격과 같은 짜임(연한 배경 + 진한 글자)으로 무채색 한 쌍을 씁니다. */
.result-summary__badge.is-none { background: var(--surface-alt); color: var(--muted) }
.result-msg.is-none { background: var(--surface-alt) }
.result-msg.is-none p { color: var(--muted) }

/* 본문과 푸터 사이 여백이 사라진 것 (2026-08-10)
   전달본 base.css 는 `main > .container:last-child{ padding-bottom:var(--s-10) }`
   로 본문 끝과 푸터 사이에 48px 을 둡니다. 수강신청은 React 로 옮기며 컨테이너
   뒤에 필터 시트·장바구니 바·플로팅 버튼이 같은 main 안으로 들어가면서
   :last-child 가 깨져 간격이 0 이 됐습니다(원본 실측 48px → LMS 0px).
   그 뒤 요소들은 sticky·fixed 라 흐름에서 자리를 차지하지 않아 화면상으로는
   여전히 컨테이너가 마지막입니다. 전달본과 같은 값을 그대로 줍니다.
   (공지·합격후기·나의 강의실처럼 컨테이너로 끝나는 화면은 원래대로 걸립니다.
    취득 절차·고객센터처럼 풀블리드 띠로 끝나는 화면은 전달본이 일부러
    제외한 것이라 그대로 둡니다.) */
main > .container:has(~ .cart-bar) { padding-bottom: var(--s-10) }

/* 수강신청 사이드바 — 조건 묶음 접기 + 스크롤 고정 (2026-08-10, 디자인 요청)

   접기: 제목(.filter-group__title)을 버튼으로 바꿔 눌러 여닫습니다. 화살표는
   전달본 공통 셰브론(.panel-toggle .chev)을 그대로 써서 FAQ·푸터와 같은
   모양·회전을 씁니다. 제목의 글꼴·색은 전달본 값을 그대로 두고 배치만 폅니다.

   고정: 사이드바가 본문보다 짧아도 목록이 길어 한참 스크롤해야 했습니다.
   조건이 다 펼쳐지면 사이드바가 화면보다 길어지므로(실측 1027px > 900px)
   max-height 로 묶고 안쪽에서 스크롤되게 합니다. 그러지 않으면 아랫부분을
   영영 볼 수 없습니다. 980px 이하에서는 전달본이 사이드바를 감추고
   바텀시트를 쓰므로 이 규칙은 그때 의미가 없습니다. */
#course-filters {
  position: sticky;
  top: calc(var(--header-h) + var(--s-4));

  /* 높이 기준 (2026-08-11 수정)
     헤더에 붙었을 때(top 74px)를 기준으로 잡았더니, 페이지 맨 위에서는
     사이드바가 아직 제자리(208px)에 있어 아래가 화면 밖으로 124px 나갔습니다.
     그 상태로 안쪽을 스크롤하면 마지막 '연령'이 화면 밖에서 잘려 보였습니다.

     그래서 붙기 전 자리를 기준으로 잡습니다 — 208px 은 헤더(64) + 경로(47) +
     제목 블록(97) 로, 화면 높이가 달라져도 그대로인 값입니다(실측).
     붙었을 때는 아래에 여유가 조금 남지만, 어느 위치에서도 잘리지 않습니다. */
  --filters-offset: 208px;
  max-height: calc(100vh - var(--filters-offset) - var(--s-7));

  overflow-y: auto;
  overscroll-behavior: contain;
  /* 스크롤바를 감춥니다 — 조건을 접고 펴면 스크롤바가 생겼다 사라지며
     사이드바 가로폭이 그때마다 달라졌습니다.
     전달본도 같은 방식을 씁니다(.dtabs__in · .dwho — appendix.css) */
  scrollbar-width: none;

  /* 아래가 뚝 잘려 보이던 것 (2026-08-11, 디자인 요청)
     스크롤바를 감춰 둬서 더 있다는 표시가 없는데 카드가 컨테이너 끝에서
     그대로 잘렸습니다. 아래쪽을 흐리게 해 "더 있다"를 알립니다.

     흐려지는 24px 만큼 아래 여백을 함께 둡니다 — 끝까지 내리면 그 자리에
     빈 여백만 남아 마지막 항목이 흐려지지 않습니다.
     스크롤이 없을 때도 그 자리는 빈 여백이라 티가 나지 않습니다. */
  padding-bottom: 24px;
  -webkit-mask-image: linear-gradient(to bottom, #000 calc(100% - 24px), transparent);
  mask-image: linear-gradient(to bottom, #000 calc(100% - 24px), transparent);
}
#course-filters::-webkit-scrollbar { display: none }

.filter-group__title {
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: var(--s-3);
  width: 100%;
  text-align: left;
  /* 아래 항목과 좌우를 맞춥니다 — .filter-item 이 좌우 10px 을 갖고 있어
     제목만 그만큼 밖으로 나가 있었습니다(글자 시작 64.5 vs 체크박스 74.5,
     화살표 끝 250.5 vs 개수 끝 240.5). 같은 값을 줘서 선을 맞춥니다. */
  padding: 0 10px;

  /* 글자도 주변과 맞춥니다 (2026-08-11, 디자인 요청)
     전달본은 12px(--fs-xs)인데 바로 아래 항목(.filter-item)·정렬 버튼
     (.sort-group button)·결과 문구(.toolbar__result)·마이페이지 사이드 메뉴
     (.side-nav__item)가 모두 14px(--fs-sm) 입니다. 제목만 작아 겉돌았습니다. */
  font-size: var(--fs-sm);
}

/* 화살표 — 전달본 공통 셰브론(.faq__q .arrow · .filter-toggle .chev · .footer__box .chev)
   과 **같은 값**을 씁니다. 그 규칙에 선택자를 얹을 수 없어 값을 옮겨 적었습니다.
   (.panel-toggle 을 붙이면 classroom.css 가 16px 글자 + 16/18px 패딩까지 끌고 와
    제목이 66px 이 됩니다. 그래서 클래스를 쓰지 않고 여기서 화살표만 그립니다) */
.filter-group__title .chev {
  flex-shrink: 0; width: 22px; height: 22px; font-size: 0;
  background-color: var(--faint);
  -webkit-mask: var(--chev) center / 18px no-repeat;
  mask: var(--chev) center / 18px no-repeat;
  transition: transform .18s;
}
.filter-group__title[aria-expanded="true"] .chev { transform: rotate(180deg) }

/* 부드럽게 여닫기 — FAQ 와 같은 grid 0fr↔1fr 모프입니다(review.css .faq__a).
   바깥이 높이를 애니메이션하고 안쪽이 잘라냅니다. 안쪽에 패딩을 주면 0fr 에서
   그 높이만큼 남아 완전히 닫히지 않으므로 여백은 항목이 각자 갖습니다. */
.filter-group__panel {
  display: grid;
  grid-template-rows: 0fr;
  opacity: 0;
  transition: grid-template-rows .32s cubic-bezier(.4, 0, .2, 1), opacity .24s ease;
}
.filter-group__title[aria-expanded="true"] + .filter-group__panel {
  grid-template-rows: 1fr;
  opacity: 1;
}
.filter-group__panel-inner { overflow: hidden; min-height: 0 }

/* 접힌 묶음은 제목만 남깁니다 — 펼쳤을 때의 아래 여백(8px)이 남지 않게 */
.filter-group.is-folded .filter-group__title { margin-bottom: 0 }

@media (prefers-reduced-motion: reduce) {
  .filter-group__panel { transition: none }
}

/* 고른 개수 — 접어 두면 몇 개 골랐는지 알 수 없어 제목 옆에 붙입니다.
   선택 상태를 나타내는 색이라 .filter-item[aria-pressed] 와 같은 짝을 씁니다. */
.filter-group__count {
  margin-right: auto;               /* 화살표는 오른쪽 끝에 그대로 둡니다 */

  /* 숫자를 원 한가운데 놓습니다.
     line-height 로 맞추면 글자 상자가 위아래로 1px·2px 로 어긋납니다
     (숫자는 아랫줄기가 없어 상자 안에서 위로 붙습니다).
     flex 로 상자째 가운데 정렬하고 line-height 는 1 로 둬서 글꼴에
     상관없이 가운데로 떨어지게 합니다. */
  display: inline-flex;
  align-items: center;
  justify-content: center;
  box-sizing: border-box;
  min-width: 18px;
  height: 18px;
  padding: 0 5px;                   /* 두 자리 수는 옆으로 늘어납니다 */

  border-radius: var(--r-full);
  background: var(--blue-soft);
  color: var(--blue);
  font-size: var(--fs-2xs);
  font-weight: 700;
  line-height: 1;
}

/* 초기화 — 이제 목록 아래에 놓입니다. 전달본은 오른쪽 위 절대배치였는데
   접기 화살표를 가려 아코디언으로 보이지 않았습니다(2026-08-10, 디자인 요청). */
.filter-group__reset {
  position: static;
  margin-top: 6px;
  width: 100%;
  justify-content: center;
  padding: 6px 7px;
}

/* 높이 줄이기 — 조건이 20개라 전달본 값(항목 40px)이면 사이드바가 화면을 넘칩니다.
   글자 크기는 그대로 두고 위아래 여백만 좁힙니다. */
.filter-group { padding: 12px }
/* 안쪽 여백 — 위아래 8px · 좌우 10px (2026-08-11, 디자인 요청) */
.filter-item { padding: 8px 10px }

/* FAQ 아이템 테두리 (2026-08-10, 디자인 요청)
   과정 상세(page--flat)에서는 .faq__item 에 border 가 걸리지만,
   취득절차·강의실 같은 일반 페이지에서는 page--flat 이 없어 테두리가
   빠집니다. 모든 FAQ 에 일관되게 테두리를 줍니다. */
.faq__item { border: 1px solid var(--line) }

/* 강의실 자주 묻는 질문 — 이전/다음 강의 버튼과 간격 (2026-08-10, 디자인 요청) */
.lec-qna { margin-top: 20px }

/* 로그인 상태에서 상단 메뉴가 두 줄로 깨지는 것 (2026-08-10)
   전달본 responsive.css 는 "이 폭부터 상단 메뉴가 두 줄로 깨지므로" 1100px 에서
   햄버거로 바꿉니다. 그 기준은 **비로그인 헤더**(회원가입 | 로그인) 기준입니다.
   로그인하면 그 자리에 이름이 들어가 더 일찍 깨집니다 — 실제로 이름이 7자인
   계정에서 1101~1145px 구간이 두 줄이었습니다(항목 높이 38px → 61px).
   이름이 길수록 이 구간은 더 넓어집니다.

   기준(1100px)은 전달본 값이라 건드리지 않고, 원인 두 가지만 막습니다.
     1) 메뉴 이름은 한 줄짜리 라벨입니다 — 중간에서 접히지 않게 합니다.
     2) 이름은 길이를 알 수 없으므로 폭을 묶고 넘치면 말줄임합니다.
        (전체 이름은 마이페이지 회원정보에서 확인됩니다)

   1)만 하면 접히는 대신 가로로 넘칩니다 — 2)가 반드시 함께 있어야 합니다.
   8em 은 기준폭 1101px 에서 넘치지 않는 최대값으로 재서 정했습니다
   (9em 부터 1112px 로 넘침). 흔한 이름은 그대로 다 나오고, 아주 긴
   이름만 말줄임됩니다. */
.gnb a { white-space: nowrap }

.header__auth .util-link--strong {
  max-width: 8em;
  overflow: hidden;
  text-overflow: ellipsis;
  white-space: nowrap;
}



/* 게시글 하단 버튼 줄 — 목록으로·수정하기가 간격 없이 붙어 보였습니다 (2026-08-11).
   다른 페이지의 버튼 줄(.result-cta, classroom.css)과 같은 구조로 맞춥니다. */
.article__actions {
  display: flex;
  justify-content: center;
  gap: var(--s-4);
  flex-wrap: wrap;
}

/* 게시글 본문 아래 구분선 — appendix.css 정리 과정에서 빠진 것을 복구 (2026-08-11) */
.article__body {
  border-bottom: 1px solid var(--line);
}

/* 게시글 본문 최소 높이 (2026-08-11, 디자인 요청)
   후기가 두세 줄이면 본문 칸이 145px 밖에 안 돼서, 제목 블록(205px)보다도
   작은 띠처럼 보이고 아래가 휑했습니다. 글이 짧아도 본문이 한 덩어리로
   읽히도록 최소 높이를 둡니다.

   값은 '몇 줄이 들어가는 칸인가' 로 잡았습니다 — 본문 한 줄이 26.6px
   (14px * 1.9), 위아래 여백이 32px 씩입니다. box-sizing 이 border-box 라
   아래 값에는 그 64px 이 포함돼 있습니다.
     모바일   220px → 약 6줄   (좁아서 같은 글도 여러 줄로 감깁니다)
     태블릿   260px → 약 7.5줄
     데스크탑 280px → 약 8줄   (본문 폭 840px 이라 한 줄에 많이 들어갑니다)

   폭이 넓을수록 같은 글이 적은 줄로 접혀 칸이 더 납작해지므로, 넓은 화면일수록
   값을 키웁니다. 끊는 지점은 전달본이 쓰는 560 / 980 그대로입니다.

   데스크탑이 300px 이 아니라 280px 인 이유: 1280x800 노트북에서 300px 이면
   '목록으로' 버튼이 화면 밖으로 16px 밀려납니다. 280px 이면 아슬아슬하게
   화면 안에 남습니다(제목이 두 줄이면 어차피 밀립니다).

   글이 이미 긴 글에는 아무 영향이 없습니다.
   (합격후기·공지 상세가 같은 마크업이라 두 곳에 함께 걸립니다) */
.article__body { min-height: 220px }
@media (min-width: 561px) { .article__body { min-height: 260px } }
@media (min-width: 981px) { .article__body { min-height: 280px } }

/* ==========================================================================
   강의실 — 좁은 화면 순서·접힘 (2026-08-11, 디자인 요청)

   전달본 classroom.css 는 980px 아래에서 `.lec-side{ order:-1 }` 로 오른쪽
   묶음(학습자료 + 강의목차)을 통째로 영상 **위**에 올립니다. 그래서 강의실에
   들어오면 20강짜리 목차부터 보이고 영상은 한참 내려야 나왔습니다.

   바꾼 순서:  영상 → 현재 강의 → 진도율 → 이전/다음 강의 → 목차 → 학습자료 → FAQ
   ========================================================================== */
@media (max-width: 980px) {
  /* 왼쪽 칸(영상~FAQ)과 오른쪽 묶음은 각각 한 덩어리라, 사이에 목차만 끼워
     넣을 수 없습니다. 왼쪽 칸의 상자를 없애 그 안의 것들이 바깥 그리드의
     칸이 되게 하면(display:contents) 하나씩 순서를 줄 수 있습니다.
     오른쪽 <aside> 는 지역 표시(landmark)라 상자를 그대로 둡니다. */
  .classroom__grid > div { display: contents }

  /* 그리드 칸이 되면서 세로 간격이 gap + 각자의 margin 으로 겹칩니다.
     margin 을 지우고 gap 하나로 통일합니다. */
  .classroom__grid .cur-lecture,
  .classroom__grid .lec-progress,
  .classroom__grid .rv-cta { margin: 0 }

  /* 간격은 16px 로 (2026-08-11, 디자인 요청)
     전달본 gap 은 24px 인데, 한 칸으로 쌓이면 상자가 일곱 개 줄줄이 서서
     좁은 화면에서 사이가 벙벙해 보였습니다. 오른쪽 묶음이 카드 사이에
     쓰는 값(.lec-side gap:var(--s-6))과 같은 16px 로 맞춰, 쌓인 상자가
     처음부터 끝까지 같은 간격이 되게 합니다.
     (그 전에는 24 / 24 / 24 / 24 / 16 / 44 로 제각각이었습니다) */
  .classroom__grid { row-gap: var(--s-6) }

  /* 자주 묻는 질문은 카드 묶음이 아니라 제목이 따로 붙는 다른 단락이라
     한 칸 더 띄웁니다 — gap 16 + 여기 16 = 32px. */
  .lec-qna { margin-top: var(--s-6) }

  /* 영상 묶음은 기본값(order:0)이라 먼저 옵니다 */
  .lec-side { order: 1 }
  .lec-qna { order: 2 }

  /* 목차는 흐름에서 빠져 바텀시트가 되므로(아래 .toc-sheet), 오른쪽 묶음에
     실제로 남는 것은 학습자료 하나뿐입니다. 순서를 매길 것이 없습니다. */
}

/* 목차·학습자료 접기 (2026-08-11, 디자인 요청)

   여닫힘은 FAQ 와 같은 grid 0fr↔1fr 모프입니다(review.css .faq__a 주석 참고).
   실제 내용 높이를 한 속성으로 애니메이션하므로 높이를 재지 않아도 열림·닫힘이
   모두 매끄럽습니다. 안쪽(-inner)이 잘라 내는 일을 맡고, 여백은 그 안쪽 요소가
   가집니다 — 자르는 요소에 padding 이 있으면 0fr 이 그 높이로 고정돼 안 닫힙니다.

   기본값은 data-open 이 정합니다.
     auto  아직 아무도 누르지 않음 → 데스크탑(981px~)에서만 펼침
     true  / false — 누른 뒤. 화면 폭과 무관합니다.
   기본 접힘을 자바스크립트로 정하면 펼쳐진 채 그려졌다가 접히면서 한 번
   덜컹이므로, 화면 폭만 아는 CSS 에 맡깁니다. */
.panel-card > .panel-body,
.panel-card > .toc__panel {
  display: grid;
  grid-template-rows: 0fr;
  opacity: 0;
  transition: grid-template-rows .32s cubic-bezier(.4, 0, .2, 1), opacity .24s ease;
}
.panel-card[data-open="true"] > .panel-body,
.panel-card[data-open="true"] > .toc__panel { grid-template-rows: 1fr; opacity: 1 }
@media (min-width: 981px) {
  .panel-card[data-open="auto"] > .panel-body,
  .panel-card[data-open="auto"] > .toc__panel { grid-template-rows: 1fr; opacity: 1 }
}
.panel-body-inner,
.toc__panel-inner { overflow: hidden; min-height: 0 }

@media (prefers-reduced-motion: reduce) {
  .panel-card > .panel-body,
  .panel-card > .toc__panel { transition: none }
}

/* 머리말 아래 구분선은 내용 쪽이 가집니다.
   .toc__head 에 두면 접혔을 때 카드 테두리 바로 위에 선이 남아 아래쪽만 두 줄로
   겹쳐 보이고, 접히는 동안 선만 먼저 사라져 깜빡입니다. 학습자료 카드가 이미
   그렇게 하고 있습니다(.material-grid{ border-top }). 목차도 같게 맞춥니다. */
.toc__head { border-bottom: 0 }
.toc__list { border-top: 1px solid var(--line) }

/* 목차 머리말이 버튼이 되면서 필요한 것.
   .toc__head 는 space-between 인데 셰브론이 붙어 셋이 되면 완료 배지가
   가운데로 흘러갑니다. 제목이 남은 자리를 다 먹게 해서 배지·셰브론을
   오른쪽에 붙여 둡니다. */
.toc__head { width: 100%; text-align: left }
.toc__head b { margin-right: auto }

/* 셰브론 — 전달본 공통 셰브론(review.css 의 .panel-toggle .chev)과 같은 값입니다.
   그 규칙에 선택자를 더할 수 없어(전달본 파일은 건드리지 않습니다) 옮겨 적습니다. */
.toc__head .chev {
  flex: none; width: 22px; height: 22px;
  background-color: var(--faint);
  -webkit-mask: var(--chev) center / 18px no-repeat;
  mask: var(--chev) center / 18px no-repeat;
  transition: transform .2s;
}
.toc__head[aria-expanded="true"] .chev { transform: rotate(180deg) }

/* 모바일 학습자료 — 세 칸을 한 줄에 (2026-08-11, 디자인 요청)
   전달본은 560px 아래에서 세 칸을 세로로 쌓습니다(grid-template-columns:1fr).
   접힌 상태가 기본이 되면서 펼쳤을 때 세 줄이 길게 이어지는 게 부담스러워
   한 줄로 되돌리고, 대신 아이콘과 글자를 줄여 폭을 맞춥니다.
     아이콘 52 → 40px (그림 34 → 26px) · 글자 14 → 11px · 좌우 여백 12 → 6px */
@media (max-width: 560px) {
  .material-grid { grid-template-columns: repeat(3, 1fr) }
  .material-grid > * + * { border-left: 1px solid var(--line); border-top: 0 }
  .material-grid > * {
    padding: 14px 6px;
    font-size: var(--fs-2xs);
    gap: var(--s-2);
    word-break: keep-all;
  }
  .material-grid .m-ico { width: 40px; height: 40px }
  .material-grid .m-ico img { width: 26px; height: 26px }
}

/* 접힌 목차 카드 높이를 학습자료 카드와 맞춥니다 (2026-08-11)
   학습자료 머리말(.panel-toggle)은 카드 여백 토큰을 쓰는데(좁은 화면에서
   20 → 16px 로 줄어듭니다) .toc__head 만 18px 로 박혀 있어, 두 카드가 나란히
   접혔을 때 목차 쪽이 6px 더 높았습니다. 같은 토큰을 씁니다.
   좌우는 20px 그대로 둡니다 — 아래 목록 줄(.toc__item a)과 왼쪽 선을
   맞춰야 합니다. (아랫줄 문제는 위 '머리말 아래 구분선' 항목에서 다룹니다) */
.toc__head { padding: var(--pad-card-y) 20px }

/* 강의실 — 넓은 화면에서는 이전/다음 강의 버튼을 빼둡니다 (2026-08-11, 디자인 요청)
   2단일 때는 오른쪽에 강의목차가 늘 펼쳐져 있어 아무 차시로나 바로 갈 수
   있습니다. 그 아래 버튼 두 개는 같은 일을 한 번 더 하는 셈입니다.
   한 칸으로 접히는 980px 아래에서는 목차가 접혀 있으니 그대로 둡니다.
   (.rv-cta 는 시험·성적 화면도 쓰는 공통 버튼 줄이라 강의실 안으로 한정합니다) */
/* 세 칸을 상자 하나로 묶고 사이를 선으로 나눕니다 (2026-08-11, 디자인 요청).
   버튼 세 개가 각자 테두리를 두르고 떨어져 있으면 서로 다른 일을 하는 것처럼
   보였는데, 실제로는 '어느 강의로 갈까' 하나를 셋으로 나눈 것입니다.
   테두리는 상자가 하나만 두르고, 칸 사이는 1px 선으로만 나눕니다. */
.classroom__grid .rv-cta {
  display: flex;
  gap: 0;
  /* 카드들과 같은 1px 테두리입니다 (버튼 기본값 1.5px 이 아니라) */
  border: 1px solid var(--line);
  border-radius: var(--r-md);
  background: var(--surface);
  overflow: hidden;
}
/* 안쪽 버튼은 테두리·모서리를 내려놓고 칸 노릇만 합니다.
   배경은 비워 상자 색이 비치게 두되, 누를 때 밝아지는 것(.btn--ghost:hover)은
   그대로 살립니다. */
.classroom__grid .rv-cta .btn {
  border: 0; border-radius: 0; background: none;
  padding: 12px 14px;
}
.classroom__grid .rv-cta .btn + .btn { border-left: 1px solid var(--line) }
@media (min-width: 981px) {
  .classroom__grid .rv-cta { display: none }
}

/* 강의실 진도율 — 좁은 화면에서 낮추고, 목차 아래로 (2026-08-11, 디자인 요청)

   자리. 진도율은 지금 무엇을 할지가 아니라 얼마나 왔는지를 알려 주는 요약이라,
   좁은 화면에서는 영상·이동 버튼·목차 다음으로 내립니다.
     영상 → 현재 강의 → 이전/다음 → 목차 → 학습자료 → 진도율 → FAQ

   크기. 28px 숫자(페이지 제목 크기)에 위아래 18px 여백이라 상자가 83px 이었습니다.
   진도율은 한 줄짜리 알림인데 영상 아래에서 제목만큼 자리를 차지했습니다.
   숫자를 섹션 제목 크기(22px)로, 위아래 여백을 14px 로 줄입니다 — 어느 폭에서나
   같습니다. 좌우만 좁은 화면에서 한 번 더 좁힙니다.
   막대 두께와 색은 그대로입니다 — 읽는 데 필요한 정보는 줄지 않습니다.
     데스크탑 83 → 63px · 모바일 83 → 61px */
@media (max-width: 980px) {
  .classroom__grid .lec-progress { order: 2 }
  .lec-qna { order: 3 }
}
.lec-progress { padding: 14px 22px }
.lec-progress__pct { font-size: var(--fs-xl) }
@media (max-width: 560px) {
  .lec-progress { padding: 12px 16px }
}

/* 이전/다음 강의 버튼에 방향 화살표 (2026-08-11, 디자인 요청)
   전달본 페이지네이션이 쓰는 것과 같은 마스크 화살표(--arr)입니다
   (account.css .pagination__arrow). currentColor 라 흰 글자 버튼에서는 희게,
   테두리 버튼에서는 글자색으로 따라갑니다.
   .btn 이 이미 inline-flex + gap 이라 가상 요소가 칸 하나를 차지합니다.
   한쪽 강의가 없으면 버튼도 없으므로 남은 버튼의 화살표만 나옵니다. */
.classroom__grid .rv-cta .btn::before,
.classroom__grid .rv-cta .btn::after {
  content: "";
  flex: none; width: 14px; height: 14px;
  background-color: currentColor;
  -webkit-mask: var(--arr) center / contain no-repeat;
  mask: var(--arr) center / contain no-repeat;
}
/* 방향은 버튼 종류가 아니라 lec-nav--prev/next 가 정합니다.
   이전·다음이 같은 모양(.btn--ghost)이 되면서 종류로는 구분할 수 없습니다. */
.classroom__grid .rv-cta .lec-nav--prev::after,
.classroom__grid .rv-cta .lec-nav--next::before { content: none }

/* ==========================================================================
   강의목차 바텀시트 (2026-08-11, 디자인 요청)

   좁은 화면에서는 목차를 이전/다음 버튼 사이의 버튼으로 열고, 아래에서
   올라오는 시트로 보여 줍니다. 목록이 20강씩 되다 보니 그 자리에서 펼치면
   화면을 다 잡아먹었습니다.

   목록을 두 벌 그리지 않으려고, 오른쪽 카드를 전달본 필터 시트 껍데기
   (.fsheet — course.css)로 감싸기만 했습니다. 981px 부터는 껍데기를
   display:contents 로 없애 카드가 다시 .lec-side 의 자식이 됩니다.
   ========================================================================== */

/* --- 넓은 화면: 껍데기를 없애 원래 카드로 되돌립니다 --- */
@media (min-width: 981px) {
  .toc-sheet,
  .toc-sheet .fsheet__panel { display: contents }
  /* .fsheet 는 닫힌 시트를 visibility:hidden 으로 감춥니다. 상자가 사라져도
     visibility 는 자식에게 물려지므로 여기서 되돌려 놓아야 합니다. */
  .toc-sheet { visibility: visible }
  .toc-sheet .fsheet__dim { display: none }
}

/* --- 좁은 화면: 시트 --- */
@media (max-width: 980px) {
  /* 열림 여부는 data-open 이 정합니다. .fsheet 원래 방식인 is-open 클래스는
     자바스크립트가 붙이는 것이라, 첫 화면에서 열린 채 그려졌다가 닫히며
     덜컹입니다. 접힘 기본값을 CSS 가 정하는 다른 곳들과 같은 방식입니다. */
  .toc-sheet[data-open="true"] { visibility: visible; transition-delay: 0s }
  .toc-sheet[data-open="true"] .fsheet__dim { opacity: 1 }
  .toc-sheet[data-open="true"] .fsheet__panel { transform: none }

  /* 목차는 항목 수가 과정마다 달라서, 필터 시트처럼 높이를 고정하지 않고
     내용만큼만 올라오되 화면의 3/4 을 넘지 않게 합니다. */
  .toc-sheet .fsheet__panel { height: auto; max-height: 75vh }

  /* 카드 테두리·모서리는 시트가 가지므로 안쪽 카드에서는 뺍니다 */
  .toc-sheet .panel-card {
    display: flex; flex-direction: column; min-height: 0;
    border: 0; border-radius: 0; background: none;
  }

  /* 시트 안에서는 목록이 늘 펼쳐져 있습니다 — 여닫는 건 시트 자체입니다.
     머리말은 시트 제목 줄이 되고, 누르면 닫힙니다. */
  .toc-sheet .toc__panel {
    grid-template-rows: 1fr; opacity: 1; transition: none;
    flex: 1; min-height: 0;
  }
  .toc-sheet .toc__panel-inner { display: flex; min-height: 0 }
  .toc-sheet .toc__list { max-height: none; flex: 1; border-top: 0 }
  .toc-sheet .toc__head { border-bottom: 1px solid var(--line) }
  /* 시트가 올라와 있을 때 머리말 화살표는 아래쪽 — 누르면 내려간다는 뜻입니다.
     (접기였을 때는 열린 상태에서 위를 가리키는 게 맞았습니다) */
  .toc-sheet .toc__head[aria-expanded="true"] .chev { transform: none }
}


/* ==========================================================================
   강의실 이동 줄 — 이전 · 강의목차 · 다음 (2026-08-11, 디자인 요청)

   위계: 이전/다음은 같은 무게여야 합니다. 남색(.btn--primary)은 '지금 눌러야
   하는 버튼' 신호라 강의 이동에는 과했습니다. 둘 다 전달본의 조용한 아웃라인
   (.btn--ghost.btn--quiet)으로 맞췄습니다 — 새 색을 만들지 않았습니다.
   가운데 목차만 글자색이 진하고 파란 강 수·남색 배지를 달고 있어, 크기와
   내용만으로 이 줄의 중심이 됩니다.

   화살표: 받은 꼬리 달린 화살표(left_tail/right_tail.svg)입니다. 파일로 두지
   않고 토큰처럼 인라인해 마스크로 씁니다 — 원본 SVG 가 검정 고정이라 그대로
   쓰면 조용한 회색 글자와 색이 어긋납니다. currentColor 로 두면 글자를 따라갑니다.
   ========================================================================== */
:root {
  --arr-tail-left: url("data:image/svg+xml,%3Csvg width='16' height='16' viewBox='0 0 16 16' fill='none' xmlns='http://www.w3.org/2000/svg'%3E %3Cpath d='M14.5965 7.10263H3.67826L7.72381 3.24975C8.09182 2.89925 8.09182 2.33113 7.72381 1.98064C7.35579 1.63015 6.75926 1.63015 6.39124 1.98064L0.737045 7.36557L0.672625 7.43393C0.370738 7.78644 0.392029 8.30609 0.737045 8.63467L6.39124 14.0196C6.75926 14.3701 7.35579 14.3701 7.72381 14.0196C8.09182 13.6691 8.09182 13.101 7.72381 12.7505L3.67826 8.89761L14.5965 8.89761C15.1169 8.89761 15.5388 8.49579 15.5388 8.00012C15.5388 7.50445 15.1169 7.10263 14.5965 7.10263Z' fill='black'/%3E %3C/svg%3E");
  --arr-tail-right: url("data:image/svg+xml,%3Csvg width='16' height='16' viewBox='0 0 16 16' fill='none' xmlns='http://www.w3.org/2000/svg'%3E %3Cpath d='M1.40355 7.10263H12.3217L8.27619 3.24975C7.90818 2.89925 7.90818 2.33113 8.27619 1.98064C8.64421 1.63015 9.24074 1.63015 9.60876 1.98064L15.263 7.36557L15.3274 7.43393C15.6293 7.78644 15.608 8.30609 15.263 8.63467L9.60876 14.0196C9.24074 14.3701 8.64421 14.3701 8.27619 14.0196C7.90818 13.6691 7.90818 13.101 8.27619 12.7505L12.3217 8.89761L1.40355 8.89761C0.883093 8.89761 0.461182 8.49579 0.461182 8.00012C0.461182 7.50445 0.883093 7.10263 1.40355 7.10263Z' fill='black'/%3E %3C/svg%3E");
}

@media (max-width: 980px) {
  /* 양옆은 내용만큼만, 가운데가 남는 자리를 다 가집니다 */
  .classroom__grid .rv-cta .btn { width: auto; flex: none }
  .classroom__grid .rv-cta .toc-open { flex: 1; min-width: 0; gap: var(--s-3) }

  /* 가운데 목차 — 시트 머리말과 같은 것을 보여 줍니다.
     머리말은 16px 이지만 여기서는 한 줄에 셋이 들어가야 해서 본문 크기로 낮춥니다. */
  .classroom__grid .rv-cta .toc-open b { font-size: var(--fs-sm); font-weight: 700 }
  .classroom__grid .rv-cta .toc-open b span { color: var(--blue); margin-left: 3px }
  .classroom__grid .rv-cta .toc-open .toc__badge { flex: none }
  /* 셰브론을 오른쪽 끝으로 밀지 않습니다 — 세 조각이 한 덩어리로 가운데
     오도록 두면 좌우 여백이 같아집니다(.btn 이 이미 justify-content:center). */
  .classroom__grid .rv-cta .toc-open .chev {
    flex: none; width: 16px; height: 16px;
    background-color: var(--faint);
    -webkit-mask: var(--chev) center / contain no-repeat;
    mask: var(--chev) center / contain no-repeat;
  }
  .classroom__grid .rv-cta .toc-open::before,
  .classroom__grid .rv-cta .toc-open::after { content: none }

  /* 이전/다음 화살표 — 받은 꼬리 달린 화살표로 바꿉니다 */
  .classroom__grid .rv-cta .lec-nav--prev::before {
    -webkit-mask-image: var(--arr-tail-left);
    mask-image: var(--arr-tail-left);
    transform: none;
  }
  .classroom__grid .rv-cta .lec-nav--next::after {
    -webkit-mask-image: var(--arr-tail-right);
    mask-image: var(--arr-tail-right);
    transform: none;
  }
}

/* 모바일(375px 기준 335px)은 셋을 다 담기에 빠듯합니다. 완료 배지만 뺍니다
   (2026-08-11, 디자인 요청) — 진도는 바로 아래 진도율 막대에도 있고, 시트를
   열면 머리말에 그대로 나옵니다. 강의목차·총 N강·화살표는 남습니다. */
@media (max-width: 560px) {
  .classroom__grid .rv-cta .toc-open .toc__badge { display: none }
  .classroom__grid .rv-cta .btn { padding: 12px 10px }
}

/* 학습자료 — 첫 칸만 남색이던 것 (2026-08-11, 디자인 요청)
   전달본은 `.material-grid a:first-child{ color:var(--navy); font-weight:700 }`
   으로 교안파일 다운로드만 진하게 두었습니다. 세 칸은 고르는 자리이지
   하나가 더 중요한 자리가 아니라, 옆 칸들과 같은 회색으로 맞춥니다
   (.material-grid > * 의 값과 같습니다). */
.material-grid a:first-child { color: var(--muted); font-weight: 600 }

/* 기출문제 풀이 정보 칸 — 좁은 화면에서 1 + 2 로 (2026-08-11, 디자인 요청)
   전달본은 980px 아래에서 2칸으로 접습니다(classroom.css). 항목이 셋인
   기출문제 풀이에서는 [과정|문항수] / [유형] 이 되어, 가장 긴 과정명이 반 칸에
   갇히고 아래 한 칸만 덩그러니 남았습니다.
   과정을 윗줄 한 칸으로 펴고 문항수·유형을 아랫줄에 나란히 둡니다.
   가운데 정렬과 칸 사이 선은 전달본 것이 그대로 걸립니다
   (.exam-info div{ text-align:center } · nth-child(n+3) 윗선).
   항목이 넷인 수료시험은 그대로 2x2 입니다. */
@media (max-width: 980px) {
  .exam-info:has(> div:nth-child(3):last-child) > div:first-child {
    grid-column: 1 / -1;
    border-bottom: 1px solid rgba(255, 255, 255, .12);
  }
  /* 세로선은 아랫줄 두 칸 **사이**에만 둡니다. 전달본은 '앞 칸이 있으면 왼쪽 선'
     (div + div) 이라 아랫줄 왼쪽 칸에도 선이 붙어 상자 맨 왼쪽에 그어졌고,
     반대로 3번째 칸은 선을 지우고 있었습니다 — 줄이 바뀌면서 뒤집힙니다. */
  .exam-info:has(> div:nth-child(3):last-child) > div:nth-child(2) { border-left: 0 }
  .exam-info:has(> div:nth-child(3):last-child) > div:nth-child(3) {
    border-left: 1px solid rgba(255, 255, 255, .12);
    border-top: 0;
  }
}

/* 폼 드롭다운 화살표를 사이트 공통 셰브론으로 (2026-08-12, 디자인 요청)
   전달본 .field select 는 네이티브 화살표를 그대로 씁니다 — 브라우저마다 모양이
   달라 옆 칸들과 따로 놉니다. 합격후기 정렬 드롭다운(.select-box, review.css)이
   이미 공통 셰브론을 쓰고 있어 그 값을 그대로 가져옵니다.

   select 는 배경색이 필드 전체를 칠하므로 마스크 대신 이미지로 둡니다
   (색은 공통 셰브론과 같은 --faint #919191 을 SVG 안에 박아 둡니다).
   화살표 자리를 비우려고 오른쪽 여백을 넓힙니다 — 14(좌우 대칭) + 16(아이콘)
   + 8(사이) = 38px. 왼쪽 14px 은 .field input 과 같습니다. */
.field select {
  appearance: none; -webkit-appearance: none;
  background: var(--surface) url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none'%3E%3Cpath d='M6 9l6 6 6-6' stroke='%23919191' stroke-width='2.2' stroke-linecap='round' stroke-linejoin='round'/%3E%3C/svg%3E") no-repeat right 14px center;
  background-size: 16px;
  padding-right: 38px;
  cursor: pointer;
}

/* 발급신청 완료 — 입금 안내 줄 (2026-08-12, 디자인 요청)
   같은 목록의 배송지·배송예정·발급형태는 확인용 정보지만, 이 줄만 실제로 할 일
   (입금)입니다. 전달본이 선택·강조에 쓰는 연블루(--blue-soft)를 깔고 가운데로
   모아 다른 줄과 구분합니다.

   .next-list li 는 flex + align-items:center 라 글자가 왼쪽에 붙습니다.
   가운데로 세우려면 주축(가로) 정렬도 함께 바꿔야 합니다. */
.next-list li.next-list__pay {
  justify-content: center;
  background: var(--blue-soft);
  text-align: center;
  line-height: 1.7;
}

/* 발급신청 완료 — 버튼 두 개를 한 줄에 (2026-08-12, 디자인 요청)
   위아래로 쌓여 있던 것을 흰색 왼쪽 · 남색 오른쪽으로 나란히 둡니다.
   좁은 화면에서는 두 글자씩이 아니라 문장이라 한 줄에 무리하지 않고 쌓입니다. */
.complete__cta {
  display: flex;
  gap: var(--s-3);
  margin-top: var(--s-6);
}
.complete__cta .btn { flex: 1 }
/* 모바일에서는 쌓되 남색(지금 할 일)이 위로 옵니다 — 세로로 놓이면 위가
   먼저 읽히는 자리입니다. column-reverse 라 마크업 순서는 그대로 두고
   보이는 차례만 뒤집습니다 (2026-08-12, 디자인 요청). */
@media (max-width: 560px) {
  .complete__cta { flex-direction: column-reverse }
}

/* 수강신청 — 검색바와 필터 버튼을 한 줄로, 스크롤해도 위에 붙게
   (2026-08-12, 디자인 요청)

   전달본은 검색바(.m-search)가 제목 위, 필터 버튼(.filter-toggle)이 제목 아래
   따로 있었습니다. 둘 다 '무엇을 볼지 고르는' 도구라 한 줄로 모으고, 목록을
   내리는 동안에도 손에 닿게 헤더 아래에 붙여 둡니다.

   검색바는 넓은 화면에서도 함께 보여 줍니다. 필터 버튼만 좁은 화면 전용입니다
   (넓은 화면에는 사이드바가 펼쳐져 있습니다). */
.course-bar {
  display: flex;
  align-items: center;
  gap: var(--s-3);
  position: sticky;
  top: var(--header-h);
  z-index: 40;
  background: var(--surface-sunken);
  padding: var(--s-3) 0;
  margin-bottom: var(--s-3);
  transition: top .25s ease;
}
.course-bar .m-search { flex: 1; min-width: 0; margin-bottom: 0 }

/* 입력칸 안 지우기 버튼 (2026-08-12, 디자인 요청)
   Figma button_top 64:5454 — 회색 동그라미(Atomic/Mono/200 #E4E4E4) 안에 회색
   ✕(Atomic/Mono/600 #656565), 아주 옅은 그림자. 두 색 다 사이트 토큰과 같은
   값이라 --line · --muted 를 그대로 씁니다.

   ✕ 는 글자가 아니라 시안에서 받은 아이콘 파일입니다(글꼴마다 모양이 다릅니다).
   색을 토큰으로 정하려고 그림이 아니라 마스크로 씁니다 — 사이트가 셰브론에
   쓰는 방식과 같습니다.

   크기는 시안 비율(아이콘 14 / ✕ 10)을 유지하며 입력칸에 맞춰 줄였습니다:
   동그라미 20px · ✕ 10px.

   type=search 가 브라우저마다 그리는 기본 ✕ 는 감춥니다(모양이 제각각입니다). */
.m-search__clear,
.search-field__clear {
  flex: none;
  display: flex; align-items: center; justify-content: center;
  width: 20px; height: 20px; padding: 0;
  border-radius: var(--r-full);
  background: var(--line);
  box-shadow: 0 0 1px rgba(0, 0, 0, .1);
}
.m-search__clear::before,
.search-field__clear::before {
  content: "";
  width: 10px; height: 10px;
  background-color: var(--muted);
  -webkit-mask: url("/korhrd/img/icon/close.svg") center / contain no-repeat;
  mask: url("/korhrd/img/icon/close.svg") center / contain no-repeat;
}
.m-search__clear[hidden],
.search-field__clear[hidden] { display: none }
.m-search input::-webkit-search-cancel-button,
.search-field input::-webkit-search-cancel-button { -webkit-appearance: none; appearance: none }

/* 넓은 화면에서도 이 화면에서는 검색바를 보여 줍니다 (2026-08-12, 디자인 요청).
   전달본은 헤더 검색과 겹친다고 감췄는데(.m-search{display:none}), 목록을 보며
   바로 다시 찾는 자리라 헤더를 열지 않고 여기서 칠 수 있게 둡니다.

   다만 자리는 제목 아래 한 줄이 아니라 **도구 줄(.toolbar)** 입니다. 한 줄을
   따로 쓰면 폭이 남아 허전하고, 목록 바로 위에 놓으면 '무엇을 찾아 몇 개가
   나왔는지'가 검색칸 → 결과 수 → 정렬 순으로 이어집니다.
   좁은 화면은 그대로 고정 줄(.course-bar)에 둡니다 — 그쪽은 스크롤해도 손에
   닿아야 하는 자리입니다. */
.toolbar__search { display: none }

@media (min-width: 981px) {
  /* 좁은 화면용 고정 줄은 통째로 비웁니다 — 그 안의 둘 다 넓은 화면에서는
     다른 곳에 있습니다(검색은 도구 줄로, 필터는 사이드바로). */
  .course-bar { display: none }

  .toolbar__search { display: block; flex: none; width: 280px; max-width: 100% }
  .toolbar__search .m-search {
    display: flex; align-items: center; gap: var(--s-2);
    margin: 0; padding: 0 12px; height: 40px;
    background: var(--surface); border: 1px solid var(--line); border-radius: var(--r-md);
  }
  .toolbar__search .m-search input {
    flex: 1; min-width: 0; border: 0; background: none; padding: 0;
    font-size: var(--fs-sm); color: var(--ink);
  }
  .toolbar__search .m-search input::placeholder { color: var(--disabled) }
  .toolbar__search .m-search button { flex: none; display: flex; color: var(--ink-2); padding: 4px }

  /* 검색칸과 결과 수를 한 덩어리로 붙이고, 정렬만 오른쪽 끝으로 보냅니다
     (.sort-group 의 margin-left:auto 가 그 일을 이미 합니다). */
  .toolbar { gap: var(--s-5) }
  .toolbar__result { flex: none }
}

@media (max-width: 980px) {
  .course-bar {
    display: flex;
    align-items: center;
    gap: var(--s-3);
    position: sticky;
    top: var(--header-h);
    z-index: 40;
    /* 아래로 지나가는 카드가 비쳐 보이지 않게 페이지 바탕색을 깔고,
       좌우 여백만큼 넓혀 컨테이너 가장자리까지 덮습니다. */
    background: var(--surface-sunken);
    padding: var(--s-3) 0;
    margin-bottom: var(--s-3);
    transition: top .25s ease;
  }
  /* 전달본의 아래 여백은 이제 줄이 가집니다 */
  .course-bar .m-search { flex: 1; min-width: 0; margin-bottom: 0 }

/* 입력칸 안 지우기 버튼 (2026-08-12, 디자인 요청)
   Figma button_top 64:5454 — 회색 동그라미(Atomic/Mono/200 #E4E4E4) 안에 회색
   ✕(Atomic/Mono/600 #656565), 아주 옅은 그림자. 두 색 다 사이트 토큰과 같은
   값이라 --line · --muted 를 그대로 씁니다.

   ✕ 는 글자가 아니라 시안에서 받은 아이콘 파일입니다(글꼴마다 모양이 다릅니다).
   색을 토큰으로 정하려고 그림이 아니라 마스크로 씁니다 — 사이트가 셰브론에
   쓰는 방식과 같습니다.

   크기는 시안 비율(아이콘 14 / ✕ 10)을 유지하며 입력칸에 맞춰 줄였습니다:
   동그라미 20px · ✕ 10px.

   type=search 가 브라우저마다 그리는 기본 ✕ 는 감춥니다(모양이 제각각입니다). */
.m-search__clear,
.search-field__clear {
  flex: none;
  display: flex; align-items: center; justify-content: center;
  width: 20px; height: 20px; padding: 0;
  border-radius: var(--r-full);
  background: var(--line);
  box-shadow: 0 0 1px rgba(0, 0, 0, .1);
}
.m-search__clear::before,
.search-field__clear::before {
  content: "";
  width: 10px; height: 10px;
  background-color: var(--muted);
  -webkit-mask: url("/korhrd/img/icon/close.svg") center / contain no-repeat;
  mask: url("/korhrd/img/icon/close.svg") center / contain no-repeat;
}
.m-search__clear[hidden],
.search-field__clear[hidden] { display: none }
.m-search input::-webkit-search-cancel-button,
.search-field input::-webkit-search-cancel-button { -webkit-appearance: none; appearance: none }
  /* 버튼은 글자만큼만 — 남는 자리는 검색바가 가집니다 */
  .course-bar .filter-toggle { flex: none; width: auto }

  /* 필터 아이콘 — 시안 tool/filter 332:8251.
     색은 Atomic/Mono/400 #B2B2B2 = 사이트 토큰 --mono-400 과 같은 값입니다.
     색을 토큰으로 정하려고 그림이 아니라 마스크로 씁니다. */
  .filter-toggle__ico {
    flex: none; width: 16px; height: 16px;
    background-color: var(--mono-400);
    -webkit-mask: url("/korhrd/img/icon/filter.svg") center / contain no-repeat;
    mask: url("/korhrd/img/icon/filter.svg") center / contain no-repeat;
  }

  /* 고른 조건 수 — 사이드바 묶음 배지와 같은 모양입니다 */
  .filter-toggle__count {
    flex: none;
    display: inline-flex; align-items: center; justify-content: center;
    box-sizing: border-box; min-width: 18px; height: 18px; padding: 0 5px;
    border-radius: var(--r-full); background: var(--blue-soft); color: var(--blue);
    font-size: var(--fs-2xs); font-weight: 700; line-height: 1;
  }
}

/* 필터 시트 왼쪽 칸에도 고른 개수를 답니다 (2026-08-12, 디자인 요청).
   다른 칸으로 옮겨도 어디에 무엇을 골라 뒀는지 보입니다. 칸이 왼쪽 정렬이라
   배지는 오른쪽 끝에 붙입니다. */
.fsheet__group { display: flex; align-items: center; gap: var(--s-3) }
.fsheet__group-count {
  flex: none; margin-left: auto;
  display: inline-flex; align-items: center; justify-content: center;
  box-sizing: border-box; min-width: 18px; height: 18px; padding: 0 5px;
  border-radius: var(--r-full); background: var(--blue-soft); color: var(--blue);
  font-size: var(--fs-2xs); font-weight: 700; line-height: 1;
}

/* 모바일은 한 줄을 검색바와 나눠 쓰므로 버튼을 더 좁힙니다 (2026-08-12, 디자인 요청).
   좌우 여백을 14 → 10px 로 줄이고 조각 사이 간격도 좁혀, 남는 자리는 검색칸이
   가져갑니다. */
@media (max-width: 560px) {
  .course-bar .filter-toggle { padding: 11px 10px; gap: var(--s-2) }
}

@media (max-width: 560px) {
  /* 이 폭에서만 헤더가 스크롤에 숨습니다. 숨은 동안에는 줄이 그 자리를 대신
     차지해 화면 맨 위에 붙습니다 — 강의 상세 탭바와 같은 처리입니다. */
  .header.is-hidden ~ #main .course-bar { top: 0 }
}

/* 수강신청 목록 — 정가(취소선) 글자 키우기 (2026-08-12, 디자인 요청)
   전달본은 넓은 화면에서 12px(--fs-xs) 이라 옆의 28px '0원' 에 눌려 잘 읽히지
   않았습니다. 좁은 화면에서 이미 쓰고 있는 14px(--fs-sm) 로 맞춥니다 —
   두 폭이 같은 크기가 되고, 취소선이라 여전히 '0원' 보다 뒤로 물러납니다. */
.course-row__price del { font-size: var(--fs-sm) }

/* 수강신청 목록 — '원' 은 어느 폭에서나 검정 (2026-08-12, 디자인 요청)
   전달본은 좁은 화면에서만 단위를 --ink 로 빼 두고(responsive.css 560 블록),
   넓은 화면에서는 숫자와 같은 남색이었습니다. 강조되는 것은 '0' 이라 단위는
   뒤로 물러나는 게 맞습니다 — 모바일 처리를 넓은 화면에도 그대로 씁니다. */
.course-row__price strong span { color: var(--ink) }

/* 고객센터 상담 3블록 — 사이드 메뉴 아래로 (2026-08-12, 디자인 요청)
   본문 위를 가로로 막고 있어서 네 화면 어디를 눌러도 상담 박스부터 지나야
   했습니다. 옆 칸(210px)의 메뉴 아래로 내려 세로로 세웁니다.
   전달본 .support-grid 는 3열이고 margin-bottom:8px 이라, 둘 다 덮습니다.
   좁은 화면에서는 전달본이 이미 1열(account.css 980 블록)이라 폭 규칙은
   같은 결과가 되고, 메뉴와 띄우는 간격만 남습니다. */
.support-grid--side {
  grid-template-columns: 1fr;
  gap: var(--s-4);
  margin: var(--s-5) 0 0;
}

/* 고객센터 전화 상담 박스 — 안내 줄을 빼고 이름·번호를 붙입니다
   (2026-08-12, 디자인 요청). 전달본은 위에 '궁금한 점이 있으신가요?' 가 있다는
   전제로 이름 위아래를 4px/8px 띄웠는데, 그 줄이 사라지면 이름과 번호가
   따로 노는 두 덩어리로 보입니다. 한 짝으로 붙입니다.
   메인의 전화 박스는 안내 줄을 그대로 두므로 사이드바 안에서만 바꿉니다. */
.support-grid--side .tel-box__t { margin: 0 0 2px }

/* 고객센터 취득 과정 — 수료·합격 기준을 막대 그래프 둘로 (2026-08-13, 디자인 요청)
   링 네 개는 숫자만 보여줄 뿐 '출석이 합격 점수의 3분의 2' 라는 구조가 안
   보였습니다. ① 응시 자격(출석 60% 지점까지 찬 막대) ② 합격 점수(출석 40 +
   시험 60 누적, 60점 자리에 합격선). 색·간격은 전달본 토큰만 씁니다 —
   막대 짜임은 lec-progress(track 위 fill)와 같은 문법입니다. */
.pass-viz { display: grid; gap: var(--s-4) }
/* 막대 하나가 흰 카드 하나 — 위 취득 4단계 카드(.step)와 같은 옷입니다.
   폭은 본문 가득 씁니다 (2026-08-13, 디자인 요청) */
.pass-viz__row {
  background: var(--surface); border: 1px solid var(--line);
  border-radius: var(--r-lg); padding: var(--pad-card-y) var(--pad-card);
}
.pass-viz__head {
  display: flex; justify-content: space-between; align-items: baseline; gap: var(--s-4);
  margin-bottom: var(--s-2); font-size: var(--fs-sm);
}
.pass-viz__head > b { color: var(--ink); font-weight: 700 }
.pass-viz__head > span { color: var(--muted) }
.pass-viz__head > span b { color: var(--blue); font-weight: 700 }
/* 합격선 라벨이 막대 위에 얹히므로 그만큼 띄웁니다 */
.pass-bar {
  position: relative; display: flex; height: 32px; margin-top: 26px;
  border-radius: var(--r-full); background: var(--surface-alt); overflow: visible;
}
.pass-bar__seg {
  display: flex; align-items: center; justify-content: center;
  height: 100%; font-style: normal; font-size: var(--fs-xs); font-weight: 700;
  white-space: nowrap;
}
.pass-bar__seg--att { background: var(--navy); color: #fff; border-radius: var(--r-full) 0 0 var(--r-full) }
.pass-bar__seg--exam { background: var(--blue-soft); color: var(--navy); border-radius: 0 var(--r-full) var(--r-full) 0 }
/* ① 막대는 출석 한 조각뿐이라 오른쪽도 둥글게, 남은 트랙에 흐린 라벨 */
.pass-bar > .pass-bar__seg--att:last-of-type { border-radius: var(--r-full) }
.pass-bar__rest {
  flex: 1; display: flex; align-items: center; justify-content: center;
  font-size: var(--fs-xs); color: var(--mono-400); white-space: nowrap;
}
/* 합격선 — 파란 점선 눈금 + 위에 파란 라벨. left 는 마크업이 지정합니다 */
.pass-bar__line { position: absolute; top: -6px; bottom: -6px; width: 0; border-left: 2px dashed var(--blue) }
.pass-bar__line::after {
  content: attr(data-label); position: absolute; top: -20px; left: 50%; transform: translateX(-50%);
  font-size: var(--fs-2xs); font-weight: 700; color: var(--blue); white-space: nowrap;
}
.pass-viz__note { margin-top: var(--s-3); font-size: var(--fs-sm); color: var(--muted); line-height: 1.7 }
@media (max-width: 560px) {
  .pass-bar { height: 28px }
}

/* 사이드 메뉴 — 좁은 화면에서는 세로 목록 대신 탭 격자 (2026-08-13, 디자인 요청)
   980 이하에서 사이드바가 본문 위로 쌓이면, 세로 목록이 화면을 길게
   차지했습니다. 옛 사이트의 게시판 탭처럼 격자로 눕힙니다 — 태블릿 4칸 한 줄,
   모바일 2×2. 고객센터·나의 강의실·자격증 발급신청이 함께 씁니다
   (항목이 둘뿐인 발급 메뉴는 --2 로 어느 폭에서나 2칸).
   칸 나누는 선은 배경(--line)을 1px 틈으로 내보이는 방식이라 테두리가
   겹치지 않습니다. 지금 보는 탭은 파랑 채움 + 흰 글자입니다. */
@media (max-width: 980px) {
  .side-tabs {
    display: grid; grid-template-columns: repeat(4, 1fr); gap: 1px;
    padding: 0; background: var(--line); border: 1px solid var(--line);
    border-radius: var(--r-md); overflow: hidden;
  }
  .side-tabs--2 { grid-template-columns: repeat(2, 1fr) }
  .side-tabs .side-nav__item {
    justify-content: center; text-align: center; white-space: nowrap;
    margin: 0; border-radius: 0; padding: 12px 8px; background: var(--surface);
  }
  .side-tabs .side-nav__item + .side-nav__item { margin-top: 0 }
  .side-tabs .side-nav__item:hover { background: var(--surface-sunken) }
  .side-tabs .side-nav__item[aria-current="page"],
  .side-tabs .side-nav__item[aria-selected="true"] { background: var(--blue); color: #fff }
  /* 나의 강의실 탭의 개수 뱃지 — 파랑 채움 위에서는 흰색으로.
     격자 칸이 가운데 정렬이라 margin-left:auto 로 밀지 않습니다 */
  .side-tabs .side-nav__item .num { margin-left: 0 }
  .side-tabs .side-nav__item[aria-selected="true"] .num,
  .side-tabs .side-nav__item[aria-current="page"] .num { color: #fff }
}
@media (max-width: 560px) {
  .side-tabs { grid-template-columns: repeat(2, 1fr) }
}

/* 고객센터 상담 블록 — 좁은 화면에서는 페이지 맨 아래로 (2026-08-13, 디자인 요청)
   980 이하에서 사이드바가 본문 위로 쌓이면 탭과 본문 사이에 상담 블록이 끼어,
   정작 보러 온 내용이 한 화면 아래로 밀렸습니다. aside 를 display:contents 로
   풀어 탭 → 본문 → 상담 순으로 재배열합니다 (강의실 좁은 화면과 같은 수법).
   태블릿(561~980)에서는 전화·카카오를 위아래가 아니라 양옆으로 나란히 둡니다. */
@media (max-width: 980px) {
  .support-layout > aside { display: contents }
  .support-layout > aside > .side-tabs { order: 1 }
  .support-layout > div { order: 2 }
  .support-layout > aside > .support-grid--side {
    order: 3; margin-top: 0;
    grid-template-columns: 1fr 1fr;
  }
}
@media (max-width: 560px) {
  .support-layout > aside > .support-grid--side { grid-template-columns: 1fr }
}

/* 1:1 문의 — 문의 유형 옆에 문의 제목 칸 (2026-08-13, 디자인 요청)
   원본 .support-grid(유형·이름·연락처 3칸)는 이름·연락처가 빠지며 안 쓰게 됐고,
   유형(좁게)·제목(넓게) 두 칸을 한 줄에 둡니다. 좁은 화면에서는 세로로 쌓습니다. */
.qna-grid { display: grid; grid-template-columns: 1fr 2fr; gap: var(--s-5) }
@media (max-width: 980px) { .qna-grid { grid-template-columns: 1fr } }

/* 1:1 문의 내역 — 제목 왼쪽 정렬, 상태 배지 너비 통일 (2026-08-13, 디자인 요청)
   .faq__q 가 space-between 이라 제목(익명 flex 항목)이 가운데에 떠 있었습니다.
   제목이 남는 폭을 다 갖게 해 배지 옆에 붙이고, '접수'(2자)도 '답변완료'(4자)와
   같은 너비의 배지가 되도록 고정 폭 + 가운데 정렬을 줍니다. */
.faq--wide .faq__q .qna-item-title { flex: 1; min-width: 0; text-align: left }
.faq--wide .faq__q .badge { flex: none; width: 66px; justify-content: center }

/* 1:1 문의 내역 펼침 — 흰 바탕, 제목/내용/답변을 선으로 구분 (2026-08-13, 디자인 요청)
   자주 묻는 질문과 공유하는 .faq__a 는 회색(surface-sunken) 바탕인데, 문의 내역은
   내용·답변·날짜가 여러 단이라 흰 바탕에 선으로 나누는 쪽이 읽기 쉽습니다.
   제목 줄과 내용 사이는 펼침 영역의 위 선이, 내용과 답변 사이는 <hr> 이 긋습니다. */
.qna-list .faq__a { background: var(--surface) }
.qna-list .faq__a-pad { border-top: 1px solid var(--line) }
.qna-list .faq__a-pad hr {
  border: 0;
  border-top: 1px solid var(--line);
  /* 패딩 밖까지 늘려 위 구분선과 같은 폭으로 */
  margin: 14px -20px;
}
/* 문의일·답변일은 본문을 읽고 난 눈이 멈추는 오른쪽 끝에 둡니다.
   공용 my-card__date 의 margin-bottom(16px)은 여기서는 빼야 마지막 줄 아래
   여백이 패드(16px)만 남아 양옆(20px)과 비슷해 보입니다. */
.qna-list .faq__a-pad .my-card__date { text-align: right; margin-bottom: 0 }

/* 메인 목적 추천 — 넓은 화면에서도 옆으로 흐르는 캐러셀 (2026-08-14, 디자인 요청)
   심리상담 × 60대처럼 딱 맞는 과정이 한둘뿐인 조합에서 화면이 비지 않게,
   같은 목적의 과정을 겹쳐 많이 싣고 자동으로 넘깁니다. 좁은 화면(≤980)은
   전달본 appendix.css 의 .card-grid 스와이프 규칙이 이미 처리하므로,
   여기서는 넓은 화면만 4장씩 한 화면으로 눕힙니다. */
@media (min-width: 981px) {
  .card-carousel {
    grid-template-columns: none; grid-auto-flow: column;
    /* 한 화면에 정확히 4장 — 간격(--s-5) 3개를 빼고 4등분 */
    grid-auto-columns: calc((100% - 3 * var(--s-5)) / 4);
    overflow-x: auto; scroll-snap-type: x proximity;
    scrollbar-width: none; -webkit-overflow-scrolling: touch;
  }
  .card-carousel::-webkit-scrollbar { display: none }
  .card-carousel > * { scroll-snap-align: start }
}
