/* 모든 페이지가 함께 쓰는 스타일. 페이지는 site/pages/, 머리·꼬리는 site/layout.html */
:root {
  --bg: #faf8f4;
  --surface: #ffffff;
  --ink: #1b1f22;
  --muted: #6b7176;
  --line: #e9e4db;
  --accent: #1f5560;      /* 책미사 청록 — 강조색은 이것 하나 */
  --accent-soft: #e6eff0;
  --lamp: #b9802a;        /* D-day 등 작은 표시에만 */
  --alert: #d4483b;       /* 종 알림의 빨간 점에만 */
  --s-lit: #8c3f3a;       /* 문학산책 */
  --s-pick: #2f5d4f;      /* 지정독서 */
  --s-eco: #9a7120;       /* 경제독서 */
  --s-wed: #3c4d86;       /* 수요독서 */
  --s-meet: #6b5a7a;      /* 번개·한책읽기 */
  --spine-fg: #fbf8f1;
  --font-display: "Nanum Myeongjo", "Batang", serif;
  --font-body: Pretendard, "Apple SD Gothic Neo", "Malgun Gothic", sans-serif;
  --step-0: 1rem;
  --step-1: 1.15rem;
  --step-2: 1.7rem;
  --step-3: clamp(2.4rem, 5.4vw, 3.9rem);
  /* 글자 크기 단계: xs 캡션 · sm 작은 글 · md 보조 글 · step-0 본문 · step-1 작은 제목 · lg 큰 숫자 · step-2 제목 */
  --fs-xs: .8rem;
  --fs-sm: .86rem;
  --fs-md: .92rem;
  --fs-lg: 1.4rem;
  /* 모서리: sm 칩·입력칸 · card 카드·상자 · lg 큰 띠 · pill 둥근 버튼 */
  --r-sm: 8px;
  --r-card: 14px;
  --r-lg: 24px;
  /* 그림자: 1 카드 · 2 떠 있는 것 · 3 첫 화면 큰 그림 */
  --sh-1: 0 4px 16px rgb(27 31 34 / .08);
  --sh-2: 0 10px 28px rgb(27 31 34 / .12);
  --sh-3: 0 24px 60px rgb(27 31 34 / .18);
  color-scheme: light;
}

* { box-sizing: border-box; }
body {
  background: var(--bg); color: var(--ink);
  font-family: var(--font-body); font-size: var(--step-0); line-height: 1.7;
  word-break: keep-all; overflow-wrap: anywhere;
}
a { color: var(--accent); }
a:focus-visible, button:focus-visible { outline: 2px solid var(--lamp); outline-offset: 3px; }
.wrap { max-width: 1120px; margin-inline: auto; padding-inline: 24px; }
h1, h2, h3 { font-family: var(--font-body); text-wrap: balance; line-height: 1.3; margin: 0; letter-spacing: -.01em; }
h1, h2 { font-weight: 800; }
h2 { font-size: var(--step-2); }
h3 { font-weight: 700; }
p { margin: 0; }
.eyebrow { font-size: var(--fs-md); letter-spacing: .04em; color: var(--accent); font-weight: 700; }

