/* ============================================================
   Yunseul · Design System B  (라이트/다크 · CSS 변수 기반)
   기존 assets/static/app.css 를 이 파일로 교체합니다.
   배경/포인트색은 :root 변수 한 줄만 바꾸면 전체가 따라옵니다.
   ============================================================ */

/* ── 폰트: 서울 남산체(#66) 한글 서브셋. 기존과 동일 ──
   서브셋 woff2 는 단일 weight(usWeightClass 400, 비가변)다. 여기서 400 700 범위로
   선언하면 700 요청이 이 단일 아웃라인에 "매칭"돼 브라우저가 합성 볼드를 안 만든다
   → 굵은 한글(페이지 제목·strong 등)이 안 굵어 보인다. 단일값 400 으로 선언하면
   500↑ 요청은 매칭 폰트가 없어 합성 볼드(faux-bold)로 떨어져 굵게 보인다. */
@font-face {
  font-family: "Seoul Namsan";
  src: url("/static/fonts/seoul-namsan.subset.woff2") format("woff2");
  font-weight: 400;
  font-display: swap;
  unicode-range: U+AC00-D7A3, U+1100-11FF, U+3130-318F, U+A960-A97F, U+D7B0-D7FF;
}

/* ── 디자인 토큰 (라이트 기본값) ───────────────────────────
   accent = 청색 #2456E5 · 배경 = cool gray. 교체 지점은 여기. */
:root {
  --bg:          #F5F6F8;   /* 회색 캔버스 */
  --surface:     #FFFFFF;   /* 카드/헤더 면 */
  --ink:         #181A1F;   /* 본문 텍스트 */
  --muted:       #6C727C;   /* 보조 텍스트 */
  --faint:       #99A0AA;   /* 메타/플레이스홀더 */
  --line:        #E5E8EC;   /* 기본 경계선 */
  --line-strong: #D6DAE0;   /* 버튼/강조 경계선 */
  --accent:      #2456E5;   /* 포인트색(텍스트·보더·하이라이트) */
  --accent-soft: #EDF1FE;   /* 포인트색 연한 배경 */
  --on-accent:   #FFFFFF;   /* 포인트색 위 텍스트 */
  --danger:      #D92D20;   /* 위험(삭제) — 텍스트·보더 */
  --danger-soft: #FCEBE9;   /* 위험색 연한 배경(hover) */

  /* AI 연상 스파클 아이콘(마스크). 교정 헤딩·크레딧 칩 등에서 공유(#70). */
  --ic-sparkle:  url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='%23000' stroke-width='1.6' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M12 3l2 6.5 6.5 2-6.5 2-2 6.5-2-6.5-6.5-2 6.5-2z'/%3E%3C/svg%3E");

  --radius-card: 14px;
  --radius-btn:  9px;
  --radius-chip: 999px;
  --maxw:        640px;

  color-scheme: light dark;
}

/* ── 다크 토큰 ──────────────────────────────────────────────
   OS 다크 모드 자동 적용 + [data-theme] 로 사용자 토글 가능.
   base.html <html> 에 data-theme="dark|light" 를 주면 OS 설정을 덮어쓴다. */
@media (prefers-color-scheme: dark) {
  :root:not([data-theme="light"]) {
    --bg:#0B0C0E; --surface:#16181C;
    --ink:#E9EBEE; --muted:#8B919B; --faint:#61666E;
    --line:#23262C; --line-strong:#33373E;
    --accent:#6E8BFF; --accent-soft:#161D32; --on-accent:#FFFFFF;
    --danger:#F3675A; --danger-soft:#2A1614;
  }
}
:root[data-theme="dark"] {
  --bg:#0B0C0E; --surface:#16181C;
  --ink:#E9EBEE; --muted:#8B919B; --faint:#61666E;
  --line:#23262C; --line-strong:#33373E;
  --accent:#6E8BFF; --accent-soft:#161D32; --on-accent:#FFFFFF;
  --danger:#F3675A; --danger-soft:#2A1614;
}

/* ── 리셋 ── */
* { box-sizing: border-box; }
[hidden] { display: none !important; }
html, body { margin: 0; }
html { min-height: 100%; }
body {
  font-family: "Seoul Namsan", "Helvetica Neue", "Helvetica", system-ui, -apple-system, "Apple SD Gothic Neo", sans-serif;
  -webkit-font-smoothing: antialiased;
  text-rendering: optimizeLegibility;
  line-height: 1.6;
  color: var(--ink);
  background: var(--bg);
  /* 푸터를 항상 화면 아래로(#70): 본문이 짧아도 푸터가 뷰포트 바닥에 붙는다. */
  display: flex;
  flex-direction: column;
  min-height: 100vh;
}
a { color: inherit; }

/* ── 헤더 ── */
.site-header {
  display: flex; align-items: center; justify-content: space-between;
  padding: 0.85rem 1.1rem;
  background: var(--surface);
  border-bottom: 1px solid var(--line);
  position: sticky; top: 0; z-index: 10;
}
.site-header .logo {
  display: inline-flex; align-items: center; gap: 0.4rem;
  font-weight: 700; font-size: 1.2rem; letter-spacing: -0.01em;
  text-decoration: none; color: var(--ink);
}
/* 윤슬 로고 심볼(#74): currentColor 상속 → 라이트/다크 자동. */
.site-header .logo svg { width: 1.4rem; height: 1.4rem; flex: 0 0 auto; }
.profile-nav { display: flex; align-items: center; gap: 0.85rem; }
.profile-nav > a {
  font-size: 0.9rem; font-weight: 600; color: var(--ink); text-decoration: none;
}
/* 로그인 상태: 원형 프로필 아바타(#70) — 클릭 시 /me. */
.header-avatar { display: inline-flex; line-height: 0; border-radius: 50%; }
.header-avatar .avatar { display: inline-flex; }
/* (로그인 버튼은 .btn 시스템 사용 — base.html 에서 class="btn") */
/* 잔여 교정 크레딧 — 알약 칩 */
.header-credits {
  display: inline-flex; align-items: center; gap: 0.3rem;
  /* 높이 30px(아바타·로그인과 정렬) + 세로 내부 패딩 제거. 가로만 알약 형태 유지용 여백. */
  height: 30px; padding: 0 0.6rem;
  font-size: 0.78rem; color: var(--muted); white-space: nowrap;
  background: var(--bg); border: 1px solid var(--line);
  border-radius: var(--radius-chip);
}
/* 교정 크레딧 = AI 스파클 아이콘(#70, 기존 🪙 이모지 대체 — 라인 아이콘 톤 통일). */
.header-credits::before {
  content: ""; width: 0.85rem; height: 0.85rem; flex: 0 0 auto;
  background-color: currentColor;
  -webkit-mask: var(--ic-sparkle) center / contain no-repeat;
          mask: var(--ic-sparkle) center / contain no-repeat;
}

