@charset "UTF-8";

/* ════════════════════════════════════════════════════════════════════
   정윤의 추천노트 - Tistory Odyssey Custom Skin
   ════════════════════════════════════════════════════════════════════
   원칙
   - !important 절대 사용 안 함 (specificity 로만 처리)
   - 모든 값은 CSS 변수 (:root) 사용 - 하드코딩 금지
   - 변수는 :root 한 곳에 모두 정의
   ────────────────────────────────────────────────────────────────────
   Stage 1 - 변수 시스템 + 리셋 + 헤더 + 메인화면 + 푸터 + 모바일 기본
   Stage 2 - 카테고리/검색/태그/아카이브 카드형 글 목록
   Stage 3 - 본문 view (article-card, TOC, 추천 읽기 순서, 인기글 등)
   Stage 4 - 모바일 미세 보정, 본문 콘텐츠 박스 (제휴 안내, 핵심 요약 등)
   ════════════════════════════════════════════════════════════════════ */


/* ════════════════════════════════════════════════════════════════════
   1. 변수 시스템 - 모든 디자인 토큰을 한 곳에 정의
   ════════════════════════════════════════════════════════════════════ */
/* ════════════════════════════════════════════════════════════════════
   📚 토큰 박물관 — style.css 의 토큰 정의는 HTML <head> 인라인 으로 이전됨
   ──────────────────────────────────────────────────────────────────
   ▣ 실제 작동 정의: index.html 의 <head> 안 <style> 인라인 블록 (단일 출처)
   ▣ 아래 주석들: 디자인 결정 이력 / 시안 참조 / 컴포넌트 매핑 설명 보존용
   ▣ 토큰 추가/수정 시: index.html 인라인 블록 수정 + 아래 주석 동기화
   ════════════════════════════════════════════════════════════════════ */

/* :root { */
  /* ─── 색상 (추가.txt) ─────────────────────────────────────────────────
   *
   *  ▣ 기본 색상 (추가.txt "기본 색상 유지" + "보정용 색상 추가 추천")
   *
   *    역할 표 (추가.txt) ─────────────────────────────────────
   *    #FAF7F2 → 전체 배경 (--color-bg)
   *    #FFFFFF → 카드/본문/푸터 (--color-card)
   *    #2F6F73 → 로고, 제목 포인트, 링크 (--color-primary)
   *    #DDE8E3 → 요약 박스, 목차 버튼 (--color-secondary)
   *    #F4A261 → 구매/가격 CTA (--color-accent)
   *    #222222 → 본문 제목/글 (--color-text)
   *    #6B7280 → 설명, 날짜, 메타 (--color-muted)
   *    #E8E2DA → 테두리 (--color-line)
   *
   *  ▣ 주황 사용 규칙 (추가.txt) ────────────────────────────
   *    ✓ 가격 확인하기 / 상품 상세보기 / 오늘 혜택 보기 → CTA 에만 사용
   *    ✗ 제휴 안내 박스 띠     → 사용하지 않기
   *    ✗ 푸터 제휴 안내        → 사용하지 않기
   *    ✗ 목차 버튼            → 사용하지 않기
   *    ✗ 카테고리 카드         → 사용하지 않기
   *    ✗ 일반 링크            → 사용하지 않기
   * ─────────────────────────────────────────────────────────────────── */
/*   --color-bg:               #FAF7F2; */
/*   --color-card:             #FFFFFF; */
/*   --color-primary:          #2F6F73; */
/*   --color-primary-dark:     #24585C; */
/*   --color-primary-soft:     rgba(47, 111, 115, 0.10); */
/*   --color-secondary:        #DDE8E3; */
/*   --color-secondary-soft:   #EEF5F1; */
/*   --color-secondary-border: rgba(47, 111, 115, 0.16); */
/*   --color-accent:           #F4A261; */
/*   --color-accent-hover:     #F6B27B; */
/*   --color-accent-active:    #E8914F; */
/*   --color-accent-soft:      #FFF1E3; */
/*   --color-accent-soft-hover:#FCE3CC; */
/*   --color-accent-border:    rgba(244, 162, 97, 0.34); */
/*   --color-notice-bg:        #FFF8EF; */
/*   --color-text:             #222222; */
  /* 추가.txt 색상 표는 "본문 제목/글 = #222222" 하나만 명시.
     본문 안의 강조 글(strong/b/dt/h*)도 별도 색을 두지 않고
     추가.txt 그대로 #222222 사용. 시각 위계는 font-weight 로 잡음. */
/*   --color-text-strong:      #222222; */
/*   --color-muted:            #6B7280; */
/*   --color-muted-light:      #9CA3AF; */
/*   --color-line:             #E8E2DA; */
/*   --color-focus-ring:       rgba(47, 111, 115, 0.28);   포커스링 (a11y)  */
/*   --color-input-focus-bg:   rgba(47, 111, 115, 0.12);   추가.txt §2: input focus shadow 0.12  */

  /* ─── 그림자 (추가.txt 기준) ─── */
/*   --shadow-base:        rgba(47, 111, 115, 0.08); */
/*   --shadow-xs:          0 4px  12px rgba(47, 111, 115, 0.04); */
/*   --shadow-sm:          0 8px  22px rgba(47, 111, 115, 0.06); */
/*   --shadow-md:          0 14px 36px rgba(47, 111, 115, 0.08); */
/*   --shadow-lg:          0 18px 48px rgba(47, 111, 115, 0.10); */
/*   --shadow-card:        0 12px 30px rgba(47, 111, 115, 0.06); */
/*   --shadow-card-hover:  0 18px 38px rgba(47, 111, 115, 0.11); */
  /* 메인화면 상세값 §2: 헤더 그림자 0 8px 24px rgba(47,111,115,0.06) */
/*   --shadow-header:      0 8px 24px rgba(47, 111, 115, 0.06); */
/*   --shadow-header-mobile-real: 0 8px 22px rgba(47, 111, 115, 0.06);    메인화면 상세값 모바일 §2  */
/*   --shadow-footer:      0 12px 30px rgba(47, 111, 115, 0.07); */
  /* 메인화면 상세값 §13: CTA 그림자 0 8px 18px rgba(244,162,97,0.22) */
/*   --shadow-cta:         0 8px 18px rgba(244, 162, 97, 0.22); */
  /* 메인화면 상세값 모바일 §16: CTA 그림자 0 7px 18px rgba(244,162,97,0.22) */
/*   --shadow-cta-mobile-real: 0 7px 18px rgba(244, 162, 97, 0.22); */
/*   --shadow-cta-hover:   0 10px 22px rgba(244, 162, 97, 0.28);    기준 정리 그림자 정리표 - PC CTA hover (이전 0 14 28 0.32 → 0 10 22 0.28)  */
/*   --shadow-drawer:      -18px 0 48px rgba(47, 111, 115, 0.14); */
/*   --shadow-overlay:     rgba(34, 34, 34, 0.36); */
  /* 기준 정리 §1·§5: 본문 바로가기 박스 / 호버 그림자
   * ※ 흰 카드 위에 얹는 매우 옅은 톤 — 카드 분리감만 살리고 무게는 X */
/*   --shadow-post-toc:        0 7px 18px rgba(47, 111, 115, 0.045); */
/*   --shadow-post-toc-hover:  0 7px 16px rgba(47, 111, 115, 0.07); */

  /* ─── 간격 (4px 기반) ─── */
/*   --space-1:  4px; */
/*   --space-2:  8px; */
/*   --space-3:  12px; */
/*   --space-4:  16px; */
/*   --space-5:  20px; */
/*   --space-6:  24px; */
/*   --space-7:  28px; */
/*   --space-8:  32px; */
/*   --space-9:  36px; */
/*   --space-10: 40px; */
/*   --space-11: 44px; */
/*   --space-12: 48px; */
/*   --space-14: 56px; */
/*   --space-16: 64px; */
/*   --space-20: 80px; */

  /* ─── 둥근 모서리 ─── */
/*   --radius-xs:   8px; */
/*   --radius-sm:   12px; */
/*   --radius-md:   14px; */
/*   --radius-lg:   18px; */
/*   --radius-xl:   22px; */
/*   --radius-2xl:  24px; */
/*   --radius-3xl:  28px; */
/*   --radius-4xl:  32px; */
/*   --radius-pill: 999px; */

  /* ─── 테두리 ─── */
/*   --border-soft:   1px solid var(--color-line); */
/*   --border-teal:   1px solid var(--color-secondary-border); */
/*   --border-accent: 1px solid var(--color-accent-border); */

  /* ─── Z-index ─── */
/*   --z-base:    1; */
/*   --z-header:  50; */
/*   --z-overlay: 100; */
/*   --z-drawer:  110; */
/*   --z-modal:   200; */

  /* ─── 트랜지션 (추가.txt §3 애니메이션/Transition) ─── */
/*   --ease-soft:      cubic-bezier(0.22, 1, 0.36, 1); */
/*   --duration-fast:  0.16s; */
/*   --duration-base:  0.22s; */
/*   --duration-slow:  0.36s; */
  /* 기준 정리 §5: 본문 바로가기 버튼 호버 전환 - 0.18s
   * ※ duration-fast(0.16s) 와 duration-base(0.22s) 사이의 중간값
   * ※ 알약 버튼 호버에 더 잘 어울리는 톤 (너무 빠르지도 느리지도 않게) */
/*   --duration-toc:   0.18s; */

  /* 추가.txt §3 권장 4속성 통합 트랜지션 (.card / .button / .quick-link / .category-card 등) */
/*   --transition-card: */
    transform        var(--duration-base) var(--ease-soft),
    box-shadow       var(--duration-base) var(--ease-soft),
    background-color var(--duration-fast) ease,
    border-color     var(--duration-fast) ease;

  /* ─── 폰트 (추가.txt - 폰트 스택 5개 정확히 일치) ─── */
  /*
   *  순서        | 적용되는 폰트
   *  ---------- | ----------------
   *  -apple-system      → 아이폰/맥에서 애플 기본 폰트
   *  BlinkMacSystemFont → 크롬 계열에서 애플 시스템 폰트
   *  "Noto Sans KR"     → 한국어에서 깔끔한 고딕 계열
   *  "Segoe UI"         → 윈도우 기본 UI 폰트
   *  sans-serif         → 위 폰트가 없을 때 기본 고딕체
   */
/*   --font-base:      -apple-system, BlinkMacSystemFont, "Noto Sans KR", "Segoe UI", sans-serif; */
/*   --letter-spacing: -0.02em; */
  /* 메인화면 상세값 §3: 로고 자간 -0.04em */
/*   --letter-spacing-logo:    -0.04em; */
  /* 메인화면 상세값 §8: 섹션 제목 자간 -0.05em */
/*   --letter-spacing-section: -0.05em; */
  /* 메인화면 상세값 §11: 히어로 메인 제목 자간 -0.06em */
/*   --letter-spacing-hero:    -0.06em; */
  /* 강조 자간 - 본문 바로가기 제목 / 핵심 요약 제목 등 시각 임팩트가 필요한 슬롯
   * ※ 기준 정리 §2·§12·§15: 제목 자간 -0.045em
   * ※ 본문 자간 -0.02em 보다 한 단계 더 좁혀서 굵은 타이포의 시각 무게를 강화 */
/*   --letter-spacing-tight: -0.045em; */
  /* 디스플레이 자간 - H1 본문 제목 전용 (가장 큰 타이포)
   * ※ 기준 정리 §4: H1 제목 자간 -0.055em
   * ※ 46px 의 큰 글자에서 한 단계 더 좁혀서 묵직한 시각 톤 형성 */
/*   --letter-spacing-display: -0.055em; */

  /* 폰트 크기 (PC 기준) */
/*   --text-xs:       12px; */
/*   --text-sm:       13px; */
/*   --text-base:     14px; */
/*   --text-md:       15px; */
/*   --text-lg:       16px; */
/*   --text-xl:       17px; */
/*   --text-2xl:      18px; */
/*   --text-3xl:      20px; */
/*   --text-4xl:      21px; */
/*   --text-5xl:      24px; */
/*   --text-6xl:      28px; */
/*   --text-7xl:      32px; */
/*   --text-display:  42px; */

  /* 모바일 추가 폰트 크기 */
/*   --text-mobile-logo:   24px; */
/*   --text-mobile-hero:   32px;        메인화면 상세값 모바일 §14: 32px (이전 33 → 32)  */
/*   --text-mobile-section:25px;        메인화면 상세값 모바일 §11: 25px (이전 24 → 25)  */

  /* ─── 시맨틱 폰트 토큰 — 중간 플러스 추천값 적용
   *
   *  ※ 추천값은 추가.txt 기본 토큰 위에 컴포넌트 단계에서 미세 보정한 값입니다.
   *     (예: 로고 21px → 27px, 메뉴 16px → 16.5px, 섹션 제목 32px → 31px)
   *
   *  표기법: --text-{용도}-{pc|mobile}
   *  PC 값은 "현재 시안의 글자 느낌" 항목 기준
   *  모바일 값은 "중간 플러스 기준에 맞게 모바일 메뉴 시안 글짜 크기" 표 기준
   *  ─────────────────────────────────────────────────────────────────
   *  요소               | PC      | 모바일  | weight
   *  ──────────────────|─────────|────────|────────
   *  로고               | 27px    | 24px   | 900  ← 중간 플러스
   *  히어로 제목        | 50px    | 33px   | 900  ← 중간 플러스
   *  히어로 설명        | 17.5px  | 16px   | 400  ← 중간 플러스
   *  섹션 제목          | 31px    | 24px   | 900  ← 중간 플러스
   *  메뉴 카테고리(GNB) | 16.5px  | 17px   | 800  ← 중간 플러스
   *  메뉴 블로그명(드로어)| ─    | 24px   | 900
   *  메뉴 설명(드로어)  | ─       | 14px   | 400
   *  최근글 제목        | 17.5px  | 15px   | 800  ← 중간 플러스
   *  날짜              | 14.5px  | 13px   | 400  ← 중간 플러스
   *  운영 안내 링크     | 14px    | 15px   | 700
   *  CTA 버튼          | 14px    | 15px   | 700
   *  검색창            | 13px    | 14px   | 400
   *  제휴 안내         | 15.5px  | 13px   | 400  ← 중간 플러스
   *  ───────────────────────────────────────────────────────────────── */

  /* 로고 (중간 플러스: PC 27px) */
/*   --text-logo-pc:           26px;    기준표 §7: 27 → 26  */
/*   --text-logo-mobile:       var(--text-mobile-logo);  24px  */

  /* 히어로 메인 제목 — 메인화면 상세값 §11 / 모바일 §14
   *  PC: 47px / 줄간격 1.18 / 자간 -0.06em / 아래 18px
   *  모바일: 32px / 줄간격 1.25 / 자간 -0.055em / 아래 14px */
/*   --text-hero-title-pc:        47px;                        메인화면 상세값 §11  */
/*   --text-hero-title-mobile:    var(--text-mobile-hero);     32px  */
/*   --leading-hero-title-pc:     1.18;                        메인화면 상세값 §11  */
/*   --leading-hero-title-mobile: 1.25;                        메인화면 상세값 모바일 §14  */
/*   --space-hero-title-bottom-pc:     18px;                   메인화면 상세값 §11: 아래 18px  */
/*   --space-hero-title-bottom-mobile: 14px;                   메인화면 상세값 모바일 §14: 아래 14px  */

  /* 히어로 설명글 — 메인화면 상세값 §12 / 모바일 §15
   *  PC: 17px / 줄간격 1.78 / 아래 24px
   *  모바일: 16px / 줄간격 1.78 / 아래 22px */
/*   --text-hero-desc-pc:              17px; */
/*   --text-hero-desc-mobile:          var(--text-lg);         16px  */
/*   --space-hero-desc-bottom-pc:      24px;                   메인화면 상세값 §12: 아래 24px  */
/*   --space-hero-desc-bottom-mobile:  22px;                   메인화면 상세값 모바일 §15: 아래 22px  */

  /* 섹션 제목 — 메인화면 상세값 §8 / 모바일 §11
   *  PC 29 / 모바일 25 / weight 900 / 자간 -0.05em / 아래 24 (PC) · 20 (모바일) */
/*   --text-section-title-pc:     29px; */
/*   --text-section-title-mobile: 25px;        메인화면 상세값 모바일 §11: 25px (이전 26 → 25)  */
/*   --space-section-title-bottom-mobile: var(--space-5);    20px - 메인화면 상세값 모바일 §11  */

  /* GNB 메뉴 카테고리 (PC 헤더) - 메인화면 상세값 §4 적용: PC 16px / 모바일 17px / weight 700 */
/*   --text-menu-cat-pc:       16px;    메인화면 상세값 §4  */
/*   --text-menu-cat-mobile:   17px;    메인화면 상세값 모바일 §7  */
/*   --weight-menu-cat:        var(--weight-bold);    메인화면 상세값 §4: 700 (모바일 §7 은 별도 토큰)  */
/*   --weight-menu-cat-mobile: var(--weight-extrabold);   메인화면 상세값 모바일 §7: 800  */

  /* 모바일 드로어 - 블로그명 + 설명 */
/*   --text-mobile-menu-blog:  var(--text-mobile-section);  24px  */
/*   --text-mobile-menu-desc:  var(--text-base);   14px  */

  /* 최근글 / 사이드바 글 제목 (중간 플러스: PC 18px / 모바일 16px) */
/*   --text-recent-title-pc:     17px;    기준표 §29: 18 → 17 (글 리스트 제목)  */
/*   --text-recent-title-mobile: var(--text-lg);    16px - 중간 플러스  */

  /* 날짜 / 메타 정보 (중간 플러스: PC 15px / 모바일 13px) */
/*   --text-date-pc:           var(--text-base);   14px - 기준표 §30: 15 → 14  */
/*   --text-date-mobile:       var(--text-sm);     13px  */

  /* 운영 안내 / 푸터 링크 — 메인화면 상세값 §32 / 모바일 §36
   *  PC 15px / 모바일 14px / 줄간격 1.9 / weight 700 / 색 #6B7280 */
/*   --text-foot-link-pc:      var(--text-md);     15px - 메인화면 상세값 §32 (이전 14 → 15)  */
/*   --text-foot-link-mobile:  var(--text-base);   14px - 메인화면 상세값 모바일 §36 (이전 15 → 14)  */
/*   --leading-foot-link:      1.9;                메인화면 상세값 §32 / 모바일 §36  */

  /* CTA 버튼 (추천 글 보러가기 등) */
/*   --text-cta-pc:            var(--text-base);   14px  */
/*   --text-cta-mobile:        var(--text-md);     15px  */

  /* 검색창 (추가.txt §2 Form/Input 시스템: 베이스 15px / 모바일 메뉴 표: 14px override) */
/*   --text-search-pc:         var(--text-md);     15px - Form/Input 베이스  */
/*   --text-search-mobile:     var(--text-base);   14px - 모바일 메뉴 표  */

  /* 제휴 안내 — 기준 정리 §1 적용
   * 본문 글씨: PC 15.5px / 모바일 13.5px
   * 제목 글씨: PC 17px / 모바일 15px (.box-affiliate strong)
   * ※ 15.5px / 13.5px 는 스케일 외 값 — 직접 정의 (시안 픽셀 정확값) */
/*   --text-affiliate-pc:           15.5px;        기준 §1 PC: 본문 15.5px  */
/*   --text-affiliate-mobile:       var(--text-base);   14px - 기준 모바일 §9 (1단계 §1 비교표 13.5 → 모바일 §9 정확값 14 갱신)  */
/*   --text-affiliate-title-pc:     var(--text-xl);    17px - 기준 §1 PC  */
/*   --text-affiliate-title-mobile: var(--text-md);    15px - 기준 §1 모바일  */

  /* ─── 시맨틱 폰트 토큰 — 글 목록 카드 (post-card)
   *   추가.txt 표에 명시되지 않은 영역. 시안 메인02/03 기준 픽셀.
   *   ─────────────────────────────────────────────────────────── */
/*   --text-post-card-title-pc:     var(--text-5xl);    24px  */
/*   --text-post-card-summary-pc:   var(--text-md);     15px  */
/*   --text-post-card-date-pc:      var(--text-base);   14px  */

  /* ─── 시맨틱 폰트 토큰 — 푸터
   *   메인화면 상세값 §31·§32 / 모바일 §35·§36·§37 적용
   *
   *   PC:
   *   - 컬럼 제목:    18px / 900 / 아래 14   (§31)
   *   - 푸터 링크:    15px / 줄간격 1.9 / #6B7280  (§32)
   *   - 카피라이트:   13px / 800
   *   - 태그라인:     13px
   *
   *   모바일:
   *   - 컬럼 제목:    17px / 900 / 아래 12   (§35)
   *   - 푸터 링크:    14px / 줄간격 1.9      (§36)
   *   - 카피라이트:   12.5px / #9CA3AF / 위 padding 20 / 위 구분선 (§37)
   *   ─────────────────────────────────────────────────────────── */
/*   --text-footer-brand-title-pc:    var(--text-5xl);   24px  */
/*   --text-footer-brand-title-mobile:var(--text-5xl);   24px  */
/*   --text-footer-brand-desc-pc:     var(--text-foot-link-pc);       푸터 링크와 동일 - 15px  */
/*   --text-footer-brand-desc-mobile: var(--text-foot-link-mobile);   푸터 링크와 동일 - 14px  */

  /* 푸터 컬럼 제목 — 메인화면 상세값 §31 / 모바일 §35 */
/*   --text-footer-col-title-pc:           var(--text-2xl);    18px - 메인화면 상세값 §31 (이전 16 → 18)  */
/*   --text-footer-col-title-mobile:       var(--text-xl);     17px - 메인화면 상세값 모바일 §35 (이전 16 → 17)  */
/*   --weight-footer-col-title:            var(--weight-black);      900 - 메인화면 상세값 §31 (이전 800 → 900)  */
/*   --space-footer-col-title-bottom-pc:     14px;             메인화면 상세값 §31: 아래 14  */
/*   --space-footer-col-title-bottom-mobile: var(--space-3);   12px - 메인화면 상세값 모바일 §35  */

  /* 푸터 카피라이트 — 메인화면 상세값 모바일 §37 */
/*   --text-footer-copy-pc:           var(--text-sm);    13px  */
/*   --text-footer-copy-mobile:       12.5px;            메인화면 상세값 모바일 §37: 12.5px (스케일 외)  */
/*   --color-footer-copy-mobile:      var(--color-muted-light);   #9CA3AF - 메인화면 상세값 모바일 §37  */
/*   --space-footer-copy-pad-top-pc:     var(--space-7);    28px - 푸터 하단 시각 대칭 (2026-05-22 추가, 같은 날 20→28 조정)  */
/*   --space-footer-copy-pad-top-mobile: var(--space-7);    28px - 푸터 하단 시각 대칭 (2026-05-22 20→12→16→28 조정)  */
/*   --footer-bottom-gap-pc:             var(--space-5);    20px - PC: 좌측 카피 ↔ 우측 태그라인 가로 간격 (2026-05-22 추가)  */
/*   --footer-bottom-gap-mobile:         var(--space-2);     8px - 모바일: 위 카피 ↔ 아래 태그라인 세로 간격 (2026-05-22 추가, 12→8 압축)  */
/*   --text-footer-tagline-pc:        var(--text-sm);    13px  */
/*   --text-footer-tagline-mobile:    var(--text-sm);    13px  */

  /* 푸터 제휴 안내 박스 — 본문 페이지 제휴 안내(--text-affiliate-*) 와 분리.
   * 푸터 컬럼 내 시각 통일을 위해 푸터 링크와 동일 크기로 잠금. */
/*   --text-footer-affiliate-pc:      var(--text-foot-link-pc);      14px  */
/*   --text-footer-affiliate-mobile:  var(--text-foot-link-mobile);  15px  */

  /* ─── 시맨틱 폰트 토큰 — 메인 페이지 섹션 / 사이드바 / 카드
   *   추가.txt 표에 직접 명시되지 않은 영역도 시맨틱 토큰 레이어를 통해
   *   추가.txt 시스템 안에서 일관 관리되도록 정리.
   *   값은 시안 메인01~05 / 본문01~11 기준 픽셀.
   *   ─────────────────────────────────────────────────────────── */

  /* 섹션 헤더 부제목 / 더보기 링크 */
/*   --text-section-desc-pc:     var(--text-md);      15px  */
/*   --text-section-more-pc:     var(--text-md);      15px  */

  /* 사이드바 박스 제목 (글 목차 / 추천 읽기 순서 / 인기글 등)
     - 중간 플러스: PC 인기글 제목 27px / 모바일 23px */
/*   --text-sidebar-title-pc:     25px;    기준표 §19: 27 → 25  */

  /* 히어로 사이드 카드 (처음 오셨다면 이 순서로 보세요)
   *  메인화면 상세값 §15·§16·§17 / 모바일 §18·§19·§20
   *  PC: radius 28 / padding 31 / 그림자 0 10px 28px 0.06 / 제목 25 / 리스트 16·1.7·14gap
   *  모바일: radius 26 / padding 28 / 제목 23 / 리스트 15.5·1.76·13gap */
/*   --hero-side-radius-pc:        var(--radius-3xl);    28px - 메인화면 상세값 §15  */
/*   --hero-side-radius-mobile:    26px;                 메인화면 상세값 모바일 §18  */
/*   --hero-side-pad-pc:           31px;                 메인화면 상세값 §15: 31px (스케일 외)  */
/*   --hero-side-pad-mobile:       28px;                 메인화면 상세값 모바일 §18: 28px  */
/*   --hero-side-shadow-pc:        0 10px 28px rgba(47, 111, 115, 0.06);   메인화면 상세값 §15  */
/*   --hero-side-shadow-mobile:    0 10px 28px rgba(47, 111, 115, 0.06);   메인화면 상세값 모바일 §18  */

/*   --text-hero-side-title-pc:     25px;                 메인화면 상세값 §16: 25px (이전 24 → 25)  */
/*   --text-hero-side-title-mobile: 23px;                 메인화면 상세값 모바일 §19: 23px  */
/*   --text-hero-side-desc-pc:      var(--text-base);     14px  */
/*   --text-hero-side-link-pc:      var(--text-lg);       16px - 메인화면 상세값 §17  */
/*   --text-hero-side-link-mobile:  15.5px;               메인화면 상세값 모바일 §20: 15.5px (스케일 외)  */
/*   --leading-hero-side-link-pc:     1.7;                메인화면 상세값 §17  */
/*   --leading-hero-side-link-mobile: 1.76;               메인화면 상세값 모바일 §20  */
/*   --gap-hero-side-list-pc:         14px;               메인화면 상세값 §17: 항목 간격 14px  */
/*   --gap-hero-side-list-mobile:     13px;               메인화면 상세값 모바일 §20: 13px  */

  /* 카테고리 카드 (메인 페이지) - 중간 플러스: 제목 23px, 설명 16px / 모바일 20px, 15px */
/*   --text-category-title-pc:     22px;    기준표 §25: 23 → 22  */
/*   --text-category-title-mobile: var(--text-3xl);    20px - 중간 플러스  */
/*   --text-category-desc-pc:      var(--text-md);     15px - 기준표 §26: 16 → 15  */
/*   --text-category-desc-mobile:  var(--text-md);     15px - 중간 플러스  */

  /* CTA 밴드 (메인 페이지 하단 "수익형 블로그지만 …") */
/*   --text-cta-band-title-pc:     var(--text-6xl);           28px  */
/*   --text-cta-band-title-mobile: var(--text-mobile-section);  24px  */
/*   --text-cta-band-desc-pc:      var(--text-md);            15px  */

  /* CTA 알약 (cta-pill - 추천템 보기, 절약 팁 보기 등) */
/*   --text-cta-pill-pc:     var(--text-md);    15px  */


  /* ─── 본문 view 글씨 시맨틱 토큰 (Source of Truth)
   *
   *   기준표 명시값:
   *   - "본문 설명 글씨"  → PC 17px / 모바일 16px (--text-article-body-pc / -mobile)
   *   - 모든 텍스트 letter-spacing: -0.02em
   *   - 폰트 스택: --font-base (5종)
   *
   *   기준표 미명시 (시안 + 위계 기준):
   *   - article-title (H1):  PC 42px / 모바일 33px (히어로와 동일 위계)
   *   - article-view h2:     PC 28px / 모바일 24px
   *   - article-view h3:     PC 24px / 모바일 20px
   *   - article-view h4:     PC 20px / 모바일 18px
   *   - article-view h5:     PC 17px / 모바일 16px
   *   - article-view h6:     PC 16px / 모바일 15px
   *   - article-lead (리드): PC 16px / 모바일 16px
   *   - article-meta (날짜): PC 13px / 모바일 13px (날짜 표와 동일)
   * ─────────────────────────────────────────────────────────────── */

  /* 본문 단락 (p / li / dd) — 기준표 "본문 설명 글씨" PC 17 / 모바일 16 적용 */
/*   --text-article-body-pc:        var(--text-xl);           17px - 기준표 PC  */
/*   --text-article-body-mobile:    var(--text-lg);           16px - 기준표 모바일  */

  /* article-title = 본문 페이지의 H1 (article-card 안) — 기준 정리 §4
   * PC 46px (기본값 권장 - 기준 범위 44~47) / 모바일 33px (기존 유지) */
/*   --text-article-title-pc:       46px;                     기준 정리 §4: 46px (이전 42 → 46, 스케일 외)  */
/*   --text-article-title-mobile:   var(--text-mobile-hero);  33px  */

  /* article-view 내부 헤딩 (사용자가 본문 본문에서 직접 쓰는 h2~h6)
   * ※ H2/H3 는 기준 정리 §18·§19 정확값 적용 (스케일 외)
   * ※ H4~H6 는 기준 정리 미명시 — 기존 스케일 유지 */
/*   --text-article-h2-pc:          29px;                     기준 §18: 29px (이전 28 → 29, 스케일 외)  */
/*   --text-article-h2-mobile:      var(--text-5xl);          24px  */
/*   --text-article-h3-pc:          22px;                     기준 §19: 22px (이전 24 → 22, 스케일 외)  */
/*   --text-article-h3-mobile:      var(--text-3xl);          20px  */
/*   --text-article-h4-pc:          var(--text-3xl);          20px  */
/*   --text-article-h4-mobile:      var(--text-2xl);          18px  */
/*   --text-article-h5-pc:          var(--text-xl);           17px  */
/*   --text-article-h5-mobile:      var(--text-lg);           16px  */
/*   --text-article-h6-pc:          var(--text-lg);           16px  */
/*   --text-article-h6-mobile:      var(--text-md);           15px  */

  /* article-lead = 본문 페이지 리드문 — 기준 정리 §5
   * PC 17px (이전 16 → 17) / 모바일 16px (기존 유지) */
/*   --text-article-lead-pc:        var(--text-xl);           17px - 기준 §5 (이전 16 → 17)  */
/*   --text-article-lead-mobile:    var(--text-lg);           16px - 기존 유지  */

  /* ─ Tistory 에디터 글씨 크기 매핑 토큰 (data-ke-size) ─ 컴포넌트 토큰 정의
   * ※ 에디터에서 "16px" 선택 시 HTML 출력에 data-ke-size="size16" 표시됨
   * ※ 본문 영역(.article-view) 안의 비-헤딩 단락(p, li, blockquote 등) 에만 적용
   * ※ h1~h6 헤딩은 테마 토큰(--text-article-hN-pc/-mobile) 으로 일관 유지
   *
   * ▣ 본문 작성 워크플로우 (권장)
   *   - 에디터 기본 사이즈는 size16 (자동) — 16px / 모바일 15px 로 표시됨
   *   - 기준표 §16 "본문 설명 글씨" 17px 적용은 작성 시 size17 명시 선택 필요
   *   - 즉 본문 단락 작성 시 17px 로 선택 → data-ke-size="size17" → PC 17 / 모바일 16
   *
   * ▣ PC/모바일 분기 원칙
   *   - 12px (최소): 모바일에서도 그대로 (가독성 floor)
   *   - 14~20px (작은 글씨): -1 step (1px 축소) — 본문 단락
   *   - 22~38px (강조 글씨): -2px — 헤딩성 강조
   *   - PC base 매핑(--text-ke-size-N)은 두 번째 :root 블록에서, 모바일 재할당은 @media 안에서 처리
   * ※ 가능한 기존 --text-* 시맨틱 스케일에 alias, 스케일 외 값은 직접 정의 */

  /* PC */
/*   --text-ke-size-12-pc:  var(--text-xs);      12px  */
/*   --text-ke-size-14-pc:  var(--text-base);    14px  */
/*   --text-ke-size-15-pc:  var(--text-md);      15px  */
/*   --text-ke-size-16-pc:  var(--text-lg);      16px  */
/*   --text-ke-size-17-pc:  var(--text-xl);      17px - 본문 기본 권장 사이즈 (기준표 §16)  */
/*   --text-ke-size-18-pc:  var(--text-2xl);     18px  */
/*   --text-ke-size-20-pc:  var(--text-3xl);     20px  */
/*   --text-ke-size-22-pc:  22px;                22px - 스케일 외  */
/*   --text-ke-size-24-pc:  var(--text-5xl);     24px  */
/*   --text-ke-size-26-pc:  26px;                26px - 스케일 외  */
/*   --text-ke-size-28-pc:  var(--text-6xl);     28px  */
/*   --text-ke-size-30-pc:  30px;                30px - 스케일 외  */
/*   --text-ke-size-32-pc:  var(--text-7xl);     32px  */
/*   --text-ke-size-34-pc:  34px;                34px - 스케일 외  */
/*   --text-ke-size-36-pc:  36px;                36px - 스케일 외  */
/*   --text-ke-size-38-pc:  38px;                38px - 스케일 외  */

  /* 모바일 — PC에서 한 단계 축소 (작은 글씨는 -1, 강조 글씨는 -2) */
/*   --text-ke-size-12-mobile:  var(--text-xs);     12px - floor  */
/*   --text-ke-size-14-mobile:  var(--text-sm);     13px  */
/*   --text-ke-size-15-mobile:  var(--text-base);   14px  */
/*   --text-ke-size-16-mobile:  var(--text-md);     15px  */
/*   --text-ke-size-17-mobile:  var(--text-lg);     16px - 본문 기본 권장 사이즈 (기준표 §16)  */
/*   --text-ke-size-18-mobile:  var(--text-lg);     16px  */
/*   --text-ke-size-20-mobile:  var(--text-2xl);    18px  */
/*   --text-ke-size-22-mobile:  var(--text-3xl);    20px  */
/*   --text-ke-size-24-mobile:  22px;               22px - 스케일 외  */
/*   --text-ke-size-26-mobile:  var(--text-5xl);    24px  */
/*   --text-ke-size-28-mobile:  26px;               26px - 스케일 외  */
/*   --text-ke-size-30-mobile:  var(--text-6xl);    28px  */
/*   --text-ke-size-32-mobile:  30px;               30px - 스케일 외  */
/*   --text-ke-size-34-mobile:  var(--text-7xl);    32px  */
/*   --text-ke-size-36-mobile:  34px;               34px - 스케일 외  */
/*   --text-ke-size-38-mobile:  36px;               36px - 스케일 외  */

  /* ─ 본문 안의 시맨틱 컴포넌트 (.post-*) 토큰 ─
   * ※ test-post.html 등 본문에 직접 마크업되는 시맨틱 영역 전용
   * ※ .article-lead (글 카드 영역의 리드) 와는 다른 클래스 — 본문 도입 문단용
   * ※ 본문 글씨가 기준표 적용으로 17px (PC) / 16px (모바일) 로 통일된 이후에도,
   *   리드 문단은 weight 500 으로 시각적 강조 차별화 유지 (.post-lead 전용 토큰) */

  /* .post-lead — 본문 도입부 리드 문단
   * ※ 본문(--text-article-body-pc, 17px)와 동일 크기 — weight 500 으로 시각적 강조 차별화
   * ※ 도입부의 후킹·요약 역할 시각적 강조 */
