/* The cat owns the windows. */
.cat-party{background:#101c25;color:#f7f0dc}.cat-windows{position:absolute;inset:0}.cat-window{position:absolute;border:5px solid #cbd4cd;background:#132534;box-shadow:0 15px 32px #0005;rotate:var(--window-tilt,0deg)}.cat-window-bar{height:13px;background:#cbd4cd;border-bottom:1px solid #83958d}.cat-pane{position:absolute;inset:14px 0 0;overflow:hidden;background:linear-gradient(155deg,#152f3a,#0b1821)}.cat-window-0{left:6%;top:18%;width:22%;height:26%;--window-tilt:-3deg}.cat-window-1{left:40%;top:13%;width:20%;height:27%;--window-tilt:2deg}.cat-window-2{right:6%;top:30%;width:23%;height:30%;--window-tilt:-2deg}.cat-window-3{left:22%;top:53%;width:24%;height:29%;--window-tilt:2deg}.cat-window-4{left:54%;top:62%;width:20%;height:23%;--window-tilt:-3deg}.cat-target{position:absolute;left:50%;bottom:-25px;translate:-50% 0;width:min(220px,100%);aspect-ratio:1;border:0;background:transparent;padding:0;z-index:4;cursor:pointer}.cat-sprite{display:block;width:100%;height:100%;background-image:url('./assets/cat-atlas.png');background-size:200% 200%;background-repeat:no-repeat;transform-origin:center 80%}.cat-target:focus-visible{outline:2px solid #e5fa38;outline-offset:-5px}.cat-pop .cat-sprite{animation:cat-arrive .32s cubic-bezier(.16,1,.3,1)}.cat-here{border-color:#f7f0dc}.cat-caught .cat-here{border-color:#e5fa38}.cat-caught .cat-sprite{animation:cat-happy .7s cubic-bezier(.16,1,.3,1)}.cat-confetti{z-index:8;pointer-events:none}.cat-reply{position:absolute;left:50%;bottom:14%;translate:-50% 0;z-index:10;margin:0;font:500 italic clamp(30px,4vw,52px)/1 var(--serif);white-space:nowrap;pointer-events:none}.cat-call{position:absolute;left:50%;bottom:45px;translate:-50% 0;min-height:44px;padding:10px 16px;background:#101c25;border:0;border-bottom:1px solid currentColor;font-size:11px;color:#f7f0dc;z-index:12}.cat-call:hover{color:#e5fa38}@keyframes cat-arrive{from{transform:translateY(30px) rotate(-7deg)}to{transform:translateY(0) rotate(0)}}@keyframes cat-happy{0%{transform:scale(1)}35%{transform:translateY(-25px) rotate(-8deg) scale(1.08)}65%{transform:translateY(-10px) rotate(8deg)}100%{transform:translateY(0) rotate(0)}}
/* A pull reveals words, not an unrelated reset button. */
.zip-sentence{position:absolute;left:7%;top:24%;width:31%;z-index:4;color:#222326;font:500 clamp(38px,4.5vw,64px)/1.12 var(--serif);letter-spacing:-.025em;pointer-events:none}.zip-word{display:inline;margin-right:.22em;animation:word-unfold .35s cubic-bezier(.16,1,.3,1)}.zip-word:not(:last-child){opacity:.65}.zip-words .zip-handle{left:70%}.zip-words .zip-handle[data-ready=false]{cursor:wait}.sentence-complete .zip-word{opacity:1}@keyframes word-unfold{from{filter:blur(3px)}to{filter:blur(0)}}
/* A playable beam: no score strip, just movement and consequence. */
.beam-game canvas{cursor:crosshair}.beam-controls{position:absolute;bottom:42px;left:50%;translate:-50% 0;display:flex;gap:30px;z-index:8}.beam-controls button{width:64px;height:50px;background:transparent;border:1px solid #e5ffb066;display:grid;place-items:center;touch-action:none}.beam-controls svg{width:27px;height:27px;stroke:currentColor;stroke-width:1.5}.beam-controls button:active{background:#e5ffb019}.beam-result{position:absolute;top:43%;left:50%;translate:-50% 0;width:90%;margin:0;text-align:center;font:500 italic clamp(36px,5vw,75px)/1.05 var(--serif);pointer-events:none}.beam-game .beam-start{bottom:45px}
/* Stay out of the sun's face. The hit area is intentionally invisible. */
.sun-faces .sun-grabber{left:50%;background:transparent;border:0;border-radius:50%;padding:0;cursor:grab;opacity:1;color:#f3dac5;z-index:5;display:block}.sun-faces .sun-grabber:active{cursor:grabbing;translate:-50% -50%}.sun-faces .sun-grabber:focus-visible{outline:1px dashed #f3dac5;outline-offset:5px}.sun-cue,.sun-reset{position:absolute;left:50%;bottom:45px;translate:-50% 0;min-height:44px;display:grid;place-items:center;font:11px var(--mono);z-index:7}.sun-cue{pointer-events:none}.sun-reset{background:transparent;border:0;border-bottom:1px solid currentColor;padding:10px 16px}.sun-dragging .sun-cue,.sun-faces.awake .sun-cue{display:none}.sun-dragging .sun-reset{display:none}
/* Stillness is measured in the biggest thing on the page. */
.nothing.still-timer h1{position:absolute;left:50%;top:18%;translate:-50% 0;font:500 clamp(30px,4.5vw,58px)/1 var(--serif);white-space:nowrap;margin:0}.still-clock{position:absolute;left:50%;top:50%;translate:-50% -50%;width:94%;display:flex;align-items:center;flex-direction:column;color:#28271f}.still-number{font:500 clamp(90px,20vw,320px)/1 var(--mono);letter-spacing:-.04em;font-variant-numeric:tabular-nums;white-space:nowrap}.still-unit{font:11px var(--mono);margin-top:22px}.still-answer{position:absolute;left:50%;bottom:17%;translate:-50% 0;margin:0;width:92%;text-align:center;font:500 italic clamp(26px,3vw,42px)/1.1 var(--serif)}
/* Thought windows have incompatible dimensions, like thoughts do. */
.thought-body{min-height:var(--thought-height,100px);font-size:var(--thought-size,12px)}.thought-bar .window-x{width:28px;height:28px;display:grid;place-items:center}.thought-bar{padding:5px 7px}
@media(max-width:700px){.cat-window{border-width:4px}.cat-window-0{left:6%;top:16%;width:45%;height:22%}.cat-window-1{left:auto;right:6%;top:36%;width:47%;height:23%}.cat-window-2{left:7%;right:auto;top:57%;width:48%;height:21%}.cat-window-3{left:auto;right:5%;top:68%;width:43%;height:18%}.cat-target{width:min(180px,110%);bottom:-21px}.cat-reply{font-size:30px;bottom:11%;background:#101c25;padding:6px 10px}.cat-call{bottom:32px}.zip-sentence{left:7%;top:16%;width:86%;font-size:clamp(28px,7.8vw,38px);line-height:1.12}.zip-words .zip-handle{left:50%}.beam-controls{bottom:35px;gap:34px}.beam-controls button{height:54px;width:68px}.beam-result{font-size:38px}.sun-cue,.sun-reset{bottom:35px}.nothing.still-timer h1{top:24%;font-size:34px}.still-number{font-size:21vw}.still-unit{margin-top:15px}.still-answer{bottom:25%;font-size:28px}.thought-bar .window-x{width:34px;height:34px}}
@media(prefers-reduced-motion:reduce){.cat-pop .cat-sprite,.cat-caught .cat-sprite,.zip-word{animation:none}}

.cat-sprite[data-pose="3"]{clip-path:inset(0 0 0 9%)}

/* Caught cats break out of the window, rather than losing their face to its crop. */
.cat-caught .cat-here{z-index:6}.cat-caught .cat-here .cat-pane{overflow:visible}
