:root{--paper:#f8f3ef;--ink:#292322;--muted:#827771;--rose:#bb766c;--blush:#eeddd6;--sage:#9aa394;--line:#e8ded8;--serif:'Playfair Display',Georgia,serif;--sans:'DM Sans',sans-serif}*{box-sizing:border-box}html{scroll-behavior:smooth;scroll-padding-top:88px}body{margin:0;background:var(--paper);color:var(--ink);font-family:var(--sans);font-size:15px;line-height:1.65}a{color:inherit;text-decoration:none}button{font:inherit;color:inherit}.topbar{height:76px;padding:0 7.2%;display:flex;align-items:center;justify-content:space-between;border-bottom:1px solid rgba(70,50,43,.08);position:sticky;top:0;z-index:10;background:rgba(248,243,239,.91);backdrop-filter:blur(14px)}.brand{font-family:var(--serif);font-size:24px;color:var(--rose);display:flex;gap:9px;align-items:center}.brand span{font-size:15px;color:var(--ink);font-style:italic}.nav{display:flex;gap:34px;align-items:center;font-size:12px;letter-spacing:.05em;color:#655c56}.nav a{transition:color .2s}.nav a:hover{color:var(--rose)}.nav-cta{padding:10px 16px;border:1px solid #d9c6bd;border-radius:30px}.nav-cta span{margin-left:8px}.menu-toggle{display:none;border:0;background:transparent;font-size:21px}.hero{min-height:690px;height:calc(100vh - 76px);max-height:900px;position:relative;display:grid;grid-template-columns:1fr .9fr;align-items:center;padding:3% 12%;overflow:hidden}.hero-copy{position:relative;z-index:2;padding-bottom:30px}.eyebrow{font-size:10px;letter-spacing:.19em;font-weight:700;color:var(--rose);margin:0 0 17px}.tiny-heart{font-size:10px;margin-right:8px}.hero h1{font:600 clamp(70px,10vw,132px)/1 var(--serif);letter-spacing:-.055em;margin:0 0 25px;color:var(--rose)}.hero h1 span{color:var(--ink);font-style:italic}.hero-sub{max-width:340px;color:#756b65;font-size:16px;line-height:1.8;margin:0 0 28px}.button{display:inline-flex;align-items:center;gap:32px;border:0;border-radius:40px;padding:14px 23px;font-size:12px;font-weight:600;transition:transform .25s,box-shadow .25s}.button:hover{transform:translateY(-3px);box-shadow:0 10px 22px #37231c24}.button-dark{background:var(--ink);color:#fff}.hero-note{font:italic 13px var(--serif);color:#9c8e86;margin-top:24px}.hero-art{height:min(470px,65vw);width:min(470px,65vw);position:relative;justify-self:center;border-radius:50%;background:#f0e3da;display:grid;place-items:center;animation:float 7s ease-in-out infinite}.hero-art:before,.hero-art:after{content:'';position:absolute;border:1px solid #d7c0b2;border-radius:50%;inset:9%}.hero-art:after{inset:18%;border-style:dashed;opacity:.65}.sun{width:45%;height:45%;border-radius:50%;background:#cf9c8b;opacity:.85;box-shadow:0 0 80px #cf9c8b66}.orbit{position:absolute;border-radius:50%;border:1px solid #b78f80;width:72%;height:31%;transform:rotate(-36deg)}.orbit-two{width:78%;height:49%;transform:rotate(43deg);border-color:#d3b5a5}.flower{position:absolute;color:#fff0e5;text-shadow:0 2px 10px #bb766c66;font-size:48px}.flower-one{top:18%;right:20%;animation:turn 24s linear infinite}.flower-two{bottom:20%;left:17%;font-size:34px;animation:turn 30s linear infinite reverse}.art-caption{position:absolute;bottom:12%;right:2%;font:italic 14px/1.6 var(--serif);color:#806860;transform:rotate(-8deg)}.hero-scroll{position:absolute;bottom:28px;left:12%;font-size:9px;letter-spacing:.18em;color:#95867e}.hero-scroll span{margin-left:14px}.section-pad{padding:115px max(9%,calc((100% - 1050px)/2))}.intro{text-align:center;background:#f2e8e1;padding-top:104px;padding-bottom:100px}.intro h2,.section-heading h2,.song-band h2,.letter h2,.countdown h2,.final-note h2{font:500 clamp(36px,5vw,58px)/1.18 var(--serif);letter-spacing:-.03em;margin:0}.intro h2 em,.section-heading h2 em,.song-band h2 em,.letter h2 em,.countdown h2 em,.final-note h2 em{color:var(--rose);font-weight:500}.intro-copy{max-width:440px;color:#796e68;margin:22px auto 0}.divider-heart{color:var(--rose);margin-top:27px}.reasons{padding-top:105px;padding-bottom:115px}.section-heading{display:flex;align-items:end;justify-content:space-between;margin-bottom:45px}.section-aside{margin:0 0 6px;text-align:right;font:italic 14px/1.7 var(--serif);color:#948780}.reason-grid{display:grid;grid-template-columns:repeat(3,1fr);gap:15px}.reason-card{background:#fffaf7;border:1px solid #eee3dd;min-height:184px;padding:25px 26px;position:relative;overflow:hidden;border-radius:3px;cursor:pointer;transition:transform .25s,box-shadow .25s}.reason-card:hover,.reason-card:focus{transform:translateY(-5px);box-shadow:0 13px 28px #4d34220e;outline:none}.reason-number{font-size:10px;letter-spacing:.14em;color:#b68d7e}.reason-heart{position:absolute;top:22px;right:23px;color:#d19b8e}.reason-card h3{font:500 20px/1.3 var(--serif);margin:20px 0 8px}.reason-card p{font-size:12px;color:#80756e;margin:0;line-height:1.7}.below-note{text-align:center;color:#92857e;font:italic 14px var(--serif);margin:33px 0 0}.below-note span{color:var(--rose);margin-left:5px}.memories{background:#f0e6df;padding-top:108px;padding-bottom:120px}.memory-grid{display:grid;grid-template-columns:repeat(4,1fr);gap:16px}.memory-card{margin:0}.memory-image{aspect-ratio:4/5;background:linear-gradient(145deg,#d8bcb0,#f0dcd2);position:relative;overflow:hidden;display:grid;place-items:center;color:#fff8f2}.memory-image img{width:100%;height:100%;object-fit:cover;position:absolute;inset:0}.memory-image .placeholder-mark{font:52px var(--serif);opacity:.9}.memory-card:nth-child(2) .memory-image{background:linear-gradient(145deg,#c9cec0,#e5e2d5)}.memory-card:nth-child(3) .memory-image{background:linear-gradient(145deg,#d9beb1,#eaded2)}.memory-card:nth-child(4) .memory-image{background:linear-gradient(145deg,#b6b5a7,#ded6c9)}.memory-card figcaption{font:italic 15px var(--serif);padding-top:12px;color:#6f625c}.song-band{background:#303331;color:#f7f1ec;padding:58px 12%;display:flex;align-items:center;gap:28px}.song-orb{width:66px;height:66px;flex:none;border:1px solid #827c73;border-radius:50%;display:grid;place-items:center;font-size:27px;color:#d5aa9c}.song-band .eyebrow{color:#d4a89b;margin-bottom:9px}.song-band h2{font-size:37px}.song-band h2 em{color:#d7a99b}.song-band p:not(.eyebrow){margin:8px 0 0;color:#c4bcb4;font-size:13px}.button-outline{color:#f5ece6;border:1px solid #726c66;margin-left:auto;white-space:nowrap}.letter{position:relative;display:grid;grid-template-columns:160px 1fr;align-items:center;gap:30px;overflow:hidden}.letter-stamp{width:128px;height:128px;border:1px solid #d8b8aa;border-radius:50%;display:grid;align-content:center;text-align:center;color:var(--rose);font:700 11px/1.5 var(--sans);letter-spacing:.13em;transform:rotate(-12deg)}.letter-stamp span{font:22px var(--serif)}.letter-content{max-width:530px}.letter-content h2{font-size:46px}.letter-copy{font:italic 16px/1.8 var(--serif);color:#81736c;max-width:450px;margin:16px 0}.text-link{border:0;border-bottom:1px solid #ba8a7d;padding:4px 0;background:transparent;font-size:12px;font-weight:600;cursor:pointer}.text-link span{color:var(--rose);padding-left:8px}.letter-mark{position:absolute;right:12%;bottom:-150px;font:400 440px/.8 var(--serif);color:#f2e8e2;z-index:-1}.countdown{text-align:center;background:#f0e5df;padding-top:95px;padding-bottom:100px}.countdown h2{font-size:48px}.countdown-date{font-size:12px;letter-spacing:.1em;color:#766962;margin:14px 0 30px}.countdown-box{max-width:600px;margin:0 auto;background:#fffaf7;padding:24px 36px;display:flex;align-items:center;justify-content:center;gap:60px;border:1px solid #ebded6}.countdown-big{display:flex;flex-direction:column;border-right:1px solid #eadbd3;padding-right:48px}.countdown-big span{font:500 54px/.95 var(--serif);color:var(--rose)}.countdown-big small,.countdown-units small{font-size:9px;letter-spacing:.13em;text-transform:uppercase;color:#978980;margin-top:8px}.countdown-units{display:flex;align-items:center;gap:17px}.countdown-units div{display:flex;flex-direction:column}.countdown-units b{font:500 24px var(--serif)}.countdown-units i{font-style:normal;color:#b39183}.elapsed{color:#82756e;font-size:12px;margin:19px 0}.countdown-foot{font:italic 14px var(--serif);color:#8c7c75}.countdown-foot span{color:var(--rose);padding-left:5px}.surprises{padding-top:105px;padding-bottom:120px}.surprise-grid{display:grid;grid-template-columns:repeat(3,1fr);gap:15px}.surprise-card{border:1px solid #e8dcd4;background:#fffaf7;padding:24px;min-height:170px;cursor:pointer;transition:background .25s,transform .25s}.surprise-card:hover{transform:translateY(-4px);background:#f4e7e0}.surprise-icon{font-size:20px;color:var(--rose)}.surprise-card h3{font:500 19px var(--serif);margin:11px 0 6px}.surprise-card p{font-size:12px;color:#83766f;margin:0}.final-note{text-align:center;background:#373632;color:#faf4ee;padding:97px 20px 42px;position:relative}.final-sparkle{color:#d1a093;font-size:25px;margin-bottom:12px}.final-note .eyebrow{color:#d3a294}.final-note h2{font-size:48px}.button-light{background:#f8eee8;color:#453b37;margin-top:25px}.final-hidden{max-width:480px;margin:22px auto 0;color:#efd6ca;font:italic 17px/1.7 var(--serif)}.final-sign{font:italic 15px var(--serif);color:#c4b8ad;margin-top:53px}.final-sign span{color:#d29b8d}footer{min-height:66px;padding:18px 7%;display:flex;align-items:center;justify-content:space-between;background:#302f2c;color:#a9a098;font-size:10px;letter-spacing:.05em}footer span:nth-child(2){color:#d39b8e;font-size:15px}footer a:hover{color:#fff}dialog{border:0;padding:52px;max-width:min(560px,90vw);background:#fffaf7;color:var(--ink);box-shadow:0 24px 80px #130b0966}dialog::backdrop{background:#241a18a6;backdrop-filter:blur(4px)}.dialog-close{position:absolute;right:17px;top:10px;border:0;background:transparent;font-size:30px;color:#826e65;cursor:pointer}.dialog-letter{font:16px/1.9 var(--serif);white-space:pre-line;color:#72665e}.dialog-letter img{max-width:100%;height:auto;margin-top:15px}.ambient{position:fixed;inset:0;pointer-events:none;z-index:20;overflow:hidden}.ambient span{position:absolute;bottom:-30px;width:5px;height:5px;border-radius:50%;background:#c8897e;opacity:0;animation:drift 13s linear infinite}.ambient span:nth-child(1){left:9%;animation-delay:0s}.ambient span:nth-child(2){left:32%;animation-delay:4s}.ambient span:nth-child(3){left:58%;animation-delay:8s}.ambient span:nth-child(4){left:77%;animation-delay:2s}.ambient span:nth-child(5){left:92%;animation-delay:6s}.reveal{opacity:0;transform:translateY(18px);transition:opacity .7s ease,transform .7s ease}.reveal.visible{opacity:1;transform:none}@keyframes float{0%,100%{transform:translateY(0)}50%{transform:translateY(-12px)}}@keyframes turn{to{transform:rotate(350deg)}}@keyframes drift{0%{opacity:0;transform:translateY(0) scale(.6)}12%{opacity:.45}90%{opacity:.1}100%{opacity:0;transform:translateY(-110vh) scale(1.8)}}
@media(max-width:760px){.topbar{height:64px;padding:0 6%}.menu-toggle{display:block}.nav{display:none;position:absolute;top:63px;left:0;right:0;background:var(--paper);padding:18px 7%;border-bottom:1px solid var(--line);flex-direction:column;gap:17px;align-items:flex-start}.nav.open{display:flex}.nav-cta{padding:6px 12px}.hero{height:auto;min-height:720px;max-height:none;grid-template-columns:1fr;padding:70px 8% 75px;text-align:center;gap:10px}.hero-copy{padding:0}.hero .eyebrow{font-size:9px}.hero h1{font-size:clamp(70px,17vw,105px)}.hero-sub{margin:0 auto 24px;max-width:300px;font-size:14px}.hero-note{margin-top:17px}.hero-art{height:min(77vw,340px);width:min(77vw,340px);grid-row:2;margin-top:20px}.hero-scroll{left:0;right:0;text-align:center;bottom:20px}.section-pad{padding:76px 7%}.intro{padding-top:75px;padding-bottom:74px}.intro h2{font-size:38px}.intro-copy{font-size:14px}.section-heading{align-items:flex-start;gap:12px;margin-bottom:30px}.section-heading h2{font-size:39px}.section-aside{font-size:12px}.reason-grid{grid-template-columns:repeat(2,1fr);gap:10px}.reason-card{min-height:165px;padding:19px}.reason-card h3{font-size:18px}.reason-card p{font-size:11px}.memory-grid{grid-template-columns:repeat(2,1fr);gap:20px 12px}.memory-image{aspect-ratio:1/1.1}.song-band{padding:42px 7%;gap:16px;flex-wrap:wrap}.song-orb{width:52px;height:52px}.song-band h2{font-size:31px}.song-band p:not(.eyebrow){font-size:12px}.button-outline{margin:8px 0 0 68px}.letter{grid-template-columns:85px 1fr;gap:20px}.letter-stamp{width:78px;height:78px;font-size:8px}.letter-stamp span{font-size:16px}.letter-content h2{font-size:34px}.letter-copy{font-size:14px}.countdown{padding-top:75px;padding-bottom:78px}.countdown h2{font-size:40px}.countdown-box{padding:19px 16px;gap:24px}.countdown-big{padding-right:22px}.countdown-big span{font-size:44px}.countdown-units{gap:9px}.countdown-units b{font-size:20px}.countdown-units small{font-size:8px}.surprise-grid{grid-template-columns:repeat(2,1fr);gap:10px}.surprise-card{padding:18px;min-height:150px}.surprise-card h3{font-size:17px}.final-note{padding-top:75px}.final-note h2{font-size:39px}footer{padding:18px 6%;font-size:9px}}
@media(max-width:420px){.section-heading{display:block}.section-aside{text-align:left;margin-top:12px}.reason-grid{grid-template-columns:1fr 1fr}.reason-card{padding:16px;min-height:175px}.countdown-box{gap:15px}.countdown-big{padding-right:14px}.countdown-big span{font-size:38px}.countdown-units{gap:6px}.countdown-units b{font-size:18px}.countdown-units small{font-size:7px;letter-spacing:.08em}.surprise-grid{grid-template-columns:1fr 1fr}.letter{grid-template-columns:1fr}.letter-stamp{display:none}}
@media(prefers-reduced-motion:reduce){*,*::before,*::after{scroll-behavior:auto!important;animation-duration:.01ms!important;animation-iteration-count:1!important;transition-duration:.01ms!important}}
/* In-place letter reveal */
.letter-content{position:relative;z-index:1}.letter-reveal{display:grid;grid-template-rows:0fr;opacity:0;transition:grid-template-rows .65s cubic-bezier(.2,.75,.25,1),opacity .45s ease;margin-top:0;pointer-events:none}.letter-reveal.is-open{grid-template-rows:1fr;opacity:1;margin-top:23px;pointer-events:auto}.letter-reveal-paper{min-height:0;overflow:hidden;transform:translateY(-10px) scale(.98);transform-origin:top center;transition:transform .65s cubic-bezier(.2,.75,.25,1);background:#fffaf7;border:1px solid #eadbd3;padding:0 25px;border-radius:3px;box-shadow:0 12px 30px #65483b0c}.is-open .letter-reveal-paper{padding-top:22px;padding-bottom:23px;transform:translateY(0) scale(1)}.revealed-letter{font:15px/1.9 var(--serif);white-space:pre-line;color:#72665e}.revealed-letter img{max-width:100%;height:auto;margin-top:15px}.heart-burst{height:0;position:relative;z-index:2}.heart-burst span{position:absolute;left:50%;top:0;color:#c77878;font-size:18px;opacity:0;transform:translate(-50%,0) scale(.2)}.is-open .heart-burst span{animation:heart-reveal 1.05s ease-out both}.is-open .heart-burst span:nth-child(1){--dx:-100px;--dy:-39px;animation-delay:.02s}.is-open .heart-burst span:nth-child(2){--dx:-45px;--dy:-65px;animation-delay:.08s}.is-open .heart-burst span:nth-child(3){--dx:23px;--dy:-54px;animation-delay:.13s}.is-open .heart-burst span:nth-child(4){--dx:80px;--dy:-35px;animation-delay:.18s}.is-open .heart-burst span:nth-child(5){--dx:0px;--dy:-81px;animation-delay:.23s}@keyframes heart-reveal{0%{opacity:0;transform:translate(-50%,0) scale(.2)}25%{opacity:1}75%{opacity:.85}100%{opacity:0;transform:translate(calc(-50% + var(--dx)),var(--dy)) scale(1.25)}}@media(prefers-reduced-motion:reduce){.letter-reveal,.letter-reveal-paper{transition:none}.is-open .heart-burst span{animation:none;opacity:0}}
/* Keep the closed letter reveal out of layout; opening it grows the section naturally. */
.letter-reveal{display:none;grid-template-rows:none;opacity:1;transition:none;margin-top:0;pointer-events:none}
.letter-reveal.is-open{display:block;margin-top:23px;pointer-events:auto;animation:letter-unfold .55s cubic-bezier(.2,.75,.25,1) both}
.letter-reveal-paper{overflow:visible;transform:none;transition:none}
@keyframes letter-unfold{0%{opacity:0;clip-path:inset(0 0 100% 0);transform:translateY(-8px)}100%{opacity:1;clip-path:inset(0);transform:translateY(0)}}
@media(prefers-reduced-motion:reduce){.letter-reveal.is-open{animation:none}}
.letter-reveal{display:none;overflow:hidden;height:0;opacity:0;transition:height .72s cubic-bezier(.22,.78,.22,1),opacity .4s ease;margin-top:0;pointer-events:none;will-change:height}
.letter-reveal.is-open{display:block;margin-top:23px;pointer-events:auto;opacity:1;animation:none}
.letter-reveal-paper{overflow:visible;transform:none;transition:none}
@media(prefers-reduced-motion:reduce){.letter-reveal{transition:none}}
.letter-reveal{transition:height .72s cubic-bezier(.22,.78,.22,1),opacity .4s ease,margin-top .72s cubic-bezier(.22,.78,.22,1)}
/* Surprise cards flip as one steady 3D card on click or tap. */
.surprise-card{padding:0;min-height:170px;perspective:1000px;overflow:visible;background:transparent;border:0;transition:transform .25s;outline:none}
.surprise-card:hover{background:transparent;transform:translateY(-3px)}
.surprise-card:focus-visible{outline:2px solid var(--rose);outline-offset:4px}
.surprise-inner{position:relative;min-height:inherit;height:100%;transform-style:preserve-3d;transition:transform .7s cubic-bezier(.2,.72,.25,1);will-change:transform}
.surprise-card.flipped .surprise-inner{transform:rotateY(180deg)}
.surprise-face{position:absolute;inset:0;display:flex;flex-direction:column;align-items:flex-start;justify-content:center;padding:24px;border:1px solid #e8dcd4;background:#fffaf7;backface-visibility:hidden;-webkit-backface-visibility:hidden;border-radius:3px}
.surprise-front{transition:background .25s}.surprise-card:hover .surprise-front{background:#f4e7e0}
.surprise-face h3{font:500 19px var(--serif);margin:11px 0 0}
.surprise-face p{font:italic 17px/1.65 var(--serif);color:#6f5b53;margin:12px 0 0}
.surprise-back{transform:rotateY(180deg);align-items:center;text-align:center;background:#f2e4dd;border-color:#dfc8bd}
.surprise-face .surprise-icon{font-size:20px;color:var(--rose)}
.surprise-hint{font-size:9px;letter-spacing:.12em;text-transform:uppercase;color:#a28e84;margin-top:14px}
.surprise-hint span{font-size:13px;padding-left:5px;color:var(--rose)}
.back-heart{font-size:20px;color:var(--rose)}
@media(max-width:760px){.surprise-card{min-height:150px}.surprise-face{padding:18px}.surprise-face h3{font-size:17px}.surprise-face p{font-size:15px}}
@media(prefers-reduced-motion:reduce){.surprise-inner{transition:none}}
.letter-reveal-button{position:relative;display:inline-flex;align-items:center;gap:24px;margin-top:28px;padding:15px 23px;border:1px solid #d9bcb1;border-radius:999px;background:#fffaf7;color:#453a36;font-size:12px;font-weight:600;cursor:pointer;overflow:visible;transition:transform .28s cubic-bezier(.2,.75,.25,1),background .28s,border-color .28s,box-shadow .28s}
.letter-reveal-button:hover,.letter-reveal-button:focus-visible{transform:translateY(-3px);background:#f3e5de;border-color:#cb9c8e;box-shadow:0 9px 22px #65483b17;outline:none}
.letter-reveal-button:focus-visible{outline:2px solid var(--rose);outline-offset:4px}
.letter-button-icon{font:18px var(--serif);color:var(--rose);transition:transform .3s}
.letter-reveal-button:hover .letter-button-icon{transform:scale(1.18) rotate(-10deg)}
.letter-button-hearts{position:absolute;inset:0;pointer-events:none}
.letter-button-hearts i{position:absolute;left:50%;top:50%;font-style:normal;color:#c77878;font-size:14px;opacity:0;transform:translate(-50%,-50%) scale(.35)}
.letter-reveal-button:hover .letter-button-hearts i{animation:button-heart-pop .9s ease-out both}
.letter-button-hearts i:nth-child(1){--heart-x:-52px;--heart-y:-25px;animation-delay:0s}
.letter-button-hearts i:nth-child(2){--heart-x:2px;--heart-y:-37px;animation-delay:.08s}
.letter-button-hearts i:nth-child(3){--heart-x:54px;--heart-y:-22px;animation-delay:.16s}
@keyframes button-heart-pop{0%{opacity:0;transform:translate(-50%,-50%) scale(.35)}22%{opacity:1}100%{opacity:0;transform:translate(calc(-50% + var(--heart-x)),calc(-50% + var(--heart-y))) scale(1.15)}}
@media(max-width:760px){.letter-reveal-button{margin-top:32px;padding:15px 21px}}
@media(prefers-reduced-motion:reduce){.letter-reveal-button,.letter-button-icon{transition:none}.letter-reveal-button:hover .letter-button-hearts i{animation:none}}
#playlist-link{gap:12px;transition:transform .28s cubic-bezier(.2,.75,.25,1),box-shadow .28s,background .28s,border-color .28s,color .28s}
#playlist-link:hover,#playlist-link:focus-visible{transform:translateY(-4px);background:#1ed760;color:#17231b;border-color:#1ed760;box-shadow:0 10px 25px #1ed76036;outline:none}
#playlist-link:focus-visible{outline:2px solid #1ed760;outline-offset:4px}
.spotify-logo{width:21px;height:21px;flex:none;fill:#1ed760;transition:transform .3s,fill .3s}
.spotify-logo path{fill:none;stroke:#193321;stroke-width:1.7;stroke-linecap:round;transition:stroke .3s}
#playlist-link:hover .spotify-logo{transform:rotate(-9deg) scale(1.12);fill:#173d25}
#playlist-link:hover .spotify-logo path{stroke:#1ed760}
.playlist-arrow{transition:transform .25s}
#playlist-link:hover .playlist-arrow{transform:translate(2px,-2px)}
@media(prefers-reduced-motion:reduce){#playlist-link,.spotify-logo,.spotify-logo path,.playlist-arrow{transition:none}}
.memory-card{position:relative;overflow:visible}
.memory-image{z-index:1;cursor:pointer;transition:transform .38s cubic-bezier(.2,.75,.25,1),box-shadow .38s;outline:none}
.memory-image:hover,.memory-image:focus-visible,.memory-image.show-caption{z-index:3;transform:scale(1.045);box-shadow:0 16px 32px #37231c28}
.memory-image:focus-visible{outline:2px solid #fff;outline-offset:3px}
.memory-overlay{position:absolute;inset:0;display:flex;align-items:flex-end;padding:20px 17px;color:#fff;text-shadow:0 1px 8px #000,0 2px 16px #000;background:linear-gradient(180deg,transparent 38%,rgba(20,16,15,.76) 100%);font:italic 16px/1.45 var(--serif);opacity:0;transition:opacity .32s ease}
.memory-image:hover .memory-overlay,.memory-image:focus-visible .memory-overlay,.memory-image.show-caption .memory-overlay{opacity:1}
@media(max-width:760px){.memory-overlay{font-size:14px;padding:15px 12px}}
@media(prefers-reduced-motion:reduce){.memory-image,.memory-overlay{transition:none}}
.memory-overlay-text{background:linear-gradient(105deg,#fff8f8 5%,#f6cbd4 52%,#ffe6eb 100%);background-clip:text;-webkit-background-clip:text;color:transparent;-webkit-text-fill-color:transparent;text-shadow:0 1px 7px #000,0 2px 15px #000}
.reason-card{transform-style:preserve-3d}
.reason-card:hover .reason-heart{animation:reason-heart-pop .65s cubic-bezier(.2,.75,.25,1) both}
.reason-sparks{position:absolute;top:22px;right:23px;pointer-events:none}
.reason-sparks i{position:absolute;top:0;right:0;font-style:normal;color:#c87878;font-size:12px;opacity:0;transform:translate(0,0) scale(.3)}
.reason-card:hover .reason-sparks i{animation:reason-hover-hearts 1s ease-out both}
.reason-card:hover .reason-sparks i:nth-child(1){--rx:-28px;--ry:-23px;animation-delay:0s}
.reason-card:hover .reason-sparks i:nth-child(2){--rx:-10px;--ry:-34px;animation-delay:.1s}
.reason-card:hover .reason-sparks i:nth-child(3){--rx:9px;--ry:-28px;animation-delay:.17s}
.reason-card:hover .reason-sparks i:nth-child(4){--rx:24px;--ry:-19px;animation-delay:.06s}
.reason-card.clicked{animation:reason-click-bounce .78s cubic-bezier(.2,.8,.25,1)}
.reason-card.clicked .reason-sparks i{animation:reason-click-burst .8s cubic-bezier(.2,.8,.25,1) both}
.reason-card.clicked .reason-sparks i:nth-child(1){--rx:-61px;--ry:-37px;animation-delay:0s}
.reason-card.clicked .reason-sparks i:nth-child(2){--rx:-23px;--ry:-57px;animation-delay:.04s}
.reason-card.clicked .reason-sparks i:nth-child(3){--rx:24px;--ry:-53px;animation-delay:.08s}
.reason-card.clicked .reason-sparks i:nth-child(4){--rx:59px;--ry:-29px;animation-delay:.02s}
@keyframes reason-heart-pop{0%,100%{transform:scale(1)}40%{transform:scale(1.45) rotate(-12deg)}70%{transform:scale(.9)}}
@keyframes reason-hover-hearts{0%{opacity:0;transform:translate(0,0) scale(.3)}25%{opacity:.95}100%{opacity:0;transform:translate(var(--rx),var(--ry)) scale(1.1)}}
@keyframes reason-click-burst{0%{opacity:0;transform:translate(0,0) scale(.2)}20%{opacity:1}100%{opacity:0;transform:translate(var(--rx),var(--ry)) scale(1.4)}}
@keyframes reason-click-bounce{0%,100%{transform:translateY(-5px) scale(1)}35%{transform:translateY(-5px) scale(1.035)}65%{transform:translateY(-5px) scale(.99)}}
@media(prefers-reduced-motion:reduce){.reason-card:hover .reason-heart,.reason-card:hover .reason-sparks i,.reason-card.clicked,.reason-card.clicked .reason-sparks i{animation:none}}
