*{box-sizing:border-box}html{scroll-behavior:smooth;scroll-padding-top:85px}body{margin:0;background:#10090b;color:#ece0d7;font-family:Georgia,'Times New Roman',serif}::selection{background:#932b40;color:white}button,a{-webkit-tap-highlight-color:transparent}a{color:inherit;text-decoration:none}button{font:inherit}button:focus-visible,a:focus-visible{outline:2px solid #ee8393;outline-offset:6px}.ambient{position:absolute;inset:0 0 auto;height:1100px;background:radial-gradient(ellipse at 70% 35%,#52101f70,transparent 60%);pointer-events:none}header{position:relative;max-width:1400px;margin:auto;padding:28px 6%;display:flex;align-items:center;justify-content:space-between;border-bottom:1px solid #65404a55;font-family:Arial,sans-serif;font-size:12px;letter-spacing:.1em}.brand{font-family:Georgia,serif;font-size:25px;letter-spacing:.3em}.brand span{color:#c3465c}nav{display:flex;gap:30px}.header-note{color:#947c7d;font-size:10px;text-transform:uppercase}.hero{max-width:1280px;margin:auto;min-height:760px;padding:65px 6% 85px;display:grid;grid-template-columns:1.1fr 1fr;align-items:center;gap:70px;position:relative}.eyebrow{font:10px/1.7 Arial,sans-serif;letter-spacing:.24em;text-transform:uppercase;color:#c1848b}h1{font-weight:400;font-size:clamp(60px,7.8vw,110px);line-height:1.05;letter-spacing:-.055em;margin:25px 0}em{font-weight:400;color:#bf4157}.intro{color:#bca4a5;font-size:18px;line-height:1.7;margin:25px 0 35px}.button{display:inline-flex;gap:34px;align-items:center;border:1px solid #873343;padding:17px 24px;background:#67142555;font:12px Arial,sans-serif;transition:.3s}.button:hover{background:#81243a;transform:translateY(-3px)}.ornament{color:#733240;font-size:15px;letter-spacing:3px;margin-top:45px}.hero-image{position:relative;padding:14px;border:1px solid #763b48;border-radius:50% 50% 0 0;animation:appear 1.3s both}.arch{height:510px;overflow:hidden;border-radius:50% 50% 0 0;position:relative}.arch:after{content:'';position:absolute;inset:0;box-shadow:inset 0 0 90px #2b041555;pointer-events:none}.arch img{width:100%;height:100%;object-fit:cover;object-position:47% center;filter:saturate(.72)}.photo-mark{display:block;text-align:center;padding:18px 0 5px;color:#b29194;font:10px Arial,sans-serif;letter-spacing:.25em}.seal{position:absolute;bottom:0;left:-29px;width:68px;height:68px;border-radius:50%;background:#68182a;border:1px solid #bb5a68;display:grid;place-items:center;font-size:37px;box-shadow:0 0 0 7px #10090b}.hero-bottom{position:absolute;bottom:20px;left:6%;font-style:italic;color:#86686d;font-size:13px}.hero-copy{animation:appear 1s both}.quote{text-align:center;padding:90px 20px 120px;border-top:1px solid #65404a44}.small-star{color:#a64356;font-size:25px}.quote p{font-size:clamp(25px,3.2vw,43px);line-height:1.5;margin:25px 0}.moments{max-width:1280px;margin:auto;padding:0 6% 100px}.section-heading{display:flex;justify-content:space-between;align-items:end;margin-bottom:45px}h2{font-size:clamp(42px,5vw,65px);font-weight:400;letter-spacing:-.035em;margin:15px 0}.section-heading>p{color:#ab8c91;font-size:15px;line-height:1.7}.gallery{display:grid;grid-template-columns:repeat(3,1fr);gap:30px}.photo{padding:0;border:0;background:none;color:#c4a3a8;text-align:left;cursor:pointer;min-width:0}.photo.wide{grid-column:span 2}.photo img{width:100%;height:370px;object-fit:cover;filter:saturate(.65);transition:filter .4s,transform .4s}.photo:hover img{filter:saturate(1);transform:translateY(-5px)}.photo span{display:flex;justify-content:space-between;gap:20px;border-bottom:1px solid #5a293455;padding:18px 0;font:10px Arial,sans-serif;letter-spacing:.08em}.photo i{font:italic 18px Georgia,serif}.letter-section{text-align:center;padding:95px 20px;background:radial-gradient(ellipse at center,#460f1c66,transparent 70%);border-block:1px solid #65404a44}.letter-intro{color:#b2999e;line-height:1.8;font-size:17px}.envelope{position:relative;width:260px;height:155px;margin:35px auto 0;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:18px;color:#d7bbc1;border:1px solid #863746;background:linear-gradient(150deg,#3c1520,#210c13);cursor:pointer;transition:.3s;box-shadow:0 15px 60px #0005}.envelope:hover{transform:translateY(-6px);border-color:#db6679}.envelope>span:last-child{font:11px Arial,sans-serif;letter-spacing:.12em}.wax{display:grid;place-items:center;border-radius:50%;width:48px;height:48px;background:#8c253a;border:1px solid #bb6473;font-size:30px}article{max-width:640px;margin:40px auto 0;text-align:left;background:#e4d4c5;color:#36232a;padding:45px;animation:appear .6s}article .eyebrow{color:#842d43}article h3{font-size:32px;font-weight:400}article p{font-size:17px;line-height:1.85}.signature{text-align:right;font-style:italic;color:#882c43}.ending{text-align:center;padding:110px 20px}.heart{display:block;font-size:75px;color:#a9354c;animation:pulse 3s infinite}.ending p{font-size:clamp(25px,3.5vw,44px);line-height:1.55}.ending a{font:11px Arial,sans-serif;color:#a7888e;letter-spacing:.1em}footer{padding:25px 6%;border-top:1px solid #65404a44;display:flex;justify-content:space-between;color:#896b73;font:10px Arial,sans-serif;letter-spacing:.07em}.js .reveal{opacity:0;transform:translateY(24px);transition:opacity .8s,transform .8s}.js .reveal.visible{opacity:1;transform:none}dialog{max-width:100vw;max-height:100dvh;width:100vw;height:100dvh;border:0;padding:65px 60px 45px;background:#10090bf5;color:white}dialog[open]{display:flex;align-items:center;justify-content:center}dialog::backdrop{background:#000c}dialog img{max-width:100%;max-height:calc(100dvh - 120px);object-fit:contain}dialog button{position:absolute;background:#35151dc9;border:1px solid #824251;color:#f0d7dd;width:42px;height:42px;cursor:pointer;font-size:28px}.close{right:20px;top:16px}.previous{left:10px;top:50%}.next{right:10px;top:50%}#counter{position:absolute;bottom:8px;font:12px Arial,sans-serif}@keyframes appear{from{opacity:0;transform:translateY(25px)}to{opacity:1;transform:none}}@keyframes pulse{50%{transform:scale(1.08)}}@media(max-width:750px){header{padding:20px 6%}.header-note{display:none}nav{gap:20px;font-size:11px}.hero{grid-template-columns:1fr;gap:40px;padding-top:50px;min-height:auto}.hero-copy{text-align:center}h1{font-size:72px}.intro{font-size:16px}.ornament{margin-top:30px}.hero-image{max-width:390px;width:100%;margin:auto}.arch{height:440px}.hero-bottom{left:0;width:100%;text-align:center}.quote{padding:65px 20px 80px}.section-heading{display:block}.gallery{grid-template-columns:1fr 1fr;gap:22px 15px}.photo.wide{grid-column:span 2}.photo img{height:260px}.photo.wide img{height:340px}.photo i{font-size:15px}.photo span{gap:8px}.moments{padding-bottom:65px}.letter-section{padding:65px 20px}article{padding:28px}.ending{padding:70px 20px}footer span:nth-child(2){display:none}}@media(prefers-reduced-motion:reduce){html{scroll-behavior:auto}*,*:before,*:after{animation:none!important;transition:none!important}.js .reveal{opacity:1;transform:none}}

/* Crimson cathedral tracery */
body{position:relative;isolation:isolate;background:#10090b}.gothic-background{position:absolute;inset:0;z-index:-1;pointer-events:none;background-image:url('assets/gothic.svg');background-size:360px 520px;opacity:.19;mask-image:linear-gradient(90deg,#000,transparent 35%,transparent 65%,#000);-webkit-mask-image:linear-gradient(90deg,#000,transparent 35%,transparent 65%,#000)}.ambient{z-index:-1;height:100%;background:radial-gradient(ellipse at 85% 10%,#730e2c55,transparent 28%),radial-gradient(ellipse at 0% 55%,#730e2c35,transparent 30%)}.quote,.letter-section,.ending{position:relative}.quote:before,.ending:before{content:'✦';position:absolute;top:20px;left:50%;color:#873144;font-size:15px}.letter-section{background:radial-gradient(ellipse at center,#460f1caa,#10090b66 75%)}.hero-image:before{content:'';position:absolute;inset:-12px;border:1px solid #8e354c55;border-radius:50% 50% 0 0;pointer-events:none}.section-heading{border-top:1px solid #70303f55;padding-top:40px}@media(max-width:750px){.gothic-background{background-size:240px 347px;opacity:.15;mask-image:linear-gradient(90deg,#000,transparent 43%,transparent 57%,#000);-webkit-mask-image:linear-gradient(90deg,#000,transparent 43%,transparent 57%,#000)}}
