:root{color-scheme:dark;--ink:#0b090a;--ivory:#f3dfbd;--wax:#6f121b;--card-w:min(88vw,390px);--card-h:min(117vw,500px)}
*{box-sizing:border-box}html{background:var(--ink)}body{margin:0;min-height:100vh;color:var(--ivory);background:radial-gradient(ellipse 70% 65% at 50% 40%,#34221c 0%,#191213 44%,#090809 100%);font-family:Georgia,'Times New Roman',serif;overflow-x:hidden}button,input{font:inherit}button{cursor:pointer}.fog{position:fixed;inset:-25%;pointer-events:none;z-index:0;opacity:.25;background:radial-gradient(ellipse 30% 17% at 20% 25%,#5e5652 0%,transparent 80%),radial-gradient(ellipse 35% 18% at 78% 70%,#61514a 0%,transparent 80%);filter:blur(44px);animation:drift 28s ease-in-out infinite alternate}@keyframes drift{to{transform:translate(9%,4%) scale(1.12)}}.scene{position:relative;z-index:1;min-height:100svh;display:flex;flex-direction:column;align-items:center;padding:max(24px,env(safe-area-inset-top)) 12px max(28px,env(safe-area-inset-bottom))}.masthead{display:flex;align-items:center;gap:18px;color:#9b8170;font:10px/1.4 Georgia,serif;letter-spacing:.36em;text-align:center;margin:0 auto 26px;white-space:nowrap}.rule{width:38px;height:1px;background:#6b4640}.stage{width:100%;flex:1;display:flex;justify-content:center;align-items:center;min-height:calc(var(--card-h) + 32px);perspective:1300px}.invitation{width:var(--card-w);height:var(--card-h);position:relative;isolation:isolate;filter:drop-shadow(0 28px 29px #000a);transform-style:preserve-3d}.invitation::before{content:'';position:absolute;inset:0;background:#171312 url('/assets/exterior-black-paper.webp') center/cover;box-shadow:inset 0 0 0 2px #83706325,inset 0 0 30px #000b;z-index:-1}.paper-interior{position:absolute;inset:0;overflow:hidden;background:#b7511c url('/api/assets/interior-burnt-orange-paper.webp') center/cover;box-shadow:inset 0 0 22px #481b0f95,inset 0 0 0 2px #7f390ea0;visibility:hidden}.invitation.opening .paper-interior,.invitation.closing .paper-interior{visibility:visible}.speckles,.handprint{position:absolute;inset:0;pointer-events:none;background-position:center;background-size:cover}.speckles{background-image:url('/api/assets/aged-burgundy-speckles.webp');opacity:.27}.handprint{background-image:url('/api/assets/handprint-stain-overlay.webp');opacity:0;mix-blend-mode:multiply;transition:opacity 20s linear}.invitation.revealed .handprint.emerging{opacity:.1;transition-delay:4s}.flap{position:absolute;inset:0;background:#151313 url('/assets/exterior-black-paper.webp') center/cover;backface-visibility:hidden;transform-style:preserve-3d;will-change:transform;box-shadow:inset 0 0 22px #000d,0 3px 10px #0008}.flap-top{z-index:5;clip-path:polygon(0 0,100% 0,50% 53%);transform-origin:50% 0}.flap-left{z-index:4;clip-path:polygon(0 0,52% 51%,0 100%);transform-origin:0 50%;filter:brightness(.95)}.flap-right{z-index:3;clip-path:polygon(100% 0,48% 51%,100% 100%);transform-origin:100% 50%;filter:brightness(.83)}.flap-bottom{z-index:2;clip-path:polygon(0 100%,50% 49%,100% 100%);transform-origin:50% 100%;filter:brightness(.92)}.seal-button{position:absolute;top:50%;left:50%;transform:translate(-50%,-50%) rotate(-6deg);width:clamp(108px,32%,140px);aspect-ratio:1;padding:0;border:0;background:none;z-index:8;filter:drop-shadow(0 9px 7px #000e);transition:scale .35s ease,opacity .35s ease}.seal-button:not(:disabled):hover{scale:1.07}.seal-button:focus-visible,.controls button:focus-visible,.gate button:focus-visible,.gate input:focus-visible{outline:2px solid #f0c696;outline-offset:4px}.seal-button img{display:block;width:100%;height:100%;object-fit:contain}.crack{position:absolute;inset:15%;opacity:0;background:linear-gradient(118deg,transparent 47%,#170709 48%,#170709 49%,#dec1a0 49.5%,transparent 50%);clip-path:polygon(42% 0,57% 28%,50% 45%,65% 70%,50% 100%,40% 68%,52% 44%,44% 26%)}.seal-button.cracking .crack{opacity:.9}.seal-button.broken{opacity:0;scale:.8;pointer-events:none}.hint{height:18px;margin:12px 0 18px;font-size:10px;letter-spacing:.31em;color:#b98b75;text-align:center}.controls{display:flex;gap:13px;flex-wrap:wrap;justify-content:center;margin-top:16px}.controls[hidden]{display:none}.controls button{border:1px solid #765149;background:#160d0d;color:#e2c7a5;padding:12px 16px;min-height:44px;font-size:11px;letter-spacing:.18em}.letter{position:relative;z-index:1;padding:43px 22px 35px;text-align:center;color:#2d150e;opacity:0;transition:opacity .75s ease}.letter .crest{font-size:24px;color:#68231a;line-height:1}.letter h1{font-size:clamp(22px,7vw,34px);letter-spacing:.06em;line-height:1.05;margin:15px 0 5px;text-shadow:0 1px #eba14c44}.letter .subhead{font-size:12px;letter-spacing:.25em;margin:8px 0 27px}.letter .date{font-weight:bold;letter-spacing:.16em;font-size:14px;margin:0 0 17px}.letter address{font-size:15px;font-style:normal;line-height:1.45}.letter .intro{font-style:italic;font-size:16px;line-height:1.44;margin:21px 0}.letter .notice{font-weight:bold;font-size:16px;letter-spacing:.13em;margin:13px 0 4px}.letter .small{font-size:13px;margin:4px 0;line-height:1.4}.letter .divider{height:45px;margin:18px auto 12px;background:url('/api/assets/gothic-ornament-divider.webp') center/contain no-repeat;filter:brightness(.4)}.letter h2{font-size:19px;letter-spacing:.09em;margin:12px 0 3px}.letter ul{list-style:none;padding:0;margin:12px auto 20px}.letter li{padding:5px 0;border-bottom:1px solid #61311f31;font-size:14px;font-weight:bold;letter-spacing:.05em}.letter .ending{font-weight:bold;letter-spacing:.2em;margin:17px 0 7px}.letter .rsvp{font-style:italic;font-size:13px}.invitation.revealed{height:auto;min-height:var(--card-h);filter:drop-shadow(0 27px 27px #000a)}.invitation.revealed .paper-interior{position:relative;min-height:var(--card-h);visibility:visible}.invitation.revealed .letter{opacity:1}.invitation.revealed .flap{visibility:hidden}.gate{position:fixed;z-index:20;inset:0;display:grid;place-items:center;padding:20px;background:#090809dc;backdrop-filter:blur(13px)}.gate[hidden]{display:none}.gate-panel{width:min(100%,410px);padding:36px 26px 30px;border:1px solid #74534c;background:#151011 url('/assets/exterior-black-paper.webp') center/cover;box-shadow:0 22px 70px #000;text-align:center}.gate .eyebrow{font-size:10px;color:#bf8d7b;letter-spacing:.27em}.gate h1{font-size:29px;line-height:1.1;letter-spacing:.08em;margin:19px 0}.gate p{font-size:15px;line-height:1.5;color:#d2bbaa}.gate label{display:block;text-align:left;font-size:10px;letter-spacing:.23em;margin:25px 0 7px}.gate input{width:100%;background:#0c0909;color:white;border:1px solid #846459;padding:13px 12px;font-size:16px;border-radius:0}.gate button{width:100%;min-height:48px;margin-top:15px;background:#681a20;color:#f7e5c9;border:1px solid #a26058;font-size:11px;letter-spacing:.15em}.gate .error{min-height:24px;color:#f6aca2;font-size:13px;margin:12px 0 0}
@media(max-width:360px){:root{--card-w:89vw;--card-h:120vw}.letter{padding-left:17px;padding-right:17px}.masthead{gap:8px;font-size:8px;letter-spacing:.25em}.rule{width:19px}}
@media(min-width:700px){:root{--card-w:430px;--card-h:555px}.masthead{margin-bottom:10px}}
@media(prefers-reduced-motion:reduce){.fog{animation:none}.handprint{transition-duration:0s!important}.letter{transition-duration:.1s}}
.invitation.closing .handprint{opacity:0!important;transition:opacity .4s linear!important}
/* Visible fold edges on the closed sheet. */
.flap-top{background-image:linear-gradient(165deg,#877b6940 0%,transparent 30%,#0008 98%),url('/assets/exterior-black-paper.webp');filter:brightness(1.1) drop-shadow(0 4px 5px #000b)}
.flap-left{background-image:linear-gradient(100deg,#81716430,transparent 55%,#000b),url('/assets/exterior-black-paper.webp');filter:brightness(.9) drop-shadow(3px 0 5px #000b)}
.flap-right{background-image:linear-gradient(260deg,#84726725,transparent 55%,#000c),url('/assets/exterior-black-paper.webp');filter:brightness(.77) drop-shadow(-3px 0 5px #000b)}
.flap-bottom{background-image:linear-gradient(0deg,#6e5d522e,transparent 58%,#000a),url('/assets/exterior-black-paper.webp');filter:brightness(.96) drop-shadow(0 -3px 5px #000b)}
.fold-engraving{position:absolute;inset:0;width:100%;height:100%;z-index:6;pointer-events:none;opacity:.76;transition:opacity .25s ease}
.fold-engraving path{fill:none;vector-effect:non-scaling-stroke;stroke-linejoin:round}
.fold-engraving .fold-shade{stroke:#020101;stroke-width:3.3px}
.fold-engraving .fold-light{stroke:#857569;stroke-width:.7px;opacity:.64}
.invitation.opening .fold-engraving,.invitation.revealed .fold-engraving,.invitation.closing .fold-engraving{opacity:0}
/* Foreshortened orange reverse surfaces remain visible around the letter. */
.unfolded-wing{position:absolute;z-index:0;visibility:hidden;opacity:0;background-color:#b7511c;background-image:linear-gradient(110deg,#ef9a4b22,#531e0e55),url('/api/assets/interior-burnt-orange-paper.webp');background-size:cover;background-position:center;box-shadow:inset 0 0 12px #4b1a0e99;filter:drop-shadow(0 8px 10px #000b);transition:opacity .45s ease}
.unfolded-wing.show{visibility:visible;opacity:1}
.wing-top{height:calc(var(--card-h) * .42);width:100%;left:0;bottom:100%;clip-path:polygon(0 100%,50% 0,100% 100%);background-image:linear-gradient(0deg,#5c24114d,transparent 62%),url('/api/assets/interior-burnt-orange-paper.webp')}
.wing-bottom{height:calc(var(--card-h) * .42);width:100%;left:0;top:100%;clip-path:polygon(0 0,50% 100%,100% 0);background-image:linear-gradient(180deg,#5c24114d,transparent 62%),url('/api/assets/interior-burnt-orange-paper.webp')}
.wing-left{height:var(--card-h);width:18.5%;right:100%;top:0;clip-path:polygon(100% 0,0 50%,100% 100%);background-image:linear-gradient(90deg,#49201066,transparent 80%),url('/api/assets/interior-burnt-orange-paper.webp')}
.wing-right{height:var(--card-h);width:18.5%;left:100%;top:0;clip-path:polygon(0 0,100% 50%,0 100%);background-image:linear-gradient(270deg,#49201066,transparent 80%),url('/api/assets/interior-burnt-orange-paper.webp')}
.scene.is-open .stage{padding-top:calc(var(--card-h) * .44);padding-bottom:calc(var(--card-h) * .44);align-items:flex-start}
@media(max-width:599px){:root{--card-w:74vw}.wing-left,.wing-right{width:17%}.letter{padding-inline:16px}.letter .date{letter-spacing:.1em}.letter .notice{letter-spacing:.08em}}
@media(prefers-reduced-motion:reduce){.unfolded-wing,.fold-engraving{transition:none}}
.wing-left::after,.wing-right::after,.wing-top::after,.wing-bottom::after{content:'';position:absolute;background:#58261499;box-shadow:0 0 4px #f6ac5b55}
.wing-left::after{right:0;top:0;bottom:0;width:2px}
.wing-right::after{left:0;top:0;bottom:0;width:2px}
.wing-top::after{bottom:0;left:0;right:0;height:2px}
.wing-bottom::after{top:0;left:0;right:0;height:2px}