/* 언어 선택기(#85): 네이티브 <select> 외관이 브라우저별로 달라(사파리=둥근 무테, 크롬=각진 기본 UI)
   → appearance 제거 후 로그인 버튼(.btn)과 동일한 외곽선/반경/타이포로 통일. <select> 엔 ::after 가
   렌더되지 않으므로 화살표(chevron)는 래퍼(form)에 마스크로 얹는다(색=토큰 → 다크/라이트 자동). */
.lang-switch { position: relative; display: inline-flex; margin: 0; }
.lang-switch select {
  appearance: none; -webkit-appearance: none;
  /* 헤더 로그인 버튼은 `.profile-nav>a`(0.9rem)가 `.btn`(0.85rem)을 덮어써 0.9rem 로 보인다 →
     셀렉트도 0.9rem 로 맞춰 높이·글자 크기를 로그인 버튼과 정확히 일치시킨다. */
  font-family: inherit; font-size: 0.9rem; font-weight: 600; line-height: 1;
  color: var(--ink); background: var(--surface);
  border: 1px solid var(--line-strong); border-radius: var(--radius-btn);
  /* .btn 과 동일한 상하 패딩 + 우측은 화살표 자리만큼 더 비운다(높이=로그인 버튼과 정렬). */
  padding: 0.5rem 1.85rem 0.5rem 0.7rem;
  cursor: pointer;
}
.lang-switch select:hover { border-color: var(--muted); background: var(--bg); }
/* 키보드 포커스 가시성: 입력 필드와 동일하게 강조색 외곽선(네이티브 링 제거). */
.lang-switch select:focus-visible { outline: none; border-color: var(--accent); }
.lang-switch::after {
  content: ""; position: absolute; right: 0.6rem; top: 50%; transform: translateY(-50%);
  width: 0.7rem; height: 0.7rem; pointer-events: none; background-color: var(--muted);
  -webkit-mask: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='%23000' stroke-width='2.5' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='m6 9 6 6 6-6'/%3E%3C/svg%3E") center / contain no-repeat;
          mask: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='%23000' stroke-width='2.5' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='m6 9 6 6 6-6'/%3E%3C/svg%3E") center / contain no-repeat;
}

/* ── 본문/푸터 ── */
/* flex:1 로 본문이 남는 높이를 채워 푸터를 바닥으로 민다(#70). width 는 변수로 유지. */
.site-main { width: 100%; max-width: var(--maxw); margin: 0 auto; padding: 1.5rem 1rem; flex: 1 0 auto; }
/* 푸터(#74): 좌 저작권 / 우 정책 링크. 좁은 화면에선 wrap. */
.site-footer {
  display: flex; align-items: center; justify-content: space-between; flex-wrap: wrap; gap: 0.5rem 0.85rem;
  padding: 1.75rem 1rem; border-top: 1px solid var(--line);
  color: var(--faint); font-size: 0.85rem;
}
.site-footer a { color: var(--faint); text-decoration: none; }
.footer-links { display: flex; gap: 0.85rem; }

/* 페이지 제목 */
.site-main > h1 { font-size: 1.5rem; font-weight: 700; letter-spacing: -0.01em; margin: 0 0 1rem; }

/* 피드 헤더 행(#70): 제목 좌측 + 글쓰기 아이콘 버튼 우측 끝. */
.feed-head { display: flex; align-items: center; justify-content: space-between; gap: 1rem; margin: 0 0 1rem; }
.feed-head h1 { font-size: 1.5rem; font-weight: 700; letter-spacing: -0.01em; margin: 0; }

/* (글쓰기 버튼은 .btn 시스템 — home.html 에서 class="btn btn--accent btn--icon ic-pen") */

/* 브레드크럼(이동 경로, #79): 흩어진 .back-link 를 대체하는 단일 컴포넌트. 밑줄 없음, muted.
   가로 나열 + 항목 사이 구분자 "›"(::before). 마지막 현재 항목(span[aria-current])은 ink·비링크. */
.breadcrumb { margin: 0 0 1rem; font-size: 0.9rem; }
.breadcrumb ol { list-style: none; margin: 0; padding: 0; display: flex; flex-wrap: wrap; gap: 0.35rem; }
.breadcrumb li { display: flex; align-items: center; gap: 0.35rem; color: var(--muted); min-width: 0; }
.breadcrumb li + li::before { content: "\203A"; color: var(--muted); }
.breadcrumb a { color: var(--muted); text-decoration: none; }
.breadcrumb a:hover { color: var(--ink); }
.breadcrumb [aria-current="page"] { color: var(--ink); overflow: hidden; text-overflow: ellipsis; white-space: nowrap; max-width: 22ch; }

/* ── 버튼 시스템(#70) ─────────────────────────────────────────────
   단일 .btn + 색/크기/형태 모디파이어. 모두 토큰 기반이라 다크/라이트 자동.
   "기본/hover" 는 .btn 한 곳에서만 정의하고, 색·크기·형태만 모디파이어로 다르게 한다.
   추후 버튼은 class="btn [btn--accent|--danger|--primary] [btn--sm|--lg|--block|--icon] [ic-*]" 조합만으로 일관 적용.
   (리액션/스크랩/크레딧 등 알약 '칩'은 별도 시스템 — .btn 아님.) */
button { font-family: inherit; cursor: pointer; }
/* 기본 폴백: 클래스 없는 <button> 도 중립 외곽선으로(깨짐 방지). .btn 류가 항상 우선. */
button:not(.btn) {
  font-size: 0.85rem; font-weight: 600;
  color: var(--ink); background: transparent;
  border: 1px solid var(--line-strong); border-radius: var(--radius-btn);
  padding: 0.5rem 0.95rem;
}
button:not(.btn):hover { border-color: var(--muted); }

