:root {
  --ink: #111114;
  --paper: #f4f1ec;
  --paper2: #fffdf8;
  --muted: #8c8984;
  --line: rgba(20, 18, 18, 0.14);
  --accent: #a675b8;
  --accent2: #e59bb8;
  --char-a: #8b6bca;
  --char-b: #e799b5;
  --editor: #141416;
  --editor-soft: #202024;
  --editor-line: #34343a;
  --shadow: 0 24px 70px rgba(0, 0, 0, 0.18);
}
/* v0.3.220 — 키보드/스크린리더 사용자를 위한 "본문으로 바로가기" 링크. 평소엔 화면
   밖으로 숨겨두고, Tab으로 포커스가 오면 화면 맨 위에 보이게 합니다(마우스 사용자
   에게는 전혀 안 보임). BGM/스포일러/AU 전환 등 상단바 버튼을 다 지나치지 않아도
   바로 본문(.site-view)으로 건너뛸 수 있게 해줍니다. */
.skip-to-content {
  position: absolute;
  top: -1000px;
  left: 0;
  z-index: 9999;
  padding: 10px 16px;
  background: #111;
  color: #fff;
  font-size: 13px;
  font-weight: 700;
  border-radius: 0 0 8px 0;
  text-decoration: none;
}
.skip-to-content:focus {
  top: 0;
}
* {
  box-sizing: border-box;
}
html,
body {
  margin: 0;
  min-height: 100%;
  background: #09090a;
  color: var(--ink);
  font-family:
    Inter,
    Pretendard,
    "Noto Sans KR",
    system-ui,
    -apple-system,
    sans-serif;
}
body {
  overflow-x: hidden;
}
button,
input,
textarea,
select {
  font: inherit;
}
button {
  cursor: pointer;
}
img {
  max-width: 100%;
}
a {
  color: inherit;
  text-decoration: none;
}
::selection {
  background: color-mix(in srgb, var(--accent), white 42%);
  color: #161319;
}

/* common shell */
.site {
  min-height: 100vh;
  position: relative;
  background: #0d0d0f;
  overflow: hidden;
}
/* v0.3.108 — 기본 스킨 다크 모드. 이 앱은 같은 선택자에 대한 색상 규칙이 버전을 거치며
   여러 번 겹쳐 쌓여 있어서(뒤에 나온 규칙이 이김), 어떤 요소가 지금 실제로 무슨 색인지
   CSS만 보고는 확신하기 어렵습니다. 그래서 요소 하나하나를 새로 칠하는 대신, 브라우저가
   "실제로 화면에 그린 색" 자체를 반전시킵니다(filter: invert + hue-rotate로 원래 색상감은
   유지한 채 명암만 뒤집음). 이미 어두운 곳(편집기 패널)과 사진/영상은 반전을 한 번 더
   걸어서 원래 색 그대로 되돌립니다.
   v0.3.110 — .theme-default로 스코프를 좁혔습니다(청춘 등 다른 스킨은 각자 스킨 CSS에서
   자기만의 다크 팔레트를 직접 칠하므로, 이 반전 규칙이 같이 걸리면 안 됩니다). */
/* v0.3.113 — "너무 어둡다"는 의견이라 contrast()를 살짝 낮춰(0.85) 완전한 검정 대신
   부드러운 짙은 회색이 되도록 함.
   v0.3.211 — 반대로 "전체적으로 흐릿하다"는 의견. contrast()는 모든 색을 중간 회색
   쪽으로 끌어당기므로, 완전한 검정을 피하려던 값(0.85)이 동시에 텍스트 대비까지 낮춰서
   흐려 보이게 하고 있었습니다(계산해보면 밝은 제목 텍스트 대비가 12.4:1→0.85 적용
   전이라면 16.5:1). 완전한 검정으로 돌아가지 않는 선에서 0.95로 완화했었으나(v0.3.211),
   이번엔 "너무 진해지기만 했다"는 반대 피드백을 받아 다시 0.85로 되돌렸습니다(v0.3.212)
   — 대신 2인틀 배경을 전체 배경으로 옮기는 작업(아래 .site-view 배경 참고)으로 화면
   전체의 인상을 바꾸는 쪽을 시도합니다. contrast 값을 바꿀 때는 app.js의
   trueColorThroughDarkFilter()/darkFilterForward()도 반드시 같이 맞춰야 합니다(안 그러면
   캐릭터 고유색 등 "필터 통과 후 원래 색이 나오게 미리 계산해둔" 색들이 실제 필터 결과와
   어긋납니다).
   v0.3.115 — "노란빛" 문제를 완전히 다른 방식으로 재작업. hue-rotate(180deg)는
   "원래 색상(hue)을 그대로 유지"하는 값이라, 사이트 배경의 크림색(노란/황토 계열)도
   색은 그대로 유지된 채 명암만 뒤집혀서 노랗게 남았던 것입니다. 개별 요소를 하나하나
   찾아 덧칠하는 대신(v0.3.114에서 시도했다가 부작용만 생김), hue-rotate 각도 자체를
   "180deg + (스킨 포인트 색 hue − 크림색 hue)"만큼 틀어서, 반전 후 색상이 원래 색이
   아니라 "포인트 색 방향으로" 나오게 만듭니다 — invert()로 명암은 그대로 반전시키고,
   hue-rotate 각도만 사용자가 고른 포인트 색에 맞춰 계산해서 넣는 것입니다.
   --dark-hue-shift는 render()에서 계산해 넣습니다(스킨 색 hue − 35, 35는 사이트
   크림색의 대략적인 hue). 이 값이 없으면(청춘 스킨 등) 0으로 취급되어 기존과 동일하게
   동작합니다. 이 회전각을 통째로 바꾸는 방식이라, 크림 배경뿐 아니라 페이지 안의 모든
   색이 같은 각도만큼 같이 돌아갑니다(캐릭터 컬러/포인트 버튼 등도 약간 틀어질 수 있는
   트레이드오프가 있지만, 요소 하나하나를 쫓아다니며 덧칠하는 것보다 훨씬 안전하고
   사이트 전체에 고르게 적용됩니다). */
/* v0.3.118 — 위 필터를 .site 자기 자신에 걸면, CSS 스펙상 .site가 자기 자손 중
   position:fixed 요소들의 "기준 박스(containing block)"가 되어버립니다 — 그러면 원래
   "화면(뷰포트) 기준으로 고정"되어야 할 상단바·하단 내비게이션 독·편집기 패널이 뷰포트가
   아니라 .site 자기 자신의 박스(콘텐츠가 길어질수록 같이 길어지는 스크롤 영역) 기준으로
   고정돼버립니다. 그래서 세계관/타임라인처럼 목록이 긴 페이지에서는 하단 독이 화면
   훨씬 아래로 밀려나 안 보이게 됐던 것입니다(사용자 리포트: "화면 하단에 [내비가]
   없다" / "bat으로 열면 자꾸 세로로 길어지는거야" — 실제로 페이지가 길어진 게 아니라
   하단 독이 그 길어진 위치를 따라 화면 밖으로 밀려난 것이었습니다).
   고친 방법: 필터를 .site 자신이 아니라, "실제 스크롤되는 콘텐츠"인 .site-view와,
   화면에 고정돼야 하는 요소들(.site-topbar/.site-bottom-dock/.edit-hint) 각각에
   따로따로 겁니다 — 이러면 이 요소들의 position:fixed는 계속 뷰포트 기준으로 남고,
   시각적으로만 반전됩니다(각 요소 자신에게 필터를 거는 건 그 요소 자신의
   position:fixed 동작에는 영향을 주지 않습니다 — 영향을 주는 건 오직 "조상"에 필터가
   있을 때뿐입니다). .editor-drawer는 이제 .site에서 필터를 물려받지 않으므로, 상쇄용
   역필터도 필요 없어져 완전히 제거했습니다(원래도 반전되면 안 되는 요소였음). */
.site.theme-default.dark-mode .site-view,
.site.theme-default.dark-mode .site-topbar,
.site.theme-default.dark-mode .site-bottom-dock,
.site.theme-default.dark-mode .edit-hint {
  filter: none;
}
/* 사진은 이 회전을 반대로 한 번 더 걸어 원래 색으로 되돌립니다(.site-view 안에서만 —
   .editor-drawer는 이제 필터가 아예 없으므로 그 안의 이미지도 손볼 필요가 없습니다).
   순서가 중요합니다 — 위 필터의 정확한 역함수가 되려면 "만든 순서의 반대로, 각 단계도
   반대로" 적용해야 하므로 contrast → hue-rotate → invert 순서입니다.
   v0.3.219 — "화이트/다크 모드에서 그림 색감이 다르다" 신고로 발견: 여기 역필터가
   invert/hue-rotate만 되돌리고 contrast(0.85)는 안 되돌리고 있었습니다. invert와
   hue-rotate는 서로 상쇄돼 사라지지만, contrast(0.85)는 상쇄 없이 사진에 한 번 더
   걸린 채로 남아 있었던 것 — 그래서 다크 모드의 캐릭터 아트가 라이트 모드보다 항상
   대비가 15% 낮은(살짝 탁하고 흐린) 톤으로 보였습니다. app.js의
   trueColorThroughDarkFilter()가 캐릭터 고유색에 이미 쓰던 것과 같은 contrast(1/0.85)
   보정을 여기도 추가해서 완전한 항등 변환(다크모드에서도 사진이 진짜 원본 색 그대로)이
   되도록 맞췄습니다. */
.site.theme-default.dark-mode .site-view img:not(.editor-drawer *),
.site.theme-default.dark-mode .site-view video:not(.editor-drawer *),
.site.theme-default.dark-mode .site-view canvas:not(.editor-drawer *) {
  filter: none;
}
body.dark-mode {
  background: #111;
}
/* v0.3.125 — (1) 좌측 상단 로고 재수정. v0.3.124에서 "다크 모드면 항상 흰색"으로
   고쳤는데, 틀렸습니다 — 로고(.top-left-stack)는 원래 mix-blend-mode:difference로
   "뒤에 뭐가 있든" 자동으로 반대색이 되는(밝은 배경 위엔 어둡게, 어두운 배경 위엔
   밝게) 적응형 대비 요소였습니다. v0.3.118에서 .site-topbar 자체에 필터를 걸면서,
   이 diff-blend가 이미 만들어낸 "올바르게 대비되는 색"을 필터가 다시 한번 반전시켜
   버려 망가진 것이었습니다. 그래서 로고 색을 고정하는 대신, .top-left-stack에
   역필터를 걸어 .site-topbar의 필터를 상쇄시켜서 — diff-blend가 원래 하던 일을
   그대로 하게(그래서 다시 적응형으로 동작하게) 되돌립니다.
   v0.3.219 — 여기도 위 사진 역필터와 같은 빠진 contrast(1/0.85) 보정을 추가해
   .site-topbar 필터를 완전히(대비까지) 상쇄시키도록 맞췄습니다. */
.site.theme-default.dark-mode .site-topbar .top-left-stack {
  filter: none;
}
/* v0.3.124 — (3) 페이지 내용이 화면보다 짧으면 그 아래로 크림색 배경이 그대로
   비쳐 보이던 문제. v0.3.118에서 반전 필터를 .site 자신이 아니라 .site-view로
   옮기면서(상단바/하단독이 화면 기준으로 고정되도록), .site 자기 자신의 배경색은
   더 이상 반전을 타지 않게 됐습니다 — 그래서 짧은 페이지 아래 빈 공간에서는 반전
   안 된 원래 크림색이 그대로 보였던 것입니다.
   v0.3.125 — render()가 이제 .site 태그에 직접 계산된 배경색을 인라인 style로
   넣어줍니다(darkFilterForward — 크림색이 실제로 반전을 통과하면 나오는 정확한 톤이라
   다른 페이지들과 완벽히 같은 색조가 됨. 배경 없는 썰 페이지도 이걸로 자동 해결).
   여기 CSS 규칙은 그 인라인 style이 어떤 이유로 못 들어간 경우를 위한 대비용입니다
   (인라인 style이 있으면 그게 항상 우선함). */
.site.theme-default.dark-mode {
  background: #111;
}
/* v0.3.113에서 여기 있던 다크 모드용 아이콘 강제 색상 규칙은 v0.3.116에서 없앴습니다.
   원인을 잘못 짚었던 것으로 확인됐습니다 — 이 아이콘들의 밝은/어두운 배경(#fff,
   #171719 등)과 brightness(0)/brightness(0) invert(1) 색 짝은 이미 .site 전체 반전
   필터를 "배경도 아이콘도 똑같이" 타고 지나가면서 자동으로 서로 반전되어 원래부터
   올바른 대비를 유지합니다(예: brightness(0)으로 검게 칠해둔 아이콘이 그 자체로
   반전을 한 번 더 거쳐 흰색이 됨). v0.3.113에서 아이콘에만 별도로
   brightness(0) invert(1)을 추가로 걸어버린 게 오히려 배경과 아이콘을 "같은 색"으로
   수렴시켜 안 보이게 만든 원인이었습니다(직접 계산해서 확인함: 두 겹 반전이 적용된
   흰 아이콘이 흰 배경과 똑같이 짙은 회색이 되어버림). 아무것도 안 하는 게 정답이라
   규칙 자체를 지웠습니다. */
.site-view {
  min-height: 100vh;
}
/* v0.3.212 — 사용자 요청: 2인틀(비교) 페이지에만 있던 캐릭터색 그라데이션 배경을
   전체 배경으로. --char-a/--char-b는 render()가 매번 계산해 문서 최상위에 걸어두는
   "메인 A/B 고유색"(다크 모드에서도 원래 색 그대로 보이도록 이미 보정된 값 — 2인틀이
   쓰는 --a/--b와 같은 성질)이라 새 JS 없이 CSS만으로 라이트/다크 모드 둘 다 자동으로
   맞습니다. 자기 배경을 따로 안 정한 페이지는 이 배경이 그대로 비쳐 보이고, 이미
   자기 배경이 있던 페이지들은 아래에서 그 배경을 이 그라데이션으로 바꿔치기합니다.
   타임라인(.story-page-v5)은 요청대로 그대로 둡니다.
   v0.3.214 — "다크모드가 예전엔 예뻤는데 배경/글자색이 이상해졌다" 신고로 다크
   모드에서는 이 그라데이션을 뺐습니다. 원인: --char-a/--char-b의 "다크 모드에서도
   원래 색 그대로"라는 보정은 그 색을 '그대로(진하게)' 쓸 때만 성립합니다. 여기선
   world-bg에 6%만 섞은 거의-무채색 값을 만든 뒤 그 결과물 전체를 다시
   invert+hue-rotate+contrast에 태우는데, hue-rotate는 채도가 거의 0인 색에서
   결과 색상이 매우 불안정합니다(작은 성분 차이가 완전히 다른 색조로 튐) — 그래서
   같은 코드가 라이트 모드에선 은은하게 예쁘고 다크 모드에선 탁하거나 엉뚱한 톤으로
   보일 수 있습니다. 라이트 모드는 그대로 두고, 다크 모드는 이 규칙 자체를 걷어내
   .site-view가 원래(v0.3.212 이전)처럼 비워지도록 해 .site 자체의 미리 보정된
   단색 배경(--world-base-bg)이 그대로 비쳐 보이게 되돌렸습니다. */
.site.theme-default:not(.dark-mode) .site-view {
  background: linear-gradient(
    120deg,
    color-mix(in srgb, var(--char-a) 6%, var(--world-bg)),
    var(--world-bg) 30%,
    var(--world-bg) 70%,
    color-mix(in srgb, var(--char-b) 6%, var(--world-bg))
  );
}
.site-topbar {
  height: 58px;
  position: fixed;
  inset: 0 0 auto 0;
  z-index: 40;
  display: flex;
  align-items: center;
  justify-content: space-between;
  padding: 0 22px;
  color: #fff;
  mix-blend-mode: difference;
  pointer-events: none;
}
.site-topbar > * {
  pointer-events: auto;
}
.site-brand {
  display: flex;
  align-items: center;
  gap: 10px;
  font-size: 10px;
  letter-spacing: 0.19em;
  text-transform: uppercase;
  font-weight: 700;
}
.site-brand .sigil {
  width: 25px;
  height: 25px;
  border: 1px solid currentColor;
  display: grid;
  place-items: center;
  transform: rotate(45deg);
  opacity: 0.9;
}
.site-brand .sigil i {
  width: 5px;
  height: 5px;
  background: currentColor;
  display: block;
}
/* v0.3.131 — position:fixed인 .site-topbar는 CSS 스펙상 항상 자기만의 스택 컨텍스트를
   만들어서, 그 안의 mix-blend-mode:difference(.top-left-stack)가 실제 스크롤 페이지
   배경까지 넘어가 블렌드할 수 없습니다(라이브 테스트로 확인 — position/z-index를 빼면
   바로 정상 작동함). 라이트 모드에서는 이 한계 때문에 로고가 계속 흰색(원래 색) 그대로
   보였던 것 — 블렌드 대신 JS가 계산해 준 .on-light-bg 클래스로 직접 색을 뒤집습니다.
   다크 모드는 이 문제와 무관한 별도 방식(필터 상쇄, 이 파일 위쪽 .top-left-stack 규칙
   참고)으로 이미 잘 동작하므로 건드리지 않습니다. */
.top-left-stack.on-light-bg {
  color: #15151a;
}
.top-actions {
  display: flex;
  align-items: center;
  gap: 7px;
}
.top-pill,
.ghost-btn {
  border: 1px solid rgba(255, 255, 255, 0.42);
  background: rgba(8, 8, 9, 0.25);
  backdrop-filter: blur(8px);
  color: #fff;
  border-radius: 999px;
  padding: 7px 10px;
  font-size: 10px;
  letter-spacing: 0.07em;
}
.ghost-btn {
  width: 32px;
  height: 32px;
  padding: 0;
  display: grid;
  place-items: center;
}
.edit-toggle.on {
  background: #fff;
  color: #111;
  border-color: #fff;
}
/* v0.3.265 — 사용자 요청: 하단 바 색상을 커스텀하면 상단바(로고 + BGM/스포일러/관리자/
   메뉴 버튼)의 "검은색 부분"(라이트 배경에서 대비용으로 쓰던 검정 텍스트/아이콘)만
   그 색으로 바뀝니다 — 배경 알약을 새로 만드는 이전 시도는 되돌렸습니다. 커스텀 색이
   없을 때(기본)는 아래 규칙이 전혀 적용되지 않아 배경(흰 알약/mix-blend-mode:difference)은
   원래 그대로입니다. "켜짐"(.on) 상태의 진한 강조색도 그대로 둬서 on/off 구분이 흐려지지
   않게 합니다.
   - 로고(.site-brand)는 텍스트/사각테두리/점 모두 currentColor 기반이라 색만 바꾸면
     끝입니다(.on-light-bg가 라이트 배경에서 강제하던 검정 #15151a 자리).
   - BGM/스포일러/메뉴/관리자 아이콘은 <img> 래스터라 color로는 안 바뀌고, 지금도
     filter:brightness(0)으로 강제 검정 처리돼 있어서 — 원본 이미지를 투명 처리하고
     같은 아이콘을 mask-image로 오려낸 배경색 사각형(::before)을 그 자리에 겹쳐서
     원하는 색 그대로 정확히 칠합니다(필터로 임의 색을 근사하는 것보다 정확함). */
.has-custom-dock-color .top-left-stack.on-light-bg {
  color: var(--topbar-chrome-solid, #15151a) !important;
}
.has-custom-dock-color .site-topbar .top-actions .ghost-btn:not(.on) {
  color: var(--topbar-chrome-solid, #111) !important;
}
.has-custom-dock-color .site-topbar .top-actions .ghost-btn:not(.on) .ui-icon {
  opacity: 0 !important;
}
.has-custom-dock-color .bgm-symbol,
.has-custom-dock-color .spoiler-check,
.has-custom-dock-color .site-topbar .top-actions .edit-toggle:not(.on),
.has-custom-dock-color .site-topbar .top-actions [data-menu] {
  position: relative;
}
.has-custom-dock-color .bgm-symbol::before,
.has-custom-dock-color .spoiler-check::before,
.has-custom-dock-color .site-topbar .top-actions .edit-toggle:not(.on)::before,
.has-custom-dock-color .site-topbar .top-actions [data-menu]::before {
  content: "";
  position: absolute;
  inset: 0;
  margin: auto;
  width: 15px;
  height: 15px;
  background-color: var(--topbar-chrome-solid, #111);
  -webkit-mask-size: contain;
  mask-size: contain;
  -webkit-mask-repeat: no-repeat;
  mask-repeat: no-repeat;
  -webkit-mask-position: center;
  mask-position: center;
}
.has-custom-dock-color .bgm-symbol::before {
  -webkit-mask-image: url(assets/icons/lope/05-controls/bgm-off.svg);
  mask-image: url(assets/icons/lope/05-controls/bgm-off.svg);
}
.has-custom-dock-color .spoiler-check::before {
  -webkit-mask-image: url(assets/icons/lope/05-controls/spoiler-hide.svg);
  mask-image: url(assets/icons/lope/05-controls/spoiler-hide.svg);
}
.has-custom-dock-color .bgm-toggle.on .bgm-symbol::before {
  -webkit-mask-image: url(assets/icons/lope/05-controls/bgm-on.svg);
  mask-image: url(assets/icons/lope/05-controls/bgm-on.svg);
}
.has-custom-dock-color .spoiler-toggle.on .spoiler-check::before {
  -webkit-mask-image: url(assets/icons/lope/05-controls/spoiler-show.svg);
  mask-image: url(assets/icons/lope/05-controls/spoiler-show.svg);
}
.has-custom-dock-color .site-topbar .top-actions .edit-toggle:not(.on)::before {
  -webkit-mask-image: url(assets/icons/lope/05-controls/admin-edit.svg);
  mask-image: url(assets/icons/lope/05-controls/admin-edit.svg);
}
.has-custom-dock-color .site-topbar .top-actions [data-menu]::before {
  -webkit-mask-image: url(assets/icons/lope/05-controls/menu.svg);
  mask-image: url(assets/icons/lope/05-controls/menu.svg);
}

/* MAIN */
.home-page {
  min-height: 100vh;
  position: relative;
  color: #fff;
  background:
    radial-gradient(circle at 50% 14%, rgba(175, 175, 185, 0.18), transparent 32%),
    linear-gradient(
      90deg,
      rgba(0, 0, 0, 0.78),
      rgba(0, 0, 0, 0.35) 25%,
      rgba(0, 0, 0, 0.08) 50%,
      rgba(0, 0, 0, 0.35) 75%,
      rgba(0, 0, 0, 0.82)
    ),
    #121214;
  overflow: hidden;
}
.home-page:before {
  content: "";
  position: absolute;
  inset: 0;
  opacity: 0.18;
  background-image:
    repeating-linear-gradient(0deg, transparent 0 2px, rgba(255, 255, 255, 0.045) 2px 3px),
    radial-gradient(circle at 15% 65%, #fff 0 1px, transparent 1.5px),
    radial-gradient(circle at 70% 22%, #fff 0 1px, transparent 1.5px);
  background-size:
    auto,
    43px 43px,
    57px 57px;
  mix-blend-mode: screen;
  pointer-events: none;
}
.home-page:after {
  content: "";
  position: absolute;
  inset: 8% 22%;
  border: 1px solid rgba(255, 255, 255, 0.07);
  transform: skewX(-10deg);
  pointer-events: none;
}
.hero-half {
  position: absolute;
  top: 0;
  bottom: 0;
  width: 50%;
  z-index: 2;
}
.hero-half.left {
  left: 0;
}
.hero-half.right {
  right: 0;
}
.character-art {
  position: absolute;
  inset: 8% 4% 0;
  display: flex;
  align-items: flex-end;
  justify-content: center;
  pointer-events: none;
}
.character-art img {
  height: 92%;
  width: 100%;
  object-fit: contain;
  object-position: center bottom;
  filter: drop-shadow(0 28px 35px rgba(0, 0, 0, 0.5));
}
.character-art .art-fallback {
  width: min(70%, 440px);
  height: 78%;
  border: 1px solid rgba(255, 255, 255, 0.12);
  border-radius: 50% 50% 10% 10%/18% 18% 6% 6%;
  background: linear-gradient(160deg, rgba(255, 255, 255, 0.08), rgba(255, 255, 255, 0.015));
  display: grid;
  place-items: center;
  align-self: flex-end;
  position: relative;
  overflow: hidden;
}
.character-art .art-fallback:before {
  content: "";
  width: 50%;
  aspect-ratio: 1;
  border-radius: 50%;
  background: rgba(255, 255, 255, 0.08);
  position: absolute;
  top: 7%;
}
.character-art .art-fallback:after {
  content: "";
  width: 72%;
  height: 66%;
  border-radius: 50% 50% 0 0;
  background: rgba(255, 255, 255, 0.055);
  position: absolute;
  bottom: -8%;
}
.art-fallback b {
  font: 800 clamp(70px, 9vw, 150px)/1 Inter;
  color: rgba(255, 255, 255, 0.08);
  z-index: 2;
}
.hero-copy {
  position: absolute;
  z-index: 6;
  top: 20%;
  width: 30%;
  min-width: 270px;
}
.hero-half.left .hero-copy {
  left: 5.5%;
  text-align: left;
}
.hero-half.right .hero-copy {
  right: 5.5%;
  text-align: right;
}
.hero-kicker {
  font-family: "Noto Serif KR", serif;
  font-size: 12px;
  font-weight: 500; /* v0.3.121 — 가독성 요청으로 한 단계 얇게(600→500) */
  opacity: 0.8;
  margin-bottom: 8px;
}
.hero-name {
  font-size: clamp(44px, 5.2vw, 92px);
  font-weight: 800;
  line-height: 0.88;
  letter-spacing: -0.075em;
  text-transform: uppercase;
  margin: 0;
  text-shadow: 0 4px 30px rgba(0, 0, 0, 0.3);
}
.hero-subname {
  font-family: "DM Serif Display", serif;
  font-size: 16px;
  letter-spacing: 0.09em;
  margin-top: 12px;
  opacity: 0.72;
}
.hero-tags {
  display: flex;
  flex-wrap: wrap;
  gap: 7px;
  margin-top: 15px;
}
.right .hero-tags {
  justify-content: flex-end;
}
.hero-tag {
  border-radius: 2px;
  padding: 6px 9px;
  background: var(--c);
  font-size: 10px;
  font-weight: 600; /* v0.3.121 — 가독성 요청으로 한 단계 얇게(700→600) */
  color: #fff;
  box-shadow: 0 5px 18px rgba(0, 0, 0, 0.2);
}
.edge-keywords {
  position: absolute;
  z-index: 8;
  bottom: 12%;
  display: flex;
  flex-direction: column;
  gap: 9px;
}
.hero-half.left .edge-keywords {
  left: 0;
  align-items: flex-start;
}
.hero-half.right .edge-keywords {
  right: 0;
  align-items: flex-end;
}
.edge-keyword {
  min-width: 105px;
  border: 0;
  background: var(--c);
  color: #fff;
  padding: 10px 20px;
  font-size: 11px;
  font-weight: 600; /* v0.3.121 — 가독성 요청으로 한 단계 얇게(700→600) */
}
.left .edge-keyword {
  border-radius: 0 999px 999px 0;
  text-align: right;
}
.right .edge-keyword {
  border-radius: 999px 0 0 999px;
  text-align: left;
}
.pair-core {
  position: absolute;
  z-index: 12;
  left: 50%;
  bottom: 11.5%;
  transform: translateX(-50%);
  width: min(430px, 38vw);
  text-align: center;
}
/* v0.3.122 — 원래 "다크 모드에서" 하단 3줄(PAIR ARCHIVE 라벨 + 페어 타이틀 + 부제)에
   걸었던 밝은 색 아웃그로우. v0.3.209 — 사용자 요청으로 라이트 모드로 옮기고 다크
   모드에서는 뺐습니다. text-shadow는 상속되므로 .pair-core 하나에만 걸면 세 줄 다
   적용됩니다. 이 블록은 .site-view 안에 있어서 다크 모드였다면 반전 필터를 그대로
   타므로(검정→반전 후 흰색) rgba(0,0,0,..)를 썼어야 했지만, 라이트 모드는 반전 필터가
   없어 화면에 보이는 색을 그대로 쓰면 됩니다 — 그래서 실제 흰색인 rgba(255,255,255,..)
   를 씁니다. world-au-school AU는 이미 .pair-title에 text-shadow:none을 걸어둬서 그
   변형에는 자동으로 안 걸립니다. */
.site.theme-default:not(.dark-mode) .pair-core {
  text-shadow:
    0 0 6px rgba(255, 255, 255, 0.85),
    0 0 16px rgba(255, 255, 255, 0.55),
    0 0 30px rgba(255, 255, 255, 0.35);
}
.pair-kicker {
  font-size: 9px;
  letter-spacing: 0.3em;
  text-transform: uppercase;
  color: rgba(255, 255, 255, 0.46);
}
.pair-title {
  font-size: clamp(27px, 2.8vw, 46px);
  line-height: 1;
  font-weight: 700; /* v0.3.121 — 가독성 요청으로 한 단계 얇게(800→700), 가장 큰
    이름(.hero-name)은 요청대로 그대로 둠 */
  letter-spacing: -0.055em;
  margin: 7px 0 8px;
}
.pair-desc {
  font-family: "Noto Serif KR", serif;
  font-size: 11px;
  color: rgba(255, 255, 255, 0.65);
}
.pair-date {
  display: flex;
  align-items: center;
  justify-content: center;
  gap: 9px;
  margin-top: 11px;
  font-size: 10px;
  letter-spacing: 0.12em;
  color: rgba(255, 255, 255, 0.7);
}
.pair-date i {
  height: 1px;
  width: 28px;
  background: rgba(255, 255, 255, 0.25);
}
.home-menu {
  position: absolute;
  z-index: 15;
  left: 50%;
  bottom: 2.4%;
  transform: translateX(-50%);
  display: flex;
  align-items: center;
  gap: 8px;
  max-width: 80vw;
  overflow-x: auto;
  padding: 6px;
}
.home-menu::-webkit-scrollbar {
  display: none;
}
.feature-dot {
  width: 47px;
  height: 47px;
  border: 1px solid rgba(255, 255, 255, 0.16);
  background: rgba(8, 8, 10, 0.42);
  backdrop-filter: blur(10px);
  color: #fff;
  border-radius: 15px;
  display: grid;
  place-items: center;
  font-size: 15px;
  transition: 0.2s;
}
.feature-dot:hover {
  transform: translateY(-4px);
  background: rgba(255, 255, 255, 0.11);
}
.feature-dot span {
  display: none;
}

/* Generic page chrome */
.inner-page {
  min-height: 100vh;
  background: var(--paper);
  padding: 86px 5vw 54px;
  position: relative;
  overflow: hidden;
}
.inner-page:before {
  content: "";
  position: fixed;
  inset: 0;
  background-image:
    linear-gradient(
      45deg,
      transparent 48%,
      rgba(92, 75, 130, 0.055) 49%,
      rgba(92, 75, 130, 0.055) 51%,
      transparent 52%
    ),
    linear-gradient(
      -45deg,
      transparent 48%,
      rgba(92, 75, 130, 0.055) 49%,
      rgba(92, 75, 130, 0.055) 51%,
      transparent 52%
    );
  background-size: 66px 66px;
  pointer-events: none;
}
.page-head {
  position: relative;
  z-index: 2;
  display: flex;
  align-items: flex-end;
  justify-content: space-between;
  gap: 18px;
  margin-bottom: 28px;
}
.page-eyebrow {
  font-size: 9px;
  letter-spacing: 0.25em;
  text-transform: uppercase;
  color: #8e858b;
}
.page-title {
  font:
    400 clamp(35px, 4.2vw, 68px)/0.94 "DM Serif Display",
    serif;
  margin: 5px 0 0;
  letter-spacing: -0.02em;
}
.page-actions {
  display: flex;
  gap: 7px;
  flex-wrap: wrap;
  justify-content: flex-end;
}
.light-btn {
  border: 1px solid rgba(18, 16, 18, 0.17);
  background: rgba(255, 255, 255, 0.74);
  backdrop-filter: blur(8px);
  border-radius: 999px;
  padding: 8px 12px;
  font-size: 10px;
}
.light-btn.on,
.light-btn:hover {
  background: #151518;
  color: #fff;
  border-color: #151518;
}

/* Individual profile */
.profile-stage {
  position: relative;
  z-index: 2;
  display: grid;
  grid-template-columns: minmax(320px, 0.9fr) minmax(450px, 1.15fr);
  min-height: 690px;
  border-top: 1px solid var(--line);
  border-bottom: 1px solid var(--line);
}
.profile-visual {
  position: relative;
  min-height: 690px;
  overflow: hidden;
  background: linear-gradient(155deg, color-mix(in srgb, var(--c), white 82%), rgba(255, 255, 255, 0.45));
  border-right: 1px solid var(--line);
}
.profile-visual:before {
  content: attr(data-index);
  position: absolute;
  left: 20px;
  top: 20px;
  font:
    400 130px/1 "DM Serif Display",
    serif;
  color: color-mix(in srgb, var(--c), transparent 85%);
}
.profile-visual img {
  position: absolute;
  width: 92%;
  height: 94%;
  left: 4%;
  bottom: 0;
  object-fit: contain;
  object-position: center bottom;
  filter: drop-shadow(0 30px 28px rgba(0, 0, 0, 0.16));
}
.profile-visual .art-fallback {
  position: absolute;
  inset: 17% 13% 0;
  background: linear-gradient(155deg, color-mix(in srgb, var(--c), transparent 80%), rgba(0, 0, 0, 0.05));
  border-radius: 48% 48% 10px 10px;
  display: grid;
  place-items: center;
}
.profile-visual .art-fallback b {
  font: 800 150px/1 Inter;
  color: color-mix(in srgb, var(--c), transparent 74%);
}
.profile-info {
  padding: 42px clamp(28px, 4vw, 68px);
  background: rgba(255, 253, 248, 0.84);
  backdrop-filter: blur(10px);
  min-width: 0;
}
.profile-number {
  font-size: 9px;
  letter-spacing: 0.28em;
  color: var(--c);
  font-weight: 800;
}
.profile-name {
  font:
    400 clamp(47px, 5vw, 84px)/0.88 "DM Serif Display",
    serif;
  margin: 8px 0 4px;
  letter-spacing: -0.035em;
}
.profile-reading {
  font-size: 11px;
  color: #8e8884;
  letter-spacing: 0.09em;
}
.profile-quote {
  font-family: "Noto Serif KR", serif;
  font-size: 16px;
  line-height: 1.75;
  margin: 28px 0;
  padding-left: 18px;
  border-left: 3px solid var(--c);
  max-width: 620px;
}
.profile-blocks {
  display: grid;
  grid-template-columns: repeat(2, minmax(0, 1fr));
  gap: 0;
  border-top: 1px solid var(--line);
}
.pblock {
  padding: 18px 18px 18px 0;
  border-bottom: 1px solid var(--line);
  min-width: 0;
}
.pblock:nth-child(even) {
  padding-left: 18px;
  border-left: 1px solid var(--line);
}
.pblock.wide {
  grid-column: 1/-1;
  border-left: 0 !important;
  padding-left: 0;
}
.pblock-label {
  font-size: 9px;
  letter-spacing: 0.16em;
  text-transform: uppercase;
  color: #9e9691;
  margin-bottom: 7px;
}
.pblock-value {
  font-size: 13px;
  line-height: 1.75;
  white-space: pre-wrap;
}
.pblock.tags .pblock-value {
  display: flex;
  flex-wrap: wrap;
  gap: 6px;
}
.profile-chip {
  padding: 6px 9px;
  border-radius: 999px;
  background: #1c1b1e;
  color: #fff;
  font-size: 10px;
}
.profile-color {
  display: flex;
  align-items: center;
  gap: 8px;
}
.profile-color i {
  width: 22px;
  height: 22px;
  border-radius: 50%;
  background: var(--v);
  border: 4px solid rgba(255, 255, 255, 0.8);
  box-shadow: 0 0 0 1px var(--line);
}
.profile-media {
  margin-top: 24px;
  display: flex;
  align-items: center;
  gap: 8px;
}
.mini-player {
  border: 1px solid var(--line);
  border-radius: 999px;
  background: #fff;
  padding: 7px 10px;
  font-size: 10px;
  display: flex;
  align-items: center;
  gap: 8px;
}
.mini-player audio {
  height: 25px;
  width: 190px;
}
.profile-subtabs {
  display: flex;
  gap: 5px;
  margin-top: 17px;
  flex-wrap: wrap;
}
.subtab {
  border: 0;
  background: transparent;
  border-bottom: 1px solid transparent;
  padding: 5px 2px;
  margin-right: 10px;
  font-size: 10px;
  letter-spacing: 0.1em;
  color: #8f8885;
}
.subtab.on {
  color: #111;
  border-bottom-color: #111;
}

/* Compare */
.compare-page {
  min-height: 100vh;
  background: #f9f7f3;
  padding: 78px 4vw 45px;
  position: relative;
  overflow: hidden;
}
.compare-page:before {
  content: "";
  position: absolute;
  inset: 0;
  background:
    radial-gradient(circle at 50% 0, color-mix(in srgb, var(--a), transparent 88%), transparent 36%),
    linear-gradient(
      115deg,
      color-mix(in srgb, var(--a), transparent 94%),
      transparent 28%,
      transparent 72%,
      color-mix(in srgb, var(--b), transparent 93%)
    );
  pointer-events: none;
}
.compare-shell {
  position: relative;
  z-index: 2;
  max-width: 1280px;
  margin: auto;
}
.compare-title {
  text-align: center;
  margin: 0 0 25px;
}
.compare-title small {
  font-size: 9px;
  letter-spacing: 0.28em;
  color: #8b8583;
}
.compare-title h1 {
  font:
    400 clamp(36px, 4.4vw, 66px)/1 "DM Serif Display",
    serif;
  margin: 5px 0;
}
.compare-top {
  display: grid;
  grid-template-columns: repeat(var(--profile-fact-cols, 2), minmax(0, 1fr));
  gap: 12px;
}
.compare-card {
  min-height: 200px;
  border: 1px solid color-mix(in srgb, var(--c), #aaa 66%);
  border-radius: 28px;
  background: rgba(255, 255, 255, 0.77);
  backdrop-filter: blur(10px);
  padding: 20px;
  display: grid;
  grid-template-columns: 90px 1fr;
  gap: 17px;
  align-items: start;
}
.compare-card.righty {
  grid-template-columns: 1fr 90px;
  text-align: right;
}
.compare-avatar {
  width: 90px;
  height: 90px;
  border-radius: 50%;
  overflow: hidden;
  border: 1px solid var(--line);
  background: color-mix(in srgb, var(--c), white 80%);
  display: grid;
  place-items: center;
  font-size: 33px;
  font-weight: 800;
}
.compare-avatar img {
  width: 100%;
  height: 100%;
  object-fit: cover;
}
.compare-card h2 {
  font:
    400 29px/1 "DM Serif Display",
    serif;
  margin: 4px 0;
}
.compare-meta {
  font-size: 10px;
  color: #7f7877;
  margin-top: 4px;
}
.compare-tags {
  display: flex;
  gap: 5px;
  flex-wrap: wrap;
  margin-top: 13px;
}
.righty .compare-tags {
  justify-content: flex-end;
}
.compare-tags span {
  background: #202024;
  color: #fff;
  border-radius: 999px;
  padding: 6px 9px;
  font-size: 9px;
}
.stat-lines {
  margin-top: 14px;
}
.stat-line {
  display: grid;
  grid-template-columns: auto 1fr auto;
  gap: 7px;
  align-items: center;
  font-size: 9px;
  margin: 8px 0;
}
.stat-line i {
  border-top: 1px dotted #aaa;
}
.stat-line b {
  font-weight: 600;
}
.compare-stage {
  position: relative;
  display: grid;
  grid-template-columns: minmax(210px, 0.58fr) minmax(450px, 1.2fr) minmax(210px, 0.58fr);
  min-height: 545px;
  margin-top: 13px;
}
.compare-art {
  position: relative;
  overflow: hidden;
}
.compare-art img {
  width: 100%;
  height: 100%;
  object-fit: contain;
  object-position: center bottom;
  filter: drop-shadow(0 25px 25px rgba(0, 0, 0, 0.13));
}
.compare-art .art-fallback {
  position: absolute;
  inset: 12% 5% 0;
  border: 1px solid color-mix(in srgb, var(--c), transparent 60%);
  border-radius: 45% 45% 5px 5px;
  background: linear-gradient(160deg, color-mix(in srgb, var(--c), transparent 84%), transparent);
  display: grid;
  place-items: center;
  font-size: 70px;
  font-weight: 800;
  color: color-mix(in srgb, var(--c), transparent 68%);
}
.compare-center {
  padding: 23px 18px 15px;
  display: flex;
  flex-direction: column;
  justify-content: center;
  min-width: 0;
}
.relation-note {
  text-align: center;
  margin-bottom: 18px;
}
.relation-note h3 {
  font:
    400 34px/1 "DM Serif Display",
    serif;
  margin: 0 0 8px;
}
.relation-note p {
  max-width: 560px;
  margin: auto;
  font-family: "Noto Serif KR", serif;
  font-size: 12px;
  line-height: 1.8;
  color: #66615e;
}
.memory-grid {
  display: grid;
  grid-template-columns: repeat(2, minmax(0, 1fr));
  gap: 9px;
}
.memory {
  aspect-ratio: 1.35;
  border-radius: 18px;
  border: 1px solid var(--line);
  overflow: hidden;
  background: linear-gradient(145deg, rgba(0, 0, 0, 0.035), rgba(255, 255, 255, 0.8));
  display: grid;
  place-items: center;
  color: #aaa;
  font-size: 10px;
  position: relative;
}
.memory img {
  width: 100%;
  height: 100%;
  object-fit: cover;
}
.memory figcaption {
  position: absolute;
  left: 8px;
  bottom: 7px;
  background: rgba(0, 0, 0, 0.58);
  color: #fff;
  border-radius: 999px;
  padding: 4px 7px;
  font-size: 8px;
}
.to-each {
  display: grid;
  grid-template-columns: 1fr 1fr;
  gap: 10px;
  margin-top: 10px;
}
.to-card {
  border-top: 1px solid var(--line);
  padding-top: 11px;
}
.to-card:last-child {
  text-align: right;
}
.to-card b {
  font-size: 9px;
  letter-spacing: 0.16em;
  color: var(--c);
}
.to-card p {
  font-family: "Noto Serif KR", serif;
  font-size: 11px;
  line-height: 1.7;
  margin: 5px 0;
}

/* roster */
.roster-page {
  min-height: 100vh;
  color: #fff;
  padding: 82px 6vw 55px;
  background:
    radial-gradient(circle at 20% 30%, rgba(62, 165, 180, 0.16), transparent 34%),
    radial-gradient(circle at 80% 20%, rgba(125, 96, 180, 0.13), transparent 36%), #08242a;
  position: relative;
  overflow: hidden;
}
.roster-page:before {
  content: "";
  position: absolute;
  inset: 0;
  background-image: radial-gradient(#fff 0 1px, transparent 1.4px), radial-gradient(#fff 0 1px, transparent 1.4px);
  background-position:
    0 0,
    22px 24px;
  background-size:
    46px 46px,
    61px 61px;
  opacity: 0.17;
  pointer-events: none;
}
.roster-wrap {
  position: relative;
  z-index: 2;
  max-width: 1180px;
  margin: auto;
}
.roster-head {
  text-align: center;
  margin-bottom: 26px;
}
.roster-head small {
  font-size: 9px;
  letter-spacing: 0.28em;
  color: rgba(255, 255, 255, 0.55);
}
.roster-head h1 {
  font:
    400 clamp(42px, 5vw, 78px)/1 "DM Serif Display",
    serif;
  margin: 7px 0 0;
}
.roster-grid {
  display: grid;
  grid-template-columns: repeat(auto-fit, minmax(180px, 1fr));
  gap: 15px;
  align-items: end;
}
.roster-card {
  position: relative;
  height: 390px;
  border: 1px solid rgba(255, 255, 255, 0.18);
  border-radius: 7px 7px 22px 22px;
  overflow: hidden;
  background: linear-gradient(160deg, rgba(255, 255, 255, 0.13), rgba(255, 255, 255, 0.03));
  backdrop-filter: blur(4px);
  transition: 0.23s;
  color: #fff;
}
.roster-card:hover {
  transform: translateY(-8px);
  border-color: color-mix(in srgb, var(--c), white 25%);
}
.roster-card img {
  position: absolute;
  inset: 0;
  width: 100%;
  height: 86%;
  object-fit: contain;
  object-position: center bottom;
  filter: drop-shadow(0 24px 19px rgba(0, 0, 0, 0.28));
}
.roster-card .art-fallback {
  position: absolute;
  inset: 7% 12% 14%;
  border-radius: 48% 48% 5px 5px;
  background: linear-gradient(160deg, color-mix(in srgb, var(--c), transparent 55%), transparent);
  display: grid;
  place-items: center;
  font-size: 58px;
  font-weight: 800;
  color: rgba(255, 255, 255, 0.22);
}
.roster-caption {
  position: absolute;
  left: 0;
  right: 0;
  bottom: 0;
  min-height: 80px;
  background: linear-gradient(180deg, transparent, rgba(0, 0, 0, 0.92) 32%);
  padding: 28px 13px 12px;
  text-align: center;
}
.roster-caption b {
  display: block;
  font:
    400 22px/1 "DM Serif Display",
    serif;
}
.roster-caption span {
  font-size: 9px;
  color: rgba(255, 255, 255, 0.55);
  display: block;
  margin-top: 6px;
}

/* relation */
.relation-page {
  min-height: 100vh;
  background: #111116;
  color: #fff;
  padding: 86px 6vw 55px;
  position: relative;
}
.relation-shell {
  max-width: 1200px;
  margin: auto;
}
.relation-hero {
  display: grid;
  grid-template-columns: 1.2fr 0.8fr;
  min-height: 620px;
  border: 1px solid rgba(255, 255, 255, 0.13);
  position: relative;
  overflow: hidden;
}
.relation-photo {
  background: linear-gradient(145deg, color-mix(in srgb, var(--r), #111 50%), #0d0d0f);
  position: relative;
  overflow: hidden;
}
.relation-photo img {
  width: 100%;
  height: 100%;
  object-fit: cover;
}
.relation-photo .pair-fallback {
  position: absolute;
  inset: 0;
  display: flex;
  align-items: flex-end;
  justify-content: space-evenly;
  padding: 8%;
}
.pair-fallback span {
  width: 38%;
  height: 75%;
  border: 1px solid rgba(255, 255, 255, 0.12);
  border-radius: 48% 48% 5px 5px;
  background: rgba(255, 255, 255, 0.04);
}
.relation-copy {
  padding: 55px 43px;
  background: rgba(20, 20, 24, 0.92);
  display: flex;
  flex-direction: column;
  justify-content: center;
}
.relation-copy small {
  font-size: 9px;
  letter-spacing: 0.25em;
  color: color-mix(in srgb, var(--r), white 40%);
}
.relation-copy h1 {
  font:
    400 clamp(48px, 5vw, 80px)/0.95 "DM Serif Display",
    serif;
  margin: 9px 0 18px;
}
.relation-copy p {
  font-family: "Noto Serif KR", serif;
  font-size: 13px;
  line-height: 1.95;
  color: rgba(255, 255, 255, 0.72);
}
.member-ribbon {
  display: flex;
  flex-wrap: wrap;
  gap: 6px;
  margin-top: 20px;
}
.member-ribbon span {
  border: 1px solid rgba(255, 255, 255, 0.16);
  padding: 7px 9px;
  border-radius: 999px;
  font-size: 9px;
}

/* diagram */
.diagram-page {
  min-height: 100vh;
  padding: 86px 4vw 48px;
}
.diagram-board {
  position: relative;
  height: 680px;
  max-width: 1200px;
  margin: auto;
  /* v0.3.324 — 관계도 배경도 다른 미색 영역들처럼 배경 · MAIN 색상을 따라가도록 변경
     (명도·채도는 원래 크림색 값 그대로, 색상만 accent를 따라감). */
  border: 1px solid hsl(from var(--accent) h 26% 82%);
  border-radius: 28px;
  overflow: hidden;
  background-color: hsl(from var(--accent) h 100% 97%);
  background-image: radial-gradient(hsl(from var(--accent) h 24% 80%) 1px, transparent 1px);
  background-size: 18px 18px;
  box-shadow: 0 22px 60px rgba(58, 43, 29, 0.09);
}
.diagram-svg {
  position: absolute;
  inset: 0;
  width: 100%;
  height: 100%;
  overflow: visible;
}
.dnode {
  position: absolute;
  width: 112px;
  transform: translate(-50%, -50%);
  text-align: center;
  z-index: 3;
  user-select: none;
}
.dnode-avatar {
  width: 78px;
  height: 78px;
  border-radius: 50%;
  margin: auto;
  background: #fff;
  border: 5px solid color-mix(in srgb, var(--c), white 30%);
  box-shadow: 0 9px 18px rgba(0, 0, 0, 0.09);
  overflow: hidden;
  display: grid;
  place-items: center;
  font-size: 24px;
  font-weight: 800;
}
.dnode-avatar img {
  width: 100%;
  height: 100%;
  object-fit: cover;
}
.dnode b {
  display: inline-block;
  background: #fff;
  border: 1px solid #e0d8cd;
  border-radius: 999px;
  padding: 5px 9px;
  margin-top: 6px;
  font-size: 10px;
}
.edge-label {
  font-size: 10px;
  fill: #5d5650;
  paint-order: stroke;
  stroke: #fffaf2;
  stroke-width: 7;
  stroke-linejoin: round;
}
.edge-hit {
  stroke: transparent;
  stroke-width: 16;
  cursor: pointer;
}

/* upcoming page */
.placeholder-page {
  min-height: 100vh;
  background: #131316;
  color: #fff;
  display: grid;
  place-items: center;
  padding: 80px 20px;
}
.placeholder-card {
  max-width: 620px;
  text-align: center;
}
.placeholder-card small {
  font-size: 9px;
  letter-spacing: 0.3em;
  color: #777;
}
.placeholder-card h1 {
  font:
    400 66px/1 "DM Serif Display",
    serif;
  margin: 8px 0 15px;
}
.placeholder-card p {
  font-family: "Noto Serif KR", serif;
  color: #aaa;
  line-height: 1.9;
  font-size: 12px;
}

/* edit overlay */
.edit-hint {
  position: fixed;
  z-index: 55;
  left: 50%;
  top: 13px;
  transform: translateX(-50%);
  background: #fff;
  color: #121214;
  border-radius: 999px;
  padding: 8px 13px;
  font-size: 10px;
  box-shadow: 0 8px 30px rgba(0, 0, 0, 0.18);
  display: flex;
  gap: 8px;
  align-items: center;
}
.edit-hint i {
  width: 6px;
  height: 6px;
  border-radius: 50%;
  background: #eb6485;
}
.editable {
  outline: 1px dashed rgba(255, 255, 255, 0.55) !important;
  outline-offset: 4px;
}
.inner-page .editable,
.compare-page .editable {
  outline-color: rgba(20, 20, 20, 0.28) !important;
}
.editable:hover {
  outline-style: solid !important;
}
.editor-drawer {
  position: fixed;
  z-index: 70;
  right: 0;
  top: 0;
  height: 100vh;
  width: min(390px, 92vw);
  background: #151518;
  color: #efeff2;
  border-left: 1px solid #303037;
  box-shadow: -20px 0 50px rgba(0, 0, 0, 0.28);
  display: flex;
  flex-direction: column;
  animation: drawerIn 0.18s ease-out;
}
.drawer-head {
  height: 58px;
  padding: 0 14px 0 17px;
  border-bottom: 1px solid #2c2c31;
  display: flex;
  align-items: center;
  justify-content: space-between;
}
.drawer-head b {
  font-size: 13px;
}
.drawer-head span {
  font-size: 9px;
  color: #777;
  margin-left: 7px;
}
.drawer-close {
  border: 0;
  background: #242429;
  color: #fff;
  width: 30px;
  height: 30px;
  border-radius: 10px;
}
.drawer-tabs {
  display: flex;
  gap: 3px;
  padding: 10px 10px 0;
  overflow-x: auto;
}
.drawer-tabs::-webkit-scrollbar {
  display: none;
}
.drawer-tab {
  border: 0;
  background: transparent;
  color: #85858d;
  padding: 8px 9px;
  font-size: 10px;
  border-bottom: 2px solid transparent;
  white-space: nowrap;
}
.drawer-tab.on {
  color: #fff;
  border-bottom-color: #fff;
}
.drawer-body {
  padding: 15px;
  overflow: auto;
  flex: 1;
}
.drawer-section {
  border-bottom: 1px solid #2d2d33;
  padding-bottom: 16px;
  margin-bottom: 16px;
}
.drawer-section:last-child {
  border-bottom: 0;
}
.drawer-section h3 {
  font-size: 10px;
  letter-spacing: 0.1em;
  text-transform: uppercase;
  color: #85858e;
  margin: 0 0 10px;
}
/* v0.3.130 — 그룹으로 묶인 편집 탭 안의 항목들(예: 프로필/3인 프로필). 원래는 버튼을
   누르면 팝업이 떴는데, v0.3.133 — 팝업을 열고 닫아야만 다른 항목을 볼 수 있어서
   쓰기 불편하다는 피드백으로 팝업을 없앴습니다. 대신 아래 서브탭 줄(.editor-subtab-row)
   하나만 두고, 서브탭을 누르면 원래 탭 전환처럼 그 자리에서 바로 내용이 바뀝니다
   (drawer-tab과 같은 refreshEditorDrawerTab 부분 갱신 재사용, 모달 없음). 서브탭
   아래 실제 내용은 기존 editorXxx() 함수를 그대로 재사용하므로 .drawer-section/
   .efield/.ebtn 등 기존 다크 톤 스타일을 그대로 물려받습니다. */
.editor-subtab-row {
  display: flex;
  gap: 6px;
  flex-wrap: wrap;
  margin-bottom: 16px;
}
/* v0.3.232 — 폭에 상관없이 특정 지점에서 강제로 줄바꿈시키는 spacer. */
.editor-subtab-break {
  flex-basis: 100%;
  height: 0;
}
.editor-subtab {
  border: 1px solid #2d2d33;
  background: #1b1b1f;
  color: #b6b6bd;
  border-radius: 999px;
  padding: 7px 13px;
  font-size: 11px;
  cursor: pointer;
}
.editor-subtab:hover {
  border-color: #46464e;
}
.editor-subtab.on {
  background: #efeff2;
  border-color: #efeff2;
  color: #151518;
}
.efield {
  display: flex;
  flex-direction: column;
  gap: 5px;
  margin-bottom: 9px;
}
.efield label {
  font-size: 9px;
  color: #94949a;
}
.efield input,
.efield textarea,
.efield select {
  border: 1px solid #34343a;
  background: #202024;
  color: #f3f3f5;
  border-radius: 10px;
  padding: 9px 10px;
  outline: none;
  font-size: 11px;
}
.efield textarea {
  min-height: 72px;
  resize: vertical;
}
.efield input[type="color"] {
  height: 39px;
  padding: 4px;
}
.erow {
  display: grid;
  grid-template-columns: 1fr 1fr;
  gap: 7px;
}
.ebtn {
  border: 1px solid #35353b;
  background: #222227;
  color: #fff;
  border-radius: 10px;
  padding: 9px 10px;
  font-size: 10px;
}
.ebtn:hover {
  background: #2c2c31;
}
.ebtn.primary {
  background: #f5f5f7;
  color: #111;
  border-color: #f5f5f7;
}
.ebtn.danger {
  color: #ff8ca4;
}
.ebtn.full {
  width: 100%;
}
/* v0.3.280 — TRPG 룰 목록의 "새 룰 이름" 입력칸이 스타일 없는 흰 기본 입력창으로
   나오던 문제. 드로어의 다른 입력칸(.efield input)과 같은 색/모양으로 맞추고,
   입력칸은 넓게 늘어나고 추가 버튼만 자기 너비만큼 붙는 형태로 정리했습니다. */
.trpg-rule-add {
  display: flex;
  gap: 7px;
  margin-top: 8px;
}
.trpg-rule-add input {
  flex: 1;
  min-width: 0;
  border: 1px solid #34343a;
  background: #202024;
  color: #f3f3f5;
  border-radius: 10px;
  padding: 9px 10px;
  outline: none;
  font-size: 11px;
}
.trpg-rule-add input::placeholder {
  color: #6b6b72;
}
.trpg-rule-add .ebtn {
  flex: 0 0 auto;
  white-space: nowrap;
}
.eactions {
  display: flex;
  gap: 6px;
  flex-wrap: wrap;
}
.elist {
  display: flex;
  flex-direction: column;
  gap: 7px;
}
.elist-row {
  border: 1px solid #303036;
  background: #1c1c20;
  border-radius: 12px;
  padding: 9px;
  display: flex;
  align-items: center;
  gap: 10px;
}
/* v0.3.229 — 수정/삭제(✎/×) 아이콘 버튼 두 개가 어두운 배경 위에서 8px 간격만으로는
   경계 없이 붙어 보인다는 피드백. 아이콘 버튼 사이만 한 번 더 벌렸습니다. */
.elist-row .icon-ebtn + .icon-ebtn {
  margin-left: 2px;
}
.elist-avatar {
  width: 36px;
  height: 36px;
  border-radius: 10px;
  background: #29292e;
  overflow: hidden;
  display: grid;
  place-items: center;
  font-size: 11px;
  font-weight: 800;
  flex: none;
}
.elist-avatar img {
  width: 100%;
  height: 100%;
  object-fit: cover;
}
.elist-row .grow {
  flex: 1;
  min-width: 0;
}
.elist-row b {
  font-size: 10px;
  display: block;
  white-space: nowrap;
  overflow: hidden;
  text-overflow: ellipsis;
}
.elist-row small {
  font-size: 8px;
  color: #777;
}
.icon-ebtn {
  border: 0;
  background: #2b2b30;
  color: #fff;
  width: 27px;
  height: 27px;
  border-radius: 8px;
}
.check-row {
  display: flex;
  align-items: center;
  justify-content: space-between;
  border: 1px solid #303036;
  border-radius: 10px;
  padding: 9px 10px;
  margin-bottom: 6px;
}
.check-row span {
  font-size: 10px;
}
.check-row input {
  accent-color: #fff;
}
/* v0.3.89 — 탭별 비밀번호 입력 */
.tab-password-row {
  margin: -3px 0 9px;
}
.tab-password-row input {
  width: 100%;
  height: 32px;
  padding: 0 10px;
  border-radius: 8px;
  border: 1px solid #303036;
  background: #19181c;
  color: #f0eef3;
  font: 400 10px/1.4 "Noto Sans KR", sans-serif;
}
.tab-password-row input::placeholder {
  color: #6c6975;
}
.block-editor {
  display: grid;
  grid-template-columns: 1fr auto;
  gap: 6px;
  border: 1px solid #303036;
  border-radius: 11px;
  padding: 8px;
  margin-bottom: 6px;
}
.block-editor input,
.block-editor textarea,
.block-editor select {
  width: 100%;
  border: 1px solid #34343a;
  background: #202024;
  color: #fff;
  border-radius: 8px;
  padding: 7px;
  font-size: 10px;
}
.block-editor textarea {
  min-height: 55px;
}
.block-editor .be-grid {
  display: grid;
  grid-template-columns: 90px 1fr;
  gap: 5px;
  grid-column: 1/-1;
}
.block-controls {
  display: flex;
  flex-direction: column;
  gap: 4px;
}
.block-controls button {
  border: 0;
  background: #2a2a30;
  color: #fff;
  border-radius: 7px;
  width: 26px;
  height: 24px;
  font-size: 10px;
}
.drawer-note {
  font-size: 9px;
  color: #777;
  line-height: 1.6;
}
.image-drop {
  border: 1px dashed #414149;
  border-radius: 12px;
  padding: 12px;
  text-align: center;
  color: #8d8d96;
  font-size: 9px;
}
.modal-back {
  position: fixed;
  z-index: 200;
  inset: 0;
  background: rgba(0, 0, 0, 0.62);
  display: grid;
  place-items: center;
  padding: 20px;
}
.modal {
  width: min(520px, 96vw);
  max-height: 88vh;
  overflow: auto;
  background: #fff;
  color: #161619;
  border-radius: 20px;
  padding: 20px;
  box-shadow: var(--shadow);
}
.modal h2 {
  font:
    400 31px/1 "DM Serif Display",
    serif;
  margin: 0 0 15px;
}
.modal .mf {
  margin-bottom: 10px;
}
.modal label {
  font-size: 9px;
  color: #777;
  display: block;
  margin-bottom: 5px;
}
.modal input,
.modal textarea,
.modal select {
  width: 100%;
  border: 1px solid #ddd;
  border-radius: 10px;
  padding: 9px;
  font-size: 11px;
}
.modal textarea {
  min-height: 80px;
}
.modal-actions {
  display: flex;
  justify-content: flex-end;
  gap: 6px;
  margin-top: 15px;
}
.m-btn {
  border: 1px solid #ddd;
  background: #fff;
  border-radius: 10px;
  padding: 9px 12px;
  font-size: 10px;
}
/* v0.3.223 — "+ 대사 추가" / "붙여넣기로 여러 줄 추가" 버튼을 나란히 배치합니다. */
.tale-line-add-row {
  display: flex;
  gap: 6px;
}
.tale-line-add-row .m-btn {
  flex: 1;
  width: auto;
}
.m-btn.primary {
  background: #151518;
  color: #fff;
  border-color: #151518;
}
.toast {
  position: fixed;
  z-index: 130;
  left: 50%;
  bottom: 24px;
  transform: translateX(-50%);
  background: #111;
  color: #fff;
  border-radius: 999px;
  padding: 9px 13px;
  font-size: 10px;
  box-shadow: 0 8px 25px rgba(0, 0, 0, 0.22);
}
/* v0.3.208 — 삭제 실행취소 토스트. 일반 .toast와 같은 자리(하단 중앙)에 뜨되, 버튼이
   있어서 알약 모양 대신 살짝 각진 모양 + 여유 있는 폭을 씁니다. */
.undo-toast {
  position: fixed;
  z-index: 131;
  left: 50%;
  bottom: 24px;
  transform: translateX(-50%);
  display: flex;
  align-items: center;
  gap: 12px;
  background: #111;
  color: #fff;
  border-radius: 12px;
  padding: 10px 10px 10px 16px;
  font-size: 12px;
  box-shadow: 0 8px 25px rgba(0, 0, 0, 0.28);
  max-width: min(88vw, 360px);
}
.undo-toast span {
  white-space: nowrap;
  overflow: hidden;
  text-overflow: ellipsis;
}
.undo-toast button {
  flex: none;
  border: 0;
  border-radius: 8px;
  background: rgba(255, 255, 255, 0.16);
  color: #fff;
  font-size: 12px;
  font-weight: 700;
  padding: 7px 12px;
  cursor: pointer;
  white-space: nowrap;
}
.undo-toast button:hover {
  background: rgba(255, 255, 255, 0.26);
}
@keyframes drawerIn {
  from {
    transform: translateX(30px);
    opacity: 0;
  }
  to {
    transform: none;
    opacity: 1;
  }
}

@media (max-width: 900px) {
  .site-topbar {
    padding: 0 12px;
  }
  .site-brand span {
    display: none;
  }
  .hero-copy {
    top: 16%;
    width: 40%;
    min-width: 0;
  }
  .hero-half.left .hero-copy {
    left: 4%;
  }
  .hero-half.right .hero-copy {
    right: 4%;
  }
  .hero-name {
    font-size: clamp(32px, 8vw, 62px);
  }
  .hero-subname {
    font-size: 11px;
  }
  .character-art {
    inset: 18% -7% 0;
  }
  .pair-core {
    width: 72vw;
    bottom: 12%;
  }
  /* v0.3.240 — "메인 모바일 최적화": 키워드 배지가 완전히 안 보이던 걸(display:none),
     아래 다른 브레이크포인트에서 이미 준비돼 있던 축소 스타일(edge-keyword 폰트·
     패딩 축소)이 대신 적용되도록 이 줄만 지웠습니다. */
  .home-menu {
    bottom: 2%;
  }
  .profile-stage {
    grid-template-columns: 1fr;
  }
  .profile-visual {
    min-height: 500px;
    border-right: 0;
    border-bottom: 1px solid var(--line);
  }
  .profile-info {
    padding: 30px 22px;
  }
  .profile-blocks {
    grid-template-columns: 1fr;
  }
  .pblock:nth-child(even) {
    padding-left: 0;
    border-left: 0;
  }
  .compare-top {
    grid-template-columns: 1fr;
  }
  .compare-stage {
    grid-template-columns: 1fr 1fr;
  }
  .compare-center {
    grid-column: 1/-1;
    grid-row: 2;
  }
  .compare-art {
    min-height: 380px;
  }
  .compare-art.left-art {
    grid-column: 1;
  }
  .compare-art.right-art {
    grid-column: 2;
  }
  .to-each {
    grid-template-columns: 1fr;
  }
  .relation-hero {
    grid-template-columns: 1fr;
  }
  .relation-photo {
    min-height: 420px;
  }
  .relation-copy {
    padding: 34px 25px;
  }
  .diagram-board {
    height: 560px;
  }
}
@media (max-width: 580px) {
  .home-page {
    min-height: 860px;
  }
  .hero-half {
    width: 100%;
    height: 58%;
    top: auto;
    bottom: 0;
  }
  .hero-half.left {
    left: -22%;
  }
  .hero-half.right {
    right: -22%;
  }
  .hero-copy {
    top: -50%;
    width: 44%;
  }
  .hero-half.left .hero-copy {
    left: 24%;
  }
  .hero-half.right .hero-copy {
    right: 24%;
  }
  .character-art {
    inset: 7% -2% 0;
  }
  .pair-core {
    bottom: 18%;
    width: 84vw;
  }
  .home-menu {
    bottom: 4%;
  }
  .feature-dot {
    width: 42px;
    height: 42px;
    border-radius: 13px;
  }
  .hero-tags {
    gap: 4px;
  }
  .hero-tag {
    font-size: 8px;
    padding: 5px 6px;
  }
  .inner-page,
  .compare-page,
  .roster-page {
    padding-left: 16px;
    padding-right: 16px;
  }
  .page-head {
    align-items: flex-start;
    flex-direction: column;
  }
  .page-actions {
    justify-content: flex-start;
  }
  .profile-visual {
    min-height: 430px;
  }
  .profile-name {
    font-size: 48px;
  }
  .mini-player audio {
    width: 130px;
  }
  .compare-card {
    grid-template-columns: 65px 1fr;
    padding: 14px;
    border-radius: 20px;
  }
  .compare-card.righty {
    grid-template-columns: 1fr 65px;
  }
  .compare-avatar {
    width: 65px;
    height: 65px;
  }
  .compare-card h2 {
    font-size: 23px;
  }
  .compare-stage {
    min-height: 0;
  }
  .compare-art {
    min-height: 280px;
  }
  .memory-grid {
    grid-template-columns: 1fr 1fr;
  }
  .compare-center {
    padding: 18px 0;
  }
  .roster-grid {
    grid-template-columns: repeat(2, minmax(0, 1fr));
    gap: 9px;
  }
  .roster-card {
    height: 290px;
  }
}
[data-inline-entity],
[data-image-entity] {
  outline: 1px dashed rgba(255, 255, 255, 0.55) !important;
  outline-offset: 4px;
}
.inner-page [data-inline-entity],
.inner-page [data-image-entity],
.compare-page [data-inline-entity],
.compare-page [data-image-entity] {
  outline-color: rgba(20, 20, 20, 0.28) !important;
}
[data-inline-entity]:hover,
[data-image-entity]:hover {
  outline-style: solid !important;
}
[data-image-entity] {
  cursor: pointer;
}
.relation-page .page-title,
.relation-page .page-eyebrow {
  color: #fff;
}
.relation-page .light-btn {
  color: #fff;
  border-color: rgba(255, 255, 255, 0.22);
  background: rgba(255, 255, 255, 0.06);
}
.relation-page .light-btn:hover,
.relation-page .light-btn.on {
  background: #fff;
  color: #111;
}
.compare-profile-select {
  margin-top: 9px;
  border: 1px solid var(--line);
  border-radius: 999px;
  background: #fff;
  padding: 5px 9px;
  font-size: 9px;
  max-width: 160px;
}
.righty .compare-profile-select {
  margin-left: auto;
}

/* ===== lope v0.3.2 visual reset ===== */
/* MAIN: no dotted/grid decoration. Character art is the focus. */
.home-page {
  background:
    radial-gradient(ellipse at 50% 42%, rgba(255, 255, 255, 0.055), transparent 38%),
    linear-gradient(90deg, #090a0d 0%, #131419 34%, #16161a 50%, #111217 66%, #08090b 100%);
}
.home-page:before,
.home-page:after {
  display: none !important;
}
.hero-half {
  overflow: hidden;
}
.hero-half.left:after,
.hero-half.right:after {
  content: "";
  position: absolute;
  inset: 0;
  pointer-events: none;
  z-index: 3;
}
.hero-half.left:after {
  background: linear-gradient(90deg, rgba(0, 0, 0, 0.55), transparent 45%, rgba(0, 0, 0, 0.05));
}
.hero-half.right:after {
  background: linear-gradient(-90deg, rgba(0, 0, 0, 0.55), transparent 45%, rgba(0, 0, 0, 0.05));
}
.hero-art {
  inset: 5% 3% 0;
  transform: translate(var(--art-x, 0%), var(--art-y, 0%)) scale(var(--art-scale, 1));
  transform-origin: 50% 100%;
  z-index: 2;
}
.hero-art img {
  height: 100%;
  width: 100%;
  object-fit: contain;
  object-position: center bottom;
  filter: drop-shadow(0 34px 40px rgba(0, 0, 0, 0.42));
}

/* v0.3.2 — pull the two main character images closer to the center.
   The user-controlled X/Y/scale transform still applies on top of this baseline placement. */
@media (min-width: 901px) {
  .hero-half.left .hero-art {
    left: 18%;
    right: -12%;
  }
  .hero-half.right .hero-art {
    left: -12%;
    right: 18%;
  }
}
.hero-copy {
  z-index: 7;
  top: 16.5%;
  width: 34%;
  min-width: 260px;
}
.hero-half.left .hero-copy {
  left: 4.6%;
}
.hero-half.right .hero-copy {
  right: 4.6%;
}
.hero-kicker {
  font-size: 11px;
  letter-spacing: 0.015em;
  opacity: 0.72;
}
.hero-name {
  font-size: clamp(43px, 5.1vw, 88px);
  line-height: 0.9;
  letter-spacing: -0.07em;
}
.hero-subname {
  font-size: 13px;
  margin-top: 10px;
}
.hero-tags {
  margin-top: 13px;
  gap: 5px;
}
.hero-tag {
  /* v0.3.120 — 이름 아래 키워드 태그, 사용자 요청으로 1.5배 확대(9px→13.5px,
     패딩도 같은 비율로) */
  padding: 9px 12px;
  border-radius: 999px;
  background: color-mix(in srgb, var(--c), #111 15%);
  font-size: 13.5px;
  box-shadow: none;
}
.edge-keywords {
  bottom: 10.5%;
  z-index: 9;
}
.edge-keyword {
  /* v0.3.120 — 화면 좌우 하단 키워드, 사용자 요청으로 1.5배 확대(10px→15px,
     min-width·패딩도 같은 비율로) */
  min-width: 144px;
  padding: 13.5px 27px;
  font-size: 15px;
  background: color-mix(in srgb, var(--c), #151515 7%);
}
.pair-core {
  bottom: 9.5%;
  width: min(430px, 36vw);
  z-index: 13;
}
.pair-kicker {
  opacity: 0.46;
}
.pair-title {
  font-size: clamp(26px, 2.65vw, 44px);
}
.home-menu {
  bottom: 1.3%;
  z-index: 15;
}
.feature-dot {
  width: 42px;
  height: 42px;
  border-radius: 50%;
  background: rgba(11, 11, 14, 0.5);
}

/* PROFILE v2 — game-character-page inspired, not a database form */
.profile-page-v2 {
  min-height: 100vh;
  background: #f4f1ed;
  color: #17161a;
  padding: 72px 3vw 28px;
  position: relative;
  overflow: hidden;
}
.profile-page-v2:before {
  content: "";
  position: absolute;
  inset: 0;
  background:
    linear-gradient(110deg, color-mix(in srgb, var(--c), #fff 92%), transparent 42%),
    linear-gradient(180deg, #f8f6f2, #eeebe6);
  pointer-events: none;
}
.profile-v2-wrap {
  position: relative;
  z-index: 2;
  max-width: 1500px;
  margin: 0 auto;
}
.profile-v2-nav {
  height: 42px;
  display: flex;
  align-items: center;
  justify-content: flex-end;
  gap: 7px;
  margin-bottom: 9px;
}
.profile-v2-stage {
  min-height: calc(100vh - 150px);
  display: grid;
  grid-template-columns: minmax(410px, 0.95fr) minmax(560px, 1.05fr);
  position: relative;
  border: 1px solid rgba(18, 18, 22, 0.1);
  background: rgba(255, 255, 255, 0.36);
  box-shadow: 0 25px 80px rgba(28, 21, 27, 0.07);
  overflow: hidden;
}
.profile-v2-artzone {
  position: relative;
  min-height: 780px;
  background: linear-gradient(
    145deg,
    color-mix(in srgb, var(--c), #fff 84%),
    rgba(255, 255, 255, 0.22) 58%,
    rgba(0, 0, 0, 0.025)
  );
  overflow: hidden;
  border-right: 1px solid rgba(18, 18, 22, 0.09);
}
.profile-v2-artzone:after {
  content: "";
  position: absolute;
  left: 7%;
  right: 7%;
  bottom: 4.2%;
  height: 1px;
  background: rgba(20, 18, 22, 0.18);
  z-index: 2;
}
.profile-v2-index {
  position: absolute;
  top: 6%;
  left: 7%;
  font:
    400 clamp(100px, 11vw, 180px)/1 "Georgia",
    serif;
  color: color-mix(in srgb, var(--c), transparent 83%);
  letter-spacing: -0.07em;
  z-index: 1;
}
.profile-v2-vertical {
  position: absolute;
  left: 22px;
  top: 50%;
  transform: translate(-50%, -50%) rotate(-90deg);
  transform-origin: center;
  white-space: nowrap;
  font-size: 8px;
  letter-spacing: 0.32em;
  color: rgba(23, 22, 26, 0.36);
  z-index: 3;
}
.profile-v2-halo {
  position: absolute;
  width: 62%;
  aspect-ratio: 1;
  border: 1px solid color-mix(in srgb, var(--c), transparent 72%);
  border-radius: 50%;
  left: 19%;
  top: 18%;
  z-index: 1;
}
.profile-v2-halo:before {
  content: "";
  position: absolute;
  inset: 11%;
  border: 1px solid color-mix(in srgb, var(--c), transparent 82%);
  border-radius: 50%;
}
.profile-full-art {
  position: absolute;
  left: 7%;
  right: 7%;
  top: 5%;
  bottom: 4.3%;
  z-index: 4;
  transform: translate(var(--art-x, 0%), var(--art-y, 0%)) scale(var(--art-scale, 1));
  transform-origin: 50% 100%;
  display: flex;
  align-items: flex-end;
  justify-content: center;
}
.profile-full-art img {
  height: 100%;
  width: 100%;
  object-fit: contain;
  object-position: center bottom;
  filter: drop-shadow(0 30px 28px rgba(35, 25, 31, 0.14));
}
.profile-v2-colorstrip {
  position: absolute;
  right: 17px;
  bottom: 20px;
  display: flex;
  flex-direction: column;
  gap: 5px;
  z-index: 5;
}
.profile-v2-colorstrip span {
  width: 9px;
  height: 29px;
  border-radius: 999px;
}
.profile-v2-info {
  padding: 44px clamp(34px, 4.5vw, 74px) 38px;
  min-width: 0;
  position: relative;
  background: rgba(255, 252, 248, 0.69);
  backdrop-filter: blur(5px);
}
.profile-v2-topline {
  display: flex;
  justify-content: space-between;
  gap: 20px;
  font-size: 8px;
  letter-spacing: 0.25em;
  color: #9c9292;
  text-transform: uppercase;
}
.profile-v2-name {
  font:
    600 clamp(52px, 5.1vw, 86px)/0.88 "Georgia",
    serif;
  letter-spacing: -0.055em;
  margin: 14px 0 4px;
  max-width: 780px;
}
.profile-v2-kor {
  font-size: 12px;
  letter-spacing: 0.14em;
  color: #8e8587;
}
.v2-tabs {
  margin: 18px 0 0;
}
.v2-tabs .subtab {
  font-size: 9px;
}
.profile-v2-quote {
  font-family: "Noto Serif KR", serif;
  font-size: 17px;
  line-height: 1.8;
  margin: 28px 0 25px;
  padding: 17px 22px;
  border: 0;
  border-left: 4px solid var(--c);
  background: linear-gradient(90deg, color-mix(in srgb, var(--c), #fff 91%), transparent);
  position: relative;
}
.profile-v2-stats {
  display: grid;
  grid-template-columns: repeat(3, minmax(0, 1fr));
  gap: 8px;
  margin-bottom: 12px;
}
.v2-stat {
  padding: 13px 14px;
  background: #1c1c20;
  color: #fff;
  min-height: 72px;
  display: flex;
  flex-direction: column;
  justify-content: space-between;
}
.v2-stat small {
  font-size: 7px;
  letter-spacing: 0.18em;
  color: #9b9ba1;
}
.v2-stat b {
  font:
    500 22px/1 "Georgia",
    serif;
}
.profile-v2-tags {
  display: flex;
  gap: 6px;
  flex-wrap: wrap;
  margin: 12px 0 18px;
}
.profile-v2-tags span {
  font-size: 9px;
  padding: 6px 9px;
  border-radius: 999px;
  background: color-mix(in srgb, var(--c), #fff 82%);
  border: 1px solid color-mix(in srgb, var(--c), #fff 65%);
}
.profile-v2-content {
  display: grid;
  grid-template-columns: repeat(2, minmax(0, 1fr));
  gap: 9px;
}
.profile-v2-content .wide {
  grid-column: 1/-1;
}
.v2-mini-info,
.v2-about,
.v2-note,
.v2-section-title,
.v2-image-block {
  margin: 0;
  background: rgba(255, 255, 255, 0.58);
  border: 1px solid rgba(27, 24, 28, 0.095);
  padding: 15px 16px;
  min-width: 0;
}
.v2-mini-info small,
.v2-about small,
.v2-note small,
.v2-section-title small {
  display: block;
  font-size: 7px;
  letter-spacing: 0.18em;
  color: #999096;
  margin-bottom: 7px;
}
.v2-mini-info b {
  font:
    500 21px/1.2 "Georgia",
    serif;
}
.v2-mini-info div {
  font-size: 12px;
  line-height: 1.65;
}
.v2-about p,
.v2-note p {
  font-size: 12px;
  line-height: 1.85;
  margin: 0;
  color: #4f494d;
  white-space: pre-wrap;
}
.v2-note {
  background: color-mix(in srgb, var(--c), #fff 94%);
}
.v2-section-title b {
  font:
    500 27px/1.1 "Georgia",
    serif;
}
.v2-image-block {
  padding: 0;
  overflow: hidden;
}
.v2-image-block img,
.v2-image-empty {
  width: 100%;
  height: 220px;
  object-fit: cover;
}
.v2-image-empty {
  display: grid;
  place-items: center;
  background: #ece7e2;
  color: #aaa;
  font-size: 10px;
}
.v2-image-block figcaption {
  font-size: 8px;
  padding: 8px 10px;
  color: #8c8386;
  letter-spacing: 0.12em;
}
.profile-v2-bgm {
  margin-top: 14px;
  display: flex;
  align-items: center;
  gap: 12px;
  border-top: 1px solid rgba(20, 20, 25, 0.1);
  padding-top: 14px;
}
.profile-v2-bgm span {
  font-size: 8px;
  letter-spacing: 0.2em;
}
.profile-v2-bgm audio {
  height: 28px;
  max-width: 280px;
}

/* COMPARE v2 — two full bodies aligned at the feet. */
.compare-v2-page {
  min-height: 100vh;
  background: #f6f4f0;
  color: #18171b;
  padding: 76px 3vw 30px;
  position: relative;
  overflow: hidden;
}
.compare-v2-page:before {
  content: "";
  position: absolute;
  inset: 0;
  background: linear-gradient(
    90deg,
    color-mix(in srgb, var(--a), transparent 92%),
    transparent 28%,
    transparent 72%,
    color-mix(in srgb, var(--b), transparent 92%)
  );
  pointer-events: none;
}
.compare-v2-shell {
  position: relative;
  z-index: 2;
  max-width: 1500px;
  margin: auto;
}
.compare-v2-head {
  display: flex;
  align-items: end;
  justify-content: space-between;
  gap: 20px;
  margin-bottom: 14px;
}
.compare-v2-head small {
  font-size: 8px;
  letter-spacing: 0.24em;
  color: #989093;
}
.compare-v2-head h1 {
  font:
    600 clamp(39px, 4.4vw, 70px)/0.9 "Georgia",
    serif;
  letter-spacing: -0.05em;
  margin: 7px 0 0;
}
.compare-v2-picks {
  display: flex;
  gap: 5px;
  flex-wrap: wrap;
  justify-content: flex-end;
}
.compare-v2-summaryrow {
  display: grid;
  grid-template-columns: 1fr 1fr;
  gap: 10px;
  position: relative;
  z-index: 8;
}
.compare-v2-summary {
  display: grid;
  grid-template-columns: 84px 1fr;
  gap: 15px;
  padding: 17px;
  background: rgba(255, 255, 255, 0.76);
  border: 1px solid color-mix(in srgb, var(--c), #aaa 70%);
  box-shadow: 0 12px 34px rgba(38, 30, 34, 0.05);
}
.compare-v2-summary.right {
  grid-template-columns: 84px 1fr;
}
.compare-v2-avatar {
  width: 84px;
  height: 84px;
  border-radius: 50%;
  overflow: hidden;
  border: 5px solid color-mix(in srgb, var(--c), #fff 56%);
  background: #fff;
  display: grid;
  place-items: center;
  font-size: 24px;
  font-weight: 800;
}
.compare-v2-avatar img {
  width: 100%;
  height: 100%;
  object-fit: cover;
}
.compare-v2-summary-copy small {
  font-size: 7px;
  letter-spacing: 0.2em;
  color: var(--c);
}
.compare-v2-summary-copy h2 {
  font:
    600 28px/1 "Georgia",
    serif;
  margin: 3px 0;
}
.compare-v2-summary-copy p {
  font-size: 9px;
  color: #80787c;
  margin: 0 0 8px;
}
.compare-v2-tags {
  display: flex;
  gap: 5px;
  flex-wrap: wrap;
}
.compare-v2-tags span {
  font-size: 8px;
  padding: 5px 7px;
  background: #25242a;
  color: #fff;
  border-radius: 999px;
}
.compare-v2-lines {
  margin-top: 9px;
}
.compare-v2-lines div {
  display: flex;
  align-items: center;
  gap: 6px;
  font-size: 8px;
}
.compare-v2-lines b {
  min-width: 64px;
  font-weight: 600;
}
.compare-v2-lines i {
  height: 1px;
  background: #c8c0bd;
  flex: 1;
}
.compare-v2-lines span {
  min-width: 34px;
  text-align: right;
}
.compare-v2-stage {
  height: 660px;
  position: relative;
  margin-top: 10px;
  overflow: hidden;
  border: 1px solid rgba(25, 22, 27, 0.095);
  background: rgba(255, 255, 255, 0.48);
}
.compare-v2-stage:after {
  content: "";
  position: absolute;
  left: 2%;
  right: 2%;
  bottom: 4.2%;
  height: 1px;
  background: rgba(22, 20, 24, 0.16);
  z-index: 3;
}
.compare-v2-art {
  position: absolute;
  top: 3%;
  bottom: 4.2%;
  width: 34%;
  z-index: 4;
  display: flex;
  align-items: flex-end;
  justify-content: center;
  transform: translate(var(--art-x, 0%), var(--art-y, 0%)) scale(var(--art-scale, 1));
  transform-origin: 50% 100%;
}
.compare-v2-art.left {
  left: 0;
}
.compare-v2-art.right {
  right: 0;
}
.compare-v2-art img {
  height: 100%;
  width: 100%;
  object-fit: contain;
  object-position: center bottom;
  filter: drop-shadow(0 24px 22px rgba(35, 27, 33, 0.12));
}
.compare-v2-center {
  position: absolute;
  left: 31%;
  right: 31%;
  top: 8%;
  bottom: 7%;
  z-index: 7;
  display: flex;
  flex-direction: column;
  justify-content: center;
  gap: 10px;
}
.compare-v2-rel {
  text-align: center;
  padding: 24px 20px;
  background: rgba(255, 255, 255, 0.84);
  border: 1px solid rgba(20, 18, 22, 0.1);
  box-shadow: 0 18px 48px rgba(40, 31, 36, 0.06);
}
.compare-v2-rel small {
  font-size: 7px;
  letter-spacing: 0.25em;
  color: #999;
}
.compare-v2-rel h3 {
  font:
    600 34px/1 "Georgia",
    serif;
  margin: 7px 0 10px;
}
.compare-v2-rel p {
  font-family: "Noto Serif KR", serif;
  font-size: 11px;
  line-height: 1.85;
  color: #6b6468;
  margin: 0;
}
.compare-v2-notes {
  display: grid;
  grid-template-columns: 1fr 1fr;
  gap: 8px;
}
.compare-v2-notes > div {
  background: rgba(255, 255, 255, 0.76);
  border-top: 3px solid var(--c);
  padding: 12px;
}
.compare-v2-notes b {
  font-size: 8px;
  color: var(--c);
}
.compare-v2-notes p {
  font-size: 10px;
  line-height: 1.65;
  margin: 7px 0 0;
  color: #686166;
}

/* editor controls for art placement */
.range-field {
  margin: 12px 0;
}
.range-field label {
  display: flex;
  justify-content: space-between;
  align-items: center;
  color: #9a9aa2;
  font-size: 9px;
  margin-bottom: 5px;
}
.range-field label b {
  font-weight: 600;
  color: #fff;
}
.range-field input {
  width: 100%;
  accent-color: #fff;
}
.elist-row.active {
  border-color: #66666f;
  background: #24242a;
}

/* no separate public RELATION folder/page — relation data is embedded in HOME/COMPARE */

@media (max-width: 1000px) {
  .profile-v2-stage {
    grid-template-columns: 42% 58%;
  }
  .profile-v2-artzone {
    min-height: 690px;
  }
  .profile-v2-info {
    padding: 34px 30px;
  }
  .profile-v2-name {
    font-size: 54px;
  }
  .compare-v2-stage {
    height: 590px;
  }
  .compare-v2-center {
    left: 28%;
    right: 28%;
  }
  .compare-v2-art {
    width: 38%;
  }
}
@media (max-width: 760px) {
  .profile-page-v2,
  .compare-v2-page {
    padding-left: 13px;
    padding-right: 13px;
  }
  .profile-v2-nav {
    justify-content: flex-start;
    overflow: auto;
  }
  .profile-v2-stage {
    grid-template-columns: 1fr;
  }
  .profile-v2-artzone {
    min-height: 580px;
    border-right: 0;
    border-bottom: 1px solid rgba(20, 18, 22, 0.09);
  }
  .profile-v2-info {
    padding: 28px 20px;
  }
  .profile-v2-name {
    font-size: 49px;
  }
  .profile-v2-content {
    grid-template-columns: 1fr;
  }
  .profile-v2-content .wide {
    grid-column: 1;
  }
  .profile-v2-stats {
    grid-template-columns: repeat(3, 1fr);
  }
  .compare-v2-head {
    align-items: flex-start;
    flex-direction: column;
  }
  .compare-v2-picks {
    justify-content: flex-start;
  }
  .compare-v2-summaryrow {
    grid-template-columns: 1fr;
  }
  .compare-v2-stage {
    height: 730px;
  }
  .compare-v2-art {
    top: 4%;
    height: 48%;
    bottom: auto;
    width: 49%;
  }
  .compare-v2-art.left {
    left: 0;
  }
  .compare-v2-art.right {
    right: 0;
  }
  .compare-v2-center {
    left: 4%;
    right: 4%;
    top: auto;
    bottom: 5%;
    height: 43%;
  }
  .compare-v2-stage:after {
    top: 50%;
    bottom: auto;
  }
}

/* =========================================================
   LOPE v0.3.3 — profile / relation / timeline rework
   Profile is a finished character page first, editor second.
   ========================================================= */
.profile-page-v3 {
  min-height: 100vh;
  background: #f5f3ef;
  color: #19181d;
  padding: 62px 24px 34px;
  overflow: hidden;
}
.profile-v3-wrap {
  width: min(1540px, 100%);
  height: calc(100vh - 96px);
  min-height: 760px;
  margin: 0 auto;
  display: grid;
  grid-template-columns: 116px minmax(430px, 0.92fr) minmax(500px, 1.08fr);
  grid-template-rows: minmax(0, 1fr) 72px;
  position: relative;
  background: rgba(255, 255, 255, 0.6);
  border: 1px solid rgba(30, 25, 30, 0.1);
  box-shadow: 0 24px 70px rgba(36, 27, 33, 0.08);
  overflow: hidden;
}
.outfit-rail {
  grid-column: 1;
  grid-row: 1/3;
  background: #18181c;
  color: #fff;
  padding: 22px 12px 18px;
  display: flex;
  flex-direction: column;
  align-items: center;
  gap: 10px;
  overflow: auto;
  scrollbar-width: none;
  z-index: 8;
}
.outfit-rail::-webkit-scrollbar {
  display: none;
}
.outfit-rail-title {
  font:
    600 9px/1 Arial,
    sans-serif;
  letter-spacing: 0.3em;
  color: #8f8f98;
  margin: 4px 0 8px;
}
.outfit-thumb {
  width: 86px;
  min-height: 112px;
  border: 1px solid #39393f;
  background: #24242a;
  color: #fff;
  padding: 0;
  overflow: hidden;
  position: relative;
  cursor: pointer;
  transition: 0.18s;
  flex: none;
}
.outfit-thumb:hover {
  transform: translateY(-2px);
  border-color: #7b7b84;
}
.outfit-thumb.on {
  border-color: var(--c);
  box-shadow: inset 3px 0 0 var(--c);
}
.outfit-thumb img {
  width: 100%;
  height: 84px;
  object-fit: contain;
  object-position: center bottom;
  background: linear-gradient(180deg, #34343a, #1c1c21);
}
.outfit-thumb > span {
  height: 84px;
  display: grid;
  place-items: center;
  font:
    700 22px/1 Georgia,
    serif;
}
.outfit-thumb b {
  display: block;
  font:
    600 7px/1.2 Arial,
    sans-serif;
  letter-spacing: 0.11em;
  padding: 8px 4px;
  color: #c8c8cf;
  white-space: nowrap;
  overflow: hidden;
  text-overflow: ellipsis;
}
.outfit-add {
  width: 86px;
  height: 46px;
  border: 1px dashed #55555d;
  background: transparent;
  color: #aaa;
  border-radius: 0;
  cursor: pointer;
  font-size: 18px;
}
.profile-v3-visual {
  grid-column: 2;
  grid-row: 1;
  position: relative;
  overflow: hidden;
  background: linear-gradient(145deg, color-mix(in srgb, var(--c), #fff 87%) 0%, #ebe9e5 58%, #e2ded9 100%);
}
.profile-v3-visual:before {
  content: "";
  position: absolute;
  width: 67%;
  aspect-ratio: 1;
  border: 1px solid color-mix(in srgb, var(--c), transparent 70%);
  border-radius: 50%;
  left: 16%;
  top: 13%;
}
.profile-v3-visual:after {
  content: "";
  position: absolute;
  left: 7%;
  right: 7%;
  bottom: 5%;
  height: 1px;
  background: rgba(18, 16, 20, 0.18);
}
.profile-v3-index {
  position: absolute;
  right: 4%;
  top: 2%;
  font:
    600 clamp(110px, 10vw, 170px)/1 Georgia,
    serif;
  letter-spacing: -0.08em;
  color: color-mix(in srgb, var(--c), transparent 86%);
  z-index: 1;
}
.profile-v3-caption {
  position: absolute;
  left: 18px;
  top: 50%;
  transform: translate(-50%, -50%) rotate(-90deg);
  font:
    600 7px/1 Arial,
    sans-serif;
  letter-spacing: 0.3em;
  color: rgba(22, 20, 23, 0.36);
  white-space: nowrap;
  z-index: 6;
}
.profile-v3-art {
  position: absolute;
  inset: 3% 3% 5%;
  display: flex;
  align-items: flex-end;
  justify-content: center;
  transform: translate(var(--art-x, 0%), var(--art-y, 0%)) scale(var(--art-scale, 1));
  transform-origin: 50% 100%;
  z-index: 4;
}
.profile-v3-art img {
  height: 100%;
  width: 100%;
  object-fit: contain;
  object-position: center bottom;
  filter: drop-shadow(0 28px 26px rgba(30, 23, 27, 0.13));
}
.profile-v3-nameblock {
  position: absolute;
  left: 7%;
  bottom: 7%;
  z-index: 7;
  text-shadow: 0 1px rgba(255, 255, 255, 0.5);
}
.profile-v3-nameblock small {
  font:
    700 7px/1 Arial,
    sans-serif;
  letter-spacing: 0.24em;
  color: var(--c);
}
.profile-v3-nameblock h1 {
  font:
    600 clamp(42px, 4vw, 72px)/0.88 Georgia,
    serif;
  letter-spacing: -0.055em;
  margin: 6px 0 5px;
  max-width: 520px;
}
.profile-v3-nameblock span {
  font-size: 10px;
  letter-spacing: 0.16em;
  color: #716b70;
}
.profile-v3-detail {
  grid-column: 3;
  grid-row: 1;
  background: rgba(255, 253, 250, 0.94);
  padding: 34px 38px 24px;
  min-width: 0;
  display: flex;
  flex-direction: column;
  overflow: hidden;
}
.profile-v3-top {
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: 18px;
  border-bottom: 1px solid rgba(25, 22, 28, 0.1);
  padding-bottom: 13px;
}
.profile-v3-top > div:first-child {
  display: flex;
  flex-direction: column;
  gap: 3px;
}
.profile-v3-top small {
  font:
    600 7px/1 Arial,
    sans-serif;
  letter-spacing: 0.2em;
  color: #aaa0a5;
}
.profile-v3-top b {
  font:
    600 16px/1 Georgia,
    serif;
}
.profile-subtabs-v3 {
  display: flex;
  gap: 5px;
  flex-wrap: wrap;
  justify-content: flex-end;
}
.profile-subtabs-v3 .subtab {
  padding: 7px 10px;
  border: 1px solid #d9d3d1;
  background: transparent;
  color: #81797d;
  font-size: 7px;
}
.profile-subtabs-v3 .subtab.on {
  border-color: var(--c);
  background: var(--c);
  color: #fff;
}
.profile-detail-tabs {
  display: grid;
  grid-template-columns: repeat(4, 1fr);
  margin: 19px 0 17px;
  border-bottom: 1px solid #ddd6d3;
}
.profile-detail-tabs button {
  border: 0;
  background: transparent;
  padding: 10px 3px 9px;
  font:
    700 8px/1 Arial,
    sans-serif;
  letter-spacing: 0.14em;
  color: #aaa;
  position: relative;
  cursor: pointer;
}
.profile-detail-tabs button.on {
  color: #222;
}
.profile-detail-tabs button.on:after {
  content: "";
  height: 2px;
  background: var(--c);
  position: absolute;
  left: 15%;
  right: 15%;
  bottom: -1px;
}
.profile-detail-panel {
  min-height: 0;
  flex: 1;
  overflow: auto;
  padding-right: 4px;
  scrollbar-width: thin;
  scrollbar-color: #cbc2c0 transparent;
}
.profile-detail-inner {
  display: flex;
  flex-direction: column;
  gap: 11px;
}
.profile-v3-quote {
  font:
    500 18px/1.72 "Noto Serif KR",
    serif;
  margin: 0;
  padding: 20px 21px;
  background: linear-gradient(100deg, color-mix(in srgb, var(--c), #fff 91%), rgba(255, 255, 255, 0.3));
  border: 0;
  border-left: 4px solid var(--c);
}
.profile-v3-stats {
  display: grid;
  grid-template-columns: repeat(4, minmax(0, 1fr));
  gap: 7px;
}
.profile-v3-stats > div {
  min-height: 66px;
  background: #202025;
  color: #fff;
  padding: 11px 12px;
  display: flex;
  flex-direction: column;
  justify-content: space-between;
}
.profile-v3-stats small {
  font:
    600 6px/1 Arial,
    sans-serif;
  letter-spacing: 0.18em;
  color: #93939a;
}
.profile-v3-stats b {
  font:
    500 19px/1 Georgia,
    serif;
}
.profile-v3-tags {
  display: flex;
  gap: 6px;
  flex-wrap: wrap;
}
.profile-v3-tags span {
  font-size: 8px;
  padding: 6px 8px;
  border: 1px solid color-mix(in srgb, var(--c), #aaa 55%);
  border-radius: 999px;
  color: #514a50;
  background: #fff;
}
.profile-v3-content {
  display: grid;
  grid-template-columns: repeat(2, minmax(0, 1fr));
  gap: 8px;
}
.profile-v3-content .wide {
  grid-column: 1/-1;
}
.profile-v3-content .v2-mini-info,
.profile-v3-content .v2-about,
.profile-v3-content .v2-note,
.profile-v3-content .v2-section-title,
.profile-v3-content .v2-image-block {
  background: #fff;
  border: 1px solid #e2dcda;
  box-shadow: none;
}
.profile-note-sheet {
  padding: 25px 26px;
  border: 1px solid #ded7d4;
  background: #fff;
  min-height: 100%;
}
.profile-note-sheet > small,
.motif-panel > h3 {
  font:
    700 7px/1 Arial,
    sans-serif;
  letter-spacing: 0.24em;
  color: var(--c);
}
.profile-note-sheet h3 {
  font:
    600 34px/1 Georgia,
    serif;
  margin: 8px 0 13px;
}
.profile-note-sheet > p {
  font:
    400 13px/1.9 "Noto Serif KR",
    serif;
  color: #5d565a;
  margin: 0 0 22px;
}
.note-line {
  display: grid;
  grid-template-columns: 32px 1fr;
  gap: 12px;
  padding: 13px 0;
  border-top: 1px solid #ece6e3;
}
.note-line b {
  font:
    500 18px/1 Georgia,
    serif;
  color: color-mix(in srgb, var(--c), #aaa 42%);
}
.note-line span {
  font-size: 11px;
  line-height: 1.7;
  color: #625a5f;
}
.motif-panel {
  min-height: 100%;
  background: #242329;
  color: #fff;
  padding: 28px;
}
.motif-colors {
  display: flex;
  gap: 6px;
  margin-bottom: 25px;
}
.motif-colors span {
  width: 42px;
  height: 9px;
}
.motif-panel h3 {
  color: #a9a4ad;
  margin: 0 0 16px;
}
.motif-keywords {
  display: flex;
  flex-wrap: wrap;
  gap: 7px;
}
.motif-keywords span {
  border: 1px solid #47464e;
  padding: 7px 9px;
  font-size: 8px;
}
.motif-rule {
  height: 1px;
  background: #44424a;
  margin: 25px 0;
}
.motif-panel p {
  font-family: "Noto Serif KR", serif;
  font-size: 13px;
  line-height: 1.8;
  color: #d1ccd1;
}
.profile-mini-gallery {
  display: grid;
  grid-template-columns: repeat(2, 1fr);
  grid-auto-rows: 190px;
  gap: 8px;
}
.profile-mini-gallery figure {
  margin: 0;
  position: relative;
  overflow: hidden;
  background: #ece7e4;
}
.profile-mini-gallery figure.big {
  grid-row: span 2;
}
.profile-mini-gallery img {
  width: 100%;
  height: 100%;
  object-fit: cover;
  object-position: center 25%;
}
.profile-mini-gallery figcaption {
  position: absolute;
  left: 8px;
  bottom: 8px;
  background: rgba(15, 15, 18, 0.78);
  color: #fff;
  padding: 5px 7px;
  font:
    600 6px/1 Arial,
    sans-serif;
  letter-spacing: 0.12em;
}
.profile-character-switch {
  grid-column: 2/4;
  grid-row: 2;
  display: grid;
  grid-template-columns: 1fr 1fr;
  background: #17171b;
  border-top: 1px solid #2c2c32;
  z-index: 10;
}
.profile-character-switch.single {
  grid-template-columns: 1fr;
}
.profile-switch-tab {
  border: 0;
  background: transparent;
  color: #777780;
  position: relative;
  display: flex;
  align-items: center;
  justify-content: center;
  gap: 10px;
  cursor: pointer;
}
.profile-switch-tab + .profile-switch-tab {
  border-left: 1px solid #303038;
}
.profile-switch-tab span {
  font:
    600 12px/1 Georgia,
    serif;
  letter-spacing: 0.08em;
}
.profile-switch-tab small {
  font-size: 7px;
  letter-spacing: 0.1em;
}
.profile-switch-tab.on {
  color: #fff;
}
.profile-switch-tab.on:before {
  content: "";
  position: absolute;
  top: 0;
  left: 7%;
  right: 7%;
  height: 3px;
  background: var(--c, #fff);
}
.outfit-name-input {
  width: 100%;
  border: 0;
  background: transparent;
  color: #fff;
  font:
    600 8px/1 Arial,
    sans-serif;
  letter-spacing: 0.06em;
}
.elist-avatar img {
  width: 100%;
  height: 100%;
  object-fit: cover;
}

/* Reference-like two-character relation profile */
.relation-compare-page {
  min-height: 100vh;
  background: #f4f2ef;
  color: #19181c;
  padding: 64px 26px 30px;
  position: relative;
  overflow: hidden;
}
.relation-compare-page:before {
  content: "";
  position: absolute;
  inset: 0;
  background: linear-gradient(
    90deg,
    color-mix(in srgb, var(--a), transparent 92%),
    transparent 27%,
    transparent 73%,
    color-mix(in srgb, var(--b), transparent 92%)
  );
  pointer-events: none;
}
.relation-edge-art {
  position: absolute;
  top: 12%;
  bottom: 2%;
  width: 25vw;
  max-width: 410px;
  z-index: 1;
  display: flex;
  align-items: flex-end;
  justify-content: center;
  transform: translate(var(--art-x, 0%), var(--art-y, 0%)) scale(var(--art-scale, 1));
  transform-origin: 50% 100%;
  pointer-events: none;
}
.relation-edge-art.left {
  left: -4.5vw;
}
.relation-edge-art.right {
  right: -4.5vw;
}
.relation-edge-art img {
  width: 100%;
  height: 100%;
  object-fit: contain;
  object-position: center bottom;
  filter: drop-shadow(0 22px 24px rgba(25, 20, 25, 0.12));
}
.relation-edge-art.right img {
  transform: scaleX(-1);
}
.relation-compare-core {
  width: min(980px, 66vw);
  margin: 0 auto;
  position: relative;
  z-index: 3;
}
.relation-compare-head {
  text-align: center;
  margin: 0 auto 14px;
  max-width: 650px;
}
.relation-compare-head small {
  font:
    700 7px/1 Arial,
    sans-serif;
  letter-spacing: 0.26em;
  color: #999097;
}
.relation-compare-head h1 {
  font:
    600 clamp(34px, 3.5vw, 56px)/0.95 Georgia,
    serif;
  letter-spacing: -0.04em;
  margin: 7px 0 8px;
}
.relation-compare-head p {
  font:
    400 10px/1.7 "Noto Serif KR",
    serif;
  color: #847c80;
  margin: 0;
}
.relation-profile-grid {
  display: grid;
  grid-template-columns: 1fr 1fr;
  gap: 10px;
}
.relation-profile-card {
  min-height: 196px;
  border: 1px solid color-mix(in srgb, var(--c), #b7b0b4 58%);
  border-radius: 18px;
  background: rgba(255, 255, 255, 0.84);
  display: grid;
  grid-template-columns: 104px 1fr;
  gap: 16px;
  padding: 18px 19px;
  align-items: start;
}
.relation-avatar {
  width: 94px;
  height: 94px;
  border-radius: 50%;
  overflow: hidden;
  background: #eee;
  display: grid;
  place-items: center;
  border: 5px solid color-mix(in srgb, var(--c), #fff 56%);
  font:
    700 20px/1 Georgia,
    serif;
}
.relation-avatar img {
  width: 100%;
  height: 100%;
  object-fit: cover;
}
.relation-card-copy h2 {
  font:
    600 25px/1 Georgia,
    serif;
  margin: 5px 0 3px;
}
.relation-card-copy > span {
  font-size: 8px;
  letter-spacing: 0.11em;
  color: #9a9196;
}
.relation-tags {
  display: flex;
  flex-wrap: wrap;
  gap: 5px;
  margin: 12px 0;
}
.relation-tags b {
  background: #26252b;
  color: #fff;
  border-radius: 999px;
  padding: 6px 8px;
  font-size: 7px;
  font-weight: 500;
}
.relation-lines {
  display: flex;
  flex-direction: column;
  gap: 5px;
}
.relation-lines div {
  display: flex;
  align-items: center;
  gap: 5px;
  font-size: 7px;
}
.relation-lines strong {
  min-width: 70px;
  font-weight: 500;
}
.relation-lines i {
  height: 1px;
  background: #c9c1c0;
  flex: 1;
}
.relation-lines em {
  font-style: normal;
  min-width: 32px;
  text-align: right;
}
.relation-lines div:after {
  content: "";
  width: 11px;
  height: 11px;
  border-radius: 50%;
  background: var(--c);
  margin-left: 4px;
}
.relation-direction-grid {
  display: grid;
  grid-template-columns: 1fr 1fr;
  gap: 10px;
  margin-top: 9px;
}
.relation-direction-grid > div {
  min-height: 98px;
  border: 1px solid #dcd5d3;
  border-radius: 16px;
  background: rgba(255, 255, 255, 0.82);
  padding: 15px 18px;
  text-align: center;
}
.relation-direction-grid b {
  font-size: 8px;
  color: var(--c);
  letter-spacing: 0.08em;
}
.relation-direction-grid p {
  font:
    400 10px/1.7 "Noto Serif KR",
    serif;
  color: #5d565a;
  margin: 8px 0 0;
  white-space: pre-wrap;
}
.relation-content-tabs {
  display: flex;
  justify-content: center;
  gap: 26px;
  margin: 18px 0 8px;
}
.relation-content-tabs button {
  border: 0;
  background: transparent;
  color: #999;
  padding: 8px 7px;
  font:
    700 8px/1 Arial,
    sans-serif;
  letter-spacing: 0.12em;
  position: relative;
  cursor: pointer;
}
.relation-content-tabs button.on {
  color: #202024;
}
.relation-content-tabs button.on:after {
  content: "";
  position: absolute;
  height: 2px;
  left: 0;
  right: 0;
  bottom: 0;
  background: #202024;
}
.relation-content {
  min-height: 300px;
}
.relation-gallery-grid {
  display: grid;
  grid-template-columns: repeat(2, 1fr);
  grid-auto-rows: 170px;
  gap: 8px;
}
.relation-gallery-grid figure {
  margin: 0;
  overflow: hidden;
  position: relative;
  border: 1px solid #d7d0cf;
  border-radius: 15px;
  background: #e9e5e2;
}
.relation-gallery-grid figure.feature {
  grid-row: span 2;
}
.relation-gallery-grid img {
  width: 100%;
  height: 100%;
  object-fit: cover;
}
.relation-gallery-grid figcaption {
  position: absolute;
  left: 10px;
  bottom: 9px;
  background: rgba(18, 18, 21, 0.78);
  color: #fff;
  padding: 5px 7px;
  font-size: 6px;
  letter-spacing: 0.12em;
  border-radius: 999px;
}
.relation-note-long {
  border: 1px solid #d9d2d0;
  border-radius: 18px;
  background: #fff;
  padding: 25px 28px;
}
.relation-note-long > small {
  font:
    700 7px/1 Arial,
    sans-serif;
  letter-spacing: 0.22em;
  color: #aaa;
}
.relation-note-long > h3 {
  font:
    600 31px/1 Georgia,
    serif;
  margin: 8px 0;
}
.relation-note-long > p {
  font:
    400 11px/1.8 "Noto Serif KR",
    serif;
  color: #675f63;
}
.relation-note-pair {
  display: grid;
  grid-template-columns: 1fr 1fr;
  gap: 8px;
  margin-top: 16px;
}
.relation-note-pair > div {
  border-top: 3px solid var(--c);
  background: #f7f5f3;
  padding: 14px;
}
.relation-note-pair b {
  font-size: 8px;
  color: var(--c);
}
.relation-note-pair p {
  font-size: 10px;
  line-height: 1.65;
  margin: 7px 0 0;
}
.compare-bottom-switch {
  margin-top: 14px;
}
.compare-bottom-switch .profile-character-switch {
  display: grid;
  grid-template-columns: 1fr 1fr;
  height: 62px;
}

/* Story / world timeline */
.timeline-v3-page {
  min-height: 100vh;
  background: #111115;
  color: #f1efed;
  padding: 78px 24px 80px;
  overflow: hidden;
}
.timeline-v3-wrap {
  width: min(1100px, 100%);
  margin: 0 auto;
}
.timeline-v3-head {
  text-align: center;
  margin-bottom: 24px;
}
.timeline-v3-head small {
  font:
    700 7px/1 Arial,
    sans-serif;
  letter-spacing: 0.28em;
  color: #8f8c98;
}
.timeline-v3-head h1 {
  font:
    500 clamp(54px, 7vw, 96px)/0.9 Georgia,
    serif;
  margin: 8px 0 10px;
  letter-spacing: -0.05em;
}
.timeline-v3-head p {
  font:
    400 10px/1.7 "Noto Serif KR",
    serif;
  color: #8d8990;
  margin: 0;
}
.timeline-v3-filter {
  display: flex;
  justify-content: center;
  gap: 5px;
  margin-bottom: 34px;
}
.timeline-v3-filter button {
  border: 1px solid #33333a;
  background: #19191e;
  color: #777780;
  border-radius: 999px;
  padding: 7px 11px;
  font-size: 7px;
  letter-spacing: 0.12em;
}
.timeline-v3-filter button.on {
  background: #eeeae6;
  color: #16161a;
  border-color: #eeeae6;
}
.timeline-v3-line {
  position: relative;
  padding: 12px 0 30px;
}
.timeline-v3-line:before {
  content: "";
  position: absolute;
  left: 50%;
  top: 0;
  bottom: 0;
  width: 1px;
  background: linear-gradient(#3b3941, #77717a 50%, #3b3941);
}
.timeline-v3-item {
  width: 50%;
  position: relative;
  padding: 0 44px 46px;
}
.timeline-v3-item.left {
  margin-right: 50%;
  text-align: right;
}
.timeline-v3-item.right {
  margin-left: 50%;
  text-align: left;
}
.timeline-v3-dot {
  position: absolute;
  width: 11px;
  height: 11px;
  border: 3px solid #111115;
  background: #d5ccd2;
  border-radius: 50%;
  top: 17px;
}
.timeline-v3-item.left .timeline-v3-dot {
  right: -6px;
}
.timeline-v3-item.right .timeline-v3-dot {
  left: -5px;
}
.timeline-v3-card {
  display: inline-block;
  text-align: left;
  max-width: 410px;
  border-top: 1px solid #4a474f;
  padding: 15px 18px 17px;
  background: linear-gradient(180deg, #1b1b20, #16161a);
  box-shadow: 0 16px 30px rgba(0, 0, 0, 0.16);
}
.timeline-v3-card small {
  font:
    700 6px/1 Arial,
    sans-serif;
  letter-spacing: 0.22em;
  color: #8f8590;
}
.timeline-v3-card h2 {
  font:
    500 30px/1 Georgia,
    serif;
  margin: 7px 0 4px;
}
.timeline-v3-card time {
  font-size: 7px;
  color: #6e6971;
}
.timeline-v3-card p {
  font:
    400 10px/1.8 "Noto Serif KR",
    serif;
  color: #aaa5ab;
  margin: 12px 0;
}
.timeline-v3-tag {
  display: inline-block;
  border: 1px solid #37343b;
  border-radius: 999px;
  padding: 5px 8px;
  color: #85808a;
  font-size: 7px;
}

@media (max-width: 1050px) {
  .profile-v3-wrap {
    grid-template-columns: 92px 43% 57%;
  }
  .outfit-thumb,
  .outfit-add {
    width: 68px;
  }
  .outfit-thumb img {
    height: 74px;
  }
  .profile-v3-detail {
    padding: 28px 26px 22px;
  }
  .relation-compare-core {
    width: 72vw;
  }
  .relation-edge-art {
    opacity: 0.62;
    width: 29vw;
  }
  .relation-profile-card {
    grid-template-columns: 80px 1fr;
  }
  .relation-avatar {
    width: 74px;
    height: 74px;
  }
}
@media (max-width: 760px) {
  .profile-page-v3 {
    padding: 58px 10px 18px;
    overflow: auto;
  }
  .profile-v3-wrap {
    height: auto;
    min-height: 0;
    grid-template-columns: 1fr;
    grid-template-rows: auto 570px auto 64px;
  }
  .outfit-rail {
    grid-column: 1;
    grid-row: 1;
    flex-direction: row;
    width: 100%;
    padding: 10px;
    overflow-x: auto;
  }
  .outfit-rail-title {
    writing-mode: vertical-rl;
    margin: 0 4px;
  }
  .outfit-thumb {
    width: 74px;
    min-height: 88px;
  }
  .outfit-thumb img {
    height: 60px;
  }
  .profile-v3-visual {
    grid-column: 1;
    grid-row: 2;
  }
  .profile-v3-detail {
    grid-column: 1;
    grid-row: 3;
    min-height: 620px;
  }
  .profile-character-switch {
    grid-column: 1;
    grid-row: 4;
  }
  .profile-v3-stats {
    grid-template-columns: repeat(2, 1fr);
  }
  .profile-v3-content {
    grid-template-columns: 1fr;
  }
  .profile-v3-content .wide {
    grid-column: 1;
  }
  .profile-detail-tabs {
    position: sticky;
    top: 0;
    background: #fff;
    z-index: 3;
  }
  .relation-compare-page {
    padding: 62px 11px 20px;
  }
  .relation-edge-art {
    display: none;
  }
  .relation-compare-core {
    width: 100%;
  }
  .relation-profile-grid,
  .relation-direction-grid,
  .relation-note-pair {
    grid-template-columns: 1fr;
  }
  .relation-profile-card {
    grid-template-columns: 76px 1fr;
  }
  .relation-gallery-grid {
    grid-auto-rows: 150px;
  }
  .timeline-v3-item {
    width: 100%;
    padding: 0 0 32px 36px;
    margin: 0 !important;
    text-align: left !important;
  }
  .timeline-v3-line:before {
    left: 8px;
  }
  .timeline-v3-item .timeline-v3-dot,
  .timeline-v3-item.left .timeline-v3-dot,
  .timeline-v3-item.right .timeline-v3-dot {
    left: 3px;
    right: auto;
  }
  .timeline-v3-card {
    max-width: 100%;
    width: 100%;
  }
}

/* =========================
   lope v0.3.4 — otaku profile / pair / story rework
   ========================= */
.profile-page-v4 {
  min-height: 100vh;
  color: #17161a;
  padding: 56px 22px 18px;
  overflow: hidden;
}
.profile-v4-wrap {
  width: min(1720px, 100%);
  height: calc(100vh - 82px);
  min-height: 780px;
  margin: auto;
  display: grid;
  grid-template-columns: 108px minmax(480px, 0.95fr) minmax(590px, 1.05fr);
  grid-template-rows: minmax(0, 1fr) 66px;
  border: 1px solid #d9d3cf;
  background: #fff;
  box-shadow: 0 24px 70px rgba(40, 30, 35, 0.08);
  overflow: hidden;
  position: relative;
}
.profile-v4-visual {
  grid-column: 2;
  grid-row: 1;
  position: relative;
  overflow: hidden;
  background: linear-gradient(145deg, color-mix(in srgb, var(--c), #fff 89%), #ece9e5 58%, #dedad5);
}
.profile-v4-visual:after {
  content: "";
  position: absolute;
  left: 7%;
  right: 7%;
  bottom: 4.5%;
  height: 1px;
  background: #bdb5b2;
  z-index: 3;
}
.profile-v4-num {
  position: absolute;
  right: 4%;
  top: 1%;
  font:
    600 clamp(110px, 10vw, 178px)/1 Georgia,
    serif;
  letter-spacing: -0.08em;
  color: color-mix(in srgb, var(--c), transparent 86%);
  z-index: 1;
}
.profile-v4-word {
  position: absolute;
  left: 18px;
  top: 50%;
  transform: translate(-50%, -50%) rotate(-90deg);
  white-space: nowrap;
  font:
    700 7px/1 Arial,
    sans-serif;
  letter-spacing: 0.3em;
  color: #91898d;
  z-index: 6;
}
.profile-v4-art {
  position: absolute;
  inset: 2.5% 2% 4.5%;
  display: flex;
  align-items: flex-end;
  justify-content: center;
  transform: translate(var(--art-x, 0%), var(--art-y, 0%)) scale(var(--art-scale, 1));
  transform-origin: 50% 100%;
  z-index: 4;
}
.profile-v4-art img {
  width: 100%;
  height: 100%;
  object-fit: contain;
  object-position: center bottom;
  filter: drop-shadow(0 28px 24px rgba(40, 29, 34, 0.12));
}
.profile-v4-name {
  position: absolute;
  left: 6.5%;
  bottom: 6.5%;
  z-index: 7;
  max-width: 74%;
}
.profile-v4-name small {
  font:
    700 7px/1 Arial,
    sans-serif;
  letter-spacing: 0.16em;
  color: var(--c);
}
.profile-v4-name h1 {
  font:
    600 clamp(40px, 4.1vw, 72px)/0.88 Georgia,
    serif;
  letter-spacing: -0.05em;
  margin: 7px 0 5px;
}
.profile-v4-name span {
  font-size: 11px;
  letter-spacing: 0.12em;
  color: #71696d;
}
.profile-v4-detail {
  grid-column: 3;
  grid-row: 1;
  padding: 30px 36px 24px;
  min-width: 0;
  display: flex;
  flex-direction: column;
  /* v0.3.320 — 예전엔 이 배경이 기본 스킨색(핑크) 기준으로 고정된 크림색이라,
     포인트색을 다른 색으로 바꾸면 이 배경만 핑크로 남아 안 어울렸습니다.
     hsl(from ...) 상대 색상 문법으로 명도·채도는 원래 값 그대로 두고 색상(hue)만
     지금 포인트색(--accent)을 따라가게 바꿨습니다. */
  background: hsl(from var(--accent) h 100% 98%);
  overflow: hidden;
}
.profile-v4-detail-head {
  display: flex;
  justify-content: space-between;
  align-items: center;
  gap: 14px;
  border-bottom: 1px solid #e0d9d5;
  padding-bottom: 12px;
}
.profile-v4-detail-head > div:first-child {
  display: flex;
  flex-direction: column;
  gap: 3px;
}
.profile-v4-detail-head small {
  font:
    700 7px/1 Arial,
    sans-serif;
  letter-spacing: 0.2em;
  color: #aaa0a5;
}
.profile-v4-detail-head b {
  font:
    600 17px/1 Georgia,
    serif;
}
.profile-v4-tabs {
  display: flex;
  gap: 0;
  border-bottom: 1px solid #ddd6d2;
  margin-bottom: 20px;
  overflow-x: auto;
  flex: none;
}
.profile-v4-tabs button {
  border: 0;
  background: transparent;
  color: #989095;
  padding: 13px 14px 11px;
  font:
    700 7px/1 Arial,
    sans-serif;
  letter-spacing: 0.13em;
  position: relative;
  cursor: pointer;
  white-space: nowrap;
}
.profile-v4-tabs button.on {
  color: #1f1d21;
}
.profile-v4-tabs button.on:after {
  content: "";
  position: absolute;
  left: 8px;
  right: 8px;
  bottom: -1px;
  height: 2px;
  background: var(--c);
}
.profile-v4-panel {
  min-height: 0;
  overflow: auto;
  padding: 0 5px 30px 0;
  scrollbar-width: thin;
  scrollbar-color: #cfc6c3 transparent;
}
.profile-story-lead {
  padding: 4px 2px 24px;
  border-bottom: 1px solid #ddd6d2;
}
.profile-story-lead small {
  font:
    700 7px/1 Arial,
    sans-serif;
  letter-spacing: 0.22em;
  color: var(--c);
}
.profile-story-lead h3 {
  font:
    600 clamp(28px, 2.4vw, 42px)/1.05 Georgia,
    "Noto Serif KR",
    serif;
  margin: 8px 0 10px;
  letter-spacing: -0.03em;
}
.profile-story-lead p {
  font:
    400 12px/1.9 "Noto Serif KR",
    serif;
  color: #655e62;
  margin: 0;
  max-width: 720px;
  white-space: pre-wrap;
}
.profile-fact-sheet {
  display: grid;
  grid-template-columns: repeat(2, minmax(0, 1fr));
  gap: 0;
  border-top: 1px solid #ded7d3;
  margin-top: 20px;
}
.profile-fact-sheet.cols-1 {
  grid-template-columns: 1fr;
}
.profile-fact-sheet.cols-2 {
  grid-template-columns: repeat(2, minmax(0, 1fr));
}
.profile-fact-sheet.cols-3 {
  grid-template-columns: repeat(3, minmax(0, 1fr));
}
.profile-fact-sheet > div {
  display: grid;
  grid-template-columns: 105px 1fr;
  gap: 12px;
  padding: 11px 5px;
  border-bottom: 1px solid #e5dfdc;
}
.profile-fact-sheet.cols-1 > div {
  padding-left: 5px;
  padding-right: 5px;
}
.profile-fact-sheet.cols-2 > div:nth-child(odd) {
  padding-right: 20px;
}
.profile-fact-sheet.cols-2 > div:nth-child(even) {
  padding-left: 20px;
  border-left: 1px solid #e5dfdc;
}
.profile-fact-sheet.cols-3 > div {
  grid-template-columns: minmax(58px, 0.7fr) minmax(0, 1.3fr);
  padding-left: 14px;
  padding-right: 14px;
}
.profile-fact-sheet.cols-3 > div:nth-child(3n + 1) {
  padding-left: 5px;
}
.profile-fact-sheet.cols-3 > div:not(:nth-child(3n + 1)) {
  border-left: 1px solid #e5dfdc;
}
.profile-fact-sheet small {
  font:
    700 7px/1.5 Arial,
    sans-serif;
  letter-spacing: 0.12em;
  color: #aaa0a4;
}
.profile-fact-sheet span {
  font-size: 10px;
  line-height: 1.55;
  color: #3f3a3e;
}
.profile-meter-sheet {
  margin-top: 24px;
}
.profile-meter-sheet header {
  display: flex;
  align-items: end;
  gap: 12px;
  margin-bottom: 7px;
}
.profile-meter-sheet header small {
  font:
    700 7px/1 Arial,
    sans-serif;
  color: var(--c);
  letter-spacing: 0.2em;
}
.profile-meter-sheet header h3 {
  font:
    600 25px/1 Georgia,
    serif;
  margin: 0;
}
.profile-meter-row {
  display: grid;
  grid-template-columns: 62px 96px 1fr;
  gap: 12px;
  align-items: center;
  padding: 9px 2px;
  border-bottom: 1px solid #e6e0dd;
}
.profile-meter-row > b {
  font-size: 10px;
}
.profile-meter-dots {
  display: flex;
  gap: 4px;
}
.profile-meter-dots i {
  width: 13px;
  height: 13px;
  border: 1px solid color-mix(in srgb, var(--c), #bbb 55%);
  background: #fff;
}
.profile-meter-dots i.on {
  background: var(--c);
  border-color: var(--c);
}
/* v0.3.150 — 스탯 프리셋 레이더 차트형 */
.profile-meter-sheet.meter-radar {
  margin-top: 24px;
}
.profile-radar-chart {
  margin-top: 8px;
  padding: 0;
  background: transparent;
  border: 0;
  overflow: visible;
}
.profile-radar-core {
  position: relative;
  width: min(100%, 380px);
  aspect-ratio: 1 / 1;
  margin: 0 auto;
}
.profile-radar-chart svg {
  display: block;
  width: 100%;
  height: 100%;
}
.profile-meter-sheet.meter-radar header small {
  color: var(--c);
}
.profile-meter-sheet.meter-radar header h3 {
  color: #2f2a2d;
}
.profile-meter-sheet.meter-radar .rings polygon,
.profile-meter-sheet.meter-radar .axes line {
  fill: none;
  stroke: rgba(88, 77, 82, 0.14);
  stroke-width: 1;
}
.profile-meter-sheet.meter-radar .area {
  fill: color-mix(in srgb, var(--c) 22%, transparent);
  stroke: none;
}
.profile-meter-sheet.meter-radar .line {
  fill: none;
  stroke: color-mix(in srgb, var(--c) 82%, #fff 18%);
  stroke-width: 3;
}
.profile-meter-sheet.meter-radar .nodes circle {
  fill: color-mix(in srgb, var(--c) 72%, #fff 28%);
  stroke: none;
  stroke-width: 0;
}
.profile-radar-label {
  position: absolute;
  left: var(--x);
  top: var(--y);
  transform: translate(-50%, -50%);
  min-width: 74px;
  text-align: center;
  pointer-events: none;
}
.profile-radar-label strong {
  display: block;
  color: #2f2a2d;
  font: 700 11px/1.2 Arial, sans-serif;
}
.profile-radar-label small {
  display: block;
  margin-top: 4px;
  color: #6f676b;
  font: 700 9px/1.1 Arial, sans-serif;
}
.profile-meter-row span {
  font-size: 9px;
  color: #81797e;
  line-height: 1.45;
}
.profile-essay {
  padding: 18px 2px 22px;
  border-bottom: 1px solid #e1dad6;
}
.profile-essay-title {
  display: flex;
  align-items: center;
  gap: 9px;
}
.profile-essay-title i {
  width: 28px;
  height: 2px;
  background: var(--c);
}
.profile-essay-title h3 {
  font:
    600 23px/1.1 Georgia,
    "Noto Serif KR",
    serif;
  margin: 0;
}
.profile-essay p {
  font:
    400 11px/1.95 "Noto Serif KR",
    serif;
  color: #625b5f;
  margin: 12px 0 0;
  white-space: pre-wrap;
}
.profile-voice-list {
  padding-top: 5px;
}
.profile-voice-list > small {
  font:
    700 7px/1 Arial,
    sans-serif;
  letter-spacing: 0.2em;
  color: var(--c);
}
.profile-voice-list blockquote {
  margin: 0;
  display: grid;
  grid-template-columns: 42px 1fr;
  gap: 12px;
  padding: 17px 4px;
  border-bottom: 1px solid #e0d9d5;
}
.profile-voice-list blockquote b {
  font:
    500 23px/1 Georgia,
    serif;
  color: color-mix(in srgb, var(--c), #fff 28%);
}
.profile-voice-list blockquote span {
  font:
    500 13px/1.8 "Noto Serif KR",
    serif;
  color: #393438;
}
.profile-palette-block {
  padding: 10px 0 22px;
  border-bottom: 1px solid #ded7d3;
}
.profile-palette-block > small {
  font:
    700 7px/1 Arial,
    sans-serif;
  letter-spacing: 0.2em;
  color: #999;
}
.profile-palette-block > div {
  display: flex;
  gap: 10px;
  margin-top: 12px;
  flex-wrap: wrap;
}
.profile-palette-block span {
  display: grid;
  grid-template-columns: 36px auto;
  grid-template-rows: auto auto;
  column-gap: 9px;
  align-items: center;
}
.profile-palette-block i {
  grid-row: 1/3;
  width: 36px;
  height: 36px;
  border-radius: 50%;
  border: 1px solid #d0c8c5;
}
.profile-palette-block b {
  font-size: 9px;
}
.profile-palette-block em {
  font-size: 7px;
  color: #999;
  font-style: normal;
}
.profile-keyword-wall {
  display: flex;
  gap: 6px;
  flex-wrap: wrap;
  padding-top: 18px;
}
.profile-keyword-wall span {
  padding: 7px 10px;
  background: #222126;
  color: #fff;
  border-radius: 999px;
  font-size: 8px;
}
.profile-gallery-v4 {
  display: grid;
  grid-template-columns: repeat(2, minmax(0, 1fr));
  gap: 8px;
  align-items: start;
}
.profile-gallery-col {
  display: flex;
  flex-direction: column;
  gap: 8px;
  min-width: 0;
}
.profile-gallery-v4 figure {
  width: 100%;
  margin: 0;
  overflow: hidden;
  position: relative;
  background: #eee9e5;
  border: 1px solid #ded7d3;
}
.profile-gallery-v4 img {
  display: block;
  width: 100%;
  height: auto;
  object-fit: contain;
}
.profile-gallery-v4 figcaption {
  position: absolute;
  left: 8px;
  bottom: 8px;
  background: #1c1b1f;
  color: #fff;
  padding: 5px 7px;
  font:
    700 6px/1 Arial,
    sans-serif;
  letter-spacing: 0.12em;
}
.profile-page-v4 .profile-character-switch {
  grid-column: 2/4;
  grid-row: 2;
}

/* Pair page: reference-like pair profile, enlarged for wide monitors */
.pair-page-v4 {
  min-height: 100vh;
  background: linear-gradient(
    90deg,
    color-mix(in srgb, var(--a), #fff 95%),
    #f7f5f1 28%,
    #f7f5f1 72%,
    color-mix(in srgb, var(--b), #fff 95%)
  );
  color: #19181c;
  padding: 58px 20px max(92px, calc(env(safe-area-inset-bottom) + 82px));
  position: relative;
  overflow: hidden;
}
.pair-edge-v4 {
  position: fixed;
  top: 12%;
  bottom: 0;
  width: min(29vw, 560px);
  z-index: 2;
  display: flex;
  align-items: flex-end;
  justify-content: center;
  transform: translate(var(--art-x, 0%), var(--art-y, 0%)) scale(var(--art-scale, 1));
  transform-origin: 50% 100%;
  pointer-events: none;
}
.pair-edge-v4.left {
  left: -2vw;
}
.pair-edge-v4.right {
  right: -2vw;
}
.pair-edge-v4 img {
  width: 100%;
  height: 100%;
  object-fit: contain;
  object-position: center bottom;
  filter: drop-shadow(0 24px 26px rgba(30, 22, 27, 0.11));
}
.pair-core-v4 {
  width: min(1420px, 70vw);
  margin: 0 auto;
  position: relative;
  z-index: 4;
}
.pair-page-label {
  text-align: center;
  font:
    700 7px/1 Arial,
    sans-serif;
  letter-spacing: 0.24em;
  color: #9d9499;
  margin: 2px 0 11px;
}
.pair-info-grid-v4 {
  display: grid;
  grid-template-columns: 1fr 1fr;
  gap: 12px;
}
.pair-info-v4 {
  background: rgba(255, 255, 255, 0.91);
  border: 1px solid color-mix(in srgb, var(--c), #d2cbc8 68%);
  border-radius: 18px;
  padding: 20px 22px;
  min-height: 244px;
}
.pair-info-head {
  display: grid;
  grid-template-columns: 92px 1fr;
  gap: 16px;
  align-items: center;
}
.pair-info-avatar {
  width: 88px;
  height: 88px;
  border-radius: 50%;
  overflow: hidden;
  background: #eee;
  display: grid;
  place-items: center;
  border: 5px solid color-mix(in srgb, var(--c), #fff 55%);
}
.pair-info-avatar img {
  width: 100%;
  height: 100%;
  object-fit: cover;
}
.pair-info-head small {
  font:
    700 7px/1.4 Arial,
    sans-serif;
  letter-spacing: 0.1em;
  color: #9c9397;
}
.pair-info-head h2 {
  font:
    600 clamp(25px, 1.8vw, 34px)/1 Georgia,
    serif;
  margin: 4px 0;
}
.pair-info-head span {
  font-size: 9px;
  letter-spacing: 0.1em;
  color: #847b80;
}
.pair-info-tags {
  display: flex;
  gap: 5px;
  flex-wrap: wrap;
  margin: 15px 0 10px;
}
.pair-info-tags b {
  background: #242329;
  color: #fff;
  border-radius: 999px;
  padding: 6px 8px;
  font-size: 7px;
  font-weight: 500;
}
.pair-info-stats {
  display: grid;
  grid-template-columns: repeat(4, 1fr);
  border-top: 1px solid #e1dad7;
  border-bottom: 1px solid #e1dad7;
}
.pair-info-stats > div {
  padding: 9px 5px;
  display: flex;
  flex-direction: column;
  gap: 4px;
}
.pair-info-stats > div + div {
  border-left: 1px solid #e1dad7;
}
.pair-info-stats small {
  font:
    700 6px/1 Arial,
    sans-serif;
  letter-spacing: 0.1em;
  color: #aaa;
}
.pair-info-stats strong {
  font:
    500 12px/1.2 Georgia,
    serif;
}
.pair-info-colors {
  margin-top: 9px;
}
.pair-info-colors > div {
  display: flex;
  align-items: center;
  gap: 7px;
  padding: 3px 0;
}
.pair-info-colors span {
  min-width: 58px;
  font-size: 7px;
}
.pair-info-colors i {
  height: 1px;
  flex: 1;
  background: #cfc7c5;
}
.pair-info-colors em {
  width: 16px;
  height: 16px;
  border-radius: 50%;
  border: 1px solid rgba(0, 0, 0, 0.08);
}
.pair-direction-grid-v4 {
  display: grid;
  grid-template-columns: 1fr 1fr;
  gap: 12px;
  margin-top: 15px;
}
.pair-relation-story {
  margin-top: 14px;
  padding: 23px;
  border: 1px solid #d8d0cc;
  border-radius: 20px;
  background: linear-gradient(115deg, color-mix(in srgb, var(--a), #fff 94%), rgba(255,255,255,.94) 48%, color-mix(in srgb, var(--b), #fff 94%));
}
.pair-relation-story > header {
  max-width: 720px;
  margin: 0 auto;
  text-align: center;
}
.pair-relation-story > header small {
  color: #9a9297;
  font: 800 7px/1 Arial, sans-serif;
  letter-spacing: .2em;
}
.pair-relation-story > header h2 {
  margin: 6px 0 8px;
  color: #242126;
  font: 600 clamp(27px, 3vw, 42px)/1.08 Georgia, "Noto Serif KR", serif;
}
.pair-relation-story > header p {
  margin: 0;
  color: #70686d;
  font: 400 10px/1.75 "Noto Serif KR", serif;
}
.pair-direction-v4 {
  position: relative;
  overflow: hidden;
  background: rgba(255, 255, 255, 0.9);
  border: 1px solid color-mix(in srgb, var(--c), #ddd6d2 76%);
  border-radius: 17px;
  padding: 17px 21px;
  min-height: 154px;
}
.pair-direction-v4:before {
  content: "";
  position: absolute;
  inset: 0 auto 0 0;
  width: 4px;
  background: var(--c);
}
.pair-direction-view-head {
  display: flex;
  align-items: center;
  gap: 11px;
  margin-bottom: 11px;
}
.pair-direction-view-head > span {
  display: grid;
  flex: 0 0 34px;
  width: 34px;
  height: 34px;
  place-items: center;
  border-radius: 50%;
  color: var(--c);
  background: color-mix(in srgb, var(--c), #fff 86%);
  font: 800 8px/1 Arial, sans-serif;
}
.pair-direction-view-head small,
.pair-direction-view-head h3 {
  display: block;
}
.pair-direction-view-head small {
  color: var(--c);
  font-size: 9px;
  font-weight: 900;
}
.pair-direction-view-head h3 {
  margin: 4px 0 0;
  color: #272329;
  font: 600 13px/1.25 "Noto Serif KR", serif;
}
.pair-direction-v4 p {
  font: 400 10px/1.75 "Noto Serif KR", serif;
  color: #5e575b;
  margin: 0;
}
.pair-direction-v4 ul {
  display: flex;
  gap: 5px;
  flex-wrap: wrap;
  margin: 11px 0 0;
  padding: 0;
  list-style: none;
}
.pair-direction-v4 li {
  font-size: 7px;
  padding: 5px 7px;
  border: 1px solid color-mix(in srgb, var(--c), #c9c0bd 60%);
  border-radius: 999px;
  color: #6d6569;
}
.pair-center-title {
  display: flex;
  align-items: center;
  justify-content: center;
  gap: 14px;
  margin: 17px 0 3px;
}
.pair-center-title > i {
  height: 1px;
  background: #cfc7c4;
  width: 70px;
}
.pair-center-title > div {
  text-align: center;
}
.pair-center-title small {
  font:
    700 6px/1 Arial,
    sans-serif;
  letter-spacing: 0.2em;
  color: #aaa;
}
.pair-center-title h1 {
  font:
    600 clamp(28px, 2.5vw, 42px)/1 Georgia,
    "Noto Serif KR",
    serif;
  margin: 4px 0;
}
.pair-content-tabs-v4 {
  display: flex;
  justify-content: center;
  gap: 24px;
  margin: 17px 0 8px;
}
.pair-content-tabs-v4 button {
  border: 0;
  background: transparent;
  color: #aaa;
  padding: 7px 6px;
  font:
    700 7px/1 Arial,
    sans-serif;
  letter-spacing: 0.14em;
  position: relative;
}
.pair-content-tabs-v4 button.on {
  color: #1e1d21;
}
.pair-content-tabs-v4 button.on:after {
  content: "";
  position: absolute;
  left: 0;
  right: 0;
  bottom: 0;
  height: 2px;
  background: #1e1d21;
}
.pair-content-v4 {
  min-height: 340px;
}
.pair-moodboard-v4 {
  display: grid;
  grid-template-columns: 1fr 1.35fr 1.35fr 1fr;
  grid-template-rows: 155px 155px;
  gap: 8px;
}
.pair-moodboard-v4 figure {
  margin: 0;
  position: relative;
  overflow: hidden;
  border: 1px solid #d8d1ce;
  border-radius: 15px;
  background: #ebe7e3;
}
.pair-moodboard-v4 figure.m1 {
  grid-column: 2/4;
  grid-row: 1/3;
}
.pair-moodboard-v4 figure.m2 {
  grid-column: 1;
  grid-row: 1;
}
.pair-moodboard-v4 figure.m3 {
  grid-column: 4;
  grid-row: 1;
}
.pair-moodboard-v4 figure.m4 {
  grid-column: 1;
  grid-row: 2;
}
.pair-moodboard-v4 figure.m5 {
  grid-column: 4;
  grid-row: 2;
}
.pair-moodboard-v4 img {
  width: 100%;
  height: 100%;
  object-fit: cover;
}
.pair-moodboard-v4 .m2 img,
.pair-moodboard-v4 .m3 img,
.pair-moodboard-v4 .m4 img,
.pair-moodboard-v4 .m5 img {
  object-position: center 20%;
}
.pair-moodboard-v4 figcaption {
  position: absolute;
  left: 8px;
  bottom: 8px;
  background: rgba(22, 21, 25, 0.78);
  color: #fff;
  padding: 5px 7px;
  border-radius: 999px;
  font:
    700 6px/1 Arial,
    sans-serif;
  letter-spacing: 0.1em;
}
.pair-note-v4 {
  background: #fff;
  border: 1px solid #dcd5d2;
  border-radius: 17px;
  padding: 28px 32px;
  text-align: center;
}
.pair-note-v4 > small {
  font:
    700 7px/1 Arial,
    sans-serif;
  letter-spacing: 0.22em;
  color: #aaa;
}
.pair-note-v4 h2 {
  font:
    600 36px/1 Georgia,
    "Noto Serif KR",
    serif;
  margin: 8px 0;
}
.pair-note-v4 blockquote {
  font:
    500 17px/1.8 "Noto Serif KR",
    serif;
  margin: 18px auto;
  max-width: 680px;
  color: #3f393d;
}
.pair-note-v4 > p {
  font-size: 10px;
  line-height: 1.8;
  color: #746c71;
  max-width: 760px;
  margin: auto;
}
.pair-note-keywords {
  display: flex;
  justify-content: center;
  gap: 6px;
  flex-wrap: wrap;
  margin: 18px 0;
}
.pair-note-keywords span {
  background: #222126;
  color: #fff;
  padding: 6px 9px;
  border-radius: 999px;
  font-size: 8px;
}
.pair-calls {
  border-top: 1px solid #ded7d3;
  padding-top: 14px;
  font-size: 9px;
  color: #81787d;
}

/* Story page: chapter reading flow, not alternating corporate timeline */
.story-page-v4 {
  min-height: 100vh;
  background: #0e0e12;
  color: #f4f1ef;
  padding: 72px 22px 90px;
}
.story-shell-v4 {
  width: min(1280px, 100%);
  margin: auto;
  display: grid;
  grid-template-columns: 280px 1fr;
  gap: 68px;
}
.story-side-v4 {
  position: sticky;
  top: 96px;
  align-self: start;
  padding-top: 18px;
}
.story-side-v4 > small {
  font:
    700 7px/1 Arial,
    sans-serif;
  letter-spacing: 0.28em;
  color: #726d76;
}
.story-side-v4 h1 {
  font:
    500 70px/0.9 Georgia,
    serif;
  letter-spacing: -0.055em;
  margin: 9px 0 15px;
}
.story-side-v4 p {
  font:
    400 10px/1.9 "Noto Serif KR",
    serif;
  color: #7f7a82;
  max-width: 230px;
}
.story-legend-v4 {
  display: flex;
  flex-direction: column;
  gap: 7px;
  margin-top: 25px;
}
.story-legend-v4 span {
  font-size: 8px;
  color: #9b969f;
}
.story-list-v4 {
  position: relative;
  padding-left: 48px;
}
.story-list-v4:before {
  content: "";
  position: absolute;
  left: 18px;
  top: 0;
  bottom: 0;
  width: 1px;
  background: linear-gradient(#39363f, #7b747e 20%, #5d5861 80%, #29272e);
}
.story-chapter-v4 {
  display: grid;
  grid-template-columns: 56px 28px 1fr;
  gap: 0;
  position: relative;
  padding: 0 0 58px;
}
.story-index-v4 {
  font:
    500 34px/1 Georgia,
    serif;
  color: #3f3b45;
  padding-top: 2px;
  text-align: right;
  padding-right: 14px;
}
.story-marker-v4 {
  position: relative;
}
.story-marker-v4 i {
  position: absolute;
  left: 13px;
  top: 9px;
  width: 11px;
  height: 11px;
  border-radius: 50%;
  background: #d8d0d5;
  border: 3px solid #0e0e12;
  box-shadow: 0 0 0 1px #59535f;
}
.story-body-v4 {
  padding: 0 0 6px 18px;
  border-top: 1px solid #37343d;
}
.story-body-v4 > small {
  display: inline-block;
  margin-top: 13px;
  font:
    700 7px/1 Arial,
    sans-serif;
  letter-spacing: 0.15em;
  color: #908995;
}
.story-body-v4 h2 {
  font:
    500 clamp(32px, 3vw, 48px)/1 Georgia,
    "Noto Serif KR",
    serif;
  margin: 7px 0 10px;
  letter-spacing: -0.025em;
}
.story-body-v4 p {
  font:
    400 11px/2 "Noto Serif KR",
    serif;
  color: #aaa5ad;
  margin: 0;
  max-width: 760px;
  white-space: pre-wrap;
}
.story-tag-v4 {
  margin-top: 14px;
  border: 1px solid #3a363f;
  background: #16151a;
  color: #7f7983;
  border-radius: 999px;
  padding: 6px 9px;
  font-size: 7px;
}

@media (max-width: 1200px) {
  .profile-v4-wrap {
    grid-template-columns: 92px 44% 56%;
  }
  .pair-core-v4 {
    width: min(1200px, 74vw);
  }
  .pair-edge-v4 {
    width: min(31vw, 470px);
  }
  .pair-info-head {
    grid-template-columns: 76px 1fr;
  }
  .pair-info-avatar {
    width: 72px;
    height: 72px;
  }
}
@media (max-width: 850px) {
  .profile-page-v4 {
    padding: 56px 10px 14px;
    overflow: auto;
  }
  .profile-v4-wrap {
    height: auto;
    min-height: 0;
    grid-template-columns: 1fr;
    grid-template-rows: auto 600px auto 62px;
  }
  .profile-page-v4 .outfit-rail {
    grid-column: 1;
    grid-row: 1;
    flex-direction: row;
    overflow-x: auto;
  }
  .profile-v4-visual {
    grid-column: 1;
    grid-row: 2;
  }
  .profile-v4-detail {
    grid-column: 1;
    grid-row: 3;
    min-height: 660px;
    padding: 25px 21px;
  }
  .profile-page-v4 .profile-character-switch {
    grid-column: 1;
    grid-row: 4;
  }
  .profile-fact-sheet {
    grid-template-columns: 1fr;
  }
  .profile-fact-sheet > div:nth-child(even) {
    padding-left: 5px;
    border-left: 0;
  }
  .profile-meter-row {
    grid-template-columns: 58px 84px 1fr;
  }
  .pair-page-v4 {
    padding-left: 10px;
    padding-right: 10px;
    overflow: auto;
  }
  .pair-page-v4 .pair-edge-v4 {
    display: none;
  }
  .pair-core-v4 {
    width: 100%;
  }
  .pair-info-grid-v4,
  .pair-direction-grid-v4 {
    grid-template-columns: 1fr;
  }
  .pair-moodboard-v4 {
    grid-template-columns: 1fr 1fr;
    grid-template-rows: 210px 130px 130px;
  }
  .pair-moodboard-v4 figure.m1 {
    grid-column: 1/3;
    grid-row: 1;
  }
  .pair-moodboard-v4 figure.m2 {
    grid-column: 1;
    grid-row: 2;
  }
  .pair-moodboard-v4 figure.m3 {
    grid-column: 2;
    grid-row: 2;
  }
  .pair-moodboard-v4 figure.m4 {
    grid-column: 1;
    grid-row: 3;
  }
  .pair-moodboard-v4 figure.m5 {
    grid-column: 2;
    grid-row: 3;
  }
  .story-shell-v4 {
    grid-template-columns: 1fr;
    gap: 25px;
  }
  .story-side-v4 {
    position: relative;
    top: auto;
  }
  .story-side-v4 h1 {
    font-size: 54px;
  }
  .story-list-v4 {
    padding-left: 0;
  }
  .story-chapter-v4 {
    grid-template-columns: 42px 24px 1fr;
  }
  .story-list-v4:before {
    left: 54px;
  }
  .story-index-v4 {
    font-size: 25px;
    padding-right: 9px;
  }
  .story-marker-v4 i {
    left: 10px;
  }
}

/* =========================================================
   lope v0.3.5 — responsive pass
   Desktop / laptop / tablet / mobile / short-height support
   ========================================================= */
html {
  width: 100%;
  overflow-x: hidden;
  -webkit-text-size-adjust: 100%;
  text-size-adjust: 100%;
}
body {
  width: 100%;
  min-width: 0;
  overflow-x: hidden;
}
.site,
.site-view {
  width: 100%;
  min-width: 0;
}
button,
input,
textarea,
select {
  max-width: 100%;
}
img,
video,
audio {
  max-width: 100%;
}
.site-topbar {
  padding-left: max(14px, env(safe-area-inset-left));
  padding-right: max(14px, env(safe-area-inset-right));
  height: clamp(50px, 6vh, 58px);
}
.home-page,
.profile-page-v4,
.pair-page-v4,
.story-page-v4,
.roster-page,
.diagram-page {
  min-height: 100vh;
  min-height: 100dvh;
}

/* Home — keep the two characters readable without depending on one monitor ratio. */
.home-page {
  height: 100vh;
  height: 100dvh;
  min-height: 680px;
}
.hero-copy {
  top: clamp(92px, 16.5vh, 170px);
  width: min(34%, 520px);
}
.hero-name {
  font-size: clamp(38px, 5vw, 88px);
}
.character-art.hero-art {
  top: clamp(54px, 5vh, 90px);
  bottom: 0;
}
.pair-core {
  width: min(430px, 34vw);
  bottom: clamp(82px, 9.5vh, 118px);
}
.home-menu {
  bottom: max(10px, calc(env(safe-area-inset-bottom) + 8px));
}

@media (min-width: 1900px) {
  .hero-half.left .hero-art {
    left: 24%;
    right: -8%;
  }
  .hero-half.right .hero-art {
    left: -8%;
    right: 24%;
  }
  .hero-copy {
    width: min(28%, 540px);
  }
  .hero-half.left .hero-copy {
    left: 6%;
  }
  .hero-half.right .hero-copy {
    right: 6%;
  }
  .pair-core {
    width: 460px;
  }
}

@media (max-width: 1280px) {
  .hero-half.left .hero-art {
    left: 12%;
    right: -16%;
  }
  .hero-half.right .hero-art {
    left: -16%;
    right: 12%;
  }
  .hero-copy {
    width: 38%;
    min-width: 0;
  }
  .hero-name {
    font-size: clamp(34px, 5.7vw, 66px);
  }
  .pair-core {
    width: min(390px, 40vw);
  }
  /* v0.3.252 — .hero-tag 크기와 .edge-keywords 위치는 이제 여기·900px·600px 각각에
     계단으로 나눠 넣는 대신 syncHomeMobileTaper()(app.js)가 폭에 비례해 매끄럽게
     계산합니다 — 계단 경계마다 "갑자기 확 바뀐다"는 문제가 반복돼서(v0.3.247~251),
     아예 연속값으로 바꿨습니다. 그 함수가 항상 인라인 스타일로 덮어쓰므로 이 두 규칙은
     여기 안 둡니다. */
}

@media (max-width: 900px) {
  .home-page {
    min-height: 720px;
  }
  .hero-half {
    top: 0;
    bottom: 0;
    width: 50%;
    height: 100%;
  }
  .hero-half.left {
    left: 0;
  }
  .hero-half.right {
    right: 0;
  }
  .hero-half.left .hero-art,
  .hero-half.right .hero-art {
    left: -20%;
    right: -20%;
    top: 18%;
    bottom: 15%;
  }
  .hero-copy {
    top: 11%;
    width: 43%;
    z-index: 8;
  }
  .hero-half.left .hero-copy {
    left: 6%;
  }
  .hero-half.right .hero-copy {
    right: 6%;
  }
  .hero-name {
    font-size: clamp(30px, 7vw, 54px);
  }
  .hero-subname {
    font-size: 10px;
  }
  .pair-core {
    bottom: 11%;
    width: 64vw;
  }
  .pair-desc {
    max-width: 430px;
    margin: auto;
  }
  /* v0.3.241 — "메인 모바일 최적화": 좌우 하단 키워드(.edge-keyword)가 v0.3.120에서
     데스크톱 기준 1.5배로 확대(min-width 144px, padding 13.5px 27px, font-size 15px)된
     뒤로 모바일 전용 축소값이 한 번도 추가되지 않아, .hero-half가 화면 폭의 50%로
     좁아지는 이 구간부터는 키워드 알약 하나의 최소 너비(144+27*2=198px)가 컬럼 폭보다
     커서 화면 밖으로 밀려나거나 반대쪽 하프를 침범했습니다. */
  .edge-keywords {
    gap: 7px;
  }
  .edge-keyword {
    min-width: 96px;
    padding: 9px 16px;
    font-size: 10px;
  }
  .hero-kicker {
    font-size: 9px;
  }
  .hero-tags {
    gap: 3px;
  }
}

@media (max-width: 600px) {
  .site-topbar {
    height: 48px;
    padding-left: max(10px, env(safe-area-inset-left));
    padding-right: max(10px, env(safe-area-inset-right));
  }
  /* v0.3.257 — v0.3.256에서 "로고"를 상단바 로고(.site-brand, ◆+LOPE)로 잘못 이해해서
     화면 1/6 지점으로 옮겼었는데, 사용자가 말한 "로고"는 한자 로고(.pair-title,
     "捨短取長")였습니다 — 되돌립니다(원래대로 상단바 안에 그대로). */
  .site-brand {
    font-size: 8px;
    gap: 7px;
  }
  .site-brand .sigil {
    width: 22px;
    height: 22px;
  }
  .top-pill {
    padding: 6px 8px;
    font-size: 8px;
  }
  .ghost-btn {
    width: 29px;
    height: 29px;
  }
  .home-page {
    height: 100svh;
    min-height: 650px;
  }
  .hero-half {
    height: 68%;
    top: 11%;
    bottom: auto;
    overflow: visible;
  }
  .hero-half.left .hero-art,
  .hero-half.right .hero-art {
    top: 17%;
    bottom: 0;
    left: -38%;
    right: -38%;
  }
  /* v0.3.249 — 사용자 요청으로 600px 이하에서도 이름을 계속 좌/우 정렬 그대로 둡니다.
     예전부터 있던 규칙(text-align:center!important)이 이 폭부터 강제로 가운데 정렬로
     바꾸고 있었는데, 목업/PC 화면과 다르게 보여서 없앴습니다. */
  .hero-copy {
    top: -3%;
    width: 84%;
  }
  .hero-half.left .hero-copy {
    left: 8%;
  }
  .hero-half.right .hero-copy {
    right: 8%;
  }
  /* v0.3.247 — 사용자 요청으로 이 폭에서도 부제(.hero-kicker)를 계속 보이게 합니다
     (기존엔 여기서부터 display:none). 다른 요소들처럼 이 폭에 맞는 작은 크기로 줄여서
     넣었습니다. */
  .hero-kicker {
    font-size: 7px;
    margin-bottom: 5px;
  }
  .hero-name {
    font-size: clamp(25px, 8.5vw, 38px);
    line-height: 0.92;
  }
  .hero-subname {
    font-size: 8px;
    margin-top: 6px;
  }
  .edge-keywords {
    gap: 6px;
  }
  .edge-keyword {
    min-width: 70px;
    padding: 7px 12px;
    font-size: 8px;
  }
  .pair-core {
    bottom: 13.5%;
    width: 88vw;
  }
  .pair-kicker {
    font-size: 7px;
  }
  .pair-title {
    font-size: clamp(24px, 8vw, 34px);
  }
  .pair-desc {
    font-size: 9px;
    line-height: 1.55;
  }
  .pair-date {
    font-size: 8px;
    margin-top: 7px;
  }
  .home-menu {
    width: calc(100% - 16px);
    max-width: none;
    justify-content: flex-start;
    gap: 6px;
    padding: 4px 2px;
    bottom: max(6px, env(safe-area-inset-bottom));
  }
  .feature-dot {
    width: 39px;
    height: 39px;
    min-width: 39px;
    border-radius: 12px;
  }
}

/* Profile — three-column on wide screens, two columns on laptops, stacked on tablets. */
.profile-page-v4 {
  padding: clamp(52px, 6vh, 68px) clamp(10px, 1.5vw, 24px) max(14px, env(safe-area-inset-bottom));
  overflow: auto;
}
.profile-v4-wrap {
  /* v0.3.131 — 가로도 살짝 줄여달라는 요청. 1720px → 1560px(약 9% 축소), 세로 축소 때와
     같은 원칙으로 grid-template-columns의 fr 비율/글자 크기는 그대로 두고 전체 폭만
     줄여서 안쪽 요소들이 비율대로 같이 작아집니다. */
  width: min(1560px, 100%);
  /* v0.3.126 — 하단 캐릭터 이름 탭이 화면 하단 내비게이션 독과 겹치던 문제. 기존
     계산식(100dvh - 82px)은 페이지 위쪽 padding만 빼고 아래쪽 고정 독 자리(약 70px)를
     전혀 고려하지 않아서, 캔버스 전체가 뷰포트를 거의 꽉 채우며 이름 탭이 독과 겹치는
     위치까지 내려갔습니다. 82px → 152px로 늘려 독 높이+여백만큼 더 뺐습니다 — 글자
     크기는 전혀 안 건드리고 캔버스 전체 높이만 줄어드는 방식이라, 안쪽 요소들이
     비율대로 같이 작아지되(이미지·카드·여백) font-size 선언은 그대로입니다. */
  height: min(calc(100dvh - 152px), 1080px);
  min-height: 640px;
  grid-template-columns: clamp(86px, 6.2vw, 108px) minmax(380px, 0.92fr) minmax(440px, 1.08fr);
}
.profile-v4-detail {
  padding: clamp(24px, 2.3vw, 36px);
}
.profile-v4-panel {
  overscroll-behavior: contain;
}
.outfit-rail {
  overscroll-behavior: contain;
}

@media (max-width: 1320px) {
  .profile-v4-wrap {
    grid-template-columns: 88px minmax(340px, 43%) minmax(0, 57%);
  }
  .profile-v4-detail {
    padding: 26px 26px 22px;
  }
  .profile-v4-name h1 {
    font-size: clamp(36px, 4.2vw, 60px);
  }
  .profile-fact-sheet > div {
    grid-template-columns: 88px 1fr;
  }
}

@media (max-width: 980px) {
  .profile-page-v4 {
    overflow: auto;
    padding-left: 12px;
    padding-right: 12px;
  }
  .profile-v4-wrap {
    height: auto;
    min-height: 0;
    display: grid;
    grid-template-columns: 1fr;
    grid-template-rows: auto clamp(520px, 70dvh, 680px) auto 64px;
    overflow: visible;
  }
  .profile-page-v4 .outfit-rail {
    grid-column: 1;
    grid-row: 1;
    flex-direction: row;
    align-items: stretch;
    width: 100%;
    padding: 9px 10px;
    overflow-x: auto;
    overflow-y: hidden;
    gap: 8px;
  }
  .outfit-rail-title {
    writing-mode: horizontal-tb;
    transform: none;
    min-width: 44px;
    display: grid;
    place-items: center;
    margin: 0;
    font-size: 7px;
  }
  .outfit-thumb,
  .outfit-add {
    width: 68px;
    min-width: 68px;
    min-height: 78px;
    margin: 0;
  }
  .outfit-thumb img {
    height: 54px;
  }
  .profile-v4-visual {
    grid-column: 1;
    grid-row: 2;
    min-height: 0;
  }
  .profile-v4-detail {
    grid-column: 1;
    grid-row: 3;
    min-height: 0;
    overflow: visible;
    padding: 26px 24px 34px;
  }
  .profile-v4-panel {
    overflow: visible;
    padding-right: 0;
  }
  /* v0.3.239 — 모바일 하단 독(고정 네비게이션)이 이 캐릭터 전환 탭 위에 겹쳐 보이던
     문제. bottom:0이면 독과 정확히 같은 자리에 붙어서 가려집니다 — 독 높이만큼
     띄웁니다. */
  .profile-page-v4 .profile-character-switch {
    grid-column: 1;
    grid-row: 4;
    position: sticky;
    bottom: max(66px, calc(env(safe-area-inset-bottom) + 64px));
    z-index: 15;
    min-height: 64px;
  }
  .profile-v4-tabs {
    position: sticky;
    top: 48px;
    z-index: 9;
    background: #fffaf7;
    margin-left: -24px;
    margin-right: -24px;
    padding-left: 16px;
    padding-right: 16px;
  }
}

@media (max-width: 620px) {
  .profile-page-v4 {
    padding: 48px 0 0;
    background: #fff;
  }
  .profile-v4-wrap {
    border-left: 0;
    border-right: 0;
    box-shadow: none;
    grid-template-rows: auto clamp(430px, 61svh, 560px) auto 60px;
  }
  .profile-page-v4 .outfit-rail {
    border-left: 0;
    border-right: 0;
    padding: 8px;
  }
  .outfit-thumb,
  .outfit-add {
    width: 62px;
    min-width: 62px;
    min-height: 72px;
  }
  .outfit-thumb img {
    height: 49px;
  }
  .profile-v4-num {
    font-size: 88px;
  }
  .profile-v4-word {
    font-size: 6px;
    left: 12px;
  }
  .profile-v4-name {
    left: 5%;
    bottom: 5.5%;
    max-width: 86%;
  }
  .profile-v4-name h1 {
    font-size: clamp(34px, 12vw, 52px);
  }
  .profile-v4-name span {
    font-size: 9px;
  }
  .profile-v4-detail {
    padding: 21px 16px 28px;
  }
  .profile-v4-detail-head {
    align-items: flex-start;
    flex-direction: column;
  }
  .profile-subtabs-v3 {
    justify-content: flex-start;
    width: 100%;
    overflow-x: auto;
    flex-wrap: nowrap;
  }
  .profile-v4-tabs {
    top: 48px;
    margin-left: -16px;
    margin-right: -16px;
    padding-left: 8px;
    padding-right: 8px;
  }
  .profile-v4-tabs button {
    padding: 12px 10px 10px;
  }
  .profile-fact-sheet {
    grid-template-columns: 1fr;
  }
  .profile-fact-sheet > div,
  .profile-fact-sheet > div:nth-child(odd),
  .profile-fact-sheet > div:nth-child(even) {
    grid-template-columns: 92px 1fr;
    padding: 10px 4px;
    border-left: 0;
  }
  .profile-meter-row {
    grid-template-columns: 52px 82px 1fr;
    gap: 8px;
  }
  .profile-meter-dots {
    gap: 3px;
  }
  .profile-meter-dots i {
    width: 11px;
    height: 11px;
  }
  .profile-gallery-v4 {
    grid-template-columns: 1fr;
  }
  .profile-gallery-col {
    gap: 8px;
  }
  .profile-gallery-col + .profile-gallery-col {
    display: none;
  }
  .profile-image-preset {
    grid-template-columns: 1fr;
  }
  .profile-switch-tab {
    gap: 6px;
  }
  .profile-switch-tab span {
    font-size: 10px;
  }
  .profile-switch-tab small {
    font-size: 6px;
  }
}

@media (max-width: 390px) {
  .profile-v4-wrap {
    grid-template-rows: auto 430px auto 58px;
  }
  .profile-meter-row {
    grid-template-columns: 48px 76px 1fr;
  }
  .profile-meter-row span {
    font-size: 8px;
  }
  .profile-voice-list blockquote {
    grid-template-columns: 34px 1fr;
    gap: 8px;
  }
  .profile-voice-list blockquote span {
    font-size: 12px;
  }
}

/* Pair page */
.pair-page-v4 {
  padding-top: clamp(54px, 6vh, 68px);
  padding-bottom: max(92px, calc(env(safe-area-inset-bottom) + 82px));
  overflow: auto;
}
.pair-core-v4 {
  width: min(1420px, 70vw);
}
@media (max-width: 1500px) {
  .pair-core-v4 {
    width: min(1180px, 74vw);
  }
  .pair-edge-v4 {
    width: min(30vw, 470px);
    opacity: 0.92;
  }
}
@media (max-width: 1150px) {
  .pair-core-v4 {
    width: min(960px, 84vw);
  }
  .pair-edge-v4 {
    width: 27vw;
    opacity: 0.38;
  }
  .pair-info-v4 {
    padding: 17px;
  }
  .pair-info-head {
    grid-template-columns: 68px 1fr;
  }
  .pair-info-avatar {
    width: 66px;
    height: 66px;
  }
}
@media (max-width: 900px) {
  .pair-page-v4 {
    padding-left: 14px;
    padding-right: 14px;
  }
  .pair-page-v4 .pair-edge-v4 {
    display: none;
  }
  .pair-core-v4 {
    width: 100%;
  }
  .pair-info-grid-v4,
  .pair-direction-grid-v4 {
    grid-template-columns: 1fr 1fr;
  }
  .pair-info-v4 {
    min-height: 0;
  }
  .pair-info-stats {
    grid-template-columns: repeat(2, 1fr);
  }
  .pair-info-stats > div:nth-child(3) {
    border-left: 0;
  }
  .pair-info-stats > div:nth-child(n + 3) {
    border-top: 1px solid #e1dad7;
  }
  .pair-moodboard-v4 {
    grid-template-columns: 1fr 1fr;
    grid-template-rows: 240px 150px 150px;
  }
  .pair-moodboard-v4 figure.m1 {
    grid-column: 1/3;
    grid-row: 1;
  }
  .pair-moodboard-v4 figure.m2 {
    grid-column: 1;
    grid-row: 2;
  }
  .pair-moodboard-v4 figure.m3 {
    grid-column: 2;
    grid-row: 2;
  }
  .pair-moodboard-v4 figure.m4 {
    grid-column: 1;
    grid-row: 3;
  }
  .pair-moodboard-v4 figure.m5 {
    grid-column: 2;
    grid-row: 3;
  }
}
@media (max-width: 680px) {
  .pair-page-v4 {
    padding: 52px 9px 24px;
  }
  .pair-info-grid-v4,
  .pair-direction-grid-v4 {
    grid-template-columns: 1fr;
  }
  .pair-info-v4 {
    border-radius: 14px;
    padding: 15px;
  }
  .pair-info-head {
    grid-template-columns: 60px 1fr;
    gap: 11px;
  }
  .pair-info-avatar {
    width: 58px;
    height: 58px;
  }
  .pair-info-head h2 {
    font-size: 24px;
  }
  .pair-direction-v4 {
    min-height: 0;
    padding: 15px 16px;
  }
  .pair-center-title > i {
    width: 35px;
  }
  .pair-center-title h1 {
    font-size: 28px;
  }
  .pair-moodboard-v4 {
    grid-template-rows: 210px 120px 120px;
    gap: 6px;
  }
  .pair-moodboard-v4 figure {
    border-radius: 11px;
  }
  .pair-note-v4 {
    padding: 23px 16px;
  }
  .pair-note-v4 h2 {
    font-size: 30px;
  }
  .pair-note-v4 blockquote {
    font-size: 14px;
  }
}
@media (max-width: 420px) {
  .pair-moodboard-v4 {
    display: flex;
    flex-direction: column;
  }
  .pair-moodboard-v4 figure,
  .pair-moodboard-v4 figure.m1,
  .pair-moodboard-v4 figure.m2,
  .pair-moodboard-v4 figure.m3,
  .pair-moodboard-v4 figure.m4,
  .pair-moodboard-v4 figure.m5 {
    height: 190px;
  }
  .pair-moodboard-v4 figure.m1 {
    height: 230px;
  }
  .pair-info-colors span {
    min-width: 50px;
  }
}

/* Story */
.story-page-v4 {
  padding-top: clamp(62px, 7vh, 82px);
  padding-left: clamp(14px, 2.4vw, 28px);
  padding-right: clamp(14px, 2.4vw, 28px);
}
.story-shell-v4 {
  width: min(1280px, 100%);
  grid-template-columns: minmax(220px, 280px) minmax(0, 1fr);
  gap: clamp(32px, 5vw, 68px);
}
@media (max-width: 900px) {
  .story-shell-v4 {
    grid-template-columns: 1fr;
    gap: 28px;
  }
  .story-side-v4 {
    position: relative;
    top: auto;
    padding-top: 0;
  }
  .story-side-v4 p {
    max-width: 620px;
  }
  .story-legend-v4 {
    flex-direction: row;
    flex-wrap: wrap;
    margin-top: 15px;
  }
  .story-list-v4 {
    padding-left: 0;
  }
}
@media (max-width: 560px) {
  .story-page-v4 {
    padding: 58px 12px 70px;
  }
  .story-side-v4 h1 {
    font-size: 48px;
  }
  .story-chapter-v4 {
    grid-template-columns: 34px 18px minmax(0, 1fr);
    padding-bottom: 42px;
  }
  .story-list-v4:before {
    left: 42px;
  }
  .story-index-v4 {
    font-size: 22px;
    padding-right: 7px;
  }
  .story-marker-v4 i {
    left: 6px;
    width: 9px;
    height: 9px;
  }
  .story-body-v4 {
    padding-left: 12px;
  }
  .story-body-v4 h2 {
    font-size: clamp(26px, 9vw, 36px);
  }
  .story-body-v4 p {
    font-size: 10px;
    line-height: 1.9;
  }
}

/* Character roster */
.roster-page {
  padding: clamp(66px, 8vh, 88px) clamp(12px, 5vw, 70px) max(34px, env(safe-area-inset-bottom));
}
.roster-wrap {
  width: min(1320px, 100%);
  max-width: none;
}
.roster-grid {
  grid-template-columns: repeat(auto-fit, minmax(min(210px, 100%), 1fr));
  gap: clamp(10px, 1.2vw, 18px);
}
.roster-card {
  height: clamp(390px, 48vw, 520px);
  max-height: 540px;
}
@media (max-width: 700px) {
  .roster-grid {
    grid-template-columns: repeat(2, minmax(0, 1fr));
  }
  .roster-card {
    height: clamp(300px, 74vw, 410px);
  }
  .roster-caption b {
    font-size: 18px;
  }
  .roster-head h1 {
    font-size: clamp(38px, 12vw, 58px);
  }
}
@media (max-width: 390px) {
  .roster-page {
    padding-left: 9px;
    padding-right: 9px;
  }
  .roster-grid {
    gap: 7px;
  }
  .roster-card {
    height: 300px;
  }
  .roster-caption {
    padding-left: 7px;
    padding-right: 7px;
  }
  .roster-caption span {
    font-size: 8px;
  }
}

/* Relationship diagram */
.diagram-page {
  padding: clamp(62px, 8vh, 88px) clamp(10px, 4vw, 48px) max(26px, env(safe-area-inset-bottom));
  overflow: auto;
}
.diagram-board {
  width: min(1200px, 100%);
  height: clamp(520px, 70dvh, 720px);
}
@media (max-width: 650px) {
  .diagram-board {
    height: clamp(470px, 68dvh, 620px);
    border-radius: 18px;
  }
  .dnode {
    width: 86px;
  }
  .dnode-avatar {
    width: 58px;
    height: 58px;
    border-width: 4px;
  }
  .dnode b {
    font-size: 8px;
    padding: 4px 6px;
  }
  .edge-label {
    font-size: 8px;
    stroke-width: 5;
  }
}

/* Editor / modal — usable on tablets and phones without covering the whole site permanently. */
@media (max-width: 720px) {
  /* v0.3.270 — 사용자 피드백(캘린더 모바일 최적화)으로 발견: 이 규칙이 .collapsed(패널을
     접고 아이콘 레일만 떠 있는 상태)에도 그대로 걸려서 left:0/right:0/width:100%가
     .collapsed의 width:48px와 충돌 — CSS 스펙상 left/right/width가 모두 지정되면
     right는 무시되고 left 기준으로 계산되어, 원래 "오른쪽 세로 레일"이어야 할 아이콘
     레일이 화면 왼쪽 아래에 폭 48px로 눌러붙어 콘텐츠(캘린더 그리드 등)를 가렸습니다.
     패널이 실제로 열려있을 때(:not(.collapsed))만 전체 폭 바텀시트로 바꾸도록 스코프를
     좁힙니다 — 접힌 상태는 기본 규칙(오른쪽 세로 레일)을 그대로 씁니다. */
  .editor-drawer:not(.collapsed) {
    top: auto;
    bottom: 0;
    left: 0;
    right: 0;
    width: 100%;
    height: min(78dvh, 720px);
    border-left: 0;
    border-top: 1px solid #34343a;
    border-radius: 18px 18px 0 0;
    box-shadow: 0 -20px 55px rgba(0, 0, 0, 0.32);
    padding-bottom: env(safe-area-inset-bottom);
    animation: drawerUp 0.18s ease-out;
  }
  .drawer-head {
    height: 52px;
  }
  .drawer-body {
    padding: 13px;
  }
  .erow {
    grid-template-columns: 1fr;
  }
  .modal-back {
    padding: 12px;
  }
  .modal {
    width: 100%;
    max-height: 86dvh;
    border-radius: 17px;
    padding: 17px;
  }
  /* v0.3.268 — 사용자 피드백: 모바일에서 이 안내 알약이 상단바와 겹쳐 화면을 가림.
     좁은 화면에서는 줄여서 보여주는 대신 아예 숨깁니다(편집 기능 자체는 이 안내
     문구 없이도 동일하게 동작 — 그냥 도움말 텍스트라 안 보여도 무방). */
  .edit-hint {
    display: none;
  }
}
@keyframes drawerUp {
  from {
    transform: translateY(28px);
    opacity: 0;
  }
  to {
    transform: none;
    opacity: 1;
  }
}

/* Short landscape windows (small laptops / mobile landscape). */
@media (max-height: 720px) and (min-width: 700px) {
  .home-page {
    min-height: 620px;
  }
  .hero-copy {
    top: 13%;
  }
  .pair-core {
    bottom: 12%;
  }
  .character-art.hero-art {
    top: 8%;
  }
  .home-menu {
    bottom: 1%;
  }
  .profile-page-v4 {
    padding-top: 50px;
  }
  .profile-v4-wrap {
    height: auto;
    min-height: 650px;
  }
  .profile-v4-detail {
    overflow: auto;
  }
  .profile-v4-panel {
    overflow: visible;
  }
  .pair-page-v4 {
    padding-top: 50px;
  }
  .story-page-v4 {
    padding-top: 58px;
  }
}

@media (orientation: landscape) and (max-height: 520px) and (max-width: 950px) {
  .home-page {
    height: auto;
    min-height: 560px;
  }
  .hero-half.left .hero-art,
  .hero-half.right .hero-art {
    top: 8%;
    bottom: 8%;
  }
  .hero-copy {
    top: 8%;
  }
  .pair-core {
    bottom: 12%;
    transform: translateX(-50%) scale(0.86);
  }
  .profile-v4-wrap {
    grid-template-rows: auto 480px auto 58px;
  }
  .profile-page-v4 .outfit-rail {
    max-height: 86px;
  }
}

@media (prefers-reduced-motion: reduce) {
  *,
  *:before,
  *:after {
    scroll-behavior: auto !important;
    animation-duration: 0.01ms !important;
    animation-iteration-count: 1 !important;
    transition-duration: 0.01ms !important;
  }
}

/* =========================================================
   lope v0.3.6 — cinematic center-line history timeline
   Reference direction: centered vertical axis + alternating archive cards
   ========================================================= */
.story-page-v5 {
  position: relative;
  min-height: 100vh;
  min-height: 100dvh;
  overflow: hidden;
  /* v0.3.267 — 사용자 피드백: 상단 카드(세계관 등)가 고정 상단바에 바로 붙어서(심지어
     일부는 그 밑에 가려서) 답답해 보였습니다. 다른 페이지들(roster/gallery/dday 등)은
     이미 고정 상단바(58px/모바일 48px) 높이만큼 top padding으로 여유를 두는데, 이
     페이지만 top padding이 0이라 빠져 있었던 것 — 같은 관례로 맞춥니다. */
  /* v0.3.349 — 위 BEGINNING/PRESENT 알약이 너무 아래에서 시작한다는 요청. 이
     top padding 값이 .history-era-v5의 sticky 위치 계산에도 그대로 누적되는
     구조라(렌더 위치 = sticky top 값 + 이 padding), 둘 다 같이 줄여야 실제로
     체감되는 만큼 위로 올라갑니다. */
  padding: clamp(40px, 4vh, 55px) max(18px, env(safe-area-inset-right)) 120px max(18px, env(safe-area-inset-left));
  color: #f5f2ed;
  background:
    radial-gradient(ellipse at 50% -12%, rgba(221, 231, 238, 0.22) 0%, rgba(79, 94, 107, 0.08) 29%, transparent 55%),
    radial-gradient(ellipse at 8% 66%, rgba(76, 89, 98, 0.18), transparent 34%),
    radial-gradient(ellipse at 92% 74%, rgba(67, 80, 92, 0.14), transparent 30%),
    linear-gradient(135deg, #171c21 0%, #0f1418 42%, #171b20 100%);
}
.story-page-v5:before {
  content: "";
  position: absolute;
  inset: 0;
  pointer-events: none;
  opacity: 0.34;
  mix-blend-mode: screen;
  background:
    linear-gradient(
      112deg,
      transparent 0 17%,
      rgba(255, 255, 255, 0.045) 18%,
      transparent 19% 58%,
      rgba(255, 255, 255, 0.035) 59%,
      transparent 60%
    ),
    linear-gradient(
      72deg,
      transparent 0 33%,
      rgba(255, 255, 255, 0.028) 34%,
      transparent 35% 78%,
      rgba(255, 255, 255, 0.022) 79%,
      transparent 80%
    );
}
.story-page-v5:after {
  content: "";
  position: absolute;
  inset: 0;
  pointer-events: none;
  box-shadow: inset 0 0 180px rgba(0, 0, 0, 0.42);
}
.history-light-v5 {
  position: absolute;
  border-radius: 50%;
  filter: blur(52px);
  pointer-events: none;
  opacity: 0.12;
  background: #d9e3ea;
}
.history-light-v5.one {
  width: 36vw;
  height: 17vw;
  left: 35%;
  top: 3%;
}
.history-light-v5.two {
  width: 28vw;
  height: 20vw;
  right: -5%;
  top: 34%;
  opacity: 0.07;
}
.history-shell-v5 {
  position: relative;
  z-index: 1;
  width: min(1320px, 100%);
  margin: 0 auto;
  /* v0.3.267 — 상단 여유는 이제 .story-page-v5의 top padding이 맡으므로(위 참고),
     여기 자체 top padding은 그 안에서의 추가 여백 정도로만 줄였습니다. */
  padding: 8px 0 70px;
}
/* v0.3.347 — 세계관(lorePanel)이 없으면 .history-era-v5가 .history-shell-v5의
   첫 자식이 되는데, 이 경우 자연스러운(스크롤 전) 위치가 sticky 임계값(top:66px)
   근처라서 스크롤 0에서도 이미 "고정"된 것처럼 렌더링되고, 그 아래 필터 줄
   (.history-tools-v7)은 여전히 "안 고정됐을 때" 기준 여백(28px)만 갖고 있어서
   서로 겹쳐 보였습니다("타임라인 세계관 없을 때 상단 알약이 필터랑 겹침"). 세계관이
   있을 때는 이 알약이 페이지 아래쪽에서 시작해 위 문제가 안 생겼습니다. 첫 자식일
   때만 여백을 넉넉히 더 줘서 항상 필터 줄과 안 겹치게 합니다.
*/
.history-shell-v5 > .history-era-v5:first-child {
  margin-bottom: 72px;
}
.history-era-v5 {
  position: sticky;
  /* v0.3.267 — 스크롤해서 이 필터바가 상단에 붙을 때 고정 상단바(58px) 밑에 가려지지
     않도록. .scene-picker-toggle이 이미 쓰던 것과 같은 관례(top:66px)로 맞춤.
     v0.3.349 — 실측 결과 이 알약의 실제 렌더 위치 = 이 top 값 + .story-page-v5의
     top padding(둘이 누적됨). 알약을 눈에 띄게 위로 올리려면 이 값도 같이
     줄여야 함 — 상단바(58px) 클리어는 story-page-v5 padding 쪽에서 확보. */
  top: 24px;
  z-index: 8;
  width: max-content;
  max-width: calc(100vw - 32px);
  margin: 0 auto 28px;
  display: flex;
  align-items: center;
  gap: 12px;
  padding: 11px 18px;
  border-radius: 999px;
  background: rgba(250, 248, 244, 0.96);
  color: #25282a;
  box-shadow: 0 12px 38px rgba(0, 0, 0, 0.18);
  backdrop-filter: blur(10px);
  font:
    600 12px/1.1 Georgia,
    "Noto Serif KR",
    serif;
  letter-spacing: 0.02em;
}
.history-era-v5 i {
  display: block;
  width: 1px;
  height: 17px;
  background: #c8c5bf;
}
.history-era-v5 span:last-child {
  color: #6d6f70;
}
.history-track-v5 {
  position: absolute;
  left: 50%;
  top: 65px;
  bottom: 0;
  width: 1px;
  background: linear-gradient(
    to bottom,
    rgba(240, 239, 235, 0.9),
    rgba(240, 239, 235, 0.72) 86%,
    rgba(240, 239, 235, 0)
  );
  transform: translateX(-0.5px);
}
.history-list-v5 {
  position: relative;
  padding: 0 0 30px;
}
.history-event-v5 {
  position: relative;
  display: grid;
  grid-template-columns: minmax(0, 1fr) 86px minmax(0, 1fr);
  align-items: start;
  min-height: clamp(250px, 31vh, 360px);
  padding: 22px 0 34px;
}
.history-event-v5:before {
  content: "";
  position: absolute;
  top: 69px;
  height: 1px;
  background: rgba(239, 238, 234, 0.7);
  width: 44px;
}
.history-event-v5.left:before {
  left: calc(50% - 44px);
}
.history-event-v5.right:before {
  left: 50%;
}
.history-slot-v5 {
  width: min(470px, 100%);
}
.history-event-v5.left .history-slot-v5 {
  grid-column: 1;
  justify-self: end;
}
.history-event-v5.right .history-slot-v5 {
  grid-column: 3;
  justify-self: start;
}
.history-axis-v5 {
  grid-column: 2;
  grid-row: 1;
  position: relative;
  height: 100%;
  min-height: 120px;
  display: flex;
  justify-content: center;
  padding-top: 38px;
}
.history-axis-v5 i {
  display: block;
  width: 17px;
  height: 17px;
  border: 5px solid #151b20;
  border-radius: 50%;
  background: #f2f0eb;
  box-shadow:
    0 0 0 1px rgba(255, 255, 255, 0.35),
    0 4px 14px rgba(0, 0, 0, 0.35);
}
.history-card-v5 {
  position: relative;
  width: 100%;
  min-height: 220px;
  padding: 31px 36px 28px;
  background: rgba(250, 248, 244, 0.98);
  color: #292b2c;
  border-radius: 2px;
  box-shadow: 0 22px 55px rgba(0, 0, 0, 0.2);
  font-family: "Noto Serif KR", Georgia, serif;
  overflow: hidden;
}
.history-card-v5:after {
  content: "";
  position: absolute;
  inset: auto 0 0;
  height: 3px;
  background: linear-gradient(90deg, transparent, rgba(28, 31, 33, 0.14), transparent);
}
.history-card-v5 header {
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: 16px;
  margin-bottom: 10px;
}
.history-card-v5 header span {
  font:
    700 9px/1 Arial,
    sans-serif;
  letter-spacing: 0.14em;
  color: #7b7d7d;
}
.history-card-v5 header em {
  font:
    500 12px/1 Georgia,
    serif;
  color: #9a9995;
  font-style: normal;
}
.history-card-v5 h2 {
  margin: 0 0 17px;
  font:
    700 clamp(26px, 2.3vw, 38px)/1.08 Georgia,
    "Noto Serif KR",
    serif;
  letter-spacing: -0.035em;
  color: #222426;
}
/* v0.3.347 — 세로 연표(vertical) 카드에는 이미지가 아예 없었는데(오버레이 모드
   미리보기에만 있었음), 이 카드에도 보였으면 한다는 요청. 카드 좌우 패딩을
   가로지르는 형태로 넣고, 확대 전엔 원본 전체가 보이는 contain으로(다른 드래그·
   휠 조절 이미지들과 같은 규칙) — 정확한 비율을 지정한 건 아니라 3:2 정도로 둠. */
.history-card-media-v5 {
  position: relative;
  margin: 0 -36px 20px;
  aspect-ratio: 3 / 2;
  overflow: hidden;
  background: rgba(0, 0, 0, 0.04);
}
.history-card-media-v5 img {
  width: 100%;
  height: 100%;
  display: block;
  object-fit: contain;
}
.history-card-v5 p {
  margin: 0;
  white-space: pre-wrap;
  font:
    400 12px/1.95 "Noto Serif KR",
    serif;
  color: #686b6c;
  word-break: keep-all;
}
.history-card-v5 footer {
  display: flex;
  align-items: center;
  justify-content: space-between;
  margin-top: 24px;
  padding-top: 12px;
  border-top: 1px solid #e2dfda;
  color: #9b9995;
}
.history-card-v5 footer span {
  font:
    700 7px/1 Arial,
    sans-serif;
  letter-spacing: 0.18em;
}
.history-card-v5 footer b {
  font:
    500 17px/1 Georgia,
    serif;
  color: #c0bcb6;
}
.history-lock-v5 {
  min-height: 260px;
  text-align: center;
  padding: 28px 30px;
  display: flex;
  flex-direction: column;
  align-items: center;
  justify-content: center;
}
.history-lock-icon {
  width: 34px;
  height: 34px;
  border: 1px solid #c6c8c7;
  border-radius: 50%;
  display: grid;
  place-items: center;
  font-size: 17px;
  color: #929796;
  margin-bottom: 8px;
}
.history-lock-v5 h2 {
  font-size: 18px;
  margin: 3px 0 7px;
}
.history-lock-v5 > p {
  font-size: 10px;
  color: #9a9b98;
  line-height: 1.65;
}
.history-unlock-v5 {
  width: 100%;
  margin: 18px 0 12px;
  padding: 12px 14px;
  border: 1px solid #deddd8;
  border-radius: 8px;
  display: flex;
  align-items: center;
  justify-content: space-between;
  text-align: left;
}
.history-unlock-v5 small {
  font:
    700 7px/1 Arial,
    sans-serif;
  letter-spacing: 0.15em;
  color: #a09e99;
}
.history-unlock-v5 b {
  font-size: 11px;
  color: #555856;
}
.history-lock-v5 button {
  border: 0;
  border-radius: 4px;
  padding: 10px 22px;
  background: #20282d;
  color: #fff;
  font-size: 10px;
  letter-spacing: 0.08em;
  opacity: 0.82;
}
/* v0.3.89 — 탭별 비밀번호 잠금 화면 */
.tab-lock-page {
  min-height: calc(100vh - 90px);
  display: grid;
  place-items: center;
  padding: 40px 20px 120px;
}
.tab-lock-card {
  width: min(340px, 100%);
  text-align: center;
  padding: 34px 26px;
  border-radius: 20px;
  background: #fff;
  border: 1px solid rgba(20, 18, 18, 0.1);
  box-shadow: var(--shadow);
}
.tab-lock-icon {
  width: 42px;
  height: 42px;
  margin: 0 auto 12px;
  border-radius: 50%;
  border: 1px solid color-mix(in srgb, var(--accent) 40%, #c6c8c7);
  color: var(--accent);
  display: grid;
  place-items: center;
  font-size: 19px;
}
.tab-lock-card > small {
  display: block;
  font:
    800 9px/1 Arial,
    sans-serif;
  letter-spacing: 0.16em;
  color: #a09e99;
  margin-bottom: 6px;
}
.tab-lock-card h1 {
  font-size: 20px;
  margin: 0 0 6px;
}
.tab-lock-card > p {
  font-size: 11px;
  color: #8c8984;
  margin: 0 0 20px;
}
.tab-lock-form {
  display: flex;
  gap: 8px;
  margin-bottom: 14px;
}
.tab-lock-form input {
  flex: 1;
  min-width: 0;
  height: 40px;
  padding: 0 12px;
  border-radius: 10px;
  border: 1px solid rgba(20, 18, 18, 0.16);
  background: #f8f6f2;
  font-size: 13px;
  text-align: center;
  letter-spacing: 0.1em;
}
.tab-lock-form button {
  border: 0;
  border-radius: 10px;
  padding: 0 18px;
  background: var(--accent);
  color: #fff;
  font-size: 11px;
  font-weight: 700;
  cursor: pointer;
}
.tab-lock-back {
  border: 0;
  background: none;
  color: #a29d97;
  font-size: 10px;
  cursor: pointer;
  padding: 6px;
}
/* v0.3.234 — 회색이라 나머지(포인트색으로 바꾼 세계관 패널 등)와 안 어울리고
   따로 노는 느낌이라는 피드백으로 포인트색 계열로 바꿨습니다.
   v0.3.236 — 45도 회전 마름모 모양이 이 사이트 다른 곳(전부 라운드 사각형)과
   안 맞고 유독 튄다는 피드백으로, 회전을 없애고 다른 버튼들과 같은 라운드 사각형 +
   ↑ 아이콘으로 바꿨습니다. */
.history-top-v5 {
  position: fixed;
  z-index: 12;
  left: max(24px, env(safe-area-inset-left));
  bottom: max(24px, env(safe-area-inset-bottom));
  width: 48px;
  height: 48px;
  display: grid;
  place-items: center;
  border-radius: 14px;
  border: 1px solid color-mix(in srgb, var(--accent, #9f7d86) 50%, #fff 30%);
  background: color-mix(in srgb, var(--accent, #9f7d86) 78%, #000 10%);
  color: #fff;
  backdrop-filter: blur(7px);
  cursor: pointer;
  box-shadow: 0 10px 26px color-mix(in srgb, var(--accent, #9f7d86) 30%, transparent);
}
.history-top-v5 span {
  display: block;
  font-size: 18px;
  line-height: 1;
}
.history-animate .history-event-v5 {
  opacity: 0;
  transition:
    opacity 0.72s ease,
    transform 0.72s cubic-bezier(0.22, 0.8, 0.22, 1);
}
.history-animate .history-event-v5.left {
  transform: translateX(-34px);
}
.history-animate .history-event-v5.right {
  transform: translateX(34px);
}
.history-animate .history-event-v5.inview {
  opacity: 1;
  transform: translateX(0);
}
@media (max-width: 980px) {
  .history-shell-v5 {
    width: min(900px, 100%);
  }
  .history-event-v5 {
    grid-template-columns: minmax(0, 1fr) 66px minmax(0, 1fr);
    min-height: 230px;
  }
  .history-slot-v5 {
    width: min(400px, 100%);
  }
  .history-card-v5 {
    padding: 26px 28px;
  }
  .history-event-v5:before {
    width: 34px;
  }
  .history-event-v5.left:before {
    left: calc(50% - 34px);
  }
}
@media (max-width: 720px) {
  .story-page-v5 {
    padding-left: max(11px, env(safe-area-inset-left));
    padding-right: max(11px, env(safe-area-inset-right));
    padding-top: 58px;
    padding-bottom: 90px;
  }
  .history-shell-v5 {
    padding-top: 6px;
  }
  .history-era-v5 {
    top: 54px;
    margin-bottom: 20px;
    padding: 9px 14px;
    font-size: 10px;
  }
  .history-track-v5 {
    left: 20px;
    top: 58px;
  }
  .history-event-v5 {
    display: block;
    min-height: 0;
    padding: 16px 0 34px 52px;
  }
  .history-event-v5:before,
  .history-event-v5.left:before,
  .history-event-v5.right:before {
    left: 20px;
    top: 56px;
    width: 32px;
  }
  .history-axis-v5 {
    position: absolute;
    left: 12px;
    top: 37px;
    width: 17px;
    height: 17px;
    min-height: 0;
    padding: 0;
    display: block;
  }
  .history-axis-v5 i {
    width: 16px;
    height: 16px;
    border-width: 4px;
  }
  .history-slot-v5,
  .history-event-v5.left .history-slot-v5,
  .history-event-v5.right .history-slot-v5 {
    width: 100%;
    display: block;
  }
  .history-card-v5 {
    min-height: 0;
    padding: 24px 22px 22px;
  }
  .history-card-v5 h2 {
    font-size: 29px;
  }
  .history-card-v5 p {
    font-size: 11px;
    line-height: 1.9;
  }
  .history-animate .history-event-v5.left,
  .history-animate .history-event-v5.right {
    transform: translateX(24px);
  }
  .history-top-v5 {
    width: 46px;
    height: 46px;
    left: max(16px, env(safe-area-inset-left));
    bottom: max(18px, env(safe-area-inset-bottom));
  }
}
@media (max-width: 420px) {
  .history-event-v5 {
    padding-left: 44px;
  }
  .history-track-v5 {
    left: 15px;
  }
  .history-event-v5:before,
  .history-event-v5.left:before,
  .history-event-v5.right:before {
    left: 15px;
    width: 29px;
  }
  .history-axis-v5 {
    left: 7px;
  }
  .history-card-v5 {
    padding: 21px 18px;
  }
  .history-card-v5 h2 {
    font-size: 26px;
  }
  .history-era-v5 {
    gap: 8px;
  }
}

/* lope v0.3.7 — character-scoped timeline */
.history-filter-v6 {
  position: relative;
  z-index: 3;
  display: flex;
  justify-content: center;
  align-items: center;
  gap: 7px;
  flex-wrap: wrap;
  margin: -8px auto 34px;
  padding: 0 14px;
}
.history-filter-v6 button {
  height: 34px;
  border: 1px solid rgba(255, 255, 255, 0.22);
  border-radius: 999px;
  background: rgba(16, 21, 25, 0.48);
  backdrop-filter: blur(8px);
  color: rgba(255, 255, 255, 0.72);
  padding: 4px 12px;
  display: flex;
  align-items: center;
  gap: 7px;
  font:
    700 8px/1 Arial,
    sans-serif;
  letter-spacing: 0.09em;
  cursor: pointer;
  transition: 0.2s ease;
}
.history-filter-v6 button:hover,
.history-filter-v6 button.on {
  background: #f1efea;
  color: #22272a;
  border-color: #f1efea;
}
.history-filter-v6 button i {
  width: 22px;
  height: 22px;
  border-radius: 50%;
  overflow: hidden;
  background: var(--c, #888);
  display: grid;
  place-items: center;
  font-style: normal;
  font-size: 8px;
  color: #fff;
}
.history-filter-v6 button i img {
  width: 100%;
  height: 100%;
  object-fit: cover;
}
.history-filter-v6 button span {
  white-space: nowrap;
}
.timeline-people {
  display: flex;
  align-items: center;
  gap: 5px;
  flex-wrap: wrap;
}
.timeline-people > span {
  display: flex;
  align-items: center;
  gap: 5px;
  border: 1px solid #dedbd5;
  background: #f8f7f3;
  border-radius: 999px;
  padding: 3px 7px 3px 3px;
  color: #72716d;
}
.timeline-people > span i {
  width: 21px;
  height: 21px;
  border-radius: 50%;
  display: grid;
  place-items: center;
  background: var(--c, #999);
  overflow: hidden;
  color: #fff;
  font:
    700 7px/1 Arial,
    sans-serif;
}
.timeline-people > span i img {
  width: 100%;
  height: 100%;
  object-fit: cover;
}
.timeline-people > span b {
  font:
    700 7px/1 Arial,
    sans-serif;
  letter-spacing: 0.02em;
}
.timeline-people.compact > span {
  padding: 2px 6px 2px 2px;
}
.timeline-people.compact > span i {
  width: 18px;
  height: 18px;
}
.timeline-people.compact > span b {
  font-size: 6px;
}
.history-card-v5 header > div {
  min-width: 0;
}
.history-empty-v6 {
  grid-column: 1/4;
  margin: 80px auto 150px;
  text-align: center;
  color: #d6d4ce;
}
.history-empty-v6 small {
  font:
    700 8px/1 Arial,
    sans-serif;
  letter-spacing: 0.18em;
  opacity: 0.55;
}
.history-empty-v6 h2 {
  font:
    500 30px/1.15 Georgia,
    "Noto Serif KR",
    serif;
  margin: 10px 0;
}
.history-empty-v6 p {
  font-size: 10px;
  opacity: 0.55;
}
.profile-timeline-v1 {
  padding: 2px 0 24px;
}
.profile-timeline-v1 > header {
  display: flex;
  align-items: end;
  justify-content: space-between;
  gap: 14px;
  border-bottom: 1px solid #d8d5d0;
  padding-bottom: 14px;
  margin-bottom: 4px;
}
.profile-timeline-v1 > header small,
.profile-timeline-empty small {
  font:
    700 7px/1 Arial,
    sans-serif;
  letter-spacing: 0.18em;
  color: #a19b9d;
}
.profile-timeline-v1 > header h3,
.profile-timeline-empty h3 {
  font:
    500 clamp(28px, 2.4vw, 40px)/1 Georgia,
    "Noto Serif KR",
    serif;
  margin: 5px 0 0;
}
.profile-timeline-full {
  border: 0;
  background: none;
  border-bottom: 1px solid currentColor;
  padding: 4px 0;
  color: #696467;
  font:
    700 7px/1 Arial,
    sans-serif;
  letter-spacing: 0.13em;
  cursor: pointer;
}
.profile-timeline-list article {
  display: grid;
  grid-template-columns: 48px 1fr;
  gap: 14px;
  padding: 18px 0;
  border-bottom: 1px solid #e4e1dc;
}
.profile-timeline-index {
  font:
    500 25px/1 Georgia,
    serif;
  color: color-mix(in srgb, var(--c) 55%, #aaa);
}
.profile-timeline-copy > small {
  font:
    700 7px/1 Arial,
    sans-serif;
  letter-spacing: 0.14em;
  color: #aaa3a4;
}
.profile-timeline-copy h4 {
  font:
    700 19px/1.2 "Noto Serif KR",
    serif;
  margin: 5px 0 8px;
}
.profile-timeline-copy p {
  font:
    400 10px/1.9 "Noto Serif KR",
    serif;
  color: #6e696b;
  margin: 0 0 11px;
  white-space: pre-wrap;
  display: -webkit-box;
  -webkit-line-clamp: 3;
  -webkit-box-orient: vertical;
  overflow: hidden;
}
.profile-timeline-empty {
  padding: 60px 20px;
  text-align: center;
}
.profile-timeline-empty p {
  font-size: 10px;
  color: #999;
  line-height: 1.8;
}
.timeline-editor-list {
  display: flex;
  flex-direction: column;
  gap: 6px;
}
.timeline-editor-row {
  align-items: flex-start;
}
.timeline-editor-row .timeline-people {
  margin-top: 6px;
}
.timeline-order-tools {
  display: flex;
  gap: 2px;
  flex-shrink: 0;
}
.timeline-member-picker {
  display: grid;
  grid-template-columns: 1fr 1fr;
  gap: 6px;
}
.timeline-member-picker label {
  display: flex;
  align-items: center;
  gap: 7px;
  border: 1px solid #ddd;
  border-radius: 8px;
  padding: 8px;
  background: #fff;
  cursor: pointer;
}
.timeline-member-picker label:has(input:checked) {
  border-color: var(--c);
  box-shadow: inset 3px 0 var(--c);
}
.timeline-member-picker label input {
  margin: 0;
}
.timeline-member-picker label span {
  width: 21px;
  height: 21px;
  border-radius: 50%;
  display: grid;
  place-items: center;
  background: var(--c);
  color: #fff;
  font:
    700 8px/1 Arial,
    sans-serif;
}
.timeline-member-picker label b {
  font-size: 10px;
  color: #333;
}
.modal-help {
  display: block;
  color: #999;
  font-size: 9px;
  line-height: 1.55;
  margin-top: 6px;
}
.modal-check {
  display: flex !important;
  align-items: center;
  gap: 7px;
}
.modal-check-group {
  display: flex;
  flex-wrap: wrap;
  gap: 6px 18px;
}
.modal-check input {
  width: auto !important;
  margin: 0;
}
.drawer-tabs {
  overflow-x: auto;
  scrollbar-width: none;
}
.drawer-tabs::-webkit-scrollbar {
  display: none;
}
@media (max-width: 700px) {
  .history-filter-v6 {
    justify-content: flex-start;
    flex-wrap: nowrap;
    overflow-x: auto;
    margin: 0 0 18px;
    padding: 0 0 7px 44px;
    scrollbar-width: none;
  }
  .history-filter-v6::-webkit-scrollbar {
    display: none;
  }
  .history-filter-v6 button {
    flex: 0 0 auto;
    height: 32px;
  }
  .history-era-v5 {
    margin-bottom: 10px;
  }
  .profile-timeline-v1 > header {
    align-items: flex-start;
    flex-direction: column;
  }
  .profile-timeline-list article {
    grid-template-columns: 36px 1fr;
    gap: 9px;
  }
  .profile-timeline-index {
    font-size: 20px;
  }
  .timeline-member-picker {
    grid-template-columns: 1fr;
  }
  .history-empty-v6 {
    margin: 50px 20px 100px;
  }
}

/* lope v0.3.8 — D-Day cards */
.dday-page {
  min-height: 100vh;
  min-height: 100dvh;
  color: #232124;
  padding: 76px clamp(14px, 3vw, 42px) 70px;
}
.dday-page-wrap {
  width: min(1220px, 100%);
  margin: 0 auto;
}
.dday-page-head {
  text-align: center;
  margin: 12px auto 34px;
}
.dday-page-head small {
  font:
    700 8px/1 Arial,
    sans-serif;
  letter-spacing: 0.24em;
  color: #9b9495;
}
.dday-page-head h1 {
  font:
    500 clamp(44px, 6vw, 78px)/0.95 Georgia,
    "Noto Serif KR",
    serif;
  margin: 9px 0 12px;
}
.dday-page-head p {
  margin: 0;
  color: #91898c;
  font-size: 10px;
}
.dday-grid {
  display: grid;
  grid-template-columns: repeat(2, minmax(0, 1fr));
  gap: 18px;
  align-items: start;
}
.dday-card {
  position: relative;
  min-height: 330px;
  border-radius: 22px;
  background: #fff;
  overflow: hidden;
  box-shadow: 0 18px 55px rgba(62, 52, 55, 0.1);
  border: 1px solid color-mix(in srgb, var(--dd) 28%, #ddd);
  isolation: isolate;
  transition:
    transform 0.2s ease,
    box-shadow 0.2s ease;
}
.dday-card[role="button"] {
  cursor: pointer;
}
.dday-card[role="button"]:hover {
  transform: translateY(-3px);
  box-shadow: 0 24px 65px rgba(62, 52, 55, 0.15);
}
.dday-copy {
  position: relative;
  z-index: 5;
}
.dday-copy small {
  display: block;
  font:
    700 7px/1 Arial,
    sans-serif;
  letter-spacing: 0.18em;
  color: color-mix(in srgb, var(--dd) 68%, #777);
}
.dday-copy h2 {
  font:
    600 clamp(22px, 2.2vw, 31px)/1.08 "Noto Serif KR",
    Georgia,
    serif;
  margin: 8px 0 16px;
  letter-spacing: -0.04em;
}
.dday-copy strong {
  display: block;
  font:
    500 clamp(44px, 5vw, 70px)/0.9 Georgia,
    "Noto Serif KR",
    serif;
  color: #272326;
  letter-spacing: -0.055em;
}
.dday-copy strong.special {
  color: var(--dd);
  text-shadow: 0 7px 20px color-mix(in srgb, var(--dd) 18%, transparent);
}
.dday-copy > b {
  display: block;
  margin-top: 8px;
  font:
    700 10px/1 Arial,
    sans-serif;
  letter-spacing: 0.13em;
  color: var(--dd);
}
.dday-copy p {
  /* v0.3.227 — 화이트 모드에서 이 SINCE 줄이 너무 안 보인다는 피드백. 8px 크기에서는
     700도 이미 최대로 굵어 보여서 큰 차이가 안 나길래, 진짜 원인인 색상 대비를
     손봤습니다(#aaa1a4는 밝은 배경에서 대비가 너무 낮음) — 사이트 공통 톤다운 텍스트
     색(--muted)으로 바꾸고 굵기도 한 단계 더 올렸습니다. */
  font:
    800 8px/1.35 Arial,
    sans-serif;
  letter-spacing: 0.12em;
  color: var(--muted, #8c8984);
  margin: 10px 0 0;
}
.dday-copy em {
  display: block;
  font-style: normal;
  font-size: 9px;
  color: #8e8789;
  margin-top: 14px;
}
.dday-pager {
  position: absolute;
  z-index: 8;
  display: flex;
  gap: 4px;
}
.dday-pager i {
  width: 5px;
  height: 5px;
  border-radius: 50%;
  background: rgba(90, 82, 85, 0.24);
}
.dday-pager i.on {
  width: 14px;
  border-radius: 999px;
  background: var(--dd);
}
.dday-cycle-hint {
  position: absolute;
  z-index: 8;
  font:
    700 6px/1 Arial,
    sans-serif;
  letter-spacing: 0.18em;
  color: rgba(66, 59, 61, 0.42);
}
/* 1. pair landscape */
.dday-card.layout-pair {
  display: grid;
  grid-template-rows: minmax(210px, 1fr) auto;
}
.dday-pair-media {
  position: relative;
  min-height: 220px;
  overflow: hidden;
  background: #e8e5e1;
}
.dday-pair-media:after {
  content: "";
  position: absolute;
  inset: auto 0 0;
  height: 38%;
  background: linear-gradient(transparent, rgba(255, 255, 255, 0.82));
}
.dday-pair-media img {
  width: 100%;
  height: 100%;
  /* v0.3.341 — 학생증 카드와 같은 이유로 cover→contain. 드래그·휠(--img-scale)로
     조절하는 이미지인데 확대 전부터 프레임이 테두리를 잘라서 보여주면 "온전한
     이미지가 프레임 안에 있어야 한다"는 요청과 어긋납니다. */
  object-fit: contain;
  display: block;
}
.dday-card.layout-pair .dday-copy {
  padding: 19px 26px 23px;
  text-align: center;
}
.dday-card.layout-pair .dday-copy strong {
  font-size: clamp(38px, 4.2vw, 58px);
}
.dday-card.layout-pair .dday-copy h2 {
  margin-bottom: 8px;
}
.dday-card.layout-pair .dday-pager {
  right: 19px;
  top: 18px;
}
.dday-card.layout-pair .dday-cycle-hint {
  left: 20px;
  top: 18px;
  color: rgba(255, 255, 255, 0.75);
  text-shadow: 0 1px 7px rgba(0, 0, 0, 0.4);
}
/* 2. personal gradient */
.dday-card.layout-personal {
  display: grid;
  grid-template-columns: 55% 45%;
  min-height: 360px;
  background: linear-gradient(125deg, color-mix(in srgb, var(--dd) 9%, #fff), #fff 62%);
}
.dday-personal-media {
  position: absolute;
  inset: 0 auto 0 0;
  width: 62%;
  overflow: hidden;
  z-index: 1;
}
.dday-personal-media.right {
  left: auto;
  right: 0;
}
.dday-personal-media:after {
  content: "";
  position: absolute;
  inset: 0;
  pointer-events: none;
  background: linear-gradient(90deg, transparent 50%, #fff 96%);
}
.dday-personal-media.right:after {
  background: linear-gradient(-90deg, transparent 50%, #fff 96%);
}
.dday-personal-media img {
  width: 100%;
  height: 100%;
  object-fit: contain;
  object-position: center bottom;
  display: block;
}
.dday-card.layout-personal .dday-copy {
  grid-column: 2;
  /* v0.3.322 — 그리드 아이템은 기본 min-width:auto라, 안에 든 글자(특히 줄바꿈 안
     되는 긴 토큰)가 지정한 트랙 너비(55%/45%)보다 넓으면 트랙 자체가 그만큼
     넓어져서 옆 칸(이미지 쪽) 영역을 침범합니다 — "생일이 오른쪽일 때 글자가
     오른쪽으로 튀어나온다"는 리포트가 이 현상입니다. min-width:0으로 트랙이 지정한
     너비 밑으로도 눌릴 수 있게 해서(넘치는 글자는 줄바꿈), 침범을 막습니다. */
  min-width: 0;
  align-self: center;
  padding: 32px 28px 30px;
  text-align: left;
}
.dday-card.layout-personal.side-right .dday-copy {
  grid-column: 1;
  text-align: right;
}
.dday-card.layout-personal .dday-pager {
  right: 20px;
  bottom: 18px;
}
.dday-card.layout-personal.side-right .dday-pager {
  right: auto;
  left: 20px;
}
.dday-card.layout-personal .dday-cycle-hint {
  right: 20px;
  top: 18px;
}
.dday-card.layout-personal.side-right .dday-cycle-hint {
  right: auto;
  left: 20px;
}
/* 3. dual portraits */
.dday-card.layout-dual {
  display: grid;
  grid-template-columns: minmax(0, 1fr) minmax(190px, 34%) minmax(0, 1fr);
  min-height: 360px;
  background: linear-gradient(
    90deg,
    color-mix(in srgb, var(--dd) 11%, #fff),
    #fff 39% 61%,
    color-mix(in srgb, var(--dd) 9%, #fff)
  );
}
.dday-dual-media {
  position: relative;
  overflow: hidden;
  z-index: 1;
}
.dday-dual-media:after {
  content: "";
  position: absolute;
  inset: 0;
  background: linear-gradient(90deg, transparent 64%, #fff 100%);
}
.dday-dual-media.right:after {
  background: linear-gradient(-90deg, transparent 64%, #fff 100%);
}
.dday-dual-media img {
  width: 100%;
  height: 100%;
  /* v0.3.341 — 학생증 카드와 같은 이유로 cover→contain. */
  object-fit: contain;
  display: block;
}
.dday-card.layout-dual .dday-copy {
  grid-column: 2;
  align-self: center;
  text-align: center;
  padding: 28px 6px;
}
.dday-card.layout-dual .dday-copy strong {
  font-size: clamp(38px, 4vw, 56px);
}
.dday-card.layout-dual .dday-pager {
  left: 50%;
  bottom: 18px;
  transform: translateX(-50%);
}
.dday-card.layout-dual .dday-cycle-hint {
  left: 50%;
  top: 18px;
  transform: translateX(-50%);
  white-space: nowrap;
}
.dday-card.is-special:before {
  content: "";
  position: absolute;
  z-index: 0;
  inset: 0;
  border: 2px solid color-mix(in srgb, var(--dd) 52%, transparent);
  border-radius: inherit;
  pointer-events: none;
  box-shadow: inset 0 0 48px color-mix(in srgb, var(--dd) 8%, transparent);
}
.dday-empty {
  grid-column: 1/-1;
  border: 1px dashed #d5cecf;
  border-radius: 18px;
  padding: 70px 20px;
  text-align: center;
  color: #9b9395;
}
.dday-empty h2 {
  font:
    500 26px/1.1 Georgia,
    "Noto Serif KR",
    serif;
  color: #5e5759;
}
/* home optional widgets */
.home-dday-widgets {
  position: absolute;
  z-index: 16;
  top: max(64px, calc(env(safe-area-inset-top) + 56px));
  left: 50%;
  transform: translateX(-50%);
  display: flex;
  gap: 8px;
  width: min(560px, 46vw);
  justify-content: center;
  pointer-events: none;
}
.home-dday-widgets .dday-card {
  pointer-events: auto;
  min-height: 0;
  width: min(270px, 100%);
  height: 78px;
  border-radius: 16px;
  background: rgba(248, 246, 242, 0.88);
  backdrop-filter: blur(13px);
  box-shadow: 0 10px 34px rgba(0, 0, 0, 0.2);
  display: grid;
  grid-template-columns: 84px 1fr;
  grid-template-rows: 1fr;
  color: #282427;
}
/* v0.3.241 — 모바일(≤430px)에서 D-Day 위젯(pair 레이아웃)이 사실상 안 보이던 문제.
   페이지 전용 규칙 `@media (max-width:430px){ .dday-card.layout-pair{ grid-template-rows:
   190px auto } }`이 이 홈 위젯의 카드에도 그대로 걸려있었습니다 — 두 선택자 모두 클래스
   2개짜리라 우선순위가 같고, 430px 규칙이 파일 뒤쪽에 있어 소스 순서로 이겨버려서
   위젯 카드(전체 높이 78px, overflow:hidden)의 grid 행이 190px로 늘어나고, 내용
   (D+숫자, 문구)이 있는 두 번째 행이 카드 아래로 밀려나 거의 다 잘려 보이지 않았습니다.
   클래스 3개짜리 선택자로 못박아 항상 이기도록 고정합니다. */
.home-dday-widgets .dday-card.layout-pair {
  grid-template-rows: 1fr;
}
.home-dday-widgets .dday-card.layout-pair .dday-pair-media {
  grid-row: 1;
  grid-column: 1;
  min-height: 0;
  height: 78px;
}
.home-dday-widgets .dday-card.layout-pair .dday-pair-media:after {
  display: none;
}
.home-dday-widgets .dday-card.layout-pair .dday-copy {
  grid-row: 1;
  grid-column: 2;
  text-align: left;
  padding: 12px 13px;
  align-self: center;
}
/* v0.3.240 — "메인 모바일 최적화": 카드 높이(78px)보다 내용(h2+숫자+패딩)이 더 커서
   grid 행이 카드보다 커지고, overflow:hidden에 잘려 숫자만 살짝 보이던 문제. 카드
   높이 안에 확실히 맞도록 패딩과 글자 크기를 줄였습니다. */
.home-dday-widgets .dday-card.compact .dday-copy {
  padding: 6px 12px;
}
.home-dday-widgets .dday-card.compact .dday-copy h2 {
  margin-bottom: 2px;
}
.home-dday-widgets .dday-card.compact .dday-copy strong {
  font-size: 19px;
}
.home-dday-widgets .dday-card.layout-personal,
.home-dday-widgets .dday-card.layout-dual {
  display: block;
  height: 78px;
}
.home-dday-widgets .dday-card.layout-personal .dday-personal-media {
  width: 42%;
  height: 78px;
}
.home-dday-widgets .dday-card.layout-personal .dday-copy,
.home-dday-widgets .dday-card.layout-personal.side-right .dday-copy {
  position: absolute;
  inset: 0 8px 0 42%;
  padding: 11px 8px;
  text-align: left;
  display: flex;
  flex-direction: column;
  justify-content: center;
}
.home-dday-widgets .dday-card.layout-personal.side-right .dday-copy {
  inset: 0 42% 0 8px;
  text-align: right;
}
.home-dday-widgets .dday-card.layout-dual .dday-dual-media {
  position: absolute;
  top: 0;
  bottom: 0;
  width: 34%;
}
.home-dday-widgets .dday-card.layout-dual .dday-dual-media.left {
  left: 0;
}
.home-dday-widgets .dday-card.layout-dual .dday-dual-media.right {
  right: 0;
}
.home-dday-widgets .dday-card.layout-dual .dday-copy {
  position: absolute;
  z-index: 4;
  inset: 0 28%;
  padding: 9px 2px;
  display: flex;
  flex-direction: column;
  justify-content: center;
  text-align: center;
}
.home-dday-widgets .dday-copy small,
.home-dday-widgets .dday-copy p,
.home-dday-widgets .dday-copy em,
.home-dday-widgets .dday-copy > b {
  display: none;
}
.home-dday-widgets .dday-copy h2 {
  font:
    700 8px/1.15 Arial,
    sans-serif;
  letter-spacing: 0.05em;
  margin: 0 0 5px;
  white-space: nowrap;
  overflow: hidden;
  text-overflow: ellipsis;
}
.home-dday-widgets .dday-copy strong,
.home-dday-widgets .dday-card.layout-pair .dday-copy strong,
.home-dday-widgets .dday-card.layout-dual .dday-copy strong {
  font-size: 24px;
  line-height: 0.9;
  white-space: nowrap;
}
.home-dday-widgets .dday-pager {
  right: 8px !important;
  left: auto !important;
  bottom: 7px !important;
  top: auto !important;
  transform: none !important;
}
.home-dday-widgets .dday-cycle-hint {
  display: none;
}
/* editor */
.dday-variant-editor {
  display: flex;
  flex-direction: column;
  gap: 7px;
  margin: 6px 0;
}
.dday-variant-row {
  display: flex;
  align-items: center;
  gap: 6px;
  border: 1px solid #ddd6d8;
  border-radius: 9px;
  padding: 7px;
  background: #fff;
}
.dday-variant-row > b {
  width: 22px;
  font:
    700 8px/1 Arial,
    sans-serif;
  color: #a0979a;
}
.dday-variant-row label {
  font-size: 7px;
  color: #91898b;
  display: flex;
  flex-direction: column;
  gap: 4px;
}
.dday-variant-row input {
  width: 100%;
  min-width: 0;
  border: 1px solid #e3dddf;
  border-radius: 6px;
  padding: 7px;
  font-size: 8px;
}
.dday-variant-pair {
  display: grid;
  grid-template-columns: 1fr 1fr;
  gap: 5px;
  flex: 1;
  min-width: 0;
}
.dday-file-pair {
  display: flex;
  gap: 4px;
}
.dday-file-pair .m-btn,
.dday-variant-row > .m-btn {
  font-size: 7px;
  padding: 7px;
  white-space: nowrap;
  cursor: pointer;
}
.dday-editor-list small {
  white-space: normal;
}
@media (max-width: 900px) {
  .dday-grid {
    grid-template-columns: 1fr;
  }
  .home-dday-widgets {
    width: min(430px, 54vw);
  }
  .dday-card.layout-dual {
    grid-template-columns: 1fr 180px 1fr;
  }
}
@media (max-width: 700px) {
  .dday-page {
    padding: 64px 10px 50px;
  }
  .dday-page-head {
    margin-bottom: 22px;
  }
  .dday-card {
    border-radius: 16px;
    min-height: 300px;
  }
  .dday-card.layout-personal {
    min-height: 320px;
    grid-template-columns: 52% 48%;
  }
  .dday-card.layout-dual {
    grid-template-columns: 1fr 148px 1fr;
    min-height: 320px;
  }
  .dday-copy strong {
    font-size: 43px;
  }
  .dday-copy h2 {
    font-size: 21px;
  }
  .home-dday-widgets {
    top: 54px;
    width: calc(100% - 24px);
    overflow-x: auto;
    justify-content: flex-start;
    scrollbar-width: none;
  }
  .home-dday-widgets::-webkit-scrollbar {
    display: none;
  }
  .home-dday-widgets .dday-card {
    flex: 0 0 230px;
  }
  .dday-variant-row {
    align-items: stretch;
    flex-wrap: wrap;
  }
  .dday-variant-pair {
    grid-template-columns: 1fr;
    width: 100%;
  }
  .dday-file-pair {
    width: 100%;
  }
}
@media (max-width: 430px) {
  .dday-card.layout-pair {
    grid-template-rows: 190px auto;
  }
  .dday-pair-media {
    min-height: 190px;
  }
  .dday-card.layout-personal {
    min-height: 280px;
  }
  .dday-personal-media {
    width: 66%;
  }
  .dday-card.layout-personal .dday-copy {
    padding: 24px 16px;
  }
  .dday-card.layout-dual {
    grid-template-columns: 1fr 128px 1fr;
    min-height: 280px;
  }
  .dday-dual-media img {
    object-position: center 15%;
  }
  .dday-card.layout-dual .dday-copy {
    padding: 20px 2px;
  }
  .dday-card.layout-dual .dday-copy h2 {
    font-size: 17px;
  }
  .dday-card.layout-dual .dday-copy strong {
    font-size: 34px;
  }
  .home-dday-widgets {
    top: 50px;
  }
}

/* lope v0.3.9 — profile top summary / STORY tab merged into timeline */
.profile-summary-card {
  position: relative;
  flex: none;
  margin: 16px 0 12px;
  padding: 15px 18px 16px 19px;
  border: 1px solid #e6ddda;
  border-left: 4px solid var(--c, #9f7d86);
  border-radius: 12px;
  background: linear-gradient(135deg, #f8f2f0 0%, #fffaf7 72%);
  overflow: hidden;
}
.profile-summary-card:after {
  content: "";
  position: absolute;
  right: -34px;
  top: -48px;
  width: 130px;
  height: 130px;
  border-radius: 50%;
  background: var(--c, #9f7d86);
  opacity: 0.055;
  pointer-events: none;
}
.profile-summary-card h3 {
  position: relative;
  z-index: 1;
  margin: 0 0 7px;
  font:
    700 15px/1.2 "Noto Sans KR",
    sans-serif;
  color: var(--c, #9f7d86);
  letter-spacing: -0.02em;
}
.profile-summary-card h3.ph {
  font-weight: 400;
  font-style: italic;
  opacity: 0.45;
}
.profile-summary-card p {
  position: relative;
  z-index: 1;
  margin: 0;
  white-space: pre-wrap;
  word-break: keep-all;
  font:
    400 10.5px/1.78 "Noto Sans KR",
    sans-serif;
  color: #514a4d;
}
.profile-summary-card [contenteditable="true"] {
  outline: 1px dashed color-mix(in srgb, var(--c, #9f7d86) 55%, transparent);
  outline-offset: 3px;
  border-radius: 3px;
}
@media (max-width: 850px) {
  .profile-summary-card {
    margin: 14px 0 10px;
    padding: 14px 15px 15px 16px;
  }
  .profile-summary-card p {
    font-size: 10px;
    line-height: 1.75;
  }
}

/* lope v0.3.10 — persistent bottom navigation */
.site-bottom-dock {
  position: fixed;
  z-index: 80;
  left: 50%;
  bottom: max(10px, calc(env(safe-area-inset-bottom) + 8px));
  transform: translateX(-50%);
  display: flex;
  align-items: center;
  justify-content: center;
  gap: 7px;
  width: max-content;
  max-width: calc(100vw - 32px);
  padding: 7px 9px;
  overflow-x: auto;
  scrollbar-width: none;
  border: 1px solid rgba(255, 255, 255, 0.12);
  border-radius: 18px;
  /* v0.3.264 — 사용자 요청으로 커스텀 가능하게. --dock-color는 render()에서 항상
     인라인으로 세팅되지만(비어있으면 이 값 그대로), 혹시라도 아직 못 세팅됐을
     때를 위해 var()의 두 번째 인자로도 같은 기본값을 한 번 더 둡니다. */
  background: var(--dock-color, rgba(15, 15, 18, 0.72));
  backdrop-filter: blur(16px) saturate(1.15);
  box-shadow: 0 12px 38px rgba(0, 0, 0, 0.24);
}
.site-bottom-dock::-webkit-scrollbar {
  display: none;
}
.site-bottom-dock .feature-dot {
  position: relative;
  flex: 0 0 42px;
  width: 42px;
  height: 42px;
  border-radius: 13px;
  background: transparent;
  border: 1px solid transparent;
  color: rgba(255, 255, 255, 0.78);
  box-shadow: none;
  backdrop-filter: none;
  cursor: pointer;
}
.site-bottom-dock .feature-dot:hover {
  transform: translateY(-2px);
  background: rgba(255, 255, 255, 0.08);
}
.site-bottom-dock .feature-dot.on {
  background: #f5f1ee;
  color: #252228;
  border-color: rgba(255, 255, 255, 0.55);
  box-shadow: 0 5px 15px rgba(0, 0, 0, 0.16);
}
.site-bottom-dock .feature-dot span {
  display: none;
}
.lope-nav-tip {
  position: fixed;
  left: 0;
  top: 0;
  z-index: 500;
  transform: translate(-50%, -100%);
  background: #17161a;
  color: #fff;
  font:
    600 10px/1 "Noto Sans KR",
    sans-serif;
  letter-spacing: 0.02em;
  padding: 6px 10px;
  border-radius: 8px;
  white-space: nowrap;
  opacity: 0;
  pointer-events: none;
  transition:
    opacity 0.15s ease,
    transform 0.15s ease;
  box-shadow: 0 8px 20px rgba(0, 0, 0, 0.24);
}
.lope-nav-tip:after {
  content: "";
  position: absolute;
  top: 100%;
  left: 50%;
  transform: translateX(-50%);
  border: 5px solid transparent;
  border-top-color: #17161a;
}
.lope-nav-tip.show {
  opacity: 1;
  transform: translate(-50%, calc(-100% - 8px));
}
/* v0.3.338 — 관리자 탭 라벨 옆 "?" 힌트 아이콘. .lope-nav-tip과 같은 어두운 말풍선
   톤으로 통일.
   v0.3.339 — CSS만으로 만든 :hover:after 말풍선은 에디터 드로어(overflow-y:auto라
   overflow-x도 같이 잘리는 스크롤 컨테이너) 안에 있으면 왼쪽으로 넘치는 부분이
   그대로 잘려서 글자가 잘려 보이는 문제("경은 MAIN의 배경색을...")가 있었습니다.
   .lope-nav-tip과 똑같이 JS로 document.body에 별도 엘리먼트를 띄우는 방식(아래
   .lope-help-tip-float)으로 바꿔서 드로어의 overflow 클리핑을 아예 벗어나게 합니다. */
.field-help-tip {
  display: inline-flex;
  align-items: center;
  justify-content: center;
  width: 14px;
  height: 14px;
  border-radius: 50%;
  background: #dcdadd;
  color: #55525a;
  font: 700 9px/1 "Noto Sans KR", sans-serif;
  margin-left: 5px;
  cursor: help;
  vertical-align: middle;
}
.field-help-tip:hover,
.field-help-tip:focus-visible {
  background: #b9b6bd;
  outline: none;
}
.lope-help-tip-float {
  position: fixed;
  left: 0;
  top: 0;
  z-index: 600;
  transform: translate(-50%, calc(-100% - 10px));
  background: #17161a;
  color: #fff;
  font: 500 10px/1.5 "Noto Sans KR", sans-serif;
  max-width: 230px;
  padding: 7px 10px;
  border-radius: 8px;
  white-space: pre-wrap;
  text-align: left;
  opacity: 0;
  pointer-events: none;
  transition:
    opacity 0.15s ease,
    transform 0.15s ease;
  box-shadow: 0 8px 20px rgba(0, 0, 0, 0.24);
}
.lope-help-tip-float:after {
  content: "";
  position: absolute;
  top: 100%;
  left: 50%;
  transform: translateX(-50%);
  border: 5px solid transparent;
  border-top-color: #17161a;
}
.lope-help-tip-float.show {
  opacity: 1;
}
.site-bottom-dock .dock-home {
  font-size: 14px;
}
/* v0.3.89 — 메인 화면 플레이리스트 위젯(폴더 무관 체크곡 미니 플레이어) */
.home-music-widget {
  position: fixed;
  z-index: 70;
  right: 16px;
  /* v0.3.126 — 사용자 요청으로 하단 독과 같은 높이로 정렬(기존엔 독 위에 따로 떠
     있었음). .site-bottom-dock의 bottom 값과 동일하게 맞춥니다. */
  bottom: max(10px, calc(env(safe-area-inset-bottom) + 8px));
  width: min(260px, 82vw);
  display: flex;
  align-items: center;
  gap: 10px;
  padding: 8px 10px;
  border-radius: 16px;
  border: 1px solid rgba(255, 255, 255, 0.12);
  background: rgba(15, 15, 18, 0.78);
  backdrop-filter: blur(16px) saturate(1.15);
  box-shadow: 0 12px 30px rgba(0, 0, 0, 0.22);
  color: #fff;
}
.home-music-widget-cover {
  flex: 0 0 38px;
  width: 38px;
  height: 38px;
  border-radius: 10px;
  overflow: hidden;
  background: color-mix(in srgb, var(--c) 30%, #222);
  display: grid;
  place-items: center;
  font-size: 15px;
  color: color-mix(in srgb, var(--c) 60%, #fff);
}
.home-music-widget-cover img {
  width: 100%;
  height: 100%;
  object-fit: cover;
}
.home-music-widget-copy {
  min-width: 0;
  flex: 1;
  display: grid;
  gap: 1px;
}
.home-music-widget-copy small {
  font-size: 8px;
  letter-spacing: 0.06em;
  color: color-mix(in srgb, var(--c) 65%, #fff);
  font-weight: 800;
}
.home-music-widget-copy b {
  font-size: 11px;
  font-weight: 700;
  white-space: nowrap;
  overflow: hidden;
  text-overflow: ellipsis;
}
.home-music-widget-copy span {
  font-size: 9px;
  color: rgba(255, 255, 255, 0.6);
  white-space: nowrap;
  overflow: hidden;
  text-overflow: ellipsis;
}
.home-music-widget-controls {
  flex: 0 0 auto;
  display: flex;
  align-items: center;
  gap: 3px;
}
.home-music-widget-controls button {
  width: 24px;
  height: 24px;
  border-radius: 50%;
  border: none;
  background: rgba(255, 255, 255, 0.1);
  color: #fff;
  font-size: 11px;
  cursor: pointer;
  display: grid;
  place-items: center;
  line-height: 1;
}
.home-music-widget-controls button.on {
  background: color-mix(in srgb, var(--c) 70%, #fff);
  color: #1a1a1a;
}
@media (max-width: 700px) {
  .home-music-widget {
    right: 8px;
    left: 8px;
    width: auto;
    bottom: max(66px, calc(env(safe-area-inset-bottom) + 64px));
  }
}
/* timeline UP button must not collide with persistent dock */
.history-top-v5 {
  bottom: max(82px, calc(env(safe-area-inset-bottom) + 80px));
}
@media (max-width: 700px) {
  .site-bottom-dock {
    left: 8px;
    right: 8px;
    transform: none;
    max-width: none;
    justify-content: flex-start;
    gap: 5px;
    padding: 6px;
    border-radius: 15px;
    bottom: max(6px, env(safe-area-inset-bottom));
  }
  .site-bottom-dock .feature-dot {
    flex-basis: 39px;
    width: 39px;
    height: 39px;
    min-width: 39px;
    border-radius: 11px;
  }
  .history-top-v5 {
    bottom: max(72px, calc(env(safe-area-inset-bottom) + 70px));
  }
}

/* v0.3.11 — timeline dual view: vertical / card-to-overlay */
.history-tools-v7 {
  position: relative;
  z-index: 5;
  display: flex;
  flex-direction: column;
  align-items: center;
  gap: 10px;
  margin-bottom: 8px;
}
.history-tools-v7 .history-filter-v6 {
  margin: -8px auto 0;
}
.history-view-switch-v7 {
  display: inline-flex;
  align-items: center;
  padding: 3px;
  border: 1px solid rgba(255, 255, 255, 0.2);
  border-radius: 999px;
  background: rgba(10, 14, 17, 0.5);
  backdrop-filter: blur(10px);
}
.history-view-switch-v7 button {
  border: 0;
  border-radius: 999px;
  background: transparent;
  color: rgba(255, 255, 255, 0.55);
  padding: 8px 14px;
  font:
    700 7px/1 Arial,
    sans-serif;
  letter-spacing: 0.14em;
  cursor: pointer;
  transition: 0.2s ease;
}
.history-view-switch-v7 button.on {
  background: #f1efea;
  color: #202427;
  box-shadow: 0 4px 18px rgba(0, 0, 0, 0.18);
}
.history-gallery-v7 {
  position: relative;
  z-index: 2;
  width: min(1050px, 100%);
  margin: 28px auto 130px;
  display: grid;
  grid-template-columns: repeat(2, minmax(0, 1fr));
  gap: 18px;
}
.history-gallery-card-v7 {
  position: relative;
  min-height: 330px;
  padding: 0;
  border: 1px solid rgba(255, 255, 255, 0.12);
  background: #ece9e3;
  color: #222;
  text-align: left;
  overflow: hidden;
  cursor: pointer;
  display: grid;
  grid-template-rows: 150px 1fr;
  transition:
    transform 0.35s cubic-bezier(0.2, 0.8, 0.2, 1),
    box-shadow 0.35s ease,
    border-color 0.35s ease;
  box-shadow: 0 18px 45px rgba(0, 0, 0, 0.18);
}
.history-gallery-card-v7:hover {
  transform: translateY(-6px);
  box-shadow: 0 28px 70px rgba(0, 0, 0, 0.3);
  border-color: rgba(255, 255, 255, 0.3);
}
.history-gallery-card-v7.locked {
  cursor: default;
  filter: saturate(0.45);
  opacity: 0.68;
}
.history-gallery-media-v7 {
  position: relative;
  overflow: hidden;
  background: linear-gradient(120deg, color-mix(in srgb, var(--ca) 72%, #222), color-mix(in srgb, var(--cb) 50%, #111));
}
.history-gallery-media-v7:after {
  content: "";
  position: absolute;
  inset: 0;
  background: linear-gradient(180deg, transparent 20%, rgba(0, 0, 0, 0.18));
  pointer-events: none;
}
.history-gallery-media-v7 img {
  width: 100%;
  height: 100%;
  object-fit: cover;
  display: block;
  transition: transform 0.65s cubic-bezier(0.2, 0.8, 0.2, 1);
}
.history-gallery-card-v7:hover .history-gallery-media-v7 img {
  transform: scale(1.035);
}
.history-gallery-number-v7 {
  position: absolute;
  right: 20px;
  bottom: -12px;
  color: rgba(255, 255, 255, 0.82);
  font:
    500 86px/1 Georgia,
    serif;
  letter-spacing: -0.08em;
}
.history-gallery-copy-v7 {
  padding: 22px 24px 20px;
  background: #f1efea;
  display: flex;
  flex-direction: column;
  min-height: 180px;
}
.history-gallery-copy-v7 header {
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: 12px;
  margin-bottom: 12px;
}
.history-gallery-copy-v7 header em {
  font:
    700 8px/1 Arial,
    sans-serif;
  letter-spacing: 0.14em;
  color: #92908c;
  font-style: normal;
}
.history-gallery-copy-v7 h2 {
  margin: 0 0 10px;
  font:
    600 28px/1.08 Georgia,
    "Noto Serif KR",
    serif;
  letter-spacing: -0.04em;
  color: #242628;
}
.history-gallery-copy-v7 p {
  margin: 0;
  display: -webkit-box;
  -webkit-line-clamp: 3;
  -webkit-box-orient: vertical;
  overflow: hidden;
  white-space: pre-wrap;
  color: #6f706e;
  font:
    400 11px/1.8 "Noto Serif KR",
    serif;
  word-break: keep-all;
}
.history-gallery-copy-v7 footer {
  display: flex;
  align-items: center;
  justify-content: space-between;
  margin-top: auto;
  padding-top: 16px;
  color: #9a9893;
  font:
    700 7px/1 Arial,
    sans-serif;
  letter-spacing: 0.16em;
}
.history-gallery-copy-v7 footer b {
  font-size: 17px;
  font-weight: 400;
}
body.history-modal-open {
  overflow: hidden;
}
.history-overlay-back-v7 {
  position: fixed;
  z-index: 2000;
  inset: 0;
  padding: clamp(18px, 4vw, 52px);
  display: grid;
  place-items: center;
  background: rgba(8, 10, 12, 0.3);
  backdrop-filter: blur(0);
  opacity: 0;
  transition:
    opacity 0.24s ease,
    backdrop-filter 0.24s ease;
}
.history-overlay-back-v7.show {
  opacity: 1;
  backdrop-filter: blur(12px);
}
.history-overlay-back-v7.closing {
  opacity: 0;
  backdrop-filter: blur(0);
}
.history-overlay-v7 {
  position: relative;
  width: min(980px, 100%);
  max-height: min(820px, calc(100vh - 36px));
  display: grid;
  grid-template-columns: minmax(250px, 38%) minmax(0, 1fr);
  background: #f3f1ed;
  color: #252729;
  overflow: hidden;
  box-shadow: 0 38px 110px rgba(0, 0, 0, 0.5);
  transform: translateY(24px) scale(0.97);
  opacity: 0;
  transition:
    transform 0.38s cubic-bezier(0.2, 0.8, 0.2, 1),
    opacity 0.3s ease;
}
.history-overlay-back-v7.show .history-overlay-v7 {
  transform: translateY(0) scale(1);
  opacity: 1;
}
.history-overlay-media-v7 {
  min-height: 520px;
  position: relative;
  overflow: hidden;
  background: linear-gradient(
    135deg,
    color-mix(in srgb, var(--ca) 78%, #25282a),
    color-mix(in srgb, var(--cb) 58%, #151719)
  );
}
.history-overlay-media-v7 img {
  width: 100%;
  height: 100%;
  object-fit: cover;
  display: block;
}
.history-overlay-media-v7 span {
  position: absolute;
  left: 22px;
  bottom: -17px;
  font:
    500 150px/1 Georgia,
    serif;
  letter-spacing: -0.09em;
  color: rgba(255, 255, 255, 0.76);
}
.history-overlay-body-v7 {
  padding: clamp(28px, 4vw, 52px);
  overflow: auto;
  display: flex;
  flex-direction: column;
  min-height: 0;
}
.history-overlay-meta-v7 {
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: 12px;
  margin-bottom: 24px;
}
.history-overlay-meta-v7 em {
  font:
    700 8px/1 Arial,
    sans-serif;
  letter-spacing: 0.17em;
  color: #9a9894;
  font-style: normal;
}
.history-overlay-body-v7 h1 {
  margin: 0 0 22px;
  font:
    600 clamp(34px, 5vw, 64px)/0.98 Georgia,
    "Noto Serif KR",
    serif;
  letter-spacing: -0.055em;
}
.history-overlay-body-v7 p {
  margin: 0;
  white-space: pre-wrap;
  word-break: keep-all;
  color: #565958;
  font:
    400 13px/2.05 "Noto Serif KR",
    serif;
}
.history-overlay-body-v7 footer {
  margin-top: 36px;
  padding-top: 15px;
  border-top: 1px solid #d8d4ce;
  color: #aaa6a0;
  font:
    700 7px/1 Arial,
    sans-serif;
  letter-spacing: 0.18em;
}
.history-overlay-close-v7 {
  position: absolute;
  z-index: 5;
  right: 13px;
  top: 13px;
  width: 38px;
  height: 38px;
  border: 1px solid rgba(0, 0, 0, 0.12);
  border-radius: 50%;
  background: rgba(244, 242, 238, 0.88);
  color: #282b2d;
  font-size: 23px;
  line-height: 1;
  cursor: pointer;
  backdrop-filter: blur(8px);
}

@media (max-width: 800px) {
  .history-gallery-v7 {
    grid-template-columns: 1fr;
    gap: 13px;
    margin-top: 18px;
  }
  .history-gallery-card-v7 {
    min-height: 280px;
    grid-template-rows: 125px 1fr;
  }
  .history-overlay-v7 {
    grid-template-columns: 1fr;
    grid-template-rows: minmax(180px, 34vh) minmax(0, 1fr);
    max-height: calc(100vh - 28px);
  }
  .history-overlay-media-v7 {
    min-height: 0;
  }
  .history-overlay-media-v7 span {
    font-size: 94px;
    bottom: -10px;
  }
  .history-overlay-body-v7 {
    padding: 25px 22px 30px;
  }
  .history-overlay-body-v7 h1 {
    font-size: 38px;
  }
  .history-overlay-body-v7 p {
    font-size: 11px;
    line-height: 1.9;
  }
  .history-tools-v7 {
    align-items: stretch;
  }
  .history-view-switch-v7 {
    align-self: center;
  }
}
@media (max-width: 520px) {
  .history-overlay-back-v7 {
    padding: 8px;
  }
  .history-overlay-v7 {
    max-height: calc(100vh - 16px);
  }
  .history-gallery-copy-v7 {
    padding: 18px 18px 16px;
  }
  .history-gallery-copy-v7 h2 {
    font-size: 25px;
  }
  .history-view-switch-v7 button {
    padding: 8px 11px;
    font-size: 6px;
  }
}

/* lope v0.3.13 — D-DAY cards stay landscape; only the list stacks vertically. */
.dday-page-wrap {
  width: min(820px, calc(100% - 28px));
}
.dday-grid {
  display: flex !important;
  flex-direction: column;
  gap: 20px;
  align-items: center;
}
.dday-grid > .dday-card {
  width: min(680px, 100%);
  max-width: 680px;
  margin: 0 auto;
  min-height: 320px;
}
.dday-grid > .dday-card.layout-pair {
  grid-template-rows: minmax(190px, 1fr) auto;
}
.dday-grid > .dday-card.layout-pair .dday-pair-media {
  min-height: 190px;
}
.dday-grid > .dday-card.layout-personal,
.dday-grid > .dday-card.layout-dual {
  min-height: 320px;
}

/* GALLERY */
.gallery-page {
  min-height: 100vh;
  color: #1c1b1f;
  padding: 86px 24px 110px;
}
.gallery-shell {
  width: min(1420px, 100%);
  margin: 0 auto;
}
.gallery-head {
  display: grid;
  grid-template-columns: minmax(0, 1fr) minmax(240px, 0.55fr);
  align-items: end;
  gap: 30px;
  border-bottom: 1px solid rgba(25, 22, 25, 0.13);
  padding-bottom: 20px;
  margin-bottom: 18px;
}
.gallery-head small {
  grid-column: 1/-1;
  font:
    700 7px/1 Arial,
    sans-serif;
  letter-spacing: 0.28em;
  color: #9c9295;
}
.gallery-head h1 {
  font:
    600 clamp(54px, 7vw, 96px)/0.82 Georgia,
    serif;
  letter-spacing: -0.06em;
  margin: 0;
}
.gallery-head p {
  margin: 0 0 5px;
  font:
    400 11px/1.75 "Noto Sans KR",
    sans-serif;
  color: #777073;
}
.gallery-type-tabs {
  display: flex;
  gap: 7px;
  flex-wrap: wrap;
  margin: 0 0 14px;
}
.gallery-type-tabs button,
.gallery-album-tabs button {
  border: 1px solid #d4cdca;
  background: rgba(255, 255, 255, 0.66);
  color: #81797c;
  padding: 9px 14px;
  border-radius: 999px;
  font:
    700 7px/1 Arial,
    sans-serif;
  letter-spacing: 0.13em;
  cursor: pointer;
}
.gallery-type-tabs button.on {
  background: #1d1c21;
  border-color: #1d1c21;
  color: #fff;
}
.gallery-album-tabs {
  display: flex;
  gap: 6px;
  flex-wrap: wrap;
  margin: 0 0 24px;
}
.gallery-album-tabs button.on {
  border-color: #6e6669;
  color: #222;
  background: #fff;
}
.gallery-layout {
  min-height: 350px;
}
.gallery-layout.mode-grid {
  display: grid;
  grid-template-columns: repeat(3, minmax(0, 1fr));
  gap: 13px;
}
.gallery-layout.mode-masonry {
  columns: 4 260px;
  column-gap: 12px;
}
.gallery-layout.mode-masonry .gallery-item {
  display: inline-block;
  width: 100%;
  margin: 0 0 12px;
  break-inside: avoid;
}
.gallery-layout.mode-strip {
  display: flex;
  overflow-x: auto;
  gap: 14px;
  padding: 3px 2px 22px;
  scroll-snap-type: x mandatory;
  scrollbar-width: thin;
}
.gallery-layout.mode-strip .gallery-item {
  /* v0.3.348 — 카드가 최대 520px라 화면 한 번에 3장도 겨우 보여서 너무 크다는
     요청 — 한 화면에 4장 정도 보이는 크기로 줄임. 세로 비율(aspect-ratio)은
     .gallery-thumb-frame이 가로 폭 기준으로 그대로 따라가므로 가로만 줄여도
     카드 전체 비율이 그대로 유지됩니다. */
  flex: 0 0 min(24vw, 260px);
  scroll-snap-align: start;
}
.gallery-item {
  border: 0;
  background: #fff;
  text-align: left;
  padding: 0;
  overflow: hidden;
  position: relative;
  cursor: pointer;
  box-shadow: 0 12px 35px rgba(55, 45, 49, 0.08);
  transition:
    transform 0.18s ease,
    box-shadow 0.18s ease;
}
.gallery-item:hover {
  transform: translateY(-3px);
  box-shadow: 0 18px 42px rgba(55, 45, 49, 0.13);
}
/* v0.3.323 — 썸네일 확대(transform:scale)가 프레임 밖으로 안 나가게 클리핑
   컨테이너를 따로 둡니다. 크기(aspect-ratio)는 이 프레임이 갖고, <img>는 그 안을
   100%로 채우기만 합니다(확대·크롭은 여전히 img 쪽 transform/object-position). */
.gallery-thumb-frame {
  position: relative;
  display: block;
  overflow: hidden;
  width: 100%;
}
.gallery-item img {
  width: 100%;
  height: 100%;
  display: block;
  object-fit: cover;
}
.illust-card .gallery-thumb-frame {
  aspect-ratio: 4/5;
}
.illust-card img {
  object-position: center 25%;
}
.mode-masonry .illust-card:nth-child(3n + 1) .gallery-thumb-frame {
  aspect-ratio: 4/5;
}
.mode-masonry .illust-card:nth-child(3n + 2) .gallery-thumb-frame {
  aspect-ratio: 1/1;
}
.mode-masonry .illust-card:nth-child(3n) .gallery-thumb-frame {
  aspect-ratio: 3/4;
}
.gallery-item > div:not(.gallery-thumb-frame) {
  padding: 14px 15px 16px;
}
.gallery-item h2 {
  font:
    600 21px/1.05 Georgia,
    "Noto Serif KR",
    serif;
  margin: 0 0 6px;
}
.gallery-item small {
  font:
    700 6px/1 Arial,
    sans-serif;
  letter-spacing: 0.16em;
  color: #9a9295;
}
.gallery-item span {
  font-size: 8px;
  color: #888;
}
.comic-card .gallery-thumb-frame {
  aspect-ratio: 16/10;
}
.writing-card {
  display: grid;
  grid-template-columns: 130px 1fr;
  min-height: 190px;
}
.writing-card .gallery-thumb-frame {
  height: 100%;
  min-height: 190px;
}
.writing-card img {
  object-fit: cover;
}
.writing-card p {
  font:
    400 9px/1.8 "Noto Sans KR",
    sans-serif;
  color: #777;
  display: -webkit-box;
  -webkit-line-clamp: 4;
  -webkit-box-orient: vertical;
  overflow: hidden;
}
.gallery-empty {
  min-height: 280px;
  display: grid;
  place-items: center;
  color: #999;
  font-size: 11px;
  border: 1px dashed #d4cfcc;
  background: rgba(255, 255, 255, 0.45);
}
.gallery-lightbox {
  position: fixed;
  z-index: 3500;
  inset: 0;
  background: rgba(13, 12, 15, 0.84);
  backdrop-filter: blur(12px);
  display: grid;
  place-items: center;
  padding: 55px 22px 26px;
  overflow: auto;
}
.gallery-lightbox-close {
  position: fixed;
  z-index: 2;
  right: 24px;
  top: 19px;
  width: 38px;
  height: 38px;
  border: 1px solid rgba(255, 255, 255, 0.24);
  border-radius: 50%;
  background: rgba(20, 19, 22, 0.55);
  color: #fff;
  font-size: 25px;
  cursor: pointer;
}
.gallery-lightbox-inner {
  width: min(1000px, 100%);
  margin: auto;
}
.gallery-reader {
  background: #f7f5f2;
  color: #201e21;
  box-shadow: 0 24px 80px rgba(0, 0, 0, 0.34);
}
.illust-reader {
  background: transparent;
  color: #fff;
  box-shadow: none;
  display: flex;
  flex-direction: column;
  align-items: center;
}
.illust-reader > img {
  max-width: 100%;
  max-height: 76vh;
  object-fit: contain;
  box-shadow: 0 25px 70px rgba(0, 0, 0, 0.4);
}
.illust-reader > div {
  width: min(760px, 100%);
  padding: 18px 0;
  text-align: center;
}
.illust-reader h1 {
  margin: 5px 0;
  font:
    600 32px/1 Georgia,
    serif;
}
.illust-reader p {
  font-size: 10px;
  color: #bbb;
}
.comic-reader {
  padding: 24px;
}
.comic-reader header {
  padding: 8px 8px 23px;
}
.comic-reader h1,
.writing-reader h1 {
  font:
    600 42px/1 Georgia,
    "Noto Serif KR",
    serif;
  margin: 6px 0;
}
.comic-reader img {
  display: block;
  width: min(820px, 100%);
  margin: 0 auto 12px;
}
.writing-reader {
  width: min(760px, 100%);
  padding: 38px 44px;
}
.reader-cover {
  width: 100%;
  max-height: 360px;
  object-fit: cover;
  margin-bottom: 30px;
}
.reader-text {
  margin-top: 26px;
  border-top: 1px solid #ddd6d2;
  padding-top: 26px;
  font:
    400 13px/2.05 "Noto Serif KR",
    serif;
  color: #4f494c;
}
.gallery-editor-group {
  border: 1px solid #303035;
  border-radius: 10px;
  padding: 10px;
  margin: 8px 0;
}
.gallery-editor-group > b {
  display: block;
  font-size: 10px;
  margin-bottom: 7px;
}

/* TALK / conversation archive */
.dialogue-page {
  min-height: 100vh;
  background: linear-gradient(135deg, #f5f3f0 0%, #eeece9 100%);
  padding: 72px 28px 92px;
  position: relative;
  overflow: hidden;
  color: #1d1c20;
}
.dialogue-page:before {
  content: "";
  position: absolute;
  inset: 0;
  background-image:
    linear-gradient(rgba(0, 0, 0, 0.025) 1px, transparent 1px),
    linear-gradient(90deg, rgba(0, 0, 0, 0.025) 1px, transparent 1px);
  background-size: 26px 26px;
  pointer-events: none;
}
.dialogue-empty {
  width: min(700px, 100%);
  margin: 25vh auto;
  text-align: center;
}
.dialogue-empty h1 {
  font:
    600 70px/1 Georgia,
    serif;
  margin: 0 0 12px;
}
.dialogue-empty p {
  color: #888;
}
.scene-picker-toggle {
  position: fixed;
  z-index: 130;
  top: 66px;
  left: 24px;
  min-width: 230px;
  max-width: 340px;
  height: 47px;
  border: 1px solid rgba(30, 28, 31, 0.13);
  border-radius: 12px;
  background: rgba(255, 255, 255, 0.86);
  backdrop-filter: blur(15px);
  box-shadow: 0 10px 34px rgba(40, 35, 38, 0.1);
  display: grid;
  grid-template-columns: auto 1fr auto;
  align-items: center;
  gap: 9px;
  padding: 0 13px;
  text-align: left;
  cursor: pointer;
}
.scene-picker-toggle small {
  font:
    700 6px/1 Arial,
    sans-serif;
  letter-spacing: 0.18em;
  color: #999;
}
.scene-picker-toggle b {
  font:
    700 10px/1.2 "Noto Sans KR",
    sans-serif;
  overflow: hidden;
  text-overflow: ellipsis;
  white-space: nowrap;
}
.scene-picker-toggle span {
  font-size: 14px;
}
.scene-picker {
  position: fixed;
  z-index: 125;
  top: 120px;
  left: 24px;
  width: 300px;
  max-height: calc(100vh - 205px);
  overflow: auto;
  background: rgba(27, 26, 30, 0.95);
  color: #fff;
  border: 1px solid rgba(255, 255, 255, 0.1);
  border-radius: 13px;
  box-shadow: 0 24px 60px rgba(0, 0, 0, 0.28);
  padding: 15px;
  transform: translateX(calc(-100% - 45px));
  opacity: 0;
  pointer-events: none;
  transition: 0.22s ease;
}
.scene-picker.open {
  transform: none;
  opacity: 1;
  pointer-events: auto;
}
.scene-picker header {
  padding: 3px 5px 12px;
  border-bottom: 1px solid #3d3b40;
}
.scene-picker header small {
  font-size: 6px;
  letter-spacing: 0.19em;
  color: #8f8c93;
}
.scene-picker header h2 {
  font:
    600 20px/1 Georgia,
    serif;
  margin: 4px 0;
}
.scene-folder {
  border-bottom: 1px solid #3c3a3f;
}
.scene-folder-head {
  width: 100%;
  height: 42px;
  border: 0;
  background: transparent;
  color: #ddd;
  display: flex;
  align-items: center;
  justify-content: space-between;
  font-size: 9px;
  cursor: pointer;
}
.scene-folder-head b {
  color: #777;
  font-size: 8px;
}
.scene-folder-scenes {
  display: none;
  padding: 0 0 8px;
}
.scene-folder.open .scene-folder-scenes {
  display: block;
}
.scene-folder-scenes button {
  display: flex;
  width: 100%;
  flex-direction: column;
  gap: 3px;
  border: 0;
  border-radius: 7px;
  background: transparent;
  color: #96939a;
  padding: 8px 10px;
  text-align: left;
  cursor: pointer;
}
.scene-folder-scenes button.on {
  background: #fff;
  color: #222;
}
.scene-folder-scenes button span {
  font-weight: 700;
  font-size: 9px;
}
.scene-folder-scenes button small {
  font-size: 6px;
  color: inherit;
  opacity: 0.7;
}
.talk-window {
  position: relative;
  z-index: 3;
  width: min(760px, 55vw);
  height: calc(100vh - 155px);
  min-height: 560px;
  margin: 0 auto;
  border: 1px solid rgba(31, 28, 32, 0.12);
  border-radius: 20px;
  background: rgba(250, 249, 247, 0.91);
  backdrop-filter: blur(11px);
  box-shadow: 0 25px 72px rgba(45, 38, 41, 0.12);
  display: grid;
  grid-template-rows: auto minmax(0, 1fr) 58px;
  overflow: hidden;
}
.talk-window-head {
  min-height: 92px;
  border-bottom: 1px solid #dfdad7;
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: 20px;
  padding: 18px 24px;
}
.talk-window-head small {
  font:
    700 6px/1 Arial,
    sans-serif;
  letter-spacing: 0.18em;
  color: #aaa;
}
.talk-window-head h1 {
  font:
    600 25px/1.05 Georgia,
    "Noto Serif KR",
    serif;
  margin: 4px 0 0;
}
.talk-participants {
  display: flex;
  gap: 12px;
}
.talk-participants span {
  display: flex;
  flex-direction: column;
  align-items: center;
  gap: 4px;
  max-width: 60px;
}
.talk-participants img {
  width: 36px;
  height: 36px;
  border-radius: 50%;
  object-fit: cover;
}
.talk-participants b {
  font-size: 6px;
  font-weight: 500;
  text-align: center;
  white-space: nowrap;
  overflow: hidden;
  text-overflow: ellipsis;
  max-width: 60px;
}
.talk-scroll {
  overflow: auto;
  padding: 24px 25px 44px;
  scrollbar-width: thin;
  display: flex;
  flex-direction: column;
  gap: 22px;
}
.talk-message {
  width: min(74%, 500px);
  display: flex;
  flex-direction: column;
  align-items: flex-start;
}
.talk-message.right {
  align-self: flex-end;
  align-items: flex-end;
}
.talk-meta {
  display: flex;
  align-items: center;
  gap: 6px;
  margin: 0 4px 6px;
  color: #6c6669;
  font-size: 8px;
}
.talk-meta i {
  width: 24px;
  height: 24px;
  border-radius: 50%;
  overflow: hidden;
  background: #ddd;
}
.talk-meta i img {
  width: 100%;
  height: 100%;
  object-fit: cover;
}
.talk-meta span {
  font-weight: 700;
}
.talk-meta small {
  font-size: 6px;
  color: #aaa;
}
.talk-bubble {
  padding: 13px 15px;
  border-radius: 5px 17px 17px 17px;
  background: color-mix(in srgb, var(--talk) 20%, #fff);
  border: 1px solid color-mix(in srgb, var(--talk) 22%, #ddd);
  font:
    400 10px/1.7 "Noto Sans KR",
    sans-serif;
  box-shadow: 0 5px 17px rgba(35, 30, 33, 0.05);
}
.talk-message.right .talk-bubble {
  border-radius: 17px 5px 17px 17px;
  background: color-mix(in srgb, var(--talk) 82%, #fff);
  color: #fff;
  border-color: transparent;
}
/* v0.3.88 — 나레이션: 좌우 없이 중앙에 표시되는 대사 (프로필/이름 없음) */
.talk-message.narration {
  width: 100%;
  max-width: 560px;
  align-self: center;
  align-items: center;
  text-align: center;
}
.talk-message.narration .talk-bubble {
  background: rgba(80, 74, 74, 0.06);
  border: 1px dashed rgba(80, 74, 74, 0.18);
  color: #6c6669;
  border-radius: 13px;
  font-style: italic;
}
.talk-narration-time {
  margin-top: 4px;
  font-size: 6px;
  color: #aaa;
}
.talk-no-message {
  margin: auto;
  color: #aaa;
  font-size: 10px;
}
.talk-input-mock {
  margin: 0 16px 14px;
  border-radius: 999px;
  background: #e5e2df;
  height: 44px;
  display: grid;
  grid-template-columns: 1fr auto auto;
  align-items: center;
  padding: 0 11px 0 18px;
  color: #aaa;
  font-size: 7px;
  letter-spacing: 0.12em;
}
.talk-input-mock i {
  font-style: normal;
  margin-right: 10px;
}
.talk-input-mock b {
  width: 31px;
  height: 31px;
  border-radius: 50%;
  background: #222;
  color: #fff;
  display: grid;
  place-items: center;
  font-size: 11px;
}
.talk-standing {
  position: absolute;
  z-index: 2;
  bottom: 60px;
  width: min(31vw, 470px);
  height: calc(100vh - 155px);
  display: flex;
  align-items: flex-end;
  pointer-events: none;
}
.talk-standing.left {
  left: 1vw;
  justify-content: flex-start;
}
.talk-standing.right {
  right: 1vw;
  justify-content: flex-end;
}
.talk-standing img {
  max-height: 100%;
  max-width: 100%;
  object-fit: contain;
  object-position: center bottom;
  filter: drop-shadow(0 22px 32px rgba(45, 37, 40, 0.14));
}
.talk-standing.left img {
  transform: translateX(-7%);
}
.talk-standing.right img {
  transform: translateX(7%);
}
.dialogue-editor-folder {
  border: 1px solid #303035;
  border-radius: 10px;
  padding: 7px;
  margin: 8px 0;
}
.talk-message-edit {
  display: grid;
  grid-template-columns: 110px 1fr 75px auto;
  gap: 5px;
  align-items: start;
  border: 1px solid #333138;
  padding: 7px;
  border-radius: 8px;
  margin-bottom: 6px;
}
.talk-message-edit textarea {
  min-height: 58px;
}
.talk-message-edit > div {
  display: flex;
  gap: 3px;
}
.talk-message-edit button {
  border: 1px solid #444;
  background: #222;
  color: #aaa;
  border-radius: 5px;
  width: 25px;
  height: 25px;
}

@media (max-width: 1100px) {
  .gallery-layout.mode-grid {
    grid-template-columns: repeat(2, minmax(0, 1fr));
  }
  .talk-window {
    width: min(680px, 64vw);
  }
  .talk-standing {
    width: 30vw;
    opacity: 0.7;
  }
  .scene-picker-toggle {
    left: 14px;
  }
  .scene-picker {
    left: 14px;
  }
}
@media (max-width: 820px) {
  .gallery-page {
    padding: 70px 12px 90px;
  }
  .gallery-head {
    grid-template-columns: 1fr;
  }
  .gallery-head p {
    max-width: 560px;
  }
  .gallery-layout.mode-grid {
    grid-template-columns: repeat(2, minmax(0, 1fr));
  }
  .gallery-layout.mode-masonry {
    columns: 2 220px;
  }
  .writing-card {
    grid-template-columns: 95px 1fr;
  }
  .dialogue-page {
    padding: 64px 10px 82px;
  }
  .talk-standing {
    display: none;
  }
  .talk-window {
    width: min(680px, 100%);
    height: calc(100dvh - 145px);
    min-height: 520px;
  }
  .scene-picker-toggle {
    top: 58px;
    left: 12px;
    min-width: 190px;
  }
  .scene-picker {
    top: 111px;
    left: 12px;
    width: min(300px, calc(100% - 24px));
    max-height: calc(100dvh - 190px);
  }
  .talk-message-edit {
    grid-template-columns: 1fr;
  }
  .talk-message-edit > div {
    justify-content: flex-end;
  }
}
@media (max-width: 540px) {
  .gallery-layout.mode-grid {
    grid-template-columns: 1fr;
  }
  .gallery-layout.mode-masonry {
    columns: 1;
  }
  .gallery-layout.mode-strip .gallery-item {
    flex-basis: 85vw;
  }
  .gallery-head h1 {
    font-size: 54px;
  }
  .writing-card {
    grid-template-columns: 90px 1fr;
  }
  .gallery-lightbox {
    padding: 52px 10px 18px;
  }
  .writing-reader {
    padding: 26px 20px;
  }
  .comic-reader {
    padding: 10px;
  }
  .talk-window-head {
    padding: 14px 15px;
    min-height: 76px;
  }
  .talk-window-head h1 {
    font-size: 20px;
  }
  .talk-participants b {
    display: none;
  }
  .talk-participants img {
    width: 31px;
    height: 31px;
  }
  .talk-scroll {
    padding: 18px 13px 34px;
  }
  .talk-message {
    width: 88%;
  }
  .scene-picker-toggle {
    max-width: calc(100% - 24px);
  }
  .dday-grid > .dday-card {
    max-width: 100%;
  }
}

/* v0.3.14 TALK layout + folder hierarchy */
.scene-picker-toggle b {
  display: flex;
  align-items: center;
  gap: 6px;
  min-width: 0;
}
.scene-picker-toggle b em {
  font-style: normal;
  color: #8e888d;
  font-size: 8px;
  font-weight: 700;
  white-space: nowrap;
}
.scene-picker-toggle b span {
  font-size: 8px;
  color: #c2bdc0;
}
.scene-picker header p {
  margin: 4px 0 0;
  color: #77747a;
  font-size: 7px;
  line-height: 1.5;
}
.scene-folder {
  padding: 8px 0;
  border-bottom: 1px solid #3c3a3f;
}
.scene-folder-head {
  height: auto;
  min-height: 50px;
  padding: 7px 8px;
  border-radius: 9px;
}
.scene-folder.open .scene-folder-head {
  background: #242329;
}
.scene-folder-title {
  display: flex;
  align-items: center;
  gap: 10px;
  min-width: 0;
}
.scene-folder-title > span {
  display: flex;
  flex-direction: column;
  align-items: flex-start;
  gap: 2px;
  min-width: 0;
}
.scene-folder-title small {
  font-size: 6px;
  letter-spacing: 0.14em;
  color: #77737a;
}
.scene-folder-title strong {
  font-size: 10px;
  color: #f1eef2;
  overflow: hidden;
  text-overflow: ellipsis;
  white-space: nowrap;
  max-width: 165px;
}
.scene-folder-head > b {
  display: flex;
  align-items: center;
  gap: 4px;
  color: #827e86;
  font-size: 8px;
  font-weight: 700;
}
.scene-folder-head > b small {
  font-size: 5px;
  color: #66636a;
}
.scene-folder-head > b em {
  font-style: normal;
  font-size: 10px;
  margin-left: 3px;
  color: #aaa5ad;
}
.folder-glyph,
.editor-folder-glyph {
  position: relative;
  display: inline-block;
  flex: 0 0 auto;
  width: 22px;
  height: 16px;
  border-radius: 3px;
  background: #d9d4dc;
}
.folder-glyph:before,
.editor-folder-glyph:before {
  content: "";
  position: absolute;
  left: 2px;
  top: -5px;
  width: 10px;
  height: 6px;
  border-radius: 3px 3px 0 0;
  background: inherit;
}
.folder-glyph {
  background: #bbb5bf;
}
.scene-folder-scenes {
  padding: 5px 0 3px 20px;
  margin-left: 18px;
  border-left: 1px solid #444149;
}
.scene-folder-scenes button {
  position: relative;
  display: grid;
  grid-template-columns: 16px minmax(0, 1fr);
  gap: 8px;
  align-items: center;
  padding: 9px 10px;
  margin: 3px 0;
}
.scene-folder-scenes button:before {
  content: "";
  position: absolute;
  left: -21px;
  top: 50%;
  width: 14px;
  border-top: 1px solid #444149;
}
.scene-folder-scenes button.on {
  background: #f4f1f4;
  color: #201e22;
}
.scene-glyph,
.editor-scene-glyph {
  display: inline-block;
  width: 11px;
  height: 13px;
  border: 1px solid currentColor;
  border-radius: 2px;
  position: relative;
  opacity: 0.65;
}
.scene-glyph:after,
.editor-scene-glyph:after {
  content: "";
  position: absolute;
  left: 2px;
  right: 2px;
  top: 4px;
  border-top: 1px solid currentColor;
  box-shadow: 0 3px 0 currentColor;
}
.scene-entry-copy {
  display: flex !important;
  flex-direction: column;
  gap: 2px !important;
  min-width: 0;
}
.scene-entry-copy small {
  font-size: 5px !important;
  letter-spacing: 0.12em;
  opacity: 0.55;
}
.scene-entry-copy strong {
  font-size: 9px;
  overflow: hidden;
  text-overflow: ellipsis;
  white-space: nowrap;
}
.scene-entry-copy em {
  font-style: normal;
  font-size: 6px;
  opacity: 0.55;
  overflow: hidden;
  text-overflow: ellipsis;
  white-space: nowrap;
}

.talk-standing {
  width: min(27vw, 410px);
  height: calc(100vh - 155px);
  bottom: 60px;
}
.talk-standing.left {
  left: clamp(18px, calc(50% - 650px), 18vw);
  right: auto;
  justify-content: flex-end;
}
.talk-standing.right {
  right: clamp(18px, calc(50% - 650px), 18vw);
  left: auto;
  justify-content: flex-start;
}
.talk-standing.left img,
.talk-standing.right img {
  transform: translate(var(--stand-x, 0px), var(--stand-y, 0px)) scale(var(--stand-scale, 1));
  transform-origin: center bottom;
  max-height: 100%;
  max-width: 100%;
}

.dialogue-editor-folder {
  position: relative;
  border: 0;
  border-radius: 0;
  padding: 7px 0 10px 10px;
  margin: 14px 0 20px;
}
.dialogue-editor-folder-head {
  position: relative;
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: 8px;
  min-height: 58px;
  padding: 10px 9px 9px 11px;
  border: 1px solid #3b3940;
  border-radius: 9px;
  background: #28272d;
}
.dialogue-editor-folder-head:before {
  content: "";
  position: absolute;
  left: 11px;
  top: -7px;
  width: 58px;
  height: 7px;
  border: 1px solid #3b3940;
  border-bottom: 0;
  border-radius: 6px 6px 0 0;
  background: #28272d;
}
.dialogue-folder-main {
  display: flex;
  align-items: center;
  gap: 10px;
  min-width: 0;
}
.editor-folder-glyph {
  background: #8d8995;
  width: 25px;
  height: 18px;
}
.dialogue-folder-main > div {
  display: flex;
  flex-direction: column;
  min-width: 0;
}
.dialogue-folder-main small {
  font-size: 6px;
  letter-spacing: 0.15em;
  color: #8a8690;
}
.dialogue-folder-main b {
  font-size: 11px;
  color: #f0edf2;
  overflow: hidden;
  text-overflow: ellipsis;
  white-space: nowrap;
}
.dialogue-folder-main em {
  font-style: normal;
  font-size: 7px;
  color: #77737e;
  margin-top: 2px;
}
.dialogue-folder-actions {
  display: flex;
  gap: 4px;
}
.dialogue-editor-scenes {
  margin: 0 0 0 20px;
  padding: 9px 0 0 15px;
  border-left: 1px solid #3b3940;
  display: grid;
  gap: 6px;
}
.dialogue-editor-scene {
  position: relative;
  display: grid;
  grid-template-columns: 18px minmax(0, 1fr) 28px 28px;
  gap: 7px;
  align-items: center;
  min-height: 54px;
  padding: 8px 7px;
  border: 1px solid #302e34;
  border-radius: 8px;
  background: #1b1a1f;
}
.dialogue-editor-scene:before {
  content: "";
  position: absolute;
  left: -16px;
  top: 50%;
  width: 15px;
  border-top: 1px solid #3b3940;
}
.dialogue-editor-scene .grow {
  display: flex;
  flex-direction: column;
  gap: 1px;
  min-width: 0;
}
.dialogue-editor-scene .grow small {
  font-size: 5px;
  letter-spacing: 0.13em;
  color: #706c76;
}
.dialogue-editor-scene .grow b {
  font-size: 9px;
  color: #ded9e1;
  overflow: hidden;
  text-overflow: ellipsis;
  white-space: nowrap;
}
.dialogue-editor-scene .grow em {
  font-style: normal;
  font-size: 7px;
  color: #6f6b74;
}
.editor-scene-glyph {
  color: #898590;
}
.dialogue-add-scene {
  margin-top: 2px;
  border-style: dashed !important;
}
.dialogue-folder-empty {
  font-size: 8px;
  color: #66616a;
  padding: 9px 5px;
}
.dialogue-editor-folder + .dialogue-editor-folder {
  margin-top: 25px;
}

@media (max-width: 1250px) {
  .talk-standing {
    width: min(26vw, 340px);
  }
  .talk-standing.left {
    left: 24px;
  }
  .talk-standing.right {
    right: 24px;
  }
}
@media (max-width: 1100px) {
  .talk-standing {
    width: 28vw;
    opacity: 0.78;
  }
  .talk-standing.left {
    left: 10px;
  }
  .talk-standing.right {
    right: 10px;
  }
}
@media (max-width: 820px) {
  .talk-standing {
    display: none;
  }
  .scene-picker-toggle b em,
  .scene-picker-toggle b span {
    display: none;
  }
  .dialogue-editor-scenes {
    margin-left: 12px;
    padding-left: 10px;
  }
}

/* v0.3.15 editor placement ownership */
.main-art-preview {
  height: 96px;
  border: 1px solid #38363c;
  border-radius: 10px;
  background: #17161a;
  display: flex;
  align-items: flex-end;
  justify-content: center;
  overflow: hidden;
  margin: 7px 0 8px;
  color: #68646d;
  font-size: 8px;
}
.main-art-preview img {
  max-width: 100%;
  max-height: 100%;
  object-fit: contain;
  object-position: center bottom;
}
.profile-look-edit-list {
  display: grid;
  gap: 10px;
}
.profile-look-editor {
  border: 1px solid #353239;
  border-radius: 10px;
  background: #1a191d;
  padding: 9px;
}
.profile-look-editor.active {
  border-color: #6c6672;
  background: #1e1c22;
}
.profile-look-editor > header {
  display: grid;
  grid-template-columns: 44px minmax(0, 1fr) 30px 30px;
  gap: 6px;
  align-items: center;
  margin-bottom: 7px;
}
.profile-look-thumb {
  width: 44px;
  height: 56px;
  border-radius: 7px;
  background: #111;
  overflow: hidden;
  display: flex;
  align-items: center;
  justify-content: center;
  color: #777;
  font-size: 7px;
}
.profile-look-thumb img {
  width: 100%;
  height: 100%;
  object-fit: contain;
  object-position: center bottom;
}
.profile-look-editor header .grow {
  display: flex;
  flex-direction: column;
  gap: 3px;
  min-width: 0;
}
.profile-look-editor header small {
  font-size: 6px;
  letter-spacing: 0.12em;
  color: #77727d;
}
.profile-look-editor .outfit-name-input {
  width: 100%;
  min-width: 0;
  background: #242228;
  border: 1px solid #353139;
  color: #eee;
  border-radius: 6px;
  padding: 6px 7px;
  font-size: 8px;
}
.profile-look-editor .range-field {
  margin-top: 8px;
}

/* =========================================================
   lope v0.3.16 — Gallery-to-Overlay timeline
   Admin chooses this OR the existing vertical timeline.
   List view: image stack + large story title list.
   Open: selected title/image expands into a full-page story overlay.
   ========================================================= */
.history-osmo-page-v8 .history-shell-v5 {
  width: min(1380px, 100%);
  min-height: 100dvh;
}
.history-osmo-main-v8 {
  position: relative;
  z-index: 2;
  display: grid;
  grid-template-columns: minmax(280px, 0.72fr) minmax(0, 1.28fr);
  gap: clamp(48px, 7vw, 110px);
  align-items: start;
  width: min(1180px, 100%);
  min-height: calc(100dvh - 165px);
  margin: 0 auto;
  padding: 30px 20px 92px;
}
.history-osmo-preview-v8 {
  position: sticky;
  bottom: 76px;
  align-self: end;
  height: min(62vh, 680px);
  min-height: 360px;
  display: flex;
  align-items: flex-end;
  justify-content: center;
}
.history-osmo-preview-stack-v8 {
  position: relative;
  width: min(360px, 86%);
  height: min(520px, 58vh);
}
.history-osmo-preview-item-v8 {
  position: absolute;
  inset: 0;
  margin: 0;
  opacity: 0;
  transform: translateY(20px) scale(0.96);
  transition:
    opacity 0.38s ease,
    transform 0.55s cubic-bezier(0.2, 0.8, 0.2, 1);
  pointer-events: none;
  filter: drop-shadow(0 30px 45px rgba(0, 0, 0, 0.28));
}
.history-osmo-preview-item-v8.on {
  opacity: 1;
  transform: translateY(0) scale(1);
  z-index: 2;
}
.history-osmo-preview-item-v8 img,
.history-osmo-placeholder-v8 {
  width: 100%;
  height: 100%;
  display: block;
  border-radius: 5px;
  background: #e7e4df;
}
.history-osmo-preview-item-v8 img {
  object-fit: contain;
}
.history-osmo-preview-item-v8 figcaption {
  position: absolute;
  left: 13px;
  bottom: 12px;
  max-width: calc(100% - 26px);
  padding: 6px 9px;
  border-radius: 999px;
  background: rgba(18, 21, 24, 0.76);
  backdrop-filter: blur(8px);
  color: #fff;
  font:
    700 7px/1 Arial,
    sans-serif;
  letter-spacing: 0.1em;
  white-space: nowrap;
  overflow: hidden;
  text-overflow: ellipsis;
}
.history-osmo-placeholder-v8 {
  display: flex;
  flex-direction: column;
  justify-content: space-between;
  padding: 26px;
  background: linear-gradient(145deg, #eeeae4, #bdb9b4);
  color: #292a2b;
}
.history-osmo-placeholder-v8 small {
  font:
    700 8px/1 Arial,
    sans-serif;
  letter-spacing: 0.2em;
}
.history-osmo-placeholder-v8 b {
  align-self: flex-end;
  font:
    500 130px/0.8 Georgia,
    serif;
  color: rgba(34, 35, 36, 0.18);
}
.history-osmo-title-list-v8 {
  align-self: end;
  list-style: none;
  margin: 0;
  padding: 0 0 10px;
  display: flex;
  flex-direction: column;
  justify-content: flex-end;
  min-width: 0;
}
.history-osmo-title-item-v8 {
  position: relative;
  opacity: 0.5;
  transition:
    opacity 0.22s ease,
    transform 0.32s ease;
}
.history-osmo-title-item-v8.on {
  opacity: 1;
  transform: translateX(10px);
}
.history-osmo-title-item-v8.locked {
  opacity: 0.28;
}
.history-osmo-title-item-v8 button {
  width: 100%;
  border: 0;
  background: transparent;
  color: #f4f0eb;
  padding: 7px 0;
  display: grid;
  grid-template-columns: 42px minmax(0, 1fr) 34px;
  gap: 12px;
  align-items: end;
  text-align: left;
  cursor: pointer;
}
.history-osmo-title-item-v8 button:disabled {
  cursor: not-allowed;
}
.history-osmo-seq-v8 {
  padding-bottom: 8px;
  color: #777c7f;
  font:
    500 10px/1 Georgia,
    serif;
}
.history-osmo-title-copy-v8 {
  display: block;
  min-width: 0;
}
.history-osmo-title-copy-v8 > small {
  display: block;
  margin: 0 0 3px;
  color: #777c7f;
  font:
    700 6px/1 Arial,
    sans-serif;
  letter-spacing: 0.18em;
}
.history-osmo-title-copy-v8 > strong {
  display: block;
  font:
    500 clamp(32px, 4.1vw, 64px)/0.96 Georgia,
    "Noto Serif KR",
    serif;
  letter-spacing: -0.05em;
  white-space: nowrap;
  overflow: hidden;
  text-overflow: ellipsis;
}
.history-osmo-title-copy-v8 .timeline-people {
  margin-top: 7px;
  opacity: 0.72;
}
.history-osmo-title-item-v8 button > em {
  padding-bottom: 7px;
  font-style: normal;
  color: #9b9da0;
  font:
    500 16px/1 Georgia,
    serif;
  text-align: right;
}
.history-osmo-title-list-v8:hover .history-osmo-title-item-v8:not(:hover) {
  opacity: 0.22;
}
.history-osmo-title-item-v8:hover {
  opacity: 1;
}

.history-osmo-overlay-v8 {
  position: fixed;
  z-index: 180;
  inset: 0;
  overflow: auto;
  background: #111519;
  color: #f3efea;
  opacity: 0;
  transform: translateY(14px);
  transition:
    opacity 0.25s ease,
    transform 0.35s cubic-bezier(0.2, 0.8, 0.2, 1);
  overscroll-behavior: contain;
}
.history-osmo-overlay-v8.show {
  opacity: 1;
  transform: none;
}
.history-osmo-overlay-v8.closing {
  opacity: 0;
  transform: translateY(12px);
  pointer-events: none;
}
.history-osmo-overlay-v8:before {
  content: "";
  position: fixed;
  inset: 0;
  pointer-events: none;
  background:
    radial-gradient(circle at 50% 0, rgba(255, 255, 255, 0.09), transparent 35%),
    linear-gradient(120deg, transparent 40%, rgba(255, 255, 255, 0.025) 41%, transparent 42%);
}
.history-osmo-overlay-nav-v8 {
  position: sticky;
  top: 0;
  z-index: 5;
  display: flex;
  justify-content: space-between;
  align-items: center;
  padding: 18px clamp(18px, 3vw, 48px);
  background: linear-gradient(#111519 55%, rgba(17, 21, 25, 0));
  pointer-events: none;
}
.history-osmo-overlay-nav-v8 > * {
  pointer-events: auto;
}
.history-osmo-overlay-nav-v8 button {
  border: 0;
  background: transparent;
  color: #f1ede8;
  font:
    700 8px/1 Arial,
    sans-serif;
  letter-spacing: 0.15em;
  cursor: pointer;
  padding: 10px 0;
}
.history-osmo-overlay-nav-v8 span {
  font:
    700 7px/1 Arial,
    sans-serif;
  letter-spacing: 0.15em;
  color: #74787b;
}
.history-osmo-overlay-inner-v8 {
  position: relative;
  z-index: 2;
  width: min(1180px, 100%);
  margin: 0 auto;
  padding: 10px clamp(18px, 4vw, 62px) 130px;
}
.history-osmo-overlay-hero-v8 {
  display: flex;
  flex-direction: column;
  align-items: center;
  gap: clamp(28px, 5vw, 70px);
  padding: 28px 0 90px;
}
.history-osmo-overlay-title-v8 {
  text-align: center;
  width: 100%;
}
.history-osmo-overlay-title-v8 > small {
  display: block;
  color: #888c8f;
  font:
    700 8px/1 Arial,
    sans-serif;
  letter-spacing: 0.22em;
  margin-bottom: 8px;
}
.history-osmo-overlay-title-v8 h1 {
  margin: 0;
  font:
    500 clamp(62px, 10vw, 150px)/0.82 Georgia,
    "Noto Serif KR",
    serif;
  letter-spacing: -0.065em;
  word-break: keep-all;
}
.history-osmo-overlay-title-v8 .timeline-people {
  justify-content: center;
  margin-top: 18px;
}
.history-osmo-overlay-media-v8 {
  width: min(570px, 76vw);
  height: min(72vh, 820px);
  min-height: 440px;
  filter: drop-shadow(0 38px 75px rgba(0, 0, 0, 0.42));
}
.history-osmo-overlay-media-v8 img,
.history-osmo-overlay-placeholder-v8 {
  width: 100%;
  height: 100%;
  object-fit: cover;
  border-radius: 6px;
  display: block;
}
.history-osmo-overlay-placeholder-v8 {
  background: linear-gradient(145deg, #eeeae4, #aaa7a3);
  color: #222;
  display: flex;
  flex-direction: column;
  justify-content: space-between;
  padding: 38px;
}
.history-osmo-overlay-placeholder-v8 small {
  font:
    700 9px/1 Arial,
    sans-serif;
  letter-spacing: 0.2em;
}
.history-osmo-overlay-placeholder-v8 b {
  align-self: flex-end;
  font:
    500 clamp(110px, 18vw, 230px)/0.75 Georgia,
    serif;
  color: rgba(30, 30, 30, 0.17);
}
.history-osmo-overlay-copy-v8 {
  display: grid;
  grid-template-columns: 180px minmax(0, 1fr);
  gap: clamp(28px, 7vw, 90px);
  padding: 10px 0 90px;
  border-top: 1px solid #33383c;
}
.history-osmo-overlay-copy-v8 > div {
  display: flex;
  justify-content: space-between;
  align-items: start;
  gap: 12px;
  color: #797d80;
}
.history-osmo-overlay-copy-v8 > div small {
  font:
    700 7px/1.5 Arial,
    sans-serif;
  letter-spacing: 0.16em;
}
.history-osmo-overlay-copy-v8 > div b {
  font:
    500 32px/1 Georgia,
    serif;
  color: #555a5e;
}
.history-osmo-overlay-copy-v8 > p {
  margin: 0;
  white-space: pre-wrap;
  font:
    400 clamp(13px, 1.35vw, 18px)/2 "Noto Serif KR",
    serif;
  color: #c7c3bf;
  word-break: keep-all;
}
body.history-modal-open {
  overflow: hidden;
}
::view-transition-old(history-image),
::view-transition-new(history-image),
::view-transition-old(history-title),
::view-transition-new(history-title) {
  animation-duration: 0.62s;
  animation-timing-function: cubic-bezier(0.2, 0.8, 0.2, 1);
}

@media (max-width: 900px) {
  .history-osmo-main-v8 {
    grid-template-columns: minmax(220px, 0.72fr) minmax(0, 1.28fr);
    gap: 32px;
    padding-left: 4px;
    padding-right: 4px;
  }
  .history-osmo-preview-stack-v8 {
    width: min(300px, 90%);
    height: min(460px, 52vh);
  }
  .history-osmo-title-copy-v8 > strong {
    font-size: clamp(30px, 5.3vw, 50px);
  }
}
@media (max-width: 680px) {
  .history-osmo-main-v8 {
    display: block;
    min-height: 0;
    padding: 18px 0 90px;
  }
  .history-osmo-preview-v8 {
    position: relative;
    bottom: auto;
    height: 330px;
    min-height: 0;
    margin: 0 0 28px;
  }
  .history-osmo-preview-stack-v8 {
    width: min(250px, 70vw);
    height: 330px;
  }
  .history-osmo-title-list-v8 {
    padding: 0 6px;
  }
  .history-osmo-title-item-v8.on {
    transform: translateX(5px);
  }
  .history-osmo-title-item-v8 button {
    grid-template-columns: 30px minmax(0, 1fr) 24px;
    gap: 8px;
    padding: 8px 0;
  }
  .history-osmo-title-copy-v8 > strong {
    font-size: 32px;
  }
  .history-osmo-overlay-inner-v8 {
    padding-left: 15px;
    padding-right: 15px;
  }
  .history-osmo-overlay-hero-v8 {
    padding-top: 10px;
    padding-bottom: 55px;
  }
  .history-osmo-overlay-title-v8 h1 {
    font-size: 58px;
  }
  .history-osmo-overlay-media-v8 {
    width: min(88vw, 430px);
    height: 62vh;
    min-height: 390px;
  }
  .history-osmo-overlay-copy-v8 {
    grid-template-columns: 1fr;
    gap: 18px;
    padding-bottom: 70px;
  }
  .history-osmo-overlay-copy-v8 > div {
    justify-content: flex-start;
  }
  .history-osmo-overlay-nav-v8 span {
    display: none;
  }
}

/* v0.3.17 — editor icon rail + universal image tuning */
@media (min-width: 821px) {
  .editor-drawer {
    width: min(430px, 94vw);
    padding-right: 48px;
  }
  .drawer-icon-rail {
    position: absolute;
    right: 0;
    top: 58px;
    bottom: 0;
    width: 48px;
    padding: 8px 5px;
    display: flex;
    flex-direction: column;
    gap: 5px;
    overflow-y: auto;
    overflow-x: visible;
    border-left: 1px solid #2d2d33;
    background: #111114;
    z-index: 4;
  }
  .drawer-icon-rail .drawer-tab {
    position: relative;
    width: 38px;
    height: 38px;
    min-height: 38px;
    padding: 0;
    border: 1px solid transparent;
    border-radius: 7px;
    display: grid;
    place-items: center;
    color: #8b8991;
    background: #1b1a1f;
  }
  .drawer-icon-rail .drawer-tab i {
    font-style: normal;
    font-size: 15px;
    line-height: 1;
  }
  .drawer-icon-rail .drawer-tab span {
    position: absolute;
    right: 45px;
    top: 50%;
    transform: translateY(-50%) translateX(5px);
    padding: 6px 8px;
    border-radius: 6px;
    background: #050506;
    color: #eee;
    font: 700 8px/1 sans-serif;
    white-space: nowrap;
    opacity: 0;
    pointer-events: none;
    transition: 0.12s ease;
    box-shadow: 0 4px 18px rgba(0, 0, 0, 0.3);
  }
  .drawer-icon-rail .drawer-tab:hover span {
    opacity: 1;
    transform: translateY(-50%) translateX(0);
  }
  .drawer-icon-rail .drawer-tab.on {
    background: #ececf0;
    color: #111;
    border-color: #fff;
    box-shadow: inset 3px 0 #999;
  }
  .drawer-body {
    padding-right: 15px;
  }
}
@media (max-width: 820px) {
  .drawer-icon-rail {
    display: grid;
    grid-auto-flow: column;
    grid-auto-columns: 44px;
    gap: 4px;
    padding: 7px 10px 5px;
    overflow-x: auto;
  }
  .drawer-icon-rail .drawer-tab {
    width: 40px;
    height: 36px;
    padding: 0;
    display: grid;
    place-items: center;
    border-radius: 8px;
    background: #222227;
    border: 0;
  }
  .drawer-icon-rail .drawer-tab i {
    font-style: normal;
    font-size: 14px;
  }
  .drawer-icon-rail .drawer-tab span {
    display: none;
  }
  .drawer-icon-rail .drawer-tab.on {
    background: #f0f0f2;
    color: #111;
  }
}
/* v0.3.102 — drawerOpen이 꺼진(패널을 접은) 상태에서도 탭 아이콘 레일만 계속 떠 있게 합니다.
   화면 폭과 상관없이 항상 오른쪽 세로 레일 모양으로 고정해서, 열림 상태의 반응형 레이아웃과
   섞이지 않게 합니다. */
.editor-drawer.collapsed {
  width: 48px;
  min-width: 48px;
  padding-right: 0;
  background: transparent;
  border-left: 0;
  box-shadow: none;
}
.editor-drawer.collapsed .drawer-icon-rail {
  position: static;
  width: 48px;
  height: 100%;
  display: flex;
  flex-direction: column;
  gap: 5px;
  padding: 12px 5px;
  overflow-y: auto;
  overflow-x: visible;
  border-left: 1px solid #2d2d33;
  background: #111114;
}
.editor-drawer.collapsed .drawer-tab {
  position: relative;
  width: 38px;
  height: 38px;
  min-height: 38px;
  padding: 0;
  border: 1px solid transparent;
  border-radius: 7px;
  display: grid;
  place-items: center;
  color: #8b8991;
  background: #1b1a1f;
}
.editor-drawer.collapsed .drawer-tab i {
  font-style: normal;
  font-size: 15px;
  line-height: 1;
}
.editor-drawer.collapsed .drawer-tab span {
  position: absolute;
  right: 45px;
  top: 50%;
  transform: translateY(-50%) translateX(5px);
  padding: 6px 8px;
  border-radius: 6px;
  background: #050506;
  color: #eee;
  font: 700 8px/1 sans-serif;
  white-space: nowrap;
  opacity: 0;
  pointer-events: none;
  transition: 0.12s ease;
  box-shadow: 0 4px 18px rgba(0, 0, 0, 0.3);
}
.editor-drawer.collapsed .drawer-tab:hover span {
  opacity: 1;
  transform: translateY(-50%) translateX(0);
}
.editor-drawer.collapsed .drawer-tab.on {
  background: #ececf0;
  color: #111;
  border-color: #fff;
  box-shadow: inset 3px 0 #999;
}
.mini-image-tune {
  margin-top: 8px;
  padding: 7px;
  border: 1px solid #2e2c32;
  border-radius: 8px;
  background: #17161a;
  display: grid;
  gap: 5px;
}
.mini-image-tune > small {
  font-size: 6px !important;
  letter-spacing: 0.12em;
  color: #777 !important;
}
.mini-image-tune .range-field {
  margin: 0;
}
.dday-tune-pack {
  grid-column: 1/-1;
  display: grid;
  gap: 5px;
  padding: 7px;
  border: 1px solid #d8d6d8;
  border-radius: 8px;
  background: #f7f6f7;
}
.dday-tune-pack .range-field {
  margin: 0;
}
.history-osmo-preview-item-v8 {
  overflow: hidden;
}
.history-osmo-preview-item-v8 img,
.history-osmo-overlay-media-v8 img,
.history-card-media-v5 img,
.dday-pair-media img,
.dday-personal-media img,
.dday-dual-media img,
.student-id-face > img,
.world-lore-body img {
  transform: translate(var(--img-x, 0%), var(--img-y, 0%)) scale(var(--img-scale, 1));
  transform-origin: center center;
  will-change: transform;
}
.history-osmo-title-item-v8 {
  cursor: default;
}
.history-osmo-title-item-v8 button {
  cursor: pointer;
}
.history-osmo-title-item-v8:hover strong {
  font-style: italic;
}
.relation-editor-card {
  border: 1px solid #2f2d33;
  border-radius: 11px;
  padding: 6px;
  background: #18171b;
  margin-bottom: 8px;
}
.relation-editor-card > .elist-row {
  border: 0;
  background: transparent;
  padding: 5px;
}
.pair-moodboard-v4 figure {
  overflow: hidden;
}
.pair-moodboard-v4 figure img {
  transform: translate(var(--img-x, 0%), var(--img-y, 0%)) scale(var(--img-scale, 1));
  transform-origin: center;
}

/* v0.3.18 — MAIN full-canvas character layers */
.home-page {
  overflow: hidden;
}
.home-hero-stage {
  position: absolute;
  inset: 0;
  z-index: 2;
  overflow: visible;
  pointer-events: none;
}
.hero-layer-art {
  position: absolute;
  inset: 0;
  display: flex;
  align-items: flex-end;
  justify-content: center;
  overflow: visible;
  pointer-events: none;
  /* --hero-x-extra(기본 0px)는 v0.3.244에서 모바일 전용으로 추가 — 두 캐릭터가 서로
     너무 많이 겹쳐 한쪽이 잘 안 보일 때 JS(syncHomeHeroAspectFit)가 벌려주는 보정값. */
  transform: translate(calc(var(--hero-x, 0vw) + var(--hero-x-extra, 0px)), var(--hero-y, 0vh)) scale(var(--art-scale, 1));
  transform-origin: 50% 100%;
  will-change: transform;
}
.hero-layer-inner {
  position: relative;
  /* v0.3.243 — flex 아이템은 기본적으로(flex-shrink:1) 부모(.hero-layer-art, 화면 폭만큼의
     너비)보다 넓어지려 하면 도로 눌려 줄어듭니다. 모바일에서 캐릭터별 투명 여백을
     감안해 JS가 img에 더 넓은 max-width를 인라인으로 줘도 이 기본 축소 때문에 결국
     화면 폭에 맞춰 눌려버려 무효화되고 있었습니다 — 절대 줄어들지 않게 고정합니다
     (여백만 화면 밖으로 넘어가고 .home-page의 overflow:hidden이 그 여백을 잘라내므로
     실제로 보이는 인물 크기에는 지장이 없습니다).*/
  flex-shrink: 0;
}
/* v0.3.331 — 이 선택자가 .hero-layer-art 안의 img 전부를 잡아서, 같은 컨테이너
   안에 있는 "이미지 교체" 버튼의 작은 아이콘(.image-replace-btn img)까지
   캐릭터 원본용 거대한 드롭섀도(32px 오프셋 · 40px 블러)를 뒤집어써서
   동그란 버튼 밖으로 크게 번져 보이는 원인이었습니다. 실제 캐릭터 이미지
   (.image-drag-target)에만 걸리도록 좁힙니다. */
.hero-layer-art img.image-drag-target {
  display: block;
  width: auto;
  height: auto;
  max-width: min(78vw, 1180px);
  max-height: calc(100dvh - 18px);
  object-fit: contain;
  object-position: center bottom;
  filter: drop-shadow(0 32px 40px rgba(0, 0, 0, 0.42));
}
.hero-layer-art .art-fallback {
  width: min(42vw, 520px);
  height: 72vh;
  align-self: flex-end;
}
.hero-info-half {
  overflow: visible !important;
  z-index: 10 !important;
  pointer-events: none;
}
.hero-info-half .hero-copy,
.hero-info-half .edge-keywords {
  pointer-events: auto;
}
.hero-info-half:after {
  display: none !important;
}
.home-page > .pair-core {
  z-index: 24;
}
.home-page > .home-dday-widgets {
  z-index: 26;
}

/* editor: layer stack */
.main-art-preview.contain {
  overflow: hidden;
  display: grid;
  place-items: center;
  min-height: 120px;
}
.main-art-preview.contain img {
  width: 100%;
  height: 120px;
  object-fit: contain;
  object-position: center bottom;
}
.hero-layer-list {
  display: grid;
  gap: 6px;
  margin-top: 9px;
}
.hero-layer-row {
  display: grid;
  grid-template-columns: 26px 44px minmax(0, 1fr) auto;
  align-items: center;
  gap: 8px;
  padding: 7px;
  border: 1px solid #302e34;
  border-radius: 9px;
  background: #19181c;
  cursor: grab;
  user-select: none;
}
.hero-layer-row:active {
  cursor: grabbing;
}
.hero-layer-row.dragging {
  opacity: 0.38;
}
.hero-layer-row.drag-over {
  border-color: #e8e7ed;
  background: #29272e;
}
.hero-layer-grip {
  display: grid;
  place-items: center;
  width: 24px;
  height: 34px;
  border-radius: 6px;
  color: #777;
  font-size: 19px;
  line-height: 1;
  background: #111115;
}
.hero-layer-thumb {
  width: 44px;
  height: 44px;
  border-radius: 7px;
  overflow: hidden;
  background: #0f0f12;
  display: grid;
  place-items: center;
}
.hero-layer-thumb img {
  width: 100%;
  height: 100%;
  object-fit: contain;
}
.hero-layer-row .grow {
  display: flex;
  flex-direction: column;
  min-width: 0;
}
.hero-layer-row .grow small {
  font-size: 6px;
  letter-spacing: 0.14em;
  color: #777;
}
.hero-layer-row .grow b {
  font-size: 10px;
  white-space: nowrap;
  overflow: hidden;
  text-overflow: ellipsis;
}
.hero-layer-depth {
  font-size: 7px;
  padding: 4px 6px;
  border-radius: 999px;
  background: #2a282e;
  color: #aaa;
}
.hero-layer-row:first-child .hero-layer-depth {
  background: #ececf0;
  color: #111;
  font-weight: 800;
}

/* v0.3.242 — "PC에 맞게 배치하면 모바일에서 다르게 보임": 캐릭터가 화면 하단에
   붙어(align-items:flex-end) 렌더링되는데, 이 두 구간이 max-height를 78dvh/66dvh로
   데스크톱(calc(100dvh - 18px), 거의 화면 전체 높이)보다 훨씬 낮게 잘라서 캐릭터
   자체의 세로 크기가 화면 높이 대비 훨씬 작아졌습니다. 하단 기준으로 붙어있으니
   줄어든 만큼 전부 캐릭터 "위쪽" 여백으로 남아, 모바일에서는 위치를 전혀 안 건드려도
   구도 자체가 완전히 달라져 보였습니다(사용자가 올린 PC/모바일 스크린샷에서 실측 확인:
   화면 높이 대비 캐릭터 높이가 데스크톱 68%→모바일 46%로 줄어 있었음). 데스크톱과 같은
   max-height로 맞춰서 캐릭터가 화면에서 차지하는 세로 비율이 기기와 무관하게
   일정하게 유지되도록 했습니다 — 캐릭터 위치/확대(--hero-x/--hero-y/--art-scale)
   자체의 저장값은 전혀 안 건드렸습니다. */
@media (max-width: 820px) {
  .hero-layer-art img {
    max-width: 96vw;
    max-height: calc(100dvh - 18px);
  }
}
@media (max-width: 560px) {
  .hero-layer-art img {
    max-width: 100vw;
    max-height: calc(100dvh - 18px);
  }
}

/* =========================================================
   lope v0.3.19 — editor clarity / TALK art / relation map
   ========================================================= */
.drawer-current-title {
  position: sticky;
  top: -15px;
  z-index: 3;
  margin: -15px -15px 18px;
  padding: 15px 15px 13px;
  background: linear-gradient(#151518 82%, rgba(21, 21, 24, 0.92));
  border-bottom: 1px solid #2d2d33;
}
.drawer-current-title small {
  display: block;
  font:
    700 7px/1 Arial,
    sans-serif;
  letter-spacing: 0.18em;
  color: #6f6e77;
  margin-bottom: 5px;
}
.drawer-current-title h2 {
  margin: 0;
  font:
    700 20px/1.05 "Noto Sans KR",
    sans-serif;
  color: #f4f3f6;
  letter-spacing: -0.03em;
}
.drawer-section h3 {
  font-size: 12px !important;
  letter-spacing: 0.06em !important;
  color: #c4c1c8 !important;
  text-transform: none !important;
  margin-bottom: 11px !important;
}
.drawer-section + .drawer-section {
  padding-top: 2px;
}
@media (min-width: 821px) {
  .editor-drawer {
    padding-right: 50px;
  }
  .drawer-icon-rail {
    right: 0 !important;
    left: auto !important;
    top: 58px !important;
  }
  .drawer-icon-rail .drawer-tab i {
    font-size: 17px;
  }
  .drawer-icon-rail .drawer-tab.on {
    box-shadow:
      inset 3px 0 #111,
      0 0 0 1px #fff;
  }
  .drawer-icon-rail .drawer-tab span {
    font-size: 9px;
  }
}

/* gallery image tuning belongs to the add/edit modal, not the admin list */
.modal-range-grid {
  display: grid;
  grid-template-columns: 1fr;
  gap: 9px;
  padding: 10px;
  border: 1px solid #e2dfe2;
  border-radius: 11px;
  background: #f7f6f7;
}
.modal-range-grid label {
  display: grid;
  grid-template-columns: 1fr auto;
  align-items: center;
  gap: 6px;
  margin: 0 !important;
  color: #5f5960 !important;
}
.modal-range-grid output {
  font-size: 9px;
  color: #222;
}
.modal-range-grid input[type="range"] {
  grid-column: 1/-1;
  padding: 0;
  border: 0;
  background: transparent;
  accent-color: #222;
}
.gallery-item-tune {
  margin-top: 14px !important;
}

/* TALK image controls live in TALK admin */
.talk-cast-editor {
  display: grid;
  gap: 10px;
}
.talk-cast-card {
  border: 1px solid #333139;
  border-radius: 11px;
  background: #19181c;
  padding: 9px;
}
.talk-cast-card > header {
  display: grid;
  grid-template-columns: 38px minmax(0, 1fr) 28px 28px;
  gap: 7px;
  align-items: center;
}
.talk-cast-card > header .grow {
  min-width: 0;
}
.talk-cast-card > header b {
  display: block;
  font-size: 10px;
}
.talk-cast-card > header small {
  font-size: 7px;
  color: #777;
}
.talk-standing-editor-preview {
  height: 112px;
  margin: 9px 0 5px;
  border: 1px solid #2f2d33;
  border-radius: 9px;
  background: #111014;
  overflow: hidden;
  display: flex;
  align-items: flex-end;
  justify-content: center;
}
.talk-standing-editor-preview img {
  max-width: 100%;
  max-height: 108px;
  object-fit: contain;
  object-position: center bottom;
}
.talk-standing-editor-preview.empty {
  align-items: center;
  color: #5f5b64;
  font:
    700 7px/1 Arial,
    sans-serif;
  letter-spacing: 0.14em;
}

/* Message bubble colors always derive from the speaker theme color. */
.talk-bubble {
  background: color-mix(in srgb, var(--talk) 38%, #fff) !important;
  border: 1px solid color-mix(in srgb, var(--talk) 58%, #fff) !important;
  color: color-mix(in srgb, var(--talk) 36%, #171419) !important;
  box-shadow: 0 5px 17px color-mix(in srgb, var(--talk) 13%, transparent) !important;
}
.talk-message.right .talk-bubble {
  background: color-mix(in srgb, var(--talk) 78%, #fff) !important;
  border-color: color-mix(in srgb, var(--talk) 88%, #fff) !important;
  color: #fff !important;
}
.talk-meta i {
  box-shadow: 0 0 0 2px color-mix(in srgb, var(--talk) 62%, #fff);
}

/* Relation map is part of STORY and opens as an overlay. */
.history-tools-v7 {
  display: flex;
  align-items: center;
  justify-content: center;
  gap: 8px;
  flex-wrap: wrap;
}
/* v0.3.233 — 캐릭터 필터 알약 줄에 끼어 있으면 필터가 3개 이상일 때 붐벼서, "맨 위로"
   버튼처럼 화면 오른쪽에 고정된 플로팅 버튼으로 뺐습니다(하단 독은 가운데 정렬이라
   오른쪽은 항상 비어 있음). */
/* v0.3.234 — UP 버튼과 같은 계열(포인트색)로 맞춰서, 둘 다 "따로 노는 회색"이
   아니라 한 세트처럼 보이게 했습니다. */
.history-map-button-v19 {
  position: fixed;
  z-index: 80;
  right: 16px;
  /* v0.3.238 — "하단 독은 가운데 정렬이라 오른쪽은 항상 비어있다"는 가정이 좁은
     화면(≤700px)에서는 틀렸습니다(독이 그때는 left:8px/right:8px로 거의 화면
     전체를 차지) — UP 버튼과 같은 높이로 독 위에 띄웁니다. */
  bottom: max(82px, calc(env(safe-area-inset-bottom) + 80px));
  border: 1px solid color-mix(in srgb, var(--accent, #9f7d86) 50%, #fff 30%);
  background: color-mix(in srgb, var(--accent, #9f7d86) 78%, #000 10%);
  backdrop-filter: blur(8px);
  color: #fff;
  border-radius: 999px;
  padding: 9px 14px;
  font:
    700 8px/1 Arial,
    sans-serif;
  letter-spacing: 0.08em;
  cursor: pointer;
  box-shadow: 0 12px 30px color-mix(in srgb, var(--accent, #9f7d86) 30%, transparent);
}
.history-map-button-v19:hover {
  background: #fff;
  color: #17181b;
}
.relation-map-overlay-v19 {
  position: fixed;
  z-index: 145;
  inset: 0;
  background: rgba(8, 8, 10, 0.72);
  backdrop-filter: blur(10px);
  display: grid;
  place-items: center;
  padding: clamp(12px, 4vw, 46px);
  opacity: 0;
  transition: 0.18s ease;
}
.relation-map-overlay-v19.show {
  opacity: 1;
}
.relation-map-window-v19 {
  width: min(1180px, 96vw);
  height: min(820px, 88dvh);
  background: #fbf8f1;
  border-radius: 22px;
  overflow: hidden;
  box-shadow: 0 35px 90px rgba(0, 0, 0, 0.38);
  display: grid;
  /* v0.3.346 — 관계도창 안내문(.relation-map-help-v19, editMode에서만 렌더)을 위한
     가변 가운데 행 추가. 안내문이 없을 때(방문자)는 이 행이 빈 채로 auto=0이라
     기존 레이아웃과 동일하게 동작합니다. */
  grid-template-rows: 66px auto minmax(0, 1fr);
  transform: translateY(14px) scale(0.985);
  transition: 0.18s ease;
}
.relation-map-window-v19 > .diagram-board {
  grid-row: 3;
}
.relation-map-help-v19 {
  margin: 0;
  padding: 10px 20px;
  font-size: 10px;
  line-height: 1.6;
  color: #7a7268;
  background: #f4efe4;
  border-bottom: 1px solid #e5ded3;
}
.relation-map-overlay-v19.show .relation-map-window-v19 {
  transform: none;
}
.relation-map-window-v19 > header {
  display: flex;
  align-items: center;
  justify-content: space-between;
  padding: 0 20px;
  border-bottom: 1px solid #e5ded3;
  color: #312d2a;
}
.relation-map-window-v19 > header small {
  display: block;
  font:
    700 7px/1 Arial,
    sans-serif;
  letter-spacing: 0.18em;
  color: #aaa097;
  margin-bottom: 4px;
}
.relation-map-window-v19 > header h2 {
  margin: 0;
  font:
    600 24px/1 Georgia,
    "Noto Serif KR",
    serif;
}
.relation-map-close-v19 {
  width: 34px;
  height: 34px;
  border: 1px solid #ddd4c8;
  border-radius: 50%;
  background: #fff;
  color: #4f4944;
  font-size: 20px;
  cursor: pointer;
}
.relation-map-board-v19 {
  width: 100% !important;
  height: 100% !important;
  max-width: none !important;
  border: 0 !important;
  border-radius: 0 !important;
  margin: 0 !important;
}
.relation-map-window-v19 .diagram-board {
  box-shadow: none;
}
@media (max-width: 720px) {
  .drawer-current-title {
    top: -13px;
    margin: -13px -13px 15px;
    padding: 13px;
  }
  .drawer-current-title h2 {
    font-size: 18px;
  }
  .drawer-section h3 {
    font-size: 11px !important;
  }
  .relation-map-overlay-v19 {
    padding: 8px;
  }
  .relation-map-window-v19 {
    width: 100%;
    height: 88dvh;
    border-radius: 16px;
    grid-template-rows: 58px minmax(0, 1fr);
  }
  .relation-map-window-v19 > header {
    padding: 0 14px;
  }
  .relation-map-window-v19 > header h2 {
    font-size: 20px;
  }
  .history-map-button-v19 {
    padding: 8px 11px;
    bottom: max(72px, calc(env(safe-area-inset-bottom) + 70px));
  }
  .talk-cast-card .mini-image-tune {
    padding: 8px;
  }
}

/* =========================================================
   lope v0.3.20 — site/main split, cover, widget placement,
   unified main image layers, relation-map direct node editing
   ========================================================= */

/* custom selects: remove native Windows look */
.efield select,
.modal select,
#timeline-display-mode,
.compare-profile-select,
.scene-picker select,
.block-editor select {
  appearance: none;
  -webkit-appearance: none;
  -moz-appearance: none;
  padding-right: 34px !important;
  background-image:
    linear-gradient(45deg, transparent 50%, #8e8b95 50%), linear-gradient(135deg, #8e8b95 50%, transparent 50%);
  background-position:
    calc(100% - 15px) 50%,
    calc(100% - 10px) 50%;
  background-size:
    5px 5px,
    5px 5px;
  background-repeat: no-repeat;
  cursor: pointer;
}
.efield select,
#timeline-display-mode,
.block-editor select {
  background-color: #202024 !important;
  color: #f3f3f5 !important;
  border-color: #34343a !important;
}
.modal select {
  background-color: #fff !important;
  color: #161619 !important;
  border-color: #ddd !important;
  background-image:
    linear-gradient(45deg, transparent 50%, #5d5b61 50%), linear-gradient(135deg, #5d5b61 50%, transparent 50%);
}
.compare-profile-select {
  background-color: #fff !important;
  color: #17171a !important;
}

/* admin: split Site from Main + unified layer cards */
.hero-layer-list.unified {
  gap: 10px;
}
.hero-layer-card {
  border: 1px solid #302e34;
  border-radius: 11px;
  background: #19181c;
  overflow: hidden;
  user-select: none;
}
.hero-layer-card.dragging {
  opacity: 0.38;
}
.hero-layer-card.drag-over {
  border-color: #f1f0f4;
  background: #27252c;
}
.hero-layer-card > header {
  display: grid;
  grid-template-columns: 26px 44px minmax(0, 1fr) auto;
  align-items: center;
  gap: 8px;
  padding: 8px;
  border-bottom: 1px solid #2c2a30;
}
.hero-layer-card .hero-layer-grip {
  cursor: grab;
}
.hero-layer-card .hero-layer-grip:active {
  cursor: grabbing;
}
.hero-layer-card .grow {
  display: flex;
  flex-direction: column;
  min-width: 0;
}
.hero-layer-card .grow small {
  font-size: 6px;
  letter-spacing: 0.13em;
  color: #77727e;
}
.hero-layer-card .grow b {
  font-size: 10px;
  white-space: nowrap;
  overflow: hidden;
  text-overflow: ellipsis;
}
.hero-layer-controls {
  padding: 8px 9px 10px;
}
.hero-layer-controls .range-field {
  margin-top: 8px;
}
.hero-layer-controls .ebtn {
  margin-bottom: 2px;
}

/* 3x3 home widget position picker */
.widget-position-grid {
  display: grid;
  grid-template-columns: repeat(3, 1fr);
  gap: 5px;
  width: 150px;
  aspect-ratio: 1;
  margin: 8px auto 2px;
  padding: 6px;
  border: 1px solid #343139;
  border-radius: 12px;
  background: #111115;
}
.widget-position-grid button {
  position: relative;
  border: 1px solid #302e34;
  border-radius: 7px;
  background: #1f1e23;
  cursor: pointer;
}
.widget-position-grid button:before {
  content: "";
  position: absolute;
  inset: 7px;
  border: 1px dashed #494650;
  border-radius: 4px;
}
.widget-position-grid button i {
  position: absolute;
  width: 9px;
  height: 7px;
  border-radius: 3px;
  background: #77737e;
  left: 50%;
  top: 50%;
  transform: translate(-50%, -50%);
}
.widget-position-grid button.on {
  background: #eeeef1;
  border-color: #fff;
}
.widget-position-grid button.on i {
  background: #111;
}
.widget-position-grid button:hover {
  border-color: #77727d;
}

/* cover editor */
.cover-editor-preview {
  height: 126px;
  margin: 8px 0;
  border: 1px solid #302e34;
  border-radius: 12px;
  background: #f4f2ef;
  display: grid;
  place-items: center;
  overflow: hidden;
}
.cover-editor-preview img {
  max-width: 88%;
  max-height: 106px;
  object-fit: contain;
}
.cover-editor-preview span {
  color: #777;
  font:
    800 12px/1 Arial,
    sans-serif;
  letter-spacing: 0.16em;
}

/* cover shown to visitors */
.site-cover-v20 {
  position: fixed;
  z-index: 1000;
  inset: 0;
  background: var(--cover-bg, #f4f2ef);
  display: grid;
  place-items: center;
  opacity: 0;
  pointer-events: none;
  transition:
    opacity 0.42s ease,
    visibility 0.42s ease;
  visibility: visible;
}
.site-cover-v20.show {
  opacity: 1;
  pointer-events: auto;
}
.site-cover-v20.leaving {
  opacity: 0;
  visibility: hidden;
}
.site-cover-inner-v20 {
  width: min(720px, 80vw);
  display: flex;
  flex-direction: column;
  align-items: center;
  gap: 28px;
  transform: translateY(8px);
  transition: transform 0.6s cubic-bezier(0.2, 0.75, 0.2, 1);
}
.site-cover-v20.show .site-cover-inner-v20 {
  transform: none;
}
.site-cover-inner-v20 img {
  display: block;
  max-width: min(680px, 76vw);
  max-height: min(50vh, 460px);
  object-fit: contain;
}
.site-cover-inner-v20 strong {
  font:
    500 clamp(42px, 8vw, 94px)/1 Georgia,
    serif;
  letter-spacing: -0.04em;
  color: #171719;
}
.site-cover-gauge-v20 {
  width: min(360px, 56vw);
  height: 2px;
  background: rgba(20, 20, 22, 0.16);
  overflow: hidden;
}
.site-cover-gauge-v20 i {
  display: block;
  width: 100%;
  height: 100%;
  background: #171719;
  transform-origin: left;
  animation: lopeCoverGauge var(--cover-ms, 1600ms) linear both;
}
@keyframes lopeCoverGauge {
  from {
    transform: scaleX(0);
  }
  to {
    transform: scaleX(1);
  }
}

/* home widgets: one shared 3x3 position, always above decorative content */
.home-page {
  --home-info-shift-y: 0px;
  --home-pair-shift-y: 0px;
}
.home-page .hero-copy,
.home-page .edge-keywords {
  translate: 0 var(--home-info-shift-y);
}
.home-page .pair-core {
  translate: 0 var(--home-pair-shift-y);
}
.home-page > .home-dday-widgets {
  z-index: 35 !important;
  top: auto;
  right: auto;
  bottom: auto;
  left: auto;
  transform: none;
  width: min(570px, calc(100vw - 40px));
  max-height: calc(100dvh - 120px);
  pointer-events: none;
}
.home-page > .home-dday-widgets .dday-card {
  pointer-events: auto;
}
.widget-pos-top-left > .home-dday-widgets {
  top: max(70px, calc(env(safe-area-inset-top) + 62px));
  left: max(22px, env(safe-area-inset-left));
  flex-direction: column;
  align-items: flex-start;
  width: min(280px, 31vw);
}
.widget-pos-top-center > .home-dday-widgets {
  top: max(64px, calc(env(safe-area-inset-top) + 56px));
  left: 50%;
  transform: translateX(-50%);
  justify-content: center;
}
.widget-pos-top-right > .home-dday-widgets {
  top: max(70px, calc(env(safe-area-inset-top) + 62px));
  right: max(22px, env(safe-area-inset-right));
  flex-direction: column;
  align-items: flex-end;
  width: min(280px, 31vw);
}
.widget-pos-middle-left > .home-dday-widgets {
  top: 50%;
  left: max(22px, env(safe-area-inset-left));
  transform: translateY(-50%);
  flex-direction: column;
  align-items: flex-start;
  width: min(280px, 31vw);
}
.widget-pos-middle-center > .home-dday-widgets {
  top: 50%;
  left: 50%;
  transform: translate(-50%, -50%);
  justify-content: center;
}
.widget-pos-middle-right > .home-dday-widgets {
  top: 50%;
  right: max(22px, env(safe-area-inset-right));
  transform: translateY(-50%);
  flex-direction: column;
  align-items: flex-end;
  width: min(280px, 31vw);
}
.widget-pos-bottom-left > .home-dday-widgets {
  bottom: max(86px, calc(env(safe-area-inset-bottom) + 76px));
  left: max(22px, env(safe-area-inset-left));
  flex-direction: column;
  align-items: flex-start;
  width: min(280px, 31vw);
}
.widget-pos-bottom-center > .home-dday-widgets {
  bottom: max(88px, calc(env(safe-area-inset-bottom) + 78px));
  left: 50%;
  transform: translateX(-50%);
  justify-content: center;
}
.widget-pos-bottom-right > .home-dday-widgets {
  bottom: max(86px, calc(env(safe-area-inset-bottom) + 76px));
  right: max(22px, env(safe-area-inset-right));
  flex-direction: column;
  align-items: flex-end;
  width: min(280px, 31vw);
}
/* collision avoidance: mirrored info moves together */

/* relation map: direct node editing inside the map */
.relation-map-head-actions {
  display: flex;
  align-items: center;
  gap: 7px;
}
.relation-map-head-actions > button:not(.relation-map-close-v19) {
  border: 1px solid #ddd4c8;
  border-radius: 999px;
  background: #fff;
  color: #544d47;
  padding: 8px 11px;
  font:
    700 8px/1 Arial,
    sans-serif;
  letter-spacing: 0.06em;
  cursor: pointer;
}
.relation-map-head-actions > button:not(.relation-map-close-v19):hover {
  background: #2e2a27;
  color: #fff;
  border-color: #2e2a27;
}
.dnode {
  overflow: visible;
}
.dnode-edit {
  position: absolute;
  right: 3px;
  top: 2px;
  width: 25px;
  height: 25px;
  border-radius: 50%;
  border: 1px solid #d8cec1;
  background: #fff;
  color: #4d4640;
  display: grid;
  place-items: center;
  font-size: 10px;
  box-shadow: 0 5px 13px rgba(0, 0, 0, 0.12);
  cursor: pointer;
  z-index: 6;
}
.dnode-edit:hover {
  background: #292522;
  color: #fff;
}
.modal-note {
  font-size: 10px;
  line-height: 1.6;
  color: #7e7771;
  margin: 7px 0 0;
}
.m-btn.danger {
  color: #b44b5b;
  border-color: #e9cdd2;
  background: #fff6f7;
}

@media (max-width: 820px) {
  .site-cover-inner-v20 {
    width: 88vw;
    gap: 20px;
  }
  .site-cover-inner-v20 img {
    max-width: 84vw;
    max-height: 42vh;
  }
  .home-page > .home-dday-widgets {
    width: min(340px, calc(100vw - 20px)) !important;
    max-height: 38dvh;
    overflow: auto;
    scrollbar-width: none;
  }
  .home-page > .home-dday-widgets::-webkit-scrollbar {
    display: none;
  }
  .widget-pos-top-left > .home-dday-widgets,
  .widget-pos-middle-left > .home-dday-widgets,
  .widget-pos-bottom-left > .home-dday-widgets {
    left: 10px;
  }
  .widget-pos-top-right > .home-dday-widgets,
  .widget-pos-middle-right > .home-dday-widgets,
  .widget-pos-bottom-right > .home-dday-widgets {
    right: 10px;
  }
  .relation-map-head-actions > button:not(.relation-map-close-v19) {
    padding: 7px 9px;
    font-size: 7px;
  }
}
@media (max-width: 520px) {
  .widget-pos-top-left > .home-dday-widgets,
  .widget-pos-top-right > .home-dday-widgets,
  .widget-pos-middle-left > .home-dday-widgets,
  .widget-pos-middle-right > .home-dday-widgets,
  .widget-pos-bottom-left > .home-dday-widgets,
  .widget-pos-bottom-right > .home-dday-widgets {
    width: 230px !important;
  }
  .home-page > .home-dday-widgets .dday-card {
    width: 230px !important;
    flex: 0 0 auto;
  }
  .widget-position-grid {
    width: 132px;
  }
}
.relation-art-details {
  margin: 7px 4px 4px;
  border-top: 1px solid #2e2c32;
  padding-top: 6px;
}
.relation-art-details summary {
  cursor: pointer;
  list-style: none;
  color: #918d97;
  font-size: 8px;
  padding: 6px 5px;
}
.relation-art-details summary::-webkit-details-marker {
  display: none;
}
.relation-art-details summary:before {
  content: "▸";
  display: inline-block;
  margin-right: 6px;
}
.relation-art-details[open] summary:before {
  content: "▾";
}
.relation-art-details .mini-image-tune {
  margin-top: 3px;
}
.dnode > small {
  display: block;
  width: max-content;
  max-width: 130px;
  margin: 3px auto 0;
  padding: 3px 6px;
  border-radius: 999px;
  background: rgba(255, 255, 255, 0.84);
  color: #7a726b;
  font-size: 7px;
  box-shadow: 0 2px 8px rgba(0, 0, 0, 0.05);
}

/* v0.3.21 — direct image positioning, easter eggs, profile reactions */
.site-view {
  position: relative;
}
.range-control {
  display: grid;
  grid-template-columns: minmax(0, 1fr) 66px;
  gap: 7px;
  align-items: center;
}
.range-control > input[type="range"] {
  min-width: 0;
}
.range-number {
  width: 72px !important;
  height: 30px;
  border: 1px solid #403c45;
  border-radius: 9px;
  background: #242127;
  color: #f7f4f6;
  padding: 0 10px;
  font:
    650 10px/1 ui-monospace,
    SFMono-Regular,
    Consolas,
    monospace;
  text-align: center;
  outline: none;
  appearance: textfield;
  -moz-appearance: textfield;
}
.range-number:focus {
  border-color: #8f8995;
  background: #2b272e;
  box-shadow: 0 0 0 2px rgba(255, 255, 255, 0.045);
}
.range-number::-webkit-inner-spin-button,
.range-number::-webkit-outer-spin-button {
  -webkit-appearance: none;
  margin: 0;
}
.site.editing .image-drag-ready {
  pointer-events: auto !important;
  cursor: grab;
  touch-action: none;
  outline: 1px dashed rgba(255, 255, 255, 0.34);
  outline-offset: -2px;
}
.site.editing .image-drag-ready.is-dragging {
  cursor: grabbing;
  outline-color: #fff;
  filter: drop-shadow(0 0 10px rgba(255, 255, 255, 0.16));
}
.site.editing .profile-v4-art.image-drag-ready {
  outline-color: color-mix(in srgb, var(--c, #999) 62%, transparent);
}
.site.editing .pair-edge-v4.image-drag-ready,
.site.editing .talk-standing.image-drag-ready {
  pointer-events: auto !important;
}

/* v0.3.104 — 이미지 모서리에 뜨는 작고 동그란 "이미지 교체" 버튼. imageReplaceButton()/
   initImageReplaceTools()가 심어주는 .image-tools-wrap > .image-replace-btn 조합에 공통 적용됩니다.
   드래그(위치 이동) 클릭 영역과 겹치지 않는 별도 버튼이지만, 평소엔 숨어있다가 이미지 위에
   마우스를 올렸을 때만 나타납니다(계속 떠 있으면 시각적으로 번잡해서). 기본 스킨용 어두운
   스타일이 기본값이고, .theme-youth 스코프에서 밝은 톤으로 다시 칠합니다. */
.image-replace-btn {
  position: absolute;
  /* v0.3.322 — 오른쪽 위 모서리에 고정돼 있으면, 실제 캐릭터 이미지 파일마다
     제각각인 투명 여백 때문에 버튼이 그림 밖(빈 공간)에 걸쳐 "튀어나온" 것처럼
     보일 수 있다는 리포트로 가로 중앙 정렬로 바꿨습니다. */
  left: 50%;
  transform: translateX(-50%);
  top: 10px;
  z-index: 20;
  width: 28px;
  height: 28px;
  display: grid;
  place-items: center;
  border-radius: 50%;
  font-size: 12px;
  line-height: 1;
  cursor: pointer;
  pointer-events: none;
  opacity: 0;
  transition:
    opacity 0.12s ease,
    transform 0.12s ease;
  background: #1b1a1f;
  color: #fff;
  border: 1px solid #3b3941;
  box-shadow: 0 5px 14px rgba(0, 0, 0, 0.35);
}
.image-tools-wrap:hover .image-replace-btn,
.image-replace-btn:focus-visible {
  opacity: 0.9;
  pointer-events: auto;
}
.image-replace-btn:hover {
  opacity: 1;
  transform: translateX(-50%) scale(1.08);
}
.site.theme-youth .image-replace-btn {
  background: #fff;
  color: var(--yt-blue, #1768bf);
  border: 1px solid var(--yt-line, #d8e3ee);
  border-radius: 50%;
  box-shadow: 0 5px 14px rgba(35, 77, 116, 0.22);
}
/* v0.3.322 — 사용자 리포트: 다크 모드에서 이 버튼(어두운 배경 + 흰 아이콘)이 다크
   모드의 어두운 주변과 색이 겹쳐서 잘 안 보임. 다크 모드에서만 흰 버튼 + 검은
   아이콘으로 뒤집어서 대비를 줍니다. */
.site.theme-default.dark-mode .image-replace-btn {
  background: #fff;
  color: #17161a;
  border-color: #e3e0de;
}
.site.theme-default.dark-mode .image-replace-btn .ui-icon {
  filter: brightness(0) !important;
}

/* profile click reactions */
.profile-reaction-layer {
  position: absolute;
  inset: 0;
  z-index: 12;
  pointer-events: none;
}
.profile-reaction-hotspot {
  position: absolute;
  border: 0;
  background: transparent;
  padding: 0;
  pointer-events: auto;
  cursor: pointer;
  border-radius: 10px;
}
.site.editing .profile-reaction-hotspot {
  border: 1px dashed color-mix(in srgb, var(--c, #999) 72%, #fff);
  background: color-mix(in srgb, var(--c, #999) 8%, transparent);
}
.profile-heart-toggle {
  position: absolute;
  z-index: 18;
  right: 4%;
  top: 5%;
  width: 38px;
  height: 38px;
  border-radius: 50%;
  border: 1px solid color-mix(in srgb, var(--c, #999) 34%, #fff);
  background: rgba(255, 255, 255, 0.86);
  color: var(--c, #999);
  display: grid;
  place-items: center;
  font-size: 20px;
  line-height: 1;
  cursor: pointer;
  box-shadow: 0 7px 22px rgba(30, 24, 28, 0.1);
  backdrop-filter: blur(8px);
}
.profile-heart-toggle.on {
  background: var(--c, #999);
  color: #fff;
  border-color: transparent;
  transform: scale(1.06);
}
.profile-reaction-bubble {
  position: absolute;
  z-index: 17;
  left: 50%;
  top: 7%;
  max-width: min(72%, 420px);
  padding: 11px 15px;
  border-radius: 15px 15px 15px 4px;
  background: rgba(255, 255, 255, 0.94);
  border: 1px solid color-mix(in srgb, var(--c, #999) 28%, #ddd);
  color: #3e373b;
  font:
    600 10px/1.55 "Noto Sans KR",
    sans-serif;
  box-shadow: 0 12px 34px rgba(38, 30, 34, 0.14);
  opacity: 0;
  pointer-events: none;
  transform: translate(-50%, -8px);
  transition: 0.18s ease;
}
.profile-reaction-bubble.show {
  opacity: 1;
  transform: translate(-50%, 0);
}
.profile-reaction-select-overlay {
  position: absolute;
  z-index: 40;
  inset: 0;
  background: rgba(15, 13, 16, 0.08);
  cursor: crosshair;
  touch-action: none;
}
.profile-reaction-select-hint,
.area-select-hint {
  z-index: 5;
  width: max-content;
  max-width: calc(100% - 24px);
  border-radius: 999px;
  /* v0.3.330 — 사용자 요청: 스킨/다크모드/배경 설정과 상관없이 이 안내
     말풍선은 항상 검정 배경 + 흰 글씨로 고정. .site-view 직계 자식 전부를
     대상으로 하는 배경 강제 규칙들에도 안 뚫리도록 !important. */
  background: #171519 !important;
  color: #fff !important;
  padding: 8px 12px;
  font:
    700 8px/1.2 "Noto Sans KR",
    sans-serif;
  box-shadow: 0 8px 24px rgba(0, 0, 0, 0.18);
  pointer-events: none;
}
.profile-reaction-select-hint {
  position: sticky;
  top: 10px;
  margin: 10px auto;
}
/* v0.3.326 — 이 힌트는 이제 화면 전체 크기 오버레이가 아니라 .site-view의
   일반 흐름 자식이라, position:sticky만으로는 .home-page 등 본문 높이만큼
   아래로 밀려 화면 밖에 나타났습니다. .site-view 기준으로 바로 고정하고,
   편집 모드 안내 배너(.edit-hint, z-index:55)에 가리지 않도록 그보다 높입니다. */
.area-select-hint {
  position: absolute;
  z-index: 60;
  top: 10px;
  left: 50%;
  transform: translateX(-50%);
}
.profile-reaction-select-box,
.area-select-box {
  position: absolute;
  border: 2px solid #ff6f98;
  background: rgba(255, 111, 152, 0.13);
  border-radius: 9px;
  box-shadow: 0 0 0 1px rgba(255, 255, 255, 0.8) inset;
}
.reaction-editor-list {
  display: grid;
  gap: 9px;
}
.reaction-editor-card {
  border: 1px solid #343139;
  background: #19181d;
  border-radius: 10px;
  padding: 9px;
}
.reaction-editor-card > header {
  display: grid;
  grid-template-columns: minmax(0, 1fr) 30px 30px;
  gap: 6px;
  align-items: center;
}
.reaction-editor-card header .grow {
  min-width: 0;
}
.reaction-editor-card header small {
  display: block;
  font-size: 6px;
  letter-spacing: 0.14em;
  color: #78727e;
  margin-bottom: 3px;
}
.reaction-editor-card header input {
  width: 100%;
  background: #242228;
  border: 1px solid #37333b;
  border-radius: 6px;
  color: #eee;
  padding: 6px 7px;
  font-size: 8px;
}
.reaction-rect-values {
  display: flex;
  gap: 5px;
  flex-wrap: wrap;
  margin: 7px 0;
}
.reaction-rect-values span {
  border-radius: 999px;
  background: #262329;
  color: #918c97;
  padding: 4px 6px;
  font:
    600 6px/1 ui-monospace,
    monospace;
}

/* easter eggs */
/* v0.3.326 — 원래 이 범위 표시 상자들은 .easter-hotspot-layer라는, 화면 전체를
   덮는 inset:0 래퍼 안에 들어있었습니다. z-index 값을 바꿔도(v0.3.325) 페이지에
   따라 그 래퍼 자체의 존재만으로 브라우저 컴포지팅이 깨져 화면 전체가 안
   그려지는 문제가 재현됐습니다(레이아웃·CSS 계산값은 정상, 순수 페인트 실패).
   화면 전체 크기 래퍼 없이, 상자들을 각 페이지 루트(.home-page 등)의 형제로
   바로 두는 것만으로 모든 페이지에서 문제가 사라졌습니다 — 이 상자들은
   position:absolute라 어차피 .site-view 기준 퍼센트 좌표로 놓이고, 뒤에 오는
   형제라 z-index 없이도 DOM 순서만으로 페이지 콘텐츠 위에 뜹니다.
*/
.easter-hotspot {
  position: absolute;
  /* v0.3.328 — 사용자 리포트: 프로필의 캐릭터 사진(.profile-v4-art, z-index:4)처럼
     명시적 z-index를 쓰는 콘텐츠가 있는 페이지에서는, 이 상자가 z-index:auto라
     DOM 순서와 상관없이 그 콘텐츠 뒤로 깔렸습니다(명시적 z-index는 stacking
     context가 따로 안 갈리면 auto보다 항상 위에 옴). v0.3.326에서 z-index를
     아예 없앤 건 "화면 전체 크기 레이어"가 문제였던 것이지 작은 상자 자체엔
     문제가 없었으므로(체크리스트·갤러리 페이지에서 재확인 완료), 이 작은
     상자에는 안전하게 높은 z-index를 다시 줍니다. v0.3.329 — 배경 이미지/색
     통일 모드(.world-bg-override, .has-world-bg-image)의 ".site-view 직계
     자식 전부"를 대상으로 하는 규칙들에 이 상자도 같이 걸려서(.easter-hotspot도
     이제 .site-view의 직계 자식) z-index/background가 도로 덮였던 적이 있어
     (해당 규칙들엔 :not(.easter-hotspot)을 추가해뒀지만) 여기서도 !important로
     한 번 더 방어합니다. */
  z-index: 200 !important;
  pointer-events: none;
  border: 0;
  background: transparent;
  padding: 0;
  cursor: default;
}
.easter-hotspot.edit-visible {
  /* v0.3.327 — 사용자 요청: 범위 상자가 진한 실선급 테두리 때문에 뒤 내용을
     거의 가리는 느낌이라 테두리·배경 모두 10~20% 정도 투명도로 낮춤(라벨
     칩은 그대로 또렷하게 보여야 해서, 부모에 opacity를 걸지 않고 border/
     background의 색상 alpha만 낮췄습니다 — opacity였다면 아래 라벨 span도
     같이 흐려짐). v0.3.329 — .world-bg-override/.has-world-bg-image 모드의
     ".site-view 직계 자식 전부" 배경 강제 규칙에 이 상자도 같이 걸려 반투명
     배경이 불투명한 페이지 배경색으로 덮였던 적이 있어(해당 규칙들은
     :not(.easter-hotspot)으로 뺐지만) !important로 한 번 더 방어합니다. */
  border: 1px dashed rgba(255, 138, 173, 0.45) !important;
  background: rgba(255, 111, 152, 0.15) !important;
  border-radius: 7px;
}
.easter-hotspot.edit-visible span {
  position: absolute;
  left: 4px;
  top: 4px;
  background: #241b21;
  color: #ffabc2;
  border-radius: 5px;
  padding: 4px 6px;
  font:
    700 6px/1 "Noto Sans KR",
    sans-serif;
  white-space: nowrap;
}

.easter-hover-text {
  font: inherit;
  color: inherit;
  letter-spacing: inherit;
  line-height: inherit;
  text-decoration: inherit;
  cursor: inherit;
  transition: opacity 0.12s ease;
}
.easter-hover-text.edit-visible {
  outline: 1px dashed rgba(255, 138, 173, 0.72);
  outline-offset: 2px;
  border-radius: 2px;
}
.easter-text-select-active {
  cursor: text;
}
.easter-text-select-active,
.easter-text-select-active * {
  user-select: text !important;
  -webkit-user-select: text !important;
}
.easter-text-select-hint {
  position: fixed;
  z-index: 420;
  left: 50%;
  top: 18px;
  transform: translateX(-50%);
  max-width: calc(100vw - 28px);
  padding: 9px 13px;
  border: 1px solid rgba(255, 138, 173, 0.48);
  border-radius: 999px;
  background: rgba(27, 23, 29, 0.94);
  color: #ffd7e3;
  box-shadow: 0 10px 28px rgba(0, 0, 0, 0.2);
  font: 700 10px/1.2 "Noto Sans KR", sans-serif;
  white-space: nowrap;
  pointer-events: none;
}

/* v0.3.326 — 예전엔 .area-select-overlay(화면 전체를 덮는 별도 inset:0 레이어,
   z-index:150)를 새로 만들어 그 위에 배경 틴트 + 커서를 걸었는데, 이 화면
   전체 크기 레이어 자체가 드래그 도중 페이지 전체가 안 그려지는 문제를
   일으켰습니다(easter-hotspot-layer와 같은 원인). 새 레이어 없이 이미 있는
   .site-view에 클래스만 얹어 배경·커서를 바로 적용합니다.
*/
.site-view.easter-area-selecting {
  background: rgba(16, 14, 18, 0.08);
  cursor: crosshair;
  touch-action: none;
}
.easter-editor-card {
  border: 1px solid #302e34;
  border-radius: 10px;
  background: #18171b;
  padding: 4px;
  margin-bottom: 7px;
}
.easter-area-readout {
  padding: 2px 9px 7px;
  color: #6f6a75;
  font:
    600 6px/1.4 ui-monospace,
    monospace;
}
.easter-popup-back {
  position: fixed;
  z-index: 300;
  inset: 0;
  display: grid;
  place-items: center;
  padding: 20px;
  background: rgba(12, 11, 14, 0.66);
  backdrop-filter: blur(10px);
}
.easter-popup {
  width: min(520px, 92vw);
  max-height: 82dvh;
  overflow: auto;
  border-radius: 22px;
  background: #fbfaf8;
  color: #2b2729;
  padding: 28px;
  box-shadow: 0 32px 100px rgba(0, 0, 0, 0.35);
  text-align: center;
}
.easter-popup > img {
  display: block;
  max-width: 100%;
  max-height: 360px;
  object-fit: contain;
  margin: 0 auto 20px;
  border-radius: 14px;
}
.easter-popup small,
.secret-card small {
  font:
    700 7px/1 Arial,
    sans-serif;
  letter-spacing: 0.18em;
  color: #a09a9d;
}
.easter-popup small {
  color: var(--egg-color, #a09a9d);
}
.easter-popup h2 {
  margin: 8px 0 12px;
  font:
    600 28px/1.1 Georgia,
    "Noto Serif KR",
    serif;
}
.easter-popup p {
  white-space: normal;
  text-align: left;
  font:
    400 11px/1.8 "Noto Sans KR",
    sans-serif;
  color: #555;
}
.easter-popup button,
.secret-back,
.secret-card button {
  margin-top: 16px;
  border: 1px solid #d8d3d5;
  border-radius: 999px;
  background: #fff;
  padding: 9px 15px;
  font:
    700 8px/1 Arial,
    sans-serif;
  letter-spacing: 0.1em;
  cursor: pointer;
}
.secret-page {
  min-height: 100dvh;
  padding: 90px 20px 110px;
  display: grid;
  place-items: center;
  background: radial-gradient(
    circle at 50% 20%,
    color-mix(in srgb, var(--secret-accent) 14%, #fff),
    #f7f5f2 48%,
    #e9e5e1
  );
}
.secret-card {
  width: min(760px, 92vw);
  background: rgba(255, 255, 255, 0.86);
  border: 1px solid rgba(40, 35, 38, 0.13);
  border-radius: 26px;
  padding: clamp(24px, 5vw, 60px);
  box-shadow: 0 26px 90px rgba(49, 38, 43, 0.12);
}
.secret-card > img {
  display: block;
  max-width: 100%;
  max-height: 520px;
  object-fit: contain;
  margin: 0 auto 30px;
  border-radius: 18px;
}
.secret-card h1 {
  margin: 10px 0 18px;
  font:
    600 clamp(38px, 7vw, 82px)/0.95 Georgia,
    "Noto Serif KR",
    serif;
}
.secret-card p {
  font:
    400 12px/1.9 "Noto Sans KR",
    sans-serif;
  color: #50494c;
}
.secret-back {
  position: fixed;
  z-index: 2;
  left: 20px;
  top: 70px;
  margin: 0;
}

@media (max-width: 720px) {
  .range-control {
    grid-template-columns: minmax(0, 1fr) 68px;
  }
  .range-number {
    width: 68px !important;
  }
  .profile-heart-toggle {
    width: 34px;
    height: 34px;
    font-size: 18px;
  }
  .profile-reaction-bubble {
    max-width: 78%;
    font-size: 9px;
  }
  .secret-back {
    top: 62px;
    left: 12px;
  }
}

/* v0.3.27 — widget collision: art/cards/cover logo stay fixed; pair branding moves only when overlapped */
:root {
  --world-bg: #f4f2ef;
}
.site {
  background: var(--world-bg, #0d0d0f);
}
.top-left-stack {
  display: flex;
  align-items: center;
  gap: 10px;
  pointer-events: auto;
}
.au-switcher {
  position: relative;
  mix-blend-mode: normal;
}
.au-switch-button {
  height: 32px;
  display: flex;
  align-items: center;
  gap: 6px;
  padding: 0 10px;
  border: 1px solid rgba(255, 255, 255, 0.35);
  border-radius: 999px;
  background: rgba(10, 10, 12, 0.38);
  backdrop-filter: blur(12px);
  color: #fff;
  box-shadow: 0 5px 18px rgba(0, 0, 0, 0.12);
}
.au-switch-button small {
  font:
    700 6px/1 Arial,
    sans-serif;
  letter-spacing: 0.13em;
  opacity: 0.58;
}
.au-switch-button b {
  font:
    700 9px/1 Arial,
    sans-serif;
  letter-spacing: 0.08em;
}
.au-switch-button i {
  font-style: normal;
  font-size: 10px;
  opacity: 0.65;
}
.au-switch-menu {
  position: absolute;
  left: 0;
  top: 38px;
  min-width: 150px;
  padding: 5px;
  border-radius: 12px;
  background: rgba(22, 22, 25, 0.94);
  border: 1px solid rgba(255, 255, 255, 0.12);
  box-shadow: 0 18px 42px rgba(0, 0, 0, 0.25);
  opacity: 0;
  visibility: hidden;
  transform: translateY(-5px);
  transition: 0.16s;
  display: grid;
  gap: 3px;
}
.au-switcher.open .au-switch-menu {
  opacity: 1;
  visibility: visible;
  transform: none;
}
.au-switch-menu button {
  border: 0;
  border-radius: 8px;
  background: transparent;
  color: #d6d4da;
  padding: 9px 10px;
  text-align: left;
  font:
    700 9px/1 Arial,
    sans-serif;
  letter-spacing: 0.05em;
}
.au-switch-menu button:hover,
.au-switch-menu button.on {
  background: #f0eef2;
  color: #17161a;
}
.bgm-toggle.on {
  background: #fff;
  color: #111;
  border-color: #fff;
  box-shadow: 0 0 0 3px rgba(255, 255, 255, 0.12);
}
.global-bgm-frame {
  position: fixed !important;
  width: 240px !important;
  height: 240px !important;
  left: -10000px !important;
  top: 0 !important;
  opacity: 0.001 !important;
  pointer-events: none !important;
  border: 0 !important;
}
.global-bgm-audio {
  position: fixed !important;
  width: 1px !important;
  height: 1px !important;
  left: -9999px !important;
  bottom: -9999px !important;
  opacity: 0 !important;
  pointer-events: none !important;
}

/* only elements that actually collide are moved by JS; no blanket shifts */
.home-page {
  --home-info-shift-y: 0px !important;
  --home-pair-shift-y: 0px !important;
}
.home-page .hero-copy,
.home-page .edge-keywords,
.home-page .pair-core,
.home-page .student-id-card,
.home-page .hero-layer-art img {
  translate: 0 0;
  transition:
    translate 0.22s ease,
    transform 0.22s ease;
}
/* v0.3.123 — 위젯 충돌 회피(scheduleHomeWidgetCollisionPasses)는 이미지/폰트 로딩 등에
   맞춰 최대 8번 넘게 다시 계산합니다. 계산할 때마다 값이 바뀌면 위 0.22s 트랜지션 때문에
   매번 다시 슬라이드 애니메이션이 걸려서, 사용자 표현으로 "띠용띠용띠용" 여러 번
   움직이다 멈추는 것처럼 보였습니다. 회피 이동 자체는 그대로 두되(여러 번 재계산하는
   로직은 정확성을 위해 필요), 이 세 요소만 애니메이션 없이 바로 최종 위치로 스냅되도록
   transition을 제거합니다. student-id-card/hero-layer-art img는 충돌 회피 대상이
   아니라(카드 뒤집기 등 다른 용도) 그대로 둡니다. */
.home-page .hero-copy,
.home-page .edge-keywords,
.home-page .pair-core {
  transition: none;
}
.widget-pos-top-left,
.widget-pos-top-right,
.widget-pos-bottom-left,
.widget-pos-bottom-right,
.widget-pos-middle-left,
.widget-pos-middle-right,
.widget-pos-middle-center,
.widget-pos-bottom-center {
  --home-info-shift-y: 0px !important;
  --home-pair-shift-y: 0px !important;
}

/* school AU */
.site.world-au-school {
  --paper: #eef8ff;
  --paper2: #fafdff;
  color: #17364e;
}
.home-page.world-au-school {
  color: #18354c;
  background:
    radial-gradient(circle at 18% 18%, rgba(255, 255, 255, 0.94), transparent 31%),
    radial-gradient(circle at 82% 72%, rgba(132, 204, 244, 0.26), transparent 33%),
    linear-gradient(135deg, #f6fbff 0%, #dff2ff 48%, #edf8ff 100%);
}
.home-page.world-au-school:before {
  opacity: 0.32;
  background-image:
    linear-gradient(rgba(104, 170, 207, 0.1) 1px, transparent 1px),
    linear-gradient(90deg, rgba(104, 170, 207, 0.1) 1px, transparent 1px);
  background-size: 28px 28px;
  mix-blend-mode: multiply;
}
.home-page.world-au-school:after {
  inset: 7% 6%;
  border-color: rgba(67, 135, 174, 0.1);
  transform: none;
  border-radius: 36px;
}
.world-au-school .hero-kicker,
.world-au-school .hero-subname,
.world-au-school .pair-kicker,
.world-au-school .pair-desc {
  color: #4f7792;
  opacity: 1;
}
.world-au-school .hero-name,
.world-au-school .pair-title {
  color: #173f5c;
  text-shadow: none;
}
.world-au-school .edge-keyword {
  box-shadow: 0 8px 24px color-mix(in srgb, var(--c), transparent 76%);
}
.world-au-school .site-bottom-dock {
  background: rgba(26, 61, 86, 0.78);
  border-color: rgba(255, 255, 255, 0.45);
}
.site.world-au-school .inner-page,
.site.world-au-school .roster-page,
.site.world-au-school .dday-page {
  background: linear-gradient(145deg, #f8fcff, #eaf7ff);
}
.site.world-au-school .profile-info {
  background: rgba(251, 254, 255, 0.9);
}

.school-card-stage {
  position: absolute;
  z-index: 8;
  inset: 64px 12vw 76px;
  display: flex;
  align-items: center;
  justify-content: center;
  gap: clamp(24px, 5vw, 84px);
  perspective: 1600px;
  pointer-events: none;
}
.student-id-card {
  position: relative;
  width: min(25.5vw, 370px);
  aspect-ratio: 685/1061;
  padding: 0;
  border: 0;
  background: none;
  border-radius: 28px;
  perspective: 1400px;
  pointer-events: auto;
  filter: drop-shadow(0 28px 34px rgba(39, 92, 124, 0.22));
  transition: transform 0.22s ease;
}
.student-id-card:hover {
  transform: translateY(-8px) rotate(-0.5deg);
}
.student-id-card.card-b:hover {
  transform: translateY(-8px) rotate(0.5deg);
}
.student-id-inner {
  position: absolute;
  inset: 0;
  display: block;
  transform-style: preserve-3d;
  transition: transform 0.72s cubic-bezier(0.2, 0.7, 0.2, 1);
}
.student-id-card.flipped .student-id-inner {
  transform: rotateY(180deg);
}
.student-id-face {
  position: absolute;
  inset: 0;
  display: block;
  border-radius: 26px;
  overflow: hidden;
  backface-visibility: hidden;
  background: #fff;
  border: 1px solid rgba(74, 142, 180, 0.2);
}
.student-id-face.back {
  transform: rotateY(180deg);
}
.student-id-face > img {
  width: 100%;
  height: 100%;
  display: block;
  /* v0.3.341 — object-fit:cover였던 탓에 확대(휠) 전에도 카드 프레임이 이미 이미지
     테두리를 잘라서 보여줬음(v0.3.334의 세계관 이미지와 같은 문제). 기본은 원본
     전체가 보이는 contain으로 두고, 사용자가 실제로 --img-scale을 키울 때만
     .student-id-face의 overflow:hidden이 넘치는 부분을 잘라내도록 통일. 카드
     얼굴 배경이 이미 흰색(.student-id-face)이라 여백은 그 흰 배경이 그대로
     비쳐 보이면 됩니다(따로 배경색 지정 안 함). */
  object-fit: contain;
}
.student-id-fallback {
  position: absolute;
  inset: 0;
  display: grid;
  place-items: center;
  align-content: center;
  gap: 16px;
  background: linear-gradient(155deg, #eaf8ff, #fff);
  color: #1d4865;
}
.student-id-fallback img {
  width: 54%;
  aspect-ratio: 1;
  object-fit: cover;
  border-radius: 22px;
}
.student-id-fallback b {
  font:
    800 28px/1.1 Arial,
    sans-serif;
}
.student-id-fallback small {
  letter-spacing: 0.18em;
}
.mode-cards .hero-info-half {
  z-index: 10;
}
.mode-cards .pair-core {
  z-index: 12;
  bottom: 9%;
}
.mode-cards .hero-copy {
  top: 17%;
  width: 25%;
  min-width: 220px;
}
.mode-cards .edge-keywords {
  bottom: 17%;
}

/* timeline/name chips: color marker instead of face portrait */
.timeline-people span > i.timeline-color-dot {
  width: 9px !important;
  height: 9px !important;
  min-width: 9px !important;
  border-radius: 50% !important;
  background: var(--c) !important;
  border: 2px solid color-mix(in srgb, var(--c), white 60%) !important;
  box-shadow: 0 0 0 1px color-mix(in srgb, var(--c), black 12%) !important;
  overflow: hidden !important;
}
.timeline-people span > i.timeline-color-dot img {
  display: none !important;
}

/* AU/BGM editor */
.world-badge {
  display: inline-flex;
  align-items: center;
  border: 1px solid #3c3941;
  border-radius: 999px;
  background: #242229;
  color: #aaa5b0;
  padding: 5px 8px;
  margin: 0 0 9px;
  font:
    700 7px/1 Arial,
    sans-serif;
  letter-spacing: 0.13em;
}
.au-admin-list {
  display: grid;
  grid-template-columns: 1fr 1fr;
  gap: 6px;
}
.au-admin-list button {
  border: 1px solid #302e35;
  border-radius: 10px;
  background: #1b1a1e;
  color: #aaa6ad;
  padding: 10px;
  text-align: left;
}
.au-admin-list button b,
.au-admin-list button small {
  display: block;
}
.au-admin-list button b {
  font-size: 10px;
  color: #f0edf2;
}
.au-admin-list button small {
  font-size: 7px;
  margin-top: 4px;
}
.au-admin-list button.on {
  border-color: #eee;
  background: #f2f1f3;
}
.au-admin-list button.on b {
  color: #151418;
}
.au-admin-list button.on small {
  color: #6f6974;
}
.au-admin-item {
  position: relative;
}
.au-admin-item button[data-admin-au] {
  width: 100%;
}
.au-admin-item .au-admin-delete {
  position: absolute;
  top: 6px;
  right: 6px;
  width: 18px;
  height: 18px;
  padding: 0;
  display: grid;
  place-items: center;
}
.sub-editor-title {
  margin: 14px 0 6px;
  font-size: 8px;
  letter-spacing: 0.12em;
  color: #88838c;
}
.au-head-row {
  display: grid;
  grid-template-columns: 1fr 38px auto;
  align-items: center;
  gap: 7px;
  padding: 7px 0;
  border-top: 1px solid #2c2a30;
}
.au-head-row > span {
  font-size: 9px;
}
.au-head-row .elist-avatar {
  width: 36px;
  height: 36px;
}
.au-card-editor {
  border: 1px solid #302e34;
  background: #1b1a1f;
  border-radius: 11px;
  padding: 8px;
  margin-top: 8px;
}
.au-card-editor header {
  display: flex;
  align-items: center;
  gap: 8px;
  margin-bottom: 8px;
}
.au-card-editor header > div:last-child {
  display: grid;
}
.au-card-editor small {
  font-size: 7px;
  color: #77727e;
}
.page-bgm-row {
  display: grid;
  grid-template-columns: 54px minmax(0, 1fr) 28px;
  gap: 6px;
  align-items: center;
  padding: 6px 0;
  border-top: 1px solid #2b2930;
}
.page-bgm-row b {
  font-size: 8px;
  color: #b7b2bb;
}
.page-bgm-row input {
  width: 100%;
  min-width: 0;
  border: 1px solid #35323a;
  background: #201e24;
  color: #eee;
  border-radius: 7px;
  padding: 7px 8px;
  font-size: 8px;
  outline: none;
}
.page-bgm-row input:focus {
  border-color: #716b77;
}

@media (max-width: 900px) {
  .top-left-stack {
    gap: 6px;
  }
  .au-switch-button small {
    display: none;
  }
  .au-switch-menu {
    min-width: 130px;
  }
  .school-card-stage {
    inset: 72px 5vw 118px;
    gap: 18px;
  }
  .student-id-card {
    width: min(39vw, 330px);
  }
  .mode-cards .hero-copy {
    top: 11%;
    width: 32%;
    min-width: 160px;
    opacity: 0.75;
  }
  .mode-cards .edge-keywords {
    bottom: 15%;
  }
}
@media (max-width: 620px) {
  .site-topbar {
    padding: 0 10px;
  }
  .site-brand > span:last-child {
    display: none;
  }
  .au-switch-button {
    padding: 0 8px;
  }
  .school-card-stage {
    inset: 95px 3vw 110px;
    gap: 10px;
  }
  .student-id-card {
    width: 43vw;
    border-radius: 18px;
  }
  .student-id-face {
    border-radius: 17px;
  }
  .mode-cards .hero-copy {
    display: none;
  }
  .mode-cards .edge-keywords {
    display: none;
  }
  .mode-cards .pair-core {
    bottom: 12%;
    width: 76vw;
  }
}

/* v0.3.25: admin rail stays visually stable while switching editor tabs */
.editor-drawer {
  animation: none !important;
}

/* v0.3.26 · explicit BGM state */
.bgm-toggle {
  width: auto !important;
  min-width: 74px !important;
  padding: 0 10px !important;
  display: flex !important;
  align-items: center !important;
  justify-content: center !important;
  gap: 6px !important;
  font-weight: 800;
  letter-spacing: 0.08em;
}
.bgm-toggle .bgm-symbol {
  font-size: 13px;
  line-height: 1;
}
.bgm-toggle .bgm-state {
  font-size: 9px;
  line-height: 1;
}
.bgm-toggle:not(.on) {
  background: rgba(8, 8, 9, 0.32);
  color: rgba(255, 255, 255, 0.68);
}
.main-copy-editor {
  border: 1px solid rgba(20, 20, 20, 0.1);
  border-radius: 14px;
  padding: 10px;
  margin-top: 9px;
  background: rgba(255, 255, 255, 0.52);
}
.main-copy-editor header {
  display: flex;
  align-items: baseline;
  justify-content: space-between;
  margin-bottom: 8px;
}
.main-copy-editor header small {
  font-size: 8px;
  letter-spacing: 0.12em;
  color: #888;
}
.main-copy-editor header b {
  font-size: 12px;
}
@media (max-width: 700px) {
  .bgm-toggle {
    min-width: 64px !important;
    padding: 0 8px !important;
  }
  .bgm-toggle .bgm-state {
    font-size: 8px;
  }
}

/* v0.3.29 · BGM hover volume */
.bgm-control {
  position: relative;
  display: flex;
  align-items: center;
  justify-content: center;
}
.bgm-volume-popover {
  position: absolute;
  right: 0;
  top: calc(100% + 9px);
  width: 178px;
  padding: 10px 11px;
  border: 1px solid rgba(255, 255, 255, 0.16);
  border-radius: 12px;
  background: rgba(18, 18, 21, 0.94);
  backdrop-filter: blur(16px);
  box-shadow: 0 15px 38px rgba(0, 0, 0, 0.28);
  display: grid;
  grid-template-columns: auto 1fr 28px;
  align-items: center;
  gap: 8px;
  color: #fff;
  opacity: 0;
  visibility: hidden;
  transform: translateY(-5px);
  pointer-events: none;
  transition:
    opacity 0.14s ease,
    transform 0.14s ease,
    visibility 0.14s;
  z-index: 999;
}
.bgm-control:hover .bgm-volume-popover,
.bgm-control:focus-within .bgm-volume-popover {
  opacity: 1;
  visibility: visible;
  transform: none;
  pointer-events: auto;
}
.bgm-volume-popover:before {
  content: "";
  position: absolute;
  right: 24px;
  top: -5px;
  width: 9px;
  height: 9px;
  background: rgba(18, 18, 21, 0.94);
  border-left: 1px solid rgba(255, 255, 255, 0.16);
  border-top: 1px solid rgba(255, 255, 255, 0.16);
  transform: rotate(45deg);
}
.bgm-volume-popover span {
  font:
    700 7px/1 Arial,
    sans-serif;
  letter-spacing: 0.13em;
  color: #aaa5af;
}
.bgm-volume-popover b {
  font:
    700 8px/1 Arial,
    sans-serif;
  text-align: right;
  color: #f4f1f6;
}
.bgm-volume-popover input[type="range"] {
  appearance: none;
  -webkit-appearance: none;
  width: 100%;
  height: 3px;
  border-radius: 999px;
  background: rgba(255, 255, 255, 0.22);
  outline: 0;
  cursor: pointer;
}
.bgm-volume-popover input[type="range"]::-webkit-slider-thumb {
  -webkit-appearance: none;
  width: 12px;
  height: 12px;
  border-radius: 50%;
  background: #fff;
  border: 0;
  box-shadow: 0 1px 5px rgba(0, 0, 0, 0.35);
}
.bgm-volume-popover input[type="range"]::-moz-range-thumb {
  width: 12px;
  height: 12px;
  border-radius: 50%;
  background: #fff;
  border: 0;
  box-shadow: 0 1px 5px rgba(0, 0, 0, 0.35);
}
@media (max-width: 700px) {
  .bgm-volume-popover {
    right: -2px;
    width: 164px;
  }
  .bgm-control:active .bgm-volume-popover {
    opacity: 1;
    visibility: visible;
    transform: none;
    pointer-events: auto;
  }
}

/* v0.3.30 · BGM ON indicator motion */
@keyframes lopeBgmNoteDance {
  0%,
  100% {
    transform: translateY(0) rotate(0deg) scale(1);
  }
  20% {
    transform: translateY(-2px) rotate(-10deg) scale(1.06);
  }
  45% {
    transform: translateY(1px) rotate(8deg) scale(0.98);
  }
  70% {
    transform: translateY(-1px) rotate(-5deg) scale(1.04);
  }
}
.bgm-toggle .bgm-symbol {
  display: inline-block;
  transform-origin: 50% 70%;
}
.bgm-toggle.on .bgm-symbol {
  animation: lopeBgmNoteDance 0.8s ease-in-out infinite;
}
.bgm-toggle:not(.on) .bgm-symbol {
  animation: none;
}
@media (prefers-reduced-motion: reduce) {
  .bgm-toggle.on .bgm-symbol {
    animation: none;
  }
}

/* v0.3.31 · keep BGM volume control reachable while moving the pointer */
.bgm-volume-popover::after {
  content: "";
  position: absolute;
  left: 0;
  right: 0;
  top: -14px;
  height: 16px;
  background: transparent;
}
.bgm-control:hover .bgm-volume-popover,
.bgm-control:focus-within .bgm-volume-popover,
.bgm-volume-popover:hover {
  opacity: 1;
  visibility: visible;
  transform: none;
  pointer-events: auto;
}

/* =========================================================
   lope v0.3.32 — real custom dropdown UI + sticky list preview
   ========================================================= */
/* Native <select> stays in the DOM for data/event compatibility,
   but the visible control/menu is fully custom so it does not look
   like a Windows system dropdown. */
.lope-select {
  position: relative;
  width: 100%;
  min-width: 0;
}
.lope-select-native {
  position: absolute !important;
  left: 0 !important;
  top: 0 !important;
  width: 1px !important;
  height: 1px !important;
  opacity: 0 !important;
  pointer-events: none !important;
  margin: 0 !important;
  padding: 0 !important;
  border: 0 !important;
}
.lope-select-control {
  width: 100%;
  min-height: 40px;
  border: 1px solid transparent;
  border-radius: 12px;
  padding: 0 8px 0 12px;
  display: grid;
  grid-template-columns: minmax(0, 1fr) 28px;
  align-items: center;
  gap: 8px;
  text-align: left;
  cursor: pointer;
  transition:
    border-color 0.16s ease,
    background 0.16s ease,
    box-shadow 0.16s ease,
    transform 0.12s ease;
}
.lope-select-control:active {
  transform: translateY(1px);
}
.lope-select-text {
  display: block;
  min-width: 0;
  overflow: hidden;
  text-overflow: ellipsis;
  white-space: nowrap;
  font-size: 11px;
  font-weight: 650;
  letter-spacing: 0.01em;
}
.lope-select-chevron {
  width: 24px;
  height: 24px;
  border-radius: 8px;
  display: grid;
  place-items: center;
  transition:
    transform 0.2s cubic-bezier(0.2, 0.8, 0.2, 1),
    background 0.16s ease;
}
.lope-select-chevron span {
  display: block;
  width: 7px;
  height: 7px;
  border-right: 1.5px solid currentColor;
  border-bottom: 1.5px solid currentColor;
  transform: translateY(-2px) rotate(45deg);
}
.lope-select.open .lope-select-chevron {
  transform: rotate(180deg);
}
.lope-select-menu {
  position: fixed;
  z-index: 290;
  padding: 6px;
  overflow: auto;
  overscroll-behavior: contain;
  border-radius: 14px;
  opacity: 0;
  visibility: hidden;
  pointer-events: none;
  transform: translateY(-6px) scale(0.985);
  transform-origin: top center;
  transition:
    opacity 0.14s ease,
    transform 0.18s cubic-bezier(0.2, 0.8, 0.2, 1),
    visibility 0.14s;
  scrollbar-width: thin;
}
.lope-select.opens-up .lope-select-menu {
  transform: translateY(6px) scale(0.985);
  transform-origin: bottom center;
}
.lope-select.open .lope-select-menu {
  opacity: 1;
  visibility: visible;
  pointer-events: auto;
  transform: translateY(0) scale(1);
}
.lope-select-option {
  width: 100%;
  min-height: 36px;
  border: 0;
  border-radius: 9px;
  background: transparent;
  display: grid;
  grid-template-columns: minmax(0, 1fr) 20px;
  align-items: center;
  gap: 8px;
  padding: 7px 9px;
  text-align: left;
  cursor: pointer;
  transition:
    background 0.12s ease,
    color 0.12s ease;
}
.lope-select-option > span {
  overflow: hidden;
  text-overflow: ellipsis;
  white-space: nowrap;
  font-size: 10px;
  font-weight: 600;
}
.lope-select-option > i {
  font-style: normal;
  text-align: center;
  opacity: 0;
  transform: scale(0.7);
  transition: 0.12s ease;
}
.lope-select-option.selected > i {
  opacity: 1;
  transform: scale(1);
}
.lope-select-option:disabled {
  opacity: 0.35;
  cursor: not-allowed;
}
/* editor dark version */
.lope-select.theme-dark .lope-select-control {
  background: #29282e;
  border-color: #3b3941;
  color: #f4f3f7;
  box-shadow:
    inset 0 1px 0 rgba(255, 255, 255, 0.045),
    0 5px 14px rgba(0, 0, 0, 0.08);
}
.lope-select.theme-dark .lope-select-control:hover,
.lope-select.theme-dark.open .lope-select-control {
  background: #302f36;
  border-color: #55515d;
  box-shadow:
    inset 0 1px 0 rgba(255, 255, 255, 0.06),
    0 7px 18px rgba(0, 0, 0, 0.16);
}
.lope-select.theme-dark .lope-select-chevron {
  background: #17161a;
  color: #aaa6b1;
  border: 1px solid #38353e;
}
.lope-select.theme-dark.open .lope-select-chevron {
  background: #f0eef3;
  color: #222126;
  border-color: #f0eef3;
}
.lope-select.theme-dark .lope-select-menu {
  background: rgba(29, 28, 33, 0.97);
  border: 1px solid #45424b;
  box-shadow:
    0 18px 45px rgba(0, 0, 0, 0.38),
    inset 0 1px 0 rgba(255, 255, 255, 0.045);
  backdrop-filter: blur(18px);
  color: #ebe9ef;
}
.lope-select.theme-dark .lope-select-option {
  color: #9b98a3;
}
.lope-select.theme-dark .lope-select-option:hover,
.lope-select.theme-dark .lope-select-option.selected {
  background: #37343d;
  color: #fff;
}
.lope-select.theme-dark .lope-select-option.selected {
  box-shadow: inset 2px 0 0 #f1eef5;
}
/* public/modal light version */
.lope-select.theme-light .lope-select-control {
  background: #fff;
  border-color: #dedad4;
  color: #262427;
  box-shadow:
    inset 0 1px 0 #fff,
    0 4px 12px rgba(37, 31, 27, 0.055);
}
.lope-select.theme-light .lope-select-control:hover,
.lope-select.theme-light.open .lope-select-control {
  border-color: #bcb5ad;
  background: #fff;
  box-shadow: 0 7px 20px rgba(37, 31, 27, 0.09);
}
.lope-select.theme-light .lope-select-chevron {
  background: #efebe6;
  color: #6c6660;
  border: 1px solid #ded7d0;
}
.lope-select.theme-light.open .lope-select-chevron {
  background: #2a2828;
  color: #fff;
  border-color: #2a2828;
}
.lope-select.theme-light .lope-select-menu {
  background: rgba(255, 253, 250, 0.98);
  border: 1px solid #ded8d0;
  box-shadow:
    0 18px 42px rgba(49, 39, 31, 0.16),
    inset 0 1px 0 #fff;
  backdrop-filter: blur(18px);
  color: #2b2928;
}
.lope-select.theme-light .lope-select-option {
  color: #6c6660;
}
.lope-select.theme-light .lope-select-option:hover,
.lope-select.theme-light .lope-select-option.selected {
  background: #f0ece7;
  color: #1f1e1d;
}
.lope-select.theme-light .lope-select-option.selected {
  box-shadow: inset 2px 0 0 var(--accent, #8b788e);
}
.lope-select-menu::-webkit-scrollbar {
  width: 7px;
}
.lope-select-menu::-webkit-scrollbar-thumb {
  background: rgba(127, 121, 132, 0.35);
  border: 2px solid transparent;
  background-clip: padding-box;
  border-radius: 999px;
}
/* The old native-arrow decoration is irrelevant once enhanced. */
.lope-select-native {
  background-image: none !important;
}

/* LIST + OVERLAY timeline: the image preview becomes a true sticky panel.
   Titles keep scrolling while the preview stays beside them and changes on hover. */
@media (min-width: 721px) {
  .history-osmo-main-v8 {
    align-items: start !important;
  }
  .history-osmo-preview-v8 {
    position: sticky !important;
    top: clamp(94px, 12vh, 132px) !important;
    bottom: auto !important;
    align-self: start !important;
    height: min(68vh, 680px) !important;
    max-height: calc(100vh - 150px);
  }
  .history-osmo-preview-stack-v8 {
    height: 100% !important;
    min-height: 360px;
  }
}

/* =========================
   lope v0.3.33 — timeline crop / admin readability
   ========================= */
/* 관리자 설명/보조문구 가독성 */
.drawer-note {
  font-size: 12px !important;
  line-height: 1.72 !important;
  color: #aaa8b0 !important;
}
.efield label,
.mf > label {
  font-size: 11px !important;
  line-height: 1.45 !important;
}
.elist-row small {
  font-size: 10px !important;
  line-height: 1.45 !important;
  color: #9998a0 !important;
}
.modal-help {
  font-size: 11px !important;
  line-height: 1.65 !important;
  color: #8f8d96 !important;
}
.check-row span {
  font-size: 11px !important;
}
.drawer-current-title small {
  font-size: 9px !important;
}
.drawer-current-title h2 {
  font-size: 22px !important;
}

/* 타임라인 목록용 직접 크롭 */
.timeline-crop-field {
  margin-top: 12px;
}
.timeline-crop-editor {
  position: relative;
  width: min(320px, 100%);
  aspect-ratio: 3/4;
  margin: 8px auto 12px;
  overflow: hidden;
  border-radius: 14px;
  border: 1px solid #4a4950;
  background-color: #e8e6e1;
  background-image:
    linear-gradient(45deg, rgba(0, 0, 0, 0.035) 25%, transparent 25%),
    linear-gradient(-45deg, rgba(0, 0, 0, 0.035) 25%, transparent 25%),
    linear-gradient(45deg, transparent 75%, rgba(0, 0, 0, 0.035) 75%),
    linear-gradient(-45deg, transparent 75%, rgba(0, 0, 0, 0.035) 75%);
  background-size: 18px 18px;
  background-position:
    0 0,
    0 9px,
    9px -9px,
    -9px 0;
  touch-action: none;
  cursor: grab;
  box-shadow: inset 0 0 0 1px rgba(255, 255, 255, 0.35);
}
.timeline-crop-editor:active {
  cursor: grabbing;
}
.timeline-crop-editor:after {
  content: "LIST CROP";
  position: absolute;
  right: 8px;
  top: 8px;
  z-index: 3;
  padding: 5px 7px;
  border-radius: 999px;
  background: rgba(15, 15, 18, 0.72);
  color: #fff;
  font:
    700 8px/1 Arial,
    sans-serif;
  letter-spacing: 0.12em;
  pointer-events: none;
}
.timeline-crop-editor img {
  position: absolute;
  inset: 0;
  width: 100%;
  height: 100%;
  object-fit: contain;
  transform-origin: center center;
  user-select: none;
  pointer-events: none;
  will-change: transform;
}
.timeline-crop-empty {
  position: absolute;
  inset: 0;
  display: grid;
  place-items: center;
  text-align: center;
  padding: 24px;
  color: #777780;
  font-size: 11px;
  line-height: 1.6;
}
.timeline-crop-controls {
  display: grid;
  grid-template-columns: minmax(0, 1fr) auto;
  gap: 10px;
  align-items: end;
}
.timeline-crop-controls > label {
  display: grid;
  grid-template-columns: auto auto;
  gap: 6px 10px;
  align-items: center;
  color: #bab8c0;
  font-size: 11px;
}
.timeline-crop-controls input[type="range"] {
  grid-column: 1/-1;
  width: 100%;
}
.timeline-crop-controls output {
  justify-self: end;
  color: #fff;
  font-variant-numeric: tabular-nums;
}

/* 리스트에서 캐릭터 태그는 각 행 오른쪽 */
.history-osmo-title-item-v8 button {
  grid-template-columns: 42px minmax(0, 1fr) minmax(118px, auto) !important;
  align-items: center !important;
}
.history-osmo-row-side-v33 {
  display: flex;
  align-items: center;
  justify-content: flex-end;
  gap: 10px;
  min-width: 0;
}
.history-osmo-row-side-v33 .timeline-people {
  justify-content: flex-end;
  flex-wrap: wrap;
  margin: 0 !important;
  opacity: 0.82;
}
.history-osmo-row-side-v33 > em {
  font-style: normal;
  color: #9b9da0;
  font:
    500 16px/1 Georgia,
    serif;
  min-width: 22px;
  text-align: right;
}
.history-osmo-title-copy-v8 .timeline-people {
  margin-top: 0 !important;
}

/* 상세 오버레이는 목록 크롭값 무시 + 원본 전체 */
.history-osmo-overlay-media-v8 {
  height: auto !important;
  min-height: 0 !important;
  max-height: none !important;
  display: flex;
  justify-content: center;
  align-items: center;
  filter: drop-shadow(0 38px 75px rgba(0, 0, 0, 0.42));
}
.history-osmo-overlay-media-v8 img.history-full-image-v33,
.history-osmo-overlay-media-v8 > img {
  width: auto !important;
  max-width: 100% !important;
  height: auto !important;
  max-height: none !important;
  object-fit: contain !important;
  transform: none !important;
  border-radius: 6px;
  display: block;
}

@media (max-width: 760px) {
  .history-osmo-title-item-v8 button {
    grid-template-columns: 30px minmax(0, 1fr) !important;
    align-items: end !important;
  }
  .history-osmo-row-side-v33 {
    grid-column: 2;
    justify-content: flex-start;
    margin-top: 5px;
    flex-wrap: wrap;
  }
  .history-osmo-row-side-v33 .timeline-people {
    justify-content: flex-start;
  }
  .history-osmo-row-side-v33 > em {
    margin-left: auto;
  }
  .timeline-crop-editor {
    width: min(230px, 78vw);
  }
}

/* v0.3.36 OWNER */
.owner-page {
  min-height: 100%;
  padding: clamp(96px, 10vh, 132px) 24px 120px;
  color: #202020;
}
.owner-shell {
  width: min(820px, calc(100vw - 48px));
  margin: 0 auto;
}
.owner-head {
  text-align: center;
  padding: 24px 0 34px;
  border-bottom: 1px solid rgba(20, 20, 20, 0.12);
}
.owner-head small,
.owner-banner-title small {
  font-size: 10px;
  letter-spacing: 0.24em;
  color: #888;
}
.owner-head h1 {
  margin: 8px 0 4px;
  font-family: Georgia, "Times New Roman", serif;
  font-size: clamp(38px, 6vw, 72px);
  font-weight: 500;
  line-height: 1;
}
.owner-head p {
  margin: 10px 0 0;
  color: #777;
  font-size: 13px;
  letter-spacing: 0.08em;
}
.owner-profile-card {
  padding: 32px 0 8px;
  display: grid;
  gap: 10px;
}
.owner-section {
  display: grid;
  grid-template-columns: 118px 1fr;
  gap: 24px;
  padding: 21px 4px;
  border-bottom: 1px solid rgba(20, 20, 20, 0.1);
}
.owner-section > span {
  font-size: 10px;
  font-weight: 800;
  letter-spacing: 0.18em;
  color: var(--accent, #999);
}
.owner-section p {
  margin: 0;
  font-size: 14px;
  line-height: 1.85;
  white-space: normal;
  color: #3c3c3c;
}
.owner-ng p {
  color: #555;
}
.owner-banner-section {
  margin-top: 48px;
  padding: 28px;
  border: 1px solid rgba(20, 20, 20, 0.12);
  border-radius: 22px;
  background: rgba(255, 255, 255, 0.68);
  box-shadow: 0 16px 40px rgba(0, 0, 0, 0.04);
}
.owner-banner-title {
  display: flex;
  justify-content: space-between;
  gap: 24px;
  align-items: flex-end;
  margin-bottom: 22px;
}
.owner-banner-title h2 {
  font-family: Georgia, "Times New Roman", serif;
  font-size: 28px;
  font-weight: 500;
  margin: 4px 0 0;
}
.owner-banner-title > p {
  max-width: 360px;
  margin: 0;
  color: #777;
  font-size: 12px;
  line-height: 1.6;
  text-align: right;
}
.owner-banner-preview {
  min-height: 86px;
  display: flex;
  align-items: center;
  justify-content: center;
  padding: 16px;
  border-radius: 14px;
  background: repeating-conic-gradient(#f3f3f3 0 25%, #fff 0 50%) 50%/18px 18px;
  border: 1px solid #e4e4e4;
  overflow: hidden;
}
.owner-banner-preview img {
  display: block;
  max-width: 100%;
  max-height: 96px;
  object-fit: contain;
  image-rendering: auto;
}
.owner-banner-actions {
  display: flex;
  flex-wrap: wrap;
  gap: 8px;
  margin-top: 14px;
}
.owner-banner-actions button,
.owner-banner-actions a {
  appearance: none;
  border: 1px solid #d6d6d6;
  background: #fff;
  color: #222;
  border-radius: 999px;
  padding: 9px 14px;
  font: inherit;
  font-size: 12px;
  text-decoration: none;
  cursor: pointer;
  transition: 0.18s ease;
}
.owner-banner-actions button:hover,
.owner-banner-actions a:hover {
  border-color: var(--accent, #999);
  transform: translateY(-1px);
}
.owner-banner-code {
  display: block;
  margin-top: 14px;
  padding: 12px 14px;
  border-radius: 12px;
  background: #171717;
  color: #d8d8d8;
  font-size: 10px;
  line-height: 1.5;
  white-space: pre-wrap;
  overflow-wrap: anywhere;
  max-height: 92px;
  overflow: auto;
}
.owner-banner-empty {
  padding: 28px;
  border: 1px dashed #ccc;
  border-radius: 14px;
  text-align: center;
  color: #999;
  font-size: 12px;
}
.owner-banner-admin-preview {
  height: 86px;
  border-radius: 14px;
  border: 1px dashed rgba(255, 255, 255, 0.18);
  background: #151515;
  display: flex;
  align-items: center;
  justify-content: center;
  overflow: hidden;
  margin: 10px 0;
}
.owner-banner-admin-preview img {
  max-width: 100%;
  max-height: 100%;
  object-fit: contain;
}
.owner-banner-admin-preview span {
  color: #777;
  font-size: 11px;
  letter-spacing: 0.2em;
}
@media (max-width: 700px) {
  .owner-page {
    padding: 88px 16px 108px;
  }
  .owner-shell {
    width: 100%;
  }
  .owner-section {
    grid-template-columns: 1fr;
    gap: 8px;
    padding: 18px 2px;
  }
  .owner-banner-section {
    padding: 20px;
    margin-top: 36px;
  }
  .owner-banner-title {
    align-items: flex-start;
    flex-direction: column;
  }
  .owner-banner-title > p {
    text-align: left;
  }
  .owner-banner-actions {
    display: grid;
    grid-template-columns: 1fr 1fr;
  }
  .owner-banner-actions > * {
    text-align: center;
  }
  .owner-banner-actions > *:last-child {
    grid-column: 1/-1;
  }
}

/* v0.3.38 — robust home widget collision avoidance */
.home-page .hero-copy,
.home-page .edge-keywords {
  translate: var(--widget-avoid-x, 0px) var(--widget-avoid-y, 0px) !important;
}
.home-page .pair-core {
  translate: var(--widget-avoid-x, 0px) var(--widget-avoid-y, 0px) !important;
}

/* v0.3.37 — global spoiler syntax: {text} */
.spoiler-toggle {
  width: auto !important;
  min-width: 104px !important;
  padding: 0 10px !important;
  display: flex !important;
  align-items: center !important;
  justify-content: center !important;
  gap: 6px !important;
  font-weight: 800;
  letter-spacing: 0.06em;
}
.spoiler-toggle .spoiler-check {
  font-size: 13px;
  line-height: 1;
}
.spoiler-toggle span:last-child {
  font-size: 8px;
  line-height: 1;
}
.spoiler-toggle.on {
  background: #fff;
  color: #111;
  border-color: #fff;
}
.spoiler-toggle:not(.on) {
  background: rgba(8, 8, 9, 0.32);
  color: rgba(255, 255, 255, 0.68);
}
.spoiler-text {
  display: inline;
  /* v0.3.323 — blur(5px)는 줄간격(leading)보다 번짐 반경이 커서, 특히 다크 모드에서
     블러가 바로 위 줄까지 침범해 "글자가 위로 떠 보이는" 것처럼 보이는 버그가
     있었습니다. 줄바꿈 폭 안에 번짐이 들어오도록 반경을 줄였습니다. */
  filter: blur(2px);
  opacity: 0.78;
  user-select: none;
  transition:
    filter 0.16s ease,
    opacity 0.16s ease;
  background: currentColor;
  border-radius: 0.18em;
  box-decoration-break: clone;
  -webkit-box-decoration-break: clone;
}
.spoiler-text::selection {
  background: transparent;
}
html.spoilers-visible .spoiler-text {
  filter: none;
  opacity: 1;
  user-select: text;
  background: transparent;
}
@media (max-width: 700px) {
  .spoiler-toggle {
    min-width: 88px !important;
    padding: 0 8px !important;
  }
  .spoiler-toggle span:last-child {
    font-size: 7px;
  }
}


/* v0.3.142 — 관리자 프로필 편집 내부를 캐릭터/이미지 설정과 프로필 내용으로 분리 */
.profile-editor-panel-tabs {
  display: grid;
  grid-template-columns: 1fr 1fr;
  gap: 6px;
  margin: 0 0 16px;
  padding: 4px;
  border: 1px solid #302e36;
  border-radius: 12px;
  background: #17161b;
}
.profile-editor-panel-tabs button {
  min-width: 0;
  border: 0;
  border-radius: 9px;
  background: transparent;
  color: #918d98;
  padding: 9px 8px;
  font-size: 11px;
  font-weight: 700;
  cursor: pointer;
}
.profile-editor-panel-tabs button:hover {
  color: #d8d5dd;
  background: #211f26;
}
.profile-editor-panel-tabs button.on {
  color: #151419;
  background: #f0eef3;
}
.profile-editor-panel-body {
  min-width: 0;
}

/* v0.3.39 profile editor clarity + functional profile tab editor */
/* v0.3.229 — 소제목(h3)과 그 아래 설명(drawer-note)이 13px vs 12.5px로 거의 같은
   크기라 "이게 소제목인지 그냥 이어지는 설명인지" 구분이 잘 안 된다는 피드백.
   소제목을 눈에 띄게 키우고 굵기도 명시해서 위계를 확실히 나눴습니다. */
.editor-drawer .drawer-section h3 {
  font-size: 16px !important;
  font-weight: 800 !important;
  line-height: 1.35 !important;
  letter-spacing: 0.02em !important;
  color: #f0eef4 !important;
  margin-bottom: 12px !important;
}
.editor-drawer .drawer-note {
  font-size: 12.5px !important;
  line-height: 1.75 !important;
  color: #b7b4bd !important;
}
.editor-drawer .efield label {
  font-size: 11.5px !important;
  color: #c0bdc6 !important;
  font-weight: 650 !important;
}
.editor-drawer .efield input,
.editor-drawer .efield textarea {
  font-size: 12px !important;
  line-height: 1.5 !important;
}
.editor-drawer .drawer-current-title h2 {
  font-size: 25px !important;
  line-height: 1 !important;
}
.editor-drawer .drawer-current-title small {
  font-size: 10px !important;
  letter-spacing: 0.18em !important;
}
.compact-note {
  margin: 2px 0 0 !important;
  padding: 9px 10px;
  border: 1px dashed #3a3840;
  border-radius: 10px;
  background: #1b1a1f;
}

.profile-tabs-editor {
  display: flex;
  flex-direction: column;
  gap: 12px;
}
.profile-tab-editor {
  border: 1px solid #34323a;
  border-radius: 14px;
  background: #1a191e;
  padding: 10px;
  overflow: visible;
}
.profile-tab-editor > header {
  display: flex;
  align-items: center;
  gap: 8px;
  margin-bottom: 10px;
}
.profile-tab-editor > header > input {
  flex: 1;
  min-width: 0;
  border: 1px solid #3b3942;
  background: #242229;
  color: #fff;
  border-radius: 10px;
  padding: 9px 10px;
  font-size: 12px;
  font-weight: 750;
  letter-spacing: 0.04em;
}
.profile-tab-blocks {
  display: flex;
  flex-direction: column;
  gap: 8px;
  margin-bottom: 8px;
}
.profile-tab-block-editor {
  position: relative;
  border: 1px solid #dedbe2;
  border-radius: 13px;
  background: #f7f6f8;
  padding: 11px;
  overflow: visible;
  box-shadow: 0 1px 0 rgba(255,255,255,.9), 0 4px 14px rgba(0,0,0,.09);
}
.profile-tab-block-editor > header {
  display: flex;
  align-items: flex-start;
  justify-content: space-between;
  gap: 8px;
  margin-bottom: 10px;
  padding-bottom: 9px;
  border-bottom: 1px solid #e4e1e7;
}
.profile-preset-head {
  min-width: 0;
  display: flex;
  align-items: center;
  gap: 8px;
}
.profile-preset-index {
  flex: none;
  color: #77717c;
  font: 800 8px/1 Arial, sans-serif;
  letter-spacing: .12em;
}
.block-controls.horizontal {
  display: flex;
  flex-direction: row;
  gap: 4px;
  flex: none;
}
.block-controls.horizontal button {
  width: 27px;
  height: 27px;
}
.profile-block-upload {
  display: inline-flex !important;
  align-items: center;
  justify-content: center;
  margin-top: 5px;
}
.profile-custom-image {
  margin: 0;
  display: grid;
  gap: 7px;
}
.profile-custom-image img {
  display: block;
  width: 100%;
  max-height: 520px;
  object-fit: contain;
  border-radius: 16px;
  background: #f4f2ef;
}
.profile-custom-image.compact {
  max-width: 55%;
}
.profile-custom-image figcaption {
  font-size: 9px;
  letter-spacing: 0.12em;
  color: #89848c;
}

/* no native select for design-block type: compact popup list */
.profile-block-type-picker {
  position: relative;
  min-width: 142px;
  z-index: 3;
}
.profile-block-type-trigger {
  width: 100%;
  height: 34px;
  border: 1px solid #45414c;
  background: linear-gradient(180deg, #2d2a32, #242229);
  color: #f5f2f7;
  border-radius: 10px;
  padding: 0 8px 0 11px;
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: 10px;
  text-align: left;
  box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.045);
  font-size: 11.5px;
  font-weight: 700;
  cursor: pointer;
}
.profile-block-type-trigger i {
  font-style: normal;
  color: #aaa3b1;
  transition: 0.16s ease;
}
.profile-block-type-picker.open .profile-block-type-trigger i {
  transform: rotate(180deg);
}
.profile-block-type-menu {
  position: absolute;
  z-index: 400;
  left: 0;
  top: calc(100% + 6px);
  width: 230px;
  padding: 7px;
  display: none;
  grid-template-columns: 1fr 1fr;
  gap: 5px;
  border: 1px solid #4b4652;
  border-radius: 12px;
  background: #242129;
  box-shadow: 0 18px 45px rgba(0, 0, 0, 0.42);
  color: #f8f5fa;
}
.profile-block-type-picker.open .profile-block-type-menu {
  display: grid;
}
.profile-block-type-menu button {
  border: 1px solid transparent;
  background: #302d35;
  color: #e8e3eb;
  border-radius: 9px;
  padding: 8px 9px;
  font-size: 11px;
  font-weight: 650;
  text-align: left;
  cursor: pointer;
}
.profile-block-type-menu button:hover {
  background: #3c3743;
  border-color: #55505d;
  color: #fff;
}
.profile-block-type-menu button.on {
  background: #f1edf4;
  color: #1e1b21;
  border-color: #f1edf4;
}

/* reaction area uses the same percentage geometry while selecting and after save */
.profile-reaction-select-box {
  box-sizing: border-box;
  transform: none !important;
}
.profile-reaction-hotspot {
  box-sizing: border-box;
}

/* v0.3.40 · TALK scene switch sits beside WORLD/AU */
.top-scene-picker-toggle {
  position: relative !important;
  inset: auto !important;
  z-index: 2 !important;
  min-width: 190px !important;
  max-width: min(310px, 32vw) !important;
  height: 32px !important;
  border-radius: 999px !important;
  padding: 0 11px !important;
  background: rgba(255, 255, 255, 0.92) !important;
  box-shadow: 0 5px 18px rgba(0, 0, 0, 0.12) !important;
  backdrop-filter: blur(12px);
  mix-blend-mode: normal;
  color: #222;
}
.top-scene-picker-toggle small {
  font-size: 6px;
}
.top-scene-picker-toggle b {
  font-size: 9px;
}
.top-scene-picker-toggle > span:last-child {
  font-size: 11px;
}
.dialogue-page .scene-picker {
  top: 54px;
  left: clamp(130px, 12vw, 230px);
}
@media (max-width: 820px) {
  .top-scene-picker-toggle {
    min-width: 150px !important;
    max-width: 42vw !important;
  }
  .top-scene-picker-toggle b em,
  .top-scene-picker-toggle b span {
    display: none;
  }
  .dialogue-page .scene-picker {
    top: 50px;
    left: 10px;
  }
}
@media (max-width: 540px) {
  .top-left-stack {
    max-width: calc(100vw - 138px);
  }
  .top-scene-picker-toggle {
    min-width: 0 !important;
    width: 132px !important;
    max-width: 132px !important;
  }
  .top-scene-picker-toggle small {
    display: none;
  }
  .top-scene-picker-toggle b {
    font-size: 8px;
  }
  .dialogue-page .scene-picker {
    top: 48px;
    left: 8px;
    width: min(300px, calc(100% - 16px));
  }
}

/* v0.3.42 — timeline crop starts from the full source image; first vertical card aligns to its connector */
@media (min-width: 681px) {
  .history-list-v5 > .history-event-v5:first-child .history-slot-v5 {
    padding-top: 22px;
  }
}

/* v0.3.43 relation editing + direct gallery thumbnail crop */
.relation-editor-summary {
  padding: 10px 12px 12px;
  border-top: 1px solid rgba(255, 255, 255, 0.07);
  background: rgba(255, 255, 255, 0.025);
}
.relation-editor-summary span {
  display: block;
  font-size: 10px;
  font-weight: 800;
  letter-spacing: 0.12em;
  color: #b8b4bd;
  margin-bottom: 5px;
}
.relation-editor-summary p {
  margin: 0;
  color: #d8d4db;
  font-size: 12px;
  line-height: 1.65;
}
.relation-editor-summary small {
  display: block;
  margin-top: 5px;
  color: #a9a3ad;
  font-size: 10px;
  line-height: 1.55;
}
.relation-card-override[hidden] {
  display: none;
}
.relation-card-override .row2[hidden] {
  display: none;
}
.relation-card-override {
  margin: 14px 0 0;
  padding: 12px;
  border: 1px solid #ded9dc;
  border-radius: 13px;
  background: #f8f7f8;
}
.relation-card-override legend {
  padding: 0 7px;
  font-size: 10px;
  font-weight: 800;
  letter-spacing: 0.05em;
  color: #4b464d;
}
.relation-upload-btn {
  margin-top: 7px;
  display: inline-flex !important;
}
.gallery-crop-field {
  margin-top: 14px !important;
}
.gallery-crop-editor {
  position: relative;
  width: min(360px, 100%);
  aspect-ratio: var(--crop-ratio, 4 / 5);
  margin: 8px auto 10px;
  overflow: hidden;
  border: 1px solid #c9c3c7;
  border-radius: 16px;
  background-color: #ece9eb;
  background-image:
    linear-gradient(45deg, rgba(0, 0, 0, 0.035) 25%, transparent 25%),
    linear-gradient(-45deg, rgba(0, 0, 0, 0.035) 25%, transparent 25%),
    linear-gradient(45deg, transparent 75%, rgba(0, 0, 0, 0.035) 75%),
    linear-gradient(-45deg, transparent 75%, rgba(0, 0, 0, 0.035) 75%);
  background-size: 18px 18px;
  background-position:
    0 0,
    0 9px,
    9px -9px,
    -9px 0;
  cursor: grab;
  touch-action: none;
  box-shadow: inset 0 0 0 1px rgba(255, 255, 255, 0.7);
}
.gallery-crop-editor:active {
  cursor: grabbing;
}
.gallery-crop-editor:after {
  content: "THUMBNAIL";
  position: absolute;
  top: 9px;
  right: 9px;
  z-index: 4;
  border-radius: 999px;
  background: rgba(20, 19, 22, 0.74);
  color: #fff;
  padding: 5px 8px;
  font:
    700 8px/1 Arial,
    sans-serif;
  letter-spacing: 0.12em;
  pointer-events: none;
}
.gallery-crop-editor img {
  position: absolute;
  inset: 0;
  width: 100%;
  height: 100%;
  display: none;
  object-fit: cover;
  object-position: var(--crop-x, 50%) var(--crop-y, 50%);
  transform: scale(var(--crop-scale, 1));
  transform-origin: center center;
  user-select: none;
  pointer-events: none;
  will-change: transform;
}
.gallery-crop-empty {
  position: absolute;
  inset: 0;
  display: grid;
  place-items: center;
  padding: 28px;
  text-align: center;
  color: #8f8990;
  font-size: 11px;
  line-height: 1.5;
}
.gallery-crop-toolbar {
  display: flex;
  align-items: center;
  justify-content: center;
  gap: 7px;
  margin: 0 0 6px;
}
.gallery-crop-toolbar button {
  height: 34px;
  min-width: 38px;
  border: 1px solid #d8d2d6;
  border-radius: 9px;
  background: #fff;
  color: #28252a;
  font-weight: 800;
  cursor: pointer;
  padding: 0 10px;
}
.gallery-crop-toolbar button:hover {
  background: #232126;
  color: #fff;
  border-color: #232126;
}
.gallery-crop-toolbar strong {
  min-width: 58px;
  text-align: center;
  font-size: 11px;
  color: #3d3940;
}
.gallery-item {
  isolation: isolate;
}
.gallery-item img {
  object-position: var(--thumb-x, 50%) var(--thumb-y, 50%) !important;
  transform: scale(var(--thumb-scale, 1)) !important;
  transform-origin: center center !important;
  will-change: transform;
}
.gallery-lightbox .illust-reader > img,
.gallery-reader.reader-cover {
  transform: none !important;
  object-fit: contain !important;
  object-position: center !important;
}
@media (max-width: 560px) {
  .gallery-crop-editor {
    width: min(290px, 78vw);
  }
  .relation-card-override .row2 {
    grid-template-columns: 1fr;
  }
}
/* v0.3.45 — WYSIWYG thumbnail/crop frames */
/* GALLERY: crop editor and outside thumbnail must use the exact same frame ratio. */
/* v0.3.323 — aspect-ratio는 클리핑 프레임(.gallery-thumb-frame)이 갖고, <img>는
   object-fit/position/transform-scale만 유지합니다(그래야 확대분이 프레임
   밖으로 안 새서 아래 제목을 안 덮습니다). */
.gallery-item:not(.writing-card) .gallery-thumb-frame {
  aspect-ratio: var(--thumb-ratio, 4 / 5) !important;
}
.gallery-item:not(.writing-card) img {
  object-fit: cover !important;
  object-position: var(--thumb-x, 50%) var(--thumb-y, 50%) !important;
  transform: scale(var(--thumb-scale, 1)) !important;
  transform-origin: center center !important;
}
.mode-masonry .illust-card:nth-child(3n + 1) .gallery-thumb-frame,
.mode-masonry .illust-card:nth-child(3n + 2) .gallery-thumb-frame,
.mode-masonry .illust-card:nth-child(3n) .gallery-thumb-frame {
  aspect-ratio: var(--thumb-ratio, 4 / 5) !important;
}
.writing-card {
  align-items: start;
}
.writing-card .gallery-thumb-frame {
  width: 100% !important;
  height: auto !important;
  min-height: 0 !important;
  aspect-ratio: var(--thumb-ratio, 13 / 19) !important;
}
.writing-card img {
  width: 100% !important;
  height: 100% !important;
  object-fit: cover !important;
  object-position: var(--thumb-x, 50%) var(--thumb-y, 50%) !important;
  transform: scale(var(--thumb-scale, 1)) !important;
  transform-origin: center center !important;
}
.gallery-crop-editor img {
  object-fit: cover !important;
  object-position: var(--crop-x, 50%) var(--crop-y, 50%) !important;
  transform: scale(var(--crop-scale, 1)) !important;
  transform-origin: center center !important;
}

/* TIMELINE list: editing crop frame and the sticky outside preview share one 3:4 viewport. */
/* v0.3.89 — 이 블록 전체가 실제 줄바꿈 대신 문자 그대로의 "\n"으로 저장되어 있어서
   모든 선택자가 "n.timeline-crop-editor"처럼 깨진 채 무시되고 있었습니다(v0.3.45 갤러리 크롭 규칙도 동일하게 죽어 있었음).
   실제 줄바꿈으로 복구해 아래 규칙들이 다시 적용되도록 했습니다. */
.timeline-crop-editor {
  aspect-ratio: 3 / 4 !important;
}
.history-osmo-preview-v8 {
  height: auto !important;
  min-height: 0 !important;
  display: flex;
  align-items: flex-start !important;
}
.history-osmo-preview-stack-v8 {
  width: min(360px, 86%) !important;
  height: auto !important;
  min-height: 0 !important;
  aspect-ratio: 3 / 4 !important;
}
.history-osmo-preview-item-v8 img {
  object-fit: contain !important;
}
@media (max-width: 1050px) {
  .history-osmo-preview-stack-v8 {
    width: min(300px, 90%) !important;
    height: auto !important;
    aspect-ratio: 3 / 4 !important;
  }
}
@media (max-width: 760px) {
  .history-osmo-preview-v8 {
    height: auto !important;
  }
  .history-osmo-preview-stack-v8 {
    width: min(250px, 70vw) !important;
    height: auto !important;
    aspect-ratio: 3 / 4 !important;
  }
}

/* ===== lope v0.3.46 feature pass ===== */
/* block/image spoilers */
.spoiler-block {
  position: relative;
}
html:not(.spoilers-visible) .site-view .spoiler-block {
  overflow: hidden;
}
html:not(.spoilers-visible) .site-view .spoiler-block > * {
  filter: blur(10px);
  opacity: 0.46;
  user-select: none;
}
html:not(.spoilers-visible) .site-view .spoiler-block::after {
  content: "SPOILER";
  position: absolute;
  inset: 0;
  /* v0.3.324 — .history-card-v5::after(카드 밑줄 장식)처럼 같은 요소의 ::after를
     쓰는 다른 규칙과 같이 있으면, 그 규칙의 height:3px 같은 선언이 이 카드 전체
     스포일러 배지에도 그대로 얹혀서 배지가 3px짜리 얇은 띠로 카드 맨 위에 붙어버리는
     문제가 있었습니다(글자가 "위로 올라간" 것처럼 보였던 원인). inset만으로는 다른
     규칙의 명시적 height를 못 이기므로, 여기서도 폭·높이를 직접 못박습니다.
     width/height는 inset:0과 겹쳐도 명시값이라 항상 우선합니다. */
  width: 100%;
  height: 100%;
  z-index: 8;
  display: grid;
  place-items: center;
  background: rgba(20, 20, 22, 0.18);
  backdrop-filter: blur(2px);
  font: 700 11px/1 system-ui;
  letter-spacing: 0.18em;
  color: currentColor;
  pointer-events: none;
}

/* world / lore accordion */
.world-lore-panel {
  margin: 0 auto 42px;
  max-width: 1120px;
}
/* v0.3.233 — 어디 세계관인지 상관없이 항상 같은 무채색 회색이라 안 예쁘고, 그 위의
   "WORLD / SETTING" 글자도 opacity 0.55라 잘 안 보인다는 피드백. 사이트 포인트색
   기반 그라데이션으로 바꿨습니다. */
.world-lore-root {
  border: 1px solid color-mix(in srgb, var(--accent, #9f7d86) 40%, transparent);
  border-radius: 22px;
  background: linear-gradient(135deg, color-mix(in srgb, var(--accent, #9f7d86) 85%, #000 8%), color-mix(in srgb, var(--accent, #9f7d86) 55%, #000 35%));
  backdrop-filter: blur(14px);
  overflow: hidden;
  color: #fff;
}
.world-lore-root > summary {
  list-style: none;
  cursor: pointer;
  display: flex;
  align-items: center;
  justify-content: space-between;
  padding: 22px 26px;
}
.world-lore-root > summary::-webkit-details-marker,
.world-lore-item > summary::-webkit-details-marker {
  display: none;
}
.site.theme-default .site-view .world-lore-root > summary small {
  /* v0.3.235 — 진짜 원인: 사이트 전역 규칙
     ".site.theme-default .site-view :where(.page-eyebrow, small, time) { color: var(--ui-text-muted) }"
     가 이 small 태그 글자색을 회색으로 깔고 있었습니다. :where() 안쪽(.page-eyebrow,
     small, time)은 특이성이 0이지만, 그 앞의 ".site.theme-default .site-view"는
     클래스 3개짜리라 특이성이 있어서 — 클래스 1개짜리였던 이전 규칙(.world-lore-root
     > summary small)이 color: #fff를 명시해도 여전히 졌습니다. 그 전역 규칙과 같은
     조상 스코프(.site.theme-default .site-view)를 앞에 붙여 특이성을 확실히 이기게
     맞췄습니다. */
  display: block;
  font-size: 10px;
  letter-spacing: 0.2em;
  color: #fff;
  opacity: 1;
  text-shadow: 0 1px 4px rgba(0, 0, 0, 0.45);
  margin-bottom: 4px;
}
.world-lore-root > summary h2 {
  margin: 0;
  font-size: 26px;
}
.world-lore-root > summary > span {
  font-size: 10px;
  letter-spacing: 0.18em;
  border: 1px solid currentColor;
  border-radius: 99px;
  padding: 8px 12px;
  opacity: 0.7;
}
.world-lore-list {
  padding: 0 18px 18px;
  display: grid;
  gap: 8px;
}
.world-lore-item {
  border-top: 1px solid rgba(255, 255, 255, 0.12);
}
.world-lore-item > summary {
  list-style: none;
  cursor: pointer;
  display: grid;
  grid-template-columns: 42px 1fr 32px;
  align-items: center;
  padding: 15px 8px;
  gap: 10px;
}
.world-lore-item > summary span {
  font: 600 10px/1 monospace;
  opacity: 0.45;
}
.world-lore-item > summary b {
  font-size: 15px;
}
.world-lore-item > summary em {
  text-align: center;
  font-style: normal;
  transition: 0.2s;
}
.world-lore-item[open] > summary em {
  transform: rotate(45deg);
}
.world-lore-body {
  padding: 4px 50px 22px;
  line-height: 1.85;
  font-size: 14px;
}
.world-lore-body > strong {
  display: block;
  margin-bottom: 10px;
}
.world-lore-body p {
  margin: 0;
  white-space: normal;
}
.world-lore-body figure {
  margin: 0 0 16px;
  height: 340px;
  border-radius: 16px;
  overflow: hidden;
  position: relative;
}
.world-lore-body img {
  width: 100%;
  height: 100%;
  /* v0.3.334 — v0.3.324에서 세로로 긴 이미지의 좌우 여백을 없애려고 cover로
     바꿨는데, 그러면 처음 넣자마자(확대 전인데도) 이미지 테두리가 이미 잘려서
     보여서 "드래그·휠로 조절"이 무의미하다는 리포트. 기본은 원본 전체가 다
     보이는 contain으로 돌리고, 사용자가 실제로 휠을 돌려 확대(--img-scale>1)할
     때만 프레임의 overflow:hidden이 넘치는 부분을 잘라내는 방식으로 바꿉니다
     (확대하지 않으면 항상 원본 전체 표시, 확대해야만 크롭됨).
  */
  object-fit: contain;
  background: #111;
}

/* gallery access + badges */
.gallery-filter-row {
  display: flex;
  align-items: flex-start;
  justify-content: space-between;
  gap: 18px;
  margin: 0 0 14px;
}
.gallery-filter-row .gallery-type-tabs {
  margin: 0;
}
.gallery-access-tabs {
  display: flex;
  justify-content: flex-end;
  gap: 6px;
  margin: 0;
  flex-wrap: wrap;
  margin-left: auto;
}
.gallery-access-tabs button {
  border: 1px solid rgba(20, 20, 20, 0.16);
  background: rgba(255, 255, 255, 0.62);
  border-radius: 99px;
  padding: 7px 13px;
  font: 700 10px/1 system-ui;
  letter-spacing: 0.1em;
  cursor: pointer;
  transition: 0.16s ease;
}
.gallery-access-tabs button:hover {
  border-color: rgba(20, 20, 20, 0.34);
  background: #fff;
}
.gallery-access-tabs button.on {
  background: #18181b;
  color: #fff;
  border-color: #18181b;
  box-shadow: inset 0 0 0 1px rgba(255, 255, 255, 0.08);
}
.gallery-badges {
  display: flex;
  gap: 5px;
  flex-wrap: wrap;
  margin-bottom: 8px;
}
.gallery-badges span {
  font: 700 8px/1 system-ui;
  letter-spacing: 0.08em;
  padding: 4px 6px;
  border-radius: 99px;
  background: #e9e7e3;
  color: #555;
}
.gallery-badges .r18 {
  background: #25151a;
  color: #f1bacb;
}
.gallery-badges .spoiler {
  background: #252229;
  color: #d9cff0;
}
.gallery-badges .private {
  background: #1c1c1c;
  color: #cfcfcf;
}

/* PDF book */
.pdf-book-overlay {
  position: fixed;
  inset: 0;
  z-index: 10020;
  background: rgba(10, 10, 12, 0.82);
  backdrop-filter: blur(12px);
  display: grid;
  place-items: center;
  padding: 28px;
}
.pdf-book {
  width: min(1180px, 96vw);
  height: min(860px, 92vh);
  display: grid;
  grid-template-rows: auto 1fr auto;
  background: #dedbd4;
  border-radius: 24px;
  overflow: hidden;
  box-shadow: 0 30px 100px #0008;
}
.pdf-book > header {
  display: flex;
  align-items: center;
  justify-content: space-between;
  padding: 16px 20px;
  background: #171719;
  color: #fff;
}
.pdf-book > header small {
  font-size: 9px;
  letter-spacing: 0.18em;
  opacity: 0.6;
}
.pdf-book > header h2 {
  margin: 3px 0 0;
  font-size: 18px;
}
.pdf-book > header button {
  width: 36px;
  height: 36px;
  border: 0;
  border-radius: 50%;
  background: #fff1;
  color: #fff;
  font-size: 22px;
}
.pdf-book-stage {
  min-height: 0;
  display: flex;
  align-items: center;
  justify-content: center;
  gap: 18px;
  padding: 16px 22px;
  background: linear-gradient(90deg, #c9c5bc, #ebe8e2 50%, #c9c5bc);
  perspective: 1600px;
  overflow: hidden;
}
.pdf-page-canvas {
  max-width: 48%;
  max-height: 100%;
  width: auto;
  height: auto;
  background: white;
  box-shadow: 0 10px 28px #0003;
  animation: pdfPageIn 0.28s ease both;
}
.pdf-book > footer {
  display: flex;
  align-items: center;
  justify-content: center;
  gap: 20px;
  padding: 12px;
  background: #f5f3ef;
}
.pdf-book > footer button {
  border: 0;
  background: #1b1b1d;
  color: #fff;
  border-radius: 99px;
  padding: 10px 18px;
  font-size: 10px;
  letter-spacing: 0.1em;
}
.pdf-book > footer button:disabled {
  opacity: 0.25;
}
.pdf-book > footer span {
  min-width: 100px;
  text-align: center;
  font: 700 11px/1 monospace;
}
.pdf-loading {
  color: #555;
}
.pdf-fallback {
  width: 100%;
  height: 100%;
  display: grid;
  grid-template-rows: auto 1fr;
}
.pdf-fallback iframe {
  width: 100%;
  height: 100%;
  border: 0;
}
@keyframes pdfPageIn {
  from {
    opacity: 0;
    transform: rotateY(-6deg) translateX(14px);
  }
  to {
    opacity: 1;
    transform: none;
  }
}

/* music */
.music-page,
.trpg-page {
  min-height: 100vh;
  padding: 100px 6vw 110px;
  color: #19191b;
}
.music-shell,
.trpg-shell {
  width: min(1180px, 100%);
  margin: auto;
  display: grid;
  grid-template-columns: 280px minmax(0, 1fr);
  gap: 30px;
}
.music-folders,
.trpg-nav {
  position: sticky;
  top: 92px;
  align-self: start;
}
.music-folders header,
.trpg-nav header {
  margin-bottom: 24px;
}
.music-folders header small,
.music-list > header small,
.trpg-nav header small,
.trpg-log > header small {
  font-size: 9px;
  letter-spacing: 0.22em;
  opacity: 0.5;
}
.music-folders h1,
.trpg-nav h1 {
  font-size: 34px;
  margin: 4px 0;
}
.music-folders > button,
.trpg-nav > button {
  width: 100%;
  border: 0;
  border-top: 1px solid #0002;
  background: transparent;
  display: grid;
  grid-template-columns: 36px 1fr;
  text-align: left;
  gap: 10px;
  padding: 14px 5px;
  color: inherit;
}
.music-folders > button.on,
.trpg-nav > button.on {
  padding-left: 14px;
  background: #171719;
  color: #fff;
  border-radius: 12px;
  border-top-color: transparent;
}
.music-folders > button > span,
.trpg-nav > button > span {
  font: 600 10px monospace;
  opacity: 0.5;
}
.music-folders button b,
.trpg-nav button b {
  display: block;
  font-size: 13px;
}
.music-folders button small,
.trpg-nav button small {
  font-size: 9px;
  opacity: 0.55;
}
.music-list {
  background: #fff9;
  border: 1px solid #0001;
  border-radius: 24px;
  padding: 28px;
}
.music-list > header {
  border-bottom: 1px solid #0001;
  padding-bottom: 20px;
  margin-bottom: 8px;
}
.music-list > header h2 {
  font-size: 30px;
  margin: 4px 0;
}
.music-list > header p {
  margin: 6px 0;
  color: #777;
}
.music-track {
  display: grid;
  grid-template-columns: 76px minmax(0, 1fr) auto;
  gap: 16px;
  align-items: center;
  padding: 14px 0;
  border-bottom: 1px solid #0001;
}
.music-track figure {
  margin: 0;
  width: 76px;
  height: 76px;
  border-radius: 14px;
  background: #ece9e3;
  overflow: hidden;
  display: grid;
  place-items: center;
}
.music-track figure img {
  width: 100%;
  height: 100%;
  object-fit: cover;
}
.music-track figure span {
  font: 700 17px monospace;
  color: #aaa;
}
.music-track-copy small {
  font-size: 9px;
  letter-spacing: 0.12em;
  color: #999;
}
.music-track-copy h3 {
  font-size: 17px;
  margin: 3px 0;
}
.music-track-copy p {
  font-size: 12px;
  color: #777;
  margin: 3px 0;
}
.music-track > button {
  border: 1px solid #0002;
  background: #fff;
  border-radius: 99px;
  padding: 9px 14px;
  font: 700 9px/1 system-ui;
  letter-spacing: 0.08em;
}
.music-track.playing > button {
  background: #171719;
  color: #fff;
}
.music-hidden-frame {
  position: fixed;
  left: -9999px;
  top: -9999px;
  opacity: 0.01;
  pointer-events: none;
}
.music-empty,
.trpg-empty {
  padding: 100px;
  text-align: center;
}

/* TRPG */
.trpg-log {
  background: #fff;
  border: 1px solid #0001;
  border-radius: 20px;
  overflow: hidden;
  min-height: 70vh;
}
.trpg-log > header {
  padding: 28px 34px;
  border-bottom: 1px solid #0001;
}
.trpg-log > header h2 {
  font-size: 32px;
  margin: 4px 0;
}
.trpg-log > header p {
  color: #666;
  line-height: 1.7;
}
.trpg-log > header div {
  display: flex;
  gap: 14px;
  flex-wrap: wrap;
}
.trpg-log > header span {
  font-size: 10px;
  background: #f0efec;
  padding: 6px 10px;
  border-radius: 99px;
}
.trpg-html {
  padding: 34px;
  line-height: 1.85;
  overflow-wrap: anywhere;
}
.trpg-html img {
  max-width: 100%;
  height: auto;
}
.trpg-html table {
  max-width: 100%;
  border-collapse: collapse;
}
.trpg-html td,
.trpg-html th {
  border: 1px solid #ddd;
  padding: 7px;
}

/* VN */
.talk-head-actions {
  display: flex;
  align-items: center;
  gap: 12px;
}
.vn-play-button {
  border: 1px solid #0002;
  background: #fff;
  border-radius: 99px;
  padding: 8px 12px;
  font: 700 8px/1 system-ui;
  letter-spacing: 0.1em;
}
.vn-overlay {
  position: fixed;
  inset: 0;
  z-index: 10030;
  background: #08090b;
  display: grid;
  place-items: center;
}
.vn-stage {
  position: relative;
  width: 100%;
  height: 100%;
  overflow: hidden;
  background: linear-gradient(180deg, #20242a, #0d0e11);
  background-image: linear-gradient(180deg, #0001, #0008), var(--vn-bg);
  background-size: cover;
  background-position: center;
}
.vn-close {
  position: absolute;
  right: 24px;
  top: 20px;
  z-index: 5;
  width: 42px;
  height: 42px;
  border: 1px solid #fff4;
  border-radius: 50%;
  background: #0005;
  color: #fff;
  font-size: 23px;
}
.vn-character {
  position: absolute;
  bottom: 0;
  width: 48%;
  height: 88%;
  display: flex;
  align-items: flex-end;
  justify-content: center;
  transition: 0.25s;
  filter: brightness(0.55);
  opacity: 0.75;
}
.vn-character.active {
  filter: brightness(1);
  opacity: 1;
  transform: translateY(-8px);
}
.vn-character.vn-left {
  left: 0;
}
.vn-character.vn-right {
  right: 0;
}
.vn-character img {
  max-width: 100%;
  max-height: 100%;
  object-fit: contain;
  object-position: center bottom;
}
.vn-character.empty {
  display: none;
}
.vn-dialogue-box {
  position: absolute;
  z-index: 4;
  left: 50%;
  bottom: 34px;
  transform: translateX(-50%);
  width: min(900px, 88vw);
  min-height: 160px;
  padding: 30px 34px 22px;
  border: 1px solid #fff4;
  border-radius: 20px;
  background: rgba(12, 13, 16, 0.84);
  backdrop-filter: blur(14px);
  color: #fff;
  cursor: pointer;
  box-shadow: 0 16px 50px #0008;
}
.vn-speaker {
  font-size: 12px;
  font-weight: 800;
  letter-spacing: 0.08em;
  color: #cfd4de;
  margin-bottom: 12px;
}
.vn-text {
  font-size: 18px;
  line-height: 1.75;
  min-height: 62px;
}
.vn-progress {
  position: absolute;
  right: 26px;
  top: 24px;
  font: 600 10px monospace;
  color: #fff6;
}
.vn-controls {
  display: flex;
  justify-content: flex-end;
  gap: 8px;
  margin-top: 14px;
}
.vn-controls button {
  border: 1px solid #fff3;
  background: #fff1;
  color: #fff;
  border-radius: 99px;
  padding: 8px 12px;
  font-size: 9px;
}
.vn-controls button:disabled {
  opacity: 0.2;
}
.talk-expression-row {
  display: grid;
  grid-template-columns: 46px 1fr auto auto;
  gap: 7px;
  align-items: center;
  margin: 7px 0;
}
.talk-expression-thumb {
  width: 46px;
  height: 46px;
  border-radius: 10px;
  background: #242429;
  overflow: hidden;
  display: grid;
  place-items: center;
}
.talk-expression-thumb img {
  width: 100%;
  height: 100%;
  object-fit: cover;
}
.talk-expression-row input {
  min-width: 0;
}
.talk-expression-row button {
  border: 1px solid #151518;
  background: #151518;
  color: #fff;
  border-radius: 8px;
  width: 36px;
  height: 36px;
  padding: 0;
  display: grid;
  place-items: center;
}
.talk-expression-row button .button-ui-icon {
  filter: brightness(0) invert(1) !important;
}

@media (max-width: 760px) {
  .world-lore-panel {
    margin-bottom: 26px;
  }
  .world-lore-body {
    padding: 2px 18px 18px;
  }
  .music-page,
  .trpg-page {
    padding: 86px 14px 90px;
  }
  .music-shell,
  .trpg-shell {
    grid-template-columns: 1fr;
  }
  .music-folders,
  .trpg-nav {
    position: static;
  }
  .music-folders {
    display: grid;
    grid-template-columns: 1fr 1fr;
    gap: 6px;
  }
  .music-folders header {
    grid-column: 1/-1;
  }
  .music-folders > button {
    border: 1px solid #0001;
    border-radius: 10px;
  }
  .music-track {
    grid-template-columns: 58px 1fr;
  }
  .music-track figure {
    width: 58px;
    height: 58px;
  }
  .music-track > button {
    grid-column: 2;
    justify-self: start;
  }
  .trpg-log > header,
  .trpg-html {
    padding: 20px;
  }
  .pdf-book-overlay {
    padding: 0;
  }
  .pdf-book {
    width: 100vw;
    height: 100dvh;
    border-radius: 0;
  }
  .pdf-book-stage {
    padding: 10px;
  }
  .pdf-page-canvas {
    max-width: 100%;
  }
  .vn-character {
    width: 64%;
    height: 75%;
  }
  .vn-character.vn-left {
    left: -15%;
  }
  .vn-character.vn-right {
    right: -15%;
  }
  .vn-dialogue-box {
    bottom: 16px;
    width: 94vw;
    padding: 24px 20px 18px;
  }
  .vn-text {
    font-size: 15px;
  }
  .talk-head-actions {
    gap: 6px;
  }
  .vn-play-button {
    font-size: 7px;
    padding: 7px 9px;
  }
}

/* TRPG archive list/detail override ported onto v0.3.46 base */
.trpg-page {
  min-height: 100vh;
  padding: 90px 4vw 120px;
}
.trpg-archive {
  width: min(920px, 94vw);
  margin: 0 auto;
}
.trpg-reader-shell {
  width: min(1080px, 94vw);
  margin: 0 auto;
}
.trpg-archive-head {
  margin: 0 0 24px;
}
.trpg-archive-head small,
.trpg-reader-head small {
  font-size: 10px;
  letter-spacing: 0.18em;
  color: #8c8781;
}
.trpg-archive-head h1 {
  font:
    700 clamp(34px, 5vw, 64px)/1 Georgia,
    serif;
  margin: 5px 0 8px;
}
.trpg-archive-head p {
  color: #888;
  margin: 0;
  font-size: 13px;
}
/* v0.3.278 — 사용자 요청: 총 건수·총 플레이 시간 요약 + 정렬(시간순/제목순/룰순) */
.trpg-archive-stats {
  display: flex;
  align-items: center;
  gap: 8px;
  margin-top: 12px;
  font-size: 13px;
  color: #555;
}
.trpg-archive-stats span {
  color: #ccc;
}
.trpg-sort-row {
  display: flex;
  align-items: center;
  gap: 8px;
  margin: 0 0 14px;
  font-size: 11px;
}
.trpg-sort-row > span {
  color: #999;
  margin-right: 2px;
}
.trpg-sort-row button {
  border: 1px solid rgba(0, 0, 0, 0.1);
  background: #fff;
  color: #6b6560;
  border-radius: 999px;
  padding: 6px 12px;
  font-size: 11px;
  font-weight: 700;
  cursor: pointer;
}
.trpg-sort-row button.on {
  background: var(--accent, #9f7d86);
  border-color: var(--accent, #9f7d86);
  color: #fff;
}
.trpg-log-meta {
  display: flex;
  flex-direction: column;
  align-items: flex-end;
  gap: 4px;
}
.trpg-log-playtime {
  font-size: 10px;
  font-weight: 800;
  color: #fff;
  background: color-mix(in srgb, var(--accent, #9f7d86) 82%, #000);
  border-radius: 999px;
  padding: 3px 8px;
  white-space: nowrap;
}
.trpg-reader-head .trpg-log-meta {
  align-items: flex-end;
}
.trpg-log-list {
  display: grid;
  gap: 10px;
}
.trpg-log-card {
  width: 100%;
  display: grid;
  grid-template-columns: 92px minmax(0, 1fr) auto 18px;
  align-items: center;
  gap: 14px;
  padding: 10px;
  border: 1px solid rgba(0, 0, 0, 0.08);
  border-radius: 16px;
  background: color-mix(in srgb, var(--accent, #9f7d86) 8%, #fff);
  text-align: left;
  color: #232226;
  box-shadow: 0 8px 24px rgba(0, 0, 0, 0.035);
  transition: 0.18s ease;
}
.trpg-log-card:hover {
  transform: translateY(-2px);
  border-color: color-mix(in srgb, var(--accent) 35%, #ddd);
  box-shadow: 0 13px 30px rgba(0, 0, 0, 0.07);
}
.trpg-log-thumb {
  width: 92px;
  height: 68px;
  border-radius: 11px;
  overflow: hidden;
  background: #e7e4e0;
  display: grid;
  place-items: center;
}
.trpg-log-thumb img {
  width: 100%;
  height: 100%;
  object-fit: cover;
}
.trpg-log-thumb b {
  font:
    700 20px Georgia,
    serif;
  color: #aaa;
}
.trpg-log-copy {
  min-width: 0;
  display: flex;
  flex-direction: column;
  gap: 3px;
}
.trpg-log-copy > b {
  font-size: 15px;
  white-space: nowrap;
  overflow: hidden;
  text-overflow: ellipsis;
}
.trpg-log-copy > em {
  font-style: normal;
  font-size: 12px;
  color: #79746f;
  white-space: nowrap;
  overflow: hidden;
  text-overflow: ellipsis;
}
.trpg-log-copy > small {
  font-size: 10px;
  color: #9b9690;
}
.trpg-log-card time {
  font-size: 11px;
  color: #9b9690;
}
.trpg-log-card > i {
  font-style: normal;
  font-size: 21px;
  color: #aaa;
}
.trpg-empty {
  padding: 60px;
  text-align: center;
  border: 1px dashed #ccc;
  border-radius: 18px;
  color: #999;
}
.trpg-reader-shell {
  position: relative;
  overflow: hidden;
  border: 1px solid color-mix(in srgb, var(--accent) 12%, rgba(0, 0, 0, 0.08));
  border-radius: 26px;
  background: rgba(255, 255, 255, 0.88);
  box-shadow: 0 24px 70px rgba(45, 36, 40, 0.06);
  padding: 22px 26px 28px;
}
.trpg-reader-shell:before {
  content: "";
  position: absolute;
  left: 0;
  right: 0;
  top: 0;
  height: 5px;
  background: linear-gradient(90deg, var(--accent), color-mix(in srgb, var(--accent) 28%, #fff), transparent 76%);
}
.trpg-reader-toolbar {
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: 16px;
  min-height: 36px;
  margin-bottom: 12px;
}
.trpg-reader-toolbar > span {
  color: #aaa3a7;
  font-size: 8px;
  font-weight: 900;
  letter-spacing: 0.17em;
}
.trpg-back {
  border: 0;
  background: transparent;
  padding: 6px 0;
  font-size: 9px;
  font-weight: 900;
  letter-spacing: 0.12em;
  color: #6d6965;
  cursor: pointer;
}
.trpg-back:hover {
  color: var(--accent);
}
.trpg-reader-head {
  display: grid;
  grid-template-columns: 124px minmax(0, 1fr) minmax(150px, auto);
  gap: 22px;
  align-items: stretch;
  padding: 16px 0 26px;
}
.trpg-reader-head > figure {
  position: relative;
  width: 124px;
  min-height: 116px;
  margin: 0;
  overflow: hidden;
  border-radius: 18px 18px 46px 18px;
  background: color-mix(in srgb, var(--accent) 9%, #f1eeeb);
  box-shadow: inset 0 0 0 1px color-mix(in srgb, var(--accent) 15%, #ddd);
}
.trpg-reader-head > figure:after {
  content: "";
  position: absolute;
  right: 10px;
  bottom: 10px;
  width: 8px;
  height: 8px;
  border-radius: 50%;
  background: var(--accent);
  box-shadow: 0 0 0 5px color-mix(in srgb, var(--accent) 10%, transparent);
}
.trpg-reader-head > figure img {
  width: 100%;
  height: 100%;
  object-fit: cover;
}
.trpg-reader-head > figure.empty {
  display: grid;
  place-items: center;
}
.trpg-reader-head > figure.empty b {
  color: color-mix(in srgb, var(--accent) 68%, #555);
  font: 700 42px/1 Georgia, serif;
}
.trpg-reader-title {
  display: flex;
  min-width: 0;
  flex-direction: column;
  justify-content: center;
}
.trpg-reader-head h1 {
  font:
    700 clamp(36px, 5vw, 64px)/0.98 Georgia,
    serif;
  margin: 5px 0 8px;
  overflow-wrap: anywhere;
  letter-spacing: -0.045em;
}
.trpg-reader-head p {
  margin: 0;
  color: #888;
  font-size: 13px;
  line-height: 1.65;
}
.trpg-reader-side {
  display: flex;
  min-width: 150px;
  flex-direction: column;
  align-items: flex-end;
  justify-content: center;
  border-left: 1px solid color-mix(in srgb, var(--accent) 13%, #e6e0dd);
  padding-left: 22px;
  text-align: right;
}
.trpg-reader-side > small {
  color: var(--accent);
  font-size: 8px;
  font-weight: 900;
  letter-spacing: 0.16em;
}
.trpg-reader-side time {
  margin-top: 7px;
  color: #6f696d;
  font-size: 12px;
  font-weight: 800;
  white-space: nowrap;
}
.trpg-reader-side .trpg-log-playtime {
  margin-top: 8px;
}
.trpg-reader-side > em {
  margin-top: 16px;
  color: #c3bdc0;
  font: 700 10px/1 Georgia, serif;
  letter-spacing: 0.12em;
}
.trpg-reader-body {
  overflow: hidden;
  border: 1px solid color-mix(in srgb, var(--accent) 12%, rgba(0, 0, 0, 0.08));
  border-radius: 20px;
  background: #f6f2f0;
}
.trpg-reader-body > header {
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: 12px;
  min-height: 42px;
  border-bottom: 1px solid color-mix(in srgb, var(--accent) 10%, #e6e0dd);
  padding: 0 17px;
  background: rgba(255, 255, 255, 0.74);
}
.trpg-reader-body > header small {
  color: var(--accent);
  font-size: 8px;
  font-weight: 900;
  letter-spacing: 0.17em;
}
.trpg-reader-body > header span {
  color: #aaa3a7;
  font-size: 9px;
}
.trpg-html-view {
  display: block;
  width: 100%;
  height: 420px;
  min-height: 420px;
  border: 0;
  background: #f6f2f0;
}
.trpg-editor-row > img,
.trpg-editor-row > i {
  width: 44px;
  height: 36px;
  border-radius: 8px;
  object-fit: cover;
  background: #27262b;
  display: grid;
  place-items: center;
  font-style: normal;
}
.trpg-thumb-admin {
  display: flex;
  align-items: center;
  gap: 10px;
}
.trpg-thumb-admin img,
.trpg-thumb-admin .empty {
  width: 128px;
  height: 86px;
  border-radius: 12px;
  object-fit: cover;
  background: #25242a;
  display: grid;
  place-items: center;
  color: #aaa;
  font-size: 10px;
}
.trpg-paste-zone {
  min-height: 170px;
  max-height: 300px;
  overflow: auto;
  border: 1px solid #3c3a42;
  border-radius: 12px;
  background: #17161b;
  padding: 14px;
  color: #ddd;
  outline: none;
}
.trpg-paste-zone:focus {
  border-color: var(--accent, #9f7d86);
  box-shadow: 0 0 0 2px color-mix(in srgb, var(--accent) 20%, transparent);
}
.trpg-paste-zone > span:only-child {
  color: #777;
}
.trpg-speaker-editor {
  margin: 14px 0;
  overflow: hidden;
  border: 1px solid #e1dcda;
  border-radius: 14px;
  background: #faf8f7;
}
.trpg-speaker-editor > summary {
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: 12px;
  padding: 13px 14px;
  cursor: pointer;
  list-style: none;
}
.trpg-speaker-editor > summary::-webkit-details-marker { display: none; }
.trpg-speaker-editor > summary span {
  display: flex;
  min-width: 0;
  flex-direction: column;
  gap: 3px;
}
.trpg-speaker-editor > summary b {
  font-size: 11px;
}
.trpg-speaker-editor > summary small {
  color: #91898d;
  font-size: 8px;
}
.trpg-speaker-editor > summary i {
  color: var(--accent);
  font-style: normal;
  transition: transform .18s ease;
}
.trpg-speaker-editor:not([open]) > summary i { transform: rotate(-90deg); }
.trpg-speaker-help {
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: 10px;
  border-top: 1px solid #ece7e4;
  border-bottom: 1px solid #ece7e4;
  padding: 10px 12px;
  background: #fff;
}
.trpg-speaker-help p {
  margin: 0;
  color: #817a7e;
  font-size: 8px;
  line-height: 1.55;
}
.trpg-speaker-help .m-btn {
  flex: 0 0 auto;
  padding: 7px 9px;
}
.trpg-speaker-grid { padding: 0 12px; }
.trpg-speaker-empty {
  display: grid;
  place-items: center;
  min-height: 92px;
  padding: 18px 14px;
  color: #817a7e;
  text-align: center;
  font-size: 10px;
  line-height: 1.55;
}
.trpg-speaker-empty small {
  display: block;
  margin-top: 4px;
  color: #aaa2a6;
  font-size: 8px;
}

.trpg-speaker-row {
  display: grid;
  grid-template-columns: 52px minmax(0,1fr);
  gap: 11px;
  align-items: start;
  padding: 12px 0 2px;
  border-bottom: 1px solid #ece7e4;
}
.trpg-speaker-row:last-child { border-bottom: 0; }
.trpg-speaker-preview {
  width: 52px;
  height: 52px;
  overflow: hidden;
  display: grid;
  place-items: center;
  border: 1px solid color-mix(in srgb,var(--trpg-speaker-preview-color,var(--accent)) 22%,#ddd);
  border-radius: 11px;
  background: color-mix(in srgb,var(--trpg-speaker-preview-color,var(--accent)) 8%,#eee);
  color: var(--trpg-speaker-preview-color,var(--accent));
  font: 800 17px/1 Georgia,serif;
}
.trpg-speaker-preview img {
  width: 100%;
  height: 100%;
  object-fit: cover;
}
.trpg-speaker-fields { min-width: 0; }
.trpg-speaker-color-field { margin-top: 6px; }
.trpg-speaker-color-line {
  display: flex;
  align-items: center;
  gap: 8px;
}
.trpg-speaker-color-line input[type="color"] {
  flex: 0 0 42px;
  width: 42px;
  height: 32px;
  padding: 2px;
  border-radius: 7px;
  cursor: pointer;
}
.trpg-speaker-color-line code {
  color: #817a7e;
  font: 700 10px/1.2 ui-monospace,SFMono-Regular,Consolas,monospace;
  letter-spacing: .02em;
}
.trpg-speaker-image-line {
  display: grid;
  grid-template-columns: minmax(0,1fr) auto auto;
  gap: 5px;
}
.trpg-speaker-image-line .m-btn {
  width: auto;
  margin: 0;
  white-space: nowrap;
}
@media (max-width: 700px) {
  .trpg-page {
    padding: 78px 14px 100px;
  }
  .trpg-log-card {
    grid-template-columns: 72px minmax(0, 1fr) 16px;
  }
  .trpg-log-thumb {
    width: 72px;
    height: 58px;
  }
  .trpg-log-card time {
    display: none;
  }
  .trpg-reader-shell {
    width: calc(100vw - 20px);
    border-radius: 19px;
    padding: 14px 12px 16px;
  }
  .trpg-reader-toolbar { margin-bottom: 4px; }
  .trpg-reader-toolbar > span { display: none; }
  .trpg-reader-head {
    grid-template-columns: 76px minmax(0, 1fr);
    gap: 13px;
    padding: 12px 0 18px;
  }
  .trpg-reader-head > figure {
    width: 76px;
    min-height: 86px;
    border-radius: 13px 13px 28px 13px;
  }
  .trpg-reader-head h1 {
    font-size: clamp(30px, 11vw, 44px);
  }
  .trpg-reader-head p {
    font-size: 11px;
  }
  .trpg-reader-side {
    grid-column: 1/-1;
    flex-direction: row;
    align-items: center;
    justify-content: flex-start;
    gap: 8px;
    min-width: 0;
    border-left: 0;
    border-top: 1px solid color-mix(in srgb, var(--accent) 12%, #e6e0dd);
    padding: 10px 0 0;
    text-align: left;
  }
  .trpg-reader-side time,
  .trpg-reader-side .trpg-log-playtime,
  .trpg-reader-side > em { margin-top: 0; }
  .trpg-reader-side > em { margin-left: auto; }
  .trpg-reader-body { border-radius: 15px; }
  .trpg-reader-body > header { padding: 0 12px; }
  .trpg-html-view {
    min-height: 360px;
  }
  .trpg-speaker-help {
    align-items: stretch;
    flex-direction: column;
  }
  .trpg-speaker-help .m-btn { width: 100%; }
  .trpg-speaker-row { grid-template-columns: 44px minmax(0,1fr); gap: 8px; }
  .trpg-speaker-preview { width: 44px; height: 44px; }
  .trpg-speaker-image-line { grid-template-columns: 1fr 1fr; }
  .trpg-speaker-image-line > input { grid-column: 1/-1; }
}

/* v0.3.46 + TRPG wheel/drag image tuning */
.trpg-log-thumb img {
  object-fit: contain !important;
  transform: translate(var(--trpg-x, 0%), var(--trpg-y, 0%)) scale(var(--trpg-scale, 1));
  transform-origin: center center;
  will-change: transform;
}
.trpg-thumb-admin {
  align-items: flex-start !important;
}
.trpg-thumb-stage {
  width: 260px;
  max-width: 58vw;
  aspect-ratio: 23/17;
  border-radius: 14px;
  overflow: hidden;
  background: #25242a;
  display: grid;
  place-items: center;
  position: relative;
  cursor: grab;
  touch-action: none;
  border: 1px solid #3b3941;
}
.trpg-thumb-stage.dragging {
  cursor: grabbing;
}
.trpg-thumb-stage img {
  width: 100%;
  height: 100%;
  object-fit: contain;
  transform: translate(var(--trpg-x, 0%), var(--trpg-y, 0%)) scale(var(--trpg-scale, 1));
  transform-origin: center center;
  user-select: none;
  pointer-events: none;
  will-change: transform;
}
.trpg-thumb-stage .empty {
  position: absolute;
  inset: 0;
  display: grid;
  place-items: center;
  color: #8d8994;
  font-size: 11px;
  letter-spacing: 0.12em;
}
.trpg-thumb-actions {
  display: flex;
  flex-direction: column;
  gap: 8px;
  align-items: flex-start;
  padding-top: 2px;
}
.trpg-thumb-actions small {
  max-width: 180px;
  color: #8e8994;
  font-size: 11px;
  line-height: 1.5;
}
.site.editing .image-drag-ready {
  overscroll-behavior: contain;
}

@media (max-width: 700px) {
  .gallery-filter-row {
    align-items: center;
    gap: 10px;
  }
  .gallery-access-tabs {
    flex: 0 0 auto;
  }
  .gallery-access-tabs button {
    padding: 7px 10px;
    font-size: 8px;
  }
}

/* profile/admin numeric fields: remove native spinner arrows */
.editor-drawer input[type="number"],
.profile-tab-editor input[type="number"],
.profile-tab-block-editor input[type="number"] {
  appearance: textfield;
  -moz-appearance: textfield;
  padding-right: 10px !important;
}
.editor-drawer input[type="number"]::-webkit-inner-spin-button,
.editor-drawer input[type="number"]::-webkit-outer-spin-button,
.profile-tab-editor input[type="number"]::-webkit-inner-spin-button,
.profile-tab-editor input[type="number"]::-webkit-outer-spin-button,
.profile-tab-block-editor input[type="number"]::-webkit-inner-spin-button,
.profile-tab-block-editor input[type="number"]::-webkit-outer-spin-button {
  -webkit-appearance: none;
  margin: 0;
}

/* ===== lope v0.3.48 — TALK message editor readability pass ===== */
#talk-message-editor {
  display: grid;
  gap: 10px;
  margin: 4px 0 10px;
}
/* v0.3.88 — 장면/카드 전용 모브(엑스트라) 에디터 */
#talk-mob-editor,
.tale-mob-editor-list {
  display: grid;
  gap: 6px;
  margin: 4px 0 8px;
}
.talk-mob-edit-row,
.tale-mob-edit-row {
  display: flex;
  gap: 8px;
  align-items: center;
}
.tale-mob-edit-row input:not([type="color"]) {
  flex: 1;
  min-width: 0;
}
.tale-mob-edit-row input[type="color"],
.tale-mob-edit-row button {
  flex: none;
}
.tale-mob-icon-pick {
  flex: none;
  width: 34px;
  height: 34px;
  border-radius: 50%;
  border: 1px solid rgba(70, 60, 60, 0.16);
  background: #fff;
  overflow: hidden;
  display: grid;
  place-items: center;
  cursor: pointer;
  color: #a39b97;
  font-size: 15px;
}
.tale-mob-icon-pick img {
  width: 100%;
  height: 100%;
  object-fit: cover;
}
.talk-mob-edit-row input[type="text"],
.talk-mob-edit-row input:not([type]) {
  height: 34px;
  border-radius: 8px;
  border: 1px solid #35333a;
  background: #19181c;
  color: #f0eef3;
  padding: 0 10px;
  font: 400 11px/1.4 "Noto Sans KR", sans-serif;
}
.talk-mob-edit-row input[type="color"] {
  width: 34px;
  height: 34px;
  padding: 2px;
  border-radius: 8px;
  border: 1px solid #35333a;
  background: #19181c;
}
.talk-mob-edit-row button.danger {
  width: 30px;
  height: 30px;
  border-radius: 8px;
  border: 1px solid #3d2a2c;
  background: #241a1b;
  color: #e39a9a;
  cursor: pointer;
}
/* 썰(TALES) 대사 카드 모브 에디터 — 밝은 카드 배경에 맞춘 라이트 톤 */
.tale-mob-edit-row input[type="text"],
.tale-mob-edit-row input:not([type]) {
  height: 34px;
  border-radius: 8px;
  border: 1px solid rgba(70, 60, 60, 0.16);
  background: #fff;
  color: #2b2928;
  padding: 0 10px;
  font: 400 11px/1.4 "Noto Sans KR", sans-serif;
}
.tale-mob-edit-row input[type="color"] {
  width: 34px;
  height: 34px;
  padding: 2px;
  border-radius: 8px;
  border: 1px solid rgba(70, 60, 60, 0.16);
  background: #fff;
}
.tale-mob-edit-row button.danger {
  width: 30px;
  height: 30px;
  border-radius: 8px;
  border: 1px solid rgba(190, 60, 60, 0.25);
  background: #fdf1f0;
  color: #b23a3a;
  cursor: pointer;
}
/* v0.3.224 — 문답(Q&A) 카드 편집 폼. */
.tale-qa-edit-list {
  display: grid;
  gap: 10px;
  margin: 4px 0 8px;
}
.tale-qa-edit-row {
  position: relative;
  display: grid;
  gap: 7px;
  padding: 12px;
  border: 1px solid rgba(70, 60, 60, 0.14);
  border-radius: 12px;
  background: #fff;
}
.tale-qa-edit-row label {
  display: grid;
  gap: 4px;
  font-size: 10px;
  font-weight: 800;
  color: #8a8387;
}
.tale-qa-edit-row input,
.tale-qa-edit-row textarea {
  border: 1px solid #ddd;
  border-radius: 8px;
  padding: 8px 10px;
  font: inherit;
  font-size: 12px;
  background: #fff;
  color: #2d282c;
}
.tale-qa-edit-row textarea {
  min-height: 56px;
  resize: vertical;
}
.tale-qa-edit-row button.danger {
  position: absolute;
  top: 8px;
  right: 8px;
  width: 26px;
  height: 26px;
  border-radius: 8px;
  border: 1px solid rgba(190, 60, 60, 0.25);
  background: #fdf1f0;
  color: #b23a3a;
  cursor: pointer;
}
.talk-message-edit {
  display: block !important;
  margin: 0 !important;
  padding: 0 !important;
  border: 1px solid #35333a !important;
  border-radius: 12px !important;
  background: #19181c !important;
  overflow: hidden;
}
.talk-message-edit-head {
  display: grid;
  grid-template-columns: 34px minmax(105px, 1fr) minmax(105px, 1fr) minmax(100px, 0.8fr) auto;
  gap: 8px;
  align-items: end;
  padding: 10px 10px 9px;
  border-bottom: 1px solid #2d2b31;
  background: #1d1c21;
}
.talk-message-number {
  width: 30px;
  height: 30px;
  border-radius: 8px;
  display: grid;
  place-items: center;
  background: #2a282e;
  color: #aaa;
  font:
    800 9px/1 ui-monospace,
    SFMono-Regular,
    Menlo,
    monospace;
  align-self: end;
}
.talk-message-field {
  min-width: 0;
}
.talk-message-field small,
.talk-message-body > small {
  display: block;
  margin: 0 0 5px;
  color: #8f8a96;
  font:
    700 8px/1.2 "Noto Sans KR",
    sans-serif;
  letter-spacing: 0.02em;
}
.talk-message-field select,
.talk-message-field input {
  width: 100%;
  height: 34px;
  min-width: 0;
  border: 1px solid #37343d !important;
  border-radius: 8px !important;
  background: #242228 !important;
  color: #eee !important;
  padding: 0 10px !important;
  font-size: 10px !important;
  line-height: 1 !important;
}
.talk-message-field select {
  padding-right: 30px !important;
}
.talk-message-body {
  padding: 10px;
}
.talk-message-body textarea {
  display: block;
  width: 100%;
  min-height: 82px;
  max-height: 220px;
  resize: vertical;
  border: 1px solid #37343d !important;
  border-radius: 9px !important;
  background: #111014 !important;
  color: #f2f0f3 !important;
  padding: 10px 11px !important;
  font:
    400 11px/1.65 "Noto Sans KR",
    sans-serif !important;
  box-sizing: border-box;
}
.talk-message-body textarea:focus,
.talk-message-field input:focus,
.talk-message-field select:focus {
  /* v0.3.221 — 이전 그림자(#ffffff08, 불투명도 3%)가 이 배경(#242228)에서 사실상
     안 보여서, 키보드로 이 필드에 들어와 있어도 어느 칸인지 구분이 안 됐습니다.
     테두리색도 더 밝히고, 실제로 눈에 보이는 강조색 링으로 바꿨습니다. */
  outline: none;
  border-color: var(--accent, #9f7d86) !important;
  box-shadow: 0 0 0 2px color-mix(in srgb, var(--accent, #9f7d86) 55%, transparent);
}
.talk-message-actions {
  display: flex;
  gap: 5px;
  align-items: center;
  justify-content: flex-end;
  padding-bottom: 1px;
}
.talk-message-actions button {
  width: 31px !important;
  height: 31px !important;
  border: 1px solid #3d3a42 !important;
  border-radius: 8px !important;
  background: #26242a !important;
  color: #c9c5cd !important;
  font-size: 12px !important;
}
.talk-message-actions button:hover {
  background: #302e35 !important;
  color: #fff !important;
}
.talk-message-actions button:disabled {
  opacity: 0.25;
  cursor: default;
}
.talk-message-actions button.danger:hover {
  background: #4a242a !important;
  border-color: #6c3038 !important;
}
/* v0.3.321 — 이 버튼들은 모달 안에 있어서 .modal .ui-icon의 "아이콘 항상 검정"
   규칙(라이트 모달 배경 기준 기본값)이 그대로 적용되는데, 이 버튼 자체는 배경을
   어둡게 칠해놔서 검은 아이콘이 검은 배경에 묻혀 안 보였습니다. 이 버튼 한정으로
   아이콘을 다시 흰색으로 뒤집습니다. */
.talk-message-actions button .ui-icon {
  filter: brightness(0) invert(1) !important;
}
#talk-add-message {
  width: 100%;
  height: 36px;
  border-style: dashed !important;
  background: #1c1b20 !important;
  color: #f3f3f5 !important;
}
@media (max-width: 720px) {
  .talk-message-edit-head {
    grid-template-columns: 34px 1fr 1fr;
    align-items: end;
  }
  .talk-message-time {
    grid-column: 2/3;
  }
  .talk-message-actions {
    grid-column: 3/4;
  }
  .talk-message-body textarea {
    min-height: 96px;
  }
}

/* v0.3.49의 고정 iframe 높이/구형 img 배치는 v0.3.310 리더 디자인으로 교체했습니다. */
.trpg-reader-head h1 {
  font-family: "Noto Serif KR", "Iowan Old Style", Batang, serif !important;
  font-weight: 700 !important;
}

/* ===== lope v0.3.50 — PDF novel reader + gallery filter visual unification ===== */
/* Gallery top controls: left content-type tabs and right access filters use one visual language. */
.gallery-filter-row {
  align-items: center !important;
  gap: 12px !important;
}
.gallery-type-tabs,
.gallery-access-tabs {
  display: flex !important;
  align-items: center !important;
  gap: 7px !important;
  flex-wrap: wrap !important;
  margin: 0 !important;
}
.gallery-access-tabs {
  margin-left: auto !important;
  justify-content: flex-end !important;
}
.gallery-type-tabs button,
.gallery-access-tabs button {
  min-height: 30px !important;
  padding: 0 13px !important;
  border: 1px solid #d4cdca !important;
  border-radius: 999px !important;
  background: rgba(255, 255, 255, 0.72) !important;
  color: #81797c !important;
  box-shadow: none !important;
  font:
    700 8px/1 Arial,
    "Noto Sans KR",
    sans-serif !important;
  letter-spacing: 0.12em !important;
  cursor: pointer !important;
  transition:
    background 0.16s ease,
    color 0.16s ease,
    border-color 0.16s ease,
    transform 0.16s ease !important;
}
.gallery-type-tabs button:hover,
.gallery-access-tabs button:hover {
  background: #fff !important;
  border-color: #a9a2a0 !important;
  color: #3a3738 !important;
}
.gallery-type-tabs button.on,
.gallery-access-tabs button.on {
  background: #1d1c21 !important;
  border-color: #1d1c21 !important;
  color: #fff !important;
}
.gallery-type-tabs button:active,
.gallery-access-tabs button:active {
  transform: translateY(1px);
}

/* PDF viewer: larger, quieter reader chrome, book-like spread. */
.pdf-book-overlay {
  padding: 14px !important;
  background: rgba(12, 12, 14, 0.88) !important;
  backdrop-filter: blur(16px) !important;
}
.pdf-book {
  width: min(1600px, 98vw) !important;
  height: min(1040px, 96dvh) !important;
  border-radius: 22px !important;
  overflow: hidden !important;
  background: #d7d2ca !important;
  box-shadow: 0 36px 120px rgba(0, 0, 0, 0.62) !important;
  border: 1px solid rgba(255, 255, 255, 0.1) !important;
  grid-template-rows: 58px minmax(0, 1fr) 58px !important;
}
.pdf-book > header {
  padding: 0 22px !important;
  background: #f8f6f1 !important;
  color: #222 !important;
  border-bottom: 1px solid rgba(35, 31, 28, 0.12) !important;
}
.pdf-book > header > div {
  min-width: 0;
}
.pdf-book > header small {
  color: #8d857d !important;
  opacity: 1 !important;
  font:
    700 8px/1.1 Arial,
    "Noto Sans KR",
    sans-serif !important;
  letter-spacing: 0.2em !important;
}
.pdf-book > header h2 {
  max-width: min(70vw, 980px) !important;
  overflow: hidden !important;
  text-overflow: ellipsis !important;
  white-space: nowrap !important;
  margin: 4px 0 0 !important;
  color: #24201e !important;
  font:
    700 16px/1.15 "Noto Serif KR",
    "Iowan Old Style",
    Batang,
    serif !important;
  letter-spacing: -0.02em !important;
}
.pdf-book > header button {
  width: 34px !important;
  height: 34px !important;
  border: 1px solid rgba(35, 31, 28, 0.12) !important;
  background: #fff !important;
  color: #514b47 !important;
  cursor: pointer !important;
}
.pdf-book > header button:hover {
  background: #ece8e1 !important;
  color: #111 !important;
}
.pdf-book-stage {
  position: relative !important;
  min-height: 0 !important;
  gap: 2px !important;
  padding: 22px 34px 18px !important;
  overflow: hidden !important;
  background:
    radial-gradient(circle at 50% 46%, rgba(255, 255, 255, 0.35), transparent 42%),
    linear-gradient(90deg, #9d968c 0, #c8c2b8 9%, #ded9d1 50%, #c8c2b8 91%, #9d968c 100%) !important;
  perspective: 1800px !important;
}
.pdf-book-stage::before {
  content: "";
  position: absolute;
  z-index: 0;
  top: 16px;
  bottom: 16px;
  left: 50%;
  width: 22px;
  transform: translateX(-50%);
  background: linear-gradient(
    90deg,
    transparent,
    rgba(42, 35, 30, 0.11) 32%,
    rgba(255, 255, 255, 0.4) 50%,
    rgba(42, 35, 30, 0.11) 68%,
    transparent
  );
  filter: blur(2px);
  pointer-events: none;
}
.pdf-book-stage::after {
  content: "";
  position: absolute;
  z-index: 0;
  inset: auto 9% 10px;
  height: 18px;
  border-radius: 50%;
  background: rgba(0, 0, 0, 0.2);
  filter: blur(18px);
  pointer-events: none;
}
.pdf-page-canvas {
  position: relative !important;
  z-index: 1 !important;
  max-width: 50% !important;
  max-height: 100% !important;
  width: auto !important;
  height: auto !important;
  background: #fffefa !important;
  border-radius: 1px !important;
  box-shadow:
    0 6px 20px rgba(33, 27, 23, 0.2),
    0 0 0 1px rgba(51, 43, 38, 0.05) !important;
  animation: pdfPageIn 0.24s ease both !important;
}
.pdf-page-canvas:first-of-type {
  transform-origin: right center !important;
  box-shadow:
    -7px 7px 22px rgba(33, 27, 23, 0.18),
    inset -18px 0 26px rgba(42, 32, 25, 0.025) !important;
}
.pdf-page-canvas:last-of-type {
  transform-origin: left center !important;
  box-shadow:
    7px 7px 22px rgba(33, 27, 23, 0.18),
    inset 18px 0 26px rgba(42, 32, 25, 0.025) !important;
}
.pdf-book > footer {
  position: relative !important;
  gap: 14px !important;
  padding: 0 18px !important;
  background: #f8f6f1 !important;
  border-top: 1px solid rgba(35, 31, 28, 0.12) !important;
}
.pdf-book > footer button {
  min-width: 88px !important;
  padding: 9px 15px !important;
  border: 1px solid #d5cfc8 !important;
  background: #fff !important;
  color: #34302d !important;
  border-radius: 999px !important;
  font:
    700 8px/1 Arial,
    "Noto Sans KR",
    sans-serif !important;
  letter-spacing: 0.12em !important;
  cursor: pointer !important;
}
.pdf-book > footer button:hover:not(:disabled) {
  background: #252326 !important;
  border-color: #252326 !important;
  color: #fff !important;
}
.pdf-book > footer button:disabled {
  opacity: 0.28 !important;
}
.pdf-book > footer span {
  min-width: 90px !important;
  color: #6e6761 !important;
  font:
    700 9px/1 ui-monospace,
    SFMono-Regular,
    Menlo,
    monospace !important;
}
@keyframes pdfPageIn {
  from {
    opacity: 0.35;
    transform: scale(0.992) translateY(3px);
  }
  to {
    opacity: 1;
    transform: none;
  }
}

@media (max-width: 760px) {
  .pdf-book-overlay {
    padding: 0 !important;
  }
  .pdf-book {
    width: 100vw !important;
    height: 100dvh !important;
    border: 0 !important;
    border-radius: 0 !important;
    grid-template-rows: 54px minmax(0, 1fr) 56px !important;
  }
  .pdf-book-stage {
    padding: 12px 10px !important;
    gap: 0 !important;
    background: #cfc9c0 !important;
  }
  .pdf-book-stage::before {
    display: none !important;
  }
  .pdf-page-canvas {
    max-width: 100% !important;
    box-shadow: 0 6px 22px rgba(0, 0, 0, 0.2) !important;
  }
  .gallery-filter-row {
    align-items: center !important;
    gap: 8px !important;
  }
  .gallery-type-tabs,
  .gallery-access-tabs {
    gap: 5px !important;
  }
  .gallery-type-tabs button,
  .gallery-access-tabs button {
    min-height: 28px !important;
    padding: 0 10px !important;
    font-size: 7px !important;
  }
}

/* lope v0.3.51 — supplied icon set */
.ui-icon {
  display: block;
  width: 18px;
  height: 18px;
  object-fit: contain;
  object-position: center;
  pointer-events: none;
  user-select: none;
}
.site-bottom-dock .feature-dot {
  display: grid;
  place-items: center;
}
.site-bottom-dock .ui-icon {
  width: 19px;
  height: 19px;
  filter: brightness(0) invert(1);
  opacity: 0.86;
}
.site-bottom-dock .feature-dot:hover .ui-icon {
  opacity: 1;
}
.site-bottom-dock .feature-dot.on .ui-icon {
  filter: brightness(0);
  opacity: 0.92;
}
.drawer-icon-rail .drawer-tab i {
  display: grid;
  place-items: center;
  width: 100%;
  height: 100%;
}
.drawer-icon-rail .drawer-tab .ui-icon {
  width: 18px;
  height: 18px;
  filter: brightness(0) invert(1);
  opacity: 0.62;
}
.drawer-icon-rail .drawer-tab:hover .ui-icon {
  opacity: 0.92;
}
.drawer-icon-rail .drawer-tab.on .ui-icon {
  filter: brightness(0);
  opacity: 1;
}
.top-actions .ghost-btn .ui-icon {
  width: 15px;
  height: 15px;
  filter: brightness(0) invert(1);
}
.bgm-symbol {
  display: grid;
  place-items: center;
}
.bgm-symbol .ui-icon {
  width: 14px;
  height: 14px;
}
.spoiler-check {
  display: grid;
  place-items: center;
}
.spoiler-check .ui-icon {
  width: 15px;
  height: 15px;
}
.modal .m-btn .ui-icon,
.modal-card .m-btn .ui-icon {
  display: inline-block;
  width: 15px;
  height: 15px;
  vertical-align: -3px;
  margin-right: 5px;
  filter: none;
}
@media (max-width: 820px) {
  .drawer-icon-rail .drawer-tab .ui-icon {
    width: 17px;
    height: 17px;
  }
}

/* ===== lope v0.3.53 — icon pass + character archive alignment ===== */
.edit-toggle.on {
  background: #171719 !important;
  color: #fff !important;
  border-color: #171719 !important;
}
.edit-toggle.on .ui-icon {
  filter: brightness(0) invert(1) !important;
}

.roster-page {
  position: relative;
  color: #1b1a1d;
  background:
    linear-gradient(rgba(30, 28, 31, 0.025) 1px, transparent 1px),
    linear-gradient(90deg, rgba(30, 28, 31, 0.025) 1px, transparent 1px), #f6f3ef;
  background-size: 32px 32px;
}
.roster-page:before {
  display: none !important;
}
.roster-wrap {
  width: min(1240px, 100%);
  margin: 0 auto;
}
.roster-head {
  display: flex;
  align-items: center;
  justify-content: center;
  gap: 18px;
  text-align: left;
  margin: 0 auto clamp(28px, 4vw, 48px);
}
.roster-head > div:last-child {
  min-width: 0;
}
.roster-head small {
  font:
    700 9px/1.2 system-ui,
    sans-serif;
  letter-spacing: 0.22em;
  color: #8b8587;
}
.roster-head h1 {
  font:
    500 clamp(38px, 5vw, 68px)/0.95 "DM Serif Display",
    serif;
  color: #1b1a1d;
  margin: 6px 0 4px;
}
.roster-head p {
  margin: 0;
  color: #918b8d;
  font-size: 11px;
}
.roster-grid {
  grid-template-columns: repeat(auto-fit, minmax(220px, 1fr));
  gap: clamp(12px, 1.6vw, 22px);
  align-items: stretch;
}
.roster-card {
  height: clamp(460px, 50vw, 620px);
  max-height: 620px;
  border: 1px solid #d8d1cd;
  border-radius: 22px;
  overflow: hidden;
  background: #fbfaf8;
  color: #1b1a1d;
  box-shadow: 0 14px 34px rgba(42, 35, 37, 0.07);
  backdrop-filter: none;
  text-align: left;
  display: flex;
  flex-direction: column;
  transition:
    transform 0.22s,
    border-color 0.22s,
    box-shadow 0.22s;
}
.roster-card:hover {
  transform: translateY(-6px);
  border-color: color-mix(in srgb, var(--c), #bcb4b1 46%);
  box-shadow: 0 22px 42px rgba(42, 35, 37, 0.11);
}
.roster-index {
  position: absolute;
  z-index: 3;
  top: 16px;
  left: 17px;
  font: 700 9px/1 monospace;
  letter-spacing: 0.12em;
  color: #8f888a;
  background: #fff;
  border: 1px solid #ded7d3;
  border-radius: 99px;
  padding: 7px 9px;
}
.roster-art {
  position: relative;
  flex: 1;
  min-height: 0;
  margin: 12px 12px 0;
  border-radius: 15px 15px 8px 8px;
  overflow: hidden;
  background: linear-gradient(180deg, color-mix(in srgb, var(--c), white 88%), #efebe6);
}
.roster-art:after {
  content: "";
  position: absolute;
  left: 14%;
  right: 14%;
  bottom: 0;
  height: 1px;
  background: color-mix(in srgb, var(--c), transparent 50%);
}
.roster-card .roster-art > img {
  position: absolute;
  inset: 0;
  width: 100%;
  height: 100%;
  object-fit: contain;
  object-position: center bottom;
  filter: drop-shadow(0 18px 16px rgba(51, 41, 43, 0.12));
  transform: none;
}
.roster-card .roster-art > .art-fallback {
  position: absolute;
  inset: 10%;
  border-radius: 14px;
  background: color-mix(in srgb, var(--c), white 82%);
  display: grid;
  place-items: center;
  color: color-mix(in srgb, var(--c), #222 40%);
}
.roster-caption {
  position: relative;
  left: auto;
  right: auto;
  bottom: auto;
  min-height: 154px;
  background: transparent;
  padding: 17px 18px 18px;
  text-align: left;
  border-top: 0;
}
.roster-caption small {
  display: block;
  font:
    700 8px/1.2 system-ui,
    sans-serif;
  letter-spacing: 0.15em;
  color: color-mix(in srgb, var(--c), #777 55%);
  text-transform: uppercase;
  margin-bottom: 5px;
}
.roster-caption b {
  display: block;
  font:
    500 clamp(21px, 2vw, 28px)/1 "DM Serif Display",
    serif;
  color: #1b1a1d;
  white-space: nowrap;
  overflow: hidden;
  text-overflow: ellipsis;
}
.roster-caption strong {
  display: block;
  font-size: 10px;
  color: #777;
  font-weight: 600;
  margin-top: 4px;
}
.roster-caption > span {
  display: -webkit-box;
  -webkit-line-clamp: 2;
  -webkit-box-orient: vertical;
  overflow: hidden;
  font-size: 10px;
  line-height: 1.55;
  color: #8c8587;
  margin-top: 9px;
  min-height: 31px;
}
.roster-tags {
  display: flex;
  gap: 5px;
  flex-wrap: wrap;
  margin-top: 10px;
}
.roster-tags i {
  font-style: normal;
  font-size: 8px;
  color: #6f696b;
  background: #f0ece9;
  border-radius: 99px;
  padding: 5px 8px;
}
.roster-compare {
  text-align: center;
  margin-top: 26px;
}
.roster-compare .top-pill {
  color: #1b1a1d;
  border-color: #cfc8c5;
  background: #fff;
}
@media (max-width: 700px) {
  .roster-head {
    justify-content: flex-start;
    gap: 12px;
    margin-bottom: 22px;
  }
  .roster-grid {
    grid-template-columns: repeat(2, minmax(0, 1fr));
    gap: 9px;
  }
  .roster-card {
    height: clamp(360px, 92vw, 470px);
    border-radius: 16px;
  }
  .roster-art {
    margin: 8px 8px 0;
    border-radius: 11px;
  }
  .roster-caption {
    padding: 13px 12px 14px;
    min-height: 137px;
  }
  .roster-caption b {
    font-size: 18px;
  }
  .roster-tags {
    display: none;
  }
}

/* v0.3.54 — banner maker / link exchange */
.owner-banner-preview img,
.owner-banner-maker-preview img {
  border-radius: 0;
}
.friend-banner-grid {
  display: grid;
  grid-template-columns: repeat(2, minmax(0, 1fr));
  gap: 12px;
}
.friend-banner-card {
  display: block;
  border-radius: 18px;
  overflow: hidden;
  background: #171717;
  border: 1px solid rgba(20, 20, 20, 0.12);
  box-shadow: 0 10px 24px rgba(0, 0, 0, 0.06);
  transition: 0.18s ease;
}
.friend-banner-card:hover {
  transform: translateY(-2px);
  box-shadow: 0 14px 32px rgba(0, 0, 0, 0.1);
}
.friend-banner-card img {
  display: block;
  width: 100%;
  aspect-ratio: 360/88;
  object-fit: cover;
}
.owner-banner-maker-preview {
  min-height: 88px;
  height: auto;
  padding: 10px;
}
.owner-banner-maker-preview img {
  width: 100%;
  max-height: none;
  aspect-ratio: 360/88;
  object-fit: cover;
}
.banner-import-textarea {
  width: 100%;
  min-height: 110px;
  resize: vertical;
  border-radius: 12px;
  border: 1px solid rgba(255, 255, 255, 0.14);
  background: #151515;
  color: #eee;
  padding: 12px;
  font:
    12px/1.55 ui-monospace,
    SFMono-Regular,
    Consolas,
    monospace;
  box-sizing: border-box;
}
.banner-admin-list {
  display: grid;
  gap: 8px;
  margin-top: 12px;
}
.banner-admin-row {
  display: grid;
  grid-template-columns: 88px minmax(0, 1fr) 32px;
  gap: 10px;
  align-items: center;
  padding: 8px;
  border: 1px solid rgba(255, 255, 255, 0.1);
  border-radius: 12px;
  background: #151515;
}
.banner-admin-row img {
  width: 88px;
  height: 28px;
  border-radius: 7px;
  object-fit: cover;
  background: #222;
}
.banner-admin-row div {
  min-width: 0;
}
.banner-admin-row b {
  display: block;
  font-size: 12px;
  color: #fff;
}
.banner-admin-row small {
  display: block;
  overflow: hidden;
  text-overflow: ellipsis;
  white-space: nowrap;
  color: #777;
  font-size: 10px;
}
.banner-admin-empty {
  margin-top: 10px;
  padding: 14px;
  border: 1px dashed rgba(255, 255, 255, 0.13);
  border-radius: 12px;
  text-align: center;
  color: #777;
  font-size: 11px;
}
@media (max-width: 700px) {
  .friend-banner-grid {
    grid-template-columns: 1fr;
  }
}

/* ===== lope v0.3.55 — edit key active visibility ===== */
.site-topbar {
  mix-blend-mode: normal !important;
}
.site-topbar .top-left-stack {
  mix-blend-mode: difference;
}
.site-topbar .top-actions .bgm-control,
.site-topbar .top-actions .spoiler-toggle,
.site-topbar .top-actions [data-menu] {
  mix-blend-mode: difference;
}
.site-topbar .edit-toggle {
  mix-blend-mode: normal !important;
  background: #fff !important;
  border-color: #d9d6d2 !important;
  color: #111 !important;
  box-shadow: 0 1px 4px rgba(0, 0, 0, 0.08);
}
.site-topbar .edit-toggle .ui-icon {
  filter: brightness(0) !important;
  opacity: 1 !important;
}
.site-topbar .edit-toggle.on {
  background: #171719 !important;
  border-color: #171719 !important;
  color: #fff !important;
}
.site-topbar .edit-toggle.on .ui-icon {
  filter: brightness(0) invert(1) !important;
  opacity: 1 !important;
}

/* v0.3.56 — owner banner maker crop / public cleanup */
.owner-banner-crop-wrap {
  position: relative;
  width: 100%;
  aspect-ratio: 360/88;
  max-height: 132px;
  margin: 12px 0;
  border: 1px solid rgba(255, 255, 255, 0.16);
  border-radius: 16px;
  overflow: hidden;
  background: #111;
  box-shadow: inset 0 0 0 1px rgba(255, 255, 255, 0.03);
}
.owner-banner-crop-wrap canvas {
  display: block;
  width: 100%;
  height: 100%;
  cursor: grab;
  touch-action: none;
  user-select: none;
}
.owner-banner-crop-wrap canvas.dragging {
  cursor: grabbing;
}
.owner-banner-crop-hud {
  position: absolute;
  left: 10px;
  right: 10px;
  bottom: 8px;
  display: flex;
  justify-content: space-between;
  align-items: center;
  pointer-events: none;
  color: #fff;
  text-shadow: 0 1px 5px #000;
  font-size: 9px;
  letter-spacing: 0.12em;
}
.owner-banner-crop-hud b {
  font-size: 10px;
  padding: 3px 7px;
  border-radius: 999px;
  background: rgba(0, 0, 0, 0.48);
  backdrop-filter: blur(5px);
}
.owner-banner-result {
  margin-top: 14px;
  padding-top: 14px;
  border-top: 1px solid rgba(255, 255, 255, 0.09);
}
.owner-banner-result > img {
  display: block;
  width: 100%;
  aspect-ratio: 360/88;
  object-fit: contain;
  border-radius: 0;
  background: #111;
}
.owner-banner-result .ebtn {
  text-decoration: none;
  text-align: center;
}

/* v0.3.57 — banner color picker + pair logo mode */
.banner-mode-picker,
.banner-bg-picker {
  margin: 12px 0;
}
.banner-mode-picker > label,
.banner-bg-picker > label {
  display: block;
  margin-bottom: 8px;
  color: #b9b5bd;
  font-size: 11px;
  font-weight: 700;
  letter-spacing: 0.02em;
}
.banner-mode-picker > div {
  display: grid;
  grid-template-columns: 1fr 1fr;
  gap: 5px;
  padding: 4px;
  border: 1px solid rgba(255, 255, 255, 0.11);
  border-radius: 13px;
  background: #151519;
}
.banner-mode-picker button {
  height: 34px;
  border: 0;
  border-radius: 9px;
  background: transparent;
  color: #8c8991;
  font:
    700 11px/1 "Noto Sans KR",
    sans-serif;
  cursor: pointer;
  transition: 0.15s ease;
}
.banner-mode-picker button.on {
  background: #f3f1ee;
  color: #17171a;
  box-shadow: 0 3px 12px rgba(0, 0, 0, 0.18);
}
.banner-bg-swatches {
  display: flex;
  flex-wrap: wrap;
  gap: 8px;
  align-items: center;
}
.banner-bg-swatch {
  position: relative;
  width: 30px;
  height: 30px;
  padding: 0;
  border: 2px solid transparent;
  border-radius: 10px;
  background: var(--sw);
  box-shadow: inset 0 0 0 1px rgba(128, 128, 128, 0.25);
  cursor: pointer;
  transition: 0.15s ease;
}
.banner-bg-swatch:hover {
  transform: translateY(-1px);
}
.banner-bg-swatch.on {
  border-color: #fff;
  box-shadow:
    0 0 0 2px #29272d,
    inset 0 0 0 1px rgba(128, 128, 128, 0.2);
}
.banner-bg-custom {
  position: relative;
  height: 30px;
  min-width: 78px;
  display: flex;
  align-items: center;
  gap: 7px;
  padding: 0 9px;
  border: 1px solid rgba(255, 255, 255, 0.12);
  border-radius: 10px;
  background: #17171a;
  color: #c8c5cb;
  font-size: 10px;
  font-weight: 700;
  cursor: pointer;
  overflow: hidden;
}
.banner-bg-custom input {
  position: absolute;
  inset: 0;
  opacity: 0;
  cursor: pointer;
}
.banner-bg-custom:before {
  content: "";
  width: 14px;
  height: 14px;
  border-radius: 50%;
  background: conic-gradient(#f45, #fc4, #6c6, #5cf, #86f, #f45);
  box-shadow: 0 0 0 1px rgba(255, 255, 255, 0.18);
}
.banner-logo-control {
  display: grid;
  grid-template-columns: minmax(0, 1fr) auto;
  gap: 8px;
  align-items: center;
  margin: 12px 0;
}
.banner-logo-preview {
  height: 56px;
  display: flex;
  align-items: center;
  justify-content: center;
  overflow: hidden;
  border: 1px dashed rgba(255, 255, 255, 0.14);
  border-radius: 12px;
  background: #151519;
}
.banner-logo-preview img {
  display: block;
  max-width: 88%;
  max-height: 42px;
  object-fit: contain;
}
.banner-logo-preview span {
  color: #66636b;
  font:
    700 9px/1 Arial,
    sans-serif;
  letter-spacing: 0.16em;
}

/* v0.3.58 — banner pair-name style presets */
.banner-style-picker {
  margin: 12px 0;
}
.banner-style-picker > label {
  display: block;
  margin-bottom: 8px;
  color: #b9b5bd;
  font-size: 11px;
  font-weight: 700;
}
.banner-style-picker > div {
  display: grid;
  grid-template-columns: repeat(5, minmax(0, 1fr));
  gap: 6px;
}
.banner-style-picker button {
  height: 54px;
  min-width: 0;
  padding: 6px 4px;
  border: 1px solid rgba(255, 255, 255, 0.11);
  border-radius: 11px;
  background: #151519;
  color: #aaa6af;
  cursor: pointer;
  overflow: hidden;
  transition: 0.15s ease;
}
.banner-style-picker button:hover {
  border-color: rgba(255, 255, 255, 0.25);
  transform: translateY(-1px);
}
.banner-style-picker button.on {
  background: #f3f1ee;
  color: #17171a;
  border-color: #f3f1ee;
  box-shadow: 0 4px 14px rgba(0, 0, 0, 0.18);
}
.banner-style-picker button span {
  display: block;
  font:
    700 9px/1.1 "Noto Sans KR",
    sans-serif;
  margin-bottom: 6px;
  opacity: 0.72;
}
.banner-style-picker button b {
  display: block;
  white-space: nowrap;
  font-size: 14px;
  line-height: 1;
}
.banner-style-classic b {
  font-family: Georgia, "Times New Roman", serif;
}
.banner-style-cute b {
  font-family: "Arial Rounded MT Bold", "Noto Sans KR", sans-serif;
  font-weight: 900;
}
.banner-style-pixel b {
  font-family: monospace;
  font-weight: 900;
  image-rendering: pixelated;
  text-shadow: 1px 0 currentColor;
}
.banner-style-sticker b {
  font-family: "Arial Black", "Noto Sans KR", sans-serif;
  font-weight: 900;
  text-shadow:
    1px 1px 0 rgba(128, 128, 128, 0.35),
    -1px -1px 0 rgba(128, 128, 128, 0.18);
}
.banner-style-minimal b {
  font-family: "Noto Sans KR", Arial, sans-serif;
  font-weight: 400;
  letter-spacing: 0.08em;
}
@media (max-width: 520px) {
  .banner-style-picker > div {
    grid-template-columns: repeat(3, 1fr);
  }
}

/* ===== lope v0.3.59 — supplied icon audit / contrast rules ===== */
/* dark controls always render supplied black assets as white */
.site-bottom-dock .feature-dot:not(.on) .ui-icon,
.drawer-icon-rail .drawer-tab:not(.on) .ui-icon,
.top-actions .ghost-btn:not(.edit-toggle) .ui-icon {
  filter: brightness(0) invert(1) !important;
}
/* light/selected controls render them black */
.site-bottom-dock .feature-dot.on .ui-icon,
.drawer-icon-rail .drawer-tab.on .ui-icon,
.modal .ui-icon,
.modal-card .ui-icon {
  filter: brightness(0) !important;
}
/* admin key: white button -> black key, active black button -> white key */
.site-topbar .edit-toggle .ui-icon {
  filter: brightness(0) !important;
  opacity: 1 !important;
}
.site-topbar .edit-toggle.on .ui-icon {
  filter: brightness(0) invert(1) !important;
  opacity: 1 !important;
}
.history-lock-icon .ui-icon {
  width: 24px;
  height: 24px;
  filter: brightness(0) !important;
  opacity: 0.72;
  margin: auto;
}

/* v0.3.63 — exchange banner asset stays rectangular; receiver frame owns rounding */
.owner-banner-result > img,
.owner-banner-preview img,
.owner-banner-maker-preview img {
  border-radius: 0;
}
.friend-banner-card {
  border-radius: 18px;
  overflow: hidden;
}
.friend-banner-card img {
  border-radius: 0;
}

/* v0.3.63 — spoiler button icon inversion */
.site-topbar .top-actions .spoiler-toggle {
  mix-blend-mode: normal !important;
  background: #fff !important;
  color: #111 !important;
  border-color: #d9d6d2 !important;
  box-shadow: 0 1px 4px rgba(0, 0, 0, 0.08);
}
.site-topbar .top-actions .spoiler-toggle .ui-icon {
  filter: brightness(0) !important;
  opacity: 1 !important;
}
.site-topbar .top-actions .spoiler-toggle.on {
  background: #171719 !important;
  color: #fff !important;
  border-color: #171719 !important;
}
.site-topbar .top-actions .spoiler-toggle.on .ui-icon {
  filter: brightness(0) invert(1) !important;
  opacity: 1 !important;
}
/* v0.3.64 · timeline-title linked tags */
.timeline-ref-tags {
  display: flex;
  flex-wrap: wrap;
  gap: 6px;
  margin-top: 8px;
  position: relative;
  z-index: 2;
}
.timeline-ref-tag {
  position: relative;
  display: inline-flex;
  align-items: center;
  min-height: 24px;
  padding: 5px 9px;
  border: 1px solid currentColor;
  border-radius: 999px;
  background: rgba(255, 255, 255, 0.72);
  color: inherit;
  font:
    700 9px/1 system-ui,
    sans-serif;
  letter-spacing: 0.02em;
  white-space: nowrap;
  cursor: help;
}
.timeline-ref-pop {
  position: absolute;
  left: 0;
  bottom: calc(100% + 8px);
  z-index: 40;
  width: min(290px, 72vw);
  padding: 12px 14px;
  border-radius: 13px;
  background: #171719;
  color: #fff;
  box-shadow: 0 12px 36px rgba(0, 0, 0, 0.24);
  white-space: normal;
  opacity: 0;
  visibility: hidden;
  transform: translateY(5px);
  transition: 0.14s ease;
  pointer-events: none;
  text-align: left;
}
.timeline-ref-pop::after {
  content: "";
  position: absolute;
  top: 100%;
  left: 18px;
  border: 6px solid transparent;
  border-top-color: #171719;
}
.timeline-ref-pop b {
  display: block;
  font-size: 12px;
  margin-bottom: 3px;
}
.timeline-ref-pop small {
  display: block;
  font-size: 9px;
  opacity: 0.55;
  margin-bottom: 5px;
}
.timeline-ref-pop p {
  margin: 0;
  font-size: 11px;
  line-height: 1.55;
  opacity: 0.86;
  display: -webkit-box;
  -webkit-line-clamp: 5;
  -webkit-box-orient: vertical;
  overflow: hidden;
}
.timeline-ref-tag:hover .timeline-ref-pop,
.timeline-ref-tag:focus-within .timeline-ref-pop {
  opacity: 1;
  visibility: visible;
  transform: none;
}
.timeline-ref-picker {
  display: grid;
  gap: 6px;
  margin-top: 7px;
  max-height: 190px;
  overflow: auto;
  padding: 8px;
  border: 1px solid #0002;
  border-radius: 12px;
  background: #f7f6f3;
}
.timeline-ref-picker label {
  display: flex;
  align-items: center;
  gap: 8px;
  padding: 8px 9px;
  border-radius: 9px;
  background: #fff;
  border: 1px solid #0001;
  font-size: 12px;
  cursor: pointer;
}
.timeline-ref-picker input {
  accent-color: #171719;
}
.timeline-ref-picker span {
  min-width: 0;
  overflow: hidden;
  text-overflow: ellipsis;
  white-space: nowrap;
}
.trpg-log-copy .timeline-ref-tags {
  margin-top: 5px;
}
.trpg-log-copy .timeline-ref-tag {
  font-size: 8px;
  min-height: 20px;
  padding: 4px 7px;
}

/* Connected event tag archive */
.tag-archive-page {
  /* v0.3.213 — checklist-page와 같은 이유(내용이 짧으면 .site-view 그라데이션이
     아래로 비쳐 보임)로 뷰포트 기준 단위로 변경. */
  min-height: 100vh;
  min-height: 100dvh;
  padding: 72px 28px 118px;
  background: linear-gradient(180deg, color-mix(in srgb, var(--world-bg, #f4f2ef) 88%, #fff), var(--world-bg, #f4f2ef));
  color: #2a272c;
}
.tag-archive-shell {
  width: min(980px, 100%);
  margin: 0 auto;
}
.tag-archive-head,
.tag-detail-head {
  display: flex;
  align-items: flex-end;
  justify-content: space-between;
  gap: 24px;
  padding: 0 4px 24px;
  border-bottom: 1px solid color-mix(in srgb, var(--accent) 18%, #d9d3ce);
}
.tag-archive-head small,
.tag-detail-head small,
.tag-linked-section > header small,
.tag-story-card small {
  display: block;
  color: var(--accent);
  font-size: 9px;
  font-weight: 900;
  letter-spacing: 0.18em;
}
.tag-archive-head h1,
.tag-detail-head h1 {
  margin: 6px 0 0;
  font-family: "Noto Serif KR", Batang, serif;
  font-size: clamp(32px, 5vw, 54px);
  font-weight: 700;
  letter-spacing: -0.045em;
  line-height: 1;
}
.tag-archive-head p {
  max-width: 590px;
  margin: 12px 0 0;
  color: #777177;
  font-size: 12px;
  line-height: 1.7;
}
.tag-archive-head > strong,
.tag-detail-head > span {
  display: flex;
  align-items: baseline;
  gap: 6px;
  color: var(--accent);
  font:
    800 28px/1 system-ui,
    sans-serif;
  white-space: nowrap;
}
.tag-archive-head > strong small,
.tag-detail-head > span small {
  font-size: 8px;
  color: #9b9499;
  letter-spacing: 0.14em;
}
.tag-index-list {
  display: grid;
  gap: 10px;
  margin-top: 18px;
}
.tag-index-card {
  position: relative;
  display: grid;
  grid-template-columns: 54px minmax(0, 1fr) auto 22px;
  align-items: center;
  gap: 14px;
  width: 100%;
  padding: 16px 18px;
  border: 1px solid #e4ded9;
  border-radius: 18px;
  background: rgba(255, 255, 255, 0.78);
  color: inherit;
  text-align: left;
  cursor: pointer;
  transition: 0.18s ease;
}
.tag-index-card:hover {
  transform: translateY(-2px);
  border-color: color-mix(in srgb, var(--accent) 46%, #ddd5d0);
  box-shadow: 0 10px 28px rgba(42, 35, 40, 0.06);
}
.tag-index-no {
  display: grid;
  place-items: center;
  width: 44px;
  height: 44px;
  border: 1px solid color-mix(in srgb, var(--accent) 25%, #ddd);
  border-radius: 14px;
  color: var(--accent);
  font:
    900 10px/1 system-ui,
    sans-serif;
  letter-spacing: 0.12em;
  background: color-mix(in srgb, var(--accent) 5%, #fff);
}
.tag-index-copy {
  min-width: 0;
}
.tag-index-copy > small {
  color: #a19a9f;
  font-size: 8px;
  font-weight: 900;
  letter-spacing: 0.16em;
}
.tag-index-copy h2 {
  margin: 3px 0 4px;
  font-family: "Noto Serif KR", Batang, serif;
  font-size: 19px;
  letter-spacing: -0.035em;
}
.tag-index-copy > p {
  overflow: hidden;
  margin: 0;
  color: #777177;
  font-size: 10px;
  line-height: 1.55;
  text-overflow: ellipsis;
  white-space: nowrap;
}
.tag-index-meta {
  display: flex;
  align-items: center;
  gap: 8px;
  margin-top: 8px;
}
.tag-index-meta .timeline-people {
  margin: 0;
}
.tag-link-count {
  color: #9a9298;
  font-size: 8px;
  font-weight: 900;
  letter-spacing: 0.1em;
}
.tag-index-types {
  display: flex;
  flex-wrap: wrap;
  justify-content: flex-end;
  gap: 5px;
  max-width: 220px;
}
.tag-index-types span,
.tag-type-counts span {
  padding: 5px 7px;
  border: 1px solid #e6e0dc;
  border-radius: 999px;
  background: #fff;
  color: #8b8489;
  font-size: 7px;
  font-weight: 900;
  letter-spacing: 0.08em;
}
.tag-index-types b {
  color: var(--accent);
}
.tag-index-card > i {
  color: var(--accent);
  font-style: normal;
  font-size: 14px;
}
.tag-back {
  margin-bottom: 16px;
  border: 0;
  background: none;
  padding: 5px 2px;
  color: #817a80;
  font-size: 10px;
  font-weight: 900;
  letter-spacing: 0.12em;
  cursor: pointer;
}
.tag-back:hover {
  color: var(--accent);
}
.tag-detail-head {
  align-items: center;
}
.tag-detail-head .timeline-people {
  margin-top: 10px;
}
.tag-story-card {
  display: flex;
  align-items: flex-end;
  justify-content: space-between;
  gap: 22px;
  margin-top: 18px;
  padding: 22px;
  border: 1px solid color-mix(in srgb, var(--accent) 22%, #e2dcd8);
  border-radius: 20px;
  background: color-mix(in srgb, var(--accent) 5%, #fff);
}
.tag-story-card h2 {
  margin: 5px 0 7px;
  font-family: "Noto Serif KR", Batang, serif;
  font-size: 22px;
}
.tag-story-card p {
  max-width: 680px;
  margin: 0;
  color: #6f696e;
  font-size: 11px;
  line-height: 1.75;
}
.tag-story-card button {
  flex: 0 0 auto;
  border: 1px solid color-mix(in srgb, var(--accent) 45%, #ddd);
  border-radius: 999px;
  background: #fff;
  padding: 9px 13px;
  color: var(--accent);
  font-size: 9px;
  font-weight: 900;
  cursor: pointer;
}
.tag-linked-section {
  margin-top: 22px;
}
.tag-linked-section > header {
  display: flex;
  align-items: flex-end;
  justify-content: space-between;
  gap: 18px;
  margin-bottom: 10px;
  padding: 0 3px;
}
.tag-linked-section h2 {
  margin: 4px 0 0;
  font-size: 16px;
}
.tag-type-counts {
  display: flex;
  gap: 5px;
}
.tag-link-list {
  display: grid;
  grid-template-columns: repeat(2, minmax(0, 1fr));
  gap: 9px;
}
.tag-link-card {
  display: grid;
  grid-template-columns: 62px minmax(0, 1fr) 20px;
  align-items: center;
  gap: 11px;
  min-height: 78px;
  padding: 8px;
  border: 1px solid #e5dfdb;
  border-radius: 16px;
  background: rgba(255, 255, 255, 0.82);
  color: inherit;
  text-align: left;
  cursor: pointer;
  transition: 0.16s ease;
}
.tag-link-card:hover {
  border-color: color-mix(in srgb, var(--accent) 45%, #ddd);
  transform: translateY(-1px);
}
.tag-link-thumb,
.tag-link-glyph {
  display: grid;
  place-items: center;
  width: 62px;
  height: 62px;
  overflow: hidden;
  border-radius: 11px;
  background: color-mix(in srgb, var(--accent) 7%, #f4f1ee);
}
.tag-link-thumb img {
  width: 100%;
  height: 100%;
  object-fit: cover;
}
.tag-link-glyph .ui-icon {
  width: 21px;
  height: 21px;
  opacity: 0.58;
  filter: none;
}
.tag-link-copy {
  min-width: 0;
  display: grid;
  gap: 2px;
}
.tag-link-copy small {
  color: var(--accent);
  font-size: 7px;
  font-weight: 900;
  letter-spacing: 0.12em;
}
.tag-link-copy b {
  overflow: hidden;
  font-size: 12px;
  text-overflow: ellipsis;
  white-space: nowrap;
}
.tag-link-copy em {
  overflow: hidden;
  color: #9a9398;
  font-size: 8px;
  font-style: normal;
  text-overflow: ellipsis;
  white-space: nowrap;
}
.tag-link-card > i {
  color: var(--accent);
  font-style: normal;
}
.tag-empty {
  grid-column: 1/-1;
  padding: 36px 18px;
  border: 1px dashed #ddd5d0;
  border-radius: 18px;
  text-align: center;
  color: #999;
}
.tag-empty b {
  display: block;
  color: #777;
  font-size: 10px;
  letter-spacing: 0.14em;
}
.tag-empty p {
  margin: 7px 0 0;
  font-size: 10px;
}
@media (max-width: 650px) {
  .tag-archive-page {
    padding: 66px 12px 92px;
  }
  .tag-archive-head,
  .tag-detail-head {
    align-items: flex-start;
  }
  .tag-archive-head > strong,
  .tag-detail-head > span {
    font-size: 20px;
  }
  .tag-index-card {
    grid-template-columns: 42px minmax(0, 1fr) 18px;
    gap: 9px;
    padding: 12px;
  }
  .tag-index-no {
    width: 36px;
    height: 36px;
    border-radius: 11px;
  }
  .tag-index-types {
    display: none;
  }
  .tag-index-copy > p {
    white-space: normal;
    display: -webkit-box;
    -webkit-line-clamp: 2;
    -webkit-box-orient: vertical;
  }
  .tag-story-card {
    align-items: stretch;
    flex-direction: column;
  }
  .tag-story-card button {
    align-self: flex-start;
  }
  .tag-link-list {
    grid-template-columns: 1fr;
  }
  .tag-linked-section > header {
    align-items: flex-start;
    flex-direction: column;
  }
  .tag-detail-head {
    gap: 10px;
  }
}
.talk-window-head .timeline-ref-tags {
  margin-top: 7px;
}
.gallery-item .timeline-ref-tags {
  margin: 6px 0 2px;
}
.gallery-reader .timeline-ref-tags {
  margin: 10px 0 14px;
}
@media (max-width: 680px) {
  .timeline-ref-pop {
    position: fixed;
    left: 16px;
    right: 16px;
    bottom: 84px;
    width: auto;
  }
  .timeline-ref-pop::after {
    display: none;
  }
}

/* ===== lope v0.3.65 — playlist lyrics / TALK quote card ===== */
.music-track-wrap {
  border-bottom: 1px solid #0001;
}
.music-track-wrap .music-track {
  border-bottom: 0;
}
.music-track-actions {
  display: flex;
  align-items: center;
  justify-content: flex-end;
  gap: 7px;
  flex-wrap: wrap;
}
.music-track-actions > button {
  border: 1px solid #0002;
  background: #fff;
  border-radius: 999px;
  padding: 9px 13px;
  font: 700 9px/1 system-ui;
  letter-spacing: 0.08em;
  color: #242126;
}
/* v0.3.324 — 글자가 9px로 아주 작은 버튼이라, 기본 아이콘 크기(13px)로도 아이콘이
   글자보다 눈에 띄게 커 보였습니다. */
.music-track-actions > button .button-ui-icon {
  width: 11px;
  height: 11px;
  vertical-align: -1.5px;
}
.music-track-actions > button.on,
.music-track.playing .music-track-actions > [data-music-play],
.music-track.playing .music-track-actions > [data-mplay] {
  background: #171719;
  color: #fff;
  border-color: #171719;
}
.music-lyrics-panel {
  margin: 0 0 14px 92px;
  padding: 18px 20px 21px;
  border-radius: 15px;
  background: color-mix(in srgb, var(--accent, #9f7d86) 7%, #fff);
  border: 1px solid color-mix(in srgb, var(--accent, #9f7d86) 14%, #ddd);
}
.music-lyrics-panel header {
  display: flex;
  align-items: baseline;
  gap: 10px;
  padding-bottom: 12px;
  margin-bottom: 10px;
  border-bottom: 1px solid #0001;
}
.music-lyrics-panel header small {
  font:
    800 8px/1 Arial,
    sans-serif;
  letter-spacing: 0.2em;
  color: var(--accent, #9f7d86);
}
.music-lyrics-panel header b {
  font-size: 11px;
  color: #777;
}
.music-lyrics-body {
  display: grid;
  gap: 2px;
}
.music-lyrics-line,
.music-lyrics-gap {
  margin: 0 !important;
  padding: 3px 0;
  font-size: 12px;
  line-height: 1.85;
  color: #686268;
  white-space: pre-wrap;
}
.music-lyrics-line.favorite {
  font-weight: 850;
  color: var(--accent, #9f7d86);
  font-size: 12.5px;
}
.lyric-edit-field > textarea {
  min-height: 190px;
}
.lyric-edit-field > small {
  display: block;
  color: #8d8994;
  font-size: 10px;
  line-height: 1.55;
  margin: 6px 0 10px;
}
.lyric-highlight-picker {
  display: grid;
  max-height: 230px;
  overflow: auto;
  border: 1px solid #34323a;
  border-radius: 10px;
  background: #151419;
}
.lyric-highlight-line {
  display: block;
  border-bottom: 1px solid #2a282e;
}
.lyric-highlight-line:last-child {
  border-bottom: 0;
}
.lyric-highlight-line input {
  position: absolute;
  opacity: 0;
  pointer-events: none;
}
.lyric-highlight-line span {
  display: grid;
  grid-template-columns: 30px 1fr;
  gap: 7px;
  align-items: start;
  padding: 8px 10px;
  color: #b9b5bf;
  font-size: 11px;
  line-height: 1.5;
  cursor: pointer;
}
.lyric-highlight-line em {
  font: 700 9px/1.6 monospace;
  color: #65616a;
  font-style: normal;
}
.lyric-highlight-line input:checked + span {
  background: color-mix(in srgb, var(--accent, #9f7d86) 18%, #17161b);
  color: color-mix(in srgb, var(--accent, #9f7d86) 75%, #fff);
  font-weight: 800;
}
.lyric-highlight-line input:checked + span em {
  color: var(--accent, #9f7d86);
}
.lyric-picker-empty {
  padding: 18px 12px;
  margin: 0;
  color: #777;
  font-size: 10px;
  text-align: center;
}

.talk-bubble {
  user-select: text !important;
  -webkit-user-select: text !important;
}
.talk-selection-tool {
  position: fixed;
  z-index: 10140;
  border: 1px solid color-mix(in srgb, var(--accent, #9f7d86) 32%, #bbb);
  border-radius: 999px;
  background: #fff;
  color: #29252a;
  padding: 9px 13px;
  box-shadow: 0 9px 28px #0002;
  font: 800 10px/1 system-ui;
  letter-spacing: 0.03em;
  white-space: nowrap;
  animation: talkSelectionPop 0.14s ease-out;
}
.talk-selection-tool:hover {
  background: var(--accent, #9f7d86);
  color: #fff;
  border-color: var(--accent, #9f7d86);
}
@keyframes talkSelectionPop {
  from {
    opacity: 0;
    transform: translateY(5px) scale(0.96);
  }
  to {
    opacity: 1;
    transform: none;
  }
}
.talk-quote-overlay {
  position: fixed;
  inset: 0;
  z-index: 10150;
  display: grid;
  place-items: center;
  padding: 24px;
  background: rgba(18, 16, 20, 0.56);
  backdrop-filter: blur(9px);
}
.talk-quote-window {
  width: min(560px, 94vw);
  max-height: 94dvh;
  overflow: auto;
  padding: 18px;
  border-radius: 22px;
  background: #f8f7f5;
  border: 1px solid #fff8;
  box-shadow: 0 28px 90px #0005;
}
.talk-quote-window > header {
  display: flex;
  align-items: center;
  justify-content: space-between;
  padding: 3px 3px 14px;
}
.talk-quote-window > header small {
  display: block;
  font:
    800 8px/1 Arial,
    sans-serif;
  letter-spacing: 0.18em;
  color: #999;
}
.talk-quote-window > header h2 {
  font:
    650 24px/1.15 Georgia,
    "Noto Serif KR",
    serif;
  margin: 4px 0 0;
}
.talk-quote-window > header > button {
  width: 34px;
  height: 34px;
  border: 0;
  border-radius: 50%;
  background: #e8e5e1;
  color: #555;
  font-size: 20px;
}
.talk-quote-preview {
  position: relative;
  aspect-ratio: 1;
  border-radius: 18px;
  overflow: hidden;
  padding: 14% 12% 10%;
  display: flex;
  flex-direction: column;
  justify-content: center;
  background: var(--world-bg, #f4f2ef);
  border: 1px solid #0001;
  box-shadow: inset 0 0 0 1px #fff8;
}
.talk-quote-preview:before,
.talk-quote-preview:after {
  content: "";
  position: absolute;
  border-radius: 50%;
  background: var(--accent, #9f7d86);
  opacity: 0.1;
}
.talk-quote-preview:before {
  width: 52%;
  aspect-ratio: 1;
  right: -16%;
  top: -13%;
}
.talk-quote-preview:after {
  width: 38%;
  aspect-ratio: 1;
  left: -15%;
  bottom: -14%;
}
.talk-quote-preview > i {
  position: absolute;
  left: 11%;
  right: 11%;
  top: 12%;
  height: 1px;
  background: var(--accent, #9f7d86);
  opacity: 0.32;
}
.talk-quote-preview blockquote {
  position: relative;
  z-index: 1;
  margin: auto 0;
  text-align: center;
  font:
    600 clamp(16px, 3.5vw, 23px)/1.8 "Noto Sans KR",
    sans-serif;
  word-break: keep-all;
  color: #272329;
}
.talk-quote-preview blockquote:before {
  content: "“";
  display: block;
  text-align: left;
  color: var(--accent, #9f7d86);
  font:
    700 55px/0.8 Georgia,
    serif;
  margin-bottom: 12px;
}
.talk-quote-preview footer {
  position: relative;
  z-index: 1;
  display: flex;
  flex-direction: column;
  gap: 4px;
}
.talk-quote-preview footer b {
  font:
    800 10px/1.2 Arial,
    "Noto Sans KR",
    sans-serif;
  letter-spacing: 0.09em;
  color: var(--accent, #9f7d86);
}
.talk-quote-preview footer span {
  font-size: 9px;
  color: #777;
}
.talk-quote-actions {
  display: flex;
  justify-content: flex-end;
  gap: 8px;
  padding-top: 14px;
}
.talk-quote-actions button {
  border: 1px solid #0002;
  border-radius: 999px;
  background: #fff;
  padding: 10px 15px;
  font-size: 10px;
  font-weight: 800;
}
.talk-quote-actions button.primary {
  border-color: var(--accent, #9f7d86);
  background: var(--accent, #9f7d86);
  color: #fff;
}

@media (max-width: 760px) {
  .music-track-actions {
    grid-column: 2;
    justify-content: flex-start;
  }
  .music-track-wrap .music-track {
    grid-template-columns: 58px 1fr;
  }
  .music-lyrics-panel {
    margin-left: 0;
    padding: 16px;
  }
  .talk-quote-overlay {
    padding: 8px;
  }
  .talk-quote-window {
    width: min(520px, 100%);
    padding: 12px;
    border-radius: 17px;
  }
  .talk-quote-preview {
    border-radius: 14px;
  }
  .talk-selection-tool {
    font-size: 9px;
    padding: 8px 11px;
  }
}

/* ===== lope v0.3.66 · Easter egg popup templates ===== */
.easter-template-panel {
  border: 1px solid #303036;
  background: #1b1b1f;
  border-radius: 13px;
  padding: 11px;
  margin: 8px 0 2px;
}
.easter-template-panel .mf:last-child {
  margin-bottom: 0;
}
.easter-upload-btn {
  display: inline-flex !important;
  align-items: center;
  justify-content: center;
  margin-top: 6px;
  cursor: pointer;
  width: max-content;
}
.easter-captcha-admin-add {
  display: grid;
  grid-template-columns: 1fr auto;
  gap: 6px;
}
.easter-captcha-admin-add input {
  min-width: 0;
}
.easter-captcha-admin-grid {
  display: grid;
  grid-template-columns: repeat(3, minmax(0, 1fr));
  gap: 6px;
  margin-top: 8px;
}
.easter-captcha-admin-grid > div {
  position: relative;
  aspect-ratio: 1;
  border: 1px solid #34343a;
  border-radius: 8px;
  overflow: hidden;
  background: #25252a;
}
.easter-captcha-admin-grid img {
  width: 100%;
  height: 100%;
  object-fit: cover;
  display: block;
}
.easter-captcha-admin-grid button {
  position: absolute;
  right: 4px;
  top: 4px;
  width: 22px;
  height: 22px;
  border: 0;
  border-radius: 7px;
  background: rgba(13, 13, 15, 0.82);
  color: #fff;
  cursor: pointer;
}
.easter-captcha-admin-grid > span {
  grid-column: 1/-1;
  padding: 14px;
  border: 1px dashed #3b3b42;
  border-radius: 9px;
  color: #777;
  text-align: center;
  font-size: 9px;
}

.easter-captcha-back {
  position: fixed;
  z-index: 320;
  inset: 0;
  display: grid;
  place-items: center;
  padding: 18px;
  background: rgba(13, 15, 19, 0.48);
  backdrop-filter: blur(4px);
}
.easter-captcha {
  width: min(320px, calc(100vw - 28px));
  background: #f7f7f7;
  border: 1px solid #cfd1d4;
  box-shadow: 0 22px 70px rgba(0, 0, 0, 0.32);
  padding: 8px;
  color: #202124;
  font-family: Arial, "Noto Sans KR", sans-serif;
}
.easter-captcha header {
  background: var(--egg-color, #4b90df);
  color: #fff;
  padding: 20px 22px 18px;
  margin-bottom: 6px;
}
.easter-captcha header strong {
  display: block;
  font-size: 19px;
  line-height: 1.35;
  font-weight: 700;
  word-break: keep-all;
}
.easter-captcha header span {
  display: block;
  margin-top: 6px;
  font-size: 10px;
  line-height: 1.45;
  opacity: 0.96;
}
.easter-captcha-grid {
  display: grid;
  grid-template-columns: repeat(3, 1fr);
  gap: 3px;
}
.easter-captcha-tile {
  position: relative;
  aspect-ratio: 1;
  overflow: hidden;
  padding: 0;
  border: 0;
  background: #d8dadd;
  cursor: pointer;
}
.easter-captcha-tile img {
  width: 100%;
  height: 100%;
  display: block;
  object-fit: cover;
  transition:
    filter 0.19s ease,
    opacity 0.19s ease,
    transform 0.19s ease;
}
.easter-captcha-tile > span {
  position: absolute;
  inset: 0;
  display: grid;
  place-items: center;
  font-size: 8px;
  letter-spacing: 0.12em;
  color: #92979e;
}
.easter-captcha-tile:after {
  content: "";
  position: absolute;
  inset: 0;
  background: #fff;
  opacity: 0;
  transition: opacity 0.18s;
}
.easter-captcha-tile.is-changing img {
  filter: brightness(1.9);
  opacity: 0.08;
  transform: scale(0.96);
}
.easter-captcha-tile.is-changing:after {
  opacity: 0.78;
}
.easter-captcha footer {
  display: flex;
  align-items: center;
  justify-content: space-between;
  min-height: 54px;
  padding: 8px 2px 0 10px;
}
.easter-captcha-fake-icons {
  font-size: 21px;
  color: #73777c;
  letter-spacing: 0.04em;
  white-space: nowrap;
}
.easter-captcha-confirm {
  border: 0;
  background: var(--egg-color, #4b90df);
  color: #fff;
  min-width: 98px;
  height: 48px;
  padding: 0 18px;
  font-weight: 700;
  font-size: 13px;
  cursor: pointer;
}
.easter-captcha-confirm:hover {
  filter: brightness(0.96);
}

.easter-sms {
  position: fixed;
  z-index: 325;
  right: 22px;
  bottom: 22px;
  width: min(360px, calc(100vw - 28px));
  background: #fff;
  color: #222;
  border: 1px solid rgba(30, 30, 34, 0.13);
  border-radius: 20px;
  box-shadow: 0 22px 70px rgba(18, 18, 25, 0.24);
  overflow: hidden;
  transform: translateY(24px) scale(0.98);
  opacity: 0;
  transition:
    transform 0.2s ease,
    opacity 0.2s ease;
  font-family: "Noto Sans KR", sans-serif;
}
.easter-sms.show {
  transform: translateY(0) scale(1);
  opacity: 1;
}
.easter-sms-head {
  display: flex;
  align-items: center;
  justify-content: space-between;
  padding: 14px 14px 10px 16px;
  border-bottom: 1px solid #efeff1;
}
.easter-sms-person {
  display: flex;
  align-items: center;
  gap: 10px;
  min-width: 0;
}
.easter-sms-person > img,
.easter-sms-person > span {
  width: 42px;
  height: 42px;
  border-radius: 50%;
  object-fit: cover;
  background: #ececef;
  display: grid;
  place-items: center;
  flex: none;
}
.easter-sms-person > span {
  font-size: 20px;
  color: #aaa;
}
.easter-sms-person div {
  min-width: 0;
}
.easter-sms-person small {
  display: block;
  font-size: 7px;
  letter-spacing: 0.16em;
  color: #aaa;
}
.easter-sms-person b {
  display: block;
  margin-top: 3px;
  font-size: 12px;
  white-space: nowrap;
  overflow: hidden;
  text-overflow: ellipsis;
}
.easter-sms-close {
  border: 0;
  background: transparent;
  width: 30px;
  height: 30px;
  border-radius: 50%;
  font-size: 21px;
  line-height: 1;
  color: #999;
  cursor: pointer;
  /* v0.3.335 — 아이콘이 인라인 기본 정렬(baseline)로 얹혀서 동그라미 중앙에서
     살짝 벗어나 보이던 것을 grid로 정확히 중앙 정렬. */
  display: grid;
  place-items: center;
}
.easter-sms-close:hover {
  background: #f2f2f4;
  color: #555;
}
.easter-sms-body {
  padding: 16px;
  max-height: 290px;
  overflow: auto;
}
.easter-sms-bubble {
  width: max-content;
  max-width: 84%;
  padding: 10px 12px;
  border-radius: 4px 15px 15px 15px;
  background: #f0f0f3;
  color: #29292d;
  font-size: 11px;
  line-height: 1.65;
  word-break: break-word;
}
.easter-sms-reaction {
  margin-top: 8px;
  opacity: 0;
  transform: translateY(5px);
  transition: 0.18s;
}
.easter-sms-reaction.show {
  opacity: 1;
  transform: none;
}
.easter-sms-bubble.reaction {
  background: #ececf0;
}
.easter-sms-reply {
  display: grid;
  grid-template-columns: 1fr auto;
  gap: 7px;
  padding: 10px 12px 12px;
  border-top: 1px solid #efeff1;
}
.easter-sms-reply input {
  min-width: 0;
  border: 1px solid #dedee3;
  border-radius: 999px;
  background: #fafafa;
  padding: 9px 12px;
  font-size: 10px;
  outline: none;
}
.easter-sms-reply input:focus {
  border-color: #b8b8c1;
  background: #fff;
}
.easter-sms-reply button {
  border: 0;
  border-radius: 999px;
  background: var(--egg-color, #222228);
  color: #fff;
  padding: 0 15px;
  font-size: 10px;
  font-weight: 700;
  cursor: pointer;
}
@media (max-width: 580px) {
  .easter-sms {
    right: 10px;
    bottom: 10px;
    width: calc(100vw - 20px);
  }
  .easter-captcha-back {
    padding: 10px;
  }
  .easter-captcha {
    width: min(330px, calc(100vw - 20px));
  }
}

/* v0.3.67 · LOOKBOOK / 시밀러룩 */
.similar-page {
  /* v0.3.213 — checklist-page와 같은 이유(내용이 짧으면 .site-view 그라데이션이
     아래로 비쳐 보임)로 뷰포트 기준 단위로 변경. */
  min-height: 100vh;
  min-height: 100dvh;
  padding: 72px 28px 118px;
  background: linear-gradient(180deg, color-mix(in srgb, var(--world-bg, #f4f2ef) 86%, #fff), var(--world-bg, #f4f2ef));
  color: #2a272c;
}
.similar-shell {
  width: min(1080px, 100%);
  margin: 0 auto;
}
.similar-page-head {
  display: flex;
  align-items: flex-end;
  justify-content: space-between;
  gap: 24px;
  padding: 0 4px 24px;
  border-bottom: 1px solid color-mix(in srgb, var(--accent) 16%, #d9d3ce);
}
.similar-page-head small,
.similar-detail-head small {
  display: block;
  margin-bottom: 7px;
  color: var(--accent);
  font-size: 10px;
  font-weight: 900;
  letter-spacing: 0.19em;
}
.similar-page-head h1,
.similar-detail-head h1 {
  margin: 0;
  font-family: "Noto Serif KR", Batang, serif;
  font-size: clamp(32px, 5vw, 54px);
  font-weight: 700;
  letter-spacing: -0.045em;
  line-height: 1;
}
.similar-page-head p,
.similar-detail-head p {
  margin: 12px 0 0;
  color: #756f75;
  font-size: 13px;
  line-height: 1.7;
}
.similar-head-mark {
  position: relative;
  width: 70px;
  height: 42px;
  flex: 0 0 auto;
}
.similar-head-mark:before,
.similar-head-mark:after {
  content: "";
  position: absolute;
  top: 12px;
  width: 36px;
  height: 18px;
  border: 1px solid color-mix(in srgb, var(--accent) 42%, #bbb);
  border-radius: 50%;
  background: color-mix(in srgb, var(--accent) 5%, #fff);
}
.similar-head-mark:before {
  left: 4px;
  transform: rotate(-14deg);
}
.similar-head-mark:after {
  right: 4px;
  transform: rotate(14deg);
}
.similar-filter {
  display: flex;
  gap: 7px;
  overflow-x: auto;
  padding: 17px 3px 14px;
  scrollbar-width: none;
}
.similar-filter::-webkit-scrollbar {
  display: none;
}
.similar-filter button {
  /* v0.3.227 — 다른 페이지의 필터 탭(갤러리 앨범 탭 7px, 타임라인 필터 7px 등)과
     맞춰서 11px → 7px로 줄였습니다. inherit 대신 다른 필터 탭들과 같은 Arial +
     자간을 써서 "작은 라벨" 느낌도 맞췄습니다. */
  flex: 0 0 auto;
  display: flex;
  align-items: center;
  gap: 7px;
  border: 1px solid color-mix(in srgb, var(--accent) 15%, #d8d3d0);
  border-radius: 999px;
  background: rgba(255, 255, 255, 0.68);
  padding: 8px 12px;
  color: #69646a;
  font:
    700 7px/1 Arial,
    sans-serif;
  letter-spacing: 0.12em;
  cursor: pointer;
  transition: 0.18s;
}
.similar-filter button small {
  display: grid;
  place-items: center;
  min-width: 18px;
  height: 18px;
  padding: 0 4px;
  border-radius: 999px;
  background: #eee9e6;
  color: #8d878c;
  font-size: 9px;
}
.similar-filter button:hover {
  border-color: color-mix(in srgb, var(--accent) 40%, #ddd);
  transform: translateY(-1px);
}
.similar-filter button.on {
  border-color: var(--accent);
  background: var(--accent);
  color: #fff;
  box-shadow: 0 5px 14px color-mix(in srgb, var(--accent) 18%, transparent);
}
.similar-filter button.on small {
  background: rgba(255, 255, 255, 0.22);
  color: #fff;
}
.similar-list {
  display: grid;
  grid-template-columns: repeat(2, minmax(0, 1fr));
  gap: 14px;
  padding-top: 4px;
}
.similar-list-card {
  position: relative;
  display: grid;
  grid-template-columns: minmax(0, 1.08fr) minmax(0, 0.92fr);
  min-height: 280px;
  overflow: hidden;
  border: 1px solid color-mix(in srgb, var(--accent) 12%, #ddd7d3);
  border-radius: 22px;
  background: rgba(255, 255, 255, 0.78);
  padding: 0;
  text-align: left;
  color: inherit;
  cursor: pointer;
  box-shadow: 0 8px 24px rgba(38, 30, 35, 0.035);
  transition:
    transform 0.2s,
    border-color 0.2s,
    box-shadow 0.2s;
}
.similar-list-card:hover {
  transform: translateY(-3px);
  border-color: color-mix(in srgb, var(--accent) 40%, #d8d1cd);
  box-shadow: 0 14px 34px rgba(38, 30, 35, 0.075);
}
.similar-list-visual {
  position: relative;
  display: grid;
  grid-template-columns: 1fr 1fr;
  min-height: 280px;
  padding: 42px 8px 10px;
  background: linear-gradient(
    110deg,
    color-mix(in srgb, var(--sa) 9%, #fff) 0 49.7%,
    color-mix(in srgb, var(--sb) 9%, #fff) 50.3% 100%
  );
  border-right: 1px solid color-mix(in srgb, var(--accent) 10%, #ddd);
}
.similar-list-visual:after {
  content: "";
  position: absolute;
  left: 50%;
  top: 44px;
  bottom: 18px;
  width: 1px;
  background: linear-gradient(transparent, color-mix(in srgb, var(--accent) 18%, #ccc), transparent);
}
.similar-list-index {
  position: absolute;
  left: 14px;
  top: 13px;
  color: var(--accent);
  font-size: 9px;
  font-weight: 900;
  letter-spacing: 0.15em;
}
.similar-list-visual figure {
  position: relative;
  min-width: 0;
  height: 228px;
  margin: 0;
  display: flex;
  align-items: flex-end;
  justify-content: center;
  overflow: hidden;
}
.similar-list-visual figure > span {
  position: absolute;
  left: 9px;
  top: 5px;
  z-index: 2;
  max-width: calc(100% - 18px);
  overflow: hidden;
  text-overflow: ellipsis;
  white-space: nowrap;
  color: #8b858a;
  font-size: 9px;
  font-weight: 800;
  letter-spacing: 0.05em;
}
.similar-list-visual figure img {
  display: block;
  max-width: 96%;
  width: auto;
  height: 100%;
  object-fit: contain;
  object-position: center bottom;
  filter: drop-shadow(0 7px 8px rgba(53, 44, 49, 0.07));
  transition: transform 0.2s;
}
.similar-list-card:hover .similar-list-visual figure img {
  transform: translateY(-3px);
}
.similar-list-copy {
  display: flex;
  min-width: 0;
  flex-direction: column;
  padding: 20px 18px 17px;
}
.similar-list-tags {
  display: flex;
  flex-wrap: wrap;
  gap: 5px;
  margin-bottom: 13px;
}
.similar-list-tags span,
.similar-detail-tags span {
  border: 1px solid color-mix(in srgb, var(--accent) 18%, #ddd);
  border-radius: 999px;
  background: color-mix(in srgb, var(--accent) 5%, #fff);
  padding: 4px 8px;
  color: color-mix(in srgb, var(--accent) 76%, #555);
  font-size: 9px;
  font-weight: 800;
}
.similar-list-copy h2 {
  margin: 0;
  font-family: "Noto Serif KR", Batang, serif;
  font-size: 22px;
  line-height: 1.3;
  letter-spacing: -0.035em;
}
.similar-list-copy p {
  display: -webkit-box;
  margin: 8px 0 0;
  overflow: hidden;
  color: #777178;
  font-size: 11px;
  line-height: 1.65;
  -webkit-line-clamp: 4;
  -webkit-box-orient: vertical;
}
.similar-list-copy em {
  display: flex;
  align-items: center;
  justify-content: space-between;
  margin-top: auto;
  padding-top: 17px;
  border-top: 1px solid #ece8e5;
  color: #928b91;
  font-size: 9px;
  font-style: normal;
  font-weight: 900;
  letter-spacing: 0.14em;
}
.similar-list-copy em b {
  color: var(--accent);
  font-size: 16px;
}
.similar-empty {
  grid-column: 1/-1;
  padding: 68px 20px;
  border: 1px dashed color-mix(in srgb, var(--accent) 25%, #d8d2ce);
  border-radius: 20px;
  background: rgba(255, 255, 255, 0.5);
  text-align: center;
}
.similar-empty b {
  color: var(--accent);
  font-size: 11px;
  letter-spacing: 0.15em;
}
.similar-empty p {
  margin: 8px 0 0;
  color: #888;
}
.similar-art-empty {
  display: grid;
  place-items: center;
  width: 100%;
  height: 100%;
  min-height: 120px;
  color: #aaa3a8;
  font-size: 10px;
  font-weight: 900;
  letter-spacing: 0.12em;
  background: repeating-linear-gradient(135deg, rgba(0, 0, 0, 0.018) 0 7px, transparent 7px 14px);
}

.similar-page.detail {
  padding-top: 68px;
}
.similar-back {
  margin-bottom: 16px;
  border: 0;
  background: none;
  padding: 5px 2px;
  color: #817a80;
  font-size: 10px;
  font-weight: 900;
  letter-spacing: 0.12em;
  cursor: pointer;
}
.similar-back:hover {
  color: var(--accent);
}
.similar-detail-head {
  display: flex;
  align-items: flex-end;
  justify-content: space-between;
  gap: 24px;
  padding: 8px 4px 23px;
  border-bottom: 1px solid color-mix(in srgb, var(--accent) 16%, #d9d3ce);
}
.similar-detail-head > div:first-child {
  max-width: 720px;
}
.similar-detail-tags {
  display: flex;
  max-width: 300px;
  flex-wrap: wrap;
  justify-content: flex-end;
  gap: 6px;
  padding-bottom: 3px;
}
.similar-outfit-grid {
  display: grid;
  grid-template-columns: 1fr 1fr;
  gap: 12px;
  padding: 15px 0 0;
}
.similar-outfit-card {
  position: relative;
  overflow: hidden;
  border: 1px solid color-mix(in srgb, var(--look-c) 22%, #dad5d1);
  border-radius: 22px;
  background: linear-gradient(180deg, color-mix(in srgb, var(--look-c) 6%, #fff), rgba(255, 255, 255, 0.82));
  padding: 14px 14px 0;
  /* v0.3.89 — 프로필로 바로 이동할 수 있도록 article → button으로 바뀐 부분 리셋 */
  display: block;
  width: 100%;
  text-align: left;
  font: inherit;
  color: inherit;
  cursor: pointer;
}
.similar-outfit-card header {
  display: flex;
  align-items: flex-start;
  justify-content: space-between;
  gap: 10px;
  padding: 3px 2px 10px;
}
.similar-outfit-card header small {
  display: block;
  color: var(--look-c);
  font-size: 9px;
  font-weight: 900;
  letter-spacing: 0.14em;
}
.similar-outfit-card header h2 {
  margin: 3px 0 0;
  color: #3e3940;
  font-size: 15px;
  letter-spacing: 0.04em;
}
.similar-outfit-card header span {
  display: block;
  margin-top: 2px;
  color: #999298;
  font-size: 10px;
}
.similar-outfit-card header i {
  width: 28px;
  height: 3px;
  margin-top: 4px;
  border-radius: 99px;
  background: var(--look-c);
  opacity: 0.65;
}
.similar-outfit-art {
  /* v0.3.345 — 반신·전신 일러스트가 보통 들어가는 자리인데 450px는 카드 폭 대비
     정사각형에 가까워 세로가 짧다는 요청으로 키움. */
  height: 560px;
  display: flex;
  align-items: flex-end;
  justify-content: center;
  overflow: hidden;
  border: 1px solid color-mix(in srgb, var(--look-c) 12%, #ddd);
  border-radius: 17px 17px 8px 8px;
  background: rgba(255, 255, 255, 0.72);
}
.similar-outfit-art img {
  display: block;
  max-width: 100%;
  width: auto;
  height: 100%;
  object-fit: contain;
  object-position: center bottom;
  filter: drop-shadow(0 8px 10px rgba(42, 35, 40, 0.05));
}
.similar-outfit-card > p {
  min-height: 53px;
  margin: 0;
  padding: 12px 8px 13px;
  text-align: center;
  color: #716b72;
  font-size: 11px;
  line-height: 1.55;
}
.similar-pair-section {
  margin-top: 14px;
  overflow: hidden;
  border: 1px solid color-mix(in srgb, var(--accent) 14%, #d9d4d1);
  border-radius: 22px;
  background: rgba(255, 255, 255, 0.7);
}
.similar-pair-toggle {
  width: 100%;
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: 16px;
  border: 0;
  background: transparent;
  padding: 15px 18px;
  text-align: left;
  color: inherit;
  cursor: pointer;
}
.similar-pair-toggle span small {
  display: block;
  color: var(--accent);
  font-size: 9px;
  font-weight: 900;
  letter-spacing: 0.15em;
}
.similar-pair-toggle span b {
  display: block;
  margin-top: 2px;
  font-size: 13px;
}
.similar-pair-toggle > i {
  display: grid;
  place-items: center;
  width: 28px;
  height: 28px;
  border: 1px solid color-mix(in srgb, var(--accent) 20%, #ddd);
  border-radius: 50%;
  background: #fff;
  color: var(--accent);
  font-size: 16px;
  font-style: normal;
}
.similar-pair-body {
  display: none;
  padding: 2px 14px 16px;
}
.similar-pair-section.open .similar-pair-body {
  display: block;
}
.similar-pair-body figure {
  margin: 0 0 12px;
}
.similar-pair-body figure:last-child {
  margin-bottom: 0;
}
.similar-pair-media {
  display: flex;
  align-items: center;
  justify-content: center;
  min-height: 160px;
  overflow: hidden;
  border-radius: 15px;
  background: color-mix(in srgb, var(--accent) 3%, #f4f1ef);
}
.similar-pair-media img {
  display: block;
  width: auto;
  height: auto;
  max-width: 100%;
  max-height: min(76vh, 920px);
  object-fit: contain;
}
.similar-pair-body figcaption {
  padding: 10px 9px 2px;
  color: #797279;
  font-size: 11px;
  line-height: 1.65;
  text-align: center;
}
.similar-pair-empty {
  padding: 44px 12px;
  text-align: center;
  color: #a39da1;
  font-size: 11px;
}
.similar-description {
  margin-top: 14px;
  border-top: 1px solid color-mix(in srgb, var(--accent) 13%, #dcd7d3);
  padding: 19px 7px 2px;
}
.similar-description small {
  display: block;
  color: var(--accent);
  font-size: 9px;
  font-weight: 900;
  letter-spacing: 0.15em;
}
.similar-description p {
  max-width: 820px;
  margin: 8px 0 0;
  color: #6f696f;
  font-size: 12px;
  line-height: 1.85;
  white-space: pre-line;
}

.similar-modal-outfits {
  display: grid;
  grid-template-columns: 1fr 1fr;
  gap: 8px;
}
.similar-modal-outfits fieldset {
  min-width: 0;
  margin: 0;
  border: 1px solid #ded9d5;
  border-radius: 12px;
  padding: 10px;
}
.similar-modal-outfits legend {
  padding: 0 5px;
  color: var(--accent);
  font-size: 9px;
  font-weight: 900;
  letter-spacing: 0.12em;
}
.similar-art-editor-row {
  display: flex;
  align-items: flex-start;
  gap: 8px;
  margin-bottom: 7px;
  padding: 8px;
  border: 1px solid #ded9d5;
  border-radius: 10px;
  background: #fff;
}
.similar-art-editor-thumb {
  display: grid;
  place-items: center;
  width: 54px;
  height: 68px;
  flex: 0 0 54px;
  overflow: hidden;
  border-radius: 7px;
  background: #f1eeeb;
  color: #aaa;
  font-size: 9px;
}
.similar-art-editor-thumb img {
  width: 100%;
  height: 100%;
  object-fit: cover;
}
.similar-art-editor-row .grow {
  min-width: 0;
}
.similar-art-editor-row input,
.similar-art-editor-row textarea {
  width: 100%;
  margin-bottom: 5px;
}
.similar-art-editor-row textarea {
  min-height: 58px;
}

@media (max-width: 820px) {
  .similar-list {
    grid-template-columns: 1fr;
  }
  .similar-list-card {
    grid-template-columns: minmax(0, 1.05fr) minmax(0, 0.95fr);
  }
  .similar-outfit-art {
    height: 480px;
  }
}
@media (max-width: 600px) {
  .similar-page {
    padding: 66px 12px 92px;
  }
  .similar-page-head,
  .similar-detail-head {
    align-items: flex-start;
    flex-direction: column;
    gap: 9px;
  }
  .similar-head-mark {
    display: none;
  }
  .similar-detail-tags {
    justify-content: flex-start;
    max-width: none;
  }
  .similar-list-card {
    grid-template-columns: 1fr;
    min-height: 0;
    border-radius: 18px;
  }
  .similar-list-visual {
    min-height: 255px;
    border-right: 0;
    border-bottom: 1px solid #e8e3df;
  }
  .similar-list-visual figure {
    height: 215px;
  }
  .similar-list-copy {
    padding: 15px;
  }
  .similar-list-copy p {
    -webkit-line-clamp: 2;
  }
  .similar-outfit-grid {
    grid-template-columns: 1fr;
  }
  .similar-outfit-art {
    height: min(72vh, 520px);
  }
  .similar-pair-section {
    border-radius: 18px;
  }
  .similar-modal-outfits {
    grid-template-columns: 1fr;
  }
}

/* v0.3.68 · CHECKLIST ARCHIVE */
.checklist-page {
  /* v0.3.213 — min-height:100%였을 때, 체크리스트가 없거나 적어서 내용이 짧으면 이
     박스가 실제 화면 높이보다 작게 잡혀서 그 아래로 .site-view의 배경(v0.3.212에서
     생긴 캐릭터색 그라데이션)이 그대로 비쳐 보였습니다("왼쪽에 그라데이션 끊긴 거
     보여" 신고와 일치) — 예전엔 두 배경이 거의 같은 톤이라 안 보이던 문제가, 새
     그라데이션이 뚜렷해지면서 이음매로 드러난 것입니다. 뷰포트 기준 단위로 바꿔
     내용이 짧아도 항상 화면을 꽉 채우게 합니다. */
  min-height: 100vh;
  min-height: 100dvh;
  padding: 72px 28px 118px;
  background: linear-gradient(180deg, color-mix(in srgb, var(--world-bg, #f4f2ef) 88%, #fff), var(--world-bg, #f4f2ef));
  color: #2b282d;
}
.checklist-shell {
  width: min(1040px, 100%);
  margin: 0 auto;
}
.checklist-page-head,
.checklist-detail-head {
  display: flex;
  align-items: flex-end;
  justify-content: space-between;
  gap: 24px;
  padding: 0 4px 24px;
  border-bottom: 1px solid color-mix(in srgb, var(--accent) 16%, #d9d4d0);
}
.checklist-page-head small,
.checklist-detail-head > div > small {
  display: block;
  margin-bottom: 7px;
  color: var(--accent);
  font-size: 10px;
  font-weight: 900;
  letter-spacing: 0.18em;
}
.checklist-page-head h1,
.checklist-detail-head h1 {
  margin: 0;
  font-family: "Noto Serif KR", Batang, serif;
  font-size: clamp(32px, 5vw, 54px);
  font-weight: 700;
  letter-spacing: -0.045em;
  line-height: 1;
}
.checklist-page-head p,
.checklist-detail-head > div > p {
  margin: 11px 0 0;
  color: #777177;
  font-size: 12px;
  line-height: 1.7;
}
.checklist-head-sign {
  position: relative;
  width: 76px;
  height: 54px;
  flex: 0 0 auto;
}
.checklist-head-sign > i {
  position: absolute;
  top: 12px;
  width: 40px;
  height: 31px;
  border: 1px solid color-mix(in srgb, var(--accent) 25%, #d8d2ce);
  border-radius: 10px;
  background: rgba(255, 255, 255, 0.7);
}
.checklist-head-sign > i:first-child {
  left: 0;
  transform: rotate(-7deg);
}
.checklist-head-sign > i:nth-child(2) {
  right: 0;
  transform: rotate(7deg);
}
.checklist-head-sign > b {
  position: absolute;
  left: 50%;
  top: 18px;
  display: grid;
  width: 28px;
  height: 28px;
  place-items: center;
  transform: translateX(-50%);
  border-radius: 50%;
  background: var(--accent);
  box-shadow: 0 5px 13px color-mix(in srgb, var(--accent) 20%, transparent);
  color: #fff;
  font-size: 14px;
}
.checklist-list {
  display: grid;
  grid-template-columns: repeat(2, minmax(0, 1fr));
  gap: 14px;
  padding-top: 18px;
}
.checklist-list-card {
  position: relative;
  overflow: hidden;
  min-height: 255px;
  border: 1px solid color-mix(in srgb, var(--accent) 13%, #dcd6d2);
  border-radius: 21px;
  background: rgba(255, 255, 255, 0.78);
  padding: 18px 18px 15px;
  text-align: left;
  color: inherit;
  cursor: pointer;
  box-shadow: 0 8px 24px rgba(38, 31, 36, 0.035);
  transition: 0.2s;
}
.checklist-list-card:hover {
  transform: translateY(-3px);
  border-color: color-mix(in srgb, var(--accent) 38%, #d8d1cd);
  box-shadow: 0 14px 34px rgba(38, 31, 36, 0.07);
}
.checklist-card-rule {
  position: absolute;
  left: 0;
  right: 0;
  top: 0;
  display: grid;
  height: 4px;
  grid-template-columns: 1fr 1fr;
}
.checklist-card-rule i:first-child {
  background: var(--ca);
}
.checklist-card-rule i:last-child {
  background: var(--cb);
}
.checklist-card-top {
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: 10px;
}
.checklist-card-top small {
  color: var(--accent);
  font-size: 9px;
  font-weight: 900;
  letter-spacing: 0.14em;
}
.checklist-card-top em {
  color: #aaa3a8;
  font-size: 9px;
  font-style: normal;
  font-weight: 800;
  letter-spacing: 0.08em;
}
.checklist-list-card > h2 {
  margin: 17px 0 0;
  font-family: "Noto Serif KR", Batang, serif;
  font-size: 22px;
  line-height: 1.35;
  letter-spacing: -0.035em;
}
.checklist-list-card > p {
  margin: 5px 0 0;
  color: #948d92;
  font-size: 10px;
  font-weight: 700;
}
.checklist-card-members {
  display: grid;
  grid-template-columns: 1fr 1fr;
  gap: 7px;
  margin-top: 17px;
}
.checklist-card-members > span {
  position: relative;
  display: grid;
  grid-template-columns: 34px minmax(0, 1fr) auto;
  align-items: center;
  gap: 8px;
  min-width: 0;
  border: 1px solid #ece7e3;
  border-radius: 12px;
  background: rgba(255, 255, 255, 0.7);
  padding: 8px;
}
.checklist-card-members > span:before {
  content: "";
  position: absolute;
  left: 0;
  top: 8px;
  bottom: 8px;
  width: 2px;
  border-radius: 99px;
  background: var(--ca);
}
.checklist-card-members > .side-b:before {
  background: var(--cb);
}
.checklist-card-members img,
.checklist-card-members > span > i {
  width: 34px;
  height: 34px;
  border-radius: 50%;
  object-fit: cover;
  background: #f0ece9;
}
.checklist-card-members > span > i {
  display: block;
}
.checklist-card-members b {
  min-width: 0;
  overflow: hidden;
  text-overflow: ellipsis;
  white-space: nowrap;
  color: #686268;
  font-size: 10px;
}
.checklist-card-members em {
  color: #4d474d;
  font-size: 15px;
  font-style: normal;
  font-weight: 900;
}
.checklist-card-members em small {
  color: #aaa3a8;
  font-size: 8px;
  font-weight: 700;
}
.checklist-list-card > footer {
  display: flex;
  align-items: center;
  justify-content: space-between;
  margin-top: 16px;
  padding-top: 12px;
  border-top: 1px solid #eee9e5;
  color: #979095;
  font-size: 9px;
  font-weight: 800;
  letter-spacing: 0.08em;
}
.checklist-list-card > footer b {
  color: var(--accent);
  font-size: 9px;
  letter-spacing: 0.12em;
}
.checklist-empty {
  grid-column: 1/-1;
  padding: 65px 20px;
  border: 1px dashed color-mix(in srgb, var(--accent) 25%, #d8d2ce);
  border-radius: 20px;
  background: rgba(255, 255, 255, 0.48);
  text-align: center;
}
.checklist-empty b {
  color: var(--accent);
  font-size: 10px;
  letter-spacing: 0.15em;
}
.checklist-empty p {
  margin: 8px 0 0;
  color: #918a8f;
  font-size: 11px;
}

.checklist-page.detail {
  padding-top: 68px;
}
.checklist-back {
  margin-bottom: 16px;
  border: 0;
  background: none;
  padding: 5px 2px;
  color: #817a80;
  font-size: 10px;
  font-weight: 900;
  letter-spacing: 0.12em;
  cursor: pointer;
}
.checklist-back:hover {
  color: var(--accent);
}
.checklist-detail-head > div:first-child {
  min-width: 0;
  max-width: 590px;
}
.checklist-detail-head {
  display: grid;
  grid-template-columns: minmax(0, 1fr) minmax(390px, 0.9fr);
  align-items: end;
}
.checklist-detail-score {
  display: grid;
  grid-template-columns: repeat(2, minmax(0, 1fr));
  gap: 10px;
}
.checklist-detail-score > article {
  position: relative;
  min-width: 0;
  overflow: hidden;
  border: 1px solid color-mix(in srgb, var(--cc) 20%, #ded8d4);
  border-radius: 17px;
  background: linear-gradient(145deg, color-mix(in srgb, var(--cc) 7%, #fff), rgba(255,255,255,.88));
  padding: 13px 14px 12px;
  box-shadow: 0 8px 20px color-mix(in srgb, var(--cc) 7%, transparent);
}
.checklist-detail-score > article:after {
  content: "";
  position: absolute;
  right: -18px;
  top: -25px;
  width: 82px;
  height: 82px;
  border: 1px solid color-mix(in srgb, var(--cc) 14%, transparent);
  border-radius: 50%;
  box-shadow: 0 0 0 13px color-mix(in srgb, var(--cc) 4%, transparent);
  pointer-events: none;
}
.checklist-detail-score article > header {
  display: flex;
  align-items: center;
  gap: 7px;
  min-width: 0;
}
.checklist-detail-score article > header span {
  display: inline-flex;
  align-items: center;
  gap: 5px;
  color: var(--cc);
  font-size: 7px;
  font-weight: 900;
  letter-spacing: .12em;
}
.checklist-detail-score article > header i {
  width: 7px;
  height: 7px;
  flex: 0 0 7px;
  border-radius: 50%;
  background: var(--cc);
}
.checklist-detail-score article > header b {
  min-width: 0;
  overflow: hidden;
  text-overflow: ellipsis;
  white-space: nowrap;
  color: #6f696f;
  font-size: 9px;
}
.checklist-detail-score article > div {
  display: flex;
  align-items: baseline;
  gap: 5px;
  margin-top: 9px;
}
.checklist-detail-score article > div strong {
  color: var(--cc);
  font: 800 38px/0.95 Georgia, serif;
  letter-spacing: -.05em;
}
.checklist-detail-score article > div em {
  color: color-mix(in srgb, var(--cc) 62%, #888);
  font-size: 13px;
  font-style: normal;
  font-weight: 900;
}
.checklist-detail-score article > div small {
  margin-left: auto;
  color: #aaa3a8;
  font-size: 7px;
  font-weight: 900;
  letter-spacing: .12em;
}
.checklist-score-track {
  display: block;
  height: 4px;
  margin-top: 10px;
  overflow: hidden;
  border-radius: 99px;
  background: color-mix(in srgb, var(--cc) 9%, #eee);
}
.checklist-score-track > i {
  display: block;
  width: var(--score);
  height: 100%;
  border-radius: inherit;
  background: var(--cc);
}
.checklist-detail-score article > footer {
  margin-top: 6px;
  color: #aaa3a8;
  font-size: 7px;
  font-weight: 800;
  letter-spacing: .08em;
}
.checklist-result-capacity {
  justify-self: end;
  display: flex;
  align-items: baseline;
  gap: 7px;
  border: 1px solid color-mix(in srgb, var(--accent) 18%, #ddd);
  border-radius: 15px;
  background: color-mix(in srgb, var(--accent) 5%, #fff);
  padding: 12px 15px;
}
.checklist-result-capacity small {
  color: #8f888d;
  font-size: 8px;
  font-weight: 900;
  letter-spacing: .13em;
}
.checklist-result-capacity b {
  color: var(--accent);
  font: 800 26px/1 Georgia, serif;
}
.checklist-result-capacity span {
  color: #aaa3a8;
  font-size: 10px;
  font-weight: 800;
}

.checklist-tendency-grid {
  display: grid;
  grid-template-columns: 1fr 1fr;
  gap: 11px;
  margin-top: 15px;
}
.checklist-tendency-grid.single {
  grid-template-columns: 1fr;
}
.checklist-tendency-card {
  overflow: hidden;
  border: 1px solid color-mix(in srgb, var(--cc) 20%, #dbd6d2);
  border-radius: 18px;
  background: linear-gradient(150deg, color-mix(in srgb, var(--cc) 5%, #fff), rgba(255, 255, 255, 0.75));
  padding: 14px;
}
.checklist-tendency-card.is-result {
  padding: 18px;
  background: linear-gradient(150deg, color-mix(in srgb, var(--cc) 7%, #fff), rgba(255,255,255,.88));
  box-shadow: 0 10px 28px color-mix(in srgb, var(--cc) 6%, transparent);
}
.checklist-tendency-card.is-result > header {
  padding-bottom: 14px;
}
.checklist-tendency-card.is-result .checklist-person-icon {
  width: 52px;
  height: 52px;
  flex-basis: 52px;
}
.checklist-tendency-card.is-result header h2 {
  margin-top: 3px;
  font-family: "Noto Serif KR", Batang, serif;
  font-size: clamp(18px, 2.2vw, 24px);
  letter-spacing: -.035em;
}
.checklist-tendency-grid.single .checklist-tendency-card.is-result header h2 {
  font-size: clamp(22px, 3vw, 30px);
}
.checklist-result-metric {
  position: relative;
  display: flex;
  align-items: flex-end;
  justify-content: space-between;
  gap: 14px;
  min-height: 102px;
  margin-top: 14px;
  overflow: hidden;
  border-radius: 14px;
  background: linear-gradient(115deg, color-mix(in srgb, var(--cc) 12%, #f6f3f1), color-mix(in srgb, var(--cc) 3%, #fff));
  padding: 16px 18px;
}
.checklist-result-metric:after {
  content: "RESULT";
  position: absolute;
  right: 15px;
  top: 13px;
  color: color-mix(in srgb, var(--cc) 35%, #aaa);
  font-size: 7px;
  font-weight: 900;
  letter-spacing: .16em;
}
.checklist-result-metric > small {
  align-self: flex-start;
  max-width: 45%;
  color: color-mix(in srgb, var(--cc) 72%, #555);
  font-size: 10px;
  font-weight: 900;
}
.checklist-result-metric > div {
  display: flex;
  align-items: baseline;
  gap: 4px;
  margin-left: auto;
}
.checklist-result-metric strong {
  color: var(--cc);
  font: 800 clamp(42px, 6vw, 68px)/.85 Georgia, serif;
  letter-spacing: -.06em;
}
.checklist-result-metric em {
  color: color-mix(in srgb, var(--cc) 74%, #666);
  font-size: 16px;
  font-style: normal;
  font-weight: 900;
}
.checklist-result-metric > span {
  position: absolute;
  left: 18px;
  right: 18px;
  bottom: 11px;
  height: 3px;
  border-radius: 99px;
  background: linear-gradient(90deg,var(--cc),color-mix(in srgb,var(--cc) 16%,transparent));
}
.checklist-tendency-card.is-result > p {
  margin-top: 14px;
  border-left: 3px solid var(--cc);
  border-radius: 0 10px 10px 0;
  background: color-mix(in srgb, var(--cc) 5%, #fff);
  padding: 13px 15px;
  font-size: 11px;
  line-height: 1.75;
}
.checklist-tendency-card.is-result .checklist-traits {
  padding-top: 15px;
}
.checklist-tendency-grid.single .checklist-traits {
  display: grid;
  grid-template-columns: repeat(3,minmax(0,1fr));
}
.checklist-tendency-grid.single .checklist-traits > span {
  min-width: 0;
}
.checklist-tendency-card > header {
  display: flex;
  align-items: center;
  gap: 10px;
  padding-bottom: 11px;
  border-bottom: 1px solid color-mix(in srgb, var(--cc) 11%, #e7e2de);
}
.checklist-person-icon {
  display: grid;
  width: 44px;
  height: 44px;
  flex: 0 0 44px;
  place-items: center;
  overflow: hidden;
  border-radius: 50%;
  background: color-mix(in srgb, var(--cc) 10%, #f3f0ed);
  color: var(--cc);
}
.checklist-person-icon img {
  width: 100%;
  height: 100%;
  object-fit: cover;
}
.checklist-person-icon b {
  font-family: "Noto Serif KR", Batang, serif;
  font-size: 17px;
}
.checklist-tendency-card header small {
  display: block;
  color: var(--cc);
  font-size: 8px;
  font-weight: 900;
  letter-spacing: 0.12em;
}
.checklist-tendency-card header h2 {
  margin: 2px 0 0;
  font-size: 13px;
}
.checklist-tendency-card header span {
  display: block;
  margin-top: 1px;
  color: #aaa3a8;
  font-size: 8px;
}
.checklist-traits {
  display: flex;
  flex-wrap: wrap;
  gap: 6px;
  padding: 12px 0 1px;
}
.checklist-traits > span {
  display: inline-flex;
  align-items: center;
  gap: 5px;
  border: 1px solid #e7e2df;
  border-radius: 999px;
  background: #f8f6f4;
  padding: 5px 8px;
  color: #aaa3a8;
  font-size: 9px;
  font-weight: 700;
}
.checklist-traits > span > i {
  display: grid;
  width: 13px;
  height: 13px;
  place-items: center;
  border: 1px solid #d9d3cf;
  border-radius: 50%;
  font-size: 8px;
  font-style: normal;
}
.checklist-traits > span.on {
  border-color: color-mix(in srgb, var(--cc) 28%, #ddd);
  background: color-mix(in srgb, var(--cc) 7%, #fff);
  color: color-mix(in srgb, var(--cc) 80%, #555);
}
.checklist-traits > span.on > i {
  border-color: var(--cc);
  background: var(--cc);
  color: #fff;
}
.checklist-tendency-card > p {
  margin: 10px 0 0;
  padding: 9px 10px;
  border-radius: 9px;
  background: rgba(255, 255, 255, 0.65);
  color: #777077;
  font-size: 10px;
  line-height: 1.6;
}

.checklist-section {
  margin-top: 13px;
  overflow: hidden;
  border: 1px solid color-mix(in srgb, var(--accent) 13%, #dad5d1);
  border-radius: 19px;
  background: rgba(255, 255, 255, 0.72);
}
.checklist-section-title {
  padding: 15px 17px 12px;
  border-bottom: 1px solid #eee9e5;
}
.checklist-section-title small {
  display: block;
  color: var(--accent);
  font-size: 8px;
  font-weight: 900;
  letter-spacing: 0.14em;
}
.checklist-section-title h2 {
  margin: 3px 0 0;
  font-family: "Noto Serif KR", Batang, serif;
  font-size: 15px;
  letter-spacing: -0.025em;
}
.checklist-shared-head {
  display: grid;
  grid-template-columns: 68px minmax(0, 1fr) 68px;
  align-items: center;
  padding: 10px 13px;
  border-bottom: 1px solid #eee9e5;
  background: color-mix(in srgb, var(--accent) 3%, #fff);
  text-align: center;
}
.checklist-shared-head span {
  overflow: hidden;
  text-overflow: ellipsis;
  white-space: nowrap;
  font-size: 9px;
  font-weight: 900;
}
.checklist-shared-head span:first-child {
  color: var(--ca);
}
.checklist-shared-head span:last-child {
  color: var(--cb);
}
.checklist-shared-head b {
  color: #aaa3a8;
  font-size: 8px;
  letter-spacing: 0.15em;
}
.checklist-shared-list > div {
  display: grid;
  grid-template-columns: 68px minmax(0, 1fr) 68px;
  align-items: stretch;
  min-height: 46px;
  border-bottom: 1px solid #f0ece9;
}
.checklist-shared-list > div:last-child {
  border-bottom: 0;
}
.checklist-shared-list p {
  display: flex;
  align-items: center;
  justify-content: center;
  margin: 0;
  padding: 10px 14px;
  border-left: 1px solid #f0ece9;
  border-right: 1px solid #f0ece9;
  color: #625c62;
  font-size: 10px;
  line-height: 1.55;
  text-align: center;
}
.checklist-shared-list .check-a,
.checklist-shared-list .check-b {
  display: grid;
  place-items: center;
  margin: 9px auto;
  width: 25px;
  height: 25px;
  border: 1px solid #ded9d5;
  border-radius: 8px;
  background: #faf8f6;
  color: #fff;
  font-size: 11px;
  font-weight: 900;
}
.checklist-shared-list .check-a.on {
  border-color: var(--ca);
  background: var(--ca);
}
.checklist-shared-list .check-b.on {
  border-color: var(--cb);
  background: var(--cb);
}
.checklist-split-grid {
  display: grid;
  grid-template-columns: 1fr 1fr;
}
.checklist-split-grid > article:first-child {
  border-right: 1px solid #e9e4e1;
}
.checklist-split-grid > article > header {
  display: grid;
  grid-template-columns: 4px minmax(0, 1fr) auto;
  align-items: center;
  gap: 10px;
  padding: 13px 14px;
  border-bottom: 1px solid #eee9e5;
}
.checklist-split-grid > article > header > i {
  width: 4px;
  height: 29px;
  border-radius: 99px;
  background: var(--ca);
}
.checklist-split-grid > article:nth-child(2) > header > i {
  background: var(--cb);
}
.checklist-split-grid > article > header small {
  display: block;
  color: #9b9499;
  font-size: 8px;
  font-weight: 800;
  letter-spacing: 0.08em;
}
.checklist-split-grid > article > header b {
  display: block;
  margin-top: 2px;
  color: #5f595f;
  font-size: 11px;
}
.checklist-split-grid > article > header em {
  color: var(--ca);
  font-size: 10px;
  font-style: normal;
  font-weight: 900;
}
.checklist-split-grid > article:nth-child(2) > header em {
  color: var(--cb);
}
.checklist-split-items > div {
  display: grid;
  grid-template-columns: 27px minmax(0, 1fr);
  align-items: center;
  gap: 8px;
  min-height: 43px;
  padding: 7px 11px;
  border-bottom: 1px solid #f1edea;
  color: #8b8489;
}
.checklist-split-items > div:last-child {
  border-bottom: 0;
}
.checklist-split-items span {
  display: grid;
  width: 24px;
  height: 24px;
  place-items: center;
  border: 1px solid #ded9d5;
  border-radius: 7px;
  background: #faf8f6;
  color: #fff;
  font-size: 10px;
  font-weight: 900;
}
.checklist-split-items p {
  margin: 0;
  font-size: 9px;
  line-height: 1.45;
}
.checklist-split-grid > article:first-child .checklist-split-items > div.on span {
  border-color: var(--ca);
  background: var(--ca);
}
.checklist-split-grid > article:nth-child(2) .checklist-split-items > div.on span {
  border-color: var(--cb);
  background: var(--cb);
}
.checklist-split-items > div.on p {
  color: #5e585e;
  font-weight: 700;
}

.checklist-file-drop {
  display: flex;
  align-items: center;
  gap: 10px;
  border: 1px dashed color-mix(in srgb, var(--accent) 35%, #d7d1cd);
  border-radius: 12px;
  background: color-mix(in srgb, var(--accent) 4%, #fff);
  padding: 13px;
  cursor: pointer;
}
.checklist-file-drop > b {
  display: grid;
  width: 42px;
  height: 42px;
  place-items: center;
  border-radius: 9px;
  background: var(--accent);
  color: #fff;
  font-size: 9px;
  letter-spacing: 0.08em;
}
.checklist-file-drop > span {
  color: #746e73;
  font-size: 10px;
  font-weight: 700;
}
.checklist-import-summary {
  display: flex;
  flex-wrap: wrap;
  gap: 6px;
  margin: 0 0 12px;
}
.checklist-import-summary > * {
  border: 1px solid #e5dfdb;
  border-radius: 999px;
  background: #f8f6f4;
  padding: 5px 8px;
  color: #8a8388;
  font-size: 9px;
}
.checklist-import-summary > b {
  border-color: color-mix(in srgb, var(--accent) 25%, #ddd);
  background: color-mix(in srgb, var(--accent) 6%, #fff);
  color: var(--accent);
}
.checklist-result-editor {
  margin: 15px 0;
  border: 1px solid #ddd7d4;
  border-radius: 14px;
  padding: 12px;
}
.checklist-result-editor > legend {
  padding: 0 6px;
  color: #5f595e;
  font-size: 10px;
  font-weight: 900;
}
.checklist-result-editor-grid {
  display: grid;
  grid-template-columns: repeat(2,minmax(0,1fr));
  gap: 8px;
  margin-top: 10px;
}
.checklist-result-editor-grid > section {
  min-width: 0;
  border: 1px solid #e8e2de;
  border-radius: 11px;
  background: #faf8f6;
  padding: 10px;
}
.checklist-result-editor-grid > section > small {
  display: block;
  margin-bottom: 7px;
  color: var(--accent);
  font-size: 8px;
  font-weight: 900;
  letter-spacing: .14em;
}
.checklist-result-editor-grid textarea {
  min-height: 76px;
}

@media (max-width: 820px) {
  .checklist-list {
    grid-template-columns: 1fr;
  }
  .checklist-detail-head {
    grid-template-columns: 1fr;
    align-items: start;
  }
  .checklist-detail-score {
    width: min(100%,540px);
  }
  .checklist-result-capacity {
    justify-self: start;
  }
  .checklist-tendency-grid {
    grid-template-columns: 1fr;
  }
  .checklist-tendency-grid.single .checklist-traits {
    grid-template-columns: repeat(2,minmax(0,1fr));
  }
}
@media (max-width: 620px) {
  .checklist-page {
    padding: 66px 12px 92px;
  }
  .checklist-page-head {
    align-items: flex-start;
  }
  .checklist-head-sign {
    display: none;
  }
  .checklist-list-card {
    border-radius: 17px;
    padding: 16px 13px 13px;
  }
  .checklist-card-members {
    grid-template-columns: 1fr;
  }
  .checklist-shared-head,
  .checklist-shared-list > div {
    grid-template-columns: 46px minmax(0, 1fr) 46px;
  }
  .checklist-shared-list p {
    padding: 9px 8px;
    font-size: 9px;
  }
  .checklist-shared-list .check-a,
  .checklist-shared-list .check-b {
    width: 23px;
    height: 23px;
  }
  .checklist-split-grid {
    grid-template-columns: 1fr;
  }
  .checklist-split-grid > article:first-child {
    border-right: 0;
    border-bottom: 5px solid color-mix(in srgb, var(--accent) 4%, #f4f1ee);
  }
  .checklist-detail-score {
    gap: 7px;
  }
  .checklist-detail-score > article {
    padding: 11px 11px 10px;
  }
  .checklist-detail-score article > div strong {
    font-size: 32px;
  }
  .checklist-tendency-grid.single .checklist-traits,
  .checklist-result-editor-grid {
    grid-template-columns: 1fr;
  }
  .row2 .mf {
    min-width: 0;
  }
}
@media (max-width: 430px) {
  .checklist-detail-score {
    grid-template-columns: 1fr;
  }
}

/* v0.3.70 · checklist memo / stat import */
.checklist-shared-list > .checklist-check-row {
  display: grid;
  grid-template-columns: 68px minmax(0, 1fr) 68px;
  align-items: stretch;
  min-height: 46px;
  border-bottom: 1px solid #f0ece9;
}
.checklist-shared-list > .checklist-check-row > p {
  display: flex;
  align-items: center;
  justify-content: center;
  margin: 0;
  padding: 10px 14px;
  border-left: 1px solid #f0ece9;
  border-right: 1px solid #f0ece9;
  color: #625c62;
  font-size: 10px;
  line-height: 1.55;
  text-align: center;
}
.checklist-row-notes {
  display: grid;
  grid-template-columns: 1fr 1fr;
  gap: 7px;
  padding: 8px 12px;
  background: color-mix(in srgb, var(--accent) 2%, #fbfaf9);
}
.checklist-shared-list > .checklist-row-notes {
  min-height: 0;
  border-bottom: 1px solid #f0ece9;
}
.checklist-row-notes > article {
  position: relative;
  min-width: 0;
  border: 1px solid color-mix(in srgb, var(--cc) 18%, #e4dedb);
  border-radius: 10px;
  background: color-mix(in srgb, var(--cc) 4%, #fff);
  padding: 8px 9px 8px 11px;
}
.checklist-row-notes > article:before {
  content: "";
  position: absolute;
  left: 0;
  top: 7px;
  bottom: 7px;
  width: 2px;
  border-radius: 99px;
  background: var(--cc);
}
.checklist-row-notes > article > b {
  display: block;
  color: var(--cc);
  font-size: 8px;
  font-weight: 900;
  letter-spacing: 0.04em;
}
.checklist-row-notes > article > p {
  display: block;
  margin: 4px 0 0;
  padding: 0;
  border: 0;
  color: #716a70;
  font-size: 9px;
  line-height: 1.6;
  text-align: left;
  white-space: normal;
  word-break: break-word;
}
.checklist-special-block {
  display: block !important;
  min-height: 0 !important;
  padding: 13px 14px 14px !important;
  border-bottom: 1px solid #eee9e5 !important;
  background: linear-gradient(180deg, color-mix(in srgb, var(--accent) 3%, #fff), rgba(255, 255, 255, 0.72));
}
.checklist-special-block > small {
  display: block;
  color: var(--accent);
  font-size: 8px;
  font-weight: 900;
  letter-spacing: 0.14em;
}
.checklist-special-block > p {
  display: block !important;
  margin: 4px 0 0 !important;
  padding: 0 !important;
  border: 0 !important;
  color: #625c62 !important;
  font-size: 10px !important;
  font-weight: 700;
  line-height: 1.6 !important;
  text-align: left !important;
}
.checklist-special-block.memo > .checklist-row-notes {
  margin: 9px -2px -2px;
  padding: 0;
  background: transparent;
}
.checklist-stat-grid {
  display: grid;
  grid-template-columns: 1fr 1fr;
  gap: 8px;
  margin-top: 10px;
}
.checklist-stat-grid > article {
  display: grid;
  grid-template-columns: minmax(0, 1fr) auto;
  align-items: center;
  gap: 4px 10px;
  min-width: 0;
  border: 1px solid color-mix(in srgb, var(--cc) 20%, #e2dcda);
  border-radius: 12px;
  background: color-mix(in srgb, var(--cc) 4%, #fff);
  padding: 10px 11px;
}
.checklist-stat-grid > article > b {
  min-width: 0;
  overflow: hidden;
  text-overflow: ellipsis;
  white-space: nowrap;
  color: var(--cc);
  font-size: 9px;
}
.checklist-stat-grid > article > strong {
  grid-row: 1/3;
  grid-column: 2;
  color: var(--cc);
  font-family: "Noto Serif KR", Batang, serif;
  font-size: 22px;
  line-height: 1;
}
.checklist-stat-grid > article > em {
  min-width: 0;
  color: #777077;
  font-size: 10px;
  font-style: normal;
  letter-spacing: 0.04em;
  word-break: break-all;
}
.checklist-stat-grid > article > span {
  grid-column: 1/-1;
  margin-top: 5px;
  padding-top: 7px;
  border-top: 1px solid color-mix(in srgb, var(--cc) 12%, #ebe6e3);
  color: #746d73;
  font-size: 9px;
  line-height: 1.55;
}
.checklist-split-items > div > small {
  grid-column: 2;
  display: block;
  margin-top: 2px;
  color: #9a9298;
  font-size: 8px;
  line-height: 1.45;
}
@media (max-width: 620px) {
  .checklist-shared-list > .checklist-check-row {
    grid-template-columns: 46px minmax(0, 1fr) 46px;
  }
  .checklist-shared-list > .checklist-check-row > p {
    padding: 9px 8px;
    font-size: 9px;
  }
  .checklist-row-notes,
  .checklist-stat-grid {
    grid-template-columns: 1fr;
  }
  .checklist-row-notes > span {
    display: none;
  }
  .checklist-stat-grid > article > strong {
    font-size: 19px;
  }
}

/* v0.3.71 · easter color / checklist avatar / top action state */
.checklist-avatar-editors {
  margin-top: 4px;
}
.checklist-avatar-admin {
  display: grid;
  grid-template-columns: 58px minmax(0, 1fr);
  gap: 9px;
  align-items: center;
  padding: 8px;
  border: 1px solid #e2ddda;
  border-radius: 11px;
  background: #f8f6f4;
}
.checklist-avatar-preview {
  width: 58px;
  height: 58px;
  display: grid;
  place-items: center;
  overflow: hidden;
  border-radius: 50%;
  background: #eeeae7;
  color: #8d868b;
  font-size: 8px;
  font-weight: 800;
}
.checklist-avatar-preview img {
  width: 100%;
  height: 100%;
  object-fit: cover;
}
.checklist-avatar-admin .grow {
  min-width: 0;
}
.checklist-avatar-admin input {
  width: 100%;
  margin-bottom: 6px;
}
.checklist-avatar-admin .eactions {
  gap: 5px;
}
.checklist-avatar-admin .m-btn {
  padding: 7px 8px;
  font-size: 9px;
}
.site-topbar .top-actions .ghost-btn {
  mix-blend-mode: normal !important;
  background: #fff !important;
  color: #111 !important;
  border-color: #d9d6d2 !important;
  box-shadow: 0 1px 4px rgba(0, 0, 0, 0.08) !important;
}
.site-topbar .top-actions .ghost-btn .ui-icon {
  filter: brightness(0) !important;
  opacity: 1 !important;
}
.site-topbar .top-actions .ghost-btn.on {
  background: #171719 !important;
  color: #fff !important;
  border-color: #171719 !important;
}
.site-topbar .top-actions .ghost-btn.on .ui-icon {
  filter: brightness(0) invert(1) !important;
  opacity: 1 !important;
}
@media (max-width: 620px) {
  .checklist-avatar-editors {
    grid-template-columns: 1fr;
  }
  .checklist-avatar-admin {
    grid-template-columns: 52px minmax(0, 1fr);
  }
  .checklist-avatar-preview {
    width: 52px;
    height: 52px;
  }
}
.site-topbar .top-actions .bgm-control {
  mix-blend-mode: normal !important;
}

/* v0.3.76 — modal checkbox/radio controls must not inherit full-width text-input sizing. */
.modal input[type="checkbox"],
.modal input[type="radio"] {
  width: auto !important;
  min-width: 0 !important;
  padding: 0 !important;
  margin: 0;
  flex: 0 0 auto;
}
.timeline-ref-picker label {
  justify-content: flex-start;
}
.timeline-ref-picker input[type="checkbox"] {
  width: 14px !important;
  height: 14px;
  flex: 0 0 14px;
}
.timeline-ref-picker span {
  flex: 1 1 auto;
}

/* ===== lope v0.3.79 — playlist record / streaming layout + visitor parity ===== */
.music-record-page {
  --music-accent: var(--accent, #9f7d86);
  padding: 88px 4vw 115px;
}
.music-record-shell {
  width: min(1240px, 100%);
  margin: 0 auto;
  background: #fdfcf9;
  border: 1px solid #00000012;
  box-shadow: 0 22px 70px #0000000b;
  overflow: hidden;
}
.music-record-top {
  min-height: 76px;
  padding: 17px 26px;
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: 20px;
  border-bottom: 1px solid #00000018;
}
.music-record-top > div {
  display: grid;
  gap: 3px;
}
.music-record-top small {
  font:
    800 8px/1 Arial,
    sans-serif;
  letter-spacing: 0.19em;
  color: var(--music-accent);
}
.music-record-top strong {
  font:
    900 17px/1 Arial,
    sans-serif;
  letter-spacing: -0.03em;
}
.music-record-top nav {
  display: flex;
  align-items: center;
  justify-content: flex-end;
  gap: 7px;
  flex-wrap: wrap;
}
.music-record-top nav button {
  border: 1px solid #00000016;
  background: #fff;
  color: #242126;
  border-radius: 999px;
  padding: 8px 12px;
  display: flex;
  gap: 7px;
  align-items: center;
  font:
    700 9px/1 Arial,
    sans-serif;
  cursor: pointer;
}
.music-record-top nav button span {
  opacity: 0.42;
  font-family: monospace;
}
.music-record-top nav button.on {
  background: #171719;
  color: #fff;
  border-color: #171719;
}
.music-record-top nav button.on span {
  color: var(--music-accent);
  opacity: 1;
}
.music-record-stage {
  min-height: 620px;
  display: grid;
  grid-template-columns: minmax(320px, 0.9fr) minmax(470px, 1.25fr);
}
.music-record-visual {
  position: relative;
  min-height: 620px;
  overflow: hidden;
  background: linear-gradient(145deg, color-mix(in srgb, var(--music-accent) 7%, #f7f4ef), #fdfcf9 56%);
  border-right: 1px solid #00000014;
}
.music-record-visual:before {
  content: "";
  position: absolute;
  left: 0;
  top: 70px;
  width: 7px;
  height: 138px;
  background: var(--music-accent);
}
.music-record-label {
  position: absolute;
  left: 28px;
  top: 27px;
  right: 28px;
  z-index: 2;
  display: flex;
  justify-content: space-between;
  align-items: center;
  text-transform: uppercase;
}
.music-record-label span {
  font:
    900 10px/1 Arial,
    sans-serif;
  letter-spacing: 0.14em;
}
.music-record-label small {
  font:
    700 8px/1 Arial,
    sans-serif;
  letter-spacing: 0.15em;
  color: #8e8988;
}
.music-vinyl {
  position: absolute;
  width: min(560px, 92%);
  aspect-ratio: 1;
  left: -23%;
  top: 50%;
  transform: translateY(-50%);
  border-radius: 50%;
  background: radial-gradient(
    circle at center,
    #171719 0 8%,
    #09090a 8.4% 13%,
    #19191b 13.4% 24%,
    #09090a 24.4% 25.2%,
    #161618 25.6% 38%,
    #09090a 38.3% 39.1%,
    #151517 39.5% 52%,
    #09090a 52.4% 53.1%,
    #151517 53.5% 66%,
    #09090a 66.4% 67.1%,
    #111113 67.5% 100%
  );
  box-shadow:
    16px 20px 32px #0003,
    0 0 0 1px #0008;
  transition: filter 0.2s ease;
}
.music-vinyl:after {
  content: "";
  position: absolute;
  inset: 7%;
  border: 1px solid #ffffff12;
  border-radius: 50%;
  box-shadow:
    0 0 0 16px #ffffff05,
    0 0 0 32px #ffffff04,
    0 0 0 52px #ffffff03;
}
.music-vinyl.is-playing {
  animation: music-vinyl-spin 9s linear infinite;
}
.music-vinyl .groove {
  position: absolute;
  border: 1px solid #ffffff0d;
  border-radius: 50%;
  inset: 17%;
}
.music-vinyl .g2 {
  inset: 29%;
}
.music-vinyl .g3 {
  inset: 42%;
}
.music-vinyl-center {
  position: absolute;
  z-index: 3;
  width: 24%;
  aspect-ratio: 1;
  left: 38%;
  top: 38%;
  border-radius: 50%;
  overflow: hidden;
  background: var(--music-accent);
  display: grid;
  place-items: center;
  border: 5px solid #fdfcf9;
  box-shadow: 0 0 0 1px #0003;
}
.music-vinyl-center img {
  width: 100%;
  height: 100%;
  object-fit: cover;
}
.music-vinyl-center b {
  padding: 6px;
  color: #fff;
  font:
    900 8px/1.15 Arial,
    sans-serif;
  letter-spacing: 0.06em;
  text-align: center;
  text-transform: uppercase;
  overflow-wrap: anywhere;
}
.music-record-now {
  position: absolute;
  right: 25px;
  bottom: 27px;
  width: min(210px, 43%);
  padding: 14px 0 0;
  border-top: 2px solid var(--music-accent);
  display: grid;
  gap: 4px;
  text-align: right;
}
.music-record-now small {
  font:
    800 7px/1 Arial,
    sans-serif;
  letter-spacing: 0.16em;
  color: var(--music-accent);
}
.music-record-now b {
  font-size: 15px;
  line-height: 1.25;
}
.music-record-now span {
  font-size: 10px;
  color: #8c8787;
  line-height: 1.35;
}
.music-record-content {
  padding: 46px 40px 34px;
  min-width: 0;
}
.music-record-content > header small {
  font:
    800 8px/1 Arial,
    sans-serif;
  letter-spacing: 0.17em;
  color: var(--music-accent);
}
.music-record-content > header h1 {
  margin: 7px 0 8px;
  font:
    900 clamp(36px, 5vw, 72px)/0.83 Arial,
    sans-serif;
  letter-spacing: -0.075em;
  max-width: 690px;
  text-transform: uppercase;
  overflow-wrap: anywhere;
}
.music-record-content > header p {
  max-width: 600px;
  margin: 0;
  color: #888282;
  font-size: 12px;
  line-height: 1.65;
}
.music-record-rule {
  display: flex;
  align-items: center;
  gap: 11px;
  margin: 27px 0 8px;
  color: var(--music-accent);
}
.music-record-rule span,
.music-record-rule b {
  font:
    900 8px/1 Arial,
    sans-serif;
  letter-spacing: 0.15em;
}
.music-record-rule i {
  height: 1px;
  flex: 1;
  background: color-mix(in srgb, var(--music-accent) 35%, #ddd);
}
.music-stream-list {
  display: grid;
}
.music-stream-row-wrap {
  border-bottom: 1px solid #00000012;
}
.music-stream-row-wrap:last-child {
  border-bottom: 0;
}
.music-stream-row {
  min-height: 64px;
  display: grid;
  grid-template-columns: 34px 28px 42px minmax(0, 1fr) auto;
  gap: 10px;
  align-items: center;
  padding: 8px 2px;
}
.music-stream-row.playing {
  background: color-mix(in srgb, var(--music-accent) 7%, transparent);
}
.music-stream-play {
  width: 27px;
  height: 27px;
  border: 1px solid #00000025;
  border-radius: 50%;
  background: #fff;
  color: #222;
  font-size: 9px;
  display: grid;
  place-items: center;
  cursor: pointer;
}
.music-stream-row.playing .music-stream-play {
  background: var(--music-accent);
  border-color: var(--music-accent);
  color: #fff;
}
.music-stream-no {
  font: 700 9px/1 monospace;
  color: #aaa;
}
.music-stream-row figure {
  width: 38px;
  height: 38px;
  margin: 0;
  overflow: hidden;
  background: #efede9;
  display: grid;
  place-items: center;
}
.music-stream-row figure img {
  width: 100%;
  height: 100%;
  object-fit: cover;
}
.music-stream-row figure span {
  font-size: 12px;
  color: #aaa;
}
.music-stream-copy {
  min-width: 0;
  display: grid;
  gap: 2px;
}
.music-stream-copy b {
  font-size: 12px;
  white-space: nowrap;
  overflow: hidden;
  text-overflow: ellipsis;
}
.music-stream-copy small {
  font-size: 8px;
  letter-spacing: 0.04em;
  color: #949091;
}
.music-stream-copy p {
  margin: 2px 0 0;
  font-size: 9px;
  color: #aaa;
  white-space: nowrap;
  overflow: hidden;
  text-overflow: ellipsis;
}
.music-stream-lyrics {
  border: 0;
  background: transparent;
  padding: 7px 4px;
  color: #aaa;
  font:
    800 7px/1 Arial,
    sans-serif;
  letter-spacing: 0.11em;
  cursor: pointer;
}
.music-stream-lyrics.on {
  color: var(--music-accent);
}
.music-stream-line {
  width: 34px;
  height: 1px;
  background: #00000016;
}
.music-record-page .music-stream-row-wrap .music-lyrics-panel {
  margin: 0 0 13px 72px;
  border-radius: 0;
  background: transparent;
  border: 0;
  border-top: 1px solid color-mix(in srgb, var(--music-accent) 22%, #ddd);
  padding: 15px 4px 18px;
}
.music-record-page .music-lyrics-panel header {
  padding-bottom: 8px;
  margin-bottom: 7px;
}
.music-record-page .music-lyrics-body {
  max-height: 240px;
  overflow: auto;
  padding-right: 6px;
}
@keyframes music-vinyl-spin {
  to {
    transform: translateY(-50%) rotate(360deg);
  }
}
@media (max-width: 900px) {
  .music-record-stage {
    grid-template-columns: 1fr;
  }
  .music-record-visual {
    min-height: 390px;
    border-right: 0;
    border-bottom: 1px solid #00000014;
  }
  .music-vinyl {
    width: 420px;
    left: -80px;
  }
  .music-record-content {
    padding: 34px 28px;
  }
  .music-record-content > header h1 {
    font-size: clamp(36px, 10vw, 64px);
  }
}
@media (max-width: 620px) {
  .music-record-page {
    padding: 76px 10px 92px;
  }
  .music-record-shell {
    border-radius: 0;
  }
  .music-record-top {
    align-items: flex-start;
    flex-direction: column;
    padding: 15px 16px;
  }
  .music-record-top nav {
    justify-content: flex-start;
    flex-wrap: nowrap;
    width: 100%;
    overflow: auto;
    padding-bottom: 3px;
  }
  .music-record-top nav button {
    flex: 0 0 auto;
  }
  .music-record-visual {
    min-height: 330px;
  }
  .music-vinyl {
    width: 340px;
    left: -105px;
  }
  .music-record-now {
    right: 16px;
    bottom: 18px;
    width: 48%;
  }
  .music-record-label {
    left: 18px;
    right: 18px;
  }
  .music-record-content {
    padding: 28px 17px;
  }
  .music-record-content > header h1 {
    font-size: 43px;
  }
  .music-stream-row {
    grid-template-columns: 30px 25px 36px minmax(0, 1fr);
    gap: 7px;
  }
  .music-stream-row figure {
    width: 34px;
    height: 34px;
  }
  .music-stream-lyrics,
  .music-stream-line {
    grid-column: 4;
    justify-self: start;
  }
  .music-record-page .music-stream-row-wrap .music-lyrics-panel {
    margin-left: 0;
  }
  .music-record-now b {
    font-size: 12px;
  }
}

/* ===== lope v0.3.80 — character ordering + main character picker ===== */
.character-order-row {
  position: relative;
  transition:
    border-color 0.14s ease,
    background 0.14s ease,
    transform 0.14s ease;
}
.character-order-row.dragging {
  opacity: 0.48;
}
.character-order-row.drag-over {
  border-color: #8a8a94;
  background: #29292f;
  transform: translateY(1px);
}
.character-order-grip {
  width: 18px;
  min-width: 18px;
  height: 28px;
  display: grid;
  place-items: center;
  color: #73737b;
  font-size: 15px;
  line-height: 1;
  cursor: grab;
  user-select: none;
}
.character-order-grip:active {
  cursor: grabbing;
}
.main-character-check {
  flex: none;
  height: 28px;
  min-width: 45px;
  padding: 0 8px;
  border: 1px solid #38383f;
  border-radius: 8px;
  background: #202024;
  color: #777;
  display: flex;
  align-items: center;
  justify-content: center;
  cursor: pointer;
  font-size: 8px;
  font-weight: 800;
  letter-spacing: 0.08em;
}
.main-character-check input {
  position: absolute;
  opacity: 0;
  pointer-events: none;
  width: 1px !important;
  height: 1px !important;
}
.main-character-check.on {
  background: #f3f3f5;
  border-color: #f3f3f5;
  color: #111;
}
.main-character-check:hover {
  border-color: #696971;
}
.main-character-check.on:hover {
  border-color: #fff;
}
.character-main-warning {
  color: #f0a6b4;
  font-weight: 700;
}

/* ===== lope v0.3.82 — character list drag fix + column count ===== */
.roster-grid {
  grid-template-columns: repeat(var(--roster-cols, 4), minmax(0, 1fr));
}
.roster-column-picker {
  display: grid;
  grid-template-columns: repeat(5, 1fr);
  gap: 6px;
  margin-top: 10px;
}
.roster-column-picker button {
  height: 34px;
  border: 1px solid #38383f;
  border-radius: 9px;
  background: #202024;
  color: #8d8d95;
  font-size: 9px;
  font-weight: 800;
  cursor: pointer;
}
.roster-column-picker button:hover {
  border-color: #696971;
  color: #ddd;
}
.roster-column-picker button.on {
  background: #f3f3f5;
  border-color: #f3f3f5;
  color: #111;
}
@media (max-width: 700px) {
  .roster-grid {
    grid-template-columns: repeat(2, minmax(0, 1fr));
  }
}

/* v0.3.322 — 순서 바꾸기를 네이티브 HTML5 drag-and-drop 대신 포인터 이벤트로
   직접 구현하면서, draggable="true" 속성도 같이 뗐습니다. touch-action: none은
   여전히 필요합니다(터치로 잡고 드래그하는 동안 화면 스크롤이 끼어들지 않도록). */
.character-order-grip,
.hero-layer-grip {
  touch-action: none;
}

/* v0.3.84 · TRIO PROFILE / TALES / ANNOTATIONS */
.lope-annotation {
  position: relative;
  display: inline-block;
  border-bottom: 1px dotted currentColor;
  cursor: help;
  font-weight: inherit;
  color: inherit;
  padding: 0 0.03em;
}
.lope-annotation::before {
  content: "*";
  display: none;
  font-size: 0.72em;
  opacity: 0.42;
  margin-right: 0.08em;
  vertical-align: 0.18em;
}
.site.editing .lope-annotation::before {
  display: inline;
}
.lope-annotation-note {
  position: absolute;
  left: 50%;
  bottom: calc(100% + 9px);
  z-index: 90;
  min-width: 160px;
  max-width: min(320px, 72vw);
  padding: 10px 12px;
  border: 1px solid rgba(70, 60, 60, 0.15);
  border-radius: 10px;
  background: rgba(255, 255, 255, 0.98);
  box-shadow: 0 12px 30px rgba(40, 30, 30, 0.14);
  color: #3e3a39;
  font-size: 12px;
  line-height: 1.55;
  font-weight: 500;
  letter-spacing: 0;
  white-space: normal;
  word-break: keep-all;
  transform: translate(-50%, 5px);
  opacity: 0;
  pointer-events: none;
  transition: 0.16s ease;
}
.lope-annotation:hover .lope-annotation-note,
.lope-annotation:focus .lope-annotation-note,
.lope-annotation:focus-within .lope-annotation-note {
  opacity: 1;
  transform: translate(-50%, 0);
}
/* v0.3.89 — 원래 위치의 말풍선은 카드 overflow에 잘리므로 항상 숨기고,
   대신 body에 뜨는 .lope-float-tip 포털이 실제 화면에 보이는 툴팁 역할을 합니다. */
.lope-annotation-note,
.timeline-ref-pop {
  display: none !important;
}
.lope-float-tip {
  position: fixed;
  z-index: 500;
  max-width: min(320px, 86vw);
  opacity: 0;
  visibility: hidden;
  pointer-events: none;
  transform: translateY(4px);
  transition:
    opacity 0.14s ease,
    transform 0.14s ease;
}
.lope-float-tip.show {
  opacity: 1;
  visibility: visible;
  transform: translateY(0);
}
.lope-float-tip.note {
  min-width: 160px;
  padding: 10px 12px;
  border: 1px solid rgba(70, 60, 60, 0.15);
  border-radius: 10px;
  background: rgba(255, 253, 250, 0.98);
  box-shadow: 0 12px 30px rgba(40, 30, 30, 0.14);
  color: #3e3a39;
  font-size: 12px;
  line-height: 1.55;
  font-weight: 500;
  word-break: keep-all;
}
.lope-float-tip.note p {
  margin: 0;
}
.lope-float-tip.note::after {
  content: "";
  position: absolute;
  top: 100%;
  left: var(--tip-arrow-x, 50%);
  transform: translateX(-50%);
  border: 6px solid transparent;
  border-top-color: rgba(255, 253, 250, 0.98);
}
.lope-float-tip.note.flip::after {
  top: auto;
  bottom: 100%;
  border-top-color: transparent;
  border-bottom-color: rgba(255, 253, 250, 0.98);
}
.lope-float-tip.pop {
  width: min(290px, 86vw);
  padding: 12px 14px;
  border-radius: 13px;
  background: #171719;
  color: #fff;
  box-shadow: 0 12px 36px rgba(0, 0, 0, 0.24);
  text-align: left;
}
.lope-float-tip.pop b {
  display: block;
  font-size: 12px;
  margin-bottom: 3px;
}
.lope-float-tip.pop small {
  display: block;
  font-size: 9px;
  opacity: 0.55;
  margin-bottom: 5px;
}
.lope-float-tip.pop p {
  margin: 0;
  font-size: 11px;
  line-height: 1.55;
  opacity: 0.86;
}
.lope-float-tip.pop::after {
  content: "";
  position: absolute;
  top: 100%;
  left: var(--tip-arrow-x, 18px);
  border: 6px solid transparent;
  border-top-color: #171719;
}
.lope-float-tip.pop.flip::after {
  top: auto;
  bottom: 100%;
  border-top-color: transparent;
  border-bottom-color: #171719;
}

.trio-page {
  min-height: calc(100vh - 120px);
  padding: 54px 28px 100px;
}
.trio-shell {
  width: min(1180px, 100%);
  margin: 0 auto;
}
.trio-page-head {
  text-align: center;
  margin: 0 0 42px;
}
.trio-page-head small {
  display: block;
  font-size: 10px;
  letter-spacing: 0.22em;
  font-weight: 800;
  color: var(--accent);
  margin-bottom: 8px;
}
.trio-page-head h1 {
  font-family: var(--serif, Georgia, serif);
  font-size: clamp(38px, 6vw, 78px);
  font-weight: 500;
  line-height: 0.94;
  margin: 0;
  color: #242120;
}
.trio-page-head p {
  margin: 14px auto 0;
  max-width: 650px;
  color: #827b78;
  font-size: 13px;
  line-height: 1.7;
}
.trio-top-grid,
.trio-body-grid {
  display: grid;
  grid-template-columns: repeat(var(--trio-cols, 3), minmax(0, 1fr));
  gap: 24px;
}
.trio-top-grid {
  position: relative;
  margin-bottom: 22px;
}
.trio-person-head {
  text-align: center;
  padding: 12px 14px 18px;
}
.trio-avatar {
  width: min(190px, 72%);
  aspect-ratio: 1;
  margin: 0 auto 16px;
  border-radius: 50%;
  overflow: hidden;
  background: #f3f1ee;
  border: 1px solid color-mix(in srgb, var(--tc) 34%, #ddd);
  box-shadow: 0 10px 32px rgba(40, 30, 30, 0.06);
}
.trio-avatar img {
  width: 100%;
  height: 100%;
  object-fit: cover;
}
.trio-avatar .art-fallback {
  width: 100%;
  height: 100%;
  display: grid;
  place-items: center;
  background: color-mix(in srgb, var(--tc) 12%, #fff);
}
.trio-person-head h2 {
  margin: 0;
  font-size: 22px;
  letter-spacing: -0.03em;
}
.trio-person-head p {
  min-height: 20px;
  margin: 7px 0 12px;
  color: #89817e;
  font-size: 12px;
}
.trio-colors {
  display: flex;
  justify-content: center;
  gap: 8px;
}
.trio-colors i {
  display: block;
  width: 31px;
  height: 31px;
  border-radius: 50%;
  background: var(--dot);
  border: 1px solid rgba(0, 0, 0, 0.06);
}
.trio-relations {
  display: grid;
  grid-template-columns: repeat(3, minmax(0, 1fr));
  gap: 12px;
  margin: 4px 0 32px;
}
.trio-relation-card {
  border: 1px solid rgba(80, 70, 70, 0.12);
  border-radius: 16px;
  padding: 14px 16px;
  background: rgba(255, 255, 255, 0.58);
}
.trio-relation-card header {
  display: flex;
  align-items: center;
  justify-content: center;
  gap: 7px;
  padding-bottom: 9px;
  border-bottom: 1px solid rgba(80, 70, 70, 0.08);
  font-size: 11px;
}
.trio-relation-card header span {
  color: var(--accent);
}
.trio-relation-card p {
  display: grid;
  grid-template-columns: 20px 1fr;
  gap: 5px;
  margin: 9px 0 0;
  color: #625d5b;
  font-size: 12px;
  line-height: 1.55;
}
.trio-relation-card em {
  font-style: normal;
  color: var(--accent);
  font-weight: 800;
}
.trio-person-body {
  min-width: 0;
}
.trio-full-art {
  height: 520px;
  display: flex;
  align-items: flex-end;
  justify-content: center;
  overflow: hidden;
  border-radius: 20px;
  background: linear-gradient(180deg, rgba(255, 255, 255, 0.25), color-mix(in srgb, var(--tc) 7%, #f4f2ef));
  border: 1px solid rgba(80, 70, 70, 0.08);
}
.trio-full-art img {
  width: 100%;
  height: 100%;
  object-fit: contain;
  object-position: center bottom;
}
.trio-full-art > span {
  margin: auto;
  color: #aaa;
  font-size: 11px;
  letter-spacing: 0.18em;
}
.trio-animal {
  display: flex;
  align-items: center;
  gap: 10px;
  margin: 12px 3px 0;
  padding: 9px 10px;
  border-radius: 12px;
  background: rgba(255, 255, 255, 0.62);
  border: 1px solid rgba(80, 70, 70, 0.08);
}
.trio-animal small {
  font-weight: 800;
  color: var(--tc);
}
.trio-animal img {
  width: 52px;
  height: 52px;
  object-fit: contain;
  margin-left: auto;
}
.trio-person-body > section {
  margin-top: 14px;
  min-height: 120px;
  padding: 16px 17px;
  border-radius: 16px;
  background: rgba(255, 255, 255, 0.55);
  border: 1px solid rgba(80, 70, 70, 0.1);
  border-top: 3px solid var(--tc);
}
.trio-person-body > section small {
  font-size: 10px;
  font-weight: 800;
  letter-spacing: 0.04em;
  color: var(--tc);
}
.trio-person-body > section p {
  margin: 9px 0 0;
  font-size: 13px;
  line-height: 1.7;
  color: #5d5856;
}

.tales-page {
  min-height: calc(100vh - 120px);
  padding: 54px 28px 110px;
}
.tales-shell {
  width: min(980px, 100%);
  margin: 0 auto;
}
.tales-page-head {
  display: flex;
  justify-content: space-between;
  align-items: flex-end;
  margin: 0 0 28px;
  padding-bottom: 20px;
  border-bottom: 1px solid rgba(70, 60, 60, 0.12);
}
.tales-page-head small,
.tale-detail-head > small {
  font-size: 10px;
  letter-spacing: 0.2em;
  color: var(--accent);
  font-weight: 800;
}
.tales-page-head h1,
.tale-detail-head h1 {
  margin: 6px 0 0;
  font-family: var(--serif, Georgia, serif);
  font-size: clamp(40px, 6vw, 68px);
  font-weight: 500;
  line-height: 1;
}
.tales-page-head p {
  margin: 8px 0 0;
  color: #8a8380;
  font-size: 13px;
}
/* v0.3.288 — 썰 검색창. 카드 자체는 항상 그려두고 이 클래스로만 숨깁니다(입력 중
   render() 재호출 없이 hidden 토글). .tale-list-card가 display:grid를 지정하므로
   단순 [hidden] 속성만으로는 안 가려져서 클래스+display:none으로 확실히 덮습니다. */
.tales-search {
  display: flex;
  align-items: center;
  gap: 8px;
  margin: 0 0 18px;
}
.tales-search input {
  flex: 1;
  height: 40px;
  padding: 0 16px;
  border: 1px solid var(--ui-line, rgba(70, 60, 60, 0.14));
  border-radius: 999px;
  background: var(--ui-surface, #fff);
  color: var(--ui-text, inherit);
  font-size: 13px;
}
.tales-search input::placeholder {
  color: var(--ui-text-muted, #a49c98);
}
.tales-search input:focus {
  outline: none;
  border-color: color-mix(in srgb, var(--accent) 45%, var(--ui-line, #ddd));
}
.tales-search-clear {
  flex: 0 0 auto;
  width: 34px;
  height: 34px;
  border: 0;
  border-radius: 999px;
  background: var(--ui-surface, #eee);
  color: var(--ui-text-muted, #766f72);
  font-size: 15px;
  line-height: 1;
  cursor: pointer;
}
.tale-list-card.tale-search-hide {
  display: none;
}
.tale-list {
  display: grid;
  gap: 13px;
}
.tale-list-card {
  width: 100%;
  display: grid;
  grid-template-columns: 180px 1fr;
  text-align: left;
  padding: 0;
  border: 1px solid rgba(80, 70, 70, 0.11);
  border-radius: 18px;
  overflow: hidden;
  background: rgba(255, 255, 255, 0.64);
  color: inherit;
  cursor: pointer;
  transition: 0.18s;
}
/* v0.3.127 — 대표 이미지가 없는 썰 카드는 <figure>가 아예 안 그려져서, grid의 두 칸
   중 첫 번째(180px) 칸에 글자 영역(<div>)이 자동 배치돼버려 카드 전체 너비 대신 180px
   폭에 갇혀 있었습니다("2 CARDS →"가 이상한 위치에 있던 진짜 원인). 이미지 없는 카드는
   한 칸짜리 그리드로 바꿔서 글자 영역이 카드 전체 너비를 쓰게 합니다 — 그러면
   footer의 기존 margin-left:auto가 정상적으로 "CARDS" 배지를 오른쪽 끝으로 밀어줍니다. */
.tale-list-card:not(:has(> figure)) {
  grid-template-columns: 1fr;
}
.tale-list-card:hover {
  transform: translateY(-2px);
  box-shadow: 0 12px 28px rgba(45, 35, 35, 0.07);
  border-color: color-mix(in srgb, var(--accent) 30%, #ddd);
}
.tale-list-card > figure {
  margin: 0;
  min-height: 150px;
  background: #ece9e6;
}
.tale-list-card > figure img {
  width: 100%;
  height: 100%;
  object-fit: cover;
}
.tale-list-card > div {
  padding: 21px 23px;
}
.tale-list-card small {
  font-size: 9px;
  letter-spacing: 0.16em;
  color: #a49c98;
  font-weight: 700;
}
.tale-list-card h2 {
  font-size: 23px;
  margin: 5px 0 7px;
  letter-spacing: -0.035em;
}
.tale-list-card p {
  margin: 0;
  color: #726b68;
  font-size: 13px;
  line-height: 1.65;
}
.tale-list-card footer {
  display: flex;
  align-items: center;
  gap: 6px;
  flex-wrap: wrap;
  margin-top: 14px;
}
.tale-list-card footer span {
  font-size: 10px;
  padding: 4px 8px;
  border-radius: 999px;
  background: color-mix(in srgb, var(--accent) 9%, #fff);
  color: color-mix(in srgb, var(--accent) 78%, #555);
}
.tale-list-card footer b {
  margin-left: auto;
  font-size: 9px;
  letter-spacing: 0.12em;
  color: #8f8783;
}
.tales-empty {
  padding: 48px 20px;
  text-align: center;
  border: 1px dashed rgba(80, 70, 70, 0.18);
  border-radius: 18px;
  color: #8e8783;
}
.tales-empty b {
  display: block;
  margin-bottom: 5px;
  letter-spacing: 0.12em;
}
.tales-back {
  border: 0;
  background: none;
  padding: 0 0 18px;
  color: #827a77;
  font-weight: 800;
  letter-spacing: 0.08em;
  cursor: pointer;
}
.tale-detail-head {
  padding: 18px 0 25px;
  border-bottom: 1px solid rgba(70, 60, 60, 0.12);
  margin-bottom: 26px;
}
.tale-detail-head h1 {
  font-size: clamp(36px, 5vw, 62px);
}
.tale-detail-head > div {
  display: flex;
  align-items: center;
  gap: 7px;
  flex-wrap: wrap;
  margin-top: 14px;
}
.tale-detail-head span {
  font-size: 10px;
  padding: 5px 9px;
  border-radius: 999px;
  background: color-mix(in srgb, var(--accent) 10%, #fff);
  color: var(--accent);
}
.tale-detail-head time {
  margin-left: auto;
  font-size: 10px;
  color: #9a928f;
  letter-spacing: 0.08em;
}
.tale-block-stack {
  display: grid;
  gap: 20px;
}
.tale-text-card,
.tale-dialogue-card,
.tale-image-card,
.tale-qa-card {
  margin: 0;
  border: 1px solid rgba(80, 70, 70, 0.11);
  border-radius: 18px;
  background: rgba(255, 255, 255, 0.68);
  overflow: hidden;
}
/* v0.3.224 — 문답(Q&A) 카드. 오늘의 썰에서 뽑힌 질문을 그대로 채워 쓰는 용도. */
.tale-qa-card {
  padding: 6px 20px;
}
.tale-qa-item {
  padding: 18px 0;
  border-bottom: 1px solid rgba(80, 70, 70, 0.08);
}
.tale-qa-item:last-child {
  border-bottom: 0;
}
.tale-qa-q,
.tale-qa-a {
  margin: 0;
  font-size: 15px;
  line-height: 1.8;
  color: #4b4745;
  word-break: keep-all;
}
.tale-qa-q {
  margin-bottom: 8px;
  font-weight: 700;
}
.tale-qa-q b,
.tale-qa-a b {
  margin-right: 4px;
  color: var(--accent, #9f7d86);
  font-weight: 800;
}
.tale-text-card {
  padding: 27px 30px;
}
.tale-rich-view {
  font-size: 15px;
  line-height: 1.9;
  color: #4b4745;
  word-break: keep-all;
}
.tale-rich-view p,
.tale-rich-view div {
  margin: 0.25em 0 0.8em;
}
.tale-image-card {
  padding: 12px;
}
.tale-image-card img {
  display: block;
  width: 100%;
  height: auto;
  max-height: 82vh;
  object-fit: contain;
  border-radius: 12px;
  background: #f2f0ed;
}
.tale-image-empty {
  height: 260px;
  display: grid;
  place-items: center;
  color: #aaa;
  background: #f0eeeb;
  border-radius: 12px;
}
.tale-image-card figcaption {
  padding: 12px 7px 3px;
  text-align: center;
  color: #817a77;
  font-size: 12px;
  line-height: 1.6;
}
.tale-dialogue-card {
  padding: 18px 20px;
}
.tale-dialogue-line {
  display: grid;
  grid-template-columns: 48px 1fr;
  gap: 13px;
  padding: 14px 0;
  border-bottom: 1px solid rgba(80, 70, 70, 0.08);
}
.tale-dialogue-line:last-child {
  border-bottom: 0;
}
.tale-dialogue-avatar {
  width: 44px;
  height: 44px;
  border-radius: 50%;
  overflow: hidden;
  background: color-mix(in srgb, var(--dc) 12%, #eee);
  border: 2px solid color-mix(in srgb, var(--dc) 54%, #fff);
}
.tale-dialogue-avatar img {
  width: 100%;
  height: 100%;
  object-fit: cover;
}
.tale-dialogue-avatar .art-fallback {
  width: 100%;
  height: 100%;
  display: grid;
  place-items: center;
}
.tale-dialogue-line small {
  display: block;
  color: var(--dc);
  font-size: 10px;
  font-weight: 800;
  margin-bottom: 4px;
}
.tale-dialogue-line .tale-rich-view {
  font-size: 14px;
  line-height: 1.75;
}
/* v0.3.88 — 나레이션: 캐릭터 카드 프리셋에서 왼쪽 프사·이름 없이 가운데 정렬로 표시 */
.tale-dialogue-line.narration {
  display: block;
  text-align: center;
  padding: 10px 8px;
}
.tale-dialogue-line.narration .tale-rich-view {
  display: inline-block;
  font-style: italic;
  color: #8b8380;
}

.annotation-editor-list {
  display: grid;
  gap: 8px;
}
.annotation-editor-row {
  display: grid;
  grid-template-columns: minmax(70px, 0.65fr) 1.5fr 30px;
  gap: 6px;
  align-items: start;
}
/* v0.3.229 — 이 칸들이 border/background 지정이 하나도 없어서 브라우저 기본
   입력창 그대로 보이던 문제. 에디터의 다른 입력칸들과 같은 다크 톤으로 맞췄습니다. */
.annotation-editor-row input,
.annotation-editor-row textarea {
  min-width: 0;
  border: 1px solid #35333a;
  border-radius: 8px;
  background: #19181c;
  color: #f0eef3;
  padding: 8px 10px;
  font: inherit;
  font-size: 12px;
}
.annotation-editor-row textarea {
  min-height: 62px;
  resize: vertical;
}
.trio-editor-person {
  padding: 11px;
  border: 1px solid rgba(255, 255, 255, 0.08);
  border-radius: 12px;
  margin-bottom: 10px;
  background: rgba(255, 255, 255, 0.025);
}
.trio-member-field .trio-member-picker {
  margin-top: 6px;
}
.trio-member-field > small {
  display: block;
  margin-top: 8px;
}
.trio-editor-person header {
  display: flex;
  align-items: center;
  gap: 9px;
  margin-bottom: 10px;
}
.trio-editor-person header > div:last-child {
  display: flex;
  flex-direction: column;
}
.trio-editor-person header small {
  font-size: 9px;
  opacity: 0.55;
}
.trio-editor-colors {
  display: grid;
  grid-template-columns: repeat(3, 1fr);
  gap: 6px;
  margin: 8px 0;
}
.trio-editor-colors label {
  font-size: 9px;
  color: #aaa;
}
.trio-editor-colors input {
  display: block;
  width: 100%;
  height: 30px;
  margin-top: 4px;
  padding: 2px;
}
.trio-editor-upload {
  display: grid;
  grid-template-columns: 1fr auto auto;
  align-items: center;
  gap: 6px;
  margin: 8px 0;
  padding: 7px;
  border: 1px solid rgba(255, 255, 255, 0.07);
  border-radius: 9px;
}
.trio-editor-upload > span {
  grid-column: 1/-1;
  font-size: 10px;
  color: #bbb;
}
.trio-editor-upload img {
  width: 46px;
  height: 46px;
  object-fit: contain;
  border-radius: 6px;
  background: #fff;
}
.trio-editor-upload small {
  font-size: 9px;
  color: #777;
}
.trio-editor-upload label input {
  display: none;
}
.trio-editor-upload > small:last-child {
  grid-column: 1 / -1;
  line-height: 1.5;
}
.trio-editor-badges {
  margin: 10px 0;
  padding: 9px;
  border: 1px solid rgba(255, 255, 255, 0.07);
  border-radius: 9px;
}
.trio-editor-badges > span {
  display: block;
  margin-bottom: 7px;
  font-size: 10px;
  color: #bbb;
}
.trio-editor-badges > div {
  display: grid;
  grid-template-columns: repeat(3, minmax(0, 1fr));
  gap: 6px;
}
.trio-editor-badges article {
  min-width: 0;
  display: flex;
  flex-direction: column;
  gap: 5px;
}
.trio-editor-badges article > img,
.trio-editor-badges article > i {
  width: 100%;
  aspect-ratio: 1;
  display: grid;
  place-items: center;
  overflow: hidden;
  border: 1px solid rgba(255, 255, 255, 0.1);
  border-radius: 8px;
  background: var(--badge-color);
  color: rgba(255, 255, 255, 0.82);
  font-size: 10px;
  font-style: normal;
}
.trio-editor-badges article > img {
  object-fit: cover;
  object-position: center;
}
.trio-editor-badges .ebtn {
  width: 100%;
  min-width: 0;
  padding-inline: 4px;
  text-align: center;
  font-size: 8px;
}
.trio-editor-badges label input {
  display: none;
}
.trio-editor-badges > small {
  display: block;
  margin-top: 7px;
  font-size: 9px;
  line-height: 1.5;
  color: #777;
}
.trio-editor-relation {
  padding: 9px;
  border: 1px solid rgba(255, 255, 255, 0.08);
  border-radius: 10px;
  margin-bottom: 8px;
}
.trio-editor-relation > b {
  display: block;
  font-size: 11px;
  margin-bottom: 7px;
}
.trio-editor-relation label {
  display: block;
  font-size: 9px;
  color: #aaa;
  margin: 6px 0;
}
.trio-editor-relation textarea {
  display: block;
  width: 100%;
  min-height: 58px;
  margin-top: 4px;
}

.modal.tale-editor-modal {
  width: min(900px, calc(100vw - 28px));
  max-height: min(92vh, 950px);
  overflow: auto;
}
.tale-meta-grid {
  display: grid;
  grid-template-columns: 1fr 0.5fr;
  gap: 10px;
}
.tale-modal-blocks {
  display: grid;
  gap: 11px;
  margin: 12px 0;
}
.tale-editor-block {
  border: 1px solid rgba(70, 60, 60, 0.13);
  border-radius: 13px;
  background: #fbfaf9;
  overflow: hidden;
}
.tale-editor-block.dragging {
  opacity: 0.45;
}
.tale-editor-block.drag-over {
  outline: 2px solid var(--accent);
}
.tale-editor-block-head {
  height: 38px;
  display: flex;
  align-items: center;
  gap: 8px;
  padding: 0 8px 0 10px;
  border-bottom: 1px solid rgba(70, 60, 60, 0.09);
  background: #f4f1ee;
}
.tale-editor-block-head .tale-block-grip {
  cursor: grab;
  font-size: 18px;
  color: #8d8581;
  user-select: none;
}
.tale-editor-block-head b {
  font-size: 11px;
}
.tale-editor-block-head > span:nth-of-type(2) {
  margin-left: auto;
  font-size: 9px;
  color: #aaa;
}
.tale-editor-block-head > button {
  border: 0;
  background: none;
  font-size: 18px;
  color: #918985;
  cursor: pointer;
}
.tale-rich-toolbar {
  display: flex;
  align-items: center;
  gap: 4px;
  padding: 7px 9px;
  border-bottom: 1px solid rgba(70, 60, 60, 0.08);
  background: #fff;
}
.tale-rich-toolbar button,
.tale-rich-toolbar label {
  height: 28px;
  min-width: 30px;
  display: grid;
  place-items: center;
  border: 1px solid rgba(70, 60, 60, 0.14);
  border-radius: 7px;
  background: #fff;
  color: #4d4846;
  font-size: 11px;
  cursor: pointer;
}
.tale-rich-toolbar label {
  position: relative;
  overflow: hidden;
}
.tale-rich-toolbar input[type="color"] {
  position: absolute;
  inset: 0;
  width: 100%;
  height: 100%;
  opacity: 0;
  cursor: pointer;
}
.tale-rich-editor {
  min-height: 64px;
  padding: 10px 12px;
  background: #fff;
  color: #383432;
  border: 0;
  outline: none;
  font-size: 13px;
  line-height: 1.7;
}
.tale-rich-large {
  min-height: 120px;
}
.tale-rich-editor:focus {
  box-shadow: inset 0 0 0 2px color-mix(in srgb, var(--accent) 28%, transparent);
}
.tale-add-row {
  display: flex;
  gap: 6px;
  flex-wrap: wrap;
  margin: 9px 0 18px;
}
.tale-editor-image {
  display: flex;
  align-items: center;
  justify-content: center;
  min-height: 150px;
  padding: 10px;
  position: relative;
  background: #eeeae7;
  outline: none;
  cursor: text;
  border: 1px solid transparent;
  border-radius: 8px;
}
/* v0.3.132 — 클릭 후 Ctrl+V로 이미지를 바로 붙여넣을 수 있는 영역이라는 걸 보이게 합니다. */
.tale-editor-image:focus {
  border-color: #8b6471;
}
.tale-image-paste-hint {
  display: block;
  color: #a39b97;
  font-size: 10px;
  margin: 5px 0 8px;
}
.tale-editor-image img {
  max-width: 100%;
  max-height: 300px;
  object-fit: contain;
}
.tale-editor-image > span {
  color: #a39b97;
  letter-spacing: 0.15em;
}
.tale-editor-image label {
  position: absolute;
  right: 10px;
  bottom: 10px;
}
.tale-editor-image input {
  display: none;
}
.tale-editor-block > input[data-tale-caption] {
  width: calc(100% - 18px);
  margin: 9px;
}
.tale-editor-dialogue-line {
  border-bottom: 1px solid rgba(70, 60, 60, 0.08);
}
.tale-dialogue-edit-row {
  display: grid;
  grid-template-columns: 140px 1fr 32px;
  gap: 7px;
  align-items: start;
  padding: 8px;
}
.tale-dialogue-edit-row .tale-rich-editor {
  min-height: 68px;
  border: 1px solid rgba(70, 60, 60, 0.12);
  border-radius: 8px;
}
.tale-dialogue-edit-row > button {
  height: 32px;
  border: 1px solid rgba(70, 60, 60, 0.12);
  border-radius: 7px;
  background: #fff;
  cursor: pointer;
}

@media (max-width: 780px) {
  .trio-page,
  .tales-page {
    padding: 32px 15px 90px;
  }
  .trio-top-grid,
  .trio-body-grid {
    grid-template-columns: 1fr;
    gap: 16px;
  }
  .trio-top-grid {
    display: grid;
  }
  .trio-person-head {
    display: grid;
    grid-template-columns: 92px 1fr;
    grid-template-rows: auto auto auto;
    column-gap: 15px;
    text-align: left;
    align-items: center;
    padding: 10px;
  }
  .trio-avatar {
    grid-row: 1/4;
    width: 92px;
    margin: 0;
  }
  .trio-person-head h2 {
    font-size: 20px;
  }
  .trio-person-head p {
    margin: 2px 0 6px;
    min-height: 0;
  }
  .trio-colors {
    justify-content: flex-start;
  }
  .trio-colors i {
    width: 25px;
    height: 25px;
  }
  .trio-relations {
    grid-template-columns: 1fr;
    margin-bottom: 22px;
  }
  .trio-full-art {
    height: min(66vh, 520px);
  }
  .tale-list-card {
    grid-template-columns: 1fr;
  }
  .tale-list-card > figure {
    max-height: 240px;
  }
  .tale-list-card > div {
    padding: 17px;
  }
  .tale-detail-head time {
    width: 100%;
    margin: 3px 0 0;
  }
  .tale-text-card {
    padding: 21px 19px;
  }
  .tale-dialogue-card {
    padding: 12px;
  }
  .tale-dialogue-line {
    grid-template-columns: 40px 1fr;
    gap: 10px;
  }
  .tale-dialogue-avatar {
    width: 38px;
    height: 38px;
  }
  .tale-meta-grid {
    grid-template-columns: 1fr;
  }
  .tale-dialogue-edit-row {
    grid-template-columns: 1fr 32px;
  }
  .tale-dialogue-edit-row .lope-select,
  .tale-dialogue-edit-row select {
    grid-column: 1/-1;
  }
  .annotation-editor-row {
    grid-template-columns: 1fr 32px;
  }
  .annotation-editor-row textarea {
    grid-column: 1/2;
  }
  .annotation-editor-row button {
    grid-column: 2;
    grid-row: 1/3;
  }
  .lope-annotation-note {
    left: 0;
    transform: translate(0, 5px);
    max-width: 78vw;
  }
  .lope-annotation:hover .lope-annotation-note,
  .lope-annotation:focus .lope-annotation-note,
  .lope-annotation:focus-within .lope-annotation-note {
    transform: translate(0, 0);
  }
}

/* v0.3.85 · pair profile layout presets */
.pair-direction-title {
  display: grid;
  grid-template-columns: 1fr 42px 1fr;
  align-items: center;
  gap: 8px;
  margin-bottom: 4px;
  font:
    700 8px/1 Arial,
    sans-serif;
  letter-spacing: 0.06em;
  color: #827a7e;
}
.pair-direction-title span:first-child {
  text-align: right;
}
.pair-direction-title span:last-child {
  text-align: left;
}
.pair-direction-title strong {
  display: grid;
  place-items: center;
  width: 36px;
  height: 25px;
  border-radius: 999px;
  margin: auto;
  background: color-mix(in srgb, var(--c), #fff 83%);
  color: var(--c);
  font:
    700 20px/1 Arial,
    sans-serif;
}
.pair-personal-galleries {
  display: grid;
  grid-template-columns: 1fr 1fr;
  gap: 12px;
}
.pair-personal-gallery {
  border: 1px solid color-mix(in srgb, var(--c), #d7d0cd 72%);
  background: rgba(255, 255, 255, 0.88);
  padding: 12px;
  border-radius: 17px;
}
.pair-personal-gallery > header {
  display: flex;
  align-items: center;
  gap: 10px;
  margin-bottom: 10px;
}
.pair-personal-gallery > header .pair-info-avatar {
  width: 42px;
  height: 42px;
  border-width: 3px;
}
.pair-personal-gallery > header small {
  display: block;
  font:
    700 6px/1 Arial,
    sans-serif;
  letter-spacing: 0.16em;
  color: #aaa;
}
.pair-personal-gallery > header b {
  font:
    600 15px/1.2 Georgia,
    "Noto Serif KR",
    serif;
}
.pair-personal-grid {
  display: grid;
  grid-template-columns: 1fr 1fr;
  gap: 7px;
}
.pair-personal-grid figure {
  height: 170px;
  margin: 0;
  border-radius: 11px;
  overflow: hidden;
  background: #eeeae7;
  border: 1px solid #ded7d3;
  display: grid;
  place-items: center;
}
.pair-personal-grid img {
  width: 100%;
  height: 100%;
  object-fit: cover;
}
.pair-personal-grid span {
  font:
    700 7px/1 Arial,
    sans-serif;
  letter-spacing: 0.12em;
  color: #aaa;
}
.pair-preset {
  min-height: 100vh;
  padding: 72px max(18px, calc((100vw - 1320px) / 2)) max(92px, calc(env(safe-area-inset-bottom) + 82px));
  background: linear-gradient(
    120deg,
    color-mix(in srgb, var(--a), #fff 94%),
    #f7f5f1 45%,
    color-mix(in srgb, var(--b), #fff 94%)
  );
  color: #1d1b20;
  overflow: hidden;
}
.pair-preset-head {
  text-align: center;
  margin: 0 auto 22px;
}
.pair-preset-head > small {
  font:
    700 7px/1 Arial,
    sans-serif;
  letter-spacing: 0.22em;
  color: #9a9297;
}
.pair-preset-head h1 {
  font:
    500 clamp(36px, 5vw, 70px)/1 Georgia,
    "Noto Serif KR",
    serif;
  margin: 7px 0 9px;
}
.pair-preset-head > div {
  display: flex;
  justify-content: center;
  gap: 6px;
  flex-wrap: wrap;
}
.pair-preset-head > div span {
  font-size: 8px;
  padding: 5px 8px;
  border: 1px solid #d7d0cd;
  border-radius: 999px;
  background: #fff9;
}
.pair-preset .pair-info-avatar {
  flex: 0 0 auto;
}
.pair-edge-v4.inside {
  position: absolute;
  top: 2%;
  bottom: 0;
  width: 58%;
  height: 98%;
  z-index: 2;
  opacity: 1;
  pointer-events: none;
}
.pair-edge-v4.inside.left {
  left: -7%;
}
.pair-edge-v4.inside.right {
  right: -7%;
}
.pair-edge-v4.inside img {
  object-position: center bottom;
}
/* full body preset */
.pair-fullbody-stage {
  display: grid;
  grid-template-columns: minmax(220px, 0.72fr) minmax(480px, 1.55fr) minmax(220px, 0.72fr);
  gap: 18px;
  min-height: 620px;
  align-items: stretch;
}
.pair-fullbody-copy {
  align-self: center;
  background: #fffc;
  border: 1px solid color-mix(in srgb, var(--c), #d7d0cd 70%);
  border-radius: 22px;
  padding: 23px;
  position: relative;
  z-index: 4;
}
.pair-fullbody-copy.right {
  text-align: right;
}
.pair-fullbody-copy.right .pair-info-avatar {
  margin-left: auto;
}
.pair-fullbody-copy .pair-info-avatar {
  width: 76px;
  height: 76px;
  margin-bottom: 14px;
}
.pair-fullbody-copy > small {
  font:
    700 7px/1 Arial,
    sans-serif;
  letter-spacing: 0.15em;
  color: var(--c);
}
.pair-fullbody-copy h2 {
  font:
    600 31px/1 Georgia,
    serif;
  margin: 7px 0 2px;
}
.pair-fullbody-copy > b {
  font-size: 10px;
  color: #7f777b;
}
.pair-fullbody-copy p {
  font:
    400 10px/1.8 "Noto Serif KR",
    serif;
  color: #655e62;
  margin: 17px 0;
}
.pair-fullbody-tags {
  display: flex;
  gap: 5px;
  flex-wrap: wrap;
}
.pair-fullbody-copy.right .pair-fullbody-tags {
  justify-content: flex-end;
}
.pair-fullbody-tags span {
  font-size: 7px;
  border: 1px solid #ded7d3;
  border-radius: 999px;
  padding: 5px 7px;
}
.pair-fullbody-art {
  position: relative;
  min-height: 620px;
  border-radius: 28px;
  background: linear-gradient(180deg, #ffffff80, #ffffff20);
  border: 1px solid #ded7d3;
  overflow: hidden;
}
.pair-fullbody-name {
  position: absolute;
  left: 50%;
  bottom: 18px;
  transform: translateX(-50%);
  z-index: 6;
  text-align: center;
  background: #fffde;
  border: 1px solid #d8d1ce;
  border-radius: 999px;
  padding: 8px 24px;
  white-space: nowrap;
}
.pair-fullbody-name small {
  font:
    700 6px/1 Arial,
    sans-serif;
  letter-spacing: 0.18em;
  color: #aaa;
  display: block;
}
.pair-fullbody-name b {
  font:
    600 20px/1.25 Georgia,
    "Noto Serif KR",
    serif;
}
.pair-fullbody-directions {
  display: grid;
  grid-template-columns: 1fr 1fr;
  gap: 12px;
  margin-top: 14px;
}
.pair-fullbody-directions .pair-direction-v4 {
  min-height: 130px;
}
/* status + timeline preset */
.pair-status-grid {
  display: grid;
  grid-template-columns: minmax(250px, 0.9fr) minmax(430px, 1.25fr) minmax(250px, 0.9fr);
  gap: 16px;
  align-items: start;
}
.pair-status-side,
.pair-status-center > article {
  background: #fffd;
  border: 1px solid #d8d1ce;
  border-radius: 19px;
}
.pair-status-side {
  padding: 22px;
}
.pair-status-side .pair-info-avatar {
  width: 112px;
  height: 112px;
  margin: 0 auto 13px;
}
.pair-status-side > small,
.pair-status-side > h2,
.pair-status-side > b {
  text-align: center;
  display: block;
}
.pair-status-side > small {
  color: var(--c);
  font:
    700 7px/1 Arial,
    sans-serif;
  letter-spacing: 0.15em;
}
.pair-status-side h2 {
  font:
    600 31px/1 Georgia,
    serif;
  margin: 7px 0 3px;
}
.pair-status-side > b {
  font-size: 10px;
}
.pair-status-side > p {
  min-height: 85px;
  font:
    400 9px/1.8 "Noto Serif KR",
    serif;
  color: #655e62;
  margin: 16px 0;
}
.pair-status-bars {
  border-top: 1px solid #e1dcd9;
  padding-top: 12px;
}
.pair-status-bars > div {
  display: grid;
  grid-template-columns: 58px 1fr auto;
  gap: 8px;
  align-items: center;
  margin: 8px 0;
}
.pair-status-bars span {
  font-size: 7px;
  color: #7d757a;
}
.pair-status-bars i {
  height: 1px;
  align-self: center;
  background: repeating-linear-gradient(90deg, #cfc8c5 0 3px, transparent 3px 7px);
}
.pair-status-bars b {
  font-size: 7px;
  white-space: nowrap;
}
.pair-status-side blockquote {
  margin: 18px 0 8px;
  padding: 12px 14px;
  border-radius: 12px;
  background: color-mix(in srgb, var(--c), #fff 91%);
  font:
    500 10px/1.65 "Noto Serif KR",
    serif;
}
.pair-status-reply {
  font-size: 8px;
  line-height: 1.6;
  color: #70686d;
  border-left: 2px solid var(--c);
  padding-left: 10px;
  white-space: pre-wrap;
}
.pair-status-center {
  display: flex;
  flex-direction: column;
  gap: 10px;
}
.pair-world-card {
  padding: 24px 26px;
}
.pair-world-card small,
.pair-mini-timeline header small,
.pair-danger-card small {
  font:
    700 7px/1 Arial,
    sans-serif;
  letter-spacing: 0.16em;
  color: #9d9499;
}
.pair-world-card h2 {
  font:
    600 27px/1.2 Georgia,
    "Noto Serif KR",
    serif;
  margin: 8px 0;
}
.pair-world-card p {
  font:
    400 10px/1.85 "Noto Serif KR",
    serif;
  white-space: pre-wrap;
  color: #5d565a;
}
.pair-danger-card {
  padding: 16px 20px;
}
.pair-danger-card header {
  display: flex;
  gap: 10px;
  align-items: center;
}
.pair-danger-card header b {
  font-size: 10px;
}
.pair-danger-card header strong {
  margin-left: auto;
  font:
    600 15px/1 Georgia,
    serif;
}
.pair-danger-meter {
  display: grid;
  grid-template-columns: repeat(5, 1fr);
  gap: 4px;
  margin-top: 11px;
}
.pair-danger-meter i {
  height: 13px;
  border-radius: 4px;
  background: #e8e3e1;
}
.pair-danger-meter i.on {
  background: linear-gradient(90deg, var(--a), var(--b));
}
.pair-mini-timeline {
  padding: 18px 20px;
}
.pair-mini-timeline > header {
  display: flex;
  justify-content: space-between;
  align-items: center;
  padding-bottom: 8px;
  border-bottom: 1px solid #ddd6d2;
}
.pair-mini-timeline > header b {
  font:
    700 7px/1 Arial,
    sans-serif;
  letter-spacing: 0.1em;
  color: #aaa;
}
.pair-mini-timeline > div {
  display: grid;
  grid-template-columns: 48px 1fr;
  gap: 10px;
  padding: 12px 0;
  border-bottom: 1px solid #ebe6e3;
}
.pair-mini-timeline > div > strong {
  font:
    600 21px/1 Georgia,
    serif;
}
.pair-mini-timeline section small {
  font-size: 6px;
  color: #aaa;
}
.pair-mini-timeline section b {
  display: block;
  font:
    600 11px/1.3 "Noto Serif KR",
    serif;
  margin: 2px 0 4px;
}
.pair-mini-timeline section p {
  font-size: 8px;
  line-height: 1.55;
  color: #7a7276;
  margin: 0;
  display: -webkit-box;
  -webkit-line-clamp: 2;
  -webkit-box-orient: vertical;
  overflow: hidden;
}
.pair-empty-copy {
  font-size: 9px;
  color: #aaa;
  padding: 16px 0;
}
/* large banner preset */
.pair-layout-banner {
  background: #f4f2ef;
}
.pair-banner-hero {
  height: min(55vh, 610px);
  position: relative;
  border: 1px solid #d1cbc8;
  border-radius: 23px;
  overflow: hidden;
  background: #ddd;
}
.pair-banner-hero > img {
  width: 100%;
  height: 100%;
  object-fit: cover;
  transform: translate(var(--img-x, 0%), var(--img-y, 0%)) scale(var(--img-scale, 1));
}
.pair-banner-hero > div {
  position: absolute;
  inset: auto 20px 20px 20px;
  background: #fffde;
  border: 1px solid #fff;
  border-radius: 16px;
  padding: 13px 18px;
}
.pair-banner-hero small {
  font:
    700 7px/1 Arial,
    sans-serif;
  letter-spacing: 0.18em;
}
.pair-banner-hero h1 {
  font:
    600 clamp(31px, 4vw, 60px)/1 Georgia,
    "Noto Serif KR",
    serif;
  margin: 4px 0;
}
.pair-banner-bottom {
  display: grid;
  grid-template-columns: 1fr 0.8fr 1fr;
  gap: 14px;
  margin-top: 14px;
}
.pair-banner-person,
.pair-banner-keywords {
  background: #fffd;
  border: 1px solid #d7d0cd;
  border-radius: 18px;
  padding: 20px;
}
.pair-banner-person {
  display: grid;
  grid-template-columns: 86px 1fr;
  gap: 14px;
  align-items: center;
}
.pair-banner-person .pair-info-avatar {
  width: 82px;
  height: 82px;
}
.pair-banner-person small {
  font:
    700 6px/1 Arial,
    sans-serif;
  color: var(--c);
}
.pair-banner-person h2 {
  font:
    600 28px/1 Georgia,
    serif;
  margin: 5px 0 2px;
}
.pair-banner-person > dl {
  grid-column: 1/-1;
  display: grid;
  grid-template-columns: repeat(2, 1fr);
  gap: 5px;
  margin: 5px 0 0;
}
.pair-banner-person dl div {
  display: flex;
  justify-content: space-between;
  border-top: 1px solid #e5dfdc;
  padding-top: 6px;
}
.pair-banner-person dt,
.pair-banner-person dd {
  font-size: 7px;
  margin: 0;
}
.pair-banner-person dt {
  color: #aaa;
}
.pair-banner-keywords {
  text-align: center;
  display: flex;
  flex-direction: column;
  align-items: center;
  justify-content: center;
  gap: 7px;
}
.pair-banner-keywords > small {
  font:
    700 6px/1 Arial,
    sans-serif;
  letter-spacing: 0.18em;
  color: #aaa;
}
.pair-banner-keywords h2 {
  font:
    600 28px/1.1 Georgia,
    "Noto Serif KR",
    serif;
  margin: 3px 0 8px;
}
.pair-banner-keywords h2 img {
  max-width: 180px;
  max-height: 70px;
  object-fit: contain;
}
.pair-banner-keywords span {
  width: 100%;
  border: 1px solid #d9d2cf;
  border-radius: 4px;
  padding: 8px 10px;
  font-size: 8px;
}
/* playlist / lyric preset */
.pair-layout-playlist {
  position: relative;
  background:
    radial-gradient(circle at 10% 12%, color-mix(in srgb, var(--a) 42%, transparent), transparent 38%),
    radial-gradient(circle at 90% 18%, color-mix(in srgb, var(--b) 38%, transparent), transparent 40%),
    linear-gradient(145deg, color-mix(in srgb, var(--p) 34%, #111218), #111218 72%);
  color: #fff;
  min-height: 100vh;
  isolation: isolate;
}
.pair-player-bg {
  position: absolute;
  inset: -40px;
  z-index: -2;
  background-position: center;
  background-size: cover;
  filter: blur(28px) saturate(0.82);
  opacity: 0.38;
}
.pair-layout-playlist:after {
  content: "";
  position: absolute;
  inset: 0;
  z-index: -1;
  background: linear-gradient(color-mix(in srgb, var(--p) 13%, #11131a99), #0f1016d9 82%);
}
.pair-layout-playlist > header {
  text-align: center;
}
.pair-layout-playlist > header small {
  font:
    700 7px/1 Arial,
    sans-serif;
  letter-spacing: 0.2em;
  color: #ffffffa0;
}
.pair-layout-playlist > header h1 {
  font:
    500 clamp(33px, 4vw, 56px)/1 Georgia,
    "Noto Serif KR",
    serif;
  margin: 8px 0;
  color: #fff !important;
  text-shadow: 0 2px 18px rgba(0,0,0,.42);
}
.pair-layout-playlist > header p {
  font-size: 9px;
  color: #ffffffa8;
}
.pair-player-stage {
  display: grid;
  grid-template-columns: 220px minmax(440px, 680px) 220px;
  align-items: center;
  justify-content: center;
  gap: 24px;
  margin-top: 28px;
}
.pair-player-person {
  text-align: center;
}
.pair-player-person .pair-info-avatar {
  width: 138px;
  height: 138px;
  margin: auto;
  border-color: color-mix(in srgb, var(--c), #fff 36%);
  box-shadow: 0 0 0 5px color-mix(in srgb, var(--c) 18%, transparent);
}
.pair-player-person-txt {
  margin-top: 10px;
  padding: 10px 13px 11px;
  border: 1px solid color-mix(in srgb, var(--c), transparent 48%);
  border-radius: 14px;
  background: color-mix(in srgb, var(--c), #111218 76%);
  box-shadow: 0 10px 24px rgba(0,0,0,.16);
}
.pair-player-person small {
  display: block;
  margin-top: 0;
  font:
    700 7px/1 Arial,
    sans-serif;
  letter-spacing: 0.15em;
  color: #ffffffb8 !important;
}
.pair-player-person h2 {
  font:
    500 23px/1.2 Georgia,
    "Noto Serif KR",
    serif;
  margin: 5px 0;
  color: #fff !important;
  text-shadow: 0 1px 8px rgba(0,0,0,.4);
}
.pair-player-person span {
  font-size: 8px;
  color: #ffffffc4 !important;
}
.pair-player-disc {
  aspect-ratio: 1;
  border-radius: 50%;
  position: relative;
  border: 2px solid color-mix(in srgb, var(--p), #fff 48%);
  box-shadow:
    0 0 0 9px color-mix(in srgb, var(--p) 12%, transparent),
    0 0 0 12px color-mix(in srgb, var(--p), #fff 70%);
  overflow: hidden;
  background: #181b21;
}
.pair-player-disc > img {
  width: 100%;
  height: 100%;
  object-fit: cover;
  filter: brightness(0.62);
}
.pair-player-disc > i {
  position: absolute;
  inset: 17%;
  border: 1px solid #ffffff45;
  border-radius: 50%;
  box-shadow:
    0 0 0 14px #ffffff0b,
    0 0 0 28px #ffffff0a;
}
.pair-player-lyrics {
  position: absolute;
  left: 15%;
  right: 15%;
  bottom: 12%;
  height: 130px;
  text-align: center;
  display: grid;
  place-items: center;
  overflow: hidden;
}
.pair-player-lyrics article {
  position: absolute;
  inset: 0;
  display: flex;
  flex-direction: column;
  align-items: center;
  justify-content: flex-end;
  opacity: 0;
  animation: pairTrackCycle calc(var(--n) * 6s) infinite;
  animation-delay: calc(var(--i) * 6s);
}
.pair-player-lyrics article:only-child,
.pair-player-lyrics article.static {
  animation: none;
  opacity: 1;
}
.pair-player-lyrics small {
  font-size: 7px;
  color: #ffffffa8;
}
.pair-player-lyrics b {
  font:
    600 14px/1.2 "Noto Serif KR",
    serif;
  margin: 4px 0;
}
.pair-player-lyrics p {
  font:
    400 13px/1.55 "Noto Serif KR",
    serif;
  margin: 0;
  color: #fff;
  text-shadow: 0 1px 4px #000;
}
.pair-player-progress {
  width: min(800px, 78vw);
  display: grid;
  grid-template-columns: auto 1fr auto;
  gap: 10px;
  align-items: center;
  margin: 32px auto 0;
  font-size: 8px;
}
.pair-player-progress > i {
  height: 2px;
  background: #ffffff5c;
  position: relative;
}
.pair-player-progress > i em {
  position: absolute;
  inset: 0 auto 0 0;
  width: 40%;
  background: linear-gradient(90deg, var(--a), var(--p), var(--b));
  animation: pairProgress 6s linear infinite;
}
@keyframes pairTrackCycle {
  0%,
  14% {
    opacity: 1;
    transform: translateY(0);
  }
  17%,
  96% {
    opacity: 0;
    transform: translateY(8px);
  }
  97%,
  100% {
    opacity: 0;
  }
}
@keyframes pairProgress {
  from {
    width: 0;
  }
  to {
    width: 100%;
  }
}
/* poster / half body preset */
.pair-layout-poster {
  /* v0.3.324 — 다른 스킨 색으로 바꿔도 이 배경만 고정 크림색이라 어색하다는 요청으로,
     명도·채도는 그대로 두고 색상만 배경 · MAIN 색을 따라가도록 변경. */
  background: hsl(from var(--accent) h 24% 96%);
}
.pair-poster-top {
  display: grid;
  grid-template-columns: 1fr minmax(220px, 0.6fr) 1fr;
  align-items: center;
  border-bottom: 1px solid #29282c;
  margin-bottom: 0;
}
.pair-poster-top > div {
  display: flex;
  gap: 13px;
  justify-content: center;
  flex-wrap: wrap;
  padding: 13px;
}
.pair-poster-top span {
  font:
    500 9px/1.3 "Noto Serif KR",
    serif;
}
.pair-poster-top h1 {
  text-align: center;
  margin: 0;
  padding: 12px;
  border-left: 1px solid #29282c;
  border-right: 1px solid #29282c;
  font:
    600 34px/1 Georgia,
    "Noto Serif KR",
    serif;
}
.pair-poster-top h1 img {
  max-width: 240px;
  max-height: 74px;
  object-fit: contain;
}
.pair-poster-grid {
  display: grid;
  grid-template-columns: 1fr 1.35fr 1fr;
  min-height: 690px;
  border-bottom: 1px solid #29282c;
}
.pair-poster-copy {
  padding: 64px 36px 32px;
  position: relative;
  z-index: 4;
}
.pair-poster-copy.right {
  text-align: right;
}
.pair-poster-copy > small {
  font:
    700 8px/1 Arial,
    sans-serif;
  color: var(--c);
  letter-spacing: 0.12em;
}
.pair-poster-copy h2 {
  font:
    600 clamp(38px, 4.2vw, 70px)/0.88 Georgia,
    serif;
  margin: 10px 0 5px;
}
.pair-poster-copy h3 {
  font:
    600 17px/1.2 "Noto Serif KR",
    serif;
}
.pair-poster-mini {
  display: flex;
  flex-direction: column;
  gap: 5px;
  margin: 24px 0;
}
.pair-poster-copy.right .pair-poster-mini {
  align-items: flex-end;
}
.pair-poster-mini span {
  display: flex;
  gap: 10px;
  font-size: 8px;
}
.pair-poster-mini b {
  color: var(--c);
}
.pair-poster-copy p {
  font:
    400 10px/1.8 "Noto Serif KR",
    serif;
  white-space: pre-wrap;
  color: #575156;
}
/* v0.3.302 — 캐릭터 이미지를 자르는 레이어(.pair-poster-stage)와 말풍선 레이어를
   분리하기 위한 안 잘리는 바깥 래퍼. 그리드 칸을 이 래퍼가 대신 차지하고, 안쪽
   .pair-poster-stage는 inset:0으로 정확히 같은 자리를 채웁니다(기존과 동일하게 보임) —
   말풍선만 이 래퍼의 형제로 옮겨서 스테이지 밖으로 드래그해도 잘리지 않습니다. */
.pair-poster-stage-wrap {
  position: relative;
}
.pair-poster-stage {
  position: absolute;
  inset: 0;
  border-left: 1px solid #29282c;
  border-right: 1px solid #29282c;
  overflow: hidden;
  /* v0.3.334 — .pair-layout-poster 바깥 배경은 v0.3.324에서 배경·MAIN 색을
     따라가게 고쳤는데, 그 안쪽 인물 스테이지(.pair-poster-stage)는 그대로
     --a/--b(캐릭터 고유색, 기본값이 핑크 계열)로 남아 있어서 스킨 색을 바꿔도
     계속 핑크로 보인다는 재차 리포트. 바깥과 같은 방식으로 accent 색상만
     따라가도록 통일. */
  background: linear-gradient(180deg, hsl(from var(--accent) h 22% 95%), hsl(from var(--accent) h 20% 90%));
}
.pair-poster-stage:before {
  content: "";
  position: absolute;
  inset: 8% 8% auto;
  height: 1px;
  background: #29282c55;
}
.pair-poster-stage .pair-edge-v4.inside {
  width: 66%;
  top: 8%;
  height: 92%;
}
.pair-poster-stage .pair-edge-v4.inside.left {
  left: -13%;
}
.pair-poster-stage .pair-edge-v4.inside.right {
  right: -13%;
}
.pair-poster-conversation {
  position: absolute;
  /* v0.3.302 — 옆 텍스트(.pair-poster-copy, z-index:4)·상단바(z-index:40)·하단
     독(z-index:80)보다는 아래, 캐릭터 이미지(.pair-edge-v4, z-index:2)보다는 위에
     오도록 자유롭게 옮긴 말풍선이 그 위 UI를 가리지 않게 합니다. */
  z-index: 3;
  inset: 14% 7% 10%;
  display: flex;
  flex-direction: column;
  justify-content: center;
  gap: 9px;
  pointer-events: none;
}
.pair-poster-bubble {
  position: relative;
  width: fit-content;
  /* v0.3.291 — 글자가 아주 짧으면(1~2글자) fit-content 너비가 border-radius(18px)보다
     작아져서 말풍선이 둥근 사각형 대신 동그라미로 뭉개지고, 꼬리(:after, right/left:24px)도
     테두리 밖으로 삐져나갔습니다. min-width로 최소 너비를 꼬리 위치보다 넉넉히 키워
     짧은 대사에서도 항상 말풍선 모양을 유지합니다. */
  min-width: 60px;
  max-width: min(48%, 250px);
  background: #fff;
  border: 1px solid color-mix(in srgb, var(--c), #444 50%);
  border-radius: 18px;
  padding: 8px 14px;
  font: 500 9px/1.45 "Noto Serif KR", serif;
  box-shadow: 0 7px 20px #00000012;
  text-align: center;
}
.pair-poster-bubble.left {
  align-self: flex-start;
  margin-right: 25%;
}
.pair-poster-bubble.right {
  align-self: flex-end;
  margin-left: 25%;
}
.pair-poster-bubble.left:after,
.pair-poster-bubble.right:after {
  content: "";
  position: absolute;
  bottom: -7px;
  width: 12px;
  height: 12px;
  background: #fff;
  border-bottom: 1px solid color-mix(in srgb, var(--c), #444 50%);
  transform: rotate(45deg);
}
.pair-poster-bubble.left:after {
  right: 24px;
  border-right: 1px solid color-mix(in srgb, var(--c), #444 50%);
}
.pair-poster-bubble.right:after {
  left: 24px;
  border-right: 1px solid color-mix(in srgb, var(--c), #444 50%);
}
/* v0.3.291 — 편집 모드에서만 말풍선을 직접 드래그로 옮길 수 있게 합니다. 방문자
   화면(.pair-poster-conversation의 기본 pointer-events:none)은 그대로 두어, 아래
   전신 이미지 드래그·클릭을 막지 않습니다. */
.site.editing .pair-poster-bubble {
  pointer-events: auto;
  cursor: grab;
  touch-action: none;
}
.site.editing .pair-poster-bubble.is-dragging {
  cursor: grabbing;
  z-index: 20;
  box-shadow: 0 10px 26px #00000022;
}
.pair-poster-conversation-empty {
  align-self: center;
  max-width: 220px;
  padding: 10px 14px;
  border: 1px dashed #7d74794f;
  border-radius: 13px;
  color: #70686d;
  background: rgba(255,255,255,.72);
  font-size: 8px;
  line-height: 1.6;
  text-align: center;
}
.relation-personal-image-editor {
  display: grid;
  grid-template-columns: 1fr 1fr;
  gap: 7px;
}
.relation-track-picker {
  display: flex;
  flex-direction: column;
  gap: 8px;
}
.relation-track-group {
  border: 1px solid #2f2d33;
  border-radius: 9px;
  padding: 9px;
}
.relation-track-group > b {
  display: block;
  font-size: 9px;
  margin-bottom: 6px;
}
.relation-track-group label {
  display: flex;
  align-items: center;
  gap: 7px;
  padding: 5px 0;
  font-size: 8px;
}
.relation-track-group input {
  width: auto !important;
}
.relation-layout-field select {
  font-weight: 700;
}
@media (max-width: 900px) {
  .pair-personal-galleries,
  .pair-fullbody-directions {
    grid-template-columns: 1fr;
  }
  .pair-personal-grid figure {
    height: 145px;
  }
  .pair-preset {
    padding: 58px 12px max(92px, calc(env(safe-area-inset-bottom) + 82px));
  }
  .pair-fullbody-stage,
  .pair-status-grid,
  .pair-banner-bottom,
  .pair-player-stage,
  .pair-poster-grid {
    grid-template-columns: 1fr;
  }
  .pair-fullbody-art {
    min-height: 560px;
    grid-row: 1;
  }
  .pair-fullbody-copy {
    grid-row: auto;
  }
  .pair-status-side {
    order: 2;
  }
  .pair-status-center {
    order: 1;
  }
  .pair-banner-hero {
    height: 44vh;
    min-height: 320px;
  }
  .pair-player-stage {
    display: flex;
    flex-wrap: wrap;
    justify-content: space-between;
    align-items: center;
    gap: 14px 10px;
  }
  .pair-player-person {
    flex: 1 1 45%;
    min-width: 0;
    display: flex;
    align-items: center;
    gap: 8px;
    text-align: left;
  }
  .pair-player-person .pair-info-avatar {
    flex: none;
    width: 40px;
    height: 40px;
    margin: 0;
  }
  .pair-player-person-txt {
    min-width: 0;
    margin-top: 0;
    overflow: hidden;
  }
  .pair-player-person small {
    display: block;
    margin: 0;
    font-size: 6px;
  }
  .pair-player-person h2 {
    font-size: 12px;
    margin: 2px 0 0;
    white-space: nowrap;
    overflow: hidden;
    text-overflow: ellipsis;
  }
  .pair-player-person span {
    display: block;
    font-size: 7px;
    white-space: nowrap;
    overflow: hidden;
    text-overflow: ellipsis;
  }
  .pair-player-person.right {
    flex-direction: row-reverse;
    text-align: right;
    order: 2;
  }
  .pair-player-person.left {
    order: 1;
  }
  .pair-player-disc {
    order: 3;
    flex: 1 1 100%;
    width: min(82vw, 560px);
    margin: auto;
  }
  .pair-poster-top {
    grid-template-columns: 1fr;
  }
  .pair-poster-top h1 {
    border: 0;
    border-top: 1px solid #29282c;
    border-bottom: 1px solid #29282c;
  }
  .pair-poster-grid {
    display: flex;
    flex-direction: column;
  }
  .pair-poster-stage-wrap {
    order: 1;
    height: 620px;
  }
  .pair-poster-stage {
    border-left: 0;
    border-right: 0;
    border-bottom: 1px solid #29282c;
  }
  .pair-poster-copy {
    order: 2;
    padding: 32px 24px;
  }
  .pair-poster-copy.right {
    text-align: left;
  }
  .pair-poster-copy.right .pair-poster-mini {
    align-items: flex-start;
  }
  .relation-personal-image-editor {
    grid-template-columns: 1fr;
  }
}
@media (max-width: 520px) {
  .pair-personal-galleries {
    grid-template-columns: 1fr;
  }
  .pair-personal-grid figure {
    height: 125px;
  }
  .pair-preset-head h1 {
    font-size: 38px;
  }
  .pair-fullbody-art {
    min-height: 460px;
  }
  .pair-status-side .pair-info-avatar {
    width: 88px;
    height: 88px;
  }
  .pair-banner-person {
    grid-template-columns: 64px 1fr;
  }
  .pair-banner-person .pair-info-avatar {
    width: 60px;
    height: 60px;
  }
  .pair-player-disc {
    width: 88vw;
  }
  .pair-player-lyrics {
    left: 10%;
    right: 10%;
    height: 115px;
  }
  .pair-player-lyrics p {
    font-size: 11px;
  }
  .pair-poster-stage-wrap {
    height: 500px;
  }
  .pair-poster-conversation {
    inset: 12% 5% 8%;
    gap: 7px;
  }
  .pair-poster-bubble {
    max-width: 180px;
    padding: 7px 11px;
    font-size: 8px;
  }
}

.trio-auto-note {
  display: block;
  margin-top: 3px;
  font-size: 9px;
  font-style: normal;
  font-weight: 700;
  color: var(--accent);
  letter-spacing: 0.04em;
}
.trio-auto-preview {
  display: grid;
  gap: 4px;
  margin: 8px 0 12px;
  padding: 10px 11px;
  border-radius: 10px;
  background: rgba(255, 255, 255, 0.62);
  border: 1px solid rgba(80, 70, 70, 0.08);
}
.trio-auto-preview span {
  font-size: 11px;
  font-weight: 700;
  color: #5f5957;
}
.trio-auto-preview small {
  font-size: 10px;
  line-height: 1.5;
  color: #8a8380;
}
.drawer-note.compact {
  display: block;
  margin: -4px 0 10px;
}
.roster-compare {
  display: flex;
  gap: 8px;
  flex-wrap: wrap;
  justify-content: center;
}

/* v0.3.87 · dialogue annotations / tale messenger / profile autofill */
.talk-message-body-label {
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: 8px;
  margin: 0 0 5px;
}
.talk-message-body-label small {
  margin: 0 !important;
}
.talk-message-body-label button {
  border: 1px solid #3c3942;
  border-radius: 8px;
  background: #18161b;
  color: #c7c1cc;
  padding: 4px 9px;
  font:
    700 9px/1 "Noto Sans KR",
    sans-serif;
  cursor: pointer;
}
.talk-message-body-label button:hover {
  border-color: #696370;
  color: #fff;
}
.talk-message-body textarea::placeholder {
  color: #6d6872;
}
.tale-dialogue-layout-picker {
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: 12px;
  padding: 10px 12px;
  margin: 0 0 10px;
  border: 1px solid rgba(80, 70, 70, 0.1);
  border-radius: 10px;
  background: rgba(255, 255, 255, 0.55);
}
.tale-dialogue-layout-picker small {
  font-size: 10px;
  font-weight: 800;
  color: #8b8380;
}
.tale-mob-editor-wrap {
  padding: 10px 12px;
  margin: 0 0 10px;
  border: 1px solid rgba(80, 70, 70, 0.1);
  border-radius: 10px;
  background: rgba(255, 255, 255, 0.55);
}
.tale-mob-editor-wrap > small {
  display: block;
  margin-bottom: 8px;
  font-size: 10px;
  font-weight: 800;
  color: #8b8380;
}
.tale-mob-editor-wrap .m-btn {
  margin-top: 4px;
}
.tale-dialogue-layout-picker select {
  min-width: 150px;
}
.tale-dialogue-card.messenger {
  display: grid;
  gap: 7px;
  padding: 20px 18px;
  background: color-mix(in srgb, var(--world-bg) 82%, #fff);
}
.tale-messenger-line {
  display: flex;
  align-items: flex-end;
  gap: 9px;
  max-width: 78%;
}
.tale-messenger-line.right {
  justify-self: end;
  flex-direction: row-reverse;
}
.tale-messenger-avatar {
  flex: 0 0 36px;
  width: 36px;
  height: 36px;
  border-radius: 50%;
  overflow: hidden;
  background: color-mix(in srgb, var(--dc) 12%, #eee);
  border: 1px solid color-mix(in srgb, var(--dc) 48%, #fff);
}
.tale-messenger-avatar img,
.tale-messenger-avatar .art-fallback {
  width: 100%;
  height: 100%;
  object-fit: cover;
}
.tale-messenger-copy {
  min-width: 0;
}
.tale-messenger-line.right .tale-messenger-copy {
  text-align: right;
}
.tale-messenger-copy > small {
  display: block;
  margin: 0 7px 4px;
  color: var(--dc);
  font-size: 9px;
  font-weight: 800;
}
.tale-messenger-bubble {
  position: relative;
  display: inline-block;
  max-width: 100%;
  padding: 10px 13px;
  border-radius: 16px 16px 16px 5px;
  background: #fff;
  border: 1px solid rgba(70, 60, 60, 0.1);
  box-shadow: 0 3px 12px rgba(60, 50, 50, 0.04);
  text-align: left;
  font-size: 14px;
  line-height: 1.65;
  word-break: keep-all;
}
.tale-messenger-line.right .tale-messenger-bubble {
  border-radius: 16px 16px 5px 16px;
  background: color-mix(in srgb, var(--dc) 12%, #fff);
  border-color: color-mix(in srgb, var(--dc) 24%, #fff);
}
.tale-messenger-bubble p,
.tale-messenger-bubble div {
  margin: 0.1em 0 0.45em;
}
.tale-messenger-bubble p:last-child,
.tale-messenger-bubble div:last-child {
  margin-bottom: 0;
}
/* v0.3.88 — 나레이션: 양쪽 메신저 프리셋에서 좌우 구분 없이 가운데 말풍선으로 표시 */
.tale-messenger-line.narration {
  max-width: 100%;
  justify-self: center;
  justify-content: center;
}
.tale-messenger-line.narration .tale-messenger-bubble {
  background: rgba(80, 74, 74, 0.06);
  border: 1px dashed rgba(80, 74, 74, 0.18);
  color: #6c6669;
  font-style: italic;
  text-align: center;
  border-radius: 13px;
}
.relation-autofill-btn {
  display: block;
  width: 100%;
  margin-top: 10px;
  border-style: dashed !important;
}
.trio-editor-person .trio-auto-note {
  font-style: normal;
}
@media (max-width: 780px) {
  .tale-messenger-line {
    max-width: 88%;
  }
  .tale-dialogue-layout-picker {
    align-items: stretch;
    flex-direction: column;
  }
  .tale-dialogue-layout-picker select {
    width: 100%;
  }
}
.relation-auto-list-btn {
  border: 1px solid color-mix(in srgb, var(--accent) 28%, #ddd);
  border-radius: 7px;
  background: color-mix(in srgb, var(--accent) 7%, #fff);
  color: color-mix(in srgb, var(--accent) 72%, #555);
  padding: 5px 7px;
  font-size: 9px;
  font-weight: 800;
  cursor: pointer;
  white-space: nowrap;
}
.relation-auto-list-btn:hover {
  background: color-mix(in srgb, var(--accent) 13%, #fff);
}

/* v0.3.139 — profile tab type + preset system */
.profile-keyword-preset .profile-essay {
  margin-bottom: 0;
  padding: 12px 2px 14px;
}
.profile-keyword-preset .profile-essay:first-child {
  padding-top: 3px;
}
.profile-keyword-preset .profile-essay p {
  margin-top: 8px;
}
.profile-keyword-preset .profile-essay:last-child {
  margin-bottom: 0;
}
/* v0.3.149 — 숫자 프리셋: 예전 VOICE SAMPLE 계열의 큰 번호 + 설명 */
.profile-number-voice {
  padding-top: 5px;
}
.profile-number-voice > header {
  margin-bottom: 3px;
}
.profile-number-voice > header small {
  display: block;
  margin-bottom: 7px;
  color: var(--c);
  font: 700 7px/1 Arial, sans-serif;
  letter-spacing: 0.2em;
}
.profile-number-voice > header h3 {
  margin: 0 0 5px;
  color: #2b272a;
  font: 600 25px/1.15 Georgia, "Noto Serif KR", serif;
}
.profile-number-list {
  padding-top: 0;
}
.profile-number-list blockquote:first-child {
  border-top: 1px solid #e0d9d5;
}
.profile-number-list blockquote span {
  display: block;
}
.profile-number-list blockquote span em {
  display: block;
  margin-bottom: 4px;
  color: var(--c);
  font: 800 8px/1.3 Arial, sans-serif;
  letter-spacing: 0.08em;
  font-style: normal;
}
.profile-box-preset {
  display: grid;
  grid-template-columns: repeat(2, minmax(0, 1fr));
  gap: 8px;
  padding-top: 5px;
}
.profile-box-preset article {
  min-height: 82px;
  padding: 14px 15px;
  border: 1px solid #ddd7d3;
  background: #f7f4f1;
  position: relative;
  overflow: hidden;
}
.profile-box-preset article:before {
  content: "";
  position: absolute;
  inset: 0 auto 0 0;
  width: 3px;
  background: var(--c);
}
.profile-box-preset small {
  display: block;
  margin-bottom: 8px;
  color: var(--c);
  font: 800 7px/1 Arial, sans-serif;
  letter-spacing: 0.18em;
}
.profile-box-preset p {
  margin: 0;
  font: 500 11px/1.7 "Noto Serif KR", serif;
  color: #474145;
  white-space: pre-wrap;
}
.profile-quote-preset {
  margin: 2px 0 0;
  padding: 28px 26px 24px;
  border-top: 1px solid #dcd5d1;
  border-bottom: 1px solid #dcd5d1;
  position: relative;
}
.profile-quote-preset blockquote {
  margin: 0;
}
.profile-quote-preset blockquote.main span {
  font: 600 clamp(20px, 2vw, 31px)/1.5 Georgia, "Noto Serif KR", serif;
  letter-spacing: -0.025em;
  color: #282428;
  white-space: pre-wrap;
}
.profile-quote-preset blockquote.sub {
  margin-top: 14px;
  padding-top: 12px;
  border-top: 1px dashed #ddd6d2;
}
.profile-quote-preset blockquote.sub span {
  font: 500 12px/1.75 "Noto Serif KR", serif;
  color: #655e62;
}
.profile-quote-preset footer {
  display: flex;
  gap: 10px;
  align-items: baseline;
  margin-top: 17px;
}
.profile-quote-preset footer b {
  font-size: 9px;
  letter-spacing: 0.06em;
}

.profile-inline-image-preview {
  margin-top: 8px;
  border: 1px solid #d7d0cb;
  background: #f7f3f0;
  min-height: 120px;
  display: flex;
  align-items: center;
  justify-content: center;
  overflow: hidden;
}
.profile-inline-image-preview img {
  display: block;
  max-width: 100%;
  max-height: 220px;
  object-fit: contain;
}
.profile-inline-image-preview.empty {
  color: #9b9295;
  font: 700 11px/1 Arial, sans-serif;
  letter-spacing: 0.18em;
}
.profile-image-preset {
  display: grid;
  grid-template-columns: minmax(0, 1.05fr) minmax(220px, 0.95fr);
  gap: 16px;
  align-items: start;
  margin-top: 22px;
}
.profile-image-preset figure {
  margin: 0;
  border: 1px solid #ded7d3;
  background: #f4f0ed;
  min-height: 260px;
  display: flex;
  align-items: center;
  justify-content: center;
  overflow: hidden;
}
.profile-image-preset figure img {
  display: block;
  width: 100%;
  height: auto;
  object-fit: contain;
}
.profile-image-preset .v2-image-empty {
  min-height: 260px;
}
.profile-image-preset-body {
  border-top: 1px solid #ded7d3;
  padding-top: 10px;
}
.profile-image-preset-body small {
  display: block;
  color: var(--c);
  font: 800 8px/1 Arial, sans-serif;
  letter-spacing: 0.22em;
}
.profile-image-preset-body h3 {
  margin: 8px 0 10px;
  font: 700 30px/1.08 Georgia, "Noto Serif KR", serif;
}
.profile-image-preset-body p {
  margin: 0;
  color: #625b5f;
  font: 400 13px/1.9 "Noto Serif KR", serif;
  white-space: pre-wrap;
}
.profile-quote-preset footer small {
  color: #938b90;
  font-size: 8px;
}
.profile-body-preset .profile-essay:first-child {
  padding-top: 3px;
}
.profile-body-free {
  margin: 0;
  padding: 15px 2px;
  color: #625b5f;
  font: 400 11px/1.95 "Noto Serif KR", serif;
  white-space: pre-wrap;
}

.profile-relation-panel > header {
  display: flex;
  align-items: baseline;
  gap: 12px;
  padding: 2px 2px 10px;
}
.profile-relation-panel > header small,
.profile-relation-empty > small {
  color: var(--c);
  font: 800 7px/1 Arial, sans-serif;
  letter-spacing: 0.2em;
}
.profile-relation-panel > header h3 {
  margin: 0;
  font: 600 24px/1 Georgia, "Noto Serif KR", serif;
}
.profile-relation-canvas {
  position: relative;
  height: clamp(330px, 47vh, 480px);
  min-height: 330px;
  border: 1px solid #ded7d3;
  background:
    radial-gradient(circle at center, color-mix(in srgb, var(--c), transparent 93%), transparent 42%),
    #f8f5f2;
  overflow: hidden;
  isolation: isolate;
}
.profile-relation-canvas svg {
  position: absolute;
  inset: 0;
  width: 100%;
  height: 100%;
  overflow: visible;
}
.profile-relation-canvas svg line {
  vector-effect: non-scaling-stroke;
  stroke-width: 1.2;
  opacity: 0.72;
}
.profile-relation-edge-label {
  position: absolute;
  left: var(--x);
  top: var(--y);
  transform: translate(-50%, -50%);
  z-index: 4;
  width: max-content;
  max-width: 180px;
  padding: 7px 13px;
  border: 1px solid #ddd6d2;
  border-radius: 999px;
  background: rgba(248, 245, 242, 0.97);
  color: #6c6569;
  font: 700 10px/1.15 Arial, sans-serif;
  letter-spacing: 0.02em;
  white-space: nowrap;
  box-shadow: 0 2px 10px rgba(50, 42, 46, 0.04);
  pointer-events: none;
}
.profile-relation-node {
  position: absolute;
  left: var(--x);
  top: var(--y);
  transform: translate(-50%, -50%);
  width: 104px;
  text-align: center;
  z-index: 2;
}
.profile-relation-node > div {
  width: 58px;
  height: 58px;
  margin: 0 auto 7px;
  border-radius: 50%;
  border: 3px solid #fff;
  outline: 1px solid var(--rc);
  background: #eee9e5;
  overflow: hidden;
  box-shadow: 0 5px 14px rgba(50, 42, 46, 0.08);
}
.profile-relation-node.self > div {
  width: 76px;
  height: 76px;
  outline-width: 2px;
}
.profile-relation-node img,
.profile-relation-node > div > span {
  width: 100%;
  height: 100%;
  object-fit: cover;
}
.profile-relation-node b {
  display: block;
  font: 700 10px/1.25 "Noto Serif KR", sans-serif;
}
.profile-relation-node small {
  display: block;
  margin-top: 3px;
  color: #8d858a;
  font-size: 7px;
  line-height: 1.35;
  word-break: keep-all;
}
.profile-relation-full,
.profile-timeline-full {
  border: 0;
  background: none;
  color: #777075;
  padding: 11px 2px 0;
  font: 800 7px/1 Arial, sans-serif;
  letter-spacing: 0.12em;
  cursor: pointer;
}
.profile-relation-empty {
  min-height: 230px;
  display: flex;
  flex-direction: column;
  justify-content: center;
  align-items: flex-start;
  padding: 22px;
  border: 1px solid #ded7d3;
  background: #f8f5f2;
}
.profile-relation-empty h3 {
  margin: 9px 0 7px;
  font: 600 22px/1.2 Georgia, "Noto Serif KR", serif;
}
.profile-relation-empty p {
  margin: 0;
  color: #847c81;
  font-size: 10px;
}

.profile-feature-stack {
  display: grid;
  gap: 30px;
}
.profile-feature-section + .profile-feature-section {
  padding-top: 30px;
  border-top: 1px solid #e1dad6;
}

/* editor */
.profile-tab-kind {
  flex: none;
  padding: 5px 7px;
  border: 1px solid #45414c;
  border-radius: 999px;
  color: #bdb7c3;
  font-size: 9px;
  font-weight: 800;
}
.profile-tab-editor.feature {
  background: #19181d;
}
.profile-feature-picker {
  display: grid;
  grid-template-columns: repeat(3, 1fr);
  gap: 6px;
}
.profile-feature-picker button {
  min-width: 0;
  border: 1px solid #34313a;
  border-radius: 10px;
  background: #222027;
  color: #ddd8e0;
  padding: 10px 7px;
  text-align: left;
  cursor: pointer;
}
.profile-feature-picker button.on {
  border-color: #ded7e4;
  background: #f2eef5;
  color: #201d22;
}
.profile-feature-picker b,
.profile-feature-picker small {
  display: block;
}
.profile-feature-picker b {
  font-size: 11px;
}
.profile-feature-picker small {
  margin-top: 4px;
  font-size: 8px;
  line-height: 1.4;
  opacity: 0.68;
}
.profile-feature-gallery-editor {
  margin-top: 10px;
  padding: 12px;
  border: 1px solid #34313a;
  border-radius: 10px;
  background: #151419;
}
.profile-feature-gallery-editor > header {
  display: flex;
  align-items: center;
  gap: 10px;
  margin-bottom: 10px;
}
.profile-feature-gallery-editor > header > div {
  flex: 1;
  min-width: 0;
}
.profile-feature-gallery-editor > header b,
.profile-feature-gallery-editor > header small {
  display: block;
}
.profile-feature-gallery-editor > header b {
  color: #f0ecf2;
  font-size: 10px;
}
.profile-feature-gallery-editor > header small {
  margin-top: 3px;
  color: #817b86;
  font-size: 7px;
  line-height: 1.4;
}
.profile-feature-gallery-upload {
  flex: 0 0 auto;
  white-space: nowrap;
}
.profile-feature-gallery-list {
  display: grid;
  grid-template-columns: repeat(2, minmax(0, 1fr));
  gap: 7px;
}
.profile-feature-gallery-list article {
  position: relative;
  min-width: 0;
  padding: 6px;
  border: 1px solid #302e35;
  border-radius: 8px;
  background: #1d1b21;
}
.profile-feature-gallery-list article > div:first-child {
  height: 92px;
  display: flex;
  align-items: center;
  justify-content: center;
  overflow: hidden;
  border-radius: 5px;
  background: #101014;
}
.profile-feature-gallery-list img {
  display: block;
  width: 100%;
  height: 100%;
  object-fit: contain;
}
.profile-feature-gallery-list article > span {
  display: block;
  margin: 6px 0 4px;
  color: #8c8690;
  font: 800 7px/1 Arial, sans-serif;
  letter-spacing: 0.12em;
}
.profile-feature-gallery-list .block-controls {
  justify-content: flex-end;
}
.profile-feature-gallery-empty {
  grid-column: 1 / -1;
  padding: 20px 10px;
  border: 1px dashed #39363f;
  border-radius: 8px;
  color: #77717c;
  text-align: center;
  font-size: 8px;
}
.profile-gallery-v4.empty {
  display: block;
}
.profile-gallery-empty {
  min-height: 180px;
  display: flex;
  flex-direction: column;
  align-items: center;
  justify-content: center;
  gap: 7px;
  border: 1px dashed #ded7d3;
  color: #aaa1a5;
}
.profile-gallery-empty small {
  color: var(--c);
  font: 800 7px/1 Arial, sans-serif;
  letter-spacing: 0.2em;
}
.profile-gallery-empty b {
  font: 500 11px/1.5 "Noto Serif KR", serif;
}
.profile-preset-option-row {
  display: grid;
  grid-template-columns: 72px minmax(0, 1fr);
  gap: 8px;
  align-items: center;
  margin: 3px 0 9px;
}
.profile-preset-option-row > label {
  color: #aaa5ae;
  font-size: 9px;
  font-weight: 700;
}
.profile-preset-option-row select {
  width: 100%;
  border: 1px solid #3b3942;
  border-radius: 8px;
  background: #242229;
  color: #fff;
  padding: 7px 8px;
  font-size: 10px;
}
.profile-preset-source textarea {
  min-height: 108px !important;
  font-family: ui-monospace, SFMono-Regular, Consolas, monospace !important;
  font-size: 11px !important;
}
.profile-preset-source > small {
  display: block;
  margin-top: 6px;
  color: #8e8893;
  font-size: 9px;
  line-height: 1.45;
}
.preset-limit-note {
  margin: 4px 0 0 !important;
  text-align: center;
}
.profile-tab-add-choices,
.profile-tab-feature-choices {
  display: grid;
  grid-template-columns: repeat(2, minmax(0, 1fr));
  gap: 8px;
  margin-top: 10px;
}
.profile-tab-feature-choices {
  grid-template-columns: repeat(3, minmax(0, 1fr));
}
.profile-tab-add-card,
.profile-tab-feature-card {
  min-height: 74px;
  text-align: left !important;
  display: flex !important;
  flex-direction: column;
  align-items: flex-start !important;
  justify-content: center;
  gap: 5px;
}
.profile-tab-add-card b,
.profile-tab-feature-card b {
  font-size: 14px;
}
.profile-tab-add-card small {
  white-space: normal;
  opacity: 0.7;
  line-height: 1.45;
}
.profile-template-apply {
  display: grid;
  grid-template-columns: minmax(0, 1fr) auto auto;
  gap: 5px;
  margin-top: 8px;
}
.profile-template-apply select {
  min-width: 0;
  border: 1px solid #3b3942;
  background: #242229;
  color: #fff;
  border-radius: 9px;
  padding: 8px 9px;
  font-size: 11px;
}
.color-input-pair {
  display: grid;
  grid-template-columns: minmax(0, 1fr) 42px;
  gap: 6px;
  align-items: center;
}
.color-input-pair input[type="color"] {
  width: 42px;
  height: 34px;
  padding: 2px;
  border: 1px solid #45414c;
  border-radius: 8px;
  background: #242229;
  cursor: pointer;
}
.profile-color-list {
  display: grid;
  gap: 5px;
  margin: -1px 0 8px;
}
.profile-color-row {
  display: grid;
  grid-template-columns: minmax(70px, 0.8fr) minmax(90px, 1fr) 38px;
  gap: 5px;
  align-items: center;
  padding: 6px;
  border: 1px solid #302e36;
  border-radius: 9px;
  background: #1d1c21;
}
.profile-color-row b {
  overflow: hidden;
  text-overflow: ellipsis;
  white-space: nowrap;
  color: #bdb8c1;
  font-size: 9px;
}
.profile-color-row input[type="text"] {
  min-width: 0;
  border: 1px solid #3b3942;
  background: #242229;
  color: #fff;
  border-radius: 7px;
  padding: 7px 8px;
  font-size: 10px;
}
.profile-color-row input[type="color"] {
  width: 38px;
  height: 30px;
  padding: 2px;
  border: 1px solid #45414c;
  border-radius: 7px;
  background: #242229;
}

@media (max-width: 680px) {
  .profile-keyword-cards,
  .profile-box-preset {
    grid-template-columns: 1fr;
  }
  .profile-relation-canvas {
    height: 360px;
  }
  .profile-feature-picker,
  .profile-tab-feature-choices {
    grid-template-columns: 1fr;
  }
  .profile-tab-add-choices {
    grid-template-columns: 1fr;
  }
}


/* v0.3.140 — tale quick edit / annotation marker visibility */
.site.editing .tales-page.detail[data-tale-edit] .tale-detail-head,
.site.editing .tale-list-card[data-tale-edit] {
  cursor: default;
}

/* v0.3.145 — 관리자에서는 기능 3종을 한 설정 카드로 묶어 관리합니다. */
.profile-feature-admin-title {
  flex: 1;
  min-width: 0;
  color: #f2eef5;
  font-size: 12px;
  font-weight: 800;
  letter-spacing: 0.04em;
}

/* v0.3.146 — LOOK별 연결 프로필 선택. 관리자 최상단의 "기본 정보" 탭에서 관리합니다. */
.profile-look-main {
  gap: 5px !important;
}
.profile-look-profile-link {
  display: grid;
  grid-template-columns: auto minmax(0, 1fr);
  align-items: center;
  gap: 6px;
  min-width: 0;
}
.profile-look-profile-link > span {
  color: #77727d;
  font-size: 7px;
  white-space: nowrap;
}
.profile-look-profile-link select {
  width: 100%;
  min-width: 0;
  height: 27px;
  border: 1px solid #353139;
  border-radius: 6px;
  background: #242228;
  color: #eee;
  padding: 0 24px 0 7px;
  font-size: 8px;
}

/* v0.3.170 — 관리자 프로필 프리셋: 탭 카드와 구분되는 밝은 편집 카드 */
.profile-tab-block-editor .profile-block-type-trigger {
  border-color: #d6d1da;
  background: #fff;
  color: #29262d;
  box-shadow: none;
}
.profile-tab-block-editor .profile-block-type-trigger i { color: #77717c; }
.profile-tab-block-editor .profile-block-type-menu {
  border-color: #d8d3dc;
  background: #fff;
  color: #29262d;
  box-shadow: 0 16px 36px rgba(0,0,0,.18);
}
.profile-tab-block-editor .profile-block-type-menu button {
  background: #f1eff3;
  color: #37323b;
}
.profile-tab-block-editor .profile-block-type-menu button:hover {
  background: #e8e4eb;
  border-color: #d2ccd6;
  color: #17151a;
}
.profile-tab-block-editor .profile-block-type-menu button.on {
  background: #252229;
  border-color: #252229;
  color: #fff;
}
.profile-tab-block-editor .block-controls.horizontal button {
  border-color: #d6d1da;
  background: #fff;
  color: #4c4651;
}
.profile-tab-block-editor .block-controls.horizontal button:hover:not(:disabled) {
  background: #ece9ef;
  color: #17151a;
}
.profile-tab-block-editor .efield > label,
.profile-tab-block-editor .profile-preset-option-row > label {
  color: #625c67 !important;
}
.profile-tab-block-editor .profile-preset-source textarea,
.profile-tab-block-editor .profile-preset-option-row select,
.profile-tab-block-editor input[type="text"] {
  border-color: #d8d3dc !important;
  background: #fff !important;
  color: #2c2830 !important;
}
.profile-tab-block-editor .profile-preset-source > small { color: #85808a; }
.profile-add-preset {
  min-height: 38px;
  border: 1px dashed #d5d0d9 !important;
  background: #f7f6f8 !important;
  color: #3a353e !important;
  font-weight: 800 !important;
}
.profile-add-preset:hover {
  border-style: solid !important;
  background: #fff !important;
}


/* v0.3.170 — 관리자 프로필 프리셋은 다시 어두운 카드/입력 UI, 추가 버튼만 밝게 유지 */
.profile-tabs-editor {
  gap: 34px;
}
.profile-tab-editor {
  position: relative;
}
.profile-tab-editor + .profile-tab-editor::before {
  content: "";
  position: absolute;
  left: 2px;
  right: 2px;
  top: -18px;
  height: 2px;
  background: #5a5660;
  pointer-events: none;
}
.profile-tab-block-editor {
  border-color: #34323a;
  background: #201f24;
  box-shadow: none;
}
.profile-tab-block-editor > header {
  border-bottom-color: #39363e;
}
.profile-preset-index {
  color: #8f8994;
}
.profile-tab-block-editor .profile-block-type-trigger {
  border-color: #45414c;
  background: linear-gradient(180deg, #2d2a32, #242229);
  color: #f5f2f7;
  box-shadow: inset 0 1px 0 rgba(255,255,255,.045);
}
.profile-tab-block-editor .profile-block-type-trigger i {
  color: #aaa3b1;
}
.profile-tab-block-editor .profile-block-type-menu {
  border-color: #4b4652;
  background: #242129;
  color: #f8f5fa;
  box-shadow: 0 18px 45px rgba(0,0,0,.42);
}
.profile-tab-block-editor .profile-block-type-menu button {
  background: #302d35;
  color: #e8e3eb;
}
.profile-tab-block-editor .profile-block-type-menu button:hover {
  background: #3c3743;
  border-color: #55505d;
  color: #fff;
}
.profile-tab-block-editor .profile-block-type-menu button.on {
  background: #f1edf4;
  border-color: #f1edf4;
  color: #1e1b21;
}
.profile-tab-block-editor .block-controls.horizontal button {
  border-color: #45414c;
  background: #29272e;
  color: #d7d1db;
}
.profile-tab-block-editor .block-controls.horizontal button:hover:not(:disabled) {
  background: #38343d;
  color: #fff;
}
.profile-tab-block-editor .efield > label,
.profile-tab-block-editor .profile-preset-option-row > label {
  color: #aaa4ae !important;
}
.profile-tab-block-editor .profile-preset-source textarea,
.profile-tab-block-editor .profile-preset-option-row select,
.profile-tab-block-editor input[type="text"] {
  border-color: #3f3b45 !important;
  background: #17161a !important;
  color: #f4f0f6 !important;
}
.profile-tab-block-editor .profile-preset-source textarea::placeholder,
.profile-tab-block-editor input[type="text"]::placeholder {
  color: #716b76 !important;
}
.profile-tab-block-editor .profile-preset-source > small {
  color: #817b85;
}
/* 추가 버튼은 v0.3.170의 밝은 카드 느낌을 유지 */
.profile-add-preset {
  min-height: 38px;
  border: 1px dashed #d5d0d9 !important;
  background: #f7f6f8 !important;
  color: #3a353e !important;
  font-weight: 800 !important;
}
.profile-add-preset:hover {
  border-style: solid !important;
  background: #fff !important;
}

/* v0.3.170 — 프리셋 헤더 공간 확보 */
.profile-tab-block-editor > header {
  justify-content: flex-start;
  gap: 5px;
}
.profile-tab-block-editor .profile-preset-head {
  flex: 1 1 auto;
  min-width: 0;
  gap: 5px;
}
.profile-tab-block-editor .profile-preset-index {
  flex: 0 0 18px;
  width: 18px;
  margin: 0;
  letter-spacing: .04em;
  text-align: left;
}
.profile-tab-block-editor .profile-block-type-picker {
  flex: 0 1 126px;
  width: 126px;
  min-width: 104px;
}
.profile-tab-block-editor > header > .block-controls.horizontal {
  margin-left: auto;
}

/* v0.3.170 — 관리자 프리셋 입력창의 `제목 : 내용` 문법 강조 */
.profile-preset-highlight-wrap {
  position: relative;
  display: block;
  width: 100%;
  min-width: 0;
}
.profile-preset-highlight-wrap > textarea {
  position: relative;
  z-index: 2;
  display: block;
  width: 100% !important;
  min-width: 0;
  box-sizing: border-box;
  background: transparent !important;
  color: transparent !important;
  caret-color: #f4f0f6;
  -webkit-text-fill-color: transparent;
  white-space: pre-wrap;
  overflow-wrap: break-word;
}
.profile-preset-highlight {
  position: absolute;
  z-index: 1;
  inset: 0;
  width: 100%;
  height: 100%;
  margin: 0;
  padding: 9px 10px;
  border: 1px solid transparent;
  overflow: hidden;
  pointer-events: none;
  white-space: pre-wrap;
  overflow-wrap: break-word;
  color: #d8d2dc;
  background: #17161a;
  font-family: ui-monospace, SFMono-Regular, Consolas, monospace;
  font-size: 12px;
  line-height: 1.5;
  border-radius: 10px;
  box-sizing: border-box;
}
.profile-preset-highlight strong {
  color: #fff;
  font-weight: 800;
}
.profile-preset-highlight-wrap > textarea::selection {
  background: rgba(126, 113, 141, 0.48);
}
/* v0.3.323 — 뒤에 깔린 .profile-preset-highlight(굵게 표시용 <pre>)와 글자 크기·줄
   간격이 달라서(이 textarea는 .profile-preset-source textarea 규칙 때문에 11px,
   <pre>는 12px/line-height 1.5) 실제 글자가 접히는 줄바꿈 위치가 서로 어긋났습니다.
   눈에 보이는 건 <pre> 쪽인데 실제로 드래그·선택되는 건 textarea 쪽이라, 화면에
   보이는 글자와 드래그로 잡히는 글자가 안 맞아 선택이 이상하게 되던 원인입니다.
   두 레이어의 글자 크기·줄 간격을 완전히 맞춥니다. */
.profile-preset-source .profile-preset-highlight-wrap > textarea {
  font-size: 12px !important;
  line-height: 1.5 !important;
}


/* v0.3.170 — 프리셋 하이라이트 오버레이: 어두운 관리자 입력 UI와의 !important 충돌 보정 */
.profile-tab-block-editor .profile-preset-source .profile-preset-highlight-wrap > textarea {
  background: transparent !important;
  color: transparent !important;
  -webkit-text-fill-color: transparent !important;
  caret-color: #f4f0f6 !important;
}
.profile-tab-block-editor .profile-preset-source .profile-preset-highlight-wrap > .profile-preset-highlight {
  background: #17161a !important;
  color: #d8d2dc !important;
}
.profile-tab-block-editor .profile-preset-source .profile-preset-highlight-wrap > .profile-preset-highlight strong {
  color: #ffffff !important;
  font-weight: 800 !important;
}


/* v0.3.170 — 프로필 프리셋 드래그 정렬 / 탭 간 이동 */
.profile-preset-drag-handle {
  flex: 0 0 16px;
  width: 16px;
  color: #817b86;
  font: 700 14px/1 Arial, sans-serif;
  text-align: center;
  cursor: grab;
  user-select: none;
}
.profile-preset-drag-handle:hover {
  color: #f2edf4;
}
.profile-preset-drag-handle:active {
  cursor: grabbing;
}
.profile-tab-block-editor.profile-preset-dragging {
  opacity: .48;
}
.profile-tab-editor.description.profile-preset-drop-tab {
  outline: 1px solid color-mix(in srgb, var(--accent) 72%, #fff 28%);
  outline-offset: 4px;
}
.profile-tab-block-editor.profile-preset-drop-before::before,
.profile-tab-block-editor.profile-preset-drop-after::after {
  content: "";
  position: absolute;
  left: 4px;
  right: 4px;
  height: 3px;
  border-radius: 99px;
  background: var(--accent);
  z-index: 20;
  pointer-events: none;
}
.profile-tab-block-editor.profile-preset-drop-before::before {
  top: -7px;
}
.profile-tab-block-editor.profile-preset-drop-after::after {
  bottom: -7px;
}

/* v0.3.174 — 관리자 > 기록 > 썰 : 오늘의 썰 AU 가챠 */
.tale-editor-actions {
  display: grid;
  grid-template-columns: 1fr 1fr;
  gap: 7px;
  margin: 10px 0 12px;
}
.tale-editor-actions .ebtn {
  margin: 0;
}
.today-tale-admin-btn {
  border-style: dashed;
  background: rgba(255, 255, 255, 0.035);
}
.today-tale-admin-btn span {
  margin-right: 4px;
}
.modal.today-tale-modal {
  width: min(560px, calc(100vw - 28px));
  overflow: auto;
}
.today-tale-modal-head {
  text-align: center;
  margin: 2px 0 16px;
}
.today-tale-modal-head > small {
  display: block;
  color: #8a8a90;
  font-size: 9px;
  font-weight: 700;
  letter-spacing: 0.18em;
  margin-bottom: 6px;
}
.modal.today-tale-modal .today-tale-modal-head h2 {
  margin: 0 0 7px;
}
.today-tale-modal-head p {
  margin: 0 auto;
  max-width: 420px;
  color: #8b8b91;
  font-size: 10px;
  line-height: 1.6;
}
.today-tale-machine {
  position: relative;
  display: grid;
  gap: 9px;
  margin: 4px 0 13px;
}
.today-tale-reel {
  position: relative;
  height: 72px;
  display: grid;
  place-items: center;
  overflow: hidden;
  border: 1px solid #dedee4;
  border-radius: 16px;
  background:
    linear-gradient(#fff0, rgba(255,255,255,.88) 12%, rgba(255,255,255,.88) 88%, #fff0),
    repeating-linear-gradient(90deg, #f4f4f6 0 1px, transparent 1px 24px),
    #fafafd;
  box-shadow: inset 0 0 20px rgba(18, 18, 24, 0.04);
}
.today-tale-reel::before,
.today-tale-reel::after {
  content: "";
  position: absolute;
  left: 14px;
  right: 14px;
  height: 1px;
  background: #e4e4e9;
}
.today-tale-reel::before { top: 13px; }
.today-tale-reel::after { bottom: 13px; }
.today-tale-reel span {
  position: relative;
  z-index: 1;
  display: block;
  max-width: calc(100% - 40px);
  overflow: hidden;
  text-overflow: ellipsis;
  white-space: nowrap;
  font-size: clamp(20px, 5vw, 28px);
  font-weight: 800;
  letter-spacing: -0.04em;
  color: #17171b;
}
.today-tale-reel.is-spinning span {
  animation: today-tale-reel-blur 0.14s linear infinite;
}
@keyframes today-tale-reel-blur {
  0% { transform: translateY(-7px); opacity: 0.25; filter: blur(1.5px); }
  50% { transform: translateY(0); opacity: 1; filter: blur(0); }
  100% { transform: translateY(7px); opacity: 0.25; filter: blur(1.5px); }
}
.today-tale-result {
  width: 100%;
  min-height: 108px;
  border: 1px solid #d8d8de;
  border-radius: 17px;
  background: #17171b;
  color: #fff;
  display: grid;
  place-items: center;
  align-content: center;
  gap: 4px;
  padding: 17px 20px;
  text-align: center;
  transition: transform 0.18s ease, box-shadow 0.18s ease, opacity 0.18s ease;
}
.today-tale-result:disabled {
  cursor: wait;
  opacity: 0.62;
}
.today-tale-result.is-ready {
  cursor: pointer;
  box-shadow: 0 11px 28px rgba(18, 18, 24, 0.14);
}
.today-tale-result.is-ready:hover {
  transform: translateY(-2px);
}
.today-tale-result small {
  font-size: 8px;
  letter-spacing: 0.18em;
  color: #8e8e96;
}
.today-tale-result b {
  font-size: 24px;
  line-height: 1.2;
  letter-spacing: -0.03em;
}
.today-tale-result em {
  font-size: 9px;
  font-style: normal;
  color: #bcbcc2;
}
.today-tale-questions[hidden] {
  display: none !important;
}
.today-tale-questions {
  opacity: 0;
  transform: translateY(-5px);
  margin: 14px 0 4px;
  transition: opacity 0.18s ease, transform 0.18s ease;
}
.today-tale-questions.is-open {
  opacity: 1;
  transform: translateY(0);
}
.today-tale-questions header {
  display: flex;
  align-items: baseline;
  gap: 8px;
  margin-bottom: 8px;
}
.today-tale-questions header small {
  color: #9a9aa0;
  font-size: 8px;
  letter-spacing: 0.13em;
  font-weight: 700;
}
.today-tale-questions header h3 {
  margin: 0;
  font-size: 15px;
}
.today-tale-questions > div {
  display: grid;
  gap: 7px;
}
.today-tale-questions article {
  display: grid;
  grid-template-columns: 28px 1fr;
  align-items: start;
  gap: 9px;
  border: 1px solid #e3e3e8;
  border-radius: 12px;
  padding: 10px 12px;
  background: #fafafd;
}
.today-tale-questions article span {
  color: #a0a0a8;
  font-size: 9px;
  line-height: 1.65;
  font-weight: 700;
}
.today-tale-questions article p {
  margin: 0;
  color: #303035;
  font-size: 10px;
  line-height: 1.65;
}
.today-tale-meta {
  display: flex;
  justify-content: space-between;
  gap: 10px;
  color: #96969d;
  font-size: 9px;
  margin-top: 9px;
}
.today-tale-meta b {
  color: #242429;
}
.today-tale-empty {
  border: 1px dashed #d6d6dc;
  border-radius: 16px;
  padding: 26px 20px;
  text-align: center;
  background: #fafafd;
}
.today-tale-empty b {
  display: block;
  margin-bottom: 6px;
  font-size: 14px;
}
.today-tale-empty p {
  margin: 0;
  color: #8e8e96;
  font-size: 10px;
}
@media (max-width: 560px) {
  .tale-editor-actions { grid-template-columns: 1fr; }
  .today-tale-meta { flex-direction: column; gap: 2px; }
  .today-tale-result b { font-size: 21px; }
}


/* v0.3.205 — 오늘의 썰 닫기 / 바로 작성 */
.modal.today-tale-modal { position: relative; }
.today-tale-close {
  position: absolute;
  top: 12px; right: 12px;
  width: 30px; height: 30px;
  display: grid; place-items: center;
  border: 1px solid #dedee4; border-radius: 999px;
  background: #fff; color: #777780;
  font: inherit; font-size: 18px; line-height: 1; cursor: pointer; z-index: 3;
}
.today-tale-close:hover { color: #17171b; border-color: #bdbdc5; }
.today-tale-write-btn { margin-top: 10px; }
.tale-today-seed {
  margin: 0 0 14px; padding: 13px 14px;
  border: 1px solid #dedee4; border-radius: 13px;
  background: #fafafd;
}
.tale-today-seed header { display: flex; gap: 8px; align-items: baseline; margin-bottom: 8px; }
.tale-today-seed header small { color: #96969d; font-size: 8px; font-weight: 800; letter-spacing: .14em; }
.tale-today-seed header b { font-size: 14px; }
.tale-today-seed > div { display: grid; gap: 5px; }
.tale-today-seed p { margin: 0; display: grid; grid-template-columns: 25px 1fr; gap: 7px; color: #45454b; font-size: 10px; line-height: 1.55; }
.tale-today-seed p span { color: #a0a0a8; font-size: 8px; font-weight: 800; }
.tale-today-seed > small { display: block; margin-top: 9px; color: #95959b; font-size: 9px; line-height: 1.5; }

/* v0.3.175 — 오너 전용 캘린더 ------------------------------------------------ */
.owner-calendar-page{min-height:100%;padding:88px 34px 64px;color:#242126}
.owner-calendar-shell{width:min(1220px,100%);margin:0 auto}
.owner-calendar-head{display:flex;align-items:flex-end;justify-content:space-between;gap:24px;margin-bottom:20px}
.owner-calendar-head small{display:block;font-size:10px;font-weight:900;letter-spacing:.18em;color:var(--accent);margin-bottom:5px}
.owner-calendar-head h1{margin:0;font-size:clamp(30px,4vw,54px);line-height:1;font-weight:950;letter-spacing:-.045em}
.owner-calendar-head p{margin:9px 0 0;color:#756f75;font-size:13px}
.owner-cal-month-nav{display:flex;align-items:center;gap:7px;flex-wrap:wrap;justify-content:flex-end}
.owner-cal-month-nav strong{font-size:21px;min-width:92px;text-align:center}
.owner-cal-month-nav button,.owner-cal-actions button,.owner-cal-quick-actions button{border:1px solid #d8d2d3;background:#fff;color:#302b30;border-radius:9px;min-height:38px;padding:0 13px;font:inherit;font-size:12px;font-weight:800;cursor:pointer}
.owner-cal-month-nav button:hover,.owner-cal-actions button:hover,.owner-cal-quick-actions button:hover{border-color:var(--accent);color:var(--accent)}
/* v0.3.227 — 일정 추가/일정 조율 버튼 하나씩만 남아서, 박스(section)로 나누지 않고
   나란히 배치합니다. */
.owner-cal-quick-actions{display:flex;gap:6px}
.owner-cal-quick-actions button{flex:1}
.owner-calendar-layout{display:grid;grid-template-columns:minmax(0,1fr) 280px;gap:18px;align-items:start}
.owner-cal-board{min-width:0;border:1px solid #d9d4d2;background:#fff;border-radius:16px;overflow:hidden}
.owner-cal-weekdays{display:grid;grid-template-columns:repeat(7,minmax(0,1fr));background:hsl(from var(--accent) h 16% 92%);border-bottom:1px solid #d9d4d2}
.owner-cal-weekdays b{padding:10px 8px;text-align:center;font-size:10px;letter-spacing:.08em;color:#766f73}
.owner-cal-weekdays b:first-child{color:#c05f65}.owner-cal-weekdays b:last-child{color:#577ea8}
.owner-cal-grid{display:grid;grid-template-columns:repeat(7,minmax(0,1fr))}
.owner-cal-day{min-height:132px;border-right:1px solid #ebe7e4;border-bottom:1px solid #ebe7e4;padding:7px;min-width:0;background:#fff;transition:.15s background,.15s box-shadow}
.owner-cal-day:nth-child(7n){border-right:0}
.owner-cal-day:nth-last-child(-n+7){border-bottom:0}
.owner-cal-day.outside{background:hsl(from var(--accent) h 17% 98%);color:#b7b1b1}
.owner-cal-day.today{box-shadow:inset 0 0 0 2px color-mix(in srgb,var(--accent) 48%,transparent)}
.owner-cal-day.drag-over{background:color-mix(in srgb,var(--accent) 11%,white);box-shadow:inset 0 0 0 2px var(--accent)}
.owner-cal-daynum{width:29px;height:29px;border:0;border-radius:8px;background:transparent;color:inherit;font-weight:850;cursor:pointer;text-align:center}
.owner-cal-day.today .owner-cal-daynum{background:var(--accent);color:#fff}
.owner-cal-events{display:flex;flex-direction:column;gap:4px;margin-top:4px;min-width:0}
.owner-cal-event{display:grid;grid-template-columns:auto minmax(0,1fr);align-items:center;gap:5px;width:100%;min-width:0;border:0;border-left:3px solid #999;border-radius:6px;padding:5px 6px;background:hsl(from var(--accent) h 13% 95%);color:#3f3a3f;text-align:left;cursor:grab}
.owner-cal-event:active{cursor:grabbing}
.owner-cal-event small{font-size:8px;font-weight:950;letter-spacing:.04em;opacity:.72}
.owner-cal-event b{font-size:10px;font-weight:800;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;min-width:0}
.owner-cal-event.type-personal{border-left-color:#7b8793}.owner-cal-event.type-trpg{border-left-color:#7257a3;background:#f3eff9}.owner-cal-event.type-commission{border-left-color:#c17867;background:#fbf1ee}.owner-cal-event.type-dday{border-left-color:var(--accent);background:color-mix(in srgb,var(--accent) 9%,white)}
.owner-cal-side{display:flex;flex-direction:column;gap:12px;min-width:0}
.owner-cal-side>section{background:#fff;border:1px solid #ddd7d4;border-radius:14px;padding:14px}
.owner-cal-side h2{font-size:12px;margin:0 0 10px;letter-spacing:.02em}
.owner-cal-actions{display:grid;grid-template-columns:1fr;gap:6px}
.owner-cal-actions button{text-align:left;width:100%}
.owner-cal-poll-list,.owner-cal-upcoming{display:flex;flex-direction:column;gap:6px;margin-top:10px}
.owner-cal-poll-list button,.owner-cal-upcoming button{display:grid;grid-template-columns:auto minmax(0,1fr);gap:2px 7px;align-items:center;border:1px solid #e5dfdc;background:hsl(from var(--accent) h 17% 98%);border-radius:8px;padding:8px;text-align:left;cursor:pointer;min-width:0}
.owner-cal-poll-list button span,.owner-cal-upcoming button span{grid-row:1/3;font-size:8px;font-weight:950;color:var(--accent)}
.owner-cal-poll-list button b,.owner-cal-upcoming button b{font-size:11px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.owner-cal-poll-list button small,.owner-cal-upcoming button small{font-size:9px;color:#888;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.owner-cal-empty{font-size:11px;color:#999;margin:4px 0}
.calendar-editor-stats{display:flex;gap:7px;margin:9px 0}.calendar-editor-stats span{flex:1;border:1px solid #ffffff22;border-radius:7px;padding:8px;font-size:10px}.calendar-editor-stats b{font-size:18px;margin-right:3px}
.calendar-commission-preview{display:flex;align-items:center;gap:10px;padding:12px;border:1px solid #ded8d5;border-radius:9px;background:hsl(from var(--accent) h 18% 97%);margin:2px 0 12px;font-size:11px}.calendar-commission-preview b{font-size:20px;color:var(--accent)}
.calendar-poll-modal{width:min(1100px,calc(100vw - 32px))!important;max-width:none!important}
.cal-poll-topline{display:flex;align-items:center;justify-content:space-between;gap:12px;padding:8px 10px;border-radius:8px;background:hsl(from var(--accent) h 19% 95%);margin-bottom:10px}.cal-poll-topline span{font-size:9px;font-weight:950;color:var(--accent)}.cal-poll-topline b{font-size:11px}
.cal-poll-response-bar{display:flex;gap:7px;margin:9px 0}.cal-poll-response-bar input{flex:1;min-width:0}
.cal-poll-people{display:flex;gap:5px;flex-wrap:wrap;margin:7px 0 9px}.cal-poll-people span{border:1px solid #ddd6d3;border-radius:999px;padding:4px 7px;font-size:9px}.cal-poll-people span.on{border-color:var(--accent);color:var(--accent)}.cal-poll-people span b{margin-left:3px}
.cal-poll-scroll{max-width:100%;overflow:auto;border:1px solid #ded9d6;border-radius:10px;background:#fff}
.cal-poll-matrix{display:grid;grid-template-columns:74px repeat(var(--cal-cols),minmax(82px,1fr));min-width:max-content}
.cal-poll-corner,.cal-poll-date,.cal-poll-time{position:sticky;z-index:2;background:hsl(from var(--accent) h 19% 95%);border-right:1px solid #e3dedb;border-bottom:1px solid #e3dedb;min-height:43px;display:flex;align-items:center;justify-content:center}
.cal-poll-corner{left:0;top:0;z-index:4;font-size:9px;font-weight:900}.cal-poll-date{top:0;z-index:3;gap:5px;padding:5px}.cal-poll-date b{font-size:10px}.cal-poll-date small{font-size:9px;color:#888}.cal-poll-time{left:0;z-index:3;font-size:9px;font-weight:800;padding:5px}
.cal-poll-cell{position:relative;min-height:43px;border:0;border-right:1px solid #eee9e6;border-bottom:1px solid #eee9e6;background:color-mix(in srgb,var(--accent) calc(var(--heat) * 72%),#fff);cursor:pointer;color:#262126}
.cal-poll-cell:hover{box-shadow:inset 0 0 0 2px color-mix(in srgb,var(--accent) 55%,transparent)}
.cal-poll-cell.mine:after{content:"";position:absolute;inset:4px;border:2px solid #242124;border-radius:4px;pointer-events:none}
.cal-poll-cell.picked{box-shadow:inset 0 0 0 3px #171417}
.cal-poll-cell span{font-size:10px;font-weight:900}.cal-poll-cell i{position:absolute;right:3px;top:2px;font-style:normal;font-size:7px;font-weight:950;color:#1e171d}
.cal-poll-share-note{display:grid;grid-template-columns:auto 1fr;gap:7px 10px;margin-top:10px;padding:9px 10px;border-radius:8px;background:hsl(from var(--accent) h 13% 95%);font-size:9px;color:#6d676b}.cal-poll-share-note b{color:#332d31}.cal-poll-share-note span{line-height:1.45}
@media(max-width:1000px){.owner-calendar-layout{grid-template-columns:1fr}.owner-cal-side{display:grid;grid-template-columns:repeat(3,minmax(0,1fr))}.owner-cal-day{min-height:112px}}
@media(max-width:720px){.owner-calendar-page{padding:74px 12px 40px}.owner-calendar-head{align-items:flex-start;flex-direction:column}.owner-cal-month-nav{width:100%;justify-content:space-between}.owner-cal-side{grid-template-columns:1fr}.calendar-poll-modal{width:calc(100vw - 16px)!important}.cal-poll-response-bar{flex-direction:column}.cal-poll-matrix{grid-template-columns:62px repeat(var(--cal-cols),76px)}}
/* v0.3.271 — 사용자 요청: 캘린더가 모바일에서 가로 스크롤 없이 한 화면에 다 보이게.
   기존엔 요일 7칸을 최소 700px(칸당 100px)로 고정해서 좁은 화면에서 옆으로 긁어야
   봤는데, 실제 모바일 캘린더 앱(구글/애플 캘린더 등)은 폭에 맞춰 칸을 줄이는 대신
   각 날짜 안의 "일정 텍스트 칩"을 작은 점(dot)으로 축약해서 가로 스크롤이 아예
   필요 없게 만듭니다 — 그 방식을 그대로 따랐습니다. 날짜 칸 자체는 7등분
   (minmax(0,1fr))으로 화면 폭에 맞춰 자연스럽게 줄어들고, 그 안의 일정/디데이 칩은
   글자 없이 종류별 색 점만 남깁니다(점을 길게 누르면 원래 있던 title 툴팁으로 내용은
   여전히 확인 가능). */
/* v0.3.272 — 날짜 칸 클릭 → 그리드 아래 패널에 그 날의 일정 표시. 패널 자체는 항상
   DOM에 있지만(그래야 클릭 즉시 채워짐), 데스크톱(칸 안에 이미 전체 칩이 다 보임)엔
   불필요한 중복이라 모바일에서만 보이게 합니다. */
.owner-cal-day-detail{display:none}
.owner-cal-day{cursor:pointer}
.owner-cal-day.selected{background:color-mix(in srgb,var(--accent) 12%,#fff)}
@media(max-width:720px){
  .owner-cal-board{overflow:hidden}
  .owner-cal-weekdays,.owner-cal-grid{min-width:0}
  .owner-cal-weekdays b{padding:6px 2px;font-size:8px}
  .owner-cal-day{min-height:56px;padding:4px 2px}
  .owner-cal-daynum{width:20px;height:20px;font-size:10px}
  .owner-cal-events{flex-direction:row;flex-wrap:wrap;justify-content:center;gap:3px;margin-top:3px}
  /* 그리드 안의 칩만 점으로 축약합니다 — 아래 .owner-cal-day-detail-list 안의 칩은
     이 규칙에 안 걸리게 .owner-cal-events로 범위를 좁혔습니다(전에는 .owner-cal-event를
     범위 없이 걸어서 상세 패널 칩까지 같이 점이 돼버리는 실수가 있었습니다).
     v0.3.273 — 점이 동그랗지 않고 위아래로 길쭉한 알약 모양이었던 원인: 이 파일 뒤쪽의
     범위 없는 .owner-cal-event{min-height:29px} 규칙이 계속 살아있어서, height:6px를
     줘도 min-height가 더 커서 그쪽이 이겼습니다(같은 요소에서 height와 min-height가
     충돌하면 min-height가 우선). min-height도 같이 6px로 눌러줘야 실제로 정사각형(=
     border-radius:50%로 원)이 됩니다. */
  .owner-cal-events .owner-cal-event{width:6px;height:6px;min-width:6px;min-height:6px;padding:0;border:0;border-radius:50%;overflow:hidden}
  .owner-cal-events .owner-cal-event small,.owner-cal-events .owner-cal-event b{display:none}
  .owner-cal-events .owner-cal-event.type-personal{background:#7b8793!important}
  .owner-cal-events .owner-cal-event.type-trpg{background:#7257a3!important}
  .owner-cal-events .owner-cal-event.type-commission{background:#c17867!important}
  .owner-cal-events .owner-cal-event.type-dday{background:var(--accent)!important}
  /* v0.3.274 — 점 크기가 종류마다 제각각(특히 TRPG만 눈에 띄게 컸음)이었던 원인: 이
     파일 뒤쪽에 있는 .owner-cal-event.type-*(개인/TRPG/커미션/디데이) 각각의 원래
     border·padding 값이 위 리셋(border:0;padding:0)과 같은 특이도라서 소스 순서상
     더 뒤에 있는 이 규칙들이 이기고 있었습니다 — TRPG는 border:2px+padding:4px 6px가
     통째로 남아있어서 유독 크고 타원으로 보였던 것. 종류별 규칙 자체를 하나하나 다시
     찾아다니는 대신, .type-*를 한번에 겨냥해서 border/padding/box-shadow를 확실히
     0으로 되돌립니다. */
  .owner-cal-events .owner-cal-event.type-personal,
  .owner-cal-events .owner-cal-event.type-trpg,
  .owner-cal-events .owner-cal-event.type-commission,
  .owner-cal-events .owner-cal-event.type-dday{border:0!important;padding:0!important;box-shadow:none!important}
  /* 편집 모드에선 접힌 편집 도구 레일(48px)이 항상 화면 오른쪽에 떠 있어서, 그만큼
     오른쪽 여백을 더 줘야 토요일 칸이 레일에 가려지지 않습니다. */
  .site.editing .owner-calendar-page{padding-right:60px}
  .owner-cal-day-detail{display:block;padding:14px 12px;border-top:1px solid #ebe7e4}
  .owner-cal-day-detail-head{display:flex;align-items:center;justify-content:space-between;gap:8px;margin-bottom:10px}
  .owner-cal-day-detail-head b{font-size:13px}
  .owner-cal-day-detail-add{border:1px solid #d9d4d2;background:#fff;border-radius:999px;padding:5px 11px;font-size:10px;font-weight:700;color:#3f3a3f}
  .owner-cal-day-detail-list{display:flex;flex-direction:column;gap:6px}
  .owner-cal-day-detail-list .owner-cal-event{width:auto;height:auto}
}
@media(min-width:1101px){.site.editing .owner-calendar-page{padding-right:460px}.site.editing .owner-calendar-shell{width:100%}}
.cal-poll-share-note .cal-poll-import{grid-column:1/-1;display:flex;gap:6px;margin-top:2px}.cal-poll-import input{flex:1;min-width:0;font-size:10px}
.shared-calendar-poll-page{min-height:100%;padding:92px 24px 64px;color:#242126}
.shared-calendar-poll-shell{width:min(1100px,100%);margin:0 auto}
.shared-calendar-poll-shell>header{margin-bottom:18px}.shared-calendar-poll-shell>header small{font-size:9px;font-weight:950;letter-spacing:.16em;color:var(--accent)}.shared-calendar-poll-shell>header h1{margin:5px 0 7px;font-size:clamp(28px,5vw,48px);letter-spacing:-.04em}.shared-calendar-poll-shell>header p{margin:0;color:#787177;font-size:12px}
.shared-poll-name{display:flex;align-items:center;gap:9px;margin-bottom:10px}.shared-poll-name label{font-size:10px;font-weight:900}.shared-poll-name input{width:min(280px,70vw);min-height:42px;border:1px solid #d9d3cf;border-radius:9px;background:#fff;padding:0 11px;font:inherit}
.shared-poll-actions{display:flex;justify-content:flex-end;gap:7px;margin-top:12px}.shared-poll-actions button{min-height:40px;border:1px solid #d8d2cf;border-radius:9px;background:#fff;padding:0 14px;font:inherit;font-size:11px;font-weight:850;cursor:pointer}.shared-poll-actions button.primary{background:var(--accent);border-color:var(--accent);color:#fff}
.shared-poll-note{margin:10px 0 0;font-size:10px;line-height:1.55;color:#817a7f}
@media(max-width:640px){.shared-calendar-poll-page{padding:78px 10px 42px}.shared-poll-actions{flex-direction:column}.shared-poll-actions button{width:100%}.cal-poll-share-note .cal-poll-import{flex-direction:column}}

/* v0.3.176 — SOCIAL + owner calendar polish ----------------------------------- */
.owner-cal-daynum{
  display:grid;
  place-items:center;
  padding:0;
  line-height:1;
  font-variant-numeric:tabular-nums;
}
.owner-cal-day.today .owner-cal-daynum{
  border-radius:8px;
  box-shadow:0 0 0 1px color-mix(in srgb,var(--accent) 72%,#fff);
}
.owner-cal-event{
  position:relative;
  min-height:29px;
  border-radius:7px;
  padding:5px 7px;
  transition:.14s transform,.14s border-color,.14s background,.14s color;
}
.owner-cal-event:hover{transform:translateY(-1px)}
.owner-cal-event small{
  display:inline-grid;
  place-items:center;
  min-width:31px;
  height:17px;
  padding:0 5px;
  border-radius:4px;
  line-height:1;
}
.owner-cal-event.type-personal{
  border:1px solid #d9dde1;
  border-left:4px solid #7b8793;
  background:#f2f4f5;
}
.owner-cal-event.type-personal small{background:#fff;color:#66717c}
.owner-cal-event.type-trpg{
  border:2px solid #7257a3;
  background:#fff;
  color:#533d79;
  padding:4px 6px;
}
.owner-cal-event.type-trpg small{background:#7257a3;color:#fff}
.owner-cal-event.type-commission{
  border:1px dashed #c17867;
  border-left:5px solid #c17867;
  background:#fff8f4;
  color:#7c473b;
}
.owner-cal-event.type-commission small{background:#f2d7ce;color:#844c3f}
.owner-cal-event.type-dday{
  border:1px solid color-mix(in srgb,var(--accent) 88%,#5b4a50);
  border-left:1px solid color-mix(in srgb,var(--accent) 88%,#5b4a50);
  background:var(--accent);
  color:#fff;
  box-shadow:0 3px 8px color-mix(in srgb,var(--accent) 18%,transparent);
}
.owner-cal-event.type-dday small{background:#ffffff24;color:#fff}
.owner-cal-event.type-dday b{color:#fff}
.owner-cal-side .owner-cal-actions{grid-template-columns:1fr 1fr}
.owner-cal-side .owner-cal-actions button:nth-child(3){grid-column:1/-1}
.calendar-editor-panel{padding-top:13px}
.calendar-editor-top{display:flex;align-items:flex-start;justify-content:space-between;gap:10px}
.calendar-editor-top>div{min-width:0}
.calendar-editor-top h3{margin-bottom:3px}
.calendar-editor-top .drawer-note{margin:0}
.calendar-editor-top>.ebtn{flex:0 0 auto;min-height:34px;padding-inline:10px}
.calendar-editor-stats{margin:13px 0 15px;gap:8px}
.calendar-editor-stats span{
  display:flex;
  align-items:baseline;
  gap:5px;
  min-width:0;
  padding:10px 11px;
}
.calendar-editor-stats b{font-size:20px;line-height:1;margin:0}
.calendar-editor-stats small{font-size:9px;color:#a8a8ad;font-weight:700}
.calendar-editor-label{margin:13px 0 7px;font-size:9px;letter-spacing:.08em;color:#9a9aa0;text-transform:uppercase}
.calendar-editor-action-grid{display:grid;grid-template-columns:1fr 1fr;gap:6px}
.calendar-editor-action-grid button:nth-child(3){grid-column:1/-1}
.calendar-editor-action-grid.two{grid-template-columns:1fr 1fr}
.calendar-editor-action-grid.two button:nth-child(3){grid-column:auto}
.calendar-editor-foot{margin-top:11px!important;padding-top:10px;border-top:1px solid #ffffff12}

/* SOCIAL */
.sns-page{
  min-height:100%;
  padding:88px 34px 72px;
  color:#252126;
}
.sns-shell{width:min(1260px,100%);margin:0 auto}
.sns-page-head{display:flex;align-items:flex-end;justify-content:space-between;gap:20px;margin-bottom:20px}
.sns-page-head small{display:block;font-size:9px;font-weight:900;letter-spacing:.18em;color:var(--accent);margin-bottom:6px}
.sns-page-head h1{margin:0;font-size:clamp(32px,4vw,52px);line-height:1;font-weight:950;letter-spacing:-.045em}
.sns-page-head p{margin:8px 0 0;color:#7c757a;font-size:12px}
.sns-feed-count{display:flex;align-items:flex-end;gap:7px;color:#8a8388}
.sns-feed-count b{font-size:30px;line-height:.9;color:#2c272b;font-variant-numeric:tabular-nums}
.sns-feed-count span{font-size:9px;font-weight:900;letter-spacing:.1em}
.sns-layout{display:grid;grid-template-columns:210px minmax(0,680px) 210px;gap:18px;justify-content:center;align-items:start}
.sns-account-rail,.sns-meta-rail{position:sticky;top:86px;display:flex;flex-direction:column;gap:9px;min-width:0}
.sns-account-rail>small,.sns-meta-rail section>small{font-size:8px;font-weight:950;letter-spacing:.14em;color:#9b9298}
.sns-account-card{position:relative;border:1px solid #dfd9d6;background:#fff;border-radius:12px;padding:10px;overflow:hidden}
.sns-account-card>i{position:absolute;left:0;top:0;bottom:0;width:3px;background:var(--sns-c)}
.sns-author{display:flex;align-items:center;gap:9px;min-width:0}
.sns-avatar{width:38px;height:38px;border-radius:50%;overflow:hidden;background:hsl(from var(--accent) h 14% 91%);display:grid;place-items:center;flex:0 0 auto;border:1px solid #e1dcda}
.sns-avatar img{width:100%;height:100%;object-fit:cover;display:block}
.sns-avatar-fallback{font-weight:900;font-size:12px;color:#827b7f}
.sns-author>span{display:flex;flex-direction:column;min-width:0}
.sns-author b{font-size:11px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.sns-author small{font-size:9px;color:#999096;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.sns-author.compact{gap:7px}
.sns-author.compact .sns-avatar{width:28px;height:28px}
.sns-author.compact b{font-size:10px}
.sns-author.compact small{font-size:8px}
.sns-feed{display:flex;flex-direction:column;gap:12px;min-width:0}
.sns-post{background:#fff;border:1px solid #ddd7d4;border-radius:16px;overflow:hidden}
.sns-post>header{display:flex;align-items:center;justify-content:space-between;gap:12px;padding:14px 15px 11px}
.sns-post>header time{font-size:9px;color:#a0989d;white-space:nowrap}
.sns-post-body{padding:0 15px 13px}
.sns-post-body>p{margin:0;font-size:13px;line-height:1.75;color:#342f33;word-break:break-word}
.sns-post-image{margin-top:11px;border:1px solid #e4dfdc;border-radius:12px;overflow:hidden;background:hsl(from var(--accent) h 14% 96%)}
.sns-post-image img{display:block;width:100%;max-height:520px;object-fit:contain}
.sns-post>footer{display:flex;align-items:center;gap:16px;border-top:1px solid #eee9e6;padding:8px 15px;color:#8a8287;font-size:9px;letter-spacing:.04em}
.sns-post>footer b{color:#474147;font-size:10px}
.sns-comments{border-top:1px solid #eee9e6;background:hsl(from var(--accent) h 17% 98%);padding:3px 15px 9px}
.sns-comment-row{display:grid;grid-template-columns:118px minmax(0,1fr);gap:10px;padding:10px 0;border-bottom:1px solid #ece7e4}
.sns-comment-row:last-child{border-bottom:0}
.sns-comment-copy>p,.sns-reply-row>div>p{margin:1px 0 3px;font-size:11px;line-height:1.55;color:#443e42}
.sns-comment-copy>small,.sns-reply-row>div>small{font-size:8px;color:#aaa1a6}
.sns-replies{margin-top:8px;padding-left:11px;border-left:2px solid color-mix(in srgb,var(--accent) 35%,#ded8d5);display:flex;flex-direction:column;gap:8px}
.sns-reply-row{display:grid;grid-template-columns:105px minmax(0,1fr);gap:8px;align-items:start}
.sns-meta-rail section{background:#fff;border:1px solid #dfd9d6;border-radius:12px;padding:12px}
.sns-meta-rail section>b{display:block;margin:4px 0 5px;font-size:14px}
.sns-meta-rail section>p{margin:0;font-size:9px;line-height:1.55;color:#91898f}
.sns-meta-rail section>div{display:flex;align-items:baseline;justify-content:space-between;border-top:1px solid #eee9e6;padding:8px 0 0;margin-top:8px}
.sns-meta-rail section>div b{font-size:18px}
.sns-meta-rail section>div span{font-size:8px;color:#999096;font-weight:900;letter-spacing:.08em}
.sns-empty,.sns-empty-small{border:1px dashed #d9d3d0;border-radius:14px;padding:28px 18px;text-align:center;color:#999096;background:#ffffff88}
.sns-empty b{font-size:16px}.sns-empty p{font-size:10px;margin:6px 0 0}.sns-empty-small{font-size:9px;padding:16px 10px}
.sns-admin-comments{margin:12px 0 2px;border:1px solid #ddd7d4;border-radius:10px;padding:10px;background:hsl(from var(--accent) h 17% 98%)}
.sns-admin-comments>header{display:flex;align-items:center;justify-content:space-between;gap:8px;margin-bottom:8px}
.sns-admin-comments>header>b{font-size:11px}
.sns-admin-comments>article{border-top:1px solid #e7e1de;padding:9px 0}
.sns-admin-comments>article:first-of-type{border-top:0}
.sns-admin-comments article>div:first-child b{font-size:10px}
.sns-admin-comments article>div:first-child p{margin:3px 0;font-size:10px;line-height:1.45}
.sns-admin-comments article>div:first-child small{font-size:8px;color:#999}
.sns-admin-comment-actions{display:flex;gap:5px;flex-wrap:wrap;margin-top:7px}
.sns-admin-comment-actions .m-btn,.sns-admin-reply .m-btn{min-height:28px;padding:0 8px;font-size:9px}
.sns-admin-reply{display:grid;grid-template-columns:minmax(0,1fr) auto auto;gap:5px;align-items:center;margin:7px 0 0 12px;padding:6px 7px;border-radius:7px;background:#fff;border:1px solid #e7e1de}
.sns-admin-reply span{font-size:9px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
@media(max-width:1100px){
  .sns-layout{grid-template-columns:180px minmax(0,1fr)}
  .sns-meta-rail{display:none}
}
@media(max-width:760px){
  .sns-page{padding:74px 12px 46px}
  .sns-page-head{align-items:flex-start;flex-direction:column}
  .sns-feed-count{align-self:flex-end}
  .sns-layout{grid-template-columns:1fr}
  .sns-account-rail{position:static;display:grid;grid-template-columns:repeat(2,minmax(0,1fr));order:0}
  .sns-account-rail>small{grid-column:1/-1}
  .sns-feed{order:1}
  .sns-comment-row{grid-template-columns:1fr}
  .sns-reply-row{grid-template-columns:1fr}
  .sns-author.compact>span{flex-direction:row;gap:5px;align-items:baseline}
}
@media(max-width:430px){
  .sns-account-rail{grid-template-columns:1fr}
  .sns-account-rail>small{grid-column:auto}
  .sns-post>header{align-items:flex-start;flex-direction:column}
  .sns-post>header time{padding-left:47px}
}

/* v0.3.177 — calendar visibility --------------------------------------------- */
.calendar-visibility-toggle{
  display:grid;
  grid-template-columns:1fr 1fr;
  gap:5px;
  padding:4px;
  border:1px solid #ffffff18;
  border-radius:9px;
  background:#0f0f11;
}
.calendar-visibility-toggle button{
  min-height:34px;
  border:1px solid transparent;
  border-radius:6px;
  background:transparent;
  color:#8f8f95;
  font:inherit;
  font-size:10px;
  font-weight:850;
  cursor:pointer;
}
.calendar-visibility-toggle button.on{
  border-color:#ffffff20;
  background:#2b2b30;
  color:#fff;
}
.calendar-visibility-help{margin:7px 1px 0!important;line-height:1.5}
.owner-calendar-page.public-view .owner-cal-daynum{cursor:default}
.owner-calendar-page.public-view .owner-cal-event.readonly{cursor:default}
.owner-calendar-page.public-view .owner-cal-event.readonly:hover{transform:none}
.owner-cal-upcoming-item{
  display:grid;
  grid-template-columns:auto minmax(0,1fr);
  gap:2px 7px;
  align-items:center;
  border:1px solid #e5dfdc;
  background:#faf9f8;
  border-radius:8px;
  padding:8px;
  text-align:left;
  min-width:0;
}
.owner-cal-upcoming-item span{grid-row:1/3;font-size:8px;font-weight:950;color:var(--accent)}
.owner-cal-upcoming-item b{font-size:11px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.owner-cal-upcoming-item small{font-size:9px;color:#888;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.owner-cal-public-note small{display:block;font-size:8px;font-weight:950;letter-spacing:.16em;color:var(--accent);margin-bottom:5px}
.owner-cal-public-note p{margin:0;font-size:10px;line-height:1.55;color:#817a7f}


/* v0.3.178 — SOCIAL redesign + wider bottom dock ------------------------------ */
.site-bottom-dock {
  width: max-content;
  max-width: calc(100vw - 32px);
}
@media (min-width: 701px) {
  .site-bottom-dock {
    justify-content: center;
    padding-inline: 12px;
  }
}
.sns-page {
  padding: clamp(78px, 8vw, 104px) clamp(14px, 3vw, 28px) 58px;
}
.sns-shell {
  width: min(1160px, 100%);
  margin: 0 auto;
}
.sns-page-head {
  display: flex;
  align-items: flex-end;
  justify-content: space-between;
  gap: 20px;
  margin-bottom: 18px;
}
.sns-page-head small {
  display: block;
  font-size: 10px;
  font-weight: 900;
  letter-spacing: 0.18em;
  color: var(--accent);
  margin-bottom: 8px;
}
.sns-page-head h1 {
  margin: 0;
  font-size: clamp(40px, 5vw, 64px);
  line-height: 0.94;
  font-weight: 950;
  letter-spacing: -0.055em;
}
.sns-page-head p {
  margin: 10px 0 0;
  color: #766f74;
  font-size: 13px;
}
.sns-head-stats {
  display: flex;
  gap: 10px;
  flex-wrap: wrap;
  justify-content: flex-end;
}
.sns-stat-pill {
  min-width: 106px;
  border: 1px solid #ddd7d4;
  border-radius: 16px;
  background: #fff;
  padding: 12px 14px;
  display: flex;
  flex-direction: column;
  gap: 4px;
}
.sns-stat-pill b {
  font-size: 28px;
  line-height: 0.9;
  color: #2f2a2e;
  font-variant-numeric: tabular-nums;
}
.sns-stat-pill span {
  font-size: 9px;
  font-weight: 900;
  letter-spacing: 0.12em;
  color: #938b90;
}
.sns-body {
  display: grid;
  grid-template-columns: minmax(0, 1fr) 240px;
  gap: 18px;
  align-items: start;
}
.sns-feed-wrap {
  min-width: 0;
  display: flex;
  flex-direction: column;
  gap: 16px;
}
.sns-side-rail {
  position: sticky;
  top: 86px;
  display: flex;
  flex-direction: column;
  gap: 12px;
}
.sns-meta-card {
  border: 1px solid #dfd9d6;
  border-radius: 16px;
  background: #fff;
  padding: 14px;
}
.sns-meta-card small {
  display: block;
  font-size: 9px;
  font-weight: 900;
  letter-spacing: 0.14em;
  color: #9a9197;
}
.sns-meta-card b {
  display: block;
  margin-top: 6px;
  font-size: 18px;
  color: #2c272b;
}
.sns-meta-card p {
  margin: 8px 0 0;
  font-size: 11px;
  line-height: 1.55;
  color: #898086;
}
.sns-meta-line {
  display: flex;
  align-items: center;
  justify-content: space-between;
  border-top: 1px solid #eee9e6;
  padding-top: 8px;
  margin-top: 8px;
}
.sns-meta-line span {
  font-size: 10px;
  color: #8f878c;
}
.sns-meta-line b {
  margin: 0;
  font-size: 16px;
}
.sns-section-head {
  display: flex;
  align-items: baseline;
  justify-content: space-between;
  gap: 10px;
  margin-bottom: 10px;
}
.sns-section-head b {
  font-size: 11px;
  letter-spacing: 0.12em;
  color: #2f2b2f;
}
.sns-section-head span {
  font-size: 10px;
  color: #8f878c;
}
.sns-account-strip,
.sns-feed-panel {
  border: 1px solid #dfd9d6;
  border-radius: 18px;
  background: rgba(255,255,255,0.86);
  padding: 14px;
}
.sns-account-scroll {
  display: flex;
  gap: 10px;
  overflow-x: auto;
  scrollbar-width: none;
  padding-bottom: 2px;
}
.sns-account-scroll::-webkit-scrollbar { display: none; }
.sns-account-card {
  position: relative;
  min-width: 190px;
  border: 1px solid #e2dcd9;
  background: #fff;
  border-radius: 16px;
  padding: 12px 12px 12px 16px;
  overflow: hidden;
  box-shadow: 0 8px 20px rgba(35, 28, 32, 0.04);
}
.sns-account-card > i {
  position: absolute;
  left: 0;
  top: 0;
  bottom: 0;
  width: 4px;
  background: var(--sns-c);
}
.sns-feed {
  display: flex;
  flex-direction: column;
  gap: 14px;
}
.sns-post {
  background: #fff;
  border: 1px solid #ded7d4;
  border-radius: 18px;
  overflow: hidden;
  box-shadow: 0 10px 24px rgba(30, 25, 28, 0.04);
}
.sns-post > header {
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: 12px;
  padding: 16px 16px 12px;
}
.sns-post > header time {
  font-size: 10px;
  color: #978f94;
  white-space: nowrap;
}
.sns-post-body {
  padding: 0 16px 14px;
}
.sns-post-body > p {
  margin: 0;
  font-size: 13px;
  line-height: 1.8;
  color: #342f33;
}
.sns-post-image {
  margin-top: 12px;
  border: 1px solid #e6e1de;
  border-radius: 14px;
  overflow: hidden;
  background: #f6f3f2;
}
.sns-post > footer {
  display: flex;
  align-items: center;
  gap: 16px;
  border-top: 1px solid #f0ebe8;
  padding: 10px 16px;
  color: #8a8287;
  font-size: 10px;
  letter-spacing: 0.04em;
}
.sns-post > footer b {
  color: #474147;
  font-size: 11px;
}
.sns-comments {
  border-top: 1px solid #f0ebe8;
  background: #fbfaf9;
  padding: 10px 16px 14px;
  display: flex;
  flex-direction: column;
  gap: 10px;
}
.sns-thread-row {
  display: flex;
  align-items: flex-start;
  gap: 10px;
}
.sns-thread-row.is-reply {
  gap: 8px;
}
.sns-thread-row .sns-avatar {
  width: 34px;
  height: 34px;
  border-radius: 50%;
  overflow: hidden;
  border: 1px solid #e3deda;
  background: #fff;
  flex: 0 0 auto;
}
.sns-thread-row .sns-avatar.small {
  width: 28px;
  height: 28px;
}
.sns-thread-card {
  flex: 1;
  min-width: 0;
  border: 1px solid #ebe5e2;
  border-radius: 14px;
  background: #fff;
  padding: 10px 12px;
}
.sns-thread-head {
  display: flex;
  align-items: baseline;
  gap: 7px;
  flex-wrap: wrap;
  margin-bottom: 4px;
}
.sns-thread-head b {
  font-size: 11px;
  color: #302b2f;
}
.sns-thread-head small {
  font-size: 9px;
  color: #9a9297;
}
.sns-thread-card p {
  margin: 0;
  font-size: 12px;
  line-height: 1.7;
  color: #403a3f;
  word-break: break-word;
}
.sns-thread-replies {
  margin-top: 10px;
  padding-top: 10px;
  border-top: 1px dashed #e7e1de;
  display: flex;
  flex-direction: column;
  gap: 8px;
}
.sns-author {
  display: flex;
  align-items: center;
  gap: 10px;
  min-width: 0;
}
.sns-avatar {
  width: 42px;
  height: 42px;
  border-radius: 50%;
  overflow: hidden;
  background: #ece8e6;
  display: grid;
  place-items: center;
  flex: 0 0 auto;
  border: 1px solid #e1dcda;
}
.sns-avatar img {
  width: 100%;
  height: 100%;
  object-fit: cover;
  display: block;
}
.sns-avatar-fallback {
  font-weight: 900;
  font-size: 12px;
  color: #827b7f;
}
.sns-author > span {
  display: flex;
  flex-direction: column;
  min-width: 0;
}
.sns-author b {
  font-size: 12px;
  white-space: nowrap;
  overflow: hidden;
  text-overflow: ellipsis;
}
.sns-author small {
  font-size: 10px;
  color: #999096;
  white-space: nowrap;
  overflow: hidden;
  text-overflow: ellipsis;
}
.sns-author.compact {
  gap: 7px;
}
.sns-author.compact .sns-avatar {
  width: 28px;
  height: 28px;
}
.sns-author.compact b { font-size: 10px; }
.sns-author.compact small { font-size: 8px; }
.sns-empty,
.sns-empty-small {
  border: 1px dashed #d9d3d0;
  border-radius: 14px;
  padding: 28px 18px;
  text-align: center;
  color: #999096;
  background: #ffffff88;
}
.sns-empty b { font-size: 16px; }
.sns-empty p { font-size: 10px; margin: 6px 0 0; }
.sns-empty-small { font-size: 10px; padding: 18px 12px; }
@media (max-width: 960px) {
  .sns-body {
    grid-template-columns: 1fr;
  }
  .sns-side-rail {
    position: static;
    display: grid;
    grid-template-columns: repeat(2, minmax(0, 1fr));
  }
}
@media (max-width: 700px) {
  .sns-page {
    padding: 74px 12px 46px;
  }
  .sns-page-head {
    align-items: flex-start;
    flex-direction: column;
  }
  .sns-head-stats {
    width: 100%;
    justify-content: flex-start;
  }
  .sns-stat-pill {
    min-width: 92px;
  }
  .sns-side-rail {
    grid-template-columns: 1fr;
  }
  .sns-account-card {
    min-width: 172px;
  }
  .sns-post > header {
    align-items: flex-start;
    flex-direction: column;
  }
  .sns-post > header time {
    padding-left: 52px;
  }
  .sns-comments {
    padding: 10px 12px 14px;
  }
  .sns-thread-card {
    padding: 9px 10px;
  }
}

/* v0.3.181 — custom background image + page-specific direct-manipulation stickers */
.world-bg-image {
  position: fixed;
  inset: 0;
  z-index: 0;
  pointer-events: none;
  overflow: hidden;
  /* JS가 현재 페이지의 원래 계산 배경(색/gradient)을 그대로 복제합니다. */
  background-color: transparent;
}
.world-bg-image img {
  display: block;
  width: 100%;
  max-width: none;
  height: auto;
  min-height: 0;
  object-fit: contain;
  object-position: top center;
  user-select: none;
}
.site.has-world-bg-image .site-view {
  position: relative;
  z-index: 2;
  background: transparent !important;
}
body .site.has-world-bg-image .site-view > :not(.world-bg-image):not(.easter-hotspot):not(.area-select-hint):not(.area-select-box) {
  position: relative;
  z-index: 1;
  background-color: transparent !important;
  background-image: none !important;
}
.world-sticker-layer {
  position: fixed;
  inset: 0;
  /* v0.3.322 — 스티커가 반신 캐릭터 이미지 뒤에 깔려서 잘 안 보인다는 요청으로
     올렸습니다. .hero-info-half가 z-index:10 !important라, 그보다 높여야 스티커가
     그 위로 올라옵니다. 편집 모드 값(35)·하단 독(80)보다는 여전히 낮게 둡니다. */
  z-index: 15;
  pointer-events: none;
  overflow: hidden;
}
.world-sticker-item {
  position: absolute;
  left: var(--st-x, 50%);
  top: var(--st-y, 50%);
  width: var(--st-size, 120px);
  max-width: min(85vw, 900px);
  transform: translate(-50%, -50%) rotate(var(--st-rotation, 0deg));
  transform-origin: center center;
  opacity: var(--st-opacity, 1);
  user-select: none;
  pointer-events: none;
}
.world-sticker-image {
  display: block;
  width: 100%;
  height: auto;
  transform: none;
  transform-origin: center center;
  user-select: none;
  -webkit-user-drag: none;
  pointer-events: none;
}
.world-sticker-resize-handle,
.world-sticker-rotate-handle {
  display: none;
}
.site.editing .world-sticker-layer {
  z-index: 35;
  overflow: visible;
}
.site.editing .world-sticker-item {
  pointer-events: none;
}
.site.editing .world-sticker-image {
  pointer-events: auto;
  cursor: grab;
  outline: 1px dashed color-mix(in srgb, var(--accent) 70%, #fff);
  outline-offset: 6px;
  border-radius: 4px;
  touch-action: none;
}
.site.editing .world-sticker-item.dragging .world-sticker-image {
  cursor: grabbing;
  outline-style: solid;
}
.site.editing .world-sticker-resize-handle,
.site.editing .world-sticker-rotate-handle {
  position: absolute;
  bottom: -22px;
  display: grid;
  place-items: center;
  width: 30px;
  height: 30px;
  padding: 0;
  border: 1px solid rgba(255,255,255,.46);
  border-radius: 50%;
  background: rgba(24,23,27,.9);
  color: #fff;
  box-shadow: 0 5px 15px rgba(0,0,0,.2);
  pointer-events: auto;
  touch-action: none;
  z-index: 2;
  /* 위치는 스티커 회전을 따라가되, 버튼 모양 자체는 화면 기준으로 똑바로 유지합니다. */
  transform: rotate(var(--st-counter-rotation, 0deg));
  transform-origin: center center;
}
.site.editing .world-sticker-resize-handle {
  left: -22px;
  cursor: nwse-resize;
}
.site.editing .world-sticker-resize-handle::before,
.site.editing .world-sticker-resize-handle::after {
  content: "";
  position: absolute;
  width: 11px;
  height: 1px;
  background: currentColor;
  transform: rotate(45deg);
}
.site.editing .world-sticker-resize-handle::after {
  width: 5px;
  height: 5px;
  border-left: 1px solid currentColor;
  border-bottom: 1px solid currentColor;
  background: transparent;
  transform: translate(-4px, 4px) rotate(0deg);
}
.site.editing .world-sticker-rotate-handle {
  right: -22px;
  cursor: grab;
  font: 700 17px/1 sans-serif;
}
.site.editing .world-sticker-item.rotating .world-sticker-rotate-handle {
  cursor: grabbing;
  background: var(--accent);
}
.site.editing .world-sticker-item.resizing .world-sticker-resize-handle {
  background: var(--accent);
}
.world-bg-editor-preview {
  position: relative;
  width: 100%;
  aspect-ratio: 16 / 7;
  margin: 10px 0;
  border: 1px dashed #4a474d;
  border-radius: 10px;
  overflow: hidden;
  display: grid;
  place-items: center;
  background: var(--world-base-bg, var(--world-bg, #f4f2ef));
  color: #8e8990;
  font-size: 9px;
  font-weight: 800;
  letter-spacing: .1em;
}
.world-bg-editor-preview img {
  position: absolute;
  inset: 0 auto auto 0;
  display: block;
  width: 100%;
  max-width: none;
  height: auto;
  object-fit: contain;
  object-position: top center;
}
.decor-range {
  display: grid;
  gap: 7px;
  margin-top: 12px;
}
.decor-range > label {
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: 10px;
  font-size: 10px;
}
.decor-range > label b { font-variant-numeric: tabular-nums; }
.decor-range input[type="range"] { width: 100%; }
.decor-sticker-list {
  display: grid;
  gap: 9px;
  margin-top: 10px;
}
.decor-sticker-row {
  display: grid;
  grid-template-columns: 74px minmax(0, 1fr);
  gap: 10px;
  padding: 9px;
  border: 1px solid #35343a;
  border-radius: 10px;
  background: #19191d;
}
.decor-sticker-thumb {
  min-width: 0;
  height: 74px;
  border-radius: 8px;
  overflow: hidden;
  background: #242329;
  border: 1px solid #3e3c43;
  display: grid;
  place-items: center;
  color: #77727c;
  font-size: 8px;
}
.decor-sticker-thumb img { width: 100%; height: 100%; object-fit: contain; }
.decor-sticker-controls {
  min-width: 0;
  display: flex;
  flex-direction: column;
  justify-content: center;
  gap: 6px;
}
.decor-sticker-controls > b { font-size: 9px; letter-spacing: .08em; }
.decor-sticker-controls > small { font-size: 8px; color: #8e8992; }
.decor-sticker-controls .eactions { margin-top: 2px; }
@media (max-width: 700px) {
  .world-sticker-item { max-width: min(88vw, 620px); }
  .decor-sticker-row { grid-template-columns: 58px minmax(0, 1fr); }
  .decor-sticker-thumb { height: 58px; }
  .site.editing .world-sticker-resize-handle,
  .site.editing .world-sticker-rotate-handle {
    width: 34px;
    height: 34px;
    bottom: -25px;
  }
  .site.editing .world-sticker-resize-handle { left: -25px; }
  .site.editing .world-sticker-rotate-handle { right: -25px; }
}



/* v0.3.182 — sticker handles rotate with sticker; background image uses actual site base color */


/* v0.3.184 — uploaded background sits on each page's real original background */
.site.has-world-bg-image .site-view > .world-bg-image {
  z-index: 0;
}


/* v0.3.185 — direct background image position controls */
.world-bg-image img {
  position: absolute;
  left: 50%;
  top: 0;
  width: 100%;
  max-width: none;
  height: auto;
  min-height: 0;
  object-fit: contain;
  object-position: top center;
  transform: translate(
    calc(-50% + var(--world-bg-x-vw, 0vw)),
    var(--world-bg-y-vh, 0vh)
  );
  transform-origin: top center;
}
.world-bg-editor-preview img {
  left: 50%;
  top: 0;
  transform: translate(
    calc(-50% + var(--world-bg-x-pct, 0%)),
    var(--world-bg-y-pct, 0%)
  );
  transform-origin: top center;
}
.decor-bg-position {
  display: grid;
  gap: 8px;
  margin-top: 13px;
  padding-top: 12px;
  border-top: 1px solid #35343a;
}
.decor-bg-position > label {
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: 10px;
  font-size: 10px;
}
.decor-bg-position > label b {
  font-variant-numeric: tabular-nums;
  color: #aaa4ae;
  font-size: 9px;
}
.decor-bg-position-pad {
  width: 112px;
  display: grid;
  grid-template-columns: repeat(3, 34px);
  grid-auto-rows: 34px;
  gap: 5px;
  margin: 1px auto 2px;
}
.decor-bg-position-pad button {
  width: 34px;
  height: 34px;
  display: grid;
  place-items: center;
  padding: 0;
  border: 1px solid #45434a;
  border-radius: 8px;
  background: #222126;
  color: #d7d2da;
  cursor: pointer;
  font: 700 14px/1 sans-serif;
}
.decor-bg-position-pad button:hover {
  border-color: var(--accent);
  color: #fff;
  background: #2a292f;
}
.decor-bg-position-pad button.reset {
  font-size: 9px;
  color: var(--accent);
}


/* v0.3.186 — world background color consistency ------------------------------ */
/* 직접 지정/스킨색 모드에서는 페이지 루트마다 하드코딩돼 있던 크림색들을 한 색으로 통일.
   background-color만 덮어서 기존 gradient/texture 장식은 그대로 남깁니다. */
.site.theme-default:not(.dark-mode).world-bg-override {
  --ui-page-bg: var(--world-bg);
}
/* v0.3.329 — 이 규칙은 .site-view의 "페이지 콘텐츠" 직계 자식을 통일된 배경색으로
   덮으려는 의도인데, .easter-hotspot(이스터에그/반응 범위 표시 상자, v0.3.326부터
   .site-view의 직계 자식)까지 함께 걸려서 일부러 낮춘 반투명 배경(v0.3.327)이
   !important로 통째로 불투명한 페이지 배경색으로 덮여버렸습니다. */
.site.theme-default.world-bg-override .site-view > :not(.world-bg-image):not(.easter-hotspot):not(.area-select-hint):not(.area-select-box) {
  background: var(--ui-page-bg) !important;
}
.world-background-reset-row {
  align-items: center;
  justify-content: space-between;
  margin-top: 7px;
}
.world-background-reset-row small {
  color: #8f878c;
  font-size: 9px;
}


/* v0.3.187 — character creation image fields -------------------------------- */
.character-modal-images {
  margin: 14px 0;
  padding: 12px;
  border: 1px solid #ddd7d4;
  border-radius: 12px;
  display: grid;
  gap: 10px;
}
.character-modal-images > legend {
  padding: 0 5px;
  font-size: 10px;
  font-weight: 800;
  color: #8e868b;
  letter-spacing: .05em;
}
.character-modal-image-field {
  margin: 0;
}
.character-modal-image-row {
  display: grid;
  grid-template-columns: 86px minmax(0, 1fr);
  gap: 10px;
  align-items: center;
}
.character-modal-image-preview {
  width: 86px;
  height: 86px;
  border: 1px solid #ddd7d4;
  border-radius: 10px;
  overflow: hidden;
  background: #f5f2f0;
  display: grid;
  place-items: center;
  color: #a0979d;
  font-size: 9px;
  font-weight: 800;
  letter-spacing: .08em;
}
.character-modal-image-preview img {
  width: 100%;
  height: 100%;
  object-fit: contain;
  display: block;
}
.character-modal-image-actions {
  min-width: 0;
  display: flex;
  align-items: center;
  gap: 6px;
  flex-wrap: wrap;
}
.character-modal-image-actions small {
  width: 100%;
  font-size: 9px;
  line-height: 1.45;
  color: #958d92;
}
.character-modal-main-check {
  margin-top: 12px;
}
.character-modal-main-help {
  display: block;
  margin: -4px 0 10px;
  /* v0.3.344 — 관리자 문구 검토 반영: 붉은 글씨로(캐릭터 목록의 같은 경고와
     톤 통일, .character-main-warning과 같은 색). 뒤쪽 .modal-help{color:#8f8d96
     !important} 규칙을 이겨야 해서 !important 필요. */
  color: #f0a6b4 !important;
  font-weight: 700;
}
@media (max-width: 520px) {
  .character-modal-image-row {
    grid-template-columns: 70px minmax(0, 1fr);
  }
  .character-modal-image-preview {
    width: 70px;
    height: 70px;
  }
}

/* v0.3.190 — GUESTBOOK ------------------------------------------------------- */
.guestbook-page{
  min-height:100%;
  padding:clamp(82px,8vw,108px) clamp(14px,4vw,54px) 86px;
  color:#29252a;
}
.guestbook-shell{width:min(1120px,100%);margin:0 auto}
.guestbook-head{display:flex;align-items:flex-end;justify-content:space-between;gap:24px;margin-bottom:22px}
.guestbook-head>div{min-width:0}
.guestbook-head small{display:block;margin-bottom:8px;font-size:9px;font-weight:900;letter-spacing:.18em;color:var(--accent,#9f7d86)}
.guestbook-head h1{margin:0;font-size:clamp(42px,6vw,72px);line-height:.92;letter-spacing:-.055em;font-weight:950}
.guestbook-head p{margin:12px 0 0;max-width:620px;color:#7e767c;font-size:12px;line-height:1.7}
.guestbook-head>strong{flex:0 0 auto;display:flex;align-items:baseline;gap:7px;font-size:34px;line-height:1;font-variant-numeric:tabular-nums}
.guestbook-head>strong span{font-size:9px;letter-spacing:.12em;color:#989096}
.guestbook-layout{display:grid;grid-template-columns:minmax(260px,330px) minmax(0,1fr);gap:18px;align-items:start}
.guestbook-compose{position:sticky;top:86px;border:1px solid color-mix(in srgb,var(--accent,#9f7d86) 18%,#d9d3d0);border-radius:20px;background:color-mix(in srgb,var(--world-bg,#f4f2ef) 72%,#fff);padding:18px;box-shadow:0 12px 30px rgba(38,30,35,.05)}
.guestbook-compose-head{display:flex;flex-direction:column;gap:4px;margin-bottom:16px;padding-bottom:13px;border-bottom:1px solid rgba(40,34,39,.09)}
.guestbook-compose-head small{font-size:8px;font-weight:900;letter-spacing:.16em;color:var(--accent,#9f7d86)}
.guestbook-compose-head b{font-size:17px}
.guestbook-field{display:grid;gap:6px;margin-top:12px;position:relative}
.guestbook-field label{font-size:10px;font-weight:800;color:#625b60}
.guestbook-field input,.guestbook-field textarea{width:100%;box-sizing:border-box;border:1px solid #dcd5d2;border-radius:12px;background:rgba(255,255,255,.84);color:#2d282c;padding:11px 12px;font:inherit;font-size:12px;outline:none;resize:vertical}
.guestbook-field input:focus,.guestbook-field textarea:focus{border-color:color-mix(in srgb,var(--accent,#9f7d86) 65%,#bbb);box-shadow:0 0 0 3px color-mix(in srgb,var(--accent,#9f7d86) 12%,transparent)}
.guestbook-field>small{justify-self:end;font-size:8px;color:#aaa1a6}
.guestbook-submit{width:100%;min-height:42px;margin-top:14px;border:0;border-radius:12px;background:#272329;color:#fff;font-weight:850;font-size:11px;cursor:pointer}
.guestbook-submit:hover{transform:translateY(-1px)}
.guestbook-local-note{margin:10px 2px 0;font-size:8px;line-height:1.55;color:#9b9398}
.guestbook-list{display:flex;flex-direction:column;gap:11px;min-width:0}
.guestbook-entry{border:1px solid #dfd9d6;border-radius:18px;background:color-mix(in srgb,var(--world-bg,#f4f2ef) 58%,#fff);padding:15px 17px;box-shadow:0 8px 22px rgba(35,28,32,.035)}
.guestbook-entry>header{display:flex;align-items:center;justify-content:space-between;gap:12px;margin-bottom:10px}
.guestbook-entry>header>div{display:flex;align-items:center;gap:9px;min-width:0}
.guestbook-entry>header span{display:grid;place-items:center;width:28px;height:28px;border-radius:9px;background:color-mix(in srgb,var(--accent,#9f7d86) 15%,#fff);color:color-mix(in srgb,var(--accent,#9f7d86) 78%,#222);font-size:9px;font-weight:900;font-variant-numeric:tabular-nums}
.guestbook-entry>header b{font-size:12px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.guestbook-entry>header time{font-size:9px;color:#a0979d;white-space:nowrap}
.guestbook-entry>p{margin:0;color:#433d42;font-size:12px;line-height:1.75;word-break:break-word}
.guestbook-reply{margin-top:12px;margin-left:34px;border-left:3px solid color-mix(in srgb,var(--accent,#9f7d86) 44%,#d7d0cd);background:rgba(255,255,255,.48);border-radius:0 12px 12px 0;padding:10px 12px}
.guestbook-reply small{display:block;margin-bottom:5px;font-size:8px;font-weight:900;letter-spacing:.11em;color:var(--accent,#9f7d86)}
.guestbook-reply p{margin:0;font-size:11px;line-height:1.65;color:#5a5358}
.guestbook-delete-own{margin-top:10px;border:0;background:transparent;color:#a49ca1;font-size:9px;text-decoration:underline;cursor:pointer;padding:0}
.guestbook-empty{border:1px dashed #d7d0cd;border-radius:18px;padding:50px 20px;text-align:center;background:rgba(255,255,255,.28)}
.guestbook-empty b{display:block;font-size:16px;letter-spacing:.08em}
.guestbook-empty p{margin:7px 0 0;font-size:10px;color:#999096}
.guestbook-admin-summary{display:flex;align-items:baseline;justify-content:space-between;gap:12px;margin:12px 0;padding:10px 11px;border:1px solid #e1dbd8;border-radius:10px;background:#faf9f8}
.guestbook-admin-summary b{font-size:21px}.guestbook-admin-summary span{font-size:9px;color:#8f878c}
.guestbook-admin-list .elist-row{align-items:flex-start}
.guestbook-admin-list .grow p{margin:4px 0 0;font-size:9px;line-height:1.45;color:#6f676c}
.guestbook-admin-list .grow em{display:block;margin-top:4px;font-size:8px;font-style:normal;color:var(--accent,#9f7d86)}
.site.theme-default.dark-mode .guestbook-page{color:#f2eef1}
.site.theme-default.dark-mode .guestbook-head p,.site.theme-default.dark-mode .guestbook-local-note{color:#999197}
.site.theme-default.dark-mode .guestbook-compose,.site.theme-default.dark-mode .guestbook-entry{background:color-mix(in srgb,var(--world-bg,#121214) 82%,#242126);border-color:#3b373c}
.site.theme-default.dark-mode .guestbook-compose-head{border-bottom-color:#39353a}
.site.theme-default.dark-mode .guestbook-field label{color:#c5bec3}
.site.theme-default.dark-mode .guestbook-field input,.site.theme-default.dark-mode .guestbook-field textarea{background:#1d1b1f;border-color:#403b41;color:#f4f0f2}
.site.theme-default.dark-mode .guestbook-submit{background:#f2edef;color:#242126}
.site.theme-default.dark-mode .guestbook-entry>p{color:#d9d2d7}
.site.theme-default.dark-mode .guestbook-reply{background:#201d21}
.site.theme-default.dark-mode .guestbook-reply p{color:#c8c0c5}
.site.theme-default.dark-mode .guestbook-empty{background:rgba(255,255,255,.025);border-color:#403b40}
/* v0.3.263 — 사용자 요청: 대화(TALK) 페이지의 큰 박스(.talk-window)가 v0.3.219 통합
   컬러 시스템 도입 때 빠져서 다크모드에서도 계속 밝은 하드코딩 색 그대로였습니다. */
.site.theme-default.dark-mode .talk-window{background:color-mix(in srgb,var(--accent,#9f7d86) 5%,#1b1a1e);border-color:rgba(255,255,255,.14);color:#f2eff1}
.site.theme-default.dark-mode .talk-window-head{border-bottom-color:rgba(255,255,255,.14)}
.site.theme-default.dark-mode .talk-window-head small,.site.theme-default.dark-mode .talk-meta small,.site.theme-default.dark-mode .talk-no-message{color:#7e777d}
.site.theme-default.dark-mode .talk-meta{color:#aaa3a9}
.site.theme-default.dark-mode .talk-meta i{background:#3a363a}
.site.theme-default.dark-mode .talk-bubble{background:color-mix(in srgb,var(--talk) 24%,#232126);border-color:color-mix(in srgb,var(--talk) 28%,#3a363a);color:#f2eff1}
.site.theme-default.dark-mode .talk-message.right .talk-bubble{background:color-mix(in srgb,var(--talk) 78%,#1b1a1e);color:#fff}
.site.theme-default.dark-mode .talk-message.narration .talk-bubble{background:rgba(255,255,255,.05);border-color:rgba(255,255,255,.16);color:#aaa3a9}
.site.theme-default.dark-mode .talk-narration-time{color:#7e777d}
.site.theme-default.dark-mode .talk-input-mock{background:color-mix(in srgb,var(--accent,#9f7d86) 4%,#17161a);color:#7e777d}
@media(max-width:820px){
  .guestbook-head{align-items:flex-start;flex-direction:column}
  .guestbook-head>strong{align-self:flex-end;font-size:28px}
  .guestbook-layout{grid-template-columns:1fr}
  .guestbook-compose{position:static}
}
@media(max-width:520px){
  .guestbook-page{padding:76px 12px 74px}
  .guestbook-head h1{font-size:44px}
  .guestbook-entry{padding:13px}
  .guestbook-entry>header{align-items:flex-start}
  .guestbook-entry>header time{font-size:8px}
  .guestbook-reply{margin-left:18px}
}

/* v0.3.191 — TALES visibility flags ----------------------------------------- */
.tales-access-tabs {
  display: flex;
  align-items: center;
  gap: 7px;
  flex: 0 0 auto;
}
.tales-access-tabs button {
  min-width: 48px;
  height: 34px;
  padding: 0 12px;
  border: 1px solid rgba(70, 60, 60, 0.14);
  border-radius: 999px;
  background: rgba(255, 255, 255, 0.72);
  color: #766f72;
  font: 800 10px/1 system-ui, sans-serif;
  letter-spacing: 0.08em;
  cursor: pointer;
}
.tales-access-tabs button.on {
  background: #25151a;
  color: #f1bacb;
  border-color: #25151a;
}
.tale-access-badges {
  display: flex;
  align-items: center;
  gap: 5px;
  flex-wrap: wrap;
  margin: 0 0 8px;
}
.tale-access-badges span,
.tale-detail-head .tale-access-badges span {
  padding: 4px 7px;
  border-radius: 999px;
  background: #e9e7e3;
  color: #555;
  font: 800 8px/1 system-ui, sans-serif;
  letter-spacing: 0.08em;
}
.tale-access-badges .r18,
.tale-detail-head .tale-access-badges .r18 {
  background: #25151a;
  color: #f1bacb;
}
.tale-access-badges .spoiler,
.tale-detail-head .tale-access-badges .spoiler {
  background: #252229;
  color: #d9cff0;
}
.tale-access-badges .private,
.tale-detail-head .tale-access-badges .private {
  background: #1c1c1c;
  color: #cfcfcf;
}
.tale-detail-head > div > .tale-access-badges {
  margin: 0 2px 0 0;
}
@media (max-width: 700px) {
  .tales-page-head {
    align-items: flex-start;
    gap: 14px;
  }
  .tales-access-tabs {
    align-self: flex-end;
  }
}


/* v0.3.192 — custom HTML page -------------------------------------------------- */
/* v0.3.354 — 사용자가 만든 코드가 곧 페이지 전체가 되도록(LOPE가 얹던 제목·설명
   박스를 없애고, 고정 px 높이 대신 화면 남은 영역을 채우는 형태로) 구조 변경. */
.custom-html-page {
  padding-top: 58px;
  color: #282429;
}
.custom-html-frame {
  display: block;
  width: 100%;
  height: calc(100dvh - 58px);
  border: 0;
  background: transparent;
}
.custom-html-empty {
  min-height: calc(100dvh - 58px);
  display: grid;
  place-items: center;
  align-content: center;
  gap: 7px;
  margin: 0 clamp(14px, 4vw, 56px);
  border: 1px dashed color-mix(in srgb, currentColor 22%, transparent);
  border-radius: 18px;
  text-align: center;
}
.custom-html-empty b {
  font-size: 16px;
  letter-spacing: .08em;
}
.custom-html-empty p {
  margin: 0;
  color: color-mix(in srgb, currentColor 58%, transparent);
  font-size: 11px;
}
/* v0.3.354 — HTML 자유 페이지 아이콘 등록 UI. */
.html-page-icon-row {
  display: flex;
  align-items: center;
  gap: 8px;
}
.html-page-icon-preview {
  width: 32px;
  height: 32px;
  border-radius: 8px;
  object-fit: cover;
  background: #222;
  flex: 0 0 auto;
}
.html-page-icon-preview.empty {
  display: grid;
  place-items: center;
}
.html-page-icon-preview.empty .ui-icon {
  width: 16px;
  height: 16px;
  filter: brightness(0) invert(1);
}
.html-code-editor {
  min-height: 360px !important;
  resize: vertical;
  font-family: "Cascadia Code", "Consolas", "SFMono-Regular", monospace !important;
  font-size: 11px !important;
  line-height: 1.6 !important;
  tab-size: 2;
  white-space: pre;
  overflow: auto;
}
.site.theme-default.dark-mode .custom-html-page {
  color: #f2eef1;
}
@media (max-width: 700px) {
  .html-code-editor {
    min-height: 280px !important;
  }
}

/* ===== lope v0.3.195 · lope-style error easter egg ===== */
.easter-error-back {
  position: fixed;
  z-index: 330;
  inset: 0;
  display: grid;
  place-items: center;
  padding: 20px;
  background: rgba(12, 11, 14, 0.62);
  backdrop-filter: blur(10px);
}
.easter-error-window {
  position: relative;
  width: min(500px, calc(100vw - 32px));
  overflow: hidden;
  border: 1px solid color-mix(in srgb, var(--egg-color) 18%, var(--line));
  border-radius: 22px;
  background: color-mix(in srgb, var(--paper2) 96%, var(--egg-color) 4%);
  color: var(--ink);
  box-shadow: 0 32px 100px rgba(0, 0, 0, 0.34);
  font-family: Inter, Pretendard, "Noto Sans KR", system-ui, sans-serif;
}
.easter-error-window::before {
  content: "";
  position: absolute;
  left: 0;
  right: 0;
  top: 0;
  height: 4px;
  background: var(--egg-color);
}
.easter-error-head {
  min-height: 66px;
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: 16px;
  padding: 17px 18px 12px 20px;
  border-bottom: 1px solid var(--line);
}
.easter-error-head-copy {
  display: flex;
  align-items: center;
  gap: 11px;
  min-width: 0;
}
.easter-error-mark {
  width: 32px;
  height: 32px;
  flex: 0 0 32px;
  display: grid;
  place-items: center;
  border: 1px solid color-mix(in srgb, var(--egg-color) 45%, transparent);
  border-radius: 50%;
  background: color-mix(in srgb, var(--egg-color) 12%, transparent);
  color: var(--egg-color);
  font: 900 15px/1 Inter, sans-serif;
}
.easter-error-head-copy div {
  min-width: 0;
}
.easter-error-head-copy small {
  display: block;
  margin-bottom: 4px;
  color: var(--egg-color);
  font: 800 7px/1 Inter, Arial, sans-serif;
  letter-spacing: 0.16em;
}
.easter-error-head-copy b {
  display: block;
  overflow: hidden;
  color: color-mix(in srgb, var(--ink) 82%, var(--muted));
  font-size: 10px;
  font-weight: 700;
  text-overflow: ellipsis;
  white-space: nowrap;
}
.easter-error-close {
  width: 32px;
  height: 32px;
  flex: 0 0 32px;
  border: 1px solid var(--line);
  border-radius: 50%;
  background: color-mix(in srgb, var(--paper2) 84%, transparent);
  color: var(--muted);
  font-size: 18px;
  line-height: 1;
  cursor: pointer;
}
.easter-error-close:hover,
.easter-error-close:focus-visible {
  border-color: color-mix(in srgb, var(--egg-color) 38%, var(--line));
  background: color-mix(in srgb, var(--egg-color) 9%, var(--paper2));
  color: var(--egg-color);
  outline: none;
}
.easter-error-body {
  padding: 28px 30px 24px;
}
.easter-error-copy h2 {
  margin: 0 0 11px;
  color: var(--ink);
  font: 650 clamp(22px, 4vw, 28px)/1.2 Georgia, "Noto Serif KR", serif;
  letter-spacing: -0.03em;
  word-break: keep-all;
}
.easter-error-copy p {
  margin: 0;
  color: color-mix(in srgb, var(--ink) 68%, var(--muted));
  font-size: 11px;
  line-height: 1.8;
  word-break: break-word;
}
.easter-error-copy code {
  display: inline-flex;
  max-width: 100%;
  margin-top: 16px;
  padding: 7px 10px;
  overflow: hidden;
  border: 1px solid color-mix(in srgb, var(--egg-color) 20%, var(--line));
  border-radius: 999px;
  background: color-mix(in srgb, var(--egg-color) 7%, var(--paper));
  color: color-mix(in srgb, var(--egg-color) 65%, var(--ink));
  font: 700 8px/1.3 ui-monospace, SFMono-Regular, Consolas, monospace;
  letter-spacing: 0.04em;
  text-overflow: ellipsis;
  white-space: nowrap;
}
.easter-error-window > footer {
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: 16px;
  padding: 13px 18px 17px 22px;
  border-top: 1px solid var(--line);
  background: color-mix(in srgb, var(--paper) 62%, transparent);
}
.easter-error-window > footer span {
  color: var(--muted);
  font: 800 7px/1 Inter, Arial, sans-serif;
  letter-spacing: 0.14em;
}
.easter-error-window > footer button {
  min-width: 92px;
  min-height: 36px;
  padding: 0 18px;
  border: 1px solid color-mix(in srgb, var(--egg-color) 28%, var(--line));
  border-radius: 999px;
  background: var(--paper2);
  color: var(--ink);
  font-size: 9px;
  font-weight: 800;
  cursor: pointer;
}
.easter-error-window > footer button:hover,
.easter-error-window > footer button:focus-visible {
  background: var(--egg-color);
  color: #fff;
  outline: none;
}
body.dark-mode .easter-error-window {
  --ink: #f1eef3;
  --paper: #1b1a1e;
  --paper2: #222126;
  --muted: #a9a3ad;
  --line: rgba(255,255,255,.12);
}
body.dark-mode .easter-error-back {
  background: rgba(4, 4, 6, 0.7);
}
@media (max-width: 520px) {
  .easter-error-back { padding: 10px; }
  .easter-error-window { width: min(470px, calc(100vw - 20px)); border-radius: 18px; }
  .easter-error-head { padding: 15px 14px 11px 16px; }
  .easter-error-body { padding: 22px 18px 20px; }
  .easter-error-window > footer { padding: 12px 14px 14px 18px; }
}

/* ======================================================================
   v0.3.198 — 기본 스킨 SOCIAL : 회사 인트라넷 / 사내 게시판
   SNS 데이터는 기존 그대로 쓰고, 기본 스킨에서만 보이는 화면을 게시판형으로 재구성합니다.
   ====================================================================== */
.sns-office-page{
  padding:clamp(78px,8vw,102px) clamp(14px,3vw,30px) 60px;
}
.sns-office-shell{width:min(1180px,100%);margin:0 auto}
.sns-office-top{
  min-height:86px;display:flex;align-items:center;justify-content:space-between;gap:22px;
  border:1px solid #d7d3d0;border-bottom:3px solid color-mix(in srgb,var(--accent) 68%,#383338);
  background:#fff;padding:16px 19px;
}
.sns-office-brand{display:flex;align-items:center;gap:16px;min-width:0}
.sns-office-brand>span{
  width:52px;height:52px;display:grid;place-items:center;background:#29262a;color:#fff;
  font-size:11px;font-weight:950;letter-spacing:.08em;flex:0 0 auto;
}
.sns-office-brand small{display:block;margin-bottom:3px;color:#989095;font-size:8px;font-weight:900;letter-spacing:.16em}
.sns-office-brand h1{margin:0!important;color:#2a272a!important;font:900 clamp(22px,3vw,30px)/1.1 inherit!important;letter-spacing:-.035em!important}
.sns-office-world{min-width:112px;padding-left:16px;border-left:1px solid #e2dedb;text-align:right}
.sns-office-world small{display:block;font-size:8px;font-weight:900;letter-spacing:.12em;color:#9a9297}
.sns-office-world b{display:block;margin-top:3px;font-size:14px;color:#363136}
.sns-office-grid{display:grid;grid-template-columns:218px minmax(0,1fr);gap:14px;margin-top:14px;align-items:start}
.sns-office-side{display:flex;flex-direction:column;gap:12px;position:sticky;top:84px}
.sns-office-side>section{border:1px solid #dcd7d4;background:#fff}
.sns-office-side>section>header{height:37px;padding:0 12px;display:flex;align-items:center;justify-content:space-between;background:hsl(from var(--accent) h 12% 93%);border-bottom:1px solid #ded9d6}
.sns-office-side>section>header b{font-size:9px;font-weight:950;letter-spacing:.11em;color:#3d383c}
.sns-office-side>section>header span{font-size:9px;color:#989095}
.sns-office-members{padding:4px 10px 8px}
.sns-office-member{display:grid;grid-template-columns:31px minmax(0,1fr);gap:8px;align-items:center;padding:8px 0;border-bottom:1px solid #eeeae8;position:relative}
.sns-office-member:last-child{border-bottom:0}
.sns-office-member::before{content:"";position:absolute;left:-10px;top:10px;bottom:10px;width:2px;background:var(--sns-c)}
.sns-office-member .sns-avatar{width:31px;height:31px;border-radius:5px}
.sns-office-member>div{min-width:0;display:flex;flex-direction:column}
.sns-office-member b{font-size:10px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.sns-office-member small{font-size:8px;color:#999095;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.sns-office-summary dl{margin:0;padding:5px 11px 9px}
.sns-office-summary dl div{display:flex;align-items:center;justify-content:space-between;padding:7px 1px;border-bottom:1px solid #eeeae8}
.sns-office-summary dl div:last-child{border-bottom:0}
.sns-office-summary dt{font-size:9px;color:#858085}
.sns-office-summary dd{margin:0;font-size:13px;font-weight:900;font-variant-numeric:tabular-nums}
.sns-office-board{min-width:0;border:1px solid #d9d5d2;background:#fff}
.sns-office-board-head{min-height:61px;padding:11px 14px;display:flex;align-items:center;justify-content:space-between;gap:15px;border-bottom:1px solid #d9d5d2}
.sns-office-board-head>div{display:flex;flex-direction:column;gap:2px}
.sns-office-board-head small{font-size:8px;font-weight:900;letter-spacing:.14em;color:var(--accent)}
.sns-office-board-head b{font-size:17px;color:#302c30}
.sns-office-board-head>span{font-size:9px;color:#8e878b}
.sns-board-columns,.sns-board-entry>summary{display:grid;grid-template-columns:58px minmax(0,1fr) 100px 126px 58px;align-items:center}
.sns-board-columns{height:34px;padding:0 9px;background:#f3f1ef;border-bottom:1px solid #ddd8d5;color:#7f787d;font-size:8px;font-weight:900;text-align:center}
.sns-board-columns span:nth-child(2){text-align:left;padding-left:9px}
.sns-board-entry{border-bottom:1px solid #e7e2df}
.sns-board-entry:last-child{border-bottom:0}
.sns-board-entry>summary{min-height:47px;padding:0 9px;cursor:pointer;list-style:none;color:#504a4f;font-size:9px;transition:.14s;background:#fff}
.sns-board-entry>summary::-webkit-details-marker{display:none}
.sns-board-entry>summary:hover,.sns-board-entry[open]>summary{background:color-mix(in srgb,var(--accent) 5%,#fff)}
.sns-board-no,.sns-board-author,.sns-board-entry>summary time,.sns-board-like{text-align:center;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.sns-board-no{font-variant-numeric:tabular-nums;color:#989095}
.sns-board-title{min-width:0;display:flex;align-items:center;gap:6px;padding:0 9px}
.sns-board-title b{min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;font-size:10px;color:#353035}
.sns-board-title em{flex:0 0 auto;border:1px solid #ddd6d2;background:#faf8f7;padding:2px 4px;font-style:normal;font-size:7px;color:#8b8388}
.sns-board-entry>summary time{font-size:8px;color:#91898e}
.sns-board-like{font-size:8px;color:#827a7f}
.sns-board-article{border-top:1px solid #e4dfdc;background:#fbfaf9;padding:18px 20px 20px}
.sns-board-article>header{display:flex;align-items:center;justify-content:space-between;gap:16px;padding-bottom:13px;border-bottom:1px solid #e6e1de}
.sns-board-article>header .sns-avatar{border-radius:5px;width:36px;height:36px}
.sns-board-article>header>div:last-child{display:flex;gap:12px;flex-wrap:wrap;justify-content:flex-end;font-size:8px;color:#958e92}
.sns-board-copy{padding:22px 4px 24px;min-height:92px}
.sns-board-copy>p{margin:0;color:#373237;font-size:12px;line-height:1.9;word-break:break-word}
.sns-board-copy figure{margin:18px 0 0;border:1px solid #dfd9d6;background:#fff;padding:8px;width:min(620px,100%)}
.sns-board-copy figure img{display:block;width:100%;max-height:520px;object-fit:contain}
.sns-board-comments{border-top:1px solid #ded9d5;padding-top:14px}
.sns-board-comments-title{display:flex;align-items:center;gap:7px;margin-bottom:10px}
.sns-board-comments-title b{font-size:10px}
.sns-board-comments-title span{min-width:18px;height:18px;display:grid;place-items:center;background:#353136;color:#fff;font-size:8px}
.sns-board-comments .sns-thread-card{border-radius:4px;background:#fff}
.sns-board-comments .sns-avatar{border-radius:4px}
.sns-office-empty,.sns-office-empty-small{padding:34px 18px;text-align:center;color:#8f888c}
.sns-office-empty b{display:block;font-size:12px;color:#514a50}
.sns-office-empty p{margin:6px 0 0;font-size:9px}
.sns-office-empty-small{padding:15px 5px;font-size:8px}
@media(max-width:900px){
  .sns-office-grid{grid-template-columns:1fr}
  .sns-office-side{position:static;display:grid;grid-template-columns:1fr 1fr;order:2}
  .sns-office-board{order:1}
}
@media(max-width:680px){
  .sns-office-top{align-items:flex-start}
  .sns-office-world{display:none}
  .sns-office-grid{margin-top:8px}
  .sns-office-side{grid-template-columns:1fr}
  .sns-board-columns{display:none}
  .sns-board-entry>summary{grid-template-columns:42px minmax(0,1fr) 65px;gap:4px;padding:8px 7px}
  .sns-board-entry>summary .sns-board-author{display:none}
  .sns-board-entry>summary time{font-size:7px}
  .sns-board-title em{display:none}
  .sns-board-like{font-size:7px}
  .sns-board-article{padding:14px 12px 16px}
  .sns-board-article>header{align-items:flex-start;flex-direction:column}
  .sns-board-article>header>div:last-child{justify-content:flex-start}
}
/* v0.3.202 — 사이트 작성 양식 적용 미리보기 */
.site-form-import-summary{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:7px;margin:10px 0 14px}.site-form-import-item{display:flex;align-items:center;gap:8px;padding:9px 10px;border:1px solid var(--line,#ddd);border-radius:10px;background:rgba(255,255,255,.04);font-size:12px}.site-form-import-item.disabled{opacity:.38}.site-form-char-preview{display:flex;flex-wrap:wrap;gap:6px}.site-form-char-preview span{display:inline-flex;align-items:center;gap:6px;padding:6px 8px;border:1px solid var(--line,#ddd);border-radius:999px;font-size:11px}.site-form-char-preview b{display:inline-grid;place-items:center;width:18px;height:18px;border-radius:50%;background:var(--accent);color:#fff;font-size:9px}@media(max-width:560px){.site-form-import-summary{grid-template-columns:1fr}}

/* =========================================================
   lope v0.3.206 — default skin light/dark background direction
   White mode uses a light MAIN / TIMELINE source palette so the existing
   dark-mode filter naturally produces the themed dark gray version.
   Timeline detail overlay stays dark in white mode and is inverted only in
   dark mode (images are counter-filtered back to their original colors).
   ========================================================= */
.site.theme-default .home-page:not(.world-au-school) {
  color: #1b1a1e;
  background: radial-gradient(ellipse at 50% 42%, rgba(40, 35, 45, 0.035), transparent 38%), var(--world-bg);
}
/* v0.3.214 — 위와 같은 이유로 캐릭터색 그라데이션은 라이트 모드에서만. */
.site.theme-default:not(.dark-mode) .home-page:not(.world-au-school) {
  background:
    radial-gradient(ellipse at 50% 42%, rgba(40, 35, 45, 0.035), transparent 38%),
    linear-gradient(
      120deg,
      color-mix(in srgb, var(--char-a) 6%, var(--world-bg)),
      var(--world-bg) 30%,
      var(--world-bg) 70%,
      color-mix(in srgb, var(--char-b) 6%, var(--world-bg))
    );
}
.site.theme-default .home-page:not(.world-au-school) .hero-half.left:after {
  background: linear-gradient(90deg, rgba(255, 255, 255, 0.64), transparent 45%, rgba(255, 255, 255, 0.04));
}
.site.theme-default .home-page:not(.world-au-school) .hero-half.right:after {
  background: linear-gradient(-90deg, rgba(255, 255, 255, 0.64), transparent 45%, rgba(255, 255, 255, 0.04));
}
.site.theme-default .home-page:not(.world-au-school) .hero-name {
  color: #17171a;
  text-shadow: 0 4px 30px rgba(255, 255, 255, 0.32);
}
.site.theme-default .home-page:not(.world-au-school) .hero-kicker,
.site.theme-default .home-page:not(.world-au-school) .hero-subname {
  color: #2e2b31;
}
.site.theme-default .home-page:not(.world-au-school) .pair-kicker {
  color: rgba(23, 22, 26, 0.46);
}
.site.theme-default .home-page:not(.world-au-school) .pair-title {
  color: #17171a;
}
.site.theme-default .home-page:not(.world-au-school) .pair-desc,
.site.theme-default .home-page:not(.world-au-school) .pair-date {
  color: rgba(23, 22, 26, 0.66);
}
.site.theme-default .home-page:not(.world-au-school) .pair-date i {
  background: rgba(23, 22, 26, 0.25);
}
.site.theme-default .home-page:not(.world-au-school) .art-fallback {
  border-color: rgba(20, 18, 24, 0.12);
  background: linear-gradient(160deg, rgba(20, 18, 24, 0.06), rgba(20, 18, 24, 0.012));
}
.site.theme-default .home-page:not(.world-au-school) .art-fallback:before,
.site.theme-default .home-page:not(.world-au-school) .art-fallback:after {
  background: rgba(20, 18, 24, 0.055);
}
.site.theme-default .home-page:not(.world-au-school) .art-fallback b {
  color: rgba(20, 18, 24, 0.09);
}

.site.theme-default .story-page-v5 {
  color: #26272a;
  background:
    radial-gradient(ellipse at 50% -12%, rgba(76, 88, 100, 0.07) 0%, rgba(79, 94, 107, 0.025) 29%, transparent 55%),
    radial-gradient(ellipse at 8% 66%, rgba(76, 89, 98, 0.045), transparent 34%),
    radial-gradient(ellipse at 92% 74%, rgba(67, 80, 92, 0.035), transparent 30%),
    var(--world-bg, #f4f2ef);
}
.site.theme-default .story-page-v5:before {
  opacity: 0.34;
  mix-blend-mode: multiply;
  background:
    linear-gradient(112deg, transparent 0 17%, rgba(20, 22, 24, 0.032) 18%, transparent 19% 58%, rgba(20, 22, 24, 0.024) 59%, transparent 60%),
    linear-gradient(72deg, transparent 0 33%, rgba(20, 22, 24, 0.021) 34%, transparent 35% 78%, rgba(20, 22, 24, 0.018) 79%, transparent 80%);
}
.site.theme-default .story-page-v5:after {
  box-shadow: inset 0 0 180px rgba(42, 38, 34, 0.08);
}
.site.theme-default .story-page-v5 .history-light-v5 {
  background: #65717a;
  opacity: 0.055;
}
.site.theme-default .story-page-v5 .history-light-v5.two {
  opacity: 0.035;
}
.site.theme-default .story-page-v5 .history-track-v5 {
  background: linear-gradient(to bottom, rgba(48, 48, 50, 0.56), rgba(48, 48, 50, 0.38) 86%, rgba(48, 48, 50, 0));
}
.site.theme-default .story-page-v5 .history-event-v5:before {
  background: rgba(52, 51, 54, 0.42);
}
.site.theme-default .story-page-v5 .history-filter-v6 button {
  border-color: rgba(35, 34, 38, 0.16);
  background: rgba(255, 255, 255, 0.68);
  color: #666269;
}
.site.theme-default .story-page-v5 .history-filter-v6 button:hover,
.site.theme-default .story-page-v5 .history-filter-v6 button.on {
  background: #25252a;
  color: #f4f1ed;
  border-color: #25252a;
}
.site.theme-default .story-page-v5 .history-empty-v6 {
  color: #5f5b60;
}
.site.theme-default .story-page-v5 .history-osmo-title-item-v8 button {
  color: #27262a;
}
.site.theme-default .story-page-v5 .history-osmo-seq-v8,
.site.theme-default .story-page-v5 .history-osmo-title-copy-v8 > small,
.site.theme-default .story-page-v5 .history-osmo-title-item-v8 button > em,
.site.theme-default .story-page-v5 .history-osmo-row-side-v33 > em {
  color: #777278;
}
.site.theme-default .story-page-v5 .history-osmo-preview-item-v8 {
  filter: drop-shadow(0 30px 45px rgba(25, 22, 28, 0.16));
}

/* The timeline detail is mounted under <body>, outside .site-view, so it needs
   its own dark-mode flip. This gives WHITE mode = dark detail, DARK mode = light detail. */
body.theme-default.dark-mode .history-osmo-overlay-v8 {
  filter: none;
  background: #faf9f6;
  color: #1d1c20;
}
body.theme-default.dark-mode .history-osmo-overlay-v8::before {
  background:
    radial-gradient(circle at 50% 0, rgba(30, 28, 34, 0.055), transparent 35%),
    linear-gradient(120deg, transparent 40%, rgba(30, 28, 34, 0.018) 41%, transparent 42%);
}
body.theme-default.dark-mode .history-osmo-overlay-nav-v8 {
  background: linear-gradient(#faf9f6 55%, rgba(250, 249, 246, 0));
}
body.theme-default.dark-mode .history-osmo-overlay-nav-v8 button {
  color: #222126;
}
body.theme-default.dark-mode .history-osmo-overlay-nav-v8 span,
body.theme-default.dark-mode .history-osmo-overlay-title-v8 > small,
body.theme-default.dark-mode .history-osmo-overlay-copy-v8 > div {
  color: #777278;
}
body.theme-default.dark-mode .history-osmo-overlay-copy-v8 {
  border-top-color: #d8d3d0;
}
body.theme-default.dark-mode .history-osmo-overlay-copy-v8 > div b {
  color: #5d585e;
}
body.theme-default.dark-mode .history-osmo-overlay-copy-v8 > p {
  color: #454047;
}
body.theme-default.dark-mode .history-osmo-overlay-v8 img,
body.theme-default.dark-mode .history-osmo-overlay-v8 video,
body.theme-default.dark-mode .history-osmo-overlay-v8 canvas {
  filter: none;
}


/* ============================================================
   lope v0.3.207 — admin feedback / bug report entry
   v0.3.277 — "HTML로 내보내기" 버튼을 피드백 버튼 바로 위에 추가했는데, 피드백 탭에만
   margin-top:auto(레일 맨 아래로 밀기)가 걸려 있어서 내보내기 버튼은 그냥 일반 탭
   자리(맨 위 그룹)에 남고 피드백만 훌쩍 아래로 떨어져 둘 사이에 큰 빈 공간이
   생겼습니다(사용자 스크린샷으로 발견). margin-top:auto를 내보내기 버튼 쪽으로
   옮겨서 — 바닥으로 미는 건 "그 그룹의 첫 번째 요소"만 있으면 되고, 뒤따르는
   피드백 버튼은 자연스럽게 바로 밑에 붙습니다. 구분선(border-top-color)도 이제
   "일반 탭 그룹"과 "내보내기+피드백 그룹" 사이의 경계이므로 내보내기 쪽으로 같이
   옮겼습니다.
   ============================================================ */
@media (min-width: 821px) {
  .drawer-icon-rail [data-html-export-open] {
    margin-top: auto;
    flex: 0 0 auto;
    border-top-color: #34343a;
  }
}
.editor-drawer.collapsed [data-html-export-open] {
  margin-top: auto;
  flex: 0 0 auto;
  border-top-color: #34343a;
}
.drawer-feedback-tab::before {
  content: "";
  position: absolute;
  left: 5px;
  right: 5px;
  top: -8px;
  height: 1px;
  background: #2d2d33;
}
.feedback-report-modal {
  padding: 2px 1px 0;
}
.feedback-report-kicker {
  display: block;
  margin-bottom: 6px;
  color: #9a9698;
  font-size: 8px;
  font-weight: 800;
  letter-spacing: .16em;
}
.feedback-report-modal h2 {
  margin-bottom: 18px;
}
.feedback-report-types {
  margin-bottom: 14px;
  padding: 12px 13px;
  border: 1px solid #e5e1df;
  border-radius: 12px;
  background: #faf9f8;
}
.feedback-report-types > span {
  display: flex;
  align-items: baseline;
  gap: 7px;
  margin-bottom: 10px;
  color: #393538;
  font-size: 10px;
  font-weight: 700;
}
.feedback-report-types > span small {
  color: #a09a9d;
  font-size: 8px;
  font-weight: 500;
}
.feedback-report-types .modal-check-group {
  gap: 7px;
}
.feedback-report-types .modal-check {
  margin: 0;
  padding: 7px 10px;
  border: 1px solid #ddd8d6;
  border-radius: 999px;
  background: #fff;
  color: #4a4548;
  cursor: pointer;
}
.feedback-report-copy {
  margin: 0 0 14px;
  color: #716b6e;
  font-size: 10px;
  line-height: 1.7;
}
/* v0.3.281 — "HTML로 내보내기" 안내문 가독성. 긴 줄글 두 덩어리 대신 짧은 리드
   문장 + 목록으로 나누고, 주의사항은 색이 있는 박스로 눈에 띄게 분리했습니다. */
.lope-export-points {
  margin: 0 0 14px;
  padding-left: 18px;
  display: flex;
  flex-direction: column;
  gap: 4px;
  color: #716b6e;
  font-size: 11px;
  line-height: 1.7;
}
.lope-export-warn {
  margin-bottom: 14px;
  padding: 12px 13px;
  border: 1px solid #f1d9d3;
  border-radius: 12px;
  background: #fdf6f4;
}
.lope-export-warn > b {
  display: block;
  margin-bottom: 6px;
  color: #b25a4a;
  font-size: 10px;
  font-weight: 800;
  letter-spacing: 0.04em;
}
.lope-export-warn ul {
  margin: 0;
  padding-left: 16px;
  display: flex;
  flex-direction: column;
  gap: 4px;
  color: #8a5f55;
  font-size: 11px;
  line-height: 1.7;
}
.lope-export-warn b {
  color: #96473c;
}
.feedback-report-field textarea {
  min-height: 150px;
  resize: vertical;
}
.drawer-feedback-tab {
  position: relative;
}

.feedback-report-status {
  margin: 8px 0 0;
  padding: 8px 10px;
  border-radius: 9px;
  background: #f3f1f0;
  color: #817a7e;
  font-size: 9px;
  line-height: 1.5;
}
.feedback-report-status[hidden] {
  display: none;
}


/* ============================================================
   lope v0.3.219 — DEFAULT SKIN UNIFIED COLOR SYSTEM
   One semantic palette is shared by every default-skin page.
   Individual pages no longer own their own canvas/surface/text colors.
   Custom world background image/color remains an explicit exception.
   ============================================================ */
.site.theme-default {
  --ui-page-bg: #faf9f6;
  --ui-surface: #ffffff;
  --ui-surface-soft: #f5f3f1;
  --ui-input-bg: #ffffff;
  --ui-text: #211f23;
  --ui-text-muted: #797278;
  --ui-text-faint: #9a9298;
  --ui-emphasis: var(--accent, #9f7d86);
  --ui-line: #ddd7d3;
  --ui-line-soft: #ebe6e3;

  --ink: var(--ui-text);
  --paper: var(--ui-page-bg);
  --paper2: var(--ui-surface-soft);
  --muted: var(--ui-text-muted);
  --line: var(--ui-line);

  color: var(--ui-text);
  background: var(--ui-page-bg) !important;
}

.site.theme-default.dark-mode {
  /* all page canvases use exactly this one accent-tinted dark gray */
  --ui-page-bg: color-mix(in srgb, var(--accent, #9f7d86) 8%, #111115);
  --ui-surface: color-mix(in srgb, var(--accent, #9f7d86) 5%, #1b1a1e);
  --ui-surface-soft: color-mix(in srgb, var(--accent, #9f7d86) 5%, #232126);
  --ui-input-bg: color-mix(in srgb, var(--accent, #9f7d86) 4%, #17161a);
  --ui-text: #f2eff1;
  --ui-text-muted: #aaa3a9;
  --ui-text-faint: #7e777d;
  --ui-emphasis: var(--accent, #b99aa3);
  --ui-line: rgba(255,255,255,.14);
  --ui-line-soft: rgba(255,255,255,.08);

  --ink: var(--ui-text);
  --paper: var(--ui-page-bg);
  --paper2: var(--ui-surface);
  --muted: var(--ui-text-muted);
  --line: var(--ui-line);

  color: var(--ui-text);
  background: var(--ui-page-bg) !important;
}

body.theme-default {
  background: #fff;
  color: #211f23;
}
body.theme-default.dark-mode {
  background: color-mix(in srgb, var(--accent, #9f7d86) 8%, #111115);
  color: #f2eff1;
}
.site.theme-default .site-view {
  background: var(--ui-page-bg) !important;
  color: var(--ui-text);
  filter: none;
}
.site.theme-default.dark-mode .site-topbar,
.site.theme-default.dark-mode .site-bottom-dock,
.site.theme-default.dark-mode .edit-hint {
  filter: none;
}
.site.theme-default.dark-mode .site-view img:not(.editor-drawer *),
.site.theme-default.dark-mode .site-view video:not(.editor-drawer *),
.site.theme-default.dark-mode .site-view canvas:not(.editor-drawer *) {
  filter: none;
}

/* Every actual page root rendered by app.js shares one canvas. */
.site.theme-default .site-view > :where(
  .home-page,
  .roster-page,
  .profile-page-v4,
  .pair-page-v4,
  .trio-page,
  .gallery-page,
  .diagram-page,
  .dialogue-page,
  .story-page-v5,
  .history-osmo-page-v8,
  .tales-page,
  .calendar-page,
  .shared-calendar-poll-page,
  .owner-calendar-page,
  .dday-page,
  .checklist-page,
  .trpg-page,
  .similar-page,
  .music-page,
  .music-record-page,
  .owner-page,
  .guestbook-page,
  .tag-archive-page,
  .sns-page,
  .sns-office-page,
  .custom-html-page,
  .placeholder-page,
  .secret-page,
  .tab-lock-page
) {
  background: var(--ui-page-bg) !important;
  color: var(--ui-text);
}

/* Main and timeline no longer own separate colored/gradient canvases. */
.site.theme-default .home-page:not(.world-au-school),
.site.theme-default .story-page-v5,
.site.theme-default.dark-mode .home-page:not(.world-au-school),
.site.theme-default.dark-mode .story-page-v5 {
  background: var(--ui-page-bg) !important;
}
.site.theme-default .story-page-v5::after,
.site.theme-default.dark-mode .story-page-v5::after {
  box-shadow: none;
}

/* Shared user-facing surfaces. Character/accent color stays in borders/markers, not fill. */
.site.theme-default .site-view :where(
  .compare-card,
  .profile-note-sheet,
  .relation-profile-card,
  .history-card-v5,
  .tab-lock-card,
  .dday-card,
  .profile-summary-card,
  .history-gallery-card-v7,
  .trpg-log-card,
  .friend-banner-card,
  .tag-index-card,
  .tag-story-card,
  .tag-link-card,
  .music-lyrics-panel,
  .similar-list-card,
  .similar-outfit-card,
  .checklist-list-card,
  .checklist-card-members > span,
  .checklist-tendency-card,
  .trio-relation-card,
  .tale-list-card,
  .tale-text-card,
  .tale-dialogue-card,
  .tale-image-card,
  .profile-box-preset article,
  .sns-account-card,
  .sns-meta-card,
  .sns-account-strip,
  .sns-feed-panel,
  .sns-thread-card,
  .guestbook-compose,
  .guestbook-entry,
  .guestbook-reply,
  .day-card,
  .tag-link-card,
  .log-card,
  .char-card,
  .pair-card,
  .film-frame
) {
  background: var(--ui-surface) !important;
  color: var(--ui-text);
  border-color: var(--ui-line) !important;
}
.site.theme-default .site-view :where(
  .checklist-tendency-card > p,
  .tale-list-card > figure,
  .tale-image-card img,
  .guestbook-empty
) {
  background: var(--ui-surface-soft) !important;
  color: var(--ui-text-muted);
  border-color: var(--ui-line-soft) !important;
}

/* Forms are also semantic-token based instead of page-specific grays. */
.site.theme-default .site-view :where(input, textarea, select):not(.editor-drawer *) {
  background-color: var(--ui-input-bg) !important;
  color: var(--ui-text) !important;
  border-color: var(--ui-line) !important;
}
.site.theme-default .site-view :where(input, textarea)::placeholder {
  color: var(--ui-text-faint) !important;
}

/* Common text roles. Page-specific hardcoded neutral colors no longer diverge by page. */
.site.theme-default .site-view :where(.page-title, h1, h2, h3, h4, h5, h6) {
  color: var(--ui-text);
}
.site.theme-default .site-view :where(.page-eyebrow, small, time) {
  color: var(--ui-text-muted);
}
.site.theme-default .site-view :where(a) {
  border-color: var(--ui-line-soft);
}

/* Timeline filter keeps one neutral surface; selected state uses the semantic emphasis. */
.site.theme-default .story-page-v5 .history-filter-v6 button {
  background: var(--ui-surface) !important;
  color: var(--ui-text-muted) !important;
  border-color: var(--ui-line) !important;
}
.site.theme-default .story-page-v5 .history-filter-v6 button:hover,
.site.theme-default .story-page-v5 .history-filter-v6 button.on {
  background: var(--ui-emphasis) !important;
  color: #fff !important;
  border-color: var(--ui-emphasis) !important;
}

/* Timeline detail is intentionally the ONLY mode-opposite canvas. */
body.theme-default:not(.dark-mode) .history-osmo-overlay-v8 {
  filter: none;
  background: color-mix(in srgb, var(--accent, #9f7d86) 8%, #111115);
  color: #f2eff1;
}
body.theme-default.dark-mode .history-osmo-overlay-v8 {
  filter: none;
  background: #fff;
  color: #211f23;
}
body.theme-default.dark-mode .history-osmo-overlay-nav-v8 {
  background: linear-gradient(#fff 55%, rgba(255,255,255,0));
}
body.theme-default.dark-mode .history-osmo-overlay-v8 img,
body.theme-default.dark-mode .history-osmo-overlay-v8 video,
body.theme-default.dark-mode .history-osmo-overlay-v8 canvas,
body.theme-default:not(.dark-mode) .history-osmo-overlay-v8 img,
body.theme-default:not(.dark-mode) .history-osmo-overlay-v8 video,
body.theme-default:not(.dark-mode) .history-osmo-overlay-v8 canvas {
  filter: none;
}

/* Explicit user background settings always win over the unified defaults. */
.site.theme-default:not(.dark-mode).world-bg-override {
  --ui-page-bg: var(--world-bg);
}
.site.theme-default.world-bg-override .site-view,
.site.theme-default.world-bg-override .site-view > :not(.world-bg-image):not(.easter-hotspot):not(.area-select-hint):not(.area-select-box) {
  background: var(--ui-page-bg) !important;
}
.site.theme-default.has-world-bg-image .site-view {
  background: transparent !important;
}
body .site.theme-default.has-world-bg-image .site-view > :not(.world-bg-image):not(.easter-hotspot):not(.area-select-hint):not(.area-select-box) {
  background-color: transparent !important;
  background-image: none !important;
}


/* ============================================================
   lope v0.3.219 — COMPLETE DEFAULT DARK PALETTE
   Default skin dark mode no longer relies on inversion or only a canvas swap.
   All neutral foreground/surface/border colors used by user-facing pages are
   remapped to the shared semantic palette below. Character/accent colors stay.
   ============================================================ */
.site.theme-default.dark-mode {
  --ui-page-bg: color-mix(in srgb, var(--accent, #9f7d86) 8%, #111115);
  --ui-surface: color-mix(in srgb, var(--accent, #9f7d86) 5%, #1b1a1e);
  --ui-surface-soft: color-mix(in srgb, var(--accent, #9f7d86) 5%, #232126);
  --ui-input-bg: color-mix(in srgb, var(--accent, #9f7d86) 4%, #17161a);
  --ui-text: #f2eff1;
  --ui-text-muted: #aaa3a9;
  --ui-text-faint: #756f74;
  --ui-emphasis: var(--accent, #b99aa3);
  --ui-line: rgba(255,255,255,.14);
  --ui-line-soft: rgba(255,255,255,.08);
}

/* Generated semantic remap from every neutral page-specific literal. */
.site.theme-default.dark-mode .pair-desc{color:#fff;}
.site.theme-default.dark-mode .pair-date{color:#fff;}
.site.theme-default.dark-mode .profile-info{background:var(--ui-surface);}
.site.theme-default.dark-mode .profile-reading{color:var(--ui-text-muted);}
.site.theme-default.dark-mode .profile-chip{background:var(--ui-surface-soft);}
.site.theme-default.dark-mode .profile-color i{border:4px solid var(--ui-line);}
.site.theme-default.dark-mode .compare-page{background:var(--ui-surface);}
.site.theme-default.dark-mode .compare-title small{color:var(--ui-text-muted);}
.site.theme-default.dark-mode .compare-card{border:1px solid color-mix(in srgb, var(--c), var(--ui-line) 66%); background:var(--ui-surface);}
.site.theme-default.dark-mode .compare-meta{color:var(--ui-text-muted);}
.site.theme-default.dark-mode .compare-tags span{background:var(--ui-surface-soft);}
.site.theme-default.dark-mode .relation-note p{color:var(--ui-text-muted);}
.site.theme-default.dark-mode .roster-head small{color:#fff;}
.site.theme-default.dark-mode .roster-caption{background:linear-gradient(180deg, transparent, var(--ui-surface-soft) 32%);}
.site.theme-default.dark-mode .roster-caption span{color:#fff;}
.site.theme-default.dark-mode .relation-photo{background:linear-gradient(145deg, color-mix(in srgb, var(--r), var(--ui-surface-soft) 50%), #0d0d0f);}
.site.theme-default.dark-mode .relation-copy p{color:#fff;}
.site.theme-default.dark-mode .diagram-board{border:1px solid var(--ui-line); background-color:var(--ui-surface);}
.site.theme-default.dark-mode .placeholder-card small{color:var(--ui-text-muted);}
.site.theme-default.dark-mode .placeholder-card p{color:var(--ui-text-muted);}
.site.theme-default.dark-mode .relation-page .light-btn:hover,
.site.theme-default.dark-mode .relation-page .light-btn.on{background:var(--ui-surface); color:var(--ui-text);}
.site.theme-default.dark-mode .compare-profile-select{background:var(--ui-surface);}
.site.theme-default.dark-mode .hero-half.left:after{background:linear-gradient(90deg, var(--ui-surface-soft), transparent 45%, rgba(0, 0, 0, 0.05));}
.site.theme-default.dark-mode .hero-half.right:after{background:linear-gradient(-90deg, var(--ui-surface-soft), transparent 45%, rgba(0, 0, 0, 0.05));}
.site.theme-default.dark-mode .hero-tag{background:color-mix(in srgb, var(--c), var(--ui-surface-soft) 15%);}
.site.theme-default.dark-mode .profile-page-v2{background:var(--ui-surface);}
.site.theme-default.dark-mode .profile-page-v2:before{background:linear-gradient(110deg, color-mix(in srgb, var(--c), var(--ui-surface) 92%), transparent 42%),
    linear-gradient(180deg, var(--ui-surface), var(--ui-surface));}
.site.theme-default.dark-mode .profile-v2-artzone{background:linear-gradient(
    145deg,
    color-mix(in srgb, var(--c), var(--ui-surface) 84%),
    rgba(255, 255, 255, 0.22) 58%,
    rgba(0, 0, 0, 0.025)
  );}
.site.theme-default.dark-mode .profile-v2-info{background:var(--ui-surface);}
.site.theme-default.dark-mode .profile-v2-topline{color:var(--ui-text-muted);}
.site.theme-default.dark-mode .profile-v2-kor{color:var(--ui-text-muted);}
.site.theme-default.dark-mode .profile-v2-quote{background:linear-gradient(90deg, color-mix(in srgb, var(--c), var(--ui-surface) 91%), transparent);}
.site.theme-default.dark-mode .profile-v2-tags span{background:color-mix(in srgb, var(--c), var(--ui-surface) 82%); border:1px solid color-mix(in srgb, var(--c), var(--ui-line) 65%);}
.site.theme-default.dark-mode .compare-v2-page{background:var(--ui-surface);}
.site.theme-default.dark-mode .compare-v2-head small{color:var(--ui-text-muted);}
.site.theme-default.dark-mode .compare-v2-summary{background:var(--ui-surface); border:1px solid color-mix(in srgb, var(--c), var(--ui-line) 70%);}
.site.theme-default.dark-mode .compare-v2-avatar{border:5px solid color-mix(in srgb, var(--c), var(--ui-line) 56%); background:var(--ui-surface);}
.site.theme-default.dark-mode .compare-v2-summary-copy p{color:var(--ui-text-muted);}
.site.theme-default.dark-mode .compare-v2-lines i{background:var(--ui-surface);}
.site.theme-default.dark-mode .compare-v2-rel{background:var(--ui-surface);}
.site.theme-default.dark-mode .compare-v2-rel small{color:var(--ui-text-muted);}
.site.theme-default.dark-mode .compare-v2-rel p{color:var(--ui-text-muted);}
.site.theme-default.dark-mode .compare-v2-notes > div{background:var(--ui-surface);}
.site.theme-default.dark-mode .compare-v2-notes p{color:var(--ui-text-muted);}
.site.theme-default.dark-mode .profile-page-v3{background:var(--ui-surface);}
.site.theme-default.dark-mode .profile-v3-wrap{background:var(--ui-surface);}
.site.theme-default.dark-mode .outfit-rail-title{color:var(--ui-text-muted);}
.site.theme-default.dark-mode .outfit-thumb{border:1px solid var(--ui-line);}
.site.theme-default.dark-mode .outfit-thumb:hover{border-color:var(--ui-line);}
.site.theme-default.dark-mode .outfit-thumb img{background:linear-gradient(180deg, var(--ui-surface-soft), #1c1c21);}
.site.theme-default.dark-mode .outfit-thumb b{color:var(--ui-text-faint);}
.site.theme-default.dark-mode .outfit-add{border:1px dashed var(--ui-line); color:var(--ui-text-muted);}
.site.theme-default.dark-mode .profile-v3-visual{background:linear-gradient(145deg, color-mix(in srgb, var(--c), var(--ui-surface) 87%) 0%, var(--ui-surface) 58%, var(--ui-surface) 100%);}
.site.theme-default.dark-mode .profile-v3-nameblock span{color:var(--ui-text-muted);}
.site.theme-default.dark-mode .profile-v3-detail{background:var(--ui-surface);}
.site.theme-default.dark-mode .profile-v3-top small{color:var(--ui-text-muted);}
.site.theme-default.dark-mode .profile-subtabs-v3 .subtab{border:1px solid var(--ui-line); color:var(--ui-text-muted);}
.site.theme-default.dark-mode .profile-detail-tabs{border-bottom:1px solid var(--ui-line);}
.site.theme-default.dark-mode .profile-detail-tabs button{color:var(--ui-text-muted);}
.site.theme-default.dark-mode .profile-detail-tabs button.on{color:var(--ui-text);}
.site.theme-default.dark-mode .profile-v3-quote{background:linear-gradient(100deg, color-mix(in srgb, var(--c), var(--ui-surface) 91%), rgba(255, 255, 255, 0.3));}
.site.theme-default.dark-mode .profile-v3-stats small{color:var(--ui-text-muted);}
.site.theme-default.dark-mode .profile-v3-tags span{border:1px solid color-mix(in srgb, var(--c), var(--ui-line) 55%); color:var(--ui-text); background:var(--ui-surface);}
.site.theme-default.dark-mode .profile-v3-content .v2-mini-info,
.site.theme-default.dark-mode .profile-v3-content .v2-about,
.site.theme-default.dark-mode .profile-v3-content .v2-note,
.site.theme-default.dark-mode .profile-v3-content .v2-section-title,
.site.theme-default.dark-mode .profile-v3-content .v2-image-block{background:var(--ui-surface); border:1px solid var(--ui-line);}
.site.theme-default.dark-mode .profile-note-sheet{border:1px solid var(--ui-line); background:var(--ui-surface);}
.site.theme-default.dark-mode .profile-note-sheet > p{color:var(--ui-text);}
.site.theme-default.dark-mode .profile-mini-gallery figure{background:var(--ui-surface);}
.site.theme-default.dark-mode .profile-character-switch{border-top:1px solid var(--ui-line);}
.site.theme-default.dark-mode .profile-switch-tab{color:var(--ui-text-muted);}
.site.theme-default.dark-mode .profile-switch-tab.on:before{background:var(--c, var(--ui-surface));}
.site.theme-default.dark-mode .relation-compare-page{background:var(--ui-surface);}
.site.theme-default.dark-mode .relation-compare-head small{color:var(--ui-text-muted);}
.site.theme-default.dark-mode .relation-compare-head p{color:var(--ui-text-muted);}
.site.theme-default.dark-mode .relation-profile-card{border:1px solid color-mix(in srgb, var(--c), var(--ui-line) 58%); background:var(--ui-surface);}
.site.theme-default.dark-mode .relation-avatar{background:var(--ui-surface); border:5px solid color-mix(in srgb, var(--c), var(--ui-line) 56%);}
.site.theme-default.dark-mode .relation-card-copy > span{color:var(--ui-text-muted);}
.site.theme-default.dark-mode .relation-lines i{background:var(--ui-surface);}
.site.theme-default.dark-mode .relation-direction-grid > div{border:1px solid var(--ui-line); background:var(--ui-surface);}
.site.theme-default.dark-mode .relation-direction-grid p{color:var(--ui-text);}
.site.theme-default.dark-mode .relation-content-tabs button{color:var(--ui-text-muted);}
.site.theme-default.dark-mode .relation-content-tabs button.on{color:var(--ui-text);}
.site.theme-default.dark-mode .relation-content-tabs button.on:after{background:var(--ui-surface-soft);}
.site.theme-default.dark-mode .relation-gallery-grid figure{border:1px solid var(--ui-line); background:var(--ui-surface);}
.site.theme-default.dark-mode .relation-note-long{border:1px solid var(--ui-line); background:var(--ui-surface);}
.site.theme-default.dark-mode .relation-note-long > small{color:var(--ui-text-muted);}
.site.theme-default.dark-mode .relation-note-long > p{color:var(--ui-text-muted);}
.site.theme-default.dark-mode .relation-note-pair > div{background:var(--ui-surface);}
.site.theme-default.dark-mode .timeline-v3-page{color:var(--ui-text-faint);}
.site.theme-default.dark-mode .timeline-v3-head small{color:var(--ui-text-muted);}
.site.theme-default.dark-mode .timeline-v3-head p{color:var(--ui-text-muted);}
.site.theme-default.dark-mode .timeline-v3-filter button{border:1px solid var(--ui-line); color:var(--ui-text-muted);}
.site.theme-default.dark-mode .timeline-v3-filter button.on{background:var(--ui-surface); border-color:var(--ui-line);}
.site.theme-default.dark-mode .timeline-v3-line:before{background:linear-gradient(var(--ui-surface-soft), var(--ui-surface-soft) 50%, var(--ui-surface-soft));}
.site.theme-default.dark-mode .timeline-v3-dot{background:var(--ui-surface);}
.site.theme-default.dark-mode .timeline-v3-card{border-top:1px solid var(--ui-line);}
.site.theme-default.dark-mode .timeline-v3-card small{color:var(--ui-text-muted);}
.site.theme-default.dark-mode .timeline-v3-card time{color:var(--ui-text-muted);}
.site.theme-default.dark-mode .timeline-v3-card p{color:var(--ui-text-muted);}
.site.theme-default.dark-mode .timeline-v3-tag{border:1px solid var(--ui-line); color:var(--ui-text-muted);}
.site.theme-default.dark-mode .profile-v4-wrap{border:1px solid var(--ui-line); background:var(--ui-surface);}
.site.theme-default.dark-mode .profile-v4-visual{background:linear-gradient(145deg, color-mix(in srgb, var(--c), var(--ui-surface) 89%), var(--ui-surface) 58%, var(--ui-surface));}
.site.theme-default.dark-mode .profile-v4-visual:after{background:var(--ui-surface);}
.site.theme-default.dark-mode .profile-v4-word{color:var(--ui-text-muted);}
.site.theme-default.dark-mode .profile-v4-name span{color:var(--ui-text-muted);}
.site.theme-default.dark-mode .profile-v4-detail{background:var(--ui-surface);}
.site.theme-default.dark-mode .profile-v4-detail-head{border-bottom:1px solid var(--ui-line);}
.site.theme-default.dark-mode .profile-v4-detail-head small{color:var(--ui-text-muted);}
.site.theme-default.dark-mode .profile-v4-tabs{border-bottom:1px solid var(--ui-line);}
.site.theme-default.dark-mode .profile-v4-tabs button{color:var(--ui-text-muted);}
.site.theme-default.dark-mode .profile-v4-tabs button.on{color:var(--ui-text);}
.site.theme-default.dark-mode .profile-story-lead{border-bottom:1px solid var(--ui-line);}
.site.theme-default.dark-mode .profile-story-lead p{color:var(--ui-text-muted);}
.site.theme-default.dark-mode .profile-fact-sheet{border-top:1px solid var(--ui-line);}
.site.theme-default.dark-mode .profile-fact-sheet > div{border-bottom:1px solid var(--ui-line);}
.site.theme-default.dark-mode .profile-fact-sheet.cols-2 > div:nth-child(even){border-left:1px solid var(--ui-line);}
.site.theme-default.dark-mode .profile-fact-sheet.cols-3 > div:not(:nth-child(3n + 1)){border-left:1px solid var(--ui-line);}
.site.theme-default.dark-mode .profile-fact-sheet small{color:var(--ui-text-muted);}
.site.theme-default.dark-mode .profile-fact-sheet span{color:var(--ui-text);}
.site.theme-default.dark-mode .profile-meter-row{border-bottom:1px solid var(--ui-line);}
.site.theme-default.dark-mode .profile-meter-dots i{border:1px solid color-mix(in srgb, var(--c), var(--ui-line) 55%); background:var(--ui-surface);}
.site.theme-default.dark-mode .profile-meter-sheet.meter-radar header h3{color:var(--ui-text);}
.site.theme-default.dark-mode .profile-meter-sheet.meter-radar .line{stroke:color-mix(in srgb, var(--c) 82%, var(--ui-line) 18%);}
.site.theme-default.dark-mode .profile-meter-sheet.meter-radar .nodes circle{fill:color-mix(in srgb, var(--c) 72%, var(--ui-text-faint) 28%);}
.site.theme-default.dark-mode .profile-radar-label strong{color:var(--ui-text);}
.site.theme-default.dark-mode .profile-radar-label small{color:var(--ui-text-muted);}
.site.theme-default.dark-mode .profile-meter-row span{color:var(--ui-text-muted);}
.site.theme-default.dark-mode .profile-essay{border-bottom:1px solid var(--ui-line);}
.site.theme-default.dark-mode .profile-essay p{color:var(--ui-text-muted);}
.site.theme-default.dark-mode .profile-voice-list blockquote{border-bottom:1px solid var(--ui-line);}
.site.theme-default.dark-mode .profile-voice-list blockquote span{color:var(--ui-text);}
.site.theme-default.dark-mode .profile-palette-block{border-bottom:1px solid var(--ui-line);}
.site.theme-default.dark-mode .profile-palette-block > small{color:var(--ui-text-muted);}
.site.theme-default.dark-mode .profile-palette-block i{border:1px solid var(--ui-line);}
.site.theme-default.dark-mode .profile-palette-block em{color:var(--ui-text-muted);}
.site.theme-default.dark-mode .profile-gallery-v4 figure{background:var(--ui-surface); border:1px solid var(--ui-line);}
.site.theme-default.dark-mode .profile-gallery-v4 figcaption{background:var(--ui-surface-soft);}
.site.theme-default.dark-mode .pair-page-v4{background:linear-gradient(
    90deg,
    color-mix(in srgb, var(--a), var(--ui-surface) 95%),
    var(--ui-surface) 28%,
    var(--ui-surface) 72%,
    color-mix(in srgb, var(--b), var(--ui-surface) 95%)
  );}
.site.theme-default.dark-mode .pair-page-label{color:var(--ui-text-muted);}
.site.theme-default.dark-mode .pair-info-v4{background:var(--ui-surface); border:1px solid color-mix(in srgb, var(--c), var(--ui-line) 68%);}
.site.theme-default.dark-mode .pair-info-avatar{background:var(--ui-surface); border:5px solid color-mix(in srgb, var(--c), var(--ui-line) 55%);}
.site.theme-default.dark-mode .pair-info-head small{color:var(--ui-text-muted);}
.site.theme-default.dark-mode .pair-info-head span{color:var(--ui-text-muted);}
.site.theme-default.dark-mode .pair-info-stats{border-top:1px solid var(--ui-line); border-bottom:1px solid var(--ui-line);}
.site.theme-default.dark-mode .pair-info-stats > div + div{border-left:1px solid var(--ui-line);}
.site.theme-default.dark-mode .pair-info-stats small{color:var(--ui-text-muted);}
.site.theme-default.dark-mode .pair-info-colors i{background:var(--ui-surface);}
.site.theme-default.dark-mode .pair-direction-v4{background:var(--ui-surface); border:1px solid var(--ui-line);}
.site.theme-default.dark-mode .pair-relation-story{border:1px solid var(--ui-line); background:linear-gradient(115deg, color-mix(in srgb, var(--a), var(--ui-surface) 92%), var(--ui-surface) 48%, color-mix(in srgb, var(--b), var(--ui-surface) 92%));}
.site.theme-default.dark-mode .pair-relation-story > header h2{color:var(--ui-text);}
.site.theme-default.dark-mode .pair-relation-story > header p{color:var(--ui-text-muted);}
.site.theme-default.dark-mode .pair-direction-view-head h3{color:var(--ui-text);}
.site.theme-default.dark-mode .pair-direction-view-head > span{background:color-mix(in srgb, var(--c), var(--ui-surface) 83%);}
.site.theme-default.dark-mode .pair-direction-v4 p{color:var(--ui-text);}
.site.theme-default.dark-mode .pair-direction-v4 li{border:1px solid color-mix(in srgb, var(--c), var(--ui-line) 60%); color:var(--ui-text-muted);}
.site.theme-default.dark-mode .pair-center-title > i{background:var(--ui-surface);}
.site.theme-default.dark-mode .pair-center-title small{color:var(--ui-text-muted);}
.site.theme-default.dark-mode .pair-content-tabs-v4 button{color:var(--ui-text-muted);}
.site.theme-default.dark-mode .pair-content-tabs-v4 button.on{color:var(--ui-text);}
.site.theme-default.dark-mode .pair-content-tabs-v4 button.on:after{background:var(--ui-surface-soft);}
.site.theme-default.dark-mode .pair-moodboard-v4 figure{border:1px solid var(--ui-line); background:var(--ui-surface);}
.site.theme-default.dark-mode .pair-note-v4{background:var(--ui-surface); border:1px solid var(--ui-line);}
.site.theme-default.dark-mode .pair-note-v4 > small{color:var(--ui-text-muted);}
.site.theme-default.dark-mode .pair-note-v4 blockquote{color:var(--ui-text);}
.site.theme-default.dark-mode .pair-note-v4 > p{color:var(--ui-text-muted);}
.site.theme-default.dark-mode .pair-calls{border-top:1px solid var(--ui-line); color:var(--ui-text-muted);}
.site.theme-default.dark-mode .story-page-v4{color:var(--ui-text-faint);}
.site.theme-default.dark-mode .story-side-v4 > small{color:var(--ui-text-muted);}
.site.theme-default.dark-mode .story-side-v4 p{color:var(--ui-text-muted);}
.site.theme-default.dark-mode .story-legend-v4 span{color:var(--ui-text-muted);}
.site.theme-default.dark-mode .story-list-v4:before{background:linear-gradient(#39363f, var(--ui-surface-soft) 20%, var(--ui-surface-soft) 80%, #29272e);}
.site.theme-default.dark-mode .story-marker-v4 i{background:var(--ui-surface);}
.site.theme-default.dark-mode .story-tag-v4{color:var(--ui-text-muted);}
.site.theme-default.dark-mode .story-page-v5{color:var(--ui-text-faint);}
.site.theme-default.dark-mode .history-light-v5{background:var(--ui-surface);}
.site.theme-default.dark-mode .history-era-v5{background:var(--ui-surface); color:var(--ui-text);}
.site.theme-default.dark-mode .history-era-v5 i{background:var(--ui-surface);}
.site.theme-default.dark-mode .history-era-v5 span:last-child{color:var(--ui-text-muted);}
.site.theme-default.dark-mode .history-track-v5{background:linear-gradient(
    to bottom,
    var(--ui-surface),
    var(--ui-surface) 86%,
    rgba(240, 239, 235, 0)
  );}
.site.theme-default.dark-mode .history-event-v5:before{background:var(--ui-surface);}
.site.theme-default.dark-mode .history-axis-v5 i{background:var(--ui-surface);}
.site.theme-default.dark-mode .history-card-v5{background:var(--ui-surface); color:var(--ui-text);}
.site.theme-default.dark-mode .history-card-v5 header span{color:var(--ui-text-muted);}
.site.theme-default.dark-mode .history-card-v5 header em{color:var(--ui-text-muted);}
.site.theme-default.dark-mode .history-card-v5 h2{color:var(--ui-text);}
.site.theme-default.dark-mode .history-card-v5 p{color:var(--ui-text-muted);}
.site.theme-default.dark-mode .history-card-v5 footer{border-top:1px solid var(--ui-line); color:var(--ui-text-muted);}
.site.theme-default.dark-mode .history-card-v5 footer b{color:var(--ui-text-faint);}
.site.theme-default.dark-mode .history-lock-icon{border:1px solid var(--ui-line); color:var(--ui-text-muted);}
.site.theme-default.dark-mode .history-lock-v5 > p{color:var(--ui-text-muted);}
.site.theme-default.dark-mode .history-unlock-v5{border:1px solid var(--ui-line);}
.site.theme-default.dark-mode .history-unlock-v5 small{color:var(--ui-text-muted);}
.site.theme-default.dark-mode .history-unlock-v5 b{color:var(--ui-text);}
.site.theme-default.dark-mode .tab-lock-card{background:var(--ui-surface);}
.site.theme-default.dark-mode .tab-lock-icon{border:1px solid color-mix(in srgb, var(--accent) 40%, var(--ui-line));}
.site.theme-default.dark-mode .tab-lock-card > small{color:var(--ui-text-muted);}
.site.theme-default.dark-mode .tab-lock-card > p{color:var(--ui-text-muted);}
.site.theme-default.dark-mode .tab-lock-form input{background:var(--ui-surface);}
.site.theme-default.dark-mode .tab-lock-back{color:var(--ui-text-muted);}
.site.theme-default.dark-mode .history-filter-v6 button{color:#fff;}
.site.theme-default.dark-mode .history-filter-v6 button:hover,
.site.theme-default.dark-mode .history-filter-v6 button.on{background:var(--ui-surface); border-color:var(--ui-line);}
.site.theme-default.dark-mode .history-filter-v6 button i{background:var(--c, var(--ui-surface-soft));}
.site.theme-default.dark-mode .timeline-people > span{border:1px solid var(--ui-line); background:var(--ui-surface); color:var(--ui-text-muted);}
.site.theme-default.dark-mode .timeline-people > span i{background:var(--c, var(--ui-surface-soft));}
.site.theme-default.dark-mode .history-empty-v6{color:var(--ui-text-faint);}
.site.theme-default.dark-mode .profile-timeline-v1 > header{border-bottom:1px solid var(--ui-line);}
.site.theme-default.dark-mode .profile-timeline-v1 > header small,
.site.theme-default.dark-mode .profile-timeline-empty small{color:var(--ui-text-muted);}
.site.theme-default.dark-mode .profile-timeline-full{color:var(--ui-text-muted);}
.site.theme-default.dark-mode .profile-timeline-list article{border-bottom:1px solid var(--ui-line);}
.site.theme-default.dark-mode .profile-timeline-index{color:color-mix(in srgb, var(--c) 55%, var(--ui-text-muted));}
.site.theme-default.dark-mode .profile-timeline-copy > small{color:var(--ui-text-muted);}
.site.theme-default.dark-mode .profile-timeline-copy p{color:var(--ui-text-muted);}
.site.theme-default.dark-mode .profile-timeline-empty p{color:var(--ui-text-muted);}
.site.theme-default.dark-mode .timeline-member-picker label{border:1px solid var(--ui-line); background:var(--ui-surface);}
.site.theme-default.dark-mode .timeline-member-picker label b{color:var(--ui-text);}
.site.theme-default.dark-mode .dday-page{color:var(--ui-text);}
.site.theme-default.dark-mode .dday-page-head small{color:var(--ui-text-muted);}
.site.theme-default.dark-mode .dday-page-head p{color:var(--ui-text-muted);}
.site.theme-default.dark-mode .dday-card{background:var(--ui-surface); border:1px solid color-mix(in srgb, var(--dd) 28%, var(--ui-line));}
.site.theme-default.dark-mode .dday-copy small{color:color-mix(in srgb, var(--dd) 68%, var(--ui-text-muted));}
.site.theme-default.dark-mode .dday-copy strong{color:var(--ui-text);}
.site.theme-default.dark-mode .dday-copy p{color:var(--ui-text-muted);}
.site.theme-default.dark-mode .dday-copy em{color:var(--ui-text-muted);}
.site.theme-default.dark-mode .dday-pair-media{background:var(--ui-surface);}
.site.theme-default.dark-mode .dday-pair-media:after{background:linear-gradient(transparent, var(--ui-surface));}
.site.theme-default.dark-mode .dday-card.layout-pair .dday-cycle-hint{color:#fff;}
.site.theme-default.dark-mode .dday-card.layout-personal{background:linear-gradient(125deg, color-mix(in srgb, var(--dd) 9%, var(--ui-surface)), var(--ui-surface) 62%);}
.site.theme-default.dark-mode .dday-personal-media:after{background:linear-gradient(90deg, transparent 50%, var(--ui-surface) 96%);}
.site.theme-default.dark-mode .dday-personal-media.right:after{background:linear-gradient(-90deg, transparent 50%, var(--ui-surface) 96%);}
.site.theme-default.dark-mode .dday-card.layout-dual{background:linear-gradient(
    90deg,
    color-mix(in srgb, var(--dd) 11%, var(--ui-surface)),
    var(--ui-surface) 39% 61%,
    color-mix(in srgb, var(--dd) 9%, var(--ui-surface))
  );}
.site.theme-default.dark-mode .dday-dual-media:after{background:linear-gradient(90deg, transparent 64%, var(--ui-surface) 100%);}
.site.theme-default.dark-mode .dday-dual-media.right:after{background:linear-gradient(-90deg, transparent 64%, var(--ui-surface) 100%);}
.site.theme-default.dark-mode .dday-empty{border:1px dashed var(--ui-line); color:var(--ui-text-muted);}
.site.theme-default.dark-mode .dday-empty h2{color:var(--ui-text);}
.site.theme-default.dark-mode .home-dday-widgets .dday-card{background:var(--ui-surface); color:var(--ui-text);}
.site.theme-default.dark-mode .dday-variant-row{border:1px solid var(--ui-line); background:var(--ui-surface);}
.site.theme-default.dark-mode .dday-variant-row > b{color:var(--ui-text-muted);}
.site.theme-default.dark-mode .dday-variant-row label{color:var(--ui-text-muted);}
.site.theme-default.dark-mode .dday-variant-row input{border:1px solid var(--ui-line);}
.site.theme-default.dark-mode .profile-summary-card{border:1px solid var(--ui-line); background:linear-gradient(135deg, var(--ui-surface) 0%, var(--ui-surface) 72%);}
.site.theme-default.dark-mode .profile-summary-card p{color:var(--ui-text);}
.site.theme-default.dark-mode .history-view-switch-v7 button{color:#fff;}
.site.theme-default.dark-mode .history-view-switch-v7 button.on{background:var(--ui-surface);}
.site.theme-default.dark-mode .history-gallery-card-v7{background:var(--ui-surface); color:var(--ui-text);}
.site.theme-default.dark-mode .history-gallery-media-v7{background:linear-gradient(120deg, color-mix(in srgb, var(--ca) 72%, var(--ui-surface-soft)), color-mix(in srgb, var(--cb) 50%, var(--ui-surface-soft)));}
.site.theme-default.dark-mode .history-gallery-number-v7{color:#fff;}
.site.theme-default.dark-mode .history-gallery-copy-v7{background:var(--ui-surface);}
.site.theme-default.dark-mode .history-gallery-copy-v7 header em{color:var(--ui-text-muted);}
.site.theme-default.dark-mode .history-gallery-copy-v7 h2{color:var(--ui-text);}
.site.theme-default.dark-mode .history-gallery-copy-v7 p{color:var(--ui-text-muted);}
.site.theme-default.dark-mode .history-gallery-copy-v7 footer{color:var(--ui-text-muted);}
.site.theme-default.dark-mode .history-overlay-v7{background:var(--ui-surface); color:var(--ui-text);}
.site.theme-default.dark-mode .history-overlay-media-v7{background:linear-gradient(
    135deg,
    color-mix(in srgb, var(--ca) 78%, var(--ui-surface-soft)),
    color-mix(in srgb, var(--cb) 58%, #151719)
  );}
.site.theme-default.dark-mode .history-overlay-media-v7 span{color:#fff;}
.site.theme-default.dark-mode .history-overlay-meta-v7 em{color:var(--ui-text-muted);}
.site.theme-default.dark-mode .history-overlay-close-v7{background:var(--ui-surface); color:var(--ui-text);}
.site.theme-default.dark-mode .gallery-page{color:var(--ui-text);}
.site.theme-default.dark-mode .gallery-head small{color:var(--ui-text-muted);}
.site.theme-default.dark-mode .gallery-head p{color:var(--ui-text-muted);}
.site.theme-default.dark-mode .gallery-type-tabs button,
.site.theme-default.dark-mode .gallery-album-tabs button{border:1px solid var(--ui-line); background:var(--ui-surface); color:var(--ui-text-muted);}
.site.theme-default.dark-mode .gallery-album-tabs button.on{border-color:var(--ui-line); color:var(--ui-text); background:var(--ui-surface);}
.site.theme-default.dark-mode .gallery-item{background:var(--ui-surface);}
.site.theme-default.dark-mode .gallery-item small{color:var(--ui-text-muted);}
.site.theme-default.dark-mode .gallery-item span{color:var(--ui-text-muted);}
.site.theme-default.dark-mode .gallery-empty{color:var(--ui-text-muted); border:1px dashed var(--ui-line);}
.site.theme-default.dark-mode .gallery-reader{background:var(--ui-surface); color:var(--ui-text);}
.site.theme-default.dark-mode .gallery-editor-group{border:1px solid var(--ui-line);}
.site.theme-default.dark-mode .dialogue-page{background:linear-gradient(135deg, var(--ui-surface) 0%, var(--ui-surface) 100%); color:var(--ui-text);}
.site.theme-default.dark-mode .dialogue-empty p{color:var(--ui-text-muted);}
.site.theme-default.dark-mode .dialogue-editor-folder{border:1px solid var(--ui-line);}
.site.theme-default.dark-mode .dialogue-editor-folder-head{border:1px solid var(--ui-line);}
.site.theme-default.dark-mode .dialogue-editor-folder-head:before{border:1px solid var(--ui-line);}
.site.theme-default.dark-mode .dialogue-folder-main small{color:var(--ui-text-muted);}
.site.theme-default.dark-mode .dialogue-folder-main b{color:var(--ui-text-faint);}
.site.theme-default.dark-mode .dialogue-folder-main em{color:var(--ui-text-muted);}
.site.theme-default.dark-mode .dialogue-editor-scenes{border-left:1px solid var(--ui-line);}
.site.theme-default.dark-mode .dialogue-editor-scene{border:1px solid var(--ui-line);}
.site.theme-default.dark-mode .dialogue-editor-scene:before{border-top:1px solid var(--ui-line);}
.site.theme-default.dark-mode .dialogue-editor-scene .grow small{color:var(--ui-text-muted);}
.site.theme-default.dark-mode .dialogue-editor-scene .grow b{color:var(--ui-text-faint);}
.site.theme-default.dark-mode .dialogue-editor-scene .grow em{color:var(--ui-text-muted);}
.site.theme-default.dark-mode .dialogue-folder-empty{color:var(--ui-text-muted);}
.site.theme-default.dark-mode .profile-look-editor{border:1px solid var(--ui-line);}
.site.theme-default.dark-mode .profile-look-editor.active{border-color:var(--ui-line);}
.site.theme-default.dark-mode .profile-look-thumb{background:var(--ui-surface-soft); color:var(--ui-text-muted);}
.site.theme-default.dark-mode .profile-look-editor header small{color:var(--ui-text-muted);}
.site.theme-default.dark-mode .profile-look-editor .outfit-name-input{color:var(--ui-text-faint);}
.site.theme-default.dark-mode .history-osmo-preview-item-v8 img,
.site.theme-default.dark-mode .history-osmo-placeholder-v8{background:var(--ui-surface);}
.site.theme-default.dark-mode .history-osmo-placeholder-v8{background:linear-gradient(145deg, var(--ui-surface), var(--ui-surface)); color:var(--ui-text);}
.site.theme-default.dark-mode .history-osmo-title-item-v8 button{color:var(--ui-text-faint);}
.site.theme-default.dark-mode .history-osmo-seq-v8{color:var(--ui-text-muted);}
.site.theme-default.dark-mode .history-osmo-title-copy-v8 > small{color:var(--ui-text-muted);}
.site.theme-default.dark-mode .history-osmo-title-item-v8 button > em{color:var(--ui-text-muted);}
.site.theme-default.dark-mode .history-osmo-overlay-nav-v8 button{color:var(--ui-text-faint);}
.site.theme-default.dark-mode .history-osmo-overlay-nav-v8 span{color:var(--ui-text-muted);}
.site.theme-default.dark-mode .history-osmo-overlay-title-v8 > small{color:var(--ui-text-muted);}
.site.theme-default.dark-mode .history-osmo-overlay-placeholder-v8{background:linear-gradient(145deg, var(--ui-surface), var(--ui-surface-soft)); color:var(--ui-text);}
.site.theme-default.dark-mode .history-osmo-overlay-copy-v8 > div{color:var(--ui-text-muted);}
.site.theme-default.dark-mode .history-osmo-overlay-copy-v8 > div b{color:var(--ui-text);}
.site.theme-default.dark-mode .history-osmo-overlay-copy-v8 > p{color:var(--ui-text-faint);}
.site.theme-default.dark-mode .dday-tune-pack{border:1px solid var(--ui-line); background:var(--ui-surface);}
.site.theme-default.dark-mode .relation-editor-card{border:1px solid var(--ui-line);}
.site.theme-default.dark-mode .hero-layer-row{border:1px solid var(--ui-line);}
.site.theme-default.dark-mode .hero-layer-row.drag-over{border-color:var(--ui-line);}
.site.theme-default.dark-mode .hero-layer-grip{color:var(--ui-text-muted);}
.site.theme-default.dark-mode .hero-layer-row .grow small{color:var(--ui-text-muted);}
.site.theme-default.dark-mode .hero-layer-depth{color:var(--ui-text-muted);}
.site.theme-default.dark-mode .hero-layer-row:first-child .hero-layer-depth{background:var(--ui-surface); color:var(--ui-text);}
.site.theme-default.dark-mode .history-map-button-v19:hover{background:var(--ui-surface);}
.site.theme-default.dark-mode .relation-map-window-v19{background:var(--ui-surface);}
.site.theme-default.dark-mode .relation-map-window-v19 > header{border-bottom:1px solid var(--ui-line);}
.site.theme-default.dark-mode .relation-map-window-v19 > header small{color:var(--ui-text-muted);}
.site.theme-default.dark-mode .relation-map-close-v19{border:1px solid var(--ui-line); background:var(--ui-surface);}
.site.theme-default.dark-mode .compare-profile-select{background-color:var(--ui-surface) !important; color:var(--ui-text) !important;}
.site.theme-default.dark-mode .hero-layer-card{border:1px solid var(--ui-line);}
.site.theme-default.dark-mode .hero-layer-card.drag-over{border-color:var(--ui-line);}
.site.theme-default.dark-mode .hero-layer-card > header{border-bottom:1px solid var(--ui-line);}
.site.theme-default.dark-mode .hero-layer-card .grow small{color:var(--ui-text-muted);}
.site.theme-default.dark-mode .relation-map-head-actions > button:not(.relation-map-close-v19){border:1px solid var(--ui-line); background:var(--ui-surface);}
.site.theme-default.dark-mode .relation-art-details{border-top:1px solid var(--ui-line);}
.site.theme-default.dark-mode .relation-art-details summary{color:var(--ui-text-muted);}
.site.theme-default.dark-mode .site.editing .profile-reaction-hotspot{border:1px dashed color-mix(in srgb, var(--c, var(--ui-line)) 72%, var(--ui-line)); background:color-mix(in srgb, var(--c, var(--ui-surface-soft)) 8%, transparent);}
.site.theme-default.dark-mode .profile-heart-toggle{border:1px solid color-mix(in srgb, var(--c, var(--ui-line)) 34%, var(--ui-line)); background:var(--ui-surface); color:var(--c, var(--ui-text-muted));}
.site.theme-default.dark-mode .profile-heart-toggle.on{background:var(--c, var(--ui-surface-soft));}
.site.theme-default.dark-mode .profile-reaction-bubble{background:var(--ui-surface); border:1px solid color-mix(in srgb, var(--c, var(--ui-line)) 28%, var(--ui-line)); color:var(--ui-text);}
.site.theme-default.dark-mode .easter-popup small,
.site.theme-default.dark-mode .secret-card small{color:var(--ui-text-muted);}
.site.theme-default.dark-mode .easter-popup button,
.site.theme-default.dark-mode .secret-back,
.site.theme-default.dark-mode .secret-card button{border:1px solid var(--ui-line); background:var(--ui-surface);}
.site.theme-default.dark-mode .secret-page{background:radial-gradient(
    circle at 50% 20%,
    color-mix(in srgb, var(--secret-accent) 14%, var(--ui-surface)),
    var(--ui-surface) 48%,
    var(--ui-surface)
  );}
.site.theme-default.dark-mode .secret-card{background:var(--ui-surface);}
.site.theme-default.dark-mode .secret-card p{color:var(--ui-text);}
.site.theme-default.dark-mode .timeline-crop-editor{border:1px solid var(--ui-line); background-color:var(--ui-surface);}
.site.theme-default.dark-mode .timeline-crop-empty{color:var(--ui-text-muted);}
.site.theme-default.dark-mode .timeline-crop-controls > label{color:var(--ui-text-faint);}
.site.theme-default.dark-mode .history-osmo-row-side-v33 > em{color:var(--ui-text-muted);}
.site.theme-default.dark-mode .owner-page{color:var(--ui-text);}
/* v0.3.323 — 오너 헤드 아래 밑줄이 라이트 모드용 검정 반투명 고정값이라 다크
   모드에서 배경과 거의 안 보였음. */
.site.theme-default.dark-mode .owner-head{border-bottom-color:var(--ui-line);}
.site.theme-default.dark-mode .owner-head small,
.site.theme-default.dark-mode .owner-banner-title small{color:var(--ui-text-muted);}
.site.theme-default.dark-mode .owner-head p{color:var(--ui-text-muted);}
.site.theme-default.dark-mode .owner-section > span{color:var(--accent, var(--ui-text-muted));}
.site.theme-default.dark-mode .owner-section p{color:var(--ui-text);}
.site.theme-default.dark-mode .owner-ng p{color:var(--ui-text);}
.site.theme-default.dark-mode .owner-banner-section{background:var(--ui-surface);}
.site.theme-default.dark-mode .owner-banner-title > p{color:var(--ui-text-muted);}
.site.theme-default.dark-mode .owner-banner-preview{background:repeating-conic-gradient(var(--ui-surface) 0 25%, var(--ui-surface) 0 50%) 50%/18px 18px; border:1px solid var(--ui-line);}
.site.theme-default.dark-mode .owner-banner-actions button,
.site.theme-default.dark-mode .owner-banner-actions a{border:1px solid var(--ui-line); background:var(--ui-surface); color:var(--ui-text);}
.site.theme-default.dark-mode .owner-banner-actions button:hover,
.site.theme-default.dark-mode .owner-banner-actions a:hover{border-color:var(--accent, var(--ui-line));}
.site.theme-default.dark-mode .owner-banner-code{background:var(--ui-surface-soft); color:var(--ui-text-faint);}
.site.theme-default.dark-mode .owner-banner-empty{border:1px dashed var(--ui-line); color:var(--ui-text-muted);}
.site.theme-default.dark-mode .owner-banner-admin-preview{background:var(--ui-surface-soft);}
.site.theme-default.dark-mode .owner-banner-admin-preview span{color:var(--ui-text-muted);}
.site.theme-default.dark-mode .profile-editor-panel-tabs button{color:var(--ui-text-muted);}
.site.theme-default.dark-mode .profile-editor-panel-tabs button:hover{color:var(--ui-text-faint);}
.site.theme-default.dark-mode .profile-editor-panel-tabs button.on{background:var(--ui-surface);}
.site.theme-default.dark-mode .profile-tab-block-editor{border:1px solid var(--ui-line); background:var(--ui-surface);}
.site.theme-default.dark-mode .profile-tab-block-editor > header{border-bottom:1px solid var(--ui-line);}
.site.theme-default.dark-mode .profile-preset-index{color:var(--ui-text-muted);}
.site.theme-default.dark-mode .profile-custom-image img{background:var(--ui-surface);}
.site.theme-default.dark-mode .profile-custom-image figcaption{color:var(--ui-text-muted);}
.site.theme-default.dark-mode .profile-block-type-trigger{color:var(--ui-text-faint);}
.site.theme-default.dark-mode .profile-block-type-trigger i{color:var(--ui-text-muted);}
.site.theme-default.dark-mode .profile-block-type-menu{color:var(--ui-text-faint);}
.site.theme-default.dark-mode .profile-block-type-menu button{color:var(--ui-text-faint);}
.site.theme-default.dark-mode .profile-block-type-menu button.on{background:var(--ui-surface); border-color:var(--ui-line);}
.site.theme-default.dark-mode .relation-editor-summary span{color:var(--ui-text-muted);}
.site.theme-default.dark-mode .relation-editor-summary p{color:var(--ui-text-faint);}
.site.theme-default.dark-mode .relation-card-override{border:1px solid var(--ui-line); background:var(--ui-surface);}
.site.theme-default.dark-mode .relation-card-override legend{color:var(--ui-text);}
.site.theme-default.dark-mode .gallery-crop-editor{border:1px solid var(--ui-line); background-color:var(--ui-surface);}
.site.theme-default.dark-mode .gallery-crop-empty{color:var(--ui-text-muted);}
.site.theme-default.dark-mode .gallery-crop-toolbar button{border:1px solid var(--ui-line); background:var(--ui-surface); color:var(--ui-text);}
.site.theme-default.dark-mode .gallery-crop-toolbar strong{color:var(--ui-text);}
.site.theme-default.dark-mode .gallery-access-tabs button{background:var(--ui-surface);}
.site.theme-default.dark-mode .gallery-access-tabs button:hover{background:var(--ui-surface);}
.site.theme-default.dark-mode .gallery-access-tabs button.on{background:var(--ui-surface-soft); border-color:var(--ui-line);}
.site.theme-default.dark-mode .gallery-badges span{background:var(--ui-surface); color:var(--ui-text);}
.site.theme-default.dark-mode .gallery-badges .private{background:var(--ui-surface-soft); color:var(--ui-text-faint);}
.site.theme-default.dark-mode .music-page,
.site.theme-default.dark-mode .trpg-page{color:var(--ui-text);}
.site.theme-default.dark-mode .music-folders > button.on,
.site.theme-default.dark-mode .trpg-nav > button.on{background:var(--ui-surface-soft);}
.site.theme-default.dark-mode .music-list{background:var(--ui-surface);}
.site.theme-default.dark-mode .music-list > header p{color:var(--ui-text-muted);}
.site.theme-default.dark-mode .music-track figure{background:var(--ui-surface);}
.site.theme-default.dark-mode .music-track figure span{color:var(--ui-text-muted);}
.site.theme-default.dark-mode .music-track-copy small{color:var(--ui-text-muted);}
.site.theme-default.dark-mode .music-track-copy p{color:var(--ui-text-muted);}
.site.theme-default.dark-mode .music-track > button{background:var(--ui-surface);}
.site.theme-default.dark-mode .music-track.playing > button{background:var(--ui-surface-soft);}
.site.theme-default.dark-mode .trpg-log{background:var(--ui-surface);}
.site.theme-default.dark-mode .trpg-log > header p{color:var(--ui-text-muted);}
.site.theme-default.dark-mode .trpg-log > header span{background:var(--ui-surface);}
.site.theme-default.dark-mode .trpg-html td,
.site.theme-default.dark-mode .trpg-html th{border:1px solid var(--ui-line);}
.site.theme-default.dark-mode .trpg-archive-head small,
.site.theme-default.dark-mode .trpg-reader-head small{color:var(--ui-text-muted);}
.site.theme-default.dark-mode .trpg-archive-head p{color:var(--ui-text-muted);}
.site.theme-default.dark-mode .trpg-log-card{background:color-mix(in srgb, var(--accent, #9f7d86) 8%, var(--ui-surface)); color:var(--ui-text);}
.site.theme-default.dark-mode .trpg-log-card:hover{border-color:color-mix(in srgb, var(--accent) 35%, var(--ui-line));}
.site.theme-default.dark-mode .trpg-log-thumb{background:var(--ui-surface);}
.site.theme-default.dark-mode .trpg-log-thumb b{color:var(--ui-text-muted);}
.site.theme-default.dark-mode .trpg-log-copy > em{color:var(--ui-text-muted);}
.site.theme-default.dark-mode .trpg-log-copy > small{color:var(--ui-text-muted);}
.site.theme-default.dark-mode .trpg-log-card time{color:var(--ui-text-muted);}
.site.theme-default.dark-mode .trpg-log-card > i{color:var(--ui-text-muted);}
.site.theme-default.dark-mode .trpg-archive-stats{color:var(--ui-text-muted);}
.site.theme-default.dark-mode .trpg-sort-row > span{color:var(--ui-text-muted);}
.site.theme-default.dark-mode .trpg-sort-row button{background:var(--ui-surface); border-color:var(--ui-line); color:var(--ui-text-muted);}
.site.theme-default.dark-mode .trpg-sort-row button.on{background:var(--accent); border-color:var(--accent); color:#fff;}
.site.theme-default.dark-mode .trpg-empty{border:1px dashed var(--ui-line); color:var(--ui-text-muted);}
.site.theme-default.dark-mode .trpg-reader-shell{background:var(--ui-surface);}
.site.theme-default.dark-mode .trpg-back{color:var(--ui-text-muted);}
.site.theme-default.dark-mode .trpg-reader-toolbar > span{color:var(--ui-text-muted);}
.site.theme-default.dark-mode .trpg-reader-head p{color:var(--ui-text-muted);}
.site.theme-default.dark-mode .trpg-reader-head > figure{background:var(--ui-surface-soft); box-shadow:inset 0 0 0 1px var(--ui-line);}
.site.theme-default.dark-mode .trpg-reader-side{border-left-color:var(--ui-line);}
.site.theme-default.dark-mode .trpg-reader-side time{color:var(--ui-text);}
.site.theme-default.dark-mode .trpg-reader-side > em{color:var(--ui-text-muted);}
.site.theme-default.dark-mode .trpg-reader-body{border-color:var(--ui-line); background:var(--ui-surface-soft);}
.site.theme-default.dark-mode .trpg-reader-body > header{border-bottom-color:var(--ui-line); background:var(--ui-surface);}
.site.theme-default.dark-mode .trpg-reader-body > header span{color:var(--ui-text-muted);}
.site.theme-default.dark-mode .trpg-html-view{background:var(--ui-surface);}
.site.theme-default.dark-mode .trpg-editor-row > img,
.site.theme-default.dark-mode .trpg-editor-row > i{background:var(--ui-surface-soft);}
.site.theme-default.dark-mode .trpg-thumb-admin img,
.site.theme-default.dark-mode .trpg-thumb-admin .empty{color:var(--ui-text-muted);}
.site.theme-default.dark-mode .trpg-paste-zone{border:1px solid var(--ui-line); color:var(--ui-text-faint);}
.site.theme-default.dark-mode .trpg-paste-zone > span:only-child{color:var(--ui-text-muted);}
.site.theme-default.dark-mode .trpg-thumb-stage{border:1px solid var(--ui-line);}
.site.theme-default.dark-mode .trpg-thumb-stage .empty{color:var(--ui-text-muted);}
.site.theme-default.dark-mode .trpg-thumb-actions small{color:var(--ui-text-muted);}
.site.theme-default.dark-mode .tale-mob-icon-pick{background:var(--ui-surface); color:var(--ui-text-muted);}
.site.theme-default.dark-mode .tale-mob-edit-row input[type="text"],
.site.theme-default.dark-mode .tale-mob-edit-row input:not([type]){background:var(--ui-surface); color:var(--ui-text);}
.site.theme-default.dark-mode .tale-mob-edit-row input[type="color"]{background:var(--ui-surface);}
.site.theme-default.dark-mode .tale-mob-edit-row button.danger{background:var(--ui-surface);}
.site.theme-default.dark-mode .tale-qa-edit-row{background:var(--ui-surface); border-color:var(--ui-line);}
.site.theme-default.dark-mode .tale-qa-edit-row input,
.site.theme-default.dark-mode .tale-qa-edit-row textarea{background:var(--ui-surface); color:var(--ui-text); border-color:var(--ui-line);}
.site.theme-default.dark-mode .tale-qa-edit-row button.danger{background:var(--ui-surface);}
.site.theme-default.dark-mode .trpg-reader-head p{color:var(--ui-text-muted) !important;}
.site.theme-default.dark-mode .trpg-html-view{background:var(--ui-surface) !important;}
.site.theme-default.dark-mode .gallery-type-tabs button,
.site.theme-default.dark-mode .gallery-access-tabs button{border:1px solid var(--ui-line) !important; background:var(--ui-surface) !important; color:var(--ui-text-muted) !important;}
.site.theme-default.dark-mode .gallery-type-tabs button:hover,
.site.theme-default.dark-mode .gallery-access-tabs button:hover{background:var(--ui-surface) !important; border-color:var(--ui-line) !important; color:var(--ui-text) !important;}
/* v0.3.323 — 위 두 규칙이 .on 여부와 상관없이 모든 버튼을 똑같이(!important) 칠해서,
   다크 모드에서는 갤러리 탭·R18·스포일러 버튼이 눌러도(선택돼도) 시각적으로
   구분이 안 갔습니다. 라이트 모드의 "선택 = 진하게 채움" 느낌을 다크 모드에서는
   반전해서(흰 배경 + 검은 글자) 다시 살립니다. */
.site.theme-default.dark-mode .gallery-type-tabs button.on,
.site.theme-default.dark-mode .gallery-access-tabs button.on{background:var(--ui-text) !important; border-color:var(--ui-text) !important; color:var(--ui-surface) !important;}
.site.theme-default.dark-mode .roster-page{color:var(--ui-text); background:linear-gradient(rgba(30, 28, 31, 0.025) 1px, transparent 1px),
    linear-gradient(90deg, rgba(30, 28, 31, 0.025) 1px, transparent 1px), var(--ui-surface);}
.site.theme-default.dark-mode .roster-head small{color:var(--ui-text-muted);}
.site.theme-default.dark-mode .roster-head h1{color:var(--ui-text);}
.site.theme-default.dark-mode .roster-head p{color:var(--ui-text-muted);}
.site.theme-default.dark-mode .roster-card{border:1px solid var(--ui-line); background:var(--ui-surface); color:var(--ui-text);}
.site.theme-default.dark-mode .roster-card:hover{border-color:color-mix(in srgb, var(--c), var(--ui-line) 46%);}
.site.theme-default.dark-mode .roster-index{color:var(--ui-text-muted); background:var(--ui-surface); border:1px solid var(--ui-line);}
.site.theme-default.dark-mode .roster-art{background:linear-gradient(180deg, color-mix(in srgb, var(--c), white 88%), var(--ui-surface));}
.site.theme-default.dark-mode .roster-card .roster-art > .art-fallback{color:color-mix(in srgb, var(--c), var(--ui-text) 40%);}
.site.theme-default.dark-mode .roster-caption small{color:color-mix(in srgb, var(--c), var(--ui-text-muted) 55%);}
.site.theme-default.dark-mode .roster-caption b{color:var(--ui-text);}
.site.theme-default.dark-mode .roster-caption strong{color:var(--ui-text-muted);}
.site.theme-default.dark-mode .roster-caption > span{color:var(--ui-text-muted);}
.site.theme-default.dark-mode .roster-tags i{color:var(--ui-text-muted); background:var(--ui-surface);}
.site.theme-default.dark-mode .roster-compare .top-pill{color:var(--ui-text); border-color:var(--ui-line); background:var(--ui-surface);}
.site.theme-default.dark-mode .owner-banner-crop-wrap{background:var(--ui-surface-soft);}
.site.theme-default.dark-mode .owner-banner-result > img{background:var(--ui-surface-soft);}
.site.theme-default.dark-mode .timeline-ref-tag{background:var(--ui-surface);}
.site.theme-default.dark-mode .timeline-ref-pop{background:var(--ui-surface-soft);}
.site.theme-default.dark-mode .timeline-ref-picker{background:var(--ui-surface);}
.site.theme-default.dark-mode .timeline-ref-picker label{background:var(--ui-surface);}
.site.theme-default.dark-mode .tag-archive-page{background:linear-gradient(180deg, color-mix(in srgb, var(--world-bg, var(--ui-surface)) 88%, var(--ui-surface)), var(--world-bg, var(--ui-surface))); color:var(--ui-text);}
.site.theme-default.dark-mode .tag-archive-head,
.site.theme-default.dark-mode .tag-detail-head{border-bottom:1px solid color-mix(in srgb, var(--accent) 18%, var(--ui-line));}
.site.theme-default.dark-mode .tag-archive-head p{color:var(--ui-text-muted);}
.site.theme-default.dark-mode .tag-archive-head > strong small,
.site.theme-default.dark-mode .tag-detail-head > span small{color:var(--ui-text-muted);}
.site.theme-default.dark-mode .tag-index-card{border:1px solid var(--ui-line); background:var(--ui-surface);}
.site.theme-default.dark-mode .tag-index-card:hover{border-color:color-mix(in srgb, var(--accent) 46%, var(--ui-line));}
.site.theme-default.dark-mode .tag-index-no{border:1px solid color-mix(in srgb, var(--accent) 25%, var(--ui-line)); background:color-mix(in srgb, var(--accent) 5%, var(--ui-surface));}
.site.theme-default.dark-mode .tag-index-copy > small{color:var(--ui-text-muted);}
.site.theme-default.dark-mode .tag-index-copy > p{color:var(--ui-text-muted);}
.site.theme-default.dark-mode .tag-link-count{color:var(--ui-text-muted);}
.site.theme-default.dark-mode .tag-index-types span,
.site.theme-default.dark-mode .tag-type-counts span{border:1px solid var(--ui-line); background:var(--ui-surface); color:var(--ui-text-muted);}
.site.theme-default.dark-mode .tag-back{color:var(--ui-text-muted);}
.site.theme-default.dark-mode .tag-story-card{border:1px solid color-mix(in srgb, var(--accent) 22%, var(--ui-line)); background:color-mix(in srgb, var(--accent) 5%, var(--ui-surface));}
.site.theme-default.dark-mode .tag-story-card p{color:var(--ui-text-muted);}
.site.theme-default.dark-mode .tag-story-card button{border:1px solid color-mix(in srgb, var(--accent) 45%, var(--ui-line)); background:var(--ui-surface);}
.site.theme-default.dark-mode .tag-link-card{border:1px solid var(--ui-line); background:var(--ui-surface);}
.site.theme-default.dark-mode .tag-link-card:hover{border-color:color-mix(in srgb, var(--accent) 45%, var(--ui-line));}
.site.theme-default.dark-mode .tag-link-thumb,
.site.theme-default.dark-mode .tag-link-glyph{background:color-mix(in srgb, var(--accent) 7%, var(--ui-surface));}
.site.theme-default.dark-mode .tag-link-copy em{color:var(--ui-text-muted);}
.site.theme-default.dark-mode .tag-empty{border:1px dashed var(--ui-line); color:var(--ui-text-muted);}
.site.theme-default.dark-mode .tag-empty b{color:var(--ui-text-muted);}
.site.theme-default.dark-mode .music-track-actions > button{background:var(--ui-surface);}
.site.theme-default.dark-mode .music-track-actions > button.on,
.site.theme-default.dark-mode .music-track.playing .music-track-actions > [data-music-play],
.site.theme-default.dark-mode .music-track.playing .music-track-actions > [data-mplay]{background:var(--ui-surface-soft); border-color:var(--ui-line);}
.site.theme-default.dark-mode .music-lyrics-panel{background:color-mix(in srgb, var(--accent, #9f7d86) 7%, var(--ui-surface)); border:1px solid color-mix(in srgb, var(--accent, #9f7d86) 14%, var(--ui-line));}
.site.theme-default.dark-mode .music-lyrics-panel header b{color:var(--ui-text-muted);}
.site.theme-default.dark-mode .music-lyrics-line,
.site.theme-default.dark-mode .music-lyrics-gap{color:var(--ui-text-muted);}
.site.theme-default.dark-mode .similar-page{background:linear-gradient(180deg, color-mix(in srgb, var(--world-bg, var(--ui-surface)) 86%, var(--ui-surface)), var(--world-bg, var(--ui-surface))); color:var(--ui-text);}
.site.theme-default.dark-mode .similar-page-head{border-bottom:1px solid color-mix(in srgb, var(--accent) 16%, var(--ui-line));}
.site.theme-default.dark-mode .similar-page-head p,
.site.theme-default.dark-mode .similar-detail-head p{color:var(--ui-text-muted);}
.site.theme-default.dark-mode .similar-head-mark:before,
.site.theme-default.dark-mode .similar-head-mark:after{border:1px solid color-mix(in srgb, var(--accent) 42%, var(--ui-line)); background:color-mix(in srgb, var(--accent) 5%, var(--ui-surface));}
.site.theme-default.dark-mode .similar-filter button{border:1px solid color-mix(in srgb, var(--accent) 15%, var(--ui-line)); background:var(--ui-surface); color:var(--ui-text-muted);}
.site.theme-default.dark-mode .similar-filter button small{background:var(--ui-surface); color:var(--ui-text-muted);}
.site.theme-default.dark-mode .similar-filter button:hover{border-color:color-mix(in srgb, var(--accent) 40%, var(--ui-line));}
.site.theme-default.dark-mode .similar-list-card{border:1px solid color-mix(in srgb, var(--accent) 12%, var(--ui-line)); background:var(--ui-surface);}
.site.theme-default.dark-mode .similar-list-card:hover{border-color:color-mix(in srgb, var(--accent) 40%, var(--ui-line));}
.site.theme-default.dark-mode .similar-list-visual{background:linear-gradient(
    110deg,
    color-mix(in srgb, var(--sa) 9%, var(--ui-surface)) 0 49.7%,
    color-mix(in srgb, var(--sb) 9%, var(--ui-surface)) 50.3% 100%
  ); border-right:1px solid color-mix(in srgb, var(--accent) 10%, var(--ui-line));}
.site.theme-default.dark-mode .similar-list-visual:after{background:linear-gradient(transparent, color-mix(in srgb, var(--accent) 18%, var(--ui-surface)), transparent);}
.site.theme-default.dark-mode .similar-list-visual figure > span{color:var(--ui-text-muted);}
.site.theme-default.dark-mode .similar-list-tags span,
.site.theme-default.dark-mode .similar-detail-tags span{border:1px solid color-mix(in srgb, var(--accent) 18%, var(--ui-line)); background:color-mix(in srgb, var(--accent) 5%, var(--ui-surface)); color:color-mix(in srgb, var(--accent) 76%, var(--ui-text));}
.site.theme-default.dark-mode .similar-list-copy p{color:var(--ui-text-muted);}
.site.theme-default.dark-mode .similar-list-copy em{border-top:1px solid var(--ui-line); color:var(--ui-text-muted);}
.site.theme-default.dark-mode .similar-empty{border:1px dashed color-mix(in srgb, var(--accent) 25%, var(--ui-line));}
.site.theme-default.dark-mode .similar-empty p{color:var(--ui-text-muted);}
.site.theme-default.dark-mode .similar-art-empty{color:var(--ui-text-muted);}
.site.theme-default.dark-mode .similar-back{color:var(--ui-text-muted);}
.site.theme-default.dark-mode .similar-detail-head{border-bottom:1px solid color-mix(in srgb, var(--accent) 16%, var(--ui-line));}
.site.theme-default.dark-mode .similar-outfit-card{border:1px solid color-mix(in srgb, var(--look-c) 22%, var(--ui-line)); background:linear-gradient(180deg, color-mix(in srgb, var(--look-c) 6%, var(--ui-surface)), var(--ui-surface));}
.site.theme-default.dark-mode .similar-outfit-card header h2{color:var(--ui-text);}
.site.theme-default.dark-mode .similar-outfit-card header span{color:var(--ui-text-muted);}
.site.theme-default.dark-mode .similar-outfit-art{border:1px solid color-mix(in srgb, var(--look-c) 12%, var(--ui-line)); background:var(--ui-surface);}
.site.theme-default.dark-mode .similar-outfit-card > p{color:var(--ui-text-muted);}
.site.theme-default.dark-mode .similar-pair-section{border:1px solid color-mix(in srgb, var(--accent) 14%, var(--ui-line)); background:var(--ui-surface);}
.site.theme-default.dark-mode .similar-pair-toggle > i{border:1px solid color-mix(in srgb, var(--accent) 20%, var(--ui-line)); background:var(--ui-surface);}
.site.theme-default.dark-mode .similar-pair-media{background:color-mix(in srgb, var(--accent) 3%, var(--ui-surface));}
.site.theme-default.dark-mode .similar-pair-empty{color:var(--ui-text-muted);}
.site.theme-default.dark-mode .similar-description{border-top:1px solid color-mix(in srgb, var(--accent) 13%, var(--ui-line));}
.site.theme-default.dark-mode .similar-description p{color:var(--ui-text-muted);}
.site.theme-default.dark-mode .similar-modal-outfits fieldset{border:1px solid var(--ui-line);}
.site.theme-default.dark-mode .similar-art-editor-row{border:1px solid var(--ui-line); background:var(--ui-surface);}
.site.theme-default.dark-mode .similar-art-editor-thumb{background:var(--ui-surface); color:var(--ui-text-muted);}
.site.theme-default.dark-mode .checklist-page{background:linear-gradient(180deg, color-mix(in srgb, var(--world-bg, var(--ui-surface)) 88%, var(--ui-surface)), var(--world-bg, var(--ui-surface))); color:var(--ui-text);}
.site.theme-default.dark-mode .checklist-page-head,
.site.theme-default.dark-mode .checklist-detail-head{border-bottom:1px solid color-mix(in srgb, var(--accent) 16%, var(--ui-line));}
.site.theme-default.dark-mode .checklist-page-head p,
.site.theme-default.dark-mode .checklist-detail-head > div > p{color:var(--ui-text-muted);}
.site.theme-default.dark-mode .checklist-head-sign > i{border:1px solid color-mix(in srgb, var(--accent) 25%, var(--ui-line)); background:var(--ui-surface);}
.site.theme-default.dark-mode .checklist-list-card{border:1px solid color-mix(in srgb, var(--accent) 13%, var(--ui-line)); background:var(--ui-surface);}
.site.theme-default.dark-mode .checklist-list-card:hover{border-color:color-mix(in srgb, var(--accent) 38%, var(--ui-line));}
.site.theme-default.dark-mode .checklist-card-top em{color:var(--ui-text-muted);}
.site.theme-default.dark-mode .checklist-list-card > p{color:var(--ui-text-muted);}
.site.theme-default.dark-mode .checklist-card-members > span{border:1px solid var(--ui-line); background:var(--ui-surface);}
.site.theme-default.dark-mode .checklist-card-members img,
.site.theme-default.dark-mode .checklist-card-members > span > i{background:var(--ui-surface);}
.site.theme-default.dark-mode .checklist-card-members b{color:var(--ui-text-muted);}
.site.theme-default.dark-mode .checklist-card-members em{color:var(--ui-text);}
.site.theme-default.dark-mode .checklist-card-members em small{color:var(--ui-text-muted);}
.site.theme-default.dark-mode .checklist-list-card > footer{border-top:1px solid var(--ui-line); color:var(--ui-text-muted);}
.site.theme-default.dark-mode .checklist-empty{border:1px dashed color-mix(in srgb, var(--accent) 25%, var(--ui-line));}
.site.theme-default.dark-mode .checklist-empty p{color:var(--ui-text-muted);}
.site.theme-default.dark-mode .checklist-back{color:var(--ui-text-muted);}
.site.theme-default.dark-mode .checklist-detail-score > article{border:1px solid color-mix(in srgb, var(--cc) 20%, var(--ui-line)); background:linear-gradient(145deg,color-mix(in srgb,var(--cc) 8%,var(--ui-surface)),var(--ui-surface));}
.site.theme-default.dark-mode .checklist-detail-score article > header b{color:var(--ui-text-muted);}
.site.theme-default.dark-mode .checklist-score-track{background:var(--ui-surface-soft);}
.site.theme-default.dark-mode .checklist-result-capacity{border-color:var(--ui-line);background:var(--ui-surface);}
.site.theme-default.dark-mode .checklist-result-capacity small,
.site.theme-default.dark-mode .checklist-result-capacity span{color:var(--ui-text-muted);}
.site.theme-default.dark-mode .checklist-tendency-card{border:1px solid color-mix(in srgb, var(--cc) 20%, var(--ui-line)); background:linear-gradient(150deg, color-mix(in srgb, var(--cc) 5%, var(--ui-surface)), var(--ui-surface));}
.site.theme-default.dark-mode .checklist-tendency-card > header{border-bottom:1px solid color-mix(in srgb, var(--cc) 11%, var(--ui-line));}
.site.theme-default.dark-mode .checklist-person-icon{background:color-mix(in srgb, var(--cc) 10%, var(--ui-surface));}
.site.theme-default.dark-mode .checklist-tendency-card header span{color:var(--ui-text-muted);}
.site.theme-default.dark-mode .checklist-traits > span{border:1px solid var(--ui-line); background:var(--ui-surface); color:var(--ui-text-muted);}
.site.theme-default.dark-mode .checklist-traits > span > i{border:1px solid var(--ui-line);}
.site.theme-default.dark-mode .checklist-traits > span.on{border-color:color-mix(in srgb, var(--cc) 28%, var(--ui-line)); background:color-mix(in srgb, var(--cc) 7%, var(--ui-surface)); color:color-mix(in srgb, var(--cc) 80%, var(--ui-text));}
.site.theme-default.dark-mode .checklist-tendency-card > p{background:var(--ui-surface); color:var(--ui-text-muted);}
.site.theme-default.dark-mode .checklist-result-metric{background:linear-gradient(115deg,color-mix(in srgb,var(--cc) 12%,var(--ui-surface-soft)),var(--ui-surface));}
.site.theme-default.dark-mode .checklist-result-editor{border-color:var(--ui-line);}
.site.theme-default.dark-mode .checklist-result-editor-grid > section{border-color:var(--ui-line);background:var(--ui-surface);}
.site.theme-default.dark-mode .checklist-section{border:1px solid color-mix(in srgb, var(--accent) 13%, var(--ui-line)); background:var(--ui-surface);}
.site.theme-default.dark-mode .checklist-section-title{border-bottom:1px solid var(--ui-line);}
.site.theme-default.dark-mode .checklist-shared-head{border-bottom:1px solid var(--ui-line); background:color-mix(in srgb, var(--accent) 3%, var(--ui-surface));}
.site.theme-default.dark-mode .checklist-shared-head b{color:var(--ui-text-muted);}
.site.theme-default.dark-mode .checklist-shared-list > div{border-bottom:1px solid var(--ui-line);}
.site.theme-default.dark-mode .checklist-shared-list p{border-left:1px solid var(--ui-line); border-right:1px solid var(--ui-line); color:var(--ui-text-muted);}
.site.theme-default.dark-mode .checklist-shared-list .check-a,
.site.theme-default.dark-mode .checklist-shared-list .check-b{border:1px solid var(--ui-line); background:var(--ui-surface);}
.site.theme-default.dark-mode .checklist-split-grid > article:first-child{border-right:1px solid var(--ui-line);}
.site.theme-default.dark-mode .checklist-split-grid > article > header{border-bottom:1px solid var(--ui-line);}
.site.theme-default.dark-mode .checklist-split-grid > article > header small{color:var(--ui-text-muted);}
.site.theme-default.dark-mode .checklist-split-grid > article > header b{color:var(--ui-text);}
.site.theme-default.dark-mode .checklist-split-items > div{border-bottom:1px solid var(--ui-line); color:var(--ui-text-muted);}
.site.theme-default.dark-mode .checklist-split-items span{border:1px solid var(--ui-line); background:var(--ui-surface);}
.site.theme-default.dark-mode .checklist-split-items > div.on p{color:var(--ui-text);}
.site.theme-default.dark-mode .checklist-file-drop{border:1px dashed color-mix(in srgb, var(--accent) 35%, var(--ui-line)); background:color-mix(in srgb, var(--accent) 4%, var(--ui-surface));}
.site.theme-default.dark-mode .checklist-file-drop > span{color:var(--ui-text-muted);}
.site.theme-default.dark-mode .checklist-import-summary > *{border:1px solid var(--ui-line); background:var(--ui-surface); color:var(--ui-text-muted);}
.site.theme-default.dark-mode .checklist-import-summary > b{border-color:color-mix(in srgb, var(--accent) 25%, var(--ui-line)); background:color-mix(in srgb, var(--accent) 6%, var(--ui-surface));}
.site.theme-default.dark-mode .checklist-shared-list > .checklist-check-row{border-bottom:1px solid var(--ui-line);}
.site.theme-default.dark-mode .checklist-shared-list > .checklist-check-row > p{border-left:1px solid var(--ui-line); border-right:1px solid var(--ui-line); color:var(--ui-text-muted);}
.site.theme-default.dark-mode .checklist-row-notes{background:color-mix(in srgb, var(--accent) 2%, var(--ui-surface));}
.site.theme-default.dark-mode .checklist-shared-list > .checklist-row-notes{border-bottom:1px solid var(--ui-line);}
.site.theme-default.dark-mode .checklist-row-notes > article{border:1px solid color-mix(in srgb, var(--cc) 18%, var(--ui-line)); background:color-mix(in srgb, var(--cc) 4%, var(--ui-surface));}
.site.theme-default.dark-mode .checklist-row-notes > article > p{color:var(--ui-text-muted);}
.site.theme-default.dark-mode .checklist-special-block{border-bottom:1px solid var(--ui-line) !important; background:linear-gradient(180deg, color-mix(in srgb, var(--accent) 3%, var(--ui-surface)), var(--ui-surface));}
.site.theme-default.dark-mode .checklist-special-block > p{color:var(--ui-text-muted) !important;}
.site.theme-default.dark-mode .checklist-stat-grid > article{border:1px solid color-mix(in srgb, var(--cc) 20%, var(--ui-line)); background:color-mix(in srgb, var(--cc) 4%, var(--ui-surface));}
.site.theme-default.dark-mode .checklist-stat-grid > article > em{color:var(--ui-text-muted);}
.site.theme-default.dark-mode .checklist-stat-grid > article > span{border-top:1px solid color-mix(in srgb, var(--cc) 12%, var(--ui-line)); color:var(--ui-text-muted);}
.site.theme-default.dark-mode .checklist-split-items > div > small{color:var(--ui-text-muted);}
.site.theme-default.dark-mode .checklist-avatar-admin{border:1px solid var(--ui-line); background:var(--ui-surface);}
.site.theme-default.dark-mode .checklist-avatar-preview{background:var(--ui-surface); color:var(--ui-text-muted);}
.site.theme-default.dark-mode .music-record-shell{background:var(--ui-surface);}
.site.theme-default.dark-mode .music-record-top nav button{background:var(--ui-surface);}
.site.theme-default.dark-mode .music-record-top nav button.on{background:var(--ui-surface-soft); border-color:var(--ui-line);}
.site.theme-default.dark-mode .music-record-visual{background:linear-gradient(145deg, color-mix(in srgb, var(--music-accent) 7%, var(--ui-surface)), var(--ui-surface) 56%);}
.site.theme-default.dark-mode .music-record-label small{color:var(--ui-text-muted);}
.site.theme-default.dark-mode .music-vinyl{background:radial-gradient(
    circle at center,
    var(--ui-surface-soft) 0 8%,
    var(--ui-surface-soft) 8.4% 13%,
    var(--ui-surface-soft) 13.4% 24%,
    var(--ui-surface-soft) 24.4% 25.2%,
    var(--ui-surface-soft) 25.6% 38%,
    var(--ui-surface-soft) 38.3% 39.1%,
    var(--ui-surface-soft) 39.5% 52%,
    var(--ui-surface-soft) 52.4% 53.1%,
    var(--ui-surface-soft) 53.5% 66%,
    var(--ui-surface-soft) 66.4% 67.1%,
    var(--ui-surface-soft) 67.5% 100%
  );}
.site.theme-default.dark-mode .music-vinyl-center{border:5px solid var(--ui-line);}
.site.theme-default.dark-mode .music-record-now span{color:var(--ui-text-muted);}
.site.theme-default.dark-mode .music-record-content > header p{color:var(--ui-text-muted);}
.site.theme-default.dark-mode .music-record-rule i{background:color-mix(in srgb, var(--music-accent) 35%, var(--ui-surface));}
.site.theme-default.dark-mode .music-stream-play{background:var(--ui-surface); color:var(--ui-text);}
.site.theme-default.dark-mode .music-stream-no{color:var(--ui-text-muted);}
.site.theme-default.dark-mode .music-stream-row figure{background:var(--ui-surface);}
.site.theme-default.dark-mode .music-stream-row figure span{color:var(--ui-text-muted);}
.site.theme-default.dark-mode .music-stream-copy small{color:var(--ui-text-muted);}
.site.theme-default.dark-mode .music-stream-copy p{color:var(--ui-text-muted);}
.site.theme-default.dark-mode .music-stream-lyrics{color:var(--ui-text-muted);}
.site.theme-default.dark-mode .music-record-page .music-stream-row-wrap .music-lyrics-panel{border-top:1px solid color-mix(in srgb, var(--music-accent) 22%, var(--ui-line));}
.site.theme-default.dark-mode .roster-column-picker button{border:1px solid var(--ui-line); background:var(--ui-surface-soft); color:var(--ui-text-muted);}
.site.theme-default.dark-mode .roster-column-picker button:hover{border-color:var(--ui-line); color:var(--ui-text-faint);}
.site.theme-default.dark-mode .roster-column-picker button.on{background:var(--ui-surface); border-color:var(--ui-line); color:var(--ui-text);}
.site.theme-default.dark-mode .trio-page-head h1{color:var(--ui-text);}
.site.theme-default.dark-mode .trio-page-head p{color:var(--ui-text-muted);}
.site.theme-default.dark-mode .trio-avatar{background:var(--ui-surface); border:1px solid color-mix(in srgb, var(--tc) 34%, var(--ui-line));}
.site.theme-default.dark-mode .trio-avatar .art-fallback{background:color-mix(in srgb, var(--tc) 12%, var(--ui-surface));}
.site.theme-default.dark-mode .trio-person-head p{color:var(--ui-text-muted);}
.site.theme-default.dark-mode .trio-relation-card{background:var(--ui-surface);}
.site.theme-default.dark-mode .trio-relation-card p{color:var(--ui-text-muted);}
.site.theme-default.dark-mode .trio-full-art{background:linear-gradient(180deg, rgba(255, 255, 255, 0.25), color-mix(in srgb, var(--tc) 7%, var(--ui-surface)));}
.site.theme-default.dark-mode .trio-full-art > span{color:var(--ui-text-muted);}
.site.theme-default.dark-mode .trio-animal{background:var(--ui-surface);}
.site.theme-default.dark-mode .tale-list-card{background:var(--ui-surface);}
.site.theme-default.dark-mode .tale-list-card:hover{border-color:color-mix(in srgb, var(--accent) 30%, var(--ui-line));}
.site.theme-default.dark-mode .tale-list-card > figure{background:var(--ui-surface);}
.site.theme-default.dark-mode .tale-list-card small{color:var(--ui-text-muted);}
.site.theme-default.dark-mode .tale-list-card p{color:var(--ui-text-muted);}
.site.theme-default.dark-mode .tale-list-card footer span{background:color-mix(in srgb, var(--accent) 9%, var(--ui-surface)); color:color-mix(in srgb, var(--accent) 78%, var(--ui-text));}
.site.theme-default.dark-mode .tale-list-card footer b{color:var(--ui-text-muted);}
.site.theme-default.dark-mode .tale-detail-head span{background:color-mix(in srgb, var(--accent) 10%, var(--ui-surface));}
.site.theme-default.dark-mode .tale-detail-head time{color:var(--ui-text-muted);}
.site.theme-default.dark-mode .tale-text-card,
.site.theme-default.dark-mode .tale-dialogue-card,
.site.theme-default.dark-mode .tale-image-card,
.site.theme-default.dark-mode .tale-qa-card{background:var(--ui-surface);}
.site.theme-default.dark-mode .tale-rich-view{color:var(--ui-text);}
.site.theme-default.dark-mode .tale-qa-item{border-bottom-color:var(--ui-line);}
.site.theme-default.dark-mode .tale-qa-q,
.site.theme-default.dark-mode .tale-qa-a{color:var(--ui-text);}
.site.theme-default.dark-mode .tale-image-card img{background:var(--ui-surface);}
.site.theme-default.dark-mode .tale-image-empty{color:var(--ui-text-muted); background:var(--ui-surface);}
.site.theme-default.dark-mode .tale-image-card figcaption{color:var(--ui-text-muted);}
.site.theme-default.dark-mode .tale-dialogue-avatar{background:color-mix(in srgb, var(--dc) 12%, var(--ui-surface)); border:2px solid color-mix(in srgb, var(--dc) 54%, var(--ui-line));}
.site.theme-default.dark-mode .tale-dialogue-line.narration .tale-rich-view{color:var(--ui-text-muted);}
.site.theme-default.dark-mode .trio-editor-colors label{color:var(--ui-text-muted);}
.site.theme-default.dark-mode .trio-editor-upload > span{color:var(--ui-text-faint);}
.site.theme-default.dark-mode .trio-editor-upload img{background:var(--ui-surface);}
.site.theme-default.dark-mode .trio-editor-upload small{color:var(--ui-text-muted);}
.site.theme-default.dark-mode .trio-editor-relation label{color:var(--ui-text-muted);}
.site.theme-default.dark-mode .tale-editor-block{background:var(--ui-surface);}
.site.theme-default.dark-mode .tale-editor-block-head{background:var(--ui-surface);}
.site.theme-default.dark-mode .tale-editor-block-head .tale-block-grip{color:var(--ui-text-muted);}
.site.theme-default.dark-mode .tale-editor-block-head > span:nth-of-type(2){color:var(--ui-text-muted);}
.site.theme-default.dark-mode .tale-editor-block-head > button{color:var(--ui-text-muted);}
.site.theme-default.dark-mode .tale-rich-toolbar{background:var(--ui-surface);}
.site.theme-default.dark-mode .tale-rich-toolbar button,
.site.theme-default.dark-mode .tale-rich-toolbar label{background:var(--ui-surface); color:var(--ui-text);}
.site.theme-default.dark-mode .tale-rich-editor{background:var(--ui-surface); color:var(--ui-text);}
.site.theme-default.dark-mode .tale-editor-image{background:var(--ui-surface);}
.site.theme-default.dark-mode .tale-image-paste-hint{color:var(--ui-text-muted);}
.site.theme-default.dark-mode .tale-editor-image > span{color:var(--ui-text-muted);}
.site.theme-default.dark-mode .tale-dialogue-edit-row > button{background:var(--ui-surface);}
.site.theme-default.dark-mode .pair-direction-title{color:var(--ui-text-muted);}
.site.theme-default.dark-mode .pair-direction-title strong{background:color-mix(in srgb, var(--c), var(--ui-surface) 83%);}
.site.theme-default.dark-mode .pair-personal-gallery{border:1px solid color-mix(in srgb, var(--c), var(--ui-line) 72%); background:var(--ui-surface);}
.site.theme-default.dark-mode .pair-personal-gallery > header small{color:var(--ui-text-muted);}
.site.theme-default.dark-mode .pair-personal-grid figure{background:var(--ui-surface); border:1px solid var(--ui-line);}
.site.theme-default.dark-mode .pair-personal-grid span{color:var(--ui-text-muted);}
.site.theme-default.dark-mode .pair-preset{background:linear-gradient(
    120deg,
    color-mix(in srgb, var(--a), var(--ui-surface) 94%),
    var(--ui-surface) 45%,
    color-mix(in srgb, var(--b), var(--ui-surface) 94%)
  );}
.site.theme-default.dark-mode .pair-preset-head > small{color:var(--ui-text-muted);}
.site.theme-default.dark-mode .pair-preset-head > div span{border:1px solid var(--ui-line); background:var(--ui-surface);}
.site.theme-default.dark-mode .pair-status-side,
.site.theme-default.dark-mode .pair-status-center > article{background:var(--ui-surface); border:1px solid var(--ui-line);}
.site.theme-default.dark-mode .pair-status-side > p{color:var(--ui-text-muted);}
.site.theme-default.dark-mode .pair-status-bars{border-top:1px solid var(--ui-line);}
.site.theme-default.dark-mode .pair-status-bars span{color:var(--ui-text-muted);}
.site.theme-default.dark-mode .pair-status-bars i{background:repeating-linear-gradient(90deg, var(--ui-surface) 0 3px, transparent 3px 7px);}
.site.theme-default.dark-mode .pair-status-side blockquote{background:color-mix(in srgb, var(--c), var(--ui-surface) 91%);}
.site.theme-default.dark-mode .pair-status-reply{color:var(--ui-text-muted);}
.site.theme-default.dark-mode .pair-world-card small,
.site.theme-default.dark-mode .pair-mini-timeline header small,
.site.theme-default.dark-mode .pair-danger-card small{color:var(--ui-text-muted);}
.site.theme-default.dark-mode .pair-world-card p{color:var(--ui-text);}
.site.theme-default.dark-mode .pair-danger-meter i{background:var(--ui-surface);}
.site.theme-default.dark-mode .pair-mini-timeline > header{border-bottom:1px solid var(--ui-line);}
.site.theme-default.dark-mode .pair-mini-timeline > header b{color:var(--ui-text-muted);}
.site.theme-default.dark-mode .pair-mini-timeline > div{border-bottom:1px solid var(--ui-line);}
.site.theme-default.dark-mode .pair-mini-timeline section small{color:var(--ui-text-muted);}
.site.theme-default.dark-mode .pair-mini-timeline section p{color:var(--ui-text-muted);}
.site.theme-default.dark-mode .pair-empty-copy{color:var(--ui-text-muted);}
.site.theme-default.dark-mode .pair-layout-banner{background:var(--ui-surface);}
.site.theme-default.dark-mode .pair-banner-hero{border:1px solid var(--ui-line); background:var(--ui-surface);}
.site.theme-default.dark-mode .pair-banner-hero > div{border:1px solid var(--ui-line);}
.site.theme-default.dark-mode .pair-banner-person,
.site.theme-default.dark-mode .pair-banner-keywords{background:var(--ui-surface); border:1px solid var(--ui-line);}
.site.theme-default.dark-mode .pair-banner-person dl div{border-top:1px solid var(--ui-line);}
.site.theme-default.dark-mode .pair-banner-person dt{color:var(--ui-text-muted);}
.site.theme-default.dark-mode .pair-banner-keywords > small{color:var(--ui-text-muted);}
.site.theme-default.dark-mode .pair-banner-keywords span{border:1px solid var(--ui-line);}
.site.theme-default.dark-mode .pair-layout-playlist > header small{color:#fff;}
.site.theme-default.dark-mode .pair-layout-playlist > header p{color:#fff;}
.site.theme-default.dark-mode .pair-player-person small{color:#fff;}
.site.theme-default.dark-mode .pair-player-person span{color:#fff;}
.site.theme-default.dark-mode .pair-player-lyrics small{color:#fff;}
.site.theme-default.dark-mode .pair-player-progress > i em{background:var(--ui-surface);}
.site.theme-default.dark-mode .pair-layout-poster{background:var(--ui-surface);}
.site.theme-default.dark-mode .pair-poster-top{border-bottom:1px solid var(--ui-line);}
.site.theme-default.dark-mode .pair-poster-top h1{border-left:1px solid var(--ui-line); border-right:1px solid var(--ui-line);}
.site.theme-default.dark-mode .pair-poster-grid{border-bottom:1px solid var(--ui-line);}
.site.theme-default.dark-mode .pair-poster-copy p{color:var(--ui-text);}
.site.theme-default.dark-mode .pair-poster-stage{border-left:1px solid var(--ui-line); border-right:1px solid var(--ui-line); background:linear-gradient(180deg, hsl(from var(--accent) h 22% 22%), hsl(from var(--accent) h 20% 18%));}
.site.theme-default.dark-mode .pair-poster-bubble{background:var(--ui-surface); border:1px solid color-mix(in srgb, var(--c), var(--ui-line) 50%);}
.site.theme-default.dark-mode .pair-poster-bubble.left:after,
.site.theme-default.dark-mode .pair-poster-bubble.right:after{background:var(--ui-surface); border-bottom:1px solid color-mix(in srgb, var(--c), var(--ui-line) 50%);}
.site.theme-default.dark-mode .pair-poster-bubble.left:after{border-right:1px solid color-mix(in srgb, var(--c), var(--ui-line) 50%);}
.site.theme-default.dark-mode .pair-poster-bubble.right:after{border-right:1px solid color-mix(in srgb, var(--c), var(--ui-line) 50%);}
.site.theme-default.dark-mode .relation-track-group{border:1px solid var(--ui-line);}
.site.theme-default.dark-mode .trio-auto-preview{background:var(--ui-surface);}
.site.theme-default.dark-mode .trio-auto-preview span{color:var(--ui-text);}
.site.theme-default.dark-mode .trio-auto-preview small{color:var(--ui-text-muted);}
.site.theme-default.dark-mode .tale-dialogue-layout-picker{background:var(--ui-surface);}
.site.theme-default.dark-mode .tale-dialogue-layout-picker small{color:var(--ui-text-muted);}
.site.theme-default.dark-mode .tale-mob-editor-wrap{background:var(--ui-surface);}
.site.theme-default.dark-mode .tale-mob-editor-wrap > small{color:var(--ui-text-muted);}
.site.theme-default.dark-mode .tale-dialogue-card.messenger{background:color-mix(in srgb, var(--world-bg) 82%, var(--ui-surface));}
.site.theme-default.dark-mode .tale-messenger-avatar{background:color-mix(in srgb, var(--dc) 12%, var(--ui-surface)); border:1px solid color-mix(in srgb, var(--dc) 48%, var(--ui-line));}
.site.theme-default.dark-mode .tale-messenger-bubble{background:var(--ui-surface);}
.site.theme-default.dark-mode .tale-messenger-line.right .tale-messenger-bubble{background:color-mix(in srgb, var(--dc) 12%, var(--ui-surface)); border-color:color-mix(in srgb, var(--dc) 24%, var(--ui-line));}
.site.theme-default.dark-mode .tale-messenger-line.narration .tale-messenger-bubble{color:var(--ui-text-muted);}
.site.theme-default.dark-mode .relation-auto-list-btn{border:1px solid color-mix(in srgb, var(--accent) 28%, var(--ui-line)); background:color-mix(in srgb, var(--accent) 7%, var(--ui-surface)); color:color-mix(in srgb, var(--accent) 72%, var(--ui-text));}
.site.theme-default.dark-mode .relation-auto-list-btn:hover{background:color-mix(in srgb, var(--accent) 13%, var(--ui-surface));}
.site.theme-default.dark-mode .profile-number-voice > header h3{color:var(--ui-text);}
.site.theme-default.dark-mode .profile-number-list blockquote:first-child{border-top:1px solid var(--ui-line);}
.site.theme-default.dark-mode .profile-box-preset article{border:1px solid var(--ui-line); background:var(--ui-surface);}
.site.theme-default.dark-mode .profile-box-preset p{color:var(--ui-text);}
.site.theme-default.dark-mode .profile-quote-preset{border-top:1px solid var(--ui-line); border-bottom:1px solid var(--ui-line);}
.site.theme-default.dark-mode .profile-quote-preset blockquote.main span{color:var(--ui-text);}
.site.theme-default.dark-mode .profile-quote-preset blockquote.sub{border-top:1px dashed var(--ui-line);}
.site.theme-default.dark-mode .profile-quote-preset blockquote.sub span{color:var(--ui-text-muted);}
.site.theme-default.dark-mode .profile-inline-image-preview{border:1px solid var(--ui-line); background:var(--ui-surface);}
.site.theme-default.dark-mode .profile-inline-image-preview.empty{color:var(--ui-text-muted);}
.site.theme-default.dark-mode .profile-image-preset figure{border:1px solid var(--ui-line); background:var(--ui-surface);}
.site.theme-default.dark-mode .profile-quote-preset footer small{color:var(--ui-text-muted);}
.site.theme-default.dark-mode .profile-relation-canvas{border:1px solid var(--ui-line); background:radial-gradient(circle at center, color-mix(in srgb, var(--c), transparent 93%), transparent 42%),
    var(--ui-surface);}
.site.theme-default.dark-mode .profile-relation-edge-label{border:1px solid var(--ui-line); background:var(--ui-surface); color:var(--ui-text-muted);}
.site.theme-default.dark-mode .profile-relation-node > div{border:3px solid var(--ui-line); background:var(--ui-surface);}
.site.theme-default.dark-mode .profile-relation-node small{color:var(--ui-text-muted);}
.site.theme-default.dark-mode .profile-relation-full,
.site.theme-default.dark-mode .profile-timeline-full{color:var(--ui-text-muted);}
.site.theme-default.dark-mode .profile-relation-empty{border:1px solid var(--ui-line); background:var(--ui-surface);}
.site.theme-default.dark-mode .profile-relation-empty p{color:var(--ui-text-muted);}
.site.theme-default.dark-mode .profile-feature-section + .profile-feature-section{border-top:1px solid var(--ui-line);}
.site.theme-default.dark-mode .profile-tab-kind{color:var(--ui-text-faint);}
.site.theme-default.dark-mode .profile-feature-picker button{color:var(--ui-text-faint);}
.site.theme-default.dark-mode .profile-feature-picker button.on{border-color:var(--ui-line); background:var(--ui-surface);}
.site.theme-default.dark-mode .profile-feature-gallery-editor > header b{color:var(--ui-text-faint);}
.site.theme-default.dark-mode .profile-feature-gallery-editor > header small{color:var(--ui-text-muted);}
.site.theme-default.dark-mode .profile-feature-gallery-list article > span{color:var(--ui-text-muted);}
.site.theme-default.dark-mode .profile-feature-gallery-empty{color:var(--ui-text-muted);}
.site.theme-default.dark-mode .profile-gallery-empty{border:1px dashed var(--ui-line); color:var(--ui-text-muted);}
.site.theme-default.dark-mode .profile-preset-option-row > label{color:var(--ui-text-muted);}
.site.theme-default.dark-mode .profile-preset-source > small{color:var(--ui-text-muted);}
.site.theme-default.dark-mode .profile-color-row b{color:var(--ui-text-faint);}
.site.theme-default.dark-mode .profile-feature-admin-title{color:var(--ui-text-faint);}
.site.theme-default.dark-mode .profile-look-profile-link > span{color:var(--ui-text-muted);}
.site.theme-default.dark-mode .profile-look-profile-link select{color:var(--ui-text-faint);}
.site.theme-default.dark-mode .profile-tab-block-editor .profile-block-type-trigger{border-color:var(--ui-line); background:var(--ui-surface);}
.site.theme-default.dark-mode .profile-tab-block-editor .profile-block-type-trigger i{color:var(--ui-text-muted);}
.site.theme-default.dark-mode .profile-tab-block-editor .profile-block-type-menu{border-color:var(--ui-line); background:var(--ui-surface);}
.site.theme-default.dark-mode .profile-tab-block-editor .profile-block-type-menu button{background:var(--ui-surface);}
.site.theme-default.dark-mode .profile-tab-block-editor .profile-block-type-menu button:hover{background:var(--ui-surface); border-color:var(--ui-line);}
.site.theme-default.dark-mode .profile-tab-block-editor .block-controls.horizontal button{border-color:var(--ui-line); background:var(--ui-surface);}
.site.theme-default.dark-mode .profile-tab-block-editor .block-controls.horizontal button:hover:not(:disabled){background:var(--ui-surface);}
.site.theme-default.dark-mode .profile-tab-block-editor .efield > label,
.site.theme-default.dark-mode .profile-tab-block-editor .profile-preset-option-row > label{color:var(--ui-text-muted) !important;}
.site.theme-default.dark-mode .profile-tab-block-editor .profile-preset-source textarea,
.site.theme-default.dark-mode .profile-tab-block-editor .profile-preset-option-row select,
.site.theme-default.dark-mode .profile-tab-block-editor input[type="text"]{border-color:var(--ui-line) !important; background:var(--ui-surface) !important;}
.site.theme-default.dark-mode .profile-tab-block-editor .profile-preset-source > small{color:var(--ui-text-muted);}
.site.theme-default.dark-mode .profile-add-preset{border:1px dashed var(--ui-line) !important; background:var(--ui-surface) !important;}
.site.theme-default.dark-mode .profile-add-preset:hover{background:var(--ui-surface) !important;}
.site.theme-default.dark-mode .profile-tab-editor + .profile-tab-editor::before{background:var(--ui-surface-soft);}
.site.theme-default.dark-mode .profile-tab-block-editor .profile-block-type-trigger{color:var(--ui-text-faint);}
.site.theme-default.dark-mode .profile-tab-block-editor .profile-block-type-menu{color:var(--ui-text-faint);}
.site.theme-default.dark-mode .profile-tab-block-editor .profile-block-type-menu button{color:var(--ui-text-faint);}
.site.theme-default.dark-mode .profile-tab-block-editor .profile-block-type-menu button.on{background:var(--ui-surface); border-color:var(--ui-line);}
.site.theme-default.dark-mode .profile-tab-block-editor .block-controls.horizontal button{color:var(--ui-text-faint);}
.site.theme-default.dark-mode .profile-tab-block-editor .profile-preset-source textarea,
.site.theme-default.dark-mode .profile-tab-block-editor .profile-preset-option-row select,
.site.theme-default.dark-mode .profile-tab-block-editor input[type="text"]{color:var(--ui-text-faint) !important;}
.site.theme-default.dark-mode .profile-tab-block-editor .profile-preset-source textarea::placeholder,
.site.theme-default.dark-mode .profile-tab-block-editor input[type="text"]::placeholder{color:var(--ui-text-muted) !important;}
.site.theme-default.dark-mode .profile-preset-highlight{color:var(--ui-text-faint);}
.site.theme-default.dark-mode .profile-tab-block-editor .profile-preset-source .profile-preset-highlight-wrap > .profile-preset-highlight{color:var(--ui-text-faint) !important;}
.site.theme-default.dark-mode .profile-tab-block-editor .profile-preset-source .profile-preset-highlight-wrap > .profile-preset-highlight strong{color:#fff !important;}
.site.theme-default.dark-mode .profile-preset-drag-handle{color:var(--ui-text-muted);}
.site.theme-default.dark-mode .profile-preset-drag-handle:hover{color:var(--ui-text-faint);}
.site.theme-default.dark-mode .tale-today-seed{border:1px solid var(--ui-line); background:var(--ui-surface);}
.site.theme-default.dark-mode .tale-today-seed header small{color:var(--ui-text-muted);}
.site.theme-default.dark-mode .tale-today-seed p{color:var(--ui-text);}
.site.theme-default.dark-mode .tale-today-seed p span{color:var(--ui-text-muted);}
.site.theme-default.dark-mode .tale-today-seed > small{color:var(--ui-text-muted);}
.site.theme-default.dark-mode .owner-calendar-head p{color:var(--ui-text-muted);}
.site.theme-default.dark-mode .owner-cal-month-nav button,
.site.theme-default.dark-mode .owner-cal-actions button,
.site.theme-default.dark-mode .owner-cal-quick-actions button{border:1px solid var(--ui-line); background:var(--ui-surface); color:var(--ui-text);}
.site.theme-default.dark-mode .owner-cal-board{border:1px solid var(--ui-line); background:var(--ui-surface);}
.site.theme-default.dark-mode .owner-cal-weekdays{background:var(--ui-surface); border-bottom:1px solid var(--ui-line);}
.site.theme-default.dark-mode .owner-cal-weekdays b{color:var(--ui-text-muted);}
.site.theme-default.dark-mode .owner-cal-day{border-right:1px solid var(--ui-line); border-bottom:1px solid var(--ui-line); background:var(--ui-surface);}
.site.theme-default.dark-mode .owner-cal-day.outside{background:var(--ui-surface); color:var(--ui-text-muted);}
.site.theme-default.dark-mode .owner-cal-day.selected{background:color-mix(in srgb,var(--accent) 20%,var(--ui-surface));}
.site.theme-default.dark-mode .owner-cal-day-detail{border-top:1px solid var(--ui-line);}
.site.theme-default.dark-mode .owner-cal-day-detail-add{border:1px solid var(--ui-line); background:var(--ui-surface); color:var(--ui-text);}
.site.theme-default.dark-mode .owner-cal-event{border-left:3px solid var(--ui-line); background:var(--ui-surface); color:var(--ui-text);}
.site.theme-default.dark-mode .owner-cal-event.type-trpg{background:var(--ui-surface);}
.site.theme-default.dark-mode .owner-cal-event.type-commission{background:var(--ui-surface);}
.site.theme-default.dark-mode .owner-cal-side>section{background:var(--ui-surface); border:1px solid var(--ui-line);}
.site.theme-default.dark-mode .owner-cal-poll-list button,
.site.theme-default.dark-mode .owner-cal-upcoming button{border:1px solid var(--ui-line); background:var(--ui-surface);}
.site.theme-default.dark-mode .owner-cal-poll-list button small,
.site.theme-default.dark-mode .owner-cal-upcoming button small{color:var(--ui-text-muted);}
.site.theme-default.dark-mode .owner-cal-empty{color:var(--ui-text-muted);}
.site.theme-default.dark-mode .calendar-commission-preview{border:1px solid var(--ui-line); background:var(--ui-surface);}
.site.theme-default.dark-mode .shared-calendar-poll-shell>header p{color:var(--ui-text-muted);}
.site.theme-default.dark-mode .owner-cal-event.type-personal{border:1px solid var(--ui-line); background:var(--ui-surface);}
.site.theme-default.dark-mode .owner-cal-event.type-personal small{background:var(--ui-surface);}
.site.theme-default.dark-mode .calendar-editor-stats small{color:var(--ui-text-muted);}
.site.theme-default.dark-mode .calendar-editor-label{color:var(--ui-text-muted);}
.site.theme-default.dark-mode .sns-page-head p{color:var(--ui-text-muted);}
.site.theme-default.dark-mode .sns-feed-count{color:var(--ui-text-muted);}
.site.theme-default.dark-mode .sns-feed-count b{color:var(--ui-text);}
.site.theme-default.dark-mode .sns-account-rail>small,
.site.theme-default.dark-mode .sns-meta-rail section>small{color:var(--ui-text-muted);}
.site.theme-default.dark-mode .sns-account-card{border:1px solid var(--ui-line); background:var(--ui-surface);}
.site.theme-default.dark-mode .sns-avatar{background:var(--ui-surface); border:1px solid var(--ui-line);}
.site.theme-default.dark-mode .sns-avatar-fallback{color:var(--ui-text-muted);}
.site.theme-default.dark-mode .sns-author small{color:var(--ui-text-muted);}
.site.theme-default.dark-mode .sns-post{background:var(--ui-surface); border:1px solid var(--ui-line);}
.site.theme-default.dark-mode .sns-post>header time{color:var(--ui-text-muted);}
.site.theme-default.dark-mode .sns-post-image{border:1px solid var(--ui-line); background:var(--ui-surface);}
.site.theme-default.dark-mode .sns-post>footer{border-top:1px solid var(--ui-line); color:var(--ui-text-muted);}
.site.theme-default.dark-mode .sns-post>footer b{color:var(--ui-text);}
.site.theme-default.dark-mode .sns-comments{border-top:1px solid var(--ui-line); background:var(--ui-surface);}
.site.theme-default.dark-mode .sns-comment-row{border-bottom:1px solid var(--ui-line);}
.site.theme-default.dark-mode .sns-comment-copy>p,
.site.theme-default.dark-mode .sns-reply-row>div>p{color:var(--ui-text);}
.site.theme-default.dark-mode .sns-comment-copy>small,
.site.theme-default.dark-mode .sns-reply-row>div>small{color:var(--ui-text-muted);}
.site.theme-default.dark-mode .sns-replies{border-left:2px solid color-mix(in srgb,var(--accent) 35%,var(--ui-line));}
.site.theme-default.dark-mode .sns-meta-rail section{background:var(--ui-surface); border:1px solid var(--ui-line);}
.site.theme-default.dark-mode .sns-meta-rail section>p{color:var(--ui-text-muted);}
.site.theme-default.dark-mode .sns-meta-rail section>div{border-top:1px solid var(--ui-line);}
.site.theme-default.dark-mode .sns-meta-rail section>div span{color:var(--ui-text-muted);}
.site.theme-default.dark-mode .sns-empty,
.site.theme-default.dark-mode .sns-empty-small{border:1px dashed var(--ui-line); color:var(--ui-text-muted);}
.site.theme-default.dark-mode .sns-admin-comments{border:1px solid var(--ui-line); background:var(--ui-surface);}
.site.theme-default.dark-mode .sns-admin-comments>article{border-top:1px solid var(--ui-line);}
.site.theme-default.dark-mode .sns-admin-comments article>div:first-child small{color:var(--ui-text-muted);}
.site.theme-default.dark-mode .sns-admin-reply{background:var(--ui-surface); border:1px solid var(--ui-line);}
.site.theme-default.dark-mode .calendar-visibility-toggle{background:var(--ui-surface-soft);}
.site.theme-default.dark-mode .calendar-visibility-toggle button{color:var(--ui-text-muted);}
.site.theme-default.dark-mode .calendar-visibility-toggle button.on{background:var(--ui-surface-soft);}
.site.theme-default.dark-mode .owner-cal-upcoming-item{border:1px solid var(--ui-line); background:var(--ui-surface);}
.site.theme-default.dark-mode .owner-cal-upcoming-item small{color:var(--ui-text-muted);}
.site.theme-default.dark-mode .owner-cal-public-note p{color:var(--ui-text-muted);}
.site.theme-default.dark-mode .sns-stat-pill{border:1px solid var(--ui-line); background:var(--ui-surface);}
.site.theme-default.dark-mode .sns-stat-pill b{color:var(--ui-text);}
.site.theme-default.dark-mode .sns-stat-pill span{color:var(--ui-text-muted);}
.site.theme-default.dark-mode .sns-meta-card{border:1px solid var(--ui-line); background:var(--ui-surface);}
.site.theme-default.dark-mode .sns-meta-card small{color:var(--ui-text-muted);}
.site.theme-default.dark-mode .sns-meta-card b{color:var(--ui-text);}
.site.theme-default.dark-mode .sns-meta-card p{color:var(--ui-text-muted);}
.site.theme-default.dark-mode .sns-meta-line{border-top:1px solid var(--ui-line);}
.site.theme-default.dark-mode .sns-meta-line span{color:var(--ui-text-muted);}
.site.theme-default.dark-mode .sns-section-head b{color:var(--ui-text);}
.site.theme-default.dark-mode .sns-section-head span{color:var(--ui-text-muted);}
.site.theme-default.dark-mode .sns-account-strip,
.site.theme-default.dark-mode .sns-feed-panel{border:1px solid var(--ui-line); background:var(--ui-surface);}
.site.theme-default.dark-mode .sns-post > header time{color:var(--ui-text-muted);}
.site.theme-default.dark-mode .sns-post > footer{border-top:1px solid var(--ui-line); color:var(--ui-text-muted);}
.site.theme-default.dark-mode .sns-post > footer b{color:var(--ui-text);}
.site.theme-default.dark-mode .sns-thread-row .sns-avatar{border:1px solid var(--ui-line); background:var(--ui-surface);}
.site.theme-default.dark-mode .sns-thread-card{border:1px solid var(--ui-line); background:var(--ui-surface);}
.site.theme-default.dark-mode .sns-thread-head b{color:var(--ui-text);}
.site.theme-default.dark-mode .sns-thread-head small{color:var(--ui-text-muted);}
.site.theme-default.dark-mode .sns-thread-card p{color:var(--ui-text);}
.site.theme-default.dark-mode .sns-thread-replies{border-top:1px dashed var(--ui-line);}
.site.theme-default.dark-mode .guestbook-page{color:var(--ui-text);}
.site.theme-default.dark-mode .guestbook-head p{color:var(--ui-text-muted);}
.site.theme-default.dark-mode .guestbook-head>strong span{color:var(--ui-text-muted);}
.site.theme-default.dark-mode .guestbook-compose{border:1px solid color-mix(in srgb,var(--accent,#9f7d86) 18%,var(--ui-line)); background:color-mix(in srgb,var(--world-bg,var(--ui-surface)) 72%,var(--ui-surface));}
.site.theme-default.dark-mode .guestbook-field label{color:var(--ui-text-muted);}
.site.theme-default.dark-mode .guestbook-field input,
.site.theme-default.dark-mode .guestbook-field textarea{border:1px solid var(--ui-line); background:var(--ui-surface); color:var(--ui-text);}
.site.theme-default.dark-mode .guestbook-field input:focus,
.site.theme-default.dark-mode .guestbook-field textarea:focus{border-color:color-mix(in srgb,var(--accent,#9f7d86) 65%,var(--ui-line));}
.site.theme-default.dark-mode .guestbook-field>small{color:var(--ui-text-muted);}
.site.theme-default.dark-mode .guestbook-local-note{color:var(--ui-text-muted);}
.site.theme-default.dark-mode .guestbook-entry{border:1px solid var(--ui-line); background:color-mix(in srgb,var(--world-bg,var(--ui-surface)) 58%,var(--ui-surface));}
.site.theme-default.dark-mode .guestbook-entry>header span{background:color-mix(in srgb,var(--accent,#9f7d86) 15%,var(--ui-surface)); color:color-mix(in srgb,var(--accent,#9f7d86) 78%,var(--ui-text));}
.site.theme-default.dark-mode .guestbook-entry>header time{color:var(--ui-text-muted);}
.site.theme-default.dark-mode .guestbook-entry>p{color:var(--ui-text);}
.site.theme-default.dark-mode .guestbook-reply{border-left:3px solid color-mix(in srgb,var(--accent,#9f7d86) 44%,var(--ui-line));}
.site.theme-default.dark-mode .guestbook-reply p{color:var(--ui-text);}
.site.theme-default.dark-mode .guestbook-delete-own{color:var(--ui-text-muted);}
.site.theme-default.dark-mode .guestbook-empty{border:1px dashed var(--ui-line);}
.site.theme-default.dark-mode .guestbook-empty p{color:var(--ui-text-muted);}
.site.theme-default.dark-mode .guestbook-admin-summary{border:1px solid var(--ui-line); background:var(--ui-surface);}
.site.theme-default.dark-mode .guestbook-admin-summary span{color:var(--ui-text-muted);}
.site.theme-default.dark-mode .guestbook-admin-list .grow p{color:var(--ui-text-muted);}
.site.theme-default.dark-mode .tale-access-badges span,
.site.theme-default.dark-mode .tale-detail-head .tale-access-badges span{background:var(--ui-surface); color:var(--ui-text);}
.site.theme-default.dark-mode .tale-access-badges .private,
.site.theme-default.dark-mode .tale-detail-head .tale-access-badges .private{background:var(--ui-surface-soft); color:var(--ui-text-faint);}
.site.theme-default.dark-mode .custom-html-page{color:var(--ui-text);}
.site.theme-default.dark-mode .sns-office-top{border:1px solid var(--ui-line); border-bottom:3px solid color-mix(in srgb,var(--accent) 68%,var(--ui-line)); background:var(--ui-surface);}
.site.theme-default.dark-mode .sns-office-brand>span{background:var(--ui-surface-soft);}
.site.theme-default.dark-mode .sns-office-brand small{color:var(--ui-text-muted);}
.site.theme-default.dark-mode .sns-office-brand h1{color:var(--ui-text) !important;}
.site.theme-default.dark-mode .sns-office-world{border-left:1px solid var(--ui-line);}
.site.theme-default.dark-mode .sns-office-world small{color:var(--ui-text-muted);}
.site.theme-default.dark-mode .sns-office-world b{color:var(--ui-text);}
.site.theme-default.dark-mode .sns-office-side>section{border:1px solid var(--ui-line); background:var(--ui-surface);}
.site.theme-default.dark-mode .sns-office-side>section>header{background:var(--ui-surface); border-bottom:1px solid var(--ui-line);}
.site.theme-default.dark-mode .sns-office-side>section>header b{color:var(--ui-text);}
.site.theme-default.dark-mode .sns-office-side>section>header span{color:var(--ui-text-muted);}
.site.theme-default.dark-mode .sns-office-member{border-bottom:1px solid var(--ui-line);}
.site.theme-default.dark-mode .sns-office-member small{color:var(--ui-text-muted);}
.site.theme-default.dark-mode .sns-office-summary dl div{border-bottom:1px solid var(--ui-line);}
.site.theme-default.dark-mode .sns-office-summary dt{color:var(--ui-text-muted);}
.site.theme-default.dark-mode .sns-office-board{border:1px solid var(--ui-line); background:var(--ui-surface);}
.site.theme-default.dark-mode .sns-office-board-head{border-bottom:1px solid var(--ui-line);}
.site.theme-default.dark-mode .sns-office-board-head b{color:var(--ui-text);}
.site.theme-default.dark-mode .sns-office-board-head>span{color:var(--ui-text-muted);}
.site.theme-default.dark-mode .sns-board-columns{background:var(--ui-surface); border-bottom:1px solid var(--ui-line); color:var(--ui-text-muted);}
.site.theme-default.dark-mode .sns-board-entry{border-bottom:1px solid var(--ui-line);}
.site.theme-default.dark-mode .sns-board-entry>summary{color:var(--ui-text); background:var(--ui-surface);}
.site.theme-default.dark-mode .sns-board-entry>summary:hover,
.site.theme-default.dark-mode .sns-board-entry[open]>summary{background:color-mix(in srgb,var(--accent) 5%,var(--ui-surface));}
.site.theme-default.dark-mode .sns-board-no{color:var(--ui-text-muted);}
.site.theme-default.dark-mode .sns-board-title b{color:var(--ui-text);}
.site.theme-default.dark-mode .sns-board-title em{border:1px solid var(--ui-line); background:var(--ui-surface); color:var(--ui-text-muted);}
.site.theme-default.dark-mode .sns-board-entry>summary time{color:var(--ui-text-muted);}
.site.theme-default.dark-mode .sns-board-like{color:var(--ui-text-muted);}
.site.theme-default.dark-mode .sns-board-article{border-top:1px solid var(--ui-line); background:var(--ui-surface);}
.site.theme-default.dark-mode .sns-board-article>header{border-bottom:1px solid var(--ui-line);}
.site.theme-default.dark-mode .sns-board-article>header>div:last-child{color:var(--ui-text-muted);}
.site.theme-default.dark-mode .sns-board-copy>p{color:var(--ui-text);}
.site.theme-default.dark-mode .sns-board-copy figure{border:1px solid var(--ui-line); background:var(--ui-surface);}
.site.theme-default.dark-mode .sns-board-comments{border-top:1px solid var(--ui-line);}
.site.theme-default.dark-mode .sns-board-comments-title span{background:var(--ui-surface-soft);}
.site.theme-default.dark-mode .sns-board-comments .sns-thread-card{background:var(--ui-surface);}
.site.theme-default.dark-mode .sns-office-empty,
.site.theme-default.dark-mode .sns-office-empty-small{color:var(--ui-text-muted);}
.site.theme-default.dark-mode .sns-office-empty b{color:var(--ui-text);}
.site.theme-default.dark-mode .story-page-v5{color:var(--ui-text); background:radial-gradient(ellipse at 50% -12%, rgba(76, 88, 100, 0.07) 0%, rgba(79, 94, 107, 0.025) 29%, transparent 55%),
    radial-gradient(ellipse at 8% 66%, rgba(76, 89, 98, 0.045), transparent 34%),
    radial-gradient(ellipse at 92% 74%, rgba(67, 80, 92, 0.035), transparent 30%),
    var(--world-bg, var(--ui-surface));}
.site.theme-default.dark-mode .story-page-v5 .history-track-v5{background:linear-gradient(to bottom, var(--ui-surface-soft), rgba(48, 48, 50, 0.38) 86%, rgba(48, 48, 50, 0));}
.site.theme-default.dark-mode .story-page-v5 .history-filter-v6 button{background:var(--ui-surface); color:var(--ui-text-muted);}
.site.theme-default.dark-mode .story-page-v5 .history-filter-v6 button:hover,
.site.theme-default.dark-mode .story-page-v5 .history-filter-v6 button.on{background:var(--ui-surface-soft); color:var(--ui-text-faint); border-color:var(--ui-line);}
.site.theme-default.dark-mode .story-page-v5 .history-empty-v6{color:var(--ui-text-muted);}
.site.theme-default.dark-mode .story-page-v5 .history-osmo-title-item-v8 button{color:var(--ui-text);}
.site.theme-default.dark-mode .story-page-v5 .history-osmo-seq-v8,
.site.theme-default.dark-mode .story-page-v5 .history-osmo-title-copy-v8 > small,
.site.theme-default.dark-mode .story-page-v5 .history-osmo-title-item-v8 button > em,
.site.theme-default.dark-mode .story-page-v5 .history-osmo-row-side-v33 > em{color:var(--ui-text-muted);}

/* Canvas / large split panels must use the same dark family, not old white/cream. */
.site.theme-default.dark-mode .site-view > :where(
  .home-page,.roster-page,.profile-page-v4,.pair-page-v4,.trio-page,.gallery-page,
  .diagram-page,.dialogue-page,.story-page-v5,.history-osmo-page-v8,.tales-page,
  .calendar-page,.shared-calendar-poll-page,.owner-calendar-page,.dday-page,
  .checklist-page,.trpg-page,.similar-page,.music-page,.music-record-page,.owner-page,
  .guestbook-page,.tag-archive-page,.sns-page,.sns-office-page,.custom-html-page,
  .placeholder-page,.secret-page,.tab-lock-page
){background:var(--ui-page-bg)!important;color:var(--ui-text)!important;}

.site.theme-default.dark-mode :where(
  .profile-v4-wrap,.profile-v4-detail,.pair-v4-wrap,.trio-wrap,.dialogue-wrap,
  .gallery-wrap,.diagram-wrap,.calendar-wrap,.checklist-wrap,.trpg-wrap,.similar-wrap,
  .music-wrap,.owner-wrap,.tag-archive-wrap,.sns-wrap
){background-color:var(--ui-surface)!important;color:var(--ui-text)!important;border-color:var(--ui-line)!important;}
.site.theme-default.dark-mode .profile-v4-visual{
  background:linear-gradient(145deg,color-mix(in srgb,var(--c) 8%,var(--ui-surface)),var(--ui-surface) 58%,var(--ui-surface-soft))!important;
}
.site.theme-default.dark-mode .profile-v4-detail{background:var(--ui-surface)!important;}

/* Main copy: explicit semantic roles. */
.site.theme-default.dark-mode .home-page:not(.world-au-school) :where(.hero-name,.pair-title){color:var(--ui-text)!important;text-shadow:none!important;}
.site.theme-default.dark-mode .home-page:not(.world-au-school) :where(.hero-kicker,.hero-subname,.pair-desc,.pair-date){color:var(--ui-text-muted)!important;}
.site.theme-default.dark-mode .home-page:not(.world-au-school) .pair-kicker{color:var(--ui-text-faint)!important;}
.site.theme-default.dark-mode .home-page:not(.world-au-school) .pair-date i{background:var(--ui-line)!important;}

/* Profile copy/table/status: no near-black text can remain on the dark panels. */
.site.theme-default.dark-mode .profile-page-v4 :where(
  .profile-v4-name h1,.profile-v4-detail-head b,.profile-story-lead h3,
  .profile-meter-sheet header h3,.profile-essay-title h3,.profile-palette-block b,
  .profile-fact-sheet span,.profile-meter-row>b,.profile-voice-list blockquote span,
  .profile-radar-label strong
){color:var(--ui-text)!important;}
.site.theme-default.dark-mode .profile-page-v4 :where(
  .profile-v4-word,.profile-v4-name span,.profile-v4-detail-head small,.profile-v4-tabs button,
  .profile-story-lead p,.profile-fact-sheet small,.profile-meter-row span,.profile-essay p,
  .profile-palette-block>small,.profile-palette-block em,.profile-radar-label small
){color:var(--ui-text-muted)!important;}
.site.theme-default.dark-mode .profile-page-v4 :where(
  .profile-v4-name small,.profile-story-lead small,.profile-meter-sheet header small,
  .profile-voice-list>small
){color:var(--c)!important;}
.site.theme-default.dark-mode .profile-v4-tabs button.on{color:var(--ui-text)!important;}
.site.theme-default.dark-mode .profile-meter-dots i{background:var(--ui-surface-soft)!important;border-color:var(--ui-line)!important;}
.site.theme-default.dark-mode .profile-meter-dots i.on{background:var(--c)!important;border-color:var(--c)!important;}
.site.theme-default.dark-mode .profile-keyword-wall span{background:var(--ui-surface-soft)!important;color:var(--ui-text)!important;border:1px solid var(--ui-line)!important;}

/* Timeline list: headings were the most visibly broken after removing inversion. */
.site.theme-default.dark-mode .story-page-v5 :where(
  .history-osmo-title-item-v8 button,.history-osmo-title-v8,.history-title-v5,
  .history-osmo-row-v8 h2,.history-osmo-row-v8 h3
){color:var(--ui-text)!important;}
.site.theme-default.dark-mode .story-page-v5 :where(
  .history-osmo-seq-v8,.history-osmo-title-copy-v8>small,
  .history-osmo-title-item-v8 button>em,.history-osmo-row-side-v33>em,.history-empty-v6
){color:var(--ui-text-muted)!important;}
.site.theme-default.dark-mode .story-page-v5 .history-track-v5{
  background:linear-gradient(to bottom,var(--ui-line),rgba(255,255,255,.05) 86%,transparent)!important;
}
.site.theme-default.dark-mode .story-page-v5 .history-event-v5:before{background:var(--ui-line)!important;}
.site.theme-default.dark-mode .story-page-v5 .history-filter-v6 button{
  background:var(--ui-surface)!important;color:var(--ui-text-muted)!important;border-color:var(--ui-line)!important;
}
.site.theme-default.dark-mode .story-page-v5 .history-filter-v6 button:hover,
.site.theme-default.dark-mode .story-page-v5 .history-filter-v6 button.on{
  background:var(--ui-emphasis)!important;color:#fff!important;border-color:var(--ui-emphasis)!important;
}

/* Generic semantic text safety net for page content. Accent/selected rules above override it. */
.site.theme-default.dark-mode .site-view :where(p,li,td,th,blockquote){color:var(--ui-text-muted);}
.site.theme-default.dark-mode .site-view :where(h1,h2,h3,h4,h5,h6,strong,b){color:var(--ui-text);}
.site.theme-default.dark-mode .site-view :where(small,time){color:var(--ui-text-muted);}
.site.theme-default.dark-mode .site-view :where(hr){border-color:var(--ui-line);}

/* Timeline detail intentionally remains the opposite mode. Do not remap it here. */
/* ============ END lope v0.3.219 COMPLETE DEFAULT DARK PALETTE
   ============================================================ */

/* v0.3.283–0.3.284, v0.3.297 — 모든 스킨 공통 다인틀 레이아웃 프리셋 */
.site .trio-layout-diagonal,
.site .trio-layout-cards,
.site .trio-layout-editorial {
  --trio-surface: var(--ui-surface, #fff);
  --trio-soft: var(--ui-surface-soft, #f1efed);
  --trio-line: var(--ui-line, rgba(37, 32, 31, 0.13));
  --trio-text: var(--ui-text, #252120);
  --trio-muted: var(--ui-text-muted, #77706d);
}
.site .trio-layout-diagonal .trio-page-head,
.site .trio-layout-cards .trio-page-head,
.site .trio-layout-editorial .trio-page-head {
  margin-bottom: 30px;
}
.site .trio-layout-diagonal .trio-page-head h1,
.site .trio-layout-cards .trio-page-head h1,
.site .trio-layout-editorial .trio-page-head h1 {
  font-size: clamp(34px, 5vw, 64px);
}
.site .trio-layout-relation {
  min-width: 0;
}
.site .trio-layout-relation > b {
  display: block;
  margin-bottom: 4px;
  font-size: 9px;
  letter-spacing: 0.12em;
  color: var(--tc);
}
.site .trio-layout-relation p {
  display: grid;
  grid-template-columns: 16px minmax(0, 1fr);
  gap: 4px;
  margin: 2px 0;
  font-size: 10px;
  line-height: 1.5;
  color: var(--trio-muted);
}
.site .trio-layout-relation em {
  font-style: normal;
  font-weight: 900;
  color: var(--tc);
}
.site .trio-layout-image-fallback {
  width: 100%;
  height: 100%;
  display: grid;
  place-items: center;
  background: color-mix(in srgb, var(--tc) 7%, var(--trio-soft));
  font-family: var(--serif, Georgia, serif);
  font-size: 46px;
  font-weight: 500;
  color: color-mix(in srgb, var(--tc) 62%, var(--trio-muted));
}

/* 참고 1: 텍스트와 인물이 교차하는 사선 콜라주 */
.site .trio-layout-diagonal .trio-shell {
  width: min(900px, 100%);
}
.site .trio-collage {
  position: relative;
  isolation: isolate;
  overflow: visible;
  border: 1px solid var(--trio-line);
  background: var(--trio-surface);
  box-shadow: 0 20px 55px rgba(39, 31, 30, 0.08);
}
.site .trio-collage::before {
  content: "";
  position: absolute;
  z-index: -1;
  top: 30%;
  left: -6%;
  width: 112%;
  height: 31%;
  transform: skewY(-4deg);
  background: color-mix(in srgb, var(--accent) 10%, var(--trio-soft));
  border-block: 1px solid color-mix(in srgb, var(--accent) 12%, transparent);
}
.site .trio-collage-row {
  display: grid;
  grid-template-columns: minmax(0, 1.08fr) minmax(260px, 0.92fr);
  align-items: stretch;
  min-height: 330px;
  position: relative;
  overflow: visible;
}
.site .trio-collage-row + .trio-collage-row {
  border-top: 1px solid color-mix(in srgb, var(--trio-line) 55%, transparent);
}
.site .trio-collage-row-2,
.site .trio-collage-row-even {
  grid-template-columns: minmax(260px, 0.92fr) minmax(0, 1.08fr);
}
.site .trio-collage-row-2 .trio-collage-copy,
.site .trio-collage-row-even .trio-collage-copy {
  grid-column: 2;
}
.site .trio-collage-row-2 .trio-collage-figure,
.site .trio-collage-row-even .trio-collage-figure {
  grid-column: 1;
  grid-row: 1;
}
.site .trio-collage-copy {
  display: flex;
  flex-direction: column;
  justify-content: center;
  min-width: 0;
  padding: 36px 44px;
}
.site .trio-collage-copy > small {
  font-size: 9px;
  font-weight: 850;
  letter-spacing: 0.18em;
  color: var(--tc);
}
.site .trio-collage-copy h2 {
  margin: 8px 0 9px;
  font-family: var(--serif, Georgia, serif);
  font-size: clamp(28px, 4vw, 44px);
  font-weight: 500;
  line-height: 1;
  color: var(--trio-text);
}
.site .trio-collage-keywords,
.site .trio-column-keywords {
  display: flex;
  flex-wrap: wrap;
  gap: 5px;
}
.site .trio-collage-keywords span {
  font-size: 10px;
  font-weight: 700;
  color: var(--tc);
}
.site .trio-collage-copy > p {
  margin: 17px 0 0;
  font-size: 12px;
  line-height: 1.78;
  color: var(--trio-muted);
}
.site .trio-collage-palette {
  display: flex;
  gap: 6px;
  margin-top: 16px;
}
.site .trio-collage-palette i,
.site .trio-editorial-palette i {
  width: 24px;
  height: 5px;
  background: var(--dot);
}
.site .trio-collage-relations {
  display: grid;
  grid-template-columns: repeat(2, minmax(0, 1fr));
  gap: 13px;
  margin-top: 18px;
  padding-top: 13px;
  border-top: 1px solid var(--trio-line);
}
.site .trio-collage-figure {
  position: relative;
  min-width: 0;
  height: 330px;
  min-height: 0;
  margin: 0;
  overflow: visible;
}
.site .trio-collage-frame {
  position: absolute;
  z-index: 0;
  inset: 0;
  background: color-mix(in srgb, var(--tc) 9%, var(--trio-soft));
  clip-path: polygon(10% 0, 100% 0, 100% 100%, 0 100%);
}
.site .trio-collage-row-2 .trio-collage-frame,
.site .trio-collage-row-even .trio-collage-frame {
  clip-path: polygon(0 0, 100% 7%, 92% 100%, 0 100%);
}
.site .trio-collage-art-window {
  position: absolute;
  z-index: 1;
  left: -9%;
  right: -4%;
  bottom: 0;
  height: 460px;
  overflow: hidden;
}
.site .trio-collage-art-window > img,
.site .trio-collage-art-window > .art-fallback,
.site .trio-collage-art-window > .trio-layout-image-fallback {
  position: absolute;
  inset: 0;
  width: 100%;
  height: 100%;
  object-fit: contain;
  object-position: center bottom;
}
.site .trio-collage-art-window > img {
  transform: translate(var(--img-x, 0%), var(--img-y, 0%)) scale(var(--img-scale, 1));
  transform-origin: 50% 100%;
  will-change: transform;
  filter: drop-shadow(0 14px 18px rgba(35, 29, 28, 0.1));
}
.site .trio-collage-animal {
  position: absolute;
  z-index: 2;
  right: 16px;
  bottom: 16px;
  width: 66px;
  height: 66px;
  display: grid;
  place-items: center;
  padding: 7px;
  border: 1px solid color-mix(in srgb, var(--tc) 30%, var(--trio-line));
  border-radius: 50%;
  background: color-mix(in srgb, var(--trio-surface) 88%, transparent);
  backdrop-filter: blur(8px);
}
.site .trio-collage-animal img {
  max-width: 100%;
  max-height: 100%;
  object-fit: contain;
}

/* 참고 2: 세 사람을 같은 규격으로 비교하는 3열 카드 */
.site .trio-layout-cards .trio-shell {
  width: min(1080px, 100%);
}
.site .trio-card-strip {
  display: grid;
  grid-template-columns: repeat(var(--trio-cols, 3), minmax(0, 1fr));
  border: 1px solid var(--trio-line);
  background: var(--trio-surface);
  box-shadow: 0 18px 50px rgba(35, 31, 30, 0.08);
}
.site .trio-column-card {
  min-width: 0;
  padding: 0 18px 24px;
}
.site .trio-column-card + .trio-column-card {
  border-left: 1px solid var(--trio-line);
}
.site .trio-column-card:nth-child(3n + 1) {
  border-left: 0;
}
.site .trio-column-card:nth-child(n + 4) {
  border-top: 1px solid var(--trio-line);
}
.site .trio-column-card > header {
  width: 72px;
  height: 58px;
  display: flex;
  flex-direction: column;
  align-items: center;
  justify-content: flex-end;
  gap: 2px;
  margin: 0 auto 10px;
  padding-bottom: 9px;
  border-radius: 0 0 50% 50%;
  background: color-mix(in srgb, var(--tc) 16%, var(--trio-soft));
}
.site .trio-column-card > header span {
  font-size: 13px;
  font-weight: 900;
  color: var(--tc);
}
.site .trio-column-card > header small {
  max-width: 62px;
  overflow: hidden;
  text-overflow: ellipsis;
  white-space: nowrap;
  font-size: 7px;
  letter-spacing: 0.08em;
  color: var(--trio-muted);
}
.site .trio-column-stage {
  position: relative;
  height: 480px;
  min-height: 480px;
  padding: 15px 12px;
}
.site .trio-column-stage::before {
  content: "";
  position: absolute;
  inset: 46px 15px 24px;
  background: color-mix(in srgb, var(--tc) 8%, var(--trio-soft));
}
.site .trio-column-stage figure {
  position: absolute;
  z-index: 1;
  inset: 0 24px 0;
  margin: 0;
  display: flex;
  align-items: flex-end;
  justify-content: center;
  overflow: hidden;
}
.site .trio-column-stage figure > img,
.site .trio-column-stage figure > .art-fallback,
.site .trio-column-stage figure > .trio-layout-image-fallback {
  width: 100%;
  height: 100%;
  object-fit: contain;
  object-position: center bottom;
}
.site .trio-column-float {
  position: absolute;
  z-index: 2;
  inset: 0;
  pointer-events: none;
}
.site .trio-column-float > i {
  position: absolute;
  top: 54px;
  left: -4px;
  width: 112px;
  height: 132px;
  border: 1px solid rgba(255, 255, 255, 0.82);
  border-radius: 24px 18px 42px 16px;
  background: var(--dot);
  box-shadow: 0 4px 10px rgba(30, 25, 25, 0.08);
}
.site .trio-column-float > i:nth-child(2) {
  top: 204px;
  left: auto;
  right: -8px;
  width: 126px;
  height: 94px;
  border-radius: 18px 36px 18px 30px;
}
.site .trio-column-float > i:nth-child(3) {
  top: 334px;
  left: 8px;
  width: 94px;
  height: 118px;
  border-radius: 34px 16px 28px 18px;
}
.site .trio-column-card:nth-child(3n + 2) .trio-column-float > i:nth-child(1) {
  top: 78px;
  right: 4px;
  left: auto;
  width: 122px;
  height: 92px;
  border-radius: 20px 34px 16px 26px;
}
.site .trio-column-card:nth-child(3n + 2) .trio-column-float > i:nth-child(2) {
  top: 212px;
  right: auto;
  left: -6px;
  width: 96px;
  height: 128px;
  border-radius: 34px 16px 38px 20px;
}
.site .trio-column-card:nth-child(3n + 2) .trio-column-float > i:nth-child(3) {
  top: 348px;
  right: 2px;
  left: auto;
  width: 116px;
  height: 96px;
  border-radius: 16px 30px 22px 36px;
}
.site .trio-column-card:nth-child(3n) .trio-column-float > i:nth-child(1) {
  top: 65px;
  left: 4px;
  width: 96px;
  height: 124px;
  border-radius: 18px 34px 16px 40px;
}
.site .trio-column-card:nth-child(3n) .trio-column-float > i:nth-child(2) {
  top: 210px;
  right: -6px;
  left: auto;
  width: 118px;
  height: 96px;
  border-radius: 36px 18px 30px 16px;
}
.site .trio-column-card:nth-child(3n) .trio-column-float > i:nth-child(3) {
  top: 358px;
  left: -6px;
  width: 126px;
  height: 88px;
  border-radius: 18px 28px 38px 16px;
}
.site .trio-column-float > i.has-image {
  overflow: hidden;
  background: var(--trio-surface);
  border-color: color-mix(in srgb, var(--tc) 28%, var(--trio-line));
}
/* v0.3.303 — 보조 이미지 3칸을 편집 모드에서 드래그로 옮기고 크기를 조절할 수 있게.
   방문자 화면(.trio-column-float의 기본 pointer-events:none)은 그대로 두어 클릭이
   아래 전신 이미지를 가리지 않게 합니다. 칸 자체의 width/height를 직접 늘리므로
   border-radius(각 칸 고정 px)는 그대로 유지되고 가운데 직선 구간만 늘어납니다. */
.site.editing .trio-column-float > i {
  pointer-events: auto;
  cursor: grab;
  touch-action: none;
}
.site.editing .trio-column-float > i.is-dragging {
  cursor: grabbing;
  z-index: 3;
  box-shadow: 0 8px 20px rgba(30, 25, 25, 0.22);
}
.trio-badge-resize {
  /* v0.3.303 — 이미지가 든 칸(.has-image)은 overflow:hidden이라 핸들이 칸 밖으로
     삐져나오면 잘려서 안 보입니다. 칸 안쪽에 완전히 들어오게 둡니다. */
  position: absolute;
  right: 4px;
  bottom: 4px;
  width: 16px;
  height: 16px;
  border-radius: 50%;
  background: #fff;
  border: 2px solid var(--accent, #a675b8);
  box-shadow: 0 2px 6px rgba(30, 25, 25, 0.25);
  opacity: 0;
  pointer-events: none;
  cursor: nwse-resize;
  transition: opacity 0.15s;
  z-index: 4;
}
.site.editing .trio-column-float > i:hover .trio-badge-resize,
.site.editing .trio-column-float > i.is-resizing .trio-badge-resize {
  opacity: 1;
  pointer-events: auto;
}
.site .trio-column-float > i img {
  width: 100%;
  height: 100%;
  display: block;
  object-fit: cover;
  object-position: center;
}
.site .trio-column-float > span {
  position: absolute;
  z-index: 3;
  right: 2px;
  bottom: 8px;
  width: 58px;
  height: 58px;
  display: grid;
  place-items: center;
  padding: 6px;
  border: 1px solid var(--trio-line);
  border-radius: 14px;
  background: color-mix(in srgb, var(--trio-surface) 88%, transparent);
}
.site .trio-column-float > span img {
  max-width: 100%;
  max-height: 100%;
  object-fit: contain;
}
.site .trio-column-copy {
  position: relative;
  padding: 19px 4px 0;
  border-top: 7px solid var(--tc);
}
.site .trio-column-copy > small {
  font-size: 8px;
  font-weight: 800;
  letter-spacing: 0.16em;
  color: var(--tc);
}
.site .trio-column-copy h2 {
  margin: 5px 0 9px;
  font-family: var(--serif, Georgia, serif);
  font-size: 28px;
  font-weight: 500;
  color: var(--trio-text);
}
.site .trio-column-keywords span {
  padding: 4px 7px;
  border: 1px solid color-mix(in srgb, var(--tc) 22%, var(--trio-line));
  border-radius: 999px;
  font-size: 9px;
  color: var(--tc);
}
.site .trio-column-copy > p {
  margin: 15px 0 0;
  min-height: 92px;
  font-size: 11px;
  line-height: 1.75;
  color: var(--trio-muted);
}
.site .trio-column-relations {
  display: grid;
  gap: 10px;
  margin-top: 16px;
  padding-top: 13px;
  border-top: 1px solid var(--trio-line);
}

/* 참고 3: 인쇄물처럼 세로로 이어지는 에디토리얼 */
.site .trio-layout-editorial .trio-shell {
  width: min(1160px, 100%);
}
.site .trio-editorial-grid {
  display: grid;
  grid-template-columns: repeat(var(--trio-cols, 3), minmax(0, 1fr));
  border: 1px solid var(--trio-line);
  background: var(--trio-surface);
  box-shadow: 0 18px 54px rgba(35, 30, 29, 0.08);
}
.site .trio-editorial-column {
  position: relative;
  min-width: 0;
  overflow: hidden;
  padding: 28px 25px 0;
}
.site .trio-editorial-column + .trio-editorial-column {
  border-left: 1px solid var(--trio-line);
}
.site .trio-editorial-column:nth-child(3n + 1) {
  border-left: 0;
}
.site .trio-editorial-column:nth-child(n + 4) {
  border-top: 1px solid var(--trio-line);
}
.site .trio-editorial-corner {
  position: absolute;
  top: 0;
  left: 0;
  width: 116px;
  height: 68px;
  clip-path: polygon(0 0, 100% 0, 68% 100%, 0 76%);
  background: color-mix(in srgb, var(--tc) 45%, var(--trio-soft));
}
.site .trio-editorial-column > header {
  position: relative;
  z-index: 1;
  height: 178px;
}
.site .trio-editorial-vertical {
  position: absolute;
  top: 2px;
  left: 0;
  width: 82px;
  height: 132px;
  display: flex;
  flex-direction: row-reverse;
  justify-content: center;
  gap: 8px;
  padding: 11px 9px;
  border: 1px solid var(--trio-text);
  background: color-mix(in srgb, var(--trio-surface) 84%, transparent);
  backdrop-filter: blur(5px);
}
.site .trio-editorial-vertical b,
.site .trio-editorial-vertical small {
  writing-mode: vertical-rl;
  text-orientation: mixed;
  /* v0.3.333 — 세로쓰기 상자 높이가 고정이라 이름이 길면 다음 줄(칸)로 넘어가는데,
     기본값은 한글 글자 사이 아무 데서나 줄바꿈할 수 있어서 "성 이름" 사이 띄어쓰기와
     상관없이 이름 중간이 뚝뚝 끊겨 다른 칸으로 흩어졌습니다. 띄어쓰기 단위(단어)
     안에서는 안 끊기도록 고정합니다. */
  word-break: keep-all;
  overflow-wrap: normal;
}
.site .trio-editorial-vertical b {
  font-family: var(--serif, Georgia, serif);
  font-size: 17px;
  font-weight: 600;
  letter-spacing: 0.08em;
  color: var(--trio-text);
}
.site .trio-editorial-vertical small {
  overflow: hidden;
  font-size: 8px;
  line-height: 1.4;
  color: var(--trio-muted);
}
.site .trio-editorial-role {
  position: absolute;
  top: 64px;
  left: 103px;
  right: 0;
  padding-top: 8px;
  border-top: 1px solid var(--trio-line);
}
.site .trio-editorial-role span,
.site .trio-editorial-role small {
  display: block;
  overflow: hidden;
  text-overflow: ellipsis;
  white-space: nowrap;
}
.site .trio-editorial-role span {
  font-size: 9px;
  color: var(--trio-text);
}
.site .trio-editorial-role small {
  margin-top: 3px;
  font-size: 7px;
  letter-spacing: 0.12em;
  color: var(--trio-muted);
}
.site .trio-editorial-column > figure {
  box-sizing: border-box;
  height: 520px;
  margin: -70px 0 0 74px;
  padding: 28px 0 34px;
  overflow: hidden;
  background: color-mix(in srgb, var(--tc) 8%, var(--trio-soft));
}
.site .trio-editorial-column > figure > img,
.site .trio-editorial-column > figure > .art-fallback,
.site .trio-editorial-column > figure > .trio-layout-image-fallback {
  width: 100%;
  height: 100%;
  object-fit: contain;
  object-position: center bottom;
}
.site .trio-editorial-copy {
  display: grid;
  grid-template-columns: minmax(0, 1.45fr) minmax(82px, 0.55fr);
  gap: 18px;
  margin-top: 22px;
  padding-top: 17px;
  border-top: 1px solid var(--trio-line);
}
.site .trio-editorial-copy > p {
  margin: 0;
  font-size: 10px;
  line-height: 1.82;
  color: var(--trio-muted);
}
.site .trio-editorial-copy aside {
  min-width: 0;
  padding-top: 2px;
}
.site .trio-editorial-copy aside > small,
.site .trio-editorial-copy aside > b {
  display: block;
}
.site .trio-editorial-copy aside > small {
  font-size: 7px;
  letter-spacing: 0.13em;
  color: var(--tc);
}
.site .trio-editorial-copy aside > b {
  margin-top: 6px;
  font-size: 11px;
  color: var(--trio-text);
}
.site .trio-editorial-copy aside > img {
  width: 54px;
  height: 54px;
  margin-top: 10px;
  object-fit: contain;
}
.site .trio-editorial-palette {
  display: grid;
  gap: 3px;
  margin-top: 9px;
}
.site .trio-editorial-palette i {
  width: 100%;
}
.site .trio-editorial-relations {
  display: grid;
  gap: 11px;
  margin-top: 17px;
  padding-top: 14px;
  border-top: 1px solid var(--trio-line);
}
.site .trio-editorial-column > footer {
  margin-top: 22px;
  padding: 8px 0 10px;
  border-top: 4px solid var(--tc);
  font-size: 7px;
  letter-spacing: 0.16em;
  text-align: right;
  color: var(--trio-muted);
}

@media (max-width: 780px) {
  .site .trio-layout-diagonal,
  .site .trio-layout-cards,
  .site .trio-layout-editorial {
    padding-top: 68px;
  }
  .site .trio-collage {
    border-inline: 0;
    box-shadow: none;
  }
  .site .trio-collage-row,
  .site .trio-collage-row-2,
  .site .trio-collage-row-even {
    grid-template-columns: 1fr;
  }
  .site .trio-collage-row-2 .trio-collage-copy,
  .site .trio-collage-row-2 .trio-collage-figure,
  .site .trio-collage-row-even .trio-collage-copy,
  .site .trio-collage-row-even .trio-collage-figure {
    grid-column: 1;
    grid-row: auto;
  }
  .site .trio-collage-copy {
    padding: 30px 28px 74px;
  }
  .site .trio-collage-figure,
  .site .trio-collage-row-2 .trio-collage-figure,
  .site .trio-collage-row-even .trio-collage-figure {
    height: 310px;
    min-height: 0;
  }
  .site .trio-collage-frame,
  .site .trio-collage-row-2 .trio-collage-frame,
  .site .trio-collage-row-even .trio-collage-frame {
    clip-path: polygon(0 9%, 100% 0, 100% 100%, 0 100%);
  }
  .site .trio-collage-art-window {
    left: -2%;
    right: -2%;
    height: 370px;
  }
  .site .trio-card-strip,
  .site .trio-editorial-grid {
    grid-template-columns: 1fr;
    border-inline: 0;
    box-shadow: none;
  }
  .site .trio-column-card {
    padding-inline: 26px;
  }
  .site .trio-column-card + .trio-column-card,
  .site .trio-editorial-column + .trio-editorial-column {
    border-left: 0;
    border-top: 1px solid var(--trio-line);
  }
  .site .trio-column-stage {
    height: min(72vh, 520px);
    min-height: 470px;
  }
  .site .trio-editorial-column {
    padding-inline: 28px;
  }
  .site .trio-editorial-column > figure {
    height: min(76vh, 600px);
    margin-left: 92px;
    padding: 26px 0 32px;
  }
}

@media (max-width: 460px) {
  .site .trio-layout-diagonal .trio-page-head h1,
  .site .trio-layout-cards .trio-page-head h1,
  .site .trio-layout-editorial .trio-page-head h1 {
    font-size: 30px;
    line-height: 1.06;
  }
  .site .trio-collage-relations {
    grid-template-columns: 1fr;
  }
  .site .trio-collage-copy {
    padding-inline: 22px;
  }
  .site .trio-column-card,
  .site .trio-editorial-column {
    padding-inline: 18px;
  }
  .site .trio-editorial-column > figure {
    height: 540px;
    margin-left: 72px;
    padding: 26px 0 30px;
  }
  .site .trio-editorial-copy {
    grid-template-columns: minmax(0, 1fr) 82px;
    gap: 12px;
  }
}

/* v0.3.285 — usable 2-person frame index and retained-frame navigation */
.site.theme-default .pair-index-page {
  min-height: 100vh;
  padding: 94px 24px max(100px, calc(env(safe-area-inset-bottom) + 86px));
  color: var(--ui-text);
  background:
    radial-gradient(circle at 8% 4%, color-mix(in srgb, var(--accent) 10%, transparent), transparent 30%),
    var(--ui-page-bg);
}
.site.theme-default .pair-index-shell {
  width: min(1120px, 100%);
  margin: 0 auto;
}
.site.theme-default .pair-index-head {
  max-width: 620px;
  margin-bottom: 30px;
}
.site.theme-default .pair-index-head small {
  color: var(--ui-text-muted);
  font-size: 9px;
  font-weight: 800;
  letter-spacing: 0.22em;
}
.site.theme-default .pair-index-head h1 {
  margin: 8px 0 10px;
  color: var(--ui-text);
  font: 600 clamp(38px, 6vw, 68px)/1.04 Georgia, "Noto Serif KR", serif;
}
.site.theme-default .pair-index-head p {
  margin: 0;
  color: var(--ui-text-muted);
  font-size: 13px;
  line-height: 1.7;
}
.site.theme-default .pair-index-grid {
  display: grid;
  grid-template-columns: repeat(2, minmax(0, 1fr));
  gap: 22px;
}
.site.theme-default .pair-index-card {
  min-width: 0;
  padding: 0;
  overflow: hidden;
  border: 1px solid var(--ui-line);
  border-radius: 22px;
  color: var(--ui-text);
  background: var(--ui-surface);
  box-shadow: 0 18px 46px color-mix(in srgb, #000 9%, transparent);
  text-align: left;
  cursor: pointer;
  transition: transform 180ms ease, border-color 180ms ease, box-shadow 180ms ease;
}
.site.theme-default .pair-index-card:hover {
  transform: translateY(-4px);
  border-color: color-mix(in srgb, var(--a) 55%, var(--ui-line));
  box-shadow: 0 24px 58px color-mix(in srgb, #000 14%, transparent);
}
.site.theme-default .pair-index-card > figure {
  position: relative;
  height: 270px;
  margin: 0;
  overflow: hidden;
  background: linear-gradient(135deg, color-mix(in srgb, var(--a) 26%, var(--ui-surface-soft)), color-mix(in srgb, var(--b) 22%, var(--ui-surface-soft)));
}
.site.theme-default .pair-index-card > figure > img {
  width: 100%;
  height: 100%;
  display: block;
  object-fit: cover;
  transform: translate(var(--img-x, 0%), var(--img-y, 0%)) scale(var(--img-scale, 1));
  transform-origin: center;
  transition: transform 300ms ease;
}
.site.theme-default .pair-index-card:hover > figure > img {
  transform: translate(var(--img-x, 0%), var(--img-y, 0%)) scale(calc(var(--img-scale, 1) * 1.025));
}
.site.theme-default .pair-index-card > figure > em {
  position: absolute;
  top: 15px;
  right: 15px;
  display: grid;
  width: 36px;
  height: 36px;
  place-items: center;
  border: 1px solid rgba(255,255,255,.55);
  border-radius: 50%;
  color: #fff;
  background: rgba(20,18,21,.42);
  backdrop-filter: blur(8px);
  font: 700 9px/1 Arial, sans-serif;
  letter-spacing: .08em;
}
.site.theme-default .pair-index-fallback {
  height: 100%;
  display: flex;
  align-items: center;
  justify-content: center;
  gap: 22px;
}
.site.theme-default .pair-index-fallback > span {
  width: 112px;
  height: 112px;
  overflow: hidden;
  border: 3px solid rgba(255,255,255,.72);
  border-radius: 50%;
  background: var(--ui-surface);
}
.site.theme-default .pair-index-fallback img {
  width: 100%;
  height: 100%;
  object-fit: cover;
}
.site.theme-default .pair-index-fallback > i {
  color: var(--ui-text-muted);
  font: 400 24px/1 Georgia, serif;
}
.site.theme-default .pair-index-copy {
  padding: 22px 24px 24px;
}
.site.theme-default .pair-index-copy > small {
  color: color-mix(in srgb, var(--a) 62%, var(--ui-text));
  font-size: 9px;
  font-weight: 900;
  letter-spacing: .12em;
}
.site.theme-default .pair-index-copy h2 {
  margin: 8px 0 9px;
  color: var(--ui-text);
  font: 600 clamp(23px, 3vw, 34px)/1.15 Georgia, "Noto Serif KR", serif;
}
.site.theme-default .pair-index-copy > p {
  min-height: 42px;
  margin: 0;
  color: var(--ui-text-muted);
  font-size: 12px;
  line-height: 1.72;
}
.site.theme-default .pair-index-members {
  display: flex;
  align-items: center;
  gap: 8px;
  margin-top: 16px;
  color: var(--ui-text);
  font-size: 11px;
  font-weight: 800;
}
.site.theme-default .pair-index-members i {
  color: var(--ui-text-muted);
  font-family: Georgia, serif;
}
.site.theme-default .pair-index-keywords {
  display: flex;
  flex-wrap: wrap;
  gap: 5px;
  margin-top: 13px;
}
.site.theme-default .pair-index-keywords span {
  padding: 5px 8px;
  border: 1px solid var(--ui-line-soft);
  border-radius: 999px;
  color: var(--ui-text-muted);
  background: var(--ui-surface-soft);
  font-size: 9px;
}
.site.theme-default .pair-index-copy > strong {
  display: flex;
  justify-content: space-between;
  margin-top: 20px;
  padding-top: 15px;
  border-top: 1px solid var(--ui-line-soft);
  color: var(--ui-text);
  font-size: 10px;
  letter-spacing: .08em;
}
.site.theme-default .pair-index-empty {
  grid-column: 1 / -1;
  padding: 54px 28px;
  border: 1px dashed var(--ui-line);
  border-radius: 20px;
  color: var(--ui-text-muted);
  background: var(--ui-surface);
  text-align: center;
}
.site.theme-default .pair-index-empty b {
  display: block;
  margin-bottom: 7px;
  color: var(--ui-text);
}
.site.theme-default .pair-index-empty p {
  margin: 0;
}
.site.theme-default .pair-list-back {
  display: inline-flex;
  align-items: center;
  min-height: 34px;
  margin: 0 0 16px;
  padding: 0 13px;
  border: 1px solid var(--ui-line, rgba(80,70,75,.2));
  border-radius: 999px;
  color: var(--ui-text, #28242a);
  background: color-mix(in srgb, var(--ui-surface, #fff) 88%, transparent);
  box-shadow: 0 7px 20px rgba(20,16,18,.06);
  backdrop-filter: blur(12px);
  font-size: 10px;
  font-weight: 800;
  cursor: pointer;
}
.site.theme-default .pair-layout-playlist .pair-list-back {
  border-color: rgba(255,255,255,.25);
  color: #fff;
  background: rgba(15,16,21,.44);
}
.site.theme-default .pair-detail-cover {
  position: relative;
  height: 320px;
  margin: 0 0 18px;
  overflow: hidden;
  border: 1px solid color-mix(in srgb, var(--a) 20%, #d5ceca);
  border-radius: 20px;
  background: linear-gradient(120deg, color-mix(in srgb, var(--a) 20%, #eee), color-mix(in srgb, var(--b) 18%, #eee));
  box-shadow: 0 18px 42px rgba(35,25,30,.1);
}
.site.theme-default .pair-detail-cover > img {
  width: 100%;
  height: 100%;
  display: block;
  object-fit: cover;
  object-position: center;
  transform: translate(var(--img-x, 0%), var(--img-y, 0%)) scale(var(--img-scale, 1));
  transform-origin: center;
}
.site.theme-default .pair-detail-cover > figcaption {
  position: absolute;
  inset: auto 0 0;
  padding: 34px 22px 18px;
  color: #fff;
  background: linear-gradient(transparent, rgba(20,15,18,.72));
  pointer-events: none;
}
.site.theme-default .pair-detail-cover > figcaption small,
.site.theme-default .pair-detail-cover > figcaption b {
  display: block;
}
.site.theme-default .pair-detail-cover > figcaption small {
  margin-bottom: 4px;
  color: rgba(255,255,255,.72);
  font-size: 8px;
  letter-spacing: .16em;
}
.site.theme-default .pair-detail-cover > figcaption b {
  font: 600 24px/1.1 Georgia, "Noto Serif KR", serif;
}

@media (max-width: 720px) {
  .site.theme-default .pair-index-page {
    padding: 78px 14px max(92px, calc(env(safe-area-inset-bottom) + 82px));
  }
  .site.theme-default .pair-index-head {
    margin-bottom: 22px;
    padding: 0 5px;
  }
  .site.theme-default .pair-index-grid {
    grid-template-columns: 1fr;
    gap: 16px;
  }
  .site.theme-default .pair-index-card > figure {
    height: 230px;
  }
  .site.theme-default .pair-index-copy {
    padding: 19px 20px 21px;
  }
  .site.theme-default .pair-index-copy > p {
    min-height: 0;
  }
  .site.theme-default .pair-detail-cover {
    height: 230px;
    border-radius: 15px;
  }
  .site.theme-default .pair-page-v4 .pair-list-back,
  .site.theme-default .pair-preset .pair-list-back {
    margin-left: 0;
  }
}


/* lope v0.3.292 — unified supplied SVG icon set */
.editor-subtab {
  display: inline-flex;
  align-items: center;
  justify-content: center;
  gap: 5px;
}
.editor-subtab-icon {
  display: inline-grid;
  place-items: center;
  flex: 0 0 auto;
}
.editor-subtab-icon .ui-icon {
  width: 13px;
  height: 13px;
  filter: brightness(0) invert(1);
  opacity: .72;
}
.editor-subtab:hover .editor-subtab-icon .ui-icon {
  opacity: 1;
}
.editor-subtab.on .editor-subtab-icon .ui-icon {
  filter: brightness(0);
  opacity: 1;
}
.button-ui-icon {
  display: inline-block;
  /* v0.3.324 — 사용자 피드백: 자동 부착 아이콘이 버튼 글자에 비해 전반적으로 살짝
     커 보임. 다른 자리에서 이미 13px로 줄여 쓰던 값을 기본값으로 승격. */
  width: 13px;
  height: 13px;
  vertical-align: -2px;
  flex: 0 0 auto;
}
.icon-ebtn .button-ui-icon,
.drawer-close .button-ui-icon,
.relation-map-close-v19 .button-ui-icon,
.gallery-lightbox-close .button-ui-icon,
.vn-close .button-ui-icon,
.easter-sms-close .button-ui-icon,
.easter-error-close .button-ui-icon {
  filter: brightness(0) invert(1) !important;
}
/* v0.3.324 — 관계도 팝업은 document.body 바로 아래(.site 바깥)에 붙어서 다크 모드
   배경 규칙(.site.theme-default.dark-mode ...)이 안 걸리고, 항상 흰 배경(#fff)의
   닫기 버튼입니다. 그런데 위 공용 규칙이 아이콘을 항상 흰색으로 뒤집어서 흰 배경
   위에 흰 아이콘 = 안 보이는 X 버튼이 되던 문제. */
.relation-map-close-v19 .button-ui-icon {
  filter: brightness(0) !important;
}
/* v0.3.335 — 이스터에그 "문자(SMS)" 카드도 항상 흰 배경(.easter-sms)인데 같은 공용
   규칙이 X 아이콘을 흰색으로 뒤집어서 안 보였습니다. brightness(0) invert(60%)는
   검정을 #999(회색)로 만들어 버튼 기본 텍스트색(color:#999)과 맞춥니다. */
.easter-sms-close .button-ui-icon {
  filter: brightness(0) invert(60%) !important;
}
.easter-sms-close:hover .button-ui-icon {
  filter: brightness(0) invert(33%) !important;
}
/* v0.3.324 — 이스터에그 "오류" 팝업의 닫기 버튼도 라이트 모드에서는 배경이 거의
   흰색(--paper2)이라 흰 아이콘이 안 보였습니다. 다크 모드(body.dark-mode)는 배경이
   이미 어두워서 흰 아이콘이 맞으므로 라이트 모드일 때만 검정으로 뒤집습니다. */
body:not(.dark-mode) .easter-error-close .button-ui-icon {
  filter: brightness(0) !important;
}
.music-stream-play .button-ui-icon,
[data-music-widget-toggle] .button-ui-icon,
[data-music-widget-next] .button-ui-icon {
  width: 13px;
  height: 13px;
}
.vn-play-button { display:inline-flex; align-items:center; gap:6px; }
.tab-lock-back { display:inline-flex; align-items:center; justify-content:center; gap:6px; }

/* supplied action/control icon alignment
   아이콘 자동 부착은 요소의 원래 레이아웃(display:grid 등)을 바꾸지 않습니다.
   편집기의 실제 액션 버튼만 flex 정렬하고, 공개 페이지 카드/캘린더 버튼은
   각 컴포넌트가 선언한 display와 text-align을 그대로 유지합니다. */
.lope-action-iconized { gap:5px; }
:is(.ebtn,.m-btn,.icon-ebtn,.ghost-btn,.light-btn).lope-action-iconized,
label.m-btn.lope-action-iconized,
a.ebtn.lope-action-iconized { display:inline-flex; align-items:center; justify-content:center; }
.lope-action-iconized.full { display:flex; width:100%; }
.lope-action-iconized .button-ui-icon { margin-right:1px; }
.tales-search { position:relative; }
.tales-search-icon { position:absolute; left:12px; top:50%; transform:translateY(-50%); display:grid; place-items:center; pointer-events:none; opacity:.55; z-index:1; }
.tales-search-icon .ui-icon { width:14px; height:14px; }
.tales-search:has(.tales-search-icon) input { padding-left:34px; }
.history-filter-icon { display:inline-grid; place-items:center; opacity:.6; }
.history-filter-icon .ui-icon { width:14px; height:14px; }
.trpg-sort-label { display:inline-flex !important; align-items:center; gap:5px; }
.trpg-sort-label .ui-icon { width:13px; height:13px; }
.bgm-volume-label { display:inline-flex !important; align-items:center; gap:5px; }
.bgm-volume-label .ui-icon { width:13px; height:13px; }
.au-world-icon { width:13px !important; height:13px !important; display:inline-block !important; }
.dark-mode-check-row > span { display:inline-flex; align-items:center; gap:6px; }
.dark-mode-check-row > span .ui-icon { width:14px; height:14px; filter:brightness(0) invert(1); }
.world-sticker-resize-handle .button-ui-icon, .world-sticker-rotate-handle .button-ui-icon { width:12px; height:12px; filter:brightness(0) invert(1); }
.world-sticker-resize-handle::before, .world-sticker-resize-handle::after { display:none !important; }

.ebtn.lope-action-iconized .button-ui-icon { filter:brightness(0) invert(1) !important; }
.ebtn.primary.lope-action-iconized .button-ui-icon { filter:brightness(0) !important; }
.m-btn.primary.lope-action-iconized .button-ui-icon { filter:brightness(0) invert(1) !important; }
.site.dark-mode .tales-search-icon .ui-icon,
.site.dark-mode .history-filter-icon .ui-icon,
.site.dark-mode .trpg-sort-label .ui-icon { filter:brightness(0) invert(1); }


/* lope v0.3.294 — account > achievements display-only UI */
.achievement-panel {
  padding-bottom: 0;
}
.achievement-panel-head {
  display: flex;
  align-items: flex-end;
  justify-content: space-between;
  gap: 12px;
  margin: 2px 0 12px;
}
.achievement-panel-head > div > small {
  display: block;
  margin-bottom: 4px;
  color: #686872;
  font-size: 8px;
  font-weight: 800;
  letter-spacing: .16em;
}
.editor-drawer .achievement-panel-head h3 {
  margin: 0;
  color: #efeff2;
  font-size: 14px;
  letter-spacing: 0;
  text-transform: none;
}
.achievement-panel-head > span {
  min-width: 27px;
  height: 22px;
  padding: 0 8px;
  border: 1px solid #303038;
  border-radius: 999px;
  display: inline-grid;
  place-items: center;
  background: #1b1b20;
  color: #92929b;
  font-size: 9px;
  font-weight: 800;
}
.achievement-list {
  display: grid;
  gap: 7px;
}
.achievement-card {
  min-width: 0;
  min-height: 74px;
  padding: 11px 12px;
  border: 1px solid #2d2d34;
  border-radius: 12px;
  display: grid;
  grid-template-columns: 38px minmax(0, 1fr);
  gap: 11px;
  align-items: center;
  background: #1a1a1e;
}
.achievement-card-mark {
  width: 38px;
  height: 38px;
  border: 1px solid #34343c;
  border-radius: 11px;
  display: grid;
  place-items: center;
  background: #222228;
}
.achievement-card-icon.ui-icon {
  width: 20px;
  height: 20px;
  filter: brightness(0) invert(1);
  opacity: .82;
}
.achievement-card-copy {
  min-width: 0;
}
.achievement-card-copy > small {
  display: block;
  margin-bottom: 3px;
  color: #64646d;
  font-size: 7px;
  font-weight: 800;
  letter-spacing: .12em;
}
.achievement-card-copy > b {
  display: block;
  overflow: hidden;
  color: #efeff2;
  font-size: 11px;
  line-height: 1.35;
  text-overflow: ellipsis;
  white-space: nowrap;
}
.achievement-card-copy > p {
  margin: 4px 0 0;
  color: #8f8f98;
  font-size: 9px;
  line-height: 1.45;
}
.achievement-card.is-secret {
  border-style: dashed;
  background: #17171b;
}
.achievement-card.is-secret .achievement-card-mark {
  background: #1d1d22;
}
.achievement-card.is-secret .achievement-card-copy > b,
.achievement-card.is-secret .achievement-card-copy > p {
  color: #686871;
  letter-spacing: .08em;
}


/* v0.3.312 — TRPG detail only: left session summary + v2 minimal transcript */
.trpg-page:has(.trpg-reader-shell){padding-left:18px;padding-right:18px}
.trpg-reader-shell{width:min(1180px,96vw)!important;margin:0 auto!important;display:grid!important;grid-template-columns:238px minmax(0,1fr)!important;gap:18px!important;align-items:start!important;overflow:visible!important;border:0!important;border-radius:0!important;background:transparent!important;box-shadow:none!important;padding:0!important}
.trpg-reader-shell:before{display:none!important}
.trpg-reader-sidebar{position:sticky!important;top:76px!important;min-width:0!important}
.trpg-reader-sidebar .trpg-back{width:100%!important;margin:0 0 8px!important;padding:9px 12px!important;border:1px solid rgba(35,31,34,.09)!important;border-radius:10px!important;background:rgba(255,255,255,.76)!important;text-align:left!important;cursor:pointer!important}
.trpg-reader-summary{min-width:0!important;padding:12px 12px 16px!important;border:1px solid rgba(35,31,34,.09)!important;border-radius:16px!important;background:rgba(255,255,255,.88)!important;box-shadow:0 12px 34px rgba(31,27,30,.045)!important}
.trpg-reader-cover{position:relative!important;width:100%!important;aspect-ratio:4/3!important;min-height:0!important;margin:0 0 15px!important;overflow:hidden!important;border-radius:11px!important;background:color-mix(in srgb,var(--accent) 10%,#ece9e6)!important;box-shadow:none!important}
.trpg-reader-cover:after{display:none!important}
.trpg-reader-cover img{width:100%!important;height:100%!important;display:block!important;object-fit:cover!important}
.trpg-reader-cover.empty{display:grid!important;place-items:center!important;align-content:center!important;gap:2px!important;background:linear-gradient(135deg,color-mix(in srgb,var(--accent) 13%,#fff),#f6f4f2)!important}
.trpg-reader-cover.empty:before{content:""!important;display:block!important;position:absolute!important;inset:9px!important;border:1px solid color-mix(in srgb,var(--accent) 24%,#ddd)!important;border-radius:8px!important;background:none!important}
.trpg-reader-cover.empty b{position:relative!important;z-index:1!important;color:var(--accent)!important;font:700 26px/1 Georgia,serif!important;letter-spacing:.08em!important}
.trpg-reader-cover.empty span{position:relative!important;z-index:1!important;color:#aaa39e!important;font-size:8px!important;font-weight:800!important;letter-spacing:.24em!important}
.trpg-reader-summary>small{display:block!important;margin-bottom:5px!important;color:var(--accent)!important;font-size:9px!important;font-weight:800!important;line-height:1.3!important;letter-spacing:.16em!important;text-transform:uppercase!important}
.trpg-reader-summary>h1{margin:0!important;color:#242126!important;font:700 25px/1.12 Georgia,"Noto Serif KR",serif!important;letter-spacing:0!important;overflow-wrap:anywhere!important}
.trpg-reader-summary>p{margin:8px 0 0!important;color:#817a76!important;font-size:11px!important;line-height:1.65!important}
.trpg-reader-summary .timeline-ref-tags{margin-top:10px!important}
.trpg-reader-summary dl{display:grid!important;gap:0!important;margin:15px 0 0!important;padding-top:3px!important;border-top:1px solid rgba(35,31,34,.08)!important}
.trpg-reader-summary dl>div{display:grid!important;grid-template-columns:46px minmax(0,1fr)!important;gap:8px!important;padding:8px 1px!important;border-bottom:1px solid rgba(35,31,34,.055)!important}
.trpg-reader-summary dt{color:#aaa39e!important;font-size:8px!important;font-weight:800!important;letter-spacing:.12em!important}.trpg-reader-summary dd{min-width:0!important;margin:0!important;color:#615b57!important;font-size:10px!important;line-height:1.45!important;text-align:right!important;overflow-wrap:anywhere!important}
.trpg-reader-main{min-width:0!important;overflow:hidden!important;border:1px solid rgba(35,31,34,.09)!important;border-radius:16px!important;background:#fff!important;box-shadow:0 12px 34px rgba(31,27,30,.035)!important}
.trpg-transcript-head{display:flex!important;align-items:center!important;justify-content:space-between!important;gap:16px!important;min-height:56px!important;padding:11px 18px!important;border-bottom:1px solid #ece9e7!important;background:#fff!important}
.trpg-transcript-head>div{display:flex!important;flex-direction:column!important;gap:2px!important}.trpg-transcript-head small{color:var(--accent)!important;font-size:8px!important;font-weight:900!important;letter-spacing:.16em!important}.trpg-transcript-head b{color:#55504d!important;font-size:11px!important}.trpg-transcript-head>span{color:#aaa39e!important;font-size:9px!important}
.trpg-reader-main .trpg-html-view{display:block!important;width:100%!important;height:420px;min-height:420px!important;border:0!important;background:#fff!important}
.theme-youth .trpg-theme-reader .page-shell{max-width:1180px!important}.theme-youth .trpg-reader-youth .trpg-reader-summary,.theme-youth .trpg-reader-youth .trpg-reader-main{border-color:var(--yt-line)!important;box-shadow:none!important}.theme-youth .trpg-reader-youth .trpg-reader-summary>small,.theme-youth .trpg-reader-youth .trpg-transcript-head small{color:var(--yt-blue)!important}.theme-youth .trpg-reader-youth .trpg-reader-sidebar .trpg-back{border-color:var(--yt-line)!important;border-radius:4px!important;background:#fff!important}.theme-youth .trpg-reader-youth .trpg-reader-main,.theme-youth .trpg-reader-youth .trpg-reader-summary{border-radius:4px!important}
.site.theme-default.dark-mode .trpg-reader-summary,.site.theme-default.dark-mode .trpg-reader-main,.site.theme-default.dark-mode .trpg-reader-sidebar .trpg-back{background:var(--ui-surface)!important;border-color:var(--ui-line)!important}.site.theme-default.dark-mode .trpg-reader-summary>h1,.site.theme-default.dark-mode .trpg-reader-summary dd,.site.theme-default.dark-mode .trpg-transcript-head b{color:var(--ui-text)!important}.site.theme-default.dark-mode .trpg-reader-summary>p,.site.theme-default.dark-mode .trpg-reader-summary dt,.site.theme-default.dark-mode .trpg-transcript-head>span{color:var(--ui-text-muted)!important}
@media(max-width:860px){.trpg-reader-shell{width:min(760px,94vw)!important;grid-template-columns:1fr!important;gap:12px!important}.trpg-reader-sidebar{position:static!important}.trpg-reader-sidebar .trpg-back{width:auto!important}.trpg-reader-summary{display:grid!important;grid-template-columns:112px minmax(0,1fr)!important;column-gap:14px!important;align-items:start!important}.trpg-reader-cover{grid-row:1/span 6!important;width:112px!important;margin:0!important}.trpg-reader-summary>small,.trpg-reader-summary>h1,.trpg-reader-summary>p,.trpg-reader-summary>.timeline-ref-tags,.trpg-reader-summary>dl{grid-column:2!important}.trpg-reader-summary dl{margin-top:10px!important}}
@media(max-width:600px){.trpg-page:has(.trpg-reader-shell){padding-left:10px!important;padding-right:10px!important}.trpg-reader-shell{width:100%!important}.trpg-reader-summary{grid-template-columns:78px minmax(0,1fr)!important;gap:10px 12px!important;padding:10px!important}.trpg-reader-cover{width:78px!important;border-radius:8px!important}.trpg-reader-summary>h1{font-size:20px!important}.trpg-reader-summary dl{display:none!important}.trpg-transcript-head{min-height:50px!important;padding:10px 14px!important}.trpg-transcript-head>span{display:none!important}.trpg-reader-main .trpg-html-view{min-height:360px!important}}
