/* ─────────────────────────────────────────────────────────────
   서브페이지 공통 셸. 7개 페이지가 이 파일 하나를 공유한다.
   여기 없는 스타일은 서브페이지에 쓰지 않는다.
   ───────────────────────────────────────────────────────────── */

.subpage{background:var(--geo-white);color:var(--geo-ink)}
.subpage .nav{position:fixed}
.subpage .pmain{display:block}

/* ── 페이지 히어로 ───────────────────────────────────────── */
.phero{position:relative;padding:216px 0 104px;min-height:clamp(480px,56vh,660px);display:flex;align-items:flex-end;background:var(--geo-navy-900);color:var(--geo-white);overflow:hidden}
.phero-bg{position:absolute;inset:0;width:100%;height:100%;object-fit:cover;transform:scale(1.04);animation:pheroDrift 22s ease-out forwards}
@keyframes pheroDrift{from{transform:scale(1.10)}to{transform:scale(1.00)}}
/* 사진이 보여야 한다. 글자가 앉는 좌하단만 눌러 준다 */
.phero-veil{position:absolute;inset:0;background:linear-gradient(to right,rgba(6,24,42,.82) 0%,rgba(6,24,42,.52) 38%,rgba(6,24,42,.14) 72%,rgba(6,24,42,.06) 100%), linear-gradient(to bottom,rgba(6,24,42,.58) 0%,rgba(6,24,42,.06) 24%,rgba(6,24,42,.10) 62%,rgba(6,24,42,.46) 100%)}
.phero-in{position:relative;z-index:1;width:100%}
.crumb{display:flex;align-items:center;gap:10px;font-size:16px;color:var(--geo-navy-100);margin:0 0 28px}
.crumb a{color:var(--geo-navy-100);text-decoration:none}
.crumb a:hover{color:var(--geo-white)}
.crumb i{font-style:normal;opacity:.55}
.phero-eyebrow{font-family:'Outfit',sans-serif;font-size:14px;font-weight:500;letter-spacing:.22em;text-transform:uppercase;color:var(--geo-navy-100);margin:0 0 18px}
.phero-h{font-size:clamp(38px,4.6vw,64px);font-weight:600;line-height:1.18;letter-spacing:-.02em;margin:0 0 22px;color:var(--geo-white);text-shadow:0 2px 30px rgba(6,24,42,.55)}
.phero-lead{font-size:21px;line-height:1.7;color:var(--geo-navy-100);margin:0;max-width:44ch;text-shadow:0 1px 18px rgba(6,24,42,.6)}

/* ── 사업영역 탭바 ───────────────────────────────────────── */
.ptabs{position:sticky;top:72px;z-index:30;background:var(--geo-white);border-bottom:1px solid var(--color-border)}
.ptabs-in{display:flex;gap:0;overflow-x:auto;scrollbar-width:none}
.ptabs-in::-webkit-scrollbar{display:none}
.ptabs-in a{flex:0 0 auto;padding:20px 26px;font-size:18px;font-weight:500;white-space:nowrap;color:var(--geo-ink-mute);text-decoration:none;border-bottom:2px solid transparent;transition:color var(--duration-state) var(--ease-out),border-color var(--duration-state) var(--ease-out)}
.ptabs-in a:hover{color:var(--geo-navy-500)}
.ptabs-in a.on{color:var(--geo-navy-900);font-weight:600;border-bottom-color:var(--geo-navy-500)}

/* ── 섹션 ────────────────────────────────────────────────── */
.psec{--measure:100%;padding:96px 0}
.psec.alt{background:var(--geo-navy-050)}
.psec-head{margin:0 0 48px;max-width:62ch}
.psec-en{font-family:'Outfit',sans-serif;font-size:14px;font-weight:500;letter-spacing:.2em;text-transform:uppercase;color:var(--geo-navy-300);margin:0 0 16px}
.psec-h{font-size:clamp(28px,3vw,40px);font-weight:600;line-height:1.28;letter-spacing:-.015em;margin:0}
.plead{font-size:21px;line-height:1.78;color:var(--geo-ink);margin:0 0 40px;max-width:62ch}
.plead b{font-weight:600;color:var(--geo-navy-500)}

/* ── 컴포넌트 1 : 블록 ───────────────────────────────────── */
.pblocks{display:grid;max-width:var(--measure);gap:clamp(30px,3.2vw,52px) clamp(32px,4vw,64px);background:transparent}
.pblock:has(+ .pblock){}
.pblocks[data-cols="2"]{grid-template-columns:repeat(2,1fr)}
.pblocks[data-cols="3"]{grid-template-columns:repeat(3,1fr)}
.pblock{background:transparent;padding:20px 0 0;border-top:2px solid var(--geo-navy-500);transition:border-color var(--duration-state) var(--ease-out)}
.pblock:hover{border-top-color:var(--geo-navy-900)}
.pblock b em{font-style:normal}
.pblock b{display:block;font-size:21px;font-weight:700;line-height:1.4;margin:0 0 12px;color:var(--geo-navy-900);letter-spacing:-.015em}
.pblock p{font-size:18px;line-height:1.8;color:var(--geo-ink-mute);margin:0}

/* ── 컴포넌트 2 : 표 ─────────────────────────────────────── */
.tscroll{overflow-x:auto;-webkit-overflow-scrolling:touch}
.ptable{width:100%;max-width:var(--measure);min-width:640px;table-layout:fixed;border-collapse:collapse;font-size:18px;background:transparent}
.ptable th:first-child,.ptable td:first-child{width:17%}
.ptable th,.ptable td{padding:22px 24px;text-align:left;vertical-align:middle;line-height:1.7}

/* 머리행 — 네이비 면으로 눌러 표가 서게 한다 */
.ptable thead th{font-size:15px;font-weight:600;letter-spacing:.1em;text-transform:uppercase;color:var(--geo-navy-500);background:transparent;padding:0 24px 14px;white-space:nowrap;border-bottom:2px solid var(--geo-navy-500)}
/* 비교 축 헤더(제도·방식 이름)는 본문급으로 키운다. 라벨 헤더와 역할이 다르다 */
.ptable.cmp thead th:not(:first-child){font-size:19px;letter-spacing:-.01em;text-transform:none;color:var(--geo-navy-900);padding-bottom:16px}
.ptable thead th:first-child{padding-left:0}
.ptable thead th:last-child{padding-right:0}

.ptable tbody td{color:var(--geo-ink-mute);border-top:1px solid var(--color-border)}
.ptable tbody td:first-child{font-weight:700;color:var(--geo-navy-900);padding-left:0}
/* 줄무늬 — 행이 많을 때 눈이 미끄러지지 않게 */
.ptable tbody td:last-child{padding-right:0}
.ptable tbody tr:last-child td{border-bottom:1px solid var(--color-border)}
.ptable tbody tr{transition:background var(--duration-state) var(--ease-out)}
.ptable tbody tr:hover td{background:rgba(28,67,100,.045)}
.ptable tbody tr:hover td:first-child{background:rgba(28,67,100,.045)}

/* 짚어야 할 행 */
.ptable tbody tr.key td{background:var(--geo-navy-050);color:var(--geo-navy-900)}
.ptable tbody tr.key td:first-child{background:var(--geo-navy-050);color:var(--geo-navy-900);box-shadow:inset 3px 0 0 var(--geo-navy-500)}
.ptable tbody tr.key td b{color:var(--geo-navy-900)}
.ptable tbody tr.key:hover td{background:rgba(28,67,100,.11)}
.ptable tbody tr.key:hover td:first-child{background:rgba(28,67,100,.11)}

/* 「없음」처럼 부담이 0인 칸은 눈에 띄게 */
.tdash{color:var(--geo-navy-300);opacity:.55}
.ptable td.fnone,
.ptable tbody td:where(.zero){color:var(--geo-navy-300);font-weight:600}

/* ── 컴포넌트 3 : 안내 ───────────────────────────────────── */
.pnote{max-width:var(--measure);margin:28px 0 0;padding:20px 24px;font-size:17px;line-height:1.75;color:var(--geo-ink-mute);background:var(--geo-navy-050);border-left:2px solid var(--geo-navy-300)}
.psec.alt .pnote{background:var(--geo-white)}
.pnote a{color:var(--geo-navy-500);font-weight:600}
.pnote-wide{margin:0;max-width:none}

/* ── 컴포넌트 4 : FAQ ────────────────────────────────────── */
.pfaqs{border-top:1px solid var(--color-border)}
.pfaq{border-bottom:1px solid var(--color-border)}
.pfaq summary{list-style:none;cursor:pointer;padding:26px 44px 26px 0;position:relative;font-size:20px;font-weight:600;color:var(--geo-navy-900);line-height:1.5}
.pfaq summary::-webkit-details-marker{display:none}
.pfaq summary::after{content:'';position:absolute;right:12px;top:34px;width:11px;height:11px;border-right:2px solid var(--geo-navy-300);border-bottom:2px solid var(--geo-navy-300);transform:rotate(45deg);transition:transform var(--duration-state) var(--ease-out)}
.pfaq[open] summary::after{transform:rotate(-135deg)}
.pfaq summary:hover{color:var(--geo-navy-500)}
.pfaq p{margin:0 0 30px;padding-right:44px;font-size:18px;line-height:1.85;color:var(--geo-ink-mute)}

