/* ⚠️ 페이지가 참조하는 배포본은 이 파일이 아니라 *.min.css — 수정 후 반드시 `python3 tools/minify.py` 로 재생성해 함께 커밋할 것 */
/* [N1] @font-face 선언은 /static/lib/css/fonts.css 로 옮겼다.
   unicode-range 로 조각낸 서브셋이라 선언이 길고, 메인(renewal.css)과 V2 하위
   페이지(renewal-chrome.css)가 같은 폰트를 쓰므로 한 벌만 두고 공유한다.
   ★ 두 셸(head) 모두 이 CSS 보다 '먼저' fonts.css 를 링크해야 한다. */


/* ============================================================
 * renewal-chrome.css — 리뉴얼 공용 헤더/푸터 전용 스타일
 *
 *  누가 쓰나
 *   · V2 페이지 (head_v2.php) — 구 style.css 와 함께 로드되는 환경
 *   · 외부 앱 (/mdai 등)      — 이 파일 하나만 로드. style.css 없이도 완결된다.
 *   · renewal 메인은 renewal.css(전체판)를 쓴다 — 아래 '두 파일' 항목 참고.
 *
 *  단독 로드해도 되는 이유
 *   헤더/푸터 스코프(.hdr / .ftr) 안에서만 리셋을 걸기 때문에 바깥 UI 를 건드리지 않는다.
 *   페이지 전역에 영향을 주는 규칙은 아래 3개뿐이며, 전부 의도된 것이다.
 *     1) @media(max-width:1024px) body{ padding-bottom: 58px + safe-area }
 *        — 하단 고정 탭바에 콘텐츠가 가리지 않도록. 탭바를 안 쓰면 무시해도 된다.
 *     2) a,span,font,b,em,... { vertical-align: baseline }
 *        — 구 style.css 의 vertical-align:middle 전역 지정을 되돌린다.
 *          CSS 기본값이라 style.css 가 없는 환경에서는 사실상 무해.
 *     3) @media(max-width:820px) html,body{ overflow-x:hidden; max-width:100% }
 *        — 모바일 가로 스크롤 차단.
 *   파일 말미의 'V2 시맨틱 복구' 블록은 전부 :where(body.v2) 스코프라 외부 앱에는
 *   적용되지 않는다(구 style.css 를 함께 로드하는 V2 페이지 전용 처방).
 *   반대로 renewal.css 에는 *{box-sizing} / html / body / a / button / img,svg 같은
 *   전역 리셋이 들어 있다. 외부 앱은 renewal.css 를 로드하면 안 된다.
 *
 *  두 파일을 유지하는 이유와 안전장치
 *   전역 리셋을 메인에만 적용해야 해서 한 파일로 합치지 못했다. 그래서 헤더/푸터 규칙이
 *   renewal.css 와 이 파일에 같은 내용으로 두 벌 존재한다. 한쪽만 고치면 조용히 어긋나므로
 *   `php tools/check_chrome_parity.php` 로 대조한다(의도된 차이는 그 스크립트에 등재).
 *   → 헤더/푸터 스타일을 고칠 땐 두 파일 모두 고치고 위 스크립트를 돌릴 것.
 *
 *  마크업은 단일 소스: application/views/renewal/_header.php / _footer.php
 *  동작(JS)도 단일 소스: static/lib/js/renewal-chrome.js
 * ============================================================ */

/* ---- 구 style.css 전역 룰 방어 (12px 리셋·footer 전역 스타일 등) ----
   :where() 로 명시도를 0으로 낮춰, 아래 컴포넌트 클래스 룰(.nav-btn 등)이 항상 이기게 한다. */
.hdr, .ftr { font-family: var(--font-sans); font-size: var(--fs-base); line-height: 1.6; color: var(--fg); }
.hdr :where(*, *::before, *::after),
.ftr :where(*, *::before, *::after) { box-sizing: border-box; }
.hdr :where(ul, ol), .ftr :where(ul, ol) { margin: 0; padding: 0; list-style: none; }
.hdr :where(a), .ftr :where(a) { color: inherit; text-decoration: none; }
.hdr :where(button) { font: inherit; color: inherit; background: none; border: 0; cursor: pointer; padding: 0; margin: 0; }
.hdr :where(input) { font: inherit; }
.hdr :where(svg), .ftr :where(svg) { display: block; }
.hdr :where(p), .ftr :where(p), .ftr :where(address) { margin: 0; font-style: normal; }
footer.ftr { margin: 0; clear: both; }
.hdr :where(h1, h2, h3), .ftr :where(h1, h2, h3) { margin: 0; }

/* ---- 구 style.css 의 main{padding-top:10px;width:1200px;margin:auto} 방어 ----
   V2 고객센터/커뮤니티 래퍼(<main class="cbv2">)에 요소 셀렉터가 그대로 적중해
   모바일에서도 1200px 고정폭이 되던 문제. style.css 는 라이브 페이지(<main> 사용:
   회원가입·사이트이용안내 등)가 의존하므로 절대 수정하지 않고, style.css "다음"에
   로드되는 이 파일에서 V2 래퍼만 무력화한다.
   - 폭/마진 해제: 센터링·최대폭은 내부 .cbv2-inner(max-width:1200px;margin:0 auto)가
     이미 담당 → 데스크톱 렌더 픽셀 동일, 모바일은 유동.
   - padding-top:10px 는 유지해 기존 데스크톱 룩 보존. */
/* 위 방어는 main.cbv2 한 곳뿐이었다. 같은 구 규칙(width:1200px)을 그대로 맞고 있던 나머지
   V2 화면(gdv2 계열 — 순위·기업검색·BAP·가이드·이용요금·약관·통합검색 등)은 좁은 화면에서도
   main 이 1200px 로 고정돼, 카드·표·칩이 화면 밖으로 밀려났다(360px 화면에서 카드 1200px).
   고정폭을 상한으로 바꿔 데스크톱 모양(1200px 가운데 정렬)은 그대로 두고 좁은 화면에서만
   줄어들게 한다. cbv2 는 아래 줄이 계속 우선한다. */
body.v2 main{ width:auto; max-width:1200px; margin-left:auto; margin-right:auto; }

/* [폭 넘침] renewal.css(메인)에는 있는 전역 box-sizing:border-box 리셋이 이 파일에는 없어,
   V2 서브페이지의 폼 컨트롤이 width:100% + padding 만큼 컨테이너를 넘쳤다
   (BAP 발주처 조회 입력칸: 컨테이너 340px 인데 340+28=370px 로 카드 밖으로 삐져나감).
   레이아웃 전반을 건드리지 않도록 폼 컨트롤에만 적용한다 — 이 요소들은 UA 기본도
   border-box 라 되돌리는 성격의 변경이다. */
body.v2 input, body.v2 select, body.v2 textarea, body.v2 button{ box-sizing:border-box; }
main.cbv2 { width: auto; margin: 0; padding-top: 10px; }
/* style.css 전역 section{margin-top:20px} 이 cbv2-main 에 겹여백(10+20px)을 만든다 → 본문 마진 제거 */
main.cbv2 section.cbv2-main { margin-top: 0; }
/* style.css .plist{height:50px;line-height:50px} — 모바일에서 페이지 버튼이 랩되면 고정높이가 겹침 유발 */
.cbv2 .plist { height: auto; line-height: normal; }

/* ==== 전역 타이포 리셋 중화(V2 컨테이너) ======================================
   style.css(수정금지) 전역 td,th,a,span{font-size:12px;color:#232323} 는 요소 직격이라
   컨테이너의 font-size "상속"을 이긴다 → 게시글 본문(.vbody)·약관·안내문처럼
   DB/마크업이 span·td·font 로 감싼 텍스트가 전부 12px 로 렌더되던 원인.
   .cbv2 :where(...) = (0,1,0) 로 전역(0,0,1)만 이기고, 클래스 규칙·인라인 style 은
   그대로 우선하므로 개별 디자인은 불변.
   [3차] 이 규칙은 컨테이너 6종(span·a·td·th·font·p·li)만 다룬다. b·strong·div·h2 등
   나머지 요소는 파일 말미 'V2 시맨틱 복구' 블록에서 body.v2 전역으로 한 번에 처리한다. */
.cbv2 :where(span, a, td, th, font, p, li),
#mlv2 :where(span, a, td, th, font, p, li),
.gdv2 :where(span, a, td, th, font, p, li){font-size:inherit}
.cbv2 :where(span, font, p, li),
#mlv2 :where(span, font, p, li),
.gdv2 :where(span, font, p, li){color:inherit}
/* [#7·#20] style.css(수정금지) 전역 vertical-align:middle 이 인라인 강조 span(.em 등)을
   baseline 에서 띄워 한 줄 안에서 글자가 위/아래로 어긋나던 문제 중화.
   인라인 텍스트 요소만(span·a·font·b·em·strong·small·mark) — 아이콘 i, 셀 td·th, img 는 제외해 안전. */
.cbv2 :where(span, a, font, b, em, strong, small, mark),
#mlv2 :where(span, a, font, b, em, strong, small, mark),
.gdv2 :where(span, a, font, b, em, strong, small, mark){vertical-align:baseline}

/* ==== V2 페이저 통일(필형·A안) ==================================================
   head_v2(V2 전용)에서만 로드되므로 라이브 .plist/.pageBtn/.pager 무영향.
   - style.css .pageBtn(각진 보더)/.pageSet(color:red!important) 재정의(상세도 우위)
   - bidroom.css .pager(파란 활성 #2f6df6)는 .mbl-bidlist 스코프로 재정의
   활성 = 36px 원형 레드 채움(칩 탭바와 동일 문법), 숫자 = 고스트, 이전/다음 = 텍스트 */
.plist{display:flex;justify-content:center;align-items:center;gap:6px;flex-wrap:wrap;height:auto;line-height:normal}
.plist .pageBtn{display:inline-flex;align-items:center;justify-content:center;min-width:36px;height:36px;padding:0 6px;
  border:0;border-radius:999px;background:transparent;font-size:13px;font-weight:600;color:#4a5568;cursor:pointer;line-height:1;
  text-align:center;text-decoration:none;transition:background .12s,color .12s}
