﻿/* ============================================================
   小帮老师 · 家长端终版  parent-present.css
   单层样式表（原基础层 + V2 覆盖层已合并去重）
   配色：中性暖白底 + 品牌橙 #E0733D 只做关键点缀，无大面积渐变
   分区：变量 / 基础 / 顶栏外壳 / 设备框 / 应用顶栏 / 主体布局 /
        聊天流 / 首页摘要 / 卡片 / 底部输入区 / 侧边抽屉·记忆 / 通话面板 /
        响应式
   ============================================================ */

/* ---------- 字体 ---------- */
@font-face{font-family:"NoteHand";src:url("fonts/YangRenDongZhuShiTi-Medium-260109.ttf") format("truetype");font-display:swap}

/* ---------- 变量 ---------- */
:root{
  --brand:#E0733D; --brand-deep:#B5521F; --brand-mist:#FBEDE3;
  --ink:#23201C; --sub:#7C766D; --bg:#FAFAF9; --bubble:#FFFFFF;
  --parent:#D9662F; --line:#E8E5E0; --good:#3E8E5F;
  --paper:#FFFFFF; --paperline:#ECE9E3;
  --kai:"Songti SC","STSong","SimSun",serif;
}

/* ---------- 全局滚动条：透明轨道，浅灰细圆点滑块 ---------- */
*{scrollbar-width:thin;scrollbar-color:rgba(128,128,128,.38) transparent}
*::-webkit-scrollbar{width:9px;height:9px}
*::-webkit-scrollbar-track{background:transparent}
*::-webkit-scrollbar-thumb{background:rgba(128,128,128,.38);border-radius:99px;border:2px solid transparent;background-clip:padding-box}
*::-webkit-scrollbar-thumb:hover{background:rgba(128,128,128,.55);border:2px solid transparent;background-clip:padding-box}
*::-webkit-scrollbar-corner{background:transparent}