/*   --text-post-lead-pc:           var(--text-xl);           17px - 본문과 동일 (차별화는 weight 500)  */
/*   --text-post-lead-mobile:       var(--text-lg);           16px - 본문 모바일과 동일 (차별화는 weight 500)  */
/*   --weight-post-lead:            var(--weight-medium);     500 - 본문 400 대비 강조  */
/*   --color-post-lead:             var(--color-text);        진하게 - 본문 body 색상보다 강조  */
/*   --leading-post-lead:           var(--leading-relaxed);   1.75 - 가독성 우선  */
/*   --space-post-lead-bottom:      var(--space-6);           24px - 리드 → 다음 영역(이미지·요약 등) 시각 분리  */

  /* article-meta = 본문 페이지의 날짜/읽기 시간/메타 텍스트 — 기준 정리 §6
   * PC 14px / 모바일 13px / 굵기 700 */
/*   --text-article-meta-pc:        var(--text-base);         14px - 기준 §6 (이전 13 → 14)  */
/*   --text-article-meta-mobile:    var(--text-sm);           13px  */
/*   --weight-article-meta:         var(--weight-bold);       700 - 기준 §6 (이전 500 → 700)  */

  /* 본문 view 내부의 small / cite / 캡션 */
/*   --text-article-small-pc:       var(--text-sm);           13px  */
/*   --text-article-small-mobile:   var(--text-sm);           13px  */

  /* 본문 view 내부의 인용문 / 코드 / 표 */
/*   --text-article-blockquote-pc:  var(--text-md);           15px  */
/*   --text-article-blockquote-mobile: var(--text-md);        15px  */
/*   --text-article-code-pc:        var(--text-base);         14px - pre 블록  */
/*   --text-article-code-mobile:    var(--text-base);         14px  */
  /* table 은 --text-table (15.5px) 추가.txt 정확값 사용 */

  /* article-foot-title = 본문 끝 "함께 보면 좋은 글" 같은 섹션 제목 */
/*   --text-article-foot-title-pc:  var(--text-2xl);          18px  */

  /* ─── 추가.txt 본문 view 색 시맨틱 토큰 (Source of Truth)
   *
   *   추가.txt "색상 역할 정리" 표 직역:
   *   - #222222 → 본문 제목 / 본문 글
   *   - #6B7280 → 설명 / 날짜 / 메타
   *   - #2F6F73 → 링크 / 제목 포인트
   * ─────────────────────────────────────────────────────────────── */
/*   --color-article-title:       var(--color-text);           #222 - 추가.txt 본문 제목  */
/*   --color-article-body:        var(--color-text);           #222 - 추가.txt 본문 글  */
/*   --color-article-meta:        var(--color-muted);          #6B7280 - 추가.txt 메타  */
/*   --color-article-link:        var(--color-primary);        #2F6F73 - 추가.txt 링크  */
/*   --color-article-link-hover:  var(--color-primary-dark);   호버 보정  */
/*   --color-article-mark-bg:     var(--color-accent-soft); */
/*   --color-article-mark-text:   var(--color-text);           #222 - 본문 글  */
/*   --color-article-bq-border:   var(--color-primary);        인용문 강조선  */
/*   --color-article-bq-bg:       var(--color-secondary-soft); */

  /* 본문 굵기 시맨틱 (추가.txt: 본문 제목 굵게 / 본문 글 일반) */
/*   --weight-article-title:      var(--weight-black);         900  */
/*   --weight-article-h2:         var(--weight-black);         900  */
/*   --weight-article-h3:         var(--weight-extrabold);     800  */
/*   --weight-article-h4:         var(--weight-bold);          700  */
/*   --weight-article-h5:         var(--weight-bold);          700  */
/*   --weight-article-h6:         var(--weight-bold);          700  */
/*   --weight-article-body:       var(--weight-normal);        400  */
/*   --weight-article-strong:     var(--weight-extrabold);     800 - 본문 안 강조  */
/*   --weight-article-lead:       var(--weight-medium);        500 - 리드문은 살짝 굵게  */

  /* 폰트 굵기 */
/*   --weight-normal:    400; */
/*   --weight-medium:    500; */
/*   --weight-bold:      700; */
/*   --weight-extrabold: 800; */
/*   --weight-black:     900; */

  /* 줄 높이 */
/*   --leading-display: 1.22;    기준 정리 §4: H1 줄간격 1.22 (--leading-tight 1.25 보다 한 단계 더 타이트)  */
/*   --leading-tight:   1.25; */
/*   --leading-h2:      1.35;    기준 정리 §18: 본문 H2 줄간격 1.35 (스케일 외 정확값)  */
/*   --leading-h3:      1.38;    기준 정리 §19: 본문 H3 줄간격 1.38 (스케일 외 정확값)  */
/*   --leading-snug:    1.4; */
/*   --leading-form:    1.5;      추가.txt §2 Form/Input - line-height 1.5  */
/*   --leading-pros:    1.55;    기준 정리 §28: 상품 미니 박스 줄간격 1.55  */
/*   --leading-normal:  1.6; */
/*   --leading-relaxed: 1.7;    기준표 §3: 1.75 → 1.7  */
/*   --leading-product-desc: 1.68;   기준 정리 §27: 상품 설명 줄간격 1.68  */
/*   --leading-list:    1.76;    기준 정리 §31: 장단점 리스트 줄간격 1.76  */
/*   --leading-loose:   1.78;    기준 정리 §5·§13·§20: 리드문 / 요약 리스트 / 본문 문단 1.78  */

  /* ─── 시맨틱 줄 높이 토큰 ─
   *  전체 본문 줄간격 (사용자 기준표 §3): PC 1.7 / 모바일 1.75 (범위 1.72~1.78 중간)
   *  본문 설명 줄간격: PC 1.78 / 모바일 1.80
   *
   *  ▣ --leading-body vs --leading-relaxed 의 시맨틱 구분 (값이 같아도 별개 토큰 유지)
   *     - --leading-body     : body 전역 line-height (글로벌 본문)
   *     - --leading-relaxed  : post-lead / blockquote 등 "여유 있는 본문 슬롯" 전용
   *     현재 PC 1.7 로 값이 우연히 일치하지만, 시맨틱이 다르므로 통합하지 않음.
   *     향후 한쪽만 조정해야 할 때 (예: post-lead 만 1.75 로 늘이기) 분리 보존이 안전.
   *  ─────────────────────────────────────── */
/*   --leading-body:         1.7;      기준표 §3 PC: 1.74 → 1.7  */
/*   --leading-body-mobile:  1.75;     기준표 §3 모바일 범위 1.72~1.78 중간  */
/*   --leading-hero-desc:    1.78; */
/*   --leading-hero-desc-mobile: 1.80; */

  /* ─── 레이아웃 (중간 플러스 추천값 적용) ───
   *  전체 레이아웃 폭        : 1200px
   *  전체 페이지 여백 (PC)    : 44px 26px 82px
   *  전체 페이지 여백 (모바일) : 30px 18px 64px
   * ───────────────────────────────────────────────── */
/*   --container-max:    1170px;   기준 정리 §1: 1170px  */
/*   --sidebar-width:    300px;    기준 정리 §1: 사이드바 폭 300px (이전 340 → 300, -40px 축소)  */
/*   --sidebar-gap:      27px;     기준 정리 §1: 본문 ↔ 사이드바 간격 27px (이전 32 → 27)  */

  /* 페이지 패딩 - 기준 정리 §1 적용
   *   --page-pad-top: 40px / --page-pad-x: 24px / --page-pad-bottom: 76px
   *   ※ 이전 사용자 결정으로 bottom 36px 유지했으나, "기준 정리.txt 그대로" 지시에 따라 76px 갱신
   *   ※ 푸터 위 공간이 늘어남 — 시안과 일치 */
/*   --page-pad-top:     40px;     기준 정리 §1  */
/*   --page-pad-x:       24px;     기준 정리 §1  */
/*   --page-pad-bottom:  76px;     기준 정리 §1: 36 → 76 (이전 사용자 보류 해제)  */
/*   --page-pad-mobile-top:    30px; */
/*   --page-pad-mobile-x:      18px; */
/*   --page-pad-mobile-bottom: 64px; */

  /* 섹션 간격 (기준표 §10 적용: PC 57 → 52 / 모바일 기존 유지) */
/*   --section-gap:        52px;   기준표 §10: 57 → 52  */
/*   --section-gap-mobile: 42px;    기준표 §8 모바일: 44 → 42  */

  /* ─── 추가.txt - 간격(Spacing) 시맨틱 토큰 ─────────────────────────────
   *  세 개 표 (PC 메인화면 / PC 본문글 / 모바일) 의 모든 항목을 변수화
   *  4px 그리드(--space-N)에 안 맞는 값은 직접 px 사용 (추가.txt 명시값 유지)
   *  ─────────────────────────────────────────────────────────────────── */

  /* ─ PC 메인화면 간격 (중간 플러스 추천값) ─ */
/*   --space-header-margin:        34px;    메인화면 상세값 §2: 헤더 아래 간격 34px  */
/*   --space-header-margin-mobile: 28px;    메인화면 상세값 모바일 §2: 28px (이전 16 → 28)  */
/*   --space-hero-pad:             41px;    기준표 §13: 45 → 41 (메인 카드 안쪽 여백)  */
  /* 메인 카드 간격 (hero-main ↔ hero-side) 은 --hero-card-gap-pc 로 이동 (컴포넌트 토큰 섹션) */
/*   --space-section-title-bottom: 24px;    섹션 제목 아래 (22~28 중간) = --space-6  */
/*   --space-card-grid-gap:        30px;    메인 카드 간격 (post-card grid)  */
/*   --space-recent-card-pad:      28px;    최신글 카드 내부 여백 (24~28 최대) = --space-7  */
/*   --space-footer-margin:        72px;    푸터 위 간격 (64~80 중간)  */
/*   --footer-grid-col-gap-pc:     var(--space-12);    푸터 그리드 가로 간격(컬럼 사이) - 48px  */
/*   --footer-grid-row-gap-pc:     var(--space-4);     푸터 그리드 세로 간격(컬럼 행 ↔ 하단 카피라이트 행) - 16px (gap 단축속성에서 분리, 시각적 공백 축소)  */

  /* ─ PC 본문글 간격 ─ */
/*   --space-article-pad:              41px;   기준 정리 §2: 본문 카드 내부 여백 41px (이전 45 → 41)  */
/*   --space-article-title-bottom:     17px;   기준 정리 §4: 제목 아래 17px (이전 18 → 17)  */
/*   --space-article-lead-bottom:      24px;   기준 정리 §5: 리드문 아래 24px (이전 26 → 24)  */
/*   --space-article-meta-bottom:      28px;   기준 정리 §6: 구분선 ↔ 본문 28px (이전 30 → 28)  */
/*   --space-article-meta-pad-bottom:  26px;   기준 정리 §6: 메타 텍스트 ↔ 구분선 26px (이전 20 → 26)  */
/*   --space-article-meta-gap:         var(--space-3);    12px - 기준 정리 §6: 메타 항목 간격 (이전 16 → 12)  */
  /* article-meta 하단 실선 (제목/리드/메타 아래 구분선)
   * ※ 시안 매칭 — 본문 카드 헤더 영역과 본문 영역의 시각적 분리
   * ※ 비활성화 필요 시 0 으로 변경 */
/*   --article-meta-border-bottom:     var(--border-soft); */
/*   --space-article-thumb-bottom:     28px;   기준 정리 §7: 대표 이미지 아래 28px (이전 30 → 28)  */
/*   --space-article-affiliate-bottom: 30px;   제휴 안내 아래  */
/*   --space-article-summary-bottom:   34px;   기준 정리 §11: 핵심 요약 박스 아래 34px (이전 36 → 34)  */
  /* deprecated — 본문 바로가기 박스 아래 간격은 컴포넌트 토큰 --post-toc-bottom-pc / -mobile 로 이동
   * 외부 호환을 위해 토큰 자체는 유지하고 값만 새 시스템과 동기화 (기준 정리 §1: 34px) */
/*   --space-article-h2-top:           42px;   기준 정리 §18: H2 위 간격 42px (이전 44 → 42)  */
/*   --space-article-h2-bottom:        15px;   기준 정리 §18: H2 아래 간격 15px (이전 16 → 15)  */
/*   --space-article-h3-top:           30px;   기준 정리 §19: H3 위 간격 30px (신규)  */
/*   --space-article-h3-bottom:        11px;   기준 정리 §19: H3 아래 간격 11px (신규)  */
/*   --space-article-paragraph-bottom: 19px;   기준 정리 §20: 문단 아래 간격 19px (이전 20 → 19)  */
/*   --space-article-ad-y:             32px;   기준 정리 §21: 광고 박스 상하 32px (이전 34 → 32)  */
/*   --space-article-product-y:        26px;   기준 정리 §24: 상품 카드 상하 26px (이전 28 → 26)  */
/*   --space-article-related-top:      46px;   기준 정리 §36: 관련글 위 46px (유지)  */

  /* ─ 모바일 간격 ─ */
/*   --space-card-pad-mobile-real: 28px;    카드 내부 여백 모바일 (24~30 중간) = --space-7  */
/*   --space-cta-h-mobile:         50px;    CTA 버튼 높이 (48~52 중간)  */

  /* ─ 표(Table) 시스템 ─ 기준 정리 §22·§23 적용 (이전 추가.txt 값 갱신)
   * ※ 기준 §22: font 15px, border-radius 22px, 위아래 22 0 32
   * ※ 기준 §23: 셀 padding 16 17, 행 구분선 #E8E2DA, 헤더 배경 #DDE8E3, 헤더 글씨 #2F6F73 */
/*   --text-table:           var(--text-md);    15px - 기준 §22 (이전 15.5 → 15)  */
/*   --table-radius:         var(--radius-xl);  22px - 기준 §22 (이전 --radius-2xl 24 → 22)  */
/*   --space-table-pad-y:    16px;              기준 §23: 셀 위아래 16px (이전 17 → 16)  */
/*   --space-table-pad-x:    17px;              기준 §23: 셀 좌우 17px (이전 18 → 17)  */
/*   --space-table-top:      22px;              기준 §22: 위 간격 22px  */
/*   --space-table-bottom:   32px;              기준 §22: 아래 간격 32px  */

  /* ─ Badge / Label 시스템 (추가.txt "8. Badge / Label 시스템") ─ */
/*   --badge-min-h:          32px;      추가.txt: min-height 32px  */
/*   --badge-pad-y:          6px;       추가.txt: padding 위아래 6px  */
/*   --badge-pad-x:          12px;      추가.txt: padding 좌우 12px = --space-3  */
/*   --badge-text:           var(--text-sm);     13px  */
/*   --badge-weight:         var(--weight-black);  900  */
/*   --badge-radius:         var(--radius-pill);  999px  */

  /* ─ 본문 카테고리 라벨 (.category-label / .article-cat) — 기준 정리 §3 ─
   * ※ 기준 §3 클래스 이름은 .category-label — 본문 박스 안에 작성자가 직접 마크업 가능
   * ※ 동시에 기존 .article-cat (스킨이 출력하는 메타 라벨) 도 동일 톤을 공유
   * ※ Badge 공통값보다 한 단계 큰 padding (6→7 / 12→14), 아래 간격 16→18 */
/*   --category-label-pad-y:       7px;              기준 §3  */
/*   --category-label-pad-x:       14px;             기준 §3  */
/*   --category-label-bottom:      18px;             기준 §3 (이전 16 → 18)  */

  /* ─── 카드 ─── */
/*   --card-bg:      var(--color-card); */
/*   --card-radius:  var(--radius-3xl); */
/*   --card-pad:     var(--space-8); */
/*   --card-pad-mobile: var(--space-6); */
/*   --card-shadow:  var(--shadow-card); */

  /* ─── 본문 메인 카드 (.article-card) — 기준 정리 §2 전용 ───
   * ※ --card-radius / --shadow-md 와 분리: 다른 카드(hero/category/post)는 영향 받지 않음
   * ※ radius 30px, 그림자 0 12px 30px rgba(47,111,115,0.07), padding 41px (--space-article-pad) */
/*   --article-card-radius:  30px;                                        기준 §2: 30px (스케일 외)  */
/*   --article-card-shadow:  0 12px 30px rgba(47, 111, 115, 0.07);        기준 §2 그림자  */

  /* ─── 헤더 ─── */
  /* 추가.txt: PC 28px 34px / 모바일 24px 22px */
/*   --header-radius:    var(--radius-3xl); */
/*   --header-pad-y:     26px;    기준표 §6: 28 → 26  */
/*   --header-pad-x:     32px;    기준표 §6: 34 → 32  */
/*   --header-pad-mobile-y: 24px;    = --space-6  */
/*   --header-pad-mobile-x: 22px;    4px 그리드 비-일치, 추가.txt 명시값  */

  /* ─── 입력창 (추가.txt §2 Form/Input 시스템) ─── */
  /*
   *   PC input 높이      | 48px ~ 52px
   *   모바일 input 높이   | 50px ~ 54px
   *   input radius       | 18px (= --radius-lg)
   *   textarea radius    | 22px (= --radius-xl)
   *   input padding      | 0 16px
   *   textarea padding   | 16px 18px
   *   font-size 베이스   | 15px (= --text-md)
   *   line-height        | 1.5
   *   placeholder 색상   | #9CA3AF (= --color-muted-light)
   *   focus border       | #2F6F73 (= --color-primary)
   *   focus shadow       | 0 0 0 4px rgba(47, 111, 115, 0.12)
   */
/*   --input-h:           48px;             PC 48~52 최소값  */
/*   --input-h-mobile:    52px;             모바일 50~54 중간값  */
/*   --input-radius:      var(--radius-lg);    18px  */
/*   --input-pad:         0 var(--space-4);    0 16px  */
/*   --input-bg:          var(--color-card); */
/*   --input-border:      var(--border-soft); */
/*   --input-line:        var(--leading-form);   1.5 - 추가.txt §2 정확값  */

  /* textarea 전용 (추가.txt §2: input 과 다른 radius/padding) */
/*   --textarea-radius:   var(--radius-xl);   22px  */
/*   --textarea-pad:      var(--space-4) 18px;   16px 18px  */
/*   --textarea-min-h:    120px; */

  /* ─── 버튼 ─── */
/*   --btn-h:         48px; */
/*   --btn-h-sm:      40px; */
/*   --btn-h-lg:      54px; */
/*   --btn-radius:    var(--radius-lg); */
/*   --btn-pad-x:     var(--space-6); */

  /* ─── 터치 타겟 (a11y 표준) ─── [중요].txt #9
   * WCAG 2.1 AA 권장: 모바일 터치 가능 요소는 최소 44×44px
   * Material Design 권장: 48×48px (편안한 터치)
   * 적용 대상: 버튼·링크·아이콘·태그 등 모든 클릭 가능 요소의 모바일 사이즈
   * 권장 패턴: 시각 요소(아이콘 18px 등)는 그대로 두고,
   *           min-width/min-height 로 클릭 영역만 44px 로 확장 */
/*   --touch-target-min:     44px;    WCAG 2.1 AA 최소  */
/*   --touch-target-comfort: 48px;    Material Design 권장  */

  /* ─── 모바일 드로어 ─── 메인화면 상세값 모바일 §5
   *  폭 82vw / 최대 340px / 높이 100vh / 그림자 -18px 0 48px ..0.14 / 왼쪽 테두리 1px solid #E8E2DA
   *  padding 28 24 34 */
/*   --drawer-w:        340px;                  메인화면 상세값 모바일 §5: 최대 340px  */
/*   --drawer-w-vw:     82vw;                   메인화면 상세값 모바일 §5: 82vw  */
/*   --drawer-radius:   var(--radius-3xl);      28px - drawer 자체 모서리  */
/*   --drawer-pad:      28px 24px 34px;         메인화면 상세값 모바일 §5: 28 24 34 (이전 26 24)  */
  /* drawer-pad-top: 상단 빈 공간 override (닫기 버튼 영역 확보용)
   * ※ 새 padding 의 top 값(28px) 과 일치하도록 설정 */
/*   --drawer-pad-top:  28px; */

  /* drawer drag handle (시안 모바일_햄버거_메뉴_01 상단 인디케이터) */

  /* ─ 드로어 프로필 박스 ─ 메인화면 상세값 모바일 §6 (신규)
   *  padding 20 / radius 22 / 배경 #DDE8E3 / 아래 26 */
/*   --drawer-profile-pad:           var(--space-5);           20px - 메인화면 상세값 모바일 §6  */
/*   --drawer-profile-radius:        var(--radius-xl);         22px - 메인화면 상세값 모바일 §6  */
/*   --drawer-profile-bg:            var(--color-secondary);   #DDE8E3 - 메인화면 상세값 모바일 §6  */
/*   --drawer-profile-margin-bottom: 26px;                     메인화면 상세값 모바일 §6 (스케일 외)  */

  /* ─ 드로어 메뉴 항목 ─ 메인화면 상세값 모바일 §7
   *  글씨 17 / weight 800 / 높이 54 / radius 16 / padding 0 16 */
/*   --drawer-menu-h:        54px;             메인화면 상세값 모바일 §7 (이전 50 → 54)  */

  /* ─ 모바일 사이드바 chevron 화살표 (›) ─ 컴포넌트 토큰
   * ※ 적용 대상: .mobile-menu-cat-link 와 .mobile-foot-link 의 [aria-hidden="true"] span
   * ※ 사용자 요청: 카테고리/푸터 화살표 진하고 굵게 + 살짝 크게 (이전 muted-light · medium · 부모 글씨)
   * ※ 카테고리와 푸터를 동일 토큰으로 일관 처리 */
/*   --mobile-chev-color:        var(--color-text);               본문색 - 기존 muted-light 대비 진함  */
/*   --mobile-chev-weight:       var(--weight-extrabold);         800 - 기존 medium(500) 대비 굵음  */
/*   --mobile-chev-font-size:    var(--text-xl);                  17px - 부모 15px 대비 살짝 큼  */
/*   --mobile-chev-line-height:  1;                               glyph 자체 높이만  */

  /* ─ 모바일 카테고리 항목 bullet (·) ─ 컴포넌트 토큰
   * ※ 적용 대상: .mobile-menu-cat-link::before (분류 전체보기는 미적용)
   * ※ 사용자 요청: '쿠팡 추천템·생활비 절약·애드센스·제휴마케팅' 앞에 · 표시 */
/*   --mobile-cat-bullet-content:      '·'; */
/*   --mobile-cat-bullet-color:        var(--color-text); */
/*   --mobile-cat-bullet-weight:       var(--weight-extrabold);   항목 글씨와 동일 800  */
/*   --mobile-cat-bullet-font-size:    var(--text-xl);            17px - chevron 과 동일 톤  */
/*   --mobile-cat-bullet-line-height:  1; */

  /* ─ 모바일 카테고리 그룹 내부 여백 ─
   * ※ 사용자 요청: '분류 전체보기' ↔ '쿠팡 추천템' 사이 시각적 공백 (한 줄 띄움)
   * ※ allcat 자체는 그룹 헤더, cats 가 그 아래 시작점 — cats 에 margin-top 부여 */
/*   --mobile-menu-cats-margin-top:    var(--space-3);            12px - 한 줄 정도 띄움  */

  /* ─ 모바일 드로어 가로 정렬 시스템 ─ 컴포넌트 토큰
   * ※ 사용자 요청: 좌측 정렬을 두 단계로 통일
   *   ① Section header (Group A): 설명, 분류 전체보기, 최근 글 | 인기 글
   *      → 드로어 좌측 padding(24px) 안쪽으로 12px 추가 들여쓰기 → text @ drawer-x = 36
   *   ② Leaf item (Group B): · 카테고리 텍스트, 최근글 제목·날짜, 블로그 소개/문의하기
   *      → 24px 추가 들여쓰기 → text @ drawer-x = 48
   *   ③ Bullet (·): leaf 텍스트보다 outdent 되어 section header 와 같은 x = 36 에 hang
   *      → position absolute 로 padding-left 안쪽에 표시 (text flow 영향 X)
   * ※ 적용:
   *   .mobile-menu-desc          : padding-left = section
   *   .mobile-menu-allcat        : padding-left = section (이미 그렇게 되어 있음)
   *   .mobile-menu-cat-link      : padding-left = item    (텍스트 정렬용)
   *   .mobile-menu-cat-link::before : position:absolute, left = section (bullet 위치)
   *   .mobile-recent-tabs        : padding-left = section
   *   .recent-link               : padding-left = item
   *   .mobile-foot-link          : padding-left = item */
/*   --mobile-drawer-section-pad-x:    var(--space-3);            12px - section header 들여쓰기  */
/*   --mobile-drawer-item-pad-x:       var(--space-6);            24px - leaf item 들여쓰기  */

  /* ─ 모바일 드로어 recent글 영역 하단 외부 margin ─
   * ※ 사용자 요청: recent글 마지막 항목과 '블로그 소개' 사이 공백이 너무 큼 (실측 73px)
   * ※ 원인: .sidebar-card(20px) + .sidebar-recent-grid(20px) 가 중복 누적 (40px) +
   *         .mobile-menu-foot 내부 margin/border/padding 33px = 73px
   * ※ 해결: 외부 margin 두 개를 0 으로 제거 → foot 의 내부 분리(33px)만 남김
   *         결과: 다른 섹션 간격(cats↔search 36px, cats↔tabs 20px)과 일관 */
/*   --mobile-drawer-recent-end-margin: 0; */

  /* ─ 모바일 드로어 recent글 hairline ─ 컴포넌트 토큰
   * ※ 사용자 요청: '얇은 줄의 길이를 맞춰주세요' — 텍스트 영역과 동일한 폭으로 hairline 단축
   * ※ 적용 대상: .recent-link::after (드로어 안 .box-recent--recent / .box-recent--popular 공통)
   * ※ 기본 border-bottom(전체 폭) 은 제거하고 ::after 로 좌우 inset 적용한 단축 hairline 표현 */
/*   --mobile-drawer-recent-hairline-inset:  var(--mobile-drawer-item-pad-x);    24px - 좌우 inset = 텍스트 padding 과 동일  */
/*   --mobile-drawer-recent-hairline-height: 1px; */
/*   --mobile-drawer-recent-hairline-color:  var(--color-line);                  #E8E2DA - 기존 --border-soft 색상  */

  /* ─ 모바일 드로어 한글 텍스트 wrap 모드 ─ 컴포넌트 토큰
   * ※ 사용자 요청: 설명문 '그리고 애드' 에서 '애드'가 line 1 끝에 걸리고 '센스'가 line 2 로 분리됨
   *               → '애드센스' 가 한 단어로 묶여서 line 2 로 통째로 내려가도록
   * ※ 'keep-all': CJK 단어 단위 wrap (한글 단어 중간 글자 단위 분리 방지)
   *               한글 문장 wrap 의 표준 해결법, 폰트 변동에도 견고
   * ※ 적용 대상: .mobile-menu-desc (확장 가능) */
/*   --mobile-drawer-text-word-break: keep-all; */

  /* drawer box-shadow (컴포넌트 토큰)
   * - 기본값 none: 드로어가 translateX(-100%) 로 화면 밖에 숨겨져 있을 때
   *   --shadow-drawer 의 blur 48px 가 viewport 좌측으로 새어나오는 현상
   *   (모바일 메인/본문/카테고리 좌측 녹색 그라데이션) 방지.
   * - .menu-open 상태에서만 --shadow-drawer 로 스왑 → 드로어가 보일 때만 그림자. */
/*   --drawer-shadow:      none; */

  /* ─── 컴포넌트 크기 ─── */
  /* 아이콘 / 작은 컨트롤
   *  ▣ --icon-2xl (52px) vs --category-icon-size-pc (52px) 시맨틱 구분
   *     - --icon-2xl              : 범용 아이콘 사이즈 스케일의 최상단 (인기글 썸네일 alias 로 사용)
   *     - --category-icon-size-pc : 카테고리 카드 아이콘 박스 전용 컴포넌트 토큰
   *     값이 우연히 같지만 슬롯이 다르므로 통합하지 않음. 한쪽만 변경해야 할 경우 분리 보존이 안전. */
/*   --icon-xl:        44px; */

  /* 카테고리 / 메타 pill 높이 */
/*   --pill-h-sm:      32px; */
/*   --pill-h-lg:      36px; */
/*   --pill-h-xl:      38px; */
/*   --pill-h-3xl:     46px; */

  /* 썸네일 / 아바타 */
/*   --thumb-md:       60px; */
/*   --avatar-md:      80px; */

  /* 페이징 컨트롤 */
/*   --paging-h:       40px; */
/*   --paging-h-mobile:    var(--touch-target-min);    44px - WCAG 2.1 AA [중요].txt #9 (이전 36px)  */
/*   --paging-min-w:   40px; */
/*   --paging-min-w-mobile:var(--touch-target-min);    44px - WCAG 2.1 AA [중요].txt #9 (이전 36px)  */
  /* 페이징 영역의 위 간격 — PC/모바일 분기 */
/*   --paging-margin-top:        var(--space-9);    PC 36px  */
/*   --paging-margin-top-mobile: var(--space-7);    모바일 28px  */

  /* 헤더 검색창 */
/*   --search-w-pc:    280px; */
/*   --search-w-tablet:200px; */
/*   --search-btn-size:36px; */
/*   --search-btn-size-mobile: var(--touch-target-min);    WCAG 2.1 AA — [중요].txt #9  */

  /* 모바일 토글 / 닫기 — 메인화면 상세값 모바일 §4 */
/*   --mobile-toggle-size:   46px;                             메인화면 상세값 모바일 §4: 46×46  */
/*   --mobile-toggle-radius: var(--radius-md);                 메인화면 상세값 모바일 §4: 14px  */
/*   --mobile-toggle-bg:     var(--color-card);                메인화면 상세값 모바일 §4: #FFFFFF  */
/*   --mobile-toggle-border: var(--border-soft);               메인화면 상세값 모바일 §4: 1px solid #E8E2DA  */
/*   --mobile-toggle-shadow: 0 4px 12px rgba(47, 111, 115, 0.05);   메인화면 상세값 모바일 §4  */
/*   --mobile-close-size:  var(--touch-target-min);    WCAG 2.1 AA — [중요].txt #9 (이전 40px)  */

  /* 컨테이너 max-width */
/*   --hero-desc-max:      520px; */
/*   --protected-form-max: 360px; */
/*   --cta-text-flex-min:  360px; */
/*   --logo-img-max-h:     36px; */

  /* 포커스 링 (a11y) */
/*   --focus-ring-w:       3px; */
/*   --focus-ring-offset:  3px; */
/*   --focus-ring-spread:  4px; */

  /* 헤더 메뉴 active 표시선 */
/*   --tab-line-w:         2px; */

  /* 탭 버튼 높이 */
/*   --tab-h:              40px; */

  /* 모바일 메뉴 항목 높이 — 메인화면 상세값 모바일 §7: 54px (--drawer-menu-h 와 동기) */
/*   --mobile-link-h:      var(--drawer-menu-h);    54px - 메인화면 상세값 모바일 §7 (이전 50 → 54)  */

  /* 사이드바 스크롤바 */

  /* Motion - 호버 시 미세 이동 */
/*   --motion-shift-sm:    2px; */
/*   --motion-shift-md:    3px; */

  /* SNS 아이콘 (사이드바 프로필) */
/*   --sns-icon-size:      32px; */
/*   --sns-icon-size-mobile: var(--touch-target-min);    WCAG 2.1 AA — [중요].txt #9  */

  /* 작은 hairline */
/*   --hairline:           1px; */

  /* ─── 본문 view 전용 (Stage 3) ─── */
/*   --quote-border-w:     4px;      blockquote 왼쪽 강조선 두께  */
/*   --code-pad-y:         2px;      inline code 세로 패딩  */
/*   --code-pad-x:         6px;      inline code 가로 패딩  */
/*   --underline-offset:   3px;      본문 링크 underline 간격  */
/*   --font-mono:          ui-monospace, SFMono-Regular, "SF Mono", Menlo, Monaco, "Courier New", monospace; */

  /* ─── 본문 박스 / 댓글 (Stage 4) ─── */
/*   --check-mark-top:     8px;      체크 리스트 ::before top  */
/*   --check-mark-size:    16px;     체크 마커 원 지름  */
/*   --check-mark-icon:    10px;     체크 마커 안쪽 아이콘 크기  */
/*   --product-thumb-w:    160px;    상품 박스 썸네일 폭  */
  /* --textarea-min-h: 120px → 입력창 토큰 영역으로 이동됨 */
/*   --reply-avatar-size:  44px;     답글 들여쓰기 폭  */

  /* ─── Stage 5 - 시안 추가 사이드바 카드 ─── */
  /* 글 목차 (TOC) */
/*   --toc-item-h:         44px;     TOC 1개 항목 높이 (시안 pill 톤)  */
/*   --toc-item-pad-x:     20px;     TOC 항목 좌우 패딩  */
/*   --toc-num-w:          16px;     "1." 번호 영역 폭  */

  /* 글 목차 - H3 서브 항목 */
/*   --toc-sub-indent:     28px;     H3 들여쓰기 (H2 알약 안쪽 텍스트 정렬 기준)  */
/*   --toc-sub-pad-y:      6px;      H3 항목 위아래 패딩  */
/*   --toc-sub-pad-l:      18px;     H3 텍스트 좌측 여백 (마커 자리)  */
/*   --toc-sub-marker-w:   8px;      H3 점 마커 가로 길이  */
/*   --toc-sub-marker-h:   2px;      H3 점 마커 두께  */
/*   --toc-sub-marker-l:   4px;      H3 점 마커 좌측 위치  */

  /* 글 목차 - 빈 글 안내 문구 */
/*   --toc-empty-pad:      4px; */

  /* 추천 읽기 순서 (다크 틸 카드) */
/*   --reading-order-bg:        var(--color-primary); */
/*   --reading-order-text:      var(--color-card); */
/*   --reading-order-text-soft: rgba(255, 255, 255, 0.86); */

  /* 구글 친화 체크 */
/*   --check-row-pad-y:    6px;      체크 항목 위아래 간격  */
/*   --check-icon-w:       18px;     ✓ 아이콘 폭  */
/*   --check-icon-mt:      4px;      ✓ 아이콘 baseline 보정  */


  /* ════════════════════════════════════════════════════════════════════
   * 컴포넌트 토큰 — 본문 페이지 사이드바 카드 3종
   *   .box-toc / .box-reading-order / .box-recent--popular
   *
   *   ※ 컴포넌트별 외형 슬롯. 이 레이어 한 곳만 만져서 톤/색/형태 변경.
   *     배경 색은 시안 01·02·03·08 톤 기준으로 시맨틱 토큰에 한 번 더 매핑.
   * ════════════════════════════════════════════════════════════════════ */

  /* ─ .box-toc - 글 목차 (시안 01·02 알약 형태) ─
   * 시안: 옅은 세이지 알약 (--color-secondary-soft) + 굵은 검정 글씨 + 둥근 pill
   * (현재 진한 세이지 → 시안 일치로 옅은 톤으로 보정) */
