:root{--night: #0b1631;--paper: #fbf6ea;--paper-2: #f3e8d2;--ink: #2a2230;--ink-soft: #6b5d63;--terracotta: #c96f4a;--sage: #7f9c7c;--butter: #f2cf86;--glow: #ffd58a;--hand: "Caveat", "Comic Sans MS", cursive;--type: "Special Elite", "Courier New", monospace;--fortune: "Shantell Sans", "Trebuchet MS", sans-serif;--serif: "Fraunces", Georgia, serif}*{box-sizing:border-box}html,body{margin:0;height:100%;overflow:hidden;background:var(--night);color:var(--paper);font-family:var(--serif);-webkit-font-smoothing:antialiased;overscroll-behavior:none}#app,#app canvas{position:fixed;top:0;right:0;bottom:0;left:0;width:100%;height:100%;display:block}#app canvas{touch-action:none;cursor:none}body.phone #app canvas{cursor:auto}button{font:inherit;color:inherit}.loader{position:fixed;top:0;right:0;bottom:0;left:0;z-index:50;display:grid;place-content:center;justify-items:center;gap:14px;background:radial-gradient(ellipse at 50% 60%,#1c2b55 0%,var(--night) 70%);transition:opacity .8s ease}.loader.done{opacity:0;pointer-events:none}.loader-sign{font:700 clamp(44px,8vw,84px) var(--serif);color:#ffe2a6;text-shadow:0 0 24px rgba(255,207,115,.55),0 0 2px #ffcf73}.loader-sub{font:500 26px var(--hand);color:#c9cfe6}.loader-bar{width:180px;height:3px;border-radius:3px;background:#ffffff1f;overflow:hidden}.loader-bar i{display:block;height:100%;width:0;background:var(--glow);transition:width .3s ease}.presence{position:fixed;top:0;right:0;bottom:0;left:0;pointer-events:none;z-index:30}.presence.hidden,.presence.away{opacity:0}.presence-dot,.presence-ring{position:absolute;left:0;top:0;border-radius:50%}.presence-dot{width:10px;height:10px;margin:-5px 0 0 -5px;background:#fff3d6;box-shadow:0 0 12px 4px #ffcf78a6,0 0 2px #fff}.presence-ring{width:34px;height:34px;margin:-17px 0 0 -17px;border:1.5px solid rgba(255,226,170,.55);transition:width .25s,height .25s,margin .25s,border-color .25s,background .25s}.presence[data-state=hover] .presence-ring,.presence[data-state=grab] .presence-ring{width:52px;height:52px;margin:-26px 0 0 -26px;border-color:#ffe2aae6}.presence[data-state=grab] .presence-ring{background:#ffd58a1f}.presence[data-state=stroke] .presence-ring{width:64px;height:44px;margin:-22px 0 0 -32px;border-radius:50%;border-color:#ffbe8ce6;background:#ffbe8c1a}.ui-layer{position:fixed;top:0;right:0;bottom:0;left:0;pointer-events:none;z-index:20}.ui-layer>*{pointer-events:auto}.ui-layer>.tag,.ui-layer>.hint{pointer-events:none}.tag{position:fixed;left:0;top:0;font:500 24px/1.1 var(--hand);color:var(--paper);text-shadow:0 1px 8px rgba(5,10,30,.9),0 0 2px rgba(5,10,30,.9);white-space:nowrap;opacity:0;transition:opacity .2s}.tag.show{opacity:1}.tag.hover{background:var(--paper);color:var(--ink);text-shadow:none;font:600 21px/1.1 var(--hand);padding:4px 13px 6px 21px;border-radius:4px 12px 12px 4px;box-shadow:0 4px 12px #00000047}.tag.hover:before{content:"";position:absolute;left:8px;top:50%;width:6px;height:6px;margin-top:-3px;border-radius:50%;background:#2a223040}.tag.speech{background:var(--paper);color:var(--ink);text-shadow:none;padding:6px 14px 8px;border-radius:16px 16px 16px 4px;font-size:25px;translate:-10% -100%;box-shadow:0 6px 18px #00000059;transition:opacity .35s}@media(max-width:480px){.tag.speech{font-size:21px;white-space:normal;max-width:68vw}}.gift-tag{position:fixed;left:0;top:0;width:0;height:0;opacity:0;transition:opacity .5s;pointer-events:none}.gift-tag.show{opacity:1}.gift-tag-swing{position:absolute;left:0;top:0;transform-origin:0 0;animation:gift-sway 3.2s ease-in-out infinite}.gift-tag-string{position:absolute;left:-1px;top:0;width:2px;height:58px;background:#b0623e;border-radius:1px}.gift-tag-card{position:absolute;left:-12px;top:30px;display:flex;flex-direction:column;align-items:flex-start;background:var(--paper);color:var(--ink);padding:6px 14px 7px 26px;border-radius:4px 12px 12px 4px;box-shadow:0 5px 14px #0000004d;transform:rotate(-6deg);transform-origin:12px 28px;white-space:nowrap;pointer-events:auto;cursor:pointer}.gift-tag-card:before{content:"";position:absolute;left:9px;top:50%;width:7px;height:7px;margin-top:-4px;border-radius:50%;background:#2a223047}.gift-tag-card b{font:700 24px/1 var(--hand);color:var(--terracotta)}.gift-tag-card span{font:500 19px/1.05 var(--hand);color:var(--ink-soft)}@keyframes gift-sway{0%,to{transform:rotate(-4deg)}50%{transform:rotate(5deg)}}.hint{position:fixed;left:50%;bottom:30px;transform:translate(-50%,8px);font:600 25px/1.2 var(--hand);color:var(--ink);background:#fbf6eaf0;padding:6px 20px 8px;border-radius:6px;box-shadow:0 6px 20px #0000004d;opacity:0;transition:opacity .5s,transform .5s;text-align:center;width:max-content;max-width:calc(100% - 32px)}.hint b{color:var(--terracotta);font-weight:700}.hint.show{opacity:1;transform:translate(-50%)}.toast{position:fixed;left:50%;top:28px;transform:translate(-50%,-10px);max-width:min(520px,calc(100% - 32px));background:var(--paper);color:var(--ink);font:500 23px/1.25 var(--hand);text-align:center;padding:10px 20px 12px;border-radius:6px;box-shadow:0 10px 30px #00000059;opacity:0;transition:opacity .4s,transform .4s}.toast.show{opacity:1;transform:translate(-50%)}.purr{position:fixed;z-index:21;pointer-events:none;font:600 22px var(--hand);color:#ffd9b0;text-shadow:0 1px 6px rgba(5,10,30,.8);animation:purr 1.8s ease-out forwards}@keyframes purr{0%{opacity:0;transform:translate(-50%) rotate(-6deg)}20%{opacity:1}to{opacity:0;transform:translate(-50%,-60px) rotate(4deg)}}.floors{position:fixed;right:18px;top:50%;transform:translateY(-50%);display:flex;flex-direction:column;gap:11px;z-index:15;padding:10px 7px;border-radius:14px;background:#2a22306b;backdrop-filter:blur(4px);-webkit-backdrop-filter:blur(4px)}.floors button{position:relative;width:14px;height:14px;padding:0;border-radius:50%;border:1.5px solid rgba(255,236,200,.85);background:transparent;cursor:pointer;transition:background .3s,transform .3s}.floors button.on{background:var(--glow);border-color:var(--glow);box-shadow:0 0 10px #ffcf7899}.floors button span{position:absolute;right:28px;top:50%;transform:translateY(-50%);font:600 21px/1.1 var(--hand);white-space:nowrap;color:var(--ink);background:var(--paper);padding:3px 11px 5px;border-radius:10px 4px 4px 10px;box-shadow:0 3px 10px #00000040;opacity:0;transition:opacity .2s;pointer-events:none}.floors button:hover span,.floors button:focus-visible span,.floors button.on span{opacity:1}.floors button.on span{opacity:.75}.floors:hover button.on span{opacity:1}@media(max-width:600px){.floors button.on span{animation:floor-name 3.2s forwards}}@keyframes floor-name{0%,70%{opacity:.75}to{opacity:0}}.fortune{position:fixed;left:50%;top:42%;transform:translate(-50%,-50%);width:min(560px,calc(100% - 32px));display:flex;flex-direction:column;align-items:center;gap:14px;z-index:25}.fortune-header{font:600 30px var(--hand);color:#ffe2a6;text-shadow:0 1px 10px rgba(0,0,0,.6);opacity:0;transition:opacity .6s .2s}.fortune-note{font:500 24px/1.2 var(--hand);color:var(--paper);text-align:center;opacity:0;transition:opacity .6s .4s;text-shadow:0 1px 10px rgba(0,0,0,.7)}.slip{width:100%;background:linear-gradient(180deg,#fffaf0,#f7eedb);color:var(--ink);padding:22px 28px 16px;border-radius:2px;box-shadow:0 1px #fffc inset,0 18px 40px #00000073;clip-path:inset(0 50% 0 50%);transition:clip-path .7s cubic-bezier(.2,.8,.2,1);min-height:92px}.slip-text .ink{display:inline-block;opacity:0;transform:translateY(3px);filter:blur(1.5px);transition:opacity .5s ease,transform .5s ease,filter .5s ease}.slip-text.inked .ink{opacity:1;transform:none;filter:none}@media(prefers-reduced-motion:reduce){.slip-text .ink{transition:opacity .3s;transform:none;filter:none}}.slip-text{margin:0;font:400 clamp(20px,2.4vw,23px)/1.45 var(--fortune);min-height:1.45em;text-align:center}.slip-flavour{margin-top:10px;text-align:right;font:500 18px var(--hand);color:var(--terracotta)}.fortune.show .slip{clip-path:inset(0 0 0 0)}.fortune.show .fortune-header,.fortune.show .fortune-note{opacity:1}.fortune-actions{display:flex;gap:10px;flex-wrap:wrap;justify-content:center;opacity:0;transform:translateY(6px);transition:opacity .5s,transform .5s}.fortune-actions.show{opacity:1;transform:none}.fortune.leave-fade{opacity:0;transition:opacity .4s}.fortune.leave-pocket{transition:transform .6s ease-in,opacity .6s;transform:translate(10%,-40%) scale(.2) rotate(8deg);opacity:0}.fortune.leave-drop{transition:transform .7s ease-in,opacity .7s;transform:translate(-50%,40%) rotate(-10deg);opacity:0}.tag-button{border:none;cursor:pointer;background:var(--paper-2);color:var(--ink);font:600 22px var(--hand);padding:6px 18px 8px 22px;border-radius:4px 14px 14px 4px;position:relative;box-shadow:0 4px 12px #0000004d;transition:transform .15s,background .15s}.tag-button:before{content:"";position:absolute;left:8px;top:50%;width:6px;height:6px;margin-top:-3px;border-radius:50%;background:#2a223040}.tag-button:hover{transform:translateY(-2px) rotate(-1deg)}.tag-button.primary{background:var(--butter)}.tag-button:disabled{opacity:.6;cursor:default;transform:none}body:not(.phone) .tag-button,body:not(.phone) .sheet,body:not(.phone) .floors button{cursor:pointer}.page-copy{display:none}.sheet.about{width:min(620px,100%)}.sheet.about .page-copy{display:block}.page-copy h1{margin:0 0 10px;font:700 30px/1.1 var(--serif);color:var(--ink)}.page-copy h2{margin:22px 0 8px;font:700 21px/1.2 var(--serif);color:var(--ink)}.page-copy h3{margin:14px 0 4px;font:600 23px/1.1 var(--hand);color:var(--terracotta)}.page-copy p,.page-copy li,.page-copy summary{font:400 16px/1.5 var(--fortune);color:var(--ink)}.page-copy p{margin:0 0 8px}.page-copy .pc-intro:first-of-type{font-size:17px}.page-copy ul,.page-copy ol{margin:4px 0 6px;padding-left:22px}.page-copy .pc-flavour ul li{margin:0 0 3px}.page-copy details{border-top:1px solid #e8dcc4;padding:8px 0}.page-copy summary{cursor:pointer;font-weight:500}.page-copy details p{margin:6px 0 0;color:var(--ink-soft)}.page-copy .pc-links{margin-top:18px;padding-top:12px;border-top:1px solid #e8dcc4;font:500 19px/1.5 var(--hand)}.page-copy .pc-links a{color:var(--terracotta);text-decoration:none}.page-copy .pc-links a:hover{text-decoration:underline}.about-tab{position:fixed;left:14px;top:14px;z-index:30;font-size:20px}.phone .about-tab{top:calc(env(safe-area-inset-top) + 14px);width:40px;height:40px;padding:0;border-radius:50%;font-size:0;transform:none;background:#14101e66;border:1px solid rgba(255,226,170,.4);box-shadow:none}.phone .about-tab:before{display:none}.phone .about-tab:after{content:"i";font:700 20px/38px var(--serif);color:#ffe2a6}.sheet-back{position:fixed;top:0;right:0;bottom:0;left:0;z-index:40;display:grid;place-items:center;padding:16px;background:#080a188c;opacity:0;transition:opacity .3s}.sheet-back.show{opacity:1}.sheet{position:relative;width:min(480px,100%);max-height:calc(100% - 32px);overflow:auto;background:var(--paper);color:var(--ink);padding:26px 26px 22px;border-radius:6px;box-shadow:0 30px 70px #00000080;transform:translateY(12px) rotate(-.6deg);transition:transform .35s}.sheet-back.show .sheet{transform:none}.sheet h2{margin:0 0 4px;font:700 26px var(--serif)}.sheet-sub{margin:0 0 16px;font:500 21px/1.2 var(--hand);color:var(--ink-soft)}.sheet-close{position:absolute;right:10px;top:6px;border:none;background:none;font-size:30px;color:var(--ink-soft);cursor:pointer}.sheet label{display:block;margin:0 0 10px;font:600 20px var(--hand);color:var(--ink-soft)}.sheet input:not([type]),.sheet textarea,.sheet input.link{display:block;width:100%;margin-top:2px;font:400 17px var(--fortune);color:var(--ink);background:#fffdf7;border:1px solid #e3d6bc;border-radius:4px;padding:8px 10px}.sheet textarea{resize:none}.sheet input:focus,.sheet textarea:focus{outline:2px solid var(--butter);border-color:transparent}.sheet label.own{display:flex;align-items:center;gap:8px;margin-top:4px}.sheet .own-text{display:none;margin-bottom:12px}.sheet .own-text.show{display:block}.flavours{display:flex;flex-wrap:wrap;gap:6px;margin:4px 0 10px}.chip{border:1px solid #e3d6bc;background:#fffdf7;color:var(--ink);font:600 19px var(--hand);padding:2px 12px 4px;border-radius:20px;cursor:pointer}.chip.on{background:var(--sage);border-color:var(--sage);color:#fff}.sheet .bake{margin-top:8px}.sheet .result p{font:500 21px var(--hand);margin:16px 0 6px}.sheet .result .row{display:flex;gap:8px;margin-top:10px}.kept{list-style:none;margin:0;padding:0;display:grid;gap:10px}.kept-slip{background:linear-gradient(180deg,#fffaf0,#f5ead3);padding:12px 14px;border-radius:2px;box-shadow:0 3px 10px #0000001f}.kept-slip p{margin:0 0 6px;font:400 16px/1.45 var(--fortune)}.kept-slip span{font:500 17px var(--hand);color:var(--terracotta)}.kept-slip .mini{float:right;border:none;background:none;font:600 17px var(--hand);color:var(--sage);cursor:pointer;padding:0}body.phone{background:#1a1424}.phone-bg{position:fixed;top:-20px;right:-20px;bottom:-20px;left:-20px;background:#2a2030 center 30% / cover no-repeat;filter:blur(6px) brightness(.72) saturate(1.1);transform:scale(1.04)}.phone-bg:after{content:"";position:absolute;top:0;right:0;bottom:0;left:0;background:linear-gradient(180deg,#0e142cbf,#0e142c1a 35%,#140c1433 60%,#0e0a14d9)}body.phone[data-mood=day] .phone-bg{filter:blur(6px) brightness(.95) saturate(1.05)}body.phone[data-mood=day] .phone-bg:after{background:linear-gradient(180deg,#3c283299,#3c283214 38%,#3c283200 60%,#281c24b3)}body.phone #app canvas.phone-canvas{position:fixed;top:0;right:0;bottom:0;left:0;z-index:2}.phone-top{position:fixed;left:0;right:0;top:0;z-index:3;padding:calc(env(safe-area-inset-top) + 26px) 24px 0;text-align:center;pointer-events:none;transition:opacity .5s,transform .5s}body.cracked .phone-top{opacity:0;transform:translateY(-12px)}.phone-flavours{position:fixed;z-index:5;left:0;right:0;bottom:calc(env(safe-area-inset-bottom) + 96px);display:flex;gap:8px;padding:4px 14px;overflow-x:auto;scrollbar-width:none;justify-content:safe center}.phone-flavours::-webkit-scrollbar{display:none}.phone-flavours[hidden]{display:none}.phone-flavours .chip{flex:none;border:0;border-radius:999px;padding:6px 14px 8px;font:600 19px/1 var(--hand);color:var(--ink);background:#fbf6eaeb;box-shadow:0 4px 12px #0000004d;transition:background .2s,transform .2s}.phone-flavours .chip.on{background:var(--butter, #f3c766);transform:translateY(-2px)}body.cracked .phone-flavours{bottom:calc(env(safe-area-inset-bottom) + 22px)}.phone-sign{font:700 22px var(--serif);color:#ffe2a6;text-shadow:0 0 14px rgba(255,207,115,.6);letter-spacing:.02em}.phone-title{margin:10px 0 6px;font:700 30px/1.15 var(--serif);color:var(--paper);text-shadow:0 2px 16px rgba(0,0,0,.5)}.phone-note{margin:0 auto;max-width:320px;font:500 23px/1.2 var(--hand);color:#f3e8d2;text-shadow:0 1px 10px rgba(0,0,0,.7)}.phone-to{display:block;font-size:19px;color:var(--butter)}.phone-sound{position:fixed;z-index:4;right:14px;top:calc(env(safe-area-inset-top) + 14px);width:40px;height:40px;border-radius:50%;border:1px solid rgba(255,226,170,.4);background:#14101e66 center / 20px no-repeat;background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='%23ffe2a6' stroke-width='2' stroke-linecap='round'%3E%3Cpath d='M4 9v6h4l5 4V5L8 9z'/%3E%3Cpath d='M17 9l4 6M21 9l-4 6'/%3E%3C/svg%3E")}.phone-sound[data-on="1"]{background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='%23ffe2a6' stroke-width='2' stroke-linecap='round'%3E%3Cpath d='M4 9v6h4l5 4V5L8 9z'/%3E%3Cpath d='M16.5 8.5a5 5 0 0 1 0 7M19 6a8.5 8.5 0 0 1 0 12'/%3E%3C/svg%3E")}body.phone .hint{bottom:calc(env(safe-area-inset-bottom) + 34px);font-size:26px}body.phone .fortune{top:46%}@media(prefers-reduced-motion:reduce){.purr{animation-duration:.01s}.slip{transition:none}}.finger-cue{position:fixed;left:0;top:0;z-index:16;width:0;height:0;padding:0;border:0;background:none;cursor:none;opacity:0;transition:opacity .6s;pointer-events:none}.finger-cue.show{opacity:1}.finger-cue.show .finger-hand,.finger-cue.show .finger-label{pointer-events:auto}.finger-hand{position:absolute;left:-32px;top:-80px;width:64px;height:86px;display:block;transform-origin:50% 100%;filter:drop-shadow(0 6px 10px rgba(0,0,0,.45)) drop-shadow(0 0 14px rgba(255,213,138,.35));animation:finger-tap 1.6s cubic-bezier(.45,0,.3,1) infinite}.finger-hand svg{width:100%;height:100%;display:block;overflow:visible}.finger-ripple{position:absolute;left:-20px;top:-20px;width:40px;height:40px;border-radius:50%;border:2px solid rgba(255,226,170,.9);box-shadow:0 0 12px #ffd58a80;animation:finger-ripple 1.6s ease-out infinite}.finger-label{position:absolute;left:38px;top:-74px;font:600 25px/1.1 var(--hand);color:var(--ink);white-space:nowrap;background:var(--paper);padding:4px 14px 6px;border-radius:12px 12px 12px 4px;box-shadow:0 4px 14px #0000004d;animation:finger-label 1.6s cubic-bezier(.45,0,.3,1) infinite}@keyframes finger-tap{0%,to{transform:translateY(-16px) rotate(-4deg)}42%{transform:translateY(0) rotate(0) scaleY(.95)}52%{transform:translateY(0) rotate(0)}}@keyframes finger-ripple{0%,40%{transform:scale(.2);opacity:0}46%{opacity:1}to{transform:scale(1.7);opacity:0}}@keyframes finger-label{0%,to{transform:translateY(-6px)}45%{transform:translateY(0)}}.finger-cue.flip .finger-label{left:auto;right:38px;top:-22px;border-radius:12px 12px 4px}.finger-cue.point-left.flip .finger-label{left:auto;right:0;top:34px;border-radius:12px 4px 12px 12px}.finger-cue.point-left .finger-hand{animation-name:finger-tap-left;transform:rotate(90deg)}.finger-cue.point-left .finger-label{left:22px;top:-86px;border-radius:12px 12px 12px 4px}@keyframes finger-tap-left{0%,to{transform:rotate(90deg) translateY(-16px) rotate(-4deg)}42%{transform:rotate(90deg) translateY(0) scaleY(.95)}52%{transform:rotate(90deg) translateY(0)}}@media(prefers-reduced-motion:reduce){.finger-hand,.finger-label{animation:none}.finger-ripple{animation-duration:3s}}.sheet.letter{width:min(520px,100%);background:#f6efe0}.letter-page{background:linear-gradient(180deg,#fffdf6,#f8f0de);padding:26px 28px;margin-top:6px;box-shadow:0 2px 10px #0000001f;transform:rotate(-.4deg)}.letter-page p{margin:0;font:400 18px/1.6 var(--type);color:#2f2a30;white-space:pre-line}.letter-nav{display:flex;justify-content:space-between;align-items:center;margin-top:14px;font:500 18px var(--hand);color:var(--ink-soft)}.letter-nav .mini{border:none;background:none;font:600 19px var(--hand);color:var(--sage);cursor:pointer;padding:0}.letter-nav .mini:disabled{opacity:.3;cursor:default}