/* ---------- 基础 ---------- */
*{box-sizing:border-box;margin:0;padding:0}
html,body{height:100%;touch-action:manipulation}  /* app 形态禁双击放大（iOS 无视 viewport user-scalable=no，靠这个补）；保留捏合缩放做无障碍 */
body{font-family:-apple-system,BlinkMacSystemFont,"SF Pro Text","PingFang SC","Hiragino Sans GB",sans-serif;background:#E9E9E7;color:var(--ink);display:flex;flex-direction:column;overflow:hidden}
button,input,select{font-family:inherit}
button:focus-visible,input:focus-visible,select:focus-visible{outline:3px solid rgba(217,160,91,.25);outline-offset:2px}

/* ---------- 顶部工具条（设计稿外壳，非产品 UI） ---------- */
.topbar{flex:0 0 auto;display:flex;align-items:center;gap:14px;padding:11px 20px;background:#242426;color:#F2F2F0;font-size:13px;border-bottom:1px solid rgba(255,255,255,.06)}
.topbar .ttl{font-weight:600;font-family:var(--kai);font-size:14px;letter-spacing:.03em}
.topbar .ttl small{color:#9B9B97;font-weight:400;margin-left:8px;font-family:-apple-system,BlinkMacSystemFont,"PingFang SC",sans-serif}
.seg{display:flex;background:#1B1B1D;border:1px solid rgba(255,255,255,.08);border-radius:9px;padding:3px}
.seg button{border:0;background:transparent;color:#9B9B97;font-size:13px;padding:5px 14px;border-radius:7px;cursor:pointer;display:inline-flex;align-items:center;gap:6px}
.seg button svg{width:14px;height:14px}
.seg button.on{background:var(--brand);color:#fff;box-shadow:0 4px 12px rgba(0,0,0,.18)}
.modelToggle{display:flex;align-items:center;gap:8px;margin-left:10px;font-size:12px;color:#9B9B97;white-space:nowrap}
.modelToggle .switch{position:relative;width:40px;height:22px;flex:0 0 auto}
.modelToggle .switch input{opacity:0;width:0;height:0}
.modelToggle .switch .track{position:absolute;inset:0;background:#4A4A4E;border-radius:99px;cursor:pointer;transition:background .2s}
.modelToggle .switch .track::after{content:"";position:absolute;top:2px;left:2px;width:18px;height:18px;border-radius:50%;background:#8E8E93;transition:transform .2s,background .2s}
.modelToggle .switch input:checked+.track{background:var(--brand)}
.modelToggle .switch input:checked+.track::after{transform:translateX(18px);background:#fff}
.modelToggle.off .lbl{color:#E09456}
.kids{display:flex;align-items:center;gap:8px;margin-left:auto;position:relative}
.kidCurrent,.kidSwitch{border:1px solid #44444A;background:transparent;color:#ABABA6;font-size:12px;border-radius:99px;cursor:pointer}
.kidCurrent{display:inline-flex;align-items:center;gap:7px;padding:5px 14px 5px 12px;max-width:170px}
.kidCurrent .kidLabel{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.kidCurrent.on{border-color:rgba(224,115,61,.55);color:#fff;background:rgba(224,115,61,.16)}
.kidSwitch{width:32px;height:32px;display:grid;place-items:center;padding:0}
.kidSwitch svg{width:15px;height:15px}
.kidSwitch[aria-expanded="true"]{border-color:rgba(224,115,61,.55);color:#fff;background:rgba(224,115,61,.16)}
.dataBtn{border:1px solid #44444A;background:transparent;color:#ABABA6;font-size:12px;border-radius:8px;padding:5px 9px;cursor:pointer;font-family:"SF Mono",monospace;letter-spacing:-.5px}
.dataBtn:hover,.dataBtn.on{border-color:rgba(224,115,61,.55);color:#fff;background:rgba(224,115,61,.16)}
.evalBtn{border:1px solid #44444A;background:transparent;color:#ABABA6;font-size:12px;border-radius:8px;padding:5px 10px;cursor:pointer;margin-left:6px}
.evalBtn:hover,.evalBtn.on{border-color:rgba(224,115,61,.55);color:#fff;background:rgba(224,115,61,.16)}
.kidMenu{position:absolute;top:calc(100% + 8px);right:0;min-width:196px;padding:8px;background:#242426;border:1px solid rgba(255,255,255,.08);border-radius:14px;box-shadow:0 14px 28px rgba(0,0,0,.26);display:grid;gap:4px;z-index:20}
.kidMenu[hidden]{display:none}
.kidMenu button{display:flex;align-items:center;justify-content:space-between;gap:10px;border:0;background:transparent;color:#EDE4D8;font-size:12px;padding:9px 10px;border-radius:10px;cursor:pointer;text-align:left}
.kidMenu button:hover,.kidMenu button.on{background:rgba(224,115,61,.16);color:#fff}
.kidMenu button span{color:#9B9B97;font-size:11px;white-space:nowrap}
.kidMenu .kidOption{flex:1 1 auto;display:flex;flex-direction:column;min-width:0}
.kidMenu .kidClear{flex:0 0 auto;width:24px;height:24px;padding:0;border-radius:6px;display:grid;place-items:center;color:#8B7F72;opacity:.75}
.kidMenu .kidClear:hover{opacity:1;color:#E0A878;background:rgba(224,115,61,.16)}
.kidMenu .kidClear svg{width:13px;height:13px}
.kidMenu .kidRow{display:flex;align-items:center;gap:6px}
.hint{flex:0 0 auto;text-align:center;color:#8A857E;font-size:12px;padding:7px 0 10px;background:#E9E9E7}

/* ---------- 舞台与设备外框（轻拟物 · 灰白钛金属机身） ---------- */
.stage{flex:1;display:flex;align-items:center;justify-content:center;overflow:hidden;position:relative}
.dataPanel{
  position:absolute;top:16px;left:16px;bottom:16px;width:min(420px,35vw);z-index:40;
  display:flex;flex-direction:column;
  background:rgba(30,30,33,.97);border:1px solid rgba(255,255,255,.08);border-radius:18px;
  box-shadow:0 24px 60px rgba(0,0,0,.38);
  transform:translateX(calc(-100% - 40px));transition:transform .3s cubic-bezier(.32,.72,0,1);
}
.dataPanel.open{transform:none}
.dataPanel[aria-hidden="true"]{pointer-events:none}
.dataHead{flex:0 0 auto;display:flex;align-items:center;justify-content:space-between;padding:14px 18px;border-bottom:1px solid rgba(255,255,255,.08)}
.dataHead b{color:#F2F2F0;font-size:14px;font-weight:600}
.dataHead button{border:0;background:rgba(224,115,61,.16);color:#E8A173;font-size:12px;border-radius:8px;padding:6px 12px;cursor:pointer}
.dataBody{flex:1;min-height:0;display:grid;grid-template-columns:150px 1fr}
.dataKids{border-right:1px solid rgba(255,255,255,.08);overflow:auto;padding:10px}
.dataKids button{width:100%;text-align:left;border:0;background:transparent;color:#B4A696;font-size:12px;border-radius:10px;padding:9px 10px;cursor:pointer;margin-bottom:4px;display:flex;flex-direction:column;gap:2px}
.dataKids button.on{background:rgba(224,115,61,.16);color:#fff}
.dataKids button strong{font-weight:600;color:#EDE4D8}
.dataKids button span{font-size:11px;color:#8B7F72}
.dataRight{overflow:auto;display:flex;flex-direction:column;min-height:0}
.dataNotes{flex:0 0 auto;padding:14px 16px;border-bottom:1px solid rgba(255,255,255,.08)}
.dataNotesHead{display:flex;align-items:center;gap:8px;margin-bottom:6px}
.dataNotesHead label{color:#A89C8E;font-size:11px}
.dataNotesHead button{border:0;background:var(--brand);color:#fff;font-size:11px;border-radius:7px;padding:4px 10px;cursor:pointer}
.dataNotesHead button:hover{background:var(--brand-deep)}
.dataNotesHead button:disabled{opacity:.5;cursor:not-allowed}
#dataNotesStatus{margin-left:auto;font-size:11px;color:#8B7F72}
.dataNotes textarea{width:100%;resize:vertical;border:1px solid rgba(255,255,255,.12);border-radius:10px;background:rgba(255,255,255,.06);color:#F3ECE4;font-size:12px;line-height:1.5;padding:9px 11px;outline:none}
.dataNotes textarea:focus{border-color:rgba(224,115,61,.6);background:rgba(255,255,255,.09)}
.dataJson{flex:1;overflow:auto;padding:14px 16px;font-family:"SF Mono",ui-monospace,monospace;font-size:12px;line-height:1.6;color:#D6CFC6}
/* JSON 树 */
.jnode{padding-left:14px;position:relative}
.jnode.collapsed > .jchildren{display:none}
.jnode.collapsed > .jtoggle::after{content:"▶"}
.jtoggle{position:absolute;left:0;top:2px;width:12px;height:12px;color:#8B7F72;cursor:pointer;font-size:9px;line-height:1}
.jtoggle::after{content:"▼"}
.jleaf{display:block;padding-left:14px}
.jkey{color:#9CDCFE}
.jstring{color:#CE9178}
.jnumber{color:#B5CEA8}
.jbool{color:#569CD6}
.jnull{color:#569CD6}
.jbracket{color:#D6CFC6}
.jcomma{color:#D6CFC6}
.jprimitive{display:inline}
.jchildren{border-left:1px dashed rgba(255,255,255,.08);margin-left:2px}
/* 响应式：数据面板在窄屏下占满 */
@media(max-width:760px){
  .dataPanel{top:0;left:0;bottom:0;width:85vw;border-radius:0 18px 18px 0}
  .dataBody{grid-template-columns:1fr;grid-template-rows:minmax(120px,32%) 1fr}
  .dataKids{border-right:0;border-bottom:1px solid rgba(255,255,255,.08)}
}
/* 双面板打开时，mockup 向空的一侧让位 */
.stage{--panel-offset:0px}
.stage.has-data-panel{--panel-offset:min(210px,17.5vw)}
.stage.has-eval-panel{--panel-offset:calc(-1 * min(210px,17.5vw))}
.stage.has-data-panel.has-eval-panel{--panel-offset:0px}
.device{position:absolute;transform-origin:center center;padding:12px;transform:translateX(var(--panel-offset)) scale(var(--scale));transition:transform .3s cubic-bezier(.32,.72,0,1);
  background:linear-gradient(152deg,#FEFEFE 0%,#E7E5E0 24%,#F7F6F4 48%,#DBD8D2 74%,#F1F0ED 100%);
  border:1px solid rgba(255,255,255,.72);border-radius:59px;
  box-shadow:
    0 0 0 1px rgba(158,150,138,.42),
    0 30px 72px rgba(74,60,44,.22),
    0 6px 18px rgba(74,60,44,.12),
    inset 0 1px 2px rgba(255,255,255,.95),
    inset 0 -1px 2px rgba(122,114,102,.22);
}
.device .screen{background:var(--bg);overflow:hidden;position:relative;display:flex;flex-direction:column;height:100%;width:100%}
.device.phone{width:402px;height:874px}          /* iPhone 16 Pro 逻辑分辨率 402×874pt */
.device.phone .screen{border-radius:47px}
.device.tablet{width:1194px;height:834px;border-radius:36px}  /* iPad Pro 11" 横屏 */
.device.tablet .screen{border-radius:24px}
/* 侧边实体键：::before 靠多重 box-shadow 叠出音量键组，::after 是电源键。
   iPad Pro 的按键在顶边/侧边，缩放后只会变成两块噪点，所以只给手机做。 */
.device.phone::before,.device.phone::after{content:"";position:absolute;width:4px;border-radius:2px;pointer-events:none}
.device.phone::before{left:-4px;top:168px;height:32px;border-radius:2px 0 0 2px;background:linear-gradient(90deg,#B9B5AE,#EDEBE7);box-shadow:0 60px 0 #B9B5AE,0 122px 0 #B9B5AE}
.device.phone::after{right:-4px;top:214px;height:96px;border-radius:0 2px 2px 0;background:linear-gradient(270deg,#B9B5AE,#EDEBE7)}

/* ---------- 状态栏：iOS 规范 ----------
   iPhone 16 Pro：状态栏 54pt、顶部安全区 62pt（两者之间 8pt 空隙）
   灵动岛：126×37pt，距顶 11pt，水平居中 */
.statusbar{
  flex:0 0 auto;position:relative;height:62px;padding:4px 0 8px;
  display:grid;grid-template-columns:1fr 126px 1fr;align-items:center;
  background:var(--bg);color:#0B0A09;
  font:600 17px/1 -apple-system,BlinkMacSystemFont,"SF Pro Text","PingFang SC",sans-serif;
  letter-spacing:.1px;
}
.sb-lead{grid-column:1;justify-self:center;display:flex;align-items:center;gap:7px;font-variant-numeric:tabular-nums}
.sb-date{display:none;font-weight:600}
.sb-island{grid-column:2;justify-self:center;position:relative;width:126px;height:37px;border-radius:19px;background:#000;box-shadow:inset 0 0 0 .5px rgba(255,255,255,.06)}
.sb-cam{position:absolute;top:50%;right:11px;width:9px;height:9px;margin-top:-4.5px;border-radius:50%;background:radial-gradient(circle at 32% 30%,#31353F 0%,#14161B 55%,#05060A 100%)}
.sb-trail{grid-column:3;justify-self:end;display:flex;align-items:center;gap:5px;padding-right:16px}
.sb-trail svg{display:block}
.sb-pct{display:none;font-size:14px;font-weight:600;font-variant-numeric:tabular-nums}
/* iPad：24pt 状态栏，无灵动岛，左侧「日期 + 时间」，右侧 WiFi + 电量 */
.tablet .statusbar{height:24px;padding:0;grid-template-columns:auto 1fr auto;font-size:13px;background:var(--bg)}
.tablet .sb-island{display:none}
.tablet .sb-lead{grid-column:1;justify-self:start;padding-left:20px;gap:9px}
.tablet .sb-date{display:inline}
.tablet .sb-cell{display:none}
.tablet .sb-pct{display:inline;font-size:13px}
.tablet .sb-trail{grid-column:3;padding-right:20px;gap:6px}

/* ---------- 应用顶栏 ---------- */
.appbar{flex:0 0 auto;display:flex;align-items:center;gap:10px;padding:8px 14px 11px;background:var(--bg);position:relative;z-index:3}
.appbar .back{appearance:none;border:0;background:transparent;color:#8A857E;width:25px;height:38px;cursor:pointer;display:grid;place-items:center;padding:0}
.appbar .back svg{width:22px;height:22px}
.appbar .who{min-width:0;display:flex;align-items:center;line-height:1}
.appbar .who b{font-family:var(--kai);font-size:17px;letter-spacing:.01em;font-weight:700;white-space:nowrap}
.appbar .acts{margin-left:auto;display:flex;align-items:center;gap:10px}
.logBtn,.voiceCall{position:relative;width:20px;height:20px;padding:0;border:0;background:transparent;color:#6B645C;display:grid;place-items:center;cursor:pointer}
.logBtn svg,.voiceCall svg{width:18px;height:18px}
.logBtn:hover,.voiceCall:hover{color:var(--brand)}
.memoryBadge{position:absolute;top:-5px;right:-8px;display:inline-grid;place-items:center;min-width:16px;height:16px;padding:0 4px;border-radius:99px;background:#FBE3D2;color:#B5521F;font-size:10px;font-style:normal}
.memoryBadge[hidden]{display:none}

/* ---------- 主体：手机=纯聊天流；平板=左聊天右展示板 ---------- */
.main{flex:1;display:flex;min-height:0;background:var(--bg)}
.chatcol{flex:1;display:flex;flex-direction:column;min-width:0;min-height:0;background:var(--bg)}
.boardpane{display:none}
.tablet .boardpane{display:flex;flex-direction:column;flex:0 0 44%;border-left:1px solid var(--line);background:var(--bg);min-height:0}
.boardhead{flex:0 0 auto;padding:16px 20px 10px;border-bottom:1px dashed var(--line);background:var(--bg)}
.boardhead .kid{display:flex;align-items:center;gap:12px}
.kidface{width:46px;height:46px;border-radius:12px;background:var(--brand-deep);color:#fff;font-size:20px;font-weight:700;display:flex;align-items:center;justify-content:center;font-family:var(--kai)}
.boardhead .kid b{font-size:17px}
.boardhead .kid .meta{font-size:12px;color:var(--sub);margin-top:2px}
.boardhead .stat{margin-top:12px;display:flex;gap:8px}
.boardhead .stat i{font-style:normal;font-size:11px;color:#B5521F;background:var(--brand-mist);border-radius:99px;padding:4px 10px}
.boardbody{flex:1;overflow:auto;padding:16px 20px 20px}
.boardbody .cap{font-size:12px;color:var(--sub);margin-bottom:10px;display:flex;align-items:center;gap:6px}
.boardbody .cap::before{content:"";width:6px;height:6px;border-radius:50%;background:var(--brand);box-shadow:0 0 0 3px rgba(224,115,61,.12)}
.boardbody .card{animation:pop .35s ease}
.tablet .chatcol .bubble .card{display:none}  /* 平板：卡片上墙，不占聊天流 */
.tablet .chatcol .bubble .cardtag{display:inline-flex}
.cardtag{display:none;align-items:center;gap:5px;font-size:11px;color:var(--brand);background:var(--brand-mist);border:1px solid #F0D3B8;border-radius:8px;padding:3px 8px;margin-top:8px;cursor:pointer}
.cardtag svg{width:12px;height:12px}

/* ---------- 聊天流 ---------- */
.chat{flex:1;overflow-y:auto;padding:18px 16px 10px;scroll-behavior:smooth}
.divider{text-align:center;font-size:11px;color:#A8A197;margin:6px 0 17px;letter-spacing:.08em}
.notice{text-align:center;margin:0 0 18px}
.notice span{display:inline-block;font-size:11px;color:#7C766D;background:rgba(255,255,255,.7);border:1px solid var(--line);border-radius:99px;padding:5px 12px}
.row{display:flex;margin-bottom:16px;align-items:flex-start}
.row.teacher{justify-content:flex-start}
.row.parent{justify-content:flex-end}
.bubble{max-width:86%;padding:12px 15px;border-radius:17px;font-size:15.5px;line-height:1.66;letter-spacing:.005em;position:relative;word-break:break-word}
.bubble .txt{white-space:pre-wrap}
.answer-highlight{color:inherit;background:rgba(224,115,61,.13);border-bottom:2px solid rgba(224,115,61,.42);border-radius:3px;padding:0 .06em;box-decoration-break:clone;-webkit-box-decoration-break:clone}
.teacher .bubble{background:#FFFFFF;border:1px solid #ECEAE6;border-bottom-left-radius:5px;box-shadow:0 4px 14px rgba(30,25,20,.045)}
.parent .bubble{background:var(--brand);color:#fff;border-bottom-right-radius:5px;box-shadow:0 6px 16px rgba(224,115,61,.18)}
.teacher .bubble.with-card{width:100%;max-width:100%;padding:8px}
.teacher .bubble.with-card .txt{display:block;padding:4px 7px 10px;color:#4A453F}
.teacher-stack{display:flex;flex-direction:column;align-items:flex-start;min-width:0;max-width:86%}
.teacher-stack>.bubble{width:fit-content;max-width:100%}
.teacher-stack>.bubble.with-card{width:100%;max-width:100%}
.turn-actions{display:flex;flex-direction:column;align-items:flex-start;gap:7px;width:100%;margin:5px 0 0 3px}
.turn-feedback{display:flex;align-items:center;gap:2px;height:28px}
.turn-feedback button{display:grid;place-items:center;width:28px;height:28px;padding:0;border:0;border-radius:6px;background:transparent;color:#A69B8D;cursor:pointer;transition:background .16s,color .16s}
.turn-feedback button:hover{background:#F3F2EF;color:#5C564E}
.turn-feedback button.on{background:var(--brand-mist);color:var(--brand-deep)}
.turn-feedback button:disabled{cursor:default;opacity:.65}
.turn-feedback svg{width:15px;height:15px}
.followup-suggestions{display:flex;flex-wrap:wrap;gap:6px;max-width:100%}
.followup-suggestions button{max-width:100%;min-height:32px;padding:7px 11px;border:1px solid #E5E2DC;border-radius:8px;background:#FFFFFF;color:#5C564E;font-size:13px;line-height:1.4;text-align:left;cursor:pointer;white-space:normal}
.followup-suggestions button:hover{background:var(--brand-mist);border-color:#EFD3BC;color:var(--brand-deep)}
.bubble .cursor{display:inline-block;width:2px;height:1em;background:var(--brand);border-radius:2px;vertical-align:-2px;animation:blink .8s infinite}
@keyframes blink{50%{opacity:0}}
/* 思考 Orb：等首包时老师消息位上的点阵球；cot 步骤出现后收缩让位 */
.thinking-row{align-items:flex-start;gap:12px}
.thinking-orb-wrap{flex:0 0 auto;width:46px;height:46px;margin-top:2px;display:grid;place-items:center;transform-origin:top left;transition:transform .35s ease,margin .35s ease}
.thinking-row.with-steps .thinking-orb-wrap{transform:scale(.6);margin-top:0}
canvas.thinking-orb{display:block}
.cot-panel{flex:1;min-width:0;padding:6px 0;color:#5C564E;font-size:13px;line-height:1.65}
.cot-steps{display:flex;flex-direction:column;gap:2px}
.cot-step{display:flex;flex-wrap:wrap;align-items:center;gap:4px 8px;padding:4px 0 4px 16px;position:relative;opacity:.55;transition:opacity .2s}
.cot-step.active{opacity:1}
.cot-step.done{opacity:.85}
.cot-step::before{content:'';position:absolute;left:4px;top:9px;width:6px;height:6px;border-radius:50%;background:#C9C5BE}
.cot-step.active::before{background:var(--brand);animation:pulse 1.2s infinite}
.cot-step.done::before{background:#7AA668}
.cot-step-label{font-weight:500}
.cot-step-result{flex:1 1 100%;color:#4A453F;word-break:break-word;padding-left:0}
.typing-inline{display:inline-flex;gap:3px;align-items:center;height:10px}
.typing-inline i{width:4px;height:4px;border-radius:50%;background:var(--brand);animation:ty 1s infinite}
.typing-inline i:nth-child(2){animation-delay:.15s}
.typing-inline i:nth-child(3){animation-delay:.3s}
@keyframes pulse{0%,100%{opacity:1}50%{opacity:.4}}
@keyframes pulse{0%,100%{opacity:1}50%{opacity:.4}}
@keyframes ty{0%,100%{transform:translateY(0);opacity:.5}50%{transform:translateY(-4px);opacity:1}}

/* ---------- 首页学情摘要（紧凑版） ---------- */
.welcome-summary{position:relative;margin:0 0 14px;padding:14px 0 0;overflow:visible}
.welcome-summary>*{position:relative;z-index:1}
.welcome-hero{display:flex;gap:12px;align-items:center;padding:0 20px}
.welcome-figure{flex:0 0 auto;width:44px;height:44px;border-radius:12px;background:var(--brand-deep);color:#fff;font-family:var(--kai);font-size:17px;font-weight:700;display:grid;place-items:center}
.welcome-copy{min-width:0}
.welcome-copy h2{font-family:var(--kai);font-size:17px;line-height:1.35;color:var(--ink);letter-spacing:.01em;font-weight:700;margin-bottom:3px}
.welcome-copy p{margin:0}
.welcome-focus{font-size:14px;line-height:1.6;color:#4A453F}
.welcome-signals{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:8px;margin-top:12px;padding:0 20px}
.welcome-signals .sig{display:flex;flex-direction:column;align-items:center;gap:7px;background:#FFFFFF;border:1px solid #EFEDE9;border-radius:12px;padding:12px 8px 10px;min-width:0;text-align:center}
.welcome-signals .sig i{flex:0 0 auto;color:var(--brand);display:grid;place-items:center;font-style:normal}
.welcome-signals .sig i svg{width:26px;height:26px}
.welcome-signals .sig b{display:block;font-size:12px;color:#5C564E;font-weight:600;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;max-width:100%}
.welcome-signals .sig span{display:block;font-size:11px;color:#A8A197;margin-top:2px;white-space:nowrap}

/* ---------- 关键信息卡：一卡一个点 ---------- */
.card{position:relative;margin-top:4px;background:#FFFFFF;border:1px solid #ECEAE6;border-radius:14px;padding:16px 16px 15px;box-shadow:0 6px 18px rgba(30,25,20,.05);font-size:14px;animation:pop .3s ease}
@keyframes pop{from{transform:translateY(6px);opacity:0}to{transform:none;opacity:1}}
.k-row{display:flex;align-items:center;justify-content:space-between;gap:10px;margin-bottom:12px}
.kick{display:inline-flex;align-items:center;gap:6px;font-size:11px;color:#8A8378;font-weight:700;letter-spacing:.08em;text-transform:uppercase}
.kick::before{content:"";width:10px;height:2px;border-radius:2px;background:var(--brand)}
.k-meta{flex:0 0 auto;font-size:11px;color:#A8A197}
.big{font-family:var(--kai);font-size:18px;line-height:1.55;font-weight:750;color:var(--ink);letter-spacing:.01em}
.copyline{font-size:14px;line-height:1.65;color:#5C564E;margin-top:8px}
.quiet{font-size:12px;line-height:1.6;color:#8A8378;margin-top:10px;padding-top:10px;border-top:1px dashed var(--paperline)}
.next-question{width:100%;border:1px solid #F0D9C8;background:var(--brand-mist);color:var(--brand-deep);border-radius:8px;padding:9px 11px;margin-top:12px;text-align:left;font-size:14px;font-weight:600;cursor:pointer}
.next-question::before{content:"→ ";font-weight:800}
.next-question:hover{background:#F9E4D5}

/* 首轮学情报告 */
.report-card{padding-top:18px;border-left:3px solid var(--brand)}
.note-tab{position:absolute;z-index:2;right:14px;top:-10px;transform:rotate(1.5deg);background:#FBE3D2;color:#B5521F;border:1px solid #F2CFAF;border-radius:4px;padding:3px 8px;font-family:"NoteHand",var(--kai);font-size:12px;box-shadow:0 3px 7px rgba(140,80,30,.1)}
.report-reminder{margin-top:9px;font-size:14px;line-height:1.65;color:#5C564E}
.report-points{display:grid;gap:6px;margin:9px 0 8px}
.report-points div{display:grid;grid-template-columns:54px 1fr;gap:8px;align-items:start;background:#FAFAF9;border:1px solid #EFEDE9;border-radius:10px;padding:9px}
.report-points b{font-size:12px;color:#8A8378;white-space:nowrap}
.report-points span{font-size:13px;line-height:1.55;color:#4A453F}
.report-core{margin-top:10px}
.report-core div:last-child{background:var(--brand-mist);border-color:#F3DCC9}
.report-details{padding-top:10px;margin-top:10px;border-top:1px dashed var(--paperline)}
.report-details .detail-label{font-size:11px;font-weight:750;letter-spacing:.06em;color:#8A8378}
.report-details .learning-copy{font-size:12.5px;line-height:1.55;color:#5C564E;margin-top:8px}

/* 长文折叠 / 报告展开 */
.teacher-copy-toggle,.report-toggle{display:none}
.device.phone .teacher-copy-toggle{display:inline-flex;align-items:center;gap:4px;width:max-content;border:0;background:transparent;color:#8A8378;font-size:12px;font-weight:700;padding:1px 7px 8px;cursor:pointer}
.device.phone .teacher-copy-toggle::after{content:"↓";font-size:11px}
.device.phone .copy-expanded .teacher-copy-toggle::after{content:"↑"}
.device.phone .bubble.copy-collapsed:not(.copy-expanded)>.txt{display:-webkit-box;-webkit-box-orient:vertical;-webkit-line-clamp:3;line-clamp:3;overflow:hidden}
.chat .report-toggle{display:flex;width:100%;align-items:center;justify-content:center;border:0;border-top:1px solid #EFEDE9;background:transparent;color:#8A8378;font-size:12.5px;font-weight:700;padding:10px 4px 1px;margin-top:9px;cursor:pointer}
.chat .report-toggle::after{content:"↓";margin-left:5px}
.chat .report-card.is-expanded .report-toggle::after{content:"↑"}
.chat .report-card:not(.is-expanded) .report-details{display:none}
.chat .report-card:not(.is-expanded) .report-points span{display:-webkit-box;-webkit-box-orient:vertical;-webkit-line-clamp:2;line-clamp:2;overflow:hidden}

/* 原话卡：像一张聊天截图/摘抄 */
.quotecard .qwrap{position:relative;padding:4px 6px 0 26px}
.quotecard .qwrap::before{content:"「";position:absolute;left:-2px;top:-6px;font-size:30px;color:var(--brand);opacity:.35;font-family:var(--kai)}
.quotecard .qtext{font-family:"NoteHand",var(--kai);font-size:21px;line-height:1.55;font-weight:500;color:var(--ink)}
.quotecard .qwho{font-size:12px;color:#A8A197;margin-top:8px;text-align:right}

/* 经过卡：一件事的前后 */
.tl{margin-top:2px}
.tli{position:relative;padding:0 0 12px 20px}
.tli:last-child{padding-bottom:2px}
.tli::before{content:"";position:absolute;left:5px;top:7px;width:7px;height:7px;border-radius:50%;background:var(--brand);opacity:.75}
.tli:not(:last-child)::after{content:"";position:absolute;left:8px;top:16px;bottom:-2px;width:1px;background:var(--paperline)}
.tli b{display:inline-block;font-size:11px;color:var(--brand);font-weight:700;margin-bottom:2px}
.tli span{display:block;font-size:14px;line-height:1.6;color:#4A453F}
.tli .say{font-family:var(--kai);font-weight:700;color:var(--ink)}

/* 今晚一句话：便利贴 */
.card.sticky{background:#FCF6E8;border-color:#EFE3C2;box-shadow:0 6px 18px rgba(30,25,20,.05)}
.sticky .kick{color:#8A5A00}
.sticky .kick::before{background:#8A5A00}
.sticky .atext{font-family:"NoteHand",var(--kai);font-size:19px;line-height:1.7;font-weight:500;color:#6B5320;padding:2px 2px 0}
.sticky .quiet{border-top-color:#EFE3C2;color:#9C8B60}

/* 科目卡：只放大一个关注点 */
.subjfocus{display:flex;align-items:baseline;gap:10px;margin:2px 0 6px}
.subjfocus .nm{font-family:var(--kai);font-size:19px;font-weight:750;color:var(--ink)}
.subjfocus .dl{font-size:12px;color:var(--good);font-weight:700}
.subjbar{height:8px;border-radius:99px;background:#EFEEEA;overflow:hidden;margin:8px 0 2px}
.subjbar i{display:block;height:100%;border-radius:99px;background:var(--brand)}

/* 心情线 */
.emo svg{width:100%;height:86px;display:block;margin-top:4px}
.emo .capline{display:flex;justify-content:space-between;font-size:11px;color:#A8A197;margin-top:5px}

/* 这周节奏 */
.weekcard .bars{display:flex;align-items:flex-end;gap:8px;height:64px;margin:10px 0 2px}
.weekcard .b{flex:1;display:flex;flex-direction:column;justify-content:flex-end;align-items:center;gap:4px}
.weekcard .b i{width:62%;border-radius:6px 6px 2px 2px;background:#E9E7E2}
.weekcard .b.today i{background:var(--brand)}
.weekcard .b span{font-size:11px;color:#A8A197}

/* 孩子画像 */
.tags .g{margin-bottom:9px}
.tags .g:last-child{margin-bottom:0}
.tags .g p{font-size:11px;color:#A8A197;margin-bottom:5px}
.tags .g span{display:inline-block;font-size:12.5px;color:#5C564E;background:#F5F4F2;border:1px solid #E8E5E0;border-radius:9px;padding:3px 9px;margin:0 5px 5px 0}

/* ---------- 话题入口卡（新建对话/冷启动，靠近输入框一侧） ---------- */
.topic-cards{flex:0 0 auto;padding:6px 14px 2px}
.topic-cap{font-size:11px;color:#A8A197;letter-spacing:.04em;margin:0 2px 7px}
.topic-grid{display:grid;grid-template-columns:1fr 1fr;gap:8px}
.topic-grid button{display:flex;align-items:center;gap:10px;border:1px solid #E8E5E0;background:#FFFFFF;border-radius:14px;padding:10px 12px;cursor:pointer;text-align:left}
.topic-grid button:active{background:var(--brand-mist);border-color:#EFD3BC}
.topic-grid button>div{display:flex;flex-direction:column;align-items:flex-start;gap:2px;min-width:0}
.topic-grid i{flex:0 0 auto;color:var(--brand);display:grid;place-items:center;font-style:normal}
.topic-grid i svg{width:20px;height:20px}
.topic-grid b{font-size:14px;color:var(--ink);font-weight:700}
.topic-grid span{font-size:11px;color:#8A8378;line-height:1.4;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;max-width:100%}

/* ---------- 建议问题 chips（只在无历史的空态破冰；有历史后不渲染） ---------- */
.chips{flex:0 0 auto;display:none;gap:7px;padding:8px 14px 7px;overflow-x:auto;scrollbar-width:none;background:transparent}
.chips::-webkit-scrollbar{display:none}
.chips button{flex:0 0 auto;border:1px solid #E5E2DC;background:#FFFFFF;color:#5C564E;font-size:13px;border-radius:999px;padding:7px 13px;cursor:pointer;font-weight:500}
.chips button:hover{background:var(--brand-mist);border-color:#EFD3BC;color:var(--brand-deep)}
.chips button:disabled{opacity:.45;cursor:not-allowed}

/* ---------- 底部输入区：一条扁平长圆角条 ---------- */
.inputbar{flex:0 0 auto;padding:10px 14px 11px;background:transparent}
.inputWrap{display:grid;grid-template-columns:34px minmax(0,1fr) 34px;align-items:center;gap:6px;min-height:46px;padding:0 6px;border:1px solid #E5E2DC;border-radius:23px;background:#FFFFFF}
.inputWrap:focus-within{border-color:var(--brand)}
.inputWrap>button{width:34px;height:34px;border:0;background:transparent;color:#8B7F72;display:grid;place-items:center;cursor:pointer;border-radius:50%;padding:0}
.inputWrap>button svg{width:19px;height:19px}
.inputWrap input{grid-column:2;grid-row:1;width:100%;height:44px;border:0;background:transparent;color:var(--ink);font-size:15px;outline:none;padding:0 2px}
.inputWrap input::placeholder{color:#B4A99B}
.inputWrap input:disabled{opacity:.6}
/* 右侧动作键：空文本=上传，有文字=发送（实心橙圆） */
.inputWrap .actBtn.sendBtn{background:var(--brand);color:#fff;transition:transform .15s ease,background .15s ease}
.inputWrap .actBtn.sendBtn:hover{background:var(--brand-deep)}
.inputWrap .actBtn.sendBtn:active{transform:scale(.92)}
.inputWrap .actBtn.sendBtn svg{width:17px;height:17px}
/* 按住说话态：输入框原位换成提示条 */
.inputWrap .voiceHold{grid-column:2;grid-row:1;display:none;width:100%;height:44px;border:0;background:transparent;color:#7C766D;font-size:15px;font-weight:600;letter-spacing:.06em;cursor:pointer;text-align:center;border-radius:20px}
.inputWrap .voiceHold:active{background:var(--brand-mist);color:var(--brand-deep)}
.inputbar.voice-mode .inputWrap input{display:none}
.inputbar.voice-mode .inputWrap .voiceHold{display:block}
.inputbar.voice-mode .voiceToggle{color:var(--brand);background:var(--brand-mist)}

/* Home Indicator：iPhone 底部安全区 34pt、指示条 139×5pt；iPad 横屏安全区 21pt */
.homebar{flex:0 0 34px;display:flex;align-items:flex-end;justify-content:center;padding-bottom:8px;background:var(--bg)}
.homebar i{width:139px;height:5px;border-radius:99px;background:#0B0A09;opacity:.82}
.tablet .homebar{flex:0 0 21px;padding-bottom:6px}
.tablet .homebar i{width:320px}

/* ---------- 侧边抽屉：对话（今日/更早） + 老师记忆 ---------- */
.logPanel[hidden]{display:none}
.logPanel{position:absolute;inset:0;z-index:30;background:rgba(28,26,24,.38);-webkit-backdrop-filter:blur(3px);backdrop-filter:blur(3px)}
.sideSheet{position:absolute;top:0;right:0;bottom:0;width:min(84%,336px);background:#FFFFFF;display:flex;flex-direction:column;box-shadow:-18px 0 45px rgba(30,25,20,.16);animation:sideIn .28s cubic-bezier(.32,.72,0,1)}
@keyframes sideIn{from{transform:translateX(40px);opacity:.4}to{transform:none;opacity:1}}
.sideTop{flex:0 0 auto;display:flex;align-items:center;gap:8px;padding:14px 14px 10px}
.sideNew{flex:1;display:inline-flex;align-items:center;justify-content:center;gap:7px;border:1px solid var(--line);background:#fff;color:var(--ink);border-radius:12px;padding:10px 12px;font-size:14px;font-weight:600;cursor:pointer}
.sideNew:hover{border-color:#EFD3BC;color:var(--brand-deep);background:var(--brand-mist)}
.sideNew svg{width:15px;height:15px}
.logTabs{flex:0 0 auto;display:flex;gap:4px;margin:0 14px 10px;padding:3px;background:#F2F1EE;border-radius:10px}
.logTabs button{flex:1;border:0;background:transparent;color:#8A8378;border-radius:8px;padding:7px 11px;font-size:13px;cursor:pointer}
.logTabs button.on{background:#fff;color:var(--ink);box-shadow:0 1px 4px rgba(30,25,20,.08)}
.sideList{flex:1;min-height:0;overflow:auto;padding:2px 10px 16px}
.sideList[hidden]{display:none}
.sideGroupCap{font-size:11px;color:#A8A197;letter-spacing:.06em;padding:12px 6px 6px}
.sideItem{display:block;width:100%;text-align:left;border:0;background:transparent;border-radius:12px;padding:9px 10px;cursor:pointer}
.sideItem:hover{background:#F6F5F3}
.sideItem.on{background:var(--brand-mist)}
.sideItem b{display:block;font-size:13.5px;font-weight:600;color:var(--ink);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.sideItem span{display:block;font-size:11px;color:#A8A197;margin-top:3px}
.logEmpty{font-size:12.5px;color:#A8A197;padding:18px 10px;line-height:1.6}
.memoryBody[hidden]{display:none}
.memoryBody{flex:1;min-height:0;overflow:auto;background:#FAFAF9;padding:14px}
.memoryIntro{background:var(--brand-mist);color:#8A5A30;border:1px solid #F0D9C8;border-radius:12px;padding:10px 12px;font-size:12.5px;line-height:1.55;margin-bottom:12px}
.memoryGroup{background:#fff;border:1px solid #EFEDE9;border-radius:14px;margin-bottom:10px;overflow:hidden}
.memoryGroup h3{font-size:12px;color:#8A8378;padding:11px 12px 8px;border-bottom:1px solid #F0EFEB}
.memoryItem{display:grid;grid-template-columns:1fr auto;gap:10px;align-items:start;padding:10px 12px;border-bottom:1px solid #F0EFEB}
.memoryItem:last-child{border-bottom:0}
.memoryItem p{font-size:14px;line-height:1.5;color:var(--ink)}
.memoryItem span{display:block;font-size:11px;color:#A8A197;margin-top:3px}
.memoryItem button{min-width:42px;min-height:32px;border:1px solid #EFE0D2;border-radius:9px;background:#FDF8F2;color:var(--brand-deep);font-size:12px;padding:6px 8px;cursor:pointer}
.memoryItem button:hover{background:var(--brand-mist);border-color:#EFD3BC}
.memoryItem button:disabled{opacity:.5;cursor:wait}
.memoryItem.done p{text-decoration:line-through;color:#A8A197}
.memoryEmpty{padding:34px 20px;text-align:center}
.memoryEmpty b{display:block;font-family:var(--kai);font-size:17px;color:var(--ink)}
.memoryEmpty p{font-size:12.5px;line-height:1.6;color:#A8A197;margin-top:7px}

/* ---------- 语音通话面板 ---------- */
.callPanel[hidden]{display:none}
.callPanel{position:absolute;inset:0;z-index:32;background:#4D443F;color:#F7F2EE;display:flex;flex-direction:column}
.callHero{position:relative;flex:1;min-height:0;overflow:hidden;background:linear-gradient(180deg,#6C635F 0%,#514843 100%)}
.callHero::after{content:"";position:absolute;inset:auto 0 0;height:200px;background:linear-gradient(180deg,rgba(74,65,61,0),rgba(52,46,43,.82));pointer-events:none}
.callTop{position:absolute;top:0;left:0;right:0;z-index:2;display:grid;grid-template-columns:40px 1fr 40px;align-items:center;padding:16px 18px;color:#fff}
.callTop button{width:32px;height:32px;border:0;background:transparent;color:inherit;border-radius:50%;display:grid;place-items:center;cursor:pointer}
.callTop button:hover{background:rgba(255,255,255,.08)}
.callTop svg{width:18px;height:18px}
.callTitle{text-align:center}
.callTitle b{display:block;font-family:var(--kai);font-size:18px;letter-spacing:.01em}
.callTitle span{display:block;margin-top:4px;font-size:12px;color:rgba(255,255,255,.78)}
.callFigureWrap{position:absolute;inset:0;display:flex;align-items:stretch;justify-content:center}
.callFigure{width:100%;height:100%;position:relative;overflow:hidden;background:#4D443F}
.callVideoImage{width:100%;height:100%;object-fit:cover;display:block}
.callOverlayBubble{position:absolute;left:18px;right:18px;bottom:24px;z-index:2;padding:16px 18px;border-radius:22px;background:rgba(255,255,255,.22);-webkit-backdrop-filter:blur(18px);backdrop-filter:blur(18px);box-shadow:0 18px 34px rgba(18,11,7,.14)}
.callOverlayBubble b{display:block;color:#FFC89A;font-size:13px;margin-bottom:6px}
.callOverlayBubble p{font-size:15px;line-height:1.55;color:#FFF9F5}
.callActions{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:12px;padding:18px 18px calc(20px + env(safe-area-inset-bottom,0));background:linear-gradient(180deg,#5B524D 0%,#4D443F 100%);border-top:1px solid rgba(255,255,255,.08)}
.callAction{display:grid;justify-items:center;gap:10px;border:0;background:transparent;color:#F7F1EC;font-size:12px;cursor:pointer}
.callAction span{white-space:nowrap}
.callAction i{width:56px;height:56px;border-radius:50%;display:grid;place-items:center;background:rgba(255,255,255,.12);border:1px solid rgba(255,255,255,.12)}
.callAction svg{width:22px;height:22px}
.callAction.end i{background:linear-gradient(180deg,#FF725F,#F45240);border-color:rgba(255,255,255,.16)}
.callAction.end span{font-weight:700}
.callAction:hover i{background:rgba(255,255,255,.18)}
.callAction.end:hover i{background:linear-gradient(180deg,#FF7F6B,#EF4C39)}

/* ---------- 快速测试集面板 ---------- */
.evalPanel{
  position:absolute;top:16px;right:16px;bottom:16px;width:min(420px,35vw);z-index:40;
  display:flex;flex-direction:column;
  background:rgba(30,30,33,.97);border:1px solid rgba(255,255,255,.08);border-radius:18px;
  box-shadow:0 24px 60px rgba(0,0,0,.38);
  transform:translateX(calc(100% + 40px));transition:transform .3s cubic-bezier(.32,.72,0,1);
}
.evalPanel.open{transform:none}
.evalPanel[aria-hidden="true"]{pointer-events:none}
.evalHead{flex:0 0 auto;display:flex;align-items:center;gap:12px;padding:14px 18px;border-bottom:1px solid rgba(255,255,255,.08)}
.evalHead b{color:#F3ECE4;font-size:14px;font-weight:600;white-space:nowrap}
.evalHead .evalActions{display:flex;gap:6px;margin-left:auto}
.evalHead .evalActions button{width:28px;height:28px;border:0;background:transparent;color:#A89C8E;border-radius:7px;display:grid;place-items:center;cursor:pointer;padding:0}
.evalHead .evalActions button svg{width:15px;height:15px}
.evalHead .evalActions button:hover{background:rgba(255,255,255,.08);color:#fff}
.evalHead .evalActions button:disabled{opacity:.5;cursor:not-allowed}
.evalFilters{display:flex;gap:6px;overflow-x:auto;scrollbar-width:none}
.evalFilters::-webkit-scrollbar{display:none}
.evalFilters button{flex:0 0 auto;border:1px solid rgba(255,255,255,.12);background:transparent;color:#A89C8E;font-size:11px;border-radius:99px;padding:4px 10px;cursor:pointer}
.evalFilters button.on{background:rgba(224,115,61,.18);color:#FFD9B8;border-color:rgba(224,115,61,.45)}
.evalBody{flex:1;min-height:0;overflow:auto;padding:10px 14px}
.evalCase{background:rgba(255,255,255,.05);border:1px solid rgba(255,255,255,.06);border-radius:12px;padding:12px 14px;margin-bottom:10px}
.evalCase .evalMeta{display:flex;align-items:center;gap:8px;margin-bottom:8px;flex-wrap:wrap}
.evalCase .id{font-family:"SF Mono",monospace;font-size:10px;color:#8B7F72;background:rgba(255,255,255,.08);padding:2px 6px;border-radius:4px}
.evalCase .cat{font-size:10px;color:#B4A696;border:1px solid rgba(255,255,255,.1);padding:2px 7px;border-radius:99px}
.evalCase .scenario{font-size:11px;color:#A89C8E}
.evalCase .utterance{font-size:13px;color:#F3ECE4;line-height:1.55;margin-bottom:10px}
.evalCase .acts{display:flex;gap:8px}
.evalCase .acts button{border:0;background:var(--brand);color:#fff;font-size:12px;border-radius:8px;padding:6px 12px;cursor:pointer}
.evalCase .acts button.secondary{background:rgba(255,255,255,.1);color:#D6CFC6}
.evalCase .acts button:hover{background:var(--brand-deep)}
.evalCase .acts button.secondary:hover{background:rgba(255,255,255,.16)}
.evalCase .detail{margin-top:10px;padding-top:10px;border-top:1px solid rgba(255,255,255,.06);display:none;font-size:11px;color:#A89C8E;line-height:1.6}
.evalCase.expanded .detail{display:block}
.evalDetailRow{display:grid;grid-template-columns:110px 1fr;gap:8px;margin-bottom:5px}
.evalDetailRow b{color:#D6CFC6}
/* 响应式 */
@media(max-width:760px){
  .evalPanel{top:0;right:0;bottom:0;left:0;width:auto;border-radius:0}
  .evalHead{flex-wrap:wrap}
  .evalFilters{width:100%;order:3;margin-top:6px}
}
/* ---------- 模拟 iOS 键盘（纯装饰：按压有反馈，不写入内容） ----------
   iPhone：候选栏 45 + 键区 212 + 底部安全区 34 = 291pt
   iPad 横屏：候选栏 44 + 键区 291 + 底部安全区 21 = 356pt */
.screen{--kbh:291px}
.tablet .screen{--kbh:356px}
.keyboard{
  position:absolute;left:0;right:0;bottom:0;z-index:22;height:var(--kbh);
  display:flex;flex-direction:column;background:#D1D3D9;
  transform:translateY(100%);transition:transform .3s cubic-bezier(.32,.72,0,1);
  will-change:transform;user-select:none;-webkit-user-select:none;
}
.screen.kb-open .keyboard{transform:none}
.main{transition:padding-bottom .3s cubic-bezier(.32,.72,0,1)}
.screen.kb-open .main{padding-bottom:var(--kbh)}
.screen.kb-open .homebar{display:none}

/* 候选栏 */
.kb-cands{flex:0 0 45px;display:flex;align-items:center;padding:0 6px;color:#0B0A09}
.kb-cand{position:relative;flex:0 0 auto;padding:5px 18px;font-size:17px;line-height:1.2;cursor:default}
.kb-cand+.kb-cand::before{content:"";position:absolute;left:0;top:50%;width:1px;height:17px;margin-top:-8.5px;background:rgba(0,0,0,.16)}
.kb-more{margin-left:auto;width:32px;height:32px;flex:0 0 auto;border:0;background:transparent;color:#3C3C43;display:grid;place-items:center;cursor:pointer;padding:0}
.kb-more svg{width:10px;height:17px}

/* 键区 */
.kb-keys{flex:1;min-height:0;display:flex;flex-direction:column;gap:11px;padding:6px 3px 5px}
.kb-row{flex:1;min-height:0;display:flex;align-items:stretch;gap:6px}
.kb-row.kb-indent{padding:0 20px}
.kb-key{
  flex:1 1 0;min-width:0;padding:0;border:0;border-radius:5px;cursor:pointer;
  background:#fff;color:#0B0A09;display:grid;place-items:center;
  font:400 22px/1 -apple-system,BlinkMacSystemFont,"SF Pro Text","PingFang SC",sans-serif;
  box-shadow:0 1px 0 rgba(0,0,0,.3);
  transition:background .09s ease,transform .09s ease;
}
.kb-key svg{width:20px;height:20px}
.kb-key.kb-down{background:#E4E5EA;transform:scale(.97)}
.kb-fn{flex:1.35 1 0;background:#ABB0BA;font-size:15px;font-weight:500}
.kb-fn.kb-down{background:#fff}
.kb-space{flex:1 1 0;font-size:15px;color:rgba(0,0,0,.38)}
.kb-bottom .kb-num,.kb-bottom .kb-globe{flex:0 0 11.5%}
.kb-bottom .kb-return{flex:0 0 23.5%;font-size:16px;font-weight:600}
.kb-bottom .kb-return.on{background:var(--brand);color:#fff;box-shadow:0 1px 0 rgba(0,0,0,.22)}
.kb-bottom .kb-return.on.kb-down{background:var(--brand-deep)}

/* 键盘自带的 Home Indicator（键盘升起时接管屏幕底部安全区） */
.kb-home{flex:0 0 34px;display:flex;align-items:center;justify-content:center}
.kb-home i{width:139px;height:5px;border-radius:99px;background:#0B0A09;opacity:.85}

/* iPad 键盘：更宽的键、带数字行、右下角收起键 */
.tablet .keyboard{background:#CDD0D7}
.tablet .kb-cands{flex:0 0 44px;padding:0 14px}
.tablet .kb-keys{gap:12px;padding:8px 9px 6px}
.tablet .kb-row{gap:9px}
.tablet .kb-key{font-size:19px}
.tablet .kb-fn{font-size:13px}
.tablet .kb-row.kb-indent{padding:0}
.tablet .kb-return{flex:1.9 1 0;font-size:15px;font-weight:600}
.tablet .kb-return.on{background:var(--brand);color:#fff}
.tablet .kb-return.on.kb-down{background:var(--brand-deep)}
.tablet .kb-bottom .kb-num{flex:0 0 11%}
.tablet .kb-bottom .kb-globe{flex:0 0 8%}
.tablet .kb-bottom .kb-dismiss{flex:0 0 8%}
.tablet .kb-home{flex:0 0 21px}
.tablet .kb-home i{width:220px}

/* ---------- 沉浸式输入聚焦态 ----------
   用户点开输入框 / 切到语音态时：
   - 中性半透明蒙版遮住状态栏/顶栏/聊天流/展示板
   - 建议问题 chips 只在此时出现，紧贴输入区
   - 输入区 + chips 抬到蒙版上方
   - 不使用模糊和光晕，保持与历史侧栏遮罩一致 */
:root{--focus-glow:0}                          /* 光晕关闭，保留变量兼容原有结构 */
.focus-scrim,.focus-glow{position:absolute;left:0;right:0;pointer-events:none;opacity:0;transition:opacity .24s ease}
.focus-scrim{top:0;bottom:0;z-index:20;background:rgba(31,35,41,.28);-webkit-backdrop-filter:none;backdrop-filter:none}
.focus-glow{bottom:0;height:260px;z-index:21;background:radial-gradient(62% 100% at 50% 100%,rgba(224,115,61,var(--focus-glow)) 0%,rgba(224,115,61,0) 72%);filter:blur(6px)}
.screen.kb-open .focus-glow{bottom:var(--kbh)} /* 键盘升起时，光源跟随到键盘上沿 */
.screen.input-focus .focus-scrim{opacity:1;pointer-events:auto}
.screen.input-focus .focus-glow{opacity:0}
/* 输入区 + chips 抬到蒙版之上；chips 只在聚焦态显示，单行横向滚动 */
.screen.input-focus .chips{display:flex;position:relative;z-index:23;flex-direction:column;flex-wrap:nowrap;gap:8px;padding:12px 16px 8px;background:transparent;align-items:flex-start}
.screen.input-focus .chips button{flex:0 0 auto;padding:9px 16px;font-size:13px;background:#fff;border-color:#E5E2DC;color:#4A453F;box-shadow:0 2px 10px rgba(30,25,20,.05)}
.screen.input-focus .chips button:hover{background:var(--brand-mist);border-color:#EFD3BC;color:var(--brand-deep)}
.screen.input-focus .inputbar{position:relative;z-index:23;background:transparent;border-top:0}
/* home indicator 在聚焦态下不喧宾夺主 */
.screen.input-focus .homebar{position:relative;z-index:23;background:transparent}
.screen.input-focus .homebar i{opacity:.4}

/* ---------- 响应式 ---------- */
@media(max-width:680px){
  body{background:var(--bg)}
  .topbar,.hint{display:none}
  .stage{display:block;overflow:hidden}
  .device{position:static!important;transform:none!important;background:none;box-shadow:none;border:0;border-radius:0;padding:0}
  .device::before,.device::after,.device.phone::before,.device.phone::after{display:none}
  .device.phone{width:100vw;height:100vh;height:100dvh}  /* 100vh 兜底旧 Chrome（不识别 dvh 时高度塌陷）；支持时 100dvh 跟随动态工具栏 */
  .device.phone .screen{border-radius:0;box-shadow:none}
  /* 真机浏览器里由系统提供状态栏与键盘，模拟件全部让位 */
  .statusbar{display:none}                     /* 系统提供状态栏，隐藏模拟件 */
  .sb-island{display:none}
  .sb-lead{grid-column:1;justify-self:start;padding-left:24px}
  .sb-trail{grid-column:2}
  .keyboard{display:none}
  /* 真机沿用中性聚焦遮罩 */
  .screen.kb-open .focus-glow{bottom:0}        /* 覆盖 base 按模拟键盘抬升的规则，真机贴系统键盘上沿 */
  .screen.input-focus .chips{position:relative;z-index:23;padding:8px 14px 7px}
  .screen.input-focus .chips button{background:#FFFFFF;border-color:#E5E2DC;color:#4A453F}
  .screen.kb-open .main{padding-bottom:0}
  .homebar{display:none}                       /* 停用模拟 Home Indicator，真机由系统提供 */
  .inputbar{padding:10px 12px;padding-bottom:calc(11px + env(safe-area-inset-bottom));padding-bottom:max(11px,env(safe-area-inset-bottom));background:transparent;border-top:0}  /* max() 兜底：旧浏览器不识别 env() 时退 11px */
  .appbar{padding-left:12px;padding-right:12px;padding-top:max(10px,env(safe-area-inset-top));background:var(--bg);border-bottom:0;box-shadow:none}
  .inputWrap input{font-size:16px}             /* ≥16px：iOS 聚焦不再自动放大 */
  .appbar .who b{font-size:16px}
  .welcome-copy h2{font-size:16px}
  .welcome-focus{font-size:14px}
  .welcome-signals{padding:0 16px}
  .bubble{max-width:88%}
  .teacher-stack{max-width:88%}
  .teacher .bubble.with-card{width:100%;max-width:100%}
  .big{font-size:16.5px}
  .quotecard .qtext{font-size:18px}
  .callActions{gap:8px;padding-left:14px;padding-right:14px}
  .callAction i{width:48px;height:48px}
  .sideSheet{width:min(88%,360px)}
}
@media(max-width:380px){
  .appbar{gap:7px}
  .chat{padding-left:12px;padding-right:12px}
  .welcome-summary{padding-top:12px}
  .welcome-signals{gap:6px}
  .welcome-signals .sig{padding:7px 8px;gap:6px}
  .topic-cards{padding-left:10px;padding-right:10px}
  .inputbar{padding-left:10px;padding-right:10px}
  .inputWrap{grid-template-columns:32px minmax(0,1fr) 32px}
  .callTitle b{font-size:17px}
  .callOverlayBubble{left:14px;right:14px;bottom:18px;padding:14px 16px}
  .callOverlayBubble p{font-size:14px}
  .callActions{gap:6px}
  .callAction span{font-size:11px}
}
@media(prefers-reduced-motion:reduce){
  *,*::before,*::after{scroll-behavior:auto!important;animation-duration:.01ms!important;animation-iteration-count:1!important;transition-duration:.01ms!important}
}

/* ============================================================
   小团 AI 视觉规范 v1
   颜色：#FF5A36 品牌行动色 / #F5F6F7 页面底 / #1F2329 主文字
   字体：标题 17-20 / 正文 15 / 辅助 12 / 说明 11px，行高 1.5-1.7
   间距：4px 基数（8/12/16/20/24），避免组件之间粘连
   圆角：控件 10px / 卡片 12px / 对话气泡 16px；按钮保留线性图标
   ============================================================ */
:root{
  --brand:#FF5A36; --brand-deep:#E64624; --brand-mist:#FFF0EB;
  --ink:#1F2329; --sub:#646A73; --muted:#8A919B; --bg:#F5F6F7; --bubble:#FFFFFF;
  --parent:#FF5A36; --line:#E6E8EB; --good:#2E9B65;
  --paper:#FFFFFF; --paperline:#ECEEF0;
  --surface-subtle:#F7F8FA; --surface-quiet:#F1F3F5;
  --font-body:-apple-system,BlinkMacSystemFont,"PingFang SC","Microsoft YaHei",sans-serif;
  --font-display:-apple-system,BlinkMacSystemFont,"PingFang SC","Microsoft YaHei",sans-serif;
  --fs-caption:11px; --fs-meta:12px; --fs-body:15px; --fs-title:17px; --fs-heading:20px;
  --space-1:4px; --space-2:8px; --space-3:12px; --space-4:16px; --space-5:20px; --space-6:24px;
  --radius-control:10px; --radius-card:12px; --radius-bubble:16px;
}
body{font-family:var(--font-body);background:#ECEEF1;color:var(--ink)}
.topbar{background:#202328;border-bottom-color:rgba(255,255,255,.08);padding:10px 20px;gap:12px}
.topbar .ttl{font-family:var(--font-display);font-size:14px;letter-spacing:0}
.seg{border-radius:var(--radius-control);background:#17191C}
.seg button{border-radius:8px;padding:6px 14px}
.seg button.on{background:var(--brand);box-shadow:none}
.hint{background:#ECEEF1;color:var(--muted);font-size:var(--fs-caption);padding:7px 0 10px}
.stage{background:#ECEEF1}
.device{border-radius:38px;padding:10px;background:#F7F8FA;border-color:#D9DDE2;box-shadow:0 20px 48px rgba(31,35,41,.16),0 2px 8px rgba(31,35,41,.08)}
.device .screen{background:var(--bg)}
.device.phone .screen{border-radius:29px}
.device.tablet{border-radius:28px}
.device.tablet .screen{border-radius:18px}
.statusbar,.appbar{background:var(--bg);color:var(--ink)}
.appbar{gap:8px;padding:8px 16px 12px;border-bottom:1px solid rgba(230,232,235,.72)}
.appbar .back{color:var(--sub);width:28px;height:32px}
.appbar .back svg{width:20px;height:20px}
.appbar .who b{font-family:var(--font-display);font-size:var(--fs-title);font-weight:700}
.appbar .acts{gap:4px}
.logBtn,.voiceCall{width:34px;height:34px;border-radius:9px;color:var(--sub)}
.logBtn:hover,.voiceCall:hover{color:var(--brand);background:var(--brand-mist)}
.memoryBadge{background:var(--brand-mist);color:var(--brand-deep)}
.chat{padding:16px 16px 8px}
.divider{font-size:var(--fs-caption);color:var(--muted);margin:4px 0 16px;letter-spacing:0}
.notice{margin-bottom:16px}
.notice span{font-size:var(--fs-caption);color:var(--sub);background:var(--surface-quiet);border:0;border-radius:999px;padding:5px 10px}
.row{margin-bottom:12px}
.bubble{max-width:84%;padding:10px 13px;border-radius:var(--radius-bubble);font-size:var(--fs-body);line-height:1.65;letter-spacing:0}
.teacher .bubble{background:var(--bubble);border:1px solid var(--line);border-bottom-left-radius:6px;box-shadow:0 2px 8px rgba(31,35,41,.04)}
.parent .bubble{background:var(--parent);border-bottom-right-radius:6px;box-shadow:0 4px 10px rgba(255,90,54,.18)}
.teacher .bubble.with-card{padding:8px}
.teacher .bubble.with-card .txt{padding:4px 7px 10px;color:var(--ink)}
.answer-highlight{background:rgba(255,90,54,.12);border-bottom-color:rgba(255,90,54,.34)}
.turn-actions{gap:6px;margin:4px 0 0 2px}
.turn-feedback button{width:30px;height:30px;border-radius:8px;color:var(--muted)}
.turn-feedback button:hover{background:var(--surface-quiet);color:var(--sub)}
.turn-feedback button.on{background:var(--brand-mist);color:var(--brand-deep)}
.followup-suggestions{gap:8px}
.followup-suggestions button{min-height:34px;padding:7px 12px;border-color:var(--line);border-radius:var(--radius-control);background:var(--bubble);color:var(--sub);font-size:var(--fs-meta)}
.followup-suggestions button:hover{background:var(--brand-mist);border-color:#FFD1C4;color:var(--brand-deep)}
.welcome-summary{margin-bottom:16px;padding-top:12px}
.welcome-hero{gap:12px;padding:0 16px}
.welcome-figure{width:42px;height:42px;border-radius:12px;background:var(--brand);font-family:var(--font-display);font-size:16px}
.welcome-copy h2{font-family:var(--font-display);font-size:var(--fs-title);line-height:1.4;color:var(--ink);letter-spacing:0}
.welcome-focus{font-size:var(--fs-body);line-height:1.6;color:var(--sub)}
.welcome-signals{gap:8px;margin-top:12px;padding:0 16px}
.welcome-signals .sig{gap:6px;background:var(--bubble);border-color:var(--line);border-radius:var(--radius-card);padding:10px 8px}
.welcome-signals .sig i{color:var(--brand);font-size:22px}
.welcome-signals .sig i svg{width:22px;height:22px}
.welcome-signals .sig b{font-size:var(--fs-meta);color:var(--ink)}
.welcome-signals .sig span{font-size:var(--fs-caption);color:var(--muted)}
.card{margin-top:4px;background:var(--bubble);border-color:var(--line);border-radius:var(--radius-card);padding:14px 14px 13px;box-shadow:0 3px 12px rgba(31,35,41,.05);font-size:var(--fs-meta)}
.k-row{gap:8px;margin-bottom:10px}
.kick{gap:6px;font-size:var(--fs-caption);color:var(--sub);letter-spacing:.02em;text-transform:none}
.kick::before{content:"📌";width:auto;height:auto;border-radius:0;background:none;font-size:15px;line-height:1}
.k-meta{font-size:var(--fs-caption);color:var(--muted)}
.big{font-family:var(--font-display);font-size:var(--fs-title);line-height:1.5;font-weight:700;color:var(--ink);letter-spacing:0}
.copyline{font-size:var(--fs-body);line-height:1.6;color:var(--sub);margin-top:8px}
.quiet{font-size:var(--fs-caption);line-height:1.6;color:var(--muted);margin-top:10px;padding-top:10px;border-top:1px solid var(--paperline)}
.next-question{border-color:#FFD8CC;background:var(--brand-mist);color:var(--brand-deep);border-radius:var(--radius-control);padding:8px 10px;margin-top:12px;font-size:var(--fs-meta)}
.next-question::before{content:"→"}
.report-card{border-left:3px solid var(--brand)}
.note-tab{background:var(--brand-mist);color:var(--brand-deep);border-color:#FFD1C4;border-radius:6px;padding:3px 7px;font-size:var(--fs-caption);box-shadow:none}
.report-points div{background:var(--surface-subtle);border-color:var(--line);border-radius:var(--radius-control);padding:8px}
.report-points b{font-size:var(--fs-caption);color:var(--sub)}
.report-points span{font-size:var(--fs-meta);line-height:1.55;color:var(--ink)}
.sticky{background:#FFF9E8!important;border-color:#F5E5B9!important}
.sticky .kick::before{content:"💬";background:none}
.quotecard .kick::before{content:"📣"}
.weekcard .kick::before{content:"📅"}
.emo .kick::before{content:"🌤️"}
.tags .kick::before{content:"✨"}
.report-card .kick::before{content:"📊"}
.subjbar{height:7px;background:#E9ECEF;margin:8px 0 2px}
.subjbar i{background:var(--brand)}
.topic-cards{padding:6px 16px 2px}
.topic-cap{font-size:var(--fs-caption);color:var(--muted);letter-spacing:0;margin:0 2px 8px}
.topic-grid{gap:8px}
.topic-grid button{gap:8px;border-color:var(--line);background:var(--bubble);border-radius:var(--radius-card);padding:10px 11px}
.topic-grid button:active{background:var(--brand-mist);border-color:#FFD1C4}
.topic-grid i{color:var(--brand);font-size:20px}
.topic-grid i svg{width:20px;height:20px}
.topic-grid b{font-size:var(--fs-meta);color:var(--ink)}
.topic-grid span{font-size:var(--fs-caption);color:var(--muted)}
.chips{gap:8px;padding:8px 16px 7px}
.chips button{border-color:var(--line);background:var(--bubble);color:var(--sub);font-size:var(--fs-meta);border-radius:999px;padding:7px 12px}
.inputbar{padding:8px 16px 12px;background:var(--bg)}
.inputWrap{grid-template-columns:34px minmax(0,1fr) 34px;gap:4px;min-height:46px;padding:0 5px;border:1px solid #DDE1E6;border-radius:var(--radius-bubble);background:var(--bubble);box-shadow:0 1px 4px rgba(31,35,41,.03)}
.inputWrap:focus-within{border-color:var(--brand);box-shadow:0 0 0 3px rgba(255,90,54,.12)}
.inputWrap>button{color:var(--sub);border-radius:9px}
.inputWrap>button:hover{background:var(--surface-quiet);color:var(--brand)}
.inputWrap input{font-size:var(--fs-body);height:44px;color:var(--ink)}
.inputWrap input::placeholder{color:#9AA1AA}
.inputWrap .actBtn.sendBtn{background:var(--brand);color:#fff}
.inputWrap .actBtn.sendBtn:hover{background:var(--brand-deep)}
.homebar{background:var(--bg)}
.boardpane{background:var(--bg);border-left-color:var(--line)}
.boardhead{padding:16px 20px 12px;border-bottom:1px solid var(--line)}
.kidface{background:var(--brand);border-radius:12px}
.boardhead .stat i{color:var(--brand-deep);background:var(--brand-mist)}
.boardbody .cap{color:var(--muted)}
.boardbody .cap::before{background:var(--brand);box-shadow:0 0 0 3px rgba(255,90,54,.12)}
.sideSheet{border-radius:16px 0 0 16px;background:var(--bubble);box-shadow:-18px 0 45px rgba(31,35,41,.14)}
.sideNew{border-color:var(--line);border-radius:var(--radius-control);font-size:var(--fs-meta)}
.sideNew:hover{border-color:#FFD1C4;color:var(--brand-deep);background:var(--brand-mist)}
.logTabs{background:var(--surface-quiet);border-radius:var(--radius-control)}
.logTabs button{font-size:var(--fs-meta)}
.sideItem{border-radius:var(--radius-control)}
.sideItem.on{background:var(--brand-mist)}
@media(max-width:760px){
  .topbar{padding:9px 12px;gap:8px}
  .topbar .ttl small,.modelToggle,.dataBtn,.evalBtn{display:none}
  .seg{margin-left:auto}
  .seg button{padding:6px 9px;font-size:var(--fs-caption)}
  .device{padding:0;border-radius:0;border:0;box-shadow:none}
  .appbar{padding-left:12px;padding-right:12px}
  .chat{padding-left:12px;padding-right:12px}
  .bubble{max-width:88%;font-size:var(--fs-body)}
  .card{padding:13px 12px 12px}
  .welcome-hero,.welcome-signals{padding-left:12px;padding-right:12px}
  .topic-cards{padding-left:12px;padding-right:12px}
  .inputbar{padding-left:12px;padding-right:12px}
}
/* Informational signal cards use emoji; topic/action controls keep linear SVG. */
.welcome-signals .sig i svg{display:none}
.welcome-signals .sig:nth-child(1) i::before{content:"📚"}
.welcome-signals .sig:nth-child(2) i::before{content:"🎯"}
.welcome-signals .sig:nth-child(3) i::before{content:"🌱"}

/* History drawer stays inside the content region; app/status bars remain visible. */
.logPanel{inset:62px 0 0;background:rgba(31,35,41,.28);-webkit-backdrop-filter:none;backdrop-filter:none}
.sideSheet{border-radius:0;box-shadow:none}
.sideTop{padding:14px 14px 10px}
.tablet .logPanel{inset:24px 0 0}
@media(max-width:760px){
  .logPanel{inset:62px 0 0}
  .sideSheet{width:min(88%,336px);border-radius:0}
}
/* Keep teacher replies on the same right edge as parent questions. */
.row.teacher:not(.thinking-row){justify-content:flex-start}
.row.teacher:not(.thinking-row) .teacher-stack{width:100%;max-width:100%}
.row.teacher:not(.thinking-row) .teacher-stack>.bubble{width:100%;max-width:100%}
.row.teacher:not(.thinking-row) .turn-actions{align-items:flex-end}
/* Follow-up prompts remain a left-aligned vertical stack under feedback. */
.row.teacher:not(.thinking-row) .followup-suggestions{width:100%;flex-direction:column;align-items:flex-start;flex-wrap:nowrap}
.row.teacher:not(.thinking-row) .followup-suggestions button{width:max-content;max-width:100%}

/* ---------- 真机窄屏：接管 phone 布局，修复 PWA standalone 与旧浏览器 ----------
   桌面伪真机外框在 (max-width:680px) 时退场，输入栏由 CSS 接管。
   height 双声明：100vh 兜底不识别 dvh 的旧 Chrome，支持时 100dvh 跟随动态工具栏。
   !important 稳压更早的 V2 覆盖层（.device.phone 的旧 100vh 已删，此处是最终防线）。
   #device 真机模式 position:static、main 为 flex 子项，.device 与 .device.phone 都需给高。 */
@media(max-width:680px){
  html,body{background:var(--bg)}              /* 真机：回弹 overscroll 露出的底色与页面一致（稳压 V2 的 #ECEEF1） */
  .device.phone{width:100vw!important;height:100vh!important;height:100dvh!important}
  .device.phone .screen{height:100%;border-radius:0}
  .device{width:100vw!important;height:100vh!important;height:100dvh!important;position:static!important;transform:none!important;background:none;box-shadow:none;border:0;border-radius:0;padding:0}
  .device::before,.device::after,.device.phone::before,.device.phone::after{display:none}
  .statusbar{display:none}
  .keyboard{display:none}
  .homebar{display:none}
  .inputbar{position:relative;z-index:23}
  .inputWrap input{font-size:16px!important}   /* iOS：字号 ≥16px 聚焦不自动放大；稳压 V2 层 var(--fs-body)=15px */
  .screen.kb-open .main{padding-bottom:0}
}
