:root{
  --bg:#F6F1EA; --card:#FFFFFF; --text:#3A2630; --sub:#8A7B80; --hint:#B0A2A7;
  --primary:#C0748C; --line:#E6DAD2; --soft:#F0DCE2; --gold:#C9A227;
  --radius:16px;
}
*{box-sizing:border-box;-webkit-tap-highlight-color:transparent}
html,body{margin:0;height:100%}
body{background:var(--bg);color:var(--text);
  font:400 15px/1.65 -apple-system,BlinkMacSystemFont,"PingFang SC","Microsoft YaHei",system-ui,sans-serif}
::-webkit-scrollbar{width:8px;height:8px}
::-webkit-scrollbar-thumb{background:var(--line);border-radius:4px}
button{font-family:inherit;cursor:pointer}
input,textarea,select{font-family:inherit}
.boot{display:flex;height:100vh;align-items:center;justify-content:center;color:var(--sub);font-size:13px}

/* 登录 */
.auth{display:flex;min-height:100vh;align-items:center;justify-content:center;padding:24px}
.auth-card{width:100%;max-width:420px;background:var(--card);border-radius:24px;padding:40px 32px}
.auth h1{font:500 30px/1.3 "Songti SC","Noto Serif SC",serif;margin:0 0 10px;letter-spacing:.5px}
.auth p.sub{margin:0 0 30px;color:var(--sub);font-size:14px;line-height:1.8}
.field{margin-bottom:12px}
.field label{display:block;font-size:12px;color:var(--sub);margin-bottom:6px}
.field input{width:100%;border:1px solid var(--line);background:var(--bg);border-radius:12px;
  padding:13px 15px;font-size:15px;color:var(--text);outline:none}
.field input:focus{border-color:var(--primary)}
.chk{display:flex;gap:9px;align-items:flex-start;font-size:12px;color:var(--sub);margin:14px 0 6px;line-height:1.5}
.btn{width:100%;border:0;background:var(--primary);color:#fff;border-radius:14px;padding:14px;
  font-size:15px;font-weight:500;margin-top:14px}
.btn:disabled{opacity:.6}
.btn.ghost{background:transparent;color:var(--primary);border:1px solid var(--primary)}
.tip{font-size:12px;color:var(--hint);text-align:center;margin-top:16px;line-height:1.7}

/* 布局 */
.shell{display:none;height:100vh;height:100dvh}
.shell.on{display:grid;grid-template-columns:264px minmax(0,1fr) 320px}
.side{border-right:1px solid var(--line);display:flex;flex-direction:column;min-height:0}
.brand{padding:22px 20px 14px}
.brand h2{font:500 22px/1.2 "Songti SC","Noto Serif SC",serif;margin:0}
.brand span{font-size:11px;color:var(--hint)}
.nav{padding:6px 12px}
.nav button{display:flex;align-items:center;gap:10px;width:100%;border:0;background:transparent;
  padding:11px 12px;border-radius:12px;font-size:14px;color:var(--sub);text-align:left;margin-bottom:2px}
.nav button.on{background:var(--card);color:var(--primary);font-weight:500}
.conv{padding:10px 12px;overflow-y:auto;flex:1;min-height:0}
.conv h3{font-size:11px;color:var(--hint);margin:10px 8px 8px;font-weight:400;letter-spacing:.5px}
.conv-item{display:flex;gap:11px;align-items:center;padding:11px 10px;border-radius:14px;background:var(--card);margin-bottom:8px;cursor:pointer}
.conv-item.on{outline:1.5px solid var(--primary)}
.conv-item .av{width:38px;height:38px;border-radius:50%;background:var(--soft);color:#A85C74;
  display:flex;align-items:center;justify-content:center;font-size:15px;flex:none}
