/* Tactile stationery opening, styled individually for each invitation. */
.envelope-hit-area{position:absolute;inset:0;z-index:6;width:100%;height:100%;min-width:0;background:transparent!important;color:transparent!important;border-radius:8px;font-size:0!important;box-shadow:none}.envelope-hit-area svg{display:none}.envelope-hit-area:hover{background:#ffffff08!important}.envelope-hit-area:focus-visible{outline:3px solid var(--seal);outline-offset:8px}.envelope-hint{font-size:12px;letter-spacing:.04em;margin:-8px 0 26px;color:var(--ink)}
.cover{--envelope:#d6b7a0;--fold:#e9ceba;--seal:#92573e;display:flex;align-items:center;justify-content:center;padding:64px 24px 32px;overflow:auto;background:radial-gradient(ellipse at 15% 10%,#e2cbb74d,transparent 55%),var(--paper);transition:opacity .4s,visibility .4s}
.cover>img{display:none}.cover-copy{width:100%;max-width:430px;margin:0!important}.cover .float-brand{top:24px}.cover h1{font-size:clamp(42px,11vw,60px);line-height:1;letter-spacing:-1.5px;margin:16px 0}.cover h1 em{font-size:.65em;margin-top:8px}.cover .overline{font-size:11px;letter-spacing:.16em}.cover-date{font-size:12px;margin:18px}.open-button{font-size:14px;border-radius:30px;min-height:52px;letter-spacing:.025em;transition:transform .2s,opacity .2s}.open-button:disabled{opacity:.6}.theme-wedding .cover{--envelope:#244b5c;--fold:#365e6e;--seal:#c8ab72;background:#102b3a}.theme-wedding .open-button{background:#ede3ce;color:#102b3a}.theme-baby .cover{--envelope:#9eafa3;--fold:#c1cdbd;--seal:#aa6b51}.theme-xv .cover:before{width:180px;height:180px;opacity:.8;z-index:0}
.keepsake{position:relative;width:min(100%,340px);aspect-ratio:1.5;margin:74px auto 34px;perspective:1000px;isolation:isolate;filter:drop-shadow(0 18px 18px #30271925)}
.keepsake-back{position:absolute;inset:0;background:var(--envelope);border-radius:8px;z-index:0}
.keepsake-letter{position:absolute;inset:10% 7% 5%;background:#fcf7e9;color:#4f4635;border:1px solid #bca985;outline:1px solid #d8c9aa;outline-offset:-9px;border-radius:5px;z-index:1;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:8px;transition:transform .65s cubic-bezier(.2,.7,.2,1) .45s}
.keepsake-letter span{font:italic 18px var(--display)}.keepsake-letter b{font:400 45px var(--display)}.keepsake-letter small{font-size:9px;letter-spacing:.08em}
.keepsake-front{position:absolute;inset:0;background:linear-gradient(32deg,var(--fold) 49.6%,transparent 50%) left/50.1% 100% no-repeat,linear-gradient(-32deg,var(--fold) 49.6%,transparent 50%) right/50.1% 100% no-repeat;z-index:3;border-radius:0 0 8px 8px}
.keepsake-front:after{content:'';position:absolute;inset:0;background:var(--envelope);clip-path:polygon(0 100%,50% 43%,100% 100%);border-radius:0 0 8px 8px}
.keepsake-flap{position:absolute;inset:0;background:linear-gradient(160deg,var(--fold),var(--envelope));clip-path:polygon(0 0,100% 0,50% 62%);transform-origin:top;z-index:4;transition:transform .65s cubic-bezier(.3,.05,.2,1) .12s}
.keepsake-seal{position:absolute;top:43%;left:50%;width:64px;height:64px;translate:-50% -10%;display:grid;place-items:center;border-radius:48% 52% 46% 54%;background:var(--seal);color:#fff1d7;font:500 20px var(--display);z-index:5;box-shadow:inset 0 0 0 4px #ffffff15,inset 0 0 0 6px #331d2020,0 4px 8px #241a2938;border:1px solid #ffffff30;transition:transform .3s,opacity .25s}
.unsealing .keepsake-seal{transform:translateY(14px) rotate(15deg) scale(1.15);opacity:0}.unsealing .keepsake-flap{transform:rotateX(-180deg);z-index:0}.unsealing .keepsake-letter{transform:translateY(-48%)}
.sound-control{position:fixed;right:max(16px,env(safe-area-inset-right));bottom:max(20px,env(safe-area-inset-bottom));z-index:15;width:48px;height:48px;border-radius:50%;border:1px solid #c1ad86;background:#f8f1e4;color:#263c34;display:grid;place-items:center;box-shadow:0 5px 20px #152f2926;cursor:pointer}.sound-control[hidden]{display:none}.sound-control svg{width:23px;height:23px}.sound-slash{display:none}.is-paused .sound-slash{display:block}
/* Readable invitation typography and a clear, consistent mobile rhythm. */
.lead,.story-copy>p:not(.section-label):not(.signature),.feature p,.timeline-row p,.dress-card p,.gift-note p{font-size:15px;line-height:1.75;opacity:1}.section-label,.overline{font-size:11px}.timeline-row strong,.detail strong,.rsvp-card label{font-size:14px}.rsvp-card input,.rsvp-card select{font-size:16px;min-height:52px}.section,.paper-section,.split{padding-block:48px}.feature{padding-block:24px}.masthead{font-size:10px;gap:16px}.masthead a{min-height:44px;display:flex;align-items:center}.calendar .week,.countdown span{font-size:11px}.dates span{font-size:13px}.countdown strong{font-size:38px}.gift-note{padding:40px 28px}.footer{padding-bottom:80px}.display{line-height:1.1}.theme-wedding .hero-portrait figcaption{font-size:10px}.theme-wedding .flight-data small,.theme-wedding .boarding-side small{font-size:10px}.theme-wedding .flight-data strong,.theme-wedding .boarding-side strong{font-size:12px}.theme-wedding .boarding-pass{border-radius:18px}.theme-baby .story-grid{grid-template-columns:1fr}.theme-baby .story-photo{width:72%;margin:0 auto 12px}.theme-baby .story-copy{text-align:center}.theme-baby .vote{min-height:88px;font-size:16px}
@media(max-height:680px){.cover{padding-top:45px}.keepsake{width:245px;margin-top:40px;margin-bottom:24px}.cover h1{font-size:40px}.cover-date{margin:12px}.cover .float-brand{top:14px}}
@media(prefers-reduced-motion:reduce){.keepsake *,.cover{transition:none!important}.unsealing .keepsake-letter,.unsealing .keepsake-flap{transform:none}}
