@font-face{font-family:Great Vibes;src:url('assets/great-vibes.ttf') format('truetype');font-display:swap}
@font-face{font-family:Italiana;src:url('assets/italiana.ttf') format('truetype');font-display:swap}
@font-face{font-family:'Dancing Script';src:url('assets/dancing-script.ttf') format('truetype');font-weight:400 700;font-style:normal;font-display:swap}
:root{color-scheme:light;--blush:#ffe5ec;--pastel:#ffc2d1;--cherry:#ffb3c6;--candy:#ff8fab;--rouge:#fb6f92;--ink:#68213d;--wine:var(--cherry);--cream:var(--ink);--pink:var(--pastel);--stripe:26px;--ease-out:cubic-bezier(.22,1,.36,1);--script:'Great Vibes','Snell Roundhand','Apple Chancery',cursive}
*{box-sizing:border-box}
html{min-width:280px;background:var(--blush)}
body{margin:0;min-height:100vh;min-height:100svh;color:var(--cream);background:repeating-linear-gradient(90deg,#fff2f5 0,#fff2f5 8px,#ffdae4 9px,#ffc2d18c 13px,#ffe5ec 15px,#fff2f5 17px,#fff2f5 25px);-webkit-text-size-adjust:100%}
button{font:inherit;-webkit-tap-highlight-color:transparent}
.scrapbook{width:min(100%,980px);padding:7.25% 7.56% 8.5%;margin:auto}
@media(min-width:980px){.scrapbook{padding:71px 74px 83px}}
#hero{width:71.3%;margin:0 auto clamp(24px,4vw,40px);position:relative;z-index:1}
.card-grid{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:24px 22px;gap:clamp(12px,2.4vw,24px) clamp(12px,2.2vw,22px)}
.album-card{position:relative;display:block;width:100%;padding:0;border:0;background:var(--wine);text-align:initial;color:inherit;cursor:pointer;isolation:isolate;box-shadow:0 4px 16px #a43b6012;transition:box-shadow .4s var(--ease-out);touch-action:manipulation}
.album-card:focus-visible{outline:3px solid var(--ink);outline-offset:5px}
.card-art{position:relative;width:100%;aspect-ratio:16/9;container-type:inline-size;isolation:isolate;overflow:hidden;background:var(--wine)}
.hero-art{overflow:visible}
.script{font-family:var(--script);font-weight:400;line-height:1.05;text-shadow:0 1px 0 #fff0f580}
.paper-grain{position:absolute;inset:0;z-index:-1;background:linear-gradient(143deg,transparent 38%,#ffffff25 40%,#b7476d0e 43%,transparent 48%),linear-gradient(24deg,transparent 34%,#b7476d0c 37%,#ffffff20 40%,transparent 43%),linear-gradient(112deg,transparent 43%,#ffffff28 45%,#b7476d0c 48%,transparent 53%),linear-gradient(67deg,transparent 44%,#b7476d0a 47%,#ffffff20 50%,transparent 55%),linear-gradient(110deg,var(--pastel),var(--cherry) 54%,var(--candy));background-size:79px 113px,103px 137px,131px 89px,173px 157px,100% 100%;box-shadow:inset 0 0 35px #fb6f9212}
.heart{position:absolute;line-height:1;color:#b62f5c;font-size:4.2cqw;pointer-events:none}
.star{position:absolute;color:#bd3a64;font-size:6cqw;line-height:1;pointer-events:none}
.hero-happy{position:absolute;left:6%;top:9%;font-size:12cqw;transform:rotate(-5deg)}
.hero-anniversary{position:absolute;right:5%;bottom:5%;font-size:11.5cqw}
.hero-fifth{position:absolute;left:69%;top:25%;z-index:3;font-size:9cqw;-webkit-text-stroke:.2px var(--ink)}
.hero-photo{position:absolute;left:20.6%;top:32.4%;width:58.8%;height:38.5%;border:2px solid #fff0f5}
.hero-heart-a{left:59.5%;top:12%}.hero-heart-b{left:12%;top:35%;font-size:3.6cqw}.hero-heart-c{left:27%;top:83%}
.burst{position:absolute;right:-16%;top:31%;display:grid;place-items:center;width:31%;height:54%;filter:drop-shadow(0 1px 1px #350715);z-index:4}
.burst:before,.burst:after{content:'';position:absolute;inset:0;background:#55112f;clip-path:polygon(50% 0,67% 17%,91% 19%,89% 44%,100% 64%,79% 77%,72% 100%,48% 92%,25% 99%,18% 77%,0 64%,12% 42%,10% 21%,33% 18%)}
.burst:after{inset:3px;background:#db739e}
.burst span{position:relative;z-index:1;color:#fff4f7;font:600 11cqw/1 Arial,sans-serif;letter-spacing:-.6cqw;-webkit-text-stroke:1px #380615;text-shadow:2px 2px #380615;transform:rotate(1deg)}
.photo-slot{width:100%;height:100%;display:grid;place-items:center;position:relative;overflow:hidden;background:repeating-linear-gradient(135deg,#ffffff12 0 8px,#9b536308 8px 9px),linear-gradient(125deg,#e6d2d7,#c5a6b0);border:1px dashed #fff0f5aa;color:#512538;font:400 clamp(7px,2.1cqw,14px)/1.15 Arial,sans-serif;text-align:center}
.photo-label{display:flex;flex-direction:column;gap:.12em;max-width:100%;padding:3px;z-index:1;background:#fff3f7f2;box-shadow:0 0 0 1px #68213d1a;border-radius:1px;overflow-wrap:anywhere}
.photo-label strong{font-weight:600;white-space:nowrap;letter-spacing:-.03em;font-size:1.06em}.photo-proposed{font-size:.9em}.photo-name{font-size:.9em}.photo-unit{font-size:.8em}
.photo-slot img{width:100%;height:100%;object-fit:cover;display:block}.photo-slot.has-photo{border:0}
.background-photo{position:absolute;inset:0;z-index:-2}.background-slot{background:repeating-linear-gradient(8deg,#ffffff12 0 24px,#b34e6b08 26px 27px),linear-gradient(130deg,#f3d6df,#debbc7);border:none}
.background-slot>.photo-label{position:absolute;right:3%;top:8%;font-size:2cqw}
.song-heading{position:absolute;top:13%;left:5%;width:48%;text-align:center;line-height:1;z-index:2}.song-heading>span{font-family:Italiana,Georgia,serif;font-size:7.5cqw;white-space:nowrap}.song-heading small{display:block;font:2.6cqw/1.3 Arial,sans-serif;margin-top:3%}
.song-art .background-slot img{object-position:center 38%}.song-tint{position:absolute;inset:0;z-index:-1;background:linear-gradient(110deg,#ffe5ecf5 0%,#ffe5ece8 45%,#ffc2d194 100%)}
.song-caption{position:absolute;left:7%;top:47%;width:42%;z-index:2}.song-name{display:block;font:italic 400 4.8cqw/1.2 'Times New Roman',serif}.song-caption small{display:block;margin-top:5%;font:2.3cqw/1.4 Arial,sans-serif}
.song-listen{position:absolute;left:7%;bottom:12%;display:flex;align-items:center;gap:.6em;padding:.65em 1em;border:1px solid #a3345b55;border-radius:30px;background:#fff3f7db;color:var(--ink);font:2.7cqw/1 Arial,sans-serif}.song-listen>span{font-size:.8em}
.vinyl{position:absolute;width:55%;aspect-ratio:1;left:50%;top:18%;border-radius:50%;background:repeating-radial-gradient(circle,#181818 0 1px,#2a2a2a 2px,#101010 3px,#1b1b1b 4px),#151515;box-shadow:0 -1px 4px #eee6,0 5px 18px #68213d40;overflow:hidden}
.vinyl:before{content:'';position:absolute;inset:0;border-radius:50%;background:conic-gradient(from -10deg,transparent 0deg,#ffffff48 26deg,transparent 60deg,transparent 155deg,#ffffff16 180deg,transparent 206deg)}
.record-label{position:absolute;inset:25%;border-radius:50%;overflow:hidden;background:#a9365c;border:2px solid #e7a8bb}
.record-label img{width:100%;height:100%;object-fit:cover;display:block}
.record-label i{position:absolute;width:7%;height:7%;border-radius:50%;background:#090909;top:46%;left:46%}
.song-art .star-a{left:3%;top:4%;font-size:3cqw}.song-art .star-b{right:10%;top:6%;font-size:3cqw}.song-art .star-c{left:44%;bottom:8%;top:auto;font-size:4cqw}
.viewer-content .song-art{aspect-ratio:auto}
.song-scene{position:relative;aspect-ratio:16/9;container-type:inline-size;isolation:isolate;overflow:hidden}
.song-audio-host{position:fixed;left:0;top:0;width:1px;height:1px;overflow:hidden;clip-path:inset(50%);pointer-events:none}
.song-audio-host iframe{width:300px;height:352px;border:0}
.song-controls{display:flex;align-items:center;flex-wrap:wrap;gap:10px 16px;padding:14px 7%;background:#fff3f7;color:var(--ink)}
.song-toggle{min-height:44px;padding:10px 18px;border:1px solid #a3345b66;border-radius:24px;background:var(--blush);color:var(--ink);font:14px/1.3 Arial,sans-serif;cursor:pointer}
.song-toggle:focus-visible{outline:2px solid var(--ink);outline-offset:3px}.song-toggle:disabled{opacity:.65;cursor:default}.song-status{font:13px/1.5 Arial,sans-serif}
.plaid{background-color:var(--pastel);background-image:repeating-linear-gradient(0deg,transparent 0 12px,#fff3f5b0 13px,#fff3f5b0 14px,transparent 15px 18px,#d1587a1a 19px 21px),repeating-linear-gradient(90deg,transparent 0 15px,#fff3f5a0 16px 18px,transparent 19px 23px,#d1587a1a 24px 28px)}
.letter-paper{display:none}
.letter-cover{position:absolute;inset:0;isolation:isolate;background:radial-gradient(ellipse at 20% 20%,#fffdf4 0,transparent 65%),radial-gradient(ellipse at 100% 100%,#f5c4d2 0,transparent 65%),#fff0ed;color:#9d3559}
.letter-cover:before{content:'';position:absolute;inset:4%;border:1px solid #cd8d9f66;outline:1px solid #cd8d9f26;outline-offset:1cqw;pointer-events:none}
.letter-cover:after{content:'';position:absolute;inset:0;z-index:-1;opacity:.25;background:repeating-linear-gradient(110deg,transparent 0 4px,#ad627508 5px 6px);pointer-events:none}
.letter-cover-eyebrow{position:absolute;left:8%;top:16%;display:flex;align-items:center;gap:.6em;font:500 1.85cqw/1.4 Arial,sans-serif;letter-spacing:.16em;color:#ad6275}
.letter-cover-eyebrow>span{font:2.4cqw/1 Georgia,serif;color:#bb4c70}
.letter-cover-title{position:absolute;left:8%;top:30%;z-index:2;font-size:8.4cqw;line-height:1.08;color:#92304f;text-shadow:0 1px #fff8}
.letter-cover-invite{position:absolute;left:8%;bottom:13%;display:flex;align-items:center;gap:1.1em;padding:.75em 1em;border:1px solid #c06a8455;border-radius:30px;background:#fff9f0a6;font:italic 2.65cqw/1.2 'Times New Roman',serif;color:#99415e;transition:background .3s,border-color .3s}
.letter-cover-invite>span{font:3cqw/1 Georgia,serif}
.letter-cover-orbit{position:absolute;left:56%;top:27%;width:32%;height:51%;border:1px dashed #c6748c70;border-radius:50%;transform:rotate(25deg)}
.letter-cover-envelope{position:absolute;left:56%;top:38%;width:35%;height:37%;transform:rotate(-12deg);filter:drop-shadow(0 1.8cqw 1.8cqw #8f35552a);transition:transform .6s var(--ease-out)}
.letter-cover-envelope-back{position:absolute;inset:0;background:#e7a2b8;border:1px solid #d287a0;border-radius:.8cqw}
.letter-cover-envelope-front{position:absolute;inset:0;background:linear-gradient(160deg,#f7c8d7,#edaec4);clip-path:polygon(0 0,50% 52%,100% 0,100% 100%,0 100%);border-radius:.8cqw}
.letter-cover-envelope-front:after{content:'';position:absolute;inset:0;background:linear-gradient(160deg,#fbd8e2,#f0b8cc);clip-path:polygon(0 100%,50% 42%,100% 100%)}
.letter-cover-envelope-flap{position:absolute;inset:0 0 43%;background:linear-gradient(#fce0e8,#efb3c8);clip-path:polygon(0 0,100% 0,50% 100%);filter:drop-shadow(0 1px #bb708b)}
.letter-cover-seal{position:absolute;left:39%;top:35%;display:grid;place-items:center;width:23%;aspect-ratio:1;border:1px solid #ad4164;border-radius:43% 48% 44% 47%;background:radial-gradient(circle at 35% 25%,#d36c8c,#a93458 65%,#8e2d4d);box-shadow:inset 0 0 0 .55cqw #d8789580,inset 0 0 0 .85cqw #a43a60,0 .5cqw 1cqw #96364e30;color:#ffd3df;font:3.4cqw/1 Georgia,serif;text-shadow:0 1px #80203e}
.letter-cover-envelope-note{position:absolute;left:0;right:0;bottom:9%;text-align:center;font-size:3cqw;color:#ad5271}
.letter-cover-stamp{position:absolute;right:9%;top:13%;width:12%;aspect-ratio:.85;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:.6cqw;border:1px dashed #b6607c;background:#f8e1e7;outline:.65cqw solid #fff7ee;transform:rotate(9deg);color:#b04d70}
.letter-cover-stamp>span{font:6cqw/.9 Georgia,serif}.letter-cover-stamp small{font:italic 1.7cqw/1.2 'Times New Roman',serif}
.letter-cover-spark{position:absolute;color:#ba6884;pointer-events:none}.letter-cover-spark-one{left:53%;top:19%;font:4cqw/1 Georgia,serif}.letter-cover-spark-two{right:13%;bottom:13%;font:4.5cqw/1 Georgia,serif;transform:rotate(15deg)}
.letter-cover-flower{position:absolute;left:41%;bottom:6%;width:13%;height:25%;stroke:#ba7a8c;stroke-width:1.1;stroke-linecap:round;stroke-linejoin:round;transform:rotate(12deg);opacity:.65;pointer-events:none}
@media(hover:hover) and (pointer:fine){.letter-card:is(:hover,:focus-visible) .letter-cover-envelope{transform:translateY(-1cqw) rotate(-8deg)}.letter-card:is(:hover,:focus-visible) .letter-cover-invite{background:#fff9f0;border-color:#c06a84}}
.letter-opening{position:relative;container-type:inline-size;isolation:isolate;overflow:hidden;min-height:clamp(360px,60vh,560px);display:flex;flex-direction:column;align-items:center;justify-content:center;padding:30px 16px;background:radial-gradient(ellipse at 50% 40%,#fff9f0,#ffe5ec 65%,#ffc2d1);text-align:center}
.letter-wait-title{position:relative;z-index:2;margin:0 0 28px;font-size:clamp(27px,6cqw,48px);color:var(--ink)}
.envelope-scene{position:relative;width:100%;padding:48px 0 22px}
.envelope-button{position:relative;display:block;width:min(72%,340px);aspect-ratio:1.5;margin:auto;padding:0;border:0;background:transparent;cursor:pointer;perspective:900px;filter:drop-shadow(0 16px 18px #a3345b22)}
.envelope-button:focus-visible{outline:3px solid var(--ink);outline-offset:12px;border-radius:8px}
.envelope-back{position:absolute;inset:0;border-radius:8px;background:#c95f82}
.envelope-note{position:absolute;inset:8% 10% 6%;z-index:2;border:1px solid #f2d4cc;border-radius:5px;background:#fff9ef;box-shadow:0 -3px 9px #68213d10;perspective:700px}
.envelope-note-content{position:absolute;inset:0;display:flex;flex-direction:column;align-items:center;gap:9%;padding:10% 12%}
.envelope-note-content b{font:clamp(22px,5cqw,38px)/1 Georgia,serif;color:#bd3a64}.envelope-note i{width:100%;height:2px;background:#d8a6ad}.envelope-note i:last-child{width:65%}
.envelope-note-cover{position:absolute;inset:0;z-index:1;display:grid;place-items:center;border:1px solid #edc2cb;border-radius:5px;background:#fff5e8;color:#bd3a64;font:clamp(30px,7cqw,54px)/1 Georgia,serif;transform-origin:0 50%;backface-visibility:hidden}
.envelope-front{position:absolute;inset:0;z-index:3;border-radius:0 0 8px 8px;background:linear-gradient(145deg,#f6b1c6,#e78eac);clip-path:polygon(0 0,50% 53%,100% 0,100% 100%,0 100%)}
.envelope-front:after{content:'';position:absolute;inset:0;background:linear-gradient(155deg,#f9c5d5,#efa3bd);clip-path:polygon(0 100%,50% 42%,100% 100%)}
.envelope-flap{position:absolute;inset:0 0 43%;z-index:5;background:linear-gradient(#f8bfd2,#e68aaa);clip-path:polygon(0 0,100% 0,50% 100%);transform-origin:50% 0;backface-visibility:visible}
.envelope-seal{position:absolute;z-index:6;left:43%;top:43%;width:14%;aspect-ratio:1;border:2px solid #d85d86;border-radius:50%;display:grid;place-items:center;background:#a8345b;color:#ffe5ec;font:clamp(12px,3cqw,23px)/1 Georgia,serif;box-shadow:0 2px 4px #68213d30}
.letter-wait-hint{position:relative;z-index:2;margin:22px 0 0;font:14px/1.5 'Times New Roman',serif;color:var(--ink)}
.letter-confetti{position:absolute;inset:-50px 0 -70px;z-index:7;pointer-events:none;overflow:hidden}
.letter-confetti-piece{position:absolute;left:50%;top:55%;width:7px;height:12px;opacity:0;border-radius:2px;background:var(--confetti-color);color:var(--confetti-color);font:17px/1 Georgia,serif}
.letter-confetti-piece:nth-child(5n + 1){width:auto;height:auto;background:transparent}.letter-confetti-piece:nth-child(3n){border-radius:50%;height:7px}
.letter-opening[data-letter-state="envelope-open"] .envelope-note{transform:translateY(-12%)}
.letter-opening.is-extracting .envelope-note{transform:translateY(-90%) rotate(-3deg)}
.letter-opening.is-opening .envelope-seal{opacity:0}.letter-opening.is-opening .envelope-flap{transform:rotateX(180deg);z-index:1}
.letter-orbit{position:relative;z-index:1;width:min(72%,340px);aspect-ratio:1;margin:0 auto;perspective:900px}
.letter-object{position:relative;display:block;top:13%;width:100%;height:74%;padding:0;border:0;background:transparent;transform-style:preserve-3d;transform:rotateX(var(--letter-rx)) rotateY(var(--letter-ry)) rotateZ(var(--letter-rz));transition:transform .18s ease-out;cursor:grab;touch-action:none;user-select:none;-webkit-user-select:none;-webkit-touch-callout:none;will-change:transform}
.letter-object.is-dragging{cursor:grabbing;transition:none}.letter-object:focus-visible{outline:2px dashed var(--ink);outline-offset:10px;border-radius:10px}
.letter-face{position:absolute;inset:0;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:14%;border:1px solid #e3b2c1;border-radius:10px;backface-visibility:hidden;-webkit-backface-visibility:hidden;box-shadow:0 15px 30px #8d3c5b26;pointer-events:none}
.letter-face-front{transform:translateZ(1px);background:linear-gradient(90deg,transparent 49.5%,#d8b5ae30 50%,transparent 50.5%),linear-gradient(135deg,#fffaf0,#ffedf1);color:var(--ink)}
.letter-face-front>.script{font-size:clamp(28px,6cqw,48px)}.letter-face-front b{color:#ba3c66;font:clamp(27px,5cqw,42px)/1 Georgia,serif}.letter-face-front small{font:italic 13px/1.3 'Times New Roman',serif}
.letter-face-back{transform:rotateY(180deg) translateZ(1px);background:repeating-linear-gradient(45deg,#ffe5ec 0 10px,#fce0e9 10px 11px);color:#b73562}
.letter-face-back>span{font:clamp(36px,8cqw,64px)/1 Georgia,serif}.letter-face-back i{height:1px;width:36%;background:#b7356255}.letter-face-back i:last-child{width:23%}
.letter-object-tools{position:relative;z-index:3;display:flex;flex-wrap:wrap;justify-content:center;gap:10px;margin-top:30px}
.letter-object-tools button{min-height:44px;padding:10px 16px;border:1px solid #c57b9466;border-radius:24px;background:#fff7f9;color:var(--ink);font:13px/1.3 'Times New Roman',serif;cursor:pointer}.letter-object-tools button:focus-visible{outline:2px solid var(--ink);outline-offset:3px}
.letter-extracted .envelope-scene{padding:12px 0 0}.letter-extracted .letter-wait-hint{max-width:430px;margin-top:18px}
.letter-zooming .letter-orbit{z-index:10}.letter-zooming .letter-object{transition:none;pointer-events:none}.letter-zooming .letter-face-front{transform-origin:0 50%}
.letter-zoom-reading{position:absolute;inset:0;display:block;overflow:hidden;transform:translateZ(.4px);backface-visibility:hidden;background:var(--blush)}
.letter-zoom-reading>.letter-art{width:100%;height:100%;aspect-ratio:auto;animation:none!important}
.letter-reading-screen{overflow:auto;overscroll-behavior:contain;-webkit-overflow-scrolling:touch;background:#fff9f0}
.letter-message{display:none}
:is(.letter-reading-screen,.letter-zoom-reading)>.letter-art{aspect-ratio:auto;min-height:100%;background:#fff9f0}
:is(.letter-reading-screen,.letter-zoom-reading) .letter-paper{display:block;position:relative;inset:auto;width:100%;padding:clamp(24px,6cqw,56px);background:radial-gradient(ellipse at 100% 0,#ffe5ec80,transparent 60%),#fff9f0}
:is(.letter-reading-screen,.letter-zoom-reading) .letter-cover{display:none}
:is(.letter-reading-screen,.letter-zoom-reading) .letter-message{display:block;max-width:780px;margin:auto;color:var(--ink);font:500 clamp(20px,2.6cqw,24px)/1.75 'Dancing Script','Times New Roman',cursive;overflow-wrap:break-word}
.letter-message p{margin:0 0 .95em}.letter-message .letter-greeting{margin-bottom:1.1em;font-size:1.3em;font-weight:600}.letter-message .letter-closing{text-align:right;margin-bottom:.3em}.letter-message .letter-signature{margin:0;text-align:right;font-family:'Dancing Script','Times New Roman',cursive;font-weight:600;font-size:clamp(30px,4.5cqw,42px);line-height:1.5}
.viewer[open] .viewer-content .letter-reading-screen>.letter-revealed{animation:none}
@media(prefers-reduced-motion:no-preference){
  .letter-opening:not(.is-opening) .envelope-seal{animation:envelope-idle 3s ease-in-out infinite}
  .is-opening .envelope-button{animation:envelope-celebrate 1.9s ease both}
  .is-opening .envelope-seal{animation:envelope-unseal .3s ease forwards}
  .is-opening .envelope-flap{animation:envelope-unfold .7s .15s ease-in-out forwards}
  .is-opening .envelope-note{animation:envelope-peek .45s .45s cubic-bezier(.22,1,.36,1) forwards}
  .is-extracting .envelope-note{animation:envelope-letter-rise .75s cubic-bezier(.22,1,.36,1) forwards}
  .letter-extracted .letter-orbit{animation:letter-read .45s var(--ease-out) both}
  .is-opening .letter-confetti-piece{animation:letter-confetti 1.25s var(--delay) ease-out both}
  .viewer[open] .viewer-content .letter-revealed{animation:letter-read .55s var(--ease-out) both}
}
@keyframes envelope-idle{50%{transform:scale(1.07)}}
@keyframes envelope-celebrate{0%,100%{transform:translateY(0)}15%{transform:translateY(3px) rotate(-2deg)}30%{transform:translateY(-4px) rotate(2deg)}50%{transform:translateY(0) rotate(0)}}
@keyframes envelope-unseal{to{opacity:0;transform:scale(1.3) translateY(10px)}}
@keyframes envelope-unfold{0%{transform:rotateX(0);z-index:5}49%{z-index:5}50%,100%{z-index:1}100%{transform:rotateX(180deg)}}
@keyframes envelope-peek{to{transform:translateY(-12%)}}
@keyframes envelope-letter-rise{from{transform:translateY(-12%)}to{transform:translateY(-90%) rotate(-3deg)}}
@keyframes letter-confetti{0%{opacity:0;transform:translate(0,0) scale(.3)}15%{opacity:1}48%{opacity:1;transform:translate(var(--x),var(--y)) rotate(var(--spin))}100%{opacity:0;transform:translate(var(--x),28cqw) rotate(var(--spin))}}
@keyframes letter-read{from{opacity:0;transform:translateY(18px)}to{opacity:1;transform:translateY(0)}}
.couple-title{position:absolute;top:9%;right:10%;font-size:7cqw}.photo-mat{position:absolute;border:2px solid #eee6dc;background:#ece7df}.couple-main{left:5%;top:10%;width:40%;height:55%}.couple-inset{left:36%;top:17%;width:13%;height:26%;border:3px solid #b85848}.couple-small{left:3%;top:62%;width:12%;height:25%;z-index:2}.couple-bottom{left:17%;top:50%;width:27%;height:39%;transform:rotate(7deg)}
.couple-person{position:absolute;top:26%;width:18%;height:48%;padding:1.4% 1.4% 0;background:#f3eee4;color:#211d1a;box-shadow:1px 2px 2px #17000655}.person-photo{height:80%}.couple-person>.script{font-size:2.8cqw;display:block;padding-top:1cqw;text-align:center;line-height:1.2;white-space:nowrap;text-shadow:none}.person-one{left:55%}.person-two{left:76%}
.couple-open{position:absolute;inset:0;z-index:1;width:100%;height:100%;padding:0;border:0;background:transparent;cursor:pointer}
.couple-person{z-index:2;border:0;border-radius:0;text-align:initial;cursor:zoom-in;font:inherit;touch-action:manipulation}
.couple-small{display:grid;place-items:center;padding:1%;border-color:#e8c9ce;background:radial-gradient(ellipse at 20% 10%,#fffdf5,transparent 80%),#f9e8eb;color:#9b3c60;cursor:zoom-in;touch-action:manipulation;box-shadow:1px 2px 4px #68213d22}
.couple-small>.script{font-family:'Dancing Script','Times New Roman',cursive;font-size:2.8cqw;line-height:1.12;text-align:center;text-wrap:balance}
.couple-card :is(.couple-person,.couple-small){pointer-events:none;cursor:inherit}
.viewer-content .couple-small::after{content:'';position:absolute;inset:-5px}
.couple-person:focus-visible,.couple-small:focus-visible,.couple-open:focus-visible{outline:2px solid #fff0f3;outline-offset:3px}
.photo-inspector{width:min(94vw,620px);max-width:none;max-height:94vh;max-height:94dvh;margin:auto;padding:0 18px 16px;overflow:auto;overscroll-behavior:contain;border:1px solid #dba1b5;border-radius:18px;background:radial-gradient(ellipse at 50% 20%,#fffcf5,transparent 75%),#fff0f3;color:var(--ink);box-shadow:0 24px 90px #4e1a3266;-webkit-overflow-scrolling:touch}
.photo-inspector::backdrop{background:#42172bb8;backdrop-filter:blur(7px);-webkit-backdrop-filter:blur(7px)}
.photo-inspector-toolbar{display:flex;align-items:center;justify-content:space-between;gap:12px;padding:10px 0}
.photo-inspector-toolbar h2{margin:0;font:400 clamp(18px,4vw,24px)/1.3 Georgia,serif}
.photo-inspector-close{flex:0 0 44px;min-height:44px;padding:0;border:1px solid #e7a8bb;border-radius:50%;background:#fff7f7;color:var(--ink);font:28px/1 Arial,sans-serif;cursor:pointer}
.photo-inspector-hint{max-width:360px;margin:0 auto 6px;text-align:center;font:italic 14px/1.6 'Times New Roman',serif;color:#98516b}
.photo-inspector-stage{position:relative;display:grid;place-items:center;perspective:1100px;padding:30px 0;overflow:hidden}
.inspect-photo{position:relative;width:min(65vw,320px);max-width:max(130px,calc(62dvh - 180px));aspect-ratio:5/7;transform-style:preserve-3d;transform:rotateX(var(--inspect-rx,-4deg)) rotateY(var(--inspect-ry,-6deg));transition:transform .28s var(--ease-out);cursor:grab;touch-action:none;user-select:none;-webkit-user-select:none;-webkit-touch-callout:none;outline:none}
.inspect-photo.is-dragging{cursor:grabbing;transition:none}
.inspect-photo.is-concealed{cursor:grab}
.inspect-photo.is-concealed.is-dragging,.inspect-photo.is-dragging .inspect-spoiler{cursor:grabbing}
.inspect-stage-atmosphere{display:none;position:absolute;inset:0;overflow:hidden;pointer-events:none}
.photo-inspector[open] .is-concealed>.inspect-stage-atmosphere{display:block}
.inspect-stage-atmosphere::before{content:'';position:absolute;inset:8% -15%;border-radius:50%;background:radial-gradient(ellipse at 30% 30%,#e9a3bf55,transparent 55%),radial-gradient(ellipse at 75% 70%,#f8d8ab55,transparent 60%);animation:memory-aura 6s ease-in-out infinite alternate}
.inspect-stage-atmosphere>span{position:absolute;left:calc((var(--i) + .6)*12%);bottom:-24px;color:#b7658980;font:22px/1 Georgia,serif;animation:memory-float calc(6s + var(--i)*.35s) linear infinite;animation-delay:calc(var(--i)*-1.2s)}
.inspect-stage-atmosphere>span:nth-child(3n){color:#c59b6680;font-size:16px}
.inspect-front img,.inspect-front>.script{transition:filter .65s ease,opacity .65s ease}
.is-concealed .inspect-front img,.is-concealed .inspect-front>.script{filter:blur(24px);opacity:.12;transition:none}
.is-concealed>.inspect-face{visibility:hidden}
.inspect-spoiler{position:absolute;inset:-1px;z-index:2;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:14px;padding:24px 18px;overflow:hidden;border:1px solid #e3b3c3;border-radius:2px;background:radial-gradient(ellipse at 22% 14%,#fff7ec,transparent 68%),radial-gradient(ellipse at 85% 85%,#dca0b7cc,transparent 75%),#f3d5e2;color:#8a3f5e;box-shadow:inset 0 0 45px #fff4ed88;transform:translateZ(2px);backface-visibility:hidden;-webkit-backface-visibility:hidden;cursor:grab;touch-action:none;font-family:'Times New Roman',serif;text-align:center}
.inspect-spoiler-back{transform:rotateY(180deg) translateZ(2px)}
.inspect-spoiler[hidden]{display:none}
.inspect-spoiler[aria-hidden="true"]{visibility:hidden;pointer-events:none}
.inspect-spoiler::before,.inspect-spoiler::after{content:'';position:absolute;inset:-28px;pointer-events:none;background-image:radial-gradient(circle,#fffaf2ee 0 1px,transparent 1.8px),radial-gradient(circle,#b7638677 0 .8px,transparent 1.6px),radial-gradient(circle,#fffaf2cc 0 1.5px,transparent 2.2px);background-size:17px 23px,29px 19px,41px 37px;background-position:0 0,8px 12px,20px 7px;animation:memory-speckles 3.2s ease-in-out infinite alternate}
.inspect-spoiler::after{opacity:.5;transform:rotate(12deg);animation-delay:-2.5s;animation-direction:alternate-reverse}
.inspect-spoiler>span{position:relative;z-index:1;pointer-events:none}
.inspect-spoiler-heart{display:grid;place-items:center;width:60px;height:60px;border:1px solid #ffffffa6;border-radius:50%;background:#fff8f175;box-shadow:0 4px 22px #a14d7020;font:42px/1 Georgia,serif;animation:memory-heart 2.8s ease-in-out infinite}
.inspect-spoiler-title{max-width:230px;font:500 clamp(22px,5vw,29px)/1.3 'Dancing Script','Times New Roman',cursive;text-wrap:balance}
.inspect-spoiler-invite{padding:10px 16px;border:1px solid #c5849b80;border-radius:30px;background:#fff8f0c9;font:14px/1.3 'Times New Roman',serif;box-shadow:0 3px 12px #9b486315}
.photo-inspector-tools button:disabled{opacity:.42;cursor:default}
@keyframes memory-speckles{from{translate:-8px -12px;opacity:.3}to{translate:10px 13px;opacity:.95}}
@keyframes memory-heart{0%,100%{transform:translateY(0) scale(1);box-shadow:0 4px 22px #a14d7020}50%{transform:translateY(-7px) scale(1.08);box-shadow:0 8px 30px #a14d7044}}
@keyframes memory-aura{from{transform:translate(-4%,-3%) scale(.9);opacity:.45}to{transform:translate(4%,3%) scale(1.1);opacity:1}}
@keyframes memory-float{0%{transform:translate(0,0) rotate(-12deg);opacity:0}15%{opacity:.7}75%{opacity:.5}100%{transform:translate(22px,-480px) rotate(22deg);opacity:0}}
.inspect-face{position:absolute;inset:0;padding:5% 5% 0;border:1px solid #dfd0bc;background:#f8f2e7;box-shadow:0 15px 30px #74344d33;backface-visibility:hidden;-webkit-backface-visibility:hidden;pointer-events:none}
.inspect-front{display:flex;flex-direction:column;align-items:center;gap:2%}
.inspect-front img{display:block;width:100%;height:84%;object-fit:contain;background:#eee6d9;-webkit-user-drag:none}
.inspect-front .script{display:block;padding-top:2%;color:#352522;font-size:clamp(20px,5vw,30px);line-height:1.2}
.inspect-back{transform:rotateY(180deg);background:repeating-linear-gradient(115deg,#f7f0e5 0 3px,#f5ede1 4px 5px)}
.inspect-note{position:absolute;right:8%;bottom:7%;font:italic clamp(12px,3vw,15px)/1.5 'Times New Roman',serif;color:#745b54;text-align:right}
.photo-inspector.is-meal .inspect-photo{width:min(78vw,380px);max-width:100%;height:var(--meal-height,520px);aspect-ratio:auto}
.photo-inspector.is-meal .inspect-back{display:flex;align-items:center;padding:8%}
.photo-inspector.is-meal .inspect-note{position:static;font:500 clamp(17px,4.2vw,21px)/1.5 'Dancing Script','Times New Roman',cursive;color:#7d3f55;text-align:left;overflow-wrap:break-word}
.photo-inspector-tools{display:flex;justify-content:center;flex-wrap:wrap;gap:10px}
.photo-inspector-tools button{min-height:44px;padding:10px 16px;border:1px solid #cb8ba4;border-radius:24px;background:#fff9f4;color:var(--ink);font:14px/1.3 'Times New Roman',serif;cursor:pointer}
.inspect-side{margin:10px 0 0;text-align:center;font:italic 12px/1.4 'Times New Roman',serif;color:#98516b}
.photo-inspector button:focus-visible{outline:2px solid var(--ink);outline-offset:3px}
.inspect-photo:focus-visible .inspect-face{outline:2px solid #ad5979;outline-offset:4px}
@media(prefers-reduced-motion:reduce){.inspect-photo,.inspect-front img,.inspect-front>.script{transition:none}.inspect-spoiler::before,.inspect-spoiler::after,.inspect-spoiler-heart,.inspect-stage-atmosphere::before,.inspect-stage-atmosphere>span{animation:none}.inspect-stage-atmosphere>span{display:none}}
.couple-caption{position:absolute;left:53%;right:7%;top:81%;display:grid;gap:2px}.couple-caption i{display:block;height:1px;background:#a6577290;transform:rotate(-1deg)}
.couple-interaction-note{display:none}
.viewer-content .couple-art{aspect-ratio:auto}
.couple-scene{position:relative;aspect-ratio:16/9;overflow:hidden;container-type:inline-size}
.viewer-content .couple-interaction-note{display:block;margin:0;padding:14px clamp(16px,4vw,32px) 18px;border-top:1px solid #d88ca64d;background:linear-gradient(135deg,#fffaf3,#ffedf2);color:#9b3c60;text-align:center;font:500 clamp(20px,3vw,26px)/1.45 'Dancing Script','Times New Roman',cursive;text-wrap:pretty}
.couple-art .star-a{left:9%;top:17%}.couple-art .star-b{left:37%;top:58%}.couple-art .star-c{left:19%;bottom:11%;font-size:5cqw}.couple-heart-a{right:5%;top:15%;font-size:2.7cqw}.couple-heart-b{left:49%;top:60%;font-size:3cqw}
.couple-main .photo-label,.couple-inset .photo-label,.couple-small .photo-label{font-size:clamp(6px,1.8cqw,12px)}
.couple-inset .photo-name,.couple-small .photo-name{display:none}
.together-art{background:radial-gradient(ellipse at 50% 0,#fffdf8 0,transparent 65%),radial-gradient(ellipse at 100% 100%,#ffc2d180,transparent 55%),#fff0f3;color:#8e254b}
.together-art:before{content:'';position:absolute;inset:3%;border:1px solid #d985a14a;border-radius:1.6cqw;pointer-events:none}
.together-art:after{content:'✧';position:absolute;top:12%;right:8%;color:#c97791;font:5cqw/1 Georgia,serif;transform:rotate(12deg);pointer-events:none}
.together-face{position:absolute;inset:0;display:flex;flex-direction:column;align-items:center;justify-content:center;padding:4% 7%;text-align:center}
.together-since{display:flex;align-items:center;justify-content:center;gap:.65em;padding:.55em 1.1em;border:1px solid #e7a8bb;border-radius:30px;background:#fbe2ea;font:500 1.85cqw/1 Arial,sans-serif;letter-spacing:.14em;color:#9d3859}
.together-since>span{color:#c44d73;font-size:1.15em}.together-since time{font-variant-numeric:tabular-nums;letter-spacing:.12em}
.together-title{display:block;margin:2.2cqw 0 .5cqw;font-size:8.2cqw;line-height:1.1;color:#9c264e;text-shadow:0 1px #fff}
.together-names{display:flex;align-items:center;gap:.85em;font:italic 2.4cqw/1.4 'Times New Roman',serif;color:#a04967}
.together-heart{display:inline-block;font:2.8cqw/1 Georgia,serif;color:#c34b73}
.together-grid{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:1.65cqw 2cqw;width:100%;margin-top:2.8cqw}
.together-tile{position:relative;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:.6cqw;min-width:0;height:11.2cqw;border:1px solid #e7a8bb;border-bottom:2px solid #c4557c;border-radius:2cqw;background:linear-gradient(145deg,#ffffffeb,#f8e7ed);box-shadow:0 1cqw 2cqw #a3345b12,inset 0 1px #fff}
.together-value{font:500 6cqw/1 Georgia,'Times New Roman',serif;font-variant-numeric:lining-nums tabular-nums;letter-spacing:-.04em;color:#9b1f4a}
.together-label{font:500 1.8cqw/1.2 Arial,sans-serif;text-transform:uppercase;letter-spacing:.18em;color:#ad5474}
.together-note{display:flex;align-items:center;gap:.55em;margin-top:2.2cqw;font:italic 2.35cqw/1.2 'Times New Roman',serif;color:#ad5474}.together-note>span{font:4cqw/.6 Georgia,serif;color:#ba5279}
@media(prefers-reduced-motion:no-preference){.together-heart{animation:together-heartbeat 3s ease-in-out infinite}}
@keyframes together-heartbeat{0%,35%,65%,100%{transform:scale(1)}45%,55%{transform:scale(1.15)}}
.reasons-card{align-self:start;grid-column:1/-1}
.reasons-art{aspect-ratio:auto;display:flow-root}
.reasons-inside{position:relative;display:flow-root;isolation:isolate}
.reasons-cover,.reasons-card .reasons-inside{display:none}
.reasons-card .reasons-cover{display:block}
.reasons-cover{position:relative;aspect-ratio:2.35;isolation:isolate;overflow:hidden;background:radial-gradient(ellipse at 20% 10%,#fffdf4 0,transparent 65%),radial-gradient(ellipse at 100% 100%,#f2bccf 0,transparent 65%),#fff0ed;color:#92304f}
.reasons-cover:before{content:'';position:absolute;inset:6% 3%;border:1px solid #cd8d9f66;outline:1px solid #cd8d9f26;outline-offset:.6cqw;pointer-events:none}
.reasons-cover:after{content:'';position:absolute;inset:0;z-index:-1;background:repeating-linear-gradient(110deg,transparent 0 4px,#ad627508 5px 6px);opacity:.3;pointer-events:none}
.reasons-cover-eyebrow{position:absolute;left:8%;top:16%;display:flex;align-items:center;gap:.7em;font:500 1.5cqw/1.4 Arial,sans-serif;letter-spacing:.18em;color:#ad6275}
.reasons-cover-eyebrow>span{font:2.2cqw/1 Georgia,serif;color:#b95878}
.reasons-cover-title{position:absolute;left:8%;top:28%;font-size:7.5cqw;line-height:1.05;color:#92304f;text-shadow:0 1px #fff8}
.reasons-cover-invite{position:absolute;left:8%;bottom:15%;display:flex;align-items:center;gap:1em;padding:.7em 1.1em;border:1px solid #c06a8455;border-radius:30px;background:#fff9f0a6;font:italic 1.95cqw/1.2 'Times New Roman',serif;color:#99415e;transition:background .3s,border-color .3s}
.reasons-cover-invite>span{font:2.3cqw/1 Georgia,serif}
.reasons-cover-deck{position:absolute;left:63%;top:24%;width:24%;height:55%;filter:drop-shadow(0 1.2cqw 1.5cqw #8f355524);transform:rotate(5deg);transition:transform .6s var(--ease-out)}
.reasons-cover-note{position:absolute;inset:0;border:1px solid #d596aa;border-radius:.7cqw;background:#f8dce5}
.reasons-cover-note-back{transform:rotate(-13deg) translate(-5%,-2%);background:repeating-linear-gradient(45deg,#f7d3df 0 4px,#efbfd0 5px 6px)}
.reasons-cover-note-middle{transform:rotate(7deg) translate(4%,1%);background:#edb9cb}
.reasons-cover-note-front{display:flex;flex-direction:column;align-items:center;justify-content:center;gap:.3cqw;background:radial-gradient(ellipse at 50% 20%,#fffdf8,#fff0ed);box-shadow:inset 0 0 0 .8cqw #fff7f2,inset 0 0 0 calc(.8cqw + 1px) #dca4b555}
.reasons-cover-number{font:italic 10cqw/.95 Georgia,'Times New Roman',serif;letter-spacing:-.08em;color:#ab4166}
.reasons-cover-for{font-size:3.3cqw;color:#b75f7c}
.reasons-cover-note-heart{font:2.2cqw/1 Georgia,serif;color:#bb5879}
.reasons-cover-ribbon{position:absolute;left:-6%;right:-6%;top:12%;height:9%;background:linear-gradient(#d584a0,#ecb4c8 45%,#d584a0);border-block:1px solid #c9799666;box-shadow:0 .3cqw .4cqw #aa3d601a;transform:rotate(-3deg)}
.reasons-cover-bow{position:absolute;left:42%;top:9%;width:15%;aspect-ratio:1;border-radius:50%;background:radial-gradient(circle at 30% 25%,#efbdd0,#b9567a);box-shadow:0 .25cqw .4cqw #96364e30;transform:rotate(-3deg)}
.reasons-cover-bow:before,.reasons-cover-bow:after{content:'';position:absolute;top:-25%;width:150%;height:100%;border:1px solid #c87d99;border-radius:80% 60% 70% 15%;background:linear-gradient(135deg,#f2c1d2,#cf7f9c);z-index:-1}
.reasons-cover-bow:before{right:60%;transform:rotate(25deg)}.reasons-cover-bow:after{left:60%;transform:scaleX(-1) rotate(25deg)}
.reasons-cover-spark{position:absolute;color:#ba6884;pointer-events:none}.reasons-cover-spark-one{right:7%;top:12%;font:3.8cqw/1 Georgia,serif}.reasons-cover-spark-two{left:53%;top:51%;font:3.7cqw/1 Georgia,serif;transform:rotate(-15deg)}
.reasons-cover-keepsake{position:absolute;left:60%;right:8%;bottom:8%;text-align:center;font-size:2.7cqw;color:#ae657e;transform:rotate(-3deg)}
@media(hover:hover) and (pointer:fine){.reasons-card:is(:hover,:focus-visible) .reasons-cover-deck{transform:translateY(-.6cqw) rotate(2deg)}.reasons-card:is(:hover,:focus-visible) .reasons-cover-invite{background:#fff9f0;border-color:#c06a84}}
.reasons-art .background-slot{background:linear-gradient(120deg,#edc6d3,#f8dce5)}.reasons-shade{position:absolute;inset:0;background:#ffe5ec30;z-index:-1}.reasons-title{position:relative;display:block;margin:8% 0 5% 8%;font-size:5.8cqw;color:var(--ink);white-space:nowrap}
.reasons-art .background-slot img{object-position:right center}.reasons-art .reasons-shade{background:#fff8f133}
.reason-lines{position:relative;margin:0 30% 12% 8%;padding-left:1.65em;color:var(--ink);font:italic 400 clamp(13px,3.5cqw,19px)/1.65 'Times New Roman',Georgia,serif;text-wrap:pretty;overflow-wrap:break-word}.reason-lines>li{padding-left:.25em;margin-bottom:1em}.reason-lines>li:last-child{margin-bottom:0}.reason-lines>li::marker{font-style:normal;font-variant-numeric:lining-nums;color:#a3345b}
.reasons-discovery{position:relative;margin:-2% 6% 5%;text-align:center;color:#964561}
.reasons-discovery-hint{margin:0;font:italic clamp(14px,2cqw,18px)/1.5 'Times New Roman',serif;text-wrap:balance}
.reasons-progress-hearts{display:flex;justify-content:center;gap:clamp(5px,1.1cqw,11px);margin:14px 0 7px;font:clamp(18px,2.8cqw,26px)/1 Georgia,serif;color:#bd8094}
.reasons-progress-hearts .is-opened{color:#b93f68}
.reasons-progress{margin:0;font:12px/1.5 Arial,sans-serif;color:#9b526d}
.has-reveals .reasons-title{margin:7% 5% 5%;text-align:center;font-size:clamp(25px,5.8cqw,54px);white-space:normal;text-wrap:balance}
.has-reveals .reason-lines{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));align-items:start;gap:18px;margin:0 6% 6%;padding:0;list-style:none;font:italic 400 clamp(16px,2cqw,19px)/1.65 'Times New Roman',Georgia,serif}
.reason-lines>.reason-reveal{position:relative;isolation:isolate;min-width:0;min-height:198px;margin:0;padding:0;overflow:hidden;border:1px solid #dca7b9;border-radius:12px;background:linear-gradient(145deg,#fffdf7ee,#fff0f3ee);box-shadow:0 5px 14px #a3345b0d;transition:border-color .3s,box-shadow .3s}
.reason-lines>.reason-reveal[hidden]{display:none}
.has-reveals .reason-reveal:nth-child(9),.reason-lines>.is-finale-item{grid-column:1/-1}
.reason-lines>.is-finale-item{border-color:#be6c8c;background:radial-gradient(ellipse at 100% 0,#f7cfdd77,transparent 65%),#fffaf3;box-shadow:0 7px 22px #a3345b1c}
.reason-reveal:focus-within{outline:2px solid #a3345b;outline-offset:3px}
.reason-reveal-trigger{display:flex;align-items:center;justify-content:space-between;gap:8px;width:100%;min-height:48px;padding:12px 16px;border:0;border-bottom:1px solid #dda4b533;background:#fff9f266;color:#9b365a;text-align:left;cursor:pointer}
.reason-reveal-trigger:after{content:'';position:absolute;inset:0;z-index:3}
.reason-reveal-trigger:focus-visible{outline:none}
.reason-reveal-number{display:flex;align-items:center;gap:6px;font:500 11px/1.4 Arial,sans-serif;letter-spacing:.09em}
.reason-reveal-number>span{font:19px/1 Georgia,serif;color:#bc6281}
.reason-reveal-action{flex-shrink:0;font:italic 12px/1.4 'Times New Roman',serif;color:#a55674}
.reason-message{padding:20px 22px 24px;color:#68213d;text-wrap:pretty;overflow-wrap:break-word}
.reason-message[hidden]{display:none}
.reason-veil{position:absolute;inset:49px 0 0;z-index:1;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:10px;padding:16px;text-align:center;background:radial-gradient(ellipse at 50% 5%,#fffaf1,transparent 75%),repeating-linear-gradient(120deg,#fbe6ee 0 7px,#f9e1eb 8px 9px);pointer-events:none;transition:opacity .65s ease,transform .75s var(--ease-out),visibility 0s .75s}
.reason-veil:before{content:'';position:absolute;inset:9px;border:1px dashed #c987a14d;border-radius:7px;pointer-events:none}
.reason-veil-seal{display:grid;place-items:center;width:38px;height:38px;border:1px solid #b9567a;border-radius:45% 48% 44% 47%;background:radial-gradient(circle at 30% 25%,#d9819d,#b3476b 70%);box-shadow:inset 0 0 0 3px #e19ab044,0 3px 7px #a3345b20;color:#ffe7ed;font:18px/1 Georgia,serif;text-shadow:0 1px #8e294d}
.reason-veil-title{font-size:clamp(23px,3cqw,30px);color:#a44b6c}
.reason-veil-whisper{font:italic 12px/1.3 'Times New Roman',serif;color:#a9667f}
.reason-veil-spark{position:absolute;right:18px;top:16px;font:22px/1 Georgia,serif;color:#c887a0}
.reason-reveal[data-revealed="true"]{border-color:#cd8da5;box-shadow:0 5px 16px #a3345b14}
.reason-reveal[data-revealed="true"] .reason-veil{opacity:0;visibility:hidden;transform:translateY(-8px) scale(1.04)}
.reason-reveal[data-revealed="true"] .reason-reveal-trigger:after{display:none}
.has-reveals .film-strip{position:relative;top:auto;right:auto;width:min(42%,220px);margin:0 auto 8%;padding:1%;transform:rotate(5deg)}
@media(max-width:699px){.has-reveals .reason-lines{grid-template-columns:minmax(0,1fr);gap:14px}.reason-reveal-number{font-size:10px}.reason-reveal-trigger{padding-inline:14px}.has-reveals .film-strip{width:min(52%,200px)}}
@media(prefers-reduced-motion:no-preference){.reason-reveal[data-revealed="true"] .reason-message{animation:reason-bloom .7s var(--ease-out) both}.reasons-progress-hearts .is-opened{animation:reason-heart-open .5s var(--ease-out) both}}
@keyframes reason-bloom{from{opacity:0;transform:translateY(8px);filter:blur(5px)}to{opacity:1;transform:translateY(0);filter:blur(0)}}
@keyframes reason-heart-open{50%{transform:scale(1.3)}}
.reason-finale-invitation{display:block;min-height:44px;max-width:100%;margin:16px auto 0;padding:12px 20px;border:1px solid #c9839e;border-radius:30px;background:#fff7ef;color:#993858;font:italic 16px/1.4 'Times New Roman',serif;cursor:pointer}
.reason-finale-invitation[hidden]{display:none}
.viewer>.viewer-toolbar,.viewer>.viewer-content{transition:filter .55s ease,opacity .55s ease}
.viewer.reason-finale-active>.viewer-toolbar,.viewer.reason-finale-active>.viewer-content{filter:blur(4px);opacity:.55;pointer-events:none}
.reason-finale{position:fixed;inset:0;width:min(calc(100vw - 32px),560px);max-width:none;max-height:calc(100vh - 40px);max-height:calc(100dvh - 40px);margin:auto;padding:36px 28px 24px;overflow:auto;overscroll-behavior:contain;border:1px solid #e3a4bb;border-radius:24px;background:radial-gradient(ellipse at 50% 0,#fffdf5 0,transparent 70%),radial-gradient(ellipse at 100% 100%,#f5cfdd 0,transparent 65%),#fff0f2;box-shadow:0 28px 100px #4c172e66,inset 0 0 0 6px #fff8f1;color:#8f3154;text-align:center;-webkit-overflow-scrolling:touch}
.reason-finale::backdrop{background:#63243f66;backdrop-filter:blur(5px);-webkit-backdrop-filter:blur(5px)}
.reason-finale-dismiss{position:absolute;right:10px;top:8px;display:grid;place-items:center;width:44px;height:44px;padding:0;border:0;background:transparent;color:#a34f71;font:28px/1 Arial,sans-serif;cursor:pointer}
.reason-finale-heading{margin:10px 0 22px}
.reason-finale-eyebrow{display:block;padding:0 8px;font:10px/1.6 Arial,sans-serif;letter-spacing:.16em;color:#ac667f}
.reason-finale-title{margin:17px 0 10px;font-size:clamp(34px,7vw,52px);line-height:1.15;color:#9c345b}
.reason-finale-divider{font:18px/1.2 Georgia,serif;letter-spacing:.2em;color:#b97c96}
.reason-finale-letter{position:relative;min-height:275px;isolation:isolate;border:1px solid #d99ab1;border-radius:16px;background:linear-gradient(140deg,#fffdf7,#fff3f2);box-shadow:0 10px 24px #a3345b12;overflow:hidden}
.reason-finale-open{position:absolute;inset:0;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:13px;width:100%;padding:24px 18px;border:0;border-radius:15px;background:radial-gradient(ellipse at 50% 15%,#fff9ec 0,transparent 75%),repeating-linear-gradient(120deg,#fae1eb 0 7px,#f6d9e5 8px 9px);color:#9c345b;cursor:pointer;z-index:1;transition:opacity .8s,transform .9s var(--ease-out),visibility 0s .9s}
.reason-finale-open:before{content:'';position:absolute;inset:10px;border:1px dashed #c7849e99;border-radius:10px;pointer-events:none}
.reason-finale-number{font:italic 60px/.85 Georgia,serif;letter-spacing:-.06em;color:#b65a7c}
.reason-finale-seal{display:grid;place-items:center;width:44px;height:44px;border:1px solid #a43a60;border-radius:45% 48% 43% 47%;background:radial-gradient(circle at 30% 20%,#df8ba6,#ab3e65 75%);box-shadow:inset 0 0 0 3px #e4a1b477,0 3px 10px #a3345b33;color:#ffe4ed;font:21px/1 Georgia,serif}
.reason-finale-open>.script{font-size:clamp(26px,5.5vw,34px)}
.reason-finale-open>small{font:italic 13px/1.4 'Times New Roman',serif;color:#a96580}
.reason-finale-message{padding:32px 28px;font:500 clamp(23px,4.5vw,30px)/1.65 'Dancing Script','Times New Roman',cursive;color:#8d2f53;overflow-wrap:break-word;text-wrap:pretty}
.reason-finale-message[hidden],.reason-finale-complete[hidden]{display:none}
.reason-finale.is-unsealed .reason-finale-open{opacity:0;visibility:hidden;transform:translateY(-12px) scale(1.05);pointer-events:none}
.reason-finale-complete{display:block;width:100%;min-height:48px;margin:22px 0 0;padding:13px 16px;border:1px solid #b96183;border-radius:30px;background:#a74168;color:#fff7f3;font:15px/1.4 'Times New Roman',serif;cursor:pointer;box-shadow:0 5px 16px #9d365421}
.reason-finale-complete>span{margin-left:8px;font:20px/1 Georgia,serif}
.reason-finale-footnote{margin:17px 0 0;font:italic 13px/1.5 'Times New Roman',serif;color:#a96780}
:is(.reason-finale button,.reason-finale-invitation):focus-visible{outline:2px solid #9c345b;outline-offset:4px}
.reason-finale-open:focus-visible{outline-offset:-5px}
@media(max-width:420px){.reason-finale{padding:32px 18px 20px;border-radius:20px}.reason-finale-eyebrow{font-size:9px;letter-spacing:.08em}.reason-finale-message{padding:26px 22px}.reason-finale-heading{margin-bottom:18px}}
@media(prefers-reduced-motion:no-preference){.reason-finale[open]{animation:reason-finale-arrive .8s var(--ease-out) both}.reason-finale[open]::backdrop{animation:backdrop-enter .55s ease both}.reason-finale.is-unsealed .reason-finale-message{animation:reason-bloom 1s var(--ease-out) both}.is-complete .is-finale-item{animation:reason-bloom .8s var(--ease-out) both}}
@keyframes reason-finale-arrive{from{opacity:0;transform:translateY(24px) scale(.92);filter:blur(4px)}to{opacity:1;transform:translateY(0) scale(1);filter:blur(0)}}
.film-strip{position:absolute;width:24%;top:18%;right:4%;transform:rotate(7deg);padding:1%;background:#f4eee5;box-shadow:0 2px 8px #68213d18}
.film-strip .photo-slot{height:auto;aspect-ratio:2/3;background:transparent}.film-strip .photo-slot img{height:auto;object-fit:contain}
.reasons-art .background-slot>.photo-label{left:8%;right:auto;top:auto;bottom:12px;font-size:clamp(6px,1.8cqw,12px);flex-direction:row;align-items:center;gap:.25em}.reasons-heart-a{left:3%;top:60%;font-size:2.7cqw}.reasons-heart-b{left:50%;top:9%;font-size:2.7cqw}
.reasons-art .reasons-heart-b{left:auto;right:8%;top:3%}
.viewer{width:min(94vw,1000px);max-height:90vh;max-height:90dvh;padding:0;border:1px solid #e7a8bb;background:#fff3f7;box-shadow:0 20px 90px #68213d40;color:var(--ink);overflow:auto;overscroll-behavior:contain;-webkit-overflow-scrolling:touch}
.viewer::backdrop{background:#4e1a32a6;backdrop-filter:blur(5px);-webkit-backdrop-filter:blur(5px)}
.viewer-toolbar{display:flex;align-items:center;justify-content:space-between;gap:16px;padding:10px 14px}.viewer-toolbar h2{font:400 clamp(17px,3vw,24px)/1.15 Georgia,serif;margin:0}.close-viewer{flex:0 0 44px;min-height:44px;border:1px solid #e7a8bb;background:var(--blush);color:var(--ink);font:32px/1 Arial,sans-serif;cursor:pointer;transition:background .2s,transform .3s var(--ease-out)}.close-viewer:focus-visible{outline:2px solid var(--ink);outline-offset:2px}.viewer-content{overflow:hidden}.viewer-content .hero-art{width:78%;margin:5% auto 8%}.viewer-open{position:fixed;top:var(--viewer-scroll-y,0);left:0;right:0;overflow:hidden}
@media(max-width:559px){
  .scrapbook{padding:32px 22px 40px;padding-left:max(22px,env(safe-area-inset-left));padding-right:max(22px,env(safe-area-inset-right))}
  #hero{width:83%;margin-bottom:24px}
  .card-grid{grid-template-columns:minmax(0,1fr);gap:18px}
  .reasons-cover{aspect-ratio:16/10}
  .reasons-cover:before{inset:5% 4%;outline-offset:1cqw}
  .reasons-cover-eyebrow{font-size:2.2cqw;top:18%}
  .reasons-cover-eyebrow>span{font-size:3cqw}
  .reasons-cover-title{top:31%;font-size:8.4cqw;line-height:1.1}
  .reasons-cover-invite{bottom:17%;font-size:2.7cqw}
  .reasons-cover-invite>span{font-size:3cqw}
  .reasons-cover-deck{left:64%;top:29%;width:23%;height:45%}
  .reasons-cover-number{font-size:12cqw}
  .reasons-cover-for{font-size:4.2cqw}
  .reasons-cover-note-heart{font-size:3cqw}
  .reasons-cover-keepsake{left:57%;right:6%;bottom:13%;font-size:3.4cqw}
  .together-art{aspect-ratio:4/3}
  .together-since{font-size:2.4cqw}
  .together-title{font-size:9.8cqw;margin-top:3cqw}
  .together-names{font-size:3.1cqw}
  .together-heart{font-size:3.5cqw}
  .together-grid{margin-top:4cqw;gap:2.4cqw}
  .together-tile{height:14cqw;gap:1cqw}
  .together-value{font-size:7.5cqw}
  .together-label{font-size:2.5cqw}
  .together-note{font-size:3cqw;margin-top:3cqw}
  .burst{right:-12%;width:29%}
  .viewer{width:calc(100vw - 24px)}
  .viewer-toolbar{padding:8px 10px}
}
/* Entrance motion only hides cards after the observer has been installed. */
.motion-pending{opacity:0}
.motion-pending:focus-visible{opacity:1}
@media(prefers-reduced-motion:no-preference){
  .viewer[open] .song-art.is-playing .vinyl:before,.viewer[open] .song-art.is-playing .record-label{animation:record-spin 14s linear infinite}
  .card-art{transition:transform .7s var(--ease-out)}
  .album-card:active .card-art{transform:scale(.99)}
  .motion-revealed .hero-happy{animation:title-unfold 1.1s .1s var(--ease-out) both}
  .motion-revealed .hero-anniversary{animation:title-unfold 1.1s .28s var(--ease-out) both}
  .motion-revealed .hero-photo{animation:photo-appear 1.1s .15s var(--ease-out) both}
  .viewer[open]{animation:viewer-enter .45s var(--ease-out) both}
  .viewer[open]::backdrop{animation:backdrop-enter .3s ease-out both}
  .viewer.is-closing::backdrop{animation:backdrop-leave .18s ease-in both}
  .viewer[open] .card-art{animation:photo-appear .65s .06s var(--ease-out) backwards}
  .close-viewer:active{transform:scale(.94)}
}
@media(hover:hover) and (pointer:fine) and (prefers-reduced-motion:no-preference){
  .album-card:hover,.album-card:focus-visible{box-shadow:0 14px 32px #a43b6026}
  .album-card .card-art{transform:perspective(1000px) translate3d(var(--pointer-x,0px),var(--pointer-y,0px),0) rotateX(var(--tilt-x,0deg)) rotateY(var(--tilt-y,0deg))}
  .album-card:active .card-art{transform:scale(.99)}
  .album-card .hero-photo{translate:0 calc(var(--drift,0) * -4px)}
  .album-card .film-strip{translate:0 calc(var(--drift,0) * -5px)}
  .album-card .vinyl:before{transition:transform 1.4s var(--ease-out)}
  .song-card:hover .vinyl:before,.song-card:focus-visible .vinyl:before{transform:rotate(55deg)}
  .close-viewer:hover{background:var(--pastel);transform:rotate(5deg)}
}
@keyframes title-unfold{from{opacity:0;clip-path:inset(-35% 105% -35% -20%)}to{opacity:1;clip-path:inset(-35% -25% -35% -20%)}}
@keyframes photo-appear{from{opacity:.25;scale:.975}to{opacity:1;scale:1}}
@keyframes record-spin{to{transform:rotate(360deg)}}
@keyframes viewer-enter{from{opacity:0;transform:translateY(18px) scale(.975)}to{opacity:1;transform:translateY(0) scale(1)}}
@keyframes backdrop-enter{from{opacity:0}to{opacity:1}}
@keyframes backdrop-leave{from{opacity:1}to{opacity:0}}
@media(prefers-reduced-motion:reduce){*,*::before,*::after{animation:none!important;transition:none!important;scroll-behavior:auto!important}.motion-pending{opacity:1}}
