:root{--ink:#33253f;--muted:#74657d;--purple:#644585;--lilac:#c6b5eb;--paper:#fff9eb;--pink:#f0b3c8;--yellow:#f4e990;--line:rgba(69,44,84,.18);font-family:'DM Sans',sans-serif;color:var(--ink);font-synthesis:none}
*{box-sizing:border-box}body{margin:0;min-width:320px;min-height:100svh;background:radial-gradient(ellipse at 50% 35%,#ddd0f3 0%,#c9b9e9 48%,#bba8df 100%);overflow-x:hidden}body:before{content:'';position:fixed;inset:0;pointer-events:none;opacity:.2;background-image:url("data:image/svg+xml,%3Csvg viewBox='0 0 180 180' xmlns='http://www.w3.org/2000/svg'%3E%3Cfilter id='n'%3E%3CfeTurbulence type='fractalNoise' baseFrequency='.88' numOctaves='3' stitchTiles='stitch'/%3E%3C/filter%3E%3Cpath fill='%23fff' filter='url(%23n)' opacity='.32' d='M0 0h180v180H0z'/%3E%3C/svg%3E");z-index:10}button,input{font:inherit}button{cursor:pointer}button:disabled{cursor:default}button,a,input{-webkit-tap-highlight-color:transparent}button:focus-visible,input:focus-visible,[tabindex]:focus-visible{outline:3px solid #8c459d;outline-offset:5px}button{color:inherit}button:disabled{opacity:.35}[hidden]{display:none!important}.site-header,.site-footer{position:relative;z-index:2;display:flex;align-items:center;justify-content:space-between;padding:26px 42px;font-size:.8125rem}.brand{display:flex;align-items:center;gap:9px;font-weight:700;font-size:1.05rem;letter-spacing:-.035em}.brand-star{font-size:1.8rem;line-height:1;color:#634885}.header-note{letter-spacing:.035em}.site-footer{padding-top:18px;padding-bottom:24px;color:#564762;font-size:.75rem}.site-footer>span:last-child{display:flex;align-items:center;gap:8px}.site-footer>span:last-child span{font-size:1.1rem}main{min-height:calc(100svh - 142px);display:grid;place-items:center;padding:28px 24px 20px}.gate{width:min(100%,465px);position:relative;padding-top:24px}.little-note{position:absolute;right:-55px;top:-14px;font-family:'Caveat',cursive;font-size:1.55rem;transform:rotate(8deg);z-index:2}.little-note span{font-size:2rem;display:inline-block;transform:translateY(12px) rotate(22deg)}.invitation{background:var(--paper);padding:15px;box-shadow:0 4px 0 #eae0c8,0 7px 0 #faf0de,0 24px 65px -18px #523e6e55;transform:rotate(-2deg);border-radius:4px}.invitation-border{border:1px solid #b9a8bf;border-radius:2px;padding:38px 33px 27px;text-align:center}.eyebrow{font-size:.6875rem;letter-spacing:.18em;font-weight:600}.tiny-stars{color:#9374ac;margin-top:24px;font-size:1.45rem}h1,h2,p{margin-top:0}h1{font:500 clamp(2.75rem,5vw,3.5rem)/1.02 'Fraunces',Georgia,serif;letter-spacing:-.055em;margin:18px 0 18px}h1 em{font-weight:500;color:var(--purple)}.gate-subtitle{font-size:.875rem;color:var(--muted);margin-bottom:31px}form{text-align:left;transform:rotate(2deg)}label{display:block;font-weight:600;font-size:.8125rem;margin-bottom:9px}.password-wrap{position:relative}.password-wrap input{width:100%;height:51px;padding:0 66px 0 15px;border:1px solid #c3b5ce;border-radius:8px;color:var(--ink);background:#fffcf6;font-size:.875rem}.password-wrap input::placeholder{color:#9b90a2}.show-password{position:absolute;top:0;right:4px;bottom:0;background:none;border:0;font-size:.75rem;font-weight:600;color:#746185;width:55px}.primary-button{width:100%;border:0;background:var(--purple);color:white;padding:15px 19px;min-height:50px;margin-top:12px;border-radius:8px;display:flex;justify-content:center;align-items:center;gap:13px;font-size:.875rem;font-weight:600;box-shadow:0 3px 0 #493063;transition:background .2s,transform .2s}.primary-button:hover{background:#533770;transform:translateY(-1px)}.primary-button span{font-size:1.2rem}.form-error{font-size:.8125rem;color:#9a2858;line-height:1.4;margin:12px 0 0;min-height:18px}.form-error:empty{margin:8px 0 0}.gate-footer{margin-top:12px;display:flex;align-items:center;justify-content:center;gap:7px;font-size:.6875rem;color:#7a6787}.gate-footer span{font-size:1.1rem}.below-card{text-align:center;font-family:'Caveat',cursive;font-size:1.2rem;margin:25px 0 0;color:#615071}.below-card span{margin-left:7px;font-family:serif;font-size:1rem}.noscript{text-align:center;padding:20px;background:var(--paper)}.confetti{position:fixed;inset:0;pointer-events:none;z-index:20;overflow:hidden}
@media(max-width:600px){.site-header{padding:20px 21px}.header-note{font-size:.6875rem}.site-footer{padding:22px 20px;font-size:.625rem;gap:15px}main{padding:32px 22px 20px;min-height:calc(100svh - 129px)}.little-note{right:3px;top:-19px;font-size:1.3rem}.invitation-border{padding:32px 20px 24px}.gate-subtitle{font-size:.8125rem}.gate-footer{font-size:.625rem}.eyebrow{font-size:.625rem}.gate{padding-top:18px}.invitation{transform:rotate(-1.5deg)}form{transform:rotate(1.5deg)}}
@media(prefers-reduced-motion:reduce){*,*:before,*:after{animation-duration:.01ms!important;transition-duration:.01ms!important;scroll-behavior:auto!important}}
/* The card is one hinged cover: its back becomes the left page. */
.experience{width:min(100%,1060px);animation:appear .5s both}.experience-top{display:flex;align-items:center;justify-content:space-between;margin:0 auto 26px;max-width:1020px;gap:20px}.quiet-button{border:0;background:none;color:#574169;font-size:.8125rem;padding:8px;white-space:nowrap;min-height:40px}.quiet-button:hover{text-decoration:underline;text-underline-offset:5px}.book-stage{perspective:2200px;perspective-origin:50% 45%;padding:0 12px}.book{position:relative;width:100%;height:650px;transform:translateX(-25%);transform-style:preserve-3d;transition:transform 1.05s cubic-bezier(.22,.7,.25,1)}.book.is-open{transform:translateX(0)}.inside-right,.cover{position:absolute;left:50%;width:50%;height:100%;border-radius:3px 9px 9px 3px}.inside-right{background:var(--paper);padding:35px 38px 23px;display:flex;flex-direction:column;box-shadow:3px 3px 0 #e5ddc8,5px 6px 0 #f3eada,8px 10px 0 #d6cbb5,12px 28px 48px -18px #46315e55;overflow:hidden}.inside-right:before{content:'';position:absolute;left:0;top:0;bottom:0;width:26px;background:linear-gradient(90deg,#594a4022,transparent);pointer-events:none;z-index:2}.cover{transform-origin:left center;transform-style:preserve-3d;transition:transform 1.05s cubic-bezier(.22,.7,.25,1);z-index:3}.book.is-open .cover{transform:rotateY(-180deg)}.cover-front,.cover-back{position:absolute;inset:0;backface-visibility:hidden;-webkit-backface-visibility:hidden;border-radius:3px 9px 9px 3px;background:var(--paper);box-shadow:0 1px 0 #d0c5b0}.cover-front{padding:15px;background:#faf0c7;box-shadow:8px 24px 50px -18px #49335755;transform:translateZ(1px)}.cover-border{border:1px solid #bbae85;height:100%;padding:25px 27px 24px;display:flex;flex-direction:column;align-items:center;text-align:center;position:relative}.cover-front h1{font-size:4.4rem;line-height:.9;letter-spacing:-.065em;position:relative;margin:17px 0 26px;width:100%}.cover-front h1 em{font-style:italic;color:#724e8d}.cover-spark{position:absolute;font-family:serif;font-style:normal;font-size:3.6rem;right:1px;top:15px;color:#997bb7}.cover-photo{position:relative;background:#fffdf5;padding:8px 8px 5px;width:100%;transform:rotate(-4deg);box-shadow:0 3px 8px #46382c22}.birthday-photo{display:block;width:100%;height:auto;aspect-ratio:3/2;object-fit:contain}.photo-label{font-family:'Caveat',cursive;font-size:1.1rem;line-height:1.55}.photo-sticker{position:absolute;right:-14px;top:-21px;border:2px solid #fff9df;border-radius:50%;background:#c9bbe5;color:#5b4278;transform:rotate(16deg);width:69px;height:69px;display:grid;place-content:center;font-size:.6875rem;line-height:1.25;font-weight:700;letter-spacing:.04em}.cover-handwriting{font-family:'Caveat',cursive;font-size:1.65rem;transform:rotate(-3deg);margin:25px 0 14px;color:#69507b}.cover-front .primary-button{margin-top:auto;width:auto;min-width:220px;min-height:45px;padding:12px 18px}.cover-back{transform:rotateY(180deg);background:#f6efd9;border-radius:9px 3px 3px 9px;display:flex;flex-direction:column;align-items:center;padding:42px 35px 30px;box-shadow:-8px 18px 40px -20px #46315e55}.cover-back:after{content:'';position:absolute;right:0;top:0;bottom:0;width:25px;background:linear-gradient(-90deg,#51402b20,transparent);pointer-events:none}.inside-photo{margin-top:44px;padding:12px 12px 9px;background:#fffdf5;transform:rotate(-5deg);box-shadow:1px 5px 14px #51412c28}.inside-photo p{font-family:'Caveat',cursive;text-align:center;margin:10px 0 0;font-size:1.55rem}.photo-note{display:flex;align-items:center;gap:18px;margin-top:45px;width:100%;justify-content:center}.photo-note>span{font-size:1.6rem;color:#9d7dae}.photo-note p{font-family:'Caveat',cursive;font-size:1.75rem;line-height:1.15;text-align:center;margin:0;transform:rotate(-3deg)}.inside-signoff{margin-top:auto;text-align:center;font-size:.6875rem;color:#86728c;padding-top:22px}.page-content{flex:1;transform-origin:left center}.page-meta{display:flex;justify-content:space-between;align-items:center;margin:0 0 27px}.page-meta .eyebrow{font-size:.6875rem;letter-spacing:.15em}.page-number{font-size:.6875rem;color:#a194aa;font-variant-numeric:tabular-nums}.page-content h2{font-family:'Fraunces',Georgia,serif;font-weight:500;font-size:2.55rem;line-height:1.05;letter-spacing:-.055em;margin:0 0 23px;color:#5d3f78;outline-offset:7px}.letter-body p{font-size:1rem;line-height:1.65;margin-bottom:15px;letter-spacing:-.017em}.letter-body p:last-child{margin-bottom:0}.page-note{font-family:'Caveat',cursive;font-size:1.45rem;margin:24px 0 7px;color:#93759e;transform:rotate(-2deg)}.page-note span{margin-left:4px}.page-navigation{display:flex;align-items:center;justify-content:space-between;padding-top:16px;border-top:1px solid #ddd1da;margin-top:16px;flex-shrink:0}.page-arrow{border:1px solid #d7c8df;width:39px;height:39px;display:grid;place-items:center;border-radius:50%;background:transparent;color:#715082;font-size:1.25rem;transition:background .15s}.page-arrow:hover:enabled{background:#e9deed}.page-dots{display:flex;align-items:center;justify-content:center;gap:1px}.page-dot{width:30px;height:32px;border:0;background:none;display:grid;place-items:center;padding:0}.page-dot span{width:6px;height:6px;border-radius:100%;background:#d4c5db;transition:width .2s}.page-dot.active span{width:20px;border-radius:8px;background:#8e6bab}.page-dot:hover span{background:#8e6bab}.card-under{display:flex;align-items:center;justify-content:center;gap:22px;margin:20px 0 0;min-height:40px;font-family:'Caveat',cursive;font-size:1.25rem;color:#6f5881}.card-under .quiet-button{font-family:'DM Sans',sans-serif}.party-tools{max-width:850px;margin:24px auto 0}.party-caption{display:flex;align-items:center;justify-content:center;gap:16px;margin-bottom:15px}.party-caption p{font-family:'Caveat',cursive;font-size:1.25rem;margin:0;white-space:nowrap;color:#695376}.party-caption>span{height:1px;background:#a08ab7;max-width:80px;flex:1;opacity:.4}.party-buttons{display:grid;grid-template-columns:repeat(4,1fr);gap:10px}.party-button{border:1px solid #a894c1;background:#ddcff1a6;border-radius:11px;padding:12px 10px;min-height:51px;font-size:.8125rem;display:flex;align-items:center;justify-content:center;gap:8px;transition:transform .18s,background .18s,box-shadow .18s;box-shadow:0 3px 0 #a78fbe44}.party-button:hover{transform:translateY(-3px) rotate(-1deg);background:#eee4fa;box-shadow:0 6px 0 #a78fbe44}.party-button:active{transform:translateY(1px);box-shadow:0 1px 0 #a78fbe44}.party-button>span{font-size:1.15rem;line-height:1}.party-button.tokens-full{background:#f6edb5;border-color:#b8a868}.unlocked main{padding-top:16px}.toast{position:fixed;bottom:25px;left:50%;transform:translateX(-50%);background:#49335f;color:#fff9eb;padding:15px 22px;border-radius:12px;box-shadow:0 8px 30px #39204e44;z-index:30;font-size:.875rem;text-align:center;max-width:calc(100vw - 32px);width:max-content;animation:appear .2s both}.mobile-photo{display:none}.turn-forward{animation:leaveRight .18s both}.turn-backward{animation:leaveLeft .18s both}.page-arrive{animation:arrive .22s both}dialog{background:var(--paper);color:var(--ink);border:1px solid #ded0e3;border-radius:16px;padding:42px 34px 25px;width:min(440px,calc(100vw - 32px));text-align:center;box-shadow:0 25px 90px #3b235577;overflow:visible}dialog::backdrop{background:#31233e77;backdrop-filter:blur(5px)}.dialog-close{position:absolute;right:10px;top:6px;background:transparent;border:0;width:35px;height:35px;font-size:1.6rem;color:#8b7795}dialog h2{font-family:'Fraunces',Georgia,serif;letter-spacing:-.05em;font-size:2.5rem;font-weight:500;line-height:1.06;margin:24px 0 15px;color:#654780}dialog p{font-size:1rem;line-height:1.6;color:#78657f}.candles{display:flex;justify-content:center;gap:4px;margin:25px 0}.candle{border:0;background:none;padding:8px 3px;min-width:48px;height:77px;transition:transform .2s;font-size:2.7rem}.candle:hover:enabled{transform:scale(1.17) rotate(-8deg)}.candle.out{opacity:1;color:#baa777;font-size:2.1rem}.wish-footnote{font-family:'Caveat',cursive;font-size:1.15rem!important;margin:22px 0 0;line-height:1.2!important}.hype-star{display:block;font-size:4.5rem;color:#bba0d7;line-height:1;margin-top:22px}#hype-dialog h2{margin-top:14px}#hype-dialog .primary-button{margin-top:23px}
@keyframes appear{from{opacity:0;translate:0 12px}to{opacity:1;translate:0 0}}@keyframes leaveRight{to{opacity:0;transform:rotateY(-12deg) translateX(-12px)}}@keyframes leaveLeft{to{opacity:0;transform:rotateY(12deg) translateX(12px)}}@keyframes arrive{from{opacity:0;transform:translateX(8px)}to{opacity:1;transform:translateX(0)}}
@media(min-width:701px) and (max-width:1000px){.book{height:700px}.inside-right{padding:29px 27px 23px}.cover-border{padding:29px 16px 24px}.cover-front h1{font-size:4rem}.cover-spark{right:-3px;font-size:2.8rem}.cover-back{padding:36px 25px 30px}.cover-handwriting{font-size:1.4rem}.letter-body p{line-height:1.55}.page-content h2{font-size:2.25rem}.inside-photo{margin-top:75px}.photo-note p{font-size:1.55rem}}
@media(max-width:700px){.unlocked main{display:block;padding:15px 16px 15px;min-height:0}.experience-top{margin-bottom:22px;padding:0 3px;gap:8px}.experience-top .eyebrow{font-size:.5625rem;letter-spacing:.09em;max-width:210px}.quiet-button{font-size:.75rem}.book-stage{padding:0 4px;perspective:1500px;overflow:visible}.book{width:min(100%,470px);height:650px;transform:none!important;margin:auto;transition:height 1.05s}.inside-right,.cover{left:0;width:100%}.cover{transform-origin:8px center}.cover-front{padding:12px}.cover-border{padding:30px 24px 24px}.cover-front h1{font-size:4.4rem;margin-bottom:27px}.cover-spark{right:0;font-size:3.2rem}.cover-handwriting{font-size:1.7rem;margin-top:27px}.book.is-open{height:auto;min-height:650px}.book.is-open .cover{transform:rotateY(-110deg);pointer-events:none;opacity:0;transition:transform 1.05s cubic-bezier(.22,.7,.25,1),opacity .3s .5s}.book:not(.is-open) .cover{opacity:1;transition:transform 1.05s cubic-bezier(.22,.7,.25,1),opacity .1s}.book.is-open .inside-right{position:relative;left:0;min-height:650px;height:auto;overflow:visible}.inside-right{padding:25px 25px 22px;border-radius:4px 8px 8px 4px}.inside-right:before{width:15px}.mobile-photo{display:block;margin:0 0 27px;background:#fffdf7;padding:6px 6px 3px;transform:rotate(-2deg);box-shadow:0 2px 7px #51412c1f}.mobile-photo img{max-height:205px;object-fit:contain;background:#f4e8d8}.mobile-photo span{display:block;text-align:center;font-family:'Caveat',cursive;font-size:1.1rem;line-height:1.6}.page-meta{margin-bottom:22px}.page-content h2{font-size:2.25rem;margin-bottom:22px}.letter-body p{font-size:1rem;line-height:1.7;margin-bottom:18px}.page-note{font-size:1.5rem;margin-top:25px;margin-bottom:20px}.page-navigation{padding-top:13px}.page-arrow{width:44px;height:44px}.page-dot{width:34px;height:40px}.card-under{font-size:1.1rem;gap:10px;margin-top:19px;min-height:39px;flex-wrap:wrap}.party-tools{margin-top:17px}.party-buttons{grid-template-columns:repeat(2,1fr);gap:10px}.party-button{font-size:.8125rem;min-height:54px}.cover-back{display:none}.unlocked .site-footer{padding-top:18px}.toast{bottom:18px;font-size:.8125rem;line-height:1.5}dialog{padding:40px 22px 25px}.candle{min-width:45px}.cover-photo{max-width:350px}.cover-front .primary-button{min-width:215px}}
@media(max-width:370px){.book{height:620px}.cover-front h1{font-size:3.8rem}.cover-border{padding-left:17px;padding-right:17px}.cover-handwriting{font-size:1.5rem}.party-button{font-size:.75rem;gap:5px}.inside-right{padding-left:21px;padding-right:21px}.page-content h2{font-size:2.1rem}}
@media(prefers-reduced-motion:reduce){.book,.cover{transition:none!important}.book.is-open .cover{transition:none!important}.turn-forward,.turn-backward,.page-arrive,.experience,.toast{animation:none!important}.party-button:hover{transform:none}}

/* Legible small type and scrolling at enlarged text sizes. */
.eyebrow,.page-meta .eyebrow,.page-number,.inside-signoff,.photo-sticker,.site-footer,.gate-footer{font-size:.75rem}.header-note,.show-password{font-size:.75rem}.gate-subtitle{font-size:.9375rem}label,.quiet-button,.party-button,.form-error{font-size:.875rem}.inside-right{overflow-y:auto;overflow-x:hidden}.cover-front{overflow-y:auto}.letter-body p{font-size:1.0625rem}.experience-top .eyebrow{line-height:1.6}.gate-footer{line-height:1.5}
@media(max-width:700px){.experience-top .eyebrow{font-size:.75rem;letter-spacing:.06em;max-width:245px}.inside-right{overflow:visible}.site-footer{font-size:.75rem;flex-wrap:wrap}.header-note{font-size:.75rem}.gate-footer{font-size:.75rem}.party-button{font-size:.875rem}.quiet-button{font-size:.875rem}.letter-body p{font-size:1rem}.cover-border>.eyebrow{font-size:.75rem}}
