/* Yuki: the finance assistant, a small white cat that walks around every page (yuki.js). */
#yuki{position:fixed;left:0;top:0;z-index:45;width:var(--yk,84px);height:calc(var(--yk,84px) * 1.03);
  will-change:transform;touch-action:none;user-select:none;-webkit-user-select:none;-webkit-touch-callout:none}
#yuki.hop{transition:transform .5s cubic-bezier(.3,1.5,.5,1)}
#yuki,#yuki .yk-btn,#yuki svg{pointer-events:none}
#yuki .yk-btn{all:unset;display:block;width:100%;height:100%;cursor:grab;position:relative;-webkit-tap-highlight-color:transparent;pointer-events:none}
/* only the cat itself takes taps, so the empty corners never block the page */
#yuki svg *{pointer-events:visiblePainted}
#yuki .yk-btn:focus-visible{outline:2px solid var(--ink);outline-offset:2px;border-radius:14px}
#yuki.dragging .yk-btn{cursor:grabbing}
#yuki svg{position:absolute;inset:0;width:100%;height:100%;overflow:visible;filter:drop-shadow(0 3px 4px rgba(0,0,0,.14))}
#yuki .yk-walk{display:none}
#yuki.walking .yk-sit{display:none}
#yuki.walking .yk-walk{display:block}
#yuki.left .yk-walk{transform:scaleX(-1)}
#yuki .yk-shadow{position:absolute;left:18%;right:18%;bottom:-3px;height:7px;border-radius:50%;background:rgba(0,0,0,.12);filter:blur(1.5px)}

/* sitting: breathing, tail, blinking, ears */
#yuki .yk-sit .yk-chest{transform-origin:60px 116px;animation:yk-breathe 3.6s ease-in-out infinite}
#yuki .yk-tail{transform-origin:80px 112px;animation:yk-tail 4.2s ease-in-out infinite}
#yuki .yk-eye{transform-box:fill-box;transform-origin:center;transition:transform .08s}
#yuki.blink .yk-eye{transform:scaleY(.1)}
#yuki .yk-pupils{transition:transform .25s ease-out}
#yuki .yk-earl{transform-origin:40px 26px}
#yuki .yk-earr{transform-origin:80px 26px}
#yuki.twitch .yk-earl{animation:yk-twitch .45s ease-in-out}
#yuki.twitch-r .yk-earr{animation:yk-twitch-r .45s ease-in-out}
#yuki .yk-head{transform-origin:60px 64px;transition:transform .5s ease}
#yuki.look .yk-head{transform:rotate(-7deg)}
#yuki.look-r .yk-head{transform:rotate(7deg)}
#yuki .yk-closed{display:none}
#yuki.sleep .yk-open,#yuki.groom .yk-open{display:none}
#yuki.sleep .yk-closed,#yuki.groom .yk-closed{display:inline}
#yuki.sleep .yk-head{transform:translateY(4px) rotate(-5deg)}
#yuki.sleep .yk-tail{animation-duration:9s}
#yuki .yk-paw{transform-origin:67px 88px;transition:transform .35s ease}
#yuki.groom .yk-paw{transform:translate(-2px,-24px) rotate(-28deg)}
#yuki.groom .yk-head{transform:rotate(6deg) translateY(1px)}
#yuki.wave .yk-paw{animation:yk-wave 1.1s ease-in-out 2}
#yuki.dragging svg{animation:yk-dangle 1s ease-in-out infinite;transform-origin:50% 8%}
#yuki.dragging .yk-pupils{transform-box:fill-box;transform-origin:center;transform:scale(1.2)}
#yuki.land svg{animation:yk-land .35s ease-out}
#yuki.happy svg{animation:yk-hop .55s ease-out}

/* walking */
#yuki .yk-leg{animation:yk-step .52s ease-in-out infinite alternate}
#yuki .yk-leg.b{animation-delay:-.52s}
#yuki .yk-walk .yk-wbody{animation:yk-bob .26s ease-in-out infinite alternate}
#yuki .yk-wtail{transform-origin:30px 76px;animation:yk-wtail 1.04s ease-in-out infinite alternate}

/* little bubbles above Yuki */
#yuki .yk-say{position:absolute;bottom:calc(100% + 6px);left:50%;transform:translateX(-50%);width:max-content;max-width:200px;background:#fff;color:var(--fg);
  border:1px solid var(--line2);border-radius:14px;padding:7px 11px;font-size:12px;line-height:1.35;box-shadow:0 6px 18px rgba(0,0,0,.1);pointer-events:none;
  opacity:0;transition:opacity .25s}
