/* SoftSI's companion (the panel's brain figure, ported), its launcher button and its speech bubble. */
.softsi-buddy{position:relative;display:inline-block;width:100%;height:100%;--softsi-look-x:0;--softsi-look-y:0}
.softsi-buddy__svg{position:relative;display:block;width:100%;height:100%;overflow:visible}
.softsi-buddy__glow{position:absolute;inset:2px;border-radius:50%;background:radial-gradient(closest-side,rgba(46,215,240,.32),rgba(46,215,240,0));opacity:.55}
.softsi-buddy__ground{position:absolute;left:15%;bottom:-4%;width:70%;height:14%;border-radius:50%;background:radial-gradient(closest-side,rgba(4,30,55,.38),rgba(4,30,55,0))}
.softsi-buddy__figure{transform-box:view-box;transform-origin:33px 61px}
.softsi-buddy__face{transition:translate .2s ease-out;translate:calc(var(--softsi-look-x,0)*.35px) calc(var(--softsi-look-y,0)*.35px)}
.softsi-buddy__eye,.softsi-buddy__pupil,.softsi-buddy__bulb,.softsi-buddy__halo,.softsi-buddy__mouth,.softsi-buddy__brows{transform-box:fill-box;transform-origin:center}
.softsi-buddy__eye{transition:scale .07s ease}
.softsi-buddy__pupil{transition:translate .18s ease-out;translate:calc(var(--softsi-look-x,0)*1px) calc(var(--softsi-look-y,0)*1px)}
.softsi-buddy--blink .softsi-buddy__eye{scale:1 .1}
.softsi-buddy__arm{transform-box:view-box;transition:transform .3s ease}
.softsi-buddy__arm--left{transform:rotate(14deg);transform-origin:6.5px 39px}
.softsi-buddy__arm--right{transform:rotate(-14deg);transform-origin:59.5px 39px}
.softsi-buddy__mouth--open,.softsi-buddy__mouth--grin{opacity:0}

/* At rest: a breath now and then, the core glowing with it. */
.softsi-buddy--rest .softsi-buddy__figure{animation:softsi-buddy-breathe 9s ease-in-out 3s infinite}
.softsi-buddy--rest .softsi-buddy__bulb,.softsi-buddy--rest .softsi-buddy__halo{animation:softsi-buddy-glow 9s ease-in-out 3s infinite}

/* Looks around: left, right, back. */
.softsi-buddy--glance .softsi-buddy__pupil{animation:softsi-buddy-glance 2.4s ease-in-out both}

/* Pings its core and looks up at it. */
.softsi-buddy--ping .softsi-buddy__bulb,.softsi-buddy--ping .softsi-buddy__halo{animation:softsi-buddy-ping 1.8s ease-in-out both}
.softsi-buddy--ping .softsi-buddy__pupil{animation:softsi-buddy-look-up 1.8s ease-in-out both}

/* Waves with the whole arm, grinning, swaying a little. */
.softsi-buddy--wave .softsi-buddy__mouth--smile{opacity:0}
.softsi-buddy--wave .softsi-buddy__mouth--grin{opacity:1}
.softsi-buddy--wave .softsi-buddy__arm--right{animation:softsi-buddy-wave 1.9s ease-in-out both}
.softsi-buddy--wave .softsi-buddy__figure{animation:softsi-buddy-sway .6s ease-in-out 2 both}

/* Happy: two hops, arms up. */
.softsi-buddy--happy .softsi-buddy__mouth--smile{opacity:0}
.softsi-buddy--happy .softsi-buddy__mouth--grin{opacity:1}
.softsi-buddy--happy .softsi-buddy__figure{animation:softsi-buddy-hop .75s ease-in-out 2 both}
.softsi-buddy--happy .softsi-buddy__ground{animation:softsi-buddy-ground .75s ease-in-out 2 both}
.softsi-buddy--happy .softsi-buddy__eye{scale:1 .55}
.softsi-buddy--happy .softsi-buddy__arm--left{transform:rotate(130deg)}
.softsi-buddy--happy .softsi-buddy__arm--right{transform:rotate(-130deg)}

/* Talks. */
.softsi-buddy--talk .softsi-buddy__mouth--open{animation:softsi-buddy-talk .36s steps(1) 6 both}
.softsi-buddy--talk .softsi-buddy__mouth--smile{animation:softsi-buddy-talk .36s steps(1) 6 reverse both}

@keyframes softsi-buddy-breathe{0%,76%,100%{transform:none}82%{transform:scale(1.04,1.06)}88%{transform:scale(.99)}}
@keyframes softsi-buddy-glow{0%,76%,100%{scale:1}84%{scale:1.25}}
@keyframes softsi-buddy-glance{0%,100%{transform:none}18%,40%{transform:translate(-2.6px,.4px)}55%,78%{transform:translate(2.6px,-.4px)}}
@keyframes softsi-buddy-ping{0%,100%{scale:1;opacity:1}30%{scale:1.5;opacity:1}60%{scale:1.15}}
@keyframes softsi-buddy-look-up{0%,100%{transform:none}25%,70%{transform:translate(0,-2.2px)}}
@keyframes softsi-buddy-wave{0%,100%{transform:rotate(-14deg)}15%{transform:rotate(-150deg)}27%,51%,75%{transform:rotate(-128deg)}39%,63%{transform:rotate(-168deg)}87%{transform:rotate(-150deg)}}
@keyframes softsi-buddy-sway{0%,100%{transform:none}25%{transform:rotate(-6deg)}75%{transform:rotate(6deg)}}
@keyframes softsi-buddy-hop{0%,100%{transform:none}15%{transform:scale(1.1,.9)}45%{transform:translateY(-12px) scale(.94,1.06)}80%{transform:scale(1.06,.95)}}
@keyframes softsi-buddy-ground{0%,100%{opacity:1;transform:none}40%,50%{opacity:.45;transform:scale(.7)}}
@keyframes softsi-buddy-talk{0%,49%{opacity:1}50%,100%{opacity:0}}