/*   --toc-pill-bg:           var(--color-secondary-soft); */
/*   --toc-pill-bg-hover:     var(--color-secondary); */
/*   --toc-pill-text:         var(--color-text); */
/*   --toc-pill-text-hover:   var(--color-primary); */
/*   --toc-pill-num-color:    var(--color-text); */
/*   --toc-pill-border:       var(--border-teal); */
/*   --toc-pill-radius:       var(--radius-pill); */
/*   --toc-pill-h:            var(--toc-item-h);            44px  */
/*   --toc-pill-pad-x:        var(--toc-item-pad-x);        20px  */
/*   --toc-pill-gap:          var(--space-3);               알약 사이 간격 12px  */
/*   --toc-pill-font-size:    var(--text-md);               15px  */
/*   --toc-pill-font-weight:  var(--weight-extrabold);      800  */

  /* H3 sub-link (점 마커 들여쓰기) */
/*   --toc-sublink-color:        var(--color-muted); */
/*   --toc-sublink-color-hover:  var(--color-primary); */
/*   --toc-sublink-bg-hover:     var(--color-secondary-soft); */
/*   --toc-sublink-marker-color: var(--color-primary); */
/*   --toc-sublink-font-size:    var(--text-base);          14px  */
/*   --toc-sublink-font-weight:  var(--weight-bold);        700  */

  /* ─ .box-reading-order - 추천 읽기 순서 (시안 02·08 다크 틸 카드) ─
   * 기존 --reading-order-* 토큰을 그대로 사용. 폰트만 명시. */
/*   --reading-order-border:        transparent; */
/*   --reading-order-title-color:   var(--reading-order-text); */
/*   --reading-order-desc-color:    var(--reading-order-text-soft); */
/*   --reading-order-desc-size:     var(--text-md);         15px  */
/*   --reading-order-desc-weight:   var(--weight-medium);   500  */

  /* ─ .box-recent--popular - 인기글 — 메인화면 상세값 §25·§26·§27·§28·§29 / 모바일 §27~§32 ─
   *  PC: 박스 padding 31, radius 30, 그림자 0 10px 28px 0.06
   *      항목 padding 18 19, gap 16, 썸네일 83 / radius 18, 제목 17·1.52·800, 메타 14
   *  모바일: 박스 padding 28 30, radius 28, 그림자 0 10px 26px 0.06
   *          항목 padding 17 18, gap 14, 썸네일 74 / radius 16
   *  ※ thumb 크기·radius·gap 은 위 컴포넌트 토큰(--recent-thumb-* / --popular-row-gap-*) 사용 */
/*   --popular-thumb-size:           var(--recent-thumb-size-pc);     83px - 메인화면 상세값 §27  */
/*   --popular-thumb-radius:         var(--recent-thumb-radius-pc);   18px - 메인화면 상세값 §27 (이전 50% → 18px)  */
/*   --popular-thumb-bg:             var(--color-accent-soft); */
/*   --popular-thumb-bg-image:       linear-gradient(135deg, var(--color-accent-soft) 0%, var(--color-secondary-soft) 100%); */
/*   --popular-num-display:          none;                  시안 일치: 숫자 안 보임. 'flex' 로 바꾸면 ::before 숫자 ON  */
/*   --popular-num-color:            var(--color-text); */
/*   --popular-num-bg:               var(--color-secondary-soft); */
/*   --popular-num-size:             var(--text-lg);        16px  */
/*   --popular-num-weight:           var(--weight-black);   900  */
  /* ※ --popular-row-pad-y / --popular-row-pad-x 의 실제 매핑은 아래 컴포넌트 토큰 섹션
   *    --popular-row-pad-y-pc / --popular-row-pad-x-pc / -mobile 와
   *    두 번째 :root 블록의 매핑 (PC) + 모바일 @media 재정의 (모바일) 로 처리 */
/*   --popular-row-gap:              var(--space-4);        16px - 메인화면 상세값 §26 (썸네일-본문 간격)  */
/*   --popular-row-border:           var(--border-soft);    항목 사이 hairline  */
/*   --popular-title-color:          var(--color-text);     #222  */
/*   --popular-title-size-pc:        var(--text-recent-title-pc);      17px - 메인화면 상세값 §28  */
/*   --popular-title-size-mobile:    var(--text-recent-title-mobile);  16px - 메인화면 상세값 모바일 §31  */
/*   --popular-title-weight:         var(--weight-extrabold);           800 - 메인화면 상세값 §28 / 모바일 §31  */
/*   --popular-title-line-pc:        var(--leading-recent-title-pc);      1.52 - 메인화면 상세값 §28  */
/*   --popular-title-line-mobile:    var(--leading-recent-title-mobile);  1.56 - 메인화면 상세값 모바일 §31  */
/*   --popular-date-color:           var(--color-muted);    #6B7280  */
/*   --popular-date-size-pc:         var(--text-date-pc);      14px - 메인화면 상세값 §29  */
/*   --popular-date-size-mobile:     var(--text-date-mobile);  13px - 메인화면 상세값 모바일 §32  */

  /* ─ 드로어 전용 최근글 글씨 (모바일 사이드바 드로어) ─
   * ※ 사용자 요청: 모바일 드로어 안의 .recent-title / .recent-date 글씨 축소
   * ※ 기존엔 .area-aside .box-recent 선택자(0,4,2)가 PC 사이즈 토큰을 강제 적용해 18px/15px 노출
   * ※ 드로어 한정으로 별도 토큰 정의 → 다른 위치(메인 인덱스 등) 영향 없음 */
/*   --drawer-recent-title-size:     var(--text-base);    14px - 컴팩트한 드로어 톤  */
/*   --drawer-recent-date-size:      var(--text-xs);      12px - 작은 메타  */


  /* ════════════════════════════════════════════════════════════════════
   * 컴포넌트 토큰 — 본문 view 내부 박스 (.box-*)
   *
   *  ⚠ 규칙: 모든 값은 위에서 정의된 시맨틱 토큰을 한 번 더 감싼다.
   *           컴포넌트별 미세 보정만 px 직값 허용 (시안 픽셀 일치 목적).
   *           이 레이어를 통해 box 별 외형을 한 곳에서 제어한다.
   * ════════════════════════════════════════════════════════════════════ */

  /* ─ box-affiliate (제휴 안내) ─ 기준 정리 §1 적용 (이전 기준표 §31·§32·§33 갱신)
   * 시안: 노티스 크림 배경 + 주황 왼쪽 라인 + 얇은 라인 테두리
   * 기준 §1: PC 살구색 라인 5px / radius 24px / padding 26 30 / 본문 15.5
   *          모바일 살구색 라인 4px / radius 22px / padding 16 18 / 본문 13.5
   * ※ rail-w 와 radius 는 PC/모바일 별도 토큰 정의 후
   *   --affiliate-rail-w / --affiliate-radius (base) 가 모바일 @media 에서 swap */
/*   --affiliate-rail-w-pc:     5px;                   기준 §1 PC: 5px  */
/*   --affiliate-rail-w-mobile: 4px;                   기준 §1 모바일: 4px  */
/*   --affiliate-rail-w:        var(--affiliate-rail-w-pc);   base (PC)  */
/*   --affiliate-rail-color:    var(--color-accent); */
/*   --affiliate-bg:            var(--color-notice-bg); */
/*   --affiliate-border:        var(--border-soft); */
/*   --affiliate-radius-pc:     var(--radius-2xl);     24px - 기준 §1 PC  */
/*   --affiliate-radius-mobile: var(--radius-xl);      22px - 기준 §1 모바일  */
/*   --affiliate-radius:        var(--affiliate-radius-pc);   base (PC)  */
  /* --affiliate-pad-y / -pad-x 는 두 번째 :root 블록에서 PC 값으로 일원 정의 */
  /* ※ --affiliate-icon-bg / --affiliate-icon-color 토큰 폐지
   *   (의사요소 ⓘ 제거됨 — 사용자 요청. 향후 아이콘 복원 시 var(--color-secondary) / var(--color-primary) 직접 사용) */

  /* ─ box-summary (핵심 요약) ─ 기준 정리 §11·§12·§13 적용
   *
   *  ▣ §11 박스: 배경 #DDE8E3 (secondary 메인 톤), border-radius 24px,
   *              내부 여백 27px, 아래 간격 34px (--space-article-summary-bottom),
   *              테두리 없음 (기준 명시 없음)
   *  ▣ §12 제목: 25px / #2F6F73 / 아래 13px / 자간 -0.045em
   *  ▣ §13 리스트: 16px / 줄간격 1.78 / 왼쪽 21px (체크마커 포함)
   * ─────────────────────────────────────────────────────────────── */
/*   --summary-bg:                var(--color-secondary);           #DDE8E3 - 기준 §11 (이전 secondary-soft #EEF5F1)  */
/*   --summary-border:            0;                                기준 §11: 테두리 없음 (이전 --border-teal 제거)  */
/*   --summary-radius:            var(--radius-2xl);                24px - 기준 §11  */
/*   --summary-pad:               27px;                             27px - 기준 §11 (스케일 외)  */
/*   --summary-title-color:       var(--color-primary);             #2F6F73 - 기준 §12  */
/*   --summary-title-size:        25px;                             25px - 기준 §12 (이전 20 → 25, 스케일 외)  */
/*   --summary-title-bottom:      13px;                             13px - 기준 §12 (스케일 외, 정확값)  */
/*   --summary-title-letter:      var(--letter-spacing-tight);      -0.045em - 기준 §12  */
/*   --summary-li-size:           var(--text-lg);                   16px - 기준 §13  */
/*   --summary-li-line:           var(--leading-loose);             1.78 - 기준 §13  */
/*   --summary-li-pad-l:          21px;                             21px - 기준 §13 (체크마커 + 텍스트 자리, 스케일 외)  */
/*   --summary-li-gap:            var(--space-3);                   12px - 리스트 항목 간격 (기준 명시 없음, 기존 유지)  */
/*   --summary-mark-bg:           var(--color-primary);             체크 마커 배경  */

  /* ─ box-pros-cons (장점 / 아쉬운 점 카드) ─ 기준 정리 §30·§31 적용
   * ※ 시맨틱 변경: 기준 §30 에서 장점=흰 / 아쉬운점=흰 으로 둘 다 동일 톤으로 변경
   *   (이전 시안 04·09: 장점=세이지 소프트, 아쉬운 점=흰 — 톤 분리 → 통합)
   * ※ §30 양쪽 다: 배경 #FFFFFF, 테두리 1px #E8E2DA, radius 22px, padding 22px,
   *   카드 간격 15px, 그림자 0 7px 20px rgba(47,111,115,0.045)
   * ※ §31 리스트: 글씨 15.5px, 줄간격 1.76, 왼쪽 여백 20px */
/*   --pros-bg:                 var(--color-card);                        #FFFFFF - 기준 §30 (이전 secondary-soft 변경)  */
/*   --pros-border:             var(--border-soft);                       1px solid #E8E2DA - 기준 §30 (이전 border-teal 변경)  */
/*   --pros-title-color:        var(--color-primary);                     #2F6F73 - 기존 유지  */
/*   --pros-marker-color:       var(--color-primary);                     마커 - 기존 유지  */
/*   --cons-bg:                 var(--color-card);                        #FFFFFF - 기준 §30  */
/*   --cons-border:             var(--border-soft);                       1px solid #E8E2DA - 기준 §30  */
/*   --cons-title-color:        var(--color-primary);                     #2F6F73 - 기존 유지  */
/*   --cons-marker-color:       var(--color-primary);                     마커 - 기존 유지  */
/*   --proscons-title-size:     var(--text-3xl);                          20px - 기준 명시 없음, 기존 유지  */
/*   --proscons-radius:         var(--radius-xl);                         22px - 기준 §30 (이전 공통 18 → 22)  */
/*   --proscons-pad:            22px;                                     기준 §30: padding 22px (스케일 외)  */
/*   --proscons-gap:            15px;                                     기준 §30: 카드 간격 15px (이전 20 → 15, 스케일 외)  */
/*   --proscons-shadow:         0 7px 20px rgba(47, 111, 115, 0.045);     기준 §30  */
/*   --proscons-list-size:      15.5px;                                   기준 §31: 15.5px (스케일 외)  */
/*   --proscons-list-line:      var(--leading-list);                      1.76 - 기준 §31  */
/*   --proscons-list-pad-l:     var(--space-5);                           20px - 기준 §31  */

  /* ─ box-conclusion (마무리 강조) ─ 기준 정리 §32·§33 적용
   * ※ §32 박스: 배경 #DDE8E3, 테두리 1px rgba(47,111,115,0.14),
   *             radius 26px, padding 27px, 위아래 42 0 32
   * ※ §33 제목: 25px / #2F6F73 / 아래 11px */
/*   --conclusion-bg:             var(--color-secondary);                 #DDE8E3 - 기준 §32 (유지)  */
/*   --conclusion-border:         1px solid rgba(47, 111, 115, 0.14);     기준 §32 (이전 --border-teal 0.16 → 0.14, 정확값)  */
/*   --conclusion-radius:         26px;                                   기준 §32 (이전 공통 18 → 26, 스케일 외)  */
/*   --conclusion-pad:            27px;                                   기준 §32 (스케일 외)  */
/*   --conclusion-top:            42px;                                   기준 §32: 위 간격 42px (스케일 외)  */
/*   --conclusion-bottom:         32px;                                   기준 §32: 아래 간격 32px  */
/*   --conclusion-title-color:    var(--color-primary);                   #2F6F73 - 기준 §33 (유지)  */
/*   --conclusion-title-size:     25px;                                   기준 §33 (이전 20 → 25, 스케일 외)  */
/*   --conclusion-title-bottom:   11px;                                   기준 §33 (스케일 외)  */
/*   --conclusion-text-color:     var(--color-article-body);              #222 - 기존 유지  */
/*   --conclusion-cta-gap:        var(--space-5);                         본문과 CTA 간격 - 기존 유지 (기준 미명시)  */

  /* ─ CTA 버튼 (.cta / .product-cta / .conclusion-cta) ─ 기준 정리 §29 적용
   * ※ 본문 흐름 안 모든 주황 CTA 버튼의 공통 토큰 정의 (마무리 + 상품 카드 + 단독 CTA)
   * ※ 컴포넌트별 미세 차이는 컴포넌트 적용부에서 override (예: product-cta-h) */
/*   --cta-bg:                  var(--color-accent);                      #F4A261 - 기준 §29  */
/*   --cta-bg-hover:            var(--color-accent-hover);                 #F6B27B - 기준 §29  */
/*   --cta-bg-active:           var(--color-accent-active);               누름 상태 - 기존 유지  */
/*   --cta-color:               var(--color-text);                        #222 - 기준 §29  */
/*   --cta-border:              1px solid rgba(244, 162, 97, 0.32);       기준 §29 정확값 (--color-accent-border 0.34 → 0.32)  */
/*   --cta-radius:              17px;                                     기준 §29 (스케일 외)  */
/*   --cta-min-h:               50px;                                     기준 §29  */
/*   --cta-pad-y:               14px;                                     기준 §29 - 상품 카드 안 padding  */
/*   --cta-pad-x:               23px;                                     기준 §29 - 상품 카드 안 padding  */
/*   --cta-font-size:           var(--text-base);                         14px - 기준 §29  */
/*   --cta-font-weight:         var(--weight-black);                      900 - 기준 §29  */
/*   --cta-shadow:              0 8px 18px rgba(244, 162, 97, 0.22);      기준 §29  */

  /* 마무리 CTA 전용 - 풀폭 + 더 큰 높이 */
/*   --conclusion-cta-h:        var(--btn-h-lg);                          54px - 풀폭 큰 버튼 (마무리 CTA 만)  */
/*   --conclusion-cta-bg:       var(--cta-bg); */
/*   --conclusion-cta-bg-hover: var(--cta-bg-hover); */
/*   --conclusion-cta-bg-active:var(--cta-bg-active); */
/*   --conclusion-cta-text:     var(--cta-color); */
/*   --conclusion-cta-radius:   var(--cta-radius); */
/*   --conclusion-cta-border:   var(--cta-border); */

  /* ─ post-hero (대표 이미지) ─ 기준 정리 §7·§8 적용
   *
   *  ▣ §7 박스: 배경 #F7EFE5 (살구), 테두리 1px solid #E8E2DA,
   *              border-radius 28px, 이미지 높이 330px, object-fit cover,
   *              아래 간격 28px (--space-article-thumb-bottom)
   *  ▣ §8 캡션: 배경 rgba(255,255,255,0.68), 글씨 13px / #6B7280,
   *              padding 13px 17px, 위 구분선 1px solid #E8E2DA
   *  ▣ 구조: figure > img + figcaption (figure 가 박스, img 가 330px, figcaption 이 캡션)
   * ─────────────────────────────────────────────────────────────── */

  /* 박스 (figure) */
/*   --post-hero-bg:             #F7EFE5;                            기준 §7 - 살구 (이미지 로딩 전 placeholder 도 동일)  */
/*   --post-hero-border:         var(--border-soft);                 1px solid #E8E2DA - 기준 §7  */
/*   --post-hero-radius:         var(--radius-3xl);                  28px - 기준 §7 (이전 22 → 28)  */
/*   --post-hero-margin-top:     var(--space-7);                     28px - 위 간격 (기준 정리 미명시, 기존 유지)  */
/*   --post-hero-margin-bottom:  var(--space-article-thumb-bottom);  28px - 기준 §7 (--space-article-thumb-bottom 이 30→28 갱신됨)  */

  /* 이미지 (img) — 단계 6 갱신 (2026-05-26): height 픽셀 고정 → aspect-ratio 16:9 전환
   *  ※ 사유: 본문 베너 이미지 1600×900 (16:9) 표준화 — 잘림 0% 정렬, 디자인 일관성
   *  ※ stage3 §7 의 .post-hero img 가 height: var(--post-hero-img-h) → aspect-ratio: var(--post-hero-img-aspect) 로 변경됨
   *  ※ 모바일도 동일 비율로 통일 (stage4 §8 의 height 오버라이드 제거) */
/*   --post-hero-img-aspect:     16 / 9;                             단계 6: 본문 hero 이미지 비율 (PC + 모바일 공통)  */
/*   --post-hero-img-fit:        cover;                              기준 §7: object-fit cover (그대로 유지)  */
/*   --post-hero-img-h:          330px;                              [폐기] 단계 6 이전 PC 고정 픽셀 높이 (참고용 보존)  */

  /* placeholder (이미지 없을 때 - 박스 자체 배경이 이미 살구색이라 placeholder 와 동일) */
/*   --post-hero-min-h-placeholder: 200px;                           placeholder 최소 높이 (기존 유지)  */

  /* 캡션 (figcaption) */
/*   --post-hero-caption-bg:     rgba(255, 255, 255, 0.68);          기준 §8: 반투명 흰  */
/*   --post-hero-caption-color:  var(--color-article-meta);          #6B7280 - 기준 §8  */
/*   --post-hero-caption-size:   var(--text-sm);                     13px - 기준 §8 (이전 14 → 13)  */
/*   --post-hero-caption-weight: var(--weight-normal);               400  */
/*   --post-hero-caption-pad-y:  13px;                               기준 §8: 13px (스케일 외)  */
/*   --post-hero-caption-pad-x:  17px;                               기준 §8: 17px (스케일 외)  */
/*   --post-hero-caption-border-top: var(--border-soft);             1px solid #E8E2DA - 기준 §8  */
/*   --post-hero-caption-align:  center;                             시안 매칭 (기준 명시 없음, 기존 유지)  */

  /* 업로드 원본 숨김 (figure.post-hero 로 다시 그림 — 단계 7 추가) */
/*   --post-hero-source-display: none;                               티스토리 [##_Image|…] 원본 토큰 숨김 (삭제 금지·표시 안 함). 규칙은 stage3.css .post-hero-source  */

  /* ─ post-toc (본문 바로가기 박스) ─ 기준 정리 §2~§5 적용
   *
   *  ▣ 박스 (기준 §1 / 모바일 §11)
   *    PC: bg #FFFFFF, border 1px #E8E2DA, radius 24px, 내부 24px, 아래 34px,
   *        그림자 0 7px 18px rgba(47,111,115,0.045)
   *    모바일: 위와 동일 + radius 22px, 내부 20px, 아래 30px
   *
   *  ▣ 제목 (기준 §2 / 모바일 §2)
   *    PC: 23px / #222 / 800 / 자간 -0.045em / 아래 12px
   *    모바일: 20px / #222 / 줄간격 1.34 / 아래 7px
   *
   *  ▣ 설명 (기준 §3 / 모바일 §3)
   *    PC: 14.5px / #6B7280 / 줄간격 1.68 / 아래 16px
   *    모바일: 13.5px / 줄간격 1.66 / 아래 14px
   *
   *  ▣ 버튼 그리드 (기준 §4·§5 / 모바일 §4·§5)
   *    PC: 4열 grid, 간격 10px, 최소 높이 48px, radius 16px, padding 11px 13px,
   *        글씨 13.5px, weight 850, 호버 translateY(-1px) + #EEF5F1 + 그림자,
   *        전환 0.18s
   *    모바일: 2열 grid (기준 명시 없음, 시안 안전값), 간격 9px, 최소 높이 46px,
   *           radius 15px, padding 10px 11px, 글씨 13.5px, weight 850,
   *           active(tap) 시 #D1E2DA
   * ─────────────────────────────────────────────────────────────── */

  /* 박스 */
/*   --post-toc-bg:              var(--color-card);                 #FFFFFF  */
/*   --post-toc-border:          var(--border-soft);                1px solid #E8E2DA  */
/*   --post-toc-shadow:          var(--shadow-post-toc);            0 7px 18px rgba(47,111,115,0.045)  */
/*   --post-toc-radius-pc:       var(--radius-2xl);                 24px - 기준 §1 PC  */
/*   --post-toc-radius-mobile:   var(--radius-xl);                  22px - 기준 §1 모바일  */
/*   --post-toc-radius:          var(--post-toc-radius-pc);         base (PC)  */
/*   --post-toc-pad-y:           var(--space-6);                    24px - PC  */
/*   --post-toc-pad-x:           var(--space-6);                    24px - PC  */
/*   --post-toc-pad-y-mobile:    var(--space-5);                    20px - 모바일  */
/*   --post-toc-pad-x-mobile:    var(--space-5);                    20px - 모바일  */
/*   --post-toc-bottom-pc:       34px;                              아래 간격 PC - 기준 §1  */
/*   --post-toc-bottom-mobile:   30px;                              아래 간격 모바일 - 기준 §11  */

  /* 제목 */
/*   --post-toc-title-color:        var(--color-text);              #222 - 기준 §2·§15 (이전 primary #2F6F73 변경)  */
/*   --post-toc-title-size:         23px;                           PC - 기준 §2 (스케일 외 px 직값)  */
/*   --post-toc-title-size-mobile:  var(--text-3xl);                20px - 모바일 기준 §2  */
/*   --post-toc-title-weight:       var(--weight-extrabold);        800  */
/*   --post-toc-title-bottom:       var(--space-3);                 12px - PC  */
/*   --post-toc-title-bottom-mobile: 7px;                           모바일 기준 §2 (스케일 외)  */
/*   --post-toc-title-line-mobile:  1.34;                           모바일 줄간격 - 기준 §2  */
/*   --post-toc-title-letter:       var(--letter-spacing-tight);    -0.045em - 기준 §2  */

  /* 설명 */
/*   --post-toc-desc-color:         var(--color-article-meta);      #6B7280  */
/*   --post-toc-desc-size:          14.5px;                         PC - 기준 §3 (스케일 외 px 직값)  */
/*   --post-toc-desc-size-mobile:   13.5px;                         모바일 기준 §3 (스케일 외)  */
/*   --post-toc-desc-line:          1.68;                           PC 줄간격 - 기준 §3  */
/*   --post-toc-desc-line-mobile:   1.66;                           모바일 줄간격 - 기준 §3  */
/*   --post-toc-desc-bottom:        var(--space-4);                 16px - PC 기준 §3  */
/*   --post-toc-desc-bottom-mobile: 14px;                           모바일 기준 §3 (스케일 외)  */

  /* 버튼 그리드 — 기준 §4: PC 4열, 모바일은 명시 없어서 시안 안전값 2열 */
/*   --post-toc-list-cols-pc:       4;                              기준 §4  */
/*   --post-toc-list-cols-mobile:   2;                              시안 안전값 (기준 명시 없음)  */
/*   --post-toc-list-gap-pc:        10px;                           기준 §4  */
/*   --post-toc-list-gap-mobile:    9px;                            기준 §4 모바일  */
/*   --post-toc-list-gap:           var(--post-toc-list-gap-pc);    base (PC)  */

  /* 버튼 (알약) */
/*   --post-toc-link-bg:            var(--color-secondary);         #DDE8E3 - 세이지  */
/*   --post-toc-link-bg-hover:      #EEF5F1;                        기준 §5 (이전 #C9DAD0 변경)  */
/*   --post-toc-link-bg-active:     #D1E2DA;                        모바일 tap - 기준 §5 모바일 상태값  */
/*   --post-toc-link-color:         var(--color-primary);           #2F6F73  */
/*   --post-toc-link-border:        1px solid rgba(47, 111, 115, 0.14);   기준 §4 모바일: rgba(47,111,115,0.14)  */
/*   --post-toc-link-radius:        16px;                           PC - 기준 §4  */
/*   --post-toc-link-radius-mobile: 15px;                           모바일 기준 §4  */
/*   --post-toc-link-min-h:         48px;                           PC - 기준 §4  */
/*   --post-toc-link-min-h-mobile:  46px;                           모바일 기준 §4  */
/*   --post-toc-link-pad-y:         11px;                           PC - 기준 §4  */
/*   --post-toc-link-pad-x:         13px;                           PC - 기준 §4  */
/*   --post-toc-link-pad-y-mobile:  10px;                           모바일 기준 §4  */
/*   --post-toc-link-pad-x-mobile:  11px;                           모바일 기준 §4  */
/*   --post-toc-link-font-size:     13.5px;                         PC + 모바일 동일 - 기준 §4  */
/*   --post-toc-link-font-weight:   850;                            variable font weight - 기준 §4  */
/*   --post-toc-link-hover-shift:   -1px;                           translateY(-1px) - 기준 §5  */
/*   --post-toc-link-hover-shadow:  var(--shadow-post-toc-hover);   호버 그림자 - 기준 §5  */
/*   --post-toc-link-transition:    var(--duration-toc);            0.18s - 기준 §5  */


  /* ─ 점선(dashed) placeholder 패밀리 ─ 기준 정리 §21·§42 공통 톤
   * ※ 광고 박스 (.box-ad) 와 댓글 영역 자리 (.comments-placeholder) 가 공유하는 시각 톤
   * ※ 본문 흐름에서 "임시" 또는 "외부 위젯 자리" 임을 dashed 테두리로 표현 */
/*   --placeholder-border-color: #D8CDBF;                               점선 색 - 기준 §21·§42  */

  /* ─ box-ad (광고 박스) ─ 기준 정리 §21 적용 (신규 컴포넌트)
   * 시안: 본문 흐름 안 광고 자리 — 옅은 흰 + 점선 테두리로 명확히 "광고" 영역임을 표시 */
/*   --ad-bg:                    rgba(255, 255, 255, 0.58);             기준 §21  */
/*   --ad-border:                1px dashed var(--placeholder-border-color);   기준 §21: 1px dashed #D8CDBF  */
/*   --ad-radius:                var(--radius-xl);                      22px - 기준 §21  */
/*   --ad-pad:                   26px;                                  26px - 기준 §21 (스케일 외)  */
/*   --ad-font-size:             var(--text-base);                      14px - 기준 §21  */
/*   --ad-color:                 var(--color-article-meta);             #6B7280 - 기준 명시 없음, 시안 일관  */

  /* ─ 광고 슬롯 사이즈 (CLS 방지) ─ [중요].txt #7
   * 시맨틱 토큰: 광고가 도착하기 전 미리 공간을 예약해 Cumulative Layout Shift 방지
   * Google Core Web Vitals 핵심 지표 (CLS < 0.1 목표)
   * 권장값: PC 280px (큰 사각형 336×280 / 디스플레이 광고 표준)
   *         모바일 250px (사각형 300×250 표준)
   *         인라인 90px (인-아티클·인-피드 광고) — 단계5 본문 작성 시 활용 */
/*   --ad-slot-min-h:            280px; */
/*   --ad-slot-min-h-mobile:     250px; */
/*   --ad-slot-min-h-inline:     90px; */

  /* ════════════════════════════════════════════════════════════════
   * AI 모듈형 콘텐츠 컴포넌트 토큰 패밀리 — [중요].txt #30 (+#35 +#41)
   * ────────────────────────────────────────────────────────────────
   * 단계 5 본문 작성 시 AI 가 사용할 시각 모듈의 공통 패밀리.
   * 의류 블로그 방문자 욕망 5종 (비교/확인/선택/검증/행동) 매핑.
   *
   *   A. 비교 욕망  → .compare-table
   *   B. 확인 욕망  → .pros-cons
   *   C. 선택 욕망  → .recommend-box
   *   D. 검증 욕망  → .review-card
   *   E. 행동 욕망  → .cta-box
   *   F. FAQ        → .faq-item   (#35 details/summary)
   *   G. 인라인     → .highlight (#41 mark), .term (#41 dfn), .price-tag
   *
   * 디자인 원칙: 새 색상값 없음 — 기존 토큰 재사용. 사이즈만 신규 시맨틱.
   * ════════════════════════════════════════════════════════════════ */

  /* ─ 공통 모듈 토큰 (모든 .* 모듈이 공유) ─ */
/*   --module-pad-pc:               var(--space-6);      24px - 모듈 기본 패딩 PC  */
/*   --module-pad-mobile:           var(--space-5);      20px - 모바일  */
/*   --module-radius:               var(--radius-lg);    18px - 모듈 라운드  */
/*   --module-gap-inner:            var(--space-3);      12px - 모듈 내부 간격  */
/*   --module-margin-y-pc:          var(--space-7);      28px - 모듈 위·아래 여백 PC  */
/*   --module-margin-y-mobile:      var(--space-6);      24px - 모바일  */
/*   --module-title-size-pc:        var(--text-lg);      17px - 모듈 제목 PC  */
/*   --module-title-size-mobile:    var(--text-md);      15px - 모바일  */
/*   --module-title-weight:         var(--weight-bold);  700  */
/*   --module-body-size-pc:         var(--text-base);    14px - 모듈 본문  */
/*   --module-body-size-mobile:     13.5px;              모바일 (스케일 외)  */

  /* ─ 인라인 강조 토큰 (.highlight / .term / .price-tag) ─ #41 */
/*   --inline-pad-y:                2px; */
/*   --inline-pad-x:                6px; */
/*   --inline-radius:               var(--radius-sm);    6px - 인라인 알약  */
/*   --inline-term-border-style:    1px dotted var(--color-muted-light);    dfn underline  */

  /* ─ content-visibility 유틸 — [중요].txt #29
   * 화면 밖 박스의 렌더링을 브라우저가 자동 생략 → LCP·렌더링 비용 ↓
   * contain-intrinsic-size 는 렌더링 생략 시 예상 높이 (지정 안 하면 스크롤 점핑)
   * 브라우저 호환: Chrome 85+ / Safari 18+ / Edge 88+ (미지원 브라우저는 무시 — 안전)
   *                                                                            */
/*   --cv-intrinsic-h-sm:           100px;    작은 박스 (인라인 광고 등)  */
/*   --cv-intrinsic-h-md:           300px;    중간 박스 (.box-* 본문 박스)  */
/*   --cv-intrinsic-h-lg:           600px;    큰 박스 (.box-product 같은)  */

  /* ─ Reading progress bar — [중요].txt #19
   * 본문 페이지 상단에 페이지 스크롤 진행률을 표시하는 가느다란 막대
   * 본문 페이지(body.is-article-page) 에서만 표시 (CSS로 분기) */
/*   --progress-bar-h:              3px; */
/*   --progress-bar-color:          var(--color-accent);    오렌지 accent  */
/*   --progress-bar-bg:             var(--color-line);      베이지/세피아 트랙  */
/*   --progress-bar-z:              var(--z-header);        헤더 위 우선  */

  /* ─ comments-placeholder (댓글 영역 자리) ─ 기준 정리 §42 적용 (신규 컴포넌트)
   * 시안: 본문 끝 댓글 영역이 비어있을 때 표시되는 안내 박스 (광고 박스와 동일 dashed 톤) */
/*   --comments-bg:              rgba(255, 255, 255, 0.54);             기준 §42  */
/*   --comments-border:          1px dashed var(--placeholder-border-color);   기준 §42  */
/*   --comments-radius:          20px;                                  기준 §42 (스케일 외)  */
/*   --comments-pad:             22px;                                  기준 §42 (스케일 외)  */
/*   --comments-top:             var(--space-6);                        24px - 기준 §42  */
/*   --comments-font-size:       13.5px;                                기준 §42 (스케일 외)  */
/*   --comments-color:           var(--color-article-meta);             #6B7280 - 기준 §42  */

  /* ─ box-product (상품 추천 카드) ─ 기준 정리 §24·§25·§26·§27·§28·§29 적용
   *
   *  ▣ §24 카드: 배경 #FFFFFF, 테두리 1px #E8E2DA, radius 26px, 내부 26px,
   *              위아래 26px (--space-article-product-y),
   *              그림자 0 9px 24px rgba(47,111,115,0.06),
   *              이미지 영역 160px, 카드 내부 gap 22px
   *  ▣ §25 이미지: 너비 160px / 높이 142px, radius 22px, 테두리 #E8E2DA, 배경 #F7EFE5
   *  ▣ §26 라벨: 배경 #DDE8E3 / 글씨 #2F6F73, radius 999px, padding 6 12, 글씨 12px, 아래 10
   *  ▣ §27 제목/설명: 제목 22px / 아래 8 / 설명 15px / 줄간격 1.68 / 색상 #6B7280
   *  ▣ §28 미니 박스: 배경 #FFF8EF, 테두리 #E8E2DA, radius 15, padding 11,
   *                  글씨 13px, 줄간격 1.55, 박스 간격 10px
   *  ▣ §29 CTA: 별도 --cta-* 토큰 그룹에서 처리 (마무리 CTA 와 공유)
   * ─────────────────────────────────────────────────────────────── */

  /* 카드 (외곽) */
/*   --product-bg:              var(--color-card);               #FFFFFF - 기준 §24  */
/*   --product-border:          var(--border-soft);              1px solid #E8E2DA - 기준 §24  */
/*   --product-radius:          26px;                            기준 §24 (스케일 외)  */
/*   --product-pad:             26px;                            기준 §24 (스케일 외)  */
/*   --product-shadow:          0 9px 24px rgba(47, 111, 115, 0.06);   기준 §24  */
/*   --product-gap:             22px;                            카드 내부 gap - 기준 §24 (이전 24 → 22, 스케일 외)  */

  /* 이미지 (썸네일) */
/*   --product-thumb-w:         160px;                           기준 §25: 너비 160px (이전 200 → 160)  */
/*   --product-thumb-h:         142px;                           기준 §25: 높이 142px (신규)  */
/*   --product-thumb-radius:    var(--radius-xl);                22px - 기준 §25 (이전 --radius-lg 18 → 22)  */
/*   --product-thumb-border:    var(--border-soft);              1px solid #E8E2DA - 기준 §25 (신규)  */
/*   --product-thumb-bg:        #F7EFE5;                         살구 - 기준 §25 (신규, post-hero-bg 와 동일 톤)  */

  /* 라벨 (.product-label) */
