/* nunpiro — 랭글 골격 + 실측 가독성. 웹폰트 요청 0. 본문 18px / 행간 1.95 / measure 680px */
:root{
  --primary:#2A4B8D;
  --primary-solid:#2A4B8D;
  --primary-fg:#FFFFFF;
  --primary-ink:#2A4B8D;
  --primary-ink-card:#2A4B8D;
  --primary-weak:#EAEEF4;
  --primary-line:#BEC9DD;
  --bg:#F8FAFC;
  --card:#FFFFFF;
  --fg:#111A26;
  --fg-soft:#28303B;
  --muted:#E8EDF4;
  --muted-weak:#F1F4F8;
  --border:#D9E1EB;
  --border-soft:#E7ECF3;
  --muted-fg:#666B71;
  --link:#2A4B8D;
  --font-sans:"Apple SD Gothic Neo", Pretendard, "Noto Sans KR", "Malgun Gothic", "맑은 고딕", -apple-system, BlinkMacSystemFont, system-ui, "Segoe UI", Roboto, sans-serif;
  --font-head:"Apple SD Gothic Neo", Pretendard, "Noto Sans KR", "Malgun Gothic", "맑은 고딕", -apple-system, BlinkMacSystemFont, system-ui, "Segoe UI", Roboto, sans-serif;
  --fs-body:18px;
  --lh-body:1.95;
  --measure:680px;
  --fs-h1:30px;
  --fs-list:16px;
  --fs-meta:12.5px;
  --fs-label:11.5px;
  --radius:10px;
  --radius-sm:5px;
  --shadow-sm:0 2px 0 0 rgba(0,0,0,.035), 0 1px 2px -1px rgba(0,0,0,.06);
  --row-py:14px;
  --w-page:1280px;
  --w-article:896px;
  --w-side:272px;
  --gap-col:24px;
  --h-header:56px;
  --h-gnb:41px;
  --pad-x:16px;
}
@media (prefers-color-scheme: dark){
  :root{
    --primary:#3864BC;
    --primary-fg:#101214;
    --primary-ink:#5980CE;
    --primary-ink-card:#6186D0;
    --primary-weak:#19202D;
    --primary-line:#1E2B46;
    --bg:#16181B;
    --card:#1D2024;
    --fg:#EDEFF2;
    --fg-soft:#D8DADC;
    --muted:#23262B;
    --muted-weak:#1B1E22;
    --muted-fg:#9B9DA0;
    --border:#31353B;
    --border-soft:#26292E;
    --link:#5980CE;
    --shadow-sm:0 1px 2px rgba(0,0,0,.5);
  }
}

*,*::before,*::after{box-sizing:border-box}
html{-webkit-text-size-adjust:100%;text-size-adjust:100%}
body{
  margin:0;background:var(--bg);color:var(--fg);
  font-family:var(--font-sans);font-size:var(--fs-body);line-height:var(--lh-body);
  display:flex;flex-direction:column;min-height:100vh;
  -webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;
  /* 한국어 줄바꿈: 어절 단위로 끊는다. 없으면 조사만 다음 줄로 떨어진다 */
  word-break:keep-all;overflow-wrap:break-word;
}
a{color:inherit;text-decoration:none}
a:hover{color:var(--primary-ink)}
img{max-width:100%;height:auto}
h1,h2,h3,h4{font-family:var(--font-head);margin:0;line-height:1.4}
table{border-collapse:collapse}
:focus-visible{outline:2px solid var(--primary-ink);outline-offset:2px;border-radius:3px}
@media (prefers-reduced-motion:reduce){
  *,*::before,*::after{animation-duration:.01ms!important;transition-duration:.01ms!important}
}
.sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;
  clip:rect(0,0,0,0);white-space:nowrap;border:0}
.skip{position:absolute;left:-9999px;top:0;z-index:100;background:var(--card);
  color:var(--fg);padding:10px 16px;border:1px solid var(--border);border-radius:var(--radius-sm)}
.skip:focus{left:12px;top:12px}