/* The launcher: a round glass button in the bottom-right corner with the companion in it. */
.softsi-launcher{position:fixed;right:18px;bottom:18px;z-index:1010;width:64px;height:64px;padding:0;border:0;background:none;cursor:pointer;-webkit-tap-highlight-color:transparent}
.softsi-launcher[hidden]{display:none}
.softsi-launcher__face{position:relative;display:flex;align-items:center;justify-content:center;width:100%;height:100%;border-radius:50%;border:1px solid rgba(22,47,58,.12);background:rgba(255,255,255,.92);backdrop-filter:saturate(1.6) blur(14px);box-shadow:0 10px 30px rgba(22,52,61,.22),0 2px 6px rgba(22,52,61,.12);transition:transform .18s ease,box-shadow .18s ease}
.softsi-launcher__face>.softsi-buddy{width:50px;height:50px}
.softsi-launcher:hover .softsi-launcher__face{transform:translateY(-2px);box-shadow:0 14px 34px rgba(22,52,61,.26),0 2px 6px rgba(22,52,61,.12)}
.softsi-launcher:focus-visible{outline:none}
.softsi-launcher:focus-visible .softsi-launcher__face{box-shadow:0 0 0 3px #fff,0 0 0 6px #d27b22,0 10px 30px rgba(22,52,61,.22)}
.softsi-launcher--pop{animation:softsi-launcher-pop .7s cubic-bezier(.2,.9,.2,1.2) both}
.softsi-launcher--quiet .softsi-launcher__face>.softsi-buddy{width:44px;height:44px}
.softsi-launcher__label{position:absolute;width:1px;height:1px;overflow:hidden;clip:rect(0,0,0,0)}
@keyframes softsi-launcher-pop{0%{opacity:0;transform:scale(.3) translateY(24px)}60%{opacity:1;transform:scale(1.08) translateY(-4px)}100%{opacity:1;transform:none}}

/* What it says first: a bubble beside the launcher with a tail toward it. */
.softsi-bubble{position:fixed;right:96px;bottom:26px;z-index:1011;max-width:min(300px,calc(100vw - 130px));padding:14px 16px;border-radius:16px 16px 4px 16px;background:#fff;border:1px solid #dce5e5;box-shadow:0 18px 44px rgba(22,52,61,.16);font-family:'DM Sans',sans-serif;font-size:15px;line-height:1.5;color:#162f3a;animation:softsi-bubble-in .35s ease both}
.softsi-bubble[hidden]{display:none}
.softsi-bubble::after{content:'';position:absolute;right:-7px;bottom:12px;width:12px;height:12px;background:#fff;border-right:1px solid #dce5e5;border-bottom:1px solid #dce5e5;transform:rotate(-45deg)}
.softsi-bubble p{margin:0 0 10px}
.softsi-bubble__actions{display:flex;gap:8px;flex-wrap:wrap}
.softsi-bubble__actions button{min-height:36px;padding:7px 14px;border-radius:999px;border:1px solid #087e8a;background:#087e8a;color:#fff;font:inherit;font-size:13px;font-weight:600;cursor:pointer}
.softsi-bubble__actions button.is-quiet{background:#fff;color:#526772;border-color:#c9d8d7}
.softsi-bubble__actions button:hover{filter:brightness(.95)}
.softsi-bubble__close{position:absolute;top:6px;right:8px;width:28px;height:28px;border:0;background:none;color:#60717a;font-size:18px;line-height:1;cursor:pointer;border-radius:50%}
.softsi-bubble__close:hover{background:#f1f6f5}
@keyframes softsi-bubble-in{from{opacity:0;transform:translateY(8px) scale(.96)}to{opacity:1;transform:none}}

@media(max-width:640px){
.softsi-launcher{right:12px;bottom:12px;width:54px;height:54px}
.softsi-launcher__face>.softsi-buddy,.softsi-launcher--quiet .softsi-launcher__face>.softsi-buddy{width:42px;height:42px}
.softsi-bubble{right:12px;left:12px;bottom:76px;max-width:none;border-radius:16px 16px 16px 4px}
.softsi-bubble::after{right:18px;bottom:-7px;border-right:1px solid #dce5e5;border-bottom:1px solid #dce5e5;transform:rotate(45deg)}
}
@media(prefers-reduced-motion:reduce){
.softsi-buddy *,.softsi-buddy{animation:none!important;transition:none!important}
.softsi-launcher--pop,.softsi-bubble{animation:none}
.softsi-launcher:hover .softsi-launcher__face{transform:none}
}
@media print{.softsi-launcher,.softsi-bubble{display:none}}