.btn {
  display: inline-flex; align-items: center; justify-content: center; gap: 0.4rem;
  font-family: inherit; font-size: 0.85rem; font-weight: 600; line-height: 1;
  cursor: pointer; text-decoration: none; white-space: nowrap;
  color: var(--ink); background: var(--surface);
  border: 1px solid var(--line-strong); border-radius: var(--radius-btn);
  padding: 0.5rem 0.95rem;
}
.btn:hover { border-color: var(--muted); background: var(--bg); }

/* 고스트 아이콘 버튼(#75) — 재사용 컴포넌트. 아웃라인·배경 없이 아이콘만, hover 시 색만 진해진다
   (muted→ink, 토큰 기반이라 다크/라이트 자동). 항상 `.btn` 과 함께 쓰며, `.profile-nav>a` 같은
   컨테이너 색 규칙(명시도 0,1,1)을 이기도록 `.btn.btn--ghost`(0,2,0)로 둔다. 헤더 About·향후 툴바/메뉴 등 공통. */
.btn.btn--ghost { background: transparent; border-color: transparent; color: var(--muted); transition: color 0.12s ease; }
.btn.btn--ghost:hover { background: transparent; color: var(--ink); }
/* 아이콘 전용일 때: 44px 박스 대신 아이콘 크기로 → 헤더에서 아바타(30px)/로그인과 높이·간격 정렬(내부 여백 제거). */
.btn--ghost.btn--icon { width: auto; height: 30px; padding: 0; }

/* 색(외곽선) — 색만 다름 */
.btn--accent { color: var(--accent); border-color: var(--accent); }
.btn--accent:hover { color: var(--accent); border-color: var(--accent); background: var(--accent-soft); }
/* 글쓰기 버튼: 강조색 아이콘 버튼은 아웃라인·배경 없이 색만 유지(테두리 제거). 크기(44px)·정렬은
   .btn--icon 그대로, hover 시 옅은 강조 배경으로만 피드백. (현재 .btn--accent.btn--icon = ic-pen 1곳) */
.btn--accent.btn--icon { background: transparent; border-color: transparent; }
.btn--accent.btn--icon:hover { background: var(--accent-soft); border-color: transparent; }
.btn--danger { color: var(--danger); border-color: var(--danger); }
.btn--danger:hover { color: var(--danger); border-color: var(--danger); background: var(--danger-soft); }

/* 1차 행동 — 솔리드 잉크 채움 */
.btn--primary { color: var(--surface); background: var(--ink); border-color: var(--ink); }
.btn--primary:hover { color: var(--surface); background: var(--ink); border-color: var(--ink); opacity: 0.9; }