.conv-item .meta{min-width:0;flex:1}
.conv-item .nm{font-size:14px;font-weight:500;display:flex;align-items:center;gap:6px}
.conv-item .pv{font-size:12px;color:var(--sub);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.badge{background:var(--soft);color:#A85C74;font-size:10px;padding:1px 7px;border-radius:8px;font-weight:400}
.side-foot{padding:12px 16px 18px;border-top:1px solid var(--line);font-size:11px;color:var(--hint);line-height:1.6}

.main{display:flex;flex-direction:column;min-width:0;min-height:0}
.mhead{display:flex;align-items:center;gap:12px;padding:14px 22px;border-bottom:1px solid var(--line);flex:none}
.mhead .who{font-size:16px;font-weight:500}
.mhead .sub{font-size:11px;color:var(--primary)}
.mhead .right{margin-left:auto;display:flex;align-items:center;gap:14px}
.pill{background:var(--card);border-radius:20px;padding:6px 14px;font-size:12px;color:var(--primary);font-weight:500}
.msgs{flex:1;overflow-y:auto;padding:22px 22px 8px;min-height:0}
.msg{max-width:min(520px,76%);padding:11px 15px;border-radius:16px;font-size:14.5px;line-height:1.6;
  margin-bottom:12px;white-space:pre-wrap;word-break:break-word}
.msg.ta{background:var(--card);border-bottom-left-radius:5px}
.msg.me{background:var(--primary);color:#fff;margin-left:auto;border-bottom-right-radius:5px}
.storybar{flex:none;background:var(--soft);padding:10px 22px 12px}
.storybar .lb{font-size:11px;color:#A85C74;margin-bottom:7px}
.storybar .tx{font-size:13px;line-height:1.6}
.chips{display:flex;gap:8px;flex-wrap:wrap;margin-top:9px}
.chip{border:1px solid var(--primary);background:transparent;color:var(--primary);font-size:13px;
  border-radius:14px;padding:7px 15px}
.chip.solid{background:var(--primary);color:#fff}
.composer{flex:none;display:flex;gap:10px;padding:12px 22px 20px;border-top:1px solid var(--line)}
.composer input{flex:1;border:1px solid var(--line);background:var(--card);border-radius:22px;
  padding:13px 18px;font-size:14px;outline:none;color:var(--text)}
.composer input:focus{border-color:var(--primary)}
.send{width:46px;height:46px;border-radius:50%;border:0;background:var(--primary);color:#fff;font-size:18px;flex:none}

.aside{border-left:1px solid var(--line);padding:20px 18px;overflow-y:auto;min-height:0}
.card{background:var(--card);border-radius:var(--radius);padding:16px 18px;margin-bottom:12px}
.card h4{margin:0 0 12px;font-size:13px;font-weight:500;display:flex;align-items:center;gap:8px}
.card h4 .more{margin-left:auto;font-size:11px;color:var(--primary);font-weight:400;cursor:pointer}
.kv{display:flex;justify-content:space-between;font-size:13px;padding:5px 0}
.kv span:first-child{color:var(--sub)}
.aff-bar{height:6px;background:var(--bg);border-radius:3px;margin:10px 0 8px;overflow:hidden}
.aff-bar i{display:block;height:6px;background:var(--primary);border-radius:3px}
.task{display:flex;gap:10px;align-items:center;padding:10px 0;border-bottom:1px solid var(--line);font-size:13px}
.task:last-child{border-bottom:0}
.task .tt{flex:1;min-width:0}
.task .tt .d{font-size:11px;color:var(--hint)}
.task .rw{font-size:11px;color:var(--gold);white-space:nowrap}
.task button{border:1px solid var(--primary);background:transparent;color:var(--primary);
  font-size:11px;border-radius:10px;padding:4px 10px}
.task button.done{background:var(--primary);color:#fff;border-color:var(--primary);opacity:.55}
.task button:disabled{color:var(--hint);border-color:var(--line);cursor:default}
.mini-q{border:1px dashed var(--line);border-radius:12px;padding:10px 12px;font-size:12px;color:var(--sub);line-height:1.7}

.pane{padding:22px;overflow-y:auto;flex:1}
.pane h1{font:500 26px/1.25 "Songti SC","Noto Serif SC",serif;margin:0 0 4px}
.pane .desc{font-size:13px;color:var(--sub);margin:0 0 20px}
.grid2{display:grid;grid-template-columns:repeat(auto-fit,minmax(190px,1fr));gap:12px}
.stat{background:var(--card);border-radius:var(--radius);padding:16px 18px}
.stat .l{font-size:12px;color:var(--sub)}
.stat .n{font-size:26px;font-weight:500;margin-top:4px;font-variant-numeric:tabular-nums}
.stat .s{font-size:11px;color:var(--hint);margin-top:2px}
.row{display:flex;align-items:center;gap:12px;padding:12px 0;border-bottom:1px solid var(--line);font-size:14px}
.row:last-child{border-bottom:0}
.row .k{color:var(--sub);font-size:13px;width:110px;flex:none}
.row .v{flex:1;min-width:0}
.ledger .it{display:flex;gap:10px;padding:9px 0;border-bottom:1px solid var(--line);font-size:12.5px}
.ledger .it .r{flex:1;color:var(--sub)}
.ledger .it .a{font-weight:500;font-variant-numeric:tabular-nums}
.plus{color:var(--primary)}
.minus{color:var(--sub)}
.sel{width:100%;border:1px solid var(--line);background:var(--card);border-radius:12px;
  padding:12px 14px;color:var(--text);outline:none;font-size:14px}
.sel:focus{border-color:var(--primary)}
.hintline{font-size:11.5px;color:var(--hint);line-height:1.7;margin-top:6px}
.tabbar{display:none}
.toast{position:fixed;left:50%;bottom:88px;transform:translateX(-50%);background:rgba(58,38,48,.94);
  color:#fff;font-size:13px;padding:10px 18px;border-radius:14px;z-index:99;max-width:86vw;text-align:center}

@media (max-width:980px){
  .shell.on{grid-template-columns:minmax(0,1fr)}
  .side,.aside{display:none}
  .tabbar{display:flex;position:fixed;bottom:0;left:0;right:0;background:rgba(246,241,234,.97);
    backdrop-filter:blur(14px);border-top:1px solid var(--line);padding:7px 0 16px;z-index:20}
  .tabbar button{flex:1;border:0;background:transparent;font-size:11px;color:var(--hint);
    display:flex;flex-direction:column;align-items:center;gap:3px;padding:2px 0}
  .tabbar button.on{color:var(--primary);font-weight:500}
  .tabbar .ic{font-size:17px;line-height:1}
  .main{padding-bottom:62px}
  .msgs{padding:16px 14px 6px}
  .storybar{padding:10px 14px 12px}
  .composer{padding:10px 14px 14px}
  .mhead{padding:12px 16px}
  .pane{padding:16px 14px 84px}
  .msg{max-width:84%}
  .auth-card{padding:32px 24px}
}

/* ---------- v1.2 视觉打磨 ---------- */
:root{
  --shadow-sm:0 1px 2px rgba(58,38,48,.045);
  --shadow-md:0 2px 6px rgba(58,38,48,.05), 0 12px 28px rgba(58,38,48,.045);
  --shadow-lg:0 4px 12px rgba(58,38,48,.06), 0 24px 56px rgba(58,38,48,.06);
}
.card,.stat,.conv-item{box-shadow:var(--shadow-sm)}
.auth-card{box-shadow:var(--shadow-lg)}
.msg.ta{box-shadow:var(--shadow-sm)}
.pill{box-shadow:var(--shadow-sm);border:1px solid var(--line)}
.send{box-shadow:0 4px 14px rgba(192,116,140,.28)}
.send:hover{filter:brightness(1.04)}
.chip{transition:background .18s ease,color .18s ease,transform .12s ease}
.chip:hover{background:var(--primary);color:#fff}
.chip.solid:hover{filter:brightness(1.04)}
.task button:hover:not(:disabled){background:var(--primary);color:#fff}
.nav button{transition:background .16s ease,color .16s ease}
.nav button:hover{background:var(--card);color:var(--primary)}
.conv-item{transition:transform .16s ease,box-shadow .16s ease}
.conv-item:hover{transform:translateY(-1px);box-shadow:var(--shadow-md)}

/* 品牌小标 */
.brand h2{display:flex;align-items:center;gap:9px}
.brand h2::before{
  content:"";width:19px;height:19px;flex:none;
  border:2px solid var(--primary);border-radius:50%;
  box-shadow:9px 0 0 -2px var(--bg), 9px 0 0 0 var(--primary);
  margin-right:7px;
}

/* 登录页 */
.auth{background:
  radial-gradient(1100px 520px at 50% -10%, rgba(192,116,140,.10), transparent 70%),
  var(--bg);}
.auth-card{position:relative;overflow:hidden}
.auth-card::before{
  content:"";position:absolute;left:0;right:0;top:0;height:3px;
  background:linear-gradient(90deg,transparent,var(--primary),transparent);opacity:.55;
}
.auth h1{letter-spacing:1px}
.auth .quote{font:400 13px/1.9 "Songti SC","Noto Serif SC",serif;color:var(--hint);
  margin:22px 0 0;padding-top:16px;border-top:1px dashed var(--line)}
.pick{display:grid;grid-template-columns:1fr 1fr;gap:8px;margin-bottom:18px}
.pick-card{display:flex;gap:8px;align-items:center;text-align:left;
  border:1px solid var(--line);background:var(--bg);border-radius:14px;padding:9px 10px;
  transition:border-color .16s ease,background .16s ease}
.pick-card.on{border-color:var(--primary);background:var(--soft)}
.pick-av{width:30px;height:30px;flex:none;border-radius:50%;background:var(--card);
  color:var(--primary);display:flex;align-items:center;justify-content:center;font-size:14px}
.pick-tx{min-width:0;display:flex;flex-direction:column;line-height:1.3}
.pick-tx b{font-size:13px;font-weight:500;color:var(--text)}
.pick-tx em{font-style:normal;font-size:10.5px;color:var(--primary)}
.pick-tx i{font-style:normal;font-size:10px;color:var(--hint);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}

/* 空状态 */
.empty{text-align:center;padding:56px 20px;color:var(--hint)}
.empty .mk{width:44px;height:44px;margin:0 auto 14px;border-radius:50%;
  border:1.5px solid var(--line);position:relative}
.empty .mk::after{content:"";position:absolute;inset:11px;border-radius:50%;
  border:1.5px solid var(--line)}
.empty p{font-size:13px;margin:0;line-height:1.8}

/* 移动端登录留白 */
@media (max-width:520px){
  .pick{grid-template-columns:1fr 1fr;gap:6px}
  .pick-tx i{display:none}
  .auth-card{padding:30px 20px}
  .auth h1{font-size:26px}
}

/* 旁白（动作单独成行，居中灰字） */
.narration{
  text-align:center;color:var(--hint);font-size:12px;line-height:1.7;
  padding:4px 24px 12px;letter-spacing:.4px;
}
.narration::before{content:"· ";opacity:.5}
.narration::after{content:" ·";opacity:.5}

/* 正在输入三点 */
.typing{display:inline-flex;align-items:center;gap:4px}
.typing i{width:4px;height:4px;border-radius:50%;background:var(--primary);
  animation:blink 1.2s infinite ease-in-out}
.typing i:nth-child(2){animation-delay:.18s}
.typing i:nth-child(3){animation-delay:.36s}
@keyframes blink{0%,80%,100%{opacity:.25;transform:translateY(0)}40%{opacity:1;transform:translateY(-2px)}}

/* 消息入场 */
.msg,.narration{animation:rise .26s ease both}
@keyframes rise{from{opacity:0;transform:translateY(6px)}to{opacity:1;transform:none}}

/* 加载更早 */
.loadmore{text-align:center;padding:6px 0 10px}
.loadmore button{border:1px solid var(--line);background:var(--card);color:var(--sub);
  font-size:12px;border-radius:14px;padding:5px 14px}

/* 自述文本卡片 */
.note{position:relative;background:var(--bg);border-radius:12px;padding:10px 12px;margin-bottom:8px}
.note b{font-size:12px;color:var(--primary);display:block;margin-bottom:3px}
.note p{margin:0;font-size:13px;line-height:1.7;color:var(--text);white-space:pre-wrap}
.note button{position:absolute;right:8px;top:8px}

/* ---------- 可个性化项（真实生效） ---------- */
:root{
  --chat-bg: var(--bg);
  --bubble-radius: 16px;
  --fs: 15px;
}
body{font-size:var(--fs)}
.msgs{background:var(--chat-bg)}
.msg{border-radius:var(--bubble-radius)}
.msg.ta{border-bottom-left-radius:5px}
.msg.me{border-bottom-right-radius:5px}
body.bubble-line .msg.ta{background:transparent;border:1px solid var(--line)}
body.bubble-line .msg.me{background:transparent;border:1px solid var(--primary);color:var(--primary)}

/* 支付引导弹层 */
.paywall{position:fixed;inset:0;background:rgba(58,38,48,.42);display:flex;align-items:center;
  justify-content:center;padding:22px;z-index:200;animation:fadein .2s ease}
@keyframes fadein{from{opacity:0}to{opacity:1}}
.paywall .box{background:var(--card);border-radius:22px;padding:26px 22px;max-width:360px;width:100%;
  animation:rise .24s ease both}
.paywall h3{font:500 20px/1.4 "Songti SC",serif;margin:0 0 8px}
.paywall p{font-size:13px;color:var(--sub);line-height:1.8;margin:0 0 18px}
.paywall .opts{display:flex;flex-direction:column;gap:9px}
.paywall .opt{border:1px solid var(--line);border-radius:14px;padding:12px 14px;display:flex;
  align-items:center;gap:10px;background:var(--bg);cursor:pointer}
.paywall .opt b{font-size:15px;font-weight:500}
.paywall .opt span{font-size:12px;color:var(--sub);margin-left:auto}
.paywall .opt .hot{background:var(--soft);color:#A85C74;font-size:10px;border-radius:8px;padding:1px 7px}
.paywall .close{width:100%;border:0;background:transparent;color:var(--hint);font-size:13px;margin-top:12px;padding:8px}
.paywall .free{text-align:center;font-size:12px;color:var(--primary);margin-top:4px;cursor:pointer}

/* 密码框 + 小眼睛 */
.pw{position:relative;display:flex}
.pw input{flex:1;padding-right:56px}
.pw button{position:absolute;right:6px;top:50%;transform:translateY(-50%);
  border:0;background:transparent;color:var(--primary);font-size:12px;padding:6px 8px}

/* 主动联系卡片 */
.proactive{background:var(--card);border:1px dashed var(--primary);border-radius:16px;
  padding:12px 14px;margin-bottom:12px;cursor:pointer;animation:rise .26s ease both}
.proactive .pmark{font-size:10px;color:var(--primary);letter-spacing:.5px}
.proactive .ptx{font-size:14px;margin-top:4px;line-height:1.6;color:var(--text)}

/* 朗读按钮 */
.msg{position:relative}
.msg.ta .spk{position:absolute;right:8px;bottom:6px;font-size:11px;color:var(--hint);
  cursor:pointer;padding:2px 6px;border-radius:8px;background:var(--bg);opacity:.85}
.msg.ta .spk:hover{color:var(--primary);opacity:1}

/* 登录方式切换 */
.ltabs{display:flex;background:var(--bg);border-radius:14px;padding:4px;margin-bottom:18px}
.ltabs button{flex:1;border:0;background:transparent;color:var(--sub);font-size:14px;
  padding:10px 0;border-radius:11px;transition:background .18s ease,color .18s ease}
.ltabs button.on{background:var(--card);color:var(--primary);font-weight:500;
  box-shadow:0 1px 3px rgba(58,38,48,.06)}

/* 会话切换条 */
.convbar{flex:none;display:flex;align-items:center;gap:8px;padding:8px 14px;
  border-bottom:1px solid var(--line);background:var(--card)}
.convscroll{flex:1;display:flex;gap:6px;overflow-x:auto;scrollbar-width:none}
.convscroll::-webkit-scrollbar{display:none}
.convpill{flex:none;border:1px solid var(--line);background:var(--bg);color:var(--sub);
  font-size:12.5px;padding:6px 13px;border-radius:16px;max-width:180px;
  overflow:hidden;text-overflow:ellipsis;white-space:nowrap;transition:all .16s ease}
.convpill.on{background:var(--soft);color:var(--primary);border-color:var(--primary);font-weight:500}
.newconv{flex:none;width:30px;height:30px;border-radius:50%;border:1px solid var(--primary);
  background:transparent;color:var(--primary);font-size:16px;line-height:1}
.delconv{flex:none;border:0;background:transparent;font-size:14px;opacity:.6}
.delconv:hover{opacity:1}

/* 居中提示卡 */
.center-toast{position:fixed;inset:0;display:flex;align-items:center;justify-content:center;
  z-index:300;pointer-events:none;transition:opacity .4s ease}
.ct-card{background:rgba(58,38,48,.94);color:#fff;font-size:14px;line-height:1.7;
  padding:14px 22px;border-radius:16px;max-width:min(78vw,340px);text-align:center;
  box-shadow:0 8px 32px rgba(0,0,0,.25);animation:ctpop .28s ease both}
@keyframes ctpop{from{opacity:0;transform:scale(.92) translateY(8px)}to{opacity:1;transform:none}}

/* 收藏后的爱心（激活态） */
.msg.ta .spk.faved{color:var(--primary);background:var(--soft)}

/* 显示修复 */
.msgs{min-height:0;scroll-behavior:smooth}
.msg{overflow-wrap:anywhere;word-break:break-word}
.storybar .tx{max-height:220px;overflow-y:auto;scrollbar-width:thin}
.note{display:flex;align-items:flex-start;gap:8px}
.note p{flex:1}
.note button{position:static;flex:none}
