/* ============================================================================
   iyu-editorial.css — 산업 다큐멘터리 디자인 레이어
   ----------------------------------------------------------------------------
   목적 : 홈페이지에서 "AI 생성 템플릿" 신호를 제거하고, 실사 이미지와
          1px 괘선 기반의 편집(editorial) 체계로 재구성한다.

   원칙 : 1) 장식을 빼고 실물을 넣는다   — 그라디언트/광원/글래스 제거, 사진 도입
          2) 색은 하나만 쓴다            — cyan·indigo·teal 혼재 → 잉크 + 러스트 1색
          3) 리듬을 만든다              — 균일 py-24 → 3단계 수직 리듬
          4) 선으로 나눈다              — 그림자 대신 hairline
          5) 한글 조판을 지킨다          — keep-all, balance, 하드 <br> 무력화

   적용 : 페이지 옵트인. <body> 에 `iyu-editorial` 클래스를 붙인 페이지에만 적용된다.
          v3.css 는 손대지 않았으므로 <link> 한 줄 + body 클래스만 지우면 완전히 롤백된다.
   순서 : v3.css → geo-aeo.css → (이 파일)  ※ 반드시 마지막에 로드

   DOM 차이 : 홈은  main.flex-grow > main    > section
              서브는 main.flex-grow > section
          그래서 공통 규칙은 `main.flex-grow > :is(main, section, div)` 로 쓴다.
          :is() 는 인자 중 최고 특정도(여기선 요소 1개)를 취하므로
          기존 `> main` 과 특정도가 완전히 동일하다. v3.css 와의
          특정도 싸움에서 이긴 규칙들이 조용히 되돌아가지 않는다.
   ============================================================================ */

/* ── 0. 타이포 자산 ───────────────────────────────────────────────────────
   Pretendard: 국내 실무에서 표준처럼 쓰이는 한글 산세리프.
   Inter 기본값이 주는 "AI 기본 폰트" 인상을 걷어내는 가장 값싼 한 수.

   폰트는 index.html <head> 의 <link> 로 불러온다.
   여기서 @import 를 쓰면 (HTML → 이 CSS → 폰트 CSS → 폰트 파일) 로
   요청이 직렬화되어 첫 렌더가 늦어진다. */

/* ── 1. 토큰 ─────────────────────────────────────────────────────────────
   기존 팔레트는 파란기가 도는 #f7f8ff 지면에 cyan/indigo/teal 3색이 섞여 있었다.
   지면을 따뜻한 오프화이트로 바꾸고 액센트를 러스트 1색으로 통일한다.
   파란색을 지우는 것만으로 "테크 템플릿" 인상의 절반이 사라진다. */
body.iyu-editorial {
  --e-ink:        #14161a;   /* 제목·본문 */
  --e-ink-2:      #4a515c;   /* 부연 */
  /* 대비 검증(WCAG 상대휘도) 후 조정한 값이다. 원래는
     ink-3 #7b8390 = 3.82:1, ink-4 #a4aab4 = 2.34:1 로
     12px 캡션에 쓰기엔 둘 다 AA(4.5:1) 미달이었다. */
  --e-ink-3:      #646c78;   /* 캡션·메타 — 흰 지면 5.31:1, 교차 지면 4.82:1 */
  --e-ink-4:      #7b8390;   /* 아이콘·구분선 등 비텍스트 전용 (3.82:1) */

  --e-paper:      #ffffff;
  --e-paper-2:    #f5f4f1;   /* 따뜻한 오프화이트 (구 #f7f8ff 대체) */
  --e-paper-3:    #edebe6;

  --e-line:       #e3e2dd;   /* 기본 괘선 */
  --e-line-2:     #d1cfc8;   /* 강조 괘선 */
  --e-line-3:     #14161a;   /* 헤어라인 강조 */

  --e-accent:     #a8480b;   /* 러스트 — 산업 신호색 계열, 저채도 */
  --e-accent-2:   #8a3a06;
  --e-accent-wash:#f7efe7;

  --e-radius:     3px;       /* 22px → 3px. 라운드가 클수록 템플릿처럼 보인다 */
  --e-radius-lg:  4px;

  /* 수직 리듬 3단계 — 전부 py-24(96px) 였던 것을 섹션 무게에 따라 차등 */
  --e-space-s:    72px;
  --e-space-m:    112px;
  --e-space-l:    152px;

  --e-maxw:       1200px;
  --e-maxw-text:  680px;

  --e-sans: "Pretendard Variable", Pretendard, -apple-system, BlinkMacSystemFont,
            "Apple SD Gothic Neo", "Segoe UI", "Noto Sans KR", "Malgun Gothic", sans-serif;
  --e-mono: "JetBrains Mono", ui-monospace, SFMono-Regular, Menlo, Consolas, monospace;
}

/* ── 2. 지면 ─────────────────────────────────────────────────────────── */
body.iyu-editorial {
  background: var(--e-paper) !important;
  color: var(--e-ink) !important;
  font-family: var(--e-sans) !important;
  -webkit-font-smoothing: antialiased;
  text-rendering: optimizeLegibility;
}

body.iyu-editorial main.flex-grow > :is(main, section, div) {
  /* v3.css 가 깔아둔 3중 radial-gradient 지면을 걷어낸다 */
  background: var(--e-paper) !important;
  color: var(--e-ink) !important;
}

body.iyu-editorial main.flex-grow > :is(main, section, div) *:not(svg):not(path):not(circle):not(rect):not(ellipse):not(line):not(polyline):not(polygon) {
  font-family: inherit;
}

/* ── 3. AI 신호 제거 ──────────────────────────────────────────────────────
   측정된 클리셰를 항목별로 무력화한다.
   그라디언트 텍스트 3 / 블러 오브 3 / 그리드 오버레이 1 / 글래스 카드 69 /
   글로우 섀도 3 / 링 스핀 애니메이션 / animate-ping·pulse 3 */

/* 3-1. 그라디언트 텍스트 → 단색 잉크 */
body.iyu-editorial main.flex-grow > :is(main, section, div) .text-transparent.bg-clip-text,
body.iyu-editorial main.flex-grow > :is(main, section, div) h1 .text-transparent,
body.iyu-editorial main.flex-grow > :is(main, section, div) h2 .text-transparent {
  background-image: none !important;
  background: none !important;
  -webkit-background-clip: border-box !important;
  background-clip: border-box !important;
  color: var(--e-ink) !important;
  -webkit-text-fill-color: var(--e-ink) !important;
}

/* 3-2. 블러 광원 오브 · 메시 그라디언트 · 그리드 오버레이 → 삭제 */
body.iyu-editorial .v3-mesh-bg,
body.iyu-editorial .v3-mesh-bg::before,
body.iyu-editorial .v3-mesh-bg::after,
body.iyu-editorial main.flex-grow > :is(main, section, div) [class*="blur-["],
body.iyu-editorial main.flex-grow > :is(main, section, div) [class*="bg-grid-pattern"],
body.iyu-editorial main.flex-grow > :is(main, section, div) .absolute.inset-0[class*="bg-[linear-gradient(to_right"],
body.iyu-editorial main.flex-grow > :is(main, section, div) > section:first-child::before,
body.iyu-editorial main.flex-grow > :is(main, section, div) > section:first-child::after {
  display: none !important;
  content: none !important;
  background: none !important;
}

/* 3-3. 발광 그림자 → 제거 */
body.iyu-editorial main.flex-grow > :is(main, section, div) [class*="shadow-[0_0_"] {
  box-shadow: none !important;
}

/* 3-4. 회전 링 / 궤도 장식 / 펄스 점 → 제거
        히어로와 About 의 "빈 상자 안에서 도는 원" 자리는 사진이 대신한다 */
body.iyu-editorial main.flex-grow > :is(main, section, div) [class*="animate-[spin"],
body.iyu-editorial main.flex-grow > :is(main, section, div) .animate-ping {
  display: none !important;
}
body.iyu-editorial main.flex-grow > :is(main, section, div) .animate-pulse {
  animation: none !important;
}

/* 3-5. 글래스 카드 → 종이 + 괘선.
        bg-white/5 69회, border-white/10 41회를 한 번에 정리한다 */
body.iyu-editorial main.flex-grow > :is(main, section, div) [class*="bg-charcoal"]:not(section),
body.iyu-editorial main.flex-grow > :is(main, section, div) [class*="bg-obsidian"]:not(section),
body.iyu-editorial main.flex-grow > :is(main, section, div) [class*="bg-white/5"]:not(section),
body.iyu-editorial main.flex-grow > :is(main, section, div) [class*="bg-white/10"]:not(section) {
  background-color: transparent !important;
  background-image: none !important;
  box-shadow: none !important;
  backdrop-filter: none !important;
  -webkit-backdrop-filter: none !important;
  border-color: var(--e-line) !important;
}

body.iyu-editorial main.flex-grow > :is(main, section, div) [class*="from-charcoal"]:not(section),
body.iyu-editorial main.flex-grow > :is(main, section, div) [class*="to-charcoal"]:not(section),
body.iyu-editorial main.flex-grow > :is(main, section, div) [class*="from-obsidian"]:not(section),
body.iyu-editorial main.flex-grow > :is(main, section, div) [class*="to-obsidian"]:not(section),
body.iyu-editorial main.flex-grow > :is(main, section, div) [class*="bg-gradient-to"]:not(section) {
  background-image: none !important;
}

body.iyu-editorial main.flex-grow > :is(main, section, div) [class*="border-white"],
body.iyu-editorial main.flex-grow > :is(main, section, div) [class*="border-titanium"],
body.iyu-editorial main.flex-grow > :is(main, section, div) [class*="border-cyan"] {
  border-color: var(--e-line) !important;
}

/* 3-6. 라운드 통일 해제 — 22px 강제를 3px 로 */
body.iyu-editorial main.flex-grow > :is(main, section, div) [class*="rounded-xl"],
body.iyu-editorial main.flex-grow > :is(main, section, div) [class*="rounded-2xl"],
body.iyu-editorial main.flex-grow > :is(main, section, div) [class*="rounded-3xl"],
body.iyu-editorial main.flex-grow > :is(main, section, div) [class*="rounded-lg"],
body.iyu-editorial main.flex-grow > :is(main, section, div) [class*="rounded-sm"] {
  border-radius: var(--e-radius) !important;
}

/* 3-7. 카드 부양(hover:-translate-y) 11회 → 괘선 반응으로 대체.
        "떠오르는 카드"는 템플릿의 대표 동작이다 */
body.iyu-editorial main.flex-grow > :is(main, section, div) .hover\:-translate-y-1:hover,
body.iyu-editorial main.flex-grow > :is(main, section, div) .hover\:-translate-y-2:hover,
body.iyu-editorial main.flex-grow > :is(main, section, div) [class*="hover:-translate-y"]:hover {
  transform: none !important;
}
body.iyu-editorial main.flex-grow > :is(main, section, div) [class*="group-hover:scale-1"],
body.iyu-editorial main.flex-grow > :is(main, section, div) .group:hover [class*="group-hover:scale-1"] {
  transform: none !important;
}

/* 3-8. 액센트 단일화 — cyan/indigo/teal → 러스트 */
body.iyu-editorial main.flex-grow > :is(main, section, div) .text-cyan,
body.iyu-editorial main.flex-grow > :is(main, section, div) .text-amber,
body.iyu-editorial main.flex-grow > :is(main, section, div) [class*="text-purple"],
body.iyu-editorial main.flex-grow > :is(main, section, div) [class*="text-blue-"] {
  color: var(--e-accent) !important;
}
body.iyu-editorial main.flex-grow > :is(main, section, div) .bg-cyan {
  background-color: var(--e-ink) !important;
}

/* ── 4. 타이포그래피 ──────────────────────────────────────────────────────
   한글 조판 규칙. keep-all 이 없어서 1440px 에서 "만듭니 / 다" 로
   깨지던 히어로 제목이 여기서 교정된다. */
body.iyu-editorial main.flex-grow > :is(main, section, div) h1,
body.iyu-editorial main.flex-grow > :is(main, section, div) h2,
body.iyu-editorial main.flex-grow > :is(main, section, div) h3,
body.iyu-editorial main.flex-grow > :is(main, section, div) h4,
body.iyu-editorial main.flex-grow > :is(main, section, div) p,
body.iyu-editorial main.flex-grow > :is(main, section, div) li,
body.iyu-editorial main.flex-grow > :is(main, section, div) span {
  word-break: keep-all;
  overflow-wrap: break-word;
}

body.iyu-editorial main.flex-grow > :is(main, section, div) h1,
body.iyu-editorial main.flex-grow > :is(main, section, div) h2 {
  text-wrap: balance;
  letter-spacing: -0.025em;
  color: var(--e-ink) !important;
  font-weight: 700;
}

body.iyu-editorial main.flex-grow > :is(main, section, div) h3 {
  letter-spacing: -0.015em;
  color: var(--e-ink) !important;
}

body.iyu-editorial main.flex-grow > :is(main, section, div) p,
body.iyu-editorial main.flex-grow > :is(main, section, div) [class*="text-muted"],
body.iyu-editorial main.flex-grow > :is(main, section, div) [class*="text-gray"] {
  color: var(--e-ink-2) !important;
  line-height: 1.72;
}

/* 4-1. 하드코딩 <br> 은 그대로 둔다.
        원래 문제였던 "만듭니 / 다" 파열은 위의 word-break:keep-all 로 해결된다.
        br 을 숨기면 앞뒤 어절이 공백 없이 붙어버린다("스마트공장의두뇌를"). */

/* 4-2. 영문 mono eyebrow 45회 → 한글 라벨 톤으로.
        "Success Stories" 같은 대문자 mono 라벨은 템플릿의 지문이다.
        완전히 지우는 대신 무게를 낮춰 부제로 강등시킨다 */
body.iyu-editorial main.flex-grow > :is(main, section, div) .font-mono {
  font-family: var(--e-sans) !important;
  letter-spacing: 0.02em !important;
  text-transform: none !important;
}

body.iyu-editorial main.flex-grow > :is(main, section, div) span.font-mono[class*="tracking-wid"],
body.iyu-editorial main.flex-grow > :is(main, section, div) span[class*="uppercase"][class*="tracking-wid"] {
  display: inline-block;
  font-size: 12px !important;
  font-weight: 600 !important;
  letter-spacing: 0.08em !important;
  color: var(--e-ink-3) !important;
  padding-left: 11px;
  position: relative;
  margin-bottom: 14px !important;
}
body.iyu-editorial main.flex-grow > :is(main, section, div) span.font-mono[class*="tracking-wid"]::before,
body.iyu-editorial main.flex-grow > :is(main, section, div) span[class*="uppercase"][class*="tracking-wid"]::before {
  content: "";
  position: absolute;
  left: 0; top: 0.42em;
  width: 3px; height: 0.86em;
  background: var(--e-accent);
}

/* 4-3. 숫자는 mono 유지 — 여기서만 등폭이 의미를 갖는다 */
body.iyu-editorial .e-figure,
body.iyu-editorial .v3-stat-value {
  font-family: var(--e-mono) !important;
  font-variant-numeric: tabular-nums;
  letter-spacing: -0.02em;
}

/* ── 5. 수직 리듬 ─────────────────────────────────────────────────────────
   10개 섹션 전부 py-24 였던 것을 성격별로 3단계로 나눈다.
   같은 간격이 열 번 반복되면 스크롤이 "생성된 목록"처럼 읽힌다. */
body.iyu-editorial main.flex-grow > :is(main, section, div) > section {
  padding-top: var(--e-space-m) !important;
  padding-bottom: var(--e-space-m) !important;
  background: var(--e-paper) !important;
  border: 0 !important;
  overflow: visible !important;
}

/* 서사의 마디가 되는 섹션은 넓게.
   ※ 위의 기본 섹션 규칙과 특정도를 맞추기 위해 같은 경로를 그대로 쓴다.
      단순히 .iyu-home-blueprint 만 쓰면 클래스 수가 모자라 밀린다. */
body.iyu-editorial main.flex-grow > :is(main, section, div) > section.iyu-home-blueprint,
body.iyu-editorial main.flex-grow > :is(main, section, div) > section.iyu-home-cases {
  padding-top: var(--e-space-l) !important;
  padding-bottom: var(--e-space-l) !important;
}

/* 목록형·보조 섹션은 좁게 */
body.iyu-editorial main.flex-grow > :is(main, section, div) > section.iyu-home-products,
body.iyu-editorial main.flex-grow > :is(main, section, div) > section.iyu-home-support,
body.iyu-editorial main.flex-grow > :is(main, section, div) > section.iyu-home-cta {
  padding-top: var(--e-space-s) !important;
  padding-bottom: var(--e-space-s) !important;
}
body.iyu-editorial section.iyu-answer-hub {
  padding-top: var(--e-space-s) !important;
  padding-bottom: var(--e-space-s) !important;
}

/* 지면 교차 — 배경색이 아니라 괘선 하나로 구분한다 */
body.iyu-editorial main.flex-grow > :is(main, section, div) > section.iyu-home-products,
body.iyu-editorial main.flex-grow > :is(main, section, div) > section.iyu-home-capabilities,
body.iyu-editorial main.flex-grow > :is(main, section, div) > section.iyu-home-support {
  background: var(--e-paper-2) !important;
}

body.iyu-editorial main.flex-grow > :is(main, section, div) > section + section {
  border-top: 1px solid var(--e-line) !important;
}

body.iyu-editorial main.flex-grow > :is(main, section, div) .max-w-7xl {
  max-width: var(--e-maxw) !important;
}

/* 섹션 헤더 — 가운데 정렬 남발을 왼쪽 정렬로. 편집물은 왼쪽에서 시작한다 */
body.iyu-editorial .iyu-home-solutions .text-center,
body.iyu-editorial .iyu-home-capabilities .text-center,
body.iyu-editorial .iyu-home-blueprint .text-center,
body.iyu-editorial .iyu-home-architecture .text-center,
body.iyu-editorial .iyu-home-support .text-center {
  text-align: left !important;
  max-width: 720px;
  margin-left: 0 !important;
  margin-right: 0 !important;
}
body.iyu-editorial .iyu-home-solutions .text-center p,
body.iyu-editorial .iyu-home-capabilities .text-center p,
body.iyu-editorial .iyu-home-blueprint .text-center p,
body.iyu-editorial .iyu-home-architecture .text-center p,
body.iyu-editorial .iyu-home-support .text-center p {
  margin-left: 0 !important;
  margin-right: 0 !important;
}

/* ── 6. 내비게이션 ────────────────────────────────────────────────────── */
body.iyu-editorial nav.fixed {
  background: rgba(255, 255, 255, 0.92) !important;
  border-bottom: 1px solid var(--e-line) !important;
  box-shadow: none !important;
  backdrop-filter: saturate(1.1) blur(14px);
  -webkit-backdrop-filter: saturate(1.1) blur(14px);
}
body.iyu-editorial nav.v3-nav-scrolled {
  background: rgba(255, 255, 255, 0.97) !important;
  border-bottom-color: var(--e-line-2) !important;
}
/* nav 안에는 /cooperation/ 링크가 두 개 있다 — 우측 CTA 버튼과
   메뉴의 "고객지원" 텍스트 링크. 처음엔 둘 다 잡아서 평범한 메뉴 항목이
   검은 배경에 검은 글씨가 됐다. 배경 유틸리티가 붙은 쪽(=버튼)만 잡는다.
   href 를 정확히 "/cooperation/" 로 묶었더니 영문 nav 의 "/en/cooperation/" 이
   빠져 배경만 밝게 남고 글자는 흰색이 돼 대비 1.1:1 이 됐다. $= 로 로케일을 흡수한다. */
body.iyu-editorial nav a[href$="/cooperation/"][class*="bg-titanium"] {
  border-radius: var(--e-radius) !important;
  background: var(--e-ink) !important;
  color: #fff !important;
  box-shadow: none !important;
}
body.iyu-editorial #v3-scroll-progress {
  background: var(--e-accent) !important;
  box-shadow: none !important;
  height: 2px !important;
}

/* ── 7. 히어로 ────────────────────────────────────────────────────────────
   기존: 좌 텍스트 / 우 회전 궤도 위에 아이콘이 떠 있는 빈 정사각형.
   변경: 좌 텍스트 / 우 실사 라인 사진. 최소 높이를 걷어 여백을 되찾는다. */
body.iyu-editorial main.flex-grow > :is(main, section, div) > section:first-child {
  min-height: 0 !important;
  padding-top: 148px !important;
  padding-bottom: var(--e-space-m) !important;
  background: var(--e-paper) !important;
  border-bottom: 1px solid var(--e-line) !important;
}

body.iyu-editorial .iyu-home-hero h1 {
  font-size: clamp(2.25rem, 4.4vw, 3.75rem) !important;
  line-height: 1.24 !important;
  letter-spacing: -0.035em;
  margin-bottom: 22px !important;
  max-width: 15em;
}

body.iyu-editorial .iyu-home-hero > div > div > div > p {
  font-size: 1.0625rem !important;
  max-width: 34em;
  margin-bottom: 34px !important;
}

/* 히어로 배지 — 애니메이션 점이 붙은 알약을 납작한 라벨로 */
body.iyu-editorial .iyu-home-hero .inline-flex.items-center.gap-2.rounded-full {
  border-radius: var(--e-radius) !important;
  background: transparent !important;
  border: 0 !important;
  border-left: 3px solid var(--e-accent) !important;
  padding: 1px 0 1px 11px !important;
  margin-bottom: 26px !important;
  backdrop-filter: none !important;
}
body.iyu-editorial .iyu-home-hero .inline-flex.items-center.gap-2.rounded-full span:last-child {
  color: var(--e-ink-3) !important;
  font-weight: 600 !important;
  letter-spacing: 0.04em !important;
  font-size: 12px !important;
}

/* 히어로 하단 신뢰 배지(빅데이터·산업용 AI·실시간 모니터링) */
body.iyu-editorial .iyu-home-hero .mt-12.pt-8 {
  border-top: 1px solid var(--e-line) !important;
  margin-top: 40px !important;
  padding-top: 22px !important;
  gap: 28px !important;
}
body.iyu-editorial .iyu-home-hero .mt-12.pt-8 span {
  font-size: 13px !important;
  color: var(--e-ink-3) !important;
}
body.iyu-editorial .iyu-home-hero .mt-12.pt-8 svg {
  width: 15px !important; height: 15px !important;
  color: var(--e-ink-4) !important;
}

/* ── 8. 버튼 ──────────────────────────────────────────────────────────────
   알약(999px) + 컬러 글로우 → 사각 + 잉크. 링크형 보조 버튼은 밑줄 */
/* 주 버튼은 어떤 유틸리티 조합과 겹쳐도 대비가 깨지면 안 된다.
   실제로 위 탭 타깃 규칙(0,6,3)에 밀려 검은 배경에 검은 글씨가 된 적이 있다.
   속성 선택자를 겹쳐 특정도를 (0,6,4) 로 올려 둔다. */
body.iyu-editorial main.flex-grow > :is(main, section, div) a.bg-cyan,
body.iyu-editorial main.flex-grow > :is(main, section, div) a[class*="bg-cyan"],
body.iyu-editorial main.flex-grow > :is(main, section, div) a[class*="bg-cyan"][class*="font-bold"][class*="flex"][class*="items-center"] {
  background: var(--e-ink) !important;
  color: #fff !important;
  border-radius: var(--e-radius) !important;
  box-shadow: none !important;
  padding: 14px 26px !important;
  font-weight: 600 !important;
  font-size: 15px !important;
  transition: background-color .18s ease !important;
}
body.iyu-editorial main.flex-grow > :is(main, section, div) a.bg-cyan:hover {
  background: var(--e-accent) !important;
}

body.iyu-editorial main.flex-grow > :is(main, section, div) a.border,
body.iyu-editorial main.flex-grow > :is(main, section, div) a[class*="border-titanium"] {
  background: transparent !important;
  color: var(--e-ink) !important;
  border: 1px solid var(--e-line-2) !important;
  border-radius: var(--e-radius) !important;
  padding: 14px 26px !important;
  font-weight: 600 !important;
  font-size: 15px !important;
}
body.iyu-editorial main.flex-grow > :is(main, section, div) a.border:hover {
  border-color: var(--e-ink) !important;
  background: transparent !important;
  color: var(--e-ink) !important;
}

/* "Learn More →" 류 인라인 링크 */
body.iyu-editorial main.flex-grow > :is(main, section, div) .group:hover .flex.items-center.gap-2 {
  gap: 8px !important;
}

/* ── 9. 이미지 시스템 ─────────────────────────────────────────────────────
   전체 홈페이지에 <img> 가 0개였다. 사진이 들어오는 자리의 규칙을 정의한다.
   - 라운드 거의 없음, 그림자 없음, 1px 괘선
   - 캡션은 사진 아래 왼쪽, 저채도 소문자
   - 채도를 살짝 낮춰 지면과 붙인다 (스톡 사진 특유의 들뜸 방지) */
body.iyu-editorial .e-figure {
  margin: 0;
  position: relative;
}

body.iyu-editorial .e-figure img,
body.iyu-editorial img.e-img {
  display: block;
  width: 100%;
  height: 100%;
  object-fit: cover;
  border-radius: var(--e-radius);
  background: var(--e-paper-3);
  /* 색보정(채도 0.88 / 대비 1.02)은 이미지에 미리 구워져 있다.
     런타임 filter 는 합성 레이어를 만들어 페인트 비용이 들고
     일부 캡처·인쇄 경로에서 이미지가 누락된다.
     scripts/build_site_images.py 참고. */
}

body.iyu-editorial .e-figure figcaption {
  font-family: var(--e-sans) !important;
  margin-top: 10px;
  font-size: 12px;
  line-height: 1.5;
  color: var(--e-ink-3);
  letter-spacing: 0.01em;
  display: flex;
  gap: 8px;
  align-items: baseline;
}
body.iyu-editorial .e-figure figcaption b {
  color: var(--e-ink-2);
  font-weight: 600;
  white-space: nowrap;
}

/* 히어로 사진 — 오른쪽 컬럼을 채우고 살짝 재단선을 넘긴다 */
body.iyu-editorial .e-hero-figure {
  aspect-ratio: 3 / 2;
  border: 1px solid var(--e-line);
  border-radius: var(--e-radius);
  overflow: hidden;
}
body.iyu-editorial .e-hero-figure img { border-radius: 0; }

/* About 정사각형 사진 */
body.iyu-editorial .e-square-figure {
  aspect-ratio: 1 / 1;
  border: 1px solid var(--e-line);
  border-radius: var(--e-radius);
  overflow: hidden;
}
body.iyu-editorial .e-square-figure img { border-radius: 0; }

/* 사례 카드 상단 사진 — 카드가 사진으로 시작한다 */
body.iyu-editorial .e-card-figure {
  aspect-ratio: 16 / 10;
  overflow: hidden;
  border-bottom: 1px solid var(--e-line);
  background: var(--e-paper-3);
}
body.iyu-editorial .e-card-figure img {
  border-radius: 0;
  transition: transform .5s cubic-bezier(.2,.7,.3,1);
}
body.iyu-editorial a:hover .e-card-figure img { transform: scale(1.028); }

