/* =====================================================================
 * site-shell.css — 화면을 오갈 때의 껍데기 안정 (2026-09-07)
 *
 * 처음엔 두 가지(1·2)만 담았다. 둘 다 "화면이 덜컹거린다" 는 같은 뿌리에서 나온 문제다.
 * 3) 은 2026-10-19 T17 — 전 루트 페이지에 걸리는 파일이라 공용 레이아웃 토큰도 여기 둔다.
 *   1) 스크롤바가 생겼다 없어질 때 가운데 정렬이 밀리는 것
 *   2) 페이지를 옮길 때 문서를 통째로 갈아치우며 생기는 흰 깜빡임
 *
 * 라이브러리 없이 CSS 만 쓴다(ui-ux.md: 외부 CDN 금지 · 최소 JS).
 * 미지원 브라우저는 예전과 똑같이 동작한다 — 점진적 향상이라 깨질 것이 없다.
 * ===================================================================== */

/* ── 1) 스크롤바 자리를 늘 비워 둔다 ─────────────────────────────────
 * 내용이 짧아 스크롤바가 없는 화면과 긴 화면 사이를 오가면, 세로 스크롤바
 * 너비(윈도우 크롬 기준 약 15px)만큼 가운데 정렬된 본문이 좌우로 튄다.
 * 같은 화면 안에서도 목록을 접었다 펴면 같은 일이 생긴다.
 * scrollbar-gutter 는 스크롤바가 없을 때도 그 자리를 남겨 둔다.
 * (맥의 오버레이 스크롤바는 원래 자리를 안 먹어 아무 영향이 없다.) */
html { scrollbar-gutter: stable; }

/* 옛 브라우저 폴백 — 항상 스크롤 트랙을 띄워 같은 효과를 낸다. */
@supports not (scrollbar-gutter: stable) {
  html { overflow-y: scroll; }
}

/* ── 2) 페이지 전환 ────────────────────────────────────────────────
 * 같은 오리진 문서끼리 크로스페이드한다. 선언 한 줄이면 브라우저가 알아서
 * 이전 화면의 스냅숏을 들고 있다가 새 화면과 겹쳐 준다 → 흰 깜빡임이 사라진다. */
@view-transition { navigation: auto; }

@keyframes ak-shell-fade-in  { from { opacity: 0 } to { opacity: 1 } }
@keyframes ak-shell-fade-out { from { opacity: 1 } to { opacity: 0 } }

/* 나가는 쪽을 조금 더 빨리 지워 잔상이 겹쳐 탁해지지 않게 한다. */
::view-transition-old(root) { animation: ak-shell-fade-out .16s ease both; }
::view-transition-new(root) { animation: ak-shell-fade-in .22s ease both; }

/* 이름을 붙인 조각(GNB·바로가기 카드 줄·푸터)은 두 문서에 걸쳐 '같은 요소' 로
 * 이어지므로 다시 그리지 않고 제자리를 지킨다. 이름은 문서 안에서 유일해야 해서
 * 각 화면의 스타일에서 붙인다(같은 이름이 둘이면 전환이 통째로 취소된다). */
/* 헤더(GNB)·푸터에 이름을 붙여 두 문서에 걸쳐 '같은 요소' 로 이어지게 한다 → 페이지를 옮겨도
 * 헤더·푸터는 다시 그리지 않고 제자리를 지키고, 본문만 바뀐다(2026-09-10).
 * ⚠️ 이름은 문서 안에서 하나여야 한다 — 빵부스러기 <nav class="mc-bc nav"> 는 제외한다. */
nav.nav:not(.mc-bc) { view-transition-name: ak-gnb; }
.site-footer        { view-transition-name: ak-footer; }

::view-transition-group(ak-gnb),
::view-transition-group(ak-subnav),
::view-transition-group(ak-footer) {
  animation-duration: .22s;
  animation-timing-function: cubic-bezier(.2, .7, .3, 1);
}

/* ── 3) JS 가 그리는 목록의 자리를 미리 비워 둔다 (2026-09-09) ──────────
 * `category/all` 계열은 `#groups` 를 `category-all.js` 가 그린다. 그동안 자리에는
 * 「로딩 중」 한 줄(82px)만 있어서, 목록이 도착하면 그 아래 푸터가 화면 안에서
 * 통째로 밀려 내려갔다 — 실측 CLS 0.19("개선 필요" 구간).
 * 로딩 자리를 화면 절반 이상으로 잡아 두면 푸터가 처음부터 화면 밖에 있어 밀릴 것이 없다.
 * 목록이 그려질 때 이 요소는 **제거**되므로(스크립트가 갈아끼운다) 다 그려진 화면에는
 * 빈 공간이 남지 않는다. */
