/* 홍보 홈페이지 전용 스타일 — 수업 시스템(app.css)과 분리되어 있습니다.
   모바일 우선으로 짜고, 720px 이상에서 여러 칸으로 넓힙니다. */

:root {
  --terra:      #8B2635;   /* 버건디 — 포인트 */
  --terra-dark: #6f1d29;
  --terra-soft: #F7E9EB;   /* 카드 그림 바탕 — 버건디를 아주 옅게 */
  --teal:       #5B3A44;   /* 딥 모브 — 본문 강조 */
  --teal-dark:  #33171f;
  --ink:        #241d1f;
  --sub:        #6f6266;
  /* 원장님: "배경이 화이트도 있어야 해. 배경이 톤업이 되자."

     한 단계씩 밝혔습니다. 바탕이 **흰색**이 되고, 번갈아 오는 띠가
     예전 바탕색(로즈 크림)을 이어받습니다. 흰 띠와 옅은 로즈 띠가
     교대로 오면서 전체가 밝아지고, 띠의 구분은 그대로 살아 있습니다.

         예전   로즈 크림 #faf6f4  ↔  진한 로즈 #f4ebe9
         지금   흰색     #ffffff  ↔  로즈 크림 #faf6f4  */
  --bg:         #ffffff;   /* 흰 띠 */
  --bg-alt:     #faf6f4;   /* 로즈 크림 띠 */
  --card:       #ffffff;
  --line:       #e8dcda;
  --ok-bg:      #e8f3ec;  --ok-ink:  #186b46;
  --err-bg:     #faeae6;  --err-ink: #a8321f;
  --radius: 14px;
  --shadow: 0 2px 14px rgba(36, 29, 31, .07);
}

* { box-sizing: border-box; }
html { scroll-behavior: smooth; }
body {
  margin: 0;
  font-family: -apple-system, BlinkMacSystemFont, "Apple SD Gothic Neo",
               "Pretendard", "Malgun Gothic", "맑은 고딕", sans-serif;
  color: var(--ink);
  background: var(--bg);
  line-height: 1.7;
  word-break: keep-all;
  overflow-wrap: anywhere;
  -webkit-font-smoothing: antialiased;
  -webkit-text-size-adjust: 100%;   /* 가로로 돌렸을 때 글자가 멋대로 커지는 것 */
}
/* 어느 한 칸이 넘쳐도 화면이 옆으로 밀리지 않게.

   ⚠ `hidden` 이 아니라 `clip` 입니다. `overflow-x: hidden` 을 주면
   브라우저가 여기를 **스크롤 상자**로 만들어 버리고, 그러면 안에 있는
   `position: sticky` 가 전부 죽습니다 — 머리글이 위에 안 붙고 같이
   올라가 버립니다. `clip` 은 넘치는 것만 자를 뿐 스크롤 상자를 만들지
   않아서 붙임이 그대로 살아 있습니다. */
html, body { overflow-x: clip; }

/* 머리글이 붙어 있어서, 메뉴로 건너뛰면 제목이 머리글 밑에 가려집니다. */
section[id] { scroll-margin-top: 70px; }
a { color: var(--teal); text-decoration: none; }

.wrap { max-width: 1040px; margin: 0 auto; padding: 0 20px; }
.wrap.narrow { max-width: 640px; }

/* ── 헤더 ─────────────────────────────────────────── */
.hd {
  position: sticky; top: 0; z-index: 50;
  background: rgba(255, 255, 255, .9);   /* 바탕이 흰색이 되어 머리글도 맞춥니다 */
  backdrop-filter: blur(8px);
  border-bottom: 1px solid var(--line);
}
.hd-in { display: flex; align-items: center; gap: 18px; height: 58px; }
.logo { font-weight: 800; font-size: 22px; letter-spacing: -.5px; }
.logo-han { color: var(--terra); }
.logo-ibt { color: var(--teal); }
.logo.sm { font-size: 18px; }

.hd-nav { display: none; gap: 20px; margin-left: 8px; }
.hd-nav a { color: var(--ink); font-size: 15px; font-weight: 600; }
.hd-nav a:hover { color: var(--terra); }

