/* 빌런창고 — 토큰. 글꼴(Pretendard, 필요한 글자 조각만 받는 dynamic subset)은 template.html 의 <link> 로 받는다 */
:root {
  color-scheme: light dark;
  --ink: #33305A;
  --ink-2: #66627F;
  --bg: #FFFFFF;
  --mist: #F4F1FB;
  --lav: #C9B8F5;
  --sky: #A9CDFF;
  --lemon: #FFE28A;
  --mint: #B9E6C9;
  --peach: #FFC9B5;
  --tint-mix: 100%;
  --shadow: 0 24px 60px rgb(51 48 90 / .12);
  --display: 'Pretendard Variable', Pretendard, 'Malgun Gothic', sans-serif;
  --body: 'Pretendard Variable', Pretendard, 'Malgun Gothic', sans-serif;
  --gutter: max(clamp(20px, 5vw, 64px), env(safe-area-inset-left), env(safe-area-inset-right));
  --kind-store: #EDE7FB; /* 묶음 색: 스토어 앱 = 라벤더 */
  --kind-toss: #DDEBFF;  /* 토스 미니앱 = 스카이 */
  --kind-play: #DFF3E6;  /* 묶음 머리의 Google Play 그림 = 민트 */
  --max: 1120px;
}
@media (prefers-color-scheme: dark) {
  :root {
    --ink: #F4F1FB;
    --ink-2: #DAD6EC;
    --bg: #1B1930;
    --mist: #26233D;
    --tint-fallback: #26233D; /* color-mix 미지원 브라우저: 다크에선 틴트 원색 위 흰 글자가 안 보이므로 미스트로 */
    --tint-mix: 34%;
    --shadow: 0 24px 60px rgb(0 0 0 / .35);
    --kind-store: #3A3560;
    --kind-toss: #2C3F63;
    --kind-play: #2A4A3D;
  }
}

*, *::before, *::after { box-sizing: border-box; }
html { -webkit-text-size-adjust: 100%; scroll-behavior: smooth; scroll-padding-top: calc(78px + env(safe-area-inset-top)); }
body {
  margin: 0;
  background: var(--bg);
  color: var(--ink);
  font-family: var(--body);
  font-size: 1.0625rem;
  line-height: 1.65;
  font-feature-settings: 'ss05';
  word-break: keep-all;
  overflow-wrap: break-word;
  overflow-x: hidden;
}
img { display: block; max-width: 100%; height: auto; }
a { color: inherit; text-decoration: none; }
a:focus-visible { outline: 3px solid var(--sky); outline-offset: 4px; border-radius: 4px; }
.sprite { position: absolute; width: 0; height: 0; overflow: hidden; }
/* 작은 선 그림(템플릿의 <symbol>) 공통 */
.platform-icon svg, .chapter-kind svg, .store svg { flex: none; fill: none; stroke: currentColor; stroke-width: 2; stroke-linecap: round; stroke-linejoin: round; }
h1, h2, h3, h4 { font-family: var(--display); font-weight: 800; margin: 0; }

/* 내비는 하나(<nav class="cap">)이고 재질은 유리 캡슐이다: 반투명 단색 면 + 뒤 흐림 + 얇은 밝은 테두리. 그라데이션은 쓰지 않는다.
   - 휴대폰·세로 태블릿(768px 이하): 화면 아래쪽에 늘 떠 있는 탭 캡슐(그림 위, 짧은 이름 아래). 맨 위에는 이름만 있는 머리줄
   - 그보다 넓으면: 맨 위에서는 평범한 헤더, 스크롤하면(.is-capsule) 화면 위 가운데에 떠 있는 캡슐
   지금 보는 구역: main.js 가 항목에 aria-current 를 붙이고 강조 알약(.cap-pill)을 그 항목 뒤로 미끄러뜨린다.
   글자·그림은 --ink 로 둔다(유리 뒤에 어두운 폰 목업이 와도 4.5:1 이상). 누르는 것은 모두 높이 44px 이상 */