/* 생성 이미지 고지 — 실사 촬영본으로 교체하기 전까지 정직하게 표시 */
body.iyu-editorial .e-imgnote {
  font-size: 11px;
  color: var(--e-ink-3);
  letter-spacing: 0.01em;
}

/* ── 10. 카드 ─────────────────────────────────────────────────────────────
   글래스 + 큰 라운드 + 부양 → 종이 + 괘선 + 정지.
   구분은 그림자가 아니라 선이 한다. */
body.iyu-editorial .iyu-home-solutions .grid > div > a,
body.iyu-editorial .iyu-home-products .grid > div > a,
body.iyu-editorial .iyu-home-capabilities .grid > div,
body.iyu-editorial .iyu-home-support .grid > div > a {
  border: 1px solid var(--e-line) !important;
  border-radius: var(--e-radius) !important;
  background: var(--e-paper) !important;
  box-shadow: none !important;
  padding: 26px !important;
  transition: border-color .18s ease !important;
}
body.iyu-editorial .iyu-home-solutions .grid > div > a:hover,
body.iyu-editorial .iyu-home-products .grid > div > a:hover,
body.iyu-editorial .iyu-home-support .grid > div > a:hover {
  border-color: var(--e-ink) !important;
}

/* 카드 아이콘 타일 — 56px 컬러 배경 타일을 아이콘만 남기고 걷어낸다.
   width:auto 는 이 타일(flex 컨테이너 자신)에는 shrink-to-fit 을 주지 않는다 —
   부모가 block 카드(a 태그, div)라 타일이 카드 폭 전체로 늘어나 아이콘만
   왼쪽 끝에 남는 얇은 막대가 된다(모바일 폭에서 두드러짐). §23-4 와 같은 문제,
   같은 fit-content 수정. */
body.iyu-editorial .iyu-home-solutions .w-14.h-14,
body.iyu-editorial .iyu-home-products .w-14.h-14,
body.iyu-editorial .iyu-home-capabilities .w-14.h-14,
body.iyu-editorial .iyu-home-cases .w-12.h-12 {
  width: fit-content !important;
  height: auto !important;
  background: none !important;
  border: 0 !important;
  margin-bottom: 18px !important;
  justify-content: flex-start !important;
}
body.iyu-editorial .iyu-home-solutions .w-14.h-14 svg,
body.iyu-editorial .iyu-home-products .w-14.h-14 svg,
body.iyu-editorial .iyu-home-capabilities .w-14.h-14 svg {
  width: 20px !important;
  height: 20px !important;
  color: var(--e-ink-3) !important;
  stroke-width: 1.5 !important;
}

body.iyu-editorial .iyu-home-solutions h3,
body.iyu-editorial .iyu-home-products h3 {
  font-size: 1.25rem !important;
  margin-top: 2px !important;
  margin-bottom: 8px !important;
}
body.iyu-editorial .iyu-home-solutions p,
body.iyu-editorial .iyu-home-products p {
  font-size: 0.9rem !important;
  line-height: 1.68 !important;
  min-height: 0 !important;
}

/* 카드 안 영문 소제목(Industrial AI Bot 등) */
body.iyu-editorial .iyu-home-solutions .mb-4 > span,
body.iyu-editorial .iyu-home-products .mb-4 > span {
  font-size: 11px !important;
  font-weight: 600 !important;
  letter-spacing: 0.06em !important;
  color: var(--e-ink-4) !important;
  text-transform: uppercase !important;
}

/* ── 11. 사례 카드 ───────────────────────────────────────────────────────
   사진이 상단에 붙으므로 내부 패딩을 다시 잡는다 */
body.iyu-editorial .iyu-home-cases .grid > div > a {
  border: 1px solid var(--e-line) !important;
  border-radius: var(--e-radius) !important;
  background: var(--e-paper) !important;
  box-shadow: none !important;
  overflow: hidden !important;
  transition: border-color .18s ease !important;
}
body.iyu-editorial .iyu-home-cases .grid > div > a:hover {
  border-color: var(--e-ink) !important;
}
body.iyu-editorial .iyu-home-cases .grid > div > a > .p-8 {
  padding: 22px !important;
}
body.iyu-editorial .iyu-home-cases h3 {
  font-size: 1.0625rem !important;
  line-height: 1.5 !important;
  margin-bottom: 10px !important;
}
body.iyu-editorial .iyu-home-cases p {
  font-size: 0.875rem !important;
}
/* 산업 태그 */
body.iyu-editorial .iyu-home-cases span.rounded-full {
  border-radius: var(--e-radius) !important;
  background: var(--e-paper-2) !important;
  border: 1px solid var(--e-line) !important;
  color: var(--e-ink-2) !important;
  font-size: 11px !important;
  padding: 3px 8px !important;
}
/* 카드 우하단 원형 화살표 버튼 → 삭제 */
body.iyu-editorial .iyu-home-cases .w-8.h-8.rounded-full {
  display: none !important;
}

/* ── 12. 데이터 표기 ──────────────────────────────────────────────────────
   근거 없는 라운드 넘버가 AI 인상의 큰 축이었다.
   수치 옆에 산출 근거를 붙일 자리를 만든다. */
body.iyu-editorial .e-metric {
  display: block;
  border-top: 1px solid var(--e-line);
  padding-top: 14px;
}
body.iyu-editorial .e-metric-value {
  font-family: var(--e-mono);
  font-variant-numeric: tabular-nums;
  font-size: clamp(1.5rem, 2.4vw, 2rem);
  font-weight: 600;
  letter-spacing: -0.03em;
  color: var(--e-ink);
  line-height: 1.1;
  display: block;
}
body.iyu-editorial .e-metric-label {
  display: block;
  margin-top: 6px;
  font-size: 13px;
  font-weight: 600;
  color: var(--e-ink-2);
}
body.iyu-editorial .e-metric-basis {
  display: block;
  margin-top: 5px;
  font-size: 11.5px;
  line-height: 1.55;
  color: var(--e-ink-3);
}

body.iyu-editorial .v3-stats-bar {
  background: transparent !important;
  border: 0 !important;
  border-top: 1px solid var(--e-line) !important;
  border-radius: 0 !important;
  box-shadow: none !important;
}
body.iyu-editorial .v3-stat { border-color: var(--e-line) !important; }
body.iyu-editorial .v3-stat-value { color: var(--e-ink) !important; }
body.iyu-editorial .v3-stat-label { color: var(--e-ink-3) !important; }

/* 고객사 로고 스트립 */
body.iyu-editorial .v3-logo-track .v3-logo-item {
  color: var(--e-ink-4) !important;
  font-family: var(--e-sans) !important;
}
body.iyu-editorial .v3-logo-track .v3-logo-item:hover { color: var(--e-ink-2) !important; }

/* ── 13. 푸터 ─────────────────────────────────────────────────────────── */
body.iyu-editorial footer {
  background: var(--e-paper-2) !important;
  border-top: 1px solid var(--e-line) !important;
  box-shadow: none !important;
}

/* ── 14. 반응형 ─────────────────────────────────────────────────────────── */
@media (max-width: 1023.98px) {
  body.iyu-editorial {
    --e-space-s: 52px;
    --e-space-m: 68px;
    --e-space-l: 88px;
  }
  body.iyu-editorial main.flex-grow > :is(main, section, div) > section:first-child {
    padding-top: 112px !important;
  }
  body.iyu-editorial .e-hero-figure { aspect-ratio: 16 / 10; }
}

@media (max-width: 640px) {
  body.iyu-editorial .iyu-home-hero h1 { font-size: 1.9rem !important; }
  body.iyu-editorial .e-figure figcaption { font-size: 11.5px; }
}

/* ── 15. 접근성 ─────────────────────────────────────────────────────────── */
@media (prefers-reduced-motion: reduce) {
  body.iyu-editorial *,
  body.iyu-editorial *::before,
  body.iyu-editorial *::after {
    animation-duration: .001ms !important;
    animation-iteration-count: 1 !important;
    transition-duration: .001ms !important;
  }
}

body.iyu-editorial a:focus-visible,
body.iyu-editorial button:focus-visible {
  outline: 2px solid var(--e-accent);
  outline-offset: 2px;
}

/* ── 16. 삽입된 사진 블록 배치 ─────────────────────────────────────────────
   index.html 에 새로 넣은 <figure> 들의 자리 규칙.
   회전 링·빈 상자가 있던 자리를 그대로 물려받는다. */

/* 16-1. 히어로 우측 */
body.iyu-editorial .e-hero { margin: 0; }
body.iyu-editorial .e-hero .e-hero-figure { aspect-ratio: 3 / 2; }
body.iyu-editorial .e-hero figcaption { max-width: 44ch; }

/* 16-2. About 우측 — 사진 아래 지표 두 개 */
body.iyu-editorial .e-about { margin: 0 0 22px; }
body.iyu-editorial .e-about-metrics {
  display: grid;
  grid-template-columns: 1fr 1fr;
  gap: 22px;
}

/* 16-3. MES 우측 — 사진이 지표 카드 위에 놓인다 */
body.iyu-editorial .e-mes-figure {
  margin: 0 0 26px;
  border: 1px solid var(--e-line);
  border-radius: var(--e-radius);
  padding: 0;
  overflow: hidden;
}
body.iyu-editorial .e-mes-figure img {
  aspect-ratio: 3 / 2;
  border-radius: 0;
}
body.iyu-editorial .e-mes-figure figcaption {
  padding: 12px 14px 13px;
  margin-top: 0;
  border-top: 1px solid var(--e-line);
  background: var(--e-paper);
}

/* 16-4. Blueprint — 개념도 위 실물 사진. 개념도보다 좁게 두어 종속시킨다 */
body.iyu-editorial .e-bp-figure {
  max-width: 560px;
  margin: 0 auto 40px;
}
body.iyu-editorial .e-bp-figure img {
  aspect-ratio: 16 / 10;
  border: 1px solid var(--e-line);
}

/* 16-5. 성과 배지 — cyan 알약을 잉크 괘선 라벨로 */
body.iyu-editorial .e-metric-badge {
  display: inline-block;
  font-family: var(--e-mono);
  font-variant-numeric: tabular-nums;
  font-size: 12px;
  font-weight: 600;
  letter-spacing: -0.01em;
  color: var(--e-ink) !important;
  background: transparent;
  border: 1px solid var(--e-line-2);
  border-radius: var(--e-radius);
  padding: 3px 8px;
  white-space: nowrap;
}

/* 근거 문구는 카드 안에서 한 단 낮은 목소리로 */
body.iyu-editorial .iyu-home-mes .e-metric-basis {
  display: block;
  margin-top: 8px;
  padding-top: 8px;
  border-top: 1px dotted var(--e-line);
  font-size: 11.5px;
  line-height: 1.5;
  /* 근거 문구도 읽으라고 넣은 글이다. 비활성 회색이 아니라 캡션 회색을 쓴다. */
  color: var(--e-ink-3) !important;
}

/* MES 지표 카드 자체 */
body.iyu-editorial .iyu-home-mes .grid.grid-cols-1.gap-6 > div {
  border: 1px solid var(--e-line) !important;
  border-radius: var(--e-radius) !important;
  background: var(--e-paper) !important;
  box-shadow: none !important;
  padding: 20px !important;
}
body.iyu-editorial .iyu-home-mes .w-12.h-12 {
  width: fit-content !important;
  height: auto !important;
  background: none !important;
  border-radius: 0 !important;
}
body.iyu-editorial .iyu-home-mes .w-12.h-12 svg {
  width: 18px !important; height: 18px !important;
  color: var(--e-ink-3) !important;
  stroke-width: 1.5 !important;
}
body.iyu-editorial .iyu-home-mes .flex.items-start.gap-6 { gap: 16px !important; }
body.iyu-editorial .iyu-home-mes h3 { font-size: 1.0625rem !important; }
/* 세로 장식선 제거 */
body.iyu-editorial .iyu-home-mes .absolute.-left-8 { display: none !important; }

/* 16-6. 히어로/About 사진이 들어간 그리드의 간격 재조정 */
body.iyu-editorial .iyu-home-hero .grid.lg\:grid-cols-2,
body.iyu-editorial .iyu-home-about .grid.lg\:grid-cols-2,
body.iyu-editorial .iyu-home-mes .grid.lg\:grid-cols-2 {
  gap: 56px !important;
  align-items: start !important;
}

@media (max-width: 1023.98px) {
  body.iyu-editorial .e-about-metrics { gap: 16px; }
  body.iyu-editorial .e-bp-figure { max-width: 100%; }
}

/* ── 17. Blueprint 개념도 재스킨 ──────────────────────────────────────────
   index.html 인라인 <style> 의 .iyu-bp 컴포넌트는 자체 팔레트를 들고 있었다.
   인디고·틸·바이올렛·시안·앰버 5색 + 15px 라운드 + 큰 그림자 조합이라
   페이지의 단일 액센트 체계를 혼자 깨뜨린다.

   색을 지우지 않고 "깊이 램프"로 바꾼다 — 수집(시작점)만 액센트,
   이후 계층은 잉크가 점점 옅어진다. 실제 엔지니어링 도면의 방식이다. */
body.iyu-editorial .iyu-bp {
  --i: var(--e-accent);   /* 수집 — 데이터가 시작되는 지점 */
  --t: #2f3a46;           /* 통합 */
  --v: #55606d;           /* 운영 */
  --c: #79838f;           /* 분석 */
  --a: #9aa2ad;           /* 시각화 */
  --ink: var(--e-ink);
  --mut: var(--e-ink-3);
  --line: var(--e-line);
  --sheet: var(--e-paper-2);
  font-family: var(--e-sans);
  max-width: 760px;
}

body.iyu-editorial .iyu-bp .node {
  border-width: 1px;
  border-top-width: 3px;      /* 계층 색 코딩은 유지 — 의미가 있다 */
  border-radius: var(--e-radius);
  box-shadow: none;
  transition: border-color .18s ease;
}
body.iyu-editorial .iyu-bp .node:hover {
  transform: none;
  box-shadow: none;
  border-color: var(--e-ink);
}
body.iyu-editorial .iyu-bp .node b { font-weight: 700; }
body.iyu-editorial .iyu-bp .node span { font-family: var(--e-mono); }

body.iyu-editorial .iyu-bp .field {
  border-width: 1px;
  border-radius: var(--e-radius);
  background: var(--e-paper-2);
}

/* 흐름 점 — 발광 제거, 데이터가 흐른다는 의미만 남긴다 */
body.iyu-editorial .iyu-bp .flow .dot {
  background: var(--e-accent);
  box-shadow: none;
}
body.iyu-editorial .iyu-bp .flow em {
  border-radius: var(--e-radius);
  border-color: var(--e-line);
  font-family: var(--e-mono);
}
body.iyu-editorial .iyu-bp .note {
  color: var(--e-ink-3);
  font-family: var(--e-sans);
  font-weight: 500;
}
body.iyu-editorial .iyu-bp .lab {
  font-family: var(--e-mono);
  letter-spacing: 0.09em;
}
body.iyu-editorial .iyu-bp .link,
body.iyu-editorial .iyu-bp .link::before,
body.iyu-editorial .iyu-bp .link::after {
  background: var(--e-line-2);
  border-color: var(--e-line-2);
}
body.iyu-editorial .iyu-bp .link { background: var(--e-line-2); }

@media (max-width: 560px) {
  body.iyu-editorial .iyu-bp .node { border-radius: var(--e-radius); }
}

/* ── 18. 잔여 정리 ───────────────────────────────────────────────────────
   v3.css 가 섹션에 남겨둔 반투명 흰 배경과 옅은 그라디언트를 걷어낸다.
   흰 지면 위 rgba(255,255,255,0.84) 는 눈에 띄지 않지만,
   지면 교차(--e-paper-2)를 덮어버리므로 정리해 둔다. */
body.iyu-editorial main.flex-grow > :is(main, section, div) > section.iyu-home-hero,
body.iyu-editorial main.flex-grow > :is(main, section, div) > section.iyu-home-solutions,
body.iyu-editorial main.flex-grow > :is(main, section, div) > section.iyu-home-blueprint,
body.iyu-editorial main.flex-grow > :is(main, section, div) > section.iyu-home-mes,
body.iyu-editorial main.flex-grow > :is(main, section, div) > section.iyu-home-architecture,
body.iyu-editorial main.flex-grow > :is(main, section, div) > section.iyu-home-cases,
body.iyu-editorial main.flex-grow > :is(main, section, div) > section.iyu-home-about,
body.iyu-editorial main.flex-grow > :is(main, section, div) > section.iyu-home-cta {
  background-color: var(--e-paper) !important;
  background-image: none !important;
}

/* ── 19. 통계 바 · 로고 스트립 ────────────────────────────────────────────
   영문 라벨 4개 + 출처 없는 퍼센트가 붙어 있던 자리.
   숫자는 남기되 "기대 범위"임을 문장으로 명시했다(index.html). */
body.iyu-editorial #v3-stats-section { padding-bottom: 2rem !important; }

body.iyu-editorial .v3-stats-bar {
  background: transparent !important;
  border: 0 !important;
  border-top: 1px solid var(--e-line) !important;
  border-bottom: 1px solid var(--e-line) !important;
  border-radius: 0 !important;
  box-shadow: none !important;
}
/* v3.css:1490 이 main.flex-grow 경로로 !important 인디고를 박아둔다.
   같은 경로 + 클래스 하나를 더 얹어 특정도를 넘긴다. */
body.iyu-editorial main.flex-grow .v3-stat-value,
body.iyu-editorial main.flex-grow .v3-counter.v3-accent,
body.iyu-editorial main.flex-grow .v3-accent,
body.iyu-editorial main.flex-grow .v3-stat-value .v3-accent {
  color: var(--e-ink) !important;
  font-family: var(--e-mono) !important;
  font-variant-numeric: tabular-nums;
  letter-spacing: -0.03em;
}
body.iyu-editorial .v3-stat-label {
  color: var(--e-ink-3) !important;
  font-family: var(--e-sans) !important;
  letter-spacing: 0 !important;
  text-transform: none !important;
}
body.iyu-editorial .e-stats-basis {
  margin: 14px auto 0;
  max-width: 60ch;
  font-size: 12px;
  line-height: 1.6;
  color: var(--e-ink-3);
  text-align: center;
}
body.iyu-editorial #v3-logo-strip p {
  font-family: var(--e-sans) !important;
  letter-spacing: 0.06em !important;
  text-transform: none !important;
  font-size: 12px !important;
}

/* ── 20. 최종 정리 ───────────────────────────────────────────────────────
   v3.css 의 글래스 규칙이 <section> 에도 드롭섀도를 남겨두고 있었다.
   전폭 섹션의 그림자는 보이지 않지만 합성 레이어를 만든다. */
body.iyu-editorial main.flex-grow > :is(main, section, div) > section { box-shadow: none !important; }

/* 솔루션·제품 카드가 아직 22px 라운드와 그림자를 들고 있던 경로를 덮는다 */
body.iyu-editorial .iyu-home-solutions a[class*="rounded"],
body.iyu-editorial .iyu-home-products a[class*="rounded"],
body.iyu-editorial .iyu-home-cases a[class*="rounded"],
body.iyu-editorial .iyu-home-support a[class*="rounded"] {
  border-radius: var(--e-radius) !important;
  box-shadow: none !important;
  background: var(--e-paper) !important;
  border: 1px solid var(--e-line) !important;
}
body.iyu-editorial .iyu-home-products a[class*="rounded"] { background: var(--e-paper) !important; }

/* U-QMS 카드의 초록 "Q" 글리프 — 액센트 체계 밖의 유일한 색이었다 */
body.iyu-editorial .iyu-home-solutions [style*="color"][class*="text-"],
body.iyu-editorial .iyu-home-solutions .text-emerald-600,
body.iyu-editorial .iyu-home-solutions [class*="text-emerald"],
body.iyu-editorial .iyu-home-solutions [class*="text-green"] {
  color: var(--e-ink-3) !important;
}

/* ── 21. 솔루션·제품 카드 최종 덮기 ───────────────────────────────────────
   v3.css:1800/1809 가 특정도 (0,5,4) 로 30px 라운드 + 큰 그림자를 고정한다.
   같은 형태의 선택자를 뒤에서 선언해 넘긴다. 여기서 임의로 특정도를 낮추면
   조용히 되돌아가므로, 선택자 모양을 일부러 맞춰 두었다. */
body.iyu-editorial main.flex-grow > :is(main, section, div) .iyu-home-solutions a.block,
body.iyu-editorial main.flex-grow > :is(main, section, div) .iyu-home-solutions a.block.border,
body.iyu-editorial main.flex-grow > :is(main, section, div) .iyu-home-products a.group.block,
body.iyu-editorial main.flex-grow > :is(main, section, div) .iyu-home-products a.group.block.border {
  border-radius: var(--e-radius) !important;
  background: var(--e-paper) !important;
  border: 1px solid var(--e-line) !important;
  box-shadow: none !important;
  overflow: hidden !important;
  transition: border-color .18s ease !important;
}
body.iyu-editorial main.flex-grow > :is(main, section, div) .iyu-home-solutions a.block:hover,
body.iyu-editorial main.flex-grow > :is(main, section, div) .iyu-home-products a.group.block:hover {
  border-color: var(--e-ink) !important;
}

/* 카드에 걸려 있던 min-height 20rem / 17.5rem 을 푼다.
   내용보다 상자가 크면 빈 공간이 남아 "채워 넣은 템플릿"처럼 읽힌다.
   그리드 stretch 가 이미 높이를 맞춰 준다. */
body.iyu-editorial main.flex-grow > :is(main, section, div) .iyu-home-solutions a.block {
  min-height: 0 !important;
  padding: 24px !important;
}
body.iyu-editorial main.flex-grow > :is(main, section, div) .iyu-home-products a.group.block {
  min-height: 0 !important;
}

/* ── 22. 모바일 교정 ──────────────────────────────────────────────────────
   390×844 실측으로 잡은 결함들. 데스크톱만 보고 넘어가면 놓치는 것들이다. */

/* 22-1. 히어로 사진 자리.
   원래 래퍼가 `hidden lg:block` 이라 폰에서는 사진이 통째로 사라졌다.
   HTML 에서 hidden 을 걷어냈고, 여기서 폭에 따른 비율만 잡아 준다.
   모바일에서는 텍스트 → 사진 순으로 쌓인다(grid-cols-1). */
body.iyu-editorial .iyu-hero-visual { display: block; }

@media (max-width: 1023.98px) {
  body.iyu-editorial .iyu-hero-visual { margin-top: 36px; }
  body.iyu-editorial .e-hero .e-hero-figure { aspect-ratio: 16 / 10; }
}

/* 22-2. 제목 크기.
   v3.css 가 @media(max-width:768px) 에서
   `main.flex-grow > :is(main, section, div) h1 { font-size: clamp(2.45rem, 12vw, 4.2rem) !important }`
   를 특정도 (0,3,4) 로 박아둔다. 390px 에서 12vw = 46.8px 이라
   한글 제목이 좁은 단에서 거칠게 끊긴다. 같은 경로로 덮는다.

   ※ 브레이크포인트를 767.98 이 아니라 768 로 맞춘다.
     v3.css 가 768 '이하'를 쓰므로 767.98 로 두면 정확히 768px 에서
     제 규칙만 빠지고 v3 규칙이 남아 제목이 67px 로 튄다. */
@media (max-width: 768px) {
  body.iyu-editorial main.flex-grow > :is(main, section, div) .iyu-home-hero h1 {
    font-size: clamp(1.85rem, 8.2vw, 2.35rem) !important;
    line-height: 1.3 !important;
    letter-spacing: -0.03em;
  }
  body.iyu-editorial main.flex-grow > :is(main, section, div) .iyu-home-hero h1 br { display: inline; }
}

/* 22-3. 본문 섹션 제목도 같은 규칙에 눌려 과대해진다 (경계 동일) */
@media (max-width: 768px) {
  body.iyu-editorial main.flex-grow > :is(main, section, div) h2 {
    font-size: clamp(1.5rem, 6vw, 1.9rem) !important;
    line-height: 1.35 !important;
  }
}

/* 22-4. 텍스트 링크 탭 타깃.
   "모든 사례 보기", "제품 전체 보기" 등이 20~24px 높이였다.
   손가락으로 누르기엔 작다. 최소 44px 를 확보한다. */
body.iyu-editorial main.flex-grow > :is(main, section, div) .iyu-home-products a.text-cyan,
body.iyu-editorial main.flex-grow > :is(main, section, div) .iyu-home-cases a.text-cyan,
body.iyu-editorial main.flex-grow > :is(main, section, div)
  a[class*="font-bold"][class*="flex"][class*="items-center"][class*="gap-2"]:not([class*="bg-"]):not([class*="border"]) {
  min-height: 44px;
  align-items: center;
  color: var(--e-ink) !important;
}

/* 22-5. 캡션은 11.5px 까지 내려가 있었다. 모바일에서 한 단 올린다 */
@media (max-width: 640px) {
  body.iyu-editorial .e-figure figcaption { font-size: 12px; }
  body.iyu-editorial .e-figure figcaption b { display: block; margin-bottom: 2px; }
}

/* 22-6. About 사진 아래 지표 2단이 좁은 폭에서 눌린다 */
@media (max-width: 480px) {
  body.iyu-editorial .e-about-metrics { grid-template-columns: 1fr; gap: 14px; }
}

/* ══════════════════════════════════════════════════════════════════════════
   §23. 서브페이지
   ──────────────────────────────────────────────────────────────────────────
   홈과 DOM 구조가 다르다.
     홈   : main.flex-grow > main > section
     서브 : main.flex-grow > section          (.iyu-subpage-hero / .iyu-subpage-content)
   위 공통 규칙은 `> :is(main, section)` 로 양쪽을 덮지만,
   섹션 리듬처럼 "그 다음 단계의 section" 을 겨냥한 규칙은 홈에만 걸린다.
   여기서 서브페이지 쪽 리듬과 히어로를 따로 잡는다.
   ══════════════════════════════════════════════════════════════════════════ */

/* 23-0. 지면.
   v3.css 는 `body.iyu-elice-inspired.bg-obsidian { background:#f7f8ff !important }`
   를 (0,3,0) 으로 박아둔다. 홈은 안쪽 <main> 이 흰색을 덮어써서 티가 안 났지만
   서브페이지는 안쪽 main 이 없어 이 파란기 도는 지면이 그대로 드러난다.
   같은 특정도로 맞춰 덮는다. */
body.iyu-editorial.bg-obsidian,
body.iyu-editorial.iyu-solutions-page {
  background: var(--e-paper) !important;
  color: var(--e-ink) !important;
}
body.iyu-editorial main.flex-grow,
body.iyu-editorial main.flex-grow > div.min-h-screen {
  background: var(--e-paper) !important;
  background-image: none !important;
}
body.iyu-editorial main.flex-grow > div.min-h-screen { padding-bottom: 0 !important; }

/* 23-1. 서브페이지 히어로.
   v3.css:1728 이 padding/margin/min-height 를 잡고 있어 같은 경로로 덮는다. */
/* 상단 여백은 세 겹(main pt-16 + div pt-24 + 섹션 padding)이 더해져 292px 이 됐다.
   고정 내비 높이는 79px 뿐이다. 조상 둘을 눕히고 섹션 한 곳에서만 간격을 잡는다. */
