:root{--paper:#fdfbf6;--ink:#443e35;--sage:#646e50;--rose:#a46670;--gold:#b69a67;--muted:#80796d;--line:#ded6c4;color-scheme:light;font-size:16px}
*{box-sizing:border-box}html{scroll-behavior:smooth;scroll-padding-top:85px}body{margin:0;background:var(--paper);color:var(--ink);font-family:Editorial,Georgia,serif;-webkit-font-smoothing:antialiased}body.locked{overflow:hidden}button,a{-webkit-tap-highlight-color:transparent}button{font:inherit}a{color:inherit}button:focus-visible,a:focus-visible{outline:2px solid var(--rose);outline-offset:6px}button{cursor:pointer}img{display:block;max-width:100%}.small-caps{font-family:Arial,sans-serif;font-size:.75rem;font-weight:400;letter-spacing:.22em;line-height:1.6}.entrance{display:none;position:fixed;inset:0;z-index:100;background:#333c37;overflow:hidden;isolation:isolate}.js .entrance{display:block}.entrance-scene{position:absolute;inset:0;transform-origin:50% 58%;will-change:transform;backface-visibility:hidden}.entrance-art{width:100%;height:100%;object-fit:cover;object-position:50% 56%}.entrance-shade{position:absolute;inset:0;background:linear-gradient(180deg,rgba(18,30,27,.27),transparent 30%,transparent 60%,rgba(26,32,28,.74))}.entrance-top{position:absolute;top:max(5.5vh,34px);left:24px;right:24px;display:flex;align-items:center;flex-direction:column;gap:12px;color:#fff9e8;text-shadow:0 2px 18px #443a3055;transition:opacity .5s}.entrance-brand{font-family:Celebration,Georgia,serif;font-size:clamp(2.3rem,4vw,3.7rem);line-height:1.2}.entrance-bottom{position:absolute;left:22px;right:22px;bottom:max(5.5vh,34px);display:flex;align-items:center;flex-direction:column;color:#fff9e8;transition:opacity .5s,transform .7s}.entrance-date{font-size:1.2rem;letter-spacing:.07em;margin-bottom:20px}.open-door{border:0;background:none;color:inherit;font-size:clamp(2.1rem,4vw,3.1rem);font-family:Celebration,Georgia,serif;padding:12px 32px 4px;line-height:1.2}.door-line{display:block;width:80px;height:1px;background:#ecddbd;margin:13px auto 0;transition:width .4s}.open-door:hover .door-line{width:130px}.sound-hint{font-size:.9rem;line-height:1.6;letter-spacing:.025em;text-align:center;opacity:.82;margin-top:18px}.gate-hotspot{position:absolute;inset:22% 12% 29%;border:0;background:transparent;border-radius:40% 40% 0 0}.gate-hotspot:focus-visible{outline-color:#fff6dd;outline-offset:-12px}.door-light{position:absolute;left:50%;top:58%;width:8%;height:23%;border-radius:50% 50% 5% 5%;transform:translate(-50%,-50%);background:radial-gradient(ellipse,#fffbe7 0%,#f5da9c80 42%,transparent 72%);opacity:0;filter:blur(12px)}.transition-veil{position:absolute;inset:0;background:var(--paper);opacity:0;pointer-events:none}.opening .entrance-scene{animation:enterGate 1.8s cubic-bezier(.54,.01,.29,1) forwards}.opening .entrance-top,.opening .entrance-bottom{opacity:0;pointer-events:none}.opening .entrance-bottom{transform:translateY(16px)}.opening .gate-hotspot{pointer-events:none}.opening .door-light{animation:doorGlow 1.8s ease-in forwards}.opening .transition-veil{animation:veil 1.8s ease forwards}.entrance.finished{display:none}.js .invitation{opacity:0;transition:opacity .35s ease}.js.entered .invitation{opacity:1}.music-toggle{position:fixed;bottom:max(20px,env(safe-area-inset-bottom));right:20px;z-index:20;display:flex;align-items:center;gap:10px;min-height:45px;padding:10px 15px;border:1px solid #d8d1c1;border-radius:50px;color:var(--sage);background:#fdfbf6ec;backdrop-filter:blur(10px);font-family:Arial,sans-serif;font-size:.75rem;box-shadow:0 3px 22px #5c51380b}.music-toggle[hidden]{display:none}.music-bars{display:flex;align-items:center;gap:3px;height:18px}.music-bars i{width:2px;height:5px;background:var(--sage);border-radius:2px}.music-toggle.playing .music-bars i{animation:sound 1s ease-in-out infinite alternate}.music-bars i:nth-child(2){animation-delay:.3s!important}.music-bars i:nth-child(3){animation-delay:.6s!important}.music-bars i:nth-child(4){animation-delay:.15s!important}@keyframes enterGate{0%{transform:perspective(900px) scale(1)}27%{transform:perspective(900px) scale(1.15)}100%{transform:perspective(900px) scale(5.5) rotateX(-1deg)}}@keyframes doorGlow{0%,20%{opacity:0}65%{opacity:.6}100%{opacity:1;transform:translate(-50%,-50%) scale(4)}}@keyframes veil{0%,54%{opacity:0}90%,100%{opacity:1}}@keyframes sound{from{height:4px}to{height:17px}}
html{background:#e9e6df;scroll-padding-top:76px;-webkit-text-size-adjust:100%}
body{background:#e9e6df}
.invitation{width:100%;max-width:520px;margin-inline:auto;background:var(--paper);box-shadow:0 0 75px #4c493612;overflow-x:clip}
.entrance{left:50%;right:auto;width:min(100%,520px);transform:translateX(-50%);height:100%;height:100dvh}
/* Follow the roof at 33.8% of the cover image, with an 18px gap above it. */
.entrance-top{top:max(calc(env(safe-area-inset-top) + 64px),calc(61dvh - max(27.2dvh,min(36.267vw,188.59px)) - 18px));transform:translateY(-100%);gap:10px}
.entrance-brand{font-size:clamp(2.25rem,9vw,2.9rem)}
.entrance-bottom{bottom:max(30px,calc(env(safe-area-inset-bottom) + 22px));left:18px;right:18px}
.entrance-date{font-size:1.1rem;margin-bottom:12px}
.open-door{font-size:2.65rem;min-height:60px;touch-action:manipulation}
.sound-hint{max-width:280px;font-size:.9rem;margin-top:14px}

@font-face{font-family:Celebration;src:url('assets/celebration.woff') format('woff');font-display:swap}
@font-face{font-family:Editorial;src:url('assets/editorial.woff') format('woff');font-display:swap}
html{scroll-padding-top:0}body{background:#e9e6df}.invitation{background:#fff;overflow:hidden;box-shadow:0 0 60px #4c493615}.invitation:focus{outline:none}
.pdf-pages{position:relative;background:#fff;width:100%}.pdf-tile{display:block;width:100%;height:auto;margin:0;padding:0;border:0;background:#fff}.pdf-section{position:relative;margin:0;padding:0}.pdf-section img{display:block}.sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border:0}
.music-toggle{right:max(12px,calc((100vw - 520px)/2 + 12px));bottom:max(12px,calc(env(safe-area-inset-bottom) + 8px));min-width:44px;min-height:44px;font-size:.7rem;padding:10px 12px;touch-action:manipulation}
.petal-rain{position:fixed;left:50%;top:0;width:min(100%,520px);height:100%;height:100dvh;transform:translateX(-50%);overflow:hidden;pointer-events:none;z-index:18;contain:strict;visibility:hidden}.entered .petal-rain{visibility:visible}.falling-petal{position:absolute;top:-40px;left:var(--left);width:var(--size);height:var(--size);opacity:0;animation:petalFall var(--duration) linear var(--delay) infinite;pointer-events:none}.petal-rain.paused .falling-petal{animation-play-state:paused}
@keyframes petalFall{0%{transform:translate3d(0,-35px,0) rotate(var(--turn));opacity:0}8%,75%{opacity:.55}100%{transform:translate3d(var(--drift),calc(100dvh + 85px),0) rotate(calc(var(--turn) + 290deg));opacity:0}}
.entrance-scene{transform-origin:50% 61%}.entrance-art{object-position:50% 61%}.door-light{top:61%}.js .invitation{visibility:hidden}.js.entered .invitation{visibility:visible}
@media(orientation:landscape) and (max-height:550px){.entrance-top{top:14px;transform:none}.entrance-brand{font-size:2rem}.entrance-bottom{bottom:16px}.entrance-date{font-size:1rem;margin-bottom:2px}.open-door{font-size:2rem;min-height:44px;padding-top:6px}.sound-hint{display:none}.door-line{margin-top:5px}}
@media(prefers-reduced-motion:reduce){html{scroll-behavior:auto}.petal-rain{display:none}*,*:before,*:after{animation-duration:.01ms!important;animation-iteration-count:1!important;transition-duration:.01ms!important}}

.pdf-tile:not([src]){visibility:hidden}
