@import url('https://fonts.googleapis.com/css2?family=Nunito:wght@400;600;700;800;900;1000&display=swap');
:root{--cream:#fff8e9;--ink:#513c34;--red:#cf4651;--muted:#897366;--line:#e9ddc7;--peach:#f7dac8;--yellow:#f6cb66}*{box-sizing:border-box}body{margin:0;background:var(--cream);color:var(--ink);font-family:Nunito,'Segoe UI',sans-serif;font-size:16px}button,a{-webkit-tap-highlight-color:transparent}button{font:inherit;cursor:pointer;color:inherit}button:focus-visible,a:focus-visible,.arena:focus-visible{outline:3px solid #7a9370;outline-offset:4px}button{transition:transform .16s,background .16s}button:hover{transform:translateY(-2px)}button:active{transform:translateY(1px)}[hidden]{display:none!important}.shell{width:min(100% - 48px,1060px);margin:auto}header{height:91px;border-bottom:1px solid var(--line);display:flex;align-items:center;justify-content:space-between}.wordmark{font-weight:900;font-size:23px;color:var(--ink);text-decoration:none}.wordmark span{color:var(--red);font-size:34px;vertical-align:-3px;margin-right:7px}.edition,.eyebrow{font-size:11px;font-weight:900;letter-spacing:2px}.edition{color:var(--muted)}.game-frame{max-width:540px;margin:auto}.screen{text-align:center;padding:37px 0 18px;animation:arrive .5s ease}.eyebrow{color:var(--muted);margin-bottom:13px}h1,h2{font-size:clamp(34px,5vw,49px);line-height:1.07;letter-spacing:-1.8px;font-weight:1000;margin:0 0 17px}h1 span,h2 span{color:var(--red)}.intro{line-height:1.6;margin:0;color:#7d675c;font-size:15px}.bedroom{height:265px;position:relative;margin:12px 10px 0;overflow:hidden}.sun{position:absolute;width:82px;height:82px;border-radius:50%;background:var(--yellow);top:25px;right:32px;box-shadow:0 0 0 12px #f9e7b1}.sun span{display:block;padding-top:31px;font-size:19px}.cloud{position:absolute;background:#ece9db;width:78px;height:22px;border-radius:20px;top:58px;left:38px}.cloud:before,.cloud:after{content:'';position:absolute;border-radius:50%;background:inherit;width:36px;height:36px;bottom:0;left:12px}.cloud:after{width:26px;height:26px;left:40px}.cloud-two{transform:scale(.6);left:auto;right:8px;top:108px}.sleeper{position:absolute;width:260px;height:150px;bottom:17px;left:50%;transform:translateX(-50%);z-index:1}.pillow{position:absolute;background:#fffcf6;width:135px;height:70px;left:15px;top:4px;border:2px solid #e7d9c6;border-radius:32px;transform:rotate(-7deg)}.husband{position:absolute;left:52px;top:-18px;width:92px;height:95px;border-radius:43%;overflow:hidden;transform:rotate(-13deg);border:4px solid #fffaf0}.husband img{position:absolute;width:235px;max-width:none;left:-55px;top:-4px}.sleep-mask{position:absolute;top:30px;left:0;right:0;height:33px}.sleep-mask svg{display:block;width:100%;height:100%}.blanket{position:absolute;left:0;top:63px;background:repeating-linear-gradient(90deg,#e59d88 0px,#e59d88 33px,#edb29d 33px,#edb29d 36px);border-radius:18px 48px 8px 8px;width:260px;height:71px;border-bottom:8px solid #956a54;box-shadow:0 3px 0 #6a4f42}.blanket span{font-size:37px;color:#fff4df;position:absolute;left:170px;top:8px}.bed-leg{position:absolute;width:11px;height:22px;bottom:-6px;background:#956a54;z-index:-1}.bed-leg.left{left:13px}.bed-leg.right{right:13px}.floor{position:absolute;bottom:0;height:29px;background:#ece8d7;left:0;right:0;border-radius:50%}.zzz{position:absolute;right:48px;top:-22px;font-weight:900;color:#9c8574;letter-spacing:6px;transform:rotate(-10deg);animation:float 3s infinite}.sleep-message{position:absolute;top:35px;left:130px;z-index:2;background:white;border:1px solid var(--line);padding:9px 14px;border-radius:15px 15px 15px 2px;font-size:13px;font-weight:800;transform:rotate(-6deg)}.feedback{min-height:42px;font-size:14px;line-height:1.5;margin:13px 0 8px;color:var(--muted);display:flex;align-items:center;justify-content:center}.wake-actions{display:grid;grid-template-columns:repeat(3,1fr);gap:12px;margin:0 15px}.wake-actions button{border:1px solid #e3d4bc;border-bottom-width:4px;border-radius:17px;background:#fffcf5;padding:12px 4px;font-size:14px;font-weight:800}.wake-actions button span{display:block;font-size:30px;line-height:1.3;margin-bottom:3px}.wake-actions .kiss-button{background:#fae0db;color:var(--red);border-color:#ecc0b7}.chapter{display:flex;align-items:center;justify-content:center;gap:12px;font-size:11px;letter-spacing:1px;color:#baa997;margin:24px 0 0}.chapter span{height:1px;width:25px;background:var(--line)}.chapter b{color:var(--red)}.primary{border:0;border-bottom:4px solid #a63340;border-radius:14px;background:var(--red);color:white;padding:15px 24px;font-weight:900;min-height:55px}.primary span{margin-left:18px;font-size:22px;line-height:12px}.primary:hover{background:#be3b48}#continue{width:calc(100% - 30px);margin:0 15px}.awake .sleep-mask,.awake .zzz{display:none}.awake .husband{transform:rotate(0);transition:transform .4s}.awake .sun{background:#ffcf4c}.shake{animation:shake .4s}footer{display:flex;justify-content:center;gap:5px;align-items:center;font-size:12px;color:#ab9483;border-top:1px solid var(--line);padding:19px;margin-top:8px}footer span{color:#8a7061}.footer-heart{margin-left:auto;font-size:22px}footer:before{content:'';margin-right:auto;width:15px}.photo-stack{position:relative;margin:27px auto 20px;max-width:390px;height:255px}.main-photo{position:absolute;width:300px;background:#fffdf7;padding:10px 10px 13px;margin:0;left:50%;transform:translateX(-45%) rotate(5deg);box-shadow:0 5px 15px #6b44351a}.main-photo img{display:block;width:100%;height:184px;object-fit:cover}.main-photo figcaption{font-size:11px;font-weight:800;padding-top:11px}.little-photo{position:absolute;width:120px;left:0;bottom:9px;z-index:2;background:#fffdf7;padding:6px 6px 9px;transform:rotate(-12deg);box-shadow:0 3px 10px #6b443526}.little-photo img{width:100%;height:85px;object-fit:cover;object-position:55% 30%}.little-photo span{font-size:10px;font-weight:800}.photo-heart{position:absolute;font-size:65px;right:0;bottom:-2px;color:var(--red);transform:rotate(13deg)}.letter{font-size:15px;line-height:1.65}.letter p{margin:0 0 19px}.letter b{font-weight:800}.signature{font-size:21px;font-weight:900}.signature span{color:var(--red)}.text-button{border:0;background:none;text-decoration:underline;text-underline-offset:4px;font-size:12px;color:var(--muted);padding:10px}.final-screen h2{font-size:39px}.final-screen .feedback{margin-bottom:0;font-size:12px}@keyframes arrive{from{opacity:0;transform:translateY(12px)}to{opacity:1;transform:translateY(0)}}@keyframes float{50%{transform:translateY(-8px) rotate(-10deg)}}@keyframes shake{25%{transform:translateX(-4px)}75%{transform:translateX(4px)}}@keyframes pop{50%{scale:1.14}}@keyframes rain{to{transform:translateY(105vh) rotate(250deg);opacity:0}}
@media(min-width:900px){body{background-image:radial-gradient(#d6bea34a .7px,transparent .7px);background-size:16px 16px}.game-frame{background:var(--cream);padding:0 20px}header{height:85px}.screen{padding-top:32px}}@media(max-width:540px){.shell{width:calc(100% - 36px)}header{height:64px}.wordmark{font-size:19px}.wordmark span{font-size:28px}.edition{font-size:8px;letter-spacing:1px}.screen{padding-top:26px}.eyebrow{font-size:9px;letter-spacing:1.6px}h1,h2{font-size:38px}.intro{font-size:13px}.bedroom{height:235px;margin-top:7px;margin-left:0;margin-right:0}.sun{right:20px;width:63px;height:63px;top:27px;box-shadow:0 0 0 9px #f9e7b1}.sun span{padding-top:21px}.sleep-message{top:22px;left:70px;font-size:12px}.cloud{left:10px;top:65px}.wake-actions{margin:0;gap:9px}.feedback{font-size:13px}.final-screen h2{font-size:33px}.photo-stack{height:238px;width:100%}.main-photo{width:265px}.main-photo img{height:170px}.little-photo{width:106px}.photo-heart{right:0;font-size:52px}.letter{font-size:14px}.chapter{margin-top:19px}footer{margin-top:5px}.wake-actions button{padding:9px 3px}.screen{padding-bottom:14px}}@media(prefers-reduced-motion:reduce){*,*:before,*:after{animation:none!important;transition:none!important}.confetti-heart{display:none}}

.puzzle-photo{margin:30px 0 0;background:#fffdf8;padding:10px 10px 0;box-shadow:0 3px 16px #513c3414;border:1px solid #eee3d2;transform:rotate(-1deg);transition:transform .4s}.puzzle-surface{position:relative;aspect-ratio:80/53}.tiles{display:grid;grid-template-columns:repeat(3,1fr);grid-template-rows:repeat(2,1fr);gap:4px;width:100%;height:100%;transition:gap .4s}.tile{position:relative;min-width:0;min-height:0;border:0;border-radius:3px;padding:0;background-image:url('assets/together.png');background-size:300% 200%;background-repeat:no-repeat;touch-action:manipulation}.tile:hover{transform:none;filter:brightness(1.06)}.tile[aria-pressed=true]{outline:4px solid #cf4651;outline-offset:-4px;z-index:1;filter:brightness(1.08)}.tile[aria-pressed=true]:after{content:'↔';position:absolute;bottom:8px;right:8px;background:#fff8e9;color:#513c34;width:28px;height:28px;border-radius:50%;font-size:21px;font-weight:900;line-height:28px}.tile:focus-visible{outline:4px solid #cf4651;outline-offset:-4px;z-index:2}.tile:disabled{cursor:default;opacity:1;filter:none}.photo-preview{position:absolute;inset:0;width:100%;height:100%;object-fit:fill}.puzzle-caption{display:flex;justify-content:space-between;align-items:center;min-height:47px;font-size:12px;font-weight:700;padding:0 6px}.puzzle-caption>span:last-child{font-size:26px;color:#cf4651}.puzzle-tools{display:flex;align-items:center;justify-content:space-between;margin-top:12px;font-size:12px;color:#897366}.puzzle-tools .text-button{font-size:13px;padding-right:0;min-height:44px}.puzzle-photo.solved{transform:rotate(0)}.solved .tiles{gap:0}.solved .tile{border-radius:0}#puzzle-feedback{min-height:46px;margin-top:4px}#finish{min-width:180px}.final-screen #hug-message{min-height:27px}
/* The solved photograph gets a small pop-up cameo; the final photos hug. */
.surprise{display:flex;align-items:center;justify-content:center;gap:16px;margin:22px 0 0;animation:surprise-in .6s cubic-bezier(.2,1.5,.4,1) both}
.pop-damian{position:relative;flex:0 0 70px;height:76px;border-radius:45% 45% 40% 40%;overflow:hidden;border:4px solid #fffdf8;box-shadow:0 4px 0 #dfc7b4;transform:rotate(-9deg)}
.pop-damian img{position:absolute;width:231px;max-width:none;left:-50px;top:-6px}
.surprise p{text-align:left;font-size:16px;font-weight:900;line-height:1.5;margin:0}
.surprise p span{display:block;font-size:13px;font-weight:600;color:var(--muted)}
.photo-stack{isolation:isolate}
.main-photo{z-index:2;animation:photo-arrive .8s cubic-bezier(.2,.9,.3,1) both;transition:transform .7s cubic-bezier(.2,.9,.3,1)}
.little-photo{z-index:3;animation:little-arrive 1s cubic-bezier(.2,.9,.3,1) both;transition:transform .7s cubic-bezier(.2,.9,.3,1)}
.portrait-photo{position:absolute;right:0;top:7px;width:108px;padding:6px 6px 9px;background:#fffdf8;box-shadow:0 3px 12px #6b443523;transform:rotate(15deg) translate(13px,-20px);z-index:1;animation:portrait-arrive 1.1s cubic-bezier(.2,.9,.3,1) both;transition:transform .7s cubic-bezier(.2,.9,.3,1)}
.portrait-photo img{width:100%;height:90px;object-fit:cover;display:block}
.portrait-photo span{font-size:9px;display:block;line-height:1.35;margin-top:5px}
.final-screen .photo-stack{margin-top:42px}
.hugging .main-photo{animation:none;transform:translateX(-45%) rotate(0) scale(1.035)}
.hugging .little-photo{animation:none;transform:translate(27px,-8px) rotate(-3deg)}
.hugging .portrait-photo{animation:none;transform:translate(-25px,8px) rotate(4deg)}
.hugging .photo-heart{animation:heart-beat .6s ease 3}
.hug-burst{position:absolute;inset:0;z-index:5;pointer-events:none;overflow:visible}
.hug-burst span{position:absolute;left:50%;top:48%;font-size:30px;color:var(--red);font-weight:800;opacity:0;animation:hug-heart 1.7s ease-out forwards}
@keyframes surprise-in{from{opacity:0;transform:translateY(25px) scale(.8)}to{opacity:1;transform:translateY(0) scale(1)}}
@keyframes photo-arrive{from{opacity:0;transform:translateX(-45%) translateY(35px) rotate(-4deg) scale(.85)}to{opacity:1;transform:translateX(-45%) rotate(5deg)}}
@keyframes little-arrive{from{opacity:0;transform:translate(50px,20px) rotate(0)}to{opacity:1;transform:rotate(-12deg)}}
@keyframes portrait-arrive{from{opacity:0;transform:translate(-20px,20px) rotate(0)}to{opacity:1;transform:rotate(15deg) translate(13px,-20px)}}
@keyframes heart-beat{50%{scale:1.25}}
@keyframes hug-heart{10%{opacity:1}100%{opacity:0;transform:translate(var(--x),var(--y)) rotate(var(--r)) scale(.6)}}
@media(max-width:540px){.portrait-photo{width:95px;right:10px}.portrait-photo img{height:76px}.surprise{gap:12px}.surprise p{font-size:15px}}
@media(prefers-reduced-motion:reduce){.surprise,.main-photo,.little-photo,.portrait-photo,.hugging .photo-heart{animation:none!important;transition:none!important}.hug-burst{display:none}}

.welcome-envelope{position:relative;width:106px;height:74px;margin:40px auto 0;background:#f4dfc8;border:2px solid #dfbea0;border-radius:6px;transform:rotate(-7deg);overflow:hidden}.welcome-envelope:before{content:'';position:absolute;left:13px;top:-38px;width:74px;height:74px;background:#fff0d9;border:2px solid #dfbea0;transform:rotate(45deg)}.welcome-envelope span{position:absolute;inset:17px 0 0;text-align:center;color:var(--red);font-size:35px;font-weight:900}.runaway-area{position:relative;height:270px;width:100%;margin-top:12px}#runaway{position:absolute;width:min(245px,calc(100% - 16px));padding:15px 8px;min-height:58px;touch-action:manipulation;transition:left .23s ease-out,top .23s ease-out,background .16s;white-space:nowrap;font-size:14px}#runaway:hover,#runaway:active{transform:none}#welcome .feedback{margin:0 0 22px;min-height:43px}@media(prefers-reduced-motion:reduce){#runaway{transition:none}}

/* Poke scene: a tap, a startled husband, then a tactical retreat. */
.poke-hand{position:absolute;width:160px;height:80px;left:calc(50% + 15px);top:91px;z-index:4;pointer-events:none;opacity:0;transform:translateX(190px) rotate(-8deg)}.poke-hand svg{width:100%;height:100%;display:block}.poke-impact{position:absolute;top:117px;left:calc(50% + 4px);width:35px;height:35px;z-index:5;opacity:0;pointer-events:none}.poke-impact i{position:absolute;width:14px;height:3px;background:#cf4651;border-radius:3px;transform-origin:right center;left:0;top:16px}.poke-impact i:nth-child(1){transform:rotate(45deg);top:3px}.poke-impact i:nth-child(3){transform:rotate(-45deg);top:29px}.poking .poke-hand{animation:poke-finger 1.25s ease-in-out both}.poking .poke-impact{animation:poke-spark .75s ease-out both}.poking .husband{animation:husband-startle 1.4s cubic-bezier(.2,.8,.3,1) both}.poking .sleep-mask{animation:mask-up 1.4s ease both}.poking .zzz{opacity:0}.poking .sleep-message{transform:translate(12px,-8px) rotate(3deg);transition:transform .2s}.ducking .husband{animation:none;transform:translate(3px,35px) rotate(-24deg);transition:transform .3s}.ducking .blanket{transform:scaleY(2);transform-origin:center bottom;transition:transform .35s cubic-bezier(.2,.9,.3,1)}.ducking .sleep-mask{animation:none}.ducking .zzz{opacity:1;z-index:3}.blanket{transition:transform .4s}.husband{transition:transform .35s}
@keyframes poke-finger{0%{opacity:0;transform:translateX(190px) rotate(-8deg)}20%{opacity:1}36%{opacity:1;transform:translateX(0) rotate(-8deg)}46%{opacity:1;transform:translateX(-17px) rotate(-8deg)}60%{opacity:1;transform:translateX(12px) rotate(-8deg)}100%{opacity:0;transform:translateX(190px) rotate(-8deg)}}
@keyframes poke-spark{0%,55%{opacity:0;scale:.6}65%{opacity:1;scale:1.1}100%{opacity:0;scale:1.5}}
@keyframes husband-startle{0%,32%{transform:rotate(-13deg)}48%{transform:translateY(-29px) rotate(8deg)}64%{transform:translateY(-18px) rotate(-4deg)}100%{transform:translateY(-18px) rotate(0)}}
@keyframes mask-up{0%,32%{transform:translateY(0)}48%,100%{transform:translateY(-19px) rotate(8deg)}}
@media(max-width:540px){.poke-hand{top:69px}.poke-impact{top:95px}}
@media(prefers-reduced-motion:reduce){.poking .poke-hand,.poking .poke-impact{display:none}.poking .husband,.poking .sleep-mask{animation:none!important}.ducking .husband,.ducking .blanket,.poking .sleep-message{transition:none}}

/* A kiss lands on the cheek, lifts the mask and wakes the sleepy husband. */
.kiss-flight,.kiss-ring,.kiss-sparks{position:absolute;pointer-events:none;z-index:5;opacity:0}.kiss-flight{left:87px;top:17px;font-size:32px;color:var(--red);line-height:1}.kiss-ring{left:77px;top:10px;width:39px;height:39px;border:3px solid #d8797d;border-radius:50%}.kiss-sparks{left:94px;top:22px}.kiss-sparks i{position:absolute;font-style:normal;color:var(--red);font-size:26px;font-weight:900;--dx:-55px;--dy:-36px}.kiss-sparks i:nth-child(2){--dx:18px;--dy:-60px}.kiss-sparks i:nth-child(3){--dx:74px;--dy:-27px}.kiss-sparks i:nth-child(4){--dx:60px;--dy:32px}.kiss-sparks i:nth-child(5){--dx:-50px;--dy:28px}.kissing .kiss-flight{animation:kiss-delivery 1.1s ease-in-out both}.kissing .kiss-ring{animation:kiss-ripple 1s .65s ease-out both}.kissing .kiss-sparks{opacity:1}.kissing .kiss-sparks i{opacity:0;animation:kiss-scatter 1.25s .7s ease-out both}.kissing .husband{animation:kiss-wake 2.1s ease-in-out both}.kissing .sleep-mask{animation:kiss-mask 1.2s .6s ease-in both}.kissing .blanket{animation:kiss-duvet 1.4s .6s ease both}.kissing .zzz{opacity:0}.kissing .sun{box-shadow:0 0 0 16px #f9e7b1;transition:box-shadow 1s}.wake-actions button:disabled{cursor:default}
@keyframes kiss-delivery{0%{opacity:0;transform:translate(118px,48px) rotate(25deg) scale(.5)}15%{opacity:1}65%{opacity:1;transform:translate(0,0) rotate(-12deg) scale(1)}80%{opacity:1;transform:scale(1.3)}100%{opacity:0;transform:scale(.7)}}
@keyframes kiss-ripple{0%{opacity:.8;transform:scale(.3)}100%{opacity:0;transform:scale(3.2)}}
@keyframes kiss-scatter{0%{opacity:0;transform:scale(.4)}15%{opacity:1}100%{opacity:0;transform:translate(var(--dx),var(--dy)) rotate(15deg) scale(.75)}}
@keyframes kiss-wake{0%,28%{transform:rotate(-13deg)}50%{transform:translateY(-21px) rotate(7deg)}68%{transform:translateY(-13px) rotate(-4deg)}85%{transform:translateY(-7px) rotate(2deg)}100%{transform:translateY(0) rotate(0)}}
@keyframes kiss-mask{0%{opacity:1;transform:translateY(0)}60%{opacity:1;transform:translate(4px,-32px) rotate(15deg)}100%{opacity:0;transform:translate(19px,-63px) rotate(38deg)}}
@keyframes kiss-duvet{0%,100%{transform:translateY(0)}40%{transform:translateY(5px)}65%{transform:translateY(2px)}}
@media(prefers-reduced-motion:reduce){.kiss-flight,.kiss-ring,.kiss-sparks{display:none}.kissing .husband,.kissing .sleep-mask,.kissing .blanket{animation:none!important}.kissing .sun{transition:none}}