body.iyu-editorial main.flex-grow:has(.iyu-subpage-hero) {
  padding-top: 0 !important;
}
body.iyu-editorial main.flex-grow:has(.iyu-subpage-hero) > div.min-h-screen {
  padding-top: 0 !important;
}
body.iyu-editorial:not(.iyu-home-page) .iyu-subpage-hero,
body.iyu-editorial main.flex-grow .iyu-subpage-hero {
  min-height: 0 !important;
  padding-top: 116px !important;
  padding-bottom: var(--e-space-m) !important;
  margin-bottom: 0 !important;
  background: var(--e-paper) !important;
  border-bottom: 1px solid var(--e-line) !important;
  overflow: visible !important;
}
/* 히어로 장식(그리드 패턴·측면 그라디언트·둥근 테두리) 제거 */
body.iyu-editorial .iyu-subpage-hero > .absolute,
body.iyu-editorial .iyu-subpage-hero::before,
body.iyu-editorial .iyu-subpage-hero::after {
  display: none !important;
  content: none !important;
  background: none !important;
}

/* 히어로를 2단으로: 좌 텍스트 / 우 사진 */
/* 2단은 오른쪽에 넣을 것이 실제로 있을 때만. 자식이 하나인 페이지(110개)에서는
   빈 칸이 화면 절반을 먹었다. :has() 미지원 브라우저는 1단으로 떨어지는데,
   그게 대부분의 페이지에서 오히려 맞는 모습이다. */
@media (min-width: 1024px) {
  body.iyu-editorial .iyu-subpage-hero > .max-w-7xl:has(> :nth-child(2)) {
    display: grid;
    grid-template-columns: minmax(0, 1fr) minmax(0, 0.82fr);
    gap: 56px;
    align-items: center;
  }
}
body.iyu-editorial .iyu-subpage-hero h1 {
  font-size: clamp(2rem, 3.6vw, 3.1rem) !important;
  line-height: 1.24 !important;
  letter-spacing: -0.035em;
  max-width: 16em;
  margin-bottom: 20px !important;
}
body.iyu-editorial .iyu-subpage-hero p {
  font-size: 1.0625rem !important;
  max-width: 36em;
  margin-bottom: 30px !important;
}

/* 2단 그리드를 걷어내며 히어로 폭이 1200px 로 넓어지자, h1/p 에 걸려 있던
   auto 마진이 드러나 제목(60px)과 본문(294px)의 들여쓰기가 서로 어긋났다.
   히어로 텍스트는 왼쪽 기준선 하나로 맞춘다. */
body.iyu-editorial .iyu-subpage-hero :is(h1, h2, p, dl, ul, ol) {
  margin-left: 0 !important;
  margin-right: 0 !important;
}
/* 넓어진 폭에서 제목이 한 줄로 늘어지지 않게 읽기 좋은 길이로 묶는다. */
body.iyu-editorial .iyu-subpage-hero h1 {
  max-width: 14em !important;
}

/* 우측이 사진이면 세로 가운데가 어울리지만, 지표 카드 묶음이면 카드가 텍스트보다
   길어 제목이 아래로 밀린다(측정: 152px -> 215px). 카드일 때는 위 기준으로 맞춘다. */
@media (min-width: 1024px) {
  body.iyu-editorial .iyu-subpage-hero > .max-w-7xl:has(> .iyu-hero-aside) {
    align-items: start;
  }
}
/* 우측 지표 카드 — 본문 옆에 서는 패널이므로 홈 카드보다 조금 눌러 담는다. */
body.iyu-editorial .iyu-hero-aside__list > div {
  padding: 18px 20px !important;
  border-radius: var(--e-radius) !important;
}
body.iyu-editorial .iyu-hero-aside__list dt {
  font-size: .8125rem !important;
  margin-bottom: 4px !important;
}
body.iyu-editorial .iyu-hero-aside__list dd {
  font-size: 1.375rem !important;
  line-height: 1.3 !important;
}
/* 인증 배지 — 알약을 납작한 라벨로 (홈 히어로 배지와 같은 어휘) */
body.iyu-editorial .iyu-subpage-hero .inline-flex.rounded-full,
body.iyu-editorial .iyu-subpage-hero .inline-flex[class*="rounded-full"] {
  border-radius: 0 !important;
  background: transparent !important;
  border: 0 !important;
  border-left: 3px solid var(--e-accent) !important;
  padding: 1px 0 1px 11px !important;
  margin-bottom: 22px !important;
  color: var(--e-ink-3) !important;
  font-size: 12px !important;
  letter-spacing: 0.03em !important;
}
body.iyu-editorial .iyu-subpage-hero .inline-flex[class*="rounded-full"] svg {
  width: 14px !important; height: 14px !important; color: var(--e-accent) !important;
}

/* 23-2. 서브페이지 히어로 사진 */
body.iyu-editorial .e-sub-hero { margin: 0; }
body.iyu-editorial .e-sub-hero-figure {
  aspect-ratio: 3 / 2;
  border: 1px solid var(--e-line);
  border-radius: var(--e-radius);
  overflow: hidden;
}
body.iyu-editorial .e-sub-hero-figure img { border-radius: 0; }
@media (max-width: 1023.98px) {
  body.iyu-editorial .e-sub-hero { margin-top: 36px; }
  body.iyu-editorial .e-sub-hero-figure { aspect-ratio: 16 / 10; }
}

/* 23-3. 본문 섹션 리듬.
   전부 py-20 으로 균일하던 것을 홈과 같은 3단계 어휘로 나눈다. */
body.iyu-editorial:not(.iyu-home-page) section.iyu-subpage-content {
  padding-top: var(--e-space-m) !important;
  padding-bottom: var(--e-space-m) !important;
  margin-bottom: 0 !important;
  background: var(--e-paper) !important;
  border: 0 !important;
}
body.iyu-editorial:not(.iyu-home-page) section.iyu-subpage-content + section.iyu-subpage-content {
  border-top: 1px solid var(--e-line) !important;
}
/* 좁은 폭의 마무리 섹션(CTA·Answer)은 한 단 낮게 */
body.iyu-editorial:not(.iyu-home-page) section.max-w-4xl,
body.iyu-editorial:not(.iyu-home-page) section.iyu-answer-hub {
  padding-top: var(--e-space-s) !important;
  padding-bottom: var(--e-space-s) !important;
}
body.iyu-editorial:not(.iyu-home-page) section.max-w-7xl { max-width: var(--e-maxw) !important; }

/* 섹션 헤더 가운데 정렬 → 왼쪽 */
body.iyu-editorial .iyu-subpage-content > .text-center:not(:only-child) {
  text-align: left !important;
  max-width: 720px;
  margin-left: 0 !important;
}

/* 23-4. 카드.
   서브페이지 카드는 p-8 rounded-2xl bg-charcoal 조합이다.
   홈과 같은 어휘(종이 + 1px 괘선 + 정지)로 맞춘다. */
body.iyu-editorial .iyu-subpage-content [class*="rounded-2xl"],
body.iyu-editorial .iyu-subpage-content [class*="rounded-xl"] {
  border-radius: var(--e-radius) !important;
  background: var(--e-paper) !important;
  border: 1px solid var(--e-line) !important;
  box-shadow: none !important;
}
/* 카드 안 고정 높이(h-20)로 생기는 빈 공간 해제 */
body.iyu-editorial .iyu-subpage-content p.h-20 { height: auto !important; }
/* 아이콘 타일 → 아이콘만.
   width:auto 는 flex 컨테이너 자신에는 shrink-to-fit 을 주지 않는다 — 그건
   flex/grid "아이템"에만 적용되는 규칙이고, 이 타일의 부모가 block 카드(p-8
   rounded-2xl bg-charcoal 류, 예: solutions/u-mes 의 "Key Features" 카드)이면
   타일이 카드 폭 전체로 늘어나 아이콘만 왼쪽 끝에 남는 얇은 막대가 된다
   (모바일 폭에서 두드러짐). fit-content 로 실제로 아이콘 크기에 맞춘다. */
body.iyu-editorial .iyu-subpage-content .w-12.h-12,
body.iyu-editorial .iyu-subpage-content .w-14.h-14 {
  width: fit-content !important; height: auto !important;
  background: none !important; border-radius: 0 !important;
  margin-bottom: 16px !important; justify-content: flex-start !important;
}
body.iyu-editorial .iyu-subpage-content .w-12.h-12 svg,
body.iyu-editorial .iyu-subpage-content .w-14.h-14 svg {
  width: 20px !important; height: 20px !important;
  color: var(--e-ink-3) !important; stroke-width: 1.5 !important;
}

/* 23-5. 본문 중간 사진 밴드 */
body.iyu-editorial .e-sub-band {
  margin: 0 0 44px;
  border: 1px solid var(--e-line);
  border-radius: var(--e-radius);
  overflow: hidden;
}
/* 본문 폭 전체를 쓰는 밴드는 16:10 이면 높이가 700px 을 넘어
   사진이 콘텐츠를 압도한다(실측 1136x754). 가로로 긴 비율로 잡는다. */
body.iyu-editorial .e-sub-band img {
  border-radius: 0;
  aspect-ratio: 12 / 5;
  max-height: 420px;
  object-position: center 55%;
}
body.iyu-editorial .e-sub-band figcaption {
  margin-top: 0;
  padding: 12px 14px 13px;
  border-top: 1px solid var(--e-line);
  background: var(--e-paper);
}

/* 23-6. 메뉴 트리 섹션 */
body.iyu-editorial .iyu-solution-menutree {
  padding-top: var(--e-space-m) !important;
  padding-bottom: var(--e-space-m) !important;
  background: var(--e-paper-2) !important;
  border-top: 1px solid var(--e-line) !important;
  border-bottom: 1px solid var(--e-line) !important;
}

/* 23-7. 모바일 */
@media (max-width: 768px) {
  body.iyu-editorial:not(.iyu-home-page) .iyu-subpage-hero {
    padding-top: 104px !important;
    padding-bottom: var(--e-space-s) !important;
    margin-bottom: 0 !important;
  }
  body.iyu-editorial .iyu-subpage-hero h1 {
    font-size: clamp(1.75rem, 7.4vw, 2.2rem) !important;
    line-height: 1.3 !important;
  }
  body.iyu-editorial .e-sub-band { margin-bottom: 28px; }
}

/* ── 24. 남은 컴포넌트 ────────────────────────────────────────────────────
   서브페이지 실측에서 마지막까지 남은 두 개. 둘 다 자체 CSS 를 갖고 있다. */

/* 24-1. 메뉴 트리 카드 (.mt-group) — 16px 라운드 + 그림자
        ※ 이 컴포넌트는 u-mes / u-qms / u-cmms 세 페이지의 인라인 <style> 에
          들어 있다. 특정 섹션 안으로 스코프하지 말고 컴포넌트 자체를 잡는다. */
body.iyu-editorial .mt-group,
body.iyu-editorial .iyu-solution-menutree .mt-group {
  border-radius: var(--e-radius) !important;
  box-shadow: none !important;
  border: 1px solid var(--e-line) !important;
  background: var(--e-paper) !important;
}
body.iyu-editorial .mt-group:hover,
body.iyu-editorial .iyu-solution-menutree .mt-group:hover {
  transform: none !important;
  box-shadow: none !important;
  border-color: var(--e-ink) !important;
}

/* 24-2. Answer Hub 카드 — 홈에도 같이 적용된다 */
body.iyu-editorial .iyu-answer-hub .iyu-answer-item {
  border-radius: var(--e-radius) !important;
  box-shadow: none !important;
  border: 1px solid var(--e-line) !important;
  background: var(--e-paper) !important;
}

/* ── 25. 서브페이지 수직 리듬 ─────────────────────────────────────────────
   본문 섹션이 전부 112px 로 균일해지면, 홈에서 걷어낸 바로 그
   "같은 박자 반복" 문제가 서브페이지에서 되살아난다.
   문서 구조가 정적이므로 nth-of-type 으로 무게를 나눈다.

   2번째 = 정부 지원사업 배너(콜아웃, 좁게)
   4번째 = 차별화 기술 / 7번째 = End-to-End 프로세스 (서사의 마디, 넓게) */
body.iyu-editorial:not(.iyu-home-page) main.flex-grow > div > section:nth-of-type(2) {
  padding-top: var(--e-space-s) !important;
  padding-bottom: var(--e-space-s) !important;
}
body.iyu-editorial:not(.iyu-home-page) main.flex-grow > div > section:nth-of-type(4),
body.iyu-editorial:not(.iyu-home-page) main.flex-grow > div > section:nth-of-type(7) {
  padding-top: var(--e-space-l) !important;
  padding-bottom: var(--e-space-l) !important;
}
/* 지면 교차 — 홈과 같은 어휘 */
body.iyu-editorial:not(.iyu-home-page) main.flex-grow > div > section:nth-of-type(3) {
  background: var(--e-paper-2) !important;
  border-top: 1px solid var(--e-line) !important;
  border-bottom: 1px solid var(--e-line) !important;
}

/* ══════════════════════════════════════════════════════════════════════════
   §26. U-QMS · U-AI 페이지 토큰 브리지
   ──────────────────────────────────────────────────────────────────────────
   이 두 페이지는 각자 assets/u-qms.css · assets/u-ai.css 를 갖고 있고,
   .uq-page / .ai-page 루트에 자체 토큰을 정의한다.
   컴포넌트 자체는 오히려 잘 만들어져 있으므로(8px 라운드, 절제된 구조)
   전부 다시 쓰지 않는다. 대신 토큰만 이 체계의 값으로 갈아끼운다.

   원본 팔레트는 indigo/cyan/green/amber/violet/teal 이 섞여 있어
   페이지마다 액센트가 달라 보였다. 여기서 액센트를 러스트 하나로 모으고,
   나머지는 잉크 램프로 내려 계층만 남긴다.
   ══════════════════════════════════════════════════════════════════════════ */
body.iyu-editorial .uq-page,
body.iyu-editorial .ai-page {
  /* 잉크 */
  --uq-ink: var(--e-ink);      --ai-ink: var(--e-ink);
  --uq-body: var(--e-ink-2);   --ai-body: var(--e-ink-2);
  --uq-line: var(--e-line);    --ai-line: var(--e-line);

  /* 액센트는 하나. 나머지는 잉크 램프로 강등해 계층만 남긴다 */
  --uq-indigo: var(--e-accent);  --ai-indigo: var(--e-accent);
  --uq-cyan:   #55606d;          --ai-blue:   #55606d;
  --uq-green:  #2f3a46;          --ai-violet: #79838f;
  --uq-amber:  var(--e-accent-2);--ai-teal:   #2f3a46;
                                 --ai-amber:  var(--e-accent-2);
                                 --ai-green:  #2f3a46;

  background: var(--e-paper) !important;
  color: var(--e-ink) !important;
  font-family: var(--e-sans) !important;
}

/* 제목이 Inter 로 남아 있던 원인: 두 파일이 페이지 루트에 font-family 를
   직접 선언한다. 자식들이 상속받도록 루트를 바꾸고, 명시 선언도 덮는다. */
body.iyu-editorial .uq-page :is(h1, h2, h3, h4, p, span, li, a, strong, em, small, div),
body.iyu-editorial .ai-page :is(h1, h2, h3, h4, p, span, li, a, strong, em, small, div) {
  font-family: var(--e-sans) !important;
}
body.iyu-editorial .uq-page :is(code, pre, .uq-num, [class*="mono"]),
body.iyu-editorial .ai-page :is(code, pre, .ai-num, [class*="mono"]) {
  font-family: var(--e-mono) !important;
}

/* 히어로 제목이 5.6rem 까지 커진다. 이 체계의 스케일로 맞춘다. */
body.iyu-editorial .uq-hero h1,
body.iyu-editorial .ai-hero h1 {
  font-size: clamp(2rem, 3.6vw, 3.1rem) !important;
  line-height: 1.24 !important;
  letter-spacing: -0.035em;
  word-break: keep-all;
}
@media (max-width: 768px) {
  body.iyu-editorial .uq-hero h1,
  body.iyu-editorial .ai-hero h1 {
    font-size: clamp(1.75rem, 7.4vw, 2.2rem) !important;
    line-height: 1.3 !important;
  }
}

/* 그림자 제거 — 구분은 선이 한다 */
body.iyu-editorial .uq-page [class^="uq-"],
body.iyu-editorial .uq-page [class*=" uq-"],
body.iyu-editorial .ai-page [class^="ai-"],
body.iyu-editorial .ai-page [class*=" ai-"] {
  box-shadow: none !important;
}

/* 라운드 8px → 3px. 원형 배지·점(50%)과 알약(999px)은 형태가 의미이므로 둔다. */
body.iyu-editorial .uq-console,
body.iyu-editorial .uq-module,
body.iyu-editorial .uq-action,
body.iyu-editorial .ai-console,
body.iyu-editorial .ai-quote,
body.iyu-editorial .ai-cap,
body.iyu-editorial .ai-uc,
body.iyu-editorial .ai-why,
body.iyu-editorial .ai-shot,
body.iyu-editorial .ai-cta-panel,
body.iyu-editorial .ai-action {
  border-radius: var(--e-radius) !important;
}

/* 주 버튼은 잉크, 보조는 괘선 — 사이트 전체와 같은 어휘 */
body.iyu-editorial .uq-action-primary,
body.iyu-editorial .ai-action-primary {
  background: var(--e-ink) !important;
  border-color: var(--e-ink) !important;
  color: #fff !important;
}
body.iyu-editorial .uq-action-primary:hover,
body.iyu-editorial .ai-action-primary:hover {
  background: var(--e-accent) !important;
  border-color: var(--e-accent) !important;
}
body.iyu-editorial .uq-action:not(.uq-action-primary),
body.iyu-editorial .ai-action:not(.ai-action-primary) {
  background: transparent !important;
  border: 1px solid var(--e-line-2) !important;
  color: var(--e-ink) !important;
}

/* ── 27. 메뉴 트리(.iyu-mtree) 토큰 브리지 ────────────────────────────────
   u-mes / u-qms / u-cmms 의 인라인 <style> 에 들어 있는 공통 컴포넌트.
   자체 토큰(indigo --acc, 연보라 --accbg)을 갖고 있어
   페이지마다 이 블록만 다른 색으로 떠 보였다. */
body.iyu-editorial .iyu-mtree {
  --acc: var(--e-accent);
  --accbg: var(--e-accent-wash);
  --ink: var(--e-ink);
  --mut: var(--e-ink-2);
  --line: var(--e-line);
  font-family: var(--e-sans);
}
body.iyu-editorial .iyu-mtree .ic {
  border-radius: var(--e-radius);
  background: var(--e-paper-2);
  color: var(--e-ink-3);
}
body.iyu-editorial .iyu-mtree .n {
  font-family: var(--e-mono);
  border-radius: var(--e-radius);
  background: var(--e-paper-2);
  color: var(--e-ink-3);
}

/* ── 28. 서브페이지 히어로 제목 — 특정도 최종 정리 ────────────────────────
   v3.css 가 @media(max-width:768px) 에서
     body.iyu-elice-inspired main.flex-grow > main h1   = (0,2,4) !important
   로 clamp(2.45rem, 12vw, 4.2rem) 을 박는다. 390px 에서 46.8px 이다.
   §23-1 / §26 의 (0,2,1)~(0,2,2) 규칙으로는 밀린다.

   히어로 제목 선택자를 한 곳으로 모으고 특정도를 (0,3,4) 로 올린다.
   서브페이지 래퍼가 페이지마다 다르므로(u-mes=div, u-qms=main)
   여기서도 :is(main, section, div) 를 쓴다. */
body.iyu-editorial main.flex-grow > :is(main, section, div) :is(.iyu-subpage-hero, .uq-hero, .ai-hero) h1,
body.iyu-editorial main.flex-grow > :is(.iyu-subpage-hero, .uq-hero, .ai-hero) h1 {
  font-size: clamp(2rem, 3.6vw, 3.1rem) !important;
  line-height: 1.24 !important;
  letter-spacing: -0.035em;
  word-break: keep-all;
  max-width: 18em;
}

@media (max-width: 768px) {
  body.iyu-editorial main.flex-grow > :is(main, section, div) :is(.iyu-subpage-hero, .uq-hero, .ai-hero) h1,
  body.iyu-editorial main.flex-grow > :is(.iyu-subpage-hero, .uq-hero, .ai-hero) h1 {
    font-size: clamp(1.75rem, 7.4vw, 2.2rem) !important;
    line-height: 1.3 !important;
  }
}

/* ── 29. 서브페이지 히어로 여백 — 특정도 최종 정리 ────────────────────────
   §23-1 은 (0,3,1) 이라 v3.css 의
     body.iyu-elice-inspired:not(.iyu-home-page)
       main.flex-grow > main > section:first-child   = (0,3,4) !important
   에 밀린다. 그 결과 페이지마다 히어로 여백이 제각각이었다.
     srp-100w 132 / resource-lake 100 / uboard 148
   래퍼가 페이지마다 다르므로(main / div.min-h-screen) 여기서도 :is() 를 쓴다. */
body.iyu-editorial:not(.iyu-home-page) main.flex-grow > :is(main, section, div) > section:first-child,
body.iyu-editorial:not(.iyu-home-page) main.flex-grow > :is(main, section, div).iyu-subpage-hero,
body.iyu-editorial:not(.iyu-home-page) main.flex-grow > :is(main, section, div) .iyu-subpage-hero {
  padding-top: 116px !important;
  padding-bottom: var(--e-space-m) !important;
  margin-bottom: 0 !important;
  min-height: 0 !important;
}

@media (max-width: 768px) {
  body.iyu-editorial:not(.iyu-home-page) main.flex-grow > :is(main, section, div) > section:first-child,
  body.iyu-editorial:not(.iyu-home-page) main.flex-grow > :is(main, section, div).iyu-subpage-hero,
  body.iyu-editorial:not(.iyu-home-page) main.flex-grow > :is(main, section, div) .iyu-subpage-hero {
    padding-top: 104px !important;
    padding-bottom: var(--e-space-s) !important;
  }
}

/* ── 30. 다크 잔재 블록 ───────────────────────────────────────────────────
   제품 페이지에는 bg-[#0f1219] 같은 다크 패널 섹션이 남아 있다.
   v3.css 가 배경은 투명으로 돌려놨지만 글래스 규칙의 드롭섀도가 남는다.
   흰 지면 위 전폭 섹션의 그림자는 보이지 않지만 합성 레이어를 만든다. */
/* v3.css 는 이 블록들을 이스케이프한 클래스 선택자
   `body.iyu-elice-inspired main.flex-grow .bg-\[\#0f1219\]` = (0,3,2)
   로 잡는다. 속성 선택자만 쓴 (0,2,1) 로는 밀린다. */
body.iyu-editorial main.flex-grow :is(section, div)[class*="bg-[#0f1219]"],
body.iyu-editorial main.flex-grow :is(section, div)[class*="bg-[#05080f]"],
body.iyu-editorial main.flex-grow :is(section, div)[class*="bg-[#0f131a]"],
body.iyu-editorial main.flex-grow :is(section, div)[class*="bg-[#0a0e18]"],
body.iyu-editorial main.flex-grow :is(section, div)[class*="bg-[#1a1f2e]"] {
  box-shadow: none !important;
  background-color: var(--e-paper-2) !important;
  background-image: none !important;
  border-top: 1px solid var(--e-line) !important;
  border-bottom: 1px solid var(--e-line) !important;
}

/* 내비게이션 드롭다운 — 어두운 패널이 그대로 남아 있었다 */
body.iyu-editorial nav .absolute[class*="bg-obsidian"],
body.iyu-editorial main.flex-grow .absolute[class*="bg-obsidian"] {
  background: var(--e-paper) !important;
  border: 1px solid var(--e-line) !important;
  border-radius: var(--e-radius) !important;
  box-shadow: 0 8px 24px rgba(20, 22, 26, 0.08) !important;
}

/* ══════════════════════════════════════════════════════════════════════════
   §31. 개별 사례 페이지 (cases/stories/*) 토큰 브리지
   ──────────────────────────────────────────────────────────────────────────
   이 8개 페이지는 사이트의 다른 페이지와 계보가 다르다.
   v3.css 도 Next 셸도 쓰지 않고, 자체 헤더/푸터와 assets/case-study.css
   (288줄, 라이트 테마)만으로 서 있는 독립 문서다.

   구조는 이미 깔끔하므로(자체 토큰을 :root 에 정의, 이미 실사 이미지 보유)
   여기서도 컴포넌트를 다시 쓰지 않고 토큰만 갈아끼운다.
   원본은 Inter + indigo(#4f46e5) + teal(#0f9f91) + 푸른 wash(#f6f8ff).
   ══════════════════════════════════════════════════════════════════════════ */
body.iyu-editorial {
  /* case-study.css 가 :root 에 정의한 토큰을 body 에서 덮는다.
     커스텀 프로퍼티는 상속되므로 더 가까운 정의가 이긴다. */
  --ink: var(--e-ink);
  --muted: var(--e-ink-2);
  --line: var(--e-line);
  --accent: var(--e-accent);
  --teal: var(--e-ink-2);
  --paper: var(--e-paper);
  --wash: var(--e-paper-2);
}

/* 본문 폰트 — case-study.css 는 Inter 를 먼저 둔다 */
body.iyu-editorial .case-header,
body.iyu-editorial .case-hero,
body.iyu-editorial .case-shell,
body.iyu-editorial .case-footer {
  font-family: var(--e-sans);
}
body.iyu-editorial :is(.case-hero, .case-shell, .case-footer) :is(h1, h2, h3, h4, p, li, span, a, strong) {
  font-family: var(--e-sans);
}
/* 브랜드 워드마크·언어 토글·키커는 등폭이 의도다 */
body.iyu-editorial :is(.case-brand, .case-language, .case-kicker) {
  font-family: var(--e-mono);
}

/* 히어로 제목 6vw → 이 체계의 스케일로 */
body.iyu-editorial .case-hero h1 {
  font-size: clamp(2rem, 4vw, 3.1rem);
  line-height: 1.24;
  letter-spacing: -0.035em;
  font-weight: 700;
}
@media (max-width: 768px) {
  body.iyu-editorial .case-hero h1 { font-size: clamp(1.75rem, 7.4vw, 2.2rem); line-height: 1.3; }
}

/* 키커 — 대문자 mono 라벨을 러스트 괘선 라벨로 (사이트 전체와 같은 어휘) */
body.iyu-editorial .case-kicker {
  color: var(--e-ink-3);
  font-size: 12px;
  letter-spacing: 0.08em;
  padding-left: 11px;
  position: relative;
  text-transform: none;
}
body.iyu-editorial .case-kicker::before {
  content: "";
  position: absolute;
  left: 0; top: 0.24em;
  width: 3px; height: 0.9em;
  background: var(--e-accent);
}

/* 라운드·그림자 정리 */
body.iyu-editorial :is(.case-media, .case-language, .case-card, .case-panel, .case-figure) {
  border-radius: var(--e-radius) !important;
  box-shadow: none !important;
}
body.iyu-editorial .case-media img,
body.iyu-editorial .case-figure img {
  border-radius: var(--e-radius);
}