.top { position: fixed; inset: 0 0 auto 0; z-index: 20; pointer-events: none; padding-top: env(safe-area-inset-top); }
.top .top-brand { display: none; pointer-events: auto; }
.cap {
  --glass: rgb(255 255 255 / .68); --glass-solid: rgb(255 255 255 / .92); --glass-line: rgb(255 255 255 / .8); --glass-shadow: 0 8px 24px rgb(51 48 90 / .1), 0 0 0 1px rgb(51 48 90 / .06);
  position: relative; pointer-events: auto; display: flex; align-items: center; gap: 2px;
  width: max-content; max-width: calc(100% - 20px); margin: 10px auto 0; padding: 3px; border-radius: 999px;
  font-size: .9375rem; white-space: nowrap;
  background: var(--glass-solid); border: 1px solid var(--glass-line); box-shadow: var(--glass-shadow);
}
@media (prefers-color-scheme: dark) { .cap { --glass: rgb(27 25 48 / .65); --glass-solid: rgb(27 25 48 / .92); --glass-line: rgb(255 255 255 / .16); --glass-shadow: 0 8px 24px rgb(0 0 0 / .28), 0 0 0 1px rgb(0 0 0 / .2); } }
/* 뒤 흐림을 못 쓰는 브라우저는 위의 불투명 92% 면 그대로 */
@supports ((-webkit-backdrop-filter: blur(1px)) or (backdrop-filter: blur(1px))) {
  .cap { background: var(--glass); -webkit-backdrop-filter: blur(18px) saturate(1.4); backdrop-filter: blur(18px) saturate(1.4); }
}
.cap-item { position: relative; z-index: 1; display: inline-flex; align-items: center; gap: 6px; min-height: 44px; padding: 0 14px; border-radius: 999px; color: var(--ink); font-weight: 600; transition: transform .12s ease, color .2s; }
.cap-item:active { transform: scale(.97); }
.cap-item:focus-visible { outline: 3px solid var(--sky); outline-offset: 2px; border-radius: 999px; }
.cap-home { gap: 7px; padding: 0 14px 0 10px; }
.cap-home .mark { width: 24px; height: 24px; flex: none; }
.cap-brand { display: none; }
.cap-icons { display: inline-flex; }
.cap-icons svg { width: 20px; height: 20px; fill: none; stroke: currentColor; stroke-width: 2; stroke-linecap: round; stroke-linejoin: round; }
.cap-icons svg + svg { margin-left: -3px; }
.nav-short { display: none; }
/* 강조 알약: 지금 보는 구역의 항목 뒤에 놓인다. 위치·크기는 main.js 가 준다 */
.cap-pill { position: absolute; z-index: 0; left: 0; top: 0; width: 0; height: 0; border-radius: 999px; background: var(--mist); opacity: 0; transition: transform .2s ease, width .2s ease, opacity .2s ease, background-color .2s ease; }
.cap-pill.is-on { opacity: 1; }
.cap-pill[data-group="store"] { background: var(--kind-store); }
.cap-pill[data-group="toss"] { background: var(--kind-toss); }
@media (prefers-color-scheme: dark) { .cap-pill { background: #3B3759; } }
@keyframes cap-in { from { opacity: 0; transform: translateY(-12px); } }

/* 넓은 화면: 위쪽 */
@media (min-width: 769px) {
  .cap-icons-m { display: none; }
  .top.is-capsule .cap { animation: cap-in .32s ease-out; }
  .top.is-capsule .cap-lang { margin-left: 5px; }
  .top.is-capsule .cap-lang::before { content: ''; position: absolute; left: -3px; top: 13px; bottom: 13px; width: 1px; background: rgb(51 48 90 / .2); background: color-mix(in oklab, var(--ink) 20%, transparent); }
  /* 맨 위: 유리 없이 평범한 헤더(왼쪽 이름, 오른쪽 메뉴) */
  .top:not(.is-capsule) .cap { width: auto; max-width: var(--max); margin: 0 auto; padding: 10px var(--gutter); gap: clamp(4px, 1.2vw, 16px); border-radius: 0; background: none; border-color: transparent; box-shadow: none; -webkit-backdrop-filter: none; backdrop-filter: none; }
  .top:not(.is-capsule) .cap-item { padding: 0 10px; color: var(--ink-2); font-weight: 500; }
  .top:not(.is-capsule) .cap-item:hover { color: var(--ink); }
  .top:not(.is-capsule) .cap-home { gap: 10px; margin-right: auto; padding-left: 0; color: var(--ink); font-family: var(--display); font-weight: 800; font-size: 1.125rem; letter-spacing: -0.01em; }
  .top:not(.is-capsule) .cap-home .mark { width: 28px; height: 28px; }
  .top:not(.is-capsule) .cap-brand { display: inline; }
  .top:not(.is-capsule) .cap-home-label, .top:not(.is-capsule) .cap-pill { display: none; }
}

/* 휴대폰·세로 태블릿: 아래쪽 탭 캡슐. 처음부터 보이고 숨지 않는다. 맨 위 머리줄(이름)은 페이지와 함께 올라간다 */
@media (max-width: 768px) {
  html { scroll-padding-top: 20px; }
  .top { position: absolute; }
  .top .top-brand { display: flex; width: max-content; margin: 10px var(--gutter) 0; }
  .cap { position: fixed; left: 14px; right: 14px; bottom: calc(12px + env(safe-area-inset-bottom)); width: auto; max-width: 440px; margin: 0 auto; padding: 4px; gap: 0; border-radius: 30px; font-size: .75rem; }
  .cap-item { flex: 1 1 0; min-width: 0; flex-direction: column; justify-content: center; gap: 3px; min-height: 50px; padding: 0 2px; border-radius: 26px; font-weight: 700; line-height: 1.2; }
  .cap-item:focus-visible { border-radius: 26px; }
  .cap-home { gap: 3px; padding: 0 2px; }
  .cap-home .mark, .cap-icons svg { width: 22px; height: 22px; }
  .cap-icons svg + svg { margin-left: -4px; }
  .cap-pill { border-radius: 26px; }
  .nav-full { display: none; }
  .nav-short { display: inline; }
}

.brand { display: flex; align-items: center; gap: 10px; min-height: 44px; font-family: var(--display); font-weight: 800; font-size: 1.125rem; letter-spacing: -0.01em; white-space: nowrap; }
.brand .mark { width: 28px; height: 28px; flex: none; }

/* 양옆 폰이 화면 밖으로 나가도 가로 스크롤이 생기지 않게(clip은 sticky를 깨지 않는다) */
main { overflow-x: clip; }

/* 히어로(제품 무대): 왼쪽 글, 오른쪽 폰 3대. 가운데 폰 화면이 앱별로 바뀌고 뒤의 빛도 그 앱 색으로 */
.hero {
  position: relative; isolation: isolate; /* 양옆 폰이 본문 폭 밖으로 나가도 잘리지 않게(가로 넘침은 body가 막는다) */
  min-height: 100vh; min-height: 100svh;
  display: grid; grid-template-columns: minmax(0, 1fr) minmax(0, 1fr); align-items: center; gap: clamp(24px, 4vw, 56px);
  max-width: var(--max); margin: 0 auto; padding: 104px var(--gutter) 56px;
}
.hero-copy { position: relative; z-index: 2; }
.hero h1 { font-size: clamp(2.6rem, 4.9vw, 4.5rem); line-height: 1.1; letter-spacing: -0.05em; text-wrap: balance; }
.sub { margin: 26px 0 0; max-width: 28.5rem; text-wrap: pretty; font-size: clamp(1.0625rem, 1.35vw, 1.1875rem); line-height: 1.7; color: var(--ink-2); }
.hero-actions { margin-top: 40px; display: flex; flex-wrap: wrap; align-items: center; gap: 16px 28px; }
.hero-cta, .contact-mail {
  display: inline-flex; align-items: center; gap: 12px; border-radius: 999px;
  background: var(--ink); color: var(--bg); font-family: var(--display); font-weight: 700; letter-spacing: -0.01em;
  box-shadow: 0 14px 30px rgb(51 48 90 / .22); transition: transform .25s ease, box-shadow .25s ease;
}
.hero-cta { padding: 16px 28px; font-size: 1.0625rem; }
.hero-cta::after { content: ''; width: 7px; height: 7px; border-right: 2px solid currentColor; border-bottom: 2px solid currentColor; transform: translateY(-2px) rotate(45deg); }
.hero-cta:hover, .contact-mail:hover { transform: translateY(-2px); box-shadow: 0 18px 38px rgb(51 48 90 / .28); }
@media (prefers-color-scheme: dark) { .hero-cta, .contact-mail { box-shadow: 0 14px 30px rgb(0 0 0 / .4); } }
.hero-link { display: inline-flex; align-items: center; min-height: 44px; font-weight: 600; font-size: 1.0625rem; text-decoration: underline; text-decoration-thickness: 2px; text-underline-offset: 7px; text-decoration-color: var(--lav); transition: text-decoration-color .2s; }
.hero-link:hover { text-decoration-color: var(--sky); }

.hero-stage { --hero-phone: clamp(220px, 20vw, 290px); position: relative; height: min(740px, 84vh); }
.hero-glow { position: absolute; left: 50%; top: 52%; width: 78%; aspect-ratio: 1; translate: -50% -50%; border-radius: 50%; background: #FFE28A; filter: blur(80px); opacity: .5; }
@media (prefers-color-scheme: dark) { .hero-glow { opacity: .22; } }
/* 겹: .hphone(스크롤) > .hphone-in(마우스 시차) > .phone(등장, 기울기는 rotate/scale 속성) */
.hphone { position: absolute; left: 50%; top: 50%; width: var(--hero-phone); margin: calc(var(--hero-phone) * -1.0667) 0 0 calc(var(--hero-phone) / -2); }
.hero .phone { width: 100%; }
.hphone-main { z-index: 3; }
.hphone-left { z-index: 2; translate: -66% 6%; }
.hphone-right { z-index: 2; translate: 66% 6%; }
.hphone-left .phone { rotate: -8deg; scale: .82; }
.hphone-right .phone { rotate: 8deg; scale: .82; }
.hero-screens { position: relative; width: 100%; height: 100%; border-radius: 34px; overflow: hidden; background: #fff; }
.hero-screen { position: absolute; inset: 0; opacity: 0; }
/* 처음 보이는 화면: content.json 의 heroStart 앱(빌드가 is-start 를 붙인다). 나머지는 화면이 돌기 시작할 때 받는다 */
.hero-screen.is-start { opacity: 1; }
.hero-screen:not([src]) { visibility: hidden; }
.hero-mascot { position: absolute; z-index: 4; width: clamp(110px, 10vw, 150px); right: 2%; bottom: 4%; filter: drop-shadow(0 20px 26px rgb(51 48 90 / .22)); }

/* ===== 만든 앱 =====
   두 묶음(스토어 앱 / 토스 미니앱)으로 나뉜다. 묶음마다 제목 줄, 앱마다 [아이콘·종류·이름 → 폰 화면 → 한 줄 소개·포인트 → 버튼].
   - 기본(휴대폰): 세로 한 줄 흐름. 폰 화면은 한 대, 화면 폭과 높이에 맞춘다
   - 768px 이상: 글 왼쪽, 폰 오른쪽 2단
   - 1024px 이상 + 모션: 왼쪽 챕터를 스크롤하면 오른쪽에 고정된 폰 무대가 앱별로 바뀐다 */
.apps { max-width: var(--max); margin: 0 auto; padding: clamp(72px, 12vw, 144px) var(--gutter) clamp(24px, 6vw, 80px); }
.apps-title { font-size: clamp(2rem, 4vw, 3.2rem); letter-spacing: -0.035em; line-height: 1.1; }

/* 묶음 */
.group[data-group="store"] { --kind: var(--kind-store); }
.group[data-group="toss"] { --kind: var(--kind-toss); }
.group { margin-top: clamp(28px, 4vw, 44px); }
.group + .group { margin-top: clamp(56px, 8vw, 88px); }
.group-head { padding-top: 26px; border-top: 1.5px solid rgb(51 48 90 / .16); border-top-color: color-mix(in oklab, var(--ink) 16%, transparent); }
.group-title { font-size: clamp(1.5rem, 2.4vw, 1.9rem); letter-spacing: -0.035em; line-height: 1.15; }
/* 묶음 머리: 설명 문장 대신 큰 플랫폼 그림(단색 파스텔 면 + 진한 선)과 짧은 이름. 문장은 aria-label 로 남아 있다 */
.group-platforms { display: flex; flex-wrap: wrap; gap: 14px 20px; margin-top: 20px; }
.platform { display: grid; justify-items: center; align-content: start; min-width: 76px; text-align: center; }
.platform-icon { display: grid; place-items: center; width: 72px; height: 72px; margin-bottom: 10px; border-radius: 22px; background: var(--kind-store); color: var(--ink); }
.platform[data-platform="android"] .platform-icon { background: var(--kind-play); }
.platform[data-platform="toss"] .platform-icon { background: var(--kind-toss); }
.platform-icon svg { width: 36px; height: 52px; fill: var(--bg); stroke-width: 1.5; }
.platform b { font-family: var(--display); font-weight: 800; font-size: 1rem; letter-spacing: -0.02em; line-height: 1.25; }
.platform small { color: var(--ink-2); font-size: .875rem; line-height: 1.4; }

/* 앱 하나 */
.chapter { position: relative; display: flex; flex-direction: column; align-items: stretch; padding: 40px 0 16px; }
.chapter-head { display: flex; align-items: center; gap: 14px; }
.chapter-icon { flex: none; width: 60px; height: 60px; border-radius: 24%; box-shadow: var(--shadow); }
.chapter-id { min-width: 0; }
.chapter-kind { display: inline-flex; align-items: center; gap: 2px; margin: 0 0 7px; padding: 4px 12px 4px 7px; border-radius: 999px; background: var(--kind); font-size: .875rem; font-weight: 700; line-height: 1.4; letter-spacing: -0.01em; }
.chapter-kind svg { width: 22px; height: 22px; stroke-width: 1.9; }
.chapter-kind svg + svg { margin-left: -5px; }
.chapter-kind span { margin-left: 3px; }
.chapter-name { margin: 0; font-size: clamp(1.75rem, 7.2vw, 2.1rem); line-height: 1.1; letter-spacing: -0.04em; }
.chapter-shot { position: relative; display: grid; place-items: center; margin-top: 20px; padding: 28px 0; border-radius: 32px; background: var(--tint-fallback, var(--tint)); background: color-mix(in oklab, var(--tint) var(--tint-mix), var(--bg)); }
@media (prefers-color-scheme: dark) { .chapter-shot { background: var(--tint-fallback); background: color-mix(in oklab, var(--tint-dark) 30%, var(--bg)); } }
.chapter-line { margin: 22px 0 0; max-width: 26rem; font-size: 1.0625rem; color: var(--ink-2); }
.chapter-points { list-style: none; margin: 16px 0 0; padding: 0; display: grid; gap: 10px; }
.chapter-points li { position: relative; padding-left: 26px; font-family: var(--display); font-weight: 700; font-size: 1.0625rem; letter-spacing: -0.01em; line-height: 1.5; }
.chapter-points li::before { content: ''; position: absolute; left: 0; top: .42em; width: 12px; height: 12px; border-radius: 50%; background: var(--tint-dark, var(--lav)); }

/* 어디서 쓰는 앱인지
   - 출시된 스토어: 공식 배지 이미지 그대로(색·모양을 바꾸지 않는다. 높이 48px, 둘레 여백 12px 이상)
   - 토스: 채운 알약 버튼 + 미니앱 그림
   - 출시 예정: 누를 수 없는 점선 칩 + 플랫폼 그림 + "출시 예정" 글자 */
.chapter-stores { display: flex; flex-wrap: wrap; align-items: center; gap: 12px; margin-top: 24px; }
.store-badge { display: block; flex: none; line-height: 0; border-radius: 9px; transition: transform .25s ease; }
.store-badge img { display: block; width: auto; height: 48px; max-width: none; }
.store-badge:hover { transform: translateY(-2px); }
.store { display: inline-flex; align-items: center; justify-content: center; gap: 8px; flex: 1 1 auto; min-height: 48px; padding: 6px 20px 6px 14px; border-radius: 999px; font-size: 1rem; line-height: 1.25; letter-spacing: -0.01em; }
.store svg { width: 24px; height: 24px; }
.store-live { background: var(--ink); color: var(--bg); font-family: var(--display); font-weight: 700; box-shadow: 0 10px 24px rgb(51 48 90 / .18); transition: transform .25s ease, box-shadow .25s ease; }
.store-live:hover { transform: translateY(-2px); box-shadow: 0 14px 30px rgb(51 48 90 / .24); }
@media (prefers-color-scheme: dark) { .store-live, .store-live:hover { box-shadow: 0 10px 24px rgb(0 0 0 / .4); } }
.store-review { flex: 0 1 auto; min-height: 44px; padding: 4px 16px 4px 10px; gap: 6px; font-size: .9375rem; font-weight: 600; color: var(--ink); border: 1.5px dashed rgb(51 48 90 / .38); border-color: color-mix(in oklab, var(--ink) 38%, transparent); cursor: default; }

/* 폰 */
:root { --phone-frame: #33305A; --phone-w: clamp(244px, 21vw, 292px); }
@media (prefers-color-scheme: dark) { :root { --phone-frame: #4A4674; } }
.phone { position: relative; width: var(--phone-w); aspect-ratio: 9 / 19.2; padding: 10px; border-radius: 44px; background: var(--phone-frame); box-shadow: 0 40px 80px rgb(51 48 90 / .24), inset 0 0 0 1.5px rgb(255 255 255 / .08); }
@media (prefers-color-scheme: dark) { .phone { box-shadow: 0 40px 80px rgb(0 0 0 / .5), inset 0 0 0 1.5px rgb(255 255 255 / .1); } }
.phone img, .screen { width: 100%; height: 100%; object-fit: cover; object-position: top; border-radius: 34px; background: var(--shot-bg, #fff); }
/* 휴대폰: 폰 한 대가 화면 폭에도, 한 화면 높이에도 다 들어오게 */
.chapter-shot .phone { width: min(58vw, 250px); width: min(58vw, 250px, calc((100svh - 230px) * .46875)); min-width: 150px; box-shadow: 0 24px 48px rgb(51 48 90 / .2), inset 0 0 0 1.5px rgb(255 255 255 / .08); }

/* 무대(1024px 이상 + 모션에서만 보인다) */
.stage { display: none; position: relative; }
.stage-in { position: sticky; top: 0; height: 100vh; height: 100svh; display: grid; place-items: center; }
.stage-bgs { position: absolute; inset: 12vh 0; border-radius: 56px; overflow: hidden; }
.stage-bg { position: absolute; inset: 0; opacity: 0; background: var(--tint-fallback, var(--tint)); background: color-mix(in oklab, var(--tint) var(--tint-mix), var(--bg)); }
.stage-bg:first-child { opacity: 1; }
@media (prefers-color-scheme: dark) { .stage-bg { background: var(--tint-fallback); background: color-mix(in oklab, var(--tint-dark) 30%, var(--bg)); } }
.stage-phone { z-index: 2; will-change: transform; }
.screens { position: relative; width: 100%; height: 100%; border-radius: 34px; overflow: hidden; background: #fff; }
.screen { position: absolute; inset: 0; opacity: 0; }
.screen:first-child { opacity: 1; }
.stage-icons { position: absolute; z-index: 3; width: 104px; aspect-ratio: 1; top: 20%; left: calc(50% - var(--phone-w) / 2 - 84px); }
.stage-icon { position: absolute; inset: 0; width: 100%; height: 100%; border-radius: 24%; box-shadow: 0 22px 44px rgb(51 48 90 / .22); opacity: 0; transform: rotate(-8deg); }
.stage-icon:first-child { opacity: 1; }
/* 점: 묶음 사이를 띄워 스토어 앱과 토스 미니앱이 나뉘어 보이게 */
.stage-dots { position: absolute; z-index: 3; right: 6%; top: 50%; transform: translateY(-50%); display: grid; gap: 10px; }
.stage-dot { width: 8px; height: 8px; border-radius: 999px; background: color-mix(in oklab, var(--ink) 22%, transparent); transition: height .35s ease, background-color .35s ease; }
.stage-dot.is-group-start { margin-top: 16px; }
.stage-dot.is-active { height: 30px; background: var(--ink); }

/* 768px 이상: 글 왼쪽, 폰 오른쪽 */
@media (min-width: 768px) {
  .chapter { display: grid; grid-template-columns: minmax(0, 1fr) minmax(0, 1.1fr); grid-template-rows: 1fr repeat(4, auto) 1fr; column-gap: clamp(32px, 5vw, 80px); align-items: start; justify-items: start; padding: clamp(36px, 5vw, 64px) 0; }
  .chapter > * { grid-column: 1; }
  .chapter-head { grid-row: 2; flex-direction: column; align-items: flex-start; gap: 22px; }
  .chapter-icon { width: 76px; height: 76px; }
  .chapter-kind { margin-bottom: 12px; }
  .chapter-name { font-size: clamp(2.2rem, 3.8vw, 3.3rem); line-height: 1.08; }
  .chapter-line { grid-row: 3; margin-top: 14px; font-size: clamp(1.0625rem, 1.4vw, 1.1875rem); }
  .chapter-points { grid-row: 4; margin-top: 28px; gap: 12px; }
  .chapter-points li { font-size: 1.125rem; }
  .chapter-points li::before { top: .48em; }
  .chapter-stores { grid-row: 5; margin-top: 30px; }
  .store { flex: 0 0 auto; }
  .chapter-shot { grid-column: 2; grid-row: 1 / -1; justify-self: stretch; margin: 0; padding: 48px 0; border-radius: 40px; }
  .chapter-shot .phone { width: var(--phone-w); box-shadow: 0 40px 80px rgb(51 48 90 / .24), inset 0 0 0 1.5px rgb(255 255 255 / .08); }
}

/* 1024px 이상 + 모션: 고정 무대 */
@media (min-width: 1024px) {
  .motion .apps-body { display: grid; grid-template-columns: minmax(0, 1fr) minmax(0, 1.1fr); gap: clamp(32px, 5vw, 80px); }
  .motion .stage { display: block; }
  .motion .group, .motion .group + .group { margin-top: 0; }
  .motion .group-head { margin-top: clamp(28px, 4vw, 44px); }
  .motion .chapter { display: flex; flex-direction: column; justify-content: center; align-items: flex-start; min-height: 100vh; min-height: 100svh; padding: 10vh 0; opacity: .26; transition: opacity .5s ease; }
  .motion .chapter.is-active { opacity: 1; }
  .motion .chapter-shot { display: none; }
  /* 묶음의 첫 앱은 묶음 제목 바로 아래에서 시작(가운데 정렬하면 제목과 사이가 반 화면쯤 빈다) */
  .motion .group-head + .chapter { min-height: 74vh; min-height: 74svh; justify-content: flex-start; padding-top: 5vh; }
}

/* ===== 하는 일: 3단, 윗선 하나로 구분 ===== */
.services { max-width: var(--max); margin: 0 auto; padding: clamp(72px, 10vw, 128px) var(--gutter); }
.services-title { font-size: clamp(2rem, 4vw, 3.2rem); letter-spacing: -0.045em; line-height: 1.1; }
.services-row { display: grid; grid-template-columns: repeat(3, minmax(0, 1fr)); gap: clamp(24px, 4vw, 56px); margin-top: clamp(36px, 5vw, 56px); }
.service { padding-top: 26px; border-top: 1.5px solid color-mix(in oklab, var(--ink) 16%, transparent); }
.service h3 { font-size: clamp(1.3rem, 1.9vw, 1.6rem); letter-spacing: -0.035em; line-height: 1.25; }
.service p { margin: 12px 0 0; color: var(--ink-2); font-size: 1rem; line-height: 1.7; }
.tags { display: flex; flex-wrap: wrap; gap: 8px; margin-top: 20px; }
.tags span { padding: 5px 12px; border-radius: 999px; background: var(--mist); font-size: .8125rem; font-weight: 600; color: var(--ink-2); }

/* ===== 얼굴들 ===== */
.faces { position: relative; padding: clamp(72px, 10vw, 128px) var(--gutter); text-align: center; }
.faces::before { content: ''; position: absolute; z-index: -1; inset: 0; background: var(--mist); }
.faces-title { font-size: clamp(1.6rem, 2.6vw, 2.2rem); letter-spacing: -0.03em; margin-bottom: clamp(32px, 5vw, 56px); }
.faces-row { display: flex; justify-content: center; align-items: flex-end; gap: clamp(20px, 5vw, 72px); flex-wrap: wrap; max-width: var(--max); margin: 0 auto; }
.face { margin: 0; width: min(26vw, 280px); }
.face img { width: 100%; height: auto; filter: drop-shadow(0 26px 34px rgb(51 48 90 / .16)); }
.face figcaption { margin-top: 18px; display: grid; gap: 4px; }
.face b { font-family: var(--display); font-weight: 800; font-size: 1.375rem; letter-spacing: -0.02em; }
.face span { color: var(--ink-2); font-size: .9375rem; }

/* 마무리 패널: 캐릭터 셋이 패널 위로 빼꼼 */
.contact { max-width: var(--max); margin: 0 auto; padding: clamp(150px, 16vw, 210px) var(--gutter) clamp(56px, 8vw, 96px); }
.contact-panel {
  position: relative; display: flex; flex-direction: column; align-items: center; text-align: center;
  padding: clamp(56px, 8vw, 104px) clamp(24px, 5vw, 64px); border-radius: clamp(32px, 4vw, 56px);
  background: #EDE7FB;
}
@media (prefers-color-scheme: dark) { .contact-panel { background: #2E2A4C; background: color-mix(in oklab, var(--lav) 18%, var(--bg)); } }
/* 패널 윗변에서 잘린 창: 캐릭터 윗부분만 보인다 */
.peek { position: absolute; left: 50%; bottom: 100%; transform: translateX(-50%); display: flex; align-items: flex-start; gap: clamp(0px, 1.2vw, 16px); height: clamp(78px, 8.4vw, 112px); overflow: hidden; }
.peek-face { flex: none; width: clamp(108px, 11.5vw, 152px); height: auto; }
.contact-line { margin: 0; font-size: clamp(1.9rem, 4.2vw, 3.3rem); line-height: 1.15; letter-spacing: -0.035em; max-width: 15ch; text-wrap: balance; }
.contact-actions { margin-top: 38px; display: flex; flex-wrap: wrap; justify-content: center; gap: 12px; }
.contact-mail { padding: 16px 30px; font-size: clamp(1.0625rem, 1.8vw, 1.3rem); }
.copy-mail {
  font: inherit; font-weight: 600; font-size: 1rem; padding: 16px 24px; border-radius: 999px; cursor: pointer;
  color: var(--ink); background: transparent; border: 1.5px solid rgb(51 48 90 / .3); border-color: color-mix(in oklab, var(--ink) 30%, transparent);
  transition: background-color .2s;
}
.copy-mail:hover { background: color-mix(in oklab, var(--bg) 55%, transparent); }
.copy-mail:focus-visible { outline: 3px solid var(--sky); outline-offset: 3px; }
.copy-status { min-height: 1.6em; margin: 14px 0 0; font-size: .9375rem; color: var(--ink-2); }

/* 푸터 */
.site {
  max-width: var(--max); margin: 0 auto; padding: 8px var(--gutter) calc(56px + env(safe-area-inset-bottom));
  display: flex; justify-content: space-between; align-items: flex-start; gap: 32px;
  font-size: .8125rem; color: var(--ink-2); line-height: 1.8;
}
.site-brand { display: grid; justify-items: start; gap: 8px; }
.site .brand { color: var(--ink); font-size: 1rem; }
.site .brand .mark { width: 24px; height: 24px; }
.site .lang, .legal a { display: inline-flex; align-items: center; min-height: 44px; }
.site .lang { color: var(--ink-2); box-shadow: inset 0 -1.5px 0 transparent; transition: color .2s, box-shadow .2s; }
.site .lang:hover { color: var(--ink); box-shadow: inset 0 -1.5px 0 var(--lav); }
.legal { display: grid; grid-template-columns: repeat(2, auto); column-gap: 40px; }
.legal span { display: block; }

/* 태블릿 */
@media (max-width: 1023px) {
  .hero { grid-template-columns: 1fr; min-height: 0; padding-top: 112px; }
  .hero-stage { --hero-phone: 230px; height: 560px; }
  .services-row { grid-template-columns: 1fr; gap: 0; }
  .service { padding: 24px 0 28px; }
}

/* 휴대폰 */
@media (max-width: 767px) {
  .platform-icon { width: 64px; height: 64px; border-radius: 20px; }
  .platform-icon svg { width: 32px; height: 46px; }

  /* 첫 화면: 폰 세 대가 화면 폭 안에 다 들어온다(양옆이 잘리지 않게 폰 크기를 화면 폭에 맞춘다) */
  .hero { padding: calc(80px + env(safe-area-inset-top)) var(--gutter) 8px; gap: 20px; }
  .hero h1 { font-size: clamp(2.1rem, 10vw, 2.9rem); }
  .sub { margin-top: 18px; font-size: 1.0625rem; }
  .hero-actions { margin-top: 26px; gap: 10px 24px; }
  .hero-cta { min-height: 52px; padding: 14px 26px; }
  .hero-stage { --hero-phone: min(40vw, 190px); height: calc(var(--hero-phone) * 2.42); }
  .hphone-left { translate: -62% 5%; }
  .hphone-right { translate: 62% 5%; }
  .hphone-left .phone { rotate: -6deg; scale: .8; }
  .hphone-right .phone { rotate: 6deg; scale: .8; }
  .hero-glow { width: 92%; filter: blur(56px); }
  .hero-mascot { width: 84px; right: 0; bottom: 2%; }
  .hero .phone { box-shadow: 0 20px 40px rgb(51 48 90 / .22), inset 0 0 0 1.5px rgb(255 255 255 / .08); }

  .phone { padding: 8px; border-radius: 34px; }
  .phone img, .hero-screens { border-radius: 27px; }
  .hero .phone { padding: 6px; border-radius: 26px; }
  .hero .phone img, .hero-screens { border-radius: 20px; }

  .tags span { font-size: .875rem; padding: 6px 12px; }
  .faces-row { gap: 12px; flex-wrap: nowrap; }
  .face { width: calc((100% - 24px) / 3); }
  .face b { font-size: 1.125rem; }
  .face span { font-size: .875rem; }
  .contact { padding-top: 120px; }
  .contact-actions { flex-direction: column; align-items: stretch; width: 100%; }
  .contact-mail { justify-content: center; font-size: 1rem; padding: 15px 20px; }
  .site { flex-direction: column; gap: 12px; font-size: .875rem; }
  .legal { grid-template-columns: 1fr; }
}

@media (prefers-reduced-motion: reduce) {
  html { scroll-behavior: auto; }
  .top.is-capsule .cap { animation: none; }
  .cap-item:active { transform: none; }
  *, *::before, *::after { transition: none !important; }
}

/* 아주 넓은 화면: 본문 폭과 폰을 키워 가운데가 휑하지 않게 */
@media (min-width: 1800px) {
  :root { --max: 1360px; --phone-w: 320px; }
  .hero h1 { font-size: 5.2rem; }
  .hero-stage { --hero-phone: 330px; }
}

/* 아래쪽 탭 캡슐(768px 이하)이 페이지 맨 끝의 푸터를 가리지 않게 */
@media (max-width: 768px) {
  .site { padding-bottom: calc(104px + env(safe-area-inset-bottom)); }
}
