:root{--bg0: #fff3e4;--bg1: #ffe9f2;--bg2: #ffe0e9;--primary: #ff8fb1;--primary-deep: #f2688c;--accent: #ffc46b;--mint: #8fe0c0;--sky: #a8d8ff;--card: rgba(255, 255, 255, .92);--ink: #6b4a3a;--ink-light: #9b7a5e;--ok: #6fd18a;--busy: #ffb45c;--idle: #d8c2b0;--shadow: 0 12px 30px rgba(242, 104, 140, .22);--shadow-sm: 0 4px 14px rgba(107, 74, 58, .1);--radius: 22px}*{box-sizing:border-box;-webkit-tap-highlight-color:transparent}html,body{margin:0;padding:0;width:100%;height:100%}body{background:radial-gradient(circle at 18% 12%,#ffffffb3 0,#fff0 30%),radial-gradient(circle at 86% 8%,#ffc46b59 0,#ffc46b00 26%),radial-gradient(circle at 78% 78%,#a8d8ff66 0,#a8d8ff00 28%),linear-gradient(160deg,var(--bg0) 0%,var(--bg1) 55%,var(--bg2) 100%);font-family:PingFang SC,Microsoft YaHei,system-ui,sans-serif;color:var(--ink);overflow:hidden;padding:env(safe-area-inset-top) env(safe-area-inset-right) env(safe-area-inset-bottom) env(safe-area-inset-left)}body:before,body:after{content:"";position:fixed;border-radius:50%;pointer-events:none;z-index:1}body:before{width:120px;height:120px;top:6%;left:5%;background:radial-gradient(circle,#ff8fb147,#ff8fb100 70%)}body:after{width:160px;height:160px;bottom:4%;right:4%;background:radial-gradient(circle,#8fe0c04d,#8fe0c000 70%)}.app{height:100dvh;height:100vh;display:flex;flex-direction:column;position:relative;z-index:2}.topbar{display:flex;align-items:center;justify-content:center;gap:10px;margin:12px auto 0;padding:10px 22px;background:#ffffffd9;backdrop-filter:blur(8px);border:2px solid rgba(255,255,255,.9);border-radius:999px;box-shadow:var(--shadow-sm);font-weight:600;width:fit-content;max-width:92%}.status-dot{width:13px;height:13px;border-radius:50%;background:var(--idle);flex:none;box-shadow:0 0 0 3px #d8c2b047;transition:background .3s}.status-dot.online{background:var(--ok);box-shadow:0 0 0 3px #6fd18a4d}.status-dot.listening{background:var(--busy);box-shadow:0 0 0 3px #ffb45c59;animation:pulse 1s infinite}@keyframes pulse{0%,to{transform:scale(1);opacity:1}50%{transform:scale(1.5);opacity:.6}}.status-text{font-size:15px;color:var(--ink);overflow:hidden;white-space:nowrap;text-overflow:ellipsis}.stage{flex:1;min-height:0;display:flex;flex-direction:column;align-items:center;gap:14px;padding:6px 16px 4px;overflow-y:auto;position:relative}.teacher{filter:drop-shadow(0 10px 18px rgba(242,104,140,.25));transition:transform .25s;flex:none;margin-top:2px}.teacher.listening{animation:bounce .6s ease-in-out infinite;transform-origin:center bottom}@keyframes bounce{0%,to{transform:translateY(0) scale(1)}45%{transform:translateY(-6px) scale(1.03)}}.talk-btn{width:min(60vw,250px);height:min(60vw,250px);border:none;border-radius:50%;background:radial-gradient(circle at 32% 26%,#ffb6c9,var(--primary) 52%,var(--primary-deep) 100%);box-shadow:0 6px #d8567c,var(--shadow);color:#fff;cursor:pointer;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:6px;font-size:22px;font-weight:700;letter-spacing:2px;transition:transform .12s,box-shadow .15s;user-select:none;touch-action:none;-webkit-user-select:none;flex:none}.talk-btn:before{content:"";position:absolute;inset:-10px;border-radius:50%;border:3px dashed rgba(255,255,255,.55);animation:spin 14s linear infinite;pointer-events:none}@keyframes spin{to{transform:rotate(360deg)}}.talk-btn:disabled{background:linear-gradient(145deg,#e4d3c0,#ccb7a2);box-shadow:0 6px #b69b84;cursor:not-allowed}.talk-btn:active,.talk-btn.holding{transform:translateY(4px) scale(.97);box-shadow:0 2px #d8567c,0 6px 16px #f2688c66}.mic-ico{display:inline-flex;filter:drop-shadow(0 2px 3px rgba(200,60,100,.35))}.chat-log{width:100%;max-width:1280px;flex:1;min-height:0;overflow-y:auto;display:flex;flex-direction:column;gap:10px;padding:8px 4px 10px;-webkit-overflow-scrolling:touch}.bubble{max-width:78%;padding:12px 16px;border-radius:var(--radius);font-size:16px;line-height:1.6;word-break:break-word;white-space:pre-wrap}.bubble.bot.has-board{max-width:100%}.bubble.user{align-self:flex-end;background:linear-gradient(135deg,var(--primary),var(--primary-deep));color:#fff;border-bottom-right-radius:8px;box-shadow:0 6px 16px #f2688c47}.bubble.bot{align-self:flex-start;background:var(--card);color:var(--ink);border:2px solid rgba(255,255,255,.95);border-bottom-left-radius:8px;box-shadow:var(--shadow-sm)}.bubble.bot:before{content:"✿";font-size:15px}.mathboard{width:100%;margin-top:8px;background:#ffffffb3;border:2px dashed rgba(255,196,107,.8);border-radius:18px;padding:8px}.quickbar{display:flex;gap:10px;justify-content:center;flex-wrap:wrap;padding:12px 14px calc(14px + env(safe-area-inset-bottom));background:#fff9;backdrop-filter:blur(8px);border-top:2px solid rgba(255,255,255,.7)}.qbtn{border:none;padding:10px 18px;border-radius:999px;background:linear-gradient(135deg,#fff,#fff2f6);color:var(--primary-deep);font-size:15px;font-weight:700;box-shadow:var(--shadow-sm);cursor:pointer;transition:transform .12s,background .2s,color .2s;white-space:nowrap}.qbtn:active{transform:translateY(2px) scale(.95);background:var(--primary);color:#fff}.camera-fab{position:fixed;right:14px;top:78px;z-index:40;display:flex;flex-direction:column;align-items:center;gap:4px;width:64px;padding:10px 0;border:2px solid rgba(255,255,255,.95);border-radius:20px;background:#ffffffe6;color:var(--primary-deep);font-size:12px;font-weight:700;box-shadow:var(--shadow-sm);cursor:pointer;transition:transform .12s}.camera-fab:active{transform:scale(.93)}.camera-fab.upload{top:156px}.camera-modal{position:fixed;inset:0;z-index:60;background:#3c1e28eb;display:flex;align-items:center;justify-content:center;padding:16px}.camera-modal.hidden{display:none}.cam-wrap{width:min(94vw,480px);background:#2a1620;border-radius:22px;overflow:hidden;box-shadow:0 10px 40px #00000080}.cam-wrap video,.cam-wrap canvas{width:100%;display:block;background:#000;max-height:62vh}.cam-bar{display:flex;gap:10px;justify-content:center;padding:14px 12px}.cam-btn{border:none;padding:10px 22px;border-radius:999px;font-size:15px;font-weight:700;background:#5a3a45;color:#fff;cursor:pointer}.cam-btn.primary{background:var(--primary-deep)}.cam-btn.hidden{display:none}.cam-tip{margin:0;padding:0 0 14px;text-align:center;color:#d8a8b5;font-size:13px}.toast{position:fixed;left:50%;bottom:18%;transform:translate(-50%);z-index:80;padding:10px 20px;border-radius:999px;background:#6b4a3aeb;color:#fff;font-size:14px;max-width:80%;box-shadow:0 6px 20px #00000040;opacity:0;transition:opacity .25s;pointer-events:none}.toast.show{opacity:1}
