/* Tint chat assistant, ported from prototype-v10.html. */
.tb .part{transition:opacity .22s ease}
.tb .blinkA,.tb .blinkB{transform-box:fill-box;transform-origin:50% 50%}
.tb .blinkA{animation:tb_blink 5.3s infinite}
.tb .blinkB{animation:tb_blink 7.9s infinite 1.7s}
@keyframes tb_blink{0%,92%,97%,100%{transform:scaleY(1)}94.5%{transform:scaleY(.06)}}
.tb .scan{animation:tb_scan .7s ease-in-out infinite alternate}
@keyframes tb_scan{from{transform:translateX(-3px)}to{transform:translateX(3px)}}
.tb .lookAround{animation:tb_lookAround 2.2s ease-in-out}
@keyframes tb_lookAround{0%,100%{transform:translate(0,0)}20%{transform:translate(-4px,-1px)}45%{transform:translate(-4px,-1px)}60%{transform:translate(4px,-2px)}85%{transform:translate(4px,-2px)}}
.tb .body{transform-box:view-box;transform-origin:100px 190px}
.tb .breathe{animation:tb_breathe 3.8s ease-in-out infinite}
@keyframes tb_breathe{0%,100%{transform:translateY(0) scale(1,1)}50%{transform:translateY(-3px) scale(1.012,.99)}}
.tb .bounce{animation:tb_bounce .7s cubic-bezier(.3,.7,.3,1) 2}
@keyframes tb_bounce{0%,100%{transform:translateY(0) scale(1,1)}30%{transform:translateY(-14px) scale(.97,1.04)}60%{transform:translateY(0) scale(1.05,.95)}}
.tb .jump{animation:tb_jump .5s cubic-bezier(.2,.8,.3,1.4) 1}
@keyframes tb_jump{0%{transform:scale(1,1)}25%{transform:translateY(4px) scale(1.08,.9)}55%{transform:translateY(-18px) scale(.94,1.08)}100%{transform:none}}
.tb .party{animation:tb_party .55s ease-in-out 4}
@keyframes tb_party{0%,100%{transform:translateY(0) rotate(0)}25%{transform:translateY(-12px) rotate(-6deg)}75%{transform:translateY(-12px) rotate(6deg)}}
.tb .wiggle{animation:tb_wiggle .5s ease-in-out 3}
@keyframes tb_wiggle{0%,100%{transform:rotate(0)}25%{transform:rotate(-7deg)}75%{transform:rotate(7deg)}}
.tb .shake{animation:tb_shake .18s linear 8}
@keyframes tb_shake{0%,100%{transform:translateX(0) translateY(0)}50%{transform:translateX(2px) translateY(-2px)}}
.tb .lean{animation:none;transform:rotate(5deg) translateX(4px)}
.tb .nodA{animation:tb_nodA .25s ease-out}
.tb .nodB{animation:tb_nodB .25s ease-out}
@keyframes tb_nodA{0%{transform:rotate(5deg) translateX(4px)}50%{transform:rotate(5deg) translate(4px,4px)}100%{transform:rotate(5deg) translateX(4px)}}
@keyframes tb_nodB{0%{transform:rotate(5deg) translateX(4px)}50%{transform:rotate(5deg) translate(4px,4px)}100%{transform:rotate(5deg) translateX(4px)}}
.tb .ponder{animation:tb_ponder 2.4s ease-in-out infinite}
@keyframes tb_ponder{0%,100%{transform:rotate(-3deg)}50%{transform:rotate(3deg)}}
.tb .busy{animation:tb_busy .9s ease-in-out infinite}
@keyframes tb_busy{0%,100%{transform:translateY(0) rotate(-2deg)}50%{transform:translateY(-4px) rotate(2deg)}}
.tb .droop{transform:rotate(-3deg) translateY(3px);transition:transform .5s}
.tb .slowNod{animation:tb_slowNod 1.6s ease-in-out 2}
@keyframes tb_slowNod{0%,100%{transform:rotate(0)}50%{transform:translateY(4px) rotate(-2deg)}}
.tb .bow{animation:tb_bow 1.4s ease-in-out 1}
@keyframes tb_bow{0%,100%{transform:rotate(0)}40%,60%{transform:rotate(-10deg) translateY(6px)}}
.tb .wobble{animation:tb_wobble .8s ease-in-out infinite}
@keyframes tb_wobble{0%,100%{transform:rotate(-8deg)}50%{transform:rotate(8deg)}}
.tb .sleep{animation:tb_sleep 4.5s ease-in-out infinite}
@keyframes tb_sleep{0%,100%{transform:translateY(4px) scale(1.02,.97) rotate(-3deg)}50%{transform:translateY(6px) scale(1.04,.95) rotate(-3deg)}}
.tb .sway{animation:tb_sway 1.1s ease-in-out infinite}
@keyframes tb_sway{0%,100%{transform:rotate(-5deg)}50%{transform:rotate(5deg)}}
.tb .stretch{animation:tb_stretch 1.8s ease-in-out 1}
@keyframes tb_stretch{0%,100%{transform:scale(1,1)}40%,60%{transform:scale(.94,1.1) translateY(-6px)}}
.tb .tilt{animation:none;transform:rotate(-9deg);transition:transform .4s}
.tb .tw{transform-box:fill-box;transform-origin:center;animation:tb_tw 1.4s ease-in-out infinite}
@keyframes tb_tw{0%,100%{transform:scale(.6);opacity:.6}50%{transform:scale(1.15);opacity:1}}
.tb .pulse{transform-box:fill-box;transform-origin:center;animation:tb_pulse .6s ease-in-out infinite}
@keyframes tb_pulse{0%,100%{transform:scale(.9)}50%{transform:scale(1.15)}}
.tb .spin2{transform-box:fill-box;transform-origin:center;animation:tb_spin 1s linear infinite}
.tb .bob{animation:tb_bob 1s ease-in-out infinite}
@keyframes tb_bob{0%,100%{transform:translateY(0)}50%{transform:translateY(-5px)}}
.tb .up1,.tb .up2,.tb .up3{animation:tb_up 2.2s ease-out infinite}
.tb .up2{animation-delay:.6s}
.tb .up3{animation-delay:1.2s}
@keyframes tb_up{0%{transform:translateY(8px);opacity:0}25%{opacity:1}100%{transform:translateY(-26px);opacity:0}}
.tb .fall0,.tb .fall1,.tb .fall2,.tb .fall3{animation:tb_fall 1.8s linear infinite}
.tb .fall1{animation-delay:.3s}
.tb .fall2{animation-delay:.7s}
.tb .fall3{animation-delay:1.1s}
@keyframes tb_fall{0%{transform:translateY(-10px);opacity:0}15%{opacity:1}100%{transform:translateY(200px) rotate(160deg);opacity:0}}
.tb .d1,.tb .d2,.tb .d3{animation:tb_dot 1.1s ease-in-out infinite}
.tb .d2{animation-delay:.18s}
.tb .d3{animation-delay:.36s}
@keyframes tb_dot{0%,100%{opacity:.25}50%{opacity:1}}
.tb .search{animation:tb_search 1.4s ease-in-out infinite}
@keyframes tb_search{0%,100%{transform:translate(0,0)}25%{transform:translate(-14px,6px)}50%{transform:translate(-4px,14px)}75%{transform:translate(8px,6px)}}
.tb .wave{transform-box:fill-box;animation:tb_wave .45s ease-in-out infinite alternate}
@keyframes tb_wave{from{transform:rotate(-25deg)}to{transform:rotate(25deg)}}
.tb .envIdle{transform:none}
.tb .envFly{animation:tb_fly 2.4s cubic-bezier(.5,0,.6,1) 1 forwards}
@keyframes tb_fly{0%{transform:none}35%{transform:translate(4px,-8px) rotate(-4deg)}100%{transform:translate(70px,-140px) rotate(18deg) scale(.6);opacity:0}}
.tb .flashOff{opacity:0;transform-box:fill-box;transform-origin:center}
.tb .flashPop{transform-box:fill-box;transform-origin:center;animation:tb_pop .9s ease-out 2}
@keyframes tb_pop{0%{opacity:0;transform:scale(.4)}30%{opacity:1;transform:scale(1.1)}100%{opacity:0;transform:scale(1.5)}}
.tb .lensIdle{transform-box:view-box;transform-origin:100px 132px}
.tb .lensSpin{transform-box:view-box;transform-origin:100px 132px;animation:tb_spin 1.1s linear infinite}
@keyframes tb_spin{to{transform:rotate(360deg)}}
.tb .petalIdle{transform-box:view-box;transform-origin:100px 100px;animation:tb_petal 6s ease-in-out infinite}
.tb .petalHappy{transform-box:view-box;transform-origin:100px 100px;animation:tb_petalHappy .8s ease-in-out 3}
.tb .petalSpin{transform-box:view-box;transform-origin:100px 100px;animation:tb_spin 2.4s linear infinite}
@keyframes tb_petal{0%,100%{transform:rotate(0)}50%{transform:rotate(4deg)}}
@keyframes tb_petalHappy{0%,100%{transform:scale(1) rotate(0)}50%{transform:scale(1.08) rotate(12deg)}}
.tb .rayIdle{animation:tb_rays 3s ease-in-out infinite}
.tb .rayBusy{animation:tb_rays .6s ease-in-out infinite}
@keyframes tb_rays{0%,100%{opacity:.75}50%{opacity:1}}
.tb .fanIdle{transform-box:view-box;transform-origin:100px 170px}
.tb .fanOpen{transform-box:view-box;transform-origin:100px 170px;animation:tb_fan .7s ease-in-out 3}
@keyframes tb_fan{0%,100%{transform:scale(1)}50%{transform:scale(1.07) rotate(3deg)}}
.tb .veil{animation:tb_veil 4s ease-in-out infinite;transform-box:fill-box;transform-origin:0 0}
@keyframes tb_veil{0%,100%{transform:rotate(0)}50%{transform:rotate(2deg)}}
.tb .msg{animation:tb_msgin .4s cubic-bezier(.2,.7,.2,1) both}

