.companion-visual{cursor:pointer;outline:none}
.voice-settings{font-size:11px;color:#b9cadc;margin-bottom:12px}.voice-settings label{display:block;margin:10px 0}.voice-settings select{width:100%;background:#102337;color:white}.voice-settings small{display:block;margin:8px 0}
.execution-bar{position:fixed;z-index:110;bottom:18px;left:280px;right:325px;background:#143548;border:1px solid #5ce9d9;border-radius:12px;padding:12px;display:flex;align-items:center;gap:12px}.execution-bar span{flex:1;max-height:90px;overflow:auto;font-size:12px}.execution-bar.hidden{display:none}.execution-bar button{flex-shrink:0}
#execution-dialog,#workspace-dialog{max-height:85vh;overflow:auto;width:min(700px,85vw)}
#execution-detail{white-space:pre-wrap;max-height:220px;overflow:auto;color:#c3d7e9;font:inherit}#workspace-dialog label{display:block;margin:14px 0}#workspace-dialog input,#workspace-dialog textarea{display:block;width:100%;background:#102337;color:white;padding:10px;border:1px solid #375168;border-radius:8px}
.companion{overflow-y:auto;overflow-x:hidden}
.companion-visual{flex-shrink:0;isolation:isolate;border-radius:16px;background:#07111f;height:280px}
.lingxi-figure{display:none;position:absolute;width:100%;aspect-ratio:1;bottom:18px;z-index:2;background-image:url('assets/lingxi-expressions-v2.png');background-size:300% 200%;background-repeat:no-repeat;transform:translate(var(--look-x,0px),var(--look-y,0px));transition:transform .22s ease;transform-origin:50% 90%;mask-image:linear-gradient(#000 88%,transparent 100%)}
.pet-loaded .lingxi-figure{display:block;animation:pet-breath 4.5s ease-in-out infinite}
.pet-loaded>img,.pet-loaded>.sparkles,.pet-loaded>.scan-ring{display:none}
.lingxi-figure[data-expression="idle"]{background-position:0 0}
.lingxi-figure[data-expression="blink"]{background-position:50% 0}
.lingxi-figure[data-expression="talk"]{animation:pet-mouth .48s steps(1,end) infinite,pet-breath 4.5s ease-in-out infinite}
.lingxi-figure[data-expression="think"],.lingxi-figure[data-expression="concern"]{background-position:0 100%;animation:pet-think 3.5s ease-in-out infinite}
.lingxi-figure[data-expression="greet"]{background-position:50% 100%;animation:pet-hello 1.1s ease-in-out}
.lingxi-figure[data-expression="celebrate"]{background-position:100% 100%;animation:pet-cheer 1.4s ease-in-out 2}
.pet-caption{position:absolute;bottom:3px;z-index:4;left:0;right:0;text-align:center;color:#c7eee9;font-size:10px;letter-spacing:.04em}
.pet-play{display:grid;grid-template-columns:repeat(4,1fr);gap:4px;margin:0 0 12px}
.pet-play button{padding:8px 1px;font-size:10px;color:#bdcddd;border:1px solid #203449;border-radius:8px;background:#0b192b;cursor:pointer}
.pet-play button:hover,.pet-play button:focus-visible{background:#19364a;border-color:#5ce9d9;color:white}
@keyframes pet-mouth{0%,100%{background-position:0 0}40%{background-position:100% 0}}
@keyframes pet-breath{0%,100%{transform:translate(var(--look-x,0px),var(--look-y,0px)) scale(1)}50%{transform:translate(var(--look-x,0px),calc(var(--look-y,0px) - 2px)) scale(1.006)}}
@keyframes pet-think{0%,100%{transform:rotate(-.4deg)}50%{transform:rotate(.5deg) translateY(-2px)}}
@keyframes pet-hello{0%,100%{transform:rotate(0)}35%{transform:rotate(-1.8deg) translateY(-4px)}70%{transform:rotate(1deg)}}
@keyframes pet-cheer{0%,100%{transform:translateY(0)}45%{transform:translateY(-9px)}70%{transform:translateY(-2px)}}
@media(prefers-reduced-motion:reduce){.lingxi-figure{animation:none!important;transition:none!important}}
.operation-progress{position:fixed;z-index:100;top:12px;left:50%;transform:translateX(-50%);padding:14px 24px;border:1px solid #5ce9d9;border-radius:14px;background:#102b43;color:white;box-shadow:0 8px 30px #0008}
.operation-busy [data-do],.operation-busy [data-action],.operation-busy [data-scene],.operation-busy [data-project]{pointer-events:none;opacity:.55}
.companion-visual.speaking img{animation:listen-lean 1s ease-in-out infinite}
.companion-visual:focus-visible{border-radius:16px;box-shadow:inset 0 0 0 2px var(--cyan)}
.sparkles{position:absolute;inset:20px 18px 28px;z-index:3;pointer-events:none}
.sparkles i{position:absolute;width:6px;height:6px;border-radius:50%;background:#d7fff9;box-shadow:0 0 12px var(--cyan);animation:sparkle 2.8s ease-in-out infinite}
.sparkles i:nth-child(1){left:14%;top:36%}.sparkles i:nth-child(2){right:13%;top:21%;animation-delay:.8s}.sparkles i:nth-child(3){right:20%;bottom:22%;animation-delay:1.6s}
.companion-visual.ready img{animation:ready-float 2.6s ease-in-out infinite}
.companion-visual.boardroom img{animation:listen-lean 3.2s ease-in-out infinite}
.companion-visual.working img{animation:thinking 1.8s ease-in-out infinite}
.companion-visual.done img{animation:celebrate 1.25s ease-in-out infinite}
.companion-visual.error img{animation:concerned 2.1s ease-in-out infinite}
.companion-visual.nudge img{animation:nudge .85s cubic-bezier(.2,.9,.25,1)}
.companion-controls{display:grid;grid-template-columns:1fr 38px;gap:6px;margin:-2px 0 10px}
.companion-controls button{border:1px solid rgba(92,233,217,.18);border-radius:9px;background:rgba(92,233,217,.07);color:#d6f7f2;padding:8px;cursor:pointer;font-size:10px}
.companion-controls button:hover{background:rgba(92,233,217,.14);transform:translateY(-1px)}
@keyframes sparkle{0%,100%{opacity:.15;transform:scale(.5)}50%{opacity:1;transform:scale(1.3)}}
@keyframes ready-float{0%,100%{transform:translateY(0) rotate(0)}50%{transform:translateY(-8px) rotate(1deg)}}
@keyframes listen-lean{0%,100%{transform:translateX(0) rotate(0)}50%{transform:translateX(-5px) rotate(-1.4deg)}}
@keyframes thinking{0%,100%{transform:translateY(0) rotate(-1deg)}50%{transform:translateY(-7px) rotate(1.5deg)}}
@keyframes celebrate{0%,100%{transform:translateY(0) scale(1)}45%{transform:translateY(-13px) scale(1.025)}70%{transform:translateY(-4px) scale(.995)}}
@keyframes concerned{0%,100%{transform:translateX(0)}20%{transform:translateX(-2px)}40%{transform:translateX(2px)}60%{transform:translateX(-1px)}}
@keyframes nudge{0%{transform:translateY(0) rotate(0)}35%{transform:translateY(-12px) rotate(-2deg)}65%{transform:translateY(-5px) rotate(2deg)}100%{transform:translateY(0) rotate(0)}}
