.journey-renewal .story-webtoon{--page:#fff;--bubble-opacity:.97}
.journey-renewal .story-webtoon .panel{margin-top:14%}
.journey-renewal .story-webtoon .journey-opening{margin-top:0}
.journey-renewal .story-webtoon .journey-scene-01{margin-top:24%}
.journey-renewal .story-webtoon .journey-scene-03,.journey-renewal .story-webtoon .journey-scene-08{margin-top:24%;padding-top:6%}
.journey-renewal .story-webtoon .journey-scene-10,.journey-renewal .story-webtoon .journey-scene-11,.journey-renewal .story-webtoon .journey-scene-13{padding-top:15%}
.journey-renewal .story-webtoon .journey-scene-12,.journey-renewal .story-webtoon .journey-scene-14{margin-top:26%}
.journey-renewal .story-webtoon .journey-scene-17{margin-top:22%}
.journey-renewal .story-webtoon .journey-scene-18{margin-top:24%}
.journey-renewal .story-webtoon .journey-scene-20{margin-top:20%}
.journey-renewal .story-webtoon .bubble{box-shadow:none;--tail-base:2.5;--tail-bend:.35;--pen-pressure:1;--tail-max-length:5.5}
.journey-renewal .story-webtoon .bubble[data-speaker="모아"]{--paper:#fff8ec;--ink:#78533e;--bubble-drift:.15}
.journey-renewal .story-webtoon .bubble[data-speaker="서리"]{--paper:#f9faf3;--ink:#536653;--bubble-drift:.06;--pen-pressure:.9}
.journey-renewal .story-webtoon .bubble[data-speaker="유나"]{--paper:#faf6ff;--ink:#695675;--bubble-drift:.12}
.journey-renewal .story-webtoon .bubble[data-speaker="할머니"]{--paper:#fcfaf4;--ink:#776859;--bubble-drift:.06;--pen-pressure:.95}
.journey-renewal .story-webtoon .callout-text{position:absolute;left:var(--x);top:var(--y);width:var(--w);font-size:3.3cqw;font-weight:500;line-height:1.4;color:#69594b}
@media(max-width:600px){.journey-renewal .story-webtoon .callout-text{font-size:clamp(15px,4cqw,18px)}}

/* Cut only the artwork; dialogue and pointers stay outside the clipped layer. */
.journey-renewal .story-webtoon .panel{--journey-edge:8cqw}
.journey-renewal .story-webtoon .journey-opening{--journey-edge:10cqw}
.journey-renewal .story-webtoon .journey-cut-top-left .art{--tl:var(--journey-edge)}
.journey-renewal .story-webtoon .journey-cut-top-right .art{--tr:var(--journey-edge)}
.journey-renewal .story-webtoon .journey-cut-bottom-left .art{--bl:var(--journey-edge)}
.journey-renewal .story-webtoon .journey-cut-bottom-right .art{--br:var(--journey-edge)}
.journey-renewal .story-webtoon .journey-scene-05,.journey-renewal .story-webtoon .journey-scene-12,.journey-renewal .story-webtoon .journey-scene-16,.journey-renewal .story-webtoon .journey-scene-20{--journey-edge:10cqw}
.journey-renewal .story-webtoon .journey-scene-03,.journey-renewal .story-webtoon .journey-scene-14{--journey-edge:6cqw}
.journey-renewal .story-webtoon .journey-scene-17{--journey-edge:4cqw}

.journey-renewal .story-webtoon .bubble[data-speaker="소담"]{--paper:#fff8ef;--ink:#68503c;--bubble-drift:.16}
.journey-renewal .story-webtoon .bubble[data-speaker="봄담"]{--paper:#fff6f2;--ink:#855b56;--bubble-drift:.13;--pen-pressure:.95}
.journey-renewal[data-episode="journey-renewal-02"] .journey-02-scene-02{margin-top:36%}
.journey-renewal[data-episode="journey-renewal-02"] .journey-02-scene-04,.journey-renewal[data-episode="journey-renewal-02"] .journey-02-scene-09{margin-top:26%}
.journey-renewal[data-episode="journey-renewal-02"] .journey-02-scene-15{margin-top:28%}
.journey-renewal[data-episode="journey-renewal-02"] .journey-02-scene-16{margin-top:20%;--journey-edge:10cqw}
.journey-renewal[data-episode="journey-renewal-02"] .journey-02-scene-18{margin-top:20%;padding-top:10%}
.journey-renewal[data-episode="journey-renewal-02"] .journey-02-scene-21{margin-top:24%;padding-top:12%}
.journey-renewal[data-episode="journey-renewal-02"] .journey-02-scene-22{margin-top:28%;padding-top:12%;--journey-edge:5cqw}
.journey-renewal[data-episode="journey-renewal-02"] .journey-02-scene-02,.journey-renewal[data-episode="journey-renewal-02"] .journey-02-scene-09,.journey-renewal[data-episode="journey-renewal-02"] .journey-02-scene-14{--journey-edge:4cqw}
.journey-renewal[data-episode="journey-renewal-02"] .journey-02-scene-02 .callout-text,.journey-renewal[data-episode="journey-renewal-02"] .journey-02-scene-03 .callout-text{font-weight:500;text-align:center;white-space:nowrap;color:#65513d;line-height:1.2}
.journey-renewal[data-episode="journey-renewal-02"] .journey-02-scene-02 .callout-text{font-size:clamp(9px,2.3cqw,17px);white-space:pre-line}
.journey-renewal[data-episode="journey-renewal-02"] .journey-02-scene-03 .callout-text[data-i18n="forest"]{left:66%;top:26.5%;width:28%;aspect-ratio:5/2;font-size:0;color:transparent;background:url('/static/yeoul-forest-ko-v1.svg') center/contain no-repeat;transform:rotate(var(--tilt,0deg)) skewX(-2deg);transform-origin:center;mix-blend-mode:multiply;opacity:.92}
.journey-renewal[data-episode="journey-renewal-02"] .story-webtoon[lang="en"] .journey-02-scene-03 .callout-text[data-i18n="forest"]{background-image:url('/static/yeoul-forest-en-v1.svg')}
.journey-renewal[data-episode="journey-renewal-02"] .journey-02-scene-14,.journey-renewal[data-episode="journey-renewal-02"] .journey-02-scene-15{padding-top:14%}
.journey-renewal[data-episode="journey-renewal-02"] .journey-02-scene-07,.journey-renewal[data-episode="journey-renewal-02"] .journey-02-scene-11,.journey-renewal[data-episode="journey-renewal-02"] .journey-02-scene-17{padding-top:15%}
.journey-renewal[data-episode="journey-renewal-02"] .journey-02-scene-11{padding-top:0;padding-bottom:18%}
.journey-renewal[data-episode="journey-renewal-03"] .callout-text[data-i18n="poem"]{font-size:clamp(16px,4cqw,24px);line-height:1.6;text-align:center;transform:rotate(var(--tilt,0deg));color:#5c493d}

.journey-edition-tools{display:flex;align-items:center;justify-content:flex-end;flex-wrap:wrap;gap:12px;margin:0 0 20px;font:13px/1.6 var(--sans);color:var(--ink-2)}
.journey-edition-tools .line-btn{min-height:44px;display:inline-flex;align-items:center;gap:8px;padding:8px 14px;border-radius:8px}

/* Keep short dialogue compact; leave the scene's established speaking position intact. */
.journey-renewal:is([data-episode="journey-renewal-01"],[data-episode="journey-renewal-02"],[data-episode="journey-renewal-03"],[data-episode="journey-renewal-04"],[data-episode="journey-renewal-05"],[data-episode="journey-renewal-06"]) .story-webtoon .bubble{min-width:18cqw}
.journey-renewal:is([data-episode="journey-renewal-01"],[data-episode="journey-renewal-02"],[data-episode="journey-renewal-03"],[data-episode="journey-renewal-04"],[data-episode="journey-renewal-05"],[data-episode="journey-renewal-06"]) .story-webtoon .bubble[data-speaker="밤담"]{--paper:#f8f3ee;--ink:#685447}
.journey-renewal:is([data-episode="journey-renewal-01"],[data-episode="journey-renewal-02"],[data-episode="journey-renewal-03"],[data-episode="journey-renewal-04"],[data-episode="journey-renewal-05"],[data-episode="journey-renewal-06"]) .story-webtoon .bubble[data-speaker="별담"]{--paper:#fff9e9;--ink:#79643e}
.journey-renewal:is([data-episode="journey-renewal-01"],[data-episode="journey-renewal-02"],[data-episode="journey-renewal-03"],[data-episode="journey-renewal-04"],[data-episode="journey-renewal-05"],[data-episode="journey-renewal-06"]) .story-webtoon .bubble[data-speaker="달담"]{--paper:#f1f6fc;--ink:#53677d}
.journey-renewal:is([data-episode="journey-renewal-01"],[data-episode="journey-renewal-02"],[data-episode="journey-renewal-03"],[data-episode="journey-renewal-04"],[data-episode="journey-renewal-05"],[data-episode="journey-renewal-06"]) .story-webtoon .bubble[data-speaker="온담"]{--paper:#fff4ec;--ink:#825c46}
.journey-renewal:is([data-episode="journey-renewal-01"],[data-episode="journey-renewal-02"],[data-episode="journey-renewal-03"],[data-episode="journey-renewal-04"],[data-episode="journey-renewal-05"],[data-episode="journey-renewal-06"]) .story-webtoon .bubble[data-speaker="호담"]{--paper:#f8f5ed;--ink:#675a45}
.journey-renewal:is([data-episode="journey-renewal-01"],[data-episode="journey-renewal-02"],[data-episode="journey-renewal-03"],[data-episode="journey-renewal-04"],[data-episode="journey-renewal-05"],[data-episode="journey-renewal-06"]) .story-webtoon .bubble[data-speaker="결담"]{--paper:#eff8f6;--ink:#4d7169}

.journey-renewal[data-episode="journey-renewal-04"] .bubble:has(>span[data-i18n="whaleLook"]){left:52%;top:6%;max-width:46%}
.journey-renewal[data-episode="journey-renewal-04"] .bubble:has(>span[data-i18n="whaleSwimming"]){left:2%;top:10%;max-width:46%}
.journey-renewal[data-episode="journey-renewal-04"] .bubble:has(>span[data-i18n="whaleRemember"]){top:18%}
.journey-renewal[data-episode="journey-renewal-04"] .bubble:has(>span[data-i18n="whaleStay"]){top:23%}
.journey-renewal[data-episode="journey-renewal-02"] .journey-02-scene-15 .bubble{top:0}

/* The preceding scene has a long reply below the artwork. */
.journey-renewal[data-episode="journey-renewal-02"] .journey-02-scene-15{margin-top:clamp(180px,28cqw,240px)}
.journey-renewal[data-episode="journey-renewal-01"] :is(.journey-scene-03,.journey-scene-08,.journey-scene-09,.journey-scene-15,.journey-scene-19) .bubble{top:0}
.journey-renewal[data-episode="journey-renewal-02"] :is(.journey-02-scene-13,.journey-02-scene-14,.journey-02-scene-21,.journey-02-scene-22) .bubble{top:0}

.journey-renewal .story-webtoon .bubble[data-speaker="빛담"]{--paper:#fff4ed;--ink:#8a6553}

.journey-renewal[data-episode="journey-renewal-05"] .bubble:has(>span[data-i18n="dialogue06_3"]){top:37%}
.journey-renewal[data-episode="journey-renewal-06"] .bubble:has(>span[data-i18n="dialogue11_1"]),
.journey-renewal[data-episode="journey-renewal-06"] .bubble:has(>span[data-i18n="dialogue11_2"]){top:0}
/* 말풍선 줄바꿈: 줄 길이를 고르게 맞춰 한두 글자·한 단어만 외따로 떨어지지 않게 한다. */
.journey-renewal .story-webtoon .bubble{text-wrap:balance}
/* 시간 표지(밤 9시 등): 매일 같은 시각에 올라오는 일기를 알리는 중요한 키워드라 눈에 띄는 알약 모양으로 보여 준다. */
@keyframes time-mark-pop{0%{opacity:0;scale:.6;filter:blur(5px)}55%{opacity:1;scale:1.12;filter:blur(0)}100%{scale:1}}
@keyframes time-mark-glow{0%,100%{box-shadow:0 0 .6em #ffcf7a99,0 .15em .5em #0004}50%{box-shadow:0 0 1.5em #ffd98fcc,0 .15em .5em #0004}}
.journey-renewal .story-webtoon .panel.time-mark .callout-text{left:50%;width:auto;transform:translateX(-50%);padding:.22em .9em .28em;border-radius:999px;background:#241a38e6;color:#ffe9b0;border:1px solid #ffd98f8c;font-size:clamp(24px,10cqw,52px);font-weight:700;letter-spacing:.06em;line-height:1.25;white-space:nowrap;text-shadow:0 0 .5em #ffc86699;box-shadow:0 0 .8em #ffcf7a99,0 .15em .5em #0004}
.journey-renewal .story-webtoon .panel.time-mark .callout-text::before,.journey-renewal .story-webtoon .panel.time-mark .callout-text::after{content:"✦" / "";font-size:.5em;vertical-align:.45em;color:#ffd98f;margin:0 .45em}
.journey-renewal .story-webtoon .panel.time-mark .callout-text.sfx-play:not(.sfx-done){animation:time-mark-pop 1s ease-out backwards,time-mark-glow 1.6s ease-in-out 1s 2}
@media(prefers-reduced-motion:reduce){.journey-renewal .story-webtoon .panel.time-mark .callout-text{animation:none!important}}
/* 여행 4화 밤하늘 "반짝": 갈색 글씨가 어두운 하늘에 묻히지 않게 밝은 금빛 글씨와 보랏빛 외곽선, 은은한 빛으로 보여 준다. */
.journey-renewal[data-episode="journey-renewal-04"] .story-webtoon .panel.sfx-spark.sfx-light .story-sfx.callout-text{color:#fff3c4;-webkit-text-stroke-color:#3a2d5c;text-shadow:0 0 .35em #ffd98fcc,0 0 .9em #ffc86680;opacity:1}
/* 당황한 장면(.panic): 속마음 말풍선이 덜덜 떨리고 효과 글자가 크고 붉게 튄다. 인물 그림은 움직이지 않는다. */
@keyframes panic-bubble{0%,100%{translate:0 0;rotate:0deg}10%{translate:-.9cqw .3cqw;rotate:-1.6deg}22%{translate:1cqw -.3cqw;rotate:1.8deg}34%{translate:-.8cqw -.2cqw;rotate:-1.4deg}46%{translate:.9cqw .3cqw;rotate:1.5deg}58%{translate:-.6cqw 0;rotate:-1deg}72%{translate:.5cqw 0;rotate:.8deg}86%{translate:-.3cqw 0}}
@keyframes panic-sfx{0%{scale:.3;opacity:0}12%{scale:1.5;opacity:1}28%{scale:.92}44%{scale:1.18}60%{scale:1}}
.journey-renewal .story-webtoon .panel.panic .bubble{animation:panic-bubble .5s linear 4 paused}
.journey-renewal .story-webtoon .panel.panic.panic-in .bubble{animation-play-state:running}
.journey-renewal .story-webtoon .panel.panic .story-sfx.callout-text{font-size:clamp(34px,13cqw,80px);color:#ffe5d6;-webkit-text-stroke-color:#b3262d;text-shadow:0 0 .25em #ff6a5ccc;letter-spacing:.04em}
.journey-renewal .story-webtoon .panel.panic .story-sfx.sfx-play:not(.sfx-done){animation:panic-sfx .9s ease-out backwards}
@media(prefers-reduced-motion:reduce){.journey-renewal .story-webtoon .panel.panic .bubble,.journey-renewal .story-webtoon .panel.panic .story-sfx{animation:none!important}}
.journey-renewal[data-episode="journey-renewal-06"] .bubble:has(>span[data-i18n="dialogue13_1"]){--bubble-opacity:1;opacity:.4}
.journey-renewal[data-episode="journey-renewal-06"] .panel:has(img[data-i18n-alt="artReturnHomeBridge"])+.panel{margin-top:105%}
