/* ================================================================
   DESIGN TOKENS — 값 정의는 resource/css/variables.css, 여기선 var()로 참조
   색상/라운드는 아래 토큰에서만 선택 (하드코딩 금지)
   자세한 정의: .claude/DESIGN.md · 스타일가이드: /styleguide.html
   ----------------------------------------------------------------
   [브랜드 블루]  기본 var(--color-primary) · hover var(--color-primary-hover) · pressed var(--color-primary-pressed)
   [뉴트럴 텍스트] ink var(--color-ink) · var(--color-gray-800) · var(--color-gray-700) · var(--color-gray-600) · var(--color-gray-500) · var(--color-gray-400)
   [보더]         강 var(--color-border-strong) (입력/컨트롤) · 약 var(--color-border) (구분선/기본)
   [서페이스]     기본 var(--color-surface) · 최연 var(--color-surface-light) · 쿨패널 var(--color-surface-cool) · 캔버스 var(--color-canvas)
   [블루 틴트]    연 var(--color-tint-50) · 진 var(--color-tint-100) · 라인 var(--color-line)
   [다크 서피스]  bg var(--color-dark-bg) · 카드 var(--color-dark-surface) · 선 var(--color-dark-line) · 본문 var(--color-dark-text) · 보조 var(--color-dark-text-sub) · 앰버 강조 배경 var(--color-amber-dark-bg) (다크 섹션 전용 — 무료인강 히어로·영상 모달·데일리 학습 배너) · 그림자 var(--shadow-dark)
   [시맨틱 배지]  coral var(--color-coral)(bg var(--color-coral-bg)) · rec var(--color-amber)(bg var(--color-amber-bg))
                  new var(--color-badge-new) · mp3 var(--color-green)(bg var(--color-green-bg)) · free var(--color-violet)(bg var(--color-violet-bg))
   [고정 브랜드]  유튜브 var(--color-youtube) · 인스타 var(--color-instagram) · MP3버튼 var(--color-mp3)(hover var(--color-mp3-hover))
   [오버레이]     토스트 bg var(--color-toast-bg) (반투명 다크 네이비) · 딤 var(--color-overlay) (모달·시트·메가메뉴 뒤 — 알파 분기 금지)
   [라운드]       0 · 4 · 6 · 8 · 12 · 14 · 16 · 999(pill) · 50%(circle)
   [그림자]       표지 var(--shadow-cover) · soft var(--shadow-soft) · floating var(--shadow-floating) · 다크 var(--shadow-dark)
                  포커스 링 var(--shadow-focus-ring) · 파란빛 리프트 var(--shadow-lift-blue) / 강 var(--shadow-lift-blue-strong)
   [상태]         비활성 opacity var(--opacity-disabled) (0.35 — 색 교체 없이 연하게 · 슬라이더 화살표)
   [모션]         transition var(--duration-base) var(--ease-default) · transform/opacity 만 사용
   ================================================================ */

/* ========== 스크롤 진입 리빌 — 메인의 스트립 배너부터 아래 섹션만 적용
   (2026-07-24 전면 제거 사유였던 "첫 화면이 비어 보이는 문제"를 피하려고, 첫 화면에 걸리는 메인배너·퀵메뉴·베스트셀러는 제외한다.
   마크업 훅 data-reveal/data-reveal-stagger 는 그대로 두고, main.js 옵저버가 화면에 들어온 요소에 .is-revealed 를 붙인다) ========== */
body[data-page="home"] .strip-banner[data-reveal]:not(.is-revealed), body[data-page="home"] .strip-banner ~ * [data-reveal]:not(.is-revealed), body[data-page="home"] .strip-banner ~ * [data-reveal-stagger]:not(.is-revealed) > * { opacity: 0; transform: translateY(16px); }
body[data-page="home"] .strip-banner[data-reveal], body[data-page="home"] .strip-banner ~ * [data-reveal], body[data-page="home"] .strip-banner ~ * [data-reveal-stagger] > * { transition: opacity 0.5s var(--ease-out), transform 0.5s var(--ease-out); }
@media (prefers-reduced-motion: reduce) { body[data-page="home"] .strip-banner[data-reveal], body[data-page="home"] .strip-banner ~ * [data-reveal], body[data-page="home"] .strip-banner ~ * [data-reveal-stagger] > * { transition: none; } }

/* ========== Layout ========== */
/* 스크롤바 자리를 항상 비워둔다 — 전체 메뉴·모달이 열릴 때 main.js가 body overflow 를 hidden 으로 잠그는데,
   그 순간 스크롤바(15px)가 사라지면서 가운데 정렬된 .container 가 7px 밀려 화면이 좌우로 튀는 문제를 막는다.
   (모바일·태블릿의 오버레이 스크롤바는 자리를 차지하지 않으므로 이 선언의 영향을 받지 않는다) */
html { scrollbar-gutter: stable; }
.container { max-width: 1320px; margin: 0 auto; padding: 0 40px; }

/* ========== Family Bar ========== */
.family-bar { background: transparent; padding: 8px 0 2px 0; }
.family-bar_inner { display: flex; align-items: center; justify-content: space-between; }
.family-bar_utils { display: flex; align-items: center; gap: var(--space-base); }
.family-bar_util-link { font-size: var(--text-2xs); font-weight: var(--font-regular); color: var(--color-gray-700); letter-spacing: -0.2px; transition: color var(--duration-base) var(--ease-default); }
/* 학습지원·고객센터 롤오버 메뉴 — 상단 유틸의 하위 항목을 한 개로 묶음 (hover·키보드 focus 모두 펼침)
   z-index 는 --z-submenu(120) — 전체 메뉴(--z-mega 110)가 열린 상태에서도 드롭다운이 위에 와야 한다.
   (--z-dropdown 50 이면 메가 패널에 가려 아래쪽 항목이 보이지도 클릭되지도 않음) */
.family-cs { position: relative; }
.family-cs_trigger { display: inline-flex; align-items: center; gap: 2px; cursor: pointer; }
.family-cs_arrow { width: 12px; height: 12px; transition: transform var(--duration-base) var(--ease-default); }
.family-cs_menu { position: absolute; top: calc(100% + 6px); right: 0; z-index: var(--z-submenu); min-width: 150px; padding: var(--space-sm) 0; background: var(--color-canvas); border: 1px solid var(--color-border); border-radius: var(--radius-md); box-shadow: var(--shadow-floating); opacity: 0; visibility: hidden; transform: translateY(-4px); transition: opacity var(--duration-base) var(--ease-default), transform var(--duration-base) var(--ease-default), visibility var(--duration-base) var(--ease-default); }
.family-cs:hover .family-cs_menu, .family-cs:focus-within .family-cs_menu { opacity: 1; visibility: visible; transform: translateY(0); }
.header:has(.family-cs:hover, .family-cs:focus-within) { z-index: 220; } /* 드롭다운이 우측 하단 마스코트(z 200·210) 아래로 잘리지 않게 롤오버 중에만 헤더를 위로 */
.family-cs:hover .family-cs_arrow, .family-cs:focus-within .family-cs_arrow { transform: scaleY(-1); } /* 화살표는 회전이 아닌 반전 (프로젝트 공통 관례) */
.family-cs_link { display: block; padding: 7px var(--space-base); font-size: var(--text-2xs); color: var(--color-gray-700); letter-spacing: -0.2px; white-space: nowrap; transition: color var(--duration-base) var(--ease-default), background var(--duration-base) var(--ease-default); }
.family-bar_group { display: inline-flex; align-items: center; gap: var(--space-xs); background: var(--color-surface-light); border-radius: var(--radius-md); padding: var(--space-xs); }
.family-bar_item { display: inline-flex; align-items: center; gap: 3px; padding: 0 13px; height: 26px; font-size: var(--text-xs); font-weight: var(--font-regular); color: var(--color-gray-600); border-radius: var(--radius-sm); transition: color var(--duration-base) var(--ease-default), background var(--duration-base) var(--ease-default); }
.family-bar_item-link { padding: 0 9px; }
.family-bar_item-active { font-weight: var(--font-semibold); color: var(--color-primary); background: var(--color-canvas); }
.family-bar_item-link svg, .family-bar_item-link img { width: 9px; height: 9px; opacity: 0.5; }
/* 기본 노출 상태에서는 첫 항목(어학시험)을 롤오버된 모습으로 보여 준다 — 패밀리 사이트가 있다는 걸 먼저 알린다.
   그룹에 마우스가 들어오면(:not(:hover)가 풀리면서) 이 고정 강조가 사라지고 실제 올린 항목만 반응하며, 떠나면 다시 어학시험으로 돌아온다 */
.family-bar_group:not(:hover) .family-bar_item-link:first-child { color: var(--color-gray-700); background: var(--color-canvas); }
/* 계열사 세그먼트 탭(출판/어학원/인강/어학시험/북샘) — 좌측 노출, 유틸 링크는 우측 (로고 옆 드롭다운 header-family와 병행) */

/* ========== Header ========== */
.header { position: sticky; top: 0; z-index: var(--z-header); background: var(--color-canvas); border-bottom: 1px solid var(--color-border); }
.header-main { display: flex; align-items: center; height: 80px; gap: 24px; }
.header-logo { display: flex; align-items: center; gap: var(--space-sm); flex-shrink: 0; }
.header-logo_img { height: 40px; width: auto; }
.header-logo_family { display: flex; align-items: center; justify-content: center; width: 24px; height: 24px; flex-shrink: 0; }
.header-logo_family img, .header-logo_family svg { width: 14px; height: 14px; opacity: 0.5; }
.header-logo_name { display: none; }
.mega-family { display: none; } /* 전체 메뉴 안 패밀리 사이트 구획 — 모바일 전용(웹은 상단 family-bar), 스타일은 mobile.css */
/* 헤더 MP3 롤링 텍스트 — 웹: 레드 버튼 안에서 텍스트만 롤링 (아이콘은 버튼 자체 아이콘 고정) · 모바일 pill 스타일은 mobile.css */
.mp3-roll { display: block; height: 20px; overflow: hidden; }
.mp3-roll > svg { display: none; } /* 웹은 버튼 자체 아이콘 사용 — 롤 내부 아이콘 숨김 */
.mp3-roll_track { display: flex; flex-direction: column; animation: mp3Roll 5s var(--ease-in-out) infinite; }
.mp3-roll_track > span { display: flex; align-items: center; height: 20px; white-space: nowrap; }
@keyframes mp3Roll { 0%, 42% { transform: translateY(0); } 50%, 92% { transform: translateY(-33.333%); } 100% { transform: translateY(-66.666%); } }
.top-notice { display: none; } /* 최상단 공지 배너 — 모바일 전용, 스타일은 mobile.css */
.mega-m-logout { display: none; } /* 전체 메뉴 하단 로그아웃 — 모바일 전용, 스타일은 mobile.css */
/* ── (구) 패밀리 사이트 텍스트 링크 — 로고 옆 "| 참고서 ↗". .site-toggle로 대체됐고 index-backup.html 전용으로만 보존 ── */
.header-sitenav { display: flex; align-items: center; gap: var(--space-md); flex-shrink: 0; align-self: flex-end; margin: 0 0 15px -8px; } /* 로고 하단(어학수험서 라인) 기준 정렬 — 모바일 최종 위치와 같은 시각 오프셋(이미지 하단 +5px) */
.header-sitenav_divider { width: 1px; height: 14px; background: var(--color-border-strong); }
.header-sitenav_link { display: inline-flex; align-items: center; gap: 2px; font-size: var(--text-md); font-weight: var(--font-medium); color: var(--color-gray-500); letter-spacing: -0.3px; transition: color var(--duration-base) var(--ease-default); }
.header-sitenav_link svg { width: 14px; height: 14px; }
/* ── 사이트 전환 토글 — 구 로고(logo_new.png) 안에 그려져 있던 "어학수험서" 캡슐을 떼어내 두 칸으로 만든 컴포넌트.
     별개 UI가 아니라 로고 워드마크의 일부로 읽혀야 하므로, 원본 이미지에서 캡슐 좌표를 실측해 기준으로 삼았다.
     실측(logo_new.png 595x126): 캡슐 y 76~124 → 하단이 로고 하단과 일치, 높이는 로고의 38.9%.
     다만 원본은 글자까지 그려 넣은 그림이라 그 비율(40px 로고 기준 15.6px)을 그대로 쓰면 읽을 수 없고 답답하다.
     그래서 ① "하단을 로고 하단에 맞춘다"는 실측 규칙을 지키고 ② 높이는 기획대로 로고 "북스" 글자 높이(현 로고 logo_new_v2.png 431x126 에서 글자 y 61~126 → 40px 로고 기준 20.6px)에 맞춘다.
     이 둘을 동시에 만족하면 캡슐 중심이 "북스" 중심과 저절로 겹쳐 세로 가운데 정렬이 된다.
     글자 여백(좌우 12px)과 로고와의 간격 8px은 붙어 보이는 선에서 최소한의 숨통. ── */
.site-toggle { position: relative; display: inline-flex; align-items: center; gap: 0; flex-shrink: 0; align-self: flex-end; margin: 0 0 20px 0; padding: 2px; border: 1px solid var(--color-border-strong); border-radius: var(--radius-pill); } /* 총 높이 21px(2+15+2+테두리2) — 로고 "북스" 글자 높이 실측 20.6px에 맞춤, 캡슐 중심 y=49.5px가 "북스" 중심 y≈49.7px와 일치 · 하단 20px — 헤더 80px 기준으로 캡슐 하단을 로고 하단(y=60px)에 맞춘 실측값 · 좌측 여백은 .header-main 의 gap 을 그대로 쓴다(태블릿 24px, 좁은 태블릿 16px로 자동 축소). 웹은 아래 min-width:1280px 블록에서 이 gap 을 음수 margin 으로 상쇄해 로고에 붙인다 */
.site-toggle_item { position: relative; z-index: 1; display: inline-flex; align-items: center; justify-content: center; height: 15px; padding: 0 8px; border-radius: var(--radius-pill); font-size: var(--text-2xs); font-weight: var(--font-medium); color: var(--color-gray-600); letter-spacing: 0.6px; white-space: nowrap; transition: color var(--duration-base) var(--ease-default); } /* background 은 transition 대상에서 뺀다 — 알약이 자리를 넘겨받고 돌려주는 순간이 부드러우면 오히려 파란색이 겹쳐 깜빡인다 */
.site-toggle_item-active { background: var(--color-primary); color: var(--color-canvas); cursor: default; } /* 트랙 안쪽 여백 2px 덕에 파란 알약이 테두리에 닿지 않고 떠 있다 */
@media (min-width: 1280px) { .site-toggle { margin-bottom: 18px; margin-left: calc(var(--space-md) / 2 - var(--space-xl)); } } /* 웹 전용 ① 로고와 살짝 띄운다 — .header-main 의 gap(24px)을 음수 마진으로 걷어내고 6px 만 남긴다(간격 스케일에 6px 토큰이 없어 12px 의 절반으로 적는다). 로고 이미지 우측에 딸려 오는 여백 9.8px 이 더해져 눈으로는 "북스" 글자에서 약 16px 떨어져 보인다 ② 하단 18px — 아래 .site-toggle_item 18px 와 합쳐 캡슐 총 높이 24px, 중심 y=50px 로 "북스" 중심 y≈49.7px 를 그대로 유지. 태블릿·모바일은 기본값(높이 21px · gap 24px) 유지 */
@media (min-width: 1280px) { .site-toggle_item { height: 18px; } } /* 웹만 캡슐을 21 → 24px 로 키운 만큼 칸 높이도 15 → 18px */
/* 슬라이드 알약 — 위치·크기는 JS가 실측해서 넣는다(두 칸의 글자 수가 달라 폭이 다르다).
   position:absolute 라 폭이 바뀌어도 문서 레이아웃은 다시 계산되지 않는다 */
.site-toggle_thumb { position: absolute; top: 0; left: 0; z-index: 0; width: 0; height: 0; background: var(--color-primary); border-radius: var(--radius-pill); opacity: 0; pointer-events: none; transition: transform var(--duration-slow) var(--ease-in-out), width var(--duration-slow) var(--ease-in-out); }
.site-toggle.is-sliding .site-toggle_thumb { opacity: 1; }
.site-toggle.is-sliding .site-toggle_item-active { background: none; } /* 이동 중엔 알약이 파란 배경을 맡는다 */
.site-toggle.is-sliding .site-toggle_item { transition: color var(--duration-slow) var(--ease-in-out); } /* 글자색 전환 속도를 알약 이동 속도에 맞춤 */
/* ── (구) 패밀리 드롭다운 — 헤더 인라인 백업본(index-backup.html)용 보존 ── */
.header-family { position: relative; display: flex; align-items: center; align-self: flex-end; margin: 0 0 8px -6px; flex-shrink: 0; } /* 화살표를 로고의 '어학수험서' 박스 라인(하단) 옆에 배치 */
.header-family_btn { display: flex; align-items: center; justify-content: center; width: 28px; height: 28px; color: var(--color-gray-700); border: 1px solid var(--color-border-strong); border-radius: 50%; transition: color var(--duration-base) var(--ease-default), border-color var(--duration-base) var(--ease-default); }
.header-family_btn svg { width: 15px; height: 15px; color: var(--color-gray-500); stroke-width: 2.5px; transition: transform var(--duration-base) var(--ease-default), color var(--duration-base) var(--ease-default); }
.header-family_btn[aria-expanded="true"] svg { color: var(--color-primary); }
.header-family_btn[aria-expanded="true"] svg { transform: scaleY(-1); }
.header-family_panel { position: absolute; top: calc(100% + 8px); left: 0; z-index: var(--z-drawer); min-width: 140px; padding: 6px; background: var(--color-canvas); border: 1px solid var(--color-border); border-radius: var(--radius-lg); box-shadow: 0 8px 24px rgba(0,0,0,0.1); }
.header-family_link { display: block; padding: 9px 12px; border-radius: var(--radius-md); font-size: var(--text-sm); font-weight: var(--font-regular); color: var(--color-gray-700); letter-spacing: -0.2px; white-space: nowrap; transition: background var(--duration-base) var(--ease-default), color var(--duration-base) var(--ease-default); }
.header-family_link-active { font-weight: var(--font-semibold); color: var(--color-primary); background: var(--color-tint-50); }
.header-search { flex: 1; max-width: 860px; display: flex; align-items: center; gap: var(--space-2xl); margin-left: 24px; }
.header-search_bar { position: relative; flex: 1; max-width: 620px; }
.header-search_input { width: 100%; height: 48px; padding: 0 52px 0 20px; background: var(--color-canvas); border: 1px solid var(--color-border-strong); border-radius: var(--radius-pill); font-size: var(--text-sm); font-weight: var(--font-regular); color: var(--color-ink); letter-spacing: -0.2px; outline: none; transition: border-color var(--duration-base) var(--ease-default), box-shadow var(--duration-base) var(--ease-default); }
.header-search_input::placeholder { color: var(--color-gray-600); } /* 모바일과 동일 톤으로 진하게 (2026-07-24, 기존 gray-400) */
.header-search_input:focus { border-color: var(--color-primary); box-shadow: var(--shadow-focus-ring); }
.header-search_btn { position: absolute; right: 16px; top: 50%; transform: translateY(-50%); display: flex; align-items: center; justify-content: center; width: 24px; height: 24px; color: var(--color-gray-700); transition: color var(--duration-base) var(--ease-default); }
.header-search_btn img, .header-search_btn svg { width: 20px; height: 20px; }
.header-search_ad { width: 180px; height: 48px; border-radius: var(--radius-xs); flex-shrink: 0; overflow: hidden; position: relative; background: var(--color-border); } /* 이미지를 못 불러오면 img 를 숨기고(onerror) 회색 자리만 보인다 — 카테고리 메인배너와 같은 방식 */
.mini-banner_item { position: absolute; top: 0; left: 0; width: 100%; height: 100%; opacity: 0; transition: opacity 0.4s ease; display: block; }
.mini-banner_item-active { opacity: 1; }
.mini-banner_item img { width: 100%; height: 100%; object-fit: cover; display: block; }
.header-hamburger { display: none; }
.header-search-icon { display: none; }
.header-utils { display: flex; align-items: center; gap: var(--space-base); margin-left: auto; flex-shrink: 0; }
.header-util_link { display: flex; align-items: center; gap: 6px; font-size: var(--text-sm); font-weight: var(--font-medium); color: var(--color-gray-700); white-space: nowrap; transition: color var(--duration-base) var(--ease-default); }
.header-util_link[hidden] { display: none; } /* 로그인/로그아웃 스왑 — hidden이 display:flex에 지지 않게 명시 */
.header-util_link img, .header-util_link svg { width: 16px; height: 16px; }
.header-util_chevron { width: 12px; height: 12px; }
.header-util_sep { width: 1px; height: 16px; background: var(--color-border); }
.header-util_mp3 { display: flex; align-items: center; gap: var(--space-sm); height: 40px; padding: 0 16px; background: var(--color-mp3); border-radius: var(--radius-lg); font-size: var(--text-sm); font-weight: var(--font-semibold); color: var(--color-canvas); white-space: nowrap; transition: background var(--duration-base) var(--ease-default); }
.header-util_mp3 svg { width: 16px; height: 16px; color: var(--color-canvas); opacity: 1; }
.header-util_mp3 > span:not(.mp3-roll) { display: none; } /* 정적 라벨 대신 롤링 텍스트 사용 */
.header-util_mp3-icon { display: none; }

/* ================================================================
   MP3 음원 버튼 — 헤더에서 가장 먼저 눈에 들어오게 (전 페이지 공통 · 웹·태블릿)
   ----------------------------------------------------------------
   눈에 띄게 만드는 장치를 네 겹으로 나눠 얹었습니다.
   하나를 세게 주면 촌스러워지므로, 약한 것 여럿을 겹치는 쪽을 택했습니다.

   1) 흐르는 색 띠(::before) — 색이 살아 움직인다
      버튼보다 훨씬 넓은(220%) 그라데이션 띠를 깔고 좌우로 미끄러뜨립니다.
      창문(버튼)은 가만히 있는데 그 뒤로 긴 그림이 지나가는 셈입니다.
      9초 왕복 · 좌우 22% — 흐름은 분명히 보이되 번쩍이지는 않는 선.

   2) 지나가는 광택(::after) — 시선을 한 번씩 끌어온다
      얇은 흰 빛줄기가 6초에 한 번, 1초 남짓 동안 버튼을 훑고 지나갑니다.
      나머지 5초는 버튼 밖에서 숨어 기다립니다. 계속 번쩍이면 싸구려로 보이고,
      가끔 한 번 스치면 고급스러워 보이는 차이가 여기서 납니다.

   3) 레드 글로우(box-shadow) — 버튼이 헤더 위로 떠오른다
      버튼과 같은 색의 빛을 아래로 은은히 깔아 평면이 아닌 '떠 있는 것'으로 보이게 합니다.

   4) 윗면 하이라이트(inset) — 유리알 같은 입체감
      위쪽 1px에만 흰 선을 넣어 빛이 위에서 떨어지는 느낌을 만듭니다.

   [왜 배경이 아니라 transform 으로 움직이나]
   background-position 을 움직이면 브라우저가 매 프레임 색을 다시 칠해야 합니다.
   transform 은 이미 그려 둔 그림을 옮기기만 해서 훨씬 가볍고 부드럽습니다.

   [z-index: -1 과 isolation 한 쌍]
   띠와 광택을 글자 뒤로 보내려고 z-index:-1 을 주는데, 그대로 두면 이들이 버튼을 뚫고
   페이지 배경까지 내려가 안 보일 수 있습니다. isolation:isolate 가 버튼 안에
   '층 구분 상자'를 만들어 밖으로 못 빠져나가게 잡아 줍니다.
   ================================================================ */
@media (min-width: 768px) { /* 웹 + 태블릿 — 태블릿도 웹과 같은 빨간 글자 버튼이라 같은 효과를 준다(모바일은 mobile.css 의 .mp3-roll 이 따로 그린다) */

  .header-util_mp3 { position: relative; overflow: hidden; isolation: isolate; box-shadow: var(--mp3-lift), var(--mp3-inner); }
  .header-util_mp3::before { content: ""; position: absolute; top: 0; bottom: 0; left: -60%; z-index: -1; width: 220%; background: linear-gradient(100deg, var(--mp3-deep) 0%, var(--mp3-base) 30%, var(--mp3-bright) 50%, var(--mp3-base) 70%, var(--mp3-deep) 100%); animation: mp3Flow 9s var(--ease-in-out) infinite; }
  /* 광택 — 버튼 왼쪽 밖(-45%)에서 출발해 오른쪽 밖까지 훑고 지나간다. 사선(105deg)이라 유리에 빛이 스치는 모양이 된다 */
  .header-util_mp3::after { content: ""; position: absolute; top: 0; bottom: 0; left: -45%; z-index: -1; width: 26%; background: linear-gradient(105deg, rgba(255,255,255,0) 0%, rgba(255,255,255,0.42) 50%, rgba(255,255,255,0) 100%); animation: mp3Shine 6s linear infinite; }
  /* 마우스를 올리면 빛이 더 번지고 색도 살짝 밝아진다 — 크기는 움직이지 않는다(헤더에서 들썩이면 산만하다) */
  .header-util_mp3:hover { box-shadow: var(--mp3-glow), var(--mp3-inner); }
  .header-util_mp3:hover::before { filter: brightness(1.08); }
}

@keyframes mp3Flow {
  0%, 100% { transform: translateX(-22%); }
  50% { transform: translateX(22%); }
}

/* 6초 주기 — 0~9%(약 0.54초)에 일정한 속도(linear)로 훑고 끝까지 빠져나간다. ease-out이면 끝에서 느려져 버튼 가장자리에 걸려 멈춘 것처럼 보임 */
@keyframes mp3Shine {
  0% { transform: translateX(0); opacity: 1; }
  9% { transform: translateX(600%); opacity: 1; }
  9.5%, 100% { transform: translateX(600%); opacity: 0; } /* 대기 중엔 투명 — 모바일에서 둥근 모서리 잘라내기가 가끔 실패해 끝에 멈춘 광택이 보이는 문제 방지 */
}

/* 움직임 최소화 설정 존중 — 흐르는 그라데이션은 멈추고 색만 남긴다 */
@media (prefers-reduced-motion: reduce) {
  .header-util_mp3::before { animation: none; }
  .header-util_mp3::after { animation: none; opacity: 0; }
}

/* ========== GNB ========== */
.gnb { border-top: 1px solid var(--color-border); }
.gnb-inner { display: flex; align-items: center; height: 68px; gap: 0; }
.gnb-hamburger { order: 1; display: flex; flex-direction: column; align-items: center; justify-content: center; gap: 5px; width: 40px; height: 40px; flex-shrink: 0; margin-left: auto; border-radius: var(--radius-sm); } /* 막대를 박스 중앙에 — flex-end 면 40px 박스 안에서 18px 아이콘이 11px 치우쳐 키보드 포커스링이 어긋나 보인다 */
.gnb-hamburger_bar { display: block; width: 18px; height: 2px; background: var(--color-ink); border-radius: 1px; transition: transform 0.25s ease, opacity var(--duration-fast) var(--ease-default); }
.gnb-hamburger.is-open .gnb-hamburger_bar:nth-child(1) { transform: translateY(7px) rotate(45deg); }
.gnb-hamburger.is-open .gnb-hamburger_bar:nth-child(2) { opacity: 0; transform: scaleX(0); }
.gnb-hamburger.is-open .gnb-hamburger_bar:nth-child(3) { transform: translateY(-7px) rotate(-45deg); }
.gnb-nav { display: flex; align-items: center; flex: 1; gap: 0; }
.gnb-nav > li:first-child .gnb-link { padding-left: 0; }
.gnb-nav > li:first-child .gnb-link::after { left: 0; }
.gnb-link { padding: 0 18px; height: 68px; display: flex; align-items: center; font-size: var(--text-lg); font-weight: var(--font-medium); color: var(--color-ink); letter-spacing: -0.2px; white-space: nowrap; transition: color var(--duration-base) var(--ease-default), transform var(--duration-base) var(--ease-default); position: relative; }
.gnb-link::after { content: ""; position: absolute; bottom: 0; left: 14px; right: 14px; height: 2px; background: var(--color-primary); opacity: 0; transition: opacity var(--duration-base) var(--ease-default); }
.gnb-link_icon { flex-shrink: 0; margin-right: 5px; }
.gnb-sep { width: 1px; height: 16px; background: var(--color-border); margin: 0 8px; flex-shrink: 0; }
/* 좌측 강조 그룹(베스트셀러·신간도서·토익 라운지) — 카테고리와 같은 크기, 블루 */
.gnb-link-blue { font-size: var(--text-base); color: var(--color-primary); }
/* 토익 레드 포인트 — 대표 카테고리(레드 강조 + 우상단 점) · 활성 상태에서도 레드 유지 */
.gnb-link-point, .gnb-link-point.gnb-link-active { color: var(--color-mp3); }
.gnb-link-point::after, .gnb-link-point.gnb-link-active::after { background: var(--color-mp3); }
.gnb-point-dot { position: relative; top: -12px; display: inline-block; width: 5px; height: 5px; margin-left: 1px; vertical-align: top; border-radius: 50%; background: var(--color-mp3); }
/* 영역 경계 여백 — 토익(카테고리)·무료인강(유틸) 앞 li 에 붙여 auto 여백 2개가 남는 공간을 균등 분배 → 3영역 사이 간격 동일 */
.gnb-nav-gap { margin-left: 26px; }
/* 공식스토어 — 새 창으로 열리는 외부 링크. 상단 패밀리바와 동일한 새창 아이콘을 글자 뒤에 붙인다 */
.gnb-link-store img { margin-left: 3px; vertical-align: 1px; }

/* 와옹's PICK! GNB 롤링 — [텍스트] ↔ [와옹 얼굴 + PICK!] 이 위로 올라가며 교차 (mp3-roll과 동일 패턴) */
.waong-roll { display: block; height: 28px; overflow: hidden; }
.waong-roll_track { display: flex; flex-direction: column; animation: waongRoll 5s var(--ease-in-out) 1.25s infinite; } /* MP3 버튼 롤링과 반 박자 어긋나게 — 버튼 먼저, 와옹이 그 다음 (핑퐁 교차) */
.waong-roll_item { display: flex; align-items: center; justify-content: center; gap: 4px; height: 28px; white-space: nowrap; }
.waong-roll_item img { width: 28px; height: 28px; }
@keyframes waongRoll { 0%, 42% { transform: translateY(0); } 50%, 92% { transform: translateY(-33.333%); } 100% { transform: translateY(-66.666%); } }
@media (prefers-reduced-motion: reduce) { .waong-roll_track { animation: none; } }
/* 우측 유틸 그룹(무료인강·레벨테스트·학습로드맵) — 기존 작은 크기, 뮤트 그레이 */
.gnb-util-link { padding: 0 14px; height: 68px; display: flex; align-items: center; font-size: var(--text-md); font-weight: var(--font-medium); color: var(--color-gray-500); letter-spacing: -0.2px; white-space: nowrap; transition: color var(--duration-base) var(--ease-default), transform var(--duration-base) var(--ease-default); }

/* ================================================================
   스크롤 슬림 헤더 — 3줄 헤더가 한 줄 '슬림 바'로 재편성 (body[data-header="slim"] 페이지 공통)
   ----------------------------------------------------------------
   [무엇을 하나]
   맨 위에서는 지금 그대로 3줄(패밀리바 · 로고줄 · GNB)입니다.
   스크롤을 조금 내리면 위·아래 줄이 접혀 사라지고 가운데 줄만 남으면서,
   배경이 반투명해지고 그 뒤로 지나가는 본문이 뿌옇게(블러) 비칩니다.

   [슬림 바 구성] 로고 · 검색창 · 로그인 · 마이페이지 · MP3 버튼 · 햄버거
   [슬림에서 빠지는 것] 패밀리바 · GNB · 참고서 링크 · 미니배너

   [왜 fixed 로 바꾸나 — 중요]
   원래 헤더는 position:sticky 라 문서 안에서 제 높이(약 186px)만큼 자리를 차지합니다.
   그 상태로 높이를 줄이면 줄어든 만큼 본문이 위로 '툭' 튀어 오릅니다.
   그래서 헤더를 화면 붙박이(fixed)로 두고, 본문 맨 위에 헤더 높이만큼
   빈 자리(padding-top)를 만들어 둡니다.
   본문이 헤더 '뒤로' 지나가게 되므로 블러도 이때 비로소 살아납니다.

   [높이 값]
   --header-h / --header-familybar-h / --header-gnb-h 는 main.js 가 실제 헤더를 재어
   넣어 줍니다. 아래 값은 글꼴이 늦게 뜨는 아주 짧은 순간에만 쓰이는 예비값입니다.

   [적용 범위] 웹·태블릿·모바일 전부. 폭이 좁아지면 로그인·마이페이지를 빼고,
   검색창을 줄이거나(태블릿) 돋보기 버튼으로 접어(모바일) 한 줄에 들여보낸다.
   브레이크포인트별 조정은 이 블록 바로 아래 두 개의 @media 에 모아 두었다.
   ================================================================ */

/* 슬림 헤더 값 — 반투명 흰색·블러 세기는 전역 토큰에 없어 여기 한 곳에 모아 둔다. 높이 3종은 main.js 가 실측해 덮어쓴다 */
body[data-header="slim"] { --header-h: 186px; --header-now: var(--header-h); --header-familybar-h: 36px; --header-gnb-h: 69px; --header-slim-h: 68px; --header-slim-gnb-h: 44px; --header-slim-bg: rgba(255,255,255,0.72); --header-slim-blur: blur(16px) saturate(1.6); }

/* ── 헤더 고정 + 본문 자리 확보 ── */
body[data-header="slim"] .header { position: fixed; left: 0; right: 0; transition: background var(--duration-slow) var(--ease-in-out), border-color var(--duration-slow) var(--ease-in-out), box-shadow var(--duration-slow) var(--ease-in-out); }
body[data-header="slim"] { padding-top: var(--header-h); } /* 헤더가 붙박이라 문서에서 자리를 비우므로 본문 맨 위에 그 높이만큼 빈 자리를 만든다. main 앞에 히어로·리본이 오는 페이지(와옹's PICK 등)도 함께 밀리도록 body 에 준다 */

/* ── 헤더 아래에 붙어 서는 사이드 필터(검색·학습자료실) ──
   --header-now 는 main.js 가 매 순간 적어 두는 '지금 헤더 키'다. 3줄이든 슬림이든 늘 헤더 바로 밑에 서고,
   화면보다 길어지면 남은 높이 안에서 스스로 스크롤한다(원래 값 top:80px 는 3줄 헤더 194px 에 가려져 있었다). */
body[data-header="slim"] .search-filter { top: calc(var(--header-now) + var(--space-base)); max-height: calc(100vh - var(--header-now) - var(--space-xl)); }

/* ── 접히는 두 줄 ──
   transform 이 아니라 height 를 줄이는 이유: 두 줄이 실제로 자리를 비켜 줘야
   가운데 줄이 화면 맨 위로 올라붙습니다. 헤더는 fixed 라 본문 레이아웃은 흔들리지 않습니다.
   패밀리바의 overflow 는 슬림일 때만 hidden — 평소엔 학습지원·고객센터 드롭다운이 잘리면 안 됩니다. */
body[data-header="slim"] .family-bar { height: var(--header-familybar-h); transition: height var(--duration-slow) var(--ease-in-out), padding var(--duration-slow) var(--ease-in-out), opacity var(--duration-slow) var(--ease-in-out); }
body[data-header="slim"] .gnb { height: var(--header-gnb-h); overflow: hidden; transition: height var(--duration-slow) var(--ease-in-out), padding var(--duration-slow) var(--ease-in-out), opacity var(--duration-slow) var(--ease-in-out), border-color var(--duration-slow) var(--ease-in-out); }
body[data-header="slim"].is-slim .family-bar { height: 0; padding-top: 0; padding-bottom: 0; opacity: 0; overflow: hidden; }
/* ── 3줄로 되돌아올 때도 같은 0.3초 동안 부드럽게 ──
   예전에는 되돌아올 때만 전환을 꺼서 '툭' 하고 제자리에 놓았다. 계열사 탭줄이 아직 낮은 상태에서
   내용부터 삐져나와 바로 아래 로고와 겹쳐 보였기 때문인데, 진짜 원인은 높이가 아니라 overflow 였다 —
   슬림이 풀리는 순간 잘라 두던 게 곧바로 풀려서, 아직 다 자라지 않은 줄 밖으로 탭이 비어져 나왔다.
   그래서 이제는 전환을 끄는 대신 '되돌아오는 0.3초 동안만' 계속 잘라 둔다. 줄이 다 자란 뒤 잘림이 풀리므로
   겹침 없이 늘어나는 모습이 그대로 보인다(클래스는 main.js 가 붙였다가 0.3초 뒤 뗀다).
   평소에는 잘라 두면 안 된다 — 학습지원·고객센터 드롭다운이 줄 밖으로 펼쳐지기 때문이다. */
body[data-header="slim"].is-unslim .family-bar { overflow: hidden; }
/* ── 높이를 재는 찰나에만 전환을 끈다 ──
   main.js 가 '다 펼쳤을 때의 참 높이'를 재려고 잠깐 붙였다 바로 떼는 클래스다(같은 프레임 안에서 끝나므로 눈에 보이지 않는다).
   전환이 살아 있는 채로 재면 자라는 도중의 높이가 그대로 CSS 변수에 굳어, 헤더가 낮아진 채 멈춘다. */
body[data-header="slim"].is-measuring .family-bar, body[data-header="slim"].is-measuring .gnb, body[data-header="slim"].is-measuring .gnb-inner, body[data-header="slim"].is-measuring .gnb-link, body[data-header="slim"].is-measuring .header-main, body[data-header="slim"].is-measuring .header-logo_img, body[data-header="slim"].is-measuring .site-toggle { transition: none; }

/* ── GNB 는 접지 않고 '얇게' 남긴다 ──
   슬림에서도 전체 메뉴를 열지 않고 과목으로 바로 갈 수 있어야 하므로 한 줄을 유지한다.
   항목(12개)과 마크업은 그대로 두고 줄 높이(68px→44px)와 글자만 한 단계씩 낮춰 슬림한 인상을 만든다.
   높이는 CSS 변수라 브레이크포인트마다 아래 @media 에서 다시 잡아 준다(태블릿 40px · 모바일 36px). */
/* GNB 줄(바깥 상자)만 0.3초에 걸쳐 자라고 그 안의 메뉴는 곧바로 원래 높이로 돌아가면,
   아직 다 자라지 않은 줄에 큰 메뉴가 갇혀 아래가 잘린 것처럼(=여백이 좁아 보이게) 지나간다.
   그래서 안쪽 줄과 메뉴 링크도 같은 시간 동안 함께 자라고 줄어들게 한다 — 늘 세로 가운데를 지킨다.
   .gnb-link 는 pc.css 에 이미 색·움직임 전환이 있어, 그 두 줄을 그대로 옮겨 적고 높이·여백만 덧붙인다(빠뜨리면 hover 효과가 사라진다). */
body[data-header="slim"] .gnb-inner { transition: height var(--duration-slow) var(--ease-in-out); }
body[data-header="slim"] .gnb-link { transition: color var(--duration-base) var(--ease-default), transform var(--duration-base) var(--ease-default), height var(--duration-slow) var(--ease-in-out), padding var(--duration-slow) var(--ease-in-out); }
body[data-header="slim"].is-slim .gnb { height: var(--header-slim-gnb-h); }
/* GNB 줄은 슬림에서도 접지 않는다 — 스크롤을 내리든 올리든 늘 같은 자리에 보인다
   (예전에는 내리면 접고 올리면 폈지만, 읽는 중에 메뉴가 사라졌다 나타나는 편이 더 산만했다) */
body[data-header="slim"].is-slim .gnb-inner { height: var(--header-slim-gnb-h); }
body[data-header="slim"].is-slim .gnb-link { height: var(--header-slim-gnb-h); padding: 0 14px; font-size: var(--text-base); }
body[data-header="slim"].is-slim .gnb-nav > li:first-child .gnb-link { padding-left: 0; } /* 좌우 패딩을 줄이면 첫 항목의 '왼쪽 0' 규칙(pc.css)과 특정도가 같아져 밀린다 — 여기서 다시 붙여 준다 */
body[data-header="slim"].is-slim .gnb-link-blue { font-size: var(--text-md); }
/* 글자가 작아진 만큼 오른쪽에 빈자리가 남아 메뉴가 왼쪽으로 몰려 보인다.
   space-between 은 남는 폭을 항목 '사이사이'에 똑같이 나눠 준다 — 첫 항목은 로고 선에,
   마지막 항목은 햄버거 앞에 딱 붙고 그 사이 간격이 모두 같아진다.
   폭이 좁아 항목이 넘치는 태블릿·모바일에서는 나눠 줄 여백이 없으므로 저절로 무시된다(가로 스크롤 유지). */
body[data-header="slim"].is-slim .gnb-nav { justify-content: space-between; }
body[data-header="slim"].is-slim .gnb-nav-gap { margin-left: 0; } /* 과목 ↔ 큐레이션 구분 간격(26px)은 뺀다 — 간격을 고르게 두는 게 목적이고, 구분은 파란 글자색이 이미 해 준다 */

/* ── 가운데 줄 = 슬림 바 본체 — 높이·로고·검색창·MP3 버튼이 함께 작아진다 ── */
body[data-header="slim"] .header-main { transition: height var(--duration-slow) var(--ease-in-out), gap var(--duration-slow) var(--ease-in-out); }
body[data-header="slim"] .header-logo_img { transition: height var(--duration-slow) var(--ease-in-out); }
body[data-header="slim"] .header-search_input { transition: height var(--duration-slow) var(--ease-in-out), border-color var(--duration-base) var(--ease-default), box-shadow var(--duration-base) var(--ease-default), background var(--duration-base) var(--ease-default); }
body[data-header="slim"] .header-util_mp3 { transition: height var(--duration-slow) var(--ease-in-out), padding var(--duration-slow) var(--ease-in-out), background var(--duration-base) var(--ease-default), box-shadow var(--duration-base) var(--ease-default); }
body[data-header="slim"].is-slim .header-main { height: var(--header-slim-h); gap: var(--space-base); }
body[data-header="slim"].is-slim .header-logo_img { height: 28px; }
/* 사이트 전환 토글은 평소(헤더 80px)엔 로고 "북스" 글자와 높이·중심을 맞춰 서 있다(pc.css 참조).
   슬림 바는 높이(웹 68px · 태블릿 62px)와 로고(28px)가 함께 줄어 그 값이 더는 맞지 않으므로, 슬림 전용으로 다시 맞춘다.
   실측: 로고 28px 기준 "북스" 글자는 높이 14.44px, 아래끝이 로고 아래끝과 일치 → 웹 슬림에서 중심 y=40.78px.
   캡슐 크기는 그대로 두고 아래 여백만 15px 로 줘서 중심 y=41px 로 겹친다(태블릿은 아래 1279px 블록에서 14px) */
body[data-header="slim"].is-slim .site-toggle { align-self: flex-end; margin-bottom: 15px; }
/* 슬림 바는 .header-main 의 gap 이 24px → 16px 로 좁아진다. 3줄일 때와 같은 6px 로 맞추려고 그 16px 을 걷어내고 6px 만 남긴다
   (태블릿은 pc.css 의 태블릿 보정 -16px 이 이미 얹혀 실질 간격 0 — 건드리지 않는다) */
@media (min-width: 1280px) { body[data-header="slim"].is-slim .site-toggle { margin-left: calc(var(--space-md) / 2 - var(--space-base)); } }
/* 로고와 검색창 사이를 띄운다 — 실제 간격은 .header-main 의 gap(16px) + 이 margin(32px) = 48px */
body[data-header="slim"].is-slim .header-search { margin-left: var(--space-2xl); gap: 0; }
body[data-header="slim"].is-slim .header-search_bar { max-width: 440px; }
/* 검색창은 흰 바탕 + 테두리 한 줄로 — 반투명 헤더(흰색 72%)와 회색 면(#f7f7f7)은 밝기가 거의 같아
   면으로만 구분하면 입력칸이 헤더에 묻혀 버린다. 순백 바탕이 반투명 헤더보다 밝아 저절로 떠오르고,
   테두리가 "여기에 쓰는 칸"이라는 경계를 그어 준다.
   포커스하면 테두리만 파랗게 바뀐다(바탕은 이미 흰색이라 그대로). */
body[data-header="slim"].is-slim .header-search_input { height: 46px; background: var(--color-canvas); border-color: var(--color-border-strong); }
body[data-header="slim"].is-slim .header-search_input:focus { border-color: var(--color-primary); }
body[data-header="slim"].is-slim .header-util_mp3 { height: 40px; padding: 0 var(--space-md); }

/* 슬림에서 빠지는 요소들 */
body[data-header="slim"].is-slim .header-search_ad { display: none; }

/* ── 슬림에서는 전체 메뉴 입구를 가운데 줄로 옮긴다 ──
   슬림 GNB 줄은 스크롤을 내리면 접히므로, 그 줄에 세워 둔 햄버거도 함께 사라진다.
   전체 메뉴로 가는 길이 끊기면 안 되니 항상 보이는 가운데 줄(검색줄) 오른쪽 끝으로 옮기고,
   GNB 줄의 햄버거는 숨긴다 — 같은 입구가 둘이면 헷갈리고, 메뉴만 남은 GNB 줄은 폭을 다 쓸 수 있다.
   버튼 자체는 공통 헤더에 이미 있고 웹에서 숨겨져 있던 것이라 마크업은 그대로 쓴다.
   order:1 → 다른 형제(기본 order:0)보다 뒤, 즉 맨 오른쪽에 선다. */
body[data-header="slim"].is-slim .header-hamburger { order: 1; display: flex; flex-direction: column; align-items: center; justify-content: center; gap: 5px; width: 40px; height: 40px; flex-shrink: 0; border-radius: var(--radius-sm); }
body[data-header="slim"].is-slim .header-hamburger_bar { display: block; width: 18px; height: 2px; background: var(--color-ink); border-radius: 1px; transition: transform var(--duration-base) var(--ease-default), opacity var(--duration-fast) var(--ease-default); }
body[data-header="slim"].is-slim .header-hamburger.is-open .header-hamburger_bar:nth-child(1) { transform: translateY(7px) rotate(45deg); }
body[data-header="slim"].is-slim .header-hamburger.is-open .header-hamburger_bar:nth-child(2) { opacity: 0; transform: scaleX(0); }
body[data-header="slim"].is-slim .header-hamburger.is-open .header-hamburger_bar:nth-child(3) { transform: translateY(-7px) rotate(-45deg); }
body[data-header="slim"].is-slim .gnb-hamburger { display: none; }

/* ── 반투명 + 뒤 배경 블러 (레퍼런스: retellai.com) ──
   backdrop-filter 는 '내 뒤에 있는 그림'에 거는 필터입니다. 그래서 배경이
   완전히 불투명하면 아무 효과가 없고, 위처럼 반투명일 때만 보입니다. */
/* 아래 테두리는 색만 지우지 않고 두께까지 0 으로 둔다 — 투명한 1px 이 남아 있으면 활성 메뉴의 파란 밑줄이
   헤더 바닥(그림자가 시작되는 선)에서 한 칸 떠 보인다. 두께를 없애면 밑줄이 바닥에 딱 붙어 그림자로 이어진다. */
body[data-header="slim"].is-slim .header { background: var(--header-slim-bg); border-bottom-width: 0; box-shadow: var(--shadow-soft); -webkit-backdrop-filter: var(--header-slim-blur); backdrop-filter: var(--header-slim-blur); }
/* 전체 메뉴가 열리면 뒤가 비쳐 어수선하므로 흰 배경으로 되돌립니다 */
body[data-header="slim"].is-slim.mega-open .header { background: var(--color-canvas); -webkit-backdrop-filter: none; backdrop-filter: none; }
/* 무료인강은 본문 바탕이 어두워(--color-dark-bg) 그 어둠이 유리 헤더에 그대로 비쳐 메뉴 글자가 묻힌다 — 이 페이지만 흰 바탕으로 세운다 */
body[data-page="free-lecture"][data-header="slim"].is-slim .header { background: var(--color-canvas); -webkit-backdrop-filter: none; backdrop-filter: none; }

/* ── 슬림 헤더 + 그 아래 붙은 카테고리 2뎁스 탭은 '한 덩어리'로 보이게 ──
   둘은 서로 다른 요소라 각자 그림자·블러를 가지면 두 영역으로 갈라져 보인다.
   ① 그림자는 맨 아래(탭)에만 — 헤더 아래 한 줄, 탭 아래 또 한 줄로 겹치던 것을 한 줄로.
   ② 블러는 아예 쓰지 않고 둘 다 불투명 흰 바탕으로 — 블러는 '내 뒤에 있는 그림'에 거는 필터라
      헤더 뒤와 탭 뒤의 내용이 다르면 같은 값을 줘도 서로 다른 색으로 비쳐 경계가 드러난다.
   ③ 둘 사이는 로고 밑(.gnb 위)과 똑같은 1px 라인으로만 나눈다 — 면이 아니라 선으로 구분.
      이 라인은 탭이 아니라 GNB 줄이 '안쪽 그림자'로 그린다. 활성 메뉴의 파란 밑줄(2px)이
      GNB 박스 맨 아래에 붙어 있어서, 라인이 박스 밖(탭 위쪽 테두리)에 있으면 파란 줄이 회색 줄 위에
      한 칸 떠 보였다. 같은 박스 안에 그려 두면 파란 밑줄이 그 자리를 덮어, 회색 라인 중
      지금 보고 있는 메뉴 구간만 파랗게 바뀐 것처럼 이어진다.
      (GNB 는 overflow:hidden 이라 밑줄을 밖으로 내리는 방법은 쓸 수 없다 — 잘려 나간다) */
body[data-header="slim"].is-slim:has(.cat-tabs.is-stuck) .header { background: var(--color-canvas); box-shadow: none; -webkit-backdrop-filter: none; backdrop-filter: none; }
body[data-header="slim"].is-slim:has(.cat-tabs.is-stuck) .gnb { box-shadow: inset 0 -1px 0 var(--color-border); }
body[data-header="slim"].is-slim .cat-tabs.is-stuck { background: var(--color-canvas); }

/* ── 도서 상세의 책 탭도 같은 원칙으로 ──
   책 탭은 회색 바탕(--color-surface-light)이라 흰 헤더와 색으로 이미 나뉜다. 그래서 라인은 더하지 않고
   그림자만 정리한다 — 흰 헤더의 그림자가 회색 탭 위에 드리워 띠처럼 탁하게 얹혀 보이던 것을 걷어내고,
   맨 아래(책 탭)에만 한 겹 남겨 헤더와 탭이 같이 떠 있는 한 덩어리로 보이게 한다. */
body[data-page="book-detail"][data-header="slim"].is-slim:has(.book-tabs-stuck) .header { box-shadow: none; }
body[data-page="book-detail"][data-header="slim"].is-slim .book-tabs-stuck { box-shadow: var(--shadow-soft); }

/* ── 태블릿(1279px 이하) 슬림 바 ──
   폭이 줄어드는 만큼 오른쪽부터 덜어 낸다. 로그인·마이페이지는 햄버거(전체 메뉴) 안에도
   있으므로 슬림에서는 빼고, 그렇게 생긴 자리를 검색창이 가져간다. */
@media (max-width: 1279px) {
  body[data-header="slim"] { --header-slim-h: 62px; --header-slim-gnb-h: 40px; }
  /* 태블릿 GNB는 평소에도 글자가 한 단계 작고(15px) 좌우 여백이 좁다 — 슬림에서도 그 값을 그대로 쓴다 */
  body[data-header="slim"].is-slim .gnb-link { padding: 0 12px; font-size: var(--text-md); }
  body[data-header="slim"].is-slim .site-toggle { margin-bottom: 14px; } /* 슬림 62px · 로고 28px 기준 "북스" 중심 y=37.78px 에 캡슐(21px) 중심을 맞춘 값 */
  body[data-header="slim"].is-slim .header-util_link { display: none; }
  body[data-header="slim"].is-slim .header-search { margin-left: var(--space-base); }
  body[data-header="slim"].is-slim .header-search_bar { max-width: none; } /* 남는 폭을 그대로 쓴다 — 좁아지면 알아서 줄어든다 */
  body[data-header="slim"].is-slim .header-search_input { height: 42px; } /* 모바일(767px 이하)까지 함께 적용 — 기본 48px 보다 낮춰 펼쳤을 때 헤더가 덜 두꺼워진다 */
}
/* 태블릿(768~1279px) 슬림 바 — 웹처럼 로그인·마이페이지(글자)와 빨간 MP3 버튼을 모두 남긴다.
   위 1279px 이하 공통 규칙이 유틸 링크를 숨기는 것을 태블릿에서만 되살린다(모바일은 그대로 숨김). [hidden] 인 로그인/로그아웃 짝은 계속 숨김 */
@media (min-width: 768px) and (max-width: 1279px) { body[data-header="slim"].is-slim .header-util_link:not([hidden]) { display: flex; } }

/* 움직임 최소화 설정 존중 — 슬림 바로 바뀌는 과정을 애니메이션 없이 즉시 전환한다 */
@media (prefers-reduced-motion: reduce) {
  body[data-header="slim"] .header, body[data-header="slim"] .family-bar, body[data-header="slim"] .gnb, body[data-header="slim"] .header-main, body[data-header="slim"] .header-logo_img, body[data-header="slim"] .header-search_input, body[data-header="slim"] .header-util_mp3 { transition: none; }
}


/* ========== Mega Menu (전체 메뉴) ========== */
.mega-menu { position: absolute; top: 100%; left: 0; width: 100%; z-index: var(--z-mega); }
.mega-menu[hidden] { display: none; }
.mega-m-login, .mega-m-promo, .mega-m-quick, .mega-m-links, .mega-m-banner { display: none; } /* 로그인·프로모 카드·퀵아이콘·상단 링크는 모바일 햄버거 전용 */
.mega-menu_backdrop { position: absolute; top: 0; left: 0; width: 100%; height: 100vh; border: none; background: var(--color-overlay); cursor: default; z-index: -1; animation: megaFade 200ms ease; }
.mega-menu_panel { position: relative; background: var(--color-canvas); border-top: 1px solid var(--color-border); animation: megaDrop 260ms var(--ease-in-out); }
.mega-mobile-bar { display: none; }
.mega-menu_grid { display: grid; grid-template-columns: 1fr 320px; gap: var(--space-4xl); padding-top: var(--space-3xl); padding-bottom: var(--space-3xl); align-items: stretch; }
.mega-main { display: flex; flex-direction: column; gap: 18px; align-self: stretch; }
.mega-cols { flex: 1 1 auto; display: grid; grid-template-columns: repeat(4, 1fr); gap: var(--space-4xl); align-items: start; } /* 남는 높이를 전부 흡수 — 하단 배너(고정 132px)가 사이드 카드 하단선에 붙도록 */

.mega-col { display: flex; flex-direction: column; gap: var(--space-base); }
.mega-group_title { display: inline-flex; align-items: center; gap: var(--space-sm); font-size: var(--text-base); font-weight: var(--font-bold); color: var(--color-ink); letter-spacing: -0.3px; padding-bottom: 10px; margin-bottom: 10px; border-bottom: 1px solid var(--color-border); transition: color var(--duration-base) var(--ease-default); }
.mega-group_toggle { display: none; }
.mega-col .mega-group_title { display: flex; }
.mega-badge { display: inline-flex; align-items: center; height: 18px; padding: 0 7px; margin-left: auto; background: var(--color-coral-tint); border: 1px solid var(--color-coral-tint-border); border-radius: var(--radius-pill); font-size: var(--text-3xs); font-weight: var(--font-bold); color: var(--color-coral); letter-spacing: 0.3px; }
.mega-list { display: flex; flex-direction: column; gap: 6px; }
.mega-link { display: flex; align-items: center; gap: 4px; font-size: var(--text-sm); font-weight: var(--font-regular); color: var(--color-gray-600); letter-spacing: -0.2px; transition: color var(--duration-base) var(--ease-default), padding-left var(--duration-base) var(--ease-default); }
.mega-link em { font-style: normal; font-size: var(--text-2xs); font-weight: var(--font-semibold); color: var(--color-gray-400); }
.mega-link em::before { content: "["; }
.mega-link em::after { content: "]"; }

/* 사이드 카드 */
.mega-side { align-self: start; display: flex; flex-direction: column; gap: var(--space-xl); padding: 28px 26px; background: var(--color-surface-cool); border-radius: var(--radius-xl); }
.mega-side_group { display: flex; flex-direction: column; gap: 14px; }
.mega-side_title { display: flex; align-items: center; gap: var(--space-sm); font-size: var(--text-base); font-weight: var(--font-bold); color: var(--color-primary); letter-spacing: -0.2px; }
.mega-side_title svg { width: 18px; height: 18px; }
.mega-side_links { display: grid; grid-template-columns: 1fr 1fr; gap: var(--space-sm) 16px; }
.mega-side_link { font-size: var(--text-xs); font-weight: var(--font-medium); color: var(--color-gray-700); letter-spacing: -0.2px; transition: color var(--duration-base) var(--ease-default); }
.mega-side_social { display: flex; justify-content: space-between; gap: var(--space-sm); padding-top: var(--space-lg); border-top: 1px solid var(--color-border); }
.mega-social { display: flex; flex-direction: column; align-items: center; gap: 6px; flex: 1; min-width: 0; }
.mega-social_icon { display: flex; align-items: center; justify-content: center; width: 38px; height: 38px; background: var(--color-canvas); border: 1px solid var(--color-border); border-radius: 50%; transition: border-color var(--duration-base) var(--ease-default), transform var(--duration-base) var(--ease-default); } /* 소셜 5종(카페 2개)이 한 줄에 들어가도록 컴팩트 */
.mega-social_icon img { width: 19px; height: 19px; }
.mega-social_icon-cafe svg { width: 17px; height: 17px; color: var(--color-gray-800); }
.mega-social_label { font-size: var(--text-3xs); font-weight: var(--font-medium); color: var(--color-gray-500); letter-spacing: -0.3px; white-space: nowrap; }
.mega-side_cta { display: flex; align-items: center; gap: var(--space-sm); height: 52px; padding: 0 18px; background: var(--color-canvas); border: 1px solid var(--color-border-strong); border-radius: var(--radius-lg); font-size: var(--text-sm); font-weight: var(--font-semibold); color: var(--color-ink); letter-spacing: -0.2px; transition: border-color var(--duration-base) var(--ease-default), box-shadow var(--duration-base) var(--ease-default); }
.mega-side_cta > svg:first-child { width: 18px; height: 18px; color: var(--color-primary); }
.mega-side_cta span { flex: 1; }
.mega-side_cta-arrow { width: 18px; height: 18px; color: var(--color-gray-500); transition: transform var(--duration-base) var(--ease-default); }
.mega-side_cta { display: none; } /* 데일리 학습 CTA — 삭제 검토 중이라 임시 숨김(마크업은 유지) · 되살리려면 이 줄만 지울 것 */
@media (min-width: 768px) and (max-width: 1279px) { .mega-menu_panel { max-height: calc(100vh - var(--mega-top, 0px)); max-height: calc(100dvh - var(--mega-top, 0px)); overflow-y: auto; overscroll-behavior: contain; } .container.mega-menu_grid { padding-top: var(--space-3xl); padding-bottom: var(--space-3xl); } .mega-side_group + .mega-side_group { padding-left: var(--space-3xl); border-left: 1px solid var(--color-border); } .mega-side_links { gap: var(--space-md) var(--space-base); } .mega-side_link { font-size: var(--text-sm); } .mega-social { flex: 0 0 auto; } } /* 태블릿 전용 — 열리면 페이지 스크롤이 잠기므로 패널을 헤더 아래 화면 높이로 제한해 안에서 스크롤. 태블릿 .container { padding: 0 24px } 가 위아래 여백까지 0으로 덮어써, 두 클래스로 우선순위를 올려 되살린다(768px 이상 한정이라 모바일 무관). 하단 카드: 고객센터 앞 세로 구분선 · 터치용으로 링크 글자·간격 한 단계 키움 · SNS 는 칸을 늘리지 않고 왼쪽부터 붙인다 */

/* 하단 가로형 이미지 배너 (임시 회색 영역 — 이미지로 교체 예정) */
.mega-banner { flex: 0 0 auto; display: flex; align-items: center; justify-content: center; height: 140px; background: var(--color-surface); border-radius: var(--radius-tab); overflow: hidden; } /* 높이 140px 고정 — 우측 학습지원 카드 하단선(≈138px)에 맞춘 정수 규격, 배너 이미지 872×140 기준 */
.mega-banner picture { display: block; width: 100%; height: 100%; } /* PC·모바일 이미지를 나눠 쓰는 배너의 감싸개 — 없으면 이미지 높이가 0이 된다 */
.mega-banner img { width: 100%; height: 100%; object-fit: cover; display: block; }
.mega-banner_placeholder { display: flex; align-items: center; justify-content: center; width: 100%; height: 100%; }
.mega-banner_placeholder span { font-size: var(--text-xs); color: var(--color-gray-400); }
@media (min-width: 768px) and (max-width: 1279px) { .mega-banner { height: auto; aspect-ratio: 872 / 140; } } /* 태블릿 전용 — 배너 폭이 872px 보다 넓어져도 높이 140px 고정이면 위아래가 잘리므로, 웹 배너 원본 비율 그대로 늘린다 */

@keyframes megaFade { from { opacity: 0; } to { opacity: 1; } }
@keyframes megaDrop { from { opacity: 0; transform: translateY(-12px); } to { opacity: 1; transform: translateY(0); } }


/* ========== Main Banner ========== */
.main-banner { padding: 24px 0 0; } /* 하단 패딩 제거 (2026-07-24) */
.main-banner .container { position: relative; }
.main-banner_layout { display: flex; gap: var(--space-base); align-items: stretch; transform-origin: top left; }
.main-banner_main { flex: 1; border-radius: var(--radius-lg); overflow: hidden; background: var(--color-border); position: relative; }
.mbs-viewport { overflow: hidden; }
.mbs-track { display: flex; transition: transform 0.5s var(--ease-in-out); touch-action: pan-y; } /* 가로 스와이프는 JS가 처리 — 브라우저 좌우 제스처(내비게이션 화살표) 차단 */
.mbs-slide { flex-shrink: 0; width: 100%; }
.mbs-slide a { display: block; }
.mbs-slide img { width: 100%; height: 360px; object-fit: cover; display: block; }
.mbs-controls { position: absolute; bottom: 14px; right: 14px; display: flex; align-items: center; gap: 6px; transform-origin: 100% 100%; }
.mbs-pause-btn { width: 34px; height: 34px; background: rgba(0,0,0,0.5); border: none; border-radius: var(--radius-pill); color: var(--color-canvas); cursor: pointer; display: flex; align-items: center; justify-content: center; transition: background 150ms ease; }
.mbs-controls_pill { display: flex; align-items: center; gap: 6px; background: rgba(0,0,0,0.5); border-radius: var(--radius-pill); padding: 0 14px; height: 34px; }
.mbs-nav { display: flex; align-items: center; gap: 2px; }
.mbs-prev-btn, .mbs-next-btn { background: none; border: none; color: var(--color-canvas); cursor: pointer; display: flex; align-items: center; justify-content: center; padding: 0 2px; border-radius: var(--radius-xs); transition: opacity 150ms ease; }
.mbs-pause-btn svg { width: 13px; height: 13px; fill: currentColor; stroke: none; }
.mbs-prev-btn svg, .mbs-next-btn svg { width: 16px; height: 16px; stroke-width: 1.5; }
.mbs-icon-play { display: none; }
.mbs-pause-btn.is-paused .mbs-icon-pause { display: none; }
.mbs-pause-btn.is-paused .mbs-icon-play { display: block; }
.mbs-counter { font-size: var(--text-2xs); font-weight: var(--font-medium); color: var(--color-canvas); white-space: nowrap; padding: 0 2px; letter-spacing: 0.2px; }
.mbs-all-link { font-family: inherit; font-size: var(--text-2xs); color: rgba(255,255,255,0.92); background: none; border: none; border-left: 1px solid rgba(255,255,255,0.3); text-decoration: none; padding-left: 9px; margin-left: 3px; white-space: nowrap; cursor: pointer; transition: color 150ms ease; }

/* 전체 배너 모달 */
.banner-modal { position: fixed; inset: 0; z-index: var(--z-modal); display: flex; align-items: center; justify-content: center; }
.banner-modal[hidden] { display: none; }
.banner-modal_overlay { position: absolute; inset: 0; background: var(--color-overlay); animation: bannerModalFade 200ms ease; }
.banner-modal_panel { position: relative; display: flex; flex-direction: column; width: min(800px, calc(100vw - 48px)); max-height: calc(100vh - 80px); background: var(--color-canvas); border-radius: var(--radius-lg); overflow: hidden; box-shadow: 0 12px 40px rgba(0,0,0,0.18); animation: bannerModalPop 200ms var(--ease-in-out); }
.banner-modal_head { flex-shrink: 0; display: flex; align-items: center; justify-content: space-between; padding: 20px 24px; border-bottom: 1px solid var(--color-border); }
.banner-modal_title { font-size: var(--text-xl); font-weight: var(--font-semibold); color: var(--color-ink); }
.banner-modal_close { display: flex; align-items: center; justify-content: center; width: 36px; height: 36px; border: none; border-radius: var(--radius-pill); color: var(--color-gray-700); cursor: pointer; transition: background 150ms ease; }
.banner-modal_close svg { width: 20px; height: 20px; }
.banner-modal_grid { display: block; padding: var(--space-xl); overflow-y: auto; } /* 컬리처럼 1열 세로 나열 (2026-07-24, 기존 2열 그리드) — grid는 스크롤 패널에서 행 높이를 균등 분배해 배너가 잘리므로 block */
.banner-modal_item { display: block; margin-bottom: var(--space-base); border-radius: var(--radius-md); overflow: hidden; transition: transform 200ms ease-out; }
.banner-modal_item picture { display: block; } /* picture 기본 inline이면 카드 높이가 붕괴(이미지 잘림) — .mbs-slide picture와 동일 처리 */
.banner-modal_item-mo { display: none; } /* 과목 카테고리 — 모바일 롤링 배너(hero)와 짝인 모바일용 항목. 웹·태블릿은 기존 배너(-pc)만 (모바일 전환은 mobile.css) */
.banner-modal_item img { display: block; width: 100%; max-width: 924px; height: auto; margin: 0 auto; } /* 원본(924px)보다 확대되지 않게 */

@keyframes bannerModalFade { from { opacity: 0; } to { opacity: 1; } }
@keyframes bannerModalPop { from { opacity: 0; transform: scale(0.98); } to { opacity: 1; transform: scale(1); } }

/* ── 로그인 안내 모달 — 비로그인 상태에서 회원 기능(찜 등) 클릭 시. 판별은 main.js isLoggedIn() ── */
.login-modal { position: fixed; inset: 0; z-index: var(--z-modal); display: flex; align-items: center; justify-content: center; }
.login-modal[hidden] { display: none; }
.login-modal_dim { position: absolute; inset: 0; background: var(--color-overlay); animation: bannerModalFade 200ms ease-out; } /* 딤은 단일 토큰 사용 원칙 */
.login-modal_panel { position: relative; width: min(480px, calc(100% - 48px)); padding: 52px 32px 32px; background: var(--color-canvas); border-radius: var(--radius-xl); text-align: center; animation: bannerModalPop 200ms ease-out; }
.login-modal_text { margin-bottom: 32px; font-size: var(--text-lg); font-weight: var(--font-medium); color: var(--color-ink); letter-spacing: -0.3px; } /* 웹 500 — 모바일은 mobile.css에서 600 */
.login-modal_actions { display: flex; gap: 10px; justify-content: center; }
.login-modal_btn { display: inline-flex; align-items: center; justify-content: center; min-width: 170px; height: 50px; padding: 0 20px; border-radius: var(--radius-md); background: var(--color-gray-600); font-size: var(--text-md); font-weight: var(--font-semibold); color: var(--color-canvas); transition: background var(--duration-base) var(--ease-default); }
.login-modal_btn-primary { background: var(--color-primary); }
body.login-modal-lock { overflow: hidden; }

/* ── 사이트 진입 팝업 — 메인 진입 시 main.js가 주입. 여러 장이면 카드가 나란히 배치 (모바일은 mobile.css에서 하단 시트로 전환) ── */
.entry-popup { position: fixed; inset: 0; z-index: var(--z-modal); display: flex; align-items: center; justify-content: center; }
.entry-popup_dim { position: absolute; inset: 0; background: var(--color-overlay); animation: bannerModalFade 200ms ease-out; }
.entry-popup_panel { position: relative; max-width: calc(100vw - 48px); max-height: calc(100vh - 80px); overflow-y: auto; }
.entry-popup_track { display: flex; flex-wrap: wrap; align-items: flex-start; justify-content: center; gap: var(--space-lg); }
.entry-popup_card { display: flex; flex-direction: column; width: min(440px, calc(100vw - 48px)); background: var(--color-canvas); border-radius: var(--radius-lg); overflow: hidden; box-shadow: var(--shadow-floating); animation: bannerModalPop 200ms var(--ease-in-out); }
.entry-popup_media { display: block; }
.entry-popup_media img { display: block; width: 100%; height: auto; }
.entry-popup_foot { display: flex; flex-shrink: 0; border-top: 1px solid var(--color-border); }
.entry-popup_today, .entry-popup_close { flex: 1; height: 46px; border: none; background: var(--color-canvas); font-size: var(--text-sm); font-weight: var(--font-regular); color: var(--color-gray-600); cursor: pointer; transition: background var(--duration-base) var(--ease-default); }
/* 팝업이 열릴 때 패널로 포커스를 옮겨 둔다(모달 진입 알림·포커스 트랩용).
   키보드·마우스로 직접 닿지 않는 껍데기라 포커스 테두리는 그리지 않는다 */
.entry-popup_panel:focus { outline: none; }
.entry-popup_today { flex: 0 0 auto; padding: 0 var(--space-lg); border-right: 1px solid var(--color-border); } /* 글자폭만큼만 — 주 동작인 닫기에 자리를 내준다 */
.entry-popup_close { flex: 1; font-weight: var(--font-semibold); color: var(--color-ink); }
.entry-popup_dots { display: none; } /* 도트는 모바일 시트 전용 */
.entry-popup_foot-sheet { display: none; } /* 시트 공용 푸터도 모바일 전용 — 웹·태블릿은 카드별 푸터 사용 */
body.entry-popup-lock { overflow: hidden; }
/* 토익 라운지 — 등록된 글이 없을 때 */
.community-empty { grid-column: 1 / -1; padding: 60px 0; text-align: center; font-size: var(--text-sm); color: var(--color-gray-500); }
/* 토익 라운지 상세 — 원본 게시물을 불러와 보여주는 틀.
   인스타·쇼츠는 세로가 길고 유튜브는 가로가 넓어 종류에 따라 비율을 달리한다 */
.lounge-embed { position: relative; margin: 0 auto 28px; background: var(--color-surface); border-radius: var(--radius-md); overflow: hidden; }
.lounge-embed iframe { display: block; width: 100%; height: 100%; border: 0; }
/* 인스타는 게시물마다 높이가 달라(캡션·캐러셀·댓글) 비율을 고정하면 아래가 잘린다.
   임베드가 보내오는 실제 높이를 js/front/lounge-view.js 가 받아 --lounge-embed-h 로 넣는다.
   그 값이 오기 전까지만 아래 기본 높이를 쓴다. */
.lounge-embed-tall { width: min(400px, 100%); height: var(--lounge-embed-h, 620px); }
.lounge-embed-wide { width: 100%; aspect-ratio: 16/9; }
.lounge-embed_fallback { margin-bottom: 24px; padding: 24px; background: var(--color-surface); border-radius: var(--radius-md); text-align: center; font-size: var(--text-sm); color: var(--color-gray-600); }
.lounge-content { font-size: var(--text-base); color: var(--color-ink); line-height: 1.8; }
.lounge-content img { display: inline-block; max-width: 100%; height: auto; vertical-align: middle; }
.lounge-content .se-section-align-left { text-align: left; }
.lounge-content .se-section-align-center { text-align: center; }
.lounge-content .se-section-align-right { text-align: right; }
:is(.notice-view_body, .faq-item_a-body) img { display: inline-block; max-width: 100%; height: auto; vertical-align: middle; }
:is(.notice-view_body, .faq-item_a-body, .daily-detail_content) .se-section-align-left { text-align: left; }
:is(.notice-view_body, .faq-item_a-body, .daily-detail_content) .se-section-align-center { text-align: center; }
:is(.notice-view_body, .faq-item_a-body, .daily-detail_content) .se-section-align-right { text-align: right; }
.daily-detail_content :is([style*="text-align"], [align], .se-section-align-left, .se-section-align-center, .se-section-align-right) img { display: inline-block; margin-left: 0; margin-right: 0; vertical-align: middle; }
/* 하단 버튼 두 개 — 원문 버튼이 폼 제출용(52px·최소폭 220px)이라 옆의 목록 버튼보다 커 보였다.
   라운지 상세에서만 목록 버튼(46px)에 맞춰 나란히 같은 크기로 둔다 */
.lounge-view_foot { display: flex; gap: 10px; justify-content: center; }
.lounge-view_foot .notice-view_list-btn,
.lounge-view_foot .inquiry-submit_btn { height: 46px; min-width: 160px; padding: 0 28px; justify-content: center; font-size: var(--text-sm); font-weight: var(--font-semibold); }
/* 교재인증 모달 (사은품 모의고사 기출문제 다운로드) — 로그인 모달 컴포넌트를 쓰되 내용이 많아 위 여백을 줄인다.
   보여주는 것은 레거시 인증창(etstoeic/unAuth)과 같다: 표지·교재명·빈칸 문제·쪽 안내·저작권 문구 */
.book-auth-modal .login-modal_panel { padding: 32px; }
.book-auth_title { margin-bottom: 20px; font-size: var(--text-xl); font-weight: var(--font-bold); color: var(--color-ink); }
.book-auth_book { display: flex; align-items: center; justify-content: center; gap: 12px; margin-bottom: 20px; text-align: left; }
.book-auth_cover { width: 90px; height: 126px; object-fit: cover; border: 1px solid var(--color-border); border-radius: var(--radius-sm); }
.book-auth_cover[hidden] { display: none; }
.book-auth_name { font-size: var(--text-sm); font-weight: var(--font-medium); color: var(--color-ink); line-height: 1.5; }
.book-auth_label { margin-bottom: 8px; font-size: var(--text-sm); font-weight: var(--font-semibold); color: var(--color-primary); }
.book-auth_question { padding: 16px; margin-bottom: 12px; background: var(--color-surface); border-radius: var(--radius-md); font-size: var(--text-base); color: var(--color-ink); line-height: 1.6; }
/* 정답 자리 — 레거시도 같은 자리를 빈 네모로 보여준다 */
.book-auth_blank { display: inline-block; min-width: 72px; height: 1.2em; margin: 0 4px; border-bottom: 2px solid var(--color-primary); vertical-align: middle; }
.book-auth_guide { margin-bottom: 16px; font-size: var(--text-xs); color: var(--color-gray-600); line-height: 1.6; }
.book-auth_guide b { color: var(--color-coral); }
.book-auth_field { margin-bottom: 16px; text-align: left; }
.book-auth_message { min-height: 18px; margin-top: 6px; font-size: var(--text-xs); color: var(--color-coral); }
.book-auth_copy { margin-bottom: 20px; font-size: var(--text-2xs); color: var(--color-gray-500); line-height: 1.6; }
.book-auth_sms-row { display: flex; align-items: center; gap: 8px; }
.book-auth_sms-row .inquiry-input { min-width: 0; }
.book-auth_sms-row .login-modal_btn { flex: 0 0 auto; }
.book-auth_timer { flex: 0 0 44px; color: var(--color-coral); font-size: var(--text-xs); text-align: right; }
.main-banner_side { width: 300px; flex-shrink: 0; border-radius: var(--radius-lg); overflow: hidden; background: var(--color-border); position: relative; }
.rbs-viewport { overflow: hidden; }
.rbs-track { display: flex; transition: transform 0.5s var(--ease-in-out); touch-action: pan-y; } /* 가로 스와이프는 JS가 처리 — 브라우저 좌우 제스처(내비게이션 화살표) 차단 */
.rbs-slide { flex-shrink: 0; width: 100%; }
.rbs-slide a { display: block; }
.rbs-slide picture { display: block; }
.rbs-slide img { width: 100%; height: 360px; object-fit: cover; display: block; }
.main-banner_btn { position: absolute; top: 50%; transform: translateY(-50%); width: 44px; height: 44px; display: flex; align-items: center; justify-content: center; background: rgba(255,255,255,0.92); border-radius: 50%; transition: background var(--duration-fast) var(--ease-default); z-index: 2; border: 1px solid var(--color-border-strong); }
.main-banner_btn svg { width: 20px; height: 20px; color: var(--color-ink); }
.main-banner_btn-prev { left: -22px; }
.main-banner_btn-next { right: -22px; }
/* v1 캐러셀 호환용 (index_v1.html) */
.main-banner_viewport { overflow: hidden; }
.main-banner_track { display: flex; gap: 0; will-change: transform; }
.mb-card { width: 295px; flex-shrink: 0; margin-right: var(--space-lg); border-radius: var(--radius-xl); overflow: hidden; position: relative; cursor: pointer; }
.mb-card img { width: 295px; height: 410px; object-fit: cover; display: block; transition: transform var(--duration-base) var(--ease-out); }
.mb-card-overlay { position: absolute; bottom: 0; left: 0; right: 0; height: 65%; pointer-events: none; }
.mb-card-info { position: absolute; bottom: 0; left: 0; right: 0; padding: var(--space-3xl); }
.mb-card-tag { font-size: var(--text-md); font-weight: var(--font-medium); color: rgba(255,255,255,1); letter-spacing: -0.1px; word-break: keep-all; }
.mb-card-title { font-size: var(--text-4xl); font-weight: var(--font-bold); color: var(--color-canvas); line-height: 1.15; letter-spacing: -0.4px; margin-bottom: 6px; word-break: keep-all; }
.mb-card-venue { font-size: var(--text-sm); font-weight: var(--font-regular); color: rgba(255,255,255,1); margin-top: 6px; word-break: keep-all; }
.mb-card-date { font-size: var(--text-2xs); font-weight: var(--font-regular); color: rgba(255,255,255,0.55); word-break: keep-all; }

/* ========== Quick Menu ========== */
.quick-menu { padding: 8px 0 16px; }
.quick-menu_list { display: flex; align-items: flex-start; justify-content: space-between; gap: var(--space-md); }
.quick-menu_item { flex: 1; min-width: 0; }
.quick-menu_link { display: flex; flex-direction: column; align-items: center; gap: 10px; }
.quick-menu_icon { display: flex; align-items: center; justify-content: center; width: 64px; height: 64px; background: var(--color-surface); border-radius: var(--radius-xl); transition: background var(--duration-base) var(--ease-default); }
.quick-menu_icon img, .quick-menu_icon svg { width: 24px; height: 24px; color: var(--color-gray-800); stroke-width: 1.5; }
.quick-menu_label { display: flex; flex-direction: column-reverse; align-items: center; gap: 0; font-size: var(--text-sm); font-weight: var(--font-medium); color: var(--color-gray-700); letter-spacing: -0.3px; white-space: nowrap; transition: color var(--duration-base) var(--ease-default); }
.quick-menu_eyebrow { font-style: normal; font-size: var(--text-3xs); font-weight: var(--font-semibold); color: var(--color-gray-400); letter-spacing: 0.2px; line-height: 0.8; transition: color var(--duration-base) var(--ease-default); }

/* ========== Study Links (학습자료 바로가기) ========== */
.study-links { display: flex; gap: var(--space-base); }
.study-links_item { flex: 1; min-width: 0; }
.study-links_btn { display: flex; align-items: center; justify-content: center; gap: 10px; height: 72px; background: var(--color-surface); border-radius: var(--radius-xl); font-size: var(--text-base); font-weight: var(--font-semibold); color: var(--color-gray-800); letter-spacing: -0.3px; transition: background var(--duration-base) var(--ease-default), color var(--duration-base) var(--ease-default); }
.study-links_icon { display: flex; align-items: center; justify-content: center; flex-shrink: 0; }
.study-links_icon img, .study-links_icon svg { width: 22px; height: 22px; color: var(--color-primary); stroke-width: 1.6; }
.study-links_label { white-space: nowrap; }

/* ========== Section Common ========== */
.section { padding: 64px 0; } /* 2026-07-24 80→64 — 모바일(48→40)과 같은 결의 여백 축소 */
.section-surface { background: var(--color-surface-light); }
.section_head { display: flex; align-items: center; margin-bottom: var(--space-md); } /* 2026-07-24 24→12 — 타이틀↔탭 밀착 (모바일 8px과 같은 결) */
.section_title { font-size: var(--text-2xl); font-weight: var(--font-semibold); color: var(--color-ink); line-height: 1.36; letter-spacing: -0.4px; }
.section_more { display: flex; align-items: center; gap: var(--space-xs); margin-left: auto; font-size: var(--text-sm); font-weight: var(--font-medium); color: var(--color-primary); letter-spacing: -0.2px; transition: color var(--duration-base) var(--ease-default); } /* 웹은 14px·500 (모바일은 mobile.css에서 12px·500 유지) */
.section_more[hidden] { display: none; } /* display:flex가 브라우저 기본 [hidden] 규칙을 이겨 버리므로 명시적으로 숨김 처리 */
.section_more img, .section_more svg { width: 16px; height: 16px; opacity: 1; }

/* ========== Category Tabs ========== */
.cat-tabs { display: flex; align-items: center; gap: 0; margin-bottom: var(--space-xl); border-bottom: 1px solid var(--color-border); }
.cat-tab { height: 38px; padding: 0 4px; font-size: var(--text-sm); font-weight: var(--font-regular); color: var(--color-gray-600); letter-spacing: -0.2px; border-bottom: 2px solid transparent; margin-bottom: -1px; white-space: nowrap; transition: color var(--duration-base) var(--ease-default), border-color var(--duration-base) var(--ease-default); }
.cat-tab + .cat-tab { margin-left: var(--space-xl); }
.cat-tab-active { font-weight: var(--font-semibold); color: var(--color-primary); border-bottom-color: var(--color-primary); }
a.cat-tab { display: inline-flex; align-items: center; } /* 이벤트 탭은 주소로 다시 조회해 링크다 — inline 요소에는 height가 먹지 않는다 */

/* ========== Book Grid ========== */
.book-carousel { position: relative; }
.book-carousel-swipe { overflow: hidden; } /* 스와이프 슬라이더 뷰포트 (PC는 6열 그리드가 딱 맞아 무해) */
.book-grid { display: grid; grid-template-columns: repeat(6, minmax(0, 1fr)); gap: var(--space-4xl) var(--space-2xl); } /* 행 간격 48px — 열 간격(32px)과 분리 */
/* 1fr 의 하한은 min-content 라, 줄바꿈 없는 저자명(white-space: nowrap)이 긴 카드가 자기 열을 밀어 넓혔다.
   그 바람에 같은 줄의 표지 크기가 제각각이 됐다. minmax(0, 1fr) 로 6열을 항상 같은 폭으로 고정한다 */
.book-grid[hidden] { display: none; }
/* 카테고리 페이지(토익·토스토플·영어·아시아·한국어·eBook)는 웹에서 한 줄에 5권 — 공통 6열보다 카드를 크게.
   태블릿·모바일은 아래 반응형 규칙(auto-fit·2열)을 그대로 써야 하므로 웹 전용 미디어쿼리 안에 둔다 */
@media (min-width: 1280px) {
  body[data-page="toeic"] .book-grid, body[data-page="toss-toefl"] .book-grid, body[data-page="english"] .book-grid, body[data-page="asian"] .book-grid, body[data-page="korean"] .book-grid, body[data-page="ebook"] .book-grid { grid-template-columns: repeat(5, minmax(0, 1fr)); }
  /* 5열이라 카드가 커진 만큼 교재명도 키운다 — 리스트형(.is-list, 16px)과 같은 크기 */
  body[data-page="toeic"] .book-carousel:not(.is-list) .book-card_title, body[data-page="toss-toefl"] .book-carousel:not(.is-list) .book-card_title, body[data-page="english"] .book-carousel:not(.is-list) .book-card_title, body[data-page="asian"] .book-carousel:not(.is-list) .book-card_title, body[data-page="korean"] .book-carousel:not(.is-list) .book-card_title, body[data-page="ebook"] .book-carousel:not(.is-list) .book-card_title { font-size: var(--text-base); }
}
/* 카테고리·베스트셀러 상품 그리드(메인 스와이프·리스트뷰 제외): 카드 고정 ~160px · 화면이 넓어지면 카드 사이 여백이 늘다가, 한 칸이 더 들어갈 공간이 생기면 열이 자동 추가(auto-fill) */
/* (제거됨 2026-07-24) auto-fill 160px 규칙 — 넓은 화면에서 7열이 되어 메인(6열·gap 32)과 어긋나 삭제, 카테고리도 기본 .book-grid(6열) 사용 */

/* ========== 카테고리 전체보기 탭 배너 (좌: 메인 배너 · 우: 이달의 신간 책 쇼케이스 코너 · 전체보기 활성 시에만 노출, JS 토글) ========== */
.cat-banner { margin-bottom: var(--space-2xl); }
.cat-banner[hidden] { display: none; }
.cat-banner .home-hero { display: none; } /* 메인 배너와 같은 모바일 전용 배너 — 웹·태블릿은 기존 .cat-banner_main 을 쓰므로 숨김 (모바일 노출은 mobile.css) */
.cat-banner_layout { display: flex; gap: var(--space-base); align-items: stretch; }
.cat-banner_main { position: relative; flex: 1; min-width: 0; max-width: 924px; align-self: start; display: block; border-radius: var(--radius-lg); overflow: hidden; background: var(--color-border); aspect-ratio: 924 / 260; }
.cat-banner_main img { display: block; width: 100%; height: 100%; object-fit: cover; }
/* 롤링 배너(rbs)로 쓸 때 — 슬라이드가 배너 박스 높이를 꽉 채우게 */
.cat-banner_main .rbs-viewport, .cat-banner_main .rbs-track, .cat-banner_main .rbs-slide, .cat-banner_main .rbs-slide a, .cat-banner_main .rbs-slide picture { height: 100%; }
/* 신간 코너 = 이달의 신간 책 표지 쇼케이스 (파스텔 그라데이션 배경 위 표지 + 제목·태그라인·설명) */
.cat-banner_side { flex: 0 0 300px; display: flex; flex-direction: column; border-radius: var(--radius-lg); overflow: hidden; background: var(--color-canvas); border: 1px solid var(--color-border); text-decoration: none; transition: transform var(--duration-base) var(--ease-default); }
@media (min-width: 1280px) { .cat-banner_main, .cat-banner_side { border-radius: var(--radius-xl); } } /* 웹 전용 — 기본 12px(--radius-lg)보다 한 단계 둥글게 · 태블릿·모바일은 기존값 유지 */
.cat-banner_side-visual { position: relative; flex: 1; display: flex; align-items: center; justify-content: center; padding: 22px; overflow: hidden; background: linear-gradient(155deg, var(--color-tint-50) 0%, var(--color-tint-100) 100%); }
/* 배경 = 표지 이미지를 확대·블러(30px) 처리한 앰비언트 배경 */
.cat-banner_side-bg { position: absolute; inset: 0; z-index: 0; width: 100%; height: 100%; object-fit: cover; filter: blur(30px) saturate(1.6); transform: scale(1.3); opacity: 0.6; pointer-events: none; }
.cat-banner_side-badge { position: absolute; z-index: 2; top: 12px; left: 12px; padding: 4px 10px; border-radius: var(--radius-pill); background: rgba(255,255,255,0.92); font-size: var(--text-2xs); font-weight: var(--font-bold); color: var(--color-primary); letter-spacing: -0.2px; box-shadow: var(--shadow-cover); }
.cat-banner_side-cover { position: relative; z-index: 1; width: 148px; aspect-ratio: 198/277; border: 1px solid var(--color-canvas); border-radius: var(--radius-xs); overflow: hidden; box-shadow: var(--shadow-floating); }
.cat-banner_side-cover img { display: block; width: 100%; height: 100%; object-fit: cover; }
.cat-banner_side-cover-ph { display: flex; align-items: center; justify-content: center; width: 100%; height: 100%; background: var(--color-surface); }
.cat-banner_side-cover-ph span { font-size: var(--text-2xs); color: var(--color-gray-400); }
.cat-banner_side-info { padding: 16px 18px 20px; text-align: center; }
.cat-banner_side-booktitle { display: block; font-size: var(--text-md); font-weight: var(--font-bold); color: var(--color-ink); letter-spacing: -0.3px; line-height: 1.35; margin-bottom: 8px; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; } /* 교재명은 한 줄 고정 — 길면 말줄임(모바일은 아래 미디어쿼리에서 이미 동일 처리) */
.cat-banner_side-tagline { display: inline-flex; align-items: center; gap: 5px; max-width: 100%; font-size: var(--text-xs); font-weight: var(--font-bold); color: var(--color-primary); margin-bottom: 4px; }
.cat-banner_side-tagline svg { width: 14px; height: 14px; flex: 0 0 auto; } /* 아이콘은 줄어들지 않게 — 남는 폭을 글자가 쓰고 넘치면 말줄임 */
.cat-banner_side-tagline-text { overflow: hidden; white-space: nowrap; text-overflow: ellipsis; } /* 안내 문구는 한 줄 고정 — 길면 말줄임 */
.cat-banner_side-sub { font-size: var(--text-2xs); color: var(--color-gray-500); line-height: 1.45; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; } /* 설명문도 한 줄 고정 — 길면 말줄임 */
/* 웹 전용 — 배너가 924x260(세로 260)으로 낮아져 신간 카드 기본 높이(359px)가 배너보다 튀어나옴.
   카드 내부를 줄여 자연 높이를 배너보다 낮게 만들면 flex stretch가 배너 높이에 정확히 맞춰준다.
   1280px 미만은 세로 스택이라 높이를 맞출 필요가 없어 기본값 유지 */
@media (min-width: 1280px) {
  .cat-banner_side-visual { padding: 12px; }
  .cat-banner_side-cover { width: 96px; }
  .cat-banner_side-info { padding: 12px 16px 14px; }
  .cat-banner_side-booktitle { margin-bottom: 6px; }
}
.book-card { cursor: pointer; }
.book-card_cover-wrap { position: relative; border: 1px solid var(--color-border); background: var(--color-surface); overflow: hidden; margin-bottom: var(--space-md); aspect-ratio: 198/277; }
.book-card_cover-wrap img { width: 100%; height: 100%; object-fit: cover; display: block; }
/* 표지를 아직 올리지 않은 교재 — 칸은 그대로 두고 안내만 넣어 같은 줄의 다른 카드가 밀리지 않게 한다 */
.book-card_cover-empty { position: absolute; inset: 0; display: flex; align-items: center; justify-content: center; font-size: var(--text-2xs); color: var(--color-gray-400); }
.book-card_cover { width: 100%; aspect-ratio: 198/277; object-fit: cover; display: block; border: 1px solid var(--color-border); border-radius: var(--radius-sm); }
.book-card_cover-placeholder { width: 100%; aspect-ratio: 198/277; background: var(--color-surface); border: 1px solid var(--color-border); border-radius: var(--radius-sm); display: flex; align-items: center; justify-content: center; }
.book-card_cover-placeholder span { font-size: var(--text-2xs); color: var(--color-gray-400); }
.book-card_badge { display: none; }
.book-card_badge-new { background: var(--color-primary); }
/* 순위 뱃지 : 베스트셀러 1~10위. 제목 위 아이콘+BEST n (1~3위 금은동 · 4위부터 통일) */
.book-card_rank { display: inline-flex; align-items: center; gap: 4px; height: 22px; margin-bottom: 8px; padding: 0 9px 0 7px; border-radius: var(--radius-xs); background: var(--color-tint-100); font-size: var(--text-3xs); font-weight: var(--font-bold); color: var(--color-primary); letter-spacing: 0.2px; }
.book-card_rank-1, .book-card_rank-2, .book-card_rank-3 { background: var(--color-coral-bg); color: var(--color-coral); } /* 1~3위는 연한 레드 · 4위부터는 연한 블루 */
.book-card_rank svg { width: 12px; height: 12px; }
.book-card_title { font-size: var(--text-sm); font-weight: var(--font-medium); color: var(--color-ink); line-height: 1.5; letter-spacing: -0.2px; display: -webkit-box; -webkit-line-clamp: 2; -webkit-box-orient: vertical; overflow: hidden; margin-bottom: var(--space-xs); }
.book-card_author { font-size: var(--text-xs); font-weight: var(--font-regular); color: var(--color-gray-500); letter-spacing: -0.2px; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; margin-bottom: var(--space-sm); }
.book-card_price { font-size: var(--text-sm); font-weight: var(--font-semibold); color: var(--color-ink); letter-spacing: 0.5px; } /* 리스트형(.book-list-item_price)과 같은 볼륨 — 카드/리스트 쌍둥이 일치 */
/* 메인 카드 롤오버 준비 — 실제 hover 규칙은 하단 호버 섹션에 */
body[data-page="home"] .book-carousel-swipe { padding-top: 8px; margin-top: -8px; } /* 스와이프 뷰포트의 overflow:hidden 에 카드가 떠오를 여유를 주되, 음수 마진으로 원래 위치 유지 */
body[data-page="home"] .book-card { transition: transform var(--duration-base) var(--ease-default); }
body[data-page="home"] .book-card_title, body[data-page="home"] .lecture-card_title, body[data-page="home"] .community-card_sns-title { transition: color var(--duration-base) var(--ease-default); } /* 카드별 볼드 제목 — 롤오버 시 블루로 */

/* 보기 방식 토글 — 현재 보기의 반대 아이콘 하나만 노출 */
.view-toggle_btn { display: inline-flex; align-items: center; justify-content: center; flex-shrink: 0; margin-left: var(--space-sm); width: 38px; height: 38px; background: var(--color-canvas); border: 1px solid var(--color-border-strong); border-radius: var(--radius-md); color: var(--color-gray-700); cursor: pointer; transition: border-color var(--duration-base) var(--ease-default), color var(--duration-base) var(--ease-default); }
.view-toggle_btn svg { width: 18px; height: 18px; }

/* 리스트뷰 전용 요소(배지·설명·버튼)는 그리드뷰에서 숨김 */
.book-card_lbadges, .book-card_actions, .book-card_desc { display: none; }

/* 리스트형 보기 — 검색 결과 리스트와 동일 (표지 128px 좌 · 배지/제목/메타/가격/버튼 우) */
.book-carousel.is-list .book-grid { display: flex; flex-direction: column; gap: 0; }
.book-carousel.is-list .book-grid[hidden] { display: none; } /* 위 규칙이 .book-grid[hidden] 보다 특이도가 높아 숨긴 탭 패널이 그대로 보이던 문제 (리스트뷰·모바일에서 전 패널 노출) */
.book-carousel.is-list .book-card { display: grid; grid-template-columns: 128px 1fr; grid-template-rows: auto auto auto auto auto 1fr; column-gap: var(--space-xl); width: 100%; padding: 28px 0; border-bottom: 1px solid var(--color-border); cursor: default; }
.book-carousel.is-list .book-card:first-child { padding-top: var(--space-xs); }
.book-carousel.is-list .book-card > a { display: contents; }
.book-carousel.is-list .book-card_cover-wrap { grid-area: 1 / 1 / 7 / 2; width: 128px; margin-bottom: 0; align-self: start; }
.book-carousel.is-list .book-card_badge { display: none; }
.book-carousel.is-list .book-card_rank { grid-area: 1 / 2 / 2 / 3; justify-self: start; }
.book-carousel.is-list .book-card_lbadges { grid-area: 2 / 2 / 3 / 3; display: flex; flex-wrap: wrap; gap: 4px; margin-bottom: 14px; }
.book-carousel.is-list .book-card_title { grid-area: 3 / 2 / 4 / 3; font-size: var(--text-base); font-weight: var(--font-medium); line-height: 1.4; -webkit-line-clamp: 2; } /* 교보 참고 — 제목 볼륨 축소 (가격만 도드라지는 위계) */
.book-carousel.is-list .book-card_author { grid-area: 4 / 2 / 5 / 3; font-size: var(--text-xs); margin-bottom: var(--space-md); }
.book-carousel.is-list .book-card_desc { grid-area: 5 / 2 / 6 / 3; display: -webkit-box; -webkit-line-clamp: 2; -webkit-box-orient: vertical; overflow: hidden; font-size: var(--text-xs); font-weight: var(--font-regular); color: var(--color-gray-600); line-height: 1.6; letter-spacing: -0.2px; }
.book-carousel.is-list .book-card_price { grid-area: 6 / 2 / 7 / 3; align-self: end; justify-self: start; font-size: var(--text-base); font-weight: var(--font-semibold); letter-spacing: 0.5px; }
.book-carousel.is-list .book-card_actions { grid-area: 6 / 2 / 7 / 3; align-self: end; justify-self: end; display: flex; gap: var(--space-sm); }

/* 리스트뷰 배지 — 회색 아웃라인 · 아이콘 없음이 표준(아래 공통 규칙에서 회색·아이콘 숨김 지정). 도서 상세(.book-detail_tags)만 예외로 아이콘 노출 */
.book-card_lbadge { display: inline-flex; align-items: center; gap: var(--space-xs); height: 22px; padding: 0 7px; border: 1px solid currentColor; border-radius: var(--radius-xs); background: transparent; font-size: var(--text-2xs); font-weight: var(--font-medium); letter-spacing: -0.2px; opacity: 0.9; }
.book-card_lbadge svg { width: 12px; height: 12px; stroke-width: 1.5; color: var(--color-gray-500); }

/* 리스트뷰 액션 버튼 (검색 결과 버튼과 동일) */
.book-card_btn { display: inline-flex; align-items: center; justify-content: center; height: 48px; padding: 0 24px; border: 1px solid var(--color-border-strong); border-radius: var(--radius-md); background: var(--color-canvas); font-size: var(--text-md); font-weight: var(--font-semibold); color: var(--color-gray-700); letter-spacing: -0.2px; cursor: pointer; transition: border-color var(--duration-base) var(--ease-default), color var(--duration-base) var(--ease-default), background var(--duration-base) var(--ease-default); }
.book-card_btn-primary { background: var(--color-primary); border-color: var(--color-primary); color: var(--color-canvas); }
/* 찜하기 — 카드형은 가격과 하트를 한 줄에 (제목 줄 수와 무관하게 간격 동일) · 리스트형은 우측 버튼 묶음 유지 */
.book-carousel:not(.is-list) .book-card_bottom { display: flex; align-items: center; justify-content: space-between; gap: var(--space-sm); }
.book-carousel:not(.is-list) .book-card_actions { display: flex; }
.book-carousel:not(.is-list) .book-card_btn:not(.book-card_fav) { display: none; }
.book-carousel:not(.is-list) .book-card_fav { flex: 0 0 32px; width: 32px; height: 32px; padding: 0; border-radius: 50%; }
.book-carousel:not(.is-list) .book-card_fav svg { width: 16px; height: 16px; }
.book-carousel.is-list .book-card_bottom { display: contents; } /* 래퍼를 풀어 가격·버튼이 리스트형 그리드에 그대로 배치되게 */
.book-carousel.is-list .book-card_fav { flex: 0 0 48px; width: 48px; } /* 다른 버튼(48px)과 정사각으로 맞춤 — 공통 .book-card_fav(44px)는 검색 결과와 공유하므로 여기서만 오버라이드 */
.book-carousel.is-list .book-card_fav svg { width: 22px; height: 22px; }
.carousel-btn { display: none; }

/* ========== Book Finder ========== */
.book-finder { background: var(--color-surface-light); padding: 80px 0; }
.finder-wrap { max-width: 700px; margin: 0 auto; }
.finder-title { font-size: var(--text-4xl); font-weight: var(--font-bold); color: var(--color-ink); letter-spacing: -0.4px; text-align: center; margin-bottom: var(--space-md); }
.finder-subtitle { font-size: var(--text-base); font-weight: var(--font-regular); color: var(--color-gray-600); text-align: center; letter-spacing: -0.2px; margin-bottom: var(--space-4xl); }
.finder-progress { height: 3px; background: var(--color-border); border-radius: var(--radius-pill); margin-bottom: var(--space-2xl); }
.finder-progress_bar { height: 3px; background: var(--color-primary); border-radius: var(--radius-pill); width: 50%; transition: width var(--duration-slow) var(--ease-default); }
.finder-step { padding: var(--space-3xl); background: var(--color-canvas); border-radius: var(--radius-sm); border: 1px solid var(--color-border); }
.finder-step_label { font-size: var(--text-xs); font-weight: var(--font-medium); color: var(--color-gray-500); letter-spacing: -0.2px; margin-bottom: var(--space-md); }
.finder-step_question { font-size: var(--text-lg); font-weight: var(--font-bold); color: var(--color-ink); letter-spacing: -0.3px; margin-bottom: 28px; }
.exam-grid { display: flex; gap: var(--space-base); }
.exam-card { flex: 1; display: flex; flex-direction: column; align-items: center; padding: 20px 10px; border: 1px solid var(--color-border); border-radius: var(--radius-sm); cursor: pointer; transition: border-color var(--duration-base) var(--ease-default), background var(--duration-base) var(--ease-default); }
.exam-card-active { border-color: var(--color-primary); background: var(--color-tint-50); }
.exam-card_icon { width: 40px; height: 40px; background: var(--color-surface); border-radius: 50%; margin-bottom: 10px; display: flex; align-items: center; justify-content: center; }
.exam-card_icon img, .exam-card_icon svg { width: 20px; height: 20px; color: var(--color-gray-600); }
.exam-card_label { font-size: var(--text-sm); font-weight: var(--font-semibold); color: var(--color-ink); letter-spacing: -0.2px; margin-bottom: var(--space-xs); }
.exam-card_desc { font-size: var(--text-2xs); font-weight: var(--font-regular); color: var(--color-gray-500); letter-spacing: 0; }
.finder-hint { text-align: center; font-size: var(--text-xs); font-weight: var(--font-regular); color: var(--color-gray-500); margin-top: var(--space-lg); }

/* ========== Strip Banner ========== */
.strip-banner { padding: 24px 0; }
.strip-banner_grid { display: grid; grid-template-columns: repeat(2, 1fr); gap: var(--space-base); }
.strip-banner_link { display: flex; align-items: center; justify-content: space-between; gap: var(--space-lg); height: 150px; padding: 0 var(--space-3xl); background: var(--color-surface); border-radius: var(--radius-xl); overflow: hidden; }
.strip-banner_text { display: flex; flex-direction: column; gap: var(--space-xs); min-width: 0; }
.strip-banner_title { font-size: var(--text-xl); font-weight: var(--font-semibold); color: var(--color-ink); }
.strip-banner_sub { font-size: var(--text-sm); color: var(--color-gray-600); }
.strip-banner_cover { flex-shrink: 0; width: auto; height: 118px; border: 1px solid var(--color-border); border-radius: var(--radius-xs); }
.strip-banner_dots { display: none; } /* 도트는 모바일 캐러셀 전용 */

/* ========== Lecture Section ========== */
.lecture-grid { display: grid; grid-template-columns: repeat(5, 1fr); gap: var(--space-lg); }
.lecture-card { cursor: pointer; }
.lecture-card_thumb-wrap { position: relative; border-radius: var(--radius-sm); overflow: hidden; margin-bottom: var(--space-md); background: var(--color-surface); aspect-ratio: 16/9; }
.lecture-card_thumb { width: 100%; height: 100%; object-fit: cover; display: block; }
.lecture-card_thumb-placeholder { width: 100%; height: 100%; background: linear-gradient(135deg, var(--color-border), var(--color-border-strong)); display: flex; align-items: center; justify-content: center; }
.lecture-card_play { position: absolute; top: 50%; left: 50%; transform: translate(-50%, -50%); width: 40px; height: 40px; background: rgba(0,0,0,0.55); border-radius: 50%; display: flex; align-items: center; justify-content: center; }
.lecture-card_play img, .lecture-card_play svg { width: 16px; height: 16px; color: var(--color-canvas); fill: var(--color-canvas); margin-left: 2px; }
.lecture-card_duration { position: absolute; bottom: 8px; right: 8px; background: rgba(0,0,0,0.7); color: var(--color-canvas); font-size: var(--text-3xs); font-weight: var(--font-regular); border-radius: var(--radius-xs); padding: 2px 5px; }
.lecture-card_title { font-size: var(--text-sm); font-weight: var(--font-semibold); color: var(--color-ink); line-height: 1.5; letter-spacing: -0.2px; display: -webkit-box; -webkit-line-clamp: 2; -webkit-box-orient: vertical; overflow: hidden; margin-bottom: 6px; }
.lecture-card_instructor { font-size: var(--text-xs); font-weight: var(--font-regular); color: var(--color-gray-500); letter-spacing: -0.2px; }

/* ========== Community & SNS ========== */
.community-grid { display: grid; grid-template-columns: repeat(3, 1fr); gap: var(--space-xl); }
.community-card { border-radius: var(--radius-sm); overflow: hidden; border: 1px solid var(--color-border); background: var(--color-canvas); }
.community-card a { display: block; text-decoration: none; color: inherit; }
.community-card_img-wrap { position: relative; }
.community-card_img { width: 100%; height: auto; aspect-ratio: 4/3; object-fit: cover; display: block; background: var(--color-border); }
body[data-page="home"] .community-card_img { object-position: top; } /* 메인 「같이 공부하는 사람들」 썸네일만 상단 기준 크롭 — 라운지는 유튜브 썸네일 특성상 중앙 크롭 유지 */
.community-card_badge { position: absolute; top: 12px; left: 12px; display: inline-flex; align-items: center; gap: var(--space-xs); }
.community-card_badge-ig { background: var(--color-instagram); color: var(--color-canvas); border-radius: var(--radius-xs); padding: 4px 8px; font-size: var(--text-2xs); font-weight: var(--font-bold); }
.community-card_badge-ig svg, .community-card_badge-ig img { width: 14px; height: 14px; }
.community-card_badge-yt { background: var(--color-youtube); color: var(--color-canvas); border-radius: var(--radius-xs); padding: 4px 8px; font-size: var(--text-2xs); font-weight: var(--font-bold); }
.community-card_badge-yt svg, .community-card_badge-yt img { width: 14px; height: 14px; }
.community-card_badge-blog { background: var(--color-blog); color: var(--color-canvas); border-radius: var(--radius-xs); padding: 4px 8px; font-size: var(--text-2xs); font-weight: var(--font-bold); }
.community-card_badge-blog svg, .community-card_badge-blog img { width: 14px; height: 14px; }
.community-card_body { padding: 16px 20px 20px; }
.community-card_sns-title { font-size: var(--text-sm); font-weight: var(--font-semibold); color: var(--color-ink); letter-spacing: -0.2px; line-height: 1.5; margin-bottom: 6px; display: -webkit-box; -webkit-line-clamp: 2; -webkit-box-orient: vertical; overflow: hidden; }
.community-card_sns-account { font-size: var(--text-xs); font-weight: var(--font-regular); color: var(--color-gray-600); letter-spacing: -0.2px; }

/* ========== Footer ========== */
.footer { background: var(--color-canvas); border-top: 1px solid var(--color-border); padding: 56px 0 32px; }
/* 3단 컬럼: 브랜드(좌) + 사이트맵 그룹(우) */
.footer-inner { display: flex; align-items: flex-start; gap: var(--space-3xl); }
/* 컬럼 1 — 로고 + 사업자 정보 (모바일은 아코디언, PC는 라벨·화살표 숨기고 항상 펼침) */
.footer-brand { flex: 0 0 auto; max-width: 460px; }
.footer-brand_bar { display: block; width: auto; padding: 0; background: none; border: 0; text-align: left; cursor: default; }
.footer-brand_label, .footer-brand_arrow { display: none; }
.footer-logo { display: inline-block; margin-bottom: var(--space-lg); }
.footer-logo_img { height: 30px; width: auto; vertical-align: middle; }
.footer-info_list { display: flex; flex-direction: column; gap: 5px; margin-bottom: var(--space-md); }
.footer-info_item { font-size: var(--text-xs); font-weight: var(--font-regular); color: var(--color-gray-500); letter-spacing: -0.2px; line-height: 1.7; }
.footer-info_item strong { font-weight: var(--font-medium); color: var(--color-gray-600); }
/* 수상 배지 띠 — 사업자 정보·사이트맵 줄과 저작권 줄 사이의 독립 가로 띠. 위아래 선으로 구획하고, 배지는 [그림 | 설명] 가로형을 세로선으로 나눈다 */
.footer-awards { display: flex; align-items: center; margin-top: var(--space-2xl); padding: var(--space-lg) 0; border-top: 1px solid var(--color-border); }
.footer-awards + .footer-bottom { margin-top: 0; } /* 띠 아래 선이 곧 저작권 줄의 윗선 — 두 줄 사이 빈 여백을 없앤다 */
.footer-award { display: flex; align-items: center; gap: var(--space-md); padding: 0 var(--space-4xl); }
.footer-award:first-child { padding-left: 0; }
.footer-award + .footer-award { border-left: 1px solid var(--color-border); }
.footer-award_img { display: block; flex-shrink: 0; width: auto; height: 64px; object-fit: contain; } /* 원본 비율이 제각각이라 폭이 아닌 높이로 맞춘다 */
@media (min-width: 1280px) { .footer-award_img-mid { height: 71px; margin: calc(var(--space-xs) * -1) 0 calc(var(--space-md) / -4); } } /* 웹 전용 — 교육대상 배지만 64 → 71px(원본 GIF 높이 그대로라 가장 선명). 늘어난 7px 는 위 -4px·아래 -3px 음수 마진으로 걷어내 띠 높이 유지 — 반 픽셀(-3.5px)로 나누면 그림이 흐려져 정수로 나눈다(3px 토큰이 없어 12px 의 1/4) */
@media (min-width: 1280px) { .footer-award_img-large { height: 84px; margin: calc(var(--space-lg) / -2) 0; } } /* 웹 전용 — 토익 배지만 64 → 84px. 늘어난 20px 는 위아래 음수 마진(-10px씩, 20px 의 절반)으로 걷어내 띠 높이는 그대로 두고 그림 위아래 여백만 줄인다 */
@media (min-width: 1280px) { .footer-award_img-small { height: 60px; } } /* 웹 전용 — 팝업스토어 로고는 가로로 길어 64px 이면 무거워 보여 60px 로 줄인다. 띠 높이는 다른 배지(64px)가 정하므로 여백 보정은 필요 없다 */
.footer-award_text { font-size: var(--text-xs); font-weight: var(--font-medium); color: var(--color-gray-700); letter-spacing: -0.2px; line-height: 1.45; white-space: nowrap; }
.footer-award_note { display: block; font-size: 10px; font-weight: var(--font-regular); color: var(--color-gray-500); letter-spacing: -0.2px; } /* 집계 기준 — 수상 내용을 거드는 보조 글자라 SNS 라벨과 같은 10px */
.footer-award_em { font-weight: var(--font-semibold); color: var(--color-primary); } /* 수상 핵심(부문·순위)만 파랑으로 강조 */
.footer-trademark { font-size: 11px; font-weight: var(--font-regular); color: var(--color-gray-400); letter-spacing: -0.2px; line-height: 1.7; }
/* 컬럼 2·3 그룹 — 오른쪽에 나란히 */
.footer-cols { display: flex; gap: 72px; margin-left: auto; }
/* 컬럼 2 — 이용 안내 링크 */
.footer-col_list { display: flex; flex-direction: column; gap: var(--space-md); }
.footer-col_link { font-size: var(--text-sm); font-weight: var(--font-medium); color: var(--color-gray-700); letter-spacing: -0.2px; transition: color var(--duration-base) var(--ease-default); }
.footer-col_link-strong { color: var(--color-ink); }
/* 컬럼 3 — Family Site 드롭다운 (sort-select 공통 스타일 재사용 · 푸터는 위로 펼침) + 소셜 */
.footer-family { position: relative; margin-bottom: var(--space-lg); }
.footer-family .sort-select_trigger { width: 100%; justify-content: space-between; font-size: var(--text-xs); } /* 폭 고정(200px)을 풀어 아래 SNS 줄과 같은 너비로 — 부모 .footer-col 의 너비는 SNS 줄이 정한다 */
.footer-family .sort-select_menu { top: auto; bottom: calc(100% + 6px); left: 0; right: auto; width: 100%; }
.footer-family_link { display: block; }
.footer-social { display: flex; gap: var(--space-base); } /* 원 아래 이름이 원보다 넓어 글자끼리 붙어 보이므로 간격은 16px 유지 */
/* 아이콘 아래에 이름을 함께 둔다 — 네이버 카페가 두 곳이라 아이콘만으로는 어디인지 알 수 없다.
   모양은 전체 메뉴의 소셜 버튼(.mega-social)과 같은 결 — 흰 원 + 옅은 테두리, 올리면 테두리가 파래지며 살짝 떠오른다 */
.footer-social_link { display: flex; flex-direction: column; align-items: center; gap: 6px; }
.footer-social_icon { position: relative; display: flex; align-items: center; justify-content: center; width: 36px; height: 36px; background: var(--color-canvas); border: 1px solid var(--color-border); border-radius: 50%; transition: border-color var(--duration-base) var(--ease-default), transform var(--duration-base) var(--ease-default); }
.footer-social_icon img, .footer-social_icon svg { width: 18px; height: 18px; opacity: 0.45; transition: opacity var(--duration-base) var(--ease-default); }
/* 올렸을 때 아이콘까지 파랗게 — SVG 를 <img> 로 넣어 색을 CSS 로 못 바꾸므로, 같은 그림의 파란 버전을 위에 겹쳐 두고 바꿔 보여 준다 */
.footer-social_icon::after { content: ""; position: absolute; width: 18px; height: 18px; background: var(--footer-social-glyph) center / contain no-repeat; opacity: 0; transition: opacity var(--duration-base) var(--ease-default); }
.footer-social_icon-youtube { --footer-social-glyph: url("/images/icons/ico-youtube-blue.svg"); }
.footer-social_icon-instagram { --footer-social-glyph: url("/images/icons/ico-instagram-blue.svg"); }
.footer-social_icon-blog { --footer-social-glyph: url("/images/icons/ico-blog-blue.svg"); }
.footer-social_icon-cafe { --footer-social-glyph: url("/images/icons/ico-cafe-blue.svg"); }
.footer-social_label { font-size: 10px; font-weight: var(--font-medium); color: var(--color-gray-500); letter-spacing: -0.3px; white-space: nowrap; transition: color var(--duration-base) var(--ease-default); } /* 10px — 아이콘을 거드는 보조 글자라 최소 토큰(11px)보다 한 단계 작게 */
/* 하단: 구분선 + 상표 문구(전체 폭 한 줄) + copyright */
.footer-bottom { display: flex; flex-direction: column; gap: 6px; margin-top: var(--space-2xl); padding-top: var(--space-lg); border-top: 1px solid var(--color-border); }
.footer-copy_text { font-size: 11px; font-weight: var(--font-regular); color: var(--color-gray-400); letter-spacing: -0.2px; }

/* ========== Scroll to Top ========== */
.bottom-nav { display: none; } /* 모바일 전용 하단 탭바 (컬리 벤치마킹) — 스타일은 mobile.css, 데스크탑·태블릿은 숨김 */
.scroll-top { position: fixed; left: calc(100vw - 170px); top: calc(100vh - 68px); transform: translateX(-50%); width: 44px; height: 44px; background: var(--color-canvas); border: 1px solid var(--color-border); border-radius: var(--radius-tab); display: flex; align-items: center; justify-content: center; opacity: 0; pointer-events: none; transition: opacity var(--duration-base) var(--ease-default), border-color var(--duration-base) var(--ease-default); z-index: var(--z-sticky); }
.scroll-top-visible { opacity: 1; pointer-events: auto; transition-delay: 0.35s; }
.scroll-top img, .scroll-top svg { width: 24px; height: 24px; opacity: 0.6; }

/* ========================================================
   TOEIC Category Page
======================================================== */

/* ── Breadcrumb ── */
.breadcrumb { padding: 22px 0 0; }
.breadcrumb_list { display: flex; align-items: center; justify-content: flex-end; gap: 6px; }
.breadcrumb_item { display: flex; align-items: center; gap: 6px; font-size: var(--text-xs); font-weight: var(--font-regular); color: var(--color-gray-500); letter-spacing: -0.2px; }
.breadcrumb_link { display: inline-flex; align-items: center; gap: var(--space-xs); color: var(--color-gray-500); transition: color var(--duration-base) var(--ease-default); }
.breadcrumb_home { width: 14px; height: 14px; }
.breadcrumb_sep { width: 14px; height: 14px; color: var(--color-border-strong); }
.breadcrumb_current { color: var(--color-gray-700); font-weight: var(--font-semibold); }

/* ── GNB 2-depth 드롭다운 ── */
.gnb-item { position: relative; display: flex; align-items: center; }
.gnb-link-active { color: var(--color-primary); font-weight: var(--font-semibold); }
.gnb-link-active::after { opacity: 1; }
.gnb-submenu { position: absolute; top: 100%; left: 6px; z-index: var(--z-submenu); display: flex; flex-direction: column; min-width: 232px; padding: var(--space-sm); background: var(--color-canvas); border: 1px solid var(--color-border); border-radius: var(--radius-lg); box-shadow: 0 12px 32px rgba(0,0,0,0.1); opacity: 0; visibility: hidden; transform: translateY(6px); transition: opacity var(--duration-base) var(--ease-default), transform var(--duration-base) var(--ease-default), visibility var(--duration-base) var(--ease-default); }
.gnb-item:focus-within .gnb-submenu { opacity: 1; visibility: visible; transform: translateY(0); }
.gnb-submenu_link { display: flex; align-items: center; justify-content: space-between; gap: var(--space-base); height: 44px; padding: 0 14px; border-radius: var(--radius-md); font-size: var(--text-md); font-weight: var(--font-medium); color: var(--color-ink); letter-spacing: -0.2px; transition: background var(--duration-base) var(--ease-default), color var(--duration-base) var(--ease-default); }
.gnb-submenu_link em { font-style: normal; font-size: var(--text-xs); font-weight: var(--font-bold); color: var(--color-primary); }

/* ── 페이지 히어로 (신규) ── */
.page-hero { padding: 0 0 28px; }
.page-hero_eyebrow { margin-bottom: 6px; font-size: var(--text-sm); font-weight: var(--font-bold); color: var(--color-primary); letter-spacing: -0.2px; } /* 상위 분류 표기 (예: 시리즈 목록의 매체명) */
.page-hero_title { font-size: var(--text-6xl); font-weight: var(--font-bold); color: var(--color-ink); letter-spacing: -0.8px; line-height: 1.2; margin-bottom: 10px; }
.page-hero_desc { font-size: var(--text-md); font-weight: var(--font-regular); color: var(--color-gray-600); letter-spacing: -0.2px; }

/* ── 도서 목록 섹션 ── */
.books-section { padding-top: 0; }

/* ── 그리드 6열 (토익 페이지 테스트 적용 — 기본 auto-fill 160px 7열 대비 여백 완화) ── */
/* (제거됨 2026-07-24) 토익 페이지 전용 그리드 오버라이드 — 메인과 여백이 달라져 삭제, 공통 규칙(160px 고정폭·균등 분배)을 따름 */

/* ── 무한 스크롤 로더 — 스크롤 도달 시 자동 로딩 ('더 보기' 버튼 대체) ── */
.infinite-loader { display: flex; align-items: center; justify-content: center; gap: 10px; padding: 28px 0 4px; }
.infinite-loader[hidden] { display: none; }
.infinite-loader_spinner { width: 18px; height: 18px; border: 2px solid var(--color-border-strong); border-top-color: var(--color-primary); border-radius: 50%; opacity: 0; animation: infiniteSpin 0.8s linear infinite; transition: opacity var(--duration-base) var(--ease-default); }
.infinite-loader.is-loading .infinite-loader_spinner { opacity: 1; }
.infinite-loader_text { font-size: var(--text-sm); color: var(--color-gray-500); letter-spacing: -0.2px; }
.infinite-loader.is-done .infinite-loader_spinner { display: none; } /* 완료 시 스피너 제거 */
.infinite-loader.is-done .infinite-loader_text { font-size: var(--text-md); font-weight: var(--font-semibold); color: var(--color-ink); } /* 완료 문구는 또렷하게 */
@keyframes infiniteSpin { to { transform: rotate(360deg); } }

/* ── 탭 – 토익 페이지 필 스타일 오버라이드 (라운지·무료인강 페이지도 동일 스타일 공유) ── */
.books-section .cat-tabs, body[data-page="lounge"] .cat-tabs, body[data-page="free-lecture"] .cat-tabs { border-bottom: none; gap: 10px; margin-bottom: 0; padding-bottom: var(--space-2xl); } /* 탭 아래 여백 — 콘텐츠와 넉넉히 분리 */
.books-section .cat-tab, body[data-page="lounge"] .cat-tab, body[data-page="free-lecture"] .cat-tab { height: 44px; padding: 0 20px; border: 1px solid var(--color-border-strong); border-radius: var(--radius-lg); font-size: var(--text-md); font-weight: var(--font-medium); color: var(--color-gray-700); background: var(--color-canvas); margin: 0; transition: background var(--duration-base) var(--ease-default), border-color var(--duration-base) var(--ease-default), color var(--duration-base) var(--ease-default); }
.books-section .cat-tab + .cat-tab, body[data-page="lounge"] .cat-tab + .cat-tab, body[data-page="free-lecture"] .cat-tab + .cat-tab { margin-left: 0; }
.books-section .cat-tab-active, body[data-page="lounge"] .cat-tab-active, body[data-page="free-lecture"] .cat-tab-active { background: var(--color-tint-50); border-color: var(--color-primary); color: var(--color-primary); font-weight: var(--font-semibold); }
/* 칩 안의 점수 표기(550+ 등) — 아래 웹 전용 블록이 이 값을 덮어야 하므로 반드시 그 앞에 둔다(특이도가 같아 순서로 결정) */
.books-section .cat-tab em { font-style: normal; font-size: var(--text-sm); font-weight: var(--font-medium); color: var(--color-gray-700); margin-left: 6px; }
.books-section .cat-tab-active em { color: var(--color-primary); }

/* ── 카테고리 2뎁스 탭: 웹 전용 강조 + 헤더 아래 고정 (min-width:1280px = 태블릿 분기 밖) ──
   고객사가 "탭이 눈에 띄지 않는다"고 해서 ① 선택 칩을 연한 틴트 → 브랜드 블루 채움으로 대비를 올리고
   ② 스크롤을 내려도 헤더 바로 아래에 따라붙게 한다.
   position:sticky 를 쓰지 않는 이유: 토익만 탭과 상품 목록이 서로 다른 <section> 이라
   sticky 범위(부모 컨테이닝 블록)가 목록 전에 끝나버린다. 그래서 JS 가 fixed 로 전환한다(is-stuck).
   fixed 전환 시 폭·패딩을 .container(max 1320 · 좌우 40)와 동일하게 맞춰 칩이 아래 목록과 정렬된다. */
@media (min-width: 1280px) {
  .books-section .cat-tab-active, body[data-page="lounge"] .cat-tab-active, body[data-page="free-lecture"] .cat-tab-active { background: var(--color-primary); border-color: var(--color-primary); color: var(--color-canvas); }
  .books-section .cat-tab-active em, body[data-page="lounge"] .cat-tab-active em, body[data-page="free-lecture"] .cat-tab-active em { color: var(--color-canvas); }
  /* :not(.search-result-section) — 검색·학습자료실은 자체 필터 UI(사이드바·FAB)와 활성칩 규칙이 따로 있어 제외.
     배경·그림자는 화면 가로 전체(left:0/right:0)를 채우고, 칩은 .container 기준선에 맞춰야 하므로
     좌우 padding 은 JS 가 실측값으로 넣는다 (100vw 는 스크롤바를 포함해 7px 어긋난다). */
  .books-section:not(.search-result-section) .cat-tabs.is-stuck { position: fixed; top: 0; left: 0; right: 0; z-index: var(--z-sticky); padding: var(--space-md) 0; background: var(--color-canvas); box-shadow: var(--shadow-soft); }
  /* 토익만 탭이 9개라 기본 좌우 여백(20px)으로는 마지막 칩(비매품 모의고사)이 콘텐츠 폭 밖으로 밀린다.
     여백을 줄여 한 줄에 넣고 남는 공간은 칩들이 나눠 가져 탭 줄 끝이 콘텐츠 오른쪽 끝과 정확히 맞는다 */
  body[data-page="toeic"] .cat-tab { flex: 1 1 auto; padding: 0 12px; }
}
/* fixed 로 빠진 탭 높이를 대신 채우는 스페이서 — 높이는 JS 가 넣는다.
   display 를 선언하면 [hidden] 을 특이도로 눌러 고정 해제 후에도 높이가 남으므로 선언하지 않는다(div 기본값 block). */

/* ── 상품 수 · 정렬 바 ── */
.product-bar { display: flex; align-items: center; justify-content: space-between; padding: 18px 24px; background: var(--color-surface-cool); border-radius: var(--radius-lg); margin: 20px 0 40px 0; }
.product-bar_left { display: flex; align-items: center; gap: var(--space-base); }
.product-bar_count { font-size: var(--text-sm); font-weight: var(--font-bold); color: var(--color-ink); letter-spacing: -0.2px; }
.product-bar_count em { font-style: normal; } /* 학습자료실은 숫자를 <em>(스크립트 갱신용)으로 감싸 브라우저 기본 기울임이 들어간다 — 검색 페이지처럼 바로 세운다 */
.filter-btn { display: inline-flex; align-items: center; gap: 6px; height: 38px; padding: 0 18px; background: var(--color-canvas); border: 1px solid var(--color-border-strong); border-radius: var(--radius-md); font-size: var(--text-sm); font-weight: var(--font-semibold); color: var(--color-ink); letter-spacing: -0.2px; cursor: pointer; transition: border-color var(--duration-base) var(--ease-default), color var(--duration-base) var(--ease-default); }
.books-section .filter-btn[hidden] { display: none; }
.filter-btn svg { width: 16px; height: 16px; color: var(--color-primary); }
.product-bar_sort { display: flex; align-items: center; gap: var(--space-xs); margin-left: auto; }
.sort-btn { height: 30px; padding: 0 12px; font-size: var(--text-sm); font-weight: var(--font-regular); color: var(--color-gray-500); letter-spacing: -0.2px; background: none; border: none; border-radius: var(--radius-pill); cursor: pointer; transition: color var(--duration-base) var(--ease-default), background var(--duration-base) var(--ease-default); }
.sort-btn-active { font-weight: var(--font-semibold); color: var(--color-ink); background: var(--color-canvas); }

/* ── 셀렉트 드롭다운 (공통) — 셀렉트가 필요한 모든 곳의 기본 컴포넌트. 네이티브 <select> 신규 사용 금지
   기본형: 정렬 등 컴팩트 우측 정렬(search · toeic · toss) · 전체폭 폼: .sort-select-full 모디파이어 추가(MP3 회차 · 무료인강 모바일 등) ── */
.sort-select { position: relative; margin-left: auto; }
.sort-select_trigger { display: inline-flex; align-items: center; gap: 6px; height: 38px; padding: 0 14px; background: var(--color-canvas); border: 1px solid var(--color-border-strong); border-radius: var(--radius-md); font-size: var(--text-xs); font-weight: var(--font-semibold); color: var(--color-ink); letter-spacing: -0.2px; cursor: pointer; transition: border-color var(--duration-base) var(--ease-default), color var(--duration-base) var(--ease-default); }
.sort-select_trigger:disabled { background: var(--color-surface-light); border-color: var(--color-border); color: var(--color-gray-400); cursor: not-allowed; } /* 선행 선택 전 비활성 (예: 교재채택 카테고리2) */
.sort-select_trigger:disabled .sort-select_arrow { color: var(--color-gray-400); }
.sort-select_arrow { display: inline-block; width: 16px; height: 16px; color: var(--color-gray-500); transition: transform var(--duration-base) var(--ease-default), color var(--duration-base) var(--ease-default); }
.sort-select_arrow svg { width: 16px; height: 16px; }
.sort-select_trigger[aria-expanded="true"] .sort-select_arrow { transform: scaleY(-1); }
.sort-select_trigger[aria-expanded="true"] .sort-select_arrow { color: var(--color-primary); }
.sort-select_menu { position: absolute; top: calc(100% + 6px); right: 0; z-index: var(--z-dropdown); min-width: 140px; padding: 6px; background: var(--color-canvas); border: 1px solid var(--color-border); border-radius: var(--radius-lg); box-shadow: 0 8px 24px rgba(0,0,0,0.1); list-style: none; }
.sort-select_menu[hidden] { display: none; }
.sort-select_option { padding: 9px 12px; border-radius: var(--radius-md); font-size: var(--text-sm); font-weight: var(--font-regular); color: var(--color-gray-700); letter-spacing: -0.2px; white-space: nowrap; cursor: pointer; transition: background var(--duration-base) var(--ease-default), color var(--duration-base) var(--ease-default); }
.sort-select_option[aria-selected="true"] { font-weight: var(--font-semibold); color: var(--color-primary); background: var(--color-tint-50); }
.sort-select_option[hidden] { display: none; } /* 그룹 필터 등으로 감춘 옵션 */
/* 옵션이 링크(주소 이동)일 때 — 글자만이 아니라 줄 전체가 눌리게 한다 */
.sort-select_option > a { display: block; margin: -9px -12px; padding: 9px 12px; border-radius: inherit; color: inherit; text-decoration: none; }
/* 전체폭 모디파이어 — 폼 성격의 셀렉트는 이 클래스만 추가하면 트리거·메뉴가 전체폭이 되고 옵션 많으면 메뉴 내부 스크롤 */
.sort-select-full { width: 100%; margin-left: 0; }
.sort-select-full .sort-select_trigger { width: 100%; justify-content: space-between; height: 40px; font-size: var(--text-sm); font-weight: var(--font-medium); }
.sort-select-full .sort-select_menu { left: 0; right: 0; width: 100%; max-height: 280px; overflow-y: auto; }

/* ── 그리드: 메인 베스트셀러와 동일한 6열(.book-grid 기본값 상속) ── */

/* ── 레벨 카드 (2-depth 핵심) ── */
.level-grid { display: grid; grid-template-columns: repeat(4, 1fr); gap: var(--space-lg); }
.level-card { position: relative; display: flex; flex-direction: column; padding: 26px 24px 24px; background: var(--color-canvas); border: 1px solid var(--color-border); border-radius: var(--radius-xl); overflow: hidden; scroll-margin-top: 100px; transition: border-color var(--duration-base) var(--ease-default), box-shadow var(--duration-base) var(--ease-default), transform var(--duration-base) var(--ease-default); }
.level-card::before { content: ""; position: absolute; top: 0; left: 0; right: 0; height: 4px; background: var(--color-primary); transform: scaleX(0); transform-origin: left; transition: transform 0.25s ease; }
.level-card_top { display: flex; align-items: center; justify-content: space-between; margin-bottom: 18px; }
.level-card_step { font-size: var(--text-2xs); font-weight: var(--font-bold); color: var(--color-gray-500); letter-spacing: 1px; }
.level-card_score { font-size: var(--text-5xl); font-weight: var(--font-bold); color: var(--color-primary); letter-spacing: -1px; line-height: 1; }
.level-card_score em { font-style: normal; font-size: var(--text-xl); }
.level-card_name { font-size: var(--text-lg); font-weight: var(--font-bold); color: var(--color-ink); letter-spacing: -0.4px; margin-bottom: 10px; }
.level-card_desc { flex: 1; font-size: var(--text-sm); font-weight: var(--font-regular); color: var(--color-gray-600); line-height: 1.6; letter-spacing: -0.2px; margin-bottom: 18px; }
.level-card_target { display: inline-flex; align-items: center; align-self: flex-start; padding: 5px 12px; background: var(--color-tint-50); border-radius: var(--radius-pill); font-size: var(--text-2xs); font-weight: var(--font-semibold); color: var(--color-primary); letter-spacing: -0.2px; margin-bottom: var(--space-lg); }
.level-card_go { display: inline-flex; align-items: center; gap: var(--space-xs); font-size: var(--text-sm); font-weight: var(--font-semibold); color: var(--color-ink); letter-spacing: -0.2px; transition: gap var(--duration-base) var(--ease-default), color var(--duration-base) var(--ease-default); }
.level-card_go svg { width: 16px; height: 16px; }

/* ── 학습 로드맵 ── */
.roadmap-box { padding: var(--space-2xl); background: var(--color-surface-light); border-radius: var(--radius-xl); } /* 풀사이즈 밴드 대신 컨텐츠 폭 박스 */
.section.section-roadmap { padding-top: 0; } /* 위 여백은 배너의 margin-bottom(32px)만 남김 — 배너↔콘텐츠 기존 리듬과 동일 */
.section-roadmap .section_title { font-size: var(--text-xl); } /* 메인 섹션 타이틀(2xl)보다 한 단계 낮춤 */
.books-section:has(+ .section-roadmap) { padding-bottom: 0; } /* 로드맵이 바로 뒤따르면 섹션 하단 패딩 제거(여백 중복 방지) */
.books-section:has([data-cat-banner]):not(:has(+ .section-roadmap)) { padding-bottom: var(--space-2xl); } /* 로드맵을 숨긴 페이지 — 배너 margin(32px)과 합쳐 로드맵이 있을 때의 배너↔탭 간격(64px)을 그대로 유지 */
.roadmap { display: flex; align-items: flex-start; gap: 0; }
.roadmap_step { position: relative; flex: 1; display: flex; flex-direction: column; align-items: center; text-align: center; padding: 0 12px; }
/* 연결선 — 베이스(연한 파랑) */
.roadmap_step:not(:last-child)::after { content: ""; position: absolute; top: 24px; left: 50%; width: 100%; height: 2px; background: var(--color-line); z-index: 0; }
/* 연결선 — 흐르는 채움(진한 파랑, 무한 반복) */
.roadmap_step:not(:last-child)::before { content: ""; position: absolute; top: 24px; left: 50%; width: 100%; height: 2px; background: var(--color-primary); z-index: 1; transform: scaleX(0); transform-origin: left center; animation: roadmapLineFlow 4s ease-in-out infinite; }
.roadmap_step:nth-child(1)::before { animation-delay: 0.3s; }
.roadmap_step:nth-child(2)::before { animation-delay: 1.3s; }
.roadmap_step:nth-child(3)::before { animation-delay: 2.3s; }
.roadmap_dot { position: relative; z-index: 2; display: flex; align-items: center; justify-content: center; width: 48px; height: 48px; background: var(--color-primary); border: 4px solid var(--color-surface-light); border-radius: 50%; box-shadow: 0 0 0 1px var(--color-line); color: var(--color-canvas); font-size: var(--text-base); font-weight: var(--font-bold); margin-bottom: var(--space-base); animation: roadmapDotPulse 4s ease-in-out infinite; }
.roadmap_step:nth-child(1) .roadmap_dot { animation-delay: 0s; }
.roadmap_step:nth-child(2) .roadmap_dot { animation-delay: 1s; }
.roadmap_step:nth-child(3) .roadmap_dot { animation-delay: 2s; }
.roadmap_step:nth-child(4) .roadmap_dot { animation-delay: 3s; }
/* 3단계 로드맵(토스) — 4번째 칸이 없으므로 한 바퀴를 3초로 줄여 빈 텀 없이 순환시킨다 */
.roadmap:not(:has(.roadmap_step:nth-child(4))) .roadmap_step::before, .roadmap:not(:has(.roadmap_step:nth-child(4))) .roadmap_dot { animation-duration: 3s; }
/* 5단계 로드맵(토익) — 한 바퀴를 5초로 늘리고 4번째 라인·5번째 점의 순번 딜레이를 잇는다 (4단계 페이지는 그대로) */
.roadmap:has(.roadmap_step:nth-child(5)) .roadmap_step::before, .roadmap:has(.roadmap_step:nth-child(5)) .roadmap_dot { animation-duration: 5s; }
.roadmap:has(.roadmap_step:nth-child(5)) .roadmap_step:nth-child(4)::before { animation-delay: 3.3s; }
.roadmap:has(.roadmap_step:nth-child(5)) .roadmap_step:nth-child(5) .roadmap_dot { animation-delay: 4s; }
.roadmap_score { font-size: var(--text-xs); font-weight: var(--font-bold); color: var(--color-primary); letter-spacing: -0.2px; margin-bottom: var(--space-xs); }
.roadmap_name { font-size: var(--text-md); font-weight: var(--font-bold); color: var(--color-ink); letter-spacing: -0.3px; margin-bottom: 6px; }
.roadmap_note { font-size: var(--text-xs); font-weight: var(--font-regular); color: var(--color-gray-500); letter-spacing: -0.2px; line-height: 1.5; }

@keyframes roadmapLineFlow {
  0%   { transform: scaleX(0); opacity: 0; }
  8%   { opacity: 1; }
  22%  { transform: scaleX(1); }
  80%  { transform: scaleX(1); opacity: 1; }
  95%  { opacity: 0; }
  100% { transform: scaleX(0); opacity: 0; }
}
@keyframes roadmapDotPulse {
  0%   { transform: scale(1); box-shadow: 0 0 0 1px var(--color-line); }
  8%   { transform: scale(1.15); box-shadow: 0 0 0 7px rgba(27,109,218,0.16); }
  22%  { transform: scale(1); box-shadow: 0 0 0 1px var(--color-line); }
  100% { transform: scale(1); box-shadow: 0 0 0 1px var(--color-line); }
}
@media (prefers-reduced-motion: reduce) {
  .roadmap_step:not(:last-child)::before { animation: none; display: none; }
  .roadmap_dot { animation: none; }
}

/* ── 도서 섹션 앵커 ── */
#toeic-books, #toss-books { scroll-margin-top: 90px; }

/* ── 교재 더 보기 (전체보기 탭 전용) ── */
.load-more { display: flex; justify-content: center; margin-top: var(--space-3xl); }
.load-more[hidden] { display: none; }
.load-more_btn { display: inline-flex; align-items: center; gap: 6px; height: 52px; padding: 0 120px; background: var(--color-canvas); border: 1px solid var(--color-border-strong); border-radius: var(--radius-pill); font-size: var(--text-md); font-weight: var(--font-semibold); color: var(--color-ink); letter-spacing: -0.2px; cursor: pointer; transition: border-color var(--duration-base) var(--ease-default), color var(--duration-base) var(--ease-default); }
.load-more_btn svg { width: 18px; height: 18px; }
.load-more_page { font-size: var(--text-sm); font-weight: var(--font-medium); color: var(--color-gray-500); letter-spacing: 0; }

/* ── 상세 필터 바텀시트 ── */
.filter-sheet { position: fixed; inset: 0; z-index: var(--z-modal); }
.filter-sheet[hidden] { display: none; }
.filter-sheet_overlay { position: absolute; inset: 0; background: var(--color-overlay); animation: filterFade 200ms ease; }
.filter-sheet_panel { position: absolute; left: 50%; bottom: 0; transform: translateX(-50%); display: flex; flex-direction: column; width: min(560px, 100%); max-height: 85vh; background: var(--color-canvas); border-radius: var(--radius-xl) var(--radius-xl) 0 0; box-shadow: 0 -8px 40px rgba(0,0,0,0.18); animation: filterSlideUp 280ms var(--ease-in-out); }
.filter-sheet_head { flex-shrink: 0; display: flex; align-items: center; justify-content: space-between; padding: 24px 28px 12px; }
.filter-sheet_title { font-size: var(--text-xl); font-weight: var(--font-bold); color: var(--color-ink); letter-spacing: -0.3px; }
.filter-sheet_close { display: inline-flex; align-items: center; justify-content: center; width: 40px; height: 40px; background: none; border: none; border-radius: var(--radius-pill); color: var(--color-gray-700); cursor: pointer; transition: color var(--duration-base) var(--ease-default); }
.filter-sheet_close svg { width: 28px; height: 28px; }
.filter-sheet_body { flex: 1; overflow-y: auto; padding: 4px 28px 8px; }
.filter-group { padding: 18px 0; border-bottom: 1px solid var(--color-border); }
.filter-group:last-child { border-bottom: none; }
.filter-group_label { font-size: var(--text-md); font-weight: var(--font-bold); color: var(--color-ink); letter-spacing: -0.2px; margin-bottom: 14px; }
.filter-group_cat { margin-left: 4px; font-size: var(--text-2xs); font-weight: var(--font-regular); color: var(--color-gray-400); vertical-align: 1px; }
.search-filter .filter-group_cat { font-size: var(--text-3xs); }
.filter-chips { display: flex; flex-wrap: wrap; gap: 10px; }
.filter-chip { height: 42px; padding: 0 18px; background: var(--color-canvas); border: 1px solid var(--color-border-strong); border-radius: var(--radius-pill); font-size: var(--text-sm); font-weight: var(--font-medium); color: var(--color-gray-700); letter-spacing: -0.2px; cursor: pointer; transition: background var(--duration-base) var(--ease-default), border-color var(--duration-base) var(--ease-default), color var(--duration-base) var(--ease-default); }
.filter-chip-selected { background: var(--color-tint-50); border-color: var(--color-primary); color: var(--color-primary); font-weight: var(--font-semibold); }
.filter-chip svg { width: 16px; height: 16px; margin-right: 6px; vertical-align: -3px; } /* 아이콘을 넣은 칩만 해당 — 아이콘 없는 칩은 영향 없음 */
.filter-chip_count { margin-left: var(--space-xs); font-size: var(--text-2xs); font-weight: var(--font-regular); font-style: normal; color: var(--color-gray-400); }
.filter-chip-selected .filter-chip_count { color: var(--color-primary); }
/* 그 조건에 해당하는 교재가 없는 칩. 골라도 빈 화면이라 누르지 못하게 막고 흐리게 둔다 */
.filter-chip-disabled { background: var(--color-gray-50); border-color: var(--color-border); color: var(--color-gray-400); cursor: default; }

/* ── 카테고리 라디오 (검색 사이드바 — '1차 > 2차' 조합 선택) ── */
.filter-catpick_list { display: flex; flex-direction: column; gap: 2px; }
.filter-catpick_radio { position: absolute; width: 1px; height: 1px; overflow: hidden; clip: rect(0 0 0 0); } /* 실제 라디오는 숨기고 라벨의 ::before로 표시 (접근성 유지) */
.filter-catpick_label { display: flex; align-items: center; gap: 8px; width: 100%; padding: 6px 8px; border-radius: var(--radius-md); font-size: var(--text-xs); color: var(--color-gray-600); word-break: keep-all; cursor: pointer; transition: background var(--duration-base) var(--ease-default), color var(--duration-base) var(--ease-default); } /* keep-all: 폭이 좁아도 한글이 글자 단위로 쪼개지지 않게 */
.filter-catpick_label::before { content: ''; flex-shrink: 0; width: 16px; height: 16px; border: 1.5px solid var(--color-border-strong); border-radius: var(--radius-pill); background: var(--color-canvas); transition: border-color var(--duration-base) var(--ease-default), border-width var(--duration-base) var(--ease-default); }
.filter-catpick_label:hover { background: var(--color-tint-50); color: var(--color-primary); }
.filter-catpick_radio:checked + .filter-catpick_label { color: var(--color-primary); font-weight: var(--font-semibold); }
.filter-catpick_radio:checked + .filter-catpick_label::before { border-width: 5px; border-color: var(--color-primary); }
.filter-catpick_radio:focus-visible + .filter-catpick_label { outline: 2px solid #1b6dda; outline-offset: 2px; }
.filter-catpick_sep { color: var(--color-gray-400); }
.filter-catpick_count { flex-shrink: 0; margin-left: auto; font-style: normal; font-size: var(--text-2xs); font-weight: var(--font-regular); color: var(--color-gray-400); }
.filter-catpick_radio:checked + .filter-catpick_label .filter-catpick_count { color: var(--color-primary); }
/* 접힘 상태 — 2차 선택 시 선택 항목 한 줄만 남겨 아래 속성 필터가 바로 보이게. 접힌 줄 클릭 = 다시 펼치기 */
.filter-catpick-collapsed .filter-catpick_item { display: none; }
.filter-catpick-collapsed .filter-catpick_item-on { display: block; }
.filter-catpick-collapsed .filter-catpick_item-on .filter-catpick_label { background: var(--color-tint-50); }
.filter-catpick-collapsed .filter-catpick_label::after { content: '변경'; flex-shrink: 0; margin-left: var(--space-xs); font-size: var(--text-2xs); font-weight: var(--font-regular); color: var(--color-gray-500); white-space: nowrap; text-decoration: underline; text-underline-offset: 2px; }
.filter-sheet_foot { flex-shrink: 0; display: flex; gap: var(--space-md); padding: 16px 28px 24px; border-top: 1px solid var(--color-border); }
.filter-sheet_reset-btn { flex-shrink: 0; display: inline-flex; align-items: center; gap: 6px; height: 56px; padding: 0 24px; background: var(--color-surface); border: none; border-radius: var(--radius-lg); font-size: var(--text-md); font-weight: var(--font-semibold); color: var(--color-gray-700); cursor: pointer; transition: background var(--duration-base) var(--ease-default); }
.filter-sheet_reset-btn svg { width: 16px; height: 16px; }
.filter-sheet_apply { flex: 1; height: 56px; background: var(--color-ink); border: none; border-radius: var(--radius-lg); font-size: var(--text-base); font-weight: var(--font-bold); color: var(--color-canvas); letter-spacing: -0.2px; cursor: pointer; transition: background var(--duration-base) var(--ease-default); }

@keyframes filterFade { from { opacity: 0; } to { opacity: 1; } }
@keyframes filterSlideUp { from { transform: translate(-50%, 100%); } to { transform: translate(-50%, 0); } }

/* 웹(≥1280px): 시트를 콘텐츠 너비로 넓히고 그룹을 라벨 좌·칩 우 행 형으로 배치 */
@media (min-width: 1280px) {
  .filter-sheet_panel { width: min(1240px, calc(100vw - 80px)); max-height: 80vh; }
  .filter-sheet_head { padding: 28px 40px 12px; }
  .filter-sheet_body { padding: 4px 40px 12px; }
  .filter-sheet_body .filter-group { display: grid; grid-template-columns: 140px 1fr; align-items: start; gap: var(--space-xl); padding: 20px 0; }
  .filter-sheet_body .filter-group_label { margin-bottom: 0; padding-top: 10px; }
  .filter-sheet_foot { justify-content: flex-end; padding: 20px 40px 28px; }
  .filter-sheet_apply { flex: 0 0 auto; min-width: 280px; }
}

/* 탭 전환으로 숨긴 필터 그룹 — 웹 시트의 display:grid(위 미디어쿼리)와 명시도가 같으므로 반드시 그 뒤에 선언 */
.filter-sheet_body .filter-group[hidden], .search-filter .filter-group[hidden] { display: none; }

/* ── 레벨 테스트 CTA ── */
.page-cta_inner { margin-top: var(--space-4xl); display: flex; align-items: center; justify-content: space-between; gap: var(--space-xl); padding: 36px 40px; background: linear-gradient(120deg, var(--color-primary) 0%, var(--color-primary-pressed) 100%); border-radius: var(--radius-xl); }
.page-cta_title { font-size: var(--text-2xl); font-weight: var(--font-bold); color: var(--color-canvas); letter-spacing: -0.4px; margin-bottom: var(--space-sm); }
.page-cta_desc { font-size: var(--text-md); font-weight: var(--font-regular); color: rgba(255,255,255,0.85); letter-spacing: -0.2px; line-height: 1.5; }
.page-cta_btn { display: inline-flex; align-items: center; gap: var(--space-sm); flex-shrink: 0; height: 52px; padding: 0 28px; background: var(--color-canvas); border-radius: var(--radius-lg); font-size: var(--text-base); font-weight: var(--font-bold); color: var(--color-primary); letter-spacing: -0.2px; white-space: nowrap; transition: transform var(--duration-base) var(--ease-default), box-shadow var(--duration-base) var(--ease-default); }
.page-cta_btn svg { width: 18px; height: 18px; }
.page-cta_actions { display: flex; align-items: center; flex-shrink: 0; gap: var(--space-md); } /* 주 버튼 + 보조(고스트) 버튼 나란히 */
.page-cta_btn-ghost { background: transparent; border: 1px solid rgba(255,255,255,0.6); color: var(--color-canvas); }
/* 로드맵 없이 CTA만 있는 섹션 → 위 여백 축소 (페이지 무관) */
.section-cta { padding-top: 0; }
.section-cta .page-cta_inner { margin-top: 0; }

/* ========================================================
   Search Result Page
======================================================== */

/* ── 검색 요약 ── */
.search-summary { padding: 6px 0 28px; }
.search-summary_title { font-size: var(--text-4xl); font-weight: var(--font-bold); color: var(--color-ink); letter-spacing: -0.6px; line-height: 1.3; margin-bottom: var(--space-lg); }
.search-summary_keyword { color: var(--color-primary); }
.search-summary_count { font-size: var(--text-4xl); font-weight: var(--font-regular); color: var(--color-gray-500); letter-spacing: -0.4px; margin-left: var(--space-xs); }
.search-summary_count em { font-style: normal; font-weight: var(--font-bold); color: var(--color-ink); }

/* ── 2단 레이아웃 (좌 필터 · 우 결과) ── */
.search-result-section { padding-top: 0; }
.search-layout { display: flex; align-items: flex-start; gap: var(--space-2xl); }
.search-main { flex: 1; min-width: 0; }

/* ── 좌측 필터 사이드바 ── */
/* 화면에 붙여 두되 **화면보다 길어지지 않게** 막는다.
   카테고리 라디오가 붙어 사이드바가 길어졌는데, 목록이 화면을 넘으면 맨 아래 '적용하기'가
   화면 밖으로 나가 누를 수가 없었다. 결과 목록이 무한 스크롤이라 아래로 내려가도 닿지 못한다.
   → 머리·바닥은 고정하고 가운데 목록만 안에서 스크롤시킨다. */
.search-filter { flex: 0 0 240px; position: sticky; top: 80px; align-self: flex-start; display: flex; flex-direction: column; max-height: calc(100vh - 96px); }
.search-filter::-webkit-scrollbar { display: none; } /* 크롬·사파리 스크롤바 숨김 (scrollbar-width는 파이어폭스용) */
.search-filter_head { flex-shrink: 0; display: flex; align-items: center; gap: var(--space-sm); padding-bottom: 14px; margin-bottom: 6px; border-bottom: 2px solid var(--color-ink); }
/* 스크롤은 되되 막대는 감춘다(시안에 막대가 없다). 필터가 짧으면 스크롤 자체가 안 생긴다 */
.search-filter_body { flex: 1; min-height: 0; overflow-y: auto; scrollbar-width: none; -ms-overflow-style: none; }
.search-filter_body::-webkit-scrollbar { width: 0; height: 0; }
.search-filter_title { display: inline-flex; align-items: center; gap: 7px; font-size: var(--text-base); font-weight: var(--font-bold); color: var(--color-ink); letter-spacing: -0.3px; }
.search-filter_title svg { width: 18px; height: 18px; color: var(--color-primary); }
.search-filter_reset { display: inline-flex; align-items: center; gap: var(--space-xs); margin-left: auto; font-size: var(--text-xs); font-weight: var(--font-medium); color: var(--color-gray-500); letter-spacing: -0.2px; cursor: pointer; transition: color var(--duration-base) var(--ease-default); }
.search-filter_reset svg { width: 14px; height: 14px; }
.search-filter_close { display: none; }

/* ── 검색 좌측 필터: 슬림 칩 (토익 시트 칩은 영향 없음) ── */
.search-filter .filter-group { padding: 13px 0; }
.search-filter .filter-group_label { font-size: var(--text-sm); margin-bottom: 9px; }
.search-filter .filter-chips { gap: 7px; }
.search-filter .filter-chip { height: 33px; padding: 0 13px; font-size: var(--text-xs); }
.search-filter .filter-chip_count { margin-left: 3px; font-size: var(--text-3xs); }
/* 세로 스택형(.filter-group-stack) — 학습 자료실 부가 혜택. 한 줄에 하나씩 · 도서 카테고리 탭(.books-section .cat-tab)과 동일 외형 */
.search-filter .filter-group-stack .filter-chips { flex-direction: column; align-items: stretch; gap: 10px; }
.search-filter .filter-group-stack .filter-chip { display: flex; align-items: center; justify-content: space-between; height: 44px; padding: 0 20px; border: 1px solid var(--color-border-strong); border-radius: var(--radius-lg); background: var(--color-canvas); font-size: var(--text-md); font-weight: var(--font-medium); color: var(--color-gray-700); text-align: left; }
.search-filter .filter-group-stack .filter-chip-selected { background: var(--color-primary); border-color: var(--color-primary); font-weight: var(--font-semibold); color: var(--color-canvas); }
.search-filter .filter-group-stack .filter-chip svg { width: 17px; height: 17px; flex-shrink: 0; margin-right: 10px; }
.search-filter .filter-group-stack .filter-chip span { flex: 1; min-width: 0; overflow: hidden; white-space: nowrap; text-overflow: ellipsis; }
.search-filter .filter-group-stack .filter-chip_count { margin-left: var(--space-md); font-size: var(--text-sm); font-weight: var(--font-medium); color: var(--color-gray-700); }
.search-filter .filter-group-stack .filter-chip-selected .filter-chip_count { color: var(--color-canvas); }

/* ── 첫 방문 안내 TIP (.filter-tip) — 필터 사용법을 알려주는 말풍선. 칩 그룹 바로 아래에 놓여 위를 가리킨다. 필터 사이드바·바텀시트 공용. 노출/닫기는 JS(localStorage) ── */
.filter-tip { position: relative; margin: 14px 0 var(--space-sm); padding: 11px 30px 12px 13px; background: var(--color-tint-50); border: 1px solid var(--color-tint-100); border-radius: var(--radius-md); animation: filterTipIn var(--duration-slow) var(--ease-out); }
.filter-tip[hidden] { display: none; }
.filter-tip::after { content: ""; position: absolute; left: 20px; top: -6px; width: 10px; height: 10px; background: var(--color-tint-50); border-left: 1px solid var(--color-tint-100); border-top: 1px solid var(--color-tint-100); transform: rotate(45deg); } /* 위 칩 그룹을 가리키는 꼬리 */
.filter-group:has(+ .filter-tip) { border-bottom: none; } /* TIP이 마지막 자식이 되면서 칩 그룹이 :last-child 를 잃어 생기는 구분선 제거 */
.filter-tip_head { display: flex; align-items: center; gap: 5px; margin-bottom: 4px; font-size: var(--text-2xs); font-weight: var(--font-bold); color: var(--color-primary); letter-spacing: 0.2px; }
.filter-tip_head svg { width: 14px; height: 14px; }
.filter-tip_text { font-size: var(--text-xs); font-weight: var(--font-regular); color: var(--color-gray-700); letter-spacing: -0.2px; line-height: 1.6; }
.filter-tip_text strong { font-weight: var(--font-semibold); color: var(--color-primary); }
.filter-tip_close { position: absolute; top: 7px; right: 7px; display: flex; align-items: center; justify-content: center; width: 20px; height: 20px; border-radius: var(--radius-xs); color: var(--color-gray-500); cursor: pointer; transition: background var(--duration-base) var(--ease-default), color var(--duration-base) var(--ease-default); }
.filter-tip_close svg { width: 13px; height: 13px; }
@keyframes filterTipIn { from { opacity: 0; transform: translateY(6px); } to { opacity: 1; transform: translateY(0); } } /* 칩 아래에서 올라오듯 등장 */
@media (prefers-reduced-motion: reduce) { .filter-tip { animation: none; } }

/* ── 필터 블록 ── */
.filter-block { padding: 20px 0; border-bottom: 1px solid var(--color-border); }
.filter-block:last-child { border-bottom: none; }
.filter-block_title { font-size: var(--text-md); font-weight: var(--font-bold); color: var(--color-ink); letter-spacing: -0.2px; margin-bottom: 10px; }
.filter-block_list { display: flex; flex-direction: column; gap: 2px; }

/* ── 체크박스 항목 ── */
.filter-check { display: flex; align-items: center; gap: 10px; padding: 7px 0; cursor: pointer; }
.filter-check input { position: absolute; width: 1px; height: 1px; padding: 0; margin: -1px; overflow: hidden; clip: rect(0 0 0 0); white-space: nowrap; border: 0; }
.filter-check_box { flex-shrink: 0; display: flex; align-items: center; justify-content: center; width: 20px; height: 20px; background: var(--color-canvas); border: 1.5px solid var(--color-border-strong); border-radius: var(--radius-sm); transition: background var(--duration-fast) var(--ease-default), border-color var(--duration-fast) var(--ease-default); }
.filter-check_box::after { content: ""; width: 5px; height: 9px; border: solid var(--color-canvas); border-width: 0 2px 2px 0; transform: rotate(45deg) scale(0); transition: transform var(--duration-fast) var(--ease-default); margin-top: -1px; }
.filter-check input:checked + .filter-check_box { background: var(--color-primary); border-color: var(--color-primary); }
.filter-check input:checked + .filter-check_box::after { transform: rotate(45deg) scale(1); }
.filter-check input:focus-visible + .filter-check_box { outline: 2px solid var(--color-primary); outline-offset: 2px; }
.filter-check_label { font-size: var(--text-sm); font-weight: var(--font-regular); color: var(--color-gray-700); letter-spacing: -0.2px; transition: color var(--duration-base) var(--ease-default); }
.filter-check input:checked ~ .filter-check_label { color: var(--color-ink); font-weight: var(--font-semibold); }
.filter-check_count { margin-left: auto; font-size: var(--text-xs); font-weight: var(--font-regular); color: var(--color-gray-400); letter-spacing: -0.2px; }

/* ── 모바일 드로어 오버레이 (기본 숨김) ── */
.search-filter_overlay { display: none; }

/* ── 카테고리 탭 — 필 스타일 (검색 페이지 전용) ── */
body[data-page="search"] .cat-tabs { border-bottom: none; gap: var(--space-sm); margin-bottom: 0; padding-bottom: 0; }
body[data-page="search"] .cat-tab { height: 40px; padding: 0 16px; border: 1px solid var(--color-border-strong); border-radius: var(--radius-pill); font-size: var(--text-sm); font-weight: var(--font-semibold); color: var(--color-ink); background: var(--color-canvas); margin: 0; transition: background var(--duration-base) var(--ease-default), border-color var(--duration-base) var(--ease-default), color var(--duration-base) var(--ease-default); }
body[data-page="search"] .cat-tab + .cat-tab { margin-left: 0; }
body[data-page="search"] .cat-tab-active { background: var(--color-tint-50); border-color: var(--color-primary); color: var(--color-primary); }
/* 탭 카운트 = 정원형 캡슐 배지 (검색 결과·학습자료실 공통) */
body[data-page="search"] .cat-tab em { display: inline-flex; align-items: center; justify-content: center; min-width: 20px; height: 20px; padding: 0 6px; border-radius: var(--radius-pill); background: var(--color-surface); font-style: normal; font-size: var(--text-3xs); font-weight: var(--font-bold); color: var(--color-gray-600); margin-left: 6px; transition: background var(--duration-base) var(--ease-default), color var(--duration-base) var(--ease-default); }
body[data-page="search"] .cat-tab-active em { background: var(--color-primary); color: var(--color-canvas); } /* 활성은 파랑 채움 배지 */
/* 학습자료실 — 탭이 결과 섹션 안에 있어(검색은 요약 섹션 안) 아래 여백만 보완. 탭 외형은 위 검색 필 스타일 그대로 */
body[data-page="search"] .search-result-section .cat-tabs { padding-bottom: 28px; }

/* ── 상품 바 — 검색 페이지에서 필터 버튼은 데스크탑에서 숨김 ── */
body[data-page="search"] .product-bar { margin: 0 0 28px 0; }
body[data-page="search"] .filter-btn { display: none; }

/* ── 결과 목록 — 리스트형 ── */
.book-list { display: flex; flex-direction: column; }
.book-list[hidden] { display: none; }
.book-list-item { display: flex; gap: var(--space-xl); padding: 28px 0; border-bottom: 1px solid var(--color-border); }
.book-list-item[hidden] { display: none; }
.book-list-item:first-child { padding-top: var(--space-xs); }
.book-list-item_cover { flex: 0 0 128px; }
.book-list-item_cover-wrap { position: relative; display: block; width: 128px; aspect-ratio: 198/277; border: 1px solid var(--color-border); background: var(--color-surface); overflow: hidden; } /* position: 절판 라벨(.book-list-item_sold)의 기준 — 부모(_cover)는 플렉스로 늘어나 본문 높이를 따라가므로 이미지 박스를 기준으로 잡아야 라벨이 표지 정중앙에 온다 */
.book-list-item_cover-wrap img { width: 100%; height: 100%; object-fit: cover; display: block; transition: transform var(--duration-base) var(--ease-default); }
.book-list-item_body { flex: 1; min-width: 0; display: flex; flex-direction: column; }
.book-list-item_badges { display: flex; flex-wrap: wrap; gap: 6px; margin-bottom: 14px; }
.book-list-item_badge { display: inline-flex; align-items: center; gap: var(--space-xs); height: 22px; padding: 0 7px; border: 1px solid currentColor; border-radius: var(--radius-xs); background: transparent; font-size: var(--text-2xs); font-weight: var(--font-medium); letter-spacing: -0.2px; opacity: 0.9; }
.book-list-item_badge svg { width: 12px; height: 12px; stroke-width: 1.5; color: var(--color-gray-500); }
/* 리스트뷰 배지 표준: 회색 아웃라인 + 아이콘 없음 (모든 리스트 배지 공통 · toeic 기준 통일). 예외: 도서 상세(.book-detail_tags)만 회색+아이콘 유지(아래에서 svg 재노출) */
.book-card_lbadge, .book-list-item_badge { color: var(--color-gray-600); border-color: var(--color-border-strong); }
.book-card_lbadge svg, .book-list-item_badge svg { display: none; }
.book-list-item_title { font-size: var(--text-base); font-weight: var(--font-medium); line-height: 1.4; letter-spacing: -0.3px; margin-bottom: var(--space-xs); } /* 교보 참고 — 제목 볼륨 축소 */
.book-list-item_title a { color: var(--color-ink); transition: color var(--duration-base) var(--ease-default); }
.book-list-item_meta { font-size: var(--text-xs); font-weight: var(--font-regular); color: var(--color-gray-500); letter-spacing: -0.2px; margin-bottom: var(--space-md); }
.book-list-item_desc { font-size: var(--text-xs); font-weight: var(--font-regular); color: var(--color-gray-600); line-height: 1.6; letter-spacing: -0.2px; display: -webkit-box; -webkit-line-clamp: 2; -webkit-box-orient: vertical; overflow: hidden; }
.book-list-item_bottom { display: flex; align-items: flex-end; justify-content: space-between; gap: var(--space-base); margin-top: auto; padding-top: 18px; }
.book-list-item_price { font-size: var(--text-base); font-weight: var(--font-semibold); color: var(--color-ink); letter-spacing: 0.5px; }
.book-list-item_actions { display: flex; gap: var(--space-sm); flex-shrink: 0; }
/* 검색·학습자료실 리스트형 — 버튼이 많아 가격과 한 줄에 안 들어가면 가격을 찌그러뜨리지 않고 버튼 묶음을 아래 줄 오른쪽으로 내린다
   (모바일은 이미 세로로 쌓으므로 제외 — margin-left:auto 가 모바일의 꽉 찬 버튼 칸을 오른쪽으로 줄여 버린다) */
@media (min-width: 768px) {
  .search-list:not(.is-grid) .book-list-item_bottom { flex-wrap: wrap; }
  .search-list:not(.is-grid) .book-list-item_price { white-space: nowrap; }
  .search-list:not(.is-grid) .book-list-item_actions { margin-left: auto; }
}
.book-list-item_btn { display: inline-flex; align-items: center; justify-content: center; height: 44px; padding: 0 20px; border: 1px solid var(--color-border-strong); border-radius: var(--radius-md); background: var(--color-canvas); font-size: var(--text-sm); font-weight: var(--font-semibold); color: var(--color-gray-700); letter-spacing: -0.2px; white-space: nowrap; cursor: pointer; transition: border-color var(--duration-base) var(--ease-default), color var(--duration-base) var(--ease-default), background var(--duration-base) var(--ease-default); }
.book-list-item_btn-primary { background: var(--color-primary); border-color: var(--color-primary); color: var(--color-canvas); }
/* ── 절판도서 (.book-list-item-sold) — 리스트형·카드형 공통 ──
   "지난 책"으로 읽히게 표지를 흑백+반투명으로 눌러두고, 표지 위에 절판 라벨을 얹는다.
   라벨을 CSS content 가 아니라 실제 <span> 으로 두는 이유: 카드형은 설명·가격이 숨으므로
   표지 라벨이 유일한 신호가 되는데, 생성 콘텐츠는 스크린리더가 읽지 못할 수 있다.
   가격은 '판매 종료' 텍스트라 취소선 대신 회색 처리하고, 음원·학습자료 버튼은 기존 구매자를 위해 남기되 톤을 낮춘다. */
.book-list-item-sold .book-list-item_cover-wrap img { opacity: 0.45; }
.book-list-item_sold { position: absolute; top: 50%; left: 50%; padding: 5px 12px; background: var(--color-toast-bg); border-radius: var(--radius-xs); font-size: var(--text-2xs); font-weight: var(--font-bold); color: var(--color-canvas); letter-spacing: 0.5px; white-space: nowrap; transform: translate(-50%, -50%); }
.book-list-item-sold .book-list-item_title a { color: var(--color-gray-500); }
.book-list-item-sold .book-list-item_meta, .book-list-item-sold .book-list-item_desc { color: var(--color-gray-400); }
.book-list-item-sold .book-list-item_price { font-size: var(--text-sm); color: var(--color-gray-500); }
.book-list-item-sold .book-list-item_btn:not(.book-list-item_btn-primary) { color: var(--color-gray-500); border-color: var(--color-border); } /* 파란 버튼(_btn-primary)은 톤다운에서 제외 — 파란 배경에 회색 글자가 얹혀 읽히지 않는다 */
.book-list-item_badge-sold { color: var(--color-gray-500); border-color: var(--color-gray-400); background: var(--color-surface-light); }

/* ── 절판도서 (.book-card-sold) — 카드형(.book-card_*) ──
   카테고리 목록·신간·베스트셀러·와옹's PICK·메인·연관도서·찜한 교재가 쓰는 마크업이다.
   위 리스트형 규칙은 셀렉터가 .book-list-item_* 이라 이쪽에 안 먹어 따로 둔다.
   보이는 결과는 리스트형과 같아야 한다 — 같은 교재가 화면마다 다르게 보이면 안 된다.
   절판 라벨(.book-card_sold)의 기준은 표지 박스(.book-card_cover-wrap)다. */
.book-card-sold .book-card_cover-wrap img { opacity: 0.45; }
.book-card_sold { position: absolute; top: 50%; left: 50%; padding: 5px 12px; background: var(--color-toast-bg); border-radius: var(--radius-xs); font-size: var(--text-2xs); font-weight: var(--font-bold); color: var(--color-canvas); letter-spacing: 0.5px; white-space: nowrap; transform: translate(-50%, -50%); }
.book-card-sold .book-card_title { color: var(--color-gray-500); }
.book-card-sold .book-card_author, .book-card-sold .book-card_desc { color: var(--color-gray-400); }
.book-card-sold .book-card_price { color: var(--color-gray-500); }
.book-card-sold .book-card_btn:not(.book-card_btn-primary) { color: var(--color-gray-500); border-color: var(--color-border); } /* 파란 버튼 제외 — 리스트형과 같은 이유 */

.book-list-item_fav, .book-card_fav { flex: 0 0 44px; width: 44px; padding: 0; color: var(--color-gray-400); } /* 빈 하트는 테두리보다 한 톤만 진하게 — 찜하면 코랄로 채워짐 */
.book-list-item_fav svg, .book-card_fav svg { width: 20px; height: 20px; }
.book-list-item_fav.is-active, .book-card_fav.is-active { border-color: var(--color-coral); color: var(--color-coral); }
.book-list-item_fav.is-active svg, .book-card_fav.is-active svg { fill: currentColor; }

/* ── 검색어 하이라이트 ── */
.search-hl { background: transparent; color: var(--color-primary); font-weight: var(--font-bold); }

/* ── 결과 없음 상태 ── */
.search-empty { display: flex; flex-direction: column; align-items: center; text-align: center; padding: 72px 20px 80px; }
.search-empty[hidden] { display: none; }
.search-empty_icon { display: flex; align-items: center; justify-content: center; width: 80px; height: 80px; background: var(--color-tint-50); border-radius: 50%; margin-bottom: var(--space-xl); }
.search-empty_icon svg { width: 36px; height: 36px; color: var(--color-primary); stroke-width: 1.5; }
.search-empty_title { font-size: var(--text-2xl); font-weight: var(--font-bold); color: var(--color-ink); letter-spacing: -0.4px; margin-bottom: var(--space-md); }
.search-empty_desc { font-size: var(--text-md); font-weight: var(--font-regular); color: var(--color-gray-600); line-height: 1.6; letter-spacing: -0.2px; margin-bottom: 28px; }
.search-empty_btn { display: inline-flex; align-items: center; justify-content: center; height: 50px; padding: 0 32px; background: var(--color-primary); border: none; border-radius: var(--radius-pill); font-size: var(--text-md); font-weight: var(--font-semibold); color: var(--color-canvas); letter-spacing: -0.2px; cursor: pointer; transition: background var(--duration-base) var(--ease-default); }

/* ── 페이지네이션 ── */
.pagination { display: flex; align-items: center; justify-content: center; gap: 6px; margin-top: 56px; }
.pagination[hidden] { display: none; } /* display:flex가 UA [hidden] 규칙을 이기므로 명시적 오버라이드 필요 */
.pagination_num { display: inline-flex; align-items: center; justify-content: center; min-width: 40px; height: 40px; padding: 0 8px; background: var(--color-canvas); border: 1px solid var(--color-border); border-radius: var(--radius-md); font-size: var(--text-sm); font-weight: var(--font-medium); color: var(--color-gray-700); letter-spacing: -0.2px; cursor: pointer; transition: border-color var(--duration-base) var(--ease-default), color var(--duration-base) var(--ease-default), background var(--duration-base) var(--ease-default); }
.pagination_num-active { background: var(--color-primary); border-color: var(--color-primary); color: var(--color-canvas); font-weight: var(--font-bold); }
.pagination_arrow { display: inline-flex; align-items: center; justify-content: center; width: 40px; height: 40px; background: var(--color-canvas); border: 1px solid var(--color-border); border-radius: var(--radius-md); color: var(--color-gray-700); cursor: pointer; transition: border-color var(--duration-base) var(--ease-default), color var(--duration-base) var(--ease-default); }
.pagination_arrow:disabled { color: var(--color-border-strong); cursor: not-allowed; border-color: var(--color-border); }
.pagination_arrow svg { width: 18px; height: 18px; }
.pagination_dots { display: none; } /* 번호 생략 표시 — 좁은 폭(mobile.css)에서만 노출 */

/* ======== Study (학습 자료실) Page ======== */

/* ── 페이지 타이틀 (책 탄 캐릭터로 꾸민 히어로) ── */
body[data-page="study"] { background: radial-gradient(circle at 44% 18%, rgba(255,255,255,0.65), transparent 46%), radial-gradient(circle at 12% 16%, rgba(47,111,224,0.12), transparent 42%), radial-gradient(circle at 88% 10%, rgba(130,105,255,0.12), transparent 46%), radial-gradient(circle at 72% 58%, rgba(52,180,220,0.08), transparent 52%), radial-gradient(circle at 20% 82%, rgba(255,255,255,0.5), transparent 44%), #e7eeff; background-attachment: fixed; }
body[data-page="study"] .study-head_title { font-size: clamp(37px, 3.7vw, 54px); }
body[data-page="study"] .study-head_desc { font-size: var(--text-md); }
body[data-page="study"] .study-head_eyebrow { font-size: var(--text-xs); }
.study-head { padding: 8px 0 24px; }
.study-head_inner { position: relative; display: flex; align-items: center; justify-content: space-between; gap: 24px; padding: 22px 40px; }
.study-head_txt { position: relative; z-index: 1; }
.study-head_eyebrow { display: inline-flex; align-items: center; gap: 6px; padding: 6px 14px; background: var(--color-canvas); border-radius: var(--radius-pill); box-shadow: 0 6px 16px rgba(47,111,224,0.14); font-size: var(--text-xs); font-weight: var(--font-bold); color: var(--color-primary); letter-spacing: -0.2px; margin-bottom: 10px; }
.study-head_eyebrow svg { width: 14px; height: 14px; }
.study-head_title { font-size: var(--text-4xl); font-weight: var(--font-bold); color: var(--color-ink); letter-spacing: -0.6px; margin-bottom: 6px; }
.study-head_desc { font-size: var(--text-md); font-weight: var(--font-regular); color: var(--color-gray-600); letter-spacing: -0.2px; line-height: 1.6; }
/* 헤더 우측 캐릭터: 기본 숨김 — 인트로에서 진입한 경우에만 노출(아래 .from-intro 규칙), 직접 방문 시엔 표시 안 함 */
.study-head_char { position: relative; display: none; flex-shrink: 0; align-self: flex-end; }
.study-head_char img { display: block; width: clamp(130px, 15vw, 172px); height: auto; filter: drop-shadow(0 18px 28px rgba(47,111,224,0.3)); }
@keyframes studyHeadBob { 0%, 100% { transform: translateY(0) rotate(-1.5deg); } 50% { transform: translateY(-12px) rotate(1.5deg); } }
.study-head_bubble { display: none; }
@media (prefers-reduced-motion: reduce) { .study-head_char img, .study-head_bubble { animation: none; } }
.study-section { padding-top: 0; }

/* ── 초기화 툴바 (카드 상단 우측) ── */
.study-toolbar { display: flex; justify-content: flex-end; margin-top: 18px; padding-top: 16px; border-top: 1px solid var(--color-border); }
.study-filter_reset { display: inline-flex; align-items: center; gap: var(--space-xs); font-size: var(--text-sm); font-weight: var(--font-medium); color: var(--color-gray-600); letter-spacing: -0.2px; cursor: pointer; transition: color var(--duration-base) var(--ease-default); }
.study-filter_reset svg { width: 15px; height: 15px; }

/* ── 필터 카드 ── */
.study-filter { margin-bottom: 24px; padding: 8px 28px 20px; background: var(--color-canvas); border: 1px solid var(--color-border); border-radius: var(--radius-xl); box-shadow: 0 4px 20px rgba(0,0,0,0.03); }

/* ── 필터 행: 라벨 좌 · 칩 우 (filter-group 재사용) ── */
.study-filter .filter-group { display: grid; grid-template-columns: 96px 1fr; align-items: start; gap: var(--space-lg); padding: 18px 0; }
.study-filter .filter-group_label { margin-bottom: 0; padding-top: 11px; font-size: var(--text-md); }

/* ── 도서 카테고리 탭 → 부가 혜택 칩(.filter-chip)과 완전히 동일한 외형 ── */
body[data-page="study"] .cat-tab { height: 42px; padding: 0 18px; border: 1px solid var(--color-border-strong); border-radius: var(--radius-pill); font-size: var(--text-sm); font-weight: var(--font-medium); color: var(--color-gray-700); background: var(--color-canvas); margin: 0; transition: background var(--duration-base) var(--ease-default), border-color var(--duration-base) var(--ease-default), color var(--duration-base) var(--ease-default); }
body[data-page="study"] .cat-tab-active { background: var(--color-tint-50); border-color: var(--color-primary); color: var(--color-primary); font-weight: var(--font-semibold); }

/* ── 검색 행 ── */
.study-search-group { border-bottom: none; }
.study-search { position: relative; display: flex; align-items: center; }
.study-search_icon { position: absolute; left: 16px; width: 20px; height: 20px; color: var(--color-gray-500); pointer-events: none; }
.study-search_icon svg { width: 20px; height: 20px; }
.study-search_input { flex: 1; height: 52px; padding: 0 108px 0 46px; background: var(--color-surface-cool); border: 1px solid var(--color-border); border-radius: var(--radius-lg); font-size: var(--text-md); font-weight: var(--font-regular); color: var(--color-ink); letter-spacing: -0.2px; transition: border-color var(--duration-base) var(--ease-default), background var(--duration-base) var(--ease-default); }
.study-search_input::placeholder { color: var(--color-gray-500); }
.study-search_input:focus { outline: none; border-color: var(--color-primary); background: var(--color-canvas); }
.study-search_btn { position: absolute; right: 8px; height: 40px; padding: 0 22px; background: var(--color-primary); border: none; border-radius: var(--radius-md); font-size: var(--text-sm); font-weight: var(--font-semibold); color: var(--color-canvas); letter-spacing: -0.2px; cursor: pointer; transition: background var(--duration-base) var(--ease-default); }

/* ── 리스트: 제공 자료 라벨 (가격 자리 대체) ── */
.study-results { background: var(--color-canvas); border-radius: var(--radius-xl); box-shadow: 0 4px 20px rgba(0,0,0,0.03); overflow: hidden; margin-bottom: 40px; }
.study-list { padding: 16px 28px 8px; }
.study-list .book-list-item:last-child { border-bottom: none; }
.study-list .book-list-item_mats { font-size: var(--text-sm); font-weight: var(--font-medium); color: var(--color-gray-600); letter-spacing: -0.2px; }
/* ── 정렬 + 뷰 토글(단일 아이콘 버튼) 묶음 ── */
.product-bar_right { display: flex; align-items: center; }
/* ── 카드형(그리드) 보기 — 다른 페이지 book-card처럼 깔끔하게 (커버 + 뱃지 + 제목 + 메타) ── */
.study-list.is-grid, .search-list.is-grid { display: grid; grid-template-columns: repeat(auto-fill, minmax(140px, 1fr)); gap: var(--space-4xl) var(--space-2xl); padding: 24px 28px 28px; } /* 행 간격 48px — .book-grid와 동일 */ /* 최소 140px — 데스크탑(사이드바 옆)에서 5열 */
.study-list.is-grid .book-list-item, .search-list.is-grid .book-list-item { flex-direction: column; gap: 0; padding: 0; border-bottom: none; }
.study-list.is-grid .book-list-item:first-child, .search-list.is-grid .book-list-item:first-child { padding-top: 0; }
.study-list.is-grid .book-list-item_cover, .search-list.is-grid .book-list-item_cover { flex: none; width: 100%; margin-bottom: var(--space-md); }
.study-list.is-grid .book-list-item_cover-wrap, .search-list.is-grid .book-list-item_cover-wrap { width: 100%; aspect-ratio: 198/277; }
.study-list.is-grid .book-list-item_badges, .search-list.is-grid .book-list-item_badges { margin-bottom: 8px; }
.study-list.is-grid .book-list-item_title, .search-list.is-grid .book-list-item_title { font-size: var(--text-sm); font-weight: var(--font-semibold); line-height: 1.5; -webkit-line-clamp: 2; margin-bottom: var(--space-xs); }
.study-list.is-grid .book-list-item_meta, .search-list.is-grid .book-list-item_meta { font-size: var(--text-xs); margin-bottom: 0; }
.search-list-study.is-grid .book-list-item_date { display: none; } /* 학습 자료실 카드형 — 출간일은 리스트형 전용, 카드형에선 저자·출판사만 */
.study-list.is-grid .book-list-item_desc, .study-list.is-grid .book-list-item_mats, .search-list.is-grid .book-list-item_desc, .search-list.is-grid .book-list-item_mats { display: none; }
/* 카드형에서도 가격 줄 + 찜하기 노출 (다른 카드형 목록과 동일) — 나머지 버튼은 숨김 */
.study-list.is-grid .book-list-item_bottom, .search-list.is-grid .book-list-item_bottom { display: flex; align-items: center; justify-content: space-between; gap: var(--space-sm); margin-top: auto; padding-top: var(--space-sm); }
.study-list.is-grid .book-list-item_btn:not(.book-list-item_fav), .search-list.is-grid .book-list-item_btn:not(.book-list-item_fav) { display: none; }
.study-list.is-grid .book-list-item_fav, .search-list.is-grid .book-list-item_fav { flex: 0 0 32px; width: 32px; height: 32px; padding: 0; border-radius: 50%; }
.study-list.is-grid .book-list-item_fav svg, .search-list.is-grid .book-list-item_fav svg { width: 16px; height: 16px; }
body[data-page="study"] .product-bar { background: transparent; box-shadow: none; margin: 0; padding: 18px 28px; border-bottom: 1px solid var(--color-border); border-radius: 0; }

/* ── 인트로 → 페이지 진입 애니메이션 (학습자료실·메인 공유 · .from-intro 일 때만) ── */
.page-enter { display: none; }
.from-intro .page-enter { position: fixed; inset: 0; z-index: 9999; display: flex; flex-direction: column; align-items: center; justify-content: center; }
.page-enter_bg { position: absolute; inset: 0; }
.page-enter--study .page-enter_bg { background: linear-gradient(150deg, #2f6fe0 0%, #1a4fb5 100%); }
.page-enter--books .page-enter_bg { background: linear-gradient(210deg, #7b5cff 0%, #5a3fe0 100%); }
.from-intro .page-enter_char { position: relative; z-index: 1; display: flex; flex-direction: column; align-items: center; gap: 22px; }
.from-intro .page-enter_char img { display: block; width: min(400px, 56vw); height: auto;  }
.from-intro .page-enter_bubble { position: relative; padding: 14px 26px; background: var(--color-canvas); border-radius: 20px; font-size: var(--text-lg); font-weight: var(--font-bold); letter-spacing: -0.3px; box-shadow: 0 14px 34px rgba(4,16,48,0.32); }
.page-enter--study .page-enter_bubble { color: #1a4fb5; }
.page-enter--books .page-enter_bubble { color: #5a3fe0; }
.from-intro .page-enter_bubble::after { content: ""; position: absolute; top: -5px; left: 50%; width: 12px; height: 12px; background: var(--color-canvas); border-radius: 3px 0 0 0; transform: translateX(-50%) rotate(45deg); }

/* 학습자료실: 팝인 → 유지 → 캐릭터가 우측 상단 헤더 자리로 날아가 그대로 안착 (교재 방식과 동일한 연속 모션)
   헤더 캐릭터(study-head_char)는 직접 방문 시엔 숨김이고, 인트로 진입 시에만 착지 지점(1207,362·172px)에
   같은 위치·크기로 불투명하게 나타나 대기 → 파란 오버레이가 걷히면 날아온 캐릭터가 딥 없이 그대로 이어져 안착.
   노출은 정리 시 제거되는 .from-intro 가 아니라 계속 남는 .study-entered 로 제어해야 안착 후에도 유지됨 */
.study-entered .study-head_char { display: block; }
.from-intro .page-enter--study { animation: pageEnterOut 0.5s ease 1.9s forwards; }
.from-intro .page-enter--study .page-enter_char img { --scx: calc(50vw - 233px); --scy: calc(362px - 50vh); animation: studyCharFly 1.9s cubic-bezier(0.3,0,0.2,1) forwards; }
.from-intro .page-enter--study .page-enter_bubble { animation: pageBubblePop 0.55s cubic-bezier(0.2,0.9,0.3,1.5) 0.3s both, pageBubbleOut 0.4s ease 1.1s forwards; }

/* 메인(교재): 팝인 → 유지 → 캐릭터가 우측 하단으로 작게 날아가 상주 (배경·말풍선은 사라짐) */
.from-intro .page-enter--books { pointer-events: none; }
.from-intro .page-enter--books .page-enter_bg { animation: pageBgOut 0.7s ease 2.2s forwards; }
.from-intro .page-enter--books .page-enter_bubble { animation: pageBubblePop 0.55s cubic-bezier(0.2,0.9,0.3,1.5) 0.6s both, pageBubbleOut 0.45s ease 2s forwards; }
.from-intro .page-enter--books .page-enter_char img { --mascot-scale: 0.2916; --cx: calc(50vw - 170px); --cy: calc(50vh - 42px); animation: booksCharFly 3.2s cubic-bezier(0.3,0,0.2,1) forwards, booksMascotBob 3s ease-in-out 3.2s infinite; }

@keyframes pageCharPop { 0% { opacity: 0; transform: translateY(44px) scale(0.5); } 100% { opacity: 1; transform: translateY(0) scale(1); } }
@keyframes pageCharBob { 0%, 100% { transform: translateY(0); } 50% { transform: translateY(-12px); } }
@keyframes pageBubblePop { 0% { opacity: 0; transform: translateY(10px) scale(0.8); } 100% { opacity: 1; transform: translateY(0) scale(1); } }
@keyframes pageBubbleOut { to { opacity: 0; transform: translateY(-6px) scale(0.9); } }
@keyframes pageBgOut { to { opacity: 0; } }
@keyframes pageEnterOut { to { opacity: 0; visibility: hidden; } }
@keyframes studyCharFly { 0% { opacity: 0; transform: translate(0, 44px) scale(0.5); } 14% { opacity: 1; transform: translate(0, 0) scale(1); } 55% { transform: translate(0, 0) scale(1); } 100% { transform: translate(var(--scx), var(--scy)) scale(0.43); } }
@keyframes booksCharFly { 0% { opacity: 0; transform: translate(0, 44px) scale(0.5); } 12% { opacity: 1; transform: translate(0, 0) scale(1); } 68% { transform: translate(0, 0) scale(1); } 100% { transform: translate(var(--cx), var(--cy)) scale(var(--mascot-scale, 0.36)); } }
@keyframes booksMascotBob { 0%, 100% { transform: translate(var(--cx), var(--cy)) scale(var(--mascot-scale, 0.36)); } 50% { transform: translate(var(--cx), calc(var(--cy) - 8px)) scale(var(--mascot-scale, 0.36)); } }
@media (prefers-reduced-motion: reduce) { .from-intro .page-enter { display: none; } }

/* ── 메인 상시 코너 마스코트: 인트로 미경유(로고·직접 방문)면 즉시 노출 / 인트로 경유 시엔 진입 애니메이션(.page-enter--books)이 대신 처리 ── */
/* 위치(--cx·--cy)는 위 .page-enter--books 캐릭터 착지 지점과 동일하게 맞춤 (한쪽 조정 시 함께 변경) */
/* --cy 는 fly 값(50vh - 42px)에서 39px 더 뺌: 인트로 캐릭터는 말풍선과 함께 flex 정렬돼 중앙보다 39px 위에서 시작하므로, 말풍선 없는 코너 마스코트를 같은 높이로 맞추기 위한 보정 */
.corner-mascot { position: fixed; inset: 0; z-index: 200; display: flex; align-items: center; justify-content: center; pointer-events: none; animation: cornerFadeIn 0.5s ease both; transition: transform 0.45s cubic-bezier(0.2,0.8,0.3,1); }
.corner-mascot_full { --mascot-scale: 0.2916; --cx: calc(50vw - 170px); --cy: calc(50vh - 81px); display: block; width: min(400px, 56vw); height: auto; transform: translate(var(--cx), var(--cy)) scale(var(--mascot-scale, 0.36)); animation: booksMascotBob 3s ease-in-out infinite; }
.corner-mascot_face { display: none; position: fixed; object-fit: contain; pointer-events: none; }
.corner-mascot_picktext { display: none; position: fixed; align-items: center; justify-content: center; text-align: center; color: #fff; font-weight: var(--font-bold); line-height: 1.08; letter-spacing: -0.02em; pointer-events: none; }

/* ── 캐릭터 뒤 원형 그라데이션 배경 (waongs-pick) — 102px, 캐릭터 착지 중심(100vw-170, 100vh-81)에 고정 · 캐릭터보다 뒤(DOM 먼저) ── */
.corner-mascot_disc, .page-enter_disc { position: fixed; left: calc(100vw - 170px); top: calc(100vh - 81px); width: 102px; height: 102px; margin: -51px 0 0 -51px; border-radius: 50%; background: linear-gradient(211deg, #937BFF 10.41%, #6F51F4 58.95%), #E9EDF3; }
/* 캐릭터 발 밑 접지 그림자 (원반 위·캐릭터 뒤) — 부드러운 타원 */
.corner-mascot_shadow, .page-enter_shadow { position: fixed; left: calc(100vw - 170px); top: calc(100vh - 37px); width: 31px; height: 8px; margin: -4px 0 0 -22px; border-radius: 50%; background: rgba(38, 20, 84, 0.42); filter: blur(2px); }
/* 인트로 경유: 캐릭터가 코너에 착지한 직후(3.2s) 원이 커지며 등장 */
.from-intro .page-enter--books .page-enter_disc { transform: scale(0); animation: discGrow 0.55s cubic-bezier(0.2,0.9,0.3,1.5) 3.2s forwards; }
@keyframes discGrow { 0% { transform: scale(0); } 60% { transform: scale(1.08); } 100% { transform: scale(1); } }
/* 발 그림자: 원반이 커진 뒤 은은하게 등장 */
.from-intro .page-enter--books .page-enter_shadow { opacity: 0; animation: shadowFadeIn 0.4s ease 3.5s forwards; }
@keyframes shadowFadeIn { to { opacity: 1; } }

/* 배지 클릭 영역 (원반 위, 클릭 가능) + 클릭 시 확산되는 그라데이션 원 */
.mascot-hit { position: fixed; left: calc(100vw - 170px); top: calc(100vh - 81px); width: 102px; height: 102px; margin: -51px 0 0 -51px; border-radius: 50%; z-index: 210; cursor: pointer; transition: transform 0.45s cubic-bezier(0.2,0.8,0.3,1); }
.pick-veil { position: fixed; left: calc(100vw - 170px); top: calc(100vh - 81px); width: 102px; height: 102px; margin: -51px 0 0 -51px; border-radius: 50%; background: radial-gradient(circle, #937bff 0%, #6f51f4 72%); transform: scale(0); opacity: 0; z-index: 9998; pointer-events: none; will-change: transform; }
.pick-veil.is-growing { animation: pickVeilGrow 0.6s cubic-bezier(0.5,0,0.2,1) forwards; }
@keyframes pickVeilGrow { 0% { transform: scale(0); opacity: 1; } 100% { transform: scale(32); opacity: 1; } }

/* 배지 라벨 "와옹's PICK!" — 원형 라인(배지 상단 아치)을 따라 곡선 텍스트 (SVG textPath) · 배지 중심에 정렬 */
.corner-mascot_label, .page-enter_label { position: fixed; left: calc(100vw - 170px); top: calc(100vh - 81px); width: 146px; height: 146px; margin: -73px 0 0 -73px; overflow: visible; pointer-events: none; }
.corner-mascot_label text, .page-enter_label text { font-family: var(--font-base); font-size: 15px; font-weight: var(--font-bold); fill: var(--color-ink); letter-spacing: -0.3px; }
.from-intro .page-enter--books .page-enter_label { opacity: 0; animation: shadowFadeIn 0.4s ease 3.6s forwards; }
.from-intro .corner-mascot { display: none; }
/* 스크롤(400px 초과) 시 배지가 위로 슬라이드하며 아래에 '맨 위로' 버튼 자리를 내어줌 (탑 버튼은 .scroll-top-visible로 페이드인) */
body.has-scrolled .corner-mascot, body.has-scrolled .mascot-hit { transform: translateY(-80px); }
body.mega-open .corner-mascot, body.mega-open .mascot-hit { visibility: hidden; } /* 전체(메가) 메뉴가 열려 있는 동안은 숨김 — z-index 200대라 메뉴를 덮는다 (웹·태블릿·모바일 공통) */
body.has-scrolled .pick-veil { top: calc(100vh - 161px); }
/* ── 반응형: 화면이 좁아 배지가 콘텐츠를 침범하면 미니 원형 버튼으로 축소(라벨 유지) · 탑 버튼도 배지 밑에 비례 축소 정렬 ── */
@media (max-width: 1400px) {
  .corner-mascot_full { display: none; }
  .corner-mascot_face { display: block; left: calc(100vw - 62px); top: calc(100vh - 60px); width: 60px; height: 60px; margin: -30px 0 0 -30px; }
  .corner-mascot_disc { left: calc(100vw - 62px); top: calc(100vh - 60px); width: 62px; height: 62px; margin: -31px 0 0 -31px; }
  .corner-mascot_shadow { display: none; }
  .mascot-hit { left: calc(100vw - 62px); top: calc(100vh - 60px); width: 62px; height: 62px; margin: -31px 0 0 -31px; }
  .pick-veil { left: calc(100vw - 62px); top: calc(100vh - 60px); }
  .corner-mascot_label { left: calc(100vw - 65px); top: calc(100vh - 56px); width: 108px; height: 108px; margin: -54px 0 0 -54px; }
  .scroll-top { left: calc(100vw - 62px); top: calc(100vh - 66px); width: 34px; height: 34px; border-radius: var(--radius-lg); }
  .scroll-top img, .scroll-top svg { width: 18px; height: 18px; }
  body.has-scrolled .corner-mascot, body.has-scrolled .mascot-hit { transform: translateY(-58px); }
  body.has-scrolled .pick-veil { top: calc(100vh - 118px); }
}
/* ── 모바일: 원(배지)을 더 작게 · 원 안에서 [얼굴]↔["와옹's PICK!" 텍스트]가 번갈아 깜빡 ── */
@keyframes badgeFaceBlink { 0%, 42% { opacity: 1; } 50%, 92% { opacity: 0; } 100% { opacity: 1; } }
@keyframes badgeTextBlink { 0%, 42% { opacity: 0; } 50%, 92% { opacity: 1; } 100% { opacity: 0; } }
@media (max-width: 767px) {
  .corner-mascot_disc { left: calc(100vw - 40px); top: calc(100vh - 52px); top: calc(100dvh - 52px); width: 48px; height: 48px; margin: -24px 0 0 -24px; } /* dvh: 모바일 주소창 표시 상태에서도 잘리지 않게 (100vh는 구형 폴백) */
  .corner-mascot_face { left: calc(100vw - 40px); top: calc(100vh - 52px); top: calc(100dvh - 52px); width: 46px; height: 46px; margin: -23px 0 0 -23px; animation: badgeFaceBlink 3.4s ease-in-out infinite; }
  .mascot-hit { left: calc(100vw - 40px); top: calc(100vh - 52px); top: calc(100dvh - 52px); width: 48px; height: 48px; margin: -24px 0 0 -24px; }
  .pick-veil { left: calc(100vw - 40px); top: calc(100vh - 52px); top: calc(100dvh - 52px); }
  .corner-mascot_label { display: none; }
  .corner-mascot_picktext { display: flex; left: calc(100vw - 40px); top: calc(100vh - 52px); top: calc(100dvh - 52px); width: 48px; height: 48px; margin: -24px 0 0 -24px; font-size: 10px; animation: badgeTextBlink 3.4s ease-in-out infinite; }
  .scroll-top { left: calc(100vw - 40px); top: calc(100vh - 66px); top: calc(100dvh - 66px); width: 44px; height: 44px; border-radius: 50%; } /* 원형 — 흰 배경이라 와옹 배지(48px)보다 살짝 작게 */
  .scroll-top img, .scroll-top svg { width: 20px; height: 20px; }
  body.has-scrolled .corner-mascot, body.has-scrolled .mascot-hit { transform: translateY(-52px); }
  body.has-scrolled .pick-veil { top: calc(100vh - 104px); top: calc(100dvh - 104px); }
}
@keyframes cornerFadeIn { from { opacity: 0; } to { opacity: 1; } }
@media (prefers-reduced-motion: reduce) { .corner-mascot, .corner-mascot img, .corner-mascot_picktext { animation: none; } .corner-mascot_picktext { opacity: 0; } }

/* ========== Focus Visible ========== */
:focus-visible { outline: 2px solid var(--color-primary); outline-offset: 2px; }

/* ========== Tablet ========== */
/* ========== Book Detail (도서 상세) ========== */
.book-detail { padding: 12px 0 0; }
.book-detail_top { max-width: 1040px; display: flex; gap: var(--space-4xl); align-items: flex-start; }
.book-detail_cover { flex: 0 0 360px; display: flex; flex-direction: column; gap: var(--space-base); }
/* 웹에서는 교재 이미지를 크게 본다 — 표지 영역 1.2배(360 → 432px).
   min-width 로 가둬야 태블릿(1279px 이하)·모바일은 기존 360px 를 그대로 쓴다 */
@media (min-width: 1280px) { .book-detail_cover { flex-basis: 432px; } }
.book-detail_cover-card { display: flex; align-items: center; justify-content: center; padding: var(--space-2xl); background: var(--color-surface-cool); border-radius: var(--radius-xl); }
.book-detail_cover-card img { width: 100%; height: auto; border: 1px solid var(--color-border); box-shadow: 0 8px 28px rgba(0,0,0,0.12); }
/* 표지가 없거나 못 불러온 교재 — 카드용 절대배치를 풀고 표지와 같은 비율의 칸을 세워 글자를 가운데 둔다 */
.book-detail_cover-card .book-card_cover-empty { position: static; width: 100%; aspect-ratio: 198/277; background: var(--color-surface); border: 1px solid var(--color-border); font-size: var(--text-sm); }
.book-detail_preview { display: flex; align-items: center; justify-content: center; gap: var(--space-sm); height: 48px; background: var(--color-canvas); border: 1px solid var(--color-border); border-radius: var(--radius-lg); font-size: var(--text-md); font-weight: var(--font-semibold); color: var(--color-gray-700); transition: border-color var(--duration-base) var(--ease-default), color var(--duration-base) var(--ease-default); }
.book-detail_preview svg { width: 18px; height: 18px; }
.book-detail_preview.is-loading { opacity: 0.5; pointer-events: none; } /* PDF 첫 장 렌더 대기 중 — 중복 클릭 방지 */
.book-detail_info { flex: 1; min-width: 0; padding-top: var(--space-xs); }
.book-detail_cats { display: flex; flex-direction: column; gap: 2px; margin-bottom: var(--space-base); }
.book-detail_cat { display: flex; align-items: center; gap: var(--space-base); }
.book-detail_cat-link { display: inline-flex; align-items: center; gap: 2px; font-size: var(--text-sm); font-weight: var(--font-semibold); color: var(--color-primary); }
.book-detail_cat-link svg { width: 15px; height: 15px; }
.book-detail_title { font-size: var(--text-4xl); font-weight: var(--font-semibold); color: var(--color-ink); line-height: 1.34; letter-spacing: 0; margin-bottom: 10px; }
.book-detail_subtitle { font-size: var(--text-base); color: var(--color-gray-600); line-height: 1.5; letter-spacing: -0.2px; margin-bottom: var(--space-base); }
.book-detail_event { display: flex; align-items: flex-start; gap: 12px; padding: 14px 16px; margin-bottom: var(--space-lg); border: 1px solid var(--color-border); border-radius: var(--radius-md); font-size: var(--text-sm); line-height: 1.6; overflow-wrap: anywhere; }
.book-detail_event-label { flex-shrink: 0; color: var(--color-primary); }
.book-detail_event a { text-decoration: underline; text-underline-offset: 3px; white-space: pre-line; }
.book-detail_meta { display: flex; flex-direction: column; gap: var(--space-sm); }
.book-detail_meta-item { display: flex; align-items: flex-start; gap: 2px; font-size: var(--text-sm); color: var(--color-gray-700); letter-spacing: -0.2px; line-height: 1.5; }
.book-detail_meta-label { flex-shrink: 0; width: 64px; color: var(--color-gray-500); font-weight: var(--font-medium); }
.book-detail_meta-value { flex: 1; min-width: 0; display: -webkit-box; -webkit-box-orient: vertical; -webkit-line-clamp: 1; line-clamp: 1; overflow: hidden; }
.book-detail_meta-value.is-open { -webkit-line-clamp: unset; line-clamp: unset; overflow: visible; }
.book-detail_meta-toggle { flex-shrink: 0; display: inline-flex; align-items: center; justify-content: center; width: 20px; height: 21px; color: var(--color-gray-500); transition: color var(--duration-base) var(--ease-default); }
.book-detail_meta-toggle[hidden] { display: none; }
.book-detail_meta-toggle svg { width: 16px; height: 16px; transition: transform var(--duration-base) var(--ease-default); }
.book-detail_meta-toggle.is-open svg { transform: scaleY(-1); }
.book-detail_tags { display: flex; flex-wrap: wrap; gap: 6px; margin: 0 0 12px; }
.book-detail_tags .book-card_lbadge { height: 22px; padding: 0 6px; background: transparent; border: 1px solid var(--color-border); color: var(--color-gray-500); font-weight: var(--font-regular); opacity: 1; }
.book-detail_tags .book-card_lbadge svg { display: inline-flex; width: 12px; height: 12px; color: var(--color-gray-400); }
.book-quick-wrap { max-width: 1040px; margin-top: var(--space-3xl); }
.book-quick { padding: var(--space-lg); background: var(--color-surface-cool); border: 1px solid var(--color-border); border-radius: var(--radius-tab); }
.book-quick_head { display: flex; align-items: center; gap: 7px; font-size: var(--text-md); font-weight: var(--font-bold); color: var(--color-ink); letter-spacing: -0.3px; margin-bottom: var(--space-base); }
.book-quick_head svg { width: 18px; height: 18px; color: var(--color-primary); }
.book-quick_grid { display: grid; grid-template-columns: repeat(auto-fit, minmax(140px, 1fr)); gap: 10px; }
.book-quick_btn { display: flex; flex-direction: column; align-items: center; justify-content: center; gap: var(--space-sm); height: 92px; background: var(--color-canvas); border: 1px solid var(--color-border); border-radius: var(--radius-lg); font-size: var(--text-sm); font-weight: var(--font-semibold); color: var(--color-gray-800); letter-spacing: -0.3px; transition: border-color var(--duration-base) var(--ease-default), box-shadow var(--duration-base) var(--ease-default), transform var(--duration-base) var(--ease-default); }
.book-quick_icon { display: flex; align-items: center; justify-content: center; width: 40px; height: 40px; border-radius: var(--radius-lg); }
.book-quick_icon svg { width: 21px; height: 21px; stroke-width: 2; }
.book-quick_icon-mp3, .book-quick_icon-lecture, .book-quick_icon-errata, .book-quick_icon-answer, .book-quick_icon-voca, .book-quick_icon-ybm { background: var(--color-tint-100); color: var(--color-primary); }
.book-quick_label { display: inline-flex; align-items: center; gap: 3px; }
.book-quick_ext { width: 12px; height: 12px; color: var(--color-gray-400); }
.book-detail_divider { height: 1px; margin: var(--space-lg) 0; border: 0; background: var(--color-border); }
.book-detail_price-row { display: flex; align-items: center; justify-content: space-between; gap: var(--space-base); }
.book-detail_price { display: flex; align-items: baseline; gap: 8px; }
.book-detail_price-num { font-size: var(--text-3xl); font-weight: var(--font-bold); color: var(--color-ink); letter-spacing: 1px; }
.book-detail_actions { display: flex; gap: var(--space-sm); }
.book-detail_icon-btn { display: flex; align-items: center; justify-content: center; width: 44px; height: 44px; background: var(--color-canvas); border: 1px solid var(--color-border); border-radius: var(--radius-pill); color: var(--color-gray-600); transition: border-color var(--duration-base) var(--ease-default), color var(--duration-base) var(--ease-default); }
.book-detail_icon-btn svg { width: 20px; height: 20px; }
.book-detail_fav.is-active { border-color: var(--color-coral); color: var(--color-coral); }
.book-detail_fav.is-active svg { fill: currentColor; }
.book-detail_materials-title { display: flex; align-items: center; gap: 6px; font-size: var(--text-sm); font-weight: var(--font-bold); color: var(--color-ink); letter-spacing: -0.3px; margin-bottom: var(--space-base); }
.book-detail_materials-title svg { width: 16px; height: 16px; color: var(--color-primary); }
.book-detail_materials-list { display: flex; flex-wrap: wrap; gap: var(--space-sm); }
.book-detail_material { position: relative; flex: 0 0 103px; display: flex; flex-direction: column; align-items: center; justify-content: center; gap: var(--space-sm); height: 76px; background: var(--color-tint-50); border: 1px solid var(--color-line); border-radius: var(--radius-lg); font-size: var(--text-xs); font-weight: var(--font-semibold); color: var(--color-gray-800); letter-spacing: -0.2px; transition: background-color var(--duration-base) var(--ease-default), border-color var(--duration-base) var(--ease-default), color var(--duration-base) var(--ease-default), transform var(--duration-base) var(--ease-default); }
.book-detail_material-icon { display: flex; align-items: center; justify-content: center; width: 32px; height: 32px; border-radius: var(--radius-md); background: var(--color-canvas); color: var(--color-primary); border:1px solid var(--color-line) }
.book-detail_material-icon svg { width: 17px; height: 17px; }
.book-detail_material-label { display: inline-flex; align-items: center; gap: var(--space-xs); }
/* 다운로드 아이콘 — 라벨 옆이 아니라 버튼 우측 상단 코너에 표시 (다운로드형 버튼에만 마크업 존재) */
.book-detail_material-download { position: absolute; top: 7px; right: 7px; display: inline-flex; width: 13px; height: 13px; stroke-width: 2; color: var(--color-gray-400); transition: color var(--duration-base) var(--ease-default); }
.book-detail_foot { display: flex; align-items: center; justify-content: flex-end; gap: var(--space-lg); margin-top: var(--space-xl); }
.book-detail_buy { display: inline-flex; align-items: center; justify-content: center; gap: var(--space-sm); height: 54px; padding: 0 var(--space-2xl); background: var(--color-primary); border-radius: var(--radius-lg); font-size: var(--text-base); font-weight: var(--font-bold); color: var(--color-canvas); letter-spacing: -0.3px; white-space: nowrap; transition: background var(--duration-base) var(--ease-default); }
.book-detail_buy svg { width: 18px; height: 18px; }
.book-detail_buy-ext { width: 15px; height: 15px; opacity: 0.7; }

/* ── 절판도서 상세 (.book-detail_top-sold) ──
   목록의 절판 표현(.book-list-item-sold)과 같은 언어를 쓴다: 표지 흑백 + 절판 라벨 + 가격 톤 다운.
   구매 버튼은 링크가 아닌 span 으로 교체돼 클릭·포커스가 되지 않으므로, 파란 CTA 색을 빼고 비활성으로 보이게 한다.
   학습자료 버튼은 그대로 둔다 — 판매만 종료되고 자료 제공은 계속되기 때문. */
.book-detail_top-sold .book-detail_cover-card { position: relative; }
.book-detail_top-sold .book-detail_cover-card img { opacity: 0.5; }
.book-detail_sold { position: absolute; top: 50%; left: 50%; padding: 8px 18px; background: var(--color-toast-bg); border-radius: var(--radius-sm); font-size: var(--text-base); font-weight: var(--font-bold); color: var(--color-canvas); letter-spacing: 1px; white-space: nowrap; transform: translate(-50%, -50%); }
.book-detail_top-sold .book-detail_price-num { font-size: var(--text-2xl); color: var(--color-gray-500); letter-spacing: -0.3px; }
/* .book-detail_tags 스코프가 lbadge 배경을 transparent 로 덮으므로 같은 깊이로 재정의 */
.book-detail_tags .book-card_lbadge-sold { border-color: var(--color-gray-400); color: var(--color-gray-600); background: var(--color-surface-light); }
.book-card_lbadge-sold { border-color: var(--color-gray-400); color: var(--color-gray-600); background: var(--color-surface-light); }
.book-detail_buy-sold { background: var(--color-surface); color: var(--color-gray-500); cursor: default; }
.book-detail_buy-sold svg { color: var(--color-gray-500); }
/* ======== Book Detail 3D 표지 (book-detail-750-3d.html) ========
   앞표지·책등·뒷표지 3면을 세워 만든 입체 표지. 앞표지를 기준면(z=0)에 두고,
   책등은 왼쪽 모서리를 축으로 뒤로 접어 z ∈ [0, -S] 를 채우고, 뒷표지를 z = -S 에 뒤집어 놓는다.
   S(책등 두께)는 화면 폭마다 달라지므로 JS 가 --book3d-spine 에 px 로 넣어준다.
   회전값은 JS([data-book3d])가 포인터 위치에 따라 inline transform 으로 덮어쓴다.
   perspective 는 책 높이의 5~6배로 넉넉히 잡는다 — 값이 작으면(1600px 이하) 책등이 위아래 폭이
   다른 사다리꼴로 심하게 찌그러지고, 아예 없으면 원근이 사라져 종이를 붙여놓은 듯 납작해진다.
   회전은 세로축(rotateY)만 쓴다. 상하 틸트(rotateX)를 섞으면 수직선이 무너져 삐뚤어 보인다. */
/* 커서는 "180°" 회전 아이콘 — 클릭하면 뒤집힌다는 걸 마우스만 올려도 알 수 있게 한다.
   숫자 28 28 은 아이콘의 어느 지점이 실제 마우스 위치인지(56x56 의 중앙)를 뜻한다.
   SVG 커서를 못 읽는 브라우저는 뒤의 pointer 로 넘어간다 */
.book3d { --book3d-spine: 24px; position: relative; display: block; width: 100%; padding: 0; perspective: 2600px; perspective-origin: 60% 50%; cursor: url("/images/icons/icon-flip-180.svg") 28 28, pointer; touch-action: pan-y; }
/* 기본은 정면(0도) — 처음엔 앞표지만 보이고, 롤오버해야 책이 돌아간다 */
.book3d_inner { position: relative; display: block; transform-style: preserve-3d; transform: rotateY(0deg); transition: transform calc(var(--duration-slow) * 2) var(--ease-in-out); will-change: transform; }
.book3d_face { display: block; }
/* 공통 규칙(.book-detail_cover-card img)의 테두리·그림자를 세 면에서 걷어내고 앞표지에만 다시 준다 */
.book3d_face img { display: block; width: 100%; height: auto; border: 0; box-shadow: none; }
.book3d_face-front { position: relative; z-index: 2; backface-visibility: hidden; }
.book3d_face-front img { border-radius: 0 var(--radius-xs) var(--radius-xs) 0; box-shadow: var(--shadow-floating); }
/* 표지 명암 — 돌아섰을 때만 켠다. 앞으로 나온 왼쪽은 밝게, 뒤로 물러난 오른쪽은 어둡게 해야 면이 휘어 보인다.
   정면일 때 켜두면 표지에 얼룩이 진 것처럼 보이므로 opacity 로 여닫는다 */
.book3d_face-front::after { content: ""; position: absolute; inset: 0; border-radius: 0 var(--radius-xs) var(--radius-xs) 0; background: linear-gradient(90deg, rgba(255,255,255,0.1), rgba(255,255,255,0) 22%, rgba(0,0,0,0.14)); opacity: 0; transition: opacity var(--duration-slow) var(--ease-out); }
/* 책등 — 표지 왼쪽 모서리에 절반 걸쳐 두고 -90도로 접으면 뒤쪽으로 두께만큼 뻗는다 */
.book3d_face-spine { position: absolute; top: 0; left: calc(var(--book3d-spine) / -2); width: var(--book3d-spine); height: 100%; transform: rotateY(-90deg) translateX(calc(var(--book3d-spine) / -2)); }
.book3d_face-spine img { height: 100%; object-fit: fill; }
/* 책등 그늘 — 표지와 다른 각도로 꺾인 면이라 빛을 덜 받는다. 이 명암이 있어야 접힌 것으로 읽힌다 */
.book3d_face-spine::after { content: ""; position: absolute; inset: 0; background: linear-gradient(90deg, rgba(0,0,0,0.3), rgba(0,0,0,0.06)); }
/* 뒷표지 — 책등이 끝나는 깊이(z = -S)에 뒤집어 놓는다 */
.book3d_face-back { position: absolute; inset: 0; backface-visibility: hidden; transform: rotateY(-180deg) translateZ(var(--book3d-spine)); }
.book3d_face-back img { height: 100%; object-fit: fill; border-radius: var(--radius-xs) 0 0 var(--radius-xs); }
/* 바닥 그림자 — 회전 몸통 밖(2D)에 두어 3D 변환에 딸려 기울지 않게 한다. 책이 돌아설 때만 깔린다 */
.book3d::after { content: ""; position: absolute; left: 6%; right: 6%; bottom: -14px; height: 18px; background: rgba(0,0,0,0.18); border-radius: 50%; filter: blur(10px); opacity: 0; transition: opacity var(--duration-slow) var(--ease-out); }
/* 롤오버는 마우스가 있는 기기에서만. 터치 기기는 탭할 때 :hover 가 들러붙어(sticky hover)
   손을 뗀 뒤에도 표지가 45도에서 멈춰버리므로 규칙 자체를 차단한다 */
@media (hover: hover) {
  .book3d:hover .book3d_inner { transform: rotateY(45deg); }
  .book3d:hover .book3d_face-front::after { opacity: 1; }
  .book3d:hover::after { opacity: 1; }
}
/* 상태 클래스 — 모바일에서 스와이프로 정면(0) → 측면(1) → 뒷면(2) 를 돈다.
   위 hover 규칙과 특이도가 같으므로 반드시 뒤에 둬야 상태가 롤오버를 이긴다 */
.book3d.is-side .book3d_inner { transform: rotateY(45deg); }
.book3d.is-side .book3d_face-front::after { opacity: 1; }
.book3d.is-side::after { opacity: 1; }
/* 뒤집기는 정확히 180도 — 뒷표지를 비스듬히가 아니라 똑바로 보여준다 */
.book3d.is-flipped .book3d_inner { transform: rotateY(180deg) translateZ(var(--book3d-spine)); }
.book3d:focus-visible { outline: 2px solid var(--color-primary); outline-offset: 6px; }
/* 모션 최소화 — 롤오버 회전은 끄되 플립은 남긴다(회전을 막으면 뒷면을 볼 방법이 없다) */
@media (prefers-reduced-motion: reduce) { .book3d_inner { transition: none; } }
@media (hover: hover) and (prefers-reduced-motion: reduce) { .book3d:hover .book3d_inner { transform: rotateY(0deg); } }
/* ======== Book Detail — 페이지 세부 스타일 (data-page 스코프) ======== */
body[data-page="book-detail"] .book-detail { padding-top: 40px; }
body[data-page="book-detail"] .book-detail_price-num { font-size: var(--text-2xl); }
body[data-page="book-detail"] .book-detail_info { position: relative; }
body[data-page="book-detail"] .book-detail_top-actions, body[data-page="book-detail"] .book-detail_share-top { position: absolute; top: 0; right: 0; }
body[data-page="book-detail"] .book-detail_top-actions { display: flex; gap: var(--space-sm); }
/* 버튼이 3개(교재·eBOOK·인강)라 가격과 한 줄에 두면 정보 폭(552px)을 넘친다 → 가격 위 / 버튼 아래 균등 3분할 */
body[data-page="book-detail"] .book-detail_price-row { flex-direction: column; align-items: stretch; gap: var(--space-base); }
body[data-page="book-detail"] .book-detail_foot-actions { display: flex; align-items: center; gap: var(--space-sm); }
body[data-page="book-detail"] .book-detail_foot-actions > a { flex: 1 1 0; min-width: 0; padding: 0 var(--space-base); }
/* 버튼이 2개뿐인 상세(eBOOK 없음·인강 없음)는 균등 분할하면 빈 버튼처럼 늘어난다 → 자연폭 우측 정렬
   (버튼이 3개일 때 오른쪽 끝에 맞춰지던 위치를 그대로 유지한다) */
body[data-page="book-detail"] .book-detail_foot-actions:has(> :nth-child(2):last-child) { justify-content: flex-end; }
body[data-page="book-detail"] .book-detail_foot-actions:has(> :nth-child(2):last-child) > a { flex: none; padding: 0 var(--space-xl); }
/* 버튼이 하나뿐인 상세(비매품 등)도 같은 이유로 자연폭이다. 혼자 가로를 다 채우면 눌러야 할 것이 아닌 띠처럼 보인다. 절판 표시는 a 가 아니라 span 이라 태그를 가리지 않는다 */
body[data-page="book-detail"] .book-detail_foot-actions:has(> :only-child) { justify-content: flex-end; }
body[data-page="book-detail"] .book-detail_foot-actions > :only-child { flex: none; padding: 0 var(--space-xl); }
/* 구매·인강 버튼 3종은 형태(높이·라운드·타이포)를 공유하고 색으로만 위계를 나눈다: 교재(solid) > eBOOK·인강(그레이 아웃라인) */
body[data-page="book-detail"] .book-detail_lecture, body[data-page="book-detail"] .book-detail_ebook { display: inline-flex; align-items: center; justify-content: center; gap: var(--space-sm); height: 54px; padding: 0 var(--space-xl); background: var(--color-canvas); border: 1px solid var(--color-border-strong); border-radius: var(--radius-lg); font-size: var(--text-base); font-weight: var(--font-semibold); color: var(--color-gray-700); letter-spacing: -0.3px; white-space: nowrap; transition: background-color var(--duration-base) var(--ease-default), border-color var(--duration-base) var(--ease-default), color var(--duration-base) var(--ease-default); }
body[data-page="book-detail"] .book-detail_lecture svg, body[data-page="book-detail"] .book-detail_ebook svg { width: 16px; height: 16px; opacity: 0.7; }
body[data-page="book-detail"] .book-detail_buy { font-weight: var(--font-semibold); }
body[data-page="book-detail"] .related-box { padding: var(--space-2xl); background: var(--color-surface-cool); border-radius: var(--radius-xl); }
body[data-page="book-detail"] #related-books .section_title { font-size: var(--text-2xl); font-weight: var(--font-semibold); letter-spacing: -0.4px; }
/* 연관 도서 — transform 기반 관성 슬라이더 + 커스텀 스크롤바 (드래그·스와이프·바운스) */
.related-scroll { position: relative; overflow: hidden; }
#related-books .book-grid { display: flex; flex-wrap: nowrap; gap: var(--space-lg); cursor: grab; touch-action: pan-y; will-change: transform; }
#related-books .book-grid.is-dragging { cursor: grabbing; user-select: none; }
#related-books .book-grid img { -webkit-user-drag: none; user-select: none; }
#related-books .book-card { flex: 0 0 150px; min-width: 0; }
/* 드래그 슬라이더용 커스텀 스크롤바 (.drag-scrollbar 가 공통 이름 · .related-scrollbar 는 연관도서 기존 마크업 호환) */
.related-scrollbar, .drag-scrollbar { position: relative; width: 100%; height: 4px; margin: var(--space-xl) 0 0; background: var(--color-surface-cool); border-radius: var(--radius-pill); }
.related-scrollbar_thumb, .drag-scrollbar_thumb { position: absolute; top: 0; left: 0; height: 100%; width: 80px; background: var(--color-border-strong); border-radius: var(--radius-pill); cursor: grab; transition: background var(--duration-base) var(--ease-default); }
.related-scrollbar_thumb:active, .drag-scrollbar_thumb:active { cursor: grabbing; background: var(--color-gray-500); }

/* ── 카드 뉴스 — 연관도서와 동일한 관성 슬라이더(createInertiaSlider) 재사용 · 카드 클릭 시 라이트박스 ── */
.cardnews-scroll { position: relative; overflow: hidden; }
.cardnews_track { display: flex; flex-wrap: nowrap; gap: var(--space-lg); cursor: grab; touch-action: pan-y; will-change: transform; }
.cardnews_track.is-dragging { cursor: grabbing; user-select: none; }
.cardnews-card { flex: 0 0 260px; min-width: 0; padding: 0; background: none; border: 1px solid var(--color-border); border-radius: var(--radius-lg); overflow: hidden; box-shadow: var(--shadow-cover); cursor: pointer; transition: transform var(--duration-base) var(--ease-out), box-shadow var(--duration-base) var(--ease-out); }
.cardnews-card img { display: block; width: 100%; height: auto; -webkit-user-drag: none; user-select: none; }

/* ── 카드뉴스 라이트박스 (확대보기) — 배너 모달과 동일한 오버레이·팝 애니메이션 재사용 ── */
.cardnews-lightbox { position: fixed; inset: 0; z-index: var(--z-modal); display: flex; align-items: center; justify-content: center; }
.cardnews-lightbox[hidden] { display: none; }
.cardnews-lightbox_overlay { position: absolute; inset: 0; background: var(--color-overlay); animation: bannerModalFade 200ms ease; }
.cardnews-lightbox_panel { position: relative; animation: bannerModalPop 200ms var(--ease-in-out); }
.cardnews-lightbox_img { display: block; height: min(1350px, calc(100vh - 160px)); width: auto; max-width: calc(100vw - 160px); border-radius: var(--radius-lg); }
.cardnews-lightbox_close { position: absolute; top: -48px; right: 0; display: flex; align-items: center; justify-content: center; width: 40px; height: 40px; background: none; border: none; border-radius: var(--radius-pill); color: var(--color-canvas); cursor: pointer; transition: background var(--duration-base) var(--ease-default); }
.cardnews-lightbox_close svg { width: 24px; height: 24px; }
.cardnews-lightbox_nav { position: absolute; top: 50%; display: flex; align-items: center; justify-content: center; width: 48px; height: 48px; background: rgba(0,0,0,0.45); border: none; border-radius: var(--radius-pill); color: var(--color-canvas); cursor: pointer; transform: translateY(-50%); transition: background var(--duration-base) var(--ease-default); } /* 흰 카드 위에서도 보이도록 검은 반투명 */
.cardnews-lightbox_nav svg { width: 26px; height: 26px; }
.cardnews-lightbox_nav-prev { left: -64px; }
.cardnews-lightbox_nav-next { right: -64px; }
.cardnews-lightbox_count { position: absolute; bottom: -38px; left: 50%; padding: 4px 14px; background: var(--color-toast-bg); border-radius: var(--radius-pill); font-size: var(--text-sm); font-weight: var(--font-medium); color: var(--color-canvas); letter-spacing: 0.3px; white-space: nowrap; transform: translateX(-50%); }

/* ── 교재 미리보기 북 뷰어 — 카드뉴스 확대보기 골격(오버레이·닫기·화살표·장수 표시) 재사용.
   웹·태블릿: 책 펼침면(2장) + 낱장 3D 넘김 · 표지·마지막 장이 홀로 남으면 책을 밀어 보이는 면을 중앙 유지.
   모바일: mobile.css가 book을 감추고 단일 이미지(.cardnews-lightbox_img)로 전환 ── */
.bookpv .cardnews-lightbox_img { display: none; } /* 단일 이미지는 모바일 전용 */
.bookpv_book { position: relative; display: flex; width: min(calc(100vw - 224px), calc((100vh - 200px) * 1.498), 1534px); aspect-ratio: 1534 / 1024; perspective: 2600px; transition: transform calc(var(--duration-slow) * 2) var(--ease-in-out); }
.bookpv_book.is-solo-right { transform: translateX(-25%); } /* 표지만 펼쳐진 상태 */
.bookpv_book.is-solo-left { transform: translateX(25%); } /* 마지막 장이 왼쪽에 홀로 남은 상태 */
.bookpv_page { position: relative; z-index: 1; width: 50%; height: 100%; cursor: pointer; }
.bookpv_page.is-empty { visibility: hidden; } /* 면이 없어도 자리는 남겨 책 폭 유지 */
.bookpv_page.is-loading { background: var(--color-canvas); } /* 아직 렌더 전인 장 — 흰 종이로 표시 */
.bookpv .cardnews-lightbox_img.is-loading { background: var(--color-canvas); } /* 모바일 한 장 보기도 동일 */
.bookpv_page img, .bookpv_sheet-face img { display: block; width: 100%; height: 100%; object-fit: cover; border-radius: inherit; } /* 내지 원본은 767×1024 비율 권장 */
.bookpv_page-left { border-radius: var(--radius-md) 0 0 var(--radius-md); box-shadow: var(--shadow-dark); }
.bookpv_page-right { border-radius: 0 var(--radius-md) var(--radius-md) 0; box-shadow: var(--shadow-dark); }
.bookpv_page-left::after { content: ""; position: absolute; inset: 0; border-radius: inherit; background: linear-gradient(to right, rgba(0,0,0,0) 82%, rgba(0,0,0,0.16)); pointer-events: none; } /* 제본선(책등) 음영 */
.bookpv_page-right::after { content: ""; position: absolute; inset: 0; border-radius: inherit; background: linear-gradient(to left, rgba(0,0,0,0) 82%, rgba(0,0,0,0.16)); pointer-events: none; }
.bookpv_sheet { position: absolute; top: 0; left: 50%; z-index: 2; width: 50%; height: 100%; transform-style: preserve-3d; transform-origin: left center; transition: transform calc(var(--duration-slow) * 2) var(--ease-in-out); will-change: transform; }
.bookpv_sheet.is-back { left: 0; transform-origin: right center; }
.bookpv_sheet.is-turning { transform: rotateY(-180deg); } /* 앞으로 넘김 — 오른장이 왼쪽으로 접힌다 */
.bookpv_sheet.is-back.is-turning { transform: rotateY(180deg); } /* 뒤로 넘김 — 왼장이 오른쪽으로 접힌다 */
.bookpv_sheet-face { position: absolute; inset: 0; overflow: hidden; background: var(--color-canvas); backface-visibility: hidden; -webkit-backface-visibility: hidden; } /* 흰 종이 바탕 — 렌더 전 장을 넘겨도 낱장이 보이게 */
.bookpv_sheet-front { border-radius: 0 var(--radius-md) var(--radius-md) 0; }
.bookpv_sheet-back { transform: rotateY(180deg); border-radius: var(--radius-md) 0 0 var(--radius-md); }
.bookpv_sheet.is-back .bookpv_sheet-front { border-radius: var(--radius-md) 0 0 var(--radius-md); }
.bookpv_sheet.is-back .bookpv_sheet-back { border-radius: 0 var(--radius-md) var(--radius-md) 0; }
.bookpv_sheet-face::after { content: ""; position: absolute; inset: 0; border-radius: inherit; background: linear-gradient(to right, rgba(0,0,0,0.10), rgba(0,0,0,0) 26%); pointer-events: none; } /* 넘어가는 낱장의 접힘(책등 쪽) 음영 */
.bookpv_sheet.is-back .bookpv_sheet-face::after { background: linear-gradient(to left, rgba(0,0,0,0.10), rgba(0,0,0,0) 26%); }
.bookpv .cardnews-lightbox_nav[disabled] { opacity: 0.35; cursor: default; } /* 표지·마지막 장에서는 해당 방향 화살표를 흐리게 */
.bookpv .cardnews-lightbox_nav[disabled]:hover { background: rgba(0,0,0,0.45); }
/* ========== Toast (알림 팝업) ========== */
.toast { position: fixed; left: 50%; bottom: 40px; z-index: var(--z-modal); display: flex; align-items: center; max-width: calc(100% - 40px); padding: 12px 20px; background: var(--color-toast-bg); border-radius: var(--radius-lg); font-size: var(--text-sm); font-weight: var(--font-regular); color: var(--color-canvas); letter-spacing: -0.2px; white-space: nowrap; box-shadow: var(--shadow-floating); transform: translate(-50%, 20px); opacity: 0; pointer-events: none; transition: transform var(--duration-base) var(--ease-default), opacity var(--duration-base) var(--ease-default); }
.toast-visible { transform: translate(-50%, 0); opacity: 1; }
.toast_msg { letter-spacing: 0.3px; }
.toast_link { display: inline-flex; align-items: center; gap: 6px; margin-left: 14px; padding: 5px 13px; background: rgba(255,255,255,0.16); border-radius: var(--radius-pill); color: var(--color-canvas); font-size: var(--text-xs); letter-spacing: 0.3px; white-space: nowrap; pointer-events: auto; transition: background var(--duration-base) var(--ease-default); }
.toast_link::after { content: ""; width: 5px; height: 5px; border-top: 2px solid currentColor; border-right: 2px solid currentColor; transform: rotate(45deg); }
/* 탭바 자체는 보더 없이 비활성 탭과 같은 배경 — 컨테이너 좌우 여백까지 연회색이 끊김 없이 이어진다 */
.book-tabs { position: sticky; top: 0; z-index: var(--z-sticky); margin-top: 0; background: var(--color-surface-light); }
/* 도서 상세 전용 — 탭이 헤더에 닿으면 로고·검색 줄(GNB 위쪽)만 위로 밀려 숨는다. top 값은 main.js가 재서 인라인으로 넣고, 여기서는 밀리는 속도만 준다 */
body[data-page="book-detail"] .header, body[data-page="book-detail"] .book-tabs { transition: top var(--duration-slow) var(--ease-in-out); }
.book-tabs_inner { display: flex; gap: 0; }
/* 블럭 버튼형 탭 — 한 칸 = 전체 폭의 1/5(탭 수만큼 균등 분할). 밑줄 대신 배경 채움으로 활성 표시, 칸끼리 여백 없이 맞붙는다 */
.book-tabs_link { display: flex; align-items: center; justify-content: center; flex: 1; height: 56px; padding: 0 var(--space-sm); background: var(--color-surface-light); font-size: var(--text-base); font-weight: var(--font-medium); color: var(--color-gray-600); letter-spacing: -0.3px; transition: background var(--duration-base) var(--ease-default), color var(--duration-base) var(--ease-default); }
.book-tabs_link-active { background: var(--color-ink); color: var(--color-canvas); font-weight: var(--font-bold); }
/* 회색 칸끼리 맞닿는 경계에만 연한 구분선(레이아웃에 영향 없는 inset) — 활성(검정) 칸 양옆은 선 없이 */
.book-tabs_link + .book-tabs_link { box-shadow: inset 1px 0 0 var(--color-border); }
.book-tabs_link + .book-tabs_link-active, .book-tabs_link-active + .book-tabs_link { box-shadow: none; }
.book-content { padding-bottom: var(--space-3xl); }
.book-content_block { scroll-margin-top: var(--space-xl); padding: 44px 0; border-bottom: 1px solid var(--color-border); }
.book-content_block:last-child { border-bottom: none; }
.book-content_title { font-size: var(--text-2xl); font-weight: var(--font-bold); color: var(--color-ink); letter-spacing: -0.4px; margin-bottom: var(--space-lg); }
/* 「책 소개」 본문(문단·불릿)만 Pretendard(--font-body) — 긴 서술형 텍스트의 가독성 우선. 섹션 타이틀은 Paperlogy 유지 */
.book-content_text { font-family: var(--font-body); font-size: var(--text-base); line-height: 1.75; color: var(--color-gray-800); letter-spacing: -0.2px; }
.book-content_text + .book-content_text { margin-top: 14px; }
.book-content_text strong { font-weight: var(--font-bold); color: var(--color-ink); }
.book-content_img { display: block; width: 100%; max-width: 700px; height: auto; margin: 28px auto 0; border-radius: var(--radius-md); }
/* 관리자가 넣은 HTML(책 소개·목차·저자 소개)을 감싸는 영역 — 태그 구성이 교재마다 달라 최소한만 잡는다.
   표·이미지가 넓게 들어오는 교재가 있어 가로로 넘치지 않게 막는다 */
.book-content_html { font-size: var(--text-md); line-height: 1.75; color: var(--color-gray-800); letter-spacing: -0.2px; overflow-x: auto; }
/* 책 소개 본문만 읽기 좋은 폭으로 제한 */
#book-intro .book-content_html { max-width: 700px; }
/* 책 소개 안 이미지는 위 텍스트와 띄운다 */
#book-intro .book-content_html img { margin-top: 40px; }
.book-content_html img { max-width: 100%; height: auto; }
.book-content_html table { max-width: 100%; }
.book-content_html strong, .book-content_html b { font-weight: var(--font-bold); color: var(--color-ink); }
.book-content_html p + p { margin-top: 14px; }
.book-content_html ul, .book-content_html ol { padding-left: 18px; list-style: revert; }
.book-content_list { display: flex; flex-direction: column; gap: 10px; margin-top: 18px; }
.book-content_list li { position: relative; padding-left: 18px; font-family: var(--font-body); font-size: var(--text-base); line-height: 1.6; color: var(--color-gray-800); }
.book-content_list li::before { content: ""; position: absolute; left: 2px; top: 9px; width: 5px; height: 5px; background: var(--color-primary); border-radius: 50%; }
.book-content_toc { display: flex; flex-direction: column; }
.book-content_toc li { padding: 6px 0; font-family: var(--font-body); font-size: var(--text-base); font-weight: var(--font-regular); color: var(--color-gray-800); line-height: 1.6; } /* 서체·크기는 「책 소개」 본문과 동일 */
.book-content_author-name { display: block; font-size: var(--text-base); font-weight: var(--font-bold); color: var(--color-ink); margin-bottom: 10px; }
/* 학습자료 다운로드 항목 (학습자료·MP3 전체파일 공용) */
.material-list { display: grid; grid-template-columns: 1fr 1fr; gap: var(--space-md); } /* 웹은 한 줄에 2개 — 모바일은 mobile.css에서 1열 복귀 */
.material-item { display: flex; align-items: center; gap: var(--space-base); padding: 16px 20px; border: 1px solid var(--color-border); border-radius: var(--radius-lg); transition: border-color var(--duration-base) var(--ease-default), background var(--duration-base) var(--ease-default); }
.material-item-lead { margin-bottom: 18px; background: var(--color-surface-cool); border-color: var(--color-border); }
.material-item_icon { display: flex; align-items: center; justify-content: center; width: 48px; height: 48px; flex-shrink: 0; border-radius: var(--radius-lg); }
.material-item_icon svg { width: 23px; height: 23px; stroke-width: 2; }
.material-item_icon-mp3, .material-item_icon-answer, .material-item_icon-voca, .material-item_icon-mock, .material-item_icon-explain, .material-item_icon-model, .material-item_icon-etc { background: var(--color-tint-100); color: var(--color-primary); }
.material-item_info { display: flex; flex-direction: column; gap: 3px; flex: 1; min-width: 0; }
.material-item_name { font-size: var(--text-md); font-weight: var(--font-semibold); color: var(--color-ink); letter-spacing: -0.3px; }
.material-item_meta { font-size: var(--text-xs); color: var(--color-gray-500); }
.material-item_btn { display: inline-flex; align-items: center; gap: 6px; height: 42px; padding: 0 18px; flex-shrink: 0; border: 1px solid var(--color-border-strong); border-radius: var(--radius-md); font-size: var(--text-sm); font-weight: var(--font-semibold); color: var(--color-gray-700); transition: border-color var(--duration-base) var(--ease-default), color var(--duration-base) var(--ease-default), background var(--duration-base) var(--ease-default); }
.material-item_btn svg { width: 16px; height: 16px; }
.material-item_btn-primary { background: var(--color-primary); border-color: var(--color-primary); color: var(--color-canvas); }
/* 링크형 아이템(항목 전체가 클릭 영역) — 버튼은 아이콘 전용 시각 요소(span, aria-hidden), 항목 hover 시 버튼도 강조 */
a.material-item .material-item_btn { width: 42px; padding: 0; justify-content: center; }
a.material-item .material-item_btn svg { width: 18px; height: 18px; }
/* MP3 스트리밍 플레이어(좌) · 트랙 리스트(우) 2단 레이아웃 */
.mp3-layout { display: flex; align-items: flex-start; gap: var(--space-2xl); }
.mp3-layout_stream { flex: 0 0 440px; }
.mp3-layout_list { flex: 1; min-width: 0; display: flex; flex-direction: column; font-family: var(--font-body); }
/* ── 스트리밍 플레이어 ── */
.mp3-player { position: relative; display: flex; flex-direction: column; gap: var(--space-base); padding: var(--space-3xl) var(--space-xl); background: var(--color-surface-cool); border-radius: var(--radius-xl); overflow: hidden; }
.mp3-player::before { content: ""; position: absolute; inset: 0; z-index: 0; background-image: var(--cover-url, none); background-size: cover; background-position: center; filter: blur(20px) brightness(1.12) saturate(1.25); transform: scale(1.3); opacity: 0.3; }
.mp3-player::after { content: ""; position: absolute; inset: 0; z-index: 0; background: linear-gradient(180deg, rgba(255,255,255,0.42), rgba(255,255,255,0.5)); }
.mp3-player > * { position: relative; z-index: 1; }
.mp3-player_cover { max-width: 210px; margin: 0 auto; overflow: hidden; border: 1px solid var(--color-border); border-radius: var(--radius-lg); aspect-ratio: 1 / 1; }
.mp3-player_cover img { display: block; width: 100%; height: 100%; object-fit: cover; object-position: top; }
.mp3-player_head { display: flex; flex-direction: column; align-items: center; gap: var(--space-xs); min-width: 0; text-align: center; }
.mp3-player_title { width: 100%; overflow: hidden; font-size: var(--text-lg); font-weight: var(--font-bold); color: var(--color-ink); letter-spacing: -0.3px; white-space: nowrap; text-overflow: ellipsis; } /* 타이틀 강조 */
.mp3-player_sub { display: -webkit-box; -webkit-box-orient: vertical; -webkit-line-clamp: 2; line-clamp: 2; overflow: hidden; max-width: 100%; font-size: var(--text-3xs); color: var(--color-gray-500); letter-spacing: -0.2px; } /* 카피라이트는 한껏 작고 연하게 */
.mp3-player_progress { display: flex; flex-direction: column; gap: var(--space-sm); }
.mp3-player_seek { -webkit-appearance: none; appearance: none; width: 100%; height: 6px; margin: 0; border-radius: var(--radius-pill); background: linear-gradient(to right, var(--color-primary) var(--seek-fill, 0%), var(--color-gray-400) var(--seek-fill, 0%)); cursor: pointer; }
.mp3-player_seek::-webkit-slider-thumb { -webkit-appearance: none; appearance: none; width: 16px; height: 16px; border-radius: 50%; background: var(--color-canvas); border: 3px solid var(--color-primary); box-shadow: var(--shadow-cover); cursor: pointer; }
.mp3-player_seek::-moz-range-thumb { width: 16px; height: 16px; border-radius: 50%; background: var(--color-canvas); border: 3px solid var(--color-primary); cursor: pointer; }
.mp3-player_seek::-moz-range-track { height: 6px; border-radius: var(--radius-pill); background: transparent; }
.mp3-player_time { display: flex; justify-content: space-between; font-family: "Segoe UI", system-ui, -apple-system, sans-serif; font-size: var(--text-2xs); color: var(--color-gray-700); font-variant-numeric: tabular-nums; }
.mp3-player_controls { display: flex; align-items: center; justify-content: center; gap: var(--space-base); }
.mp3-player_btn { display: flex; align-items: center; justify-content: center; width: 54px; height: 54px; flex-shrink: 0; border-radius: 50%; color: var(--color-gray-700); transition: color var(--duration-base) var(--ease-default), background var(--duration-base) var(--ease-default), transform var(--duration-base) var(--ease-default); }
.mp3-player_btn svg { width: 20px; height: 20px; fill: currentColor; stroke-width: 1.5; }
.mp3-player_btn-jump { position: relative; }
.mp3-player_btn-jump svg { width: 34px; height: 34px; fill: none; }
.mp3-player_btn-jump span { position: absolute; top: 50%; left: 50%; transform: translate(-50%, -50%) scale(0.95); font-size: var(--text-3xs); font-weight: var(--font-bold); line-height: 1; } /* 최소 토큰(11px)보다 작아야 해 scale로 축소 — 참고: 팟캐스트 앱 스킵 버튼 */
.mp3-player_btn-track { width: 54px; height: 54px; color: var(--color-gray-500); }
.mp3-player_btn-track svg { width: 26px; height: 26px; }
.mp3-player_btn-play { width: 60px; height: 60px; background: var(--color-primary); color: var(--color-canvas); }
.mp3-player_btn-play svg { width: 26px; height: 26px; }
/* ── 보조 컨트롤 행 — 배속(좌)·반복(우), 시각 우선순위를 낮춰 메인 행과 분리 ── */
.mp3-player_options { position: relative; display: flex; align-items: center; justify-content: space-between; margin-top: calc(-1 * var(--space-sm)); } /* 배속 팝오버의 absolute 기준 */
.mp3-player_btn-speed { width: auto; height: 48px; padding: 0 16px; border-radius: var(--radius-pill); font-size: var(--text-base); font-weight: var(--font-bold); color: var(--color-gray-500); }
.mp3-player_btn-repeat { width: 48px; height: 48px; color: var(--color-gray-500); }
.mp3-player_btn-repeat svg { width: 26px; height: 26px; fill: none; stroke-width: 2; } /* 볼드 텍스트(1.0x)와 시각 무게 통일 */
.mp3-player_btn-repeat[aria-pressed="true"] { background: var(--color-canvas); color: var(--color-primary); } /* 활성 배경 흰색 */
/* 배속 팝오버 — 0.5~2.0 (0.1 단위 16단계). 클릭 순환으로는 16단계를 오갈 수 없어 슬라이더로 한눈에 보고 고르게 (마크업은 main.js가 동적 생성) */
.mp3-speed-pop { position: absolute; left: 0; bottom: calc(100% + var(--space-sm)); z-index: 5; width: 250px; padding: var(--space-base); background: var(--color-canvas); border: 1px solid var(--color-border); border-radius: var(--radius-lg); box-shadow: var(--shadow-soft); }
.mp3-speed-pop[hidden] { display: none; }
.mp3-speed-pop_value { display: block; margin-bottom: var(--space-md); font-size: var(--text-lg); font-weight: var(--font-bold); color: var(--color-primary); text-align: center; font-variant-numeric: tabular-nums; }
.mp3-speed-pop_slider { -webkit-appearance: none; appearance: none; display: block; width: 100%; height: 6px; margin: 0; border-radius: var(--radius-pill); background: linear-gradient(to right, var(--color-primary) var(--speed-fill, 33.3%), var(--color-gray-400) var(--speed-fill, 33.3%)); cursor: pointer; }
.mp3-speed-pop_slider::-webkit-slider-thumb { -webkit-appearance: none; appearance: none; width: 18px; height: 18px; border-radius: 50%; background: var(--color-canvas); border: 3px solid var(--color-primary); box-shadow: var(--shadow-cover); cursor: pointer; }
.mp3-speed-pop_slider::-moz-range-thumb { width: 18px; height: 18px; border-radius: 50%; background: var(--color-canvas); border: 3px solid var(--color-primary); cursor: pointer; }
.mp3-speed-pop_slider::-moz-range-track { height: 6px; border-radius: var(--radius-pill); background: transparent; }
.mp3-speed-pop_scale { display: flex; justify-content: space-between; margin-top: var(--space-sm); font-size: var(--text-2xs); color: var(--color-gray-500); font-variant-numeric: tabular-nums; }
.mp3-speed-pop_reset { display: block; width: 100%; height: 34px; margin-top: var(--space-md); border: 1px solid var(--color-border-strong); border-radius: var(--radius-md); background: var(--color-canvas); font-size: var(--text-xs); font-weight: var(--font-semibold); color: var(--color-gray-700); cursor: pointer; transition: border-color var(--duration-base) var(--ease-default), color var(--duration-base) var(--ease-default); }
.mp3-speed-pop_reset:hover { border-color: var(--color-primary); color: var(--color-primary); }
.mp3-player audio { display: none; }
/* 모바일 전체화면 플레이어 전용 버튼 — PC에선 기능이 없으므로 숨김 (노출·전체화면 스타일은 mobile.css) */
.mp3-player_expand { display: none; }
.mp3-player_close { display: none; }
/* 시험장 소음 토글 — 카드 우측 상단 고정. 배속 pill과 같은 결, 켜짐은 반복 버튼과 같은 tint+primary 문법 */
/* 소음 토글과 소음 크기 조절을 한 덩어리로 묶는다. 카드 안에서의 자리는 이 상자가 잡는다 */
.mp3-player_noise-box { position: absolute; top: 14px; left: 14px; z-index: 2; display: flex; align-items: center; gap: var(--space-sm); } /* z-index 2 — 교재 표지보다 앞 */
/* 소음 크기 — 소음을 켰을 때만 나온다(끈 상태에서는 조절할 대상이 없다) */
.mp3-player_noise-vol { display: none; width: 76px; height: 32px; accent-color: var(--color-primary); cursor: pointer; }
.mp3-player_noise-box.is-on .mp3-player_noise-vol { display: block; }
.mp3-player_noise { display: inline-flex; align-items: center; gap: 5px; height: 32px; padding: 0 12px; border: 1px solid var(--color-border-strong); border-radius: var(--radius-pill); background: var(--color-canvas); font-size: var(--text-xs); font-weight: var(--font-semibold); color: var(--color-gray-700); transition: border-color var(--duration-base) var(--ease-default), color var(--duration-base) var(--ease-default), background var(--duration-base) var(--ease-default); }
.mp3-player_noise[aria-pressed="true"] { background: var(--color-tint-100); border-color: var(--color-primary); color: var(--color-primary); } /* ON — 본 음원 재생 시 함께 출력 */
/* 소음 출력 중 — 채운 파랑 + 스피커에서 음파 호가 바깥으로 퍼져나가는 애니메이션 + 파동 링 */
.mp3-player_noise.is-sounding { background: var(--color-primary); border-color: var(--color-primary); color: var(--color-canvas); animation: mp3PlayPulse 1.8s ease-out infinite; }
.mp3-player_noise.is-sounding svg path:nth-of-type(2), .mp3-player_noise.is-sounding svg path:nth-of-type(3) { animation: noiseWave 1.2s var(--ease-in-out) infinite; } /* 음파 호 2개만 점멸 (1번 path인 스피커 몸통은 고정) */
.mp3-player_noise.is-sounding svg path:nth-of-type(3) { animation-delay: 0.3s; } /* 안쪽 → 바깥쪽 순차 퍼짐 */
@keyframes noiseWave { 0%, 100% { opacity: 0.15; } 40% { opacity: 1; } }
@media (prefers-reduced-motion: reduce) { .mp3-player_noise.is-sounding, .mp3-player_noise.is-sounding svg path { animation: none; } }
.mp3-player_noise svg { width: 15px; height: 15px; }
/* ── MP3 트랙 리스트 ── */
/* 1뎁스(버전) — 밑줄 탭 전용 행. 주 선택이므로 크고 대비를 강하게, 라벨이 길어 넘치면 한 줄 유지 + 가로 스와이프(스크롤바 숨김) */
.mp3-tabs { min-width: 0; margin-bottom: var(--space-lg); flex-wrap: nowrap; overflow-x: auto; scrollbar-width: none; }
.mp3-tabs::-webkit-scrollbar { display: none; }
.mp3-tabs .cat-tab { flex-shrink: 0; height: 46px; margin-bottom: 0; font-size: var(--text-md); font-weight: var(--font-medium); color: var(--color-gray-700); border-bottom-width: 3px; } /* 스크롤 컨테이너 안이라 -1px 겹침 불필요 */
.mp3-tabs .cat-tab + .cat-tab { margin-left: var(--space-lg); }
.mp3-tabs .cat-tab-active { font-weight: var(--font-bold); color: var(--color-primary); }
/* 음원 버전 탭(.mp3-vtabs)만 — 텍스트 나열이라 항목 경계가 안 보여 라벨 앞에 도트로 구분 (특강 .lecture-tabs·데일리 .daily-tabs는 제외) */
.mp3-vtabs .cat-tab { display: inline-flex; align-items: center; }
.mp3-vtabs .cat-tab::before { content: ''; width: 5px; height: 5px; margin-right: var(--space-sm); border-radius: 50%; background: var(--color-gray-400); flex-shrink: 0; }
.mp3-vtabs .cat-tab-active::before { background: var(--color-primary); }
/* 1뎁스(버전) 드롭다운 — 모바일 전용. 웹·태블릿은 위 밑줄 탭(.mp3-vtabs)이 주인공이라 감춰 둔다 */
.mp3-version-select-wrap { display: none; }
/* 2뎁스(회차) 셀렉트 — 텍스트가 길어질 수 있어 항상 전체폭 */
.mp3-select { width: 100%; max-width: 100%; height: 40px; padding: 0 38px 0 14px; border: 1px solid var(--color-border-strong); border-radius: var(--radius-md); background-color: var(--color-canvas); background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%238b8b8b' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='m6 9 6 6 6-6'/%3E%3C/svg%3E"); background-repeat: no-repeat; background-position: right 12px center; background-size: 18px; font-size: var(--text-sm); font-weight: var(--font-medium); color: var(--color-ink); letter-spacing: -0.2px; appearance: none; -webkit-appearance: none; cursor: pointer; transition: border-color var(--duration-base) var(--ease-default); }
.mp3-select:focus-visible { outline: 2px solid var(--color-primary); outline-offset: 2px; }
.mp3-test-select-wrap { min-width: 0; margin-bottom: var(--space-base); }
.mp3-test-select-wrap[hidden] { display: none; }
/* 2뎁스(회차) 드롭다운은 공통 .sort-select.sort-select-full 사용 — 정의는 「셀렉트 드롭다운 (공통)」 구역 참조 */

/* ── 관련 영상 (카드뉴스 아래) — 텍스트 없이 디자인으로만 구성: 썸네일 블러 배경 무대 카드(MP3 플레이어와 같은 문법) + 중앙 720px 영상 ── */
#card-news { padding-top: 0; } /* 위 섹션 하단 패딩(80px)만 남겨 섹션 간 간격을 절반으로 */
/* 다만 위가 연관 도서가 아니라 교재 상세 본문이면(= 묶어 둔 연관 도서가 없는 교재) 그 섹션은
   하단 패딩이 없어 구매 버튼에 그대로 달라붙는다. 그때만 위 여백을 되살린다.
   연관 도서도 관련 영상도 없어 곧바로 탭이 오는 교재(절판 등)도 마찬가지다 */
.book-detail + #card-news { padding-top: 64px; }
.book-detail + .book-tabs { margin-top: 64px; }

/* ── YBM 단어 시험 출제 마법사 배너 — 기능 제공 교재의 상세에만 마크업 추가 (연관 도서 위 · 가로 풀폭)
      산뜻한 브랜드 블루 틴트 + 블루 포인트, CTA는 배경 없이 텍스트+화살표 ── */
.word-wizard { padding: 40px 0 0; }
.word-wizard_banner { display: flex; align-items: center; gap: var(--space-xl); height: 120px; padding: 0 40px; background: linear-gradient(105deg, var(--color-tint-100), var(--color-canvas) 62%, var(--color-tint-100)); border: 1px solid var(--color-primary); border-radius: var(--radius-xl); transition: transform var(--duration-base) var(--ease-out), box-shadow var(--duration-base) var(--ease-out); }
.word-wizard_icon { display: flex; align-items: center; justify-content: center; width: 56px; height: 56px; flex-shrink: 0; background: var(--color-canvas); border-radius: 50%; box-shadow: var(--shadow-cover); color: var(--color-primary); }
.word-wizard_icon svg { width: 26px; height: 26px; }
.word-wizard_text { display: flex; flex-direction: column; gap: 5px; min-width: 0; }
.word-wizard_title { font-size: var(--text-xl); font-weight: var(--font-bold); color: var(--color-ink); letter-spacing: -0.3px; }
.word-wizard_desc { overflow: hidden; font-size: var(--text-sm); color: var(--color-gray-600); letter-spacing: -0.2px; white-space: nowrap; text-overflow: ellipsis; }
.word-wizard_cta { display: inline-flex; align-items: center; gap: 8px; flex-shrink: 0; margin-left: auto; font-size: var(--text-md); font-weight: var(--font-bold); color: var(--color-primary); letter-spacing: -0.2px; }
.word-wizard_cta svg { width: 18px; height: 18px; transition: transform var(--duration-base) var(--ease-out); }

/* ── 관련 영상 × 카드 뉴스 결합 레이아웃 — media-video/media-cardnews 블록 존재 여부에 따라 :has로 자동 전환 ── */
.media-layout { position: relative; }
.media-layout:has(.media-video):has(.media-cardnews) { display: grid; grid-template-columns: minmax(0, 1fr) minmax(0, 0.45fr); gap: var(--space-2xl); align-items: start; } /* 둘 다 → 좌 영상 · 우 카드뉴스 1장. 0.45 = (9/16)÷(5/4) — 폭이 줄어도 16:9 영상과 4:5 카드의 높이가 항상 같게 유지되는 비율 */
/* 나란 배치일 때: 좌측 영상은 무대(블러) 없이 열을 꽉 채움 */
.media-layout:has(.media-cardnews) .related-video_stage { padding: 0; background: none; border-radius: 0; overflow: visible; }
.media-layout:has(.media-cardnews) .related-video_stage::before { display: none; }
.media-layout:has(.media-cardnews) .related-video_stage::after { display: none; }
.media-layout:has(.media-cardnews) .related-video_screen { width: 100%; }
/* 나란 배치일 때: 카드뉴스는 1장 뷰 + 좌우 화살표(JS 스냅), 드래그 스크롤바는 숨김 */
.cardnews-nav { display: none; }
.media-layout:has(.media-video) .media-cardnews .cardnews-card { flex: 0 0 100%; }
.media-layout:has(.media-video) .media-cardnews .cardnews_track { cursor: default; }
.media-layout:has(.media-video) .media-cardnews .drag-scrollbar { display: none; }
.media-layout:has(.media-video) .media-cardnews .cardnews-nav { display: flex; position: absolute; top: 50%; transform: translateY(-50%); z-index: 2; }
.media-layout:has(.media-video) .media-cardnews .cardnews-nav-prev { left: 12px; }
.media-layout:has(.media-video) .media-cardnews .cardnews-nav-next { right: 12px; }
.cardnews-nav[disabled] { opacity: var(--opacity-disabled); pointer-events: none; }
.related-video_stage { position: relative; padding: 40px 0; border-radius: var(--radius-xl); background: var(--color-surface-cool); overflow: hidden; }
.related-video_stage::before { content: ""; position: absolute; inset: 0; background-image: var(--video-thumb, none); background-size: cover; background-position: center; filter: blur(28px) brightness(1.08) saturate(1.2); transform: scale(1.3); opacity: 0.4; }
.related-video_stage::after { content: ""; position: absolute; inset: 0; background: linear-gradient(180deg, rgba(255,255,255,0.4), rgba(255,255,255,0.5)); }
.related-video_screen { position: relative; z-index: 1; width: min(720px, calc(100% - 48px)); margin: 0 auto 0; border-radius: var(--radius-lg); box-shadow: var(--shadow-cover); }
[data-related-video-screen] iframe { position: absolute; inset: 0; width: 100%; height: 100%; border: 0; display: block; }
#related-video .lecture-card_play { width: 60px; height: 60px; } /* 웹은 플레이 버튼 1.5배 (기본 40px) — 모바일은 mobile.css에서 원복 */
#related-video .lecture-card_play svg { width: 24px; height: 24px; }

/* ── 프로모션 롤링 배너 (MP3 ↔ 무료인강 사이) — 롤링은 공통 rbs 재사용. 배너가 없으면 HTML 블록 삭제,
      있으면 위 섹션(.book-content_block)의 하단 구분선을 :has로 지워 배너 자체가 영역을 구분 ── */
.book-banner { position: relative; margin-top: 44px; border-radius: var(--radius-lg); overflow: hidden; }
.book-banner_ph { display: flex; align-items: center; justify-content: center; height: 160px; background: var(--color-surface); font-size: var(--text-sm); font-weight: var(--font-medium); color: var(--color-gray-500); letter-spacing: -0.2px; }
/* 도트 페이지네이션 (웹 공용) — 도트 자체는 JS가 생성, 위치는 사용처(.book-banner)에서 지정 */
.banner-dots { display: flex; gap: 7px; }
.banner-dot { width: 8px; height: 8px; padding: 0; border: none; border-radius: 50%; background: var(--color-gray-400); cursor: pointer; transition: background var(--duration-base) var(--ease-default); }
.banner-dot.is-active { background: var(--color-gray-700); }
.book-banner .banner-dots { position: absolute; bottom: 14px; left: 50%; transform: translateX(-50%); z-index: 2; } /* 메인 스트립 배너와 동일하게 중앙 하단 */
.book-banner .rbs-slide img { height: auto; } /* 배너 이미지는 원본 비율 유지 — 전역 .rbs-slide img의 고정 높이(360px) 해제 */
.book-content_block:has(+ .book-banner) { border-bottom: none; padding-bottom: 0; } /* 구분선·하단 여백은 배너가 대신 (배너 margin-top 44px) */

/* ── 다운로드 제공 음원 — 항목은 학습자료(.material-item) 공용. 스트리밍(.mp3-layout) 유무와 무관하게 단독 동작하며,
      스트리밍 바로 뒤에 올 때만 인접 형제 셀렉터로 위 여백이 자동으로 붙는다 (구분선 없이 가깝게 — 아래 음원 존재 인지용) ── */
.mp3-extra_title { margin-bottom: var(--space-lg); font-size: var(--text-lg); font-weight: var(--font-medium); color: var(--color-ink); letter-spacing: -0.3px; }
.mp3-layout + .mp3-extra { margin-top: var(--space-xl); }
/* 리스트 2열·아이콘 전용 버튼은 학습자료와 공통(.material-list / a.material-item) — 정의는 「학습자료」 구역 참조 */
/* 리스트 카드 — 헤더 바(트랙 수 + ZIP) + 스크롤 리스트를 한 덩어리로 묶어 좌측 플레이어 카드와 무게를 맞춘다 */
.mp3-list_card { flex: 1; min-height: 0; display: flex; flex-direction: column; border: 1px solid var(--color-border); border-radius: var(--radius-lg); overflow: hidden; }
.mp3-list_bar { display: flex; align-items: center; justify-content: space-between; gap: var(--space-md); flex-shrink: 0; min-height: 52px; padding: 10px 16px; background: var(--color-surface-cool); border-bottom: 1px solid var(--color-border); } /* min-height는 무료인강 헤더 바(.lecture-rows_bar)와 공유하는 기준값 */
.mp3-list_count { flex-shrink: 0; font-size: var(--text-xs); font-weight: var(--font-medium); color: var(--color-gray-600); white-space: nowrap; } /* '총 N 트랙'은 절대 줄바꿈·축소되지 않음 */
.mp3-list_count strong { color: var(--color-primary); font-weight: var(--font-semibold); }
/* ZIP — 헤더 바 우측의 컴팩트 버튼. 라벨이 길면 말줄임 */
.mp3-list_zip { display: inline-flex; align-items: center; gap: 6px; min-width: 0; max-width: 65%; height: 32px; padding: 0 12px; border: 1px solid var(--color-border-strong); border-radius: var(--radius-md); background: var(--color-canvas); font-size: var(--text-2xs); font-weight: var(--font-medium); color: var(--color-gray-700); white-space: nowrap; overflow: hidden; transition: border-color var(--duration-base) var(--ease-default), color var(--duration-base) var(--ease-default); } /* max-width — 긴 버전명은 말줄임, '총 N 트랙'을 밀지 않음 */
.mp3-list_zip span { min-width: 0; overflow: hidden; text-overflow: ellipsis; } /* 라벨이 길면 여기서 말줄임 */
.mp3-list_zip svg { flex-shrink: 0; width: 14px; height: 14px; }
.mp3-list { flex: 1; min-height: 0; display: flex; flex-direction: column; padding: 4px 0; overflow-y: auto; }
.mp3-list::-webkit-scrollbar { width: 6px; }
.mp3-list::-webkit-scrollbar-thumb { background: var(--color-border-strong); border-radius: var(--radius-xs); }
.mp3-track[hidden] { display: none; }
.mp3-track { display: flex; align-items: center; gap: 14px; padding: 12px 16px; border-bottom: 1px solid var(--color-surface); cursor: pointer; transition: background var(--duration-base) var(--ease-default); }
.mp3-track:last-child { border-bottom: none; }
.mp3-track_num { width: 18px; flex-shrink: 0; font-size: var(--text-xs); color: var(--color-gray-400); font-variant-numeric: tabular-nums; }
.mp3-track_play { display: flex; align-items: center; justify-content: center; width: 34px; height: 34px; flex-shrink: 0; border: none; border-radius: 50%; background: var(--color-surface); color: var(--color-gray-400); transition: background var(--duration-base) var(--ease-default), color var(--duration-base) var(--ease-default); }
.mp3-track_play svg { width: 13px; height: 13px; fill: currentColor; stroke-width: 1.5; }
.mp3-track_label { flex: 1; min-width: 0; overflow: hidden; font-size: var(--text-md); font-weight: var(--font-medium); color: var(--color-gray-800); white-space: nowrap; text-overflow: ellipsis; }
.mp3-track_tag { display: none; flex-shrink: 0; padding: 3px 10px; border-radius: var(--radius-xl); background: var(--color-surface); font-size: var(--text-3xs); font-weight: var(--font-medium); color: var(--color-gray-500); }
.mp3-track_tag.is-playing { display: inline-block; background: var(--color-primary); color: var(--color-canvas); }
.mp3-track_meta { flex-shrink: 0; width: 38px; font-size: var(--text-xs); color: var(--color-gray-400); text-align: right; font-variant-numeric: tabular-nums; }
/* 현재 재생 중인 트랙 강조 */
.mp3-track.is-active { background: var(--color-tint-100); box-shadow: inset 3px 0 0 var(--color-primary); } /* 좌측 강조 바로 현재 트랙 표시 강화 */
.mp3-track.is-active .mp3-track_label { color: var(--color-primary); font-weight: var(--font-semibold); }
.mp3-track.is-active .mp3-track_play { background: var(--color-primary); color: var(--color-canvas); }
/* 재생 중(이퀄라이저 노출 상태)일 때 버튼에서 파동이 퍼져나가는 펄스 — '지금 소리가 나오고 있다'는 신호 강화 */
.mp3-track_play:has(.mp3-eq) { animation: mp3PlayPulse 1.8s ease-out infinite; }
@keyframes mp3PlayPulse { 0% { box-shadow: 0 0 0 0 rgba(27,109,218,0.35); } 70% { box-shadow: 0 0 0 9px rgba(27,109,218,0); } 100% { box-shadow: 0 0 0 0 rgba(27,109,218,0); } }
@media (prefers-reduced-motion: reduce) { .mp3-track_play:has(.mp3-eq) { animation: none; } }
/* 재생 중 이퀄라이저 (막대 3개가 scaleY로 줄었다 늘었다) · MP3 트랙 + 무료인강 재생 목록 공용 */
.mp3-eq { display: inline-flex; align-items: flex-end; justify-content: center; gap: 2px; width: 16px; height: 14px; }
.mp3-eq i { display: block; width: 3px; height: 100%; border-radius: var(--radius-pill); background: currentColor; transform-origin: center bottom; animation: mp3EqPlay 0.9s var(--ease-in-out) infinite; } /* 막대를 키워 재생 중 표시를 더 또렷하게 */
.mp3-eq i:nth-child(1) { animation-delay: -0.1s; }
.mp3-eq i:nth-child(2) { animation-delay: -0.55s; }
.mp3-eq i:nth-child(3) { animation-delay: -0.3s; }
@keyframes mp3EqPlay { 0%, 100% { transform: scaleY(0.3); } 50% { transform: scaleY(1); } }
@media (prefers-reduced-motion: reduce) { .mp3-eq i { animation: none; transform: scaleY(0.7); } }
/* 무료인강 리스트 */
.lecture-list { display: flex; flex-direction: column; gap: var(--space-md); }
.lecture-item { display: flex; align-items: center; gap: var(--space-base); padding: 14px 18px; border: 1px solid var(--color-border); border-radius: var(--radius-lg); transition: border-color var(--duration-base) var(--ease-default), background var(--duration-base) var(--ease-default); }
.lecture-item_thumb { display: flex; align-items: center; justify-content: center; width: 56px; height: 42px; flex-shrink: 0; background: var(--color-tint-100); border-radius: var(--radius-md); color: var(--color-primary); }
.lecture-item_thumb svg { width: 20px; height: 20px; fill: var(--color-primary); }
.lecture-item_info { display: flex; flex-direction: column; gap: var(--space-xs); flex: 1; min-width: 0; }
.lecture-item_title { font-size: var(--text-md); font-weight: var(--font-semibold); color: var(--color-ink); letter-spacing: -0.3px; }
.lecture-item_meta { font-size: var(--text-xs); color: var(--color-gray-500); }
.lecture-item_btn { display: inline-flex; align-items: center; gap: 6px; height: 40px; padding: 0 16px; flex-shrink: 0; border: 1px solid var(--color-border-strong); border-radius: var(--radius-md); font-size: var(--text-sm); font-weight: var(--font-semibold); color: var(--color-gray-700); transition: border-color var(--duration-base) var(--ease-default), color var(--duration-base) var(--ease-default); }
.lecture-item_btn svg { width: 15px; height: 15px; }
/* 무료인강 — 대표 썸네일 + 강의 목록 (좌: 대표 영상 / 우: 리스트) */
.lecture-feature { display: grid; grid-template-columns: 440px minmax(0, 1fr); gap: var(--space-2xl); align-items: start; }
.lecture-feature_list { min-width: 0; } /* 오른쪽 컬럼: 1뎁스 탭(.mp3-tabs 공용) + 목록 카드 + 모바일 드롭다운 */
.lecture-feature_title { font-size: var(--text-lg); font-weight: var(--font-semibold); color: var(--color-ink); line-height: 1.4; letter-spacing: -0.3px; margin-bottom: 4px; }
.lecture-feature_meta { font-size: var(--text-xs); color: var(--color-gray-500); }
/* 무료인강 — 왼쪽 인라인 플레이어 (초기 썸네일 → 재생 시 iframe으로 교체) */
.lecture-feature_player { display: flex; flex-direction: column; }
.lecture-feature_player .lecture-card_thumb-wrap { border-radius: var(--radius-xl); } /* 플레이 영역 라운드 = MP3 스트리밍 카드(.mp3-player)와 동일 */
[data-lecture-screen] { background: var(--color-ink); }
[data-lecture-screen] iframe { position: absolute; inset: 0; width: 100%; height: 100%; border: 0; display: block; }
.lecture-feature_poster { position: absolute; inset: 0; display: block; width: 100%; height: 100%; padding: 0; border: none; background: none; cursor: pointer; }
/* 무료인강 — 준비중(유형 ①, 도서 상세). 좌: 임시 썸네일(free-lecture ① 카드와 동일한 .lecture-card_soon 재사용) / 우: 안내 패널 */
.lecture-feature-soon .lecture-feature_title, .lecture-feature-soon .lecture-feature_meta { opacity: 0.65; } /* free-lecture 준비중 카드와 동일한 흐림 처리 */
.lecture-soon { display: flex; flex-direction: column; align-items: center; justify-content: center; gap: var(--space-xs); min-height: 248px; padding: var(--space-2xl); border: 1.5px dashed var(--color-border-strong); border-radius: var(--radius-xl); background: var(--color-surface); text-align: center; } /* min-height 248px = 왼쪽 플레이어(440px, 16:9) 높이와 근사 */
.lecture-soon_icon { display: flex; align-items: center; justify-content: center; width: 52px; height: 52px; margin-bottom: var(--space-sm); border-radius: var(--radius-lg); background: var(--color-canvas); color: var(--color-gray-400); }
.lecture-soon_icon svg { width: 26px; height: 26px; }
.lecture-soon_title { font-size: var(--text-md); font-weight: var(--font-bold); color: var(--color-gray-700); letter-spacing: -0.3px; }
.lecture-soon_desc { font-size: var(--text-sm); color: var(--color-gray-500); letter-spacing: -0.2px; line-height: 1.6; }
/* 무료인강 — 일부 공개(유형 ②, 도서 상세) 안내: .mocktoeic-notice 재사용, 목록 카드 위 여백만 축소 */
.lecture-feature_list .mocktoeic-notice { margin-bottom: var(--space-base); }
/* 무료인강 — 번호형 플레이리스트. MP3 트랙 리스트 카드와 같은 결(헤더 바 + 구분선 행 · 다운로드 없음) */
.lecture-rows_card { border: 1px solid var(--color-border); border-radius: var(--radius-lg); overflow: hidden; font-family: var(--font-body); } /* 폰트를 카드에 걸어 헤더 바까지 MP3와 동일 서체 */
.lecture-rows_bar { display: flex; align-items: center; justify-content: space-between; gap: var(--space-md); min-height: 52px; padding: 10px 16px; background: var(--color-surface-cool); border-bottom: 1px solid var(--color-border); } /* min-height 52px = MP3 헤더 바(패딩 10 + ZIP 32 + 10) */
.lecture-rows_count { font-size: var(--text-xs); font-weight: var(--font-medium); color: var(--color-gray-600); line-height: 32px; } /* line-height 32px = MP3 ZIP 버튼 높이 — 바 총높이를 MP3와 픽셀 단위로 일치 */
.lecture-rows_count strong { color: var(--color-primary); font-weight: var(--font-semibold); }
.lecture-rows { display: flex; flex-direction: column; max-height: 330px; padding: 4px 0; overflow-y: auto; }
.lecture-rows li[hidden] { display: none; } /* 탭(그룹) 전환 시 다른 그룹 행 숨김 */
.lecture-rows::-webkit-scrollbar { width: 6px; }
.lecture-rows::-webkit-scrollbar-thumb { background: var(--color-border-strong); border-radius: var(--radius-xs); }
.lecture-row_link { display: flex; align-items: center; gap: 14px; width: 100%; padding: 12px 16px; border-bottom: 1px solid var(--color-surface); text-align: left; cursor: pointer; transition: background var(--duration-base) var(--ease-default); }
.lecture-rows li:last-child .lecture-row_link { border-bottom: none; }
.lecture-row_num { flex-shrink: 0; width: 18px; font-size: var(--text-xs); color: var(--color-gray-400); font-variant-numeric: tabular-nums; }
.lecture-row_info { display: flex; flex-direction: column; gap: 4px; flex: 1; min-width: 0; }
.lecture-row_title { font-size: var(--text-md); font-weight: var(--font-medium); color: var(--color-gray-800); letter-spacing: -0.3px; overflow: hidden; white-space: nowrap; text-overflow: ellipsis; }
.lecture-row_meta { font-size: var(--text-xs); color: var(--color-gray-500); }
.lecture-row_time { flex-shrink: 0; font-size: var(--text-xs); color: var(--color-gray-400); font-variant-numeric: tabular-nums; }
.lecture-row_play { display: flex; align-items: center; justify-content: center; width: 34px; height: 34px; flex-shrink: 0; border-radius: 50%; background: var(--color-surface); color: var(--color-gray-400); transition: background var(--duration-base) var(--ease-default), color var(--duration-base) var(--ease-default); }
.lecture-row_play svg { width: 13px; height: 13px; fill: currentColor; }
/* 재생 중(활성) 행 — MP3 트랙 활성과 동일한 강조 */
.lecture-row_link-active { background: var(--color-tint-100); box-shadow: inset 3px 0 0 var(--color-primary); } /* 좌측 강조 바 — MP3 리스트와 동일한 재생 중 표시 */
.lecture-row_link-active .lecture-row_title { color: var(--color-primary); font-weight: var(--font-semibold); }
.lecture-row_link-active .lecture-row_play { background: var(--color-primary); color: var(--color-canvas); }
.lecture-row_play:has(.mp3-eq) { animation: mp3PlayPulse 1.8s ease-out infinite; } /* 재생 중 파동 펄스 (키프레임은 MP3와 공유) */
@media (prefers-reduced-motion: reduce) { .lecture-row_play:has(.mp3-eq) { animation: none; } }
.lecture-select-wrap { display: none; } /* 강의 셀렉트 박스: 모바일 전용 (mobile.css에서 노출, PC는 리스트 사용) */

/* ======== Daily Page (데일리 학습) ======== */
/* 목록: 좌 '오늘의 학습' 하이라이트 + 우 매체(1뎁스 밑줄 탭 공용)×시리즈(2뎁스 드롭다운 공용) + 리스트 카드 */
.daily-section { padding-top: 0; }
.daily-layout { display: grid; grid-template-columns: calc((100% - 3 * var(--space-base)) / 4) minmax(0, 1fr); gap: var(--space-base); align-items: start; } /* 좌측 메뉴 폭 = 상단 4카드 중 첫 칸(오늘의 학습)과 동일 */
/* ── 좌측 내비 시안(daily-v1-side-nav.html) 전용 — 사이드 컬럼에서는 배너를 세로 카드형으로 ── */
.daily-side { position: sticky; top: 24px; display: flex; flex-direction: column; gap: var(--space-lg); }
.daily-side .daily-today { flex-direction: column; align-items: flex-start; gap: 0; padding: 28px; }
.daily-side .daily-today_action { align-items: flex-start; margin-top: var(--space-xl); }
/* 오늘의 학습 — 전체폭 가로 배너 (좌: 콘텐츠 / 우: CTA) */
.daily-today { display: flex; align-items: center; justify-content: space-between; gap: var(--space-2xl); padding: 28px 32px; background: linear-gradient(120deg, var(--color-tint-100), var(--color-tint-50)); border: 1px solid var(--color-line); border-radius: var(--radius-xl); }
.daily-today_info { display: flex; flex-direction: column; align-items: flex-start; min-width: 0; }
.daily-today_action { display: flex; flex-direction: column; align-items: center; flex-shrink: 0; }
.daily-today_eyebrow { display: inline-flex; align-items: center; gap: 6px; font-size: var(--text-xs); font-weight: var(--font-bold); color: var(--color-primary); letter-spacing: 1px; }
.daily-today_eyebrow svg { width: 14px; height: 14px; }
.daily-today_date { margin-top: var(--space-md); font-size: var(--text-xs); color: var(--color-gray-500); }
.daily-today_series { font-weight: var(--font-semibold); color: var(--color-gray-700); }
.daily-today_title { margin-top: var(--space-sm); font-size: var(--text-2xl); font-weight: var(--font-bold); color: var(--color-ink); letter-spacing: -0.4px; word-break: keep-all; }
.daily-today_sub { margin-top: 4px; font-size: var(--text-md); color: var(--color-gray-600); }
.daily-today_cta { display: inline-flex; align-items: center; gap: 6px; height: 46px; padding: 0 22px; background: var(--color-primary); border-radius: var(--radius-pill); font-size: var(--text-sm); font-weight: var(--font-semibold); color: var(--color-canvas); transition: background var(--duration-base) var(--ease-default); }
.daily-today_cta svg { width: 16px; height: 16px; }
.daily-today_note { display: inline-flex; align-items: center; gap: 5px; margin-top: var(--space-md); font-size: var(--text-2xs); color: var(--color-gray-500); }
.daily-today_note svg { width: 13px; height: 13px; }
.daily-list-col { min-width: 0; }
/* ── 상단 카드 — 오늘의 학습 1 + 매체 3을 한 줄에 (매체 카드는 아래 목록을 전환하는 버튼) ── */
.media-cards { display: grid; grid-template-columns: repeat(4, minmax(0, 1fr)); gap: var(--space-base); margin-bottom: var(--space-2xl); }
.media-card { display: flex; flex-direction: column; align-items: flex-start; width: 100%; height: 100%; padding: 22px 20px; border: 1px solid var(--color-line); border-radius: var(--radius-xl); text-align: left; transition: transform var(--duration-base) var(--ease-out), box-shadow var(--duration-base) var(--ease-default); }
.media-card_img { width: 88px; height: 88px; margin: 0 auto var(--space-md); object-fit: contain; }
.media-card_label { display: inline-flex; align-items: center; gap: 5px; padding: 3px 12px; border-radius: var(--radius-pill); font-size: var(--text-2xs); font-weight: var(--font-bold); letter-spacing: -0.2px; }
.media-card_label svg { width: 13px; height: 13px; }
.media-card_title { margin-top: var(--space-md); font-size: var(--text-lg); font-weight: var(--font-bold); color: var(--color-ink); letter-spacing: -0.4px; line-height: 1.45; word-break: keep-all; }
.media-card_desc { margin-top: auto; padding-top: var(--space-sm); font-size: var(--text-2xs); color: var(--color-gray-500); }
/* 매체별 액센트 — 조선일보(파랑) · 국방일보(그린) · 통문장(바이올렛) */
.media-card-chosun { background: var(--color-tint-50); }
.media-card-chosun .media-card_label { background: var(--color-canvas); color: var(--color-primary); }
.media-card-chosun .media-card_title-accent { color: var(--color-primary); } /* 타이틀 첫 줄만 매체 블루 강조 */
.media-card-gukbang { background: var(--color-green-bg); }
.media-card-gukbang .media-card_label { background: var(--color-canvas); color: var(--color-green); }
.media-card-gukbang .media-card_title-accent { color: var(--color-green); } /* 타이틀 첫 줄만 매체 그린 강조 */
.media-card-tong { background: var(--color-violet-bg); }
.media-card-tong .media-card_label { background: var(--color-canvas); color: var(--color-violet); }
.media-card-tong .media-card_title-accent { color: var(--color-violet); } /* 타이틀 첫 줄만 매체 바이올렛 강조 */
/* 오늘의 학습 카드 — 상단 첫 칸 */
.media-card-today { background: linear-gradient(150deg, var(--color-tint-100), var(--color-tint-50)); }
.media-card_label-today { background: var(--color-canvas); color: var(--color-primary); letter-spacing: 0; }
.media-card_date { margin-top: var(--space-base); font-size: var(--text-2xs); color: var(--color-gray-500); }
.media-card_date span { font-weight: var(--font-semibold); color: var(--color-gray-700); }
.media-card_expr { margin-top: var(--space-sm); font-size: var(--text-xl); font-weight: var(--font-bold); color: var(--color-ink); letter-spacing: -0.4px; word-break: keep-all; }
.media-card_sub { margin-top: 2px; font-size: var(--text-sm); color: var(--color-gray-600); }
.media-card_cta { display: inline-flex; align-items: center; gap: 6px; margin-top: var(--space-lg); height: 42px; padding: 0 20px; background: var(--color-primary); border-radius: var(--radius-pill); font-size: var(--text-sm); font-weight: var(--font-semibold); color: var(--color-canvas); transition: background var(--duration-base) var(--ease-default); }
.media-card_cta svg { width: 15px; height: 15px; }
.media-card_note { display: inline-flex; align-items: center; gap: 5px; margin-top: var(--space-md); font-size: var(--text-3xs); color: var(--color-gray-500); }
.media-card_note svg { width: 12px; height: 12px; }
/* ── 데일리 진입 화면(/daily-intro) — 매체 3종 카드에 시리즈 목록을 담는다 ── */
.daily-chips { display: none; } /* 2뎁스 시리즈 칩 — 데스크탑은 좌측 전체 시리즈 메뉴가 담당, 태블릿·모바일에서만 노출 */
.daily-list_title { margin-bottom: var(--space-base); font-size: var(--text-2xl); font-weight: var(--font-bold); color: var(--color-ink); letter-spacing: -0.4px; } /* 도서 상세 무료인강 타이틀(.book-content_title)과 동일 크기·굵기 */
.daily-intro-section .media-cards { grid-template-columns: repeat(3, minmax(0, 1fr)); margin-bottom: var(--space-base); }
.daily-intro-section .media-card:hover { transform: none; box-shadow: none; } /* 카드 자체는 링크가 아님 — 리프트는 시리즈 링크에만 */
.daily-intro-section .media-card_label { align-self: center; }
.daily-intro-section .media-card_title { align-self: center; text-align: center; } /* 라벨(가운데) 아래 타이틀도 가운데 — 매체 3종 카드 통일 */
.intro-card_logo { display: block; height: 26px; width: auto; margin: var(--space-md) auto 0; } /* 라벨과 타이틀 사이 매체 로고(가로형 워드마크) */
.intro-card_logo-text { display: block; margin: var(--space-md) auto 0; font-size: var(--text-3xl); font-weight: var(--font-medium); line-height: 26px; color: var(--color-ink); letter-spacing: 0.5px; text-align: center; } /* 로고가 없는 매체 — 텍스트 워드마크, 숫자만 굵게 */
.intro-card_logo-text strong { font-weight: var(--font-bold); }
.daily-intro-section .media-card_desc { align-self: center; }
.intro-card_series { display: flex; flex-direction: column; gap: 6px; width: 100%; margin-top: var(--space-base); }
.intro-card_link { display: flex; align-items: center; justify-content: space-between; gap: var(--space-sm); padding: 14px 16px; background: var(--color-canvas); border-radius: var(--radius-md); box-shadow: var(--shadow-cover); font-size: var(--text-md); font-weight: var(--font-semibold); color: var(--color-ink); letter-spacing: -0.2px; transition: transform var(--duration-base) var(--ease-out), box-shadow var(--duration-base) var(--ease-default), color var(--duration-base) var(--ease-default); }
.intro-card_link svg { width: 15px; height: 15px; flex-shrink: 0; color: var(--color-gray-500); }
.intro-card_link:hover { transform: translateY(-1px); box-shadow: var(--shadow-lift-blue); }
.media-card-chosun .intro-card_link:hover, .media-card-chosun .intro-card_link:hover svg { color: var(--color-primary); } /* 롤오버 시 매체 색 — 조선일보 블루 */
.media-card-gukbang .intro-card_link:hover, .media-card-gukbang .intro-card_link:hover svg { color: var(--color-green); } /* 국방일보 그린 */
.media-card-tong .intro-card_link:hover, .media-card-tong .intro-card_link:hover svg { color: var(--color-violet); } /* 통문장 암기학습 바이올렛 */
.intro-today_heading { display: flex; align-items: center; gap: 8px; margin: var(--space-2xl) 0 var(--space-base); font-size: var(--text-2xl); font-weight: var(--font-bold); color: var(--color-ink); letter-spacing: -0.4px; } /* 배경 박스 밖 소제목 — .daily-list_title과 같은 결 */
.intro-today_heading svg { width: 20px; height: 20px; color: var(--color-primary); }
.daily-banner { display: flex; align-items: center; justify-content: center; min-height: 160px; margin-top: var(--space-2xl); background: var(--color-surface); border-radius: var(--radius-xl); } /* 하단 배너 슬롯 (임시 회색 — 이미지 교체 예정, 모의토익 하단 배너와 동일 규격) */
.daily-banner span { font-size: var(--text-sm); color: var(--color-gray-400); }
.daily-banner a { display: block; width: 100%; } /* 이미지 등록 후: 링크가 슬롯 전체 폭 차지 */
.daily-banner img { display: block; width: 100%; height: auto; border-radius: var(--radius-xl); }
.daily-banner:has(img) { min-height: 0; background: none; } /* 이미지 등록 후에는 임시 회색 박스 스타일 해제 — 이미지 비율 그대로 표시 */
.daily-intro-section .daily-banner { margin-top: 0; margin-bottom: var(--space-2xl); } /* 인트로만 배너가 매체 카드 위 — 여백을 아래로 뒤집는다 (목록 daily.html은 하단 유지) */
.intro-today { padding: 24px; }
.intro-today_list { display: grid; grid-template-columns: repeat(4, minmax(0, 1fr)); gap: var(--space-md); width: 100%; }
.intro-today_item { display: flex; flex-direction: column; gap: 6px; height: 100%; padding: 16px 18px; background: var(--color-canvas); border-radius: var(--radius-lg); transition: transform var(--duration-base) var(--ease-out), box-shadow var(--duration-base) var(--ease-default); }
.intro-today_item:hover { transform: translateY(-1px); box-shadow: var(--shadow-lift-blue); }
.intro-today_media { align-self: flex-start; padding: 2px 9px; border-radius: var(--radius-pill); font-size: var(--text-3xs); font-weight: var(--font-bold); letter-spacing: -0.2px; } /* 매체 구분 배지 — 상단 매체 카드 라벨과 동일 색 */
.intro-today_media-chosun { background: var(--color-tint-100); color: var(--color-primary); }
.intro-today_media-gukbang { background: var(--color-green-bg); color: var(--color-green); }
.intro-today_meta { font-size: var(--text-2xs); color: var(--color-gray-500); }
.intro-today_meta em { font-style: normal; font-weight: var(--font-semibold); color: var(--color-gray-700); }
.intro-today_title { overflow: hidden; white-space: nowrap; text-overflow: ellipsis; font-size: var(--text-md); font-weight: var(--font-bold); color: var(--color-ink); letter-spacing: -0.2px; line-height: 1.5; } /* 제목이 길면 한 줄에서 …으로 줄임 */
/* ── 3안 시안(daily-v3-media-split.html) 전용 — 매체마다 좌: 매체 카드 / 우: 시리즈 카드 ── */
.media-split { display: grid; grid-template-columns: 300px minmax(0, 1fr); gap: var(--space-2xl); align-items: start; margin-top: var(--space-2xl); }
.media-split + .media-split { margin-top: var(--space-3xl); }
.media-split .media-card { position: sticky; top: 24px; height: auto; } /* 시리즈 그리드 높이만큼 늘어나지 않게 */
.media-split_grid { display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); gap: var(--space-base); }
body[data-page="daily-v3"] .daily-today { margin-bottom: var(--space-lg); }
/* 시리즈 카드 — 최신 콘텐츠 3개만 담는 미니멀 카드 */
.series-card { display: flex; flex-direction: column; height: 100%; padding: 22px; background: var(--color-canvas); border: 1px solid var(--color-border); border-radius: var(--radius-lg); transition: border-color var(--duration-base) var(--ease-default), box-shadow var(--duration-base) var(--ease-default); }
.series-card_head { display: flex; align-items: center; justify-content: space-between; gap: var(--space-md); }
.series-card_title { min-width: 0; overflow: hidden; font-size: var(--text-md); font-weight: var(--font-bold); color: var(--color-ink); letter-spacing: -0.3px; white-space: nowrap; text-overflow: ellipsis; }
.series-card_more { display: inline-flex; align-items: center; gap: 1px; flex-shrink: 0; font-size: var(--text-3xs); font-weight: var(--font-medium); color: var(--color-gray-400); transition: color var(--duration-base) var(--ease-default); }
.series-card_more svg { width: 13px; height: 13px; }
.series-card_list { display: flex; flex-direction: column; gap: 2px; margin-top: var(--space-md); }
.series-card_list a { display: block; overflow: hidden; padding: 4px 0; font-size: var(--text-sm); color: var(--color-gray-600); letter-spacing: -0.2px; white-space: nowrap; text-overflow: ellipsis; transition: color var(--duration-base) var(--ease-default); }
body[data-page="daily-v3"] .daily-today { margin-bottom: var(--space-lg); }
/* ── 1안 시안(daily-v1-side-nav.html) 전용 — 좌측 내비 폭·시리즈 개수 표기를 시안 원안대로 유지 ── */
body[data-page="daily-v1"] .daily-layout { grid-template-columns: 360px minmax(0, 1fr); gap: var(--space-2xl); }
body[data-page="daily-v1"] .daily-nav_item { display: flex; align-items: center; justify-content: space-between; gap: 8px; white-space: normal; }
body[data-page="daily-v1"] .daily-nav_item em { flex-shrink: 0; font-size: var(--text-3xs); font-style: normal; color: var(--color-gray-400); font-variant-numeric: tabular-nums; }
body[data-page="daily-v1"] .daily-nav_item[aria-current="true"] em { color: var(--color-primary); }
/* ── 저작권 안내 · 목록 페이지 하단 복귀 링크 ── */
.daily-notice { display: flex; align-items: flex-start; gap: 8px; margin-top: var(--space-4xl); padding: 16px 20px; background: var(--color-surface-light); border-radius: var(--radius-md); font-size: var(--text-2xs); line-height: 1.7; color: var(--color-gray-500); }
.daily-notice svg { width: 14px; height: 14px; flex-shrink: 0; margin-top: 2px; }
.daily-notice a { font-weight: var(--font-semibold); color: var(--color-primary); }
.daily-list_back { margin-top: var(--space-2xl); text-align: center; }
.daily-list_back-link { display: inline-flex; align-items: center; gap: 4px; height: 40px; padding: 0 18px; border: 1px solid var(--color-border-strong); border-radius: var(--radius-pill); font-size: var(--text-sm); font-weight: var(--font-medium); color: var(--color-gray-700); transition: border-color var(--duration-base) var(--ease-default), color var(--duration-base) var(--ease-default); }
.daily-list_back-link svg { width: 15px; height: 15px; }
/* ── 전체 시리즈 내비 — 좌측 내비 시안(daily-v1-side-nav.html) 전용 ── */
.daily-nav { padding: 18px 16px; background: var(--color-canvas); border: 1px solid var(--color-border); border-radius: var(--radius-xl); }
.daily-nav_head { display: flex; align-items: center; gap: 6px; margin-bottom: var(--space-base); padding: 0 10px; font-size: var(--text-sm); font-weight: var(--font-bold); color: var(--color-ink); }
.daily-nav_head span { padding: 1px 7px; border-radius: var(--radius-pill); background: var(--color-tint-100); font-size: var(--text-3xs); font-weight: var(--font-bold); color: var(--color-primary); }
.daily-nav_group + .daily-nav_group { margin-top: var(--space-base); padding-top: var(--space-base); border-top: 1px dashed var(--color-border); }
.daily-nav_group-title { display: flex; align-items: center; gap: 6px; margin-bottom: 6px; padding: 0 10px; font-size: var(--text-xs); font-weight: var(--font-bold); color: var(--color-gray-500); letter-spacing: -0.2px; }
.daily-nav_group-title::before { content: ""; width: 8px; height: 8px; flex-shrink: 0; border-radius: var(--radius-xs); background: var(--color-primary); }
.daily-nav_item { display: block; overflow: hidden; width: 100%; white-space: nowrap; text-overflow: ellipsis; padding: 8px 10px; border-radius: var(--radius-md); font-size: var(--text-sm); font-weight: var(--font-medium); color: var(--color-gray-700); letter-spacing: -0.2px; text-align: left; transition: background var(--duration-base) var(--ease-default), color var(--duration-base) var(--ease-default); }
.daily-nav_item[aria-current="true"] { background: var(--color-tint-50); font-weight: var(--font-semibold); color: var(--color-primary); }
.daily-card { border: 1px solid var(--color-border); border-radius: var(--radius-lg); overflow: hidden; font-family: var(--font-body); }
.daily-card_bar { display: flex; align-items: center; justify-content: space-between; gap: var(--space-md); min-height: 52px; padding: 10px 16px; background: var(--color-surface-cool); border-bottom: 1px solid var(--color-border); }
.daily-card_count { font-size: var(--text-xs); font-weight: var(--font-medium); color: var(--color-gray-600); }
.daily-card_count strong { color: var(--color-ink); font-weight: var(--font-semibold); }
.daily-card_total { font-size: var(--text-xs); color: var(--color-gray-600); }
.daily-card_total strong { color: var(--color-primary); font-weight: var(--font-semibold); }
.daily-row { display: flex; align-items: center; gap: 14px; padding: 14px 16px; border-bottom: 1px solid var(--color-surface); transition: background var(--duration-base) var(--ease-default); }
.daily-list li:last-child .daily-row { border-bottom: none; }
.daily-row_num { width: 40px; flex-shrink: 0; font-size: var(--text-xs); color: var(--color-gray-400); font-variant-numeric: tabular-nums; }
.daily-row_mp3 { display: inline-flex; align-items: center; gap: 4px; flex-shrink: 0; padding: 3px 8px; border-radius: var(--radius-xs); background: var(--color-green-bg); font-size: var(--text-3xs); font-weight: var(--font-bold); color: var(--color-green); }
.daily-row_mp3 svg { width: 11px; height: 11px; }
.daily-row_title { flex: 1; min-width: 0; overflow: hidden; font-size: var(--text-md); font-weight: var(--font-medium); color: var(--color-gray-800); white-space: nowrap; text-overflow: ellipsis; }
.daily-row_badge-new { display: inline-block; width: 16px; height: 16px; margin-left: 6px; border-radius: 50%; background: var(--color-coral); font-size: var(--text-3xs); font-weight: var(--font-bold); color: var(--color-canvas); text-align: center; line-height: 16px; }
.daily-row_views { display: inline-flex; align-items: center; gap: 4px; width: 64px; flex-shrink: 0; font-size: var(--text-xs); color: var(--color-gray-400); font-variant-numeric: tabular-nums; }
.daily-row_views svg { width: 13px; height: 13px; }
.daily-row_date { width: 84px; flex-shrink: 0; font-size: var(--text-xs); color: var(--color-gray-500); text-align: right; font-variant-numeric: tabular-nums; }
.daily-pagination { display: flex; justify-content: center; gap: 6px; margin-top: var(--space-xl); }
/* 상세 — 가독을 위한 좁은 본문 폭 + sticky 음원 + 유연 콘텐츠 */
.daily-detail { padding-top: 24px; }
.daily-detail_container { max-width: 860px; }
.daily-detail_head { padding-bottom: var(--space-xl); border-bottom: 1px solid var(--color-border); }
.daily-detail_series { display: flex; align-items: center; gap: 8px; font-size: var(--text-sm); font-weight: var(--font-medium); color: var(--color-gray-600); }
.daily-detail_series-badge { padding: 3px 9px; border-radius: var(--radius-xs); background: var(--color-tint-100); font-size: var(--text-2xs); font-weight: var(--font-bold); color: var(--color-primary); }
.daily-detail_no { font-style: normal; color: var(--color-gray-400); }
.daily-detail_title { margin-top: var(--space-md); font-size: var(--text-2xl); font-weight: var(--font-bold); color: var(--color-ink); letter-spacing: -0.4px; word-break: keep-all; }
.daily-detail_meta { display: flex; align-items: center; gap: var(--space-base); margin-top: var(--space-md); font-size: var(--text-xs); color: var(--color-gray-500); }
.daily-detail_meta span { display: inline-flex; align-items: center; gap: 5px; }
.daily-detail_meta svg { width: 14px; height: 14px; }
.daily-detail_print { display: inline-flex; align-items: center; gap: 6px; margin-left: auto; height: 36px; padding: 0 14px; border: 1px solid var(--color-border-strong); border-radius: var(--radius-md); font-size: var(--text-xs); font-weight: var(--font-semibold); color: var(--color-gray-700); transition: border-color var(--duration-base) var(--ease-default), color var(--duration-base) var(--ease-default); }
.daily-audio { position: sticky; top: 12px; z-index: 5; display: flex; align-items: center; gap: 14px; margin-top: var(--space-xl); padding: 12px 16px; background: var(--color-surface-cool); border: 1px solid var(--color-border); border-radius: var(--radius-lg); }
.daily-audio_play { display: flex; align-items: center; justify-content: center; width: 44px; height: 44px; flex-shrink: 0; border-radius: 50%; background: var(--color-primary); color: var(--color-canvas); transition: background var(--duration-base) var(--ease-default); }
.daily-audio_play svg { width: 18px; height: 18px; fill: currentColor; stroke-width: 1.5; }
.daily-audio_seek { flex: 1; }
.daily-audio_time { flex-shrink: 0; font-size: var(--text-2xs); color: var(--color-gray-600); font-variant-numeric: tabular-nums; }
/* 재생 속도 — 공통 .sort-select을 플레이어 바 높이에 맞춰 축소 (정의는 「셀렉트 드롭다운 (공통)」 구역 참조) */
.daily-audio_speed { flex-shrink: 0; margin-left: 0; }
.daily-audio_speed .sort-select_trigger { justify-content: space-between; gap: 2px; width: 92px; height: 34px; padding: 0 8px 0 10px; font-size: var(--text-2xs); }
.daily-audio_speed .sort-select_menu { min-width: 104px; max-height: 232px; overflow-y: auto; }
.daily-audio_speed .sort-select_option { display: flex; align-items: center; justify-content: space-between; gap: 12px; padding: 8px 10px; font-size: var(--text-xs); }
.daily-audio_speed .sort-select_option[aria-selected="true"]::after { content: "✓"; font-size: var(--text-xs); } /* 선택된 배속 체크 표시 */
.daily-audio audio { display: none; }
.daily-detail_content { padding: 32px 0 8px; font-family: var(--font-body); }
.daily-detail_content img { display: block; max-width: min(720px, 100%); height: auto; margin: 0 auto var(--space-xl); } /* 실제 콘텐츠(세로형 이미지) 반응형 */
.daily-detail_content iframe { display: block; width: 100%; aspect-ratio: 16 / 9; border: 0; margin-bottom: var(--space-xl); } /* 영상 콘텐츠 반응형 */
.daily-detail_expr { margin-bottom: var(--space-xl); padding: 28px 20px; background: var(--color-tint-50); border: 1px solid var(--color-line); border-radius: var(--radius-lg); text-align: center; }
.daily-detail_expr strong { display: block; font-size: 30px; font-weight: var(--font-bold); color: var(--color-ink); letter-spacing: -0.3px; }
.daily-detail_expr span { display: block; margin-top: 6px; font-size: var(--text-md); color: var(--color-gray-600); }
.daily-detail_text { font-size: var(--text-md); line-height: 1.8; color: var(--color-gray-800); letter-spacing: -0.2px; }
.daily-detail_dialog { display: flex; flex-direction: column; gap: 14px; margin-top: var(--space-xl); }
.daily-detail_dialog li { display: flex; gap: 10px; font-size: var(--text-md); line-height: 1.7; color: var(--color-ink); letter-spacing: -0.2px; }
.daily-detail_dialog li em { display: flex; align-items: center; justify-content: center; width: 24px; height: 24px; flex-shrink: 0; margin-top: 2px; border-radius: 50%; background: var(--color-tint-100); font-size: var(--text-xs); font-weight: var(--font-bold); font-style: normal; color: var(--color-primary); }
.daily-detail_dialog-ko { margin-top: var(--space-lg); padding-top: var(--space-lg); border-top: 1px dashed var(--color-border-strong); }
.daily-detail_dialog-ko li { font-size: var(--text-sm); color: var(--color-gray-600); }
.daily-detail_dialog-ko li em { background: var(--color-surface); color: var(--color-gray-500); }
.daily-detail_voca { margin-top: var(--space-xl); padding: 14px 16px; background: var(--color-surface-light); border-radius: var(--radius-md); font-size: var(--text-sm); line-height: 1.7; color: var(--color-gray-700); }
.daily-detail_voca strong { color: var(--color-ink); font-weight: var(--font-semibold); }
.daily-detail_credit { margin-top: var(--space-md); font-size: var(--text-2xs); color: var(--color-gray-400); text-align: right; }
.daily-detail_banner { display: flex; align-items: center; gap: 12px; margin-top: var(--space-xl); padding: 16px 20px; background: var(--color-dark-surface); border-radius: var(--radius-lg); transition: transform var(--duration-base) var(--ease-out); }
.daily-detail_banner-label { flex-shrink: 0; padding: 4px 10px; border-radius: var(--radius-xs); background: var(--color-coral); font-size: var(--text-2xs); font-weight: var(--font-bold); color: var(--color-canvas); }
.daily-detail_banner-text { min-width: 0; font-size: var(--text-sm); color: var(--color-dark-text-sub); }
.daily-detail_banner-text strong { color: var(--color-dark-text); font-weight: var(--font-bold); }
.daily-detail_banner svg { width: 16px; height: 16px; margin-left: auto; flex-shrink: 0; color: var(--color-dark-text-sub); }
.daily-detail_nav { display: flex; align-items: center; gap: 12px; margin-top: 40px; padding-top: var(--space-xl); border-top: 1px solid var(--color-border); }
.daily-detail_nav-link { display: flex; align-items: center; gap: 10px; flex: 1; min-width: 0; color: var(--color-gray-700); transition: color var(--duration-base) var(--ease-default); }
.daily-detail_nav-link svg { width: 18px; height: 18px; flex-shrink: 0; }
/* 앞뒤 글이 없을 때 — 같은 자리를 지키되 누를 수 없다는 것이 보이게 */
.daily-detail_nav-link.is-disabled { color: var(--color-gray-400); cursor: default; }
.daily-detail_nav-link.is-disabled svg { color: var(--color-gray-300); }
/* 본문에 영상·자료가 함께 오는 글이 있다 */
.daily-detail_video { display: block; width: 100%; margin: var(--space-lg) 0; border-radius: var(--radius-md); background: var(--color-ink); }
.daily-detail_file { margin-top: var(--space-lg); }
.daily-detail_file a { display: inline-flex; align-items: center; gap: 6px; font-size: var(--text-md); font-weight: var(--font-semibold); color: var(--color-primary); }
.daily-detail_file svg { width: 16px; height: 16px; }
.daily-detail_nav-link span { display: flex; flex-direction: column; gap: 2px; min-width: 0; font-size: var(--text-sm); font-weight: var(--font-medium); }
.daily-detail_nav-link em { font-style: normal; font-size: var(--text-2xs); color: var(--color-gray-400); }
.daily-detail_nav-link-next { justify-content: flex-end; text-align: right; }
.daily-detail_nav-list { display: inline-flex; align-items: center; gap: 6px; flex-shrink: 0; height: 40px; padding: 0 16px; border: 1px solid var(--color-border-strong); border-radius: var(--radius-md); font-size: var(--text-sm); font-weight: var(--font-semibold); color: var(--color-gray-700); transition: border-color var(--duration-base) var(--ease-default), color var(--duration-base) var(--ease-default); }
.daily-detail_nav-list svg { width: 15px; height: 15px; }
/* 인쇄 — 학습 본문만 종이에: 헤더·푸터·오디오·배너·내비·플로팅 등 화면 요소 숨김 */
@media print {
  body[data-page="daily-detail"] header.header, body[data-page="daily-detail"] footer.footer, body[data-page="daily-detail"] .breadcrumb, body[data-page="daily-detail"] .daily-audio, body[data-page="daily-detail"] .daily-detail_print, body[data-page="daily-detail"] .daily-detail_banner, body[data-page="daily-detail"] .daily-detail_nav, body[data-page="daily-detail"] .scroll-top, body[data-page="daily-detail"] .daily-detail_hit, body[data-page="daily-detail"] .corner-mascot, body[data-page="daily-detail"] .mascot-hit, body[data-page="daily-detail"] .pick-veil { display: none; }
  body[data-page="daily-detail"] { padding-top: 0; } /* 화면용 고정 헤더 자리(--header-h)를 비워 둔 여백 제거 — 남아 있으면 본문 이미지가 2쪽으로 밀린다 */
  body[data-page="daily-detail"] .daily-detail { padding-top: 0; }
  body[data-page="daily-detail"] .daily-detail_content { padding: 16px 0 0; }
  body[data-page="daily-detail"] .daily-detail_content img { max-height: 200mm; width: auto; margin: 0 auto; } /* 세로로 긴 콘텐츠 이미지가 다음 쪽으로 통째로 밀려 1쪽이 비지 않게 — 헤드와 함께 한 쪽에 수납 */
}

/* ======== Lounge · Free Lecture Page ======== */
/* 탭은 토익 페이지(.books-section)와 동일 스타일 공유, 그리드·카드는 메인 공용 재사용 */
.lounge-section, .lecture-page-section { padding-top: 0; } /* 히어로 바로 아래 탭 */

/* ── SNS 라운지 캐주얼 히어로 — 파스텔 그라데이션 + 떠다니는 공부 인증 말풍선 ── */
/* 배경은 브레드크럼까지 감싼 .lounge-top 이 담당 — 히어로에만 주면 브레드크럼 아래에서 색이 뚝 끊겨 잘려 보인다.
   배경 두 겹을 얹는다(먼저 쓴 것이 위). ① 아래로 갈수록 본문 흰색으로 녹아드는 세로 레이어 —
   이게 없으면 색이 끝나는 자리에 가로선이 생겨 바로 아래 탭 버튼이 잘린 것처럼 보인다. ② 원래의 파스텔 대각선 그라데이션 */
.lounge-top { background: linear-gradient(to bottom, transparent 40%, var(--color-canvas)), linear-gradient(135deg, var(--color-tint-100), var(--color-canvas) 55%, var(--color-tint-50)); }
.lounge-hero { position: relative; padding: 44px 0 56px; overflow: hidden; } /* 위 여백은 브레드크럼이 이미 벌려 주므로 64→44 */
.lounge-hero_inner { position: relative; }
.lounge-hero_eyebrow { margin-bottom: var(--space-md); font-size: var(--text-xs); font-weight: var(--font-bold); color: var(--color-primary); letter-spacing: 4px; animation: heroFadeUp 0.7s var(--ease-out) both; }
.lounge-hero_title { font-size: 40px; font-weight: var(--font-bold); color: var(--color-ink); letter-spacing: -0.8px; animation: heroFadeUp 0.7s var(--ease-out) 0.1s both; }
.lounge-hero_desc { margin-top: var(--space-base); font-size: var(--text-md); color: var(--color-gray-600); letter-spacing: -0.2px; animation: heroFadeUp 0.7s var(--ease-out) 0.2s both; }
/* 말풍선 무대 — 절대배치 말풍선의 기준을 화면 전체가 아닌 콘텐츠 영역으로 좁힌다.
   기준이 없으면 .lounge-hero(화면 전폭)에 붙어 넓은 모니터에서 말풍선이 콘텐츠 밖 여백까지 밀려난다.
   1240px = .container 최대폭 1320px − 좌우 패딩 40px×2 (컨테이너 안쪽 실제 콘텐츠 폭) */
.lounge-hero_bubbles { position: absolute; top: 0; left: 0; right: 0; height: 100%; width: 100%; max-width: 1240px; margin: 0 auto; }
.lounge-hero_bubble { position: absolute; padding: 10px 16px; background: var(--color-canvas); border: 1px solid var(--color-line); border-radius: 18px 18px 18px 4px; box-shadow: var(--shadow-soft); font-size: var(--text-xs); font-weight: var(--font-medium); color: var(--color-gray-800); letter-spacing: -0.2px; animation: bubbleFloat 6s var(--ease-in-out) infinite alternate; }
.lounge-hero_bubble-1 { top: 24%; right: 6%; }
.lounge-hero_bubble-2 { top: 58%; right: 15%; animation-delay: -2s; }
.lounge-hero_bubble-3 { top: 16%; right: 24%; animation-delay: -4s; border-radius: 18px 18px 4px 18px; }
.lounge-hero_bubble-4 { top: 66%; right: 2%; animation-delay: -3s; border-radius: 18px 18px 4px 18px; }
@keyframes bubbleFloat { from { transform: translateY(0); } to { transform: translateY(-14px); } }
@media (prefers-reduced-motion: reduce) { .lounge-hero_bubble, .lounge-hero_eyebrow, .lounge-hero_title, .lounge-hero_desc { animation: none; } }
/* ── 라운지 메이슨리 그리드 (벽돌 쌓기) ──
   채널마다 썸네일 비율이 다르다: 인스타 4:5 세로 · 블로그 세로형 · 유튜브·쇼츠 16:9.
   하나의 비율로 크롭하면 세로 이미지가 잘리므로, 이미지는 자기 비율대로 두고 카드 높이가 제각각이 되게 한 뒤
   행 높이를 1px로 잘게 나눠 두고 main.js가 카드 실제 높이만큼 행을 차지시켜 빈틈 없이 채운다.
   세로 간격은 row-gap 대신 카드 아래 여백으로 만든다 — 행이 1px 단위라 row-gap이 있으면 계산이 어긋난다.
   revert: 공통 규칙의 4:3 고정을 브라우저 기본값으로 되돌린다. 그냥 auto 로 두면 이미지가 도착하기 전
   높이를 0으로 잡아 화면이 출렁이지만, revert 는 img 의 width·height 속성값을 임시 비율로 써서 자리를 미리 잡는다. */
body[data-page="lounge"] .community-card_img { aspect-ratio: revert; }
body[data-page="lounge"] .community-grid { grid-auto-rows: 1px; row-gap: 0; align-items: start; }
body[data-page="lounge"] .community-card { margin-bottom: var(--space-xl); }
/* 유튜브·쇼츠만 예외 — 썸네일 파일(hqdefault.jpg)이 4:3(480×360)인데 그 안에 16:9 영상이 상하 검은 띠와 함께 들어 있다.
   원본 비율로 두면 검은 띠가 그대로 보이므로 16:9로 잘라 띠만 걷어낸다 (영상 화면 자체는 잘리지 않는다) */
body[data-page="lounge"] .community-card:has(.community-card_badge-yt) .community-card_img { aspect-ratio: 16 / 9; }
/* 스티커 — 이벤트·인기 표시 */
.community-card_sticker { position: absolute; top: 12px; right: 12px; padding: 6px 12px; background: var(--color-canvas); border-radius: var(--radius-pill); box-shadow: var(--shadow-soft); font-size: var(--text-2xs); font-weight: var(--font-bold); color: var(--color-ink); letter-spacing: -0.2px; }

/* ── 무료인강 다크 히어로 (넷플릭스 컨셉) — 페이지 전체 다크, 글로우 배경 + 순차 등장 + 대표 강의 3편 ── */
body[data-page="free-lecture"] { background: var(--color-dark-bg); }
.lecture-hero { position: relative; padding: 72px 0 56px; overflow: hidden; }
.lecture-hero_bg { position: absolute; inset: 0; }
.lecture-hero_photo { position: absolute; inset: 0; width: 100%; height: 100%; object-fit: cover; opacity: 0.18; } /* 다크 배경 위에 연하게 — 텍스트 가독성 유지 */
.lecture-hero_bg::after { content: ""; position: absolute; inset: 0; background: linear-gradient(to bottom, transparent 40%, var(--color-dark-bg) 96%); } /* 사진·글로우를 하단에서 페이지 배경색으로 덮어 다음 섹션과 경계 없이 연결 */
.lecture-hero_glow { position: absolute; width: 480px; height: 480px; border-radius: 50%; filter: blur(90px); opacity: 0.32; animation: heroGlowFloat 14s var(--ease-in-out) infinite alternate; }
.lecture-hero_glow-1 { top: -180px; left: -120px; background: var(--color-primary); }
.lecture-hero_glow-2 { top: -120px; right: -140px; background: var(--color-violet); animation-delay: -5s; }
.lecture-hero_glow-3 { bottom: -280px; left: 34%; background: var(--color-primary-pressed); animation-delay: -9s; }
.lecture-hero_inner { position: relative; }
.lecture-hero_eyebrow { margin-bottom: var(--space-md); font-size: var(--text-xs); font-weight: var(--font-bold); color: var(--color-dark-text-sub); letter-spacing: 4px; animation: heroFadeUp 0.7s var(--ease-out) both; }
.lecture-hero_title { font-size: 46px; font-weight: var(--font-bold); color: var(--color-dark-text); line-height: 1.25; letter-spacing: -1px; animation: heroFadeUp 0.7s var(--ease-out) 0.1s both; }
.lecture-hero_desc { margin-top: var(--space-base); font-size: var(--text-md); color: var(--color-dark-text-sub); letter-spacing: -0.2px; animation: heroFadeUp 0.7s var(--ease-out) 0.2s both; }
.lecture-hero_teachers { position: absolute; top: -50px; right: -2px; width: 580px; height: auto; animation: heroFadeUp 0.7s var(--ease-out) 0.25s both; pointer-events: none; } /* 히어로 우측 상단 강사 이미지(장식) — 뒤따르는 슬라이더(스태킹 컨텍스트)가 위에 그려져 하단이 자연스럽게 카드 뒤로 숨음 · 모바일은 mobile.css에서 숨김 */
/* ── 히어로 재생목록 슬라이더 — 슬라이드 1장 = 교재 정보(좌) + 강의 영상(우), 화살표·도트 이동 ── */
.lecture-hero_slider { position: relative; margin-top: 44px; animation: heroFadeUp 0.7s var(--ease-out) 0.35s both; }
.lecture-hero_viewport { overflow: hidden; border-radius: var(--radius-xl); }
.lecture-hero_track { display: flex; transition: transform 0.5s var(--ease-in-out); }
.lecture-hero_slide { display: grid; grid-template-columns: 1.1fr 0.9fr; gap: var(--space-2xl); align-items: center; flex: 0 0 100%; min-width: 0; padding: var(--space-2xl); background: #1a233880; border-radius: var(--radius-xl); } /* 배경 = dark-surface의 16% 투명 버전 — 뒤 히어로 사진이 비치는 유리 느낌 */
/* ── 히어로 슬라이드 풀와이드 — 영상 중심(영상 위 · 교재 정보 스트립 아래) ── */
.lecture-hero_slide-wide { display: flex; flex-direction: column; align-items: stretch; gap: var(--space-base); padding: var(--space-lg); }
.lecture-hero_stage { position: relative; display: block; width: 100%; padding: 0; aspect-ratio: 16 / 9; border-radius: var(--radius-lg); overflow: hidden; background: var(--color-dark-bg); box-shadow: var(--shadow-dark); } /* width/padding: 버튼 트리거(팝업 재생)로 쓰일 때 대비 */
.lecture-hero_stage img { width: 100%; height: 100%; object-fit: cover; transition: transform var(--duration-base) var(--ease-out); }
.lecture-hero_strip { display: flex; align-items: center; gap: var(--space-base); min-width: 0; }
.lecture-hero_minicover { flex-shrink: 0; }
.lecture-hero_minicover img { display: block; width: 56px; height: auto; aspect-ratio: 3 / 4; object-fit: cover; border-radius: var(--radius-sm); box-shadow: var(--shadow-dark); } /* CDN 표지 원본비 정규화 — 3:4 통일 */
.lecture-hero_stripinfo { display: flex; flex-direction: column; gap: 4px; min-width: 0; }
.lecture-hero_stripname { overflow: hidden; font-size: var(--text-md); font-weight: var(--font-bold); color: var(--color-dark-text); letter-spacing: -0.3px; white-space: nowrap; text-overflow: ellipsis; transition: color var(--duration-base) var(--ease-default); }
.lecture-hero_stripmeta { overflow: hidden; font-size: var(--text-xs); color: var(--color-dark-text-sub); white-space: nowrap; text-overflow: ellipsis; }
.lecture-hero_stripprice { margin-left: auto; flex-shrink: 0; font-size: var(--text-md); font-weight: var(--font-bold); color: var(--color-dark-text); }
/* 절판 교재 — 표지를 눌러 두고 제목·가격 톤을 낮춘다. 강의는 그대로 볼 수 있으므로 강의 쪽은 손대지 않는다 */
.lecture-hero_strip-sold .lecture-hero_minicover img { opacity: 0.45; }
.lecture-hero_strip-sold .lecture-hero_stripname { color: var(--color-gray-500); }
.lecture-hero_strip-sold .lecture-hero_stripmeta { color: var(--color-gray-400); }
.lecture-hero_strip-sold .lecture-hero_stripprice { font-size: var(--text-sm); color: var(--color-gray-500); }
/* ── 히어로 peek 캐러셀(코버플로우) — 뷰포트를 61%로 줄여 양옆 이웃 노출, 이웃은 scale(0.7)+translateX(±20%)로 중앙 카드 '뒤'에 겹침(여백 없음). JS 이동량(트랙 폭 100%)=슬라이드 폭이라 이동 로직 수정 불필요, 화면 밖은 .lecture-hero의 overflow:hidden이 클리핑 ── */
.lecture-hero_slider-peek .lecture-hero_viewport { width: 45%; margin: 0 auto; overflow: visible; } /* 타이틀 대비 영상이 과하지 않게 축소 (태블릿은 61% 유지) */
.lecture-hero_slider-peek .lecture-hero_slide-wide { transition: transform var(--duration-base) var(--ease-out), opacity var(--duration-base) var(--ease-out); }
.lecture-hero_slider-peek .lecture-hero_slide-wide:not(.is-active) { opacity: 0; transform: translateX(-20%) scale(0.7); } /* 비활성 기본은 숨김 — 넓은 화면에서 양끝 복제 슬라이드가 비치는 것 방지 (이웃만 아래 규칙으로 노출) */
.lecture-hero_slider-peek .lecture-hero_slide-wide:not(.is-active):has(~ .lecture-hero_slide-wide.is-active:not([aria-hidden])) { transform: translateX(20%) scale(0.7); } /* 왼쪽 이웃(진짜 활성 앞) — 복제 활성은 anchor 제외 */
.lecture-hero_slider-peek .lecture-hero_slide-wide.is-active:not([aria-hidden]) ~ .lecture-hero_slide-wide:not(.is-active) { transform: translateX(-20%) scale(0.7); } /* 오른쪽 이웃 — 뒤쪽 복제 활성 때문에 :has에 걸려도 이 규칙이 이김 */
.lecture-hero_slider-peek .lecture-hero_slide-wide.is-active:not([aria-hidden]) + .lecture-hero_slide-wide:not(.is-active),
.lecture-hero_slider-peek .lecture-hero_slide-wide:not(.is-active):has(+ .lecture-hero_slide-wide.is-active:not([aria-hidden])) { opacity: 0.85; } /* 진짜 활성 카드(복제 제외)의 바로 양옆 이웃만 노출 — 0.85 = 뒤 배경이 과하게 비치지 않는 선 */
.lecture-hero_slider-peek .lecture-hero_slide-wide.is-active { z-index: 1; opacity: 1; background: var(--color-dark-surface); } /* 중앙 카드가 항상 겹침 위 · 배경은 불투명 — 유리 배경이면 뒤에 겹친 이웃 카드가 비침 */
.lecture-hero_slider-peek .lecture-hero_slide-wide.is-far { opacity: 0; visibility: hidden; } /* 중앙에서 두 칸 이상 떨어진 슬라이드 — 강의가 2개뿐이면 루프용 복제가 화면 양끝에 비치므로 JS가 붙인 is-far로 가린다 */
.lecture-hero_slider-peek .lecture-hero_slide-wide.is-active .lecture-card_play { width: 72px; height: 72px; } /* 재생 버튼 — 커진 중앙 영상에 맞게 확대 (기본 40px) */
.lecture-hero_slider-peek .lecture-hero_slide-wide.is-active .lecture-card_play svg { width: 28px; height: 28px; margin-left: 3px; }
/* (이동 화살표 오버레이 제거 — 우측 하단 mbs 필 컨트롤로 대체) */
/* (도트 페이지네이션 제거 — 우측 하단 mbs 필 카운터로 대체) */
/* ── 무료인강 영상 레이어팝업 — 유튜브 재생목록 임베드로 팝업 안에서 1~10강 연속 시청 ── */
.video-modal { position: fixed; inset: 0; z-index: var(--z-modal); display: flex; align-items: center; justify-content: center; }
.video-modal[hidden] { display: none; }
.video-modal_dim { position: absolute; inset: 0; background: var(--color-overlay); animation: bannerModalFade 200ms ease-out; }
.video-modal_panel { position: relative; width: min(1240px, calc(100% - 48px), calc((100vh - 140px) * 16 / 9 + 336px)); animation: bannerModalPop 200ms ease-out; } /* 세 번째 항목: 낮은 창에서도 헤드+16:9 프레임이 화면 안에 들어오게 높이 기준으로도 제한(+336px = 목록 패널 320 + 간격 16) */
.video-modal_body { display: grid; grid-template-columns: 1fr 320px; gap: var(--space-base); }
.video-modal_body.is-single { grid-template-columns: 1fr; } /* 재생목록 데이터가 없는 영상 — 플레이어만 풀폭 */
.video-modal_list-wrap { position: relative; } /* 목록을 absolute로 띄워 행 높이는 플레이어(16:9)가 결정 — 목록이 길어도 팝업이 안 커짐 */
.video-modal_list-inner { position: absolute; inset: 0; display: flex; flex-direction: column; overflow: hidden; background: var(--color-dark-surface); border-radius: var(--radius-lg); box-shadow: var(--shadow-dark); }
.video-modal_list-head { display: flex; align-items: baseline; justify-content: space-between; gap: var(--space-sm); flex-shrink: 0; padding: var(--space-md) var(--space-base); border-bottom: 1px solid var(--color-dark-line); }
.video-modal_list-label { font-size: var(--text-sm); font-weight: var(--font-bold); color: var(--color-dark-text); letter-spacing: -0.2px; }
.video-modal_list-count { font-size: var(--text-2xs); color: var(--color-dark-text-sub); }
.video-modal_list-notice { display: flex; align-items: flex-start; gap: var(--space-sm); flex-shrink: 0; padding: var(--space-md) var(--space-base); border-bottom: 1px solid var(--color-dark-line); border-left: 3px solid var(--color-amber); background: var(--color-amber-dark-bg); } /* 일부 공개(케이스 ②) 안내 — 목록 헤드 바로 아래 고정, 앰버 강조로 눈에 띄게 */
.video-modal_list-notice[hidden] { display: none; }
.video-modal_list-notice svg { flex-shrink: 0; width: 17px; height: 17px; margin-top: 1px; color: var(--color-amber); }
.video-modal_list-notice-text { font-size: var(--text-2xs); color: var(--color-dark-text-sub); line-height: 1.5; letter-spacing: -0.2px; }
.video-modal_list-notice strong { display: block; margin-bottom: 3px; font-size: var(--text-sm); font-weight: var(--font-bold); color: var(--color-amber); }
.video-modal_list { display: flex; flex: 1; flex-direction: column; gap: 2px; padding: var(--space-sm); overflow-y: auto; }
.video-modal_list::-webkit-scrollbar { width: 6px; } /* 다크 패널에 맞춘 슬림 스크롤바 */
.video-modal_list::-webkit-scrollbar-thumb { background: var(--color-dark-line); border-radius: 3px; }
.video-modal_list::-webkit-scrollbar-track { background: transparent; }
.video-modal_item { display: flex; align-items: center; gap: var(--space-sm); width: 100%; padding: var(--space-sm); border-radius: var(--radius-md); text-align: left; transition: background var(--duration-base) var(--ease-default); }
.video-modal_item.is-active { background: var(--color-dark-bg); }
.video-modal_item-num { position: relative; flex-shrink: 0; width: 22px; text-align: center; }
.video-modal_item-idx { font-size: var(--text-xs); font-weight: var(--font-semibold); color: var(--color-dark-text-sub); }
.video-modal_item.is-active .video-modal_item-idx { display: none; } /* 재생 중인 강은 번호 대신 이퀄라이저 */
.video-modal_item-eq { display: none; align-items: flex-end; justify-content: center; gap: 2px; height: 14px; }
.video-modal_item.is-active .video-modal_item-eq { display: flex; }
.video-modal_item-eq span { width: 3px; height: 100%; border-radius: 1px; background: var(--color-primary); transform-origin: bottom; animation: videoEqBar 0.9s var(--ease-in-out) infinite alternate; }
.video-modal_item-eq span:nth-child(2) { animation-delay: -0.3s; }
.video-modal_item-eq span:nth-child(3) { animation-delay: -0.6s; }
.video-modal_item-thumb { position: relative; flex-shrink: 0; width: 84px; aspect-ratio: 16 / 9; border-radius: var(--radius-sm); overflow: hidden; background: var(--color-dark-bg); }
.video-modal_item-thumb img { width: 100%; height: 100%; object-fit: cover; }
.video-modal_item.is-active .video-modal_item-thumb { outline: 2px solid var(--color-primary); outline-offset: -2px; } /* 재생 중 썸네일 링 */
.video-modal_item-dur { position: absolute; right: 3px; bottom: 3px; padding: 1px 5px; border-radius: var(--radius-sm); background: rgba(0,0,0,0.75); font-size: var(--text-3xs); font-weight: var(--font-medium); color: var(--color-canvas); }
.video-modal_item-title { display: -webkit-box; -webkit-box-orient: vertical; -webkit-line-clamp: 2; line-clamp: 2; flex: 1; min-width: 0; overflow: hidden; font-size: var(--text-xs); color: var(--color-dark-text); line-height: 1.45; letter-spacing: -0.2px; }
.video-modal_item.is-active .video-modal_item-title { font-weight: var(--font-semibold); color: var(--color-primary); }
@keyframes videoEqBar { from { transform: scaleY(0.3); } to { transform: scaleY(1); } }
@media (prefers-reduced-motion: reduce) { .video-modal_item-eq span { animation: none; } }
.video-modal_head { display: flex; align-items: center; justify-content: space-between; gap: var(--space-base); margin-bottom: var(--space-md); }
.video-modal_title { overflow: hidden; font-size: var(--text-lg); font-weight: var(--font-bold); color: var(--color-dark-text); white-space: nowrap; text-overflow: ellipsis; } /* 딤(어두운 배경) 위 텍스트 */
.video-modal_close { display: flex; align-items: center; justify-content: center; flex-shrink: 0; width: 40px; height: 40px; border-radius: 50%; background: rgba(0,0,0,0.45); color: var(--color-canvas); transition: background var(--duration-base) var(--ease-default); }
.video-modal_close svg { width: 20px; height: 20px; }
.video-modal_frame { aspect-ratio: 16 / 9; border-radius: var(--radius-lg); overflow: hidden; background: var(--color-dark-bg); box-shadow: var(--shadow-dark); }
.video-modal_frame iframe, .video-modal_frame video { width: 100%; height: 100%; border: 0; }
body.video-modal-lock { overflow: hidden; }
@keyframes heroFadeUp { from { opacity: 0; transform: translateY(18px); } to { opacity: 1; transform: none; } }
@keyframes heroGlowFloat { from { transform: translate(0, 0) scale(1); } to { transform: translate(60px, 40px) scale(1.15); } }
@media (prefers-reduced-motion: reduce) { .lecture-hero_glow, .lecture-hero_eyebrow, .lecture-hero_title, .lecture-hero_desc, .lecture-hero_slider { animation: none; } }
/* 다크 페이지 리스트 오버라이드 — 탭·카드 텍스트를 다크 위 가독 색으로 */
body[data-page="free-lecture"] .cat-tab { background: transparent; border-color: var(--color-dark-line); color: var(--color-dark-text-sub); }
body[data-page="free-lecture"] .cat-tab-active { background: var(--color-primary); border-color: var(--color-primary); color: var(--color-canvas); font-weight: var(--font-semibold); }
body[data-page="free-lecture"] .lecture-card_title { color: var(--color-dark-text); }
body[data-page="free-lecture"] .lecture-card_instructor { color: var(--color-dark-text-sub); }
body[data-page="free-lecture"] .lecture-card_thumb-wrap { background: var(--color-dark-surface); }
/* ── 재생목록 카드 표현 — 카드 1장 = 교재 1권의 강의 재생목록. 썸네일 위 스택 바로 "여러 편 묶음"을 암시 ── */
body[data-page="free-lecture"] .lecture-card { position: relative; padding-top: 5px; }
.lecture-card_overlay { position: absolute; inset: 0; z-index: 1; border-radius: var(--radius-sm); } /* 카드 전체를 덮는 투명 재생 트리거 — 버튼 안에 h3를 넣을 수 없어(콘텐츠 모델) 오버레이 방식 사용 */
.lecture-card_book { position: relative; z-index: 2; display: inline-flex; align-items: center; gap: 6px; margin-top: var(--space-sm); font-size: var(--text-xs); color: var(--color-dark-text-sub); transition: color var(--duration-base) var(--ease-default); } /* z-index 2 = 재생 오버레이 위 — 교재 상세로 이동하는 별도 링크 */
.lecture-card_book svg { width: 14px; height: 14px; }
body[data-page="free-lecture"] .lecture-card::before { content: ""; position: absolute; top: 0; left: 10px; right: 10px; height: 5px; border-radius: var(--radius-xs) var(--radius-xs) 0 0; background: var(--color-dark-line); }
/* ── 준비중 카드(케이스 ①) — 유튜브 영상이 0개라 끌어올 썸네일이 없는 상태. 임시 썸네일 = 회색 배경 + 자리표시 문구 ── */
.lecture-card_soon { display: flex; align-items: center; justify-content: center; width: 100%; height: 100%; background: linear-gradient(135deg, var(--color-gray-600), var(--color-gray-800)); }
.lecture-card_soon-text { font-size: var(--text-sm); font-weight: var(--font-medium); color: var(--color-dark-text-sub); line-height: 1.5; text-align: center; letter-spacing: -0.2px; }
.lecture-card_state { position: absolute; top: 8px; left: 8px; padding: 3px 8px; border-radius: var(--radius-pill); background: rgba(0,0,0,0.7); font-size: var(--text-3xs); font-weight: var(--font-semibold); color: var(--color-dark-text); }
.lecture-card-soon { cursor: default; }
.lecture-card-soon .lecture-card_title, .lecture-card-soon .lecture-card_instructor { opacity: 0.65; } /* 공개된 카드와 시각적으로 구분 */
.lecture-empty { grid-column: 1 / -1; padding: var(--space-4xl) 0; color: var(--color-dark-text-sub); text-align: center; }
.video-modal_item-status { padding: var(--space-xl); color: var(--color-dark-text-sub); text-align: center; }
body[data-page="lounge"] .cat-tab { display: inline-flex; align-items: center; gap: 7px; } /* SNS 채널 아이콘 + 라벨 */
body[data-page="lounge"] .cat-tab img { width: 16px; height: 16px; }
/* ── 탭 상태별 아이콘 색 ──
   아이콘이 <img> SVG라 CSS color 가 닿지 않는다. 그래서 색만 다른 파일을 content 로 갈아 끼운다.
   파랑이 필요한 때: ① 마우스를 올린 탭 ② 선택된 탭 (선택 탭 아이콘은 바로 아래에서 다시 흰색으로 덮는다) */
body[data-page="lounge"] .cat-tab:not(.cat-tab-active):hover { color: var(--color-primary); } /* 글자와 아이콘이 함께 파랑으로 */
body[data-page="lounge"] .cat-tab[data-filter-tab="instagram"]:hover img, body[data-page="lounge"] .cat-tab[data-filter-tab="instagram"].cat-tab-active img { content: url("/images/icons/ico-instagram-blue.svg"); }
body[data-page="lounge"] .cat-tab[data-filter-tab="shorts"]:hover img, body[data-page="lounge"] .cat-tab[data-filter-tab="shorts"].cat-tab-active img { content: url("/images/icons/icon-shorts-blue.svg"); }
body[data-page="lounge"] .cat-tab[data-filter-tab="youtube"]:hover img, body[data-page="lounge"] .cat-tab[data-filter-tab="youtube"].cat-tab-active img { content: url("/images/icons/ico-youtube-blue.svg"); }
body[data-page="lounge"] .cat-tab[data-filter-tab="blog"]:hover img, body[data-page="lounge"] .cat-tab[data-filter-tab="blog"].cat-tab-active img { content: url("/images/icons/ico-blog-blue.svg"); }
/* 선택된 탭은 웹·태블릿·모바일 모두 파란 배경 + 흰 글자가 된다 — 아이콘도 흰색으로.
   어떤 색이든 일단 검정으로 만든 뒤 반전시키면 정확한 흰색이 되므로 파일을 따로 두지 않는다 */
body[data-page="lounge"] .cat-tab-active img { filter: brightness(0) invert(1); }
body[data-page="free-lecture"] .lecture-grid { grid-template-columns: repeat(4, 1fr); gap: var(--space-xl) var(--space-lg); } /* 전용 페이지는 카드가 주인공 — 메인(5열)보다 큰 4열 */
.community-card[hidden], .lecture-card[hidden] { display: none; } /* 탭 필터로 숨긴 카드 */

/* ======== FAQ (자주하는 질문) — 고객센터 Page ======== */
.faq-section, .inquiry-section { padding-top: var(--space-2xl); } /* 고객센터 페이지 공통 — 히어로 없이 브레드크럼 바로 아래 시작 */
/* ── 고객센터 2단 레이아웃 (컬리형: 좌 메뉴 · 우 콘텐츠) — 고객센터 페이지가 늘면 공통 승격 ── */
.cs-layout { display: flex; align-items: flex-start; gap: var(--space-4xl); }
.cs-nav { flex: 0 0 200px; }
.cs-nav_title { margin-bottom: var(--space-lg); font-size: var(--text-4xl); font-weight: var(--font-bold); color: var(--color-ink); letter-spacing: -0.5px; }
.cs-mheader { display: none; } /* 모바일 전용 상단 — 웹·태블릿은 기존 헤더·사이드바 사용 */
.cs-nav_link { display: flex; align-items: center; justify-content: space-between; height: 54px; padding: 0 var(--space-base); border: 1px solid var(--color-border); border-top: none; font-size: var(--text-sm); color: var(--color-gray-700); letter-spacing: -0.2px; transition: color var(--duration-base) var(--ease-default), background var(--duration-base) var(--ease-default); }
.cs-nav_list li:first-child .cs-nav_link { border-top: 1px solid var(--color-border); }
.cs-nav_link-active { background: var(--color-surface-light); font-weight: var(--font-semibold); color: var(--color-ink); }
button.cs-nav_link { width: 100%; text-align: left; cursor: pointer; } /* 링크 대신 버튼 항목(회원정보관리 팝업 등)도 같은 외형 */
.cs-nav_link svg { width: 16px; height: 16px; color: var(--color-gray-400); }
.cs-nav_link-active svg { color: var(--color-gray-700); }
.cs-content { flex: 1; min-width: 0; }
.cs-content_head { display: flex; align-items: baseline; gap: var(--space-md); margin-bottom: var(--space-xl); }
.cs-content_title { font-size: var(--text-3xl); font-weight: var(--font-bold); color: var(--color-ink); letter-spacing: -0.5px; }
.cs-content_desc { font-size: var(--text-sm); color: var(--color-gray-500); letter-spacing: -0.2px; }
/* ── 분류 탭 → 필터 칩(.filter-chip)과 동일한 외형 (study 페이지와 같은 패턴) ── */
.faq-section .cat-tabs, body[data-page="event"] .cat-tabs { flex-wrap: wrap; gap: 10px; border-bottom: none; }
.faq-section .cat-tab, body[data-page="event"] .cat-tab { height: 42px; padding: 0 18px; border: 1px solid var(--color-border-strong); border-radius: var(--radius-pill); font-size: var(--text-sm); font-weight: var(--font-medium); color: var(--color-gray-700); background: var(--color-canvas); margin: 0; transition: background var(--duration-base) var(--ease-default), border-color var(--duration-base) var(--ease-default), color var(--duration-base) var(--ease-default); }
.faq-section .cat-tab-active, body[data-page="event"] .cat-tab-active { background: var(--color-tint-50); border-color: var(--color-primary); color: var(--color-primary); font-weight: var(--font-semibold); }
.faq-section .cat-tab em { margin-left: var(--space-xs); font-style: normal; font-size: var(--text-2xs); font-weight: var(--font-regular); color: var(--color-gray-400); } /* 분류별 질문 수 (.filter-chip_count와 동일) */
.faq-section .cat-tab-active em { color: var(--color-primary); }
/* ── 질문 아코디언 리스트 ── */
.faq-list { border-top: 2px solid var(--color-ink); }
.faq-item { border-bottom: 1px solid var(--color-border); }
.faq-item[hidden] { display: none; } /* 분류 탭 필터로 숨긴 항목 */
.faq-item_q { display: flex; align-items: center; gap: var(--space-md); width: 100%; padding: 20px 8px; text-align: left; cursor: pointer; }
.faq-item_mark { display: flex; align-items: center; justify-content: center; flex-shrink: 0; width: 32px; height: 32px; border-radius: 50%; background: var(--color-tint-50); font-size: var(--text-sm); font-weight: var(--font-bold); color: var(--color-primary); }
.faq-item_cat { flex-shrink: 0; min-width: 92px; font-size: var(--text-xs); color: var(--color-gray-500); letter-spacing: -0.2px; }
.faq-item_text { flex: 1; font-size: var(--text-md); font-weight: var(--font-medium); color: var(--color-ink); letter-spacing: -0.2px; line-height: 1.5; transition: color var(--duration-base) var(--ease-default); }
.faq-item_arrow { flex-shrink: 0; width: 20px; height: 20px; color: var(--color-gray-500); transition: transform var(--duration-base) var(--ease-default); }
.faq-item_q[aria-expanded="true"] .faq-item_arrow { transform: scaleY(-1); } /* 화살표는 회전이 아닌 반전 (프로젝트 공통 관례) */
/* ── 일대일 문의 CTA — 공통 page-cta를 라이트 버전으로 오버라이드 (진한 그라데이션 → 연한 틴트, 산뜻·심플) ── */
.faq-section .page-cta_inner { padding: 28px 32px; background: var(--color-tint-50); border: 1px solid var(--color-line); }
.faq-section .page-cta_title { margin-bottom: 4px; font-size: var(--text-lg); color: var(--color-ink); }
.faq-section .page-cta_desc { font-size: var(--text-sm); color: var(--color-gray-600); }
.faq-section .page-cta_btn { height: 44px; padding: 0 22px; background: var(--color-primary); border-radius: var(--radius-md); font-size: var(--text-sm); color: var(--color-canvas); transition: background var(--duration-base) var(--ease-default), border-color var(--duration-base) var(--ease-default), color var(--duration-base) var(--ease-default); }
.faq-section .page-cta_btn-ghost { background: var(--color-canvas); border-color: var(--color-border-strong); color: var(--color-gray-700); } /* 라이트 CTA 위에선 흰 배경 + 회색 테두리 */
/* ── 답변 영역 (A 마크는 ::before 장식) ── */
.faq-item_a { display: flex; gap: var(--space-md); margin: 0 8px 20px; padding: 18px 16px; border-radius: var(--radius-md); background: var(--color-surface-light); }
.faq-item_a[hidden] { display: none; } /* display:flex가 UA [hidden] 규칙을 이기므로 명시적 오버라이드 필요 */
.faq-item_a::before { content: 'A'; display: flex; align-items: center; justify-content: center; flex-shrink: 0; width: 32px; height: 32px; border-radius: 50%; background: var(--color-primary); font-size: var(--text-sm); font-weight: var(--font-bold); color: var(--color-canvas); }
.faq-item_a-body { flex: 1; align-self: center; font-size: var(--text-sm); font-weight: var(--font-medium); color: var(--color-gray-800); letter-spacing: -0.2px; line-height: 1.7; }
.faq-item_a-body p + p { margin-top: var(--space-sm); }
.faq-item_a-body .faq-item_a-gap { margin-top: var(--space-base); }
.faq-item_a-body .faq-item_a-li { position: relative; padding-left: 12px; }
.faq-item_a-body .faq-item_a-li::before { content: '·'; position: absolute; left: 2px; }
.faq-item_a-body a { color: var(--color-primary); text-decoration: underline; text-underline-offset: 2px; word-break: break-all; }

/* ======== Inquiry (1:1 문의) — 고객센터 Page ======== */
/* ── 전용 사이트 안내 카드 (북샘·Y클라우드) ── */
.inquiry-sites { display: grid; grid-template-columns: 1fr 1fr; gap: var(--space-base); margin-bottom: var(--space-2xl); }
.inquiry-site { padding: 22px 24px; background: var(--color-tint-50); border: 1px solid var(--color-line); border-radius: var(--radius-lg); }
.inquiry-site_title { margin-bottom: 6px; font-size: var(--text-md); font-weight: var(--font-bold); color: var(--color-ink); letter-spacing: -0.3px; }
.inquiry-site_desc { margin-bottom: var(--space-base); font-size: var(--text-xs); color: var(--color-gray-600); letter-spacing: -0.2px; }
.inquiry-site_link { display: inline-flex; align-items: center; gap: 6px; height: 36px; padding: 0 14px; background: var(--color-canvas); border: 1px solid var(--color-primary); border-radius: var(--radius-md); font-size: var(--text-xs); font-weight: var(--font-semibold); color: var(--color-primary); transition: background var(--duration-base) var(--ease-default), color var(--duration-base) var(--ease-default); }
.inquiry-site_link svg { width: 14px; height: 14px; }
/* ── 문의 폼 (컬리형: 상단 진한 라인 + 좌 라벨 · 우 필드 행) ── */
.inquiry-form { padding-top: 14px; border-top: 2px solid var(--color-ink); } /* 라인↔첫 행 사이 여백 */
.inquiry-form_row { display: grid; grid-template-columns: 160px 1fr; gap: var(--space-lg); padding: 10px 0; }
.inquiry-form_label { padding-top: 11px; font-size: var(--text-sm); font-weight: var(--font-semibold); color: var(--color-ink); letter-spacing: -0.2px; }
.inquiry-form_label em { margin-left: 2px; font-style: normal; color: var(--color-coral); } /* 필수 항목 표시 */
.inquiry-form_field { min-width: 0; }
.inquiry-cat-row { display: flex; align-items: center; justify-content: space-between; gap: var(--space-base); }
.inquiry-cat-row .sort-select { flex: 1; max-width: 420px; }
.inquiry-faq-link, .cs-head_link { display: inline-flex; align-items: center; gap: 6px; flex-shrink: 0; height: 40px; padding: 0 16px; border: 1px solid var(--color-border-strong); border-radius: var(--radius-md); font-size: var(--text-xs); font-weight: var(--font-semibold); color: var(--color-gray-700); transition: border-color var(--duration-base) var(--ease-default), color var(--duration-base) var(--ease-default); }
.inquiry-faq-link svg, .cs-head_link svg { width: 14px; height: 14px; }
.cs-head_link { align-self: center; margin-left: auto; } /* 타이틀 영역(.cs-content_head) 우측 보조 링크 — 제목·설명 baseline은 유지 */
.inquiry-input { width: 100%; height: 44px; padding: 0 14px; border: 1px solid var(--color-border-strong); border-radius: var(--radius-md); font-size: var(--text-sm); color: var(--color-ink); letter-spacing: -0.2px; }
.inquiry-input-half { max-width: 420px; }
.inquiry-textarea-wrap { position: relative; }
.inquiry-textarea { display: block; width: 100%; min-height: 220px; padding: 12px 14px 34px; border: 1px solid var(--color-border-strong); border-radius: var(--radius-md); font-size: var(--text-sm); color: var(--color-ink); letter-spacing: -0.2px; line-height: 1.6; resize: vertical; }
.inquiry-input::placeholder, .inquiry-textarea::placeholder { color: var(--color-gray-400); }
/* 입력 오류 — 칸을 벗어날 때(blur) 검사해 표시하고, 고치면 즉시 사라진다 (main.js bindFieldValidation) */
.inquiry-input-error, .inquiry-textarea.inquiry-input-error { border-color: var(--color-coral); }
.inquiry-error { margin-top: 6px; font-size: var(--text-xs); color: var(--color-coral); letter-spacing: -0.2px; }
.inquiry-count { position: absolute; right: 14px; bottom: 12px; font-size: var(--text-2xs); color: var(--color-gray-500); pointer-events: none; } /* 박스 안 우하단 — 별도 줄로 흐르지 않게 (컬리 방식) */
.inquiry-file { display: flex; align-items: center; gap: var(--space-md); }
.inquiry-file_input { position: absolute; width: 1px; height: 1px; overflow: hidden; clip: rect(0 0 0 0); } /* 시각 숨김 — 라벨 버튼이 트리거 */
.inquiry-file_btn { display: inline-flex; align-items: center; height: 38px; padding: 0 16px; background: var(--color-surface); border: 1px solid var(--color-border-strong); border-radius: var(--radius-md); font-size: var(--text-xs); font-weight: var(--font-medium); color: var(--color-gray-800); cursor: pointer; transition: background var(--duration-base) var(--ease-default); }
.inquiry-file_name { font-size: var(--text-xs); color: var(--color-gray-600); }
.inquiry-note { margin-top: 8px; font-size: var(--text-2xs); color: var(--color-gray-500); letter-spacing: -0.2px; }
.inquiry-privacy { margin-top: var(--space-base); padding: 14px 16px; background: var(--color-surface-light); border: 1px solid var(--color-border); border-radius: var(--radius-md); font-size: var(--text-2xs); color: var(--color-gray-600); letter-spacing: -0.2px; line-height: 1.7; }
.inquiry-agree { display: flex; align-items: center; gap: 8px; margin-top: 12px; font-size: var(--text-xs); color: var(--color-gray-800); }
.inquiry-agree input { width: 16px; height: 16px; accent-color: var(--color-primary); }
.inquiry-submit { display: flex; justify-content: center; padding-top: var(--space-2xl); }
.inquiry-submit_btn { display: inline-flex; align-items: center; justify-content: center; height: 52px; min-width: 220px; padding: 0 32px; background: var(--color-primary); border-radius: var(--radius-md); font-size: var(--text-base); font-weight: var(--font-bold); color: var(--color-canvas); letter-spacing: -0.2px; text-align: center; transition: background var(--duration-base) var(--ease-default); }
/* 제출 버튼은 항상 활성 — 미흡 항목은 제출 시 main.js reportFirstInvalid()가 토스트로 안내 */
/* ── 교재채택 문의(adoption) — 1:1 문의 폼 공통 클래스 재사용, 페이지 전용 조각만 정의 ── */
.adoption-intro { margin-bottom: var(--space-lg); font-size: var(--text-sm); color: var(--color-gray-700); letter-spacing: -0.2px; line-height: 1.7; }
body[data-page="adoption"] .inquiry-sites { grid-template-columns: 1fr; } /* 안내 카드 1장 — 전체 폭 */
.adoption-addr { display: flex; gap: 8px; }
.adoption-addr_zip { max-width: 200px; }
.adoption-addr_line { margin-top: 8px; }
.adoption-books_cats { display: flex; gap: 8px; margin-bottom: 8px; }
.adoption-books_cats .sort-select { flex: 0 0 200px; margin-left: 0; }
.adoption-books_cats .sort-select_trigger { width: 100%; justify-content: space-between; }
.adoption-books_cats .sort-select_menu { right: auto; left: 0; width: 100%; }
.adoption-books_name { max-width: 420px; }
.adoption-notice { display: flex; gap: var(--space-md); margin-top: var(--space-2xl); padding: 18px 20px; background: var(--color-tint-50); border: 1px solid var(--color-line); border-radius: var(--radius-lg); font-size: var(--text-xs); color: var(--color-gray-700); letter-spacing: -0.2px; line-height: 1.7; }
.adoption-notice svg { flex-shrink: 0; width: 20px; height: 20px; margin-top: 2px; color: var(--color-primary); }
.adoption-notice strong { font-weight: var(--font-semibold); color: var(--color-ink); }
/* ── 우편번호 검색 레이어 (카카오 우편번호 서비스 임베드) ── */
.zip-modal { position: fixed; inset: 0; z-index: var(--z-modal); display: flex; align-items: center; justify-content: center; }
.zip-modal[hidden] { display: none; }
.zip-modal_overlay { position: absolute; inset: 0; background: var(--color-overlay); animation: bannerModalFade 200ms ease-out; }
.zip-modal_panel { position: relative; width: min(480px, calc(100% - 32px)); background: var(--color-canvas); border-radius: var(--radius-lg); overflow: hidden; box-shadow: var(--shadow-floating); }
.zip-modal_head { display: flex; align-items: center; justify-content: space-between; padding: 14px 18px; border-bottom: 1px solid var(--color-border); }
.zip-modal_title { font-size: var(--text-base); font-weight: var(--font-semibold); color: var(--color-ink); letter-spacing: -0.3px; }
.zip-modal_close { display: flex; align-items: center; justify-content: center; width: 32px; height: 32px; color: var(--color-gray-600); }
.zip-modal_close svg { width: 20px; height: 20px; }
.zip-modal_body { height: 460px; }
/* ── 폼 공통 추가 조각: 고정 텍스트 값(로그인 사용자 이름 등) ── */
.inquiry-static { padding-top: 11px; font-size: var(--text-sm); color: var(--color-ink); letter-spacing: -0.2px; }

/* ======== Notice (공지사항) — 고객센터 Page ======== */
.notice-table { width: 100%; border-top: 2px solid var(--color-ink); border-collapse: collapse; }
.notice-table th { padding: 14px 8px; border-bottom: 1px solid var(--color-border); font-size: var(--text-sm); font-weight: var(--font-semibold); color: var(--color-ink); letter-spacing: -0.2px; }
.notice-table td { padding: 16px 8px; border-bottom: 1px solid var(--color-border); font-size: var(--text-sm); color: var(--color-gray-600); letter-spacing: -0.2px; text-align: center; }
.notice-table_no { width: 80px; }
.notice-table_date { width: 130px; }
.notice-table_hit { width: 110px; }
.notice-table td.notice-table_title { text-align: left; }
.notice-table_row-top td { background: var(--color-surface-light); } /* TOP 고정 공지 — 번호 자리에 '공지' 배지가 들어간다 */
.notice-table_badge { display: inline-flex; align-items: center; height: 22px; padding: 0 10px; border-radius: var(--radius-pill); background: var(--color-primary); font-size: var(--text-2xs); font-weight: var(--font-bold); color: var(--color-canvas); letter-spacing: -0.2px; }
.notice-table_row-top .notice-table_link { font-weight: var(--font-semibold); color: var(--color-ink); }
.notice-table_link { color: var(--color-ink); transition: color var(--duration-base) var(--ease-default); }
/* 리스트 상단 검색 (입력 + 버튼 — 우측 정렬) */
.notice-search { display: flex; align-self: center; margin-left: auto; gap: 8px; } /* 타이틀 영역(.cs-content_head) 우측 배치 — 제목·설명 baseline은 유지하고 검색만 세로 중앙 */
.notice-search_input { width: 280px; height: 44px; padding: 0 14px; border: 1px solid var(--color-border-strong); border-radius: var(--radius-md); font-size: var(--text-sm); color: var(--color-ink); letter-spacing: -0.2px; }
.faq-search { display: flex; flex-wrap: wrap; gap: 8px; margin-bottom: var(--space-lg); }
.faq-search_scope { height: 44px; padding: 0 38px 0 12px; border: 1px solid var(--color-border-strong); border-radius: var(--radius-md); background-color: var(--color-canvas); background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%238b8b8b' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='m6 9 6 6 6-6'/%3E%3C/svg%3E"); background-repeat: no-repeat; background-position: right 12px center; background-size: 18px; font-size: var(--text-sm); appearance: none; -webkit-appearance: none; cursor: pointer; } /* 기본 화살표는 테두리에 붙어 여백이 안 먹으므로 끄고, MP3 셀렉트(.mp3-select)와 같은 화살표를 오른쪽 12px 안쪽에 그린다 */
.faq-search .notice-search_input { flex: 1; width: auto; min-width: 100px; }
.faq-search-empty { padding: 40px 0; text-align: center; }
.faq-search-empty[hidden] { display: none; }
.notice-search_input::placeholder { color: var(--color-gray-400); }
.notice-search_btn { height: 44px; padding: 0 22px; background: var(--color-primary); border-radius: var(--radius-md); font-size: var(--text-sm); font-weight: var(--font-semibold); color: var(--color-canvas); transition: background var(--duration-base) var(--ease-default); }
/* ── 공지 상세(뷰) — 교보식: 게시글 제목이 페이지 타이틀, 제목 아래 얇은 구분선 ── */
.notice-view_head { padding: 0 0 20px; border-bottom: 1px solid var(--color-border); }
.notice-view_title { margin-bottom: 10px; font-size: var(--text-3xl); font-weight: var(--font-bold); color: var(--color-ink); letter-spacing: -0.5px; line-height: 1.35; }
.notice-view_meta { display: flex; gap: var(--space-md); font-size: var(--text-xs); color: var(--color-gray-500); letter-spacing: -0.2px; }
.notice-view_body { padding: 28px 8px; border-bottom: 1px solid var(--color-border); font-size: var(--text-sm); color: var(--color-gray-800); letter-spacing: -0.2px; line-height: 1.8; }
.notice-view_body p + p { margin-top: var(--space-base); }
.notice-view_foot { display: flex; justify-content: center; padding-top: var(--space-2xl); }
.notice-view_list-btn { display: inline-flex; align-items: center; height: 46px; padding: 0 28px; border: 1px solid var(--color-border-strong); border-radius: var(--radius-md); font-size: var(--text-sm); font-weight: var(--font-semibold); color: var(--color-gray-800); transition: border-color var(--duration-base) var(--ease-default), color var(--duration-base) var(--ease-default); }

/* ======== Event (이벤트) — 고객센터 Page ======== */
/* ── 목록: 이미지 썸네일 카드 2열 그리드 ── */
.event-grid { display: grid; grid-template-columns: repeat(auto-fill, minmax(260px, 1fr)); gap: var(--space-2xl) var(--space-lg); } /* 4:3 썸네일 기준 웹 3열 → 폭이 부족하면 자동 축소 */
.event-card[hidden] { display: none; } /* 진행 상태 탭 필터로 숨긴 카드 */
.event-card_thumb { margin-bottom: 14px; border: 1px solid var(--color-line); border-radius: var(--radius-lg); overflow: hidden; }
.event-card_thumb img { display: block; width: 100%; height: auto; aspect-ratio: 4 / 3; object-fit: cover; transition: transform var(--duration-slow) var(--ease-default); }
.event-card_thumb-placeholder { display: flex; align-items: center; justify-content: center; aspect-ratio: 4 / 3; background: var(--color-surface); color: var(--color-gray-500); font-size: var(--text-sm); }
.event-card_body { display: flex; flex-direction: column; align-items: flex-start; gap: 8px; }
.event-card_title { font-size: var(--text-md); font-weight: var(--font-semibold); color: var(--color-ink); letter-spacing: -0.3px; line-height: 1.45; transition: color var(--duration-base) var(--ease-default); }
.event-card_period { font-size: var(--text-xs); color: var(--color-gray-500); letter-spacing: -0.2px; }
/* 당첨자 확인 유도 — 발표가 끝난 이벤트에만. 카드 전체가 이미 링크라 중첩을 피해 span으로 두고 시각 표시만 한다 */
.event-card_win { display: inline-flex; align-items: center; gap: 4px; margin-top: 2px; font-size: var(--text-xs); font-weight: var(--font-semibold); color: var(--color-primary); letter-spacing: -0.2px; }
.event-card_win svg { width: 14px; height: 14px; transition: transform var(--duration-base) var(--ease-default); }
/* ── 당첨자 발표 레이어 (목록에서 「당첨자 확인」을 누르면 열림) ── */
/* 골격은 전체 배너 모달(.banner-modal)을 그대로 재사용하고, 본문 스타일만 여기서 얹는다 */
.win-modal_title { flex: 1; display: flex; align-items: center; gap: var(--space-sm); min-width: 0; } /* flex:1 + min-width:0 이라야 긴 제목이 헤더를 밀지 않고 말줄임된다 */
.win-modal_title span:last-child { overflow: hidden; white-space: nowrap; text-overflow: ellipsis; }
.win-modal_body { padding: var(--space-xl) var(--space-2xl) var(--space-2xl); overflow-y: auto; font-size: var(--text-sm); color: var(--color-gray-800); letter-spacing: -0.2px; line-height: 1.8; }
.win-modal_body p + p { margin-top: var(--space-base); }
.win-modal_sec { display: flex; align-items: center; gap: 6px; margin: var(--space-xl) 0 var(--space-sm); font-size: var(--text-md); font-weight: var(--font-bold); color: var(--color-ink); }
.win-modal_sec svg { width: 17px; height: 17px; color: var(--color-primary); }
.win-modal_note { margin-top: var(--space-base); font-size: var(--text-xs); color: var(--color-gray-500); line-height: 1.7; }
.win-modal_date { margin-top: var(--space-xl); padding-top: var(--space-base); border-top: 1px solid var(--color-border); font-size: var(--text-xs); color: var(--color-gray-500); }
/* 발표 내용은 관리자 에디터로 쓰기 때문에 표에 클래스가 붙지 않는다. 레이어 안의 표는 명단표(.notice-table) 모양을 그대로 준다 */
.win-modal_body table { width: 100%; border-top: 2px solid var(--color-ink); border-collapse: collapse; }
.win-modal_body th { padding: 14px 8px; border-bottom: 1px solid var(--color-border); font-size: var(--text-sm); font-weight: var(--font-semibold); color: var(--color-ink); letter-spacing: -0.2px; }
.win-modal_body td { padding: 16px 8px; border-bottom: 1px solid var(--color-border); font-size: var(--text-sm); color: var(--color-gray-800); letter-spacing: -0.2px; text-align: center; }
/* 진행 상태 배지 — 목록 썸네일 아래(제목 위) · 상세 제목 앞 공용 */
.event-state { display: inline-flex; align-items: center; flex-shrink: 0; height: 26px; padding: 0 12px; border-radius: var(--radius-pill); background: var(--color-primary); font-size: var(--text-2xs); font-weight: var(--font-semibold); color: var(--color-canvas); letter-spacing: -0.2px; }
.event-state-end { background: var(--color-gray-500); }
/* ── 상세: 공지 상세(.notice-view_*) 뼈대 재사용 + 대표 이미지만 추가 ── */
/* 대표 이미지 폭 상한 640px — 본문 폭(웹 약 990px)을 다 채우면 4:3 비율에서 세로가 740px을 넘어 본문보다 이미지가 주인공이 된다.
   960×720 원본을 정확히 2/3로 줄인 값이라 640×480으로 딱 떨어진다(소수점 배율이 없어 흐려지지 않음).
   이 값이 전 화면 공통 최대치이며, 좁은 화면에서는 본문 폭에 맞춰 알아서 작아진다 */
.event-view_visual { max-width: 640px; margin-top: var(--space-xl); margin-left: auto; margin-right: auto; border: 1px solid var(--color-line); border-radius: var(--radius-lg); overflow: hidden; }
.event-view_visual img { display: block; width: 100%; height: auto; }
body[data-page="event-view"] .notice-view_title { display: flex; align-items: center; gap: var(--space-sm); } /* 상태 배지 + 제목 한 줄 */
/* 본문 서체 — 도서 상세 「책 소개」(.book-content_text)와 동일하게 Pretendard 16px/1.75. 공지 상세는 기존 값 유지 */
body[data-page="event-view"] .notice-view_body { font-family: var(--font-body); font-size: var(--text-base); line-height: 1.75; }
body[data-page="event-view"] .notice-view_body strong { font-weight: var(--font-bold); color: var(--color-ink); }
/* ── 당첨자 명단 표 조각 — 당첨자 발표 레이어 본문(.win-modal_body)에서 사용 · 표는 공지 목록 .notice-table 뼈대 재사용 ── */
.event-winner_scroll { overflow-x: auto; } /* 좁은 화면에서 4열 표가 본문을 밀지 않도록 이 안에서만 가로 스크롤 */
.event-winner_table td { color: var(--color-gray-800); }
.event-winner_table .event-winner_rank { width: 90px; font-weight: var(--font-semibold); color: var(--color-ink); }
.event-winner_table .event-winner_tel { width: 160px; }

/* ======== My Page (마이페이지) — 고객센터 레이아웃 재사용 ======== */
/* ── 상단 풀폭 밴드 + 프로필 히어로 (교보 참고) — 밴드가 화면 가로 전체를 하늘색으로 채움 ── */
.mypage-band { padding-bottom: var(--space-2xl); background: var(--color-tint-50); border-bottom: 1px solid var(--color-line); }
.mypage-hero { display: flex; align-items: center; gap: var(--space-xl); padding-top: 24px; } /* 배경은 밴드가 담당 — [프로필·이름] [문의내역] ... [찜 교재(우측 끝)] */
.mypage-hero_user { display: flex; align-items: center; gap: var(--space-base); }
.mypage-hero_avatar { display: flex; align-items: center; justify-content: center; flex-shrink: 0; width: 100px; height: 100px; background: var(--color-canvas); border: 1px solid var(--color-line); border-radius: 50%; overflow: hidden; }
.mypage-hero_avatar img { width: 78px; height: auto; }
.mypage-hero_text { display: flex; flex-direction: column; gap: 4px; }
.mypage-hero_name { font-size: var(--text-lg); font-weight: var(--font-bold); color: var(--color-ink); letter-spacing: -0.3px; }
.mypage-hero_greet { font-weight: var(--font-regular); color: var(--color-gray-600); } /* 인사말은 가볍게 — 이름이 주인공 */
.mypage-hero_sub { display: none; font-size: var(--text-xs); color: var(--color-gray-600); letter-spacing: -0.2px; } /* 서브 문구는 반응형(태블릿·모바일) 전용 — 웹 숨김 */
.mypage-hero_wish { display: flex; align-items: center; gap: var(--space-lg); margin-left: auto; transition: transform var(--duration-base) var(--ease-default); }
.mypage-hero_wish-info { display: flex; flex-direction: column; align-items: flex-end; gap: 3px; }
.mypage-hero_wish-label { font-size: var(--text-sm); font-weight: var(--font-semibold); color: var(--color-gray-700); letter-spacing: -0.2px; }
.mypage-hero_wish-label strong { margin-left: 2px; font-weight: var(--font-bold); color: var(--color-primary); }
.mypage-hero_wish-go { display: inline-flex; align-items: center; gap: 2px; font-size: var(--text-2xs); color: var(--color-gray-500); letter-spacing: -0.2px; transition: color var(--duration-base) var(--ease-default); }
.mypage-hero_wish-go svg { width: 12px; height: 12px; }
.mypage-hero_wish-books { display: flex; align-items: center; }
.mypage-hero_cover { display: block; flex-shrink: 0; width: 48px; height: 68px; border: 2px solid var(--color-canvas); border-radius: var(--radius-xs); overflow: hidden; box-shadow: var(--shadow-cover); }
.mypage-hero_cover + .mypage-hero_cover { margin-left: -16px; } /* 책이 포개진 스택 연출 */
.mypage-hero_cover img { display: block; width: 100%; height: 100%; object-fit: cover; }
.mypage-hero_wish-empty { font-size: var(--text-xs); color: var(--color-gray-500); letter-spacing: -0.2px; }
.mypage-hero_inq { display: flex; align-items: center; gap: var(--space-base); padding-left: var(--space-xl); border-left: 1px solid var(--color-line); }
.mypage-hero_inq-count { display: inline-flex; align-items: center; gap: 8px; font-size: var(--text-sm); color: var(--color-gray-700); letter-spacing: -0.2px; }
.mypage-hero_inq-count strong { font-size: var(--text-xl); font-weight: var(--font-bold); color: var(--color-ink); }
.mypage-empty-cell { padding: 56px 8px; color: var(--color-gray-600); } /* 테이블 내 빈 상태 행 */
.mypage-result-btn { display: inline-flex; align-items: center; height: 34px; padding: 0 16px; background: var(--color-gray-800); border-radius: var(--radius-pill); font-size: var(--text-2xs); font-weight: var(--font-semibold); color: var(--color-canvas); letter-spacing: -0.2px; white-space: nowrap; transition: background var(--duration-base) var(--ease-default); } /* 결과보기 — 외부 결과 페이지 새 창 */
.mypage-empty { padding: 72px 0; text-align: center; }
.mypage-empty_text { margin-bottom: var(--space-base); font-size: var(--text-sm); color: var(--color-gray-600); letter-spacing: -0.2px; }
.mypage-empty_cta { display: inline-flex; align-items: center; height: 44px; padding: 0 24px; background: var(--color-primary); border-radius: var(--radius-md); font-size: var(--text-sm); font-weight: var(--font-semibold); color: var(--color-canvas); transition: background var(--duration-base) var(--ease-default); }
.mypage-badge { display: inline-flex; align-items: center; height: 24px; padding: 0 10px; border-radius: var(--radius-pill); font-size: var(--text-2xs); font-weight: var(--font-semibold); letter-spacing: -0.2px; }
.mypage-badge[hidden] { display: none; } /* 답변대기 0건이면 배지 자체를 감춤 — display:inline-flex가 UA [hidden]을 이김 */
.mypage-badge-done { background: var(--color-tint-50); color: var(--color-primary); }
/* ── 1:1 문의내역 상세 아코디언 — 제목 클릭 시 문의/답변 행 펼침 (답변 박스는 FAQ 컴포넌트 재사용) ── */
.mypage-inq_title { display: inline-flex; align-items: center; gap: 6px; font-size: var(--text-sm); color: var(--color-ink); letter-spacing: -0.2px; text-align: left; cursor: pointer; transition: color var(--duration-base) var(--ease-default); }
.mypage-inq_cat { flex-shrink: 0; margin-right: 2px; font-size: var(--text-xs); color: var(--color-gray-500); } /* 문의 작성 시 선택한 카테고리 */
.mypage-inq_arrow { flex-shrink: 0; width: 16px; height: 16px; color: var(--color-gray-400); transition: transform var(--duration-base) var(--ease-default); }
.mypage-inq_title[aria-expanded="true"] .mypage-inq_arrow { transform: scaleY(-1); } /* 화살표는 회전이 아닌 반전 (프로젝트 공통 관례) */
.mypage-inq_date, body[data-page="mypage-leveltest"] .notice-table_date { font-size: var(--text-2xs); color: var(--color-gray-500); } /* 작성일자·응시일자는 보조 정보 — 본문보다 작게 */
.mypage-lt_time { white-space: nowrap; } /* 줄이 넘칠 때 "오후 12:12"가 통째로 다음 줄로 (오후/12:12 분리 방지) */
.mypage-inq_date-short { display: none; } /* 짧은 표기(26.07.27)는 모바일 전용 */
.mypage-inq_detail td { padding: 20px 24px; background: var(--color-surface-light); text-align: left; } /* 펼침 영역: 연회색 배경으로 리스트 행과 구분 */
.mypage-inq_q-text { margin: 0 0 14px; font-size: var(--text-sm); font-weight: var(--font-medium); color: var(--color-ink); letter-spacing: -0.2px; line-height: 1.7; }
/* 문의 작성 시 첨부한 파일 — 칩 형태 다운로드 링크 (첨부가 없으면 마크업 자체를 출력하지 않음) */
.mypage-inq_files { display: flex; flex-wrap: wrap; gap: var(--space-sm); margin: 0 0 14px; }
.mypage-inq_file { display: inline-flex; align-items: center; gap: 6px; max-width: 100%; height: 32px; padding: 0 12px; background: var(--color-canvas); border: 1px solid var(--color-border-strong); border-radius: var(--radius-pill); font-size: var(--text-2xs); color: var(--color-gray-700); letter-spacing: -0.2px; white-space: nowrap; overflow: hidden; transition: border-color var(--duration-base) var(--ease-default), color var(--duration-base) var(--ease-default); }
.mypage-inq_file svg { flex-shrink: 0; width: 14px; height: 14px; color: var(--color-gray-500); }
.mypage-inq_file em { flex-shrink: 0; font-style: normal; color: var(--color-gray-400); }
.mypage-inq_answer { display: flex; gap: 10px; padding: 16px 18px; background: var(--color-canvas); border: 1px solid var(--color-line); border-radius: var(--radius-md); }
.mypage-inq_answer-icon { flex-shrink: 0; width: 16px; height: 16px; margin-top: 4px; color: var(--color-primary); }
.mypage-inq_answer-body { font-size: var(--text-sm); color: var(--color-gray-800); letter-spacing: -0.2px; line-height: 1.7; }
.mypage-inq_answer-body p + p { margin-top: 8px; }
.mypage-inq_wait { padding: 14px 16px; background: var(--color-canvas); border: 1px solid var(--color-line); border-radius: var(--radius-md); font-size: var(--text-xs); color: var(--color-gray-500); letter-spacing: -0.2px; }
/* 문의 삭제 — 목록 열을 늘리지 않도록 펼침 상세 아래에 배치 (우하단은 플로팅 배너와 겹쳐 왼쪽 정렬) */
.mypage-inq_actions { display: flex; margin-top: 14px; }
.mypage-inq_del { display: inline-flex; align-items: center; gap: 6px; height: 34px; padding: 0 14px; background: var(--color-canvas); border: 1px solid var(--color-border-strong); border-radius: var(--radius-pill); font-size: var(--text-2xs); color: var(--color-gray-600); letter-spacing: -0.2px; cursor: pointer; transition: border-color var(--duration-base) var(--ease-default), color var(--duration-base) var(--ease-default); }
.mypage-inq_del svg { flex-shrink: 0; width: 14px; height: 14px; }
.mypage-badge-wait { background: var(--color-surface-light); border: 1px solid var(--color-border); color: var(--color-gray-600); } /* 흰색은 너무 비어 보여 아주 옅은 그레이(surface-light) 사용 */
/* 찜 목록은 그리드가 아니라 리스트형(.book-list + .book-list-item) — 공통 리스트 스타일을 그대로 사용 */
/* ── 나의 학습 콘텐츠 — 인증 교재 목록 (mypage-speaking) ── */
body[data-page="mypage-speaking"] .book-list-item_bottom { justify-content: flex-end; }
/* 인증은 했지만 아직 열린 콘텐츠가 없는 교재 — 버튼 자리에 안내만 둔다 */
.book-list-item_none { font-size: var(--text-xs); color: var(--color-gray-500); letter-spacing: -0.2px; }
body[data-page="mypage-speaking"] .book-list-item_actions { flex-wrap: wrap; justify-content: flex-end; } /* 교재마다 버튼 개수가 달라(최대 4개) 태블릿 폭에서 한 줄을 넘길 수 있어 줄바꿈 허용 */
/* 안내 배너: 이용 조건 고지라 경고가 아닌 정보 톤 — 코랄(.mocktoeic-notice) 대신 브랜드 틴트 사용 */
.spk-notice { display: flex; align-items: flex-start; gap: var(--space-sm); margin-bottom: var(--space-xl); padding: var(--space-base) var(--space-lg); background: var(--color-tint-50); border: 1px solid var(--color-line); border-radius: var(--radius-lg); }
.spk-notice svg { flex-shrink: 0; width: 18px; height: 18px; margin-top: 2px; color: var(--color-primary); }
.spk-notice p { font-size: var(--text-sm); color: var(--color-gray-700); letter-spacing: -0.2px; line-height: 1.7; }
.spk-notice strong { font-weight: var(--font-bold); color: var(--color-primary); }
/* ── 마이페이지 허브 메뉴 (mypage.html — 모바일 진입 허브, 웹 직접 접근도 대응) ── */
.mypage-menu { display: grid; grid-template-columns: repeat(6, 1fr); gap: var(--space-base); }
.mypage-menu_btn { display: flex; flex-direction: column; align-items: center; gap: 10px; padding: 24px 12px; background: var(--color-canvas); border: 1px solid var(--color-border); border-radius: var(--radius-lg); cursor: pointer; transition: border-color var(--duration-base) var(--ease-default), transform var(--duration-base) var(--ease-default); }
.mypage-menu_icon { display: flex; align-items: center; justify-content: center; width: 48px; height: 48px; background: var(--color-tint-100); border-radius: 50%; color: var(--color-primary); }
.mypage-menu_icon svg { width: 22px; height: 22px; }
.mypage-menu_label { font-size: var(--text-sm); font-weight: var(--font-semibold); color: var(--color-ink); letter-spacing: -0.2px; }
/* 웹 전용(1280px~) — 6열 한 줄이 허전해 카드·아이콘을 키운다. 태블릿·모바일은 위 기본 그대로 */
@media (min-width: 1280px) {
  .mypage-menu_btn { gap: 14px; padding: 36px 12px; transition: border-color var(--duration-base) var(--ease-default), transform var(--duration-base) var(--ease-default), box-shadow var(--duration-base) var(--ease-default); }
  .mypage-menu_icon { width: 64px; height: 64px; transition: background-color var(--duration-base) var(--ease-default), color var(--duration-base) var(--ease-default); }
  .mypage-menu_icon svg { width: 28px; height: 28px; }
  .mypage-menu_label { font-size: var(--text-md); }
}
@media (min-width: 1280px) and (hover: hover) and (pointer: fine) {
  .mypage-menu_btn:hover { box-shadow: var(--shadow-lift-blue); } /* 카드가 살짝 떠오르며 파란빛 그림자 */
  .mypage-menu_btn:hover .mypage-menu_icon { background: var(--color-primary); color: var(--color-canvas); } /* 마우스를 올리면 아이콘 원이 파랗게 채워진다 */
}

/* ── 마이페이지 수신동의 설정 (mypage-consent.html) — 선택 동의 3종 관리 ── */
.consent-intro { margin-bottom: var(--space-lg); padding-bottom: var(--space-base); border-bottom: 1px solid var(--color-line); font-size: var(--text-sm); font-weight: var(--font-semibold); color: var(--color-ink); letter-spacing: -0.2px; line-height: 1.6; }
.consent-optional { font-weight: var(--font-regular); color: var(--color-gray-500); }
/* 전체동의 버튼(.consent-allbtn)과 같은 원형 체크 아이콘 방식 — 네이티브 사각 체크박스와 섞이지 않게 통일 */
.consent-check { display: inline-flex; align-items: center; gap: 10px; cursor: pointer; }
.consent-check_input { position: absolute; width: 1px; height: 1px; margin: -1px; padding: 0; overflow: hidden; clip: rect(0, 0, 0, 0); white-space: nowrap; border: 0; }
.consent-check_icon { display: flex; align-items: center; justify-content: center; flex-shrink: 0; width: 22px; height: 22px; margin-top: 1px; background: var(--color-border-strong); border-radius: 50%; color: var(--color-canvas); transition: background var(--duration-base) var(--ease-default); } /* 기본값도 회색 배경 + 흰 체크로 항상 보이게 — 체크되면 배경만 파랑으로 */
.consent-check_icon svg { width: 13px; height: 13px; stroke-width: 2.75; }
.consent-check_input:checked ~ .consent-check_icon { background: var(--color-primary); }
.consent-check_input:focus-visible ~ .consent-check_icon { outline: 2px solid var(--color-primary); outline-offset: 2px; }
.consent-check_input:disabled ~ .consent-check_icon { opacity: 0.4; }
.consent-check_input:disabled ~ .consent-check_text { color: var(--color-gray-400); }
.consent-check:has(.consent-check_input:disabled) { cursor: default; }
.consent-check_text { font-size: var(--text-xs); color: var(--color-gray-800); letter-spacing: -0.2px; }
.consent-doc_q { margin-bottom: 12px; font-size: var(--text-xs); font-weight: var(--font-semibold); color: var(--color-ink); line-height: 1.6; }
.consent-doc_table { width: 100%; border-collapse: collapse; background: var(--color-canvas); table-layout: fixed; } /* 약관 고지표 — 항목명(좌) + 내용(우) */
.consent-doc_table th { width: 120px; padding: 10px 8px; background: var(--color-border); border: 1px solid var(--color-border-strong); font-size: var(--text-2xs); font-weight: var(--font-semibold); color: var(--color-gray-800); text-align: center; vertical-align: middle; }
.consent-doc_table td { padding: 10px 14px; border: 1px solid var(--color-border-strong); font-size: var(--text-2xs); font-weight: var(--font-semibold); color: var(--color-gray-800); line-height: 1.7; word-break: keep-all; }
.consent-doc_dim { font-weight: var(--font-regular); color: var(--color-gray-600); } /* 고지표에서 강조 대상이 아닌 문구 */
.consent-doc_note { margin-top: 10px; font-size: var(--text-2xs); color: var(--color-gray-500); line-height: 1.6; }

/* 약관동의 아코디언 — 전체동의 체크 + 개별 항목 체크·보기, 상세는 팝업(.consent-modal)에서 읽는다 */
.consent-accordion { display: flex; flex-direction: column; gap: var(--space-base); }
.consent-accordion_head { display: flex; align-items: center; justify-content: space-between; gap: var(--space-base); padding: 18px 20px; background: var(--color-surface-cool); border: 1px solid var(--color-line); border-radius: var(--radius-xl); cursor: pointer; transition: border-color var(--duration-base) var(--ease-default); } /* 탭처럼 목록에 붙어있지 않고, 독립된 큰 버튼 카드로 눌러보고 싶게 — 그림자 없이 은은한 배경·테두리로만 구분 */
.consent-accordion_head:has(.consent-allbtn_input:checked) { border-color: var(--color-primary); }
.consent-allbtn { display: flex; align-items: center; gap: 12px; cursor: pointer; }
.consent-allbtn_input { position: absolute; width: 1px; height: 1px; margin: -1px; padding: 0; overflow: hidden; clip: rect(0, 0, 0, 0); white-space: nowrap; border: 0; } /* 네이티브 체크박스는 스크린리더·키보드 포커스용으로 남기고 시각적으로만 숨김 */
.consent-allbtn_icon { display: flex; align-items: center; justify-content: center; flex-shrink: 0; width: 30px; height: 30px; background: var(--color-border-strong); border-radius: 50%; color: var(--color-canvas); transition: background var(--duration-base) var(--ease-default); } /* 기본값도 회색 배경 + 흰 체크로 항상 보이게 — 체크되면 배경만 파랑으로 */
.consent-allbtn_icon svg { width: 16px; height: 16px; stroke-width: 2.75; }
.consent-allbtn_input:checked ~ .consent-allbtn_icon { background: var(--color-primary); }
.consent-allbtn_input:focus-visible ~ .consent-allbtn_icon { outline: 2px solid var(--color-primary); outline-offset: 2px; }
.consent-allbtn_text { font-size: var(--text-base); font-weight: var(--font-bold); color: var(--color-ink); letter-spacing: -0.2px; }
.consent-accordion_toggle { display: flex; align-items: center; justify-content: center; width: 28px; height: 28px; background: none; border: none; color: var(--color-gray-600); cursor: pointer; }
.consent-accordion_toggle svg { width: 18px; height: 18px; }
.consent-accordion_list { border: 1px solid var(--color-border); border-radius: var(--radius-xl); overflow: hidden; }
.consent-accordion_list[hidden] { display: none; }
.consent-accordion_item { display: flex; flex-wrap: wrap; align-items: center; gap: var(--space-base); padding: 14px 20px; border-top: 1px solid var(--color-line); }
.consent-accordion_item:first-child { border-top: none; }
.consent-accordion_item .consent-item_note { display: block; margin-top: 2px; font-size: var(--text-2xs); color: var(--color-gray-500); letter-spacing: -0.2px; }
.consent-accordion_item .consent-check { flex: 1 1 auto; min-width: 0; align-items: flex-start; }
.consent-accordion_view { flex-shrink: 0; margin-left: auto; background: none; border: none; font-size: var(--text-2xs); color: var(--color-gray-600); text-decoration: underline; text-underline-offset: 2px; cursor: pointer; }
.consent-accordion_item-ad .consent-channel { flex-basis: 100%; margin-top: 4px; margin-left: 24px; } /* 체크박스만큼 들여써서 상위 항목의 하위 옵션처럼 보이게 */
.consent-channel { display: flex; align-items: center; gap: var(--space-base); }
.consent-updated { margin-top: var(--space-lg); font-size: var(--text-2xs); color: var(--color-gray-500); letter-spacing: -0.2px; text-align: right; }
.consent-updated_badge { display: inline-flex; align-items: center; gap: 4px; margin-left: 8px; color: var(--color-primary); font-weight: var(--font-semibold); } /* 저장 직후에만 잠깐 나타나는 확인 배지 — 날짜만으론 저장 여부가 눈에 안 띄어서 추가 */
.consent-updated_badge svg { width: 14px; height: 14px; }
.consent-updated_badge-in { animation: consentSavedFade 1200ms ease-out; }
@keyframes consentSavedFade { 0% { opacity: 0; transform: translateY(2px); } 100% { opacity: 1; transform: translateY(0); } }

/* 약관 순차 동의 팝업 — 골격은 .banner-modal 재사용, 본문·하단 동의 버튼만 얹는다 */
.consent-modal_panel { width: min(560px, calc(100vw - 48px)); max-height: calc(100vh - 80px); }
.consent-modal_step { flex-shrink: 0; padding: 10px 24px 0; font-size: var(--text-2xs); font-weight: var(--font-semibold); color: var(--color-primary); }
.consent-modal_body { padding: var(--space-lg) 24px; overflow-y: auto; }
.consent-modal_foot { flex-shrink: 0; padding: 16px 24px; border-top: 1px solid var(--color-border); }
.consent-modal_agree { display: block; width: 100%; height: 48px; background: var(--color-primary); border: none; border-radius: var(--radius-sm); font-size: var(--text-sm); font-weight: var(--font-bold); color: var(--color-canvas); cursor: pointer; transition: background var(--duration-base) var(--ease-default); }

/* ======== Manuscript (원고 접수) — 고객센터 Page ======== */
.manu-hero { margin-bottom: var(--space-2xl); padding: 36px 40px; background: var(--color-tint-50); border: 1px solid var(--color-line); border-radius: var(--radius-lg); text-align: center; }
.manu-hero_title { margin-bottom: 6px; font-size: var(--text-lg); font-weight: var(--font-bold); color: var(--color-ink); letter-spacing: -0.3px; }
.manu-hero_desc { font-size: var(--text-sm); color: var(--color-gray-600); letter-spacing: -0.2px; }
.manu-steps { display: grid; grid-template-columns: repeat(3, 1fr); gap: var(--space-base); margin-bottom: var(--space-2xl); }
.manu-step { padding: 28px 20px; border: 1px solid var(--color-border); border-radius: var(--radius-lg); text-align: center; }
.manu-step_label { font-size: var(--text-xs); font-weight: var(--font-bold); color: var(--color-primary); letter-spacing: 0.5px; }
.manu-step_icon { display: flex; align-items: center; justify-content: center; width: 64px; height: 64px; margin: 14px auto; background: var(--color-tint-100); border-radius: 50%; color: var(--color-primary); }
.manu-step_icon svg { width: 26px; height: 26px; }
.manu-step_desc { font-size: var(--text-sm); color: var(--color-gray-700); letter-spacing: -0.2px; line-height: 1.6; }
.manu-sub { margin: var(--space-2xl) 0 var(--space-md); font-size: var(--text-md); font-weight: var(--font-bold); color: var(--color-ink); letter-spacing: -0.3px; }
.manu-down { display: inline-flex; align-items: center; gap: 8px; height: 48px; padding: 0 36px; background: var(--color-gray-800); border-radius: var(--radius-sm); font-size: var(--text-sm); font-weight: var(--font-bold); color: var(--color-canvas); letter-spacing: 0.3px; transition: background var(--duration-base) var(--ease-default); }
.manu-down svg { width: 18px; height: 18px; }
.manu-note { margin-top: var(--space-md); font-size: var(--text-xs); color: var(--color-gray-500); letter-spacing: -0.2px; line-height: 1.7; }

/* ======== Mocktoeic (모의토익 성적확인) — 고객센터 Page ======== */
/* ── 주민등록번호 수집 제한 안내 — 조회 불가 조건이라 코랄 틴트로 강조 ── */
.mocktoeic-notice { display: flex; align-items: flex-start; gap: var(--space-sm); margin-bottom: var(--space-2xl); padding: var(--space-base) var(--space-lg); background: var(--color-coral-tint); border: 1px solid var(--color-coral-tint-border); border-radius: var(--radius-lg); }
.mocktoeic-notice svg { flex-shrink: 0; width: 18px; height: 18px; margin-top: 2px; color: var(--color-coral); }
.mocktoeic-notice p { font-size: var(--text-sm); color: var(--color-gray-700); letter-spacing: -0.2px; line-height: 1.7; }
.mocktoeic-notice strong { font-weight: var(--font-bold); color: var(--color-coral); }
.mocktoeic-notice a { color: var(--color-primary); text-decoration: underline; text-underline-offset: 2px; }
/* 모의토익 성적확인 — 사이드바 없는 풀폭 페이지.
   ① 히어로 바로 아래 붙임(사은품 모의고사 .gift-section과 동일한 결)
   ② 조회 폼은 풀폭 틴트 카드 + 2열로 배치해 좌우 빈 공간 없이 가로를 채운다 (.gift-app 카드와 같은 틴트·보더·라운드)
   ③ 폭이 좁아지면 auto-fit이 스스로 1열로 접으므로 태블릿 전용 분기가 필요 없다 */
.mocktoeic-section { padding-top: 0; }
body[data-page="mocktoeic"] .inquiry-form { display: grid; grid-template-columns: repeat(auto-fit, minmax(380px, 1fr)); gap: var(--space-lg) var(--space-3xl); padding: var(--space-2xl); background: var(--color-tint-50); border: 1px solid var(--color-line); border-radius: var(--radius-xl); }
body[data-page="mocktoeic"] .inquiry-form_row { padding: 0; }
body[data-page="mocktoeic"] .inquiry-submit { grid-column: 1 / -1; padding-top: var(--space-sm); }
/* ── 하단 배너 1개 (임시 회색 영역 — 이미지로 교체 예정) ── */
.mock-banner-section { padding: 0 0 var(--space-4xl); } /* 위: 폼 섹션의 아래 패딩(64px)만으로 충분해 0 · 아래: 푸터와 붙지 않게 48px */
.mock-banner { display: flex; align-items: center; justify-content: center; min-height: 160px; background: var(--color-surface); border-radius: var(--radius-xl); }
.mock-banner span { font-size: var(--text-sm); color: var(--color-gray-400); }
.mock-banner a { display: block; width: 100%; } /* 이미지 등록 후: 링크가 슬롯 전체 폭 차지 */
.mock-banner img { display: block; width: 100%; height: auto; border-radius: var(--radius-xl); }
.mock-banner:has(img) { min-height: 0; background: none; } /* 이미지 등록 후에는 임시 회색 박스 스타일 해제 — 이미지 비율 그대로 표시 */
.mock-result_hero { display: flex; align-items: flex-end; gap: var(--space-md); } /* 히어로 우측에 '다시 조회하기' */
.mock-result_hero .cs-head_link { align-self: flex-end; margin-left: auto; }
/* ── 성적 결과(mocktoeic-result.html) — 응시정보 · 총점 · 영역별 점수 ── */
.mock-result_info { display: flex; margin-bottom: var(--space-lg); padding: var(--space-lg) var(--space-xl); background: var(--color-surface-light); border-radius: var(--radius-lg); }
.mock-result_info-item { flex: 1; padding: 0 var(--space-base); border-left: 1px solid var(--color-border); text-align: center; }
.mock-result_info-item:first-child { border-left: none; }
.mock-result_info dt { margin-bottom: 6px; font-size: var(--text-xs); color: var(--color-gray-500); letter-spacing: -0.2px; }
.mock-result_info dd { font-size: var(--text-md); font-weight: var(--font-semibold); color: var(--color-ink); letter-spacing: -0.2px; }
.mock-result_total { margin-bottom: var(--space-2xl); padding: var(--space-2xl) var(--space-xl); background: var(--color-tint-50); border: 1px solid var(--color-line); border-radius: var(--radius-xl); text-align: center; }
.mock-result_total-label { margin-bottom: var(--space-sm); font-size: var(--text-sm); font-weight: var(--font-semibold); color: var(--color-gray-600); letter-spacing: -0.2px; }
.mock-result_total-score { display: flex; align-items: baseline; justify-content: center; gap: var(--space-sm); }
.mock-result_total-score strong { font-size: var(--text-6xl); font-weight: var(--font-bold); color: var(--color-primary); letter-spacing: -1px; }
.mock-result_total-score span { font-size: var(--text-lg); font-weight: var(--font-medium); color: var(--color-gray-500); }
/* 총점 카드 안 영역별(LC·RC) 요약 — 별도 표를 만들지 않고 총점과 한 카드에 묶는다 */
.mock-result_areas { display: flex; justify-content: center; gap: var(--space-2xl); margin-top: var(--space-lg); padding-top: var(--space-lg); border-top: 1px solid var(--color-line); }
.mock-result_area { min-width: 120px; }
.mock-result_areas dt { margin-bottom: 4px; font-size: var(--text-xs); color: var(--color-gray-600); letter-spacing: -0.2px; }
.mock-result_areas dt em { font-style: normal; color: var(--color-gray-400); } /* 맞은 수는 라벨 줄에 함께 — 점수 아래에 두면 숫자가 겹쳐 집중이 흐트러짐 */
.mock-result_areas dt em::before { content: '·'; margin: 0 4px; }
.mock-result_areas dd { display: flex; align-items: baseline; justify-content: center; gap: 4px; }
.mock-result_areas dd strong { font-size: var(--text-2xl); font-weight: var(--font-bold); color: var(--color-ink); letter-spacing: -0.5px; }
.mock-result_areas dd span { font-size: var(--text-xs); color: var(--color-gray-500); }
.mock-result_subtitle { margin-bottom: var(--space-md); font-size: var(--text-lg); font-weight: var(--font-bold); color: var(--color-ink); letter-spacing: -0.3px; }
/* PART별 성적 — 7파트 균등 그리드(웹 한 줄) */
.mock-result_parts { display: grid; grid-template-columns: repeat(7, 1fr); gap: var(--space-sm); margin-bottom: var(--space-2xl); }
.mock-result_part { padding: var(--space-base) var(--space-sm); background: var(--color-canvas); border: 1px solid var(--color-border); border-radius: var(--radius-md); text-align: center; }
.mock-result_part-label { margin-bottom: var(--space-sm); font-size: var(--text-2xs); font-weight: var(--font-semibold); color: var(--color-gray-600); letter-spacing: -0.2px; }
.mock-result_part-score { display: flex; align-items: baseline; justify-content: center; gap: 3px; }
.mock-result_part-score strong { font-size: var(--text-xl); font-weight: var(--font-bold); color: var(--color-primary); letter-spacing: -0.5px; }
.mock-result_part-score span { font-size: var(--text-2xs); color: var(--color-gray-500); }
.mock-result_actions { gap: var(--space-md); } /* 공통 .inquiry-submit(가운데 정렬) + 버튼 2개 간격 */
.mock-result_actions .notice-view_list-btn { height: 52px; } /* 공통 목록 버튼은 46px — 옆의 제출 버튼(52px)과 높이를 맞춘다 */
/* ── 성적표 인쇄([data-mock-print] → window.print()) — 성적 영역만 남기고 사이트 크롬은 전부 숨김 ── */
@media print {
  body[data-page="mocktoeic-result"] .cs-mheader, body[data-page="mocktoeic-result"] .header, body[data-page="mocktoeic-result"] .gnb, body[data-page="mocktoeic-result"] .breadcrumb, body[data-page="mocktoeic-result"] .cs-nav, body[data-page="mocktoeic-result"] .footer, body[data-page="mocktoeic-result"] .scroll-top, body[data-page="mocktoeic-result"] .corner-mascot, body[data-page="mocktoeic-result"] .mascot-hit, body[data-page="mocktoeic-result"] .pick-veil, body[data-page="mocktoeic-result"] .cs-head_link, body[data-page="mocktoeic-result"] .mock-result_actions { display: none; }
  body[data-page="mocktoeic-result"] .section { padding: 0; }
  body[data-page="mocktoeic-result"] .container { max-width: none; padding: 0; }
  body[data-page="mocktoeic-result"] .mock-result_info, body[data-page="mocktoeic-result"] .mock-result_total, body[data-page="mocktoeic-result"] .mock-result_part { print-color-adjust: exact; -webkit-print-color-adjust: exact; } /* 카드 배경색이 인쇄에서 빠지지 않게 */
}


/* ======== Gift Mocktest (사은품 모의고사) Page ======== */
.gift-section { padding-top: 0; }
body[data-page="gift-mocktest"] .mocktoeic-notice { margin-bottom: var(--space-base); border-radius: var(--radius-xl); } /* 앱 안내 카드 위 여백 축소(공통 32px → 16px) + 라운드를 아래 카드들과 통일(lg → xl) — 이 페이지만 */
/* ── ETS 토익기출 수험서 APP 안내 — 좌 텍스트 · 우 스토어 링크 ── */
.gift-app { display: flex; align-items: center; justify-content: space-between; gap: var(--space-lg); margin-bottom: var(--space-3xl); padding: var(--space-lg) var(--space-xl); background: var(--color-tint-50); border: 1px solid var(--color-line); border-radius: var(--radius-xl); }
.gift-app_title { display: flex; align-items: center; gap: var(--space-sm); margin-bottom: 4px; font-size: var(--text-md); font-weight: var(--font-bold); color: var(--color-ink); letter-spacing: -0.3px; }
.gift-app_title svg { width: 18px; height: 18px; color: var(--color-primary); }
.gift-app_desc { font-size: var(--text-sm); color: var(--color-gray-600); letter-spacing: -0.2px; }
.gift-app_stores { display: flex; flex-shrink: 0; gap: var(--space-sm); }
.gift-app_store { display: inline-flex; align-items: center; gap: 6px; height: 40px; padding: 0 18px; background: var(--color-canvas); border: 1px solid var(--color-border-strong); border-radius: var(--radius-pill); font-size: var(--text-sm); font-weight: var(--font-medium); color: var(--color-gray-700); letter-spacing: -0.2px; transition: border-color var(--duration-base) var(--ease-default), color var(--duration-base) var(--ease-default); }
.gift-app_store img { width: 16px; height: 16px; }
/* ── 자료 카드 그리드 — 웹 2열 ── */
.gift-subtitle_em { font-style: normal; font-weight: var(--font-medium); color: var(--color-primary); }
.gift-head-gap { margin-top: var(--space-4xl); }
.gift-grid { display: grid; grid-template-columns: repeat(2, 1fr); gap: var(--space-lg); }
.gift-card { display: flex; gap: var(--space-xl); padding: var(--space-xl); background: var(--color-canvas); border: 1px solid var(--color-border); border-radius: var(--radius-xl); box-shadow: 0 4px 20px rgba(0,0,0,0.03); }
.gift-card_cover { flex-shrink: 0; width: 150px; }
.gift-card_cover img { display: block; width: 100%; height: auto; border: 1px solid var(--color-border); border-radius: var(--radius-md); box-shadow: var(--shadow-cover); }
.gift-card_body { display: flex; flex: 1; flex-direction: column; min-width: 0; }
.gift-card_title { margin-bottom: var(--space-base); font-size: var(--text-lg); font-weight: var(--font-bold); color: var(--color-ink); letter-spacing: -0.3px; line-height: 1.4; }
.gift-card_vol { font-weight: var(--font-medium); color: var(--color-primary); }
.gift-card_links { display: flex; flex-direction: column; gap: var(--space-sm); }
.gift-card_link { display: flex; align-items: center; gap: var(--space-sm); height: 40px; padding: 0 14px; background: var(--color-surface-cool); border: 1px solid var(--color-border); border-radius: var(--radius-md); font-size: var(--text-sm); font-weight: var(--font-medium); color: var(--color-gray-700); letter-spacing: -0.2px; transition: border-color var(--duration-base) var(--ease-default), color var(--duration-base) var(--ease-default); }
.gift-card_link svg { flex-shrink: 0; width: 15px; height: 15px; color: var(--color-gray-500); transition: color var(--duration-base) var(--ease-default); }
.gift-card_link-down { margin-left: auto; }
.gift-card_lecture { display: flex; align-items: center; justify-content: center; gap: var(--space-sm); height: 42px; margin-top: var(--space-md); background: var(--color-primary); border-radius: var(--radius-md); font-size: var(--text-sm); font-weight: var(--font-semibold); color: var(--color-canvas); letter-spacing: -0.2px; transition: background var(--duration-base) var(--ease-default); }
.gift-card_lecture svg { width: 16px; height: 16px; }

/* ========================================================
   호버 전용 스타일 — 실제 마우스 사용자에게만 적용
   (hover: hover) and (pointer: fine) 로 감싸 터치 기기(태블릿·모바일)에서
   탭 후 호버 색상/테두리가 그대로 눌어붙는 문제를 막는다.
   (예: 하트 버튼이 코랄색 테두리로 남거나, FAQ 질문 텍스트가 파란색으로 남는 문제)
======================================================== */
@media (hover: hover) and (pointer: fine) {
.family-bar_util-link:hover { color: var(--color-gray-800); }
.family-cs_link:hover { background: var(--color-surface-light); color: var(--color-primary); }
.family-bar_item-link:hover { color: var(--color-gray-700); background: var(--color-canvas); }
.header-sitenav_link:hover { color: var(--color-primary); }
.site-toggle_item:hover { color: var(--color-primary); }
.site-toggle_item-active:hover { color: var(--color-canvas); } /* 활성 칸은 파란 배경 위 흰 글씨를 그대로 유지 */
.header-family_btn:hover { color: var(--color-primary); border-color: var(--color-primary); }
.header-family_btn:hover svg { color: var(--color-primary); }
.header-family_link:hover { background: var(--color-tint-50); color: var(--color-primary); font-weight: var(--font-semibold); }
.header-search_btn:hover { color: var(--color-primary); }
.header-util_link:hover { color: var(--color-ink); }
.header-util_mp3:hover { background: var(--color-mp3-hover); }
.gnb-link:hover { color: var(--color-primary); transform: translateY(-2px); }
.gnb-link-blue:hover { color: var(--color-primary-hover); }
.gnb-link-point:hover, .gnb-link-point.gnb-link-active:hover { color: var(--color-mp3); }
.gnb-util-link:hover { color: var(--color-gray-700); transform: translateY(-2px); }
.mega-group_title:hover { color: var(--color-primary); }
.mega-link:hover { color: var(--color-primary); padding-left: var(--space-xs); }
.mega-link:hover em { color: var(--color-primary); }
.mega-side_link:hover { color: var(--color-primary); }
.mega-social:hover .mega-social_icon { border-color: var(--color-primary); transform: translateY(-2px); }
.mega-side_cta:hover { border-color: var(--color-primary); }
.mega-side_cta:hover .mega-side_cta-arrow { transform: translateX(3px); color: var(--color-primary); }
.mbs-pause-btn:hover { background: rgba(0,0,0,0.65); }
.mbs-prev-btn:hover, .mbs-next-btn:hover { opacity: 0.7; }
.mbs-all-link:hover { color: var(--color-canvas); }
.banner-modal_close:hover { background: var(--color-surface); }
.banner-modal_item:hover { transform: translateY(-2px); }
.login-modal_btn:hover { background: var(--color-gray-700); }
.login-modal_btn-primary:hover { background: var(--color-primary-hover); }
.main-banner_btn:hover { background: var(--color-canvas); }
.mb-card:hover img { transform: scale(1.02); }
.quick-menu_link:hover .quick-menu_icon { background: var(--color-border); }
.quick-menu_link:hover .quick-menu_label { color: var(--color-ink); }
.quick-menu_link:hover .quick-menu_eyebrow { color: var(--color-gray-500); }
.study-links_btn:hover { background: var(--color-border); color: var(--color-ink); }
.section_more:hover { color: var(--color-primary-hover); }
.cat-tab:not(.cat-tab-active):hover { color: var(--color-primary); } /* 활성 칩 제외 — 웹의 파랑 채움 칩을 호버가 되돌려 글자가 묻힌다 */
.cat-banner_side:hover { transform: translateY(-2px); }
.strip-banner_link { transition: transform var(--duration-base) var(--ease-default), box-shadow var(--duration-base) var(--ease-default); } /* 호버 기기에서만 선언 — 터치 기기(모바일 스와이프 배너)는 영향 없음 */
.strip-banner_link:hover { transform: translateY(-4px); box-shadow: var(--shadow-soft); } /* 스트립 배너 2개 — 살짝 떠오르며 은은한 중립 그림자 */
.view-toggle_btn:hover { border-color: var(--color-primary); color: var(--color-primary); }
body[data-page="home"] .book-card:hover { transform: translateY(-4px); } /* 메인 베스트셀러·신간 카드 — 살짝 떠오르는 롤오버 */
body[data-page="home"] .book-card:hover .book-card_title { color: var(--color-primary); } /* 제목 텍스트만 블루 (저자·가격은 유지) */
body[data-page="home"] .lecture-card:hover .lecture-card_title { color: var(--color-primary); } /* 무료 학습 콘텐츠 — 강의명만 블루 (강사명은 유지) */
body[data-page="home"] .community-card:hover .community-card_sns-title { color: var(--color-primary); } /* 같이 공부하는 사람들 — 게시물 제목만 블루 (계정명은 유지) */
.book-card_btn:hover { border-color: var(--color-primary); color: var(--color-primary); }
.book-card_btn-primary:hover { background: var(--color-primary-hover); border-color: var(--color-primary-hover); color: var(--color-canvas); }
.exam-card:hover { border-color: var(--color-primary); background: var(--color-tint-50); }
.footer-col_link:hover { color: var(--color-primary); }
.footer-social_link:hover .footer-social_icon { border-color: var(--color-primary); transform: translateY(-2px); }
.footer-social_link:hover .footer-social_icon img { opacity: 0; } /* 검은 아이콘을 감추고 */
.footer-social_link:hover .footer-social_icon::after { opacity: 1; } /* 파란 아이콘을 드러낸다 */
.footer-social_link:hover .footer-social_label { color: var(--color-primary); }
.scroll-top:hover { border-color: var(--color-border-strong); }
.breadcrumb_link:hover { color: var(--color-primary); }
.gnb-item:hover .gnb-submenu { opacity: 1; visibility: visible; transform: translateY(0); }
.gnb-submenu_link:hover { background: var(--color-tint-50); color: var(--color-primary); }
.books-section .cat-tab:not(.cat-tab-active):hover, body[data-page="lounge"] .cat-tab:not(.cat-tab-active):hover, body[data-page="free-lecture"] .cat-tab:not(.cat-tab-active):hover { border-color: var(--color-primary); background: var(--color-tint-50); }
.books-section .cat-tab:not(.cat-tab-active):hover em { color: var(--color-primary); } /* 점수 표기도 라벨과 함께 파랗게 (.faq-section 과 동일 규칙) */
.filter-btn:hover { border-color: var(--color-primary); color: var(--color-primary); }
.sort-btn:hover { color: var(--color-ink); background: var(--color-canvas); }
.sort-select_trigger:hover { border-color: var(--color-primary); color: var(--color-primary); }
.sort-select_trigger:hover .sort-select_arrow { color: var(--color-primary); }
.sort-select_option:hover { background: var(--color-surface-cool); color: var(--color-ink); }
.level-card:hover { border-color: var(--color-line); box-shadow: var(--shadow-lift-blue-strong); transform: translateY(-6px); }
.level-card:hover::before { transform: scaleX(1); }
.level-card:hover .level-card_go { color: var(--color-primary); gap: var(--space-sm); }
.load-more_btn:hover { border-color: var(--color-primary); color: var(--color-primary); }
.load-more_btn:hover .load-more_page { color: var(--color-primary); }
.filter-sheet_close:hover { color: var(--color-ink); }
.filter-chip:hover { border-color: var(--color-primary); color: var(--color-primary); }
.filter-tip_close:hover { background: var(--color-tint-100); color: var(--color-primary); }
.filter-chip:hover .filter-chip_count { color: var(--color-primary); }
.search-filter .filter-group-stack .filter-chip:not(.filter-chip-selected):hover { border-color: var(--color-primary); background: var(--color-tint-50); color: var(--color-primary); }
.search-filter .filter-group-stack .filter-chip:not(.filter-chip-selected):hover .filter-chip_count { color: var(--color-primary); }
.filter-sheet_reset-btn:hover { background: var(--color-border); }
.filter-sheet_apply:hover { background: var(--color-black); }
.page-cta_btn:hover { transform: translateY(-2px); box-shadow: 0 10px 24px rgba(0,0,0,0.18); }
.search-filter_reset:hover { color: var(--color-primary); }
.filter-check:hover .filter-check_label { color: var(--color-ink); }
body[data-page="search"] .cat-tab:not(.cat-tab-active):hover { border-color: var(--color-primary); background: var(--color-tint-50); }
body[data-page="search"] .cat-tab:not(.cat-tab-active):hover em { background: var(--color-tint-100); color: var(--color-primary); }
body[data-page="search"] .books-section .cat-tab:not(.cat-tab-active):hover { border-color: var(--color-primary); background: var(--color-tint-50); color: var(--color-gray-700); }
.book-list-item_cover-wrap:hover img { transform: scale(1.02); }
.book-list-item_title a:hover { color: var(--color-primary); }
.book-list-item_btn:hover { border-color: var(--color-primary); color: var(--color-primary); }
.book-list-item_btn-primary:hover { background: var(--color-primary-hover); border-color: var(--color-primary-hover); color: var(--color-canvas); }
.book-list-item_fav:hover, .book-card_fav:hover { border-color: var(--color-coral); color: var(--color-coral); }
.search-empty_btn:hover { background: var(--color-primary-hover); }
.pagination_num:hover { border-color: var(--color-primary); color: var(--color-primary); }
.pagination_num-active:hover { color: var(--color-canvas); }
.pagination_arrow:hover { border-color: var(--color-primary); color: var(--color-primary); }
.pagination_arrow:disabled:hover { border-color: var(--color-border); color: var(--color-border-strong); }
.study-filter_reset:hover { color: var(--color-primary); }
body[data-page="study"] .cat-tab:hover { border-color: var(--color-primary); color: var(--color-primary); }
.study-search_btn:hover { background: var(--color-primary-hover); }
.book-detail_preview:hover { border-color: var(--color-primary); color: var(--color-primary); }
.book-detail_meta-toggle:hover { color: var(--color-primary); }
.book-quick_btn:hover { border-color: var(--color-primary); box-shadow: var(--shadow-lift-blue); transform: translateY(-2px); }
.book-detail_icon-btn:hover { border-color: var(--color-primary); color: var(--color-primary); }
.book-detail_fav:hover { border-color: var(--color-coral); color: var(--color-coral); }
.book-detail_material:hover { color: var(--color-primary); transform: translateY(-2px); }
.book-detail_material:hover .book-detail_material-download { color: var(--color-primary); }
.book-detail_buy:not(.book-detail_buy-sold):hover { background: var(--color-primary-hover); } /* 절판(비활성) 버튼은 hover 반응 제외 */
body[data-page="book-detail"] .book-detail_lecture:hover, body[data-page="book-detail"] .book-detail_ebook:hover { border-color: var(--color-primary); color: var(--color-primary); }
.related-scrollbar_thumb:hover, .drag-scrollbar_thumb:hover { background: var(--color-gray-400); }
.cardnews-card:hover { transform: translateY(-2px); box-shadow: var(--shadow-soft); }
.cardnews-lightbox_close:hover { background: rgba(255,255,255,0.18); }
.cardnews-lightbox_nav:hover { background: rgba(0,0,0,0.65); }
.toast_link:hover { background: rgba(255,255,255,0.3); }
.book-tabs_link:not(.book-tabs_link-active):hover { background: var(--color-border); color: var(--color-ink); } /* 활성 탭 제외 — 검정 채움을 호버가 되돌리면 흰 글자가 묻힌다 */
.material-item:hover { border-color: var(--color-border-strong); background: var(--color-surface-cool); }
.material-item_btn:hover { border-color: var(--color-primary); color: var(--color-primary); }
.material-item_btn-primary:hover { background: var(--color-primary-hover); border-color: var(--color-primary-hover); color: var(--color-canvas); }
a.material-item:hover .material-item_btn { border-color: var(--color-primary); color: var(--color-primary); }
.mp3-player_btn:hover { background: var(--color-tint-50); color: var(--color-primary); }
.mp3-player_btn-play:hover { background: var(--color-primary-hover); color: var(--color-canvas); transform: scale(1.06); }
.mp3-player_noise:hover { border-color: var(--color-primary); color: var(--color-primary); }
.mp3-player_noise.is-sounding:hover { background: var(--color-primary-hover); color: var(--color-canvas); } /* 소음 출력 중 — 글자가 파란 배경에 묻히지 않게 흰색 유지 */
.mp3-select:hover { border-color: var(--color-primary); }
.word-wizard_banner:hover { transform: translateY(-2px); box-shadow: var(--shadow-soft); }
.word-wizard_banner:hover .word-wizard_cta svg { transform: translateX(4px); }
.mp3-list_zip:hover { border-color: var(--color-primary); color: var(--color-primary); }
.mp3-track:hover { background: var(--color-surface-cool); }
.mp3-track_play:hover { background: var(--color-primary); color: var(--color-canvas); }
.lecture-item:hover { border-color: var(--color-border-strong); background: var(--color-surface-cool); }
.lecture-item_btn:hover { border-color: var(--color-primary); color: var(--color-primary); }
.lecture-feature_poster:hover .lecture-card_play { background: var(--color-primary); }
.lecture-row_link:hover { background: var(--color-surface-cool); }
.lecture-row_link:hover .lecture-row_play { background: var(--color-primary); color: var(--color-canvas); }
.daily-today_cta:hover { background: var(--color-primary-hover); }
.daily-nav_item:hover { background: var(--color-surface-cool); color: var(--color-primary); }
.media-card:hover { transform: translateY(-3px); box-shadow: var(--shadow-floating); }
.series-card:hover { border-color: var(--color-primary); box-shadow: var(--shadow-soft); }
.series-card_more:hover { color: var(--color-primary); }
.series-card_list a:hover { color: var(--color-primary); }
.daily-list_back-link:hover { border-color: var(--color-primary); color: var(--color-primary); }
.daily-row:hover { background: var(--color-surface-cool); }
.daily-detail_print:hover { border-color: var(--color-primary); color: var(--color-primary); }
.daily-audio_play:hover { background: var(--color-primary-hover); }
.daily-detail_banner:hover { transform: translateY(-2px); }
.daily-detail_nav-link:hover { color: var(--color-primary); }
.daily-detail_nav-list:hover { border-color: var(--color-primary); color: var(--color-primary); }
.lecture-hero_stage:hover img { transform: scale(1.04); }
.lecture-hero_stage:hover .lecture-card_play { background: var(--color-primary); }
.lecture-hero_stripname:hover { color: var(--color-primary); }
.video-modal_item:hover { background: var(--color-dark-bg); }
.video-modal_close:hover { background: rgba(0,0,0,0.65); }
body[data-page="free-lecture"] .cat-tab:not(.cat-tab-active):hover { background: var(--color-dark-surface); border-color: var(--color-primary); color: var(--color-dark-text); }
.lecture-card_book:hover { color: var(--color-primary); }
.cs-nav_link:hover { color: var(--color-primary); }
.faq-section .cat-tab:hover { border-color: var(--color-primary); color: var(--color-primary); }
.faq-section .cat-tab:hover em { color: var(--color-primary); }
.faq-item_q:hover .faq-item_text { color: var(--color-primary); }
.faq-section .page-cta_btn:hover { transform: none; box-shadow: none; background: var(--color-primary-hover); }
.faq-section .page-cta_btn-ghost:hover { background: var(--color-canvas); border-color: var(--color-primary); color: var(--color-primary); }
.inquiry-site_link:hover { background: var(--color-primary); color: var(--color-canvas); }
.inquiry-faq-link:hover, .cs-head_link:hover { border-color: var(--color-primary); color: var(--color-primary); }
.inquiry-file_btn:hover { background: var(--color-border); }
.inquiry-submit_btn:hover { background: var(--color-primary-hover); }
.notice-table_link:hover { color: var(--color-primary); }
.notice-search_btn:hover { background: var(--color-primary-hover); }
.notice-view_list-btn:hover { border-color: var(--color-primary); color: var(--color-primary); }
.event-card:hover .event-card_thumb img { transform: scale(1.03); }
.event-card:hover .event-card_title { color: var(--color-primary); }
.event-card:hover .event-card_win svg { transform: translateX(3px); }
.mypage-empty_cta:hover { background: var(--color-primary-hover); }
.manu-down:hover { background: var(--color-black); }
.mypage-hero_wish:hover { transform: translateY(-2px); }
.mypage-result-btn:hover { background: var(--color-black); }
.mypage-inq_title:hover { color: var(--color-primary); }
.mypage-inq_file:hover { border-color: var(--color-primary); color: var(--color-primary); }
.mypage-inq_del:hover { border-color: var(--color-gray-600); color: var(--color-ink); }
.mypage-hero_wish:hover .mypage-hero_wish-go { color: var(--color-primary); }
.mypage-menu_btn:hover { border-color: var(--color-primary); transform: translateY(-2px); }
  .consent-accordion_head:hover { border-color: var(--color-border-strong); }
  .consent-accordion_head:has(.consent-allbtn_input:checked):hover { border-color: var(--color-primary-hover); }
  .consent-accordion_view:hover { color: var(--color-primary); }
  .consent-modal_agree:hover { background: var(--color-black); }
.gift-app_store:hover { border-color: var(--color-primary); color: var(--color-primary); }
.gift-card_link:hover { border-color: var(--color-primary); color: var(--color-primary); }
.gift-card_link:hover svg { color: var(--color-primary); }
.gift-card_lecture:hover { background: var(--color-primary-hover); }
.alt-hero_btn:hover { background: var(--color-primary-hover); transform: translateY(-2px); }
.alt-hero_link:hover { color: var(--color-primary); }
.alt-fixed-cta_btn:hover { background: var(--color-primary-hover); }
.alt-fixed-cta_btn:hover::before { opacity: 0.55; }
.alt-fixed-cta_btn:hover .alt-fixed-cta_arrow { transform: translateX(3px); }
.alt-steps_link:hover { transform: translateY(-2px); box-shadow: var(--shadow-lift-blue); }
}

/* ======== Japanese Page ======== */
/* ── 교재 그리드 ── */
body[data-page="japanese"] .book-grid { grid-template-columns: repeat(4, 1fr); } /* 웹 전용 테스트 — 공통 6열 대신 4열로 카드를 크게 */

/* ======== Chinese Page ======== */
/* ── 교재 그리드 ── */
body[data-page="chinese"] .book-grid { grid-template-columns: repeat(5, 1fr); } /* 웹 전용 — 공통 6열 대신 5열 */

/* ======== AI Leveltest Page ======== */
/* 구 페이지(/customer/ai_leveltest.asp)를 디자인 시스템에 맞춰 재구성한 소개 페이지 — 헤더·푸터 외에는 단독 콘텐츠 */

/* ── 히어로 — 이미지 없이 타이포로만 세우는 구조 (타이틀이 화면의 주인공) ── */
.alt-hero { padding: 72px 0 var(--space-4xl); background: linear-gradient(180deg, var(--color-tint-100), var(--color-canvas)); text-align: center; }
.alt-hero_eyebrow { display: inline-flex; align-items: center; gap: var(--space-sm); font-size: var(--text-md); font-weight: var(--font-semibold); color: var(--color-gray-700); letter-spacing: -0.3px; }
.alt-hero_tag { display: inline-flex; align-items: center; height: 24px; padding: 0 10px; background: var(--color-primary); border-radius: var(--radius-pill); font-size: var(--text-2xs); font-weight: var(--font-bold); color: var(--color-canvas); letter-spacing: 0; }
.alt-hero_title { margin-top: var(--space-base); font-size: var(--text-6xl); font-weight: var(--font-bold); color: var(--color-ink); line-height: 1.25; letter-spacing: -1.6px; }
.alt-hero_title strong { font-weight: var(--font-bold); color: var(--color-primary); }
.alt-hero_lead { margin-top: var(--space-xl); font-size: var(--text-lg); color: var(--color-gray-600); line-height: 1.7; letter-spacing: -0.3px; }
.alt-hero_lead strong { font-weight: var(--font-semibold); color: var(--color-primary); }
/* 핵심 지표 3종 — 세로 구분선으로 묶어 한 덩어리로 읽히게 */
.alt-hero_stats { display: inline-flex; align-items: stretch; gap: var(--space-3xl); margin-top: var(--space-3xl); padding: var(--space-xl) var(--space-4xl); background: var(--color-canvas); border: 1px solid var(--color-line); border-radius: var(--radius-xl); box-shadow: var(--shadow-cover); }
.alt-hero_stat { display: flex; flex-direction: column; align-items: center; gap: var(--space-xs); }
.alt-hero_stat + .alt-hero_stat { padding-left: var(--space-3xl); border-left: 1px solid var(--color-line); }
.alt-hero_stat dt { font-size: var(--text-xs); color: var(--color-gray-500); letter-spacing: -0.2px; }
.alt-hero_stat dd { font-size: var(--text-4xl); font-weight: var(--font-bold); color: var(--color-primary); letter-spacing: -1px; line-height: 1.1; }
.alt-hero_stat dd em { margin-left: 2px; font-size: var(--text-md); font-style: normal; font-weight: var(--font-semibold); color: var(--color-gray-700); letter-spacing: -0.2px; }
/* 버튼과 보조 링크를 나란히 두면 주 버튼이 중앙에서 밀려 보여 세로로 쌓는다 (둘 다 정중앙) */
.alt-hero_actions { display: flex; flex-direction: column; align-items: center; gap: var(--space-base); margin-top: var(--space-3xl); }
.alt-hero_btn { display: inline-flex; align-items: center; justify-content: center; min-width: 280px; height: 60px; padding: 0 var(--space-4xl); background: var(--color-primary); border: none; border-radius: var(--radius-lg); font-size: var(--text-lg); font-weight: var(--font-bold); color: var(--color-canvas); letter-spacing: -0.3px; cursor: pointer; transition: background var(--duration-base) var(--ease-default), transform var(--duration-base) var(--ease-out); }
.alt-hero_link { display: inline-flex; align-items: center; gap: var(--space-xs); font-size: var(--text-sm); font-weight: var(--font-semibold); color: var(--color-gray-500); letter-spacing: -0.3px; transition: color var(--duration-base) var(--ease-default); }
.alt-hero_link svg { width: 16px; height: 16px; }
.alt-hero_desc { margin-top: var(--space-4xl); font-size: var(--text-lg); font-weight: var(--font-medium); color: var(--color-gray-700); letter-spacing: -0.3px; }
/* 특징 4종 */
.alt-feature { display: grid; grid-template-columns: repeat(4, 1fr); gap: var(--space-lg); margin-top: var(--space-3xl); }
.alt-feature_item { display: flex; flex-direction: column; align-items: center; gap: var(--space-xs); padding: var(--space-xl) var(--space-base); background: var(--color-canvas); border: 1px solid var(--color-line); border-radius: var(--radius-lg); box-shadow: var(--shadow-cover); }
.alt-feature_item img { width: 48px; height: 48px; margin-bottom: var(--space-xs); }
.alt-feature_sub { font-size: var(--text-xs); color: var(--color-gray-500); letter-spacing: -0.2px; }
.alt-feature_main { font-size: var(--text-md); font-weight: var(--font-bold); color: var(--color-ink); letter-spacing: -0.3px; }

/* ── 공통 섹션 타이틀 ── */
.alt-badge { display: inline-flex; align-items: center; height: 30px; padding: 0 var(--space-base); background: var(--color-primary); border-radius: var(--radius-pill); font-size: var(--text-xs); font-weight: var(--font-bold); color: var(--color-canvas); letter-spacing: 0.5px; }
.alt-section_title { margin-top: var(--space-base); font-size: var(--text-6xl); font-weight: var(--font-bold); color: var(--color-ink); line-height: 1.3; letter-spacing: -1px; }
.alt-section_title strong { font-weight: var(--font-bold); color: var(--color-primary); }
.alt-section_desc { margin-top: var(--space-base); font-size: var(--text-lg); color: var(--color-gray-600); line-height: 1.7; letter-spacing: -0.3px; }
.alt-section_desc strong { font-weight: var(--font-bold); color: var(--color-ink); }
.alt-section_desc-mt { margin-top: var(--space-4xl); }
.alt-about, .alt-comp, .alt-preview, .alt-certif { text-align: center; }
/* 앵커 이동 시 sticky 헤더(194px)가 섹션 타이틀을 가리지 않게 — STEP 섹션이 타이틀부터 보이도록 */
#alt-step1, #alt-step2, #alt-step3 { scroll-margin-top: 210px; }
.alt-comp { background: var(--color-surface-light); }

/* ── 스크롤 진입 리빌 — 이 페이지 스코프에서만 복원.
   (전역 리빌은 2026-07-24 첫 화면 비어 보임 문제로 제거 — 파일 상단 주석 참조.
    이 페이지는 첫 화면(히어로)에 훅을 붙이지 않아 그 문제가 없다. 옵저버는 main.js 공통 리빌 블록 재사용) ── */
body[data-page="ai-leveltest"] [data-reveal]:not(.is-revealed), body[data-page="ai-leveltest"] [data-reveal-stagger]:not(.is-revealed) > * { opacity: 0; transform: translateY(16px); }
body[data-page="ai-leveltest"] [data-reveal], body[data-page="ai-leveltest"] [data-reveal-stagger] > * { transition: opacity 0.5s var(--ease-out), transform 0.5s var(--ease-out); }
@media (prefers-reduced-motion: reduce) { body[data-page="ai-leveltest"] [data-reveal], body[data-page="ai-leveltest"] [data-reveal-stagger] > * { transition: none; } }

/* ── 하단 고정 응시 바 — 페이지 어디를 보고 있든 응시 경로를 유지 (처음부터 항상 노출) ── */
.alt-fixed-cta { position: fixed; left: 0; right: 0; bottom: 0; z-index: var(--z-sticky); box-shadow: var(--shadow-floating); }
@media (prefers-reduced-motion: reduce) { .alt-fixed-cta_btn::before, .alt-fixed-cta_btn::after { animation: none; } }
/* 바 전체가 하나의 버튼 — 안내 문구 없이 전폭을 클릭 영역으로 사용 */
.alt-fixed-cta_btn { position: relative; z-index: 0; display: flex; align-items: center; justify-content: center; gap: var(--space-sm); overflow: hidden; width: 100%; height: 72px; padding: 0; background: var(--color-primary); border: none; font-size: var(--text-xl); font-weight: var(--font-bold); color: var(--color-canvas); letter-spacing: -0.3px; cursor: pointer; transition: background var(--duration-base) var(--ease-default); }
.alt-fixed-cta_badge { padding: 3px 10px; background: var(--color-canvas); border-radius: var(--radius-pill); font-size: var(--text-xs); font-weight: var(--font-bold); font-style: normal; color: var(--color-primary); }
.alt-fixed-cta_arrow { width: 20px; height: 20px; transition: transform var(--duration-base) var(--ease-default); }
/* AI 느낌의 흐르는 그라데이션 — 애니메이션 규칙(transform/opacity만)에 맞춰 2배 폭 레이어를 translateX로 이동.
   그라데이션 앞뒤 절반이 동일 패턴이라 -50% 지점에서 끊김 없이 루프 */
.alt-fixed-cta_btn::before { content: ""; position: absolute; top: 0; left: 0; z-index: -1; width: 200%; height: 100%; background: linear-gradient(90deg, var(--color-primary) 0%, var(--color-violet) 25%, var(--color-primary) 50%, var(--color-violet) 75%, var(--color-primary) 100%); animation: altCtaFlow 6s linear infinite; transition: opacity var(--duration-base) var(--ease-default); }
@keyframes altCtaFlow { from { transform: translateX(0); } to { transform: translateX(-50%); } }
/* 진입 광택(shine) — 기울인 반투명 흰 띠가 좌→우로 스치고 화면 밖에 멈춤. 계속 반복되면 본문에 집중하기 어려워 2회만 재생 (transform만 애니메이트) */
.alt-fixed-cta_btn::after { content: ""; position: absolute; top: 0; left: -80px; z-index: -1; width: 60px; height: 100%; background: linear-gradient(105deg, transparent 0%, rgba(255, 255, 255, 0.35) 50%, transparent 100%); transform: skewX(-15deg); animation: altCtaShine 3.5s ease-in-out 2 forwards; pointer-events: none; }
@keyframes altCtaShine { 0% { transform: translateX(0) skewX(-15deg); } 45%, 100% { transform: translateX(calc(100vw + 160px)) skewX(-15deg); } }
/* 고정 바가 푸터 마지막 줄을 가리지 않도록 페이지 아래 여백 확보 (바 높이 72px + 여유) */
body[data-page="ai-leveltest"] { padding-bottom: 104px; }

/* ── STEP 바로가기 ── */
.alt-steps { text-align: center; }
.alt-steps_lead { font-size: var(--text-lg); color: var(--color-gray-600); letter-spacing: -0.3px; }
.alt-steps_title { margin-top: var(--space-sm); font-size: var(--text-6xl); font-weight: var(--font-bold); color: var(--color-ink); letter-spacing: -1px; }
.alt-steps_list { display: grid; grid-template-columns: repeat(3, minmax(0, 1fr)); gap: var(--space-lg); margin-top: var(--space-2xl); } /* minmax(0,·) — 긴 어절이 열 최소폭을 밀어올려 카드가 화면 밖으로 넘치는 것 방지 */
/* 카드 배경을 단계마다 한 톤씩 올려 1→2→3 진행감을 준다 (마지막 카드는 프라이머리로 도착점 강조) */
.alt-steps_link { display: flex; flex-direction: column; align-items: center; gap: var(--space-md); padding: var(--space-2xl) var(--space-xl); border-radius: var(--radius-lg); transition: transform var(--duration-base) var(--ease-out), box-shadow var(--duration-base) var(--ease-default); }
.alt-steps_list li:nth-child(1) .alt-steps_link { background: var(--color-tint-50); }
.alt-steps_list li:nth-child(2) .alt-steps_link { background: var(--color-tint-100); }
.alt-steps_list li:nth-child(3) .alt-steps_link { background: var(--color-primary); }
.alt-steps_link em { padding-bottom: var(--space-xs); border-bottom: 1px solid currentColor; font-size: var(--text-sm); font-weight: var(--font-bold); font-style: normal; color: var(--color-primary); letter-spacing: 0.5px; }
.alt-steps_desc { font-size: var(--text-base); font-weight: var(--font-semibold); color: var(--color-ink); line-height: 1.5; letter-spacing: -0.3px; word-break: keep-all; } /* 카드가 좁아져도 어절 중간("싶어/요")에서 끊기지 않게 */
.alt-steps_more { display: inline-flex; align-items: center; gap: var(--space-xs); flex-shrink: 0; height: 36px; margin-top: var(--space-xs); padding: 0 var(--space-lg); background: var(--color-canvas); border: 1px solid var(--color-line); border-radius: var(--radius-pill); font-size: var(--text-sm); font-weight: var(--font-semibold); color: var(--color-primary); white-space: nowrap; } /* 알약 버튼 라벨은 줄바꿈 금지 — 좁은 카드에서 2줄이 되며 알약이 찌그러지던 문제 */
.alt-steps_more svg { width: 14px; height: 14px; }
.alt-steps_list li:nth-child(3) .alt-steps_link em, .alt-steps_list li:nth-child(3) .alt-steps_desc { color: var(--color-canvas); }

/* ── STEP 1 롤링 (3장 중 1장 노출 · 5초 자동) ── */
/* 특징 3종 — 한눈에 비교되도록 롤링 없이 나란히 배치 */
.alt-about_list { display: grid; grid-template-columns: repeat(3, 1fr); gap: var(--space-lg); margin-top: var(--space-3xl); }
.alt-about_item { display: flex; flex-direction: column; align-items: center; gap: var(--space-base); padding: var(--space-2xl) var(--space-xl); background: var(--color-canvas); border: 1px solid var(--color-line); border-radius: var(--radius-xl); box-shadow: var(--shadow-cover); }
.alt-about_item img { width: 72px; height: 72px; }
.alt-about_name { font-size: var(--text-lg); font-weight: var(--font-bold); color: var(--color-ink); line-height: 1.4; letter-spacing: -0.4px; }
.alt-about_text { font-size: var(--text-sm); color: var(--color-gray-600); line-height: 1.7; letter-spacing: -0.2px; }
.alt-about_text strong { font-weight: var(--font-bold); color: var(--color-primary); }

/* ── STEP 2 구성 ── */
.alt-comp_list { display: grid; grid-template-columns: repeat(5, 1fr); gap: var(--space-lg); margin-top: var(--space-2xl); }
.alt-comp_item { display: flex; flex-direction: column; align-items: center; gap: var(--space-xs); padding: var(--space-xl) var(--space-base); background: var(--color-canvas); border: 1px solid var(--color-line); border-radius: var(--radius-lg); }
/* 아이콘은 브랜드 틴트 원형 칩 안에 — 학습자료 버튼(.book-detail_material)과 같은 결 */
.alt-comp_icon { display: flex; align-items: center; justify-content: center; width: 56px; height: 56px; margin-bottom: var(--space-sm); background: var(--color-tint-100); border-radius: 50%; color: var(--color-primary); }
.alt-comp_icon svg { width: 26px; height: 26px; stroke-width: 1.8; }
.alt-comp_item strong { font-size: var(--text-md); font-weight: var(--font-bold); color: var(--color-ink); letter-spacing: -0.3px; }
.alt-comp_count { font-size: var(--text-sm); color: var(--color-primary); font-weight: var(--font-semibold); letter-spacing: -0.2px; }
/* 응시 후 받는 것 — 설명(좌) + 실제 결과 화면(우) 2단 카드, 두 번째는 좌우를 뒤집어 리듬을 준다 */
.alt-result { display: flex; flex-direction: column; gap: var(--space-2xl); margin-top: var(--space-2xl); text-align: left; }
.alt-result_card { display: grid; grid-template-columns: 0.85fr 1.15fr; align-items: center; gap: var(--space-4xl); overflow: hidden; background: var(--color-canvas); border: 1px solid var(--color-line); border-radius: var(--radius-xl); } /* 패딩은 텍스트(_body)에만 — 이미지 패널(_shot)은 카드 높이에 꽉 차게(full-bleed) 붙여 어중간한 상하 여백 제거 */
.alt-result_card-reverse { grid-template-columns: 1.15fr 0.85fr; } /* 이미지가 왼쪽으로 가는 카드 — 열 비율도 함께 반전해 위 카드와 이미지 패널 폭을 동일하게 맞춤 */
.alt-result_card-reverse .alt-result_body { order: 2; }
.alt-result_card-reverse .alt-result_shot { order: 1; }
.alt-result_body { padding: var(--space-3xl); }
.alt-result_label { display: flex; align-items: center; gap: var(--space-xs); font-size: var(--text-sm); font-weight: var(--font-bold); color: var(--color-primary); letter-spacing: -0.2px; }
.alt-result_label svg { width: 16px; height: 16px; }
/* 순번 칩 — 받는 것이 2가지임을 번호로 각인 (구성 아이콘 칩과 같은 틴트 결) */
.alt-result_num { display: inline-flex; align-items: center; justify-content: center; width: 28px; height: 28px; margin-right: var(--space-xs); background: var(--color-tint-100); border-radius: var(--radius-sm); font-size: var(--text-xs); font-weight: var(--font-bold); color: var(--color-primary); letter-spacing: 0; }
.alt-result_title { margin-top: var(--space-sm); font-size: var(--text-2xl); font-weight: var(--font-bold); color: var(--color-ink); line-height: 1.4; letter-spacing: -0.5px; }
.alt-result_desc { margin-top: var(--space-base); font-size: var(--text-sm); color: var(--color-gray-600); line-height: 1.7; letter-spacing: -0.2px; }
.alt-result_points { display: flex; flex-direction: column; gap: var(--space-sm); margin-top: var(--space-lg); }
.alt-result_points li { display: flex; align-items: flex-start; gap: var(--space-sm); font-size: var(--text-sm); color: var(--color-gray-700); line-height: 1.6; letter-spacing: -0.2px; }
.alt-result_points li svg { flex-shrink: 0; width: 16px; height: 16px; margin-top: 3px; color: var(--color-primary); stroke-width: 2.5; }
/* 스크린샷은 틴트 무대 위에 — 흰 카드에 흰 캡처가 바로 붙으면 경계가 사라져 떠 보이게 받침을 깐다 */
.alt-result_shot { display: flex; align-self: stretch; align-items: center; justify-content: center; padding: var(--space-xl); background: var(--color-tint-50); }
.alt-result_shot img { width: auto; max-width: 100%; height: auto; max-height: 400px; } /* 투명 배경 PNG — 그림자·라운드 없음. 두 카드 원본 높이가 586px로 동일하므로 공통 상한으로 같은 크기 렌더링 */

/* ── STEP 3 문제 미리보기 ── */
.alt-preview_swipe { overflow: hidden; } /* 관성 슬라이드 뷰포트 — 웹은 5열 그리드가 딱 맞아 무해 (book-carousel-swipe와 동일 방식) */
.alt-preview_list { display: grid; grid-template-columns: repeat(5, 1fr); gap: var(--space-xl); margin-top: var(--space-3xl); }
.alt-preview_item { display: flex; flex-direction: column; align-items: center; gap: var(--space-sm); }
.alt-preview_label { display: inline-flex; align-items: center; height: 32px; padding: 0 var(--space-base); background: var(--color-tint-100); border-radius: var(--radius-pill); font-size: var(--text-sm); font-weight: var(--font-bold); color: var(--color-primary); letter-spacing: -0.2px; }
.alt-preview_desc { min-height: 40px; font-size: var(--text-xs); color: var(--color-gray-600); line-height: 1.5; letter-spacing: -0.2px; }
.alt-preview_item img { width: 100%; height: auto; border: 1px solid var(--color-line); border-radius: var(--radius-lg); }

/* ── 인증 ── */
.alt-certif { background: var(--color-tint-100); } /* 브랜드 블루 틴트 — 아래 유의사항(.alt-notice) 연회색과 구분 */
.alt-certif_lead { font-size: var(--text-md); font-weight: var(--font-semibold); color: var(--color-primary); letter-spacing: -0.3px; }
.alt-certif_logos { display: flex; align-items: center; justify-content: center; gap: var(--space-3xl); margin-top: var(--space-2xl); padding: var(--space-2xl) var(--space-3xl); background: var(--color-canvas); border-radius: var(--radius-xl); }
.alt-certif_logos img { height: 48px; width: auto; }
.alt-certif_note { margin-top: var(--space-lg); font-size: var(--text-sm); color: var(--color-gray-600); letter-spacing: -0.2px; }
.alt-certif_patent { margin-top: var(--space-sm); font-size: var(--text-xs); color: var(--color-gray-500); line-height: 1.6; letter-spacing: -0.2px; }

/* ── 유의사항 ── */
.alt-notice { background: var(--color-surface-cool); } /* 위 인증(.alt-certif) 구획과 같은 연회색 풀블리드 배경 */
.alt-notice_box { padding: var(--space-3xl); }
.alt-notice_title { font-size: var(--text-xl); font-weight: var(--font-bold); color: var(--color-ink); letter-spacing: -0.4px; }
.alt-notice_sub { margin-top: var(--space-xl); font-size: var(--text-md); font-weight: var(--font-semibold); color: var(--color-gray-700); letter-spacing: -0.3px; }
.alt-notice_list { margin-top: var(--space-base); }
.alt-notice_list li { position: relative; padding-left: var(--space-base); font-size: var(--text-sm); color: var(--color-gray-600); line-height: 1.8; letter-spacing: -0.2px; }
.alt-notice_list li::before { content: ""; position: absolute; left: 0; top: 12px; width: 3px; height: 3px; background: var(--color-gray-400); border-radius: 50%; }

@media (max-width: 1279px) {
  .container { padding: 0 24px; }
  .lecture-hero_teachers { display: none; } /* 강사 이미지는 데스크탑(1280px~) 전용 — 태블릿부터 미노출 */
  .top-banner_close { right: 20px; }
  /* 전체보기 배너: 1280px 미만은 세로 스택(배너 full-width로 잘림 없이, 신간 카드는 아래) */
  .cat-banner_layout { flex-direction: column; }
  .cat-banner_main { align-self: stretch; max-width: none; border-radius: var(--radius-xl); } /* 데스크탑용 924px 상한 해제 — 태블릿 세로 배치는 기존대로 전체 폭 유지 · 라운드는 웹과 같은 xl */
  .cat-banner_side { flex: 0 0 auto; border-radius: var(--radius-xl); }
  /* 헤더 검색창 — 좁은 폭에서 과하게 작아지지 않도록 간격 축소 (광고배너는 유지) */
  .header-main { gap: var(--space-xl); }
  .header-search { gap: var(--space-base); }
  .header-search_bar { max-width: none; }
  /* 검색창 텍스트가 길어 잘릴 때 GNB처럼 흰 그라데이션 페이드 (돋보기 버튼 왼쪽, 클릭 방해 없음 · 입력 중엔 숨김) */
  .header-search_bar::after { content: ''; position: absolute; top: 2px; bottom: 2px; right: 52px; width: 28px; background: linear-gradient(to right, rgba(255,255,255,0), var(--color-canvas)); pointer-events: none; transition: opacity var(--duration-base) var(--ease-default); }
  .header-search_bar:focus-within::after { opacity: 0; }
  /* 우측 유틸(로그인·자주묻는질문·MP3) — 모바일 MP3 아이콘 스타일과 동일하게 아이콘만 노출 */
  .header-util_link, .header-util_mp3 { justify-content: center; width: 40px; height: 40px; padding: 0; gap: 0; background: none; border-radius: 0; color: var(--color-ink); }
  .header-util_mp3:hover { background: none; }
  .header-util_link span, .header-util_mp3 span { display: none; }
  .header-util_link svg, .header-util_mp3 svg { width: 24px; height: 24px; color: var(--color-ink); }
  .header-util_mp3 .mp3-roll { display: none; } /* 태블릿 아이콘 전용 버튼 — 롤링 텍스트 숨김 */
  /* 푸터: 태블릿은 브랜드를 한 줄로, 컬럼 그룹은 아래 줄로 (좁은 폭에서 링크 글자가 세로로 눌리는 것 방지) */
  .footer-inner { flex-wrap: wrap; }
  .footer-brand { flex-basis: 100%; max-width: 100%; margin-bottom: var(--space-xl); }
  .footer-cols { margin-left: 0; gap: var(--space-3xl); }
  .footer-col_link { white-space: nowrap; }
  /* 수상 배지 띠 — 설명은 한 줄씩 그대로 두고(줄바꿈하면 "1위"처럼 한 단어만 떨어진다) 그림 높이·칸 여백을 줄여 768px 폭에도 들어가게 한다 */
  .footer-award { padding: 0 var(--space-sm); }
  .footer-award_img { height: 46px; }
  .footer-award_img-large { height: 54px; margin: calc(var(--space-xs) * -1) 0; } /* 토익 배지만 46 → 54px. 늘어난 8px 는 위아래 음수 마진(-4px씩)으로 걷어내 띠 높이는 그대로 둔다 */
  .book-grid { grid-template-columns: repeat(auto-fit, 160px); justify-content: space-between; gap: var(--space-4xl) var(--space-lg); } /* 카드 폭 고정(160px) · 행 간격 48px — 윗줄 가격·하트와 아랫줄 표지가 붙어 보이지 않도록 */
  /* 베스트셀러·신간·무료인강·커뮤니티: 태블릿도 한 줄 스와이프 (드래그·바운스 · 카드는 모바일보다 크게) */
  .book-carousel-swipe .book-grid:not([hidden]), .book-carousel-swipe .lecture-grid:not([hidden]), .book-carousel-swipe .community-grid:not([hidden]) { display: flex; flex-wrap: nowrap; gap: var(--space-lg); cursor: grab; touch-action: pan-y; will-change: transform; }
  .book-carousel-swipe .book-grid.is-dragging, .book-carousel-swipe .lecture-grid.is-dragging, .book-carousel-swipe .community-grid.is-dragging { cursor: grabbing; user-select: none; }
  .book-carousel-swipe .book-card { flex: 0 0 150px; min-width: 0; } /* min-width:0 — 긴 저자명이 카드 폭을 밀어내 표지까지 늘어나는 것 방지(모바일/연관도서와 동일) */
  .book-carousel-swipe .lecture-card { flex: 0 0 280px; }
  .book-carousel-swipe .community-card { flex: 0 0 320px; }
  /* 스트립 배너: 태블릿은 2열 유지하되 높이·타이포 축소 */
  .strip-banner_link { height: 120px; padding: 0 var(--space-xl); }
  .strip-banner_title { font-size: var(--text-base); }
  .strip-banner_sub { font-size: var(--text-2xs); }
  .strip-banner_cover { height: 92px; }
  /* 공지사항 — 타이틀 영역 검색창: 좁은 폭에선 제목 줄 아래로 내려 우측 정렬 */
  body[data-page="notice"] .cs-content_head { flex-wrap: wrap; }
  body[data-page="notice"] .notice-search { flex-basis: 100%; justify-content: flex-end; margin-top: var(--space-base); margin-left: 0; }
  /* 1:1 문의 — '내 문의 내역'은 제목 줄 우측 유지, 폭이 부족할 때만 아래 줄로 내려감 */
  body[data-page="inquiry"] .cs-content_head { flex-wrap: wrap; gap: var(--space-sm) var(--space-md); }
  body[data-page="inquiry"] .cs-head_link { margin-left: auto; }
  .event-grid { grid-template-columns: repeat(2, 1fr); } /* 태블릿은 2열 고정 — 자동 배치로는 좁은 폭에서 카드가 과하게 커진다 */
  .search-layout { gap: var(--space-xl); }
  .search-filter { flex-basis: 200px; }
  .mp3-layout { gap: var(--space-xl); }
  body[data-page="free-lecture"] .lecture-grid { grid-template-columns: repeat(3, 1fr); }
  .mp3-layout_stream { flex-basis: 360px; }
  .mp3-player_controls { gap: var(--space-sm); } /* 커진 버튼(54px×4+60px)이 좁아진 카드에 들어가도록 간격 축소 */
  .lecture-feature { grid-template-columns: 360px minmax(0, 1fr); gap: var(--space-xl); }
  /* 데일리 학습 — 태블릿은 상단 카드 2열, 좌측 메뉴 폭 축소 */
  .daily-layout { grid-template-columns: minmax(0, 1fr); gap: var(--space-xl); }
  .daily-side { display: none; }
  /* 2뎁스 시리즈 칩 — 좌측 전체 시리즈 메뉴가 좁아지는 구간부터 칩으로 고른다 */
  .daily-chips { display: flex; flex-wrap: nowrap; gap: 8px; margin-bottom: var(--space-lg); overflow-x: auto; scrollbar-width: none; -webkit-overflow-scrolling: touch; } /* 한 줄 유지 — 넘치면 좌우 스와이프 */
  .daily-chips::-webkit-scrollbar { display: none; }
  .daily-chips .filter-chip { display: inline-flex; align-items: center; flex-shrink: 0; height: 36px; padding: 0 14px; font-size: var(--text-xs); white-space: nowrap; }
  .daily-chips_item[aria-current="true"] { background: var(--color-tint-50); border-color: var(--color-primary); color: var(--color-primary); font-weight: var(--font-semibold); } /* 선택 상태 — .filter-chip-selected 와 같은 외형, 활성 표시는 aria-current 로 한다 */
  .daily-today { padding: 24px; }
  .daily-today_title { font-size: var(--text-xl); }
  .media-cards { grid-template-columns: repeat(auto-fit, minmax(200px, 1fr)); gap: var(--space-md); } /* 폭에 따라 4→3열, 상단에서 계속 한눈에 */
  /* 3안 시안 — 태블릿은 좌측 매체 카드 폭 축소 */
  .media-split { grid-template-columns: 240px minmax(0, 1fr); gap: var(--space-xl); }
  .media-card { padding: 18px 16px; }
  .media-card_img { width: 68px; height: 68px; }
  .media-card_expr { font-size: var(--text-lg); }
  .media-card_cta { height: 40px; padding: 0 16px; }
  /* 데일리 인트로 — 태블릿도 매체 3종 고정 3열 유지 */
  .daily-intro-section .media-cards { grid-template-columns: repeat(3, minmax(0, 1fr)); }
  .intro-card_link { padding: 12px 14px; font-size: var(--text-sm); }
  .intro-today { padding: 20px; }
  .intro-today_list { grid-template-columns: repeat(2, minmax(0, 1fr)); }
  .intro-today_item { padding: 12px 14px; }
  .book-list-item_cover { flex-basis: 112px; }
  .book-list-item_cover-wrap { width: 112px; }
  /* 찜 목록 — 카테고리 리스트(.book-carousel.is-list)와 동일: 반응형에선 버튼 숨기고 가격 우측에 원형 하트만 */
  body[data-page="mypage-wish"] .book-list-item_bottom { align-items: center; }
  body[data-page="mypage-wish"] .book-list-item_btn:not(.book-list-item_fav) { display: none; }
  body[data-page="mypage-wish"] .book-list-item_fav { flex: 0 0 32px; width: 32px; height: 32px; padding: 0; border-radius: 50%; }
  body[data-page="mypage-wish"] .book-list-item_fav svg { width: 16px; height: 16px; }
  .lecture-grid { grid-template-columns: repeat(4, 1fr); }
  .community-grid { gap: var(--space-base); }
  body[data-page="lounge"] .community-card { margin-bottom: var(--space-base); } /* 메이슨리는 세로 간격을 카드 여백으로 만든다 — 좁아진 gap과 맞춤 */
  /* 라운지 히어로 말풍선 — 위치가 % 기준이라 태블릿 폭에서는 서로 포개지고 설명 문구까지 덮는다. 데스크탑에서만 띄운다 */
  .lounge-hero_bubbles { display: none; }
  /* 단어 시험 출제 마법사 배너 — 태블릿: 고정 높이 해제 (텍스트 줄바꿈 시 넘침 방지) */
  .word-wizard_banner { height: auto; padding: 20px 28px; }
  .gnb-link { padding: 0 12px; font-size: var(--text-md); }
  .header-main { gap: var(--space-base); } /* 좁은 태블릿(≈800px)에서 헤더 우측 유틸이 넘치지 않게 간격 축소 — 위 .header-main gap:--space-xl 보다 뒤에 있어 1279px 이하 전 구간에 이 값(16px)이 적용된다 */
  .site-toggle { margin-left: calc(var(--space-md) / 2 - var(--space-base)); } /* 태블릿도 웹과 같은 6px 을 띄운다 — .header-main gap(16px)을 걷어내고 6px 만 남긴다. 로고 크기가 웹과 같은 40px 이라 같은 값을 쓴다(로고 높이의 15%) */
  .header-search { min-width: 0; } /* 검색창이 내용 최소폭에 걸리지 않고 줄어들 수 있게 (768px 부근 오버플로 방지) */
  /* 무료인강 히어로 슬라이더 — 태블릿은 기존 폭(61%) 유지 (데스크탑만 52%로 축소) */
  .lecture-hero_slider-peek .lecture-hero_viewport { width: 61%; }
  /* 무료인강 다크 히어로 — 태블릿: 타이틀·글로우 중간값 (데스크탑 46px/480px ↔ 모바일 28px/280px 사이) */
  .lecture-hero_title { font-size: var(--text-6xl); }
  .lecture-hero_glow { width: 360px; height: 360px; }
  /* SNS 라운지 히어로 — 태블릿: 타이틀 축소 + 말풍선 숨김 (절대배치 말풍선이 좁은 폭에서 텍스트와 겹침) */
  .lounge-hero_title { font-size: var(--text-5xl); }
  /* GNB 탭이 화면 폭을 넘치면 가로 스크롤 (모바일과 동일 처리 — 페이지 가로 오버플로 방지) */
  .gnb-nav { flex-wrap: nowrap; overflow-x: auto; white-space: nowrap; scrollbar-width: none; -webkit-overflow-scrolling: touch; }
  .gnb-nav::-webkit-scrollbar { display: none; }
  .gnb-nav li { flex-shrink: 0; }
  /* 잘려 보이는 느낌 보완: 스크롤 여지가 있는 쪽에 흰 그라데이션 (is-fade 클래스는 main.js가 공통 갱신) */
  .gnb-inner { position: relative; }
  .gnb-inner::before, .gnb-inner::after { content: ''; position: absolute; top: 0; bottom: 0; width: 56px; z-index: 1; opacity: 0; transition: opacity var(--duration-base) var(--ease-default); pointer-events: none; }
  .gnb-inner::before { left: 0; background: linear-gradient(to right, var(--color-canvas) 18%, transparent); }
  .gnb-inner::after { right: 40px; background: linear-gradient(to left, var(--color-canvas) 18%, transparent); } /* 40px = 우측 햄버거 버튼 폭 제외 */
  .gnb-inner.is-fade-left::before { opacity: 1; }
  .gnb-inner.is-fade-right::after { opacity: 1; }
  /* 레벨 탭(cat-tabs)도 넘치면 가로 스크롤 (모바일과 동일 처리) */
  .books-section .cat-tabs, body[data-page="lounge"] .cat-tabs, body[data-page="free-lecture"] .cat-tabs { flex-wrap: nowrap; overflow-x: auto; scrollbar-width: none; -webkit-overflow-scrolling: touch; }
  .books-section .cat-tabs::-webkit-scrollbar, body[data-page="lounge"] .cat-tabs::-webkit-scrollbar, body[data-page="free-lecture"] .cat-tabs::-webkit-scrollbar { display: none; }
  .books-section .cat-tab, body[data-page="lounge"] .cat-tab, body[data-page="free-lecture"] .cat-tab { flex-shrink: 0; }
  /* 카테고리 2뎁스 탭 — 웹(494행 블록)과 동일: 활성 칩 블루 채움 + 스크롤 시 헤더 아래 고정 (main.js 가 is-stuck 토글) */
  .books-section .cat-tab-active, body[data-page="lounge"] .cat-tab-active, body[data-page="free-lecture"] .cat-tab-active { background: var(--color-primary); border-color: var(--color-primary); color: var(--color-canvas); }
  .books-section .cat-tab-active em, body[data-page="lounge"] .cat-tab-active em, body[data-page="free-lecture"] .cat-tab-active em { color: var(--color-canvas); }
  .books-section:not(.search-result-section) .cat-tabs.is-stuck { position: fixed; top: 0; left: 0; right: 0; z-index: var(--z-sticky); padding: var(--space-md) 0; background: var(--color-canvas); box-shadow: var(--shadow-soft); }
  .gnb-util-link { padding: 0 10px; }
  .level-grid { grid-template-columns: repeat(2, 1fr); }
  .page-hero_title { font-size: var(--text-5xl); }
  /* 메가 메뉴 — 링크 2열 + 사이드 카드 하단 가로 바 */
  .mega-menu_grid { grid-template-columns: 1fr; gap: var(--space-2xl); }
  .mega-cols { grid-template-columns: repeat(2, 1fr); gap: 24px 40px; }
  .mega-side { display: grid; grid-template-columns: 1fr 1fr; align-items: start; gap: var(--space-xl) var(--space-3xl); padding: var(--space-2xl) var(--space-3xl); } /* 학습지원 | 고객센터 2단(위쪽 맞춤) + SNS 는 아래 전체 폭 줄 */
  .mega-side_social { grid-column: 1 / -1; justify-content: flex-start; gap: var(--space-2xl); padding-top: var(--space-xl); }
  .mega-side_cta { grid-column: 1 / -1; }
  /* 마이페이지 히어로 — 태블릿: 인사말 + 미니멀 문의내역 행 (찜 요약은 웹 전용) · 풀폭 밴드 대신 컨테이너 폭 라운드 카드 */
  .mypage-hero_wish { display: none; }
  .mypage-band { background: none; border-bottom: none; }
  .mypage-hero { flex-wrap: wrap; padding: 20px 24px; background: var(--color-tint-50); border: 1px solid var(--color-line); border-radius: var(--radius-lg); }
  .mypage-hero_name { font-size: var(--text-xl); } /* 반응형 사이즈 업 */
  .mypage-hero_sub { display: block; }
  .mypage-hero_inq { flex: 1 1 100%; margin-top: 4px; padding: 12px 0 0; border-left: none; border-top: 1px solid var(--color-line); } /* 카드 하단 미니멀 행 */
  .mypage-hero_inq .mypage-hero_wish-label { font-size: var(--text-xs); }
  .mypage-hero_inq-count { margin-left: auto; font-size: var(--text-xs); }
  .mypage-hero_inq-count strong { font-size: var(--text-md); }
  body[data-page^="mypage-"] .mypage-band { display: none; } /* 상세 페이지는 히어로 없이 — 허브(mypage)에만 노출 */
  .mypage-menu { grid-template-columns: repeat(3, 1fr); } /* 메뉴 6개 — 태블릿에선 3열 2행 */
  .consent-accordion_item-ad .consent-channel { margin-left: 0; } /* 태블릿부터는 줄바꿈이 잦아 들여쓰기 없이 왼쪽 정렬 */
  /* 사은품 모의고사 — 태블릿: 카드 1열 (2열 유지 시 본문 폭이 너무 좁아짐) */
  .gift-grid { grid-template-columns: 1fr; }
  /* AI 레벨테스트 — 태블릿: 특징 4종·구성 5종을 2열로 접고, 문제 미리보기는 3열 · 슬라이더 화살표를 안쪽으로 */
  .alt-hero { padding: var(--space-4xl) 0; }
  .alt-hero_title { font-size: var(--text-5xl); letter-spacing: -1.2px; }
  .alt-hero_lead { font-size: var(--text-md); }
  .alt-hero_stats { gap: var(--space-2xl); padding: var(--space-lg) var(--space-2xl); }
  .alt-hero_stat + .alt-hero_stat { padding-left: var(--space-2xl); }
  .alt-hero_stat dd { font-size: var(--text-3xl); }
  .alt-feature { grid-template-columns: repeat(2, 1fr); }
  .alt-comp_list { grid-template-columns: repeat(3, 1fr); }
  /* 결과 카드 — 태블릿: 2단 유지 시 텍스트 열이 너무 좁아 잘게 줄바꿈됨 → 1단 스택(텍스트 위·이미지 아래) */
  .alt-result_card, .alt-result_card-reverse { grid-template-columns: 1fr; gap: var(--space-xl); }
  .alt-result_card-reverse .alt-result_body { order: 0; }
  .alt-result_card-reverse .alt-result_shot { order: 0; }
  .alt-result_body { padding-bottom: 0; }
  /* 문제 화면 미리보기 — 태블릿: 그리드 대신 관성 드래그 슬라이드 (JS createInertiaSlider가 트랙을 transform 이동) */
  .alt-preview_list { display: flex; flex-wrap: nowrap; gap: var(--space-lg); cursor: grab; touch-action: pan-y; will-change: transform; }
  .alt-preview_list.is-dragging { cursor: grabbing; user-select: none; }
  .alt-preview_item { flex: 0 0 240px; }
  .alt-about_item { padding: var(--space-xl) var(--space-base); }
  .alt-section_title, .alt-steps_title { font-size: var(--text-5xl); } /* 태블릿은 한 단계 낮춰 시원함 유지 */
}

/* ── 태블릿(768~1279px) 헤더 — 웹과 같은 구성 ──
   모든 화면에서 빨간 MP3 버튼이 보이도록, 위 1279px 이하 공통 규칙의 "아이콘만" 유틸을 태블릿에서만 웹 모양(글자 + 빨간 버튼)으로 되돌린다.
   자리를 내기 위해 검색창 옆 광고배너는 숨기고 검색창이 남는 폭을 쓴다. 모바일(767px 이하)은 공통 규칙 그대로 */
@media (min-width: 768px) and (max-width: 1279px) {
  .header-search_ad { display: none; }
  .header-util_link { width: auto; height: auto; gap: 6px; color: var(--color-gray-700); }
  .header-util_link span { display: inline; }
  .header-util_link svg { width: 16px; height: 16px; color: inherit; }
  .header-util_mp3 { width: auto; padding: 0 16px; gap: var(--space-sm); background: var(--color-mp3); border-radius: var(--radius-lg); color: var(--color-canvas); } /* 슬림 바에서는 웹과 같이 위 슬림 규칙(좌우 12px)이 이긴다 */
  .header-util_mp3:hover { background: var(--color-mp3-hover); }
  .header-util_mp3 svg { width: 16px; height: 16px; color: var(--color-canvas); }
  /* 롤링 텍스트(MP3 음원 ↔ 학습자료실) — 공통 규칙의 span 숨김에 같이 걸려 있어 다시 켠다 */
  .header-util_mp3 .mp3-roll { display: block; }
  .header-util_mp3 .mp3-roll_track { display: flex; }
  .header-util_mp3 .mp3-roll_track > span { display: flex; }
}
/* 좁은 태블릿(768~1023px) — 검색창 폭을 확보하려고 로그인·마이페이지만 예전 태블릿처럼 아이콘(40px)으로 줄인다. 빨간 MP3 버튼은 글자 그대로 */
@media (min-width: 768px) and (max-width: 1023px) {
  .header-util_link { justify-content: center; width: 40px; height: 40px; gap: 0; color: var(--color-ink); }
  .header-util_link span { display: none; }
  .header-util_link svg { width: 24px; height: 24px; color: var(--color-ink); }
}
@media (min-width: 768px) and (max-width: 1279px) { .gnb-inner::before, .gnb-inner::after { display: none; } .gnb-inner.is-fade-left .gnb-nav { -webkit-mask-image: linear-gradient(to right, transparent, var(--color-ink) 56px); mask-image: linear-gradient(to right, transparent, var(--color-ink) 56px); } .gnb-inner.is-fade-right .gnb-nav { -webkit-mask-image: linear-gradient(to left, transparent, var(--color-ink) 56px); mask-image: linear-gradient(to left, transparent, var(--color-ink) 56px); } .gnb-inner.is-fade-left.is-fade-right .gnb-nav { -webkit-mask-image: linear-gradient(to right, transparent, var(--color-ink) 56px, var(--color-ink) calc(100% - 56px), transparent); mask-image: linear-gradient(to right, transparent, var(--color-ink) 56px, var(--color-ink) calc(100% - 56px), transparent); } } /* 태블릿 전용 — GNB 스와이프 힌트를 흰 그라데이션 덧칠 대신 메뉴 글자 자체를 가장자리에서 투명하게 흐리는 마스크로. 스크롤 시 반투명 유리 헤더 위에서 흰 덧칠이 사각형으로 떠 보이던 문제 해결 (마스크는 색이 아닌 투명도만 쓰므로 --color-ink 는 불투명 값 용도) */
