@charset "utf-8";
/* main.css는 메인 페이지 전용 스타일 정의 */
/* [P-03] 이 파일은 자체 @media 블록을 두지 않는다 — 반응형은 responsive.css 「main : responsive」
 구간(css/responsive.css)으로 이관됐다. 2026-09-04 골격 반응형 분리. */

/* [정정 · 좌우 캡처 대조로 발견] #header 는 `position:fixed`라 애초에 문서 흐름 높이를 차지하지
 않는다 — 불투명 흰 배경으로 바꿨다고 별도 여백을 또 예약하면 실제 히어로 위에 86px 빈
 공백이 이중으로 생긴다(시안은 헤더가 히어로 프레임(960px) 안에 포함돼 있다 — get_metadata
 `11:447` 960 = 헤더 86 + 이미지 영역 874, 별도 가산 없음). 문서 높이가 시안(5542)보다 컸던
 원인 중 하나(섹션마다 86px 씩 밀림)였다 — padding-top 을 없애 겹침 구조로 되돌린다.
 히어로 상단 86px 은 원래도 이미지일 뿐이라 흰 헤더에 가려져도 콘텐츠 손실이 없다. */
#main{padding-top:0;}

/* ─────────────────────────────────────────────
 m-visual : S (섹션 패턴 : 비주얼형)
───────────────────────────────────────────── */
.m-visual{
	/* [반응형 2026-09-17 §최종시안 재측정 · G-14] 옛 값(height:100vh)은 시안 리터럴이 아니었다 —
 실측(get_metadata(11:447)): 프레임 "00_M" 1920×960(=GNB 86 + 이미지 영역 874). 100vh 는
 1080px 뷰포트에서 렌더 1080px 로, 원본 폭 1920 짜리 이미지를 세로 기준 cover 스케일하며
 가로까지 5.5% 확대해 흐려지는 결함을 냈다(작업 문서/§11-6 DOM 측정 0.992/1.055).
 1920 폭에서 960px(비율 0.5)를 유지하는 height:50vw 로 고정 — 1920 기준일 때만 정확히
 리터럴과 일치하고, 그 사이 폭(1025~1919)은 같은 비율로 줄어드는 재배치다(새 요소 없음).
 1024 이하는 아래 responsive.css 가 height:auto + min-height 로 이미 덮어써 비율 유지를
 포기하고 콘텐츠 높이를 우선한다(문구가 줄바꿈되며 늘어나므로 — 기존 결정 유지). */
	position:relative;width:100%;height:50vw;min-height:600px;overflow:hidden;
	/* [INT-01 상태 정의 — M-01 줌] 값은 js/main.js 의 W01_TEMP 가 setProperty 로 주입한다(단일
 출처). 여기 기본값은 JS 미실행(비정상) 시 폴백일 뿐이다. 실제 transform·transition·이징은
 모션 담당(MOT-03 — .backdrop 의 transform 주인은 줌 하나뿐이어야 한다) — 아래
 .backdrop 규칙에는 정적 scale 한 줄만 있고 전환은 모션 이 추가한다. */
	--zoom-scale-start:1.25;
	--zoom-scale-end:1;
	--zoom-duration:5000ms;
}
.m-visual .visual,
.m-visual .swiper-wrapper,
.m-visual .swiper-slide{height:100%;}
.m-visual .swiper-slide{position:relative;}
.m-visual .backdrop{
	position:absolute;top:0;left:0;width:100%;height:100%;z-index:-1;
	/* [모션 · MOT-03] 이 요소의 transform 주인은 줌 하나뿐 — 다른 효과를 더할 때는 이 규칙과
 상의한다. 대기 슬라이드 = scale(--zoom-scale-start,1.25) · 활성 슬라이드 =
 scale(--zoom-scale-end,1). 지속시간은 js/main.js 가 setProperty 로 주입하는
 --zoom-duration 한 곳만 본다(W01_TEMP 임시값 — 값이 바뀌면 여기는 안 고쳐도 된다).
 이징 — L4(onegrove.kr) 계산값 표본은 초반 빠르고 뒤로 갈수록 계속 느려지는 감속형이며
 30~60초 구간에서도 속도가 더 줄어 단순 ease-out 보다 꼬리가 길다(해석서 §2-5-2). animista
 곡선 표에서 그 성질(강한 지속 감속)에 가장 가까운 이름 있는 곡선은 easeOutExpo — 선정
 (근거: 해석서가 확보한 것은 「감속형」이라는 성질뿐이고 정확한 이름은 미확보라, 표본이
 보인 "끝까지 느려짐" 특성과 가장 가까운 기성 곡선을 골랐다. 확보값이 아니라 선정값이다). */
	transform:scale(var(--zoom-scale-end));
	transition:transform var(--zoom-duration) cubic-bezier(.19,1,.22,1);
}
.m-visual .swiper-slide:not(.swiper-slide-active) .backdrop{transform:scale(var(--zoom-scale-start));}
.m-visual .backdrop img,
.m-visual .backdrop video{width:100%;height:100%;object-fit:cover;}
/* [W-04 반영 · G-14] get_design_context(1:400) node 1:401 실측 — 평면 반투명 아니라 상단→하단
 그라디언트다. 베이스 #0a1139 는 이미지가 비칠 때만 보이는 배경색(이미지가 실사진으로
 교체됐으므로 실질적으로 화면엔 안 보임 — 이미지 로드 실패 폴백용으로만 남긴다). */
