:root{--bg:#f0f0f0;--ink:#3a3a3a;--ink-soft:#3a3a3a73;--vvh:1vh;--app-height:100vh}@supports (height:100dvh){:root{--app-height:100dvh}}*,:before,:after{box-sizing:border-box;margin:0;padding:0}html,body{min-height:100%;min-height:var(--app-height);min-height:calc(var(--vvh) * 100);background:var(--bg);color:var(--ink);scrollbar-width:none;-ms-overflow-style:none;font-family:Zen Maru Gothic,Hiragino Sans,sans-serif;overflow-x:hidden}html::-webkit-scrollbar{width:0;height:0;display:none}body::-webkit-scrollbar{width:0;height:0;display:none}html.scroll-locked,html.scroll-locked body{overscroll-behavior:none;height:var(--app-height);height:calc(var(--vvh) * 100);overflow:hidden}#app{background:var(--bg);width:100%;position:relative}#stage{width:100%;height:var(--app-height);height:calc(var(--vvh) * 100);pointer-events:none;display:block;position:fixed;top:0;left:0}.finale-texts{z-index:2;pointer-events:none;opacity:0;will-change:opacity;--finale-top-width:min(68vw, 16.5rem);transition:opacity .45s;position:fixed;inset:0}.finale-texts.is-visible{opacity:1}.finale-text{position:absolute;left:50%;transform:translate(-50%,-50%)}.finale-text--top{width:var(--finale-top-width);top:12%}.finale-text--bottom{width:calc(var(--finale-top-width) * 113 / 154);top:88%}.finale-text svg{width:100%;height:auto;display:block;overflow:visible}.finale-text path{fill:none;stroke:var(--ink);stroke-width:1.5px;stroke-linecap:round;stroke-linejoin:round}.scroll-track{z-index:0;pointer-events:none;width:100%;height:650svh;position:relative}.card-content{z-index:4;background:0 0;width:100%;min-height:auto;padding:clamp(4.5rem,14vh,7.5rem) clamp(1.35rem,5vw,2.5rem) clamp(5rem,16vh,8rem);position:relative}@font-face{font-family:Haiyan;src:url(/assets/haiyan-D2p5_gfJ.ttf)format("truetype");font-weight:400;font-style:normal;font-display:swap}.card-letter{letter-spacing:.04em;max-width:32rem;color:var(--ink);margin:0 auto;font-family:Haiyan,Songti SC,STSong,serif;font-size:clamp(1.45rem,3.6vw,1.9rem);line-height:2}.card-line{opacity:0;will-change:opacity, transform;margin:0;transition:opacity .65s,transform .65s;transform:translateY(.85rem)}.card-line.is-revealed{opacity:1;transform:translate(0,0)}.card-line--greeting{letter-spacing:.06em;margin-bottom:1.75rem;font-size:clamp(1.7rem,4.2vw,2.2rem)}.card-line--break{margin-top:1.85rem}@media (prefers-reduced-motion:reduce){.card-line{opacity:1;transition:none;transform:none}}.scroll-progress{left:max(.65rem, env(safe-area-inset-left,0px));z-index:3;pointer-events:none;opacity:0;position:fixed;top:50%;transform:translateY(-50%)}.scroll-progress.is-armed{transition:opacity .5s ease-in-out}.scroll-progress.is-visible{opacity:1}.scroll-progress__track{background:#3a3a3a24;border-radius:999px;width:3px;height:min(14svh,4.75rem);position:relative;overflow:hidden}.scroll-progress__fill{border-radius:inherit;transform-origin:top;will-change:transform;background:#3a3a3a8c;width:100%;height:100%;position:absolute;top:0;left:0;transform:scaleY(0)}.scroll-hint{left:50%;bottom:max(1.75rem, env(safe-area-inset-bottom,0px));z-index:3;pointer-events:none;opacity:0;color:var(--ink-soft);flex-direction:column;align-items:center;display:flex;position:fixed;transform:translate(-50%)}.scroll-hint.is-armed.is-visible{opacity:1}.scroll-hint.is-armed.is-visible:not(.is-leaving){transition:none}.scroll-hint.is-armed.is-leaving{transition:opacity .4s ease-out}.scroll-hint.is-armed.is-leaving:not(.is-visible){opacity:0}.scroll-hint__chevron{opacity:0;will-change:transform, opacity;width:1.25rem;height:auto;line-height:0;display:block;transform:translateY(.45rem)}.scroll-hint.is-armed.is-visible:not(.is-leaving) .scroll-hint__chevron{animation:2.4s ease-in-out infinite scroll-hint-rise}.scroll-hint.is-armed.is-leaving .scroll-hint__chevron{animation:none}.scroll-hint__chevron svg{width:100%;height:auto;display:block}@keyframes scroll-hint-rise{0%{opacity:0;transform:translateY(.45rem)}22%{opacity:1;transform:translateY(0)}48%{opacity:1;transform:translateY(0)}76%{opacity:0;transform:translateY(-.55rem)}76.01%,to{opacity:0;transform:translateY(.45rem)}}@media (prefers-reduced-motion:reduce){.scroll-hint.is-armed.is-visible:not(.is-leaving) .scroll-hint__chevron{opacity:1;animation:none;transform:none}}
