.assistant-character{--character-orange:#f26835;--character-face:#fff8ee;display:inline-block;width:64px;height:64px;flex:0 0 auto;vertical-align:middle;contain:layout style;pointer-events:none}
.assistant-character[hidden]{display:none!important}
.assistant-character svg{display:block;width:100%;height:100%;overflow:visible}
.assistant-character .character-rim{fill:var(--character-orange)}
.assistant-character .character-face{fill:var(--character-face)}
/* Trace only the cut edge inside the plate; the bite remains transparent. */
.assistant-character .character-bite-edge{fill:none;stroke:var(--character-orange);stroke-width:7}
.assistant-character .character-glint{fill:none;stroke:var(--character-orange);stroke-width:2;stroke-linecap:round;opacity:.2;stroke-dasharray:65 295;transform:rotate(25deg);transform-origin:64px 64px;transition:stroke-dasharray 260ms ease,opacity 220ms ease}
/* A concentric rim reflection: only its arc length and angular position change. */
.assistant-character:is([data-expression="happy"],[data-expression="celebrate"],[data-expression="welcome"],[data-expression="affirming"]) .character-glint{stroke-dasharray:80 280}
.assistant-character[data-expression="empathetic"] .character-glint{stroke-dasharray:75 285;transform:rotate(40deg)}
.assistant-character[data-expression="thinking"] .character-glint{animation:character-rim-consider 6.4s ease-in-out infinite}
.assistant-character[data-expression="uncertain"] .character-glint{stroke-dasharray:45 315;transform:rotate(65deg)}
.assistant-character[data-expression="speaking"] .character-glint{animation:character-rim-speak 1.4s ease-in-out infinite}
.assistant-character[data-expression="shopping"] .character-glint{animation:character-shopping-mouth 3.2s ease-in-out both}
.assistant-character .character-receiver{opacity:0;transform:scale(.45) rotate(-20deg);transform-box:view-box;transform-origin:94px 36px}
.assistant-character .character-receiver-dish{fill:var(--character-face);stroke:var(--character-orange);stroke-width:3;stroke-linejoin:round}
.assistant-character .character-receiver-arm,.assistant-character .character-listen-waves{fill:none;stroke:var(--character-orange);stroke-width:3;stroke-linecap:round}
.assistant-character .character-receiver-tip{fill:var(--character-orange)}
.assistant-character .character-listen-waves{opacity:.55}
.assistant-character[data-expression="listening"] .character-receiver{opacity:1;transform:translateX(0) scale(1) rotate(0);animation:character-receiver-open 700ms ease-out both}
.assistant-character[data-expression="listening"] .character-listen-waves path{animation:character-hearing-wave 2.2s ease-in-out infinite}
.assistant-character[data-expression="listening"] .character-listen-waves path+path{animation-delay:240ms}
@keyframes character-receiver-open{from{opacity:0;transform:scale(.45) rotate(-20deg)}to{opacity:1;transform:scale(1) rotate(0)}}
@keyframes character-hearing-wave{0%,100%{opacity:.2}40%,65%{opacity:1}}
@keyframes character-shopping-mouth{0%,100%{opacity:.2}20%,70%{opacity:0}}
@keyframes character-rim-speak{0%,100%{stroke-dasharray:65 295}30%{stroke-dasharray:78 282}65%{stroke-dasharray:48 312}}
@keyframes character-rim-consider{0%,100%{transform:rotate(25deg);stroke-dasharray:65 295}50%{transform:rotate(90deg);stroke-dasharray:55 305}}
.assistant-character .character-eye{fill:var(--character-orange);transform-box:fill-box;transform-origin:center;transition:transform 220ms ease,rx 220ms ease}
.assistant-character .character-joy-eyes{fill:none;stroke:var(--character-orange);stroke-width:7;stroke-linecap:round;stroke-linejoin:round;opacity:0}
.assistant-character .character-body{transform-box:view-box;transform-origin:64px 64px}
.assistant-character .character-gaze{transform-origin:64px 64px;transition:transform 250ms ease}
.assistant-character .character-blink{transform-origin:64px 64px;animation:character-blink 5.8s infinite}
.assistant-character .character-sparks{opacity:0;fill:none;stroke:var(--character-orange);stroke-width:4;stroke-linecap:round;transform-origin:64px 64px}
.assistant-character[data-expression="attentive"] .character-body{transform:perspective(260px) rotateX(-6deg);animation:character-attend 12s ease-in-out infinite}
.assistant-character[data-expression="attentive"] .character-gaze{animation:character-attend-gaze 12s ease-in-out infinite}
.assistant-character[data-expression="attentive"] .character-eye{transform:scale(1.24,1.2)}
.assistant-character[data-expression="listening"] .character-body{transform:perspective(260px) rotateY(-17deg) rotateZ(-3deg);animation:character-listen-turn 800ms ease-out both}
.assistant-character[data-expression="listening"] .character-gaze{transform:translate(2px,-1px)}
.assistant-character[data-expression="listening"] .character-eye-left{transform:scale(1.1,1.12)}
.assistant-character[data-expression="listening"] .character-eye-right{transform:scale(1.02,1.06)}
.assistant-character[data-expression="thinking"] .character-body{animation:character-consider 6.4s ease-in-out infinite}
.assistant-character[data-expression="thinking"] .character-gaze{animation:character-look-up 6.4s ease-in-out infinite}
.assistant-character[data-expression="thinking"] .character-eye-left{animation:character-think-left 6.4s ease-in-out infinite}
.assistant-character[data-expression="thinking"] .character-eye-right{animation:character-think-right 6.4s ease-in-out infinite}
.assistant-character[data-expression="speaking"] .character-gaze{animation:character-speak-gaze 2.8s ease-in-out infinite}
.assistant-character[data-expression="speaking"] .character-eye-right{animation:character-speak-eye 2.8s ease-in-out infinite}
.assistant-character[data-expression="curious"] .character-body{transform:rotate(-17deg) scale(1.06,.96);animation:character-peek 1.1s ease-in-out both}
.assistant-character[data-expression="curious"] .character-eye-left{transform:scaleY(.65)}
.assistant-character[data-expression="curious"] .character-eye-right{transform:scaleY(1.18)}
.assistant-character[data-expression="happy"] .character-eye{animation:character-happy-eye-open 1.6s linear both}
.assistant-character[data-expression="happy"] .character-joy-eyes{animation:character-happy-eye-joy 1.6s linear both}
.assistant-character[data-expression="celebrate"] .character-eye{animation:character-celebrate-eye-open 2s linear both}
.assistant-character[data-expression="celebrate"] .character-joy-eyes{animation:character-celebrate-eye-joy 2s linear both}
.assistant-character[data-expression="happy"] .character-body{animation:character-happy-hop 1.6s linear 1}
.assistant-character[data-expression="celebrate"] .character-body{animation:character-celebrate 2s linear 1}
.assistant-character[data-expression="celebrate"] .character-sparks{animation:character-spark 1s ease-out 2}
.assistant-character[data-expression="empathetic"] .character-eye-left{transform:scaleY(.8) rotate(-9deg)}
.assistant-character[data-expression="empathetic"] .character-eye-right{transform:scaleY(.8) rotate(9deg)}
.assistant-character[data-expression="empathetic"] .character-body{transform:rotate(-8deg);animation:character-empathy 2s ease-in-out both}
.assistant-character[data-expression="uncertain"] .character-eye-left{transform:scale(1,.78)}
.assistant-character[data-expression="uncertain"] .character-body{animation:character-head-shake 1.25s ease-in-out 1}
.assistant-character[data-expression="uncertain"] .character-gaze{animation:character-shake-gaze 1.25s ease-in-out 1}
.assistant-character[data-expression="playful"] .character-eye-left{animation:character-wink 1.8s ease-in-out 1}
.assistant-character[data-expression="playful"] .character-body{animation:character-round-spin 1.8s ease-in-out 1}
.assistant-character[data-expression="welcome"] .character-body{animation:character-greeting-nod 1.05s ease-in-out 1}
.assistant-character[data-expression="welcome"] .character-gaze{animation:character-greeting-gaze 1.05s ease-in-out 1}
.assistant-character[data-expression="affirming"] .character-body{animation:character-yes-nod 1.35s ease-in-out 1}
.assistant-character[data-expression="affirming"] .character-gaze{animation:character-yes-gaze 1.35s ease-in-out 1}
.assistant-character[data-active="false"] *{animation-play-state:paused!important}
html[data-character-motion="paused"] .assistant-character *,dialog:not([open]) .assistant-character *{animation-play-state:paused!important}
.coach-identity>.assistant-character{width:44px;height:44px;margin:-4px 2px -4px -4px}
.meal-chat-heading>.assistant-character{width:44px;height:44px;margin:-4px 2px -4px -4px;border:0;border-radius:0;background:transparent;box-shadow:none}
.messenger .messenger-heading img[hidden]{display:none!important}
/* The visible header carries the expression; keep a stable, quiet waiting footprint. */
dialog[data-character-lead="header"] .chat-waiting .messenger-thinking{position:relative}
dialog[data-character-lead="header"] .chat-waiting .messenger-thinking::after{content:'•••';position:absolute;inset:0;display:grid;place-items:center;color:var(--brand,#f26835);font-size:20px;letter-spacing:3px}
dialog[data-character-lead="header"] .chat-waiting .messenger-thinking>.assistant-character{visibility:hidden}
dialog[data-character-lead="header"] .chat-waiting .messenger-thinking>.assistant-character *{animation-play-state:paused!important}
.messenger-thinking .assistant-character{width:100%;height:100%}
#onboardingCelebration .celebration-art>.assistant-character{width:100%;height:100%}
.welcome-logo-stage>.assistant-character{width:100%;height:100%;--character-orange:#fffdf5;--character-face:#f26835}
@keyframes character-blink{0%,43%,47%,79%,83%,100%{transform:scaleY(1)}45%,81%{transform:scaleY(.07)}}
/* Listening and thinking stay planted; acknowledgements include a small downward nod. */
@keyframes character-attend{0%,39%,47%,78%,86%,100%{transform:translateY(0) perspective(260px) rotateX(-6deg)}43%{transform:translateY(3px) perspective(260px) rotateX(15deg)}82%{transform:translateY(2px) perspective(260px) rotateX(12deg)}}
@keyframes character-attend-gaze{0%,39%,47%,78%,86%,100%{transform:translateY(0)}43%{transform:translateY(3px)}82%{transform:translateY(2px)}}
@keyframes character-listen-turn{0%{transform:perspective(260px) rotateY(0) rotateZ(0)}100%{transform:perspective(260px) rotateY(-17deg) rotateZ(-3deg)}}
@keyframes character-consider{0%,100%{transform:perspective(260px) rotateY(-11deg) rotateX(-8deg) rotateZ(-4deg)}50%{transform:perspective(260px) rotateY(10deg) rotateX(-7deg) rotateZ(4deg)}}
@keyframes character-look-up{0%,100%{transform:translate(-5px,-8px)}50%{transform:translate(5px,-7px)}}
@keyframes character-think-left{0%,100%{transform:scale(1.15,1.2)}50%{transform:scale(.87,.68)}}
@keyframes character-think-right{0%,100%{transform:scale(.87,.68)}50%{transform:scale(1.15,1.2)}}
@keyframes character-speak-gaze{0%,100%{transform:translate(0,0)}30%{transform:translate(1px,-1px)}65%{transform:translate(-1px,0)}}
@keyframes character-speak-eye{0%,100%{transform:scale(1)}25%{transform:scale(1.04,.9)}55%{transform:scale(1,1.06)}75%{transform:scale(1,.96)}}
@keyframes character-greeting-nod{0%,100%{transform:perspective(260px) rotateX(0) rotateZ(0)}25%{transform:perspective(260px) rotateX(-7deg) rotateZ(-4deg)}55%{transform:perspective(260px) rotateX(24deg) rotateZ(-4deg)}80%{transform:perspective(260px) rotateX(-4deg) rotateZ(-2deg)}}
@keyframes character-greeting-gaze{0%,100%{transform:translateY(0)}25%{transform:translateY(-2px)}55%{transform:translateY(5px)}80%{transform:translateY(-1px)}}
@keyframes character-yes-nod{0%,100%{transform:translateY(0) perspective(260px) rotateX(0)}22%{transform:translateY(7px) perspective(260px) rotateX(27deg)}42%{transform:translateY(-1px) perspective(260px) rotateX(-6deg)}65%{transform:translateY(5px) perspective(260px) rotateX(20deg)}84%{transform:translateY(0) perspective(260px) rotateX(-3deg)}}
@keyframes character-yes-gaze{0%,100%{transform:translateY(0)}22%{transform:translateY(6px)}42%{transform:translateY(-2px)}65%{transform:translateY(4px)}84%{transform:translateY(-1px)}}
@keyframes character-head-shake{0%,100%{transform:perspective(260px) rotateY(0)}18%{transform:perspective(260px) rotateY(-25deg)}38%{transform:perspective(260px) rotateY(25deg)}58%{transform:perspective(260px) rotateY(-17deg)}78%{transform:perspective(260px) rotateY(13deg)}}
@keyframes character-shake-gaze{0%,100%{transform:translateX(0)}18%{transform:translateX(-5px)}38%{transform:translateX(5px)}58%{transform:translateX(-3px)}78%{transform:translateX(2px)}}
/* A full turn is always a rigid circle: no squash, stretch or jumping. */
@keyframes character-round-spin{0%{transform:rotate(0)}15%{transform:rotate(-16deg)}78%,100%{transform:rotate(360deg)}}
/* Squash/stretch belongs to the two happy jumps, which do not spin. */
@keyframes character-happy-hop{0%,100%{transform:translateY(0) scale(1)}12%{transform:translateY(5px) scale(1.13,.85);animation-timing-function:cubic-bezier(.2,.7,.3,1)}30%{transform:translateY(-18px) scale(.94,1.07)}40%{transform:translateY(-20px) scale(1);animation-timing-function:cubic-bezier(.55,0,.8,.3)}58%{transform:translateY(8px) scale(1.26,.72);animation-timing-function:cubic-bezier(.2,.7,.3,1)}71%{transform:translateY(-9px) scale(.91,1.12)}82%{transform:translateY(4px) scale(1.14,.85)}90%{transform:translateY(-3px) scale(.97,1.05)}96%{transform:translateY(1px) scale(1.04,.96)}}
/* Joy arches are visible in the air; open eyes take over on contact with the ground. */
@keyframes character-happy-eye-open{0%,48%{opacity:0}58%,100%{opacity:1}}
@keyframes character-happy-eye-joy{0%,48%{opacity:1}58%,100%{opacity:0}}
@keyframes character-celebrate-eye-open{0%,78%{opacity:0}96%,100%{opacity:1}}
@keyframes character-celebrate-eye-joy{0%,78%{opacity:1}96%,100%{opacity:0}}
@keyframes character-celebrate{0%,100%{transform:translateY(0) scale(1)}12%{transform:translateY(8px) scale(1.23,.76);animation-timing-function:cubic-bezier(.2,.7,.3,1)}30%{transform:translateY(-30px) scale(.9,1.12)}42%{transform:translateY(-34px) scale(1);animation-timing-function:cubic-bezier(.55,0,.8,.3)}59%{transform:translateY(8px) scale(1.23,.76)}73%{transform:translateY(-13px) scale(.96,1.05)}88%{transform:translateY(3px) scale(1.1,.9)}96%{transform:translateY(-1px) scale(.99,1.01)}}
@keyframes character-peek{0%{transform:rotate(0) scale(1)}20%{transform:translateY(5px) rotate(7deg) scale(1.12,.84)}52%{transform:translate(-8px,-6px) rotate(-25deg) scale(.94,1.08)}75%{transform:rotate(-12deg) scale(1.09,.94)}100%{transform:rotate(-17deg) scale(1.06,.96)}}
@keyframes character-empathy{0%{transform:rotate(0) scale(1)}25%{transform:translateY(3px) rotate(-12deg) scale(1.09,.93)}50%{transform:translateY(-3px) rotate(-6deg) scale(.96,1.05)}75%{transform:translateY(2px) rotate(-10deg) scale(1.04,.97)}100%{transform:rotate(-8deg) scale(1)}}
@keyframes character-spark{0%,20%,100%{opacity:0;transform:scale(.65) rotate(-15deg)}40%,55%{opacity:1;transform:scale(1.15) rotate(8deg)}80%{opacity:.5;transform:scale(1.3) rotate(20deg)}}
@keyframes character-wink{0%,65%,100%{transform:scaleY(1)}78%,90%{transform:scaleY(.08)}}
@media(prefers-reduced-motion:reduce){.assistant-character *{animation:none!important;transition:none!important}.assistant-character:is([data-expression="happy"],[data-expression="celebrate"]) .character-eye{opacity:0}.assistant-character:is([data-expression="happy"],[data-expression="celebrate"]) .character-joy-eyes{opacity:1}}

.assistant-character .character-list{opacity:0;fill:none;stroke:var(--character-orange);stroke-width:4;stroke-linecap:round;stroke-linejoin:round}
.assistant-character[data-expression="intro"] .character-body{animation:character-round-spin 1.8s ease-in-out,character-happy-hop 1.6s 1.8s linear}
.assistant-character[data-expression="intro"] .character-eye{animation:character-happy-eye-open 1.6s 1.8s linear forwards}
.assistant-character[data-expression="intro"] .character-joy-eyes{animation:character-happy-eye-joy 1.6s 1.8s linear forwards}
.assistant-character:is([data-expression="intro"],[data-expression="happy"],[data-expression="celebrate"]) .character-blink{animation:none}
.assistant-character[data-expression="unread"] .character-body{animation:character-unread-turn 7.6s ease-in-out infinite}
.assistant-character[data-expression="unread"] .character-gaze{animation:character-unread-gaze 7.6s ease-in-out infinite}
.assistant-character[data-expression="unread"] .character-eye-right{animation:character-unread-eye 7.6s ease-in-out infinite}
@keyframes character-unread-turn{0%,30%,85%,100%{transform:perspective(260px) rotateY(0) rotateX(0)}43%,67%{transform:perspective(260px) rotateY(7deg) rotateX(-5deg)}}
@keyframes character-unread-gaze{0%,30%,85%,100%{transform:translate(0,0)}43%,67%{transform:translate(8px,-8px)}}
@keyframes character-unread-eye{0%,30%,85%,100%{transform:scale(1)}43%,67%{transform:scale(1.08,1.1)}}
.assistant-character[data-expression="shopping"] .character-gaze{animation:character-shopping-eyes 3.2s ease-in-out both}
.assistant-character[data-expression="shopping"] .character-list{animation:character-shopping-list 3.2s ease-in-out both}
@keyframes character-shopping-eyes{0%,100%{opacity:1}20%,70%{opacity:0}}
@keyframes character-shopping-list{0%,100%{opacity:0;transform:translateY(3px)}20%,70%{opacity:1;transform:translateY(0)}}
/* One plate rim replaces the old button outline. Keep the other controls light. */
:root #addButton.assistant-plate-button{width:48px;height:48px;box-sizing:border-box;border:0;padding:0;background:transparent;overflow:visible;outline:none;box-shadow:none}
:root #addButton.assistant-plate-button:focus-visible{outline:none;box-shadow:none}
:root #addButton.assistant-plate-button:focus-visible .character-eye{fill:var(--ink)}
#addButton.assistant-plate-button>.assistant-character{width:48px;height:48px;--character-orange:var(--brand);--character-face:var(--outline-circle-background);grid-area:1/1;align-self:center;justify-self:center}
#addButton.assistant-plate-button .character-rim{mask:var(--launcher-rim-mask)}
#addButton.assistant-plate-button .character-face{r:46.75px}
#addButton.assistant-plate-button .assistant-unread-badge{position:absolute}
#addButton.assistant-plate-button .assistant-unread-badge:not([data-unread-display="emoji"]){right:-9px;top:-10px}
#addButton.assistant-plate-button [data-expression="unread"] .character-body{animation:none;transform:none}
:root #quickFavoritesButton.brand-outline-circle{width:48px;height:48px;box-sizing:border-box;border-width:2px}
#quickFavoritesButton.brand-outline-circle>svg{stroke-width:2}
:root .meal-actions #quickCameraButton.camera-fab{color:var(--outline-circle-background)}
:root .meal-actions #quickCameraButton svg{width:38px;height:38px}
.assistant-character[data-expression="notification"] .character-body{animation:character-round-spin 1.8s ease-in-out both}
.assistant-character[data-expression="notification"] .character-eye-left{animation:character-notification-wink 800ms 1.8s ease-in-out both}
.assistant-character[data-expression="notification"] .character-gaze{animation:character-notification-look 700ms 2.6s ease-in-out both}
.assistant-character:is([data-expression="notification"],[data-expression="wink"]) .character-blink{animation:none}
.assistant-character[data-expression="wink"] .character-eye-left{animation:character-notification-wink 800ms ease-in-out both}
@keyframes character-notification-wink{0%,100%{transform:scaleY(1)}35%,65%{transform:scaleY(.08)}}
@keyframes character-notification-look{from{transform:translate(0,0)}to{transform:translate(8px,-8px)}}
@media(prefers-reduced-motion:reduce){.assistant-character[data-expression="shopping"] .character-list{opacity:1}.assistant-character[data-expression="shopping"] :is(.character-gaze,.character-glint){opacity:0}}
