@font-face{font-family:BirthdayBrush;src:url('./vendor/birthday-title.ttf') format('truetype');font-display:swap}
html,body{height:100%;overflow:hidden}body{background:#f5d8df}.sr-only{position:absolute;width:1px;height:1px;padding:0;overflow:hidden;clip:rect(0,0,0,0)}
.ambient{background:radial-gradient(ellipse at 5% 95%,#fff1b5 0,transparent 55%),radial-gradient(ellipse at 90% 10%,#ffe9bc 0,transparent 48%),radial-gradient(ellipse at 80% 75%,#eda7c5 0,transparent 65%),linear-gradient(135deg,#efc1d7,#f5dce9 40%,#f3c3d4)}.ambient:after{opacity:.08}.masthead{position:fixed;height:auto;inset:auto 20px 17px auto;padding:0;z-index:30}.masthead .brand{display:none}.tools{gap:6px}.icon-button{width:34px;height:34px;padding:0;border-color:#a86c8124;background:#fffa;box-shadow:0 3px 15px #6d485b0a}.icon-button span{display:none}.icon-button svg{width:14px;height:14px}.page-footer{position:fixed;bottom:13px;left:20px;z-index:30;padding:0;border:0;min-height:0}.page-footer>span,.chapters{display:none}.footer-share{font-size:10px;color:#92516c;background:#fff5;padding:9px 12px;border-radius:30px}main,.scene{height:100svh;min-height:0;width:100%;margin:0}.scene{display:block;animation:none;overflow:hidden}.heart-stage{position:absolute;left:50%;top:47%;transform:translate(-50%,-50%);width:min(86svh,80vw);height:min(84svh,84vw);margin:0;perspective:1200px}.heart-halo{display:none}.calligraphy{position:absolute;left:50%;top:44%;transform:translate(-50%,-50%) rotate(-5deg);white-space:nowrap;text-align:center;pointer-events:none;width:100%;z-index:0;transition:opacity 1s}.calligraphy>span{font-family:BirthdayBrush,"STXingkai","KaiTi",cursive;font-size:clamp(90px,20vw,245px);color:#c83771;letter-spacing:.04em;line-height:1.15;text-shadow:0 1px 20px #fff2}.calligraphy i{display:block;font-family:"Segoe Script","Brush Script MT",cursive;color:#c84e79;font-size:clamp(22px,5.3vw,66px);font-weight:300;margin-top:-.6em;opacity:.62;letter-spacing:1px}.opening{position:absolute;z-index:120;left:50%;top:49%;transform:translate(-50%,-50%);text-align:center}.opening>button:first-child{display:flex;align-items:center;flex-direction:column;gap:14px;padding:26px 34px;border:1px solid #fff8;border-radius:18px;background:#fff5;box-shadow:0 14px 80px #b3466b20,inset 0 1px #fff9;backdrop-filter:blur(14px);min-width:260px;color:#8f3155;transition:transform .3s,background .3s}.opening>button:first-child:hover{transform:translateY(-4px);background:#fff9}.opening-note{font-family:Georgia;font-size:36px}.opening strong{font-weight:500;font-size:17px;letter-spacing:2px}.opening small{font-size:10px;letter-spacing:1px;white-space:nowrap}.opening #begin-silent{font-size:10px;letter-spacing:1px;margin-top:15px;padding:10px;color:#9d5773}.opened .opening{display:none}.notes{visibility:hidden}.opened .notes{visibility:visible}.wish-note{width:clamp(110px,19svh,166px);height:clamp(69px,12svh,104px);padding:0;border:1px solid #fffc;border-radius:7px;background:linear-gradient(135deg,#ffffff20,transparent),var(--note);box-shadow:0 2px 2px #fff6 inset,0 3px 5px #7151681c,0 9px 15px #77526024;opacity:0;transform:translate(calc(-50% + var(--dx,0px)),calc(-50% + var(--dy,0px))) rotate(var(--rotation));animation:none;transition:box-shadow .2s,filter .2s;text-align:center;touch-action:none;z-index:var(--z);overflow:hidden}.opened .wish-note{animation:window-arrive .5s cubic-bezier(.16,.9,.26,1) both;animation-delay:var(--delay)}.wish-note.front{z-index:150!important}.wish-note:hover{z-index:120!important;box-shadow:0 4px 7px #71516830,0 15px 26px #77526026}.wish-note.closed{display:none}.note-bar{height:22%;min-height:18px;background:#ffffff36;display:flex;align-items:center;border-bottom:1px solid #ffffff8c;color:#786c74;font-size:11px;padding:0 6px;cursor:grab}.note-bar span{font-size:11px!important;letter-spacing:0!important}.note-close{width:21px;height:21px;font-size:15px;line-height:18px;padding:0;margin-left:auto;color:#847480}.note-close:hover{background:#ffffff8c;border-radius:3px}.note-label{width:100%;height:78%;border:0;background:none;padding:7px 10px;color:#675b62;font-size:clamp(9px,1.45svh,12px);line-height:1.6;letter-spacing:.2px;display:flex;align-items:center;justify-content:center;cursor:pointer}.heart-center.gift-card{position:absolute;top:53%;left:50%;transform:translate(-50%,-50%);width:clamp(230px,34svh,330px);min-height:154px;padding:22px 26px;z-index:180;background:#fff8f1d9;backdrop-filter:blur(12px);border:1px solid #fff9;border-radius:15px;box-shadow:0 16px 60px #84385927,0 1px 0 #fff inset;pointer-events:auto;opacity:0;visibility:hidden;animation:none;transition:background .3s}.opened .gift-card{visibility:visible;animation:gift-in .8s 5.65s both}.gift-card>span:first-child{display:block;font-family:Georgia,serif;font-size:8px;letter-spacing:3px;color:#bb859b;margin-bottom:12px}.gift-card strong{font-size:25px;letter-spacing:3px;font-family:var(--sans);color:#a8305f;font-weight:600;display:block}.gift-card b{color:#d24c73;font-size:22px}.gift-card em{font-size:12px;letter-spacing:2px;font-style:normal;display:block;margin-top:9px;color:#97516b}.gift-card small{font-size:10px;letter-spacing:.3px;display:block;margin-top:12px;color:#94717a;line-height:1.6}.gift-open{display:block;font-size:9px;letter-spacing:1px;color:#a67589;margin-top:15px}.gift-card:hover{background:#fff8f1f0}.scene-bottom{position:absolute;bottom:8%;left:0;right:0;margin:0;padding:0;text-align:center;opacity:0;visibility:hidden;z-index:190}.opened .scene-bottom{visibility:visible;animation:controls-in .6s 5.3s both}.scene-bottom .primary-button{min-height:35px;padding:8px 19px;font-size:10px;background:#fff9;color:#8d4562;box-shadow:0 5px 25px #9452691a;letter-spacing:1px;gap:8px}.scene-bottom .primary-button span{font-size:13px}.scene-bottom .text-link{display:block;margin:6px auto 0;padding:5px;font-size:9px;color:#9e647c}.scene-bottom .hint{margin-top:4px;font-size:9px;color:#a7768b;letter-spacing:.5px}.heart-scene.leaving{transition:transform .55s,filter .55s,opacity .55s;transform:scale(.88);filter:brightness(.3) saturate(1.5);opacity:.1}.heart-scene.leaving .gift-card{filter:brightness(2)}
body.night{background:#070610}.night .masthead{bottom:14px;right:18px}.night .icon-button{background:#1c172c99;color:#e3d3ee;border-color:#bcb0d52a}.night .page-footer{bottom:12px}.night .footer-share{background:#201a3090;color:#bda8d1}.cake-scene{height:100svh;min-height:0;isolation:isolate;animation:scene-in .7s both}.cake-scene:before{background:radial-gradient(ellipse at 50% 42%,#30184d48,transparent 60%)}#cake-canvas{z-index:0;position:absolute;inset:0;touch-action:none;width:100%;height:100%}.cake-topbar{position:absolute;left:24px;right:24px;top:20px;display:flex;justify-content:space-between;z-index:15}.cake-topbar button{font-size:11px;letter-spacing:.5px;color:#eedcff;border:1px solid #b69fd330;border-radius:24px;background:#2b1d4666;backdrop-filter:blur(12px);padding:10px 15px}.cake-topbar button:hover{background:#54377388}.cake-scene .scene-intro{position:absolute;left:0;right:0;top:65px;padding:0;z-index:4;opacity:.75}.cake-scene .scene-intro .eyebrow{font-size:8px;letter-spacing:4px;margin-bottom:11px}.cake-scene h2{font-family:var(--serif);font-size:23px;letter-spacing:3px}.cake-scene .dedication{font-size:9px;letter-spacing:1px;margin-top:11px}.random-cake{position:absolute;right:24px;top:78px;border:1px solid #ffffff2a;background:#37264c77;backdrop-filter:blur(12px);color:#eadff2;border-radius:25px;padding:10px 15px;font-size:10px;z-index:12}.cake-bottom{display:none;position:absolute;bottom:80px;left:50%;transform:translateX(-50%);padding:0;margin:0;z-index:12;white-space:nowrap}.editor-finished .cake-bottom{display:block}.cake-bottom .primary-button{min-height:42px;font-size:11px;background:#b68edf!important;color:#22142f!important;box-shadow:0 0 40px #b084dd24;padding:11px 24px;gap:14px}.cake-bottom .hint{font-size:9px;margin-top:12px}.mic-wish{display:block;margin:10px auto 0;font-size:10px;color:#b49ec7;letter-spacing:.5px;padding:5px}.wish-dialog{width:min(590px,90vw);text-align:center;padding:42px 50px;background:linear-gradient(135deg,#fff0f331,#eee9ff28);backdrop-filter:blur(28px);color:#fff0f8;border-color:#ffe8ff50;box-shadow:0 30px 160px #08021966}.wish-dialog::backdrop{background:#06021555;backdrop-filter:blur(3px)}.wish-star{font-size:42px;color:#f4cbdd}.wish-dialog>p{font-family:Georgia;font-size:10px;letter-spacing:4px;color:#e1b5d8}.wish-dialog h2{font-size:29px;color:#ffe9f2;line-height:1.6;margin-top:22px;letter-spacing:3px}.wish-dialog #typed-wish{font-family:var(--serif);font-size:18px;line-height:2;min-height:90px;margin:20px 0;white-space:pre-wrap;overflow-wrap:anywhere}.wish-dialog>small{display:block;font-size:10px;color:#c6b7cf;letter-spacing:1px}.wish-dialog .text-link{display:block;color:#e4c6e9;margin:20px auto 0}.wish-dialog .close-button{color:#e2c2e0}.scene-swirl{position:fixed;inset:0;background:#0b0714;z-index:1000;pointer-events:none;animation:swirl .8s both}
.paused .opened .wish-note,.paused.opened .wish-note{animation:none;opacity:1}.paused.opened .gift-card,.paused.opened .scene-bottom{animation:none;opacity:1;visibility:visible}
@keyframes window-arrive{from{opacity:0;transform:translate(calc(-50% + var(--dx,0px)),calc(-50% + var(--dy,0px) - 30px)) rotate(calc(var(--rotation) - 5deg)) scale(.83)}to{opacity:1;transform:translate(calc(-50% + var(--dx,0px)),calc(-50% + var(--dy,0px))) rotate(var(--rotation)) scale(1)}}@keyframes gift-in{from{opacity:0;transform:translate(-50%,-45%) scale(.83)}to{opacity:1;transform:translate(-50%,-50%) scale(1)}}@keyframes controls-in{from{opacity:0;transform:translateY(10px)}to{opacity:1;transform:translateY(0)}}@keyframes swirl{0%{opacity:0}45%{opacity:1}100%{opacity:0}}
@media(max-width:700px){.masthead{right:12px;bottom:12px}.tools{gap:4px}.icon-button{width:32px;height:32px}.page-footer{left:12px;bottom:12px}.footer-share{font-size:9px;padding:9px}.calligraphy{top:42%}.calligraphy>span{font-size:24vw}.calligraphy i{font-size:7vw;margin-top:-.15em}.heart-stage{top:43%;width:96vw;height:min(68svh,116vw)}.wish-note{width:26vw;min-width:86px;height:17vw;min-height:57px}.note-label{font-size:8px;padding:4px 6px;line-height:1.5}.note-bar{font-size:9px;min-height:16px}.note-close{font-size:14px;height:19px;width:22px}.heart-center.gift-card{width:58vw;min-width:208px;min-height:146px;padding:18px 15px;top:55%}.gift-card strong{font-size:22px;letter-spacing:2px}.gift-card em{font-size:10px}.gift-card small{font-size:8px}.gift-card>span:first-child{margin-bottom:10px;font-size:7px}.gift-open{font-size:8px;margin-top:12px}.scene-bottom{bottom:14%;}.scene-bottom .hint{font-size:8px}.opening>button:first-child{min-width:235px;padding:23px 22px}.opening{top:44%}.cake-topbar{left:12px;right:12px;top:15px}.cake-topbar button{font-size:9px;padding:9px 11px}.random-cake{right:12px;top:59px;font-size:9px;padding:8px 11px}.cake-scene .scene-intro{top:78px;opacity:.7;pointer-events:none}.cake-scene .scene-intro .eyebrow{display:none}.cake-scene h2{font-size:20px;letter-spacing:2px}.cake-scene .dedication{font-size:8px;margin-top:9px}.cake-bottom{bottom:88px}.cake-bottom .primary-button{font-size:10px;min-height:39px;padding:9px 18px}.cake-bottom .hint{max-width:80vw;white-space:normal;font-size:9px;line-height:1.6}.wish-dialog{padding:35px 24px}.wish-dialog h2{font-size:23px}.wish-dialog #typed-wish{font-size:16px}.night .masthead{right:12px;bottom:12px}}
@media(prefers-reduced-motion:reduce){.opened .wish-note{opacity:1}.opened .gift-card,.opened .scene-bottom{opacity:1;visibility:visible}.heart-scene.leaving{transition:none}.cake-scene{animation:none}}

@media(min-width:701px){.heart-stage{top:43%}}
.cake-scene .scene-intro{display:none}


body.night:not(.editor-finished) .masthead,body.night:not(.editor-finished) .page-footer{display:none}

