:root{--hud-size:84px;--pink:#ff8fd4;--purple:#8f7bff;--blue:#5cc8ff;--yellow:#ffe45c;--green:#7ee081;--panel:#ffffffeb}*{box-sizing:border-box;-webkit-tap-highlight-color:transparent}html,body{touch-action:none;overscroll-behavior:none;-webkit-user-select:none;user-select:none;background:#cfeeff;height:100%;margin:0;font-family:Nunito,Segoe UI,system-ui,sans-serif;overflow:hidden}#app{position:fixed;inset:0}#scene{width:100%;height:100%;display:block;position:absolute;inset:0}#scene .tap-target{cursor:pointer}#fx,#fx *{pointer-events:none}.sky-night,.night-things,.meadow-night{opacity:0;transition:opacity 1.6s}.sky-day,.sun,.sky-rainbow,.meadow-day{opacity:1;transition:opacity 1.6s}.sky-rainbow{opacity:.35}#sky.is-night .sky-night,#sky.is-night .night-things{opacity:1}#sky.is-night .sky-day,#sky.is-night .sun,#sky.is-night .sky-rainbow{opacity:0}body.is-night #ground .meadow-night{opacity:.55}#sky.no-anim *{transition:none!important}.moon-anim{animation:8s ease-in-out infinite moonBob}@keyframes moonBob{0%,to{transform:translateY(0)}50%{transform:translateY(-8px)}}.sun-anim{animation:6s ease-in-out infinite sunPulse}@keyframes sunPulse{0%,to{transform:scale(1)}50%{transform:scale(1.04)}}.cloud{animation:cloudDrift var(--cloud-dur,120s) linear infinite;animation-delay:var(--cloud-delay,0s)}@keyframes cloudDrift{0%{translate:-300px}to{translate:1900px}}.parallax-far{animation:40s ease-in-out infinite alternate driftFar}.parallax-mid{animation:30s ease-in-out infinite alternate driftMid}@keyframes driftFar{0%{translate:-10px}to{translate:10px}}@keyframes driftMid{0%{translate:14px}to{translate:-14px}}.window .window-lit,.window .window-glow{transition:opacity .5s}.window.lit .window-lit{opacity:1}.window.lit .window-glow{opacity:.9;animation:2.4s ease-in-out infinite windowFlicker}@keyframes windowFlicker{0%,to{opacity:.85}50%{opacity:.6}}.window.lit .window-dark{opacity:0}.flower .sway{transform-box:fill-box;transform-origin:50% 100%;animation:sway var(--sway-dur,3s) ease-in-out infinite alternate;animation-delay:var(--sway-delay,0s)}@keyframes sway{0%{rotate:-4deg}to{rotate:4deg}}.flower .f-seed,.flower .f-sprout,.flower .f-bloom{transform-box:fill-box;transform-origin:50% 100%;opacity:0;transition:transform .7s cubic-bezier(.34,1.56,.64,1),opacity .4s;transform:scale(.2)}.flower.stage-seed .f-seed,.flower.stage-sprout .f-sprout,.flower.stage-bloom .f-bloom{opacity:1;transform:scale(1)}.flower.no-anim *{transition:none!important}.flower.dragging{filter:url(#softShadow)}.flower.dragging .sway{animation:none;rotate:0deg}.flower.dragging .f-bloom{transform:scale(1.15)}.uni .uni-bob{transform-box:fill-box;transform-origin:50% 100%;animation:2.6s ease-in-out infinite breathe}@keyframes breathe{0%,to{transform:scaleY(1)}50%{transform:scaleY(1.025)}}.uni .leg{transition:transform .25s}.uni.mode-walk .leg-fn,.uni.mode-walk .leg-bf{animation:.55s ease-in-out infinite legSwing}.uni.mode-walk .leg-ff,.uni.mode-walk .leg-bn{animation:.55s ease-in-out infinite reverse legSwing}@keyframes legSwing{0%,to{transform:rotate(-22deg)}50%{transform:rotate(22deg)}}.uni.mode-walk .uni-bob{animation:.55s ease-in-out infinite trot}@keyframes trot{0%,to{transform:translateY(0)}50%{transform:translateY(-7px)}}.uni.mode-prance .leg-fn,.uni.mode-prance .leg-ff{animation:.35s ease-in-out infinite alternate pranceFront}.uni.mode-prance .leg-bn,.uni.mode-prance .leg-bf{animation:.35s ease-in-out infinite alternate pranceBack}@keyframes pranceFront{0%{transform:rotate(-30deg)}to{transform:rotate(10deg)}}@keyframes pranceBack{0%{transform:rotate(12deg)}to{transform:rotate(-20deg)}}.uni.mode-fly .leg{transform:rotate(-28deg)}.uni.mode-fly .leg-bn,.uni.mode-fly .leg-bf{transform:rotate(30deg)}.uni.mode-fly .uni-inner{animation:none}.uni.mode-fly .uni-bob{transform:rotate(var(--roll,0deg));transform-origin:50%;animation:none}.uni .tail{animation:2.2s ease-in-out infinite alternate tailSway}@keyframes tailSway{0%{transform:rotate(-6deg)}to{transform:rotate(8deg)}}.uni.flick .tail{animation:.5s ease-in-out 2 tailFlick}@keyframes tailFlick{0%,to{transform:rotate(0)}50%{transform:rotate(45deg)}}.uni .headneck{transition:transform .6s cubic-bezier(.34,1.3,.64,1)}.uni.mode-graze .headneck{transform:rotate(42deg)}.uni.mode-nap .headneck{transform:rotate(22deg)}.uni.mode-nap .uni-bob{animation:3.6s ease-in-out infinite breathe}.uni .eyelid{transition:transform .25s;animation:4.5s ease-in-out infinite blink;transform:scaleY(0)}@keyframes blink{0%,94%,to{transform:scaleY(0)}97%{transform:scaleY(1)}}.uni.mode-nap .eyelid{animation:none;transform:scaleY(1)}.uni.mode-nap .eye-closed-line{opacity:1}.uni .zzz{opacity:0;transition:opacity .4s}.uni.mode-nap .zzz{opacity:1}.uni .ear{transition:transform .3s}.uni.mode-listen .ear{transform:rotate(-22deg)}.uni.mode-listen .headneck{transform:rotate(14deg)translate(8px)}.uni.mode-listen .uni-bob{animation:1.2s ease-in-out infinite alternate lean}@keyframes lean{0%{transform:rotate(0)}to{transform:rotate(-4deg)}}.uni.mode-think .leg-fn{animation:.5s ease-in-out infinite hoofTap}@keyframes hoofTap{0%,to{transform:rotate(0)}50%{transform:rotate(-28deg)}}.uni.mode-think .headneck{transform:rotate(-8deg)}.uni.mode-think .eye{animation:1s ease-in-out infinite alternate lookUp}@keyframes lookUp{0%{transform:translate(0)}to{transform:translate(2px,-4px)}}.uni.mode-speak .headneck{animation:.8s ease-in-out infinite nod}@keyframes nod{0%,to{transform:rotate(0)}50%{transform:rotate(5deg)}}.uni .mouth-open{opacity:0;transition:opacity 80ms}.uni.mouth-is-open .mouth-open{opacity:1}.uni.mouth-is-open .mouth-closed{opacity:0}.uni.mode-speak .mouth-closed{transition:opacity 80ms}.uni.mode-dance .uni-bob{animation:.3s ease-in-out infinite alternate wiggle}@keyframes wiggle{0%{transform:rotate(-7deg)}to{transform:rotate(7deg)}}.uni.mode-dance .headneck{animation:.6s ease-in-out infinite nod}.uni.feed-hover .uni-shadow{opacity:.35}.uni.feed-hover .mouth-open{opacity:1}.uni.feed-hover .mouth-closed{opacity:0}.uni.entering{animation:.6s cubic-bezier(.34,1.56,.64,1) popIn}@keyframes popIn{0%{opacity:0}to{opacity:1}}.uni .wings{transform-origin:0 0;animation:.9s ease-in-out infinite alternate flap}@keyframes flap{0%{transform:rotate(-6deg)scaleX(1)}to{transform:rotate(10deg)scaleX(.9)}}.uni .cape{transform-origin:30px 0;animation:1.4s ease-in-out infinite alternate capeWave}@keyframes capeWave{0%{transform:skew(-6deg)}to{transform:skew(8deg)}}.deco .select-ring{opacity:0;transition:opacity .2s}.deco.selected .select-ring{opacity:1;animation:1.2s ease-in-out infinite alternate ringPulse}@keyframes ringPulse{0%{stroke-opacity:.5}to{stroke-opacity:1}}.deco.dragging{filter:url(#softShadow)}.deco .float{animation:3s ease-in-out infinite alternate floatY}.deco .float-slow{animation:5s ease-in-out infinite alternate floatY}@keyframes floatY{0%{transform:translateY(0)}to{transform:translateY(-14px)}}#hud{pointer-events:none;position:fixed;inset:0}#hud>*{pointer-events:auto}.hud-btn{width:var(--hud-size);height:var(--hud-size);background:var(--panel);cursor:pointer;border:4px solid #fff;border-radius:50%;place-items:center;padding:0;transition:transform .15s,opacity .3s;display:grid;position:absolute;box-shadow:0 6px 18px #50287840}.hud-btn svg{width:70%;height:70%}.hud-btn:active{transform:scale(.92)}.hud-btn[disabled]{opacity:.35}.hud-btn.hidden{opacity:0;pointer-events:none}.hud-btn.chest{left:max(16px, env(safe-area-inset-left));bottom:max(16px, env(safe-area-inset-bottom))}.hud-btn.studio{left:calc(max(16px, env(safe-area-inset-left)) + var(--hud-size) + 14px);bottom:max(16px, env(safe-area-inset-bottom))}.hud-btn.undo{left:calc(max(16px, env(safe-area-inset-left)) + (var(--hud-size) + 14px) * 2);bottom:max(16px, env(safe-area-inset-bottom))}.hud-btn.mic{right:max(16px, env(safe-area-inset-right));bottom:max(16px, env(safe-area-inset-bottom));background:linear-gradient(135deg,#ff8fd4,#8f7bff);border-color:#fff;width:110px;height:110px;animation:2.4s ease-in-out infinite micGlow;box-shadow:0 0 #ff8fd499}@keyframes micGlow{0%,to{box-shadow:0 0 #ff8fd48c}50%{box-shadow:0 0 0 18px #ff8fd400}}.hud-btn.mic.listening{background:linear-gradient(135deg,#ff5f6d,#ff8fd4);animation:.9s ease-in-out infinite micListen}@keyframes micListen{0%,to{transform:scale(1)}50%{transform:scale(1.08)}}.hud-btn.mic.thinking{background:linear-gradient(135deg,#5cc8ff,#8f7bff)}.hud-btn.mic.speaking{background:linear-gradient(135deg,#7ee081,#5cc8ff)}.hud-btn.gear{top:max(10px, env(safe-area-inset-top));right:max(10px, env(safe-area-inset-right));opacity:.55;border-width:3px;width:56px;height:56px}.hud-btn.gear svg{width:60%;height:60%}.tray{left:50%;bottom:calc(max(16px, env(safe-area-inset-bottom)) + var(--hud-size) + 24px);background:var(--panel);scrollbar-width:none;touch-action:pan-x;border:4px solid #fff;border-radius:28px;gap:10px;max-width:min(92vw,1100px);padding:12px;display:flex;position:fixed;overflow:auto hidden;transform:translate(-50%);box-shadow:0 10px 30px #5028784d}.tray::-webkit-scrollbar{display:none}.tray.hidden{display:none}.tray .piece{cursor:grab;touch-action:none;background:#fff;border:3px solid #0000;border-radius:20px;flex:none;place-items:center;width:96px;height:96px;padding:0;display:grid}.tray .piece.selected{border-color:var(--purple);background:#f3efff}.tray .piece svg{pointer-events:none;width:84px;height:84px}.tray .piece.swatch{border:4px solid #fff;border-radius:50%;width:76px;height:76px;box-shadow:0 2px 8px #00000026}.tray .piece.swatch.selected{outline:4px solid var(--purple)}.tray .sep{background:#eee;border-radius:2px;flex:0 0 4px;margin:8px 4px}.tray .piece.emoji{font-size:48px}.panel{-webkit-backdrop-filter:blur(6px);backdrop-filter:blur(6px);z-index:20;background:#3c1e5a73;place-items:center;display:grid;position:fixed;inset:0}.panel.hidden{display:none}.panel .card{background:var(--panel);border:5px solid #fff;border-radius:32px;max-width:min(94vw,1000px);max-height:92vh;padding:20px;overflow:auto;box-shadow:0 20px 60px #28145066}.panel .close{position:absolute;top:16px;right:16px}.row{flex-wrap:wrap;align-items:center;gap:10px;margin:10px 0;display:flex}.row .label-icon{place-items:center;width:64px;height:64px;display:grid}.row .label-icon svg{width:54px;height:54px}.big-btn{cursor:pointer;background:#fff;border:4px solid #fff;border-radius:22px;place-items:center;min-width:84px;min-height:84px;padding:6px 14px;font-size:40px;display:grid;box-shadow:0 4px 14px #50287833}.big-btn.selected{border-color:var(--purple);background:#f3efff}.big-btn.primary{color:#fff;background:linear-gradient(135deg,#ff8fd4,#8f7bff)}.big-btn svg{width:64px;height:64px}.big-btn:active{transform:scale(.95)}.swatch-btn{cursor:pointer;border:4px solid #fff;border-radius:50%;width:72px;height:72px;box-shadow:0 2px 8px #00000026}.swatch-btn.selected{outline:4px solid var(--purple);outline-offset:2px}.preview{place-items:center;display:grid}.preview svg{width:300px;height:300px}.grownup{color:#3b2a52;font-size:18px}.grownup h2{margin:0 0 8px;font-size:24px}.grownup label{align-items:center;gap:12px;margin:10px 0;font-weight:600;display:flex}.grownup input[type=text],.grownup input[type=password],.grownup select{border:2px solid #d6c3e2;border-radius:12px;min-width:220px;padding:10px 14px;font-size:18px}.grownup input[type=range]{width:220px}.grownup input[type=checkbox]{width:28px;height:28px}.grownup button{cursor:pointer;background:#fff;border:2px solid #d6c3e2;border-radius:14px;min-height:48px;padding:12px 18px;font-size:18px}.grownup button.danger{color:#c0392b;border-color:#ff5f6d}.grownup .log{background:#fff;border:2px solid #eee;border-radius:12px;max-height:220px;padding:10px;font-size:15px;overflow:auto}.grownup .log .entry{border-radius:8px;margin:2px 0;padding:4px 8px}.grownup .log .entry.flag{background:#ffe0e0;border-left:4px solid #ff5f6d;font-weight:700}.grownup .log .entry.unicorn{color:#6b4fb0}.grownup .cols{grid-template-columns:1fr 1fr;gap:18px;display:grid}@media (max-width:900px){.grownup .cols{grid-template-columns:1fr}}.gate{text-align:center}.gate .hold{background:#fff;border:6px solid #d6c3e2;border-radius:50%;place-items:center;width:160px;height:160px;margin:12px auto;font-size:60px;display:grid;position:relative;overflow:hidden}.gate .hold .fill{z-index:0;background:linear-gradient(#ff8fd4,#c9b3ff);width:100%;height:0;transition:height .1s linear;position:absolute;bottom:0;left:0}.gate .hold span{z-index:1;position:relative}.gate .maths{margin:10px 0;font-size:28px}.gate .maths.hidden,.grownup .hidden{display:none}.grownup .card{position:relative}.grownup .status{color:#6b4fb0;font-size:15px}.gate input{text-align:center;border:2px solid #d6c3e2;border-radius:12px;width:120px;padding:8px;font-size:28px}#hud>.winddown,.winddown{opacity:0;z-index:5;background:radial-gradient(#28145000 40%,#2814508c 100%);transition:opacity 3s;position:fixed;inset:0;pointer-events:none!important}.winddown.on{opacity:1}@media (prefers-reduced-motion:reduce){.cloud,.parallax-far,.parallax-mid,.flower .sway{animation-duration:200s}}.drag-ghost{pointer-events:none;z-index:30;filter:drop-shadow(0 8px 10px #00000040);width:120px;height:120px;position:fixed;top:0;left:0}.drag-ghost svg{width:100%;height:100%}.hud-btn.active{outline:5px solid var(--purple)}.piece-tools{bottom:auto;top:max(14px, env(safe-area-inset-top))}.palette-tray{bottom:auto;top:calc(max(14px, env(safe-area-inset-top)) + 130px)}.studio .card{width:min(96vw,1180px);position:relative}.studio-main{grid-template-columns:300px 1fr;align-items:start;gap:16px;display:grid}.studio-rows{max-height:60vh;padding-bottom:120px;padding-right:6px;overflow:hidden auto}.studio-rows .row{scrollbar-width:none;flex-wrap:nowrap;padding:4px 2px;overflow-x:auto}.studio-rows .row::-webkit-scrollbar{display:none}.studio-rows .row>.label-icon{background:var(--panel);z-index:1;flex:0 0 64px;position:sticky;left:0}.studio-rows .row.swatches{flex-wrap:nowrap;display:flex}.studio .big-btn,.studio .swatch-btn{flex:none}.studio .big-btn.preset svg{width:60px;height:60px}.studio .who{padding-right:70px}.studio .done{border-radius:50%;width:110px;height:110px;position:absolute;bottom:24px;right:24px}.studio .big-btn.listening{animation:.9s ease-in-out infinite micListen}@media (max-width:1000px){.studio-main{grid-template-columns:220px 1fr}.preview svg{width:220px;height:196px}}
