@font-face{font-family:Cormorant;font-weight:500;src:url(../assets/fonts/cormorant-garamond-latin-500-normal.woff2)}
@font-face{font-family:Cormorant;font-weight:600;src:url(../assets/fonts/cormorant-garamond-latin-600-normal.woff2)}
@font-face{font-family:Jost;font-weight:400;src:url(../assets/fonts/jost-latin-400-normal.woff2)}
@font-face{font-family:Pinyon;font-weight:400;src:url(../assets/fonts/pinyon-script-latin-400-normal.woff2)}
:root{--ivory:#FBF6EE;--cream:#F5EBDD;--blush:#F3D9D4;--rose:#D9A9A3;--maroon:#7A1F2B;--ink:#3A3330;--hint:#7A6E68;--gold:linear-gradient(135deg,#E6CB8E,#B8935A 55%,#8F6B35);--top:max(24px,env(safe-area-inset-top));--bottom:max(18px,env(safe-area-inset-bottom))}
*{box-sizing:border-box;margin:0;-webkit-tap-highlight-color:transparent}
html,body{height:100%;overflow:hidden;overscroll-behavior:none;background:#e9dfd0;touch-action:none}
body{font:15px/1.5 Jost,sans-serif;color:var(--ink)}
button{font:inherit;cursor:pointer;touch-action:manipulation}
#app{isolation:isolate;position:relative;width:100%;max-width:430px;height:100dvh;margin:auto;overflow:hidden;background:var(--ivory);box-shadow:0 0 80px #3a333018}
#paper,#lattice,#frame,#flowers,#effects,#stage{position:absolute;inset:0;pointer-events:none}
#paper{z-index:-3}#paper .art{width:100%;height:100%;object-fit:cover;opacity:.56}
#lattice{z-index:-2;opacity:.045;background-image:repeating-linear-gradient(45deg,transparent 0 25px,#8F6B35 25px 26px,transparent 26px 51px),repeating-linear-gradient(-45deg,transparent 0 25px,#8F6B35 25px 26px,transparent 26px 51px),radial-gradient(ellipse at center,transparent 0 28%,#8F6B35 29% 30%,transparent 31%);background-size:auto,auto,72px 72px;mask-image:linear-gradient(#000,transparent 36% 65%,#000)}
#frame{z-index:6;inset:14px;border:1px solid transparent;border-image:var(--gold) 1}
#frame::before{content:"";position:absolute;inset:4px;border:1px solid transparent;border-image:var(--gold) 1;opacity:.55}
.corner{position:absolute;width:clamp(46px,15vw,65px);height:auto;opacity:.7;pointer-events:none}.corner.tl{top:-5px;left:-5px}.corner.tr{top:-5px;right:-5px;transform:scaleX(-1)}.corner.bl{bottom:-5px;left:-5px;transform:scaleY(-1)}.corner.br{bottom:-5px;right:-5px;transform:scale(-1)}
#flowers{z-index:1}#flowers .art,#flowers .art-ph{position:absolute;width:39%;height:auto;max-height:34%;object-fit:contain;transition:left 1.4s cubic-bezier(.45,0,.18,1),top 1.4s cubic-bezier(.45,0,.18,1),transform 1.4s cubic-bezier(.45,0,.18,1)}
#hud{position:absolute;top:var(--top);left:26px;right:26px;height:52px;display:flex;align-items:center;justify-content:space-between;z-index:8}
#mute{width:44px;height:44px;display:grid;place-items:center;border:1px solid #b8935a55;border-radius:50%;background:#fbf6eec9;color:var(--maroon);box-shadow:0 2px 12px #8f6b3510}
#mute svg{width:21px;height:21px;fill:none;stroke:currentColor;stroke-width:1.35;stroke-linecap:round;stroke-linejoin:round}#mute .slash{display:none}#mute.muted .waves{display:none}#mute.muted .slash{display:block}
#prog{position:relative;width:clamp(120px,40vw,165px);height:52px}#prog .person{position:absolute;bottom:0;width:34px;height:50px}#prog .person .art{position:absolute;bottom:-5px;left:50%;width:40.65px;height:61px;max-width:none;transform:translateX(-50%)}#prog .art-ph{width:34px;height:50px}#prog .bride{left:0;z-index:2;will-change:transform}#prog .groom{right:0}
#effects{z-index:4;width:100%;height:100%}#stage{z-index:3;pointer-events:auto}
.paint-defs{position:absolute;width:0;height:0;pointer-events:none}
.scene{position:absolute;inset:0;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:clamp(10px,2dvh,20px);padding:calc(var(--top) + 68px) 34px calc(var(--bottom) + 100px);text-align:center}
h1,h2{font:600 clamp(28px,7.5vw,38px)/1.12 Cormorant,serif;overflow-wrap:anywhere}
.small{font:400 11px/1.5 Jost,sans-serif;letter-spacing:.17em;text-transform:uppercase;color:var(--hint)}
.body-copy{font-size:clamp(13px,3.6vw,15px);line-height:1.65;overflow-wrap:anywhere}.date-line{font:500 18px/1.4 Cormorant,serif;color:var(--maroon)}
.hint{position:absolute;left:28px;right:28px;bottom:calc(var(--bottom) + 10px);padding:3px 0;background:linear-gradient(90deg,transparent,#fbf6eedd 20% 80%,transparent);font:italic 500 15px/1.3 Cormorant,serif;color:var(--hint);pointer-events:none}
.btn{min-width:44px;min-height:44px;padding:9px 24px;border:1px solid var(--maroon);border-radius:999px;background:var(--maroon);color:var(--ivory);font-size:12px;letter-spacing:.07em;transition:opacity .25s,box-shadow .25s}
.btn:active{box-shadow:0 0 0 4px #d9a9a330}.btn.ghost{color:var(--maroon);background:#fbf6eeaa;border-color:#b8935a77}.btn:disabled{opacity:.35;cursor:default}
.fallback{position:absolute;bottom:calc(var(--bottom) + 40px);z-index:5;font-size:11px;min-height:44px;padding:7px 22px}
.languages{position:absolute;bottom:calc(var(--bottom) + 94px);display:flex;gap:8px;justify-content:center}.languages .btn{font-size:10px;min-height:44px;padding:7px 15px}.languages [aria-pressed=true]{background:var(--cream);border-color:var(--maroon)}
.paper-texture{position:absolute;inset:0;width:100%;height:100%;object-fit:cover;pointer-events:none;opacity:.6;z-index:-1}
.envelope{position:relative;width:100%;height:clamp(210px,37dvh,310px);perspective:1100px;filter:drop-shadow(0 12px 14px #5a3a2920);margin-bottom:22px}
.envelope-back,.envelope-pocket,.envelope-card,.flap-front{background:var(--cream);isolation:isolate;overflow:hidden}
.envelope-back{position:absolute;inset:0;border:1px solid #c7aa73;border-radius:4px;background:linear-gradient(135deg,#f5ebdd,#fbf6ee)}
.envelope-card{position:absolute;inset:14px 16px 10px;background:var(--ivory);border:1px solid #c7aa7388;padding:35px 8px;z-index:1}
.monogram{font:600 43px Cormorant,serif;color:var(--maroon);margin-top:14px}
.envelope-pocket{position:absolute;inset:0;clip-path:polygon(0 0,50% 53%,100% 0,100% 100%,0 100%);z-index:3;background:linear-gradient(150deg,#f8f0e4 25%,#e8d9c5 50%,#f7eddf 75%)}
.envelope-pocket::after{content:"";position:absolute;inset:0;background:linear-gradient(32deg,transparent 49.7%,#b8935a66 50%,transparent 50.4%),linear-gradient(-32deg,transparent 49.7%,#b8935a55 50%,transparent 50.4%);opacity:.65}
.envelope-flap{position:absolute;inset:0 0 45%;transform-origin:center top;transform-style:preserve-3d;z-index:4}
.flap-front,.flap-lining{position:absolute;inset:0;clip-path:polygon(0 0,100% 0,50% 100%);backface-visibility:hidden}
.flap-front{background:linear-gradient(170deg,#fbf6ee,#eee0ca);border-top:1px solid #e6cb8e}.flap-front::after{content:"";position:absolute;inset:0;background:linear-gradient(30deg,transparent 49.2%,#b8935a 49.7%,#e6cb8e 50%,transparent 50.7%);opacity:.6}
.flap-lining{transform:rotateX(180deg);background:var(--maroon)}.flap-lining .art{width:100%;height:100%;object-fit:cover;opacity:.8}
.seal{position:absolute;left:50%;top:52%;width:94px;height:94px;transform:translate(-50%,-50%);border:0;background:none;z-index:5;display:grid;place-items:center}
.seal .art{position:absolute;inset:0;width:100%;height:100%;object-fit:contain}.seal .ini{position:relative;max-width:54px;white-space:nowrap;font:600 19px Cormorant,serif;letter-spacing:-.03em;background:var(--gold);background-clip:text;color:transparent}
.seal svg{position:absolute;inset:-7px;width:calc(100% + 14px);height:calc(100% + 14px);transform:rotate(-90deg)}.seal circle{fill:none;stroke:#b8935a;stroke-width:1.5;stroke-dasharray:440;stroke-dashoffset:440}.holding circle{transition:stroke-dashoffset var(--ms) linear;stroke-dashoffset:0}
.broken-seal{position:absolute;top:40%;left:35%;width:30%;z-index:5;pointer-events:none}.shard-left{clip-path:inset(0 50% 0 0)}.shard-right{clip-path:inset(0 0 0 50%)}
.invitation-card{isolation:isolate;position:relative;width:100%;padding:clamp(24px,5dvh,40px) 20px;background:#fbf6eee8;border:1px solid #b8935a66;box-shadow:0 16px 38px #694c3320;display:flex;flex-direction:column;gap:14px;overflow:hidden}
.dear{font:italic 500 19px Cormorant,serif}.guest-name{font:400 clamp(34px,10vw,48px)/1.2 Pinyon,cursive;color:var(--maroon);overflow-wrap:anywhere}
.calendar{isolation:isolate;position:relative;width:min(100%,240px);aspect-ratio:4/5;flex-shrink:0}
.calendar>.art{position:absolute;inset:0;width:100%;height:100%;z-index:-1;object-fit:fill;filter:drop-shadow(-3px 7px 5px #59422b24)}
.calendar::after{content:"";position:absolute;bottom:12%;right:16%;width:24%;height:6%;background:#59422b30;transform:rotate(-28deg);filter:blur(4px);z-index:-2}
.calendar>.small{position:absolute;top:18%;left:16%;right:16%;font-size:clamp(9px,2.7vw,11px);letter-spacing:.08em}
.num{position:absolute;top:35%;left:17%;right:17%;font:600 clamp(56px,16vw,76px)/1 Cormorant,serif;color:var(--maroon)}
.calendar>.date-line{position:absolute;bottom:26%;left:19%;right:19%;font-size:clamp(13px,3.6vw,16px);line-height:1.25}
.cd{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:7px;width:100%}.countdown{width:100%;max-width:300px}.cd div{padding:9px 2px;background:#fbf6eec9;border:1px solid #b8935a66;border-radius:4px}
.cd b{display:block;font:600 clamp(23px,7vw,29px)/1.2 Cormorant,serif;color:var(--maroon)}.cd span{font-size:8px;letter-spacing:.06em;color:var(--hint)}
.venue-card{position:relative;width:min(100%,275px);aspect-ratio:500/667;max-height:calc(100dvh - 240px)}.venue-card>.art{width:100%;height:100%;object-fit:fill}.venue-copy{position:absolute;inset:20% 12% 15%;display:flex;flex-direction:column;justify-content:center;align-items:center;gap:14px}.venue-name{font:600 clamp(24px,7vw,34px)/1.15 Cormorant,serif;color:var(--maroon)}.pin{width:27px;height:34px;fill:none;stroke:#b8935a;stroke-width:1}
.scene-4{gap:10px;padding-top:calc(var(--top) + 60px);padding-bottom:calc(var(--bottom) + 42px)}
.grid{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:8px;width:100%;max-width:330px}.grid>.tile:last-child{grid-column:1/-1;justify-self:center;width:calc(50% - 4px)}
.tile{display:grid;grid-template-rows:1fr 36px;justify-items:center;align-items:center;width:100%;height:clamp(88px,calc((100dvh - 290px)/3),142px);padding:5px;background:#fbf6eec9;border:1px solid #b8935a66;border-radius:7px;color:var(--ink);position:relative;overflow:hidden}
.tile-media{position:relative;width:clamp(42px,12vw,64px);height:clamp(38px,calc((100dvh - 435px)/3),72px)}.tile-media .art,.tile-media .art-ph{position:absolute;inset:0;width:100%;height:100%;object-fit:contain;transition:opacity .5s}.tile .opened{opacity:0}.tile.revealed .opened{opacity:1}.tile.revealed .closed{opacity:0}
.tile-caption{grid-area:2/1;height:36px;display:flex;flex-direction:column;justify-content:center;opacity:0;transition:opacity .55s;max-width:100%}.revealed .tile-caption{opacity:1}.tile-teaser{grid-area:2/1;display:grid;justify-items:center;gap:4px;font:italic 500 12px Cormorant,serif;color:var(--hint);transition:opacity .3s}.tile-teaser::before{content:"";width:28px;height:1px;background:var(--gold);animation:teaser-glow 2.4s ease-in-out infinite}.revealed .tile-teaser{opacity:0;pointer-events:none}.time{font:600 14px/1.1 Cormorant,serif;color:var(--maroon)}.event{font-size:9px;line-height:1.25;overflow-wrap:anywhere}.tile.revealed{background:#f5ebddc9;box-shadow:inset 0 0 20px #e6cb8e25}.scene-4 .hint{bottom:calc(var(--bottom) + 3px)}.continue{flex-shrink:0}
.deck{position:relative;width:100%;max-width:280px;height:clamp(180px,35dvh,310px);touch-action:none}.rule-card{isolation:isolate;position:absolute;inset:0;padding:22px;background:var(--cream);border:3px double #b8935a88;border-radius:6px;box-shadow:0 12px 24px #3a333014;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:18px;overflow:hidden}.rule-number{font:600 44px/1 Cormorant,serif;background:var(--gold);background-clip:text;color:transparent}
.heart-control{width:clamp(145px,42vw,190px);height:clamp(145px,42vw,190px);background:none;border:0;touch-action:none;filter:drop-shadow(0 4px 15px #d9a9a32a)}.heart-control svg{width:100%;height:100%;overflow:visible}.heart-ring,.heart-outline{fill:none;stroke:url(#heartGold);stroke-width:.9}.heart-ring{stroke-dasharray:2 5;opacity:.65}.heart-fill{fill:var(--rose);opacity:0;transform-origin:80px 95px;transform:scale(.1);transition:transform .25s,opacity .25s}.heart-control.holding .heart-fill{opacity:.55;transform:scale(1);transition:transform var(--ms) cubic-bezier(.25,.1,.25,1),opacity var(--ms)}.heart-control.ready .heart-ring{stroke-width:2}.farewell-copy{font:500 clamp(25px,7vw,34px)/1.3 Cormorant,serif;max-width:290px;color:var(--maroon)}
#app[data-scene="6"]{background:radial-gradient(ellipse at 50% 40%,#f3d9d4aa,#fbf6ee)}
#app[data-scene="7"]{background:linear-gradient(160deg,#EBCFC6,#D9B3A8)}.scene-7{padding-top:calc(var(--top) + 105px);padding-bottom:calc(var(--bottom) + 38px);gap:12px}.closing-heading{font-size:clamp(35px,10vw,48px)}.divider{width:135px;height:30px;object-fit:contain}.closing-actions{display:flex;flex-direction:column;align-items:center;gap:8px;margin-top:6px}
.art-ph{position:relative;background:repeating-linear-gradient(45deg,#f3d9d488 0 8px,#fbf6ee 8px 16px);border:1px dashed #b8935a}.art-ph::after{content:attr(data-name);position:absolute;inset:auto 2px 2px;font-size:8px;color:var(--hint);word-break:break-all}
#rotate{display:none;position:fixed;inset:0;background:var(--ivory);z-index:99;place-items:center;padding:30px;text-align:center;font:500 25px Cormorant,serif}
:focus-visible{outline:2px solid var(--maroon);outline-offset:4px}
.heart-outline{stroke-width:1.1;stroke-dasharray:330;animation:heart-ink 2s ease-out both}.heart-botanical{opacity:.8;animation:heart-ink 2.5s ease-out both}.heart-progress{stroke-dasharray:478;stroke-dashoffset:478;transform:rotate(-90deg);transform-origin:80px 80px}.holding .heart-progress{stroke-dashoffset:0;transition:stroke-dashoffset var(--ms) linear}.heart-orbit{transform-origin:80px 80px;animation:orbit 28s linear infinite}.heart-glint{animation:teaser-glow 3.2s ease-in-out infinite}.heart-control{background:radial-gradient(ellipse,#e6cb8e16,transparent 68%)}.release-hint{display:none}.heart-control.ready~.hint .hold-hint{display:none}.heart-control.ready~.hint .release-hint{display:inline}
@keyframes orbit{to{transform:rotate(360deg)}}@keyframes heart-ink{from{opacity:0;stroke-dashoffset:330}to{opacity:1;stroke-dashoffset:0}}@keyframes teaser-glow{50%{opacity:.3;transform:scaleX(.7)}}
#app[data-power=light] .heart-orbit,#app[data-power=light] .heart-glint,#app[data-power=light] .tile-teaser::before{animation:none}
@media(max-height:680px){.scene{padding-top:calc(var(--top) + 57px);padding-bottom:calc(var(--bottom) + 92px);gap:10px}.scene-0{padding-bottom:calc(var(--bottom) + 140px)}.envelope{height:205px;margin:0}.scene-4{padding-top:calc(var(--top) + 54px);padding-bottom:calc(var(--bottom) + 34px);gap:6px}.scene-4 h1{font-size:27px}.scene-7{padding-top:calc(var(--top) + 65px);padding-bottom:calc(var(--bottom) + 20px);gap:8px}.scene-7 .small{display:none}.scene-7 .divider{height:20px}.scene-7 .body-copy{font-size:12px}.scene-7 .closing-heading{font-size:34px}.calendar{min-height:180px;width:165px}.invitation-card{padding:22px 15px;gap:9px}.greeting-seal{width:42px}.venue-copy{gap:8px}.venue-name{font-size:25px}.languages{bottom:calc(var(--bottom) + 94px)}}
@media(orientation:landscape) and (hover:none),(orientation:landscape) and (max-height:500px){#rotate{display:grid}}
@media(prefers-reduced-motion:reduce){*,*::before,*::after{transition:none!important;animation:none!important}.heart-control.holding .heart-fill{transform:scale(1);opacity:.55}}
@media(max-height:680px){.calendar{width:190px;min-height:0}.calendar .num{font-size:56px}.calendar>.date-line{font-size:13px}}
.seal circle,.pin{stroke:url(#gold-foil)}

/* Research adaptations and timings are recorded in docs/MOTION.md. */
[hidden]{display:none!important}
#app{--figure:72px;--content-top:calc(var(--top) + 142px)}
#hud{inset:0;display:block;height:auto;pointer-events:none}
#mute{position:absolute;top:var(--top);left:26px;pointer-events:auto}
#prog{position:absolute;left:50%;top:calc(var(--top) + 50px);transform:translateX(-50%);width:min(58vw,220px);height:var(--figure);background:radial-gradient(ellipse,#fbf6eea6,transparent 72%)}
#prog .person{width:calc(var(--figure)*.68);height:var(--figure)}
#prog .person .art{height:calc(var(--figure)*1.22);width:calc(var(--figure)*.813);bottom:calc(var(--figure)*-.1)}
#flowers{mask-image:linear-gradient(transparent 0 140px,#000 185px);-webkit-mask-image:linear-gradient(transparent 0 140px,#000 185px)}
.scene{padding:var(--content-top) 28px calc(var(--bottom) + 66px);gap:14px}
.hint{position:static;flex-shrink:0;align-self:center;width:100%;max-width:290px;padding:0;background:none;font-weight:600;display:flex;flex-direction:column;align-items:center;gap:5px;line-height:1.35;animation:hint-breathe 2.2s ease-in-out infinite}
.hint::before{content:"";height:12px;width:1px;background:var(--gold);animation:hint-stroke 2.2s cubic-bezier(.76,0,.3,1) infinite;transform-origin:center top}
.hint-swipe-x::before{height:1px;width:22px}.hint-hold::before{width:8px;height:8px;border-radius:50%;background:radial-gradient(circle,#e6cb8e,#8f6b35);animation:none}
.hint-tap::before{width:4px;height:4px;border-radius:50%}
.fallback{bottom:calc(var(--bottom) + 12px)}
.languages{position:static;flex-shrink:0;gap:12px}
.envelope{width:90vw;max-width:387px;height:clamp(205px,37dvh,330px);flex-shrink:0;margin:0}
.seal{width:104px;height:104px}
.seal .ini{max-width:45px;font-size:19px;line-height:1;letter-spacing:-.045em;background:linear-gradient(155deg,#efdca4,#c5a268 48%,#a67a40);background-clip:text;color:transparent;filter:drop-shadow(0 1px 0 #e6cb8e50);text-shadow:0 -1px 1px #46121e70;mix-blend-mode:normal}
.seal+.hint{position:absolute;left:15%;right:15%;top:calc(52% + 49px);width:70%;z-index:6;font-size:14px;pointer-events:none}
.opening .hint{visibility:hidden}
.seal .broken-seal{position:absolute;inset:10.7%;width:78.6%;height:78.6%;z-index:3;clip-path:none;object-fit:contain}
.calendar>.small{top:25%;left:17%;right:17%;font-size:11px}
.calendar .num{top:39%;font-size:70px}
.calendar>.date-line{bottom:23%;font-size:16px}
.calendar{width:min(100%,230px)}
.calendar+.hint{margin-top:-8px}
.venue-card{max-height:calc(100dvh - 290px);max-width:255px;flex-shrink:1}
.heart-control+.hint{max-width:250px}
.countdown{max-width:330px}
.cd{gap:8px}
.cd .count-panel{isolation:isolate;position:relative;overflow:hidden;padding:15px 4px 11px;border:1px solid transparent;border-radius:18px 18px 5px 5px;background:linear-gradient(#fbf6eeef,#f5ebdded) padding-box,var(--gold) border-box;box-shadow:0 6px 12px #59422b10,inset 0 0 0 3px #fbf6ee}
.count-panel::before{content:"";position:absolute;inset:5px;border:1px solid #b8935a55;border-radius:13px 13px 2px 2px;pointer-events:none;z-index:-1}
.count-panel::after{content:"";position:absolute;width:14px;height:1px;top:10px;left:calc(50% - 7px);background:var(--gold)}
.cd .count-number{position:relative;perspective:500px;height:35px;padding:0;border:0;border-radius:0;background:none;box-shadow:none;overflow:hidden}
.cd b,.cd .count-number i{font:600 clamp(26px,7vw,32px)/35px Cormorant,serif;letter-spacing:-.03em;font-variant-numeric:tabular-nums;color:var(--maroon);white-space:nowrap}
.count-number i{position:absolute;inset:0;display:none;background:#fbf6ee;backface-visibility:hidden;font-style:normal}
.turning .flip-old{display:block;clip-path:inset(0 0 50%);transform-origin:50% 50%;animation:flip-top .23s ease-in both}
.turning .flip-new{display:block;clip-path:inset(50% 0 0);transform-origin:50% 50%;animation:flip-bottom .46s ease-out both}
.cd .count-panel>span{display:block;margin-top:6px;padding-top:6px;font-size:8px;text-transform:uppercase;letter-spacing:.09em;border-top:1px solid #b8935a44}
.replay-cover{position:absolute;inset:0;z-index:30;opacity:0;background:var(--ink);pointer-events:auto}

.scene-4{justify-content:center;padding-top:var(--content-top);padding-bottom:calc(var(--bottom) + 16px);gap:10px}
.event-counter{font-size:10px}
.schedule-stage{position:relative;isolation:isolate;perspective:1200px;width:100%;max-width:300px;height:clamp(250px,35dvh,330px);flex-shrink:0}
.schedule-stage::before,.schedule-stage::after{content:"";position:absolute;inset:0 7px;background:var(--cream);border:1px solid #b8935a66;border-radius:8px;transform:translateY(7px) rotate(-3deg);z-index:-1}
.schedule-stage::after{transform:translateY(5px) rotate(2deg)}
.event-card{position:relative;width:100%;height:100%;display:flex;flex-direction:column;justify-content:center;align-items:center;gap:10px;padding:18px 16px;background:linear-gradient(135deg,#fbf6ee,#f5ebdd);border:1px solid #b8935a77;border-radius:8px;box-shadow:0 14px 30px #59422b17;transform-style:preserve-3d}
.object-button{position:relative;border:0;background:none;min-width:100px;min-height:104px;color:var(--maroon)}
.event-art{position:relative;width:112px;height:112px}
.event-art .art,.event-art .art-ph{position:absolute;inset:0;width:100%;height:100%;object-fit:contain;transition:opacity .5s}
.event-art .opened{opacity:0}.revealed .event-art .closed{opacity:0}.revealed .event-art .opened{opacity:1}
.event-details{height:90px;display:flex;flex-direction:column;justify-content:center;gap:10px;width:100%;opacity:0;transition:opacity .35s}
.revealed .event-details{opacity:1}
.event-card .hint{font-size:14px;position:absolute;top:55%;left:16px;width:calc(100% - 32px)}
.event-time{font:600 25px/1.15 Cormorant,serif;color:var(--maroon)}
.event-name{font:500 19px/1.3 Cormorant,serif}
.reveal-line{overflow:hidden}.reveal-line span{display:block}
.event-foil{position:absolute;inset:5px;width:calc(100% - 10px);height:calc(100% - 10px);pointer-events:none}
.event-foil rect{fill:none;stroke:url(#gold-foil);stroke-width:.9;stroke-dasharray:1280;stroke-dashoffset:1280;transition:stroke-dashoffset .9s ease}
.revealed .event-foil rect{stroke-dashoffset:0}
.schedule-actions{height:44px;flex-shrink:0;margin-top:10px}
.schedule-stage.timeline{height:min(390px,calc(100dvh - 285px));overflow:auto;overscroll-behavior:contain;touch-action:pan-y;padding:4px 3px 8px 20px;display:flex;flex-direction:column;gap:9px;perspective:none;scrollbar-width:thin}
.timeline::before{content:"";display:block;position:absolute;top:8px;bottom:12px;left:9px;right:auto;width:1px;height:calc(100% - 20px);background:var(--gold);border:0;transform:scaleY(1);transform-origin:top;animation:timeline-line 1s ease-out both;z-index:0}
.timeline::after{display:none}
.timeline-row{display:grid;grid-template-columns:50px 1fr;gap:12px;text-align:left;flex-shrink:0;height:auto;min-height:61px;padding:7px 10px;border-radius:4px;box-shadow:none}
.timeline-row::before{content:"";position:absolute;width:5px;height:5px;left:-14px;top:calc(50% - 3px);border-radius:50%;background:var(--gold)}
.timeline-row .object-button{min-width:44px;min-height:44px;pointer-events:none}
.timeline-row .event-art{width:45px;height:45px}
.timeline-row .event-details{height:auto;min-height:44px;gap:4px}
.timeline-row .event-time{font-size:18px}.timeline-row .event-name{font:400 12px/1.35 Jost,sans-serif}
.timeline-row .event-foil{display:none}
body.timeline-scroll,body.timeline-scroll #app,body.timeline-scroll #stage,body.timeline-scroll .scene{touch-action:pan-y}
.scene-7{padding-top:var(--content-top);padding-bottom:calc(var(--bottom) + 20px)}
.scene-7 .countdown{margin:5px 0}
.scene-7 .closing-actions{flex-direction:row;gap:10px;justify-content:center}
@keyframes hint-breathe{50%{opacity:.38}}
@keyframes hint-stroke{0%,100%{transform:scaleY(.35);opacity:.4}50%{transform:scaleY(1);opacity:1}}
@keyframes flip-top{to{transform:rotateX(-90deg)}}
@keyframes flip-bottom{0%,49%{transform:rotateX(90deg)}100%{transform:rotateX(0)}}
@keyframes timeline-line{from{transform:scaleY(0)}to{transform:scaleY(1)}}
@media(max-height:680px){
 #app{--figure:56px;--content-top:calc(var(--top) + 112px)}
 #prog{top:calc(var(--top) + 44px)}
 #flowers{mask-image:linear-gradient(transparent 0 120px,#000 155px)}
 .scene{gap:10px;padding-top:var(--content-top);padding-bottom:calc(var(--bottom) + 60px)}
 .scene-0{padding-bottom:calc(var(--bottom) + 60px)}.envelope{height:205px}
 .languages{position:static;margin-top:5px}
 .hint{font-size:14px;gap:3px}
 .invitation-card{padding:18px 16px;gap:8px}.guest-name{font-size:30px}
 .calendar{width:175px;min-height:0}.calendar>.small{font-size:9px;top:25%}.calendar .num{font-size:53px;top:39%}.calendar>.date-line{font-size:13px;bottom:23%}
 .cd .count-panel{padding:12px 3px 8px}.cd .count-number{height:28px}.cd b,.cd .count-number i{font-size:25px;line-height:28px}.cd .count-panel>span{font-size:7px;margin-top:4px;padding-top:4px}
 .venue-card{height:230px;max-height:230px;width:173px}
 .deck{height:190px}.rule-card{padding:15px;gap:12px}
 .heart-control{width:138px;height:138px}.farewell-copy{font-size:24px}
 .scene-4{padding-bottom:calc(var(--bottom) + 12px);gap:7px}.schedule-stage{height:232px;max-width:265px}
 .event-card{padding:15px 12px;gap:8px}.event-art{width:96px;height:96px}.object-button{min-height:96px}
 .event-details{height:84px;gap:9px}.event-time{font-size:23px}.event-name{font-size:18px}
 .event-card .hint{top:53%}.event-counter{font-size:9px}
 .schedule-actions{margin-top:6px}.schedule-stage.timeline{height:calc(100dvh - 255px);min-height:240px}
 .timeline-row{padding:6px 8px;gap:9px;min-height:58px}.timeline-row .event-art{height:44px;width:44px}.timeline-row .object-button{min-height:44px}.timeline-row .event-time{font-size:17px}.timeline-row .event-name{font-size:11px}
 .scene-7{padding-top:var(--content-top);padding-bottom:calc(var(--bottom) + 12px);gap:8px}.scene-7 .closing-heading{font-size:31px}.scene-7 .venue-name{font-size:24px}.scene-7 .closing-actions{margin-top:2px}
}
@media(prefers-reduced-motion:reduce){.turning i{display:none!important}.hint,.timeline::before{animation:none}.event-art .art,.event-details,.event-foil rect{transition:none}}
#app[data-power=light] .turning i{display:none}#app[data-power=light] .hint{animation:none}