/*   --product-label-bg:        var(--color-secondary);          #DDE8E3 - 기준 §26  */
/*   --product-label-color:     var(--color-primary);            #2F6F73 - 기준 §26  */
/*   --product-label-radius:    var(--radius-pill);              999px - 기준 §26  */
/*   --product-label-pad-y:     6px;                             기준 §26  */
/*   --product-label-pad-x:     12px;                            기준 §26  */
/*   --product-label-size:      var(--text-xs);                  12px - 기준 §26  */
/*   --product-label-bottom:    10px;                            기준 §26 (신규, 스케일 외)  */

  /* 제목 / 설명 */
/*   --product-name-size:       22px;                            기준 §27 (이전 20 → 22, 스케일 외)  */
/*   --product-name-bottom:     var(--space-2);                  8px - 기준 §27  */
/*   --product-name-color:      var(--color-article-title);      #222 - 기존 유지  */
/*   --product-desc-size:       var(--text-md);                  15px - 기준 §27  */
/*   --product-desc-line:       var(--leading-product-desc);     1.68 - 기준 §27  */
/*   --product-desc-color:      var(--color-article-meta);       #6B7280 - 기준 §27  */

  /* 미니 스탯 (장점 / 아쉬운 점 / 추천 대상 3분할) */
/*   --product-stats-cols:      3;                               PC: 3열 (기존 유지)  */
/*   --product-stats-gap:       10px;                            기준 §28: 박스 간격 10px (이전 12 → 10, 스케일 외)  */
/*   --product-stat-bg:         var(--color-notice-bg);          #FFF8EF - 기준 §28 (이전 accent-soft 변경)  */
/*   --product-stat-border:     var(--border-soft);              1px solid #E8E2DA - 기준 §28 (이전 accent-border 변경)  */
/*   --product-stat-radius:     15px;                            기준 §28 (이전 --radius-md 14 → 15, 스케일 외)  */
/*   --product-stat-pad:        11px;                            기준 §28 (이전 12 16 → 11 단일, 스케일 외)  */
/*   --product-stat-font-size:  var(--text-sm);                  13px - 기준 §28  */
/*   --product-stat-line:       var(--leading-pros);             1.55 - 기준 §28  */
/*   --product-stat-label-size: var(--text-sm);                  13px  */
/*   --product-stat-label-color:var(--color-article-title); */
/*   --product-stat-label-weight:var(--weight-extrabold); */
/*   --product-stat-value-size: var(--text-sm);                  13px  */
/*   --product-stat-value-color:var(--color-article-meta); */
/*   --product-stat-gap:        var(--space-1);                  label-value 간격  */

  /* CTA (.product-cta 슬롯 - 기준 §29 CTA 토큰은 별도 그룹에서 일원 정의) */
/*   --product-cta-h:           var(--cta-min-h);                 50px - 기준 §29 (--cta-min-h alias 로 single source)  */


  /* ════════════════════════════════════════════════════════════════════
   * 중간 플러스 추천값 — 신규 컴포넌트 토큰
   *
   *   ※ 표(33개 항목) 중에서 기존 토큰만으로 표현이 안 되는 값을 모은 레이어.
   *      PC / 모바일 짝으로 정의해 미디어 쿼리에서 갈아끼울 수 있도록 함.
   *      모든 값은 정수 px (소수점 제거) — 사용자 가이드 "실제 CSS" 반영.
   * ════════════════════════════════════════════════════════════════════ */

  /* ─ 헤더 둥근값 ─ 메인화면 상세값 §2 / 모바일 §2 */
/*   --header-radius-pc:        28px;    메인화면 상세값 §2: 28px  */
/*   --header-radius-mobile:    24px;    메인화면 상세값 모바일 §2: 24px  */

  /* ─ 헤더 메뉴 간격 (PC 26 / 모바일 16) ─ */
/*   --header-menu-gap-pc:      24px;    기준표 §8: 26 → 24 (메뉴 간격)  */
/*   --header-menu-gap-mobile:  16px; */

  /* ─ 메인 카드 (히어로) ─ 메인화면 상세값 §9 / §11 / §12 / 모바일 §12 / §14
   *  PC: radius 34px / padding 41px / 높이 330px / 카드 gap 27px / 그림자 0 14px 36px 0.08
   *  모바일: radius 30px / padding 30px / 카드 gap 22px / 그림자 0 12px 30px 0.07 */
/*   --hero-card-radius-pc:     34px;    메인화면 상세값 §9: 34px (스케일 외)  */
/*   --hero-card-radius-mobile: 30px;    메인화면 상세값 모바일 §12: 30px  */
/*   --hero-card-min-h-pc:      330px;   메인화면 상세값 §9: 높이 330px  */
/*   --hero-card-min-h-mobile:  auto; */
/*   --hero-card-pad-pc:        var(--space-hero-pad);    41px - 메인화면 상세값 §9  */
/*   --hero-card-pad-mobile:    30px;                     메인화면 상세값 모바일 §12: 30px  */
/*   --hero-card-gap-pc:        27px;                     메인화면 상세값 §9: 카드 gap 27px  */
/*   --hero-card-gap-mobile:    22px;                     메인화면 상세값 모바일 §12: 22px  */
/*   --hero-card-shadow-pc:     var(--shadow-md);         메인화면 상세값 §9: 0 14px 36px 0.08 (= --shadow-md)  */
/*   --hero-card-shadow-mobile: 0 12px 30px rgba(47, 111, 115, 0.07);   메인화면 상세값 모바일 §12  */

  /* ─ .hero-main 내부 배치 ─ 시안 메인화면 기준 (a 단계)
   *  ※ 우측 일러스트(.hero-image)는 제거됨 — 추후 슬라이드/광고 영역으로 교체 예정
   *  ※ 현재는 .hero-main 안에 .hero-main-body 단일 자식만 존재 (block 흐름)
   *  ※ 복구 시: --hero-illust-* / --hero-image-* / --hero-main-inner-gap-* /
   *            --hero-main-align-items-* 토큰을 함께 재정의할 것 */

  /* ─ .hero 그리드 비율 (.hero-main : .hero-side) ─ 시안 메인화면 기준 (b 단계 신규)
   *  ※ PC 비율: 2 : 1 (시안 측정값 — .hero-main ≈ 67% / .hero-side ≈ 33%)
   *  ※ 이전 1.6 : 1 (≈ 62 : 38) 보다 .hero-main 영역을 더 넓게 — 일러스트 들어갈 공간 확보
   *  ※ 모바일은 .hero 자체가 1열(@media 안에서 grid-template-columns: 1fr)이라 비율 무관 */
/*   --hero-main-fr:  2fr;    시안 비율 (이전 1.6fr)  */
/*   --hero-side-fr:  1fr; */

  /* ─ CTA 버튼 ─ 메인화면 상세값 §13 / 모바일 §16
   *  PC: padding 15×25, radius 18px, font 16px / 900, 그림자 0 8px 18px ..0.22
   *  모바일: padding 14×22, radius 16px, font 15px / 900, width 100%, 최소 높이 50px, 그림자 0 7px 18px ..0.22 */
/*   --btn-cta-pad-y-pc:        15px;    메인화면 상세값 §13: padding 15×25  */
/*   --btn-cta-pad-x-pc:        25px; */
/*   --btn-cta-pad-y-mobile:    14px; */
/*   --btn-cta-pad-x-mobile:    22px; */
/*   --btn-cta-font-pc:         var(--text-lg);    16px  */
/*   --btn-cta-font-mobile:     var(--text-md);    15px  */
/*   --btn-cta-weight:          var(--weight-black);   메인화면 상세값 §13: 900 (이전 700)  */
/*   --btn-cta-radius-pc:       var(--radius-lg);    18px - 메인화면 상세값 §13  */
/*   --btn-cta-radius-mobile:   var(--space-4);      16px - 메인화면 상세값 모바일 §16  */
/*   --btn-cta-width-pc:        auto;              내용 너비만큼  */
/*   --btn-cta-width-mobile:    100%;              메인화면 상세값 모바일 §16: 100%  */
/*   --btn-cta-min-h-pc:        54px;              시안 매칭 — .btn 베이스의 height 48px override */
                                                  ※ 시안의 .btn-cta 는 padding 15+font 16(line ≈24)+padding 15 = ~54px 높이
                                                  ※ 이전: .btn 베이스 height 48px 가 강제 적용되어 시안보다 ~6px 작아 보임
                                                  ※ 메인화면 상세값 §13 padding 15·25 의 의도에 부합 */
/*   --btn-cta-min-h-mobile:    50px;              메인화면 상세값 모바일 §16: 최소 50px (이전 48 → 50)  */

  /* ─ 사이드바 박스 (최신글 / 인기글) ─ 메인화면 상세값 §23·§24·§25·§26·§27·§28·§29 /
   *                                       모바일 §26·§27·§28·§29·§30·§31·§32
   *  PC: 2열·gap 29 / 박스 padding 31, radius 30, 그림자 0 10px 28px 0.06
   *      항목 padding 18 19, gap 16, 썸네일 83 / radius 18, 제목 17·1.52, 메타 14
   *  모바일: 1열·gap 22 / 박스 padding 28 30, radius 28, 그림자 0 10px 26px 0.06
   *          항목 padding 17 18, gap 14, 썸네일 74 / radius 16, 제목 16·1.56, 메타 13 */
/*   --sidebar-card-pad-pc:     31px;      메인화면 상세값 §24  */
/*   --sidebar-card-pad-mobile: 28px 30px; 메인화면 상세값 모바일 §27: padding 28 30 (스케일 외)  */
/*   --sidebar-card-radius-pc:   30px;     메인화면 상세값 §24: 30px (스케일 외)  */
/*   --sidebar-card-radius-mobile: var(--radius-3xl);     28px - 메인화면 상세값 모바일 §27  */
/*   --sidebar-card-shadow-pc:  0 10px 28px rgba(47, 111, 115, 0.06);   메인화면 상세값 §24  */
/*   --sidebar-card-shadow-mobile: 0 10px 26px rgba(47, 111, 115, 0.06);  메인화면 상세값 모바일 §27  */

  /* 사이드바 박스 사이 간격 + 구조
   *  ─────────────────────────────────────────────────────────────────────
   *  ※ 메인화면 상세값 §23 은 PC 2열을 명시하지만, 본 스킨의 사이드바(.area-aside)는
   *     폭 300px (var(--sidebar-width)) 의 좁은 컬럼이라 2열이 물리적으로 불가능:
   *       300px - gap 29 = 271px → 한 박스 ~135.5px
   *       박스 padding 31×2 = 62px → 콘텐츠 영역 ~73px
   *       그런데 썸네일 83px + gap 16px + 글 제목까지 들어가야 함 → 불가
   *  ※ 메인 페이지에서도 .sidebar-recent-grid 가 동일하게 .area-aside 안에 위치하므로
   *     모든 페이지에서 PC 1열로 강제 (이전 사용자 결정 그대로 유지).
   *  ※ §23 의 2열을 살리려면 사이드바 폭을 ~440px+로 늘려야 함 (별도 디자인 결정 필요). */
/*   --sidebar-card-gap-pc:        29px; */
/*   --sidebar-card-gap-mobile:    22px;      메인화면 상세값 모바일 §26: 22px (이전 24 → 22)  */
/*   --recent-popular-cols-pc:     1;         사이드바 폭 300px 제약 — §23 2열 미준수 사유 위 주석 참조  */
/*   --recent-popular-cols-mobile: 1; */

  /* 인기글 항목 여백 ─ 메인화면 상세값 §26 / 모바일 §29 */
/*   --popular-row-pad-y-pc:       18px;      메인화면 상세값 §26  */
/*   --popular-row-pad-x-pc:       19px;      메인화면 상세값 §26  */
/*   --popular-row-pad-y-mobile:   17px;      메인화면 상세값 모바일 §29  */
/*   --popular-row-pad-x-mobile:   18px;      메인화면 상세값 모바일 §29  */
/*   --popular-row-gap-mobile-real: 14px;     메인화면 상세값 모바일 §29: 14px  */

  /* ─ 글 리스트 썸네일 (recent-thumb) ─ 메인화면 상세값 §27 / 모바일 §30 */
/*   --recent-thumb-size-pc:       83px; */
/*   --recent-thumb-size-mobile:   74px;      메인화면 상세값 모바일 §30: 74px (이전 78 → 74)  */
/*   --recent-thumb-radius-pc:     var(--radius-lg);    18px - 메인화면 상세값 §27  */
/*   --recent-thumb-radius-mobile: var(--space-4);      16px - 메인화면 상세값 모바일 §30  */

  /* ─ 글 리스트 제목 줄간격 ─ 메인화면 상세값 §28 / 모바일 §31 */
/*   --leading-recent-title-pc:     1.52; */
/*   --leading-recent-title-mobile: 1.56; */

  /* ─ 모바일 최근글 / 인기글 탭 (mobile-recent-tabs) ─
   *  ※ 모바일 사이드바에서 "최근 글 | 인기 글" 탭 UI
   *  ※ 활성 탭: 본문색 weight 800 / 비활성 탭: muted */
/*   --mobile-recent-tab-font-size:    var(--text-md);               15px  */
/*   --mobile-recent-tab-font-weight:  var(--weight-extrabold);      800  */
/*   --mobile-recent-tab-gap:          var(--space-2);               8px - 탭 ↔ separator 간격  */
/*   --mobile-recent-tab-margin-top:   var(--space-5);               20px - 카테고리(제휴마케팅) ↔ 탭 분리 (사용자 요청: 너무 가까웠던 간격 확보)  */
/*   --mobile-recent-tab-margin-bottom:var(--space-4);               16px - 탭 ↔ 리스트 분리  */
/*   --mobile-recent-tab-color-on:     var(--color-text); */
/*   --mobile-recent-tab-color-off:    var(--color-muted); */
/*   --mobile-recent-tab-sep-color:    var(--color-line); */
/*   --mobile-recent-tab-bg:           transparent; */
/*   --mobile-recent-tab-border:       0; */
/*   --mobile-recent-tab-padding:      0; */
/*   --mobile-recent-tab-cursor:       pointer; */

  /* ─ 카테고리 카드 ─ 메인화면 상세값 §18·§19·§20·§21·§22 / 모바일 §21·§22·§23·§24·§25
   *  PC: 4열 / gap 22 / padding 29 / radius 30 / 높이 200 / 그림자 0 10px 26px 0.06
   *      아이콘 52, radius 18 / 제목 22, 아래 10 / 설명 15, 1.72
   *  모바일: 1열 / gap 18 / padding 26 28 / radius 28 / 최소 높이 180 / 그림자 0 10px 24px 0.06
   *          아이콘 48, radius 16 / 제목 20, 아래 8 / 설명 15, 1.72 */
/*   --category-cards-cols-pc:     4; */
/*   --category-cards-cols-mobile: 1; */
/*   --category-cards-gap-pc:      22px; */
/*   --category-cards-gap-mobile:  18px; */
/*   --category-card-pad-pc:       29px; */
/*   --category-card-pad-mobile:   26px 28px;              메인화면 상세값 모바일 §22: padding 26 28  */
/*   --category-card-min-h-pc:     200px; */
/*   --category-card-min-h-mobile: 180px;                  메인화면 상세값 모바일 §22: 최소 180 (이전 auto → 180)  */
/*   --category-card-radius-pc:    30px;                   메인화면 상세값 §19: 30px (스케일 외)  */
/*   --category-card-radius-mobile: var(--radius-3xl);     28px - 메인화면 상세값 모바일 §22  */
/*   --category-card-shadow-pc:    0 10px 26px rgba(47, 111, 115, 0.06);   메인화면 상세값 §19  */
/*   --category-card-shadow-mobile: 0 10px 24px rgba(47, 111, 115, 0.06);  메인화면 상세값 모바일 §22  */
/*   --category-icon-size-pc:      52px; */
/*   --category-icon-size-mobile:  48px; */
/*   --category-icon-radius-pc:    var(--radius-lg);       18px - 메인화면 상세값 §20  */
/*   --category-icon-radius-mobile: var(--space-4);        16px - 메인화면 상세값 모바일 §23  */
/*   --space-category-title-bottom-pc:     10px;           메인화면 상세값 §21: 아래 10  */
/*   --space-category-title-bottom-mobile: var(--space-2);    8px - 메인화면 상세값 모바일 §24  */
/*   --leading-category-desc:      1.72;                   메인화면 상세값 §22 / 모바일 §25  */

  /* (글 리스트 썸네일 토큰은 위 사이드바 박스 그룹으로 이동됨) */

  /* ─ 히어로 대표 이미지 영역 토큰 제거됨 ─ (.hero-image figure 박스 삭제와 동기화)
   *  ※ 추후 슬라이드/광고 영역 추가 시 --hero-image-w-pc / -h-pc / -radius-pc /
   *     -w-mobile / -h-mobile / -radius-mobile / -bg / -border 토큰을 함께 복원할 것
   *  ※ 살구 톤(#F7EFE5)은 시스템 토큰 --post-hero-bg / --product-thumb-bg 와 동일 값 */

  /* ─ 푸터 박스 ─ 메인화면 상세값 §30 / 모바일 §33
   *  PC: radius 32 / padding 38 40 / 그림자 0 12px 30px 0.07 / 테두리 1px solid #E8E2DA
   *  모바일: radius 28 / padding 30 26 / 그림자 0 10px 28px 0.07 */
/*   --footer-radius-pc:        var(--radius-4xl);    32px - 메인화면 상세값 §30  */
/*   --footer-radius-mobile:    var(--radius-3xl);    28px - 메인화면 상세값 모바일 §33  */
/*   --footer-pad-pc:           38px 40px;            메인화면 상세값 §30 (스케일 외)  */
/*   --footer-pad-mobile:       30px 26px;            메인화면 상세값 모바일 §33 (스케일 외)  */
/*   --footer-shadow-pc:        var(--shadow-footer);                        0 12px 30px 0.07 - 메인화면 상세값 §30  */
/*   --footer-shadow-mobile-real: 0 10px 28px rgba(47, 111, 115, 0.07);      메인화면 상세값 모바일 §33  */
/*   --footer-section-gap-mobile: var(--space-6);     24px - 메인화면 상세값 모바일 §34: 섹션 간격  */

  /* ─ 제휴 안내 박스 ─ 기준 정리 §1 적용 (이전 기준표 §31 갱신)
   *  PC 위 간격 54px (기존 유지) / 모바일 위 간격 44px (기존 유지)
   *  PC padding 26 30 / 모바일 padding 16 18 (기준 §1)
   *  PC 아래 30 / 모바일 아래 20 (기준 §1) */
/*   --space-affiliate-top-pc:        54px;    기존 유지 (기준 §1 위 간격 미명시)  */
/*   --space-affiliate-top-mobile:    44px;    기존 유지 (기준 §1 위 간격 미명시)  */
/*   --affiliate-pad-y-mobile:        18px;              기준 모바일 §9: 18px (1단계 §1 비교표 16 → 모바일 §9 정확값 18 갱신, 스케일 외)  */
/*   --affiliate-pad-x-mobile:        var(--space-5);    20px - 기준 모바일 §9 (1단계 §1 비교표 18 → 모바일 §9 정확값 20 갱신)  */
/*   --space-affiliate-bottom-mobile: var(--space-6);    24px - 기준 모바일 §9 (1단계 §1 비교표 20 → 모바일 §9 정확값 24 갱신)  */

  /* ─ 모바일 그림자 — 메인화면 상세값 모바일 §2 / §33 정확값 ─
   *  ※ 이전엔 모바일에서 헤더/article/푸터 그림자를 OFF 했으나, 메인화면 상세값 모바일 §2 / §33 에
   *     정확한 그림자값이 명시되어 있어 적용. (헤더: 0 8px 22px 0.06 / 푸터: 0 10px 28px 0.07)
   *  ※ article-card 만 시안 매칭 위해 OFF 유지 (메인화면 상세값 범위 외) */
/*   --shadow-header-mobile:        var(--shadow-header-mobile-real);   메인화면 상세값 모바일 §2  */
/*   --shadow-article-card-mobile:  none; */
/*   --shadow-footer-mobile:        var(--footer-shadow-mobile-real);   메인화면 상세값 모바일 §33  */

  /* ─ Breadcrumb (본문 페이지 빵부스러기) ─
   *  시안과 컬러 맞춤: 링크는 청록(primary), 현재 페이지는 회색(muted)
   *  ※ 시안 분석 결과 — 검정이 아니라 muted 회색이 클릭 불가 상태를 시각적으로 더 잘 표현. */
/*   --color-breadcrumb-link:    var(--color-primary); */
/*   --color-breadcrumb-current: var(--color-muted); */
/*   --color-breadcrumb-sep:     var(--color-muted-light); */
  /* 본문 페이지에서 breadcrumb 와 article-card 사이 간격
     ※ 현재 8px 로 너무 좁아 breadcrumb 가 카드에 붙어 보이는 문제 해결 */
/*   --space-article-breadcrumb-bottom: 24px; */

  /* ─ Breadcrumb-current (현재 페이지 제목) 표시 방식 ─
   *  PC    : 정상 줄바꿈 (긴 제목도 그대로 노출)
   *  Mobile: 1줄 ellipsis (제목이 너무 길어 3줄 차지하는 문제 해결)
   *  ※ flex item ellipsis 작동 조건:
   *     min-width: 0  → 자식이 부모를 끌고 늘어나지 않게
   *     flex: 1 1 0   → 남은 공간을 모두 차지하고 그 안에서 자름 */
/*   --breadcrumb-current-white-space-pc:       normal; */
/*   --breadcrumb-current-white-space-mobile:   nowrap; */
/*   --breadcrumb-current-overflow-pc:          visible; */
/*   --breadcrumb-current-overflow-mobile:      hidden; */
/*   --breadcrumb-current-text-overflow-pc:     clip; */
/*   --breadcrumb-current-text-overflow-mobile: ellipsis; */
/*   --breadcrumb-current-min-width-pc:         auto; */
/*   --breadcrumb-current-min-width-mobile:     0; */
/*   --breadcrumb-current-flex-pc:              0 1 auto; */
/*   --breadcrumb-current-flex-mobile:          1 1 0; */

  /* ─ Breadcrumb-nav (홈 > 카테고리 > 제목) 표시 여부 ─
   *  PC    : flex 로 표시
   *  Mobile: 사용자 요청으로 숨김 (햄버거 드로어에 카테고리 노출되므로 중복)
   *  ※ 다시 표시하려면 --breadcrumb-display-mobile 값을 flex 등으로 변경 */
/*   --breadcrumb-display-pc:     flex; */
/*   --breadcrumb-display-mobile: none; */

  /* ─ Breadcrumb 추가 컴포넌트 토큰 — [중요].txt #12 */
/*   --breadcrumb-font-size:      var(--text-sm);     13px  */
/*   --breadcrumb-gap:            var(--space-2);     8px - 항목 간격  */
/*   --breadcrumb-sep-char:       '\203A';            › 단방향 꺽쇠  */

  /* ─ 사이드바 빈 카드 판정 박스 깜빡임 방지 (FOUC 제거) ─
   *  Flow:
   *    [1] 마크업 첫 페인트 → display: none (박스 미표시)
   *    [2] JS 가 .recent-item 개수 확인 → 빈 카드는 is-empty / data-empty 부여
   *    [3] JS 마지막에 body 에 'is-aside-ready' 부여
   *    [4] CSS 가 비어있지 않은 박스만 노출 → 한 번의 페인트로 완성
   *  ※ 적용 대상: .box-recent--popular, .box-recent--recent
   *  ※ JS 비활성 환경: 'is-aside-ready' 미부여 → 박스 미표시 (의도된 fallback) */
/*   --aside-checkable-display-pre:  none; */
/*   --aside-checkable-display-post: block; */

  /* ─ Article-lead (H1 아래 설명) ─
   *  시안: 약 2줄에서 끝나도록 line-clamp */
/*   --article-lead-line-clamp:  2; */
/*   --article-summary-source-display: none;   본문 상단 요약 원본([data-summary]/.post-summary) 사전 숨김 (단계 7). 규칙은 stage3.css  */

  /* ─ Article-writer (작성자 이름) ─
   *  시안: 날짜와 동일한 muted 톤 / weight medium */
/*   --color-article-writer:     var(--color-article-meta); */
/*   --weight-article-writer:    var(--weight-medium); */

  /* ─ Article-related (함께 보면 좋은 글) ─ 기준 정리 §36·§37·§38·§39 적용
   *
   *  ▣ §36 영역: 위 간격 46px (--space-article-related-top),
   *              내부 위 여백 32px, 위 구분선 1px solid #E8E2DA, 아래 여백 8px
   *  ▣ §37 제목: 24px / #222 / 아래 8px
   *  ▣ §38 설명 (선택): 14.5px / #6B7280 / 줄간격 1.7 / 아래 17px
   *  ▣ §39 카드: 배경 #FFFFFF, 테두리 1px #E8E2DA, radius 18px, min-height 104px,
   *              padding 17px 40px 17px 17px (오른쪽 화살표 자리),
   *              그림자 0 6px 16px rgba(47,111,115,0.035), 카드 간격 12px
   *
   * ※ 시맨틱 변경: 기준 §36 은 영역 자체에 배경/테두리 없음 (구분선만)
   *   → 이전 시안 매칭 (외곽 크림 카드 + 흰 내부) 에서 "구분선 + 흰 내부 카드만" 으로 변경
   * ※ 썸네일은 시안 매칭 유지 (display: none) */
/*   --related-card-bg:          transparent;                       기준 §36: 외곽 배경 없음 (이전 #FFF8EF 변경)  */
/*   --related-card-border:      0;                                 기준 §36: 외곽 테두리 없음 (이전 border-soft 변경)  */
/*   --related-card-radius:      0;                                 기준 §36: 외곽 radius 없음  */
/*   --related-card-pad-top:     32px;                              기준 §36: 내부 위 여백 32px (스케일 외)  */
/*   --related-card-pad-x:       0;                                 좌우 패딩 없음 (외곽 박스 제거됨)  */
/*   --related-card-pad-bottom:  var(--space-2);                    8px - 기준 §36  */
/*   --related-grid-cols-pc:     3;                                 기존 유지  */
/*   --related-grid-cols-mobile: 1; */
/*   --related-grid-gap:         var(--space-3);                    12px - 기준 §39  */

  /* §36 위 구분선 - 기존 ::before 메커니즘 유지 */
/*   --related-border-top:       var(--border-soft); */

  /* §37 제목 */
/*   --related-title-size:       var(--text-5xl);                   24px - 기준 §37  */
/*   --related-title-color:      var(--color-article-title);        #222 - 기준 §37  */
/*   --related-title-bottom:     var(--space-2);                    8px - 기준 §37  */

  /* §38 설명 (선택, 작성자가 추가 가능) */
/*   --related-desc-size:        14.5px;                            기준 §38 (스케일 외)  */
/*   --related-desc-color:       var(--color-article-meta);         #6B7280 - 기준 §38  */
/*   --related-desc-line:        var(--leading-relaxed);            1.7 - 기준 §38  */
/*   --related-desc-bottom:      17px;                              기준 §38 (스케일 외)  */

  /* §39 카드 (개별 .related-link) */
/*   --related-item-bg:          var(--color-card);                 #FFFFFF - 기준 §39 (유지)  */
/*   --related-item-border:      var(--border-soft);                1px solid #E8E2DA - 기준 §39 (유지)  */
/*   --related-item-pad:         17px 40px 17px 17px;               기준 §39: 오른쪽 화살표 자리 확보  */
/*   --related-item-radius:      var(--radius-lg);                  18px - 기준 §39 (이전 14 → 18)  */
/*   --related-item-min-h:       104px;                             기준 §39 (스케일 외)  */
/*   --related-item-shadow:      0 6px 16px rgba(47, 111, 115, 0.035);   기준 §39 (이전 그림자 없음 → 신규 추가)  */
/*   --related-item-shadow-hover: var(--related-item-shadow);       hover 시 동일 (translateY 만 추가 효과)  */
/*   --related-thumb-display:    none;                              시안: 썸네일 안 보임 (기존 유지)  */

  /* ─ Article-footer 상단 구분선 ─
   *  본문 카드 안 article-footer 시작 지점의 hairline.
   *  함께 보면 좋은 글 박스가 이미 자체 테두리·배경으로 충분히 구획되므로
   *  중복된 시각 분리감을 제거하기 위해 none 처리. 다시 살리고 싶으면
   *  var(--border-soft) 등으로 한 줄만 교체. */
/*   --article-footer-border-top: none; */

  /* ─ Article-tag (본문 끝 태그) ─ 기준 정리 §34·§35 적용
   * ※ 시맨틱 변경: 기존 .article-tag .tag-list a 는 secondary 배경 + primary 글씨 (시안 톤)
   *   기준 §35 는 #FFFFFF 배경 + #6B7280 글씨 (외곽 라인 강조) — 톤 변경 필수
   * ※ §34 박스: 위아래 32px 0, 태그 간격 9px
   * ※ §35 버튼: #FFFFFF / 테두리 1px #E8E2DA / radius 999px / min-h 36 /
   *             padding 7 12 / 글씨 13px / 색 #6B7280 */
/*   --article-tag-y:           32px;                                   기준 §34: 위아래 간격 32 0  */
/*   --article-tag-gap:         9px;                                    기준 §34: 태그 간격 9px (스케일 외)  */
/*   --tag-btn-bg:              var(--color-card);                      #FFFFFF - 기준 §35 (이전 secondary 변경)  */
/*   --tag-btn-color:           var(--color-muted);                     #6B7280 - 기준 §35 (이전 primary 변경)  */
/*   --tag-btn-border:          var(--border-soft);                     1px solid #E8E2DA - 기준 §35  */
/*   --tag-btn-radius:          var(--radius-pill);                     999px - 기준 §35  */
/*   --tag-btn-min-h:           var(--pill-h-lg);                       36px - 기준 §35  */
/*   --tag-btn-pad-y:           7px;                                    기준 §35  */
/*   --tag-btn-pad-x:           var(--space-3);                         12px - 기준 §35  */
/*   --tag-btn-font-size:       var(--text-sm);                         13px - 기준 §35  */
/*   --tag-btn-font-weight:     var(--weight-bold);                     700 - 기준 미명시, 기존 유지  */
  /* hover - 기준 정리 명시 없음, 기존 transition 패밀리 유지 */
/*   --tag-btn-bg-hover:        var(--color-secondary-soft); */
/*   --tag-btn-color-hover:     var(--color-primary); */

  /* ─ Article-page (이전글 / 다음글) ─ 기준 정리 §40·§41 적용
   * ※ §40: 2열 구조, 간격 12px, 위 간격 28px, 위 padding 24px, 위 구분선 1px #E8E2DA
   * ※ §41 카드: 배경 transparent (이전 secondary-soft 변경), 테두리 1px #E8E2DA (이전 teal 변경),
   *             radius 18px (이전 14 변경), padding 17 18, 그림자 없음 */
/*   --article-page-cols:       2;                                      기준 §40  */
/*   --article-page-gap:        var(--space-3);                         12px - 기준 §40  */
/*   --article-page-top:        28px;                                   기준 §40: 위 간격 28px (스케일 외)  */
/*   --article-page-pad-top:    var(--space-6);                         24px - 기준 §40  */
/*   --article-page-border-top: var(--border-soft);                     1px solid #E8E2DA - 기준 §40  */
/*   --article-page-card-bg:        transparent;                        기준 §41 (이전 secondary-soft 변경)  */
/*   --article-page-card-border:    var(--border-soft);                 1px solid #E8E2DA - 기준 §41 (이전 border-teal 변경)  */
/*   --article-page-card-radius:    var(--radius-lg);                   18px - 기준 §41 (이전 --radius-md 14 → 18)  */
/*   --article-page-card-pad-y:     17px;                               기준 §41  */
/*   --article-page-card-pad-x:     18px;                               기준 §41  */
/*   --article-page-card-shadow:    none;                               기준 §41: 그림자 없음 (기존 유지)  */
  /* hover - 기준 정리 명시 없음, 기존 톤 변형 패밀리 유지 */
/*   --article-page-card-bg-hover:  var(--color-secondary-soft); */


  /* ─ 댓글 등록 버튼 ─
   *  TOC pill (.toc-link) 과 동일한 "옅은 세이지 알약" 패턴 사용:
   *  옅은 세이지 배경 + 검정 글씨 + 옅은 청록 hairline. hover 시 살짝 진해지며
   *  글씨도 청록으로 전환되어 affordance(누를 수 있음) 신호.
   *  TOC pill 처럼 모든 시각·치수 속성을 컴포넌트 레이어 토큰으로 감싸,
   *  댓글 버튼 톤만 조정해도 다른 일반 버튼은 영향받지 않도록 분리. */
/*   --reply-submit-bg:           var(--color-secondary-soft);    옅은 세이지 #EEF5F1 — TOC pill 동일  */
/*   --reply-submit-color:        var(--color-text);              검정 글씨 — TOC pill 동일  */
/*   --reply-submit-border:       var(--border-teal);             옅은 청록 hairline — TOC pill 동일  */
/*   --reply-submit-bg-hover:     var(--color-secondary);         hover 시 살짝 진한 세이지  */
/*   --reply-submit-color-hover:  var(--color-primary);           hover 시 청록 글씨  */
/*   --reply-submit-h:            var(--btn-h);                   높이 — 공통 버튼 토큰 매핑  */
/*   --reply-submit-pad-x:        var(--btn-pad-x);               좌우 패딩 — 공통 버튼 토큰 매핑  */
/*   --reply-submit-radius:       var(--btn-radius);              모서리 — 공통 버튼 토큰 매핑  */
/*   --reply-submit-font-size:    var(--text-md);                 폰트 크기  */
/*   --reply-submit-font-weight:  var(--weight-bold);             굵기  */
/*   --reply-submit-white-space:  nowrap;                         한국어 2글자("등록") 좁은 폭 줄바꿈 방지  */
/* } */


/* ════════════════════════════════════════════════════════════════════
 * 중간 플러스 추천값 — :root 매핑 (PC 베이스값으로 컴포넌트 토큰 갱신)
 *
 *  ※ 위 신규 토큰을 기존 컴포넌트 토큰과 연결한다.
 *     모바일 값은 미디어 쿼리(@media max-width: 768px)에서 동일 토큰을 재정의.
 * ════════════════════════════════════════════════════════════════════ */
/* ════════════════════════════════════════════════════════════════════
   📚 토큰 박물관 (블록 2) — PC 베이스 매핑 / 추가 컴포넌트 토큰
   ──────────────────────────────────────────────────────────────────
   ▣ 실제 작동 정의: index.html <head> 인라인 (단일 출처)
   ▣ 아래는 디자인 의도 / 시안 매핑 참조용 주석
   ════════════════════════════════════════════════════════════════════ */

/* :root { */
  /* 헤더 둥근값 / 메뉴 간격 (PC 베이스) */
/*   --header-radius:           var(--header-radius-pc);    32px  */
/*   --header-menu-gap:         var(--header-menu-gap-pc);  26px  */

  /* 헤더 메뉴 링크 색
   *  메인화면 상세값 §4: 글씨색 #4B5563 / hover 색상 #2F6F73
   *  ※ 메뉴는 항상 클릭 가능한 보조 네비라 본문 텍스트보다 시각 무게가 낮음. */