.btn-login {
  margin-left: auto;
  padding: 8px 18px; border-radius: 999px;
  border: 1.5px solid var(--teal); color: var(--teal);
  font-weight: 700; font-size: 14px; white-space: nowrap;
}
.btn-login:hover { background: var(--teal); color: #fff; }

/* 로그인한 사람에게는 마이페이지 · 로그아웃,
   로그인 안 한 사람에게는 회원가입 · 로그인 */
.hd-auth { margin-left: auto; display: flex; align-items: center; gap: 14px; }
.hd-auth .btn-login { margin-left: 0; }

/* 회원가입 — 로그인보다 눈에 띄게 (처음 오는 사람이 갈 곳) */
.btn-signup {
  padding: 8px 18px; border-radius: 999px;
  background: var(--terra); color: #fff;
  font-weight: 700; font-size: 14px; white-space: nowrap;
}
/* --terra-ink 는 어디에도 정의된 적이 없어서 대체값 #8a4a32(주황빛 갈색)가
   나왔습니다. 회원가입 단추만 혼자 주황으로 보이던 원인입니다. */
.btn-signup:hover { background: var(--terra-dark); color: #fff; }
.btn-logout { color: var(--sub); font-size: 14px; font-weight: 600; white-space: nowrap; }
.btn-logout:hover { color: var(--terra); }

/* ── 좁은 화면 목차 ────────────────────────────────
   예전에는 넓은 화면에만 메뉴가 있고 핸드폰에는 **아무 길도 없었습니다.**
   처음 오신 분이 긴 화면을 끝까지 내리며 찾아야 했습니다. */
.hd-burger {
  margin-left: auto; width: 42px; height: 42px; flex: none;
  display: flex; flex-direction: column; justify-content: center; gap: 5px;
  align-items: center; background: none; border: 0; cursor: pointer; padding: 0;
}
.hd-burger span {
  display: block; width: 21px; height: 2px; border-radius: 2px;
  background: var(--ink); transition: transform .2s, opacity .15s;
}
.hd-burger[aria-expanded="true"] span:nth-child(1) { transform: translateY(7px) rotate(45deg); }
.hd-burger[aria-expanded="true"] span:nth-child(2) { opacity: 0; }
.hd-burger[aria-expanded="true"] span:nth-child(3) { transform: translateY(-7px) rotate(-45deg); }
.hd-burger:focus-visible { outline: 2px solid var(--terra); outline-offset: 2px; }

.hd-menu {
  border-top: 1px solid var(--line);
  background: var(--bg);
  padding: 6px 20px 14px;
  max-height: calc(100vh - 58px); overflow-y: auto;
}
.hd-menu a {
  display: block; padding: 13px 2px; font-size: 16px; font-weight: 600;
  color: var(--ink); border-bottom: 1px solid var(--line);
}
.hd-menu a:last-child { border-bottom: 0; }
.hd-menu a:active { color: var(--terra); }
.hd-menu .hd-menu-b { color: var(--terra); }

/* 넓은 화면에서는 가로 메뉴만, 좁은 화면에서는 여는 목차만 */
@media (min-width: 860px) {
  .hd-nav { display: flex; }
  .hd-burger { display: none; }
  .hd-menu { display: none !important; }
}
/* 버튼이 auth 단추보다 앞에 오지 않게 (auth 가 margin-left:auto 를 씁니다) */
@media (max-width: 859px) {
  .hd-auth { margin-left: 8px; }
  .btn-login { margin-left: 0; }
}

/* ── 히어로 ───────────────────────────────────────── */
.hero {
  padding: clamp(40px, 9vw, 84px) 0 clamp(34px, 7vw, 64px);
  /* 오른쪽 위는 버건디의 연한 톤, 왼쪽 아래는 보조색(자주)의 연한 톤.
     예전에는 왼쪽 아래가 테라코타 시절의 탄색 #ece1d3 라 화면 아래쪽만
     누렇게 번져 로그인 화면(로즈 한 겹)과 이어지지 않았습니다.
     두 값은 app.css t-terra 의 --accent-soft · --accent2-soft 와 같습니다. */
  background:
    radial-gradient(1200px 500px at 85% -10%, #F6E7E9 0%, transparent 60%),
    radial-gradient(900px 420px at -10% 110%, #EFECF1 0%, transparent 55%),
    var(--bg);
  text-align: center;
}
.hero-kicker {
  margin: 0 0 10px; font-weight: 700; color: var(--terra);
  font-size: clamp(13px, 3.4vw, 15px); letter-spacing: .02em;
}
.hero h1 {
  margin: 0 0 16px; font-size: clamp(27px, 7.1vw, 46px); line-height: 1.28;
  letter-spacing: -.03em; font-weight: 800; text-wrap: balance;
}
.hero-sub {
  margin: 0 auto 26px; max-width: 34em;
  color: var(--sub); font-size: clamp(15px, 1.6vw, 18px);
}
/* 원장님: "수능 만점에서 미국 명문대까지 밑에 버튼 사이의 gap 을 좀 더
   만들어줘. 너무 답답해 보여."

   맞습니다. 첫 화면 설명("통합 미국영어교육 — …")을 빼면서 그 칸이 갖고
   있던 아래 여백 26px 까지 같이 사라졌습니다. 남은 것은 윗 문단의 12px
   뿐이라 글과 단추가 붙어 버렸습니다.

   애플 지침의 "여백으로 묶고 나눈다" 를 따릅니다 — 글과 단추는 **다른
   덩어리**이므로, 문단 사이(12px)보다 눈에 띄게 벌려야 합니다.
   좁은 화면 30px, 넓은 화면 42px. */
.hero-cta {
  display: flex; gap: 10px; justify-content: center; flex-wrap: wrap;
  margin-top: clamp(30px, 5vw, 42px);
}

.btn-main {
  display: inline-block; padding: 14px 26px; border-radius: 12px;
  background: var(--terra); color: #fff; font-weight: 800; font-size: 16px;
  border: 0; cursor: pointer;
  box-shadow: 0 4px 14px rgba(139, 38, 53, .3);
}
.btn-main:hover { background: var(--terra-dark); }
.btn-main.wide { width: 100%; }
.btn-sub {
  display: inline-block; padding: 14px 26px; border-radius: 12px;
  background: #fff; color: var(--teal); font-weight: 800; font-size: 16px;
  border: 1.5px solid var(--teal);
}
.btn-sub:hover { background: var(--teal); color: #fff; }

/* 원장님: "히어로의 클래스 trust 를 히어로 밑으로 배치해줘."
   사진 밖으로 나오면서 사진 위용 색(검은 유리·흰 글씨)은 모두 지웠습니다.
   이제 아래 기본 모양 — 흰 상자에 검은 글씨 — 이 그대로 쓰입니다. */
/* 원장님: "코너의 라운드를 0 으로. 애플의 컨셉같이. 배경을 3단계로
   조금씩 톤업 다운. 마진은 적게 패딩은 좀더 크게."

   애플 첫 화면의 타일 격자가 그렇습니다 — 모서리는 각지고, 타일마다
   바탕색이 조금씩 다르고, 타일 사이는 가늘게 띄우되 타일 안은 넉넉합니다.
   색이 칸을 나누니 테두리도 구분선도 필요 없습니다.

   톤은 세 단계로 올렸다 내립니다. 첫 칸도 순백으로 두지 않습니다 —
   바탕(흰색)과 같으면 그 자리만 타일이 빠진 것처럼 보입니다.
   가장 진한 세 번째 자리에 학습혜택 칸이 옵니다. */
/* 원장님: "마진을 아래의 마진과 일관되게."
   위아래를 같은 값으로 둡니다. 아래 꼭지가 제 여백을 따로 갖고 있어서,
   여기서 더 벌릴 필요가 없습니다. */
.trustband { background: var(--bg); padding: var(--s2) 0; }
.trust {
  list-style: none; margin: 0 auto; padding: 0;
  display: grid; grid-template-columns: 1fr 1fr;
  gap: 4px;
}
.trust li {
  border: 0; border-radius: 0; overflow: hidden;
  padding: 30px 14px 26px; font-size: 13px; color: var(--sub);
  letter-spacing: -.012em; line-height: 1.55;
}
.trust li:nth-child(1) { background: #fbf7f6; }   /* 1단계 — 가장 옅게 */
.trust li:nth-child(2) { background: #f5edeb; }   /* 2단계 */
.trust li:nth-child(3) { background: #f0e2e5; }   /* 3단계 — 가장 진하게 */
.trust li:nth-child(4) { background: #f5edeb; }   /* 다시 2단계 */
/* 타일 머리글 — 애플 타일처럼 한눈에 읽히는 크기로. */
.trust b {
  color: var(--ink); display: block; margin-bottom: 4px;
  font-size: clamp(16px, 4.2vw, 19px); font-weight: 700;
  letter-spacing: -.028em; line-height: 1.35; text-wrap: balance;
}
.trust span { display: block; font-size: 13px; color: var(--sub); }
/* 사진은 타일 바닥까지 꽉 채웁니다 — 애플 타일이 그렇습니다. 안쪽 여백을
   음수 마진으로 되돌려 좌우 끝까지 뻗게 합니다. */
.trust li.trust-go img {
  display: block; margin: 20px -14px 0;
  width: calc(100% + 28px); max-width: none;   /* 공통 규칙의 100% 제한을 풉니다 */
  aspect-ratio: 1 / 1; object-fit: cover; object-position: center top;
  height: auto; border: 0; border-radius: 0;
}

@media (min-width: 720px) {
  .trust { grid-template-columns: repeat(4, 1fr); }
}

/* ── 사진 ─────────────────────────────────────────────
   HTML 에 적어 둔 width·height 를 여기서 `height: auto` 로 풀어 줍니다.
   브라우저는 두 값의 **비율**로 자리를 미리 잡아 두었다가 그림이 오면
   그 자리를 채웁니다. 그래서 그림이 늦게 와도 아래 글이 안 밀립니다.
   (안 적으면 그림이 뜨는 순간 읽던 줄이 통째로 내려갑니다 — CLS) */
.shot { margin: 0; }
.shot img {
  display: block; width: 100%; height: auto;
  border-radius: var(--radius);
  border: 1px solid var(--line);
  background: var(--bg-alt);   /* 그림이 오기 전 빈 자리의 색 */
}
.shot figcaption {
  margin-top: 9px; font-size: 14px; color: var(--sub); text-align: center;
}
.shot figcaption b { color: var(--ink); }

/* 첫 화면 — 단추 아래. 그림자를 조금 더 줘서 앞으로 나와 보이게 */
.shot-hero { max-width: 820px; margin: 26px auto 0; }
.shot-hero img { box-shadow: 0 8px 28px rgba(36, 29, 31, .13); }

/* 꼭지 안에 두는 것 — 크면 읽던 글을 밀어냅니다. 480px 로 묶습니다 */
.shot-mid { max-width: 480px; margin: 0 auto 22px; }

/* 가로 띠.

   🔴 예전에는 여기서 `aspect-ratio: 5/2` + `object-fit: cover` 로 잘랐는데,
   원장님이 "너무 짤렸어" 하셨습니다. 맞습니다 — 세로가 긴 사진을 띠에
   억지로 끼우느라 위아래를 37%나 잘라내고 있었습니다.

   지금은 **파일 자체를 2:1 로 미리 잘라서** 올립니다. 그래서 여기서는
   자를 일이 없습니다. 사진을 바꾸실 때도 2:1 로 주시면 그대로 나옵니다. */
.shot-band { margin: 2px 0 18px; }

/* ── 첫 화면 — 사진을 섹션 전체 배경으로 ─────────────
   원장님: "첫 이미지를 섹션 전체에 배경으로 하고 어둡게 전체적으로
   블랙을 40프로 넣어줘. 그리고 글씨를 하얀색으로."

   🔴 어둠의 진하기는 `--scrim-in` · `--scrim-out` 두 곳에서만 정합니다.
   이 값만 바꾸면 온 화면이 같이 바뀝니다 — 색을 여러 군데 적어 두면
   나중에 한 곳을 꼭 빠뜨립니다.

   원장님: "배경이 너무 어두운데 글자 주변만 75프로, 바깥 부분은 60프로로
   그라데이션으로." 고르게 덮으면 글이 읽힐 만큼 어둡게 할 때 사진까지
   같이 죽습니다. 글이 놓인 가운데만 진하게 덮고 가장자리는 풀어 주면,
   **글은 읽히면서 사진도 삽니다.**

   이 사진은 창문과 흰 벽이 많아 아주 밝습니다. 40% 로 해 보았더니
   밝은 부분에서 흰 글씨 대비가 1.6:1 까지 떨어졌습니다(읽기 기준 4.5:1). */
.hero-bg {
  /* 원장님: "히어로의 배경이 너무 어두워. 밝게 빼줘."

     가운데와 가장자리를 따로 내렸습니다. 글은 가운데에만 있으므로,
     가장자리를 많이 밝히면 **전체가 훨씬 환해 보이면서** 글은 그대로
     읽힙니다.

         가운데  75% → 66%   가장자리  60% → 38%

     66% 로 정한 근거가 있습니다. 이 사진 위에서 흰 글씨 대비를 재면
     66% 에서 4.51:1 이 나옵니다 — 읽기 기준(4.5:1)을 딱 넘는 자리입니다.
     여기서 더 내리면(62% → 4.13) 기준 아래로 떨어집니다. */
  --scrim-in:  .66;   /* 글자가 놓인 가운데 — 대비 4.51:1 */
  --scrim-out: .38;   /* 바깥 가장자리 — 글이 없어 사진을 살립니다 */
  position: relative;
  isolation: isolate;      /* 아래 두 겹이 이 섹션 밖으로 새지 않게 */
  background: #1a1113;     /* 사진이 오기 전 어두운 바탕 */
  text-align: center;
}
.hero-bgimg {
  position: absolute; inset: 0; z-index: -2;
  width: 100%; height: 100%;
  object-fit: cover; object-position: center 42%;
}
/* 원장님: "모바일은 사진을 오른쪽 중앙으로 정렬해."

   좁은 화면에서는 가로로 많이 잘려 나갑니다. 가운데를 기준으로 자르면
   아이 **뒤통수**만 크게 남고, 정작 이 사진의 요점인 수업 화면이 밖으로
   밀려납니다. 오른쪽에 붙이면 노트북 화면과 지구본이 살아남습니다. */
@media (max-width: 719px) {
  .hero-bgimg { object-position: right center; }
}
/* 가운데는 --scrim-in 으로 꽉 차 있다가 45% 지점부터 풀려서 가장자리에서
   --scrim-out 이 됩니다. 타원을 쓰는 까닭은 글 덩어리가 가로로 넓은
   타원 모양이라, 네모로 자르면 모서리에서 경계가 보이기 때문입니다. */
.hero-bg::before {
  content: ""; position: absolute; inset: 0; z-index: -1;
  /* 첫 화면 글이 일곱 줄에서 네 줄로 줄었으니 어두운 가운데도 좁힙니다 —
     넓게 두면 글이 없는 자리까지 덮어 사진이 죽습니다. */
  background: radial-gradient(ellipse 66% 56% at 50% 44%,
      rgb(0 0 0 / var(--scrim-in))  0%,
      rgb(0 0 0 / var(--scrim-in))  45%,
      rgb(0 0 0 / var(--scrim-out)) 100%);
}
/* 좁은 화면에서는 글이 섹션을 거의 다 채웁니다 — 그래서 진한 부분을
   훨씬 넓게 잡습니다. 데스크톱 비율을 그대로 쓰면 글 아래쪽 네 칸이
   옅은 데로 밀려나 안 읽힙니다. */
@media (max-width: 719px) {
  .hero-bg::before {
    background: radial-gradient(ellipse 120% 62% at 50% 44%,
        rgb(0 0 0 / var(--scrim-in))  0%,
        rgb(0 0 0 / var(--scrim-in))  58%,
        rgb(0 0 0 / var(--scrim-out)) 100%);
  }
}

/* 글씨를 하얗게.

   그림자를 **두 겹** 겹칩니다. 어둠은 40% 로 두라고 하셨으니 배경은
   그대로 두고, 글자 쪽에서 버티게 하는 방법입니다.
   · 가까운 한 겹(2px)  — 글자 획에 딱 붙어 테두리를 만듭니다
   · 퍼지는 한 겹(18px) — 글자 뒤에만 옅은 그늘을 깔아 배경과 떼어 놓습니다
   한 겹만 쓰면 굵은 획은 살아도 가는 획이 밝은 사진에 먹힙니다. */
.hero-bg .hero-kicker {
  color: #FBDDE1;
  text-shadow: 0 1px 2px rgb(0 0 0 / .8), 0 2px 14px rgb(0 0 0 / .75);
}
.hero-bg h1,
.hero-bg .hero-vow {
  color: #fff;
  text-shadow: 0 1px 2px rgb(0 0 0 / .78), 0 3px 18px rgb(0 0 0 / .8);
}
.hero-bg .hero-vow b { color: #fff; }
.hero-bg .hero-sub {
  color: #fff;
  text-shadow: 0 1px 2px rgb(0 0 0 / .82), 0 2px 16px rgb(0 0 0 / .78);
}
.hero-bg .hero-sub b { color: #fff; }

/* 흰 단추는 어두운 사진 위에서 너무 튑니다 — 유리처럼 비치게 */
.hero-bg .btn-sub {
  background: rgb(255 255 255 / .14); color: #fff;
  border-color: rgb(255 255 255 / .55);
  backdrop-filter: blur(6px);
}
.hero-bg .btn-sub:hover { background: #fff; color: var(--teal-dark); }

/* 네 칸도 같이 — 흰 상자에 검은 글씨를 두면 여기만 낮처럼 보입니다.

   🔴 **흰 유리가 아니라 검은 유리**입니다. 흰색을 옅게 깔면 밝은 사진
   위에서는 더 밝아져 흰 글씨가 묻힙니다. 검은색을 깔면 뒤가 무엇이든
   어두워져서 글씨가 늘 읽힙니다. 처음에 흰 유리로 했다가
   "강사 더보기" 가 안 보여서 바꿨습니다. */

/* ── 사진을 배경으로, 글자를 그 위에 ──────────────────
   원장님: "이미지를 배경으로 넣고 글자를 위에 올려줘."

   `background-image` 로 하지 않고 진짜 `<img>` 를 깔았습니다. 그래야
   화면 크기에 따라 작은 파일을 줄 수 있고(srcset), 눈이 불편하신 분께
   읽어 줄 설명(alt)도 붙고, 자리도 미리 잡힙니다. */
.phero {
  position: relative; overflow: hidden;
  border-radius: var(--radius);
  margin: 0 0 var(--s5, 22px);
  background: var(--teal-dark);   /* 사진이 오기 전 어두운 바탕 */
  isolation: isolate;             /* 안쪽 층이 바깥과 안 섞이게 */
}
.phero img {
  display: block; width: 100%; height: auto;
  aspect-ratio: 4 / 3; object-fit: cover;   /* 휴대폰 — 세로가 넉넉해야 글자가 들어갑니다 */
}
@media (min-width: 720px) { .phero img { aspect-ratio: 2 / 1; } }

/* 🔴 글자를 읽히게 하는 어둠. 이게 없으면 성조기의 **흰 줄무늬** 위에서
   흰 글자가 사라집니다. 사진이 바뀌어도 글자는 늘 읽혀야 하므로,
   사진의 밝기를 믿지 않고 여기서 한 겹 깝니다.
   아래는 진하게 위로 갈수록 옅게 — 사진도 반쯤 살아 있습니다. */
.phero::after {
  content: ""; position: absolute; inset: 0; z-index: 1;
  /* 숫자 넉 줄이 제목 위로 들어오면서 글자 덩이가 높아졌습니다.
     어둠도 그만큼 위까지 끌어올립니다 — 안 그러면 숫자가 성조기의
     흰 줄무늬 위에 얹혀 사라집니다. */
  background: linear-gradient(to top,
      rgba(18, 10, 12, .92)  0%,
      rgba(18, 10, 12, .86) 38%,
      rgba(18, 10, 12, .70) 58%,
      rgba(18, 10, 12, .28) 80%,
      rgba(18, 10, 12, .05) 100%);
}
.phero-in {
  position: absolute; left: 0; right: 0; bottom: 0; z-index: 2;
  padding: clamp(18px, 4vw, 34px);
}
.phero-eyebrow {
  margin: 0 0 5px; font-weight: 700; letter-spacing: .01em;
  font-size: clamp(12.5px, 1.5vw, 14px);
  color: #F2C3CA;                  /* 옅은 로즈 — 어둠 위에서 대비 10:1 */
}
.sec .phero-in h2 {
  margin: 0; color: #fff;
  text-shadow: 0 1px 14px rgba(0, 0, 0, .5);
}

/* ── 공통 섹션 ────────────────────────────────────── */
.sec { padding: clamp(38px, 8vw, 72px) 0; }

/* ── B안: 띠마다 화면 한 장 ──────────────────────────
   링글은 띠마다 오른쪽에 제품 화면을 답니다. "무엇을 사는지" 가 글보다
   먼저 보이기 때문입니다.

   🔴 다만 **모든 띠에 넣지 않습니다.** 사진이 설명을 대신하는 곳에만
   넣습니다. 억지로 채우면 사진이 글을 가리고, 페이지만 무거워집니다.
   지금 넣은 곳은 둘 — 수업 선택(1:1 과 그룹의 차이)과 원생 혜택(단어
   진도가 실제로 쌓이는 화면)입니다. */

/* 수업 선택 — 1:1 과 그룹을 사진 두 장으로 견줍니다.
   왼쪽 테두리 색은 아래 표의 칸 색과 같습니다(파랑 = 1:1, 자주 = 그룹).
   사진과 표가 같은 색으로 이어져야 눈이 따라갑니다. */
.vs-pics { display: grid; grid-template-columns: 1fr 1fr; gap: var(--s3, 12px); margin-bottom: var(--s4, 16px); }
.vs-pics figure { margin: 0; }
.vs-pics img {
  display: block; width: 100%; height: auto;
  border-radius: 12px; border: 1px solid var(--line);
  background: var(--bg-alt);
}
.vs-pics figcaption {
  display: flex; align-items: center; justify-content: center; gap: 5px;
  margin-top: 7px; font-size: 12.5px; font-weight: 700;
}
.vs-pics figcaption .ic { width: 13px; height: 13px; }
.vs-pics .a figcaption { color: #1c5b91; }
.vs-pics .b figcaption { color: #a8325a; }
.vs-pics .a img { border-color: #bcd3e6; }
.vs-pics .b img { border-color: #e8bdcd; }
/* 원장님: "데스크탑 이미지를 가운데 정렬을 해줘."
   폭을 640px 로 묶어 두기만 하고 가운데로 미는 말을 안 적어서, 넓은
   화면에서 두 장이 왼쪽에 붙어 있었습니다. 아래 표(.vs)는 폭을 다
   쓰는데 사진만 왼쪽에 몰려 세로선이 어긋나 보였습니다. */
@media (min-width: 720px) {
  .vs-pics { max-width: 640px; margin-left: auto; margin-right: auto; }
}

/* 원생 혜택 — 학부모 앱 수강권 화면. 세로로 긴 그림이라 폭을 묶고,
   위쪽만 보이게 잘라 둡니다. 다 보여 주면 이 칸이 수강료보다 커집니다. */
.perk-shot {
  margin: var(--s4, 16px) 0 0; max-width: 280px;
  border-radius: 12px; overflow: hidden;
  border: 1px solid var(--line); background: var(--card);
}
.perk-shot img {
  display: block; width: 100%; height: auto;
  margin-bottom: -38%;                 /* 아래쪽을 접어 둡니다 */
  -webkit-mask-image: linear-gradient(#000 58%, transparent 96%);
          mask-image: linear-gradient(#000 58%, transparent 96%);
}

/* ── B안: 아래 고정 신청 바 ──────────────────────────
   홈이 화면으로 열여섯 장입니다. 중간쯤에서 마음이 정해진 분이 신청하려면
   맨 위나 맨 아래까지 가야 했습니다.

   좁은 화면에서만 띄웁니다. 넓은 화면은 머리글이 늘 붙어 있어 위로 가는
   길이 짧고, 화면 아래를 가리면 오히려 답답합니다.

   `translateY` 로 밀어 두었다가 올립니다 — `display` 를 바꾸면 툭 나타나
   눈에 거슬립니다. `env(safe-area-inset-bottom)` 은 아이폰 아래 가로줄에
   단추가 가리지 않게 하는 것입니다. */
.stickcta { display: none; }
@media (max-width: 719px) {
  .stickcta {
    display: block; position: fixed; left: 0; right: 0; bottom: 0; z-index: 40;
    padding: 10px 0 calc(10px + env(safe-area-inset-bottom, 0px));
    background: rgba(255, 255, 255, .95);
    backdrop-filter: blur(8px);
    border-top: 1px solid var(--line);
    transform: translateY(110%);
    transition: transform .3s cubic-bezier(.25, .8, .35, 1);
  }
  .stickcta.on { transform: translateY(0); }
  .stickcta .btn-main { width: 100%; }
}
@media (prefers-reduced-motion: reduce) { .stickcta { transition: none; } }

/* ── B안: 꼭지마다 같은 리듬 ─────────────────────────
   원장님이 시안 B(띠마다 한 가지씩)를 고르셨습니다. 링글이 쓰는 방식인데,
   띠마다 **모양이 똑같아서** 첫 띠에서 눈이 리듬을 익히면 나머지는
   훑기만 해도 읽힙니다.

   링글은 띠마다 색 딱지에 글자를 넣지만, 원장님이 "문구와 내용은 바꾸지
   말고" 하셨으므로 **새 글자를 만들지 않습니다.** 대신 제목 위에 짧은
   색 막대를 둡니다 — 글자 없이도 "여기서 새 이야기가 시작된다" 가
   읽힙니다.

   색은 버건디 하나입니다. 꼭지마다 다른 색을 쓰면 화려해 보이지만,
   그러면 색으로 **무엇이 중요한지** 를 말할 수 없게 됩니다
   (애플 지침 · 링글 · 스픽이 모두 강조색 하나만 씁니다).

   `.wrap > h2` 로 **바로 아래 자식**만 고릅니다 — 합격 축하 꼭지의 제목은
   사진 위에 얹혀 있어서(`.phero-in` 안) 여기 걸리지 않습니다. 사진 위에
   막대까지 얹으면 어수선합니다. */
/* 🔴 `>` 하나만 쓰면 '영어에 날개를 달자' 가 빠집니다 — 그 제목만
   `.h2birds`(새가 오가는 상자) 안에 들어 있습니다. 두 자리를 다 적습니다.
   합격 축하의 제목은 사진 위(.phero-in)라 여기 걸리지 않습니다 — 사진
   위에 막대까지 얹으면 어수선합니다. */
.sec .wrap > h2::before,
.sec .wrap > .h2birds > h2::before {
  content: ""; display: block;
  width: 28px; height: 3px; border-radius: 2px;
  background: var(--terra); margin: 0 auto 14px;   /* 가운데 정렬 */
}

/* ── 제목을 가운데로, 강조는 색으로 ───────────────────
   원장님: "타이틀<h2>들을 가운데 정렬로", "링글과 애플과 같이 타이틀에
   강조 부분의 색상을 바꾸자."

   링글은 제목 한 덩이 안에서 **핵심 낱말만 보라색**으로 칠합니다
   ("꿈꾸던 커리어와 <보라>영어 실력을</보라> 만드는 영어 학습").
   눈이 그 낱말에 먼저 가고, 나머지는 따라 읽힙니다.

   우리는 버건디를 씁니다 — 강조색은 하나여야 하니까요. `<em>` 으로
   감싸고 기울임은 끕니다(기울인 한글은 읽기 나쁩니다). */
.sec .wrap h2 { text-align: center; }
/* 좁은 화면에서만 줄을 바꾸는 줄바꿈 — 넓은 화면에서는 꺼 둡니다 */
@media (min-width: 720px) { .br-m { display: none; } }
.sec .wrap h2 em { font-style: normal; color: var(--terra); }
.sec .wrap > .sec-eyebrow,
.sec .wrap > .sec-lead {
  text-align: center;
  margin-left: auto; margin-right: auto;
}
.sec.alt { background: var(--bg-alt); }
.sec h2 {
  margin: 0 0 12px; font-size: clamp(21px, 5.2vw, 30px); letter-spacing: -.03em;
  font-weight: 800; line-height: 1.32; text-wrap: balance;
}
.sec-lead { margin: 0 0 22px; color: var(--sub); max-width: 38em;
             font-size: clamp(14.5px, 1.6vw, 16px); }

.cards { display: grid; gap: 14px; }
.card {
  background: var(--card); border: 1px solid var(--line);
  border-radius: var(--radius); padding: 22px; box-shadow: var(--shadow);
}
/* 카드 그림. 브랜드색 동그라미 안에 선 그림 하나.
   currentColor 를 쓰기 때문에 색은 여기 한 줄만 바꾸면 그림까지 따라옵니다. */
.card-ic {
  display: flex; align-items: center; justify-content: center;
  width: 46px; height: 46px; margin-bottom: 14px;
  border-radius: 14px;
  background: var(--terra-soft, #F7E9EB);
  color: var(--terra);
}
.card-ic svg { width: 25px; height: 25px; }
.card h3 { margin: 0 0 8px; font-size: 17px; }
.card p { margin: 0; color: var(--sub); font-size: 15px; }
@media (min-width: 720px) {
  .cards.two   { grid-template-columns: 1fr 1fr; }
  .cards.three { grid-template-columns: 1fr 1fr 1fr; }
}

/* 과목 카드 — 왼쪽 색 띠로 과목을 구분합니다.
   원장님: "과목별로 앞의 색이 달라지는데 그 안의 교재 색이 같아서
   이상해 보여." 맞습니다 — 띠만 과목 색이고 안쪽은 전부 버건디라
   따로 노는 두 색이 한 카드에 있었습니다.

   그래서 과목마다 **색 한 벌**(--sj 진한색 · --sj-soft 옅은색)을 두고,
   카드 안의 모든 강조가 그 한 벌만 씁니다. 색을 한 군데서 정하니
   나중에 바꿀 때도 한 줄만 고치면 됩니다. */
.card.subj {
  --sj: var(--teal); --sj-soft: #F1EEF2;
  border-left: 5px solid var(--sj);
}
.card.subj.s0 { --sj: #146b60; --sj-soft: #E7F2F0; }  /* 스피킹 — 초록 */
.card.subj.s1 { --sj: #1c5b91; --sj-soft: #E9F1F8; }
.card.subj.s2 { --sj: #4a6a1e; --sj-soft: #EFF3E7; }
.card.subj.s3 { --sj: #9a5410; --sj-soft: #F8EFE4; }  /* 미국교과 — 호박 */
.card.subj.s4 { --sj: #5a4bb0; --sj-soft: #EDEBF7; }  /* 토플 — 보라 */
.card.subj.s5 { --sj: #a8325a; --sj-soft: #FAEAF0; }  /* 주니어토플 — 자주 */

.level-note {
  margin-top: 22px; background: var(--card); border: 1px dashed var(--teal);
  border-radius: var(--radius); padding: 20px 22px;
}
.level-note h3 { margin: 0 0 6px; font-size: 16px; color: var(--teal); }
.level-note p { margin: 0; color: var(--sub); font-size: 15px; }

/* ── 교재 ─────────────────────────────────────────── */
.books { list-style: none; margin: 0; padding: 0; display: grid; gap: 10px; }
.books li {
  background: var(--card); border: 1px solid var(--line);
  border-radius: 10px; padding: 14px 18px; font-size: 15px; color: var(--sub);
}
.books b { color: var(--ink); margin-right: 6px; }
@media (min-width: 720px) { .books { grid-template-columns: 1fr 1fr; } }

/* ── 수강 절차 ────────────────────────────────────── */
/* 원장님: "카드로 하지 말고 타임라인으로 만들어서 다이어그램처럼 만들어줘."

   예전에는 카드 열 장을 두 칸 격자에 늘어놓았습니다. 그러면 읽는 순서가
   ①② / ③④ 로 꺾여서 **차례가 눈에 안 들어옵니다.** 절차는 순서가 전부라
   위에서 아래로 내려가는 한 줄기로 그립니다. */

/* 1:1 · 그룹 고르개 — 알약 두 개. 예전에는 CSS 도 자바스크립트도 없어서
   브라우저 기본 단추로 보였고 **눌러도 아무 일이 없었습니다.** */
/* ── 수강 절차 큰 흐름 넷 ─────────────────────────────
   넓은 화면에서는 가로로 늘어서고 사이에 화살표(▸)가 생깁니다.
   휴대폰에서는 세로로 쌓이고 화살표가 아래(▾)를 가리킵니다.
   화살표는 글자라서 그림 파일이 하나도 안 늘어납니다. */
.flow {
  list-style: none; margin: 0 0 20px; padding: 0;
  display: grid; gap: 18px 10px;
}
/* 좁은 화면에서는 아이콘을 **왼쪽에** 두고 가로로 눕힙니다. 세로로 쌓으면
   칸 하나가 300px 을 넘어서, 네 칸을 보는 데만 화면을 몇 번씩 쓸어내리게
   됩니다. 넓은 화면에서는 아래에서 다시 세로로 돌립니다. */
.flow li {
  position: relative;
  background: var(--card); border: 1px solid var(--line);
  border-radius: 12px; padding: 14px 15px;
  box-shadow: var(--shadow);
  display: grid; grid-template-columns: auto 1fr; gap: 3px 13px;
  align-items: center;
}
.flow li b { grid-column: 2; align-self: end; }
.flow-d    { grid-column: 2; align-self: start; }
.flow-ic   { grid-row: 1 / span 2; }
/* 사이 화살표 — 마지막 칸 뒤에는 안 붙입니다 */
.flow li::after {
  content: "▾";
  position: absolute; left: 50%; bottom: -14px; transform: translateX(-50%);
  color: var(--terra); font-size: 13px; line-height: 1;
}
.flow li:last-child::after { content: none; }

.flow-ic {
  display: flex; align-items: center; justify-content: center;
  width: 40px; height: 40px;
  border-radius: 12px; background: var(--terra-soft); color: var(--terra);
  flex: none;
}
.flow-ic svg { width: 22px; height: 22px; }
.flow li b { font-size: 15.5px; }
.flow-d { color: var(--sub); font-size: 13.5px; line-height: 1.6; }
/* 무료 딱지 — 학부모가 가장 먼저 궁금해하시는 것이라 눈에 띄게 */
.flow-free {
  position: absolute; top: 12px; right: 12px;
  background: var(--terra); color: #fff;
  font-size: 11.5px; font-weight: 700; letter-spacing: -.01em;
  padding: 4px 9px; border-radius: 999px;
}

@media (min-width: 860px) {
  .flow { grid-template-columns: repeat(4, 1fr); gap: 10px 26px; }
  .flow li {
    display: flex; flex-direction: column; align-items: flex-start;
    padding: 20px 18px 18px; border-radius: var(--radius);
  }
  /* 좁은 화면에서 준 격자 자리·정렬을 되돌립니다. 세로 flex 에서
     align-self:end 는 **오른쪽 끝**을 뜻해서 제목이 밀려납니다. */
  .flow li b, .flow-d, .flow-ic { align-self: flex-start; }
  .flow-ic { width: 44px; height: 44px; margin-bottom: 13px; }
  .flow-ic svg { width: 24px; height: 24px; }
  .flow li b { font-size: 16px; margin-bottom: 5px; }
  .flow-d { font-size: 14px; line-height: 1.65; }
  .flow li::after {
    content: "▸";
    left: auto; right: -20px; bottom: auto; top: 50%;
    transform: translateY(-50%); font-size: 17px;
  }
}

.wayswitch {
  display: inline-flex; gap: 4px; margin: 0 0 26px;
  background: var(--bg-alt); border: 1px solid var(--line);
  border-radius: 999px; padding: 4px;
}
.way {
  appearance: none; border: 0; cursor: pointer;
  background: transparent; color: var(--sub);
  font: 700 14.5px/1 inherit; padding: 10px 20px; border-radius: 999px;
  transition: background .15s, color .15s;
}
.way:hover { color: var(--ink); }
.way.on { background: var(--terra); color: #fff; }
.way:focus-visible { outline: 2px solid var(--terra); outline-offset: 2px; }

/* 타임라인 본체 */
.steps {
  list-style: none; counter-reset: step; margin: 0; padding: 0;
  position: relative;
}
/* ⚠ display 를 주는 순간 브라우저 기본 [hidden] 규칙을 이깁니다.
   이 한 줄이 없어서 1:1 과 그룹 목록이 **동시에** 나왔습니다. */
.steps[hidden] { display: none; }

.steps li {
  counter-increment: step; position: relative;
  padding: 0 0 30px 60px;
}
/* 세로 줄기 — 마지막 칸에서는 끊습니다 */
.steps li::after {
  content: ""; position: absolute; left: 19px; top: 34px; bottom: -4px;
  width: 2px; background: var(--line);
}
.steps li:last-child { padding-bottom: 0; }
.steps li:last-child::after { display: none; }

/* 줄기 위의 번호 마디.

   원장님: "회원가입의 숫자 사이의 선의 depth 가 위에 되어 있어. 뒤로 보내줘."

   🔴 `::before`(번호)와 `::after`(세로 선)는 **같은 층**입니다. 층이 같으면
   나중에 적힌 쪽이 위에 그려지는데, 선이 `::after` 라 번호 위로 올라왔습니다.
   줄기는 번호 아래 34px 에서 시작해 동그라미 밑자락(40px)을 6px 물고
   들어가므로, 그 6px 이 번호 위에 회색 선으로 보였습니다.

   번호에 `z-index: 1` 을 주어 **선보다 앞으로** 꺼냅니다. 줄기를 아예
   동그라미 아래에서 시작하게 할 수도 있지만, 그러면 둘 사이가 떠서
   선이 끊겨 보입니다 — 물리되 가려지는 편이 자연스럽습니다.

   둘레의 흰 테(box-shadow)도 이제 제 몫을 합니다. 번호가 앞으로 나오면서
   그 테가 지나가는 선을 깨끗이 지웁니다. */
.steps li::before {
  content: counter(step);
  position: absolute; left: 0; top: 0; z-index: 1;
  width: 40px; height: 40px; border-radius: 50%;
  background: var(--card); color: var(--terra);
  border: 2px solid var(--terra);
  font-weight: 800; font-size: 15px;
  display: flex; align-items: center; justify-content: center;
  box-shadow: 0 0 0 5px var(--bg);   /* 줄기를 마디 뒤에서 끊어 보이게 */
}
/* 마지막 단계(수업 시작)는 채워서 '도착' 으로 읽히게 */
.steps li:last-child::before { background: var(--terra); color: #fff; }

.steps h3 {
  margin: 0 0 6px; font-size: 16.5px; line-height: 1.45;
  padding-top: 8px;
}
.steps p { margin: 0; color: var(--sub); font-size: 15px; }

.steps-note {
  margin: 26px 0 0; padding: 14px 18px; border-radius: 10px;
  background: var(--ok-bg); color: var(--ok-ink); font-size: 15px;
}

/* 넓은 화면에서도 **한 줄기**로 둡니다 — 두 칸으로 나누면 차례가 꺾입니다.
   대신 글줄이 너무 길어지지 않게 폭만 잡아 줍니다. */
@media (min-width: 860px) {
  .steps { max-width: 720px; }
  .steps li { padding-left: 68px; padding-bottom: 34px; }
  .steps h3 { font-size: 17.5px; }
}

/* ── FAQ ──────────────────────────────────────────── */
#faq details {
  background: var(--card); border: 1px solid var(--line);
  border-radius: 10px; margin-bottom: 10px; padding: 0 18px;
}
#faq summary {
  cursor: pointer; font-weight: 700; padding: 15px 0; font-size: 15px;
  list-style: none; position: relative; padding-right: 26px;
}
#faq summary::-webkit-details-marker { display: none; }
#faq summary::after {
  content: "+"; position: absolute; right: 2px; top: 12px;
  color: var(--terra); font-size: 20px; font-weight: 800;
}
#faq details[open] summary::after { content: "\2212"; }
#faq details p { margin: 0 0 16px; color: var(--sub); font-size: 15px; }

/* ── 신청 폼 ──────────────────────────────────────── */
.form-ok {
  background: var(--ok-bg); color: var(--ok-ink);
  border-radius: var(--radius); padding: 26px 22px; text-align: center;
  font-size: 16px;
}
.form-err {
  background: var(--err-bg); color: var(--err-ink);
  border-radius: 10px; padding: 12px 16px; margin-bottom: 14px; font-size: 15px;
}
.apply-form {
  background: var(--card); border: 1px solid var(--line);
  border-radius: var(--radius); padding: 24px 20px; box-shadow: var(--shadow);
  display: grid; gap: 16px;
}
.apply-form label { display: block; font-weight: 700; font-size: 14px; }
.apply-form input[type=text], .apply-form input[type=tel],
.apply-form select, .apply-form textarea {
  display: block; width: 100%; margin-top: 6px;
  padding: 12px 14px; border: 1.5px solid var(--line); border-radius: 10px;
  font: inherit; font-size: 16px; background: #fff; color: var(--ink);
}
.apply-form input:focus, .apply-form select:focus, .apply-form textarea:focus {
  outline: none; border-color: var(--teal);
}
.apply-form .req { color: var(--terra); }
.grid2 { display: grid; gap: 16px; }
@media (min-width: 560px) { .grid2 { grid-template-columns: 1fr 1fr; } }

.kind { border: 0; margin: 0; padding: 0; }
.kind legend { font-weight: 700; font-size: 14px; margin-bottom: 8px; }
.kind label {
  display: flex; align-items: center; gap: 8px;
  border: 1.5px solid var(--line); border-radius: 10px;
  padding: 11px 14px; margin-bottom: 8px; cursor: pointer;
  font-weight: 600; font-size: 15px;
}
.kind label:has(input:checked) {
  border-color: var(--terra); background: #f9eef0; color: var(--terra-dark);
}
.kind input { accent-color: var(--terra); }

/* 영어공부 참고사항 — 체크 4개를 두 칸으로 */
.sb-grid { display: grid; grid-template-columns: 1fr 1fr; gap: 8px; }
.sb-grid label { margin-bottom: 0; }

.form-note { margin: 0; text-align: center; color: var(--sub); font-size: 13px; }

/* 스팸 봇 함정 칸 — 화면 밖으로 밀어 사람에게는 안 보입니다 */
.hp { position: absolute; left: -9999px; width: 1px; height: 1px; }

/* ── 신청 카드 셋 ─────────────────────────────────────
   레벨테스트 · 수강신청 · 상담. 카드는 무엇을 할 수 있는지만 말하고
   단추를 누르면 그 일에 맞는 팝업만 열립니다. */
.act-cards { margin-top: 26px; }
.act { display: flex; flex-direction: column; }
.act-tag {
  align-self: flex-start; margin-bottom: 10px;
  padding: 4px 11px; border-radius: 999px;
  background: #f6e7e9; color: var(--terra-dark);
  font-size: 12px; font-weight: 700; letter-spacing: .01em;
}
.act h3 { font-size: 19px; }
.act p { flex: 1; line-height: 1.7; margin-bottom: 18px; }
.act-btn {
  display: block; text-align: center;
  padding: 13px 18px; border-radius: 999px;
  background: var(--terra); color: #fff;
  font-weight: 700; font-size: 15px;
}
.act-btn:hover { background: var(--terra-dark); color: #fff; }

/* ── 팝업 ─────────────────────────────────────────────
   <dialog> 를 씁니다. 자바스크립트가 막혀 있으면 아래 :target 규칙이
   같은 내용을 화면 안에 그대로 펼쳐 줍니다. */
.modal {
  width: min(560px, calc(100vw - 32px));
  border: 0; border-radius: 18px; padding: 28px 26px 26px;
  background: var(--card); color: var(--ink);
  box-shadow: 0 24px 60px -12px rgba(36, 29, 31, .3);
  /* 창이 낮으면 팝업이 화면보다 길어집니다. 그때 잘리지 않고 안에서
     내려가게 합니다. 가로는 막아 둡니다 — 앱 화면 띠가 바깥 여백까지
     넓게 뻗어 있어 열어 두면 쓸데없는 가로 막대가 하나 더 생깁니다. */
  max-height: calc(100dvh - 32px);
  overflow-y: auto; overflow-x: hidden;
  overscroll-behavior: contain;
}
.modal::backdrop { background: rgba(36, 29, 31, .45); backdrop-filter: blur(2px); }
.modal h3 { margin: 0 0 6px; font-size: 22px; }
.modal-lead { margin: 0 0 18px; color: var(--sub); font-size: 15px; line-height: 1.7; }
.modal-note { margin: 12px 0 0; text-align: center; color: var(--sub); font-size: 13px; }

/* ── 학부모 앱 화면 넉 장 ─────────────────────────────
   원장님: "오른쪽 스크롤로 4개 정도 이미지를 만들어줘."

   팝업 안에서 **옆으로 밀어** 봅니다. 손을 떼면 한 장이 가운데에 딱
   붙습니다(scroll-snap). 세로로 쌓으면 팝업이 화면보다 길어져서 넉 장을
   보려면 팝업 안을 한참 내려야 합니다.

   그림이 세로로 길어서 높이를 화면에 맞춰 잡고(`--shot-h`) 폭은 따라오게
   둡니다. 그래야 작은 휴대폰에서도 한 장이 통째로 들어옵니다. */
.modal-app { width: min(760px, calc(100vw - 24px)); }
.appshots {
  --shot-h: min(56vh, 460px);
  display: flex; gap: 14px;
  overflow-x: auto; overscroll-behavior-x: contain;
  scroll-snap-type: x mandatory;
  margin-inline: -26px; padding: 4px 26px 12px;
  scrollbar-width: none;
}
.appshots::-webkit-scrollbar { display: none; }
.appshots figure {
  flex: 0 0 auto; margin: 0; scroll-snap-align: center; text-align: center;
}
.appshots img {
  display: block; height: var(--shot-h); width: auto;
  border-radius: 14px; border: 1px solid var(--line);
  background: var(--bg-alt);
}
.appshots figcaption {
  margin-top: 8px; font-size: 12.5px; color: var(--sub); line-height: 1.5;
  max-width: 22em;
}
.appshots figcaption b { display: block; color: var(--ink); font-size: 13.5px; }
@media (min-width: 720px) { .appshots { --shot-h: min(60vh, 540px); } }

/* 원장님: "모바일은 스크롤이 가능한데 데스크탑은 짤려."

   까닭은 위에서 스크롤 막대를 숨겨 둔 것이었습니다. 휴대폰은 손가락으로
   밀면 되니 막대가 없는 편이 깔끔하지만, 마우스에는 옆으로 밀 방법이
   없습니다. 그래서 셋째 장이 오른쪽에서 잘린 채 멈춰 있었습니다.
   마우스를 쓰는 화면에서만 가는 막대를 돌려줍니다. */
@media (pointer: fine) {
  .appshots { scrollbar-width: thin; scrollbar-color: #d9c9c7 transparent; }
  .appshots::-webkit-scrollbar { display: block; height: 8px; }
  .appshots::-webkit-scrollbar-track { background: transparent; }
  .appshots::-webkit-scrollbar-thumb { background: #d9c9c7; border-radius: 999px; }
}
.modal-x { position: absolute; top: 14px; right: 14px; margin: 0; }
.modal-x button {
  width: 34px; height: 34px; border: 0; border-radius: 50%;
  background: var(--bg-alt); color: var(--sub);
  font-size: 20px; line-height: 1; cursor: pointer;
}
.modal-x button:hover { background: var(--line); color: var(--ink); }
.modal .btn-main.wide, .modal .btn-sub.wide { display: block; text-align: center; }
.modal .btn-sub.wide { margin-top: 9px; }

/* 팝업 안의 순서 — 번호는 CSS 가 셉니다 */
.modal-steps { list-style: none; counter-reset: ms; margin: 0 0 20px; padding: 0; }
/* 🔴 `>` 가 꼭 필요합니다. 단계 안에 점 목록(.step-split)을 넣으면서
   그 안의 `li` 까지 여기에 걸려 **번호를 같이 올렸습니다** — 4 다음이
   7 로 뛰었습니다. 동그라미와 세로선도 안쪽 점에 따라붙었습니다.
   바로 밑의 `li` 만 단계로 셉니다. */
.modal-steps > li {
  counter-increment: ms; position: relative;
  padding: 0 0 14px 38px; font-size: 15px; font-weight: 700;
}
.modal-steps > li::before {
  content: counter(ms); position: absolute; left: 0; top: 0;
  width: 26px; height: 26px; border-radius: 50%;
  background: var(--terra); color: #fff;
  font-size: 13px; font-weight: 700; line-height: 26px; text-align: center;
}
.modal-steps > li::after {                    /* 번호를 잇는 세로선 */
  content: ''; position: absolute; left: 12.5px; top: 28px; bottom: 4px;
  width: 1px; background: var(--line);
}
.modal-steps > li:last-child::after { display: none; }
.modal-steps span {
  display: block; margin-top: 3px;
  font-weight: 400; font-size: 14px; color: var(--sub); line-height: 1.6;
}

/* 과목 네 가지 */
.modal-grid { display: grid; grid-template-columns: 1fr 1fr; gap: 9px; margin-bottom: 16px; }
.modal-grid div {
  border: 1px solid var(--line); border-radius: 10px; padding: 11px 13px;
}
.modal-grid b { display: block; font-size: 15px; }
.modal-grid span { display: block; margin-top: 2px; font-size: 13px; color: var(--sub); }

.modal-list { margin: 0 0 18px; padding-left: 18px; }
.modal-list li { font-size: 14px; color: var(--sub); line-height: 1.7; margin-bottom: 6px; }
.modal-list b { color: var(--ink); }

/* 전화 상담 상자 — 누르면 바로 전화가 걸립니다 */
.tel-box {
  display: block; text-align: center;
  border: 1.5px solid var(--terra); border-radius: 14px;
  padding: 16px 18px; margin-bottom: 16px;
}
.tel-box:hover { background: #f9eef0; }
.tel-label { display: block; font-size: 13px; color: var(--sub); }
.tel-num {
  display: block; margin: 3px 0 2px;
  font-size: 26px; font-weight: 800; color: var(--terra); letter-spacing: -.01em;
}
.tel-hours { display: block; font-size: 13px; color: var(--sub); }

/* 원장님: "전화를 누르고 다시 홈페이지에 머물 수 있게 하는 방법은?"
   휴대폰은 이미 그렇습니다 — 전화 앱이 덮일 뿐 홈페이지는 뒤에 살아
   있습니다. 문제는 PC 라서, 마우스를 쓰는 기기에서만 번호를 복사하고
   이 자리에 머무릅니다. */
.tel-copied {
  display: block; margin-top: 6px;
  font-size: 12.5px; font-weight: 700; color: var(--ok-ink);
  opacity: 0; transition: opacity .18s ease;
}
.tel-box.copied .tel-copied { opacity: 1; }
.tel-box.copied { background: var(--ok-bg); border-color: #9ccfb4; }
.modal-or {
  margin: 0 0 14px; text-align: center; color: var(--sub); font-size: 13px;
}
.modal .apply-form { border: 0; box-shadow: none; padding: 0; }
.modal .apply-form input[type=email] {
  display: block; width: 100%; margin-top: 6px;
  padding: 12px 14px; border: 1.5px solid var(--line); border-radius: 10px;
  font: inherit; font-size: 16px; background: #fff; color: var(--ink);
}
.modal .apply-form input[type=email]:focus { outline: none; border-color: var(--teal); }
.apply-form .opt { font-weight: 400; color: var(--sub); font-size: 13px; }

/* 자바스크립트가 막혔을 때 — 주소의 #m-... 로 그 자리에 펼칩니다 */
.modal:target {
  display: block; position: static;
  margin: 22px auto 0; max-width: 560px;
  box-shadow: var(--shadow); border: 1px solid var(--line);
}

/* 바닥글 사업자 정보 */
.ft-biz {
  display: flex; flex-wrap: wrap; gap: 4px 16px;
  padding-top: 18px; margin-top: 18px; border-top: 1px solid rgba(255,255,255,.12);
  font-size: 13px; line-height: 1.9; opacity: .85;
}

/* ── 바닥글 ───────────────────────────────────────── */
.ft { background: var(--teal-dark); color: #e4d2d6; margin-top: 30px; }

/* 원장님: "맨 아래에 위로 가기를 추가."

   홈은 화면으로 열 장이 넘습니다. 끝까지 내려온 분이 다시 메뉴를 보려면
   손가락으로 한참 밀어 올려야 했습니다.

   `href="#top"` 은 브라우저가 원래 아는 약속입니다 — 그런 이름의 자리가
   없으면 **문서 맨 위로** 갑니다. 자바스크립트가 필요 없고, 꺼져 있어도
   동작합니다. `scroll-behavior: smooth` 가 이미 켜져 있어 스르르 올라갑니다. */
/* 원장님: "풋터 밖의 위로 가운데 화살표버튼만 나오게."
   바닥글(어두운 띠) 안이 아니라 그 **위 밝은 바탕**에 놓이므로 색을
   뒤집습니다 — 흰 동그라미에 버건디 화살표. 44px 은 애플 지침의
   "손가락으로 누르는 곳은 최소 44px" 입니다. */
.totop-wrap { display: flex; justify-content: center; padding: 0 0 26px; }
.ft-top {
  display: inline-flex; align-items: center; justify-content: center;
  width: 46px; height: 46px; border-radius: 999px;
  background: var(--card); border: 1px solid var(--line);
  color: var(--terra); box-shadow: 0 2px 10px rgba(36, 29, 31, .08);
  transition: background .15s, transform .15s;
}
.ft-top:hover { background: var(--terra-soft); transform: translateY(-2px); }
.ft-top svg { width: 19px; height: 19px; }
.ft a { color: #fff; }
/* 바닥글 로고 — 어두운 바탕이라 머리글과 **같은 색을 쓰면 안 읽힙니다.**
   버건디 #8B2635 는 여기서 대비가 1.89배, 자주 #5B3A44 는 1.66배로
   국제 기준(4.5배)의 절반도 안 됐습니다. 학원 이름이 사이트에서 가장
   안 보이는 글자였습니다. 밝은 쪽으로 뒤집습니다 (9.2배 · 13.7배). */
.ft .logo-han { color: #EFB2BA; }
.ft .logo-ibt { color: #F1E9EA; }
/* 원장님: "풋터의 탑이 너무 붙었어."
   어두운 띠가 시작하자마자 바로 로고가 나와 숨 쉴 자리가 없었습니다.
   바닥글은 페이지의 끝맺음이라 위를 넉넉히 비워야 "여기서 끝난다" 로
   읽힙니다. 36px → 좁은 화면 48px · 넓은 화면 72px 로 올립니다. */
.ft-in {
  display: flex; flex-direction: column; gap: 18px;
}
/* ⚠ 여기서 `.ft-in` 에 위 여백을 주면 **안 먹습니다.** 이 파일 아래쪽에
   `.wrap { padding: 0 clamp(...) }` 가 있는데, 축약형이라 위·아래 여백까지
   0 으로 되돌립니다. 힘이 같고(클래스 하나씩) 더 아래에 있어서 그쪽이
   이깁니다. 그래서 `.ft` 를 앞에 붙여 힘을 한 단계 올립니다.
   — 바닥글 위 여백은 36px 을 적어 둔 그때부터 줄곧 0 이었습니다. */
.ft .ft-in { padding-top: 46px; padding-bottom: 8px; }
.ft-desc { margin: 8px 0 0; font-size: 14px; }
.ft-nav { display: flex; gap: 18px; flex-wrap: wrap; font-size: 14px; }
.ft-copy {
  padding-top: 16px; padding-bottom: 26px;
  font-size: 12px; color: #b0949b;
}
@media (min-width: 720px) {
  .ft-in { flex-direction: row; justify-content: space-between; align-items: flex-start; }
}

/* 과목마다 실제로 나가는 교재 갈래. 과목 소개만 있으면 "그래서 뭘 배우나"
   가 안 보여서, 학부모가 결국 전화로 묻게 됩니다. */
.subj-books {
  margin-top:10px; padding-top:10px; border-top:1px solid rgba(0,0,0,.08);
  font-size:.9rem; line-height:1.7;
}
.subj-books b { display:block; font-size:.78rem; letter-spacing:.04em;
  opacity:.6; margin-bottom:2px; font-weight:600; }
.subj-books .sub { opacity:.65; }
.subj-note {
  margin-top:8px; font-size:.86rem; line-height:1.65; opacity:.8;
}

/* 교재를 어디서 사고 언제 오는지. 이게 없으면 "교재비 따로 드나요"
   전화가 옵니다. */
.book-buy {
  margin-top:22px; padding:18px 20px; border-radius:12px;
  background:rgba(139,38,53,.05); border:1px solid rgba(139,38,53,.14);
}
.book-buy > b { display:block; font-size:.95rem; margin-bottom:8px; }
.book-buy p { margin:0 0 8px; font-size:.92rem; line-height:1.75; }
.book-buy p:last-child { margin-bottom:0; }

/* ══ 자주 묻는 질문 ══════════════════════════════════════
   전화로 물으시던 것을 화면에서 스스로 찾으실 수 있게 합니다.
   40여 문항을 통째로 펼치면 원하는 질문을 찾다가 지치므로,
   질문만 죽 보이고 누르면 그 답만 열립니다. */
.faq-top {
  padding:40px 0 26px; border-bottom:1px solid rgba(0,0,0,.08);
  background:rgba(139,38,53,.045);
}
.faq-back {
  display:inline-block; margin-bottom:14px;
  font-size:.9rem; color:#8B2635; text-decoration:none;
}
.faq-top h1 { margin:0 0 10px; font-size:1.9rem; letter-spacing:-.01em; }
.faq-lead { margin:0 0 18px; font-size:.98rem; line-height:1.75; max-width:56ch; }
.faq-nav { display:flex; flex-wrap:wrap; gap:8px; }
.faq-nav a {
  padding:7px 14px; border-radius:999px;
  border:1px solid rgba(139,38,53,.22); background:#fff;
  color:#8B2635; font-size:.88rem; text-decoration:none;
}
.faq-nav a:hover { background:#8B2635; color:#fff; border-color:#8B2635; }

.faq-main { padding:34px 0 60px; max-width:820px; }
.faq-sec { margin-bottom:38px; scroll-margin-top:20px; }
.faq-sec > h2 {
  margin:0 0 14px; padding-bottom:10px;
  border-bottom:2px solid #8B2635; font-size:1.25rem;
}
.faq-n {
  display:inline-block; margin-left:7px; padding:1px 9px;
  border-radius:999px; background:rgba(139,38,53,.1);
  color:#8B2635; font-size:.75rem; font-weight:600; vertical-align:3px;
}
.faq-q { border-bottom:1px solid rgba(0,0,0,.08); }
.faq-q summary {
  cursor:pointer; padding:15px 34px 15px 0; position:relative;
  font-size:1rem; font-weight:600; line-height:1.6; list-style:none;
}
.faq-q summary::-webkit-details-marker { display:none; }
.faq-q summary::after {
  content:'+'; position:absolute; right:6px; top:13px;
  font-size:1.3rem; font-weight:400; color:#8B2635; line-height:1;
}
.faq-q[open] summary::after { content:'−'; }
.faq-q summary:hover { color:#8B2635; }
.faq-a { padding:0 0 18px; }
.faq-a p { margin:0 0 11px; font-size:.95rem; line-height:1.85; opacity:.88; }
.faq-a p:last-child { margin-bottom:0; }
.faq-a b { opacity:1; }

.faq-ask {
  margin-top:10px; padding:26px 24px; border-radius:14px;
  background:rgba(139,38,53,.05); border:1px solid rgba(139,38,53,.14);
  text-align:center;
}
.faq-ask h2 { margin:0 0 8px; font-size:1.15rem; }
.faq-ask p { margin:0 0 16px; font-size:.95rem; line-height:1.75; }
.faq-btns { display:flex; gap:10px; justify-content:center; flex-wrap:wrap; }
.faq-btns .hero-btn { width:auto; margin:0; padding:11px 22px; }
.faq-mine { margin:16px 0 0 !important; font-size:.9rem; }

/* ══ 교재 목록 · 마우스 오버 미리보기 ════════════════════
   "교보 링크로 사실 수 있습니다" 라고만 적어 두면 학부모가 제목을 받아 적어
   검색해야 하고, 제목이 비슷한 책이 많아 엉뚱한 권을 삽니다.
   눌러서 바로 가고, 마우스를 올리면 표지가 보이게 합니다. */
.booklist {
  margin-top:24px; padding:20px 22px; border-radius:14px;
  background:#fff; border:1px solid rgba(0,0,0,.08);
}
.booklist h3 { margin:0 0 14px; font-size:1rem; }
.bl-h { font-weight:400; font-size:.86rem; opacity:.7; margin-left:8px; }

/* 갈래 탭 안의 권수 뱃지 */
.way em {
  font-style:normal; font-size:11.5px; opacity:.7; margin-left:4px;
  font-variant-numeric: tabular-nums;
}
.way.on em { opacity:.85; }

/* 갈래를 탭으로 나눈 뒤에는 이 칸이 바로 목록입니다 */
.booklist .wayswitch { margin-bottom:16px; }
.booklist .bl-items[hidden] { display:none; }

/* 교재 안내 세 가지 — 문단 세 덩어리를 카드로 줄였습니다 */
.bookfacts { display:grid; gap:12px; margin:0 0 22px; }
.bf {
  background:var(--card); border:1px solid var(--line);
  border-radius:var(--radius); padding:18px 20px 16px; position:relative;
}
/* 번호와 제목은 **한 줄**로. 예전에는 번호가 제 줄을 차지해서 카드가
   위아래로 늘어지고 제목이 아래로 밀렸습니다 (원장님 지적). */
.bf-h { display:flex; align-items:center; gap:9px; margin-bottom:6px; }
.bf-n {
  display:inline-flex; align-items:center; justify-content:center;
  width:24px; height:24px; border-radius:50%; flex:none;
  background:var(--terra); color:#fff; font:800 13px/1 inherit;
}
.bf b { font-size:1rem; line-height:1.35; }
.bf p { margin:0; font-size:.92rem; line-height:1.7; color:var(--sub); }
@media (min-width: 780px) { .bookfacts { grid-template-columns:repeat(3, 1fr); } }
.bl-g { display:flex; gap:14px; align-items:flex-start; margin-bottom:14px; }
.bl-t {
  flex:none; width:52px; padding-top:5px;
  font-size:.82rem; font-weight:600; color:#8B2635;
}
.bl-items { display:flex; flex-wrap:wrap; gap:7px; }
.bl-i {
  position:relative; display:inline-block;
  padding:6px 12px; border-radius:999px;
  border:1px solid rgba(0,0,0,.12); background:#fff;
  font-size:.84rem; color:inherit; text-decoration:none; white-space:nowrap;
}
.bl-i:hover { border-color:#8B2635; color:#8B2635; }

/* 미리보기 — 마우스를 올리거나 키보드로 옮겨 와도 뜹니다.
   손가락으로 쓰는 기기에는 뜨지 않게 합니다 (누르면 바로 교보로 가야 하니까요). */
.bl-pop {
  position:absolute; left:50%; bottom:calc(100% + 10px);
  transform:translateX(-50%) translateY(4px);
  width:190px; padding:12px; border-radius:12px;
  background:#fff; border:1px solid rgba(0,0,0,.12);
  box-shadow:0 12px 30px rgba(0,0,0,.16);
  opacity:0; visibility:hidden; pointer-events:none; z-index:30;
  transition:opacity .16s ease, transform .16s ease, visibility .16s;
  text-align:center; white-space:normal;
}
.bl-pop img { display:block; width:100%; height:auto; border-radius:6px; margin-bottom:8px; }
.bl-pop b { display:block; font-size:.82rem; line-height:1.5; }
.bl-pop em { display:block; margin-top:5px; font-style:normal; font-size:.75rem; color:#8B2635; }
.bl-pop::after {
  content:''; position:absolute; left:50%; top:100%; margin-left:-6px;
  border:6px solid transparent; border-top-color:#fff;
}
@media (hover:hover) and (pointer:fine) {
  .bl-i:hover .bl-pop, .bl-i:focus-visible .bl-pop {
    opacity:1; visibility:visible; transform:translateX(-50%) translateY(0);
  }
}
.bl-note { margin:14px 0 0; font-size:.86rem; line-height:1.75; opacity:.75; }
@media (max-width:560px) {
  .bl-g { flex-direction:column; gap:6px; }
  .bl-t { width:auto; padding-top:0; }
}

/* ── 수강료 카드 ──────────────────────────────────────
   칸 크기를 모두 같게 둡니다. 어느 하나를 "가장 인기" 로 밀지 않습니다.
   카드마다 과목을 고르는 칸이 있고, 고르면 그 과목 값이 바로 나옵니다. */
.pk { margin-top: 24px; }
.pk:first-of-type { margin-top: 4px; }
.pk-h { margin: 0 0 2px; font-size: 1.12rem; font-weight: 800; letter-spacing: -.02em; }
.pk-h em { display: block; margin-top: 3px; font-style: normal;
           font-size: .84rem; font-weight: 500; color: var(--sub); }
/* 수업 길이 묶음 — 관리자 '상품·가격' 화면과 같은 색을 씁니다.
   25분 파랑 · 55분 자주 (app.css 의 .plan-combo 와 같은 값). */
.pdur { margin-top: 14px; border-radius: 14px; padding: 13px 13px 14px;
        border: 1px solid; }
.pdur-h { display: flex; align-items: baseline; gap: 6px; margin: 0 2px 10px; }
.pdur-h b { font-size: 1.06rem; font-weight: 800; letter-spacing: -.03em; }
.pdur-h span { font-size: .8rem; font-weight: 600; opacity: .72; }

.pdur[data-dur="25"] { background: #f4f8fc; border-color: #d8e6f3; }
.pdur[data-dur="25"] .pdur-h b,
.pdur[data-dur="25"] .pdur-h span { color: #1c5b91; }
.pdur[data-dur="25"] .plan-won   { color: #1c5b91; }
.pdur[data-dur="25"] .plan-per   { color: #163f63; }
.pdur[data-dur="25"] .plan        { border-color: #dce8f4; }
/* `background` 줄임표기를 쓰면 위에서 정한 화살표 크기·위치까지
   지워져서, 화살표 그림이 칸 전체로 늘어납니다. 색만 바꿉니다. */
.pdur[data-dur="25"] .plan-subj, .pdur[data-dur="25"] .plan-one {
  background-color: #eaf2f9; border-color: #d4e4f2; }
.pdur[data-dur="25"] .plan-subj {
  background-image: linear-gradient(45deg, transparent 50%, #1c5b91 50%),
                    linear-gradient(135deg, #1c5b91 50%, transparent 50%); }
.pdur[data-dur="25"] .plan:focus-within {
  border-color: #1c5b91; box-shadow: 0 0 0 3px rgba(28,91,145,.12); }

.pdur[data-dur="55"] { background: #fdf5f8; border-color: #f2d8e2; }
.pdur[data-dur="55"] .pdur-h b,
.pdur[data-dur="55"] .pdur-h span { color: #a8325a; }
.pdur[data-dur="55"] .plan-won   { color: #a8325a; }
.pdur[data-dur="55"] .plan-per   { color: #78233f; }
.pdur[data-dur="55"] .plan        { border-color: #f2dbe3; }
/* `background` 줄임표기를 쓰면 위에서 정한 화살표 크기·위치까지
   지워져서, 화살표 그림이 칸 전체로 늘어납니다. 색만 바꿉니다. */
.pdur[data-dur="55"] .plan-subj, .pdur[data-dur="55"] .plan-one {
  background-color: #fbe9ef; border-color: #f0d3de; }
.pdur[data-dur="55"] .plan-subj {
  background-image: linear-gradient(45deg, transparent 50%, #a8325a 50%),
                    linear-gradient(135deg, #a8325a 50%, transparent 50%); }
.pdur[data-dur="55"] .plan:focus-within {
  border-color: #a8325a; box-shadow: 0 0 0 3px rgba(168,50,90,.12); }

/* 핸드폰에서는 두 칸입니다. 한 칸으로 쌓으면 카드 아홉 장이 2,500px 을
   넘어가, 학부모가 값 하나를 보려고 스무 번을 쓸어내려야 합니다. */
.plans { display: grid; gap: 9px; grid-template-columns: repeat(2, 1fr); }
@media (min-width: 620px) {
  /* auto-fit 이 아니라 auto-fill 입니다. auto-fit 은 카드가 두 장뿐인 줄에서
     두 장이 화면 끝까지 늘어나, 다섯 장짜리 줄과 크기가 달라 보입니다. */
  .plans { gap: 10px; grid-template-columns: repeat(auto-fill, minmax(170px, 1fr)); }
}
.plan {
  background: var(--card); border: 1px solid var(--line);
  border-radius: 12px; padding: 13px 13px 12px;
  display: flex; flex-direction: column;
  transition: border-color .15s ease, box-shadow .15s ease;
}
@media (min-width: 620px) { .plan { padding: 16px 16px 14px; border-radius: var(--radius); } }
.plan:focus-within { border-color: var(--terra); box-shadow: 0 0 0 3px rgba(139,38,53,.1); }
.plan-per { margin: 0 0 7px; font-size: 1.02rem; font-weight: 800; letter-spacing: -.02em; }
.plan-won { font-size: .92rem; font-weight: 800; letter-spacing: -.02em; color: var(--terra-dark); }
.plan-won b { font-size: 1.16rem; letter-spacing: -.045em; font-variant-numeric: tabular-nums; }
.plan-won em { margin-left: 2px; font-style: normal; font-size: .7rem;
               font-weight: 600; color: var(--sub); letter-spacing: 0; }
@media (min-width: 620px) {
  .plan-per { margin: 0 0 9px; font-size: 1.12rem; }
  .plan-won { font-size: 1.02rem; }
  .plan-won b { font-size: 1.34rem; }
  .plan-won em { font-size: .76rem; }
}
/* 카드의 신청 단추 — "4주 8회" 글자가 곧 단추입니다.
   원장님: "4주 8회의 글자에 버튼을 만들어 바로 결제할 수 있게." */
.plan-go {
  display: flex; align-items: center; justify-content: center; gap: 5px;
  margin-top: 10px; min-height: 40px; padding: 8px 10px;
  border-radius: 10px; border: 1px solid transparent;
  font-size: .82rem; font-weight: 600; letter-spacing: -.01em;
  background: var(--pl-soft, var(--bg-alt)); color: var(--pl, var(--sub));
  transition: background .15s, color .15s;
}
.plan-go b { font-weight: 800; }
.plan-go:hover, .plan-go:focus-visible {
  background: var(--pl, var(--terra)); color: #fff;
}
.pdur[data-dur="25"] .plan-go { --pl: #1c5b91; --pl-soft: #eaf2f9; }
.pdur[data-dur="55"] .plan-go { --pl: #a8325a; --pl-soft: #fbe9ef; }
.sec.band .pdur[data-dur="25"] .plan-go { --pl-soft: #e8f1f9; }
.sec.band .pdur[data-dur="55"] .plan-go { --pl-soft: #fbe7ee; }

.plan-subj, .plan-one {
  margin-top: 11px; width: 100%; padding: 9px 8px;
  border: 1px solid var(--line); border-radius: 9px;
  background: var(--bg-alt); color: var(--ink);
  font: inherit; font-size: .8rem; font-weight: 600;
  min-height: 38px;
}
@media (min-width: 620px) { .plan-subj, .plan-one { font-size: .86rem; padding: 9px 10px; } }
.plan-subj { cursor: pointer; -webkit-appearance: none; appearance: none;
  background-image: linear-gradient(45deg, transparent 50%, #8B2635 50%),
                    linear-gradient(135deg, #8B2635 50%, transparent 50%);
  background-position: right 11px center, right 6px center;
  background-size: 5px 5px, 5px 5px; background-repeat: no-repeat;
  padding-right: 23px; text-overflow: ellipsis;
}
.plan-subj:focus-visible { outline: 2px solid var(--terra); outline-offset: 2px; }
.plan-one { text-align: center; color: var(--sub); }
.price-note { margin: 22px 0 0; font-size: .88rem; line-height: 1.8; color: var(--sub); }
.price-note b { color: var(--ink); }

/* ── 핸드폰 다듬기 ────────────────────────────────────
   원장님: "UI 디자인과 CSS 가 더 이쁘고 모바일에 맞추어 수정해줘."
   고친 것은 네 가지입니다 — 눌리는 것을 손가락 크기로, 여백을 화면 폭에
   맞춰 줄이고, 카드 그림자를 한 단계 얕게, 초점 표시를 한 가지로. */

/* 눌리는 것은 손가락만 하게. 애플 기준 44px, 안드로이드 48dp 입니다.
   작으면 옆 것이 눌려서, 학부모가 "눌러도 안 돼요" 라고 하십니다. */
.btn-main, .btn-sub, .btn-signup, .btn-login {
  min-height: 46px; display: inline-flex; align-items: center;
  justify-content: center; line-height: 1.2;
}
.hd-menu a { min-height: 46px; display: flex; align-items: center; }

/* 원장님: "상단 글로벌 메뉴의 회원가입 로그인 버튼의 크기를 줄여줘.
   좀 큰 것 같아."

   머리글 단추만 한 치수 낮춥니다. 바로 위 46px 은 **본문의 큰 단추**를
   위한 값입니다 — 손가락으로 정확히 누르려면 그만해야 하는데, 머리글은
   늘 같은 자리에 붙어 있고 옆에 눌릴 것도 없어서 조금 작아도 됩니다.

   그래도 40px 아래로는 내리지 않습니다. 더 줄이면 손가락이 빗나가고,
   특히 회원가입은 처음 오신 분이 가장 먼저 누르는 곳입니다. */
.hd .btn-signup, .hd .btn-login {
  min-height: 40px; padding: 6px 15px; font-size: 13.5px;
}
.hd-auth { gap: 10px; }

/* 초점 표시를 한 가지로. 지금은 곳마다 달라서 키보드로 다니면 어수선합니다. */
:where(a, button, select, input, textarea, summary):focus-visible {
  outline: 2px solid var(--terra); outline-offset: 2px; border-radius: 6px;
}

/* 카드 그림자를 한 단계 얕게. 짙은 그림자가 여러 장 겹치면 화면이 탁해집니다. */
:root { --shadow: 0 1px 2px rgba(36,29,31,.04), 0 8px 22px -14px rgba(36,29,31,.22); }

/* 카드 안쪽 여백 — 좁은 화면에서 글이 가장자리에 붙지 않게, 넓은 화면에서는 넉넉하게 */
.card { padding: clamp(16px, 4.4vw, 24px); }

/* 좌우 여백도 화면 폭을 따라갑니다 */
.wrap { padding: 0 clamp(16px, 4.4vw, 24px); }

/* 표·코드처럼 넓은 것은 그 칸 안에서만 옆으로 밀리게 (화면 전체가 밀리면 안 됩니다) */
.tablewrap, .bl-g { overflow-x: auto; -webkit-overflow-scrolling: touch; }

/* 그림·표지가 칸을 넘지 않게 */
img, svg { max-width: 100%; height: auto; }

/* 움직임을 불편해하는 분께는 움직이지 않게 (iOS·안드로이드 설정에 있습니다) */
@media (prefers-reduced-motion: reduce) {
  html { scroll-behavior: auto; }
  *, *::before, *::after {
    animation-duration: .01ms !important; animation-iteration-count: 1 !important;
    transition-duration: .01ms !important;
  }
}

/* 자세한 단계 열 개 — 좁은 화면에서 접힙니다 */
.stepmore { margin-top: 22px; }
.stepmore > summary {
  list-style: none; cursor: pointer;
  display: flex; align-items: center; gap: 8px;
  min-height: 50px; padding: 12px 16px;
  background: var(--card); border: 1px solid var(--line); border-radius: 12px;
  font-size: .95rem; color: var(--sub);
}
.stepmore > summary::-webkit-details-marker { display: none; }
.stepmore > summary b { color: var(--ink); }
.stepmore > summary::after {
  content: ''; flex: 0 0 auto; margin-left: auto; width: 9px; height: 9px;
  border-right: 2px solid var(--terra); border-bottom: 2px solid var(--terra);
  transform: rotate(45deg) translate(-2px, -2px); transition: transform .18s ease;
}
.stepmore[open] > summary::after { transform: rotate(-135deg) translate(-3px, -3px); }
.stepmore[open] > summary { margin-bottom: 18px; }
@media (min-width: 720px) { .stepmore > summary { display: none; } }

/* 탭과 교재 링크도 손가락 크기로 (좁은 화면에서만 — 마우스로는 지금도 충분합니다) */
@media (max-width: 719px) {
  .way { min-height: 44px; display: inline-flex; align-items: center; }
  .bl-i { min-height: 42px; display: inline-flex; align-items: center; }
}

/* ── 좁은 화면에서 옆으로 미는 칸 ─────────────────────
   원장님: "세로로 너무 길면 보기 힘드니 가로로 스크롤할 수 있는 부분도
   적용하자." 카드가 여러 장인 묶음을 세로로 쌓으면 화면이 끝없이
   길어집니다. 좁은 화면에서만 한 줄로 눕히고 손가락으로 밀게 합니다.
   손을 떼면 카드가 가장자리에 딱 붙습니다(scroll-snap).
   넓은 화면에서는 지금처럼 격자로 돌아갑니다. */
@media (max-width: 719px) {
  .swipe {
    display: flex; gap: 10px;
    overflow-x: auto; -webkit-overflow-scrolling: touch;
    scroll-snap-type: x mandatory;
    /* 칸 바깥 여백만큼 빼내고 다시 채워, 카드가 화면 끝까지 흐르게 */
    margin-inline: calc(-1 * clamp(16px, 4.4vw, 24px));
    padding-inline: clamp(16px, 4.4vw, 24px);
    padding-bottom: 12px;
    scrollbar-width: none;
  }
  .swipe::-webkit-scrollbar { display: none; }
  .swipe > * {
    flex: 0 0 clamp(210px, 66vw, 260px);
    scroll-snap-align: start;
    min-width: 0;
  }
  /* 밀 수 있다는 것을 보여 주는 실선 — 끝까지 밀면 사라집니다 */
  .swipewrap { position: relative; }
  .swipewrap::after {
    content: ''; position: absolute; top: 0; right: calc(-1 * clamp(16px, 4.4vw, 24px));
    width: 28px; height: 100%;
    background: linear-gradient(90deg, transparent, var(--bg) 78%);
    pointer-events: none;
  }
  .sec.alt .swipewrap::after { background: linear-gradient(90deg, transparent, var(--bg-alt) 78%); }
  .pdur .swipewrap::after { display: none; }

  /* 수강료는 묶음 안이라 바깥 여백 계산이 다릅니다 */
  .pdur .swipe {
    margin-inline: -13px; padding-inline: 13px; padding-bottom: 10px;
  }
  .pdur .swipe > * { flex: 0 0 clamp(150px, 46vw, 190px); }
}

/* 옆으로 미는 칸의 조작 줄 — 좁은 화면에서만 보입니다 */
.swipe-nav { display: none; }
@media (max-width: 719px) {
  .swipe-nav {
    display: flex; align-items: center; justify-content: center; gap: 12px;
    margin-top: 4px;
  }
  .swipe-arrow {
    display: flex; align-items: center; justify-content: center;
    width: 38px; height: 38px; padding: 0; flex: none;
    border: 1px solid var(--line); border-radius: 999px;
    background: var(--card); color: var(--terra);
    cursor: pointer; transition: opacity .18s ease, transform .12s ease;
  }
  .swipe-arrow::before {
    content: ''; width: 8px; height: 8px;
    border-top: 2px solid currentColor; border-right: 2px solid currentColor;
  }
  .swipe-arrow.prev::before { transform: rotate(-135deg) translate(-2px, -2px); }
  .swipe-arrow.next::before { transform: rotate(45deg) translate(-1px, 1px); }
  .swipe-arrow:disabled { opacity: .28; pointer-events: none; }
  .swipe-arrow:active { transform: scale(.9); }

  .swipe-dots { display: flex; align-items: center; gap: 6px; }
  .swipe-dot {
    position: relative;
    width: 7px; height: 7px; padding: 0; border: 0; border-radius: 999px;
    background: var(--line); cursor: pointer;
    transition: width .2s ease, background .2s ease;
  }
  .swipe-dot.on { width: 18px; background: var(--terra); }
  /* 보이는 점은 작게, 손가락이 닿는 자리는 넓게 (44px 가까이) */
  .swipe-dot::after { content: ''; position: absolute; inset: -18px -7px; }

  /* 묶음 안에서는 그 묶음 색을 따라갑니다 */
  .pdur[data-dur="25"] .swipe-arrow { color: #1c5b91; border-color: #d4e4f2; }
  .pdur[data-dur="25"] .swipe-dot.on { background: #1c5b91; }
  .pdur[data-dur="55"] .swipe-arrow { color: #a8325a; border-color: #f0d3de; }
  .pdur[data-dur="55"] .swipe-dot.on { background: #a8325a; }

  /* 끝까지 밀면 오른쪽 흐림을 걷습니다 */
  .swipewrap.at-end::after { opacity: 0; transition: opacity .2s ease; }
}

/* 첫 화면 — 약속 한 줄 (제목과 설명 사이) */
.hero-vow {
  margin: 0 auto 12px; max-width: 30em;
  font-size: clamp(15px, 1.7vw, 17.5px); font-weight: 700;
  color: var(--terra-dark); line-height: 1.7;
}
/* 네 칸 중 원생 특혜 칸만 눈에 띄게 */
.trust li.trust-hi { color: var(--terra-dark); }   /* 바탕은 위 3단계 톤이 맡습니다 */
.trust li.trust-hi b { color: var(--terra-dark); }

/* ── 키워드 + 두 줄 요약 ──────────────────────────────
   원장님: "모바일로 내용이 너무 길어. 간략한 키워드로 이해하기 쉽게
   2줄씩 요약." 긴 문단을 키워드 한 줄과 설명 두 줄로 나눕니다.
   휴대폰은 한 줄에 18자쯤 들어가서, 원래 문단은 한 덩어리가 예닐곱
   줄씩 넘어갔습니다. */
.keys { display: grid; gap: 9px; margin: 4px 0 0; }
/* 원장님: "swipewrap 과 위의 keys 클래스 사이에 gap 이 없어."

   맞습니다. 소개 꼭지에서 '한국에 살면서, 미국 학교 영어 영재 교육'
   목록을 지우면서, 그 칸이 갖고 있던 여백까지 같이 사라졌습니다.
   네 칸과 아래 옆으로 미는 칸이 맞붙어 한 덩어리처럼 보였습니다.

   둘은 **다른 이야기**입니다 — 위는 한미ibt 가 어떤 곳인가, 아래는
   수업이 어떻게 굴러가는가. 애플 지침대로 여백으로 나눕니다.
   `.keys` 자체에 아래 여백을 주지 않고 둘 사이에만 주는 까닭은,
   `.keys` 가 다른 꼭지에도 쓰이는데 거기는 뒤에 오는 것이 달라서입니다. */
.keys + .swipewrap { margin-top: var(--s8); }
/* 소개 꼭지의 네 칸이 첫 화면 밑 타일로 옮겨 가면서, 이제 소개 설명 줄
   바로 밑에 옆으로 미는 칸이 옵니다. 같은 만큼 띄워 줍니다. */
.sec-lead + .swipewrap { margin-top: var(--s8); }
.keys > div {
  padding: 13px 15px; border-radius: 12px;
  background: var(--card); border: 1px solid var(--line);
  border-left: 3px solid var(--terra);
}
.keys .k {
  display: block; margin-bottom: 3px;
  font-size: clamp(15px, 1.7vw, 16.5px); font-weight: 800;
  letter-spacing: -.025em; color: var(--terra-dark);
}
.keys p { margin: 0; font-size: clamp(14px, 1.6vw, 15px); line-height: 1.7; color: var(--sub); }
.keys p b { color: var(--ink); font-weight: 700; }
@media (min-width: 720px) { .keys { grid-template-columns: 1fr 1fr; } }

/* ── 카드 왼쪽에 작은 사진 ─────────────────────────────
   원장님: "아이들이 학사모 쓴 사진, 공부하는 사진 등 배경이 밝은 사진을
   찾아서 카드 왼쪽에 작은 이미지로 넣도록", "영어에 날개를 달아드립니다에
   넣고 싶어."

   `.kimg` 가 붙은 칸에만 적용됩니다 — `.keys` 는 다른 꼭지에도 쓰는데
   거기는 사진이 없습니다.

   🔴 글 쪽 상자에 `min-width: 0` 을 줍니다. 안 주면 긴 한글 줄이
   줄바꿈되지 않고 칸을 밀어내 사진이 찌그러집니다. 가로 배치에서
   가장 흔히 놓치는 곳입니다.

   사진은 144px 짜리를 넣고 화면에서 60~72px 로 줄입니다 — 아이폰처럼
   촘촘한 화면에서 또렷하려면 두 배로 넣어야 합니다. 좁은 화면에서는
   60px 로 낮춰 글 자리를 남깁니다.

   설명(alt)은 비워 둡니다. 바로 옆에 같은 뜻의 글이 있어서, 화면을
   읽어 주는 프로그램이 두 번 읽지 않게 하려는 것입니다. */
.keys > .kimg { display: flex; gap: 13px; align-items: flex-start; }
.keys > .kimg > img {
  flex: 0 0 auto; width: 60px; height: 60px;
  border-radius: 10px; object-fit: cover;
  background: var(--bg-alt);          /* 사진이 오기 전 빈 자리 */
}
.keys > .kimg > div { min-width: 0; }
@media (min-width: 720px) {
  .keys > .kimg { gap: 15px; }
  .keys > .kimg > img { width: 72px; height: 72px; }
}

.keys-h {
  margin: 22px 0 0; padding-top: 18px; border-top: 1px solid var(--line);
  font-size: clamp(16px, 2vw, 19px); font-weight: 800;
  letter-spacing: -.03em; color: var(--terra);
}
.keys-list { margin: 10px 0 0; padding-left: 20px; color: var(--sub); }
.keys-list li { margin-bottom: 7px; }
.keys-list li::marker { color: var(--terra); }
.keys-list b { color: var(--ink); }

/* ── 교과과정 탭 ─────────────────────────────────────
   네 과목을 카드로 세로로 깔면 휴대폰에서 1,400px 이 넘습니다.
   탭으로 두면 한 번에 한 과목만 보입니다. */
.subjpanes { margin-top: 14px; }
.subj-eyebrow {
  margin: 0 0 4px; font-size: .76rem; font-weight: 700;
  letter-spacing: .05em; color: var(--sj, var(--terra));
}
/* 원장님: "모바일에서 파닉스, 회화, 문법, 단어를 2단으로 만들어줘."
   좁은 화면에서도 두 칸으로 둡니다. 넷을 세로로 쌓으면 그만큼 화면이
   길어져서 아래 '내 아이는 어디쯤?' 이 한참 뒤로 밀립니다. */
.subj .tracks { display: grid; grid-template-columns: 1fr 1fr; gap: 8px; margin-top: 14px; }
/* 칸이 절반으로 좁아지니 안쪽 여백과 글자를 한 단계 줄입니다 — 안 그러면
   "1000 Basic 부터 Wordly Wise 3000 까지" 가 넉 줄로 늘어집니다. */
@media (max-width: 619px) {
  .subj .tracks { gap: 6px; }
  .subj .tracks > div { padding: 10px 11px; }
  .subj .tracks b { font-size: .9rem; }
  .subj .tracks span { font-size: .78rem; line-height: 1.5; }
}
.subj .tracks > div {
  padding: 11px 13px; border-radius: 10px;
  background: var(--sj-soft, var(--bg-alt));
  border-left: 3px solid var(--sj, var(--terra));
}
.subj .tracks b { display: block; font-size: .95rem; margin-bottom: 2px; }
.subj .tracks span { font-size: .84rem; color: var(--sub); line-height: 1.6; }

.wordstair { font-size: .88rem; }
.wordstair th, .wordstair td { padding: 10px 12px; text-align: left;
  border-bottom: 1px solid var(--line); vertical-align: top; }
.wordstair thead th { background: var(--sj-soft, var(--bg-alt));
  color: var(--sj, var(--sub));
  font-size: .78rem; font-weight: 700; white-space: nowrap; }
.wordstair tbody tr:last-child td { border-bottom: 0; }
.wordstair td:first-child { color: var(--sub); white-space: nowrap; }
.wordstair table { width: 100%; border-collapse: collapse; }

/* `.card p` 가 글자색을 흐리게 잡고 있어서, 한 칸 더 좁혀 이깁니다.
   안 그러면 진한 바탕 위에 흐린 글씨가 얹혀 안 읽힙니다. */
.card p.subj-hi {
  margin: 14px 0 0; padding: 14px 16px; border-radius: 10px;
  background: var(--sj, var(--terra)); color: #fff; line-height: 1.75;
  font-size: clamp(14px, 1.6vw, 15px);
}
.card p.subj-hi b { color: #fff; }

/* 표가 좁은 화면에서 세로로 쥐어짜이지 않게 — 칸 안에서 옆으로 밉니다 */
.wordstair { min-width: 460px; }

/* 지금 쓰는 교재 — 갈래마다 권수가 달라도 접힌 높이를 같게 */
.bl-items.is-clamped {
  max-height: 152px; overflow: hidden;
  -webkit-mask-image: linear-gradient(180deg, #000 104px, transparent);
          mask-image: linear-gradient(180deg, #000 104px, transparent);
}
.bl-more {
  display: flex; align-items: center; justify-content: center; gap: 6px;
  width: 100%; min-height: 44px; margin-top: 10px; padding: 10px 14px;
  border: 1px solid var(--line); border-radius: 10px;
  background: var(--card); color: var(--terra);
  font: inherit; font-size: .9rem; font-weight: 700; cursor: pointer;
}
.bl-more::after {
  content: ''; width: 8px; height: 8px;
  border-right: 2px solid currentColor; border-bottom: 2px solid currentColor;
  transform: rotate(45deg) translate(-2px, -2px); transition: transform .18s ease;
}
.bl-more.is-open::after { transform: rotate(-135deg) translate(-3px, -3px); }
.bl-more:hover { border-color: var(--terra); }

/* 탭 줄 — 글자가 두 줄로 깨지지 않게, 넘치면 옆으로 밉니다 */
.wayswitch {
  display: flex; flex-wrap: nowrap; overflow-x: auto;
  -webkit-overflow-scrolling: touch; scrollbar-width: none;
}
.wayswitch::-webkit-scrollbar { display: none; }
.way { white-space: nowrap; flex: 0 0 auto; }

/* ── 1:1 vs 그룹 — 표가 아니라 격자 ────────────────
   표는 칸이 셋이라 좁은 화면에서 옆으로 밀어야 했고, 밀면 왼쪽 이름이
   사라져 무엇을 비교 중인지 알 수 없었습니다. 좁은 화면에서는 항목마다
   카드 한 장, 넓은 화면에서는 세 칸으로 늘어섭니다. */
.vs { display: grid; gap: var(--gap); }
.vs-head { display: none; }
/* 원장님: "모바일에서 스피킹·진도·교재·시간 등을 컬럼으로 하지 않고
   Row 로 만들어서 2칼럼을 합치자." 항목 이름이 **한 줄 전체**를 차지하고,
   그 아래 1:1 과 그룹이 **나란히 두 칸**으로 놓입니다. 견줄 것이 좌우로
   맞붙어야 차이가 한눈에 보입니다 — 위아래로 쌓으면 눈이 왕복해야 합니다. */
.vs-row {
  display: grid; grid-template-columns: 1fr 1fr; gap: var(--s3);
  background: var(--card); border: 1px solid var(--line);
  border-radius: var(--r2); padding: var(--pad);
}
.vs-key {
  grid-column: 1 / -1;
  padding-bottom: var(--s3); border-bottom: 1px solid var(--line);
}
.vs-key b {
  display: block; font-size: 15.5px; font-weight: 800;
  letter-spacing: -.03em; color: var(--ink); margin-bottom: 2px;
}
.vs-key span {
  display: block; font-size: 13px; line-height: 1.6; color: var(--sub);
}
.vs-cell { padding-left: var(--s3); border-left: 2px solid var(--line); min-width: 0; }
.vs-cell.a { border-left-color: #1c5b91; }
.vs-cell.b { border-left-color: #a8325a; }
.vs-tag {
  display: inline-flex; align-items: center; gap: 4px;
  font-size: 11.5px; font-weight: 700; letter-spacing: .02em;
  margin-bottom: 2px;
}
.vs-cell.a .vs-tag { color: #1c5b91; }
.vs-cell.b .vs-tag { color: #a8325a; }
.vs-tag .ic { width: 13px; height: 13px; }
.vs-cell b { display: block; font-size: 15px; line-height: 1.5; letter-spacing: -.02em; }
.vs-cell span:not(.vs-tag) {
  display: block; margin-top: 2px;
  font-size: 13.5px; line-height: 1.65; color: var(--sub);
}

/* ── 가운데에 온 카드만 제 크기로 ──────────────────────
   원장님: "모바일에서 카드의 크기가 작았다가 스크롤하면서 포커스가
   중앙에 있을 때 커지고 다시 작아지도록." 그리고 "영어를 어떻게 공부하고
   계세요?도 오른쪽으로 스크롤할 때" 같게.

   같은 크기 카드가 쭉 늘어서 있으면 지금 어디를 읽는 중인지 눈이
   놓칩니다. 가운데 온 한 장만 제 크기로 서고 나머지는 한 걸음 물러납니다.

   🔴 커지는 쪽이 **원래 크기(scale 1)** 입니다. 원래보다 크게 키우면
   좁은 화면에서 옆으로 삐져나갑니다.

   흐리게 하는 정도는 일부러 약합니다(.8). 더 흐리면 옆 카드의 글이
   안 읽혀서, 미리 훑어보고 고를 수가 없습니다.

   `mid` 는 자바스크립트가 붙입니다. 스크롤 위치를 계속 재지 않고
   브라우저에게 맡깁니다(IntersectionObserver) — 손가락을 움직일 때마다
   계산이 돌면 휴대폰이 버벅입니다. */
/* 🔴 `.fx` 는 **자바스크립트가 붙입니다.** 여기서 카드 이름을 하나하나
   적지 않는 까닭이 둘입니다.
   · 적용할 곳이 열 군데라, CSS 와 JS 두 곳에 같은 목록을 적어 두면
     나중에 한쪽만 고치게 됩니다. 목록은 JS 한 곳에만 둡니다.
   · 자바스크립트가 안 돌면 `.fx` 가 안 붙어 **카드가 제 크기로** 보입니다.
     이름으로 적어 두면 그 경우 카드가 작아진 채 굳어 버립니다. */
@media (max-width: 719px) {
  /* 원장님: "움직임을 부드럽게 해줘. 너무 딱딱하게 커져."

     딱딱했던 진짜 까닭은 빠르기가 아니라 **단계가 둘뿐**이었다는 것입니다.
     작다 / 크다 사이를 한 번에 건너뛰니 툭 튀어 오릅니다.
     가운데로 오는 길에 **중간 단계**를 하나 더 둡니다:

         멀리 .86  →  가까이 .94  →  한가운데 1

     그래서 카드는 두 번에 나누어 자랍니다. 게다가 바깥 띠에 먼저 닿아서
     **더 일찍 자라기 시작합니다** — 갑자기 커지는 느낌이 사라집니다.

     시간도 .36초에서 .5초로 늘리고, 곡선은 처음에 천천히 떠서 끝에서
     부드럽게 멎는 것으로 바꿨습니다. 예전 곡선은 시작이 가팔라
     "탁" 하고 튀어 나오는 느낌이었습니다. */
  .fx {
    --s: .86;
    transform: scale(var(--s));
    opacity: .68;
    /* 작아질 때는 튕기지 않습니다 — 물러나는 카드가 튕기면 산만합니다 */
    transition: transform  .5s cubic-bezier(.33, .02, .26, 1),
                opacity    .5s cubic-bezier(.33, .02, .26, 1),
                box-shadow .5s ease;
  }
  /* 바깥 띠 — 가운데로 오는 길목 */
  .fx.near { --s: .94; opacity: .86; }
  /* 한가운데.
     🔴 멈추는 자리가 **원래 크기(1)** 입니다. 1 을 넘겨 멈추면 옆으로
     미는 칸이 위아래를 잘라 먹고(overflow-x 를 주면 세로도 같이 잘립니다),
     세로 카드는 바깥 여백을 넘어갑니다.
     `.near` 보다 아래에 적어 두 개가 같이 붙었을 때 이쪽이 이깁니다. */
  .fx.mid {
    /* 원장님: "커지는 카드의 글자도 10% 크게 해줘."

       글자만 따로 키우면 줄 수가 바뀌어 카드 키가 늘었다 줄었다 하고
       그 아래 내용이 덩달아 밀립니다. 대신 **카드째 1.1 배**로 키웁니다 —
       글자도 그림도 여백도 함께 10% 커지므로 모양이 흐트러지지 않습니다.

       바깥 여백(좌우 20~24px) 안에서 커집니다. 390px 화면이면 카드가
       350 → 385 이 되어 양옆에 2.5px 씩 남습니다. 빠듯하지만 넘지는
       않고, 넘더라도 `overflow-x: clip` 이 화면을 밀지 않습니다. */
    --s: 1.1;
    opacity: 1;
    box-shadow: 0 10px 28px rgba(36, 29, 31, .16);
    /* 원장님: "약간의 바운스를 약하게."

       곡선의 y 값을 1 보다 크게 두면 목표를 **살짝 지나쳤다가** 되돌아와
       멈춥니다. 1.42 는 지나치는 양이 커지는 폭의 9% 쯤 — 0.86 에서
       1 까지 0.14 를 가니 잠깐 1.013 까지 갔다가 1 에 섭니다.
       1.3% 라 "튄다" 보다 "탄력 있다" 로 읽힙니다.

       멈추는 자리는 그대로 1 입니다. 지나치는 것은 지나가는 한순간뿐이라
       잘릴 걱정이 없습니다 — 그래도 아래 `.swipe` 에 여유를 조금 뒀습니다. */
    transition: transform  .52s cubic-bezier(.34, 1.42, .64, 1),
                opacity    .34s ease-out,
                box-shadow .4s ease-out;
  }

  /* 원장님: "가로카드가 튕겨."

     가로 카드는 **튕김을 아예 없앱니다.** 세로에 쓰는 곡선에도 아주
     작은 튕김(약 1%)이 남아 있는데, 옆으로 미는 카드는 손가락을 떼고
     딱 멈추는 동작이라 그 1% 도 눈에 띕니다. 여기만 넘어가지 않는
     곡선으로 바꿔, 커지기만 하고 되돌아오는 일이 없게 합니다.

     세로 카드는 그대로 둡니다 — 원장님이 "세로는 아주 좋아" 하셨습니다. */
  .swipe > .fx.mid {
    transition: transform  .5s cubic-bezier(.25, .8, .35, 1),
                opacity    .34s ease-out,
                box-shadow .4s ease-out;
  }

  /* 옆으로 미는 칸은 세로도 같이 잘립니다(overflow-x 를 주면 그렇게 됩니다).
     튕기는 한순간 카드 위가 잘리지 않도록 위쪽에 여유를 두고, 그만큼
     margin 으로 당겨 배치는 그대로 둡니다. 4.6% 면 키 250px 카드가
     위아래로 6px 씩 넘치므로 12px 이면 넉넉합니다. */
  .swipe { padding-top: 12px; margin-top: -12px; }
}

/* 움직임을 줄이는 설정을 켜신 분께는 크기를 바꾸지 않습니다 —
   어지럼을 느끼실 수 있습니다. 내용은 그대로 다 보입니다. */
@media (prefers-reduced-motion: reduce) {
  .fx, .fx.mid { transform: none; opacity: 1; transition: none; }
}

@media (min-width: 720px) {
  /* 원장님: "컬럼을 2개로 해줘." 넓은 화면에서도 **두 칸**입니다.
     항목 이름(스피킹·진도…)은 예전처럼 왼쪽 한 칸을 차지하지 않고,
     좁은 화면과 똑같이 **줄 맨 위 한 줄**로 올라갑니다. 그래야 견줄 두
     칸이 화면을 반씩 나눠 갖고, 항목 이름 칸이 비어 보이지 않습니다. */
  .vs { gap: 0; background: var(--card); border: 1px solid var(--line);
        border-radius: var(--r2); overflow: hidden; }
  .vs-head {
    display: grid; grid-template-columns: 1fr 1fr;
    background: var(--bg-alt); border-bottom: 1px solid var(--line);
  }
  .vs-head > span:first-child { display: none; }
  .vs-head span { padding: 14px 22px; }
  .vs-h { display: flex; align-items: center; gap: 7px;
          font-size: 16px; font-weight: 800; letter-spacing: -.02em; }
  .vs-h .ic { width: 18px; height: 18px; }
  .vs-h.a { color: #1c5b91; } .vs-h.b { color: #a8325a; }
  .vs-h.b { border-left: 1px solid var(--line); margin-left: -1px; padding-left: 23px; }

  .vs-row {
    border: 0; border-radius: 0; gap: 0;
    padding: 20px 22px 22px;
    border-bottom: 1px solid var(--line);
  }
  .vs-row:last-child { border-bottom: 0; }
  .vs-key { padding-bottom: 14px; margin-bottom: 16px; }
  .vs-key b { font-size: 17px; }
  .vs-key span { font-size: 14px; }
  .vs-cell { padding-left: 18px; }
  .vs-cell b { font-size: 16.5px; }
  .vs-cell span:not(.vs-tag) { font-size: 14.5px; }
  .vs-tag { font-size: 12.5px; }
  .vs-tag .ic { width: 14px; height: 14px; }
}

/* 그룹 대기 안내 */
.grpwait { margin-top: 14px; padding: 16px 18px; border-radius: 12px;
  background: var(--terra-soft); border: 1px solid #e9ccd2; }
.grpwait-h { margin: 0 0 8px; font-size: clamp(15px, 1.9vw, 17px);
  font-weight: 800; letter-spacing: -.03em; color: var(--terra-dark); }
.grpwait ul { margin: 0; padding-left: 19px; color: var(--terra-dark); }
.grpwait li { margin-bottom: 6px; font-size: clamp(14px, 1.6vw, 15px); line-height: 1.7; }
.grpwait li:last-child { margin-bottom: 0; }
.grpwait li::marker { color: var(--terra); }

/* ── 진학 성과 ──────────────────────────────────── */
.sec-eyebrow { margin: 0 0 6px; font-size: clamp(13px, 1.5vw, 14px);
  font-weight: 700; color: var(--terra); letter-spacing: .01em; }
.schools { list-style: none; margin: 0; padding: 0; display: grid; gap: 10px; }
@media (min-width: 720px) { .schools { grid-template-columns: repeat(3, 1fr); } }
.schools li { background: var(--card); border: 1px solid var(--line);
  border-radius: 12px; padding: 15px 16px; }
.schools b { display: block; font-size: .82rem; font-weight: 700;
  color: var(--terra); margin-bottom: 5px; letter-spacing: .02em; }
.schools span { font-size: clamp(14px, 1.6vw, 15.5px); font-weight: 600;
  color: var(--ink); line-height: 1.7; }

/* ── 문제 제기 카드 번호 · 약속 상자 ─────────────── */
.card-n { display: block; font-size: .78rem; font-weight: 800;
  color: var(--terra); letter-spacing: .06em; margin-bottom: 6px; }
.vow { margin-top: 18px; padding: 20px; border-radius: 14px;
  background: var(--terra); color: #fff; }
.vow > b { display: block; font-size: clamp(18px, 2.6vw, 22px);
  font-weight: 800; letter-spacing: -.03em; margin-bottom: 12px; }
.vow ul { margin: 0; padding-left: 19px; }
.vow li { margin-bottom: 9px; line-height: 1.75;
  font-size: clamp(14px, 1.6vw, 15.5px); color: rgba(255,255,255,.88); }
.vow li:last-child { margin-bottom: 0; }
.vow li b { color: #fff; }
.vow li::marker { color: rgba(255,255,255,.55); }

/* ── 스피킹 네 단계 ─────────────────────────────── */
/* 스피킹 네 단계 — 핸드폰에서 두 칸씩, 넓은 화면에서 네 칸.
   글이 짧아 반 폭에도 다 들어갑니다. 넷이 순서라 한눈에 봐야
   자기 아이가 어디쯤인지 찾을 수 있습니다. */
.lv { display: grid; gap: var(--gap); grid-template-columns: 1fr 1fr; }
@media (min-width: 860px) { .lv { grid-template-columns: repeat(4, 1fr); } }
.lvc { padding: var(--s3); }
@media (min-width: 620px) { .lvc { padding: var(--s4); } }
.lv-en { font-size: .68rem; }
.lv-ko { font-size: .95rem; }
.lv-now, .lv-goal { font-size: .8rem; }
@media (min-width: 620px) {
  .lv-en { font-size: .74rem; } .lv-ko { font-size: 1.02rem; }
  .lv-now, .lv-goal { font-size: .84rem; }
}
.lvc { background: var(--card); border: 1px solid var(--line);
  border-radius: 14px; padding: 16px; box-shadow: var(--shadow); }
.lv-en { font-size: .74rem; font-weight: 700; letter-spacing: .02em; margin-bottom: 3px; }
.lv-ko { font-size: 1.02rem; font-weight: 800; letter-spacing: -.03em; margin-bottom: 9px; }
.lv-now { font-size: .84rem; color: var(--sub); line-height: 1.6; margin: 0 0 11px; }
.lv-goal-h { display: inline-block; font-size: .7rem; font-weight: 700;
  color: #fff; padding: 3px 8px; border-radius: 6px; margin-bottom: 6px; }
.lv-goal { font-size: .84rem; color: var(--sub); line-height: 1.6; margin: 0; }
/* 단계마다 색 한 벌. 밝기를 한 단계 낮춘 값입니다 — 예전 색은 흰 바탕이나
   옅은 바탕 위에서 국제 기준(4.5배)에 못 미쳤습니다. 중상급 3.88, 중급 3.96,
   초급 4.39 였습니다. 새 값은 모두 5.7배가 넘습니다. 색감은 그대로입니다. */
.lvc.c1 { --lv: #1F6247; --lv-soft: #E7F3EC; }
.lvc.c2 { --lv: #166380; --lv-soft: #E6F2F8; }
.lvc.c3 { --lv: #7A580A; --lv-soft: #F8F1E0; }
.lvc.c4 { --lv: #66409A; --lv-soft: #F0EAF7; }
.lvc .lv-en     { color: var(--lv); }
.lvc .lv-goal-h { background: var(--lv); }

/* ── 원생 특혜 ──────────────────────────────────────
   수강료를 뒷받침하는 근거이지 주인공이 아닙니다. 한 덩이로 작게. */
/* 원장님: "클래스 perk 의 라인이 빨간데 그것을 화이트로 바꾸고."
   분홍 바탕 위의 버건디 테두리가 셌습니다. 흰 선으로 바꾸면 상자가
   바탕에서 부드럽게 떠오르기만 하고 테두리가 먼저 보이지 않습니다. */
.perk { border: 1.5px solid #fff; border-radius: 14px;
  background: var(--terra-soft); padding: clamp(15px, 3.6vw, 20px); }
.perk-price { margin: 0 0 12px; display: flex; flex-wrap: wrap;
  align-items: baseline; gap: 4px 10px; }
.perk-price b { font-size: clamp(19px, 4.4vw, 25px); font-weight: 800;
  letter-spacing: -.035em; color: var(--terra-dark);
  font-variant-numeric: tabular-nums; }
.perk-price i { font-style: normal; color: var(--terra); }
.perk-price span { font-size: clamp(12.5px, 1.5vw, 13.5px);
  font-weight: 600; color: var(--terra); opacity: .85; }
.perk-list { list-style: none; margin: 0; padding: 0; display: grid; gap: 6px; }
@media (min-width: 620px) { .perk-list { grid-template-columns: 1fr 1fr; } }
.perk-list li { background: rgba(255,255,255,.6); border-radius: 8px;
  padding: 9px 12px; font-size: clamp(13.5px, 1.5vw, 14.5px);
  color: var(--terra-dark); line-height: 1.6; }
.perk-list b { font-weight: 800; margin-right: 4px; }
/* 흐리게 하는 데 `opacity` 를 쓰면 **안에 든 글자까지** 같이 흐려집니다.
   안에 "홈페이지 방문" 을 또렷하게 둬야 해서 색으로 바꿉니다. */
.perk-list span { display: block; color: rgba(111, 29, 41, .74); font-size: .92em; }
.perk-note { margin: 11px 0 0; font-size: clamp(13px, 1.5vw, 14px);
  color: var(--terra-dark); opacity: .9; line-height: 1.65; }
.perk-note b { opacity: 1; }

/* 제목 앞 이모지 — 제목 **위**가 아니라 같은 줄 앞에 붙습니다 */
.emo {
  display: inline-block; margin-right: 7px;
  font-size: .92em; line-height: 1; vertical-align: -1px;
  font-family: "Apple Color Emoji", "Segoe UI Emoji", "Noto Color Emoji", sans-serif;
}
.pk-h .emo { font-size: 1em; }
.pdur-h .emo { margin-right: 6px; }
.vs thead th .emo { margin-right: 5px; }

/* ══════════════════════════════════════════════════════
   모바일 격자 — 8pt 체계

   원장님: "모바일 UI 디자인에서 가장 아름답고 가독성 있는 그리드를
   적용해서 다시 CSS를 제안하고 적용해줘."

   고친 까닭 네 가지입니다.

   1) 숫자가 어중간했습니다. clamp(16px, 4.4vw, 24px) 은 390px 화면에서
      17.16px 이 됩니다. 이런 값은 어디에도 안 맞아떨어져서, 카드 모서리와
      글자 시작점이 미세하게 어긋나 보입니다. 모든 간격을 **4의 배수**로
      바꿨습니다 (4 · 8 · 12 · 16 · 20 · 24 · 32 · 40 · 56 · 72).

   2) 제목이 약했습니다. 본문 16px 에 제목이 21px 이면 1.3배라 훑을 때
      제목이 눈에 안 걸립니다. 본문을 15.5px 로 살짝 낮추고 제목을 24px 로
      올려 **1.55배**로 벌렸습니다.

   3) 한글 줄 간격이 좁았습니다. 한글은 받침이 있어 라틴 글자보다 세로로
      빽빽합니다. 1.7 → **1.8** 로 넓혔습니다.

   4) 한 줄 글자 수가 25자였습니다. 한글은 **20~22자**가 가장 편합니다.
      좌우 여백을 20px 로 고정해 22자에 맞췄습니다.
   ══════════════════════════════════════════════════════ */
:root {
  /* 간격 — 전부 4의 배수 */
  --s1: 4px;  --s2: 8px;  --s3: 12px; --s4: 16px; --s5: 20px;
  --s6: 24px; --s7: 32px; --s8: 40px; --s9: 56px; --s10: 72px;
  /* 모서리 */
  --r1: 10px; --r2: 14px; --r3: 18px;
  /* 좌우 여백 · 카드 안쪽 · 칸 사이 */
  --gut: var(--s5);
  --pad: var(--s4);
  --gap: var(--s3);
}
@media (min-width: 480px) { :root { --gut: var(--s6); } }
@media (min-width: 720px) {
  :root { --gut: var(--s7); --pad: var(--s6); --gap: var(--s4); }
}
@media (min-width: 1040px) { :root { --gut: var(--s8); } }

/* ── 바탕 ── */
body { font-size: 15.5px; line-height: 1.8; }
p { text-wrap: pretty; }
@media (min-width: 720px) { body { font-size: 16.5px; line-height: 1.75; } }

.wrap { padding-left: var(--gut); padding-right: var(--gut); }

/* ── 세로 리듬 ── */
/* B안: 꼭지 사이를 1.5배로 벌립니다.

   애플 지침의 "선을 긋는 대신 여백으로 나누라" 를 따릅니다. 가까우면
   한 덩어리, 멀면 다른 덩어리로 읽힙니다. 지금은 꼭지 안 간격과 꼭지
   사이 간격이 비슷해서 어디서 이야기가 바뀌는지 눈이 못 잡았습니다.

   페이지가 700px 쯤 길어집니다. 대신 **훑기가 쉬워집니다** — 시안 B 를
   고르신 것이 그 맞바꿈을 받아들이신 것입니다. */
.sec { padding-top: calc(var(--s9) * 1.5); padding-bottom: calc(var(--s9) * 1.5); }
@media (min-width: 720px) {
  .sec { padding-top: calc(var(--s10) * 1.5); padding-bottom: calc(var(--s10) * 1.5); }
}

.sec-eyebrow { margin-bottom: var(--s1); }
.sec h2 {
  margin: 0 0 var(--s3); font-size: 24px; line-height: 1.34;
  letter-spacing: -.035em;
}
@media (min-width: 720px) { .sec h2 { font-size: 32px; } }

.sec-lead {
  margin: 0 0 var(--s6); max-width: 24em;
  font-size: 15px; line-height: 1.8; color: var(--sub);
}
@media (min-width: 720px) { .sec-lead { font-size: 17px; max-width: 34em; } }

/* ── 카드 ── */
.card, .keys > div, .lvc, .schools li, .plan, .flow li, .perk, .grpwait {
  border-radius: var(--r2);
}
.card { padding: var(--pad); }
.card h3 { font-size: 17px; line-height: 1.4; letter-spacing: -.03em; margin: 0 0 var(--s2); }
@media (min-width: 720px) { .card h3 { font-size: 19px; } }
.card p { font-size: 14.5px; line-height: 1.75; }
@media (min-width: 720px) { .card p { font-size: 15.5px; } }

.cards, .keys, .schools, .lv, .perk-list, .plans { gap: var(--gap); }

/* ── 목록 ── */
.keys-list, .grpwait ul, .vow ul { padding-left: var(--s5); }
.keys-list li, .grpwait li, .vow li { margin-bottom: var(--s2); }

/* ── 옆으로 미는 칸 — 여백을 격자에 맞춰 다시 ── */
@media (max-width: 719px) {
  .swipe { gap: var(--gap); margin-inline: calc(-1 * var(--gut));
           padding-inline: var(--gut); padding-bottom: var(--s3); }
  /* 원장님: "왼쪽 마진과 오른쪽 마진을 주고 진행해", "가로카드는 중앙
     정렬이 좋겠다."

     예전에는 카드가 **왼쪽에 딱 붙고 오른쪽만** 살짝 보였습니다
     (scroll-snap-align: start). 그래서 커진 카드가 가운데가 아니라
     왼쪽으로 치우쳐 섰습니다. 이제 가운데에 세우고 양옆을 똑같이 비웁니다.

     🔴 `padding-inline` 을 여백과 **같은 값**으로 둔 것이 핵심입니다.
     그래야 첫 카드가 다 밀지 않은 상태(scrollLeft 0)에서도 가운데에
     섭니다. 이 값이 다르면 첫 장과 마지막 장만 치우쳐 보입니다.

     🔴 카드 폭은 `100%` 입니다. 여기서 100% 는 **안쪽 상자**(padding 을
     뺀 나머지) 기준이라 곧 "화면 폭 − 양옆 여백" 입니다. 처음에
     `calc(100% - 여백*2)` 로 적었다가 왼쪽 32 · 오른쪽 107 로 기울었습니다.

     수강료(.plans)는 한 줄에 두 장씩 견주어 보는 칸이라 그대로 둡니다. */
  .swipe:not(.plans) {
    --peek: var(--s7);                       /* 32px */
    padding-inline: var(--peek);
    scroll-padding-inline: var(--peek);
  }
  .swipe:not(.plans) > * {
    flex: 0 0 100%;
    scroll-snap-align: center;
  }
  .swipe.plans > * { flex: 0 0 calc(100% - var(--s8)); }
  .swipewrap::after { right: calc(-1 * var(--gut)); }
  .pdur .swipe { margin-inline: calc(-1 * var(--s3)); padding-inline: var(--s3); }
  .pdur .swipe > * { flex: 0 0 calc(50% - var(--s2)); }
}

/* ── 수강료 묶음 ── */
.pdur { padding: var(--s3); border-radius: var(--r3); margin-top: var(--s3); }
.pdur-h { margin: 0 var(--s1) var(--s3); }
.plan { padding: var(--s3); }
@media (min-width: 720px) { .pdur { padding: var(--s4); } .plan { padding: var(--s4); } }
.pk { margin-top: var(--s6); }
.pk-h { font-size: 18px; letter-spacing: -.035em; }

/* 제목 앞 그림 — 이모지 대신 직접 그린 선 그림 */
.ic { display: inline-block; width: 1em; height: 1em; flex: none;
      vertical-align: -.14em; }
.pk-h { display: flex; align-items: center; gap: var(--s2); flex-wrap: wrap; }
.pk-h .ic { width: 20px; height: 20px; color: var(--terra); }
.pk-h em { flex-basis: 100%; }
.pdur-h .ic { width: 20px; height: 20px; }
.pdur[data-dur="25"] .pdur-h .ic { color: #1c5b91; }
.pdur[data-dur="55"] .pdur-h .ic { color: #a8325a; }

/* ── 수강료 띠 ──────────────────────────────────────
   원장님: "수강료 세션이 조금 배경색이 분리되면 좋을 것 같아.
   혜택, 수강 절차와 구분을 했으면 좋겠어."

   바탕이 두 가지(--bg · --bg-alt)뿐이라 혜택 · 수강료 · 수강 절차 세
   꼭지가 같은 색으로 이어져, 어디서 끊기는지 알 수 없었습니다.
   수강료에 **세 번째 색**을 주고 위아래에 가는 선을 둡니다. 값을 보는
   자리가 자기 구역으로 떨어져 나옵니다.

   원장님: "수강료 세션의 배경을 화이트로 바꿔줘."

   바탕은 흰색으로 내리고, **위아래 가는 선은 그대로 둡니다.** 선까지
   빼면 바로 아래 수강 절차 꼭지도 흰 바탕이라 둘이 한 덩어리로 붙어
   버립니다. 이제 색이 아니라 선이 구역을 긋습니다. */
:root { --bg-band: #ffffff; }
.sec.band {
  background: var(--bg-band);
  border-top: 1px solid #e0d2cf;
  border-bottom: 1px solid #e0d2cf;
}
/* 25분(파랑)·55분(자주) 칸 — 바깥이 흰색이 되었으니 칸의 옅은 색이
   그만큼 더 또렷하게 떠오릅니다. 색은 그대로 둡니다. */
.sec.band .pdur[data-dur="25"] { background: #eef4fa; border-color: #d3e3f1; }
.sec.band .pdur[data-dur="55"] { background: #fbeff3; border-color: #eed3de; }
.sec.band .swipewrap::after {
  background: linear-gradient(90deg, transparent, var(--bg-band) 78%);
}

/* ── 날아가는 새 ────────────────────────────────────
   '영어에 날개를 달아 드립니다' 꼭지에서, 스크롤한 만큼 새가 왼쪽에서
   오른쪽으로 건너갑니다.

   처음에는 새 전체를 세로로 눌렀다 폈다 했는데(scaleY) 원장님이
   "조금 어색하네" 라고 하셨습니다. 맞습니다 — 그것은 날갯짓이 아니라
   **몸이 찌그러지는** 움직임입니다. 그래서 다시 만들었습니다.

     · 날개 **두 장을 따로** 두고 몸통을 축으로 각각 돌립니다.
       왼쪽이 내려갈 때 오른쪽도 내려갑니다(거울).
     · 선이 아니라 **채운 실루엣**입니다. 작게 줄여도 형태가 남습니다.
     · 가로로만 곧게 가지 않고, 따로 도는 느린 움직임으로 **떴다
       가라앉으며** 몸이 살짝 기웁니다. 새마다 주기가 달라 줄 맞춰
       가지 않습니다.

   움직이는 값은 transform 뿐이라 화면을 다시 그리지 않습니다. */
#about { position: relative; }
#about > .wrap { position: relative; z-index: 1; }

.birds {
  position: absolute; inset: 0; overflow: hidden;
  pointer-events: none; z-index: 2; --p: 0;
  mix-blend-mode: multiply;
}
/* 바깥 껍질 — 자리는 자바스크립트가 정합니다(물결치는 길).
   크기·진하기·날갯짓 빠르기도 열 때마다 새로 뽑습니다. */
.bird {
  position: absolute; left: 0; top: 0;
  display: block; color: var(--terra);
  will-change: transform;
}
/* 안쪽 껍질 — 떴다 가라앉으며 몸이 기웁니다 */
.bird-in {
  display: block;
  animation: bob var(--bob, 5s) ease-in-out infinite;
  animation-delay: var(--delay, 0s);
}
@keyframes bob {
  0%, 100% { transform: translateY(0)    rotate(-2.5deg); }
  50%      { transform: translateY(-9px) rotate(2.5deg); }
}

.bird svg { display: block; width: 100%; height: auto; overflow: visible; }
/* 날개 두 장 — 몸통(32, 14)을 축으로 각각 돕니다.
   크게 돌리면 날개가 몸통에서 떨어져 나가 보입니다. ±10도면
   "퍼덕인다" 는 느낌은 나면서 형태는 안 무너집니다. */
.bird .wing {
  transform-origin: 32px 14px;
  animation: var(--flap, .5s) ease-in-out infinite;
  animation-delay: var(--delay, 0s);
}
.bird .wing.l { animation-name: flapL; }
.bird .wing.r { animation-name: flapR; }
/* 날갯짓 폭도 새마다 다릅니다. --wa(위로 접힌 각) · --wb(아래로 편 각)
   두 값을 자바스크립트가 새마다 따로 뽑아 넣습니다. 폭까지 같으면
   빠르기만 달라도 다섯 마리가 한 몸처럼 보입니다. */
@keyframes flapL {
  0%, 100% { transform: rotate(calc(-1 * var(--wa, 6deg))); }
  50%      { transform: rotate(var(--wb, 11deg)); }
}
@keyframes flapR {
  0%, 100% { transform: rotate(var(--wa, 6deg)); }
  50%      { transform: rotate(calc(-1 * var(--wb, 11deg))); }
}
@media (prefers-reduced-motion: reduce) { .birds { display: none; } }

/* 진학 성과 — 폭죽 캔버스. 글자 위를 덮되 눌리지는 않습니다. */
#result { position: relative; }
#result > .wrap { position: relative; z-index: 1; }
.pop {
  position: absolute; inset: 0; z-index: 2;
  pointer-events: none; width: 100%; height: 100%;
}
@media (prefers-reduced-motion: reduce) { .pop { display: none; } }

/* ── 제목 둘레를 오가는 새 ─────────────────────────
   꼭지 안을 건너가는 새들과 달리, 이 둘은 제목 둘레만 오갑니다.
   끝에 닿으면 되돌아옵니다(animation-direction: alternate).
   새 모양이 좌우 대칭이라 방향을 바꿀 때 뒤집지 않아도 됩니다 —
   뒤집으면 중간에 납작해지며 잠깐 사라집니다. */
.h2birds { position: relative; }
.h2birds > h2 { position: relative; z-index: 1; }
.bird.tb {
  position: absolute; top: 0; z-index: 0;
  color: var(--terra); mix-blend-mode: multiply; pointer-events: none;
  animation: tsweep var(--sweep, 10s) ease-in-out infinite alternate;
}
@keyframes tsweep {
  from { left: var(--x1); transform: translateY(var(--y1)) rotate(-7deg); }
  to   { left: var(--x2); transform: translateY(var(--y2)) rotate(7deg); }
}
@media (prefers-reduced-motion: reduce) { .bird.tb { display: none; } }

/* 제목 둘레를 오가는 새 — 좁은 화면에서는 날갯짓을 늦춥니다.
   작은 화면에서 빠르게 퍼덕이면 파닥거리는 것처럼 보입니다. */
@media (max-width: 719px) {
  .bird.tb { --flap: .8s; }
  .bird.tb + .bird.tb { --flap: 1.05s; }
}

/* 과목 탭도 그 과목 색으로 — 누른 탭과 아래 카드가 같은 색이어야
   "이 탭이 이 내용" 이라는 것이 한눈에 이어집니다. */
#curriculum .way[data-subj="s0"].on { background: #146b60; }
#curriculum .way[data-subj="s3"].on { background: #9a5410; }
#curriculum .way[data-subj="s4"].on { background: #5a4bb0; }
#curriculum .way[data-subj="s5"].on { background: #a8325a; }
#curriculum .way[data-subj="s0"]:focus-visible { outline-color: #146b60; }
#curriculum .way[data-subj="s3"]:focus-visible { outline-color: #9a5410; }
#curriculum .way[data-subj="s4"]:focus-visible { outline-color: #5a4bb0; }
#curriculum .way[data-subj="s5"]:focus-visible { outline-color: #a8325a; }

/* 수강료 — 맨 위 과목 고르개. 커리큘럼 꼭지와 같은 과목 색을 씁니다. */
.wayswitch.psubj { margin-bottom: var(--s4); }
.psubj .way[data-color="s0"].on { background: #146b60; }
.psubj .way[data-color="s3"].on { background: #9a5410; }
.psubj .way[data-color="s4"].on { background: #5a4bb0; }
.psubj .way[data-color="s5"].on { background: #a8325a; }
/* 그 과목에 그룹 반이 없을 때 */
.pk.is-empty .pk-h { opacity: .5; }
.pk-none {
  margin: var(--s2) 0 0; padding: 13px 15px; border-radius: var(--r1);
  background: var(--card); border: 1px dashed var(--line);
  font-size: 14.5px; color: var(--sub);
}
.pk-none b { color: var(--ink); }

/* 단계마다 권해 드리는 수업 — 단계 색을 따라갑니다 */
.lv-tip {
  display: inline-block; margin: 10px 0 0; padding: 5px 10px;
  border-radius: 999px; font-size: .76rem; font-weight: 700;
  background: var(--lv-soft, var(--bg-alt)); color: var(--lv, var(--sub));
}

/* 수강료 — 과목을 바꿀 때 화면이 튀지 않게.
   칸을 감추면 브라우저가 보고 있던 자리를 스스로 다시 잡는데
   (scroll anchoring), 그 때문에 탭을 누를 때마다 화면이 움직였습니다. */
#price { overflow-anchor: none; }
#price .plan[hidden] { display: none !important; }

/* 수강료 과목 탭 — 좁은 화면에서는 두 줄로 나눕니다.
   네 개를 한 줄에 넣으면 390px 화면에서 365px 이 되어 살짝 넘칩니다.
   넘치면 반쯤 걸친 탭을 누를 때 브라우저가 그 탭을 보이게 하려고
   화면을 끌어당겨서, 누를 때마다 화면이 움직입니다. */
@media (max-width: 719px) {
  .wayswitch.psubj {
    display: grid; grid-template-columns: 1fr 1fr; gap: 6px;
    overflow: visible; padding: 6px; border-radius: var(--r2);
  }
  .psubj .way {
    width: 100%; justify-content: center; padding: 12px 8px;
    font-size: 14px; border-radius: 10px;
  }
}
/* 브라우저가 탭을 보이게 하려고 끌어당길 때, 붙어 있는 머리글에
   가리지 않도록 여유를 둡니다. */
.psubj .way { scroll-margin-top: 84px; scroll-margin-bottom: 24px; }

/* 수업 선택 제목 — 1:1 은 파랑, 그룹은 자주. 아래 표의 칸 색과 같습니다. */
.t-one { color: #1c5b91; }
.t-grp { color: #a8325a; }

/* 수강료 — 1:1 · 그룹 고르개. 좁은 화면에서만 나옵니다.
   넓은 화면에서는 둘 다 한 번에 보이므로 탭이 필요 없습니다. */
.wayswitch.pkind { display: none; }
@media (max-width: 719px) {
  .wayswitch.pkind {
    display: grid; grid-template-columns: 1fr 1fr; gap: 6px;
    overflow: visible; padding: 6px; margin-bottom: var(--s4);
    border-radius: var(--r2);
  }
  .pkind .way {
    display: flex; align-items: center; justify-content: center; gap: 6px;
    width: 100%; padding: 12px 8px; font-size: 14px; border-radius: 10px;
  }
  .pkind .way .ic { width: 16px; height: 16px; }
  .pkind .way[data-kind="private"].on { background: #1c5b91; }
  .pkind .way[data-kind="group"].on   { background: #a8325a; }
  /* 그 과목에 그룹 반이 없을 때 — 막지는 않습니다. 눌러 보면 까닭이 나옵니다. */
  .pkind .way.is-off:not(.on) { opacity: .45; }
  /* 탭으로 고르니 안쪽 제목은 작게 */
  .pk-h { font-size: 16px; }
}
/* 제목 안의 사람 아이콘 — 표 머리와 같은 그림입니다 */
.t-one .ic, .t-grp .ic { width: .82em; height: .82em; margin-right: .14em;
  vertical-align: -.06em; }

/* ── 수강료의 고르개 두 줄 구분 ─────────────────────
   같은 알약 줄이 위아래로 붙어 있으면 무엇을 고르는 줄인지 안 보입니다.
   번호 · 이름표 · 생김새 세 가지로 갈라 놓습니다. */
.pick-lab {
  display: flex; align-items: center; gap: 7px;
  margin: 0 0 var(--s2); font-size: 13.5px; font-weight: 700;
  color: var(--sub); letter-spacing: -.01em;
}
.pick-n {
  display: inline-flex; align-items: center; justify-content: center;
  width: 19px; height: 19px; border-radius: 999px;
  background: var(--terra); color: #fff;
  font-size: 11.5px; font-weight: 800; line-height: 1;
}
.only-mo { display: none; }
@media (max-width: 719px) { .only-mo { display: flex; } }

/* 과목 줄 — 옅은 바탕의 알약 (지금 모습 그대로) */
.wayswitch.psubj { margin-bottom: var(--s5); }

/* 수업 형태 줄 — 흰 바탕에 테두리. 과목 줄과 한눈에 갈립니다. */
@media (max-width: 719px) {
  .wayswitch.pkind {
    background: var(--card); border: 1px solid var(--line);
    padding: 5px; margin-bottom: var(--s5);
  }
  /* 안 고른 칸만 흐리게. `.pkind .way` 에 통째로 색을 주면 **고른 칸의
     흰 글씨까지 덮어서** 진한 파랑 바탕에 어두운 글씨가 얹혔습니다. */
  .pkind .way:not(.on) { background: transparent; color: var(--sub); }
  .pkind .way.on { color: #fff; }
  .pkind .way.on .ic { color: #fff; }
}

/* ── 강사 소개 페이지 ───────────────────────────────
   원장님: "강사소개는 페이지를 빼자." 홈에 넣지 않고 따로 주소를 씁니다.
   같은 모양(home.css)을 쓰는 까닭: 같은 사이트인데 글꼴과 색이 달라지면
   다른 곳으로 넘어온 것처럼 보입니다. */
.tlist { display:grid; gap:var(--gap); margin-top:var(--s4); }
@media (min-width:560px){ .tlist { grid-template-columns:1fr 1fr; } }
@media (min-width:900px){ .tlist { grid-template-columns:repeat(3,1fr); } }

.tcard {
  background:var(--card); border:1px solid var(--line);
  border-radius:var(--r2); padding:var(--pad);
  display:flex; flex-direction:column; align-items:flex-start;
}
.tphoto {
  width:96px; height:96px; border-radius:999px; object-fit:cover;
  background:var(--terra-soft); border:1px solid var(--line);
  margin-bottom:var(--s3); display:block;
}
/* 사진이 아직 없는 분 — 빈 네모 대신 사람 모양을 둡니다 */
.tphoto-no {
  display:flex; align-items:center; justify-content:center; color:var(--terra);
}
.tphoto-no svg { width:46px; height:46px; }

.tname { margin:0; font-size:17px; font-weight:800; letter-spacing:-.03em; }
.tname span { font-size:13.5px; font-weight:600; color:var(--sub); margin-left:3px; }
.tmeta { margin:3px 0 0; font-size:13px; color:var(--terra); font-weight:700; }
.tbio { margin:var(--s3) 0 0; font-size:14.5px; line-height:1.75; color:var(--sub); }

.tempty {
  margin-top:var(--s4); padding:var(--s6) var(--s5); border-radius:var(--r2);
  background:var(--card); border:1px dashed var(--line); text-align:center;
}
.tempty p { margin:0 0 var(--s2); font-size:15px; line-height:1.8; color:var(--sub); }
.tempty p:last-child { margin-bottom:0; }
.tempty b { color:var(--ink); }

.tcta { display:flex; gap:var(--s2); flex-wrap:wrap; margin-top:var(--s6); }
/* 강사 소개 — 실제 수업 기록 한 토막.
   따옴표 대신 왼쪽 선으로 인용을 표시합니다. 카드 안이라 따옴표까지
   붙으면 장식이 두 겹이 됩니다. */
.tquote {
  margin:var(--s3) 0 0; padding:var(--s3) 0 var(--s2) var(--s3);
  border-left:3px solid var(--terra-soft);
}
.tquote p { margin:0; font-size:14px; line-height:1.75; color:var(--sub); }
.tquote-ko { margin-top:6px !important; color:var(--ink); }
.tquote cite { display:block; margin-top:6px; font-style:normal;
  font-size:11.5px; font-weight:700; letter-spacing:.04em; color:var(--terra); }

/* 강사 소개 — 더보기 (사진 · 수업 영상) */
.tmore { margin-top:var(--s3); width:100%; }
.tmore > summary {
  list-style:none; cursor:pointer; display:flex; align-items:center; gap:7px;
  min-height:42px; padding:9px 13px; border-radius:10px;
  background:var(--bg-alt); color:var(--sub); font-size:13.5px;
}
.tmore > summary::-webkit-details-marker { display:none; }
.tmore > summary b { color:var(--ink); }
.tmore > summary span {
  font-size:11.5px; font-weight:700; color:var(--terra);
  background:var(--terra-soft); border-radius:999px; padding:1px 7px;
}
.tmore > summary::after {
  content:''; margin-left:auto; width:8px; height:8px;
  border-right:2px solid var(--terra); border-bottom:2px solid var(--terra);
  transform:rotate(45deg) translate(-2px,-2px); transition:transform .18s ease;
}
.tmore[open] > summary::after { transform:rotate(-135deg) translate(-3px,-3px); }
.tmore-in { display:grid; gap:var(--s3); margin-top:var(--s3); }

.tshot, .tvid { margin:0; }
.tshot img, .tvid img, .tvid iframe {
  display:block; width:100%; height:auto; aspect-ratio:4/3;
  object-fit:cover; border-radius:10px; background:var(--bg-alt);
  border:1px solid var(--line);
}
.tvid iframe { aspect-ratio:16/9; }
.tshot figcaption, .tvid figcaption {
  margin-top:6px; font-size:12.5px; line-height:1.6; color:var(--sub);
}

/* 영상 — 누르기 전에는 그림 한 장뿐입니다 */
.tvid-go {
  position:relative; display:block; width:100%; padding:0;
  border:0; background:none; cursor:pointer; border-radius:10px;
}
.tvid-play {
  position:absolute; left:50%; top:50%; width:52px; height:52px;
  transform:translate(-50%,-50%); border-radius:999px;
  background:rgba(139,38,53,.92); box-shadow:0 4px 16px rgba(0,0,0,.25);
}
.tvid-play::after {
  content:''; position:absolute; left:57%; top:50%;
  transform:translate(-50%,-50%);
  border-left:15px solid #fff; border-top:9px solid transparent;
  border-bottom:9px solid transparent;
}
.tvid-go:hover .tvid-play { background:var(--terra-dark); }
.tvid-go:focus-visible { outline:2px solid var(--terra); outline-offset:3px; }

/* ── 선생님별 수업 가능 시간표 ─────────────────────
   가로가 요일, 세로가 시간. 선생님이 안 여는 시간은 칸을 만들지 않고
   빈 자리로 둡니다 — 빈 칸이 많으면 "이 선생님 한가한가" 로 읽힙니다. */
.tslot { margin-top:var(--s4); width:100%; }
.tslot-h {
  margin:0 0 var(--s2); font-size:14px; font-weight:700; color:var(--ink);
  display:flex; align-items:center; gap:7px; flex-wrap:wrap;
}
.tslot-h b { color:var(--terra); }
.tslot-h span {
  font-size:11.5px; font-weight:700; color:var(--sub);
  background:var(--bg-alt); border-radius:999px; padding:2px 8px;
}
.tslot .tablewrap { margin-top:0; border-radius:10px; }
.tgrid { width:100%; min-width:300px; border-collapse:collapse; font-size:12.5px; }
.tgrid th, .tgrid td { padding:6px 4px; text-align:center; border:1px solid var(--line-soft); }
.tgrid thead th {
  background:var(--bg-alt); color:var(--sub); font-size:11.5px; font-weight:700;
  white-space:nowrap;
}
.tgrid .tg-t {
  background:var(--bg-alt); color:var(--sub); font-weight:700;
  white-space:nowrap; font-variant-numeric:tabular-nums;
}
.tg span { display:block; font-size:11px; font-weight:700; line-height:1.5; }
.tg-open { background:#E7F3EC; }
.tg-open span { color:#1F6247; }
.tg-full { background:var(--bg-alt); }
.tg-full span { color:var(--sub); opacity:.7; }
/* 선생님이 안 여는 시간 — 아무것도 안 씁니다 */
.tg-none { background:transparent; }
.tslot-n { margin:var(--s2) 0 0; font-size:12px; line-height:1.7; color:var(--sub); }

/* 첫 화면 — '미국 원어민 강사' 칸을 강사 소개로 가는 입구로 */
.trust li.trust-go { padding: 0; }
/* 원장님: "위의 마진은 넓고 자간은 조금 좁게."
   위는 넉넉히 띄우고, 제목과 설명 사이는 붙입니다. 제목과 설명은 한
   덩어리라 붙어야 하고, 칸의 가장자리와는 떨어져야 합니다 — 애플 지침의
   "여백으로 묶고 나눈다" 입니다. */
.trust li.trust-go a {
  display: flex; flex-direction: column; align-items: center; gap: 1px;
  padding: 30px 14px 0; min-height: 100%; color: var(--sub);
  border-radius: 0; text-align: center;
  letter-spacing: -.012em;
}
/* 사진을 맨 아래로 밀어 붙입니다 — 머리글 길이가 달라도 넉 장의 사진이
   같은 줄에서 시작합니다. */
.trust li.trust-go img { margin-top: auto; }
/* 더보기는 알약으로. 사진 위에 있을 때 만든 모양인데 밝은 바탕에서도
   그대로 좋습니다 — 글자만 있는 것보다 "누르는 곳" 이 분명합니다. */
/* 원장님: "버튼은 그전처럼 해줘." 글자 링크 대신 알약 단추로 되돌립니다.
   애플 타일도 "Learn more" 를 색 채운 알약으로 둡니다. */
.trust li.trust-go em {
  font-style: normal; font-size: 12px; font-weight: 700;
  color: #fff; background: var(--terra);
  padding: 4px 11px; border-radius: 999px;
  display: inline-flex; align-items: center; gap: 3px;
}
/* 제목과 설명은 한 덩어리라 바짝, 단추는 한 칸 떨어뜨립니다. */
.trust li.trust-go a { gap: 4px; }
.trust li.trust-go em { margin-top: 10px; }
.trust li.trust-go a:hover em { background: var(--terra-dark); }

/* 원장님: "미국인 강사 더보기의 글자가 가독성이 좋게 해줘."

   첫 화면이 사진 배경으로 바뀌면서 이 칸만 글씨가 흐렸습니다. 까닭은
   **덮어쓰기 순서**였습니다 — 위쪽에서 흰색으로 바꿔 두었는데, 바로 위
   `.trust li.trust-go a { color: var(--sub) }` 가 **더 아래에 있고 힘이
   같아서** 회색이 이겼습니다. 그래서 `.hero-bg` 를 앞에 붙여 힘을 한
   단계 올린 규칙을 이 자리(아래)에 둡니다. */
/* 원장님: "버튼에 라인을 없애줘."
   테두리를 뺀 만큼 바탕을 조금 진하게 합니다 — 테두리가 하던 "여기가
   단추다" 라는 몫을 바탕이 대신해야 합니다. .72 로 두면 사진이 비쳐
   가장자리가 흐물거립니다. */
.trust li.trust-go em::after {
  content: ''; width: 5px; height: 5px;
  border-top: 1.6px solid currentColor; border-right: 1.6px solid currentColor;
  transform: rotate(45deg);
}

/* 강사 소개 — 수업 기록 아코디언.
   더보기(.tmore)와 같은 모양을 씁니다. 한 카드 안에 생김새가 다른
   여닫이가 둘 있으면 서로 다른 것처럼 보입니다. */
.tqbox { margin-top:var(--s3); width:100%; }
.tqbox > summary {
  list-style:none; cursor:pointer; display:flex; align-items:center; gap:7px;
  min-height:42px; padding:9px 13px; border-radius:10px;
  background:var(--bg-alt); color:var(--sub); font-size:13.5px;
}
.tqbox > summary::-webkit-details-marker { display:none; }
.tqbox > summary b { color:var(--ink); }
.tqbox > summary span {
  font-size:11.5px; font-weight:700; color:var(--terra);
  background:var(--terra-soft); border-radius:999px; padding:1px 7px;
}
.tqbox > summary::after {
  content:''; margin-left:auto; width:8px; height:8px;
  border-right:2px solid var(--terra); border-bottom:2px solid var(--terra);
  transform:rotate(45deg) translate(-2px,-2px); transition:transform .18s ease;
}
.tqbox[open] > summary::after { transform:rotate(-135deg) translate(-3px,-3px); }
.tqbox-in { margin-top:var(--s3); }
.tqbox .tquote { margin-top:0; }
.tqbox .tquote + .tquote { margin-top:var(--s3); }
.tqbox-n { margin:var(--s3) 0 0; font-size:12px; line-height:1.7; color:var(--sub); }


/* 멈출 때 한 번 더 튕기는 것은 **넣었다가 뺐습니다.**

   원장님: "가로카드에 멈출 때 포커스 바운스" → 만들었더니 아이폰에서
   카드가 겹쳐 보였고(같은 속성에 전환과 CSS 애니메이션을 겹쳐 걸면
   사파리가 화면을 잘못 다시 그립니다), 애니메이션을 걷어내고 전환만으로
   다시 만들자 이번에는 "튕기는 게 생겼네 → 3단계 빼자" 하셨습니다.

   지금은 카드가 **가운데로 올 때 한 번만** 부드럽게 커집니다.
   멈춤을 따로 잡지 않습니다. */

/* ── 소개 + 합격 축하 (한 꼭지로 합침) ─────────────────
   원장님: "영어에 날개를 달자 세션과 합격축하 세션을 합치자.
            1. SVG 아이콘들을 삭제. 2. 코너의 모서리 라운딩을 0.
            3. 모바일을 가로로 스크롤하지 말고 하나씩 디스플레이." */

/* 합격 축하 덩이는 위 카드와 다른 이야기라 한 칸 띄웁니다. */
#result { margin-top: calc(var(--s9) * 1.2); }

/* ② 모서리 — 첫 화면 밑 타일과 같이 각지게. */
#about .card,
#about .phero,
#about .schools li,
#about .keys > div { border-radius: 0; }

/* ③ 좁은 화면에서는 옆으로 밀지 않고 한 장씩 세로로 쌓습니다.
   옆으로 미는 칸은 한 번에 한 장 반이 보여서 "다음이 있다" 는 것은
   알리지만, 세 장뿐일 때는 그냥 다 보여 주는 편이 빠릅니다. */
/* 원장님: "히어로의 카드의 갭같이 영어에 날개를 달자의 카드의 갭에
   적용해줘." 첫 화면 밑 타일과 같은 4px 로 맞춥니다. 사진이 든 칸끼리는
   바짝 붙어야 넉 장·석 장이 한 덩어리로 읽힙니다. */
.swipe.stack { gap: 4px; }

@media (max-width: 719px) {
  /* 원장님: "모바일에서 확대할 경우 위와 아래의 갭을 좀더 만들어줘."

     좁은 화면에서는 가운데 온 카드가 1.1 배로 커집니다(위아래로 10px 씩).
     옆 카드는 .94 로 줄어듭니다(6px 씩). 그래서 4px 짜리 틈은 커지는
     순간 0 이 되어 두 장이 맞닿았습니다. 18px 로 두면 가장 붙었을 때도
     14px 이 남습니다. 넓은 화면은 확대가 없으니 4px 그대로입니다. */
  .swipe.stack {
    display: grid; grid-template-columns: 1fr; gap: 18px;
    overflow: visible;
    margin-inline: 0; padding-inline: 0; padding-bottom: 0;
  }
  .swipe.stack > * { flex: none; min-width: 0; }
  /* 밀 수 있다는 표시(오른쪽 그라데이션)와 화살표·점은 쓸 일이 없습니다 */
  .stackwrap::after { display: none; }
  .stackwrap .swipe-nav { display: none; }
}
/* ── 소개 꼭지 세 카드 — 사진 + 글상자 ────────────────
   원장님: "이미지를 더 밝게 하고 텍스트부분을 박스로 만들어서 만들고
            이미지의 코너가 라운드로 되어있는데 라운드를 없애줘."

   ⚠ 이름 조심 — `.shot` 은 이 파일에서 이미 **설명 달린 사진**(figure)에
   쓰고 있었습니다. 그 규칙에 둥근 모서리와 테두리가 들어 있어서 카드
   사진에도 따라붙었습니다. 그래서 `.pic` 으로 바꿨습니다.

   앞서는 사진 위에 어둠을 깔고 흰 글자를 얹었는데, 그러면 사진이
   어두워집니다. 이제 **사진은 그대로 두고 글자는 아래 흰 상자**에
   넣습니다. 사진을 가리지 않고도 글자는 늘 읽힙니다. */
/* 원장님: "사진과 텍스트박스가 너무 분리되어 있는데 텍스트박스가
   이미지 위에 조금 밝게 올라가게 해줘."

   글상자를 사진 **아래**가 아니라 **위**로 올립니다. 사진이 상자를 꽉
   채우고, 글상자는 그 맨 아래에 반투명 흰 판으로 떠 있습니다.
   뒤가 비치니 사진과 한 덩어리로 보입니다.

   원장님: "순백 58%로."

   순백(255,255,255)에 농도 .58 — 뒤가 꽤 비칩니다. 그만큼 글자 색을
   한 단계 더 내려야 합니다. 뒤가 어두운 사진(셋째 칸 졸업 가운)일 때
   딥 모브(#5B3A44)는 3.19:1 로 읽기 기준(4.5:1) 아래입니다.
   가장 진한 딥 모브(#33171f)로 내리면 같은 조건에서 5.33:1 이고,
   제목(먹색)은 5.39:1 입니다. */
.card.pic {
  position: relative; isolation: isolate; overflow: hidden;
  display: flex; align-items: flex-end;
  padding: 0; border: 0; box-shadow: none; border-radius: 0;
  background: var(--bg-alt);
  /* 원장님: "텍스트가 이미지를 덮어 버렸어. 이미지가 더 보여지게."
     카드 안에 글이 늘면서 글상자가 사진을 거의 다 가렸습니다. 상자를
     줄이는 대신 **카드 자체를 키웁니다** — 글은 그대로 두고 사진이
     드러날 자리를 위에 더 만드는 쪽입니다. */
  min-height: clamp(330px, 72vw, 420px);
}
.pic-bg {
  position: absolute; inset: 0; z-index: -1;
  width: 100%; height: 100%; max-width: none;
  border: 0; border-radius: 0;
  object-fit: cover; object-position: center 40%;
}
.pic-in {
  position: relative; width: 100%;
  padding: clamp(14px, 3.6vw, 18px);
  background: rgba(255, 255, 255, .58);
  -webkit-backdrop-filter: blur(18px) saturate(160%);
  backdrop-filter: blur(18px) saturate(160%);
}
.card.pic h3 { color: var(--ink); }
.card.pic p  { color: var(--teal-dark); }

/* 카드 안에 덧붙는 한 덩이 — 제목·설명 아래에 가는 선을 긋고 이어 붙입니다.
   선이 없으면 설명이 네 줄로 늘어난 것처럼 보여 어디까지가 한 말인지
   흐려집니다. */
.pic-more {
  margin-top: 11px; padding-top: 10px;
  border-top: 1px solid rgba(51, 23, 31, .16);
}
.pic-more > b {
  display: block; margin-bottom: 3px;
  font-size: 14px; color: var(--terra-dark);
}
.card.pic .pic-more p { font-size: 13.5px; line-height: 1.6; }

/* ── 합격 축하 사진 위의 숫자 넉 줄 ────────────────────
   원장님: "phero-in 의 합격축하 위에 숫자를 넣어줘."

   ⚠ 사진 위의 글자라 어둠이 받쳐 줘야 읽힙니다. 이 사진은 성조기라
   흰 줄무늬가 밝습니다. 숫자는 크니(26~40px) 큰 글씨 기준 3:1 로 되지만,
   아래 작은 설명은 4.5:1 이 필요해서 어둠이 더 짙은 아래쪽에 둡니다. */
/* 원장님: "모바일에서 글자의 간격과 크기가 보기 안좋아."

   까닭은 크기를 **화면 폭에 맞춰 늘리는 식(vw)** 으로 하나만 적어 둔
   것이었습니다. 좁은 화면(2×2)과 넓은 화면(가로 넉 줄)은 한 칸의 폭이
   전혀 다른데 같은 셈을 쓰니, 휴대폰에서는 너무 작고 틈은 좁았습니다.
   두 모양에 각각 다른 크기를 줍니다. */
.pstats {
  list-style: none; margin: 0 0 20px; padding: 0;
  display: grid; grid-template-columns: 1fr 1fr; gap: 22px 14px;
  text-align: center;
}
.pstats b {
  display: block; color: #fff; line-height: 1.08;
  font-size: clamp(27px, 7.4vw, 42px); font-weight: 800; letter-spacing: -.035em;
  text-shadow: 0 1px 12px rgba(0, 0, 0, .55);
}
.pstats span {
  display: block; margin-top: 6px; color: rgba(255, 255, 255, .92);
  font-size: clamp(12px, 3.2vw, 13.5px); font-weight: 700;
  letter-spacing: -.015em; line-height: 1.4;
  text-shadow: 0 1px 10px rgba(0, 0, 0, .6);
}
/* 가로로 넉 줄이 되는 순간 한 칸이 훨씬 좁아집니다. 숫자가 칸을 넘지
   않도록 셈을 다시 잡습니다 — 7.4vw 그대로 두면 "2,431명" 이 칸을
   비집고 나가 줄이 깨집니다. */
@media (min-width: 600px) {
  .pstats { grid-template-columns: repeat(4, 1fr); gap: 0 12px; }
  .pstats b { font-size: clamp(22px, 3.4vw, 40px); }
}

/* ── 커리큘럼 — 사진 안에 올린 과목 단추 ─────────────
   원장님: "나의 의도는 이미지 속에 넣어달라는 의미."

   단추 넷을 사진 아래쪽에 반투명 흰 판으로 얹습니다. 사진(도서관)이
   밝아서 어둠을 깔 필요가 없고, 오히려 흰 판에 검은 글씨가 가장 잘
   읽힙니다. 선택된 단추만 버건디로 칠해 어느 과목인지 바로 보입니다. */
/* 원장님: "사진, 글씨 모두 다 가려. 좀더 위로 만들고 버튼의 라운드가
   너무 커 줄이고 모바일에서의 버튼의 글씨크기가 너무 작아."

   띠가 사진 밖으로 흘러 설명 줄을 덮고 있었습니다. 까닭은 기준 상자가
   figure 였던 것 — figure 높이에는 **설명 줄까지** 들어가서 "바닥에서
   16px" 이 사진 밖이 됩니다. 사진만 감싸는 상자(.curpic-ph)를 기준으로
   바꾸고, 사진 안쪽으로 더 올립니다. */
.curpic-ph { position: relative; }
.curpic .wayswitch {
  position: absolute; z-index: 2;
  left: 10px; right: 10px; bottom: 16px;
  display: flex; flex-wrap: wrap; justify-content: center; gap: 4px;
  margin: 0; padding: 4px;
  background: rgba(255, 255, 255, .88);
  -webkit-backdrop-filter: blur(12px) saturate(150%);
  backdrop-filter: blur(12px) saturate(150%);
  border: 1px solid rgba(255, 255, 255, .6);
  border-radius: 10px;
  box-shadow: 0 4px 16px rgba(36, 29, 31, .18);
}
/* 사진 폭(최대 480px) 안에 넷이 들어가야 해서 안쪽 여백을 줄입니다.
   그래도 좁은 화면에서는 넘칠 수 있어 **두 줄로 접히게** 두었습니다
   (flex-wrap) — 가로로 잘려 안 보이는 것보다 낫습니다. */
/* 알약(999px)을 쓰면 글자보다 모서리가 먼저 보입니다. 띠와 단추 모두
   모서리를 줄입니다. 좁은 화면 글씨는 키우고 한 단계 더 굵게 — 사진 위라
   밑바탕이 어수선해서 같은 크기라도 더 작아 보입니다. */
.curpic .way {
  padding: 9px 11px; font-size: 14.5px; font-weight: 800;
  border-radius: 7px;
}

/* 원장님: "글씨가 너무 작아. 데스크탑은 크게 하고 이미지도 넓게
   와이드하게 해줘."

   넓은 화면에서는 사진을 꼭지 폭 끝까지 펼치고, 세로를 5:2 로 잘라
   **가로로 긴 띠**로 만듭니다. 3:2 그대로 펼치면 세로가 650px 이 넘어
   사진 하나가 화면을 다 먹습니다.
   단추는 폭에 맞춰 늘리지 않고 가운데에 모읍니다 — 976px 짜리 판에
   단추 넷이 양끝으로 벌어지면 하나하나가 따로 놀아 보입니다. */
@media (min-width: 720px) {
  .curpic.shot-mid { max-width: 100%; }
  .curpic > img { aspect-ratio: 5 / 2; object-fit: cover; object-position: center 46%; }
  .curpic .wayswitch {
    left: 50%; right: auto; transform: translateX(-50%);
    bottom: 22px; padding: 5px; gap: 5px;
  }
  .curpic .way { padding: 13px 24px; font-size: 16.5px; border-radius: 8px; }
  .curpic > figcaption { font-size: 15px; margin-top: 11px; }
}

/* ── 원생 혜택 — 실제로 파는 화면 석 장 ───────────────
   원장님: "현재 있는 이미지를 지우고 위의 3개 이미지를 넣어줘."

   비율이 제각각이라(가로로 넓은 요금표 둘, 세로로 긴 휴대폰 하나)
   **높이를 맞추고 폭은 따라오게** 둡니다. 격자에 넣으면 휴대폰 화면만
   혼자 길어져 줄이 어긋납니다. 학부모 앱 팝업과 같은 짜임입니다. */
.perkshots {
  --pk-h: min(44vh, 330px);
  display: flex; gap: 14px; margin-top: var(--s5, 20px);
  overflow-x: auto; overscroll-behavior-x: contain;
  scroll-snap-type: x mandatory;
  /* 원장님: "스크롤이 perk 의 밖으로 나와서 보기가 싫으니 안으로 넣어줘."
     꼭지 끝까지 흐르게 하려고 바깥쪽으로 빼 두었는데, 이 띠는 꼭지가
     아니라 **perk 상자 안**에 있습니다. 그래서 상자를 뚫고 나갔습니다.
     빼냈던 만큼만 되돌립니다 — 이제 상자 안에서만 밀립니다. */
  margin-inline: 0; padding: 4px 0 10px;
  scrollbar-width: none;
}
.perkshots::-webkit-scrollbar { display: none; }
.perkshots figure { flex: 0 0 auto; margin: 0; scroll-snap-align: center; text-align: center; }
.perkshots img {
  display: block; height: var(--pk-h); width: auto; max-width: none;
  border-radius: 10px; border: 1px solid var(--line); background: #fff;
}
.perkshots figcaption {
  margin-top: 9px; font-size: 12.5px; color: var(--sub); line-height: 1.5;
}
.perkshots figcaption b { display: block; color: var(--ink); font-size: 13.5px; }
@media (min-width: 720px) { .perkshots { --pk-h: min(52vh, 440px); } }
/* 마우스에는 옆으로 밀 방법이 없습니다 — 가는 막대를 보여 줍니다
   (학부모 앱 팝업에서 같은 문제를 겪었습니다). */
@media (pointer: fine) {
  .perkshots { scrollbar-width: thin; scrollbar-color: #d9c9c7 transparent; }
  .perkshots::-webkit-scrollbar { display: block; height: 8px; }
  .perkshots::-webkit-scrollbar-track { background: transparent; }
  .perkshots::-webkit-scrollbar-thumb { background: #d9c9c7; border-radius: 999px; }
}

/* 원생 혜택 두 칸 — 각각 그 프로그램 사이트로 가는 입구입니다.
   칸 전체가 눌리게 `<a>` 를 칸 크기로 펴고, 안쪽 여백은 칸이 아니라
   링크가 갖습니다. 그래야 글자 사이 빈 곳을 눌러도 열립니다
   (애플 지침의 "누르는 곳은 44px 이상"). */
/* `:has()` 를 쓰지 않습니다 — 오래된 사파리에서 안 먹으면 여백이 두 겹이
   됩니다. 이 목록은 이 자리 한 곳에만 쓰이고 두 칸 모두 링크라 그냥
   칸의 여백을 0 으로 두고 링크가 그 몫을 받습니다. */
.perk-list li { padding: 0; }
.perk-list li > a {
  display: block; padding: 9px 12px; color: inherit;
  border-radius: 8px; transition: background .15s;
}
.perk-list li > a:hover { background: rgba(255, 255, 255, .55); }
/* 원장님: "홈페이지 방문› 으로 수정."
   꺾쇠만 있으면 누르면 어디로 가는지 모릅니다. 글자를 붙여 말로
   알려 줍니다. 아랫줄(span) **안**에 두어 같은 줄에 붙습니다. */
.perk-list em {
  font-style: normal; font-weight: 700; color: var(--terra);
  margin-left: 8px; white-space: nowrap;
}
.perk-list em::after {
  content: ''; display: inline-block; vertical-align: 1px;
  width: 5px; height: 5px; margin-left: 5px;
  border-top: 1.6px solid currentColor; border-right: 1.6px solid currentColor;
  transform: rotate(45deg);
}

/* ── 스피킹 칸 안의 '내 아이는 어디쯤?' ────────────────
   원장님: "스피킹을 누르면 subjpanes 클래스에 '내 아이는 어디쯤?' 과
   클래스 lv 를 넣어줘."

   한 카드 안에서 **다른 이야기가 시작된다**는 것을 가는 선으로 긋습니다.
   선이 없으면 위의 교재 갈래와 아래 네 단계가 한 덩이로 읽힙니다. */
.subj-lv {
  margin-top: var(--s6, 24px); padding-top: var(--s5, 20px);
  border-top: 1px solid rgba(36, 29, 31, .12);
}
.subj-lv > h4 {
  margin: 0 0 6px; font-size: clamp(18px, 2.4vw, 22px);
  font-weight: 800; letter-spacing: -.03em; line-height: 1.35;
  color: var(--ink);
}
.subj-lv-lead { margin: 0 0 var(--s5, 20px); color: var(--sub); font-size: 14.5px; }
.subj-lv-lead b { color: var(--ink); font-weight: 700; }
.subj-lv .keys-list { margin-top: var(--s5, 20px); }

/* 원장님: "설명 줄과 카드 사이가 너무 좁아서 모바일에는 글씨가 안 보여."

   좁은 화면에서는 가운데 온 카드가 1.1 배로 커집니다 — 위아래로 12px 씩
   자랍니다. 설명 줄과 20px 밖에 안 떨어져 있어서, 카드가 커지는 순간
   그 글자를 덮었습니다. 커진 만큼을 미리 비워 둡니다. */
@media (max-width: 719px) {
  .subj-lv-lead { margin-bottom: 34px; }
  .subj-lv .lv { gap: 20px 12px; }
  .subj-lv .keys-list { margin-top: 30px; }
}

/* 🔴 여백만으로는 모자랐습니다. 까닭은 **그리는 순서**입니다.

   `transform` 이 걸린 상자는 브라우저가 **맨 나중에** 그립니다 — 앞에
   있는 보통 글자보다 뒤에 그려지니, 조금이라도 겹치면 카드의 흰 바탕이
   글자를 덮어 버립니다. 여백을 아무리 줘도 카드가 커지는 폭만큼 겹치면
   같은 일이 되풀이됩니다.

   그래서 설명 줄을 한 층 끌어올립니다. 이제 겹쳐도 글자가 위에 남습니다.
   (히어로 사진 위 글자에서 쓴 것과 같은 수법입니다.) */
.subj-lv-lead { position: relative; z-index: 2; }

/* ── 같은 색 띠가 연달아 올 때 ──────────────────────
   원장님: "커리큘럼 세션과 교재 세션 사이의 공간이 너무 넓어."

   꼭지마다 위아래로 여백을 갖고 있어서, 색이 다른 띠가 번갈아 오면
   그 여백이 경계를 만들어 줍니다. 그런데 **같은 흰 띠가 둘 연달아**
   오면 두 여백이 그대로 더해져 두 배가 됩니다. 사이에 있던
   '내 아이는 어디쯤?' 꼭지(로즈 띠)가 커리큘럼 안으로 들어가면서
   커리큘럼과 교재가 맞붙었습니다.

   색으로 나뉘지 않는 두 꼭지 사이만 뒤쪽 여백을 줄입니다.
   (수강료 ↔ 수강 절차도 같은 경우라 함께 좁아집니다.) */
.sec:not(.alt):not(.gray) + .sec:not(.alt):not(.gray) { padding-top: calc(var(--s9) * .6); }
@media (min-width: 720px) {
  .sec:not(.alt):not(.gray) + .sec:not(.alt):not(.gray) { padding-top: calc(var(--s10) * .6); }
}

/* ── 세 번째 띠 — 아주 옅은 회색 ────────────────────
   원장님: "교재 세션의 배경색이 하얀색으로 같아서 그래.
   아주 약한 회색으로 넣어줘."

   흰 띠(--bg)와 로즈 크림 띠(--bg-alt) 둘뿐이라 교재 꼭지가 커리큘럼과
   같은 색이었습니다. 로즈 크림을 쓰면 바로 아래 혜택 꼭지와 또 같아지니,
   **회색 쪽으로 기운 세 번째 색**을 둡니다. 로즈 크림(#faf6f4)과 구별되게
   붉은 기를 빼고 아주 옅게 잡았습니다. */
:root { --bg-gray: #f5f5f6; }
.sec.gray { background: var(--bg-gray); }
/* 옆으로 미는 칸의 오른쪽 그라데이션도 띠 색에 맞춥니다 — 흰색으로
   두면 회색 바탕 위에 흰 띠가 비쳐 보입니다. */
.sec.gray .swipewrap::after {
  background: linear-gradient(90deg, transparent, var(--bg-gray) 78%);
}

/* ── 수강료 — 1:1 과 그룹을 색으로 못 박기 ────────────
   원장님: "일대일 수업의 수강료가 많이 비싼데 그룹과의 구분이 안 가면
   착각하고 그룹으로 많이 결제할 것 같아. 1:1 의 배경을 파랗게,
   그룹수업의 배경을 빨갛게 넣어서 구분이 가게 해줘."

   돈이 걸린 자리라 **헷갈릴 여지를 없애는 것**이 가장 중요합니다.
   고른 탭 색과 그 아래 값들이 깔린 바탕색을 같게 맞춥니다 —
   파란 탭을 눌렀으면 파란 바탕 위의 값, 빨간 탭이면 빨간 바탕 위의 값. */

/* ① 고르개를 모든 폭에서 */
.wayswitch.pkind {
  display: grid; grid-template-columns: 1fr 1fr; gap: 6px;
  overflow: visible; padding: 6px; margin-bottom: var(--s4, 16px);
  border-radius: var(--r2, 12px);
  max-width: 460px;
}
.pkind .way {
  display: flex; align-items: center; justify-content: center; gap: 6px;
  width: 100%; padding: 12px 8px; font-size: 14px; border-radius: 10px;
}
.pkind .way .ic { width: 16px; height: 16px; }
.pkind .way[data-kind="private"].on { background: #1c5b91; }
.pkind .way[data-kind="group"].on   { background: #a8325a; }
.pkind .way.is-off:not(.on) { opacity: .45; }

/* ② 탭으로 고르니 칸 안의 제목은 지웁니다 — 원장님: "1:1 수업 / 선생님
   한 분이 내 아이만 봅니다 가 또 나와 페이지가 길어져서 수강료가 안 보여."
   (자바스크립트가 막혔을 때는 `.pk-tabbed` 가 안 붙어서 제목이 남습니다.) */
.pk-tabbed .pk-h { display: none; }
.pk-tabbed .pk { margin-top: 0; }

/* ③ 값이 깔리는 바닥에 색 — 파랑은 1:1, 빨강은 그룹 */
.pk[data-kind] {
  padding: var(--s4, 16px); border-radius: 0;
  border-top: 3px solid;
}
.pk[data-kind="private"] { background: #eaf2fa; border-top-color: #1c5b91; }
.pk[data-kind="group"]   { background: #fbe9ef; border-top-color: #a8325a; }

/* ④ 안쪽 수업 길이 칸은 흰색으로 — 바탕이 색을 가졌으니 칸까지 색을 두면
   둘이 섞여 어느 쪽이 수업 형태 색인지 알 수 없게 됩니다.
   25분·55분 구분은 칸 안의 글자색과 "25분 수업" 이라는 이름이 맡습니다. */
#price .pk .pdur { background: #fff; }

/* ── 수업 선택 표를 여닫이로 ───────────────────────────
   원장님: "세션이 너무 길어. 아코디언처럼 더보기를 누르면 밑의 내용을." */
details.vs-row { display: block; }
.vs-row > summary {
  display: flex; align-items: flex-start; gap: var(--s3, 12px);
  cursor: pointer; list-style: none;
}
/* 브라우저가 기본으로 다는 삼각형을 지웁니다 — 우리 '더보기' 로 대신합니다 */
.vs-row > summary::-webkit-details-marker { display: none; }
.vs-row > summary::marker { content: ''; }
.vs-row > summary:focus-visible { outline: 2px solid var(--terra); outline-offset: 3px; border-radius: 6px; }
/* 닫혀 있을 때는 아래 선이 필요 없습니다 — 선 아래에 아무것도 없습니다 */
.vs-row > summary > .vs-key {
  display: block; flex: 1 1 auto; min-width: 0;
  padding-bottom: 0; border-bottom: 0;
}
.vs-row[open] > summary {
  padding-bottom: var(--s3, 12px); margin-bottom: var(--s4, 16px);
  border-bottom: 1px solid var(--line);
}
.vs-more {
  flex: 0 0 auto; font-style: normal; font-size: 12px; font-weight: 700;
  color: #fff; background: var(--terra);
  padding: 5px 11px; border-radius: 999px;
  display: inline-flex; align-items: center; gap: 4px;
  white-space: nowrap;
}
.vs-more i { font-style: normal; }
.vs-more::after {
  content: ''; width: 5px; height: 5px;
  border-top: 1.6px solid currentColor; border-right: 1.6px solid currentColor;
  transform: rotate(135deg); margin-top: -2px;    /* 아래쪽 꺾쇠 */
  transition: transform .18s ease;
}
.vs-row[open] .vs-more::after { transform: rotate(-45deg); margin-top: 2px; }
.vs-row[open] .vs-more i::before { content: '접기'; }
.vs-row[open] .vs-more i { font-size: 0; }
.vs-row[open] .vs-more i::before { font-size: 12px; }
/* 견줄 두 칸 */
.vs-cells { display: grid; grid-template-columns: 1fr 1fr; gap: var(--s3, 12px); }
@media (min-width: 720px) {
  .vs-row > summary > .vs-key { padding-bottom: 0; }
  .vs-row[open] > summary { padding-bottom: 14px; margin-bottom: 16px; }
}

/* ── 커리큘럼 사진 한가운데의 수강 신청 단추 ─────────────
   원장님: "이미지 중간에 수강신청 버튼을 만들어서 누르면 팝업으로."

   사진이 밝아서(도서관 햇빛) 흰 단추는 묻힙니다. 꽉 찬 버건디에 흰 글씨로
   두고 그림자를 깔아 사진에서 떠오르게 합니다. */
.curpic-cta {
  position: absolute; z-index: 3;
  left: 50%; top: 46%; transform: translate(-50%, -50%);
  display: inline-flex; align-items: center; gap: 7px;
  padding: 15px 28px; border-radius: 999px;
  background: var(--terra); color: #fff;
  font-size: 16px; font-weight: 800; letter-spacing: -.02em;
  white-space: nowrap;
  box-shadow: 0 6px 22px rgba(36, 29, 31, .32);
  transition: background .15s, transform .15s, box-shadow .15s;
}
.curpic-cta::after {
  content: ''; width: 6px; height: 6px;
  border-top: 2px solid currentColor; border-right: 2px solid currentColor;
  transform: rotate(45deg);
}
.curpic-cta:hover {
  background: var(--terra-dark);
  transform: translate(-50%, calc(-50% - 2px));
  box-shadow: 0 10px 28px rgba(36, 29, 31, .38);
}
.curpic-cta:focus-visible { outline: 3px solid #fff; outline-offset: 3px; }
@media (max-width: 719px) {
  .curpic-cta { padding: 13px 22px; font-size: 15px; top: 42%; }
}

/* ── 유튜브 숏츠 — 미리보기 칸과 팝업 ──────────────────
   원장님: "한미ibt.com 의 단어 숏츠야. 클릭하면 숏츠를 팝업으로." */
.vshot {
  position: relative; display: block; line-height: 0;
  border-radius: 10px; overflow: hidden;
}
.perkshots .vshot img { border-radius: 10px; }   /* 혜택 띠에서만 — 수업 사진은 제 모양(12px·테두리)을 지킵니다 */
/* 재생 삼각형 — 흰 동그라미 안에 넣습니다. 영상 화면이 밝든 어둡든
   흰 동그라미는 늘 보입니다. */
.vshot-play {
  position: absolute; left: 50%; top: 50%; transform: translate(-50%, -50%);
  width: 58px; height: 58px; border-radius: 999px;
  background: rgba(255, 255, 255, .94);
  box-shadow: 0 4px 18px rgba(0, 0, 0, .3);
  display: flex; align-items: center; justify-content: center;
  transition: transform .15s, background .15s;
}
.vshot-play::after {
  content: ''; margin-left: 4px;
  border-left: 17px solid var(--terra);
  border-top: 10px solid transparent; border-bottom: 10px solid transparent;
}
.vshot:hover .vshot-play { transform: translate(-50%, -50%) scale(1.08); background: #fff; }
.vshot:focus-visible { outline: 3px solid var(--terra); outline-offset: 3px; }

/* 팝업 — 세로로 긴 영상이라 상자도 9:16 입니다. 화면 높이에 맞춰 줄어듭니다. */
.modal-short { width: fit-content; max-width: calc(100vw - 24px); padding: 14px; }
.shortbox {
  height: min(calc(100dvh - 120px), 760px); aspect-ratio: 9 / 16;
  max-width: calc(100vw - 52px); margin: 0 auto;
  border-radius: 12px; overflow: hidden; background: #000;
}
.shortbox iframe { display: block; width: 100%; height: 100%; border: 0; }
/* 닫기 단추가 영상 위에 겹치므로 잘 보이게 */
.modal-short .modal-x button { background: rgba(255, 255, 255, .9); }

/* 레벨테스트 순서 — 한 단계 안에서 1:1 과 그룹이 갈릴 때 */
.step-split { list-style: none; margin: 6px 0 0; padding: 0; display: grid; gap: 5px; }
.step-split li {
  position: relative; padding-left: 13px;
  font-size: 13.5px; line-height: 1.6; color: var(--sub);
}
.step-split li::before {
  content: ''; position: absolute; left: 0; top: .62em;
  width: 4px; height: 4px; border-radius: 999px; background: var(--terra);
}
.step-split li b { color: var(--ink); font-weight: 700; margin-right: 6px; }

/* 가로 영상일 때 — 팝업 상자를 16:9 로. 세로 숏츠는 위 규칙 그대로입니다. */
.modal-short.wide .shortbox {
  height: auto; aspect-ratio: 16 / 9;
  width: min(880px, calc(100vw - 52px)); max-width: none;
}
/* 수업 선택 사진 둘 — 동그라미를 사진 크기에 맞춰 작게 */
.vs-pics .vshot { display: block; position: relative; line-height: 0; }
.vs-pics .vshot-play { width: 46px; height: 46px; }
.vs-pics .vshot-play::after {
  margin-left: 3px; border-left-width: 13px;
  border-top-width: 8px; border-bottom-width: 8px;
}
/* '영상 보기' 알약 — 칸 색을 그대로 씁니다. 1:1 은 파랑, 그룹은 자주.
   수강료 표에서 쓰는 색과 같아서, 색만 보고도 어느 쪽 영상인지 압니다. */
.vs-pics-play {
  font-style: normal; font-weight: 700; font-size: 11.5px;
  color: #fff; background: currentColor;
  padding: 2px 8px; border-radius: 999px; margin-left: 6px;
}
.vs-pics .a figcaption .vs-pics-play { background: #1c5b91; color: #fff; }
.vs-pics .b figcaption .vs-pics-play { background: #a8325a; color: #fff; }
/* 사진 위 재생 삼각형도 그 칸 색으로 */
.vs-pics .a .vshot-play::after { border-left-color: #1c5b91; }
.vs-pics .b .vshot-play::after { border-left-color: #a8325a; }


/* ── 🔴 수강료를 모바일에서 표로 (원장님 2026-10-12) ──────────
   "스크롤 없이 표로. 회수·수강료·신청으로"

   주1~4회 네 칸이 옆으로 밀리는 칸에 있어서, 주4회를 보려면 끝까지
   밀어야 했고 값을 나란히 견줄 수가 없었습니다. 좁은 화면에서는
   **세 칸짜리 표**로 세웁니다 — 한눈에 다 보입니다.

   `display:contents` 로 카드 상자를 없애면 그 안의 세 조각이 바로
   표의 칸이 됩니다. 마크업을 두 벌 만들지 않아도 됩니다. */
.plan-head { display: none; }
/* 데스크탑에서는 이 칸이 없는 것과 같습니다 — 카드 모양 그대로 */
.plan-cell { display: contents; }

@media (max-width: 719px) {
  .plans {
    display: grid;
    grid-template-columns: auto 1fr auto;   /* 횟수 · 수강료 · 신청 */
    gap: 0;
    /* 🔴 `hidden` 이 핵심입니다 (원장님 2026-10-12: "표의 라인과 여백과
       라운드가 안 맞아"). 두 가지를 한 번에 해결합니다.
         ① 옆으로 미는 동작을 끕니다
         ② 머리줄 색과 맨 아랫줄이 **모서리 곡선 안쪽으로 깔끔히 잘립니다**
       전에는 칸마다 손으로 둥글기를 줬는데, 그러면 1px 씩 어긋나고
       **마지막 칸이 숨겨졌을 때**(그 과목에 없는 요금제) 그 위 칸이
       각진 채로 남습니다. 잘라 내면 그런 경우가 없습니다. */
    overflow: hidden;
    border: 1px solid var(--line, #e8dcde);
    border-radius: 14px;
    background: #fff;
  }
  /* 옆으로 밀던 칸의 흔적 지우기 */
  .plans > * { scroll-snap-align: none; }
  /* `:has()` 에 기대지 않고 클래스를 직접 붙였습니다 — 옛 브라우저에서
     `:has()` 를 모르면 규칙 한 줄이 통째로 무시되어 가로 스크롤이 남습니다. */
  .planswrap { overflow: visible; }
  /* 🔴 옆으로 밀던 시절의 설정을 **전부** 되돌립니다 (원장님 2026-10-12).
     `.pdur .swipe` 가 좌우로 빼냈다 다시 채우고(margin-inline 음수 +
     padding-inline) 아래에 10px 을 비워 둡니다 — 카드가 화면 끝까지
     흐르게 하려던 것인데, 표에서는 **줄이 끝까지 안 닿고 표 아래가 뜹니다**.
     `.swipe > *` 의 고정폭도 풀어야 세 칸이 제 너비를 찾습니다. */
  .plans,
  .pdur .swipe.plans {
    padding: 0; margin: 0;
    gap: 0;
    scroll-snap-type: none;
  }
  .plans > *, .pdur .swipe.plans > * { flex: initial; scroll-snap-align: none; }

  .plan-head {
    display: contents;
  }
  /* 🔴 머리글을 **자기 칸에 맞춥니다** (원장님 2026-10-12).
     '수강료' 는 왼쪽에 있는데 금액은 오른쪽 끝에 찍혀서 서로 딴 데를
     가리키고 있었습니다. 칸의 정렬(왼쪽·오른쪽·가운데)을 그대로 따릅니다. */
  .plan-head > span {
    display: flex; align-items: center;
    padding: 9px 12px;
    background: var(--terra-soft, #F7E9EB);
    font: 700 .78rem/1.3 var(--sans);
    color: var(--terra-dark, #6f1d29);
    letter-spacing: .02em;
  }
  .plan-head > span:nth-child(2) { justify-content: flex-end; }  /* 수강료 = 오른쪽 */
  .plan-head > span:last-child   { justify-content: center; }    /* 신청 = 가운데 */

  /* 🔴 원장님(2026-10-12): "25분의 표의 색을 파랗게 해줘서 통일되게"
     25분 구역은 파랑, 55분은 자주로 이미 갈려 있는데 **표 머리줄만**
     둘 다 분홍이라 25분 칸에서 혼자 튀었습니다. 위에 이미 쓰고 있는
     파랑(#1c5b91 글자 · #d8e6f3 테두리)을 그대로 씁니다. */
  .pdur[data-dur="25"] .plans      { border-color: #d8e6f3; }
  .pdur[data-dur="25"] .plan-head > span {
    background: #eaf2fa; color: #1c5b91;
  }
  .pdur[data-dur="25"] .plan > *   { border-top-color: #e3edf7; }

  /* 카드 상자를 없애 세 조각이 표의 칸이 되게 합니다 */
  .plan {
    display: contents;
  }
  /* ⚠️ 자바스크립트가 과목에 따라 `el.hidden = true` 로 칸을 감춥니다.
     `display:contents` 가 브라우저 기본 `[hidden]{display:none}` 을
     이겨 버리므로, 여기서 다시 감춰 줍니다. 이게 없으면 **그 과목에
     없는 요금제까지 표에 남습니다.** */
  .plan[hidden] { display: none !important; }

  .plan > * {
    display: flex; align-items: center;
    padding: 11px 12px;
    border-top: 1px solid var(--line, #eee4e6);
    background: #fff;
  }
  .plan-per { margin: 0; font-size: .95rem; white-space: nowrap; }
  .plan-won { justify-content: flex-end; }
  .plan-won em { font-size: .66rem; }
  /* 칸 — 흰 바탕과 윗줄만. 단추는 그 안에 들어앉습니다 */
  /* 좌우 여백을 머리줄(12px)과 **같게** — 다르면 '신청' 글자와 단추가
     한 줄로 안 맞아 보입니다. 위아래만 줄여 단추가 칸을 덜 키우게 합니다. */
  .plan-cell { justify-content: center; padding: 7px 12px; }
  .plan-go {
    display: inline-flex; align-items: center; justify-content: center;
    width: auto; margin: 0; padding: 8px 15px;
    border-radius: 999px; min-width: 64px; font-size: .86rem;
  }

}

/* ── 🔴 주제별 안내 페이지 (원장님 2026-10-12, 검색 대응) ──────
   hmibt.com/toefl · /returnee · /speaking · /sat
   홈페이지와 같은 색·글꼴을 쓰되, 글을 읽는 자리라 한 줄을 짧게
   잡습니다 (가로 760px). 검색으로 처음 오시는 분이 보는 화면이라
   "뭘 하는 곳인지" 가 위에서 끝나야 합니다. */
.lp { padding: 28px 0 56px; }
.lp .wrap { max-width: 760px; }

.lp-crumb { font-size: .82rem; color: var(--sub); margin-bottom: 14px; }
.lp-crumb a { color: var(--terra); font-weight: 700; }
.lp-crumb span { margin: 0 5px; opacity: .5; }

.lp-h1 {
  margin: 0 0 14px; font-size: clamp(1.6rem, 1.1rem + 2.2vw, 2.3rem);
  font-weight: 800; letter-spacing: -.03em; line-height: 1.25;
}
.lp-lead { margin: 0 0 22px; font-size: 1.02rem; line-height: 1.75; color: var(--ink); }
.lp-lead b { color: var(--terra-dark); }

.lp-cta { display: flex; flex-wrap: wrap; gap: 9px; margin-bottom: 8px; }

.lp-sec { margin-top: 38px; }
.lp-sec > h2 {
  margin: 0 0 14px; font-size: 1.22rem; font-weight: 800; letter-spacing: -.025em;
  padding-left: 11px; position: relative;
}
.lp-sec > h2::before {
  content: ''; position: absolute; left: 0; top: .22em;
  width: 4px; height: .9em; background: var(--terra); border-radius: 2px;
}

.lp-who { margin: 0; padding-left: 20px; }
.lp-who li { margin-bottom: 8px; line-height: 1.7; }

.lp-how { display: grid; gap: 10px; }
.lp-how > div {
  padding: 13px 15px; border: 1px solid var(--line, #e8dcde); border-radius: 12px;
  background: #fff;
}
.lp-how b { display: block; margin-bottom: 4px; font-size: .98rem; }
.lp-how span { font-size: .9rem; color: var(--sub); line-height: 1.65; }

.lp-books { margin: 0 0 8px; font-size: 1rem; line-height: 1.8; }
.lp-books b { color: var(--terra-dark); }
.lp-note { margin: 8px 0 0; font-size: .85rem; color: var(--sub); line-height: 1.65; }
.lp-note a { color: var(--terra); font-weight: 700; }

.lp-price {
  width: 100%; border-collapse: collapse; margin-bottom: 14px;
  border: 1px solid var(--line, #e8dcde); border-radius: 12px; overflow: hidden;
}
.lp-price caption {
  caption-side: top; text-align: left; padding: 0 0 7px;
  font-size: .92rem; font-weight: 800; color: var(--terra-dark);
}
.lp-price th, .lp-price td {
  padding: 10px 12px; text-align: left; font-size: .92rem;
  border-top: 1px solid var(--line, #eee4e6);
}
.lp-price thead th { background: var(--terra-soft, #F7E9EB); border-top: 0; font-weight: 700; }
.lp-price tbody th { font-weight: 700; white-space: nowrap; }
.lp-price td:nth-child(2) { text-align: right; font-weight: 800; font-variant-numeric: tabular-nums; }
.lp-price td:last-child { text-align: center; width: 1%; }

.lp-schools { margin: 0; line-height: 1.9; font-weight: 600; }

.lp-faq {
  border: 1px solid var(--line, #e8dcde); border-radius: 12px;
  padding: 0 14px; margin-bottom: 8px; background: #fff;
}
.lp-faq > summary {
  padding: 13px 0; cursor: pointer; font-weight: 700; font-size: .96rem;
  list-style: none;
}
.lp-faq > summary::-webkit-details-marker { display: none; }
.lp-faq > summary::after { content: ' ⌄'; color: var(--sub); }
.lp-faq[open] > summary::after { content: ' ⌃'; }
.lp-faq > p { margin: 0 0 14px; font-size: .92rem; line-height: 1.75; color: var(--sub); }

.lp-end {
  padding: 24px; border-radius: 16px;
  background: var(--terra-soft, #F7E9EB); text-align: center;
}
.lp-end > h2 { padding-left: 0; }
.lp-end > h2::before { display: none; }
.lp-end p { margin: 0 0 16px; line-height: 1.7; }
.lp-end .lp-cta { justify-content: center; }

.lp-more {
  display: flex; flex-wrap: wrap; gap: 8px;
  margin-top: 34px; padding-top: 20px; border-top: 1px solid var(--line, #e8dcde);
}
.lp-more a {
  padding: 7px 13px; border: 1px solid var(--line, #e8dcde); border-radius: 999px;
  font-size: .86rem; font-weight: 600; color: var(--sub);
}
.lp-more a:hover { border-color: var(--terra); color: var(--terra); }