.plist .pageBtn:hover{background:#fbeaea;color:#c0392b;text-decoration:none} /* 회색 틴트는 페이지 배경과 미구분 → 레드 틴트 */
.plist .pageBtn.pageSet{background:#d64545;color:#fff!important;font-weight:800;border:0;box-shadow:0 3px 10px rgba(214,69,69,.25)}
.plist .pageBtn:first-child,.plist .pageBtn:last-child{padding:0 13px;color:#8a93a2;font-weight:700}
.plist .pageBtn:first-child:hover,.plist .pageBtn:last-child:hover{background:#fbeaea;color:#c0392b;text-decoration:none}
.mbl-bidlist .pager{display:flex;justify-content:center;align-items:center;gap:6px;flex-wrap:wrap;margin-top:16px}
.mbl-bidlist .pager a{display:inline-flex;align-items:center;justify-content:center;min-width:36px;height:36px;padding:0 6px;
  border:0;border-radius:999px;background:transparent;font-size:13px;font-weight:600;color:#4a5568;cursor:pointer;line-height:1;
  text-decoration:none;transition:background .12s,color .12s}
.mbl-bidlist .pager a:hover{background:#fbeaea;color:#c0392b;text-decoration:none}
/* [모바일 공통] 페이저 한 줄 — 이전/1~10/다음이 두 줄로 꺾이던 것 수정.
   [v4.8] 균등 축소(flex:1 min-width:0)만으로는 버튼이 12개를 넘는 페이저(조달업체목록 등)에서
   글자보다 좁게 짜부라졌다 — 버튼에 최소폭(34px)을 보장하고, 그래도 넘치면 컨테이너가
   가로 스크롤한다(짜부라뜨리는 대신 밀어서 보는 쪽이 눌리기라도 한다). */
@media (max-width:768px){
  .plist{flex-wrap:nowrap;width:100%;gap:2px;justify-content:stretch;
    overflow-x:auto;overflow-y:hidden;scrollbar-width:none;-webkit-overflow-scrolling:touch}
  .plist::-webkit-scrollbar{display:none}
  .plist .pageBtn{flex:1 1 0;min-width:34px;padding:0;font-size:12.5px;height:38px;white-space:nowrap}
  .plist .pageBtn:first-child,.plist .pageBtn:last-child{padding:0 6px;flex:1.15 1 auto;min-width:44px}
  .plist .pageBtn.pageSet{box-shadow:0 2px 7px rgba(214,69,69,.25)}
  .mbl-bidlist .pager{flex-wrap:nowrap;width:100%;gap:2px;
    overflow-x:auto;overflow-y:hidden;scrollbar-width:none;-webkit-overflow-scrolling:touch}
  .mbl-bidlist .pager::-webkit-scrollbar{display:none}
  .mbl-bidlist .pager a{flex:1 1 0;min-width:34px;padding:0;font-size:12.5px;height:38px;white-space:nowrap}
}

.mbl-bidlist .pager a.pageSet{background:#d64545;border-color:#d64545;color:#fff!important;font-weight:800;box-shadow:0 3px 10px rgba(214,69,69,.25)}
.mbl-bidlist .pager a:first-child,.mbl-bidlist .pager a:last-child{padding:0 13px;color:#8a93a2;font-weight:700}
.mbl-bidlist .pager a:first-child:hover,.mbl-bidlist .pager a:last-child:hover{background:#fbeaea;color:#c0392b;text-decoration:none}
/* [#28] 모바일: 페이지 버튼(이전 1 2 … 다음)이 2줄로 감기지 않고 한 줄로 — 넘치면 가로 스크롤 */
@media (max-width:640px){
  .plist,.mbl-bidlist .pager{flex-wrap:nowrap;overflow-x:auto;justify-content:flex-start;-webkit-overflow-scrolling:touch;scrollbar-width:none}
  .plist::-webkit-scrollbar,.mbl-bidlist .pager::-webkit-scrollbar{height:0;width:0}
  .plist .pageBtn,.mbl-bidlist .pager a{flex:0 0 auto}
  /* [버그픽스] 좌측 치우침 — 버튼이 폭 안에 다 들어가면 가운데, 넘치면 왼쪽부터 스크롤.
     justify-content:center 는 overflow 시 왼쪽 끝이 잘려 못 쓴다(고전 문제) → 양끝 auto 마진.
     (auto 마진은 남는 공간에서만 벌어지고 overflow 상태에선 0 으로 접힌다) */
  .plist > :first-child,.mbl-bidlist .pager > :first-child{margin-left:auto}
  .plist > :last-child,.mbl-bidlist .pager > :last-child{margin-right:auto}
}

:root{
  --canvas:#ffffff; --surface:#f9fafb; --surface-2:#f3f4f6;
  --bd:#e5e7eb; --bd-strong:#d1d5db;
  --fg:#111827; --fg-sub:#4b5563; --fg-muted:#6b7280; --fg-placeholder:#5f6673;
  --brand:#ca1111; --brand-dark:#a90d0d; --on-brand:#ffffff;
  --band-ic-bg:#fdeeed; --glass:rgba(255,255,255,.85);
  --ring-brand:0 0 0 3px rgba(202,17,17,.16);
  --shadow-glass:inset 0 1px 0 rgba(255,255,255,.75),0 1px 2px rgba(17,24,39,.04),0 8px 24px rgba(17,24,39,.06);
  --sh-1:0 1px 2px rgba(17,24,39,.05);
  --sh-2:0 2px 8px rgba(17,24,39,.06),0 12px 32px rgba(17,24,39,.08);
  --sh-3:0 4px 12px rgba(17,24,39,.06),0 24px 64px rgba(17,24,39,.12);
  --sh-user:0 4px 12px rgba(17,24,39,.08),0 2px 4px rgba(17,24,39,.04);
  --ease-spring:cubic-bezier(0.2, 0.8, 0.2, 1);
  --dur-spring:.32s; --ls-tight:-0.01em;

  --srf1:#11141b; --line-2:rgba(255,255,255,.16);
  --ink:#f4f6f8; --body:#e8ecf0; --mut:#9aa3ad;
  --red:#ff4d42; --red-hover:#ff6157; --red-deep:#ca1111; --on-accent:#0b0d12;
  --glow-a:radial-gradient(760px 560px at 12% 6%,rgba(255,77,66,.16),transparent 64%);
  --l-bg:#f6f7f9; --l-card:#ffffff; --l-ink:#171a1f; --l-mut:#565e6a;
  --l-line:#e4e7ec; --l-line-strong:#8b95a1;
  --le2:0 2px 8px rgba(23,26,31,.07),0 14px 36px rgba(23,26,31,.08);

  --mint:#00d4a4; --violet:#7c5cff; --violet-tint:rgba(124,92,255,.12);
  --r-pill:9999px; --r-chat:16px; --r-bubble:14px;

  --font-sans:"Pretendard Variable",Pretendard,-apple-system,system-ui,sans-serif;
  --font-mono:"JetBrains Mono",ui-monospace,monospace;
  --fs-2xs:11.5px; --fs-xs:12.5px; --fs-sm:13.5px; --fs-base:15px; --fs-h3:17px;

  --sp1:4px; --sp2:8px; --sp3:12px; --sp4:16px; --sp5:24px; --sp6:32px;
  --sp7:40px; --sp8:56px; --sp9:72px; --sp10:96px;
  --r1:6px; --r2:10px; --r3:16px; --r4:22px; --r-full:999px;
  --dur-1:.16s; --dur-2:.28s; --ease:cubic-bezier(.2,.7,.2,1);
  --container:1320px; --pad:40px;
}


.container{max-width:var(--container); margin-inline:auto; padding-inline:var(--pad)}
/* ============================================================================
   [레이어 순서 규약] 새 오버레이는 반드시 이 표에서 값을 받아 온다.
     70   .dd            GNB 드롭다운
     300  .hdr           헤더(스태킹 컨텍스트를 만든다 — 자손 fixed 의 기준점이 될 수 있으니
                         backdrop-filter 를 켠 채로 fixed 자손을 두지 말 것)
     350  .tabbar        모바일 하단 탭바
     360  .tabbar-toast  탭바 토스트
     400  .acct-panel    계정(프로필) 패널
     1200 .mega(모바일)  전체메뉴 시트 — 탭바까지 덮어야 해서 유일하게 네 자리
   같은 스태킹 컨텍스트(.hdr) 안에서는 이 숫자가 그대로 위아래가 된다.
   서로 겹치면 안 되는 레이어는 숫자로 겨루지 말고 JS 에서 상호배제할 것
   (계정 ↔ 전체메뉴가 그렇게 되어 있다).
   ========================================================================== */
/* ==========================================================================
   [앱/웹뷰] 상단 세이프에어리어
   head_v2/head 의 viewport 메타가 `viewport-fit=cover` 라 페이지를 화면 끝까지
   그린다. 일반 브라우저는 주소창이 상태바 자리를 가려 주지만, APK 웹뷰에는
   주소창이 없어 페이지 최상단(헤더·`.page-h` 페이지 타이틀)이 상태바에 덮였다.
   아래 인셋은 브라우저·데스크톱에서 항상 0 이라 화면 변화가 없고,
   상태바 위로 그려지는 환경에서만 그만큼 내려 준다.
   ========================================================================== */
body{ padding-top:env(safe-area-inset-top, 0px); }

.sr-only{position:absolute!important; width:1px; height:1px; padding:0; margin:-1px; overflow:hidden; clip:rect(0 0 0 0); white-space:nowrap; border:0}
.logo-sub{font-family:var(--font-mono); font-size:var(--fs-2xs); font-weight:500; color:var(--mut); letter-spacing:.08em}
.skip{
  position:fixed; top:-64px; left:16px; z-index:200;
  background:var(--brand); color:var(--on-brand); font-weight:700; font-size:var(--fs-sm);
  padding:10px 18px; border-radius:var(--r2); transition:top var(--dur-1) var(--ease);
}
.skip:focus{top:12px}


/* ============ HEADER ============ */
/* [V2 서브페이지] 헤더는 스크롤 시 "따라오지 않는다"(비고정).
   - 이유: 상세페이지들의 자체 .toolbar/.qjump 가 top:0 sticky 라서, 헤더까지
     sticky(z:60 동일)면 서로 겹쳐 레이아웃이 깨진다. 헤더를 문서 흐름에 두면
     스크롤 시 페이지 툴바가 자연스럽게 화면 상단(top:0)을 차지한다.
   - 모바일도 동일: 화면이 작을수록 세로공간이 귀해 헤더 상시고정은 손해.
     메뉴 접근은 최상단 스크롤(또는 페이지 툴바의 뒤로가기)로. renewal 메인만
     renewal.css 에서 sticky 유지.
   - z-index 300: 헤더가 문서 위쪽에 보일 때 드랍다운/메가가 서브페이지의
     sticky 툴바(z:60)·qjump(z:55) 위에 뜨도록. 페이지 모달(z:100000±)보다는 낮음. */
.hdr{
  /* relative(문서 흐름 유지=스크롤 시 사라짐) + z-index 적용 가능 상태 */
  position:relative; z-index:300; background:var(--glass);
  -webkit-backdrop-filter:blur(20px) saturate(180%); backdrop-filter:blur(20px) saturate(180%);
  border-bottom:1px solid var(--bd); box-shadow:var(--shadow-glass);
  letter-spacing:var(--ls-tight); font-weight:500;
}
.hdr::before {
  content: ""; position: absolute; inset: 0; z-index: -1;
  background-image: url("data:image/svg+xml,%3Csvg viewBox='0 0 200 200' xmlns='http://www.w3.org/2000/svg'%3E%3Cfilter id='noise'%3E%3CfeTurbulence type='fractalNoise' baseFrequency='0.85' numOctaves='3' stitchTiles='stitch'/%3E%3C/filter%3E%3Crect width='100%25' height='100%25' filter='url(%23noise)' opacity='0.05'/%3E%3C/svg%3E");
  pointer-events: none;
}

/* ============================================================
   상위 1% 초프리미엄 유틸리티 바 (t1) 정밀 튜닝
   ============================================================ */
.t1-in {
  display: flex;
  align-items: center;
  gap: var(--sp6);
  height: 58px;
}

/* 1. 로고 타이포그래피 마스터 튠 */
.logo {
  display: inline-flex;
  align-items: center;
  gap: 10px;
  flex: none;
  font-size: 17px;
  font-weight: 800;
  color: var(--fg);
  letter-spacing: -0.03em;
}
/* [#19] 모노그램('입') → 실제 로고 이미지. 배경/글자 스타일을 비우고 이미지만 꽉 채운다. */

/* 2. 글로벌 테크 스타업 스타일의 검색창 튜닝 */
.search-wrap {
  position: relative;
  flex: 1;
  max-width: 320px;
}
.search { position: relative; display: block; }
.search-ic {
  position: absolute;
  left: 14px;
  top: 50%;
  transform: translateY(-50%);
  width: 15px;
  height: 15px;
  color: var(--fg-muted);
  pointer-events: none;
  transition: color 0.2s var(--ease);
}
#gq {
  width: 100%;
  height: 38px;
  padding: 0 var(--sp4) 0 38px;
  background: rgba(0, 0, 0, 0.02);
  border: 1px solid rgba(0, 0, 0, 0.04);
  border-radius: 10px;
  font-size: 13.5px;
  font-weight: 500;
  color: var(--fg);
  caret-color: var(--brand);
  transition: background 0.24s var(--ease), border-color 0.24s var(--ease), box-shadow 0.24s var(--ease);
}
#gq:hover {
  background: rgba(0, 0, 0, 0.04);
  border-color: rgba(0, 0, 0, 0.08);
}
#gq:focus {
  outline: 0;
  background: var(--canvas);
  border-color: var(--brand);
  box-shadow: 0 0 0 4px rgba(202, 17, 17, 0.06), 0 4px 12px rgba(0, 0, 0, 0.03);
}
#gq:focus + .search-ic {
  color: var(--brand);
}
#gq::placeholder { color: var(--fg-placeholder); font-weight: 400; }

/* 3. 우측 버튼 그룹 스케일 및 정렬 최적화 */
.auth {
  display: flex;
  align-items: center;
  gap: var(--sp4);
  flex: none;
  margin-left: auto;
}
.login-link {
  display: inline-flex;
  align-items: center;
  min-height: 38px;
  padding: 0 var(--sp2);
  font-size: 13.5px;
  font-weight: 600;
  color: var(--fg-sub);
  transition: color 0.2s var(--ease);
}
.login-link:hover { color: var(--fg); }

.cta {
  display: inline-flex;
  align-items: center;
  height: 38px;
  padding: 0 18px;
  flex: none;
  background: var(--brand);
  color: var(--canvas);
  font-size: 13.5px;
  font-weight: 600;
  border-radius: 8px;
  box-shadow: 0 2px 6px rgba(0,0,0,0.06);
  white-space: nowrap;
  transition: background 0.2s var(--ease), transform 0.2s var(--ease), box-shadow 0.2s var(--ease);
}
.cta:hover {
  background: var(--red);
  box-shadow: 0 4px 12px rgba(0,0,0,0.1);
  transform: translateY(-1px);
}

/* ---- 나의메뉴(계정 드롭다운) — 로그인 시 로그아웃 링크 대체.
   상위 1% 패턴 차용: 아바타 칩(우측 끝) + hover/클릭 플로팅 패널,
   패널은 프로필 헤더 → 회원형태/만료일 메타 → 메뉴 → 로그아웃 순.
   hover 는 CSS(:hover/:focus-within), 터치·클릭 토글은 renewal-chrome.js 가 .open 부여 ---- */
.acct{ position:relative; display:flex; align-items:center; }
.acct-btn{
  display:inline-flex; align-items:center; gap:8px; height:40px; padding:3px 8px 3px 4px;
  border:1px solid transparent; border-radius:var(--r-full); background:transparent; cursor:pointer;
  transition:background var(--dur-1) var(--ease), border-color var(--dur-1) var(--ease);
}
.acct.open .acct-btn, .acct-btn:focus-visible{ background:var(--surface); border-color:var(--bd); }
.acct-avatar{
  width:30px; height:30px; border-radius:50%; flex:none;
  display:inline-flex; align-items:center; justify-content:center;
  background:linear-gradient(135deg, var(--brand), #e2574c); color:#fff;
  font-size:13.5px; font-weight:800; letter-spacing:0; user-select:none;
}
.acct-avatar--lg{ width:40px; height:40px; font-size:17px; }
.acct-name{ max-width:132px; overflow:hidden; text-overflow:ellipsis; white-space:nowrap; font-size:13.5px; font-weight:700; color:var(--fg); }
.acct-caret{ width:14px; height:14px; flex:none; color:var(--fg-muted); transition:transform var(--dur-2) var(--ease-spring); }
.acct.open .acct-caret{ transform:rotate(180deg); }
.acct-panel{
  position:absolute; top:calc(100% + 10px); right:0; width:284px;
  background:var(--canvas); border:1px solid var(--bd); border-radius:14px;
  box-shadow:0 4px 10px rgba(17,24,39,.06), 0 24px 48px rgba(17,24,39,.16);
  opacity:0; visibility:hidden; transform:translateY(6px) scale(.98); transform-origin:top right;
  transition:opacity var(--dur-2) var(--ease), transform var(--dur-2) var(--ease-spring), visibility 0s var(--dur-2);
  z-index:400;
}
/* hover 브리지 — 버튼↔패널 10px 공백만. 12px 는 헤더 행을 2px 침범해(z 400)
   AI·전체메뉴 쪽으로 이동하는 커서를 가로채 깜빡임·클릭 실종을 만들었다 */
.acct-panel::before{ content:""; position:absolute; top:-10px; left:0; right:0; height:10px; }
.acct.open .acct-panel{
  opacity:1; visibility:visible; transform:none;
  transition:opacity var(--dur-2) var(--ease), transform var(--dur-2) var(--ease-spring), visibility 0s;
}
/* hover 오픈은 데스크톱(정밀 포인터)만 — 터치는 :hover 잔존으로 패널이 안 닫히는 문제 방지.
   터치/키보드는 renewal-chrome.js 의 클릭 토글(.open)로 동작 */
@media (hover:hover) and (pointer:fine){
  .acct:hover .acct-btn{ background:var(--surface); border-color:var(--bd); }
  .acct:hover .acct-caret{ transform:rotate(180deg); }
  /* [hover intent] 열림에 120ms 지연 — 이웃 버튼으로 지나가며 스치는 호버(120ms 미만)로는
     패널이 뜨지 않아 경계 깜빡임이 사라진다. 닫힘 유예(visibility 지연)는 기본 규칙이 담당. */
  .acct:hover .acct-panel{
    opacity:1; visibility:visible; transform:none;
    transition:opacity var(--dur-2) var(--ease) .12s, transform var(--dur-2) var(--ease-spring) .12s, visibility 0s .12s;
  }
}
.acct-hd{ display:flex; align-items:center; gap:11px; padding:15px 16px 13px; border-bottom:1px solid var(--surface-2); }
.acct-who{ min-width:0; display:flex; flex-direction:column; gap:2px; }
.acct-who strong{
  font-size:14px; font-weight:800; color:var(--fg); letter-spacing:-.2px; line-height:1.35;
  /* 긴 업체명: 패널에서는 2줄까지 랩 후 말줄임(칩은 132px 한 줄 말줄임 + title 툴팁) */
  display:-webkit-box; -webkit-line-clamp:2; -webkit-box-orient:vertical;
  overflow:hidden; white-space:normal; word-break:break-all;
}
.acct-who span{ font-size:12px; color:var(--fg-muted); overflow:hidden; text-overflow:ellipsis; white-space:nowrap; }
.acct-meta{ padding:10px 16px; border-bottom:1px solid var(--surface-2); display:flex; flex-direction:column; gap:7px; }
.acct-m{ display:flex; align-items:center; justify-content:space-between; gap:10px; min-height:22px; }
.acct-m .k{ font-size:12px; font-weight:600; color:var(--fg-muted); flex:none; }
.acct-m .v{ display:inline-flex; align-items:center; gap:6px; font-size:12.5px; font-weight:700; color:var(--fg); font-variant-numeric:tabular-nums; }
.acct-badge{ display:inline-flex; align-items:center; height:22px; padding:0 9px; border-radius:var(--r-full); background:var(--surface-2); color:var(--fg-sub); font-size:11.5px; font-weight:800; }
.acct-badge--pri{ background:var(--band-ic-bg); color:var(--brand); }
.acct-dday{ font-style:normal; font-size:11px; font-weight:800; color:var(--fg-sub); background:var(--surface-2); border-radius:var(--r-full); padding:2px 7px; }
.acct-dday.hot{ color:#b42318; background:#fdeeed; }
/* 만료 임박(D-7 이하)·만료: 연장 유도 배너 — 결제 전환 패턴 */
.acct-renew{
  display:flex; align-items:center; justify-content:space-between; gap:8px;
  margin-top:3px; padding:9px 12px; border-radius:10px;
  background:#fdeeed; color:#b42318; font-size:12px; font-weight:700;
  transition:background var(--dur-1) var(--ease);
}
.acct-renew .a{ flex:none; display:inline-flex; align-items:center; gap:4px; font-weight:800; white-space:nowrap; }
.acct-renew .a svg{ width:13px; height:13px; }
.acct-renew:hover{ background:#fbdcda; }
/* 회원 등급별 주 작업 공간 바로가기(분석실/분석지원/나의입찰) — 헤더 CTA 를 패널 안으로 이동 */
.acct-go{ padding:12px 14px; border-bottom:1px solid var(--surface-2); }
.acct-cta{
  display:flex; align-items:center; justify-content:center; gap:7px; height:40px;
  border-radius:10px; background:var(--brand); color:var(--on-brand);
  font-size:13.5px; font-weight:800; box-shadow:0 3px 10px rgba(202,17,17,.22);
  transition:background var(--dur-1) var(--ease), transform var(--dur-1) var(--ease), box-shadow var(--dur-1) var(--ease);
}
.acct-cta svg{ width:14px; height:14px; transition:transform var(--dur-2) var(--ease-spring); }
.acct-cta:hover{ background:var(--brand-dark); box-shadow:0 5px 14px rgba(202,17,17,.3); transform:translateY(-1px); }
.acct-cta:hover svg{ transform:translateX(2px); }
.acct-cta:active{ transform:translateY(0); box-shadow:none; }
.acct-menu{ padding:6px; display:flex; flex-direction:column; }
.acct-menu a{
  display:flex; align-items:center; gap:8px; min-height:38px;
  /* 좌측 여백을 그룹 라벨('빠른메뉴')보다 한 단 더 들여쓴다 — 항목이 라벨에 종속된
     하위 목록이라는 게 들여쓰기로 드러난다(라벨과 같은 선에 있으면 나란한 형제로 읽힌다). */
  padding:0 10px 0 20px;
  border-radius:9px; font-size:13px; font-weight:600; color:var(--fg-sub);
  transition:background var(--dur-1) var(--ease), color var(--dur-1) var(--ease);
}
/* 메뉴 그룹 라벨(나의 업무 / 계정 관리) */
.acct-gl{ margin:7px 10px 2px; font-size:10.5px; font-weight:800; letter-spacing:.05em; color:var(--fg-muted); }
.acct-gl:first-child{ margin-top:3px; }
.acct-menu a:hover, .acct-menu a:focus-visible{ background:var(--surface); color:var(--fg); }
.acct-up{ margin-left:auto; font-size:10.5px; font-weight:800; color:var(--brand); background:var(--band-ic-bg); border-radius:var(--r-full); padding:2px 8px; }
.acct-ft{ padding:6px; border-top:1px solid var(--surface-2); }
.acct-logout{
  display:flex; align-items:center; gap:8px; min-height:38px; padding:0 10px;
  border-radius:9px; font-size:13px; font-weight:700; color:var(--fg-sub);
  transition:background var(--dur-1) var(--ease), color var(--dur-1) var(--ease);
}
.acct-logout svg{ width:15px; height:15px; }
.acct-logout:hover, .acct-logout:focus-visible{ background:#fdeeed; color:#b42318; }

/* ---- 2단 Menu Bar ---- */
/* 모바일 전용 컨트롤(검색 아이콘·검색 취소): 데스크톱 기본 숨김 → ≤1024 에서 노출 */
.srch-btn, .srch-close{ display:none; }
/* 하단 고정 탭바(패턴C): 데스크톱 기본 숨김 → ≤1024 에서 노출(renewal/_footer.php) */
.tabbar{ display:none; }

.t2{position:relative; height:48px; border-top:1px solid var(--bd); transition:height var(--dur-spring) var(--ease-spring),border-top-color var(--dur-spring) var(--ease-spring)}
.t2--anim{overflow:clip}
.hdr--fold .t2{height:0; border-top-color:transparent; border-bottom:0}
.hdr--fold .mega { top: 100%; }

.nav-item.open > .mega {
  visibility: visible;
  opacity: 1;
  transform: translateY(0);
  transition:
    opacity 0.16s cubic-bezier(0.16, 1, 0.3, 1),
    transform 0.16s cubic-bezier(0.16, 1, 0.3, 1),
    visibility 0s 0s;
}
.t2-in{height:47px; transition:transform var(--dur-spring) var(--ease-spring),opacity var(--dur-spring) var(--ease-spring)}
.hdr--fold .t2-in{transform:translateY(-100%); opacity:0}
.hdr--fold .t2:focus-within {height:48px; border-top-color:var(--bd)}
.hdr--fold .t2:focus-within .t2-in{transform:none; opacity:1}
.rnw-gnb{height:100%}
.gnb-list{display:flex; align-items:stretch; height:100%; margin-left:calc(var(--sp4) * -1); width:100%}
.nav-item{position:relative; display:flex}
.nav-btn{
  position:relative; display:inline-flex; align-items:center; gap:6px; height:100%; padding:0 var(--sp4);
  font-size:14px; font-weight:700; color:var(--fg-sub); white-space:nowrap;
  transition:color var(--dur-1) var(--ease),background var(--dur-1) var(--ease);
}
.nav-btn::after{
  content:""; position:absolute; left:var(--sp4); right:var(--sp4); bottom:0; height:2px;
  border-radius:var(--r-full); background:var(--brand); opacity:0; transform:translateY(3px);
  transition:opacity var(--dur-2) var(--ease-spring),transform var(--dur-2) var(--ease-spring);
}
.nav-btn:hover,.nav-item.open>.nav-btn{color:var(--fg)}
.nav-btn:hover::after,.nav-item.open>.nav-btn::after{opacity:1; transform:none}
.nav-btn:active{background:var(--surface-2)}

/* ---- 모두입찰AI (드랍다운 없는 단일 링크) ----
   GNB 우측 정렬의 기준점 — 이 항목이 남는 공간을 먹고, 전체메뉴가 그 뒤에 붙는다.
   nav-btn 의 밑줄 인디케이터 대신 필(pill)로 구분한다(메뉴가 아니라 목적지라서).
   ≤1024 에서는 .gnb-list > .nav-item:not(--mega) 규칙에 함께 숨는다(모바일은 하단 탭바). */
.nav-item--ai{margin-left:auto}
.nav-item--ai + .nav-item--mega{margin-left:0}
.nav-ai{
  gap:5px; height:32px; margin:auto 0; padding:0 13px;
  border-radius:var(--r-full); border:1px solid rgba(202,17,17,.18);
  color:var(--brand); background:var(--band-ic-bg);
  transition:color var(--dur-1) var(--ease),background var(--dur-1) var(--ease),border-color var(--dur-1) var(--ease);
}
.nav-ai::after{content:none}
.nav-ai .nav-ai-ic{color:inherit}
/* 부모까지 붙여 (0,3,0) — 같은 무게인 .nav-item.open>.nav-btn{color:var(--fg)} 보다 뒤에 있어
   이긴다. .open 은 renewal-chrome.js 가 드롭다운 항목에만 붙이도록 고쳤지만(패널 .dd 있는 것만),
   혹시 다시 붙더라도 필 색이 검정으로 새지 않도록 .open 케이스도 함께 잡아 둔다. */
.nav-item--ai > .nav-ai:hover,
.nav-item--ai.open > .nav-ai,
.nav-item--ai > .nav-ai[aria-current="page"]{color:var(--on-brand); background:var(--brand); border-color:var(--brand)}

/* position:static — .nav-item 의 relative 를 무효화해, absolute 메가가
   44px 짜리 li 가 아니라 .t2(전체 폭)에 앵커되게 한다(메가 안보임 버그 수정) */
.nav-item--mega{margin-left:auto; border-left:0; padding-left:0; position:static}
.nav-btn--mega svg {color:var(--fg); transition:color var(--dur-1) var(--ease), transform var(--dur-1) var(--ease)}
.nav-btn--mega:hover svg {color:var(--brand); transform:scale(1.05)}

/* ---- 드롭다운 UI ---- */
.dd {
  position: absolute; top: calc(100% + 12px); left: 0; min-width: 170px; z-index: 70;
  background: rgba(255, 255, 255, 0.95);
  -webkit-backdrop-filter: blur(20px) saturate(180%); backdrop-filter: blur(20px) saturate(180%);
  border: 1px solid rgba(0, 0, 0, 0.05); border-radius: var(--r3);
  box-shadow: 0 12px 32px rgba(17, 24, 39, 0.08), 0 4px 8px rgba(17, 24, 39, 0.03);
  padding: 8px; visibility: hidden; opacity: 0; translate: 0 8px;
  transition: opacity var(--dur-2) var(--ease-spring), translate var(--dur-2) var(--ease-spring), visibility 0s var(--dur-2);
}
/* [hover 브리지] 버튼↔패널 12px 갭만 덮는다. 이전 16px 는 헤더 행 안쪽까지 4px
   침범해, 열린 패널의 투명 브리지(z 70)가 이웃 버튼(모두입찰AI 등) 위 커서·클릭을
   가로채며 경계에서 열림/닫힘이 반복되는 깜빡임을 만들었다. */
.dd::before {content: ""; position: absolute; left: 0; right: 0; top: -12px; height: 12px}
.nav-item.open > .dd {visibility: visible; opacity: 1; translate: 0 0; transition-delay: 0s}
.dd a {
  display: flex; align-items: center; justify-content: space-between;
  padding: 10px 14px; border-radius: var(--r2);
  font-size: 14px; font-weight: 600; color: var(--fg-sub);
  /* 절대배치 shrink-to-fit 기준이 좁은 li 라 min-width(170px)에서 패널이 안 늘어난다.
     nowrap 으로 min-content 를 한 줄 폭으로 만들어 긴 항목(특허분석입찰컨설팅)에 맞게 넓힌다 */
  white-space: nowrap;
  transition: all var(--dur-1) var(--ease);
}
.dd a:hover {background: var(--surface); color: var(--brand); transform: translateX(4px)}

/* ---- 와이드 메가메뉴 ---- */
.mega {
  /* 비고정 헤더 기준: 뷰포트(fixed) 대신 .t2(position:relative) 하단에 앵커.
     스크롤 위치와 무관하게 항상 메뉴바 바로 아래에 붙는다. */
  position: absolute;
  left: 0;
  right: 0;
  width: 100%;
  top: 100%;
  z-index: 50;
  background: var(--canvas);
  border-bottom: 1px solid var(--bd);
  box-shadow: var(--sh-3);
  visibility: hidden;
  opacity: 0;
  transform: translateY(4px);
  transition:
    opacity 0.15s cubic-bezier(0.16, 1, 0.3, 1),
    transform 0.15s cubic-bezier(0.16, 1, 0.3, 1),
    visibility 0s 0.15s;
}
.hdr--fold .mega { top: 100%; }
.nav-item.open>.mega{visibility:visible; opacity:1; translate:0 0;}
.mega-in{display:grid; grid-template-columns:repeat(8,1fr) 200px; gap:var(--sp5); padding-block:var(--sp6) var(--sp7)}

/* [혜택 열] 메가 우측 프로모 트랙(9번째) — 링크 목록이 아니라 전환 카드 + SNS */
.mega-promo{display:flex; flex-direction:column; gap:10px; padding-left:18px; border-left:1px solid #edf0f5}
.mp-card{display:block; padding:12px 14px; border-radius:11px; border:1px solid #ecdcdc; background:#fdf7f7;
  text-decoration:none; transition:border-color var(--dur-1) var(--ease)}
.mp-card b{display:flex; align-items:center; gap:6px; font-size:13px; font-weight:800; color:#c0392b}
.mp-card span{display:block; margin-top:3px; font-size:11.5px; line-height:1.5; color:#8a7676}
.mp-card:hover{border-color:#d64545}
.mp-sns{display:flex; gap:8px; margin-top:2px}
.mp-sns a{display:inline-flex; align-items:center; justify-content:center; width:30px; height:30px; border-radius:8px;
  border:1px solid #dbe1ea; background:#fff; color:#5b6b86; transition:color var(--dur-1) var(--ease), border-color var(--dur-1) var(--ease)}
.mp-sns a:hover{color:#c0392b; border-color:#e0a3a3}
/* [도구 레일] 메가 하단 계산기·자료 모음(전 열 가로 스팬) */
.mega-tools{grid-column:1/-1; display:flex; flex-wrap:wrap; gap:8px; align-items:center;
  padding-top:14px; border-top:1px solid #edf0f5}
.mega-tools .mt-t{font-size:12px; font-weight:800; color:#8a93a2; margin-right:2px}
.mega-tools a{display:inline-flex; align-items:center; height:32px; padding:0 13px; border-radius:999px;
  border:1px solid #dbe1ea; background:#fff; font-size:12.5px; font-weight:700; color:#4a5568; text-decoration:none;
  transition:border-color var(--dur-1) var(--ease), color var(--dur-1) var(--ease)}
.mega-tools a:hover{border-color:#e0a3a3; color:#c0392b}
/* 외부(나라장터 등) 링크 표식 */
.ext-mark{margin-left:4px; font-size:10px; color:#9aa3b2}
/* 푸터 SNS(유튜브·인스타그램·페이스북) */
.ftr-sns{display:flex; gap:8px; margin:10px 0 2px}
.ftr-sns a{display:inline-flex; align-items:center; justify-content:center; width:32px; height:32px; border-radius:8px;
  border:1px solid var(--l-line); color:var(--l-mut); transition:color var(--dur-1) var(--ease), border-color var(--dur-1) var(--ease)}
.ftr-sns a:hover{color:var(--l-ink); border-color:#c8cfda}

/* ============================================================
   상위 1% 초프리미엄 메가 메뉴 호버 인터랙션 (Fluid Indicator)
   ============================================================ */
.mega-col a {
  position: relative;
  display: flex;
  align-items: center;
  padding: 8px 12px;
  margin-left: -12px;
  font-size: var(--fs-sm);
  font-weight: 500;
  color: var(--fg-sub);
  border-radius: var(--r1);
  transition: color 0.22s var(--ease), padding-left 0.22s var(--ease);
}
.mega-col a:hover {
  color: var(--brand);
  padding-left: 22px;
}
.mega-col a::before {
  content: "";
  position: absolute;
  left: 6px;
  top: 50%;
  transform: translateY(-50%) scaleY(0);
  width: 2px;
  height: 12px;
  background-color: var(--brand);
  opacity: 0;
  transform-origin: center;
  transition: transform 0.22s var(--ease), opacity 0.22s var(--ease);
}
.mega-col a:hover::before {
  opacity: 1;
  transform: translateY(-50%) scaleY(1);
}
.mega-col .mega-col-title {
  display: flex;
  align-items: baseline;
  gap: 9px;
  font-size: 14px;
  font-weight: 800;
  color: var(--fg);
  letter-spacing: var(--ls-tight);
  padding-bottom: var(--sp2);
  margin-bottom: var(--sp2);
  border-bottom: 1px solid var(--bd);
}
.mega-col .mega-col-title .idx {
  font-family: var(--font-mono);
  font-size: 12px;
  font-weight: 700;
  color: var(--brand);
  flex: none;
}


.hdr {
  /* [V2 비고정] 상단 정의(파일 앞부분 .hdr 주석 참조)와 동기화 — sticky 금지 */
  position: relative; z-index: 300;
  background: rgba(248, 249, 250, 0.8);
  -webkit-backdrop-filter: blur(20px) saturate(180%); backdrop-filter: blur(20px) saturate(180%);
  border-bottom: 1px solid rgba(0, 0, 0, 0.03);
  box-shadow: var(--shadow-glass);
  letter-spacing: var(--ls-tight); font-weight: 500;
}

/* ============================================================
   ★ [완벽 수정] 상위 1% 초프리미엄 전체화면 폭 푸터 마감
   ============================================================ */
.ftr {
  width: 100%;
  background: var(--l-card);
  color: var(--l-ink);
  border-top: 1px solid var(--l-line); /* 이제 라인이 화면 양끝까지 시원하게 채워집니다 */
  padding-block: var(--sp8);
  color-scheme: light;
}
/* 내부 요소만 중앙 컨테이너 격리 배치 */
.ftr-in {
  max-width: var(--container);
  margin-inline: auto;
  padding-inline: var(--pad);
}
.ftr-top{display:flex; align-items:center; gap:var(--sp5); padding-bottom:var(--sp5); border-bottom:1px solid var(--l-line)}
.ftr-logo{font-size:18px; font-weight:800; color:var(--red-deep); letter-spacing:-.01em}
.ftr-logo .logo-sub{color:var(--l-mut)}
.ftr-nav{margin-left:auto; display:flex; align-items:center; gap:var(--sp4); font-size:var(--fs-sm)}
.ftr-nav a{color:var(--l-mut); padding:6px 2px; transition:color var(--dur-1) var(--ease)}
.ftr-nav a:hover{color:var(--l-ink)}
.ftr-nav a.strong{color:var(--l-ink); font-weight:700}
.ftr-legal{margin-top:var(--sp5); font-size:var(--fs-sm); color:var(--l-mut); font-style:normal; line-height:1.9}
.ftr-legal .sep{margin-inline:8px; opacity:.5}
.ftr-copy{margin-top:var(--sp4); font-family:var(--font-mono); font-size:var(--fs-xs); color:var(--l-mut)}
#gq:hover {
  background: rgba(0, 0, 0, 0.04);
  border-color: rgba(0, 0, 0, 0.08);
}
#gq:focus {
  outline: 0;
  background: var(--canvas);
  border-color: var(--brand);
  box-shadow: 0 0 0 4px rgba(202, 17, 17, 0.06), 0 4px 12px rgba(0, 0, 0, 0.03);
  width: 340px; /* 포커스 시 넓어지는 효과 */
}

/* ============================================================
   RESPONSIVE — full-page reflow to 320px  (bp: 1024 / 768 / 480)
   ============================================================ */

/* ---- <=1024: tablet/phone — 패턴A 단일 바(2단 제거, 로고 좌 + 검색·계정·버거 우) ---- */
@media (max-width:1024px){
  .gnb-list > .nav-item:not(.nav-item--mega){ display:none; }
  .nav-item--mega{ margin-left:auto; }

  /* 2단(t2)은 시각적으로 제거(높이 0). display:none 이 아닌 이유: .mega 패널이
     .t2(position:relative) 하단에 앵커되므로 렌더 트리에는 남아야 한다. */
  .t2{ height:0; border-top:0; }
  .t2-in{ height:0; min-height:0; }
  .t2, .t2--anim{ overflow:visible; } /* 스크롤 폴드의 overflow:clip 잔존 시 메가 클리핑 방지 */
  /* 스크롤 폴드 무효화(sticky 케이스 방어): t2-in transform/opacity 가 내부 .mega 를 숨김 */
  .hdr--fold .t2-in{ transform:none; opacity:1; }
  .hdr--fold .t2:focus-within{ height:0; border-top:0; }
  .nav-btn--mega{ display:none; }     /* 메가 토글은 하단 탭바 '전체' 탭이 대체 */
  .mega{ width:100%; max-height:calc(100dvh - 59px); overflow-y:auto; }
  /* 데스크톱 열(.mega-in)은 모바일 시트(.msheet)가 대체 — 통째로 숨김 */
  .mega-in{ display:none; }

  /* 1단 우측 그룹: [검색 아이콘][계정칩] — 전체메뉴는 하단 탭바로 이동(버거 제거) */
  .t1{ position:relative; }
  .search-wrap{ display:none; }
  .auth{ gap:6px; }
  .srch-btn{
    display:inline-flex; align-items:center; justify-content:center;
    width:42px; height:42px; border-radius:10px; color:var(--fg);
  }
  .srch-btn:active{ background:var(--surface-2); }
  .login-link--remote{ display:none; }          /* 원격지원: 메가메뉴 하단으로 */
  .acct-name, .acct-caret{ display:none; }      /* 계정: 아바타 칩만(업체명은 패널에서) */
  .acct-btn{ padding:3px; gap:0; }

  /* 검색 오버레이: 1단 전체를 덮는 검색바(자동 포커스, 취소/ESC/바깥탭 닫기) */
  .hdr.srch-open .search-wrap{
    display:block; position:absolute; inset:0; z-index:40; max-width:none;
    background:var(--canvas); padding:9px var(--pad);
  }
  .hdr.srch-open .search{ display:flex; align-items:center; gap:6px; height:100%; }
  .hdr.srch-open #gq{ flex:1 1 auto; min-width:0; height:40px; font-size:16px; }
  .hdr.srch-open .srch-close{
    display:inline-flex; align-items:center; flex:none;
    height:40px; padding:0 10px; font-size:14px; font-weight:600; color:var(--fg-sub);
  }

  .hero h1{ white-space:normal; } /* 769~1024 태블릿: nowrap 유지 시 우측 클리핑 */

  .bento{ grid-template-columns:repeat(2,1fr); }
  .bento > .card{ grid-column:auto; }
  .bento > .b12{ grid-column:1 / -1; }

  .quick-list{ grid-template-columns:repeat(auto-fill,minmax(96px,1fr)); }
}

/* ============================================================
   하단 고정 탭바 (패턴C · 앱형 내비게이션) — ≤1024 전용
   - 마크업: renewal/_footer.php  동작: renewal-chrome.js
   - 모바일에서 데스크톱 푸터를 숨기고 탭바로 대체(법적 표기는 메가 '전체' 안 유지).
   ============================================================ */
@media (max-width:1024px){
  /* 데스크톱 푸터 숨김 + 탭바 높이만큼 본문 하단 여백(콘텐츠 가림 방지) */
  .ftr{ display:none; }
  body{ padding-bottom:calc(58px + env(safe-area-inset-bottom, 0px)); }

  /* 레퍼런스(Center FAB): 순백 바 + 중앙 AI 디스크 둘레의 '진짜 커브(notch)'.
     바의 면·그림자를 ::before 로 옮기고 radial-gradient 마스크로 반원 홈을
     뚫는다 — 홈 틈으로 뒤 페이지가 그대로 비친다(디스크 테두리 눈속임 아님).
     마스크는 요소의 그림자까지 함께 잘라내므로 상단 그림자도 커브를 따라 끊긴다. */
  .tabbar{
    display:flex; position:fixed; left:0; right:0; bottom:0; z-index:350;
    height:calc(58px + env(safe-area-inset-bottom, 0px));
    padding-bottom:env(safe-area-inset-bottom, 0px);
    background:transparent;
    font-family:var(--font-sans);
  }
  /* 홈(notch) 절삭 마스크 — 5개 레이어의 합집합(모두 no-repeat):
       ① 좌측 사각 ② 우측 사각 ③ 중앙 120×44 SVG 타일(홈 곡선 본체)
       ④ 중앙 44px 아래 사각 ⑤ 바 위쪽 그림자 보존용(홈 입구만 원형 절개)
     ③ SVG: 홈 원 R36(중심: 바 상단선 아래 4px, 디스크와 동심·틈 8px)이
       바 상단 직선과 만나는 뾰족한 모서리를 반경 9px 접원 아크로 라운드.
       접원 중심 (60±44.72, 9): 상단선 접점 x=60±44.72, 홈 원 접점 (60±35.78, 8).
       고정폭 타일이라 화면 폭이 달라져도 곡선이 늘어나지 않는다. */
  .tabbar::before{
    content:""; position:absolute; top:0; left:0; right:0; bottom:0; z-index:-1;
    background:#fff;
    box-shadow:0 -6px 24px rgba(16,24,40,.08);
    -webkit-mask-image:
      linear-gradient(#000,#000),
      linear-gradient(#000,#000),
      url("data:image/svg+xml,%3Csvg%20xmlns='http://www.w3.org/2000/svg'%20viewBox='0%200%20120%2044'%3E%3Cpath%20fill-rule='evenodd'%20d='M0%200h120v44H0zM15.28%200a9%209%200%200%201%208.94%208a36%2036%200%200%200%2071.56%200a9%209%200%200%201%208.94-8z'/%3E%3C/svg%3E"),
      linear-gradient(#000,#000),
      radial-gradient(circle 36px at 50% 64px, transparent 34.5px, #000 36px);
    mask-image:
      linear-gradient(#000,#000),
      linear-gradient(#000,#000),
      url("data:image/svg+xml,%3Csvg%20xmlns='http://www.w3.org/2000/svg'%20viewBox='0%200%20120%2044'%3E%3Cpath%20fill-rule='evenodd'%20d='M0%200h120v44H0zM15.28%200a9%209%200%200%201%208.94%208a36%2036%200%200%200%2071.56%200a9%209%200%200%201%208.94-8z'/%3E%3C/svg%3E"),
      linear-gradient(#000,#000),
      radial-gradient(circle 36px at 50% 64px, transparent 34.5px, #000 36px);
    -webkit-mask-size:calc(50% - 60px) 100%, calc(50% - 60px) 100%, 120px 44px, 120px calc(100% - 44px), 100% 60px;
    mask-size:calc(50% - 60px) 100%, calc(50% - 60px) 100%, 120px 44px, 120px calc(100% - 44px), 100% 60px;
    -webkit-mask-position:left top, right top, center top, center bottom, 0 -60px;
    mask-position:left top, right top, center top, center bottom, 0 -60px;
    -webkit-mask-repeat:no-repeat;
    mask-repeat:no-repeat;
  }
  /* 상단 테두리 + 커브 경계선 일체화: 좌/우 1px 직선이 라운드 시작점
     (중앙 ±44.72px)에서 커브 스트로크와 끊김 없이 이어진다. 커브 패스는
     0.5px 내림 + 두께 1로 직선(y 0~1px)과 단면을 맞춤(틈은 계속 완전 투명) */
  .tabbar::after{
    content:""; position:absolute; top:0; left:0; right:0; bottom:0; z-index:-1;
    background:rgba(16,24,40,.16); pointer-events:none;
    -webkit-mask-image:
      linear-gradient(#000,#000),
      linear-gradient(#000,#000),
      url("data:image/svg+xml,%3Csvg%20xmlns='http://www.w3.org/2000/svg'%20viewBox='0%200%20120%2044'%3E%3Cpath%20fill='none'%20stroke='black'%20d='M15.28%20.5a9%209%200%200%201%208.94%208a36%2036%200%200%200%2071.56%200a9%209%200%200%201%208.94-8'/%3E%3C/svg%3E");
    mask-image:
      linear-gradient(#000,#000),
      linear-gradient(#000,#000),
      url("data:image/svg+xml,%3Csvg%20xmlns='http://www.w3.org/2000/svg'%20viewBox='0%200%20120%2044'%3E%3Cpath%20fill='none'%20stroke='black'%20d='M15.28%20.5a9%209%200%200%201%208.94%208a36%2036%200%200%200%2071.56%200a9%209%200%200%201%208.94-8'/%3E%3C/svg%3E");
    -webkit-mask-size:calc(50% - 44.72px) 1px, calc(50% - 44.72px) 1px, 120px 44px;
    mask-size:calc(50% - 44.72px) 1px, calc(50% - 44.72px) 1px, 120px 44px;
    -webkit-mask-position:left top, right top, center top;
    mask-position:left top, right top, center top;
    -webkit-mask-repeat:no-repeat; mask-repeat:no-repeat;
  }
  /* NOTE: 반드시 `.tabbar .tab` 로 스코프 — 메인 입찰정보 카드의 공사/용역/물품
     버튼도 `.tab` 클래스라, 비스코프 시 탭바 규칙이 번져 입찰 탭이 뚱뚱해짐 */
  .tabbar .tab{
    /* [정렬] '전체' 탭만 <button> 이라 브라우저 기본 padding(좌우 6px)이 붙어 그 칸만
       12px 넓어졌고, 그만큼 탭 경계가 밀려 중앙 AI 탭의 중심이 바 중심보다 6px 왼쪽으로
       갔다(노치 홈은 바 정중앙 고정이라 디스크가 홈에서 어긋나 보였다).
       다섯 칸을 같은 상자로 맞춘다. */
    box-sizing:border-box; padding:0;
    flex:1 1 0; min-width:0; height:58px;
    display:flex; flex-direction:column; align-items:center; justify-content:center; gap:3px;
    color:var(--fg-muted); font-size:11px; font-weight:600; letter-spacing:-.02em;
    text-decoration:none; background:none; border:0; cursor:pointer;
    -webkit-tap-highlight-color:transparent;
  }
  .tabbar .tab-ic{ width:24px; height:24px; display:flex; align-items:center; justify-content:center; }
  .tabbar .tab-ic svg{ width:23px; height:23px; }
  /* [검수 B-02] 360px 에서 '입찰정보'·'투찰결과'가 2줄로 꺾이던 것 — 전역
     overflow-wrap:anywhere 가 좁은 탭에서 낱말을 쪼갠다. 라벨은 항상 한 줄. */
  .tabbar .tab-lb{ line-height:1; white-space:nowrap; }
  .tabbar .tab:active{ background:var(--surface); }
  .tabbar .tab.is-active{ color:var(--brand); }
  .tabbar .tab.is-active .tab-ic svg{ stroke:var(--brand); }

  /* 중앙 AI: notch 홈 안에 뜬 레드 디스크 (글로우 없는 중립 그림자 —
     바와의 분리는 흰 링이 아니라 notch 의 실제 틈이 담당)
     NOTE: flex 중앙정렬은 음수 마진을 절반만 반영해 부양량이 어긋난다 — 절대배치로 고정.
     디스크 중심(top:-24px + r28 = 바 상단선 아래 4px)은 위 마스크 홈 중심과 동심. */
  .tabbar .tab--ai{ position:relative; overflow:visible; }
  .tabbar .tab--ai .tab-ai{
    position:absolute; left:50%; top:-24px; transform:translateX(-50%);
    display:flex; align-items:center; justify-content:center;
    width:56px; height:56px; border-radius:50%;
    background:linear-gradient(180deg, #dd1f1f, var(--brand) 58%, #b50e0e);
    color:#fff; font-weight:800; font-size:16px; letter-spacing:.02em;
    /* 그림자 번짐 축소 — notch 틈에 그림자가 스며들면 '뒤 배경 그대로'가 깨진다 */
    box-shadow:0 5px 12px rgba(16,24,40,.14), 0 1px 3px rgba(16,24,40,.08);
    transition:transform .16s var(--ease);
  }
  .tabbar .tab--ai:active .tab-ai{ transform:translateX(-50%) scale(.94); }
  /* 탭 공통 :active 회색 플래시가 notch 틈을 사각형으로 메우지 않도록 */
  .tabbar .tab--ai:active{ background:transparent; }

  /* AI 준비중 토스트(탭바 위 중앙) — 디스크가 -26px 로 더 떠오르므로 그 위로 */
  .tabbar-toast{
    position:fixed; left:50%; bottom:calc(94px + env(safe-area-inset-bottom, 0px));
    transform:translateX(-50%) translateY(6px);
    background:rgba(33,43,60,.95); color:#fff; font-size:12.5px; font-weight:600;
    padding:9px 16px; border-radius:9px; box-shadow:0 8px 24px rgba(20,30,50,.28);
    z-index:360; opacity:0; visibility:hidden; pointer-events:none;
    transition:opacity .18s var(--ease), transform .18s var(--ease);
  }
  .tabbar-toast.show{ opacity:1; visibility:visible; transform:translateX(-50%) translateY(0); }
}

/* ---- <=768: phone — single column, header + hero tightened ---- */
@media (max-width:768px){
  :root{ --pad:20px; }
  .t1-in{ gap:16px; }
  .search-wrap{ max-width:none; }

  .hero{ min-height:0; padding-block:44px; }
  .hero-content{ padding:0 20px; }
  .hero h1{ white-space:normal; font-size:clamp(24px,6.4vw,40px); line-height:1.2; margin-bottom:26px; }
  .chat-window{ height:150px; padding:18px 16px; }

  .bento{ grid-template-columns:1fr; }
  .bento > .card, .bento > .b12{ grid-column:1 / -1; }

  .svc-grid{ grid-template-columns:repeat(2,1fr); }

  .ftr-top{ flex-direction:column; align-items:flex-start; gap:var(--sp3); }
  .ftr-nav{ margin-left:0; flex-wrap:wrap; gap:var(--sp3); row-gap:4px; }
  .ftr-legal{ line-height:1.8; }
}


/* ---- <=480: small phone — declutter, guarantee 320px ---- */
@media (max-width:480px){
  :root{ --pad:16px; }
  /* 검색·계정칩·버거는 ≤1024 패턴A 블록에서 처리 — 여기선 소형 폰 밀도만 조정 */
  .t1-in{ gap:8px; }
  .logo{ gap:0; }
  #gq{ font-size:16px; padding-left:34px; }   /* 16px = iOS 자동확대 방지(검색 오버레이) */
  .search-ic{ left:11px; }
  .login-link{ padding:0 4px; font-size:13px; }
  .acct-panel{ width:min(300px, calc(100vw - 24px)); max-height:calc(100dvh - 76px); overflow-y:auto; }
  .cta{ padding:0 12px; }

  .hero h1{ font-size:clamp(22px,7.4vw,32px); margin-bottom:22px; }
  .chat-window{ padding:16px 14px; height:158px; }
  .msg.user{ max-width:92%; }
  .msg.ai{ max-width:100%; }

  .app-list-2col{ grid-template-columns:1fr; }
  .svc-grid{ grid-template-columns:repeat(2,1fr); }
  .cs-wrap{ flex-direction:column; align-items:flex-start; }
  .cs-actions{ width:100%; min-width:0; }
}

/* ============================================================
   모바일 전체메뉴 시트(.msheet) — ≤1024 에서 .mega-in 을 대체
   (설계: docs/모바일_전체메뉴_설계.md · 검색→계정→바로가기4→아코디언→도구→혜택)
   데스크톱은 display:none → 무변화. 열기/닫기는 기존 setMega 가 담당.
   ============================================================ */
.msheet{ display:none; }
@media (max-width:1024px){
  .msheet{ display:block; background:#f7f8fa; padding:14px 16px calc(84px + env(safe-area-inset-bottom, 0px)); }
  .ms-hd{ display:flex; align-items:center; justify-content:space-between; padding:2px 0 12px; }
  .ms-hd b{ font-size:17px; color:#1b2434; }
  .ms-x{ display:grid; place-items:center; width:34px; height:34px; border-radius:50%; border:1px solid #e4e9f2; background:#fff; color:#5b6b86; cursor:pointer; }
  .ms-search{ display:flex; align-items:center; gap:9px; height:46px; padding:0 6px 0 14px; background:#fff; border:1.5px solid #e4e9f2; border-radius:12px; margin-bottom:14px; color:#8a93a2; }
  .ms-search input{ flex:1 1 auto; min-width:0; border:0; outline:none; background:transparent; font:inherit; font-size:16px; color:#1b2434; }
  .ms-search button{ flex:0 0 auto; height:36px; padding:0 15px; border:0; border-radius:9px; background:var(--brand); color:#fff; font:inherit; font-size:13px; font-weight:700; cursor:pointer; }
  .ms-acct{ display:flex; align-items:center; gap:11px; background:#fff; border:1px solid #e4e9f2; border-radius:14px; padding:13px 15px; margin-bottom:14px; }
  .ms-acct .acct-avatar{ width:40px; height:40px; font-size:16px; }
  .ms-nm{ min-width:0; }
  .ms-nm b{ display:block; font-size:14.5px; color:#1b2434; overflow-wrap:anywhere; }
  .ms-nm span{ display:block; font-size:11.5px; color:#8a93a2; overflow-wrap:anywhere; }
  .ms-grade{ margin-left:auto; flex:0 0 auto; padding:4px 10px; border-radius:999px; background:#fdf0f0; color:#c0392b; font-size:11px; font-weight:800; }
  .ms-acct--out{ gap:10px; }
  .ms-btn-line,.ms-btn-fill{ flex:1; display:flex; align-items:center; justify-content:center; height:42px; border-radius:11px; font-size:14px; font-weight:700; text-decoration:none; }
  .ms-btn-line{ border:1px solid #e0c9c9; color:#c0392b; background:#fff; }
  .ms-btn-fill{ background:var(--brand); color:#fff; }
  .ms-quick{ display:grid; grid-template-columns:repeat(4,1fr); background:#fff; border:1px solid #e4e9f2; border-radius:14px; padding:13px 6px 11px; margin-bottom:14px; }
  .ms-quick a{ display:flex; flex-direction:column; align-items:center; gap:6px; text-decoration:none; }
  .ms-quick .qi{ display:grid; place-items:center; width:44px; height:44px; border-radius:13px; background:#f4f6fa; color:#4a5568; }
  .ms-quick .qi--ai{ background:#fdf0f0; color:#c0392b; }
  .ms-quick a > span:last-child{ font-size:11px; font-weight:700; color:#33405a; letter-spacing:-.2px; }
  .ms-sec{ background:#fff; border:1px solid #e4e9f2; border-radius:14px; overflow:hidden; margin-bottom:14px; }
  .ms-acc{ border-top:1px solid #f0f3f8; }
  .ms-acc:first-child{ border-top:0; }
  .ms-acc-h{ display:flex; align-items:center; gap:9px; width:100%; height:52px; padding:0 15px; border:0; background:transparent; font:inherit; font-size:14px; font-weight:800; color:#1b2434; cursor:pointer; text-align:left; }
  .ms-acc-h .no{ font-size:11px; font-weight:800; color:#c9d0da; font-variant-numeric:tabular-nums; }
  .ms-acc-h .ar{ margin-left:auto; color:#b6bfcc; transition:transform .18s var(--ease); }
  .ms-acc.open .ms-acc-h .ar{ transform:rotate(180deg); }
  .ms-acc-b{ display:none; padding:2px 8px 10px; }
  .ms-acc.open .ms-acc-b{ display:block; }
  .ms-acc-b a{ display:flex; align-items:center; min-height:46px; padding:0 12px; border-radius:10px; font-size:14px; color:#33405a; text-decoration:none; }
  .ms-acc-b a:active{ background:#f6f8fb; }
  html:not(.js) .ms-acc-b{ display:block; }   /* JS 실패 시 전부 펼침(fail-open) */
  .ms-tools{ margin-bottom:14px; }
  .ms-tools .mt-t{ display:block; padding:0 0 8px; font-size:12px; font-weight:800; color:#8a93a2; }
  .ms-tools .row{ display:flex; gap:8px; overflow-x:auto; padding-bottom:4px; scrollbar-width:none; }
  .ms-tools .row::-webkit-scrollbar{ display:none; }
  .ms-tools .row a{ flex:0 0 auto; display:inline-flex; align-items:center; height:38px; padding:0 15px; border-radius:999px; background:#fff; border:1px solid #dbe1ea; font-size:12.5px; font-weight:700; color:#4a5568; text-decoration:none; white-space:nowrap; }
  .ms-promo{ display:flex; gap:10px; margin-bottom:12px; }
  .ms-promo .mp-card{ flex:1; }
  .ms-sns{ display:flex; gap:10px; justify-content:center; }
  /* [v5.1] 시트 로그아웃 — 하단 맨텍스트(.ms-logout)에서 계정 카드 안 칩 버튼으로 이동(대표 지시).
     등급 배지 옆, 같은 크기감의 아웃라인 필. */
  .ms-out{ flex:0 0 auto; display:inline-flex; align-items:center; gap:5px; height:30px; padding:0 11px;
    border:1px solid #e0c9c9; border-radius:999px; background:#fff;
    font-size:11.5px; font-weight:700; color:#c0392b; text-decoration:none; white-space:nowrap; }
  .ms-out:active{ background:#fdf0f0; }
  .ms-sns a{ display:grid; place-items:center; width:36px; height:36px; border-radius:10px; background:#fff; border:1px solid #dbe1ea; }
}

/* 메가메뉴 열림 시 배경 스크롤 잠금(H2) — JS(renewal-chrome.js)가 <html>에
   .mega-lock 을 토글. 모바일(≤1024)에서만 적용 → 데스크톱 무변화. */
@media (max-width:1024px){
  html.mega-lock{ overflow:hidden; }
  /* [FIX] 시트가 열린 동안에는 헤더의 backdrop-filter 를 끈다.
     filter/backdrop-filter 가 걸린 요소는 CSS 명세상 position:fixed 자손의 기준점
     (containing block)이 된다. .hdr 는 비고정이라 스크롤과 함께 문서 위로 올라가는데,
     .mega 가 그 안에 있어서 페이지 바닥에서 시트를 열면 top:0 이 '뷰포트 위'가 아니라
     '문서 최상단'을 가리켰다 — 시트가 화면 밖에 열리고 배경 스크롤은 잠겨 아무것도
     안 되는 것처럼 보였다. 시트가 화면을 덮는 동안이라 블러를 꺼도 보이는 손실은 없다. */
  html.mega-lock .hdr{ -webkit-backdrop-filter:none; backdrop-filter:none; }
}

/* 초소형 폰(≤360): CTA/로그인 밀도 축소로 검색 입력폭 확보 */
@media (max-width:360px){
  .cta{ padding:0 10px; font-size:12.5px; }
  .login-link{ font-size:12.5px; padding:0 2px; }
  .acct-avatar{ width:28px; height:28px; font-size:12.5px; }
  .acct-avatar--lg{ width:38px; height:38px; font-size:16px; }
}

/* ============================================================
   모바일(≤768) 크롬 정책: 원격지원 숨김 · 메가 데이터분석 숨김(+자동 넘버링) · 푸터 축약
   ============================================================ */
@media (max-width:768px){
  /* 원격지원: 모바일 상단바에서 제외(메가메뉴 하단 링크도 함께 제외) */
  .login-link--remote{ display:none !important; }
  .mega-auth a[href*="helpu"]{ display:none; }

  /* 메가메뉴: 데이터분석(패스파인더) 열도 모바일에 정상 명도로 노출.
     PC 전용 항목은 숨기거나 흐리지 않고 'PC 전용' 배지(_header 인라인 스타일)로 알린다. */

  /* 푸터: 모바일은 회사정보·카피만 축약 노출(내비 링크 숨김) */
  .ftr-nav{ display:none; }
  .ftr-in{ padding:22px 16px 26px; }
  .ftr-top{ margin-bottom:10px; }
  .ftr-legal{ font-size:11.5px; line-height:1.7; }
  .ftr-copy{ font-size:11px; }
}

/* ===== [#15] style.css(수정금지) 전역 리셋의 vertical-align:middle 무력화 =====
   원본: a,span,td,th,... { vertical-align:middle } 가 요소 직격(0,0,1)이라
   인라인 강조 span/a 가 baseline 에서 들려 한 줄 안에서 글자가 어긋난다(숫자·배지·괄호 등).
   같은 특이도(0,0,1)로 뒤에서 재정의해 전 페이지에서 baseline 으로 되돌린다.
   - 대상은 '인라인 텍스트' 요소로 한정: img·svg·i·input·td·th 는 제외해
     아이콘/폼/표 셀의 기존 세로정렬(중앙)은 그대로 유지한다.
   - 개별 컴포넌트가 vertical-align 을 클래스로 지정한 곳은 특이도가 높아 그대로 우선한다. */
a,span,font,b,em,strong,small,mark,label,big,cite,code,q,s,strike,u,tt,var,ins,del,abbr,acronym,dfn,samp,kbd,output,time,ruby{vertical-align:baseline}

/* ===== 헤더 로고 텍스트 — 전역 리셋(span{font-size:12px;color:#232323}) 역전 =====
   style.css 1행 리셋이 span 을 '요소 선택자'로 직격해 .logo{font-size:17px} 의 상속을 이긴다
   (상속은 우선순위가 없음). 로고 안쪽 텍스트만 부모 값을 따르도록 명시한다. */

/* [로고 개편] 신규 브랜드 락업(h-kr) — GNB 로고를 단일 이미지로. 헤더 행 높이에 맞춘 28px */
/* 32px = 0032 원본과 1:1 (2x는 0064 정확히 2:1) — 비정수 축소로 한글 획이 뭉개지는 것 방지.
   호버도 transform 대신 opacity — rotate/scale 재래스터화가 글자를 흐리게 만든다 */
.logo-lockup{height:32px;width:auto;display:block;transition:opacity .15s ease}
.logo:hover .logo-lockup{opacity:.82}

/* ============================================================
   [전역 리셋 역전] 아이콘 색 — 부모 글자색을 따르게
   ============================================================
   style.css 1행의 리셋이 i 요소에 color:#232323 을 직접 지정한다.
   직접 지정은 상속을 이기므로, 브랜드색 버튼·배지 안의 흰 아이콘이 검게 나온다
   (상담접수 '상담접수' 버튼의 종이비행기 아이콘 등).
   아이콘은 언제나 부모 글자색을 따라야 하므로 여기서 되돌린다.
   !important 는 쓰지 않는다 — 아이콘만 일부러 다른 색을 준 규칙
   (.guide .gt i{color:var(--pri)} 등)이 계속 이겨야 하기 때문이다. */
button i, a i, label i, summary i,
[class*="btn"] i, [class*="Btn"] i,
[class*="badge"] i, [class*="chip"] i, [class*="tab"] i, [class*="pill"] i{ color: inherit; }

/* [모바일] 페이지가 좌우로 밀리지 않게 — 넓은 표·고정폭이 남아 있어도 문서 자체는 가로 스크롤하지 않는다.
   표 등 내부 스크롤 컨테이너(overflow-x:auto)는 그대로 동작한다.
   V2 전용 파일이라 라이브 화면에는 영향이 없고, V2 헤더는 position:relative(비고정),
   사이드바 sticky 는 모바일에서 static 이라 sticky 부작용도 없다. */
@media (max-width:820px){
  html, body{ overflow-x:hidden; max-width:100%; }
  /* [2026-08-19] overflow-x:hidden 은 **스크롤 컨테이너를 만든다.**
     그러면 그 안의 position:sticky 가 조용히 죽는다 —
     모바일에서 [상단고정 켜기] 를 눌러도 아무 일이 없던 이유가 이것이다.
     clip 은 같은 잘라내기를 하면서 스크롤 컨테이너를 만들지 않아 sticky 가 산다.
     지원하지 않는 구형 웹뷰에서는 위 hidden 이 그대로 남아 가로 넘침만 막는다. */
  @supports (overflow-x: clip){
    html, body{ overflow-x:clip; }
  }
}


/* ============================================================
   V2 시맨틱 복구 — 구 style.css 1행 리셋이 죽인 HTML 기본 의미를 되살린다
   ============================================================
   style.css(수정금지) 1행:
     a,abbr,…,video{ margin:0; padding:0; border:0; font-size:100%;
                     font:inherit; vertical-align:middle; font-size:12px; color:#232323 }
   ~70개 태그를 '요소 선택자'로 직격하므로 상속으로는 이길 수 없다. 결과:
     · font:inherit        → strong·b·th·h1~h6 의 굵기(700)와 em·i 의 기울임이 사라진다
     · vertical-align:middle → sub·sup 의 아래/위 첨자 위치가 완전히 무효가 된다
     · font-size:12px      → 모든 글자가 12px 로 고정된다
   그동안 V2 페이지마다 개별로 되돌려 왔는데(20곳 이상), 새 페이지를 만들 때마다
   같은 함정을 다시 밟게 되므로 여기서 한 번에 정리한다.

   범위: body.v2 (head_v2.php 로 렌더되는 V2 페이지) 안에서만.
        라이브 페이지에는 클래스가 없어 영향이 없고, style.css 를 로드하지 않는
        메인·/mdai 는 애초에 이 문제가 없다.

   [일부러 복구하지 않는 것] font-size 와 color.
     V2 페이지 전체가 12px 기준으로 레이아웃이 잡혀 있어, 브라우저 기본 크기를
     되살리면 기존 화면이 모두 어긋난다. 크기·색은 지금처럼 각 컴포넌트가 명시한다.
   ============================================================ */

/* [특이도 설계] 모든 복구 규칙은 정확히 (0,0,1) — style.css 의 요소 리셋과 같은 무게다.
   renewal-chrome.css 가 style.css 다음에 로드되므로 동점이면 이쪽이 이기고,
   각 페이지가 클래스로 지정한 값(0,1,0 이상)에는 진다. 즉 '리셋만 되돌리고
   디자인은 건드리지 않는다'. :where() 는 특이도 0 이라 body.v2 스코프가 무게를 더하지 않는다.
   (처음엔 body.v2 strong 으로 썼다가 (0,1,1) 이 되어 페이지가 지정한 font-weight:800 까지
    덮어써서 오히려 얇아지는 회귀를 만들었다.) */

/* [예외 — hidden 속성] 위 규칙들과 달리 이 한 줄만 !important 로 강제한다.
   style.css 에는 1행 리셋과 별개로 div{display:block;box-sizing:border-box} 가 있다.
   hidden 속성의 display:none 은 브라우저 기본(UA) 스타일에서 나오는데, 작성자 CSS 는
   특이도와 무관하게 UA 스타일을 항상 이긴다(오리진 우선순위). 즉 V2 에서 <div hidden> 은
   처음부터 아무 효과가 없었다 — 특이도를 조금 올린다고 되는 문제가 아니라서 !important 로 못박는다.

   증상: 서버가 hidden 으로 접어 둔 패널이 클릭 전부터 화면에 보이고, JS 가 el.hidden=true 를
   걸어도 아무 변화가 없어 사용자에게는 '닫기 버튼이 안 눌린다'로 나타난다
   (입찰캘린더 일정 패널 신고 건의 원인). 그동안 searchV2·bapV2·bid_newV2·_lv5modal·
   infoAvgRateV2 등에서 화면마다 [hidden] 규칙을 덧대 막아 왔지만 새 화면을 만들 때마다
   같은 함정을 다시 밟으므로 여기서 한 번에 끝낸다. 각 페이지의 기존 규칙은 남겨 둬도 무해하다.

   hidden="until-found" 만 제외한다 — 브라우저 찾기(Ctrl+F)가 펼쳐야 하는 접힌 영역이라
   display:none 으로 못박으면 그 기능이 죽는다.
   aria-hidden 은 이름이 다른 속성이라 이 선택자에 걸리지 않는다(장식 아이콘 영향 없음). */
body.v2 [hidden]:not([hidden="until-found"]){ display:none !important; }

/* 굵기 — <strong>/<b> 가 굵지 않던 문제, 표 헤더가 본문과 같아 보이던 문제.
   strong·b 는 700 이 아니라 bolder: font:inherit 탓에 지금까지 부모 굵기를 물려받아 왔는데,
   700 으로 못박으면 부모가 800 인 자리에서 오히려 얇아진다. bolder 는 부모 기준 한 단계 위
   (400→700, 800→900)라 어디서도 주변보다 얇아지지 않는다. */
:where(body.v2) strong,
:where(body.v2) b{ font-weight:bolder; }
:where(body.v2) th{ font-weight:700; }
:where(body.v2) h1, :where(body.v2) h2, :where(body.v2) h3,
:where(body.v2) h4, :where(body.v2) h5, :where(body.v2) h6{ font-weight:700; }

/* 기울임 — <em>/<i> */
:where(body.v2) em,
:where(body.v2) i{ font-style:italic; }
/* 아이콘 용도의 <i class="fa …"> 는 글자가 아니다 — 기울이지 않고 세로 가운데가 맞다.
   속성 선택자로 (0,1,0) 이 되어 위 규칙을 이긴다. */
:where(body.v2) i[class]{ font-style:normal; vertical-align:middle; }

/* 첨자 — vertical-align:middle 이 sub/super 를 덮어써 완전히 깨져 있던 것 */
:where(body.v2) sub{ vertical-align:sub; }
:where(body.v2) sup{ vertical-align:super; }

/* 정렬 — 블록/구조 요소는 baseline 으로 되돌린다.
   (블록에서는 vertical-align 이 무효라 대부분 무해하지만, inline-block 으로 바뀌거나
    표 셀 안에 들어갈 때 middle 이 남아 있으면 한 줄씩 밀린다.)
   td·th 는 middle 이 실무상 맞으므로 제외하고, img 도 인라인 이미지 정렬을 위해 유지. */
:where(body.v2) div, :where(body.v2) p, :where(body.v2) li,
:where(body.v2) ul, :where(body.v2) ol, :where(body.v2) dl,
:where(body.v2) dt, :where(body.v2) dd, :where(body.v2) blockquote,
:where(body.v2) pre, :where(body.v2) form, :where(body.v2) fieldset,
:where(body.v2) figure, :where(body.v2) figcaption,
:where(body.v2) section, :where(body.v2) article, :where(body.v2) aside,
:where(body.v2) header, :where(body.v2) footer, :where(body.v2) nav, :where(body.v2) main,
:where(body.v2) h1, :where(body.v2) h2, :where(body.v2) h3,
:where(body.v2) h4, :where(body.v2) h5, :where(body.v2) h6,
:where(body.v2) table, :where(body.v2) tbody, :where(body.v2) thead,
:where(body.v2) tfoot, :where(body.v2) tr{ vertical-align:baseline; }

/* 크기·색 — style.css 가 ~70개 태그에 font-size:12px / color:#232323 을 직격해서,
   14px 문단 안의 <b> 만 12px 로 작아지거나 회색 문단 안의 <b> 만 검게 나오는 일이 잦았다.
   그동안 .cbv2 / #mlv2 에서 span·a·td·th·font·p·li 7종만 막아 왔는데, 새 페이지가
   쓰는 b·strong·em·small·label·dt·dd·div·h2 … 는 그대로 걸렸다(대표 지적: corpSrchV2).

   [기본값 복원이 아니라 '상속'이다] 브라우저 기본 크기로 되돌리면 12px 기준으로 잡아 둔
   기존 화면이 전부 어긋난다. inherit 는 부모가 12px 이면 그대로 12px 이라 렌더가 바뀌지
   않고, 부모가 크기·색을 명시한 자리에서만 따라간다 — 즉 버그가 있던 자리만 고쳐진다.
   특이도는 (0,0,1) 로 style.css 와 동률이고 이 파일이 뒤에 로드되므로 이기며,
   각 페이지가 클래스로 지정한 값(0,1,0 이상)에는 그대로 진다.
   a 는 링크색을 스스로 정해야 하므로 색 상속에서 제외. */
:where(body.v2) a,
:where(body.v2) abbr,
:where(body.v2) acronym,
:where(body.v2) address,
:where(body.v2) article,
:where(body.v2) aside,
:where(body.v2) b,
:where(body.v2) big,
:where(body.v2) blockquote,
:where(body.v2) caption,
:where(body.v2) center,
:where(body.v2) cite,
:where(body.v2) code,
:where(body.v2) dd,
:where(body.v2) del,
:where(body.v2) details,
:where(body.v2) dfn,
:where(body.v2) div,
:where(body.v2) dl,
:where(body.v2) dt,
:where(body.v2) em,
:where(body.v2) fieldset,
:where(body.v2) figcaption,
:where(body.v2) figure,
:where(body.v2) font,
:where(body.v2) footer,
:where(body.v2) form,
:where(body.v2) h1,
:where(body.v2) h2,
:where(body.v2) h3,
:where(body.v2) h4,
:where(body.v2) h5,
:where(body.v2) h6,
:where(body.v2) header,
:where(body.v2) hgroup,
:where(body.v2) i,
:where(body.v2) ins,
:where(body.v2) kbd,
:where(body.v2) label,
:where(body.v2) legend,
:where(body.v2) li,
:where(body.v2) main,
:where(body.v2) mark,
:where(body.v2) menu,
:where(body.v2) nav,
:where(body.v2) ol,
:where(body.v2) output,
:where(body.v2) p,
:where(body.v2) pre,
:where(body.v2) q,
:where(body.v2) ruby,
:where(body.v2) s,
:where(body.v2) samp,
:where(body.v2) section,
:where(body.v2) small,
:where(body.v2) span,
:where(body.v2) strike,
:where(body.v2) strong,
:where(body.v2) sub,
:where(body.v2) summary,
:where(body.v2) sup,
:where(body.v2) table,
:where(body.v2) tbody,
:where(body.v2) td,
:where(body.v2) tfoot,
:where(body.v2) th,
:where(body.v2) thead,
:where(body.v2) time,
:where(body.v2) tr,
:where(body.v2) tt,
:where(body.v2) u,
:where(body.v2) ul,
:where(body.v2) var{ font-size:inherit; }
:where(body.v2) abbr,
:where(body.v2) acronym,
:where(body.v2) address,
:where(body.v2) article,
:where(body.v2) aside,
:where(body.v2) b,
:where(body.v2) big,
:where(body.v2) blockquote,
:where(body.v2) caption,
:where(body.v2) center,
:where(body.v2) cite,
:where(body.v2) code,
:where(body.v2) dd,
:where(body.v2) del,
:where(body.v2) details,
:where(body.v2) dfn,
:where(body.v2) div,
:where(body.v2) dl,
:where(body.v2) dt,
:where(body.v2) em,
:where(body.v2) fieldset,
:where(body.v2) figcaption,
:where(body.v2) figure,
:where(body.v2) font,
:where(body.v2) footer,
:where(body.v2) form,
:where(body.v2) h1,
:where(body.v2) h2,
:where(body.v2) h3,
:where(body.v2) h4,
:where(body.v2) h5,
:where(body.v2) h6,
:where(body.v2) header,
:where(body.v2) hgroup,
:where(body.v2) i,
:where(body.v2) ins,
:where(body.v2) kbd,
:where(body.v2) label,
:where(body.v2) legend,
:where(body.v2) li,
:where(body.v2) main,
:where(body.v2) mark,
:where(body.v2) menu,
:where(body.v2) nav,
:where(body.v2) ol,
:where(body.v2) output,
:where(body.v2) p,
:where(body.v2) pre,
:where(body.v2) q,
:where(body.v2) ruby,
:where(body.v2) s,
:where(body.v2) samp,
:where(body.v2) section,
:where(body.v2) small,
:where(body.v2) span,
:where(body.v2) strike,
:where(body.v2) strong,
:where(body.v2) sub,
:where(body.v2) summary,
:where(body.v2) sup,
:where(body.v2) table,
:where(body.v2) tbody,
:where(body.v2) td,
:where(body.v2) tfoot,
:where(body.v2) th,
:where(body.v2) thead,
:where(body.v2) time,
:where(body.v2) tr,
:where(body.v2) tt,
:where(body.v2) u,
:where(body.v2) ul,
:where(body.v2) var{ color:inherit; }

/* ============================================================
   [모바일] 검색·초기화 버튼 아이콘만 남기기
   ------------------------------------------------------------
   좁은 화면에서 툴바가 두 줄로 접히는 주범이 이 두 버튼의 라벨이다.
   아이콘(돋보기·되돌리기)만으로 뜻이 통하므로 640px 이하에서 라벨을 숨긴다.
   대상은 .mo-ico 를 붙인 버튼뿐 — 인쇄·목록처럼 아이콘만으로 모호한 버튼은 제외한다.
   접근성: 라벨을 지우지 않고 시각적으로만 감춘다(스크린리더는 그대로 읽는다).
   ============================================================ */
@media (max-width:640px){
  .mo-ico > .lb{
    position:absolute!important;width:1px;height:1px;padding:0;margin:-1px;
    overflow:hidden;clip:rect(0 0 0 0);clip-path:inset(50%);white-space:nowrap;border:0;
  }
  .mo-ico{gap:0!important;padding-left:12px!important;padding-right:12px!important}
}

/* ============================================================
 * [전역] 모바일에서는 인쇄 버튼을 감춘다 (대표 지시)
 * ------------------------------------------------------------
 * 손에 든 화면에서 A4 인쇄를 거는 일은 없고, 좁은 툴바에서 본 기능(원문·투찰·공고함)의
 * 자리를 뺏는다. 화면마다 마크업이 달라 클래스를 새로 붙이는 대신, '인쇄 아이콘을 품은
 * 버튼' 을 :has() 로 한 번에 집는다. :has() 를 모르는 오래된 브라우저에서는 규칙 자체가
 * 무시되어 지금과 똑같이 보인다 — 기능이 깨지지 않는 안전한 실패다.
 * 인쇄 전용 화면(PrintList·show1365 등 팝업 문서)의 버튼까지 함께 사라지지 않도록
 * body.printdoc 이 붙은 문서는 제외한다.
 * ============================================================ */
@media screen and (max-width:768px){
  body:not(.printdoc) a:has(> .fa-print),
  body:not(.printdoc) button:has(> .fa-print),
  body:not(.printdoc) span.abtn:has(> .fa-print),
  body:not(.printdoc) .tb-btn:has(> .fa-print),
  body:not(.printdoc) .hbtn:has(> .fa-print){ display:none !important; }
}


/* ============================================================
   [v4.8 모바일 표 카드화 공용 유틸] table.m-cardify + td[data-th]
   좌우 스크롤 축소판 대신 행=카드, 셀=라벨:값 줄. 라벨은 서버가 td 에 심은
   data-th 를 ::before 로 세운다. corpSrchV2·rank(낙찰상위·발주기관순위)·live 공용.
   ============================================================ */
@media (max-width:640px){
  /* bidroom-mobile.css 의 ≤1024 규칙(.tbl-wrap>table{width:max-content!important} ·
     .tbl-wrap td{white-space:nowrap})이 카드를 화면 밖으로 밀어냈다 — 카드 모드에서 되돌린다 */
  .gdv2 table.m-cardify{min-width:0 !important;width:100% !important;max-width:100%;display:block}
  .gdv2 table.m-cardify thead,.gdv2 table.m-cardify tr.m-hd{display:none}
  .gdv2 table.m-cardify tbody{display:block}
  .gdv2 table.m-cardify tr{display:block;border:1px solid #e4e9f2;border-radius:11px;background:#fff;
    padding:10px 12px;margin:0 0 9px}
  .gdv2 table.m-cardify tr{transition:border-color .12s,box-shadow .12s}
  .gdv2 table.m-cardify td{display:flex;align-items:baseline;justify-content:space-between;gap:12px;
    padding:4px 0;border:0 !important;text-align:right;min-width:0;overflow-wrap:anywhere;flex-wrap:wrap;
    white-space:normal}
  .gdv2 table.m-cardify td.num{white-space:nowrap}   /* 금액·비율은 중간에서 끊지 않는다 */
  /* 순위표(낙찰상위·발주기관): 한 줄 한 지표는 여백만 컸다 — 라벨 위/값 아래
     타일 2열(2×3)로 카드를 채운다 */
  #rkTbl.m-cardify td[data-th]{display:inline-flex;flex-direction:column;align-items:flex-start;
    justify-content:flex-start;gap:1px;width:calc(50% - 6px);vertical-align:top;
    padding:5px 0;text-align:left}
  #rkTbl.m-cardify td[data-th]::before{font-size:10.5px}
  .gdv2 table.m-cardify td[data-th]::before{content:attr(data-th);flex:0 0 auto;
    font-size:11.5px;font-weight:700;color:#8a93a2;text-align:left}
  .gdv2 table.m-cardify td.m-head{display:block;text-align:left;padding:0 0 7px;margin:0 0 6px;
    border-bottom:1px solid #f0f3f8 !important;font-weight:800}
  .gdv2 table.m-cardify td.m-wide{display:block;text-align:left;max-width:100%}
  /* 공고명: 한 줄 말줄임 대신 두 줄까지 펼친다(카드 폭 안) */
  .gdv2 table.m-cardify td.m-wide .b{max-width:100%;white-space:normal;
    display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden}
  .gdv2 table.m-cardify td.m-wide .o{max-width:100%}
  .gdv2 table.m-cardify td.m-wide::before{content:none}
  .gdv2 table.m-cardify tr.duel-h{background:#f4f7fb;border-color:#dfe6ef}
  .gdv2 table.m-cardify tr.duel-h td{display:block;text-align:left;padding:2px 0}
  .gdv2 table.m-cardify tr.duel-h td::before{content:none}
  .gdv2 .tbl-wrap.m-off{overflow:visible;border:0}
  /* 순위표: 순위 번호와 이름을 한 줄 머리로 */
  .gdv2 table.m-cardify td.m-rank{display:inline-flex;width:auto;padding:0 6px 7px 0;vertical-align:top;font-weight:800}
  .gdv2 table.m-cardify td.m-rank + td{display:inline-flex;width:calc(100% - 46px);text-align:left;
    padding:0 0 7px;margin:0 0 6px;vertical-align:top}
}

/* 카드화된 행에 마우스오버 테두리 — 순위·실시간낙찰 카드가 눌러지는 대상임을 알린다.
   hover:hover 로 감싸 터치기기에서 탭 후 hover 가 남지 않게 한다. */
@media (max-width:640px) and (hover:hover){
  .gdv2 table.m-cardify tbody tr:hover{ border-color:#e0a3a3; box-shadow:0 2px 8px rgba(30,40,60,.10); }
}
