
@font-face {
  font-family: 'NanumSquareNeo';
  src: url('/fonts/NanumSquareNeo-ExtraBold.woff2') format('woff2');
  font-weight: 800;
  font-display: fallback;   /* round226·227(D-225 ㄱ): 제목만 NanumSquareNeo EB(OFL, 자체 호스팅 388KB) — 본문은 시스템 글꼴(내려받기 없음) */
}
:root {
  /* round136(사용자 지적 C129-4): 스토어 화면은 tokens.css를 싣지 않는다 — 배지 토큰(ADR-0025 조합 B)을 여기서도 정의. 값은 apps/*/tokens.css와 같게 */
  --c-badge-bg: #EEF0F3;  --c-badge-success: #176B40;  --c-badge-info: #0D162B;  --c-badge-warning: #8A5200;  --c-badge-empty: #5F6673;  --c-badge-danger-bg: #C8102E;
  --v2-ink: #0D162B;        /* 국산24 로고 네이비(라운드 31) */
  --v2-ink-soft: #182440;
  --v2-ink-bg: #EAF0F8;
  --v2-red: #C8102E;
  --v2-bg: #F4F5F7;
  --v2-surface: #FFFFFF;
  --v2-line: #E5E7EB;
  --v2-biz: #177A33;   /* round210: 유틸바 [국내산 식당/업체] 초록(흰 글자 대비 5.3) */
  --v2-text: #1A1A1A;
  --v2-muted: #4B5563;   /* round128: 보조 글자를 한 단계 진하게(가독성) */
  --v2-muted2: #9CA3AF;
  --v2-sale: #D12727;
  --v2-star: #C77F00;
  --v2-star-ink: #8A5A00;
  --v2-orange-ink: #C2410C;   /* roundM43: 강조 숫자(상세 'n명이 샀어요') — 흰 바탕 5.5:1·연한 남색 칩 바탕 4.7:1 */   /* roundM40(audit ①): 별점 숫자 글자색 — 흰 바탕 대비 6.3:1(별 아이콘은 --v2-star 그대로) */
  --v2-blue: #2A4B9B;  --v2-blue-bg: #EEF4FF;
  --v2-green: #196A45; --v2-green-bg: #F0F7F3;
  --v2-font: -apple-system, BlinkMacSystemFont, Helvetica, 'Apple SD Gothic Neo', sans-serif;   /* round227(대표자 D-225 ㄱ): 본문은 시스템 글꼴(내려받기 없음 — 맥 Apple SD Gothic, 윈도 맑은 고딕) */
  --v2-font-head: 'NanumSquareNeo', 'Apple SD Gothic Neo', 'Helvetica Neue', Helvetica, sans-serif;   /* round226·227(D-225 ㄱ): 제목 글꼴(NanumSquareNeo EB 자체 호스팅) */
  /* round186(계약 round186-store-brand-program §2): 표식 토큰 — 국산 검증·확인 업체 배지(그린 블록형), 로고 옆 문구 구슬, 모바일 썸네일 태그 */
  --v2-badge-g1: #4D6CA8; --v2-badge-g2: #0D162B; --v2-badge-gt: #DDE3EE; --v2-badge-gsh: 95,115,150;   /* round192(대표자): 국산 검증 배지 = 남색 계열(186의 초록에서 되돌림) */
  --v2-bead1: #8FE07A; --v2-bead2: #3DAA4E; --v2-bead3: #1F7A3A;
  --v2-tag-navy: #0D162B; --v2-tag-dot: #8FE07A;
  /* round207(디자인 감사 §2-1, 대표자 2026-10-07 승인): 글자 5단계 — 화면은 이 값만 쓴다. Display 24/800 · Title 18/700 · Body 14/500(본문 400) · Caption 12/400 회색 1종 · Micro 11/700(배지 전용, 10px 이하 없음) */
  --t-display: 24px; --t-title: 18px; --t-body: 14px; --t-caption: 12px; --t-micro: 11px;
  --t-lh-tight: 1.25; --t-lh-title: 1.3; --t-lh-body: 1.45;
  --t-ls-display: -0.02em; --t-ls-title: -0.01em;
  /* 배지 3종(감사 §2-3): 신뢰 = 남색, 혜택 = 검정 채움, 상태 = 회색, '사용 가능'만 파랑 */
  --bdg-trust: #0D162B; --bdg-promo: #1A1A1A; --bdg-state-bg: #EEF0F3; --bdg-state: #4B5563; --bdg-ok: #2A4B9B;
}
html { scrollbar-gutter: stable; }
.v2 { margin: 0; background: #FFFFFF; color: var(--v2-text); word-break: keep-all; overflow-wrap: anywhere;   /* round210-b(대표자): 바탕은 어디서나(모바일도) 흰색. roundM28(M27 C1): 한글은 어절 단위로 끊고, 띄어쓰기 없는 긴 글(주소·URL)만 글자에서 끊는다 — 전 화면 */ font-family: var(--v2-font); font-size: 15px; line-height: 1.6; }   /* round128: 본문 15px */
/* round102 LS1: shared chrome (header, category row, footer) must render identically whether or not a page also loads app.css
   (cart, my pages, profile do; home, list, detail do not) - app.css sets * { box-sizing: border-box } and body line-height 1.55 */
.v2 > header, .v2 > header *, .v2 > header *::before, .v2 > header *::after,
.v2 > footer, .v2 > footer *, .v2 > footer *::before, .v2 > footer *::after { box-sizing: content-box; }
.v2 > header, .v2 > footer { line-height: normal; }
.v2 a { color: var(--v2-text); text-decoration: none; }
.v2 a:hover { color: #000000; text-decoration: underline; }
.v2 .num { font-variant-numeric: tabular-nums; letter-spacing: -0.01em; }
.v2 .wrap { width: 1280px; margin: 0 auto; }
/* round230(리뷰 접근성): 본문 바로가기 — 포커스될 때만 보인다 */
.v2 .skip-link { position: absolute; left: 8px; top: -48px; z-index: 300; padding: 8px 14px; border-radius: 4px; background: var(--v2-ink); color: #FFFFFF; font-weight: 700; font-size: 14px; }
.v2 .skip-link:focus { top: 8px; outline: 2px solid #FFD43B; outline-offset: 2px; }
.v2 .gnb-scroll:has(.gnb-arrow.next:not([hidden])) .gnb-links { -webkit-mask-image: linear-gradient(90deg, #000 calc(100% - 28px), transparent); mask-image: linear-gradient(90deg, #000 calc(100% - 28px), transparent); }   /* round230(리뷰): 띠가 넘칠 때 오른쪽 끝을 흐려 더 있음을 보인다 */
.v2 .prow-price { flex-wrap: nowrap; white-space: nowrap; }   /* round230(리뷰 1-4): 가격과 '원'은 한 줄 */
.v2 .view-btn { white-space: nowrap; }   /* round230(리뷰 3-11): 약관 [보기]가 세로로 쪼개지지 않게 */
.v2 .sr-only { position: absolute; width: 1px; height: 1px; padding: 0; margin: -1px; overflow: hidden; clip: rect(0,0,0,0); border: 0; }
.v2 .utilbar { background: var(--v2-surface); border-bottom: 1px solid var(--v2-line); }
.v2 .utilbar .wrap { display: flex; justify-content: flex-end; align-items: center; gap: 20px; padding: 6px 0; font-size: 12px; }
.v2 .utilbar a { color: var(--v2-muted); white-space: nowrap; flex-shrink: 0; }
.v2 .utilbar a.strong { color: var(--v2-text); font-weight: 700; }
.v2 .utilbar .util-logout { display: inline; margin: 0; flex-shrink: 0; }
.v2 .utilbar .util-logout button { background: none; border: 0; padding: 0; font: inherit; font-size: 12px; color: var(--v2-muted); cursor: pointer; white-space: nowrap; }
/* round210(대표자): [국내산 식당/업체] 굵은 초록 버튼, [로그인]·[로그아웃] 같은 글꼴·크기의 네모 버튼 */
.v2 .utilbar a.util-biz { color: #FFFFFF; font-weight: 700; background: var(--v2-biz); display: inline-flex; align-items: center; box-sizing: border-box; height: 23px; padding: 0 10px; border-radius: 4px; }   /* roundM28-b(대표자): 채움 금지 규칙은 새 디자인부터 — 기존 채움 원복 */
.v2 .utilbar a.util-biz:hover { background: #126428; text-decoration: none; }
.v2 .utilbar a.util-btn, .v2 .utilbar .util-logout button { display: inline-flex; align-items: center; box-sizing: border-box; height: 23px; padding: 0 10px; border: 1px solid var(--v2-line); border-radius: 4px; background: var(--v2-surface); color: var(--v2-text); font-size: 12px; font-weight: 700; font-family: inherit; cursor: pointer; }
.v2 .utilbar a.util-btn:hover, .v2 .utilbar .util-logout button:hover { border-color: var(--v2-ink); color: var(--v2-ink); text-decoration: none; }
.v2 .utilbar .util-logout button { background: #F1EFEF; }   /* round210-b(대표자): 로그아웃만 바탕 #F1EFEF */
.v2 .hd { background: var(--v2-surface); border-bottom: 1px solid var(--v2-line); }
.v2 .hd .wrap { display: flex; align-items: center; gap: 32px; padding: 16px 0; }
.v2 .logo { display: inline-flex; align-items: center; gap: 10px; font-size: 28px; font-weight: 800; color: #2B3038; letter-spacing: -0.02em; }
.v2 .logo:hover { color: #2B3038; }
.v2 .logo img { height: 44px; width: auto; display: block; }
/* round186: 로고 옆 문구(시안 B안) — 초록 구슬 4 + 네이비 4글자. 화면에 있는 동안 반복(round187 대표자 지시), 감속 모션이면 정지·빛 없음. 장식이라 role=img + aria-label 하나 */
.v2 .vline { width: 1px; height: 40px; background: #D5D9DE; flex-shrink: 0; }
.v2 .brand-tag { display: flex; flex-direction: column; align-items: flex-start; gap: 4px; white-space: nowrap; flex-shrink: 0; }
.v2 .brand-tag .circ { display: flex; gap: 3px; }
.v2 .brand-tag .circ b { width: 24px; height: 24px; border-radius: 50%; display: grid; place-items: center; color: #FFFFFF; font-weight: 800; font-size: 13px; line-height: 1; background: radial-gradient(circle at 32% 28%, var(--v2-bead1), var(--v2-bead2) 55%, var(--v2-bead3)); box-shadow: inset 0 -3px 4px rgba(0,0,0,.18), inset 0 2px 3px rgba(255,255,255,.45), 0 3px 6px rgba(31,110,67,.3); animation: a2a-pop 3.6s cubic-bezier(.3,1.6,.5,1) infinite; }   /* round187(대표자): 다른 화면으로 가기 전까지 반복 */
.v2 .brand-tag .circ b:nth-child(2) { animation-delay: .12s; } .v2 .brand-tag .circ b:nth-child(3) { animation-delay: .24s; } .v2 .brand-tag .circ b:nth-child(4) { animation-delay: .36s; }
@keyframes a2a-pop { 0%, 8% { transform: translateY(0); } 4% { transform: translateY(-5px); } 100% { transform: translateY(0); } }
.v2 .brand-tag .sub { display: grid; grid-template-columns: repeat(4, 24px); column-gap: 3px; justify-items: center; font-weight: 800; font-size: 15px; line-height: 1.1; color: var(--v2-ink); position: relative; overflow: hidden; padding: 1px 0; }
.v2 .brand-tag .sub i { font-style: normal; }
.v2 .brand-tag .sub::after { content: ""; position: absolute; top: 0; bottom: 0; width: 35%; left: -40%; background: linear-gradient(100deg, transparent, rgba(255,255,255,.95), transparent); animation: a2a-bar 3.6s ease-in-out infinite; pointer-events: none; }
@keyframes a2a-bar { 0%, 50% { left: -40%; } 80%, 100% { left: 120%; } }
/* round199(대표자 지적 1): 감속 모션(윈도 '애니메이션 효과' 끔 — 개발 PC·대표자 PC가 그렇다)에서도 문구는 움직인다. 브랜드 표식이라 대표자 결정, 움직임은 5px·3.6초 주기로 작다. 전에는 여기서 animation: none */
.v2 .logo:hover { color: var(--v2-ink); text-decoration: none; }
.v2 .searchbox { flex-grow: 1; display: flex; align-items: center; box-sizing: border-box; height: 48px; padding: 2px; background: linear-gradient(90deg, var(--v2-ink), #2A4B9B 60%, #4D6CA8); border: 0; border-radius: 999px; overflow: hidden; }   /* roundM25(대표자 3): 알약 + 정체성 색 그라데이션 2px 테두리(padding) — 안쪽은 흰 바탕 */
.v2 .searchbox input { flex-grow: 1; min-width: 0; width: auto; height: 44px; margin: 0; border: 0; border-radius: 999px 0 0 999px; padding: 0 20px; background: #FFFFFF; box-shadow: none; transition: none; font-size: 15px; line-height: normal; font-family: inherit; color: var(--v2-text); }   /* round102 LS1: every property pinned - app.css form rules must not leak in */
.v2 .searchbox button { box-sizing: border-box; flex: none; width: 56px; height: 44px; margin: 0; padding: 0 4px 0 0; border: 0; border-radius: 0 999px 999px 0; font: inherit; color: var(--v2-ink); background: #FFFFFF; display: flex; align-items: center; justify-content: center; cursor: pointer; }   /* roundM25: 돋보기는 배경 없음, 빈 검색어면 전체 상품(/search?q= → /products) */
.v2 .searchbox button svg { width: 22px; height: 22px; }
.v2 .hd-icons { display: flex; gap: 22px; }
.v2 .hd-icon { display: flex; flex-direction: column; align-items: center; gap: 3px; color: var(--v2-ink); font-size: 11px; }
.v2 .hd-icon:hover { color: var(--v2-ink); }
/* round205 #3: 머리의 로그인/로그아웃 아이콘은 모바일 전용(PC는 유틸바). form 안의 버튼은 아이콘 링크와 같은 모양 */
.v2 .hd-auth { display: none; margin: 0; }
/* round193(계약 round192-store-feedback §3): 모바일 머리 햄버거·서랍 — PC(901px 이상)에서는 없다. 모바일 규칙은 900px 블록 */
.v2 .hd-menu { display: none; }
.v2 .mdrawer, .v2 .md-backdrop { display: none; }
body.menu-open { overflow: hidden; }
.v2 .cat-dots { display: none; }   /* round193: 카테고리 페이지 점 — 모바일만(store-home.js가 그린다) */
/* round181 B1(실측): 감속 모션이 꺼진 브라우저에서는 헤더에 view-transition-name이 붙어 헤더가 별도 쌓임 맥락이 된다 → 그 안의 z-index는 바깥으로 못 나오고 뒤에 오는 배너(position)가 헤더를 덮었다. 헤더 자체에 순서를 준다(검색 제안 30·띠 70 < 하단 탭바 80) */
.v2 > header { position: relative; z-index: 70; }
.v2 .gnb { position: relative; z-index: 70; background: var(--v2-surface); border-bottom: 1px solid var(--v2-line); }   /* round179 B1: 호버 패널이 배너·목록 뒤로 가지 않게 띠 자체에 쌓임 순서 */
.v2 .gnb .wrap { display: flex; align-items: center; gap: 18px; height: 50px; font-size: 14px; font-weight: 700; }
.v2 .gnb-scroll { display: flex; align-items: center; flex: 1 1 auto; min-width: 0; height: 100%; position: relative; }
.v2 .gnb-links { display: flex; align-items: center; gap: 18px; flex: 1 1 auto; min-width: 0; height: 100%; overflow-x: auto; scrollbar-width: none; scroll-behavior: smooth; }
/* F3: 띠 양끝 화살표 — 넘칠 때만(JS hidden 토글), 호버 시 연속 스크롤 */
.v2 .gnb-arrow { flex-shrink: 0; width: 26px; height: 26px; border: 1px solid var(--v2-line); border-radius: 999px; background: var(--v2-surface); color: var(--v2-ink); display: flex; align-items: center; justify-content: center; cursor: pointer; padding: 0; z-index: 1; }
.v2 .gnb-arrow svg { width: 14px; height: 14px; }
.v2 .gnb-arrow.prev { margin-right: 6px; box-shadow: 8px 0 8px -6px rgba(0,0,0,.12); }
.v2 .gnb-arrow.next { margin-left: 6px; box-shadow: -8px 0 8px -6px rgba(0,0,0,.12); }
.v2 .gnb-arrow:hover { background: var(--v2-ink); color: #FFFFFF; }
.v2 .gnb-links::-webkit-scrollbar { display: none; }
.v2 .gnb .all { display: flex; align-items: center; gap: 8px; white-space: nowrap; }
.v2 .gnb .sep { width: 1px; height: 18px; background: var(--v2-line); flex-shrink: 0; }
.v2 .gnb a { white-space: nowrap; }
.v2 .gnb a.hot { color: var(--v2-sale); }
.v2 .gnb a.on { border-bottom: 2px solid var(--v2-ink); padding-bottom: 4px; }
.v2 .gnb-links a:hover { text-decoration: none; border-bottom: 2px solid var(--v2-ink); padding-bottom: 4px; }
.v2 .all-wrap { position: relative; height: 100%; display: flex; align-items: center; flex-shrink: 0; }
.v2 .all-wrap:hover .all, .v2 .all-wrap:focus-within .all { text-decoration: none; }
.v2 .all-wrap:hover .chev, .v2 .all-wrap:focus-within .chev { transform: rotate(180deg); }
.v2 .cat-panel { display: none; position: absolute; top: 100%; left: 0; z-index: 60; width: 660px; background: var(--v2-surface); border: 1px solid var(--v2-line); border-top: 2px solid var(--v2-ink); padding: 10px; grid-template-columns: repeat(3, minmax(0, 1fr)); gap: 2px; }
.v2 .all-wrap:hover .cat-panel, .v2 .all-wrap:focus-within .cat-panel { display: grid; }
.v2 .cat-panel a { display: flex; align-items: center; gap: 10px; padding: 9px 12px; border-radius: 4px; font-weight: 700; font-size: 14px; }
.v2 .cat-panel a:hover { background: #F3F4F6; text-decoration: none; }
.v2 .cat-panel .cat-ic { width: 20px; height: 20px; color: var(--v2-muted); flex-shrink: 0; }
.v2 .cat-panel .cat-img { width: 28px; height: 28px; object-fit: contain; flex-shrink: 0; }   /* round186: 카테고리 이미지(srcId 매핑, layout/cat-image) */
.v2 .cat-panel a:hover .cat-ic { color: var(--v2-ink); }
.v2 .cat-panel .cp-all { grid-column: 1 / -1; border-top: 1px solid var(--v2-line); border-radius: 0; margin-top: 6px; padding-top: 12px; color: var(--v2-muted); }
.v2 .sec { display: flex; flex-direction: column; gap: 16px; padding: 32px 0 8px 0; }
.v2 .sec-h { display: flex; align-items: baseline; justify-content: space-between; }
.v2 .sec-t { font-size: var(--t-title); font-weight: 700; letter-spacing: var(--t-ls-title); line-height: var(--t-lh-title); }   /* round207: Title 18/700(전 21/800) */
.v2 .more { font-size: 13px; color: var(--v2-muted); line-height: 24px; }   /* round230: 누르는 높이 */
/* round226·227(D-225 ㄱ): 제목(구역 제목·페이지 제목·상품명·배너 제목)은 NanumSquareNeo EB — 본문·버튼·표는 시스템 글꼴 */
.v2 .sec-t, .v2 .page-title, .v2 .dname, .v2 .banner-main .t, .v2 .cb-t, .v2 .err-title, .v2 h1, .v2 h2 { font-family: var(--v2-font-head); font-weight: 800; }
.v2 .grid4 { display: grid; grid-template-columns: repeat(4, minmax(0, 1fr)); gap: 14px; }
.v2 .grid5 { display: grid; grid-template-columns: repeat(5, minmax(0, 1fr)); gap: 14px; }
/* round207(시안 1): 카드 = 테두리 상자 없이 사진 모서리 8px, 본문은 상호·산지 → 제목(두 줄 칸 고정) → 가격 → 배지 */
.v2 .card { background: var(--v2-surface); border: 1px solid var(--v2-line); border-radius: 8px; overflow: hidden; display: flex; flex-direction: column; position: relative; }   /* round210(대표자): 카드 구분이 사라졌다 → 흰 바탕·테두리 복구 */
.v2 .card:hover { border-color: #C9CDD3; }
.v2 main.sec { background: #FFFFFF; }   /* round210(대표자): <main class="wrap sec"> 바탕 흰색 */
.v2 .card:hover { text-decoration: none; }
.v2 .card .thumb { border-radius: 0; overflow: hidden; }
.v2 .card:hover .thumb { box-shadow: 0 6px 18px rgba(13, 22, 43, .12); }
/* round188: 카드 루트 article — 링크(card-link)가 사진·본문, [담기] 폼은 오른쪽 아래 원형 버튼(품절이면 없음) */
.v2 .card-link { display: flex; flex-direction: column; flex: 1; min-width: 0; color: inherit; }
.v2 .card-link:hover { text-decoration: none; color: inherit; }
.v2 .card-cart { position: absolute; right: 10px; bottom: 10px; margin: 0; z-index: 2; }
.v2 .card-cart-btn { width: 34px; height: 34px; border-radius: 999px; border: 1px solid var(--v2-line); background: var(--v2-surface); color: var(--v2-ink); display: flex; align-items: center; justify-content: center; cursor: pointer; padding: 0; }
.v2 .card-cart-btn svg { width: 18px; height: 18px; }
.v2 .card-cart-btn:hover { background: var(--v2-ink); color: #FFFFFF; border-color: var(--v2-ink); }
/* round225(대표자 5): [담기] 왼쪽의 찜 하트 — 같은 원형, 찜하면 빨강(품절 카드는 [담기]가 없어 하트가 오른쪽 끝) */
.v2 .card-wish { position: absolute; right: 50px; bottom: 10px; margin: 0; z-index: 2; }
.v2 .card:not(:has(.card-cart)) .card-wish { right: 10px; }
.v2 .card-wish-btn { width: 34px; height: 34px; border-radius: 999px; border: 1px solid var(--v2-line); background: var(--v2-surface); color: var(--v2-ink); display: flex; align-items: center; justify-content: center; cursor: pointer; padding: 0; }
.v2 .card-wish-btn .ic { width: 17px; height: 17px; }
.v2 .card-wish-btn:hover, .v2 .card-wish-btn.on { color: var(--v2-sale); border-color: var(--v2-sale); }
.v2 .thumb { height: 220px; background: #EFF1F0; display: flex; align-items: center; justify-content: center; color: var(--v2-muted2); font-size: 12px; overflow: hidden; position: relative; }
/* round186(시안 §13): 모바일 썸네일 왼쪽 위 '국산 검증' 납작한 남색 태그 — 글자만, 아이콘·뉴모피즘 없음. 901px 이상에서는 숨김(PC 목록에는 배지 없음) */
.v2 .tg-vrf { position: absolute; left: 6px; bottom: 6px; z-index: 1;   /* round192: 왼쪽 아래 — 왼쪽 위는 이번달 행사 띠 자리. roundM31(Q-M27-1): 20px·800·남색 → 18px·700·남색 88%(한 단계 작게·대비 낮춤) */ height: 18px; padding: 0 6px; border-radius: 4px; background: color-mix(in srgb, var(--v2-tag-navy) 88%, transparent); color: #FFFFFF; font-size: 10px; font-weight: 700; letter-spacing: .02em; line-height: 1; display: none; align-items: center; white-space: nowrap; box-shadow: 0 1px 2px rgba(0,0,0,.28); }
/* round227(대표자 9-3): 정부 인증 마크 — 썸네일 왼쪽 아래(.thumb img 100% 규칙보다 선택자를 높여 마크 크기를 지킨다)(모바일은 '국산 검증' 태그 위). 이미지 없는 종류는 글자 칩 */
.v2 .cert-marks { position: absolute; left: 6px; bottom: 6px; z-index: 1; display: flex; gap: 4px; align-items: flex-end; flex-wrap: wrap; max-width: calc(100% - 12px); }
.v2 .thumb .cert-marks img, .v2 .dmain .cert-marks img { width: 30px; height: 30px; object-fit: contain; background: #FFFFFF; border-radius: 4px; box-shadow: 0 1px 3px rgba(0, 0, 0, .18); display: block; }
.v2 .cert-chip { display: inline-flex; align-items: center; height: 20px; padding: 0 6px; border-radius: 4px; background: #FFFFFF; color: var(--v2-ink); font-size: 11px; font-weight: 800; font-style: normal; box-shadow: 0 1px 3px rgba(0, 0, 0, .18); }
.v2 .dmain .cert-marks { left: 10px; bottom: 10px; gap: 6px; }
.v2 .dmain .cert-marks img { width: 36px; height: 36px; }
.v2 .tg-vrf::before { content: ""; width: 4px; height: 4px; border-radius: 50%; background: var(--v2-tag-dot); margin-right: 5px; }
.v2 .thumb img { width: 100%; height: 100%; object-fit: cover; }
.v2 .cbody { display: flex; flex-direction: column; gap: 6px; padding: 10px 12px 10px; }   /* round218(대표자): 줄 간격 6px */   /* round210: 상자가 돌아왔으니 좌우 12px */   /* round207: 상자가 없으니 좌우 여백은 2px */   /* round188-b(대표자): 줄 사이 간격 절반 이하 → round192: p 기본 여백(1em)이 gap을 무력화하고 있었다(아래 규칙) */
.v2 .cbody p { margin: 0; }   /* round192(계약 §2.1): 브라우저 기본 p 여백 14~15px 위아래가 줄마다 들어가 본문이 194px였다 */
.v2 .store-name { font-size: var(--t-caption); line-height: 1.4; color: var(--v2-muted); white-space: nowrap; overflow: hidden; text-overflow: ellipsis; display: block; }   /* round207: 한 줄 고정(길면 말줄임) — 가격 자리가 흔들리지 않게 */
.v2 .store-name b { font-weight: 500; color: var(--v2-text); }   /* round207: 상호만 한 단계 진하게 */
/* round207: 상품명 Body 14/500, 줄간 1.45, 두 줄 칸 고정(한 줄이어도 가격 자리가 같다 — 대표자) */
.v2 .pname { font-size: var(--t-body); font-weight: 500; line-height: var(--t-lh-body); height: calc(var(--t-lh-body) * 2em); overflow: hidden; display: -webkit-box; -webkit-line-clamp: 2; -webkit-box-orient: vertical; word-break: keep-all; }
.v2 .prow-bdg { min-height: 20px; align-items: center; }   /* round227(9-1): 배지 줄은 상호·산지 위 */
/* round228(대표자): 카드 배지는 항상 같은 크기 — 높이 20·글자 Micro·양옆 7·모서리 4, 그림자 없음(국산 검증 mini도 같은 틀, 엠블럼 앞만 4) */
.v2 .cbody .bdg, .v2 .cbody .b-vrf.mini { height: 20px; line-height: 20px; padding: 0 7px; font-size: var(--t-micro); font-weight: 800; border-radius: 4px; box-shadow: none; top: 0; }
.v2 .cbody .b-vrf.mini { padding-left: 4px; gap: 4px; }
/* round228(대표자, 쿠팡 카드): 할인 줄 = 쿠폰 글자 | % 정가(취소선) — 최종가 위. 최종가는 본문 맨 아래, 찜·[담기](34px, bottom 10)와 같은 줄 */
.v2 .prow-disc { gap: 6px; align-items: center; min-height: 16px; }
.v2 .disc-label { font-size: 12px; font-weight: 700; color: var(--v2-sale); white-space: nowrap; }
.v2 .disc-sep { width: 1px; height: 10px; background: var(--v2-line); flex: none; }
.v2 .cbody .sale-rate { font-size: 13px; }
.v2 .card-link .cbody { flex: 1; }   /* round228: 그리드 줄 높이(가장 긴 카드)만큼 본문을 늘려 최종가가 어느 카드든 맨 아래 버튼 줄에 온다 */
.v2 .card .prow-price { margin-top: auto; padding: 7px 80px 7px 0; }   /* 20px 글줄 + 7·7 = 34px → 버튼과 가운데가 같다. 오른쪽 80 = 두 버튼 자리(이 줄만) */
.v2 .card:not(:has(.card-cart)) .prow-price { padding-right: 40px; }
.v2 .prow { display: flex; align-items: baseline; gap: 4px; flex-wrap: wrap; line-height: 1.2; }
.v2 .cbody > .prow:empty { display: none; }
.v2 .sale-rate { color: var(--v2-sale); font-weight: 800; font-size: 16px; }
.v2 .price { font-weight: 800; font-size: 17px; color: var(--v2-text); }
.v2 .won { font-size: 13px; font-weight: 500; }
.v2 .org-price { color: var(--v2-muted); font-size: 12px; text-decoration: line-through; }
.v2 .card .wish-mark { display: none; }   /* round225: 글자 기호 하트 대신 .card-wish-btn.on */
.v2 .empty .pop-terms { justify-content: center; margin-top: 10px; }
.v2 .pop-terms { display: flex; align-items: center; gap: 8px; flex-wrap: wrap; }
.v2 .pop-terms .pt-label { font-size: 13px; font-weight: 800; color: var(--v2-muted); margin-right: 4px; }
.v2 .pop-terms > a { background: var(--v2-surface); border: 1px solid var(--v2-line); border-radius: 999px; padding: 6px 14px; font-size: 13px; }   /* roundM48: 직계만(검색 0건 칩 줄) — 홈 롤링 줄의 링크는 아래 .pop-roll */
.v2 .pop-terms > a:hover { border-color: var(--v2-muted2); text-decoration: none; }
.v2 .rate { color: var(--v2-star); font-weight: 800; font-size: 13px; }
.v2 a.rate:hover { text-decoration: none; }
.v2 .rate-cnt { color: var(--v2-muted); font-size: 12px; }
.v2 .review { border-top: 1px solid var(--v2-line); padding: 12px 0 4px 0; }
.v2 .review-h { font-size: 13px; color: var(--v2-muted); display: flex; gap: 6px; align-items: baseline; }
.v2 .review-c { line-height: 1.7; margin-top: 4px; }
.v2 .muted { color: var(--v2-muted); }
/* round207(감사 §2-3, 대표자 수정): 배지 한 모양 = 둥근 4px, 높이 20px, Micro 11px/700. 뜻 셋 — 신뢰(남색)·혜택(검정 채움)·상태(회색), '사용 가능'만 파랑 */
.v2 .bdg { display: inline-flex; align-items: center; height: 20px; line-height: 20px; font-size: var(--t-micro); font-weight: 700; padding: 0 6px; border-radius: 4px; white-space: nowrap; flex: none; box-sizing: border-box; }   /* round91: 배지는 항상 한 줄 */
.v2 .b-trust { background: var(--bdg-trust); color: #FFFFFF; }
.v2 .b-promo { background: var(--bdg-promo); color: #FFFFFF; }
.v2 .b-state { background: var(--bdg-state-bg); color: var(--bdg-state); }
/* round186(시안 §12, 계약 §2): 국산 검증·확인 업체 배지 = 그린 컬러 블록형(뉴모피즘) — 상태 표시(버튼 아님), 오버·눌림 효과 없음. 마크업: <span class="bdg b-vrf"><i class="sh"><svg …></svg></i>문구</span>
   크기: (없음) 13px 상세·GNB / sm 12px 확인 업체 / mini 17px 높이 제목 앞 / t = 아이콘 없는 글자만(판매자 프로듀서 배지 등). 라운드 88 진초록 단색은 .b-ok로 남긴다(문의 답변 상태) */
.v2 .b-vrf { --bg1: var(--v2-badge-g1); --bg2: var(--v2-badge-g2); display: inline-flex; align-items: center; gap: 7px; padding: 6px 13px 6px 6px; border-radius: 999px; font-size: 13px; font-weight: 800; letter-spacing: -0.01em; line-height: 1; color: #FFFFFF; background: linear-gradient(145deg, var(--bg1), var(--bg2)); box-shadow: 4px 4px 10px rgba(var(--v2-badge-gsh), .5), -3px -3px 8px rgba(255,255,255,.9), inset 1px 1px 1px rgba(255,255,255,.35), inset -1px -2px 3px rgba(0,0,0,.2); }
.v2 .b-vrf .sh { width: 22px; height: 22px; border-radius: 50%; display: grid; place-items: center; flex-shrink: 0; background: linear-gradient(145deg, #FFFFFF, var(--v2-badge-gt)); box-shadow: inset 1px 1px 1px #FFFFFF, inset -1px -2px 3px rgba(0,0,0,.12); }
.v2 .b-vrf .sh svg { width: 13px; height: 13px; display: block; stroke: var(--bg2); fill: none; stroke-width: 2; stroke-linecap: round; stroke-linejoin: round; }
.v2 .b-vrf.sm { font-size: 12px; gap: 6px; height: 23px; padding: 0 12px;   /* round210(대표자): 엠블럼 없이 글자만, 높이 30px(가시성) */ box-shadow: 3px 3px 7px rgba(var(--v2-badge-gsh), .45), -2px -2px 6px rgba(255,255,255,.9), inset 1px 1px 1px rgba(255,255,255,.35), inset -1px -2px 3px rgba(0,0,0,.2); }
.v2 .b-vrf.sm .sh { width: 20px; height: 20px; } .v2 .b-vrf.sm .sh svg { width: 12px; height: 12px; }
.v2 .b-vrf.mini { height: 20px; font-size: var(--t-micro); gap: 4px; padding: 0 7px 0 3px; border-radius: 4px; vertical-align: middle; position: relative; top: 0; background: var(--bdg-trust); color: #FFFFFF;   /* round207: 평면 남색(신뢰), Micro 11px */ box-shadow: 1px 1px 3px rgba(var(--v2-badge-gsh), .45), inset 1px 1px 1px rgba(255,255,255,.35), inset 0 -1px 2px rgba(0,0,0,.2); }
.v2 .b-vrf.mini .sh { width: 13px; height: 13px; box-shadow: inset 1px 1px 1px #FFFFFF, inset 0 -1px 2px rgba(0,0,0,.12); } .v2 .b-vrf.mini .sh svg { width: 8px; height: 8px; }
.v2 .b-vrf.t { padding: 5px 12px; gap: 0; }
/* round226(대표자 7): 검증 표시 = 대표자 엠블럼 img(.bm) — 원(.sh) 없이 엠블럼만, 크기는 전의 원과 같다(22 / sm 20 / mini 13) */
.v2 .b-vrf .bm { width: 22px; height: 22px; flex-shrink: 0; display: block; object-fit: contain; }
.v2 .b-vrf.sm .bm { width: 20px; height: 20px; }
.v2 .b-vrf.mini .bm { width: 13px; height: 13px; }
.v2 .b-ok { background: var(--bdg-ok); color: #FFFFFF; }   /* round207(대표자): 사용 가능 = 파랑 바탕 흰 글자 */
/* round131 BD3(ADR-0025 조합 B): 회색 바탕 + 글자색, 품절(멈춤)만 빨강 채움. 국산 검증(b-vrf)만 초록 채움 그대로 */
.v2 .b-eco { background: var(--bdg-trust); color: #FFFFFF; }          /* round207: 친환경 인증 = 신뢰 */
.v2 .b-soldout { background: var(--bdg-state-bg); color: var(--bdg-state); }   /* round207: 품절 = 상태(회색) */
.v2 .b-region { background: var(--bdg-state-bg); color: var(--bdg-state); }
.v2 .b-event { background: var(--bdg-promo); color: #FFFFFF; }         /* round207: 행사 = 혜택(검정) */
.v2 .badge.badge-success { background: var(--bdg-ok); color: #FFFFFF; }   /* round207(대표자): 쿠폰 '사용 가능' = 파랑 */   /* round135(사용자 지시): 이번달 행사 = 남색 바탕 + 흰 글자 — round192부터 카드·상세는 썸네일 띠(.event-strip), 이 규칙은 식당 페이지·주문 화면(부분 반품)이 쓴다 */
/* round192(계약 §2.3, 대표자 제공 event-strip.css): '이번달 행사' 띠 — 썸네일(.thumb)·상세 대표 사진(.dmain) 위. --corner = D안 변형(지금), --bottom = D안(기간 세일용, CSS만) */
.v2 .thumb, .v2 .dmain { --ev-bg-1: rgba(14,24,48,.95); --ev-bg-2: rgba(30,45,74,.88); --ev-accent: #FFD23F; --ev-text: #FFFFFF; --ev-sub: #C9D3E6; --ev-height: 28px; --ev-font: 12px; }
.v2 .event-strip { position: absolute; z-index: 2; display: flex; align-items: center; gap: 6px; height: var(--ev-height); padding: 0 10px; color: var(--ev-text); font-size: var(--ev-font); font-weight: 800; line-height: 1; white-space: nowrap; overflow: hidden; pointer-events: none; background: linear-gradient(90deg, var(--ev-bg-1), var(--ev-bg-2)); }
.v2 .event-strip b { color: var(--ev-accent); font-weight: 800; }
.v2 .event-strip__dot { flex-shrink: 0; width: 6px; height: 6px; border-radius: 50%; background: var(--ev-accent); box-shadow: 0 0 6px var(--ev-accent); animation: ev-blink 1.6s ease-in-out infinite; }
.v2 .event-strip__period { margin-left: auto; font-size: 11px; font-weight: 700; color: var(--ev-sub); }
.v2 .event-strip::after { content: ""; position: absolute; top: 0; bottom: 0; width: 35%; left: -50%; background: linear-gradient(100deg, transparent, rgba(255,255,255,.35), transparent); animation: ev-shine 4s ease-in-out infinite; }
.v2 .event-strip--bottom { left: 0; right: 0; bottom: 0; backdrop-filter: blur(2px); }
.v2 .event-strip--corner { left: 0; top: 12px; width: 50%; box-sizing: border-box; padding-right: 14px; clip-path: polygon(0 0, 100% 0, calc(100% - 10px) 100%, 0 100%); box-shadow: 0 2px 6px rgba(0,0,0,.2); }
@media (max-width: 480px) { .v2 .thumb, .v2 .dmain { --ev-height: 24px; --ev-font: 11px; } .v2 .event-strip { gap: 4px; padding: 0 8px; } .v2 .event-strip--corner { width: 62%; top: 8px; padding-right: 12px; } .v2 .event-strip__period { font-size: 10px; } }
@media (prefers-reduced-motion: reduce) { .v2 .event-strip__dot, .v2 .event-strip::after { animation: none; } }
@keyframes ev-blink { 50% { opacity: .25; } }
@keyframes ev-shine { 0%, 70% { left: -50%; } 90%, 100% { left: 120%; } }
.v2 .btn { display: inline-flex; align-items: center; justify-content: center; height: 44px; padding: 0 18px; border: 1px solid var(--v2-line); border-radius: 4px; font-size: 14px; font-weight: 700; background: var(--v2-surface); cursor: pointer; font-family: inherit; }
.v2 .btn:where(:hover) { text-decoration: none; border-color: var(--v2-muted2); }   /* round146: (0,2,0) — .btn-ink/.btn-primary/.btn-danger:hover(0,3,0)가 이긴다 */
.v2 .btn-ink { background: var(--v2-ink); color: #FFFFFF; border-color: var(--v2-ink); }
.v2 .btn-ink:hover { color: #FFFFFF; background: #000000; }
.v2 .btn-lg { height: 52px; padding: 0 26px; font-size: 16px; }
.v2 .banner-ink { background: var(--v2-ink); border-radius: 6px; color: #FFFFFF; }
.v2 .banner-ink .sub { color: #B9BCC1; }
.v2 .banner-ink .accent { color: #FFD43B; }
.v2 .btn-sm { height: 34px; padding: 0 14px; font-size: 13px; font-weight: 700; }   /* round128: 작은 버튼도 손가락 크기·굵게 */
.v2 .content { padding-top: 24px; padding-bottom: 8px; }
.v2 .hd-icon { position: relative; }
.v2 .cart-badge { position: absolute; top: -6px; right: -2px; background: var(--v2-sale); color: #FFFFFF; border-radius: 999px; min-width: 18px; height: 18px; padding: 0 5px; font-size: 11px; font-weight: 800; display: inline-flex; align-items: center; justify-content: center; }
.v2 .banner-carted { background: #2D3547; color: #FFFFFF; border-radius: 4px; padding: 10px 14px; font-size: 13px; font-weight: 700; display: flex; gap: 12px; }   /* roundM30-b(대표자 2026-11-01): 초록 → 어두운 남회색 바탕에 흰 글자(PC·폰 같음) */
.v2 .banner-carted a { color: #FFFFFF; text-decoration: underline; }
.v2 .dcart-form { display: flex; gap: 8px; }
.v2 .dcart-form input[type="number"] { width: 76px; border: 1px solid var(--v2-line); border-radius: 4px; padding: 0 10px; font-family: inherit; font-size: 14px; }
.v2 .dcart-form .btn-lg { flex-grow: 1; width: auto; }
.v2 .cart-group { background: var(--v2-surface); border: 1px solid var(--v2-line); border-radius: 6px; padding: 18px 20px; display: flex; flex-direction: column; gap: 12px; margin-bottom: 14px; }
.v2 .cart-group .g-title { font-size: 15px; font-weight: 800; }
.v2 .cart-sub { display: flex; flex-wrap: wrap; justify-content: flex-end; align-items: center; gap: 10px 14px; }   /* round218: 좁은 화면에서 합계·버튼이 겹치지 않게 줄바꿈 */
/* round215(대표자): 옵션이 있는 상품은 한 품목 아래 옵션 줄을 계층으로 — 머리 줄(상품명) + 옵션 줄(└ 묶음: 값) */
.v2 .cart-prow td { background: #FAFAFB; font-weight: 700; }
/* round218(대표자): 장바구니에도 썸네일 — 상품 줄(머리 줄·옵션 없는 줄) 이름 앞 48px */
.v2 .cart-thumb { width: 48px; height: 48px; object-fit: cover; border: 1px solid var(--v2-line); border-radius: 6px; background: #EFF1F0; display: inline-block; vertical-align: middle; margin-right: 10px; flex-shrink: 0; }
.v2 .cart-name { display: inline-flex; align-items: center; gap: 0; min-width: 0; }
.v2 .cart-prow td small { font-weight: 500; color: var(--v2-muted); margin-left: 6px; }
.v2 .cart-orow .opt-sub { display: inline-block; position: relative; padding-left: 18px; color: var(--v2-text); }
.v2 .cart-orow .opt-sub::before { content: ""; position: absolute; left: 4px; top: 2px; width: 7px; height: 9px; border-left: 1px solid #C9CDD3; border-bottom: 1px solid #C9CDD3; }
.v2 .cart-sub .sum { font-size: 18px; font-weight: 800; }
.v2 .empty { display: flex; flex-direction: column; align-items: center; gap: 10px; padding: 64px 0; color: var(--v2-muted); }
.v2 .empty .empty-t { font-size: 17px; font-weight: 800; color: var(--v2-text); }
.v2 .sec > section { display: flex; flex-direction: column; gap: 12px; }
.v2 .home-top { display: flex; gap: 14px; align-items: stretch; }
.v2 .banner-main { flex-grow: 1; display: flex; flex-direction: column; justify-content: center; align-items: flex-start; gap: 12px; padding: 40px 44px; min-height: 180px; position: relative; overflow: hidden; }
.v2 .banner-img { flex-grow: 1; display: block; border-radius: 6px; overflow: hidden; min-height: 180px; }
.v2 .banner-img img { width: 100%; height: 100%; object-fit: cover; display: block; }
.v2 .banner-deco { position: absolute; right: 40px; top: 50%; transform: translateY(-50%); width: 150px; height: 150px; pointer-events: none; }
.v2 .banner-main .sub { font-size: 14px; }
.v2 .banner-main .t { font-size: 27px; font-weight: 800; color: #FFFFFF; line-height: 1.35; letter-spacing: -0.01em; }
/* round187(계약 §4-187): 사이드박스(로그인·주문·장바구니 상자) 제거 → 오른쪽 416px = 국내산 확인 업체 배너(cert 구역이 켜져 있을 때만, certListings 첫 항목) */
/* round187-b·188-b(대표자): 확인 업체 배너 = 흰색→옅은 남색 그라데이션, 제목 글자('국산24 인증 국내산 확인 업체')만 금색 */
.v2 .cert-banner { width: 416px; flex-shrink: 0; box-sizing: border-box; background: linear-gradient(160deg, #FFFFFF, #EEF1F5); border: 1px solid var(--v2-line); border-radius: 6px; padding: 28px; display: flex; flex-direction: column; justify-content: center; gap: 10px; position: relative; overflow: hidden; }
/* round192(계약 §2.2): 바탕에 우리나라 지도(남색 8%) — 글자는 위(z-index 1), 대비 변화 없음 */
.v2 .cert-banner .cb-map { position: absolute; right: 8px; bottom: -12px; width: 200px; height: 300px; object-fit: contain; object-position: right bottom; opacity: .08; pointer-events: none; }   /* round199: 대표자 제공 지도 파일(/img/map-kr.svg, 시·도 경계) */
.v2 .cert-banner > :not(.cb-map) { position: relative; z-index: 1; }
/* round192: 업체 카드 교대 — 같은 칸에 겹쳐 두고 .on만 보인다(store-home.js, 4초·페이드 .45s·호버 정지) */
.v2 .cert-banner .cb-rows { display: grid; margin-top: 6px; }
.v2 .cert-banner .cb-rows .cb-row { grid-area: 1 / 1; margin-top: 0; opacity: 0; transition: opacity .45s ease; pointer-events: none; }
.v2 .cert-banner .cb-rows .cb-row.on { opacity: 1; pointer-events: auto; }
.v2 .cert-banner .cb-label { display: inline-flex; align-items: center; gap: 6px; font-size: 13px; font-weight: 800; color: #9C6B00; }
.v2 .cert-banner .cb-label svg { width: 16px; height: 16px; }
.v2 .cert-banner .cb-desc { font-size: 13px; color: var(--v2-muted); line-height: 1.5; }
.v2 .cert-banner .cb-t { font-size: 22px; font-weight: 800; line-height: 1.35; color: var(--v2-ink); }
.v2 .cert-banner .cb-row { display: flex; align-items: center; gap: 10px; margin-top: 6px; padding: 10px 12px; background: var(--v2-surface); border: 1px solid var(--v2-line); border-radius: 4px; color: var(--v2-text); }
.v2 .cert-banner .cb-row:hover { text-decoration: none; border-color: var(--v2-muted2); }
.v2 .cert-banner .cb-ic { flex: none; width: 36px; height: 36px; border-radius: 999px; background: var(--v2-ink-bg); color: var(--v2-ink); display: inline-flex; align-items: center; justify-content: center; }
.v2 .cert-banner .cb-ic svg { width: 20px; height: 20px; }
.v2 .cert-banner .cb-n { font-weight: 800; font-size: 14px; display: block; }
.v2 .cert-banner .cb-a { font-size: 12px; color: var(--v2-muted); display: block; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.v2 .cert-banner .cb-go { margin-left: auto; flex: none; font-size: 13px; font-weight: 700; color: var(--v2-ink); }   /* 배지 대신 '위치보기'(대표자) */
.v2 .cert-banner .cb-empty { font-size: 13px; color: var(--v2-muted); }
/* round225·226(대표자 6): 확인 업체 배너 = 작은 지도(네이버맵, 키 있을 때)만 — 목록은 아래 certbox 구역 */
.v2 .cert-banner .cb-mini-map { height: 170px; margin-top: 10px; border: 1px solid var(--v2-line); border-radius: 6px; background: #EEF1F5; overflow: hidden; }
.v2 .cert-banner .cb-head { display: flex; align-items: center; justify-content: space-between; gap: 8px; }   /* round226: 라벨 + [더 보기] */
.v2 .cert-banner .cb-more { flex: none; font-size: 13px; font-weight: 700; color: var(--v2-ink); }
.v2 .cert-banner .cb-label .cb-mark-lg { width: 22px; height: 22px; }
.v2 .cert-banner .cb-mini-map { height: 200px; }
.v2 .sb-t { font-size: 14px; font-weight: 800; }
.v2 .cat-tiles { display: grid; grid-template-columns: repeat(8, minmax(0, 1fr)); gap: 10px; }
/* round187(대표자): 카테고리 15 + [전체] = 한 줄, 옆으로 넘김(.hrow 공용 화살표·스크롤). 자리 150·오브젝트 110(계약 §2), 모바일 68·52 */
.v2 .cat-track { gap: 0; scroll-snap-type: x proximity; }
.v2 .cat-track .cat-tile { flex: 0 0 auto; width: 112px; scroll-snap-align: start; border: 0; background: transparent; padding: 6px 0 8px; font-size: 12px; gap: 6px; }   /* round188-b: 한 줄에 11개 정도(1280 / 112) */
.v2 .cat-track .cat-tile:hover { text-decoration: none; }   /* round193: 자손 선택자 — 모바일 .cat-page 안에서도 적용 */
.v2 .cat-track .cat-tile:hover span:last-child { text-decoration: underline; }
.v2 .cat-track .cat-all-ic { width: 80px; height: 80px; border-radius: 999px; background: var(--v2-ink-bg); color: var(--v2-ink); display: flex; align-items: center; justify-content: center; }
.v2 .cat-track .cat-all-ic svg { width: 40px; height: 40px; }
/* round53 BS1·BS4 → 라운드 56 F1·F3·F4: 배너 슬라이드 — 그리드 스택(높이 = 가장 큰 슬라이드의 자연 높이 = 초창기 배너), 컨트롤 우하단 상시 */
.v2 .hero { position: relative; flex-grow: 1; min-width: 0; display: grid; min-height: 320px; aspect-ratio: 17 / 8; border-radius: 6px; overflow: hidden; background: var(--v2-ink); }   /* round187: 시안 배너 848×320(사이드박스 제거로 폭은 흐름). roundM32-b: PC 비율 17:8(1280 창에서 850×400 = 이미지 1700×800의 절반) — 옆 업체 상자가 더 높으면 그 높이로 늘어난다(stretch) */
.v2 .hero .bnr picture { display: contents; }   /* roundM32-b: 폰 소스(<source media>)를 감싼 picture는 상자를 만들지 않는다 — .bnr-bg는 전과 같이 .bnr 기준 절대 배치 */
.v2 .hero .hero-slide { grid-area: 1 / 1; opacity: 0; transition: opacity .45s ease; pointer-events: none; }
.v2 .hero .hero-slide.on { opacity: 1; pointer-events: auto; }
.v2 .hero .banner-img { position: relative; border-radius: 0; min-height: 0; }
/* 이미지는 높이를 정하지 않는다(세로 긴 이미지가 레이아웃을 키우지 않게) — 높이 = 텍스트 슬라이드 자연 높이 또는 min-height·sidebox */
.v2 .hero .banner-img img { position: absolute; inset: 0; width: 100%; height: 100%; object-fit: cover; display: block; }
/* 라운드 61 지시 1: 이미지 배너 캡션(부제·제목·버튼) — 하단 그라데이션 위 */
.v2 .hero .banner-img::after { content: ""; position: absolute; inset: 0; background: linear-gradient(180deg, rgba(0,0,0,0) 35%, rgba(0,0,0,.55) 100%); pointer-events: none; }
/* round88 H9·H10: 통일 배너(.bnr) — 이미지든 텍스트든 같은 상자·같은 캡션. 위치 = pos-{세로 t/m/b}{가로 l/c/r} */
.v2 .hero .bnr { position: relative; display: flex; padding: 36px 44px; box-sizing: border-box; overflow: hidden; border-radius: 0; }
.v2 .hero .bnr .bnr-bg { position: absolute; inset: 0; width: 100%; height: 100%; object-fit: cover; display: block; }
.v2 .hero .bnr.ov::after { content: ""; position: absolute; inset: 0; background: rgba(0, 0, 0, .38); pointer-events: none; }
.v2 .hero .bnr .bnr-cap { position: relative; z-index: 1; display: flex; flex-direction: column; gap: 10px; max-width: 70%; }
.v2 .hero .bnr .bnr-hit { position: absolute; inset: 0; z-index: 1; display: block; }   /* roundM30-c(대표자 2026-11-01): 버튼 문구를 비운 배너는 배너 전체가 링크(글자·이미지 위를 덮는 투명 링크, 컨트롤은 z-index 2) */
.v2 .hero .bnr .bnr-hit:focus-visible { outline: 0.5px solid #FFD43B; outline-offset: -3px; }
.v2 .hero .bnr .bnr-cap p { margin: 0; }
.v2 .hero .bnr .bnr-stage { position: absolute; inset: 28px 44px 40px; z-index: 1; }
.v2 .hero .bnr .bnr-free { position: absolute; margin: 0; max-width: 80%; }
.v2 .hero .bnr .bnr-free p { margin: 0 0 8px; white-space: nowrap; word-break: keep-all; }   /* round230(리뷰 1-2): 단어 중간 줄바꿈 금지 */
@media (max-width: 1100px) { .v2 .hero .bnr .bnr-free p { white-space: normal; } }   /* round230(리뷰 1-2): 2단(지도 카드 옆) 폭에서 한 줄 고정이면 잘린다 */
.v2 .hero .bnr.has-img .bnr-free { text-shadow: 0 1px 3px rgba(0, 0, 0, .45); } .v2 .hero .bnr a.bnr-free { text-shadow: none; white-space: nowrap; }
@media (max-width: 720px) { .v2 .hero .bnr .bnr-stage { inset: 16px 16px 40px; } .v2 .hero .bnr .bnr-free p { white-space: normal; } }
.v2 .hero .bnr .sub { font-size: 14px; color: #D5D8DD; }
.v2 .hero .bnr .t { font-size: 27px; font-weight: 800; color: #FFFFFF; line-height: 1.35; letter-spacing: -0.01em; }
.v2 .hero .bnr.has-img .bnr-cap { text-shadow: 0 1px 3px rgba(0, 0, 0, .45); }
.v2 .hero .bnr.has-img .bnr-cap .btn { text-shadow: none; }
.v2 .hero .bnr.tone-dark .sub { color: #3A4150; } .v2 .hero .bnr.tone-dark .t { color: #14181F; } .v2 .hero .bnr.tone-dark .bnr-cap { text-shadow: none; }
.v2 .hero .bnr.pos-tl, .v2 .hero .bnr.pos-tc, .v2 .hero .bnr.pos-tr { align-items: flex-start; }
.v2 .hero .bnr.pos-ml, .v2 .hero .bnr.pos-mc, .v2 .hero .bnr.pos-mr { align-items: center; }
.v2 .hero .bnr.pos-bl, .v2 .hero .bnr.pos-bc, .v2 .hero .bnr.pos-br { align-items: flex-end; padding-bottom: 44px; }
.v2 .hero .bnr.pos-tl, .v2 .hero .bnr.pos-ml, .v2 .hero .bnr.pos-bl { justify-content: flex-start; }
.v2 .hero .bnr.pos-tc, .v2 .hero .bnr.pos-mc, .v2 .hero .bnr.pos-bc { justify-content: center; }
.v2 .hero .bnr.pos-tr, .v2 .hero .bnr.pos-mr, .v2 .hero .bnr.pos-br { justify-content: flex-end; }
.v2 .hero .bnr.pos-tl .bnr-cap, .v2 .hero .bnr.pos-ml .bnr-cap, .v2 .hero .bnr.pos-bl .bnr-cap { align-items: flex-start; text-align: left; }
.v2 .hero .bnr.pos-tc .bnr-cap, .v2 .hero .bnr.pos-mc .bnr-cap, .v2 .hero .bnr.pos-bc .bnr-cap { align-items: center; text-align: center; }
.v2 .hero .bnr.pos-tr .bnr-cap, .v2 .hero .bnr.pos-mr .bnr-cap, .v2 .hero .bnr.pos-br .bnr-cap { align-items: flex-end; text-align: right; }
@media (max-width: 720px) { .v2 .hero .bnr { padding: 22px 18px 40px; } .v2 .hero .bnr .t { font-size: 19px; } .v2 .hero .bnr .bnr-cap { max-width: 100%; } }
.v2 .home-split.one { grid-template-columns: minmax(0, 1fr); }
.v2 .home-split.one .split-grid { grid-template-columns: repeat(5, minmax(0, 1fr)); }
.v2 .home-split > section { gap: 12px; }
.v2 .hero-cap { position: absolute; left: 44px; right: 44px; bottom: 26px; z-index: 1; display: flex; flex-direction: column; align-items: flex-start; gap: 8px; color: #FFFFFF; text-shadow: 0 1px 3px rgba(0,0,0,.5); }
.v2 .hero-cap .sub { font-size: 14px; color: #E5E7EB; }
.v2 .hero-cap .t { font-size: 26px; font-weight: 800; line-height: 1.3; letter-spacing: -0.01em; }
.v2 .hero-cap .btn { text-shadow: none; }
/* 라운드 61 지시 3: 5장 가로 트랙 */
/* 라운드 88 H8: 홈 두 번째 줄 = 상품 카드 절반 + 국내산 확인 업체 절반 */
/* round187: 두 구역을 나란히(절반씩) 두지 않고 위아래 전체 폭 — 신상품 5열 정사각, 확인 업체 3열 카드 */
.v2 .home-split { display: grid; grid-template-columns: minmax(0, 1fr); gap: 28px; align-items: stretch; }
.v2 .home-split > section { min-width: 0; display: flex; flex-direction: column; }
.v2 .split-grid { display: grid; grid-template-columns: repeat(5, minmax(0, 1fr)); gap: 14px; }
.v2 .split-grid .card .thumb { height: auto; aspect-ratio: 1 / 1; }
.v2 .certbox { display: grid; grid-template-columns: repeat(3, minmax(0, 1fr)); gap: 14px; }   /* round187: 상자 한 개 → 업체 카드 3열 */
.v2 .certbox a.certrow { display: flex; align-items: center; gap: 12px; padding: 14px 16px; border: 1px solid var(--v2-line); border-radius: 6px; background: var(--v2-surface); color: var(--v2-text); min-width: 0; }
.v2 .certbox a.certrow:hover { border-color: var(--v2-muted2); }
.v2 .certbox .cert-empty { grid-column: 1 / -1; }
.v2 .certbox a.certrow:hover { text-decoration: none; color: var(--v2-ink); }
.v2 .certbox .cert-ic { flex: none; width: 34px; height: 34px; border-radius: 999px; background: var(--v2-green-bg); color: var(--v2-green); display: inline-flex; align-items: center; justify-content: center; }
.v2 .certbox .cert-ic svg { width: 18px; height: 18px; }
.v2 .certbox .cert-mark { flex: none; width: 34px; height: 34px; }   /* round226(대표자 7): 행 앞 원형 엠블럼 */
.v2 .sec-t .sec-mark { width: 26px; height: 26px; vertical-align: -6px; margin-right: 6px; }
.v2 .certbox .cert-t { min-width: 0; flex: 1; }
.v2 .certbox .cert-n { font-weight: 800; font-size: 14px; display: block; }
.v2 .certbox .cert-a { font-size: 12px; color: var(--v2-muted); display: block; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.v2 .certbox .cert-r { flex: none; font-size: 12px; color: var(--v2-muted); }
.v2 .certbox .cert-empty { margin: auto; padding: 24px 0; text-align: center; color: var(--v2-muted); font-size: 13px; line-height: 2.4; }
/* round196(대표자 지적 2): 모바일 홈의 상품 줄은 전부 한 줄 — 신상품(.split-grid)도 2장 넘으면 옆으로 넘긴다(셋째 카드가 14px 보여 넘길 수 있음을 알린다, .hrow-track과 같은 폭 공식) */
@media (max-width: 900px) { .v2 .home-split { grid-template-columns: 1fr; } .v2 .split-grid { display: flex; gap: 10px; overflow-x: auto; scroll-snap-type: x mandatory; scrollbar-width: none; } .v2 .split-grid::-webkit-scrollbar { display: none; } .v2 .split-grid > .card { flex: 0 0 calc((100% - 24px) / 2); min-width: 0; scroll-snap-align: start; } .v2 .certbox { grid-template-columns: 1fr; gap: 8px; } }
.v2 .hrow { position: relative; }
.v2 .hrow-track { display: flex; gap: 14px; overflow-x: auto; scroll-snap-type: x mandatory; scrollbar-width: none; padding-bottom: 2px; }
.v2 .hrow-track::-webkit-scrollbar { display: none; }
.v2 .hrow-track > .card { flex: 0 0 calc((100% - 56px) / 5); scroll-snap-align: start; }
.v2 .hrow-track > .card .thumb { height: auto; aspect-ratio: 1 / 1; }   /* round187: 정사각 사진(시안) */
.v2 .hrow-nav { position: absolute; top: 50%; transform: translateY(-50%); width: 36px; height: 36px; border-radius: 999px; border: 1px solid var(--v2-line); background: var(--v2-surface); color: var(--v2-ink); display: none; align-items: center; justify-content: center; cursor: pointer; z-index: 2; box-shadow: 0 2px 8px rgba(0,0,0,.12); padding: 0; }
.v2 .hrow.has-more .hrow-nav { display: flex; }
.v2 .hrow-nav svg { width: 18px; height: 18px; }
.v2 .hrow-nav.prev { left: -18px; } .v2 .hrow-nav.next { right: -18px; }
.v2 .hrow-nav:disabled { opacity: .35; cursor: default; }
.v2 .hero-ctl { position: absolute; right: 12px; bottom: 10px; display: flex; align-items: center; gap: 8px; z-index: 2; padding: 4px 6px; border-radius: 999px; background: rgba(17,17,17,.45); }
.v2 .hero-nav { width: 24px; height: 24px; border-radius: 999px; border: 0; background: rgba(255,255,255,.9); color: var(--v2-ink); display: flex; align-items: center; justify-content: center; cursor: pointer; padding: 0; }
.v2 .hero-nav svg { width: 14px; height: 14px; }
.v2 .hero-nav:hover { background: #FFFFFF; }
.v2 .hero-nav:focus-visible { outline: 0.5px solid #FFD43B; outline-offset: 2px; }
.v2 .hero-dots { display: flex; align-items: center; gap: 6px; }
.v2 .hero-dots button { width: 8px; height: 8px; padding: 0; border-radius: 999px; border: 0; background: rgba(255,255,255,.5); cursor: pointer; position: relative; }
.v2 .hero-dots button::after { content: ""; position: absolute; inset: -8px; }   /* round230(리뷰 접근성): 점은 8px 그대로, 누르는 영역은 24px */
.v2 .hero-dots button.on { background: #FFFFFF; width: 18px; }
.v2 .hero-dots button:focus-visible { outline: 0.5px solid #FFD43B; outline-offset: 2px; }
/* round53 CP1·CP3: 빵부스러기·카드 경로 */
.v2 .crumbs { display: flex; flex-wrap: wrap; align-items: center; gap: 4px; font-size: 13px; color: var(--v2-muted); margin: -8px 0 12px; }
.v2 .crumbs a { color: var(--v2-muted); }
.v2 .crumbs a.cur { color: var(--v2-ink); font-weight: 800; }
.v2 .crumbs .sep { color: var(--v2-muted2); }
.v2 .pcat { font-size: 11px; color: var(--v2-muted); white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
.v2 .fc-chain { font-size: 12px; color: var(--v2-muted); line-height: 1.5; }
.v2 .fc-chain a.cur { color: var(--v2-ink); font-weight: 800; }
.v2 .cat-tile { background: var(--v2-surface); border: 1px solid var(--v2-line); border-radius: 6px; padding: 14px 6px 12px 6px; text-align: center; font-size: 13px; font-weight: 700; display: flex; flex-direction: column; align-items: center; gap: 8px; }
.v2 .cat-tile:hover { border-color: var(--v2-muted2); text-decoration: none; }
.v2 .cat-tile-ic { width: 44px; height: 44px; border-radius: 999px; background: var(--v2-ink-bg); color: var(--v2-ink); display: flex; align-items: center; justify-content: center; color: var(--v2-ink-soft); }
.v2 .cat-tile-ic .cat-ic { width: 22px; height: 22px; }
.v2 .cat-tile:hover .cat-tile-ic { background: var(--v2-ink); color: #FFFFFF; }
/* round225(대표자 3): 마이페이지 타일 = 사물 이미지(/img/my/, layout/my-image, P225-1). 이미지가 없는 키는 선 아이콘·회색 원 그대로 */
.v2 .my-tiles .my-ic:has(img), .v2 .my-tiles .cat-tile.on .my-ic:has(img), .v2 .my-tiles .cat-tile:hover .my-ic:has(img) { width: 56px; height: 56px; background: transparent; border: 0; }   /* round226: .my-tiles .cat-tile-ic(40px 남색 상자)보다 앞선다 */
.v2 .my-ic img { width: 48px; height: 48px; object-fit: contain; display: block; }
.v2 .my-ic:has(img) svg { display: none; }
/* round186: 홈 카테고리 타일 = 사물 이미지(자리 150·오브젝트 110, 모바일 68·52 — 계약 §2). 선 아이콘(.cat-tile-ic)은 마이페이지 타일·폴백에 남는다 */
.v2 .cat-tile-img { width: 80px; height: 80px; display: flex; align-items: center; justify-content: center; }   /* round188-b: 110 → 80(한 줄 10~12개) */
.v2 .cat-tile-img img { width: 80px; height: 80px; object-fit: contain; display: block; }
.v2 .cat-tile-img .cat-ic { width: 44px; height: 44px; color: var(--v2-ink-soft); }
/* my-page menu: same card size and position on every my page, whatever the page container width is (content 680 / content-wide 1100 / wrap 1280) */
.v2 .my-tiles { display: grid; grid-template-columns: repeat(9, minmax(0, 1fr)); gap: 8px; width: min(1036px, calc(100vw - 48px)); position: relative; left: 50%; transform: translateX(-50%); margin: 0 0 20px; }
.v2 .my-tiles .cat-tile { padding: 14px 6px 12px; font-size: 12px; font-weight: 500; color: var(--v2-muted); line-height: 1.3; word-break: keep-all; min-width: 0; min-height: 100px; box-sizing: border-box; }   /* round211(207-d): 라벨 Caption 12/500, 선택만 700 */
/* wishlist / restock pages use main.wrap.sec (32px top padding, no app.css reset): align the menu with the other my pages (24px) */
.v2 main.sec > section:first-child > .my-tiles:first-child, .v2 main.sec > .my-tiles:first-child, .v2 main.sec > section:first-child > .my-tiles-wrap:first-child > .my-tiles, .v2 main.sec > .my-tiles-wrap:first-child > .my-tiles { margin-top: -8px; }
.v2 .my-tiles-wrap { position: relative; }
.v2 .my-tiles .cat-tile-ic { width: 40px; height: 40px; border-radius: 12px; background: var(--v2-ink-bg); border: 0; }   /* round211: 44 원 → 40 둥근 사각 */
.v2 .my-tiles svg { width: 20px; height: 20px; }
.v2 .my-tiles .cat-tile.on { border-color: var(--v2-ink); color: var(--v2-ink); font-weight: 700; }
.v2 .my-tiles .cat-tile.on .cat-tile-ic { background: var(--v2-ink); color: #FFFFFF; }
.v2 .strip2 { display: grid; grid-template-columns: 1fr 1fr; gap: 14px; }
.v2 .strip { background: var(--v2-surface); border: 1px solid var(--v2-line); border-radius: 6px; padding: 20px 22px; display: flex; flex-direction: column; gap: 6px; }
.v2 .strip-t { font-weight: 800; font-size: 15px; }
.v2 .strip-d { font-size: 13px; color: var(--v2-muted); line-height: 1.6; }
.v2 .listwrap { display: flex; gap: 24px; align-items: flex-start; }
.v2 .listwrap.no-side .grid4 { grid-template-columns: repeat(5, minmax(0, 1fr)); } /* 라운드 63 지시 5: 필터 없는 목록은 5열 */
.v2 .sidebar { width: 170px; flex-shrink: 0; background: var(--v2-surface); border: 1px solid var(--v2-line); border-radius: 6px; padding: 16px; }
.v2 .sidebar nav { display: flex; flex-direction: column; gap: 8px; margin-top: 10px; font-size: 13px; }
.v2 .sidebar a.on { font-weight: 800; }
.v2 .listmain { flex-grow: 1; min-width: 0; display: flex; flex-direction: column; gap: 14px; }
.v2 .sortbar { display: flex; gap: 16px; font-size: 13px; }
.v2 .sortbar a { color: var(--v2-muted); }
.v2 .sortbar a.on { color: var(--v2-text); font-weight: 800; }
/* round188(계약 §4-188): 도구막대 — 보기 전환(모바일만)·정렬 드롭다운·필터 버튼(모바일만) */
.v2 .toolbar { align-items: center; gap: 8px; }
.v2 .toolbar .vw { display: none; gap: 2px; }
.v2 .toolbar .vw button { width: 36px; height: 36px; border: 0; border-radius: 4px; background: transparent; color: var(--v2-muted); display: flex; align-items: center; justify-content: center; cursor: pointer; padding: 0; }
.v2 .toolbar .vw button svg { width: 20px; height: 20px; }
.v2 .toolbar .vw button[aria-pressed="true"] { background: var(--v2-ink); color: #FFFFFF; }   /* roundM28-b: 원복 */
.v2 .sortdd { position: relative; margin-left: auto; }
.v2 .sortdd summary { list-style: none; display: inline-flex; align-items: center; gap: 4px; height: 36px; padding: 0 8px; font-size: 13px; font-weight: 700; color: var(--v2-text); cursor: pointer; user-select: none; }
.v2 .sortdd summary::-webkit-details-marker { display: none; }
.v2 .sortdd summary svg { width: 16px; height: 16px; } .v2 .sortdd summary .chev { width: 14px; height: 14px; color: var(--v2-muted); }
.v2 .sortdd[open] summary .chev { transform: rotate(180deg); }
.v2 .sortdd-menu { position: absolute; right: 0; top: 100%; z-index: 5; width: 150px; margin-top: 4px; padding: 6px 0; background: var(--v2-surface); border: 1px solid var(--v2-line); border-radius: 6px; box-shadow: 0 6px 18px rgba(13,22,43,.16); display: flex; flex-direction: column; }
.v2 .sortdd-menu a { display: flex; align-items: center; justify-content: space-between; height: 44px; padding: 0 14px; font-size: 14px; color: var(--v2-text); }
.v2 .sortdd-menu a:hover { background: var(--v2-bg); text-decoration: none; }
.v2 .sortdd-menu a.on { font-weight: 800; color: var(--v2-ink); background: var(--v2-bg); }
.v2 .sortdd-menu a.on::after { content: ""; width: 16px; height: 16px; background-color: currentColor; -webkit-mask: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='%23000' stroke-width='2.2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M5 12l5 5 9-10'/%3E%3C/svg%3E") center / contain no-repeat; mask: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='%23000' stroke-width='2.2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M5 12l5 5 9-10'/%3E%3C/svg%3E") center / contain no-repeat; }
.v2 .fc-toggle { display: none; height: 36px; gap: 4px; }
.v2 .fc-toggle svg { width: 16px; height: 16px; }
.v2 .fc-toggle .fc-cnt { min-width: 18px; height: 18px; border-radius: 999px; background: var(--v2-ink); color: #FFFFFF; font-size: 11px; display: inline-flex; align-items: center; justify-content: center; padding: 0 5px; }
.v2 .fc-sheet-h, .v2 .fc-sheet-f { display: none; }
.v2 .dwrap { display: flex; gap: 32px; align-items: stretch; } /* 라운드 63 지시 3: 정보 패널 높이 = 이미지 + 썸네일 */
.v2 .dgallery { flex: 1 1 0; min-width: 0; display: flex; flex-direction: column; gap: 10px; }   /* 라운드 85-b 지시 1: 갤러리·정보 반반 */
.v2 .dmain { position: relative; aspect-ratio: 1 / 1; height: auto; background: #EFF1F0; border: 1px solid var(--v2-line); border-radius: 6px; display: flex; align-items: center; justify-content: center; color: var(--v2-muted2); font-size: 13px; overflow: hidden; }
.v2 .dmain img { width: 100%; height: 100%; object-fit: cover; }   /* round215(대표자): 예전처럼 꽉 채움 — 500 원본도 칸에 맞춰 늘린다(213의 contain 되돌림) */
.v2 .dthumbs { display: flex; gap: 8px; }
.v2 .dthumbs img { width: 64px; height: 64px; object-fit: cover; border: 1px solid var(--v2-line); border-radius: 4px; }
.v2 .dthumbs img.selected { border-color: var(--v2-ink); }
/* 라운드 61 지시 7 → 라운드 63 지시 3: 상단(카테고리·상품명·별점·배지·가격)은 촘촘히, 총 상품금액·구매 블록은 아래로 밀어 갤러리 높이에 맞춘다(스크롤 없음) */
/* 라운드 85-c: 정보 패널 리듬은 변수 4개로만 조정(간격·행 간격·본문 글자) — 개별 요소에 픽셀을 흩뿌리지 않는다 */
/* 2026-09-16 지시 5: 정보 패널 리듬은 글자 크기 하나(--dinfo-fs)에서 파생 — 13px 기준 10·4·3px(85-c 값)와 같고, 글자를 키우면 간격도 같은 비율로 따라온다 */
/* 라운드 89: 간격은 사용자 지정 값(패널 gap 15px·검증 카드 gap 15px·정보 행 padding 11px) — 바꾸려면 이 세 숫자만 */
/* 라운드 88: 정보 패널 재설계 — 본문 13px 고정, 행은 한 줄(라벨 72px + 값), 가는 구분선, 촘촘한 간격. 구매 블록은 패널 아래에 붙는다 */
.v2 .dinfo { --dinfo-fs: 13px; flex: 1 1 0; min-width: 0; display: flex; flex-direction: column; gap: 15px; background: var(--v2-surface); border: 1px solid var(--v2-line); border-radius: 6px; padding: 18px 22px; box-sizing: border-box; font-size: var(--dinfo-fs); }
/* round208(시안 3): 오른쪽 열 — 상자 없이, 배지 칩 → 상호·산지 → 제목 → 리뷰·구매 수 → 가격 → 추가할인 → 검증 상자 → 상품정보 틀 */
.v2 .dinfo { border: 0; padding: 0; gap: 12px; }
.v2 .dchips { display: flex; gap: 6px; margin: 0; }
.v2 .dinfo .dchips .b-vrf.mini { height: 24px; font-size: var(--t-caption); padding: 0 9px 0 4px; background: var(--bdg-state-bg); color: var(--v2-ink); box-shadow: none; }   /* 레퍼런스의 작은 회색 칩 */
.v2 .dinfo .dchips .b-vrf.mini .sh { box-shadow: none; }
.v2 .dstore { margin: 0; font-size: 13px; color: var(--v2-muted); }
.v2 .dstore b { font-weight: 500; color: var(--v2-text); }
.v2 .dinfo .dname { font-size: 22px; font-weight: 700; line-height: var(--t-lh-title); letter-spacing: var(--t-ls-title); margin: 0; }
.v2 .drv { display: flex; align-items: center; gap: 12px; flex-wrap: wrap; margin: 0; font-size: 14px; }
.v2 .drv-star { font-weight: 800; color: var(--v2-text); display: inline-flex; align-items: center; gap: 4px; }
.v2 .drv-star .ic { color: var(--v2-ink); width: 15px; height: 15px; }
.v2 .drv-cnt { color: var(--v2-text); text-decoration: underline; text-underline-offset: 3px; }
.v2 .drv-bought { display: inline-flex; align-items: center; gap: 5px; height: 26px; padding: 0 9px; border-radius: 4px; background: var(--v2-ink-bg); color: var(--v2-ink); font-size: 13px; font-weight: 700; }
.v2 .drv-bought svg { width: 14px; height: 14px; }
.v2 .dpr { margin: 6px 0 4px; padding-bottom: 0; border-bottom: 0; }   /* round210(대표자): 가격 아래 선 삭제 — 구역 선은 .dsec2 위쪽 선이 맡는다 */
.v2 .dpr-was { margin: 0 0 2px; font-size: 15px; color: var(--v2-muted); text-decoration: line-through; }
.v2 .dinfo .dpr .dprice { padding-bottom: 0; }
.v2 .dinfo .dpr .sale-rate { font-size: 24px; margin-right: 8px; }
.v2 .dsec2 { display: block; padding: 16px 20px; border-top: 1px solid var(--v2-line); font-size: 14px; }   /* round210(대표자 "검증정보 라인에 맞춤"): 상자와 같은 안쪽 여백 20px, 머리글 위·라벨/값 열 아래 — 검수 승인·산지·생산자와 같은 열 */
.v2 .dsec2-h { font-weight: 700; font-size: 16px; line-height: 1.5; margin: 0 0 10px; letter-spacing: var(--t-ls-title); }   /* round210: 검증 정보 머리글과 같은 16/700 */
.v2 .dkv { display: grid; grid-template-columns: 84px minmax(0, 1fr); gap: 8px 12px; margin: 0; }
.v2 .dkv dt { color: var(--v2-muted); font-size: 13px; line-height: 1.5; }
.v2 .dkv dd { margin: 0; font-weight: 500; line-height: 1.5; min-width: 0; }
.v2 .dsec2 .dcoupons { padding: 0; border: 0; }
/* round209 D3: 옵션 선택 — 라디오 행(이름 / 가격), 고른 행 남색, 품절 행 흐리게 */
.v2 .dopt-list { display: flex; flex-direction: column; }
.v2 .dopt { display: flex; align-items: center; gap: 10px; padding: 8px 0; border-top: 1px solid #F0F1F3; cursor: pointer; font-size: 14px; }
.v2 .dopt:first-child { border-top: 0; }
.v2 .dopt input { width: 18px; height: 18px; margin: 0; accent-color: var(--v2-ink); }
.v2 .dopt-name { flex: 1; font-weight: 500; }
.v2 .dopt-price { font-weight: 700; display: inline-flex; align-items: center; gap: 6px; }
.v2 .dopt-price small { font-size: 11px; font-weight: 700; color: var(--bdg-state); background: var(--bdg-state-bg); border-radius: 4px; padding: 0 6px; height: 20px; line-height: 20px; }
.v2 .dopt.is-out { opacity: .55; cursor: not-allowed; }
/* round217(대표자): 선택형(라디오) 행은 두 칸 — 옵션명 | 추가금(할인·플러스) 오른쪽 정렬 */
.v2 .dopt-group:not([data-kind="IMAGE"]) .dopt { display: grid; grid-template-columns: 18px minmax(0, 1fr) minmax(0, 1fr); }
.v2 .dopt-group:not([data-kind="IMAGE"]) .dopt-price { justify-self: end; justify-content: flex-end; text-align: right; }
/* round212: 묶음 머리 + 사진형(쿠팡 상세 관례: 64px 썸네일, 고르면 남색 테두리와 체크) */
.v2 .dopt-group { margin-top: 6px; }
.v2 .dopt-group + .dopt-group { margin-top: 12px; }
.v2 .dopt-gname { font-size: 13px; font-weight: 700; color: var(--v2-muted); margin-bottom: 2px; }
.v2 .dopt-group[data-kind="IMAGE"] .dopt-list { flex-direction: row; flex-wrap: wrap; gap: 8px; }
.v2 .dopt-group[data-kind="IMAGE"] .dopt { flex-direction: column; align-items: center; gap: 4px; width: 72px; padding: 4px; border: 2px solid var(--v2-line); border-radius: 6px; position: relative; font-size: 12px; text-align: center; }
.v2 .dopt-group[data-kind="IMAGE"] .dopt input { position: absolute; opacity: 0; width: 1px; height: 1px; }
.v2 .dopt-group[data-kind="IMAGE"] .dopt:has(input:checked) { border-color: var(--v2-ink); }
.v2 .dopt-group[data-kind="IMAGE"] .dopt-thumb { width: 60px; height: 60px; object-fit: cover; border-radius: 4px; display: block; }
.v2 .dopt-group[data-kind="IMAGE"] .dopt-none { justify-content: center; min-height: 60px; border-style: dashed; }
.v2 .dopt-group[data-kind="IMAGE"] .dopt-name { width: 100%; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; font-size: 12px; }
.v2 .dopt-group[data-kind="IMAGE"] .dopt-price { font-size: 11px; }
.v2 .dopt-check { position: absolute; right: -1px; bottom: -1px; width: 18px; height: 18px; border-radius: 4px 0 4px 0; background: var(--v2-ink); display: none; }
.v2 .dopt-check::after { content: ""; position: absolute; left: 6px; top: 2px; width: 4px; height: 9px; border: solid #FFFFFF; border-width: 0 2px 2px 0; transform: rotate(45deg); }
.v2 .dopt-group[data-kind="IMAGE"] .dopt:has(input:checked) .dopt-check { display: block; }
.v2 .dopt-msg { margin: 0 0 6px; font-size: 13px; font-weight: 700; color: #B42318; }
.v2 .dopt:has(input:checked) .dopt-name { color: var(--v2-ink); font-weight: 700; }
.v2 .btn.is-disabled { opacity: .45; cursor: not-allowed; }
.v2 .dvbox { position: relative; overflow: hidden; border: 1px solid var(--v2-line); border-radius: 10px; padding: 18px 20px; background: var(--v2-surface); margin-top: 4px; }
.v2 .dvbox::before { content: ""; position: absolute; right: 26px; top: 0;   /* round210-b(대표자) */ width: 170px; height: 200px; background: url('/img/cert-mark-wm.webp') no-repeat center / contain; opacity: .14; pointer-events: none; }   /* 대표자 인증 마크, 연하게. roundM40(audit ⑤): PNG 119KB → 340×403 WebP 20KB(2배 판, 표시 170×200) */
.v2 .dvbox-h { position: relative; margin: 0; display: grid; grid-template-columns: 84px minmax(0, 1fr); gap: 8px 12px; align-items: center; font-size: 16px; font-weight: 700; letter-spacing: var(--t-ls-title); }   /* round210-b(대표자): 배지가 아래 날짜 열(.dkv 84px + 12px)에 선다 */
.v2 .dvbox-h .bdg { justify-self: start; }
.v2 .dvbox-rows { position: relative; margin-top: 12px; }
.v2 .dvbox .dnote { position: relative; margin: 12px 0 0; font-size: var(--t-caption); color: var(--v2-muted); line-height: 1.6; }
.v2 .dinfo > .prow { margin: 0; gap: 6px; }
.v2 .dinfo .dprice { padding-bottom: 10px; margin: 0; justify-content: flex-start; gap: 2px; }
.v2 .dinfo .dprice .sale-rate { margin-right: 6px; }
.v2 .dinfo .dprice .org-price { margin-left: 8px; }
.v2 .dinfo .dprice-v { font-size: 30px; }   /* round218(대표자) 35 → roundM44(대표자 2026-11-03) 30 */
.v2 .dpr-coupon { margin: 2px 0 0; font-size: 13px; font-weight: 700; color: var(--v2-sale); }   /* round228: 상세의 쿠폰 표시(카드와 같은 판정) */
.v2 .dinfo .dcard { padding: 14px 16px; gap: 15px; font-size: var(--dinfo-fs); }
.v2 .dinfo .dcard p { margin: 0; line-height: 1.5; }
.v2 .dinfo .dcard .dnote { font-size: 11.5px; line-height: 1.5; margin-top: 2px; }
.v2 .dinfo .drows { display: flex; flex-direction: column; gap: 0; border-bottom: 1px solid var(--v2-line); }
.v2 .dinfo .drow { font-size: var(--dinfo-fs); line-height: 1.45; margin: 0; padding: 11px 0; border-top: 1px solid var(--v2-line); display: flex; gap: 10px; align-items: baseline; }
.v2 .dinfo .drow > span:last-child { min-width: 0; }
.v2 .dinfo .drow .btn { height: 28px; padding: 0 10px; font-size: 12px; }
.v2 .dinfo .dk { flex: none; min-width: 72px; }
.v2 .dinfo .dbuy { margin-top: auto; padding-top: 6px; }
.v2 .dinfo .dtotal-row { padding-top: 10px; margin: 8px 0 8px; justify-content: flex-end; gap: 12px; }   /* round210(대표자): '총 상품금액'을 금액 옆에 */
.v2 .dinfo .dtotal { font-size: 25px; }   /* round218(대표자) */
.v2 .dthumbs a { cursor: pointer; }
.v2 .dname { font-size: 22px; font-weight: 800; line-height: 1.4; letter-spacing: -0.01em; }
.v2 .dprice { border-bottom: 0; padding-bottom: 0; }   /* round210(대표자): .dprice.prow 밑줄 삭제 */
.v2 .dprice .sale-rate { font-size: 22px; }
.v2 .dprice-v { font-size: 26px; font-weight: 800; color: var(--v2-text); }
.v2 .dprice .org-price { font-size: 14px; }
.v2 .dcard { background: var(--v2-green-bg); border-radius: 6px; padding: 14px 16px; display: flex; flex-direction: column; gap: 6px; font-size: 13px; }
.v2 .dcard-t { font-weight: 800; color: var(--v2-green); }
.v2 .dcard .dnote { color: var(--v2-muted); font-size: 12px; line-height: 1.6; }
.v2 .dk { display: inline-block; min-width: 76px; color: var(--v2-muted); font-weight: 700; }
.v2 .drow { font-size: 13px; line-height: 1.7; }
/* inicis-review-readiness IR3: 판매자 사업자 정보(접이식) — IR1 '부가세 포함' 줄은 roundM44(대표자 2026-11-03)에서 상세에서 제거 */
.v2 .dlegal { margin: 6px 0 10px; border: 1px solid var(--v2-line); border-radius: 8px; padding: 8px 12px; font-size: 13px; }
.v2 .dlegal summary { cursor: pointer; font-weight: 700; color: var(--v2-muted); list-style: none; display: flex; align-items: center; gap: 6px; }
.v2 .dlegal summary::before { content: ""; display: inline-block; width: 11px; height: 11px; background-color: currentColor; -webkit-mask: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='black' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpolyline points='9 18 15 12 9 6'/%3E%3C/svg%3E") center / contain no-repeat; mask: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='black' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpolyline points='9 18 15 12 9 6'/%3E%3C/svg%3E") center / contain no-repeat; }
.v2 .dlegal[open] summary::before { content: ""; display: inline-block; width: 11px; height: 11px; background-color: currentColor; -webkit-mask: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='black' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpolyline points='6 9 12 15 18 9'/%3E%3C/svg%3E") center / contain no-repeat; mask: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='black' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpolyline points='6 9 12 15 18 9'/%3E%3C/svg%3E") center / contain no-repeat; }
.v2 .dlegal dl { margin: 8px 0 0; display: grid; grid-template-columns: 1fr; gap: 4px; }
.v2 .dlegal dl div { display: flex; gap: 10px; line-height: 1.6; }
.v2 .dlegal dt { flex: none; width: 96px; color: var(--v2-muted); font-weight: 700; }
.v2 .dlegal dd { margin: 0; }
.v2 .dlegal .dnote { margin: 8px 0 2px; }
/* IR2: 결제 동의 체크박스 */
.v2 .pagree { display: flex; gap: 8px; align-items: flex-start; font-size: 12px; color: var(--v2-text); line-height: 1.6; margin: 4px 0 0; cursor: pointer; }
.v2 .pagree input { width: 16px; height: 16px; min-width: 16px; margin: 2px 0 0; }
.v2 .pagree-error { margin: 2px 0 0; font-size: 12px; color: var(--v2-sale); }
.v2 .dtotal-row { display: flex; justify-content: space-between; align-items: baseline; border-top: 1px solid var(--v2-line); padding-top: 12px; margin: 8px 0 2px; font-weight: 700; }
.v2 .dtotal { font-size: 20px; font-weight: 800; }
.v2 .dqty-l { align-self: center; flex: 0 0 auto; white-space: nowrap; writing-mode: horizontal-tb; font-size: 13px; color: var(--v2-muted); } /* 라운드 56 F6: 세로로 깨지던 라벨 */
.v2 .pay-btn { width: 100%; box-sizing: border-box; padding: 14px 0; font-size: 16px; }
.v2 .pay-note { text-align: center; color: var(--v2-muted); font-size: 12px; margin-top: 8px; }
/* round200 D3: 상세 [쿠폰받기] — 가격 아래 쿠폰 줄(대표자 첨부 레퍼런스: 빨간 버튼 + 내려받기 아이콘) */
.v2 .dcoupons { display: flex; flex-direction: column; gap: 8px; padding: 0; border: 0; }
/* round210(대표자): 추가할인 리디자인 — 쿠폰 한 장 = 연한 바탕의 테두리 카드: 금액(빨강 18/800) · 이름 14/700 + 조건 12 · 오른쪽 버튼 */
.v2 .dcoupon { display: flex; align-items: center; gap: 14px; padding: 12px 14px; border: 1px solid var(--v2-line); border-radius: 8px; background: #FAFAFB; }
.v2 .dcoupon .dc-amt { flex: none; min-width: 78px; font-size: 18px; font-weight: 800; color: var(--v2-sale); line-height: 1.2; }
.v2 .dcoupon .dc-body { flex: 1; min-width: 0; display: flex; flex-direction: column; gap: 3px; font-size: 14px; }
.v2 .dcoupon .dc-body b { font-weight: 700; }
.v2 .dcoupon .dc-body small { font-size: 12px; color: var(--v2-muted); }
.v2 .dcoupon .dc-form { margin: 0; }
.v2 .btn-coupon { display: inline-flex; align-items: center; gap: 6px; height: 36px; padding: 0 14px; border: 0; border-radius: 6px; background: var(--v2-sale); color: #FFFFFF; font-weight: 800; font-size: 13px; cursor: pointer; }
.v2 .btn-coupon:hover { background: #C22626; color: #FFFFFF; text-decoration: none; }
.v2 .btn-coupon svg { width: 16px; height: 16px; }
.v2 .dc-have { flex: none; display: inline-flex; align-items: center; height: 36px; padding: 0 14px; border-radius: 6px; font-size: 13px; font-weight: 800; color: var(--bdg-state); background: var(--bdg-state-bg); }   /* round210(대표자): [쿠폰받기]와 같은 크기의 [받기완료] */
.v2 .dcoupon-msg { margin: 0; font-size: 13px; color: var(--v2-ink); font-weight: 700; }
.v2 .dbuy { margin-top: 6px; }
/* round203 #5·#7: 주문서 — 기본 주소(읽기 전용)·상세 주소·요청사항 입력칸은 세로로, 빈 항목 안내는 버튼 아래 한 줄 */
.v2 .addr-base, .v2 .addr-detail, .v2 .dreq-text { display: block; margin-top: 8px; }   /* round210-b: 너비는 서식 시스템(열 - 여백 32px, 모바일 24px) — 100%는 카드 밖으로 넘쳤다 */
.v2 .ocard .field > input.dreq-text { margin-bottom: 10px; }   /* round210-b: 마지막 자식이 hidden이라 서식 시스템의 아래 10px이 붙지 않았다(서식 규칙 margin 단축보다 구체도 높게) */
.v2 .addr-base[readonly] { background: var(--f-label-bg, #F3F4F6); color: var(--v2-text); cursor: default; }
.v2 .addr-base[readonly]:placeholder-shown { color: var(--v2-muted); }
.v2 .pay-missing { margin: 8px 0 0; font-size: 13px; color: var(--v2-muted); text-align: center; word-break: keep-all; }
.v2 .pay-btn:disabled { opacity: .45; cursor: not-allowed; }
.v2 .dbuy .btn-lg { width: auto; box-sizing: border-box; padding: 0 16px; height: 44px; font-size: 14px; display: inline-flex; align-items: center; justify-content: center; } /* 라운드 56 F6: 버튼 축소 */
.v2 .dsoldout { color: var(--v2-sale); font-weight: 700; }
.v2 .dsec { background: var(--v2-surface); border: 1px solid var(--v2-line); border-radius: 6px; padding: 24px 28px; }
.v2 .ddesc { line-height: 1.8; white-space: pre-line; }
.v2 .dev-doc { max-width: 860px; display: flex; flex-direction: column; gap: 20px; }
.v2 .dev-doc section { background: var(--v2-surface); border: 1px solid var(--v2-line); border-radius: 6px; padding: 20px 24px; display: flex; flex-direction: column; gap: 8px; }
.v2 .dev-doc h2 { font-size: 16px; font-weight: 800; margin: 0; }
.v2 .dev-lead { line-height: 1.7; color: var(--v2-muted); }
.v2 .dev-doc ul, .v2 .dev-doc ol { margin: 0; padding-left: 20px; line-height: 1.9; }
.v2 .dev-doc code { background: #F3F4F6; border-radius: 3px; padding: 1px 5px; font-size: 13px; }
.v2 .dev-code { background: var(--v2-ink); color: #E5E7EB; border-radius: 6px; padding: 14px 16px; font-size: 12px; line-height: 1.7; overflow-x: auto; }
.v2 .dev-table-wrap { overflow-x: auto; }
.v2 .dev-doc table { width: 100%; border-collapse: collapse; font-size: 13px; }
.v2 .dev-doc th, .v2 .dev-doc td { text-align: left; padding: 8px 10px; border-bottom: 1px solid var(--v2-line); }
.v2 .dev-doc th { color: var(--v2-muted); font-weight: 700; }
.v2 .ft { background: var(--v2-surface); border-top: 1px solid var(--v2-line); margin-top: 40px; }
.v2 .ft .wrap { display: flex; flex-direction: column; gap: 14px; padding: 28px 0 36px 0; }
.v2 .ft-links { display: flex; gap: 24px; font-size: 13px; font-weight: 700; }
.v2 .ft-links a { display: inline-block; padding: 6px 0; }   /* round230(리뷰 접근성): 누르는 높이 24px 이상 */
.v2 .ft-info { font-size: 12px; color: var(--v2-muted); line-height: 1.8; }
.v2 .ft-notice { font-size: 12px; color: var(--v2-muted); line-height: 1.8; }
.v2 .signup2 { max-width: 560px; margin-left: auto; margin-right: auto; display: flex; flex-direction: column; gap: 16px; }
.v2 .signup2 form { display: flex; flex-direction: column; gap: 16px; }
.v2 .stype { display: grid; grid-template-columns: 1fr 1fr; gap: 12px; }
.v2 .stype-card { position: relative; background: var(--v2-surface); border: 2px solid var(--v2-line); border-radius: 8px; padding: 18px 14px; display: flex; flex-direction: column; align-items: center; gap: 6px; cursor: pointer; text-align: center; }
.v2 .stype-card input { position: absolute; opacity: 0; pointer-events: none; }
.v2 .stype-card svg { width: 34px; height: 34px; color: var(--v2-muted); }
.v2 .stype-card strong { font-size: 15px; }
.v2 .stype-card span { font-size: 12px; color: var(--v2-muted); }
.v2 .stype-card:has(input:checked) { border-color: var(--v2-ink); }
.v2 .stype-card:has(input:checked) svg { color: var(--v2-ink); }
.v2 .scard { background: var(--v2-surface); border: 1px solid var(--v2-line); border-radius: 8px; padding: 20px; display: flex; flex-direction: column; gap: 10px; }
.v2 .scard-t { font-size: 15px; font-weight: 800; margin-bottom: 4px; }
.v2 .ifield { display: flex; align-items: center; border: 1px solid var(--v2-line); border-radius: 6px; background: var(--v2-surface); }
.v2 .ifield:focus-within { border-color: var(--v2-ink); box-shadow: 0 0 0 2px var(--v2-ink-bg); }
.v2 .ifield input:focus, .v2 .searchbox input:focus { outline: none; }  /* 링은 컨테이너 :focus-within */
.v2 .searchbox:focus-within { outline: none; box-shadow: 0 0 0 3px rgba(13, 22, 43, .16); }   /* roundM25: 알약 모양에 맞춘 링 */
.v2 .ifield .ic { width: 46px; height: 46px; display: flex; align-items: center; justify-content: center; color: var(--v2-muted2); border-right: 1px solid var(--v2-line); flex-shrink: 0; background: #FAFAFB; border-radius: 6px 0 0 6px; }
.v2 .ifield .ic svg { width: 20px; height: 20px; }
.v2 .ifield input { flex-grow: 1; border: 0; height: 46px; padding: 0 14px; font-family: inherit; font-size: 14px; background: transparent; min-width: 0; }
.v2 .pw-rules { margin: 0; padding: 0 2px; list-style: none; font-size: 12px; color: var(--v2-muted); display: flex; flex-direction: column; gap: 2px; }
.v2 .pw-rules li::before { content: '\2715  '; color: var(--v2-muted2); font-size: 10px; }
.v2 .consent { gap: 12px; }
.v2 .consent-all { display: flex; align-items: center; gap: 8px; font-size: 15px; }
.v2 .consent-desc { font-size: 12px; color: var(--v2-muted); line-height: 1.6; margin: 0; }
.v2 .consent-list { border: 1px solid var(--v2-line); border-radius: 6px; padding: 14px 16px; display: flex; flex-direction: column; gap: 10px; font-size: 13px; }
.v2 .consent-list label { display: flex; align-items: center; gap: 8px; }
.v2 .consent-list label a { margin-left: auto; color: var(--v2-muted); font-size: 12px; }
.v2 .consent-sub { display: flex; flex-direction: column; gap: 8px; padding-left: 24px; }
.v2 .consent-foot { margin: 0; font-size: 12px; }
.v2 .consent-foot a { text-decoration: underline; color: var(--v2-muted); }
.v2 .signup2 .savebar .btn-lg { width: 100%; box-sizing: border-box; }
/* 라운드 81-b: 가입 페이지 간편가입 버튼 — .v2 .btn(흰 바탕)·.v2 a(색) 규칙보다 우선해야 제공자 색이 산다 */
.v2 .signup2 .social { height: 44px; border-radius: 8px; gap: 8px; font-weight: 700; }
.v2 .signup2 .social-naver, .v2 .signup2 .social-naver:hover { background: #03C75A; color: #FFFFFF; border-color: #03C75A; }
.v2 .signup2 .social-kakao, .v2 .signup2 .social-kakao:hover { background: #FEE500; color: #191919; border-color: #FEE500; }
.v2 .signup2 .social-google, .v2 .signup2 .social-google:hover { background: #FFFFFF; color: #1F1F1F; border-color: var(--v2-line); }
.v2 .signup2 .social:hover { text-decoration: none; filter: brightness(0.96); }
.v2 .signup2 .social-signup .muted { text-align: center; }
/* 라운드 82(buyer-social-ops S10): 가입 시작 화면 — 단일 카드, 리스트형 버튼(마크 · 라벨 · 화살표), 안내 박스 */
.v2 .sc-wrap { padding-top: 36px; padding-bottom: 56px; }
.v2 .sc { max-width: 460px; margin: 0 auto; background: var(--v2-surface); border: 1px solid var(--v2-line); border-radius: 14px; padding: 36px 32px 28px; box-shadow: 0 8px 28px rgba(13, 22, 43, 0.06); }
.v2 .sc-mark { margin: 0 0 10px; text-align: center; }
.v2 .sc-mark img { width: 44px; height: 44px; }
.v2 .sc-title { margin: 0; text-align: center; font-size: 24px; font-weight: 800; letter-spacing: -0.01em; }
.v2 .sc-sub { margin: 6px 0 26px; text-align: center; color: var(--v2-muted); font-size: 14px; }
.v2 .sc-label { margin: 0 0 8px; font-size: 12px; font-weight: 700; color: var(--v2-muted); letter-spacing: 0.04em; }
.v2 .sc-social { display: flex; flex-direction: column; gap: 10px; }
.v2 .sc-social .sc-label { margin-bottom: 0; }
.v2 .sc-btn { display: grid; grid-template-columns: 24px 1fr 20px; align-items: center; gap: 12px; height: 52px; padding: 0 16px; border-radius: 10px; border: 1px solid transparent; font-size: 15px; font-weight: 700; text-decoration: none; box-sizing: border-box; }
.v2 .sc-btn:hover { text-decoration: none; filter: brightness(0.97); }
.v2 .sc-btn:focus-visible { outline: 0.5px solid var(--c-focus); outline-offset: 2px; }   /* roundM33-c(대표자 2026-11-02): 키보드로 왔을 때만 — 마우스·터치 클릭에는 테두리 없음 */
.v2 .sc-btn:focus:not(:focus-visible), .v2 .sc-btn:active { outline: none; box-shadow: none; }
.v2 .sc-ic { display: inline-flex; width: 24px; height: 24px; align-items: center; justify-content: center; }
.v2 .sc-ic svg { width: 22px; height: 22px; }
.v2 .sc-arr { display: inline-flex; width: 20px; height: 20px; opacity: 0.7; }
.v2 .sc-arr svg { width: 20px; height: 20px; }
.v2 .sc-naver, .v2 .sc-naver:hover { background: #03C75A; color: #FFFFFF; }
.v2 .sc-kakao, .v2 .sc-kakao:hover { background: #FEE500; color: #191919; }
.v2 .sc-google, .v2 .sc-google:hover { background: #FFFFFF; color: #1F1F1F; border-color: var(--v2-line); }
.v2 .sc-apple, .v2 .sc-apple:hover { background: #000000; color: #FFFFFF; }   /* mobile-M13: Apple 가이드 */
.v2 .sc-primary, .v2 .sc-primary:hover { background: var(--v2-ink); color: #FFFFFF; }
.v2 .sc-or { position: relative; margin: 14px 0 18px; text-align: center; font-size: 12px; color: var(--v2-muted); }
.v2 .sc-or::before { content: ""; position: absolute; left: 0; right: 0; top: 50%; border-top: 1px solid var(--v2-line); }
.v2 .sc-or span { position: relative; background: var(--v2-surface); padding: 0 10px; }
.v2 .sc-notes { list-style: none; margin: 18px 0 0; padding: 0 4px; display: flex; flex-direction: column; gap: 10px; }   /* roundM33-c(대표자 2026-11-02): 안내 글 바탕 없음 */
.v2 .sc-notes li { display: flex; gap: 10px; align-items: flex-start; font-size: 13px; line-height: 1.55; color: var(--v2-ink-soft); }
.v2 .sc-note-ic { flex: none; display: inline-flex; width: 18px; height: 18px; margin-top: 1px; color: var(--v2-ink); }
.v2 .sc-note-ic svg { width: 18px; height: 18px; }
.v2 .sc-link { color: var(--v2-ink); font-weight: 700; text-decoration: underline; text-underline-offset: 2px; margin-left: 4px; white-space: nowrap; }
.v2 .sc-foot { margin: 22px 0 0; text-align: center; font-size: 13px; color: var(--v2-muted); }
.v2 .sc-foot a { color: var(--v2-ink); font-weight: 700; margin-left: 6px; text-decoration: underline; text-underline-offset: 2px; }
@media (max-width: 520px) { .v2 .sc { padding: 28px 18px 22px; border-radius: 10px; } }
.v2 .pw-rules li.ok { color: var(--v2-blue); }
.v2 .pw-rules li.ok::before { content: '\2713  '; color: var(--v2-blue); }
.v2 .pw-rules li.bad { color: var(--v2-sale); }
.v2 .pw-rules li.bad::before { content: '\2715  '; color: var(--v2-sale); }
.v2 .consent input[type="checkbox"] { width: 18px; height: 18px; min-width: 18px; margin: 0; padding: 0; flex-shrink: 0; accent-color: var(--v2-ink); }
.v2 .consent-all { justify-content: flex-start; }
.v2 .consent-list label { justify-content: flex-start; text-align: left; }
.v2 .consent-list label span { flex: 1 1 auto; }
.v2 .stype-card input[type="radio"], .v2 .bclass-card input[type="radio"] { width: auto; height: auto; }
.v2 .biz-fields { display: flex; flex-direction: column; gap: 10px; border-top: 1px dashed var(--v2-line); padding-top: 14px; margin-top: 4px; }
.v2 .biz-fields[hidden] { display: none; }
.v2 .bclass { display: grid; grid-template-columns: 1fr 1fr; gap: 10px; }
.v2 .bclass-card { border: 2px solid var(--v2-line); border-radius: 6px; padding: 12px; text-align: center; cursor: pointer; font-weight: 700; font-size: 14px; position: relative; }
.v2 .bclass-card input { position: absolute; opacity: 0; pointer-events: none; }
.v2 .bclass-card:has(input:checked) { border-color: var(--v2-ink); }
.v2 .terms-dlg { border: 1px solid var(--v2-line); border-radius: 8px; padding: 0; width: min(720px, 92vw); height: min(80vh, 720px); }
.v2 .terms-dlg::backdrop { background: rgba(17, 17, 17, 0.45); }
.v2 .terms-dlg-head { display: flex; align-items: center; justify-content: space-between; padding: 12px 16px; border-bottom: 1px solid var(--v2-line); }
.v2 .terms-dlg iframe { border: 0; width: 100%; height: calc(100% - 55px); }
.v2 .view-btn { border: 0; background: none; color: var(--v2-muted); font-size: 12px; text-decoration: underline; cursor: pointer; font-family: inherit; margin-left: auto; }
.v2 .wish-form { display: flex; gap: 8px; margin-bottom: 10px; }
.v2 .wish-btn { display: inline-flex; gap: 6px; align-items: center; }
.v2 .wish-btn.on { border-color: var(--v2-sale); color: var(--v2-sale); }
.v2 .qa-form { display: flex; flex-direction: column; gap: 8px; margin-bottom: 14px; }
.v2 .qa-form textarea { border: 1px solid var(--v2-line); border-radius: 6px; padding: 10px 12px; font-family: inherit; font-size: 14px; resize: vertical; }
.v2 .qa-form textarea:focus { outline: 2px solid var(--v2-ink); outline-offset: 1px; border-color: var(--v2-ink); }
.v2 .qa-form-foot { display: flex; align-items: center; justify-content: space-between; }
.v2 .qa-form-foot label { display: flex; gap: 6px; align-items: center; font-size: 13px; color: var(--v2-muted); }
.v2 .qa-form-foot input[type="checkbox"] { width: 16px; height: 16px; margin: 0; }
.v2 .qa-answer { background: #F7F8F9; border-radius: 6px; padding: 10px 12px; }
.v2 .err-page { min-height: 100vh; display: flex; flex-direction: column; align-items: center; justify-content: center; gap: 12px; text-align: center; padding: 24px; box-sizing: border-box; }
.v2 .err-logo { display: inline-flex; align-items: center; gap: 8px; font-size: 26px; font-weight: 800; color: var(--v2-ink); letter-spacing: -0.02em; margin-bottom: 8px; }
.v2 .err-logo img { width: 30px; height: 30px; }
.v2 .err-logo:hover { text-decoration: none; }
.v2 .err-code { font-size: 13px; font-weight: 700; color: var(--v2-muted); line-height: 1; }   /* roundM28(M27 A15·A19): 장식 대형 숫자 → 작은 회색 글자 */
.v2 .err-title { font-size: 22px; font-weight: 800; margin: 0; }
.v2 .err-desc { color: var(--v2-muted); line-height: 1.7; margin: 0; }
.v2 .err-actions { display: flex; gap: 10px; margin-top: 10px; flex-wrap: wrap; justify-content: center; }
.v2 .err-actions .btn { white-space: nowrap; }   /* roundM28(M27 C2): 버튼 글자 두 줄 금지 */
@media (max-width: 560px) { .v2 .err-actions { flex-direction: column; align-items: stretch; width: 100%; max-width: 320px; } }   /* 폰은 세로 전폭 */
.v2 .tabbar { display: none; }

/* product-facets PF1~PF7: 좌측 패싯 패널(목록·상세 공유) */
.v2 .sidebar.facets { width: 216px; padding: 14px; display: flex; flex-direction: column; gap: 12px; }
.v2 .fc { display: flex; flex-direction: column; gap: 4px; padding-top: 12px; border-top: 1px solid var(--v2-line); }
.v2 .facets > .fc:first-child { border-top: 0; padding-top: 0; }
.v2 .fc nav { display: flex; flex-direction: column; gap: 2px; margin-top: 2px; font-size: 13px; }
.v2 .fc nav a { display: flex; justify-content: space-between; align-items: center; gap: 6px; padding: 4px 6px; border-radius: 4px; color: var(--v2-text); }
.v2 .fc nav a:hover { background: var(--v2-bg); text-decoration: none; }
.v2 .fc nav a.on { font-weight: 800; color: var(--v2-ink); background: var(--v2-ink-bg); }
.v2 .fc nav a.on .fc-l::before { content: ""; display: inline-block; width: 12px; height: 12px; background-color: currentColor; -webkit-mask: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='black' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpolyline points='20 6 9 17 4 12'/%3E%3C/svg%3E") center / contain no-repeat; mask: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='black' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpolyline points='20 6 9 17 4 12'/%3E%3C/svg%3E") center / contain no-repeat; margin-right: 4px; vertical-align: -1px; }
.v2 .fc .fc-l { min-width: 0; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.v2 .fc .fc-n { font-size: 11px; color: var(--v2-muted); background: var(--v2-bg); border-radius: 999px; padding: 0 6px; flex-shrink: 0; }
.v2 .fc nav a.on .fc-n { background: var(--v2-surface); }
.v2 .fc .fc-up { color: var(--v2-muted); justify-content: flex-start; }
.v2 .fc .fc-up svg { width: 14px; height: 14px; }
/* round122 CT1: 카테고리 트리 — 선택 경로는 펼쳐지고(open) 아래 단계는 들여쓴다. 한글이 글자 단위로 꺾이지 않게 keep-all */
.v2 .fc-tree ul { list-style: none; margin: 0; padding: 0; }
.v2 .fc-tree ul ul { margin: 2px 0 4px 10px; padding-left: 8px; border-left: 1px solid var(--v2-line); }
.v2 .fc-tree a.open { font-weight: 700; color: var(--v2-ink); }
.v2 .fc-tree .fc-tw { width: 12px; height: 12px; color: var(--v2-muted); flex-shrink: 0; margin-left: auto; }
.v2 .fc-tree a .fc-n + .fc-tw { margin-left: 0; }
.v2 .crumbs, .v2 .fc-chain, .v2 .sb-t, .v2 .sec-t, .v2 .fc .fc-l, .v2 .pcat { word-break: keep-all; }
.v2 .crumbs a, .v2 .fc-chain a { white-space: nowrap; }
/* round122 LP1: 약관·개인정보처리방침·고객센터 — 스토어 뼈대 안의 문서 상자(탭 → 목차 → 본문) */
/* round199(대표자 지적 3): 머리(제목·설명·탭 버튼)와 버전·개정 이력을 본문 상자(.legal-doc 920)·고객센터 카드(920)와 같은 폭으로 — 탭 버튼의 왼쪽 선 = 콘텐츠 왼쪽 선 */
.v2 .legal-head, .v2 .legal-ver, .v2 .legal-history { width: 100%; max-width: 920px; margin-left: auto; margin-right: auto; box-sizing: border-box; }
.v2 .legal-head { display: flex; flex-direction: column; gap: 8px; }
.v2 .legal-tabs { display: flex; flex-wrap: wrap; gap: 8px; }
.v2 .legal-tabs a { display: inline-flex; align-items: center; min-height: 40px; padding: 0 18px; border: 1px solid var(--v2-line); border-radius: 4px; background: var(--v2-surface); font-size: 13px; font-weight: 700; color: var(--v2-text); word-break: keep-all; }
.v2 .legal-tabs a:hover { text-decoration: none; border-color: var(--v2-ink); }
.v2 .legal-tabs a.on { background: var(--v2-ink); border-color: var(--v2-ink); color: #fff; }   /* roundM28-b: 원복 */
.v2 .legal-doc { width: 100%; max-width: 920px; box-sizing: border-box; margin: 0 auto 24px; padding: 40px 48px; border: 1px solid var(--v2-line); background: var(--v2-surface); font-size: 14px; line-height: 1.8; color: var(--v2-text); word-break: keep-all; }
.v2 .legal-doc-t { margin: 0 0 6px; text-align: center; font-size: 19px; font-weight: 800; color: var(--v2-ink); }
.v2 .legal-doc-v { margin: 0 0 28px; text-align: center; font-size: 12px; color: var(--v2-muted); }
.v2 .legal-doc h3 { margin: 32px 0 10px; font-size: 16px; font-weight: 800; color: var(--v2-ink); }
.v2 .legal-doc h4 { margin: 18px 0 6px; font-size: 14px; font-weight: 800; }
.v2 .legal-doc p, .v2 .legal-doc li { margin: 0 0 8px; }
.v2 .legal-doc ol, .v2 .legal-doc ul { margin: 0 0 8px; padding-left: 20px; }
.v2 .legal-doc table { width: 100%; border-collapse: collapse; margin: 8px 0 14px; font-size: 13px; }
.v2 .legal-doc th, .v2 .legal-doc td { border: 1px solid var(--v2-line); padding: 8px 10px; text-align: left; vertical-align: top; }
.v2 .legal-doc th { background: var(--v2-bg); font-weight: 700; white-space: nowrap; }
/* roundM32-e(대표자 2026-11-01 지시 2): 번호가 세로로 이어진다(1~4 왼쪽, 5~8 오른쪽) — 다단(columns)이라 모달 안·폰 1열에서도 순서 그대로 */
.v2 .legal-toc { columns: 2; column-gap: 32px; margin: 0 0 28px; padding: 0 0 24px; border-bottom: 1px solid var(--v2-line); list-style: none; }
.v2 .legal-toc li { margin: 0 0 6px; break-inside: avoid; }
.v2 .legal-toc a { display: flex; gap: 8px; font-weight: 700; color: var(--v2-text); }
.v2 .legal-toc .n { color: var(--v2-ink); font-weight: 800; min-width: 1.4em; }
.v2 .legal-ver { display: flex; align-items: center; gap: 10px; margin-top: 28px; padding-top: 16px; border-top: 1px solid var(--v2-line); font-size: 13px; }
.v2 .legal-ver label { font-weight: 700; }
.v2 .legal-ver select { min-height: 34px; padding: 0 10px; border: 1px solid var(--v2-line); border-radius: 4px; background: var(--v2-surface); font: inherit; font-size: 13px; color: var(--v2-text); }
.v2 .legal-history { margin-top: 12px; font-size: 12px; }
.v2 .legal-history caption { text-align: left; font-weight: 800; padding: 0 0 6px; color: var(--v2-ink); }
.v2 .legal-doc .addendum { margin-top: 28px; padding-top: 14px; border-top: 1px solid var(--v2-line); font-size: 13px; color: var(--v2-muted); }
.v2 .help-grid { display: grid; grid-template-columns: repeat(3, 1fr); gap: 12px; width: 100%; max-width: 920px; margin: 0 auto; }
.v2 .help-card { display: flex; flex-direction: column; gap: 6px; padding: 18px 20px; border: 1px solid var(--v2-line); border-radius: 6px; background: var(--v2-surface); }
.v2 .help-card .k { font-size: 12px; color: var(--v2-muted); }
.v2 .help-card .v { font-size: 17px; font-weight: 800; color: var(--v2-ink); word-break: keep-all; }
.v2 .help-card .d { font-size: 12px; color: var(--v2-muted); }
.v2 .faq { width: 100%; max-width: 920px; margin: 0 auto; }
.v2 .faq .faq-t { margin: 8px 0 12px; font-size: 17px; }
.v2 .faq details, .v2 .a2a-modal-body details { border: 1px solid var(--v2-line); border-radius: 6px; background: var(--v2-surface); margin-bottom: 8px; }
.v2 .faq summary, .v2 .a2a-modal-body summary { list-style: none; cursor: pointer; padding: 14px 18px; font-size: 14px; font-weight: 700; display: flex; align-items: center; gap: 10px; word-break: keep-all; }
.v2 .faq summary::-webkit-details-marker, .v2 .a2a-modal-body summary::-webkit-details-marker { display: none; }
.v2 .faq summary .ic, .v2 .a2a-modal-body summary .ic { margin-left: auto; color: var(--v2-muted); }
.v2 .faq details[open] summary .ic, .v2 .a2a-modal-body details[open] summary .ic { transform: rotate(180deg); }
.v2 .faq .faq-a, .v2 .a2a-modal-body .faq-a { padding: 0 18px 16px; font-size: 13px; line-height: 1.75; color: var(--v2-text); border-top: 1px solid var(--v2-line); padding-top: 12px; }
.v2 .faq .faq-a p, .v2 .a2a-modal-body .faq-a p { margin: 0 0 6px; }
@media (max-width: 720px) {
  .v2 .legal-doc { padding: 24px 18px; }
  .v2 .legal-toc { columns: 1; }
  .v2 .help-grid { grid-template-columns: 1fr; }
}
.v2 .fc .fc-star { color: var(--v2-text); }
.v2 .fc-price { display: flex; align-items: center; gap: 4px; margin-top: 6px; }
.v2 .fc-price input { width: 0; flex: 1; min-width: 0; height: 28px; border: 1px solid var(--v2-line); border-radius: 4px; padding: 0 6px; font-size: 12px; font-family: inherit; }
.v2 .fc-price input:focus { outline: 2px solid var(--v2-ink); outline-offset: 1px; border-color: var(--v2-ink); }
.v2 .fc-price .btn { flex-shrink: 0; }
.v2 details.fc summary { list-style: none; cursor: pointer; display: flex; align-items: center; gap: 4px; }
.v2 details.fc summary::-webkit-details-marker { display: none; }
.v2 details.fc summary .fc-chev { width: 14px; height: 14px; margin-left: auto; color: var(--v2-muted); transition: transform .15s; }
.v2 details.fc[open] summary .fc-chev { transform: rotate(180deg); }
.v2 .fc-unit { font-weight: 500; font-size: 12px; color: var(--v2-muted); }
.v2 .fc-active { gap: 8px; }
.v2 .fc-chips { display: flex; flex-wrap: wrap; gap: 6px; }
.v2 .fc-chip { display: inline-flex; align-items: center; gap: 6px; padding: 3px 8px 3px 10px; border-radius: 999px; background: var(--v2-ink); color: #FFFFFF; font-size: 12px; font-weight: 700; }
.v2 .fc-chip:hover { text-decoration: none; background: var(--v2-ink-soft); }
.v2 .fc-chip .fc-x { font-size: 14px; line-height: 1; opacity: .8; }
.v2 .fc-clear { font-size: 12px; color: var(--v2-muted); text-decoration: underline; }

.v2 .dside-t { margin: 0 0 8px; font-size: 13px; font-weight: 800; color: var(--v2-muted); }
.v2 .dside .sidebar.facets { width: auto; }
@media (max-width: 1320px) { .v2 .wrap { width: auto; margin: 0 20px; } }
@media (max-width: 900px) {
  .v2 .grid4, .v2 .grid5 { grid-template-columns: repeat(2, minmax(0, 1fr)); }
  /* round193(계약 round192-store-feedback §3): 모바일 머리 한 줄 = 햄버거 | 문구 | 로고(가운데) | 장바구니, 둘째 줄 검색. 마크업 순서는 PC 그대로(brand-tag 한 곳), 배치만 grid */
  .v2 .utilbar { display: none; }   /* 유틸 링크는 서랍(.md-links)으로 */
  .v2 .hd .wrap { display: grid; grid-template-columns: 36px minmax(0, 1fr) auto minmax(0, 1fr) auto; grid-template-areas: "menu tag logo . cart" "search search search search search"; align-items: center; column-gap: 4px; row-gap: 17px; padding: 10px 0 12px; }   /* roundM25(대표자): 로고 줄 ↔ 검색 줄 17 */
  .v2 .hd-menu { grid-area: menu; display: flex; align-items: center; justify-content: center; width: 36px; height: 40px; border: 0; background: none; color: var(--v2-text); cursor: pointer; padding: 0; margin-left: -4px; }
  .v2 .hd-menu svg { width: 26px; height: 26px; }
  /* round196(대표자 지적 1): 문구가 로고와 겹쳤다(390에서 문구 81px > 왼쪽 칸 70px — 560 블록의 18px 고정값이 이겼다). 구슬 크기를 화면 폭에 비례(--bd)시켜 320~900 어디서나 왼쪽 칸 안에 든다 */
  .v2 .brand-tag { grid-area: tag; justify-self: start; --bd: clamp(12px, 3.7vw, 16px); gap: 2px; max-width: 100%; }
  .v2 .brand-tag .circ { gap: 2px; }
  .v2 .brand-tag .circ b { width: var(--bd); height: var(--bd); font-size: calc(var(--bd) * .58); }
  .v2 .brand-tag .sub { grid-template-columns: repeat(4, var(--bd)); column-gap: 2px; font-size: max(9px, calc(var(--bd) * .7)); }
  .v2 .vline { display: none; }
  .v2 .logo { grid-area: logo; justify-self: center; }
  .v2 .logo img { height: 32px; }
  .v2 .hd-icons { grid-area: cart; display: flex; justify-self: end; gap: 10px; }
  .v2 .hd-icons .hd-icon:not([href="/cart"]):not([href="/my"]):not(.hd-auth) { display: none; }   /* roundM1-c: 사람 아이콘 = 마이페이지(/my) */
  .v2 .hd-icons:has(.hd-auth) .hd-icon[href="/my"] { display: none; }   /* 비로그인은 [로그인] 아이콘 하나만 */
  .v2 .hd-auth { display: flex; }   /* round205 #3: 장바구니 옆 로그인/로그아웃 — 장바구니처럼 아이콘만(글자는 aria-label·확인 창) */
  /* 마이페이지 메뉴(모바일)는 파일 끝 roundM1-b 블록: 하위 화면 가로 1줄, /my 첫 화면 2열(대표자 Q-M3 ㄷ). 205의 4개 스크롤·220의 2행×5칸은 대체됐다 */
  .v2 .hd-icon > span:not(.cart-badge) { display: none; }
  .v2 .hd-icon svg { width: 26px; height: 26px; }
  .v2 .cart-badge { top: -8px; right: -8px; }
  .v2 .searchwrap { grid-area: search; }
  .v2 .searchbox { height: 44px; }
  .v2 .searchbox input, .v2 .searchbox button { height: 40px; }
  /* 전체 카테고리 띠(.gnb 한 줄)는 모바일에 없다 — 서랍이 대신(마크업은 PC·배터리 공용이라 그대로) */
  .v2 .gnb { border-bottom: 0; }
  .v2 .gnb .wrap { display: block; height: 0; overflow: visible; margin: 0; }
  .v2 .gnb .wrap > :not(.mdrawer):not(.md-backdrop) { display: none !important; }
  .v2 .md-backdrop { display: block; position: fixed; inset: 0; z-index: 119; background: rgba(17,17,17,.45); }
  .v2 .mdrawer { display: flex; flex-direction: column; position: fixed; top: 0; bottom: 0; left: 0; width: min(84vw, 360px); z-index: 120; background: var(--v2-surface); overflow-y: auto; box-shadow: 4px 0 24px rgba(0,0,0,.18); padding-bottom: env(safe-area-inset-bottom); }
  .v2 .mdrawer[hidden], .v2 .md-backdrop[hidden] { display: none; }
  .v2 .md-h { display: flex; align-items: center; justify-content: space-between; height: 52px; padding: 0 8px 0 16px; border-bottom: 1px solid var(--v2-line); position: sticky; top: 0; background: var(--v2-surface); z-index: 1; }
  .v2 .md-t { font-size: 17px; font-weight: 800; }
  .v2 .md-close { width: 40px; height: 40px; border: 0; background: none; color: var(--v2-text); display: flex; align-items: center; justify-content: center; cursor: pointer; padding: 0; } .v2 .md-close svg { width: 22px; height: 22px; }
  .v2 .md-cats { display: grid; grid-template-columns: repeat(3, minmax(0, 1fr)); gap: 4px; padding: 12px 10px; border-bottom: 1px solid var(--v2-line); }
  .v2 .md-cats a { display: flex; flex-direction: column; align-items: center; gap: 4px; padding: 8px 2px; font-size: 11px; font-weight: 700; text-align: center; word-break: keep-all; border-radius: 6px; }
  .v2 .md-cats a:hover { text-decoration: none; background: var(--v2-ink-bg); }
  .v2 .md-cats .cat-img { width: 44px; height: 44px; object-fit: contain; } .v2 .md-cats .cat-ic { width: 28px; height: 28px; color: var(--v2-ink-soft); }
  .v2 .md-cats .md-all { grid-column: 1 / -1; flex-direction: row; justify-content: center; padding: 10px; font-size: 13px; color: var(--v2-ink); border: 1px solid var(--v2-line); margin-top: 4px; }
  .v2 .md-links { display: flex; flex-direction: column; padding: 8px 0; }
  .v2 .md-links a, .v2 .md-links button { display: block; width: 100%; box-sizing: border-box; text-align: left; padding: 12px 16px; font-size: 14px; font-weight: 700; color: var(--v2-text); border: 0; background: none; font-family: inherit; cursor: pointer; }
  .v2 .md-links a.strong { color: var(--v2-ink); font-weight: 800; }
  .v2 .md-links .md-logout { margin: 0; }
  .v2 .home-top { flex-direction: column; }
  /* round231(대표자): 모바일도 확인 업체 배너(지도)를 보인다 — 지도 SDK는 스크롤로 닿을 때만 로드. 히어로 아래 한 칸 */
  .v2 .cert-banner { width: 100%; padding: 16px; margin-top: 12px; }
  .v2 .cert-banner .cb-t { font-size: 18px; }
  .v2 .cert-banner .cb-mini-map { height: 160px; }
  .v2 .hero { min-height: 240px; }
  .v2 .cat-track .cat-tile { width: 68px; font-size: 11px; gap: 6px; padding: 4px 0 6px; }
  .v2 .cat-track .cat-tile-img, .v2 .cat-track .cat-tile-img img, .v2 .cat-track .cat-all-ic { width: 52px; height: 52px; }
  .v2 .cat-track .cat-all-ic svg { width: 22px; height: 22px; }
  /* round193: 카테고리 = 흰 카드 안 2줄×5칸 페이지(store-home.js가 10개씩 .cat-page로 묶는다), 화살표(카드 안쪽)·점 표시. 손가락으로도 넘긴다 */
  .v2 .cat-hrow { background: var(--v2-surface); border: 1px solid var(--v2-line); border-radius: 12px; padding: 12px 6px 10px; }
  .v2 .cat-track { scroll-snap-type: x mandatory; }
  .v2 .cat-page { flex: 0 0 100%; scroll-snap-align: start; display: grid; grid-template-columns: repeat(5, minmax(0, 1fr)); gap: 8px 0; }
  .v2 .cat-page > .cat-tile { width: auto; }
  .v2 .cat-hrow .hrow-nav { width: 28px; height: 28px; }
  .v2 .cat-hrow .hrow-nav svg { width: 14px; height: 14px; }
  .v2 .cat-hrow .hrow-nav.prev { left: -6px; } .v2 .cat-hrow .hrow-nav.next { right: -6px; }
  .v2 .cat-dots { display: flex; justify-content: center; gap: 5px; margin-top: 8px; }
  .v2 .cat-dots b { width: 6px; height: 6px; border-radius: 3px; background: var(--v2-line); transition: width .2s; }
  .v2 .cat-dots b.on { width: 16px; background: var(--v2-ink); }
  .v2 .cat-tiles { grid-template-columns: repeat(4, minmax(0, 1fr)); }
  .v2 .strip2 { grid-template-columns: 1fr; }
  .v2 .listwrap { flex-direction: column; align-items: stretch; }   /* round188: 세로 배치에서 flex-start면 목록이 내용 폭(306)으로 줄었다 */
  /* round188: 모바일 목록 — 보기 전환(목록형 기본·2열·3열), 필터는 시트, 정렬은 드롭다운 */
  .v2 .toolbar .vw, .v2 .fc-toggle { display: inline-flex; }
  .v2 .sortdd { margin-left: auto; }
  .v2 .plist[data-view="list"] { display: flex; flex-direction: column; gap: 0; }
  .v2 .plist[data-view="list"] .card { border: 0; border-bottom: 1px solid var(--v2-line); border-radius: 0; }
  .v2 .plist[data-view="list"] .card-link { flex-direction: row; gap: 12px; padding: 12px 0; }
  .v2 .plist[data-view="list"] .thumb { flex: none; width: 120px; height: 120px; border-radius: 8px;   /* round207: 카드 사진 모서리 8 */ }
  .v2 .plist[data-view="list"] .cbody { padding: 0 44px 0 0; flex: 1; }
  .v2 .plist[data-view="list"] .card-cart { right: 0; bottom: 12px; }
  .v2 .plist[data-view="list"] .card-wish { right: 40px; bottom: 12px; }
  .v2 .plist[data-view="list"] .card .prow-price { padding: 0 36px 0 0; }   /* round228: 본문 오른쪽 44 + 36 = 두 버튼 자리 */
  .v2 .plist[data-view="g2"], .v2 .plist[data-view="g3"] { display: grid; gap: 14px 10px; }
  .v2 .plist[data-view="g2"] { grid-template-columns: repeat(2, minmax(0, 1fr)); }
  .v2 .plist[data-view="g3"] { grid-template-columns: repeat(3, minmax(0, 1fr)); gap: 14px 8px; }
  .v2 .plist[data-view="g2"] .card, .v2 .plist[data-view="g3"] .card { border: 0; border-radius: 0; background: transparent; }
  .v2 .plist[data-view="g2"] .thumb, .v2 .plist[data-view="g3"] .thumb { height: auto; aspect-ratio: 1 / 1; border-radius: 8px; }
  .v2 .plist[data-view="g2"] .cbody, .v2 .plist[data-view="g3"] .cbody { padding: 8px 0 0; gap: 4px; }   /* round229: 줄 사이 4px */
  /* round229(대표자 "띄엄띄엄"·"3열에 쿠폰·할인가 안 보임"): 2열·3열은 상호·분류·별점 숨김, 배지 줄은 보이는 배지(친환경·품절)가 있을 때만, 할인 줄(쿠폰·%·정가)은 둘 다 보인다 */
  .v2 .plist[data-view="g2"] .store-name, .v2 .plist[data-view="g3"] .store-name, .v2 .plist[data-view="g3"] .prow-rate, .v2 .plist[data-view="g2"] .pcat, .v2 .plist[data-view="g3"] .pcat { display: none; }
  .v2 .plist[data-view="g2"] .prow-bdg:not(:has(.b-eco)):not(:has(.b-soldout)), .v2 .plist[data-view="g3"] .prow-bdg:not(:has(.b-eco)):not(:has(.b-soldout)) { display: none; }
  .v2 .plist[data-view="g2"] .pname { height: auto; max-height: calc(var(--t-lh-body) * 2em); }   /* round229: 한 줄 이름 밑 빈 줄 없음 */
  .v2 .plist[data-view="g3"] .prow-disc { gap: 4px; min-height: 14px; } .v2 .plist[data-view="g3"] .disc-label, .v2 .plist[data-view="g3"] .org-price { font-size: 11px; }
  .v2 .plist[data-view="g3"] .pname { font-size: 12px; -webkit-line-clamp: 1; max-height: 18px; }
  .v2 .plist[data-view="g3"] .price { font-size: 14px; } .v2 .plist[data-view="g3"] .sale-rate { font-size: 12px; }
  .v2 .plist[data-view="g3"] .cbody { padding-right: 0; }
  .v2 .plist[data-view="g3"] .card .prow-price { padding: 0; }   /* round228: 3열은 버튼이 없다 */
  .v2 .plist[data-view="g2"] .card .prow-price { padding: 6px 70px 0 0; }   /* roundM1(B2): 버튼 30 + 8 + 30 + 2 */
  .v2 .plist[data-view="g3"] .card-cart, .v2 .plist[data-view="g3"] .card-wish { display: none; }
  .v2 .plist[data-view="g2"] .card-cart { right: 2px; bottom: 2px; } .v2 .plist[data-view="g2"] .card-cart-btn { width: 30px; height: 30px; }
  .v2 .plist[data-view="g2"] .card-wish { right: 40px; bottom: 2px; } .v2 .plist[data-view="g2"] .card-wish-btn { width: 30px; height: 30px; }
  /* 필터 시트 — 도구막대 [필터]로 열고 닫기·적용·Esc로 닫는다(store-list.js) */
  .v2 .sidebar.facets { display: none; }
  .v2 .listwrap.fc-open .sidebar.facets { display: flex; position: fixed; inset: 0; z-index: 95; width: auto; border: 0; border-radius: 0; padding: 0 16px calc(84px + env(safe-area-inset-bottom)); overflow-y: auto; background: var(--v2-surface); }
  .v2 .fc-open .fc-sheet-h { display: flex; align-items: center; justify-content: space-between; position: sticky; top: 0; z-index: 1; margin: 0 -16px; padding: 0 8px 0 16px; height: 52px; background: var(--v2-surface); border-bottom: 1px solid var(--v2-line); }
  .v2 .fc-sheet-t { font-size: 17px; font-weight: 800; }
  .v2 .fc-close { width: 40px; height: 40px; border: 0; background: none; display: flex; align-items: center; justify-content: center; cursor: pointer; color: var(--v2-text); } .v2 .fc-close svg { width: 22px; height: 22px; }
  .v2 .fc-open .fc-sheet-f { display: flex; gap: 10px; position: fixed; left: 0; right: 0; bottom: 0; z-index: 96; padding: 12px 16px calc(12px + env(safe-area-inset-bottom)); background: var(--v2-surface); border-top: 1px solid var(--v2-line); }
  .v2 .fc-sheet-f .btn { height: 48px; } .v2 .fc-sheet-f .fc-done { flex: 1; }
  body.fc-lock { overflow: hidden; }
  .v2 .sidebar { width: auto; align-self: stretch; }
  .v2 .dwrap { flex-direction: column; gap: 16px; }
  .v2 .listwrap.no-side .grid4 { grid-template-columns: repeat(2, minmax(0, 1fr)); }
  .v2 .listwrap.no-side .plist[data-view="g3"] { grid-template-columns: repeat(3, minmax(0, 1fr)); }   /* round229(대표자 "3열 보기 작동 안 함"): 필터 없는 목록의 2열 규칙(선택자 4개)이 3열 보기(3개)를 이기고 있었다 */
  .v2 .dinfo { flex: 0 0 auto; min-height: 0; } /* round129 NR-2: 세로 배치에서 flex 1 1 0 + min-height 0 = 패딩만 남고 내용이 넘쳤다 */
  .v2 .dgallery { flex: 0 0 auto; }
  /* .dsticky 숨김은 아래 .dsticky 기본 규칙 뒤에(같은 우선순위라 순서로 진다 — round129 NR-1) */
  .v2 .dgallery { width: auto; }
  .v2 .dmain { height: auto; }   /* round189: 모바일도 정사각(aspect-ratio) — 화면 폭에 맞춰 다시 그려진다 */
  .v2 .dthumbs { overflow-x: auto; scrollbar-width: none; }
  .v2 .dthumbs::-webkit-scrollbar { display: none; }
  .v2 .cat-panel { display: none !important; }
  .v2 .all-wrap .chev { display: none; }
  .v2 .tg-vrf { display: inline-flex; }   /* round186: 모바일 썸네일 태그 */
  .v2 .cbody .b-vrf.mini, .v2 .dinfo .b-vrf.mini { display: none; }   /* 모바일은 썸네일 태그가 대신한다 */
  .v2 .banner-deco { display: none; }
}
@media (max-width: 560px) {
  .v2 { padding-bottom: calc(64px + env(safe-area-inset-bottom)); }   /* round188: 하단 탭바 + 기기 안전영역 */
  .v2 .wrap { margin: 0 12px; }
  .v2 .utilbar .wrap { gap: 12px; overflow-x: auto; scrollbar-width: none; }
  .v2 .utilbar .wrap::-webkit-scrollbar { display: none; }
  .v2 .hd .wrap { padding: 8px 0 10px; }   /* round193: gap 단축 속성을 쓰면 900 블록의 column/row-gap을 덮는다 */
  .v2 .logo { font-size: 20px; }
  .v2 .gnb .wrap { height: 0; }   /* round193: 띠 없음(서랍) */
  .v2 .gnb .all { gap: 6px; }
  .v2 .gnb .bdg, .v2 .gnb .sep:last-of-type { display: none; }
  .v2 .sec { padding-top: 20px; }
  .v2 .sec-t { font-size: 18px; }
  .v2 .grid4, .v2 .grid5 { gap: 10px; }
  .v2 .thumb { height: 160px; }
  .v2 .mdrawer { padding-bottom: calc(64px + env(safe-area-inset-bottom)); }   /* round230(리뷰 1-3): 서랍 마지막 항목이 하단 탭바에 안 가린다 */
  .v2 .cat-hrow .hrow-nav, .v2 .cat-hrow.has-more .hrow-nav { display: none; }   /* round230(리뷰): 모바일 카테고리 줄은 손가락으로 넘긴다 — 화살표가 타일을 덮지 않게 */
  /* round230(리뷰 1-4): 2열 카드(약 164px) — 버튼 30px·본문 좌우 10·가격 15px, 가격 줄만 버튼 자리 70px */
  .v2 .cbody { padding: 10px 10px; }
  .v2 .card-cart-btn, .v2 .card-wish-btn { width: 30px; height: 30px; }
  .v2 .card-wish { right: 44px; }
  .v2 .card .prow-price { padding: 7px 70px 7px 0; }
  .v2 .card:not(:has(.card-cart)) .prow-price { padding-right: 36px; }
  .v2 .price { font-size: 15px; }
  .v2 .dsticky .qty-stepper input[type="number"] { width: 40px; } .v2 .dsticky .qty-stepper button { width: 30px; }
  /* round230(리뷰 1-7): 주문서 카드·입력칸이 375px에서 화면 밖으로 안 넘친다(서식 시스템 320px 고정 폭 → 칸 폭) */
  .v2 .olayout, .v2 .omain, .v2 .ocard { min-width: 0; max-width: 100%; box-sizing: border-box; }
  .v2 .ocard .field > input:not([type="checkbox"]):not([type="radio"]), .v2 .ocard .field > select, .v2 .ocard .field > .juso, .v2 .ocard .field input.w-md, .v2 .ocard .field input.w-sm { width: calc(100% - 24px); max-width: none; }
  .v2 .ocard .juso .juso-q { flex-basis: 100%; }
  .v2 .banner-main { padding: 24px 20px; min-height: 140px; }
  /* 라운드 56 F1: 모바일은 텍스트 슬라이드 자연 높이(없으면 120px) 안에 이미지를 자르지 않고 넣는다(레터박스) */
  /* round193(계약 §3): 배너 = 레퍼런스 비율 10:9(390 → 351). 자유 배치 배너(운영센터 끌어놓기)는 절대 배치를 풀고 세로로 쌓는다 — 버튼이 글자를 덮지 않는다 */
  /* 폰 배너(10:9 상자·자유 배치 흘리기)는 roundM24 블록(파일 끝)으로 — PC와 같은 비율로 비례 축소. 여기 있던 static !important는 인라인 자유 배치를 죽이므로 지웠다 */
  .v2 .hero .banner-img img { object-fit: contain; }
  .v2 .hero-cap { left: 16px; right: 16px; bottom: 44px; gap: 4px; }
  .v2 .hero-cap .t { font-size: 17px; }
  .v2 .hero-cap .sub { font-size: 12px; }
  .v2 .hrow-track > .card { flex-basis: calc((100% - 28px) / 2); }
  .v2 .hrow-nav.prev { left: 4px; } .v2 .hrow-nav.next { right: 4px; }
  .v2 .banner-main .t { font-size: 20px; }
  .v2 .cat-tiles { grid-template-columns: repeat(4, minmax(0, 1fr)); gap: 8px; }
  .v2 .cat-tile { padding: 10px 2px 8px 2px; font-size: 11px; gap: 6px; border: 0; background: transparent; }
  .v2 .cat-tile-ic { width: 48px; height: 48px; background: var(--v2-surface); border: 1px solid var(--v2-line); }
  .v2 .cat-tile-img, .v2 .cat-tile-img img { width: 52px; height: 52px; }
  .v2 .vline { height: 28px; }
  .v2 .dinfo { padding: 12px 0 0; }   /* round208: 상자가 없으니 좌우 여백 없음(화면 여백은 .wrap) */
  .v2 .dvbox::before { width: 120px; height: 140px; right: 26px; top: 0; }
  .v2 .dthumbs img { width: 52px; height: 52px; }
  .v2 .dsec { padding: 18px 16px; }
  .v2 .ft .wrap { padding: 20px 0 28px 0; }
  .v2 .tabbar { position: fixed; bottom: 0; left: 0; right: 0; z-index: 80; display: flex; justify-content: space-around; background: var(--v2-surface); border-top: 1px solid var(--v2-line); padding: 7px 0 calc(7px + env(safe-area-inset-bottom)); }
  .v2 .tabbar a { display: flex; flex-direction: column; align-items: center; gap: 3px; font-size: 11px; font-weight: 500; color: var(--v2-muted); }   /* round211(207-d): 11/500, 선택만 700 */
  .v2 .tabbar a:hover { text-decoration: none; color: var(--v2-ink); }
  .v2 .tabbar a.on { color: var(--v2-ink); font-weight: 700; }
  .v2 .tabbar svg { width: 22px; height: 22px; }
}
.v2 .btn-primary { background: var(--v2-ink); border-color: var(--v2-ink); color: #FFFFFF; }
.v2 .btn-danger { background: var(--v2-sale); border-color: var(--v2-sale); color: #FFFFFF; }
.v2 .btn-danger:hover { background: #C22626; border-color: #C22626; color: #FFFFFF; }
.v2 .btn-primary:hover { background: #000000; border-color: #000000; color: #FFFFFF; }
.v2 .btn.disabled { opacity: .45; pointer-events: none; cursor: default; }
.v2 .qty-stepper { display: inline-flex; align-items: stretch; height: 40px; border: 1px solid var(--v2-line); border-radius: 6px; overflow: hidden; background: var(--v2-surface); vertical-align: middle; }
.v2 .qty-stepper button { width: 34px; border: 0; background: var(--v2-surface); color: var(--v2-muted); font-size: 16px; font-weight: 700; cursor: pointer; font-family: inherit; padding: 0; line-height: 1; }
.v2 .qty-stepper button:hover { background: #F3F4F6; color: var(--v2-ink); }
.v2 .qty-stepper input[type="number"] { width: 48px; height: auto; border: 0; border-left: 1px solid var(--v2-line); border-right: 1px solid var(--v2-line); border-radius: 0; text-align: center; font: inherit; font-weight: 700; padding: 0; background: var(--v2-surface); appearance: textfield; -moz-appearance: textfield; }
.v2 .qty-stepper input::-webkit-outer-spin-button, .v2 .qty-stepper input::-webkit-inner-spin-button { -webkit-appearance: none; margin: 0; }
.v2 .dcart-form .qty-stepper { height: 44px; flex-shrink: 0; }
.v2 .dcart-form .qty-stepper input { width: 52px; }
/* round135(사용자 지적 C129-6): 좁은 폰 폭에서 [장바구니]·[구매하기]가 79px까지 눌려 글자가 깨졌다 — 수량 줄 아래로 내려 반씩 */
@media (max-width: 560px) {
  .v2 .dinfo .dcart-form { flex-wrap: wrap; }
  .v2 .dinfo .dcart-form .btn-lg { flex: 1 1 calc(50% - 4px); }
}
/* 라운드 56 F7: 본문 2열 + 스티키 구매 패널 */
.v2 .dbody { display: flex; gap: 24px; align-items: flex-start; }
.v2 .dbody img, .v2 .dsec img { max-width: 100%; height: auto; }   /* round189: 판매자 상세 이미지가 모바일 폭을 넘지 않게(가로 넘침 0) */
.v2 .dbody-main { flex: 1 1 auto; min-width: 0; display: flex; flex-direction: column; gap: 16px; }
.v2 .dsticky { width: 280px; box-sizing: border-box; flex-shrink: 0; position: sticky; top: 72px; display: flex; flex-direction: column; gap: 10px; background: var(--v2-surface); border: 1px solid var(--v2-line); border-radius: 6px; padding: 16px; }
.v2 .ds-prod { display: flex; align-items: center; gap: 10px; padding-bottom: 12px; border-bottom: 1px solid var(--v2-line); }
.v2 .ds-prod img, .v2 .ds-ph { width: 56px; height: 56px; object-fit: cover; border-radius: 6px; border: 1px solid var(--v2-line); background: #EFF1F0; flex-shrink: 0; display: block; }
.v2 .ds-name { font-size: 13px; font-weight: 700; line-height: 1.4; display: -webkit-box; -webkit-line-clamp: 2; -webkit-box-orient: vertical; overflow: hidden; }
.v2 .ds-form { display: flex; align-items: center; gap: 8px; }
.v2 .ds-form .qty-stepper { height: 40px; }
.v2 .ds-total { display: flex; justify-content: space-between; align-items: baseline; font-weight: 700; font-size: 13px; border-top: 1px solid var(--v2-line); padding-top: 10px; }
.v2 .dsticky .btn-lg { width: 100%; box-sizing: border-box; height: 44px; font-size: 14px; display: inline-flex; align-items: center; justify-content: center; }
/* round129 NR-1: 900px 이하에서는 스티키 구매 상자를 숨긴다(구매는 정보 패널의 .dbuy). 위 기본 규칙과 같은 우선순위라 반드시 그 뒤에 */
/* round189(계약 §4-189): 모바일에서는 스티키 패널이 화면 아래 고정 구매 바가 된다(수량 + 장바구니 + 구매하기, 안전영역). 썸네일·총액은 바에 없음. 규칙 순서: 기본 규칙 뒤(round129 NR-1) */
@media (max-width: 900px) { .v2 .dsticky { position: fixed; left: 0; right: 0; bottom: 0; top: auto; width: auto; z-index: 85; flex-direction: row; align-items: center; gap: 8px; padding: 10px 12px calc(10px + env(safe-area-inset-bottom)); border: 0; border-top: 1px solid var(--v2-line); border-radius: 0; box-shadow: 0 -4px 12px rgba(0,0,0,.06); }
  .v2 .dsticky .ds-prod, .v2 .dsticky .ds-total, .v2 .dsticky .dqty-l { display: none; }
  .v2 .dsticky .ds-form { flex: none; }
  .v2 .dsticky .btn-lg { width: auto; flex: 1; height: 48px; white-space: nowrap; min-width: 0; padding: 0 10px; }   /* round230(리뷰 1-4): '구매하기'가 두 줄로 안 깨진다 */
  .v2 .cart-group { overflow-x: auto; }   /* round230(리뷰 1-2): 장바구니 표가 화면보다 넓으면 표만 가로 스크롤(페이지 축소 없음) */
  .v2 .opt-sub { white-space: nowrap; }
  .v2.pg-detail { padding-bottom: calc(76px + env(safe-area-inset-bottom)); }
  .v2.pg-detail .tabbar { display: none; } }
.v2 .qty-form { display: inline-flex; }
.v2 .osum { background: var(--v2-surface); border: 1px solid var(--v2-line); border-radius: 8px; padding: 20px 22px; margin-bottom: 14px; }
.v2 .osum-t { font-size: 15px; font-weight: 800; margin: 0 0 12px; }
.v2 .osum-row { display: flex; justify-content: space-between; align-items: baseline; gap: 14px; padding: 9px 0; border-top: 1px solid var(--v2-line); font-size: 14px; }
.v2 .osum-row:first-of-type { border-top: 0; padding-top: 0; }
.v2 .osum-row .n { font-weight: 700; min-width: 0; }
.v2 .osum-row .n .osum-q, .v2 .osum .oline .n .osum-q { font-weight: 400; color: var(--v2-muted); font-size: 13px; margin-left: 8px; }
.v2 .osum .oline + .osum-row { border-top: 1px solid var(--v2-line); margin-top: 6px; }   /* round218: 결제 화면 주문 줄 뒤 주문번호 줄 */
.v2 .osum-row .a { text-align: right; }
.v2 .osum-row .a .field-hint { display: block; margin-top: 2px; }
.v2 .osum-row.sub { font-size: 14px; color: var(--v2-muted); }
.v2 .osum-row.sub .n { font-weight: 400; }
.v2 .osum-total { display: flex; justify-content: space-between; align-items: baseline; background: var(--v2-surface); border: 1px solid var(--v2-line); border-radius: 8px; padding: 16px 22px; margin: 0 0 14px; font-weight: 800; }
.v2 .osum-total strong { font-size: 22px; }
.v2 fieldset { background: var(--v2-surface); border: 1px solid var(--v2-line); border-radius: 8px; padding: 18px 22px; margin: 0 0 14px; }
.v2 legend { font-size: 15px; font-weight: 800; padding: 0 6px; }
.v2 .field input:not([type="checkbox"]):not([type="radio"]), .v2 .field select { height: 44px; border-color: var(--v2-line); border-radius: 6px; box-sizing: border-box; }
.v2 .field input:focus, .v2 .field select:focus { border-color: var(--v2-ink); }
.v2 .cart-pick, .v2 .cart-pick-all { width: 18px; height: 18px; min-width: 18px; margin: 0; accent-color: var(--v2-ink); }
.v2 .g-title { display: flex; align-items: center; gap: 12px; }
.v2 .pick-all-l { display: inline-flex; align-items: center; gap: 6px; font-size: 13px; font-weight: 400; color: var(--v2-muted); cursor: pointer; }
.v2 .data-table .pick-c { width: 34px; }
.v2 .olayout { display: flex; gap: 18px; align-items: flex-start; }
.v2 .omain { flex: 1 1 auto; min-width: 0; display: flex; flex-direction: column; gap: 14px; }
.v2 .ocard { background: var(--v2-surface); border: 1px solid var(--v2-line); border-radius: 8px; padding: 20px 22px; }
.v2 .ocard-h { display: flex; justify-content: space-between; align-items: center; margin-bottom: 12px; }
.v2 .ocard-h h2 { font-size: 15px; font-weight: 800; margin: 0; }
.v2 .oline { display: flex; align-items: center; gap: 14px; padding: 6px 0; }
.v2 .oline + .oline { border-top: 1px solid var(--v2-line); padding-top: 12px; }
.v2 .oline .n { flex: 1 1 auto; min-width: 0; font-weight: 700; }
.v2 .oline .oline-unit { display: block; font-weight: 400; color: var(--v2-muted); font-size: 13px; margin-top: 3px; }
.v2 .oline .oline-amt { font-size: 16px; font-weight: 800; white-space: nowrap; }
.v2 .paycard { width: 300px; flex-shrink: 0; position: sticky; top: 14px; background: var(--v2-surface); border: 1px solid var(--v2-line); border-radius: 8px; padding: 20px 22px; display: flex; flex-direction: column; gap: 10px; box-sizing: border-box; }
.v2 .paycard-t { font-size: 16px; font-weight: 800; margin: 0 0 2px; }
/* 라운드 88: 결제 패널 전용(div.prow) — 예전엔 .v2 .prow 전체에 걸려 상품 카드·상세의 가격이 회색, "원"·배지가 오른쪽으로 밀렸다 */
.v2 div.prow { display: flex; justify-content: space-between; align-items: center; gap: 8px; font-size: 13px; }
.v2 div.prow > span:first-child { color: var(--v2-muted); display: inline-flex; align-items: center; gap: 8px; }
.v2 div.prow .sale { color: var(--v2-sale); }
.v2 .ptotal { display: flex; justify-content: space-between; align-items: baseline; border-top: 1px solid var(--v2-line); padding-top: 12px; margin-top: 4px; font-weight: 800; }
.v2 .ptotal strong { font-size: 22px; }
.v2 .pterms { border-top: 1px solid var(--v2-line); padding-top: 10px; display: flex; flex-direction: column; gap: 6px; font-size: 12px; color: var(--v2-muted); }
.v2 .pterms p { margin: 0; display: flex; justify-content: space-between; gap: 10px; }
.v2 .pterms a { color: var(--v2-muted); text-decoration: underline; white-space: nowrap; }
.v2 .pnote { font-size: 12px; color: var(--v2-muted); line-height: 1.6; margin: 0; }
.v2 .paycard .pay-btn { margin-top: 2px; }
.v2 .omodal { border: 0; border-radius: 10px; padding: 0; width: 420px; max-width: 92vw; font-family: var(--v2-font); color: var(--v2-text); }
.v2 .omodal::backdrop { background: rgba(17, 17, 17, .45); }
.v2 .omodal-h { display: flex; justify-content: space-between; align-items: center; padding: 16px 18px 14px; border-bottom: 1px solid var(--v2-line); font-size: 16px; font-weight: 700; letter-spacing: var(--t-ls-title); }   /* round211(207-d): 모든 창 머리 = Title 16/700 + 한 줄 설명 */
.v2 .omodal-h small { display: block; font-size: 12px; font-weight: 400; color: var(--v2-muted); margin-top: 2px; letter-spacing: 0; }
.v2 .omodal-f { gap: 8px; }
.v2 .omodal-f .btn.omodal-sec { flex: 0 0 110px; }   /* .omodal-f .btn { flex: 1 }보다 구체도 높게 */
.v2 .omodal-x { border: 0; background: none; font-size: 15px; cursor: pointer; color: var(--v2-muted); padding: 2px 4px; width: auto; height: auto; }
.v2 .omodal-f { padding: 12px 18px 16px; border-top: 1px solid var(--v2-line); display: flex; }
.v2 .omodal-f .btn { flex: 1; }
.v2 .addr-list { max-height: 320px; overflow-y: auto; padding: 12px 18px; display: flex; flex-direction: column; gap: 8px; }
.v2 .addr-row { text-align: left; border: 1px solid var(--v2-line); border-radius: 8px; background: var(--v2-surface); padding: 12px 14px; cursor: pointer; font: inherit; display: grid; grid-template-columns: minmax(0, 1fr) auto; gap: 2px 10px; align-items: center;   /* round211(207-d): 카드화 */ font-size: 13px; width: 100%; height: auto; }
.v2 .addr-row:hover { border-color: var(--v2-ink); }
.v2 .addr-row b { font-size: 14px; font-weight: 700; display: flex; align-items: center; gap: 8px; }
.v2 .addr-row > span { color: var(--v2-muted); font-size: 13px; }
.v2 .addr-row.on { border-color: var(--v2-ink); box-shadow: 0 0 0 1px var(--v2-ink) inset; }
.v2 .addr-row > .addr-tag { grid-column: 2; grid-row: 1 / span 3; align-self: center; height: 20px; padding: 0 7px; border-radius: 4px; background: var(--bdg-trust); color: #FFFFFF; font-size: var(--t-micro); font-weight: 700; display: inline-flex; align-items: center; }
.v2 .addr-row .addr-a { color: var(--v2-muted); }
.v2 .addr-tag { background: var(--v2-blue-bg); color: var(--v2-blue); font-size: 11px; font-weight: 700; border-radius: 999px; padding: 1px 8px; }
.v2 .addr-empty { padding: 20px; text-align: center; color: var(--v2-muted); font-size: 13px; margin: 0; }
.v2 .addr-form { padding: 0 18px 12px; display: flex; flex-direction: column; gap: 8px; }
.v2 .addr-form input { height: 40px; border: 1px solid var(--v2-line); border-radius: 6px; padding: 0 12px; font: inherit; box-sizing: border-box; }
.v2 .addr-form[hidden] { display: none; }
/* round201 D2: 쿠폰 창 안내 영역 — 4단계 글자 위계만으로(박스·아이콘·배경 없음), 좌측 정렬, 한국어 줄바꿈은 단어 단위. ④는 AA 대비(4.5:1) 안에서 가장 연한 회색 */
.v2 .cguide { padding: 20px 18px 0; text-align: left; word-break: keep-all; }
.v2 .cguide p { margin: 0; }
.v2 .cg-main { font-size: 15px; font-weight: 700; color: #1F2937; line-height: 1.5; }
.v2 .cg-act { margin-top: 4px; font-size: 14px; font-weight: 400; color: var(--v2-muted); line-height: 1.5; }
.v2 .cg-act b { color: var(--v2-ink); font-weight: 700; }
.v2 .cg-sub { margin-top: 18px; font-size: 13px; font-weight: 400; color: #6B7280; line-height: 1.6; }
.v2 .cg-help { margin-top: 3px; font-size: 12px; font-weight: 400; color: #6E7681; line-height: 1.5; }
.v2 .copt-list { padding: 22px 18px 14px; display: flex; flex-direction: column; gap: 10px; max-height: 300px; overflow-y: auto; }
/* round200 D6(대표자): [변경] 창 항목 = 쿠폰 모양 — 왼쪽 할인액 띠(점선 절취), 오른쪽 이름·조건, 고르면 남색 테두리 */
.v2 .copt { display: flex; align-items: stretch; gap: 0; flex: none; font-size: 14px; cursor: pointer; border: 1px solid var(--v2-line); border-radius: 8px; overflow: hidden; background: var(--v2-surface); position: relative; }
.v2 .copt:has(input:checked) { border-color: var(--v2-ink); box-shadow: 0 0 0 1px var(--v2-ink) inset; }
.v2 .copt input[type="checkbox"] { position: absolute; left: 10px; top: 50%; transform: translateY(-50%); width: 18px; height: 18px; margin: 0; accent-color: var(--v2-ink); z-index: 1; }
.v2 .copt .cp-amt { flex: 0 0 112px; display: flex; align-items: center; justify-content: center; padding-left: 26px; font-size: 16px; font-weight: 800; color: var(--v2-sale); background: #FFF4F2; border-right: 1px dashed #F0B8B0; }
.v2 .copt .cp-body { flex: 1; min-width: 0; display: flex; flex-direction: column; gap: 3px; padding: 10px 12px; }
.v2 .copt .cp-name { font-size: 14px; font-weight: 800; }
.v2 .copt .cp-body small { font-size: 11px; color: var(--v2-muted); line-height: 1.4; }
.v2 .copt input[type="radio"] { width: 18px; height: 18px; min-width: 18px; margin: 0; accent-color: var(--v2-ink); }
@media (max-width: 900px) {
  .v2 .olayout { flex-direction: column; }
  .v2 .paycard { width: 100%; position: static; }
}
.v2 .dreq-preset { margin-bottom: 8px; display: block; }   /* round210-b: 너비는 입력칸과 같은 서식 시스템 규칙 */
.v2 .addr-row { position: relative; padding-right: 40px; }
.v2 .addr-del { position: absolute; top: 8px; right: 8px; width: 26px; height: 26px; min-width: 0; border: 0; background: none; color: var(--v2-muted2); font-size: 13px; cursor: pointer; border-radius: 4px; padding: 0;; color: var(--v2-sale); border-color: var(--v2-sale); }
.v2 .addr-del:hover { color: var(--v2-sale); background: #F3F4F6;; background: var(--v2-sale); color: #FFFFFF; }
.v2 .order-cards { display: flex; flex-direction: column; gap: 14px; }
.v2 .oc-h { display: flex; justify-content: space-between; align-items: center; gap: 10px; margin-bottom: 8px; flex-wrap: wrap; }
.v2 .oc-h .t { font-weight: 800; font-size: 14px; display: inline-flex; align-items: center; gap: 8px; flex-wrap: wrap; }
.v2 .oc-line { display: flex; justify-content: space-between; align-items: baseline; gap: 12px; padding: 7px 0; border-top: 1px solid var(--v2-line); font-size: 14px; }
.v2 .oc-line .n { min-width: 0; }
.v2 .oc-vbank { margin: 6px 0 0; font-size: 13px; }
.v2 .oc-f { display: flex; justify-content: space-between; align-items: center; gap: 12px; border-top: 1px solid var(--v2-line); padding-top: 12px; margin-top: 6px; flex-wrap: wrap; }
.v2 .oc-total { font-size: 17px; font-weight: 800; margin-right: 8px; }
.v2 .oc-actions { display: inline-flex; gap: 6px; flex-wrap: wrap; align-items: center; }
.v2 .oc-sub { border-top: 1px dashed var(--v2-line); margin-top: 10px; padding-top: 10px; display: flex; flex-direction: column; gap: 8px; }
.v2 .oc-sub .return-form { display: flex; gap: 6px; align-items: center; flex-wrap: wrap; }
.v2 .oc-sub .return-form select { width: auto; min-width: 110px; height: 36px; }
.v2 .oc-sub .return-form input[type="text"] { flex: 1 1 200px; height: 36px; }
.v2 .oc-sub .return-form input.claim-file { flex: 1 1 100%; font-size: 12px; }
.v2 .oc-sub .return-form input.claim-qty { flex: 0 0 84px; height: 36px; }
.v2 .claim-photos { display: flex; align-items: center; gap: 6px; flex-wrap: wrap; }
.v2 .claim-photos img { width: 56px; height: 56px; object-fit: cover; border-radius: 4px; border: 1px solid var(--v2-line); display: block; }
.v2 .oc-no { margin: -2px 0 8px; font-size: 12px; }
.v2 .content .ocard + .ocard { margin-top: 14px; }
/* round158: 비로그인 [구매하기] 안내 페이지 — 버튼 세로 3개 */
.v2 .gate-actions { display: flex; flex-direction: column; gap: 6px; margin-top: 16px; }
.v2 .gate-actions .btn { width: 100%; }
.v2 .gate-actions .field-hint { margin: 0 0 10px; }
/* round158(C140-3): 검색 자동완성 — datalist 대신 스타일 가능한 목록 */
.v2 .searchwrap { position: relative; flex-grow: 1; min-width: 0; }
.v2 .searchwrap .searchbox { width: 100%; }
.v2 .v2-suggest { position: absolute; top: calc(100% + 4px); left: 0; right: 0; z-index: 80;   /* round220(대표자): 카테고리 띠(.gnb 70)보다 위 */ margin: 0; padding: 6px 0; list-style: none; background: #FFFFFF; border: 1px solid var(--v2-line); border-radius: 6px; box-shadow: 0 8px 24px rgba(17, 17, 17, 0.12); }
.v2 .v2-suggest[hidden] { display: none; }
.v2 .v2-suggest li { padding: 9px 18px; font-size: 14px; cursor: pointer; }
.v2 .v2-suggest li:hover, .v2 .v2-suggest li.on { background: var(--v2-surface); font-weight: 700; }
.v2 .oimg { width: 48px; height: 48px; object-fit: cover; border: 1px solid var(--v2-line); border-radius: 6px; flex-shrink: 0; display: inline-block; background: #EFF1F0; }
.v2 .oimg-ph { background: #EFF1F0; }
.v2 .pdp { max-width: 892px; margin: 0 auto; }
.v2 .pdp img { width: 100%; display: block; border-radius: 8px; margin: 0 0 14px; }
.v2 .pdp .pdp-sec h3 { font-size: 17px; font-weight: 800; margin: 22px 0 10px; }
.v2 .pdp .pdp-sec ul { margin: 0; padding-left: 20px; line-height: 2; font-size: 14px; }
.v2 .pdp .pdp-sec table { width: 100%; border-collapse: collapse; font-size: 14px; }
.v2 .pdp .pdp-sec th, .v2 .pdp .pdp-sec td { border-bottom: 1px solid var(--v2-line); padding: 10px 12px; text-align: left; }
.v2 .pdp .pdp-sec th { width: 160px; color: var(--v2-muted); background: #FAFAFB; font-weight: 700; }
.v2 .pdp .pdp-notice { color: var(--v2-muted); font-size: 13px; margin-top: 16px; }
.v2 .page-head { display: flex; justify-content: space-between; align-items: center; gap: 12px; flex-wrap: wrap; margin-bottom: 8px; }
.v2 .page-head .page-title { margin: 0; }
.v2 .flowbar { display: inline-flex; align-items: center; gap: 8px; font-size: 13px; color: var(--v2-muted); white-space: nowrap; }
.v2 .flowbar .on { color: var(--v2-ink); font-weight: 800; }
.v2 .flowbar .sep { color: var(--v2-line); }
.v2 .claim-card { margin-top: 24px; max-width: 640px; }
.v2 .claim-form { display: flex; gap: 8px; flex-wrap: wrap; margin-top: 10px; }
.v2 .claim-form input { flex: 1; min-width: 180px; }
/* 상품 규격 표(product-attrs PA6) */
/* 라운드 85-b 지시 5: 규격·정책 = 제목 아래 전체 너비 2열 표(레퍼런스: 필수 표기 정보) */
.v2 .danchor { height: 1px; margin: -1px 0 0; scroll-margin-top: 64px; }
.v2 .spec-sec { margin-bottom: 16px; }   /* 탭과 같은 너비(dbody 밖) — dbody 간격과 동일 */
.v2 .spec-grid { margin: 0; display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); border-top: 1px solid var(--v2-line); border-left: 1px solid var(--v2-line); font-size: 13px; }
.v2 .spec-item { display: flex; border-bottom: 1px solid var(--v2-line); border-right: 1px solid var(--v2-line); }
.v2 .spec-item dt { flex: 0 0 224px; padding: 12px 14px; background: var(--v2-bg); color: var(--v2-text); font-weight: 700; line-height: 1.5; white-space: nowrap; }   /* roundM33-c: 머리 칸은 한 줄(14자·14px) — 긴 이름은 Row.head()가 줄이고 전체는 표 밑 ※ */
.v2 .spec-item dd { margin: 0; padding: 12px 14px; line-height: 1.5; min-width: 0; overflow-wrap: anywhere; }
/* round103 PT1 → round105 PT2: 배송/교환/반품 안내 표 — 줄(행)과 줄 사이를 10px 띄운다. 예전에는 칸 안쪽 여백만 10px이라
   줄이 선 하나로 붙어 보였다(사용자 지적). 줄마다 테두리를 가진 띠: 항목 칸(옅은 바탕) + 내용 칸 */
.v2 .policy-table { width: 100%; border-collapse: separate; border-spacing: 0 10px; margin: -10px 0 6px; font-size: 11px; line-height: 1.65; }   /* roundM32-b(대표자 2026-11-01): 14 → 11px(PC·폰) */
.v2 .policy-table th, .v2 .policy-table td { padding: 12px 16px; border: 1px solid var(--v2-line); text-align: left; vertical-align: top; }
.v2 .policy-table th { width: 160px; background: #F7F8FA; color: var(--v2-text); font-weight: 700; white-space: nowrap; border-right: 0; border-radius: 8px 0 0 8px; }
.v2 .policy-table td { color: var(--v2-text); word-break: keep-all; border-radius: 0 8px 8px 0; background: #fff; }
.v2 .policy-more { margin: 0; }
.v2 .policy-more .btn { display: inline-flex; align-items: center; gap: 4px; }
@media (max-width: 960px) { .v2 .policy-table th { width: 96px; white-space: normal; padding: 12px; } .v2 .policy-table td { padding: 12px; } }
.v2 .dsec .dlegal { margin: 0 0 12px; }
@media (max-width: 720px) { .v2 .spec-grid { grid-template-columns: 1fr; } .v2 .spec-item { flex-direction: column; } .v2 .spec-item dt { flex-basis: auto; padding: 8px 10px 2px; font-size: 12px; } .v2 .spec-item dd { padding: 0 10px 8px; font-size: 12px; } }   /* roundM33-c: 폰은 이름 줄(한 줄) 아래 값 줄 — 좁은 폭에서 값 칸이 86px로 찌그러지던 것 해소 */
/* 지시 4: 섹션 탭 — 스크롤에 붙는 4등분 탭, 활성 = 밑줄 */
.v2 .dtabs { position: sticky; top: 0; z-index: 20; display: grid; grid-template-columns: repeat(4, 1fr); margin: 24px 0 16px; background: var(--v2-surface); border: 1px solid var(--v2-line); border-radius: 8px; overflow: hidden; }
.v2 .dtabs a { display: flex; align-items: center; justify-content: center; height: 48px; font-size: 15px; font-weight: 700; color: var(--v2-muted); text-decoration: none; border-bottom: 3px solid transparent; border-right: 1px solid var(--v2-line); transition: color .15s, border-color .15s; }
.v2 .dtabs a:last-child { border-right: 0; }
.v2 .dtabs a:hover { color: var(--v2-text); text-decoration: none; background: var(--v2-bg); }
.v2 .dtabs a.on { color: var(--v2-ink); border-bottom-color: var(--v2-ink); }
.v2 .dtabs a:focus-visible { outline: 0.5px solid var(--c-focus); outline-offset: -3px; }
.v2 .dsec[id] { scroll-margin-top: 64px; }
.v2 .detail-page { scroll-behavior: smooth; }
/* 라운드 57 LP2: 내 주문 페이저 */
.v2 .pager { display: flex; align-items: center; gap: 8px; flex-wrap: wrap; margin-top: 4px; }
.v2 .store-pager { margin-top: 24px; padding-top: 16px; border-top: 1px solid var(--v2-line); } /* store-paging SP5 */
.v2 .pager .pager-nums { display: inline-flex; gap: 2px; }
.v2 .pager .pg { min-width: 32px; height: 32px; padding: 0 6px; display: inline-flex; align-items: center; justify-content: center; border-radius: 4px; font-weight: 700; font-size: 13px; color: var(--v2-text); }
.v2 .pager .pg.on { background: var(--v2-ink); color: #FFFFFF; }   /* roundM28-b: 원복 */
.v2 .pager .pg:hover { text-decoration: none; background: var(--v2-ink-bg); }
.v2 .pager .pg.on:hover { background: var(--v2-ink); }
.v2 .pager .is-disabled { opacity: .45; pointer-events: none; }
.v2 .pager .pager-total { margin-left: auto; font-size: 12px; }
/* review-photos RP2·RP3: 리뷰 사진 */
.v2 .review-photos { display: flex; align-items: center; gap: 6px; flex-wrap: wrap; margin-top: 8px; }
.v2 .review-photos img { width: 72px; height: 72px; object-fit: cover; border-radius: 4px; border: 1px solid var(--v2-line); display: block; }
.v2 .review-photos .rp { position: relative; display: inline-block; }
.v2 .review-photos .rp img { width: 56px; height: 56px; }
.v2 .review-photos .rp .inline-form { position: absolute; top: -6px; right: -6px; margin: 0; }
.v2 .review-photos .rp-x { width: 20px; height: 20px; border-radius: 999px; border: 1px solid var(--v2-line); background: var(--v2-surface); color: var(--v2-muted); font-size: 13px; line-height: 1; cursor: pointer; padding: 0; }
.v2 .review-photos .rp-x:hover { color: var(--v2-sale); border-color: var(--v2-sale); }
/* review-reply RR4: 판매자 답글 */
.v2 .review-reply { margin: 8px 0 4px 12px; padding: 10px 12px; border-left: 3px solid var(--v2-ink); background: var(--v2-ink-bg); border-radius: 0 6px 6px 0; }
.v2 .review-reply-h { font-size: 12px; font-weight: 800; color: var(--v2-ink); display: flex; gap: 6px; align-items: baseline; }
/* restock-alert RA1·RA4 */
.v2 .restock { display: flex; flex-direction: column; gap: 8px; align-items: flex-start; }
.v2 .restock-form { display: flex; align-items: center; gap: 10px; flex-wrap: wrap; }
.v2 .restock-btn.on { border-color: var(--v2-green); color: var(--v2-green); }
.v2 .restock-grid { display: grid; grid-template-columns: repeat(4, minmax(0, 1fr)); gap: 14px; }
.v2 .restock-item { display: flex; flex-direction: column; gap: 6px; }
.v2 .restock-item .inline-form { margin: 0; }
@media (max-width: 900px) { .v2 .restock-grid { grid-template-columns: repeat(2, minmax(0, 1fr)); } }
/* round93: claim progress box (order detail / guest order) */
.v2 .claim-progress { background: var(--v2-bg-soft, #F7F8FA); border: 1px solid var(--v2-line); border-radius: 8px; padding: 14px 16px; }
.v2 .claim-progress .cp-t { margin: 0 0 10px; font-size: 13px; font-weight: 700; }
.v2 .claim-progress .cp-list { list-style: none; margin: 0; padding: 0; display: grid; gap: 10px; font-size: 13px; line-height: 1.55; }
.v2 .claim-progress .cp-list li { display: flex; gap: 10px; align-items: flex-start; flex-wrap: wrap; }
.v2 .claim-progress .cp-list .badge { flex: none; }
.v2 .claim-progress .cp-kv { margin: 0; flex: 1 1 260px; display: grid; gap: 6px; }
.v2 .claim-progress .cp-kv div { display: grid; grid-template-columns: 110px 1fr; gap: 8px; }
.v2 .claim-progress .cp-kv dt { color: var(--v2-muted, #6B7280); }
.v2 .claim-progress .cp-kv dd { margin: 0; white-space: pre-line; word-break: break-word; }
@media (max-width: 560px) { .v2 .claim-progress .cp-kv div { grid-template-columns: 1fr; gap: 2px; } }
/* round94: banner title size (S/L; M = default 27px) */
.v2 .hero .bnr.ts-S .t { font-size: 22px; }
.v2 .hero .bnr.ts-L .t { font-size: 34px; line-height: 1.28; }
@media (max-width: 720px) { .v2 .hero .bnr.ts-S .t { font-size: 17px; } .v2 .hero .bnr.ts-L .t { font-size: 22px; } }
/* round98 SJ6·EV2: 가입 폼의 확인 버튼(아이디 중복 확인·이메일 인증번호) — 입력칸 오른쪽 끝, 결과는 칸 아래 */
.v2 .ifield .ifield-btn { flex: none; height: 34px; margin-right: 6px; padding: 0 12px; border: 1px solid var(--v2-ink); border-radius: 6px; background: var(--v2-surface); color: var(--v2-ink); font-family: inherit; font-size: 13px; font-weight: 700; white-space: nowrap; cursor: pointer; }
.v2 .ifield .ifield-btn:hover { background: var(--v2-ink-bg); }
.v2 .ifield .ifield-btn:disabled { opacity: .5; cursor: progress; }
.v2 .check-box { margin: -4px 0 10px; }
.v2 .email-code .code-row input { height: 40px; border: 1px solid var(--v2-line); border-radius: 6px; }
/* round102 LS5: 페이지를 옮길 때 스토어 헤더는 그대로 있고 본문만 짧게 바뀐다(문서 간 View Transitions — 지원 브라우저만) */
@media (prefers-reduced-motion: no-preference) {
  @view-transition { navigation: auto; }
  ::view-transition-old(root), ::view-transition-new(root) { animation-duration: .07s; }   /* round103: .12s → .07s — 이동마다 더해지는 시간을 줄인다 */
  .v2 > header { view-transition-name: a2a-store-header; }
  ::view-transition-group(a2a-store-header) { animation: none; }
  ::view-transition-old(a2a-store-header) { display: none; }
  ::view-transition-new(a2a-store-header) { animation: none; }
}
/* >>> a2a-icons (generated — edit scripts/form-system/a2a-icons.css, then run scripts/form-system/sync.py) */
/* ===== 국산24 아이콘 세트 — 단일 원본. sync.py가 세 app.css와 store-v2.css에 같은 내용을 넣는다(스토어 전용 화면은 app.css를 부르지 않는다) ===== */
/* round95-b: icon set — feather line icons as CSS masks (inherit text color). No emoji / text-symbol icons in UI. */
/* roundM48(대표자 2026-11-04 "다시 B형 현대형으로"): 구매자몰 선 아이콘 한 벌 = B 현대형(선 2·둥근 끝·둥근 모서리, 모양은 시안 B 좌표). M47의 D(2.4)에서 교체. 별·하트 채움·그림 아이콘은 그대로, 판매자·운영센터 app.css 세트는 손대지 않았다 */
.ic { display: inline-block; width: 1em; height: 1em; vertical-align: -0.125em; background-color: currentColor; flex: none;
  -webkit-mask: var(--ic) center / contain no-repeat; mask: var(--ic) center / contain no-repeat; }
.ic-lock { --ic: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='black' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Crect x='3' y='11' width='18' height='11' rx='2'/%3E%3Cpath d='M7 11V7a5 5 0 0 1 10 0v4'/%3E%3C/svg%3E"); }
.ic-x { --ic: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='black' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M6.5 6.5l11 11M17.5 6.5l-11 11'%3E%3C/path%3E%3C/svg%3E"); }   /* roundM48 B */
.ic-check, .btn-save { --ic: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='black' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpolyline points='20 6 9 17 4 12'/%3E%3C/svg%3E"); }
.ic-heart { --ic: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='black' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M12 20.3 4.6 13a4.6 4.6 0 0 1 6.5-6.5l.9.9.9-.9a4.6 4.6 0 0 1 6.5 6.5z'%3E%3C/path%3E%3C/svg%3E"); }   /* roundM48 B */
.ic-arrow-up { --ic: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='black' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cline x1='12' y1='19' x2='12' y2='5'/%3E%3Cpolyline points='5 12 12 5 19 12'/%3E%3C/svg%3E"); }
.ic-arrow-down { --ic: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='black' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cline x1='12' y1='5' x2='12' y2='19'/%3E%3Cpolyline points='19 12 12 19 5 12'/%3E%3C/svg%3E"); }
.ic-chevron-right, .lnk-go, .btn-next { --ic: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='black' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpolyline points='9 18 15 12 9 6'/%3E%3C/svg%3E"); }
.ic-chevron-down { --ic: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='black' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpolyline points='6 9 12 15 18 9'/%3E%3C/svg%3E"); }
.ic-chevron-up { --ic: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='black' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpolyline points='18 15 12 9 6 15'/%3E%3C/svg%3E"); }
.ic-corner { --ic: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='black' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpolyline points='15 10 20 15 15 20'/%3E%3Cpath d='M4 4v7a4 4 0 0 0 4 4h12'/%3E%3C/svg%3E"); }
.ic-external, .btn-external { --ic: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='black' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M18 13v6a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V8a2 2 0 0 1 2-2h6'/%3E%3Cpolyline points='15 3 21 3 21 9'/%3E%3Cline x1='10' y1='14' x2='21' y2='3'/%3E%3C/svg%3E"); }
.ic-trend-up { --ic: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='black' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpolyline points='23 6 13.5 15.5 8.5 10.5 1 18'/%3E%3Cpolyline points='17 6 23 6 23 12'/%3E%3C/svg%3E"); }
.ic-trend-down { --ic: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='black' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpolyline points='23 18 13.5 8.5 8.5 13.5 1 6'/%3E%3Cpolyline points='17 18 23 18 23 12'/%3E%3C/svg%3E"); }
.ic-star { --ic: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='black'%3E%3Cpolygon points='12 2 15.09 8.26 22 9.27 17 14.14 18.18 21.02 12 17.77 5.82 21.02 7 14.14 2 9.27 8.91 8.26 12 2'/%3E%3C/svg%3E"); }
.ic-heart-fill { --ic: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='black'%3E%3Cpath d='M20.84 4.61a5.5 5.5 0 0 0-7.78 0L12 5.67l-1.06-1.06a5.5 5.5 0 0 0-7.78 7.78l1.06 1.06L12 21.23l7.78-7.78 1.06-1.06a5.5 5.5 0 0 0 0-7.78z'/%3E%3C/svg%3E"); }
.ic-user { --ic: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='black' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Ccircle cx='12' cy='7.5' r='3.8'%3E%3C/circle%3E%3Cpath d='M4.5 20.5a7.5 7.5 0 0 1 15 0z'%3E%3C/path%3E%3C/svg%3E"); }   /* roundM48 B */
.ic-chevron-left, .lnk-back, .btn-back { --ic: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='black' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpolyline points='15 18 9 12 15 6'/%3E%3C/svg%3E"); }
.ic-home { --ic: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='black' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M3 10.5 12 3l9 7.5'/%3E%3Cpath d='M5 9.5V21h5v-6h4v6h5V9.5'/%3E%3C/svg%3E"); }
.ic-check-circle, .btn-approve { --ic: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='black' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Ccircle cx='12' cy='12' r='10'/%3E%3Cpolyline points='8 12 11 15 16 9'/%3E%3C/svg%3E"); }
.ic-alert-circle { --ic: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='black' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Ccircle cx='12' cy='12' r='10'/%3E%3Cline x1='12' y1='8' x2='12' y2='12'/%3E%3Cline x1='12' y1='16' x2='12.01' y2='16'/%3E%3C/svg%3E"); }
.ic-alert-triangle { --ic: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='black' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M10.29 3.86 1.82 18a2 2 0 0 0 1.71 3h16.94a2 2 0 0 0 1.71-3L13.71 3.86a2 2 0 0 0-3.42 0z'/%3E%3Cline x1='12' y1='9' x2='12' y2='13'/%3E%3Cline x1='12' y1='17' x2='12.01' y2='17'/%3E%3C/svg%3E"); }
.ic-info { --ic: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='black' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Ccircle cx='12' cy='12' r='10'/%3E%3Cline x1='12' y1='16' x2='12' y2='12'/%3E%3Cline x1='12' y1='8' x2='12.01' y2='8'/%3E%3C/svg%3E"); }
.ic-x-circle, .btn-reject { --ic: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='black' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Ccircle cx='12' cy='12' r='10'/%3E%3Cline x1='15' y1='9' x2='9' y2='15'/%3E%3Cline x1='9' y1='9' x2='15' y2='15'/%3E%3C/svg%3E"); }
.ic-thumbs-up { --ic: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='black' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M7.5 10.5v10h-3a1 1 0 0 1-1-1v-8a1 1 0 0 1 1-1zM7.5 10.5 11 3.5a2 2 0 0 1 2.2 2v4.3H19a2 2 0 0 1 2 2.4l-1.3 6.6a2 2 0 0 1-2 1.7H7.5'%3E%3C/path%3E%3C/svg%3E"); }   /* roundM48 B */
.ic-thumbs-down { --ic: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='black' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cg transform='rotate(180 12 12)'%3E%3Cpath d='M7.5 10.5v10h-3a1 1 0 0 1-1-1v-8a1 1 0 0 1 1-1zM7.5 10.5 11 3.5a2 2 0 0 1 2.2 2v4.3H19a2 2 0 0 1 2 2.4l-1.3 6.6a2 2 0 0 1-2 1.7H7.5'%3E%3C/path%3E%3C/g%3E%3C/svg%3E"); }   /* roundM48 B(위 엄지 180° 회전) */
.ic-lg { width: 1.25em; height: 1.25em; }
.ic-zap-arrow { --ic: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='black' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M2 7h9l-3.5 9H20'/%3E%3Cpolyline points='16 12 20 16 16 20'/%3E%3C/svg%3E"); }
/* round117 GA1: 글자 화살표 대신 — 되돌아가기 링크는 .lnk-back(문구 앞 꺾쇠), 나아가기 링크·버튼은 .lnk-go(문구 뒤 꺾쇠).
   th:text를 쓰는 요소에 클래스만 붙인다. 장식이라 읽기 도구에는 읽히지 않는다. 검사: scripts/glyph-arrow-scan.py */
.lnk-back::before, .lnk-go::after { content: ""; display: inline-block; width: 1em; height: 1em; vertical-align: -0.125em; background-color: currentColor; flex: none;
  -webkit-mask: var(--ic) center / contain no-repeat; mask: var(--ic) center / contain no-repeat; }
.lnk-back::before { margin-right: .2em; margin-left: -.2em; }
.lnk-go::after { margin-left: .2em; margin-right: -.2em; }
/* 제출 중에는 같은 자리(::after)가 스피너다(.btn-busy·.htmx-request) — 꺾쇠 마스크를 걷고 스피너 크기로 */
.lnk-go.btn-busy::after, .lnk-go.htmx-request::after { -webkit-mask: none; mask: none; background-color: transparent; width: 12px; height: 12px; margin: 0 0 0 8px; vertical-align: -2px; }
/* round166(계약 round166-button-purpose): 용도별 버튼(.btn-*)이 같은 마스크를 쓴다 — 아이콘 원본은 여기 한 곳 */
.ic-download, .btn-download { --ic: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='black' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M21 15v4a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2v-4'/%3E%3Cpolyline points='7 10 12 15 17 10'/%3E%3Cline x1='12' y1='15' x2='12' y2='3'/%3E%3C/svg%3E"); }
.ic-upload, .btn-upload { --ic: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='black' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M21 15v4a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2v-4'/%3E%3Cpolyline points='17 8 12 3 7 8'/%3E%3Cline x1='12' y1='3' x2='12' y2='15'/%3E%3C/svg%3E"); }
.ic-sheet, .btn-excel { --ic: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='black' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Crect x='3' y='3' width='18' height='18' rx='2'/%3E%3Cline x1='3' y1='9' x2='21' y2='9'/%3E%3Cline x1='3' y1='15' x2='21' y2='15'/%3E%3Cline x1='9' y1='3' x2='9' y2='21'/%3E%3C/svg%3E"); }
.ic-print, .btn-print { --ic: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='black' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpolyline points='6 9 6 2 18 2 18 9'/%3E%3Cpath d='M6 18H4a2 2 0 0 1-2-2v-5a2 2 0 0 1 2-2h16a2 2 0 0 1 2 2v5a2 2 0 0 1-2 2h-2'/%3E%3Crect x='6' y='14' width='12' height='8'/%3E%3C/svg%3E"); }
.ic-trash, .btn-delete { --ic: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='black' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpolyline points='3 6 5 6 21 6'/%3E%3Cpath d='M19 6v14a2 2 0 0 1-2 2H7a2 2 0 0 1-2-2V6m3 0V4a2 2 0 0 1 2-2h4a2 2 0 0 1 2 2v2'/%3E%3C/svg%3E"); }
.ic-plus, .btn-add { --ic: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='black' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cline x1='12' y1='5' x2='12' y2='19'/%3E%3Cline x1='5' y1='12' x2='19' y2='12'/%3E%3C/svg%3E"); }
.ic-search, .btn-search { --ic: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='black' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Ccircle cx='10.5' cy='10.5' r='6.5'%3E%3C/circle%3E%3Cpath d='M20.5 20.5l-5.3-5.3'%3E%3C/path%3E%3C/svg%3E"); }   /* roundM48 B */
.ic-edit, .btn-edit { --ic: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='black' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M11 4H4a2 2 0 0 0-2 2v14a2 2 0 0 0 2 2h14a2 2 0 0 0 2-2v-7'/%3E%3Cpath d='M18.5 2.5a2.121 2.121 0 0 1 3 3L12 15l-4 1 1-4 9.5-9.5z'/%3E%3C/svg%3E"); }
.ic-eye, .btn-view { --ic: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='black' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M1 12s4-8 11-8 11 8 11 8-4 8-11 8-11-8-11-8z'/%3E%3Ccircle cx='12' cy='12' r='3'/%3E%3C/svg%3E"); }
.ic-logout, .btn-logout { --ic: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='black' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M9 21H5a2 2 0 0 1-2-2V5a2 2 0 0 1 2-2h4'/%3E%3Cpolyline points='16 17 21 12 16 7'/%3E%3Cline x1='21' y1='12' x2='9' y2='12'/%3E%3C/svg%3E"); }
.crumb-sep { margin: 0 .25em; opacity: .6; }
/* <<< a2a-icons */
/* round123 AS3: 주소 검색 조각 — 검색 입력 + [주소 검색] + 결과 목록. 화면별 CSS 금지 → 단일 원본 */
.v2 .juso { display: flex; flex-wrap: wrap; gap: 6px; margin-bottom: 6px; }
.v2 .juso .juso-q { flex: 1 1 220px; min-width: 0; }
.v2 .juso .juso-list { flex-basis: 100%; list-style: none; margin: 0; padding: 0; max-height: 260px; overflow: auto; border: 1px solid var(--v2-line); border-radius: 6px; background: var(--v2-surface); }
.v2 .juso .juso-list li + li { border-top: 1px solid var(--v2-line); }
.v2 .juso .juso-hit { display: grid; grid-template-columns: 4.5em 1fr; gap: 0 10px; width: 100%; padding: 8px 10px; border: 0; background: none; text-align: left; font: inherit; cursor: pointer; color: inherit; word-break: keep-all; }
.v2 .juso .juso-hit:hover, .juso .juso-hit:focus-visible { background: var(--v2-bg); outline: none; }
.v2 .juso .juso-zip { font-weight: 700; color: var(--v2-ink); }
.v2 .juso .juso-road { font-weight: 700; }
.v2 .juso .juso-jibun { grid-column: 2; font-size: 12px; color: var(--v2-muted); }
.v2 .juso .juso-note { flex-basis: 100%; margin: 0; font-size: 12px; color: var(--v2-muted); }

/* round123-b N2: 결과 카드(결제창 닫힘·결제 실패) — 아이콘·제목·설명·사유·버튼 */
.v2 .result-card { max-width: 560px; margin: 8px auto 32px; padding: 36px 28px 28px; border: 1px solid var(--v2-line); border-radius: 12px; background: var(--v2-surface); text-align: center; }
.v2 .result-ic { margin: 0 auto 14px; width: 60px; height: 60px; border-radius: 50%; display: flex; align-items: center; justify-content: center; }
.v2 .result-ic .ic { width: 32px; height: 32px; }
.v2 .result-card.is-danger .result-ic { background: var(--c-danger-bg); color: var(--c-danger); }
.v2 .result-card.is-neutral .result-ic { background: var(--c-neutral-bg); color: var(--v2-muted); }
.v2 .result-t { font-size: 22px; font-weight: 800; margin: 0 0 8px; letter-spacing: -0.01em; word-break: keep-all; }
.v2 .result-d { margin: 0; color: var(--v2-muted); font-size: 14px; line-height: 1.6; word-break: keep-all; }
.v2 .result-reason { display: inline-flex; gap: 8px; align-items: baseline; margin: 16px auto 0; padding: 8px 14px; background: var(--c-danger-bg); color: var(--c-danger); border-radius: 6px; font-size: 13px; }
.v2 .result-reason b { font-weight: 700; }
.v2 .result-actions { display: flex; justify-content: center; gap: 8px; margin-top: 24px; flex-wrap: wrap; }
/* round123-b AB6·AB7: 배송지 관리 — 기본 배송지 라디오 열·건수 */
.v2 .section-count { margin-left: 8px; font-size: 13px; font-weight: 700; color: var(--v2-muted); }
.v2 .addr-table .addr-th-default, .v2 .addr-table .addr-td-default { width: 56px; text-align: center; }
.v2 .addr-table .addr-td-default input[type="radio"] { width: 18px; height: 18px; margin: 0; vertical-align: middle; cursor: pointer; accent-color: var(--c-primary); }
.v2 .addr-table .addr-label { font-weight: 700; cursor: pointer; margin-right: 6px; }
.v2 .addr-table tr.is-default td { background: var(--c-success-bg); }
/* round225(대표자 2): 배송지 표는 주소만 접히고 나머지는 한 줄 */
.v2 .addr-table th, .v2 .addr-table td { white-space: nowrap; }
.v2 .addr-table td.addr-addr { white-space: normal; min-width: 220px; }

/* round124 MO3: 내 주문 상태 탭 — 판매자센터 .ftabs와 같은 알약형 */
.v2 .ftabs { display: flex; gap: 6px; margin: 0 0 16px; flex-wrap: wrap; }
.v2 .ftabs a { display: inline-flex; align-items: center; padding: 7px 14px; border: 1px solid var(--v2-line); border-radius: 999px; background: var(--v2-surface); font-size: 13px; font-weight: 700; color: var(--v2-muted); text-decoration: none; word-break: keep-all; }
.v2 .ftabs a:hover { border-color: var(--v2-ink); color: var(--v2-text); text-decoration: none; }
.v2 .ftabs a.on { background: var(--v2-ink); border-color: var(--v2-ink); color: #fff; }   /* roundM28-b: 원복 */
/* round179 B2·S2: 탭 위 말풍선(건수가 있을 때만 서버가 넣는다). 판매자센터 app.css .tab-tip과 같은 규칙 */
.v2 .ftabs.has-tip { margin-top: 36px; }
.v2 .ftabs a { position: relative; }
.v2 .ftabs .tab-tip { position: absolute; left: 50%; bottom: calc(100% + 9px); transform: translateX(-50%); padding: 5px 10px; border-radius: 6px; background: var(--v2-ink); color: #fff; font-size: 12px; font-weight: 700; line-height: 1.3; white-space: nowrap; pointer-events: none; }
.v2 .ftabs .tab-tip::after { content: ""; position: absolute; left: 50%; top: 100%; margin-left: -5px; border: 5px solid transparent; border-top-color: var(--v2-ink); }
.v2 .page-head .btn { flex: none; }
/* round124 RC1: 결제 정보 카드(주문 상세·비회원) */
.v2 .pay-box .osum-row .a { text-align: right; }
.v2 .pay-actions { display: flex; gap: 8px; flex-wrap: wrap; margin-top: 12px; }
.v2 .pay-hint { margin: 8px 0 0; font-size: 12px; color: var(--v2-muted); line-height: 1.5; }
/* round124 MO4·RC3: 인쇄용 문서 — 화면에서는 종이처럼 한 장, 인쇄에서는 표만 */
.v2 .doc { max-width: 860px; margin: 0 auto 32px; background: var(--v2-surface); border: 1px solid var(--v2-line); border-radius: 8px; padding: 32px 36px; }
.v2 .doc-h { display: flex; justify-content: space-between; align-items: flex-end; gap: 16px; border-bottom: 2px solid var(--v2-ink); padding-bottom: 12px; margin-bottom: 16px; flex-wrap: wrap; }
.v2 .doc-h h1 { font-size: 24px; font-weight: 800; margin: 0; letter-spacing: -0.01em; }
.v2 .doc-h .sub { font-size: 13px; color: var(--v2-muted); margin: 4px 0 0; }
.v2 .doc-meta { font-size: 13px; line-height: 1.7; text-align: right; }
.v2 .doc-meta b { font-weight: 700; }
.v2 .doc-tools { display: flex; gap: 8px; justify-content: flex-end; max-width: 860px; margin: 0 auto 12px; }
.v2 .doc-tools-full { max-width: none; }   /* round124-b: 전체 폭 문서(인쇄용 목록)는 버튼을 문서 오른쪽 끝에 */
.v2 .page-head-tools { display: inline-flex; gap: 6px; flex: none; }
.v2 .doc-grid { display: grid; grid-template-columns: 1fr 1fr; gap: 16px; margin-bottom: 16px; }
.v2 .doc-sec { border: 1px solid var(--v2-line); border-radius: 6px; padding: 12px 14px; }
.v2 .doc-sec h2 { font-size: 13px; font-weight: 800; margin: 0 0 8px; color: var(--v2-muted); }
.v2 .doc-sec .kv { display: grid; grid-template-columns: 96px 1fr; gap: 4px 10px; font-size: 13px; line-height: 1.5; }
.v2 .doc-sec .kv .k { color: var(--v2-muted); }
.v2 .doc table.data-table { width: 100%; font-size: 13px; }
.v2 .doc table.data-table th { background: var(--v2-bg); font-weight: 700; }
.v2 .doc .sum { margin: 12px 0 0 auto; width: 320px; max-width: 100%; font-size: 14px; }
.v2 .doc .sum .osum-row { padding: 6px 0; }
.v2 .doc .sum .total { font-size: 17px; font-weight: 800; }
.v2 .doc-notice { margin: 18px 0 0; font-size: 12px; color: var(--v2-muted); line-height: 1.6; word-break: keep-all; }
.v2 .doc-full { max-width: none; }
@media (max-width: 720px) {
  .v2 .doc { padding: 20px 16px; }
  .v2 .doc-grid { grid-template-columns: 1fr; }
  .v2 .doc-meta { text-align: left; }
}
@media print {
  .v2 .v2-hd, .v2 .v2-top, .v2 header, .v2 footer, .v2 .my-tiles, .v2 .doc-tools, .v2 .banner, .v2 .btn { display: none !important; }
  .v2 .content { padding: 0; max-width: none; }
  .v2 .doc { border: 0; border-radius: 0; padding: 0; max-width: none; box-shadow: none; }
  .v2 .doc-sec, .v2 .doc table.data-table th, .v2 .doc table.data-table td { border-color: #999; }
  .v2 .doc table.data-table th { background: #eee; -webkit-print-color-adjust: exact; print-color-adjust: exact; }
  a[href]::after { content: none; }
}

/* round125 RV2·RV3: 리뷰 도움돼요/안돼요 — 알약 버튼(내 표는 강조), 정렬 링크 */
.v2 .rsort { margin-left: auto; display: inline-flex; gap: 10px; font-size: 13px; font-weight: 700; }
.v2 .rsort a { color: var(--v2-muted); text-decoration: none; }
.v2 .rsort a.on { color: var(--v2-text); text-decoration: underline; text-underline-offset: 3px; }
.v2 .sec-t { display: flex; align-items: baseline; gap: 8px; flex-wrap: wrap; }
.v2 .vote-row { display: flex; gap: 6px; align-items: center; flex-wrap: wrap; margin-top: 8px; }
.v2 .vote-btn { display: inline-flex; align-items: center; gap: 4px; height: 30px; padding: 0 12px; border: 1px solid var(--v2-line); border-radius: 999px; background: var(--v2-surface); font: inherit; font-size: 13px; font-weight: 700; color: var(--v2-muted); cursor: pointer; width: auto; }
.v2 .vote-btn:hover { border-color: var(--v2-ink); color: var(--v2-text); }
.v2 .vote-btn.on { background: var(--v2-ink); border-color: var(--v2-ink); color: #fff; }
.v2 .vote-pill { display: inline-flex; align-items: center; height: 30px; padding: 0 12px; border: 1px solid var(--v2-line); border-radius: 999px; font-size: 13px; font-weight: 700; color: var(--v2-muted); background: var(--v2-bg); }

/* round126 PM2: 선호 결제수단 라디오 카드 */
.v2 .paypref-form { display: grid; grid-template-columns: repeat(auto-fill, minmax(220px, 1fr)); gap: 10px; }
.v2 .paypref-opt { display: grid; grid-template-columns: 22px 1fr; gap: 2px 10px; align-items: center; padding: 14px 16px; border: 1px solid var(--v2-line); border-radius: 8px; background: var(--v2-surface); cursor: pointer; }
.v2 .paypref-opt input[type="radio"] { width: 18px; height: 18px; margin: 0; grid-row: span 2; accent-color: var(--c-primary); }
.v2 .paypref-opt .t { font-weight: 700; font-size: 14px; }
.v2 .paypref-opt .d { font-size: 12px; color: var(--v2-muted); line-height: 1.5; word-break: keep-all; }
.v2 .paypref-opt:hover { border-color: var(--v2-ink); }
.v2 .paypref-opt.on { border-color: var(--v2-ink); box-shadow: inset 0 0 0 1px var(--v2-ink); }
.v2 .paypref-form .autosubmit-fallback { grid-column: 1 / -1; }
.v2 .pay-pref { margin-top: 6px; }

/* round128(사용자 지시 3): 구매자 화면 가독성 — 판매자센터·운영센터(정보 밀도형)와 달리 글자를 키우고 버튼 위계를 분명히 */
.v2 .content .page-title { font-size: 24px; font-weight: 800; letter-spacing: -0.01em; }
.v2 .content .page-desc { font-size: 14px; line-height: 1.6; color: var(--v2-muted); }
.v2 .content .section-title { font-size: 18px; font-weight: 800; margin: 28px 0 12px; }
.v2 .content .data-table { font-size: 14px; }
.v2 .content .data-table th, .v2 .content .data-table td { padding: 12px 12px; }
.v2 .content .data-table thead th { font-size: 13px; font-weight: 700; }
/* round225(대표자 4): 표 머리글·숫자 칸 줄바꿈 금지(긴 글만 접힌다) */
.v2 .content .data-table th, .v2 .content .data-table td.num { white-space: nowrap; }
.v2 .content .field-hint, .v2 .content .pay-hint { font-size: 13px; }
.v2 .content .badge { font-size: 12px; height: 22px; padding: 0 8px; }
.v2 .btn { border-color: var(--c-border-strong, #C9CDD3); }
.v2 .btn:where(:hover) { border-color: var(--v2-ink); background: var(--v2-bg); }   /* round146: 색 버튼을 덮지 않게 :where */
.v2 .btn-primary, .v2 .btn-ink { border-color: var(--v2-ink); }
.v2 .oc-actions .btn, .v2 .row-actions .btn { min-width: 84px; }
.v2 .oc-h .t b { font-size: 15px; }
.v2 .oc-total { font-size: 18px; }
.v2 .empty p { font-size: 15px; }
/* M34-c: .banner 글자 크기 강제(14px) 삭제 — 줄 알림 13·띠 14는 서식 원본이 정한다 */
/* round227: 모바일(≤900)은 썸네일 왼쪽 아래에 "국산 검증" 태그가 있어 마크를 그 위로 */
@media (max-width: 900px) { .v2 .cert-marks { bottom: 30px; } .v2 .dmain .cert-marks { bottom: 34px; } }
/* ===== roundM1(모바일 트랙 R-A, 계약 mobile-M1-buyer-web): 구매자 폰 정돈. 파일 끝에 두는 이유 = 같은 우선순위의 앞 규칙(기본 .ocard·.oline·.dtabs a)을 순서로 이긴다(230의 .ocard 14/12가 뒤 기본 규칙에 밀려 죽어 있던 함정) ===== */
.v2 .paybar-total { display: none; }   /* PC: 총액은 요약 카드 .ptotal 줄에 있다 */
@media (max-width: 900px) {
  /* B3: 상세 고정 탭 바 53 → 44(a 39 + 밑줄 3 + 상자 테두리 2) */
  .v2 .dtabs a { height: 39px; font-size: 14px; }
  /* B4: 장바구니 표 → 카드 줄(마크업은 표 1벌, 열 순서는 뒤에서 센다: 처리·금액·수량·단가·상품) */
  .v2 .cart-group { padding: 14px; }
  .v2 .cart-group .data-table, .v2 .cart-group tbody { display: block; width: 100%; min-width: 0; border: 0; }
  .v2 .cart-group thead { display: none; }
  .v2 .cart-group tbody tr { display: grid; grid-template-columns: 20px minmax(0, 1fr) auto 32px; grid-template-areas: "pick name name name" "pick unit unit unit" "pick qty amt del"; column-gap: 10px; row-gap: 8px; align-items: center; padding: 12px 0; border-top: 1px solid var(--v2-line); background: none; }
  .v2 .cart-group tbody tr:first-child { border-top: 0; padding-top: 0; }
  .v2 .cart-group tbody tr:hover { background: none; }
  .v2 .cart-group .data-table td { display: block; padding: 0; border: 0; background: none; min-width: 0; white-space: normal; }   /* .v2 .content .data-table td(12px)보다 뒤, 같은 구체도 */
  .v2 .cart-group td:nth-last-child(5) { grid-area: name; display: grid; grid-template-columns: 56px minmax(0, 1fr); grid-template-areas: "img a" "img small"; column-gap: 10px; align-items: start; }
  .v2 .cart-group td:nth-last-child(5) .cart-thumb { grid-area: img; width: 56px; height: 56px; margin: 0; }
  .v2 .cart-group td:nth-last-child(5) > a, .v2 .cart-group td:nth-last-child(5) > .muted { grid-area: a; font-size: 14px; font-weight: 700; line-height: 1.4; display: -webkit-box; -webkit-line-clamp: 2; -webkit-box-orient: vertical; overflow: hidden; }
  .v2 .cart-group td:nth-last-child(5) > small { grid-area: small; margin: 2px 0 0; }
  .v2 .cart-group .data-table td:nth-last-child(4) { grid-area: unit; padding-left: 66px; font-size: 13px; color: var(--v2-muted); text-align: left; }
  .v2 .cart-group td:nth-last-child(3) { grid-area: qty; }
  .v2 .cart-group td:nth-last-child(2) { grid-area: amt; text-align: right; font-size: 15px; font-weight: 700; }
  .v2 .cart-group td:last-child { grid-area: del; }
  .v2 .cart-group tbody td.pick-c { grid-area: pick; width: auto; align-self: start; padding-top: 18px; }   /* nth-last-child 규칙 뒤(같은 우선순위) */
  .v2 .cart-group .cart-pick { width: 20px; height: 20px; margin: 0; }
  .v2 .cart-group .qty-stepper { height: 36px; }
  .v2 .cart-group .qty-stepper button { width: 32px; }
  .v2 .cart-group .qty-stepper input[type="number"] { width: 40px; }
  .v2 .cart-group .btn-delete { width: 32px; height: 32px; padding: 0; min-width: 0; border-radius: 6px; display: inline-flex; align-items: center; justify-content: center; gap: 0; background: var(--v2-surface); border-color: var(--v2-line); color: var(--v2-sale); }   /* 폰은 외곽선 휴지통(빨간 채움은 글자 버튼용) */
  .v2 .cart-group .btn-delete::before { margin: 0; width: 16px; height: 16px; }
  .v2 .cart-group .btn-delete .t { position: absolute; width: 1px; height: 1px; overflow: hidden; clip: rect(0,0,0,0); white-space: nowrap; }
  /* 옵션 상품(215): 머리 줄은 colspan 칸 하나(사진·이름·옵션 n개), 옵션 줄은 ┗ 옵션명 아래 수량·금액·삭제 */
  .v2 .cart-group tr.cart-prow { grid-template-columns: 20px minmax(0, 1fr); grid-template-areas: "pick name"; padding-bottom: 4px; }
  .v2 .cart-group tr.cart-prow td { background: none; font-weight: 700; }
  .v2 .cart-group tr.cart-prow td:last-child { grid-area: name; display: grid; grid-template-columns: 56px minmax(0, 1fr); grid-template-areas: "img a" "img small"; column-gap: 10px; align-items: start; }
  .v2 .cart-group tr.cart-prow td:last-child .cart-thumb { grid-area: img; width: 56px; height: 56px; margin: 0; }
  .v2 .cart-group tr.cart-prow td:last-child > a, .v2 .cart-group tr.cart-prow td:last-child > .muted { grid-area: a; font-size: 14px; line-height: 1.4; display: -webkit-box; -webkit-line-clamp: 2; -webkit-box-orient: vertical; overflow: hidden; }
  .v2 .cart-group tr.cart-prow td:last-child > small { grid-area: small; margin: 2px 0 0; }
  .v2 .cart-group tr.cart-orow { border-top: 0; padding-top: 4px; }
  .v2 .cart-group tr.cart-orow td:nth-last-child(5) { display: block; }
  .v2 .cart-group tr.cart-orow td:nth-last-child(4) { padding-left: 18px; }   /* (0,4,1) = 위 unit 규칙과 같은 구체도, 뒤가 이긴다 */
  .v2 .cart-group tr.cart-orow .opt-sub { white-space: normal; font-size: 13px; }
  /* 게스트(cart-guest): 선택 칸이 없어 열이 하나 적다 */
  .v2 .cart-guest tbody tr { grid-template-columns: minmax(0, 1fr) auto 32px; grid-template-areas: "name name name" "unit unit unit" "qty amt del"; }
  .v2 .cart-guest tr.cart-prow { grid-template-columns: minmax(0, 1fr); grid-template-areas: "name"; }
  /* 묶음 합계 줄 + [상품 주문하기] 48 전폭(게스트는 두 버튼 세로) */
  .v2 .cart-sub { justify-content: space-between; padding-top: 12px; border-top: 1px solid var(--v2-line); }
  .v2 .cart-sub .sum { margin-left: auto; }
  .v2 .cart-sub .btn { flex: 1 1 100%; height: 48px; font-size: 15px; }
}
@media (max-width: 560px) {
  /* 공통: 좌우 여백 16 통일(.wrap 12 → 16, main.content 24 → 16), 구역 사이 24 */
  .v2 .wrap { margin: 0 16px; }
  .v2 .content { padding-left: 16px; padding-right: 16px; }
  .v2 .sec { padding-top: 24px; }
  /* B1: 히어로 글자 20, 버튼 44 */
  .v2 .hero .bnr .t, .v2 .hero .bnr.ts-S .t, .v2 .hero .bnr.ts-L .t, .v2 .hero-cap .t, .v2 .banner-main .t { font-size: 20px; }
  .v2 .hero .btn-lg { box-sizing: border-box; height: 44px; padding: 0 18px; font-size: 14px; }   /* .btn은 content-box라 테두리 포함 44로 */
  /* B1·B2: 홈 신상품(split-grid)·행사(hrow-track) 카드 = 목록 2열 카드 규격(테두리 없음·사진 모서리 8·본문 8 0 0·상호 숨김·가격 줄 70) */
  .v2 .split-grid > .card, .v2 .hrow-track.grid5 > .card { border: 0; border-radius: 0; background: transparent; }
  .v2 .split-grid > .card .thumb, .v2 .hrow-track.grid5 > .card .thumb { border-radius: 8px; }
  .v2 .split-grid > .card .cbody, .v2 .hrow-track.grid5 > .card .cbody { padding: 8px 0 0; gap: 4px; }
  .v2 .split-grid > .card .store-name, .v2 .hrow-track.grid5 > .card .store-name { display: none; }
  .v2 .split-grid > .card .pname, .v2 .hrow-track.grid5 > .card .pname { height: auto; max-height: calc(var(--t-lh-body) * 2em); }
  .v2 .split-grid > .card .prow-price, .v2 .hrow-track.grid5 > .card .prow-price { padding: 6px 70px 0 0; }
  .v2 .split-grid > .card .card-cart, .v2 .hrow-track.grid5 > .card .card-cart { right: 2px; bottom: 2px; }
  .v2 .split-grid > .card .card-wish, .v2 .hrow-track.grid5 > .card .card-wish { right: 40px; bottom: 2px; }
  /* B3: 리뷰 사진 2열(정사각) */
  .v2 .review-photos > a { flex: 0 0 calc(50% - 3px); }
  .v2 .review-photos > a img { width: 100%; height: auto; aspect-ratio: 1 / 1; border-radius: 8px; }
  /* B5: 주문서 카드 14/12, 상품 줄 = 사진 48 · 이름 2줄 · 수량·금액은 다음 줄(줄바꿈 허용) */
  .v2 .ocard { padding: 14px 12px; }
  .v2 .oline { flex-wrap: wrap; gap: 8px 10px; }
  .v2 .oline .n { flex: 1 1 calc(100% - 58px); font-size: 14px; line-height: 1.4; }
  .v2 .oline .n > span:first-child { display: -webkit-box; -webkit-line-clamp: 2; -webkit-box-orient: vertical; overflow: hidden; }
  .v2 .oline .qty-stepper { margin-left: 58px; height: 36px; }
  .v2 .oline .qty-stepper button { width: 32px; }
  .v2 .oline .qty-stepper input[type="number"] { width: 40px; }
  .v2 .oline .oline-amt { margin-left: auto; }
  /* B5: 결제 = 하단 고정 바(총액 + [결제하기] 52). 탭바는 숨기고 본문 아래를 바 높이만큼 비운다(상세 pg-detail과 같은 방식) */
  .v2:has(.paybar) { padding-bottom: calc(104px + env(safe-area-inset-bottom)); }   /* 바 77 + 빠진 항목 한 줄 */
  .v2:has(.paybar) .tabbar { display: none; }
  .v2 .paybar { position: fixed; left: 0; right: 0; bottom: 0; z-index: 85; display: grid; grid-template-columns: minmax(0, 1fr) auto; align-items: center; column-gap: 12px; padding: 12px 16px calc(12px + env(safe-area-inset-bottom)); background: var(--v2-surface); border-top: 1px solid var(--v2-line); box-shadow: 0 -4px 12px rgba(0, 0, 0, .06); }
  .v2 .paybar-total { display: flex; flex-direction: column; font-size: 12px; color: var(--v2-muted); }
  .v2 .paybar-total strong { font-size: 18px; font-weight: 800; color: var(--v2-text); }
  .v2 .paybar .pay-btn { width: auto; min-width: 140px; height: 52px; padding: 0 22px; margin: 0; }
  .v2 .paybar .pay-missing { grid-column: 1 / -1; margin: 0; font-size: 12px; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
}
/* ===== roundM1-c(대표자 2026-10-17 C-M1b-1 지적, 계약 mobile-M1-buyer-web §7): 마이페이지 — 폰 /my는 전체메뉴 목록(구역 4·줄 56), 폰 하위 화면은 5칸 줄(.my-quick), 머리 사람 아이콘은 /my. PC는 9칸 타일 그대로(순서 주문·찜·쿠폰 먼저) ===== */
.v2.pg-my .my-tiles .cat-tile { order: 10; }
.v2.pg-my .my-tiles .cat-tile[href="/my/orders"] { order: 1; }
.v2.pg-my .my-tiles .cat-tile[href="/my/wishlist"] { order: 2; }
.v2.pg-my .my-tiles .cat-tile[href="/my/coupons"] { order: 3; }
.v2.pg-my .my-home-id { margin: -4px 0 14px; }
.v2 .my-quick, .v2 .my-menu { display: none; }   /* PC: 타일 줄이 맡는다 */
@media (max-width: 900px) {
  .v2 .my-tiles { display: none; }
  /* 하위 화면·첫 화면 공통: 5칸 줄(아이콘 24 · 라벨 11), 현재 메뉴는 남색 700 */
  .v2 .my-quick { display: grid; grid-template-columns: repeat(5, minmax(0, 1fr)); gap: 2px; margin: 0 0 16px; padding: 6px 2px; background: var(--v2-surface); border: 1px solid var(--v2-line); border-radius: 10px; }
  .v2 .my-quick a { display: flex; flex-direction: column; align-items: center; gap: 4px; min-height: 52px; padding: 6px 2px 4px; font-size: 11px; font-weight: 500; color: var(--v2-muted); line-height: 1.2; word-break: keep-all; text-align: center; }
  .v2 .my-quick a:hover { text-decoration: none; color: var(--v2-ink); }
  .v2 .my-quick a.on { color: var(--v2-ink); font-weight: 700; }
  .v2 .my-quick svg { width: 24px; height: 24px; }
  /* 첫 화면(/my): 5칸 줄은 숨기고 전체메뉴 목록. 구역 사이는 바탕색 띠 8px(화면 좌우 끝까지) */
  .v2.pg-my .my-quick { display: none; }
  .v2 .my-menu { display: block; margin: 0 -16px; background: var(--v2-bg); }
  .v2 .my-sec { background: var(--v2-surface); padding: 14px 16px 2px; border-top: 1px solid var(--v2-line); border-bottom: 1px solid var(--v2-line); }
  .v2 .my-sec + .my-sec { margin-top: 8px; }
  .v2 .my-sec-t { margin: 0 0 4px; font-size: 15px; font-weight: 800; color: var(--v2-text); }
  .v2 .my-row { display: flex; align-items: center; gap: 14px; width: 100%; min-height: 56px; padding: 0; border: 0; border-top: 1px solid var(--v2-line); background: none; color: var(--v2-text); font: inherit; font-size: 15px; font-weight: 500; text-align: left; cursor: pointer; box-sizing: border-box; }
  .v2 .my-sec-t + .my-row { border-top: 0; }
  .v2 .my-row:hover { text-decoration: none; color: var(--v2-ink); }
  .v2 .my-row-ic { width: 24px; height: 24px; flex: none; display: inline-flex; align-items: center; justify-content: center; }
  .v2 .my-row-ic svg { width: 24px; height: 24px; }
  .v2 .my-row .t { flex: 1 1 auto; min-width: 0; }
  .v2 .my-row .ic-chevron-right { width: 18px; height: 18px; flex: none; color: var(--v2-muted); }
  .v2 .my-row-muted { color: var(--v2-muted); }
  .v2 .my-row-logout { margin: 0; border-top: 1px solid var(--v2-line); }
  .v2 .my-row-logout button { display: flex; align-items: center; gap: 14px; width: 100%; min-height: 56px; padding: 0; border: 0; background: none; color: var(--v2-text); font: inherit; font-size: 15px; font-weight: 500; text-align: left; cursor: pointer; }
}
/* ===== roundM9(계약 mobile-M9-my-orders, 대표자 레퍼런스 2026-10-18): 내 주문 카드 — 머리 상태 · 썸네일 80 | 날짜 12 · 상품명 14 · 가격 16 · 링크 13 · 진행막 · 버튼 40(13/700) + [···] 바닥 시트. 마크업 1벌(PC도 같다) ===== */
.v2 .oc2-search { display: flex; align-items: center; gap: 0; margin: 0 0 12px; border: 1px solid var(--v2-line); border-radius: 8px; background: var(--v2-surface); overflow: hidden; }
.v2 .oc2-search input { flex: 1 1 auto; min-width: 0; height: 44px; border: 0; padding: 0 14px; font: inherit; font-size: 14px; background: transparent; }
.v2 .oc2-search input:focus { outline: none; }
.v2 .oc2-search:focus-within { border-color: var(--v2-ink); }
.v2 .oc2-search button { width: 48px; height: 44px; border: 0; background: transparent; color: var(--v2-text); display: flex; align-items: center; justify-content: center; cursor: pointer; }
.v2 .oc2-search button .ic { width: 20px; height: 20px; }
.v2 .ocard.oc2 { padding: 14px; border-radius: 10px; }
.v2 .oc2-h { display: flex; align-items: baseline; gap: 8px; flex-wrap: wrap; margin: 0 0 10px; }
.v2 .oc2-st { font-size: 15px; font-weight: 800; color: var(--v2-text); }
.v2 .oc2-st.is-ship { color: var(--v2-ink); }
.v2 .oc2-st.is-off { color: var(--v2-muted); }
.v2 .oc2-aux { font-size: 12px; }
.v2 .oc2-bdg { display: inline-flex; gap: 4px; flex-wrap: wrap; margin-left: auto; }
.v2 .oc2-b { display: flex; gap: 12px; align-items: flex-start; }
.v2 .oc2-img { flex: none; width: 80px; height: 80px; border-radius: 8px; overflow: hidden; background: #EFF1F0; border: 1px solid var(--v2-line); display: block; }
.v2 .oc2-img img, .v2 .oc2-img .oimg { width: 100%; height: 100%; object-fit: cover; display: block; border: 0; border-radius: 0; }
.v2 .oc2-m { flex: 1 1 auto; min-width: 0; display: flex; flex-direction: column; gap: 3px; }
.v2 .oc2-m p { margin: 0; }
.v2 .oc2-d { font-size: 12px; }
.v2 .oc2-n { font-size: 14px; font-weight: 500; line-height: 1.4; display: -webkit-box; -webkit-line-clamp: 2; -webkit-box-orient: vertical; overflow: hidden; word-break: keep-all; }
.v2 .oc2-p { font-size: 16px; font-weight: 800; line-height: 1.3; }
.v2 .oc2-p .won { font-size: 12px; font-weight: 500; margin-left: 1px; }
.v2 .oc2-l { display: flex; gap: 14px; font-size: 13px; margin-top: 2px; }
.v2 .oc2-l a { color: var(--v2-ink); font-weight: 700; }
.v2 .oc2-l a + a { margin-left: auto; color: var(--v2-text); font-weight: 500; }
.v2 .oc2-prog { list-style: none; margin: 14px 0 0; padding: 0 0 2px; display: grid; grid-template-columns: repeat(4, 1fr); position: relative; }
.v2 .oc2-prog::before { content: ""; position: absolute; left: 12.5%; right: 12.5%; top: 24px; height: 2px; background: var(--v2-line); }
.v2 .oc2-prog li { position: relative; text-align: center; font-size: 11px; color: var(--v2-muted); padding-top: 0; }
.v2 .oc2-prog li i { display: block; width: 12px; height: 12px; margin: 18px auto 0; border-radius: 999px; border: 2px solid var(--v2-line); background: var(--v2-surface); box-sizing: border-box; position: relative; z-index: 1; }
.v2 .oc2-prog li span { display: block; position: absolute; left: 0; right: 0; top: 0; }
.v2 .oc2-prog li.done i { border-color: var(--v2-ink); background: var(--v2-ink); }
.v2 .oc2-prog li.done { color: var(--v2-text); }
.v2 .oc2-prog li.now i { width: 16px; height: 16px; margin-top: 16px; border-color: var(--v2-ink); background: var(--v2-surface); box-shadow: inset 0 0 0 3px var(--v2-ink); }
.v2 .oc2-prog li.now { color: var(--v2-ink); font-weight: 800; }
.v2 .oc2-prog li.now span { background: var(--v2-ink); color: #FFFFFF; border-radius: 999px; padding: 2px 0; left: 10%; right: 10%; }
.v2 .oc2-acts { display: flex; gap: 6px; margin-top: 12px; }
.v2 .oc2-acts > form, .v2 .oc2-acts > a, .v2 .oc2-acts > button { flex: 1 1 0; min-width: 0; margin: 0; display: flex; }
.v2 .oc2-acts .btn { width: 100%; height: 40px; padding: 0 6px; font-size: 13px; font-weight: 700; border-radius: 6px; white-space: nowrap; }
.v2 .oc2-acts > .oc2-more-btn { flex: 0 0 44px; height: 40px; padding: 0; font-size: 16px; letter-spacing: 1px; border-radius: 6px; }
.v2 .oc2-nudge { margin: 8px 0 0; font-size: 12px; color: var(--v2-ink); }
.v2 .oc2-sub { margin-top: 10px; padding-top: 10px; border-top: 1px dashed var(--v2-line); font-size: 13px; }
.v2 .oc2-sub.oc-sub[hidden] { display: none; }
.v2 .oc2-sub .refund-acct summary { font-size: 13px; }
.v2 .oc2-more { width: min(420px, calc(100% - 32px)); max-width: none; padding: 8px 8px 12px; border: 1px solid var(--v2-line); border-radius: 12px; background: var(--v2-surface); color: var(--v2-text); }
.v2 .oc2-more::backdrop { background: rgba(17, 17, 17, .45); }
.v2 .oc2-more-h { display: flex; align-items: center; justify-content: space-between; padding: 6px 8px 8px 12px; border-bottom: 1px solid var(--v2-line); margin-bottom: 4px; }
.v2 .oc2-more-h b { font-size: 15px; }
.v2 .oc2-more-row { display: flex; align-items: center; justify-content: space-between; min-height: 48px; padding: 0 8px 0 12px; font-size: 15px; font-weight: 500; color: var(--v2-text); border-radius: 8px; }
.v2 .oc2-more-row:hover { background: var(--v2-bg); text-decoration: none; }
.v2 .oc2-more-row .ic { width: 18px; height: 18px; color: var(--v2-muted); }
.v2 .oc2-more-row[hidden] { display: none; }
@media (max-width: 560px) {
  .v2 .oc2-more { position: fixed; left: 0; right: 0; bottom: 0; top: auto; width: 100%; margin: 0; border: 0; border-radius: 16px 16px 0 0; padding: 8px 8px calc(12px + env(safe-area-inset-bottom)); }
  .v2 .page-head-tools { display: none; }   /* 인쇄·엑셀은 PC */
}
/* ===== roundM16(계약 mobile-M16-order-detail): 주문 상세 — M9 카드(.oc2) 재사용 + 품목 n줄 · 접힘 폼(44 입력·textarea 3줄·사진 첨부 줄·[신청] 44 전폭) · 결제·배송지 카드 줄(라벨 13 회색 84 | 값 14, 총액 16/800) · 카드 간격 10. 마크업 1벌(PC도 같다). 파일 끝에 두는 이유 = M1·M9와 같다(앞의 같은 구체도 규칙을 순서로 이긴다) ===== */
.v2 .od .ocard { padding: 14px; border-radius: 10px; }
.v2 .od .ocard + .ocard { margin-top: 10px; }
.v2 .od .od-back { margin: 0 0 10px; }
.v2 .od .page-title { margin-bottom: 12px; }
.v2 .od-no { display: flex; flex-wrap: wrap; gap: 6px; margin: -4px 0 12px; font-size: 12px; }
.v2 .od-items { display: flex; flex-direction: column; }
.v2 .od-item + .od-item { margin-top: 12px; padding-top: 12px; border-top: 1px solid var(--v2-line); }
.v2 .od-q { display: flex; flex-wrap: wrap; align-items: center; gap: 6px; font-size: 12px; }
.v2 .od .oc2-l { margin-top: 10px; }
.v2 .od .oc2-acts:not(:has(.btn)) { display: none; }
.v2 .od .oc2-acts { display: grid; grid-auto-flow: column; grid-auto-columns: minmax(0, 1fr); gap: 6px; }   /* 폼 안 버튼과 맨 버튼의 안쪽 여백 차이(14) 없이 같은 폭 — M9의 flex 1 1 0은 content-box 여백만큼 달랐다 */
.v2 .od .oc2-acts > form, .v2 .od .oc2-acts > a, .v2 .od .oc2-acts > button { min-width: 0; width: auto; }
.v2 .od .oc2-acts .btn { box-sizing: border-box; width: 100%; min-width: 0; }
.v2 .od-sub .od-form { display: flex; flex-direction: column; }
.v2 .od-form .od-l { font-size: 12px; color: var(--v2-muted); margin: 10px 0 4px; }
.v2 .od-form .od-l:first-child { margin-top: 0; }
.v2 .od-form select, .v2 .od-form input:not([type="file"]) { width: 100%; max-width: none; height: 44px; box-sizing: border-box; font-size: 14px; flex: none; margin: 0; }
.v2 .od-form textarea { width: 100%; max-width: none; box-sizing: border-box; min-height: 0; height: 88px; padding: 10px 12px; font-size: 14px; line-height: 1.6; resize: none; margin: 0; }   /* 3줄 = 14 × 1.6 × 3 + 10 × 2 + 테두리 */
.v2 .od-file { position: relative; display: flex; align-items: center; gap: 8px; height: 44px; margin-top: 10px; padding: 0 12px; border: 1px dashed var(--v2-muted2); border-radius: 6px; font-size: 13px; color: var(--v2-text); cursor: pointer; box-sizing: border-box; }
.v2 .od-file:focus-within { border-color: var(--v2-ink); }
.v2 .od-file .ic { width: 18px; height: 18px; flex: none; }
.v2 .od-file .od-file-t { flex: 1 1 auto; min-width: 0; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
.v2 .od-file .od-file-n { flex: none; font-size: 12px; font-weight: 700; color: var(--v2-ink); }
.v2 .od-form > .btn { width: 100%; height: 44px; margin-top: 12px; font-size: 14px; font-weight: 700; border-radius: 6px; box-sizing: border-box; }
.v2 .od-sub .field-hint { margin: 8px 0 0; font-size: 12px; }
.v2 .od .pay-box .osum-row, .v2 .od-ship .osum-row { padding: 7px 0; border-top: 0; gap: 12px; justify-content: flex-start; align-items: flex-start; font-size: 14px; color: var(--v2-text); }
.v2 .od .pay-box .osum-row .n, .v2 .od-ship .osum-row .n { flex: 0 0 84px; font-size: 13px; font-weight: 400; color: var(--v2-muted); }
.v2 .od .pay-box .osum-row .a, .v2 .od-ship .osum-row .a { flex: 1 1 auto; min-width: 0; text-align: left; word-break: keep-all; overflow-wrap: anywhere; }
.v2 .od .pay-box .osum-row.od-total { margin-top: 4px; padding-top: 10px; border-top: 1px solid var(--v2-line); }
.v2 .od .pay-box .osum-row.od-total .n { font-size: 14px; font-weight: 700; color: var(--v2-text); }
.v2 .od .pay-box .osum-row.od-total .a { font-size: 16px; font-weight: 800; }
.v2 .od .pay-box .osum-row.od-total + .osum-row { margin-top: 6px; padding-top: 10px; border-top: 1px dashed var(--v2-line); }
.v2 .od .pay-actions { gap: 6px; margin-top: 12px; }
.v2 .od .pay-actions .btn { flex: 1 1 0; min-width: 0; height: 40px; padding: 0 6px; font-size: 13px; border-radius: 6px; }

/* roundM16-b (2026-10-29 C-M16-1 owner note): my-orders tabs stay on one line on phones. Horizontal scroll instead of wrapping, chips 13/6-11,
   the unpaid tip moves into the scroll box padding so overflow does not clip it. End-of-file block: it must beat .v2 .ftabs { flex-wrap: wrap } above. */
@media (max-width: 560px) {
  .v2 .ftabs { flex-wrap: nowrap; gap: 4px; overflow-x: auto; -webkit-overflow-scrolling: touch; scrollbar-width: none; margin: 0 0 12px; }
  .v2 .ftabs::-webkit-scrollbar { display: none; }
  .v2 .ftabs.has-tip { margin-top: 0; padding-top: 36px; }
  .v2 .ftabs a { flex: 0 0 auto; padding: 6px 7px; font-size: 11px; letter-spacing: -0.2px; white-space: nowrap; }   /* owner choice 2026-10-30: 11px so all four chips fit 375 without scrolling */
}
/* ===== roundM18(계약 mobile-M18-mobile-ux, 대표자 2026-10-30 "모바일 전반 어색"): 구매자 폰 UX — ① 작업형 머리(main.content 화면 = [뒤로] 로고 [장바구니] 한 줄, 검색 줄 없음) ② 상세 구매 동선 하나(인라인 버튼·빵부스러기 숨김, 고정 바 = [찜][장바구니][구매하기], 수량은 본문) ③ 폰 폼 규칙(라벨 위·띠 없음·칸 44 전폭·저장 전폭) ④ 주문서 동의 체크는 바 안·빈 항목 줄 클릭 → 칸 ⑤ 배송지 표 → 카드 ⑥ 홈·목록·카드 소정리. 파일 끝에 두는 이유 = M1·M9·M16과 같다(앞의 같은 구체도 규칙을 순서로 이긴다). PC(901 이상)는 바뀌지 않는다 ===== */
.v2 .hd-back { display: none; }   /* PC·탐색형 화면(홈·목록·검색·상세)에는 없다 */
.v2 .ds-wish { display: none; }   /* PC 스티키 패널의 찜은 본문(.dbuy)에 있다 */
.v2 .paybar .pagree { align-items: center; margin: 0; }   /* 동의 체크(마크업이 바 안으로) — PC 요약 카드 맨 아래 모양은 전과 같다 */
.v2 .paybar .pagree input { width: 18px; height: 18px; min-width: 18px; margin: 0; }
.v2 .paybar .pagree-error { margin: 2px 0 0; }
.v2 .paybar .pay-btn { margin-top: 10px; }
.v2 .pay-missing { display: block; width: 100%; border: 0; background: none; padding: 0; margin: 6px 0 0; font: inherit; font-size: 12px; color: var(--v2-sale); text-align: left; cursor: pointer; }   /* 누르면 첫 빈 칸으로(checkout.js) — 글자만 있는 버튼 */
.v2 .pay-missing[hidden] { display: none; }
.v2 .result-actions .btn-primary { order: -1; }
@media (max-width: 900px) {
  /* ① 작업형 머리 — :has(> main.content)는 장바구니·주문서·결제·결과·마이 하위·회원정보·배송지(app.css 뼈대 화면). 홈·목록·검색·상세(main.wrap.sec)는 2단 머리 그대로 */
  .v2:has(> main.content) .hd .wrap { grid-template-columns: 44px minmax(0, 1fr) auto minmax(0, 1fr) auto; grid-template-areas: "back . logo . cart"; row-gap: 0; padding: 6px 0; }
  .v2:has(> main.content) .searchwrap, .v2:has(> main.content) .brand-tag, .v2:has(> main.content) .hd-menu, .v2:has(> main.content) .hd-icon[href="/my"], .v2:has(> main.content) .hd-auth { display: none; }
  .v2:has(> main.content) .hd-back { grid-area: back; display: flex; align-items: center; justify-content: center; width: 44px; height: 44px; margin-left: -10px; color: var(--v2-text); }
  .v2:has(> main.content) .hd-back .ic { width: 26px; height: 26px; }
  /* /my 첫 화면은 탭 화면이라 [뒤로] 없이 햄버거·구슬 그대로, 검색 줄만 없다 */
  .v2.pg-my:has(> main.content) .hd .wrap { grid-template-columns: 36px minmax(0, 1fr) auto minmax(0, 1fr) auto; grid-template-areas: "menu tag logo . cart"; }
  .v2.pg-my:has(> main.content) .hd-back { display: none; }
  .v2.pg-my:has(> main.content) .hd-menu { display: flex; }
  .v2.pg-my:has(> main.content) .brand-tag { display: inline-flex; }
  /* 검색창 = 누르는 높이 44(테두리 2 포함), 버튼 52 */
  .v2 .searchbox { height: 44px; }   /* roundM25: 알약(2px 테두리 포함) */
  .v2 .searchbox input { height: 40px; padding: 0 16px; }
  .v2 .searchbox button { width: 50px; height: 40px; }
  /* ② 상세 — 구매 동선 하나: 빵부스러기·인라인 찜·[장바구니]·[구매하기] 숨김(수량·총액 줄은 옵션 아래 본문에 남는다), 고정 바 = [찜 48][장바구니][구매하기](스테퍼 숨김 — 값은 buy.js가 #dqty와 맞춘 hidden 폼) */
  .v2.pg-detail .crumbs { display: none; }
  .v2.pg-detail .dname-row .wish-form, .v2.pg-detail .dbuy .dcart-form .btn-lg { display: none; }   /* roundM44: 찜 폼은 제목 줄로 옮겼다(PC) — 폰은 고정 바의 찜 하나 */
  .v2.pg-detail .dbuy .dcart-form { gap: 10px; }
  .v2.pg-detail .dtotal-row { display: none; }   /* 총액은 바의 [구매하기] 뒤 주문서가 보여 준다(자문 A2) */
  /* 수량 줄은 옵션 바로 아래(dinfo는 flex column — order로 검증 상자·배송/반품/판매자 정보·PDF를 뒤로 보낸다). 쿠폰 줄은 가격 아래 그대로 */
  .v2.pg-detail .dinfo > .dvbox, .v2.pg-detail .dinfo > .dsec2:not(.dsec2-opt):not(:has(.dcoupons)) { order: 1; }
  .v2.pg-detail .dbuy { order: 0; margin: 0; padding: 12px 0; border-top: 1px solid var(--v2-line); }
  .v2.pg-detail .dbuy .dqty-l { font-size: 14px; color: var(--v2-text); font-weight: 600; }
  .v2 .dsticky .ds-form { display: none; }
  .v2 .dsticky .ds-wish { display: flex; flex: none; margin: 0; }
  .v2 .dsticky .ds-wish-btn { width: 48px; height: 48px; padding: 0; border-radius: 6px; display: inline-flex; align-items: center; justify-content: center; }
  .v2 .dsticky .ds-wish-btn .ic { width: 22px; height: 22px; }
  .v2 .dsticky .btn-lg { flex: 1 1 0; }
  .v2.pg-detail .dname { font-size: 18px; }
  .v2.pg-detail .dprice-v { font-size: 26px; }
  .v2.pg-detail .dinfo .dpr .sale-rate { font-size: 20px; }
  /* ⑤ 배송지 관리 — 표 6열 → 배송지 1건 = 카드 줄(라디오 | 이름·기본 | 받는 분 | 연락처 | 주소 | [수정][삭제]). 마크업 1벌, 가로 넘침 없음(D1) */
  .v2 .addr-table, .v2 .addr-table tbody { display: block; width: 100%; border: 0; }
  .v2 .addr-table thead { display: none; }
  .v2 .addr-table tbody tr { display: grid; grid-template-columns: 24px auto minmax(0, 1fr); grid-template-areas: "pick label label" "pick name phone" "pick addr addr" "pick acts acts"; column-gap: 10px; row-gap: 4px; align-items: start; padding: 14px 0; border-top: 1px solid var(--v2-line); background: none; }
  .v2 .addr-table tbody tr:first-child { border-top: 0; }
  .v2 .addr-table tbody tr:hover, .v2 .addr-table tr.is-default td { background: none; }
  .v2 .addr-table td { display: block; padding: 0; border: 0; background: none; white-space: normal; min-width: 0; font-size: 14px; }
  .v2 .addr-table .addr-td-default { grid-area: pick; width: auto; text-align: left; padding-top: 2px; }
  .v2 .addr-table .addr-td-default input[type="radio"] { width: 22px; height: 22px; }
  .v2 .addr-table td:nth-child(2) { grid-area: label; font-size: 15px; }
  .v2 .addr-table td:nth-child(3) { grid-area: name; color: var(--v2-muted); font-size: 13px; }
  .v2 .addr-table td:nth-child(4) { grid-area: phone; color: var(--v2-muted); font-size: 13px; text-align: left; }
  .v2 .addr-table td.addr-addr { grid-area: addr; min-width: 0; line-height: 1.5; word-break: keep-all; overflow-wrap: anywhere; }
  .v2 .addr-table td.row-actions { grid-area: acts; display: flex; gap: 6px; margin-top: 6px; }
  .v2 .addr-table td.row-actions .btn { height: 36px; padding: 0 12px; font-size: 13px; }
  .v2 .addr-table .btn-delete { background: var(--v2-surface); border-color: var(--v2-line); color: var(--v2-muted); }   /* 자문 A11: 빨간 채움은 할인·오류 글자에만 */
  .v2 .addr-table .btn-delete:hover { background: var(--v2-bg); border-color: var(--v2-muted2); color: var(--v2-text); }
  .v2 .addr-table .autosubmit-fallback { padding-top: 12px; }
  /* ⑥ 홈 — 확인 업체 목록이 비어 있으면 그 구역을 폰에서 숨긴다(배너의 안내 링크가 대신) */
  .v2 .home-split > section:has(.cert-empty) { display: none; }
  /* ⑥ 카드 — 금액 없는 '선착순할인' 글자는 보조색(할인율·정가가 있을 때만 빨강 할인율이 눈에 띈다), 가격과 '원' 붙여 쓰기 */
  .v2 .prow-disc:not(:has(.sale-rate)) .disc-label { color: var(--v2-muted); font-weight: 600; }
  .v2 .card .prow-price { gap: 1px; }
}
@media (max-width: 560px) {
  /* ① 흐름 막대(장바구니 > 주문/결제 > 주문완료)·본문 안 테두리 [뒤로] 버튼([상품으로]·[내 주문])은 머리 [뒤로]가 대신한다. 제목 24 → 20 */
  .v2 .flowbar { display: none; }
  .v2 .content > p:has(> .lnk-back:only-child), .v2 .od .od-back { display: none; }
  .v2 .content .page-title { font-size: 20px; }
  .v2 .content .page-head { margin-bottom: 4px; }
  /* ③ 폰 폼 규칙 — 서식 시스템(정부 서식형: 회색 라벨 칸 | 입력 칸)은 PC 그대로, 폰(≤560)은 라벨 위 13px·띠·선 없음·칸 44 전폭·칸 사이 14. 구매자(.v2)만 — 판매자·운영센터는 그대로 */
  .v2 .field, .v2 .field:first-child, .v2 :not(.field) + .field, .v2 .field-row + .field, .v2 .field.field { display: block; margin: 0 0 14px; padding: 0; border: 0; background: transparent; }
  .v2 .field:last-child { margin-bottom: 0; }
  .v2 .field > label:first-child:not(:has(> input)), .v2 .field > .lbl:first-child { display: block; margin: 0 0 6px; padding: 0; border: 0; background: none; font-size: 13px; font-weight: 600; color: var(--v2-text); line-height: 1.4; }
  .v2 .field.has-error > label:first-child, .v2 .field.has-error > .lbl:first-child { box-shadow: none; color: var(--c-danger); }
  .v2 .field > :not(label:first-child):not(.lbl:first-child) { grid-column: auto; margin: 0; }
  .v2 .field > :last-child:not(label:first-child):not(.lbl:first-child) { margin-bottom: 0; }
  .v2 .field > input:not([type="checkbox"]):not([type="radio"]), .v2 .field > select, .v2 .field > textarea, .v2 .field > input.w-xs, .v2 .field > input.w-sm, .v2 .field > input.w-md, .v2 .field > input.w-lg, .v2 .field > select.w-md, .v2 .field > input[type="tel"], .v2 .field > input[type="email"], .v2 .field > input[type="password"], .v2 .field > input[type="number"], .v2 .ocard .field > input:not([type="checkbox"]):not([type="radio"]), .v2 .ocard .field > select, .v2 .ocard .field input.w-md, .v2 .ocard .field input.w-sm { width: 100%; max-width: none; box-sizing: border-box; height: 44px; margin: 0; font-size: 15px; }
  .v2 .field > textarea { height: auto; min-height: 88px; }
  .v2 .field > input + input, .v2 .field > input + select, .v2 .field > select + input, .v2 .field > .juso + input, .v2 .ocard .field > input + input { margin-top: 8px; }
  .v2 .field > .juso, .v2 .ocard .field > .juso { width: 100%; margin: 0 0 8px; }
  .v2 .field > .juso .juso-q { flex: 1 1 160px; height: 44px; box-sizing: border-box; }
  .v2 .field > .juso .juso-btn { height: 44px; }
  .v2 .field-hint, .v2 .field .field-hint { margin-top: 6px; font-size: 12px; line-height: 1.5; }
  .v2 .field-error, .v2 .field .field-error { margin-top: 6px; font-size: 12px; }
  .v2 .field > label:first-child:has(> input[type="checkbox"]), .v2 .field > label:first-child:has(> input[type="radio"]) { padding: 0; background: none; border: 0; }
  .v2 .field.consent .consent-list { width: 100%; box-sizing: border-box; }
  .v2 fieldset { padding: 16px; margin: 0 0 16px; }
  .v2 legend { font-size: 15px; font-weight: 700; }
  .v2 .savebar { padding: 16px 0 0; gap: 8px; }
  .v2 .savebar .btn { flex: 1 1 0; min-width: 0; height: 48px; box-sizing: border-box; font-size: 15px; }
  .v2 .kv-table th { width: 96px; font-size: 13px; }
  .v2 .kv-table td { font-size: 14px; }
  /* ④ 주문서 하단 바 — 첫 줄 동의 체크(13px) → 총액 | [결제하기] 52 → 빈 항목 줄(누르면 그 칸으로). 본문 아래 여백은 바 높이(≈140)만큼 */
  .v2:has(.paybar) { padding-bottom: calc(150px + env(safe-area-inset-bottom)); }
  .v2 .paybar { padding-top: 10px; }
  .v2 .paybar .pagree { grid-column: 1 / -1; font-size: 13px; line-height: 1.5; margin: 0 0 8px; }
  .v2 .paybar .pagree input { width: 20px; height: 20px; min-width: 20px; }
  .v2 .paybar .pagree-error { grid-column: 1 / -1; margin: -4px 0 6px; }
  .v2 .paybar .pay-btn { margin-top: 0; }
  .v2 .paybar .pay-missing { grid-column: 1 / -1; margin: 6px 0 0; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
  /* ④ 결제 실패·닫힘 결과 카드 — [다시 결제하기] 전폭 주 버튼 먼저, 보조는 아래 전폭 */
  .v2 .result-card { padding: 28px 18px 22px; }
  .v2 .result-actions { flex-direction: column; gap: 8px; }
  .v2 .result-actions .btn { width: 100%; box-sizing: border-box; height: 48px; }
  /* ⑥ 홈 글상자 2개(검증 파이프라인·안심 교환·반품) = 제목 | 설명 한 줄형(높이 절반), 목록 제목의 설명은 제목 아래 12px 한 줄 */
  .v2 .strip2 { gap: 8px; }
  .v2 .strip { flex-direction: row; align-items: center; gap: 12px; padding: 12px 14px; }
  .v2 .strip-t { flex: 0 0 92px; font-size: 13px; line-height: 1.4; }
  .v2 .strip-d { font-size: 12px; line-height: 1.5; }
  .v2 .listmain .sec-h { flex-wrap: wrap; row-gap: 0; }
  .v2 .listmain .sec-h .more:not(.num) { flex-basis: 100%; font-size: 12px; line-height: 1.5; }
}

/* ===== roundM20(계약 mobile-M20-checkout-address-card, M18 자문 A7): 폰 주문서 배송지 요약 카드 — 칸은 checkout.js가 접는다(≤900에서만 보이고, PC는 칸 그대로). 파일 끝 규칙은 M1·M9·M16·M18과 같다 ===== */
@media (max-width: 900px) {
  .v2 .addr-sum { display: flex; flex-direction: column; gap: 4px; margin: 0 0 14px; padding: 12px 14px; border: 1px solid var(--v2-line); border-radius: 8px; background: var(--f-label-bg, #F3F4F6); font-size: 14px; line-height: 1.5; color: var(--v2-text); }
  .v2 .addr-sum[hidden] { display: none; }
  .v2 .addr-sum-l1 { display: flex; align-items: baseline; gap: 8px; flex-wrap: wrap; }
  .v2 .addr-sum-l1 b { font-size: 15px; font-weight: 700; }
  .v2 .addr-sum-l1 .num { color: var(--v2-muted); }
  .v2 .addr-sum-a { word-break: keep-all; overflow-wrap: anywhere; }
  .v2 .addr-sum-b { display: grid; grid-auto-flow: column; grid-auto-columns: minmax(0, 1fr); gap: 8px; margin-top: 8px; }
  .v2 .addr-sum-b .btn { box-sizing: border-box; width: 100%; height: 40px; }
  .v2 .ocard .addr-fields[hidden] { display: none; }
}
/* 칸 3개를 감싼 div가 서식 규칙의 인접 선택자(:not(.field) + .field = 굵은 위 선, .field:last-child = 여백 0)를 깨뜨리므로 전과 같은 값으로 되돌린다(PC 1280·폰 390 계산값으로 확인) */
.v2 .ocard .addr-fields + .field { border-top: 0; }
@media (max-width: 560px) {
  .v2 .ocard .addr-fields > .field:last-child { margin-bottom: 14px; }
}

/* ===== roundM21(계약 mobile-M21, M18 자문 A15): 마이 첫 화면 주문·배송 현황 띠 — 칸 4(대기/배송중·구매완료·취소/교환/환불·내 쿠폰), 숫자 위·라벨 아래. 폰·PC 공통, 파일 끝 규칙은 M1·M9·M16·M18·M20과 같다 ===== */
.v2.pg-my .my-stat { display: grid; grid-template-columns: repeat(4, minmax(0, 1fr)); margin: 0 0 16px; background: var(--v2-surface); border: 1px solid var(--v2-line); border-radius: 10px; overflow: hidden; }
.v2.pg-my .my-stat-c { display: flex; flex-direction: column; align-items: center; justify-content: center; gap: 2px; min-height: 68px; padding: 10px 4px; color: var(--v2-text); text-align: center; text-decoration: none; }
.v2.pg-my .my-stat-c + .my-stat-c { border-left: 1px solid var(--v2-line); }
.v2.pg-my .my-stat-c:hover { background: var(--v2-bg-soft); text-decoration: none; }
.v2.pg-my .my-stat-c .num { font-size: 20px; font-weight: 700; line-height: 1.2; color: var(--v2-ink); }
.v2.pg-my .my-stat-c .t { font-size: 12px; font-weight: 500; color: var(--v2-muted); line-height: 1.2; word-break: keep-all; }
.v2.pg-my .my-stat-sub { font-size: 11px; color: var(--v2-red); line-height: 1.2; }
@media (min-width: 901px) {
  .v2.pg-my .my-stat { width: min(1036px, calc(100vw - 48px)); position: relative; left: 50%; transform: translateX(-50%); margin-bottom: 20px; }   /* PC: 9칸 타일 줄과 같은 폭·같은 가운데 */
  .v2.pg-my .my-stat-c { min-height: 76px; }
  .v2.pg-my .my-stat-c .num { font-size: 22px; }
  .v2.pg-my .my-stat-c .t { font-size: 13px; }
}

/* ===== roundM22(계약 mobile-M22-option-sheet, M18 자문 A3): 폰 상세 옵션·수량 하단 시트 — 옵션 있는 상품만(시트 마크업은 th:if), buy.js가 #dopts·.dbuy를 시트로 옮긴다. PC는 전과 같다. 파일 끝 규칙은 M1·M9·M16·M18·M20·M21과 같다 ===== */
@media (max-width: 900px) {
  .v2 dialog.dsheet { position: fixed; inset: auto 0 0 0; width: 100%; max-width: none; max-height: 85vh; margin: 0; padding: 0; border: 0; border-radius: 16px 16px 0 0; background: var(--v2-surface); color: var(--v2-text); box-shadow: 0 -8px 30px rgba(0, 0, 0, .18); overflow: hidden; }
  .v2 dialog.dsheet::backdrop { background: rgba(0, 0, 0, .45); }
  .v2 .dsheet-in { display: flex; flex-direction: column; max-height: 85vh; }
  .v2 .dsheet-h { display: flex; align-items: center; justify-content: space-between; flex: none; height: 52px; padding: 0 8px 0 16px; border-bottom: 1px solid var(--v2-line); }
  .v2 .dsheet-t { font-size: 17px; font-weight: 800; }
  .v2 .dsheet-close { width: 40px; height: 40px; border: 0; background: none; display: flex; align-items: center; justify-content: center; color: var(--v2-text); cursor: pointer; }
  .v2 .dsheet-close svg { width: 22px; height: 22px; }
  .v2 .dsheet-b { flex: 1 1 auto; min-height: 0; overflow-y: auto; padding: 0 16px 8px; }
  .v2 .dsheet-b .dsec2-opt { margin: 0; padding: 12px 0 0; border: 0; }
  .v2 .dsheet-b .dsec2-opt > .dsec2-h { display: none; }   /* 제목은 시트 머리가 맡는다 */
  .v2.pg-detail .dsheet-b .dbuy { display: flex; flex-direction: column; gap: 0; order: 0; margin: 12px 0 0; padding: 12px 0 0; border-top: 1px solid var(--v2-line); }
  .v2.pg-detail .dsheet-b .dbuy .dcart-form { order: 0; display: flex; justify-content: space-between; align-items: center; gap: 10px; }
  .v2.pg-detail .dsheet-b .dbuy .dtotal-row { order: 1; display: flex; justify-content: space-between; align-items: baseline; margin: 12px 0 4px; padding-top: 12px; border-top: 1px solid var(--v2-line); }
  .v2.pg-detail .dsheet-b .dbuy .dtotal { font-size: 22px; }
  .v2 .dsheet-f { display: flex; gap: 10px; flex: none; padding: 12px 16px calc(12px + env(safe-area-inset-bottom)); border-top: 1px solid var(--v2-line); background: var(--v2-surface); }
  .v2 .dsheet-f .btn-lg { flex: 1 1 0; width: auto; box-sizing: border-box; height: 48px; font-size: 15px; display: inline-flex; align-items: center; justify-content: center; white-space: nowrap; }
}

/* ===== roundM23(계약 mobile-M23, 대표자 2026-10-30 A8 ㄴ): 장바구니 묶음이 1개일 때만 폰(≤900) 합계 줄 + [상품 주문하기]를 화면 아래 고정(주문서 .paybar와 같은 자리, 탭바 숨김). 묶음 2개 이상은 전과 같이 묶음마다(묶음 단위 주문 판정). 파일 끝 규칙은 M1~M22와 같다 ===== */
@media (max-width: 900px) {
  .v2:has(main .cart-group):not(:has(.cart-group ~ .cart-group)) { padding-bottom: calc(124px + env(safe-area-inset-bottom)); }   /* roundM28(M27 F-C14): main이 아니라 body에 — 푸터가 바에 가렸다 */
  .v2:has(.cart-group):not(:has(.cart-group ~ .cart-group)) .tabbar { display: none; }   /* :has() 안에 :has()를 겹치면 선택자 전체가 무효(실측) — 평평하게 */
  .v2 main:has(.cart-group):not(:has(.cart-group ~ .cart-group)) .cart-sub { position: fixed; left: 0; right: 0; bottom: 0; z-index: 85; display: grid; grid-template-columns: minmax(0, 1fr) minmax(0, 1fr); align-items: center; gap: 10px; margin: 0; padding: 10px 16px calc(12px + env(safe-area-inset-bottom)); background: var(--v2-surface); border-top: 1px solid var(--v2-line); box-shadow: 0 -4px 12px rgba(0, 0, 0, .06); }
  .v2 main:has(.cart-group):not(:has(.cart-group ~ .cart-group)) .cart-sub .sum { justify-self: end; margin: 0; }
  .v2 main:has(.cart-group):not(:has(.cart-group ~ .cart-group)) .cart-sub .btn { grid-column: 1 / -1; }   /* 회원: [상품 주문하기] 전폭 */
  .v2 main:has(.cart-group):not(:has(.cart-group ~ .cart-group)) .cart-guest .cart-sub .btn { grid-column: auto; font-size: 14px; white-space: nowrap; min-width: 0; padding: 0 8px; }   /* 게스트: 두 버튼 한 줄 */
}

/* ===== roundM24(계약 mobile-M24-home-menu-banner-scale, 대표자 2026-10-31 + Opus 5.5 검토 반영): 폰(≤900) 홈 — ① 배너 위 메뉴 줄(.hmenu — M26부터 채움 없음: [홈] 남색 글자·아이콘 · 베스트·신상품·할인·행사 회색 글자 · [국산업체찾기] 초록 글자·엠블럼, 아래 1px 선, 화면 끝까지, 넘치면 가로 스크롤) ② 국내산 확인 업체(지도 배너·목록 구역) 숨김, 입구는 메뉴 줄 ③ 배너는 PC와 같은 내용·같은 비율(850:320)로 화면 끝까지 붙여 비례 축소(컨테이너 단위 cqw, 글자는 바닥값까지, 장식은 숨김), 컨트롤은 "1/3" 숫자 알약(넘기기는 손가락). PC(901 이상)는 바뀌지 않는다. 파일 끝 규칙은 M1~M23과 같다(앞의 같은 구체도 규칙 — 560 블록·M1의 글자 20·버튼 44·720 블록의 캡션 100% — 을 순서로 이긴다) ===== */
.v2 .hmenu, .v2 .hero-cnt { display: none; }
@media (max-width: 900px) {
  .v2 main.sec:has(> .hmenu) { padding-top: 8px; }   /* 머리 아래 24 → 8(Opus 3) */
  .v2 .hmenu { display: flex; align-items: center; gap: 2px; height: 40px; margin: 0 -20px 0; padding: 0 20px; border-bottom: 1px solid var(--v2-line); }
  .v2 .hmenu a { flex: 1 1 0; min-width: 0; display: inline-flex; align-items: center; justify-content: center; gap: 5px; height: 32px; padding: 0 6px; border-radius: 999px; font-size: clamp(12px, 3.7vw, 14px); font-weight: 700; color: var(--v2-muted); white-space: nowrap; }   /* 가운데 셋 = 현재 아님(회색) */
  .v2 .hmenu a:hover { text-decoration: none; }
  .v2 .hmenu .hm-home { color: var(--v2-ink); font-weight: 800; }   /* roundM26(대표자 1·2): 채움·테두리 없음 — 현재 칸은 글자·아이콘 색으로 */
  .v2 .hmenu .hm-home svg { width: 16px; height: 16px; }
  .v2 .hmenu .hm-biz { color: var(--v2-biz); }   /* roundM26(대표자 3): 채움 없음 — 초록 글자 + 엠블럼 */
  .v2 .hmenu .hm-biz img { width: 18px; height: 18px; }
  /* ② 국내산 확인 업체 — 폰에서 숨김(PC·운영센터 홈 꾸미기 값은 그대로). 지도 SDK는 round231의 IntersectionObserver라 숨긴 칸에는 불리지 않는다 */
  .v2 .home-top .cert-banner { display: none; }
  .v2 .home-split > section:has(.certbox) { display: none; }
  /* ③ 배너: 화면 끝까지(메뉴 줄 선에 붙여, 모서리 0) + 비율 고정(PC 히어로 850×320) + 컨테이너 비례 축소 — --k는 자식에서 쓴다(cqw는 조상 컨테이너 기준) */
  .v2 .home-top { margin: 0 -20px; }
  .v2 .hero { container-type: inline-size; min-height: 0; aspect-ratio: 17 / 8; border-radius: 0; }   /* roundM32-c(대표자 2026-11-01 "PC 배너만 만들고 폰은 자동"): 850/320 → 17/8 = PC 홈 배너(850×400)와 같은 비율 — PC 이미지 1700×800 하나가 폰에서도 잘림 없이 390×184 */
  .v2 .hero .banner-ink { border-radius: 0; }
  .v2 .hero > * { --k: calc(100cqw / 850); }
  .v2 .hero .bnr { padding: calc(36 * var(--k)) calc(44 * var(--k)); }
  .v2 .hero .bnr.pos-bl, .v2 .hero .bnr.pos-bc, .v2 .hero .bnr.pos-br { padding-bottom: max(32px, calc(44 * var(--k))); }   /* 아래 줄 캡션은 "1/3" 알약(20 + 6) 위에 */
  .v2 .hero .bnr .bnr-cap { max-width: 70%; gap: calc(10 * var(--k)); }
  .v2 .hero .bnr .sub, .v2 .banner-main .sub { font-size: max(11px, calc(14 * var(--k))); }
  .v2 .hero .bnr .t, .v2 .banner-main .t { font-size: max(14px, calc(27 * var(--k))); line-height: 1.35; }
  .v2 .hero .bnr.ts-S .t { font-size: max(13px, calc(22 * var(--k))); }
  .v2 .hero .bnr.ts-L .t { font-size: max(15px, calc(34 * var(--k))); line-height: 1.28; }
  .v2 .hero .bnr .sub, .v2 .hero .bnr .t, .v2 .banner-main .sub, .v2 .banner-main .t { word-break: keep-all; overflow-wrap: anywhere; }   /* 360에서 한 글자 고아 줄 금지(Opus 2) */
  .v2 .hero .btn-lg { box-sizing: border-box; height: max(30px, calc(44 * var(--k))); padding: 0 max(12px, calc(20 * var(--k))); font-size: max(12px, calc(15 * var(--k))); }
  .v2 .hero .bnr .bnr-stage { position: absolute; inset: calc(28 * var(--k)) calc(44 * var(--k)) max(32px, calc(40 * var(--k))); }
  .v2 .hero .bnr .bnr-free { position: absolute; width: max-content; max-width: 80%; }   /* 자리는 인라인 %(운영센터 미리보기에서 끌어다 놓은 값) 그대로. width: max-content = left:100%(오른쪽 끝)일 때 절대 배치의 남는 폭이 0이라 글이 한 단어 폭으로 쪼개지는 것을 막는다(실측) */
  .v2 .hero .bnr .bnr-free p { margin: 0 0 calc(8 * var(--k)); white-space: normal; }
  .v2 .hero .bnr .bnr-bg { object-fit: cover; }
  .v2 .banner-main { padding: calc(40 * var(--k)) calc(44 * var(--k)); min-height: 0; gap: calc(12 * var(--k)); }
  .v2 .banner-main p { margin: 0; }   /* 135 상자에서는 p의 기본 여백(15)이 내용을 위아래로 넘치게 했다(실측 131) — 간격은 gap이 맡는다 */
  .v2 .banner-deco { display: none; }   /* 글자 바닥값 때문에 글이 장식(비례 63)과 겹친다(Opus 1) — 폰은 장식 없음(M23까지와 같다) */
  /* 컨트롤: 화살표·점 숨김, "1/3" 숫자 알약 높이 20(Opus 4 — 레퍼런스 3곳 공통) */
  .v2 .hero-ctl { right: 8px; bottom: 6px; gap: 0; height: 20px; padding: 0 8px; box-sizing: border-box; }
  .v2 .hero-ctl .hero-nav, .v2 .hero-ctl .hero-dots { display: none; }
  .v2 .hero-cnt { display: inline; font-size: 11px; font-weight: 700; color: #FFFFFF; line-height: 20px; }
  .v2 .hero-cnt b { font-weight: 700; }
  .v2 .hmenu + .home-top { margin-top: -8px; }   /* roundM26(대표자 5): main(flex, gap 16) − 8 = 메뉴 줄 선 ↔ 배너 8px(M24 Opus 4의 0에서 변경) */
  .v2 .home-top + .pop-terms { margin-top: -4px; }   /* 배너 → 인기 검색어 12(gap 16 - 4) */
}
@media (max-width: 560px) {
  .v2 .hmenu { margin: 0 -16px 0; padding: 0 16px; }   /* M1 여백 16 */
  .v2 .home-top { margin: 0 -16px; }
}

/* ===== roundM26(계약 mobile-M26-home-menu-flat-scroll, 대표자 2026-10-31 D-M25 뒤 지시 5건): 폰 홈 메뉴 줄 — ① 메뉴·탭 칸에 채움 없음(상시 규칙: 강조는 글자·아이콘 색) ② [홈] 남색 글자·아이콘 ③ [국산업체찾기] 초록 글자·엠블럼(M25의 그라데이션·빛 쓸기 블록은 지움, M24 블록의 두 규칙은 제자리 최종값) ④ [신상품] 칸 추가 — 여섯 칸이 넘치면 가로 스크롤(막대 숨김, 마지막 칸이 잘려 보여 스크롤을 알린다 — G마켓·쿠팡 방식) ⑤ 메뉴 줄 ↔ 배너 8px(M24 블록 -16 → -8). 아이콘 뜀(a2a-pop)은 M25 지시대로 유지. 파일 끝 규칙은 M1~M24와 같다 ===== */
@media (max-width: 900px) {
  .v2 .hmenu { gap: 0; overflow-x: auto; overflow-y: hidden; scrollbar-width: none; overscroll-behavior-x: contain; -webkit-overflow-scrolling: touch; }
  .v2 .hmenu::-webkit-scrollbar { display: none; }
  .v2 .hmenu a { flex: 1 0 auto; padding: 0 6px; border-radius: 0; }   /* 자리가 남으면 나눠 갖고, 모자라면 줄지 않고 넘친다(스크롤). 여섯 칸 = 390에서 368(남는 22를 나눠 가짐)·360에서 ~354(글자 13.3) — 320이나 큰 글자에서 스크롤 */
  .v2 .hmenu .hm-home svg { animation: a2a-pop 3.6s cubic-bezier(.3, 1.6, .5, 1) infinite; }   /* 머리 "오직국산" 구슬과 같은 박자(round186) */
  .v2 .hmenu .hm-biz img { animation: a2a-pop 3.6s cubic-bezier(.3, 1.6, .5, 1) 1.8s infinite; }
  .v2 .hmenu a:active { opacity: .6; }
  /* M26-b(대표자 지적 "위와 아래 여백 높이가 안 맞잖아요"): 메뉴 줄 위 여백 = 아래 여백 = 11(실측). 위 = 검색 상자 아래 ↔ 머리 끝 11(main 위 0, 줄 높이는 칸 그대로 32), 아래 = 칸 아래 2 + 선 1 + 배너까지 8 */
  .v2 main.sec:has(> .hmenu) { padding-top: 0; }
  .v2 .hmenu { height: auto; padding-bottom: 2px; }
}
@media (prefers-reduced-motion: reduce) { .v2 .hmenu .hm-home svg, .v2 .hmenu .hm-biz img { animation: none; } }

/* ===== roundM28(계약 mobile-M28-detail-sweep, M27 기획 첫 묶음 2026-11-01): 전수 디테일 — ① 한글 줄바꿈 전역(.v2 바탕 40줄) ② 오류 화면 버튼 한 줄·폰 세로(742·745줄) ③ (원복 — 대표자: 채움 금지는 새 디자인부터) ④ 표 안 검증 배지 그림자·겹침 ⑤ (원복) ⑥ 장바구니 고정 바 여백을 body로(1865줄) ===== */
.v2 .data-table .b-vrf { box-shadow: none; margin-right: 6px; vertical-align: middle; }   /* 표 셀 안 뉴모피즘 그림자가 상호 글자를 덮었다(M27 C3) */
/* 장바구니 휴지통: 대표자 2026-11-01 "빨강으로 기존과 동일하게 원복" — M18 A11 회색은 배송지에만 */

/* ===== roundM29(계약 mobile-M29-business-finder, 대표자 2026-11-01 지시): 국산업체찾기 — ① 지역 셀렉트(칩 17개 → 전체 + 드롭다운) ② 표 3열(상호 / 주소 / 인증일), 행 = 버튼(업체 카드) ③ 폰(≤900)은 행을 3줄 블록으로, "국산24 인증" 배지 숨김(전부 인증이라 정보 0) ④ 업체 카드(폰·PC 공용 모달 .biz-card — M30-c부터 폰도 모달) ⑤ 업체 등록 화면의 공개 소개 구역(사진 목록·메뉴 표). 채움 금지 규칙은 새 디자인부터 — 여기 새 칸은 모두 채움 없음 ===== */
.v2 .biz-tools { display: flex; align-items: center; gap: 10px; margin: 0 0 14px; }
.v2 .biz-tool { display: inline-flex; align-items: center; gap: 8px; }
.v2 .biz-tool .pt-label { flex: none; white-space: nowrap; }   /* 폰에서 "지역"이 세로로 서던 것(실측) */
.v2 .cert-map { width: 100%; height: 380px; border: 1px solid var(--v2-line); border-radius: 6px; }
.v2 .biz-region { appearance: none; -webkit-appearance: none; box-sizing: border-box; height: 40px; min-width: 132px; padding: 0 36px 0 14px; border: 1px solid var(--v2-line); border-radius: 8px; background: var(--v2-surface) url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='%230D162B' stroke-width='2.2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='m6 9 6 6 6-6'/%3E%3C/svg%3E") no-repeat right 12px center / 16px 16px; font: inherit; font-size: 14px; font-weight: 700; color: var(--v2-text); cursor: pointer; }
.v2 .biz-region:focus-visible { outline: 0.5px solid var(--v2-ink); outline-offset: 2px; }
.v2 .biz-loc { flex: none; }
.v2 .biz-loc-hint { margin: -6px 0 12px; font-size: 12px; color: var(--v2-muted); }
.v2 .biz-loc-msg { margin: -4px 0 12px; font-size: 13px; color: var(--v2-text); }
.v2 .biz-near { display: flex; flex-wrap: wrap; align-items: center; justify-content: space-between; gap: 6px 12px; margin: 0 0 12px; }
.v2 .biz-near a { font-weight: 700; white-space: nowrap; }
.v2 .biz-table .bz-km { display: inline-block; margin-right: 8px; font-weight: 800; color: var(--v2-ink); }
.v2 .biz-table .biz-row { cursor: pointer; }
.v2 .biz-table .biz-row:hover td { background: var(--v2-bg); }
.v2 .biz-table .biz-row:focus-visible { outline: 0.5px solid var(--v2-ink); outline-offset: -2px; }
.v2 .biz-table .bz-name strong a { color: inherit; }
.v2 .biz-table .bz-name strong a:hover { text-decoration: none; }
.v2 .biz-table .bz-trade { display: inline-block; margin-left: 6px; padding: 0 7px; border: 1px solid var(--v2-line); border-radius: 999px; font-size: 11px; font-weight: 700; line-height: 18px; color: var(--v2-muted); vertical-align: middle; }
.v2 .biz-table .bz-region { font-weight: 700; color: var(--v2-muted); margin-right: 4px; }
.v2 .biz-table .bz-date { white-space: nowrap; color: var(--v2-muted); }
.v2 .biz-table .bz-chev { width: 16px; height: 16px; vertical-align: -3px; margin-left: 2px; color: var(--v2-muted); }
@media (max-width: 900px) {
  .v2 .biz-tools { margin-bottom: 12px; flex-wrap: wrap; }
  .v2 .biz-region { flex: 1 1 auto; }
  .v2 .biz-tool { flex: 1 1 100%; }
  .v2 .biz-loc { flex: 1 1 100%; height: 40px; }
  .v2 .cert-map { height: 240px; }   /* 폰: 지도가 한 화면을 다 먹지 않게 — 목록이 첫 화면에 보인다 */
  .v2 .biz-table, .v2 .biz-table tbody, .v2 .biz-table tr, .v2 .biz-table td { display: block; }
  .v2 .biz-table thead { display: none; }
  .v2 .biz-table { border: 0; font-size: 14px; }
  .v2 .biz-table .biz-row { position: relative; padding: 12px 28px 12px 0; border-bottom: 1px solid var(--v2-line); }
  .v2 .biz-table .biz-row:hover td { background: transparent; }
  .v2 .biz-table .biz-row td { padding: 0; border: 0; background: transparent; }
  .v2 .biz-table .bz-name .b-vrf { display: none; }   /* 폰: 전부 인증품이라 배지는 정보 0 — 머리 1줄이 대신한다 */
  .v2 .biz-table .bz-name strong { font-size: 15px; font-weight: 800; }
  .v2 .biz-table .bz-name .b-event { display: inline-flex; margin: 4px 0 0; }
  .v2 .biz-table .bz-place { margin-top: 4px; font-size: 13px; line-height: 1.55; word-break: keep-all; }
  .v2 .biz-table .bz-date { margin-top: 2px; font-size: 12px; }
  .v2 .biz-table .bz-date .bz-chev { position: absolute; right: 2px; top: 50%; width: 20px; height: 20px; margin: -10px 0 0; }
}
/* 업체 카드(모달 본문·독립 문서 공용 — roundM30-c: 폰도 공용 모달, 폰 바텀 시트 규칙은 제거) */
.v2 .biz-card { max-width: 720px; margin: 0 auto; padding: 0; }
body.v2 > main.biz-card { padding: 20px 16px 40px; }
.v2 .bc-name { font-size: 20px; margin: 0 0 12px; }
.v2 .bc-strip { display: flex; gap: 8px; overflow-x: auto; scroll-snap-type: x mandatory; scrollbar-width: none; margin: 0 0 12px; border-radius: 10px; }
.v2 .bc-strip::-webkit-scrollbar { display: none; }
.v2 .bc-strip img { flex: 0 0 auto; width: min(100%, 420px); aspect-ratio: 4 / 3; height: auto; object-fit: cover; border-radius: 10px; scroll-snap-align: start; background: var(--v2-bg); }
.v2 .bc-nophoto { display: grid; place-items: center; height: 96px; margin: 0 0 12px; border-radius: 10px; background: var(--v2-bg); }
.v2 .bc-cert { display: flex; flex-wrap: wrap; align-items: center; gap: 8px; margin: 0 0 8px; font-size: 13px; color: var(--v2-muted); }
.v2 .bc-trade { margin: 0 0 6px; }
.v2 .bc-chip { display: inline-block; padding: 0 9px; border: 1px solid var(--v2-line); border-radius: 999px; font-size: 12px; font-weight: 700; line-height: 22px; color: var(--v2-ink); }
.v2 .bc-short { margin: 0 0 14px; font-size: 15px; font-weight: 700; color: var(--v2-text); }
.v2 .bc-sec { padding: 14px 0 0; margin: 10px 0 0; border-top: 1px solid var(--v2-line); }
.v2 .bc-sec h2 { margin: 0 0 8px; font-size: 15px; font-weight: 800; }
.v2 .bc-menu { width: 100%; border-collapse: collapse; font-size: 14px; }
.v2 .bc-menu td { padding: 7px 0; border-bottom: 1px dashed var(--v2-line); vertical-align: top; }
.v2 .bc-menu td small { display: block; margin-top: 2px; font-size: 12px; color: var(--v2-muted); }
.v2 .bc-menu td.num { text-align: right; white-space: nowrap; font-weight: 700; }
.v2 .bc-intro { margin: 0; white-space: pre-line; line-height: 1.7; font-size: 14px; }
.v2 .bc-addr, .v2 .bc-line { margin: 0 0 6px; font-size: 14px; }
.v2 .bc-note { margin: 14px 0 0; font-size: 12px; color: var(--v2-muted); line-height: 1.6; }
/* 업체 등록 화면: 공개 소개 구역 */
.v2 .radio-row { display: flex; flex-wrap: wrap; gap: 6px 16px; }
.v2 .radio-row label { display: inline-flex; align-items: center; gap: 6px; font-size: 14px; }
.v2 .bz-photos { display: flex; flex-wrap: wrap; gap: 12px; margin: 0 0 12px; padding: 0; list-style: none; }
.v2 .bz-photos li { display: flex; flex-direction: column; gap: 6px; align-items: center; }
.v2 .bz-photos img { width: 112px; height: 112px; object-fit: cover; border-radius: 8px; border: 1px solid var(--v2-line); }
.v2 .menu-edit input { width: 100%; box-sizing: border-box; }
.v2 .menu-edit td { padding: 4px; }
@media (max-width: 900px) {   /* 폰: 3열 표가 358px에서 칸이 3글자 폭이 되던 것(실측) → 줄마다 이름 전폭 + 가격·비고 반반 */
  .v2 .menu-edit thead { display: none; }
  .v2 .menu-edit, .v2 .menu-edit tbody { display: block; }
  .v2 .menu-edit tr { display: grid; grid-template-columns: 1fr 1fr; gap: 6px; padding: 8px 0; border-bottom: 1px solid var(--v2-line); }
  .v2 .menu-edit td { display: block; padding: 0; border: 0; }
  .v2 .menu-edit td:first-child { grid-column: 1 / 3; }
}

/* ===== roundM31(계약 mobile-M31-card-detail-info, M27 세 번째 묶음 2026-11-01) 기본 규칙 — 폰 규칙은 파일 끝 블록 ===== */
/* Q-M27-1(대표자 "권장안대로"): 카드 "국산 검증" 배지 한 단계 작게·대비 낮춤 — 배지는 전부 유지(identity), 채움은 기존 디자인이라 유지. 폰 썸네일 태그 .tg-vrf는 원 규칙(위)을 제자리 수정(store-marks-scan: 규칙 1개) */
.v2 .cbody .b-vrf.mini { height: 18px; line-height: 18px; font-size: 10px; }
.v2 .cbody .b-vrf.mini .bm { width: 12px; height: 12px; }
/* A9/A6 공유: 상품명 옆 선 아이콘 버튼(채움 없음) */
.v2 .dname-row { display: flex; align-items: flex-start; gap: 10px; }
.v2 .dname-row .dname { flex: 1 1 auto; min-width: 0; }
.v2 .dshare { flex: none; width: 36px; height: 36px; margin-top: 2px; border: 1px solid var(--v2-line); border-radius: 8px; background: transparent; color: var(--v2-text); display: inline-flex; align-items: center; justify-content: center; cursor: pointer; }
.v2 .dshare svg { width: 18px; height: 18px; }
.v2 .dshare:hover { border-color: var(--v2-ink); color: var(--v2-ink); }
/* B12/A9: 배송·반품 한 블록 머리 + [자세히] */
.v2 .dsec2-h-row { display: flex; align-items: baseline; justify-content: space-between; gap: 12px; }
.v2 .dsec2-more { font-size: 13px; font-weight: 600; white-space: nowrap; }
/* A8·A3: 상품 정보 고시 접힘 — 규격 + 필수 표기 정보(표 모양은 .spec-grid 그대로) */
.v2 .dfold { margin: 0 0 16px; border: 1px solid var(--v2-line); border-radius: 6px; }
.v2 .dfold-s { list-style: none; display: flex; align-items: center; gap: 10px; padding: 14px 16px; cursor: pointer; }
.v2 .dfold-s::-webkit-details-marker { display: none; }
.v2 .dfold-s .sec-t { margin: 0; flex: none; }
.v2 .dfold-sub { flex: 1 1 auto; min-width: 0; font-size: 13px; color: var(--v2-muted); white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
.v2 .dfold-s .ic { margin-left: auto; width: 18px; height: 18px; flex: none; transition: transform .2s ease; }
.v2 .dfold[open] .dfold-s .ic { transform: rotate(180deg); }
.v2 .dfold-b { padding: 0 16px 16px; }
.v2 .dfold-b .spec-sec { margin: 0; }
.v2 .sec-t3 { margin: 12px 0 8px; font-size: 14px; font-weight: 700; }
.v2 .disc-vrf { display: inline-block; margin-left: 6px; color: var(--v2-ink); font-weight: 700; }
/* A10·A5: 상세 끝 "이 판매자의 다른 상품"·"최근 본 상품" 구역 간격 */
.v2 .dothers { margin-top: 24px; }

/* ===== roundM32(계약 mobile-M32-home-sections, M27 네 번째 묶음 2026-11-01) 기본 규칙 — 폰 규칙은 파일 끝 블록 ===== */
/* F-A2/C12 안내 띠(.trust-row)는 M32-b에서 삭제(대표자 2026-11-01) */
/* A16 목록 0건 아래 "이런 상품은 어때요" */
.v2 .empty .fallback { margin-top: 28px; text-align: left; }
.v2 .empty .fallback .sec-h { margin-bottom: 12px; }
/* A6 최근 검색어 항목(브라우저 저장) — 시계 선 아이콘 */
.v2 .v2-suggest li.recent { color: var(--v2-muted); }
.v2 .v2-suggest li.recent::before { content: ""; display: inline-block; width: 14px; height: 14px; margin-right: 6px; vertical-align: -2px; background: currentColor; -webkit-mask: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='black' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Ccircle cx='12' cy='12' r='9'/%3E%3Cpath d='M12 7v5l3 2'/%3E%3C/svg%3E") center / contain no-repeat; mask: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='black' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Ccircle cx='12' cy='12' r='9'/%3E%3Cpath d='M12 7v5l3 2'/%3E%3C/svg%3E") center / contain no-repeat; }

/* ===== roundM32-b(대표자 2026-11-01 M30-c·M31·M32 확인 뒤 수정 5건) 기본 규칙 — 배너 PC 비율·picture는 .hero 규칙 자리, 정책 표 11px는 제자리, 안내 띠 규칙은 삭제 ===== */
.v2 .dsec2-ship .dkv dd { font-size: 11px; }   /* 배송·반품 두 줄 값 14 → 11px(PC·폰, 라벨 dt는 13 그대로) — M33-d(대표자 2026-11-02)에서 12px(고지 문장과 같게)로, 파일 끝 블록 */

/* ===== roundM30(계약 mobile-M30-header-types, M27 두 번째 묶음 2026-11-01): 폰 머리 3종 — ① 메인(홈·목록·검색·/my: 그대로, 사람 아이콘만 제거) ② 하위(상세·마이 하위: [뒤로] 제목 [검색] [장바구니] 한 줄, 검색은 펼침) ③ 진행(pg-flow = 장바구니·주문서·결제·가입: [뒤로] 제목만, 탭바·푸터 링크 숨김) + 상세 사진 전폭·"1/N" + PC 상세 수량·버튼을 가격 아래로. 파일 끝 규칙은 M1~M29와 같다 ===== */
.v2 .hd-title, .v2 .hd-search { display: none; }
.v2 .dcount { display: none; }
@media (max-width: 900px) {
  /* ① 전 화면: 사람·로그인 아이콘 제거(하단 탭 [마이]와 중복) */
  .v2 .hd-icon[href="/my"], .v2 .hd-auth { display: none; }
  /* ② 하위 머리 = 상세 + (M18 작업형 중 진행·/my 아닌 것): [뒤로] 제목 [검색] [장바구니] */
  .v2.pg-detail .hd .wrap, .v2:has(> main.content):not(.pg-flow):not(.pg-my) .hd .wrap { grid-template-columns: 44px minmax(0, 1fr) 40px auto; grid-template-areas: "back title search cart"; row-gap: 0; padding: 6px 0; column-gap: 2px; }
  .v2.pg-detail .searchwrap, .v2.pg-detail .brand-tag, .v2.pg-detail .hd-menu, .v2.pg-detail .vline { display: none; }
  .v2.pg-detail .hd-back { display: flex; align-items: center; justify-content: center; grid-area: back; width: 44px; height: 44px; margin-left: -10px; color: var(--v2-text); }
  .v2.pg-detail .hd-back .ic { width: 26px; height: 26px; }
  .v2.pg-detail .hd-search, .v2:has(> main.content):not(.pg-flow):not(.pg-my) .hd-search { grid-area: search; display: flex; align-items: center; justify-content: center; width: 40px; height: 44px; color: var(--v2-text); }
  .v2 .hd-search svg { width: 24px; height: 24px; }
  .v2 .hd-search:hover { text-decoration: none; }
  .v2 .hd.hd-titled .logo { display: none; }
  .v2 .hd.hd-titled .hd-title { grid-area: title; display: block; min-width: 0; text-align: center; font-size: 16px; font-weight: 800; color: var(--v2-text); white-space: nowrap; overflow: hidden; text-overflow: ellipsis; padding: 0 4px; }
  .v2.pg-detail .hd.search-open .wrap, .v2:has(> main.content):not(.pg-flow):not(.pg-my) .hd.search-open .wrap { grid-template-areas: "back title search cart" "sw sw sw sw"; row-gap: 10px; padding-bottom: 12px; }
  .v2 .hd.search-open .searchwrap { display: block; grid-area: sw; }
  /* ③ 진행 머리: [뒤로] 제목만 — 이탈 요소(장바구니 아이콘·탭바·푸터 링크) 없음, 사업자 정보·고지는 그대로 */
  body.v2.pg-flow .hd .wrap { grid-template-columns: 44px minmax(0, 1fr) 44px; grid-template-areas: "back title ."; row-gap: 0; padding: 6px 0; }
  body.v2.pg-flow .hd-icons, body.v2.pg-flow .hd-search, body.v2.pg-flow .searchwrap, body.v2.pg-flow .brand-tag, body.v2.pg-flow .hd-menu { display: none; }   /* body. = M18의 :has(> main.content) 규칙보다 뒤·같은 구체도 */
  body.v2.pg-flow .hd-back { display: flex; align-items: center; justify-content: center; grid-area: back; width: 44px; height: 44px; margin-left: -10px; color: var(--v2-text); }
  .v2.pg-flow .hd-back .ic { width: 26px; height: 26px; }
  .v2.pg-flow .tabbar, .v2.pg-flow .ft-links { display: none; }
  .v2.pg-flow:not(:has(.paybar)):not(:has(.cart-group)) { padding-bottom: env(safe-area-inset-bottom); }   /* 탭바가 없으니 그 높이만큼 비우지 않는다(고정 바 화면은 각자 규칙) */
  /* 상세 첫 화면: 사진 화면 끝까지 + "1/N" */
  .v2.pg-detail .dgallery { margin: 0 -20px; }
  .v2.pg-detail .dmain { border: 0; border-radius: 0; }
  .v2.pg-detail .dmain img { border-radius: 0; }
  .v2.pg-detail .dcount { display: inline-flex; align-items: center; position: absolute; right: 10px; bottom: 10px; height: 20px; padding: 0 8px; border-radius: 999px; background: rgba(13, 22, 43, .62); color: #FFFFFF; font-size: 11px; font-weight: 700; line-height: 20px; }
  .v2.pg-detail .dthumbs { padding: 0 20px; }
}
@media (max-width: 560px) {
  .v2.pg-detail .dgallery { margin: 0 -16px; }
  .v2.pg-detail .dthumbs { padding: 0 16px; }
}
/* D6(M30): PC에서 수량·[장바구니][구매하기]를 가격 바로 아래로 올리던 order 규칙 3줄은 roundM45(대표자 2026-11-04 Q-M44-1 ㄱ)에서 삭제 — 마크업 순서(검증 → 배송·반품 → 판매자 → PDF → 구매 상자)대로, 쿠팡 PC 관례 */

/* ===== roundM31(계약 mobile-M31-card-detail-info) 폰 규칙 — 파일 끝(M1~M30과 같은 자리) ===== */
@media (max-width: 900px) {
  /* A2/A11: 2열 보기·홈 트랙 카드에 "상호 · 산지" 1줄(12px 회색)·별점을 다시 보인다(round229의 2열 숨김은 이 결정으로 바뀜, 3열은 그대로 숨김) */
  .v2 .plist[data-view="g2"] .store-name, .v2 .split-grid > .card .store-name, .v2 .hrow-track.grid5 > .card .store-name { display: block; font-size: 12px; }
  /* A10·A5: 상세 끝 구역은 가로 1줄(2.2장 보여 넘김을 알린다) */
  .v2 .drow { display: flex; gap: 10px; overflow-x: auto; scroll-snap-type: x mandatory; scrollbar-width: none; padding-bottom: 2px; }   /* roundM32: 목록 빈 화면 "이런 상품은 어때요"도 같은 줄 */
  .v2 .drow::-webkit-scrollbar { display: none; }
  .v2 .drow > .card { flex: 0 0 calc((100% - 12px) / 2.2); scroll-snap-align: start; }
  .v2 .dfold-s { padding: 12px 14px; }
  .v2 .dfold-b { padding: 0 14px 14px; }
}

/* ===== roundM32(계약 mobile-M32-home-sections) 폰 규칙 — 파일 끝 ===== */
@media (max-width: 900px) {
  /* A1/A4 업체 구역: 폰은 숨기지 않고(M24 규칙 해제) 가로 1줄 카드 — 등재 업체가 있을 때만(cert-empty면 그대로 숨김) */
  .v2 .home-split > section:has(.certbox):not(:has(.cert-empty)) { display: flex; }
  .v2 .certbox { display: flex; gap: 10px; overflow-x: auto; scroll-snap-type: x mandatory; scrollbar-width: none; padding-bottom: 2px; }
  .v2 .certbox::-webkit-scrollbar { display: none; }
  .v2 .certbox a.certrow { flex: 0 0 76%; scroll-snap-align: start; padding: 12px 14px; }
  /* A12 푸터 링크 5개: 한 줄에 안 들어가면 낱말 안에서 꺾이지 않고 줄을 바꾼다(실측 358px에 263 + 간격 96) */
  .v2 .ft-links { flex-wrap: wrap; gap: 4px 20px; }
  .v2 .ft-links a { white-space: nowrap; }
}

/* ===== roundM32-e(대표자 2026-11-01, M33 전 8건) ===== */
/* 지시 1: 입점문의 연락처 줄 */
.v2 .faq-contact { margin-top: 8px; font-weight: 700; }
/* 지시 6: 고시 표 밑 ※ 각주 — 표에서 뺀 괄호 설명 */
.v2 .disc-notes { margin: 8px 0 0; padding: 0; list-style: none; font-size: 12px; line-height: 1.6; color: var(--v2-muted); }
.v2 .disc-notes li { padding-left: 1.2em; text-indent: -1.2em; }
.v2 .disc-notes li::before { content: "※ "; }
.v2 .disc-notes .disc-note-k { font-weight: 700; color: var(--v2-text); }
/* 지시 7: 품절 카드 — 사진 회색 + 가운데 띠(배지 줄의 품절은 그대로) */
.v2 .thumb.is-soldout img { filter: grayscale(1); opacity: .55; }
.v2 .thumb.is-soldout { background: #E5E7E6; }
.v2 .soldout-band { position: absolute; left: 0; right: 0; top: 50%; transform: translateY(-50%); z-index: 2; padding: 7px 0; text-align: center; font-size: 13px; font-weight: 800; letter-spacing: .04em; color: #FFFFFF; background: rgba(13, 22, 43, .72); }
/* 지시 8: 상세 사진 좌우 화살표(PC) — 사진 위 흰 원, 선 아이콘. 폰은 스와이프라 숨김 */
.v2 .dnav { position: absolute; top: 50%; transform: translateY(-50%); z-index: 3; width: 36px; height: 36px; padding: 0; border: 1px solid var(--v2-line); border-radius: 50%; background: rgba(255, 255, 255, .92); box-shadow: 0 2px 8px rgba(13, 22, 43, .14); cursor: pointer; display: inline-flex; align-items: center; justify-content: center; color: var(--v2-ink); }
.v2 .dnav:hover { background: #FFFFFF; }
.v2 .dnav:focus-visible { outline: 0.5px solid var(--v2-ink); outline-offset: 2px; }
.v2 .dnav .ic { width: 20px; height: 20px; }
.v2 .dnav-prev { left: 10px; }
.v2 .dnav-next { right: 10px; }
@media (max-width: 900px) {
  .v2 .dnav { display: none; }
  .v2 .soldout-band { font-size: 12px; padding: 6px 0; }
}

/* ===== roundM33 폼(계약 mobile-M33-forms) ===== */
/* C5·C6 가입: 서식 .field(공용) 안에서 확인 버튼 줄·결과 글·힌트 */
.v2 .signup2 .scard { gap: 0; }
.v2 .signup2 .scard-t { margin-bottom: 10px; }
.v2 .signup2 .field > .inline-check { max-width: 100%; }
.v2 .signup2 .field > .inline-check > input { flex: 1 1 auto; width: auto; }
.v2 .signup2 .field > .check-box:empty { display: none; }
.v2 .signup2 .biz-fields .field:first-child { border-top: 2px solid var(--f-ink, var(--v2-ink)); }
/* C7 비밀번호 규칙: 입력 전 = 기호 없는 회색 문장, 충족 = 선 아이콘 체크(파랑), 미충족 = 선 아이콘 x(빨강) — 글자 기호 없음 */
.v2 .pw-rules { padding: 0; }
.v2 .pw-rules li { display: flex; align-items: center; gap: 6px; }
.v2 .pw-rules li::before, .v2 .pw-rules li.ok::before, .v2 .pw-rules li.bad::before { content: none; }
.v2 .pw-rules .pw-ok, .v2 .pw-rules .pw-bad { display: none; width: 14px; height: 14px; }
.v2 .pw-rules li.ok .pw-ok { display: inline-block; color: var(--v2-blue); }
.v2 .pw-rules li.bad .pw-bad { display: inline-block; color: var(--v2-sale); }
/* C8 약관: 카드 한 겹(목록 안쪽 테두리 없음) */
.v2 .signup2 .consent-list { border: 0; padding: 0; }
/* B13·B14·F-A16 장바구니: 카드 밖 위 한 줄(전체선택 + 선택 삭제), 묶음 금액 줄, 품절 배지 */
.v2 .cart-tools { display: flex; align-items: center; justify-content: space-between; gap: 12px; margin: 0 0 10px; }
.v2 .cart-tools .pick-all-l { font-size: 14px; color: var(--v2-text); }
.v2 .cart-tools .btn-delete:disabled { opacity: .45; cursor: not-allowed; }
.v2 .cart-fee { margin: 0; font-size: 13px; color: var(--v2-muted); text-align: right; }
.v2 .cart-fee b { font-weight: 600; color: var(--v2-text); }
.v2 .cart-fee-sep { margin: 0 4px; }
.v2 .cart-soldout { margin-left: 6px; vertical-align: middle; }
/* C21·C22·A14 주문서 */
.v2 .pay-missing { display: none; color: var(--v2-sale); }
.v2 .pay-missing.is-shown { display: block; }
.v2 .addr-base[readonly] { background: var(--v2-surface); cursor: pointer; }
.v2 .pay-method { flex-direction: column; align-items: flex-start; gap: 2px; font-size: 12px; }
.v2 .pay-method .pay-method-v { font-weight: 400; color: var(--v2-text); line-height: 1.5; }
/* C19 배송지 관리: 추가 폼 접기 */
.v2 .addr-fold > summary { list-style: none; display: flex; align-items: center; justify-content: space-between; gap: 12px; cursor: pointer; }
.v2 .addr-fold > summary::-webkit-details-marker { display: none; }
.v2 .addr-fold > summary .section-title { margin: 0; }
.v2 .addr-fold[open] > summary .addr-fold-btn { display: none; }
/* B6 서랍 계정 줄 */
.v2 .md-account { display: flex; align-items: center; gap: 16px; padding: 12px 16px; border-bottom: 1px solid var(--v2-line); font-size: 15px; font-weight: 700; }
.v2 .md-account a { display: inline-flex; align-items: center; gap: 6px; color: var(--v2-text); }
.v2 .md-account .ic { width: 18px; height: 18px; }
.v2 .md-account .md-acc-signup { color: var(--v2-ink); }
/* M30 보류분: 구매자 web 로그인은 진행 머리(layout/v2) 아래 카드 */
.v2.pg-flow .auth-card { margin-top: 8px; }
.v2 .auth-card form { background: var(--v2-surface); border: 1px solid var(--v2-line); }
@media (max-width: 900px) {
  /* B6: 서랍이 하단 탭바·고정 바까지 덮는다(z 200 > 탭바 80·고정 바) — round230의 탭바 높이 여백은 더 필요 없다 */
  .v2 .mdrawer { z-index: 200; padding-bottom: env(safe-area-inset-bottom); }   /* 장바구니·주문서 고정 바(140대)보다 위 */
  .v2 .md-backdrop { z-index: 199; }
  .v2 .cart-tools { margin: 0 0 10px; }
}
@media (max-width: 480px) {
  /* C20: 2차 인증 행은 폰에서도 이름·상태·버튼 한 줄(이름이 줄어든다) */
  .v2 .sl-row.otp-row { flex-wrap: nowrap; }
  .v2 .sl-row.otp-row .sl-name { flex: 1 1 auto; flex-basis: auto; min-width: 0; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
}

/* ===== roundM33-c(대표자 2026-11-02 확인 회신) ===== */
/* 13. 가입 PC 폭 원복(대표자 2026-11-02): 회원가입 .field는 PC에서도 폰과 같은 '라벨 위 + 칸 전폭'(서식 그리드의 왼쪽 라벨 칸 200px이 칸을 270px로 좁혔다). 아래 폰 블록(≤560)의 규칙을 가입 폼에만 모든 폭으로 */
.v2 .signup2 .field, .v2 .signup2 .field:first-child, .v2 .signup2 :not(.field) + .field, .v2 .signup2 .field.field { display: block; margin: 0 0 14px; padding: 0; border: 0; background: transparent; }
.v2 .signup2 .scard .field:last-child, .v2 .signup2 .biz-fields .field:last-child { margin-bottom: 0; }
.v2 .signup2 .field > label:first-child { display: block; margin: 0 0 6px; padding: 0; border: 0; background: none; font-size: 13px; font-weight: 600; color: var(--v2-text); line-height: 1.4; }
.v2 .signup2 .field > :not(label:first-child) { grid-column: auto; margin: 0; }
.v2 .signup2 .field > input:not([type="checkbox"]):not([type="radio"]), .v2 .signup2 .field > input.w-sm, .v2 .signup2 .field > input.w-md, .v2 .signup2 .field > input[type="tel"], .v2 .signup2 .field > input[type="email"], .v2 .signup2 .field > input[type="password"] { width: 100%; max-width: none; height: 44px; box-sizing: border-box; }
.v2 .signup2 .field > .inline-check { width: 100%; max-width: none; }
.v2 .signup2 .inline-check > input { flex: 1 1 0%; width: 100%; min-width: 0; max-width: none; height: 44px; }   /* width:auto면 칸 기본 크기 137px로 멈춘다 */
.v2 .signup2 .inline-check > .btn { height: 44px; }
.v2 .signup2 .field > .check-box, .v2 .signup2 .field > .field-hint, .v2 .signup2 .field > .pw-rules { margin-top: 6px; }
.v2 .signup2 .pw-match { margin: 6px 0 0; }
.v2 .pw-rules.pw-match { display: flex; align-items: center; gap: 6px; font-size: 12px; }
.v2 .pw-match.ok { color: var(--v2-blue); }
.v2 .pw-match.bad { color: var(--v2-sale); }
.v2 .pw-match.ok .pw-ok, .v2 .pw-match.bad .pw-bad { display: inline-block; }
.v2 .pw-match.ok .pw-ok { color: var(--v2-blue); }
.v2 .pw-match.bad .pw-bad { color: var(--v2-sale); }
/* 18. 회원정보: 자물쇠와 "이메일 인증번호"는 어느 폭에서도 한 줄(app.css .sl-name은 세로 쌓기) */
.v2 .sl-row.otp-row .sl-name { flex-direction: row; align-items: center; gap: 6px; }
.v2 .sl-row.otp-row .sl-name .ic { flex: none; width: 16px; height: 16px; }
/* M34-c: 알림 띠·줄 알림은 서식 원본(a2a-forms.css → app.css) 한 곳 — M33-c의 .v2 덮어쓰기는 지웠다. 담김 안내(.banner-carted)만 스토어 부품 */
.v2 .banner-carted { background: #262B36; border: 0; border-radius: 10px; padding: 14px 18px; display: flex; flex-wrap: wrap; align-items: center; gap: 10px 14px; }
.v2 .banner-carted a { display: inline-flex; align-items: center; height: 32px; padding: 0 12px; border: 0; background: rgba(255, 255, 255, .12); border-radius: 8px; text-decoration: none; font-size: 13px; }

/* ===== roundM33-d(대표자 2026-11-02 M33-c 회신: 고시 표 #10·일치 문구 #13·마이페이지 PC 틀·가입 동의 간격·상세 글자 크기) 기본 규칙 — 폰 규칙은 바로 아래 미디어 블록 ===== */
/* #10 고시·규격 표: 칸 안 글자는 위아래 가운데(PC는 값이 두 줄이어도 회색 머리 칸의 글자가 가운데). 3줄까지만 보이고 [더 보기]로 펼침 — PC 2열 = 6항목, 폰 1열 = 3항목(숨김은 CSS, is-cut·버튼은 buy.js) */
.v2 .spec-item dt { display: flex; align-items: center; }
.v2 .spec-item dd { align-self: center; }
.v2 .spec-grid.is-cut .spec-item:nth-child(n+7) { display: none; }
.v2 .spec-more { display: flex; align-items: center; justify-content: center; gap: 6px; width: 100%; height: 40px; margin: 8px 0 0; padding: 0; border: 1px solid var(--v2-line); border-radius: 6px; background: var(--v2-surface); color: var(--v2-text); font: inherit; font-size: 13px; font-weight: 600; line-height: 1; cursor: pointer; }
.v2 .spec-more:hover { border-color: var(--v2-ink); color: var(--v2-ink); }
.v2 .spec-more .ic { width: 16px; height: 16px; flex: none; transition: transform .2s ease; }
.v2 .spec-more[aria-expanded="true"] .ic { transform: rotate(180deg); }
/* #13 비밀번호 일치 문구: 아이콘 + 글자 한 줄, 왼쪽 정렬(.pw-rules의 세로 쌓기(flex-direction: column)가 남아 아이콘 위·글자 아래 두 줄이 됐다) */
.v2 .pw-rules.pw-match { flex-direction: row; justify-content: flex-start; text-align: left; }
/* 2. 가입 동의 카드: 전체 동의 줄과 목록 사이 12px(M33의 .signup2 .scard gap 0이 동의 카드까지 덮어 0이 됐다). 줄 높이는 [보기] 유무와 상관없이 24px */
.v2 .signup2 .scard.consent { gap: 12px; }
.v2 .signup2 .consent-list label { min-height: 24px; }
/* 3. 상세 오른쪽 정보: 배송·반품 값(11px)·판매자 값(13px)은 검증 정보의 고지 문장과 같은 12px */
.v2 .dsec2-ship .dkv dd, .v2 .dsec2-seller .dkv dd { font-size: var(--t-caption); }
/* 1. 마이페이지 PC: 찜 목록·재입고 알림·에이전트 위임·회원정보도 내 주문과 같은 틀(.content.content-wide 1100px + 타일 줄 + .page-title 24px) — 템플릿 쪽 변경, CSS 추가 없음 */
@media (max-width: 720px) {
  /* #10 폰: 이름 줄·값 줄 모두 위아래 7px(M33-c의 8/2·0/8은 회색 이름 띠 안에서 글자가 위로 치우쳤다), 값 줄은 가로 전폭 */
  .v2 .spec-item dt { padding: 7px 10px; }
  .v2 .spec-item dd { padding: 7px 10px; align-self: stretch; }
  .v2 .spec-grid.is-cut .spec-item:nth-child(n+4) { display: none; }
}

/* ===== roundM34(계약 mobile-M34-dispatch-producer-unit-related): 단위 가격 · 생산자 카드 · 연관 검색어 칩 · 검색 지우기 ===== */
/* 상세 가격 아래 "100g당 1,234원" — 부가세 줄과 같은 11~12px 회색 */
.v2 .dunit { margin: 2px 0 0; font-size: var(--t-caption); color: var(--v2-muted); line-height: 1.5; }
/* 생산자 카드(상세 판매자 구역·브랜드관 머리 공용) — 상호 14px, 나머지 12px(M33-d 값 글자 규칙), 구분점은 CSS */
.v2 .pcard { display: flex; flex-direction: column; gap: 4px; font-size: var(--t-caption); }
.v2 .pcard p { margin: 0; line-height: 1.5; }
.v2 .pcard .pc-name { display: flex; align-items: center; flex-wrap: wrap; gap: 6px; font-size: 14px; }
.v2 .pcard .pc-name strong { font-weight: 700; color: var(--v2-text); }
.v2 .pcard .pc-name a { color: inherit; }
.v2 .pcard .pc-meta { color: var(--v2-muted); }
.v2 .pcard .pc-meta span + span::before { content: "·"; margin: 0 6px; color: var(--v2-muted2); }
.v2 .pcard .pc-intro { color: var(--v2-text); word-break: keep-all; }
.v2 .pcard .pc-more { align-self: flex-start; margin-top: 2px; }
/* 브랜드관 머리: 제목 줄 아래 테두리 카드(채움 없음) — 도구 줄과 16px */
.v2 .listmain > .pcard { margin: 0 0 16px; padding: 12px 16px; border: 1px solid var(--v2-line); border-radius: 8px; }
/* 연관 검색어 칩 1줄 — 가로 스크롤(폰), 채움 없는 테두리(메뉴·칩 채움 금지 규칙), 강조는 글자·테두리 색 */
.v2 .rel-terms { display: flex; align-items: center; gap: 8px; margin: 0 0 12px; overflow-x: auto; white-space: nowrap; scrollbar-width: none; }
.v2 .rel-terms::-webkit-scrollbar { display: none; }
.v2 .rel-terms .rt-label { flex: none; font-size: 13px; font-weight: 800; color: var(--v2-muted); margin-right: 4px; }
.v2 .rel-terms a { flex: none; border: 1px solid var(--v2-line); border-radius: 999px; padding: 6px 14px; font-size: 13px; line-height: 1.2; color: var(--v2-text); background: transparent; text-decoration: none; }
.v2 .rel-terms a:hover { border-color: var(--v2-ink); color: var(--v2-ink); }
/* 검색 칸 지우기(×) — 돋보기 앞 36px, 값이 없으면 숨김([hidden]은 .searchbox button의 display:flex에 지므로 따로 적는다) */
.v2 .searchbox .sb-clear { width: 36px; padding: 0; border-radius: 0; color: var(--v2-muted); }
.v2 .searchbox .sb-clear .ic { width: 18px; height: 18px; }
.v2 .searchbox .sb-clear:hover { color: var(--v2-text); }
.v2 .searchbox .sb-clear[hidden] { display: none; }

/* ===== roundM35(계약 M34 §7 미룬 것 2건): 카드 단위 가격 1줄 · 장바구니/주문서 발송 예정 줄 ===== */
.v2 .prow-unit { margin: 0; font-size: 11px; line-height: 1.3; color: var(--v2-muted); font-weight: 500; }
.v2 .plist[data-view="g3"] .prow-unit { display: none; }   /* 3열 폰 카드엔 자리가 없다 */
.v2 .g-dispatch, .v2 .ocard-dispatch { display: flex; align-items: center; gap: 6px; margin: -6px 0 0; font-size: 12px; line-height: 1.5; color: var(--v2-muted); }
.v2 .ocard-dispatch { margin: -4px 0 12px; }
.v2 .g-dispatch .ic, .v2 .ocard-dispatch .ic { width: 14px; height: 14px; flex: none; color: var(--v2-ink); }

/* ===== roundM36(대표자 2026-11-02 M35 확인 회신 3건) ===== */
/* ② 고시 표 각주(※ 줄인 이름: 전체 이름)는 표를 3줄로 접은 동안 함께 숨기고 [N항목 더 보기]로 펼치면 보인다(dl → 버튼 → ul 순서라 ~) */
.v2 .spec-grid.is-cut ~ .disc-notes { display: none; }
/* ③ 장바구니·주문서 발송 줄: 문장 두 줄(줄바꿈) + "N영업일"·"평일 H시" 강조, ⓘ는 첫 줄 */
.v2 .g-dispatch, .v2 .ocard-dispatch { align-items: flex-start; }
.v2 .g-dispatch .ic, .v2 .ocard-dispatch .ic { margin-top: 2px; }
.v2 .g-dispatch .dtxt span, .v2 .ocard-dispatch .dtxt span { display: block; }
.v2 .g-dispatch b, .v2 .ocard-dispatch b { font-weight: 700; color: var(--v2-ink); }
/* ① 구매자몰 버튼 포커스 0.5px(세 앱 app.css·서식 원본과 같은 규칙 — store-v2 전용 버튼은 위 개별 규칙에서 0.5px) */
.v2 button:focus-visible { outline: 0.5px solid var(--v2-ink); outline-offset: 1px; }   /* 스토어 화면은 app.css를 안 읽는 곳이 있어 굵기만이 아니라 선 전체를 적는다 */
.v2 button:focus:not(:focus-visible) { outline: 0; box-shadow: none; }

/* ===== roundM37(대표자 2026-11-03 폰 캡처 4건) ===== */
/* ① 폰 홈 메뉴 줄: [할인] 칸 제거(템플릿), 줄 높이는 위아래 6px + 칸 32 = 44(전 40), 글자 13px 고정 */
@media (max-width: 900px) {
  .v2 .hmenu { height: auto; padding-top: 6px; padding-bottom: 6px; }
  .v2 .hmenu a { font-size: 13px; }
}

/* ===== roundM38(대표자 2026-11-03 회신 3건) ===== */
/* ② 어두운 띠 안 링크([전체 보기] 등)는 흰색 — app.css의 .banner-info a(0,1,1)를 뒤에 오는 .v2 a(0,1,1)·.v2 a:hover가 본문색·검정으로 덮던 것 */
.v2 .banner-warning a, .v2 .banner-info a, .v2 .banner-danger[role="note"] a, .v2 .banner[data-band] a,
.v2 .banner-warning a:hover, .v2 .banner-info a:hover, .v2 .banner-danger[role="note"] a:hover, .v2 .banner[data-band] a:hover { color: #FFFFFF; }
/* ③ 구매자몰 외곽선 삭제·거절 버튼(장바구니 [선택 삭제] 등)은 마우스를 올려도 색을 뒤집지 않는다(서식 시스템의 빨간 채움 hover는 판매자·운영센터 업무 버튼용) — 바탕만 연한 분홍.
   M38-b: 빨간 채움이 기본인 .btn-danger.btn-delete(장바구니 행 휴지통·내 후기 [삭제])는 제외 — 그쪽은 올림 때 조금 더 진한 빨강(.v2 .btn-danger:hover) 그대로. :where()로 구체성 (0,3,0) 유지(주소록 회색 규칙이 계속 이긴다) */
.v2 .btn-delete:where(:not(.btn-danger)):hover, .v2 .btn-reject:where(:not(.btn-danger)):hover { background: #FFF5F5; border-color: var(--v2-sale); color: var(--v2-sale); }

/* ===== roundM39(대표자 2026-11-03 "폰 푸터 사업자 정보 안 보이게") ===== */
/* PC는 버튼 없이 그대로 펼침. 폰(900 이하)은 [사업자 정보 보기] 토글(바탕·테두리 없음) 뒤에 접어 둔다 — 중개자 고지(.ft-notice)는 그대로 */
.v2 .ft-biz-toggle { display: none; }
@media (max-width: 900px) {
  .v2 .ft-biz-toggle { display: inline-flex; align-items: center; gap: 4px; padding: 6px 0; margin: -6px 0 0; background: none; border: 0; font: inherit; font-size: 13px; font-weight: 700; color: var(--v2-muted); cursor: pointer; }
  .v2 .ft-biz-toggle svg { width: 14px; height: 14px; transition: transform .15s; }
  .v2 .ft-biz-toggle[aria-expanded="true"] svg { transform: rotate(180deg); }
  .v2 .ft-info { display: none; }
  .v2 .ft-info.is-open { display: block; }
}

/* ===== roundM40(대표자 2026-11-03 H-IMP-1 결정 + 카드 줄 순서) ===== */
/* audit ①: 별점 숫자는 진한 황갈색(6.3:1), 별 아이콘은 밝은 황갈색 그대로 — 카드 별점 줄·상세 리뷰 제목 공용 .rate */
.v2 .rate { color: var(--v2-star-ink); }
.v2 .rate .ic-star { color: var(--v2-star); }
/* 카드 줄 순서: 사진 → 배지 → 상호·산지 → 상품명 → (별점) → 할인 → 가격 → 단위 가격(맨 끝, 템플릿 card.html).
   가격 줄 위아래 7px → 2px(할인 줄과 8px, 단위 줄과 8px — 줄 사이 gap 6 포함). 찜·[담기] 버튼(34px)은 가격 줄 가운데에 맞춘다.
   roundM41: 단위 줄이 모든 카드에 있으니(빈 줄 포함) :has 분기 없이 값 하나 — 가격 20px 글줄 기준 값은 roundM41 블록 */
.v2 .card .prow-price { padding-top: 2px; padding-bottom: 2px; }
/* round230의 "가격과 '원'은 한 줄"(55행)은 뒤에 오는 .v2 .prow { flex-wrap: wrap }(188행, 같은 구체성)에 져서 죽어 있었다 — PC 5열 카드(180px)에서 "31,000원"의 '원'이 둘째 줄로 내려가 가격 줄이 44px. 여기서 되살린다 */
.v2 .prow-price { flex-wrap: nowrap; }
@media (max-width: 900px) {
  /* 폰 기본(상세 연관·2.2장 줄 등, 본문 아래 10·버튼 30): 가격 줄 2/2. 버튼 bottom 값은 roundM41 블록(단위 줄 항상 있음·가격 20px) */
  .v2 .card .prow-price { padding-top: 2px; padding-bottom: 2px; }
  /* 2열 목록·홈 신상품·행사 카드(줄 사이 4·버튼 30): 가격 줄 2/2(전 6/0), 본문 아래 0 → 4(가격 글줄 가운데 15.3에 버튼 가운데를 맞추려면 bottom이 음수가 된다) → 버튼 0 / 단위 줄 있으면 4 + 14.3 + 4 + 2 + 9.3 = 33.6 → 19.
     전엔 버튼 가운데가 가격 글줄보다 5px 위였다(roundM1 값) — 같은 부류라 함께 맞춘다 */
  .v2 .plist[data-view="g2"] .card .prow-price, .v2 .split-grid > .card .prow-price, .v2 .hrow-track.grid5 > .card .prow-price { padding-top: 2px; padding-bottom: 2px; }
  .v2 .plist[data-view="g2"] .cbody, .v2 .split-grid > .card .cbody, .v2 .hrow-track.grid5 > .card .cbody { padding-bottom: 4px; }
  /* 2열·홈·한 줄 목록의 버튼 bottom 값도 roundM41 블록(단위 줄 항상 있음·가격 20px) */
}

/* ===== roundM41(대표자 2026-11-03 C-M40-1 ① 회신: 모든 금액 같은 줄·금액 20px·큰 금액은 버튼을 아래로) ===== */
/* 단위 줄(.prow-unit)은 단위가 없는 상품에도 빈 줄로 남긴다(card.html) → 가격 줄이 어느 카드든 같은 높이. 빈 .prow를 숨기는 규칙(190행 :empty)의 예외 */
.v2 .prow-unit { min-height: 1.3em; }
.v2 .cbody > .prow-unit:empty { display: flex; }
.v2 .price { font-size: 20px; }   /* 17 → 20(폰 15 → 20, 3열은 roundM42에서 14 → 16 — 3열 카드 114px) */
/* 버튼(34px)을 가격 글줄 가운데에: 본문 아래 10 + 단위 줄 14.3 + 줄 사이 6 + 가격 줄 28(2 + 24 + 2)/2 = 44.3 → bottom 27(실측 차 +0.3) */
.v2 .card-cart, .v2 .card-wish { bottom: 27px; }
/* 큰 금액(card.html의 price-6 = 10만 원대·price-7 = 100만 원 이상): 20px 숫자 폭은 5자리 84·6자리 97·7자리 117(단위 '원' 포함).
   PC 5열 목록 카드(180px, 가격 자리 74px)는 6자리부터 찜 버튼에 닿는다(3.5px 겹침) → 가격 줄은 끝까지 쓰고 버튼은 단위 줄 아래 한 줄(본문 아래 10 + 34 + 6).
   PC 홈 신상품·행사(236px, 자리 130)·상세 연관·찜 목록(296px)은 7자리도 들어가므로 그대로 */
.v2 .plist .card.price-6 .cbody, .v2 .plist .card.price-7 .cbody { padding-bottom: 50px; }
.v2 .plist .card.price-6 .prow-price, .v2 .plist .card.price-7 .prow-price { padding-right: 0; }
.v2 .plist .card.price-6 .card-cart, .v2 .plist .card.price-6 .card-wish, .v2 .plist .card.price-7 .card-cart, .v2 .plist .card.price-7 .card-wish { bottom: 10px; }
@media (max-width: 900px) {
  /* 폰 기본(상세 연관 2.2장 159px·찜 목록 등, 본문 아래 10·줄 사이 6·버튼 30): 10 + 14.3 + 6 + 14 = 44.3 → bottom 29 */
  .v2 .card-cart, .v2 .card-wish { bottom: 29px; }
  /* 폰 기본 카드(159px)는 5자리 84px이 찜 버튼에 1px 남아 버튼 두 개를 4px 오른쪽으로(10/44 → 6/40, 품절 카드의 찜 하나도 6) → 5px.
     6자리부터 겹친다 → price-6부터 버튼을 아래로(본문 아래 10 + 30 + 6) */
  .v2 .card-cart { right: 6px; }
  .v2 .card-wish { right: 40px; }
  .v2 .card:not(:has(.card-cart)) .card-wish { right: 6px; }
  .v2 .card.price-6 .cbody, .v2 .card.price-7 .cbody { padding-bottom: 46px; }
  .v2 .card.price-6 .prow-price, .v2 .card.price-7 .prow-price { padding-right: 0; }
  .v2 .card.price-6 .card-cart, .v2 .card.price-6 .card-wish, .v2 .card.price-7 .card-cart, .v2 .card.price-7 .card-wish { bottom: 10px; }
  /* 2열 목록(174px, 자리 104)·홈 신상품·행사(165px, 자리 95)(본문 아래 4·줄 사이 4·버튼 30): 4 + 14.3 + 4 + 14 = 36.3 → bottom 21.
     6자리 97은 들어가고(찜 버튼까지 10px) 7자리 117부터 겹친다 → price-6는 되돌리고 price-7만 아래로(본문 아래 4 + 30 + 4) */
  .v2 .plist[data-view="g2"] .card-cart, .v2 .plist[data-view="g2"] .card-wish,
  .v2 .split-grid > .card .card-cart, .v2 .split-grid > .card .card-wish,
  .v2 .hrow-track.grid5 > .card .card-cart, .v2 .hrow-track.grid5 > .card .card-wish { bottom: 21px; }
  .v2 .plist[data-view="g2"] .card.price-6 .cbody, .v2 .split-grid > .card.price-6 .cbody, .v2 .hrow-track.grid5 > .card.price-6 .cbody { padding-bottom: 4px; }
  .v2 .plist[data-view="g2"] .card.price-6 .prow-price, .v2 .split-grid > .card.price-6 .prow-price, .v2 .hrow-track.grid5 > .card.price-6 .prow-price { padding-right: 70px; }
  .v2 .plist[data-view="g2"] .card.price-6 .card-cart, .v2 .plist[data-view="g2"] .card.price-6 .card-wish,
  .v2 .split-grid > .card.price-6 .card-cart, .v2 .split-grid > .card.price-6 .card-wish,
  .v2 .hrow-track.grid5 > .card.price-6 .card-cart, .v2 .hrow-track.grid5 > .card.price-6 .card-wish { bottom: 21px; }
  .v2 .plist[data-view="g2"] .card.price-7 .cbody, .v2 .split-grid > .card.price-7 .cbody, .v2 .hrow-track.grid5 > .card.price-7 .cbody { padding-bottom: 38px; }
  .v2 .plist[data-view="g2"] .card.price-7 .prow-price, .v2 .split-grid > .card.price-7 .prow-price, .v2 .hrow-track.grid5 > .card.price-7 .prow-price { padding-right: 0; }
  .v2 .plist[data-view="g2"] .card.price-7 .card-cart, .v2 .plist[data-view="g2"] .card.price-7 .card-wish,
  .v2 .split-grid > .card.price-7 .card-cart, .v2 .split-grid > .card.price-7 .card-wish,
  .v2 .hrow-track.grid5 > .card.price-7 .card-cart, .v2 .hrow-track.grid5 > .card.price-7 .card-wish { bottom: 4px; }
  /* 한 줄 목록(358px, 가격 자리 146 — 7자리도 들어간다, 가격 줄 여백 0·글줄 24, 카드 아래 12 + 선 1, 버튼 30): 13 + 14.3 + 6 + 12 = 45.3 → bottom 29(실측 +0.3). 자릿수 분기 없음 */
  .v2 .plist[data-view="list"] .card-cart, .v2 .plist[data-view="list"] .card-wish,
  .v2 .plist[data-view="list"] .card.price-6 .card-cart, .v2 .plist[data-view="list"] .card.price-6 .card-wish,
  .v2 .plist[data-view="list"] .card.price-7 .card-cart, .v2 .plist[data-view="list"] .card.price-7 .card-wish { bottom: 29px; }
  .v2 .plist[data-view="list"] .card.price-6 .cbody, .v2 .plist[data-view="list"] .card.price-7 .cbody { padding-bottom: 0; }
  .v2 .plist[data-view="list"] .card.price-6 .prow-price, .v2 .plist[data-view="list"] .card.price-7 .prow-price { padding-right: 36px; }
  /* 3열(114px, 버튼 없음·단위 줄 없음): 빈 단위 줄도 숨기고 자릿수 분기도 없다 */
  .v2 .plist[data-view="g3"] .prow-unit, .v2 .plist[data-view="g3"] .cbody > .prow-unit:empty { display: none; }
  .v2 .plist[data-view="g3"] .card.price-6 .cbody, .v2 .plist[data-view="g3"] .card.price-7 .cbody { padding-bottom: 0; }
}

/* ===== roundM42(대표자 2026-11-03 D-M41-1 확정: 폰 3열 보기 가격 14 → 16px) ===== */
/* 3열 카드 114px — 16px 7자리 "1,234,000원"은 94px로 들어간다(20px이면 117px로 넘침). 할인율 12px·단위 줄 없음·버튼 없음은 그대로 */
@media (max-width: 900px) {
  .v2 .plist[data-view="g3"] .price { font-size: 16px; }
}

/* ===== roundM43(대표자 2026-11-03 배포 확인 회신 1·2) ===== */
/* 1. PC 머리 [국산 검증 상품관] 배지(.b-vrf.sm.t): 안쪽 여백 14px 12px·네모(둥글림 0). 높이는 글자 12 + 28 = 40(고정 23 해제). 폰 머리는 그대로 */
@media (min-width: 901px) {
  .v2 .b-vrf.sm.t { height: auto; padding: 6px 8px; border-radius: 0; }   /* roundM44(대표자 확인 회신 1): 14px 12px → 8px 8px → roundM45(대표자 2026-11-04): 6px 8px */
}
/* 2. 상세 'n명이 샀어요' 칩: 대표자 제공 3D 카트 그림 32px(칩 높이 26 → 36) + 사람 수 주황 강조 */
.v2 .drv-bought { height: 25px; padding: 0 12px 0 4px; gap: 7px; }   /* roundM44(대표자 확인 회신 2): 36·0 10px 0 4px·6 → 25·0 12px 0 4px·7, 그림은 비율대로 32 → 22 */
.v2 .drv-bought .drv-cart { width: 22px; height: 22px; display: block; object-fit: contain; }
.v2 .drv-bought .drv-n { color: var(--v2-orange-ink); font-size: 16px; font-weight: 800; }

/* ===== roundM44(대표자 2026-11-03 M43 확인 회신 — 상세 PC): 가격 30px · '부가세 포함' 제거 · 단위 가격은 가격 옆 괄호 · 찜은 하트만 공유 옆 ===== */
.v2 .dname-row .wish-form { flex: none; margin: 0; gap: 0; }
.v2 .dname-row .wish-btn { width: 36px; height: 36px; margin-top: 2px; padding: 0; border: 1px solid var(--v2-line); border-radius: 8px; background: transparent; color: var(--v2-text); display: inline-flex; align-items: center; justify-content: center; gap: 0; }   /* 공유 버튼(.dshare)과 같은 36px 틀 */
.v2 .dname-row .wish-btn .ic { width: 18px; height: 18px; }
.v2 .dname-row .wish-btn:hover, .v2 .dname-row .wish-btn.on { border-color: var(--v2-sale); color: var(--v2-sale); }
.v2 .dinfo .dprice { align-items: baseline; }
.v2 .dinfo .dprice .dunit { margin: 0 0 0 8px; font-size: 14px; font-weight: 500; color: var(--v2-muted); line-height: 1.5; }   /* "(100g당 950원)" — 쿠팡 관례: 가격과 같은 줄, 회색 */
@media (max-width: 900px) {
  .v2 .dname-row .wish-form { display: none; }   /* 폰 상세의 찜은 고정 바(M18) 하나 */
  .v2 .dinfo .dprice .dunit { font-size: 12px; margin-left: 6px; }
}

/* ===== roundM45(대표자 2026-11-04 M44 확인 회신): 배지 6px 8px(M43 블록 제자리) · PC 구매 상자 판매자 정보 아래로(M30 D6 삭제) · 폰 수량 줄을 고정 바 안 버튼 위로 · 승인 아이콘(I-2 PC 머리 카트, I-11 탭바 장바구니 3dicons 가방·마이 명함, I-12 마이 메뉴·/my 줄 타일 그림 — 찜은 선 그대로) ===== */
/* roundM46(대표자 2026-11-04 "선 아이콘이 제일 낫다"): M45의 PC 머리 카트 그림·탭바 가방/명함 그림은 선으로 되돌렸다(규칙 삭제). 남은 그림 = 마이 줄 5(내 주문·재입고·리뷰·쿠폰·배송지)·빠른 메뉴 2(내 주문·리뷰) */
.v2 .my-quick img, .v2 .my-row-ic img { width: 26px; height: 26px; object-fit: contain; display: block; }
.v2 .my-quick a:not(.on) img { filter: grayscale(1); opacity: .62; }   /* 현재 탭만 제 색(채움·테두리 없음 — 2026-10-31 M26 규칙) */
@media (max-width: 900px) {
  .v2 .my-row-ic { width: 26px; height: 26px; }
  /* 폰 고정 구매 바 = [수량 라벨 … 스테퍼] 한 줄 + [찜][장바구니][구매하기] 한 줄(대표자 2026-11-04: "수량을 하단 고정 바 위에 붙여") — 본문 위쪽 수량 줄(M18)은 없앤다 */
  .v2 .dsticky { flex-wrap: wrap; row-gap: 10px; }
  .v2 .dsticky .ds-form { display: flex; flex: 1 0 100%; justify-content: space-between; align-items: center; gap: 10px; margin: 0; padding-bottom: 10px; border-bottom: 1px solid var(--v2-line); }
  .v2 .dsticky .dqty-l { display: inline; font-size: 14px; color: var(--v2-text); font-weight: 600; }
  .v2 .dsticky .ds-form .qty-stepper { height: 40px; }
  .v2.dsheet-on .dsticky .ds-form { display: none; }   /* 옵션 상품: 수량은 시트 안 옵션 아래(M22) — 바는 버튼 한 줄 */
  .v2.pg-detail .dinfo > .dbuy:not(:has(.restock)):not(:has(.banner)) { display: none; }   /* 본문 수량 줄 제거(옵션 상품은 buy.js가 시트로 옮긴 뒤라 .dinfo 자식이 아님). 품절 재입고 알림·문의 등록 띠는 남는다 */
  .v2.pg-detail:not(.dsheet-on) { padding-bottom: calc(136px + env(safe-area-inset-bottom)); }   /* 바 두 줄(수량 40 + 10 + 10 + 버튼 48 + 10·10) */
}

/* roundM48(대표자 2026-11-04, 네이버 실시간 쇼핑 검색어 첨부): 홈 인기 검색어 = 상자 안 1~10위 한 줄이 3초마다 위로 굴러감 + [∨] 펼침 패널(순위·검색어·지난주 대비 등락). 칩 줄(.pop-terms > a)은 검색 0건 빈 상태에만 남는다. 패널·버튼은 바탕 채움 없음(메뉴 규칙) */
.v2 .pop-roll { flex-wrap: nowrap; gap: 10px; }
.v2 .pop-roll .pt-label { margin-right: 0; }
.v2 .pop-roll .pr-box { position: relative; display: flex; align-items: center; width: 280px; max-width: 100%; height: 36px; border: 1px solid var(--v2-line); border-radius: 8px; background: var(--v2-surface); }
.v2 .pop-roll .pr-view { flex: 1 1 auto; min-width: 0; height: 36px; overflow: hidden; }
.v2 .pop-roll .pr-track { list-style: none; margin: 0; padding: 0; transition: transform .45s ease; }
.v2 .pop-roll .pr-track.no-anim { transition: none; }
.v2 .pop-roll .pr-track li { height: 36px; }
.v2 .pop-roll .pr-track a, .v2 .pop-roll .pr-list a { display: flex; align-items: center; gap: 8px; height: 36px; padding: 0 12px; font-size: 14px; color: var(--v2-text); text-decoration: none; }
.v2 .pop-roll .pr-n { flex: none; min-width: 16px; font-weight: 800; font-style: italic; color: var(--v2-sale); }
.v2 .pop-roll .pr-t { flex: 1 1 auto; min-width: 0; overflow: hidden; white-space: nowrap; text-overflow: ellipsis; font-weight: 700; }
.v2 .pop-roll .pr-toggle, .v2 .pop-roll .pr-close { flex: none; border: 0; background: transparent; color: var(--v2-muted); display: inline-flex; align-items: center; justify-content: center; cursor: pointer; padding: 0; }
.v2 .pop-roll .pr-toggle { width: 34px; height: 34px; border-radius: 0 8px 8px 0; }
.v2 .pop-roll .pr-toggle svg, .v2 .pop-roll .pr-close svg { width: 18px; height: 18px; }
.v2 .pop-roll .pr-toggle svg { transition: transform .2s; }
.v2 .pop-roll .pr-toggle[aria-expanded="true"] svg { transform: rotate(180deg); }
.v2 .pop-roll .pr-toggle:hover, .v2 .pop-roll .pr-close:hover { color: var(--v2-text); }
.v2 .pop-roll .pr-panel { position: absolute; top: calc(100% + 6px); left: 0; z-index: 30; width: 320px; max-width: calc(100vw - 32px); background: var(--v2-surface); border: 1px solid var(--v2-line); border-radius: 10px; box-shadow: 0 8px 24px rgba(13, 22, 43, .12); padding: 4px 0 6px; }
.v2 .pop-roll .pr-panel[hidden] { display: none; }
.v2 .pop-roll .pr-head { display: flex; align-items: center; gap: 8px; padding: 8px 8px 6px 14px; }
.v2 .pop-roll .pr-head strong { font-size: 15px; font-weight: 800; }
.v2 .pop-roll .pr-asof { font-size: 12px; color: var(--v2-muted); }
.v2 .pop-roll .pr-close { margin-left: auto; width: 28px; height: 28px; }
.v2 .pop-roll .pr-list { list-style: none; margin: 0; padding: 0; }
.v2 .pop-roll .pr-list a { height: 38px; padding: 0 14px; }
.v2 .pop-roll .pr-list a:hover { background: var(--v2-bg); }
.v2 .pop-roll .pr-d { flex: none; width: 18px; height: 18px; display: inline-flex; align-items: center; justify-content: center; color: var(--v2-muted); }
.v2 .pop-roll .pr-d svg { width: 14px; height: 14px; }
.v2 .pop-roll .pr-d.up { color: var(--v2-sale); }
.v2 .pop-roll .pr-d.down { color: var(--v2-blue); }
@media (max-width: 900px) {
  .v2 .pop-roll .pr-box { flex: 1 1 auto; width: auto; }
  .v2 .pop-roll .pr-panel { width: 100%; max-width: none; }
}
