:root{--bg: #f3f1ec;--surface: #ffffff;--surface-2: #f8f7f3;--text: #1b1d21;--muted: #6b6f78;--border: #e3e0d8;--accent: #0f9fb0;--accent-ink: #ffffff;--accent-soft: #dff6f8;--danger: #c43d3d;--ok: #1f8a5b;--screen: #0b0f14;--eye: #5ef2ff;--cheek: #ff7aa8;--shadow: 0 1px 2px rgb(0 0 0 / .04), 0 8px 24px rgb(0 0 0 / .05);--radius: 18px;font-family:Space Grotesk,system-ui,sans-serif;color:var(--text);background:var(--bg)}@media (prefers-color-scheme: dark){:root{--bg: #111317;--surface: #191c21;--surface-2: #20242a;--text: #eceef1;--muted: #9298a3;--border: #2b3038;--accent: #5ef2ff;--accent-ink: #0b0f14;--accent-soft: #163339;--danger: #ff6b6b;--ok: #4ad295;--shadow: none}}*{box-sizing:border-box}body{margin:0;min-height:100vh;background:var(--bg)}h1,h2{margin:0;font-weight:700;letter-spacing:-.02em}h2{font-size:1rem}button,input,textarea,select{font:inherit;color:inherit}button{border:0;border-radius:999px;padding:.6rem 1.1rem;background:var(--accent);color:var(--accent-ink);font-weight:500;cursor:pointer;transition:transform .1s ease,opacity .15s ease}button:active{transform:scale(.97)}button:disabled{opacity:.45;cursor:not-allowed}button.ghost{background:transparent;color:var(--text);border:1px solid var(--border)}button.danger{background:transparent;color:var(--danger);border:1px solid currentColor}button.small{padding:.35rem .8rem;font-size:.85rem}input,textarea,select{width:100%;background:var(--surface-2);border:1px solid var(--border);border-radius:12px;padding:.65rem .8rem;outline:none}input:focus,textarea:focus,select:focus{border-color:var(--accent)}textarea{font-family:JetBrains Mono,ui-monospace,monospace;font-size:.85rem;line-height:1.5;resize:vertical}label{display:block;font-size:.8rem;color:var(--muted);margin:.9rem 0 .35rem}.card{background:var(--surface);border:1px solid var(--border);border-radius:var(--radius);box-shadow:var(--shadow);padding:1.1rem}.card-head{display:flex;align-items:center;justify-content:space-between;gap:1rem;margin-bottom:.8rem}.muted{color:var(--muted);font-size:.9rem}.hint{color:var(--muted);font-size:.8rem;margin:.4rem 0 0}.error{color:var(--danger);font-size:.9rem}.ok{color:var(--ok);font-size:.85rem}.row{display:flex;gap:.6rem;align-items:center;flex-wrap:wrap;margin-top:.9rem}.row select{width:auto;flex:1;min-width:120px}.login{min-height:100vh;display:grid;place-content:center;justify-items:center;gap:1.5rem;padding:16px}.login-card{width:min(360px,calc(100vw - 32px))}.login-card button{width:100%;margin-top:1rem}.app{max-width:1200px;margin:0 auto;padding:16px}.topbar{display:flex;justify-content:space-between;align-items:center;flex-wrap:wrap;gap:.8rem;margin-bottom:16px}.brand{display:flex;align-items:center;gap:.6rem}.logo{width:30px;height:24px;border-radius:8px;background:radial-gradient(circle at 32% 50%,var(--eye) 0 3px,transparent 4px),radial-gradient(circle at 68% 50%,var(--eye) 0 3px,transparent 4px),var(--screen)}.status-pills{display:flex;gap:.5rem;flex-wrap:wrap;align-items:center}.pill{display:inline-flex;align-items:center;gap:.4rem;font-size:.8rem;padding:.3rem .7rem;border-radius:999px;border:1px solid var(--border);background:var(--surface);color:var(--muted)}.pill i{width:8px;height:8px;border-radius:50%;background:currentColor}.pill.on{color:var(--ok)}.pill.off{color:var(--danger)}.pill.dev{background:#f2c14e;border-color:#f2c14e;color:#1b1d21;font-weight:700}.pill.neutral{font-family:JetBrains Mono,monospace}.layout{display:grid;grid-template-columns:minmax(0,1.1fr) minmax(0,1fr);gap:16px;align-items:start}.col{display:grid;grid-template-columns:minmax(0,1fr);gap:16px}@media (max-width: 860px){.layout{grid-template-columns:minmax(0,1fr)}}.stage{display:grid;grid-template-columns:minmax(0,1fr);justify-items:center;gap:1rem;background:radial-gradient(ellipse at 50% 0%,var(--accent-soft),transparent 70%),var(--surface)}.face-shell{max-width:100%}.face{display:block;width:100%;height:auto;filter:drop-shadow(0 12px 24px rgb(0 0 0 / .18))}.screen{fill:var(--screen)}.eye,.pupil{fill:var(--eye)}.pupil{fill:var(--screen)}.eye-line{fill:none;stroke:var(--eye);stroke-width:9;stroke-linecap:round}.lid{fill:var(--screen)}.cheek{fill:var(--cheek);opacity:.55}.dots circle{fill:var(--eye);animation:dot 1.2s infinite ease-in-out}.dots circle:nth-child(2){animation-delay:.15s}.dots circle:nth-child(3){animation-delay:.3s}.zzz{fill:var(--eye);font:700 18px Space Grotesk,sans-serif;animation:float 2.4s infinite ease-in-out}.zzz-2{font-size:13px;animation-delay:.6s}.face-enter{animation:face-in .38s ease-out both;transform-origin:120px 90px}.face-leave{animation:face-out .38s ease-in both;transform-origin:120px 90px;pointer-events:none}@keyframes face-in{0%{opacity:0;transform:scale(.97)}to{opacity:1;transform:scale(1)}}@keyframes face-out{0%{opacity:1}to{opacity:0}}.blink{transform-box:fill-box;transform-origin:center;animation:blink 4.5s infinite}.pulse{animation:blink 4.5s infinite,pulse 1.2s infinite ease-in-out}.beat{transform-box:fill-box;transform-origin:center;animation:beat .9s infinite ease-in-out}.look-up{animation:drift 2.5s infinite ease-in-out alternate}@keyframes blink{0%,92%,to{transform:scaleY(1)}95%{transform:scaleY(.08)}}@keyframes pulse{50%{opacity:.75}}@keyframes beat{0%,to{transform:scale(1)}30%{transform:scale(1.12)}}@keyframes drift{to{transform:translate(-6px)}}@keyframes dot{0%,to{opacity:.25}50%{opacity:1}}@keyframes float{50%{transform:translateY(-5px);opacity:.6}}@keyframes pop{0%{transform:scale(.94);opacity:.4}}.pettable{cursor:pointer}.ball{fill:#ffb547}.mouth{fill:var(--eye)}.note{fill:var(--eye);font:700 22px Space Grotesk,sans-serif;animation:note-float 1.6s infinite ease-out}.note-2{font-size:18px;animation-delay:.8s}.look-around{animation:look-around 3.2s ease-in-out}@keyframes look-around{0%,to{transform:translate(0)}15%,40%{transform:translate(-16px)}55%,85%{transform:translate(16px)}}.ball-x{animation:ball-x 3.2s ease-in-out 2}.ball-x .ball{animation:ball-bounce .8s infinite}.follow-ball{animation:follow-ball 3.2s ease-in-out 2}@keyframes ball-x{0%,to{transform:translate(40px)}50%{transform:translate(200px)}}@keyframes ball-bounce{0%,to{transform:translateY(160px);animation-timing-function:ease-out}50%{transform:translateY(128px);animation-timing-function:ease-in}}@keyframes follow-ball{0%,to{transform:translate(-14px,10px)}50%{transform:translate(14px,10px)}}.yawn-eyes{transform-box:fill-box;transform-origin:center;animation:yawn-eyes 3.4s ease-in-out}.yawn-mouth{transform-box:fill-box;transform-origin:center;animation:yawn-mouth 3.4s ease-in-out forwards}@keyframes yawn-eyes{0%,to{transform:scaleY(1)}25%,70%{transform:scaleY(.2)}}@keyframes yawn-mouth{0%,to{transform:scale(0)}25%,70%{transform:scale(1.2,1.4)}}.sway{transform-origin:120px 90px;animation:sway 1.2s ease-in-out infinite alternate}@keyframes sway{0%{transform:rotate(-4deg)}to{transform:rotate(4deg)}}.tilt{transform-origin:120px 90px;animation:tilt 3.6s ease-in-out}@keyframes tilt{0%,to{transform:rotate(0)}20%,80%{transform:rotate(-10deg)}}@keyframes note-float{0%{transform:translateY(0);opacity:1}to{transform:translateY(-24px);opacity:0}}.life-toggle{margin:0;color:var(--muted)}.terror .eye,.terror .eye-line{filter:drop-shadow(0 0 3px var(--eye)) drop-shadow(0 0 9px var(--eye))}.blink-odd>.eye{transform-box:fill-box;transform-origin:center}.blink-odd>.eye:first-child{animation:blink 3.1s infinite}.blink-odd>.eye:last-child{animation:blink 5.3s 1.2s infinite}.stalk{transform-origin:120px 90px;animation:stalk 4.4s ease-in-out}@keyframes stalk{0%{transform:scale(2.2);opacity:.2}20%{transform:scale(1);opacity:1}40%,50%{transform:translate(-12px)}70%,85%{transform:translate(12px)}to{transform:translate(0)}}.glitch{animation:glitch .24s steps(2) infinite}.glitch-ghost{opacity:.45;transform:translate(6px,-2px);animation:glitch-ghost .18s steps(2) infinite}@keyframes glitch{0%{transform:translate(-3px,1px);opacity:1}50%{transform:translate(3px,-1px);opacity:.55}to{transform:translate(0);opacity:1}}@keyframes glitch-ghost{0%{transform:translate(6px,-2px)}to{transform:translate(-7px,2px)}}.maw{fill:#050506;stroke:var(--eye);stroke-width:2.5}.terror .maw{filter:drop-shadow(0 0 4px var(--eye))}.tooth{fill:#f2e8c9}.mouth-open{transform-origin:120px 132px;animation:mouth-open 4.2s ease-in-out both}@keyframes mouth-open{0%{transform:scaleY(0)}15%,85%{transform:scaleY(1)}to{transform:scaleY(0)}}.laugh .mouth-open{animation:mouth-open 3.6s ease-in-out both,laugh-shake .16s .5s linear 16 alternate}@keyframes laugh-shake{0%{transform:scaleY(1) translateY(-2px)}to{transform:scaleY(.82) translateY(2px)}}.laugh{animation:laugh-body .32s linear 10 alternate}@keyframes laugh-body{0%{transform:translateY(-1.5px)}to{transform:translateY(1.5px)}}.third-eye{transform-box:fill-box;transform-origin:center;animation:third-eye 3.8s ease-in-out both}@keyframes third-eye{0%{transform:scaleY(0)}20%,40%{transform:scaleY(1)}45%{transform:scaleY(.1)}50%,80%{transform:scaleY(1)}to{transform:scaleY(0)}}.blood-drop{fill:#b3261e;opacity:0;animation:blood-drop 2.6s .4s ease-in both}.drop-2{animation-delay:1.6s}@keyframes blood-drop{0%{opacity:0;transform:translateY(0) scale(.6)}15%{opacity:1;transform:translateY(2px) scale(1)}80%{opacity:1}to{opacity:0;transform:translateY(58px) scaleY(1.3)}}.blackout{transform-origin:120px 90px;animation:blackout 3.2s linear both}@keyframes blackout{0%{opacity:1;transform:scale(1)}8%,45%{opacity:0;transform:scale(1)}50%{opacity:.6}53%,60%{opacity:0}62%{opacity:1;transform:scale(1.7)}80%{opacity:1;transform:scale(1.6)}to{opacity:1;transform:scale(1)}}@media (prefers-reduced-motion: reduce){.mouth-open,.laugh,.laugh .mouth-open,.third-eye,.blackout{animation:none}.blood-drop{animation:none;opacity:1}.face-enter,.face-leave{animation-duration:.01s}.blink-odd>.eye,.stalk,.glitch,.glitch-ghost{animation:none}.blink,.pulse,.beat,.look-up,.dots circle,.zzz,.face-enter,.look-around,.ball-x,.ball-x .ball,.follow-ball,.yawn-eyes,.sway,.tilt,.note{animation:none}}.expressions{display:flex;flex-wrap:wrap;justify-content:center;gap:.4rem}.chip{background:var(--surface);color:var(--text);border:1px solid var(--border);padding:.35rem .8rem;font-size:.85rem}.chip.active{background:var(--accent);color:var(--accent-ink);border-color:var(--accent)}.toggle{display:inline-flex;align-items:center;gap:.4rem;margin:0;font-size:.85rem;cursor:pointer}.toggle input{width:auto}.toggle.disabled{opacity:.5;cursor:not-allowed}.chat-list{display:flex;flex-direction:column;gap:.5rem;height:280px;overflow-y:auto;padding:.2rem}.bubble{max-width:85%;padding:.6rem .85rem;border-radius:16px;line-height:1.4;font-size:.95rem;white-space:pre-wrap}.bubble.user{align-self:flex-end;background:var(--accent);color:var(--accent-ink);border-bottom-right-radius:4px}.bubble.assistant{align-self:flex-start;background:var(--surface-2);border:1px solid var(--border);border-bottom-left-radius:4px}.bubble .tag{display:block;font-size:.7rem;color:var(--muted);text-transform:uppercase;letter-spacing:.06em;margin-bottom:.2rem}.typing{color:var(--muted)}.chat-input{display:flex;gap:.5rem;margin-top:.8rem}.toggles{display:flex;flex-wrap:wrap;justify-content:flex-end;gap:.4rem 1rem}.mic{flex:none;width:44px;height:44px;padding:0;display:grid;place-items:center;background:var(--surface-2);color:var(--text);border:1px solid var(--border)}.mic.on{background:var(--danger);border-color:var(--danger);color:#fff;animation:pulse 1.2s infinite ease-in-out}.tabs{display:flex;gap:.3rem;padding:.25rem;background:var(--surface-2);border-radius:999px;margin-bottom:.5rem}.tabs{overflow-x:auto;scrollbar-width:none}.tabs::-webkit-scrollbar{display:none}.tabs button{flex:1 0 auto;white-space:nowrap;background:transparent;color:var(--muted);padding:.45rem .7rem}.side{min-width:0}.tabs button.active{background:var(--surface);color:var(--text);box-shadow:var(--shadow)}.history-list,.event-list{list-style:none;margin:.9rem 0 0;padding:0;display:grid;gap:.5rem;max-height:60vh;overflow-y:auto}.history-list li{padding:.6rem .8rem;border-radius:12px;background:var(--surface-2);border-left:3px solid var(--border)}.history-list li.assistant{border-left-color:var(--accent)}.history-list p{margin:.25rem 0 0;font-size:.92rem;line-height:1.4}.meta{display:flex;flex-wrap:wrap;gap:.6rem;font-size:.72rem;color:var(--muted)}.meta span:first-child{font-weight:700;color:var(--text)}.meta time{margin-left:auto}.event{display:grid;grid-template-columns:auto auto 1fr;gap:.2rem .6rem;font-size:.85rem;padding:.5rem .7rem;border-radius:10px;background:var(--surface-2)}.event time,.event .device{font-family:JetBrains Mono,monospace;font-size:.75rem;color:var(--muted)}.event strong{justify-self:end}.event .detail{grid-column:1 / -1;overflow-wrap:anywhere}.event.error strong{color:var(--danger)}.event.connected strong{color:var(--ok)}.toast{position:fixed;left:50%;bottom:24px;transform:translate(-50%);max-width:calc(100vw - 32px);background:var(--danger);color:#fff;padding:.7rem 1.1rem;border-radius:12px;box-shadow:0 8px 24px #0003;cursor:pointer}.appearance{display:grid;gap:.4rem}.swatches{display:flex;flex-wrap:wrap;gap:.5rem;align-items:center}.swatch{width:44px;height:44px;padding:0;border-radius:50%;border:3px solid transparent;box-shadow:inset 0 0 0 2px #00000040}.swatch.active{border-color:var(--text)}.swatch-custom{width:44px;height:44px;padding:2px;border-radius:50%;cursor:pointer}.styles{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:.6rem}.style-option{display:grid;justify-items:center;gap:.4rem;padding:.7rem;border-radius:14px;background:var(--surface-2);color:var(--text);border:2px solid var(--border)}.style-option.active{border-color:var(--accent)}.style-option .face{filter:none}.presets{display:flex;flex-wrap:wrap;gap:.4rem}.spiral{stroke-width:3.5;transform-box:view-box;animation:spin 1.1s linear infinite}.woozy{transform-origin:120px 90px;animation:sway .9s ease-in-out infinite alternate}@keyframes spin{to{transform:rotate(360deg)}}.sun{fill:#f2c14e;transform-origin:120px 40px;animation:spin 9s linear infinite}.cloud{fill:#d7dde3}.drop{fill:#5ec8ff;animation:rain .8s linear infinite}.flake{fill:#fff;animation:snow 1.6s linear infinite}.bolt{fill:#f8e45c;animation:bolt 1.3s steps(1) infinite}.fog rect{fill:#9aa3ad;animation:fog 2.4s ease-in-out infinite alternate}.fog rect:nth-child(2){animation-delay:.6s}@keyframes rain{0%{transform:translateY(-4px);opacity:1}to{transform:translateY(16px);opacity:0}}@keyframes snow{0%{transform:translateY(-4px);opacity:1}to{transform:translate(4px,16px);opacity:0}}@keyframes bolt{0%,60%{opacity:0}62%,70%{opacity:1}72%,80%{opacity:0}82%,90%{opacity:1}}@keyframes fog{0%{transform:translate(-6px)}to{transform:translate(6px)}}.announce{max-width:340px;text-align:center;font-size:.95rem;line-height:1.4;padding:.6rem .9rem;border-radius:14px;background:var(--surface-2);border:1px solid var(--border);animation:face-in .3s ease-out both}.announce small{display:block;font-size:.7rem;text-transform:uppercase;letter-spacing:.06em;color:var(--muted);margin-bottom:.2rem}.focus-bar{display:flex;align-items:center;gap:.5rem;flex-wrap:wrap;justify-content:center}.focus-time{font-family:JetBrains Mono,monospace;font-size:1.1rem;font-weight:500}.routines{display:grid;gap:.2rem}.routines h3{margin:1.1rem 0 .1rem;font-size:.95rem}.routines h3:first-child{margin-top:.4rem}.inline{display:flex;gap:.5rem;align-items:center;flex-wrap:wrap}.inline select,.inline input[type=number]{width:auto}.check{display:flex;align-items:center;gap:.5rem;margin:.6rem 0 0;color:var(--text);font-size:.9rem}.check input{width:auto}.results{list-style:none;padding:0;margin:.4rem 0 0;display:grid;gap:.3rem}.results button{width:100%;text-align:left;border-radius:10px;background:var(--surface-2);color:var(--text);border:1px solid var(--border)}.mini-list{margin:.4rem 0 0;padding-left:1.1rem;font-size:.85rem;color:var(--muted)}@media (prefers-reduced-motion: reduce){.spiral,.woozy,.sun,.drop,.flake,.bolt,.fog rect{animation:none}}.sneeze{transform-origin:120px 90px;animation:sneeze 2.6s ease-in-out both}@keyframes sneeze{0%,45%{transform:scale(1) translateY(0)}55%{transform:scale(1.12) translateY(-6px)}62%{transform:scale(.94) translateY(5px)}75%,to{transform:scale(1) translateY(0)}}.sneeze-text,.hic-text{fill:var(--eye);font:700 18px Space Grotesk,sans-serif}.sneeze-text{opacity:0;animation:sneeze-text 2.6s ease-out both}@keyframes sneeze-text{0%,52%{opacity:0;transform:translateY(6px)}60%,85%{opacity:1;transform:translateY(0)}to{opacity:0}}.hiccup{animation:hiccup 1s ease-out 3}@keyframes hiccup{0%,60%,to{transform:translateY(0)}70%{transform:translateY(-10px)}}.hic-text{font-size:14px;animation:hic-text 1s ease-out 3}@keyframes hic-text{0%,60%{opacity:0;transform:translateY(4px)}70%,90%{opacity:1;transform:translateY(0)}to{opacity:0}}@media (prefers-reduced-motion: reduce){.sneeze,.sneeze-text,.hiccup,.hic-text{animation:none}}.try-row{display:flex;flex-wrap:wrap;justify-content:center;gap:.4rem}.photo-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(120px,1fr));gap:.5rem;margin-top:.8rem}.photo-item{position:relative;border-radius:10px;overflow:hidden;background:var(--surface-2);aspect-ratio:320 / 172}.photo-item img{width:100%;height:100%;object-fit:cover;display:block}.photo-item button{position:absolute;top:4px;right:4px;width:32px;height:32px;padding:0;display:grid;place-items:center;background:#0009;color:#fff}.upload{display:inline-flex;align-items:center;gap:.5rem;cursor:pointer;margin:0;padding:.6rem 1.1rem;border-radius:999px;background:var(--accent);color:var(--accent-ink);font-weight:500;font-size:1rem}.upload input{position:absolute;width:1px;height:1px;opacity:0}.games{display:grid;gap:.6rem}.game-card{display:flex;justify-content:space-between;align-items:center;gap:.8rem;padding:.8rem;border-radius:14px;background:var(--surface-2);border:1px solid var(--border)}.game-card p{margin:.2rem 0 0;font-size:.85rem;color:var(--muted)}.game-card h3{margin:0;font-size:1rem}.game-controls{display:flex;flex-wrap:wrap;justify-content:center;gap:.5rem}.game-score{font-family:JetBrains Mono,monospace;font-size:.95rem}.game-text{fill:var(--eye);font:700 16px Space Grotesk,sans-serif}.game-icon{fill:none;stroke:var(--eye);stroke-width:4;stroke-linecap:round;stroke-linejoin:round}.shake{animation:shake .3s ease-in-out infinite alternate}@keyframes shake{0%{transform:translateY(-5px)}to{transform:translateY(5px)}}.target{cursor:pointer}.target-pop{transform-box:fill-box;transform-origin:center;animation:target-pop .18s ease-out}@keyframes target-pop{0%{transform:scale(.3)}to{transform:scale(1)}}.time-bar{fill:var(--eye);opacity:.6}