/*   --color-site-nav-link:       #4B5563; */
/*   --color-site-nav-link-hover: var(--color-primary); */

  /* 푸터 카테고리·운영 안내 링크 색
   *  헤더 메뉴와 동일한 muted 회색 + primary hover 톤으로 통일.
   *  푸터 또한 보조 네비라 본문 텍스트(#222) 보다 한 단계 낮은 시각 무게가 자연스러움. */
/*   --color-footer-link:         var(--color-muted); */
/*   --color-footer-link-hover:   var(--color-primary); */

  /* 제휴 안내 박스 PC padding (모바일은 @media 에서 --affiliate-pad-y-mobile / -x-mobile 사용) — 기준 정리 §1 */
/*   --affiliate-pad-y:         26px;      기준 §1 PC: 26px (스케일 외)  */
/*   --affiliate-pad-x:         30px;      기준 §1 PC: 30px (스케일 외)  */

  /* 인기글 항목 여백 — PC 값으로 갱신
   * ※ 사용자 요청으로 기준표 §20 (18×19) 미적용, 기존 PC 값(19×21) 유지 */
/*   --popular-row-pad-y:       var(--popular-row-pad-y-pc);    19px  */
/*   --popular-row-pad-x:       var(--popular-row-pad-x-pc);    21px  */

  /* Tistory 에디터 글씨 크기 매핑 — PC base
   * ※ 모바일 @media 안에서 var(--text-ke-size-N-mobile) 로 재할당됨 */
/*   --text-ke-size-12:  var(--text-ke-size-12-pc); */
/*   --text-ke-size-14:  var(--text-ke-size-14-pc); */
/*   --text-ke-size-15:  var(--text-ke-size-15-pc); */
/*   --text-ke-size-16:  var(--text-ke-size-16-pc); */
/*   --text-ke-size-17:  var(--text-ke-size-17-pc); */
/*   --text-ke-size-18:  var(--text-ke-size-18-pc); */
/*   --text-ke-size-20:  var(--text-ke-size-20-pc); */
/*   --text-ke-size-22:  var(--text-ke-size-22-pc); */
/*   --text-ke-size-24:  var(--text-ke-size-24-pc); */
/*   --text-ke-size-26:  var(--text-ke-size-26-pc); */
/*   --text-ke-size-28:  var(--text-ke-size-28-pc); */
/*   --text-ke-size-30:  var(--text-ke-size-30-pc); */
/*   --text-ke-size-32:  var(--text-ke-size-32-pc); */
/*   --text-ke-size-34:  var(--text-ke-size-34-pc); */
/*   --text-ke-size-36:  var(--text-ke-size-36-pc); */
/*   --text-ke-size-38:  var(--text-ke-size-38-pc); */


  /* ════════════════════════════════════════════════════════════════════
   * 4단계 — 기준 정리.txt 모바일 본문 페이지 §1~§21 모바일 토큰
   *
   *   ※ PC 토큰과 짝지어진 모바일 전용 토큰 모음.
   *      실제 swap 은 @media (max-width: 768px) 블록의 컴포넌트 적용부에서 처리.
   *      각 토큰은 기준 정리.txt 모바일 표의 정확값을 그대로 반영.
   * ════════════════════════════════════════════════════════════════════ */

  /* §3 본문 메인 카드 모바일 */
/*   --article-card-radius-mobile:   var(--radius-3xl);                        28px - 기준 모바일 §3  */
  /* 기존 --shadow-article-card-mobile: none (모바일 그림자 일괄 끔) 과 별도로,
   * 기준 모바일 §3 의 정확값을 명시 토큰으로 보관. 필요 시 컴포넌트 적용부에서 사용. */
/*   --article-card-shadow-mobile:   0 10px 26px rgba(47, 111, 115, 0.06);     기준 모바일 §3  */
/*   --space-article-pad-mobile:     30px;                                     기준 모바일 §3: 내부 30px  */

  /* §4 카테고리 라벨 모바일 */
/*   --category-label-pad-y-mobile:  7px;                                      기준 모바일 §4  */
/*   --category-label-pad-x-mobile:  13px;                                     기준 모바일 §4  */
/*   --category-label-bottom-mobile: var(--space-4);                           16px - 기준 모바일 §4  */

  /* §5 H1 제목 모바일 — 기준 모바일 §5: 32px / 줄간격 1.28 / 자간 -0.055em / 아래 14px
   * ※ 기존 --text-article-title-mobile (33px) 을 32px 로 모바일 @media 에서 override */
/*   --leading-display-mobile:        1.28;                                    기준 모바일 §5  */
/*   --space-article-title-bottom-mobile: 14px;                                기준 모바일 §5  */

  /* §6 리드문 모바일 */
  /* --text-article-lead-mobile 16px ✓ 기존 일치 */
/*   --space-article-lead-bottom-mobile:  var(--space-5);                      20px - 기준 모바일 §6  */
  /* 줄간격 1.78 은 PC 와 동일 → --leading-loose 그대로 사용 */

  /* §7 메타 정보 모바일 */
  /* --text-article-meta-mobile 13px ✓ 기존 일치 */
/*   --space-article-meta-gap-mobile:        9px;                              기준 모바일 §7  */
/*   --space-article-meta-pad-bottom-mobile: 22px;                             기준 모바일 §7  */
/*   --space-article-meta-bottom-mobile:     var(--space-6);                   24px - 기준 모바일 §7  */

  /* §8 대표 이미지 모바일 — 단계 6 갱신 (2026-05-26): 모바일 height 오버라이드 폐기
   *  ※ 이전 변천사:
   *    - 220px (초기) → cover 시 좁은 viewport 좌·우 잘림 → auto 로 변경 (잘림 방지)
   *    - auto (단계 5) → PC 와 비율 불일치 → 단계 6 에서 PC/모바일 모두 aspect-ratio 16:9 통일
   *  ※ 단계 6 변경 내역:
   *    - 본문 베너 이미지 1600×900 (16:9) 표준화 — 잘림 0% 정렬을 위해 모든 viewport 동일 비율 채택
   *    - stage3 §7 의 .post-hero img 가 aspect-ratio: var(--post-hero-img-aspect) (16/9) 으로 통일됨
   *    - stage4 §8 의 모바일 height 오버라이드 규칙 자체가 제거됨 (필요 없음)
   *    - 토큰 --post-hero-img-h-mobile 도 :root 에서 제거됨
   *  ※ 모바일 hero 영역 시각 변화: 이전 (이미지 원본 비율) → 신규 (16:9 cover) */
/*   --post-hero-img-h-mobile:        auto;                                    [폐기] 단계 6: aspect-ratio 통일로 모바일 height 오버라이드 제거  */
/*   --post-hero-radius-mobile:       var(--radius-2xl);                       24px - 기준 모바일 §8 (이전 PC 28 → 모바일 24)  */
/*   --space-article-thumb-bottom-mobile: var(--space-6);                      24px - 기준 모바일 §8  */

  /* §9 제휴 안내 박스 모바일 — 기준 모바일 §9 (1단계 §1 값과 충돌 → §9 우선 갱신)
   * ※ 1단계 적용 (padding 16×18, 글씨 13.5, 아래 20) → 모바일 §9 정확값으로 갱신
   * ※ 기존 --affiliate-pad-y/x-mobile, --text-affiliate-mobile, --space-affiliate-bottom-mobile
   *    값을 모바일 @media 안에서 직접 override (이 토큰 자체는 1단계 값 유지하여 호환성) */
/*   --leading-affiliate-mobile:      var(--leading-product-desc);             1.68 - 기준 모바일 §9 (--leading-product-desc 1.68 재사용)  */

  /* §10 핵심 요약 박스 모바일 */
/*   --summary-radius-mobile:         var(--radius-2xl);                       24px - 기준 모바일 §10 (PC 와 동일)  */
/*   --summary-pad-mobile:            22px;                                    기준 모바일 §10 (PC 27 → 모바일 22, 스케일 외)  */
/*   --space-article-summary-bottom-mobile: 30px;                              기준 모바일 §10 (PC 34 → 모바일 30, 스케일 외)  */

  /* §12 H2 / H3 / 문단 모바일 — 기준 모바일 §12 */
  /* ※ 기존 --text-article-h2-mobile (24px) 을 25px 로 모바일 @media 에서 override */
/*   --space-article-h2-top-mobile:   var(--space-9);                          36px - 기준 모바일 §12  */
/*   --space-article-h2-bottom-mobile: 13px;                                   기준 모바일 §12 (스케일 외)  */
/*   --leading-h2-mobile:             1.36;                                    기준 모바일 §12  */
/*   --space-article-h3-top-mobile:   26px;                                    기준 모바일 §12 (스케일 외)  */
/*   --space-article-h3-bottom-mobile: 10px;                                   기준 모바일 §12  */
/*   --space-article-paragraph-bottom-mobile: 18px;                            기준 모바일 §12 (스케일 외)  */

  /* §13 광고 박스 모바일 */
/*   --ad-pad-mobile:                 var(--space-6);                          24px - 기준 모바일 §13 (PC 26 → 모바일 24)  */
/*   --ad-font-size-mobile:           13.5px;                                  기준 모바일 §13 (스케일 외)  */
/*   --space-article-ad-y-mobile:     30px;                                    기준 모바일 §13 (PC 32 → 모바일 30, 스케일 외)  */

  /* §14 비교표 모바일 + 가로 스크롤 */
/*   --table-radius-mobile:           20px;                                    기준 모바일 §14 (스케일 외)  */
/*   --text-table-mobile:             var(--text-base);                        14px - 기준 모바일 §14  */
/*   --space-table-pad-y-mobile:      var(--space-4);                          14 ≈ 16, --space-4 사용 (스케일 정렬)  */
/*   --space-table-pad-x-mobile:      15px;                                    기준 모바일 §14 (스케일 외)  */
/*   --space-table-top-mobile:        var(--space-5);                          20px - 기준 모바일 §14  */
/*   --space-table-bottom-mobile:     30px;                                    기준 모바일 §14 (스케일 외)  */

  /* §15·§16·§17 상품 카드 모바일 — 1열 + 큰 이미지 */
/*   --product-radius-mobile:         var(--radius-2xl);                       24px - 기준 모바일 §15  */
/*   --product-pad-mobile:            22px;                                    기준 모바일 §15 (스케일 외)  */
/*   --product-gap-mobile:            18px;                                    기준 모바일 §15 (스케일 외)  */
/*   --product-shadow-mobile:         0 8px 22px rgba(47, 111, 115, 0.055);    기준 모바일 §15  */
/*   --space-article-product-y-mobile: var(--space-6);                         24px - 기준 모바일 §15  */
/*   --product-thumb-w-mobile:        100%;                                    기준 모바일 §16: 1열  */
/*   --product-thumb-h-mobile:        220px;                                   기준 모바일 §16  */
/*   --product-thumb-radius-mobile:   var(--radius-xl);                        22px - 기준 모바일 §16 (PC와 동일)  */
/*   --product-name-size-mobile:      var(--text-3xl);                         20px - 기준 모바일 §17  */
/*   --product-desc-size-mobile:      14.5px;                                  기준 모바일 §17 (스케일 외)  */
/*   --product-label-size-mobile:     var(--text-xs);                          12px - 기준 모바일 §17  */
/*   --product-stats-cols-mobile:     1;                                       기준 모바일 §17: 포인트 박스 1열  */
/*   --product-stat-font-size-mobile: var(--text-sm);                          13px - 기준 모바일 §17  */
/*   --product-stat-pad-mobile:       11px;                                    기준 모바일 §17 (PC와 동일)  */
/*   --product-stat-radius-mobile:    15px;                                    기준 모바일 §17 (PC와 동일)  */

  /* §18 CTA 버튼 모바일 */
/*   --cta-radius-mobile:             var(--space-4);                          16px - 기준 모바일 §18 (--space-4 = 16)  */
/*   --cta-min-h-mobile:              var(--btn-h);                            48px - 기준 모바일 §18  */
/*   --cta-pad-y-mobile:              var(--space-4);                          14 ≈ 16, --space-4 사용 (스케일 정렬)  */
/*   --cta-pad-x-mobile:              var(--space-5);                          20px - 기준 모바일 §18  */
/*   --cta-font-size-mobile:          var(--text-base);                        14px - 기준 모바일 §18  */
/*   --cta-width-mobile:              100%;                                    기준 모바일 §18: 100% 추천  */

  /* §19 장점/아쉬운 점 모바일 — 1열 */
/*   --proscons-cols-mobile:          1;                                       기준 모바일 §19  */
/*   --proscons-gap-mobile:           var(--space-4);                          14 ≈ 16, --space-4 사용 (스케일 정렬, 기준 §19)  */
/*   --proscons-radius-mobile:        var(--radius-xl);                        22px - 기준 모바일 §19 (PC와 동일)  */
/*   --proscons-pad-mobile:           var(--space-5);                          20px - 기준 모바일 §19  */
/*   --proscons-list-size-mobile:     var(--text-md);                          15px - 기준 모바일 §19  */
/*   --proscons-list-line-mobile:     1.74;                                    기준 모바일 §19  */

  /* §20 마무리 CTA 박스 모바일 */
/*   --conclusion-radius-mobile:      var(--radius-2xl);                       24px - 기준 모바일 §20  */
/*   --conclusion-pad-mobile:         22px;                                    기준 모바일 §20 (스케일 외)  */
/*   --conclusion-top-mobile:         38px;                                    기준 모바일 §20 (스케일 외)  */
/*   --conclusion-bottom-mobile:      30px;                                    기준 모바일 §20  */
/*   --conclusion-title-size-mobile:  23px;                                    기준 모바일 §20 (스케일 외)  */
/*   --conclusion-text-size-mobile:   15.5px;                                  기준 모바일 §20 (스케일 외)  */

  /* §21 태그 모바일 */
/*   --article-tag-y-mobile:          30px;                                    기준 모바일 §21  */
/*   --tag-btn-min-h-mobile:          var(--touch-target-min);                 44px - WCAG 2.1 AA [중요].txt #9 (이전 34px)  */
/*   --tag-btn-pad-y-mobile:          7px;                                     기준 모바일 §21  */
/*   --tag-btn-pad-x-mobile:          11px;                                    기준 모바일 §21  */
/*   --tag-btn-font-size-mobile:      12.5px;                                  기준 모바일 §21 (스케일 외)  */

  /* §21 관련글 모바일 */
/*   --related-title-size-mobile:     23px;                                    기준 모바일 §21 (스케일 외)  */
/*   --related-desc-size-mobile:      var(--text-base);                        14px - 기준 모바일 §21  */
/*   --related-item-pad-mobile:       17px;                                    기준 모바일 §21 (스케일 외)  */
/*   --related-item-radius-mobile:    var(--radius-lg);                        18px - 기준 모바일 §21 (PC와 동일)  */
/*   --related-grid-gap-mobile:       10px;                                    기준 모바일 §21  */

  /* §21 이전글 / 다음글 모바일 */
/*   --article-page-cols-mobile:      1;                                       기준 모바일 §21: 1열  */
/*   --article-page-gap-mobile:       10px;                                    기준 모바일 §21  */
/*   --article-page-card-pad-y-mobile: var(--space-4);                         16px - 기준 모바일 §21  */
/*   --article-page-card-pad-x-mobile: 17px;                                   기준 모바일 §21 (스케일 외)  */
/*   --article-page-card-radius-mobile: var(--radius-lg);                      18px - 기준 모바일 §21 (PC와 동일)  */

  /* §21 댓글 영역 자리 모바일 */
/*   --comments-top-mobile:           22px;                                    기준 모바일 §21 (스케일 외)  */
/*   --comments-radius-mobile:        20px;                                    기준 모바일 §21 (스케일 외)  */
/*   --comments-pad-mobile:           var(--space-5);                          20px - 기준 모바일 §21  */
/*   --comments-font-size-mobile:     var(--text-sm);                          13px - 기준 모바일 §21  */

  /* §22 본문 figure / imageblock / imagegridblock — 모바일 viewport 초과 방지
   *  ※ 티스토리 에디터가 figure 에 인라인 width(원본 px)를 박는 경우,
   *    모바일에서 컨테이너가 viewport 를 넘어가 좌·우로 잘리는 현상 차단.
   *  ※ 컨테이너 max-width + 내부 img height(auto) 조합으로 비율 자동 유지.
   *  ※ stage3.css §32 (이미지 / figure / imageblock 컨테이너) 에서 적용. */
/*   --article-figure-max-w:          100%;                                    figure/imageblock 컨테이너 최대 너비  */
/*   --article-figure-img-h:          auto;                                    내부 img 높이 (비율 자동)  */

  /* §23 메인 카드 썸네일 비율 — .post-card-thumb aspect-ratio
   *  ※ 16/9 (1.78) 채택: 카드의 가로 긴 비율이 디자인적으로 정돈됨.
   *  ※ 정사각형 대표 이미지(1:1) 그대로 cover 시 위·아래 44% 잘림 문제는
   *    단계 5 옵션 2 (skin-init.js [3] 카드 베너 동적 교체) 로 해결:
   *    background-image 만 본문 첫 이미지(베너)로 교체, .post-card-thumb-img
   *    의 src 는 정사각형 대표 이미지 유지 → og:image / 포털 검색 분리 보존.
   *  ※ 적용 위치: 본 style.css §57 (.post-card-thumb) + HTML 인라인 동일 규칙.
   *  ※ 토큰 한 줄 변경으로 다른 비율(1/1, 3/2, 5/4 등)로 즉시 전환 가능. */
/*   --post-card-thumb-aspect:        16 / 9;                                  메인 카드 썸네일 박스 비율  */
/* } */


/* ════════════════════════════════════════════════════════════════════
   1-D. 다크 모드 색상 토큰 — [중요].txt #16
   ────────────────────────────────────────────────────────────────────
   설계 원칙:
   - 톤: "따뜻한 다크 (세피아 베이스)" — 라이트 모드 베이지 톤과 자연스러운 페어
   - 대응: prefers-color-scheme: dark 자동 감지 (OS 설정 따름)
   - 범위: 전체 페이지 (article-view 포함 모든 영역)
   - 단일 값 토큰 24개만 재정의 → var(--color-*) 참조 변수는 자동 반영
   - !important 미사용, 시맨틱+컴포넌트 2단 구조 그대로

   유지되는 토큰 (의도적 — 다크에서도 동일하게):
   - --color-accent, --color-accent-hover, --color-accent-active
     ( 오렌지 #F4A261 톤은 다크에서도 가독성·브랜드 일관성 모두 우수 )

   미세 조정 대상 (단계 4 검토 예정):
   - --ad-bg, --comments-bg (단일 rgba 흰색) — 본문 박스 placeholder 톤
   - 그림자(--shadow-*) — 현재 primary-rgba 기반이라 다크에서도 대체로 OK
   ════════════════════════════════════════════════════════════════════ */
/* ════════════════════════════════════════════════════════════════════
   📚 다크모드 토큰 박물관 — 단일 출처는 index.html <head> 인라인
   ────────────────────────────────────────────────────────────────────
   ▣ 실제 작동: index.html 의 <style> 블록 안 @media (prefers-color-scheme: dark)
   ▣ 아래는 시안 매핑 / 디자인 의도 보존용 주석 (비활성)
   ════════════════════════════════════════════════════════════════════ */
/* @media (prefers-color-scheme: dark) { */
/*   :root { */
    /* 기본 시맨틱 (line 44-68 라이트 대응 다크 톤) */
/*     --color-bg:               #1F1B16;                           세피아 다크 (베이지 반전)  */
/*     --color-card:             #2A2520;                           한 단계 밝은 세피아  */
/*     --color-primary:          #5BAEB3;                           청록 밝게 (대비 ↑)  */
/*     --color-primary-dark:     #4A9398;                           다크모드 hover/active 보정  */
/*     --color-primary-soft:     rgba(91, 174, 179, 0.18);          밝은 청록 투명  */
/*     --color-secondary:        #3A4F4C;                           어두운 세이지  */
/*     --color-secondary-soft:   #2F4341;                           더 어두운 세이지  */
/*     --color-secondary-border: rgba(91, 174, 179, 0.28); */
    /* accent (오렌지) 는 다크에서도 톤 유지 — 대비·브랜드 일관성 ↑ */
/*     --color-accent-soft:      #3D2F22;                           어두운 세피아-오렌지  */
/*     --color-accent-soft-hover:#4D3D2E; */
/*     --color-accent-border:    rgba(244, 162, 97, 0.55);          더 진하게 (대비 ↑)  */
/*     --color-notice-bg:        #2F2820;                           어두운 세피아  */
/*     --color-text:             #F0E8DA;                           밝은 베이지 (본문)  */
/*     --color-text-strong:      #F8F2E6;                           더 밝은 베이지 (강조)  */
/*     --color-muted:            #A8A095;                           회색 베이지 (메타)  */
/*     --color-muted-light:      #7A7268;                           어두운 회색 베이지  */
/*     --color-line:             #3A332A;                           어두운 베이지 라인  */
/*     --color-focus-ring:       rgba(91, 174, 179, 0.45);          다크에서 더 진하게  */
/*     --color-input-focus-bg:   rgba(91, 174, 179, 0.20); */

    /* placeholder 점선 색 (line 1316) */
/*     --placeholder-border-color: #5A4F40;                         어두운 세피아-베이지  */

    /* 데스크탑 네비 링크 (line 1819) */
/*     --color-site-nav-link:    #B5BFC9;                           밝은 그레이  */
/*   } */
/* } */


/* ════════════════════════════════════════════════════════════════════
   2. 리셋 / 정규화 (최소한)
   ════════════════════════════════════════════════════════════════════ */
*,
*::before,
*::after {
  box-sizing: border-box;
}

html {
  -webkit-text-size-adjust: 100%;
  text-size-adjust: 100%;
  line-height: 1.15;
}

body {
  margin: 0;
}

article, aside, footer, header, main, nav, section {
  display: block;
}

h1, h2, h3, h4, h5, h6, p, ul, ol, dl, dd, figure, blockquote {
  margin: 0;
}

ul, ol {
  padding: 0;
  list-style: none;
}

img, svg, video {
  max-width: 100%;
  height: auto;
  vertical-align: middle;
  border-style: none;
}

button {
  font: inherit;
  background: transparent;
  border: 0;
  cursor: pointer;
  color: inherit;
  padding: 0;
}

input, textarea, select {
  font: inherit;
  color: inherit;
}

a {
  color: inherit;
  text-decoration: none;
}

table {
  border-collapse: collapse;
  border-spacing: 0;
}

address {
  font-style: normal;
}

hr {
  box-sizing: content-box;
  height: 0;
  overflow: visible;
}


/* ════════════════════════════════════════════════════════════════════
   3. 베이스 / 바디
   ════════════════════════════════════════════════════════════════════ */
html,
body {
  height: 100%;
}

body.theme-odyssey-custom {
  font-family: var(--font-base);
  font-size: var(--text-md);
  /* 중간 플러스 추천값: 전체 줄간격 1.74 (--leading-body) */
  line-height: var(--leading-body);
  letter-spacing: var(--letter-spacing);
  color: var(--color-text);
  background-color: var(--color-bg);
  -webkit-font-smoothing: antialiased;
  -moz-osx-font-smoothing: grayscale;
  text-rendering: optimizeLegibility;
}

/* 접근성 - 화면 낭독기에만 보임 */
.screen-out,
.blind {
  position: absolute;
  overflow: hidden;
  clip: rect(0 0 0 0);
  margin: -1px;
  width: var(--hairline);
  height: var(--hairline);
  white-space: nowrap;
}

/* ────────────────────────────────────────────────────────────────────
   접근성 (a11y) - Skip to main content (키보드 사용자)
   - 평소: 화면 밖으로 숨김 (transform translateY(-100%))
   - Tab 포커스 시: 좌상단 슬라이드 인
   ──────────────────────────────────────────────────────────────────── */
body.theme-odyssey-custom .skip-to-content {
  position: absolute;
  top: 0;
  left: 0;
  /* 평소: 화면 밖으로 숨김 */
  transform: translateY(-100%);
  z-index: var(--z-modal);
  display: inline-flex;
  align-items: center;
  height: var(--btn-h);
  padding: 0 var(--space-5);
  background-color: var(--color-primary);
  color: var(--color-card);
  border-radius: 0 0 var(--radius-md) 0;
  font-size: var(--text-md);
  font-weight: var(--weight-bold);
  text-decoration: none;
  letter-spacing: var(--letter-spacing);
  transition: transform var(--duration-base) var(--ease-soft);
}
body.theme-odyssey-custom .skip-to-content:focus,
body.theme-odyssey-custom .skip-to-content:focus-visible {
  /* Tab 포커스 시: 화면 안으로 슬라이드 */
  transform: translateY(0);
}

/* 접근성 + 시각: aria-current="page" 표시 (현재 페이지 강조)
   - JS 가 자동으로 부착: .site-nav a, .site-nav-fallback a,
     .mobile-menu-cat-link, .mobile-foot-link, .footer-link */
body.theme-odyssey-custom .site-nav a[aria-current="page"],
body.theme-odyssey-custom .site-nav-fallback a[aria-current="page"],
body.theme-odyssey-custom .site-nav-link[aria-current="page"],
body.theme-odyssey-custom .mobile-menu-cat-link[aria-current="page"],
body.theme-odyssey-custom .mobile-foot-link[aria-current="page"],
body.theme-odyssey-custom .footer-link[aria-current="page"] {
  color: var(--color-primary);
}

/* 텍스트 선택 */
body.theme-odyssey-custom ::selection {
  background-color: var(--color-primary-soft);
  color: var(--color-primary-dark);
}

/* 포커스 (접근성) */
/* 포커스 (접근성) - 추가.txt: "Focus 시스템" / "주황 CTA 도 포커스는 청록색" */
body.theme-odyssey-custom a:focus-visible,
body.theme-odyssey-custom button:focus-visible,
body.theme-odyssey-custom input:focus-visible,
body.theme-odyssey-custom textarea:focus-visible {
  outline: var(--focus-ring-w) solid var(--color-focus-ring);
  outline-offset: var(--focus-ring-offset);
}


/* ════════════════════════════════════════════════════════════════════
   4. 레이아웃 - wrap / container / main
   ════════════════════════════════════════════════════════════════════ */
body.theme-odyssey-custom #wrap {
  position: relative;
  min-height: 100%;
  padding: var(--page-pad-top) var(--page-pad-x) var(--page-pad-bottom);
  max-width: var(--container-max);
  margin: 0 auto;
  /* clip: 가로 overflow 만 차단하고 세로 scroll context 는 생성 안 함
   * (hidden 은 다른 축에 암묵적 overflow:auto 를 적용해 내부 sticky 요소 동작에 영향) */
  overflow-x: clip;
}

body.theme-odyssey-custom #container {
  /* 추가.txt: 헤더 아래 간격 34px */
  margin-top: var(--space-header-margin);
}

body.theme-odyssey-custom .main {
  display: block;
}


/* ════════════════════════════════════════════════════════════════════
   5. 공통 카드 / 버튼 / 입력창 베이스
   ════════════════════════════════════════════════════════════════════ */

/* ─ 공통 카드 베이스 (bg / border 만 공유 - radius 는 컴포넌트별 토큰으로 분기) ─
 *  ※ 메인화면 상세값.txt 에서 컴포넌트별 radius 가 모두 다름:
 *     헤더 28 / 히어로 34 / 히어로 사이드 28 / 카테고리 30 / 사이드바 30 / 푸터 32
 *  ※ 각 컴포넌트의 border-radius 는 아래 개별 셀렉터에서 컴포넌트 토큰으로 지정 */
body.theme-odyssey-custom .card,
body.theme-odyssey-custom .site-header,
body.theme-odyssey-custom .hero-main,
body.theme-odyssey-custom .hero-side,
body.theme-odyssey-custom .category-card,
body.theme-odyssey-custom .post-card,
body.theme-odyssey-custom .cta-band,
body.theme-odyssey-custom .article-card,
body.theme-odyssey-custom .sidebar-card,
body.theme-odyssey-custom .site-footer {
  background-color: var(--card-bg);
  border: var(--border-soft);
}

/* 컴포넌트별 border-radius (메인화면 상세값.txt 정확값) */
body.theme-odyssey-custom .card               { border-radius: var(--card-radius); }
body.theme-odyssey-custom .site-header        { border-radius: var(--header-radius-pc); }       /* §2: 28 */
body.theme-odyssey-custom .hero-main          { border-radius: var(--hero-card-radius-pc); }    /* §9: 34 */
body.theme-odyssey-custom .hero-side          { border-radius: var(--hero-side-radius-pc); }    /* §15: 28 */
body.theme-odyssey-custom .category-card      { border-radius: var(--category-card-radius-pc); } /* §19: 30 */
body.theme-odyssey-custom .post-card          { border-radius: var(--card-radius); }
body.theme-odyssey-custom .cta-band           { border-radius: var(--card-radius); }
body.theme-odyssey-custom .article-card       { border-radius: var(--article-card-radius); }
body.theme-odyssey-custom .sidebar-card       { border-radius: var(--sidebar-card-radius-pc); } /* §24: 30 */
body.theme-odyssey-custom .site-footer        { border-radius: var(--footer-radius-pc); }      /* §30: 32 */

/* ─ 그림자 ─ 메인화면 상세값.txt 컴포넌트별 정확값 ─
 *
 *   헤더            → --shadow-header        (§2:  0 8px 24px  0.06)
 *   히어로 메인     → --hero-card-shadow-pc  (§9:  0 14px 36px 0.08)
 *   히어로 사이드   → --hero-side-shadow-pc  (§15: 0 10px 28px 0.06)
 *   카테고리 카드   → --category-card-shadow-pc (§19: 0 10px 26px 0.06)
 *   사이드바 카드   → --sidebar-card-shadow-pc  (§24: 0 10px 28px 0.06)
 *   본문 article   → --article-card-shadow  (기준 정리 §2)
 *   푸터            → --footer-shadow-pc     (§30: 0 12px 30px 0.07)
 */

/* 헤더 그림자 — 메인화면 상세값 §2 */
body.theme-odyssey-custom .site-header {
  box-shadow: var(--shadow-header);
}

/* 히어로 카드 — 메인 / 사이드 그림자 분리 (메인화면 상세값 §9 / §15) */
body.theme-odyssey-custom .hero-main {
  box-shadow: var(--hero-card-shadow-pc);
}
body.theme-odyssey-custom .hero-side {
  box-shadow: var(--hero-side-shadow-pc);
}
/* 본문 메인 카드 - 기준 정리 §2: 0 12px 30px rgba(47,111,115,0.07) */
body.theme-odyssey-custom .article-card {
  box-shadow: var(--article-card-shadow);
}

/* 카테고리 카드 — 메인화면 상세값 §19 */
body.theme-odyssey-custom .category-card {
  box-shadow: var(--category-card-shadow-pc);
}
/* 사이드바 카드 — 메인화면 상세값 §24 */
body.theme-odyssey-custom .sidebar-card {
  box-shadow: var(--sidebar-card-shadow-pc);
}
/* 일반 카드 / 글 카드 / CTA 밴드 — 추가.txt 기본값 유지 */
body.theme-odyssey-custom .card,
body.theme-odyssey-custom .post-card,
body.theme-odyssey-custom .cta-band {
  box-shadow: var(--shadow-card);
}

/* 푸터 그림자 — 메인화면 상세값 §30 */
body.theme-odyssey-custom .site-footer {
  box-shadow: var(--footer-shadow-pc);
}

/* ─ 공통 버튼 ─ */
body.theme-odyssey-custom .btn {
  display: inline-flex;
  align-items: center;
  justify-content: center;
  height: var(--btn-h);
  padding: 0 var(--btn-pad-x);
  border-radius: var(--btn-radius);
  /* 추가.txt: PC CTA 버튼 14px (모바일은 15px - .mobile-menu-cta 등에서 별도) */
  font-size: var(--text-cta-pc);
  font-weight: var(--weight-bold);
  letter-spacing: var(--letter-spacing);
  white-space: nowrap;
  cursor: pointer;
  transition:
    background-color var(--duration-fast) ease,
    color            var(--duration-fast) ease,
    box-shadow       var(--duration-base) var(--ease-soft),
    transform        var(--duration-base) var(--ease-soft),
    border-color     var(--duration-fast) ease;
}

/* ─ CTA 버튼 (추가.txt "주황 CTA 버튼 추천" 4상태 표) ─
 *
 *   상태   | 배경                  | 글씨    | 비고
 *   ────── | ─────────────────── | ────── | ──────────────
 *   기본    | #F4A261 (--color-accent)        | #222222 | 선명하고 따뜻함
 *   Hover  | #F6B27B (--color-accent-hover)  | #222222 | 살짝 밝아지며 부드러움
 *   Active | #E8914F (--color-accent-active) | #222222 | 눌린 느낌
 *   Focus  | #F4A261 (기본과 동일)            | #222222 | 청록색 포커스링으로 표시
 *
 *  추가.txt: "버튼 hover 때도 글씨색은 #222222 유지하는 게 좋아요"
 *  추가.txt: "주황 CTA는 포커스도 청록색으로 잡는 게 좋아요"
 *
 *  중간 플러스 추천값:
 *    PC     - padding 16px 27px / font 16px / width 내용 너비만큼
 *    모바일 - padding 14px 22px / font 15px / width 100%
 */
body.theme-odyssey-custom .btn-cta {
  /* 메인화면 상세값 §13: padding 15 25 / font 16 / weight 900 / radius 18 / 그림자 0 8px 18px ..0.22
   *                       글씨색 #222 / 배경 #F4A261 / hover #F6B27B
   *  ※ .btn 베이스의 height:48px 는 시안 .btn-cta 와 불일치 → height:auto + min-height 54px 로
   *    padding 이 실제 높이를 결정하도록 변경 (시안 매칭) */
  height: auto;
  min-height: var(--btn-cta-min-h-pc);               /* 54px - 시안 매칭 */
  padding: var(--btn-cta-pad-y-pc) var(--btn-cta-pad-x-pc);
  font-size: var(--btn-cta-font-pc);
  font-weight: var(--btn-cta-weight);                /* 900 - 메인화면 상세값 §13 (이전 700 → 900) */
  width: var(--btn-cta-width-pc);
  background-color: var(--color-accent);
  color: var(--color-text);
  border: var(--border-accent);
  border-radius: var(--btn-cta-radius-pc);           /* 18px - 메인화면 상세값 §13 */
  box-shadow: var(--shadow-cta);                     /* 0 8px 18px ..0.22 - 메인화면 상세값 §13 */
}
body.theme-odyssey-custom .btn-cta:hover {
  background-color: var(--color-accent-hover);
  color: var(--color-text);   /* 추가.txt: hover 글씨색 #222222 유지 (명시) */
  box-shadow: var(--shadow-cta-hover);
}
body.theme-odyssey-custom .btn-cta:active {
  background-color: var(--color-accent-active);
  color: var(--color-text);   /* 추가.txt: active 글씨색 #222222 유지 (명시) */
}
body.theme-odyssey-custom .btn-cta:focus-visible {
  background-color: var(--color-accent);   /* 기본과 동일 (추가.txt) */
  color: var(--color-text);
  outline: var(--focus-ring-w) solid var(--color-focus-ring);   /* 청록 포커스링 */
  outline-offset: var(--focus-ring-offset);
}

body.theme-odyssey-custom .btn-outline {
  background-color: var(--color-secondary);
  color: var(--color-text);
  border: var(--border-teal);
}
body.theme-odyssey-custom .btn-outline:hover {
  background-color: var(--color-secondary-soft);
}

