/* ==========================================================================
   75 · 입꼬리필러 (slug: lip-corner-filler) 전용 CSS
   ── 전용 컴포넌트 2종 ───────────────────────────────────────────────────
   .fs-lip-type    W·D·V 타입 3열 카드. 깨끗한 입술 도판 위에 원본 주입 포인트를
                   HTML 마커로 다시 찍는다(시그니처). 좌표는 원본 실측 퍼센트.
   .fs-lip-mosaic  원본 립 클로즈업 모자이크(5열 × 4행, 세로 2칸 병합 6장)를
                   CSS 그리드로 재현한다.
   ── 색은 전부 --fs-* 토큰. 새 hex 없음. 모션은 reduced-motion 에서 전부 해제.
   ========================================================================== */

/* --- 0. 셸 · A01 · 1mm 계열 «투명 헤더 + 모델 히어로» 첫 화면 ---------------
   헤더를 흰 막대로 세우지 않고 히어로 사진 위에 얹는다. 이 페이지의 히어로 상단은
   전 폭이 더스티 로즈(#E0C6C2)라 흰 글자가 아니라 «잉크 글자» 를 쓴다.
   에셋 실측: 모델 최상단이 사진 높이의 19.1%(1072 중 205px) 라 헤더 띠가 사진에서
   차지하는 최대 구간(1280 폭에서 ≈11.5%)에 안 걸린다. */
.fs-p-75 {
  --fs-header-overlay-bg: transparent;
}
/* 오버레이 헤더 뒤에 실제로 깔리는 색. 사진이 그 위를 덮으므로 화면은 그대로지만
   사진 로딩 전 번쩍임이 없고, qa.py 가 배경을 흰 body 로 오판하지 않는다. */