.m-visual .backdrop{background:#0a1139;}
.m-visual .backdrop:after{content:'';position:absolute;top:0;left:0;width:100%;height:100%;background:linear-gradient(180deg,rgba(0,0,0,.2) 7.5%,rgba(0,0,0,0) 17.917%);}
.m-visual .container{display:flex;flex-direction:column;justify-content:center;height:100%;}
/* [QA5-04/05 해소] 셀렉터를 `.swiper-slide h2` 로 좁힌다 — 옛 `.m-visual h2` 는 히어로 안의 다른
 h2(`.m-visual__strip-tit`)까지 매치해 opacity:0 이 reduce 상태에서 그대로 남는 결함(QA5-04)과
 68px 크기가 띠 제목에도 적용되는 결함(QA5-05)을 같이 냈다 — 빼보기로 원인 확인(검수). */
/* [P5B-02 재작업 · get_design_context(15:5538) 노드별 개별 조회 — 뭉쳐서 조회하면 틀린 값이 온다
 (재발 대조 H2·H5) — 46px/1.4 Bold, letter-spacing 0(리터럴에 값 없음 = 0, 기존 -1.38px 규칙값 폐기).
 가로 흐름 순서대로 margin-top 을 기록: 13:595(badge→h2) gap14 · outer(13:609) gap20 ·
 13:596(lead→desc) gap2 · outer gap20(divider 앞뒤 동일) · 10:401(desc-note→tel) gap8 ·
 13:678(그룹→tags) gap28. */
.m-visual .swiper-slide h2{
	margin-top:14px;font-size:46px;font-weight:700;line-height:1.4;color:#fff;letter-spacing:0;
	opacity:0;transform:translateY(40px);transition:all 1.2s ease .5s;
}
/* [W-02 해제 재작업 · 리터럴] Figma 1:400 node 1:810 강조 span 색 = Primary/Blue3 #72d2ff */
.m-visual .swiper-slide h2 .accent{color:var(--c-primary-light);}
.m-visual .swiper-slide-active h2,
.m-visual .swiper-slide-active .badge,
.m-visual .swiper-slide-active .lead,
.m-visual .swiper-slide-active .desc,
.m-visual .swiper-slide-active .desc--note{opacity:1;transform:translateY(0);}
/* [W-02 해제 재작업 · 리터럴] Figma 1:400 node 10:372 실측 — bg rgba(9,51,162,.7) · radius 12px ·
 padding 8px 16px · font 16px Regular · **width 340px, 가운데 정렬**(P5B-02 — 이전 판은 폭이
 1440px 전체로 늘어나 있었다). gap(13:595, 배지→제목) 14px 는 h2 margin-top 으로 반영. */
.m-visual .badge{
	display:inline-flex;width:340px;max-width:100%;padding:8px 16px;justify-content:center;border-radius:12px;
	background:rgba(9,51,162,.7);color:#fff;font-size:var(--fs-body-s);font-weight:400;line-height:1.4;
	opacity:0;transform:translateY(40px);transition:all 1.2s ease .3s;
}

.m-visual .badge2{width: 192px;}
/* [P5B-02 재작업] Body3(node 1:806) — 18px SemiBold 흰, 제목과 gap28 */
.m-visual .lead{
	margin-top:28px;font-size:var(--fs-gnb);font-weight:600;line-height:1.6;color:#fff;letter-spacing:0;
	opacity:0;transform:translateY(40px);transition:all 1.2s ease .8s;
}
/* [P5B-02 재작업] Body4(node 1:776) — 16px Regular #ccc, lead 와 gap2(같은 13:596 묶음),
 폭은 부모 Txt(15:5538) 738px 그대로(기존 640 근사 폐기) */
.m-visual .desc{
	margin-top:2px;max-width:738px;font-size:var(--fs-body-s);font-weight:400;line-height:1.6;color:#ccc;letter-spacing:0;
	opacity:0;transform:translateY(40px);transition:all 1.2s ease .9s;
}
.m-visual .desc2{

	margin: 28px 0 0px;

}

/* [P5B-02 재작업] 두 번째 desc(node 10:352, "건물 연면적을...") — 18px Regular 흰, divider 뒤 gap20 */
.m-visual .desc--note{
	margin-top:20px;max-width:738px;font-size:var(--fs-gnb);font-weight:400;line-height:1.6;color:#fff;letter-spacing:0;
	opacity:0;transform:translateY(40px);transition:all 1.2s ease .9s;
}
/* [마크업i §23] get_metadata(15:5538) node 13:810「Line 10」리터럴 — w625·색상 정보 없어(단순
 선, 별도 fill 미기재) 기존 --c-line-weak 계열보다 옅은 흰 반투명으로 hr 기본 border 를 대체.
 [P5B-02 재작업] margin-top 20(13:609 gap20, 배지블록과 동일) — 기존 24 근사 폐기. */
.m-visual .m-visual__rule{width:625px;max-width:100%;height:0;margin:20px 0 0;border:0;border-top:1px solid rgba(255,255,255,.24);}
/* [P5B-02 재작업 · FIG-06] 전화 두 항목 사이는 구분 글자(「l」)가 아니라 gap30(node 13:602) —
 글자를 임의로 추가한 게 [재발]이었다(HTML 에서 <span>l</span> 삭제). margin-top 8(10:401 gap8,
 desc-note 와의 간격). 글자 18px Bold 흰(node 10:399/13:606). */
/* [P5C-05 재발 · P5C-06 재발 · 필수 해소 · 마크업k] 시안(`10:399`·`13:606` 세그먼트) — 「본사」·「지사」
 라벨만 `#72d2ff`(나머지 전화번호는 흰). `line-height:1.6`(160%) 명시 — reset.css:150 의 전역
 `line-height:1`을 이 블록이 상속해 줄 높이가 줄었고, 그 결과가 아래 태그·버튼까지 누적으로
 밀어올렸다(P5C-06, `.tel`→`.area-pill`→`.btn-group` 순서로 -7·-5.5 번짐). */
.m-visual .tel{display:flex;flex-wrap:wrap;align-items:center;gap:30px;margin-top:8px;font-size:var(--fs-gnb);font-weight:700;line-height:1.6;color:#fff;}
.m-visual .tel a{display:inline-flex;align-items:center;gap:4px;font-weight:700;}
.m-visual .tel img{display:block;}
.m-visual .tel__label{color:#72d2ff;font-style:normal;}
/* [마크업i §23] get_metadata(15:5538) node 13:670「Tag」리터럴 — 항목 사이 gap 4곳 전수 8px(옛 12px 근사 정정)
 [P5B-02 재작업] margin-top 28(13:678 gap28, 전화 그룹과 태그 그룹 사이 — 기존 32 근사 폐기) */
.m-visual .area-pill{display:flex;flex-wrap:wrap;gap:8px;margin-top:28px;}
/* [r13 지적 · get_design_context(15:5538) node 13:654/13:670 개별 재조회] MTag 리터럴 —
 bg rgba(255,255,255,.1) · border 1px solid rgba(255,255,255,.2) · radius 8px · padding 6px 12px ·
 14px Light(300) 흰. 이전 값(굵은 글씨·짙은 바탕·패딩12/20·radius --r-md)은 근사값이었다. */
.m-visual .area-pill li{
	padding:6px 12px;border-radius:8px;background:rgba(255,255,255,.1);border:1px solid rgba(255,255,255,.2);
	color:#fff;font-size:14px;font-weight:300;line-height:1.6;box-sizing:border-box;
}
/* [마크업i §23] get_metadata(15:5540)「Btn」리터럴 — 두 버튼 사이 gap 247-235=12px(옛 16px 근사 정정) */
.m-visual .btn-group{display:flex;flex-wrap:wrap;gap:12px;margin-top:32px;}
/* [P5B-02] 위 76~79행 규칙과 합쳐 중복 제거, .desc--note 추가 */
/* [P5B-02 재작업 · get_design_context(15:5540) 개별 조회] 히어로 버튼 — auto-height + padding 14px 28px
 (렌더 높이 54px, 사이트 공통 .btn h70·pad0 32 와 다르다) · 글자-화살표 gap 20px(공용 gap8 과 다름).
 사이트 공통 .btn 을 바꾸면 다른 섹션이 깨지므로(sec4 선례와 동일 방식) 이 영역만 특이도로 덮는다. */
/* [P5C-06 · 필수 해소 · 마크업k] 시안 버튼 높이 54(padding14×2 + line-height160%(25.6)) — `line-height`
 를 명시 안 해 reset.css 전역값 1 을 물려받아 46(14×2+16)으로 렌더됐다. */
.m-visual .btn-group .btn{height:auto;padding:14px 28px;gap:20px;font-size:var(--fs-body-s);line-height:1.6; transition:.3s; transition:.3s;}

/* CTA 버튼 공통 — [해석서 M-02] 색값·아이콘은 피그마 버튼 컴포넌트가 정본이다(G-14).
 L1(https://www.invitrosco.com/) 의 #6400FF 는 가져오지 않는다(G-4) — TODO(디자인 요청):
 아래 --c-primary 는 아직 원테크 브랜드 컬러가 아니라 골격 기본값이다. */
main .btn{
	display:inline-flex;align-items:center;justify-content:center;gap:8px;
	position:relative;height:70px;padding:0 32px;border-radius:var(--r-pill);border:1px solid transparent;
	font-size:var(--fs-button);font-weight:700;white-space:nowrap;
	/* [INT-01 상태 정의 — M-02 버튼 호버] 색은 즉시 전환(L1 실측 패턴 대응 · 해석서 §2-4 —
 .mbtnMore 의 색 전환은 transition-duration:0s 이고 0.5s 는 화살표에만 걸려 있었다).
 1) 초기 상태 : 기본 배경/테두리/글자색(각 modifier) · .btn__arr 정지
 2) 활성 상태(호버·포커스) : 아래 modifier 별 :hover/:focus-visible 규칙으로 색 즉시 전환
 3) 열기/닫기 : 해당 없음(토글 아님)
 4) 키보드 : :focus-visible 을 :hover 와 함께 건다(포인터 없이도 같은 상태 도달)
 5) Mobile : 별도 분기 없음 — 터치는 클릭과 동일 취급, hover 상태는 터치에서 발생하지 않음
 화살표 이동(모션 소관)은 .btn__arr 를 옮긴다 — HTM-07 에 따라 빈 장식 태그 대신
 가상요소로 자리만 잡았다. 아이콘 자산(SVG)·정확한 이동 거리는 피그마 버튼 컴포넌트
 미확보로 TODO(디자인 요청) — 확보 전까지 .btn__arr 는 빈 자리(폭만 있음)다. */
	transition:background-color 0s,border-color 0s,color 0s;
}
.btn--sm{height:56px;padding:0 24px;font-size:var(--fs-label);}
.btn--primary{background:var(--c-primary);border-color:var(--c-primary);color:#fff;}
.btn--primary:hover,
.btn--primary:focus-visible{background:var(--c-primary-dark);border-color:var(--c-primary-dark);}
.btn--line{background:transparent;border-color:#fff;color:#fff;}
.btn--line:hover,
.btn--line:focus-visible{background:#fff;color:var(--c-text);}
/* [QA5-09 정정] 시안 `15:5540` — 히어로 「대상 여부 확인하기」는 흰 90% 채움 pill(테두리 없음).
 좌우 캡처 대조(`_qa/마크업/cmp_hero_1440.png`)에서 기존 .btn--primary(파랑) 대신 나왔어야 할 색 —
 두 버튼 class 가 뒤바뀌어 있던 결함을 여기서 같이 해소한다. */
/* [P5C-24 · 권장 해소 · 마크업k] 시안 글자 `#070707`(옛 `--c-text`=#222 근사) */
.btn--white90{background:rgba(255,255,255,.9);border-color:transparent;color:#070707;}
.btn--white90:hover,
.btn--white90:focus-visible{background:#fff;}
.btn--line-invert{background:transparent;border-color:var(--c-text);color:var(--c-text);}
.btn--line-invert:hover,
.btn--line-invert:focus-visible{background:var(--c-text);color:#fff;}
/* [정정 2026-09-17] 이전 버전은 카카오 관용 노란색(#fae100)을 임시 배치했었다 — 실제로는
 G-4(L1·카카오 관용색 등 「남의 색」 채우지 않기) 위반 소지가 있는 추정값이었다. Figma
 node 1:213/1:214(CTA 배너 「카카오톡 문의하기」) 실측은 배경 투명 + 흰 테두리 + 흰 글자다.
 .sec5 .btn--kakao(옛 .sec6, W-04 재번호)에서 그 리터럴로 덮어쓴다. .quick-visual__btn--kakao 는
 §10 자산 마무리에서 최종 시안(node 40:7203) 리터럴 #FFEA00 로 확정 — 미해결 표시 해제. */
.btn--kakao{background:transparent;border:1px solid var(--c-text);color:var(--c-text);}
.btn--kakao:hover{background:var(--c-text);color:#fff;}
/* [HTM-07] 화살표는 빈 장식 태그가 아니라 가상요소 — TODO(디자인 요청): 피그마 버튼 컴포넌트
 아이콘 SVG·이동거리 미확보라 현재는 폭만 있는 빈 자리다(width 0 이면 자리 자체가 없어
 모션 가 검증할 대상이 안 생기므로 최소 폭만 확보).
 [모션 · M-02 화살표 모션] 값은 L1(invitrosco) §2-4 실측 리터럴 그대로다 —
 `animation: 0.5s 0.1s both infinite` · 색 전환은 0s(즉시, 이 파일 .btn 의 transition:0s 가 이미
 담당·수정 안 함). L1 은 두 번째 화살표 아이콘이 96px 폭 안에서 -100% 만큼 흘러가는 스와핑
 구조인데, 그 아이콘 SVG·정확한 이동거리(96px)가 아직 없다(위 미해결 표시와 동일 항목) — 그 값을 그대로 옮기면
 자산이 없는 빈 상자를 96px 밖으로 밀어내는 것이라 FIG-06(없는 걸 만들지 않는다)에 걸릴
 여지가 있어, 지금 있는 빈 자리(16px) 안에서만 움직이도록 거리값을 낮췄다(이동한다는 사실과
 타이밍만 L1 실측 그대로 재현 · 거리는 자산 확보 전까지의 임시 폭). 자산이 오면 폭·이동거리를
 같이 확정한다 — 위 미해결 표시(디자인 요청) 목록에 이미 있음. 현재는 배경·아이콘이 없어 화면에서는
 보이지 않는다(움직일 그림이 아직 없다) — 검증 결과는 작업 문서 참고. */
/* [P5B-03 재작업 · FIG-04·재발] 시안 화살표 자산은 `Group1197`(41×10, 흰 stroke 2줄) 하나뿐이다.
 이전 판은 자리마다 ① 빈 16×1 선(투명) ② 41×1 머리 없는 선 ③ `mask:url`(`file://` 더블클릭
 납품에서 안 그려짐 — 빼보기·대조군으로 확인, 에이드 재발 유형)로 제각각이었다. `mask`·`background`
 방식 둘 다 색상 변형마다 별도 자산이 필요해지므로, 인라인 SVG `stroke="currentColor"` 로 통일해
 버튼 글자색을 그대로 따르게 한다(자산은 하나 · 9곳 전부 이 클래스 하나로 대체). */
.btn__arr{display:inline-block;flex:0 0 auto;width:41px;height:10px;}
@keyframes btnArrowMove{0%{transform:translateX(0)}100%{transform:translateX(6px)}}
.btn:hover .btn__arr,
.btn:focus-visible .btn__arr,
.btn-pill:hover .btn__arr,
.btn-pill:focus-visible .btn__arr{animation:btnArrowMove .5s .1s infinite;}

/* [§10 자산 마무리] Figma 1:400 node 40:6964「Fix_R_Btn」실측 — 아이콘 전용 원형 버튼 3개.
 좌표: hero(1920 기준) left 1831 top 394 → 우측 여백 89px, 카카오·문의 두 개는 48px 원형 +
 gap 8px 묶음, 그 아래 20px gap 두고 TOP 49px 원형. 원형 배경은 download_assets(40:6964)로
 확인한 단색 원(카카오 #FFEA00 · 문의 #0000FF)을 CSS 배경색으로 재현(6원칙④ 예외 — 피그마
 렌더와 같은 결과인 단색 배경). 글리프는 실제 SVG(images/main/ico_quick_*.svg). */
/* [P5B-14 재작업] 1920(스크롤바 없음) 재측정 — x1783(시안 1831, Δ-48). 1920-1831-49(버튼폭 절반 여백)=40 */
/* [P5C-17 · W-07 결정(06_ §32) · 마크업k] `position:absolute` 라 `scrollY` 가 늘면 `.m-visual`
 문서 흐름을 따라 함께 올라가 화면 밖으로 나가고, 눌러도 반응이 없었다(검수 실측 scrollY 3000 → y −2458).
 시안 레이어 구조상 `Fix_R_Btn`(40:6964)이 페이지 최상위(1:400) 직속이고 이름 자체가 고정을 뜻한다
 (제작·마크업 기록) — `position:fixed` 로 바꾼다. `.m-visual` 은 transform 을 걸지 않으므로(위 285행
 `position:relative` 뿐, containing-block 트랩 없음) DOM 위치를 옮기지 않아도 뷰포트 기준으로 고정된다.
 1920 초기 좌표(top394/right40)는 스크롤 0 지점 값 그대로 유지 — 요청확인 사항 5 회신 전 임시
 조치이며(absolute 복귀는 이 한 줄), 확인 사항 표는 그대로 둔다. */
.quick-visual{position:fixed;right:40px;top:394px;z-index:var(--z-quick);display:flex;flex-direction:column;gap:20px;align-items:center;}
.quick-visual__group{display:flex;flex-direction:column;gap:8px;}
.quick-visual__btn{
	display:inline-flex;align-items:center;justify-content:center;
	width:48px;height:48px;border-radius:50%;border:0;padding:0;
	background:rgba(68,68,68,.3);backdrop-filter:blur(10px);-webkit-backdrop-filter:blur(10px);
	transition:background var(--t-base) linear;cursor:pointer;
}
.quick-visual__btn img{display:block;pointer-events:none;}
/* [원테크 · 리터럴] node 40:7203(Kakao) 배경 #FFEA00 — TOP·문의와 배경 색이 다른 유일한 버튼 */
.quick-visual__btn--kakao{background:#ffea00;}
.quick-visual__btn--kakao:hover,
.quick-visual__btn--kakao:focus-visible{background:#e6d200;}
/* [원테크 · 리터럴] node 40:7204(Inquiry) 배경 #0000FF(Primary/Blue1) */
.quick-visual__btn--inquiry{background:var(--c-primary);}
.quick-visual__btn--inquiry:hover,
.quick-visual__btn--inquiry:focus-visible{background:var(--c-primary-dark);}
.quick-visual__btn--top:hover,
.quick-visual__btn--top:focus-visible{background:var(--c-primary);}
/* [2차 반려 대응 · 지적1] no-JS 폴백 — 1차 시도(.swiper-slide:first-child, 특이도(0,3,1))는
 틀렸다. 특이도상 .swiper-slide-active(0,2,1)보다 항상 이겨서, Swiper 가 실제로 배치돼
 슬라이드가 2번으로 전환된 뒤에도 1번 슬라이드 헤드라인이 계속 opacity:1 로 남아
 2번 위에 겹쳐 보이는 회귀를 만들 뻔했다(classList 시뮬레이션으로 실측).
 특이도 싸움이 아니라 "Swiper 가 붙었는가"라는 상태 자체로 조건을 건다 — Swiper 는
 초기화 시 컨테이너(main.js 의 new Swiper 대상과 동일한 .m-visual .visual.swiper 요소)에
 .swiper-initialized 를 붙인다. 그 클래스가 없을 때만 폴백이 걸리고, 붙는 순간
 :not(.swiper-initialized) 조건 자체가 거짓이 되어 폴백이 스스로 꺼진다 — 특이도와
 무관하게 규칙이 아예 매치되지 않으므로 원본 규칙과 충돌할 수 없다.
 (슬라이드가 세로로 겹쳐 쌓이는 문제는 이 CSS만으로 해결되지 않는다 — js/lib/ 실배치가
 근본 해결책이며, README §9-1/퍼블리싱 보고서 §6 참조) */
.m-visual .swiper:not(.swiper-initialized) .swiper-slide:first-child h2,
.m-visual .swiper:not(.swiper-initialized) .swiper-slide:first-child p{opacity:1;transform:none;}

/* [마크업i §23] 진행바·화살표(16:5793) — 절대 left:50%+translateX(-105px)(=855abs, 폭210의 정중앙)·
 top:809px(hero 기준). 클릭 동작·진행바 실시간 구간 갱신은 인터랙션(INT-01) — 여기는 모양·자리만. */
.m-visual__controls{
	position:absolute;left:50%;top:809px;transform:translateX(-105px);z-index:2;
	display:flex;align-items:center;gap:20px;
}
/* [P5D-09 · 권장 해소 · 마크업l — P5C-21 재검토] get_screenshot(13:3445) 픽셀 실측 — 가장 어두운
 화소가 (184,184,184)다. `#999999`(153,153,153)를 흰 배경에 그대로 얹으면 (153,153,153)이
 나와야 하는데, opacity .7 로 얹으면 255*.3+153*.7=183.6 ≈ 184 로 정확히 일치한다 — 시안의
 기본 상태 자체가 opacity .7(디자인 컨텍스트 래퍼 `className="opacity-70"`)이었다. P5C-21 은
 반대로 「불투명이 맞다」고 판정하고 되돌렸는데, 그때는 스크린샷 화소를 실측하지 않고 눈대조만
 했다(재발 방지 — 다음엔 지워보기 대신 화소값으로 확정). 시안대로 기본 .7, hover 는 1 로 살짝
 또렷해지는 방향(기존 hover 대비 강조 의도 유지, 방향만 반전). */
.m-visual__arrow{display:block;width:32px;height:32px;opacity:.7;transition:opacity var(--t-base) linear;}
.m-visual__arrow:hover,
.m-visual__arrow:focus-visible{opacity:1;}
.m-visual__arrow img{display:block;pointer-events:none;}
/* [인터랙션 · W-06 후속] 화살표 클릭·진행바 상태 전환 — §23 이 남긴 정적 배경(ico_carousel_bar.svg,
 슬라이드1 고정 상태)을 실제 상태 전환이 가능한 두 불릿으로 바꿨다. 새 모양을 짓지 않았다 —
 ico_carousel_bar.svg 안의 rect(활성 바)·circle(비활성 점) 두 도형을 그대로 분리해
 ico_carousel_bullet_active.svg·ico_carousel_bullet_inactive.svg 로 재사용했다(FIG-04 — 열어서
 치수·색 확인, 새 그림 아님). Swiper bullet 렌더는 js/main.js 가 클래스만 토글한다(STA-01). */
/* [P5D-04 · 필수 해소 · 마크업l] 원인 확정(빼보기 — file:// 헤드리스로 getComputedStyle 대조) —
 swiper-bundle.min.css `.swiper-pagination-bullets.swiper-pagination-horizontal{width:100%}`
 가 클래스 2개(특이도 0,2,0)라 이 규칙(클래스 1개, 0,1,0)을 이긴다. `.visual-pagination` 이
 실제로 이 두 클래스를 함께 달고 있어(js/main.js `pagination:{el:'.visual-pagination'}`) 그대로
 맞물린다. width:100% 인 flex item 은 부모(`.m-visual__controls`, 폭 auto)의 기준 폭이 없어
 플렉스 계산이 불확정 상태로 빠지고, 그 결과 화살표(flex-shrink:1)까지 32→19.86px 로 줄고
 진행바 트랙은 106→130.29px 로 늘어 활성 막대·불릿이 −12/−7px 밀렸다(P5B-19 의 margin 충돌과
 같은 뿌리 — swiper 복합 클래스 선택자가 우리 단일 클래스 규칙을 특이도로 이긴다). !important
 로 되돌린다(P5B-19 선례와 같은 처방). */
.visual-pagination{width:106px !important;height:10px;display:flex;align-items:center;gap:16px;}
/* [모션 · §W-06 후속] 인터랙션 인계(03_ §9) — 불릿 폭 전환에 transition 이 없어 즉시 전환되던 것을
 보완한다. 시안·해석서에 이 전환의 타이밍 지시가 없어 MOT-01 기본값(all .2s linear)을 쓴다.
 width 는 레이아웃을 흔드는 속성이지만(일반 금지) 이 컨테이너는 106px 고정 폭 안의 두 불릿뿐이라
 흔들리는 범위가 자기 flex 형제(불릿 1개)로 한정되고 문서 전체 리플로우로 번지지 않아 그대로 둔다. */
/* [P5B-19 재작업 · 인계] 226→210 원인 확정 — Swiper JS 가 `.visual-pagination` 에
 `swiper-pagination-horizontal.swiper-pagination-bullets` 두 클래스를 동시에 붙이고, 라이브러리
 기본 CSS 의 `.swiper-pagination-horizontal.swiper-pagination-bullets .swiper-pagination-bullet
 {margin:0 4px}`(swiper-bundle.min.css) 가 이 셀렉터(클래스 2개 복합)라 아래 규칙(클래스 2개,
 순서상 나중이지만 특이도 동률 아님 — 저쪽이 복합 클래스라 더 높음)을 이긴다. 불릿 2개 ×
 좌우 4px = 16px 가 그대로 226(210+16)의 성분. margin:0 !important 로 되돌린다. */
.visual-pagination .swiper-pagination-bullet{
	width:10px;height:10px;margin:0 !important;border-radius:0;background:url('../images/main/ico_carousel_bullet_inactive.svg') no-repeat center/contain;
	opacity:1;cursor:pointer;transition:width .2s linear;
}
/* [P5C-04 · 필수 해소 · 마크업k] `ico_carousel_bullet_active.svg` 는 80×10(자산 정상, 파일 열어 확인)
 이라 `background-size:contain`(가로세로 비율 유지)이 박스(80×8, 세로가 더 좁음)에서는 세로 8px 을
 기준으로 줄어들어 그림이 80×8 이 아니라 64×8 로 렌더된다(자산 정상 ≠ 화면 정상 — 에이드 mask
 유형과 같은 「계산값 정상, 그림 다름」). 자산 비율을 억지로 안 지키고 박스 치수(80×8)에 그대로
 늘려 채운다 — 활성 막대는 진행률 표시용 단색 pill 이라 늘려도 시각 정보 손실이 없다. */
.visual-pagination .swiper-pagination-bullet-active{
	width:80px;height:8px;background:url('../images/main/ico_carousel_bullet_active.svg') no-repeat center/100% 100%;
	transition:width .2s linear;
}
/* m-visual : E */

/* [QA5-01~03 재작업으로 폐기] .section-header 는 sec2(.sec2__head)·sec3(.sec3__head)·
 sec4(.sec4__head-txt) 가 각각 시안 전용 구조로 갈라지며 더 이상 markup 에서 쓰지 않는다 —
 재발 유형 H5(옛 반응형 규칙 잔존) 방지를 위해 규칙 자체를 지운다. */

/* ─────────────────────────────────────────────
 m-visual__strip : S (전국 점검 가능 띠 — 해석서 §8 순 3, 옛 .sec2 → W-04 히어로 병합)
───────────────────────────────────────────── */
/* [W-04 · 결정 반영] 독립 섹션(.sec2)으로 두지 않는다 — 최종 시안(1:400) node 15:5620
 「Bar」는 히어로(node 11:447) 자식으로, 히어로 배경 이미지(m-visual01.jpg) 위에 겹친 반투명
 띠다. `#0a1139` 합성 근사치(G-14 위반)를 없애고, 실제 히어로 이미지를 그대로 아래 깔되 이
 띠 구간에만 리터럴 rgba(1,66,139,.6) 오버레이를 얹는다 — 색+투명도는 리터럴, 바탕은 실사진. */
.m-visual{position:relative;}
.m-visual__strip{position:absolute;left:0;right:0;bottom:0;height:77px;/* background:var(--c-navy-strip); */z-index:1; display: none;}
/* [마크업c 재정정] get_design_context(1:400 · node 15:5620) 리터럴 — 띠 내용은 컨테이너 좌측
 기준(left:240px, 페이지 좌 여백과 동일)이지 가운데 정렬이 아니다. `.m-visual .container`
 (히어로 본문, justify-content:center)가 선택자 특이도가 같아 이 규칙에 없는 justify-content
 를 그대로 물려받아 가운데로 밀린 채 렌더되고 있었다 — flex-start 로 명시 override. */
/* [마크업d 재정정 · 진짜 원인] flex-direction 을 이 규칙에서 안 정했더니 같은 특이성(0,2,0)의
 `.m-visual .container`(줄61, flex-direction:column) 값이 "속성 단위 병합"으로 그대로 살아남아
 메인축(세로)엔 flex-start 가, 교차축(가로)엔 align-items:center 가 걸려 결과적으로 가로
 가운데 정렬처럼 보였다(v1.9 일하는 규칙 13 — "이 규칙이 나중에 있으니 이긴다"는 셀렉터
 전체가 아니라 "그 규칙이 선언한 속성만" 이긴다는 점을 놓쳤다). flex-direction:row 를 여기서
 직접 선언해 끊는다 — 지워보기로 확인: row 없이 재캡처하면 다시 가운데, row 추가 후 좌측. */
/* [P5C-16 · 필수 해소 · 마크업k] get_design_context(15:5620) 리터럴 재조회 — 컨테이너 간격은 30(그룹↔
 구분선↔그룹), 아이콘-글자 내부 간격은 10(옛 20 근사 폐기). column-gap 40→30. */
.m-visual__strip .container{position:relative;height:100%;display:flex;flex-direction:row;flex-wrap:wrap;justify-content:flex-start;align-items:center;gap:24px 30px;}
/* [P5B-11 재작업] 시안 렌더 재확인 — 제목 뒤에 세로 구분선이 있다(누락분, HTM-07 가상요소로). */
.m-visual__strip-tit{display:flex;align-items:center;gap:10px;font-size:var(--fs-gnb);font-weight:700;color:#fff; margin-bottom: 15px;}
/* [P5C-16] 구분선(::after)은 이 title 그룹의 마지막 자식 — text↔구분선 간격을 컨테이너 기준
 30px 으로 맞추려면 위 flex gap(10)에 20px 를 더한다. */
/* .m-visual__strip-tit::after{content:'';display:block;width:1px;height:20px;margin-left:20px;background:rgba(255,255,255,.24);} */
/* [FIG-04] 아이콘 자산 미확보 — TODO(디자인 요청). Figma 는 24_Map/Map_15 SVG를 쓴다(1:400 node 13:718). 자리만 확보 */
/* [§10 자산 마무리] 이제 <img> 요소 — 배경색 자리 채움 규칙 제거, 크기만 유지 */
.m-visual__strip-icon{display:inline-block;width:24px;height:24px;}
.m-visual__strip-area{display:flex;flex-wrap:wrap;gap:8px;}
/* [원테크 · 2026-09-17 리터럴 · 1:400] get_design_context(1:400) node 15:5620 실측 —
 본사(filled #003aae) · 현재위치(filled #00237c, MMap Active) · 나머지(투명+테두리 rgba(238,238,238,.4)) */
.m-visual__strip-area li{padding:6px 14px;border-radius:100px;border:1px solid rgba(238,238,238,.4);color:#f8f8f8;font-size:14px;font-weight:400;}
.m-visual__strip-area li.is-hq{background:#003aae;border-color:transparent;color:#fff;}
.m-visual__strip-area li.is-active{background:var(--c-primary-dark);border-color:transparent;color:#fff;font-weight:600;}
/* [정정 · 지시] 「부산지점 포함 6개(사이트맵 추정)」는 오귀속이었다 — 사이트맵엔 지사
 목록이 없고(_source/sitemap_utf8.csv "부산" 0건), 출처는 작업 문서:251(Plan
 와이어프레임 1:89 판독). 반대편이 고객 원문이 아니므로 최종 시안(1:400 node 15:5620) 5개로
 확정 — 확인 사항 아님. */
/* m-visual__strip : E */

/* ─────────────────────────────────────────────
 sec2 : S (OUR BUSINESS 사업 분야 — 해석서 §8 순 4, Figma 1:167~1:193 · 옛 .sec3 → W-04 재번호)
 [CSS-04] BEM: 블록 .card-list · 요소 __item(li) / __link(a, 카드 전체) — .card는 기존
 관용구 컨테이너 이름으로 유지, 반복 단위(li/a)만 BEM 요소로 표기한다.
───────────────────────────────────────────── */
/* [마크업e §17 재작업 · G-14] get_metadata(11:448)+get_design_context(11:448) 요소별 좌표
 리터럴로 다시 짰다. 섹션 자체 프레임 실측 높이는 **1706px**(카드4 하단 1185+521 — frame
 height="1706" 그대로) — 옛 문서의 「1731px」는 이번 노드 리스캔에서 나오지 않는 값이라
 폐기하고 1706 을 검증 기준으로 쓴다(§17 sec2 좌표표 참조). 좌표 원점 = 컨테이너 콘텐츠
 좌상단(뷰포트 1920 기준 x=240,y=0) — 이 원점이 곧 노드 11:448 프레임 원점과 일치한다
 (기본 .container: max-width 1470 + pad-side 15 → (1920-1470)/2+15 = 240, 리터럴 x=240 과
 정확히 맞아떨어져 컨테이너 폭 자체는 건드리지 않는다). */
/* [마크업e §18 재정정 — 지적] 기준점 오류였다. 앞 판은 노드 11:448 프레임 원점(y=825)을
 0 으로 놓고 상대화했는데, 구현 측 `.sec2` 박스는 문서 절대 y=960(히어로 끝)에서 시작한다 —
 서로 다른 두 좌표계를 그대로 비교해 Δ=0 으로 오판했다(재발대조표 등재). `1:400` 절대좌표
 하나로 통일한다: sec2 박스 절대시작=960(고정, 다른 담당 영역) · sec3 시작=2691(고정) ·
 1_C(카드1·5:321) 절대 y=1120 → sec2-상대 160(=1120-960) — 이 값이 콘텐츠 시작 패딩이다.
 마지막 카드(4_C·5:344 절대y2010, 높이~521) 하단 절대=2531 → sec3(2691)까지 남는 160px 이
 하단 패딩(콘텐츠 좌표가 아니라 슬롯 정합용 여백, 이전 판과 같은 원리 — 값만 재계산). */

.sec2{position:relative;padding:160px 0 260px;background:#fff; max-width:100%;  overflow-x: clip; }
.sec2__inner{width:100%;}
.sec2__watermark{
	position:absolute;left:545px;top:-135px;width:1776px;height:560px;
	font-family:'Pretendard',sans-serif;font-weight:800;font-size:400px;line-height:1.4;
	color:#f8f7fb;white-space:nowrap;pointer-events:none;z-index:0;overflow:hidden;
}
.sec2__inner{position:relative;z-index:1;display:flex;align-items:flex-start;}
/* [마크업e] Txt(5:302) w=359 · 라벨→타이틀→본문→버튼 gap 전부 40(figma y=0/56/214/318) */
.sec2__head{flex:0 0 359px;margin-top:40px; position: sticky; top: 50px;}
.sec2__head .sticky{ }
.sec2__head .eyebrow{font-family:'Montserrat','Pretendard',sans-serif;font-size:var(--fs-body-s);font-weight:700;color:var(--c-primary);letter-spacing:6.4px;text-transform:uppercase;}
/* [P5C-07 재발 · 필수 해소 · 마크업k] sec2·sec3·sec5 42px 제목 3곳 — 시안(`5:304`·`5:368`·`7:673`)
 letter-spacing 전부 0. `-1.26px`(-3%)는 사이트 공통 "42px×-0.03em" 공식을 임의 적용한 근사값
 이었다(G-14 — 규칙 표준값이 피그마 리터럴을 덮은 재발). grep 전수 재확인: 파일 안 3곳 전부 해소. */
.sec2__head h2{margin-top:40px;font-size:42px;line-height:1.4;font-weight:700;color:var(--c-text);letter-spacing:normal;}
/* [P5C-09 · 필수 해소 · 마크업k] 시안(`5:248`) `#444` — 공용 토큰 `--c-text-sub`(#666) 근사 대신
 이 섹션 전용 리터럴(토큰 자체는 안 건드림). */
.sec2__head .desc{margin-top:40px;font-size:var(--fs-body-l);line-height:1.6;color:#444;}
/* [QA5-01] 「바로가기」는 밑줄 텍스트가 아니라 검정 pill + 화살표(Figma 43:8260, px 28/py 14→h54) */
.sec2__head .btn-pill{
	display:inline-flex;align-items:center;gap:20px;margin-top:40px;padding:14px 28px;
	border-radius:var(--r-pill);background:var(--c-text);color:#fff;font-size:var(--fs-body-s);font-weight:700;line-height:1.6;
	transition:background var(--t-base) linear;
}
.sec2__head .btn-pill:hover{background:var(--c-primary);}
/* [P5B-03 재작업] `Group1197` 자산 확보됨(§ 위 .btn__arr) — 머리 없는 41×1 선을 실제 화살표로 교체.
 HTML 안 `<svg class="btn__arr">` 를 이 버튼도 그대로 쓴다(currentColor = 흰). */

/* [마크업e §17] 카드 2×2 지그재그 — Figma 절대좌표(1_C x1300/y1120 · 2_C x824/y1320 · 3_C
 x1300/y1810 · 4_C x824/y2010)를 프레임원점(x240/y825) 기준 상대값으로 바꾸면
 1_C(0,295) 2_C(-476,495) 3_C(0,985) 4_C(-476,1185) → 우열(1_C·3_C) 대비 좌열(2_C·4_C)
 이 x−476(=96+380, 컬럼폭+갭) · y+200 만큼 밀려 있다. 컬럼폭 380 · 컬럼갭 96 · 카드 전체
 폭 856(=380×2+96) · 세로 그리드 라인 0/200/690/890(3_C: 상단 카드높이550 + 행간140) 을
 grid-template-rows 로 직접 고정해 지그재그를 만든다 — margin 근사가 아니라 좌표 자체. */
.sec2 .card{width:856px;margin-left:auto;}
.sec2 .card ul{
	display:grid;grid-template-columns:380px 380px;column-gap:96px;
	grid-template-rows:200px 490px 200px auto;
}
.card-list__item{min-width:0;}
.card-list__item:nth-child(1){grid-column:1;grid-row:2;}   /* 2_C 네트워크·보안설비 시공 */
.card-list__item:nth-child(2){grid-column:2;grid-row:1;}   /* 1_C 정보통신설비 유지보수(VIEW) */
.card-list__item:nth-child(3){grid-column:1;grid-row:4;}   /* 4_C 소프트웨어 서비스 */
.card-list__item:nth-child(4){grid-column:2;grid-row:3;}   /* 3_C 전기통신 기자재 공급 */
.card-list__item--offset{margin-top:0;}   /* 오프셋은 grid-row 로 대체 — 클래스는 마커만 유지 */
.card-list__link{display:block;height:100%;transition:all var(--t-base) linear; height: 400px;	}
.card-list__link .pic{height: 400px; margin-bottom: 20px; transition:.3s; overflow: hidden; border-radius: 0px;}
.card-list__link:hover{transform:translateY(-6px);}
.card-list__link:hover .pic{border-radius: 20px;}

/* [마크업e] Figma M_Bussies_Img 380×400 · gap-[20px]. [P5B-06 재작업 · get_screenshot(11:448) 재확인]
 모서리(rounded-[20px])는 카드 4장 중 1_C(정보통신설비 유지보수, .card-list__link--view)만 있다 —
 나머지 3장은 각지다. 전 카드 공통 규칙에서 뺀다. */
.card--business .card-list__item .pic{transition:.3s; position:relative;width:380px;height:400px;margin-bottom:20px;overflow:hidden; transition:.3s}
.card--business .card-list__item:hover .pic{border-radius: 20px;} 
.card-list__link--view .pic{margin-bottom: 20px; overflow: hidden;}
.card-list__link .pic img{width:100%;height:100%;object-fit:cover;}
/* [P5C-20 · 필수 해소 · 마크업k] get_design_context(5:322) 리터럴 `object-bottom` — 카드2(네트워크·
 보안설비 시공)만 하단 기준 크롭. 카드1(img_sec201)·카드4(img_sec204)는 크롭 자체가 CSS 로 못
 맞추는 형태(비대칭 확대·오프셋)라 figma 렌더 픽셀을 그대로 재추출해 자산을 바꿨다(FIG-04 —
 자산 재추출, CSS 근사 아님). 카드3(img_sec203)은 원래도 center-cover 로 일치. */
/* [P5D-07 · 필수 해소 · 마크업l] img_sec202(카드1)도 같은 처리로 옮긴다 — 원본이 1024×540(랜드스케이프,
 비율 1.90:1)이라 380×400 박스(비율 0.95:1)에 어떤 object-position 을 줘도 원본 폭의 절반 가까이가
 잘려 나가 시안보다 크게 확대된 화각이 됐다(object-position 근사의 한계, `[P5D-07 원인]`). 카드
 전체(5:322)를 2배 스케일로 export 해 이미지 레이어 영역(0,0,760,800)만 잘라낸 픽셀을 그대로
 자산으로 썼다(FIG-04 — figma 렌더 그대로, 새 크롭 계산 없음) — 비율이 박스와 정확히 같아(0.95:1)
 더 이상 object-position 보정이 필요 없다. */
/* [마크업e] Figma View_Btn(7:393/7:406) — 이미지 박스 기준 left116/top127, 지름148, 라벨 left164/top194 */
.card-list__link .pic::before{width: 100%; height: 100%; display: block;
	content:'';position:absolute;inset:0;background:rgba(255,255,255,.2);backdrop-filter:blur(5px);z-index:1; opacity: 0; transition:.3s;
}

/* [P5B-07 재작업 · FIG-04·FIG-07] 시안 VIEW 원 = 반투명 `Ellipse2` 자산(ico_arrow_a.svg, 이미 추출·검증)
 — 이전 판은 CSS 로 불투명 흰 원을 새로 그려 자산을 안 썼다(제작 소지). 글자도 원문 「ViEW」 그대로. */
/* [P5C-12 · 필수 해소 · 마크업k] get_design_context(5:321 안 I5:338;42:8176 — 실제 카드1 내장 VIEW
 배지, `.card-list__view` 가 매치되는 그 노드) 리터럴 text-[blue] = Primary/Blue1(#0000ff, var(--c-primary)).
 흰색은 근사였다. */
.card-list__view{
	position:absolute;left:116px;top:127px;z-index:2;
	display:flex;align-items:center;justify-content:center;width:148px;height:148px;border-radius:50%;
	background:center/contain no-repeat url('../images/main/ico_arrow_a.svg');color:var(--c-primary);
	font-family:'Montserrat','Pretendard',sans-serif;font-size:var(--fs-body-s);font-weight:700;letter-spacing:3.2px;  
	opacity: 0; transition:.3s;
}
/* [마크업e 리터럴] 카드 제목 22px `#00237c` · 본문과 gap 8 (Figma 5:319 gap-[8px]) */
.card-list__link h3{
	font-size:var(--fs-head-2xs);font-weight:700;line-height:1.6;color:var(--c-primary-dark);letter-spacing:0;
}
/* [마크업e 리터럴] 본문 18px `#666` line-height 1.6 */
.card-list__link p{margin-top:8px;font-size:var(--fs-body);line-height:1.6;color:var(--c-text-sub);letter-spacing:0;}
/* sec2 : E */


.card-list__item:hover {
	.card-list__link .pic::before{opacity: 1 !important;}
	.card-list__view{opacity: 1;}
}

/* ─────────────────────────────────────────────
 sec3 : S (30-SECOND CHECK 자가진단 — 해석서 §8 순 5 · 옛 .sec4 → W-04 재번호)
 입력폼 세부 노드가 Design 미확보라 필드 배치·간격은 TODO(디자인 요청).
───────────────────────────────────────────── */
/* [마크업g §19 반려 조치] 반려(01:xx) — §18 의 `bg_sec3.jpg` 는 시안 렌더(11:420, 텍스트·
 입력칸·버튼까지 그려진 통짜 스크린샷)를 그대로 배경으로 깔고 그 위에 라이브 폼을 겹친 것이었다
 (실물 로그: 입력칸/셀렉트/버튼이 사진 y≈495~550 에 그려져 있고, 라이브 요소가 Δ10~74px 어긋난
 채 그 위에 다시 올라가 두 겹으로 보였다 — `FIGMA_AUDIT` 자산 추출 함정). 인페인팅(흐린 사각형
 패치)도 시안에 없는 모양이라 걷어낸다(인페인팅 금지 지시). diff 5.5 는 "시안 그림을 배경으로
 깔아 diff 를 낮춘" 결과였다 — 재발 대조표에 그 유형을 추가했다(아래).
 재시도 — `download_assets(7:498, png)` 로 별도 채널까지 다시 받았으나 alpha 히스토그램이
 전 픽셀 255(불투명)였다(`get_screenshot`·`download_assets` 둘 다 동일, 코너 (255,255,255,255)).
 즉 이 노드는 API 단에서 흰 배경에 합성된 채로만 나오고 **진짜 투명 채널을 못 받는다**(알파를
 저장 과정에서 누른 것이 아니라 원천 자체가 불투명) — 코드로 blend 모드를 못 읽는 문제와 같은
 뿌리(§14 — 아래 미해결 표시와 동일 항목). 검증(숫자) — 흰 배경 합성본(W)과 실제 다크 배경 합성본(D, get_screenshot(11:420))
 을 UI 없는 여백 4곳에서 평균 절대오차로 비교: left 134.0 · right 84.4 · top 149.3 · bottom 77.2
 (0~255 스케일, 256샘플/영역) — "작으면 합성이 맞다"는 기준에 전혀 못 미친다(수십 단위여야 통과,
 실측 77~149는 완전 불일치). 지시된 처리대로 **근사를 멈추고** 색 배경(`#003883`)만 쓰고
 그래픽 레이어는 TODO(디자인 요청: sec3 배경 빛 번짐 그래픽 — 투명 PNG 또는 블렌드 모드 명세
 필요)로 남긴다. */
/* [W-04 재작업] 시안 높이 960px(get_metadata(1:400) node 11:420, y2691→3651) */
/* [마크업f §18] 절대좌표 기반 재계산(1:400 절대, 섹션 원점 y=2691) — head rel-top 199 ·
 head→form gap 60 · form(h105)→notice gap 30 · notice(설계값 h180) bottom 761 → 섹션 끝 960
 남는 199. 상하 대칭 199/199. */
/* [마크업g §19 반려 조치] §18 정정 2차의 padding-bottom 199→249(카드 실측 높이 부족분을 섹션
 패딩으로 역산 보정)는 가 "높이 역산"(§20 금지 유형)으로 지적해 **걷어낸다** — 199 로
 되돌리고, 노트 카드 높이 부족(콘텐츠가 시안보다 짧음)은 총고를 억지로 맞추지 않고 결과값 그대로
 둔다(§18의 diff 6구간 표에서 그로 인한 문서 총고·하위 구간 편차를 다시 실측해 보고한다). */
.sec3{position:relative;padding:199px 0 199px;;overflow:hidden;box-sizing:border-box; }
.sec3 video{position: absolute; left: 0; top: 0; width: 100%; height: 100%; object-fit:cover;  z-index: 1;}
.sec3 > .container{width:100%; position: relative; z-index: 1;}
.sec3__head{max-width:745px;margin:0 auto 60px;text-align:center;}
/* [마크업f §18 정정] p/h2 기본 UA 마진(1em·0.83em)이 collapse 되어 절대좌표가 40px씩 밀리는
 결함을 잡았다(측정 y2930 vs 시안 2890) — 세 자식 모두 margin:0 으로 리셋한 뒤 gap-40 을
 margin-top 한 줄로만 준다. */
.sec3__head .eyebrow{
	margin:0;font-family:'Montserrat','Pretendard',sans-serif;font-size:var(--fs-body-s);font-weight:700;
	line-height:1;color:var(--c-primary-light);letter-spacing:6.4px;text-transform:uppercase;
}
.sec3__head h2{margin:40px 0 0;font-size:42px;font-weight:700;line-height:1.4;color:#fff;letter-spacing:normal;}
.sec3__head p{margin:40px 0 0;font-size:var(--fs-body-l);line-height:1.6;color:#eee;letter-spacing:0;}

.check-form__title{max-width:1139px;margin:0 auto;font-size:var(--fs-head-xs);font-weight:700;line-height:1.6;color:#fff;}
.check-form{max-width:1139px;margin:10px auto 0;}
/* [마크업g §19 반려 조치] align-items:center 였을 때 `.field__err`(min-height:1.4em, INT-01 상태
 표시용 — 평소엔 빈 문자열이지만 공간은 항상 예약)가 `.field` 를 버튼보다 크게 만들어 버튼이
 세로 중앙정렬로 Δy10~12 밀렸다. 시안(`13:707`)도 입력행 자체가 top-align 이라 flex-start 로
 바꾼다. */
.check-form__row{display:flex;align-items:flex-start;gap:10px;}
/* [마크업g §19 반려 조치] 시안(`13:707`) 리터럴 고정폭 — Input 456×57 두 개 + Btn 207×57 +
 gap10×2 = 1139(컨테이너와 정확히 일치, 가변 flex-grow 불필요). 이전 `flex:1 1 320px` 가변폭이
 좌표 게이트에서 Δw16~33 불일치를 냈던 원인이었다. */
.check-form .field{position:relative;flex:0 0 456px;width:456px;}
.check-form label.blind{position:absolute;width:1px;height:1px;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);}
/* [QA5-02 리터럴] Figma `Input` 컴포넌트 — 흰 배경, r8, 16px #999 */
.check-form input,
.check-form select{
	width:100%;height:57px;padding:16px 20px;border:0;border-radius:8px;
	background:#fff;font-size:var(--fs-body-s);color:#999;
}
/* [P5C-19 · 필수 해소 · `FIG-04` · 마크업k] node 42:7985「24_Arrow/Arrow2_Down」자산 확보
 (download_assets → images/main/ico_select_arrow.svg, 24×24, stroke #666, 열어 확인 — defs 없는
 단순 path 2개, 잘림·회전 없음). 브라우저 기본 화살표 대신 이 자산을 배경으로 넣는다 —
 appearance:none 으로 OS 기본 삼각형을 지우고 우측에 24px 자리 확보. */
.check-form select{
	-webkit-appearance:none;appearance:none;padding-right:44px;
	background-image:url('../images/main/ico_select_arrow.svg');background-repeat:no-repeat;
	background-position:right 20px center;background-size:24px 24px;
}
.check-form input:focus-visible,
.check-form select:focus-visible{outline:2px solid var(--c-primary-light);outline-offset:2px;}
/* [STA-01 · INT-01] 검증 표시 상태 — class(.is-invalid)와 ARIA(aria-invalid)를 함께 토글한다.
 js/main.js 참조.
 [마크업h §19-정정] `min-height:1.4em` 로 흐름(flow)에 항상 공간을 예약해 두던 것이 시안에 없는
 28px 를 만들어 `.check-form__row` 높이를 57→85로 부풀리고, 그 아래 안내 박스·링크 전체를
 Δy24~28px 씩 밀어내렸다(문서 총고도 그만큼 초과) — 원인을 찾아 여기서 고친다(패딩으로 가리지
 않는다). 에러 문구는 흐름 밖(`position:absolute`)으로 빼 시안 대비 여분 높이를 만들지 않되,
 `aria-live="polite"` 는 그대로 유지해 스크린리더 공지는 유지한다. */
.check-form .field__err{
	position:absolute;left:0;top:100%;margin-top:6px;min-height:1.4em;font-size:var(--fs-caption);color:#ffb4a8;
}
.check-form .field.is-invalid input,
.check-form .field.is-invalid select{outline:2px solid var(--c-danger);}
/* [QA5-02 리터럴] 검정 pill 버튼 `#070707` — 시안(`37:4266`) 고정폭 207×57, 화살표 41×10 */
/* [P5C-13 · 필수 해소 · `FIG-06` · 마크업k] 이 버튼은 `.btn btn--primary`(공용)를 같이 쓴다 —
 `.btn--primary{border-color:var(--c-primary)}`(#0000ff)는 배경만 이 규칙(#070707)이 덮고
 테두리색은 안 건드려 그대로 살아남았다("번질 곳" 대조 없이 배경만 바꾼 재발 유형). 시안
 `Btn` 컴포넌트는 `strokes=`(테두리 없음) — border-color 를 배경과 같은 값으로 맞춰 지운다. */
.check-form button{
	flex:0 0 207px;width:207px;height:54px;padding:0 28px;border-radius:var(--r-pill);background:#070707;border-color:#070707;color:#fff;
	font-size:var(--fs-body-s);font-weight:700;display:inline-flex;align-items:center;justify-content:center;gap:20px;
}
/* [P5B-03 재작업] `.btn__arr`(위 .btn 공통 규칙) 로 교체 — HTML 안 svg 가 currentColor(흰)를 따른다. */

/* [마크업f §18 정정] 안내 박스 `11:421` — bg rgba(5,64,143,.3) · border rgba(255,255,255,.2) · r12 · 1140.
 form(551)→notice gap 30(§18 표 재계산, 이전 40 폐기). 카드 내부를 flex row 로 바꿔 텍스트(좌)·
 링크(우) 두 자식을 배치 — align-items:center 가 두 li/p 스택(높이~124, 중심~90) 대비 링크
 그룹(h48, top66→중심90)의 세로 위치를 절대좌표 그대로 재현한다(66+24=90=28+62, §18 계산). */
.check-notice{
	max-width:1140px;margin:30px auto 0;padding:28px 30px;border-radius:12px;
	background:rgba(5,64,143,.3);border:1px solid rgba(255,255,255,.2);
	display:flex;align-items:center;justify-content:space-between;gap:20px;
}
/* [마크업h §19-정정] 시안(`11:421`) gap-12 — 두 li+p 쌍(`.check-notice__item`) 사이 간격. */
.check-notice__list{display:flex;flex-direction:column;gap:12px;text-align:left;}
/* [마크업f §18 정정] ul/p 기본 UA 마진(1em)이 카드 높이를 좌우해 sec3__head 와 같은 원인으로
 좌표가 밀렸다 — margin:0 리셋 뒤 gap 만 명시값으로 준다. */
/* [마크업h §19-정정] 시안 Title5/Body4 토큰 lineHeight 1.6 을 명시하지 않아 li(→29px)·p(→26px)
 박스가 짧게 렌더돼 쌍(Frame47281) 높이가 시안 55px 에 못 미쳤다(카드 h106~142, 시안 180) —
 line-height:1.6 리터럴 추가, p 의 margin-top 도 시안(gap 없음, 두 줄 바로 붙음)에 맞춰 제거. */
.check-notice ul{margin:0;line-height:1.6;}
.check-notice li{position:relative;display:inline-block;padding-left:16px;font-size:var(--fs-gnb);font-weight:700;line-height:1.6;color:#fff;}
.check-notice li:before{content:'';position:absolute;left:2px;top:.65em;width:5px;height:5px;border-radius:50%;background:#fff;}
/* p 는 시안 컴포넌트에서 li 보다 안쪽으로 들여써 있다(원문 앞머리 공백 렌더 — HTML 은 공백
 축약되므로 CSS indent 로 대체, 단어는 원문 그대로 유지). */
.check-notice p{margin:0;padding-left:16px;font-size:var(--fs-body-s);line-height:1.6;color:#eee;}

/* [마크업f §18 정정] 세움터/정부24 링크 `16:5849` — rgba(255,255,255,.3) bg, r8, h48.
 절대좌표상 안내 박스(`11:421`) 내부 우측에 겹쳐 있어(§18) 별도 블록이 아니라 `.check-notice`의
 flex 자식으로 이동 — max-width·좌우 margin·justify-content(구 블록 전용 값)를 걷어낸다. */
.check-links{display:flex;flex-wrap:nowrap;gap:10px;flex:0 0 auto;}
/* [마크업g §19 반려 조치] 시안(`16:5849`) 고정폭 — 세움터 190 · 정부24 195(둘 다 h48) */
.check-links__item{
	display:inline-flex;align-items:center;justify-content:center;gap:4px;height:48px;padding:6px 16px;border-radius:8px; transition:.3s;
	background:rgba(255,255,255,.3);border:1px solid rgba(255,255,255,.2);
	font-size:14px;font-weight:600;color:#fff;
}
.check-links__item img{transition:.3s;}

.check-links__item:nth-child(1){width:190px;}
.check-links__item:nth-child(2){width:195px;}
.check-links__item:hover{background: #fff; color: #333;
 img{filter: invert(1);}
}


/* sec3 : E */

/* ─────────────────────────────────────────────
 sec4 : S (COST & VERIFICATION 점검 비용 — 해석서 §8 순 6, Figma 1:194~1:210 · 옛 .sec5 → W-04 재번호)
───────────────────────────────────────────── */
/* [§20 sec4 전담 재작업 · 마크업g] 문서 절대좌표(get_metadata(11:450), fileKey gQkXiBWtpy5xIc5SIZPggL) —
 섹션 프레임 절대 y=3651~4637(h986). §17-정정과 같은 기준(문서 절대), 프레임 원점(0)으로
 상대화하지 않았다.
 [재발 대조 — "높이를 패딩으로 역산" 재발 방지] Figma 텍스트 레이어의 bbox 높이(타이트)와 실제
 렌더 라인하이트 박스 높이가 다르다(예: eyebrow 시안 h16 vs line-height:1 렌더 h15, 제목 시안
 h59 vs line-height:1.4 렌더 h67) — sec2(§17-정정)·sec3(§18) 가 이미 겪은 함정. 이 섹션은 목표
 높이(986)를 먼저 정하지 않고, `_qa/마크업g/measure_sec4.js`(문서 절대좌표 실측)로 각 자식의
 실제 렌더 위치를 재고 margin-top 을 **측정값 기준으로 역산**해 다음 자식이 시안 절대y 에
 맞도록 맞췄다(padding-top 160 → eyebrow 3810(목표3811,Δ-1) → h2 margin41 → 3866(3867,Δ-1) →
 p margin32 → 3965(3966,Δ-1) · head-btns margin-top83(align-items:flex-start) → 3893(3894,Δ-1) ·
 price-card margin-top117 → 카드 4140/4080/4140(목표와 Δ0, office margin-top:-60) · caption
 margin90 → 4478(목표와 Δ0) · 마지막 padding-bottom145 로 섹션 끝을 4637(목표)에 맞춤 —
 `_qa/마크업g/measure_sec4.js` 9/9 요소 Δ≤1, `checksec4.js` sec4_h=986·docH=5540(footer 기준
 §24 와 동일, 회귀 없음) 실측 완료. 카드 3장 폭·간격도 근사값(calc(33.3333%-16px)+gap24) 대신
 리터럴(450px+gap45, Group 47282/47283/47284 x240/735/1230 차분)로 교체. */
/* [§21 반려 6건 재작업 · 마크업g] get_design_context(11:450 하위 노드 전수: 7:499·13:3430·
 13:1580·13:1887·13:2913·16:5784) 실제 코드+리터럴 재확보 — §20 은 get_metadata(좌표만)로
 박스는 맞혔지만 안쪽 스타일(색·자간·패딩·폰트크기·배경무늬·아이콘)을 site 공통 토큰·근사값으로
 채워 넣어 6건이 반려됐다. 이번엔 인스턴스 내부까지 들어가 실제 색상·폰트·간격 리터럴을 그대로
 옮긴다. */
/* [§26-정정 · 필수 해소 · 마크업l] P5D-06 에서 `.price-card__caption` margin-top 을 56→62(+6)로
 올려 캡션 위치는 맞았지만, section 전체 높이가 그만큼 그대로 +6 자라 시안 섹션 높이(986)를
 넘겼다(r15 재측 — sec5·footer diff 상승은 footer 자체 결함이 아니라 sec4 가 밀어낸
 결과, 실측: footer 자체 높이는 337 로 이미 정확했다). 캡션 아래 여백(padding-bottom)에서
 그만큼(6px) 되돌려 총 높이 986 을 지킨다 — 캡션·카드·제목 위치는 전부 그대로 유지. */
.sec4{position:relative;overflow:hidden;padding:160px 0 139px;background:#fff;box-sizing:border-box;}
/* [반려#3] 배경 무늬 — get_design_context(16:5784) `Rectangle 187`: 흰 바탕 위 `opacity-80` 물결
 PNG, object-position:bottom. download_assets(16:5784) 로 원본(1024×512) 확보, 알파채널 전수
 불투명 204(=0.8×255, 픽셀별 변화 없음 — sec3식 "일부만 불투명" 함정과 다름, 근사 아님) 확인 후
 그대로(WEBP 재인코딩만) `bg_sec401.webp` 로 저장 — sec3 처럼 UI가 구워진 자산이 아님(카드·글자
 미포함, 순수 배경층만 확인함). HTM-07 — 장식용 빈 요소 대신 `::before` 가상요소. */
.sec4::before{content:'';position:absolute;inset:0;z-index:0;pointer-events:none;
	background:#fff url(../images/main/bg_sec401.webp) no-repeat bottom center/cover;}
.sec4 > .container{position:relative;z-index:1;width:100%;}
/* [QA5-03] 제목(좌)+버튼(우상단) 한 줄 — Figma `7:499` x240/`13:3430` x1154(rel0) · `13:3430`
 절대y3894(rel83). align-items:flex-start(두 컬럼 상단 절대offset 기준), 버튼 그룹만
 margin-top:83px 로 내림. */
.sec4__head{display:flex;flex-wrap:wrap;justify-content:space-between;align-items:flex-start;gap:24px;}
/* [반려#5 자간 · §21] get_design_context(7:499) `7:500` 리터럴 — font-family Montserrat Bold
 16px, line-height:1(leading-none), **letter-spacing:6.4px**(기존 .5px 는 사이트 공통 `.eyebrow`
 근사값, 시안 리터럴과 6.9배 차이 — "자간이 좁다" 반려 원인), color Primary/Blue1 = var(--c-primary)
 (#0000ff, get_variable_defs 값과 --c-primary 토큰이 실제로 일치함을 reset.css:15 에서 확인). */
.sec4__head-txt{display:flex;flex-direction:column;gap:40px;}
.sec4__head-txt .eyebrow{margin:0;font-family:'Montserrat','Pretendard',sans-serif;font-size:var(--fs-body-s);line-height:1;font-weight:700;color:var(--c-primary);letter-spacing:6.4px;text-transform:uppercase;}
/* [§21] `7:501` 리터럴 — Pretendard Bold **42px**(기존 var(--fs-head-lg)=48px 는 사이트 공통 스케일,
 시안 실측값과 6px 차이가 §20 위치 보정값(margin41 등)이 어긋난 원인 중 하나였다), line-height1.4,
 color #222(=var(--c-text)), **letter-spacing 없음**(JSX에 tracking 클래스 자체가 없음 — 기존
 -1.44px 는 사이트 공통 "48px×-0.03em" 공식을 임의 적용한 것, 시안 근거 없어 제거). */
.sec4__head-txt h2{margin:0;font-size:42px;font-weight:700;line-height:1.4;color:var(--c-text);letter-spacing:normal;}
/* [§21] `7:502` 리터럴 — Pretendard Regular **20px**(기존 var(--fs-body-s)=16px), line-height1.6
 (기존 1.8), color **#444**(기존 var(--c-text-sub)=#666, 토큰에 없는 리터럴이라 하드코딩 — 사이트
 공통 텍스트 컬러 팔레트에 #444 항목이 없다, `COL-01` 예외로 이 섹션 전용 값). */
.sec4__head-txt p{margin:0;max-width:478px;font-size:var(--fs-body-l);font-weight:400;line-height:1.6;color:#444;}
.sec4__head-btns{flex:0 0 auto;margin-top:83px;}
.btn-group.sec4__head-btns{gap:12px;}
.sec4__head-btns .btn--line{background:#070707;border-color:#070707;color:#fff;}
.sec4__head-btns .btn--line:hover,
.sec4__head-btns .btn--line:focus-visible{background:#000;border-color:#000;}
/* [반려#4 버튼 크기 · §21] get_design_context(13:3430) `Btn`/`M_Btn` 리터럴 — 고정 height:70px
 아니라 **auto-height + padding 14px 28px**(렌더 높이 54px = Frame 47299 h54 와 정합), 문자-아이콘
 gap **20px**(기존 8px). 사이트 공통 `.btn`(hero 등 다른 섹션도 씀 — height70·padding0 32·gap8)을
 바꾸면 다른 구간이 깨지므로 `.sec4__head-btns .btn` 복합 셀렉터로 이 영역만 덮어쓴다("번질 곳"
 대조 — hero/sec3/sec5 도 `.btn`·`.btn--verify` 공유, 전수 재측정으로 회귀 없음 확인). */
/* [P5C-06 · 필수 해소 · 마크업k] 히어로와 동일 원인·동일 조치(line-height 160%). */
.sec4__head-btns .btn{height:auto;padding:14px 28px;gap:20px;font-size:var(--fs-body-s);line-height:1.6;}
/* [P5B-03 재작업 · 재발 — 에이드 mask 유형] `mask:url` 은 `file://` 더블클릭 납품에서 안 그려진다
 (계산값 41×10·마스크 자체는 정상인데 그림이 없음 — 빼보기·대조군으로 확인). `.btn__arr`(공용
 inline SVG, currentColor) 로 교체 — 이 규칙 자체는 삭제. */
.btn--verify{
	display:inline-flex;align-items:center;justify-content:center;gap:8px;height:70px;padding:0 32px;
	border-radius:var(--r-pill);background:var(--c-primary);color:#fff;font-size:var(--fs-button);font-weight:700;
	transition:background var(--t-base) linear;
}
.btn--verify:hover,
.btn--verify:focus-visible{background:var(--c-primary-dark);}

/* [§20 정정] 카드 3장 폭·간격 리터럴 — get_metadata(11:450) Group 47282/47283/47284 각 w450,
 x240/735/1230 → 간격 45·45. 1440=450*3+45*2 정합. */
.price-card{display:flex;flex-wrap:wrap;gap:45px;margin-top:111px;}
/* [반려#6 카드 안 글자 좌표 · §21] get_design_context(13:1580/1887/2913) `Txt` 래퍼 inset —
 top14.18%(39.99→40px) · right9.33%(41.99→42px) · bottom14.54%(40.99→41px) · left11.11%(50.0px).
 기존 padding:40px 균등은 좌측이 10px 부족해 안쪽 글자열 전체가 왼쪽으로 밀렸었다("두 겹" 반려
 원인 — 카드 상자 좌표는 맞는데 안의 글자 원점이 달랐다). */
.price-card__item{position:relative;flex:0 0 450px;overflow:hidden;padding:40px 42px 41px 50px;border-radius:12px;background:#fff;box-shadow:0 30px 50px rgba(0,0,0,.16);}
.price-card__item--point{transform:translateY(-60px);}
/* [§21] 안쪽 텍스트 스택도 margin 근사 대신 Figma 실제 오토레이아웃 gap 그대로 재현 — 바깥
 `.price-card__body`(gap30: 헤드그룹↔조건문) · `.price-card__head`(gap12: 라벨↔가격블록) ·
 `.price-card__price-block`(gap0: 가격행↔「최소 연」, 리터럴에 gap 클래스가 없다) ·
 `.price-card__price`(gap8: 금액↔「원」, items-center). */
.price-card__body{display:flex;flex-direction:column;gap:30px;}
.price-card__head{display:flex;flex-direction:column;gap:12px;}
.price-card__price-block{display:flex;flex-direction:column;}
.price-card__label{margin:0;font-size:var(--fs-head-2xs);font-weight:700;line-height:1.6;color:#2553c9;}
.price-card__price{display:flex;align-items:center;gap:8px;margin:0;font-size:50px;font-weight:700;line-height:60px;letter-spacing:-1px;color:#222;}
.price-card__price .unit{font-size:var(--fs-head-sm);letter-spacing:0;}
.price-card__min{margin:0;font-size:var(--fs-body-l);font-weight:600;line-height:1.6;color:#999;}
.price-card__cond{margin:0;font-size:var(--fs-body-l);font-weight:400;line-height:1.6;color:#666;}
/* [반려#1 카드색 · §21] get_design_context 리터럴 — 오피스 `bg-[#2553c9]`(**그라디언트 아님**, 단색
 확인 — export PNG 를 열어 대조, 그라디언트처럼 보인 건 위에 겹친 20%-투명 건물 일러스트 때문)
 · 라벨 `#72d2ff`(Primary/Blue3, 기존 흰색 아님) · 「최소 연」·조건문 `#eee`(기존 rgba(255,255,255,
 .7/.85) 근사값 폐기, 리터럴은 단일 hex). */
.price-card__item--point{background:#2553c9;}
.price-card__item--point .price-card__label{color:#72d2ff;}
.price-card__item--point .price-card__price{color:#fff;}
.price-card__item--point .price-card__min{color:#eee;}
.price-card__item--point .price-card__cond{color:#eee;}
/* [반려#1] 주상복합 `bg-[#3b3b3b]`(기존 #222 는 사이트 공통 --c-text 토큰을 끌어쓴 근사값) · 라벨
 `#72d2ff`(오피스와 동일 토큰, 기존 #8fb4ff 는 없는 리터럴) · 「최소 연」·조건문 `#eee`. */
.price-card__item--apart{background:#3b3b3b;}
.price-card__item--apart .price-card__label{color:#72d2ff;}
.price-card__item--apart .price-card__price{color:#fff;}
.price-card__item--apart .price-card__min{color:#eee;}
.price-card__item--apart .price-card__cond{color:#eee;}
/* [반려#2 일러스트 · §21] get_design_context 로 확인 — SVG 파일 자체(`img_sec4_*.svg`)는 §14 에서
 이미 올바르게 뽑혀 있었다(재다운로드 바이트 비교: factory/apart 동일, office 2바이트 개행차만).
 **빠졌던 건 `opacity:.2`**(Figma `Isolation_Mode` 레이어 자체가 opacity-20 — 원본 일러스트는
 진한 다색이고, 카드에 20% 로 얹혀야 옅게 보인다. 이게 없어 "진하고 채도가 높다" 반려였다) ·
 그리고 3장이 전부 같은 공유 %(우측-21.6%·하단-15.6%, factory 실측값)를 썼던 것 — 카드별 실제
 inset 은 서로 다르다(위치도 반려 사유). 고정 폭 카드(450px)라 %→px 리터럴로 확정 가능
 (get_design_context inset% × 450/282 환산): factory left291/top88 · office left303/top87 ·
 apart left308/top89(오피스·주상복합은 §14 당시 폭 계산에 안 넣어 위치가 factory 값을 그대로
 물려받고 있었다 — 이번에 각자 값으로 분리). */
.price-card__illust{position:absolute;opacity:.2;pointer-events:none;}
.price-card__item--factory .price-card__illust{left:291px;top:88px;width:256px;height:238px;}
.price-card__item--point .price-card__illust{left:303px;top:87px;width:155px;height:232px;}
.price-card__item--apart .price-card__illust{left:308px;top:89px;width:176px;height:255px;}
/* [P5C-08 · 필수 해소 · 마크업k] 시안(`13:3427`) 16px `#666` — 공용 토큰(`--fs-caption`13px·
 `--c-text-weak`#999)을 그대로 끌어쓴 근사였다. 이 섹션 전용 리터럴로 덮는다(토큰 자체는 안 건드림). */
/* [P5D-06 · 필수 해소 · 마크업l] 픽셀 행 실측(검수) — 주석 글자 행이 시안 y4485 대비 구현 4479
 로 6px 위에 있었다. sec4 안 다른 요소(제목·버튼·카드)는 이미 시안과 Δ≤1 로 맞아 있어 총 높이
 문제가 아니라 이 블록 위 여백만 부족했던 것 — 56→62. */
.price-card__caption{margin:62px 0 0;max-width:727px;font-size:var(--fs-body-s);color:#666;}
.btn-group{display:flex;flex-wrap:wrap;gap:16px;}
.btn-group--center{justify-content:center;margin-top:40px;}
/* sec4 : E */

/* ─────────────────────────────────────────────
 sec5 : S (CTA 배너 — 해석서 §8 순 7, Figma 1:211~1:218 · 옛 .sec6 → W-04 재번호)
───────────────────────────────────────────── */
/* [W-04 반영 · G-14] 1:211 은 Plan 와이어프레임이었다 — 폐기. 최종 시안(1:400) node 7:680
 「04」 실제 fill 층 구성을 리터럴 그대로 옮긴다 — 근사 합성 없앰(반려 사유 ③ 해소):
 ① 배경 이미지(get_design_context(1:400) imgRectangle175 원본, download 완료 →
 images/main/bg_sec_cta.jpg, 4096×2304) ② 그 위 남색 오버레이 rgba(0,25,90,.3)(리터럴). */
/* [QA5-08 재작업 · G-14] get_design_context(11:408) 리터럴 — 전체 h568(하단 337 은 푸터), 좌측
 정렬 텍스트 + 우측 정렬 버튼(중앙 정렬 폐기). 42px 제목 2줄 각각 별도 p(쉼표 없음), 20px `#ccc` 본문. */
/* [W-04 재작업] 시안 높이 568px(get_metadata(1:400) node 11:408, y4637→5205) */
/* [마크업h §22] 높이 역산 폐기 — get_metadata(1:400) 문서 절대좌표로 재계산한 리터럴 패딩.
 섹션 04: y4637~5205(h568) · 텍스트 프레임 7:671 y4848(h210, 섹션 상대 211) · 버튼 11:409 y4918(h74).
 위 210+147=357, 568-211-210=147 → padding 211/147. (구 120/238 근사값 폐기, 미해결 표시 해제) */
.sec5{padding:211px 0 147px;position:relative;background:#0a1139 url('../images/main/bg_sec_cta.jpg') center/cover no-repeat;box-sizing:border-box;}
.sec5 > .sec5__inner{width:100%;}
.sec5::before{content:'';position:absolute;inset:0;background:var(--c-navy-cta-overlay);pointer-events:none;}
.sec5__inner{position:relative;display:flex;flex-wrap:wrap;justify-content:space-between;align-items:flex-start;gap:40px;}
.sec5__txt{max-width:797px;}
.sec5 h2{font-size:42px;font-weight:700;line-height:1.4;color:#fff;letter-spacing:normal;}
.sec5 p{margin-top:28px;font-size:var(--fs-body-l);line-height:1.6;color:#ccc;letter-spacing:0;}
/* [마크업h §22] Figma 11:409 인스턴스 간격(292-280=12) — 공용 .btn-group 기본 16px 과 다름(sec4 선례와 동일 방식으로 스코프)
 align-items:center → flex-start 전환 — get_metadata 버튼 프레임 y4918, 텍스트 프레임 y4848 절대좌표
 차 70px 을 리터럴 margin-top 으로 직접 반영(center 근사 대비 Δ 감소) */
.sec5__btns{flex:0 0 auto;gap:12px;margin-top:70px;}
/* [원테크 · 리터럴] Figma `11:409`(카카오톡 문의하기 버튼) 실측 — 흰 배경 280×74 r12, 글자 `#222`
 [§22] get_design_context 내부 gap 20px(공용 .btn 기본 8px 과 다름) — 아이콘·글자만 감싸는 복합 셀렉터로 스코프 */
/* [P5C-15 · 필수 해소 · 마크업k] 시안 글자 18px — 공용 `--fs-button`(17px) 대신 이 섹션 전용 리터럴. */
.sec5 .btn--kakao{
	width:280px;height:74px;padding:0 30px;border-radius:12px;background:#fff;border-color:#fff;color:#222;gap:20px;font-size:var(--fs-gnb); transition:.3s;
}
.sec5 .btn--kakao:hover,
.sec5 .btn--kakao:focus-visible{background:#eee;}
/* [P5D-10] 아이콘+글자 묶음 — 내부 gap 8px(figma node-37_3985), 바깥 gap 20px 은 이 span과
 화살표 사이에만 적용(.sec5 .btn--kakao 의 gap 이 그대로 담당). */
.sec5 .btn--kakao .btn__label{display:flex;align-items:center;gap:8px;}
.sec5 .btn--kakao .sec5__ico-kakao{display:block;width:26px;height:24px;flex:0 0 auto;}
/* [원테크 · 리터럴] Figma `11:409`(견적 문의하기 버튼) — 파랑 230×74 r12. [P5B-03 재작업 · 재발]
 `mask:url` 은 `file://` 에서 안 그려진다(에이드 유형 재발) — `.btn__arr`(공용 inline SVG,
 currentColor=흰) 로 교체, 이 규칙은 크기만 남긴다. */
.sec5 .sec5__btn-verify{width:230px;height:74px;padding:0 30px;border-radius:12px;font-size:var(--fs-gnb);}
/* sec5 : E */
/* [P-03] main 반응형(1400·1280·1024·768·480)은 css/responsive.css 「main : responsive」로 이관됐다.
 이 파일에서는 데스크톱 기준값만 정의한다. */


.check-result{max-width:1139px;margin:24px auto 0;}
.check-result .rbox{
	padding:26px 30px;border-radius:12px;
	background:#fff;color:#222;
}
.check-result .tag{
	display:inline-block;padding:5px 13px;border-radius:8px;
	font-size:12.5px;font-weight:700;
}
.check-result .tag.y{background:var(--c-primary);color:#fff;}
.check-result .tag.n{background:#ebeff3;color:#5f6975;}
.check-result .rbox h4{margin:14px 0 0;font-size:22px;font-weight:700;line-height:1.4;}
.check-result .rbox .note{margin-top:10px;font-size:14.5px;line-height:1.7;color:#666;}
.check-result .kv{
	margin-top:20px;display:grid;grid-template-columns:repeat(3,1fr);
	gap:1px;background:rgba(0,0,0,.08);border:1px solid rgba(0,0,0,.08);
}
.check-result .kv div{background:#fff;padding:16px;}
.check-result .kv span{display:block;font-size:12.5px;color:#666;}
.check-result .kv b{display:block;margin-top:5px;font-size:17.5px;font-weight:700;}
.check-result .alertline{
	margin-top:16px;padding:15px 18px;font-size:14px;line-height:1.7;font-weight:600;
	border-left:3px solid #c8322b;background:#fcf0ef;color:#a32721;
}
.check-result .alertline.warn{border-color:#b26a00;background:#fff7ea;color:#8a5200;}
.check-result .alertline.ok{border-color:#1f7a46;background:#f0f8f3;color:#155c33;}
.check-result .rbox .btn-group{margin-top:20px;gap:10px;}
@media (max-width:768px){
	.check-result .kv{grid-template-columns:1fr;}
}


.msg_sound_only{display: none;}