/* 헤더 */
.top {
  position: sticky; top: env(safe-area-inset-top, 0px); z-index: 5;
  background: rgb(255 255 255 / .94);   /* 본문(크림)과 구분되는 흰 머리 */
  backdrop-filter: blur(8px); border-bottom: 1px solid var(--line); transition: box-shadow .2s ease;
}
.top.scrolled { box-shadow: var(--sh-1); }
.top .wrap { display: flex; align-items: center; gap: 22px; min-height: 64px; }
.logo { font-family: var(--font-display); font-weight: 800; font-size: var(--fs-lg); color: var(--ink); text-decoration: none; }
.logo { display: inline-flex; align-items: center; flex: none; }
.logo img { display: block; height: 32px; width: auto; }
@media (max-width: 560px) { .logo img { height: 28px; } }
.top-cta { flex: none; }
.nav { display: flex; gap: 18px; overflow-x: auto; margin-left: auto; scrollbar-width: none; }
.nav a { color: #4b5157; text-decoration: none; font-size: var(--fs-md); white-space: nowrap; }
.nav a:hover { color: var(--ink); }
.nav a[aria-current="page"] { color: var(--accent); font-weight: 600; }

/* 다음 모임 띠 (모든 페이지 머리 아래, build_site.py nextbar_html) — 움직이지 않는 한 줄 */
.nextbar { background: var(--accent); color: #fff; }
.nb-item { display: flex; align-items: center; justify-content: center; gap: 10px; min-height: 40px; padding-block: 6px;
  color: #fff; text-decoration: none; font-size: var(--fs-md); }
.nb-label { flex: none; white-space: nowrap; font-weight: 700; opacity: .75; }
.nb-d { flex: none; white-space: nowrap; font-size: var(--fs-xs); font-weight: 800; padding: 1px 9px; border-radius: 999px; background: var(--lamp); color: #fff; font-variant-numeric: tabular-nums; }
.nb-what { font-weight: 600; min-width: 0; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.nb-go { flex: none; font-weight: 700; text-decoration: underline; text-underline-offset: 3px; white-space: nowrap; }
.nb-item:hover .nb-go { text-decoration-thickness: 2px; }
@media (max-width: 560px) { .nb-label { display: none; } .nb-item { justify-content: flex-start; font-size: var(--fs-sm); gap: 8px; } }

/* 인스타그램 앱 안에서만 보이는 안내(layout.html 스크립트가 넣는다) */
.insta-hint { display: block; margin-top: 8px; font-size: var(--fs-xs); line-height: 1.5; color: var(--muted); }
.insta-hint::before { content: "ⓘ "; color: var(--lamp); font-weight: 700; }

/* 홈 첫 화면 */
.hero { padding-block: 72px 80px; display: grid; grid-template-columns: 1.05fr .95fr; gap: 56px; align-items: center; }
.hero > * { min-width: 0; }
.hero h1.motto { margin-top: 14px; font-family: var(--font-display); font-size: var(--step-3); line-height: 1.22; letter-spacing: -.01em; }
.hero .why { margin-top: 22px; font-size: var(--step-1); line-height: 1.75; color: var(--ink); }
.hero .lead { margin-top: 14px; color: var(--muted); font-size: var(--step-0); }
.facts { list-style: none; padding: 0; margin: 14px 0 0; display: flex; flex-wrap: wrap; gap: 4px 18px; }
.facts li { font-size: var(--fs-md); color: var(--muted); }
.facts li::before { content: "✓ "; color: var(--accent); font-weight: 800; }
.facts a { color: inherit; text-decoration: none; }
.facts b { color: var(--accent); }
.cta { margin-top: 28px; display: flex; flex-wrap: wrap; gap: 10px; }
.feature { position: relative; display: block; border-radius: var(--r-card); overflow: hidden; box-shadow: var(--sh-3); }
.feature img { display: block; width: 100%; height: auto; }
.feature .tag {
  position: absolute; left: 16px; bottom: 16px; display: flex; gap: 8px; align-items: center; flex-wrap: wrap;
  background: rgb(255 255 255 / .94); color: var(--ink); border-radius: 999px; padding: 7px 14px; font-size: var(--fs-sm); font-weight: 700;
}
.feature .tag .dday:not(:empty), .meet-when .dday:not(:empty) { color: #fff; background: var(--lamp); border-radius: 999px; padding: 1px 9px; }
.feature .tag .doing, .meet-when .doing { color: #fff; background: var(--accent); border-radius: 999px; padding: 1px 9px; }
/* 첫 화면 월 포스터 넘기기: 지난 달·이번 달·다음 달 + 전체 일정 */
.month-flip { position: relative; touch-action: pan-y; }
.month-flip .mf-arrow { position: absolute; padding: 0; top: 50%; translate: 0 -50%; width: 40px; height: 40px; border-radius: 50%; border: 0; cursor: pointer;
  display: grid; place-items: center; font-size: 1.4rem; line-height: 1; color: var(--ink); background: rgb(255 255 255 / .85); box-shadow: 0 2px 10px rgb(27 31 34 / .15); }
.month-flip .mf-arrow:hover { background: #fff; }
.month-flip .mf-arrow.prev { left: 10px; } .month-flip .mf-arrow.next { right: 10px; }
.mf-nav { margin-top: 14px; display: flex; justify-content: center; align-items: center; flex-wrap: wrap; gap: 4px; font-size: var(--fs-md); }
.mf-nav button { border: 0; background: none; font: inherit; color: var(--muted); padding: 4px 10px; border-radius: 999px; cursor: pointer; }
.mf-nav button[aria-current="true"] { color: var(--accent); background: var(--accent-soft); font-weight: 700; }
.mf-all { margin-left: 8px; font-weight: 700; text-decoration: none; white-space: nowrap; }
.mf-arrow:focus-visible, .mf-nav button:focus-visible { outline: 3px solid var(--accent); outline-offset: 2px; }
.feature-fallback { aspect-ratio: 1; display: grid; place-items: center; background: var(--accent-soft); color: var(--accent); font-weight: 700; box-shadow: none; }

.btn {
  display: inline-flex; align-items: center; justify-content: center; gap: 8px; padding: 13px 22px; border-radius: 999px;
  text-decoration: none; font-weight: 700; font-size: var(--step-0); border: 1.5px solid transparent; cursor: pointer;
}
.btn.primary { background: var(--accent); color: #fff; }
.btn.ghost { background: var(--surface); border-color: var(--line); color: var(--ink); }
.btn.ghost:hover { border-color: var(--accent); }
.btn.small { padding: 8px 16px; font-size: var(--fs-sm); }

/* 홈 칸 머리 */
.home-head { display: flex; align-items: flex-end; justify-content: space-between; gap: 16px; margin-bottom: 28px; }
.home-head p { margin-top: 4px; color: var(--muted); }
.more { font-weight: 700; color: var(--accent); text-decoration: none; white-space: nowrap; }

.head-links { display: flex; gap: 18px; flex-wrap: wrap; }

/* 참여하기: 자주 묻는 질문 */
.faq { margin-top: 40px; display: grid; gap: 8px; scroll-margin-top: 90px; }
.faq h2 { margin-bottom: 8px; }
.faq details { background: var(--surface); border: 1px solid var(--line); border-radius: var(--r-card); padding: 0 20px; }
.faq summary { cursor: pointer; padding: 16px 0; font-weight: 700; list-style: none; display: flex; justify-content: space-between; gap: 12px; }
.faq summary::-webkit-details-marker { display: none; }
.faq summary::after { content: "+"; color: var(--accent); font-size: var(--fs-lg); line-height: 1; }
.faq details[open] summary::after { content: "−"; }
.faq details p { padding: 0 0 18px; color: var(--muted); }
/* 참여하기 '가끔은 직접 만납니다': 오프모임 사진 한 장 */
.offline { margin-top: 24px; padding: 20px; border-radius: var(--r-card); background: var(--surface); border: 1px solid var(--line); display: grid; grid-template-columns: minmax(0, 2fr) minmax(0, 3fr); gap: 24px; align-items: center; }
.offline-img { display: block; border-radius: var(--r-sm); overflow: hidden; background: var(--accent-soft); }
.offline-img img { display: block; width: 100%; height: auto; aspect-ratio: 4 / 3; object-fit: cover; }
.offline-text { display: grid; gap: 8px; min-width: 0; }
.offline-text h3 { font-size: var(--step-1); }
.offline-text p { color: var(--muted); font-size: var(--fs-md); }
.offline-cap a { color: var(--accent); }
@media (max-width: 680px) { .offline { grid-template-columns: minmax(0, 1fr); gap: 14px; } }
.cal-sub { margin-top: 24px !important; }

/* 참여하기: 캘린더 구독 */
.cal-sub { margin-top: 16px; background: var(--accent-soft); border-radius: var(--r-card); padding: 24px 26px; display: grid; gap: 14px; scroll-margin-top: 90px; }
.cal-sub h3 { font-size: var(--step-1); }
.cal-sub p { color: var(--muted); font-size: var(--fs-md); margin-top: 4px; }
.cal-btns { display: flex; flex-wrap: wrap; gap: 8px; }
.cal-note { font-size: var(--fs-sm) !important; }

/* 홈: 숫자 세 개 */
.numbers { list-style: none; margin: 0 0 8px; padding: 28px 0; display: grid; grid-template-columns: repeat(3, minmax(0, 1fr));
  border-top: 1px solid var(--line); border-bottom: 1px solid var(--line); }
.numbers li { display: grid; gap: 4px; justify-items: center; text-align: center; padding: 0 12px; }
.numbers li + li { border-left: 1px solid var(--line); }
.numbers b { font-size: clamp(1.9rem, 5vw, 2.6rem); font-weight: 800; color: var(--accent); letter-spacing: -.02em; line-height: 1.1; }
.numbers span { font-size: var(--fs-md); color: var(--muted); }

/* 홈: 중간 참여 버튼 */
.mid-cta { margin-top: 36px; padding: 24px 28px; border-radius: var(--r-card); background: var(--accent-soft);
  display: flex; align-items: center; justify-content: space-between; gap: 16px; flex-wrap: wrap; }
.mid-cta p { font-weight: 600; }

/* 휴대폰 하단 고정 참여 버튼 */
.float-cta { display: none; }
@media (max-width: 820px) {
  .float-cta {
    display: block; position: fixed; left: 16px; right: 16px; bottom: calc(14px + env(safe-area-inset-bottom, 0px)); z-index: 20;
    padding: 15px 20px; border-radius: 999px; text-align: center; font-weight: 800; font-size: var(--step-0); text-decoration: none;
    background: var(--accent); color: #fff; box-shadow: var(--sh-2);
    transform: translateY(140%); transition: transform .25s ease; pointer-events: none;
  }
  .float-cta.on { transform: none; pointer-events: auto; }
}

/* 홈: 다가오는 모임 카드 */
.meets { display: grid; grid-template-columns: repeat(auto-fill, minmax(230px, 1fr)); gap: 20px; }
.meet { position: relative; background: var(--surface); border: 1px solid var(--line); border-radius: var(--r-card); overflow: hidden; display: flex; flex-direction: column; }
.meet > img, .meet-art { width: 100%; height: auto; aspect-ratio: 1; object-fit: cover; object-position: 50% 0; display: block; }
.meet-art { background: var(--c, var(--accent)); color: var(--spine-fg); display: grid; align-content: center; padding: 14%; font-size: var(--step-1); }
.meet-body { padding: 16px 18px 20px; display: grid; gap: 6px; align-content: start; flex: 1; }
.mchip { justify-self: start; font-size: var(--fs-xs); font-weight: 700; color: #fff; background: var(--c, var(--accent)); border-radius: 999px; padding: 2px 10px; }
.meet h3 { font-size: var(--step-1); line-height: 1.4; }
.meet-when { font-size: var(--fs-md); color: var(--muted); display: flex; flex-wrap: wrap; gap: 6px; align-items: center; }
.meet-line { font-size: var(--fs-md); color: var(--ink); }
.meet-cal { margin-top: auto; padding-top: 6px; font-size: var(--fs-sm); font-weight: 700; color: var(--accent); text-decoration: none; }

/* 홈: 함께 읽은 책 미리보기 */
.pbooks { display: grid; grid-template-columns: repeat(4, minmax(0, 1fr)); gap: 20px; }
.pbook { text-decoration: none; color: var(--ink); min-width: 0; }
.pbook img { width: 100%; height: auto; aspect-ratio: 1; object-fit: cover; object-position: 50% 0; border-radius: var(--r-card); box-shadow: var(--sh-2); transition: transform .2s; display: block; }
.pbook:hover img { transform: translateY(-4px); }
.pbook p { margin-top: 10px; font-weight: 700; }
.pbook span { font-size: var(--fs-sm); color: var(--muted); font-weight: 500; }

/* 홈: 이달의 일정 + 방장 인사 */
.month { display: grid; grid-template-columns: .9fr 1.1fr; gap: 48px; align-items: center; }
.month > * { min-width: 0; }
.month-img img { width: 100%; height: auto; display: block; border-radius: var(--r-card); box-shadow: var(--sh-2); }
.month .host { margin: 14px 0 0; padding: 0; border: 0; background: none; }
.month .host blockquote { font-size: var(--fs-lg); line-height: 1.7; }
.month-list { list-style: none; padding: 0; margin: 24px 0 0; }
.month-list li { display: grid; grid-template-columns: 5.5em 1fr; gap: 12px; padding: 12px 0; border-top: 1px solid var(--line); }
.month-list time { font-weight: 700; color: var(--accent); }
.more-line { margin-top: 16px; }

/* 홈: 다가오는 모임 카드 — 색 상자는 신청 버튼 하나만. 모임은 색 점, D-day·이어 읽기는 글자로 */
.meet-series { display: inline-flex; align-items: center; gap: 7px; font-size: var(--fs-sm); font-weight: 700; color: var(--muted); }
.meet-series::before { content: ""; width: 9px; height: 9px; border-radius: 50%; background: var(--c, var(--accent)); }
.meet-when { gap: 0 6px; }
/* D-day: 카드 맨 윗줄 오른쪽. 일주일 안이면 채운 주황, 그 밖은 주황 테두리 */
.meet-top { display: flex; align-items: center; justify-content: space-between; gap: 8px; }
.meet-top .dday:not(:empty) { font-size: var(--fs-sm); font-weight: 800; padding: 2px 11px; border-radius: 999px; border: 1.5px solid var(--lamp); color: var(--lamp); font-variant-numeric: tabular-nums; }
.meet-top .dday.soon { background: var(--lamp); color: #fff; }
.meet-when .doing { background: none; padding: 0; border-radius: 0; color: var(--accent); font-weight: 700; }
.meet-when .doing:not([hidden]) { flex-basis: 100%; }  /* 날짜 아래 한 줄로 */
.meet { transition: border-color .2s ease, transform .2s ease, box-shadow .2s ease; }
.meet:hover { border-color: var(--accent); transform: translateY(-3px); box-shadow: var(--sh-2); }
.meet-link { color: inherit; text-decoration: none; }
.meet-link::after { content: ""; position: absolute; inset: 0; border-radius: var(--r-card); }
.meet-link:focus-visible { outline: none; }
.meet:has(.meet-link:focus-visible) { outline: 2px solid var(--lamp); outline-offset: 3px; }
.meet-cal { position: relative; z-index: 1; }
/* 카드 아래 줄: 소개·질문 보기(있는 책만) + 캘린더에 추가. 카드 전체 클릭(신청)보다 위에 놓인다 */
.meet-foot { margin-top: auto; padding-top: 6px; display: flex; flex-wrap: wrap; justify-content: space-between; gap: 4px 14px; }
.meet-foot .meet-cal { margin-top: 0; padding-top: 0; }
.meet-more { position: relative; z-index: 1; font-size: var(--fs-sm); font-weight: 700; color: var(--accent); text-decoration: none; }
.meet-foot:has(.meet-more) .meet-cal { color: var(--muted); }
.meet-more:hover, .meet-foot .meet-cal:hover { text-decoration: underline; }
.meet-cta { margin-top: 28px; padding-top: 20px; border-top: 1px solid var(--line);
  display: flex; flex-wrap: wrap; align-items: center; justify-content: space-between; gap: 12px 20px; }
.meet-cta p { font-size: var(--fs-md); color: var(--muted); }
.meet-cta b { color: var(--ink); }
@media (max-width: 560px) { .meet-cta .btn { width: 100%; } }
/* 휴대폰: 다가오는 모임 카드를 가로로 작게(왼쪽 그림, 오른쪽 글) — 네 장이 한두 화면에 */
@media (max-width: 600px) {
  .meets { grid-template-columns: 1fr; gap: 12px; }
  .meet { flex-direction: row; align-items: stretch; }
  .meet > img, .meet > .meet-art { width: 112px; flex: none; aspect-ratio: auto; height: auto; min-height: 100%; object-fit: cover; }
  .meet > img { align-self: flex-start; min-height: 0; aspect-ratio: 1; } /* 글자가 든 그림은 카드 높이에 맞춰 늘리면 양옆 글자가 잘린다 */
  .meet > .meet-art { padding: 10px; font-size: var(--fs-sm); }
  .meet-body { padding: 12px 14px; gap: 3px; min-width: 0; }
  .meet h3 { font-size: var(--step-0); }
  .meet-when { font-size: var(--fs-sm); }
  .meet-line { font-size: var(--fs-sm); color: var(--muted); }
  .meet-foot { padding-top: 4px; }
  .meet:hover { transform: none; }
}

/* 참여하기: 이달의 책 고르기 (build_site.py pick_html, 홈에서는 링크만) */
#join .pick { margin: 0 0 40px; }
.pick { scroll-margin-top: 80px; margin-top: 28px; padding: 24px 28px; border-radius: var(--r-card); background: var(--surface); border: 1px solid var(--line); display: grid; gap: 14px; }
.pick-head h3 { font-size: var(--step-1); font-weight: 800; }
.pick-head p { margin-top: 2px; font-size: var(--fs-md); color: var(--muted); }
.pick-list { list-style: none; margin: 0; padding: 0; display: grid; }
.pick-list label { display: grid; grid-template-columns: auto 10.5em minmax(0, 1fr) auto; align-items: center; gap: 4px 14px; padding: 12px 4px; border-top: 1px solid var(--line); cursor: pointer; min-height: 44px; }
.pick-list li:last-child label { border-bottom: 1px solid var(--line); }
.pick-list input { width: 20px; height: 20px; accent-color: var(--accent); margin: 0; }
.pick-when { font-size: var(--fs-sm); font-weight: 600; color: var(--muted); font-variant-numeric: tabular-nums; }
.pick-book { font-weight: 700; min-width: 0; }
.pick-book small { display: inline-flex; align-items: center; gap: 6px; font-size: var(--fs-xs); font-weight: 600; color: var(--muted); margin-right: 10px; }
.pick-book small::before { content: ""; width: 8px; height: 8px; border-radius: 50%; background: var(--c); }
.pick-more { display: block; width: fit-content; margin-top: 2px; font-size: var(--fs-xs); font-weight: 700; color: var(--accent); text-decoration: none; }
.pick-more:hover { text-decoration: underline; }
.pick-fee { font-size: var(--fs-sm); color: var(--muted); font-variant-numeric: tabular-nums; }
.pick-list label:has(input:checked) { background: var(--accent-soft); }
.pick-list label:has(input:checked) .pick-fee { color: var(--accent); font-weight: 700; }
.pick-foot { display: flex; flex-wrap: wrap; align-items: center; justify-content: space-between; gap: 12px; }
.pick-total { font-size: var(--fs-md); }
.pick-total b { color: var(--accent); font-size: var(--step-1); font-variant-numeric: tabular-nums; }
.pick-go:disabled { opacity: .45; cursor: not-allowed; }
.pick-note { font-size: var(--fs-sm); color: var(--muted); }
.pick-done { display: grid; gap: 8px; font-size: var(--fs-md); }
.pick-done b { color: var(--accent); }
.pick-text { width: 100%; font: inherit; font-size: var(--fs-md); line-height: 1.6; padding: 12px 14px; border-radius: var(--r-sm); border: 1.5px solid var(--accent); background: var(--bg); color: var(--ink); resize: none; }
.pick-help { font-size: var(--fs-sm); color: var(--muted); }
.pick-help a { color: var(--accent); font-weight: 600; }
@media (max-width: 680px) {
  .pick { padding: 18px; }
  .pick-list label { grid-template-columns: auto minmax(0, 1fr) auto; }
  .pick-when { grid-column: 2; grid-row: 1; }
  .pick-book { grid-column: 2; grid-row: 2; }
  .pick-fee { grid-column: 3; grid-row: 1 / 3; }
  .pick-list input { grid-row: 1 / 3; }
  .pick-go { width: 100%; }
}

/* 홈: 멤버들의 한마디 (data/멤버 한마디/) */
/* 옆으로 넘겨 보는 줄: PC 2장 + 다음 카드 살짝, 휴대폰 1장 + 살짝. 자동으로 넘기지 않는다 */
/* 홈 '회원들이 꼽은 책미사': 한마디 위 잡지형 세 줄 — 문장은 크게, 인원은 작게 */
.picks { display: grid; grid-template-columns: minmax(0, 15rem) minmax(0, 1fr); gap: 32px; margin-bottom: 56px; }
.picks-head p { margin-top: 8px; color: var(--muted); font-size: var(--fs-md); }
.picks ol { list-style: none; margin: 0; padding: 0; display: grid; }
.picks li { padding: 18px 0; border-top: 1px solid var(--line); min-width: 0; }
.picks li:last-child { border-bottom: 1px solid var(--line); }
.picks-s { margin: 0; font-family: var(--font-display); font-weight: 700; font-size: var(--fs-lg); line-height: 1.5; text-wrap: balance; }
.picks-k { margin: 4px 0 0; font-size: var(--fs-sm); color: var(--muted); font-variant-numeric: tabular-nums; }
@media (max-width: 720px) { .picks { grid-template-columns: minmax(0, 1fr); gap: 12px; margin-bottom: 44px; } .picks-s { font-size: var(--step-1); } }
.voices { display: flex; gap: 16px; overflow-x: auto; scroll-snap-type: x mandatory; scrollbar-width: none; padding-bottom: 4px; }
.voices::-webkit-scrollbar { display: none; }
.voices:focus-visible { outline: 2px solid var(--lamp); outline-offset: 4px; border-radius: var(--r-card); }
.voices .voice { flex: 0 0 calc((100% - 16px) / 2.15); scroll-snap-align: start; }
@media (max-width: 680px) { .voices .voice { flex-basis: 86%; } }
.voice-nav { display: flex; align-items: center; gap: 8px; }
.voice-count { font-size: var(--fs-sm); color: var(--muted); font-variant-numeric: tabular-nums; margin-right: 4px; }
.voice-prev, .voice-next { width: 40px; height: 40px; border-radius: 50%; display: grid; place-items: center; padding: 0; cursor: pointer;
  border: 1px solid var(--line); background: var(--surface); color: var(--ink); }
.voice-prev:hover:not(:disabled), .voice-next:hover:not(:disabled) { border-color: var(--accent); color: var(--accent); }
.voice-prev:disabled, .voice-next:disabled { opacity: .35; cursor: default; }
.voice-prev svg, .voice-next svg { width: 18px; height: 18px; }
.voice { margin: 0; padding: 28px 28px 24px; background: var(--surface); border: 1px solid var(--line); border-radius: var(--r-card); display: grid; gap: 18px; align-content: space-between; }
.voice blockquote { margin: 0; font-family: var(--font-display); font-weight: 700; font-size: var(--step-0); line-height: 1.85; }
.voice blockquote::before { content: "“"; display: block; font-size: 2.6rem; line-height: .8; height: .55em; color: var(--lamp); }
.voice figcaption { display: flex; flex-wrap: wrap; align-items: baseline; gap: 4px 8px; font-size: var(--fs-sm); color: var(--muted); padding-top: 14px; border-top: 1px solid var(--line); }
.voice figcaption b { color: var(--ink); font-size: var(--fs-md); }
.voice figcaption span + span::before, .voice figcaption b + span::before { content: "·"; margin-right: 8px; color: var(--line); }

/* 홈: 참여 띠 */
.join-band { background: var(--accent); color: #fff; border-radius: var(--r-lg); padding: 48px; display: flex; align-items: center; justify-content: space-between; gap: 24px; flex-wrap: wrap; }
.join-band p { margin-top: 8px; opacity: .85; }
.join-band .btn { background: #fff; color: var(--accent); }

/* 책장 */
.shelf { display: flex; align-items: flex-end; gap: 5px; padding-inline: 6px; overflow-x: auto; }
.spine {
  flex: 0 0 auto; writing-mode: vertical-rl; color: var(--spine-fg); position: relative;
  font-family: var(--font-display); font-weight: 700; font-size: var(--fs-md); letter-spacing: .04em;
  padding: 14px 0; width: 39px; display: flex; align-items: center; justify-content: flex-start;
  border-radius: 3px 3px 0 0; box-shadow: inset -4px 0 0 rgb(0 0 0 / .14), inset 2px 0 0 rgb(255 255 255 / .12);
  transform-origin: bottom center; transition: transform .25s ease;
}
.spine small { font-family: var(--font-body); font-weight: 500; font-size: .66rem; opacity: .85; margin-top: 10px; }
.spine:hover { transform: translateY(-8px); }
.spine.upcoming { transform: rotate(5deg); margin-left: 8px; }
.spine.upcoming:hover { transform: rotate(5deg) translateY(-8px); }
.spine.lit { background: var(--s-lit); }
.spine.pick { background: var(--s-pick); }
.spine.eco { background: var(--s-eco); }
.spine.wed { background: var(--s-wed); }
.spine.meet { background: var(--s-meet); }
.spine.upcoming { background: var(--bg); color: var(--muted); border: 1.5px dashed var(--muted); box-shadow: none; }
.board { height: 12px; background: var(--ink); opacity: .85; border-radius: 2px; }
.shelf-note { margin-top: 10px; font-size: var(--fs-sm); color: var(--muted); text-align: right; }

/* 요즘 책미사: build_site.py가 최근 분석 결과로 채운다 */
.stats-title { margin-top: 48px; font-size: var(--step-1); font-weight: 800; }
.stats { margin-top: 12px; display: grid; grid-template-columns: repeat(4, minmax(0, 1fr)); gap: 1px; background: var(--line); border: 1px solid var(--line); border-radius: var(--r-card); overflow: hidden; }
.stat { background: var(--surface); padding: 18px 20px; display: grid; gap: 2px; align-content: start; min-width: 0; }
.stat b { font-family: var(--font-display); font-size: 2rem; font-weight: 800; line-height: 1.2; color: var(--accent); font-variant-numeric: tabular-nums; }
.stat b small { font-size: var(--step-0); margin-left: 2px; }
.stat span { color: var(--muted); font-size: var(--fs-sm); }
.stats-note { margin-top: 8px; font-size: var(--fs-sm); color: var(--muted); text-align: right; }

/* 방장 인사 (홈, 책미사 이야기) */
.host { margin: 40px 0 0; padding: 24px 28px; border: 1px solid var(--line); border-top: 4px solid var(--lamp); background: var(--surface); border-radius: var(--r-card); }
.host blockquote { margin: 0; font-family: var(--font-display); font-weight: 700; font-size: var(--step-1); line-height: 1.8; }
.host figcaption { margin-top: 10px; font-size: var(--fs-sm); color: var(--muted); }
.host figcaption b { color: var(--ink); }
#story .host { margin: 0 0 24px; }

/* 섹션 */
section { padding-block: 72px 0; }
.page { padding-top: 48px; }
.sec-head h1 { font-size: var(--step-2); font-weight: 800; }
.sec-head { display: flex; flex-wrap: wrap; align-items: baseline; justify-content: space-between; gap: 8px 20px; margin-bottom: 24px; }
.sec-head p { color: var(--muted); font-size: var(--fs-md); }

/* 모임 카드 */
.clubs { display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); gap: 16px; }
.club { background: var(--surface); border: 1px solid var(--line); border-radius: var(--r-card); padding: 22px; display: grid; gap: 14px; }
.club-top { display: flex; align-items: center; gap: 12px; }
.chip { width: 12px; height: 34px; border-radius: 2px; flex: none; }
.club h3 { font-size: var(--step-1); font-weight: 800; }
.club .genre { font-size: var(--fs-sm); color: var(--muted); }
.club dl { display: grid; grid-template-columns: 4.5em 1fr; gap: 6px 12px; margin: 0; font-size: var(--fs-md); }
.club dt { color: var(--muted); }
.club dd { margin: 0; min-width: 0; }
.status { display: inline-block; font-size: var(--fs-xs); font-weight: 600; padding: 2px 8px; border-radius: 999px; border: 1px solid currentColor; color: var(--lamp); }

/* 연표 */
.log { list-style: none; margin: 0; padding: 0; border-top: 1px solid var(--line); }
.log li {
  display: grid; grid-template-columns: 6.5em 7em 1fr auto; gap: 12px; align-items: center;
  padding-block: 13px; border-bottom: 1px solid var(--line); font-size: var(--fs-md);
}
.log li > * { min-width: 0; }
.log time { font-variant-numeric: tabular-nums; color: var(--muted); }
.log .series { display: flex; align-items: center; gap: 8px; font-size: var(--fs-sm); }
.log .dot { width: 9px; height: 9px; border-radius: 50%; flex: none; }
.log .book { font-weight: 700; display: block; }
.log .fmt { font-size: var(--fs-xs); color: var(--muted); }
.log li.postponed .book { color: var(--muted); }
.log-doing { display: inline-block; margin-left: 8px; font-family: var(--font-body); font-weight: 600; font-size: var(--fs-xs); padding: 1px 9px; border-radius: 999px; background: var(--accent); color: var(--bg); vertical-align: 2px; }

/* 진행 방식 */
.steps { list-style: none; margin: 0; padding: 0; display: grid; grid-template-columns: repeat(4, minmax(0, 1fr)); gap: 16px; counter-reset: s; }
.steps li { counter-increment: s; border-top: 2px solid var(--accent); padding-top: 14px; display: grid; gap: 6px; align-content: start; }
.steps li::before { content: counter(s); font-family: var(--font-display); font-weight: 800; font-size: var(--step-2); color: var(--accent); line-height: 1; }
.steps h3 { font-size: var(--step-0); }
.steps p { color: var(--muted); font-size: var(--fs-md); }
.quote {
  margin-top: 36px; font-family: var(--font-display); font-size: clamp(1.3rem, 3.6vw, 1.8rem); font-weight: 800; text-align: center;
}
.quote cite { display: block; margin-top: 6px; font-family: var(--font-body); font-style: normal; font-weight: 400; font-size: var(--fs-sm); color: var(--muted); }

/* 참여 */
/* 처음이라면 이 순서로: 닉네임 → 톡방 인사 → 책 고르기('이달의 책 고르기' 상자와 같은 모양) */
.start { margin: 0 0 20px; padding: 24px 28px; border-radius: var(--r-card); background: var(--surface); border: 1px solid var(--line); display: grid; gap: 18px; }
.start-steps { list-style: none; margin: 0; padding: 0; display: grid; }
.start-steps li { display: grid; grid-template-columns: 36px minmax(0, 1fr); gap: 14px; padding: 16px 0; border-top: 1px solid var(--line); }
.start-steps li > div { display: grid; gap: 8px; min-width: 0; }
.start-n { width: 32px; height: 32px; border-radius: 50%; background: var(--accent); color: #fff; font-weight: 800; display: grid; place-items: center; font-variant-numeric: tabular-nums; }
.start-steps h4 { margin: 4px 0 0; font-size: var(--step-0); }
.start-steps p { margin: 0; font-size: var(--fs-md); color: var(--muted); }
.start-steps p b { color: var(--ink); font-weight: 600; }
.start-steps a:not(.btn) { color: var(--accent); font-weight: 700; }
.start-steps .start-sub { font-size: var(--fs-sm); }
.start .nick { width: fit-content; }
.start-facts { display: grid; grid-template-columns: repeat(auto-fit, minmax(150px, 1fr)); margin: 0; border-top: 1px solid var(--line); }
.start-facts div { padding: 14px 2px 0; display: grid; gap: 2px; }
.start-facts dt { font-size: var(--fs-xs); color: var(--muted); font-weight: 600; }
.start-facts dd { margin: 0; font-weight: 700; font-size: var(--fs-md); }
.skip { color: var(--accent); font-weight: 700; white-space: nowrap; }
.pick-audit { display: flex; align-items: center; gap: 8px; width: 100%; font-size: var(--fs-md); font-weight: 600; cursor: pointer; }
.pick-audit input { width: 18px; height: 18px; accent-color: var(--accent); margin: 0; }
@media (max-width: 600px) {
  .start { padding: 18px; }
  .start-facts { grid-template-columns: 1fr; }
  .start-facts div { grid-template-columns: 6.5em minmax(0, 1fr); align-items: baseline; padding-top: 10px; }
  .start-steps li { grid-template-columns: 30px minmax(0, 1fr); gap: 12px; }
  .start-n { width: 28px; height: 28px; }
}
.nick {
  font-family: var(--font-body); font-weight: 600; font-size: var(--step-0); padding: 12px 14px; border-radius: var(--r-sm);
  background: var(--bg); border: 1px dashed var(--line); display: flex; flex-wrap: wrap; gap: 4px;
}
.nick span:nth-child(odd) { color: var(--accent); }
.nick span:nth-child(even) { color: var(--muted); }

/* 기수 */
.eras { display: grid; grid-template-columns: minmax(0, 1fr) minmax(0, 1fr) auto minmax(0, 1fr); gap: 0; border: 1px solid var(--line); border-radius: var(--r-card); overflow: hidden; }
.era { padding: 22px; background: var(--surface); display: grid; gap: 8px; align-content: start; }
.era + .era { border-left: 1px solid var(--line); }
.era-photo { margin: -22px -22px 6px; background: var(--accent-soft); }
.era-photo img { display: block; width: 100%; aspect-ratio: 4 / 3; object-fit: cover; }
.era-photo figcaption { font-size: var(--fs-xs); color: var(--muted); padding: 8px 22px 0; background: var(--surface); }
.era h3 { font-size: var(--step-1); }
.era p { color: var(--muted); font-size: var(--fs-md); }
.era.now h3 { color: var(--accent); }
.era .era-when { font-size: var(--fs-sm); font-weight: 600; color: var(--ink); font-variant-numeric: tabular-nums; margin-top: -4px; }
.era-link { font-size: var(--fs-sm); margin-top: 4px; }
.era-pending { color: var(--muted); }
/* 2기와 3기 사이 쉬어 간 기간: 넓은 화면은 세로 띠, 좁은 화면은 가로 한 줄 */
.era-rest { display: grid; place-items: center; padding: 16px 10px; border-left: 1px solid var(--line); background: var(--bg); }
.era-rest p { margin: 0; writing-mode: vertical-rl; font-size: var(--fs-sm); color: var(--muted); white-space: nowrap; }
.era-rest b { color: var(--ink); font-weight: 600; }
.era-rest + .era { border-left: 1px solid var(--line); }

/* 홈: 다음 모임 (pages/00_홈/다음모임.csv) */
.next { padding-top: 32px; position: relative; }
.next-track { display: flex; gap: 16px; overflow-x: auto; scroll-snap-type: x mandatory; scrollbar-width: none; overscroll-behavior-x: contain; }
.next-track::-webkit-scrollbar { display: none; }
.next-arrow, .next-count { display: none; }
.next.many .next-arrow { display: grid; }
.next.many .next-count { display: block; }
.next-arrow {
  position: absolute; top: calc(32px + 200px); transform: translateY(-50%); z-index: 2;
  width: 46px; height: 46px; border-radius: 50%; place-items: center; cursor: pointer;
  padding: 0; color: var(--ink);
  background: color-mix(in srgb, var(--surface) 88%, transparent); border: 1px solid var(--line);
  box-shadow: 0 2px 10px rgb(0 0 0 / .25); backdrop-filter: blur(4px);
}
.arrow-prev { left: 6px; }
.arrow-next { right: 6px; }
.next-arrow:hover:not(:disabled) { border-color: var(--accent); color: var(--accent); }
.next-arrow:disabled { opacity: .35; cursor: default; }
.next-count { margin-top: 10px; text-align: center; font-size: var(--fs-sm); color: var(--muted); font-variant-numeric: tabular-nums; }
.next-cover {
  aspect-ratio: 1; background: var(--c, var(--accent)); color: var(--spine-fg);
  display: grid; align-content: center; justify-items: start; gap: 14px; padding: 12%;
  box-shadow: inset -10px 0 0 rgb(0 0 0 / .15);
}
.next-cover b { font-family: var(--font-display); font-weight: 800; font-size: clamp(1.6rem, 4vw, 2.3rem); line-height: 1.35; }
.next-cover span { font-size: var(--fs-md); opacity: .85; letter-spacing: .08em; }
.next-card {
  flex: 0 0 100%; scroll-snap-align: start;
  display: grid; grid-template-columns: minmax(0, 400px) minmax(0, 1fr); align-items: center;
  background: var(--surface); border: 1px solid var(--line); border-top: 4px solid var(--c, var(--accent));
  border-radius: var(--r-card); overflow: hidden;
}
.next-card img { display: block; width: 100%; height: auto; }
.next-body { padding: 28px 32px; display: grid; gap: 8px; align-content: center; min-width: 0; }
.next-eyebrow { font-size: var(--fs-sm); font-weight: 600; letter-spacing: .08em; color: var(--muted); display: flex; align-items: center; gap: 10px; }
.next-eyebrow .dday:not(:empty) { color: var(--bg); background: var(--lamp); border-radius: 999px; padding: 1px 10px; letter-spacing: 0; }
.next-eyebrow .doing { color: var(--bg); background: var(--accent); border-radius: 999px; padding: 1px 10px; letter-spacing: 0; }
.next-body h2 { font-size: clamp(1.7rem, 4vw, 2.3rem); }
.next-author { color: var(--muted); font-size: var(--fs-md); margin-top: -4px; }
.next-meta { font-weight: 600; display: flex; align-items: center; gap: 8px; }
.next-meta::before { content: ""; width: 10px; height: 10px; border-radius: 50%; background: var(--c, var(--accent)); flex: none; }
.next-line { font-family: var(--font-display); font-weight: 700; font-size: var(--step-1); }
.chips { list-style: none; margin: 4px 0 0; padding: 0; display: flex; flex-wrap: wrap; gap: 6px; }
.chips li { font-size: var(--fs-xs); padding: 3px 10px; border-radius: 999px; border: 1px solid var(--line); color: var(--muted); background: var(--bg); }
.next-body .cta { margin-top: 10px; }
.next-card .when-past, .next-card.past .when-next, .next-card.past .cal, .next-card.past .chips { display: none; }
.next-card.past .when-past { display: inline; }
.next-card.past > img, .next-card.past > .next-cover { filter: saturate(.6) brightness(.85); }

/* 이달의 일정(홈)과 월별 일정(지난 모임) — data/월일정 */
.sched-month { margin: 0 auto; max-width: 640px; min-width: 0; }
.sched-month img { display: block; width: 100%; height: auto; border-radius: var(--r-card); border: 1px solid var(--line); }
.sched-month figcaption { margin-top: 8px; text-align: center; font-size: var(--fs-sm); color: var(--muted); }
.sched .more { max-width: 640px; margin-inline: auto; }
.months { display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); gap: 28px 20px; }
.months .sched-month { max-width: none; }
.months figcaption { font-family: var(--font-display); font-weight: 700; font-size: var(--step-0); color: var(--ink); }

/* 함께 읽은 책 (pages/03_함께 읽은 책) */
.book-gen { padding-block: 0; scroll-margin-top: 80px; }
.gen-jump { display: flex; gap: 8px; flex-wrap: wrap; }
/* 그해의 노벨: 해마다 한 칸(읽은 해는 모임 색 책, 예정은 살짝 기울임, 안 읽은 해는 점선 빈칸) */
.nb { margin: 8px 0 36px; padding: 28px; border-radius: var(--r-lg); background: var(--surface); box-shadow: var(--sh-1); display: grid; gap: 22px; }
.nb > * { min-width: 0; }
.nb-head { display: grid; gap: 6px; }
.nb-head h2 { font-family: var(--font-display); font-size: var(--fs-lg); margin: 0; }
.nb-head p { margin: 0; color: var(--muted); font-size: var(--fs-md); max-width: 60ch; }
.nb-kicker { font-size: var(--fs-xs); letter-spacing: .08em; color: var(--lamp); font-weight: 700; }
.nb-row { display: grid; grid-template-columns: repeat(5, minmax(140px, 1fr)); grid-auto-flow: column; grid-auto-columns: minmax(140px, 1fr); gap: 14px; overflow-x: auto; padding: 0 0 6px; margin: 0; list-style: none; scroll-snap-type: x mandatory; }
.nb-slot { scroll-snap-align: start; display: grid; grid-template-rows: auto auto 1fr; gap: 10px; min-width: 0; align-content: start; }
.nb-year { margin: 0; font-family: var(--font-display); font-size: 1.5rem; font-weight: 800; line-height: 1; border-bottom: 2px solid var(--line); padding-bottom: 8px; }
.nb-slot.read .nb-year, .nb-slot.soon .nb-year { border-color: var(--c); }
.nb-book { display: grid; align-content: space-between; aspect-ratio: 1; padding: 16px 14px; border-radius: 4px 10px 10px 4px; background: var(--c); color: var(--spine-fg); text-decoration: none; box-shadow: inset 6px 0 0 rgba(0,0,0,.18), var(--sh-1); transition: transform .2s; }
a.nb-book:hover { transform: translateY(-4px); }
.nb-book.has-img { padding: 0; overflow: hidden; border-radius: 10px; box-shadow: var(--sh-1); }
.nb-book.has-img img { width: 100%; height: 100%; object-fit: cover; display: block; }
.nb-book b { font-family: var(--font-display); font-size: 1.05rem; line-height: 1.35; word-break: keep-all; }
.nb-book span { font-size: var(--fs-xs); opacity: .9; }
.nb-slot.none .nb-book { background: transparent; color: var(--muted); border: 1.5px dashed var(--line); box-shadow: none; align-content: center; text-align: center; }
.nb-slot.none .nb-book b { font-family: var(--font-body); font-size: var(--fs-sm); font-weight: 600; }
.nb-meta { margin: 0; font-size: var(--fs-xs); color: var(--muted); display: grid; gap: 2px; }
.nb-meta strong { color: var(--ink); font-size: var(--fs-sm); }
.nb-badge { display: inline-block; margin-top: 4px; font-size: .7rem; font-weight: 700; padding: 2px 8px; border-radius: 99px; background: var(--lamp); color: #fff; }
.nb-past { border-top: 1px solid var(--line); padding-top: 16px; display: grid; gap: 10px; }
.nb-past h3 { margin: 0; font-size: var(--fs-sm); color: var(--muted); font-weight: 600; }
.nb-past ul { list-style: none; margin: 0; padding: 0; display: flex; flex-wrap: wrap; gap: 8px; }
.nb-past a { display: inline-flex; gap: 8px; align-items: baseline; padding: 6px 12px; border-radius: 99px; background: var(--accent-soft); color: var(--ink); text-decoration: none; font-size: var(--fs-sm); }
.nb-past a small { color: var(--muted); font-size: var(--fs-xs); }
@media (max-width: 760px) { .nb { padding: 20px 16px; } .nb-row { grid-template-columns: none; grid-auto-columns: 44%; } }

.book-tools { display: grid; gap: 12px; margin-bottom: 28px; }
.book-search {
  width: 100%; max-width: 420px; font: inherit; font-size: var(--step-0); padding: 12px 18px; border-radius: 999px;
  border: 1.5px solid var(--line); background: var(--surface); color: var(--ink);
}
.book-search:focus { outline: none; border-color: var(--accent); }
.series-filter { display: flex; flex-wrap: wrap; gap: 6px; }
.series-filter button {
  font: inherit; font-size: var(--fs-sm); font-weight: 600; padding: 6px 14px; border-radius: 999px; cursor: pointer;
  border: 1px solid var(--line); background: var(--surface); color: var(--muted);
}
.series-filter button small { font-weight: 500; opacity: .7; margin-left: 2px; }
.series-filter button[aria-pressed="true"] { background: var(--accent); border-color: var(--accent); color: #fff; }
.book-found { font-size: var(--fs-md); color: var(--accent); font-weight: 600; }
.gen-jump a {
  font-weight: 600; font-size: var(--fs-md); padding: 5px 14px; border-radius: 999px; text-decoration: none;
  border: 1px solid var(--line); background: var(--surface); color: var(--ink);
}
.gen-jump a:hover { border-color: var(--accent); color: var(--accent); }
.book-gen + .book-gen { margin-top: 48px; }
.book-gen h2 { font-size: var(--step-1); margin-bottom: 16px; }
.gen-pending { padding: 28px; border: 1.5px dashed var(--line); border-radius: var(--r-card); color: var(--muted); text-align: center; }
.books { list-style: none; margin: 0; padding: 0; display: grid; grid-template-columns: repeat(auto-fill, minmax(150px, 1fr)); gap: 28px 20px; }
.book { min-width: 0; display: grid; gap: 4px; align-content: start; }
.book-cover { position: relative; aspect-ratio: 1; margin-bottom: 8px; }
.book-cover img { width: 100%; height: 100%; object-fit: cover; border-radius: var(--r-card); box-shadow: var(--sh-2); }
.book-cover img.is-cover { object-fit: contain; padding: 8% 0; background: var(--accent-soft); }
.book-cover-art {
  width: 100%; height: 100%; border-radius: var(--r-card); padding: 18% 12%;
  background: var(--c, var(--accent)); color: var(--spine-fg); display: grid; align-content: start; gap: 10px;
  box-shadow: inset 8px 0 0 rgb(0 0 0 / .12);
}
.book-cover-art b { font-family: var(--font-display); font-weight: 800; font-size: var(--step-0); line-height: 1.4; }
.book-cover-art span { font-size: var(--fs-xs); opacity: .85; }
.book-badge { position: absolute; top: 8px; right: 8px; font-size: var(--fs-xs); font-weight: 600; padding: 2px 9px; border-radius: 999px; background: var(--lamp); color: var(--bg); }
.book-badge.doing { background: var(--accent); }
.book.soon .book-cover { outline: 2px dashed var(--muted); outline-offset: 4px; border-radius: var(--r-sm); }
.book-open {
  all: unset; display: grid; gap: 4px; cursor: pointer; color: var(--ink); min-width: 0;
  grid-template-columns: minmax(0, 1fr); /* 긴 제목이 칸을 넓혀 표지가 저자 줄을 덮지 않게 */
}
.book-open:focus-visible { outline: 2px solid var(--lamp); outline-offset: 4px; border-radius: var(--r-sm); }
.book-open .book-cover { display: block; transition: transform .2s ease; }
.book-open:hover .book-cover { transform: translateY(-4px); }
.book-title { font-weight: 700; font-size: var(--step-0); line-height: 1.4; }

/* 책을 눌렀을 때 뜨는 창 */
.book-dialog {
  width: min(880px, calc(100vw - 32px)); max-height: calc(100vh - 48px); padding: 0; overflow: auto;
  border: 1px solid var(--line); border-top: 4px solid var(--c, var(--accent)); border-radius: var(--r-card);
  background: var(--surface); color: var(--ink);
}
.book-dialog::backdrop { background: rgb(0 0 0 / .6); backdrop-filter: blur(2px); }
.bd-close {
  position: absolute; top: 10px; right: 10px; z-index: 1;
  width: 40px; height: 40px; border-radius: 50%; border: 1px solid var(--line); cursor: pointer;
  background: var(--surface); color: var(--ink); font-size: var(--fs-lg); line-height: 1;
}
.bd-content { display: grid; grid-template-columns: minmax(0, 1.1fr) minmax(0, 1fr); }
.bd-media { display: grid; gap: 8px; align-content: start; background: var(--bg); }
.bd-media img { display: block; width: 100%; height: auto; }
.bd-media .bd-cover { width: 70%; margin: 32px auto; aspect-ratio: 2 / 3; height: auto; border-radius: 3px 6px 6px 3px; box-shadow: 0 6px 20px rgb(0 0 0 / .35); }
.bd-body { padding: 32px 28px; display: grid; gap: 8px; align-content: start; }
/* 오른쪽 위 × 단추(40px)가 첫 줄 글자를 덮지 않게(11/6 책속의 한줄 창에서 문장 끝이 가려짐). 휴대폰은 아래 680px 규칙이 다시 정함 */
.bd-body { padding-right: 64px; }
.bd-series { font-size: var(--fs-sm); font-weight: 600; color: var(--muted); display: flex; align-items: center; gap: 8px; }
.bd-series::before { content: ""; width: 10px; height: 10px; border-radius: 50%; background: var(--c, var(--accent)); }
.bd-body h2 { font-size: var(--step-2); }
.bd-line { font-family: var(--font-display); font-weight: 700; font-size: var(--step-1); margin-top: 6px; }
.bd-dates { list-style: none; margin: 10px 0 0; padding: 0; display: grid; gap: 6px; font-size: var(--fs-md); border-top: 1px solid var(--line); padding-top: 12px; }
.bd-dates .book-badge { position: static; margin-left: 4px; }
/* 창 안의 진행 자료 슬라이드 (data/진행자료/<책이름>/) */
/* 그날의 모습: 오프모임 등 이 책을 함께 읽은 날의 사진(행사.csv '함께 읽은 책') */
.bd-day { grid-column: 1 / -1; padding: 20px 28px 24px; border-top: 1px solid var(--line); display: grid; gap: 12px; min-width: 0; }
.bd-day-head { display: flex; flex-wrap: wrap; align-items: baseline; gap: 4px 12px; }
.bd-day-head h3 { font-size: var(--step-1); margin: 0; }
.bd-day-meta { font-size: var(--fs-sm); color: var(--muted); font-variant-numeric: tabular-nums; }
.bd-day-line { margin: 0; font-family: var(--font-display); line-height: 1.6; padding-left: 12px; border-left: 3px solid var(--lamp); max-width: 40em; }
.bd-day-grid { display: grid; grid-template-columns: repeat(3, minmax(0, 1fr)); gap: 8px; }
.bd-day-grid a { display: block; border-radius: var(--r-sm); overflow: hidden; background: var(--accent-soft); }
.bd-day-grid img { display: block; width: 100%; aspect-ratio: 4 / 3; object-fit: cover; transition: transform .3s; }
.bd-day-grid a:hover img { transform: scale(1.03); }
.bd-day .bd-more { justify-self: start; }
@media (max-width: 680px) { .bd-day { padding: 16px 20px 20px; } .bd-day-grid { grid-template-columns: repeat(2, minmax(0, 1fr)); } .bd-day-grid a:nth-child(n+3) { display: none; } }
@media (prefers-reduced-motion: reduce) { .bd-day-grid img { transition: none; } }
.bd-slides { grid-column: 1 / -1; padding: 20px 28px 28px; border-top: 1px solid var(--line); display: grid; gap: 12px; min-width: 0; }
.bd-slides-head { display: flex; align-items: center; gap: 10px; }
.bd-slides-head h3 { font-size: var(--step-1); margin-right: auto; }
.bd-slides-count { font-size: var(--fs-sm); color: var(--muted); font-variant-numeric: tabular-nums; }
.bd-slide-prev, .bd-slide-next {
  width: 36px; height: 36px; border-radius: 50%; display: grid; place-items: center; padding: 0; cursor: pointer;
  border: 1px solid var(--line); background: var(--bg); color: var(--ink);
}
.bd-slide-prev:hover, .bd-slide-next:hover { border-color: var(--accent); color: var(--accent); }
.bd-slide-prev svg, .bd-slide-next svg { width: 18px; height: 18px; }
.bd-slide-track { display: flex; overflow-x: auto; scroll-snap-type: x mandatory; scrollbar-width: none; border-radius: var(--r-sm); background: var(--bg); }
.bd-slide-track::-webkit-scrollbar { display: none; }
.bd-slide-track img { flex: 0 0 100%; width: 100%; height: auto; max-height: 60vh; object-fit: contain; scroll-snap-align: start; }
.bd-slides-more { font-size: var(--fs-sm); color: var(--muted); display: flex; flex-wrap: wrap; align-items: center; gap: 8px 12px; }
@media (max-width: 680px) { .bd-content { grid-template-columns: 1fr; } .bd-body { padding: 20px; } .bd-slides { padding: 16px 20px 20px; } }
.book-author { font-size: var(--fs-sm); color: var(--muted); }
.book-meta { font-size: var(--fs-xs); line-height: 1.5; color: var(--muted); display: flex; align-items: flex-start; gap: 6px; }
.book-meta::before { content: ""; width: 8px; height: 8px; border-radius: 50%; background: var(--c, var(--accent)); flex: none; margin-top: calc(0.75em - 4px); }
.book-meta .bm-s { flex: none; white-space: nowrap; }
.book-meta .bm-s:not(:last-child)::after { content: " ·"; }
.book-meta .bm-d { display: flex; flex-wrap: wrap; column-gap: 0.3em; min-width: 0; }
.book-meta .bm-d span { white-space: nowrap; }
.book-meta .bm-d span:not(:last-child)::after { content: " ·"; }
.book-links { display: flex; flex-wrap: wrap; gap: 4px 10px; font-size: var(--fs-sm); margin-top: 2px; }

/* 숫자로 보는 책미사 (pages/08): 숫자 칸 · 와플 · 타임라인 · 꺾은선 · 히트맵 · 덤벨 */
.nchart { padding-block: 0; margin-top: 48px; min-width: 0; }
.nchart h2 { font-size: var(--step-1); }
.ndesc { margin-top: 4px; color: var(--muted); font-size: var(--fs-md); }
.nviz { margin-top: 14px; min-height: 120px; }
.nviz svg { display: block; overflow: visible; font-family: var(--font-body); }
.nviz circle[tabindex]:hover, .nviz circle[tabindex]:focus-visible { stroke: var(--ink); outline: none; }
.ngrid2 { display: grid; grid-template-columns: minmax(0, 1fr) minmax(0, 1fr); gap: 0 40px; }
.ntiles { margin-top: 8px; display: grid; grid-template-columns: repeat(auto-fit, minmax(200px, 1fr)); gap: 12px; }
.ntile { background: var(--surface); border: 1px solid var(--line); border-radius: var(--r-card); padding: 18px 20px; display: grid; gap: 4px; align-content: start; }
.nt-label { font-size: var(--fs-sm); color: var(--muted); }
.ntile b { font-size: 1.9rem; font-weight: 800; letter-spacing: -.02em; line-height: 1.15; }
.nt-sub { font-size: var(--fs-sm); color: var(--muted); }
.nlegend { margin-top: 14px; display: flex; flex-wrap: wrap; gap: 6px 18px; font-size: var(--fs-sm); color: var(--muted); }
.nlegend span { display: inline-flex; align-items: center; gap: 6px; }
.nlegend b { color: var(--ink); }
.nlegend i { width: 12px; height: 12px; border-radius: 3px; display: inline-block; }
.nlegend i.dot { border-radius: 50%; }
.nlegend i.dot.a { background: #8fbcc3; }
.nlegend i.dot.b { background: #174953; }
.nwaffle { margin-top: 14px; display: grid; grid-template-columns: repeat(auto-fill, 18px); gap: 3px; }
.nwaffle i { width: 18px; height: 18px; border-radius: 4px; display: block; }
.nwaffle i:hover, .nwaffle i:focus-visible { outline: 2px solid var(--ink); outline-offset: 1px; }
.nheat { margin-top: 14px; border-collapse: separate; border-spacing: 3px; width: 100%; font-variant-numeric: tabular-nums; }
.nheat th { font-size: var(--fs-xs); font-weight: 600; color: var(--muted); text-align: center; padding: 2px; white-space: nowrap; }
.nheat tr th:first-child { text-align: left; color: var(--ink); }
.nheat th i { width: 8px; height: 8px; border-radius: 2px; display: inline-block; margin-right: 6px; vertical-align: 1px; }
.nheat td { height: 38px; text-align: center; font-weight: 700; font-size: var(--fs-md); border-radius: var(--r-sm); }
.nheat td.h0 { background: var(--surface); border: 1px solid var(--line); color: var(--muted); font-weight: 400; }
.nheat td[tabindex]:hover, .nheat td[tabindex]:focus-visible { outline: 2px solid var(--ink); }
.nscale { margin-top: 8px; display: flex; align-items: center; gap: 3px; font-size: var(--fs-xs); color: var(--muted); }
.nscale i { width: 22px; height: 10px; border-radius: 2px; display: inline-block; }
.nscale span { margin: 0 6px; }
.ntable { margin-top: 40px; font-size: var(--fs-sm); }
.ntable summary { cursor: pointer; color: var(--accent); font-weight: 600; }
.ntable table { margin-top: 10px; border-collapse: collapse; width: 100%; max-width: 760px; font-variant-numeric: tabular-nums; }
.ntable th, .ntable td { border-bottom: 1px solid var(--line); padding: 6px 8px; text-align: right; }
.ntable th:first-child, .ntable td:first-child { text-align: left; }
.nnote { margin-top: 24px; font-size: var(--fs-sm); color: var(--muted); line-height: 1.7; }
.ntip { position: fixed; z-index: 50; pointer-events: none; background: var(--ink); color: #fff; font-size: var(--fs-sm); font-weight: 700;
  padding: 6px 10px; border-radius: var(--r-sm); white-space: nowrap; box-shadow: 0 6px 18px rgb(0 0 0 / .2); }
@media (max-width: 820px) { .ngrid2 { grid-template-columns: 1fr; } }
@media (max-width: 560px) { .ntiles { grid-template-columns: repeat(2, minmax(0, 1fr)); } .ntile { padding: 14px; } .ntile b { font-size: var(--fs-lg); } .nwaffle { grid-template-columns: repeat(auto-fill, 14px); } .nwaffle i { width: 14px; height: 14px; border-radius: 3px; } }

/* 책 창·책 페이지: 참여하기·공유하기 */
.bd-actions { display: flex; flex-wrap: wrap; gap: 8px; margin-top: 12px; }
.bd-more { justify-self: start; margin-top: 4px; font-size: var(--fs-md); font-weight: 700; color: var(--accent); text-decoration: none; }
.bd-more:hover { text-decoration: underline; }
.bi { scroll-margin-top: 90px; }
/* 책마다 공유용 페이지 (book-xxxx.html) */
.bookpage .bp-back, .nobelpage .bp-back { margin-bottom: 16px; }
.bookpage .bp-back a, .nobelpage .bp-back a { color: var(--muted); text-decoration: none; font-size: var(--fs-md); }
.bookpage .bp-back a:hover, .nobelpage .bp-back a:hover { color: var(--accent); }
.bp { background: var(--surface); border: 1px solid var(--line); border-top: 4px solid var(--c, var(--accent)); border-radius: var(--r-card); overflow: hidden; }
.bp-about { margin-top: 28px; padding: 24px 28px; border-radius: var(--r-card); background: var(--accent-soft); display: grid; gap: 14px; }
.bp-about p:first-child { line-height: 1.8; }
.bp-about p:last-child { display: flex; flex-wrap: wrap; gap: 8px; }
@media (max-width: 560px) { .bp-about .btn { flex: 1 1 100%; justify-content: center; text-align: center; } }
/* 책 페이지: 이 책은 · 왜 이 책인가 · 모임에서 나눌 질문 (data/함께 읽은 책/책소개.csv) */
.bi { grid-column: 1 / -1; border-top: 1px solid var(--line); display: grid; grid-template-columns: minmax(0, 1fr) minmax(0, 1.15fr); }
.bi h3 { font-size: var(--fs-xs); font-weight: 700; letter-spacing: .08em; color: var(--c, var(--accent)); }
.bi-why { padding: 36px 28px 36px 32px; display: grid; gap: 22px; align-content: start; }
.bi-why section { display: grid; gap: 10px; padding-block: 0; }
.bi-why p { line-height: 1.85; max-width: 34em; }
.bi-q { padding: 36px 32px 36px 28px; background: color-mix(in srgb, var(--c, var(--accent)) 5%, var(--surface)); border-left: 1px solid var(--line); display: grid; gap: 18px; align-content: start; }
.bi-q:only-child { grid-column: 1 / -1; border-left: 0; }
.bi-q ol { list-style: none; margin: 0; padding: 0; counter-reset: q; }
.bi-q li { counter-increment: q; display: grid; grid-template-columns: 2.2em minmax(0, 1fr); gap: 10px; padding: 16px 0; border-top: 1px solid color-mix(in srgb, var(--c, var(--accent)) 18%, var(--line)); }
.bi-q li:first-child { border-top: 0; padding-top: 4px; }
.bi-q li::before { content: counter(q, decimal-leading-zero); font-family: var(--font-display); font-weight: 800; font-size: var(--step-0); color: var(--c, var(--accent)); line-height: 1.55; }
.bi-q li p { font-family: var(--font-display); font-weight: 700; font-size: 1.16rem; line-height: 1.6; }
.bi-invite { display: flex; flex-wrap: wrap; align-items: center; gap: 10px 14px; font-size: var(--fs-md); color: var(--muted); padding-top: 14px; border-top: 1px solid var(--line); }
@media (max-width: 680px) {
  .bi { grid-template-columns: 1fr; }
  .bi-why, .bi-q { padding: 26px 20px; }
  .bi-q { border-left: 0; border-top: 1px solid var(--line); }
  .bi-q li p { font-size: var(--step-1); }
}

/* 책 창: 이 책이 던지는 질문 (생각의 지도) */
.bd-q { grid-column: 1 / -1; padding: 20px 28px 28px; border-top: 1px solid var(--line); display: grid; gap: 10px; min-width: 0; }
.bd-q h3 { font-size: var(--step-1); }
.bd-q-links { font-size: var(--fs-sm); color: var(--muted); }
.bd-q-links span { margin-right: 6px; }
.bd-q-links a { font-family: var(--font-display); font-weight: 700; color: var(--accent); text-decoration: none; }
.bd-q-links a:hover { text-decoration: underline; }
.bd-q-also { font-size: var(--fs-sm); color: var(--muted); margin-top: 4px; }
.bd-q-books { list-style: none; margin: 0; padding: 0; display: grid; grid-template-columns: repeat(4, minmax(0, 120px)); gap: 16px; }
.bd-jump { font: inherit; width: 100%; padding: 0; border: 0; background: none; color: var(--ink); cursor: pointer; text-align: left; display: grid; gap: 4px; }
.bd-jump img, .bd-jump .book-cover-art { width: 100%; aspect-ratio: 1; height: auto; object-fit: cover; border-radius: 6px; box-shadow: 0 3px 10px rgb(0 0 0 / .18); margin-bottom: 4px; }
.bd-jump img.is-cover { object-fit: contain; background: var(--line); padding: 8px; box-sizing: border-box; }
.bd-jump .book-cover-art { padding: 10px; color: var(--spine-fg); }
.bd-jump .book-cover-art b { color: inherit; }
.bd-jump .book-cover-art b { font-size: var(--fs-sm); }
.bd-jump > b { font-size: var(--fs-sm); line-height: 1.4; }
.bd-jump > span { font-size: var(--fs-xs); color: var(--muted); }
.bd-jump:hover > b { color: var(--accent); }
@media (max-width: 680px) { .bd-q { padding: 16px 20px 24px; } .bd-q-books { grid-template-columns: repeat(4, minmax(0, 1fr)); gap: 10px; } }

/* 생각의 지도 (pages/04_생각의 지도): 질문 하나에 한 면, 잡지처럼 */
.qintro { max-width: 640px; }
.qintro h1 { font-size: var(--step-2); font-weight: 800; }
.qintro p { margin-top: 12px; font-size: var(--step-0); line-height: 1.8; color: var(--muted); }
.qtoc { list-style: none; margin: 40px 0 0; padding: 0; display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); column-gap: 48px; border-top: 1px solid var(--ink); }
.qtoc a { display: grid; grid-template-columns: 2.4em 1fr auto; align-items: baseline; gap: 12px; padding: 16px 0; border-bottom: 1px solid var(--line); text-decoration: none; color: var(--ink); }
.qtoc a:hover .qtoc-q { color: var(--accent); }
.qtoc-q { font-family: var(--font-display); font-weight: 700; font-size: var(--step-0); line-height: 1.5; transition: color .2s ease; }
.qtoc small { font-size: var(--fs-sm); color: var(--muted); font-variant-numeric: tabular-nums; }
.qno { font-family: var(--font-display); font-weight: 400; color: var(--lamp); font-variant-numeric: tabular-nums; letter-spacing: .02em; }
.qsec { padding-block: 72px; border-bottom: 1px solid var(--line); scroll-margin-top: 64px;
  display: grid; grid-template-columns: minmax(0, 5fr) minmax(0, 7fr); gap: 32px 56px; align-items: start; }
.qsec:last-child { border-bottom: 0; }
.qtext .qno { font-size: 2.6rem; line-height: 1; }
.qtext h2 { margin-top: 18px; font-family: var(--font-display); font-weight: 800; font-size: clamp(1.6rem, 1.1rem + 1.6vw, 2.25rem); line-height: 1.4; letter-spacing: -.01em; }
.qlede { margin-top: 20px; font-size: var(--step-0); line-height: 1.9; }
.qmeta { margin-top: 16px; font-size: var(--fs-sm); color: var(--muted); }
.qlabel { font-size: var(--fs-xs); font-weight: 700; letter-spacing: .08em; color: var(--muted); margin-bottom: 14px; }
.qstart ul { list-style: none; margin: 0; padding: 0; display: grid; grid-template-columns: repeat(3, minmax(0, 1fr)); gap: 18px; }
.qstart li { min-width: 0; }
.qstart a { display: grid; gap: 4px; min-width: 0; text-decoration: none; color: var(--ink); }
.qcover { display: block; aspect-ratio: 1; margin-bottom: 8px; transition: transform .2s ease; }
.qcover img { width: 100%; height: 100%; object-fit: cover; border-radius: var(--r-sm); box-shadow: var(--sh-2); }
.qcover img.is-cover { object-fit: contain; padding: 8% 0; background: var(--accent-soft); }
.qcover .book-cover-art { border-radius: var(--r-sm); }
.qstart a:hover .qcover { transform: translateY(-4px); }
.qstart b { font-weight: 700; font-size: var(--step-0); line-height: 1.4; }
.qstart small { font-size: var(--fs-xs); color: var(--muted); }
.qrest { grid-column: 1 / -1; display: grid; gap: 0; padding-top: 8px; }
.qrest .qlabel { margin: 16px 0 8px; }
.qlist { font-size: var(--fs-md); line-height: 2; }
.qlist a { color: var(--ink); text-decoration: none; border-bottom: 1px solid transparent; }
.qlist a:hover { color: var(--accent); border-bottom-color: currentColor; }
.qlist span { color: var(--line); }
.qlist.also a { color: var(--muted); }
/* 질문 칸 맨 아래 '이 질문으로 나눈 모임 후기': 블로그 후기가 모이면 PDF 한 권(scripts/bundle_pdf.py) */
.qbundle { grid-column: 1 / -1; margin-top: 18px; display: grid; grid-template-columns: 140px minmax(0, 1fr); gap: 20px; padding: 16px; border-radius: var(--r-card); background: var(--surface); border: 1px solid var(--line); }
.qbundle.soon { grid-template-columns: minmax(0, 1fr); border-style: dashed; background: transparent; }
.qb-cov { width: 100%; aspect-ratio: 148 / 210; object-fit: cover; background: #f4efe5; color: var(--ink); border-radius: 2px; padding: 10px; display: flex; flex-direction: column; gap: 4px; box-shadow: 0 1px 2px rgb(27 31 34 / .12), 0 6px 16px rgb(27 31 34 / .12); }
img.qb-cov { padding: 0; }
.qb-cov small { font-size: 9px; letter-spacing: .12em; color: var(--accent); }
.qb-cov b { font: 800 15px/1.3 var(--font-display); }
.qb-body { min-width: 0; display: grid; gap: 8px; align-content: start; }
.qbundle .qlabel { margin: 0; }
.qb-t { margin: 0; font-weight: 700; }
.qb-t small { display: block; font-weight: 400; color: var(--muted); font-size: var(--fs-sm); }
.qb-books { list-style: none; margin: 0; padding: 0 0 4px; display: flex; gap: 8px; overflow-x: auto; }
.qb-books li { flex: 0 0 52px; }
.qb-books a { display: grid; gap: 3px; font-size: 10.5px; line-height: 1.3; color: var(--muted); text-decoration: none; }
.qb-books img, .qb-art { width: 52px; height: 78px; object-fit: cover; border-radius: 3px; box-shadow: 0 1px 3px rgb(27 31 34 / .2); }
.qb-art { display: flex; align-items: center; justify-content: center; text-align: center; padding: 3px; background: var(--c); color: #fff; font: 700 9px/1.3 var(--font-display); }
.qb-books span { display: -webkit-box; -webkit-line-clamp: 2; -webkit-box-orient: vertical; overflow: hidden; }
.qb-acts { display: flex; flex-wrap: wrap; gap: 8px; }
.qb-acts small { font-weight: 400; opacity: .8; margin-left: 4px; }
.qb-prog { height: 6px; border-radius: 99px; background: var(--line); overflow: hidden; max-width: 320px; }
.qb-prog i { display: block; height: 100%; background: var(--accent); }
@media (max-width: 560px) { .qbundle { grid-template-columns: minmax(0, 1fr); } .qb-cov { display: none; } }
@media (max-width: 820px) {
  .qtoc { grid-template-columns: 1fr; }
  .qsec { grid-template-columns: 1fr; padding-block: 56px; }
}
@media (max-width: 560px) { .qstart ul { gap: 10px; } .qstart b { font-size: var(--fs-sm); } .qcover .book-cover-art b { font-size: var(--fs-sm); } }

/* 생각의 지도 '목록 / 그래프' (그래프는 처음 누를 때 d3를 불러와 그림 — build_site.py QGRAPH_JS). 그래프 판만 어두운 밤하늘 */
.qview { display: flex; gap: 4px; margin-top: 24px; background: var(--surface); border: 1px solid var(--line); border-radius: 999px; padding: 3px; width: max-content; }
.qview button { font: inherit; font-size: var(--fs-md); border: 0; background: none; color: var(--muted); padding: 5px 18px; border-radius: 999px; cursor: pointer; }
.qview button[aria-pressed="true"] { background: var(--accent); color: var(--spine-fg); font-weight: 600; }
.qview button:focus-visible, .qgraph .qg-tools :focus-visible, .qg-panel button:focus-visible { outline: 2px solid #7cc8d3; outline-offset: 2px; }
.qgraph { margin-top: 28px; display: grid; gap: 14px; }
#qv-list[hidden], .qgraph[hidden], .qg-hint[hidden] { display: none; }
.qg-lead { margin: 0; color: var(--muted); font-size: var(--fs-md); max-width: 64ch; }
.qg-stage { display: grid; grid-template-columns: minmax(0, 1fr) 320px; gap: 16px; align-items: start; }
.qg-board { background: #1b1e21; border-radius: var(--r-card); overflow: hidden; position: relative; box-shadow: var(--sh-2); }
.qgraph .qg-tools { position: absolute; top: 10px; left: 10px; right: 10px; display: flex; flex-wrap: wrap; gap: 6px; align-items: center; z-index: 2; pointer-events: none; }
.qgraph .qg-tools > * { pointer-events: auto; font: inherit; font-size: var(--fs-sm); background: #23272b; color: #dcdcd6; border: 1px solid #33383d; border-radius: var(--r-sm); padding: 5px 10px; }
/* (.qgraph 아래로 묶음: 책속의 한줄의 .qg-tools·.qg-search와 이름이 겹쳐 한줄 검색이 그래프 박스처럼 떠 버렸음, 11/6) 책·저자 찾기, 질문 고르기: 그래프 박스 밖 위(박스 안 단추가 두 줄이 되지 않게, 11/5) */
.qgraph .qg-search { display: flex; flex-wrap: wrap; gap: 8px; margin: 0 0 12px; }
.qgraph .qg-search > * { font: inherit; font-size: var(--fs-sm); background: var(--surface); color: var(--ink); border: 1px solid var(--line); border-radius: var(--r-sm); padding: 7px 12px; }
.qgraph .qg-search :focus-visible { outline: 2px solid var(--accent); outline-offset: 2px; }
.qg-find { width: 220px; }
.qg-find::placeholder { color: var(--muted); }
.qg-qsel { max-width: 260px; }
.qg-fit { cursor: pointer; margin-left: auto; }
.qg-play, .qg-save { cursor: pointer; }
.qg-save { border-color: #7cc8d3 !important; color: #7cc8d3 !important; }
.qg-save:disabled { opacity: .6; cursor: wait; }
.qg-play[aria-pressed="true"] { border-color: #7cc8d3; color: #7cc8d3; }
/* 박스 안 단추 다섯 개(내 별자리·누구의·연도별·해마다·이미지 저장)는 같은 크기·같은 줄(11/5 에스파다) */
.qgraph .qg-tools > * { box-sizing: border-box; height: 34px; line-height: 1; font-weight: 600; }
.qgraph .qg-tools > button { display: inline-flex; align-items: center; justify-content: center; }
.qg-mine, .qgraph .qg-tools .qg-whosel, .qg-year, .qg-play, .qg-save { width: 116px; max-width: none; padding: 0 10px; text-align: center; text-align-last: center; }
.qgraph .qg-tools select { padding: 0 6px; }
/* 휴대폰: 여섯 단추를 한 줄로. 글자를 조금 줄이고 콤보박스는 고른 글자 폭만큼(JS fitSel), 화살표는 작게 */
@media (max-width: 600px) {
  .qgraph .qg-tools { left: 8px; right: 8px; top: 8px; gap: 4px; flex-wrap: nowrap; overflow-x: auto; scrollbar-width: none; }
  .qgraph .qg-tools::-webkit-scrollbar { display: none; }
  .qgraph .qg-tools > * { height: 32px; font-size: 11.5px; flex: 0 0 auto; }
  .qgraph .qg-tools .qg-fit { width: 32px; padding: 0; }
  .qgraph .qg-tools > [hidden] { display: none; }
  .qg-mine, .qgraph .qg-tools .qg-whosel, .qg-year, .qg-play, .qg-save, .qg-fit { width: auto; padding: 0 8px; }
  .qg-fit { margin-left: auto; }
  .qgraph .qg-tools select.qg-whosel, .qgraph .qg-tools select.qg-year { -webkit-appearance: none; appearance: none; padding: 0 14px 0 6px; text-align: left; text-align-last: left;
    background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='7' height='4'%3E%3Cpath d='M0 0l3.5 4 3.5-4z' fill='%23dcdcd6'/%3E%3C/svg%3E");
    background-repeat: no-repeat; background-position: right 5px center; }
}
/* 내 별자리: 켜면 꽉 찬 별빛 단추, 패널엔 질문 막대·다음에 켤 별 */
.qg-mine { cursor: pointer; }
.qg-whosel { cursor: pointer; max-width: 150px; }
.qg-whosel[hidden] { display: none; }
.qg-mine[aria-pressed="true"] { background: #7cc8d3 !important; border-color: #7cc8d3 !important; color: #17191c !important; }
.qg-bars { list-style: none; margin: 0; padding: 0; display: grid; gap: 5px; }
.qg-bars li { display: grid; grid-template-columns: 9.5em 1fr 2.6em; gap: 8px; align-items: center; font-size: var(--fs-sm); }
.qg-bars button { font: inherit; border: 0; background: none; padding: 0; color: var(--ink); text-align: left; cursor: pointer; word-break: keep-all; }
.qg-bars .qg-bar { height: 8px; background: var(--line); border-radius: 4px; overflow: hidden; }
.qg-bars .qg-bar i { display: block; height: 100%; background: var(--accent); border-radius: 4px; }
.qg-bars b { font-weight: 600; text-align: right; font-variant-numeric: tabular-nums; }
.qg-bars li.zero { color: var(--muted); }
.qg-bars li.zero button { color: var(--muted); }
.qg-next { list-style: none; margin: 0; padding: 0; display: grid; gap: 8px; }
.qg-next li { display: grid; grid-template-columns: minmax(0, 1fr) auto; gap: 2px 10px; align-items: center; padding: 8px 0; border-top: 1px solid var(--line); }
.qg-nt { font-weight: 700; word-break: keep-all; }
.qg-nt .qg-link { font-weight: 700; color: var(--ink); font-size: inherit; }
.qg-ns { grid-column: 1; font-size: var(--fs-xs); color: var(--muted); }
.qg-next .btn { grid-column: 2; grid-row: 1 / span 2; }
.qg-acts { margin: 4px 0 0; }
.qg-note { margin: 0; font-size: var(--fs-xs); color: var(--muted); }
.qg-note a { color: var(--accent); }
.qg-sec small { font-weight: 400; }
/* 내 별자리: 책미사 책 고르기(해마다 접기) · 밖의 책 목록 */
.qg-pbox { max-height: 440px; overflow-y: auto; border: 1px solid var(--line); border-radius: var(--r-sm); }
.qg-pyear { border-bottom: 1px solid var(--line); }
.qg-pyear:last-child { border-bottom: 0; }
.qg-pyear summary { cursor: pointer; padding: 8px 12px; font-weight: 700; font-size: var(--fs-sm); background: var(--bg); position: sticky; top: 0; }
.qg-pyear summary small { color: var(--muted); font-weight: 400; margin-left: 4px; }
.qg-pick { list-style: none; margin: 0; padding: 4px 6px 8px; }
.qg-pick label { display: flex; align-items: center; gap: 8px; padding: 5px 6px; font-size: var(--fs-sm); cursor: pointer; border-radius: 3px; }
.qg-pick label:hover { background: var(--bg); }
.qg-pick input { width: 18px; height: 18px; flex: none; accent-color: var(--accent); }
.qg-pdot { width: 8px; height: 8px; border-radius: 50%; flex: none; }
.qg-pt { flex: 1; min-width: 0; word-break: keep-all; }
.qg-pick small { color: var(--muted); font-size: var(--fs-xs); flex: none; }
.qg-own { list-style: none; margin: 0; padding: 0; display: grid; gap: 4px; }
.qg-own li { display: flex; flex-wrap: wrap; align-items: center; justify-content: space-between; gap: 4px 10px; padding: 6px 0; border-top: 1px solid var(--line); font-size: var(--fs-sm); }
.qg-ot { font-weight: 600; word-break: keep-all; }
.qg-osel { font: inherit; font-size: var(--fs-xs); padding: 3px 6px; border: 1px solid var(--line); border-radius: var(--r-sm); background: var(--surface); color: var(--ink); }
/* 나의 독서 여정: 밖의 책이 닿은 질문 고르기 */
.my-qchips { display: flex; flex-wrap: wrap; gap: 6px; }
.my-qchips button { font: inherit; font-size: var(--fs-xs); padding: 4px 10px; border-radius: 999px; border: 1px solid var(--line); background: var(--surface); color: var(--ink); cursor: pointer; }
.my-qchips button[aria-pressed="true"] { background: var(--accent); border-color: var(--accent); color: #fff; }
.my-label small { font-weight: 400; color: var(--muted); }
.qg-cv { display: block; width: 100%; height: 680px; touch-action: none; cursor: grab; }
.qg-cv.over { cursor: pointer; }
.qg-wait { position: absolute; inset: 0 0 44px; display: grid; place-items: center; color: #8d9399; font-size: var(--fs-md); }
.qg-hint { position: absolute; right: 12px; bottom: 52px; font-size: var(--fs-xs); color: #8d9399; pointer-events: none; }
.qg-legend { display: flex; flex-wrap: wrap; gap: 4px 14px; padding: 10px 14px; border-top: 1px solid #33383d; font-size: var(--fs-xs); color: #8d9399; }
.qg-legend span { display: inline-flex; align-items: center; gap: 6px; }
.qg-legend i { width: 8px; height: 8px; border-radius: 50%; display: inline-block; }
.qg-panel { background: var(--surface); border: 1px solid var(--line); border-radius: var(--r-card); padding: 18px; display: grid; gap: 10px; min-width: 0; }
.qg-panel h2 { font-family: var(--font-display); font-weight: 800; font-size: var(--step-1); line-height: 1.45; margin: 0; word-break: keep-all; }
.qg-kicker { margin: 0; font-size: var(--fs-xs); color: var(--muted); }
.qg-sent { margin: 0; font-family: var(--font-display); font-weight: 700; color: var(--accent); word-break: keep-all; }
.qg-facts { margin: 0; display: flex; flex-wrap: wrap; gap: 4px 14px; font-size: var(--fs-sm); color: var(--muted); }
.qg-facts b { color: var(--ink); font-weight: 600; font-variant-numeric: tabular-nums; }
.qg-sec { margin: 4px 0 0; font-size: var(--fs-xs); font-weight: 700; color: var(--muted); }
.qg-list { display: flex; flex-wrap: wrap; gap: 6px; margin: 0; padding: 0; list-style: none; }
.qg-list button { font: inherit; font-size: var(--fs-sm); border: 0; border-left: 4px solid var(--c); background: var(--bg); color: var(--ink); padding: 3px 9px; border-radius: 3px; cursor: pointer; text-align: left; word-break: keep-all; }
.qg-list button.bridge { background: var(--accent-soft); }
.qg-list button:hover { background: var(--line); }
.qg-chip { display: inline-block; font-size: var(--fs-xs); color: #fff; padding: 1px 9px; border-radius: 999px; font-weight: 600; margin-right: 6px; }
.qg-link { font: inherit; font-size: var(--fs-sm); border: 0; background: none; color: var(--accent); padding: 0; cursor: pointer; justify-self: start; text-align: left; }
.qg-go { font-size: var(--fs-sm); font-weight: 600; color: var(--accent); border-top: 1px solid var(--line); padding-top: 10px; }
@media (max-width: 860px) { .qg-stage { grid-template-columns: minmax(0, 1fr); } .qg-cv { height: 560px; } .qg-find { flex: 1 1 140px; width: auto; } .qg-qsel { flex: 1 1 140px; max-width: none; } }

/* 질문의 서재 (pages/03a_질문의 서재): 질문 하나에 한 줄, 누르면 그날 이야기·다르게 읽은 곳·이어지는 책 */
.ql-today { margin-top: 32px; background: var(--accent); color: #fbf8f1; border-radius: var(--r-card); padding: 26px clamp(20px, 4vw, 36px); display: grid; gap: 12px; box-shadow: var(--sh-1); }
.ql-today-lab { font-size: var(--fs-xs); font-weight: 700; letter-spacing: .08em; opacity: .85; }
.ql-today-q { margin: 0; font-family: var(--font-display); font-weight: 700; font-size: clamp(1.25rem, 1rem + 1vw, 1.6rem); line-height: 1.5; text-wrap: pretty; }
.ql-today-m { font-size: var(--fs-md); opacity: .9; }
.ql-today .ql-btn { background: rgb(255 255 255 / .14); border-color: rgb(255 255 255 / .4); color: #fbf8f1; }
.ql-today .ql-btn:hover { background: rgb(255 255 255 / .24); border-color: #fbf8f1; }
.ql-tools { margin-top: 32px; }
.ql-note { font-family: var(--font-display); font-size: var(--fs-md); color: var(--muted); min-height: 1.6em; }
.ql-list { list-style: none; margin: 8px 0 0; padding: 0; border-top: 1px solid var(--ink); }
.ql { border-bottom: 1px solid var(--line); scroll-margin-top: 110px; }
.ql-q { width: 100%; text-align: left; background: none; border: 0; padding: 18px 2px; display: grid; gap: 6px; font: inherit; color: var(--ink); cursor: pointer; }
.ql-text { font-family: var(--font-display); font-weight: 700; font-size: var(--step-1); line-height: 1.55; text-wrap: pretty; transition: color .2s ease; }
.ql-q:hover .ql-text, .ql.open .ql-text { color: var(--accent); }
.ql-meta { display: flex; flex-wrap: wrap; align-items: center; gap: 4px 10px; font-size: var(--fs-sm); color: var(--muted); }
.ql-meta b { color: var(--ink); font-weight: 600; }
.ql-src { font-size: var(--fs-xs); font-weight: 700; padding: 1px 8px; border-radius: 999px; background: var(--accent-soft); color: var(--accent); }
.ql-src.r { background: #f6ecda; color: #8a5d17; }
.ql-src.t { background: var(--accent); color: #fff; }
.ql-talk small { color: var(--muted); font-size: var(--fs-xs); white-space: nowrap; }
.ql-who { font-size: var(--fs-xs); padding: 0 8px; border-radius: 999px; border: 1px solid var(--line); }
.ql-more { padding: 0 0 22px; }
/* 질문의 서재: 질문 먼저(최근 모임 책마다 질문 하나 → 모두 보기), 책은 맨 아래 작은 표지 줄로 고르기(2026-10-30 에스파다) */
.qf-head { display: flex; flex-wrap: wrap; align-items: baseline; justify-content: space-between; gap: 8px 16px; margin-top: 28px; scroll-margin-top: 110px; }
.qf-title { font-family: var(--font-display); font-weight: 800; font-size: var(--step-1); }
.qf-title small { font-family: var(--font-body); font-weight: 400; font-size: var(--fs-sm); color: var(--muted); margin-left: 8px; }
.qf-back[hidden], .qf-more-wrap[hidden], .ql-empty[hidden] { display: none; }
/* 질문 줄: 왼쪽 작은 표지, 오른쪽 질문 글(질문이 주인공) */
.ql-q { grid-template-columns: 52px minmax(0, 1fr); column-gap: 16px; align-items: start; }
.ql-q > .ql-cov { grid-row: span 2; width: 52px; height: 52px; border-radius: 6px; object-fit: cover; box-shadow: var(--sh-1); margin-top: 4px; }
.ql-cov-art { display: grid; place-items: center; background: var(--c, var(--accent)); color: var(--spine-fg); font-family: var(--font-display); font-weight: 800; font-size: var(--fs-sm); }
.ql-q > .ql-text, .ql-q > .ql-meta { grid-column: 2; min-width: 0; }
.ql-more { margin-left: 68px; }
.qf-more-wrap { margin: 18px 0 0; text-align: center; }
/* 책으로 골라 보기: 작은 표지 한 줄(옆으로 넘김) */
.qs { margin-top: 40px; padding-top: 22px; border-top: 1px solid var(--line); min-width: 0; }
.qs-lab { font-weight: 700; font-size: var(--fs-md); display: flex; flex-wrap: wrap; align-items: baseline; gap: 2px 10px; }
.qs-lab small { font-weight: 400; font-size: var(--fs-sm); color: var(--muted); }
.qs-row { list-style: none; margin: 12px 0 0; padding: 4px 2px 10px; display: flex; gap: 12px; overflow-x: auto; scroll-snap-type: x proximity; }
.qs-row > li { flex: 0 0 88px; scroll-snap-align: start; }
.qs-card { width: 100%; display: grid; gap: 4px; padding: 0; border: 0; background: none; text-align: left; font: inherit; color: var(--ink); cursor: pointer; position: relative; }
.qs-card img, .qs-art { width: 88px; height: 88px; object-fit: cover; border-radius: 6px; box-shadow: var(--sh-1); transition: transform .2s ease; }
.qs-art { display: grid; place-items: center; padding: 6px; background: var(--c, var(--accent)); color: var(--spine-fg); font-size: 11px; font-weight: 700; line-height: 1.35; text-align: center; word-break: keep-all; overflow: hidden; }
.qs-card:hover img, .qs-card:hover .qs-art { transform: translateY(-2px); }
.qs-card[aria-pressed="true"] img, .qs-card[aria-pressed="true"] .qs-art { outline: 3px solid var(--lamp); outline-offset: 2px; }
.qs-t { font-size: 12px; line-height: 1.35; display: -webkit-box; -webkit-line-clamp: 2; -webkit-box-orient: vertical; overflow: hidden; }
.qs-n { position: absolute; top: 4px; right: 4px; min-width: 20px; padding: 0 6px; border-radius: 999px; background: var(--lamp); color: #fff; font-size: 11px; font-weight: 700; line-height: 18px; text-align: center; }
@media (max-width: 560px) {
  .ql-q { grid-template-columns: 40px minmax(0, 1fr); column-gap: 12px; }
  .ql-q > .ql-cov { width: 40px; height: 40px; }
  .ql-more { margin-left: 0; }
}
@media (prefers-reduced-motion: reduce) { .qs-card img, .qs-art { transition: none; } }

.ql-panel { background: var(--surface); border: 1px solid var(--line); border-radius: var(--r-card); overflow: hidden; }
.ql-sec { padding: 18px 22px; display: grid; gap: 10px; }
.ql-sec + .ql-sec { border-top: 1px solid var(--line); }
.ql-quotes { margin: 0; padding: 0; list-style: none; display: grid; gap: 8px; }
.ql-quotes li { position: relative; padding-left: 1.3em; font-size: var(--fs-md); line-height: 1.8; }
.ql-quotes li::before { content: "“"; position: absolute; left: 0; top: -.15em; font-family: var(--font-display); font-size: 1.5rem; line-height: 1; color: var(--lamp); }
.ql-vs { display: grid; gap: 12px; }
.ql-vs.two { grid-template-columns: minmax(0, 1fr) auto minmax(0, 1fr); gap: 0 16px; align-items: start; }
.ql-vs > div { min-width: 0; display: grid; gap: 2px; }
.ql-vs h3 { font-size: var(--fs-md); font-weight: 700; color: #8a5d17; }
.ql-vs p { font-size: var(--fs-md); line-height: 1.7; }
.ql-vs i { display: none; }
.ql-vs.two i { align-self: stretch; display: grid; place-items: center; position: relative; font-style: normal; font-size: var(--fs-xs); font-weight: 700; color: var(--muted); }
.ql-vs.two i::before { content: ""; position: absolute; top: 0; bottom: 0; left: 50%; border-left: 1px solid var(--line); }
.ql-vs.two i span { position: relative; background: var(--surface); padding: 4px 0; }
.ql-links { margin: 0; padding: 0; list-style: none; }
.ql-links a { display: grid; grid-template-columns: minmax(0, 1fr) auto; gap: 2px 14px; align-items: baseline; padding: 9px 0; border-top: 1px dashed var(--line); color: var(--ink); text-decoration: none; }
.ql-links li:first-child a { border-top: 0; padding-top: 0; }
.ql-links span { font-size: var(--fs-md); transition: color .2s ease; }
.ql-links small { font-size: var(--fs-xs); color: var(--muted); white-space: nowrap; }
.ql-links a:hover span { color: var(--accent); }
.ql-foot { padding: 12px 22px; background: var(--bg); border-top: 1px solid var(--line); display: flex; flex-wrap: wrap; gap: 8px 12px; justify-content: space-between; align-items: center; }
.ql-foot p { font-size: var(--fs-xs); color: var(--muted); }
.ql-acts { display: flex; flex-wrap: wrap; gap: 8px; }
.ql-btn { display: inline-flex; align-items: center; padding: 6px 14px; border-radius: 999px; border: 1px solid var(--line); background: var(--surface); color: var(--ink); font: inherit; font-size: var(--fs-sm); font-weight: 600; text-decoration: none; cursor: pointer; }
.ql-btn:hover { border-color: var(--accent); }
.ql-btn.main { background: var(--accent); border-color: var(--accent); color: #fff; }
.ql-btn.main:hover { background: #17444d; }
.ql-btn.copied { border-color: var(--lamp); color: var(--lamp); }
.ql-btn.main.copied { background: var(--lamp); border-color: var(--lamp); color: #fff; }
.ql-empty { padding: 28px 0; }
@media (max-width: 560px) {
  .ql { scroll-margin-top: 190px; }
  .ql-sec { padding: 16px; } .ql-foot { padding: 12px 16px; }
  .ql-vs.two { grid-template-columns: 1fr; gap: 12px; } .ql-vs.two i { display: none; }
  .ql-links a { grid-template-columns: 1fr; }
}

/* 홈: 둘러보기 */
.explore { display: grid; grid-template-columns: repeat(3, minmax(0, 1fr)); gap: 16px; }
.explore a {
  background: var(--surface); border: 1px solid var(--line); border-radius: var(--r-card); padding: 20px 22px;
  display: grid; gap: 6px; align-content: start; text-decoration: none; color: var(--ink); min-width: 0;
  transition: border-color .2s ease;
}
.explore a:hover { border-color: var(--accent); }
.explore h3 { font-size: var(--step-1); }
.explore h3::after { content: " →"; color: var(--accent); }
.explore p { color: var(--muted); font-size: var(--fs-md); }

/* 책속의 한줄 */
/* 책속의 한줄 (잡지형): 펼침면(카드·색 판 + 옆 문장)과 글자 문장 묶음이 번갈아 */
.qmag { padding-bottom: 40px; }
.qs { margin: 0; display: grid; grid-template-columns: minmax(0, 5fr) minmax(0, 7fr); gap: 56px; align-items: center;
  padding-block: 64px; border-top: 1px solid var(--line); scroll-margin-top: 120px; }
.qs.flip { grid-template-columns: minmax(0, 7fr) minmax(0, 5fr); }
.qs.flip > :first-child { order: 2; }
.qs img, .qpanel { width: 100%; max-width: 100%; height: auto; aspect-ratio: 1; object-fit: cover; display: block; border-radius: 4px;
  box-shadow: var(--sh-3); }
.qpanel { background: var(--c); color: var(--spine-fg); display: flex; align-items: center; padding: clamp(24px, 8%, 64px); }
.qpanel p { font-family: var(--font-display); font-weight: 800; font-size: clamp(1.35rem, 1rem + 1.6vw, 2.1rem); line-height: 1.55; }
.qpanel p::before { content: "“"; display: block; font-size: 3em; line-height: .6; height: .5em; opacity: .5; }
.qs figcaption { min-width: 0; }
.qs-no { font-family: var(--font-display); color: var(--lamp); letter-spacing: .06em; font-size: var(--fs-md); }
.qs blockquote { margin: 16px 0 0; max-width: 28em; font-family: var(--font-display); font-weight: 700;
  font-size: clamp(1.12rem, 1rem + .6vw, 1.4rem); line-height: 1.85; }
.qs h2 { margin-top: 18px; font-size: var(--step-0); font-weight: 700; }
.qs blockquote + h2::before { content: "— "; color: var(--muted); font-weight: 400; }
.qs-meta { margin-top: 4px; color: var(--muted); font-size: var(--fs-md); }
.qs-links { margin-top: 18px; display: flex; flex-wrap: wrap; align-items: center; gap: 10px 20px; }
.qs-links a { text-decoration: none; font-weight: 600; border-bottom: 1px solid currentColor; padding-bottom: 2px; }
.pqs { display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); gap: 40px 56px; padding-block: 8px 64px; }
.pq { margin: 0; min-width: 0; border-top: 2px solid var(--c); padding-top: 18px; scroll-margin-top: 120px; }
.pq > p:first-child { font-family: var(--font-display); font-weight: 700; font-size: var(--step-1); line-height: 1.85; }
.pq-src { margin-top: 12px; font-size: var(--fs-sm); color: var(--muted); }
.pq-src b { color: var(--ink); font-weight: 600; }
.pq-src a { color: inherit; }
@media (max-width: 720px) {
  .qs, .qs.flip { grid-template-columns: 1fr; gap: 22px; padding-block: 40px; }
  .qs.flip > :first-child { order: 0; }
  .qs img, .qpanel { max-width: 340px; }
  .pqs { grid-template-columns: 1fr; gap: 32px; padding-bottom: 40px; }
}
/* 책속의 한줄 '모든 문장': 작은 카드 격자, 누르면 크게(.book-dialog) */
.qg-sec { border-top: 1px solid var(--line); padding-top: 40px; }
.qg-h { margin: 0 0 16px; font-size: var(--fs-lg); }
.qg-filter { flex-wrap: nowrap; overflow-x: auto; scrollbar-width: none; padding-bottom: 2px; }
.qg-filter::-webkit-scrollbar { display: none; }
.qg-filter button { flex: none; }
.qg { list-style: none; margin: 0 0 56px; padding: 0; display: grid; grid-template-columns: repeat(4, minmax(0, 1fr)); gap: 24px 20px; }
.qg-c { min-width: 0; scroll-margin-top: 120px; }
.qg-open { all: unset; display: grid; gap: 8px; cursor: pointer; width: 100%; min-width: 0; }
.qg-open:focus-visible { outline: 2px solid var(--lamp); outline-offset: 4px; border-radius: 4px; }
.qg-open img, .qg-txt { display: block; width: 100%; max-width: 100%; height: auto; aspect-ratio: 1; object-fit: cover; border-radius: 4px; box-shadow: var(--sh-1); transition: transform .2s ease; }
.qg-open:hover img, .qg-open:hover .qg-txt { transform: translateY(-4px); }
.qg-txt { box-sizing: border-box; background: var(--c); color: var(--spine-fg); padding: 14%; display: flex; align-items: center; }
.qg-txt span { font-family: var(--font-display); font-weight: 700; font-size: clamp(.82rem, .7rem + .35vw, 1rem); line-height: 1.6; display: -webkit-box; -webkit-line-clamp: 6; -webkit-box-orient: vertical; overflow: hidden; }
.qg-name { font-size: var(--fs-sm); font-weight: 600; color: var(--ink); white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
.qg-dialog .bd-content { grid-template-columns: minmax(0, 1fr) minmax(0, 1fr); }
.qg-big { background: var(--c); color: var(--spine-fg); display: flex; align-items: center; padding: 40px 32px; min-height: 320px; }
.qg-big p { margin: 0; font-family: var(--font-display); font-weight: 800; font-size: clamp(1.1rem, 1rem + .8vw, 1.5rem); line-height: 1.6; }
/* 배경 사진(data/책속의 한줄 배경): 밝은 사진엔 짙은 글씨, 어두운 사진엔 밝은 글씨. 모임 색은 왼쪽 아래 짧은 선에만 */
.qg-txt[data-tone], .qg-big[data-tone] { position: relative; isolation: isolate; background: var(--c) var(--bgimg) center / cover no-repeat; }
.qg-txt[data-tone]::before, .qg-big[data-tone]::before { content: ""; position: absolute; inset: 0; z-index: -1; border-radius: inherit; }
.qg-txt[data-tone]::after, .qg-big[data-tone]::after { content: ""; position: absolute; left: 14%; bottom: 11%; width: 22px; height: 2px; background: var(--c); }
.qg-big[data-tone]::after { left: clamp(28px, 5vw, 48px); bottom: 30px; width: 34px; }
.qg-txt[data-tone="light"], .qg-big[data-tone="light"] { color: #2a2420; }
.qg-txt[data-tone="light"]::before, .qg-big[data-tone="light"]::before { background: rgb(248 243 233 / .38); }
.qg-txt[data-tone="dark"], .qg-big[data-tone="dark"] { color: #f2eadc; }
.qg-txt[data-tone="dark"]::before, .qg-big[data-tone="dark"]::before { background: rgb(14 11 8 / .38); }
.qg-txt[data-tone] span { font-weight: 400; }
.qg-txt[data-tone="dark"] span, .qg-big[data-tone="dark"] p { text-shadow: 0 1px 14px rgb(0 0 0 / .45); }
.qg-big[data-tone] { padding: 48px clamp(28px, 5vw, 48px) 64px; }
.qg-big[data-tone] p { font-weight: 400; line-height: 1.9; letter-spacing: -.005em; max-width: 24em; }
@media (max-width: 640px) { .qg-txt[data-tone]::after { display: none; } }  /* 휴대폰 작은 카드에선 선이 글 끝줄에 붙는다 */
.qg-quote { margin: 0 0 8px; font-family: var(--font-display); font-size: var(--fs-md); line-height: 1.8; white-space: pre-line; }
.qg-dialog h2 { margin: 0; font-size: var(--fs-md); }
.qg-meta { margin: 0; color: var(--muted); font-size: var(--fs-sm); }
.qg-links { margin: 12px 0 0; display: flex; flex-wrap: wrap; align-items: center; gap: 10px 20px; }
@media (max-width: 860px) { .qg { grid-template-columns: repeat(3, minmax(0, 1fr)); } }
@media (max-width: 640px) { .qg { grid-template-columns: repeat(2, minmax(0, 1fr)); gap: 20px 14px; } .qg-dialog .bd-content { grid-template-columns: 1fr; } .qg-big { min-height: 240px; } }
.quote-list { list-style: none; margin: 14px 0 0; padding: 0; display: grid; gap: 12px; }
.quote-list li { background: var(--surface); border: 1px solid var(--line); border-top: 4px solid var(--c, var(--accent)); border-radius: var(--r-card); padding: 18px 20px; }
.quote-list blockquote { margin: 0; font-family: var(--font-display); font-size: var(--step-1); font-weight: 700; line-height: 1.75; }
.quote-list .meta { margin-top: 8px; font-size: var(--fs-sm); color: var(--muted); }
.empty { padding: 40px 20px; text-align: center; color: var(--muted); border: 1px dashed var(--line); border-radius: var(--r-card); }
.more { margin-top: 16px; text-align: right; }

footer { margin-top: 80px; border-top: 1px solid var(--line); padding-block: 28px 40px; }
footer .wrap { display: flex; flex-wrap: wrap; justify-content: space-between; gap: 12px 24px; color: var(--muted); font-size: var(--fs-sm); }
footer nav { display: flex; gap: 18px; flex-wrap: wrap; }
.foot-brand { display: inline-flex; align-items: center; gap: 12px; }
.foot-brand img { display: block; height: 22px; width: auto; }

@media (max-width: 820px) {
  .hero, .month { grid-template-columns: 1fr; gap: 32px; }
  .hero { padding-block: 40px 56px; }
  .pbooks { grid-template-columns: repeat(2, minmax(0, 1fr)); }
  .join-band { padding: 32px; }
  .hero { grid-template-columns: 1fr; padding-top: 36px; gap: 32px; }
  .steps { grid-template-columns: repeat(2, minmax(0, 1fr)); }
  .join, .clubs { grid-template-columns: 1fr; }
  .eras { grid-template-columns: 1fr; }
  .stats { grid-template-columns: repeat(2, minmax(0, 1fr)); }
  .explore { grid-template-columns: repeat(2, minmax(0, 1fr)); }
  .next-card { grid-template-columns: 1fr; align-items: start; }
  .next-arrow { top: calc(32px + (100vw - 40px) / 2); }
  .next-body { padding: 22px 20px 24px; }
  .era + .era { border-left: 0; border-top: 1px solid var(--line); }
  .era-rest { border-left: 0; border-top: 1px solid var(--line); padding: 10px 22px; place-items: start; }
  .era-rest p { writing-mode: horizontal-tb; }
  .era-rest + .era { border-left: 0; border-top: 1px solid var(--line); }
}
@media (max-width: 560px) {
  .wrap { padding-inline: 16px; }
  .wrap { padding-inline: 16px; }
  .top .wrap { flex-wrap: wrap; row-gap: 4px; padding-block: 10px 8px; }
  .top .logo { margin-right: auto; }
  .top-cta { order: 2; padding: 11px 18px; min-height: 44px; }
  .nav a { padding-block: 8px; }
  .numbers li { padding: 0 6px; }
  .numbers span { font-size: var(--fs-xs); }
  .top .nav { order: 3; }
  .home-head { flex-wrap: wrap; }
  .nav { width: 100%; margin-left: 0; gap: 16px; }
  .explore { grid-template-columns: 1fr; }
  .months { grid-template-columns: 1fr; }
  .page { padding-top: 32px; }
  .log li { grid-template-columns: 5.2em 1fr; row-gap: 2px; }
  .log .book { grid-column: 2; }
  .log .fmt { grid-column: 2; }
  .log .series { grid-column: 2; grid-row: 1; }
  .log time { grid-row: 1 / span 3; align-self: start; padding-top: 2px; }
  .steps { grid-template-columns: 1fr; }
  .spine { width: 36px; font-size: var(--fs-sm); }
}
@media (prefers-reduced-motion: reduce) { .spine { transition: none; } }

/* 지난 모임: [달력][목록] 탭 (build_site.py calendar_html) */
.viewtabs { display: flex; gap: 4px; border-bottom: 1px solid var(--line); margin-bottom: 8px; }
.viewtabs button { appearance: none; border: 0; background: none; font: inherit; font-weight: 600; color: var(--muted);
  padding: 10px 16px 12px; cursor: pointer; border-bottom: 2px solid transparent; margin-bottom: -1px; }
.viewtabs button[aria-selected="true"] { color: var(--ink); border-bottom-color: var(--accent); }
.viewtabs button:hover { color: var(--ink); }
#view-list .log { margin-top: 16px; }
/* 달 고르기: ‹ 2026 5월 6월 … › */
.mnav { display: flex; align-items: center; gap: 8px; margin-top: 22px; }
.mchips { display: flex; align-items: center; gap: 4px; overflow-x: auto; scrollbar-width: none; flex: 0 1 auto; min-width: 0; padding-block: 2px; }
.mchips::-webkit-scrollbar { display: none; }
.mnav-year { font-size: var(--fs-xs); color: var(--muted); font-variant-numeric: tabular-nums; margin: 0 6px 0 10px; }
.mnav-year:first-child { margin-left: 0; }
.mchip { appearance: none; border: 0; background: none; font: inherit; font-size: var(--fs-md); color: var(--muted); padding: 6px 12px; border-radius: 999px; cursor: pointer; white-space: nowrap; }
.mchip:hover { color: var(--ink); background: var(--accent-soft); }
.mchip[aria-pressed="true"] { background: var(--accent); color: #fff; font-weight: 700; }
.mstep { appearance: none; flex: none; width: 36px; height: 36px; border-radius: 50%; border: 1px solid var(--line); background: var(--surface);
  font-size: var(--fs-lg); line-height: 1; color: var(--ink); cursor: pointer; }
.mstep:disabled { opacity: .35; cursor: default; }
/* 한 달 */
.cal-month { padding-block: 28px 8px; }
.cal-head { display: flex; align-items: baseline; justify-content: space-between; gap: 12px; flex-wrap: wrap; }
.cal-head h2 { font-family: var(--font-display); font-weight: 700; font-size: 1.25rem; color: var(--muted); }
.cal-head h2 strong { font-weight: 800; font-size: 2rem; color: var(--ink); margin-left: 4px; }
.cal-head p { color: var(--muted); font-size: var(--fs-md); }
.sum-soon { display: inline-flex; align-items: center; gap: 6px; color: var(--ink); font-weight: 600; }
.sum-soon i { width: 8px; height: 8px; border-radius: 1px; background: var(--ink); transform: rotate(45deg); }
.cal-poster-link { appearance: none; border: 0; background: none; padding: 0; font: inherit; color: var(--accent); font-weight: 600; cursor: pointer; }
.cal-poster-link:hover { text-decoration: underline; }
.cal { margin-top: 20px; display: grid; grid-template-columns: repeat(7, minmax(0, 1fr)); background: var(--surface); border: 1px solid var(--line); border-radius: var(--r-sm); overflow: hidden; }
.wd { padding: 8px 10px; font-size: var(--fs-xs); font-weight: 600; color: var(--muted); border-bottom: 1px solid var(--line); }
.wd.sun, .day b.sun { color: #b0493f; }
.wd.sat, .day b.sat { color: #3c5d8a; }
.day { min-height: 84px; padding: 6px 6px 8px; border-right: 1px solid var(--line); border-bottom: 1px solid var(--line); display: flex; flex-direction: column; gap: 4px; min-width: 0; }
.day:nth-child(7n) { border-right: 0; }
.day.out { background: color-mix(in srgb, var(--bg) 60%, transparent); }
.day b { font-size: var(--fs-xs); font-weight: 600; color: var(--ink); font-variant-numeric: tabular-nums; }
.day.today b { background: var(--accent); color: #fff; border-radius: 999px; padding: 0 7px; align-self: flex-start; }
/* 달력 칸의 모임: 끝난 모임 ●+옅은 바탕, 남은 모임 ◆+굵은 모임 색 글자, 연기는 줄 긋기 */
.ev { appearance: none; border: 0; font-family: inherit; text-align: left; cursor: pointer; width: 100%;
  display: flex; gap: 5px; align-items: flex-start; color: var(--ink); font-size: .76rem; line-height: 1.35;
  padding: 4px 6px; border-radius: 4px; background: color-mix(in srgb, var(--c) 13%, transparent); }
.ev i { flex: none; width: 7px; height: 7px; margin-top: 4px; border-radius: 50%; background: var(--c); }
.ev span { display: -webkit-box; -webkit-line-clamp: 2; -webkit-box-orient: vertical; overflow: hidden; font-weight: 600; }
.ev.soon { background: transparent; padding-inline: 0; }
.ev.soon span { font-weight: 800; color: var(--c); font-size: var(--fs-sm); }
.ev.soon i { width: 8px; height: 8px; border-radius: 1px; transform: rotate(45deg); }
.ev.moved { background: transparent; color: var(--muted); }
.ev.moved span { text-decoration: line-through; font-weight: 400; }
.ev.moved i { opacity: .4; }
.ev:hover span { text-decoration: underline; }
/* 휴대폰에서 달력 아래 그달 모임 */
.cal-list { display: none; list-style: none; margin: 14px 0 0; padding: 0; }
.cal-list li { border-bottom: 1px solid var(--line); }
.cal-list button { appearance: none; border: 0; background: none; font: inherit; color: var(--ink); text-align: left; cursor: pointer; width: 100%;
  display: grid; grid-template-columns: 4.4em 5.6em minmax(0, 1fr); gap: 8px; align-items: baseline; padding: 10px 0; font-size: var(--fs-md); }
.cal-list time { color: var(--muted); font-variant-numeric: tabular-nums; }
.cal-list .s { display: inline-flex; align-items: center; gap: 6px; color: var(--muted); font-size: var(--fs-sm); }
.cal-list .s i { width: 7px; height: 7px; border-radius: 50%; background: var(--c); }
.cal-list b { font-weight: 600; }
.cal-list .soon .s i { border-radius: 1px; transform: rotate(45deg); }
.cal-list .soon b { color: var(--c); font-weight: 800; }
.cal-list .moved b { text-decoration: line-through; color: var(--muted); font-weight: 400; }
@media (max-width: 760px) {
  .day { min-height: 46px; padding: 4px; align-items: center; }
  .wd { text-align: center; padding: 6px 0; }
  .ev { padding: 0; background: none; justify-content: center; }
  .ev span { display: none; }
  .ev i { width: 8px; height: 8px; margin: 0; }
  .ev.soon i { width: 9px; height: 9px; }
  .cal-list { display: block; }
}
/* 모임 정보 창, 포스터 창 */
.ev-view { border: 0; padding: 0; border-radius: var(--r-sm); width: min(92vw, 640px); background: var(--surface); color: var(--ink); box-shadow: 0 30px 60px -20px rgb(0 0 0 / .4); }
.ev-view::backdrop { background: rgb(20 22 24 / .55); }
.ev-card { display: grid; grid-template-columns: minmax(0, 200px) minmax(0, 1fr); gap: 24px; padding: 24px; }
.ev-card img, .ev-noimg { width: 100%; aspect-ratio: 1; object-fit: cover; border-radius: var(--r-sm); display: block; }
.ev-noimg { background: var(--c); opacity: .85; }
.ev-text { min-width: 0; display: flex; flex-direction: column; gap: 6px; }
.ev-when { font-size: var(--fs-sm); color: var(--muted); padding-right: 30px; }
.ev-series { display: inline-flex; align-items: center; gap: 5px; }
.ev-series i { width: 7px; height: 7px; border-radius: 50%; background: var(--c); }
.ev-text h2 { font-family: var(--font-display); font-weight: 800; font-size: var(--fs-lg); line-height: 1.4; margin-top: 4px; }
.ev-author { color: var(--muted); font-size: var(--fs-md); }
.ev-line { font-family: var(--font-display); font-weight: 700; line-height: 1.7; margin-top: 6px; }
.ev-state { font-size: var(--fs-sm); color: var(--muted); margin-top: 6px; }
.ev-state.soon { color: var(--c); font-weight: 700; }
.ev-actions { margin-top: auto; padding-top: 14px; }
.ev-view form, .poster-view form { position: absolute; top: 8px; right: 8px; margin: 0; }
.ev-view form button, .poster-view form button { appearance: none; border: 0; border-radius: 999px; width: 34px; height: 34px; font-size: var(--step-1); line-height: 1;
  background: var(--bg); color: var(--ink); cursor: pointer; }
.poster-view { border: 0; padding: 0; background: transparent; max-width: min(92vw, 720px); }
.poster-view::backdrop { background: rgb(20 22 24 / .78); }
.poster-view img { display: block; width: 100%; height: auto; max-height: 86vh; object-fit: contain; border-radius: var(--r-sm); }
@media (max-width: 560px) { .ev-card { grid-template-columns: 1fr; } .ev-card img, .ev-noimg { max-width: 200px; } }

/* 머리 아래 작은 탭 줄: 묶음(서재·기록) 안의 페이지들 */
.subnav { border-top: 1px solid var(--line); background: rgb(250 248 244 / .9); }
.subnav .wrap { display: flex; flex-wrap: nowrap; gap: 6px; padding-block: 8px; overflow-x: auto; scrollbar-width: none; }  /* 휴대폰의 .top .wrap 줄바꿈을 받지 않고 옆으로 밀기 */
.subnav a { flex: none; padding: 4px 14px; border-radius: 999px; border: 1px solid var(--line); background: var(--surface);
  font-size: var(--fs-sm); color: var(--muted); text-decoration: none; white-space: nowrap; }
.subnav a:hover { border-color: var(--accent); color: var(--ink); }
.subnav a[aria-current="page"] { background: var(--accent); border-color: var(--accent); color: #fff; font-weight: 700; }
.nav { gap: 24px; }
.nav a[aria-current="page"] { font-weight: 700; }
@media (max-width: 560px) { .nav { gap: 22px; } }

/* 모임 소개: 모임마다(지금 여섯). 모임 하나 = 상자 하나, 왼쪽 칸(설명·최근 책) | 오른쪽 칸(포스터 위·다음 책 아래), 두 칸 위 끝 맞춤 */
.cl-jump { display: flex; flex-wrap: wrap; gap: 8px; margin: -8px 0 28px; }
.cl-jump a { display: inline-flex; align-items: center; gap: 8px; padding: 6px 14px; border: 1px solid var(--line); border-radius: 999px;
  background: var(--surface); color: var(--ink); text-decoration: none; font-size: var(--fs-md); font-weight: 600; }
.cl-jump a::before { content: ""; width: 9px; height: 9px; border-radius: 50%; background: var(--c); }
.cl-jump a:hover { border-color: var(--c); }
.cls { display: grid; gap: 24px; }
.cl { display: grid; grid-template-columns: minmax(0, 1fr) minmax(0, 1fr); background: var(--surface); border: 1px solid var(--line);
  border-top: 4px solid var(--c); border-radius: var(--r-card); overflow: hidden; scroll-margin-top: 110px; }
.cl-info { display: grid; gap: 12px; align-content: start; padding: 30px 32px; min-width: 0; }
.cl-name { display: flex; align-items: baseline; gap: 14px; flex-wrap: wrap; }
.cl-name h2 { font-family: var(--font-display); font-weight: 800; font-size: 1.9rem; color: var(--c); }
.cl-name span { font-size: var(--fs-md); font-weight: 600; color: var(--muted); }
.cl-say { font-family: var(--font-display); font-weight: 700; font-size: var(--step-1); line-height: 1.6; }
.cl-facts { display: grid; grid-template-columns: 6.5em minmax(0, 1fr); gap: 4px 12px; margin: 0; font-size: var(--fs-md); }
.cl-facts dt { color: var(--muted); font-weight: 600; }
.cl-facts dd { margin: 0; }
.cl-facts b { font-variant-numeric: tabular-nums; }
.cl-recent { display: grid; gap: 4px; margin-top: 6px; padding-top: 16px; border-top: 1px dashed var(--line); }
.cl-recent span { font-size: var(--fs-xs); font-weight: 700; color: var(--muted); letter-spacing: .03em; }
.cl-recent p { font-family: var(--font-display); font-weight: 700; font-size: var(--fs-md); color: #3d4247; line-height: 1.8; }
.cl-all { margin-top: 4px; font-size: var(--fs-md); font-weight: 700; text-decoration: none; justify-self: start; }
.cl-all:hover { text-decoration: underline; }
.cl-now { display: grid; gap: 16px; align-content: start; padding: 30px 32px; border-left: 1px solid var(--line);
  background: color-mix(in srgb, var(--c) 5%, #fff); min-width: 0; }
.cl-now > img, .cl-art { width: 200px; height: 200px; object-fit: cover; border-radius: var(--r-sm); box-shadow: var(--sh-1); display: block; }
.cl-now > img { object-position: 50% 0; } /* 세로 그림은 제목이 있는 위쪽을 남긴다 */
.cl-art { background: var(--c); color: var(--spine-fg); display: grid; align-content: center; padding: 16px; font-size: var(--fs-md); }
.cl-now-body { display: grid; gap: 4px; align-content: start; min-width: 0; }
.cl-now-tag { font-size: var(--fs-xs); font-weight: 700; color: var(--c); letter-spacing: .03em; }
.cl-now h3 { font-size: var(--step-0); }
.cl-now-when { font-size: var(--fs-sm); color: var(--muted); }
.cl-now-line { font-size: var(--fs-sm); }
.cl-now-links { display: flex; flex-wrap: wrap; gap: 4px 14px; margin-top: 6px; }
.cl-now-links a { font-size: var(--fs-sm); font-weight: 700; text-decoration: none; }
.cl-now-links a.go { color: var(--ink); }
.cl-now-links a:hover { text-decoration: underline; }
.cl-now-empty { display: block; color: var(--muted); font-size: var(--fs-md); }
/* 한책읽기: 모임 소개 연표 · 읽는 방법, 책 창 '한책읽기 ○기' 칸 */
.hc-how { list-style: none; margin: 0; padding: 0; display: grid; gap: 10px; counter-reset: hc; }
.hc-how li { display: grid; gap: 2px; padding-left: 30px; position: relative; font-size: var(--fs-sm); color: var(--muted); counter-increment: hc; }
.hc-how li::before { content: counter(hc); position: absolute; left: 0; top: 1px; width: 21px; height: 21px; border-radius: 50%; background: var(--c); color: var(--spine-fg); font-size: var(--fs-xs); font-weight: 700; display: grid; place-items: center; }
.hc-how b { color: var(--ink); font-size: var(--fs-md); }
.cl-now.hc-years { grid-template-columns: minmax(0, 1fr); gap: 12px; }  /* 휴대폰의 '포스터 | 글' 두 칸 규칙을 받지 않게 */
.hc-year { display: grid; grid-template-columns: 3.4em minmax(0, 1fr); gap: 8px; align-items: start; }
.hc-year > b { font-family: var(--font-display); color: var(--muted); padding-top: 5px; font-variant-numeric: tabular-nums; }
.hc-year ol { list-style: none; margin: 0; padding: 0; display: grid; gap: 4px; }
.hc-year li { display: grid; grid-template-columns: 2.6em minmax(0, 1fr) auto; gap: 8px; align-items: baseline; padding: 5px 10px; border-radius: var(--r-sm); background: var(--surface); font-size: var(--fs-md); }
.hc-no { font-family: var(--font-display); font-weight: 800; color: var(--c); font-variant-numeric: tabular-nums; }
.hc-year a { color: var(--ink); text-decoration: none; font-weight: 600; min-width: 0; }
.hc-year a:hover { color: var(--c); text-decoration: underline; }
.hc-when { font-size: var(--fs-xs); color: var(--muted); font-variant-numeric: tabular-nums; white-space: nowrap; }
.hc-next { margin-top: 4px; padding: 12px 14px; border: 1px dashed var(--c); border-radius: var(--r-sm); font-size: var(--fs-sm); }
.hc-next b { color: var(--c); }
.hc-box { margin-top: 12px; padding: 14px 16px; border: 1px solid var(--line); border-left: 4px solid var(--s-meet); border-radius: var(--r-sm); display: grid; gap: 10px; }
.hc-title { display: flex; flex-wrap: wrap; align-items: baseline; gap: 4px 10px; }
.hc-title b { font-family: var(--font-display); font-weight: 800; color: var(--s-meet); }
.hc-title span { font-size: var(--fs-xs); color: var(--muted); }
.hc-facts { display: grid; grid-template-columns: repeat(auto-fit, minmax(7.5em, 1fr)); gap: 8px; margin: 0; }
.hc-facts div { display: grid; gap: 1px; }
.hc-facts dt { font-size: var(--fs-xs); color: var(--muted); }
.hc-facts dd { margin: 0; font-weight: 700; font-size: var(--fs-sm); font-variant-numeric: tabular-nums; }
.hc-plan summary { cursor: pointer; font-size: var(--fs-sm); font-weight: 700; color: var(--accent); }
.hc-plan ol { list-style: none; margin: 8px 0 0; padding: 0; display: grid; font-size: var(--fs-xs); max-height: 320px; overflow-y: auto; }
.hc-plan li { display: grid; grid-template-columns: 4.2em 4.6em minmax(0, 1fr); gap: 6px; padding: 4px 0; border-bottom: 1px solid var(--line); font-variant-numeric: tabular-nums; }
.hc-plan li span:not(:last-child) { color: var(--muted); }
.hc-plan li.hc-zoom, .hc-plan li.hc-zoom span { color: var(--s-meet); font-weight: 700; }
@media (max-width: 560px) { .hc-year { grid-template-columns: minmax(0, 1fr); gap: 4px; } .hc-year li { grid-template-columns: 2.6em minmax(0, 1fr); } .hc-when { grid-column: 2; } }
@media (max-width: 820px) {
  .cl { grid-template-columns: minmax(0, 1fr); }
  .cl-now { border-left: 0; border-top: 1px solid var(--line); grid-template-columns: 130px minmax(0, 1fr); gap: 0 18px; }
  .cl-now > img, .cl-art { width: 130px; height: 130px; }
  .cl-now-empty { grid-template-columns: none; }
}
@media (max-width: 480px) {
  .cl-info, .cl-now { padding: 20px 18px; }
  .cl-now { grid-template-columns: 100px minmax(0, 1fr); gap: 0 14px; }
  .cl-now > img, .cl-art { width: 100px; height: 100px; }
  .cl-name h2 { font-size: var(--step-2); }
}

/* 모임 소개: 한 번의 모임은 이렇게 */
.cl-how { padding-bottom: 56px; }
.cl-how .sec-head h2 { font-size: var(--step-2); }
.cl-rules { display: grid; grid-template-columns: repeat(auto-fit, minmax(200px, 1fr)); margin: 28px 0 0; border-top: 1px solid var(--line); border-bottom: 1px solid var(--line); }
.cl-rules div { padding: 16px 4px; display: grid; gap: 2px; }
.cl-rules dt { font-size: var(--fs-xs); color: var(--muted); font-weight: 600; }
.cl-rules dd { margin: 0; font-weight: 700; }
/* 모임 소개 맨 아래 모토 포스터(data/모임 소개/의 포스터, 바탕 투명) */
.cl-poster { margin: 56px auto 8px; display: flex; justify-content: center; }
.cl-poster img { display: block; width: min(340px, 72vw); height: auto; }
.cl-band { background: var(--accent); color: #fff; padding-block: 0; }  /* 공통 section 위 여백(72px)을 빼야 띠 안 글자가 가운데 */
.cl-band .wrap { padding-block: 36px; display: flex; flex-wrap: wrap; align-items: center; justify-content: space-between; gap: 16px; }
.cl-band p { font-family: var(--font-display); font-weight: 800; font-size: var(--fs-lg); }
.cl-band .btn { background: #fff; color: var(--accent); }

/* 머리 종 알림: 누르면 알림 목록이 펼쳐지고, 줄을 눌러야 그 페이지로 간다(notices.js) */
.top .wrap { position: relative; }
.bell { position: relative; flex: none; margin-inline: -10px; }
.bell-btn { position: relative; display: grid; place-items: center; width: 40px; height: 40px; border: 0; border-radius: 50%;
  background: transparent; color: var(--ink); cursor: pointer; }
.bell-btn:hover, .bell-btn[aria-expanded="true"] { background: var(--accent-soft); color: var(--accent); }
.bell-btn:focus-visible { outline: 2px solid var(--accent); outline-offset: 2px; }
.bell-dot { position: absolute; top: 8px; right: 9px; width: 9px; height: 9px; border-radius: 50%; background: var(--alert); box-shadow: 0 0 0 2px var(--surface); }
.bell-panel { position: absolute; right: 0; top: calc(100% + 8px); width: min(340px, calc(100vw - 32px)); z-index: 20; padding-block: 8px;
  background: var(--surface); border: 1px solid var(--line); border-radius: var(--r-card); box-shadow: var(--sh-2); }
.bell-h { padding: 6px 18px 8px; font-size: var(--fs-sm); font-weight: 700; border-bottom: 1px solid var(--line); }
.bn { list-style: none; margin: 0; padding: 0; display: grid; }
.bn li + li { border-top: 1px solid var(--line); }
.bn a { position: relative; display: grid; gap: 1px; padding: 12px 40px 12px 18px; color: var(--ink); text-decoration: none; }
.bn a:hover { background: var(--accent-soft); }
.bn-kind { font-size: var(--fs-xs); font-weight: 700; color: var(--accent); }
.bn b { font-size: var(--fs-md); font-weight: 600; line-height: 1.45; }
.bn-sub { font-size: var(--fs-xs); color: var(--muted); }
.bn-new { position: absolute; top: 13px; right: 36px; font-style: normal; font-size: var(--fs-xs); font-weight: 700; color: var(--alert); }
.bn em { position: absolute; right: 16px; top: 50%; translate: 0 -50%; font-style: normal; color: var(--muted); font-size: var(--step-1); }
.bn-empty { padding: 14px 18px; font-size: var(--fs-md); line-height: 1.6; }
.bn-empty small { color: var(--muted); font-size: var(--fs-xs); }
.bn-empty a { display: inline; position: static; padding: 0; color: var(--accent); }
.bn-empty a:hover { background: none; }
@media (max-width: 560px) {
  .bell { order: 1; position: static; }
  .bell-panel { left: 12px; right: 12px; width: auto; top: 56px; }
}

/* 과거의 오늘: 날짜 페이지(past-MMDD.html) */
.pt-head { display: grid; gap: 6px; padding-bottom: 28px; border-bottom: 1px solid var(--line); }
.pt-eyebrow { color: var(--accent); font-weight: 700; font-size: var(--fs-sm); letter-spacing: .06em; }
.pt-head h1 { margin: 0; font-family: var(--font-display); font-size: var(--step-2); line-height: 1.3; text-wrap: balance; }
.pt-sum { color: var(--muted); }
.pt-sum b { color: var(--ink); }
.pt-tools { display: flex; flex-wrap: wrap; gap: 12px 20px; align-items: center; justify-content: space-between; margin-top: 10px; }
.pt-days { display: flex; flex-wrap: wrap; gap: 4px 18px; font-size: var(--fs-md); }
.pt-days a { color: var(--muted); text-decoration: none; }
.pt-days a:hover { color: var(--accent); }
.pt .pt-year { display: grid; grid-template-columns: 9rem minmax(0, 1fr); gap: 8px 28px; padding-block: 28px; border-bottom: 1px solid var(--line); }
.pt-year h2 { margin: 0; font-size: var(--fs-md); font-weight: 400; color: var(--muted); display: grid; align-content: start; }
.pt-year h2 b { font-size: var(--fs-lg); color: var(--accent); font-weight: 800; }
.pt-list { list-style: none; margin: 0; padding: 0; display: grid; gap: 22px; }
.pt-item { display: grid; gap: 3px; padding-left: 16px; border-left: 3px solid var(--c); }
.pt-meta { display: flex; flex-wrap: wrap; gap: 10px; align-items: baseline; font-size: var(--fs-sm); color: var(--muted); font-variant-numeric: tabular-nums; }
.pt-s { color: var(--c); font-weight: 700; }
.pt-item h3 { margin: 0; font-family: var(--font-display); font-size: var(--step-1); }
.pt-item h3 a { color: var(--ink); text-decoration: none; }
.pt-item h3 a:hover { color: var(--accent); }
.pt-a { font-size: var(--fs-md); color: var(--muted); }
.pt-qs { margin-top: 4px; display: flex; flex-wrap: wrap; gap: 6px; }
.pt-q { font-size: var(--fs-xs); padding: 2px 10px; border-radius: 999px; background: var(--accent-soft); color: var(--accent); text-decoration: none; }
.pt-links { margin-top: 4px; display: flex; flex-wrap: wrap; gap: 4px 16px; font-size: var(--fs-sm); }
.pt-links a { color: var(--accent); }
.pt-end { color: var(--muted); font-size: var(--fs-sm); padding-top: 20px; }
@media (max-width: 600px) {
  .pt .pt-year { grid-template-columns: minmax(0, 1fr); padding-block: 22px; }
  .pt-year h2 { display: flex; gap: 8px; align-items: baseline; }
}

/* 과거의 오늘: 메뉴 페이지(past.html) — 오늘 칸 + 열두 달 목록 */
.pi-today { margin-bottom: 24px; padding: 14px 20px; border-radius: var(--r-card); background: var(--accent-soft); font-size: var(--fs-md); }
.pi-today b { color: var(--accent); }
.pi-today a { color: var(--accent); font-weight: 700; }
.pi-months { display: grid; grid-template-columns: repeat(auto-fill, minmax(min(100%, 240px), 1fr)); gap: 28px 32px; }
.pi-month { padding-block: 0; }  /* 공통 section 위 여백(72px)을 뺀다 */
.pi-month h2 { font-size: var(--step-1); margin: 0 0 8px; padding-bottom: 6px; border-bottom: 1px solid var(--line); }
.pi-month ul { list-style: none; margin: 0; padding: 0; display: grid; gap: 2px; }
.pi-month a { display: grid; grid-template-columns: 2.6rem minmax(0, 1fr); gap: 8px; padding: 4px 8px; margin-inline: -8px; border-radius: var(--r-sm);
  color: var(--ink); text-decoration: none; font-size: var(--fs-md); }
.pi-month a:hover { background: var(--accent-soft); }
.pi-month time { color: var(--muted); font-variant-numeric: tabular-nums; }
.pi-month span { overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.pi-month li.is-today a { background: var(--accent); color: #fff; }
.pi-month li.is-today time { color: #fff; }
.pi-none { color: var(--muted); font-size: var(--fs-sm); }
/* 과거의 오늘: 제목 위 얇은 띠(data/과거의 오늘/의 '띠' 그림)와 책 이미지 */
.pt-band { display: block; width: 100%; height: 120px; object-fit: cover; object-position: 50% 45%; border-radius: var(--r-card); margin-bottom: 24px; background: var(--ink); }
.pt-text { display: grid; gap: 3px; min-width: 0; }
.pt-item.has-img { grid-template-columns: 132px minmax(0, 1fr); gap: 18px; align-items: start; }
.pt-img img { display: block; width: 132px; height: 132px; object-fit: cover; border-radius: var(--r-sm); box-shadow: var(--sh-1); }
@media (max-width: 600px) {
  .pt-band { height: 88px; }
  .pt-item.has-img { grid-template-columns: 96px minmax(0, 1fr); gap: 14px; }
  .pt-img img { width: 96px; height: 96px; }
}

/* 과거의 오늘: 그날의 행사(data/행사/) — 사진 + 글, 책 목록 위 */
.pt-body { display: grid; gap: 22px; min-width: 0; }
.ev-card { display: grid; gap: 4px; padding-left: 16px; border-left: 3px solid var(--accent); --c: var(--accent); }
.ev-card.has-img { grid-template-columns: minmax(0, 300px) minmax(0, 1fr); gap: 22px; align-items: start; }
.ev-photo { margin: 0; display: grid; gap: 6px; }
.ev-photo img { display: block; width: 100%; height: auto; aspect-ratio: 6 / 5; object-fit: cover; border-radius: var(--r-sm); box-shadow: var(--sh-1); }
.ev-more { display: flex; flex-wrap: wrap; gap: 6px; }
.ev-more img { width: 56px; height: 56px; aspect-ratio: auto; box-shadow: none; }
.ev-text { display: grid; gap: 4px; min-width: 0; align-content: start; }
.ev-day { font-size: var(--fs-xs); font-weight: 700; padding: 1px 9px; border-radius: 999px; background: var(--accent); color: #fff; }
.ev-card h3 { margin: 0; font-family: var(--font-display); font-size: var(--step-1); }
.ev-place, .ev-books { font-size: var(--fs-md); color: var(--muted); }
.ev-line { font-size: var(--fs-md); margin-top: 4px; }
.pi-month li.is-ev span { color: var(--accent); font-weight: 700; }
.pi-month li.is-ev.is-today span { color: #fff; }
@media (max-width: 600px) {
  .ev-card.has-img { grid-template-columns: minmax(0, 1fr); gap: 12px; }
}
/* 책미사 이야기: 함께한 행사 */
.story-ev { padding-block: 40px 0; }
.story-ev h2 { font-family: var(--font-display); font-size: var(--step-2); margin: 0 0 6px; }
.story-ev > p { color: var(--muted); margin: 0 0 22px; }
.sev-list { list-style: none; margin: 0; padding: 0; display: grid; grid-template-columns: repeat(auto-fill, minmax(min(100%, 240px), 1fr)); gap: 22px; }
.sev-list a, .sev-list li > div { display: grid; gap: 6px; color: var(--ink); text-decoration: none; }
.sev-img { aspect-ratio: 6 / 5; max-width: 100%; border-radius: var(--r-card); overflow: hidden; background: var(--accent-soft); display: grid; place-items: center; color: var(--muted); font-size: var(--fs-sm); }
.sev-img img { width: 100%; height: 100%; object-fit: cover; display: block; transition: transform .3s; }
.sev-list a:hover img { transform: scale(1.03); }
.sev-meta { display: flex; gap: 8px; font-size: var(--fs-sm); color: var(--muted); font-variant-numeric: tabular-nums; }
.sev-meta b { color: var(--accent); }
.sev-list h3 { margin: 0; font-family: var(--font-display); font-size: var(--step-1); }
.sev-place { font-size: var(--fs-sm); color: var(--muted); }
@media (prefers-reduced-motion: reduce) { .sev-img img { transition: none; } }

/* 책미사 이야기: 걸어온 길(해마다 한 줄) */
.story-tl { padding-block: 40px 0; }
.story-tl h2 { font-family: var(--font-display); font-size: var(--step-2); margin: 0 0 6px; }
.story-tl > p { color: var(--muted); margin: 0 0 22px; }
.tl { list-style: none; margin: 0; padding: 0; border-top: 1px solid var(--line); }
.tl-year { display: grid; grid-template-columns: 110px minmax(0, 1fr); gap: 24px; padding: 22px 0; border-bottom: 1px solid var(--line); }
.tl-y { margin: 0; font-family: var(--font-display); font-size: var(--step-2); font-weight: 800; line-height: 1.1; color: var(--muted); font-variant-numeric: tabular-nums; }
.tl-year.now .tl-y { color: var(--accent); }
.tl-body { display: grid; gap: 10px; align-content: start; }
.tl-title { margin: 0; font-family: var(--font-display); font-weight: 700; font-size: var(--step-1); color: var(--ink); }
.tl-shelf { margin: 0; display: flex; align-items: flex-end; flex-wrap: wrap; gap: 4px 10px; font-size: var(--fs-xs); color: var(--muted); }
.tl-spines { display: flex; flex-wrap: wrap; gap: 2px; align-items: flex-end; }
.tl-spines i { display: block; width: 5px; height: 22px; border-radius: 1px; background: var(--c); }
.tl-spines i:nth-child(3n) { height: 18px; }
.tl-spines i:nth-child(4n+1) { height: 20px; }
.tl-spines img { display: block; width: auto; max-width: none; }
.tl-spines.tall i { width: 7px; height: 64px; }
.tl-spines.tall i:nth-child(3n) { height: 58px; }
.tl-spines.tall i:nth-child(4n+1) { height: 61px; }
.tl-items { list-style: none; margin: 0; padding: 0; display: grid; gap: 6px; }
.tl-items li { display: grid; grid-template-columns: 44px minmax(0, 1fr); gap: 10px; font-size: var(--fs-md); line-height: 1.6; }
.tl-items time { color: var(--muted); font-size: var(--fs-sm); font-variant-numeric: tabular-nums; padding-top: 1px; }
.tl-items a { color: var(--ink); text-decoration-color: var(--line); text-underline-offset: 3px; }
.tl-items a:hover { color: var(--accent); }
@media (max-width: 600px) {
  .tl-year { grid-template-columns: minmax(0, 1fr); gap: 8px; padding: 18px 0; }
  .tl-y { font-size: var(--step-1); }
}

/* 행사 페이지(event-날짜.html): 이름·날짜·장소·한줄 + 사진(큰 사진 + 작은 사진 줄) + 함께 읽은 책·후기 */
.evp-crumb { font-size: var(--fs-sm); color: var(--muted); display: flex; flex-wrap: wrap; gap: 6px; margin-bottom: 18px; }
.evp-crumb a { color: var(--muted); text-decoration: none; }
.evp-crumb a:hover { color: var(--accent); }
.evp-head { display: grid; gap: 8px; padding-bottom: 26px; border-bottom: 1px solid var(--line); }
.evp-head h1 { margin: 0; font-family: var(--font-display); font-size: var(--step-3); line-height: 1.15; text-wrap: balance; }
.evp-kind { justify-self: start; font-size: var(--fs-sm); font-weight: 700; color: #fff; background: var(--accent); padding: 2px 12px; border-radius: 999px; }
.evp-meta { color: var(--muted); font-variant-numeric: tabular-nums; display: flex; flex-wrap: wrap; gap: 4px 14px; }
.evp-line { font-family: var(--font-display); font-size: var(--step-1); line-height: 1.6; max-width: 40em; margin-top: 6px; padding-left: 14px; border-left: 3px solid var(--lamp); }
.evp-body { display: grid; grid-template-columns: minmax(0, 1.5fr) minmax(0, 1fr); gap: 36px; padding-block: 30px; align-items: start; }
.evp-body.no-photo { grid-template-columns: minmax(0, 1fr); }
.evp-gal { display: grid; gap: 10px; min-width: 0; }
.evp-main { position: relative; margin: 0; border-radius: var(--r-card); overflow: hidden; background: var(--ink); }
.evp-main img { display: block; width: 100%; aspect-ratio: 4 / 3; max-height: 72vh; object-fit: contain; }
.evp-main { touch-action: pan-y; }
.evp-arrow { position: absolute; padding: 0; top: 50%; translate: 0 -50%; width: 44px; height: 44px; border-radius: 50%; border: 0; cursor: pointer;
  display: grid; place-items: center; font-size: 1.5rem; line-height: 1; color: var(--ink); background: rgb(255 255 255 / .85); box-shadow: 0 2px 10px rgb(27 31 34 / .15); }
.evp-arrow:hover { background: #fff; }
.evp-arrow.prev { left: 10px; } .evp-arrow.next { right: 10px; }
.evp-arrow:focus-visible { outline: 3px solid var(--accent); outline-offset: 2px; }
.evp-count { position: absolute; right: 12px; bottom: 12px; font-size: var(--fs-xs); color: #fff; background: rgb(0 0 0 / .55); padding: 2px 10px; border-radius: 999px; font-variant-numeric: tabular-nums; }
.evp-thumbs { display: flex; gap: 8px; overflow-x: auto; padding-bottom: 4px; }
.evp-thumbs button { flex: none; width: 72px; height: 72px; padding: 0; border: 2px solid transparent; border-radius: var(--r-sm); overflow: hidden; background: var(--accent-soft); cursor: pointer; }
.evp-thumbs button[aria-current="true"] { border-color: var(--accent); }
.evp-thumbs img { width: 100%; height: 100%; object-fit: cover; display: block; }
.evp-side { display: grid; gap: 20px; min-width: 0; }
.evp-info { display: grid; margin: 0; }
.evp-info div { display: grid; grid-template-columns: 6.5rem minmax(0, 1fr); gap: 12px; padding-block: 12px; border-bottom: 1px solid var(--line); }
.evp-info dt { color: var(--muted); font-size: var(--fs-md); }
.evp-info dd { margin: 0; }
.evp-info a { color: var(--accent); }
.evp-acts { display: flex; flex-wrap: wrap; gap: 10px; }
.evp-note { font-size: var(--fs-sm); color: var(--muted); }
.evp-nav { display: flex; flex-wrap: wrap; justify-content: space-between; gap: 10px 20px; padding-top: 22px; border-top: 1px solid var(--line); font-size: var(--fs-md); }
.evp-nav a { color: var(--muted); text-decoration: none; }
.evp-nav a:hover { color: var(--accent); }
.evp-nav b { color: var(--ink); font-weight: 700; }
.ev-go { font-weight: 700; }
@media (max-width: 760px) { .evp-body { grid-template-columns: minmax(0, 1fr); gap: 22px; } .evp-head h1 { font-size: 2.1rem; } }

/* 완독 길잡이(data/완독길잡이/책이름.txt → 책 페이지 아래): 이름 읽는 법·인물표·줄거리 지도(눌러야 펼침)·질문·알고 읽으면 좋은 것 */
.gd { margin-top: 40px; padding: 32px; border-radius: var(--r-lg); background: var(--surface); box-shadow: var(--sh-1); display: grid; gap: 34px; --c: var(--s-lit); scroll-margin-top: 80px; }
.gd-sec, .gd-group { padding-block: 0; }
.gd-head { display: grid; gap: 6px; }
.gd-eyebrow { color: var(--c); font-weight: 700; font-size: var(--fs-sm); letter-spacing: .06em; }
.gd-head h2 { margin: 0; font-family: var(--font-display); font-size: var(--step-2); text-wrap: balance; }
.gd-head > p { color: var(--muted); }
.gd-toc { display: flex; flex-wrap: wrap; gap: 8px; margin-top: 8px; }
.gd-toc a { font-size: var(--fs-sm); padding: 4px 12px; border-radius: 999px; border: 1px solid var(--line); color: var(--ink); text-decoration: none; }
.gd-toc a:hover { border-color: var(--c); color: var(--c); }
.gd-sec { display: grid; gap: 14px; min-width: 0; scroll-margin-top: 80px; }
.gd-h { margin: 0; font-size: var(--step-1); font-family: var(--font-display); display: flex; flex-wrap: wrap; align-items: baseline; gap: 4px 10px; }
.gd-h small { font-family: var(--font-body); font-size: var(--fs-sm); color: var(--muted); font-weight: 400; }
.gd-anat { display: grid; grid-template-columns: repeat(auto-fit, minmax(0, 1fr)); gap: 6px; }
.gd-anat div { display: grid; gap: 4px; padding: 14px 10px; border-radius: var(--r-sm); background: color-mix(in srgb, var(--c) 8%, var(--bg)); text-align: center; border-top: 3px solid var(--c); }
.gd-anat b { font-family: var(--font-display); font-size: 1.1rem; word-break: keep-all; }
.gd-anat span { font-size: var(--fs-xs); color: var(--muted); }
.gd-rules { margin: 0; padding-left: 1.2em; display: grid; gap: 6px; font-size: var(--fs-md); }
.gd-people { display: grid; grid-template-columns: repeat(auto-fill, minmax(min(100%, 300px), 1fr)); gap: 18px 24px; }
.gd-group h4 { margin: 0 0 8px; font-size: var(--fs-sm); color: var(--c); letter-spacing: .04em; }
.gd-group ul { list-style: none; margin: 0; padding: 0; display: grid; gap: 10px; }
.gd-group li { display: grid; gap: 3px; padding: 10px 12px; border-radius: var(--r-sm); border: 1px solid var(--line); }
.gd-name { font-weight: 700; }
.gd-nick { display: flex; flex-wrap: wrap; gap: 4px; }
.gd-nick span { font-size: var(--fs-xs); padding: 1px 8px; border-radius: 999px; background: color-mix(in srgb, var(--c) 12%, transparent); color: var(--c); font-weight: 700; }
.gd-who { font-size: var(--fs-md); }
.gd-first { font-size: var(--fs-xs); color: var(--muted); }
.gd-parts { list-style: none; margin: 0; padding: 0; display: grid; gap: 6px; }
.gd-part details { border-radius: var(--r-sm); border: 1px solid var(--line); border-left: 4px solid var(--c); }
.gd-part.is-alt details { border-left-color: color-mix(in srgb, var(--c) 45%, var(--line)); }
.gd-part summary { display: flex; align-items: baseline; gap: 10px; padding: 10px 14px; cursor: pointer; list-style: none; }
.gd-part summary::-webkit-details-marker { display: none; }
.gd-part summary b { min-width: 4.6em; }
.gd-part summary span { font-size: var(--fs-xs); color: var(--muted); }
.gd-part summary i { margin-left: auto; font-style: normal; font-size: var(--fs-xs); color: var(--c); }
.gd-part details[open] summary i { font-size: 0; }
.gd-part details[open] summary i::after { content: "접기"; font-size: var(--fs-xs); }
.gd-part details p { padding: 0 14px 12px; font-size: var(--fs-md); }
.gd-vol { display: flex; flex-wrap: wrap; gap: 6px; font-size: var(--fs-xs); color: var(--muted); }
.gd-vol span { padding: 2px 10px; border-radius: 999px; border: 1px solid var(--line); }
.gd-ask { padding: 20px; border-radius: var(--r-card); background: color-mix(in srgb, var(--c) 7%, var(--bg)); }
.gd-ask > p { font-size: var(--fs-md); color: var(--muted); }
.gd-ask ol { margin: 0; padding-left: 1.3em; display: grid; gap: 8px; }
.gd-tips { list-style: none; margin: 0; padding: 0; display: grid; grid-template-columns: repeat(auto-fill, minmax(min(100%, 220px), 1fr)); gap: 12px; }
.gd-tips li { display: grid; gap: 4px; padding: 14px; border-radius: var(--r-sm); border: 1px solid var(--line); }
.gd-tips b { font-family: var(--font-display); font-size: var(--step-1); color: var(--c); }
.gd-tips p { font-size: var(--fs-md); }
@media (max-width: 600px) { .gd { padding: 22px 16px; } .gd-anat b { font-size: .84rem; } .gd-anat div { padding-inline: 4px; } }
.nb-low .nb { margin: 44px 0 0; }
.nb-title { display: flex; flex-wrap: wrap; align-items: center; justify-content: space-between; gap: 8px 16px; }
.nb-solo { margin-top: 0; }
.nb-cta { margin-bottom: 36px; display: flex; flex-wrap: wrap; align-items: center; justify-content: space-between; gap: 12px 20px; padding: 18px 22px; border-radius: var(--r-card); background: var(--accent-soft); }
.nb-cta p { margin: 0; display: grid; gap: 2px; }
.nb-cta b { font-size: 1rem; }
.nb-cta span { font-size: var(--fs-sm); color: var(--muted); }
/* 노벨 시즌: nobel.html의 한 줄 + 경제학상 칸(경제독서 색) */
.nb-season { margin: 0 0 14px; font-size: var(--fs-sm); color: var(--muted); }
.nb-season b { color: var(--ink); }
.nbe { --c: var(--s-eco); margin: 0 0 36px; padding: 28px; border-radius: var(--r-lg); background: var(--surface); box-shadow: var(--sh-1); border-top: 4px solid var(--c); display: grid; grid-template-columns: 180px minmax(0, 1fr); gap: 28px; align-items: start; }
.nbe-cover { width: 100%; border-radius: 6px; box-shadow: var(--sh-1); }
.nbe-body { display: grid; gap: 12px; min-width: 0; }
.nbe-body p { margin: 0; line-height: 1.7; }
.nbe-kicker { font-size: var(--fs-xs); letter-spacing: .08em; color: var(--c); font-weight: 700; }
.nbe h2 { margin: 0; font-family: var(--font-display); font-size: var(--fs-lg); }
.nbe-prize { display: grid; gap: 2px; padding: 12px 16px; border-radius: var(--r-sm); background: var(--accent-soft); }
.nbe-prize b { color: var(--c); font-size: var(--fs-sm); }
.nbe-prize small { color: var(--muted); font-size: var(--fs-sm); }
.nbe-q { font-size: var(--fs-sm); color: var(--muted); }
.nbe-q b { color: var(--ink); margin-right: 6px; }
.nbe .btns { display: flex; flex-wrap: wrap; gap: 8px 16px; align-items: center; }
@media (max-width: 640px) { .nbe { grid-template-columns: 1fr; padding: 20px 16px; } .nbe-cover { width: 140px; } }
.nb-more { margin: 0; text-align: right; }
.bp-nobel { margin: 0 0 16px; }
.bp-nobel a { display: inline-flex; flex-wrap: wrap; gap: 4px 10px; align-items: baseline; padding: 8px 14px; border-radius: 99px; background: var(--accent-soft); color: var(--ink); text-decoration: none; font-size: var(--fs-sm); }
.bp-nobel a b { color: var(--s-eco); }
.bp-nobel a span { color: var(--muted); }
.bp-nobel a:hover span { color: var(--accent); }
/* 책속의 한줄 이어진 이미지(카드뉴스): 옆으로 넘겨 보는 띠 */
.qstrip { position: relative; min-width: 0; }
.qstrip-track { display: flex; overflow-x: auto; scroll-snap-type: x mandatory; scrollbar-width: none; border-radius: 4px; }
.qstrip-track::-webkit-scrollbar { display: none; }
.qstrip-track img { flex: 0 0 100%; width: 100%; max-width: 100%; height: auto; aspect-ratio: 1; object-fit: cover; scroll-snap-align: start; display: block; }
.qs .qstrip { box-shadow: var(--sh-2, var(--sh-1)); border-radius: 4px; }
.qs .qstrip-track img { box-shadow: none; border-radius: 0; }
.qstrip-btn { position: absolute; top: 50%; translate: 0 -50%; width: 40px; height: 40px; display: grid; place-items: center; padding: 0 0 3px; border-radius: 50%; border: 0; cursor: pointer; background: rgb(255 255 255 / .85); color: #1b1f22; font-size: 1.6rem; line-height: 1; box-shadow: var(--sh-1); }
.qstrip-btn.prev { left: 10px; } .qstrip-btn.next { right: 10px; }
.qstrip-n { position: absolute; right: 10px; bottom: 10px; padding: 2px 10px; border-radius: 99px; background: rgb(0 0 0 / .55); color: #fff; font-size: var(--fs-xs); font-weight: 600; }
.qg-stack { position: relative; display: block; }
.qg-stack::before, .qg-stack::after { content: ""; position: absolute; inset: 0; border-radius: 4px; background: var(--surface); box-shadow: var(--sh-1); }
.qg-stack::before { translate: 8px -8px; opacity: .6; } .qg-stack::after { translate: 4px -4px; opacity: .85; }
.qg-stack img { position: relative; z-index: 1; }
.qg-count { position: absolute; z-index: 2; right: 8px; bottom: 8px; padding: 2px 10px; border-radius: 99px; background: rgb(0 0 0 / .6); color: #fff; font-size: var(--fs-xs); font-weight: 700; }
.qlink { all: unset; cursor: pointer; display: inline-flex; align-items: center; gap: 5px; color: var(--accent); }
/* 고리 아이콘: mask 대신 배경 그림(창 안에서 mask를 쓰면 일부 브라우저에서 화면이 비는 일이 있었음). 색은 --accent */
.qlink::before { content: ""; width: 1em; height: 1em; flex: none; background: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='%231f5560' stroke-width='2.2' stroke-linecap='round'%3E%3Cpath d='M10 14a4.5 4.5 0 0 0 6.4 0l3.2-3.2a4.5 4.5 0 0 0-6.4-6.4L11.5 6'/%3E%3Cpath d='M14 10a4.5 4.5 0 0 0-6.4 0l-3.2 3.2a4.5 4.5 0 0 0 6.4 6.4l1.7-1.6'/%3E%3C/svg%3E") center / contain no-repeat; }
.qlink:focus-visible { outline: 2px solid var(--lamp); outline-offset: 3px; border-radius: 2px; }
.qs-links .qlink { font-weight: 600; border-bottom: 1px solid currentColor; padding-bottom: 2px; }
.qg-links .qlink { font-size: var(--fs-md); font-weight: 700; }
.qg-links .qlink:hover { text-decoration: underline; }
.qg-links .bd-more { margin-top: 0; }
.pq-src .qlink { margin-left: 10px; font-weight: 600; }
/* 휴대폰: 창이 한 줄로 쌓여 버튼이 이미지 아래로 밀리니, 공유 버튼을 창 아래에 고정 */
.qg-share-bar { display: none; }
@media (max-width: 640px) {
  .qg-dialog .qg-links .bd-share { display: none; }
  .qg-share-bar { display: block; position: sticky; bottom: 0; margin: 0; padding: 12px 16px calc(12px + env(safe-area-inset-bottom, 0px)); background: var(--surface); border-top: 1px solid var(--line); }
  .qg-share-bar .btn { width: 100%; justify-content: center; }
}
/* 그날의 한 줄: 책속의 한줄 맨 위 '지난 모임의 한 줄' + 책 페이지 칸 */
.qday { margin: 8px 0 40px; padding: 28px; border-radius: var(--r-lg); background: var(--surface); box-shadow: var(--sh-1); border-top: 4px solid var(--c); display: grid; gap: 20px; }
.qday-head { display: flex; flex-wrap: wrap; align-items: baseline; gap: 4px 16px; }
.qday-kicker { width: 100%; font-size: var(--fs-xs); letter-spacing: .08em; color: var(--c); font-weight: 700; }
.qday-head h2 { margin: 0; font-size: var(--fs-lg); text-wrap: balance; }
.qday-head .bd-more { margin: 0 0 0 auto; }
.qday-list { list-style: none; margin: 0; padding: 0; display: grid; grid-template-columns: repeat(auto-fit, minmax(240px, 1fr)); gap: 20px 28px; }
.qday-list li { min-width: 0; }
.qday-list blockquote { margin: 0; height: 100%; display: grid; grid-template-rows: 1fr auto; align-content: start; gap: 12px; padding-top: 14px; border-top: 2px solid var(--c); }
.qday-list blockquote > p:first-child { margin: 0; font-family: var(--font-display); font-weight: 700; font-size: var(--step-1); line-height: 1.75; }
.qday-by { margin: 0;  display: flex; flex-wrap: wrap; align-items: center; justify-content: space-between; gap: 6px 12px; font-size: var(--fs-sm); color: var(--muted); }
.qday-all { justify-self: start; font-weight: 600; border-bottom: 1px solid currentColor; padding-bottom: 2px; }
.qday-all::before { display: none; }
.qg-who { font-size: var(--fs-xs); color: var(--c); font-weight: 700; margin-top: -4px; }
.qg-dialog .qg-who { margin: 0; font-size: var(--fs-sm); color: var(--muted); font-weight: 400; }
.qg-dialog .qg-who b { color: var(--ink); }
.bd-dayq { grid-column: 1 / -1; padding: 20px 28px 24px; border-top: 1px solid var(--line); display: grid; gap: 12px; min-width: 0; }
.bd-dayq ul { list-style: none; margin: 0; padding: 0; display: grid; gap: 14px; }
.bd-dayq li { padding-left: 12px; border-left: 3px solid var(--c, var(--accent)); display: grid; gap: 4px; }
.bd-dayq li p { margin: 0; font-family: var(--font-display); line-height: 1.7; max-width: 40em; }
.bd-dayq li span { font-size: var(--fs-sm); color: var(--muted); }
.bd-dayq .bd-more { justify-self: start; }
/* 책 창·책 페이지: 이 책의 다른 칸으로 가는 칩 한 줄(모임 후기 · 책 소개와 질문 · 완독 길잡이 · 내 달력에 담기) */
.bd-jumps { display: flex; flex-wrap: wrap; gap: 6px; margin-top: 12px; }
.bd-jumps a { display: inline-flex; align-items: center; padding: 5px 12px; border-radius: 999px; background: var(--accent-soft); color: var(--accent); font-size: var(--fs-sm); font-weight: 600; text-decoration: none; }
.bd-jumps a:hover { background: var(--accent); color: var(--surface); }
.bd-jumps a:focus-visible { outline: 2px solid var(--accent); outline-offset: 2px; }
/* 모임 후기(data/모임 후기/) */
.bd-review { grid-column: 1 / -1; padding: 20px 28px 24px; border-top: 1px solid var(--line); display: grid; gap: 14px; min-width: 0; scroll-margin-top: 80px; }
.rv-title { margin: 0; font-family: var(--font-display); font-weight: 800; font-size: var(--step-2); line-height: 1.35; text-wrap: balance; }
.rv-lead { margin: 0; line-height: 1.75; max-width: 40em; }
.rv-photo { margin: 0; display: grid; gap: 6px; }
.rv-photo img { display: block; width: 100%; max-width: 760px; height: auto; border-radius: var(--r-sm); }
.rv-photo figcaption { font-size: var(--fs-sm); color: var(--muted); }
.rv-points { list-style: none; margin: 0; padding: 0; display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); gap: 10px; counter-reset: rv; }
.rv-points li { counter-increment: rv; display: grid; gap: 2px; padding: 12px 14px 12px 44px; position: relative; background: var(--accent-soft); border-radius: var(--r-sm); min-width: 0; }
.rv-points li::before { content: counter(rv); position: absolute; left: 14px; top: 11px; font-family: var(--font-display); font-weight: 800; color: var(--c, var(--accent)); font-size: 1.15rem; }
.rv-points b { font-size: var(--fs-md); }
.rv-points span { font-size: var(--fs-sm); color: var(--muted); line-height: 1.55; }
.rv-full { border: 1px solid var(--line); border-radius: var(--r-sm); background: var(--surface); }
.rv-full summary { cursor: pointer; padding: 12px 16px; font-weight: 600; color: var(--accent); list-style: none; display: flex; justify-content: space-between; }
.rv-full summary::after { content: "펼치기 ▾"; font-weight: 400; font-size: var(--fs-sm); color: var(--muted); }
.rv-full[open] summary::after { content: "접기 ▴"; }
.rv-full summary::-webkit-details-marker { display: none; }
.rv-body { padding: 4px 20px 20px; max-width: 42em; }
.rv-body h4 { font-family: var(--font-display); font-size: var(--step-1); margin: 26px 0 8px; padding-left: 10px; border-left: 3px solid var(--c, var(--accent)); }
.rv-body p { margin: 0 0 12px; line-height: 1.85; }
.rv-list { margin: 0 0 12px; padding-left: 1.1em; display: grid; gap: 8px; line-height: 1.75; }
.rv-note { font-size: var(--fs-sm); color: var(--muted); }
.rv-links { margin: 0; display: flex; flex-wrap: wrap; gap: 10px 16px; align-items: center; }
.rv-insta { display: grid; grid-template-columns: 96px minmax(0, 1fr); gap: 16px; align-items: center; max-width: 460px; padding: 12px;
  border: 1px solid var(--line); border-radius: var(--r-sm); background: var(--surface); color: var(--ink); text-decoration: none; }
.rv-insta.no-img { grid-template-columns: minmax(0, 1fr); }
.rv-insta:hover, .rv-insta:focus-visible { border-color: var(--accent); }
.rv-insta img { display: block; width: 96px; height: 120px; object-fit: cover; border-radius: 6px; }
.rv-insta p { margin: 0; }
.rv-insta .t { font-weight: 700; font-size: var(--fs-md); }
.rv-insta .d { font-size: var(--fs-sm); color: var(--muted); line-height: 1.55; }
.rv-insta .go { margin-top: 6px; font-size: var(--fs-sm); font-weight: 700; color: var(--accent); }
/* 후기 PDF 칸: 인스타 칸과 같은 꼴, 위쪽에 모임 색 줄 하나 */
.rv-pdf { display: grid; grid-template-columns: 104px minmax(0, 1fr); gap: 18px; align-items: center; max-width: 520px; padding: 14px;
  border: 1px solid var(--line); border-top: 3px solid var(--c, var(--accent)); border-radius: var(--r-sm); background: var(--surface); color: var(--ink); text-decoration: none; scroll-margin-top: 190px; }
.rv-pdf.no-img { grid-template-columns: minmax(0, 1fr); }
.rv-pdf:hover, .rv-pdf:focus-visible { border-color: var(--accent); border-top-color: var(--c, var(--accent)); }
.rv-pdf img { display: block; width: 104px; height: auto; border-radius: 2px; box-shadow: var(--sh-1); }
.rv-pdf p { margin: 0; }
.rv-pdf .k { font-size: var(--fs-xs); color: var(--muted); letter-spacing: .04em; }
.rv-pdf .t { font-weight: 800; font-size: var(--step-1); margin-top: 2px; }
.rv-pdf .d { font-size: var(--fs-sm); color: var(--muted); line-height: 1.6; margin-top: 4px; }
.rv-pdf .go { margin-top: 10px; font-size: var(--fs-sm); font-weight: 700; color: var(--accent); }
.rv-pdf .go span { font-weight: 400; color: var(--muted); margin-left: 6px; }
@media (max-width: 640px) { .rv-pdf { grid-template-columns: 84px minmax(0, 1fr); gap: 14px; } .rv-pdf img { width: 84px; } }
@media (max-width: 640px) { .bd-review { padding: 18px 16px 20px; } .rv-points { grid-template-columns: minmax(0, 1fr); } .rv-body { padding: 4px 14px 16px; } }
@media (max-width: 640px) { .qday { padding: 20px 16px; } .qday-head .bd-more { margin-left: 0; } }

/* 머리: 나의 책미사 아이콘(종 옆) */
.my-link { flex: none; display: grid; place-items: center; width: 40px; height: 40px; margin-inline: 0 -4px; border-radius: 50%; color: var(--ink); }
.my-link:hover, .my-link[aria-current] { background: var(--accent-soft); color: var(--accent); }
.my-link:focus-visible { outline: 2px solid var(--accent); outline-offset: 2px; }
/* 회원 링크(my.html)로 한 번 들어온 휴대폰에만 입구가 보인다 */
html:not(.is-member) .my-link, html:not(.is-member) .my-add { display: none; }
.my-hello { display: grid; gap: 10px; padding: 16px; border: 1px solid var(--line); border-top: 3px solid var(--accent); border-radius: var(--r-card); background: var(--surface); }
.my-hello p { margin: 0; font-size: var(--fs-md); color: var(--muted); }
.my-hello b { display: block; color: var(--ink); font-size: var(--step-0); margin-bottom: 2px; }

/* 나의 책미사(my.html): 표지 달력 · 이달의 책장 · 이미지 만들기. 휴대폰 한 손 폭에 맞춘다 */
.my { max-width: 520px; display: grid; gap: 14px; }
.my-month { display: flex; align-items: center; justify-content: space-between; }
.my-addbig { width: 100%; min-height: 56px; margin: 6px 0 4px; border: 0; border-radius: 14px; background: var(--accent); color: #fff; font: inherit; font-size: 1.08rem; font-weight: 700; cursor: pointer; box-shadow: var(--sh-1); }
.my-addbig span { font-size: 1.3rem; margin-right: 4px; vertical-align: -1px; }
.my-when { display: flex; align-items: center; gap: 10px; margin: 0 0 14px; font-size: var(--fs-md); font-weight: 700; color: var(--ink); }
.my-when input { font: inherit; font-weight: 400; color: var(--ink); background: var(--surface); border: 1px solid var(--line); border-radius: 10px; padding: 8px 12px; min-height: 44px; flex: 1; max-width: 220px; }
.my-addhint { margin: 0 0 12px; font-size: var(--fs-sm); color: var(--muted); text-align: center; }
.my-month h2 { margin: 0; font-family: var(--font-display); font-size: var(--step-2); font-weight: 800; }
.my-month h2 span { color: var(--muted); font-size: var(--fs-md); margin-right: 6px; }
.my-nav { display: flex; gap: 6px; }
.my-nav button { width: 40px; height: 40px; border-radius: 50%; border: 1px solid var(--line); background: var(--surface); color: var(--ink); font-size: var(--fs-lg); cursor: pointer; }
.my-sum { margin: 0; display: flex; gap: 14px; font-size: var(--fs-sm); color: var(--muted); }
.my-sum b { color: var(--ink); font-size: var(--step-0); }
.my-cal { display: grid; grid-template-columns: repeat(7, minmax(0, 1fr)); gap: 4px; }
.my-dow { text-align: center; font-size: var(--fs-xs); color: var(--muted); }
.my-dow.sun { color: var(--s-lit); }
.my-day { position: relative; aspect-ratio: 3 / 4; max-width: 100%; border: 1px solid var(--line); border-radius: var(--r-sm); background: var(--surface); padding: 0; overflow: hidden; cursor: pointer; color: var(--ink); }
.my-day.blank { visibility: hidden; }
.my-n { position: absolute; top: 3px; left: 5px; z-index: 2; font-size: var(--fs-xs); color: var(--muted); font-variant-numeric: tabular-nums; }
.my-day.has .my-n { color: #fff; text-shadow: 0 0 3px rgb(0 0 0 / .7); }
.my-day.today { border-color: var(--lamp); box-shadow: inset 0 0 0 1px var(--lamp); }
.my-day.today .my-n { color: var(--lamp); font-weight: 700; }
.my-day.has.today .my-n { color: #fff; }
.my-day img, .my-day .my-spine { position: absolute; inset: 0; width: 100%; height: 100%; object-fit: cover; }
.my-spine { display: grid; place-items: center; padding: 14px 3px 3px; background: var(--c, var(--accent)); color: #fff; font-size: 9px; line-height: 1.25; text-align: center; font-weight: 700; word-break: keep-all; overflow: hidden; }
.my-plus { position: absolute; right: 3px; bottom: 3px; z-index: 2; background: rgb(0 0 0 / .65); color: #fff; font-size: 10px; border-radius: 999px; padding: 0 5px; }
.my-meet { position: absolute; left: 4px; right: 3px; bottom: 4px; z-index: 2; display: flex; gap: 3px; align-items: center; font-size: 9px; line-height: 1.2; color: var(--c); font-weight: 700; text-align: left; }
.my-meet::before { content: ""; width: 6px; height: 6px; border-radius: 50%; background: var(--c); flex: none; }
.my-day.has .my-meet { display: none; }
.my-shelf { display: grid; gap: 8px; margin: 0; padding: 0; }
.my-shelf h3 { margin: 0; font-size: var(--fs-md); }
.my-shelf ul { list-style: none; margin: 0; padding: 0 0 4px; display: flex; gap: 8px; overflow-x: auto; }
.my-shelf li { flex: none; width: 64px; display: grid; gap: 4px; font-size: var(--fs-xs); color: var(--muted); }
.my-shelf li span { overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.my-shelf li.my-empty { width: auto; flex: 1; white-space: normal; }
.my-cv { position: relative; display: block; aspect-ratio: 3 / 4; border-radius: 3px; overflow: hidden; box-shadow: var(--sh-1); }
.my-cv img, .my-cv .my-spine { position: absolute; inset: 0; width: 100%; height: 100%; object-fit: cover; }
.my-empty { font-size: var(--fs-sm); color: var(--muted); }
.my-make { width: 100%; justify-content: center; }
.my-hint { margin: -6px 0 0; text-align: center; font-size: var(--fs-xs); color: var(--muted); }
.my-more { border-top: 1px solid var(--line); padding-top: 12px; font-size: var(--fs-sm); }
.my-more summary { cursor: pointer; color: var(--muted); }
.my-more-body { display: grid; gap: 10px; margin-top: 10px; color: var(--muted); }
.my-more-body p { margin: 0; }
.my-more-body b { display: block; color: var(--ink); }
.my-backup { display: flex; flex-wrap: wrap; gap: 8px; margin: 0; }
.my-file { position: relative; overflow: hidden; cursor: pointer; }
.my-file input { position: absolute; inset: 0; opacity: 0; cursor: pointer; }
.my-msg { margin: 0; font-size: var(--fs-sm); color: var(--muted); }
.my-sheet { width: min(520px, 100%); max-height: 88vh; margin: auto auto 0; border: 0; border-radius: var(--r-lg) var(--r-lg) 0 0; padding: 18px 18px calc(18px + env(safe-area-inset-bottom, 0px)); background: var(--surface); color: var(--ink); }
.my-sheet::backdrop { background: rgb(0 0 0 / .45); }
.my-sheet { overflow-y: auto; overscroll-behavior: contain; }
html:has(.my-sheet[open]) { overflow: hidden; scrollbar-gutter: stable; }  /* 창이 열려 있으면 휠은 창에만: 뒤 페이지는 움직이지 않는다(11/1) */
@media (min-width: 641px) { .my-sheet { margin: auto; border-radius: var(--r-lg); } }  /* PC는 화면 가운데, 휴대폰은 아래에서 올라오는 창 */
#my-sheet-body, .my-shot { display: grid; gap: 12px; }
.my-sheet-head { display: flex; justify-content: space-between; align-items: center; margin-bottom: 4px; }
.my-sheet-head h3 { margin: 0; font-family: var(--font-display); font-size: var(--step-1); }
.my-x { border: 0; background: none; font-size: 24px; color: var(--muted); width: 40px; height: 40px; cursor: pointer; }
.my-card { border: 1px solid var(--line); border-top: 3px solid var(--c); border-radius: var(--r-sm); padding: 12px; display: grid; gap: 8px; justify-items: start; }
.my-card p { margin: 0; font-size: var(--fs-md); }
.my-card small { color: var(--c); font-weight: 700; font-size: var(--fs-xs); }
.my-label { margin: 4px 0 0; font-size: var(--fs-sm); font-weight: 700; }
.my-list, .my-res, .my-found { list-style: none; margin: 0; padding: 0; }
.my-list { display: grid; gap: 8px; }
.my-list li { display: grid; grid-template-columns: 40px minmax(0, 1fr) auto; gap: 10px; align-items: center; }
.my-list b { display: block; font-size: var(--fs-md); }
.my-list small, .my-res small { display: block; color: var(--muted); font-size: var(--fs-xs); }
.my-del { border: 0; background: none; color: var(--muted); font-size: var(--fs-sm); text-decoration: underline; cursor: pointer; }
.my-res { display: grid; gap: 2px; max-height: 34vh; overflow-y: auto; }
.my-res-done { color: var(--muted); font-size: var(--fs-sm); white-space: nowrap; }
.my-res button { width: 100%; display: grid; grid-template-columns: 34px minmax(0, 1fr) auto; gap: 10px; align-items: center; text-align: left; padding: 6px; border: 0; border-radius: var(--r-sm); background: none; color: var(--ink); font: inherit; font-size: var(--fs-md); cursor: pointer; }
.my-res button:hover { background: var(--accent-soft); }
.my-res button.on { background: var(--accent-soft); box-shadow: inset 0 0 0 2px var(--accent); }
.my-res .my-spine, .my-list .my-spine { font-size: 5px; padding: 2px; }
.my-tabs { display: grid; grid-template-columns: 1fr 1fr; border-bottom: 1px solid var(--line); }
.my-tabs button { min-height: 44px; margin-bottom: -1px; border: 0; border-bottom: 3px solid transparent; background: none; color: var(--muted); font: inherit; font-size: var(--fs-md); cursor: pointer; }
.my-tabs button[aria-selected="true"] { color: var(--ink); border-bottom-color: var(--accent); font-weight: 700; }
.my-panel { display: grid; gap: 12px; min-width: 0; }
.my-panel[hidden] { display: none; }
.my-own { justify-items: start; gap: 8px; }
.my-own-row { display: flex; flex-wrap: wrap; gap: 8px; align-items: center; width: 100%; }
.my-own-row .book-search { flex: 1 1 160px; min-width: 0; }
.my-found { display: flex; gap: 8px; overflow-x: auto; max-width: 100%; }
.my-found button { border: 2px solid transparent; border-radius: 4px; padding: 0; background: none; cursor: pointer; }
.my-found button.on { border-color: var(--accent); }
.my-found img { display: block; height: 84px; width: auto; border-radius: 2px; }
.my-shot img { width: 100%; border-radius: var(--r-sm); display: block; }
/* 홈 화면에서 앱처럼 열었을 때: 홈페이지 메뉴·띠를 숨기고 나의 책미사만 */
@media (display-mode: standalone) {
  body:has(#my) .nav, body:has(#my) .subnav, body:has(#my) .nextbar, body:has(#my) .top-cta, body:has(#my) .float-cta, body:has(#my) .bell, body:has(#my) .my-link { display: none !important; }
}

/* 처음 오신 분께(welcome.html): 톡방에서 링크로 여는 안내. 단계는 실제 순서라 번호를 붙인다 */
.wc { max-width: 720px; display: grid; gap: 28px; }
.wc-head { display: grid; gap: 12px; }
.wc-head h1 { font-family: var(--font-display); font-weight: 800; font-size: var(--step-2); line-height: 1.35; text-wrap: balance; }
.wc-lead { color: var(--muted); }
.wc-facts { list-style: none; padding: 0; margin: 0; display: flex; flex-wrap: wrap; gap: 8px; }
.wc-facts li { background: var(--accent-soft); color: var(--accent); border-radius: 999px; padding: 4px 12px; font-size: var(--fs-md); }
.wc-h2 { font-family: var(--font-display); font-size: var(--step-1); font-weight: 800; }
.wc-who { display: grid; gap: 12px; }
.wc-who ul { margin: 0; padding-left: 1.2em; display: grid; gap: 4px; }
.wc-who p { color: var(--muted); }
.wc-steps { list-style: none; padding: 0; margin: 0; display: grid; gap: 28px; }
.wc-steps > li { display: grid; grid-template-columns: 40px 1fr; gap: 14px; scroll-margin-top: 80px; }
.wc-steps > li > div { min-width: 0; display: grid; gap: 10px; }
.wc-n { width: 36px; height: 36px; border-radius: 50%; border: 1.5px solid var(--accent); color: var(--accent); display: grid; place-items: center; font-weight: 700; }
.wc-sub { color: var(--muted); font-size: var(--fs-md); }
.wc-nick { display: inline-flex; flex-wrap: wrap; gap: 6px; width: fit-content; max-width: 100%; background: var(--surface); border: 1px solid var(--line); border-radius: var(--r-sm); padding: 8px 12px; font-weight: 700; }
.wc-nick i { color: var(--muted); font-style: normal; font-weight: 400; }
.wc-meets { list-style: none; padding: 0; margin: 0; display: grid; gap: 10px; }
.wc-meets li { background: var(--surface); border: 1px solid var(--line); border-radius: var(--r-card); padding: 14px 16px; display: grid; grid-template-columns: 64px 1fr; gap: 14px; }
.wc-date { text-align: center; line-height: 1.25; font-variant-numeric: tabular-nums; }
.wc-date b { display: block; font-family: var(--font-display); font-size: var(--fs-lg); }
.wc-date span { font-size: var(--fs-xs); color: var(--muted); }
.wc-meets li > div { min-width: 0; display: grid; gap: 4px; }
.wc-chip { justify-self: start; font-size: var(--fs-xs); color: var(--spine-fg); background: var(--c); border-radius: 6px; padding: 1px 8px; font-weight: 700; }
.wc-book { font-weight: 700; color: var(--ink); text-decoration: none; }
.wc-book small { font-weight: 400; color: var(--muted); }
.wc-line { font-family: var(--font-display); color: var(--muted); font-size: var(--fs-md); }
.wc-note { font-size: var(--fs-sm); color: var(--lamp); }
.wc-more { display: grid; gap: 14px; border-top: 1px solid var(--line); padding-top: 28px; }
.wc-links { display: grid; grid-template-columns: repeat(auto-fit, minmax(150px, 1fr)); gap: 10px; }
.wc-links a { display: grid; gap: 2px; background: var(--surface); border: 1px solid var(--line); border-radius: 10px; padding: 12px 14px; color: var(--ink); text-decoration: none; }
.wc-links a span { font-size: var(--fs-sm); color: var(--muted); }
.wc-links a.wide { grid-column: 1 / -1; border-color: var(--accent); }  /* 질문의 서재: 모임 분위기를 미리 보는 곳이라 한 줄 전체 */
#wc-copied { font-size: var(--fs-md); color: var(--accent); }
/* 첫 화면 띠: 처음 온 기기에서만 한 번(스크립트가 보이게 한다) */
.newbar { display: flex; align-items: center; gap: 10px; background: var(--accent-soft); padding: 10px max(16px, calc((100% - 1120px) / 2 + 24px)); font-size: var(--fs-md); }
.newbar a { flex: 1; min-width: 0; color: var(--accent); text-decoration: none; }
.newbar button { border: 0; background: none; color: var(--muted); font-size: 1.1rem; cursor: pointer; padding: 2px 6px; }
.join-welcome { background: var(--surface); border: 1px solid var(--line); border-radius: 10px; padding: 10px 14px; font-size: var(--fs-md); margin-bottom: 20px; }
.wc-title { display: flex; align-items: flex-start; justify-content: space-between; gap: 10px 16px; }
.wc-title h1 { min-width: 0; }
.wc-share { flex: none; display: grid; justify-items: end; gap: 4px; margin: 0; }
.wc-share .btn { white-space: nowrap; }
#wc-copied { max-width: 12em; text-align: right; font-size: var(--fs-sm); }
.wc-say { background: var(--surface); border: 1px solid var(--line); border-radius: var(--r-sm); padding: 8px 12px; width: fit-content; max-width: 100%; }

/* 책 구하는 길: 다가오는 모임 카드 아래 칩(누르면 자세히) + 책 페이지의 '이 책 구하는 길'(찾아오는 길처럼). 값은 data/다음 모임/다음모임.csv '구하는 길' */
.getbook { position: relative; z-index: 1; margin-top: 4px; border-top: 1px dashed var(--line); padding-top: 10px; }
.getbook summary { list-style: none; cursor: pointer; display: grid; gap: 6px; }
.getbook summary::-webkit-details-marker { display: none; }
.getbook summary:focus-visible { outline: 2px solid var(--lamp); outline-offset: 3px; border-radius: 4px; }
.gb-label { display: flex; justify-content: space-between; font-size: var(--fs-xs); font-weight: 800; letter-spacing: .04em; color: var(--accent); }
.gb-label i { font-style: normal; font-weight: 600; color: var(--muted); }
.getbook:not([open]) .gb-label i::after { content: " ▾"; }
.getbook[open] .gb-label i::after { content: " ▴"; }
.gb-chips { display: flex; flex-wrap: wrap; gap: 5px; }
.gb-chip { font-size: var(--fs-xs); font-weight: 700; border-radius: 999px; padding: 2px 9px; background: var(--accent-soft); color: var(--accent); white-space: nowrap; }
.gb-chip.ok { background: #e7f1ea; color: #2f6b4f; }
.gb-chip.warn { background: #f6eedd; color: #9a6a1c; }
.gb-chip.off { background: none; border: 1px solid var(--line); color: var(--muted); font-weight: 600; }
.gb-more { margin-top: 10px; display: grid; gap: 8px; font-size: var(--fs-sm); }
.gb-row { display: grid; grid-template-columns: 4.2em minmax(0, 1fr); gap: 8px; }
.gb-row b { color: var(--muted); }
.gb-row a, .waybox a { color: var(--accent); font-weight: 700; }
.gb-tip { background: var(--bg); border-radius: var(--r-sm); padding: 8px 10px; font-size: var(--fs-sm); }
.waybox { margin-top: 28px; background: var(--surface); border: 1px solid var(--line); border-radius: var(--r-card); padding: 22px 24px; display: grid; gap: 14px; }
.waybox h3 { font-family: var(--font-display); font-size: var(--step-1); }
.way { display: grid; grid-template-columns: 2.2em minmax(0, 1fr) auto; gap: 12px; align-items: start; padding-top: 14px; border-top: 1px solid var(--line); }
.way .ic { font-size: 1.4rem; line-height: 1.2; }
.way .t { font-weight: 800; }
.way .d { color: var(--muted); font-size: var(--fs-md); }
.way > .gb-chip { align-self: center; }
@media (max-width: 600px) {
  .waybox { padding: 18px; }
  .way { grid-template-columns: 2em minmax(0, 1fr); }
  .way > .gb-chip { grid-column: 2; justify-self: start; }
}

/* 매일 독서 인증(cert.html): 사람마다 이번 달 점 줄 */
.ct-upd { font-size: var(--fs-sm); color: var(--muted); }
.ct-king { margin-top: 24px; display: flex; flex-wrap: wrap; align-items: baseline; gap: 4px 12px; padding: 16px 20px;
  background: var(--accent-soft); border-radius: var(--r-card); }
.ct-king span { font-size: var(--fs-sm); color: var(--accent); font-weight: 700; }
.ct-king b { font-size: var(--step-1); }
.ct-king b::before { content: "👑 "; }
.ct-king em { font-style: normal; color: var(--muted); font-size: var(--fs-sm); }
.ct-legend { display: flex; flex-wrap: wrap; gap: 6px 18px; margin: 24px 0 8px; font-size: var(--fs-sm); color: var(--muted); }
.ct-legend span { display: inline-flex; align-items: center; gap: 6px; }
.ct-d { display: inline-block; width: 10px; height: 10px; border-radius: 50%; background: var(--line); }
.ct-d.b { background: var(--accent); }
.ct-d.h { background: transparent; box-shadow: inset 0 0 0 2px var(--accent); }
.ct-list { list-style: none; margin: 0; padding: 0; }
.ct-list li { display: grid; grid-template-columns: 7rem minmax(0, 1fr) 4.5rem 6.5rem; gap: 6px 14px; align-items: center;
  padding: 12px 0; border-bottom: 1px solid var(--line); }
.ct-name { overflow-wrap: anywhere; }
.ct-dots { display: flex; flex-wrap: wrap; gap: 4px; }
.ct-n { font-variant-numeric: tabular-nums; color: var(--muted); font-size: var(--fs-md); text-align: right; }
.ct-n b { color: var(--ink); font-size: var(--step-1); }
.ct-state { font-size: var(--fs-sm); color: var(--accent); font-weight: 700; }
.ct-list li.is-host { color: var(--muted); }
.ct-list li.is-host .ct-state { color: var(--muted); font-weight: 400; }
/* 지난 주 기록: 위 안내 줄 + 아래 주 목록 */
.ct-old { margin: 0 0 12px; padding: 10px 14px; border-radius: var(--r-card); background: var(--line); font-size: var(--fs-sm); }
.ct-old a { margin-left: 8px; font-weight: 700; color: var(--accent); }
.ct-weeks-h { margin: 40px 0 8px; font-size: var(--step-1); }
.ct-weeks, .ct-weeks-none { list-style: none; margin: 0; padding: 0; }
.ct-weeks-none { margin-top: 32px; font-size: var(--fs-sm); color: var(--muted); }
.ct-weeks a { display: flex; flex-wrap: wrap; justify-content: space-between; gap: 2px 12px; padding: 12px 0;
  border-bottom: 1px solid var(--line); color: inherit; text-decoration: none; }
.ct-weeks a:hover b { color: var(--accent); }
.ct-weeks a[aria-current] b { color: var(--accent); }
.ct-weeks span { color: var(--muted); font-size: var(--fs-sm); }
@media (max-width: 600px) {
  .ct-list li { grid-template-columns: minmax(0, 1fr) auto; }
  .ct-dots { grid-column: 1 / -1; grid-row: 2; }
  .ct-n { grid-column: 2; grid-row: 1; }
  .ct-state { grid-column: 1 / -1; grid-row: 3; }
  .ct-state:empty { display: none; }
}
/* 톡방 공유가 막힌 앱 안 브라우저: 버튼 아래 펼쳐서 길게 눌러 복사 */
.share-box { flex-basis: 100%; width: 100%; display: grid; gap: 6px; margin-top: 8px; }
.share-box p { margin: 0; font-size: var(--fs-sm); color: var(--muted); }
.share-box textarea { width: 100%; font: inherit; font-size: var(--fs-sm); line-height: 1.6; padding: 10px 12px; border: 1px solid var(--line); border-radius: var(--r-sm); background: var(--surface); color: var(--ink); resize: vertical; }

/* 나의 독서 여정(journey.html) — 이름이 다른 페이지와 겹치지 않게 모두 j- */
.j-root { --gold: var(--lamp); --gold-soft: #f6ecd9; --empty: #efebe3; --s-etc: var(--s-meet); display: grid; gap: 40px; padding-block: 8px 48px; }
.j-root h1, .j-root h2 { font-family: var(--font-display); text-wrap: balance; margin: 0; }
.j-root h2 { font-size: 1.3rem; }
.j-root section { padding-block: 0; }
.j-sub { color: var(--muted); font-size: .88rem; margin: 4px 0 0; }
.j-note { background: var(--accent-soft); color: var(--ink); border-radius: 10px; padding: 12px 16px; font-size: .88rem; }
.j-note b { color: var(--accent); }
.j-who { display: flex; gap: 8px; flex-wrap: wrap; margin-top: 10px; }
.j-who button { font: inherit; font-size: .88rem; padding: 6px 14px; border-radius: 999px; border: 1px solid var(--line); background: var(--surface); color: var(--ink); cursor: pointer; }
.j-who button[aria-pressed="true"] { background: var(--accent); border-color: var(--accent); color: var(--bg); }
.j-root button:focus-visible, .j-root a:focus-visible { outline: 2px solid var(--accent); outline-offset: 2px; }

.j-hero { display: grid; gap: 22px; }
.j-crumb { font-size: .8rem; letter-spacing: .06em; color: var(--muted); }
.j-name { display: flex; align-items: baseline; gap: 14px; flex-wrap: wrap; }
.j-name h1 { font-size: clamp(2rem, 6vw, 2.8rem); font-weight: 800; }
.j-since { color: var(--muted); }
.j-stats { display: grid; grid-template-columns: repeat(4, minmax(0, 1fr)); gap: 1px; background: var(--line); border: 1px solid var(--line); border-radius: 14px; overflow: hidden; }
.j-stat { background: var(--surface); padding: 16px 18px; }
.j-stat b { display: block; font-family: var(--font-display); font-size: 1.9rem; line-height: 1.1; font-variant-numeric: tabular-nums; }
.j-stat span { font-size: .82rem; color: var(--muted); }
@media (max-width: 560px) { .j-stats { grid-template-columns: repeat(2, minmax(0, 1fr)); } }

.j-stamps { display: grid; grid-template-columns: repeat(4, minmax(0, 1fr)); gap: 12px; }
@media (max-width: 680px) { .j-stamps { grid-template-columns: repeat(2, minmax(0, 1fr)); } }
.j-stamp { border-radius: 14px; padding: 16px; display: grid; gap: 6px; min-height: 128px; align-content: start; background: var(--c); color: var(--spine-fg); }
.j-stamp.j-off { background: transparent; color: var(--muted); border: 2px dashed var(--line); }
.j-stamp .j-t { font-weight: 700; }
.j-stamp .j-n { font-family: var(--font-display); font-size: 2rem; line-height: 1; font-variant-numeric: tabular-nums; }
.j-stamp .j-f { font-size: .8rem; opacity: .85; }
.j-stamp.j-off .j-n { font-size: 1rem; font-family: var(--font-body); color: var(--ink); font-weight: 500; }
.j-badge { display: inline-flex; align-items: center; gap: 8px; padding: 6px 14px; border-radius: 999px; background: var(--gold-soft); color: var(--gold); font-weight: 700; font-size: .9rem; border: 1px solid var(--gold); }
.j-badge.j-next { background: var(--accent-soft); color: var(--accent); border-color: var(--accent); }
.j-etc { color: var(--muted); font-size: .86rem; }
.j-secHead { display: flex; justify-content: space-between; align-items: end; gap: 12px; flex-wrap: wrap; margin-bottom: 14px; }

.j-shelves { display: grid; gap: 18px; }
.j-year { display: grid; grid-template-columns: 64px minmax(0, 1fr); gap: 12px; align-items: end; }
.j-year .j-y { font-family: var(--font-display); font-weight: 800; font-size: 1.05rem; padding-bottom: 6px; }
.j-year .j-y small { display: block; font-family: var(--font-body); font-weight: 400; color: var(--muted); font-size: .75rem; }
.j-row { display: flex; flex-wrap: wrap; gap: 3px; align-items: flex-end; border-bottom: 4px solid var(--line); padding-bottom: 0; min-width: 0; }
.j-spine { width: 22px; border-radius: 3px 3px 0 0; background: var(--c); color: var(--spine-fg); writing-mode: vertical-rl; font-size: .68rem; line-height: 22px; overflow: hidden; white-space: nowrap; text-overflow: ellipsis; padding: 6px 0; cursor: pointer; border: 0; font-family: var(--font-body); }
.j-spine:hover, .j-spine[aria-pressed="true"] { transform: translateY(-6px); }
.j-spine-img { width: auto; height: 150px; align-self: flex-end; padding: 0; background: none; display: flex; writing-mode: horizontal-tb; gap: 1px; border-radius: 2px; }
.j-spine-img img { height: 100%; display: block; border-radius: 2px; }
.j-spine-img[aria-pressed="true"] img { outline: 2px solid var(--c); outline-offset: 1px; }
/* 연도별 책장 '표지' 보기: 앞표지가 선반에 서 있는 모양(연말 카드 B). 한 줄 높이 132px마다 선반 판 */
.j-view { display: inline-flex; border: 1px solid var(--line); border-radius: 999px; padding: 3px; background: var(--surface); }
.j-view button { font: inherit; font-size: .85rem; border: 0; background: none; color: var(--muted); padding: 8px 16px; min-height: 36px; border-radius: 999px; cursor: pointer; }
.j-view button[aria-pressed="true"] { background: var(--accent); color: #fff; font-weight: 700; }
.j-shelves.is-cover .j-row { gap: 0 12px; border-bottom: 0; padding: 0 8px;
  background: repeating-linear-gradient(to bottom, transparent 0 122px, var(--line) 122px 130px, transparent 130px 132px); }
.j-cover { height: 132px; padding: 0 0 10px; border: 0; background: none; cursor: pointer; display: flex; align-items: flex-end; }
.j-cover img { height: 110px; display: block; border-radius: 1px 3px 3px 1px; box-shadow: 0 4px 10px rgb(27 31 34 / .22); }
.j-cover-plain span { width: 76px; height: 110px; box-sizing: border-box; padding: 10px 8px; background: var(--c); color: var(--spine-fg); font-family: var(--font-display); font-weight: 700; font-size: .72rem; line-height: 1.35; text-align: left; border-radius: 1px 3px 3px 1px; box-shadow: 0 4px 10px rgb(27 31 34 / .22); overflow: hidden; display: -webkit-box; -webkit-line-clamp: 6; -webkit-box-orient: vertical; word-break: keep-all; }
.j-cover:hover img, .j-cover:hover span, .j-cover[aria-pressed="true"] img, .j-cover[aria-pressed="true"] span { transform: translateY(-5px); }
.j-cover[aria-pressed="true"] img, .j-cover[aria-pressed="true"] span { outline: 2px solid var(--c); outline-offset: 2px; }
@media (prefers-reduced-motion: no-preference) { .j-cover img, .j-cover span { transition: transform .15s; } }
/* 연도별 책장 '이미지 저장': 연도 아래 작은 단추 → 그림 창(샘플: 예스24 서재 만들기의 이미지 저장) */
/* 책장 위 큰 단추들(샘플: 예스24 서재 만들기) — 책표지로/책등으로 보기, 이미지 저장하기 */
.j-shelfbar { display: grid; gap: 12px; margin: 4px 0 22px; }
.j-viewBig { display: grid; grid-template-columns: 1fr 1fr; gap: 6px; padding: 6px; border-radius: 18px; background: var(--line); }
.j-viewBig button { font: inherit; font-size: 1rem; display: flex; flex-direction: column; align-items: center; gap: 6px; padding: 14px 8px; min-height: 76px; border: 0; border-radius: 13px; background: none; color: var(--muted); cursor: pointer; }
.j-viewBig button[aria-pressed="true"] { background: var(--surface); color: var(--ink); font-weight: 700; box-shadow: var(--sh-1); }
.j-shelfbar > .j-etc { margin: 0; text-align: center; }
.j-saveRow { display: grid; grid-template-columns: auto auto minmax(0, 1fr); gap: 10px; align-items: center; }
.j-saveRow select { font: inherit; color: var(--ink); background: var(--surface); border: 1px solid var(--line); border-radius: 10px; padding: 10px 12px; min-height: 56px; }
.j-saveBig { font: inherit; font-size: 1.08rem; font-weight: 700; display: flex; align-items: center; justify-content: center; gap: 10px; min-height: 56px; border: 0; border-radius: 14px; background: var(--accent); color: #fff; cursor: pointer; box-shadow: var(--sh-1); }
.j-saveBig:hover { filter: brightness(1.08); }
@media (max-width: 640px) { .j-saveRow { grid-template-columns: auto minmax(0, 1fr); } .j-saveBig { grid-column: 1 / -1; } }
.j-save { width: min(560px, calc(100vw - 32px)); max-height: calc(100vh - 32px); box-sizing: border-box; border: 0; border-radius: 20px; padding: 22px 22px 18px; background: var(--surface); color: var(--ink); box-shadow: var(--sh-2); }
.j-save[open] { display: flex; flex-direction: column; gap: 12px; }
.j-save::backdrop { background: rgb(27 31 34 / .55); }
.j-saveHead { display: flex; justify-content: space-between; align-items: center; }
.j-saveHead h2 { margin: 0; font-size: 1.3rem; }
.j-saveX { font-size: 1.8rem; line-height: 1; border: 0; background: none; color: var(--ink); cursor: pointer; width: 44px; height: 44px; }
.j-saveBox { border: 1px solid var(--line); border-radius: 12px; padding: 10px; background: #fff; display: flex; justify-content: center; align-items: center; min-height: 160px; overflow: auto; }
.j-saveBox img { max-width: 100%; max-height: 56vh; display: block; }
.j-full { position: fixed; inset: 0; z-index: 10; background: #111; display: flex; flex-direction: column; align-items: center; justify-content: center; gap: 12px; padding: 72px 12px 20px; box-sizing: border-box; cursor: pointer; }
.j-full[hidden] { display: none; }
.j-full img { max-width: 100%; max-height: calc(100% - 40px); object-fit: contain; display: block; }
.j-full p { margin: 0; color: #c9ced6; font-size: .85rem; text-align: center; }
.j-fullX { position: fixed; top: max(14px, env(safe-area-inset-top)); right: 14px; min-height: 48px; padding: 0 20px; border: 0; border-radius: 999px; background: #fff; color: #111; font: inherit; font-size: 1.05rem; font-weight: 700; cursor: pointer; box-shadow: 0 4px 14px rgb(0 0 0 / .4); }
.j-save .btn { width: 100%; justify-content: center; min-height: 48px; }
/* 연말 카드: 왼쪽 그림 미리보기, 오른쪽 고르기·저장(휴대폰은 위아래) */
.j-cardwrap { display: grid; grid-template-columns: minmax(0, 380px) minmax(0, 1fr); gap: 24px; align-items: start; }
.j-cardwrap canvas { width: 100%; height: auto; display: block; border-radius: 10px; box-shadow: var(--sh-1); }
.j-cardctl { display: flex; flex-direction: column; gap: 12px; align-items: flex-start; }
.j-cardyear { font-size: .9rem; color: var(--muted); display: flex; align-items: center; gap: 8px; }
.j-cardyear select { font: inherit; color: var(--ink); background: var(--surface); border: 1px solid var(--line); border-radius: 8px; padding: 8px 10px; min-height: 40px; }
@media (max-width: 640px) { .j-cardwrap { grid-template-columns: minmax(0, 1fr); } }
@media (prefers-reduced-motion: no-preference) { .j-spine { transition: transform .15s; } }
.j-legend { display: flex; gap: 14px; flex-wrap: wrap; font-size: .8rem; color: var(--muted); }
.j-legend i { display: inline-block; width: 10px; height: 10px; border-radius: 2px; background: var(--c); margin-right: 5px; vertical-align: -1px; }
.j-detail { margin-top: 18px; background: var(--surface); border: 1px solid var(--line); border-left: 5px solid var(--c, var(--accent)); border-radius: 12px; padding: 16px 18px; display: grid; gap: 6px; }
.j-detail h3 { margin: 0; font-family: var(--font-display); font-size: 1.15rem; }
.j-detail .j-meta { color: var(--muted); font-size: .85rem; }
.j-chips { display: flex; gap: 6px; flex-wrap: wrap; }
.j-chip { font-size: .78rem; padding: 2px 10px; border-radius: 999px; background: var(--accent-soft); color: var(--accent); }
.j-detail a { color: var(--accent); font-weight: 500; font-size: .88rem; }

.j-qmap { display: grid; gap: 10px; }
.j-qrow { display: grid; grid-template-columns: minmax(0, 200px) minmax(0, 1fr) 48px; gap: 12px; align-items: center; font-size: .9rem; }
.j-bar { height: 12px; border-radius: 6px; background: var(--empty); overflow: hidden; }
.j-bar i { display: block; height: 100%; background: var(--accent); border-radius: 6px; }
.j-qrow .j-c { text-align: right; font-variant-numeric: tabular-nums; color: var(--muted); }
@media (max-width: 560px) { .j-qrow { grid-template-columns: minmax(0, 1fr) 40px; } .j-qrow .j-bar { grid-column: 1 / -1; grid-row: 2; } }

.j-lines { display: grid; grid-template-columns: repeat(auto-fill, minmax(260px, 1fr)); gap: 14px; }
.j-line { background: var(--surface); border: 1px solid var(--line); border-radius: 12px; padding: 18px; display: grid; gap: 10px; align-content: space-between; }
.j-line p { margin: 0; font-family: var(--font-display); font-size: .98rem; line-height: 1.75; }
.j-line span { font-size: .8rem; color: var(--muted); }
.j-more { font: inherit; font-size: .88rem; color: var(--accent); background: none; border: 1px solid var(--accent); border-radius: 999px; padding: 6px 16px; cursor: pointer; justify-self: start; }

.j-events { display: flex; flex-wrap: wrap; gap: 8px; }
.j-ev { font-size: .85rem; padding: 6px 12px; border-radius: 8px; background: var(--surface); border: 1px solid var(--line); }
.j-ev b { color: var(--muted); font-weight: 400; margin-right: 6px; font-variant-numeric: tabular-nums; }
.j-empty { color: var(--muted); font-size: .9rem; border: 1px dashed var(--line); border-radius: 12px; padding: 16px; }
.j-back { display: flex; gap: 10px; align-items: center; flex-wrap: wrap; font-size: .88rem; padding: 10px 14px; border-radius: 10px; border: 1px solid var(--line); background: var(--surface); }
.j-back b { color: var(--accent); }
.j-tabs { display: flex; gap: 4px; border-bottom: 1px solid var(--line); overflow-x: auto; }
.j-tabs button { font: inherit; font-size: .95rem; padding: 10px 16px; border: 0; background: none; color: var(--muted); cursor: pointer; border-bottom: 3px solid transparent; white-space: nowrap; }
.j-tabs button[aria-selected="true"] { color: var(--ink); font-weight: 700; border-bottom-color: var(--accent); }
.j-panel { display: grid; gap: 40px; }
.j-today { display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); gap: 14px; }
@media (max-width: 680px) { .j-today { grid-template-columns: minmax(0, 1fr); } }
.j-card { background: var(--surface); border: 1px solid var(--line); border-radius: 14px; padding: 18px 20px; display: grid; gap: 8px; align-content: start; min-width: 0; }
.j-card .j-k { font-size: .78rem; letter-spacing: .06em; color: var(--accent); font-weight: 700; }
.j-card h3 { margin: 0; font-family: var(--font-display); font-size: 1.15rem; line-height: 1.45; text-wrap: balance; }
.j-card p { margin: 0; color: var(--muted); font-size: .88rem; }
.j-card .j-qq { color: var(--ink); font-family: var(--font-display); font-size: 1rem; line-height: 1.7; }
.j-card.j-wide { grid-column: 1 / -1; }
.j-dots { display: flex; gap: 6px; }
.j-dot { width: 34px; display: grid; gap: 4px; justify-items: center; font-size: .72rem; color: var(--muted); }
.j-dot i { width: 26px; height: 26px; border-radius: 50%; background: var(--empty); display: grid; place-items: center; font-style: normal; color: var(--spine-fg); font-size: .75rem; }
.j-dot i.j-on { background: var(--accent); }
.j-dot i.j-today { outline: 2px dashed var(--accent); outline-offset: 1px; }
.j-nexts { display: grid; gap: 8px; }
.j-nx { display: grid; grid-template-columns: 54px minmax(0, 1fr); gap: 10px; align-items: center; font-size: .9rem; }
.j-nx .j-dd { font-variant-numeric: tabular-nums; color: var(--muted); font-size: .82rem; }
.j-nx .j-tag { display: inline-block; font-size: .72rem; padding: 1px 8px; border-radius: 999px; background: var(--c); color: var(--spine-fg); margin-right: 6px; }
.j-nx .j-why { display: block; color: var(--gold); font-size: .8rem; font-weight: 500; }
.j-ladder { display: grid; grid-template-columns: repeat(auto-fill, minmax(150px, 1fr)); gap: 10px; }
.j-rung { border-radius: 12px; padding: 12px 14px; border: 1px solid var(--line); display: grid; gap: 6px; font-size: .85rem; background: var(--surface); }
.j-rung.j-got { border-color: var(--gold); background: var(--gold-soft); }
.j-rung b { font-size: .92rem; }
.j-rung.j-got b { color: var(--gold); }
.j-rung small { color: var(--muted); }
.j-prog { height: 6px; border-radius: 3px; background: var(--empty); overflow: hidden; }
.j-prog i { display: block; height: 100%; background: var(--accent); }
.j-lhead { display: grid; gap: 6px; }
.j-lhead h1 { font-size: clamp(1.8rem, 5vw, 2.4rem); font-weight: 800; }
.j-mebar { display: flex; gap: 10px; align-items: center; flex-wrap: wrap; font-size: .9rem; }
.j-mebar select, .j-ctrl input { font: inherit; font-size: .9rem; padding: 7px 12px; border-radius: 10px; border: 1px solid var(--line); background: var(--surface); color: var(--ink); }
.j-boards { display: grid; grid-template-columns: repeat(4, minmax(0, 1fr)); gap: 12px; }
@media (max-width: 760px) { .j-boards { grid-template-columns: repeat(2, minmax(0, 1fr)); } }
@media (max-width: 420px) { .j-boards { grid-template-columns: minmax(0, 1fr); } }
.j-board { background: var(--surface); border: 1px solid var(--line); border-radius: 14px; padding: 14px 16px; display: grid; gap: 8px; align-content: start; min-width: 0; }
.j-board .j-k { font-size: .78rem; font-weight: 700; color: var(--accent); letter-spacing: .04em; }
.j-board ol { margin: 0; padding: 0; list-style: none; display: grid; gap: 4px; font-size: .88rem; }
.j-board li { display: flex; justify-content: space-between; gap: 8px; }
.j-board li b { font-weight: 500; }
.j-board li span { color: var(--muted); font-variant-numeric: tabular-nums; white-space: nowrap; }
.j-board li:first-child b { color: var(--gold); font-weight: 700; }
.j-ctrl { display: flex; gap: 8px; flex-wrap: wrap; align-items: center; }
.j-ctrl input { flex: 1 1 200px; min-width: 0; }
.j-sorts { display: flex; gap: 6px; flex-wrap: wrap; }
.j-sorts button, .j-backbtn { font: inherit; font-size: .84rem; padding: 6px 12px; border-radius: 999px; border: 1px solid var(--line); background: var(--surface); color: var(--ink); cursor: pointer; }
.j-sorts button[aria-pressed="true"] { background: var(--accent); border-color: var(--accent); color: var(--bg); }
.j-grid { display: grid; grid-template-columns: repeat(auto-fill, minmax(220px, 1fr)); gap: 12px; }
.j-mcard { text-align: left; font: inherit; color: var(--ink); background: var(--surface); border: 1px solid var(--line); border-radius: 14px; padding: 16px; display: grid; gap: 10px; cursor: pointer; }
.j-mcard:hover { border-color: var(--accent); }
.j-mcard.j-mem { border-color: var(--gold); box-shadow: inset 0 0 0 1px var(--gold); }
.j-mcard .j-top { display: flex; justify-content: space-between; align-items: baseline; gap: 8px; }
.j-mcard .j-nm { font-family: var(--font-display); font-weight: 800; font-size: 1.15rem; }
.j-mtag { font-size: .7rem; padding: 2px 8px; border-radius: 999px; background: var(--gold-soft); color: var(--gold); font-weight: 700; white-space: nowrap; }
.j-mtag.j-me { background: var(--accent-soft); color: var(--accent); }
.j-mcard .j-ln { font-size: .84rem; color: var(--muted); }
.j-mcard .j-ln b { color: var(--ink); font-variant-numeric: tabular-nums; }
.j-st4 { display: flex; gap: 5px; }
.j-st4 i { flex: 1; height: 8px; border-radius: 4px; background: var(--c); }
.j-st4 i.j-off { background: var(--empty); }
.j-mcard .j-with { font-size: .8rem; color: var(--accent); }
.j-cmp { display: grid; gap: 10px; }
.j-crow { display: grid; grid-template-columns: 72px minmax(0, 1fr); gap: 10px; align-items: center; font-size: .85rem; }
.j-cbars { display: grid; gap: 3px; }
.j-cbar { display: grid; grid-template-columns: minmax(0, 1fr) 72px; gap: 8px; align-items: center; font-size: .76rem; color: var(--muted); }
.j-cbar span:first-child { height: 9px; border-radius: 5px; background: var(--empty); overflow: hidden; display: block; }
.j-cbar i { display: block; height: 100%; background: var(--c); border-radius: 5px; }
.j-cbar.j-mine i { background: var(--accent); }
.j-lock { border: 1px dashed var(--gold); background: var(--gold-soft); }
.j-lock .j-k { color: var(--gold); }
.j-scope { display: inline-flex; gap: 6px; align-items: center; font-size: .8rem; padding: 4px 12px; border-radius: 999px; border: 1px solid var(--line); background: var(--surface); color: var(--muted); }
.j-scope b { color: var(--ink); font-weight: 500; }
.j-scopes { display: grid; grid-template-columns: repeat(3, minmax(0, 1fr)); gap: 10px; }
@media (max-width: 620px) { .j-scopes { grid-template-columns: minmax(0, 1fr); } }
.j-sc { border: 1px solid var(--line); border-radius: 12px; padding: 12px 14px; background: var(--surface); display: grid; gap: 4px; font-size: .84rem; color: var(--muted); }
.j-sc b { color: var(--ink); font-size: .92rem; }
.j-sc button { justify-self: start; font: inherit; font-size: .8rem; color: var(--accent); background: none; border: 0; padding: 0; cursor: pointer; text-decoration: underline; }
.j-kind { font-size: .7rem; padding: 1px 8px; border-radius: 999px; background: var(--accent-soft); color: var(--accent); font-weight: 700; justify-self: start; }
.j-kind.j-src { background: var(--empty); color: var(--muted); }
.j-kind.j-edit { background: var(--gold-soft); color: var(--gold); }
.j-invite { font-size: .8rem; line-height: 1.5; color: var(--ink); }
.j-invite em { font-style: normal; color: var(--accent); font-weight: 500; }
footer { color: var(--muted); font-size: .82rem; border-top: 1px solid var(--line); padding-top: 16px; }

/* 책 페이지 '모임 전 한 장'(data/모임 전 한 장/) — 책 정보 바로 아래, 그림 + 질문 */
.bd-pre { grid-column: 1 / -1; padding: 20px 28px; border-top: 1px solid var(--line); display: grid; grid-template-columns: 150px minmax(0, 1fr); gap: 20px; align-items: start; }
.bd-pre img { width: 100%; aspect-ratio: 4 / 5; object-fit: cover; border-radius: 4px; box-shadow: 0 1px 2px rgb(27 31 34 / .12), 0 6px 16px rgb(27 31 34 / .12); }
.bd-pre-body { min-width: 0; display: grid; gap: 6px; align-content: start; justify-items: start; }
.bd-pre h3 { margin: 0; font-size: var(--fs-sm); letter-spacing: .08em; color: var(--accent); }
.bd-pre-q { margin: 0; font: 700 1.15rem/1.5 var(--font-display); }
.bd-pre-note { margin: 0; color: var(--muted); font-size: var(--fs-sm); }
@media (max-width: 680px) { .bd-pre { grid-template-columns: 110px minmax(0, 1fr); padding: 16px 20px; gap: 14px; } }

/* 후기 칸 '후기를 읽고 남겨 주신 글'(후기 txt의 '댓글:' 줄) — 이름 없이 */
.rv-replies { display: grid; gap: 10px; }
.rv-replies .qlabel { margin: 0; }
.rv-replies blockquote { margin: 0; padding: 14px 18px; background: var(--surface); border-radius: var(--r-card); border: 1px solid var(--line); display: grid; gap: 6px; max-width: 46em; }
.rv-replies blockquote p { margin: 0; line-height: 1.8; }
.rv-replies cite { font-style: normal; font-size: var(--fs-sm); color: var(--muted); }

/* 책미사 이야기 '책미사의 강': 석 달마다 모임 횟수를 모임별 물줄기로 쌓은 강(d3는 보일 때 불러옴) */
.story-rv { padding-block: 40px 0; display: grid; gap: 14px; scroll-margin-top: 130px; --s-off: #b9802a; --s-etc: #9aa0a4; }
.story-rv h2 { font-family: var(--font-display); font-size: var(--step-2); margin: 0 0 6px; }
.story-rv > div > p { color: var(--muted); margin: 0; max-width: 62ch; }
.rv-stats { display: flex; flex-wrap: wrap; gap: 10px 36px; margin: 0; padding: 0; list-style: none; }
.rv-stats li { display: grid; }
.rv-stats b { font-family: var(--font-display); font-weight: 800; font-size: 1.7rem; line-height: 1.2; color: var(--accent); font-variant-numeric: tabular-nums; }
.rv-stats span { font-size: 13px; color: var(--muted); }
.rv-box { background: var(--surface); border: 1px solid var(--line); border-radius: var(--r-card); padding: 16px 0 8px; position: relative; }
.rv-scroll { overflow-x: auto; }
#rv-svg { display: block; width: 100%; min-width: 720px; height: auto; }
.rv-legend { display: flex; flex-wrap: wrap; gap: 6px; padding: 10px 16px 6px; }
.rv-legend button { font: inherit; font-size: 13px; border: 1px solid var(--line); background: var(--surface); color: var(--ink); border-radius: 999px; padding: 3px 12px 3px 8px; cursor: pointer; display: inline-flex; align-items: center; gap: 6px; }
.rv-legend button i { width: 10px; height: 10px; border-radius: 50%; display: inline-block; }
.rv-legend button[aria-pressed="true"] { border-color: var(--ink); }
.rv-legend small { color: var(--muted); font-variant-numeric: tabular-nums; }
.rv-tip { position: absolute; pointer-events: none; background: var(--ink); color: var(--bg); font-size: 12px; line-height: 1.5; padding: 8px 10px; border-radius: 8px; max-width: 240px; opacity: 0; transition: opacity .15s; }
.rv-detail { background: var(--surface); border: 1px solid var(--line); border-radius: var(--r-card); padding: 18px; display: grid; gap: 10px; }
.rv-detail h3 { margin: 0; font-family: var(--font-display); font-weight: 800; font-size: 1.2rem; }
.rv-detail p { margin: 0; color: var(--muted); font-size: 14px; }
.rv-books { display: flex; flex-wrap: wrap; gap: 6px; margin: 0; padding: 0; list-style: none; }
.rv-books li { font-size: 13px; border-left: 4px solid var(--c); background: var(--bg); padding: 3px 9px; border-radius: 3px; word-break: keep-all; }
.rv-books small { color: var(--muted); margin-left: 6px; font-variant-numeric: tabular-nums; }
.rv-note { font-size: 12px; color: var(--muted); margin: 0; }
#rv-svg text { font-family: var(--font-body); }
#rv-svg .era rect { opacity: .55; }
#rv-svg .era text { font-size: 12px; font-weight: 700; fill: var(--ink); }
#rv-svg .era .sub { font-size: 11px; font-weight: 400; fill: var(--muted); }
#rv-svg .axis text { font-size: 12px; fill: var(--muted); font-variant-numeric: tabular-nums; }
#rv-svg .axis line { stroke: var(--line); }
#rv-svg .layer { transition: opacity .25s; }
#rv-svg .layer.dim { opacity: .12; }
#rv-svg .flow { animation: rv-reveal 1.8s cubic-bezier(.65,0,.35,1) both; }
@keyframes rv-reveal { from { clip-path: inset(0 100% 0 0); } to { clip-path: inset(0 0 0 0); } }
#rv-svg .cursor { stroke: var(--ink); stroke-width: 1; stroke-dasharray: 3 3; }
#rv-svg .qsel { fill: var(--ink); opacity: .06; }
#rv-svg .mark circle { fill: var(--ink); }
#rv-svg .mark text { font-size: 12px; fill: var(--ink); font-weight: 600; }
@media (prefers-reduced-motion: reduce) { #rv-svg .flow { animation: none; } .rv-tip, #rv-svg .layer { transition: none; } }

/* 생각의 지도 이미지 저장(휴대폰): 그림을 띄워 길게 눌러 저장 */
.qg-shot { position: fixed; inset: 0; z-index: 1000; background: rgba(10,12,14,.9); display: grid; place-items: center; padding: 16px; }
.qg-shot-in { display: grid; gap: 10px; justify-items: center; max-width: 100%; }
.qg-shot img { max-width: min(100%, 540px); max-height: 74vh; width: auto; height: auto; border-radius: 6px; box-shadow: 0 8px 30px rgba(0,0,0,.5); -webkit-touch-callout: default; user-select: auto; }
.qg-shot-msg { margin: 0; min-height: 1.4em; color: #dcdcd6; font-size: var(--fs-sm); text-align: center; }
.qg-shot-bt { display: flex; gap: 8px; }
/* 생각의 지도 '책미사 YYYY 별자리 진단서' 내려받기 칸(목록 맨 위·그래프 아래) */
.qdx { margin: 0 0 24px; }
.qgraph .qdx { margin: 18px 0 0; }
.qdx .qdx-name { display: block; margin-top: 2px; font: 700 var(--fs-md)/1.45 var(--font-display); color: var(--accent); }
@media (max-width: 600px) { .qbundle.qdx { grid-template-columns: 84px minmax(0, 1fr); gap: 14px; padding: 14px; } .qdx .qb-cov { display: block; } }
.qdx .qb-acts .btn { white-space: nowrap; }

/* 생각의 지도 '빈 하늘'(2026-11-06): 밤하늘은 일부러 어두운 한 가지 색 — 사이트 테마와 상관없이 같은 하늘 */
.sky { --sk-deep:#060914; --sk-night:#0b1020; --sk-ink:#e9e4d6; --sk-mute:#8f96ab; --sk-gold:#f2c46d; --sk-ember:#ff8a5b; --sk-line:#273049;
  background: var(--sk-deep); color: var(--sk-ink); border-radius: 16px; padding: 22px clamp(14px, 3vw, 24px); margin: 0 0 28px; display: grid; gap: 14px; }
.sky-eye { margin: 0; font-size: 12px; letter-spacing: .14em; color: var(--sk-mute); }
.sky h2 { font: 800 clamp(21px, 4.4vw, 30px)/1.3 var(--font-display); color: var(--sk-ink); margin: 4px 0 6px; }
.sky h2 em { font-style: normal; color: var(--sk-gold); }
.sky-head p:last-child { margin: 0; color: #c9c6bd; font-size: var(--fs-sm, 14px); max-width: 60ch; }
.sky-stage { position: relative; border-radius: 12px; overflow: hidden; background: radial-gradient(ellipse at 50% 45%, #141b33 0%, var(--sk-night) 55%, var(--sk-deep) 100%); box-shadow: 0 0 0 1px var(--sk-line); }
#sky-cv { display: block; width: 100%; height: auto; touch-action: manipulation; }
.sky-cap { position: absolute; left: 0; right: 0; top: 0; padding: 12px 14px 26px; background: linear-gradient(var(--sk-deep), transparent); pointer-events: none; }
.sky-cap .d { font-size: 12px; letter-spacing: .1em; color: var(--sk-gold); }
.sky-cap .t { font: 800 clamp(15px, 3.2vw, 20px)/1.4 var(--font-display); margin-top: 2px; }
.sky-cap .s { font-size: 13px; color: #c9c6bd; margin-top: 2px; }
.sky-tip { position: absolute; pointer-events: none; background: rgba(6,9,20,.92); border: 1px solid var(--sk-line); border-radius: 8px; padding: 6px 10px; font-size: 13px; white-space: nowrap; transform: translate(-50%, -130%); color: var(--sk-ink); }
.sky-row { display: grid; grid-template-columns: minmax(0, 1fr) 220px; gap: 16px; align-items: start; }
@media (max-width: 640px) { .sky-row { grid-template-columns: 1fr; } }
.sky-ctl { display: flex; flex-wrap: wrap; gap: 10px; }
.sky-btn { font: 600 15px var(--font-body); color: var(--sk-deep); background: var(--sk-gold); border: 0; border-radius: 999px; padding: 11px 20px; cursor: pointer; }
.sky-btn.ghost { background: transparent; color: var(--sk-ink); box-shadow: inset 0 0 0 1px var(--sk-line); }
.sky-btn:focus-visible { outline: 2px solid var(--sk-ember); outline-offset: 3px; }
.sky-btn:disabled { opacity: .45; cursor: default; }
.sky-legend { display: flex; flex-wrap: wrap; gap: 6px 16px; font-size: 12.5px; color: var(--sk-mute); margin-top: 10px; }
.sky-legend i { display: inline-block; width: 9px; height: 9px; border-radius: 50%; margin-right: 6px; vertical-align: middle; }
.sky-basis { font-size: 12px; line-height: 1.6; color: var(--sk-mute); margin: 10px 0 0; max-width: 46em; }
.sky-legend .g { background: var(--sk-gold); } .sky-legend .p { background: #56607e; } .sky-legend .w { background: #fff; }
.sky-legend .e { box-shadow: inset 0 0 0 1.5px var(--sk-ember); }
.sky-rose { border: 1px solid var(--sk-line); border-radius: 12px; padding: 12px; }
.sky-rose h3 { font: 800 15px var(--font-display); margin: 0 0 2px; color: var(--sk-ink); }
.sky-rose p { font-size: 12px; color: var(--sk-mute); margin: 0 0 6px; }
#sky-rose { display: block; width: 100%; height: auto; max-width: 220px; margin: 0 auto; }

/* 모임 소개 맨 아래 '책 고르는 법' → 생각의 지도 빈 하늘(2026-11-06) */
.skb { margin: 40px 0 8px; border-radius: 16px; color: #e9e4d6; overflow: hidden;
  background: radial-gradient(1.2px 1.2px at 12% 30%, #fff8 50%, transparent 51%), radial-gradient(1px 1px at 78% 22%, #fff7 50%, transparent 51%),
    radial-gradient(1.4px 1.4px at 64% 70%, #f2c46d 50%, transparent 51%), radial-gradient(1px 1px at 30% 80%, #fff6 50%, transparent 51%),
    radial-gradient(1.6px 1.6px at 88% 58%, #f2c46d 50%, transparent 51%), radial-gradient(ellipse at 70% 40%, #141b33 0%, #0b1020 55%, #060914 100%); }
.skb-in { padding: clamp(22px, 4vw, 34px) clamp(18px, 4vw, 34px); max-width: 680px; display: grid; gap: 10px; }
.skb-eye { margin: 0; font-size: 12px; letter-spacing: .14em; color: #8f96ab; }
.skb h2 { margin: 0; font: 800 clamp(20px, 4vw, 28px)/1.35 var(--font-display); color: #e9e4d6; }
.skb h2 em { font-style: normal; color: #f2c46d; }
.skb p { margin: 0; color: #c9c6bd; }
.skb-now b { color: #ffb393; font-weight: 600; }
.skb-go { justify-self: start; margin-top: 6px; background: #f2c46d; color: #060914; font-weight: 700; border-radius: 999px; padding: 10px 20px; text-decoration: none; }
.skb-go:focus-visible { outline: 2px solid #ff8a5b; outline-offset: 3px; }

/* 생각의 지도 첫머리 → 서재 › 나침반(2026-11-06 따로 뺌) */
.cmp-hint { margin: 0 0 18px; }
.cmp-hint a { display: inline-flex; flex-wrap: wrap; gap: 4px 8px; align-items: center; padding: 9px 16px; border: 1px dashed var(--accent); border-radius: 999px; color: var(--ink); text-decoration: none; font-size: 14.5px; }
.cmp-hint a:hover { background: var(--surface); }
.cmp-hint b { color: var(--accent); }