/* 크기/형태 */
.btn--sm { font-size: 0.78rem; padding: 0.32rem 0.7rem; }
.btn--lg { font-size: 0.95rem; padding: 0.8rem 1rem; }
.btn--block { width: 100%; }
.btn--icon { width: 44px; height: 44px; padding: 0; flex: 0 0 auto; }
.btn--icon::before {
  content: ""; width: 22px; height: 22px; flex: 0 0 auto; display: inline-block;
  background-color: currentColor;            /* 색 모디파이어(ink/accent/danger)를 자동으로 따라감 */
  -webkit-mask: var(--ic) center / contain no-repeat;
          mask: var(--ic) center / contain no-repeat;
}
/* 아이콘 정의(마스크). .btn--icon 와 함께 사용. */
.ic-pen    { --ic: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='%23000' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M12 20h9'/%3E%3Cpath d='M16.5 3.5a2.12 2.12 0 0 1 3 3L7 19l-4 1 1-4Z'/%3E%3C/svg%3E"); }
.ic-search { --ic: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='%23000' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Ccircle cx='11' cy='11' r='8'/%3E%3Cpath d='m21 21-4.3-4.3'/%3E%3C/svg%3E"); }
.ic-check  { --ic: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='%23000' stroke-width='2.5' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpolyline points='20 6 9 17 4 12'/%3E%3C/svg%3E"); }
.ic-sparkle { --ic: var(--ic-sparkle); }
.ic-edit { --ic: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='%23000' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M11 4H4a2 2 0 0 0-2 2v14a2 2 0 0 0 2 2h14a2 2 0 0 0 2-2v-7'/%3E%3Cpath d='M18.5 2.5a2.12 2.12 0 0 1 3 3L12 15l-4 1 1-4z'/%3E%3C/svg%3E"); }
/* About 진입(#75) — info-circle 라인 아이콘. */
.ic-about { --ic: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='%23000' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Ccircle cx='12' cy='12' r='10'/%3E%3Cpath d='M12 16v-4'/%3E%3Cpath d='M12 8h.01'/%3E%3C/svg%3E"); }
/* 검색 초기화(피드 복귀) — X 라인 아이콘. */
.ic-close { --ic: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='%23000' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M18 6 6 18'/%3E%3Cpath d='m6 6 12 12'/%3E%3C/svg%3E"); }

/* 로딩·비활성 상태(#89): 지연 폼 제출 중 스피너 표시 + 중복 클릭 방지. feed.js wireFormLoading 가
   .is-loading + disabled 를 부여. 텍스트 버튼은 텍스트 좌측에 회전 스피너가 붙고(.btn 의
   inline-flex+gap 활용), 아이콘 버튼은 아이콘 마스크를 스피너로 교체(아래 더 큰 크기로 덮어씀). */
.btn:disabled { opacity: 0.6; cursor: not-allowed; }
.btn.is-loading { cursor: progress; }
.btn.is-loading::before {
  content: ""; display: inline-block; flex: 0 0 auto;
  width: 0.95em; height: 0.95em; box-sizing: border-box;
  border: 2px solid currentColor; border-top-color: transparent; border-radius: 50%;
  background: none; -webkit-mask: none; mask: none;   /* 아이콘 버튼의 아이콘 마스크 해제 */
  animation: spin 0.6s linear infinite;
}
.btn--icon.is-loading::before { width: 20px; height: 20px; border-width: 2.5px; }
@keyframes spin { to { transform: rotate(360deg); } }
@media (prefers-reduced-motion: reduce) { .btn.is-loading::before { animation: none; } }

/* 폼 액션 행(#70): 버튼 우측 정렬·나란히(예: 취소/삭제). */
.form-actions { display: flex; flex-wrap: wrap; justify-content: flex-end; align-items: center; gap: 0.6rem; margin-top: 1rem; }

/* ── 폼(글쓰기/검색) ── */
input, textarea, select, button { font-family: inherit; }
form input, form textarea {
  display: block; width: 100%; margin: 0.5rem 0;
  padding: 0.7rem 0.85rem; font-size: 1rem;
  color: var(--ink); background: var(--surface);
  border: 1px solid var(--line-strong); border-radius: 11px;
}
form textarea { line-height: 1.7; resize: vertical; }
form input::placeholder, form textarea::placeholder { color: var(--faint); }
form input:focus, form textarea:focus { outline: none; border-color: var(--accent); }
/* 쿨다운 등으로 변경 불가한 입력(#70): 비활성 표시. */
form input:disabled { color: var(--faint); background: var(--bg); cursor: not-allowed; }
.note-label { display: block; font-size: 0.82rem; color: var(--muted); margin-top: 0.75rem; }
/* (제출 버튼 스타일은 .btn 시스템으로 일원화 — 각 폼에서 class="btn btn--primary" 등) */
/* 폼 인라인 에러(#72 통일): 글쓰기·프로필·계정 삭제 등 모든 폼이 .form-error 하나로. */
.form-error { color: var(--danger); font-size: 0.9rem; margin: 0 0 0.5rem; }

/* ── 글쓰기(new.html) — 작성 카드 ── */
.compose {
  background: var(--surface); border: 1px solid var(--line);
  border-radius: var(--radius-card); overflow: hidden; margin: 0;
}
.compose textarea {
  width: 100%; margin: 0; border: none; border-radius: 0;
  background: transparent; color: var(--ink); resize: vertical;
}
.compose textarea:focus { outline: none; border: none; }
.compose-content {
  padding: 1.1rem 1.15rem; font-size: 1.15rem; line-height: 1.75; min-height: 9rem;
}
.compose-content::placeholder { color: var(--faint); }
/* 한글 입력 안내 링크(#118) — 좌측 패딩을 .compose-content 와 맞춰 placeholder 라인에 정렬. */
.compose-ime-help { margin: 0; padding: 0 1.15rem 0.9rem; font-size: 0.82rem; }
.compose-ime-help a { color: var(--muted); }
.compose-note { border-top: 1px solid var(--line); padding: 0.85rem 1.15rem; }
.compose-note .note-label { margin: 0 0 0.3rem; font-size: 0.78rem; font-weight: 600; color: var(--muted); }
.compose-note-input { padding: 0; font-size: 0.95rem; line-height: 1.6; min-height: 2.6rem; }
.compose-note-input::placeholder { color: var(--faint); }
.compose-foot {
  display: flex; align-items: center; justify-content: space-between; gap: 1rem;
  border-top: 1px solid var(--line); padding: 0.65rem 0.85rem 0.65rem 1.15rem; background: var(--bg);
}
.compose-count { font-size: 0.8rem; color: var(--faint); font-variant-numeric: tabular-nums; }
.compose-count.over { color: var(--danger); }
/* 게시 버튼은 .btn btn--primary (new.html). 작성 카드 안에서 약간 넓게. */
.compose-foot .btn { padding: 0.5rem 1.35rem; }
.compose-hint { font-size: 0.82rem; color: var(--muted); margin: 0.8rem 0 0; }

/* ── 트렌딩 단어(#15) — 알약 칩 ── */
.trending-wrap { margin: 0.25rem 0 1.25rem; }
.trending-title {
  font-size: 0.72rem; font-weight: 600; color: var(--faint);
  text-transform: uppercase; letter-spacing: 0.12em; margin: 0 0 0.6rem;
}
.trending { list-style: none; padding: 0; margin: 0; display: flex; flex-wrap: wrap; gap: 0.5rem; }
.trending-word {
  font-size: 0.85rem; color: var(--ink); line-height: 1.2;
  background: var(--surface); border: 1px solid var(--line);
  border-radius: var(--radius-chip); padding: 0.3rem 0.75rem;
}
/* 빈도 4단계: 글자 굵기/색만 차등(크기는 칩 일관성 위해 고정) */
.trending-word.t-size-1 { color: var(--muted); }
.trending-word.t-size-2 { color: var(--ink); }
.trending-word.t-size-3 { color: var(--ink); font-weight: 600; }
.trending-word.t-size-4 { color: var(--ink); font-weight: 700; }

/* ── 피드/포스트 카드 ── */
.feed { list-style: none; padding: 0; margin: 0; }
.feed .post {
  background: var(--surface); border: 1px solid var(--line);
  border-radius: var(--radius-card); padding: 1rem 1.05rem;
  margin-bottom: 0.75rem;
}
.post-meta { display: flex; align-items: center; gap: 0.5rem; font-size: 0.875rem; }
.post-author {
  display: inline-flex; align-items: center; gap: 0.45rem;
  font-weight: 600; color: var(--ink); text-decoration: none;
}
.post-author-name { font-size: 0.9rem; }
.post-time { font-size: 0.75rem; color: var(--faint); margin-left: auto; white-space: nowrap; }
.post-content {
  margin: 0.7rem 0 0.9rem; font-size: 1rem; line-height: 1.75;
  color: var(--ink); white-space: pre-wrap; word-break: break-word;
}

/* ── 리액션(단일 하트) / 스크랩 (흑백 라인 아이콘) ──
   아이콘은 .reaction::before / .scrap::before 가 mask 로 그린다(마크업에 이모지 없음). */
.post-actions { display: flex; flex-wrap: wrap; align-items: center; gap: 0.5rem; }
.reaction-form, .delete-form, .scrap-form { display: inline; margin: 0; width: auto; }

.post-actions .reaction,
.post-actions .scrap {
  display: inline-flex; align-items: center; gap: 0.4rem;
  background: var(--surface); border: 1px solid var(--line);
  border-radius: var(--radius-chip); padding: 0.32rem 0.7rem;
  font-size: 0.8rem; line-height: 1; color: var(--muted);
}
.post-actions .reaction:hover,
.post-actions .scrap:hover { border-color: var(--line-strong); color: var(--ink); }
/* 활성: 포인트색 아웃라인 + 연한 배경 */
.post-actions .reaction.reacted,
.post-actions .scrap.scrapped {
  color: var(--accent); border-color: var(--accent); background: var(--accent-soft);
}
.post-actions .reaction.loading { opacity: 0.6; }
.post-actions .count { font-variant-numeric: tabular-nums; }

/* 자기 글: 읽기 전용 카운트(아이콘 + 수) */
.post-actions .reaction-count {
  display: inline-flex; align-items: center; gap: 0.4rem;
  font-size: 0.8rem; color: var(--muted); padding: 0.32rem 0.5rem;
}

/* 스크랩 이모지(🔖)는 숨기고 아이콘으로 대체. 리액션은 마크업에 이모지가 없어 아이콘만(#70). */
.scrap .emoji { display: none; }
.reaction::before, .reaction-count::before, .scrap::before {
  content: ""; width: 15px; height: 15px; display: inline-block;
  background-color: currentColor; flex: 0 0 auto;
  -webkit-mask: var(--ic) center / contain no-repeat;
          mask: var(--ic) center / contain no-repeat;
}
/* 아이콘 정의 (리액션=하트 단일 / 스크랩=북마크). #70: 종류 축소로 하트 하나만. */
.reaction, .reaction-count { --ic: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='%23000' stroke-width='1.6' stroke-linejoin='round'%3E%3Cpath d='M12 20S4 14.5 4 9.2A3.8 3.8 0 0 1 12 6.5 3.8 3.8 0 0 1 20 9.2C20 14.5 12 20 12 20Z'/%3E%3C/svg%3E"); }
.scrap { --ic: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='%23000' stroke-width='1.6' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M6 4h12v16l-6-4-6 4z'/%3E%3C/svg%3E"); }

/* 상세(view)·삭제는 .btn 시스템(_item.html: view=btn btn--sm, 삭제=btn btn--danger btn--sm).
   둘을 우측 묶음으로(#70): 삭제(왼쪽)·자세히(오른쪽 끝). view 가 항상 맨 오른쪽 → 위치 일관. */
.post-actions-end { margin-left: auto; display: inline-flex; align-items: center; gap: 0.5rem; }

/* 더 보기 — .btn 시스템 사용(class="btn"), 로딩 상태만 유지. */
.load-more-wrap { text-align: center; margin: 1.25rem 0; }
#load-more.loading { opacity: 0.6; pointer-events: none; }
.empty { text-align: center; color: var(--muted); padding: 2rem 1rem; font-size: 0.97rem; }

/* ── 빈/에러 상태 (error.html · 404 · 검색 결과 없음) ── */
.page-state { text-align: center; max-width: 440px; margin: 3.5rem auto; padding: 1rem; }
.page-state-code {
  font-size: 3.5rem; font-weight: 700; letter-spacing: -0.02em;
  color: var(--faint); line-height: 1; margin-bottom: 0.75rem; font-variant-numeric: tabular-nums;
}
.page-state h1 { font-size: 1.3rem; font-weight: 700; margin: 0 0 0.5rem; }
.page-state p { color: var(--muted); line-height: 1.6; margin: 0 0 1.35rem; }

/* ── 교정(#13/#23) ── */
.correction {
  background: var(--surface); border: 1px solid var(--accent);
  border-radius: var(--radius-card); padding: 1.05rem 1.1rem; margin-top: 0.85rem;
}
/* 헤딩: i18n 텍스트를 그대로 담는 포인트색 배지 + AI 스파클 아이콘(#70, 텍스트/크기 유지·아이콘만 추가) */
.correction-heading {
  display: inline-flex; align-items: center; gap: 0.35rem; margin: 0 0 0.85rem;
  font-size: 0.72rem; font-weight: 700; letter-spacing: 0.04em;
  color: var(--on-accent); background: var(--accent);
  border-radius: 7px; padding: 0.3rem 0.65rem;
}
.correction-heading::before {
  content: ""; width: 0.95rem; height: 0.95rem; flex: 0 0 auto;
  background-color: currentColor;
  -webkit-mask: var(--ic-sparkle) center / contain no-repeat;
          mask: var(--ic-sparkle) center / contain no-repeat;
}
.correction-pending, .correction-note { color: var(--muted); font-size: 0.95rem; }
/* 교정 대기 표시(#89): "교정 중…" 옆에 작은 회전 스피너로 진행을 시각화(워커·폴링 로직 무관).
   폴링 성공 시 _correction.html 섹션 전체가 교체돼 자동 제거. 폴링 종료(실패/삭제) 시엔
   correction.js 가 .is-ended 를 부여해 스피너를 멈춘다(상태 오해 방지). */
.correction-pending { display: inline-flex; align-items: center; gap: 0.45rem; }
.correction-pending::after {
  content: ""; flex: 0 0 auto; box-sizing: border-box;
  width: 0.85em; height: 0.85em; border-radius: 50%;
  border: 2px solid var(--accent); border-top-color: transparent;
  animation: spin 0.7s linear infinite;
}
.correction-pending.is-ended { display: block; }
.correction-pending.is-ended::after { content: none; }
@media (prefers-reduced-motion: reduce) { .correction-pending::after { animation: none; } }
.correction p { margin: 0 0 0.75rem; }
.correction p strong { display: block; font-size: 0.7rem; font-weight: 600; letter-spacing: 0.1em; text-transform: uppercase; color: var(--faint); margin-bottom: 0.3rem; }
.correction-corrected, .correction-localized { font-size: 1rem; line-height: 1.7; color: var(--ink); }
.correction-localized { font-size: 0.9rem; color: var(--muted); }
.correction-keywords { font-size: 0.9rem; color: var(--ink); }
/* 종합 점수 별 */
.correction-rating { display: flex; align-items: center; gap: 0.4rem; margin-bottom: 0.85rem !important; }
.correction p.correction-rating strong { display: none; }
.correction-rating .rating-stars { color: var(--accent); letter-spacing: 0.08em; font-size: 0.95rem; }
.correction-rating .rating-num { color: var(--muted); font-size: 0.8rem; font-variant-numeric: tabular-nums; }
.correction-rating .rating-label { color: var(--muted); font-size: 0.8rem; }
/* diff: 달라진 부분만 포인트색 하이라이트 */
.diff-chg { color: var(--accent); background: var(--accent-soft); border-radius: 4px; padding: 0 3px; font-weight: 600; }
/* 교정문 복사 버튼(#111): 텍스트(.correction-text) 옆 작은 고스트 아이콘. .btn--icon(44px)을
   .copy-btn 특이도로 축소해 인라인에 맞춘다. 클릭 핸들러는 correction.js(document 위임). */
.copy-btn.btn.btn--icon { width: 1.7rem; height: 1.7rem; vertical-align: middle; margin-left: 0.35rem; color: var(--faint); }
.copy-btn.btn.btn--icon::before { width: 0.95rem; height: 0.95rem; }
.copy-btn.btn--ghost:hover { color: var(--ink); background: transparent; }
.ic-copy { --ic: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='%23000' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Crect x='9' y='9' width='13' height='13' rx='2' ry='2'/%3E%3Cpath d='M5 15H4a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h9a2 2 0 0 1 2 2v1'/%3E%3C/svg%3E"); }

/* ── 비슷한 글(#14·#38) ── */
.similar { margin-top: 1.5rem; }
.similar-heading {
  font-size: 0.72rem; font-weight: 600; letter-spacing: 0.12em; text-transform: uppercase;
  color: var(--faint); margin: 0 0 0.7rem;
}
.similar-percentile { color: var(--accent); text-transform: none; letter-spacing: 0; font-weight: 600; }
.similar-mistake {
  font-size: 0.88rem; color: var(--muted); background: var(--accent-soft);
  border-radius: 10px; padding: 0.6rem 0.8rem; margin: 0 0 0.85rem;
}
.similar-exemplars { margin: 0 0 0.85rem; }
.similar-exemplars-heading { font-size: 0.78rem; font-weight: 600; color: var(--muted); margin: 0 0 0.5rem; }
.similar-list, .similar-exemplars-list { list-style: none; padding: 0; margin: 0; display: flex; flex-direction: column; gap: 0.5rem; }
.similar-item, .similar-exemplar {
  background: var(--surface); border: 1px solid var(--line); border-radius: 10px; padding: 0.7rem 0.8rem;
}
.similar-link, .similar-exemplar-link {
  display: block; font-size: 0.92rem; color: var(--ink); text-decoration: none; line-height: 1.5;
}
.similar-link:hover, .similar-exemplar-link:hover { color: var(--accent); }
.similar-meta, .similar-exemplar-meta { display: flex; gap: 0.4rem; align-items: center; margin-top: 0.2rem; font-size: 0.78rem; color: var(--faint); }
.similar-meta .post-time { margin-left: 0; }

/* ── 아바타(#26) — 흑백 통일 ── */
.avatar {
  width: 40px; height: 40px; border-radius: 50%; object-fit: cover;
  background: var(--ink); display: inline-flex; vertical-align: middle;
}
.avatar-letter {
  align-items: center; justify-content: center;
  color: #fff; background: var(--ink);
  font-weight: 700; line-height: 1; overflow: hidden; font-size: 1.05rem;
}
.avatar-sm { width: 30px; height: 30px; }
.avatar-sm.avatar-letter { font-size: 0.85rem; }
/* 16색 팔레트(글자 아바타 배경) — 구글 기본 아바타 톤(#99). 전부 흰 글씨(#fff) 기준 WCAG AA
   (대비 ≥4.5:1) 충족. 색은 이름 해시로 고정 매핑(src/utils/avatar.rs). */
.avatar-c0  { background: #d32f2f; }
.avatar-c1  { background: #c2185b; }
.avatar-c2  { background: #7b1fa2; }
.avatar-c3  { background: #512da8; }
.avatar-c4  { background: #303f9f; }
.avatar-c5  { background: #1976d2; }
.avatar-c6  { background: #0277bd; }
.avatar-c7  { background: #00838f; }
.avatar-c8  { background: #00695c; }
.avatar-c9  { background: #2e7d32; }
.avatar-c10 { background: #33691e; }
.avatar-c11 { background: #827717; }
.avatar-c12 { background: #bf360c; }
.avatar-c13 { background: #5d4037; }
.avatar-c14 { background: #455a64; }
.avatar-c15 { background: #616161; }

/* ── 프로필 ── */
.profile-header {
  position: relative;
  text-align: center; background: var(--surface); border: 1px solid var(--line);
  border-radius: var(--radius-card); padding: 1.75rem 1.25rem; margin: 0 0 0.75rem;
}
/* 편집 진입 버튼(#70): 카드 우측 상단. */
.profile-edit-btn { position: absolute; top: 0.85rem; right: 0.85rem; }
.profile-header .avatar, .profile-header .avatar-letter { width: 72px; height: 72px; }
.profile-header .avatar-letter { font-size: 2rem; }
.profile-name { margin: 0.7rem 0 0.3rem; font-size: 1.35rem; font-weight: 700; letter-spacing: -0.01em; }
.profile-email, .profile-meta { color: var(--muted); font-size: 0.88rem; margin: 0.15rem 0; }
/* 로그아웃(#70) — 프로필 카드 내 작은 텍스트 버튼. */
.profile-logout { margin: 0.85rem 0 0; }

/* 로그아웃·사진 변경·사진 제거는 .btn 시스템 사용(profile.html: class="btn" / 로그아웃은 btn--sm). */

.profile-section {
  background: var(--surface); border: 1px solid var(--line);
  border-radius: var(--radius-card); padding: 1.1rem 1.15rem; margin: 0 0 0.75rem;
}
.profile-section > h2 {
  margin: 0 0 0.75rem; font-size: 0.72rem; font-weight: 600;
  letter-spacing: 0.12em; text-transform: uppercase; color: var(--faint);
}
.form-hint { font-size: 0.82rem; color: var(--muted); margin: 0.5rem 0 0; }
/* 표시명 변경: 인라인 행 */
.name-form form { display: flex; gap: 0.5rem; align-items: center; flex-wrap: wrap; }
.name-form form input { margin: 0; flex: 1; min-width: 12rem; }
/* 저장 = .btn btn--icon ic-check (profile.html). */

/* 값·라벨·전체보기 모두 같은 크기(0.88rem)로(#70). */
.profile-stats .stat-line { margin: 0.35rem 0; font-size: 0.88rem; color: var(--ink); }
.profile-stats .stat-label { display: inline-block; min-width: 7rem; color: var(--muted); font-size: 0.88rem; }
.profile-stats .stat-sub { color: var(--faint); font-size: 0.85rem; }
/* 통계 행(#70): 숫자(좌) + 전체보기(우) — 글/저장 행. */
.profile-stats .stat-row { display: flex; align-items: center; justify-content: space-between; gap: 1rem; margin: 0.35rem 0; }
.profile-stats .stat-row .stat-line { margin: 0; }
.profile-stats .profile-link { font-size: 0.88rem; }

.profile-link { display: inline-flex; align-items: center; gap: 0.3rem; text-decoration: none; font-weight: 600; color: var(--ink); }
.profile-link:hover { color: var(--accent); }
.profile-link .count { color: var(--muted); font-weight: 400; }

/* 아바타 편집(#70): 원형 프리뷰(좌) + 컨트롤(우). 프리뷰는 .avatar(object-fit:cover + 원형)라
   선택 파일도 CF 중앙 크롭과 동일하게 원형으로 보인다. */
.avatar-edit { display: flex; align-items: flex-start; gap: 1rem; flex-wrap: wrap; }
/* 쿨다운 안내(한 줄)일 땐 프리뷰 기준 세로 중앙 정렬. 평소 편집(여러 줄)은 flex-start 유지(#70). */
.avatar-edit:has(.avatar-cooldown) { align-items: center; }
.avatar-edit-preview .avatar { width: 88px; height: 88px; }
.avatar-edit-preview .avatar-letter { font-size: 2.5rem; }
.avatar-edit-controls { flex: 1; min-width: 13rem; }
.avatar-buttons { display: flex; flex-wrap: wrap; align-items: center; gap: 0.5rem; }
.avatar-buttons form { display: inline-flex; align-items: center; gap: 0.5rem; margin: 0; }
.avatar-filename { font-size: 0.82rem; color: var(--muted); margin: 0.5rem 0 0; word-break: break-all; }
.avatar-hint, .avatar-cooldown { color: var(--muted); font-size: 0.85rem; }
.avatar-hint { margin: 0.5rem 0 0; }

/* 회원 탈퇴(profile.html)·계정 삭제 확인(account/delete.html)은 .btn btn--danger 사용. */
.account-delete .warning { color: var(--danger); }

/* ── 인증 (로그인 / OAuth 동의) ── */
.auth-login {
  max-width: 380px; margin: 2.5rem auto; text-align: center;
  background: var(--surface); border: 1px solid var(--line);
  border-radius: var(--radius-card); padding: 2.1rem 1.75rem;
}
.auth-login h1 { font-size: 1.4rem; font-weight: 700; margin: 0 0 0.5rem; }
.auth-login p { color: var(--muted); font-size: 0.95rem; line-height: 1.6; margin: 0 0 1.5rem; }
/* 구글 로그인은 .btn btn--block btn--lg + .btn-google(브랜드 G 마크) (auth/login.html). */
.btn-google { gap: 0.6rem; }
.btn-google::before {
  content: "G"; display: inline-flex; align-items: center; justify-content: center;
  width: 22px; height: 22px; border-radius: 50%;
  background: var(--ink); color: var(--surface); font-weight: 700; font-size: 0.8rem;
}

.oauth-consent {
  max-width: 440px; margin: 2.5rem auto;
  background: var(--surface); border: 1px solid var(--line);
  border-radius: var(--radius-card); padding: 1.85rem 1.6rem;
}
.oauth-consent h1 { font-size: 1.25rem; font-weight: 700; margin: 0 0 0.85rem; }
.oauth-consent p { color: var(--ink); font-size: 0.95rem; line-height: 1.65; margin: 0 0 0.6rem; }
.oauth-consent-scopes { list-style: none; padding: 0; margin: 1rem 0; display: flex; flex-direction: column; gap: 0.5rem; }
.oauth-consent-scopes li {
  background: var(--bg); border: 1px solid var(--line); border-radius: 10px;
  padding: 0.7rem 0.85rem; font-size: 0.9rem; color: var(--ink);
}
.oauth-consent-scopes li::before { content: "✓"; color: var(--accent); font-weight: 700; margin-right: 0.5rem; }
.oauth-consent-redirect { font-size: 0.85rem; color: var(--muted); }
.oauth-consent-redirect code {
  background: var(--bg); border: 1px solid var(--line); border-radius: 6px;
  padding: 0.1rem 0.4rem; font-size: 0.85em;
  font-family: "SF Mono", ui-monospace, Menlo, Consolas, monospace; color: var(--ink);
}
.oauth-consent-actions { display: flex; gap: 0.6rem; margin-top: 1.35rem; }
/* 승인=.btn btn--primary, 거부=.btn (oauth_consent.html). 둘 다 폭 균등 분할만 여기서. */
.oauth-consent-actions .btn { flex: 1; }

/* 검색 폼 */
.search-form { display: flex; flex-wrap: wrap; gap: 0.5rem; margin: 0 0 1.25rem; }
/* 입력과 버튼을 같은 행에(#70): 입력이 남는 폭을 채우고 버튼은 고정.
   #126: iOS Safari 는 flex 아이템(input)을 min-width:0 에도 intrinsic 폭 이하로 안 줄이는 버그가 있어
   flex-basis:auto(=콘텐츠 기반) 면 입력창이 안 줄어 버튼이 다음 줄로 밀린다(데스크톱/안드로이드는 정상
   수축). flex-basis 를 0(`flex: 1 1 0`)으로 두면 입력창 시작폭이 0 → input(0)+버튼(44)+gap 이 항상
   컨테이너에 들어가 wrap 자체가 불가, 입력창은 남는 공간으로 grow 만 한다. appearance:none 은 search
   컨트롤 네이티브 장식 제거(hygiene, select 정규화와 동일 패턴). */
.search-form input {
  margin: 0; flex: 1 1 0; width: auto; min-width: 0;
  -webkit-appearance: none; appearance: none;
}
.search-hint { width: 100%; margin: 0.1rem 0 0; font-size: 0.78rem; color: var(--faint); }
/* 검색 버튼은 .btn btn--icon ic-search (_search_form.html). */

/* ── 토스트 알림(#72) — 비동기 동작(리액션·스크랩·무한스크롤·교정 폴링) 실패를 사용자에게 표시.
   feed.js showToast(key) 가 .toast 를 컨테이너에 넣고, 수초 후/클릭 시 제거. 무JS 에선 미사용. */
.toast-container {
  position: fixed; z-index: 1000; right: 1rem; bottom: 1rem;
  display: flex; flex-direction: column; gap: 0.5rem;
  max-width: min(360px, calc(100vw - 2rem)); pointer-events: none;
}
.toast {
  pointer-events: auto; cursor: pointer;
  background: var(--surface); color: var(--ink);
  border: 1px solid var(--line-strong); border-left: 3px solid var(--accent);
  border-radius: 10px; padding: 0.7rem 0.9rem;
  font-size: 0.9rem; line-height: 1.45;
  box-shadow: 0 6px 20px rgba(0, 0, 0, 0.14);
  animation: toast-in 0.18s ease-out;
}
.toast--error { border-left-color: var(--danger); }
@keyframes toast-in { from { opacity: 0; transform: translateY(8px); } to { opacity: 1; transform: none; } }
@media (prefers-reduced-motion: reduce) { .toast { animation: none; } }
/* 모바일: 상단 가운데 정렬(엄지 영역 회피). */
@media (max-width: 480px) {
  .toast-container { left: 1rem; right: 1rem; top: 1rem; bottom: auto; max-width: none; }
}

/* ── About 페이지(#75) — SEO 랜딩 겸용. 사이트 읽기 컬럼(--maxw) 안에서 섹션 단위 구성. ── */
.about { display: flex; flex-direction: column; gap: 2.75rem; }
/* 읽기 컬럼 본문 공통(#78) — About 와 약관/방침이 같은 섹션·문단·강조 규칙 공유. */
.about section, .legal section { margin: 0; }
.about p, .legal p { margin: 0 0 0.85rem; }
.about p:last-child, .legal p:last-child { margin-bottom: 0; }
.about strong, .legal b { font-weight: 700; }
/* Hero */
.about-hero { text-align: center; padding: 1rem 0 0.5rem; }
.about-hero h1 {
  font-size: 1.9rem; font-weight: 700; letter-spacing: -0.02em; line-height: 1.25; margin: 0 0 0.75rem;
}
.about-hero .about-lead { font-size: 1.1rem; color: var(--muted); margin: 0 auto 1rem; max-width: 34rem; }
/* 서비스명 발음·뜻 한 줄(#86) — 비한국어권 인지/구전용. lead 아래 작은 캡션. */
.about-hero .about-name { font-size: 0.9rem; color: var(--faint); margin: 0 auto 1.5rem; max-width: 34rem; }
/* 섹션 헤딩 */
.about h2 { font-size: 1.3rem; font-weight: 700; letter-spacing: -0.01em; margin: 0 0 0.75rem; }
/* 단계(How it works) / 페르소나(Who it's for) 리스트 */
.about-steps, .about-personas { list-style: none; padding: 0; margin: 0; display: grid; gap: 0.85rem; }
.about-steps > li, .about-personas > li {
  background: var(--surface); border: 1px solid var(--line); border-radius: var(--radius-card);
  padding: 1rem 1.15rem;
}
.about-steps > li b, .about-personas > li b { display: block; margin-bottom: 0.2rem; }
.about-step-n {
  display: inline-flex; align-items: center; justify-content: center;
  width: 1.5rem; height: 1.5rem; margin-right: 0.5rem; flex: 0 0 auto;
  font-size: 0.8rem; font-weight: 700; color: var(--accent);
  background: var(--accent-soft); border-radius: var(--radius-chip);
}
/* 교정 전→후 예시 카드 */
.about-example {
  background: var(--surface); border: 1px solid var(--line); border-radius: var(--radius-card);
  padding: 1rem 1.15rem; display: grid; gap: 0.6rem;
}
.about-example .ex-row { display: flex; gap: 0.6rem; align-items: baseline; }
.about-example .ex-tag {
  flex: 0 0 auto; font-size: 0.72rem; font-weight: 700; text-transform: uppercase; letter-spacing: 0.08em;
  color: var(--muted);
}
.about-example .ex-after .ex-tag { color: var(--accent); }
.about-example .ex-text { margin: 0; }
/* FAQ — 네이티브 <details> 아코디언(무JS, 크롤 가능) */
.about-faq { display: grid; gap: 0.6rem; }
.about-faq details {
  background: var(--surface); border: 1px solid var(--line); border-radius: var(--radius-card);
  padding: 0.25rem 0.25rem;
}
.about-faq summary {
  cursor: pointer; list-style: none; font-weight: 600;
  padding: 0.85rem 1rem; display: flex; justify-content: space-between; align-items: center; gap: 1rem;
}
.about-faq summary::-webkit-details-marker { display: none; }
.about-faq summary::after { content: "+"; color: var(--faint); font-weight: 700; }
.about-faq details[open] summary::after { content: "−"; }
.about-faq details > p { margin: 0; padding: 0 1rem 1rem; color: var(--muted); }
/* CTA */
.about-cta { text-align: center; background: var(--accent-soft); border-radius: var(--radius-card); padding: 1.75rem 1.25rem; }
.about-cta h2 { margin-bottom: 0.4rem; }
.about-cta p { color: var(--muted); margin-bottom: 1.1rem; }
/* 자매 사이트 안내(#97) — 다른 about 리스트처럼 기본 불릿 제거·간격만. */
.about-sisters-list { list-style: none; padding: 0; margin: 0; display: grid; gap: 0.6rem; }
.about-sisters-list > li { color: var(--muted); }
.about-sisters-list a { font-weight: 700; }
/* Credits(#74) — 푸터에서 옮겨온 폰트 라이선스 고지 등. 작게. */
.about-credits { font-size: 0.85rem; color: var(--muted); }
.about-credits h2 { font-size: 1rem; margin-bottom: 0.35rem; }
.about-credits p { margin: 0; }
@media (max-width: 480px) {
  .about-hero h1 { font-size: 1.55rem; }
}

/* ── 약관/방침(#78) — 장문 법적 문서. About 와 같은 읽기 컬럼(섹션·문단·강조 규칙은 위에서 공유). ── */
.legal { display: flex; flex-direction: column; gap: 2rem; }
.legal-head h1 { font-size: 1.7rem; font-weight: 700; letter-spacing: -0.02em; margin: 0 0 0.35rem; }
.legal-updated { font-size: 0.85rem; color: var(--muted); margin: 0; }
/* 번역본 준거 문구(#86) — "영문이 우선" 안내. 본문보다 한 단계 옅게. en-US 엔 없음. */
.legal-note { font-size: 0.9rem; color: var(--muted); margin: 0; }
.legal h2 { font-size: 1.2rem; font-weight: 700; letter-spacing: -0.01em; margin: 0 0 0.6rem; }
.legal ul { margin: 0; padding-left: 1.25rem; display: grid; gap: 0.4rem; }
.legal li { margin: 0; }
.legal code {
  font-size: 0.9em; padding: 0.05rem 0.3rem;
  background: var(--surface); border: 1px solid var(--line); border-radius: var(--radius-chip);
}
