/* 랜딩 v3 — 실제 렌더 샘플을 보여주는 절들 (히어로 그림 · 장르 스위처 · 기능 한 화면씩 · 편집 방식).
   쇼츠는 전부 제품이 구운 파일이다 (tools/landing_samples.py) — 여기서는 놓기만 한다: 자막·제목을
   CSS 로 흉내 내지 않는다. 색·여백은 style.css 의 토큰과 landing.css 의 팔레트를 그대로 쓴다. */
.landing .hero{grid-template-columns:minmax(0,1fr) minmax(0,1.08fr)}
.landing .tc{font-family:var(--mono);font-size:var(--t-base);color:var(--cool);font-variant-numeric:tabular-nums;letter-spacing:.02em}

/* 폰 — 모든 쇼츠 표본의 한 벌 */
.landing .sv-phone{position:relative;aspect-ratio:9/16;border-radius:var(--r-xl);overflow:hidden;background:#000;border:1px solid #ffffff30;box-shadow:var(--e-3)}
.landing .sv-phone video,.landing .sv-phone img{display:block;width:100%;height:100%;object-fit:cover}

/* 히어로 그림 — 원본 한 편 뒤에서 쇼츠 셋이 올라온다 */
.landing .hv{position:relative;min-width:0;padding-bottom:34%}
.landing .hv-src{position:relative;margin:0;width:72%;border-radius:var(--r-lg);overflow:hidden;border:1px solid #ffffff24;background:var(--surface-2);box-shadow:var(--e-2)}
.landing .hv-src img{display:block;width:100%;height:auto;aspect-ratio:16/9;object-fit:cover}
.landing .hv-src figcaption{position:absolute;left:var(--sp-12);top:var(--sp-12);display:flex;gap:var(--sp-8);align-items:center;background:#000a;border-radius:var(--r);padding:var(--sp-4) var(--sp-10);font-family:var(--mono);font-size:var(--t-sm);color:var(--cool);letter-spacing:.04em}
.landing .hv-src figcaption b{font-weight:600;color:#fff}
.landing .hv-heat,.landing .cv-heat{display:flex;align-items:flex-end;gap:2px;height:48px;padding:var(--sp-8) var(--sp-10) var(--sp-6);position:relative;overflow:hidden}
.landing .hv-heat i,.landing .cv-heat i{flex:1;min-width:0;height:calc(var(--h)*1%);border-radius:var(--r-xs);background:var(--cool);opacity:.34}
.landing .hv-heat i.pk,.landing .cv-heat i.pk{background:var(--hot);opacity:1}
/* 스캔 선은 **transform 으로** 지나간다 (UI 점검 R6-04 — left 를 애니메이트하면 7초 내내 매 프레임 레이아웃이다).
   층은 히트맵 폭 그대로이고 선(2px)·번짐(양옆 12px)은 그 왼쪽 끝의 그라데이션이다 — translateX(100%) 가 곧 히트맵 폭이라
   예전 left:0→100% 와 같은 길을 간다. 히트맵이 overflow:hidden 이라 밀려난 층은 잘린다 */
.landing .hv-heat::after,.landing .cv-heat::after{content:"";position:absolute;top:0;bottom:0;left:-12px;width:100%;pointer-events:none;
  background:linear-gradient(90deg,transparent 0,color-mix(in oklch,var(--hot) 45%,transparent) 11px,#fff9f1 11px 13px,color-mix(in oklch,var(--hot) 45%,transparent) 13px,transparent 25px) no-repeat;
  animation:sv-scan 7s linear infinite} /* motion:ambient */
@keyframes sv-scan{from{transform:translateX(0)}to{transform:translateX(100%)}}
.landing .hv-fan{position:absolute;right:0;bottom:0;width:80%;display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:var(--sp-12);align-items:end}
.landing .hv-fan .hv-l{transform:translateY(-7%) rotate(-3.5deg)}
.landing .hv-fan .hv-c{transform:translateY(0) scale(1.06);z-index:1}
.landing .hv-fan .hv-r{transform:translateY(-13%) rotate(3.5deg)}
.landing-motion .landing .hv-fan .sv-phone{animation:sv-rise var(--dur-5) var(--ease) both}
.landing-motion .landing .hv-fan .hv-c{animation-delay:var(--dur-1)}.landing-motion .landing .hv-fan .hv-r{animation-delay:var(--dur-2)}
@keyframes sv-rise{from{translate:0 28px;opacity:.4}to{translate:0 0;opacity:1}}

/* 장르 스위처 */
.landing .sv-sec,.landing .fx-sec,.landing .md-sec{padding:100px 0 0}
.landing .sv-chips,.landing .fx-tabs{display:flex;flex-wrap:wrap;gap:var(--sp-8)}
.landing .sv-chips{margin-bottom:var(--sp-24)}
.landing .sv-chips button,.landing .fx-tabs button{appearance:none;min-height:var(--ctl-xl);padding:0 var(--sp-16);border-radius:var(--r-full);border:1px solid var(--line-2);background:none;color:var(--ink-2);font:inherit;font-size:var(--t-lg);font-weight:700;cursor:pointer;transition:background var(--dur-2) var(--ease),color var(--dur-2) var(--ease),border-color var(--dur-2) var(--ease)}
.landing .sv-chips button:hover,.landing .fx-tabs button:hover{border-color:#fff9f1;color:#fff}
.landing .sv-chips button[aria-selected=true],.landing .fx-tabs button[aria-selected=true]{background:#fff9f1;border-color:#fff9f1;color:#18191C}
/* 칩이 열둘에서 스물여덟이 됐다 — 예전 크기(--ctl-xl · --t-lg)로 두면 칩 줄이 화면 한 판이 되고,
   그때 고르는 것이 아니라 읽는 일이 된다 (U01 과 같은 규칙). 한 계단 낮추고 언어를 작은 표식으로 단다. */
.landing .sv-chips button{min-height:var(--ctl-lg);padding:0 var(--sp-12);font-size:var(--t-base);display:inline-flex;align-items:center;gap:var(--sp-6)}
.landing .sv-chips button i{font:600 var(--t-xs)/1 var(--mono);font-style:normal;opacity:.62;letter-spacing:.02em}
.landing .sv-chips button[aria-selected=true] i{opacity:.75}

/* 소리 — 말하는 원본이 있는 샘플에서만 선다 (없으면 hidden). 선 아이콘이고 컬러 이모지가 아니다(U03). */
.landing .sv-sound{appearance:none;display:inline-flex;align-items:center;gap:var(--sp-6);min-height:var(--ctl-md);padding:0 var(--sp-12);border:1px solid var(--line-2);border-radius:var(--r-full);background:none;color:var(--ink-2);font:inherit;font-size:var(--t-base);font-weight:600;cursor:pointer;transition:color var(--dur-2) var(--ease),border-color var(--dur-2) var(--ease)}
.landing .sv-sound:hover{border-color:#fff9f1;color:#fff}
.landing .sv-sound svg{width:16px;height:16px;fill:none;stroke:currentColor;stroke-width:1.7;stroke-linecap:round;stroke-linejoin:round}
.landing .sv-sound svg path:first-child{fill:currentColor;stroke:none}
.landing .sv-sound .sv-wave{display:none}
.landing .sv-sound .sv-mute{display:inline}
.landing .sv-sound[aria-pressed=true]{border-color:var(--hot);color:var(--hot)}
.landing .sv-sound[aria-pressed=true] .sv-wave{display:inline}
.landing .sv-sound[aria-pressed=true] .sv-mute{display:none}
.landing .sv-stage{display:grid;grid-template-columns:minmax(0,1fr) 40px minmax(0,320px);gap:var(--sp-24);align-items:center;background:var(--surface-2);border:1px solid var(--line);border-radius:var(--r-xl);padding:var(--sp-32)}
.landing .sv-source{display:grid;gap:var(--sp-16);min-width:0}
.landing .sv-frame,.landing .rf-src{position:relative;border-radius:var(--r-lg);overflow:hidden;background:#000}
.landing .sv-frame video,.landing .rf-src img,.landing .rf-src video{display:block;width:100%;height:auto;aspect-ratio:16/9;object-fit:cover}
/* 크롭 창 — 위치·폭은 매니페스트의 baked.crop (= layouts.resolve 의 source_crop). 밖은 어둡게 */
/* 위치는 transform 이다 (UI 점검 R6-18 — left 전환은 매 프레임 레이아웃). 창 요소는 영상 폭 그대로 깔리고
   translateX(var(--x)) 가 곧 영상 폭의 x% 다. 테두리·바깥 어둠은 ::before 의 상자가 그리고 폭(var(--w))만 그 상자가 바꾼다 —
   scaleX 로 줄이면 테두리·모서리가 같이 찌그러진다. 영상 틀이 overflow:hidden 이라 오른쪽으로 밀린 층은 잘린다 */
.landing .sv-win{position:absolute;top:0;bottom:0;left:0;width:100%;transform:translateX(var(--x));transition:transform var(--dur-5) var(--ease);pointer-events:none}
.landing .sv-win::before{content:"";position:absolute;inset:0 auto 0 0;width:var(--w);border:2px solid var(--hot);border-radius:var(--r);box-shadow:0 0 0 100vmax #0009;box-sizing:border-box;transition:width var(--dur-5) var(--ease)}
.landing .sv-win.is-tracking,.landing .sv-win.is-tracking::before{transition:none}
.landing .sv-win.is-tracking{transition:none}
.landing .sv-win b{position:absolute;z-index:1;left:var(--sp-6);top:var(--sp-4);font:600 var(--t-xs) var(--mono);color:var(--hot)}
.landing .sv-meta{display:flex;flex-wrap:wrap;gap:var(--sp-6) var(--sp-16);align-items:baseline}
.landing .sv-meta strong{font-size:var(--t-2xl);letter-spacing:-.02em}
.landing .sv-tl{position:relative;height:8px;border-radius:var(--r-sm);background:var(--surface-5);overflow-x:clip}
/* 표식도 transform 으로 간다 (R6-18) — 줄 폭 그대로인 투명 층을 translateX(var(--l)) 로 밀고 표식은 그 왼쪽 끝의 ::before */
.landing .sv-tl i{position:absolute;top:-3px;bottom:-3px;left:0;width:100%;transform:translateX(var(--l));transition:transform var(--dur-5) var(--ease);pointer-events:none}
.landing .sv-tl i::before{content:"";position:absolute;inset:0 auto 0 0;width:2.4%;min-width:10px;border-radius:var(--r-sm);background:var(--hot)}
.landing .sv-why{display:flex;flex-wrap:wrap;gap:var(--sp-6);list-style:none;margin:0;padding:0}
.landing .sv-why li{font-size:var(--t-md);padding:var(--sp-4) var(--sp-10);border-radius:var(--r);background:var(--surface-4);color:var(--ink-1)}
.landing .sv-why li::before{content:"";display:inline-block;width:6px;height:6px;border-radius:50%;background:var(--cool);margin-right:var(--sp-6);vertical-align:1px}
.landing .sv-note{font-size:var(--t-md);color:var(--ink-3);line-height:var(--lh-body);min-height:1.6em}
.landing .sv-arrow{font-size:var(--t-5xl);color:var(--hot);text-align:center}
.landing .sv-out{display:grid;gap:var(--sp-12);justify-items:center;min-width:0}
.landing .sv-out .sv-phone{width:100%}
.landing .sv-style{display:flex;gap:var(--sp-6);flex-wrap:wrap;justify-content:center;font-size:var(--t-base);color:var(--ink-2)}
.landing .sv-style span{border:1px solid var(--line-2);border-radius:var(--r-full);padding:var(--sp-2) var(--sp-10)}
/* 고지는 **각주**다 — 문단이면 자신 없어 보이고, 결국 아무도 안 읽는다. 한 줄로 작게. */

/* 기능 — **한 무대에서 바꿔 끼운다.** 넷이 같은 모양(왼쪽 글 · 오른쪽 그림)이라 세로로 이으면 네
   화면이 되고, 그때는 넷이 한 묶음이라는 것도 지금 몇 번째인지도 안 보인다. 자리는 **가로 스냅
   스크롤 하나**이고(손가락으로 밀린다) 탭 줄·화살표는 그 스크롤을 옮기는 두 번째 손잡이다 —
   값이 하나라 갈라지지 않는다. 패널은 늘 같은 방향이다: 좌우를 번갈으면 바꿀 때마다 글이 반대편으로
   튀어서, 무대가 바뀐 것이 아니라 화면이 바뀐 것으로 읽힌다.
   높이는 **지금 보이는 패널**을 따라간다 (`--fx-h`, JS 가 스크롤 위치로 두 이웃 사이를 잇는다).
   가장 큰 패널에 맞추면 390px 에서 짧은 패널 아래로 760px 이 비고(실측), 활성 패널에 딱 맞추면
   미는 동안 들어오는 패널이 잘린다. 이어 주면 둘 다 아니다. JS 가 없으면 `auto` — 예전처럼 가장 큰
   패널이 정한다 (패널은 늘리지 않는다: `align-self:start`). */
.landing .fx-deck{min-width:0}
.landing .fx-bar{display:flex;align-items:center;justify-content:space-between;gap:var(--sp-16);margin-bottom:var(--sp-32)}
.landing .fx-seg{position:relative;display:flex;gap:var(--sp-4);min-width:0;padding:var(--sp-4);border-radius:var(--r-full);background:var(--surface-3);overflow-x:auto;overscroll-behavior-x:contain;scrollbar-width:none}
.landing .fx-seg::-webkit-scrollbar{display:none}
.landing .fx-seg button{position:relative;z-index:1;flex:0 0 auto;appearance:none;height:var(--ctl-xl);padding:0 var(--sp-24);border:0;border-radius:var(--r-full);background:none;color:var(--ink-2);font:inherit;font-size:var(--t-lg);font-weight:700;letter-spacing:-.01em;white-space:nowrap;cursor:pointer;transition:color var(--dur-2) var(--ease)}
.landing .fx-seg button:hover{color:#fff}
.landing .fx-seg button[aria-selected=true]{color:#18191C}
/* 고른 것은 **알약 하나가 옮겨 다닌다** — 넷에 배경을 각각 켜고 끄면 옮겨 간 것이 아니라 둘이 깜빡인 것으로 읽힌다 */
.landing .fx-seg-ink{position:absolute;top:var(--sp-4);left:0;width:var(--seg-w,0);height:var(--ctl-xl);border-radius:var(--r-full);background:#fff9f1;transform:translateX(var(--seg-x,0));transition:transform var(--dur-3) var(--ease),width var(--dur-3) var(--ease)}
.landing .fx-nav{display:flex;flex:0 0 auto;gap:var(--sp-8)}
.landing .fx-arrow{appearance:none;display:inline-grid;place-items:center;width:var(--ctl-xl);height:var(--ctl-xl);border:1px solid var(--line-2);border-radius:var(--r-full);background:none;color:var(--ink-2);cursor:pointer;transition:color var(--dur-2) var(--ease),border-color var(--dur-2) var(--ease)}
.landing .fx-arrow svg{width:16px;height:16px}
.landing .fx-arrow:hover:not(:disabled){border-color:#fff9f1;color:#fff}
.landing .fx-arrow:disabled{opacity:var(--o-off);cursor:default}
.landing .fx-stage{position:relative;display:flex;height:var(--fx-h,auto);overflow-x:auto;overflow-y:hidden;overscroll-behavior-x:contain;scroll-snap-type:x mandatory;scrollbar-width:none}
.landing .fx-stage::-webkit-scrollbar{display:none}
.landing .fx{flex:0 0 100%;min-width:0;align-self:start;scroll-snap-align:start;display:grid;grid-template-columns:minmax(0,1fr) minmax(0,1.1fr);gap:var(--sp-48);align-items:center}
.landing .fx h3{font-size:clamp(26px,3vw,38px);line-height:1.2;letter-spacing:-.03em;font-weight:900}
.landing .fx-copy>p{margin-top:var(--sp-16)!important;color:var(--ink-2);font-size:var(--t-xl);line-height:1.8;max-width:34em}
.landing .fx-copy b{color:var(--ink);font-weight:700}
.landing .fx-list{margin:var(--sp-20) 0 0;padding:0;list-style:none;display:grid;gap:var(--sp-8);color:var(--ink-1);font-size:var(--t-lg)}
.landing .fx-list li::before{content:"✓";color:var(--cool);font-weight:700;margin-right:var(--sp-8)}
.landing .fx-tabs{margin-top:var(--sp-24)}
.landing .fx-vis{min-width:0;display:grid;justify-items:center;background:radial-gradient(ellipse at 60% 40%,#75472338,transparent 70%);border-radius:var(--r-xl);padding:var(--sp-24)}
.landing .fx-phone{width:min(100%,300px)}
.landing .fx-refvis{grid-template-columns:minmax(0,1.5fr) minmax(0,1fr);gap:var(--sp-20);align-items:center}
.landing .fx-refvis .rf-src{width:100%}
.landing .fx-refvis .fx-phone{width:100%}
.landing .fx-clipvis{justify-items:stretch;gap:var(--sp-12);background:var(--surface-2);border:1px solid var(--line)}
.landing .cv-src{position:relative;border-radius:var(--r-lg);overflow:hidden}
.landing .cv-src img{display:block;width:100%;height:auto}
.landing .cv-src span{position:absolute;right:var(--sp-8);bottom:var(--sp-8);background:#000c;border-radius:var(--r-sm);padding:var(--sp-2) var(--sp-6);font:600 var(--t-sm) var(--mono)}
.landing .cv-heat{height:64px;padding-inline:0;background:var(--surface-0);border-radius:var(--r)}
.landing .cv-picks{list-style:none;margin:0;padding:0;display:grid;gap:var(--sp-8)}
.landing .cv-picks li{display:grid;grid-template-columns:64px minmax(0,1fr) 96px;gap:var(--sp-12);align-items:center;padding:var(--sp-10) var(--sp-12);border-radius:var(--r);background:var(--surface-4);font-size:var(--t-md)}
.landing .cv-picks b{font:600 var(--t-md) var(--mono);color:var(--hot)}
.landing .cv-picks span{color:var(--ink-1);min-width:0}
.landing .cv-picks i{height:6px;border-radius:var(--r-full);background:linear-gradient(90deg,var(--hot) var(--s),var(--surface-5) var(--s))}
.landing .fx-real{padding:0;background:none}
.landing .fx-tr .ls-notes{display:block;margin-top:var(--sp-24)}
.landing .fx-tr .ls-notes h3{font-size:var(--t-xl)}
.landing .fx-tr .ls-notes p{font-size:var(--t-md);margin:var(--sp-8) 0}

/* 편집 방식 — 이름·설명은 /api/modes 가 준다 (여기에 박지 않는다) */
.landing .md-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(250px,1fr));gap:var(--sp-12)}
.landing .md-card{border:1px solid var(--line);border-radius:var(--r-lg);padding:var(--sp-20);background:var(--surface-2);display:grid;gap:var(--sp-8);align-content:start}
.landing .md-card b{font-size:var(--t-2xl);letter-spacing:-.02em}
.landing .md-card p{font-size:var(--t-md);color:var(--ink-2);line-height:var(--lh-body);margin:0!important}
.landing .md-card small{font:600 var(--t-xs) var(--mono);letter-spacing:.1em;color:var(--cool);text-transform:uppercase}
.landing .md-sec{padding-bottom:var(--sp-20)}

@media(max-width:1000px){
  .landing .sv-stage{padding:var(--sp-20);grid-template-columns:minmax(0,1fr) 28px minmax(0,240px);gap:var(--sp-16)}
  .landing .fx{gap:var(--sp-32)}
}
@media(max-width:720px){
  .landing .hero{grid-template-columns:1fr}
  .landing .hv{max-width:520px;width:100%;justify-self:center}
  .landing .sv-sec,.landing .fx-sec,.landing .md-sec{padding-top:72px}
  .landing .sv-stage{grid-template-columns:1fr;padding:var(--sp-16)}
  /* 칩이 서른여섯이다. 좁은 폭에서 그대로 접으면 **열네 줄**이 되고(실측 390px), 그때 칩 줄은
     고르는 자리가 아니라 읽는 자리가 된다 (U01 과 같은 규칙). 한 줄짜리 가로 스트립으로 바꾼다 —
     넘치는 것은 이 상자 하나이고 본문은 가로로 안 밀린다. */
  .landing .sv-chips{flex-wrap:nowrap;overflow-x:auto;scroll-snap-type:x proximity;overscroll-behavior-x:contain;scrollbar-width:none;padding-bottom:var(--sp-4)}
  .landing .sv-chips::-webkit-scrollbar{display:none}
  .landing .sv-chips button{flex:0 0 auto;scroll-snap-align:start}
  .landing .sv-arrow{transform:rotate(90deg)}
  .landing .sv-out .sv-phone{width:min(100%,260px)}
  .landing .fx{grid-template-columns:1fr;gap:var(--sp-24)}
  /* 좁은 폭에서 화살표는 뺀다 — 미는 것이 더 자연스럽고, 탭 줄이 바로 위에 있다 */
  .landing .fx-nav{display:none}
  .landing .fx-bar{margin-bottom:var(--sp-20)}
  .landing .fx-seg button{height:var(--ctl-lg);padding:0 var(--sp-16);font-size:var(--t-base)}
  .landing .fx-seg-ink{height:var(--ctl-lg)}
  .landing .fx-vis{padding:var(--sp-16)}
  .landing .fx-refvis{grid-template-columns:1fr}
  .landing .fx-refvis .fx-phone{width:min(100%,260px)}
  .landing .cv-picks li{grid-template-columns:56px minmax(0,1fr)}
  .landing .cv-picks i{display:none}
}
@media(prefers-reduced-motion:reduce){
  .landing .hv-heat::after,.landing .cv-heat::after{display:none}
}
/* 히어로 — 세 줄로 접히지 않게 (한글은 어절에서만 접는다) */
.landing .hero h1{font-size:clamp(38px,4.5vw,66px);word-break:keep-all}
.landing .hero-sub{word-break:keep-all}
.landing .hv-fan{right:3%;width:78%}
.landing .fx-real .landing-samples{width:100%;padding:var(--sp-16) 0}
.landing .fx-real .ls-original h3{font-size:var(--t-xl)}

/* Editorial landing: outcome → craft → three steps → questions → invitation. */
.landing .hero{min-height:720px;padding-top:104px;padding-bottom:96px;gap:48px}
.landing .hero h1{font-size:clamp(38px,4.3vw,64px);line-height:1.24;letter-spacing:-.055em}
.landing .hero-kicker{color:#c8c4b8;font-size:var(--t-md);letter-spacing:.04em}
.landing .hero-sub{font-size:var(--t-xl);line-height:1.9;color:#b7b9b4}
.landing .hero-bg .mv{opacity:.18;filter:grayscale(1) brightness(1.3)}
.landing .hero-bg>video{opacity:.22}
.landing .hero-bg::after{background:linear-gradient(90deg,var(--void) 5%,#0f1113c9 50%,#0f111355),linear-gradient(0deg,var(--void),transparent 65%)}
.landing .sv-sec,.landing .fx-sec{padding-top:112px}
.landing .head{margin-bottom:38px}
.landing .sec-title{font-size:clamp(32px,3.6vw,50px);line-height:1.25;letter-spacing:-.05em}
.landing .sec-lead{font-size:var(--t-xl);line-height:1.85;color:#aeb2ad;margin-top:24px}
.landing .eyebrow{font-size:var(--t-base);letter-spacing:.06em;margin-bottom:20px}
.landing .sv-sec .head,.landing .fx-sec .head{display:grid;grid-template-columns:1.2fr 1fr;column-gap:64px;align-items:end}
.landing .sv-sec .head .eyebrow,.landing .fx-sec .head .eyebrow{grid-column:1/-1}
.landing .sv-sec .head .sec-lead,.landing .fx-sec .head .sec-lead{margin:0;max-width:29em;padding-bottom:4px}
.landing .sv-chips{gap:10px;margin-bottom:24px}
.landing .sv-chips button{padding:12px 20px;font-size:var(--t-lg);min-height:46px;font-weight:500}
.landing .sv-stage{padding:40px 48px;grid-template-columns:minmax(0,1fr) 48px minmax(0,260px);background:linear-gradient(125deg,#202321,#181b1a);border-color:#ffffff10;border-radius:24px;gap:32px}
.landing .sv-source::before{content:attr(data-label);font-size:var(--t-base);color:#b3b8af;letter-spacing:.06em}
.landing .sv-out::before{content:attr(data-label);font-size:var(--t-base);color:#e1ddc9;letter-spacing:.06em}
.landing .sv-meta strong{font-size:var(--t-2xl);line-height:1.5}
.landing .sv-note{color:#a6aca4}
.landing .fx-deck{border:1px solid #ffffff14;border-radius:24px;background:#161a19;padding:32px 40px 40px}
.landing .fx-bar{margin-bottom:40px;gap:24px}
.landing .fx-seg{border-radius:0;background:none;gap:8px;flex:1;max-width:850px;padding:0;counter-reset:feature}
.landing .fx-seg-ink{display:none}
.landing .fx-seg button{counter-increment:feature;flex:1;height:auto;min-height:66px;border-radius:0;border-bottom:1px solid #ffffff24;text-align:left;padding:12px 8px;font-size:var(--t-lg);color:#a6aca5}
.landing .fx-seg button::before{content:'0' counter(feature);display:block;margin-bottom:8px;font:var(--t-sm) var(--mono);color:#929c8a}
.landing .fx-seg button[aria-selected=true]{color:#f1efdc;border-bottom:2px solid var(--hot);background:none}
.landing .fx-seg button[aria-selected=true]::before{color:var(--hot)}
.landing .fx h3{font-size:clamp(27px,2.7vw,38px);line-height:1.35;font-weight:700}
.landing .fx-copy>p{font-size:var(--t-xl);line-height:1.9;color:#b3b8b1;max-width:29em}
.landing .fx-list{font-size:var(--t-md);line-height:1.7;color:#a8b1a3;gap:12px;margin-top:28px}
.landing .fx-list li::before{content:'—';color:#9daa88}
.landing .fx-vis{background:radial-gradient(ellipse,#73795422,transparent 72%)}
.landing .fx-clipvis{background:#1d2220;padding:20px}
.landing .fx-phone{max-width:230px}
.landing .fx-tabs button{font-size:var(--t-md);min-height:40px;padding:8px 14px}
.landing .md-sec{padding:24px 0 96px}
.landing .mode-details{border-top:1px solid #ffffff1c;border-bottom:1px solid #ffffff1c}
.landing .mode-details summary{display:flex;justify-content:space-between;gap:20px;align-items:center;padding:24px 0;cursor:pointer;list-style:none;color:#deded2;font-size:var(--t-xl)}
.landing .mode-details summary::-webkit-details-marker{display:none}
.landing .mode-more{display:flex;align-items:center;gap:20px;font-size:var(--t-md);color:#a8afa1}
.landing .mode-more i{font-style:normal;font-size:var(--t-3xl);font-weight:400}
.landing .mode-details[open] .mode-more i{transform:rotate(45deg)}
.landing .mode-details>p{font-size:var(--t-lg);color:#a8afa1;line-height:1.8;margin-bottom:24px}
.landing .md-grid{padding-bottom:28px}
.landing .md-card small{display:none}
.landing .md-card{background:transparent}
.landing .md-card b{font-size:var(--t-xl)}
.landing .how{padding:80px 0;background:#eeeae1;color:#30382d}
.landing .flow-intro{position:static;padding:0;max-width:none;display:block}
.landing .how .eyebrow{color:#687247}
.landing .how .sec-lead{color:#686f60}
.landing .flow-stages{grid-template-columns:repeat(3,minmax(0,1fr));gap:32px;margin-top:48px}
.landing .flow-step{padding:24px 0 0;border:0;border-top:1px solid #b9bead;border-radius:0;min-height:0;background:transparent;box-shadow:none!important}
.landing .flow-step .n{float:none;font:var(--t-base) var(--mono);color:#6e7953}
.landing .flow-step h3{font-size:var(--t-3xl);margin-top:24px;color:#30382d}
.landing .flow-step>p{font-size:var(--t-lg);line-height:1.85;color:#686f60;max-width:24em}
.landing .faq{padding:88px 0}
.landing .faq .sec-title{font-size:var(--t-5xl)}
.landing .closing{padding:96px 0;background:#1c231c}
.landing .closing-clip{display:none}
.landing .closing::before{background:radial-gradient(ellipse at 50% 100%,#737d3533,transparent 70%)}
.landing .closing .sec-title{font-size:clamp(38px,4.6vw,64px)}
.landing .closing .eyebrow{color:#b5bd9d}
.landing .closing .sec-lead{color:#b5bba9}
.landing .landing-footer{padding-top:32px;padding-bottom:32px}
.landing :is(button,a,summary):focus-visible{outline:2px solid var(--hot);outline-offset:5px}
@media(max-width:1000px){
 .landing .sv-stage{padding:24px;gap:20px;grid-template-columns:minmax(0,1fr) 28px minmax(0,220px)}
 .landing .fx-deck{padding:24px}
 .landing .hero{gap:24px}
 .landing .sv-sec .head,.landing .fx-sec .head{column-gap:32px}
}
@media(max-width:720px){
 .landing .hero{padding-top:56px;padding-bottom:56px;gap:48px;min-height:0}
 .landing .hero h1{font-size:clamp(34px,8.7vw,52px)}
 .landing .hero-kicker{font-size:var(--t-sm)}
 .landing .hero-sub{font-size:var(--t-lg)}
 .landing .hero-bg .mv{opacity:.12}
 .landing .hv{max-width:420px;margin-top:8px}
 .landing .sv-sec,.landing .fx-sec{padding-top:72px}
 .landing .sv-sec .head,.landing .fx-sec .head{display:block}
 .landing .sv-sec .head .sec-lead,.landing .fx-sec .head .sec-lead{margin-top:20px}
 .landing .sec-lead{font-size:var(--t-lg)}
 .landing .sv-chips{flex-wrap:wrap;overflow:visible;gap:8px}
 .landing .sv-chips button{padding:8px 12px;min-height:40px;font-size:var(--t-base)}
 .landing .sv-stage{padding:24px 20px;grid-template-columns:1fr;gap:20px}
 .landing .sv-out .sv-phone{width:220px}
 .landing .sv-source{gap:12px}
 .landing .sv-meta strong{font-size:var(--t-xl)}
 .landing .sv-why li{font-size:var(--t-sm)}
 .landing .fx-deck{padding:20px 16px 24px;border-radius:18px}
 .landing .fx-bar{margin-bottom:28px}
 .landing .fx-seg{gap:4px;width:100%;overflow:visible}
 .landing .fx-seg button{padding:6px 0 12px;font-size:var(--t-base);min-width:0;min-height:58px}
 .landing .fx{gap:28px}
 .landing .fx h3{font-size:var(--t-4xl)}
 .landing .fx-copy>p{font-size:var(--t-lg)}
 .landing .fx-vis{padding:14px}
 .landing .fx-list{font-size:var(--t-base);margin-top:20px}
 .landing .mode-details summary{align-items:flex-start;flex-direction:column;gap:12px;font-size:var(--t-xl)}
 .landing .mode-more{width:100%;justify-content:space-between}
 .landing .md-sec{padding-bottom:64px}
 .landing .how{padding:64px 0}
 .landing .flow-stages{grid-template-columns:1fr;gap:24px;margin-top:36px}
 .landing .flow-step{display:grid;grid-template-columns:28px 1fr;column-gap:12px;padding-top:24px}
 .landing .flow-step .n{grid-row:1/3;padding-top:4px}
 .landing .flow-step h3{margin:0;font-size:var(--t-3xl)}
 .landing .flow-step>p{grid-column:2;max-width:none;margin-top:10px}
 .landing .faq{padding:64px 0}
 .landing .closing{padding:72px 0}
}

/* ── 히어로를 가운데 한 줄기로 (2026-09-29 · OpusClip 랜딩의 자리) ──
   좌우 두 칸이면 눈이 글과 그림 사이를 오가느라 **입력 상자에 머물지 않는다.** 가운데 한 줄기로
   작은 표식 → 한 줄 제목 → 한 줄 설명 → 입력 → 작은 링크 순서로 세운다. **그림은 두지 않는다** — 원본→쇼츠는 바로 아래 무대가
   보여 주고, 여기 한 번 더 두면 입력과 다음 절 사이에 뜬금없는 그림이 된다 (사용자 판단).
   설명을 세 줄에서 한 줄로 줄였다 (hero.sub) — 입력 위의 글이 짧을수록 입력이 주인공이 된다. */
.landing .hero{grid-template-columns:minmax(0,1fr);justify-items:center;align-content:center;text-align:center;
  min-height:min(720px,calc(100vh - 120px));padding-top:var(--sp-48);padding-bottom:var(--sp-48);gap:var(--sp-48)}
.landing .hero-copy{width:100%;max-width:960px;display:flex;flex-direction:column;align-items:center}
.landing .hero-kicker{margin-bottom:var(--sp-20)}
.landing .hero h1{font-size:clamp(40px,4.4vw,64px);line-height:1.18;letter-spacing:-.02em}
.landing .hero h1 .h1-br{display:none}
.landing .hero-sub{max-width:none;text-wrap:balance;margin-top:var(--sp-20)!important;line-height:1.6;font-size:var(--t-3xl)}
.landing .hero-box{width:100%;max-width:800px;margin-top:var(--sp-40)}
@media(max-width:720px){
  .landing .hero{min-height:auto;padding-top:var(--sp-48);gap:var(--sp-40)}
  .landing .hero h1{font-size:clamp(34px,9vw,48px)}
  .landing .hero h1 .h1-br{display:inline}
  .landing .hero-sub{font-size:var(--t-xl)}
  .landing .hero-box{margin-top:var(--sp-32)}
}

/* ── 히어로 릴 — 입력 바 바로 아래 (2026-09-29 · landing-reel.js · reel.json) ──
   '긴 영상 하나를 넣으면 쇼츠 여러 편이 착착 나온다' 를 설명 없이 보인다. 상태는 .rl[data-step] 하나이고
   (paste → go → out → hold) 움직임은 전부 여기서 정한다 — JS 는 단계만 바꾼다. 구운 마크업은 'out' 이라
   JS 가 없거나 모션을 줄인 사람도 결과(원본 → 쇼츠 N편)를 본다. 빈 자리는 점선 칸으로 먼저 서 있다가
   쇼츠가 하나씩 들어와 채운다 — '몇 편이 나오는가' 가 칸 수로 먼저 읽힌다. */
.landing .hero-reel{width:100%;max-width:1160px;display:flex;flex-direction:column;align-items:center;gap:var(--sp-16)}
.landing .rl{display:grid;grid-template-columns:minmax(0,5fr) 72px minmax(0,7fr);align-items:center;width:100%;text-align:left;
  padding:var(--sp-24);border-radius:var(--r-xl);border:1px solid #ffffff14;
  background:linear-gradient(180deg,#ffffff0a,#ffffff03);box-shadow:0 40px 90px -50px #000c;backdrop-filter:blur(6px)}
.landing .rl-src{display:flex;flex-direction:column;gap:var(--sp-10);min-width:0}
.landing .rl-bar{display:flex;align-items:center;gap:var(--sp-8);padding:var(--sp-6) var(--sp-6) var(--sp-6) var(--sp-16);
  border-radius:var(--r-full);border:1px solid #ffffff22;background:#0008;min-height:40px}
.landing .rl-url{flex:1;min-width:0;overflow:hidden;white-space:nowrap;text-overflow:ellipsis;font:500 var(--t-md) var(--mono);color:var(--ink-1)}
.landing .rl-url::after{content:"";display:inline-block;width:1px;height:1.1em;margin-left:2px;vertical-align:-2px;background:var(--hot);opacity:0}
.landing .rl[data-step=paste] .rl-url::after{opacity:1;animation:rl-caret var(--dur-5) steps(1) infinite}
/* 파일로 넣기 — 카드(원본 표지)가 바 위로 날아와 떨어지고, 바에 파일 이름이 서고, 올리기 선이 찬다.
   링크 세트와 파일 세트를 번갈아 두면 '링크도 파일도 된다' 가 설명 없이 읽힌다 (reel.json source.input). */
.landing .rl-src{position:relative}
.landing .rl-file{display:none;flex:1;min-width:0;align-items:center;gap:var(--sp-8);position:relative;color:var(--ink-1);font-size:var(--t-md)}
.landing .rl-file svg{flex:none;width:16px;height:16px;color:var(--hot)}
.landing .rl-file b{min-width:0;overflow:hidden;white-space:nowrap;text-overflow:ellipsis;font:500 var(--t-md) var(--mono)}
.landing .rl-file em{flex:none;font:normal var(--t-sm) var(--mono);color:var(--ink-3)}
.landing .rl-prog{position:absolute;left:24px;right:0;bottom:-8px;height:2px;border-radius:var(--r-xs);background:#ffffff1a;overflow:hidden}
.landing .rl-prog::after{content:"";position:absolute;inset:0;background:var(--hot);transform-origin:left}
.landing .rl[data-input=file] .rl-url{display:none}
.landing .rl[data-input=file] .rl-file{display:flex}
.landing .rl[data-input=file][data-step=paste] .rl-file{animation:rl-land .35s .8s var(--ease) both} /* motion:ambient — 릴의 연출 박자 (landing-reel.js 의 단계와 맞물린다) */
.landing .rl[data-input=file][data-step=paste] .rl-prog::after{animation:rl-prog .9s .95s var(--ease-inout) both} /* motion:ambient — 릴의 연출 박자 (landing-reel.js 의 단계와 맞물린다) */
.landing .rl[data-input=file][data-step=paste] .rl-frame{opacity:.25}
.landing .rl-drop{position:absolute;z-index:3;left:var(--sp-24);top:-8px;width:150px;aspect-ratio:16/9;border-radius:var(--r);
  background:#000 var(--thumb) center/cover;border:1px solid #fff6;box-shadow:0 18px 40px #000c;opacity:0;pointer-events:none}
.landing .rl-drop i{position:absolute;right:-8px;bottom:-10px;width:18px;height:22px;border-radius:2px 6px 2px 2px;background:#fff;box-shadow:0 4px 10px #0008}
.landing .rl[data-input=file][data-step=paste] .rl-drop{animation:rl-drop .95s var(--ease-inout) both} /* motion:ambient — 릴의 연출 박자 (landing-reel.js 의 단계와 맞물린다) */
@keyframes rl-drop{0%{opacity:0;transform:translate(-140px,-170px) rotate(-12deg) scale(1.05)}
  20%{opacity:1}
  55%{opacity:1;transform:translate(30px,-46px) rotate(-4deg) scale(1)}
  85%{opacity:1;transform:translate(50px,-6px) rotate(0) scale(.5)}100%{opacity:0;transform:translate(50px,0) scale(.3)}}
/* 파일 여럿(data-input=files) — 카드 여러 장이 한 박자씩 늦게 날아와 같은 자리에 떨어지고(겹친 카드) 올리기 선은 마지막 카드 뒤에 찬다.
   16:9 자리에는 첫 원본과 '+n' 이 선다. 결과는 영상마다 쇼츠 하나 (landing-reel.js paint · docs/multi-source-ux-plan-2026-10-30.md W1). */
.landing .rl[data-input=files] .rl-url{display:none}
.landing .rl[data-input=files] .rl-file{display:flex}
.landing .rl[data-input=files][data-step=paste] .rl-frame{opacity:.25}
.landing .rl[data-input=files][data-step=paste] .rl-drop{animation:rl-drop .95s var(--ease-inout) both} /* motion:ambient — 릴의 연출 박자 (landing-reel.js 의 단계와 맞물린다) */
.landing .rl-drop-x{position:absolute;inset:-1px;border-radius:inherit;border:1px solid #fff6;background:#000 var(--thumb) center/cover;box-shadow:0 18px 40px #000c;opacity:0;transform:translate(calc(var(--k) * 12px),calc(var(--k) * -12px)) rotate(calc(var(--k) * 4deg))}
.landing .rl[data-input=files][data-step=paste] .rl-drop-x{animation:rl-drop-x .95s calc(var(--k) * .28s) var(--ease-inout) both} /* motion:ambient — 릴의 연출 박자 (landing-reel.js 의 단계와 맞물린다) */
.landing .rl[data-input=files][data-step=paste] .rl-file{animation:rl-land .35s calc(.8s + var(--rl-many,2) * .28s) var(--ease) both} /* motion:ambient — 릴의 연출 박자 (landing-reel.js 의 단계와 맞물린다) */
.landing .rl[data-input=files][data-step=paste] .rl-prog::after{animation:rl-prog .9s calc(.95s + var(--rl-many,2) * .28s) var(--ease-inout) both} /* motion:ambient — 릴의 연출 박자 (landing-reel.js 의 단계와 맞물린다) */
.landing .rl-more{flex:none;font:600 var(--t-xs) var(--mono);color:#111;background:var(--hot);border-radius:var(--r-sm);padding:1px 6px}
@keyframes rl-drop-x{0%{opacity:0;transform:translate(calc(var(--k) * 44px),calc(var(--k) * -70px)) rotate(calc(var(--k) * 8deg))}
  45%{opacity:1;transform:translate(calc(var(--k) * 12px),calc(var(--k) * -12px)) rotate(calc(var(--k) * 4deg))}
  100%{opacity:1;transform:none}}
@keyframes rl-land{from{opacity:0;transform:scale(.7)}to{opacity:1;transform:none}}
@keyframes rl-prog{from{transform:scaleX(0)}to{transform:scaleX(1)}}
.landing .rl-go{flex:none;padding:0 var(--sp-16);height:30px;display:inline-flex;align-items:center;border-radius:var(--r-full);
  background:var(--hot);color:#111;font-weight:700;font-size:var(--t-md);transition:transform var(--dur-2) var(--ease),box-shadow var(--dur-3) var(--ease)}
.landing .rl[data-step=go] .rl-go{transform:scale(.93);box-shadow:0 0 0 6px color-mix(in oklch,var(--hot) 30%,transparent)}
.landing .rl-frame{position:relative;margin:0;border-radius:var(--r-lg);overflow:hidden;background:#000;border:1px solid #ffffff1c}
.landing .rl-frame video{display:block;width:100%;aspect-ratio:16/9;object-fit:cover}
.landing .rl-frame figcaption{position:absolute;left:0;right:0;bottom:0;display:flex;align-items:center;gap:var(--sp-8);
  padding:var(--sp-20) var(--sp-12) var(--sp-8);background:linear-gradient(transparent,#000c);font-size:var(--t-sm);color:#fffd}
.landing .rl-frame figcaption b{font:600 var(--t-xs) var(--mono);color:var(--hot);border:1px solid color-mix(in oklch,var(--hot) 60%,transparent);border-radius:var(--r-sm);padding:1px 5px}
.landing .rl-title{flex:1;min-width:0;overflow:hidden;white-space:nowrap;text-overflow:ellipsis}
.landing .rl-dur{font-family:var(--mono);color:#fffa}
.landing .rl-scan{position:absolute;top:0;bottom:0;left:0;width:2px;background:#fff9f1;box-shadow:0 0 14px var(--hot);opacity:0;pointer-events:none}
.landing .rl[data-step=go] .rl-scan{opacity:1;animation:rl-scan 1.5s var(--ease) both} /* motion:ambient — 릴의 연출 박자 (landing-reel.js 의 단계와 맞물린다) */
.landing .rl-heat{display:flex;align-items:flex-end;gap:2px;height:26px}
.landing .rl-heat i{flex:1;height:calc(var(--h) * 1%);border-radius:var(--r-xs);background:#ffffff2a;transition:background var(--dur-3) var(--ease)}
.landing .rl:not([data-step=paste]) .rl-heat i.pk{background:var(--hot)}
.landing .rl-flow{position:relative;height:2px;margin:0 var(--sp-12);background:#ffffff1f;border-radius:var(--r-xs)}
.landing .rl-flow i{position:absolute;top:-3px;left:0;width:8px;height:8px;border-radius:50%;background:var(--hot);opacity:0}
.landing .rl[data-step=go] .rl-flow i{opacity:1;animation:rl-flow .75s linear infinite} /* motion:ambient — 릴의 연출 박자 (landing-reel.js 의 단계와 맞물린다) */
.landing .rl-flow::after{content:"";position:absolute;right:-2px;top:-4px;border:5px solid transparent;border-left-color:#ffffff40}
.landing .rl-outs{list-style:none;margin:0;padding:0;display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:var(--sp-12)}
.landing .rl-out{position:relative;aspect-ratio:9/16;border-radius:var(--r-xl);border:1px dashed #ffffff26}
.landing .rl-out .sv-phone{position:absolute;inset:-1px;transition:opacity var(--dur-3) var(--ease),transform var(--dur-4) var(--ease-back);
  transition-delay:calc(var(--i) * 260ms)} /* motion:ambient — 결과 카드가 차례로 선다 */
.landing .rl[data-step=paste] .rl-out .sv-phone,.landing .rl[data-step=go] .rl-out .sv-phone{opacity:0;transform:translateX(-28px) scale(.86);transition-delay:0ms}
.landing .rl-len,.landing .rl-score{position:absolute;z-index:1;font:600 var(--t-xs) var(--mono);padding:2px 6px;border-radius:var(--r-sm);
  transition:opacity var(--dur-3) var(--ease);transition-delay:calc(var(--i) * 260ms + 250ms)} /* motion:ambient */
.landing .rl-len{left:var(--sp-6);bottom:var(--sp-6);background:#000b;color:#fff}
.landing .rl-score{right:var(--sp-6);top:var(--sp-6);background:var(--hot);color:#111}
.landing .rl[data-step=paste] :is(.rl-len,.rl-score),.landing .rl[data-step=go] :is(.rl-len,.rl-score){opacity:0;transition-delay:0ms}
.landing .rl.is-leaving :is(.rl-frame,.rl-outs,.rl-bar){opacity:0;transition:opacity var(--dur-4) var(--ease)}
.landing .rl :is(.rl-frame,.rl-outs,.rl-bar){transition:opacity var(--dur-4) var(--ease)}
.landing .rl-steps{list-style:none;margin:0;padding:0;display:flex;flex-wrap:wrap;justify-content:center;gap:var(--sp-8) var(--sp-24);font-size:var(--t-md);color:var(--ink-3)}
.landing .rl-steps li{display:flex;align-items:center;gap:var(--sp-8);transition:color var(--dur-3) var(--ease)}
.landing .rl-steps b{display:inline-grid;place-items:center;width:20px;height:20px;border-radius:50%;border:1px solid currentColor;font:600 var(--t-xs) var(--mono)}
.landing .rl-steps li.is-on{color:var(--ink)}
.landing .rl-steps li.is-on b{background:var(--hot);border-color:var(--hot);color:#111}
/* 한 쇼츠로 잇기(data-join) — '영상마다 쇼츠'(files) 의 반대 그림 (2026-11-02 · landing-reel.js paintJoin).
   paste: 원본 셋이 16:9 자리에 부채꼴로 나란히 선다 · go: 셋이 화살표 쪽으로 모여 한 점으로 빨려 든다 ·
   out: 결과는 큰 폰 하나, 그 아래 원본 셋의 표지로 이어진 막대가 왼쪽부터 찬다. */
.landing .rl-trio{position:absolute;inset:0;z-index:2;display:none;pointer-events:none;background:#000c}
.landing .rl-trio i{position:absolute;top:16%;left:calc(50% - 22% + var(--d) * 27%);width:44%;aspect-ratio:16/9;border-radius:var(--r);
  border:1px solid #fff8;background:#000 var(--thumb) center/cover;box-shadow:0 14px 30px #000c;
  transform:rotate(calc(var(--d) * 7deg)) translateY(calc(var(--d) * var(--d) * 6%));z-index:calc(3 - var(--k))}
.landing .rl[data-join="1"] .rl-trio{display:block}
.landing .rl[data-join="1"][data-step=paste] .rl-trio i{animation:rl-fan .5s calc(1.9s + var(--k) * .12s) var(--ease-back) both} /* motion:ambient — 릴의 연출 박자 (landing-reel.js 의 단계와 맞물린다) */
.landing .rl[data-join="1"][data-step=go] .rl-trio i{animation:rl-merge .9s calc(.55s + var(--k) * .12s) var(--ease-inout) both} /* motion:ambient — 셋이 화살표 쪽으로 모인다 */
.landing .rl[data-join="1"]:is([data-step=out],[data-step=hold]) .rl-trio i{opacity:0}
.landing .rl[data-join="1"][data-step=go] .rl-scan{opacity:0}
.landing .rl[data-join="1"] .rl-flow i{background:linear-gradient(90deg,var(--hot),var(--cool,#7cd4ff))}
@keyframes rl-fan{from{opacity:0;transform:translate(calc(var(--d) * -60%),-30%) scale(.6)}to{opacity:1}}
@keyframes rl-merge{0%{opacity:1}
  45%{opacity:1;transform:translate(calc(var(--d) * -62%),0) scale(.85) rotate(0)}
  100%{opacity:0;transform:translate(calc(110% - var(--d) * 62%),10%) scale(.18) rotate(0)}}
.landing .rl[data-join="1"] .rl-outs{grid-template-columns:minmax(0,1fr);justify-items:center}
.landing .rl[data-join="1"] .rl-out{width:min(46%,230px);margin-bottom:28px}
.landing .rl[data-join="1"] .rl-out .sv-phone{transition-delay:0ms}
.landing .rl[data-join="1"]:is([data-step=paste],[data-step=go]) .rl-out .sv-phone{transform:scale(.55);opacity:0}
.landing .rl-segs{position:absolute;left:0;right:0;bottom:-22px;height:12px;display:flex;gap:3px}
.landing .rl-segs i{position:relative;flex:1 1 0;min-width:0;border-radius:var(--r-xs);background:#ffffff1a;overflow:hidden}
.landing .rl-segs i::after{content:"";position:absolute;inset:0;background:#000 var(--thumb) center/cover;box-shadow:inset 0 0 0 1px #fff6;
  transform-origin:left;transform:scaleX(0);transition:transform var(--dur-4) var(--ease-inout);transition-delay:calc(.35s + var(--k) * var(--dur-4))} /* motion:ambient — 셋이 이어진 순서대로 찬다 */
.landing .rl[data-join="1"]:is([data-step=out],[data-step=hold]) .rl-segs i::after{transform:none}
@keyframes rl-caret{50%{opacity:0}}
@keyframes rl-scan{from{left:0}to{left:calc(100% - 2px)}}
@keyframes rl-flow{from{left:0}to{left:calc(100% - 8px)}}
@media(max-width:900px){
  .landing .rl{grid-template-columns:minmax(0,1fr);gap:var(--sp-16);padding:var(--sp-16)}
  .landing .rl-flow{width:2px;height:28px;margin:0 auto}
  .landing .rl-flow::after{right:auto;top:auto;left:-4px;bottom:-4px;border-left-color:transparent;border-top-color:#ffffff40}
  .landing .rl[data-step=go] .rl-flow i{left:-3px;animation-name:rl-flow-y}
}
@keyframes rl-flow-y{from{top:0}to{top:calc(100% - 8px)}}
@media(max-width:560px){
  .landing .rl-outs{grid-template-columns:repeat(3,minmax(0,1fr));gap:var(--sp-8)}
  .landing .rl-out:nth-child(n+4){display:none}
  .landing .rl[data-join="1"] .rl-out{width:min(52%,200px)}
  /* 세 단계가 2+1 로 접히지 않게 (P20) — 한 줄에 세 칸, 번호 위 · 글 아래 */
  .landing .rl-steps{flex-wrap:nowrap;align-items:flex-start;gap:var(--sp-8);font-size:var(--t-sm)}
  .landing .rl-steps li{flex:1 1 0;min-width:0;flex-direction:column;gap:var(--sp-4);text-align:center;line-height:1.35}
}
/* 모션 줄이기는 style.css 의 전역 규칙이 맡는다 (R6-09 — 릴 자체는 landing-reel.js 가 그때 돌리지 않는다) */

/* SV2 — 제목은 제품의 글꼴로, 설명은 읽히게 (docs/site-voice-plan.md §3.1·§3.3).
   제목은 900 하나다 — 기본 자막(bold-stroke)과 같은 굵기.
   설명 문장은 랜딩에서만 키우고 밝힌다 — 앱 화면의 --t-* 계단은 밀도가 일이라 그대로다. */
.landing h1,.landing h2{font-weight:900}
.landing .sec-title{font-size:clamp(36px,4.6vw,64px);line-height:1.12;letter-spacing:-.045em}
.landing .sec-lead{font-size:var(--t-2xl);line-height:1.7;color:var(--ink-1)}
.landing .eyebrow{font-size:var(--t-lg);font-weight:700;letter-spacing:.01em}
@media(max-width:720px){.landing .sec-lead{font-size:var(--t-xl)}}