/* ── 32. cases · company 페이지 유형 전용 규칙 덮기 ───────────────────────
   v3.css:2074~2125 는 body 에 페이지 유형 클래스를 얹어 특정도를 올린다.
     body.iyu-elice-inspired.iyu-cases-page .iyu-cases-content .group.relative
       = (0,5,1) !important
   내 일반 카드 규칙(0,3,3)으로는 밀린다. 같은 형태로 맞춰 덮는다.

   여기서 하는 일은 다른 페이지와 똑같다 — 큰 그림자와 인디고 테두리를
   1px 괘선으로, 큰 라운드를 3px 로, 남색 그라디언트 패널을 지면색으로. */
body.iyu-editorial.iyu-cases-page .iyu-cases-content .group.relative,
body.iyu-editorial.iyu-cases-page .iyu-cases-content .group.flex,
body.iyu-editorial.iyu-cases-page .iyu-cases-content [class*="aspect-[4/3]"],
body.iyu-editorial.iyu-cases-stories-page .iyu-cases-content [class*="aspect-[4/3]"] {
  background: var(--e-paper) !important;
  border: 1px solid var(--e-line) !important;
  border-color: var(--e-line) !important;
  border-radius: var(--e-radius) !important;
  box-shadow: none !important;
}

/* 사례 목록 안에 남은 자잘한 그림자(번호 배지 등) 일괄 정리 */
body.iyu-editorial.iyu-cases-page .iyu-cases-content *,
body.iyu-editorial.iyu-cases-stories-page .iyu-cases-content * {
  box-shadow: none !important;
}

/* 사례 카드 안의 남색 그라디언트 목업 패널 */
body.iyu-editorial.iyu-cases-page .iyu-cases-content .group.relative [class*="perspective-1000"] {
  background: var(--e-paper-2) !important;
  border: 1px solid var(--e-line) !important;
  box-shadow: none !important;
}

/* 사례 썸네일 위 어두운 그라디언트 오버레이 */
body.iyu-editorial.iyu-cases-page .iyu-cases-content [class*="bg-gradient-to-t"],
body.iyu-editorial.iyu-cases-stories-page .iyu-cases-content [class*="bg-gradient-to-t"] {
  background-image: none !important;
}

/* 썸네일 이미지 — 지면과 붙도록 사이트 공통 규칙과 같게 */
body.iyu-editorial.iyu-cases-stories-page .iyu-cases-content img {
  border-radius: var(--e-radius) !important;
}

/* 히어로 여백 — 유형 클래스가 붙은 (0,3,1) 규칙을 §29 와 같은 값으로 */
body.iyu-editorial.iyu-cases-page .iyu-subpage-hero,
body.iyu-editorial.iyu-certification-page .iyu-subpage-hero,
body.iyu-editorial.iyu-company-page .iyu-subpage-hero {
  padding-top: 116px !important;
  padding-bottom: var(--e-space-m) !important;
  margin-bottom: 0 !important;
}
@media (max-width: 768px) {
  body.iyu-editorial.iyu-cases-page .iyu-subpage-hero,
  body.iyu-editorial.iyu-certification-page .iyu-subpage-hero,
  body.iyu-editorial.iyu-company-page .iyu-subpage-hero {
    padding-top: 104px !important;
    padding-bottom: var(--e-space-s) !important;
  }
}

/* 히어로 제목 — .iyu-cases-page 계열은 (0,3,1) 로 별도 크기를 준다 */
body.iyu-editorial .iyu-cases-page .iyu-subpage-hero h1,
body.iyu-editorial.iyu-cases-page .iyu-subpage-hero h1,
body.iyu-editorial.iyu-certification-page .iyu-subpage-hero h1 {
  font-size: clamp(2rem, 3.6vw, 3.1rem) !important;
  line-height: 1.24 !important;
}
@media (max-width: 768px) {
  body.iyu-editorial .iyu-cases-page .iyu-subpage-hero h1,
  body.iyu-editorial.iyu-cases-page .iyu-subpage-hero h1,
  body.iyu-editorial.iyu-certification-page .iyu-subpage-hero h1 {
    font-size: clamp(1.75rem, 7.4vw, 2.2rem) !important;
    line-height: 1.3 !important;
  }
}

/* ══════════════════════════════════════════════════════════════════════════
   §33. 다크 네온 다이어그램 재색상화 (명도 반전 방식)
   ──────────────────────────────────────────────────────────────────────────
   6개 페이지에 인라인 <svg> 개념도가 16개 있고 전부
   `background:#0b0f19` 에 시안 글로우(#00d2ff 76회) 팔레트다.

   처음에는 색을 하나씩 열거해 매핑했다. 그런데 실제로 쓰인 색이
   78종이었고 그중 40종 이상을 빠뜨려, u-cmms 같은 페이지에는
   흰 배경 위에 어두운 도형이 그대로 남았다.

   이 그림들은 전부 "어두운 바탕 + 밝은 글씨" 구조다.
   따라서 열거가 아니라 명도 반전이 정확한 변환이다.
     invert(1)        어두운 바탕 → 밝게, 밝은 글씨 → 어둡게
     hue-rotate(180)  반전으로 뒤집힌 색상환을 제자리로
     saturate(.3)     남은 네온기를 걷어 이 체계의 무채색에 맞춘다
   색이 몇 종이든 빠짐없이 처리되고, 새 다이어그램이 추가돼도 그대로 동작한다.
   ══════════════════════════════════════════════════════════════════════════ */
/* ※ 배경을 흰색으로 덮으면 안 된다. invert 가 그 흰색을 다시 검게 만든다.
   원래의 #0b0f19 를 그대로 두어야 반전 결과가 밝은 지면이 된다.
   (실제로 배경을 흰색으로 바꿔놓고 반전을 걸어 두 규칙이 서로 싸웠다) */
body.iyu-editorial svg[style*="#0b0f19"],
body.iyu-editorial svg[style*="#0B0F19"] {
  border: 0.8px solid var(--e-line);
  border-radius: var(--e-radius);
  filter: invert(1) hue-rotate(180deg) saturate(0.28) brightness(1.02) contrast(0.97);
}

/* 다이어그램 안 텍스트는 본문 서체로 */
body.iyu-editorial svg[style*="#0b0f19"] text,
body.iyu-editorial svg[style*="#0B0F19"] text {
  font-family: var(--e-sans) !important;
}

/* ══════════════════════════════════════════════════════════════════════════
   §34. 실제 화면을 보고 잡은 것들
   ──────────────────────────────────────────────────────────────────────────
   수치 검증만으로는 드러나지 않던 문제들. 전부 눈으로 확인하고 고쳤다.
   ══════════════════════════════════════════════════════════════════════════ */

/* 34-1. 사례 카드 사진이 카드 안쪽에서 여백을 두고 떠 있었다.
   카드 <a> 에 padding 이 걸려 있어 사진이 테두리에 닿지 않았고,
   그래서 "끼워 넣은 그림"처럼 보였다. 카드가 사진으로 시작하게 만든다. */
body.iyu-editorial .iyu-home-cases .grid > div > a,
body.iyu-editorial main.flex-grow > :is(main, section, div) .iyu-home-cases .grid > div > a {
  padding: 0 !important;
  overflow: hidden !important;
}
body.iyu-editorial .iyu-home-cases .e-card-figure {
  width: 100%;
  margin: 0;
  border-bottom: 1px solid var(--e-line);
}
body.iyu-editorial .iyu-home-cases .grid > div > a > .p-8 {
  padding: 20px !important;
}

/* 34-2. 알약형 배지.
   §7 은 히어로 안쪽만 잡고 있어 "Integrated Blueprint", "Why MES?",
   "HARDWARE INFRASTRUCTURE" 같은 섹션 배지는 연파랑 알약 그대로 남아 있었다.
   사이트 전체에서 같은 어휘(러스트 괘선 + 소문자 라벨)로 통일한다. */
/* ※ 배지 안에는 8px 짜리 상태 점(span.h-2.w-2.rounded-full)이 들어 있다.
   이것까지 잡으면 점이 막대로 변해 배지 앞에 줄이 두 개 생긴다.
   크기 유틸리티가 붙은 요소는 제외한다. */
body.iyu-editorial main.flex-grow :is(div, span).inline-flex[class*="rounded-full"]:not([class*="h-2"]):not([class*="w-2"]):not([class*="h-1"]):not([class*="h-3"]),
body.iyu-editorial main.flex-grow :is(div, span).inline-block[class*="rounded-full"]:not([class*="h-2"]):not([class*="w-2"]):not([class*="h-1"]):not([class*="h-3"]) {
  border-radius: 0 !important;
  background: transparent !important;
  border: 0 !important;
  border-left: 3px solid var(--e-accent) !important;
  padding: 1px 0 1px 11px !important;
  color: var(--e-ink-3) !important;
  font-size: 12px !important;
  font-weight: 600 !important;
  letter-spacing: 0.04em !important;
  text-transform: none !important;
  backdrop-filter: none !important;
  box-shadow: none !important;
}
body.iyu-editorial main.flex-grow :is(div, span).inline-flex[class*="rounded-full"] > span:not([class*="h-2"]):not([class*="w-2"]),
body.iyu-editorial main.flex-grow :is(div, span).inline-block[class*="rounded-full"] > span:not([class*="h-2"]):not([class*="w-2"]) {
  color: var(--e-ink-3) !important;
  font-size: 12px !important;
  letter-spacing: 0.04em !important;
}
body.iyu-editorial main.flex-grow :is(div, span).inline-flex[class*="rounded-full"] svg {
  width: 13px !important;
  height: 13px !important;
  color: var(--e-accent) !important;
}
/* 배지 안의 애니메이션 점은 이미 §3-4 에서 껐다 */

/* 34-3. 팔레트 밖에 남아 있던 초록 "Q" 글리프 (U-QMS 카드).
   인라인 style 로 색이 박혀 있어 클래스 선택자로는 잡히지 않았다. */
body.iyu-editorial .iyu-home-solutions [style*="color"],
body.iyu-editorial .iyu-home-solutions [style*="#0"],
body.iyu-editorial .iyu-home-solutions [style*="#1"] {
  color: var(--e-ink-3) !important;
}

/* 34-4. 내비게이션에 검은 사각형이 남던 문제.
   드롭다운 트리거의 배경이 지면과 대비돼 잔상처럼 보였다. */
body.iyu-editorial nav a[class*="bg-obsidian"],
body.iyu-editorial nav [class*="bg-obsidian"]:not(.absolute) {
  background: transparent !important;
  color: var(--e-ink-2) !important;
}

/* 34-5. 고객사 로고 스트립이 거의 안 보일 만큼 옅었다 */
body.iyu-editorial .v3-logo-track .v3-logo-item {
  color: var(--e-ink-3) !important;
}

/* 배지 앞 상태 점은 숨긴다. 왼쪽 러스트 괘선이 이미 같은 역할을 한다. */
body.iyu-editorial main.flex-grow [class*="rounded-full"] > span.relative.flex[class*="h-2"],
body.iyu-editorial main.flex-grow [class*="rounded-full"] > span.flex[class*="h-2"][class*="w-2"] {
  display: none !important;
}

/* ── 35. 대비 안전망 ──────────────────────────────────────────────────────
   이번 작업에서 "어두운 배경 + 어두운 글씨"가 세 번 나왔다.
     · 히어로 주 CTA   (탭 타깃 규칙이 버튼까지 잡음)
     · nav 고객지원    (href 로만 잡아 메뉴 항목까지 물듦)
     · nav 문의하기    (위와 같은 규칙)
   전부 특정도 싸움에서 색만 바뀌고 배경은 남아 생긴 문제다.
   잉크 배경을 칠하는 곳에서는 글자색을 항상 함께 지정해 재발을 막는다. */
/* ※ 다크 히어로에서는 이 버튼이 '흰 배경 + 어두운 글씨'로 반전된다.
   안전망을 그대로 두면 흰 배경에 흰 글씨가 되므로 히어로는 제외한다.
   (실제로 그렇게 됐다 — 안전망이 버그가 된 사례) */
body.iyu-editorial a[class*="bg-cyan"]:not(.iyu-home-hero *),
body.iyu-editorial nav.v3-nav-scrolled a[href="/cooperation/"][class*="bg-titanium"],
body.iyu-editorial .uq-action-primary,
body.iyu-editorial .ai-action-primary {
  color: #fff !important;
  -webkit-text-fill-color: #fff !important;
}
body.iyu-editorial a[class*="bg-cyan"] svg,
body.iyu-editorial nav a[href$="/cooperation/"][class*="bg-titanium"] svg {
  color: #fff !important;
}

/* ── 36. 글리치 워드마크 · 푸터 대비 ──────────────────────────────────────
   nav 와 푸터의 "IYULAB" 은 빨강/시안 사본을 ±1px 어긋나게 겹친
   RGB 스플릿(글리치) 효과다. 다크 배경에서는 사이버펑크 연출이지만
   밝은 지면에서는 글자 주변 색 번짐으로만 보인다. 고스트 레이어를 지운다. */
body.iyu-editorial nav [class*="text-red-500"][class*="absolute"],
body.iyu-editorial nav [class*="text-cyan"][class*="absolute"],
body.iyu-editorial footer [class*="text-red-500"][class*="absolute"],
body.iyu-editorial footer [class*="text-cyan"][class*="absolute"] {
  display: none !important;
}
body.iyu-editorial nav .relative[class*="text-white"],
body.iyu-editorial footer .relative[class*="text-white"] {
  color: var(--e-ink) !important;
}

/* 푸터 본문이 4.41:1 로 AA(4.5) 를 아슬하게 못 넘었다 */
body.iyu-editorial footer,
body.iyu-editorial footer :is(p, li, span, a, small, div) {
  color: var(--e-ink-2) !important;
}
body.iyu-editorial footer :is(h2, h3, h4, strong, b) {
  color: var(--e-ink) !important;
}
body.iyu-editorial footer a:hover { color: var(--e-accent) !important; }
/* 푸터에 남은 인디고 */
body.iyu-editorial footer [class*="text-cyan"]:not(.absolute),
body.iyu-editorial footer [class*="text-indigo"] {
  color: var(--e-accent) !important;
}

/* 개념도 화살표가 #a7b0c6 로 너무 옅었다 */
body.iyu-editorial .iyu-bp .arrow { color: var(--e-ink-3); }

/* Answer Hub 검토 메타 (검토자·검토일) 가 4.38:1 로 AA 를 못 넘었다 */
body.iyu-editorial .iyu-answer-hub :is(.iyu-answer-review, .iyu-answer-meta, footer, small),
body.iyu-editorial .iyu-answer-hub [class*="review"],
body.iyu-editorial .iyu-answer-hub [class*="meta"] {
  color: var(--e-ink-3) !important;
}

/* u-qms / u-ai 콘솔 안의 10px 라벨이 3.79:1 로 AA 미달이었다.
   원본 색(#768196, #6c778b)이 다크 배경 기준이라 밝은 지면에서 부족하다. */
body.iyu-editorial .uq-console-summary small,
body.iyu-editorial .uq-console-row span:last-child,
body.iyu-editorial .ai-console-summary small,
body.iyu-editorial .ai-console-row span:last-child,
body.iyu-editorial :is(.uq-page, .ai-page) small {
  color: var(--e-ink-3) !important;
}

/* u-qms / u-ai 의 자체 배지(.uq-badge / .ai-badge)도 알약 + 초록 점이었다.
   사이트 전체와 같은 어휘(러스트 괘선 + 소문자 라벨)로 맞춘다. */
body.iyu-editorial :is(.uq-badge, .ai-badge) {
  border-radius: 0 !important;
  border: 0 !important;
  border-left: 3px solid var(--e-accent) !important;
  background: transparent !important;
  padding: 1px 0 1px 11px !important;
  color: var(--e-ink-3) !important;
  font-size: 12px !important;
  letter-spacing: 0.04em !important;
  text-transform: none !important;
  box-shadow: none !important;
}
body.iyu-editorial :is(.uq-badge, .ai-badge)::before {
  display: none !important;
}

/* ══════════════════════════════════════════════════════════════════════════
   §37. Palantir 벤치마킹 레이어
   ──────────────────────────────────────────────────────────────────────────
   palantir.com 을 실제로 열어 계산된 스타일을 측정해 도출한 값이다.
   디자인 언어만 참고했고 그들의 서체·자산·문구는 쓰지 않는다.

   실측 (2026-08, palantir.com)
     서체    Alliance No.2 (디스플레이) / No.1 (본문)   ※ 상용, 사용 불가
     H1      80px / line-height 78px(0.975) / letter-spacing -3.4px / weight 400
     잉크    #1e2124        보조 텍스트 #767676
     지면    #ffffff, 섹션 교차 #f3f3f3      괘선 #dbdbdb
     버튼    12px UPPERCASE / border 0.8px / radius 4px / padding 6px 18px
     섹션 인덱스  "/0.1" 18px #767676
     액센트  없음 — 사실상 완전 모노크롬

   가장 큰 차이는 색이 아니라 조판이었다.
   이 사이트는 굵게(700) 크게였고, 팔란티어는 크되 가볍고(400) 자간이 좁다.
   한글은 라틴보다 글자가 조밀해 400 이면 힘이 빠지므로 디스플레이는 500 을 쓴다.
   ══════════════════════════════════════════════════════════════════════════ */

body.iyu-editorial {
  /* 따뜻한 회색 → 차가운 중립 회색. 러스트 액센트는 걷어낸다.
     팔란티어의 인상은 "색을 쓰지 않는 것"에서 나온다. */
  --e-ink:        #1e2124;
  --e-ink-2:      #4c5157;   /* 8.01:1 */
  --e-ink-3:      #5f6469;   /* 5.98:1 — 12px 캡션에도 AA */
  --e-ink-4:      #8b9096;   /* 3.22:1 — 아이콘·괘선 등 비텍스트 전용 */

  --e-paper:      #ffffff;
  --e-paper-2:    #f3f3f3;
  --e-paper-3:    #e9e9e9;

  --e-line:       #dcdcdc;
  --e-line-2:     #c6c6c6;

  /* 액센트는 남기되 표면적을 최소로. 링크 hover 와 미세 강조에만 쓴다. */
  --e-accent:     #1e2124;
  --e-accent-2:   #767676;
  --e-accent-wash:#f3f3f3;

  --e-radius:     2px;
  --e-radius-lg:  4px;

  /* 여백을 더 크게 — 팔란티어의 인상 절반은 빈 공간이다 */
  --e-space-s:    88px;
  --e-space-m:    136px;
  --e-space-l:    184px;
}

/* ── 37-1. 디스플레이 조판 ────────────────────────────────────────────────
   굵고 촘촘하던 제목을 크고 가볍고 자간이 좁은 조판으로 바꾼다.
   line-height 를 1 아래로 내리는 것이 핵심이다. */
body.iyu-editorial main.flex-grow :is(h1, h2) {
  font-weight: 500 !important;
  letter-spacing: -0.038em !important;
  line-height: 1.04 !important;
  color: var(--e-ink) !important;
}
body.iyu-editorial main.flex-grow h3 {
  font-weight: 500 !important;
  letter-spacing: -0.022em !important;
}

/* 히어로 제목 — 팔란티어는 80px. 본문 폭에 맞춰 clamp 로 */
body.iyu-editorial main.flex-grow > :is(main, section, div) .iyu-home-hero h1 {
  font-size: clamp(2.6rem, 5.4vw, 4.75rem) !important;
  line-height: 1.0 !important;
  letter-spacing: -0.042em !important;
  font-weight: 500 !important;
  max-width: 14em;
}
body.iyu-editorial main.flex-grow > :is(main, section, div) :is(.iyu-subpage-hero, .uq-hero, .ai-hero) h1,
body.iyu-editorial main.flex-grow > :is(.iyu-subpage-hero, .uq-hero, .ai-hero) h1 {
  font-size: clamp(2.2rem, 4.4vw, 3.75rem) !important;
  line-height: 1.02 !important;
  letter-spacing: -0.04em !important;
  font-weight: 500 !important;
}
/* 섹션 제목 */
body.iyu-editorial main.flex-grow > :is(main, section, div) h2 {
  font-size: clamp(1.75rem, 2.9vw, 2.6rem) !important;
}

/* 본문은 반대로 조금 크고 여유 있게 */
body.iyu-editorial main.flex-grow :is(p, li) {
  letter-spacing: -0.011em;
  line-height: 1.68;
}

/* ── 37-2. 버튼 — 12px 대문자 + 0.8px 헤어라인 ────────────────────────────
   팔란티어의 CTA 는 채움 버튼이 아니라 얇은 테두리의 작은 라벨이다. */