#groups .cat-loading{ min-height: 56vh; }

/* ── 4) 소셜 로그인 자리를 미리 비워 둔다 (2026-09-09) ──────────────────
 * `login`·`signup` 의 구글 로그인 블록은 `<div data-oauth hidden>` 으로 시작해
 * `GET /api/auth/google/config` 가 `enabled` 를 주면 드러난다. 그때 103px 이 갑자기
 * 생겨 그 아래(회원가입 안내·푸터)가 화면 안에서 밀려 내려갔다 — 실측 CLS 0.0198.
 * `hidden` 인 동안에도 자리는 잡아 두고(안 보이고 못 누른다), 확인 결과가 「끔」이거나
 * 확인이 실패했을 때만 접는다(`auth.js` 가 `data-oauth-off` 를 붙인다).
 * 이 환경은 `enabled: true` 라 실제로는 접히지 않는다. */
[data-oauth][hidden]{ display:block; visibility:hidden; }
[data-oauth][data-oauth-off]{ display:none; }

/* 모션을 줄여 달라고 한 사용자에게는 아무것도 하지 않는다. */
@media (prefers-reduced-motion: reduce) {
  @view-transition { navigation: none; }
}

/* ── 3) 공용 레이아웃 토큰 (2026-10-19 T17) ───────────────────────────
 * 본문 시작선이 페이지마다 갈렸다(1920 실측 345·413·415·421·441·445·461 …):
 * 폭 1120/1080/1060/1040 과 안쪽 여백 28/22/20 이 화면마다 따로 적혀 있었기 때문이다.
 * 서브페이지 본문 컨테이너는 이 토큰을 쓴다 — 페이지 인라인 CSS 에 숫자를 다시 적지 않는다.
 *   --ak-content : 본문 컨테이너 최대 폭(안쪽 여백 포함, design.md §2 「.wrap 1120」)
 *   --ak-gutter  : 본문 컨테이너 좌우 안쪽 여백 → 글자 시작선 = (화면−1120)/2 + 28
 *   --ak-inset   : 히어로 상자 안 글자 들여쓰기(상자 시작선은 본문과 같고 글자만 이만큼 안으로)
 *   --ak-header  : 헤더 콘텐츠(로고~오른쪽 묶음) 최대 폭 — 넓은 화면에서 가운데로 모은다(site-gnb.css). 배경은 전폭.
 * 휴대폰·태블릿(≤1024)은 페이지·mobile-fixes.css 의 기존 덮어쓰기(16px 등)가 그대로 이긴다.
 * 예외(일부러 다른 폭): 약관 860/820 · category/order(cart-review) 1280 · product-detail 1440 · 회원 작업공간 1440 · 홈·국가 홈 전폭. */
:root { --ak-content: 1120px; --ak-gutter: 28px; --ak-inset: 40px; --ak-header: 1440px; }

/* 브라우저 기본 body 여백(8px) — site.css 의 `*{margin:0}` 를 싣지 않는 화면(about-*·cart)에서 헤더·본문이 8px 들어가 있었다. */
body { margin: 0; }

/* 섹션 안내문(.sec-sub) 뒤 병기 한국어 줄 — 센터 페이지 6곳은 한국어 span 이 <p> 밖 형제라 p 의 아래 여백(18px) 뒤로 떨어지고
   9.9px 로 작게 옆에 붙었다(2026-10-21 사용자 「병기는 좋은데 간격이 이상해」) → 안내문 바로 아래 줄로 붙이고 여백은 한국어 줄 뒤로 옮긴다 */
/* 페이지 인라인 `html.ak-enko .i18n-sub{display:inline !important}` 보다 구체적이어야 이긴다 */
html .sec-sub:has(+ .ak-pbi-blk) { margin-bottom: 3px !important; }
html body .sec-sub + .ak-pbi-blk.i18n-sub { display: block !important; margin: 0 0 18px !important; font-size: 12.5px !important; line-height: 1.55; letter-spacing: 0; color: #4a6b9c; }
