/* Keepsake opening and the invitation-card handover.
   Carried over unchanged from the original build except for colour: olive is now sage.
   The card border, monogram position (32svh, 15svh wide) and copy offsets are tied to the
   final 3D camera projection in scene.js, so treat these numbers as fixed. */
@font-face{font-family:Bodoni;src:url('assets/bodoni.ttf') format('truetype');font-display:swap}
@font-face{font-family:GreatVibes;src:url('assets/great-vibes.ttf') format('truetype');font-display:swap}
:root{--ivory:#F7F2E7;--brass:#B49A65}
body.sealed{overflow:hidden}
#opening,.sound-control{font:15px/1.65 Arial,sans-serif}
#opening h1,#opening h2,#opening h3,#opening p{margin:0}
.opening-title i{font-style:normal;margin:0 10px}
#opening{position:fixed;inset:0;z-index:20;background:#efe0c7;color:#69502c;overflow:hidden}
.stage-frame{display:none}
.opening-title{position:absolute;top:25%;left:0;width:100%;text-align:center;z-index:2;pointer-events:none;transition:opacity .35s;color:#71562e;padding:0 24px}
.opening-title p{font-family:GreatVibes,Georgia,serif;font-weight:400;font-size:clamp(52px,5.5vw,80px);line-height:1.25;text-wrap:balance}
.opening-title>span{display:block;font:12px/1.8 Bodoni,Georgia,serif;letter-spacing:.035em;margin-top:18px}
#scene{position:absolute;inset:0}#scene canvas{display:block;width:100%;height:100%}
#open-box{position:absolute;inset:37% 0 7%;background:transparent;border:0;color:#69502c;z-index:3;display:flex;flex-direction:column;align-items:center;justify-content:flex-end;padding-bottom:24px;font:inherit;cursor:pointer}
#open-box:disabled{cursor:wait}
#tap-label{font-size:11px;letter-spacing:.16em;text-transform:uppercase;background:#f7f2e7e6;padding:6px 12px}
#open-box svg{height:36px;width:36px;border:1px solid #987644;border-radius:50%;padding:9px;margin-top:10px;background:#f7f2e7c9;fill:none;stroke:currentColor;stroke-width:1.3}
.opening-note{display:none}
.quiet{padding:10px 12px;color:inherit;background:none;border:0;display:flex;align-items:center;gap:8px;font:inherit;font-size:12px;letter-spacing:.02em;min-height:44px;cursor:pointer}
.quiet:hover{color:var(--brass)}
.quiet svg{width:20px;height:20px;fill:none;stroke:currentColor;stroke-width:1.3}
#skip{position:absolute;right:24px;bottom:18px;z-index:4;color:#69502c;background:#f7f2e7d9}
.sound-control{position:fixed;left:34px;bottom:29px;z-index:40;color:var(--ivory)}
.sound-control button{background:#3f4e3be0;border-radius:2px}
.sound-control svg{width:16px;height:16px}
body.sealed .sound-control{top:20px;left:20px;bottom:auto;color:#69502c}
body.sealed .sound-control button{background:#f7f2e7d9}
#fallback{position:absolute;inset:0;align-items:center;justify-content:center}
#fallback:not([hidden]){display:flex}
#fallback img{width:100%;height:100%;object-fit:contain}
body.playing .opening-title,body.playing #open-box{opacity:0;pointer-events:none}
body.playing #opening{background:var(--ivory)}
.fallback-mode .opening-title{top:16%}.fallback-mode #open-box{padding-bottom:24px}

/* Handover card */
.paper{background:var(--ivory) url(assets/paper.png)}
.invitation-card{height:100svh;min-height:650px;position:relative;text-align:center;overflow:hidden;box-shadow:inset 0 0 0 9px var(--sage-500,#8A9B7E)}
.card-border{position:absolute;inset:24px;border:1px solid #5d6f5588}
.card-border:after{content:'';position:absolute;inset:5px;border:1px solid #b49a6555}
#live-monogram{position:absolute;width:15svh;height:auto;top:32svh;left:50%;transform:translate(-50%,-50%)}
.invitation-copy{opacity:0;position:absolute;top:44svh;left:24px;right:24px}
.greeting{font-size:12px;line-height:1.8;letter-spacing:.025em}
.invitation-copy h1{font-family:GreatVibes,Georgia,serif;font-weight:400;font-size:clamp(46px,6vw,76px);line-height:1.2;margin:20px 0 26px}
.date{font-family:Bodoni,Georgia,serif;font-size:21px}
.location{font-size:12px;letter-spacing:.09em;margin-top:6px}
.read-on{display:inline-flex;align-items:center;flex-direction:column;gap:14px;margin-top:40px;font-size:12px;letter-spacing:.03em;text-decoration:none}
.read-on svg{width:20px;height:26px;fill:none;stroke:currentColor;stroke-width:1.3}
.revealing .invitation-copy{opacity:1;animation:reveal .7s both}
.revealing .date,.revealing .location{animation:reveal .6s .2s both}
@keyframes reveal{from{opacity:0;transform:translateY(9px)}to{opacity:1;transform:translateY(0)}}

@media(min-width:900px){.opening-title{top:22%}.opening-title>span{font-size:14px}#open-box{padding-bottom:12px;bottom:9%}}
@media(max-width:650px){
 .opening-title{top:25%}.opening-title p{font-size:52px}.opening-title>span{font-size:12px;letter-spacing:0}.opening-title i{margin:0 5px}
 .sound-control{left:15px;bottom:15px}
 .invitation-copy h1{font-size:48px}.read-on{margin-top:30px}.card-border{inset:15px}
}
@media(max-height:690px){
 .opening-title{top:22%}.opening-title p{font-size:43px}.opening-title>span{margin-top:8px}#open-box{bottom:6%;padding-bottom:15px}
 .invitation-card{min-height:100svh}.invitation-copy{top:42svh}.invitation-copy h1{font-size:39px;margin:16px 0}.date{font-size:19px}.read-on{margin-top:20px}
}
@media(prefers-reduced-motion:reduce){.revealing .invitation-copy,.revealing .date,.revealing .location{animation:none}}
