:root{
  --bg:#15110d;--panel:#1d1813;--panel2:#251f18;--line:#3a3026;--ink:#f1e8d8;--muted:#b3a58f;--faint:#7f735f;
  --gold:#d9b46a;--gold2:#f0d79a;--period:#c8963e;
  --gold-rgb:217,180,106;--gold-hi:#e9c97f;--gold-deep:#b88a3e;--gold-deep-rgb:184,138,62;
  --land:#e3d5b4;--land-hi:#ece0c2;--hill:#b59d6f;--sea:#8fb2b4;--sea-deep:#6f97a0;--oasis:#7f9a52;--grain:rgba(90,70,40,.09);
  --serif:'Gowun Batang','Nanum Myeongjo',Georgia,serif;--sans:'Noto Sans KR',system-ui,-apple-system,'Apple SD Gothic Neo',sans-serif;
  color-scheme:dark;
}
*{box-sizing:border-box}
html,body{margin:0;height:100%}
body:has(#journey:not([hidden])){overflow:hidden}
body{background:var(--bg);color:var(--ink);font-family:var(--sans);font-size:15px;-webkit-font-smoothing:antialiased}
button,input,select{font:inherit;color:inherit}
button{cursor:pointer;-webkit-tap-highlight-color:transparent}
:focus-visible{outline:2px solid var(--gold);outline-offset:2px}
[hidden]{display:none!important}
.eyebrow{font-size:11px;letter-spacing:.18em;color:var(--gold);font-weight:700;text-transform:uppercase}
.fine{font-size:12px;color:var(--faint);line-height:1.6}

/* header — 왼쪽 제목과 한 줄 소개, 가운데 밑줄 탭, 오른쪽 진행 막대와 설정 */
.top{height:56px;display:flex;align-items:center;gap:22px;padding:0 22px;border-bottom:1px solid #2b241b;background:linear-gradient(#1a150f,#120e0a);position:relative;z-index:6}
.brand{display:flex;align-items:center;gap:12px;text-decoration:none;color:inherit;min-width:0}
.brand .logo{width:30px;height:30px;flex:none;margin-right:-2px}
.brand b{font-family:var(--serif);font-size:24px;letter-spacing:.12em;color:var(--gold2);white-space:nowrap}
.brand small{font-size:12.5px;color:var(--muted);white-space:nowrap;overflow:hidden;text-overflow:ellipsis;padding-left:14px;border-left:1px solid #3a3026}
.tabs{margin-left:auto;display:flex;gap:6px;height:100%}
.tabs button{border:0;background:none;padding:0 16px;color:var(--muted);font-size:15px;position:relative;height:100%}
.tabs button.active{color:var(--ink);font-weight:700}
.tabs button.active::after{content:'';position:absolute;left:14px;right:14px;bottom:0;height:2px;background:var(--gold);border-radius:2px}
.progress{display:flex;align-items:center;gap:12px;border:0;background:none;color:var(--muted);font-size:13px;padding:4px 0}
#progressText{font-family:var(--serif);font-size:16px;color:var(--ink);white-space:nowrap}
.pbar{position:relative;width:120px;height:2px;background:#3a3026;border-radius:2px}
.pbar i{position:absolute;left:0;top:0;bottom:0;width:0;background:var(--gold);border-radius:2px;transition:width .6s}
.pbar i::after{content:'';position:absolute;right:-4px;top:-3px;width:8px;height:8px;border-radius:50%;background:var(--gold2);box-shadow:0 0 8px var(--gold)}
.settings{position:relative}
.gear{width:34px;height:34px;border-radius:50%;border:1px solid #4a3c2c;background:radial-gradient(circle at 35% 30%,#3a2e20,#1a140e);color:var(--gold);display:grid;place-items:center;padding:0}
.gear svg{width:19px;height:19px}
.spanel{position:absolute;right:0;top:44px;width:230px;background:rgba(24,19,14,.98);border:1px solid #4a3c2c;border-radius:14px;padding:12px;display:flex;flex-direction:column;gap:8px;box-shadow:0 18px 40px rgba(0,0,0,.5);z-index:20}
.spanel label{display:flex;flex-direction:column;gap:5px;font-size:12px;color:var(--muted)}
.langpick{background:var(--panel2);color:var(--ink);border:1px solid var(--line);border-radius:10px;padding:8px 10px;font-size:13px}
.sbtn{text-align:left;border:1px solid var(--line);background:var(--panel);border-radius:10px;padding:9px 12px;font-size:13px}
.sbtn:hover{border-color:var(--gold)}
a.sbtn{display:block;text-decoration:none;color:inherit}

/* journey layout — 지도가 화면 전체, 장면은 지도 위 카드 */
.journey{display:grid;grid-template-columns:minmax(0,1fr);grid-template-rows:minmax(0,1fr) auto;height:calc(100dvh - 56px)}
.mapwrap{position:relative;min-height:0;overflow:hidden;background:var(--land)}
#map{width:100%;height:100%;display:block;touch-action:none;cursor:grab;user-select:none;-webkit-user-select:none;transition:filter 1.6s} /* 끌어서 둘러보기 — 브라우저가 화면을 밀지 않게 */
#map.dragging{cursor:grabbing}
.stage3d{position:absolute;left:0;top:0;pointer-events:none;opacity:0;transition:opacity .5s;will-change:transform}
/* 장면 분위기의 빛 (stage.js가 .mapwrap에 data-env를 단다). 층마다 opacity만 바꿔 서서히 겹쳐 바뀐다.
   서쪽(왼쪽)은 해 지는 쪽, 동쪽(오른쪽)은 해 뜨는 쪽 — 지도 방위와 맞춘다 */
.atmos{position:absolute;inset:0;pointer-events:none;overflow:hidden}
.atmos i{position:absolute;inset:0;opacity:0;transition:opacity 1.8s ease}
.a-vig{background:radial-gradient(ellipse 75% 70% at 45% 48%,transparent 40%,rgba(8,6,4,.55) 100%)}
.a-cool{background:linear-gradient(170deg,#24386e,#16234a);mix-blend-mode:multiply}
.a-moon{background:radial-gradient(ellipse 55% 50% at 12% 6%,rgba(196,214,255,.32),transparent 70%);mix-blend-mode:screen}
.a-stars{background-image:radial-gradient(1.6px 1.6px at 23px 31px,#fff,transparent),radial-gradient(1.2px 1.2px at 97px 78px,#e8eeff,transparent),radial-gradient(2px 2px at 151px 19px,#fff,transparent),radial-gradient(1.2px 1.2px at 61px 133px,#dfe7ff,transparent),radial-gradient(1.5px 1.5px at 183px 117px,#fff,transparent),radial-gradient(1.1px 1.1px at 131px 171px,#e8eeff,transparent);background-size:200px 190px;-webkit-mask-image:linear-gradient(#000,rgba(0,0,0,.35) 45%,transparent 75%);mask-image:linear-gradient(#000,rgba(0,0,0,.35) 45%,transparent 75%)}
.a-warm{background:linear-gradient(95deg,rgba(255,138,64,.5),rgba(255,170,90,.18) 45%,transparent 75%);mix-blend-mode:soft-light}
/* 새벽빛은 동쪽 위에서 — 오른쪽 끝은 장면 카드에 가리므로 보이는 지도의 오른쪽 위에 둔다 */
.a-dawn{background:radial-gradient(ellipse 65% 60% at 62% -8%,rgba(255,168,140,.62),rgba(255,200,160,.24) 50%,transparent 80%),linear-gradient(rgba(255,190,170,.12),transparent 60%);mix-blend-mode:screen}
.a-glory{background:radial-gradient(ellipse 60% 55% at 45% 0%,rgba(255,246,214,.6),transparent 70%),repeating-conic-gradient(from 0deg at 45% -10%,rgba(255,240,200,.09) 0 3deg,transparent 3deg 9deg);mix-blend-mode:screen;-webkit-mask-image:linear-gradient(#000,transparent 85%);mask-image:linear-gradient(#000,transparent 85%)}
.a-cloud{inset:-30%!important;background:radial-gradient(ellipse 22% 16% at 30% 35%,rgba(14,20,26,.8),transparent),radial-gradient(ellipse 30% 20% at 68% 55%,rgba(14,20,26,.7),transparent),radial-gradient(ellipse 22% 16% at 45% 82%,rgba(14,20,26,.65),transparent),radial-gradient(ellipse 24% 17% at 82% 18%,rgba(14,20,26,.65),transparent),radial-gradient(ellipse 18% 13% at 12% 70%,rgba(14,20,26,.6),transparent);animation:clouds 40s linear infinite}
.a-flash{background:radial-gradient(ellipse at 60% 20%,rgba(235,240,255,.55),transparent 70%);mix-blend-mode:screen}
@keyframes clouds{from{transform:translate(-6%,-2%)}to{transform:translate(6%,3%)}}
@keyframes twinkle{0%,100%{opacity:.85}50%{opacity:.45}}
@keyframes lightning{0%,88%,92%,96%,100%{opacity:0}89%,94%{opacity:1}}
[data-env=day] .a-vig{opacity:.25}
[data-env=dusk] .a-vig,[data-env=calm] .a-vig{opacity:.45}
[data-env=dusk] .a-warm{opacity:1}
[data-env=calm] .a-warm{opacity:.6}
[data-env=night] .a-vig{opacity:.8}
[data-env=night] .a-cool{opacity:.7}
[data-env=night] .a-moon{opacity:1}
.terrain-on [data-env=night] .a-cool{opacity:.3} /* 3D 지형은 밤빛을 조명으로 낸다(terrain.js) — 푸른 막을 짙게 덮으면 회색 안개처럼 보였다 */
/* 별: 지도는 땅을 내려다보는 그림이라 별을 덮으면 땅 위에 점이 박힌 무늬로 보였다 — 별은 3D 지형의 하늘에만 둔다(terrain.js addStars) */
[data-env=storm] .a-vig{opacity:.7}
[data-env=storm] .a-cool{opacity:.45}
[data-env=storm] .a-cloud{opacity:1}
[data-env=storm] .a-flash{animation:lightning 11s 2s infinite;transition:none}
[data-env=overcast] .a-vig{opacity:.4}
[data-env=overcast] .a-cloud{opacity:.45}
[data-env=dark] .a-vig{opacity:1}
[data-env=dark] .a-cool{opacity:.3}
[data-env=dawn] .a-vig{opacity:.3}
[data-env=dawn] .a-dawn{opacity:1}
[data-env=glory] .a-glory{opacity:1}
.stage-on .pin.now text{opacity:0}
.stage-on .pin.close,.stage-on .lbl.close{opacity:0;pointer-events:none}
.dock{border-top:1px solid #2b241b;background:linear-gradient(#16120d,#100c09);padding:10px 20px calc(10px + env(safe-area-inset-bottom));display:flex;align-items:center;gap:22px}

/* 장면 카드 */
.scene{position:absolute;top:14px;right:14px;bottom:14px;width:min(460px,42%);overflow-y:auto;padding:0;background:rgba(21,17,13,.86);border:1px solid #4a3c2c;border-radius:20px;box-shadow:0 20px 60px rgba(0,0,0,.55);outline:none;transition:transform .55s cubic-bezier(.2,.8,.2,1),opacity .4s,height .45s;transform-origin:top right;backdrop-filter:blur(14px) saturate(1.1);-webkit-backdrop-filter:blur(14px) saturate(1.1)}
.scene:not(.open):not(.peek){opacity:0;pointer-events:none}
.scene.peek{bottom:auto;max-height:64px;overflow:hidden}
.scene.peek>*:not(.cardbar):not(.cardtoggle){display:none}
.scene.open{animation:cardin .6s cubic-bezier(.2,.8,.2,1)}
@keyframes cardin{from{transform:translateY(16px) scale(.97);opacity:.2}to{transform:none;opacity:1}}
.cardbar{display:none;align-items:center;gap:10px;padding:12px 14px 12px 18px;min-height:64px}
.scene.peek .cardbar{display:flex}
.cardbar>div{flex:1;min-width:0}
.cardbar b{display:block;font-family:var(--serif);font-size:17px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.cardbar small{display:block;font-size:11.5px;color:var(--muted);margin-top:2px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
/* 접기 / 펼치기 단추: 카드 오른쪽 위에 늘 떠 있다. 화살표가 카드가 움직일 쪽을 가리킨다 */
.sheetgrip{display:none}
.cardtoggle{position:sticky;top:10px;margin:10px 12px -40px auto;z-index:6;width:30px;height:30px;border:0;border-radius:8px;background:rgba(0,0,0,.25);display:grid;place-items:center} /* 카드를 내려 읽어도 늘 보이게 sticky (자리는 차지하지 않게 아래 여백을 뺀다). 모바일 시트 손잡이(z 5)보다 위 — 손잡이가 단추를 덮어 눌리지 않았다 */
.scene.peek .cardtoggle{position:absolute;top:17px;right:12px;margin:0;background:var(--panel2)}
.scene.peek .cardbar{padding-right:54px}
.cardtoggle svg{width:20px;height:20px;fill:none;stroke:var(--gold2);stroke-width:2.4;stroke-linecap:round;stroke-linejoin:round;transform:rotate(180deg);transition:transform .3s} /* 넓은 화면: 펼친 카드는 위로 접힌다(▲), 접힌 카드는 아래로 펼친다(▼) */
.cardtoggle.folded svg{transform:none}
.is-walking .cardbar b::before{content:var(--walking,'👣 걷는 중 · ');font-family:var(--sans);font-size:12px;color:var(--gold)}

/* 걷는 사람 */
.walker{pointer-events:none}
.wglow{fill:var(--period);opacity:.28}
.wbody{fill:#fff6dc;stroke:var(--period);stroke-width:3}
.wicon{font-size:11px;text-anchor:middle;fill:#3a2810;font-weight:700}
.walker.moving .wfig{animation:bob .42s ease-in-out infinite alternate}
.walker.moving .wglow{animation:glow 1.2s ease-in-out infinite alternate}
@keyframes bob{from{transform:translateY(0)}to{transform:translateY(-3px)}}
@keyframes glow{from{opacity:.15}to{opacity:.4}}
.walker.arrive .wglow{animation:burst 1.1s ease-out;transform-box:fill-box;transform-origin:center}
@keyframes burst{0%{transform:scale(.6);opacity:.7}100%{transform:scale(3.2);opacity:0}}
.nexthint{fill:none;stroke:#5a4528;stroke-width:calc(var(--u,1) * 1.6px);stroke-dasharray:calc(var(--u,1) * 2px) calc(var(--u,1) * 7px);stroke-linecap:round;opacity:.55}
.is-walking .nexthint{display:none}
.walkbanner{position:absolute;top:14px;left:50%;transform:translate(-50%,-14px);opacity:0;transition:.4s;pointer-events:none;background:rgba(21,17,13,.88);border:1px solid rgba(var(--gold-rgb),.5);color:var(--ink);border-radius:999px;padding:9px 18px;font-size:14px;display:flex;align-items:center;gap:8px;white-space:nowrap;backdrop-filter:blur(6px);box-shadow:0 8px 30px rgba(0,0,0,.35);z-index:4}
.walkbanner.show{opacity:1;transform:translate(-50%,0)}
.walkbanner b{font-family:var(--serif);color:var(--gold2)}
.walkbanner small{color:var(--muted);font-size:12px;margin-left:4px}
.walkbanner .wk{font-size:16px}

/* map styling */
.relief{transition:opacity .6s}
.riverbank{fill:none;stroke:var(--oasis);stroke-width:11;stroke-linecap:round;stroke-linejoin:round;opacity:.55}
.relief .tile{opacity:0;transition:opacity .7s}
.relief .tile.ready{opacity:1}
.offmap{fill:var(--bg)} /* 지형 그림이 없는 바깥 — 카드 둘레 틈으로 보여도 맨바닥 대신 바탕색 */
.sea{opacity:1} /* 덜 덮으면 밑의 지형 그림 가장자리가 비쳐 밤에 바다에 세로줄이 보였다 */
.coast{fill:none;stroke:#f6efdc;stroke-width:1.6;vector-effect:non-scaling-stroke;opacity:.7}
.isle{fill:var(--land);stroke:#f6efdc;stroke-width:1.6;vector-effect:non-scaling-stroke;stroke-opacity:.7} /* 그림 바탕이 없는 섬(키프로스, 열왕기 여정) — 바탕 땅색에 해안선만 */
.lake{fill:var(--sea);stroke:#5f8a92;stroke-width:1;vector-effect:non-scaling-stroke}
.lake.dead{fill:#9cb6ad}
.river{fill:none;stroke:#6f9aa2;stroke-width:2.2;vector-effect:non-scaling-stroke;stroke-linecap:round}
/* 모세 여정의 옛 물: 갈대 늪은 옅게, 요단은 봄 추수 때 둑까지 넘친 굵은 물줄기로 (수 3:15) */
.lake.marsh{opacity:.55;stroke-dasharray:3 3}
/* 옛 물길(여정 지도의 waters — 지금은 말랐거나 모양이 달라진 호수·늪): 테두리 없이 가장자리를 풀어 지형 그림에 스며들게. 테두리를 그으면 덧대어 붙인 것처럼 보였다 */
.lake.old{stroke:none;filter:url(#lakeSoft);fill:var(--sea);opacity:.96}
.lake.old.marsh{opacity:.38}
#map.jflood .river.jordan{stroke-width:4.5;stroke:#5f93a0}
.jlm-detail{opacity:0;transition:opacity .5s}
.city3d{opacity:0;transition:opacity .8s;pointer-events:none}
.zoom-near .city3d.ready{opacity:1}
.zoom-city .jlm-detail{opacity:1}
.wall{fill:rgba(140,105,60,.16);stroke:#8a6b40;stroke-width:2;stroke-dasharray:6 3;vector-effect:non-scaling-stroke}
.valley{fill:none;stroke:#a68f66;stroke-width:5;opacity:.45;vector-effect:non-scaling-stroke;stroke-linecap:round}
.lbl text{font-family:var(--serif);text-anchor:middle;paint-order:stroke;stroke-linejoin:round}
.region text{font-size:15px;font-weight:600;letter-spacing:.4em;fill:#4a3820;stroke:rgba(245,236,212,.92);stroke-width:4.5px} /* 초록·갈색 지형 위에서도 묻히지 않게 진하게, 테두리는 두껍게 */
.sea-lbl text{font-size:16px;letter-spacing:.5em;fill:#e8f1ef;opacity:.75;font-style:italic}
.water-lbl text{font-size:11px;fill:#335d66;stroke:rgba(255,255,255,.5);stroke-width:2.5px;font-style:italic}
.river-lbl text{writing-mode:vertical-rl;letter-spacing:.2em}
/* 세로쓰기는 한·중·일 글자에만 — 로마자는 옆으로 누워 읽기 어렵다 */
html:not(:lang(ko)):not(:lang(zh)):not(:lang(ja)) .river-lbl text{writing-mode:horizontal-tb;letter-spacing:.05em}
.langpick{margin-right:2px;background:var(--panel2);color:var(--ink);border:1px solid var(--line);border-radius:999px;padding:6px 10px;font:inherit;font-size:12.5px}
.refcity circle{fill:#8f7c5c}
.refcity text{font-size:10.5px;fill:#4f4330;text-anchor:start;stroke:rgba(245,236,212,.92);stroke-width:3px}
.zoom-city .region,.zoom-city .refcity,.zoom-city .sea-lbl{opacity:0}
.zoom-far .lv{opacity:0} /* 지중해 지도(바울)를 멀리서 볼 때 레반트의 작은 물 이름 */
.medmap.zoom-vfar .refcity,.medmap.zoom-xfar .region,.medmap.zoom-xfar .pin:not(.now) text{opacity:0} /* 지중해 전체를 한 화면에: 이름이 서로 겹친다 */
.landmark{opacity:0;transition:opacity .8s;pointer-events:none}
.landmark.ready{opacity:1}
.nilebank{stroke-width:9;opacity:.6}
.river.nile{stroke-width:2.6}
#map.prologue .river{stroke:#3f86b0;stroke-width:4} /* 에덴의 강들은 또렷한 푸른색으로 */
.route{fill:none;stroke:var(--c);stroke-width:calc(var(--u,1) * 2.6px);stroke-linecap:round;stroke-dasharray:1;stroke-dashoffset:1;opacity:0;transition:opacity .4s}
.route.done{opacity:.38;stroke-dashoffset:0}
.route.last{opacity:.95}
.route.walking{opacity:.95;stroke-width:calc(var(--u,1) * 3.4px);filter:drop-shadow(0 0 calc(var(--u,1) * 5px) var(--c))} /* 걷는 길은 시기 색으로 은은히 빛난다 */
.pin{cursor:pointer}
.pin .dot{fill:#fff8e6;stroke:#6b5434;stroke-width:1.2;opacity:.28}
.pin .halo{fill:none}
.pin text{font-family:var(--serif);font-size:12.5px;fill:#3b2a14;paint-order:stroke;stroke:rgba(246,238,216,.92);stroke-width:3.2px;stroke-linejoin:round;opacity:0;font-weight:700}
.pin.seen .dot{opacity:1;fill:#fff3d1;stroke:#8a5a22}
.pin.seen text{opacity:1}
.pin.jlm text{opacity:0}
.zoom-city .pin.jlm.seen text{opacity:1}
.pin.jlm:not(.seen) .dot{opacity:0}
.zoom-city .pin.jlm .dot{opacity:.6}
.pin.now .dot{fill:var(--period);stroke:#fff;stroke-width:2;opacity:1}
.pin.now text{opacity:1;font-size:15px;fill:#24170a}
.pin.now .halo{fill:var(--period);opacity:.35;animation:pulse 2.2s ease-out infinite;transform-box:fill-box;transform-origin:center}
.is-reading .pin.now .halo{animation:none;opacity:0}
@keyframes pulse{0%{transform:scale(.4);opacity:.6}100%{transform:scale(1.8);opacity:0}}
.maptools{position:absolute;top:16px;left:16px;display:flex;align-items:center;gap:8px;z-index:2}
.placechip{display:flex;align-items:center;gap:9px;border:1px solid rgba(var(--gold-rgb),.35);background:rgba(20,16,11,.82);color:var(--ink);border-radius:14px;padding:10px 16px 10px 12px;backdrop-filter:blur(6px);box-shadow:0 8px 24px rgba(0,0,0,.3)}
.placechip svg{width:22px;height:22px;color:var(--gold)}
.placechip b{font-family:var(--serif);font-size:19px;letter-spacing:.04em;white-space:nowrap}
.placechip .chev{font-size:20px;color:var(--muted);margin-left:4px}
.mapbtn{border:1px solid rgba(60,45,25,.25);background:rgba(250,244,228,.86);color:#3b2a14;border-radius:999px;padding:7px 13px;font-size:12px;backdrop-filter:blur(4px)}
.odo{position:absolute;top:66px;left:16px;z-index:2;background:rgba(21,17,13,.78);color:#f3e3bf;border:1px solid rgba(var(--gold-rgb),.35);border-radius:999px;padding:5px 12px;font-size:12px;font-variant-numeric:tabular-nums;letter-spacing:.01em;backdrop-filter:blur(4px);pointer-events:auto;white-space:nowrap}
.mapbtn.active{background:#3b2a14;color:#f6e7c4}
.mapbtn:disabled{opacity:.4;cursor:default}
/* 자막: 지금 읽는 문장을 지도 아래쪽 가운데에 (장면 카드에 가리지 않는 영역) */
.caption{position:absolute;left:0;right:calc(min(460px,42%) + 28px);bottom:18px;margin:0 auto;width:fit-content;max-width:min(680px,calc(100% - min(460px,42%) - 60px));text-align:center;padding:12px 30px 14px;border-radius:12px;background:linear-gradient(90deg,rgba(14,11,8,0),rgba(14,11,8,.78) 18%,rgba(14,11,8,.78) 82%,rgba(14,11,8,0));opacity:0;transform:translateY(8px);transition:opacity .35s,transform .35s;pointer-events:none;z-index:3}
.caption.show{opacity:1;transform:none}
.caption p,.caption p span{text-wrap:balance}
.caption p span{display:block}
:lang(ko) .caption p{word-break:keep-all} /* 한국어는 낱말 안에서 끊지 않는다 (중·일은 띄어쓰기가 없어 그대로) */
.caption small{display:block;font-size:12.5px;color:var(--gold2);letter-spacing:.08em}
.caption .cline{display:none;width:28px;height:1px;margin:5px auto 6px;background:var(--gold)}
.caption.who .cline{display:block}
.caption p{margin:0;font-family:var(--serif);font-size:21px;line-height:1.5;color:#fbf2dc;text-shadow:0 2px 12px #000;display:-webkit-box;-webkit-line-clamp:3;-webkit-box-orient:vertical;overflow:hidden}

/* 3D 지형 모드 (terrain.js) */
.terrain3d{position:absolute;inset:0;display:none;touch-action:none;cursor:grab;transition:filter 1.6s}
.terrain3d:active{cursor:grabbing}
.terrain-on .terrain3d{display:block}
.terrain-on #fitAll{display:none}
/* 축척 막대: 2D 지도의 확대에 맞춰 길이와 숫자가 바뀐다(applyView). 3D 지형은 원근이라 한 길이로 잴 수 없어 감춘다 */
.scalebar{position:absolute;left:16px;bottom:14px;z-index:2;display:flex;flex-direction:column;align-items:flex-start;gap:3px;pointer-events:none;color:#f3e3bf;font-size:11px;font-variant-numeric:tabular-nums;text-shadow:0 1px 3px rgba(0,0,0,.85);transition:bottom .3s}
.scalebar i{display:block;height:6px;border:2px solid #f3e3bf;border-top:0;box-shadow:0 1px 3px rgba(0,0,0,.6);width:60px}
.terrain-on .scalebar,.stage-only .scalebar{display:none}
.tlabels{position:absolute;inset:0;pointer-events:none;display:none;overflow:hidden}
.terrain-on .tlabels{display:block}
.tlabel{position:absolute;left:0;top:0;display:flex;flex-direction:column;align-items:center;transition:opacity .3s;white-space:nowrap}
.tlabel i{width:9px;height:9px;border-radius:50%;background:#fff6dc;border:2px solid #8a6b3a;margin-top:-5px}
.tlabel span{margin-top:4px;transform:translateX(0);font-family:var(--serif);font-size:13.5px;font-weight:700;color:#fff8e6;text-shadow:0 0 2px rgba(0,0,0,.95),0 0 2px rgba(0,0,0,.95),0 1px 5px rgba(0,0,0,.85),0 0 12px rgba(0,0,0,.55)} /* 밝은 지형 위에서도 글자 둘레가 끊기지 않게 짧은 그림자를 겹친다 */
.tlabel.now i{width:14px;height:14px;background:var(--gold2);border-color:#fff;box-shadow:0 0 14px var(--gold)}
.tlabel.now span{font-size:18px;color:var(--gold2)}
.tlabel.feature span{font-size:13px;font-weight:600;color:#f4f8f9;letter-spacing:.15em}
.tlabel.ref span{font-size:12px;font-weight:600;color:#f6eedc}
.tlabel.region span{font-size:14px;font-weight:600;letter-spacing:.3em;color:#fff8e6}
.tlabel.place:not(.now) span{font-size:13px}
/* 지도 조작기: 오른쪽 위가 장면 카드라 왼쪽 가장자리 가운데에 세로로 */
/* 3D 지형을 불러오는 동안: 지도는 살짝 어둡게, 3D 단추 글자 대신 도는 고리 (어느 화면에서나 보이고 인물을 가리지 않게) */
.m3load{position:absolute;inset:0;display:none;z-index:2;pointer-events:none;background:rgba(20,16,11,.18)}
.terrain-loading .m3load{display:block}
.mapctl .m3{position:relative}
.terrain-loading #mode3d{color:transparent}
.terrain-loading #mode3d::after{content:'';position:absolute;inset:10px;border-radius:50%;border:2.5px solid rgba(40,28,12,.22);border-top-color:#2a1d0e;animation:m3spin .9s linear infinite}
@keyframes m3spin{to{transform:rotate(360deg)}}
@media (prefers-reduced-motion: reduce){.terrain-loading #mode3d::after{animation-duration:2.4s}}
.mapctl{position:absolute;left:16px;top:50%;transform:translateY(-50%);display:flex;flex-direction:column;align-items:center;gap:8px;z-index:3}
.mapctl button{width:40px;height:40px;border-radius:12px;border:1px solid rgba(var(--gold-rgb),.35);background:rgba(20,16,11,.82);color:var(--gold2);font-size:16px;backdrop-filter:blur(6px);display:grid;place-items:center;padding:0}
.mapctl svg{width:20px;height:20px;display:block}
.mapctl .m3 svg{width:22px;height:22px}
.mapctl .m3.active{background:linear-gradient(180deg,var(--gold-hi),var(--gold-deep));color:#24180a;border-color:transparent}
.mapctl .m3:disabled{opacity:.35;cursor:default;border-color:rgba(var(--gold-rgb),.35)}
.m3tools{display:none;flex-direction:column;gap:6px}
.terrain-on .m3tools{display:flex}
/* 컴퓨터의 2D 지도에도 확대·축소(+/−)는 늘 둔다 — 휠로는 카드가 굴러 지도를 키울 길이 없었다. 나머지 조작은 3D에서만 */
body:not(.terrain-on) .m3tools{display:flex}
body:not(.terrain-on) .m3tools button:not([data-k="in"]):not([data-k="out"]){display:none}
.stage-only .m3tools{display:none!important}
.m3tools button{width:34px;height:34px}
.m3tools svg{width:18px;height:18px}
.mapctl button:hover{border-color:rgba(240,215,154,.7)}
.m3tools button:nth-child(2n+1){margin-bottom:6px} /* 색 끄기 하나, 그 아래 기울이기·돌리기·확대를 두 개씩 묶어 보이게 */
.m3tools button[aria-pressed="true"]{background:var(--gold2);color:#1a140e;border-color:var(--gold2)}

/* scene */
.hero{position:relative;margin:18px 18px 0;height:230px;border-radius:12px;overflow:hidden;border:1px solid #4a3c2c}
.hero-img{position:absolute;inset:0;border:0;padding:0;margin:0;background:#000;display:block;width:100%}
/* 명화는 천천히 밀려가며 확대·축소를 오간다 (켄 번스). 밀리는 방향(--kx, --ky)은 장면마다 다르게 app.js가 정한다 */
.hero-img img{width:100%;height:100%;object-fit:cover;object-position:center 30%;animation:kenburns 30s ease-in-out infinite alternate;opacity:.95;will-change:transform}
@keyframes kenburns{from{transform:scale(1.14) translate(var(--kx,0%),var(--ky,0%))}to{transform:scale(1.06) translate(0,0)}} /* 1.06 밑으로는 그림 가장자리의 밝은 테두리가 보인다 */
.hero-img.placeholder{display:grid;place-items:center;background:radial-gradient(circle at 50% 30%,color-mix(in srgb,var(--period) 55%,#000),#120e0a 75%)}
.hero-img.placeholder span{font-family:var(--serif);font-size:48px;color:rgba(255,255,255,.18);letter-spacing:.2em}
.credrow{display:flex;align-items:center;gap:10px;padding:10px 18px 0}
.credit{flex:1;min-width:0;font-size:11px;color:var(--faint);text-decoration:none;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.credit:hover{color:var(--muted)}
.viewbtn{flex:none;border:1px solid #6a5636;background:none;border-radius:999px;padding:6px 13px;font-size:12px;color:var(--gold2)}
.hero-text{padding:12px 22px 0}
.hero-text .eyebrow{display:flex;align-items:center;gap:8px;color:var(--gold2);font-size:10.5px}
.pdot{width:9px;height:9px;border-radius:50%;background:var(--period);box-shadow:0 0 10px var(--period)}
.hero-text h1{font-family:var(--serif);font-size:30px;line-height:1.2;margin:8px 0 6px;font-weight:700;color:#f6ead0}
.subtitle{margin:0;font-family:var(--serif);font-size:16px;color:#cdbd9c}
.ctabs{display:flex;margin:16px 18px 0;border-bottom:1px solid #3a3026;position:sticky;top:0;z-index:3;background:rgba(21,17,13,.97)}
.ctabs button{flex:1;border:0;background:none;padding:12px 6px;font-size:15px;color:var(--muted);position:relative}
.ctabs button.active{color:var(--gold2);font-weight:700}
.ctabs button.active::after{content:'';position:absolute;left:12%;right:12%;bottom:-1px;height:3px;border-radius:3px;background:linear-gradient(90deg,var(--gold-deep),var(--gold2),var(--gold-deep))}
.pane{padding-bottom:8px}
.pad{margin-left:22px;margin-right:22px}
.cardfoot{position:sticky;bottom:0;padding:14px 18px 16px;background:linear-gradient(rgba(21,17,13,0),rgba(21,17,13,.98) 35%)}
.goldbtn{width:100%;border:0;border-radius:14px;padding:15px 18px;font-size:16px;font-family:var(--serif);color:#2a1d0c;background:linear-gradient(180deg,var(--gold-hi),var(--gold-deep));box-shadow:0 6px 20px rgba(var(--gold-deep-rgb),.25),inset 0 1px 0 rgba(255,255,255,.35)}
.goldbtn:hover{filter:brightness(1.06)}
.credit{margin:0;padding:2px 22px 0;font-size:10.5px;color:var(--faint)}
.credit a{color:inherit;text-decoration:none}.credit a:hover{color:var(--muted)}
.meta{display:flex;flex-wrap:wrap;gap:8px 18px;padding:14px 22px 0;color:var(--muted);font-size:13px}
.meta i{font-style:normal;color:var(--faint)}
.gospels{display:grid;grid-template-columns:repeat(4,1fr);gap:6px;padding:12px 22px 0}
.g{border:1px solid var(--line);border-radius:10px;padding:7px 9px;display:flex;flex-direction:column;gap:2px;opacity:.38}
.g b{font-size:12px}.g small{font-size:11px;color:var(--muted)}
.g.on{opacity:1;border-color:color-mix(in srgb,var(--period) 60%,var(--line));background:color-mix(in srgb,var(--period) 12%,transparent)}
.story{padding:16px 22px 4px;font-family:var(--serif);font-size:17px;line-height:1.95;color:#eadfca}
.story p{margin:0 0 16px;transition:background .3s,color .3s;border-radius:6px}
.story .prayer-para{margin:4px 0 16px;padding:14px 16px 4px;border:1px solid rgba(var(--gold-rgb),.35);border-left:3px solid var(--gold);background:rgba(var(--gold-rgb),.07);border-radius:4px 12px 12px 4px} /* 영접 기도 문단 (skeleton의 prayer) */
.story .prayer-para h4{margin:0 0 6px;font:600 12px var(--sans);letter-spacing:.1em;color:var(--gold)}
.story .prayer-para p{margin:0 0 12px;color:#f6ead2}
.story p:first-child::first-letter{font-size:2.6em;float:left;line-height:.9;margin:6px 8px 0 0;color:var(--gold)}
.speaking{background:rgba(var(--gold-rgb),.13);box-shadow:0 0 0 6px rgba(var(--gold-rgb),.13);color:#fff8e9!important}
.words-sec{padding:6px 22px 8px}
.words-sec h3,.note h4,.reflect h4,.quizcard h4{font-size:12px;letter-spacing:.2em;color:var(--gold);margin:14px 0 12px;font-weight:700}
.word{margin:0 0 12px;padding:18px 20px 12px;border-radius:14px;background:linear-gradient(135deg,#2a2219,#1f1913);border:1px solid #3d3227;position:relative;transition:box-shadow .3s}
.word.jesus{border-left:3px solid var(--gold)}
.word.jesus p{font-family:var(--serif);font-size:20px;line-height:1.7;color:#fff1d2;margin:0}
.word.jesus p::before{content:'“';color:var(--gold);font-size:1.5em;line-height:0;margin-right:2px;vertical-align:-.25em}
.word.jesus p::after{content:'”';color:var(--gold);font-size:1.5em;line-height:0;margin-left:2px;vertical-align:-.25em}
.word.other{background:transparent;border-style:dashed}
.word.other p{font-family:var(--serif);font-size:16px;line-height:1.7;color:#d8ccb4;margin:0}
.word footer{display:flex;align-items:center;gap:10px;margin-top:8px;font-size:12px;color:var(--muted)}
.word footer span{font-weight:700;color:var(--gold2)}
.word cite{font-style:normal}
.say{margin-left:auto;border:1px solid var(--line);background:none;border-radius:999px;width:32px;height:32px;font-size:13px}
.say:hover{border-color:var(--gold)}
/* 복음의 중심(바울 여정, 장면 몇 곳): 설명과 같은 상자에 여정 색 테두리 — 교리 요점 한두 문장 */
.core{margin:10px 22px;padding:4px 20px 14px;border-radius:14px;border:1px solid rgba(var(--gold-rgb),.45);background:rgba(var(--gold-rgb),.07)}
.core h4{font-size:12px;letter-spacing:.2em;color:var(--gold);margin:14px 0 12px;font-weight:700}
.core p{margin:0;line-height:1.75;color:#e6dac2;font-size:14.5px}
.note,.reflect{margin:10px 22px;padding:4px 20px 14px;border-radius:14px;border:1px solid var(--line);background:var(--panel)}
.note p,.reflect p{margin:0;line-height:1.75;color:#d7cbb4;font-size:14.5px}
.reflect{background:linear-gradient(135deg,color-mix(in srgb,var(--period) 18%,var(--panel)),var(--panel))}
.reflect p{font-family:var(--serif);font-size:17px;color:#f3e6c8}
.quizcard{margin:10px 22px;padding:4px 20px 18px;border-radius:14px;border:1px solid var(--line);background:var(--panel)}
.quizcard .q{font-size:16px;font-weight:500;line-height:1.6;margin:0 0 12px}
.star{color:var(--gold)}
.opts{display:grid;grid-template-columns:1fr;gap:8px}
.opts button{border:1px solid var(--line);background:var(--panel2);border-radius:10px;padding:11px 12px;text-align:left;line-height:1.4;transition:border-color .2s,background .2s}
.opts button:hover:not(:disabled){border-color:var(--gold)}
.opts button:disabled{cursor:default;opacity:.6}
.opts button.right{border-color:#7fb07a;background:rgba(127,176,122,.18);opacity:1}
.opts button.wrong{border-color:#c4675b;background:rgba(196,103,91,.16);opacity:1}
.explain{margin:12px 0 0;font-size:13.5px;line-height:1.7;color:#d8ccb5}
.explain b{color:var(--gold2);display:block;margin-bottom:2px}

/* dock — 왼쪽 시기 시간선, 가운데 재생, 오른쪽 걷기와 퀴즈 */
.track{flex:1;min-width:0;display:flex;align-items:flex-end;gap:0;overflow-x:auto;scrollbar-width:none;padding:2px 0}
.track::-webkit-scrollbar{display:none}
.tseg{flex:1 1 0!important;display:flex;flex-direction:column;align-items:center;min-width:38px;position:relative}
.ticon{border:0;background:none;padding:0 0 2px;color:color-mix(in srgb,var(--c) 55%,#3a2f22);height:26px;transition:color .3s}
.ticon svg{width:22px;height:22px;fill:none;stroke:currentColor;stroke-width:1.5;stroke-linejoin:round;stroke-linecap:round}
/* 시기마다 사복음서 대조표와 같은 색(--c, PERIODS.color). 지금 시기는 밝게 빛나고, 다녀간 장면의 점은 그 색으로 채운다 */
.tseg.now .ticon{color:color-mix(in srgb,var(--c) 75%,#fff);filter:drop-shadow(0 0 6px var(--c))}
.tline{width:100%;display:flex;align-items:center;justify-content:space-around;height:14px;position:relative}
.tline::before{content:'';position:absolute;left:1px;right:1px;top:50%;height:2px;margin-top:-1px;border-radius:1px;background:color-mix(in srgb,var(--c) 38%,#211a12)}
.tseg.now .tline::before{background:color-mix(in srgb,var(--c) 70%,#211a12);box-shadow:0 0 6px color-mix(in srgb,var(--c) 50%,transparent)}
.tick{position:relative;flex:none;width:5px;height:5px;border-radius:50%;border:0;background:color-mix(in srgb,var(--c) 30%,#2a2118);padding:0;transition:transform .2s}
.tick.seen{background:color-mix(in srgb,var(--c) 80%,#fff)}
.tick.now{width:14px;height:14px;background:radial-gradient(circle,#fff6dc 30%,var(--c) 31%,var(--c) 55%,transparent 56%);box-shadow:0 0 0 3px color-mix(in srgb,var(--c) 40%,transparent),0 0 14px var(--c)}
.tick:hover{transform:scale(1.6)}
/* 시간 막대 맨 앞의 프롤로그(첫 아담) 단추 — 작은 나무 */
.tpro{flex:none;align-self:center;border:0;background:none;padding:0 6px 14px 0;color:#7a6a4e;width:30px;height:40px;transition:color .3s}
.tpro svg{width:20px;height:20px;fill:none;stroke:currentColor;stroke-width:1.5;stroke-linecap:round;stroke-linejoin:round}
.tpro.now{color:#e9cf8f;filter:drop-shadow(0 0 6px rgba(var(--gold-rgb),.7))}
/* 프롤로그: 지도 위에 걷는 사람·다음 길 표시가 없다 */
#map.prologue .walker,#map.prologue .nexthint{display:none}
#map:not(.prologue) .lbl.meso{display:none} /* 에덴 둘레 지명은 프롤로그에서만 */
.prologue-on .odo,[data-journey=goodnews] .odo{display:none} /* 아직 걷기 전, 걸은 거리를 세지 않는 여정 */
/* 시기 이름은 지금 시기만 (여덟 개를 다 쓰면 좁은 칸에서 겹친다 — 나머지는 그림에 마우스를 올리면 보인다) */
.tname{font-size:11.5px;color:color-mix(in srgb,var(--c) 70%,#fff);font-weight:700;white-space:nowrap;margin-top:5px;visibility:hidden;height:15px}
.tseg.now .tname{visibility:visible}
.controls{flex:none;display:flex;align-items:center;gap:14px}
.ibtn{width:36px;height:36px;border:0;background:none;color:var(--gold);padding:6px}
.ibtn svg{width:100%;height:100%}
.ibtn:disabled{opacity:.3}
.ibtn.music{padding:8px}
.ibtn.music[aria-pressed="true"] .slash{display:none}
.ibtn.music[aria-pressed="false"]{opacity:.55}
.ibtn[hidden]{display:none}
.play{width:58px;height:58px;border-radius:50%;border:1.5px solid var(--gold);background:radial-gradient(circle at 40% 35%,#2c2318,#120e0a);color:var(--gold2);display:grid;place-items:center;padding:0;box-shadow:0 0 18px rgba(var(--gold-rgb),.18)}
.play svg{width:24px;height:24px;grid-area:1/1}
.play .i-pause,.play.on .i-play{display:none}
.play.on .i-pause{display:block}
.switch{display:flex;align-items:center;gap:9px;font-size:13px;color:var(--muted);cursor:pointer}
.switch input{position:absolute;opacity:0;width:0;height:0}
.switch i{width:40px;height:22px;border-radius:999px;background:#2c241b;border:1px solid #4a3c2c;position:relative;transition:.25s}
.switch i::after{content:'';position:absolute;left:2px;top:2px;width:16px;height:16px;border-radius:50%;background:#8a7a62;transition:.25s}
.switch input:checked+i{background:#5a4526;border-color:var(--gold)}
.switch input:checked+i::after{left:20px;background:var(--gold2)}
.switch input:focus-visible+i{outline:2px solid var(--gold);outline-offset:2px}
.rate{background:var(--panel);border:1px solid var(--line);border-radius:10px;padding:7px 8px;font-size:13px}
.walk .lbl-s{display:none}
.walkback{display:none;align-items:center;justify-content:center;flex:none;width:46px;align-self:stretch;border-radius:14px;border:1.5px solid rgba(var(--gold-deep-rgb),.6);background:rgba(var(--gold-deep-rgb),.08);color:var(--gold-hi);padding:0}
.walkback svg{width:22px;height:22px}.walkback:disabled{opacity:.35}
.walk{display:flex;align-items:center;gap:9px;border-radius:14px;padding:13px 22px;border:0;background:linear-gradient(180deg,var(--gold-hi),var(--gold-deep));color:#24180a;font-weight:700;font-size:15px;white-space:nowrap;box-shadow:0 6px 18px rgba(var(--gold-deep-rgb),.25)}
.walk:disabled{opacity:.35}
.is-walking .walk{opacity:.6}
.qcard{display:flex;align-items:center;gap:10px;border:1px solid #4a3c2c;background:linear-gradient(135deg,#221b13,#16110c);border-radius:14px;padding:9px 14px;text-align:left}
.qcard .laurel{width:30px;height:30px;color:var(--gold);flex:none}
.qcard small{display:block;font-size:11px;color:var(--muted)}
.qcard b{font-family:var(--serif);font-size:17px;color:var(--ink)}
.qcard .chev{color:var(--muted);font-size:18px}
.qcard.done{border-color:var(--gold)}
.quiz-dlg{max-width:min(520px,94vw);padding:22px}
.quiz-dlg .quizcard{margin:0;border:0;background:none;padding:0}
.quiz-dlg .eyebrow{color:var(--c)}

/* list views */
.list-view{max-width:980px;margin:0 auto;padding:30px 20px 80px}
.list-head h2{font-family:var(--serif);font-size:34px;margin:8px 0 8px}
.list-head p{color:var(--muted);line-height:1.7;margin:0 0 16px;max-width:680px}
.list-head input{width:100%;max-width:440px;background:var(--panel);border:1px solid var(--line);border-radius:999px;padding:11px 18px;outline:none}
.list-head input:focus{border-color:var(--gold)}
.count{color:var(--faint);font-size:12px}
.empty{color:var(--muted);padding:30px;text-align:center}
.psep{font-family:var(--serif);font-size:20px;color:var(--c);margin:34px 0 12px;padding-bottom:8px;border-bottom:1px solid var(--line)}
.psep small{font-family:var(--sans);font-size:12px;color:var(--faint);margin-left:6px}
.wcard{padding:16px 18px 10px;border-left:3px solid var(--c);background:var(--panel);border-radius:4px 14px 14px 4px;margin-bottom:10px;transition:box-shadow .3s}
.wcard p{font-family:var(--serif);font-size:18px;line-height:1.7;margin:0;color:#fbefd5}
.wcard mark{background:rgba(var(--gold-rgb),.35);color:inherit;border-radius:3px}
.wcard footer{display:flex;flex-wrap:wrap;align-items:center;gap:6px 12px;margin-top:8px;font-size:12px;color:var(--muted)}
.wcard cite{font-style:normal;color:var(--gold2)}
.goto{border:0;background:none;color:var(--gold);font-size:12px}
.wcard .say{margin-left:auto}
/* 하루 한 장 (잠언): 아버지의 한마디와 31칸 (읽은 장은 금빛, 오늘은 테두리) */
.daily-note{margin:18px 0 6px;padding:14px 18px;border-radius:14px;background:rgba(var(--gold-rgb),.08);border:1px solid rgba(var(--gold-rgb),.25)}
.daily-note small{color:var(--gold2);font-size:12px;letter-spacing:.08em}
.daily-note p{font-family:var(--serif);font-size:17px;line-height:1.7;margin:6px 0 0;color:#f3e6cc}
.daily-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(44px,1fr));gap:8px;margin-top:26px}
.daily-grid button{height:44px;border-radius:12px;border:1px solid var(--line);background:var(--panel);color:var(--muted);font:600 15px var(--sans);cursor:pointer}
.daily-grid button.read{background:rgba(var(--gold-rgb),.28);color:#fbefd5}
.daily-grid button.today{border-color:var(--gold);color:var(--gold2)}
.daily-grid button.on{outline:2px solid var(--gold);outline-offset:2px}
.chips{display:flex;flex-wrap:wrap;gap:6px}
.chips button{border:1px solid var(--line);background:none;border-radius:999px;padding:6px 13px;font-size:13px;color:var(--muted)}
.chips button.active{background:var(--gold);color:#22180b;border-color:var(--gold);font-weight:700}
.stats{display:grid;grid-template-columns:repeat(5,1fr);gap:8px;margin:22px 0}
.stats div{background:var(--panel);border:1px solid var(--line);border-radius:12px;padding:12px;position:relative;overflow:hidden}
.stats b{font-family:var(--serif);font-size:28px;color:var(--gold2);display:block}
.stats span{font-size:12px;color:var(--muted)}
.stats i{position:absolute;left:0;bottom:0;height:3px;background:var(--gold)}
.tablewrap{overflow-x:auto;border:1px solid var(--line);border-radius:14px}
#harmonyTable{border-collapse:collapse;width:100%;min-width:560px;font-size:13px}
#harmonyTable th{position:sticky;top:0;background:#1f1913;text-align:left;padding:10px 12px;font-size:12px;color:var(--gold);letter-spacing:.1em}
#harmonyTable td{padding:9px 12px;border-top:1px solid #2c241c;color:var(--faint);white-space:nowrap}
#harmonyTable td:first-child{white-space:normal}
#harmonyTable td b{display:block;color:var(--ink);font-weight:500}
#harmonyTable td small{color:var(--faint);font-size:11px}
#harmonyTable td.on{color:var(--gold2);background:rgba(var(--gold-rgb),.08)}
#harmonyTable tbody tr[data-e]{cursor:pointer}
#harmonyTable tbody tr[data-e]:hover td{background:rgba(255,255,255,.04)}
.psep-row td{color:var(--c)!important;font-family:var(--serif);font-size:15px;padding-top:16px!important;background:#18130f}
.pgrid{display:grid;grid-template-columns:repeat(auto-fill,minmax(210px,1fr));gap:12px}
.pcard{position:relative;text-align:left;border:1px solid var(--line);background:linear-gradient(160deg,color-mix(in srgb,var(--c) 22%,var(--panel)),var(--panel) 65%);border-radius:16px;padding:18px;display:flex;flex-direction:column;gap:4px}
.pcard small{font-size:10px;letter-spacing:.16em;color:var(--c);font-weight:700}
.pcard b{font-family:var(--serif);font-size:20px}
.pcard>span{font-size:12px;color:var(--muted)}
.pcard em{font-style:normal;font-size:12px;color:var(--muted)}
.bar{height:5px;border-radius:9px;background:#2f271e;margin-top:10px;overflow:hidden}
.bar i{display:block;height:100%;background:var(--c)}
.stamp{position:absolute;top:14px;right:14px;width:38px;height:38px;border-radius:50%;border:2px dashed color-mix(in srgb,var(--c) 70%,transparent);display:grid;place-items:center;font-size:14px;color:var(--c);font-weight:700}
.pcard.done .stamp{border-style:solid;background:var(--c);color:#1a130b;transform:rotate(-12deg)}
.bigbtn{margin-top:20px;border:0;border-radius:999px;padding:13px 24px;background:linear-gradient(135deg,#e8c77d,var(--gold-deep));color:#24180a;font-weight:700}
.textbtn{border:0;background:none;color:var(--gold);padding:10px 0;font-size:13px}
.qrun{margin:0;max-width:640px}
.qtop{display:flex;justify-content:space-between;color:var(--faint);font-size:12px;padding:14px 0 10px}
.qrun .eyebrow{color:var(--c)}
.qrun .q{font-size:19px;font-family:var(--serif);margin:10px 0 16px}
.qnav{display:flex;justify-content:space-between;align-items:center}
.qnav .bigbtn{margin-top:12px}
.qresult{text-align:center;padding:40px 10px}
.qresult .big{font-family:var(--serif);font-size:64px;color:var(--gold2)}
.qresult p{color:var(--muted);font-size:16px}

/* dialogs */
dialog{background:var(--panel);color:var(--ink);border:1px solid var(--line);border-radius:18px;padding:26px;max-width:min(560px,92vw)}
dialog::backdrop{background:rgba(5,4,3,.75);backdrop-filter:blur(3px)}
.close{position:absolute;top:10px;right:12px;border:0;background:none;font-size:26px;color:var(--muted);width:36px;height:36px}
.close:focus-visible{outline:none;color:var(--gold2)} /* 창을 열면 × 단추가 저절로 초점을 받아 노란 테두리가 떴다 — 테두리 대신 글자색으로 */
dialog{position:fixed}
.viewer{max-width:min(1100px,96vw);max-height:94vh;padding:14px;background:#0c0a08}
.viewer img{display:block;max-width:100%;max-height:82vh;margin:0 auto;border-radius:6px;cursor:zoom-out} /* 그림을 한 번 더 누르면 닫힌다 */
.viewer p{font-size:12px;color:var(--muted);text-align:center;margin:10px 0 0}
.stamps-dlg h2{font-family:var(--serif);margin:6px 0 16px}
.stampgrid{display:grid;grid-template-columns:repeat(4,1fr);gap:12px}
.stampcell{text-align:center;display:flex;flex-direction:column;align-items:center;gap:4px}
.stampcell .seal{width:62px;height:62px;border-radius:50%;border:2px dashed color-mix(in srgb,var(--c) 70%,transparent);display:grid;place-items:center;color:var(--c);font-size:13px;font-weight:700}
.stampcell.done .seal{background:var(--c);color:#1a130b;border-style:solid;font-size:24px;transform:rotate(-10deg);box-shadow:0 0 16px color-mix(in srgb,var(--c) 50%,transparent)}
.stampcell b{font-size:12px;font-family:var(--serif)}
.stampcell small{font-size:10.5px;color:var(--faint)}
.stamps-dlg #reopenEnd{margin-right:22px}
.favline{font-size:13px;color:var(--gold2);margin:14px 0 0;font-family:var(--serif)}
/* 여정을 마치며 — 가운데 맞춘 축하, 걸어온 길, 도장, 그리고 복음과 축복으로 맺는다 */
.end-dlg{max-width:min(660px,94vw);max-height:92vh;overflow-y:auto;padding:34px 30px 30px;text-align:center;word-break:keep-all;
  background:radial-gradient(ellipse at 50% 0%,rgba(var(--gold-rgb),.18),transparent 55%),var(--panel)}
.end-dlg h2{font-family:var(--serif);font-size:30px;margin:10px 0 8px;color:#f6ead0}
.endlead{color:var(--muted);line-height:1.7;margin:0 0 20px}
.endword{margin:0 auto 24px;max-width:500px;padding:16px 20px;border-top:1px solid #4a3c2c;border-bottom:1px solid #4a3c2c}
.endword p{font-family:var(--serif);font-size:18px;line-height:1.7;color:var(--gold2);margin:0 0 6px}
.endword cite,.end-dlg cite{font-style:normal;font-size:12px;color:var(--faint);white-space:nowrap}
.endstats{display:grid;grid-template-columns:repeat(3,1fr);gap:10px;margin:0 0 22px}
.endstats div{border:1px solid #3a3026;border-radius:12px;padding:12px 6px;background:rgba(255,255,255,.02)}
.endstats b{display:block;font-family:var(--serif);font-size:26px;color:#f6ead0}
.endstats b small{font-size:13px;color:var(--faint);margin-left:2px}
.endstats span{font-size:12px;color:var(--muted)}
.endstamps{margin:0 0 20px}
.endquiz{display:flex;flex-wrap:wrap;align-items:center;justify-content:center;gap:10px 14px;margin:0 0 22px}
.endquiz span{color:var(--muted);font-size:14px}
.endquiz.sealed span{color:var(--gold2);font-family:var(--serif);font-size:16px}
.endquiz.sealed i{font-style:normal;width:42px;height:42px;border-radius:50%;display:grid;place-items:center;background:linear-gradient(180deg,var(--gold-hi),var(--gold-deep));color:#24180a;font-size:20px;transform:rotate(-12deg);box-shadow:0 0 18px rgba(var(--gold-rgb),.5)}
.endquiz .goldbtn{width:auto;padding:10px 18px}
.endfav{display:flex;flex-direction:column;align-items:center;gap:8px;margin:0 0 30px;font-size:14px;color:var(--muted)}
.endfav select{max-width:100%;background:var(--panel2);border:1px solid #4a3c2c;border-radius:10px;padding:8px 12px}
.end-dlg h3{font-family:var(--serif);font-size:19px;color:var(--gold2);margin:0 0 12px}
.end-dlg section p{line-height:1.85;margin:0 0 10px}
.gospel{text-align:left;padding:22px 22px 12px;border-radius:14px;background:rgba(var(--gold-rgb),.07);border:1px solid rgba(var(--gold-rgb),.25);margin:0 0 14px}
.gospel h3{text-align:center}
.invite{text-align:left;padding:22px 22px 12px;border-radius:14px;border:1px solid #3a3026;background:rgba(255,255,255,.02);margin:0 0 14px}
/* 축복은 엔딩 — 가운데 맞춘 명조로 한 줄씩 */
.blessing{padding:26px 18px 14px;margin:0 0 26px}
.blessing p{font-family:var(--serif);font-size:17px;line-height:1.8;color:#f1e3c3;margin:0 0 12px}
.blessing p:last-child{color:var(--gold2)}
.prayer{margin:12px 0 10px;padding:12px 14px;border-left:2px solid var(--gold);background:rgba(var(--gold-rgb),.06);border-radius:0 10px 10px 0}
.prayer h4{margin:0 0 6px;font-size:12px;letter-spacing:.08em;color:var(--gold)}
.prayer p{font-family:var(--serif);font-size:14.5px;line-height:1.8;margin:0;color:#f1e3c3}
.endbtns{display:flex;flex-direction:column;align-items:center;gap:8px}
/* 다음 여정 후원 — 홈페이지와 같은 점선 상자. 여정을 마치며 창에서는 축복 뒤, 맨 아래 단추 위에 차분하게 */
.next-dlg{width:min(560px,94vw);max-height:92vh;overflow-y:auto;word-break:keep-all}
.nextbox{text-align:left;padding:20px 20px 18px;border:1.5px dashed rgba(var(--gold-rgb),.45);border-radius:16px;background:rgba(var(--gold-rgb),.04);margin:0 0 26px}
.next-dlg .nextbox{margin:0;padding:0;border:0;background:none} /* 창 안에서는 창이 테두리 — 점선 상자를 겹쳐 그리지 않고 × 자리를 비운다 */
.next-dlg .nextbox h3{padding-right:30px}
.nextbox h3{font-family:var(--serif);font-size:19px;color:var(--gold2);margin:0 0 8px;text-align:left}
.nextbox>p{font-size:14px;line-height:1.75;color:var(--muted);margin:0 0 14px}
.nextgrid{display:grid;grid-template-columns:1fr 1fr;gap:8px;margin:0 0 14px}
.nextgrid div{border:1px solid #3a3026;border-radius:12px;padding:10px 12px;background:rgba(255,255,255,.02)}
.nextgrid b{display:block;font-family:var(--serif);color:var(--gold2);font-size:15px}
.nextgrid span{font-size:12.5px;line-height:1.55;color:var(--muted)}
.nextbtns{display:flex;flex-wrap:wrap;gap:8px}
.nextbtns a{flex:1 1 auto;text-align:center;text-decoration:none;border-radius:999px;padding:10px 16px;font-size:14px;border:1px solid var(--gold);color:var(--gold2)}
.nextbtns a.kakao{background:linear-gradient(180deg,var(--gold-hi),var(--gold-deep));color:#24180a;border-color:transparent;font-weight:700}
@media (max-width:420px){.nextgrid{grid-template-columns:1fr}}
.endbtns .goldbtn{width:auto;padding:13px 26px}
@media (max-width:600px){.end-dlg{padding:30px 18px 24px}.end-dlg h2{font-size:25px}.endstats b{font-size:21px}}
.toast{position:fixed;left:50%;top:70px;transform:translate(-50%,-12px);background:#2b2218;border:1px solid var(--gold);color:var(--gold2);padding:11px 18px;border-radius:999px;font-size:13px;opacity:0;transition:.35s;pointer-events:none;z-index:50;max-width:90vw;text-align:center}
.toast.show{opacity:1;transform:translate(-50%,0)}

/* mobile */
@media (max-width:900px){
  /* 모바일 아래 시트: 펼친 시트는 아래로 내린다(▼), 접힌 시트는 위로 올린다(▲) */
  .cardtoggle svg{transform:none}
  .cardtoggle.folded svg{transform:rotate(180deg)}
  .top{height:auto;flex-wrap:wrap;padding:8px 12px 0;gap:6px 10px}
  .brand small{display:none}
  .brand b{font-size:21px}
  .brand .logo{width:26px;height:26px}
  .tabs{order:3;width:100%;margin:0;height:38px;justify-content:space-around}
  .tabs button{flex:1;padding:0 4px;font-size:14px}
  .progress{margin-left:auto}
  .pbar{width:64px}
  .journey{height:calc(100dvh - 92px)}
  /* 하단 시트: 기본은 지도 아래 절반(무대가 위에 크게 보이게), 글을 읽을 때는 끝까지(full), 접으면 제목줄 */
  .scene{top:auto;left:0;right:0;bottom:0;width:auto;max-height:48%;border-radius:20px 20px 0 0;border-bottom:0;transition:max-height .45s cubic-bezier(.2,.8,.2,1),opacity .4s}
  .scene.full{max-height:calc(100% - 10px);z-index:5} /* 다 펼치면 지도 단추·거리 표시 위로 올라와 닫기 단추가 가려지지 않게 */
  .scene.peek{bottom:0;top:auto;max-height:64px}
  .sheetgrip{display:block;position:sticky;top:0;height:22px;margin-bottom:-22px;z-index:5;touch-action:none;cursor:grab}
  .sheetgrip i{display:block;width:38px;height:4px;border-radius:2px;background:rgba(232,220,196,.35);margin:7px auto 0}
  .scene.peek .sheetgrip{display:none}
  .scene.peek .cardbar{touch-action:none}
  .scene:not(.full) .hero{height:96px}
  /* 반만 연 시트는 단추가 탭을 덮지 않게 글 끝으로 보내고 출처 줄은 숨긴다 — 끝까지 올리면 다시 보인다 */
  .scene:not(.full) .cardfoot{position:static}
  .scene:not(.full) .credrow{display:none}
  .hero{height:130px;margin:12px 14px 0}
  .hero-text{padding:10px 16px 0}
  .hero-text h1{font-size:24px}
  .ctabs{margin:12px 14px 0}
  .maptools{top:10px;left:10px}
  .placechip{padding:7px 12px 7px 9px}
  .placechip b{font-size:16px}
  .mapbtn{padding:6px 10px;font-size:11px}
  .odo{top:56px;left:10px;font-size:11px;padding:4px 10px}
  .walkbanner{top:88px;font-size:12.5px;padding:7px 14px;max-width:94vw}
  .walkbanner small{display:none}
  .mapctl{left:auto;right:10px;top:10px;transform:none}
  /* 모바일은 손가락으로 끌고 벌려 보므로 단추는 3D 켜기와 색 끄기만 */
  .terrain-on .m3tools button:not([data-k="plain"]){display:none}
  body:not(.terrain-on) .m3tools{display:none}
  /* 모바일은 자막을 띄우지 않는다 — 좁은 지도에서 무대를 가리고, 낭독을 듣는 것으로 충분하다 */
  .caption{display:none}
  .credit,.meta,.gospels,.story,.words-sec{padding-left:16px;padding-right:16px}
  .note,.reflect,.pad{margin-left:16px;margin-right:16px}
  .story{font-size:17px;line-height:1.9}
  .word.jesus p{font-size:18px}
  .dock{flex-direction:column;align-items:stretch;gap:6px;padding:6px 10px calc(8px + env(safe-area-inset-bottom))}
  .tseg{min-width:30px}
  .tname{font-size:10.5px}
  #skip,#prev{display:none}
  .walkback{display:flex} /* 휴대폰: '다음 장소로 걷기' 앞에 이전 장소로 가는 작은 단추 (사용자) */
  .qcard b{display:none}
  .controls{justify-content:space-between;gap:6px}
  .switch .lbl,.rate,.qcard small,.qcard .chev{display:none}
  .play{width:48px;height:48px}
  .walk{padding:11px 14px;font-size:14px;flex:1;justify-content:center;min-width:0}
  .walk .lbl{overflow:hidden;text-overflow:ellipsis}
  .walk .lbl{display:none}.walk .lbl-s{display:inline} /* 휴대폰은 짧은 이름 '다음 장소로'(시편 '다음 노래') — 좁아도 글씨가 보이게 (사용자) */
  .walk{gap:6px;padding:11px 12px}
  .qcard{padding:8px 10px}
  .qcard b{font-size:14px}
  .stats{grid-template-columns:repeat(3,1fr)}
  .stampgrid{grid-template-columns:repeat(2,1fr)}
  .list-head h2{font-size:28px}
}
/* 아이폰 SE처럼 좁은 폰: 다른 단추를 줄여 '다음 장소로' 글씨가 들어가게 */
@media (max-width:389px){.controls{gap:4px}.play{width:42px;height:42px}.walkback{width:36px}.music{width:30px}.qcard{padding:6px 7px}.walk{padding:10px 9px;font-size:13.5px;gap:4px}.walk>span[aria-hidden]{display:none}.qcard .laurel{width:24px;height:24px}}
@media (prefers-reduced-motion:reduce){*{animation:none!important;transition:none!important}}

/* ---------- 랜딩페이지 (첫 시작 화면) ---------- */
.intro{position:fixed;inset:0;z-index:50;overflow-y:auto;overscroll-behavior:contain;
  background:radial-gradient(ellipse at 50% 18%,rgba(var(--gold-rgb),.16),transparent 55%),linear-gradient(180deg,rgba(21,17,13,.75),rgba(21,17,13,.97) 75%),url(assets/relief.webp) center top/cover fixed;
  transition:opacity .5s,visibility .5s}
.intro.out{opacity:0;visibility:hidden}
/* 랜딩이 떠 있는 동안 뒤 화면은 그리지도 움직이지도 않는다 (창은 랜딩에서 연 영상이라 남긴다) */
body.intro-open>:not(.intro):not(dialog):not(script):not(.toast){visibility:hidden}
body.intro-open *{animation-play-state:paused}
body.intro-open .intro,body.intro-open .intro *{animation-play-state:running}
:lang(ko) .intro{word-break:keep-all} /* 한국어는 낱말 중간에서 줄을 바꾸지 않게 (중·일은 띄어쓰기가 없어 그대로) */
.intro section{max-width:640px;margin:0 auto;padding:0 20px;text-align:center}
.land-hero{min-height:100svh;display:flex;flex-direction:column;align-items:center;justify-content:center;padding-top:32px!important;padding-bottom:24px!important;animation:introIn .9s ease-out both}
@keyframes introIn{from{opacity:0;transform:translateY(12px)}}
.intro-logo{width:104px;height:104px;filter:drop-shadow(0 0 28px rgba(232,196,120,.35))}
.intro h1{margin:14px 0 4px;font-family:var(--serif);font-size:44px;font-weight:700;letter-spacing:.24em;color:var(--gold2);text-indent:.24em}
.intro-tag{margin:0 0 22px;font-family:var(--serif);font-size:16px;color:var(--gold);letter-spacing:.06em}
.intro-lead{margin:0 auto 28px;max-width:480px;font-size:15.5px;line-height:1.85;color:var(--ink);text-wrap:balance}
.intro-lead span{display:inline-block;opacity:0;animation:leadIn 1.4s cubic-bezier(.2,.7,.2,1) var(--d,0s) forwards} /* 어절마다 차례로 살며시 */
@keyframes leadIn{from{opacity:0;transform:translateY(6px);filter:blur(4px)}to{opacity:1;transform:none;filter:none}}
.intro-go{display:flex;flex-direction:column;align-items:center;gap:12px;width:100%} /* 단추 max-width:100%가 화면 폭을 기준으로 잡히게 — 긴 장면 제목이 넘치지 않고 말줄임 */
.intro-btn{min-width:260px;max-width:100%;padding:15px 28px;border:0;border-radius:999px;background:linear-gradient(180deg,var(--gold-hi),var(--gold-deep));color:#24180a;font-family:var(--serif);font-size:17px;font-weight:700;cursor:pointer;box-shadow:0 8px 28px rgba(185,138,62,.3);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.intro-btn:hover{filter:brightness(1.06)}
.intro-btn small{display:block;margin-top:3px;font-size:13px;font-weight:400;opacity:.8;overflow:hidden;text-overflow:ellipsis} /* 이어서 걷기의 장면 이름 */
.intro-link{border:0;background:none;color:var(--muted);font-size:14px;text-decoration:underline;text-underline-offset:3px;cursor:pointer;padding:6px}
.land-down{margin-top:30px;display:flex;flex-direction:column;align-items:center;gap:2px;color:var(--muted);font-size:13px;text-decoration:none}
.land-down svg{width:22px;height:22px;fill:none;stroke:currentColor;stroke-width:1.8;stroke-linecap:round;stroke-linejoin:round;animation:landBob 1.8s ease-in-out infinite}
@keyframes landBob{50%{transform:translateY(4px)}}
.land-sec{padding-top:44px!important;padding-bottom:20px!important}
/* 그 길 시리즈: 지금 여정은 금빛 테두리, 준비된 여정은 링크, 준비 중인 여정은 흐리게 (누르면 후원 안내) */
/* 여정 카드 (그 길 시리즈): 여정의 색(li의 data-journey가 --gold를 바꾼다) 아이콘·이름·소개·장면 수, 아래에 들어가기와 공유 */
.series{list-style:none;margin:0;padding:0;display:grid;grid-template-columns:repeat(auto-fit,minmax(250px,1fr));gap:12px;text-align:left}
.jcard{display:grid;grid-template-columns:56px 1fr;grid-template-rows:auto auto;gap:12px 14px;padding:16px;border:1px solid #3a3026;border-radius:16px;background:linear-gradient(160deg,rgba(var(--gold-rgb),.09),rgba(255,255,255,.015) 60%)}
.jcard.now{border-color:var(--gold)}
.jcard.soon{opacity:.7;background:rgba(255,255,255,.02)}
.jicon{width:56px;height:56px;border-radius:14px;box-shadow:0 0 22px rgba(var(--gold-rgb),.25)}
.jtext{display:flex;flex-direction:column;gap:3px;min-width:0}
.jtext b{font-family:var(--serif);font-size:18px;color:var(--gold2)}
.jtext small{font-size:13px;line-height:1.5;color:var(--muted)}
.jtext em{font-style:normal;font-size:11.5px;letter-spacing:.04em;color:var(--gold);margin-top:2px}
.jbtns{grid-column:1/-1;display:flex;flex-wrap:wrap;gap:8px;align-items:center}
.jgo{flex:1;min-width:0;display:inline-flex;justify-content:center;align-items:center;padding:10px 14px;border-radius:999px;border:0;background:linear-gradient(180deg,var(--gold2),var(--gold));color:#1b140c;font:600 14px var(--sans);text-decoration:none;cursor:pointer;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.jcard.soon .jgo{background:transparent;border:1px solid #4a3e30;color:var(--muted)}
.jagain{flex-basis:100%;order:3;background:none;border:0;color:var(--muted);font:13px var(--sans);text-decoration:underline;cursor:pointer;padding:2px 0}
.jshare{display:inline-flex;align-items:center;gap:6px;padding:9px 13px;border-radius:999px;border:1px solid rgba(var(--gold-rgb),.45);background:transparent;color:var(--gold2);font:13px var(--sans);cursor:pointer}
.jshare svg{width:16px;height:16px;fill:none;stroke:currentColor;stroke-width:1.8}
.jgo:hover{filter:brightness(1.08)}.jshare:hover{background:rgba(var(--gold-rgb),.1)}
.land-list{display:inline-block;margin-top:18px;color:var(--gold2);font-family:var(--serif);font-size:15px;text-decoration:none;border-bottom:1px solid rgba(var(--gold-rgb),.4)}
.land-list:hover{color:#fff3d6}
.intro h2{margin:0 0 18px;font-family:var(--serif);font-size:22px;font-weight:700;color:var(--gold2);letter-spacing:.06em}
.intro-feat{list-style:none;margin:0;padding:0;display:grid;grid-template-columns:1fr 1fr;gap:12px;text-align:left}
.intro-feat li{display:grid;grid-template-columns:30px 1fr;column-gap:10px;align-items:start;padding:14px 14px 13px;border:1px solid var(--line);border-radius:14px;background:rgba(37,31,24,.6)}
.intro-feat svg{grid-row:span 2;width:26px;height:26px;fill:none;stroke:var(--gold2);stroke-width:1.6;stroke-linecap:round;stroke-linejoin:round;margin-top:1px}
.intro-feat b,.land-steps b{font-family:var(--serif);font-size:15px;color:var(--gold2)}
.intro-feat span,.land-steps span{font-size:13px;line-height:1.6;color:var(--muted)}
.land-steps{list-style:none;margin:0;padding:0;display:flex;flex-direction:column;gap:10px;text-align:left;counter-reset:s}
.land-steps li{display:grid;grid-template-columns:34px 1fr;column-gap:12px;padding:13px 14px;border-left:2px solid rgba(var(--gold-rgb),.5);background:linear-gradient(90deg,rgba(37,31,24,.65),rgba(37,31,24,.15));border-radius:0 12px 12px 0}
.land-steps i{grid-row:span 2;width:30px;height:30px;border-radius:50%;display:grid;place-items:center;font-style:normal;font-family:var(--serif);font-weight:700;color:#24180a;background:linear-gradient(180deg,var(--gold-hi),var(--gold-deep))}
.land-qna{display:inline-flex;flex-direction:column;align-items:center;gap:2px;margin-top:18px;padding:9px 18px;border:1px solid rgba(var(--gold-rgb),.45);border-radius:14px;background:rgba(var(--gold-rgb),.07);color:var(--muted);font-size:13px;line-height:1.5;text-decoration:none;max-width:min(92vw,440px)}
.land-qna span{word-break:keep-all;text-wrap:balance}
.land-qna b{color:var(--gold2);font-size:15px}
.land-qna[hidden]{display:none}
.land-share{display:inline-flex;align-items:center;gap:9px;margin-top:14px;border:0;background:none;color:var(--gold2);font-family:var(--serif);font-size:16.5px;padding:7px 12px;border-radius:999px;cursor:pointer} /* 테두리 없는 글씨 단추 — 예전보다 글씨·아이콘만 크게 */
.land-share svg{width:21px;height:21px;fill:none;stroke:currentColor;stroke-width:1.8;stroke-linecap:round}
.land-share:hover{background:rgba(var(--gold-rgb),.1);color:#fff3d6}
.land-share+.land-share{margin-top:2px}
.land-qna:hover{color:var(--ink);border-color:var(--gold);background:rgba(var(--gold-rgb),.12)}
.land-mv{display:inline-flex;align-items:center;gap:8px;margin-top:14px;padding:7px 16px 7px 12px;border:0;border-radius:999px;background:none;color:var(--gold2);font-family:var(--serif);font-size:15px;cursor:pointer}
.land-mv span{text-align:left;text-wrap:balance} /* 긴 언어(영어 등)에서 두 줄이 되어도 ▶가 글 바로 옆에 붙게 */
.land-mv svg{flex:none;width:22px;height:22px;padding:5px;border-radius:50%;fill:#24180a;background:linear-gradient(180deg,var(--gold-hi),var(--gold-deep))}
.land-mv:hover{color:#fff3d6}
/* 앱으로 설치하기 안내 */
.install-dlg{width:min(420px,92vw);text-align:center;word-break:keep-all}
.install-icon{display:block;margin:4px auto 10px;border-radius:16px;box-shadow:0 6px 20px rgba(0,0,0,.4)}
.install-dlg h2{font-family:var(--serif);font-size:22px;margin:0 0 8px;color:var(--gold2)}
.install-lead{margin:0 0 20px;color:var(--muted);font-size:14px;line-height:1.7}
.install-steps{list-style:none;margin:0;padding:0;text-align:left;counter-reset:st}
.install-steps li{counter-increment:st;display:flex;align-items:center;gap:12px;padding:12px 0;border-top:1px solid #3a3026;font-size:15px;line-height:1.55}
.install-steps li::before{content:counter(st);flex:none;width:26px;height:26px;border-radius:50%;display:grid;place-items:center;background:linear-gradient(180deg,var(--gold-hi),var(--gold-deep));color:#24180a;font-size:13px;font-weight:700}
.install-steps li span{flex:1}
.install-steps svg{flex:none;width:28px;height:28px;padding:4px;border-radius:7px;background:rgba(255,255,255,.08);fill:none;stroke:#7fb2ff;stroke-width:1.8;stroke-linecap:round;stroke-linejoin:round}
.install-note{margin:14px 0 0;padding:10px 12px;border-radius:10px;background:rgba(var(--gold-rgb),.08);font-size:12.5px;line-height:1.6;color:var(--muted);text-align:left}
.install-dlg .goldbtn{margin-top:4px}
.install-out{display:block;margin-top:14px;text-decoration:none;text-align:center}
.install-dlg .fine{margin:10px 0 0;font-size:12.5px;color:var(--faint)}
.mv-dlg{width:min(1100px,94vw,(94vh - 100px)*16/9);max-width:none;max-height:94vh;padding:46px 14px 14px;background:#0c0a08} /* 닫기 단추가 영상을 가리지 않게 위를 띄운다 */
.mv-frame{position:relative;aspect-ratio:16/9;border-radius:6px;overflow:hidden;background:#000}
.mv-frame iframe{position:absolute;inset:0;width:100%;height:100%;border:0}
.mv-note{font-size:12px;color:var(--muted);text-align:center;margin:10px 0 0}
.mv-dlg[open] .mv-note{animation:mvNoteOut .8s ease 5s forwards} /* 몇 초 보이고 살며시 사라진다 (자리는 그대로 두어 영상이 들썩이지 않게). 다시 열면 처음부터 */
@keyframes mvNoteOut{to{opacity:0;visibility:hidden}}
.land-end{padding-top:48px!important;padding-bottom:28px!important}
.land-end .land-qna{margin:0 0 28px} /* 묻고 답하기는 '준비되셨나요?' 바로 위 */
.land-next{margin:40px auto 0;font-size:13px;color:var(--muted);display:flex;flex-direction:column;align-items:center;gap:4px}
.land-next button{border:0;background:none;color:var(--gold2);font-family:var(--serif);font-size:15px;padding:4px 8px;cursor:pointer}
.land-next button:hover{color:#fff3d6}
.land-next+.land-foot{margin-top:24px}
.land-foot{margin-top:44px;font-size:11.5px;letter-spacing:.06em}
.land-foot a{color:var(--faint);text-decoration:none}
.land-foot a:hover{color:var(--muted);text-decoration:underline}
@media (max-width:560px){
  .intro-logo{width:84px;height:84px}
  .intro h1{font-size:36px}
  .intro-feat{grid-template-columns:1fr;gap:9px}
  .intro-feat li{padding:11px 12px}
  }
@media (prefers-reduced-motion: reduce){.land-hero,.land-down svg{animation:none}.intro{transition:none}.intro-lead span{animation:none;opacity:1}}

/* 여정마다 테마색 (그 길 시리즈): 금빛 강조색을 여정의 색으로 바꾼다. <html data-journey>(app.js)와 시리즈 목록의 카드(li data-journey)에 걸린다
   예수 — 금빛, 출애굽(모세와 여호수아) — 광야의 구릿빛, 다윗 — 올리브 초록, 열왕기 — 왕의 자줏빛, 바울 — 지중해의 푸른빛 */
[data-journey=jesus]{--gold:#d9b46a;--gold2:#f0d79a;--gold-rgb:217,180,106;--gold-hi:#e9c97f;--gold-deep:#b88a3e;--gold-deep-rgb:184,138,62}
[data-journey=moses]{--gold:#dc8f5f;--gold2:#f3c29c;--gold-rgb:220,143,95;--gold-hi:#eaa679;--gold-deep:#a65a33;--gold-deep-rgb:166,90,51}
[data-journey=david]{--gold:#a9bf6a;--gold2:#d6e3a8;--gold-rgb:169,191,106;--gold-hi:#bccf82;--gold-deep:#6f8638;--gold-deep-rgb:111,134,56}
[data-journey=kings]{--gold:#b99ade;--gold2:#ddcdf3;--gold-rgb:185,154,222;--gold-hi:#cab0ea;--gold-deep:#7c58a8;--gold-deep-rgb:124,88,168}
[data-journey=goodnews]{--gold:#e58a7f;--gold2:#f4c3bb;--gold-rgb:229,138,127;--gold-hi:#eda197;--gold-deep:#a8473f;--gold-deep-rgb:168,71,63}
[data-journey=why]{--gold:#d97a6c;--gold2:#f2c4b8;--gold-rgb:217,122,108;--gold-hi:#e5958a;--gold-deep:#b0564a;--gold-deep-rgb:176,86,74}
[data-journey=paul]{--gold:#70b5da;--gold2:#bbdff3;--gold-rgb:112,181,218;--gold-hi:#8fc8e7;--gold-deep:#3e7fa8;--gold-deep-rgb:62,127,168}
[data-journey=psalms]{--gold:#5fb3a5;--gold2:#b5e0d8;--gold-rgb:95,179,165;--gold-hi:#7cc4b8;--gold-deep:#2f7d70;--gold-deep-rgb:47,125,112}
[data-journey=proverbs]{--gold:#d98fb0;--gold2:#f2c8da;--gold-rgb:217,143,176;--gold-hi:#e5a8c3;--gold-deep:#a2547a;--gold-deep-rgb:162,84,122}

/* 핵심 구절(기쁜 소식 여정): 무대 위쪽에 큰 글씨로 천천히 떠오른다 (app.js verseFollow) */
.verse-ov{position:absolute;left:50%;top:9%;transform:translate(-50%,8px);width:min(640px,86%);z-index:6;pointer-events:none;text-align:center;opacity:0;transition:opacity 1.2s ease,transform 1.2s ease}
.verse-ov.on{opacity:1;transform:translate(-50%,0)}
.verse-on #caption{opacity:0!important;visibility:hidden} /* 구절이 크게 떠 있는 동안 아래 자막은 숨긴다 (같은 문장) */
.verse-ov p{margin:0;font:600 clamp(19px,2.6vw,27px)/1.55 var(--serif);color:#fbf1d8;text-shadow:0 2px 14px rgba(0,0,0,.85),0 0 30px rgba(0,0,0,.6);word-break:keep-all}
@media (min-width:901px){.verse-ov{left:calc((100% - min(460px,42%)) / 2);width:min(560px,52%)}} /* 넓은 화면은 오른쪽 장면 카드를 비켜서 */
/* 보는 사람의 동작 단추: 무대 아래쪽 가운데, 숨 쉬듯 빛난다 */
.stage-prompt{position:absolute;left:50%;bottom:16%;transform:translateX(-50%) scale(.96);z-index:7;padding:14px 26px;white-space:nowrap;border-radius:999px;border:0;cursor:pointer;
  background:linear-gradient(180deg,#fbe9c0,#e2b766);color:#1b140c;font:700 17px var(--sans);box-shadow:0 0 0 0 rgba(240,215,154,.6),0 10px 30px rgba(0,0,0,.45);opacity:0;transition:opacity .8s,transform .8s}
.stage-prompt.on{opacity:1;transform:translateX(-50%) scale(1);animation:promptPulse 2.4s ease-in-out infinite}
@keyframes promptPulse{0%,100%{box-shadow:0 0 0 0 rgba(240,215,154,.55),0 10px 30px rgba(0,0,0,.45)}50%{box-shadow:0 0 0 14px rgba(240,215,154,0),0 10px 30px rgba(0,0,0,.45)}}
@media (max-width:900px){.stage-prompt{bottom:auto;top:62%}}

/* 무대만 보는 여정(기쁜 소식, journey.json의 stageOnly): 지도·경로·장소 단추를 숨기고 어두운 바탕에 무대 하나만 — 빛이 무대를 비추는 극장처럼 */
.stage-only .mapwrap{background:radial-gradient(ellipse 70% 65% at 38% 46%,#2b2219,#120e0a 62%,#0a0806)}
.stage-only #map,.stage-only .maptools,.stage-only #odo,.stage-only #mode3d,.stage-only .walkbanner{visibility:hidden}
@media (max-width:900px){.stage-only .mapwrap{background:radial-gradient(ellipse 90% 55% at 50% 34%,#2b2219,#120e0a 62%,#0a0806)}}

/* 그림으로 보는 장면(기쁜 소식): 그림이 화면을 가득 채우고 천천히 다가간다. 다음 그림은 겹쳐 넘어간다 (app.js paintShow) */
.paint{position:absolute;inset:0;z-index:1;overflow:hidden;isolation:isolate;background:#f3e6d2} /* 펜 선 그림(크림 종이) 밑에 따뜻한 빛이 천천히 흐르는 바탕 — 그림은 곱하기로 겹쳐 종이의 흰 곳에 빛깔이 스민다 */
/* 바탕 빛: 살구·장밋빛 두 덩이가 아주 천천히 자리를 바꾼다 (든든하고 부드럽게 — 40초에 한 번 오간다) */
.paint::before{content:'';position:absolute;inset:-25%;z-index:0;pointer-events:none;
  background:radial-gradient(40% 45% at 30% 35%,rgba(236,178,132,.55),transparent 70%),radial-gradient(45% 40% at 72% 68%,rgba(214,140,128,.38),transparent 70%),radial-gradient(60% 60% at 50% 50%,#f8eedd,#eedcc4);
  animation:paintGlow 40s ease-in-out infinite alternate}
@keyframes paintGlow{from{transform:translate(-4%,-3%) rotate(0deg) scale(1)}to{transform:translate(4%,3%) rotate(6deg) scale(1.08)}}
/* 위에서 내리는 숨 쉬는 빛 — 그림 위에 살짝 (9초에 한 번 차오르고 가라앉는다) */
.paint::after{content:'';position:absolute;inset:0;z-index:3;pointer-events:none;background:radial-gradient(70% 55% at 45% 0%,rgba(255,226,180,.38),transparent 70%);mix-blend-mode:soft-light;animation:paintBreath 9s ease-in-out infinite alternate}
@keyframes paintBreath{from{opacity:.35}to{opacity:1}}
.paint .pf{z-index:1;mix-blend-mode:multiply}
@media (prefers-reduced-motion:reduce){.paint::before,.paint::after{animation:none}}
.pf{position:absolute;inset:0;opacity:0;transition:opacity 1.6s ease}
.pf.on{opacity:1}
.pf img{position:absolute;inset:0;width:100%;height:100%;object-fit:cover}
.pim{transform-origin:50% 45%}
.pf.on .pim{animation:paintDrift 26s ease-out forwards}
@keyframes paintDrift{from{transform:scale(1.02)}to{transform:scale(1.12)}}
@media (min-width:901px){.pim{object-position:30% 50%}} /* 넓은 화면은 오른쪽 장면 카드에 가리는 만큼 그림을 왼쪽으로 */
/* 세로 화면(폰): 가로 그림을 꽉 채우면(cover) 가운데 40%만 남아 사람이 잘린다 — 그림 전체를 폭에 맞춰 보이고, 가장자리는 어둠 속으로 부드럽게 번지게 */
@media (max-aspect-ratio:1/1){
  .pf .pim{inset:0;margin:auto;height:auto;transform-origin:50% 50%;
    -webkit-mask-image:linear-gradient(transparent,#000 16%,#000 84%,transparent),linear-gradient(90deg,transparent,#000 6%,#000 94%,transparent);-webkit-mask-composite:source-in;
    mask-image:linear-gradient(transparent,#000 16%,#000 84%,transparent),linear-gradient(90deg,transparent,#000 6%,#000 94%,transparent);mask-composite:intersect}
  .pf.on .pim{animation-name:paintDriftS}
}
@keyframes paintDriftS{from{transform:scale(1.28)}to{transform:scale(1.46)}} /* 폰: 그림이 폭에 맞으면 작은 인물이 더 작아 보여 한 번 당겨 놓고, 낭독 동안 천천히 더 다가간다 (펜 그림은 가장자리가 비어 잘려도 괜찮다) */
.painted .verse-ov{top:7%}
.painted .verse-ov p{text-shadow:0 2px 16px rgba(0,0,0,.9),0 0 40px rgba(0,0,0,.65)}
/* 밝은 하늘 위에서도 읽히게 — 말씀 뒤에 반투명한 어두운 판 */
.painted .verse-ov{padding:12px 18px;border-radius:18px;background:rgba(16,11,7,.55);-webkit-backdrop-filter:blur(8px);backdrop-filter:blur(8px);box-shadow:0 8px 30px rgba(0,0,0,.3)}
/* 건넌 뒤 남는 '그 길' 로고 */
.paint-logo{position:absolute;left:50%;top:44%;transform:translate(-50%,-50%) scale(.94);z-index:6;display:flex;flex-direction:column;align-items:center;gap:8px;opacity:0;transition:opacity 2.6s ease,transform 2.6s ease;pointer-events:none;text-align:center}
.paint-logo.on{opacity:1;transform:translate(-50%,-50%) scale(1)}
.paint-logo img{width:118px;height:118px;filter:drop-shadow(0 0 24px rgba(255,214,150,.9))}
.paint-logo b{font:700 40px var(--serif);letter-spacing:.38em;text-indent:.38em;color:#3b3128;white-space:nowrap;text-shadow:0 0 18px #fdf8ec,0 0 6px #fdf8ec} /* 종이 위의 먹색 글씨 */
@media (max-width:900px){
  .paint-logo{width:88%}.paint-logo b{font-size:32px;letter-spacing:.24em;text-indent:.24em}
}
.paint-logo span{font:600 17px var(--serif);color:#5a4a3c;text-shadow:0 0 14px #fdf8ec}
@media (min-width:901px){.paint-logo{left:calc((100% - min(460px,42%)) / 2)}}

/* 시편: 부르는 줄을 지도 위 가운데에 크게, 앞뒤 줄은 흐리게 (app.js songPlay) */
.lyrics-ov{position:absolute;left:50%;top:50%;transform:translate(-50%,-50%);width:min(760px,90%);z-index:6;pointer-events:none;text-align:center;opacity:0;transition:opacity 1s ease}
.lyrics-ov.on{opacity:1}
/* 노래 재생 막대 (시편): 가사 아래, 끌어서 듣고 싶은 곳으로 */
.songbar{position:absolute;left:50%;bottom:22px;transform:translateX(-50%);width:min(520px,86%);z-index:7;display:flex;align-items:center;gap:10px;padding:8px 14px;border-radius:999px;background:rgba(20,16,11,.72);border:1px solid rgba(var(--gold-rgb),.3);backdrop-filter:blur(6px);color:#f0d79a;font-size:12px;font-variant-numeric:tabular-nums}
.songbar input{flex:1;accent-color:var(--gold);height:18px;margin:0;cursor:pointer}
@media (min-width:901px){.songbar{left:calc((100% - min(460px,42%)) / 2);width:min(520px,50%)}}
@media (max-width:900px){.songbar{top:calc(30% + 96px);bottom:auto;width:88%}}
.lyrics-ov p{margin:0;font-family:var(--serif);color:#fbf1d8;text-shadow:0 1px 3px rgba(0,0,0,.6),0 0 24px rgba(0,0,0,.45);word-break:keep-all;transition:opacity .4s}
.lyrics-ov .cur{font-weight:700;font-size:clamp(24px,3.6vw,40px);line-height:1.45;margin:.35em 0}
.lyrics-ov .cur.head{font-size:clamp(18px,2.4vw,26px);color:#f0d79a}
.lyrics-ov .prev,.lyrics-ov .next{font-size:clamp(15px,1.8vw,20px);line-height:1.5;opacity:.72;min-height:1.5em}
/* 노래하는 동안은 바탕 상자 없이 지도를 어둡게 가라앉혀 가사가 떠오르게 (둥근 얼룩·띠는 어설퍼 보였다 — 사용자) */
.no-3d #map{transition:filter 5s ease-in-out}
.singing #map{filter:brightness(.42) saturate(.6)} /* 노래가 시작되면 서서히 어두워지고, 끝나기 조금 전에 서서히 밝아진다 */
.singing #map text{opacity:.18}#map text{transition:opacity 5s ease-in-out} /* 지명 글씨는 가사와 겹쳐 지저분해 보여 노래하는 동안 거의 지운다 */
@media (min-width:901px){.lyrics-ov{left:calc((100% - min(460px,42%)) / 2);width:min(640px,54%)}} /* 넓은 화면은 오른쪽 장면 카드를 비켜서 */
.lyrics{padding:4px 2px}
.lyrics h5{margin:14px 0 4px;font:600 11px var(--sans);letter-spacing:.12em;color:#7f735f}
/* 가사: 부르는 동안에는 지금 줄만 밝게 — 네모 상자 대신 왼쪽 금빛 줄과 오른쪽으로 사라지는 은은한 빛, 다른 줄은 한 걸음 물러난다 */
.lyrics p{position:relative;margin:0;padding:3px 12px 3px 14px;font:16px/1.75 var(--serif);transform-origin:left center;transition:color .4s,opacity .4s,transform .4s,background .4s,text-shadow .4s}
.lyrics:has(p.speaking) p:not(.speaking){opacity:.5}
.lyrics p.speaking{color:var(--gold2)!important;background:linear-gradient(90deg,rgba(var(--gold-rgb),.16),rgba(var(--gold-rgb),0) 75%);box-shadow:none;text-shadow:0 0 16px rgba(var(--gold-rgb),.5);transform:scale(1.05)} /* 이야기 글의 .speaking(둘레 상자)을 덮어쓴다 */
.lyrics p.speaking::before{content:'';position:absolute;left:0;top:20%;bottom:20%;width:3px;border-radius:2px;background:linear-gradient(var(--gold2),rgba(var(--gold-rgb),.4));box-shadow:0 0 8px rgba(var(--gold-rgb),.7)}
.no-3d #mode3d{display:none}
@media (max-width:900px){.lyrics-ov{top:30%;width:92%}} /* 폰은 아래 장면 카드가 반쯤 덮으므로 보이는 지도 칸 가운데로 */

/* 다윗 여정: 장면에 이어 둔 시편 노래 (app.js psalmBox) */
.psalm-link{margin:14px 16px 4px;padding:12px 14px;border-radius:14px;border:1px solid rgba(var(--gold-deep-rgb),.35);background:rgba(var(--gold-deep-rgb),.07)}
.psalm-link h4{margin:0 0 8px;font:600 12px var(--sans);letter-spacing:.06em;color:var(--gold-hi)}
.psalm-link button{display:flex;align-items:center;gap:10px;width:100%;padding:10px 12px;border:0;border-radius:10px;background:rgba(var(--gold-deep-rgb),.16);color:inherit;font:600 15px var(--serif);text-align:left;cursor:pointer}
.psalm-link .pl-play{display:grid;place-items:center;width:28px;height:28px;border-radius:50%;background:var(--gold-hi);color:#1a140e;font-size:12px;flex:none}
.psalm-link .fine{margin:8px 0 0}
/* 바울의 편지 (journey.letters): 장면 카드의 '이 자리에서 쓴 편지'·'훗날 이 교회에 보낸 편지', 편지 탭, 지도의 편지 길 — app.js letterBox·renderLetters·showLetters */
.letters-here{margin:10px 22px;padding:4px 20px 8px;border-radius:14px;border:1px solid rgba(var(--gold-deep-rgb),.4);background:linear-gradient(160deg,rgba(var(--gold-deep-rgb),.12),rgba(var(--gold-deep-rgb),.03) 60%)}
.letters-here h4,.letters-later h4,.lcard h4{display:flex;align-items:center;gap:8px;font-size:12px;letter-spacing:.2em;color:var(--gold);margin:14px 0 12px;font-weight:700}
.lt-ico{width:16px;height:16px;flex:none;fill:none;stroke:currentColor;stroke-width:1.6;stroke-linejoin:round;stroke-linecap:round}
.lt+.lt{border-top:1px dashed rgba(var(--gold-rgb),.25);margin-top:6px;padding-top:14px}
.lt-name{display:block;font-family:var(--serif);font-size:21px;color:var(--gold2);letter-spacing:.02em}
.lt-route{margin:4px 0 0;font-size:13.5px;color:var(--ink)}
.lt-route span{color:var(--gold);margin:0 3px}
.lt-meta{margin:3px 0 0;font-size:12.5px;color:var(--muted)}
.lt-heart{margin:12px 0 10px;font-family:var(--serif);font-size:17px;line-height:1.7;color:#f3e6c8}
.lt-verses{list-style:none;margin:0;padding:0;display:grid;gap:8px}
.lt-verses li{padding:9px 12px 8px;border-left:2px solid rgba(var(--gold-rgb),.5);background:rgba(0,0,0,.14);border-radius:2px 10px 10px 2px}
.lt-verses p{margin:0;font-family:var(--serif);font-size:15px;line-height:1.7;color:#e9dcc1}
.lt-verses cite{display:block;margin-top:3px;font-style:normal;font-size:11.5px;color:var(--gold2)}
.lt-btn{display:inline-flex;align-items:center;gap:6px;margin:12px 0 8px;border:1px solid rgba(var(--gold-rgb),.45);background:none;border-radius:999px;padding:7px 14px;font-size:12.5px;color:var(--gold2);cursor:pointer}
.lt-btn::before{content:'';width:18px;height:0;border-top:2px dashed currentColor} /* 지도의 편지 길처럼 점선 */
.lt-btn:hover{border-color:var(--gold);background:rgba(var(--gold-rgb),.08)}
.letters-later{margin:10px 22px;padding:2px 16px 12px;border-radius:14px;border:1px solid var(--line);background:var(--panel)}
.letters-later h4{margin:12px 0 8px}
.lt-chips{display:flex;flex-wrap:wrap;gap:8px}
.lt-chips button{border:1px solid rgba(var(--gold-rgb),.35);background:rgba(var(--gold-rgb),.06);border-radius:999px;padding:6px 13px;font:600 14px var(--serif);color:var(--gold2);cursor:pointer}
.lt-chips button:hover{border-color:var(--gold)}
.lcard{padding:18px 22px 8px;border-left:3px solid var(--c);background:var(--panel);border-radius:4px 14px 14px 4px;margin-bottom:14px;scroll-margin-top:70px}
.lcard header h3{font-family:var(--serif);font-size:26px;margin:4px 0 2px;color:#fbefd5}
.lc-no{font-size:12px;color:var(--c);letter-spacing:.04em;font-weight:600}
.lcard .lt-heart{margin-top:0}
.lc-why{margin:0;line-height:1.75;color:#d7cbb4;font-size:14.5px}
.lc-view{margin:14px 0 0;padding:10px 14px;border:1px dashed var(--line);border-radius:10px;font-size:13px;line-height:1.65;color:var(--muted)}
.lc-view b{display:block;font-size:11.5px;letter-spacing:.14em;color:var(--faint);margin-bottom:2px}
.lc-btns{display:flex;flex-wrap:wrap;align-items:center;gap:6px 16px;margin-top:6px}
.lc-go{border:0;background:none;color:var(--gold);font-size:13px;padding:10px 0;cursor:pointer}
.lcard.flash{animation:lflash 1.6s ease-out}
@keyframes lflash{0%,30%{box-shadow:0 0 0 2px var(--gold),0 0 28px rgba(var(--gold-rgb),.35)}100%{box-shadow:0 0 0 0 transparent}}
@media (min-width:901px){.lcard{padding:22px 28px 10px}.lcard .lt-verses{grid-template-columns:repeat(3,1fr)}}
/* 지도의 편지 길: 걷는 길(시기 색 실선)과 달리 먹빛 점선이 받는 곳 쪽으로 흘러간다 */
.lr-halo{fill:none;stroke:rgba(250,242,222,.55);stroke-width:calc(var(--u,1) * 4.5px);stroke-linecap:round}
.lr{fill:none;stroke:#7a2f17;stroke-width:calc(var(--u,1) * 2px);stroke-linecap:round;stroke-dasharray:calc(var(--u,1) * 7px) calc(var(--u,1) * 6px);animation:lrflow 1.4s linear infinite}
@keyframes lrflow{to{stroke-dashoffset:calc(var(--u,1) * -13px)}}
#letterRoutes{pointer-events:none;animation:lrin .6s ease-out}
@keyframes lrin{from{opacity:0}}
.lr-dot{fill:#7a2f17;stroke:#faf2de;stroke-width:1.4}
.lr-scroll rect{fill:#f6ebcf;stroke:#7a2f17;stroke-width:1.6}
.lr-scroll path{fill:none;stroke:#7a2f17;stroke-width:1.4;stroke-linecap:round}
.lr-end .lr-name{font-size:13px;font-weight:700;fill:#6a2812;stroke:rgba(250,242,222,.95);stroke-width:3.4px}
.lr-end .lr-to{font-size:11px;fill:#3b2a14;stroke:rgba(250,242,222,.92);stroke-width:3px}
