.cf-voice-presence{box-sizing:border-box;position:fixed;display:flex;align-items:center;justify-content:center;z-index:80;background:transparent;isolation:isolate;pointer-events:none}
.cf-voice-presence[hidden],.cf-voice-actions[hidden]{display:none!important}
.cf-voice-presence .cf-presence-orb{box-sizing:border-box;display:block;position:relative;padding:0!important;margin:0!important;min-width:0;min-height:0;flex:none;border:0!important;border-radius:50%;background:transparent!important;box-shadow:none!important;width:100%;aspect-ratio:1;touch-action:manipulation;cursor:pointer;outline:none;pointer-events:auto}
.cf-presence-orb canvas{display:block;width:100%;height:100%}
.cf-voice-presence .cf-presence-orb:focus-visible::after{content:'';position:absolute;bottom:10%;left:47%;width:6%;height:3px;border-radius:3px;background:#658e78}
.cf-voice-composer #voiceModeBtn,.cf-voice-composer #voiceModeExitBtn{display:none!important}
.cf-voice-composer .cf-voice-actions{display:flex;gap:10px;align-items:center}
.cf-voice-composer .cf-voice-actions button{display:grid;place-items:center;flex:none;width:48px;height:48px;min-height:48px;padding:12px;border:1px solid var(--line,#dce6df);border-radius:50%;background:var(--paper,#f7faf8);color:var(--ink,#2c4b3a);cursor:pointer;touch-action:manipulation}
.cf-voice-composer .cf-voice-actions [data-action=close]{background:var(--primary-dark,#486f5d);color:#fff;border-color:transparent}
.cf-voice-composer .cf-voice-actions button:disabled{opacity:.45;cursor:default}
.cf-voice-composer svg{width:24px;height:24px;fill:none;stroke:currentColor;stroke-width:1.9;stroke-linecap:round;stroke-linejoin:round}
.cf-voice-composer .cf-mic-slash{display:none}.cf-voice-composer [aria-pressed=true] .cf-mic-slash{display:block}.cf-voice-composer [aria-pressed=true]{background:#ece4d6!important}
.cf-voice-composer #composerTextarea{position:relative;display:flex;align-items:center;min-width:0}
.cf-voice-composer #userInput{padding-right:48px;min-height:50px;max-height:120px;resize:none}
.cf-voice-composer #sendBtn{position:absolute;right:8px;bottom:8px;display:grid;place-items:center;width:36px;height:36px;min-width:36px;min-height:36px;border-radius:50%;padding:7px}
.cf-voice-composer #sendBtn[hidden]{display:none!important}
.cf-presence-alert{position:fixed;z-index:10001;top:max(12px,env(safe-area-inset-top));left:16px;right:16px;max-width:600px;margin:auto;background:#fff5ed;border-radius:12px;padding:12px;color:#79462b;font-size:13px;text-align:center;pointer-events:none}
.cf-presence-alert[hidden]{display:none!important}
.cf-presence-fallback{display:none;position:absolute;inset:0;width:100%;height:100%;object-fit:contain;pointer-events:none;background:none}
.cf-voice-presence.render-failed canvas,.cf-voice-presence.render-pending canvas{visibility:hidden}.cf-voice-presence.render-failed .cf-presence-fallback,.cf-voice-presence.render-pending .cf-presence-fallback{display:block}
@media(max-width:700px){.cf-voice-composer .cf-voice-actions{gap:6px}.cf-voice-composer .cf-voice-actions button{width:44px;height:44px;min-height:44px;padding:10px}}
@media(prefers-reduced-motion:reduce){.cf-voice-presence *{animation:none!important;transition:none!important}}

/* One original composer, shared by text, compact voice and focused voice. */
.composer.cf-unified-composer{display:grid;grid-template-columns:44px minmax(0,1fr) auto;align-items:center;gap:0 8px;padding:8px 10px;border-radius:30px;flex-shrink:0;min-height:0;height:auto}
.composer.cf-unified-composer #composerToolbar{display:contents}
.composer.cf-unified-composer .share-menu-anchor{display:block;grid-column:1;grid-row:3;min-width:0}
.composer.cf-unified-composer #composerTextarea{grid-column:2;grid-row:3;min-width:0}
.composer.cf-unified-composer #composerPrimaryAction{grid-column:3;grid-row:3;display:flex;align-items:center;min-width:0;justify-content:flex-end}
.composer.cf-unified-composer #pendingSharedContent{grid-column:1/-1;grid-row:1}
.composer.cf-unified-composer #composerVoiceStatus{grid-column:1/-1;grid-row:2;min-width:0}
.composer.cf-unified-composer #composerVoiceStatus:has(#voiceModePanel[hidden]){display:none}
.composer.cf-unified-composer #userInput{display:block;box-sizing:border-box;min-width:0;width:100%;height:48px;min-height:48px;max-height:104px;margin:0;resize:none;padding:13px 10px;line-height:22px;font-size:16px;border:0;box-shadow:none;background:transparent}
.composer.cf-unified-composer.cf-voice-composer #userInput{padding-right:44px}
.composer.cf-unified-composer #shareWithChunfengBtn,.composer.cf-unified-composer #voiceModeBtn{display:grid;place-items:center;box-sizing:border-box;width:44px;height:44px;min-width:44px;min-height:44px;padding:0;border-radius:50%;font-size:26px}
.composer.cf-unified-composer #voiceModeBtn[hidden]{display:none!important}
.composer.cf-unified-composer #voiceModeBtnLabel{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip-path:inset(50%);white-space:nowrap}
.composer.cf-unified-composer .share-menu{left:0;right:auto;max-width:calc(100vw - 40px);bottom:calc(100% + 10px)}
.composer.cf-unified-composer .cf-voice-actions{gap:8px}
.composer.cf-unified-composer .cf-voice-actions button{width:44px;height:44px;min-height:44px;padding:10px}
.composer.cf-unified-composer .voice-mode-panel{display:flex;flex-wrap:nowrap;justify-content:flex-start;align-items:center;gap:8px;min-width:0}
.composer.cf-unified-composer .voice-mode-dot{flex:0 0 auto}
.composer.cf-unified-composer #voiceModeStatus{flex:0 1 auto;min-width:0;text-align:left;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.composer.cf-unified-composer .voice-partial-text{flex:1 1 0;min-width:0;text-align:left;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.cf-presence-slot{position:relative;height:126px;flex:0 0 126px;width:100%;min-width:0;background:transparent;pointer-events:none}
.cf-presence-slot>.cf-voice-presence{position:absolute;animation:cf-orb-arrive .2s ease-out both}
.cf-presence-history-hidden{visibility:hidden!important;pointer-events:none}
.cf-presence-expanded #dynamicActions:not(:empty){position:relative;z-index:81}
.cf-presence-slot>.cf-voice-presence{transform:translateX(-50%);transition:width .24s ease,height .24s ease}
.cf-mobile-typing .cf-presence-slot>.cf-voice-presence{transition:none}
#feedbackOpenBottom{display:none!important}
@keyframes cf-orb-arrive{from{opacity:0}to{opacity:1}}
@media(prefers-reduced-motion:reduce){.cf-presence-slot>.cf-voice-presence{animation:none;transition:none}}
.cf-presence-slot[hidden]{display:none!important}
/* Empty suggestion rows previously reserved 28px above the desktop orb. */
.cf-presence-layout-ready .compact-home #dynamicActions:empty{display:none}
.cf-presence-layout-ready .compact-home #chatLog{padding-bottom:8px;scroll-padding-bottom:12px}
.cf-presence-layout-ready .compact-home #chatLog>.message:last-child{scroll-margin-bottom:12px}
@media(min-width:981px){.cf-presence-layout-ready .compact-home .compact-workspace{height:clamp(600px,calc(100dvh - 146px),960px)}.cf-presence-layout-ready .compact-home .chat-log{min-height:120px}.cf-presence-layout-ready .composer.cf-unified-composer #composerVoiceStatus,.cf-presence-layout-ready .composer.cf-unified-composer #composerVoiceStatus:has(#voiceModePanel[hidden]){display:block;min-height:35px}}
@media(max-width:700px){
 .composer.cf-unified-composer{gap:0 5px;padding:6px;grid-template-columns:40px minmax(0,1fr) auto}
 .composer.cf-unified-composer #shareWithChunfengBtn{width:40px;min-width:40px}
 .composer.cf-unified-composer .cf-voice-actions{gap:4px}
 .cf-presence-slot{height:98px;flex-basis:98px}
 html.cf-keyboard-layout,body.cf-mobile-typing{overflow:hidden!important;overscroll-behavior:none}
 .cf-mobile-typing .topbar,.cf-mobile-typing .theme-strip,.cf-mobile-typing .module-panel,.cf-mobile-typing .chat-header,.cf-mobile-typing .mode-row,.cf-mobile-typing .below-actions,.cf-mobile-typing #dynamicActions{display:none!important}
 .cf-mobile-typing .app-shell.compact-home{position:fixed;inset:auto 0 auto 0;top:var(--cf-vv-top,0px);height:min(var(--cf-vv-height,100dvh),100dvh);width:100%;max-width:none;min-height:0;margin:0;padding:4px 6px 0;box-sizing:border-box;overflow:hidden}
 .cf-mobile-typing .compact-home main,.cf-mobile-typing .compact-home .compact-workspace{height:100%;min-height:0;max-height:none;margin:0;padding:0;display:flex;flex-direction:column;flex:1;gap:0;overflow:hidden}
 .cf-mobile-typing .compact-home .compact-chat-panel{display:flex;flex:1;flex-direction:column;width:100%;height:100%;min-height:0;padding:4px 6px 0;gap:0;overflow:hidden}
 .cf-mobile-typing .compact-home .chat-log{flex:1 1 0;min-height:64px;height:auto;max-height:none;padding:6px;overflow:auto}
 .cf-mobile-typing .cf-presence-slot{height:clamp(62px,calc(var(--cf-vv-height,100dvh) * .175),91px);flex-basis:clamp(62px,calc(var(--cf-vv-height,100dvh) * .175),91px)}
 /* The keyboard already owns the unsafe bottom inset; do not reserve it twice. */
 .cf-mobile-typing .composer.cf-unified-composer{margin:0;padding-bottom:6px;width:100%;box-sizing:border-box}
 .cf-mobile-typing .composer.cf-unified-composer .voice-mode-panel{min-height:24px;margin:0;padding:2px 6px;max-height:44px;overflow:auto}
}
