*,*:before,*:after{box-sizing:border-box;margin:0;padding:0}:root{--cream: #faf4ec;--parchment: #f2e8d9;--rose: #c4796a;--rose-light: #e8b4a8;--gold: #b8894a;--brown: #2c1a10;--brown-mid: #5c3a28;--sage: #8a9b7d;--sage-light: #c8d5c0}html{scroll-behavior:smooth}body{background:var(--cream);color:var(--brown);font-family:Lora,serif;font-size:18px;line-height:1.85;overflow-x:hidden;position:relative}body:before{content:"";position:fixed;top:0;right:0;bottom:0;left:0;background-image:url("data:image/svg+xml,%3Csvg viewBox='0 0 256 256' xmlns='http://www.w3.org/2000/svg'%3E%3Cfilter id='noise'%3E%3CfeTurbulence type='fractalNoise' baseFrequency='0.9' numOctaves='4' stitchTiles='stitch'/%3E%3C/filter%3E%3Crect width='100%25' height='100%25' filter='url(%23noise)' opacity='0.04'/%3E%3C/svg%3E");pointer-events:none;z-index:1000;opacity:.5}.page{max-width:550px;margin:0 auto;padding:0}.reveal{opacity:0;transform:translateY(28px);transition:opacity .9s ease,transform .9s ease}.reveal.visible{opacity:1;transform:translateY(0)}.hero{min-height:100svh;display:flex;flex-direction:column;align-items:center;justify-content:center;text-align:center;padding:60px 32px 80px;position:relative;background:radial-gradient(ellipse 80% 60% at 50% 0%,#f5ddd0 0%,transparent 70%),var(--cream)}.hero-date{font-family:Dancing Script,cursive;font-size:16px;color:var(--rose);letter-spacing:.08em;margin-bottom:48px;animation:fadeUp 1.2s ease both}.hero-petal-top{position:absolute;top:0;left:0;right:0;height:120px;background:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 430 120'%3E%3Cellipse cx='80' cy='20' rx='60' ry='30' fill='%23E8B4A8' opacity='0.3'/%3E%3Cellipse cx='240' cy='10' rx='80' ry='25' fill='%23C4796A' opacity='0.15'/%3E%3Cellipse cx='380' cy='30' rx='50' ry='28' fill='%23E8B4A8' opacity='0.25'/%3E%3Cellipse cx='150' cy='5' rx='35' ry='18' fill='%23B8894A' opacity='0.12'/%3E%3C/svg%3E") center/cover no-repeat}.hero-name{font-family:Cormorant Garamond,serif;font-size:clamp(54px,15vw,72px);font-weight:300;font-style:italic;color:var(--brown);line-height:1.05;letter-spacing:-.01em;animation:fadeUp 1.2s .2s ease both}.hero-nicknames{font-family:Dancing Script,cursive;font-size:21px;color:var(--rose);margin-top:10px;letter-spacing:.04em;animation:fadeUp 1.2s .4s ease both}.hero-divider{width:1px;height:60px;background:linear-gradient(to bottom,transparent,var(--gold),transparent);margin:36px auto;animation:fadeUp 1.2s .6s ease both}.hero-intro{font-family:Cormorant Garamond,serif;font-size:21px;font-style:italic;font-weight:300;color:var(--brown-mid);max-width:300px;line-height:1.7;animation:fadeUp 1.2s .8s ease both}.hero-para-ti{font-family:Dancing Script,cursive;font-size:24px;color:var(--rose)}.hero-scroll{position:absolute;bottom:32px;left:50%;transform:translate(-50%);display:flex;flex-direction:column;align-items:center;gap:8px;animation:fadeUp 1.4s 1.4s ease both}.hero-scroll span{font-family:Dancing Script,cursive;font-size:14px;color:var(--rose);letter-spacing:.05em}.hero-scroll-line{width:1px;height:40px;background:var(--rose-light);animation:pulse 2s ease-in-out infinite}section{padding:72px 32px;position:relative}section:nth-child(2n){background:var(--parchment)}.section-heading{font-family:Cormorant Garamond,serif;font-size:clamp(38px,9vw,50px);font-weight:300;font-style:italic;line-height:1.15;color:var(--brown);margin-bottom:32px}.section-heading em{color:var(--rose);font-style:italic}.body-text{font-size:18px;color:var(--brown-mid);line-height:1.9}.body-text+.body-text{margin-top:22px}.photo-slot{width:100%;aspect-ratio:4/5;border-radius:4px;margin:40px 0;overflow:hidden}.photo-slot img{width:100%;height:100%;object-fit:cover;display:block}.pull-quote{border-left:2px solid var(--rose);padding:4px 0 4px 24px;margin:40px 0}.pull-quote p{font-family:Cormorant Garamond,serif;font-size:26px;font-style:italic;font-weight:300;color:var(--brown);line-height:1.5}.kids-row{display:grid;grid-template-columns:1fr 1fr;gap:16px;margin:40px 0}.kid-card{background:var(--cream);border-radius:4px;padding:24px 16px;text-align:center}section:nth-child(2n) .kid-card{background:var(--parchment)}.kid-name{font-family:Cormorant Garamond,serif;font-size:30px;font-style:italic;color:var(--brown);display:block;margin-bottom:6px}.kid-age{font-size:12px;letter-spacing:.1em;text-transform:uppercase;color:var(--rose);margin-bottom:14px;display:block}.kid-note{font-size:16px;color:var(--brown-mid);font-style:italic;line-height:1.75}.letter-section{background:radial-gradient(ellipse 100% 50% at 50% 100%,#f5ddd0 0%,transparent 70%),var(--cream)!important}.letter-body{background:#fff;border:1px solid #e8d8cc;border-radius:2px;padding:40px 32px;margin:40px 0;box-shadow:0 8px 40px #2c1a1014;position:relative}.letter-body:before{content:"";position:absolute;top:10px;left:10px;right:10px;bottom:10px;border:1px solid rgba(184,137,74,.15);pointer-events:none}.letter-body p{font-family:Lora,serif;font-size:17px;color:#3c2515;line-height:1.95;margin-bottom:20px}.letter-body p:last-child{margin-bottom:0}.letter-signature{font-family:Dancing Script,cursive;font-size:30px;color:var(--brown);text-align:right;margin-top:32px;line-height:1.3}.closing-section{text-align:center;padding:100px 32px 80px;background:radial-gradient(ellipse 90% 60% at 50% 0%,#f5ddd0 0%,transparent 60%),var(--cream)}.closing-heading{font-family:Cormorant Garamond,serif;font-size:clamp(42px,11vw,58px);font-style:italic;font-weight:300;color:var(--brown);line-height:1.2;margin-bottom:20px}.closing-sub{font-family:Dancing Script,cursive;font-size:20px;color:var(--rose);margin-bottom:48px}.closing-names{display:flex;flex-direction:column;align-items:center;gap:8px}.closing-name{font-family:Cormorant Garamond,serif;font-style:italic}.closing-name.secondary{font-size:22px;color:var(--brown-mid)}.closing-name.script{font-family:Dancing Script,cursive;font-size:24px;color:var(--rose)}footer{text-align:center;padding:32px;font-size:13px;color:var(--sage);letter-spacing:.06em;border-top:1px solid var(--parchment)}@keyframes fadeUp{0%{opacity:0;transform:translateY(20px)}to{opacity:1;transform:translateY(0)}}@keyframes pulse{0%,to{opacity:.4;transform:scaleY(1)}50%{opacity:1;transform:scaleY(1.1)}}