/* .hero-actions 안 .btn-outline 시각 페어 보정 — 시안 매칭 (.btn-cta 와 동일 높이/패딩)
 *  ※ .btn 베이스 height 48px 는 .btn-outline 에 그대로 적용되므로 hero 영역만 override
 *  ※ .btn-cta 가 옆에 있을 때 두 버튼이 같은 크기로 보여야 자연스러움 */
body.theme-odyssey-custom .hero-actions .btn-outline {
  height: auto;
  min-height: var(--btn-cta-min-h-pc);                       /* 54px - .btn-cta 와 동일 */
  padding: var(--btn-cta-pad-y-pc) var(--btn-cta-pad-x-pc);  /* 15 25 - .btn-cta 와 동일 */
  font-size: var(--btn-cta-font-pc);                         /* 16px */
  font-weight: var(--btn-cta-weight);                        /* 900 */
  border-radius: var(--btn-cta-radius-pc);                   /* 18px */
}

body.theme-odyssey-custom .btn-primary {
  background-color: var(--color-primary);
  color: var(--color-card);
}
body.theme-odyssey-custom .btn-primary:hover {
  background-color: var(--color-primary-dark);
}

/* ─ Badge / Label (추가.txt "8. Badge / Label 시스템") ─
 *
 *   .badge {
 *     min-height: 32px;
 *     padding: 6px 12px;
 *     border-radius: 999px;
 *     background: #DDE8E3;     ← 기본
 *     color: #2F6F73;          ← 기본
 *     font-size: 13px;
 *     font-weight: 900;
 *   }
 *
 *  ─ 변형 (추가.txt 표) ─
 *  라벨 유형          | 배경                         | 글씨
 *  ────────────────|──────────────────────────|──────────
 *  기본 카테고리       | #DDE8E3 (--color-secondary)  | #2F6F73 (--color-primary)
 *  추천템             | #DDE8E3 (동일)               | #2F6F73 (동일)
 *  할인/혜택          | #FFF1E3 (--color-accent-soft) | #222222 (--color-text)
 *  제휴 안내          | #FFF8EF (--color-notice-bg)   | #6B7280 (--color-muted)
 *
 *  주의: 본문 안의 카테고리 pill (.article-cat / .post-card-cat / .hero-tag) 도
 *        같은 토큰을 공유해 시각 일관성 유지.
 */
body.theme-odyssey-custom .badge {
  display: inline-flex;
  align-items: center;
  min-height: var(--badge-min-h);
  padding: var(--badge-pad-y) var(--badge-pad-x);
  background-color: var(--color-secondary);
  color: var(--color-primary);
  border-radius: var(--badge-radius);
  font-size: var(--badge-text);
  font-weight: var(--badge-weight);
  letter-spacing: var(--letter-spacing);
}

/* 추천템 - 기본과 동일 톤 (의미 분리만) */
body.theme-odyssey-custom .badge--rec {
  background-color: var(--color-secondary);
  color: var(--color-primary);
}

/* 할인/혜택 - 페이치 + 진한 본문색 */
body.theme-odyssey-custom .badge--discount {
  background-color: var(--color-accent-soft);
  color: var(--color-text);
}

/* 제휴 안내 - 크림 + 메타색 */
body.theme-odyssey-custom .badge--affiliate {
  background-color: var(--color-notice-bg);
  color: var(--color-muted);
}

/* ─ 공통 입력창 (추가.txt §2 Form/Input 시스템) ─ */
body.theme-odyssey-custom .site-search-input,
body.theme-odyssey-custom .mobile-search-input {
  width: 100%;
  height: var(--input-h);
  padding: var(--input-pad);
  background-color: var(--input-bg);
  border: var(--input-border);
  border-radius: var(--input-radius);
  /* 추가.txt §2: 베이스 15px / line-height 1.5 (모바일 검색창은 14px override) */
  font-size: var(--text-search-pc);
  line-height: var(--input-line);
  color: var(--color-text);
  transition: border-color var(--duration-fast) ease, box-shadow var(--duration-fast) ease;
}
body.theme-odyssey-custom .site-search-input::placeholder,
body.theme-odyssey-custom .mobile-search-input::placeholder {
  /* 추가.txt §2: placeholder 색 #9CA3AF */
  color: var(--color-muted-light);
}
body.theme-odyssey-custom .site-search-input:focus,
body.theme-odyssey-custom .mobile-search-input:focus {
  /* 추가.txt §2: focus border #2F6F73 + shadow 0 0 0 4px rgba(47,111,115,0.12) */
  border-color: var(--color-primary);
  box-shadow: 0 0 0 var(--focus-ring-spread) var(--color-input-focus-bg);
  outline: none;
}


/* ════════════════════════════════════════════════════════════════════
   6. 헤더 (시안: 메인01, 본문 06)
   - box-shadow / background 는 §5 공통 베이스에서 처리
   - border-radius 는 헤더 전용 토큰(--header-radius)로 재정의
   ════════════════════════════════════════════════════════════════════ */
body.theme-odyssey-custom .site-header {
  /* 중간 플러스: PC 헤더 내부 여백 28px 34px / 둥근값 PC 32px */
  padding: var(--header-pad-y) var(--header-pad-x);
  border-radius: var(--header-radius);
}

body.theme-odyssey-custom .header-inner {
  display: flex;
  align-items: center;
  gap: var(--space-8);
}

/* 로고 — 메인화면 상세값 §3 / 모바일 §3
 *  26px (모바일 24) / weight 900 / 자간 -0.04em / 글씨색 #222
 *  ※ 기존 site-logo-link 가 primary 톤이었으나 메인화면 상세값 §3 은 #222.
 *     컴포넌트 토큰 --color-logo 로 통제 → 다시 primary 로 돌리려면 토큰만 변경 */
body.theme-odyssey-custom .site-logo {
  flex: 0 0 auto;
  font-size: var(--text-logo-pc);
  font-weight: var(--weight-black);
  letter-spacing: var(--letter-spacing-logo);
  margin: 0;
}
body.theme-odyssey-custom .site-logo-link {
  display: inline-block;
  color: var(--color-text);                /* 메인화면 상세값 §3: #222222 (이전 primary 변경) */
  transition: color var(--duration-fast) ease;
}
body.theme-odyssey-custom .site-logo-link:hover {
  color: var(--color-primary);             /* hover 시 primary 톤 (시각 affordance) */
}
body.theme-odyssey-custom .site-logo-img {
  max-height: var(--logo-img-max-h);
  display: block;
}

/* 메뉴 */
body.theme-odyssey-custom .site-nav,
body.theme-odyssey-custom .site-nav-fallback {
  flex: 1 1 auto;
  display: flex;
  align-items: center;
  justify-content: center;
  /* 중간 플러스: 메뉴 간격 PC 26px */
  gap: var(--header-menu-gap);
}

/* 티스토리가 출력하는 [##_blog_menu_##] 의 ul 도 동일하게 보이도록 */
body.theme-odyssey-custom .site-nav > ul {
  display: flex;
  align-items: center;
  justify-content: center;
  /* 중간 플러스: 메뉴 간격 PC 26px */
  gap: var(--header-menu-gap);
  margin: 0;
  padding: 0;
  list-style: none;
}
body.theme-odyssey-custom .site-nav > ul > li {
  list-style: none;
}

body.theme-odyssey-custom .site-nav a,
body.theme-odyssey-custom .site-nav-fallback a,
body.theme-odyssey-custom .site-nav-link {
  display: inline-flex;
  align-items: center;
  height: var(--btn-h);
  /* 메인화면 상세값 §4: 16px / weight 700 / 글씨색 #4B5563 / hover #2F6F73 */
  font-size: var(--text-menu-cat-pc);
  font-weight: var(--weight-menu-cat);
  color: var(--color-site-nav-link);
  letter-spacing: var(--letter-spacing);
  transition: color var(--duration-fast) ease;
}
body.theme-odyssey-custom .site-nav a:hover,
body.theme-odyssey-custom .site-nav-fallback a:hover,
body.theme-odyssey-custom .site-nav-link:hover {
  color: var(--color-site-nav-link-hover);
}
/* 활성 메뉴 표시 (현재 카테고리) */
body.theme-odyssey-custom .site-nav .selected > a,
body.theme-odyssey-custom .site-nav .link_tit.selected {
  color: var(--color-primary);
}

/* fallback 메뉴는 [##_blog_menu_##] 가 비어있을 때만 표시 */
body.theme-odyssey-custom .site-nav-fallback {
  display: none;
}
body.theme-odyssey-custom.blog-menu-empty .site-nav {
  display: none;
}
body.theme-odyssey-custom.blog-menu-empty .site-nav-fallback {
  display: flex;
}

/* 검색 (PC) */
body.theme-odyssey-custom .site-search {
  position: relative;
  flex: 0 0 auto;
  width: var(--search-w-pc);
}
body.theme-odyssey-custom .site-search-input {
  padding-right: var(--space-12);
}
body.theme-odyssey-custom .site-search-btn {
  position: absolute;
  top: 50%;
  right: var(--space-3);
  transform: translateY(-50%);
  width: var(--search-btn-size);
  height: var(--search-btn-size);
  display: inline-flex;
  align-items: center;
  justify-content: center;
  color: var(--color-muted);
  border-radius: var(--radius-pill);
  transition: color var(--duration-fast) ease;
}
body.theme-odyssey-custom .site-search-btn:hover {
  color: var(--color-primary);
}

/* 모바일 햄버거 — PC 에서는 숨김 / 메인화면 상세값 모바일 §4
 *  46×46 / radius 14 / 배경 #FFFFFF / 테두리 1px solid #E8E2DA / 그림자 0 4px 12px ..0.05 */
body.theme-odyssey-custom .mobile-toggle {
  display: none;
  width: var(--mobile-toggle-size);
  height: var(--mobile-toggle-size);
  align-items: center;
  justify-content: center;
  color: var(--color-text);
  background-color: var(--mobile-toggle-bg);          /* 메인화면 상세값 모바일 §4: #FFFFFF */
  border: var(--mobile-toggle-border);                /* 메인화면 상세값 모바일 §4: 1px solid #E8E2DA */
  border-radius: var(--mobile-toggle-radius);         /* 메인화면 상세값 모바일 §4: 14px */
  box-shadow: var(--mobile-toggle-shadow);            /* 메인화면 상세값 모바일 §4 */
  transition: background-color var(--duration-fast) ease;
}
body.theme-odyssey-custom .mobile-toggle:hover {
  background-color: var(--color-primary-soft);
}


/* ════════════════════════════════════════════════════════════════════
   7. 메인(인덱스) 전용 - 표시 제어
   ════════════════════════════════════════════════════════════════════ */
/* 기본은 숨김, 메인 페이지일 때만 표시 */
body.theme-odyssey-custom .index-only-block {
  display: none;
}
body.theme-odyssey-custom.is-index-page .index-only-block,
body.theme-odyssey-custom#tt-body-index .index-only-block {
  display: block;
}

/* 메인 페이지에서만 큰 제목/breadcrumb 숨김 */
body.theme-odyssey-custom.is-index-page .area-common .breadcrumb-nav,
body.theme-odyssey-custom.is-index-page .area-common .title-search,
body.theme-odyssey-custom#tt-body-index .area-common .breadcrumb-nav,
body.theme-odyssey-custom#tt-body-index .area-common .title-search {
  display: none;
}


/* ════════════════════════════════════════════════════════════════════
   8. 메인 - 히어로 (시안 메인01)
   ════════════════════════════════════════════════════════════════════ */
body.theme-odyssey-custom .hero {
  display: grid;
  /* b 단계: 카드 비율을 시안 기준 2:1 로 변경 — :root --hero-main-fr / --hero-side-fr 토큰 사용
   *  (이전 1.6fr : 1fr → 새 2fr : 1fr — minmax(0, …) 로 자식 overflow 방지 유지) */
  grid-template-columns:
    minmax(0, var(--hero-main-fr))
    minmax(0, var(--hero-side-fr));
  /* 메인 카드 간격 PC 27px (메인화면 상세값 §9) — 모바일에서 var(--hero-card-gap-mobile) 로 재정의 */
  gap: var(--hero-card-gap-pc);
  /* 헤더 ↔ .hero 간격: 헤더 margin-bottom 34px (--space-header-margin, 메인화면 상세값 §2) 만 사용
   *  ※ 이전 margin-top: var(--space-8) 32px 추가로 누적되어 66px 큰 공백 발생 — 제거
   *  ※ 시안: 헤더 ↔ hero 사이 약 34px */
  margin-top: 0;
  margin-bottom: var(--section-gap);
}

/* 메인 카드 — 메인화면 상세값 §9
 *  ※ 우측 .hero-image 박스 제거됨 — grid 2컬럼 해제, 단일 자식(.hero-main-body) block 흐름
 *  ※ 복구 시: display: grid; grid-template-columns: minmax(0, 1fr) var(--hero-image-w-pc);
 *           column-gap: var(--hero-main-inner-gap-pc); align-items: var(--hero-main-align-items-pc);
 *           overflow: hidden 유지 */
body.theme-odyssey-custom .hero-main {
  position: relative;
  padding: var(--hero-card-pad-pc);              /* 41px - 메인화면 상세값 §9 */
  min-height: var(--hero-card-min-h-pc);         /* 330px - 메인화면 상세값 §9 */
  overflow: hidden;
}

/* .hero-main 안 텍스트 영역 wrapper — 라벨/제목/설명/버튼을 묶음
 *  ※ 자식들은 세로 stack — flex column 동작 유지
 *  ※ .hero-image 형제 제거 후에도 wrapper 유지 (마크업 안정성) */
body.theme-odyssey-custom .hero-main-body {
  display: flex;
  flex-direction: column;
  gap: var(--space-6);
  min-width: 0;
}

/* 카테고리 라벨 (.hero-tag) — 메인화면 상세값 §10
 *  padding 8 15 / radius 999 / 13px·900 / 배경 #DDE8E3 / 글씨 #2F6F73
 *  ※ .hero-main-body 가 flex column 컨테이너이므로 align-self: flex-start 그대로 유효 */
body.theme-odyssey-custom .hero-tag {
  display: inline-flex;
  align-self: flex-start;
  align-items: center;
  min-height: var(--badge-min-h);
  padding: var(--space-2) 15px;                  /* 메인화면 상세값 §10: 8 15 (스케일 외) */
  background-color: var(--color-secondary);
  color: var(--color-primary);
  border-radius: var(--badge-radius);
  font-size: var(--badge-text);
  font-weight: var(--badge-weight);
  letter-spacing: var(--letter-spacing);
}

/* 히어로 메인 제목 — 메인화면 상세값 §11
 *  PC 47 / 줄간격 1.18 / 자간 -0.06em / 아래 18 */
body.theme-odyssey-custom .hero-title {
  font-size: var(--text-hero-title-pc);
  font-weight: var(--weight-black);
  line-height: var(--leading-hero-title-pc);         /* 1.18 - 메인화면 상세값 §11 */
  letter-spacing: var(--letter-spacing-hero);        /* -0.06em - 메인화면 상세값 §11 */
  color: var(--color-text-strong);
  margin: 0 0 var(--space-hero-title-bottom-pc);     /* 아래 18 - 메인화면 상세값 §11 */
}

/* 히어로 설명 — 메인화면 상세값 §12
 *  PC 17 / 줄간격 1.78 / 아래 24 / 색 #6B7280 */
body.theme-odyssey-custom .hero-desc {
  font-size: var(--text-hero-desc-pc);
  line-height: var(--leading-hero-desc);             /* 1.78 */
  color: var(--color-muted);
  max-width: var(--hero-desc-max);
  margin: 0 0 var(--space-hero-desc-bottom-pc);      /* 아래 24 - 메인화면 상세값 §12 */
}

body.theme-odyssey-custom .hero-actions {
  display: flex;
  flex-wrap: wrap;
  gap: var(--space-3);
  margin-top: var(--space-2);
}

/* 히어로 대표 이미지 영역 (.hero-image) — 제거됨
 *  ※ 추후 슬라이드 또는 애드센스 광고 영역으로 교체 예정
 *  ※ 복구 시 다음 셀렉터를 함께 복원할 것:
 *     .hero-image                        - figure 박스 (w/h/radius/배경/테두리)
 *     .hero-image > img/video/picture    - 자식 이미지 박스 채움 (object-fit: cover)
 *     모바일 @media: .hero-image          - 모바일 w/h/radius
 *  ※ SVG 일러스트 (.hero-image-illust, .hero-illust-bg-circle/dot/book/curve/
 *     bar-strong/bar-soft/label) 관련 셀렉터도 같은 시점에 정리됨 */

/* 사이드 카드 - 처음 오셨다면 이 순서로 보세요 / 메인화면 상세값 §15
 *  PC: padding 31, radius 28 (카드 베이스에서 적용), 그림자 별도 */
body.theme-odyssey-custom .hero-side {
  padding: var(--hero-side-pad-pc);                  /* 31px - 메인화면 상세값 §15 */
  min-height: var(--hero-card-min-h-pc);
  display: flex;
  flex-direction: column;
  gap: var(--space-4);
}

/* 히어로 사이드 제목 — 메인화면 상세값 §16: 25px / 900 */
body.theme-odyssey-custom .hero-side-title {
  font-size: var(--text-hero-side-title-pc);         /* 25px - 메인화면 상세값 §16 */
  font-weight: var(--weight-black);
  color: var(--color-primary);
  letter-spacing: var(--letter-spacing);
  line-height: var(--leading-tight);
  margin: 0;
}

body.theme-odyssey-custom .hero-side-desc {
  font-size: var(--text-hero-side-desc-pc);
  line-height: var(--leading-relaxed);
  color: var(--color-muted);
  margin: 0;
}

/* 히어로 사이드 리스트 — 메인화면 상세값 §17
 *  PC: 항목 간격 14 / 글씨 16 / 줄간격 1.7 */
body.theme-odyssey-custom .hero-side-list {
  margin-top: auto;
  padding-top: var(--space-8);
  display: flex;
  flex-direction: column;
  gap: var(--gap-hero-side-list-pc);                 /* 14px - 메인화면 상세값 §17 */
}
body.theme-odyssey-custom .hero-side-list li {
  display: block;
}
body.theme-odyssey-custom .hero-side-list a {
  display: flex;
  align-items: center;
  justify-content: space-between;
  min-height: var(--btn-h);
  padding: 0 var(--space-5);
  background-color: var(--color-accent-soft);
  border-radius: var(--radius-md);
  font-size: var(--text-hero-side-link-pc);          /* 16px - 메인화면 상세값 §17 */
  font-weight: var(--weight-bold);
  line-height: var(--leading-hero-side-link-pc);     /* 1.7 - 메인화면 상세값 §17 */
  color: var(--color-text);
  letter-spacing: var(--letter-spacing);
  transition: background-color var(--duration-fast) ease, transform var(--duration-base) var(--ease-soft);
}
body.theme-odyssey-custom .hero-side-list a:hover {
  background-color: var(--color-accent-soft-hover);
  transform: translateY(calc(-1 * var(--motion-shift-sm)));
}
body.theme-odyssey-custom .hero-side-arrow {
  color: var(--color-muted);
  font-size: var(--text-lg);
  font-weight: var(--weight-medium);
}


/* ════════════════════════════════════════════════════════════════════
   9. 메인 - 섹션 헤드 (제목 + 설명 + 더 보기)
   ════════════════════════════════════════════════════════════════════ */
body.theme-odyssey-custom .section-head {
  display: flex;
  align-items: flex-end;
  justify-content: space-between;
  gap: var(--space-6);
  /* 추가.txt: 섹션 제목 아래 간격 24px (22~28 중간값) */
  margin-bottom: var(--space-section-title-bottom);
}
body.theme-odyssey-custom .section-head-text {
  flex: 1 1 auto;
}
body.theme-odyssey-custom .section-title {
  /* 메인화면 상세값 §8: PC 29 / 모바일 25 / weight 900 / 자간 -0.05em / 아래 24 */
  font-size: var(--text-section-title-pc);
  font-weight: var(--weight-black);
  color: var(--color-text-strong);
  letter-spacing: var(--letter-spacing-section);     /* -0.05em - 메인화면 상세값 §8 */
  line-height: var(--leading-tight);
  margin: 0 0 var(--space-2);
}
body.theme-odyssey-custom .section-desc {
  font-size: var(--text-section-desc-pc);
  line-height: var(--leading-normal);
  color: var(--color-muted);
  margin: 0;
}
body.theme-odyssey-custom .section-more {
  flex: 0 0 auto;
  display: inline-flex;
  align-items: center;
  gap: var(--space-1);
  font-size: var(--text-section-more-pc);
  font-weight: var(--weight-bold);
  color: var(--color-primary);
  letter-spacing: var(--letter-spacing);
  transition: color var(--duration-fast) ease, transform var(--duration-base) var(--ease-soft);
}
body.theme-odyssey-custom .section-more:hover {
  color: var(--color-primary-dark);
  transform: translateX(var(--motion-shift-sm));
}


/* ════════════════════════════════════════════════════════════════════
   10. 메인 - 카테고리별 핵심 주제 (시안 메인02)
   ════════════════════════════════════════════════════════════════════ */
body.theme-odyssey-custom .categories {
  margin-bottom: var(--section-gap);
}

body.theme-odyssey-custom .category-cards {
  display: grid;
  /* 중간 플러스: PC 4열 / 카드 간격 24px */
  grid-template-columns: repeat(var(--category-cards-cols-pc), minmax(0, 1fr));
  gap: var(--category-cards-gap-pc);
}

body.theme-odyssey-custom .category-card {
  display: flex;
  flex-direction: column;
  /* 메인화면 상세값 §19: PC padding 29 / 최소 높이 200 / radius (카드 베이스 적용) / 그림자 (그림자 베이스 적용) */
  padding: var(--category-card-pad-pc);
  min-height: var(--category-card-min-h-pc);
  color: var(--color-text);
  /* 추가.txt §3: 4속성 통합 트랜지션 */
  transition: var(--transition-card);
}
body.theme-odyssey-custom .category-card:hover {
  /* 추가.txt §3: translateY(-3px) */
  transform: translateY(calc(-1 * var(--motion-shift-md)));
  box-shadow: var(--shadow-card-hover);
}

/* 아이콘 박스 — 메인화면 상세값 §20: 크기 52 / radius 18 / 배경 #DDE8E3 */
body.theme-odyssey-custom .category-icon {
  display: inline-flex;
  align-items: center;
  justify-content: center;
  width: var(--category-icon-size-pc);
  height: var(--category-icon-size-pc);
  margin-bottom: var(--space-4);
  background-color: var(--color-secondary);
  color: var(--color-primary);
  border-radius: var(--category-icon-radius-pc);     /* 18px - 메인화면 상세값 §20 (이전 999 → 18) */
  flex-shrink: 0;
}

/* 카테고리 제목 — 메인화면 상세값 §21: PC 22 / 900 / 아래 10 */
body.theme-odyssey-custom .category-title {
  font-size: var(--text-category-title-pc);
  font-weight: var(--weight-black);
  color: var(--color-text-strong);
  letter-spacing: var(--letter-spacing);
  line-height: var(--leading-tight);
  margin: 0 0 var(--space-category-title-bottom-pc); /* 10px - 메인화면 상세값 §21 */
}

/* 카테고리 설명 — 메인화면 상세값 §22: PC 15 / 줄간격 1.72 / 색 #6B7280 */
body.theme-odyssey-custom .category-desc {
  font-size: var(--text-category-desc-pc);
  line-height: var(--leading-category-desc);         /* 1.72 - 메인화면 상세값 §22 (이전 1.7 → 1.72) */
  color: var(--color-muted);
  margin: 0;
}


/* ════════════════════════════════════════════════════════════════════
   11. 글 카드 - 기본 베이스 (메인/카테고리/검색 공용 / 시안 메인02~04)
   - Stage 2 에서 더 정밀 매칭
   ════════════════════════════════════════════════════════════════════ */

/* 글 목록 컨테이너 */
body.theme-odyssey-custom .area-common {
  display: grid;
  grid-template-columns: repeat(2, minmax(0, 1fr));
  /* 추가.txt: 카드 그리드 간격 28px (24~30 중간) */
  gap: var(--space-card-grid-gap);
  margin-bottom: var(--section-gap);
}

/* 카드 */
body.theme-odyssey-custom .post-card {
  display: flex;
  flex-direction: column;
  overflow: hidden;
  /* 추가.txt §3: 4속성 통합 트랜지션 */
  transition: var(--transition-card);
}
body.theme-odyssey-custom .post-card:hover {
  transform: translateY(calc(-1 * var(--motion-shift-md)));
  box-shadow: var(--shadow-card-hover);
}

/* 썸네일 영역 - 시안의 peachy 그라데이션 placeholder */
body.theme-odyssey-custom .post-card-thumb-link {
  display: block;
}
body.theme-odyssey-custom .post-card-thumb {
  position: relative;
  width: 100%;
  /* 컴포넌트 토큰 — 메인 카드 썸네일 비율
   * 16/9 (1.78) 유지: 카드의 가로 긴 비율이 디자인적으로 정돈됨.
   * 변경 시 :root --post-card-thumb-aspect 토큰만 수정 (단일 출처). */
  aspect-ratio: var(--post-card-thumb-aspect);
  margin: 0;
  background-color: var(--color-accent-soft);
  background-position: center;
  background-size: cover;
  background-repeat: no-repeat;
  overflow: hidden;
  /* background-image 의 두 가지 소스 (분리 원칙)
   *   ① Tistory 변수 [##_list_rep_thumbnail_raw_url_##] → SSR 시 인라인
   *      style 로 주입 (정사각형 대표 이미지). og:image / 포털 검색 썸네일
   *      용도로 보존되며, 아래 .post-card-thumb-img 의 src 와 동일.
   *   ② skin-init.js [3] 카드 베너 동적 교체 → 페이지 로드 후 RSS 의
   *      본문 첫 이미지로 background-image 만 덮어씀 (가로형 베너).
   *      data-thumb-banner="1" 속성으로 마커. JS 실패 시 ① 그대로 유지. */
}
/* 썸네일 없을 때 - 시안의 placeholder 톤 (오렌지 → 세이지 그라데이션) */
body.theme-odyssey-custom .post-card-thumb:not([has-thumbnail="1"]) {
  background-image: linear-gradient(135deg, var(--color-accent-soft) 0%, var(--color-secondary-soft) 100%);
}
body.theme-odyssey-custom .post-card-thumb-img {
  display: none;
}

/* 카드 본문 */
body.theme-odyssey-custom .post-card-body {
  display: flex;
  flex-direction: column;
  gap: var(--space-3);
  /* 추가.txt: 최신글 카드 내부 여백 24~28px - 28px 적용 */
  padding: var(--space-recent-card-pad);
}

body.theme-odyssey-custom .post-card-meta {
  display: flex;
  align-items: center;
  gap: var(--space-3);
  flex-wrap: wrap;
}
body.theme-odyssey-custom .post-card-cat {
  /* 추가.txt Badge 시스템 - 기본 카테고리 톤 */
  display: inline-flex;
  align-items: center;
  min-height: var(--badge-min-h);
  padding: var(--badge-pad-y) var(--badge-pad-x);
  background-color: var(--color-secondary);
  color: var(--color-primary);
  border-radius: var(--badge-radius);
  font-size: var(--badge-text);
  font-weight: var(--badge-weight);
  letter-spacing: var(--letter-spacing);
  transition: background-color var(--duration-fast) ease;
}
body.theme-odyssey-custom .post-card-cat:hover {
  background-color: var(--color-secondary-soft);
}
body.theme-odyssey-custom .post-card-date {
  font-size: var(--text-post-card-date-pc);
  font-weight: var(--weight-bold);
  color: var(--color-text);
  letter-spacing: var(--letter-spacing);
}

body.theme-odyssey-custom .post-card-title-link {
  display: block;
}
body.theme-odyssey-custom .post-card-title {
  font-size: var(--text-post-card-title-pc);
  font-weight: var(--weight-black);
  color: var(--color-text);
  letter-spacing: var(--letter-spacing);
  line-height: var(--leading-tight);
  margin: var(--space-2) 0 var(--space-3);
  transition: color var(--duration-fast) ease;
}
body.theme-odyssey-custom .post-card-title-link:hover .post-card-title {
  color: var(--color-primary);
}
body.theme-odyssey-custom .post-card-summary {
  font-size: var(--text-post-card-summary-pc);
  font-weight: var(--weight-normal);
  line-height: var(--leading-relaxed);
  color: var(--color-muted);
  letter-spacing: var(--letter-spacing);
  margin: 0;
  display: -webkit-box;
  -webkit-line-clamp: 2;
  line-clamp: 2;
  -webkit-box-orient: vertical;
  overflow: hidden;
}
body.theme-odyssey-custom .post-card-reply {
  display: none;  /* 시안에 없음 - 필요 시 Stage 4 에서 활성화 */
}

/* breadcrumb (Stage 2 에서 정밀화) — 시안 매칭: 링크 청록 / 현재 다크 */
body.theme-odyssey-custom .breadcrumb-nav {
  grid-column: 1 / -1;
  display: flex;
  align-items: center;
  gap: var(--space-2);
  margin: calc(var(--space-2) * -1) 0 var(--space-2);
  font-size: var(--text-base);
  font-weight: var(--weight-bold);
  color: var(--color-muted);
  letter-spacing: var(--letter-spacing);
}
body.theme-odyssey-custom .breadcrumb-link {
  /* 시안: 링크 청록 (이전: --color-text) */
  color: var(--color-breadcrumb-link);
  transition: color var(--duration-fast) ease;
}
body.theme-odyssey-custom .breadcrumb-link:hover {
  color: var(--color-primary-dark);
}
body.theme-odyssey-custom .breadcrumb-sep {
  color: var(--color-breadcrumb-sep);
}
body.theme-odyssey-custom .breadcrumb-current {
  /* 시안: 현재 페이지 다크 (이전: --color-primary) */
  color: var(--color-breadcrumb-current);
  font-weight: var(--weight-extrabold);
  /* PC 기본: 정상 표시, 모바일에서는 미디어 쿼리로 ellipsis 처리 */
  white-space:   var(--breadcrumb-current-white-space-pc);
  overflow:      var(--breadcrumb-current-overflow-pc);
  text-overflow: var(--breadcrumb-current-text-overflow-pc);
  min-width:     var(--breadcrumb-current-min-width-pc);
  flex:          var(--breadcrumb-current-flex-pc);
}

/* 카테고리/검색 페이지에서는 큰 제목 숨김 (breadcrumb 으로 대체) */
body.theme-odyssey-custom .area-common .title-search {
  grid-column: 1 / -1;
  display: none;
}

/* ─ 빈 결과 박스 (추가.txt §10 Empty / Loading 상태) ─
 *
 *   .empty-box {
 *     padding: 44px 28px;
 *     background: #FFFFFF;
 *     border: 1px solid #E8E2DA;
 *     border-radius: 28px;
 *     text-align: center;
 *     color: #6B7280;
 *   }
 *
 *   추가.txt 권장 문구:
 *   "아직 글 하나도 없음 ㅋㅋ
 *    빈 페이지 보고 있죠? 곧 개꿀 노트로 미친듯이 채워드릴께요~! 기다려주십숑~^^"
 */
body.theme-odyssey-custom .empty-box {
  grid-column: 1 / -1;
  /* 추가.txt §10: padding 44px 28px */
  padding: var(--space-11) var(--space-7);
  background-color: var(--card-bg);
  /* 추가.txt §10: border-radius 28px (= --radius-3xl) */
  border-radius: var(--radius-3xl);
  border: var(--border-soft);
  text-align: center;
  /* 추가.txt §10: color #6B7280 */
  color: var(--color-muted);
  box-shadow: var(--shadow-xs);
}
body.theme-odyssey-custom .empty-title {
  font-size: var(--text-2xl);
  font-weight: var(--weight-black);
  color: var(--color-primary);
  letter-spacing: var(--letter-spacing);
  margin: 0 0 var(--space-3);
}
body.theme-odyssey-custom .empty-desc {
  font-size: var(--text-md);
  line-height: var(--leading-relaxed);
  color: var(--color-muted);
  margin: 0;
}
/* 줄바꿈 보존된 친근한 메시지 (추가.txt 권장 문구) */
body.theme-odyssey-custom .empty-desc--friendly {
  font-size: var(--text-md);
  line-height: var(--leading-relaxed);
  color: var(--color-muted);
  margin: 0;
  white-space: pre-line;   /* HTML 안의 줄바꿈 그대로 표시 */
}


/* ════════════════════════════════════════════════════════════════════
   12. 메인 하단 CTA 밴드 (시안 메인04~05)
   ════════════════════════════════════════════════════════════════════ */
body.theme-odyssey-custom .index-cta-wrap {
  margin-bottom: var(--section-gap);
}
body.theme-odyssey-custom .cta-band {
  background-color: var(--color-notice-bg);
  padding: var(--space-12) var(--space-12);
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: var(--space-9);
  flex-wrap: wrap;
}
body.theme-odyssey-custom .cta-band-text {
  flex: 1 1 var(--cta-text-flex-min);
}
body.theme-odyssey-custom .cta-band-title {
  font-size: var(--text-cta-band-title-pc);
  font-weight: var(--weight-black);
  color: var(--color-text-strong);
  letter-spacing: var(--letter-spacing);
  line-height: var(--leading-tight);
  margin: 0 0 var(--space-3);
}
body.theme-odyssey-custom .cta-band-desc {
  font-size: var(--text-cta-band-desc-pc);
  line-height: var(--leading-relaxed);
  color: var(--color-muted);
  margin: 0;
}
body.theme-odyssey-custom .cta-band-actions {
  flex: 0 1 auto;
  display: flex;
  flex-wrap: wrap;
  gap: var(--space-3);
}
body.theme-odyssey-custom .cta-pill {
  display: inline-flex;
  align-items: center;
  height: var(--btn-h);
  padding: 0 var(--space-6);
  background-color: var(--color-secondary);
  color: var(--color-text);
  border-radius: var(--radius-md);
  font-size: var(--text-cta-pill-pc);
  font-weight: var(--weight-bold);
  letter-spacing: var(--letter-spacing);
  border: var(--border-teal);
  transition:
    background-color var(--duration-fast) ease,
    transform        var(--duration-base) var(--ease-soft);
}
body.theme-odyssey-custom .cta-pill:hover {
  background-color: var(--color-secondary-soft);
  transform: translateY(calc(-1 * var(--motion-shift-sm)));
}


/* ════════════════════════════════════════════════════════════════════
   13. 사이드바 - PC 레이아웃 (Stage 3 에서 사이드바 카드 정밀화)
   ════════════════════════════════════════════════════════════════════ */
body.theme-odyssey-custom .area-aside {
  /* PC 에서는 메인 영역 옆에 배치 */
}