body.iyu-editorial main.flex-grow > :is(main, section, div) a.bg-cyan,
body.iyu-editorial main.flex-grow > :is(main, section, div) a[class*="bg-cyan"],
body.iyu-editorial main.flex-grow > :is(main, section, div) a[class*="bg-cyan"][class*="font-bold"][class*="flex"][class*="items-center"] {
  background: var(--e-ink) !important;
  color: #fff !important;
  border: 0.8px solid var(--e-ink) !important;
  border-radius: var(--e-radius-lg) !important;
  padding: 11px 22px !important;
  font-size: 12px !important;
  font-weight: 500 !important;
  letter-spacing: 0.02em !important;
  text-transform: uppercase !important;
}
body.iyu-editorial main.flex-grow > :is(main, section, div) a.border,
body.iyu-editorial main.flex-grow > :is(main, section, div) a[class*="border-titanium"] {
  background: transparent !important;
  color: var(--e-ink) !important;
  border: 0.8px solid var(--e-ink) !important;
  border-radius: var(--e-radius-lg) !important;
  padding: 11px 22px !important;
  font-size: 12px !important;
  font-weight: 500 !important;
  letter-spacing: 0.02em !important;
  text-transform: uppercase !important;
}
body.iyu-editorial main.flex-grow a.bg-cyan:hover { background: #000 !important; border-color: #000 !important; }
body.iyu-editorial main.flex-grow a.border:hover  { background: var(--e-ink) !important; color: #fff !important; }

/* 한글 CTA 는 대문자 변환이 의미 없고 자간만 벌어진다 — 한글은 원래대로 */
body.iyu-editorial main.flex-grow a:is(.bg-cyan, .border):lang(ko) { letter-spacing: 0 !important; }

/* ── 37-3. 섹션 라벨 — 러스트 괘선을 대문자 소형 라벨로 ────────────────── */
body.iyu-editorial main.flex-grow span.font-mono[class*="tracking-wid"],
body.iyu-editorial main.flex-grow span[class*="uppercase"][class*="tracking-wid"],
body.iyu-editorial main.flex-grow :is(div, span).inline-flex[class*="rounded-full"]:not([class*="h-2"]):not([class*="w-2"]):not([class*="h-1"]):not([class*="h-3"]),
body.iyu-editorial main.flex-grow :is(div, span).inline-block[class*="rounded-full"]:not([class*="h-2"]):not([class*="w-2"]),
body.iyu-editorial :is(.uq-badge, .ai-badge) {
  border-left: 0 !important;
  padding-left: 0 !important;
  color: var(--e-ink-3) !important;
  font-size: 11px !important;
  font-weight: 500 !important;
  letter-spacing: 0.1em !important;
  text-transform: uppercase !important;
}
body.iyu-editorial main.flex-grow span.font-mono[class*="tracking-wid"]::before,
body.iyu-editorial main.flex-grow span[class*="uppercase"][class*="tracking-wid"]::before {
  display: none !important;
}

/* ── 37-4. 카드·괘선 ─────────────────────────────────────────────────────
   0.8px 헤어라인. 1px 보다 한 단 얇은 선이 이 인상의 큰 부분이다. */
body.iyu-editorial main.flex-grow > :is(main, section, div) [class*="rounded"],
body.iyu-editorial .iyu-home-cases .grid > div > a,
body.iyu-editorial .iyu-subpage-content [class*="rounded-2xl"] {
  border-radius: var(--e-radius) !important;
}
body.iyu-editorial main.flex-grow > :is(main, section, div) > section + section {
  border-top: 0.8px solid var(--e-line) !important;
}

/* ── 37-5. 다크 시네마틱 히어로 ───────────────────────────────────────────
   팔란티어에서 가장 알아보기 쉬운 장치. 전폭 어두운 이미지 위에
   가벼운 대형 활자를 얹는다. 마크업은 그대로 두고 CSS 로만 재배치한다.
     기존: [텍스트 | 사진] 2단
     변경: 사진을 배경으로 깔고 텍스트를 그 위에

   사진은 그대로 쓰되 어둡게 눌러 활자 대비를 확보한다(흰 글씨 17.8:1). */
body.iyu-editorial .iyu-home-hero {
  position: relative !important;
  background: #16181a !important;
  border-bottom: 0 !important;
  padding-top: 168px !important;
  padding-bottom: 132px !important;
  overflow: hidden !important;
  isolation: isolate;
}

/* 사진을 배경 레이어로.
   주의 1: .iyu-hero-visual 은 max-w-7xl 컨테이너 안에 있다. inset:0 을 주면
           섹션이 아니라 그 컨테이너를 기준으로 잡혀 전폭이 되지 않는다.
           100vw 로 펴고 중앙 정렬로 되돌린다.
   주의 2: z-index 0 이면 위치 지정이 없는 형제(텍스트)보다 위에 그려진다.
           음수로 내려 확실히 배경이 되게 한다. */
body.iyu-editorial .iyu-home-hero .iyu-hero-visual {
  position: absolute !important;
  top: 0 !important;
  bottom: 0 !important;
  left: 50% !important;
  width: 100vw !important;
  max-width: 100vw !important;
  transform: translateX(-50%) !important;
  z-index: 0 !important;
  margin: 0 !important;
  padding: 0 !important;
  pointer-events: none;
}
body.iyu-editorial .iyu-home-hero .e-hero,
body.iyu-editorial .iyu-home-hero .e-hero-figure {
  height: 100% !important;
  aspect-ratio: auto !important;
  border: 0 !important;
  border-radius: 0 !important;
  margin: 0 !important;
}
body.iyu-editorial .iyu-home-hero .e-hero-figure img {
  height: 100% !important;
  width: 100% !important;
  object-fit: cover !important;
  object-position: center 58%;
  /* 활자가 얹히는 자리라 눌러 준다 */
  filter: grayscale(0.35) brightness(0.42) contrast(1.06);
}
/* 아래로 갈수록 짙어지는 그라디언트 — 하단 텍스트 대비 확보 */
body.iyu-editorial .iyu-home-hero .iyu-hero-visual::after {
  content: "";
  position: absolute;
  inset: 0;
  background: linear-gradient(180deg, rgba(22,24,26,.55) 0%, rgba(22,24,26,.35) 38%, rgba(22,24,26,.88) 100%);
}

/* 텍스트 컬럼을 전폭으로. 텍스트 블록에 위치 지정을 줘야
   배경 레이어 위로 올라온다(z-index auto 로는 안 올라간다). */
body.iyu-editorial .iyu-home-hero .grid {
  display: block !important;
}
body.iyu-editorial .iyu-home-hero .grid > div:first-child {
  position: relative !important;
  z-index: 2 !important;
}
/* em 은 이 요소의 16px 기준으로 계산돼 21em = 336px 밖에 안 됐다.
   76px 짜리 제목이 네 줄로 쪼개졌다. 뷰포트 기준으로 잡는다 — 단, 데스크톱
   제목 크기 얘기다. 가드 없이 전 폭에 걸면 모바일에서 62%가 390px 화면의
   222px 남짓이 되어, 제목 아래 "빅데이터 · 산업용 AI · 실시간 모니터링"
   같은 gap-8 flex 줄이 폭이 모자라 단어 중간에서 줄바꿈된다. */
@media (min-width: 1024px) {
  body.iyu-editorial .iyu-home-hero .grid > div:first-child {
    max-width: min(62%, 760px) !important;
  }
}
/* 섹션 자체가 배경 레이어의 기준이 되도록 */
body.iyu-editorial .iyu-home-hero > .max-w-7xl,
body.iyu-editorial .iyu-home-hero > div[class*="max-w-"] {
  position: static !important;
}

/* 어두운 바탕 위 활자 */
body.iyu-editorial .iyu-home-hero :is(h1, h2) { color: #ffffff !important; }
body.iyu-editorial .iyu-home-hero p,
body.iyu-editorial .iyu-home-hero p strong { color: #cfd2d5 !important; }
body.iyu-editorial .iyu-home-hero .inline-flex[class*="rounded-full"],
body.iyu-editorial .iyu-home-hero .inline-flex[class*="rounded-full"] span {
  color: #9ea3a8 !important;
}
/* 하단 신뢰 배지 */
body.iyu-editorial .iyu-home-hero .mt-12.pt-8 {
  border-top: 0.8px solid rgba(255,255,255,.18) !important;
}
body.iyu-editorial .iyu-home-hero .mt-12.pt-8 span { color: #b9bcc0 !important; }
body.iyu-editorial .iyu-home-hero .mt-12.pt-8 svg  { color: #8d9297 !important; }

/* 히어로 안 버튼은 반전 */
body.iyu-editorial .iyu-home-hero a[class*="bg-cyan"] {
  background: #ffffff !important;
  color: #16181a !important;
  border-color: #ffffff !important;
}
body.iyu-editorial .iyu-home-hero a[class*="bg-cyan"] svg { color: #16181a !important; }
body.iyu-editorial .iyu-home-hero a[class*="bg-cyan"]:hover { background: #e8e8e8 !important; border-color:#e8e8e8 !important; }
body.iyu-editorial .iyu-home-hero a.border {
  color: #ffffff !important;
  border-color: rgba(255,255,255,.45) !important;
}
body.iyu-editorial .iyu-home-hero a.border:hover {
  background: #ffffff !important;
  color: #16181a !important;
  border-color: #ffffff !important;
}

/* 다크 히어로 위 내비게이션은 투명하게 시작 */
body.iyu-editorial.iyu-home-page nav.fixed:not(.v3-nav-scrolled) {
  background: transparent !important;
  border-bottom-color: transparent !important;
  backdrop-filter: none !important;
}
body.iyu-editorial.iyu-home-page nav.fixed:not(.v3-nav-scrolled) :is(a, span, div) { color: #e8e8e8 !important; }
body.iyu-editorial.iyu-home-page nav.fixed:not(.v3-nav-scrolled) a[href="/cooperation/"][class*="bg-titanium"] {
  background: #ffffff !important;
  color: #16181a !important;
}

@media (max-width: 1023.98px) {
  body.iyu-editorial .iyu-home-hero { padding-top: 128px !important; padding-bottom: 88px !important; }
  body.iyu-editorial .iyu-home-hero .iyu-hero-visual { margin-top: 0 !important; }
}

/* ── 37-6. 다크 히어로 활자 색 — 특정도 정리 ──────────────────────────────
   §37-1 의 `main.flex-grow :is(h1,h2){color:var(--e-ink)}` 가
   히어로 전용 흰색 규칙보다 요소 수가 많아 이겼다. 어두운 사진 위에
   잉크색 제목이 얹혀 거의 보이지 않았다. 같은 경로로 맞춰 덮는다. */
body.iyu-editorial main.flex-grow > :is(main, section, div) .iyu-home-hero :is(h1, h2),
body.iyu-editorial main.flex-grow > :is(main, section, div) .iyu-home-hero h1 span,
body.iyu-editorial main.flex-grow > :is(main, section, div) .iyu-home-hero h1 .text-transparent {
  color: #ffffff !important;
  -webkit-text-fill-color: #ffffff !important;
  background: none !important;
  background-image: none !important;
}
body.iyu-editorial main.flex-grow > :is(main, section, div) .iyu-home-hero p,
body.iyu-editorial main.flex-grow > :is(main, section, div) .iyu-home-hero p strong {
  color: #cfd2d5 !important;
}
body.iyu-editorial main.flex-grow > :is(main, section, div) .iyu-home-hero [class*="text-muted"] {
  color: #b9bcc0 !important;
}

/* 히어로 안 라벨 */
body.iyu-editorial main.flex-grow > :is(main, section, div) .iyu-home-hero
  :is(div, span)[class*="rounded-full"],
body.iyu-editorial main.flex-grow > :is(main, section, div) .iyu-home-hero
  :is(div, span)[class*="rounded-full"] span {
  color: #a7abb0 !important;
}

/* 내비게이션 — 다크 히어로 구간에서는 투명, 스크롤 후 흰색.
   v3.js 가 .v3-nav-scrolled 를 붙였다 뗐다 한다. */
body.iyu-editorial.iyu-home-page nav.fixed {
  background: rgba(22, 24, 26, 0.72) !important;
  border-bottom-color: rgba(255, 255, 255, 0.12) !important;
  backdrop-filter: saturate(1.1) blur(14px);
  -webkit-backdrop-filter: saturate(1.1) blur(14px);
}
body.iyu-editorial.iyu-home-page nav.fixed :is(a, span, div):not([class*="bg-"]) {
  color: #e8e8e8 !important;
}
body.iyu-editorial.iyu-home-page nav.fixed a[href="/cooperation/"][class*="bg-titanium"] {
  background: #ffffff !important;
  color: #16181a !important;
  border-color: #ffffff !important;
}
body.iyu-editorial.iyu-home-page nav.fixed.v3-nav-scrolled {
  background: rgba(255, 255, 255, 0.96) !important;
  border-bottom-color: var(--e-line) !important;
}
body.iyu-editorial.iyu-home-page nav.fixed.v3-nav-scrolled :is(a, span, div):not([class*="bg-"]) {
  color: var(--e-ink-2) !important;
}
body.iyu-editorial.iyu-home-page nav.fixed.v3-nav-scrolled a[href="/cooperation/"][class*="bg-titanium"] {
  background: var(--e-ink) !important;
  color: #ffffff !important;
  border-color: var(--e-ink) !important;
}
/* 로고 워드마크 */
body.iyu-editorial.iyu-home-page nav.fixed:not(.v3-nav-scrolled) .relative[class*="text-white"] {
  color: #ffffff !important;
}

/* 다크 히어로 위 버튼 반전 — §37-2 의 채움 버튼 규칙이 특정도가 높아
   흰 배경 반전이 밀렸다. 같은 경로로 맞춘다. */
body.iyu-editorial main.flex-grow > :is(main, section, div) .iyu-home-hero a[class*="bg-cyan"],
body.iyu-editorial main.flex-grow > :is(main, section, div) .iyu-home-hero a[class*="bg-cyan"][class*="font-bold"][class*="flex"][class*="items-center"] {
  background: #ffffff !important;
  color: #16181a !important;
  border-color: #ffffff !important;
}
body.iyu-editorial main.flex-grow > :is(main, section, div) .iyu-home-hero a[class*="bg-cyan"] svg { color: #16181a !important; }
body.iyu-editorial main.flex-grow > :is(main, section, div) .iyu-home-hero a.border {
  background: transparent !important;
  color: #ffffff !important;
  border-color: rgba(255,255,255,.45) !important;
}
body.iyu-editorial main.flex-grow > :is(main, section, div) .iyu-home-hero a.border:hover {
  background: #ffffff !important; color: #16181a !important; border-color:#ffffff !important;
}

/* 제목 폭 — 컬럼 안에서 두 줄로 떨어지게 */
body.iyu-editorial main.flex-grow > :is(main, section, div) .iyu-home-hero h1 {
  max-width: none !important;
}

/* 사진 크롭 — 천장이 아니라 설비가 보이는 높이로 */
body.iyu-editorial .iyu-home-hero .e-hero-figure img {
  object-position: center 46% !important;
  filter: grayscale(0.3) brightness(0.46) contrast(1.05) !important;
}

/* 다크 히어로 반전 버튼 — 글자색을 fill 까지 명시해 안전망과 충돌하지 않게 */
body.iyu-editorial main.flex-grow > :is(main, section, div) .iyu-home-hero a[class*="bg-cyan"],
body.iyu-editorial main.flex-grow > :is(main, section, div) .iyu-home-hero a[class*="bg-cyan"] * {
  color: #16181a !important;
  -webkit-text-fill-color: #16181a !important;
}
body.iyu-editorial main.flex-grow > :is(main, section, div) .iyu-home-hero a.border,
body.iyu-editorial main.flex-grow > :is(main, section, div) .iyu-home-hero a.border * {
  color: #ffffff !important;
  -webkit-text-fill-color: #ffffff !important;
}
body.iyu-editorial main.flex-grow > :is(main, section, div) .iyu-home-hero a.border:hover,
body.iyu-editorial main.flex-grow > :is(main, section, div) .iyu-home-hero a.border:hover * {
  color: #16181a !important;
  -webkit-text-fill-color: #16181a !important;
}

/* 사진이 거의 검게 눌려 현장이 안 보였다. 밝기를 올리고 오버레이를 얇게. */
body.iyu-editorial .iyu-home-hero .e-hero-figure img {
  filter: grayscale(0.22) brightness(0.62) contrast(1.04) !important;
}
body.iyu-editorial .iyu-home-hero .iyu-hero-visual::after {
  background: linear-gradient(100deg,
    rgba(18,20,22,.86) 0%,
    rgba(18,20,22,.66) 42%,
    rgba(18,20,22,.30) 100%) !important;
}

/* ── 37-7. 다크 히어로 배경 — 특정도 정리 ────────────────────────────────
   §5 의 `main.flex-grow > :is(main,section,div) > section {background:var(--e-paper)}`
   가 (0,2,4) 라 히어로의 (0,2,1) 어두운 배경을 이겼다.
   사진과 오버레이가 덮고 있어 눈으로는 멀쩡해 보였지만, 실제로는
   흰 배경 위에 흰 글씨였다 — 이미지 로딩이 실패하면 글이 사라진다.
   대비 측정에서 ratio 1.00 으로 잡혀 드러났다. */
body.iyu-editorial main.flex-grow > :is(main, section, div) > section.iyu-home-hero,
body.iyu-editorial main.flex-grow > :is(main, section, div) section.iyu-home-hero {
  background: #16181a !important;
  background-color: #16181a !important;
  background-image: none !important;
  border-bottom: 0 !important;
}
/* 로케일 토글도 다크 히어로 위에서는 반전 */
body.iyu-editorial.iyu-home-page nav.fixed:not(.v3-nav-scrolled) .iyu-locale-toggle {
  background: rgba(255,255,255,.12) !important;
  border-color: rgba(255,255,255,.28) !important;
  color: #e8e8e8 !important;
}
body.iyu-editorial.iyu-home-page nav.fixed:not(.v3-nav-scrolled) .iyu-locale-toggle * {
  color: #e8e8e8 !important;
}

/* ── 37-8. 홈 내비게이션은 항상 다크 ──────────────────────────────────────
   v3.js 가 .v3-nav-scrolled 를 스크롤 0 에서도 붙여 두는 경우가 있어
   "히어로 위에서는 투명, 스크롤하면 흰색" 방식은 상태가 어긋난다.
   팔란티어처럼 떠 있는 어두운 바를 항상 유지해 상태 의존을 없앤다.
   흰 본문 위에서도 어두운 바는 자연스럽게 읽힌다. */
body.iyu-editorial.iyu-home-page nav.fixed,
body.iyu-editorial.iyu-home-page nav.fixed.v3-nav-scrolled,
body.iyu-editorial.iyu-home-page nav.fixed[class*="bg-transparent"],
body.iyu-editorial.iyu-home-page nav.fixed[class*="bg-transparent"].v3-nav-scrolled {
  background: rgba(20, 22, 24, 0.92) !important;
  background-color: rgba(20, 22, 24, 0.92) !important;
  border-bottom: 0.8px solid rgba(255, 255, 255, 0.14) !important;
  backdrop-filter: saturate(1.1) blur(16px);
  -webkit-backdrop-filter: saturate(1.1) blur(16px);
  box-shadow: none !important;
}
body.iyu-editorial.iyu-home-page nav.fixed :is(a, span, div):not([class*="bg-"]):not(.iyu-locale-toggle) {
  color: #e2e4e6 !important;
}
body.iyu-editorial.iyu-home-page nav.fixed .relative[class*="text-white"],
body.iyu-editorial.iyu-home-page nav.fixed a:hover {
  color: #ffffff !important;
}
body.iyu-editorial.iyu-home-page nav.fixed a[href="/cooperation/"][class*="bg-titanium"],
body.iyu-editorial.iyu-home-page nav.fixed a[href="/cooperation/"][class*="bg-titanium"] * {
  background: #ffffff !important;
  color: #16181a !important;
  -webkit-text-fill-color: #16181a !important;
  border-color: #ffffff !important;
}
body.iyu-editorial.iyu-home-page nav.fixed .iyu-locale-toggle,
body.iyu-editorial.iyu-home-page nav.fixed .iyu-locale-toggle * {
  background: rgba(255,255,255,.10) !important;
  border-color: rgba(255,255,255,.26) !important;
  color: #e2e4e6 !important;
}
/* 드롭다운 패널은 밝게 (내용이 많아 어두우면 읽기 어렵다) */
body.iyu-editorial.iyu-home-page nav.fixed .absolute[class*="bg-obsidian"],
body.iyu-editorial.iyu-home-page nav.fixed div.absolute {
  background: #ffffff !important;
  border: 0.8px solid var(--e-line) !important;
}
body.iyu-editorial.iyu-home-page nav.fixed div.absolute :is(a, span, div) {
  color: var(--e-ink-2) !important;
}

/* 로케일 토글(US/EN)과 링크 화살표가 어두운 바 위에서 1.2:1 로 묻혔다 */
body.iyu-editorial.iyu-home-page nav.fixed .iyu-locale-toggle,
body.iyu-editorial.iyu-home-page nav.fixed .iyu-locale-toggle *,
body.iyu-editorial.iyu-home-page nav.fixed [class*="locale"] * {
  color: #e2e4e6 !important;
  -webkit-text-fill-color: #e2e4e6 !important;
}
body.iyu-editorial.iyu-home-page nav.fixed .iyu-locale-toggle [aria-current="true"],
body.iyu-editorial.iyu-home-page nav.fixed .iyu-locale-toggle .is-active {
  color: #ffffff !important;
  -webkit-text-fill-color: #ffffff !important;
}

/* ── 37-9. 히어로 사진 노출 재조정 ────────────────────────────────────────
   원본 hero-line.webp 의 평균 휘도가 이미 31% 로 어두운 사진이다.
   여기에 brightness(0.62) 와 최대 0.86 오버레이를 겹치니
   합성 결과가 약 11% 까지 떨어져 현장이 보이지 않았다.
   사진은 거의 원본 밝기로 두고, 글자가 놓이는 왼쪽만 눌러 대비를 만든다. */
/* 히어로 사진을 밝고 현대적인 컷으로 교체하면서 평균 휘도가
   31% → 62% 로 두 배가 됐다. 어두운 사진 기준으로 맞춰 둔 노출값을
   그대로 두면 왼쪽 글자 영역의 대비가 무너진다. 다시 계산한 값이다.
     좌(글자 영역) ≈ 12%   흰 글씨 대비 확보
     우(사진 영역) ≈ 32%   현장이 보이는 밝기 */
body.iyu-editorial .iyu-home-hero .e-hero-figure img {
  filter: grayscale(0.18) brightness(0.72) contrast(1.04) !important;
  object-position: center 52% !important;
}
body.iyu-editorial .iyu-home-hero .iyu-hero-visual::after {
  background: linear-gradient(96deg,
    rgba(14,16,18,.86) 0%,
    rgba(14,16,18,.70) 32%,
    rgba(14,16,18,.46) 64%,
    rgba(14,16,18,.34) 100%) !important;
}

/* 로케일 토글 — 배경은 이미 반투명 흰색(rgba(255,255,255,.10))이고
   그 아래가 어두운 nav 다. 따라서 글자는 '밝게' 가 맞다.
   앞서 잉크로 바꿨다가 어두운 바 위 어두운 글씨가 되어 되돌렸다.
   ※ 대비 자동 측정은 반투명 배경을 불투명 흰색으로 오인해 이 자리를
     실패로 보고한다. 실제 합성 배경은 어둡다. */
body.iyu-editorial.iyu-home-page nav.fixed .iyu-locale-toggle,
body.iyu-editorial.iyu-home-page nav.fixed .iyu-locale-toggle *,
body.iyu-editorial.iyu-home-page nav.fixed [class*="locale"],
body.iyu-editorial.iyu-home-page nav.fixed [class*="locale"] * {
  color: #e8e8e8 !important;
  -webkit-text-fill-color: #e8e8e8 !important;
}

/* 히어로 눈썹 라벨이 사진 위에서 2.98:1 이었다 */
body.iyu-editorial main.flex-grow > :is(main, section, div) .iyu-home-hero
  :is(div, span)[class*="rounded-full"],
body.iyu-editorial main.flex-grow > :is(main, section, div) .iyu-home-hero
  :is(div, span)[class*="rounded-full"] span {
  color: #ced2d6 !important;
}

/* ── 38. 사례 상세 페이지 대비 교정 ───────────────────────────────────────
   case-study.css 에 하드코딩된 회색들이 다크 배경 기준이라
   밝은 지면에서 AA(4.5:1) 를 못 넘었다. 실측:
     .case-breadcrumb  #768096 → 3.96:1
     .case-review      #778096 → 3.95:1
     .case-summary span #7a8397 → 3.83:1
   전부 캡션용 잉크(--e-ink-3, 5.98:1)로 올린다. */
body.iyu-editorial :is(.case-breadcrumb, .case-review, .case-summary span),
body.iyu-editorial :is(.case-breadcrumb, .case-review) a {
  color: var(--e-ink-3) !important;
}

/* 인용 강조 블록의 틸 계열도 이 체계의 잉크로 */
body.iyu-editorial .case-summary strong {
  border-left-color: var(--e-ink) !important;
  background: var(--e-paper-2) !important;
  color: var(--e-ink) !important;
}

/* 사례 상세 푸터는 다크 블록이다.
   저작권 줄이 어두운 회색이라 다크 배경에서 2.02:1 로 묻혔다. */
body.iyu-editorial .case-footer,
body.iyu-editorial .case-footer *:not(a) {
  background-color: initial;
  color: #c9ccd0 !important;
}
body.iyu-editorial .case-footer { background: var(--e-ink) !important; }
body.iyu-editorial .case-footer a { color: #ffffff !important; }

/* ══════════════════════════════════════════════════════════════════════════
   §39. Q&A 게시판 (qna-crud.js 주입 스타일 덮기)
   ──────────────────────────────────────────────────────────────────────────
   /qna/ 의 목록·상세·폼은 assets/qna-crud.js 가 런타임에 <style> 로 주입한다.
   시안(#18d7e8, #72f3ff) 액센트에 다크 그라디언트 카드, 999px 알약, 큰 그림자로
   된 옛 테마라 페이지 상단(편집 체계)과 하단(다크 보드)이 갈라져 보였다.

   주입 <style> 은 <head> 끝에 붙어 이 파일보다 뒤에 온다. 같은 특정도로는
   못 이기므로 전부 body.iyu-editorial 을 앞에 붙여 한 단 올린다.
   ══════════════════════════════════════════════════════════════════════════ */

/* 패널·목록·행 → 종이 + 헤어라인 */
body.iyu-editorial .iyu-qna-panel,
body.iyu-editorial .iyu-qna-form-panel,
body.iyu-editorial .iyu-qna-modal-card {
  background: var(--e-paper) !important;
  background-image: none !important;
  border: 0.8px solid var(--e-line) !important;
  border-radius: var(--e-radius) !important;
  box-shadow: none !important;
}
body.iyu-editorial .iyu-qna-list-head {
  background: var(--e-paper-2) !important;
  color: var(--e-ink-3) !important;
  border-bottom: 0.8px solid var(--e-line) !important;
  font-weight: 600 !important;
  letter-spacing: 0.04em;
  text-transform: uppercase;
}
body.iyu-editorial .iyu-qna-row {
  background: var(--e-paper) !important;
  background-image: none !important;
  color: var(--e-ink) !important;
  border-color: var(--e-line) !important;
  border-bottom: 0.8px solid var(--e-line) !important;
  border-radius: var(--e-radius) !important;
  box-shadow: none !important;
}
body.iyu-editorial .iyu-qna-row:hover { background: var(--e-paper-2) !important; }

/* 배지·상태 — 시안 알약을 잉크 괘선 라벨로 */
body.iyu-editorial .iyu-qna-badge,
body.iyu-editorial .iyu-qna-status {
  background: transparent !important;
  border: 0.8px solid var(--e-line-2) !important;
  border-radius: var(--e-radius) !important;
  color: var(--e-ink-2) !important;
  font-weight: 500 !important;
}
body.iyu-editorial .iyu-qna-badge.done,
body.iyu-editorial .iyu-qna-status.is-done {
  background: var(--e-ink) !important;
  border-color: var(--e-ink) !important;
  color: #ffffff !important;
}
body.iyu-editorial .iyu-qna-status.is-warning {
  background: transparent !important;
  border-color: var(--e-ink-3) !important;
  color: var(--e-ink-2) !important;
}

/* 본문 텍스트 계열 */
body.iyu-editorial :is(.iyu-qna-title, .iyu-qna-content, .iyu-qna-answer, .iyu-qna-post-head) {
  color: var(--e-ink) !important;
}
body.iyu-editorial :is(.iyu-qna-author, .iyu-qna-no, .iyu-qna-subhead, .iyu-qna-kicker,
                       .iyu-qna-mobile-meta, .iyu-qna-empty, .iyu-qna-loading) {
  color: var(--e-ink-3) !important;
}

/* 알림 박스 — 색은 유지하되 채도를 낮춰 지면에 맞춘다 */
body.iyu-editorial .iyu-qna-notice {
  background: var(--e-paper-2) !important;
  border: 0.8px solid var(--e-line) !important;
  border-radius: var(--e-radius) !important;
  color: var(--e-ink-2) !important;
}
body.iyu-editorial .iyu-qna-notice-success { border-left: 3px solid var(--e-ink) !important; }
body.iyu-editorial .iyu-qna-notice-warning { border-left: 3px solid var(--e-ink-3) !important; }
body.iyu-editorial .iyu-qna-notice-error   { border-left: 3px solid #a8480b !important; color: var(--e-ink) !important; }

/* 입력·버튼 */
body.iyu-editorial :is(.iyu-qna-form, .iyu-qna-answer-form) :is(input, textarea, select) {
  background: var(--e-paper) !important;
  border: 0.8px solid var(--e-line-2) !important;
  border-radius: var(--e-radius) !important;
  color: var(--e-ink) !important;
}
body.iyu-editorial .iyu-qna-btn {
  border-radius: var(--e-radius) !important;
  border: 0.8px solid var(--e-ink) !important;
  background: var(--e-ink) !important;
  color: #ffffff !important;
  box-shadow: none !important;
  text-transform: uppercase;
  letter-spacing: 0.02em;
  font-size: 12px !important;
}
body.iyu-editorial .iyu-qna-btn[data-variant="ghost"],
body.iyu-editorial .iyu-qna-btn.is-ghost {
  background: transparent !important;
  color: var(--e-ink) !important;
}
body.iyu-editorial .iyu-qna-lock { color: var(--e-ink-3) !important; }

/* 지원사업 안내 페이지로 보내는 인라인 링크.
   같은 키워드를 4개 페이지가 나눠 갖고 있어 어느 것도 그 주제의
   정답 페이지가 되지 못했다. 전용 페이지로 신호를 모은다. */
body.iyu-editorial .iyu-support-link {
  display: inline-flex;
  align-items: center;
  gap: 6px;
  margin-top: 14px;
  padding: 9px 16px;
  border: 0.8px solid var(--e-line-2);
  border-radius: var(--e-radius-lg);
  color: var(--e-ink) !important;
  font-size: 12px;
  font-weight: 500;
  letter-spacing: 0.02em;
  text-transform: uppercase;
}
body.iyu-editorial .iyu-support-link::after { content: " \2197"; }
body.iyu-editorial .iyu-support-link:hover {
  background: var(--e-ink) !important;
  color: #fff !important;
  border-color: var(--e-ink) !important;
}

/* ══════════════════════════════════════════════════════════════════════════
   §40. 아키텍처 개념도 대비 교정 (Lighthouse/axe 실측 반영)
   ──────────────────────────────────────────────────────────────────────────
   §33 은 `background:#0b0f19` 를 가진 '다크' SVG 만 반전한다.
   그런데 홈 아키텍처 섹션(MES·QMS·CMMS 개념도)과 Blueprint 는 원래부터
   밝은 SVG 라 그 대상이 아니었고, 안의 라벨 색이 그대로 남아 있었다.

   Lighthouse 접근성 감사에서 실제로 잡힌 값:
     #8590a8  3.21:1  (작업지시↓ · 실적↑ · 검사값↓ 등 축 라벨)
     #0f9f91  3.29:1  (QMS 피드백 라벨, 그리고 흰 글씨를 얹은 teal 박스)
     #64708a  4.97:1  (Blueprint --mut — 경계선상)
   본문 기준 AA(4.5:1)를 넘도록 잉크 램프로 올린다.
   ══════════════════════════════════════════════════════════════════════════ */

/* 축·보조 라벨 → 캡션 잉크 (5.98:1) */
body.iyu-editorial svg [fill="#8590a8" i],
body.iyu-editorial svg [fill="#64708a" i],
body.iyu-editorial svg text[fill="#0f9f91" i] {
  fill: var(--e-ink-3) !important;
}

/* 흰 글씨를 얹는 teal 코어 박스는 배경을 잉크로 (흰 글씨 대비 3.29 → 16.18) */
body.iyu-editorial svg rect[fill="#0f9f91" i],
body.iyu-editorial svg circle[fill="#0f9f91" i] {
  fill: var(--e-ink) !important;
}
/* 같은 teal 을 쓰는 화살표·연결선은 잉크 램프로 */
body.iyu-editorial svg [stroke="#0f9f91" i] { stroke: var(--e-ink-3) !important; }

/* Blueprint 토큰도 확실히 (인라인 <style> 이 문서 뒤쪽에 있어 밀릴 수 있다) */
body.iyu-editorial .iyu-bp,
body.iyu-editorial div.iyu-bp {
  --mut: var(--e-ink-3) !important;
  --ink: var(--e-ink) !important;
}

/* 카드 키커(INDUSTRIAL AI BOT 등)가 3.81:1 로 AA 미달.
   원인은 색이 아니라 Tailwind 의 opacity-80 이다 —
   --e-ink-4 를 80% 로 깔면 흰 지면 위에서 #7f8387 로 옅어진다.
   불투명도를 되돌리고 캡션 잉크(5.98:1)를 쓴다. */
body.iyu-editorial .iyu-home-solutions .mb-4 > span,
body.iyu-editorial .iyu-home-products .mb-4 > span,
body.iyu-editorial main.flex-grow a.block .mb-4 > span[class*="text-xs"] {
  color: var(--e-ink-3) !important;
  opacity: 1 !important;
}

/* ── 41. 남은 대비 결손 ────────────────────────────────────────────────────
   Lighthouse 접근성 감사에서 세 가지가 남아 있었다. 전부 실제 측정값이다.

   (a) 아이브로우 라벨  #7d8185 on #f3f3f3 = 3.53:1
       색 자체(--e-ink-3, 5.39:1)는 충분한데 유틸리티 opacity-80 이
       배경과 20% 섞으면서 기준 아래로 내려갔다. 색을 바꿀 게 아니라
       투명도를 걷어야 한다.
   (b) As-Is 라벨 · 경고 아이콘  #ff6467 on #f3f3f3 = 2.60:1
       Tailwind red-400 은 어두운 배경 전제 색이다. 밝은 지면용 빨강으로 바꾼다.
       #c0272d = 5.30:1
   (c) 본문 속 링크  링크색과 주변 글자색 대비 2.01:1
       에디토리얼 팔레트가 링크를 본문과 같은 잉크색으로 통일해 버려서
       색만으로는 링크를 구분할 수 없다(WCAG 1.4.1). 밑줄로 구분한다. */

body.iyu-editorial .iyu-answer-hub [class*="opacity-8"],
body.iyu-editorial main [class*="text-cyan"][class*="opacity-8"],
body.iyu-editorial main [class*="uppercase"][class*="opacity-8"] {
  opacity: 1 !important;
  color: var(--e-ink-3) !important;
}

body.iyu-editorial main [class*="text-red-4"],
body.iyu-editorial main [class*="text-red-3"],
body.iyu-editorial main [class*="text-rose-4"] {
  color: #c0272d !important;
}

/* 문단 안의 링크는 밑줄로 구분한다. 카드·버튼처럼 블록으로 쓰인 링크는 제외 */
body.iyu-editorial main :is(p, li, dd, figcaption) > a:not([class*="bg-"]):not(.block) {
  text-decoration: underline !important;
  text-decoration-thickness: 1px !important;
  text-underline-offset: 3px !important;
  text-decoration-color: var(--e-ink-4) !important;
}
body.iyu-editorial main :is(p, li, dd, figcaption) > a:not([class*="bg-"]):not(.block):hover {
  text-decoration-color: var(--e-accent) !important;
}

/* ── 25. 배너 영상 (Key Features 등) ──────────────────────────────────────
   영상을 투명하게 깔고 페이드인하는 방식은 쓰지 않는다. opacity:0 인 미디어는
   브라우저가 "안 보이는 요소"로 보고 로딩을 미뤄, 영영 안 뜨는 경우가 생긴다.
   대신 영상은 항상 불투명하게 두고 그 위에 포스터 이미지를 덮은 뒤,
   첫 프레임이 준비되면 이미지를 걷어낸다. 포스터가 영상의 0번 프레임이라
   걷히는 순간 같은 그림이 그대로 남아 전환이 눈에 띄지 않는다.
   이미지가 박스 크기를 정하고 영상은 그 위 절대배치라 레이아웃 이동(CLS)도 없다. */
body.iyu-editorial .iyu-band-video__stage {
  display: block;
  position: relative;
}
body.iyu-editorial .iyu-band-video__stage video {
  position: absolute;
  inset: 0;
  width: 100%;
  height: 100%;
  object-fit: cover;
  object-position: center 55%;
  border-radius: 0;
}
body.iyu-editorial .iyu-band-video__stage img {
  position: relative;
  z-index: 1;
  transition: opacity .15s linear;
}
body.iyu-editorial .iyu-band-video__stage.is-ready img {
  opacity: 0;
}
@media (prefers-reduced-motion: reduce) {
  body.iyu-editorial .iyu-band-video__stage video { display: none; }
  body.iyu-editorial .iyu-band-video__stage.is-ready img { opacity: 1; }
}

/* ── 26. 업종별 시스템 개념도 ─────────────────────────────────────────────
   같은 데이터를 표와 도면으로 두 번 보여주던 것을 도면 하나로 합쳤다.
   도면은 신호원 · 수집 방식 · 만들어지는 것을 한 줄로 마주 보게 두어
   "이 신호가 저것이 된다"가 읽히게 한다.

   좁은 화면에서는 도면 글자가 읽을 수 없는 크기가 되므로 같은 데이터를
   목록으로 바꿔 보여준다. 목록은 늘 DOM 에 있고 CSS 로만 감추므로
   크롤러와 스크린리더는 화면 폭과 무관하게 항상 읽는다. */
body.iyu-editorial .iyu-arch-figure {
  margin: 0 0 28px;
  padding: 26px 26px 18px;
  border: 1px solid var(--e-line);
  border-radius: var(--e-radius);
  background: var(--e-paper);
}
body.iyu-editorial .iyu-arch-figure figcaption {
  margin-top: 18px;
  padding-top: 14px;
  border-top: 1px solid var(--e-line);
  font-size: 0.8125rem;
  line-height: 1.6;
  color: var(--e-ink-3);
}

/* 좁은 화면용 목록 — 넓은 화면에서는 도면이 대신한다 */
body.iyu-editorial .iyu-arch-list { display: none; }
body.iyu-editorial .iyu-arch-item {
  padding: 15px 0 15px 14px;
  border-top: 1px solid var(--e-line);
  border-left: 2px solid var(--e-accent);
}
body.iyu-editorial .iyu-arch-item:first-child { border-top: 0; }
body.iyu-editorial .iyu-arch-item b {
  display: block;
  font-size: 0.9375rem;
  font-weight: 700;
  color: var(--e-ink);
}
body.iyu-editorial .iyu-arch-how {
  display: block;
  margin-top: 3px;
  font-family: var(--e-mono);
  font-size: 0.75rem;
  color: var(--e-ink-3);
}
body.iyu-editorial .iyu-arch-out {
  display: block;
  margin-top: 7px;
  font-size: 0.8125rem;
  line-height: 1.55;
  color: var(--e-ink-2);
}
body.iyu-editorial .iyu-arch-note {
  margin: 18px 0 0;
  font-size: 0.8125rem;
  line-height: 1.6;
  color: var(--e-ink-3);
}

@media (max-width: 900px) {
  body.iyu-editorial .iyu-arch-figure { padding: 20px 18px 14px; }
  body.iyu-editorial .iyu-arch-figure > svg { display: none; }
  body.iyu-editorial .iyu-arch-list { display: block; }
}

/* ── 27. 업종별 실제 연결 지도 ────────────────────────────────────────────
   장비명만 나열하던 개념도를 실제 연결 검토 순서로 바꾼다.
   한 행에서 장비/입력 → 포트·프로토콜/수집 시점 → 표준 태그 → 운영 화면을
   끝까지 읽을 수 있고, 하단에는 공통 전송 경로를 별도로 고정한다. */
body.iyu-editorial .iyu-connect-map {
  margin: 0 0 28px;
  padding: 0;
  overflow: hidden;
  border: 1px solid #d8d6cf;
  border-radius: 6px;
  background: #f7f6f2;
  color: #14161a;
  box-shadow: 0 18px 48px rgba(5, 8, 15, 0.08);
}
body.iyu-editorial .iyu-connect-head,
body.iyu-editorial .iyu-connect-route {
  display: grid;
  grid-template-columns: minmax(190px, 1.05fr) minmax(190px, 1fr) minmax(210px, 1.15fr) minmax(230px, 1.3fr);
}
body.iyu-editorial .iyu-connect-head {
  background: #111922;
  color: #fff;
}
body.iyu-editorial .iyu-connect-head span {
  padding: 12px 16px;
  border-left: 1px solid rgba(255, 255, 255, 0.12);
  font-family: var(--e-mono);
  font-size: 0.6875rem;
  font-weight: 800;
  letter-spacing: 0.08em;
  text-transform: uppercase;
}
body.iyu-editorial .iyu-connect-head span:first-child { border-left: 0; }
body.iyu-editorial .iyu-connect-routes {
  margin: 0;
  padding: 0;
  list-style: none;
}
body.iyu-editorial .iyu-connect-route {
  position: relative;
  border-top: 1px solid #dedcd5;
  background: #fff;
}
body.iyu-editorial .iyu-connect-route:first-child { border-top: 0; }
body.iyu-editorial .iyu-connect-route::after {
  content: "";
  position: absolute;
  z-index: 2;
  top: 50%;
  left: 25.7%;
  right: 25.2%;
  height: 1px;
  background: #c9c7bf;
}
body.iyu-editorial .iyu-connect-node,
body.iyu-editorial .iyu-connect-hop {
  position: relative;
  z-index: 3;
  min-width: 0;
  padding: 17px 16px 16px;
  border-left: 1px solid #ebe9e3;
  background: #fff;
}
body.iyu-editorial .iyu-connect-node:first-child { border-left: 0; }
body.iyu-editorial .iyu-connect-node small {
  display: block;
  margin-bottom: 6px;
  color: #7b6250;
  font-family: var(--e-mono);
  font-size: 0.625rem;
  font-weight: 800;
  letter-spacing: 0.08em;
}
body.iyu-editorial .iyu-connect-node strong,
body.iyu-editorial .iyu-connect-hop b {
  display: block;
  color: #15181d;
  font-size: 0.875rem;
  font-weight: 800;
  line-height: 1.35;
}
body.iyu-editorial .iyu-connect-node span,
body.iyu-editorial .iyu-connect-hop span {
  display: block;
  margin-top: 5px;
  color: #676d75;
  font-size: 0.72rem;
  line-height: 1.45;
}
body.iyu-editorial .iyu-connect-source {
  box-shadow: inset 3px 0 0 #a8480b;
}
body.iyu-editorial .iyu-connect-hop {
  margin: 11px 12px;
  padding: 9px 12px;
  border: 1px solid #d6d3ca;
  border-radius: 4px;
  background: #f4f2ed;
}
body.iyu-editorial .iyu-connect-hop::before,
body.iyu-editorial .iyu-connect-hop::after {
  content: "";
  position: absolute;
  top: 50%;
  width: 7px;
  height: 7px;
  margin-top: -4px;
  border-top: 1px solid #8c9298;
  border-right: 1px solid #8c9298;
  background: #f4f2ed;
  transform: rotate(45deg);
}
body.iyu-editorial .iyu-connect-hop::before { left: -5px; }
body.iyu-editorial .iyu-connect-hop::after { right: -5px; }
body.iyu-editorial .iyu-connect-tag code {
  display: inline-block;
  max-width: 100%;
  overflow: hidden;
  padding: 5px 7px;
  border: 1px solid #cfd5da;
  border-radius: 3px;
  background: #edf2f5;
  color: #24313b;
  font-family: var(--e-mono);
  font-size: 0.75rem;
  font-weight: 800;
  text-overflow: ellipsis;
  white-space: nowrap;
}
body.iyu-editorial .iyu-connect-use {
  background: #fbfaf7;
  box-shadow: inset 3px 0 0 #667481;
}
body.iyu-editorial .iyu-connect-backbone {
  display: flex;
  align-items: center;
  gap: 9px;
  padding: 15px 16px;
  border-top: 1px solid #cecac0;
  background: #e8e5de;
  color: #3e454c;
  font-family: var(--e-mono);
  font-size: 0.6875rem;
  line-height: 1.4;
}
body.iyu-editorial .iyu-connect-backbone b {
  margin-right: auto;
  color: #15181d;
  font-family: var(--e-sans);
  font-size: 0.75rem;
}
body.iyu-editorial .iyu-connect-backbone span {
  padding: 5px 8px;
  border: 1px solid #c8c4ba;
  border-radius: 3px;
  background: rgba(255, 255, 255, 0.72);
}
body.iyu-editorial .iyu-connect-backbone i {
  color: #8a6a53;
  font-style: normal;
  font-weight: 900;
}
body.iyu-editorial .iyu-connect-map figcaption {
  padding: 12px 16px 14px;
  border-top: 1px solid #d8d6cf;
  color: #686d72;
  font-size: 0.72rem;
  line-height: 1.55;
}

@media (max-width: 900px) {
  body.iyu-editorial .iyu-connect-head { display: none; }
  body.iyu-editorial .iyu-connect-route {
    grid-template-columns: 1fr;
    padding: 17px 16px;
  }
  body.iyu-editorial .iyu-connect-route::after { display: none; }
  body.iyu-editorial .iyu-connect-node,
  body.iyu-editorial .iyu-connect-hop {
    border: 0;
    border-radius: 0;
  }
  body.iyu-editorial .iyu-connect-node { padding: 11px 13px; }
  body.iyu-editorial .iyu-connect-hop {
    margin: 5px 0;
    padding: 10px 13px 10px 34px;
    border: 1px solid #d6d3ca;
    border-radius: 4px;
  }
  body.iyu-editorial .iyu-connect-hop::before {
    left: 14px;
    top: 12px;
    width: 8px;
    height: 8px;
    margin: 0;
    transform: rotate(135deg);
  }
  body.iyu-editorial .iyu-connect-hop::after { display: none; }
  body.iyu-editorial .iyu-connect-source,
  body.iyu-editorial .iyu-connect-use { box-shadow: inset 3px 0 0 #a8480b; }
  body.iyu-editorial .iyu-connect-backbone {
    align-items: stretch;
    flex-direction: column;
    gap: 6px;
  }
  body.iyu-editorial .iyu-connect-backbone b { margin: 0 0 3px; }
  body.iyu-editorial .iyu-connect-backbone i { transform: rotate(90deg); align-self: center; }
}

/* ══════════════════════════════════════════════════════════════════════════
   §35. 히어로 정렬 · 성공사례 목록 카드 (2026-09-02)
   ──────────────────────────────────────────────────────────────────────────
   성공사례·파트너십·문의 히어로는 text-center 마크업이었다. §23-1 이
   h1/p 의 auto 마진을 0 으로 눌러 놓아 제목은 가운데, 본문은 왼쪽에 붙는
   어긋난 모습이 됐다. 마크업에서 text-center 를 걷고, 남는 곳도 여기서
   왼쪽 기준선으로 통일한다. 사례 목록 카드는 사진·라벨·제목·성과·링크가
   한 덩어리로 읽히도록 새 어휘(.iyu-story-card)로 다시 짰다.
   ══════════════════════════════════════════════════════════════════════════ */
body.iyu-editorial .iyu-subpage-hero .text-center,
body.iyu-editorial .iyu-subpage-hero.text-center { text-align: left !important; }

/* 히어로 ↔ 첫 섹션 사이 224px(112+112) 공백을 절반으로 */
body.iyu-editorial.iyu-cases-page .iyu-subpage-hero { padding-bottom: 56px !important; }
body.iyu-editorial.iyu-cases-page section.iyu-cases-content { padding-top: 56px !important; }
body.iyu-editorial.iyu-cases-stories-page .iyu-cases-content .grid { gap: 28px !important; }

body.iyu-editorial .iyu-story-card { min-width: 0; }
body.iyu-editorial .iyu-story-card__link {
  display: flex;
  flex-direction: column;
  height: 100%;
  border: 1px solid var(--e-line) !important;
  border-radius: var(--e-radius) !important;
  background: var(--e-paper) !important;
  overflow: hidden;
  color: inherit;
  text-decoration: none;
  transition: border-color .18s ease, background-color .18s ease;
}
body.iyu-editorial .iyu-story-card__link:hover,
body.iyu-editorial .iyu-story-card__link:focus-visible {
  border-color: var(--e-line-2) !important;
  background: var(--e-paper-2) !important;
  outline: none;
}
body.iyu-editorial .iyu-story-card__link:focus-visible { box-shadow: 0 0 0 2px var(--e-accent) !important; }
body.iyu-editorial .iyu-story-card__media {
  margin: 0;
  aspect-ratio: 16 / 10;
  overflow: hidden;
  background: var(--e-paper-3);
  border-bottom: 1px solid var(--e-line);
}
body.iyu-editorial .iyu-story-card__media img {
  display: block;
  width: 100%;
  height: 100%;
  object-fit: cover;
  border-radius: 0 !important;
  transition: transform .6s ease;
}
body.iyu-editorial .iyu-story-card__link:hover .iyu-story-card__media img { transform: scale(1.025); }
body.iyu-editorial .iyu-story-card__body {
  display: flex;
  flex-direction: column;
  flex: 1 1 auto;
  padding: 22px 24px 24px;
}
body.iyu-editorial .iyu-story-card__eyebrow {
  position: relative;
  display: block;
  padding-left: 11px;
  margin: 0 0 12px;
  color: var(--e-ink-3) !important;
  font-size: 12px !important;
  font-weight: 600;
  letter-spacing: .02em;
  line-height: 1.4;
}
body.iyu-editorial .iyu-story-card__eyebrow::before {
  content: "";
  position: absolute;
  left: 0; top: .22em;
  width: 3px; height: .9em;
  background: var(--e-accent);
}
body.iyu-editorial .iyu-story-card__title {
  margin: 0 0 10px !important;
  color: var(--e-ink) !important;
  font-size: 1.25rem !important;
  line-height: 1.35 !important;
  font-weight: 700 !important;
  letter-spacing: -.02em;
}
body.iyu-editorial .iyu-story-card__desc {
  margin: 0 0 18px !important;
  color: var(--e-ink-2) !important;
  font-size: .9375rem !important;
  line-height: 1.7 !important;
  display: -webkit-box;
  -webkit-line-clamp: 3;
  -webkit-box-orient: vertical;
  overflow: hidden;
}
body.iyu-editorial .iyu-story-card__result {
  display: grid;
  grid-template-columns: auto minmax(0, 1fr);
  gap: 10px;
  align-items: baseline;
  margin: auto 0 0 !important;
  padding: 14px 0 0;
  border-top: 1px solid var(--e-line);
  color: var(--e-ink) !important;
  font-size: .875rem !important;
  line-height: 1.55 !important;
}
body.iyu-editorial .iyu-story-card__result b {
  font-family: var(--e-mono);
  font-size: 11px;
  font-weight: 700;
  letter-spacing: .08em;
  text-transform: uppercase;
  color: var(--e-accent) !important;
}
body.iyu-editorial .iyu-story-card__result span { font-weight: 600; color: var(--e-ink) !important; }
body.iyu-editorial .iyu-story-card__cta {
  display: inline-flex;
  align-items: center;
  gap: 6px;
  margin-top: 16px;
  color: var(--e-ink) !important;
  font-size: 13px !important;
  font-weight: 600;
}
body.iyu-editorial .iyu-story-card__cta svg {
  width: 14px; height: 14px;
  flex: 0 0 auto;
  transition: transform .18s ease;
}
body.iyu-editorial .iyu-story-card__link:hover .iyu-story-card__cta svg { transform: translateX(3px); }

/* 작은 변형 — 상세 페이지 하단 "다른 사례" */
body.iyu-editorial .iyu-story-card--mini .iyu-story-card__body { padding: 14px 16px 16px; }
body.iyu-editorial .iyu-story-card--mini .iyu-story-card__eyebrow { margin-bottom: 8px; }
body.iyu-editorial .iyu-story-card--mini .iyu-story-card__title { font-size: 1rem !important; margin: 0 !important; }

@media (max-width: 768px) {
  body.iyu-editorial.iyu-cases-page .iyu-subpage-hero { padding-bottom: 36px !important; }
  body.iyu-editorial.iyu-cases-page section.iyu-cases-content { padding-top: 36px !important; }
  body.iyu-editorial .iyu-story-card__body { padding: 18px 18px 20px; }
}

/* ══════════════════════════════════════════════════════════════════════════
   §36. 성공사례 상세 (cases/stories/*) — 사이트 셸 안에서
   ──────────────────────────────────────────────────────────────────────────
   8개 상세 페이지는 자체 3항목 헤더(case-header)만 달고 있어 사이트의
   5개 메뉴가 통째로 빠져 있었다. scripts/build-case-stories.py 가 이 페이지를
   사이트 셸(nav·footer·CSS)에 얹어 다시 만든다. case-study.css 는 더 이상
   싣지 않으므로 레이아웃을 여기서 정의한다. 클래스 이름은 §31 이 이미
   잡고 있는 .case-* 를 그대로 쓴다.
   ══════════════════════════════════════════════════════════════════════════ */
body.iyu-editorial.iyu-case-story-page .case-breadcrumb {
  display: flex;
  flex-wrap: wrap;
  gap: .45rem;
  margin: 0 0 28px;
  color: var(--e-ink-3) !important;
  font-size: .8125rem !important;
}
body.iyu-editorial.iyu-case-story-page .case-breadcrumb a { color: var(--e-ink-3) !important; text-decoration: none; }
body.iyu-editorial.iyu-case-story-page .case-breadcrumb a:hover { color: var(--e-ink) !important; }
body.iyu-editorial.iyu-case-story-page .case-breadcrumb [aria-current] { color: var(--e-ink) !important; }
body.iyu-editorial.iyu-case-story-page .iyu-subpage-hero p.case-kicker {
  margin: 0 0 14px !important;
  font-size: 12px !important;
  line-height: 1.4 !important;
  max-width: none;
}
body.iyu-editorial.iyu-case-story-page .iyu-subpage-hero h1 { max-width: 18em !important; }
body.iyu-editorial.iyu-case-story-page .iyu-subpage-hero p.case-lead {
  max-width: 40em;
  margin: 0 0 22px !important;
}
body.iyu-editorial.iyu-case-story-page .case-review {
  display: flex;
  flex-wrap: wrap;
  gap: .5rem 1.25rem;
  color: var(--e-ink-3) !important;
  font-size: .8125rem !important;
}
body.iyu-editorial.iyu-case-story-page .case-review time { color: inherit; }

/* 본문 */
body.iyu-editorial.iyu-case-story-page section.iyu-story-body { padding-top: 40px !important; }
body.iyu-editorial.iyu-case-story-page .case-media {
  margin: 0;
  aspect-ratio: 16 / 9;
  overflow: hidden;
  border: 1px solid var(--e-line);
  border-radius: var(--e-radius) !important;
  background: var(--e-paper-3);
}
body.iyu-editorial.iyu-case-story-page .case-media img {
  display: block;
  width: 100%;
  height: 100%;
  object-fit: cover;
  border-radius: 0 !important;
}
body.iyu-editorial.iyu-case-story-page .case-summary {
  display: grid;
  grid-template-columns: repeat(3, minmax(0, 1fr));
  margin: 28px 0 0;
  border: 1px solid var(--e-line);
  border-radius: var(--e-radius);
  background: var(--e-paper);
}
body.iyu-editorial.iyu-case-story-page .case-summary > div { min-width: 0; padding: 18px 20px; }
body.iyu-editorial.iyu-case-story-page .case-summary > div + div { border-left: 1px solid var(--e-line); }
body.iyu-editorial.iyu-case-story-page .case-summary span {
  display: block;
  margin-bottom: 8px;
  color: var(--e-ink-3) !important;
  font-size: 12px !important;
  letter-spacing: .02em;
}
body.iyu-editorial.iyu-case-story-page .case-summary strong {
  display: block;
  color: var(--e-ink) !important;
  font-size: 1rem !important;
  line-height: 1.5;
  font-weight: 600;
}
body.iyu-editorial.iyu-case-story-page .case-content {
  display: grid;
  grid-template-columns: minmax(0, 1.7fr) minmax(16rem, .75fr);
  gap: 56px;
  padding: 64px 0 0;
}
body.iyu-editorial.iyu-case-story-page .case-sections section + section {
  margin-top: 40px;
  padding-top: 40px;
  border-top: 1px solid var(--e-line);
}
body.iyu-editorial.iyu-case-story-page .case-sections h2 {
  margin: 0 0 14px !important;
  font-size: 1.375rem !important;
  line-height: 1.3 !important;
}
body.iyu-editorial.iyu-case-story-page .case-sections p {
  margin: 0;
  color: var(--e-ink-2) !important;
  font-size: 1rem !important;
  line-height: 1.8 !important;
}
body.iyu-editorial.iyu-case-story-page .case-result {
  margin-top: 18px;
  padding: 16px 18px;
  border-left: 3px solid var(--e-accent);
  border-radius: 0 var(--e-radius) var(--e-radius) 0;
  background: var(--e-accent-wash);
  color: var(--e-accent-2) !important;
  font-size: 1rem;
  font-weight: 600;
  line-height: 1.6;
}
body.iyu-editorial.iyu-case-story-page .case-aside {
  align-self: start;
  position: sticky;
  top: 96px;
  padding-left: 28px;
  border-left: 1px solid var(--e-line);
}
body.iyu-editorial.iyu-case-story-page .case-aside h2 {
  margin: 0 0 12px !important;
  color: var(--e-ink-3) !important;
  font-size: .8125rem !important;
  font-weight: 600 !important;
  letter-spacing: .06em;
  text-transform: uppercase;
}
body.iyu-editorial.iyu-case-story-page .case-aside ul { list-style: none; margin: 0; padding: 0; }
body.iyu-editorial.iyu-case-story-page .case-aside li + li { margin-top: 8px; }
body.iyu-editorial.iyu-case-story-page .case-aside a {
  color: var(--e-ink) !important;
  font-weight: 600;
  text-decoration: none;
  border-bottom: 1px solid var(--e-line-2);
}
body.iyu-editorial.iyu-case-story-page .case-aside a:hover { border-color: var(--e-ink); }
body.iyu-editorial.iyu-case-story-page .case-evidence {
  margin-top: 28px;
  padding: 16px 18px;
  border: 1px solid var(--e-line);
  border-radius: var(--e-radius);
  background: var(--e-paper-2);
}
body.iyu-editorial.iyu-case-story-page .case-evidence strong {
  display: block;
  margin-bottom: 6px;
  color: var(--e-ink) !important;
  font-size: .8125rem !important;
}
body.iyu-editorial.iyu-case-story-page .case-evidence p {
  margin: 0;
  color: var(--e-ink-2) !important;
  font-size: .8125rem !important;
  line-height: 1.65 !important;
}

/* 다른 사례 · 목록으로 */
body.iyu-editorial.iyu-case-story-page .iyu-story-related {
  margin-top: 72px;
  padding-top: 40px;
  border-top: 1px solid var(--e-line);
}
body.iyu-editorial.iyu-case-story-page .iyu-story-related h2 {
  margin: 0 0 20px !important;
  font-size: 1.25rem !important;
}
body.iyu-editorial.iyu-case-story-page .iyu-story-related__grid {
  display: grid;
  grid-template-columns: repeat(3, minmax(0, 1fr));
  gap: 20px;
}
body.iyu-editorial.iyu-case-story-page .case-next {
  margin-top: 40px;
  padding-top: 24px;
  border-top: 1px solid var(--e-line);
}
body.iyu-editorial.iyu-case-story-page .case-next a {
  color: var(--e-ink) !important;
  font-weight: 600;
  text-decoration: none;
}
body.iyu-editorial.iyu-case-story-page .case-next a:hover { text-decoration: underline; }

@media (max-width: 1023.98px) {
  body.iyu-editorial.iyu-case-story-page .case-content { grid-template-columns: 1fr; gap: 40px; padding-top: 48px; }
  body.iyu-editorial.iyu-case-story-page .case-aside {
    position: static;
    padding: 28px 0 0;
    border-left: 0;
    border-top: 1px solid var(--e-line);
  }
}
@media (max-width: 768px) {
  body.iyu-editorial.iyu-case-story-page .case-summary { grid-template-columns: 1fr; }
  body.iyu-editorial.iyu-case-story-page .case-summary > div + div { border-left: 0; border-top: 1px solid var(--e-line); }
  body.iyu-editorial.iyu-case-story-page .iyu-story-related__grid { grid-template-columns: 1fr; }
  body.iyu-editorial.iyu-case-story-page .case-media { aspect-ratio: 4 / 3; }
}

/* ══════════════════════════════════════════════════════════════════════════
   §37. 회사소개 — Why IYULAB 2×2 카드의 어긋난 시작선 · Business Areas 색막대
   ──────────────────────────────────────────────────────────────────────────
   원본(다크)에서는 왼쪽 열을 mt-8 로 내려 리듬을 줬지만, 평면 괘선 체계에서는
   그냥 깨져 보인다. 세 카드의 상단 막대도 cyan/blue/amber 세 색이었다.
   ══════════════════════════════════════════════════════════════════════════ */
body.iyu-editorial.iyu-company-page .grid.grid-cols-2.gap-4 > .space-y-4.mt-8 { margin-top: 0 !important; }
body.iyu-editorial.iyu-company-page .iyu-subpage-content .h-2[class*="bg-"] {
  height: 3px !important;
  background: var(--e-accent) !important;
}
body.iyu-editorial.iyu-company-page .iyu-subpage-content .grid > .rounded-xl { display: flex; flex-direction: column; }
body.iyu-editorial.iyu-company-page .iyu-subpage-content .grid > .rounded-xl > .p-8 { flex: 1 1 auto; }

/* ══════════════════════════════════════════════════════════════════════════
   §38. 고객지원 카테고리 (지원사업·가이드·용어사전·비교·자료실·파트너십·문의)
   ──────────────────────────────────────────────────────────────────────────
   일곱 메뉴가 같은 카테고리라는 표식이 없었고, 히어로 우측 지표 카드가 세로로
   쌓여 화면 절반이 비었으며, 섹션 간격이 224px 로 늘어져 한 화면에 내용이
   하나씩만 보였다.
     - 히어로 위에 카테고리 탭(.iyu-support-nav)을 놓아 일곱 메뉴를 잇는다
     - 지표 카드 → 본문 아래 가로 사실 띠
     - 섹션 간격 112 → 72, 카드에 hover 반응과 화살표
     - 절차(ol)는 좌측 STEP 열 + 우측 내용의 표 형태
     - 표는 머리행 강조 + 행 hover
     - Answer Hub 목록형은 2단 그리드
   body.iyu-support-page 는 scripts/patch-layout-fixes.py 가 붙인다.
   ══════════════════════════════════════════════════════════════════════════ */
body.iyu-editorial.iyu-support-page .iyu-subpage-hero { padding-top: 84px !important; }

body.iyu-editorial .iyu-support-nav {
  position: relative;
  z-index: 2;
  max-width: var(--e-maxw);
  margin: 0 auto 40px;
  border: none;
}
body.iyu-editorial .iyu-support-nav__inner {
  display: flex;
  align-items: center;
  flex-wrap: nowrap;
  width: fit-content;
  max-width: 100%;
  min-height: 48px;
  padding: 6px 8px;
  background: var(--e-paper-2);
  border: 1px solid var(--e-line);
  border-radius: var(--e-radius-lg);
}
body.iyu-editorial .iyu-support-nav__label {
  display: inline-flex;
  align-items: center;
  flex: 0 0 auto;
  padding: 0 18px 0 13px;
  margin-right: 10px;
  position: relative;
  color: var(--e-ink) !important;
  font-size: 13px !important;
  font-weight: 700;
  letter-spacing: .02em;
  white-space: nowrap;
}
body.iyu-editorial .iyu-support-nav__label::before {
  content: "";
  position: absolute;
  left: 0; top: 50%;
  width: 3px; height: 14px;
  margin-top: -7px;
  background: var(--e-accent);
}
body.iyu-editorial .iyu-support-nav__label::after {
  content: "";
  position: absolute;
  right: 0; top: 50%;
  width: 1px; height: 22px;
  margin-top: -11px;
  background: var(--e-line-2);
}
body.iyu-editorial .iyu-support-nav ul {
  display: flex;
  align-items: stretch;
  gap: 2px;
  margin: 0;
  padding: 0;
  list-style: none;
  overflow-x: auto;
  scrollbar-width: none;
  -webkit-overflow-scrolling: touch;
}
body.iyu-editorial .iyu-support-nav ul::-webkit-scrollbar { display: none; }
body.iyu-editorial .iyu-support-nav li { flex: 0 0 auto; }
body.iyu-editorial .iyu-support-nav a {
  display: inline-flex;
  align-items: center;
  height: 36px;
  padding: 0 14px;
  border-radius: var(--e-radius);
  color: var(--e-ink-2) !important;
  font-size: 13px !important;
  font-weight: 600;
  text-decoration: none;
  white-space: nowrap;
  transition: color .15s ease, background-color .15s ease;
}
body.iyu-editorial .iyu-support-nav a:hover { color: var(--e-ink) !important; background: var(--e-paper-3); }
body.iyu-editorial .iyu-support-nav a[aria-current="page"] {
  color: #fff !important;
  background: var(--e-accent);
}

/* 히어로: 2단 그리드 해제, 지표 카드는 본문 아래 가로 띠로 */
body.iyu-editorial.iyu-support-page .iyu-subpage-hero > .max-w-7xl { display: block !important; }
body.iyu-editorial.iyu-support-page .iyu-hero-aside { margin-top: 36px; max-width: 760px; }
body.iyu-editorial.iyu-support-page .iyu-hero-aside__list {
  display: grid !important;
  grid-template-columns: repeat(3, minmax(0, 1fr));
  gap: 0 !important;
  border-top: 1px solid var(--e-line);
}
body.iyu-editorial.iyu-support-page .iyu-hero-aside__list > div {
  padding: 18px 20px 4px 0 !important;
  border: 0 !important;
  border-radius: 0 !important;
  background: transparent !important;
}
body.iyu-editorial.iyu-support-page .iyu-hero-aside__list > div + div {
  padding-left: 20px !important;
  border-left: 1px solid var(--e-line) !important;
}
body.iyu-editorial.iyu-support-page .iyu-hero-aside__list dt {
  margin-bottom: 6px !important;
  color: var(--e-ink-3) !important;
  font-size: 12px !important;
  letter-spacing: .02em;
}
body.iyu-editorial.iyu-support-page .iyu-hero-aside__list dd {
  font-size: 1.25rem !important;
  line-height: 1.3 !important;
  font-weight: 700;
  color: var(--e-ink) !important;
}
body.iyu-editorial.iyu-support-page .iyu-subpage-hero p { margin-bottom: 26px !important; }

/* 섹션 리듬: 112 → 72 (nth-of-type 규칙(§25)보다 특정도를 높여 균일하게) */
body.iyu-editorial.iyu-support-page main.flex-grow > div > section.iyu-subpage-content:nth-of-type(n) {
  padding-top: var(--e-space-s) !important;
  padding-bottom: var(--e-space-s) !important;
}
body.iyu-editorial.iyu-support-page .iyu-subpage-content > .mb-12 { margin-bottom: 28px !important; }
body.iyu-editorial.iyu-support-page .iyu-subpage-content > .mb-12 > h2,
body.iyu-editorial.iyu-support-page .iyu-subpage-content > .mb-10 > h2 {
  font-size: 1.625rem !important;
  margin-bottom: 8px !important;
}

/* 카드: 링크 카드는 hover 반응 + 우하단 화살표 */
body.iyu-editorial.iyu-support-page .iyu-subpage-content a.block.h-full {
  position: relative;
  padding: 26px 28px 40px !important;
  transition: border-color .18s ease, background-color .18s ease;
}
body.iyu-editorial.iyu-support-page .iyu-subpage-content a.block.h-full:hover,
body.iyu-editorial.iyu-support-page .iyu-subpage-content a.block.h-full:focus-visible {
  border-color: var(--e-line-2) !important;
  background: var(--e-paper-2) !important;
  outline: none;
}
body.iyu-editorial.iyu-support-page .iyu-subpage-content a.block.h-full::after {
  content: "→";
  position: absolute;
  right: 22px;
  bottom: 18px;
  color: var(--e-ink-3);
  font-size: 15px;
  line-height: 1;
  transition: transform .18s ease, color .18s ease;
}
body.iyu-editorial.iyu-support-page .iyu-subpage-content a.block.h-full:hover::after {
  transform: translateX(3px);
  color: var(--e-ink);
}
body.iyu-editorial.iyu-support-page .iyu-subpage-content a.block.h-full h3,
body.iyu-editorial.iyu-support-page .iyu-subpage-content .grid > div.h-full h3 {
  font-size: 1.25rem !important;
  margin: 4px 0 10px !important;
  line-height: 1.35 !important;
}
body.iyu-editorial.iyu-support-page .iyu-subpage-content .grid > div.h-full { padding: 26px 28px 28px !important; }
body.iyu-editorial.iyu-support-page .iyu-subpage-content .grid { gap: 20px !important; }

/* 절차(ol): STEP 열 + 내용 열 */
body.iyu-editorial.iyu-support-page .iyu-subpage-content ol.grid {
  display: block !important;
  border-top: 1px solid var(--e-line);
}
body.iyu-editorial.iyu-support-page .iyu-subpage-content ol.grid > li {
  display: grid;
  grid-template-columns: 120px minmax(0, 1fr);
  column-gap: 28px;
  padding: 22px 0 24px !important;
  border: 0 !important;
  border-bottom: 1px solid var(--e-line) !important;
  border-radius: 0 !important;
  background: transparent !important;
}
body.iyu-editorial.iyu-support-page .iyu-subpage-content ol.grid > li > span { grid-column: 1; margin: 4px 0 0 !important; }
body.iyu-editorial.iyu-support-page .iyu-subpage-content ol.grid > li > h3 { grid-column: 2; margin: 0 0 8px !important; font-size: 1.125rem !important; }
body.iyu-editorial.iyu-support-page .iyu-subpage-content ol.grid > li > p { grid-column: 2; margin: 0 !important; max-width: 62em; }

/* 표 */
body.iyu-editorial.iyu-support-page .iyu-subpage-content table thead th {
  padding: 12px 16px !important;
  border-bottom: 1px solid var(--e-line-3);
  color: var(--e-ink-3) !important;
  font-size: 11px !important;
  font-weight: 600;
  letter-spacing: .08em;
  text-transform: uppercase;
  white-space: nowrap;
}
body.iyu-editorial.iyu-support-page .iyu-subpage-content table tbody td {
  padding: 13px 16px !important;
  border-top: 1px solid var(--e-line) !important;
  vertical-align: top;
}
body.iyu-editorial.iyu-support-page .iyu-subpage-content table tbody tr:hover td { background: var(--e-paper-2); }
body.iyu-editorial.iyu-support-page .iyu-subpage-content table caption {
  padding: 12px 16px !important;
  color: var(--e-ink-3) !important;
  font-size: 12px !important;
  text-align: left;
}

/* Answer Hub 목록형(iyu-answer-hub-list) → 2단 */
body.iyu-editorial .iyu-answer-hub-list {
  display: grid;
  grid-template-columns: repeat(2, minmax(0, 1fr));
  gap: 16px;
  margin-top: 2.25rem;
}
body.iyu-editorial .iyu-answer-hub-list .iyu-answer-item { min-width: 0; }
body.iyu-editorial .iyu-answer-hub-kicker { display: block; }

/* 마무리 CTA: 좁은 가운데 블록 → 지면 교차 밴드 */
body.iyu-editorial.iyu-support-page main.flex-grow > div > section.iyu-subpage-content.text-center:nth-of-type(n) {
  max-width: none !important;
  padding: var(--e-space-s) 24px !important;
  background: var(--e-paper-2) !important;
  border-top: 1px solid var(--e-line) !important;
}
body.iyu-editorial.iyu-support-page section.iyu-subpage-content.text-center > * {
  max-width: 720px;
  margin-left: auto !important;
  margin-right: auto !important;
}
body.iyu-editorial.iyu-support-page section.iyu-subpage-content.text-center h2 { font-size: 1.75rem !important; }
body.iyu-editorial.iyu-support-page section.iyu-subpage-content.text-center p { margin-bottom: 28px !important; }

/* 문의 페이지 지도: 다크용 반전 필터 해제 */
body.iyu-editorial iframe[style*="invert"] { filter: none !important; opacity: 1 !important; }
body.iyu-editorial.iyu-support-page .iyu-subpage-content [class*="h-[400px]"] {
  border: 1px solid var(--e-line) !important;
  border-radius: var(--e-radius) !important;
  background: var(--e-paper-2) !important;
}

@media (max-width: 1023.98px) {
  body.iyu-editorial.iyu-support-page .iyu-subpage-hero { padding-top: 80px !important; }
  body.iyu-editorial .iyu-support-nav { margin-bottom: 32px; }
}
@media (max-width: 768px) {
  body.iyu-editorial.iyu-support-page .iyu-subpage-hero { padding-top: 76px !important; }
  body.iyu-editorial .iyu-support-nav__inner { width: 100%; max-width: 100%; padding: 5px; }
  body.iyu-editorial .iyu-support-nav__label { display: none; }
  body.iyu-editorial .iyu-support-nav a { height: 38px; padding: 0 12px; font-size: 12.5px !important; }
  body.iyu-editorial.iyu-support-page .iyu-hero-aside__list { grid-template-columns: 1fr; }
  body.iyu-editorial.iyu-support-page .iyu-hero-aside__list > div + div {
    padding-left: 0 !important;
    border-left: 0 !important;
    border-top: 1px solid var(--e-line) !important;
  }
  body.iyu-editorial.iyu-support-page .iyu-subpage-content ol.grid > li {
    grid-template-columns: 1fr;
    row-gap: 4px;
  }
  body.iyu-editorial.iyu-support-page .iyu-subpage-content ol.grid > li > h3,
  body.iyu-editorial.iyu-support-page .iyu-subpage-content ol.grid > li > p { grid-column: 1; }
  body.iyu-editorial .iyu-answer-hub-list { grid-template-columns: 1fr; }
}

/* §36 보강 — v3.js tagPageSections() 가 main 안의 모든 <section> 에
   iyu-subpage-content 를 붙여 본문 소절(.case-sections > section)까지 112px 패딩을
   받았다. 소절은 문서 안의 단락이므로 섹션 리듬에서 제외한다. */
body.iyu-editorial.iyu-case-story-page .case-content .case-sections > section:nth-of-type(n) {
  padding-top: 0 !important;
  padding-bottom: 0 !important;
  margin-bottom: 0 !important;
  background: transparent !important;
  border: 0 !important;
}
body.iyu-editorial.iyu-case-story-page .case-content .case-sections > section:nth-of-type(n) + section {
  margin-top: 40px !important;
  padding-top: 40px !important;
  border-top: 1px solid var(--e-line) !important;
}

/* ══════════════════════════════════════════════════════════════════════════
   §39. 404 (2026-09-02)
   ──────────────────────────────────────────────────────────────────────────
   scripts/build-404.py 가 사이트 셸로 다시 만든다. 안내가 짧은 화면이라
   서브페이지 기본 리듬(112+112px)으로는 히어로와 링크 사이가 비어 보인다.
   링크 카드에는 §38 과 같은 화살표 어포던스를 준다.
   ══════════════════════════════════════════════════════════════════════════ */
/* ※ 간격은 §23-1 의 (0,4,3) 규칙이 잡고 있다. 유형 클래스만 얹은 (0,3,1) 로는
   !important 를 붙여도 밀린다. 조상 경로를 같이 적어 특정도를 (0,4,4) 로 올린다. */
body.iyu-editorial.iyu-404-page main.flex-grow > div > section.iyu-subpage-hero {
  padding-bottom: 56px !important;
}
body.iyu-editorial.iyu-404-page main.flex-grow > div > section.iyu-subpage-content {
  padding-top: 56px !important;
  padding-bottom: var(--e-space-s) !important;
}
body.iyu-editorial.iyu-404-page .iyu-subpage-content > .mb-12 { margin-bottom: 28px !important; }
body.iyu-editorial.iyu-404-page .iyu-subpage-content .grid { gap: 20px !important; }
body.iyu-editorial.iyu-404-page .iyu-subpage-content a.block.h-full {
  position: relative;
  padding: 26px 28px 40px !important;
  transition: border-color .18s ease, background-color .18s ease;
}
body.iyu-editorial.iyu-404-page .iyu-subpage-content a.block.h-full:hover,
body.iyu-editorial.iyu-404-page .iyu-subpage-content a.block.h-full:focus-visible {
  border-color: var(--e-line-2) !important;
  background: var(--e-paper-2) !important;
  outline: none;
}
body.iyu-editorial.iyu-404-page .iyu-subpage-content a.block.h-full h3 {
  font-size: 1.25rem !important;
  margin: 4px 0 10px !important;
  line-height: 1.35 !important;
}
body.iyu-editorial.iyu-404-page .iyu-subpage-content a.block.h-full::after {
  content: "→";
  position: absolute;
  right: 22px;
  bottom: 18px;
  color: var(--e-ink-3);
  font-size: 15px;
  line-height: 1;
  transition: transform .18s ease, color .18s ease;
}
body.iyu-editorial.iyu-404-page .iyu-subpage-content a.block.h-full:hover::after {
  transform: translateX(3px);
  color: var(--e-ink);
}
@media (max-width: 768px) {
  body.iyu-editorial.iyu-404-page main.flex-grow > div > section.iyu-subpage-hero { padding-bottom: 36px !important; }
  body.iyu-editorial.iyu-404-page main.flex-grow > div > section.iyu-subpage-content { padding-top: 36px !important; }
}

/* ══════════════════════════════════════════════════════════════════════════
   §40. 회사소개 카테고리 (개요·비전·인증특허·고객사) — 2026-09-02
   ──────────────────────────────────────────────────────────────────────────
   비전·인증특허·고객사 세 면은 옛 다크 테마 어휘가 라이트 테마로 잘못 옮겨진 채
   남아 있었다. 앰버 글로우와 발광 그림자, 회전 링, 가운데 정렬 제목,
   §23-4 에 눌려 빈 막대가 된 아이콘 타일, hover 에만 보이던 업종 라벨,
   표 흉내를 낸 grid-cols-12 div 가 그것이다.
   scripts/build-company-pages.py 가 세 면의 <main> 을 다시 쓰고,
   여기서 그 마크업이 쓰는 컴포넌트를 정의한다.
   카테고리 탭은 §38 의 .iyu-support-nav 를 그대로 쓴다(같은 성격의 묶음이므로).
   ══════════════════════════════════════════════════════════════════════════ */

/* 40-1. 히어로 — 고객지원 카테고리와 같은 처리.
   지표 카드가 오른쪽에 세로로 쌓이면 화면 절반이 빈다. 본문 아래 가로 띠로 눕힌다. */
body.iyu-editorial.iyu-company-page .iyu-subpage-hero > .max-w-7xl { display: block !important; }
body.iyu-editorial.iyu-company-page .iyu-hero-aside { margin-top: 36px; max-width: 760px; }
body.iyu-editorial.iyu-company-page .iyu-hero-aside__list {
  display: grid !important;
  grid-template-columns: repeat(3, minmax(0, 1fr));
  gap: 0 !important;
  border-top: 1px solid var(--e-line);
}
body.iyu-editorial.iyu-company-page .iyu-hero-aside__list > div {
  padding: 18px 20px 4px 0 !important;
  border: 0 !important;
  border-radius: 0 !important;
  background: transparent !important;
}
body.iyu-editorial.iyu-company-page .iyu-hero-aside__list > div + div {
  padding-left: 20px !important;
  border-left: 1px solid var(--e-line) !important;
}
body.iyu-editorial.iyu-company-page .iyu-hero-aside__list dt {
  margin-bottom: 6px !important;
  color: var(--e-ink-3) !important;
  font-size: 12px !important;
  letter-spacing: .02em;
}
body.iyu-editorial.iyu-company-page .iyu-hero-aside__list dd {
  font-size: 1.25rem !important;
  line-height: 1.3 !important;
  font-weight: 700;
  color: var(--e-ink) !important;
}

/* 40-2. 섹션 리듬 — 고객지원 면과 같은 한 단계 아래 간격.
   §23-1/§23-3 이 (0,4,3) 으로 잡고 있어 조상 경로를 같이 적어야 이긴다. */
body.iyu-editorial.iyu-company-page main.flex-grow > div > section.iyu-subpage-content:nth-of-type(n) {
  padding-top: var(--e-space-s) !important;
  padding-bottom: var(--e-space-s) !important;
}
body.iyu-editorial.iyu-company-page main.flex-grow > div > section.iyu-subpage-hero {
  padding-bottom: 56px !important;
}
body.iyu-editorial.iyu-company-page .iyu-subpage-content > .mb-12 { margin-bottom: 28px !important; }
body.iyu-editorial.iyu-company-page .iyu-subpage-content > .mb-12 > h2 {
  font-size: 1.625rem !important;
  margin-bottom: 8px !important;
}
body.iyu-editorial.iyu-company-page .iyu-subpage-content .grid { gap: 20px !important; }
body.iyu-editorial.iyu-company-page .iyu-subpage-content .grid > div.h-full,
body.iyu-editorial.iyu-company-page .iyu-subpage-content ol.grid > li { padding: 26px 28px 28px !important; }
body.iyu-editorial.iyu-company-page .iyu-subpage-content .grid > div.h-full h3 {
  font-size: 1.1875rem !important;
  margin: 4px 0 12px !important;
  line-height: 1.4 !important;
}

/* 40-3. 원칙 목록 — 판단 우선순위 다이어그램. 순서 자체가 정보이므로
   원문자 배지 + 이어지는 세로선으로 "위에서부터 적용한다"는 관계를 보여준다. */
body.iyu-editorial .iyu-priority-list {
  position: relative;
  margin: 0;
  padding: 0;
  list-style: none;
}
body.iyu-editorial .iyu-priority-list li {
  position: relative;
  display: grid;
  grid-template-columns: 44px minmax(0, 1fr);
  column-gap: 24px;
  padding: 22px 0;
  border-bottom: 1px solid var(--e-line);
}
body.iyu-editorial .iyu-priority-list li:first-child { padding-top: 0; }
body.iyu-editorial .iyu-priority-list li:not(:last-child)::before {
  content: "";
  position: absolute;
  left: 21px;
  top: 44px;
  bottom: -22px;
  width: 1px;
  background: var(--e-line-2);
}
body.iyu-editorial .iyu-priority-list__num {
  position: relative;
  z-index: 1;
  display: flex;
  align-items: center;
  justify-content: center;
  width: 44px;
  height: 44px;
  border: 1.5px solid var(--e-accent);
  border-radius: 50%;
  background: var(--e-paper);
  color: var(--e-accent) !important;
  font-family: var(--font-mono), ui-monospace, monospace;
  font-weight: 700;
  font-size: .9375rem;
}
body.iyu-editorial .iyu-priority-list__body h3 {
  margin: 0 0 6px;
  color: var(--e-ink) !important;
  font-size: 1.0625rem;
  font-weight: 700;
  letter-spacing: -.01em;
}
body.iyu-editorial .iyu-priority-list__body p {
  margin: 0;
  color: var(--e-ink-2) !important;
  font-size: .9375rem;
  line-height: 1.75;
}
@media (max-width: 640px) {
  body.iyu-editorial .iyu-priority-list li {
    grid-template-columns: 36px minmax(0, 1fr);
    column-gap: 16px;
  }
  body.iyu-editorial .iyu-priority-list__num { width: 36px; height: 36px; font-size: .8125rem; }
  body.iyu-editorial .iyu-priority-list li:not(:last-child)::before { left: 17px; top: 36px; bottom: -22px; }
}

/* 40-3b. 체크리스트 — 착수 전 확인 목록. 대시 목록은 항목 수와 남은 항목이
   한눈에 안 잡혀 훑고 지나가게 된다. 확인란 그리드로 표에 가까운 무게를 준다. */
body.iyu-editorial .iyu-checklist {
  display: grid;
  grid-template-columns: repeat(2, minmax(0, 1fr));
  gap: 1px;
  margin: 0;
  padding: 0;
  list-style: none;
  border: 1px solid var(--e-line);
  background: var(--e-line);
}
body.iyu-editorial .iyu-checklist li {
  display: flex;
  align-items: flex-start;
  gap: 14px;
  padding: 18px 22px;
  background: var(--e-paper);
}
body.iyu-editorial .iyu-checklist__box {
  flex: none;
  position: relative;
  width: 18px;
  height: 18px;
  margin-top: 3px;
  border: 1.5px solid var(--e-accent);
  border-radius: 2px;
}
body.iyu-editorial .iyu-checklist__box::after {
  content: "";
  position: absolute;
  left: 2px;
  top: 4px;
  width: 10px;
  height: 5px;
  border-left: 2px solid var(--e-accent);
  border-bottom: 2px solid var(--e-accent);
  transform: rotate(-45deg);
}
body.iyu-editorial .iyu-checklist__text {
  color: var(--e-ink-2) !important;
  font-size: .9375rem;
  line-height: 1.6;
}
@media (max-width: 640px) {
  body.iyu-editorial .iyu-checklist { grid-template-columns: 1fr; }
}

/* 40-4. 사실 띠 — 인증 요약처럼 라벨/값 쌍이 한 줄로 늘어서는 자리 */
body.iyu-editorial .iyu-factstrip {
  display: grid;
  grid-template-columns: repeat(auto-fit, minmax(180px, 1fr));
  margin: 0;
  border: 1px solid var(--e-line);
  border-radius: var(--e-radius);
  background: var(--e-paper);
}
body.iyu-editorial .iyu-factstrip > div { min-width: 0; padding: 20px 22px; }
body.iyu-editorial .iyu-factstrip > div + div { border-left: 1px solid var(--e-line); }
body.iyu-editorial .iyu-factstrip dt {
  margin-bottom: 8px;
  color: var(--e-ink-3) !important;
  font-size: 12px;
  letter-spacing: .02em;
}
body.iyu-editorial .iyu-factstrip dd {
  margin: 0;
  color: var(--e-ink) !important;
  font-size: 1.0625rem;
  font-weight: 600;
  line-height: 1.45;
  word-break: keep-all;
}

/* 40-5. 고객사·파트너 타일.
   원본은 업종 라벨이 opacity-0 group-hover 였다. 회사명만 뜬 빈 상자가 23개
   늘어서 있었던 이유다. 라벨을 항상 보이게 두고 괘선 그리드로 묶는다. */
body.iyu-editorial .iyu-logo-grid {
  /* grid 로 짜면 항목 수가 열 수의 배수가 아닐 때 마지막 줄에 구멍이 남는다.
     열 수는 화면 폭에 따라 바뀌므로 개수를 맞춰도 다른 폭에서 또 빈다.
     flex 로 두면 남는 폭을 그 줄의 타일들이 나눠 가져 사각형이 항상 닫힌다. */
  display: flex;
  flex-wrap: wrap;
  border-top: 1px solid var(--e-line);
  border-left: 1px solid var(--e-line);
  background: var(--e-paper);
}
body.iyu-editorial .iyu-logo-tile {
  /* 190px 기준이되 좁은 화면에서는 폭의 45% 로 내려가 두 칸이 유지된다.
     (390px 폰에서 190px 기준이면 한 줄에 한 칸만 들어간다) */
  flex: 1 1 min(190px, 45%);
  min-width: 0;
  padding: 20px 22px 22px;
  border-right: 1px solid var(--e-line);
  border-bottom: 1px solid var(--e-line);
}
body.iyu-editorial .iyu-logo-tile strong {
  display: block;
  color: var(--e-ink) !important;
  font-size: 1rem;
  font-weight: 700;
  line-height: 1.4;
  letter-spacing: -.01em;
  word-break: keep-all;
}
body.iyu-editorial .iyu-logo-tile span {
  display: block;
  margin-top: 6px;
  color: var(--e-ink-3) !important;
  font-size: 11.5px;
  letter-spacing: .03em;
}

/* 40-6. 특허 표 — div 흉내표를 실제 <table> 로 바꿨다. */
body.iyu-editorial .iyu-patent-table table { border-collapse: collapse; }
body.iyu-editorial .iyu-patent-table thead th {
  padding: 12px 16px;
  text-align: left;
  border-bottom: 1px solid var(--e-line-3);
  color: var(--e-ink-3) !important;
  font-size: 11px;
  font-weight: 600;
  letter-spacing: .08em;
  text-transform: uppercase;
  white-space: nowrap;
}
body.iyu-editorial .iyu-patent-table tbody td {
  padding: 14px 16px;
  border-top: 1px solid var(--e-line);
  color: var(--e-ink-2) !important;
  vertical-align: middle;
}
body.iyu-editorial .iyu-patent-table tbody tr:hover td { background: var(--e-paper-2); }
body.iyu-editorial .iyu-patent-table .iyu-patent-title {
  color: var(--e-ink) !important;
  font-weight: 600;
  word-break: keep-all;
}
body.iyu-editorial .iyu-patent-table .iyu-patent-no {
  font-family: var(--e-mono);
  font-size: 12.5px;
  white-space: nowrap;
}
body.iyu-editorial .iyu-patent-status {
  display: inline-block;
  padding: 2px 9px;
  border: 1px solid var(--e-line-2);
  border-radius: var(--e-radius);
  color: var(--e-ink-2) !important;
  font-size: 11px;
  font-weight: 600;
  white-space: nowrap;
}

/* 40-8. 교차 지면을 전폭으로.
   §25 는 3번째 섹션 배경을 바꾸는데, 이 섹션들은 max-w-7xl 이라 색이 안쪽에만
   칠해져 큰 회색 카드가 떠 있는 것처럼 보였다. 폭 제한을 풀고 좌우 여백으로
   본문 기준선(--e-maxw)을 유지하면 지면만 전폭으로 바뀐다. */
body.iyu-editorial.iyu-company-page main.flex-grow > div > section:nth-of-type(3) {
  max-width: none !important;
  /* 다른 섹션은 max-w-7xl(1200px) 안에서 px-8 을 또 먹어 본문이 1136px 이다.
     전폭 밴드도 같은 기준선에 서도록 32px 을 더한다. */
  padding-left: max(24px, calc((100% - var(--e-maxw)) / 2 + 2rem)) !important;
  padding-right: max(24px, calc((100% - var(--e-maxw)) / 2 + 2rem)) !important;
}

/* 40-7. 근거 상자 */
body.iyu-editorial .iyu-note { background: var(--e-paper-2) !important; }

@media (max-width: 1023.98px) {
  body.iyu-editorial.iyu-company-page .iyu-hero-aside { margin-top: 28px; }
}
@media (max-width: 768px) {
  body.iyu-editorial.iyu-company-page .iyu-hero-aside__list { grid-template-columns: 1fr; }
  body.iyu-editorial.iyu-company-page .iyu-hero-aside__list > div + div {
    padding-left: 0 !important;
    border-left: 0 !important;
    border-top: 1px solid var(--e-line) !important;
  }
  body.iyu-editorial.iyu-company-page main.flex-grow > div > section.iyu-subpage-hero {
    padding-bottom: 36px !important;
  }
  body.iyu-editorial .iyu-factstrip { grid-template-columns: 1fr; }
  body.iyu-editorial .iyu-factstrip > div + div {
    border-left: 0;
    border-top: 1px solid var(--e-line);
  }
  body.iyu-editorial .iyu-logo-tile { padding: 16px 16px 18px; }
  body.iyu-editorial .iyu-logo-tile strong { font-size: .9375rem; }
}

/* ══════════════════════════════════════════════════════════════════════════
   §41. 섹션 제목 블록의 가운데 정렬 잔재 (2026-09-02)
   ──────────────────────────────────────────────────────────────────────────
   §23-3 이 "섹션 헤더 가운데 정렬 → 왼쪽" 을 이미 하고 있었지만 선택자가
   `.iyu-subpage-content > .text-center` 라 직계 자식만 잡았다. 실제 마크업은
   대부분 `section > div.max-w-7xl > div.text-center` 라 한 단 더 들어가 있어
   회사개요의 Business Areas 처럼 제목만 가운데에 남았다. 본문·카드는 왼쪽인데
   제목만 가운데라 기준선이 둘이 된다.

   깊이를 따지지 않고 `h2 를 직계로 가진 .text-center` 만 잡는다. 마무리 CTA 는
   섹션 자신에게 text-center 가 붙어 있어(= 자기 자손이 아니므로) 걸리지 않는다.
   ══════════════════════════════════════════════════════════════════════════ */
body.iyu-editorial .iyu-subpage-content .text-center:has(> h2) {
  text-align: left !important;
}
/* 제목·리드에 걸린 auto 마진까지 풀어야 실제로 왼쪽에 선다 */
body.iyu-editorial .iyu-subpage-content .text-center:has(> h2) > :is(h2, h3, p, div, span) {
  margin-left: 0 !important;
  margin-right: 0 !important;
}

/* 제목만 왼쪽으로 옮기면 그 아래 가운데 정렬 카드와 더 어긋난다.
   h3 를 직계로 가진 카드도 같이 왼쪽으로 세운다(파트너십·Resource Lake). */
body.iyu-editorial .iyu-subpage-content .grid > .text-center:has(> h3) {
  text-align: left !important;
}
body.iyu-editorial .iyu-subpage-content .grid > .text-center:has(> h3) > div[class*="mx-auto"] {
  margin-left: 0 !important;
  margin-right: 0 !important;
}
/* 카드가 flex column + items-center 면 글자만 왼쪽으로 가고 아이콘은 가운데 남는다.
   교차축 정렬까지 같이 풀어야 한 기준선에 선다 (U-MES 공정 카드). */
body.iyu-editorial .iyu-subpage-content .grid > .text-center.items-center:has(> h3) {
  align-items: flex-start !important;
}

/* ══════════════════════════════════════════════════════════════════════════
   §42. /cases/ 산업별 카드 사진 (2026-09-02)
   ──────────────────────────────────────────────────────────────────────────
   좌측 패널의 CSS 3D 목업을 실사 사진으로 갈아끼웠다(scripts/build-cases-photos.py).
   패널은 데스크톱에서 479x446, 모바일에서 전폭 300px 이므로 비율이 달라진다.
   사진은 900x900 로 굽고 cover 로 채운다.
   ══════════════════════════════════════════════════════════════════════════ */
body.iyu-editorial .iyu-case-photo {
  background: var(--e-paper-3);
  border-right: 1px solid var(--e-line);
}
body.iyu-editorial .iyu-case-photo img {
  position: absolute;
  inset: 0;
  width: 100%;
  height: 100%;
  object-fit: cover;
  border-radius: 0 !important;
  display: block;
}
@media (max-width: 1023.98px) {
  body.iyu-editorial .iyu-case-photo {
    border-right: 0;
    border-bottom: 1px solid var(--e-line);
  }
}

/* ══════════════════════════════════════════════════════════════════════════
   §43. 개인정보처리방침 · 이용약관 (2026-09-02)
   ──────────────────────────────────────────────────────────────────────────
   두 문서는 옛 셸에 남아 상단 메뉴가 5개짜리 구버전이었고, 본문은 회원제 서비스를
   전제한 채였다. scripts/build-legal-pages.py 가 현재 셸에 얹어 다시 쓴다.
   법률 문서는 훑어보다 필요한 조항만 찾아 읽는다. 조 제목을 왼쪽에 세우고
   본문 폭을 읽기 좋은 길이로 묶는다.
   ══════════════════════════════════════════════════════════════════════════ */
body.iyu-editorial.iyu-legal-page main.flex-grow > div > section.iyu-subpage-hero {
  padding-bottom: 56px !important;
}
body.iyu-editorial.iyu-legal-page main.flex-grow > div > section.iyu-subpage-content:nth-of-type(n) {
  padding-top: var(--e-space-s) !important;
  padding-bottom: var(--e-space-s) !important;
}
body.iyu-editorial.iyu-legal-page .iyu-hero-aside { margin-top: 36px; max-width: 760px; }
body.iyu-editorial.iyu-legal-page .iyu-subpage-hero > .max-w-7xl { display: block !important; }
body.iyu-editorial.iyu-legal-page .iyu-hero-aside__list {
  display: grid !important;
  grid-template-columns: repeat(3, minmax(0, 1fr));
  gap: 0 !important;
  border-top: 1px solid var(--e-line);
}
body.iyu-editorial.iyu-legal-page .iyu-hero-aside__list > div {
  padding: 18px 20px 4px 0 !important;
  border: 0 !important;
  border-radius: 0 !important;
  background: transparent !important;
}
body.iyu-editorial.iyu-legal-page .iyu-hero-aside__list > div + div {
  padding-left: 20px !important;
  border-left: 1px solid var(--e-line) !important;
}
body.iyu-editorial.iyu-legal-page .iyu-hero-aside__list dt {
  margin-bottom: 6px !important;
  color: var(--e-ink-3) !important;
  font-size: 12px !important;
}
body.iyu-editorial.iyu-legal-page .iyu-hero-aside__list dd {
  font-size: 1.125rem !important;
  line-height: 1.35 !important;
  font-weight: 700;
  color: var(--e-ink) !important;
  word-break: keep-all;
}

/* 43-1. 요지 상자 — 읽는 사람이 가장 알고 싶은 것을 맨 위에 둔다 */
body.iyu-editorial .iyu-legal-summary { max-width: 900px; }
body.iyu-editorial .iyu-legal-summary ul { margin: 0; padding: 0; list-style: none; }
body.iyu-editorial .iyu-legal-summary li {
  position: relative;
  padding-left: 18px;
  color: var(--e-ink-2) !important;
  font-size: .9375rem;
  line-height: 1.75;
}
body.iyu-editorial .iyu-legal-summary li + li { margin-top: 10px; }
body.iyu-editorial .iyu-legal-summary li::before {
  content: "";
  position: absolute;
  left: 0;
  top: .72em;
  width: 8px;
  height: 1px;
  background: var(--e-accent);
}
body.iyu-editorial .iyu-legal-summary li strong { color: var(--e-ink) !important; font-weight: 700; }

/* 43-2. 조문 */
body.iyu-editorial .iyu-legal { max-width: 900px; }
body.iyu-editorial .iyu-legal-article + .iyu-legal-article {
  margin-top: 36px;
  padding-top: 36px;
  border-top: 1px solid var(--e-line);
}
body.iyu-editorial .iyu-legal-article h2 {
  margin: 0 0 14px !important;
  color: var(--e-ink) !important;
  font-size: 1.125rem !important;
  line-height: 1.4 !important;
  font-weight: 700 !important;
  letter-spacing: -.01em;
}
body.iyu-editorial .iyu-legal-article p {
  margin: 0 0 12px !important;
  color: var(--e-ink-2) !important;
  font-size: .9375rem !important;
  line-height: 1.85 !important;
}
body.iyu-editorial .iyu-legal-article p:last-child { margin-bottom: 0 !important; }
body.iyu-editorial .iyu-legal-list { margin: 0 0 12px; padding: 0; list-style: none; }
body.iyu-editorial .iyu-legal-list li {
  position: relative;
  padding-left: 16px;
  color: var(--e-ink-2) !important;
  font-size: .9375rem;
  line-height: 1.85;
}
body.iyu-editorial .iyu-legal-list li::before {
  content: "";
  position: absolute;
  left: 0;
  top: .82em;
  width: 6px;
  height: 1px;
  background: var(--e-line-2);
}
/* 조문 안의 표 — 첫 칸이 라벨 열이다 */
body.iyu-editorial .iyu-legal-table { margin: 4px 0 16px; }
body.iyu-editorial .iyu-legal-table tbody td:first-child {
  width: 22%;
  color: var(--e-ink) !important;
  font-weight: 600;
  white-space: nowrap;
}
body.iyu-editorial .iyu-legal-table tbody td { line-height: 1.75; }
body.iyu-editorial .iyu-legal-table thead th:empty { padding: 0; }

body.iyu-editorial .iyu-legal-dates {
  margin: 36px 0 0 !important;
  padding-top: 20px;
  border-top: 1px solid var(--e-line);
  color: var(--e-ink-3) !important;
  font-size: .8125rem !important;
}

/* 43-3. 분석 고지 — scripts/inject-analytics-privacy.js 가 넣는 것과 같은 마크업 */
body.iyu-editorial .iyu-legal-analytics {
  max-width: 900px;
  padding: 28px 30px 30px;
  border: 1px solid var(--e-line);
  border-radius: var(--e-radius);
  background: var(--e-paper-2);
}
body.iyu-editorial .iyu-legal-analytics h2 {
  margin: 0 0 14px !important;
  color: var(--e-ink) !important;
  font-size: 1.125rem !important;
  font-weight: 700 !important;
}
body.iyu-editorial .iyu-legal-analytics p {
  margin: 0 0 12px !important;
  color: var(--e-ink-2) !important;
  font-size: .9375rem !important;
  line-height: 1.85 !important;
}
body.iyu-editorial .iyu-legal-analytics button {
  margin-top: 8px;
  padding: 10px 18px;
  border: 1px solid var(--e-line-3);
  border-radius: var(--e-radius);
  background: var(--e-ink);
  color: #fff;
  font-size: .875rem;
  font-weight: 600;
  cursor: pointer;
  transition: background-color .15s ease;
}
body.iyu-editorial .iyu-legal-analytics button:hover { background: #000; }

@media (max-width: 768px) {
  body.iyu-editorial.iyu-legal-page .iyu-hero-aside__list { grid-template-columns: 1fr; }
  body.iyu-editorial.iyu-legal-page .iyu-hero-aside__list > div + div {
    padding-left: 0 !important;
    border-left: 0 !important;
    border-top: 1px solid var(--e-line) !important;
  }
  body.iyu-editorial .iyu-legal-table tbody td:first-child { width: auto; white-space: normal; }
  body.iyu-editorial .iyu-legal-analytics { padding: 22px 20px 24px; }
}

/* 43-4. v3.js tagPageSections() 는 main 안의 모든 <section> 에 iyu-subpage-content 를
   붙인다. 그래서 조문 하나하나가 88px 패딩과 지면색을 받아 카드처럼 떠 보였다.
   조문은 문서 안의 단락이므로 섹션 리듬에서 빼고, 문서 구역의 교차 지면도 끈다. */
body.iyu-editorial.iyu-legal-page .iyu-legal .iyu-legal-article:nth-of-type(n) {
  padding: 0 !important;
  margin-bottom: 0 !important;
  max-width: none !important;
  background: transparent !important;
  border: 0 !important;
}
body.iyu-editorial.iyu-legal-page .iyu-legal .iyu-legal-article + .iyu-legal-article {
  margin-top: 36px !important;
  padding-top: 36px !important;
  border-top: 1px solid var(--e-line) !important;
}
body.iyu-editorial.iyu-legal-page main.flex-grow > div > section:nth-of-type(3) {
  background: var(--e-paper) !important;
  border-top: 1px solid var(--e-line) !important;
  border-bottom: 0 !important;
}

/* ══════════════════════════════════════════════════════════════════════════
   §44. 용어사전 계층 도식 (2026-09-02)
   ──────────────────────────────────────────────────────────────────────────
   용어사전 20면은 그림 없이 1,500~2,200자가 이어졌다. 특히 MES 항목은 본문이
   "위에는 ERP, 아래에는 제어 계층" 이라고 설명하면서 그 구조를 글로만 읽게 했다.
   scripts/build-glossary-figure.py 가 넣는 계층 도식의 스타일이다.
   SVG 대신 HTML 로 짠 이유는 업종 페이지의 .iyu-connect 와 같다 — 한글 줄바꿈과
   반응형을 브라우저에 맡길 수 있고, 확대해도 글자가 뭉개지지 않는다.
   ══════════════════════════════════════════════════════════════════════════ */
body.iyu-editorial .iyu-stack { margin: 0; }
body.iyu-editorial .iyu-stack__grid {
  display: grid;
  grid-template-columns: 44px minmax(0, 1fr) 44px;
  gap: 0;
  align-items: stretch;
  max-width: 860px;
}
body.iyu-editorial .iyu-stack__layers {
  margin: 0;
  padding: 0;
  list-style: none;
  border: 1px solid var(--e-line);
  border-radius: var(--e-radius);
  background: var(--e-paper);
  overflow: hidden;
}
body.iyu-editorial .iyu-stack__layers > li {
  position: relative;
  display: grid;
  grid-template-columns: 116px minmax(0, 1fr) auto;
  align-items: baseline;
  column-gap: 16px;
  padding: 15px 18px;
  border-left: 3px solid transparent;
}
body.iyu-editorial .iyu-stack__layers > li + li { border-top: 1px solid var(--e-line); }
body.iyu-editorial .iyu-stack__layers > li b {
  color: var(--e-ink) !important;
  font-size: .9375rem;
  font-weight: 700;
  letter-spacing: -.01em;
}
body.iyu-editorial .iyu-stack__layers > li span {
  color: var(--e-ink-2) !important;
  font-size: .875rem;
  font-weight: 600;
}
body.iyu-editorial .iyu-stack__layers > li i {
  grid-column: 2;
  grid-row: 2;
  margin-top: 3px;
  color: var(--e-ink-3) !important;
  font-size: 12.5px;
  font-style: normal;
  line-height: 1.6;
}
/* 지금 보는 용어의 자리 */
body.iyu-editorial .iyu-stack__layers > li.is-current {
  border-left-color: var(--e-accent);
  background: var(--e-accent-wash);
}
body.iyu-editorial .iyu-stack__layers > li.is-current b { color: var(--e-accent-2) !important; }
body.iyu-editorial .iyu-stack__layers > li em {
  grid-column: 3;
  grid-row: 1 / span 2;
  align-self: center;
  padding: 4px 10px;
  border: 1px solid var(--e-accent);
  border-radius: var(--e-radius);
  background: var(--e-paper);
  color: var(--e-accent-2) !important;
  font-size: 12px;
  font-style: normal;
  font-weight: 700;
  white-space: nowrap;
}

/* 좌우 방향 표시 — 위에서 내려오는 지시, 아래에서 올라오는 실적 */
body.iyu-editorial .iyu-stack__rail {
  position: relative;
  display: flex;
  align-items: center;
  justify-content: center;
}
body.iyu-editorial .iyu-stack__rail span {
  color: var(--e-ink-3) !important;
  font-size: 11.5px;
  letter-spacing: .04em;
  writing-mode: vertical-rl;
  text-orientation: upright;
}
body.iyu-editorial .iyu-stack__rail::before {
  content: "";
  position: absolute;
  top: 14px;
  bottom: 14px;
  width: 1px;
  background: var(--e-line-2);
}
body.iyu-editorial .iyu-stack__rail::after {
  content: "";
  position: absolute;
  width: 7px;
  height: 7px;
  border-right: 1px solid var(--e-line-2);
  border-bottom: 1px solid var(--e-line-2);
}
body.iyu-editorial .iyu-stack__rail--down::after { bottom: 11px; transform: rotate(45deg); }
body.iyu-editorial .iyu-stack__rail--up::after { top: 11px; transform: rotate(-135deg); }

body.iyu-editorial .iyu-stack figcaption {
  max-width: 860px;
  margin: 16px 0 0;
  color: var(--e-ink-2) !important;
  font-size: .9375rem;
  line-height: 1.8;
}

@media (max-width: 768px) {
  body.iyu-editorial .iyu-stack__grid { grid-template-columns: 26px minmax(0, 1fr) 26px; }
  body.iyu-editorial .iyu-stack__layers > li {
    grid-template-columns: minmax(0, 1fr) auto;
    row-gap: 2px;
    padding: 13px 14px;
  }
  body.iyu-editorial .iyu-stack__layers > li span { grid-column: 1; }
  body.iyu-editorial .iyu-stack__layers > li i { grid-column: 1; grid-row: 3; }
  body.iyu-editorial .iyu-stack__layers > li em { grid-column: 2; grid-row: 1 / span 3; }
  body.iyu-editorial .iyu-stack__rail span { font-size: 10.5px; }
}

/* ══════════════════════════════════════════════════════════════════════════
   §45. 소식 · 채용 (2026-09-03)
   ──────────────────────────────────────────────────────────────────────────
   두 갈래가 통째로 비어 있었다. 인증과 특허 페이지는 "지금 무엇을 갖고 있는지"만
   보여 주고 언제 무슨 일이 있었는지 말하지 못했고, 채용은 단어조차 없었다.
   scripts/build-news-page.py · scripts/build-careers-page.py 가 만든다.
   ══════════════════════════════════════════════════════════════════════════ */

/* 45-1. 소식 목록 — 왼쪽 날짜 열, 오른쪽 내용. 훑으면 시점만 읽힌다. */
body.iyu-editorial .iyu-news-list {
  margin: 0;
  padding: 0;
  list-style: none;
  border-top: 1px solid var(--e-line);
}
body.iyu-editorial .iyu-news-item {
  display: grid;
  grid-template-columns: 176px minmax(0, 1fr);
  column-gap: 32px;
  padding: 28px 0 30px;
  border-bottom: 1px solid var(--e-line);
}
body.iyu-editorial .iyu-news-item__meta {
  display: flex;
  flex-direction: column;
  align-items: flex-start;
  gap: 8px;
  padding-top: 2px;
}
body.iyu-editorial .iyu-news-item__meta time {
  color: var(--e-ink) !important;
  font-size: .875rem;
  font-weight: 700;
  letter-spacing: -.01em;
}
body.iyu-editorial .iyu-news-item__kind {
  display: inline-block;
  padding: 2px 9px;
  border: 1px solid var(--e-line-2);
  border-radius: var(--e-radius);
  color: var(--e-ink-2) !important;
  font-size: 11.5px;
  font-weight: 600;
}
body.iyu-editorial .iyu-news-item__body h3 {
  margin: 0 0 10px !important;
  color: var(--e-ink) !important;
  font-size: 1.1875rem !important;
  line-height: 1.4 !important;
  font-weight: 700 !important;
  letter-spacing: -.015em;
}
body.iyu-editorial .iyu-news-item__body p {
  margin: 0 !important;
  color: var(--e-ink-2) !important;
  font-size: .9375rem !important;
  line-height: 1.8 !important;
  max-width: 62em;
}
body.iyu-editorial .iyu-news-item__ref {
  margin-top: 10px !important;
  color: var(--e-ink-3) !important;
  font-family: var(--e-mono);
  font-size: 12.5px !important;
  line-height: 1.6 !important;
}
body.iyu-editorial .iyu-news-item__links {
  display: flex;
  flex-wrap: wrap;
  gap: 8px;
  margin-top: 14px;
}
body.iyu-editorial .iyu-news-item__links a {
  display: inline-flex;
  align-items: center;
  padding: 4px 11px;
  border: 1px solid var(--e-line);
  border-radius: var(--e-radius);
  color: var(--e-ink) !important;
  font-size: 12.5px;
  font-weight: 600;
  text-decoration: none;
  transition: border-color .15s ease, background-color .15s ease;
}
body.iyu-editorial .iyu-news-item__links a:hover {
  border-color: var(--e-line-2);
  background: var(--e-paper-2);
}

/* 45-2. 채용 — 직무 카드 안의 "이런 경험" 목록 */
body.iyu-editorial .iyu-role__wants {
  margin: 18px 0 0;
  padding: 16px 0 0;
  border-top: 1px solid var(--e-line);
  list-style: none;
}
body.iyu-editorial .iyu-role__wants li {
  position: relative;
  padding-left: 16px;
  color: var(--e-ink-2) !important;
  font-size: .875rem;
  line-height: 1.75;
}
body.iyu-editorial .iyu-role__wants li + li { margin-top: 6px; }
body.iyu-editorial .iyu-role__wants li::before {
  content: "";
  position: absolute;
  left: 0;
  top: .8em;
  width: 7px;
  height: 1px;
  background: var(--e-accent);
}

/* 45-3. 지원 방법 — 번호가 순서를 뜻하지 않으므로 원문자 대신 괘선으로 나눈다 */
body.iyu-editorial .iyu-apply-list {
  margin: 0;
  padding: 0;
  list-style: none;
  border-top: 1px solid var(--e-line);
  max-width: 62em;
}
body.iyu-editorial .iyu-apply-list li {
  padding: 16px 0 18px;
  border-bottom: 1px solid var(--e-line);
  color: var(--e-ink-2) !important;
  font-size: .9375rem;
  line-height: 1.8;
}
body.iyu-editorial .iyu-apply-list li strong { color: var(--e-ink) !important; }

@media (max-width: 768px) {
  body.iyu-editorial .iyu-news-item {
    grid-template-columns: 1fr;
    row-gap: 12px;
    padding: 22px 0 24px;
  }
  body.iyu-editorial .iyu-news-item__meta { flex-direction: row; align-items: center; gap: 10px; }
}

/* 46-2. pk.bullets() 목록 마커.
   pagekit.py 가 before:content-[''] 등 Tailwind 임의값 클래스로 대시 마커를
   그리려 했는데, 이 정적 export 는 Next.js 빌드 시점에 고정된 CSS 번들만
   쓰고 있어(런타임 JIT 없음) 그 조합이 어디에도 컴파일돼 있지 않았다 —
   compare·industries·glossary·support·resources 등 pk.bullets() 를 쓰는
   페이지 전부에서 목록이 대시 없이 그냥 줄바꿈된 문단처럼 보였다. */
body.iyu-editorial .iyu-bullet-item {
  position: relative;
}
body.iyu-editorial .iyu-bullet-item::before {
  content: "";
  position: absolute;
  left: 0;
  top: 0.7em;
  width: 8px;
  height: 1px;
  background: var(--e-accent);
}
