:root{color-scheme:dark;--ink:#fcf0ec;--muted:#d6c4cc;--rose:#f3bed0;--gold:#e2bf8d;--panel:#201d30;--edge:#a8899866;font-family:system-ui,-apple-system,BlinkMacSystemFont,"Apple SD Gothic Neo","Malgun Gothic",sans-serif;font-size:16px;background:#17151e;color:var(--ink)}
*{box-sizing:border-box}body{margin:0;min-height:100svh;display:grid;place-items:center;background:radial-gradient(ellipse at 50% 40%,#46304b 0,#201b2c 48%,#13131c 100%)}button,input{font:inherit}button{border:1px solid var(--edge);background:#ffffff0a;color:inherit;padding:.65rem 1rem;min-height:44px;border-radius:8px;cursor:pointer;transition:background .15s,transform .15s}button:hover{background:#ffffff18}button:active{transform:translateY(1px)}button:focus-visible,input:focus-visible{outline:3px solid #f5d392;outline-offset:3px}button:disabled{opacity:.4;cursor:default}button.primary{background:linear-gradient(120deg,#f4ced9,#e6abbf);color:#391e35;border-color:#ffe5ef;font-weight:650;box-shadow:0 4px 22px #0002}button.primary:hover{background:#ffdfeb}[hidden]{display:none!important}.sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border:0}
.game{width:min(100vw,56.25svh,480px);aspect-ratio:9/16;position:relative;isolation:isolate;overflow:hidden;background:#262735;box-shadow:0 0 110px #09081288}.scene-art{position:absolute;inset:0;background-repeat:no-repeat;background-size:200% 100%;transition:filter 1s;z-index:-3}.scene-art.title{background-size:cover;background-position:center 38%}.scene-art.school{background-position:left center}.scene-art.alley,.scene-art.meeting{background-position:left center}.scene-art.meeting{background-position:right center}.scene-art.foyer{background-position:right center}.scene-art.dark{filter:brightness(.6)}.vignette{position:absolute;inset:0;z-index:-1;pointer-events:none;background:linear-gradient(#11112055,transparent 13%,transparent 50%,#15132066 78%,#151320dd)}.toolbar{position:absolute;top:0;left:0;right:0;display:flex;align-items:center;justify-content:space-between;gap:6px;padding:10px 12px;background:linear-gradient(#13131baf,transparent);text-shadow:0 2px 7px #000;z-index:3}.chapter{font-size:.8rem;color:#fff2e7;letter-spacing:.04em}.tools{display:flex;gap:5px}.tools button{font-size:.8rem;min-height:38px;padding:.4rem .6rem;background:#1f1b2a99;border-color:#fff3}.title-screen{position:absolute;bottom:4%;left:7%;right:7%;display:flex;flex-direction:column;gap:9px;align-items:stretch;text-align:center;padding:16px 14px 10px;background:linear-gradient(#26142a00,#29162bcc 18%,#29162be8 85%,#29162b00)}.title-screen button{min-height:48px}.genre{font-size:.82rem;margin:0 0 3px;color:#fff0e9;letter-spacing:.025em;text-shadow:0 1px 4px #000}.episode-label{font-size:.75rem;letter-spacing:.22em;color:#f1cddc;margin:4px 0}.dialogue{position:absolute;bottom:12px;left:12px;right:12px;padding:16px 18px 9px;background:linear-gradient(120deg,#262336f5,#211e30fa);border:1px solid #d6aeb466;border-radius:4px 18px 4px 18px;box-shadow:0 8px 28px #0004;backdrop-filter:blur(14px)}.dialogue:before{content:"";position:absolute;top:-1px;left:20px;width:38px;height:2px;background:var(--rose)}.speaker-line{display:flex;align-items:baseline;justify-content:space-between;gap:10px}.speaker{color:var(--rose);font-weight:650;letter-spacing:.08em;font-size:.95rem}.scene-label{font-size:.75rem;color:#c1b4ca;white-space:nowrap}.line{font-family:"Iowan Old Style","AppleMyungjo","Batang",serif;font-size:1.04rem;line-height:1.8;margin:12px 0 10px;min-height:5.4em;white-space:pre-line;word-break:keep-all;overflow-wrap:anywhere}.reading-controls{display:flex;align-items:center;gap:5px;border-top:1px solid #b8a4ba22;padding-top:3px}.reading-controls button{font-size:.8rem;border:0;padding:.4rem .5rem;min-height:38px;background:transparent;color:#cfbfd3}.reading-controls .next{margin-left:auto;color:#f7d8e4;min-width:77px}.next span{margin-left:9px}.choices{display:grid;gap:8px;margin:12px 0}.choices button{text-align:left;display:flex;align-items:center;gap:10px;font-size:.91rem;line-height:1.55;background:#ffffff0b;border-color:#cca8be55;padding:.65rem .75rem;word-break:keep-all;overflow-wrap:anywhere}.choices button:hover{border-color:var(--rose);background:#bd839a22}.choice-number{color:#e0ba8a;font-size:.72rem;letter-spacing:.06em;flex-shrink:0}.dialogue.has-choices .line{min-height:0;margin-bottom:4px}.rain{position:absolute;inset:0;pointer-events:none;z-index:-2;overflow:hidden}.rain i{position:absolute;width:1px;height:34px;background:linear-gradient(transparent,#d7e2fc66);top:-10%;animation:rainfall .9s linear infinite;transform:rotate(10deg)}@keyframes rainfall{to{translate:-60px 1000px}}.ending{position:absolute;inset:auto 18px 36px;text-align:center;padding:28px 22px;background:#231e32f5;border:1px solid #d7b7c577;border-radius:5px 26px 5px 26px}.ending h2{font-family:"AppleMyungjo","Batang",serif;font-size:1.4rem;margin:13px 0}.ending p{line-height:1.9;font-size:.95rem;color:#e5d6e0}.ending button{width:100%;margin-top:10px}.eyebrow{font-size:.75rem;letter-spacing:.17em;color:var(--gold)}dialog{color:var(--ink);background:#262234;border:1px solid #c9a8bf77;border-radius:8px 24px 8px 24px;padding:24px;width:min(88vw,370px);max-height:85svh;box-shadow:0 25px 100px #0009}dialog::backdrop{background:#0f0b1dbd;backdrop-filter:blur(6px)}dialog h2{font-size:1.25rem;font-weight:550;margin:8px 0 20px}dialog button{width:100%;margin-top:9px}dialog p{font-size:.95rem;color:var(--muted);line-height:1.7}dialog label{display:block;font-size:.85rem;color:#e6cad8;margin-bottom:8px}input[type=text],input:not([type]){display:block;border:1px solid #c5abc26e;background:#141322;color:white;min-height:48px;border-radius:6px;padding:10px 12px;width:100%;font-size:1rem}.setting{display:flex;align-items:center;justify-content:space-between;padding:17px 0;margin:12px 0 0;border-top:1px solid #ffffff20}.setting input{width:20px;height:20px;accent-color:#deaec3}.small{font-size:.8rem}.build-label{opacity:.8;margin-bottom:0}#name-error{min-height:1.3em;color:#ffd1dc;font-size:.85rem;margin:6px 0}.dialog-heading{display:flex;align-items:center;justify-content:space-between;gap:10px}.dialog-heading h2{margin:0}.dialog-heading button{width:auto;margin:0}.log-lines{margin-top:15px;max-height:60svh;overflow:auto}.log-entry{border-bottom:1px solid #fff1;padding:12px 0}.log-entry strong{font-size:.8rem;color:var(--rose)}.log-entry p{margin:6px 0;font-family:"AppleMyungjo","Batang",serif;white-space:pre-line}.notice{position:absolute;top:65px;left:15px;right:15px;padding:12px;background:#292234ef;border:1px solid #c7a3b777;border-radius:8px;font-size:.82rem;text-align:center;z-index:5}.reduce-motion *{animation:none!important;transition:none!important}.reduce-motion .rain{display:none}
@media(max-width:600px){.game{width:100vw;height:100svh;max-height:none;aspect-ratio:auto}.scene-art{background-size:auto 100%;}.scene-art.school,.scene-art.alley{background-size:200% 100%;background-position:left center}.scene-art.meeting,.scene-art.foyer{background-size:200% 100%;background-position:right center}.scene-art.title{background-size:cover}.toolbar{padding-top:max(10px,env(safe-area-inset-top))}.dialogue{bottom:max(12px,env(safe-area-inset-bottom));left:10px;right:10px}.title-screen{bottom:max(4%,env(safe-area-inset-bottom))}}
@media(max-height:670px){.dialogue{padding:12px 14px 5px;bottom:8px}.line{font-size:1rem;line-height:1.65;min-height:4.6em;margin:8px 0}.choices{gap:5px;margin:8px 0}.choices button{padding:8px;font-size:.88rem}.title-screen{bottom:2%;gap:6px}.title-screen button{min-height:44px}.toolbar{padding:6px 9px}.ending{bottom:12px;padding:16px}.scene-label{display:none}}
@media(prefers-reduced-motion:reduce){*{animation:none!important;transition:none!important}.rain{display:none}}
@media(min-width:601px) and (max-height:600px){.game{width:360px;height:640px;max-height:none;margin:12px 0}.scene-art{background-size:200% 100%}.scene-art.title{background-size:cover}}
/* Game-native title, keeping the reference poster preserved as an asset. */
.scene-art.title{background-size:200% 100%;background-position:right center}
.title-screen{bottom:3%;left:7%;right:7%;padding:24px 12px 12px;background:linear-gradient(#23182b00,#23182be8 32%,#23182bf5 90%,#23182be8)}
.title-screen h1{font-family:"AppleMyungjo","Batang",serif;font-size:clamp(1.65rem,6.8vw,2.2rem);line-height:1.4;font-weight:600;letter-spacing:-.065em;text-shadow:0 2px 20px #1d1424;margin:0 0 15px;color:#fff3e9}
.title-screen h1 em{font-style:normal;color:#f5bdd2;font-size:1.13em}
@media(max-height:670px){.title-screen h1{font-size:1.65rem;line-height:1.3;margin-bottom:8px}.title-screen{bottom:1%;padding-top:15px}.episode-label{margin:0}}
/* Independent art layers and a translucent, beveled glass dialogue window. */
.scene-art.school{background-size:cover;background-position:center}
.scene-art.alley{background-image:url('assets/v2/bg-alley.png');background-size:cover;background-position:center}
.scene-art.foyer{background-size:cover;background-position:center}
.scene-art.focused{filter:brightness(.78) blur(1.2px)}
.scene-art.dark{filter:brightness(.6)}
.actors{position:absolute;inset:12% 0 19%;z-index:0;pointer-events:auto}
.actor{position:absolute;top:0;bottom:0;width:65%;transition:left .35s,right .35s,width .35s,filter .22s;transform-origin:50% 85%;pointer-events:auto}
.actor.left{left:-7%}.actor.right{right:-7%}
.actor img{display:block;object-fit:contain;object-position:center bottom;width:100%;height:100%;filter:drop-shadow(0 9px 7px #0d102444);transform-origin:50% 75%;user-select:none;-webkit-user-drag:none}
.actor.listening{filter:brightness(.76) saturate(.88)}
.actor.speaking{z-index:2;filter:brightness(1.07) drop-shadow(0 0 7px #e9d8cb44)}
.actors.solo .actor.left{left:9%;width:82%}
.dialogue{z-index:4;background:linear-gradient(128deg,#e4f3ff30 0%,#a6c4e220 19%,#30354dba 43%,#19223dcc 100%);border:1px solid #e4f1ff85;border-radius:11px;box-shadow:inset 0 1px 0 #ffffff8c,inset 0 -1px 0 #aacbec45,inset 1px 0 0 #ffffff39,0 12px 28px #0b102b48;backdrop-filter:blur(23px) saturate(1.35);-webkit-backdrop-filter:blur(23px) saturate(1.35)}
.dialogue:before{top:0;left:9px;right:9px;width:auto;height:1px;background:linear-gradient(90deg,transparent,#fff9,transparent);pointer-events:none}
.dialogue:after{content:"";position:absolute;inset:5px;border:1px solid #dcefff17;border-radius:7px;pointer-events:none;z-index:-1}
.speaker{color:#fff0f6;text-shadow:0 1px 8px #1a2742}.line{text-shadow:0 1px 3px #0c173ac9;color:#fffbfa}
.reading-controls{border-color:#e7eeff24}.reading-controls button{color:#e7e7f5}.reading-controls .next{color:#ffdeeb}
.choices button{background:linear-gradient(110deg,#f1f4ff1c,#bdcde912);border-color:#e4efff4a;box-shadow:inset 0 1px 0 #fff2;color:#fff}.choices button:hover{background:#c4cfea30;border-color:#fce4f0}
.heroine-portrait{position:absolute;left:17px;top:-34px;width:73px;height:81px;border-radius:8px 17px 8px 17px;background:linear-gradient(145deg,#dee9ff85,#7385ab4d);border:1px solid #eff5ffb3;box-shadow:inset 0 1px 0 #fff9,0 4px 16px #111b3340;overflow:hidden;pointer-events:none}
.heroine-portrait img{position:absolute;width:225%;max-width:none;height:auto;left:-62.5%;top:-4%;display:block}
.dialogue.is-protagonist .speaker-line{padding-left:82px;min-height:33px;align-items:flex-start}
.dialogue.is-protagonist .scene-label{padding-top:3px}
.toolbar{z-index:5}.notice{z-index:6}.title-screen,.ending{z-index:4}
@media(max-width:600px){.scene-art.school,.scene-art.alley,.scene-art.foyer{background-size:cover;background-position:center}.actors{inset:13% 0 21%}}
@media(max-width:350px){.heroine-portrait{width:64px;height:74px;left:12px}.dialogue.is-protagonist .speaker-line{padding-left:66px}.dialogue.is-protagonist .scene-label{display:none}}
@media(max-height:670px){.actors{inset:11% 0 20%}.heroine-portrait{width:62px;height:68px;top:-29px}.dialogue.is-protagonist .speaker-line{padding-left:69px;min-height:26px}}
/* Full-frame CGs preserve the approved departing composition. */
.scene-cg{position:absolute;inset:0;z-index:1;background:#101521;cursor:pointer}.scene-cg img{width:100%;height:100%;object-fit:contain;display:block;user-select:none}
.has-cg .vignette{z-index:2;background:linear-gradient(#10152255,transparent 14%,transparent 68%,#10152255)}
.visual-controls{position:absolute;bottom:max(14px,env(safe-area-inset-bottom));left:14px;right:14px;display:flex;justify-content:space-between;z-index:4}.visual-controls button{background:#151c30cc;border-color:#fff6}
.visual-title{position:absolute;bottom:10%;left:5%;right:5%;z-index:3;text-align:center;font-size:1.5rem;line-height:1.5;padding:1rem;background:#261727e8;color:#ffe7f0}
.story-prop{position:absolute;top:21%;left:34%;width:32%;z-index:3;pointer-events:none}.story-prop img{width:100%;filter:drop-shadow(0 3px 20px #000a)}
.actors[data-count="3"] .actor{width:47%;top:9%}.actors[data-count="3"] .left{left:-10%}.actors[data-count="3"] .right{right:-10%}.actors[data-count="3"] .third{left:26%;top:0}
.actors[data-count="4"] .actor{width:40%;top:9%}.actors[data-count="4"] .left{left:-11%}.actors[data-count="4"] .right{right:13%}.actors[data-count="4"] .third{left:13%;top:0}.actors[data-count="4"] .fourth{right:-11%;top:0}
.dialogue{max-height:58%;overflow-y:auto;overscroll-behavior:contain}.line{min-height:3.5em;line-height:1.7}.scene-label{max-width:47%;overflow:hidden;text-overflow:ellipsis}
.has-cg .heroine-portrait{display:none}.has-cg .dialogue.is-protagonist .speaker-line{padding-left:0;min-height:0}.has-cg .dialogue{background:linear-gradient(120deg,#1b2235df,#162033ed)}
.ending{bottom:max(12px,env(safe-area-inset-bottom));padding:14px 16px;background:linear-gradient(#151c30d9,#141a2ef5);border-radius:10px}.ending h2{font-size:1.15rem;margin:7px 0 12px}.ending p:empty{display:none}.ending button{min-height:42px;font-size:.875rem;padding:7px;margin-top:5px}
.title-screen{bottom:2%;padding:16px 12px;background:#20152de8;border:1px solid #f2cede55;border-radius:12px}.title-screen h1{font-size:1.3rem;line-height:1.25;margin:0 0 8px}.episode-label{font-size:.7rem;letter-spacing:.08em}
@media(max-height:670px){.dialogue{max-height:57%}.line{min-height:2.8em}.ending{padding:10px}.ending h2{margin:5px 0}.ending button{margin-top:4px}.title-screen h1{font-size:1.1rem}}

/* Keep the protagonist portrait inside a scrollable dialogue window. */
.heroine-portrait{top:8px;width:58px;height:62px}.dialogue.is-protagonist .speaker-line{padding-left:68px;min-height:49px}.has-cg .dialogue.is-protagonist .speaker-line{padding-left:0;min-height:0}
/* Dialogue framing: constant portrait height instead of shrinking four full bodies. */
#game{--frame-height:800px}
#actors{inset:8% 0 0;overflow:hidden;z-index:0;pointer-events:auto}
#actors .actor{--portrait-height:calc(var(--frame-height)*1.10);position:absolute;inset:auto;top:0;left:var(--anchor,50%);right:auto;bottom:auto;width:calc(var(--portrait-height)*.666667);height:var(--portrait-height);transform:translateX(-50%);transition:filter .18s;transform-origin:50% 40%}
#actors .actor img{width:100%;height:100%;object-fit:contain;object-position:center top;transform-origin:50% 25%;max-width:none}
#actors[data-count="3"] .actor,#actors[data-count="4"] .actor{--portrait-height:calc(var(--frame-height)*.99);top:1%}
#actors[data-count="4"] .actor[data-character="umb"]{--portrait-height:calc(var(--frame-height)*.90);top:0}
#actors .actor.speaking{filter:brightness(1.05) drop-shadow(0 0 13px var(--accent,#ffffff88))}
#actors .actor.listening{filter:brightness(.87) saturate(.94)}
#actors .actor[data-character="heroine"]{--portrait-height:calc(var(--frame-height)*1.05)}
.scene-art{transition:filter .45s ease}
.weather-shade{position:absolute;inset:0;z-index:-2;pointer-events:none;opacity:0;transition:opacity .5s;background:linear-gradient(#0c172dd9,#2030446e)}
#game[data-weather="overcast"] .weather-shade{opacity:.74}
#game[data-weather="rain"] .weather-shade{opacity:.85}
#game[data-weather="overcast"] .scene-art{filter:saturate(.58) brightness(.78)}
#game[data-weather="rain"] .scene-art{filter:saturate(.64) brightness(.65)}
#rain{z-index:2;opacity:.78}
.scene-effects{position:absolute;inset:0;z-index:2;pointer-events:none;overflow:hidden}
.scene-effects>div{position:absolute;inset:0;opacity:0;transition:opacity .3s}
.light-bloom{background:radial-gradient(ellipse at 50% 28%,#fff1b052,transparent 45%);mix-blend-mode:screen}
.scene-effects[data-speaking="lumen"] .light-bloom{opacity:.48}
.scene-effects[data-speaking="veil"] .light-bloom{opacity:.3;background:linear-gradient(115deg,transparent 25%,#edf1ff33 45%,transparent 65%);animation:mirror-shimmer 2.8s ease-in-out infinite}
.scene-effects[data-effect="butterfly"] .light-bloom{opacity:.6;background:radial-gradient(ellipse at 58% 34%,#dcceff88,transparent 24%);animation:wandering-light 4s ease-in-out infinite alternate}
.mist{background:radial-gradient(ellipse at 10% 65%,#c4bcda65,transparent 60%),radial-gradient(ellipse at 100% 85%,#c0b2d562,transparent 55%);filter:blur(18px)}
.scene-effects[data-effect="fog"] .mist{opacity:.65;animation:mist-drift 7s ease-in-out infinite alternate}
.water-glimmer{background:radial-gradient(ellipse at 45% 30%,#96e9ff42,transparent 40%);mix-blend-mode:screen}
.scene-effects[data-effect="goldfish"] .water-glimmer,.scene-effects[data-speaking="ner"] .water-glimmer{opacity:.55;animation:water-breathe 2s ease-in-out infinite alternate}
.scene-effects[data-reaction="heartbeat"] .light-bloom{opacity:.45;background:radial-gradient(ellipse at 50% 50%,transparent 35%,#f9a4c738 100%)}
@keyframes mirror-shimmer{50%{translate:8% 0;opacity:.5}}
@keyframes wandering-light{to{translate:-12% 6%;opacity:.3}}
@keyframes mist-drift{to{translate:5% -3%;scale:1.08}}
@keyframes water-breathe{to{opacity:.26;scale:1.05}}
#game.has-cg #weather-shade{opacity:0}
#game.has-cg #rain{opacity:.2}
#game[aria-busy="true"] .reading-controls .next{opacity:.6}
#game .dialogue{max-height:48%;padding-top:14px}
#game .line{min-height:2.7em;margin:10px 0;line-height:1.6}
#game .dialogue.has-choices{max-height:60%}
#game .dialogue.has-choices .line{min-height:0;margin:5px 0}
#game .dialogue.has-choices .heroine-portrait{display:none}
#game .dialogue.has-choices.is-protagonist .speaker-line{padding-left:0;min-height:0}
#game .choices{gap:6px;margin:8px 0}
#game .choices button{min-height:44px;padding:8px 10px}
@media(max-height:670px){#actors{inset:9% 0 0}#game .dialogue{max-height:50%}#game .dialogue.has-choices{max-height:65%}#game .line{font-size:1rem;min-height:2.2em}}
@media(prefers-reduced-motion:reduce){.scene-effects>div{animation:none!important;transition:none!important}.weather-shade{transition:none}}
.butterfly-effect{position:absolute;left:58%;top:30%;width:19%;max-width:110px;filter:drop-shadow(0 0 10px #d6beff);animation:butterfly-flight 3.6s ease-in-out infinite alternate;transform-origin:center}
@keyframes butterfly-flight{0%{transform:translate(-12px,12px) rotate(-9deg) scaleX(.88)}50%{transform:translate(8px,-8px) rotate(3deg) scaleX(1)}100%{transform:translate(22px,-28px) rotate(-3deg) scaleX(.8)}}
@media(prefers-reduced-motion:reduce){.butterfly-effect{animation:none}}
/* Stable common shoulder line; speaker emphasis never changes stacking or height. */
#actors .actor{top:5%}
#actors .actor[data-character="umb"]{top:2%}
#actors[data-count="3"] .actor{--portrait-height:calc(var(--frame-height)*.96);top:8%}
#actors[data-count="3"] .actor[data-character="umb"]{top:5%}
#actors[data-count="4"] .actor{--portrait-height:calc(var(--frame-height)*.72);top:0}
#actors[data-count="4"] .actor:nth-child(n+3){top:29%}
#actors[data-count="4"] .actor[data-character="umb"]{--portrait-height:calc(var(--frame-height)*.72);top:-2%}
.title-screen h1,.title-screen .genre,.title-screen .episode-label{display:none}
.title-screen{background:transparent;border:0;padding:0;bottom:2%;left:9%;right:9%}
.butterfly-effect{max-width:none;width:38%;left:48%;top:23%}
.butterfly-effect[data-mode="reveal"]{width:64%;left:18%;top:16%;animation:butterfly-reveal 1.2s ease-out both}
.butterfly-effect[data-mode="depart"]{width:43%;left:45%;top:22%;animation:butterfly-depart 4s ease-in-out infinite alternate}
@keyframes butterfly-reveal{from{opacity:0;transform:scale(.6) translateY(18px)}to{opacity:1;transform:scale(1) translateY(0)}}
@keyframes butterfly-depart{from{transform:translate(0,12px) rotate(7deg)}to{transform:translate(-60%,-30px) rotate(-12deg)}}

.scene-caption{position:absolute;z-index:4;bottom:11%;left:5%;right:5%;padding:14px 18px;border-radius:12px;background:#221b30df;color:#fff6ec;text-align:center;font-size:1.05rem;line-height:1.65;box-shadow:0 4px 18px #0003;pointer-events:none}
#result-dialog{width:min(94vw,520px);max-height:90svh;overflow:auto;padding:20px;text-align:left}
#result-dialog h3{font-size:1.3rem;color:#f5cadb;margin:16px 0}
#result-dialog p{line-height:1.75}
#result-preview{display:block;width:100%;height:auto;border-radius:12px;margin:20px 0 12px}
.result-actions{display:flex;flex-wrap:wrap;gap:10px;padding:12px 0;background:#211c30}
.result-actions>*{flex:1;min-width:135px;text-align:center;margin:0!important}
.result-download{display:inline-block;border:1px solid #e7bbce;border-radius:8px;padding:12px;color:#332038;background:#f2c8d8;text-decoration:none;font-weight:650}
.result-offers{border-top:1px solid #75677c;margin-top:26px;padding-top:20px}
#result-dialog .result-offers-label{margin:0;color:#cbb4d0;font-size:.8rem;letter-spacing:.05em}
#result-dialog #result-offers-heading{font-size:1.15rem;line-height:1.5;margin:10px 0}
#result-dialog .result-offers-intro{margin:0 0 16px;color:#e0d4e3;font-size:.9rem}
.result-offer-links{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:10px}
.result-offer{display:flex;flex-direction:column;gap:0;overflow:hidden;border:1px solid #aa899f;border-radius:12px;background:#32273d;color:#fff2e8;text-decoration:none;transition:border-color .2s,background .2s}
.result-offer img{display:block;width:100%;height:auto;aspect-ratio:1;object-fit:contain;background:#f5f5fa}
.result-offer strong{padding:12px 10px;font-size:.9rem;line-height:1.5;overflow-wrap:anywhere}
.result-offer:hover{background:#453047;border-color:#f2c8d8}
.result-offer:focus-visible{outline:3px solid #f2c8d8;outline-offset:3px}
#result-dialog .result-disclosure{font-size:13px;line-height:1.65;color:#d2c5d6;margin:16px 0 0;word-break:keep-all;overflow-wrap:anywhere}
@media(max-width:360px){.result-offer-links{grid-template-columns:1fr}}
#ending{max-height:42%;overflow:auto}
.story-intertitle{position:absolute;inset:0;z-index:3;background:#14101b;color:#fff4ec;text-align:center;pointer-events:none}
.story-intertitle>div{position:absolute;top:40%;left:7%;right:7%}
.story-intertitle h2{font-family:"AppleMyungjo","Batang",serif;font-size:clamp(1.6rem,6vw,2rem);font-weight:500;letter-spacing:.09em;line-height:1.5;margin:0}
.story-intertitle p{font-family:Georgia,serif;font-size:1.1rem;color:#e2bf8d;letter-spacing:.035em;line-height:1.6;margin:16px 0 0}
.is-ending .story-intertitle>div{top:25%}
.has-intertitle .visual-controls{z-index:4}

/* Opening flourishes stay above the art and below dialogue and controls. */
.toolbar{justify-content:flex-end}
.opening-effects{position:absolute;inset:0;z-index:2;pointer-events:none;overflow:hidden}
.rose-particle{position:absolute;left:var(--x);top:-9%;width:var(--size);height:var(--size);object-fit:contain;opacity:0;animation:rose-drift var(--duration) var(--delay) linear infinite;will-change:transform,opacity}
.cue-spark{position:absolute;width:var(--size);height:var(--size);background:#fff5d9;clip-path:polygon(50% 0,60% 37%,100% 50%,62% 61%,50% 100%,39% 62%,0 50%,38% 38%);opacity:0;filter:drop-shadow(0 0 5px #fff3c5);animation:cue-twinkle 2.8s var(--delay) ease-in-out infinite}
.opening-effects[data-scene="butterfly"] .cue-spark{background:#e4edff;filter:drop-shadow(0 0 8px #c7abff);animation-duration:2.2s}
.opening-effects[data-scene="poster"] .rose-particle{top:50%;left:50%;animation:rose-burst 2.1s var(--delay) cubic-bezier(.15,.55,.3,1) both}
.opening-effects[data-scene="poster"] .cue-spark{animation:poster-twinkle 2.1s var(--delay) ease-out both}
.opening-effects[data-scene="poster"]:before{content:"";position:absolute;inset:0;background:radial-gradient(ellipse at 50% 70%,#ffe9f369,transparent 63%);animation:poster-bloom .8s ease-out both}
@keyframes rose-drift{0%{transform:translate3d(0,-25px,0) rotate(0) scale(.8);opacity:0}12%{opacity:.9}60%{opacity:.8}100%{transform:translate3d(var(--drift),calc(var(--frame-height)*.94),0) rotate(var(--turn)) scale(1.12);opacity:0}}
@keyframes rose-burst{0%{transform:translate3d(0,0,0) rotate(0) scale(.45);opacity:.9}45%{opacity:.95}100%{transform:translate3d(calc(var(--drift)*2.4),calc(var(--frame-height)*-.5),0) rotate(var(--turn)) scale(1.3);opacity:0}}
@keyframes cue-twinkle{0%,70%,100%{opacity:0;transform:scale(.25) rotate(0)}28%{opacity:.94;transform:scale(1.12) rotate(16deg)}45%{opacity:.3;transform:scale(.7) rotate(24deg)}}
@keyframes poster-twinkle{0%{opacity:0;transform:scale(.2)}18%{opacity:1;transform:scale(1.9)}55%{opacity:.7;transform:scale(.8)}100%{opacity:0;transform:scale(.1)}}
@keyframes poster-bloom{0%{opacity:.8}100%{opacity:0}}
.reduce-motion .opening-effects,.reduce-motion .scene-effects{display:none}
@media(prefers-reduced-motion:reduce){.opening-effects{display:none}}
/* Balanced branch composition: the butterfly and Ner share the decision frame. */
#game.branch-fork #actors .actor{--portrait-height:calc(var(--frame-height)*.91);top:5%;left:76%;filter:none}
#game.branch-fork .butterfly-effect[data-mode="choice"]{display:block;width:46%;left:1%;top:23%;animation:fork-butterfly 2.4s ease-in-out infinite;filter:drop-shadow(0 0 10px #cfc4ed88)}
@keyframes fork-butterfly{0%,100%{transform:translateY(7px) rotate(-5deg) scaleX(.86)}50%{transform:translateY(-8px) rotate(3deg) scaleX(1)}}
#game.branch-fork .choices{grid-template-columns:repeat(2,minmax(0,1fr))}
#game.branch-fork .choices button{align-items:flex-start;font-size:.95rem}
.portal-transition{position:absolute;inset:0;z-index:4;overflow:hidden;pointer-events:none;background:#252337}
.portal-room{position:absolute;inset:0;width:100%;height:100%;object-fit:cover}
.portal-destination{opacity:0}
.portal-smoke{position:absolute;width:160%;height:130%;left:-30%;top:-15%;object-fit:cover;opacity:0}
.portal-light{position:absolute;inset:0;background:#fffaf0;opacity:0}
.portal-transition[data-mode] .portal-destination{animation:space-cross 2.6s linear both}
.portal-transition[data-mode] .portal-smoke{animation:space-smoke 2.6s ease-in-out both}
.portal-transition[data-mode="exit"] .portal-light{animation:space-light 2.6s ease-in-out both}
@keyframes space-cross{0%,16%{opacity:0}29%{opacity:.8}44%{opacity:.16}61%{opacity:.93}74%{opacity:.35}90%,100%{opacity:1}}
@keyframes space-smoke{0%{opacity:0;transform:translateX(-14%) scale(1.1)}30%{opacity:.8}60%{opacity:1}85%{opacity:.75}100%{opacity:0;transform:translateX(15%) scale(1.3)}}
@keyframes space-light{0%,67%{opacity:0}85%{opacity:.88}100%{opacity:0}}
#game.in-portal .dialogue,#game.in-portal #visual-controls{visibility:hidden;pointer-events:none}
.reduce-motion .portal-transition[data-mode] .portal-destination{animation:portal-soft .6s ease both}
.reduce-motion .portal-smoke,.reduce-motion .portal-light{display:none}
.reduce-motion.branch-fork .scene-effects{display:block}
.reduce-motion.branch-fork .butterfly-effect{animation:none!important}
@keyframes portal-soft{from{opacity:0}to{opacity:1}}
@media(prefers-reduced-motion:reduce){.portal-transition[data-mode] .portal-destination{animation:portal-soft .6s ease both}.portal-smoke,.portal-light{display:none}#game.branch-fork .butterfly-effect{animation:none}}

/* A radial sakura fanfare gives way to light petals drifting across the title. */
.sakura-burst,.sakura-fall{position:absolute;width:var(--size);height:var(--size);object-fit:contain;opacity:0;pointer-events:none;will-change:transform,opacity;filter:drop-shadow(0 1px 3px #d881a744)}
.sakura-burst{left:50%;top:52%;animation:sakura-fanfare 2.15s var(--delay) cubic-bezier(.15,.65,.25,1) both}
.sakura-fall{left:var(--x);top:-7%;animation:sakura-float var(--duration) var(--delay) linear infinite}
@keyframes sakura-fanfare{0%{transform:translate(-50%,-50%) rotate(0) scale(.35);opacity:0}8%{opacity:.95}60%{opacity:.85}100%{transform:translate(var(--burst-x),var(--burst-y)) rotate(var(--turn)) scale(1.05);opacity:0}}
@keyframes sakura-float{0%{opacity:0;transform:translate3d(0,-15px,0) rotate(0) scaleX(.85)}12%{opacity:.72}45%{transform:translate3d(calc(var(--drift)*.3),calc(var(--frame-height)*.42),0) rotate(calc(var(--turn)*.45)) scaleX(.55);opacity:.78}83%{opacity:.7}100%{transform:translate3d(var(--drift),calc(var(--frame-height)*1.1),0) rotate(var(--turn)) scaleX(.95);opacity:0}}