.fs-p-75 .fs-page--overlay { background: #E0C6C2; }
.fs-p-75 .fs-header--overlay { color: var(--fs-ink); }
.fs-p-75 .fs-header--overlay::before { content: none; }
.fs-p-75 .fs-gnb__link { font-weight: 400; }
/* fs.css 의 오버레이 규칙은 «흰 글자» 전제라 호버가 흰색이다 — 밝은 헤더에선 반대로 */
.fs-p-75 .fs-header--overlay .fs-gnb__link:hover,
.fs-p-75 .fs-header--overlay .fs-gnb__link:focus-visible { color: var(--fs-teal-dk); opacity: 1; }
/* --fs-muted-2(#7D7D7D)는 로즈 위에서 3.2:1 이라 AA 미달이다 */
.fs-p-75 .fs-header--overlay .fs-util__link { color: var(--fs-ink-soft); }
.fs-p-75 .fs-header--overlay .fs-util__link:hover { color: var(--fs-teal-dk); opacity: 1; }
.fs-p-75 .fs-util__sep { opacity: .35; }
/* fs.css:3052 의 «호버 시 흰 글자» 도 다크 히어로 전제다 — 밝은 헤더에선 사라진다 */
.fs-p-75 .fs-header--overlay .fs-allmenu:hover { color: var(--fs-teal-dk); opacity: 1; }

/* fs.css 의 .fs-hero__bg img 규칙은 <picture> 를 건너뛴다 */
.fs-p-75 .fs-lip-hero .fs-hero__bg picture { display: block; width: 100%; height: 100%; }
/* 세로 크롭 위치. 0% 면 1920 에서 머리끝이 y=205 라 형제 페이지 143(≈178)보다 낮게 앉는다. */
.fs-p-75 .fs-lip-hero .fs-hero__bg img { object-position: 50% 9%; }
.fs-p-75 .fs-lip-hero .fs-hero__copy {
  max-width: min(100%, 50vw);
  gap: clamp(8px, 5.5px + 0.641vw, 18px);
  justify-items: start; text-align: start;
}
.fs-p-75 .fs-lip-hero .fs-hero__kicker {
  color: var(--fs-ink-soft);
  font-size: clamp(15px, 13.5px + 0.42vw, 21px); letter-spacing: 0.02em; font-weight: 500;
}
.fs-p-75 .fs-lip-hero .fs-hero__title {
  color: var(--fs-ink);
  font-size: clamp(30px, 21.4px + 2.39vw, 58px); font-weight: 700; line-height: 1.22;
}

/* <1024px — 히어로 박스가 가로로 길어져 오버레이로는 카피와 모델이 겹친다.
   카피를 블러시 밴드로 위에 쌓고 세로 크롭 사진을 아래에 붙인다. 사진 윗단은 페이드로
   녹여 이음매를 없앤다. 밴드색은 세로 에셋 상단 실측값(#E4C6C4). */
@media (max-width: 1023px) {
  .fs-p-75 .fs-lip-hero { min-height: 0; background: #E4C6C4; }
  .fs-p-75 .fs-lip-hero .fs-hero__bg {
    position: static; inset: auto; z-index: 0; grid-row: 2;
  }
  .fs-p-75 .fs-lip-hero .fs-hero__bg img {
    height: auto; aspect-ratio: 3 / 4; object-position: 50% 0%;
    -webkit-mask-image: linear-gradient(180deg, transparent 0, #000 60px);   /* 2026-10-22 모바일 §1-8 72 → 60 */
            mask-image: linear-gradient(180deg, transparent 0, #000 60px);
  }
  .fs-p-75 .fs-lip-hero .fs-hero__inner {
    grid-row: 1; background: #E4C6C4;
    padding-block: calc(var(--fs-header-h) + var(--fs-sp-5)) var(--fs-sp-7);   /* 2026-10-22 모바일 §1-8 40/56 → 20/30 */
  }
  .fs-p-75 .fs-lip-hero .fs-hero__copy { max-width: 100%; }
}

/* --- 1. A04 인트로 — 사진을 걷어내고 중앙 정렬 대형 타이포로 -------------
   승인자 지시 「이미지가 마음에 안 들어. 그냥 없애」 + 「이 내용을 더 임펙트 있게」.
   좌 라벨 / 우 본문 2열이던 것을 한 덩어리로 세우고 크기·간격을 키운다. */
.fs-p-75 .fs-lip-intro__body {
  display: grid; justify-items: center; text-align: center;
  gap: clamp(14px, 11.5px + 0.69vw, 25px);
  max-width: 46rem; margin-inline: auto;
  margin-block-start: var(--fs-gap-title);
}
.fs-p-75 .fs-lip-intro__label {
  color: var(--fs-teal-dk); font-weight: 700;
  font-size: clamp(14px, 12.8px + 0.32vw, 18px);
  letter-spacing: 0.14em;
}
.fs-p-75 .fs-lip-intro__rule { display: block; width: 56px; height: 3px; background: var(--fs-teal); }
.fs-p-75 .fs-lip-intro__lead {
  color: var(--fs-ink); font-weight: 700; line-height: 1.45;
  font-size: clamp(20px, 15.5px + 1.19vw, 34px);
  letter-spacing: var(--fs-ls-tight);
}
.fs-p-75 .fs-lip-intro__note {
  color: var(--fs-muted); line-height: 1.7;
  font-size: clamp(14px, 13.1px + 0.256vw, 18px);
}

/* --- 2. .fs-lip-type — 타입 3종 3열 카드 격자 ----------------------------
   원래는 1장씩 넘기는 캐러셀이었는데 ① 다음 장이 잘려 흘러 들어오고
   ② 같은 입술 사진이 도판·확대·탭으로 세 번 반복돼 승인자가 반려했다.
   세 타입을 한 화면에 나란히 놓아 비교가 되게 바꾼다. 주입 포인트 마커는 그대로. */
.fs-p-75 .fs-lip-type {
  display: grid; gap: var(--fs-gap-card);
  grid-template-columns: minmax(0, 1fr);
  list-style: none;
  margin-block-start: var(--fs-gap-title);
}
@media (min-width: 768px) {
  .fs-p-75 .fs-lip-type { grid-template-columns: repeat(3, minmax(0, 1fr)); }
}
/* 설명 줄 수가 카드마다 달라 확대 도해가 어긋난다 — 설명 행이 남는 높이를 먹고
   확대 도해는 카드 바닥에 고정되도록 행을 명시한다(번호·이름·도판·설명·확대). */
.fs-p-75 .fs-lip-type__card {
  display: grid;
  grid-template-rows: auto auto auto minmax(0, 1fr) auto;
  gap: clamp(10px, 8.1px + 0.513vw, 18px);
  background: var(--fs-white);
  padding: clamp(20px, 16.6px + 0.96vw, 36px);
}
.fs-p-75 .fs-lip-type__num { color: var(--fs-teal-dk); line-height: 1; }
.fs-p-75 .fs-lip-type__name { margin-block-start: calc(-1 * var(--fs-sp-2)); }
.fs-p-75 .fs-lip-type__plate,
.fs-p-75 .fs-lip-type__zoom { display: grid; gap: 0; margin: 0; }
.fs-p-75 .fs-lip-type__plate { margin-block-start: var(--fs-sp-2); }
.fs-p-75 .fs-lip-type__zoom  { margin-block-start: var(--fs-sp-2); }
.fs-p-75 .fs-lip-type__stage { position: relative; display: block; overflow: hidden; }
.fs-p-75 .fs-lip-type__stage img { display: block; width: 100%; height: auto; }
/* 원본 주입 포인트를 HTML 마커로 다시 찍는다(시그니처). 좌표는 원본 실측 퍼센트 */
.fs-p-75 .fs-lip-type__mark {
  position: absolute;
  inset-inline-start: var(--fs-lip-x); inset-block-start: var(--fs-lip-y);
  width: var(--fs-lip-mark, 9.2%); aspect-ratio: 1;
  transform: translate(-50%, -50%);
  border-radius: 50%;
  background: rgba(255, 255, 255, .72);
  display: grid; place-items: center;
}
.fs-p-75 .fs-lip-type__mark::after {
  content: ""; width: 42%; aspect-ratio: 1; border-radius: 50%;
  background: var(--fs-teal-text);
}
.fs-p-75 .fs-lip-type__zoom .fs-lip-type__mark { --fs-lip-mark: 7.2%; }
.fs-p-75 .fs-lip-type__desc { color: var(--fs-ink-soft); }
.fs-p-75 .fs-lip-type .fs-labelbar { min-height: clamp(38px, 34.5px + 0.97vw, 52px); line-height: 1.35; }

/* --- 3. .fs-lip-mosaic — 원본 5×4 립 모자이크 재현 ------------------------ */
/* 좁은 폭에서는 정사각 타일 그리드, 1024px 이상에서만 원본 병합 배치를 살린다 */
.fs-p-75 .fs-lip-mosaic {
  display: grid; gap: 0;
  grid-template-columns: repeat(2, minmax(0, 1fr));
  align-items: start;
  margin-block-start: var(--fs-gap-title);
}
.fs-p-75 .fs-lip-mosaic__cell { display: block; overflow: hidden; aspect-ratio: 1; }
.fs-p-75 .fs-lip-mosaic__cell img {
  display: block; width: 100%; height: 100%; object-fit: cover;
}
@media (min-width: 600px) {
  .fs-p-75 .fs-lip-mosaic { grid-template-columns: repeat(3, minmax(0, 1fr)); }
}
@media (min-width: 1024px) {
  .fs-p-75 .fs-lip-mosaic {
    grid-template-columns: repeat(5, minmax(0, 1fr));
    grid-template-rows: repeat(4, minmax(0, 1fr));
    aspect-ratio: 1920 / 1016;
    align-items: stretch;
  }
  /* 원본 배치 좌표 그대로 (열, 행) */
  .fs-p-75 .fs-lip-mosaic__cell { aspect-ratio: auto; }
  .fs-p-75 .fs-lip-mosaic__cell--c1r1 { grid-column: 1; grid-row: 1; }
  .fs-p-75 .fs-lip-mosaic__cell--c2r1 { grid-column: 2; grid-row: 1 / span 2; }
  .fs-p-75 .fs-lip-mosaic__cell--c3r1 { grid-column: 3; grid-row: 1; }
  .fs-p-75 .fs-lip-mosaic__cell--c4r1 { grid-column: 4; grid-row: 1 / span 2; }
  .fs-p-75 .fs-lip-mosaic__cell--c5r1 { grid-column: 5; grid-row: 1; }
  .fs-p-75 .fs-lip-mosaic__cell--c1r2 { grid-column: 1; grid-row: 2 / span 2; }
  .fs-p-75 .fs-lip-mosaic__cell--c3r2 { grid-column: 3; grid-row: 2 / span 2; }
  .fs-p-75 .fs-lip-mosaic__cell--c5r2 { grid-column: 5; grid-row: 2; }
  .fs-p-75 .fs-lip-mosaic__cell--c2r3 { grid-column: 2; grid-row: 3; }
  .fs-p-75 .fs-lip-mosaic__cell--c4r3 { grid-column: 4; grid-row: 3 / span 2; }
  .fs-p-75 .fs-lip-mosaic__cell--c5r3 { grid-column: 5; grid-row: 3 / span 2; }
  .fs-p-75 .fs-lip-mosaic__cell--c1r4 { grid-column: 1; grid-row: 4; }
  .fs-p-75 .fs-lip-mosaic__cell--c2r4 { grid-column: 2; grid-row: 4; }
  .fs-p-75 .fs-lip-mosaic__cell--c3r4 { grid-column: 3; grid-row: 4; }
}
.fs-p-75 .fs-lip-mosaic__note { margin-block-start: var(--fs-sp-5); }

/* --- 4. 리터치 룰 카드 — A07 확장(아이콘 + 라벨바 열 추가) ---------------- */
.fs-p-75 .fs-lip-retouch { margin-block-start: var(--fs-gap-title); }
.fs-p-75 .fs-lip-retouch__card { background: var(--fs-white); align-items: center; }
.fs-p-75 .fs-lip-retouch__fig {
  display: grid; gap: 0; grid-template-columns: minmax(0, 1fr);
  width: 100%; max-width: 176px;
}
.fs-p-75 .fs-lip-retouch__fig .fs-labelbar {
  min-height: 40px; line-height: 1.3; padding-inline: var(--fs-sp-2);
}
.fs-p-75 .fs-lip-retouch__fig img {
  display: block; width: 100%; height: auto;
  aspect-ratio: 1; object-fit: contain;
  padding: var(--fs-sp-3) 0;
  background: var(--fs-cream-2);
}
.fs-p-75 .fs-lip-retouch__desc { color: var(--fs-ink-soft); }
@media (min-width: 1024px) {
  .fs-p-75 .fs-lip-retouch__card {
    grid-template-columns: 34px minmax(0, 176px) minmax(0, 1fr);
    column-gap: var(--fs-gap-col);
  }
  /* 숫자 글리프 폭이 01·02·03 마다 달라 카드끼리 열이 어긋난다 — 폭을 고정한다 */
  .fs-p-75 .fs-lip-retouch__card .fs-card__num { text-align: center; }
}

/* --- 5. reduced-motion — 새로 넣은 전환은 전부 끈다 ----------------------- */
@media (prefers-reduced-motion: reduce) {
  .fs-p-75 .fs-lip-type__tabs .fs-lip-type__tab { transition: none !important; }
}

/* ==========================================================================
   6. 진단·수정 패스 — 2026-08-28
   렌더 실측으로 잡은 결함 + 48 에서 검증된 마이크로 인터랙션.
   ★ 이 블록은 index.html 의 다음 배선을 전제로 한다. 지우지 마라:
     · #types 의 .fs-sec-head 안쪽 <div data-fs-reveal>
     · #gallery / #retouch 의 .fs-nose-head[data-fs-reveal]
     · .fs-lip-type 의 data-fs-carousel-gap="40"
   ========================================================================== */

/* --- 6-1 [LOCK 2] A04 인트로 라벨바가 사진에서 13px 떠 있었다 --------------
   fs.css:754 의 .fs-figure { gap: var(--fs-sp-4) } 가 그대로 살아 있어
   1920 실측 「사진 bottom → 바 top = 13.0px」였다. 라벨바는 간격 0 으로 붙는다.
   vibecheck 의 L2 는 라벨바의 margin-top·border-top 만 재서 이걸 못 잡는다. */
.fs-p-75 .fs-lip-intro__fig { gap: 0; }

/* --- 6-2 [접근성] 갤러리 주석 대비 4.12:1 (AA 4.5 미달) -------------------
   --fs-muted-2(#7D7D7D)는 fs.css 의 AA 보정 밴드에서 빠져 있다.
   보정을 받는 --fs-muted(#6E6E6E, 흰 위 5.10:1)로 올린다. 새 색은 만들지 않는다. */
.fs-p-75 .fs-lip-mosaic__note { color: var(--fs-muted); }

/* --- 6-3 제목 뒤 70px 틸 선 (delay .5s) — 48 검증분 -----------------------
   ★ 「.is-in 이면 보이기」로 짜면 첫 화면 제목의 선이 영원히 안 그어진다
     (fs.js 는 첫 화면 대상을 리빌 대상으로 잡지 않는다).
     → 기본을 「그어진 상태」로 두고 .fs-reveal:not(.is-in) 에만 은닉한다.
   ★ 대상을 ID 로 열거하면 (1,1,1) 이 은닉 규칙을 이겨 선이 굳는다. 클래스로만 잡는다.
   슬라이드 안의 h3(.fs-lip-type__name)은 대상에서 뺀다 — 캐러셀 한 장에 선 3개는 과하다. */
.fs-p-75 .fs-nose-head .fs-h2,
.fs-p-75 .fs-sec-head__title,
.fs-p-75 .fs-h2.fs-center { position: relative; }

.fs-p-75 .fs-nose-head .fs-h2::after,
.fs-p-75 .fs-sec-head__title::after,
.fs-p-75 .fs-h2.fs-center::after {
  content: "";
  display: block;
  width: 70px;
  height: 1px;
  margin-block-start: var(--fs-sp-4);
  background: var(--fs-teal);
  transform: scaleX(1);
  transform-origin: left center;
  transition: transform var(--fs-dur-slow) var(--fs-ease-out) .5s;
}
/* 가운데정렬 대제목(A04)은 선도 가운데에서 펼친다 */
.fs-p-75 .fs-h2.fs-center::after { margin-inline: auto; transform-origin: center; }

:root.fs-js .fs-p-75 .fs-reveal:not(.is-in) .fs-h2::after,
:root.fs-js .fs-p-75 .fs-reveal:not(.is-in) .fs-sec-head__title::after,
:root.fs-js .fs-p-75 .fs-h2.fs-reveal:not(.is-in)::after { transform: scaleX(0); }

/* --- 6-4 호버 — 프레임 고정, 사진만 scale(1.045) ---------------------------
   .fs-lip-mosaic__cell 은 이미 overflow:hidden 이고 라벨바가 없다.
   ★ .fs-lip-type__stage 에는 걸지 않는다 — 주입 포인트 마커가 %로 얹혀 있어
     사진만 확대하면 마커가 도해에서 어긋난다(의학 도해 왜곡).
   그림자는 쓰지 않는다(2차 규칙). */
.fs-p-75 .fs-lip-mosaic__cell img {
  transition: transform var(--fs-dur-slow) var(--fs-ease-out);
}
@media (hover: hover) and (pointer: fine) {
  .fs-p-75 .fs-lip-mosaic__cell:hover img { transform: scale(1.045); }
}

/* --- 6-5 [LOCK 6] 캐러셀을 콘텐츠 폭 밖으로 흘린다 -------------------------
   57 의 치료법 캐러셀(.fs-nose-tx__viewport, fs.css:1543)과 같은 자리의 부품이다.
   잘림은 뷰포트가 아니라 html/body 의 overflow-x:clip 에 맡긴다.
   ★ 뷰포트 「폭」은 절대 건드리지 않는다 — fs.js:555 가 viewport.clientWidth 로
     슬라이드 폭을 잡아서 폭을 줄이면 시안 수치가 통째로 어긋난다.
   ★ 노출 폭은 (W−1440)/2 라 1440 에서는 34px 짜리 「어긋난 여백」이 된다 → 1700 게이트.
   ★ slide 모드는 왼쪽으로 이전 장의 「본문 글자」가 나온다 → clip-path 로 왼쪽만 잘라낸다
     (fs.css:2317 FS TV 가 쓰는 수법). */
@media (min-width: 1700px) {
  .fs-p-75 .fs-lip-type__viewport {
    overflow: visible;
    clip-path: inset(-100vh -100vw -100vh 0);
  }
  /* cover 모드와 달리 slide 모드는 비활성 장에 아무 변형이 없다.
     흘러나온 조각이 현재 장의 「다음 단계」로 이어져 읽히지 않게 감광만 준다.
     3D 회전은 빌리지 않는다 — 술식 도해가 왜곡돼 보인다.
     게이트를 .fs-carousel__slide(fs.js:440 이 붙인다)로 잡아 JS 전 초기 페인트에서
     첫 장이 흐리게 깜빡이는 것을 막는다. */
  .fs-p-75 .fs-lip-type__slide.fs-carousel__slide:not(.is-active) {
    opacity: var(--fs-cover-fade, .55);
  }
  .fs-p-75 .fs-lip-type__slide.fs-carousel__slide {
    transition: opacity var(--fs-dur-slow) var(--fs-ease-out);
  }
}

/* --- 6-6 reduced-motion — 위에서 새로 넣은 모션을 최종 정지 상태로 고정 -----
   파일 앞쪽 「5. reduced-motion」 블록보다 뒤에 와야 캐스케이드에서 이긴다. */
@media (prefers-reduced-motion: reduce) {
  .fs-p-75 .fs-nose-head .fs-h2::after,
  .fs-p-75 .fs-sec-head__title::after,
  .fs-p-75 .fs-h2.fs-center::after {
    transform: scaleX(1) !important;
    transition: none !important;
  }
  .fs-p-75 .fs-lip-mosaic__cell img { transition: none; transform: none !important; }
  .fs-p-75 .fs-lip-type__slide.fs-carousel__slide { transition: none; }
}

/* ==========================================================================
   ▼▼▼ 2026-10-22 · 모바일 최적화(승인자 「홈페이지 전체적인 모바일 최적화 진행」) — 줄바꿈은 전 폭, 배치는 599px/1023px 이하만.
   PC 요소 위치 무변화(1024·1440·1920 실측). 백업 _src/build/backup-75-1022-mo · 실측 _design/momeasure.py 360/390/540/768/1024/1440/1920.
   · 히어로 §1-8 20/30/60 — <1024 스택 블록 제자리 수정(페이드 72 → 60).
   · 리터치 카드 설명 3장: `<br>` 이 문장 경계와 PC 줄 경계(문장 가운데)에 섞여 있었다 → 문장 블록(.fs-lead__s, §1-4) + 문장 가운데는 `<br class="fs-pc-only">`(§1-7).
     ≥1024 는 옛 `<br>` 과 같은 자리에서 끊긴다. 360 에서 7줄 중 3줄이 「진행하면서」「비대칭이 있을 수 있습니다.」「개선해줍니다.」 짧은 줄이었다.
   · balance(전 폭): 타입 설명 · 소개 리드 · 리터치 제목 · ※ 주의문 · 주소 — 360 「시술」「중요함」「발생할 수 있습니다.」, 1440 소개 리드 「시술입니다.」.
   ========================================================================== */
.fs-p-75 .fs-lead__s { display: block; text-wrap: balance; }
.fs-p-75 .fs-lip-type__desc,
.fs-p-75 .fs-lip-intro__lead,
.fs-p-75 #retouch-title,
.fs-p-75 .fs-xs,
.fs-p-75 .fs-address { text-wrap: balance; }
:root:not(:lang(ko)) .fs-p-75 br.fs-pc-only { display: none; }