/* ---------- 컨테이너 ---------- */
.container{width:100%;max-width:var(--w-page);margin:0 auto;padding:0 var(--pad-x)}
/* 🔴 글 상세 컨테이너 = measure + 좌우 패딩. 랭글의 896px 을 그대로 쓰지 않는다.
   896 을 쓰고 본문에만 measure 를 걸었더니 1440px 화면에서 글이 눈에 띄게 왼쪽으로
   쏠렸다(실측: 왼쪽 여백 288px / 오른쪽 약 488px). 브레드크럼·제목·작성자줄은 896 폭인데
   본문만 680 폭이라 한 덩어리로 안 읽힌 것이다.
   랭글이 896 으로 버티는 건 그 사이트 본문이 짧게 끊어 쓴 커뮤니티 글이라 896 을 다 채워도
   줄이 길어지지 않기 때문이다(랭글 실측 줄당 중앙값 35자). 우리 원고는 장문이라 못 쓴다.
   → 폭 숫자를 베끼는 대신 '한 칸으로 읽히는 단일 컬럼'이라는 랭글의 구조를 지킨다. */
.container--article{max-width:calc(var(--measure) + var(--pad-x) * 2)}

/* ---------- 헤더 (sticky 56px) ---------- */
.header{position:sticky;top:0;z-index:50;background:var(--bg);
  border-bottom:1px solid var(--border);box-shadow:var(--shadow-sm)}
.header__bar{display:flex;height:var(--h-header);align-items:center;gap:16px}
.brand{display:flex;align-items:center;gap:8px;flex-shrink:0;font-family:var(--font-head);
  font-weight:800;font-size:18px;letter-spacing:-.01em}
.brand__mark{width:32px;height:32px;border-radius:calc(var(--radius) * .7);flex-shrink:0;
  background:var(--primary-solid);display:grid;place-items:center;
  color:var(--primary-fg);font-weight:800;font-size:15px}
.brand__name{white-space:nowrap}
.header__tag{font-size:var(--fs-meta);color:var(--muted-fg);white-space:nowrap;
  overflow:hidden;text-overflow:ellipsis}
.header__spacer{flex:1}
.header__links{display:flex;align-items:center;gap:4px;font-size:14px;color:var(--muted-fg)}
.header__links a{padding:6px 10px}

/* ---------- GNB ---------- */
.gnb{border-top:1px solid var(--border-soft);background:var(--bg)}
.gnb__inner{display:flex;align-items:center;overflow-x:auto;scrollbar-width:none}
.gnb__inner::-webkit-scrollbar{display:none}
.gnb a{position:relative;padding:10px 12px;font-size:14px;font-weight:500;
  white-space:nowrap;color:var(--muted-fg)}
.gnb a:hover{color:var(--fg)}
.gnb a[aria-current="page"]{color:var(--primary-ink);font-weight:700}
.gnb a[aria-current="page"]::after{content:"";position:absolute;left:12px;right:12px;
  bottom:0;height:2px;background:var(--primary)}

/* ---------- 레이아웃 ---------- */
.main{flex:1;width:100%;padding-bottom:56px}
.layout{display:flex;gap:var(--gap-col);padding:20px 0}
.layout__main{flex:1;min-width:0;display:flex;flex-direction:column;gap:20px}
.layout__side{width:var(--w-side);flex-shrink:0}
.layout__side-inner{position:sticky;top:calc(var(--h-header) + var(--h-gnb) + 8px);
  display:flex;flex-direction:column;gap:16px}
.card{background:var(--card);border:1px solid var(--border);
  border-radius:var(--radius);box-shadow:var(--shadow-sm);overflow:hidden}

.pagehead{padding:4px 0 0}
.pagehead h1{font-size:22px;font-weight:700;display:flex;align-items:center;gap:8px}
.pagehead p{margin:6px 0 0;font-size:14px;color:var(--muted-fg);line-height:1.6}
.sectionhead{display:flex;align-items:baseline;justify-content:space-between;
  gap:8px;margin-bottom:8px}