/* ─ Tistory <s_sidebar> / <s_sidebar_element> 디렉티브 태그 layout 무력화 ─
 *
 * 문제:
 *   Tistory 가 이 두 디렉티브 태그를 DOM 에 그대로 남겨두는 케이스가 있어
 *   (사이드바 모듈 설정 + 렌더링 상태에 따라 변동),
 *   .area-aside 가 모바일에서 flex 컨테이너일 때 두 태그가 flex item 으로
 *   동작하면서 order: 0 (기본값) 으로 잡혀 mobile-menu-head(order: 20) 위에
 *   자식 콘텐츠 높이만큼 빈 공간을 만듦.
 *   또한 wrapper 안의 box-recent / mobile-recent-tabs 등의 order 규칙
 *   (§16 area-aside order 부여) 이 직속 자식이 아니라 무시되어 위치 비정상.
 *
 * 해결:
 *   display: contents 로 wrapper 자체를 layout box 에서 제거 →
 *   wrapper 안의 .sidebar-card / .mobile-recent-tabs / .sidebar-recent-grid 가
 *   .area-aside 의 직속 flex item 으로 승격되어 order 규칙이 정상 적용됨.
 *
 * 부가:
 *   두 태그 모두 시맨틱 의미가 없는 Tistory 디렉티브이므로 layout 트리에서
 *   제거해도 접근성·SEO 영향 없음 (자식의 h3·a·ul 등 시맨틱 요소는 유지). */
body.theme-odyssey-custom .area-aside s_sidebar,
body.theme-odyssey-custom .area-aside s_sidebar_element {
  display: contents;
}

/* 사이드바 카드 — 메인화면 상세값 §24 / 모바일 §27
 *  PC: padding 31, radius 30 (카드 베이스 적용), 그림자 0 10px 28px 0.06
 *  모바일: padding 28 30, radius 28, 그림자 0 10px 26px 0.06 */
body.theme-odyssey-custom .sidebar-card {
  padding: var(--sidebar-card-pad-pc);                  /* 31px - 메인화면 상세값 §24 */
  margin-bottom: var(--sidebar-card-gap-pc);
}

/* ─ 최신글 / 인기글 박스 — 사용자 결정: 모든 페이지에서 1열 ─
 *   skin.html 에서 두 .sidebar-card.box-recent 를 .sidebar-recent-grid 로 감쌌음.
 *   - 그리드 컬럼 수는 토큰(--recent-popular-cols-pc / -mobile)으로 제어 (현재 모두 1)
 *   - gap 은 박스 사이 간격 토큰 사용
 *   - 그리드 안 카드는 margin-bottom 을 0 으로 두어 박스 간 이중 간격 제거 */
body.theme-odyssey-custom .sidebar-recent-grid {
  display: grid;
  grid-template-columns: repeat(var(--recent-popular-cols-pc), minmax(0, 1fr));
  gap: var(--sidebar-card-gap-pc);
  /* 그리드 자체는 다음 사이드바 모듈과 박스 간격으로 분리 */
  margin-bottom: var(--sidebar-card-gap-pc);
}
body.theme-odyssey-custom .sidebar-recent-grid > .sidebar-card {
  /* 그리드 안에서는 카드 자체 margin-bottom 제거 (gap 으로 일원화) */
  margin-bottom: 0;
}

body.theme-odyssey-custom .sidebar-title {
  font-size: var(--text-sidebar-title-pc);
  font-weight: var(--weight-black);
  color: var(--color-text-strong);
  letter-spacing: var(--letter-spacing);
  margin: 0 0 var(--space-5);
}

/* 모바일 메뉴 전용 요소 - PC 에서는 숨김 */
body.theme-odyssey-custom .mobile-overlay,
body.theme-odyssey-custom .mobile-close,
body.theme-odyssey-custom .mobile-menu-head,
body.theme-odyssey-custom .mobile-menu-cats-wrap,
body.theme-odyssey-custom .mobile-menu-foot,
body.theme-odyssey-custom .mobile-menu-cta,
body.theme-odyssey-custom .mobile-menu-cta-fallback,
body.theme-odyssey-custom .mobile-search,
body.theme-odyssey-custom .mobile-menu-affiliate,
body.theme-odyssey-custom .mobile-recent-tabs {
  display: none;
}


/* ════════════════════════════════════════════════════════════════════
   14. 푸터 (시안 메인05, 본문 07)
   - box-shadow 는 §5 공통 베이스에서 추가.txt 매핑 표 정확값으로 적용됨
   ════════════════════════════════════════════════════════════════════ */
body.theme-odyssey-custom .site-footer {
  /* 메인화면 상세값 §30: padding 38 40 / radius 32 (카드 베이스 적용) / 그림자 0 12px 30px 0.07 */
  margin-top: var(--space-footer-margin);
  padding: var(--footer-pad-pc);                /* 28 40 - 메인화면 상세값 §30 (축소) */
}

body.theme-odyssey-custom .footer-inner {
  display: grid;
  grid-template-columns: 1.4fr 1fr 1fr 1.4fr;
  column-gap: var(--footer-grid-col-gap-pc);
  row-gap: var(--footer-grid-row-gap-pc);
}

/* 1열: 브랜드 */
body.theme-odyssey-custom .footer-brand {
  display: flex;
  flex-direction: column;
  gap: var(--space-4);
}
body.theme-odyssey-custom .footer-brand-title {
  font-size: var(--text-footer-brand-title-pc);
  font-weight: var(--weight-black);
  color: var(--color-primary);
  letter-spacing: var(--letter-spacing);
  line-height: var(--leading-tight);
  transition: color var(--duration-fast) ease;
}
body.theme-odyssey-custom .footer-brand-title:hover {
  color: var(--color-primary-dark);
}
body.theme-odyssey-custom .footer-brand-desc {
  font-size: var(--text-footer-brand-desc-pc);
  font-weight: var(--weight-normal);
  line-height: var(--leading-relaxed);
  color: var(--color-muted);
  letter-spacing: var(--letter-spacing);
  margin: 0;
}

/* 2~3열 공통: 컬럼 타이틀 + 링크 리스트 — 메인화면 상세값 §31 */
body.theme-odyssey-custom .footer-col-title {
  font-size: var(--text-footer-col-title-pc);              /* 18px - 메인화면 상세값 §31 */
  font-weight: var(--weight-footer-col-title);             /* 900 - 메인화면 상세값 §31 (이전 800 → 900) */
  color: var(--color-text);
  letter-spacing: var(--letter-spacing);
  margin: 0 0 var(--space-footer-col-title-bottom-pc);     /* 12 - 메인화면 상세값 §31 (축소) */
}
body.theme-odyssey-custom .footer-cat,
body.theme-odyssey-custom .footer-policy {
  display: flex;
  flex-direction: column;
}
body.theme-odyssey-custom .footer-cat-nav,
body.theme-odyssey-custom .footer-policy-fallback {
  display: flex;
  flex-direction: column;
  gap: var(--space-3);
}
body.theme-odyssey-custom .footer-cat-nav > ul {
  display: flex;
  flex-direction: column;
  gap: var(--space-3);
  margin: 0;
  padding: 0;
  list-style: none;
}

body.theme-odyssey-custom .footer-link,
body.theme-odyssey-custom .footer-cat-nav a,
body.theme-odyssey-custom .footer-policy a {
  display: inline-block;
  font-size: var(--text-foot-link-pc);            /* 15px - 메인화면 상세값 §32 (PC) */
  font-weight: var(--weight-bold);                /* 700 - 메인화면 상세값 §32 */
  line-height: var(--leading-foot-link);          /* 1.9 - 메인화면 상세값 §32 */
  color: var(--color-footer-link);                /* #6B7280 - 메인화면 상세값 §32 */
  letter-spacing: var(--letter-spacing);
  transition: color var(--duration-fast) ease, transform var(--duration-base) var(--ease-soft);
}
body.theme-odyssey-custom .footer-link:hover,
body.theme-odyssey-custom .footer-cat-nav a:hover,
body.theme-odyssey-custom .footer-policy a:hover {
  color: var(--color-footer-link-hover);
}

/* fallback - policy 비어있을 때만 표시 */
body.theme-odyssey-custom .footer-policy-fallback {
  display: none;
}
body.theme-odyssey-custom.footer-policy-empty .footer-policy-fallback {
  display: flex;
}

/* 4열: 제휴 안내
 * gap 미지정 — 카테고리/운영 안내 컬럼과 동일하게 title margin-bottom 만으로 간격 제어.
 * 컬럼간 첫 콘텐츠 텍스트 시작 위치를 정렬. */
body.theme-odyssey-custom .footer-affiliate {
  display: flex;
  flex-direction: column;
}
body.theme-odyssey-custom .footer-affiliate-box {
  padding: var(--space-3) var(--space-6);
  background-color: var(--color-notice-bg);
  border: var(--border-soft);
  border-radius: var(--radius-lg);
  font-size: var(--text-footer-affiliate-pc);
  font-weight: var(--weight-normal);
  line-height: var(--leading-relaxed);
  color: var(--color-muted);
  letter-spacing: var(--letter-spacing);
}

/* 하단 줄: 카피라이트 + 태그라인 (전체 너비 가로선 + 좌우 정렬)
   - margin-top: SNS 아이콘 행과 구분선 사이 (이전 36 → 16)
   - padding-top: 구분선과 카피라이트 텍스트 사이 (이전 28 → 16) */
body.theme-odyssey-custom .footer-bottom {
  grid-column: 1 / -1;
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: var(--footer-bottom-gap-pc);                   /* 20px - PC: 좌측 카피라이트 ↔ 우측 태그라인 가로 간격 */
  margin-top: var(--space-4);
  padding-top: var(--space-footer-copy-pad-top-pc);   /* 20 - 푸터 하단 시각 대칭 (축소) */
  border-top: var(--border-soft);
  flex-wrap: wrap;
}
body.theme-odyssey-custom .footer-copy {
  font-size: var(--text-footer-copy-pc);
  font-weight: var(--weight-extrabold);
  color: var(--color-text);
  letter-spacing: var(--letter-spacing);
  margin: 0;
}
body.theme-odyssey-custom .footer-tagline {
  font-size: var(--text-footer-tagline-pc);
  font-weight: var(--weight-normal);
  color: var(--color-muted);
  letter-spacing: var(--letter-spacing);
  margin: 0;
}


/* ════════════════════════════════════════════════════════════════════
   15. 모바일 햄버거 메뉴 (시안 모바일_햄버거_메뉴_01~03)
   - 베이스 구조만 정의 (모바일 미디어쿼리에서 표시)
   ════════════════════════════════════════════════════════════════════ */

/* 오버레이 */
body.theme-odyssey-custom .mobile-overlay {
  position: fixed;
  inset: 0;
  background-color: var(--shadow-overlay);
  opacity: 0;
  visibility: hidden;
  z-index: var(--z-overlay);
  transition: opacity var(--duration-base) ease, visibility var(--duration-base) ease;
}
body.theme-odyssey-custom.menu-open .mobile-overlay {
  opacity: 1;
  visibility: visible;
}

/* 닫기 버튼 (모바일에서만 표시 / 우측 드로어 → inner side 인 좌측 상단 배치)
 * 모바일 UX: 호버 없이도 즉시 발견되도록 기본 배경 부여 */
body.theme-odyssey-custom .mobile-close {
  position: absolute;
  top: var(--space-4);
  right: var(--space-4);              /* 사용자 요청: 우측 상단 배치 (이전 left) */
  width: var(--mobile-close-size);
  height: var(--mobile-close-size);
  display: none;
  align-items: center;
  justify-content: center;
  background-color: var(--color-secondary-soft);
  color: var(--color-primary);
  border-radius: var(--radius-pill);
  /* 추가.txt §5 Z-index 시스템 */
  z-index: var(--z-base);
  transition: background-color var(--duration-fast) ease, color var(--duration-fast) ease;
}
body.theme-odyssey-custom .mobile-close:hover {
  background-color: var(--color-secondary);
}


/* ════════════════════════════════════════════════════════════════════
   16. 미디어 쿼리 - 태블릿 (~1060px)
   ════════════════════════════════════════════════════════════════════ */
@media (max-width: 1060px) {
  body.theme-odyssey-custom #wrap {
    padding-left: var(--page-pad-mobile-x);
    padding-right: var(--page-pad-mobile-x);
  }

  /* 헤더 검색창 폭 축소 */
  body.theme-odyssey-custom .site-search {
    width: var(--search-w-tablet);
  }

  /* 카테고리 4열 → 2열 */
  body.theme-odyssey-custom .category-cards {
    grid-template-columns: repeat(2, minmax(0, 1fr));
  }

  /* 푸터 4열 → 2열 */
  body.theme-odyssey-custom .footer-inner {
    grid-template-columns: 1fr 1fr;
    gap: var(--space-9);
  }

  /* 히어로 그리드 비율 살짝 완화 */
  body.theme-odyssey-custom .hero {
    grid-template-columns: minmax(0, 1.2fr) minmax(0, 1fr);
  }
}


/* ════════════════════════════════════════════════════════════════════
   17. 미디어 쿼리 - 모바일 (~768px)
   - 햄버거 메뉴 활성화
   - 단일 컬럼 레이아웃
   ════════════════════════════════════════════════════════════════════ */
