:root{--ink:#181818;--paper:#faf5ec;--paper-deep:#f2e8d4}*{box-sizing:border-box}html,body{height:100%;margin:0;overflow:hidden}body{background:var(--paper);color:var(--ink);font-family:var(--font-caveat),cursive}body:before{content:"";pointer-events:none;mix-blend-mode:multiply;opacity:.5;z-index:1;background-image:radial-gradient(circle at 20% 30%,#00000004 0 1px,#0000 1px),radial-gradient(circle at 70% 80%,#00000003 0 1px,#0000 1px);background-size:7px 7px,11px 11px;position:fixed;inset:0}.stage{z-index:3;justify-content:center;align-items:center;padding:clamp(16px,3vh,40px);display:flex;position:fixed;inset:0}.stamp{font-family:var(--font-permanent-marker),sans-serif;letter-spacing:.12em;text-transform:uppercase;opacity:0;z-index:6;font-size:13px;animation:.6s 3.4s forwards fadeIn;position:absolute}.stamp.tr{text-align:right;top:clamp(20px,3vh,36px);right:clamp(24px,3vw,48px)}.stamp.br{text-align:right;bottom:clamp(20px,3vh,36px);right:clamp(24px,3vw,48px)}.stamp .box{border:2px solid var(--ink);background:var(--paper);padding:6px 10px 4px;display:inline-block;transform:rotate(4deg)}.stamp.br .box{transform:rotate(-2deg)}.composition{text-align:center;z-index:5;flex-direction:column;justify-content:center;align-items:center;gap:clamp(8px,1.4vh,18px);width:100%;max-width:1100px;display:flex;position:relative}.heart-badge{width:clamp(140px,20vh,220px);position:relative}.title-block{display:inline-block;position:relative}.title-block .date-stamp{font-family:var(--font-caveat),cursive;color:var(--ink);opacity:0;transform-origin:50% 60%;z-index:6;will-change:transform,opacity;flex-direction:column;align-items:center;font-weight:700;line-height:1;animation:.6s cubic-bezier(.34,1.56,.64,1) 1.95s forwards datePop,3.2s ease-in-out 2.75s infinite dateWiggle;display:flex;position:absolute;bottom:clamp(-48px,-4.5vh,-34px);right:0;transform:rotate(-9deg)scale(.6)}.title-block .date-stamp sup{vertical-align:super;font-size:.55em}.title-block .date-stamp .hd-1{font-size:clamp(22px,2.8vh,34px);transform:rotate(-3deg)translate(-6px)}.title-block .date-stamp .hd-2{margin-top:2px;font-size:clamp(28px,3.4vh,44px);transform:rotate(1deg)}.title-block .date-stamp .hd-3{margin-top:2px;font-size:clamp(22px,2.8vh,34px);transform:rotate(4deg)translate(6px)}@keyframes datePop{0%{opacity:0;transform:rotate(-20deg)scale(.5)}35%{opacity:1;transform:rotate(-5deg)scale(1.08)}to{opacity:1;transform:rotate(-9deg)scale(1)}}@keyframes dateWiggle{0%,to{transform:rotate(-9deg)}50%{transform:rotate(-6deg)}}.title{font-family:var(--font-caveat-brush),var(--font-permanent-marker),cursive;text-transform:uppercase;color:var(--ink);letter-spacing:.01em;flex-wrap:nowrap;justify-content:center;gap:0 .08em;margin:0;font-size:clamp(64px,12vw,180px);line-height:.88;display:flex}.title.line2{margin-top:clamp(-10px,-1.4vh,-6px)}.title .ch{opacity:0;animation:.5s cubic-bezier(.34,1.56,.64,1) forwards dropIn;display:inline-block;transform:translateY(-70px)rotate(-10deg)scale(.6)}.title .ch.up{transform:translateY(70px)rotate(8deg)scale(.6)}.title .sp{width:.25em;display:inline-block}.swoosh{opacity:0;width:min(44vw,420px);height:24px;margin-top:6px;margin-bottom:4px;animation:.3s 1.15s forwards fadeIn}.swoosh path{stroke:var(--ink);stroke-width:3.5px;fill:none;stroke-linecap:round;stroke-dasharray:600;stroke-dashoffset:600px;animation:1.15s 1.15s forwards drawLine}.caption{max-width:90vw;font-family:var(--font-caveat),cursive;margin-top:clamp(10px,1.8vh,20px)}.caption .names{opacity:0;font-family:var(--font-caveat),cursive;white-space:nowrap;letter-spacing:.01em;font-size:clamp(28px,3.4vh,42px);font-weight:500;line-height:1.25;animation:.7s 2.6s forwards fadeUp}.caption .names-row{justify-content:center;align-items:center;gap:clamp(10px,1.5vw,22px);display:flex}.letter-btn{appearance:none;color:var(--ink);cursor:pointer;opacity:0;transform-origin:50% 65%;background:0 0;border:0;width:clamp(46px,5.6vh,64px);padding:6px;animation:.6s cubic-bezier(.34,1.56,.64,1) 2.9s forwards letterIn,2.6s ease-in-out 3.8s infinite letterWobble;position:relative;transform:rotate(-6deg)}.letter-btn:hover{animation-play-state:paused,paused}.letter-btn svg{width:100%;height:auto;transition:transform .2s;display:block;overflow:visible}.letter-btn:hover svg{transform:scale(1.08)rotate(2deg)}.letter-btn:active svg{transform:scale(.96)}.letter-btn .flap{transform-origin:32px 14px;transition:transform .35s cubic-bezier(.34,1.4,.64,1);transform:rotateX(0)}.letter-btn:hover .flap{transform:rotateX(170deg)}.letter-btn .letter-tip{font-family:var(--font-caveat),cursive;color:var(--ink);opacity:0;pointer-events:none;white-space:nowrap;font-size:clamp(14px,1.6vh,18px);font-style:italic;transition:opacity .2s;position:absolute;top:calc(100% + 4px);left:50%;transform:translate(-50%)rotate(-3deg)}.letter-btn:hover .letter-tip{opacity:.75}@keyframes letterIn{0%{opacity:0;transform:translateY(-14px)rotate(-18deg)scale(.6)}70%{opacity:1;transform:translateY(2px)rotate(2deg)scale(1.08)}to{opacity:1;transform:translateY(0)rotate(-6deg)scale(1)}}@keyframes letterWobble{0%,to{transform:rotate(-6deg)translateY(0)}25%{transform:rotate(-2deg)translateY(-2px)}50%{transform:rotate(-7deg)translateY(0)}75%{transform:rotate(-4deg)translateY(-1px)}}.video-modal{z-index:100;justify-content:center;align-items:center;padding:clamp(16px,4vh,48px);display:none;position:fixed;inset:0}.video-modal.open{display:flex}.video-modal__backdrop{-webkit-backdrop-filter:blur(4px);backdrop-filter:blur(4px);background:#1818188c;animation:.25s forwards fadeIn;position:absolute;inset:0}.video-modal__card{background:var(--paper);border:2px solid var(--ink);opacity:0;border-radius:6px;width:min(720px,92vw);padding:clamp(14px,2vh,22px);animation:.4s cubic-bezier(.34,1.4,.64,1) 50ms forwards cardIn;position:relative;transform:rotate(-.6deg)translateY(8px)scale(.95);box-shadow:8px 10px #181818d9}@keyframes cardIn{to{opacity:1;transform:rotate(-.6deg)translateY(0)scale(1)}}.video-modal__close{appearance:none;background:var(--paper);width:36px;height:36px;color:var(--ink);border:2px solid var(--ink);cursor:pointer;border-radius:50%;justify-content:center;align-items:center;transition:transform .15s;display:flex;position:absolute;top:-14px;right:-14px;box-shadow:2px 3px #181818d9}.video-modal__close:hover{transform:rotate(8deg)scale(1.06)}.video-modal__close svg{width:18px;height:18px;display:block}.video-modal__frame{aspect-ratio:16/9;border:1.5px solid var(--ink);color:#faf5eccc;background:#1a1a1a;border-radius:3px;justify-content:center;align-items:center;display:flex;overflow:hidden}.video-modal__placeholder{text-align:center;font-family:var(--font-caveat),cursive;color:#faf5ecd9;flex-direction:column;align-items:center;gap:10px;font-size:clamp(20px,2.6vh,28px);display:flex}.video-modal__placeholder svg{color:#faf5ece6;width:clamp(56px,8vh,80px);height:auto}.video-modal__cap{text-align:center;font-family:var(--font-caveat),cursive;color:var(--ink);opacity:.75;margin-top:12px;font-size:clamp(18px,2.2vh,24px);font-style:italic}.caption .names .amp{padding:0 .1em;font-size:1.15em;font-style:italic;font-weight:400}.caption .follow{font-family:var(--font-caveat),cursive;opacity:0;letter-spacing:.02em;margin-top:14px;font-size:clamp(18px,2.2vh,26px);font-style:italic;font-weight:400;animation:.7s 3s forwards fadeUpFollow}@keyframes fadeUpFollow{0%{opacity:0;transform:translateY(10px)}to{opacity:.7;transform:translateY(0)}}.title-block .disco{transform-origin:50% calc(6px - 100vh);opacity:0;z-index:4;width:clamp(180px,22vw,320px);color:var(--ink);will-change:transform,opacity;animation:1.1s cubic-bezier(.34,1.4,.64,1) 3.2s forwards dropDisco,5s ease-in-out 4.3s infinite discoSway;position:absolute;top:50%;right:calc(100% + clamp(8px,1vw,24px));overflow:visible}.disco svg{width:100%;height:auto;display:block;overflow:visible}.title-block .disco:before{content:"";background:var(--ink);z-index:-1;width:2px;height:100vh;position:absolute;bottom:calc(100% - 6px);left:50%;transform:translate(-50%)}.ornament{color:var(--ink);opacity:0;pointer-events:none;z-index:4;position:absolute}.ornament svg{width:100%;height:auto;display:block;overflow:visible}.hearts{pointer-events:none;z-index:3;position:absolute;inset:0}.pop-heart{color:var(--ink);opacity:0;transform-origin:50%;position:absolute}.pop-heart svg{width:100%;height:100%;display:block}@keyframes heartIn{0%{opacity:0;transform:scale(.3)rotate(-20deg)}70%{opacity:1;transform:scale(1.08)rotate(4deg)}to{opacity:1;transform:scale(1)rotate(0)}}@keyframes heartBeat{0%,to{transform:scale(1)rotate(0)}45%{transform:scale(1.03)rotate(-1deg)}55%{transform:scale(.98)rotate(1deg)}}@keyframes dropIn{0%{opacity:0;transform:translateY(-70px)rotate(-10deg)scale(.6)}70%{opacity:1;transform:translateY(6px)rotate(3deg)scale(1.04)}to{opacity:1;transform:translateY(0)rotate(var(--r,-2deg))scale(1)}}@keyframes popIn{0%{opacity:0;transform:scale(.3)rotate(-20deg)}70%{opacity:1;transform:scale(1.15)rotate(5deg)}to{opacity:1;transform:scale(1)rotate(var(--mr,0deg))}}@keyframes bob{0%,to{transform:translateY(0)rotate(-3deg)}50%{transform:translateY(-6px)rotate(3deg)}}@keyframes tip{0%,to{transform:rotate(-6deg)}50%{transform:rotate(6deg)}}@keyframes sway{0%,to{transform:rotate(-8deg)}50%{transform:rotate(6deg)}}@keyframes fadeIn{to{opacity:1}}@keyframes fadeUp{0%{opacity:0;transform:translateY(10px)}to{opacity:1;transform:translateY(0)}}@keyframes drawLine{to{stroke-dashoffset:0}}@keyframes dropDisco{0%{opacity:0;transform:translateY(-160vh)rotate(0)}15%{opacity:1;transform:translateY(-140vh)rotate(0)}70%{opacity:1;transform:translateY(calc(14px - 50%))rotate(0)}85%{opacity:1;transform:translateY(calc(-50% - 6px))rotate(0)}to{opacity:1;transform:translateY(-50%)rotate(0)}}@keyframes discoSway{0%{transform:translateY(-50%)rotate(0)}25%{transform:translateY(-50%)rotate(-2.2deg)}75%{transform:translateY(-50%)rotate(2.2deg)}to{transform:translateY(-50%)rotate(0)}}@keyframes spin{0%{transform:rotate(0)}to{transform:rotate(360deg)}}@keyframes twinkleSp{0%,to{opacity:.3;transform:scale(.6)}50%{opacity:1;transform:scale(1.3)}}@keyframes popHeart{0%{opacity:0;transform:scale(.2)rotate(var(--r0,-30deg))}25%{opacity:.75;transform:scale(1.05)rotate(var(--r1,0deg))}50%{opacity:.8;transform:scale(1)rotate(0)}80%{opacity:.4;transform:scale(.9)rotate(var(--r3,15deg))}to{opacity:0;transform:scale(.4)rotate(var(--r3,25deg))}}
