:root{font-family:-apple-system,BlinkMacSystemFont,"Segoe UI","PingFang SC","Microsoft YaHei",sans-serif;color:#171c23;background:#f7fafb;font-synthesis:none}*{box-sizing:border-box}body{margin:0}button,a,textarea{-webkit-tap-highlight-color:transparent}button,textarea{font:inherit}button{cursor:pointer;border:0;color:inherit}button:disabled{cursor:default;opacity:.45}button:focus,a:focus{outline:none}button:focus-visible,a:focus-visible{outline:none;background-color:#e3e8ed}svg{width:24px;height:24px;display:block}button span[data-icon]{display:flex}button{touch-action:manipulation}[hidden]{display:none!important}.sr-only{position:absolute;width:1px;height:1px;overflow:hidden;clip:rect(0,0,0,0)}
/* Recolor the sidebar only, retaining the original WebP alpha and layout. */
@supports ((mask-image: url("/assets/lingxi-max.webp")) or (-webkit-mask-image: url("/assets/lingxi-max.webp"))) {
  .sidebar-heading .brand {
    background-image: linear-gradient(90deg, #0769CE 0%, #1978D4 25%, #348BDB 50%, #58A5E3 75%, #85BEEA 100%);
    -webkit-mask-image: url("/assets/lingxi-max.webp");
    mask-image: url("/assets/lingxi-max.webp");
    mask-mode: alpha;
    -webkit-mask-repeat: no-repeat;
    mask-repeat: no-repeat;
    -webkit-mask-size: 100% 100%;
    mask-size: 100% 100%;
  }
  .sidebar-heading .brand img { opacity: 0; }
}
.app{height:100dvh;min-height:420px;background:radial-gradient(ellipse 720px 480px at calc(50% + 190px) 70px,#80b5f0e0 0%,#9fc7f2bb 23%,#c0daf58c 46%,#dcebf642 70%,#edf4f912 88%,#edf4f900 100%),radial-gradient(ellipse 540px 260px at 28% 0%,#d8eaf8a6 0%,transparent 100%),radial-gradient(ellipse 85% 65% at 55% 115%,#b6d7f5 0%,#d5e7f6 40%,#edf4f970 74%,transparent 100%),#f7fafb}.main{height:100%;display:flex;flex-direction:column}.topbar{display:flex;align-items:center;justify-content:space-between;padding:22px 30px;flex-shrink:0}.icon-button{display:inline-flex;align-items:center;justify-content:center;background:transparent;width:40px;height:40px;flex-shrink:0;border-radius:50%}.round-button{width:46px;height:46px;background:#ffffff65;transition:background .2s,transform .2s}.round-button:hover{background:#ffffffb5;transform:translateY(-1px)}.conversation-scroll{flex:1;overflow:auto;overscroll-behavior:contain;scrollbar-width:thin;padding:0 24px}.welcome{max-width:800px;margin:34px auto 24px;text-align:center}
/* The halo fades to transparent inside its bounds, so the scrollport cannot cut a glow edge. */
.orb{position:relative;display:block;width:152px;height:152px;margin:0 auto 38px;padding:0;background:transparent;border-radius:50%;isolation:isolate;flex-shrink:0;animation:orb-float 6s ease-in-out infinite}
.orb::before{content:"";position:absolute;inset:-45%;z-index:-1;border-radius:50%;background:radial-gradient(circle closest-side,#ffffffbf 0%,#ffffffae 25%,#ffffff85 40%,#ffffff57 52%,#ffffff38 62%,#ffffff1c 73%,#ffffff0a 85%,#ffffff02 94%,#ffffff00 100%);pointer-events:none}
.orb-surface{display:block;height:100%;width:100%;border:1.5px solid #ffffffd9;border-radius:50%;position:relative;overflow:hidden;isolation:isolate;background:#76aff5;box-shadow:inset 0 0 12px 3px #ffffff85}
/* Broad asymmetric currents remain visible even at the 112px phone size. */
.orb-surface i,.orb-surface b,.orb-surface em{position:absolute;display:block;pointer-events:none;will-change:transform}
.orb-surface i{width:170%;height:170%;top:-35%;left:-35%;border-radius:44%;background:conic-gradient(from 20deg at 48% 54%,#6ba6f4 0deg,#b9e6ff 70deg,#468aeb 135deg,#3978df 200deg,#b2dbff 280deg,#6ba6f4 360deg);filter:blur(7px);animation:orb-current 11s linear infinite;opacity:1}
.orb-surface b{width:115%;height:64%;top:24%;left:-12%;border-radius:50%;background:radial-gradient(ellipse at 50% 55%,#d6f1ffb5 0%,#b5dfff90 35%,#a3d6ff00 72%);filter:blur(5px);animation:orb-tide 7s ease-in-out infinite;opacity:.9}
.orb-surface em{width:88%;height:95%;top:9%;left:42%;border-radius:46%;background:radial-gradient(ellipse at 45% 40%,#ffffffb8 0%,#e6f6ff85 24%,#c6e7ff00 65%);filter:blur(6px);animation:orb-glimmer 9s ease-in-out infinite;opacity:.85}
.orb-surface::after{content:"";position:absolute;inset:0;pointer-events:none;border-radius:50%;background:radial-gradient(circle at 27% 16%,#ffffff80,transparent 39%),radial-gradient(circle at 50% 47%,transparent 53%,#d3eaff50 78%,#ffffffaa 100%);box-shadow:inset 0 0 6px #fff8}
@keyframes orb-current{0%,100%{transform:translate(-8%,0) scale(1.05)}50%{transform:translate(8%,5%) scale(.95,1.08)}}
@keyframes orb-tide{0%,100%{transform:translate(-14%,-22%) rotate(-35deg) scale(.9,1.1)}50%{transform:translate(15%,33%) rotate(45deg) scale(1.1,.9)}}
@keyframes orb-glimmer{0%,100%{transform:translate(8%,-10%) rotate(10deg)}50%{transform:translate(-62%,27%) rotate(-35deg)}}
.orb-face{position:absolute;inset:0;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:10px;transform:translate(var(--look-x,0px),var(--look-y,0px));transition:transform .25s ease;pointer-events:none;padding-top:12px}
.orb-eyes{display:flex;gap:25px;align-items:center;height:25px;animation:orb-glance 13s ease-in-out infinite}
.orb-eye{display:block;width:7px;height:21px;background:#245384;border-radius:999px;transform-origin:center;animation:orb-blink 6.8s infinite}
.orb-smile{display:block;width:8px;height:3px;border:1.3px solid #2a5786;border-top:0;border-radius:0 0 9px 9px;opacity:.65;transition:transform .3s,opacity .3s}
.orb[data-state=greeting]{animation:orb-greet 1.8s ease-in-out 1}
.orb[data-state=greeting] .orb-eye{width:13px;height:6px;background:transparent;border:2px solid #245384;border-bottom:0;border-radius:50% 50% 0 0;animation:orb-smile-eyes 1.8s ease-in-out 1}
.orb[data-state=greeting] .orb-eyes,.orb[data-state=listening] .orb-eyes,.orb[data-state=thinking] .orb-eyes{animation:none}
.orb[data-state=greeting] .orb-smile{transform:scale(1.1);opacity:.75}
.orb[data-state=listening]{animation:orb-attend 2s ease-in-out infinite}
.orb[data-state=listening] .orb-eye{transform:scaleY(1.12);animation:none}
.orb[data-state=listening] .orb-smile{transform:scale(.65)}
.orb[data-state=thinking] .orb-face{transform:translate(5px,-4px) rotate(-5deg)}
.orb[data-state=thinking] .orb-eye:last-child{height:15px}
.orb[data-state=thinking] .orb-surface i{animation-duration:7s}
.orb[data-state=speaking] .orb-smile{background:#28588b;border-radius:50%;animation:orb-talk .6s ease-in-out infinite alternate}
.orb[data-state=speaking] .orb-surface i{animation-duration:6s}
@keyframes orb-float{0%,100%{transform:translateY(0)}50%{transform:translateY(-4px)}}
@keyframes orb-flow{from{transform:translate(-10%,-10%) rotate(-20deg)}to{transform:translate(15%,12%) rotate(35deg)}}
@keyframes orb-blink{0%,38%,42%,75%,79%,100%{transform:scaleY(1)}40%,77%{transform:scaleY(.08)}}
@keyframes orb-greet{0%,100%{transform:translateY(0) rotate(0)}25%{transform:translateY(-5px) rotate(-8deg)}65%{transform:translateY(-3px) rotate(7deg)}}
@keyframes orb-attend{0%,100%{transform:rotate(-4deg)}50%{transform:rotate(-4deg) translateY(-3px)}}
@keyframes orb-talk{from{transform:scale(1,.65)}to{transform:scale(1.1,1.5)}}

h1{font-size:36px;font-weight:650;line-height:1.35;letter-spacing:-1.2px;margin:0}.welcome-description{font-size:18px;color:#626b75;margin:16px 0 0}.suggestions{max-width:660px;margin:48px auto 0;display:flex;flex-wrap:wrap;justify-content:center;gap:12px}.suggestions button{display:flex;align-items:center;justify-content:center;gap:11px;padding:17px 23px;border-radius:999px;background:#ffffffc4;font-size:15px;white-space:nowrap;transition:transform .2s,background .2s,box-shadow .2s}.suggestions button:hover{transform:translateY(-3px);background:#fff;box-shadow:0 8px 25px #5e86ad12}.suggestions svg{width:21px;height:21px;color:#4d91d9}.suggestions button:nth-child(3) svg{color:#dc7395}.suggestions button:nth-child(4) svg{color:#98a739}.suggestions button:nth-child(5) svg{color:#d3ad35}.suggestions button:nth-child(6) svg{color:#7490c4}
.composer-area{position:relative;width:min(800px,calc(100% - 48px));margin:18px auto 0;padding-bottom:max(16px,env(safe-area-inset-bottom));flex-shrink:0}.composer{background:#fffffff0;border-radius:28px;padding:8px 12px;box-shadow:0 10px 35px #3c526414,0 2px 6px #3c526405}.composer-row{display:flex;align-items:center;gap:10px;min-height:50px}.composer-icon{width:42px;height:42px}.composer-icon svg{width:29px;height:29px;stroke-width:1.3}.record-button{flex:1;align-self:stretch;background:transparent;font-size:18px;font-weight:400;user-select:none;-webkit-user-select:none;touch-action:none;border-radius:18px;min-width:0}.record-button.recording{background:#e7f2ff;color:#237bdf}.composer textarea{flex:1;min-width:0;border:0;background:transparent;resize:none;outline:none;padding:12px 4px;line-height:26px;font-size:17px;max-height:150px;color:#171c23}.composer textarea::placeholder{color:#a0a6ad}.send-button{width:36px;height:36px;flex-shrink:0;display:flex;align-items:center;justify-content:center;border-radius:50%;background:#087fff;color:#fff;margin:0 5px}.send-button svg{stroke-width:1.6}.composer[data-mode=voice] textarea,.composer[data-mode=voice] .send-button,.composer[data-mode=text] .record-button,.composer[data-mode=text]:not(.has-text) .send-button{display:none}.composer[data-mode=text].has-text #modeToggle,.composer[data-mode=text].has-text #uploadBtn{display:none}.composer[data-mode=text].has-text textarea{padding-left:10px}.composer-note{text-align:center;font-size:11px;color:#7d8993;margin:13px 0 0;line-height:1.7}.composer-note button{background:none;color:inherit;font-size:inherit;padding:0 0 0 8px}.composer-note span{margin-left:6px}.upload-menu{position:absolute;bottom:calc(100% + 10px);right:0;background:#fffffff5;box-shadow:0 12px 45px #46627a22;border-radius:24px;padding:12px;display:flex;gap:8px;z-index:5}.upload-menu button{display:flex;flex-direction:column;align-items:center;gap:10px;padding:18px 26px;background:#edf4f8;border-radius:18px;font-size:14px}.upload-menu button:hover{background:#e2effb}.attachments{display:flex;flex-wrap:wrap;gap:6px}.attachments:not(:empty){padding:6px 6px 10px}.attachment-chip{display:flex;align-items:center;max-width:100%;border-radius:12px;background:#edf4fb;padding-left:10px;font-size:12px}.attachment-chip>button:first-child{background:none;overflow:hidden;white-space:nowrap;text-overflow:ellipsis;max-width:240px}.attachment-chip .icon-button{width:30px;height:30px}.attachment-chip svg{width:15px;height:15px}
.sidebar{position:fixed;inset:0 auto 0 0;z-index:30;width:310px;max-width:85vw;background:#f4f9fceF;backdrop-filter:blur(22px);padding:28px 20px;display:flex;flex-direction:column;transform:translateX(-101%);visibility:hidden;transition:transform .25s ease,visibility .25s}.sidebar.open{transform:translateX(0);visibility:visible}.sidebar-backdrop{position:fixed;inset:0;z-index:25;background:#314a6429;backdrop-filter:blur(4px)}.sidebar-heading{display:flex;align-items:center;justify-content:space-between;margin-bottom:30px}.brand{display:flex}.brand img{width:166px;height:auto}.new-chat{display:flex;align-items:center;gap:12px;background:#fff;border-radius:999px;padding:15px 18px;color:#267dd5;font-size:14px}.key-hint{margin-left:auto}.history-label{display:flex;justify-content:space-between;color:#8b97a4;font-size:12px;margin:30px 12px 12px}.history{flex:1;overflow:auto}.empty-history{font-size:13px;color:#8a97a4;white-space:pre-line;line-height:2;margin:16px 12px}.history-item{display:flex;align-items:center;gap:10px;width:100%;padding:13px 12px;border-radius:14px;background:none;margin-bottom:4px;text-align:left;color:#536473;font-size:13px}.history-item span{white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.history-item svg{flex-shrink:0;width:18px}.history-item.active,.history-item:hover{background:#e3eff9}.sidebar-bottom{padding-top:18px}.principles{display:flex;align-items:center;gap:12px;font-size:13px;padding:12px}.principles svg{color:#72a1ce}.principles p{font-size:11px;color:#8a97a4;margin:6px 0}.sidebar-link{display:flex;align-items:center;gap:10px;width:100%;background:none;padding:11px 12px;font-size:12px;color:#6d7e8c}.sidebar-link svg{width:17px;height:17px}.sidebar-link>span:last-child:not(:first-child){margin-left:auto}.local-indicator{font-size:10px;color:#9aa6b1;padding:18px 12px 0}
.messages{max-width:760px;margin:24px auto;display:flex;flex-direction:column;gap:26px}.messages:empty{display:none}.message{max-width:90%;line-height:1.85;font-size:15px;overflow-wrap:anywhere}.message.user{align-self:flex-end;background:#368af3;color:#fff;padding:17px 23px;border-radius:25px 25px 0 25px;max-width:80%}.message.assistant{align-self:flex-start;background:#fffffff2;border-radius:25px 25px 25px 0;padding:20px 24px}.message-body{white-space:pre-wrap}.assistant-heading{display:flex;align-items:center;gap:12px;font-size:12px;font-weight:600;color:#5187bb;margin-bottom:12px}.message-tag{font-size:10px;font-weight:400;color:#95a1ab}.message-actions{display:flex;gap:5px;margin-top:13px}.message-actions .icon-button{height:30px;width:30px;background:#edf4fc;color:#3889e5;border-radius:10px}.message-actions svg{width:17px;height:17px}.sources{font-size:12px;margin-top:18px;color:#7e8c9a;border-top:1px solid #edf1f5;padding-top:12px}.sources summary{cursor:pointer}.source-item{background:#f4f8fb;border-radius:12px;padding:12px;margin-top:10px}.source-item p{margin:6px 0}.source-item a,.source-item button{color:#3287df;background:none;font-size:12px}.user-files{font-size:11px;opacity:.85;margin-top:10px}.thinking{display:flex;align-items:center;gap:10px;font-size:12px;color:#7c8fa0;padding:12px}.thinking-dots{display:flex;gap:4px}.thinking-dots i{width:5px;height:5px;border-radius:50%;background:#6fa5df;animation:pulse 1s infinite alternate}.thinking-dots i:nth-child(2){animation-delay:.2s}.thinking-dots i:nth-child(3){animation-delay:.4s}@keyframes pulse{to{opacity:.25;transform:translateY(-3px)}}.toast{position:fixed;z-index:100;bottom:130px;left:50%;transform:translateX(-50%);max-width:90vw;width:max-content;padding:13px 20px;border-radius:18px;background:#243a50ed;color:white;font-size:13px;box-shadow:0 8px 30px #1d30482a}.info-dialog{border:0;border-radius:25px;width:min(520px,90vw);padding:26px;color:#33475a;box-shadow:0 24px 90px #23436133}.info-dialog::backdrop{background:#28446140;backdrop-filter:blur(4px)}.dialog-heading{display:flex;justify-content:space-between;align-items:center;gap:15px}.dialog-heading h2{font-size:19px;margin:0}.dialog-body{white-space:pre-wrap;line-height:1.9;font-size:14px;max-height:65dvh;overflow:auto;padding-top:14px}.dialog-primary{display:block;margin-top:20px;padding:12px 20px;border-radius:999px;background:#3288ed;color:white}
.message.assistant.assistant-preface{background:#eef7ff;padding:14px 18px;color:#43627f;max-width:82%}.assistant-preface .assistant-heading{margin-bottom:7px}.assistant-preface .message-tag{color:#6895bd}
@media(min-width:1100px){.welcome{margin-top:48px}.suggestions{max-width:650px}.suggestions button{min-width:205px}}@media(max-width:600px){.topbar{padding:16px 18px}.round-button{width:42px;height:42px}.app{background:radial-gradient(ellipse 540px 490px at 80% 5%,#80b5f0e0 0%,#9fc7f2bb 23%,#c0daf58c 46%,#dcebf642 70%,#edf4f912 88%,#edf4f900 100%),radial-gradient(ellipse 270px 200px at 13% 0%,#d8eaf8b0 0%,transparent 100%),radial-gradient(ellipse 115% 62% at 58% 115%,#b6d7f5 0%,#d5e7f6 40%,#edf4f970 74%,transparent 100%),#f7fafb}.conversation-scroll{padding:0 18px}.welcome{margin-top:48px}.orb{width:112px;height:112px;margin-bottom:30px}.orb-eyes{gap:20px;height:20px}.orb-eye{width:6px;height:17px}.orb-face{gap:8px;padding-top:8px}.orb-smile{width:6px;height:3px}.orb-surface i,.orb-surface b,.orb-surface em{filter:blur(5px)}h1{font-size:27px;letter-spacing:-.7px}.welcome-description{font-size:15px;margin-top:13px}.suggestions{margin-top:38px;gap:10px 8px;max-width:390px}.suggestions button{font-size:12px;padding:14px 14px;gap:7px}.suggestions svg{width:18px;height:18px}.composer-area{width:calc(100% - 28px);margin-top:12px;padding-bottom:max(12px,env(safe-area-inset-bottom))}.composer{border-radius:24px;padding:6px 10px}.composer-row{gap:5px;min-height:48px}.composer-icon{width:36px;height:40px}.composer-icon svg{width:27px;height:27px}.composer-note{font-size:9px;margin-top:11px}.composer-note span{margin-left:3px}.composer-note button{padding-left:5px}.message{max-width:94%;font-size:14px}.message.assistant{padding:17px 18px}.message.user{padding:15px 18px}.messages{margin-top:14px;gap:22px}.message-tag{font-size:9px}.assistant-heading{gap:8px}.record-button{font-size:17px}}@media(max-width:360px){.welcome{margin-top:32px}.orb{width:92px;height:92px;margin-bottom:22px}h1{font-size:24px}.welcome-description{font-size:13px}.suggestions{margin-top:28px;gap:8px 6px}.suggestions button{font-size:11px;padding:12px 10px;gap:5px}.suggestions svg{width:16px;height:16px}.composer-note span{display:none}}@media(max-height:720px) and (min-width:601px){.welcome{margin-top:0}.orb{width:100px;height:100px;margin-bottom:20px}.suggestions{margin-top:25px}}@media(prefers-reduced-motion:reduce){*,*::before,*::after{animation:none!important;transition:none!important;scroll-behavior:auto!important}.orb-surface i{transform:translate(-10%,-10%)}}

@media(max-height:720px) and (min-width:601px){.welcome{margin-top:32px}}

.orb:hover{animation-play-state:paused}
.compact-orb{display:none;width:42px;height:42px;margin:0;animation:none}
.main:has(#welcome[hidden]) .compact-orb{display:block}
.compact-orb::before{inset:-12px}
.compact-orb .orb-surface{box-shadow:inset 0 0 5px #ffffff80}
.compact-orb .orb-surface i,.compact-orb .orb-surface b,.compact-orb .orb-surface em{filter:blur(2px)}
.compact-orb .orb-face{gap:3px;padding-top:3px}
.compact-orb .orb-eyes{gap:8px;height:8px}
.compact-orb .orb-eye{width:2.5px;height:7px}
.compact-orb .orb-smile{width:3px;height:1.5px;border-width:.8px}
.compact-orb[data-state=greeting] .orb-eye{width:5px;height:2.5px;border-width:1px}
.compact-orb[data-state=thinking] .orb-eye:last-child{height:5px}
/* Keep the button hit area stable; animate the character inside it. */
.orb,.orb[data-state=greeting],.orb[data-state=listening]{animation:none}
.orb>.orb-surface{animation:orb-float 6s ease-in-out infinite}
.orb[data-state=greeting]>.orb-surface,.orb[data-state=greeting]>.orb-face{animation:orb-greet 1.8s ease-in-out 1}
.orb[data-state=listening]>.orb-surface{animation:orb-attend 2s ease-in-out infinite}
.orb:hover>.orb-surface{animation-play-state:paused}
.compact-orb>.orb-surface{animation:none}

.about-section + .about-section{margin-top:24px}.about-section h3{font-size:15px;color:#2676c2;margin:0 0 9px;font-weight:600}.about-section p{margin:0;line-height:1.95;white-space:pre-line}.about-section:last-child,.dialog-body>.about-section:last-of-type{padding:16px;background:#f1f6fa;border-radius:16px}.about-section:last-child p,.dialog-body>.about-section:last-of-type p{font-size:12px;color:#718191}

/* Attachment picker matches the voice composer height: 66px desktop / 60px mobile. */
.upload-menu{height:66px;padding:8px;gap:6px;border-radius:22px;align-items:stretch}
.upload-menu button{flex-direction:row;gap:8px;padding:0 16px;border-radius:16px;font-size:13px}
.upload-menu button svg{width:18px;height:18px}
@media(max-width:600px){.upload-menu{height:60px;padding:6px;border-radius:20px}.upload-menu button{padding:0 14px;border-radius:15px}.upload-menu button svg{width:17px;height:17px}}

/* Four fixed topics in two rows; one rotating topic centered on the third. */
.suggestions{max-width:560px;display:grid;grid-template-columns:repeat(2,max-content);justify-content:center}
.suggestions button{min-width:0}
.suggestions button:last-child{grid-column:1 / -1;justify-self:center}
@media(min-width:1100px){.suggestions{max-width:560px}.suggestions button{min-width:205px}}

@keyframes orb-glance{0%,15%,43%,58%,86%,100%{transform:translate(0,0)}21%,30%{transform:translate(-4px,-1px)}35%,39%{transform:translate(4px,0)}65%,70%{transform:translate(0,-3px)}77%,81%{transform:translate(0,2px)}}
@keyframes orb-smile-eyes{0%,100%{transform:scaleY(.18)}22%,78%{transform:scaleY(1)}}
@media(max-width:600px){.orb:not(.compact-orb)[data-state=greeting] .orb-eye{width:11px;height:5px;border-width:1.7px}}

/* One white, round-capped stroke language for eyes and mouth in every state. */
.orb .orb-eyes{gap:18px}
.orb .orb-eye,.orb[data-state=greeting] .orb-eye,.orb[data-state=thinking] .orb-eye:last-child{width:14px;height:24px;background:none;border:0;border-radius:0;color:#fff}
.orb .orb-eye svg,.orb .orb-smile svg{display:block;width:100%;height:100%;overflow:visible}
.orb .orb-smile,.orb[data-state=greeting] .orb-smile,.orb[data-state=speaking] .orb-smile{width:10px;height:7px;border:0;background:none;border-radius:0;color:#fff;opacity:1}
.eye-happy,.mouth-happy{opacity:0}
.orb[data-state=greeting] .eye-rest,.orb[data-state=greeting] .mouth-rest{opacity:0}
.orb[data-state=greeting] .eye-happy,.orb[data-state=greeting] .mouth-happy{opacity:1}
.orb[data-state=greeting] .orb-eye{animation:orb-smile-eyes 1.8s ease-in-out 1}
@media(max-width:600px){.orb:not(.compact-orb) .orb-eye,.orb:not(.compact-orb)[data-state=greeting] .orb-eye,.orb:not(.compact-orb)[data-state=thinking] .orb-eye:last-child{width:12px;height:20px;border:0}.orb:not(.compact-orb) .orb-smile{width:8px;height:6px}}
.orb.compact-orb .orb-eyes{gap:5px}
.orb.compact-orb .orb-eye,.orb.compact-orb[data-state=greeting] .orb-eye,.orb.compact-orb[data-state=thinking] .orb-eye:last-child{width:5px;height:8px;border:0}
.orb.compact-orb .orb-smile{width:4px;height:3px;border:0}

/* Eye expressions are coordinated by OrbFace, not overlapping CSS blink loops. */
.orb .orb-face,.orb[data-state=greeting]>.orb-face,.orb[data-state=thinking] .orb-face{padding:0;gap:0;animation:none;transform:translate(var(--look-x,0px),calc(-9% + var(--look-y,0px)))}
.orb .orb-eyes,.orb[data-state=greeting] .orb-eyes{animation:none;transform:translate(var(--gaze-x,0px),var(--gaze-y,0px));transition:transform .42s cubic-bezier(.22,.65,.3,1)}
.orb .orb-eye,.orb[data-state=greeting] .orb-eye,.orb[data-state=listening] .orb-eye{animation:none;transform:none}
.eye-shape{opacity:1}

/* Larger eyes carry the expression without a mouth. */
.orb .orb-eye,.orb[data-state=greeting] .orb-eye,.orb[data-state=thinking] .orb-eye:last-child{width:18px;height:30px}
.orb .orb-eyes{height:30px;gap:19px}
@media(max-width:600px){.orb:not(.compact-orb) .orb-eye,.orb:not(.compact-orb)[data-state=greeting] .orb-eye,.orb:not(.compact-orb)[data-state=thinking] .orb-eye:last-child{width:15px;height:25px}.orb:not(.compact-orb) .orb-eyes{height:25px;gap:19px}}
.orb.compact-orb .orb-eye,.orb.compact-orb[data-state=greeting] .orb-eye,.orb.compact-orb[data-state=thinking] .orb-eye:last-child{width:6px;height:10px}
.orb.compact-orb .orb-eyes{height:10px;gap:6px}

/* True sphere shading; the existing soft gradients remain a no-WebGL fallback. */
.sphere-canvas{position:absolute;inset:0;width:100%;height:100%;display:none;border-radius:50%;pointer-events:none}
.sphere-rendered .sphere-canvas{display:block}
.sphere-rendered>i,.sphere-rendered>b,.sphere-rendered>em{visibility:hidden;animation:none!important}
.sphere-rendered::after{background:none;box-shadow:inset 0 0 3px #ffffff65}

/* The glass contour is drawn in the shader, with room for a gentle liquid edge. */
.orb .sphere-rendered{background:transparent;border:0;box-shadow:none}
.orb .sphere-rendered::after{display:none}

/* Let the welcome glow extend behind the header without clipping at the
   scrollport's former top edge. Padding preserves the exact content position;
   conversation mode keeps its regular scroll boundary. */
.main{--header-height:90px}
.topbar{position:relative;z-index:2}
.main:has(#welcome:not([hidden])) .conversation-scroll{margin-top:calc(-1 * var(--header-height));padding-top:var(--header-height)}
@media(max-width:600px){.main{--header-height:74px}}

/* Close rim light follows the actual fluid silhouette; the broad halo stays soft. */
.orb:not(.compact-orb) .orb-surface{filter:drop-shadow(0 0 3px #fffffff0) drop-shadow(0 0 9px #ffffff99)}

/* Keep the circular control; distinguish sound states through the outline icon. */
#voiceToggle{color:#171c23}
#voiceToggle[aria-pressed="true"]{color:#087fff}
#voiceToggle svg{stroke-width:1.6;fill:none}

.source-item .source-title{display:inline;color:#3287df;font-weight:500;text-decoration:none;line-height:1.7}.source-item .source-title:hover{text-decoration:underline}

/* Reading stays under the user's control while the answer grows. */
.conversation-scroll{overflow-anchor:none}
.message.assistant .message-body{text-align:justify;text-align-last:start;text-justify:inter-ideograph}
@media(max-width:600px){
  .message{font-size:16px}
  .assistant-heading,.sources,.source-item a,.source-item button,.thinking{font-size:14px}
}

.message.assistant .message-body strong{font-weight:600}

.record-button.cancel-intent{background:#fff0ee;color:#bf514d}
.record-button{-webkit-touch-callout:none}
/* Recording readiness is shown across the entire composer, not just its label. */
.composer{transition:background .16s ease,box-shadow .16s ease}
.record-wave{display:none;align-items:center;justify-content:center;gap:4px;height:32px;pointer-events:none}
.record-wave i{display:block;width:3px;height:4px;border-radius:99px;background:currentColor;transition:height 65ms linear}
.composer.mic-starting{background:#e5f0fc;box-shadow:0 0 0 1px #a8cdf066,0 8px 30px #3c526414}
.composer.mic-starting .record-button{opacity:.65}
.composer.mic-recording{background:#e5f0fc;box-shadow:0 8px 30px #267dd418;color:#123f69;animation:recording-breathe 3.6s ease-in-out infinite}
.composer.mic-recording .composer-icon,.composer.mic-recording .record-button.recording{color:#123f69;background:transparent}
.composer.mic-recording .record-button{display:flex;align-items:center;justify-content:center;gap:20px;opacity:1}
.composer.mic-recording #recordLabel{font-size:13px;font-weight:400}
.composer.mic-recording .record-wave{display:flex}
.composer.mic-recording.mic-cancel{animation:none;background:#f4d6d4;color:#792f2d}
.composer.mic-recording.mic-cancel .composer-icon,.composer.mic-recording.mic-cancel .record-button.recording{color:#792f2d}
.composer.mic-recording.mic-cancel .record-wave{opacity:.45}
@media(max-width:600px){.composer.mic-recording .record-button{gap:10px}.record-wave{gap:3px}.record-wave i{width:2px}.composer.mic-recording #recordLabel{font-size:12px}}
/* Start at the exact preparing colour: recording fades in without a colour jump. */
@keyframes recording-breathe{
  0%,100%{background-color:#e5f0fc;box-shadow:0 8px 30px #267dd418}
  25%,75%{background-color:#a6d3fa;box-shadow:0 8px 30px #267dd421}
  50%{background-color:#5ca8f0;box-shadow:0 8px 30px #267dd430}
}
@media(prefers-reduced-motion:reduce){.composer.mic-recording{animation:none;background:#a6d3fa}}
/* The press itself is immediate; the ready state owns the breathing animation. */
.composer.mic-starting,.composer.mic-recording{transition:none}
.answer-table-wrap{max-width:100%;overflow-x:auto;margin:14px 0;border:1px solid #dce7f0;border-radius:12px;white-space:normal;overscroll-behavior-x:contain}
.answer-table-wrap table{border-collapse:collapse;width:100%;min-width:360px;font-size:inherit;line-height:1.65;text-align:left}
.answer-table-wrap th,.answer-table-wrap td{padding:10px 12px;border-bottom:1px solid #e3ebf2;vertical-align:top;min-width:90px;max-width:260px;overflow-wrap:anywhere;font-weight:400}
.answer-table-wrap thead th{background:#edf5fc;font-weight:600;color:#24547d}
.answer-table-wrap tbody th{font-weight:500;background:#f7fafc}
.answer-table-wrap tr:last-child>*{border-bottom:0}
.message.assistant .message-body:has(.answer-table-wrap){min-width:0}

/* Compact mobile comparison tables; titles have their own type hierarchy. */
.message.assistant .message-body .answer-heading{font-size:1.06em;font-weight:650}
.message.assistant .answer-table-wrap table{font-size:14px;white-space:normal}
@media(max-width:600px){
 .message{font-size:18px}
 .message.assistant .message-body .answer-heading{font-size:19px}
 .message.assistant .answer-table-wrap table{font-size:13px;min-width:0;table-layout:fixed;line-height:1.6}
 .message.assistant .answer-table-wrap th,.message.assistant .answer-table-wrap td{min-width:0;max-width:none;padding:10px 7px;white-space:normal;overflow-wrap:anywhere;word-break:normal}
}
.memory-preference-list{display:grid;gap:8px}
.memory-preference{display:flex;align-items:flex-start;gap:10px;background:#f4f8fb;border-radius:12px;padding:10px 12px}
.memory-preference span{flex:1}
.memory-forget{border:0;background:none;color:#5686b3;font-size:12px;padding:2px 4px;flex:none}

/* Reserve the answer width before streaming begins so deltas only grow height.
   Without this, intrinsic sizing makes the bubble jump as each text/table chunk
   is rebuilt by renderAnswer. */
.message.assistant{width:90%;max-width:90%;transition:none}
.message.assistant .message-body{width:100%;min-width:0}
.message.assistant.assistant-preface{width:82%;max-width:82%}
.conversation-scroll{scrollbar-gutter:stable}
@media(max-width:600px){
  .message.assistant{width:94%;max-width:94%}
  .message.assistant.assistant-preface{width:90%;max-width:90%}
}

/* Material reading feedback stays quiet and uses the existing composer palette. */
.input-count{font-size:11px;line-height:1.5;text-align:right;color:#8493a2;padding:0 10px 3px;overflow-wrap:anywhere}.input-count.over-limit{color:#b44949}.upload-status{font-size:12px;line-height:1.6;color:#52789b;padding:3px 10px 6px;overflow-wrap:anywhere}.composer[data-mode=text].has-materials .send-button{display:flex}.material-export{display:block;color:#1e57c9;font-size:14px;margin-bottom:14px;text-decoration:none}

/* Keep the native textarea for IME, caret, selection and clipboard; mirror
   only its colours so links stay identifiable while the text is edited. */
.text-input-shell{position:relative;flex:1;min-width:0;display:flex;align-self:center}
.composer .text-input-shell textarea{position:relative;z-index:1;display:block;width:100%;box-sizing:border-box;margin:0;white-space:pre-wrap;overflow-wrap:break-word}
.input-highlight{position:absolute;inset:0;overflow:hidden;box-sizing:border-box;white-space:pre-wrap;overflow-wrap:break-word;color:#171c23;pointer-events:none;user-select:none;-webkit-user-select:none;visibility:hidden}
.input-link{color:#087fff}
.text-input-shell.has-links .input-highlight{visibility:visible}
.composer .text-input-shell.has-links textarea{color:transparent;caret-color:#171c23}
.composer .text-input-shell.has-links textarea::selection{color:#171c23;background:#cce4ff}
.composer[data-mode=voice] .text-input-shell{display:none}

.message.user .user-link{color:#0767d8;background:#eef6ff;border-radius:4px;padding:1px 3px;box-decoration-break:clone;-webkit-box-decoration-break:clone;text-decoration:none;overflow-wrap:anywhere}
.message.user .user-link:hover{text-decoration:underline}
.message.user .user-link:focus-visible{outline:2px solid #fff;outline-offset:3px}