@media (max-width: 768px) {

  /* 페이지 패딩 */
  body.theme-odyssey-custom #wrap {
    padding-top: var(--page-pad-mobile-top);
    padding-bottom: var(--page-pad-mobile-bottom);
  }

  /* ─ 헤더 — 메인화면 상세값 모바일 §2: padding 24 22 / radius 24 / 그림자 0 8px 22px 0.06 / 아래 28 ─ */
  body.theme-odyssey-custom .site-header {
    padding: var(--header-pad-mobile-y) var(--header-pad-mobile-x);
    border-radius: var(--header-radius-mobile);          /* 24px - 메인화면 상세값 모바일 §2 */
    box-shadow: var(--shadow-header-mobile);             /* 0 8px 22px 0.06 - 메인화면 상세값 모바일 §2 */
  }
  body.theme-odyssey-custom .header-inner {
    gap: var(--space-3);
    justify-content: space-between;
  }
  body.theme-odyssey-custom .site-logo {
    /* 중간 플러스: 모바일 로고 24px */
    font-size: var(--text-logo-mobile);
  }
  /* PC 메뉴/검색 숨김, 햄버거 표시 */
  body.theme-odyssey-custom .site-nav,
  body.theme-odyssey-custom .site-nav-fallback,
  body.theme-odyssey-custom .site-search {
    display: none;
  }
  body.theme-odyssey-custom .mobile-toggle {
    display: inline-flex;
  }

  /* ─ 컨테이너 / 메인 ─ */
  /* ※ 모바일 헤더 ↔ 본문 사이 여백은 위 body.theme-odyssey-custom 토큰 재정의에서
   *   --space-header-margin: var(--space-header-margin-mobile) 로 처리됨 (16px)
   * ※ PC 베이스 #container { margin-top: var(--space-header-margin) } 셀렉터가 그대로 동작 */

  /* ─ 히어로 — 메인화면 상세값 모바일 §12: 1열 / gap 22 / padding 30 / radius 30 / 그림자 0 12px 30px 0.07 ─ */
  body.theme-odyssey-custom .hero {
    grid-template-columns: 1fr;
    gap: var(--hero-card-gap-mobile);                  /* 22px - 메인화면 상세값 모바일 §12 */
    margin-bottom: var(--section-gap-mobile);
  }
  body.theme-odyssey-custom .hero-main {
    padding: var(--hero-card-pad-mobile);              /* 30px */
    min-height: var(--hero-card-min-h-mobile);
    border-radius: var(--hero-card-radius-mobile);     /* 30px - 메인화면 상세값 모바일 §12 */
    box-shadow: var(--hero-card-shadow-mobile);        /* 0 12px 30px 0.07 - 메인화면 상세값 모바일 §12 */
    /* ※ 우측 .hero-image 박스 제거됨 — grid 리셋(grid-template-columns/row-gap/align-items) 불필요
     *   복구 시 PC와 동일하게 grid-template-columns: 1fr / row-gap / align-items 함께 복원 */
  }
  /* 히어로 대표 이미지 (.hero-image) 모바일 셀렉터 제거됨
   *  ※ figure 박스 자체 삭제와 동기화 — 복구 시 PC 셀렉터와 함께 복원 */
  /* 히어로 제목 — 메인화면 상세값 모바일 §14: 32 / 1.25 / -0.055em / 아래 14 */
  body.theme-odyssey-custom .hero-title {
    font-size: var(--text-hero-title-mobile);          /* 32px */
    line-height: var(--leading-hero-title-mobile);     /* 1.25 */
    letter-spacing: var(--letter-spacing-display);     /* -0.055em */
    margin-bottom: var(--space-hero-title-bottom-mobile);   /* 14px */
  }
  /* 히어로 설명 — 메인화면 상세값 모바일 §15: 16 / 1.78 / 아래 22 */
  body.theme-odyssey-custom .hero-desc {
    font-size: var(--text-hero-desc-mobile);
    line-height: var(--leading-hero-desc-mobile);
    margin-bottom: var(--space-hero-desc-bottom-mobile);    /* 22px */
  }
  /* 히어로 사이드 — 메인화면 상세값 모바일 §18·§19·§20 */
  body.theme-odyssey-custom .hero-side {
    padding: var(--hero-side-pad-mobile);              /* 28px - 메인화면 상세값 모바일 §18 */
    min-height: var(--hero-card-min-h-mobile);
    border-radius: var(--hero-side-radius-mobile);     /* 26px - 메인화면 상세값 모바일 §18 */
    box-shadow: var(--hero-side-shadow-mobile);        /* 0 10px 28px 0.06 - 메인화면 상세값 모바일 §18 */
  }
  body.theme-odyssey-custom .hero-side-title {
    font-size: var(--text-hero-side-title-mobile);     /* 23px - 메인화면 상세값 모바일 §19 */
  }
  body.theme-odyssey-custom .hero-side-list {
    gap: var(--gap-hero-side-list-mobile);             /* 13px - 메인화면 상세값 모바일 §20 */
  }
  body.theme-odyssey-custom .hero-side-list a {
    font-size: var(--text-hero-side-link-mobile);      /* 15.5px - 메인화면 상세값 모바일 §20 */
    line-height: var(--leading-hero-side-link-mobile); /* 1.76 - 메인화면 상세값 모바일 §20 */
  }
  /* CTA 버튼 모바일 — 메인화면 상세값 모바일 §16: padding 14 22 / radius 16 / font 15·900 / 100% / min-h 50 / 그림자 0 7px 18px 0.22 */
  body.theme-odyssey-custom .btn-cta {
    padding: var(--btn-cta-pad-y-mobile) var(--btn-cta-pad-x-mobile);
    border-radius: var(--btn-cta-radius-mobile);       /* 16px - 메인화면 상세값 모바일 §16 */
    font-size: var(--btn-cta-font-mobile);
    min-height: var(--btn-cta-min-h-mobile);           /* 50px - 메인화면 상세값 모바일 §16 */
    width: var(--btn-cta-width-mobile);
    box-shadow: var(--shadow-cta-mobile-real);         /* 0 7px 18px 0.22 - 메인화면 상세값 모바일 §16 */
  }

  /* ─ 섹션 헤드 — 메인화면 상세값 모바일 §11: 25 / 자간 -0.05em / 아래 20 ─ */
  body.theme-odyssey-custom .section-head {
    flex-wrap: wrap;
    gap: var(--space-3);
    margin-bottom: var(--space-section-title-bottom-mobile);    /* 20px - 메인화면 상세값 모바일 §11 */
  }
  body.theme-odyssey-custom .section-title {
    font-size: var(--text-section-title-mobile);       /* 25px - 메인화면 상세값 모바일 §11 */
  }

  /* ─ 카테고리 카드 — 메인화면 상세값 모바일 §21·§22·§23·§24·§25 ─ */
  body.theme-odyssey-custom .categories,
  body.theme-odyssey-custom .area-common,
  body.theme-odyssey-custom .index-cta-wrap {
    margin-bottom: var(--section-gap-mobile);
  }
  body.theme-odyssey-custom .category-cards {
    grid-template-columns: repeat(var(--category-cards-cols-mobile), minmax(0, 1fr));
    gap: var(--category-cards-gap-mobile);
  }
  body.theme-odyssey-custom .category-card {
    padding: var(--category-card-pad-mobile);          /* 26 28 - 메인화면 상세값 모바일 §22 */
    min-height: var(--category-card-min-h-mobile);     /* 180 - 메인화면 상세값 모바일 §22 */
    border-radius: var(--category-card-radius-mobile); /* 28 - 메인화면 상세값 모바일 §22 */
    box-shadow: var(--category-card-shadow-mobile);    /* 0 10px 24px 0.06 - 메인화면 상세값 모바일 §22 */
  }
  body.theme-odyssey-custom .category-icon {
    width: var(--category-icon-size-mobile);
    height: var(--category-icon-size-mobile);
    border-radius: var(--category-icon-radius-mobile); /* 16 - 메인화면 상세값 모바일 §23 */
    margin-bottom: var(--space-4);                     /* 16 - 메인화면 상세값 모바일 §23: 아이콘 박스 아래 간격 */
  }
  body.theme-odyssey-custom .category-title {
    font-size: var(--text-category-title-mobile);      /* 20 - 메인화면 상세값 모바일 §24 */
    margin-bottom: var(--space-category-title-bottom-mobile);   /* 8 - 메인화면 상세값 모바일 §24 */
  }
  body.theme-odyssey-custom .category-desc {
    font-size: var(--text-category-desc-mobile);       /* 15 */
  }

  /* ─ 글 카드 (메인/카테고리 공용) — 메인 카드 간격 모바일 24px ─ */
  body.theme-odyssey-custom .area-common {
    grid-template-columns: 1fr;
    gap: var(--hero-card-gap-mobile);
  }
  body.theme-odyssey-custom .post-card-body {
    /* 추가.txt 모바일: 카드 내부 여백 28px (최신글 카드) */
    padding: var(--space-card-pad-mobile-real);
  }

  /* ─ CTA 밴드 ─ */
  body.theme-odyssey-custom .cta-band {
    /* 추가.txt 모바일: 카드 내부 여백 28px */
    padding: var(--space-card-pad-mobile-real);
    flex-direction: column;
    align-items: stretch;
  }
  body.theme-odyssey-custom .cta-band-title {
    font-size: var(--text-cta-band-title-mobile);
  }
  body.theme-odyssey-custom .cta-band-actions {
    gap: var(--space-2);
  }

  /* ─ 푸터 — 메인화면 상세값 모바일 §33·§34 (2026-05-23 축소):
     padding 24 20 / radius 28 / 그림자 0 10px 28px 0.07 / 섹션 gap 16 ─ */
  body.theme-odyssey-custom .site-footer {
    margin-top: var(--space-footer-margin-mobile);           /* 48 - 모바일 전용 (PC: 72) */
    padding: var(--footer-pad-mobile);                       /* 24 20 - 메인화면 상세값 모바일 §33 */
    border-radius: var(--footer-radius-mobile);              /* 28 - 메인화면 상세값 모바일 §33 */
    box-shadow: var(--shadow-footer-mobile);                 /* 0 10px 28px 0.07 - 메인화면 상세값 모바일 §33 */
  }
  body.theme-odyssey-custom .footer-inner {
    grid-template-columns: 1fr;
    gap: var(--footer-section-gap-mobile);                   /* 16 - 메인화면 상세값 모바일 §34 */
  }
  /* 푸터 컬럼 제목 — 메인화면 상세값 모바일 §35: 17 / 900 / 아래 8 */
  body.theme-odyssey-custom .footer-col-title {
    margin: 0 0 var(--space-footer-col-title-bottom-mobile); /* 8 - 메인화면 상세값 모바일 §35 */
    font-size: var(--text-footer-col-title-mobile);          /* 17 */
  }
  /* 푸터 링크 — 메인화면 상세값 모바일 §36: 14 / 1.9 / #6B7280
   * + WCAG 2.1 AA 터치 타겟 44px (텍스트는 그대로, 클릭 영역만 확장) — [중요].txt #9 */
  body.theme-odyssey-custom .footer-link,
  body.theme-odyssey-custom .footer-cat-nav a,
  body.theme-odyssey-custom .footer-policy a {
    display: flex;
    align-items: center;
    min-height: var(--touch-target-min);                     /* 44px - [중요].txt #9 */
    font-size: var(--text-foot-link-mobile);                 /* 14 */
  }
  /* 푸터 브랜드 영역 모바일 토큰 명시 */
  body.theme-odyssey-custom .footer-brand-title {
    font-size: var(--text-footer-brand-title-mobile);
  }
  body.theme-odyssey-custom .footer-brand-desc {
    font-size: var(--text-footer-brand-desc-mobile);
  }
  /* 카피라이트 — 메인화면 상세값 모바일 §37: 12.5 / #9CA3AF / 위 padding 20 / 위 구분선 */
  body.theme-odyssey-custom .footer-copy {
    font-size: var(--text-footer-copy-mobile);               /* 12.5 */
    color: var(--color-footer-copy-mobile);                  /* #9CA3AF */
  }
  body.theme-odyssey-custom .footer-tagline {
    font-size: var(--text-footer-tagline-mobile);
  }
  body.theme-odyssey-custom .footer-bottom {
    flex-direction: column;
    align-items: flex-start;
    gap: var(--footer-bottom-gap-mobile);                    /* 8px - 모바일: 위 카피라이트 ↔ 아래 태그라인 세로 간격 (이전 12→8 압축) */
    margin-top: var(--space-4);
    padding-top: var(--space-footer-copy-pad-top-mobile);    /* 28 - 푸터 하단 시각 대칭 (위 16+28=44 ↔ 아래 30) */
    border-top: var(--border-soft);                          /* 1px solid #E8E2DA - 메인화면 상세값 모바일 §37 */
  }

  /* ─ 모바일 카테고리·운영 안내 - 인라인 + 가운데점 ' · ' 구분자 ─
     - 세로로 길게 쌓이는 리스트를 한 줄(여러 줄 wrap)로 압축
     - 구분자는 CSS ::after 로 마지막 항목 제외 부착 → HTML 깔끔 유지
     - 분리자 변경 가능: content 값만 수정 (예: '．' / ' · ' / ' / ') */
  body.theme-odyssey-custom .footer-policy-fallback {
    flex-direction: row;
    flex-wrap: wrap;
    gap: 0;
    row-gap: var(--space-2);
    align-items: baseline;
  }
  body.theme-odyssey-custom .footer-policy-fallback > a:not(:last-child)::after,
  body.theme-odyssey-custom .footer-policy > a:not(:last-of-type)::after {
    content: ' · ';
    color: var(--color-muted);
    margin: 0 var(--space-2);
    font-weight: var(--weight-normal);
    pointer-events: none;
  }
  /* Tistory [##_blog_menu_##] 렌더 - <ul><li> 구조 - 도 인라인 처리
   * ※ 2026-05-23 ::after 위치 이동 (index.html 인라인 <style> 와 동기화):
   *   이전엔 li:not(:last-child)::after 였으나, a 가 모바일에서
   *   display:flex (44px 터치 타겟) 로 적용되면서 a 가 li 안에서
   *   한 줄을 통째로 차지 → li::after (가운뎃점) 가 다음 줄로 떨어지는 문제 발생.
   *   ::after 를 a 의 자식으로 두면 a 의 flex container 안에서
   *   '텍스트' + '·' 가 가로로 나란히 배치되어 정상 표시.
   *   .footer-cat-fallback / .footer-policy 와 동일한 패턴(a::after).
   */
  body.theme-odyssey-custom .footer-cat-nav ul {
    display: flex;
    flex-direction: row;
    flex-wrap: wrap;
    gap: 0;
    row-gap: var(--space-2);
    margin: 0;
    padding: 0;
    list-style: none;
  }
  body.theme-odyssey-custom .footer-cat-nav li {
    display: inline-block;
  }
  body.theme-odyssey-custom .footer-cat-nav li:not(:last-child) > a::after {
    content: ' · ';
    color: var(--color-muted);
    margin: 0 var(--space-2);
    font-weight: var(--weight-normal);
    pointer-events: none;
  }

  /* ─ 모바일 제휴 안내 - 박스 제거 + 첫 줄 숨김 (요약 1줄만) ─ */
  body.theme-odyssey-custom .footer-affiliate-box {
    background-color: transparent;
    border: none;
    padding: 0;
    /* 푸터 링크와 동일 크기 잠금 (모바일 15px) */
    font-size: var(--text-footer-affiliate-mobile);
  }
  body.theme-odyssey-custom .footer-affiliate-line1,
  body.theme-odyssey-custom .footer-affiliate-line1 + br {
    display: none;
  }

  /* ─ 모바일 햄버거 메뉴 (시안 모바일_햄버거_메뉴_01~03) ─ */

  /* 사이드바 = 드로어 (오른쪽에서 슬라이드 인) */
  body.theme-odyssey-custom .area-aside {
    position: fixed;
    top: 0;
    right: 0;
    width: var(--drawer-w-vw);
    max-width: var(--drawer-w);
    height: 100vh;
    height: 100dvh;
    background-color: var(--color-card);
    border-radius: var(--drawer-radius) 0 0 var(--drawer-radius);
    box-shadow: var(--drawer-shadow);
    padding: var(--drawer-pad);
    padding-top: var(--drawer-pad-top);  /* 상단 빈 공간 축소 (닫기 버튼 우측 이동에 따라) */
    overflow-y: auto;
    overflow-x: hidden;
    transform: translateX(100%);
    transition: transform var(--duration-slow) var(--ease-soft);
    z-index: var(--z-drawer);
    display: flex;
    flex-direction: column;
    gap: 0;
  }
  body.theme-odyssey-custom.menu-open {
    /* 드로어가 화면 안으로 슬라이드된 상태에서만 그림자 부여 (깊이감)
     * → 닫힌 상태에서 우측 viewport 로 그림자 누출되는 문제 해결 */
    --drawer-shadow: var(--shadow-drawer);
  }
  body.theme-odyssey-custom.menu-open .area-aside {
    transform: translateX(0);
  }

  /* 드로어 상단 drag handle 인디케이터 (시안 모바일_햄버거_메뉴_01 참조)
   * ※ 사용자 요청: 상단 회색 바 삭제 (장식 제거 + 상단 여백 깔끔하게)
   * ::before 자체를 제거하여 토큰(--drawer-handle-*) 은 정의만 남고 미사용
   * 향후 다시 복원 가능 */
  body.theme-odyssey-custom .area-aside::before {
    content: none;
  }

  /* 닫기 버튼 표시 */
  body.theme-odyssey-custom .mobile-close {
    display: inline-flex;
  }

  /* 모바일 메뉴 헤드 (블로그명 + 설명 + 분류 전체 + 카테고리) */
  /* 모바일 메뉴 헤드 (블로그명 + 설명 + 분류 전체 + 카테고리)
   * ※ 사용자 요청: 설명 하단 실선 제거 (이전 border-bottom)
   * ※ 사용자 요청: 설명문 우측 여백이 너무 많음 → padding-right 를 head 에서 제거
   *    (이전: head 전체에 X 버튼 회피 padding 56px → 설명문도 동일 폭으로 cut-off)
   *    (현재: padding-right 는 .mobile-menu-title 한정 → 설명문은 X 버튼과 줄이 다르므로 우측 풀폭 가능) */
  body.theme-odyssey-custom .mobile-menu-head {
    display: flex;
    flex-direction: column;
    gap: var(--space-3);
    padding-bottom: var(--space-5);  /* 실선 없으니 다음 영역과의 시각 분리만 */
    margin-bottom: var(--space-5);
  }
  body.theme-odyssey-custom .mobile-menu-title {
    /* 추가.txt: 메뉴 블로그명 24px / weight 900 */
    font-size: var(--text-mobile-menu-blog);
    font-weight: var(--weight-black);
    color: var(--color-primary);
    letter-spacing: var(--letter-spacing);
    line-height: var(--leading-tight);
    /* 닫기 버튼(.mobile-close)과 겹침 방지 — head 가 아닌 title 에만 적용 */
    padding-right: calc(var(--mobile-close-size) + var(--space-4));
  }
  body.theme-odyssey-custom .mobile-menu-desc {
    /* 추가.txt: 메뉴 설명 14px */
    font-size: var(--text-mobile-menu-desc);
    line-height: var(--leading-relaxed);
    color: var(--color-muted);
    margin: 0;
    /* 사용자 요청: 분류 전체보기 / 최근 글 등 section header 와 좌측 정렬 통일 */
    padding-left: var(--mobile-drawer-section-pad-x);
    /* 사용자 요청: '애드센스' 가 통째로 line 2 로 wrap 되도록 한글 단어 단위 wrap 적용
     * (이전: word-break:normal 로 '애드 | 센스' 글자 단위 분리됨) */
    word-break: var(--mobile-drawer-text-word-break);
  }

  /* 드로어 프로필 박스 (.mobile-menu-profile) — 메인화면 상세값 모바일 §6
   *  padding 20 / radius 22 / 배경 #DDE8E3 / 아래 26
   *  ※ mobile-menu-head 내부에서 블로그명·설명을 감싸는 강조 슬롯
   *  ※ 사용 시 HTML 마크업: <div class="mobile-menu-profile"> ... </div> */
  body.theme-odyssey-custom .mobile-menu-profile {
    padding: var(--drawer-profile-pad);                /* 20 */
    border-radius: var(--drawer-profile-radius);       /* 22 */
    background-color: var(--drawer-profile-bg);        /* #DDE8E3 */
    margin-bottom: var(--drawer-profile-margin-bottom);/* 26 */
    display: flex;
    flex-direction: column;
    gap: var(--space-2);
  }
  /* 프로필 박스 안의 블로그명은 padding-right 닫기 버튼 회피 무효화 (박스 안이라 안전) */
  body.theme-odyssey-custom .mobile-menu-profile .mobile-menu-title {
    padding-right: 0;
  }
  /* 프로필 박스 안의 설명은 section header 들여쓰기 해제 (박스 자체가 padding 보유) */
  body.theme-odyssey-custom .mobile-menu-profile .mobile-menu-desc {
    padding-left: 0;
  }

  /* 분류 전체보기
   * ※ 사용자 요청: 위/아래 실선 모두 제거 (이전 border-top + border-bottom) */
  body.theme-odyssey-custom .mobile-menu-allcat {
    display: flex;
    align-items: center;
    width: 100%;
    height: var(--mobile-link-h);
    /* 사용자 요청: section header 정렬 토큰 사용 (값은 기존 12px 와 동일) */
    padding: 0 var(--mobile-drawer-section-pad-x);
    /* 추가.txt: 카테고리 링크 17px - 분류 전체보기도 카테고리 그룹 헤드라 동일 토큰 사용 */
    font-size: var(--text-menu-cat-mobile);
    font-weight: var(--weight-bold);
    color: var(--color-text);
    letter-spacing: var(--letter-spacing);
  }
  body.theme-odyssey-custom .mobile-menu-cats {
    display: flex;
    flex-direction: column;
    /* 분류 전체보기(allcat) 와 카테고리 항목 사이 한 줄 정도의 시각적 공백 (사용자 요청) */
    margin-top: var(--mobile-menu-cats-margin-top);
  }
  body.theme-odyssey-custom .mobile-menu-cat-link {
    display: flex;
    align-items: center;
    justify-content: space-between;
    /* 사용자 요청: 분류 전체보기·푸터 링크(50px)와 동일 높이로 통일 (이전 52px) — '위치가 살짝 맞지 않아' 해결 */
    height: var(--mobile-link-h);
    /* 사용자 요청: 좌측 정렬 통일
     * - padding-left: leaf item 들여쓰기 (24px) → 텍스트가 recent글·footer 와 같은 x 에 정렬
     * - padding-right: chevron 영역 확보 (12px) */
    padding: 0 var(--space-3) 0 var(--mobile-drawer-item-pad-x);
    /* bullet ::before 가 padding-left 영역 안쪽에 hang 하도록 containing block 제공 */
    position: relative;
    /* 추가.txt: 카테고리 링크 17px / weight 800 */
    font-size: var(--text-menu-cat-mobile);
    font-weight: var(--weight-extrabold);
    color: var(--color-text);
    letter-spacing: var(--letter-spacing);
    /* 사용자 요청: 카테고리 항목 사이 실선 제거 (이전 border-bottom) */
    transition: color var(--duration-fast) ease;
  }
  /* 카테고리 항목 앞 bullet (·) — 사용자 요청
   * ※ '분류 전체보기'(allcat)는 그룹 헤더로 bullet 미적용
   * ※ ::before 가상요소로 마크업 변경 없이 추가 (시맨틱 요소 보존, 스크린리더 무시)
   * ※ position absolute 로 padding-left 영역 안쪽에 hang →
   *    bullet 은 section header(분류 전체보기) 와 같은 x 에 정렬되고,
   *    cat text 는 padding-left 너머 leaf item x 에 정렬됨 (Group B) */
  body.theme-odyssey-custom .mobile-menu-cat-link::before {
    content:      var(--mobile-cat-bullet-content);
    color:        var(--mobile-cat-bullet-color);
    font-weight:  var(--mobile-cat-bullet-weight);
    font-size:    var(--mobile-cat-bullet-font-size);
    line-height:  var(--mobile-cat-bullet-line-height);
    /* hanging bullet: section header padding 위치에 절대 배치 */
    position: absolute;
    left: var(--mobile-drawer-section-pad-x);
    top: 50%;
    transform: translateY(-50%);
  }
  body.theme-odyssey-custom .mobile-menu-cat-link:hover {
    color: var(--color-primary);
  }
  /* chevron 화살표 (›) — 카테고리·푸터 공통 컴포넌트 토큰
   * ※ 사용자 요청: 진하고 굵게 + 살짝 크게 (이전 muted-light + medium + 부모 글씨)
   * ※ 토큰은 :root --mobile-chev-* 에서 통제
   * ※ margin-left: auto — bullet(::before) 추가 후에도 chevron 이 우측에 고정되도록
   *   (auto margin 이 모든 잔여 공간을 흡수 → bullet/text 는 좌측, chev 는 우측) */
  body.theme-odyssey-custom .mobile-menu-cat-link > [aria-hidden="true"],
  body.theme-odyssey-custom .mobile-foot-link > [aria-hidden="true"] {
    color:       var(--mobile-chev-color);
    font-weight: var(--mobile-chev-weight);
    font-size:   var(--mobile-chev-font-size);
    line-height: var(--mobile-chev-line-height);
    margin-left: auto;
    flex: 0 0 auto;
  }

  /* ─ 사이드바 모듈 - 모바일에서 카드형 X, 평면 리스트로 ─
   *  ※ 모바일 드로어 안에서 sidebar-card 가 평면 리스트로 렌더되도록 베이스 톤을 모두 리셋.
   *  ※ 사용자 요청: 외곽 박스(border) 까지 제거 — PC 베이스 border 가 누락되어 있던 부분 보정 */
  body.theme-odyssey-custom .area-aside .sidebar-card {
    background-color: transparent;
    border: 0;                /* PC 베이스 border 리셋 (이전 누락) */
    border-radius: 0;
    box-shadow: none;
    padding: 0;
    margin: 0 0 var(--space-5);
  }
  /* recent글 그리드 안의 박스는 그리드 자체가 wrapper 역할 → 박스 하단 margin 불필요
   * ※ 사용자 요청: '2026.05.08 10:57' ↔ '블로그 소개' 사이 공백 축소
   * ※ 위 규칙(0,4,1) 의 margin-bottom 을 .sidebar-recent-grid 경유 (0,5,1) 로 덮어쓰기 */
  body.theme-odyssey-custom .area-aside .sidebar-recent-grid .sidebar-card {
    margin-bottom: var(--mobile-drawer-recent-end-margin);
  }

  /* ─ 모바일 토큰 재정의 - popular-row 패딩 ─
   * ※ PC 베이스 :root 매핑에서 var(--popular-row-pad-y/-x-pc) 로 갱신되어 모바일에서도 PC 값 사용 중이었던 문제 해결
   * ※ 다른 모바일 토큰들(예: header-radius, header-menu-gap)도 동일 패턴으로 모바일 @media 안에서 재정의 */
  body.theme-odyssey-custom {
    /* 기준표 §3 모바일 본문 줄간격 (1.7 → 1.75, 범위 1.72~1.78 중간) */
    line-height: var(--leading-body-mobile);
    --popular-row-pad-y: var(--popular-row-pad-y-mobile);   /* 메인화면 상세값 모바일 §29: 17 */
    --popular-row-pad-x: var(--popular-row-pad-x-mobile);   /* 메인화면 상세값 모바일 §29: 18 */

    /* 메인화면 상세값 모바일 §29·§30: 항목 gap 14 / 썸네일 74·radius 16 */
    --popular-row-gap:    var(--popular-row-gap-mobile-real);  /* 14 - 메인화면 상세값 모바일 §29 */
    --popular-thumb-size: var(--recent-thumb-size-mobile);     /* 74 - 메인화면 상세값 모바일 §30 */
    --popular-thumb-radius: var(--recent-thumb-radius-mobile); /* 16 - 메인화면 상세값 모바일 §30 */

    /* 메인화면 상세값 모바일 §31·§32: 글 제목 16·800·1.56 / 메타 13 */
    --popular-title-size-pc: var(--popular-title-size-mobile);   /* 16 - 메인화면 상세값 모바일 §31 */
    --popular-title-line-pc: var(--popular-title-line-mobile);   /* 1.56 - 메인화면 상세값 모바일 §31 */
    --popular-date-size-pc:  var(--popular-date-size-mobile);    /* 13 - 메인화면 상세값 모바일 §32 */

    /* Tistory 에디터 글씨 크기 매핑 — 모바일 재할당 (한 단계 축소)
     * ※ 셀렉터는 var(--text-ke-size-N) 만 참조 — 토큰 cascade 로 자동 분기 */
    --text-ke-size-12: var(--text-ke-size-12-mobile);
    --text-ke-size-14: var(--text-ke-size-14-mobile);
    --text-ke-size-15: var(--text-ke-size-15-mobile);
    --text-ke-size-16: var(--text-ke-size-16-mobile);
    --text-ke-size-17: var(--text-ke-size-17-mobile);
    --text-ke-size-18: var(--text-ke-size-18-mobile);
    --text-ke-size-20: var(--text-ke-size-20-mobile);
    --text-ke-size-22: var(--text-ke-size-22-mobile);
    --text-ke-size-24: var(--text-ke-size-24-mobile);
    --text-ke-size-26: var(--text-ke-size-26-mobile);
    --text-ke-size-28: var(--text-ke-size-28-mobile);
    --text-ke-size-30: var(--text-ke-size-30-mobile);
    --text-ke-size-32: var(--text-ke-size-32-mobile);
    --text-ke-size-34: var(--text-ke-size-34-mobile);
    --text-ke-size-36: var(--text-ke-size-36-mobile);
    --text-ke-size-38: var(--text-ke-size-38-mobile);

    /* 사용자 요청: 모바일에서 article-meta 하단 1px 선 숨김 (PC만 유지) */
    --article-meta-border-bottom: 0;

    /* 사용자 요청: 모바일 헤더 ↔ 본문 사이 베이지 여백 좁힘 (PC 34px → 모바일 16px) */
    --space-header-margin: var(--space-header-margin-mobile);
  }

  /* 중간 플러스: 최신글 / 인기글 그리드 — 메인화면 상세값 모바일 §26: 1열 / gap 22 */
  body.theme-odyssey-custom .sidebar-recent-grid {
    grid-template-columns: repeat(var(--recent-popular-cols-mobile), minmax(0, 1fr));
    gap: var(--sidebar-card-gap-mobile);
    margin-bottom: var(--sidebar-card-gap-mobile);
  }
  /* 모바일 사이드바 카드 (드로어 외부 컨텍스트) — 메인화면 상세값 모바일 §27
   *  padding 28 30 / radius 28 / 그림자 0 10px 26px 0.06
   *  ※ .area-aside .sidebar-card (specificity 0,3,1) 가 드로어 안에서 평면 리스트로 리셋하므로
   *    이 규칙은 드로어 외부 컨텍스트(예: 미래의 메인 본문 영역 사이드바 카드)에만 작동 */
  body.theme-odyssey-custom .sidebar-card {
    padding: var(--sidebar-card-pad-mobile);              /* 28 30 - 메인화면 상세값 모바일 §27 */
    border-radius: var(--sidebar-card-radius-mobile);     /* 28 - 메인화면 상세값 모바일 §27 */
    box-shadow: var(--sidebar-card-shadow-mobile);        /* 0 10px 26px 0.06 - 메인화면 상세값 모바일 §27 */
  }
  /* 드로어 안에서는 그리드도 평면 리스트 톤 — 카드 패딩 0 일 때 gap 만 유지
   * margin-bottom: 사용자 요청으로 0 (foot 의 내부 margin+border+padding 만으로 시각 분리) */
  body.theme-odyssey-custom .area-aside .sidebar-recent-grid {
    display: flex;
    flex-direction: column;
    gap: var(--space-5);
    margin-bottom: var(--mobile-drawer-recent-end-margin);
  }

  /* 모바일에서 최근글/인기글 시안 일치 보정 (시안 모바일_햄버거_메뉴_02)
   * - 시안: "최근글 · 인기글" 한 줄 라벨처럼 컴팩트 표시
   * - 시안: 썸네일 없이 제목+날짜만 (PC 와 다름)
   * - 시안: 항목 사이 hairline 구분 없음, 단순 세로 리스트
   */
  /* 모바일 드로어: 최근글/인기글 박스의 h3 sidebar-title 을 섹션 라벨로 사용
   * - PC: 27px / weight 900 카드 타이틀 (sidebar-title 베이스)
   * - 모바일 드로어: 15px / weight 800 섹션 라벨 (시안 모바일_햄버거_메뉴_02 "최근 글 · 인기글" 톤)
   * - 이전엔 display:none 처리 후 .recent-tabs 로 대체 의도였으나, .recent-tabs HTML 미존재로
   *   라벨 자체가 사라져 있어 h3 를 다시 노출 */
  body.theme-odyssey-custom .area-aside .box-recent .sidebar-title {
    font-size: var(--text-md);             /* 15px */
    font-weight: var(--weight-extrabold);  /* 800 */
    color: var(--color-text);
    margin: 0 0 var(--space-4);            /* 16px - 라벨 ↔ 리스트 분리 */
  }
  /* 탭을 인라인 라벨 형태로 (bottom border 제거, 작은 폰트) */
  body.theme-odyssey-custom .area-aside .box-recent .recent-tabs {
    display: flex;
    align-items: center;
    gap: var(--space-2);
    border-bottom: 0;
    margin: 0 0 var(--space-4);
    padding: 0;
  }
  body.theme-odyssey-custom .area-aside .box-recent .recent-tab a,
  body.theme-odyssey-custom .area-aside .box-recent .recent-tab .tab-button {
    height: auto;
    padding: 0;
    font-size: var(--text-md);   /* 15px */
    font-weight: var(--weight-extrabold);
    color: var(--color-text);
    border: 0;
    margin: 0;
  }
  body.theme-odyssey-custom .area-aside .box-recent .recent-tab.on a,
  body.theme-odyssey-custom .area-aside .box-recent .recent-tab.on .tab-button {
    color: var(--color-text);   /* 활성 탭도 일반 본문색 (시안 일치) */
    border: 0;
  }
  /* 탭 사이 가운뎃점 separator (시안: "최근글 · 인기글") */
  body.theme-odyssey-custom .area-aside .box-recent .recent-tab + .recent-tab::before {
    content: '·';
    color: var(--color-muted);
    margin-right: var(--space-2);
    font-weight: var(--weight-extrabold);
  }
  /* 비활성 탭은 muted 톤 */
  body.theme-odyssey-custom .area-aside .box-recent .recent-tab:not(.on) a,
  body.theme-odyssey-custom .area-aside .box-recent .recent-tab:not(.on) .tab-button {
    color: var(--color-muted);
  }

  /* 최근글 리스트 - 시안: 썸네일 없음, 제목 위·날짜 아래 단순 구조 */
  body.theme-odyssey-custom .area-aside .box-recent .recent-list {
    gap: var(--space-5);
  }
  body.theme-odyssey-custom .area-aside .box-recent .recent-thumb {
    display: none;   /* 시안: 모바일 드로어에서는 썸네일 숨김 */
  }
  body.theme-odyssey-custom .area-aside .box-recent .recent-link {
    align-items: flex-start;
    /* padding-y 는 토큰 재정의(--popular-row-pad-y)로 처리 — 모바일에서 17px 적용 (기준표 §18a) */
  }
  /* recent-link 좌우 padding — 사용자 요청
   * ① padding-left: leaf item 들여쓰기 (cat 텍스트·footer 와 정렬)
   * ② padding-right: 좌우 대칭 (양쪽 여백 비율 맞추기, 2줄 wrap 허용)
   * ③ position: relative — 하단 hairline ::after 의 containing block
   * ④ border-bottom 제거 — 글로벌 규칙(line ~6476) 의 풀폭 hairline 을 ::after 인셋 버전으로 교체
   * ※ 글로벌 규칙 .area-aside .box-recent .recent-link (0,4,1) 가 padding 단축형으로
   *   네 면 모두를 덮어쓰므로, 마크업의 .recent-list 를 경유시켜 (0,5,1) 로 specificity 한 단계 강화 */
  body.theme-odyssey-custom .area-aside .box-recent .recent-list .recent-link {
    position: relative;
    padding-left:  var(--mobile-drawer-item-pad-x);
    padding-right: var(--mobile-drawer-item-pad-x);
    border-bottom: 0;
  }
  /* 단축 hairline — 사용자 요청: '얇은 줄의 길이를 맞춰주세요'
   * ※ 좌우 inset 으로 텍스트 영역과 같은 폭의 hairline 생성
   * ※ 토큰 --mobile-drawer-recent-hairline-* 로 통제 */
  body.theme-odyssey-custom .area-aside .box-recent .recent-list .recent-link::after {
    content: '';
    position: absolute;
    bottom: 0;
    left:   var(--mobile-drawer-recent-hairline-inset);
    right:  var(--mobile-drawer-recent-hairline-inset);
    height: var(--mobile-drawer-recent-hairline-height);
    background: var(--mobile-drawer-recent-hairline-color);
  }
  /* 마지막 보이는 항목의 hairline 숨김
   * ※ 글로벌 :last-child / :nth-child(5) border 제거 규칙 의 ::after 버전
   * ※ :nth-child(5) — 5개 초과 항목 display:none 처리 시 화면상 마지막이 5번째라 함께 처리 */
  body.theme-odyssey-custom .area-aside .box-recent .recent-item:last-child .recent-link::after,
  body.theme-odyssey-custom .area-aside .box-recent .recent-item:nth-child(5) .recent-link::after {
    content: none;
  }
  body.theme-odyssey-custom .area-aside .box-recent .recent-link:hover {
    transform: none;   /* 모바일 드로어에서는 hover 변형 없음 */
  }

  /* 모바일에서 최근글 제목/날짜 — 드로어 전용 컴포넌트 토큰 사용
   * ※ 글로벌 규칙 `.area-aside .box-recent .recent-title` (0,4,1, line ~6428) 가 PC 토큰을 강제 적용 중
   * ※ 본 규칙은 그 뒤가 아니라 앞(@media 안)에 위치하므로 specificity 를 한 단계 높여야 함
   * ※ 마크업의 .recent-body (제목·날짜 wrapper) 를 경유시켜 (0,5,1) 확보 → source order 무관하게 우선 */
  body.theme-odyssey-custom .area-aside .box-recent .recent-body .recent-title {
    font-size: var(--drawer-recent-title-size);
  }
  body.theme-odyssey-custom .area-aside .box-recent .recent-body .recent-date {
    font-size: var(--drawer-recent-date-size);
  }

  /* ─ 모바일 최근/인기 탭 UI ─
   *  ※ 사용자 요청: 모바일 사이드바에 "최근 글 | 인기 글" 탭으로 통합
   *  ※ 두 박스(.box-recent--recent, .box-recent--popular)는 위아래로 출력되지만
   *     CSS 로 활성 탭에 해당하는 박스 하나만 표시
   *  ※ .sidebar-recent-grid 에 .is-active-recent / .is-active-popular 클래스 토글
   *  ※ 박스 자체의 h3 라벨(최근 글 / 인기글)은 탭 UI 와 중복되므로 숨김 */
  body.theme-odyssey-custom .mobile-recent-tabs {
    display: flex;
    align-items: center;
    gap: var(--mobile-recent-tab-gap);
    margin: var(--mobile-recent-tab-margin-top) 0 var(--mobile-recent-tab-margin-bottom);
    /* 사용자 요청: 설명·분류 전체보기와 좌측 정렬 통일 (section header 들여쓰기) */
    padding-left: var(--mobile-drawer-section-pad-x);
  }
  body.theme-odyssey-custom .mobile-recent-tab {
    background-color: var(--mobile-recent-tab-bg);
    border: var(--mobile-recent-tab-border);
    padding: var(--mobile-recent-tab-padding);
    font-size: var(--mobile-recent-tab-font-size);
    font-weight: var(--mobile-recent-tab-font-weight);
    color: var(--mobile-recent-tab-color-off);
    letter-spacing: var(--letter-spacing);
    cursor: var(--mobile-recent-tab-cursor);
    transition: color var(--duration-fast) ease;
  }
  body.theme-odyssey-custom .mobile-recent-tab.is-on {
    color: var(--mobile-recent-tab-color-on);
  }
  body.theme-odyssey-custom .mobile-recent-tab-sep {
    color: var(--mobile-recent-tab-sep-color);
    font-size: var(--mobile-recent-tab-font-size);
    font-weight: var(--mobile-recent-tab-font-weight);
  }
  /* 활성 탭에 따라 박스 표시 전환
   * ※ specificity 강화: body.is-aside-ready 매치 추가 (0,5,2)
   *   - 깜빡임 방지(FOUC) 규칙 .box-recent--popular:not([data-empty]):not(.is-empty) (0,5,1)
   *     보다 강해야 박스 숨김이 정상 작동
   *   - .is-aside-ready 부여 후에만 박스가 보이므로 사이드바 노출 시점과 일치 */
  body.theme-odyssey-custom.is-aside-ready .sidebar-recent-grid.is-active-recent .box-recent--popular,
  body.theme-odyssey-custom.is-aside-ready .sidebar-recent-grid.is-active-popular .box-recent--recent {
    display: none;
  }
  /* 박스 내부 h3 라벨은 탭 UI 와 중복되므로 숨김 (모바일 한정) */
  body.theme-odyssey-custom .area-aside .box-recent > .sidebar-title {
    display: none;
  }

  /* 모바일 메뉴 푸터 (운영 안내) */
  body.theme-odyssey-custom .mobile-menu-foot {
    display: flex;
    flex-direction: column;
    padding: var(--space-5) 0;
    border-top: var(--border-soft);
    margin-top: var(--space-3);
  }
  body.theme-odyssey-custom .mobile-foot-link {
    display: flex;
    align-items: center;
    justify-content: space-between;
    height: var(--mobile-link-h);
    /* 사용자 요청: leaf item 정렬 (recent글 텍스트·카테고리 텍스트 와 동일 x)
     * - padding-left: leaf indent (24px)
     * - padding-right: chevron 영역 (12px) */
    padding: 0 var(--space-3) 0 var(--mobile-drawer-item-pad-x);
    /* 추가.txt: 운영 안내 링크 모바일 15px */
    font-size: var(--text-foot-link-mobile);
    font-weight: var(--weight-bold);
    color: var(--color-text);
    letter-spacing: var(--letter-spacing);
    transition: color var(--duration-fast) ease;
  }
  body.theme-odyssey-custom .mobile-foot-link:hover {
    color: var(--color-primary);
  }

  /* fallback */
  body.theme-odyssey-custom .mobile-foot-fallback {
    display: none;
  }
  body.theme-odyssey-custom.mobile-foot-empty .mobile-foot-fallback {
    display: flex;
    flex-direction: column;
  }

  /* 모바일 CTA */
  body.theme-odyssey-custom .mobile-menu-cta,
  body.theme-odyssey-custom .mobile-menu-cta-fallback {
    display: inline-flex;
    align-items: center;
    justify-content: center;
    /* 추가.txt: CTA 버튼 높이 48~52 중간 50px */
    height: var(--space-cta-h-mobile);
    margin: 0 0 var(--space-4);
    padding: 0 var(--space-6);
    background-color: var(--color-accent);
    color: var(--color-text);
    border-radius: var(--radius-lg);
    /* 추가.txt: CTA 버튼 모바일 15px */
    font-size: var(--text-cta-mobile);
    font-weight: var(--weight-bold);
    letter-spacing: var(--letter-spacing);
    box-shadow: var(--shadow-cta);
    border: var(--border-accent);
    transition:
      background-color var(--duration-fast) ease,
      box-shadow       var(--duration-base) var(--ease-soft);
  }
  body.theme-odyssey-custom .mobile-menu-cta:hover,
  body.theme-odyssey-custom .mobile-menu-cta-fallback:hover {
    background-color: var(--color-accent-hover);
    color: var(--color-text);   /* 추가.txt: hover 글씨색 #222222 유지 */
    box-shadow: var(--shadow-cta-hover);
  }
  body.theme-odyssey-custom .mobile-menu-cta:active,
  body.theme-odyssey-custom .mobile-menu-cta-fallback:active {
    background-color: var(--color-accent-active);
    color: var(--color-text);   /* 추가.txt: active 글씨색 #222222 유지 */
  }
  body.theme-odyssey-custom .mobile-menu-cta:focus-visible,
  body.theme-odyssey-custom .mobile-menu-cta-fallback:focus-visible {
    background-color: var(--color-accent);   /* 기본과 동일 (추가.txt) */
    color: var(--color-text);
    outline: var(--focus-ring-w) solid var(--color-focus-ring);   /* 청록 포커스링 */
    outline-offset: var(--focus-ring-offset);
  }

  /* 변수가 있을 때는 fallback 숨김 */
  body.theme-odyssey-custom .mobile-menu-cta + .mobile-menu-cta-fallback {
    display: none;
  }
  /* CTA 가 비어있을 때만 fallback 표시 */
  body.theme-odyssey-custom.mobile-cta-empty .mobile-menu-cta-fallback {
    display: inline-flex;
  }

  /* 모바일 검색창 */
  body.theme-odyssey-custom .mobile-search {
    display: block;
    position: relative;
    margin-bottom: var(--space-4);
  }
  body.theme-odyssey-custom .mobile-search-input {
    /* 추가.txt §2 Form/Input: 모바일 input 높이 50~54 중간 52px */
    height: var(--input-h-mobile);
    padding-right: var(--space-12);
    background-color: var(--color-card);
    border: var(--border-soft);
    /* 추가.txt: 검색창 모바일 14px (PC 15px 베이스를 오버라이드) */
    font-size: var(--text-search-mobile);
  }
  body.theme-odyssey-custom .mobile-search-btn {
    position: absolute;
    top: 50%;
    right: var(--space-3);
    transform: translateY(-50%);
    width: var(--search-btn-size-mobile);    /* 44px - WCAG 2.1 AA [중요].txt #9 (이전 36px) */
    height: var(--search-btn-size-mobile);
    display: inline-flex;
    align-items: center;
    justify-content: center;
    color: var(--color-muted);
  }

  /* 모바일 제휴 안내 */
  body.theme-odyssey-custom .mobile-menu-affiliate {
    display: block;
    padding: var(--space-3) var(--space-4);
    background-color: var(--color-notice-bg);
    border: var(--border-soft);
    border-radius: var(--radius-md);
    /* 중간 플러스: 제휴 안내 모바일 15px */
    font-size: var(--text-affiliate-mobile);
    line-height: var(--leading-relaxed);
    color: var(--color-muted);
    margin: 0;
  }

  /* ════════════════════════════════════════════════════════════════
   * 모바일 드로어 — 시각 순서 재배치 + 불필요 카드 숨김 (시안 모바일_햄버거_메뉴_01)
   * ────────────────────────────────────────────────────────────────
   * HTML 순서는 SEO/접근성용으로 유지하고, flex `order` 로 시각 순서만 정리.
   *
   * 시각 순서 (사용자 시안 기준):
   *   ① 닫기 버튼  (.mobile-close, position: absolute - flex flow 무관)
   *   ② 헤드      (블로그명 + 짧은 설명)            — order 20
   *   ③ 검색창                                    — order 30
   *   ④ 카테고리   (분류 전체보기 + 4개)            — order 40
   *   ⑤ 최근/인기글 (최대 5개, 썸네일 없음)        — order 50
   *   ⑥ 운영 안내  (블로그 소개 / 문의 / 처리방침) — order 60
   *   ⑦ 제휴 안내 문구                            — order 70
   * ════════════════════════════════════════════════════════════════ */

  /* flex order 부여 - 직접 자식 요소 기준 */
  body.theme-odyssey-custom .area-aside .mobile-menu-head      { order: 20; }
  body.theme-odyssey-custom .area-aside .mobile-search         { order: 30; }
  body.theme-odyssey-custom .area-aside .mobile-menu-cats-wrap { order: 40; }
  body.theme-odyssey-custom .area-aside .mobile-recent-tabs    { order: 50; }   /* sidebar-recent-grid 와 같은 그룹: 탭이 grid 바로 위 (source order 먼저) */
  body.theme-odyssey-custom .area-aside .sidebar-recent-grid   { order: 50; }
  body.theme-odyssey-custom .area-aside .mobile-menu-foot      { order: 60; }
  body.theme-odyssey-custom .area-aside .mobile-menu-affiliate { order: 70; }

  /* 컨텍스트 가시성 규칙(§44) 동일 specificity 오버라이드 - 드로어 내부 한정 */
  body.theme-odyssey-custom.is-article-page .area-aside .box-reading-order,
  body.theme-odyssey-custom.is-index-page   .area-aside .box-google-check {
    display: none;
  }
  /* 모바일 메뉴에서 제거 (사용자 명시 요청)
   * - 큰 상품 CTA 버튼: 메뉴가 광고처럼 보일 수 있음
   * - 프로필/태그/댓글/공지/SNS 플러그인: 메뉴 본연 기능과 무관
   * - box-category: 모바일에서는 .mobile-menu-cats-wrap 으로 대체되므로 중복 제거
   * - box-archive/calendar/visit: 모바일 시안에 없는 카드, sidebar-card margin 으로 빈 공간 차지
   *   (이전 누락 — 사용자 이미지의 상단 큰 빈 공간 + 카테고리/탭 사이 여백 원인)
   * - 큰 이미지 카드(box-recent thumb): 별도 규칙으로 .recent-thumb 숨김 (기존 §15 처리됨) */
  body.theme-odyssey-custom .area-aside .box-profile,
  body.theme-odyssey-custom .area-aside .box-category,
  body.theme-odyssey-custom .area-aside .box-archive,
  body.theme-odyssey-custom .area-aside .box-calendar,
  body.theme-odyssey-custom .area-aside .box-visit,
  body.theme-odyssey-custom .area-aside .box-tag,
  body.theme-odyssey-custom .area-aside .box-reply,
  body.theme-odyssey-custom .area-aside .box-notice,
  body.theme-odyssey-custom .area-aside .box-plugins-empty,
  body.theme-odyssey-custom .area-aside .mobile-menu-cta,
  body.theme-odyssey-custom .area-aside .mobile-menu-cta-fallback {
    display: none;
  }

  /* 최근글 / 인기글 항목 5개로 제한 (사용자 명시: 10개 이상 안 보이게) */
  body.theme-odyssey-custom .area-aside .box-recent .recent-item:nth-child(n+6) {
    display: none;
  }
  /* 모바일에서 5개 제한과 짝 — 화면에 보이는 5번째(=마지막) 항목 아래 hairline 제거
   * ※ :last-child 만으로는 부족 (n+6 가 display:none 이라도 HTML 상으로는 :last-child 가 아님)
   * ※ PC 에는 항목 개수 제한이 없으므로 이 규칙은 모바일 @media 안에서만 적용
   * ※ specificity (0,6,1) — 모바일 @media 안 .recent-list 경유 규칙(0,5,1)보다 한 단계 위 */
  body.theme-odyssey-custom .area-aside .box-recent .recent-item:nth-child(5) .recent-link {
    border-bottom: 0;
  }

  /* 카테고리 영역이 .mobile-menu-head 와 분리됨 → allcat 의 기존 margin-top 리셋
   * (예전엔 head 내부에서 desc 와 분리 용도였지만, 이제 별도 블록의 첫 요소) */
  body.theme-odyssey-custom .mobile-menu-cats-wrap .mobile-menu-allcat {
    margin-top: 0;
  }
  /* 검색창과 카테고리 사이 자연스러운 분리 */
  body.theme-odyssey-custom .mobile-menu-cats-wrap {
    display: block;
    margin-top: var(--space-5);
  }

  /* ════════════════════════════════════════════════════════════════
   * 중간 플러스 추천값 — 모바일 추가 매핑
   * ════════════════════════════════════════════════════════════════ */

  /* ─ CTA 버튼 (모바일) ─
   *  중간 플러스: padding 14px 22px / 글씨 15px / width 100% */
  body.theme-odyssey-custom .btn-cta {
    padding: var(--btn-cta-pad-y-mobile) var(--btn-cta-pad-x-mobile);
    font-size: var(--btn-cta-font-mobile);
    width: var(--btn-cta-width-mobile);
  }
  /* hero-actions 등에서 CTA 가 다른 버튼과 같이 있을 때 모바일에서 풀폭으로 */
  body.theme-odyssey-custom .hero-actions {
    flex-direction: column;
    align-items: stretch;
  }
  body.theme-odyssey-custom .hero-actions .btn {
    width: 100%;
  }

  /* ─ 메인 페이지 최신글 썸네일 (모바일 78px) ─
   *  ※ 사이드바 드로어 내부 .area-aside .box-recent .recent-thumb 는 위에서 display:none 처리됨.
   *     이 규칙은 메인 영역에 노출되는 .recent-thumb 에만 적용. */
  body.theme-odyssey-custom .recent-thumb {
    width: var(--recent-thumb-size-mobile);
    height: var(--recent-thumb-size-mobile);
  }

  /* ─ 인기글 항목 여백 (모바일 17px 18px) ─
   *  ※ 시안: 모바일 드로어에서는 평면 리스트(transparent)로 렌더되므로
   *     padding 은 0 으로 덮어 쓰는 위 규칙(2696)이 우선. 일반 페이지(드로어 외)
   *     에서 box-recent 가 노출되는 경우에만 본 토큰 값이 적용됨. */

  /* ─ 제휴 안내 박스 (모바일) ─
   *  중간 플러스: 위 간격 48px / 여백 22px 24px / 글씨 15px
   *  ※ padding 과 font-size 는 §43 (Stage 4 모바일 보정) 에서 토큰값으로 재정의.
   *     여기서는 margin-top 만 처리 — §43 의 box-* 공통 margin 보다 더 구체적이므로 우선 적용. */
  body.theme-odyssey-custom .article-view .box-affiliate {
    margin-top: var(--space-affiliate-top-mobile);
  }

  /* ─ 모바일 그림자 보정 (사용자 결정 — 확장) ─
   *  PC 의 청록빛(rgba(47,111,115,X)) box-shadow 가 모바일 좁은 폭에서는
   *  카드들이 가까이 붙으며 청록빛이 누적되어 답답하게 보임. 따라서 모바일에서는
   *  청록 계열 foundation shadow 토큰을 일괄 none 으로 재정의 → 모든 카드가 자동 따라옴.
   *  ─────────────────────────────────────────────────────────
   *  유지 사항:
   *   - --shadow-cta / --shadow-cta-hover : 주황 알파 (CTA 만 ‑ 명확한 affordance 필요)
   *   - --shadow-drawer                   : 모바일 햄버거 드로어 그림자 (UI 필수)
   *   - --color-input-focus-bg / focus 링 : 접근성용 포커스 신호 (그림자 토큰 아님)
   *  ─────────────────────────────────────────────────────────
   *  PC 화면에서는 :root 원본 값 그대로 사용 — 입체감 유지. */
  :root {
    --shadow-base:        none;
    --shadow-xs:          none;
    --shadow-sm:          none;
    --shadow-md:          none;
    --shadow-lg:          none;
    --shadow-card:        none;
    --shadow-card-hover:  none;
    --shadow-header:      none;
    --shadow-footer:      none;
  }
  /* ─ 명시적 컴포넌트 토큰 (legacy — 위 foundation override 만으로 충분하나
   *   세 곳은 명확한 의도 표기 + 향후 부분 복원 시 한 줄 토글 가능하도록 유지) ─ */
  body.theme-odyssey-custom .site-header {
    box-shadow: var(--shadow-header-mobile);
  }
  body.theme-odyssey-custom .article-card {
    box-shadow: var(--shadow-article-card-mobile);
  }
  body.theme-odyssey-custom .site-footer {
    box-shadow: var(--shadow-footer-mobile);
  }
}


/* ════════════════════════════════════════════════════════════════════
   17-B. 호버 미지원 환경 - 추가.txt §3
   "모바일에서는 hover 효과가 의미 없으니 과하게 넣지 않는 게 좋아요"
   터치 기기 (hover: none) 에서는 카드 위로 뜨는 효과 비활성화
   ════════════════════════════════════════════════════════════════════ */
@media (hover: none) {
  body.theme-odyssey-custom .category-card:hover,
  body.theme-odyssey-custom .post-card:hover,
  body.theme-odyssey-custom .article-related .related-link:hover,
  body.theme-odyssey-custom .hero-side-list a:hover,
  body.theme-odyssey-custom .article-view .post-toc .post-toc-link:hover {
    transform: none;
  }
}


/* ════════════════════════════════════════════════════════════════════
   18. 햄버거 메뉴 토글 - 자바스크립트 보조
   - common.js 또는 수동 추가 스크립트가 body 에 .menu-open 클래스 토글
   - 별도 JS 가 없을 때를 위한 :target 폴백은 사용하지 않음 (시안 일관성)
   ════════════════════════════════════════════════════════════════════ */
/* body.theme-odyssey-custom.menu-open 으로 처리 (위 모바일 미디어쿼리에서) */


/* ════════════════════════════════════════════════════════════════════
   19. 인쇄 (Print)
   ════════════════════════════════════════════════════════════════════ */
@media print {
  body.theme-odyssey-custom .site-header,
  body.theme-odyssey-custom .site-footer,
  body.theme-odyssey-custom .area-aside,
  body.theme-odyssey-custom .index-only-block,
  body.theme-odyssey-custom .breadcrumb-nav {
    display: none;
  }
  body.theme-odyssey-custom #wrap {
    padding: 0;
  }
}


/* ════════════════════════════════════════════════════════════════════
   ※ Stage 1 종료 - 토큰 + 리셋 + 헤더 + 메인 + 푸터 + 모바일 기본
   ────────────────────────────────────────────────────────────────────
   원칙 준수 확인:
   ✓ !important 0개 (specificity 로만 처리)
   ✓ 하드코딩 색상 0개 (모두 CSS 변수)
   ✓ 하드코딩 px 0개 (모두 CSS 변수)
   ✓ 시맨틱 + 컴포넌트 2단 토큰 구조
   ✓ 이 파일이 모든 토큰 정의의 단일 소스 (1010개)
     → stage2.css ~ stage5.css 는 var() 호출만 수행
   ════════════════════════════════════════════════════════════════════ */