/* ── PM 업무 목록 ────────────────────────────────────────── */
.wsgrid{display:grid;grid-template-columns:repeat(2,1fr);gap:0;background:var(--geo-white);border-top:1px solid var(--color-border);border-left:1px solid var(--color-border)}
.psec.alt .wsgrid{background:var(--geo-navy-050)}
.wscol{background:var(--geo-white);padding:36px 32px 40px;border-right:1px solid var(--color-border);border-bottom:1px solid var(--color-border)}
.psec.alt .wscol{background:var(--geo-navy-050)}
.wsk{font-size:15px;font-weight:600;letter-spacing:.06em;color:var(--geo-navy-300);margin:0 0 24px;padding-bottom:14px;border-bottom:1px solid var(--color-border)}
.wslist{list-style:none;margin:0;padding:0;counter-reset:ws}
.wslist li{counter-increment:ws;padding:16px 0 16px 46px;position:relative;border-bottom:1px solid var(--color-border)}
.wslist li:last-child{border-bottom:0;padding-bottom:0}
.wslist li::before{content:counter(ws,decimal-leading-zero);position:absolute;left:0;top:18px;font-family:'Outfit',sans-serif;font-size:14px;font-weight:600;color:var(--geo-navy-300)}
.wslist b{display:block;font-size:19px;font-weight:600;color:var(--geo-navy-900);line-height:1.45}
.wslist span{display:block;margin-top:5px;font-family:'Outfit',sans-serif;font-size:14px;letter-spacing:.04em;color:var(--geo-navy-300)}

/* ── 사업실적 필터 ───────────────────────────────────────── */
.pfilters{padding:56px 0 28px}
.pgridsec{padding:0 0 96px}
.fbar{display:flex;flex-wrap:wrap;gap:36px 48px;align-items:flex-start}
.fk{font-size:15px;font-weight:600;letter-spacing:.06em;color:var(--geo-navy-300);margin:0 0 14px}
.fchips{display:flex;flex-wrap:wrap;gap:8px}
.chip{appearance:none;cursor:pointer;padding:0 18px;height:42px;font-size:17px;font-weight:500;color:var(--geo-ink-mute);background:transparent;border:1px solid var(--color-border-ui);border-radius:2px;transition:background var(--duration-state) var(--ease-out),color var(--duration-state) var(--ease-out),border-color var(--duration-state) var(--ease-out)}
.chip:hover{border-color:var(--geo-navy-500);color:var(--geo-navy-500)}
.chip.on{background:var(--geo-navy-900);border-color:var(--geo-navy-900);color:var(--geo-white)}
.fsearch{flex:1 1 240px;min-width:220px}
.finput{width:100%;height:44px;padding:0 16px;font-size:17px;font-family:inherit;color:var(--geo-ink);background:var(--geo-white);border:1px solid var(--color-border-ui);border-radius:2px}
.finput:focus-visible{outline:var(--focus-ring-width) solid var(--focus-ring-color);outline-offset:var(--focus-ring-offset)}
.fcount{margin:32px 0 0;font-size:17px;color:var(--geo-ink-mute);padding-top:22px;border-top:1px solid var(--color-border)}
.fcount b{font-size:26px;font-weight:600;color:var(--geo-navy-900);margin-right:4px}

/* ── 사업실적 카드 ───────────────────────────────────────── */
.pgrid{display:grid;grid-template-columns:repeat(3,1fr);grid-auto-rows:1fr;gap:0;margin-top:28px;background:var(--geo-white);border-top:1px solid var(--color-border);border-left:1px solid var(--color-border)}
.pcard{position:relative;background:var(--geo-white);display:flex;flex-direction:column;border-right:1px solid var(--color-border);border-bottom:1px solid var(--color-border);opacity:0;transform:translateY(54px) scale(.965);clip-path:inset(0 0 12% 0);transition:opacity 780ms var(--ease-out),transform 780ms var(--ease-out), clip-path 780ms var(--ease-out),background 260ms var(--ease-out)}
.pcard.in{opacity:1;transform:none;clip-path:inset(0 0 0 0)}
.pcard:hover{background:var(--geo-navy-050)}

.pc-visual{position:relative;aspect-ratio:3/2;overflow:hidden;background:var(--geo-navy-900)}
/* 조감도 미확보 — 같은 3:2 자리를 지키되 의도된 도면 플레이트로 낸다.
   높이가 다르면 한 행에서 격자가 찢어진다. */
.pc-visual.none{background:linear-gradient(150deg,rgba(6,24,42,.86),rgba(28,67,100,.92)), url('../assets/hero/hero-contour-v1.jpg') center/cover;display:flex;align-items:center;justify-content:center;transition:filter 520ms var(--ease-out)}
.pcard:hover .pc-visual.none{filter:brightness(1.06)}
.pc-visual.none .pc-mark{opacity:.3;transition:opacity 480ms var(--ease-out),transform 620ms var(--ease-out)}
.pcard:hover .pc-visual.none .pc-mark{opacity:.4;transform:scale(1.06)}

.pc-img{width:100%;height:100%;object-fit:cover;transition:transform 900ms var(--ease-out),filter 620ms var(--ease-out)}
.pcard:hover .pc-img{transform:scale(1.07)}
.pc-visual::after{content:'';position:absolute;inset:0;pointer-events:none;background:linear-gradient(to top,rgba(6,24,42,.62) 0%,rgba(6,24,42,0) 46%);opacity:0;transition:opacity 480ms var(--ease-out)}
.pcard:hover .pc-visual::after{opacity:1}

.pc-tags{position:absolute;left:14px;bottom:14px;display:flex;flex-wrap:wrap;gap:5px;z-index:1}
.pc-tags span{padding:5px 11px;font-size:14px;font-weight:500;letter-spacing:.02em;color:var(--geo-white);text-shadow:0 1px 4px rgba(6,24,42,.7);background:rgba(6,24,42,.78);border:1px solid rgba(255,255,255,.24);transition:background 320ms var(--ease-out),border-color 320ms var(--ease-out)}
.pcard:hover .pc-tags span{background:var(--geo-navy-500);border-color:rgba(255,255,255,.5)}
.pc-badge{position:absolute;top:var(--space-3);left:var(--space-3);z-index:2;display:inline-flex;align-items:center;height:26px;padding:0 10px;font-size:13px;font-weight:500;line-height:1;letter-spacing:.03em;color:var(--geo-navy-500);background:rgba(255,255,255,.94);border:1px solid var(--geo-navy-500);border-radius:var(--radius-md)}
.pc-badge.on{color:var(--geo-white);background:var(--geo-navy-500);border-color:var(--geo-navy-500)}
.pc-badge.done{color:rgba(255,255,255,.92);background:rgba(28,67,100,.55);border-color:rgba(28,67,100,.2);backdrop-filter:blur(2px)}

.pc-body{padding:24px 24px 30px;flex:1;display:flex;flex-direction:column}
.pc-spec{margin-bottom:auto;font-size:16px;line-height:1.65;color:var(--geo-navy-300);margin:0}
.pc-body h3{font-size:21px;font-weight:600;line-height:1.4;margin:0 0 12px;color:var(--geo-navy-900);transition:transform 420ms var(--ease-out)}
.pcard:hover .pc-body h3{transform:translateX(5px)}
.pc-loc{font-size:17px;line-height:1.6;color:var(--geo-ink-mute);margin:0 0 8px}
.pc-yr{margin:14px 0 0;padding-top:14px;border-top:1px solid var(--color-border);font-family:'Outfit',sans-serif;font-size:14px;letter-spacing:.06em;color:var(--geo-navy-300)}
/* 하단에서 자라나는 강조선 */
.pc-line{position:absolute;left:0;bottom:0;height:2px;width:100%;background:var(--geo-navy-500);transform:scaleX(0);transform-origin:left;transition:transform 520ms var(--ease-out)}
.pcard:hover .pc-line{transform:scaleX(1)}

/* ── 페이지네이션 ────────────────────────────────────────── */
.ppager{display:flex;justify-content:center;gap:6px;margin-top:48px;flex-wrap:wrap}
.pg{min-width:46px;height:46px;padding:0 12px;cursor:pointer;font-size:17px;font-weight:600;font-family:'Outfit',sans-serif;color:var(--geo-ink-mute);background:transparent;border:1px solid var(--color-border);border-radius:2px;transition:background var(--duration-state) var(--ease-out),color var(--duration-state) var(--ease-out),border-color var(--duration-state) var(--ease-out)}
.pg:hover:not(:disabled){border-color:var(--geo-navy-500);color:var(--geo-navy-500)}
.pg.on{background:var(--geo-navy-900);border-color:var(--geo-navy-900);color:var(--geo-white)}
.pg:disabled{opacity:.32;cursor:default}
.pg-arrow{font-size:22px;line-height:1}

.pempty{padding:80px 0;text-align:center;font-size:19px;line-height:1.8;color:var(--geo-ink-mute)}

/* ── 하단 CTA ────────────────────────────────────────────── */
.pcta{background:var(--geo-navy-900);color:var(--geo-white);padding:80px 0}
.pcta-in{display:flex;gap:48px;align-items:center;justify-content:space-between;flex-wrap:wrap}
.pcta-lead{flex:1 1 460px}
.pcta h2{font-size:clamp(26px,2.6vw,36px);font-weight:600;line-height:1.32;margin:0 0 16px;color:var(--geo-white)}
.pcta p{font-size:18px;line-height:1.75;color:var(--geo-navy-100);margin:0}
.pcta-side{display:flex;flex-direction:column;gap:16px;align-items:flex-start}
.pcta-go{display:inline-flex;align-items:center;height:58px;padding:0 40px;font-size:19px;font-weight:600;color:var(--geo-navy-900);background:var(--geo-white);text-decoration:none;border-radius:2px;transition:background var(--duration-state) var(--ease-out),transform var(--duration-state) var(--ease-out)}
.pcta-go:hover{background:var(--geo-navy-100);transform:translateY(-1px)}
.pcta-go:active{transform:translateY(0)}
.pcta-tel a{font-family:'Outfit',sans-serif;font-size:24px;font-weight:600;letter-spacing:.02em;color:var(--geo-white);text-decoration:none}
.pcta-tel a:hover{color:var(--geo-navy-100)}

