.online-dot{width:8px;height:8px;border-radius:9999px;background:var(--success);box-shadow:0 0 8px rgba(107,155,122,.4);animation:pulse-online 3s ease-in-out infinite;flex-shrink:0}@keyframes pulse-online{0%,to{opacity:1}50%{opacity:.5}}@keyframes timer-pulse{0%,to{opacity:1}50%{opacity:.6}}.timer-warning{animation:timer-pulse 1.5s ease-in-out infinite}@keyframes bonus-pulse{0%,to{opacity:1}50%{opacity:.55}}.bonus-pulse{animation:bonus-pulse 1.5s ease-in-out infinite}@keyframes bonus-toast-in{0%{transform:translate(-50%,-16px);opacity:0}15%{transform:translate(-50%);opacity:1}85%{transform:translate(-50%);opacity:1}to{transform:translate(-50%,-16px);opacity:0}}.bonus-toast{animation:bonus-toast-in 3s ease-in-out forwards}@keyframes slide-up{0%{transform:translateY(20px);opacity:0}to{transform:translateY(0);opacity:1}}@keyframes slide-down{0%{transform:translateY(0);opacity:1}to{transform:translateY(20px);opacity:0}}.soft-paywall-enter{animation:slide-up .4s var(--ease-out) forwards}@keyframes slide-in-right{0%{transform:translateX(100%)}to{transform:translateX(0)}}@keyframes modal-scale-in{0%{opacity:0;transform:scale(.96)}to{opacity:1;transform:scale(1)}}@keyframes overlay-fade-in{0%{opacity:0}to{opacity:1}}.slide-in-right{animation:slide-in-right .4s var(--ease-out) forwards}.modal-scale-in{animation:modal-scale-in .3s var(--ease-out) forwards}.overlay-fade-in{animation:overlay-fade-in .3s ease forwards}@keyframes slide-up-sheet{0%{transform:translateY(100%)}to{transform:translateY(0)}}.slide-up-sheet{animation:slide-up-sheet .4s var(--ease-out) forwards}.chat-textarea{background:var(--bg-input);border:1px solid var(--border-subtle);border-radius:12px;padding:14px 18px;font-family:var(--font-body);font-size:1rem;line-height:1.5;color:var(--text-primary);width:100%;resize:none;min-height:48px;max-height:120px;outline:none;box-sizing:border-box;transition:border-color var(--duration-base) ease,box-shadow var(--duration-base) ease}.chat-textarea:focus{border-color:var(--border-accent);box-shadow:0 0 0 3px var(--accent-glow)}.chat-textarea::-moz-placeholder{color:var(--text-tertiary)}.chat-textarea::placeholder{color:var(--text-tertiary)}.chat-textarea:disabled{opacity:.5;cursor:not-allowed}.chat-send-btn{display:none}.chat-enter-hint{display:block}.menu-drawer{position:absolute;top:100%;right:0;background:var(--bg-elevated);border:1px solid var(--border-subtle);border-radius:12px;padding:8px;min-width:180px;box-shadow:var(--shadow-lg);z-index:60}.menu-drawer button{display:block;width:100%;text-align:left;background:transparent;border:none;padding:10px 16px;font-family:var(--font-body);font-size:.875rem;color:var(--text-secondary);cursor:pointer;border-radius:8px;transition:background var(--duration-fast) ease}.menu-drawer button:hover{background:hsla(60,20%,95%,.06);color:var(--text-primary)}.menu-drawer button.danger{color:var(--error)}.menu-drawer button.danger:hover{background:hsla(0,42%,64%,.1)}@media (max-width:768px){.chat-send-btn{display:flex!important}.chat-enter-hint{display:none!important}}.streaming-caret{display:inline-block;width:6px;height:1em;margin-left:2px;background:var(--accent-primary);vertical-align:text-bottom;animation:caret-blink 1s steps(2,start) infinite}@keyframes caret-blink{to{visibility:hidden}}@keyframes typing-bounce{0%,80%,to{transform:translateY(0);opacity:.4}40%{transform:translateY(-4px);opacity:1}}.typing-dot{display:inline-block;width:6px;height:6px;border-radius:50%;background:var(--accent-primary);animation:typing-bounce 1.2s ease-in-out infinite}.markdown-body p{margin:0 0 12px}.markdown-body p:last-child{margin-bottom:0}.markdown-body strong{color:var(--text-primary);font-weight:600}.markdown-body em{font-style:italic;color:var(--text-primary)}.markdown-body a{color:var(--accent-primary);text-decoration:underline}.markdown-body ol,.markdown-body ul{margin:8px 0 12px;padding-left:20px}.markdown-body ol:last-child,.markdown-body ul:last-child{margin-bottom:0}.markdown-body li{margin:4px 0;line-height:1.55}.markdown-body code{background:hsla(38,47%,60%,.1);padding:1px 6px;border-radius:4px;font-family:var(--font-mono,monospace);font-size:.9em;color:var(--accent-primary)}.markdown-body blockquote{margin:8px 0;padding:4px 0 4px 14px;border-left:2px solid var(--border-accent);color:var(--text-secondary);font-style:italic}.markdown-body hr{border:none;border-top:1px solid var(--border-subtle);margin:16px 0}