.sectionhead h2{font-size:15px;font-weight:700}
.sectionhead a{font-size:12px;color:var(--muted-fg)}

/* ---------- 카테고리 칩 ---------- */
.chips{display:flex;gap:8px;overflow-x:auto;padding-bottom:2px;scrollbar-width:none}
.chips::-webkit-scrollbar{display:none}
.chip{flex-shrink:0;padding:6px 14px;border-radius:999px;font-size:13.5px;font-weight:500;
  background:var(--muted);color:var(--muted-fg);white-space:nowrap}
.chip:hover{color:var(--fg)}
.chip[aria-current="page"]{background:var(--primary-solid);color:var(--primary-fg)}

/* ===================== 목록 — 축 C ===================== */
.list__head{display:flex;align-items:center;gap:8px;padding:8px 16px;
  border-bottom:1px solid var(--border);background:var(--muted-weak);
  font-size:var(--fs-label);font-weight:600;color:var(--muted-fg)}
.list__head .c-title{flex:1}
.list__head .c-cat{width:110px}
.list__head .c-date{width:76px;text-align:right}

.row{display:flex;align-items:center;gap:8px;padding:var(--row-py) 16px;
  border-bottom:1px solid var(--border-soft)}
.row:last-child{border-bottom:0}
.row:hover{background:var(--muted-weak)}
.row__title{flex:1;min-width:0;font-size:var(--fs-list);font-weight:500;color:var(--fg);
  overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.row:hover .row__title{color:var(--primary-ink)}
.row__cat{flex-shrink:0;width:110px;font-size:var(--fs-meta);color:var(--muted-fg);
  overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.row__badge{flex-shrink:0;font-size:11.5px;color:var(--muted-fg);background:var(--muted);
  padding:2px 8px;border-radius:999px;white-space:nowrap}
.row__date{flex-shrink:0;width:76px;text-align:right;font-size:var(--fs-meta);
  color:var(--muted-fg);white-space:nowrap}
.row__excerpt{display:none}

/* summary: 제목 + 2줄 발췌 */
[data-list="summary"] .list__head{display:none}
[data-list="summary"] .row{flex-wrap:wrap;align-items:flex-start;padding:16px}
[data-list="summary"] .row__title{white-space:normal;font-size:calc(var(--fs-list) + 2px);
  font-weight:600;line-height:1.5;flex-basis:100%}
[data-list="summary"] .row__excerpt{display:-webkit-box;-webkit-line-clamp:2;line-clamp:2;
  -webkit-box-orient:vertical;overflow:hidden;flex-basis:100%;margin-top:6px;
  font-size:13.5px;line-height:1.65;color:var(--muted-fg)}
[data-list="summary"] .row__cat,[data-list="summary"] .row__date{width:auto;margin-top:8px}
[data-list="summary"] .row__date{margin-left:auto}

/* card: 2열 그리드 */
[data-list="card"] .list__head{display:none}
/* 🔴 칸 사이 선을 'gap 1px + 배경색' 으로 만들지 않는다.
   글이 홀수면 마지막 줄 오른쪽 칸이 비는데, 그 빈칸에 배경색이 그대로 비쳐
   색이 칠해진 빈 상자가 생긴다(실제로 glowtalk 홈에서 보였다).
   선은 각 행의 border 로 긋는다 — 빈칸에는 아무것도 안 남는다. */
[data-list="card"] .list__body{display:grid;grid-template-columns:repeat(2,1fr);gap:0;
  background:var(--card)}
[data-list="card"] .row{display:flex;flex-flow:row wrap;align-items:center;row-gap:8px;
  column-gap:10px;background:var(--card);padding:18px 16px;
  border-bottom:1px solid var(--border-soft);border-right:1px solid var(--border-soft)}
[data-list="card"] .row:nth-child(2n){border-right:0}
[data-list="card"] .row__title{white-space:normal;font-size:calc(var(--fs-list) + 1px);
  font-weight:600;line-height:1.5;flex:0 0 100%}
[data-list="card"] .row__excerpt{display:-webkit-box;-webkit-line-clamp:3;line-clamp:3;
  -webkit-box-orient:vertical;overflow:hidden;flex:0 0 100%;
  font-size:13px;line-height:1.65;color:var(--muted-fg)}
[data-list="card"] .row__cat,[data-list="card"] .row__date{width:auto}
[data-list="card"] .row__date{margin-left:auto}

/* '그냥 목록'(추천/최신)은 축 C 변형을 따르지 않는다 — 그리드 빈칸/세로 늘어짐 방지 */
.list__body--plain{display:block!important;background:none!important}
.list__body--plain .row{display:flex!important;flex-flow:row nowrap!important;
  align-items:center!important;gap:8px;padding:var(--row-py) 16px!important;
  border-bottom:1px solid var(--border-soft)!important}
.list__body--plain .row:last-child{border-bottom:0!important}
.list__body--plain .row__title{flex:1 1 auto!important;white-space:nowrap;overflow:hidden;
  text-overflow:ellipsis;font-size:var(--fs-list);font-weight:500}
.list__body--plain .row__excerpt{display:none!important}

/* ---------- 페이지네이션 (전부 진짜 <a>) ---------- */
.pager{display:flex;align-items:center;justify-content:center;gap:4px;
  padding:20px 0 8px;flex-wrap:wrap}
.pager a,.pager span{height:32px;min-width:32px;padding:0 8px;border-radius:var(--radius-sm);
  display:inline-flex;align-items:center;justify-content:center;font-size:14px;color:var(--fg)}
.pager a:hover{background:var(--muted)}
.pager [aria-current="page"]{background:var(--primary-solid);color:var(--primary-fg);font-weight:600}
.pager .is-disabled{opacity:.4}
.pager .ellipsis{color:var(--muted-fg);min-width:24px;user-select:none}

/* ---------- 사이드바 모듈 ---------- */
.side__title{padding:12px 16px 8px;font-size:12px;font-weight:700;color:var(--muted-fg);
  letter-spacing:.06em;text-transform:uppercase}
.rank{list-style:none;margin:0;padding:2px 10px 10px}
.rank li a{display:flex;align-items:flex-start;gap:8px;padding:9px 6px;
  border-radius:var(--radius-sm)}
.rank li a:hover{background:var(--muted-weak)}
.rank__no{flex-shrink:0;width:16px;font-size:12px;font-weight:700;
  color:var(--primary-ink-card);margin-top:2px}
.rank__t{flex:1;min-width:0;font-size:var(--fs-list);line-height:1.5;
  display:-webkit-box;-webkit-line-clamp:2;line-clamp:2;-webkit-box-orient:vertical;
  overflow:hidden}
.side__links{list-style:none;margin:0;padding:0 10px 12px}
.side__links a{display:flex;align-items:baseline;justify-content:space-between;gap:8px;
  padding:8px;font-size:var(--fs-list);border-radius:var(--radius-sm)}
.side__links a:hover{background:var(--muted-weak)}
.side__links b{font-weight:600}
.side__links em{font-style:normal;font-size:12px;color:var(--muted-fg)}

/* ===================== 글 상세 ===================== */
.crumbs{font-size:13.5px;color:var(--muted-fg);margin-bottom:14px;display:block}
.crumbs a{color:var(--primary-ink);font-weight:600}
.crumbs span[aria-current]{color:var(--muted-fg)}
.post__title{font-size:var(--fs-h1);font-weight:700;line-height:1.375;
  margin-bottom:14px;letter-spacing:-.015em;max-width:22em;text-wrap:balance}
.post__meta{display:flex;align-items:center;gap:12px;border-bottom:1px solid var(--border);
  padding-bottom:16px;margin-bottom:22px}
.post__avatar{width:40px;height:40px;border-radius:999px;flex-shrink:0;
  background:var(--primary-weak);color:var(--primary-ink-card);display:grid;place-items:center;
  font-weight:700;border:1px solid var(--border);font-size:15px}
.post__author{font-size:14px;font-weight:600}
.post__submeta{display:flex;flex-wrap:wrap;align-items:center;gap:10px;font-size:12.5px;
  color:var(--muted-fg);margin-top:2px}

.notice{border:1px solid var(--primary-line);background:var(--primary-weak);
  border-radius:var(--radius-sm);padding:12px 16px;font-size:14px;line-height:1.7;
  margin-bottom:22px;max-width:var(--measure)}
.notice:empty,.toc:empty,.tags:empty{display:none}

/* 목차 — 랭글엔 없다. 우리 원고는 장문이라 넣는다 */
.toc{border:1px solid var(--border);background:var(--muted-weak);
  border-radius:var(--radius-sm);padding:14px 18px;margin-bottom:24px;max-width:var(--measure)}
.toc__t{font-size:12px;font-weight:700;color:var(--muted-fg);letter-spacing:.06em;
  text-transform:uppercase;margin-bottom:6px}
.toc ol{margin:0;padding-left:1.25em;font-size:14px;line-height:1.9}
.toc a{color:var(--fg)}
.toc a:hover{color:var(--primary-ink)}

/* 🔴 본문 — measure 가 걸리는 유일한 곳 */
.post-content{font-size:var(--fs-body);line-height:var(--lh-body);color:var(--fg-soft);
  max-width:var(--measure);min-height:200px}
.post-content > * + *{margin-top:1.15em}
.post-content h2{font-size:1.3em;font-weight:700;line-height:1.45;color:var(--fg);
  margin-top:2.2em;margin-bottom:.7em;padding-bottom:.4em;
  border-bottom:1px solid var(--border);scroll-margin-top:calc(var(--h-header) + 12px)}
.post-content h2:first-child{margin-top:0}
.post-content h3{font-size:1.1em;font-weight:700;line-height:1.5;color:var(--fg);
  margin-top:1.8em;margin-bottom:.5em}
.post-content p{margin:0}
/* 🔴 리드 문단 — 실측에 따른 대응.
   주입된 원고 1,354편의 블록 종류를 세어 보니 **전부 p 다. h2 0개 · 태그 0개.**
   (카페 Q&A 원고라서 그렇다. 랭글 본문도 같다 — ILANGGLE_SPEC §10: 태그는 <br> 하나뿐)
   소제목이 없으면 900자짜리 글이 통짜 덩어리로 보인다. 그래서 첫 문단만 시각적으로
   키워 진입점을 만든다. **본문 텍스트는 건드리지 않는다 — 순수 CSS 위계다.**
   (원고 본문 무수정 제약을 지키면서 구조를 주는 유일한 방법) */
.post-content > p:first-of-type{font-size:1.06em;line-height:1.75;
  color:var(--fg);font-weight:500}
.post-content ul,.post-content ol{margin:0;padding-left:1.5em}
.post-content li + li{margin-top:.45em}
.post-content li::marker{color:var(--primary-ink)}
.post-content a{color:var(--link);text-decoration:underline;text-underline-offset:2px}
.post-content strong{font-weight:700;color:var(--fg)}
.post-content blockquote{margin:0;padding:.85em 1.15em;border-left:3px solid var(--primary);
  background:var(--muted-weak);border-radius:0 var(--radius-sm) var(--radius-sm) 0;
  color:var(--fg)}
.post-content blockquote p{margin:0}
.post-content .note{padding:.85em 1.15em;background:var(--muted-weak);
  border:1px solid var(--border);border-radius:var(--radius-sm);font-size:.95em}
.post-content table{width:100%;font-size:.92em}
.post-content th,.post-content td{border:1px solid var(--border);padding:8px 10px;text-align:left}
.post-content th{background:var(--muted-weak);font-weight:700}
.table-wrap{overflow-x:auto}

.tags{display:flex;flex-wrap:wrap;gap:8px;margin:28px 0 0;padding:0;list-style:none}
.tag{display:inline-flex;align-items:center;padding:4px 12px;border-radius:999px;
  font-size:12.5px;font-weight:500;background:var(--primary-weak);
  color:var(--primary-ink);border:1px solid var(--primary-line)}

/* 하단 블록 */
.minilist{border:1px solid var(--border);border-radius:var(--radius-sm);overflow:hidden;
  margin-top:32px;background:var(--card)}
.minilist__head{padding:8px 16px;background:var(--muted-weak);
  border-bottom:1px solid var(--border);font-size:12px;font-weight:700;color:var(--muted-fg)}
.minilist ul{list-style:none;margin:0;padding:0}
.minilist li{border-bottom:1px solid var(--border-soft)}
.minilist li:last-child{border-bottom:0}
.minilist a{display:flex;align-items:center;justify-content:space-between;
  padding:10px 16px;gap:12px}
.minilist a:hover{background:var(--muted-weak)}
.minilist__t{font-size:var(--fs-list);color:var(--fg);overflow:hidden;
  text-overflow:ellipsis;white-space:nowrap}
.minilist a:hover .minilist__t{color:var(--primary-ink)}
.minilist__m{font-size:12px;color:var(--muted-fg);flex-shrink:0;white-space:nowrap}

/* 같은 분류 목록 통째 재노출 — 랭글의 진짜 무기(글 1편당 내부링크 다발) */
.boardbox{border:1px solid var(--border);border-radius:var(--radius-sm);overflow:hidden;
  margin-top:24px;background:var(--card)}
.boardbox__head{display:flex;align-items:center;justify-content:space-between;gap:8px;
  padding:8px 12px;background:var(--muted-weak);border-bottom:1px solid var(--border);
  font-size:12px;font-weight:700;color:var(--muted-fg)}
.boardtable{width:100%;font-size:14px}
.boardtable thead tr{background:var(--muted-weak);border-bottom:1px solid var(--border);
  color:var(--muted-fg);font-size:12px}
.boardtable th{padding:8px 12px;font-weight:600;text-align:center}
.boardtable th.c-title{text-align:left}
.boardtable td{padding:8px 12px;text-align:center;font-size:12.5px;color:var(--muted-fg);
  border-bottom:1px solid var(--border-soft)}
.boardtable tr:last-child td{border-bottom:0}
.boardtable td.c-title{text-align:left}
.boardtable tbody tr:hover{background:var(--muted-weak)}
.boardtable tr.is-current{background:var(--primary-weak)}
.boardtable tr.is-current .bt__t{color:var(--primary-ink-card);font-weight:700}
.bt__link{display:flex;align-items:center;gap:6px;min-width:0}
.bt__t{font-size:14px;color:var(--fg);overflow:hidden;text-overflow:ellipsis;
  white-space:nowrap;min-width:0}
.bt__link:hover .bt__t{color:var(--primary-ink)}
.bt__mark{color:var(--primary-ink-card);font-size:12px;flex-shrink:0}

/* ---------- 검색 ---------- */
.search{display:flex;align-items:center;gap:0;min-width:0}
.search input{flex:1;min-width:0;height:34px;padding:0 12px;font:inherit;font-size:14px;
  color:var(--fg);background:var(--card);border:1px solid var(--border);
  border-radius:var(--radius-sm) 0 0 var(--radius-sm);-webkit-appearance:none;appearance:none}
.search input::placeholder{color:var(--muted-fg)}
.search input:focus{outline:2px solid var(--primary-solid);outline-offset:-1px;
  border-color:var(--primary-solid)}
.search button{height:34px;padding:0 14px;font:inherit;font-size:13.5px;font-weight:600;
  color:var(--primary-fg);background:var(--primary-solid);border:1px solid var(--primary-solid);
  border-radius:0 var(--radius-sm) var(--radius-sm) 0;cursor:pointer;white-space:nowrap}
.search button:hover{filter:brightness(.94)}
/* 헤더 검색은 데스크톱에만. 모바일은 GNB 아래 전용 줄로 내려간다(랭글과 같은 처리) */
.search--header{width:clamp(180px,26vw,300px);flex-shrink:0}
.header__mobile{display:none;padding-bottom:10px;padding-top:2px}
.searchbox{padding:14px 16px}
.search--page input{height:42px;font-size:15.5px}
.search--page button{height:42px;font-size:14.5px;padding:0 18px}
.searchresult{display:flex;flex-direction:column;gap:12px}
.searchresult__hint{font-size:13.5px;color:var(--muted-fg);margin:0;padding:4px 2px}
.searchresult__empty{padding:22px 18px;font-size:14px;line-height:1.7;color:var(--muted-fg)}
.searchresult__empty p{margin:0 0 6px}
.searchresult__empty p:last-child{margin:0}
.searchresult .sectionhead span{font-size:12px;color:var(--muted-fg)}
/* 검색 결과 행은 항상 '요약형'이다 — 축 C(table/card)와 무관하게 읽기 좋게 */
.searchresult .row{flex-wrap:wrap;align-items:flex-start;padding:14px 16px}
.searchresult .row__title{white-space:normal;flex-basis:100%;font-weight:600;line-height:1.5}
.searchresult .row__excerpt{display:block;flex-basis:100%;margin-top:5px;font-size:13.5px;
  line-height:1.65;color:var(--muted-fg)}
.searchresult .row__cat{width:auto;margin-top:7px}

/* ---------- 이전 글 / 다음 글 ---------- */
.pn{display:grid;grid-template-columns:1fr 1fr;gap:12px;margin-top:32px}
.pn__x{display:flex;flex-direction:column;gap:5px;min-width:0;padding:14px 16px;
  border:1px solid var(--border);border-radius:var(--radius-sm);background:var(--card)}
.pn__x--next{text-align:right}
a.pn__x:hover{border-color:var(--primary-solid);background:var(--muted-weak)}
.pn__lb{font-size:12px;font-weight:700;color:var(--primary-ink-card)}
.pn__t{font-size:var(--fs-list);line-height:1.5;color:var(--fg);
  display:-webkit-box;-webkit-line-clamp:2;line-clamp:2;-webkit-box-orient:vertical;
  overflow:hidden}
/* 이웃이 한쪽만 있을 때(첫 글·마지막 글). 자리는 지키되 보이진 않게 한다.
   테두리만 있는 빈 상자를 두면 '덜 만든 화면'으로 읽힌다. display:none 을 쓰면
   남은 하나가 왼쪽 칸으로 끌려와 '다음 글'이 왼쪽에 붙는다. 그래서 visibility 다. */
span.pn__x{visibility:hidden}

/* ---------- 전체 글 목록(아카이브) ---------- */
.arc{margin-top:26px}
.arc__h{display:flex;align-items:baseline;justify-content:space-between;gap:10px;
  padding-bottom:8px;margin-bottom:6px;border-bottom:2px solid var(--primary-solid);
  font-family:var(--font-head);font-size:16px;font-weight:700}
.arc__h a{color:var(--fg)}
.arc__h a:hover{color:var(--primary-ink)}
.arc__h span{font-size:12px;font-weight:500;color:var(--muted-fg)}
.arc__list{list-style:none;margin:0;padding:0}
.arc__list li{display:flex;align-items:baseline;justify-content:space-between;gap:12px;
  padding:7px 2px;border-bottom:1px solid var(--border-soft)}
.arc__list li:last-child{border-bottom:0}
.arc__list a{flex:1;min-width:0;font-size:var(--fs-list);line-height:1.55;color:var(--fg)}
.arc__list a:hover{color:var(--primary-ink);text-decoration:underline}
.arc__list time{flex-shrink:0;font-size:12px;color:var(--muted-fg);font-variant-numeric:tabular-nums}

/* ---------- 맨 위로 ---------- */
.totop{max-width:var(--w-page);margin:0 auto;padding:0 var(--pad-x) 28px;text-align:right}
.totop a{display:inline-block;padding:8px 16px;font-size:13px;font-weight:600;
  color:var(--muted-fg);background:var(--card);border:1px solid var(--border);
  border-radius:999px}
.totop a:hover{color:var(--primary-ink);border-color:var(--primary-solid)}

/* ---------- 푸터 ---------- */
.footer{border-top:1px solid var(--border);background:var(--card);padding:30px 0;margin-top:auto}
.footer .container{text-align:center;font-size:13px;color:var(--muted-fg)}
.footer__links{display:flex;align-items:center;justify-content:center;gap:14px;
  margin-bottom:8px;flex-wrap:wrap}
.footer__note{font-size:12px;line-height:1.65;max-width:52ch;margin:8px auto 0;
  color:var(--muted-fg)}
.footer__copy{font-size:12px;margin:0}
.footer p{margin:4px 0}

/* ---------- 프린트 ---------- */
@media print{
  .header,.gnb,.layout__side,.boardbox,.minilist,.pager,.tags,
  .search,.header__mobile,.totop,.pn{display:none}
  body{background:#fff;color:#000}
  .post-content{max-width:none;color:#000}
}

/* ---------- 반응형 (랭글과 동일 브레이크포인트 640/768/1024/1280) ---------- */
@media (max-width:1279px){ :root{--w-side:256px} }
@media (max-width:1023px){ .layout__side{display:none} }

@media (max-width:1023px){ .header__tag{display:none} }

@media (max-width:767px){
  .header__links{display:none}
  /* 헤더가 좁아지면 검색은 GNB 아래 전용 줄로 내려간다(랭글과 같은 처리).
     🔴 기본값 .header__mobile{display:none} 는 _BASE 에 있다 = 이 규칙보다 앞이다.
     예전에 이 순서를 뒤집어서 모바일 검색줄이 영영 안 뜬 적이 있다. 순서가 규칙이다. */
  .search--header{display:none}
  .header__mobile{display:block;padding-bottom:8px;padding-top:0}
  /* sticky 헤더가 모바일에서 화면을 너무 많이 먹지 않게 조인다.
     3줄(브랜드/분류/검색) 구성이라 그냥 두면 844px 화면에서 150px = 17% 를 차지했다. */
  .header__bar{height:52px;gap:10px}
  .gnb a{padding:8px 11px}
  .list__head .c-cat,.row__cat{display:none}
  [data-list="card"] .list__body{grid-template-columns:1fr}
  [data-list="card"] .row{border-right:0}   /* 1열이 되면 오른쪽 세로선은 허공에 뜬다 */
  .layout{padding:14px 0}
  .boardtable .c-cat{display:none}
  .pn{grid-template-columns:1fr}
  .pn__x--next{text-align:left}
  span.pn__x{display:none}   /* 1열에선 빈 칸이 그냥 빈 상자로 보인다 */
}

@media (max-width:639px){
  :root{
    --fs-h1:24px;
    /* 🔴 모바일 본문 크기는 '줄당 20~28자'에서 역산한 값이다.
       390px 뷰포트 - 좌우 16px = 358px 에서 실측: 16px→22.3자 / 17px→20.8자 / 18px→19.6자
       18px 는 20자 아래로 내려가 목표를 깬다. 그래서 큰 글씨 사이트도 여기서 캡을 건다. */
    --fs-body:17px;
    --pad-x:16px;
  }
  /* 🔴 랭글은 <640 에서 로고 텍스트를 숨긴다. 우리는 숨기지 않는다.
     랭글엔 알아볼 수 있는 SVG 로고가 있지만 우리 로고는 이름 첫 글자 사각형뿐이라,
     이름을 숨기면 '보' 같은 글자 하나만 남아 무슨 사이트인지 알 수 없게 된다.
     390px 실측에서 브랜드 오른쪽으로 342px 가 비어 있었다 = 숨길 이유가 없다.
     대신 긴 이름이 넘치지 않게 줄임표로 자른다(폭이 모자라도 가로 스크롤이 안 생긴다). */
  .brand{min-width:0}
  .brand__name{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;min-width:0}
  .list__head .c-date,.row__date{display:none}
  .row__badge{display:none}
  .boardtable .c-no,.boardtable .c-date{display:none}
  .post__title{max-width:none}
  .minilist__m{display:none}
}