/* ── 리빌 ────────────────────────────────────────────────── */
.subpage [data-rv]{opacity:0;transform:translateY(18px)}
.subpage [data-rv].in{opacity:1;transform:none;transition:opacity var(--duration-reveal) var(--ease-out),transform var(--duration-reveal) var(--ease-out)}
.subpage [data-rv][data-d="1"].in{transition-delay:90ms}
.subpage [data-rv][data-d="2"].in{transition-delay:180ms}

/* ── 반응형 ──────────────────────────────────────────────── */
@media (max-width:1000px){
  .pgrid{grid-template-columns:repeat(2,1fr)}
  .pblocks[data-cols="3"]{grid-template-columns:repeat(2,1fr)}
}
@media (max-width:760px){
  .phero{padding:140px 0 56px}
  /* 비교표: 옆으로 밀어도 행 이름은 남는다 (코덱스 시각검수) */
  .tscroll .ptable:not(.ovtable) th:first-child,
  .tscroll .ptable:not(.ovtable) td:first-child{position:sticky;left:0;z-index:1;
    background:var(--geo-white);box-shadow:6px 0 8px -6px rgba(6,24,42,.18)}
  .psec.alt .tscroll .ptable:not(.ovtable) th:first-child,
  .psec.alt .tscroll .ptable:not(.ovtable) td:first-child{background:var(--geo-navy-050,#EDF1F5)}
  /* 문의 폼: 2열이 좁아 placeholder가 잘린다 — 1열로 */
  .ask-form{grid-template-columns:1fr}
  /* 수행현장: 카운트~카드 사이 과대 여백 축소 (.psec 일반 규칙보다 구체적으로) */
  .psec.pfilters{padding:40px 0 12px}
  .psec.pgridsec{padding-top:0}
  .fcount{margin:20px 0 0;padding-top:16px}
  .pgrid{margin-top:16px}
  /* 사업영역 탭: 양끝을 흐려서 이어짐을 암시 */
  .ptabs-in{-webkit-mask-image:linear-gradient(90deg,transparent,#000 18px,#000 calc(100% - 18px),transparent);
    mask-image:linear-gradient(90deg,transparent,#000 18px,#000 calc(100% - 18px),transparent)}
  .psec{padding:64px 0}
  .ptabs{top:64px}
  .ptabs-in a{padding:16px 18px;font-size:17px}
  .pgrid,.pblocks[data-cols="2"],.pblocks[data-cols="3"],.wsgrid{grid-template-columns:1fr}
  .pcta{padding:56px 0}
  .pcta-side{width:100%}
  .pcta-go{width:100%;justify-content:center}
}

@media (prefers-reduced-motion:reduce){
  .subpage [data-rv]{opacity:1;transform:none}
  .pcard{opacity:1;transform:none;transition:none}
  .pcard:hover .pc-img,.pcard:hover .pc-body h3,
  .pcard:hover .pc-visual.none .pc-mark{transform:none}
  .phero-bg{animation:none;transform:none}
}


/* ── 검토 요청 페이지 ────────────────────────────────────
   final.css 의 다크 폼 오버라이드가 전역이라 밝은 면에서 되돌린다 */
.subpage .f-label{color:var(--geo-navy-900)}
.subpage .f-hint{color:var(--geo-ink-mute)}
.subpage .f-input{border-color:var(--color-border-ui);background:var(--geo-white)}
.subpage .f-input:focus{border-color:var(--geo-navy-500);box-shadow:inset 0 0 0 1px var(--geo-navy-500)}
.subpage .f-check{color:var(--geo-ink)}
.subpage .ask-go{background:var(--geo-navy-900);color:var(--geo-white)}
.subpage .ask-go:hover{background:var(--geo-navy-500)}
.subpage .ask-contact{margin-top:16px;border-top-color:var(--color-border)}
.subpage .ask-contact div{border-bottom-color:var(--color-border)}
.subpage .ask-contact dt{color:var(--geo-navy-300)}
.subpage .ask-contact dd,.subpage .ask-contact a{color:var(--geo-ink)}
.subpage .ask-contact a{border-bottom-color:var(--color-border)}
.subpage .ask-contact a:hover{color:var(--geo-navy-500);border-bottom-color:var(--geo-navy-500)}

.cpage{padding:80px 0 96px}
.cgrid{display:grid;grid-template-columns:minmax(0,9fr) minmax(0,11fr);gap:clamp(36px,4.5vw,72px);align-items:start}

/* 좌우가 같은 높이로 끝나게 — 왼쪽 블록을 위아래로 벌린다 */

.ck{font-size:15px;font-weight:600;letter-spacing:.06em;color:var(--geo-navy-300);margin:0 0 20px}
.ck-2{margin-top:52px}
.csteps{list-style:none;margin:0;padding:0;counter-reset:cs;border-top:1px solid var(--color-border)}
.csteps li{counter-increment:cs;position:relative;padding:20px 0 20px 46px;border-bottom:1px solid var(--color-border)}
.csteps li::before{content:counter(cs,decimal-leading-zero);position:absolute;left:0;top:22px;font-family:'Outfit',sans-serif;font-size:14px;font-weight:600;color:var(--geo-navy-300)}
.csteps b{display:block;font-size:19px;font-weight:600;color:var(--geo-navy-900);line-height:1.45}
.csteps span{display:block;margin-top:6px;font-size:17px;line-height:1.65;color:var(--geo-ink-mute)}
.cfree{margin:24px 0 0;padding:18px 20px;font-size:17px;line-height:1.7;color:var(--geo-ink-mute);background:var(--geo-navy-050);border-left:2px solid var(--geo-navy-300)}
.cform{gap:24px 20px}
.cnote{grid-column:1 / -1;margin:4px 0 0;font-size:16px;line-height:1.7;color:var(--geo-ink-mute)}
@media (max-width:900px){.cgrid{grid-template-columns:1fr}}

.cwhy{margin:16px 0 0;font-size:17px;line-height:1.7;color:var(--geo-ink-mute);padding-left:20px;border-left:2px solid var(--color-border)}

/* ── 회사소개 ────────────────────────────────────────────
   개요표는 정보 나열이라 머리행·줄무늬가 필요 없다.
   새 표 스타일을 되돌리고 얇은 선만 쓴다 */
.ovtable{min-width:auto;border:0;background:transparent;border-radius:0}
.psec.alt .ovtable{background:transparent}
.ovtable th{width:200px;font-size:17px;font-weight:600;color:var(--geo-navy-300);vertical-align:top;padding:20px 22px 20px 0;background:transparent;border-bottom:1px solid var(--color-border);border-top:0;white-space:nowrap}
.ovtable td{font-size:19px;color:var(--geo-ink);background:transparent;padding:20px 0;border-bottom:1px solid var(--color-border);border-top:0}
.ovtable tbody tr:first-child th,.ovtable tbody tr:first-child td{border-top:1px solid var(--geo-navy-500)}
.ovtable tbody tr:nth-child(even) td,.ovtable tbody tr:nth-child(even) th{background:transparent}
.ovtable tbody tr:hover td,.ovtable tbody tr:hover th{background:transparent}
.ov-en{display:block;margin-top:4px;font-family:'Outfit',sans-serif;font-size:15px;letter-spacing:.06em;color:var(--geo-navy-300)}
.ovtable a{color:var(--geo-navy-500);font-weight:600}

.execs{border-top:1px solid var(--color-border)}
.exec{--exec-pad:clamp(20px,2.4vw,34px);display:grid;grid-template-columns:minmax(0,4fr) minmax(0,6fr);gap:clamp(24px,4vw,64px); padding:36px var(--exec-pad);margin-inline:calc(-1 * var(--exec-pad));border-bottom:1px solid var(--color-border);border-radius:2px;transition:background var(--duration-state) var(--ease-out),box-shadow var(--duration-state) var(--ease-out);scroll-margin-top:110px}
.exec:hover{background:var(--geo-white);box-shadow:inset 2px 0 0 var(--geo-navy-500)}
.exec-role{font-family:'Outfit',sans-serif;font-size:14px;font-weight:600;letter-spacing:.14em;text-transform:uppercase;color:var(--geo-navy-300);margin:0 0 10px}
.exec-name{font-size:30px;font-weight:600;line-height:1.3;margin:0 0 12px;color:var(--geo-navy-900)}
.exec-duty{font-size:18px;line-height:1.7;color:var(--geo-ink-mute);margin:0}
.exec-k{font-size:15px;font-weight:600;letter-spacing:.06em;color:var(--geo-navy-300);margin:0 0 14px}
.exec-hist ul{list-style:none;margin:0;padding:0}
.exec-hist li{position:relative;padding:8px 0 8px 18px;font-size:18px;line-height:1.7;color:var(--geo-ink)}
.exec-hist li::before{content:'';position:absolute;left:0;top:19px;width:6px;height:1px;background:var(--geo-navy-300)}

.mapgrid{display:grid;grid-template-columns:minmax(0,5fr) minmax(0,5fr);gap:clamp(32px,4vw,64px)}
.mapk{font-size:15px;font-weight:600;letter-spacing:.06em;color:var(--geo-navy-300);margin:0 0 12px}
.mapk-2{margin-top:36px}
.mapaddr{font-size:21px;line-height:1.7;color:var(--geo-navy-900);font-weight:600;margin:0}
.maplist{list-style:none;margin:0;padding:0}
.maplist li{padding:12px 0;border-bottom:1px solid var(--color-border);display:flex;gap:18px}
.maplist b{flex:0 0 70px;font-size:17px;font-weight:600;color:var(--geo-navy-900)}
.maplist span{font-size:17px;line-height:1.65;color:var(--geo-ink-mute)}
.maptel a{font-family:'Outfit',sans-serif;font-size:32px;font-weight:600;letter-spacing:.01em;color:var(--geo-navy-900);text-decoration:none}
.maptel a:hover{color:var(--geo-navy-500)}
.mapline{margin:10px 0 0;font-size:17px;color:var(--geo-ink-mute)}
.mapline a{color:var(--geo-navy-500)}
.mapgo{position:relative;display:flex;align-items:flex-end;min-height:320px;padding:32px;text-decoration:none;overflow:hidden;border-radius:2px;background:linear-gradient(150deg,var(--geo-navy-900),var(--geo-navy-500));transition:transform var(--duration-state) var(--ease-out),box-shadow var(--duration-state) var(--ease-out)}
.mapgo::before{content:'';position:absolute;right:-14%;top:-24%;width:62%;aspect-ratio:1;border:1px solid rgba(255,255,255,.14);border-radius:50%;transition:transform 700ms var(--ease-out)}
.mapgo:hover{transform:translateY(-3px);box-shadow:0 18px 44px rgba(6,24,42,.28)}
.mapgo:hover::before{transform:scale(1.12)}
.mapgo-in{position:relative;z-index:1}
.mapgo b{display:block;font-size:24px;font-weight:600;color:var(--geo-white);margin-bottom:8px}
.mapgo em{font-style:normal;font-size:17px;color:var(--geo-navy-100)}
@media (max-width:900px){
  .exec,.mapgrid{grid-template-columns:1fr}
  .ovtable,.ovtable tbody,.ovtable tr{display:block;width:100%}
  /* 크롬이 th 블록 전환 후에도 셀 수축폭을 유지해 !important 필요 (실측) */
  .ovtable th,.ovtable td{display:block;width:100% !important;white-space:normal}
  .ovtable th{font-size:15px;padding:16px 0 2px;border-bottom:0}
  .ovtable td{padding:0 0 16px}
  .ovtable tbody tr:first-child td{border-top:0}
}

/* ── 조직도 ──────────────────────────────────────────────── */
.org{margin:0 0 72px}
/* 고문은 흐름에서 빼서 절대배치한다. 그래야 대표가 정중앙에 서고
   아래 줄기가 대표 중심에서 내려온다 */
.org-head{position:relative;display:flex;justify-content:center;padding-bottom:44px}
/* 대표에서 아래로 내려가는 줄기 */
.org-head::after{content:'';position:absolute;left:50%;bottom:0;width:1px;height:44px;background:var(--geo-navy-300)}
.org-row{display:flex;justify-content:center;gap:clamp(12px,2vw,28px)}
.org-row>.node{position:relative;padding-top:44px}
/* 각 부문으로 내려가는 줄기 */
.org-row>.node::before{content:'';position:absolute;top:0;left:50%;width:1px;height:44px;background:var(--geo-navy-300)}
/* 부문을 잇는 가로줄 — 양 끝은 절반만 그린다 */
.org-row>.node::after{content:'';position:absolute;top:0;left:0;right:0;height:1px;background:var(--geo-navy-300)}
.org-row>.node:first-child::after{left:50%}
.org-row>.node:last-child::after{right:50%}

.node{flex:1 1 0;min-width:0;max-width:260px;padding:24px 20px 26px;text-align:center;background:var(--geo-white);border:1px solid var(--color-border);border-radius:2px;transition:border-color var(--duration-state) var(--ease-out),transform var(--duration-state) var(--ease-out),box-shadow var(--duration-state) var(--ease-out);text-decoration:none;cursor:pointer}
.node:hover{border-color:var(--geo-navy-500);transform:translateY(-2px);box-shadow:0 10px 28px rgba(6,24,42,.10)}
.node-role{font-family:'Outfit',sans-serif;font-size:13px;font-weight:600;letter-spacing:.14em;text-transform:uppercase;color:var(--geo-navy-300);margin:0 0 10px}
.node-name{display:block;font-size:24px;font-weight:600;line-height:1.3;color:var(--geo-navy-900)}
.node-duty{display:block;margin-top:8px;font-size:16px;line-height:1.6;color:var(--geo-ink-mute)}

/* 대표 — 네이비로 채워 위계를 준다 */
.node-lead{background:var(--geo-navy-900);border-color:var(--geo-navy-900);flex:0 0 230px;width:230px}
.node-lead .node-role{color:var(--geo-navy-100)}
.node-lead .node-name{color:var(--geo-white)}
.node-lead .node-duty{color:var(--geo-navy-100)}
.node-lead:hover{background:var(--geo-navy-500);border-color:var(--geo-navy-500)}

/* 고문 — 지휘 라인이 아니라 자문이라 점선으로 옆에 붙인다 */
.node-staff{position:absolute;top:0;left:50%;margin-left:calc(115px + clamp(48px,7vw,110px));width:230px}
.node-staff::before{content:'';position:absolute;left:calc(-1 * clamp(48px,7vw,110px));top:50%;width:clamp(48px,7vw,110px);height:1px;background:repeating-linear-gradient(to right,var(--geo-navy-300) 0 4px,transparent 4px 9px)}

@media (max-width:1100px){
  .node-staff{margin-left:calc(115px + 40px);width:200px}
}
@media (max-width:820px){
  .org-head{flex-direction:column;align-items:center;gap:36px;padding-bottom:36px}
  .org-head::after{height:36px}
  .node-staff{position:static;margin-left:0;width:100%;max-width:230px}
  .node-staff::before{left:50%;top:-36px;width:1px;height:36px; background:repeating-linear-gradient(to bottom,var(--geo-navy-300) 0 4px,transparent 4px 9px)}
  .org-row{flex-direction:column;align-items:center;gap:0}
  .org-row>.node{padding-top:28px;width:100%;max-width:320px}
  .org-row>.node::after{display:none}
}

.exec-title{margin:0 0 24px;font-size:15px;font-weight:600;letter-spacing:.06em;color:var(--geo-navy-300);padding-top:56px;border-top:1px solid var(--color-border)}

/* ── 이름과 심볼 ─────────────────────────────────────────── */
.bgrid{display:grid;grid-template-columns:minmax(0,4fr) minmax(0,6fr);gap:clamp(32px,5vw,80px);align-items:center;margin-bottom:56px}
.bmark{display:flex;flex-direction:column;align-items:center;justify-content:center;gap:24px;padding:56px 32px;background:var(--geo-white);border:1px solid var(--color-border);border-radius:2px}
.psec.alt .bmark{background:var(--geo-white)}
.bmark img{width:clamp(120px,12vw,168px);height:auto}
.bmark-tag{margin:0;font-family:'Outfit',sans-serif;font-size:14px;font-weight:400;letter-spacing:.14em;color:var(--geo-navy-300);text-align:center}
.bdef{margin:0 0 32px;border-top:1px solid var(--geo-navy-500)}
.bdef>div{display:grid;grid-template-columns:130px 1fr;gap:24px;align-items:baseline;padding:20px 0;border-bottom:1px solid var(--color-border);cursor:default}
.bdef dt{font-family:'Outfit',sans-serif;font-size:26px;font-weight:600;letter-spacing:.02em;color:var(--geo-navy-900)}
.bdef dd{margin:0}
.bdef dd b{display:block;font-size:21px;font-weight:600;color:var(--geo-navy-900)}
.bdef dd span{display:block;margin-top:5px;font-family:'Outfit',sans-serif;font-size:15px;letter-spacing:.05em;color:var(--geo-navy-300)}
.bflow{display:flex;align-items:center;gap:14px;flex-wrap:wrap;margin:0 0 26px}
.bflow em{font-style:normal;font-size:19px;font-weight:600;color:var(--geo-navy-900);padding:9px 20px;background:var(--geo-white);border:1px solid var(--color-border);border-radius:2px}
.bflow i{width:16px;height:1px;background:var(--geo-navy-300);position:relative;flex:0 0 16px}
.bflow i::after{content:'';position:absolute;right:0;top:50%;width:5px;height:5px;border-right:1px solid var(--geo-navy-300);border-top:1px solid var(--geo-navy-300);transform:translateY(-50%) rotate(45deg)}
.bnote{margin:0;font-size:18px;line-height:1.85;color:var(--geo-ink-mute)}
.bnote b{font-weight:600;color:var(--geo-navy-900)}
@media (max-width:900px){.bgrid{grid-template-columns:1fr}.bdef>div{grid-template-columns:96px 1fr;gap:16px}}

/* 블록 제목만 block. 본문 속 강조는 인라인으로 둔다 */
.pblock p b{display:inline;font-weight:600;color:var(--geo-navy-900)}

/* ── CI ──────────────────────────────────────────────────── */
.symgrid{display:grid;grid-template-columns:minmax(0,42%) minmax(0,58%);gap:clamp(32px,5vw,88px);align-items:center}
.symstage{display:flex;align-items:center;justify-content:center;padding:clamp(24px,3vw,48px) 0}
.symstage img{width:clamp(190px,22vw,320px);height:auto}
.symlist{list-style:none;margin:0;padding:0;counter-reset:sym;border-top:1px solid var(--color-border)}
.symlist li{counter-increment:sym;position:relative;padding:30px 0 30px 62px;border-bottom:1px solid var(--color-border);cursor:default;transition:padding-left var(--duration-state) var(--ease-out)}
.symlist li::before{content:counter(sym,decimal-leading-zero);position:absolute;left:0;top:33px;font-family:'Outfit',sans-serif;font-size:14px;font-weight:600;letter-spacing:.08em;color:var(--geo-navy-300);transition:color var(--duration-state) var(--ease-out)}
.symlist li::after{content:'';position:absolute;left:0;bottom:-1px;height:1px;width:0;background:var(--geo-navy-500);transition:width 520ms var(--ease-out)}
.symlist li:hover{padding-left:72px}
.symlist li:hover::before{color:var(--geo-navy-500)}
.symlist li:hover::after{width:100%}
.symlist b{display:block;font-size:clamp(20px,1.9vw,25px);font-weight:600;color:var(--geo-navy-900);margin-bottom:10px}
.symlist p{margin:0;font-size:18px;line-height:1.8;color:var(--geo-ink-mute)}
.symlist p b{display:inline;font-size:inherit;margin:0}

.faces{list-style:none;margin:0;padding:0;display:grid;grid-template-columns:repeat(4,1fr);gap:0;border-top:1px solid var(--color-border);border-left:1px solid var(--color-border)}
.face{padding:0 0 26px;border-right:1px solid var(--color-border);border-bottom:1px solid var(--color-border)}
.face-chip{display:block;height:120px;width:100%}
.face b{display:block;margin:22px 22px 6px;font-size:20px;font-weight:600;color:var(--geo-navy-900)}
.face code{display:block;margin:0 22px 12px;font-family:'Outfit',sans-serif;font-size:15px;letter-spacing:.08em;color:var(--geo-navy-300)}
.face-en{margin-left:8px;font-family:'Outfit',sans-serif;font-size:13px;font-weight:500;font-style:normal;letter-spacing:.06em;color:var(--geo-navy-300)}
.face-use{display:block;margin:0 22px;font-size:16px;line-height:1.65;color:var(--geo-ink-mute)}
@media (max-width:1000px){.faces{grid-template-columns:repeat(2,1fr)}}
@media (max-width:900px){.symgrid{grid-template-columns:1fr}}
@media (max-width:560px){.faces{grid-template-columns:1fr}}

/* ── 선언문 : 안강 비전식 중앙정렬 한 덩어리 ─────────────── */
.declare{padding:clamp(88px,9vw,140px) 0;background:var(--geo-white);text-align:center}
.dec-h{max-width:22ch;margin:0 auto;font-size:clamp(30px,3.6vw,52px);font-weight:600;line-height:1.42;letter-spacing:-.022em;color:var(--geo-navy-900);text-wrap:balance}
.dec-sub{max-width:56ch;margin:32px auto 0;font-size:19px;line-height:1.85;color:var(--geo-ink-mute)}

/* ── 좌측 라벨 + 우측 본문 ───────────────────────────────── */
.splitgrid{display:grid;grid-template-columns:minmax(0,4fr) minmax(0,6fr);gap:clamp(32px,6vw,96px);align-items:start}
.split-label{margin:0;font-family:'Outfit',sans-serif;font-size:clamp(30px,3.2vw,44px);font-weight:600;letter-spacing:-.01em;color:var(--geo-navy-900);line-height:1.2}
.split-h{font-size:clamp(22px,2.2vw,30px);font-weight:600;line-height:1.45;margin:0 0 24px;color:var(--geo-navy-900)}
.split-body p{font-size:19px;line-height:1.9;color:var(--geo-ink-mute);margin:0 0 18px}
.split-body p:last-child{margin-bottom:0}
.split-body p b{font-weight:600;color:var(--geo-navy-900)}
@media (max-width:860px){.splitgrid{grid-template-columns:1fr;gap:28px}}

/* ── 섹션 이미지 : 아래에서 열리며 천천히 축소된다 ────────── */
.pfig{margin:56px 0 0;overflow:hidden}
.pfig-in{display:block;overflow:hidden;position:relative;clip-path:inset(100% 0 0 0);transition:clip-path 1100ms cubic-bezier(.22,1,.28,1)}
.pfig img{display:block;width:100%;height:auto;aspect-ratio:16/7;object-fit:cover;transform:scale(1.14);transition:transform 1800ms cubic-bezier(.22,1,.28,1)}
.pfig.in .pfig-in{clip-path:inset(0 0 0 0)}
.pfig.in img{transform:scale(1)}
.fig-cap{margin:16px 0 0;font-size:16px;line-height:1.65;color:var(--geo-navy-300);opacity:0;transform:translateY(10px);transition:opacity 700ms var(--ease-out) 420ms,transform 700ms var(--ease-out) 420ms}
.pfig.in .fig-cap{opacity:1;transform:none}
.pfig-wide img{aspect-ratio:21/8}
@media (max-width:760px){.pfig img{aspect-ratio:4/3}}
@media (prefers-reduced-motion:reduce){
  .pfig-in{clip-path:none;transition:none}
  .pfig img{transform:none;transition:none}
  .fig-cap{opacity:1;transform:none;transition:none}
}

/* ── 풀블리드 이미지 ─────────────────────────────────────── */
.pbleed{position:relative;overflow:hidden;background:var(--geo-navy-900);height:clamp(520px,82vh,900px)}
.pbleed img{clip-path:inset(14% 0 14% 0);transition:clip-path 1200ms cubic-bezier(.22,1,.28,1);position:absolute;inset:0;width:100%;height:118%;object-fit:cover;will-change:transform}
.pbleed.in img{clip-path:inset(0 0 0 0)}
.pbleed-veil{position:absolute;inset:0;background:linear-gradient(to bottom,rgba(6,24,42,.42) 0%,rgba(6,24,42,.16) 40%,rgba(6,24,42,.62) 100%)}
.bleed-cap{position:absolute;left:0;right:0;bottom:clamp(36px,4vw,60px);margin:0;text-align:center;font-size:clamp(19px,2vw,28px);line-height:1.6;font-weight:600;color:var(--geo-white);text-shadow:0 2px 24px rgba(6,24,42,.7);opacity:0;transform:translateY(14px);transition:opacity 800ms var(--ease-out) 380ms,transform 800ms var(--ease-out) 380ms}
.pbleed.in .bleed-cap{opacity:1;transform:none}
@media (prefers-reduced-motion:reduce){
  .pbleed img{clip-path:none;transition:none;transform:none !important}
  .bleed-cap{opacity:1;transform:none;transition:none}
}

/* ── 챕터 : 세로 라벨 + 흘러나가는 이미지 + 본문/카드 ────── */
.chap{padding:clamp(72px,7vw,110px) 0}
.chap-media{position:relative;display:grid;grid-template-columns:clamp(90px,11vw,162px) 1fr;align-items:stretch;margin-bottom:clamp(40px,4vw,64px)}
.chap-label{align-self:end;margin:0 0 4px;padding-bottom:8px;writing-mode:vertical-rl;transform:rotate(180deg);display:flex;align-items:center;gap:16px;justify-self:center;font-family:'Outfit',sans-serif;letter-spacing:.12em;color:var(--geo-navy-300)}
.chap-label em{font-style:normal;font-size:13px;font-weight:600}
.chap-label span{font-size:14px;position:relative;padding-top:22px}
.chap-label span::before{content:'';position:absolute;top:0;left:50%;width:1px;height:14px;background:var(--geo-navy-300)}
.chap-shot{display:block;overflow:hidden;position:relative;clip-path:inset(0 100% 0 0);transition:clip-path 1200ms cubic-bezier(.22,1,.28,1)}
.chap-media.in .chap-shot{clip-path:inset(0 0 0 0)}
.chap-shot img{display:block;width:100%;height:clamp(300px,42vw,560px);object-fit:cover;transform:scale(1.1);transition:transform 1900ms cubic-bezier(.22,1,.28,1);will-change:transform}
.chap-media.in .chap-shot img{transform:scale(1)}

/* 뒤집으면 이미지가 왼쪽으로 흘러나간다 */
.chap-flip .chap-media{grid-template-columns:1fr clamp(90px,11vw,162px)}
.chap-flip .chap-label{order:2}
.chap-flip .chap-shot{order:1;clip-path:inset(0 0 0 100%)}
.chap-flip .chap-media.in .chap-shot{clip-path:inset(0 0 0 0)}

.chap-h{font-size:clamp(26px,2.8vw,38px);font-weight:600;line-height:1.32;letter-spacing:-.018em;margin:0 0 28px;color:var(--geo-navy-900)}
.chap-cols{display:grid;grid-template-columns:minmax(0,6fr) minmax(0,4fr);gap:clamp(32px,5vw,72px);align-items:start}
.chap-text p{font-size:18px;line-height:1.9;color:var(--geo-ink-mute);margin:0 0 16px}
.chap-text p:last-child{margin-bottom:0}
.chap-text b{font-weight:600;color:var(--geo-navy-900)}
.chap-card{position:relative;display:block;padding:32px 32px 36px;text-decoration:none;background:var(--geo-navy-050);border-radius:2px;transition:background var(--duration-state) var(--ease-out),transform var(--duration-state) var(--ease-out)}
.psec.alt .chap-card{background:var(--geo-white)}
/* .psec.alt .chap-card (0,3,0) 가 :hover (0,2,0) 를 이겨서 배경이 안 바뀌었다.
   같은 특정성으로 맞춰 준다 */
.chap-card:hover,
.psec.alt .chap-card:hover{background:var(--geo-navy-900);transform:translateY(-2px)}
.chap-card b{display:block;font-size:22px;font-weight:600;color:var(--geo-navy-900);margin-bottom:12px}
.chap-card p{margin:0;font-size:17px;line-height:1.7;color:var(--geo-ink-mute)}
.chap-card i{position:absolute;right:32px;top:36px;width:26px;height:1px;background:var(--geo-navy-900);transition:width var(--duration-state) var(--ease-out),background var(--duration-state) var(--ease-out)}
.chap-card i::after{content:'';position:absolute;right:0;top:50%;width:7px;height:7px;border-right:1px solid currentColor;border-top:1px solid currentColor;color:var(--geo-navy-900);transform:translateY(-50%) rotate(45deg)}
.chap-card:hover b{color:var(--geo-white)}
.chap-card:hover p{color:var(--geo-navy-100)}
.chap-card:hover i{width:36px;background:var(--geo-white)}
.chap-card:hover i::after{color:var(--geo-white)}

@media (max-width:860px){
  .chap-media,.chap-flip .chap-media{grid-template-columns:1fr}
  .chap-label{writing-mode:horizontal-tb;transform:none;justify-self:start;margin:0 0 14px;padding:0 0 0 20px}
  .chap-label span{padding-top:0;padding-left:22px}
  .chap-label span::before{top:50%;left:0;width:14px;height:1px}
  .chap-cols{grid-template-columns:1fr}
}

/* 머리말 없이 내용만 있는 섹션 — 위 여백을 줄인다 */
.psec.tight{padding-top:clamp(48px,4.5vw,72px)}
.psec.tight .psec-head{display:none}
/* 풀블리드 바로 위 섹션은 아래 여백을 좁힌다 */
.psec:has(+ .pbleed){padding-bottom:clamp(40px,4vw,60px)}

/* ── 겹침 레이아웃 : 회색 패널 + 어긋나게 얹히는 이미지 ──── */
.ovsec{position:relative;padding-bottom:clamp(40px,4vw,64px)}
.ovsec + .psec{padding-top:clamp(48px,4.5vw,72px)}
.ov-panel{width:min(87%,1500px);background:var(--geo-navy-050);padding:clamp(64px,7vw,110px) 0 clamp(150px,16vw,260px)}
.ov-grid{display:grid;grid-template-columns:minmax(0,4fr) minmax(0,6fr);gap:clamp(28px,5vw,80px);align-items:start}
.ov-label{margin:0;font-family:'Outfit',sans-serif;font-size:clamp(28px,3vw,42px);font-weight:600;letter-spacing:-.01em;line-height:1.2;color:var(--geo-navy-900)}
.ov-h{font-size:clamp(21px,2.1vw,29px);font-weight:600;line-height:1.45;margin:0 0 22px;color:var(--geo-navy-900)}
.ov-body p{font-size:18px;line-height:1.9;color:var(--geo-ink-mute);margin:0 0 16px}
.ov-body p:last-child{margin-bottom:0}
.ov-body p b{font-weight:600;color:var(--geo-navy-900)}

/* 이미지 — 왼쪽은 들어가고 오른쪽은 화면 끝까지. 패널 위로 올라탄다 */
.ov-shot{position:relative;margin:clamp(-230px,-14vw,-130px) 0 0 clamp(60px,12%,180px)}
/* clip-path 를 관찰 대상에 직접 걸면 IntersectionObserver 가 교차를 0 으로 본다.
   반드시 안쪽 래퍼에 건다 */
.ov-shot-in{display:block;overflow:hidden;clip-path:inset(0 0 100% 0);transition:clip-path 1100ms cubic-bezier(.22,1,.28,1)}
.ov-shot.in .ov-shot-in{clip-path:inset(0 0 0 0)}
.ov-shot img{display:block;width:100%;height:clamp(280px,34vw,460px);object-fit:cover;transform:scale(1.12);transition:transform 1900ms cubic-bezier(.22,1,.28,1);will-change:transform}
.ov-shot.in img{transform:scale(1)}

/* 아래 블록은 이미지 왼쪽선에 맞춘다 */
/* .wrap 밖에 있어 전폭이 된다. 같은 폭 규칙을 직접 물린다 */
.ov-foot{max-width:1360px;margin:clamp(48px,5vw,80px) auto 0;padding:0 clamp(24px,3vw,48px)}
.ov-foot .pblocks{border:0}
.ov-foot .pblock{border-right:0;border-bottom:0;background:transparent;
  padding:22px clamp(20px,3vw,44px) 0 0}
.ov-foot .pblock:hover{background:transparent}
.ov-foot .pblock b{font-size:clamp(21px,2vw,27px);margin-bottom:16px}

@media (max-width:860px){
  .ov-panel{width:100%;padding-bottom:clamp(90px,14vw,140px)}
  .ov-shot{margin:-60px 0 0 clamp(20px,6%,48px)}
  .ov-foot{margin-left:0}
  .ov-grid{grid-template-columns:1fr;gap:24px}
}
@media (prefers-reduced-motion:reduce){
  .ov-shot-in{clip-path:none;transition:none}
  .ov-shot img{transform:none !important;transition:none}
}
.node:focus-visible{outline:var(--focus-ring-width) solid var(--focus-ring-color);outline-offset:3px}
.exec.hit{background:var(--geo-white);box-shadow:inset 2px 0 0 var(--geo-navy-500)}

/* ── 사진을 배경으로 까는 섹션 ───────────────────────────── */
.photosec{position:relative;overflow:hidden;background:var(--geo-navy-900);min-height:clamp(720px,102vh,1140px);display:flex;flex-direction:column;padding:clamp(80px,7.5vw,120px) 0 clamp(120px,11vw,190px);color:var(--geo-white)}
.photosec .ps-in{display:flex;flex-direction:column;justify-content:space-between;flex:1;gap:clamp(40px,4.5vw,72px)}
.ps-eyebrow{font-family:'Outfit',sans-serif;font-size:14px;font-weight:500;letter-spacing:.22em;text-transform:uppercase;color:var(--geo-navy-100);margin:0 0 16px}
.ps-h{font-size:clamp(30px,3.6vw,52px);font-weight:600;line-height:1.22;letter-spacing:-.022em;margin:0;color:var(--geo-white);text-shadow:0 2px 30px rgba(6,24,42,.55)}
.ps-lead{font-size:clamp(18px,1.7vw,22px);line-height:1.7;color:var(--geo-navy-100);margin:0;max-width:42ch}
.ps-body{display:grid;grid-template-columns:minmax(0,4fr) minmax(0,6fr);gap:clamp(32px,5vw,80px);align-items:center}
.ps-lockup{width:clamp(240px,26vw,380px);height:auto;filter:drop-shadow(0 4px 24px rgba(6,24,42,.6))}
.ps-mean{min-width:0}
@media (max-width:900px){.ps-body{grid-template-columns:1fr;align-items:start;gap:32px}}
.ps-bg{position:absolute;inset:0;width:100%;height:114%;object-fit:cover;object-position:50% 96%;will-change:transform;clip-path:inset(10% 0 10% 0);transition:clip-path 1200ms cubic-bezier(.22,1,.28,1)}
.photosec.in .ps-bg{clip-path:inset(0 0 0 0)}
.ps-veil{position:absolute;inset:0;background:linear-gradient(to bottom,rgba(6,24,42,.60) 0%,rgba(6,24,42,.08) 26%,rgba(6,24,42,.18) 46%,rgba(6,24,42,.56) 74%,rgba(6,24,42,.80) 100%)}
.ps-in{position:relative;z-index:1}
.ps-cap{margin:clamp(40px,4vw,64px) 0 0;text-align:center;font-size:clamp(18px,1.8vw,24px);font-weight:600;line-height:1.6;color:var(--geo-white);text-shadow:0 2px 24px rgba(6,24,42,.7)}

/* 사진 위에서는 밝은 색으로 뒤집는다 */
.photosec .bdef{border-top-color:rgba(255,255,255,.68);margin-bottom:26px}
.photosec .bdef>div{border-bottom-color:rgba(255,255,255,.30);position:relative;overflow:hidden}
.photosec .bdef dt,.photosec .bdef dd b{color:var(--geo-white)}
.photosec .bdef dd span{color:var(--geo-navy-100)}
.photosec .bflow{margin-bottom:22px}
.photosec .bflow em{background:rgba(255,255,255,.10);border-color:rgba(255,255,255,.30);color:var(--geo-white);-webkit-backdrop-filter:blur(6px);backdrop-filter:blur(6px)}
.photosec .bflow i,.photosec .bflow i::after{background:var(--geo-navy-100);border-color:var(--geo-navy-100)}
/* 마무리 선언문 — 인용부호는 장식이라 읽히지 않게 둔다 */
/* 본문용으로 좁혀 둔 자간을 여기서만 푼다. 읽는 속도가 느려져 무게가 생긴다 */
.photosec .bnote{color:var(--geo-white);font-size:clamp(21px,1.9vw,26px);font-weight:600;
  line-height:1.9;letter-spacing:.01em;opacity:0;transform:translateY(10px)}
/* 뒷줄이 결론이라 그쪽이 무겁다 */
.photosec .bnote em{font-style:normal;font-weight:700}
.photosec .bnote::before,.photosec .bnote::after{color:rgba(255,255,255,.42);font-weight:700}
.photosec .bnote::before{content:'\201C'}
.photosec .bnote::after{content:'\201D'}
.photosec .bnote b{color:var(--geo-white)}
@media (prefers-reduced-motion:reduce){
  .ps-bg{clip-path:none;transition:none;transform:none !important}
}

/* 로고가 땅에서 솟아오르게 — 관찰 대상은 래퍼, 클립은 안쪽 이미지에 */
.subpage .ps-lockup{opacity:1;transform:none}
.ps-lockup img{display:block;width:100%;height:auto;clip-path:inset(100% 0 0 0);transform:translateY(46px) scale(1.04);filter:drop-shadow(0 6px 28px rgba(6,24,42,.7))}
.ps-lockup.in img{clip-path:inset(0 0 0 0);transform:none;transition:clip-path 1100ms cubic-bezier(.22,1,.28,1) 120ms, transform 1200ms cubic-bezier(.22,1,.28,1) 120ms}

/* 사진 위 글자 가독성 */
.ps-h,.ps-eyebrow{text-shadow:0 2px 26px rgba(6,24,42,.75)}
.photosec .bdef dt,.photosec .bdef dd b,.photosec .bdef dd span,
.photosec .bnote,.photosec .bnote b{text-shadow:0 1px 16px rgba(6,24,42,.8)}
@media (prefers-reduced-motion:reduce){
  .ps-lockup img{clip-path:none;transform:none}
}

/* 회색 섹션 바로 뒤에 겹침 레이아웃이 오면 회색 면끼리 붙어 경계가 사라진다.
   흰 간격을 넣어 떼어 놓는다 */
.psec.alt + .ovsec{padding-top:clamp(56px,5vw,88px);background:var(--geo-white)}
.ovsec + .psec.alt{margin-top:0}

/* ══ 공정 타임라인 (개발PM) ══════════════════════════════
   업무를 나열하는 대신 공정 위에 놓는다. 아래 막대가
   「원가는 착공 전에 정해진다」를 그림으로 증명한다. */
.ptl{--g:clamp(20px,2.4vw,36px);--n:4;display:grid;grid-template-columns:repeat(var(--n),minmax(0,1fr));
  gap:var(--g);margin-top:clamp(36px,4vw,60px)}
/* 열이 여섯 이상이면 간격과 글자를 한 단계 좁힌다 */
.ptl.dense{--g:clamp(13px,1.4vw,20px)}
.ptl.dense .ptl-ko{font-size:clamp(19px,1.75vw,25px)}
.ptl.dense .ptl-task b{font-size:17px}
.ptl.dense .ptl-task span{font-size:15px;margin-top:5px}
.ptl.dense .ptl-badge{font-size:13px;padding:4px 9px;margin-top:10px}
.ptl.dense .ptl-task{min-height:clamp(86px,7.6vw,102px)}
.ptl-en{font-family:'Outfit',sans-serif;font-size:14px;font-weight:500;letter-spacing:.2em;
  text-transform:uppercase;color:var(--geo-navy-300);margin:0}
.ptl-ko{font-size:clamp(22px,2.2vw,30px);font-weight:var(--w-head);line-height:1.2;
  letter-spacing:-.02em;color:var(--geo-navy-900);margin:6px 0 0}
.ptl-tasks{list-style:none;margin:clamp(18px,1.8vw,26px) 0 0;padding:22px 0 0;
  border-top:2px solid var(--color-border);position:relative}
.ptl-tasks::after{content:'';position:absolute;left:0;right:0;top:-2px;height:2px;
  background:var(--geo-navy-500);transform:scaleX(0);transform-origin:left;
  /* 지연은 열마다 인라인 --dl 로 받는다. 열 수가 몇이든 순서대로 그려진다 */
  transition:transform 520ms var(--ease-out) var(--dl,0ms)}
.ptl-col.in .ptl-tasks::after{transform:scaleX(1)}
.ptl-tasks::before{content:'';position:absolute;left:0;top:-7px;width:12px;height:12px;
  background:var(--geo-navy-500);border-radius:50%;transform:scale(0);
  transition:transform 300ms var(--ease-out) var(--dl,0ms)}
.ptl-col.in .ptl-tasks::before{transform:scale(1)}
.ptl-col:not(:last-child) .ptl-tasks{margin-right:calc(var(--g) * -1);padding-right:var(--g)}
.ptl-task{display:flex;flex-direction:column;justify-content:flex-start;
  min-height:clamp(96px,8.6vw,112px);padding:14px 0;
  border-bottom:1px solid var(--color-border)}
.ptl-task:last-child{border-bottom:0}
.ptl-badge{display:inline-block;align-self:start;margin:12px 0 0;padding:5px 12px;font-size:14px;font-weight:600;
  color:var(--geo-white);background:var(--geo-navy-500);letter-spacing:-.01em}
.ptl-badge.is-empty{visibility:hidden}
.ptl-col.mark .ptl-tasks::before{width:16px;height:16px;top:-9px}
.ptl-task b{display:block;font-size:18px;font-weight:600;line-height:1.4;
  color:var(--geo-navy-900);letter-spacing:-.01em}
.ptl-task span{display:block;margin-top:6px;font-size:16px;line-height:1.55;
  color:var(--color-text-muted)}

.ptl-bar{margin-top:clamp(44px,5vw,72px);padding-top:clamp(28px,3vw,40px);
  border-top:1px solid var(--color-border)}
.ptl-bar-k{font-size:18px;font-weight:600;color:var(--geo-navy-900);margin:0}
.ptl-bar-list{list-style:none;display:grid;grid-auto-flow:column;
  grid-template-columns:repeat(var(--n,4),minmax(0,1fr));
  grid-template-rows:clamp(120px,13vw,176px) auto auto;
  column-gap:clamp(20px,2.4vw,36px);row-gap:0;
  margin:clamp(20px,2.2vw,32px) 0 0;padding:0}
.ptl-bar-cell{display:contents}
.ptl-bar-fill{align-self:end;height:var(--h);min-height:6px;background:var(--geo-navy-500);
  margin-bottom:14px;transform:scaleY(0);transform-origin:bottom;
  transition:transform var(--duration-reveal) var(--ease-out)}
.ptl-bar[data-rv].in .ptl-bar-fill{transform:scaleY(1)}
.ptl-bar-cell b{align-self:start;font-size:18px;font-weight:600;color:var(--geo-navy-900)}
.ptl-bar-note{display:block;align-self:start;margin-top:6px;font-size:16px;line-height:1.55;
  color:var(--color-text-muted)}
@media (prefers-reduced-motion:reduce){
  .ptl-bar-fill{transition:none;transform:scaleY(1)}
  .ptl-tasks::after,.ptl-tasks::before{transition:none;transform:none}
  .ptl-tasks::after{transform:scaleX(1)}.ptl-tasks::before{transform:scale(1)}
}
@media (max-width:1200px){
  .ptl{--n:3 !important}
}
@media (max-width:900px){
  .ptl{--n:2 !important}
}
@media (max-width:560px){
  .ptl{--n:1 !important}
  .ptl-bar-list{grid-auto-flow:row;grid-template-columns:1fr;grid-template-rows:none;row-gap:28px}
  .ptl-bar-cell{display:block}
  .ptl-bar-fill{height:14px;width:var(--h);max-width:100%;
    transform:scaleX(0);transform-origin:left}
  .ptl-bar[data-rv].in .ptl-bar-fill{transform:scaleX(1)}
}


/* CI 히어로 로크업 — 사진 위에서 심볼이 그려진 뒤 이름이 뜬다 */
.ps-draw{display:flex;flex-direction:column;align-items:center;gap:clamp(20px,2.4vw,32px);overflow:visible}
.gdmark-ci{width:clamp(150px,15.5vw,220px);height:auto;display:block;overflow:visible}
.gdmark-ci .gd-f{stroke:var(--geo-white);stroke-width:22;stroke-linejoin:round;stroke-linecap:round;
  stroke-dasharray:4200;stroke-dashoffset:4200;fill-opacity:0;
  transition:opacity 260ms var(--ease-out)}
.gdmark-ci .gd-front{fill:var(--geo-white)}
.gdmark-ci .gd-side{fill:rgba(255,255,255,.80)}
.gdmark-ci .gd-shade{fill:rgba(255,255,255,.58)}
.gdmark-ci .gd-ground{fill:rgba(255,255,255,.40)}
.ps-draw.in .gd-f{animation:gdDraw 1000ms cubic-bezier(.4,0,.2,1) both,gdFillCi 460ms ease-out both}
@keyframes gdFillCi{from{fill-opacity:0;stroke-width:22}to{fill-opacity:1;stroke-width:0}}
.ps-draw.in .gd-front{animation-delay:0ms,980ms}
.ps-draw.in .gd-side{animation-delay:260ms,1180ms}
.ps-draw.in .gd-shade{animation-delay:480ms,1360ms}
.ps-draw.in .gd-ground{animation-delay:700ms,1540ms}
.ps-lockup-txt{display:block;width:max-content;max-width:100%;text-align:center;
  --nudge:-4px;opacity:0;transform:translate(var(--nudge),10px)}
.ps-draw.in .ps-lockup-txt{opacity:1;transform:translateX(var(--nudge));
  transition:opacity 600ms var(--ease-out) 1700ms,transform 600ms var(--ease-out) 1700ms}
.ps-lockup-txt b{display:block;font-size:clamp(26px,2.6vw,36px);font-weight:700;letter-spacing:-.02em;color:var(--geo-white)}
.ps-lockup-txt b em{font-style:normal;font-size:.62em;font-weight:600;opacity:.72}
.ps-lockup-txt i{display:block;margin-top:8px;font-style:normal;font-family:'"Outfit"',sans-serif;
  font-size:clamp(11px,.88vw,13px);letter-spacing:.07em;text-transform:uppercase;white-space:nowrap;color:rgba(255,255,255,.72)}
@media (prefers-reduced-motion:reduce){
  .ps-draw .gd-f{stroke-dashoffset:0;fill-opacity:1;stroke-width:0;animation:none}
  .ps-lockup-txt{opacity:1;transform:translateX(var(--nudge))}
}


/* CI 뜻풀이 — 이름이 뜻으로 넘어가는 순간을 단계로 보여준다 (A)
   행에 닿으면 심볼의 해당 면이 밝아진다 (B) */
.photosec .bdef dd{opacity:0;transform:translateX(-14px);clip-path:inset(0 100% 0 0)}
.photosec .bdef.on dd{opacity:1;transform:none;clip-path:inset(0 0 0 0);
  transition:opacity 520ms var(--ease-out),transform 520ms var(--ease-out),clip-path 620ms var(--ease-out)}
.photosec .bdef.on>div:nth-child(1) dd{transition-delay:260ms}
.photosec .bdef.on>div:nth-child(2) dd{transition-delay:760ms}
.photosec .bdef>div::after{content:'';position:absolute;left:0;bottom:-1px;height:1px;width:100%;
  background:var(--geo-white);transform:scaleX(0);transform-origin:left;
  transition:transform 520ms var(--ease-out)}
.photosec .bdef.on>div::after{transform:scaleX(1)}
.photosec .bdef.on>div:nth-child(2)::after{transition-delay:500ms}
.ps-mean.on .bnote{opacity:1;transform:none;
  transition:opacity 600ms var(--ease-out) 1320ms,transform 600ms var(--ease-out) 1320ms}
.bdef>div.lit dt,.bdef>div.lit dd b{color:var(--geo-white)}
.gdmark-ci.lit-geo .gd-front,.gdmark-ci.lit-geo .gd-side,.gdmark-ci.lit-geo .gd-shade,
.gdmark-ci.lit-dev .gd-side,.gdmark-ci.lit-dev .gd-shade,.gdmark-ci.lit-dev .gd-ground{opacity:.22}
@media (prefers-reduced-motion:reduce){
  .photosec .bdef dd{opacity:1;transform:none;clip-path:none}
  .photosec .bdef>div::after{transform:scaleX(1)}
  .photosec .bnote{opacity:1;transform:none}
}


/* 대표 현장 스트립 — 조감도가 먼저 오고 이름이 따라온다 */
.pcases{list-style:none;display:grid;grid-template-columns:repeat(4,minmax(0,1fr));
  gap:clamp(20px,2.2vw,32px);margin:clamp(32px,3.4vw,52px) 0 0;padding:0}
.pcase{display:flex;flex-direction:column}
.pcase-shot{display:block;overflow:hidden;background:var(--geo-navy-900);margin-bottom:16px}
.pcase-shot img{display:block;width:100%;height:clamp(150px,13vw,196px);object-fit:cover;
  transition:transform 620ms var(--ease-out)}
.pcase:hover .pcase-shot img{transform:scale(1.045)}
.pcase b{font-size:19px;font-weight:700;line-height:1.4;color:var(--geo-navy-900);letter-spacing:-.015em}
.pcase-loc{display:block;margin-top:6px;font-size:16px;color:var(--color-text-muted)}
.pcase-spec{display:block;margin-top:4px;font-size:16px;color:var(--color-text-muted)}
@media (max-width:1000px){.pcases{grid-template-columns:repeat(2,minmax(0,1fr))}}
@media (max-width:560px){.pcases{grid-template-columns:1fr}}


/* 다음 행동으로 잇는 줄 */
.pnext{display:flex;align-items:center;justify-content:space-between;gap:clamp(24px,3vw,48px);
  flex-wrap:wrap;margin-top:clamp(36px,3.6vw,56px);padding-top:clamp(24px,2.6vw,36px);
  border-top:2px solid var(--geo-navy-500)}
.pnext b{display:block;font-size:21px;font-weight:700;color:var(--geo-navy-900);letter-spacing:-.015em}
.pnext p{margin:8px 0 0;font-size:18px;line-height:1.7;color:var(--color-text-muted)}
.pnext-go{display:inline-flex;align-items:center;gap:10px;height:var(--control-height);
  padding:0 clamp(22px,2.4vw,34px);background:var(--geo-navy-500);color:var(--geo-white);
  font-size:18px;font-weight:600;text-decoration:none;white-space:nowrap;
  transition:background var(--duration-state) var(--ease-out)}
.pnext-go::after{content:"→"}
.pnext-go:hover{background:var(--geo-navy-900)}

@media (max-width:900px){
  .pcta-tel a,.pcta-go,.pnext-go,.ask-contact dd a,
  .ptable td a,.maptel a,.mapline a,.pnote a{display:inline-flex;align-items:center;min-height:44px}
}

/* 접수 완료 안내 */
.csent{grid-column:1 / -1;padding:clamp(28px,3.4vw,44px);background:var(--geo-navy-050);
  border-left:3px solid var(--geo-navy-500)}
.csent[hidden]{display:none}
.csent b{display:block;font-size:clamp(21px,2vw,26px);font-weight:700;color:var(--geo-navy-900);letter-spacing:-.02em}
.csent p{margin:12px 0 0;font-size:18px;line-height:1.75;color:var(--color-text-muted)}
.csent a{color:var(--geo-navy-500);font-weight:600}

/* 검토 요청 — 폼 페이지라 보여 주는 자리가 아니다. 한 화면에 들어오게 줄인다 */
body:has(.cform) .phero{padding:150px 0 64px;min-height:clamp(320px,34vh,440px)}
body:has(.cform) .cgrid{gap:clamp(32px,3.6vw,56px)}
body:has(.cform) .ck-2{margin-top:36px}
body:has(.cform) .cnote{margin-top:14px}
body:has(.cform) .psec{padding:clamp(48px,5vw,64px) 0 clamp(56px,5.5vw,72px)}
body:has(.cform) .cform{row-gap:18px;column-gap:18px}
body:has(.cform) .f-input{height:48px}
body:has(.cform) .f-area{height:clamp(96px,11vh,120px)}
body:has(.cform) .csteps li{padding-block:14px}
body:has(.cform) .cfree{padding:16px 20px}
body:has(.cform) .ask-contact>div{padding-block:12px}

/* 회사소개 — 비전 밴드 (Our Work ↔ 회사 개요 전환부) */
.vision-band{position:relative;height:clamp(320px,42vw,560px);overflow:hidden}
.vision-band img{width:100%;height:100%;object-fit:cover;display:block}
.vision-band::after{content:'';position:absolute;inset:0;background:linear-gradient(to bottom,rgba(6,24,42,.28),transparent 30%,transparent 70%,rgba(255,255,255,.12))}
.ovsec + .vision-band + .psec{padding-top:clamp(56px,5vw,88px)}

/* 오시는 길 — 네이버 지도 */
.mapbox{position:relative;min-height:380px}
#nmap{width:100%;height:100%;min-height:380px;border:1px solid var(--color-border)}
.map-open{position:absolute;right:12px;bottom:12px;z-index:5;display:inline-flex;align-items:center;min-height:44px;padding:0 16px;font-size:14px;
  background:rgba(6,24,42,.82);color:var(--geo-white);text-decoration:none;border-radius:2px}
.map-open:hover{background:var(--geo-navy-500)}

/* 모바일 — 가로 스크롤 표 안내 (코덱스 검수 4번) */
@media (max-width:760px){
  .tscroll,.briefs-scroll{position:relative}
  .tscroll::before,.briefs-scroll::before{content:'옆으로 밀어 전체를 보세요 →';display:block;
    font-size:13px;color:var(--geo-navy-300,#6f8296);padding:0 0 8px}
}

/* 전화·사업자번호 등 숫자 덩어리 — 하이픈에서 줄바꿈 금지 */
.nb{white-space:nowrap}

/* 문의 폼 봇 함정 — 사람 눈·스크린리더·Tab 순회에서 모두 빠진다 */
.f-trap{position:absolute;left:-9999px;width:1px;height:1px;overflow:hidden}

/* ── 홍보센터 (news.html) — 목록 스타일은 final.css .nlist ───────── */
.nsec .ntabs{margin-bottom:40px}
.nview{max-width:820px}
.nview .nmeta{flex-direction:row;gap:14px;margin:0 0 18px}
.nview-h{font-size:clamp(26px,2.6vw,36px);font-weight:600;line-height:1.38;letter-spacing:-.015em;margin:0 0 40px;padding-bottom:32px;border-bottom:2px solid var(--geo-navy-900)}
.nview-body p{font-size:19px;line-height:1.9;color:var(--geo-ink);margin:0 0 1.2em}
.nview-src{margin:32px 0 0;font-size:18px;font-weight:600}
.nview-src a{color:var(--geo-navy-500)}
.nview-back{margin:56px 0 0;padding-top:28px;border-top:1px solid var(--color-border)}
.nview-back a{display:inline-flex;align-items:center;min-height:44px;font-size:18px;font-weight:600;color:var(--geo-navy-900)}
.nsec [hidden]{display:none}
