/* Synced from the application character styles; no app layout styles. */
.bot-character{width:105px;height:113px}.section-heading{display:flex;align-items:center;justify-content:space-between;gap:16px;margin:32px 0 18px}.section-heading h2{font-size:15px;margin:0}.section-heading small{margin:0;font-size:10px}.cards{display:grid;grid-template-columns:repeat(auto-fit,minmax(230px,1fr));gap:16px}.bot-card{display:flex;flex-direction:column;background:var(--paper);border:1px solid var(--line);border-radius:20px;padding:24px;min-height:234px;transition:border-color .2s,transform .2s;cursor:pointer}.bot-card:hover{border-color:var(--line-strong);transform:translateY(-3px)}.card-top{display:flex;align-items:flex-start;justify-content:space-between;margin-bottom:19px;gap:10px}.bot-card h3{font-size:16px;margin-bottom:9px}.bot-card p{font-size:12px;color:var(--muted);line-height:1.7;margin-bottom:20px;display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden}.card-footer{display:flex;justify-content:space-between;align-items:center;gap:10px;margin-top:auto;padding-top:15px;border-top:1px solid var(--line);font-size:10px;color:var(--muted)}.card-footer span:last-child{font-size:16px;color:var(--accent)}.status{font-size:10px;color:var(--muted);display:flex;align-items:center;gap:7px;padding:7px 0}.avatar{display:grid;place-items:center;flex-shrink:0;width:40px;height:40px;border-radius:13px;background:var(--raised);color:var(--accent);font-size:16px}.avatar.amber{color:#cfbbaa}.avatar.violet{color:#b9b2e3}.avatar.blue{color:#accdf5}.pill,.badge{font-size:10px;padding:5px 9px;border-radius:6px;background:var(--raised);color:var(--muted);white-space:nowrap}.badge.failed,.badge.cancelled{background:#ce6e7814;color:#d2a0a7}.badge.running,.badge.waiting_for_team{background:#8abaff12;color:var(--accent)}.split{display:grid;grid-template-columns:1.25fr 1fr;gap:24px}.panel{background:var(--paper);border:1px solid var(--line);border-radius:18px;padding:24px}.empty{text-align:center;padding:34px 20px;color:var(--muted);font-size:12px;line-height:1.6}.empty-symbol{font-size:26px;opacity:.4;margin-bottom:12px}.empty strong{display:block;color:var(--text);font-size:14px;margin-bottom:8px;font-weight:400}.activity-row{display:flex;align-items:flex-start;gap:12px;font-size:12px;padding:14px 0;border-bottom:1px solid var(--line)}.activity-row:last-child{border:0}.activity-row .dot{margin-top:6px;flex-shrink:0}.activity-row small,.activity-row time{font-size:10px;color:var(--muted)}.activity-row time{margin-left:auto;white-space:nowrap}.prompt-button{display:flex;align-items:center;gap:12px;text-align:left;width:100%;padding:16px 0;background:none;border:0;border-bottom:1px solid var(--line);border-radius:0;font-size:12px}.prompt-button span:first-child{color:var(--accent)}.prompt-button span:last-child{margin-left:auto;color:var(--muted)}.prompt-button:last-child{border:0}.subtle-note{font-size:11px;color:var(--muted);margin-top:24px;line-height:1.7}
.chat-layout{display:grid;grid-template-columns:minmax(0,1fr) 284px;grid-template-rows:minmax(0,1fr);height:calc(100dvh - 70px);overflow:hidden}.chat-layout.hide-details{grid-template-columns:1fr}.chat-layout.hide-details .chat-aside{display:none}.chat-main{display:flex;flex-direction:column;height:100%;min-width:0;min-height:0;position:relative}.chat-header{display:flex;align-items:center;gap:14px;flex-shrink:0;padding:17px 34px;border-bottom:1px solid var(--line);background:var(--bg)}.chat-header h2{font-size:16px;margin:0}.chat-header small{font-size:10px}.chat-header .ghost{margin-left:auto}.chat-header button{font-size:11px;background:transparent}.messages{flex:1;min-height:0;overflow-y:auto;padding:32px 34px;overscroll-behavior:contain;scroll-behavior:smooth}.message{display:flex;gap:13px;max-width:820px;margin:0 auto 29px}.message-body{flex:1;min-width:0}.message-meta{display:flex;align-items:center;gap:11px;font-size:11px;font-weight:500;margin-bottom:9px;color:var(--muted)}.message-meta time{font-size:9px;font-weight:400;opacity:.7}.message-text{font-size:14px;line-height:1.8;overflow-wrap:anywhere;white-space:normal;color:var(--text)}.message-text p{margin:0 0 .8em}.message-text p:last-child{margin-bottom:0}.message.user .message-text{background:var(--raised);padding:16px 20px;border:1px solid var(--line);border-radius:4px 18px 18px 18px}.message.assistant:not(.commentary) .message-text{background:var(--paper);padding:16px 20px;border:1px solid var(--line);border-radius:4px 18px 18px 18px}.message.commentary .message-text{font-size:12px;color:var(--muted)}.message.handoff .message-text{border-left:2px solid var(--line-strong);padding:7px 15px;font-size:12px;color:var(--muted)}.message .avatar{width:30px;height:30px;border-radius:50%;font-size:11px;margin-top:1px}.message-text ul,.message-text ol{padding-left:1.5em;margin:.6em 0}.message-text li{margin:.4em 0}.message-text code{font:.9em Consolas,monospace;padding:2px 5px;background:var(--raised);border-radius:4px}.message-text pre{white-space:pre-wrap;word-break:break-word;overflow:auto;padding:14px;border-radius:9px;background:var(--bg)}.message-text pre code{padding:0;background:none}.message-text h4{font-size:1.08em;margin:1em 0 .4em}.chat-empty{max-width:500px;margin:7vh auto 30px;text-align:center}.chat-empty h2{font-size:29px;font-weight:450;letter-spacing:-1px}.chat-empty p{color:var(--muted);font-size:13px;margin-bottom:26px}.suggestion{display:block;width:100%;margin:10px 0;padding:16px 18px;text-align:left;border:1px solid var(--line);border-radius:13px;background:var(--paper);font-size:12px;color:var(--muted)}.composer-wrap{flex-shrink:0;padding:12px 34px 21px;background:var(--bg)}.composer{max-width:930px;margin:0 auto;padding:17px 18px 12px;background:var(--paper);border:1px solid var(--line-strong);border-radius:19px;box-shadow:0 5px 30px #0001;transition:border-color .2s}.composer:focus-within{border-color:#a5c9ff60}.composer textarea{display:block;width:100%;min-height:46px;max-height:165px;resize:vertical;border:0;outline:none;font-size:14px;color:var(--text);background:none;line-height:1.65}.composer textarea::placeholder{color:var(--muted)}.composer-footer{display:flex;align-items:center;gap:10px}.composer-footer small{font-size:10px;margin:0}.composer-footer select{font-size:11px;border:0;border-radius:6px;background:var(--raised);color:var(--text);padding:7px}.composer-footer .send{margin-left:auto;border-radius:10px;padding:9px 15px;font-size:11px}.composer-help{text-align:center;color:var(--muted);font-size:9px;margin-top:11px;opacity:.7}.chat-aside{min-height:0;overflow:auto;background:var(--sidebar);border-left:1px solid var(--line);padding:30px 23px}.chat-aside h3{font-size:10px;letter-spacing:1.6px;font-weight:500;text-transform:uppercase;color:var(--muted);margin-bottom:16px}.chat-aside p{font-size:12px;color:var(--muted)}.aside-section{padding-bottom:25px;margin-bottom:27px;border-bottom:1px solid var(--line)}.kv{display:flex;justify-content:space-between;gap:10px;font-size:10px;color:var(--muted);margin:16px 0}.kv strong{font-weight:400;color:var(--text)}.memory{padding:12px;margin:10px 0;border:1px solid var(--line);border-radius:12px;background:var(--paper);font-size:11px;line-height:1.6}.memory b{display:block;margin-bottom:6px;font-weight:500;color:var(--accent)}.memory small{font-size:9px;overflow-wrap:anywhere}.memory button{float:right;border:0;background:none;padding:2px 5px;font-size:11px;color:var(--muted)}.task-notice{display:flex;align-items:center;gap:12px;margin:15px auto;max-width:820px;padding:14px;border:1px solid var(--line-strong);border-radius:12px;font-size:12px;color:var(--muted)}.task-notice>span:nth-child(2){flex:1}.streaming:after{content:'·';color:var(--accent);font-size:20px;animation:stream-pulse 1s infinite}@keyframes stream-pulse{50%{opacity:.2}}
.task-row{display:flex;align-items:center;gap:14px;padding:19px 22px;background:var(--paper);border-bottom:1px solid var(--line)}.task-row:last-child{border-bottom:0}.task-row .description{flex:1;min-width:0}.task-row strong{font-size:12px;font-weight:400;display:block;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;max-width:700px}.task-row small{font-size:10px}.task-row button{font-size:11px}.list{border:1px solid var(--line);border-radius:16px;overflow:hidden}.file-card{min-height:170px;cursor:default}.file-card p{display:block;-webkit-line-clamp:unset;overflow:visible}.file-actions{display:flex;gap:8px;flex-wrap:wrap;margin-top:15px}.file-actions button,.file-actions a{font-size:11px;padding:8px}.settings-grid{display:grid;grid-template-columns:1fr 1fr;gap:20px}.settings-grid .panel{padding:27px}.settings-grid p{font-size:13px;color:var(--muted)}.settings-grid dl{display:grid;grid-template-columns:1fr 1fr;gap:16px;font-size:12px}.settings-grid dt{color:var(--muted)}.settings-grid dd{margin:0;overflow-wrap:anywhere}.limits-title{margin-top:32px}.banner{padding:15px 18px;background:#d5b3770d;border:1px solid #d5b37730;border-radius:11px;font-size:12px;color:#ccb892;margin-bottom:24px}.table-tools{display:flex;align-items:center;gap:12px;margin-bottom:20px}.table-tools select{background:var(--paper);color:var(--text);border:1px solid var(--line-strong);border-radius:9px;padding:9px;font-size:12px}
dialog{width:520px;max-width:calc(100vw - 30px);max-height:85dvh;padding:28px;background:var(--paper);color:var(--text);border:1px solid var(--line-strong);border-radius:21px;box-shadow:0 35px 100px #0006}dialog::backdrop{background:#070b156b;backdrop-filter:blur(10px)}.dialog-head{display:flex;align-items:center;justify-content:space-between;margin-bottom:24px}.dialog-head h2{font-size:22px;margin:0}.dialog-head button{background:none;border:0;font-size:18px;color:var(--muted)}.form-field{display:block;color:var(--muted);font-size:12px;margin:18px 0}.form-field input,.form-field textarea,.form-field select{display:block;width:100%;margin-top:9px;padding:12px;background:var(--bg);color:var(--text);border:1px solid var(--line-strong);border-radius:9px}.form-field textarea{min-height:100px;resize:vertical}.form-field input[type=checkbox]{width:auto;display:inline;margin-right:8px;accent-color:var(--accent)}.form-actions{display:flex;justify-content:flex-end;gap:10px;margin-top:26px}.form-error{color:#e4a0a9;font-size:12px;margin-top:15px}.check-option{display:flex;gap:10px;padding:10px;font-size:13px}.file-preview{white-space:pre-wrap;overflow-wrap:anywhere;max-height:55vh;overflow:auto;font-size:12px;line-height:1.7;padding:17px;background:var(--bg);border-radius:12px}#toast{display:none;position:fixed;bottom:24px;left:50%;transform:translateX(-50%);background:var(--text);color:var(--bg);padding:14px 20px;border-radius:12px;box-shadow:var(--shadow);font-size:12px;z-index:100}::-webkit-scrollbar{width:5px;height:5px}::-webkit-scrollbar-thumb{background:var(--line-strong);border-radius:10px}
/* Animated residents. Expressions are driven by live task state. */
.bot-character{display:inline-block;width:48px;height:52px;flex-shrink:0;position:relative;vertical-align:middle;color:var(--orb-mid)}.bot-character svg{display:block;width:100%;height:100%;overflow:visible}.palette-ice{--orb-light:#edf7ff;--orb-mid:#a6c5ed;--orb-dark:#536f9b}.palette-blue{--orb-light:#c9eaff;--orb-mid:#7baee6;--orb-dark:#365986}.palette-lilac{--orb-light:#eeebff;--orb-mid:#b7a8e0;--orb-dark:#6d5a9a}.palette-apricot{--orb-light:#fff0dc;--orb-mid:#dcb59a;--orb-dark:#997058}.palette-pearl{--orb-light:#f2fffa;--orb-mid:#b2d6c9;--orb-dark:#598a7d}.tone-light{stop-color:var(--orb-light)}.tone-mid{stop-color:var(--orb-mid)}.tone-dark{stop-color:var(--orb-dark)}.character-body{transform-origin:50px 60px;animation:orb-float 5.2s ease-in-out infinite}.character-face{color:#1b263b;fill:#1b263b;transform-origin:50px 50px}.character-eye{transform-box:fill-box;transform-origin:center}.eye-glint{fill:#fff;opacity:.7}.character-shadow{transform-origin:50px 99px;animation:orb-shadow 5.2s ease-in-out infinite}.eyes-closed,.eyes-happy,.mouth-sleep,.mouth-worry,.character-brows,.sleep-marks,.happy-spark,.character-orbit{display:none}.bot-item:nth-child(2n) .character-body{animation-delay:-1.7s}.bot-item .bot-character{width:38px;height:42px}.chat-header .bot-character{width:48px;height:52px}.message .bot-character{width:32px;height:35px}.bot-card .bot-character{width:78px;height:84px}.chat-empty>.bot-character{width:130px;height:140px;margin:0 auto 25px}.character-stage .bot-character{width:150px;height:162px}
.bot-character[data-mood=busy] .character-body{animation:orb-work 1.8s ease-in-out infinite}.bot-character[data-mood=busy] .character-orbit{display:block;transform-origin:50px 53px;animation:orb-orbit 3.2s linear infinite}.bot-character[data-mood=busy] .character-face{animation:orb-focus 2.6s ease-in-out infinite}.bot-character[data-mood=busy] .mouth-smile{transform:translate(0,1px) scale(1,.85);transform-origin:51px 63px}.bot-character[data-mood=waiting] .character-face{animation:orb-look 4.2s ease-in-out infinite}.bot-character[data-mood=waiting] .character-body{animation-duration:3.8s}.bot-character[data-mood=sleeping] .eyes-open,.bot-character[data-mood=offline] .eyes-open,.bot-character[data-mood=sleeping] .mouth-smile,.bot-character[data-mood=offline] .mouth-smile{display:none}.bot-character[data-mood=sleeping] .eyes-closed,.bot-character[data-mood=offline] .eyes-closed,.bot-character[data-mood=sleeping] .mouth-sleep,.bot-character[data-mood=offline] .mouth-sleep,.bot-character[data-mood=sleeping] .sleep-marks{display:block}.bot-character[data-mood=sleeping] .character-body,.bot-character[data-mood=offline] .character-body{animation:orb-breathe 4.5s ease-in-out infinite}.bot-character[data-mood=sleeping] .character-shadow{animation-duration:4.5s}.sleep-z{animation:orb-dream 3.8s ease-out infinite;transform-origin:center}.sleep-z.z-two{animation-delay:1.1s}.bot-character[data-mood=offline]{filter:saturate(.25);opacity:.6}.bot-character[data-mood=happy] .eyes-open{display:none}.bot-character[data-mood=happy] .eyes-happy,.bot-character[data-mood=happy] .happy-spark{display:block}.bot-character[data-mood=happy] .character-body{animation:orb-celebrate 2.5s ease-in-out infinite}.happy-spark{animation:orb-spark 2.5s ease-in-out infinite;transform-origin:50px 50px}.bot-character[data-mood=error] .character-brows,.bot-character[data-mood=error] .mouth-worry{display:block}.bot-character[data-mood=error] .mouth-smile{display:none}.bot-character[data-mood=error] .character-body{animation:orb-concern 5s ease-in-out infinite}
@keyframes orb-float{0%,100%{transform:translateY(0) rotate(-2deg)}50%{transform:translateY(-5px) rotate(2deg)}}@keyframes orb-shadow{0%,100%{transform:scaleX(1);opacity:.12}50%{transform:scaleX(.8);opacity:.07}}@keyframes orb-work{0%,100%{transform:translateY(-1px) rotate(-3deg)}50%{transform:translateY(-4px) rotate(3deg)}}@keyframes orb-orbit{from{transform:rotate(-25deg)}to{transform:rotate(335deg)}}@keyframes orb-focus{0%,100%{transform:translate(-1px,1px)}50%{transform:translate(2px,0)}}@keyframes orb-look{0%,100%{transform:translateX(0)}25%,40%{transform:translateX(-4px)}65%,80%{transform:translateX(4px)}}@keyframes orb-breathe{0%,100%{transform:translateY(3px) rotate(-6deg) scale(1,.97)}50%{transform:translateY(1px) rotate(-6deg) scale(1.025,1)}}@keyframes orb-dream{0%{opacity:0;transform:translate(-2px,5px)}30%{opacity:.7}100%{opacity:0;transform:translate(3px,-9px)}}@keyframes orb-celebrate{0%,100%{transform:translateY(0)}18%{transform:translateY(-8px) rotate(-5deg)}32%{transform:translateY(-1px) rotate(3deg)}45%{transform:translateY(-4px)}60%{transform:translateY(0)}}@keyframes orb-spark{0%,60%,100%{opacity:0;transform:scale(.9)}20%,35%{opacity:.7;transform:scale(1)}}@keyframes orb-concern{0%,100%{transform:rotate(-5deg)}50%{transform:rotate(2deg) translateY(-2px)}}

/* Independent rhythms and occasional state-appropriate gestures. */
.bot-character[data-motion-ready] .character-body,.bot-character[data-motion-ready] .character-shadow{animation-duration:var(--motion-body);animation-delay:var(--motion-phase)}
.bot-character[data-motion-ready] .character-face{animation-duration:var(--motion-face);animation-delay:var(--motion-phase)}
.bot-character[data-motion-ready] .character-orbit{animation-duration:var(--motion-orbit);animation-delay:var(--motion-phase);animation-direction:var(--motion-direction)}
.bot-character[data-motion-ready] .sleep-z{animation-duration:var(--motion-dream);animation-delay:var(--motion-phase)}
.bot-character[data-motion-ready] .sleep-z.z-two{animation-delay:calc(var(--motion-phase) - 1.3s)}
.bot-character[data-motion-ready] .happy-spark{animation-duration:var(--motion-body);animation-delay:var(--motion-phase)}
.character-gesture{transform-origin:50px 85px;animation-duration:var(--gesture-duration,2s);animation-delay:var(--gesture-phase,0ms);animation-timing-function:ease-in-out;animation-iteration-count:1}
.bot-character[data-motion-action=tilt] .character-gesture{animation-name:gesture-tilt}
.bot-character[data-motion-action=stretch] .character-gesture{animation-name:gesture-stretch}
.bot-character[data-motion-action=nod] .character-gesture{animation-name:gesture-nod}
.bot-character[data-motion-action=think] .character-gesture{animation-name:gesture-think}
.bot-character[data-motion-action=settle] .character-gesture{animation-name:gesture-settle}
.bot-character[data-motion-action=dream] .character-gesture{animation-name:gesture-dream}
.bot-character[data-motion-action=bounce] .character-gesture{animation-name:gesture-bounce}
.bot-character[data-motion-action=wiggle] .character-gesture{animation-name:gesture-wiggle}
.bot-character[data-motion-action=glance] .character-face,.bot-character[data-motion-action=peek] .character-face{animation:gesture-glance var(--gesture-duration) ease-in-out var(--gesture-phase) 1}
.bot-character[data-motion-action=focus] .character-gesture{animation-name:gesture-focus}
@keyframes gesture-tilt{0%,100%{transform:rotate(0)}35%,65%{transform:rotate(8deg)}}
@keyframes gesture-stretch{0%,100%{transform:scale(1)}40%{transform:scale(.96,1.055)}70%{transform:scale(1.025,.985)}}
@keyframes gesture-nod{0%,40%,80%,100%{transform:translateY(0)}20%,60%{transform:translateY(2px) rotate(2deg)}}
@keyframes gesture-think{0%,100%{transform:rotate(0)}30%,75%{transform:rotate(-7deg) translateY(-1px)}}
@keyframes gesture-settle{0%,100%{transform:translateY(0)}40%,65%{transform:translateY(2px) rotate(2deg)}}
@keyframes gesture-dream{0%,45%,65%,100%{transform:rotate(0)}50%{transform:rotate(-2deg)}58%{transform:rotate(1deg)}}
@keyframes gesture-bounce{0%,50%,100%{transform:translateY(0)}25%{transform:translateY(-5px)}75%{transform:translateY(-2px)}}
@keyframes gesture-wiggle{0%,100%{transform:rotate(0)}25%,65%{transform:rotate(-4deg)}45%,80%{transform:rotate(4deg)}}
@keyframes gesture-glance{0%,100%{transform:translateX(0)}25%,65%{transform:translateX(3px)}80%{transform:translateX(-1px)}}
@keyframes gesture-focus{0%,100%{transform:translateY(0)}35%,70%{transform:translateY(1px) scale(.99)}}


.plush-character .character-body{transform-origin:50px 90px}.plush-character .character-orbit{opacity:.65}.plush-character .character-shadow{opacity:.08}
.plush-character svg.plush-part{overflow:hidden;width:100px;height:100px}

/* Facial features sit in the fabric and travel with the head. Only the eyes
   make tiny gaze changes; cheeks and mouths never slide over the toy. */
.plush-character .character-face{animation:none!important;transform:none!important;color:#343039;fill:#343039}
.plush-character .character-eye{filter:none}
.plush-character .eye-glint{opacity:.18}
.plush-character[data-mood=waiting] .eyes-open{animation:plush-gaze var(--motion-face,5s) ease-in-out var(--motion-phase,0s) infinite}
.plush-character[data-motion-action=glance] .eyes-open,.plush-character[data-motion-action=peek] .eyes-open{animation:plush-gaze var(--gesture-duration,2s) ease-in-out var(--gesture-phase,0s) 1}
@keyframes plush-gaze{0%,100%{transform:translateX(0)}30%,65%{transform:translateX(1px)}80%{transform:translateX(-.4px)}}

.plush-head{transform-box:view-box;transform-origin:50px 55px;animation:plush-head-idle calc(var(--motion-face,4s) * 1.7) ease-in-out var(--motion-phase,0s) infinite}
.plush-character[data-mood=busy] .plush-head{animation-name:plush-head-nod;animation-duration:var(--motion-face,4s)}
.plush-character[data-mood=waiting] .plush-head{animation-name:plush-head-turn}
.plush-character[data-mood=sleeping] .plush-head,.plush-character[data-mood=offline] .plush-head{transform:rotate(-7deg) translateY(1px);animation-name:plush-head-sleep}
.plush-character[data-mood=happy] .plush-head{animation-name:plush-head-happy}
.plush-character[data-mood=error] .plush-head{animation-name:plush-head-curious}
.plush-character[data-motion-action=glance] .plush-head,.plush-character[data-motion-action=peek] .plush-head{animation:plush-head-turn var(--gesture-duration,2s) ease-in-out var(--gesture-phase,0s) 1}
.plush-character[data-motion-action=nod] .plush-head{animation:plush-head-nod var(--gesture-duration,2s) ease-in-out var(--gesture-phase,0s) 1}
@keyframes plush-head-idle{0%,100%{transform:rotate(-2deg)}14%,30%{transform:translateX(-.6px) rotate(-4deg) scaleX(.95)}44%,52%{transform:rotate(0deg)}66%,82%{transform:translateX(.6px) rotate(3deg) scaleX(.95)}}
@keyframes plush-head-turn{0%,100%{transform:rotate(0) scaleX(1)}25%,40%{transform:translateX(1px) rotate(7deg) scaleX(.92)}65%,80%{transform:translateX(-1px) rotate(-6deg) scaleX(.94)}}
@keyframes plush-head-nod{0%,45%,100%{transform:rotate(-2deg)}22%,70%{transform:rotate(3deg)}}
@keyframes plush-head-sleep{0%,100%{transform:rotate(-7deg) translateY(1px)}50%{transform:rotate(-9deg) translateY(1.5px)}}
@keyframes plush-head-happy{0%,100%{transform:rotate(-4deg)}35%{transform:rotate(5deg)}65%{transform:rotate(-3deg)}}
@keyframes plush-head-curious{0%,100%{transform:rotate(3deg)}35%,70%{transform:rotate(-7deg)}}

/* Illustrated styles retain the original artwork. Status symbols show activity; the whole character
   sways, breathes and gestures, and painted closed-eye patches blink over the original eyes. */
.illustrated-character{color:#a9cbee}.illustrated-character .illustrated-body{transform-origin:50px 97px;animation:illustrated-rest var(--motion-body,6s) ease-in-out var(--motion-phase,0s) infinite}.illustrated-character .illustrated-symbol{display:none}.illustrated-character[data-mood=idle] .signal-idle,.illustrated-character[data-mood=busy] .signal-busy,.illustrated-character[data-mood=waiting] .signal-waiting,.illustrated-character[data-mood=happy] .signal-happy,.illustrated-character[data-mood=error] .signal-error,.illustrated-character[data-mood=sleeping] .signal-sleeping,.illustrated-character[data-mood=offline] .signal-offline{display:block}.illustrated-character .illustrated-dream{display:none}.illustrated-character[data-mood=busy] .illustrated-body{animation-name:illustrated-work}.illustrated-character[data-mood=busy] .signal-busy{transform-origin:0 0;animation:illustrated-spin 2.4s linear infinite}.illustrated-character[data-mood=waiting] .illustrated-body{animation-name:illustrated-wait}.illustrated-character[data-mood=sleeping] .illustrated-body{transform:translateY(2px) rotate(-5deg);animation-name:illustrated-sleep}.illustrated-character[data-mood=sleeping] .illustrated-dream{display:block;animation:illustrated-dream 4.8s ease-in-out infinite}.illustrated-character[data-mood=happy] .illustrated-body{animation-name:illustrated-done}.illustrated-character[data-mood=happy] .illustrated-status{color:#afe0c6}.illustrated-character[data-mood=error] .illustrated-status{color:#efb2ad}.illustrated-character[data-mood=error] .illustrated-body{animation-name:illustrated-wait}.illustrated-character[data-mood=offline]{filter:saturate(.25);opacity:.6}.illustrated-character[data-mood=offline] .illustrated-body{animation-name:illustrated-sleep;animation-duration:calc(var(--motion-body,6s) * 1.4)}.illustrated-character.mini-waking .illustrated-body{animation:illustrated-wake 1.4s ease-out var(--wake-progress,0ms) both}.illustrated-style-note{padding:14px 18px;border:1px solid var(--line-strong);border-radius:12px;color:var(--muted);font-size:12px;margin:16px 0 22px}.style-choices small{display:block}.illustrated-character .illustrated-status{transition:color .2s}
@keyframes illustrated-rest{0%,100%{transform:translateY(0) rotate(-2deg) scaleY(1)}50%{transform:translateY(-3px) rotate(2deg) scaleY(1.015)}}
@keyframes illustrated-work{0%,100%{transform:translateY(0) rotate(-2deg)}25%{transform:translateY(-3px) rotate(1deg)}45%{transform:translateY(-4px) rotate(3deg)}70%{transform:translateY(-1px) rotate(0deg)}}
@keyframes illustrated-wait{0%,100%{transform:translateY(0) rotate(-3deg)}50%{transform:translateY(-1.5px) rotate(3deg)}}
@keyframes illustrated-sleep{0%,100%{transform:translateY(2px) rotate(-5deg) scaleY(1)}50%{transform:translateY(.5px) rotate(-4deg) scaleY(1.02)}}
@keyframes illustrated-dream{0%,100%{opacity:.35;transform:translateY(0)}50%{opacity:.8;transform:translateY(-3px)}}
@keyframes illustrated-done{0%,100%{transform:translateY(0) rotate(0)}30%{transform:translateY(-5px) rotate(-2deg)}55%{transform:translateY(-1px) rotate(1deg)}75%{transform:translateY(-3px) rotate(2deg)}}
@keyframes illustrated-spin{to{transform:rotate(360deg)}}
@keyframes illustrated-wake{from{transform:translateY(2px) rotate(-5deg)}60%{transform:translateY(-2px) rotate(2deg)}to{transform:none}}
body.motion-paused .illustrated-character *{animation:none!important}body.motion-paused .illustrated-character[data-mood=sleeping] .illustrated-dream{opacity:.65}
@media(prefers-reduced-motion:reduce){.illustrated-character *{animation:none!important;transition:none!important}.illustrated-character[data-mood=sleeping] .illustrated-dream{opacity:.65}}
/* One blink for every style, matching the miniatures: a brief discrete shut on each bot's own rhythm.
   Sleeping and offline characters keep their eyes closed instead; paused or reduced motion keeps them open. */
@keyframes character-blink-shut{0%,95.99%,99%,100%{opacity:0}96%,98.99%{opacity:1}}
@keyframes character-blink-open{0%,95.99%,99%,100%{opacity:1}96%,98.99%{opacity:0}}
.bot-character:is([data-mood=idle],[data-mood=busy],[data-mood=waiting],[data-mood=error]) .character-eye{animation:character-blink-open var(--motion-blink,6s) steps(1,end) var(--motion-phase,0s) infinite}
.bot-character:is([data-mood=idle],[data-mood=busy],[data-mood=waiting],[data-mood=error]) .eyes-closed{display:block;opacity:0;animation:character-blink-shut var(--motion-blink,6s) steps(1,end) var(--motion-phase,0s) infinite}
.illustrated-lid{opacity:0;animation:character-blink-shut var(--motion-blink,6s) steps(1,end) var(--motion-phase,0s) infinite}
.illustrated-character:is([data-mood=sleeping],[data-mood=offline]) .illustrated-lid{animation:none;opacity:1}
/* Small constant life for every style: a head swivel (turn, hold, recentre, turn back) over the body sway. */
@keyframes character-swivel{0%,100%{transform:rotate(0deg)}14%,30%{transform:translateX(-.6px) rotate(-3deg) scaleX(.96)}44%,52%{transform:rotate(0deg)}66%,82%{transform:translateX(.6px) rotate(3deg) scaleX(.96)}}
@keyframes character-face-swivel{0%,100%{transform:translateX(0)}14%,30%{transform:translateX(-2.5px) scaleX(.95)}44%,52%{transform:translateX(0)}66%,82%{transform:translateX(2.5px) scaleX(.95)}}
@keyframes illustrated-head-work{0%,100%{transform:rotate(-1deg)}30%{transform:translateY(.6px) rotate(1.5deg)}60%{transform:rotate(0deg)}}
@keyframes illustrated-head-happy{0%,100%{transform:rotate(-3deg)}35%{transform:rotate(4deg)}65%{transform:rotate(-2deg)}}
@keyframes illustrated-head-doze{0%,100%{transform:rotate(1deg)}50%{transform:translateY(.4px) rotate(3deg)}}
.illustrated-head{animation:character-swivel calc(var(--motion-face,4s) * 1.7) ease-in-out var(--motion-phase,0s) infinite}
.illustrated-character[data-mood=busy] .illustrated-head{animation-name:illustrated-head-work;animation-duration:var(--motion-face,4s)}
.illustrated-character[data-mood=happy] .illustrated-head{animation-name:illustrated-head-happy;animation-duration:var(--motion-body,3s)}
.illustrated-character:is([data-mood=sleeping],[data-mood=offline]) .illustrated-head{animation-name:illustrated-head-doze;animation-duration:calc(var(--motion-body,5s) * 1.3)}
.bot-character:not(.plush-character)[data-mood=idle]:not([data-motion-action=glance],[data-motion-action=peek]) .character-face{animation:character-face-swivel calc(var(--motion-face,4s) * 1.7) ease-in-out var(--motion-phase,0s) infinite}

/* Crew characters: every moving part is its own group; the shared --motion-* rhythm keeps each teammate out of step with the others. */
.crew-character{color:#9dc5fd}.crew-character svg{overflow:visible}
.crew-character :is(.crew-bob,.crew-tilt,.crew-arm,.crew-blink,.crew-scan,.crew-prop,.crew-badge,.crew-z,.crew-antenna,.crew-shadow,.crew-look){transform-box:fill-box;transform-origin:center}
.crew-character .crew-bob,.crew-character .crew-tilt{transform-origin:50% 100%}
.crew-character .crew-arm-l{transform-origin:80% 20%}.crew-character .crew-arm-r{transform-origin:20% 20%}.crew-character .crew-antenna{transform-origin:50% 100%}
.crew-character .crew-look{transition:transform .35s cubic-bezier(.3,1.4,.5,1)}
.crew-character .crew-bob{animation:crew-breathe var(--motion-body,3.6s) ease-in-out var(--motion-phase,0s) infinite}
.crew-character .crew-shadow{animation:crew-shadow var(--motion-body,3.6s) ease-in-out var(--motion-phase,0s) infinite}
.crew-character .crew-blink{animation:crew-blink var(--motion-blink,4.4s) var(--motion-phase,0s) infinite}
.crew-character .crew-arm-l{animation:crew-arm-l var(--motion-body,3.6s) ease-in-out var(--motion-phase,0s) infinite}
.crew-character .crew-arm-r{animation:crew-arm-r var(--motion-body,3.6s) ease-in-out var(--motion-phase,0s) infinite}
.crew-character .crew-scan{animation:crew-glance calc(var(--motion-face,4s) * 1.8) ease-in-out var(--motion-phase,0s) infinite}
.crew-character .crew-prop{animation:crew-prop 3.2s ease-in-out var(--motion-phase,0s) infinite}
.crew-character .crew-antenna{animation:crew-wobble 2.4s ease-in-out var(--motion-phase,0s) infinite}.crew-character .crew-antenna-two{animation-delay:calc(var(--motion-phase,0s) - 1.1s)}
@keyframes crew-breathe{0%,100%{transform:translateY(0) scale(1,1)}50%{transform:translateY(-3px) scale(1.015,.985)}}
@keyframes crew-shadow{0%,100%{transform:scaleX(1);opacity:.28}50%{transform:scaleX(.88);opacity:.2}}
@keyframes crew-blink{0%,93%,100%{transform:scaleY(1)}95.5%{transform:scaleY(.08)}}
@keyframes crew-arm-l{0%,100%{transform:rotate(0)}50%{transform:rotate(7deg)}}
@keyframes crew-arm-r{0%,100%{transform:rotate(0)}50%{transform:rotate(-7deg)}}
@keyframes crew-glance{0%,38%,100%{transform:translate(0,0)}44%,56%{transform:translate(-3px,0)}62%,74%{transform:translate(3px,-1px)}80%{transform:translate(0,0)}}
@keyframes crew-prop{0%,100%{transform:rotate(0)}50%{transform:rotate(-6deg)}}
@keyframes crew-wobble{0%,100%{transform:rotate(-6deg)}50%{transform:rotate(6deg)}}
/* Working: quicker bounce, eyes scan the screen, the tool is busy, the spinner turns. */
.crew-character[data-mood=busy] .crew-bob{animation-duration:1.5s}.crew-character[data-mood=busy] :is(.crew-arm-l,.crew-arm-r){animation-duration:.75s}
.crew-character[data-mood=busy] .crew-scan{animation:crew-scan 2.2s ease-in-out var(--motion-phase,0s) infinite}
.crew-character[data-mood=busy] .crew-prop{animation:crew-work .9s ease-in-out var(--motion-phase,0s) infinite}
.crew-character .crew-spin{transform-box:view-box;transform-origin:82px 20px;animation:crew-spin 1.1s linear infinite}
@keyframes crew-scan{0%,100%{transform:translate(-3px,1px)}50%{transform:translate(3px,1px)}}
@keyframes crew-work{0%,100%{transform:rotate(-10deg) translateY(0)}50%{transform:rotate(8deg) translateY(-2px)}}
@keyframes crew-spin{to{transform:rotate(360deg)}}
/* Needs you: tilts its head, looks up, the badge pulses. */
.crew-character[data-mood=waiting] .crew-tilt{animation:crew-tilt 3.4s ease-in-out var(--motion-phase,0s) infinite}
.crew-character[data-mood=waiting] .crew-scan{animation:none;transform:translate(0,-2px)}
.crew-character[data-mood=waiting] .crew-badge{animation:crew-pulse 1.6s ease-in-out infinite}
@keyframes crew-tilt{0%,100%{transform:rotate(-5deg)}50%{transform:rotate(5deg)}}
@keyframes crew-pulse{0%,100%{transform:scale(1)}50%{transform:scale(1.18)}}
/* Done: a happy hop with arms up; the check pops. */
.crew-character[data-mood=happy] .crew-bob{animation:crew-hop 2.6s cubic-bezier(.3,.7,.4,1) var(--motion-phase,0s) infinite}
.crew-character[data-mood=happy] .crew-arm-l{animation:crew-wave-l 2.6s ease-in-out var(--motion-phase,0s) infinite}.crew-character[data-mood=happy] .crew-arm-r{animation:crew-wave-r 2.6s ease-in-out var(--motion-phase,0s) infinite}
.crew-character[data-mood=happy] .crew-badge{animation:crew-pop 2.6s ease-out var(--motion-phase,0s) infinite}
@keyframes crew-hop{0%,40%,100%{transform:translateY(0) scale(1,1)}8%{transform:translateY(1px) scale(1.06,.92)}18%{transform:translateY(-10px) scale(.96,1.05)}28%{transform:translateY(0) scale(1.05,.95)}34%{transform:scale(1)}}
@keyframes crew-wave-l{0%,40%,100%{transform:rotate(0)}15%,25%{transform:rotate(-55deg)}}
@keyframes crew-wave-r{0%,40%,100%{transform:rotate(0)}15%,25%{transform:rotate(55deg)}}
@keyframes crew-pop{0%,100%{transform:scale(1)}12%{transform:scale(1.35)}22%{transform:scale(1)}}
/* Stuck: a small worried shiver; the "!" flashes. */
.crew-character[data-mood=error] .crew-tilt{animation:crew-shiver 3s ease-in-out var(--motion-phase,0s) infinite}
.crew-character[data-mood=error] .crew-badge{animation:crew-flash 1.2s steps(2) infinite}
.crew-character[data-mood=error] .crew-bob{animation-duration:5s}
@keyframes crew-shiver{0%,70%,100%{transform:translateX(0) rotate(0)}74%{transform:translateX(-1.5px) rotate(-2deg)}78%{transform:translateX(1.5px) rotate(2deg)}82%{transform:translateX(-1px) rotate(-1deg)}86%{transform:translateX(0)}}
@keyframes crew-flash{50%{opacity:.35}}
/* Resting and offline: dimmed, slow deep breaths, z's drift up, no blinking. */
.crew-character:is([data-mood=sleeping],[data-mood=offline]) svg{filter:saturate(.55) brightness(.8)}
.crew-character:is([data-mood=sleeping],[data-mood=offline]) .crew-bob{animation-duration:5.5s}
.crew-character:is([data-mood=sleeping],[data-mood=offline]) :is(.crew-blink,.crew-scan){animation:none}
.crew-character .crew-z{animation:crew-z 3.6s ease-out infinite}.crew-character .crew-z2{animation-delay:1.2s}.crew-character .crew-z3{animation-delay:2.4s}
@keyframes crew-z{0%{opacity:0;transform:translate(0,4px) scale(.7)}25%{opacity:.9}100%{opacity:0;transform:translate(6px,-12px) scale(1.15)}}
/* Occasional gestures from the shared motion engine. */
.crew-character[data-motion-action] .crew-bob{animation-name:crew-breathe}
.crew-character:is([data-motion-action=stretch],[data-motion-action=wave]) .crew-arm-l{animation:crew-wave-l var(--gesture-duration,2s) ease-in-out var(--gesture-phase,0s) 1}
.crew-character:is([data-motion-action=stretch],[data-motion-action=wave]) .crew-arm-r{animation:crew-wave-r var(--gesture-duration,2s) ease-in-out var(--gesture-phase,0s) 1}
.crew-character.crew-poke .crew-bob{animation:crew-hop .9s cubic-bezier(.3,.7,.4,1) 1}
.crew-character.crew-poke .crew-arm-l{animation:crew-wave-l .9s ease-in-out 1}.crew-character.crew-poke .crew-arm-r{animation:crew-wave-r .9s ease-in-out 1}
body.motion-paused .crew-character *{animation:none!important;transition:none!important}
@media(prefers-reduced-motion:reduce){.crew-character *{animation:none!important;transition:none!important}}

/* Character tiles: at small sizes every style stands, whole body, on its own tile, framed by its measured
   outline (character-crops.js). A ring and corner badge carry the state in every style. */
.character-tile{--tile-ring:transparent;--tile-tint:#7fa8ff;position:relative;display:inline-block;flex-shrink:0;width:34px;height:44px;border-radius:11px;background:linear-gradient(180deg,color-mix(in srgb,var(--tile-tint) 16%,var(--paper,#151c29)),color-mix(in srgb,var(--tile-tint) 34%,var(--paper,#151c29)));box-shadow:0 0 0 1.5px var(--tile-ring),inset 0 0 0 1px #ffffff14;vertical-align:middle}
.character-tile.tile-small{width:22px;height:28px;border-radius:7px}
.character-tile.tile-large{width:44px;height:57px;border-radius:14px}
.character-tile-clip{position:absolute;inset:0;border-radius:inherit;overflow:hidden}
.character-tile .bot-character{position:absolute;inset:0;width:100%!important;height:100%!important;margin:0!important}
.character-tile .bot-character>svg{overflow:hidden!important}
.character-tile :is(.mini-signal,.sleep-marks,.happy-spark,.character-orbit,.illustrated-status,.illustrated-dream,.crew-badge,.bot-character>svg>ellipse:first-child){display:none!important}
/* Resting miniatures stay upright with closed eyes: a bed does not fit a standing tile. */
.character-tile .miniature-character:is([data-mood=sleeping],[data-mood=offline]) .mini-pose{transform:none!important;animation:none!important}
.character-tile .miniature-character .mini-bed{display:none}
.character-tile[data-mood=busy]{--tile-ring:var(--accent,#acccff)}.character-tile[data-mood=waiting]{--tile-ring:#e2c07f}.character-tile[data-mood=happy]{--tile-ring:#92d6b4}.character-tile[data-mood=error]{--tile-ring:#ef8f98}
.character-tile:is([data-mood=sleeping],[data-mood=offline]) .character-tile-clip{filter:saturate(.75) brightness(.95)}
.character-tile-badge{position:absolute;right:-5px;top:-5px;width:16px;height:16px;border-radius:50%;display:none;place-items:center;border:2px solid var(--sidebar,#101520);font-style:normal}
.character-tile-badge svg{width:78%;height:78%}
.tile-small .character-tile-badge{width:11px;height:11px;right:-4px;top:-4px;border-width:1.5px}
.character-tile:is([data-mood=busy],[data-mood=waiting],[data-mood=happy],[data-mood=error],[data-mood=sleeping]) .character-tile-badge{display:grid}
.character-tile[data-mood=busy] .character-tile-badge{background:#1d2a40}.character-tile[data-mood=busy] .character-tile-badge svg{animation:crew-spin 1.1s linear infinite}
.character-tile[data-mood=waiting] .character-tile-badge{background:#e2c07f;animation:crew-pulse 1.6s ease-in-out infinite}
.character-tile[data-mood=happy] .character-tile-badge{background:#92d6b4}.character-tile[data-mood=error] .character-tile-badge{background:#ef8f98}.character-tile[data-mood=sleeping] .character-tile-badge{background:#2a3446}
.tile-tint-0{--tile-tint:#7fa8ff}.tile-tint-1{--tile-tint:#56cfb2}.tile-tint-2{--tile-tint:#b99bff}.tile-tint-3{--tile-tint:#ffb56b}.tile-tint-4{--tile-tint:#ff8d8d}.tile-tint-5{--tile-tint:#f0cf5e}.tile-tint-6{--tile-tint:#7fd6ff}.tile-tint-7{--tile-tint:#f59fc8}
body.motion-paused .character-tile *{animation:none!important}
@media(prefers-reduced-motion:reduce){.character-tile *{animation:none!important}}
body.light .character-tile{background:linear-gradient(180deg,color-mix(in srgb,var(--tile-tint) 14%,#fff),color-mix(in srgb,var(--tile-tint) 30%,#fff))}
.character-tile.tile-message{width:28px;height:36px;border-radius:9px;margin-top:-2px}
.chief-resident-card>span.character-tile{display:inline-block;flex:none;gap:0}
.bot-item>.character-tile,.task-row>.character-tile,.approval-card header>.character-tile,.chat-header>.character-tile{flex:none}
/* One face and one badge per mood are drawn; show the current one (offline looks like resting). */
.crew-character :is(.crew-face,.crew-badge>g){display:none}
.crew-character:is([data-mood=idle],:not([data-mood])) .crew-face-idle,.crew-character[data-mood=busy] :is(.crew-face-busy,.crew-badge-busy),.crew-character[data-mood=waiting] :is(.crew-face-waiting,.crew-badge-waiting),.crew-character[data-mood=happy] :is(.crew-face-happy,.crew-badge-happy),.crew-character[data-mood=error] :is(.crew-face-error,.crew-badge-error),.crew-character:is([data-mood=sleeping],[data-mood=offline]) :is(.crew-face-sleeping,.crew-badge-sleeping){display:inline}