.tb-acts{align-self:flex-start;display:flex;flex-wrap:wrap;gap:6px;max-width:92%;animation:tb_msgin .4s .1s both}
.tb-act{display:inline-flex;align-items:center;gap:6px;border:1px solid #D9C7AE;background:#FFFFFF;color:#2E282C;border-radius:999px;padding:7px 12px 7px 14px;font:inherit;font-size:.82rem;cursor:pointer;transition:background .25s,transform .3s cubic-bezier(.2,.7,.2,1),border-color .25s}
.tb-act:hover{background:#F7F0E6;border-color:#A88E66;transform:translateY(-1px)}
.tb-act svg{flex-shrink:0}
.tb-guide{position:fixed;right:22px;bottom:calc(108px + env(safe-area-inset-bottom,0px));z-index:72;width:min(320px,calc(100vw - 28px));background:#FFFFFF;color:#2E282C;border:1px solid #ECE4E1;border-radius:18px;box-shadow:0 24px 50px -24px rgba(46,40,44,.55);padding:14px 14px 12px 16px;opacity:0;transform:translateY(10px) scale(.96);transform-origin:100% 100%;transition:opacity .4s,transform .5s cubic-bezier(.2,.7,.2,1)}
.tb-guide[hidden]{display:block!important;visibility:hidden}
.tb-guide.on{opacity:1;transform:none;visibility:visible}
.tb-gtext{font-size:.9rem;line-height:1.45;margin-bottom:10px}
.tb-gtext b{font-weight:500}
.tb-gbtns{display:flex;gap:8px;align-items:center}
.tb-gback{border:0;background:#2E282C;color:#FAF7F6;border-radius:999px;padding:8px 16px;font:inherit;font-size:.85rem;cursor:pointer}
.tb-gx{margin-left:auto;width:32px;height:32px;border-radius:50%;border:1px solid #ECE4E1;background:#fff;cursor:pointer;font-size:1.1rem;color:#2E282C}
.tb.guiding .tb-invite{opacity:0;pointer-events:none}
.tb-spot{position:relative;animation:tb_spot 2.8s cubic-bezier(.2,.7,.2,1) 1;border-radius:14px}
@keyframes tb_spot{0%{box-shadow:0 0 0 0 rgba(201,164,107,0)}15%{box-shadow:0 0 0 6px rgba(201,164,107,.55)}60%{box-shadow:0 0 0 12px rgba(201,164,107,.25)}100%{box-shadow:0 0 0 18px rgba(201,164,107,0)}}
@media (max-width:980px){.tb-guide{bottom:calc(158px + env(safe-area-inset-bottom,0px))}}
@keyframes tb_msgin{from{opacity:0;transform:translateY(8px)}to{opacity:1;transform:none}}
.tb .statusDot{animation:tb_dot 1.1s ease-in-out infinite}
@media (prefers-reduced-motion: reduce){.tb *{animation:none!important}}

.tb{--tb-ink:#2E282C;--tb-paper:#FFFFFF;--tb-soft:#F3EEEC;--tb-line:#ECE4E1;font-family:var(--sans)}
.tb-launch{position:fixed;right:22px;bottom:calc(22px + env(safe-area-inset-bottom,0px));z-index:70;width:72px;height:72px;border-radius:50%;border:1px solid var(--tb-line);background:#FBF7F5;box-shadow:0 18px 36px -18px rgba(46,40,44,.55);display:grid;place-items:center;cursor:pointer;padding:0;transition:transform .45s cubic-bezier(.2,.7,.2,1),opacity .3s}
.tb-launch:hover{transform:translateY(-3px) scale(1.04)}
.tb-launch svg{width:66px;height:66px;overflow:visible}
.tb-ping{position:absolute;top:4px;right:4px;width:12px;height:12px;border-radius:50%;background:#C9A46B;border:2px solid #FBF7F5}
.tb-invite{position:fixed;right:104px;bottom:calc(42px + env(safe-area-inset-bottom,0px));z-index:69;background:var(--tb-paper);color:var(--tb-ink);border:1px solid var(--tb-line);border-radius:999px;padding:9px 16px;font-size:.88rem;box-shadow:0 12px 26px -16px rgba(46,40,44,.5);opacity:0;transform:translateX(10px);transition:opacity .5s,transform .5s cubic-bezier(.2,.7,.2,1);pointer-events:none}
.tb-invite b{font-weight:500}
.tb-tag{display:flex;align-items:center;gap:10px;pointer-events:auto;cursor:pointer;font:inherit;text-align:left;padding:10px 18px 10px 14px;bottom:calc(36px + env(safe-area-inset-bottom,0px));transition:opacity .5s,transform .5s cubic-bezier(.2,.7,.2,1),box-shadow .3s}
.tb-tag:hover{box-shadow:0 16px 30px -14px rgba(46,40,44,.55);transform:translateX(-3px)}
.tb-tag::after{content:"";position:absolute;right:-7px;top:50%;width:12px;height:12px;background:#FFFFFF;border-right:1px solid #ECE4E1;border-top:1px solid #ECE4E1;transform:translateY(-50%) rotate(45deg)}
.tb-tagtext{display:flex;flex-direction:column;line-height:1.25}
.tb-tagtext b{font-size:.92rem;font-weight:500}
.tb-tagtext span{font-size:.78rem;color:#6B6166}
.tb-live{width:9px;height:9px;border-radius:50%;background:#7E9C82;box-shadow:0 0 0 0 rgba(126,156,130,.5);animation:tb_live 2s ease-out infinite;flex-shrink:0}
@keyframes tb_live{0%{box-shadow:0 0 0 0 rgba(126,156,130,.5)}100%{box-shadow:0 0 0 9px rgba(126,156,130,0)}}
.tb-tag.hello{animation:tb_tagHello .9s cubic-bezier(.2,.7,.2,1) 2}
@keyframes tb_tagHello{0%,100%{transform:none}40%{transform:translateY(-5px)}}
.tb-invite.on{opacity:1;transform:none}
.tb.open .tb-launch,.tb.open .tb-invite{opacity:0;pointer-events:none;transform:scale(.6)}
.tb-panel{padding:0;margin:0;position:fixed;right:22px;bottom:calc(22px + env(safe-area-inset-bottom,0px));z-index:75;width:min(390px,calc(100vw - 28px));height:min(620px,calc(100vh - 110px));background:var(--tb-paper);color:var(--tb-ink);border:1px solid var(--tb-line);border-radius:24px;box-shadow:0 40px 80px -30px rgba(46,40,44,.55);display:flex;flex-direction:column;overflow:hidden;transform-origin:100% 100%;opacity:0;transform:translateY(16px) scale(.92);transition:opacity .35s ease,transform .5s cubic-bezier(.2,.7,.2,1)}
.tb-panel[hidden]{display:flex!important;visibility:hidden}
.tb.open .tb-panel{opacity:1;transform:none;visibility:visible}
.tb-head{display:flex;align-items:center;gap:12px;padding:12px 14px 12px 12px;border-bottom:1px solid #F0E9E6;background:#FBF7F5}
.tb-face{width:78px;height:78px;border-radius:50%;background:#F1EBE8;border:0;padding:0;cursor:pointer;display:grid;place-items:center;flex-shrink:0}
.tb-face svg{width:76px;height:76px;overflow:visible}
.tb-id{flex:1;min-width:0}
.tb-name{font-family:var(--serif);font-size:1.6rem;line-height:1}
.tb-mood{font-size:.8rem;color:#6B6166;margin-top:4px;transition:opacity .3s}
.tb-x{width:40px;height:40px;border-radius:50%;border:1px solid var(--tb-line);background:var(--tb-paper);cursor:pointer;font-size:1.3rem;color:var(--tb-ink)}
.tb-log{flex:1;min-height:0;overflow-y:auto;padding:16px;display:flex;flex-direction:column;gap:10px;background:#FFFDFC;scroll-behavior:smooth}
.tb-m{max-width:86%;padding:10px 14px;border-radius:16px;font-size:.93rem;line-height:1.5;animation:tb_msgin .4s cubic-bezier(.2,.7,.2,1) both}
.tb-m.bot{background:var(--tb-soft);border-bottom-left-radius:4px;align-self:flex-start}
.tb-m.you{background:var(--tb-ink);color:#FAF7F6;border-bottom-right-radius:4px;align-self:flex-end}
.tb-status{align-self:flex-start;display:flex;align-items:center;gap:8px;font-size:.82rem;color:#6B5A45;font-style:italic;animation:tb_msgin .3s both}
.tb-status i{width:7px;height:7px;border-radius:50%;background:#A88E66;animation:tb_dot 1.1s ease-in-out infinite}
.tb-sent{align-self:flex-start;display:flex;align-items:center;gap:6px;font-size:.78rem;color:#8C7350;margin-top:-4px}
.tb-mail{align-self:flex-start;width:86%;background:var(--tb-paper);border:1px solid var(--tb-line);border-radius:14px;padding:12px;display:grid;gap:8px;animation:tb_msgin .4s both}
.tb-mail input{height:40px;border:1px solid #E6DEDB;border-radius:10px;padding:0 12px;font:inherit;font-size:.9rem;color:var(--tb-ink);background:#fff}
.tb-mail input:focus,.tb-form input:focus{outline:none;border-color:#A88E66;box-shadow:0 0 0 3px rgba(168,142,102,.2)}
.tb-mail button{height:40px;border-radius:999px;border:0;background:var(--tb-ink);color:#FAF7F6;font:inherit;font-size:.9rem;cursor:pointer}
.tb-mail .err{font-size:.78rem;color:#A2534A;display:none}
.tb-chiphead{display:flex;align-items:center;justify-content:space-between;padding:8px 16px 0;font-size:.74rem;color:#8C7350;letter-spacing:.01em}
#tbSetName{transition:opacity .18s}
#tbSetName.tb-out{opacity:0}
.tb-dots{display:flex;gap:5px}
.tb-dots button{width:7px;height:7px;border-radius:50%;border:0;padding:0;background:#E3D8CC;cursor:pointer;transition:background .3s,transform .3s}
.tb-dots button[aria-current="true"]{background:#A88E66;transform:scale(1.25)}
.tb-timer{height:2px;margin:6px 16px 0;background:#F1EBE8;border-radius:2px;overflow:hidden}
.tb-timer i{display:block;height:100%;width:100%;background:#D9C7AE;transform-origin:left;animation:tb_timer 60s linear forwards}
@keyframes tb_timer{from{transform:scaleX(0)}to{transform:scaleX(1)}}
.tb-chips button{animation:tb_chipin .45s cubic-bezier(.2,.7,.2,1) both}
.tb-chips.tb-out button{opacity:0;transform:translateY(6px);transition:opacity .2s,transform .2s}
@keyframes tb_chipin{from{opacity:0;transform:translateY(8px)}to{opacity:1;transform:none}}
.tb-chips{display:flex;gap:6px;overflow-x:auto;padding:8px 14px 0;scrollbar-width:none}
.tb-chips::-webkit-scrollbar{display:none}
.tb-chips button{flex-shrink:0;border:1px solid #E6DEDB;background:var(--tb-paper);border-radius:999px;padding:7px 12px;font:inherit;font-size:.8rem;color:#5E5559;cursor:pointer;transition:background .2s,transform .3s}
.tb-chips button:hover{background:var(--tb-soft);transform:translateY(-1px)}
.tb-form{display:flex;gap:8px;padding:10px 14px}
.tb-form input{flex:1;min-width:0;height:46px;border:1px solid #E6DEDB;border-radius:999px;padding:0 16px;font:inherit;font-size:.93rem;color:var(--tb-ink);background:#fff}
.tb-send{width:46px;height:46px;border-radius:50%;border:0;background:var(--tb-ink);display:grid;place-items:center;cursor:pointer;flex-shrink:0}
.tb-send[disabled]{opacity:.45;cursor:default}
.tb-foot{font-size:.72rem;color:#8C8286;text-align:center;padding:0 14px 12px}
@keyframes tb_msgin{from{opacity:0;transform:translateY(8px)}to{opacity:1;transform:none}}
@media (max-width:980px){.tb-launch{bottom:calc(86px + env(safe-area-inset-bottom,0px));width:62px;height:62px}.tb-launch svg{width:56px;height:56px}.tb-invite{bottom:calc(102px + env(safe-area-inset-bottom,0px));right:92px}}
@media (max-width:560px){.tb-panel{right:8px;left:8px;width:auto;bottom:calc(8px + env(safe-area-inset-bottom,0px));height:calc(100vh - 80px)}.tb-tag{padding:8px 14px 8px 12px}.tb-tagtext span{display:none}}
:root[data-theme="dark"] .tb-panel,:root[data-theme="dark"] .tb-invite{--tb-paper:#FFFFFF;--tb-ink:#2E282C}