#yuki .yk-say.on{opacity:1}
#yuki .yk-say.r{left:auto;right:-4px;transform:none}
#yuki .yk-say.r:after{left:auto;right:24px}
#yuki .yk-say.l{left:-4px;transform:none}
#yuki .yk-say.l:after{left:30px}
#yuki .yk-say.below{bottom:auto;top:calc(100% + 8px)}
#yuki .yk-say.below:after{top:auto;bottom:100%;border-top-color:transparent;border-bottom-color:#fff}
#yuki .yk-say:after{content:"";position:absolute;top:100%;left:50%;margin-left:-6px;border:6px solid transparent;border-top-color:#fff}
#yuki .yk-zz{position:absolute;right:4%;top:-6%;font:700 13px/1 var(--body);color:var(--mute);pointer-events:none;display:none}
#yuki.sleep .yk-zz{display:block}
#yuki .yk-zz i{font-style:normal;position:absolute;opacity:0;animation:yk-z 2.7s ease-out infinite}
#yuki .yk-zz i:nth-child(2){animation-delay:.9s;font-size:11px}
#yuki .yk-zz i:nth-child(3){animation-delay:1.8s;font-size:9px}
#yuki .yk-think{position:absolute;right:-8%;top:-14%;display:none;background:#fff;border:1px solid var(--line2);border-radius:12px;padding:5px 8px;gap:3px;pointer-events:none;box-shadow:0 4px 12px rgba(0,0,0,.08)}
#yuki.thinking .yk-think{display:flex}
#yuki .yk-think i{width:5px;height:5px;border-radius:50%;background:var(--mute);animation:yk-dot 1s ease-in-out infinite}
#yuki .yk-think i:nth-child(2){animation-delay:.15s}
#yuki .yk-think i:nth-child(3){animation-delay:.3s}

/* the chat */
#ykPanel{position:fixed;right:24px;bottom:24px;z-index:46;width:380px;max-width:calc(100vw - 32px);height:min(540px,calc(100vh - 150px));
  background:#fff;border:1px solid var(--line2);border-radius:20px;box-shadow:0 18px 50px rgba(0,0,0,.16);display:flex;flex-direction:column;overflow:hidden}
#ykPanel[hidden]{display:none}
#ykPanel .yk-top{display:flex;align-items:center;gap:8px;padding:12px 12px 10px 16px;border-bottom:1px solid var(--line)}
#ykPanel .yk-top b{font-family:var(--display);font-size:24px;font-weight:400;letter-spacing:.03em;line-height:1;display:block}
#ykPanel .yk-top span{font-size:11.5px;color:var(--mute)}
#ykPanel .yk-top .sp{flex:1}
#ykPanel .yk-top button{border:1px solid var(--line2);background:#fff;border-radius:999px;padding:5px 10px;font-size:11.5px;cursor:pointer;white-space:nowrap}
#ykPanel .yk-top button[aria-pressed="true"]{background:var(--ink);color:var(--onink);border-color:var(--ink)}
#ykPanel .yk-top .yk-x{width:32px;height:32px;padding:0;font-size:18px;line-height:1}
#ykPanel .yk-log{flex:1;overflow-y:auto;padding:14px 14px 4px;display:grid;gap:10px;align-content:start;overscroll-behavior:contain}
#ykPanel .msg{max-width:88%}
#ykPanel .msg.wait{color:var(--mute)}
#ykPanel .yk-hi{font-size:13px;color:var(--mute);background:var(--panel);border-radius:14px;padding:10px 13px}
#ykPanel .qchips{padding:0 14px;margin:6px 0 4px}
#ykPanel form{display:flex;gap:8px;padding:10px 12px 12px;border-top:1px solid var(--line)}
#ykPanel form .inp{flex:1;min-width:0}
#ykPanel .yk-off{padding:16px;font-size:13px;color:var(--mute)}

@media (max-width:860px){
  #yuki{--yk:66px}
  #ykPanel{left:8px;right:8px;width:auto;max-width:none;bottom:calc(84px + env(safe-area-inset-bottom,0px));height:min(62vh,520px);border-radius:18px}
}
@media print{#yuki,#ykPanel{display:none!important}}
@media (prefers-reduced-motion:reduce){
  #yuki *,#yuki svg{animation:none!important;transition:none!important}
  #yuki.hop{transition:none}
}

@keyframes yk-breathe{0%,100%{transform:scale(1)}50%{transform:scale(1.02,1.03)}}
@keyframes yk-tail{0%,100%{transform:rotate(0)}30%{transform:rotate(-9deg)}60%{transform:rotate(5deg)}}
@keyframes yk-twitch{0%,100%{transform:rotate(0)}40%{transform:rotate(-14deg)}70%{transform:rotate(4deg)}}
@keyframes yk-twitch-r{0%,100%{transform:rotate(0)}40%{transform:rotate(14deg)}70%{transform:rotate(-4deg)}}
@keyframes yk-wave{0%,100%{transform:translate(0,0) rotate(0)}25%,75%{transform:translate(2px,-26px) rotate(-38deg)}50%{transform:translate(2px,-26px) rotate(-12deg)}}
@keyframes yk-dangle{0%,100%{transform:rotate(-7deg)}50%{transform:rotate(7deg)}}
@keyframes yk-land{0%{transform:scale(1.08,.86) translateY(4px)}100%{transform:none}}
@keyframes yk-hop{0%,100%{transform:none}40%{transform:translateY(-12px) scale(.97,1.04)}70%{transform:translateY(0) scale(1.05,.95)}}
@keyframes yk-step{from{transform:rotate(-19deg)}to{transform:rotate(19deg)}}
@keyframes yk-bob{from{transform:translateY(0)}to{transform:translateY(-2px)}}
@keyframes yk-wtail{from{transform:rotate(-8deg)}to{transform:rotate(10deg)}}
@keyframes yk-z{0%{opacity:0;transform:translate(0,0)}25%{opacity:1}100%{opacity:0;transform:translate(10px,-20px)}}
@keyframes yk-dot{0%,100%{transform:translateY(0);opacity:.5}50%{transform:translateY(-3px);opacity:1}}
