:root{
  --green:#07C160; --green-d:#06AD56; --blue:#576B95;
  --bg:#EDEDED; --panel:#fff; --line:rgba(0,0,0,.08);
  --text:#1A1A1A; --muted:#8A8A8A; --amber:#FA9D3B; --red:#FA5151;
}
*{box-sizing:border-box;margin:0;padding:0;-webkit-tap-highlight-color:transparent}
body{background:var(--bg);color:var(--text);
  font-family:"PingFang SC","Microsoft YaHei","Noto Sans SC",system-ui,sans-serif;
  font-size:15px;line-height:1.7;padding-bottom:60px}
a{color:inherit;text-decoration:none}
.hidden{display:none!important}

.navbar{position:sticky;top:0;z-index:20;background:var(--green);color:#fff;
  padding:12px 16px;font-size:17px;font-weight:500;display:flex;align-items:center;gap:10px}
.navbar .back{font-size:20px;cursor:pointer;line-height:1}

.wrap{padding:14px}
.card{background:var(--panel);border-radius:12px;padding:14px;margin-bottom:12px}

.btn{display:block;width:100%;background:var(--green);color:#fff;border:0;
  border-radius:8px;padding:12px;font-size:16px;cursor:pointer;text-align:center}
.btn:active{background:var(--green-d)}
.btn.plain{background:#fff;color:var(--green);border:1px solid var(--green)}
.btn.gray{background:#fff;color:#666;border:1px solid var(--line)}
.btn:disabled{opacity:.5}

input,textarea,select{width:100%;border:1px solid var(--line);border-radius:8px;
  padding:11px 12px;font-size:15px;background:#fff;outline:none;font-family:inherit}
input:focus,textarea:focus{border-color:var(--green)}
.field{margin-bottom:12px}
.field label{display:block;font-size:13px;color:var(--muted);margin-bottom:5px}
.row{display:flex;gap:8px}
.row input{flex:1}

.hero{background:linear-gradient(135deg,#07C160,#0AB96B);color:#fff;border-radius:12px;
  padding:18px;margin-bottom:12px}
.hero .tag{font-size:12px;opacity:.85;margin-bottom:6px}
.hero h2{font-size:20px;font-weight:600;line-height:1.4}
.hero p{font-size:13px;opacity:.9;margin-top:8px}

.item{display:flex;gap:12px;padding:12px 0;border-bottom:1px solid var(--line)}
.item:last-child{border-bottom:0}
.item .body{flex:1;min-width:0}
.item h3{font-size:16px;font-weight:500;line-height:1.45;margin-bottom:4px}
.item .meta{font-size:12px;color:var(--muted)}
.item .thumb{width:76px;height:76px;border-radius:8px;background:#F0F0F0;
  object-fit:cover;flex-shrink:0}

.article-title{font-size:21px;font-weight:600;line-height:1.5;padding:16px 16px 6px}
.article-meta{font-size:12px;color:var(--muted);padding:0 16px 12px}
.article-content{padding:8px 16px 24px;font-size:16px;line-height:1.9}
.article-content p{margin-bottom:12px}
.article-content img{max-width:100%;border-radius:8px;margin:10px 0}
.article-content strong{font-weight:600}

.notice{background:#FFF8E8;border-left:3px solid var(--amber);padding:10px 12px;
  font-size:13px;color:#7A5A20;border-radius:0 8px 8px 0;margin:12px 16px}

.empty{text-align:center;color:var(--muted);padding:60px 20px;font-size:14px}

/* 底部导航：微信式（图标在上、文字在下，栏高加大） */
.tabbar{position:fixed;left:0;right:0;bottom:0;display:flex;background:#fff;
  border-top:1px solid var(--line);z-index:30;
  padding-bottom:env(safe-area-inset-bottom);box-shadow:0 -1px 6px rgba(0,0,0,.03)}
.tabbar .tab{flex:1;display:flex;flex-direction:column;align-items:center;justify-content:center;
  gap:2px;padding:7px 0 6px;font-size:10.5px;line-height:1.15;color:var(--muted);
  text-decoration:none;-webkit-tap-highlight-color:transparent}
.tabbar .tab svg{width:23px;height:23px;display:block}
.tabbar .tab.on{color:var(--green)}
.tabbar .tab.on svg{stroke-width:2.15}

.toast{position:fixed;left:50%;top:45%;transform:translateX(-50%);
  background:rgba(0,0,0,.78);color:#fff;padding:10px 18px;border-radius:8px;
  font-size:14px;z-index:99;max-width:80%;text-align:center}

.spin{text-align:center;color:var(--muted);padding:40px;font-size:14px}

.badge{display:inline-block;font-size:11px;padding:1px 7px;border-radius:4px;
  background:#EAF7EF;color:#067A43;margin-left:6px}
.badge.ok{background:#EAF7EF;color:#067A43}
.badge.pend{background:#FFF4E0;color:#B7791F}
.badge.no{background:#FDECEC;color:#C0392B}

.tabs2{display:flex;background:#fff;border-bottom:1px solid var(--line);position:sticky;top:46px;z-index:15}
.tabs2 .t2{flex:1;text-align:center;padding:11px 0;font-size:14px;color:var(--muted);cursor:pointer}
.tabs2 .t2.on{color:var(--green);font-weight:500;border-bottom:2px solid var(--green)}

.disclaimer{background:#FFF8E8;border-left:3px solid var(--amber);color:#7A5A20;
  font-size:13px;padding:9px 14px}

.citem{padding:12px 0;border-bottom:1px solid var(--line)}
.citem:last-child{border-bottom:0}

/* ===== 微信式聊天细节：引用 / 文件消息 / 拍一拍高亮 / 会话置顶 ===== */
.quote-bar{display:flex;align-items:center;gap:8px;background:#F2F3F3;border-left:3px solid var(--green,#07C160);
  padding:7px 10px;font-size:12.5px}
.quote-bar.hidden{display:none}
.qb-l{flex:1;min-width:0;display:flex;gap:6px;align-items:baseline}
.qb-k{color:var(--green,#07C160);flex:none;max-width:40%;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.qb-t{color:var(--muted);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.qb-x{color:var(--muted);padding:0 4px}
.qblock{max-width:100%;background:#F0F1F1;border-left:3px solid #C9CFCC;border-radius:5px;
  padding:5px 8px;margin-bottom:4px;display:flex;gap:6px;align-items:baseline}
.qblock .qk{color:#5A6B62;font-size:11.5px;flex:none;max-width:42%;overflow:hidden;
  text-overflow:ellipsis;white-space:nowrap}
.qblock .qt{color:#8A938E;font-size:12px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.msg.me .qblock{background:#E9EFEB}
.filemsg{display:flex;align-items:center;gap:10px;padding:11px 13px;background:#fff;
  border:1px solid var(--line);border-radius:10px;text-decoration:none;min-width:190px;max-width:66vw}
.msg.me .filemsg{background:#fff}
.filemsg .fi{font-size:24px;flex:none}
.filemsg .fm{min-width:0;display:flex;flex-direction:column;gap:2px}
.filemsg .fn{font-size:13.5px;color:var(--text);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.filemsg .fs{font-size:11.5px;color:var(--muted)}
.msg.flash .bubble,.msg.flash .filemsg{animation:flashHi 1.2s ease}
@keyframes flashHi{0%,100%{box-shadow:none}30%{box-shadow:0 0 0 3px rgba(7,193,96,.45)}}
.sitem.pinned .sbody .stop b{color:#067A43}
.sflag{font-size:10px;color:#8A938E;background:#F1F3F2;border-radius:4px;padding:1px 5px;margin-left:6px}
.sflag.mute{background:transparent;padding:0;margin-left:4px}
.asbtn.danger{color:#D0402F}
.ctop{display:flex;align-items:center;gap:8px;font-size:16px;margin-bottom:6px}
.ctop b{font-weight:500}
.cmeta{font-size:13px;color:var(--muted);margin-bottom:4px}
.cnote{font-size:13px;color:#555;background:#F7F9FB;border-radius:6px;padding:6px 8px;margin-bottom:6px}
.cbody{font-size:14px;line-height:1.8;margin-bottom:8px}
.cimgs{display:flex;flex-wrap:wrap;gap:6px;margin-bottom:8px}
.cimg{width:72px;height:72px;border-radius:6px;object-fit:cover;background:#F0F0F0}
.rej{font-size:13px;color:#C0392B;background:#FDECEC;border-radius:6px;padding:6px 8px;margin-bottom:6px}
.rev{display:flex;gap:8px;margin-top:6px}
.rev .btn{flex:1}

.sitem{display:flex;gap:12px;padding:12px 0;border-bottom:1px solid var(--line);cursor:pointer}
.sitem:last-child{border-bottom:0}
.sbody{flex:1;min-width:0}
.stop{display:flex;align-items:center;justify-content:space-between;font-size:16px;margin-bottom:4px}
.stop b{font-weight:500}
.slast{font-size:13px;color:var(--muted);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}

.msgs{position:fixed;top:46px;left:0;right:0;bottom:58px;overflow-y:auto;background:var(--bg);padding:14px}
.msg{margin-bottom:12px;display:flex;gap:10px;align-items:flex-start;width:100%}
.msg.other{justify-content:flex-start}
.msg.me{justify-content:flex-end}
/* 气泡宽度按内容自适应：不能用百分比 max-width（会被压成最小宽度 → 文字变竖排） */
.bubble{display:inline-block;width:auto;max-width:100%;padding:10px 12px;border-radius:10px;
  font-size:15px;line-height:1.5;white-space:pre-wrap;word-break:break-word;overflow-wrap:anywhere;
  -webkit-touch-callout:none}
.msg.other .bubble{background:#fff;color:var(--text)}
.msg.me .bubble{background:var(--green);color:#fff}
.mtime{font-size:11px;color:var(--muted);margin-top:4px}

.inputbar{position:fixed;left:0;right:0;bottom:0;display:flex;gap:8px;padding:8px 12px;background:#fff;border-top:1px solid var(--line);z-index:40}
.inputbar input{flex:1;margin:0}
.inputbar .btn{width:auto;padding:10px 18px}

.nav-right{margin-left:auto;font-size:13px;font-weight:400}
.nav-right .link{color:#fff;opacity:.92;cursor:pointer;border:1px solid rgba(255,255,255,.5);
  padding:3px 10px;border-radius:14px}
.nav-right .link:active{background:rgba(255,255,255,.18)}
/* 通知铃铛：去掉外面那圈白色胶囊描边（在绿底上显得突兀），只留图标本身 */
.nav-right .link#bell{border:0;padding:4px 2px;font-size:17px;position:relative}
/* 未读数：红底白字加粗小胶囊，叠在铃铛右上角（微信同款，比"白底红字"更醒目也不突兀） */
#bellBadge{position:absolute;top:-4px;right:-7px;margin:0 !important;min-width:16px;height:16px;
  line-height:16px;padding:0 4px;border-radius:8px;background:#F5222D;color:#fff;
  font-size:11px;font-weight:600;text-align:center}

.aibox{position:fixed;left:0;right:0;top:84px;bottom:118px;overflow-y:auto;padding:14px;background:var(--bg)}
.amsg{margin-bottom:12px;display:flex}
.amsg.q{justify-content:flex-end}
.amsg.a{justify-content:flex-start}
.abubble{max-width:80%;padding:10px 12px;border-radius:12px;font-size:15px;line-height:1.6;word-break:break-word;white-space:pre-wrap}
.amsg.q .abubble{background:var(--green);color:#fff;border-bottom-right-radius:3px}
.amsg.a .abubble{background:#fff;color:var(--text);border-bottom-left-radius:3px}
.abubble.block{background:#FDECEC;color:#C0392B}
.srcs{margin:0 0 14px 0;background:#fff;border:1px solid var(--line);border-radius:10px;padding:10px 12px}
.srct{font-size:12px;color:var(--muted);margin-bottom:6px}
.src{font-size:13px;line-height:1.7;color:#444;padding:6px 0;border-top:1px dashed var(--line)}
.src:first-of-type{border-top:0}
.src b{color:var(--blue);font-weight:600;margin-right:4px}
.aiinput{position:fixed;left:0;right:0;bottom:60px;display:flex;gap:8px;padding:8px 12px;
  background:#fff;border-top:1px solid var(--line);z-index:40}
.aiinput input{flex:1;margin:0}
.aiinput .btn{width:auto;padding:10px 18px}

/* 工具跳转 */
.titem{display:flex;align-items:center;gap:12px;padding:12px 0;border-bottom:1px solid var(--line)}
.titem:last-child{border-bottom:0}
.titem .tbody{flex:1;min-width:0}
.titem .tbody b{font-size:16px;font-weight:500}
.titem .btn{width:auto;padding:9px 18px;flex-shrink:0}

/* 通知中心 */
.nitem{padding:13px 0;border-bottom:1px solid var(--line);cursor:pointer}
.nitem:last-child{border-bottom:0}
.nitem.unread{position:relative}
.nitem.unread .ntitle{font-weight:600}
.nitem.unread::before{content:"";position:absolute;left:-2px;top:18px;width:7px;height:7px;border-radius:50%;background:var(--red)}
.nitem.read .ntitle{color:var(--muted)}
.ntitle{font-size:15px;line-height:1.5;padding-left:10px}
.nmeta{font-size:13px;color:var(--muted);padding-left:10px;margin-top:3px;white-space:pre-line}
/* 「点这条能直接跳进对话」的提示箭头（2026-09-14）：让"可点"这件事一眼看得出来 */
.nitem .ntitle{display:flex;align-items:center;justify-content:space-between;gap:8px}
.ngo{flex:0 0 auto;color:var(--muted);font-size:20px;line-height:1;opacity:.55;margin-right:4px}

/* 分享卡片弹层 */
.share-mask{position:fixed;left:0;right:0;top:0;bottom:0;background:rgba(0,0,0,.5);
  display:flex;align-items:center;justify-content:center;z-index:80;padding:24px}
.share-card{background:#fff;border-radius:14px;padding:18px;width:100%;max-width:340px;text-align:center}
.share-img{width:100%;max-height:180px;object-fit:cover;border-radius:10px;margin-bottom:10px}
.share-title{font-size:17px;font-weight:600;line-height:1.5;margin-bottom:6px}
.share-text{font-size:14px;color:#555;line-height:1.7;text-align:left;max-height:140px;overflow:auto}
.share-url{font-size:12px;color:var(--muted);background:#F5F5F5;border-radius:8px;padding:8px;margin:10px 0;word-break:break-all;text-align:left}
.share-view{text-align:center}
.share-view .share-img{border-radius:10px}

/* ================= 会议模块（腾讯会议式）=================
   会务平面：会议号 / 成员 / 举手 / 聊天 / 主持管理（浅色，随主题）
   媒体平面：视频舞台（深色，符合所有主流会议软件的观看习惯） */
.mc-hero{background:linear-gradient(135deg,#0E9B57,#076B3B);border-radius:14px;
  padding:16px 16px 14px;color:#fff;margin:10px 0 14px;box-shadow:0 4px 14px rgba(7,107,59,.22)}
.mc-hero-t{font-size:19px;font-weight:600;letter-spacing:.4px}
.mc-hero-s{font-size:12px;opacity:.88;margin-top:4px}
.mc-hero-btns{display:flex;gap:10px;margin-top:14px}
.mc-join{display:flex;gap:8px;margin-top:12px}
.mc-join-i{flex:1;min-width:0;height:40px;border:none;border-radius:9px;padding:0 12px;
  font-size:15px;letter-spacing:1px;background:rgba(255,255,255,.94);color:#111}
.mbtn{border:none;border-radius:9px;padding:0 16px;height:40px;font-size:14px;
  background:#EDEDED;color:#222;white-space:nowrap}
.mbtn.primary{background:#fff;color:#076B3B;font-weight:600}
.mc-hero .mbtn.primary{background:#fff;color:#076B3B}
.mc-hero .mbtn{background:rgba(255,255,255,.22);color:#fff;border:1px solid rgba(255,255,255,.42)}
.mc-hero .mc-join .mbtn{background:#fff;color:#076B3B;font-weight:600;border:none}
.mrow{display:flex;align-items:center;gap:10px;padding:12px 4px;border-bottom:1px solid var(--line)}
.mrow:last-child{border-bottom:0}
.mrow.past{opacity:.62}
.mrow-l{flex:1;min-width:0}
.mrow-t{font-size:15px;color:var(--text);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.mrow-s{font-size:12px;color:var(--muted);margin-top:3px}
.mrow-sep{font-size:12px;color:var(--muted);padding:12px 4px 6px}
.mtag{font-size:11px;padding:2px 8px;border-radius:20px;background:#EEF2F0;color:#5A6B62}
.mtag.on{background:#E6F7ED;color:#067A43}
.mtag.off{background:#F1F1F1;color:#999}

/* 会前页 */
.prejoin{padding:20px 4px}
.pj-card{background:#fff;border-radius:14px;padding:20px 16px;box-shadow:0 2px 10px rgba(0,0,0,.04)}
.pj-title{font-size:18px;font-weight:600;text-align:center;margin-bottom:16px;color:var(--text)}
.pj-row{display:flex;justify-content:space-between;font-size:14px;padding:9px 0;border-bottom:1px dashed var(--line)}
.pj-k{color:var(--muted)}
/* 入会名称：入会前就能改，且只影响会议里的显示名（不动群昵称） */
.pj-name{margin-top:14px}
.pj-name .pj-k{display:block;font-size:13px;margin-bottom:7px}
.pj-nametip{margin-top:6px;font-size:11.5px;line-height:1.65;color:var(--muted)}
.pj-nametip b{font-weight:500;color:var(--text)}
.pj-v{color:var(--text);font-weight:500}
.pj-warn{margin-top:10px;background:#FFF4E0;color:#B7791F;font-size:13px;padding:8px 12px;border-radius:8px}
.pj-toggles{display:flex;gap:10px;margin-top:16px}
.pj-tg{flex:1;height:42px;border:1px solid var(--line);border-radius:10px;background:#F7F8F8;
  color:#666;font-size:13.5px}
.pj-tg.on{background:#E6F7ED;border-color:#9EDCBA;color:#067A43}
.pj-btns{display:flex;gap:10px;margin-top:18px}
.pj-btns .mbtn{flex:1;background:#F0F0F0;color:#333}
.pj-btns .mbtn.primary{background:var(--green,#07C160);color:#fff;font-weight:600}

/* 会议已结束 */
.mend{text-align:center;padding:64px 20px}
.mend-i{font-size:44px}
.mend-t{font-size:17px;font-weight:600;margin-top:12px;color:var(--text)}
.mend-s{font-size:13px;color:var(--muted);margin-top:6px}
.mend-del{margin-top:22px;font-size:13px;color:#C0392B;text-decoration:underline}
.mbtn.gray{background:#F0F0F0;color:#333}
.pj-btns .mbtn.gray{background:#F0F0F0;color:#333}

/* AI 会议纪要弹层 */
.mysum-body{max-height:52vh;overflow-y:auto;margin:10px 0 4px;padding:0 2px;
  -webkit-overflow-scrolling:touch}
.mysum-meta{font-size:12px;color:var(--muted);margin-bottom:8px}
.mysum-text{font-size:13.5px;line-height:1.72;color:var(--text);text-align:left;
  background:#F7F9F8;border-radius:10px;padding:12px 12px;white-space:normal;word-break:break-word}
/* 纪要弹层底部三个按钮等宽排开，别挤成一坨 */
.mysum-body~.ask-btns{justify-content:stretch}
.mysum-body~.ask-btns .ask-btn{flex:1;min-width:0;padding:9px 6px;font-size:13.5px}
/* 走兜底文案时，说清楚为什么，而不是含糊一句"演示" */
.mysum-hint{margin-top:9px;font-size:11.5px;line-height:1.6;color:#B7791F;
  background:#FFF8E8;border-radius:8px;padding:7px 10px;text-align:left}

/* 等候室：入会前等候页 + 会中提示条 + 准入名单
   （2026-09-15 爸爸：旧叫法别人看不懂是干啥的 → 全站统一改成「等候室」。
     ⚠️ 别在注释里复述那个旧词 —— `fe_smoke` 有一条「全站已无旧词」的源码断言，
        复述一次就等于把它写回去，断言立刻变红。） */
.wait-spin{font-size:34px;text-align:center;line-height:1;margin:2px 0 10px;
  animation:waitPulse 1.6s ease-in-out infinite}
@keyframes waitPulse{0%,100%{opacity:1;transform:scale(1)}50%{opacity:.5;transform:scale(.92)}}
.wait-t{text-align:center;font-size:14px;color:var(--text);font-weight:600;margin-bottom:4px}
.wait-tip{margin-top:12px;font-size:12px;line-height:1.6;color:var(--muted);text-align:center}
.pj-hint{margin-top:10px;background:#EEF3FF;color:#2A5DB0;font-size:12.5px;
  line-height:1.6;padding:8px 12px;border-radius:8px}
.meet-wait{background:#FFF3D6;border-left:3px solid #E9A23B;color:#7A5A20;font-size:12.5px;
  padding:8px 12px;border-radius:6px;margin-bottom:8px;display:flex;align-items:center;gap:6px}
.meet-wait b{color:#B7791F}
.mw-go{margin-left:auto;color:#2A5DB0;font-weight:600;padding:2px 8px;
  background:#fff;border-radius:20px;white-space:nowrap}
.mswait{margin-bottom:6px}
.mswait-t{font-size:11.5px;color:#B7791F;font-weight:600;padding:6px 9px;
  background:#FFF8E8;border-radius:6px;margin-bottom:4px}
.mttag.wait{background:#E9A23B;color:#3A2A08}
.mop.ok{color:#067A43;background:#E6F7ED}

/* 会中：顶部信息条 */
.meet-top{display:flex;align-items:center;gap:8px;background:#fff;border-radius:10px;
  padding:9px 12px;font-size:12.5px;color:var(--muted);margin-bottom:8px;
  box-shadow:0 1px 4px rgba(0,0,0,.04)}
.mt-num{font-weight:600;color:var(--text);letter-spacing:.5px}
.mt-time{font-variant-numeric:tabular-nums}
.mt-flex{flex:1}
.mt-on{color:#067A43}
.mt-net{color:#C0392B;font-size:11.5px}
.mt-copy{color:var(--green,#07C160);font-weight:500;padding:2px 6px}

/* 会中表情回应：从底部飘过的动效 */
.meet-fly{position:absolute;left:0;right:0;bottom:0;height:100%;pointer-events:none;overflow:hidden;z-index:6}
.fly-item{position:absolute;bottom:-10px;font-size:30px;line-height:1;
  animation:flyUp 3s linear forwards;will-change:transform,opacity}
@keyframes flyUp{
  0%{transform:translateY(0) scale(.6);opacity:0}
  12%{opacity:1;transform:translateY(-14px) scale(1.12)}
  70%{opacity:1}
  100%{transform:translateY(-190px) scale(.94);opacity:0}
}
.meet-degrade{background:#FFF8E8;border-left:3px solid #E9A23B;color:#7A5A20;
  font-size:12px;line-height:1.6;padding:8px 12px;border-radius:6px;margin-bottom:8px}
.meet-share{background:#E8F0FF;color:#2A5DB0;font-size:12.5px;padding:7px 12px;
  border-radius:6px;margin-bottom:8px;text-align:center}

/* 会中：舞台（高度跟随视口，磁贴均分铺满，避免小人数时大片留黑） */
.meet-stage{position:relative;background:#111;border-radius:12px;overflow:hidden;
  height:calc(100vh - 292px);min-height:214px;max-height:66vh;display:flex}
.meet-grid{flex:1;display:grid;gap:6px;padding:6px;height:100%;
  grid-auto-rows:minmax(0,1fr);align-content:stretch}
/* 演讲者视图：首个画面占满剩余高度，其余做底部缩略条 */
.meet-grid.lay-speaker{display:flex;flex-direction:column}
.meet-grid.lay-speaker .mtile:first-child{flex:1 1 auto;min-height:0}
.meet-grid.lay-speaker .mtile:not(:first-child){flex:0 0 60px;min-height:60px}
.mtile{position:relative;background:#232323;border-radius:9px;overflow:hidden;min-height:0;
  display:flex;align-items:center;justify-content:center;
  border:2px solid transparent;transition:border-color .15s}
.mtile.me{border-color:#3C6E52}
.mtile.handup{border-color:#E9A23B}
.mtile.sharing{border-color:#2A5DB0}
.mtile-v{position:absolute;inset:0;display:flex;align-items:center;justify-content:center}
.mtile-video{width:100%;height:100%;object-fit:cover;display:block}
.mtile-ph{width:100%;height:100%;display:flex;align-items:center;justify-content:center;background:#262626}
/* 头像随磁贴大小自适应：1 人时不会缩成一个小点，9 宫格时也不会溢出 */
.mtile-ph .avimg{height:26%;width:auto;max-height:84px;min-height:30px;
  border-radius:20%;opacity:.95}
.mtile-b{position:absolute;left:0;right:0;bottom:0;display:flex;align-items:center;gap:4px;
  padding:4px 7px;background:linear-gradient(transparent,rgba(0,0,0,.62));font-size:11.5px;color:#fff}
.mtile-n{flex:1;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.mtile-s{opacity:.85;font-size:11px}
.mtile-tags{position:absolute;left:6px;top:6px;display:flex;gap:4px;flex-wrap:wrap}
.mttag{font-size:10px;padding:1px 6px;border-radius:20px;background:rgba(255,255,255,.22);color:#fff}
.mttag.host{background:#0E9B57}
.mttag.co{background:#2A5DB0}
.mttag.mute{background:#8A8A8A}
.mttag.hand{background:#E9A23B;color:#3A2A08}
.mttag.share{background:#2A5DB0}
.mttag.me{background:#E6F7ED;color:#067A43}

/* 会中：右侧面板（成员 / 聊天）。窄屏改为浮层，不挤压视频区域 */
.meet-side{width:216px;flex:none;background:#fff;display:flex;flex-direction:column;
  border-left:1px solid var(--line)}
.meet-side.hidden{display:none}
@media (max-width:600px){
  .meet-side{position:absolute;right:0;top:0;bottom:0;width:76%;max-width:300px;z-index:8;
    border-radius:0 12px 12px 0;box-shadow:-8px 0 20px rgba(0,0,0,.18)}
}
.ms-tabs{display:flex;border-bottom:1px solid var(--line)}
.ms-tab{flex:1;text-align:center;padding:9px 0;font-size:13px;color:var(--muted);position:relative}
.ms-tab.on{color:var(--green,#07C160);font-weight:600}
.ms-tab.on::after{content:'';position:absolute;left:26%;right:26%;bottom:0;height:2px;
  background:var(--green,#07C160);border-radius:2px}
.ms-body{flex:1;overflow-y:auto;-webkit-overflow-scrolling:touch;padding:4px 0}
.msrow{display:flex;align-items:center;gap:7px;padding:7px 9px;border-bottom:1px solid #F5F6F6}
.msava{width:30px;height:30px;flex:none}
.msava .avimg{width:30px;height:30px;border-radius:22%}
.msinfo{flex:1;min-width:0}
.msname{font-size:13px;color:var(--text);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.msmeta{margin-top:3px;display:flex;gap:3px;flex-wrap:wrap}
.msmeta .mttag{color:#fff}
.msmeta .mttag.me{color:#067A43}
.mtag-n{font-size:10px;color:#067A43}
.msops{display:flex;flex-wrap:wrap;gap:3px;justify-content:flex-end;max-width:118px}
.mop{font-size:10.5px;color:#2A5DB0;padding:1px 5px;border-radius:4px;background:#F2F5FA;white-space:nowrap}
.mop.danger{color:#C0392B;background:#FDECEC}
.ms-foot{display:flex;gap:6px;padding:7px;border-top:1px solid var(--line)}
.ms-foot.hidden{display:none}
.ms-in{flex:1;min-width:0;height:34px;border:1px solid var(--line);border-radius:8px;
  padding:0 9px;font-size:13px;background:#F7F8F8}
.ms-send{height:34px;padding:0 12px;border:none;border-radius:8px;
  background:var(--green,#07C160);color:#fff;font-size:13px}
/* 会中聊天的表情入口 + 面板：面板贴在输入框上方，**不 fixed**（侧栏自己滚动） */
.ms-emo{width:34px;height:34px;flex:0 0 34px;padding:0;cursor:pointer;font-size:19px;line-height:1;
  border:1px solid var(--line);border-radius:8px;background:#F7F8F8;
  display:flex;align-items:center;justify-content:center}
.ms-emo.on{background:#EEF7EC;border-color:var(--green,#07C160)}
.ms-emo-panel{background:#fff;border-top:1px solid var(--line);max-height:216px;overflow-y:auto}
.ms-emo-panel.hidden{display:none}
.ms-emo-panel::-webkit-scrollbar{width:0;height:0;display:none}
/* 侧栏窄（216px / 手机 76%），贴纸用两列，每格约 90px，比三列看得清 */
.ms-emo-panel .emo-grid.stk-grid{grid-template-columns:repeat(2,1fr);gap:6px;padding:10px}
.ms-emo-panel .emo-grid.stk-grid .stk-item img{max-height:82px}
/* 会中聊天气泡窄，贴纸按比例缩小，别把气泡撑爆 */
.mschat .mmc .stk{height:60px;vertical-align:-14px;margin:1px 2px}
.mschat{padding:6px 8px}
.msys{font-size:11.5px;color:var(--muted);text-align:center;padding:5px 0}
.mmsg{display:flex;gap:6px;margin-bottom:9px}
.mmava{width:26px;height:26px;flex:none}
.mmava .avimg{width:26px;height:26px;border-radius:22%}
.mmb{flex:1;min-width:0}
.mmn{font-size:11px;color:var(--muted);margin-bottom:2px}
.mmc{font-size:13px;color:var(--text);line-height:1.5;word-break:break-word;
  white-space:pre-wrap;background:#F5F6F6;border-radius:8px;padding:6px 9px}
.mdot{display:inline-block;width:6px;height:6px;border-radius:50%;background:#FA5151;
  margin-left:4px;vertical-align:middle}

/* 会中：底部控制栏 */
.meet-ctrls{display:flex;gap:2px;background:#fff;border-radius:12px;margin-top:8px;
  padding:6px 2px;box-shadow:0 -1px 6px rgba(0,0,0,.05);position:sticky;bottom:0}
.mctl{flex:1;min-width:0;display:flex;flex-direction:column;align-items:center;gap:2px;
  border:none;background:transparent;padding:5px 1px;border-radius:9px;color:#6B7570}
.mctl-i{font-size:17px;line-height:1.1}
.mctl-t{font-size:10px;white-space:nowrap;transform:scale(.96)}
.mctl.on{background:#E6F7ED;color:#067A43}
.mctl.end{color:#D0402F}
.mctl.end .mctl-i{filter:none}

/* 底部弹层（会议管理 / 布局） */
.msheet{position:fixed;left:0;right:0;bottom:0;background:#fff;border-radius:14px 14px 0 0;
  z-index:120;padding-bottom:env(safe-area-inset-bottom);max-height:72vh;overflow:auto}
.msheet-h{display:flex;align-items:center;justify-content:space-between;padding:14px 16px;
  font-size:15px;font-weight:600;color:var(--text);border-bottom:1px solid var(--line)}
.msheet-x{color:var(--muted);font-weight:400;padding:0 4px}
.msheet-b{padding:6px 0 12px}
.msheet-item{padding:14px 18px;font-size:14.5px;color:var(--text);border-bottom:1px solid #F6F7F7}
.msheet-item:last-child{border-bottom:0}
.msheet-item.danger{color:#D0402F}
.msheet-lay{display:flex;gap:10px;padding:14px 16px}
.msheet-label{font-size:12px;color:var(--muted);padding:12px 18px 0}
.react-row{flex-wrap:wrap;justify-content:flex-start}
.react-btn{width:52px;height:52px;display:flex;align-items:center;justify-content:center;
  font-size:26px;background:#F5F6F6;border-radius:12px}
.react-btn:active{background:#E6F7ED}
.laybtn{flex:1;text-align:center;padding:12px 4px;border-radius:10px;background:#F5F6F6;
  font-size:13px;color:#555}
.laybtn.on{background:#E6F7ED;color:#067A43;font-weight:600}

/* 邀请弹层 */
.mwin-num{font-size:30px;font-weight:700;letter-spacing:3px;text-align:center;
  color:var(--text);margin:8px 0 2px;font-variant-numeric:tabular-nums}
.mwin-sub{font-size:11.5px;color:var(--muted);text-align:center;margin-bottom:12px}
.mwin-qr{display:flex;justify-content:center;padding:6px 0 4px;cursor:pointer;-webkit-tap-highlight-color:transparent}
.mwin-qr img,.mwin-qr canvas{display:block;border-radius:6px}
.mwin-qr-tip{font-size:11px;color:var(--muted);text-align:center;margin-bottom:10px}

/* ============ 通讯录 / 选人 / 群资料（微信式） ============ */
.savatar{width:42px;height:42px;border-radius:8px;background:#E8F5EC;display:flex;align-items:center;justify-content:center;font-size:20px;flex-shrink:0}
.sitem{align-items:center}
.mava{width:34px;height:34px;border-radius:6px;background:#fff;display:flex;align-items:center;justify-content:center;font-size:18px;flex-shrink:0;align-self:flex-start}
.mava.me{background:#DFF6E7}
.mcol{max-width:72%;min-width:0;display:flex;flex-direction:column}
.msg.other .mcol{align-items:flex-start}
.msg.me .mcol{align-items:flex-end}
.mname{font-size:12px;color:var(--muted);margin:0 2px 3px;max-width:100%;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.msg.me .mcol .bubble{border-top-right-radius:3px}
.msg.other .mcol .bubble{border-top-left-radius:3px}
.sysmsg{text-align:center;font-size:12px;color:var(--muted);margin:10px 0}

.citem2{display:flex;align-items:center;gap:12px;padding:11px 0;border-bottom:1px solid var(--line)}
.citem2:last-child{border-bottom:0}
.pk-ava{width:38px;height:38px;border-radius:8px;background:#F0F4FF;display:flex;align-items:center;justify-content:center;font-size:19px;flex-shrink:0}
.pk-name{flex:1;min-width:0;font-size:15px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.btn.mini{width:auto;padding:7px 14px;font-size:13px;flex-shrink:0}

.pick-mask{position:fixed;inset:0;background:rgba(0,0,0,.5);z-index:90;display:flex;align-items:flex-end;justify-content:center}
.pick-box{background:#fff;width:100%;max-width:520px;border-radius:14px 14px 0 0;max-height:82vh;display:flex;flex-direction:column}
.pick-head{display:flex;justify-content:space-between;align-items:center;padding:14px 16px;font-size:16px;font-weight:500;border-bottom:1px solid var(--line)}
.pick-x{color:var(--muted);cursor:pointer;font-size:16px}
.pick-search{padding:10px 14px}
.pick-tip{padding:0 16px 10px;font-size:12.5px;color:var(--muted);line-height:1.6}
.pick-list{flex:1;overflow-y:auto;padding:0 14px;min-height:120px}
.pick-item{display:flex;align-items:center;gap:12px;padding:10px 0;border-bottom:1px solid var(--line);cursor:pointer}
.pick-item.on{background:#F3FCF6}
.pk-ck{width:22px;height:22px;border-radius:50%;border:1px solid var(--line);display:flex;align-items:center;justify-content:center;color:var(--green);font-size:14px;flex-shrink:0}
.pick-item.on .pk-ck{background:var(--green);color:#fff;border-color:var(--green)}
.pick-foot{padding:10px 14px;border-top:1px solid var(--line)}

.gname{font-size:18px;font-weight:600;margin-bottom:4px}
.gmeta{font-size:13px;color:var(--muted)}
.gmeta b{color:var(--blue);cursor:pointer}
.gnotice{margin-top:10px;font-size:13px;color:#555;background:#F7F9FB;border-radius:8px;padding:8px 10px;line-height:1.6}
.gnotice.muted{color:var(--muted)}
.gsec{font-weight:500;margin-bottom:8px}
.qrbox{margin-top:12px;display:flex;justify-content:center;padding:10px;background:#fff;border:1px solid var(--line);border-radius:10px}
.qrbox img,.qrbox canvas{display:block}

/* ============ 聊天增强：图片 / 表情 / @提醒 / 成员九宫格 ============ */
.ibtn{width:38px;height:38px;border-radius:50%;border:1px solid var(--line);background:#fff;font-size:20px;line-height:1;color:#555;flex-shrink:0}
.more-panel{position:fixed;left:0;right:0;bottom:58px;background:#fff;border-top:1px solid var(--line);
  display:flex;gap:2px;padding:12px 6px 10px;z-index:41}
.mopt{flex:1;display:flex;flex-direction:column;align-items:center;gap:6px;background:transparent;
  border:0;border-radius:10px;padding:6px 2px;font-size:23px;color:#333;min-width:0}
.mopt:active{background:#F2F2F2}
.mopt span{font-size:11.5px;color:#5A5A5A;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;
  max-width:100%;line-height:1.15}
.emoji-row{position:fixed;left:0;right:0;bottom:58px;background:#fff;border-top:1px solid var(--line);padding:0 0 8px;max-height:236px;overflow-y:auto;z-index:41;
  -webkit-overflow-scrolling:touch;overscroll-behavior:contain;scrollbar-width:none;-ms-overflow-style:none}
/* 表情面板不要滚动条（手机是手指滑动，桌面端滚动条太丑） */
.emoji-row::-webkit-scrollbar{width:0;height:0;display:none}
.emoji-row .emo{font-size:24px;cursor:pointer;padding:2px 4px}
/* 微信风格表情面板：分组 Tab + 网格 */
.emo-tabs{display:flex;gap:16px;overflow-x:auto;padding:9px 12px;border-bottom:1px solid var(--line);position:sticky;top:0;background:#fff;z-index:2;
  -webkit-overflow-scrolling:touch;scrollbar-width:none;-ms-overflow-style:none}
.emo-tabs::-webkit-scrollbar{width:0;height:0;display:none}
.emo-tab{font-size:13px;color:var(--muted);white-space:nowrap;padding:2px 0;border-bottom:2px solid transparent;cursor:pointer}
.emo-tab.on{color:var(--green);border-bottom-color:var(--green);font-weight:500}
.emo-grid{display:grid;grid-template-columns:repeat(8,1fr);gap:4px;padding:10px 8px}
.emo-grid .emo{font-size:25px;text-align:center;padding:5px 0;border-radius:8px;line-height:1.1}
.emo-grid .emo:active{background:#F0F0F0}
.mimg{max-width:100%;max-height:240px;border-radius:8px;display:block}
.at{color:var(--blue);font-weight:600}
.msg.me .bubble .at{color:#EAF9EF}

.mgrid{display:grid;grid-template-columns:repeat(5,1fr);gap:12px 6px}
.mgrid-item{display:flex;flex-direction:column;align-items:center;gap:4px;cursor:pointer}
.mgrid-ava{width:44px;height:44px;border-radius:10px;background:#F0F4FF;display:flex;align-items:center;justify-content:center;font-size:21px}
.mgrid-name{font-size:11px;color:#555;max-width:56px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;text-align:center}
.asheet{padding:8px 14px 14px}
.asbtn{display:block;width:100%;background:#fff;border:1px solid var(--line);border-radius:10px;padding:13px;font-size:15px;color:#1A1A1A;margin-top:8px;text-align:center}

/* 群公告气泡（进入群聊时提示一次） */
.gbanner{margin:4px 0 12px;background:#FFF8E8;border-left:3px solid var(--amber);color:#7A5A20;
  font-size:12.5px;line-height:1.6;padding:8px 10px;border-radius:0 8px 8px 0;white-space:pre-wrap;word-break:break-word}

/* 群聊顶部滚动公告栏 */
.marquee{position:fixed;top:46px;left:0;right:0;height:30px;background:#FFF8E8;border-bottom:1px solid #F2E3C0;
  display:flex;align-items:center;gap:6px;padding:0 10px;z-index:31;overflow:hidden}
.marquee.hidden{display:none}
.mq-ico{flex-shrink:0;font-size:13px}
.mq-wrap{flex:1;overflow:hidden;position:relative;height:22px}
/* 滚动时长由 JS 按文字宽度动态计算（速度恒定，短公告直接静止居中） */
.mq-track{position:absolute;left:0;top:0;white-space:nowrap;font-size:12.5px;color:#8A5A00;line-height:22px;
  will-change:transform}
@keyframes mqmove{from{transform:translateX(100%)}to{transform:translateX(-100%)}}
.msgs.marq-on{top:76px}

/* 后台「装修」里的滚动字幕**预览**：外观照搬真实的那条栏，让设置页看到的就是真效果。
   高度/内边距与 .marquee 一致（30px + 图标 + 22px 轨道），否则预览的快慢会跟真机对不上。 */
.mq-demo{margin-top:2px;height:30px;background:#FFF8E8;border:1px solid #F2E3C0;border-radius:6px;
  display:flex;align-items:center;gap:6px;padding:0 10px;overflow:hidden}
.mq-demo-wrap{flex:1;overflow:hidden;position:relative;height:22px}

/* 群智能体消息 */
.mava.bot{background:#E8F0FE}
.botbubble{background:#EEF3FF !important;color:var(--text) !important;border:1px solid #D7E3FF}
.msg.botmsg .mname{color:#3B5BDB}

/* 语音消息 */
.voice{display:flex;align-items:center;gap:6px}
.voice audio{height:34px;max-width:180px}
.vdur{font-size:11px;color:var(--muted)}

/* 管理后台 */
.statgrid{display:grid;grid-template-columns:repeat(4,1fr);gap:10px}
.stat{background:#F7F9FB;border-radius:10px;padding:10px 6px;text-align:center}
.stat b{display:block;font-size:18px;color:var(--green)}
.stat span{font-size:11px;color:var(--muted)}
.urow{display:flex;align-items:center;gap:8px;padding:10px 0;border-bottom:1px solid var(--line)}
.urow:last-child{border-bottom:0}
.uinfo{flex:1;min-width:0}
.uinfo b{font-size:15px}
.umeta{font-size:12px;color:var(--muted);margin-top:2px}
.uacts{display:flex;gap:6px;flex-shrink:0}
/* ↑ ↓ 排序按钮：全局 .btn 是 display:block，放进 .uacts 后要显式做成小方块 */
.uacts .btn.mini{display:inline-flex;align-items:center;justify-content:center;padding:6px 10px;line-height:1}
/* 装修页的 ↑↓ 排序按钮：横排一对小方块（30x26）。
   ⚠️ 2026-09-14 记录一次误判：曾以为它们「被挤出屏幕右边」改成竖排 ——
      真因是**截图工具**（Chrome on Windows 的 --window-size 有最小宽 508 兜底，
      传 430 实际按 504 渲染、只裁前 430px），右边 114px 在图上根本不存在。
      探针实测：urow 由 x=28 到 476、卡片到 490，**没有任何溢出**。
      现恢复常规横排，仅在窄屏上真正溢出时（.uinfo 无 min-width:0 之类）才需再动。 */
.lyMv{flex-direction:row;gap:4px}
.lyMv .btn.mini{display:inline-flex;align-items:center;justify-content:center;
  width:30px;height:26px;min-width:30px;padding:0;font-size:12px;line-height:1}
/* 🔴 全局 `input{width:100%}` 会把 checkbox 撑成一个巨大的白框（本项目没有 input[type=checkbox] 规则）：
   装修页的模块勾选框必须显式收回来，否则文字被挤到最右、↑↓ 被挤到换行（2026-09-14 实测踩到）。 */
.lyOn{width:18px;height:18px;min-width:18px;flex:0 0 auto;padding:0;margin:0;
  border-radius:4px;accent-color:var(--green);box-shadow:none}

/* 消息搜索 */
.sres-item{padding:11px 0;border-bottom:1px solid var(--line);cursor:pointer}
.sres-item:last-child{border-bottom:0}
.sres-top{display:flex;justify-content:space-between;align-items:center;font-size:13px}
.sres-body{font-size:14px;color:#444;margin-top:4px;line-height:1.6;word-break:break-word}

/* 首页公告栏 */
.annbox{background:linear-gradient(135deg,#FFF8E8,#FFFDF7);border:1px solid #F2E3C0;border-radius:12px;
  padding:10px 12px;margin-top:10px;cursor:pointer;overflow:hidden}
.annbox .annimg{width:100%;max-height:150px;object-fit:cover;border-radius:8px;margin-bottom:8px;display:block}
.annbody{display:flex;gap:8px;align-items:flex-start}
.anntag{background:var(--amber);color:#fff;font-size:11px;border-radius:4px;padding:1px 6px;flex-shrink:0;margin-top:2px}
.anntext{flex:1;min-width:0}
.anntext b{font-size:14px}
.anncon{font-size:12.5px;color:#7A5A20;margin-top:3px;line-height:1.6;word-break:break-word}
.anndots{display:flex;gap:5px;justify-content:center;margin-top:6px}
.anndots .dot{width:6px;height:6px;border-radius:50%;background:#E0D3B4}
.anndots .dot.on{background:var(--amber);width:14px;border-radius:3px}

/* 今日转发素材 */
.dhead{display:flex;justify-content:space-between;align-items:baseline;font-weight:500;margin-bottom:8px}
.ditem{padding:10px 0;border-bottom:1px solid var(--line)}
.ditem:last-child{border-bottom:0}
.drow{display:flex;gap:8px;align-items:baseline;margin-bottom:6px}
.dimg{width:100%;max-height:170px;object-fit:cover;border-radius:8px;margin-bottom:6px;display:block}
.dcopy{font-size:13.5px;line-height:1.7;color:#333;background:#F7F9FB;border-radius:8px;padding:8px 10px;white-space:pre-wrap;word-break:break-word}
/* 素材时段徽标（早/午/晚） */
.dslot{flex:0 0 auto;padding:1px 8px;border-radius:20px;background:#EAF7F0;color:#0B8A46;
  font-size:11px;font-weight:600;letter-spacing:.3px}
/* 往期素材：按天折叠（默认收起，点标题展开） */
.dgrp{display:flex;align-items:center;justify-content:space-between;gap:8px;
  padding:11px 2px;font-size:13px;color:#0B8A46;font-weight:600;cursor:pointer;user-select:none}
.dgrp:not(.sub){border-top:1px solid var(--line);margin-top:4px}
.dgrp.sub{border-top:1px solid var(--line);color:var(--muted);font-weight:500;padding:9px 2px}
.dgrp .arw{transition:transform .2s;font-size:12px}
.dgrp.on .arw{transform:rotate(180deg)}
.dpast{display:none}
.dpast.on{display:block}

/* 案例页顶部：优秀门店 / 优秀团队长 */
.hscroll{display:flex;gap:10px;overflow-x:auto;padding:10px 12px 4px}
.hcard{flex:0 0 132px;background:#fff;border:1px solid var(--line);border-radius:12px;padding:10px;text-align:center}
.hcard .hava{width:52px;height:52px;border-radius:50%;background:#F0F4FF;display:flex;align-items:center;justify-content:center;font-size:24px;margin:0 auto 6px;overflow:hidden}
.hcard .hava img{width:100%;height:100%;object-fit:cover}
.hcard b{font-size:13px;display:block;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.hcard .htit{font-size:11px;color:var(--muted);margin-top:2px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.hcard .htag{font-size:10px;color:var(--blue);margin-top:4px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.hsec-t{font-size:14.5px;font-weight:600;padding:14px 12px 2px;color:#2B2B2B}

/* 管理端表单行 / Tab 横向滚动 */
.row{display:flex;gap:8px;align-items:center}
.row input,.row select{flex:1;min-width:0}
/* 滚动条一律隐藏（爸爸要求"不要滚动条"）；点击后面的标签由 app.js 自动滑入视野 */
.tabs2{overflow-x:auto;-webkit-overflow-scrolling:touch;
  scrollbar-width:none;-ms-overflow-style:none}
.tabs2::-webkit-scrollbar{width:0;height:0;display:none}
.tabs2 .t2{flex:0 0 auto;padding:10px 12px}

/* 虚拟红包卡片 */
.rpbubble{background:linear-gradient(135deg,#FF8A50,#FA5151) !important;color:#fff !important;
  display:flex !important;align-items:center;gap:10px;cursor:pointer;min-width:176px}
.rpbubble .rpi{font-size:26px;line-height:1}
.rpbubble .rpt{min-width:0}
.rpbubble .rpb{font-size:13px;font-weight:500;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;max-width:150px}
.rpbubble .rpm{font-size:11px;opacity:.88;margin-top:3px}

/* 红包弹窗 */
.rp-modal{background:#fff;width:calc(100% - 48px);max-width:360px;border-radius:14px;padding:16px;
  position:absolute;top:50%;left:50%;transform:translate(-50%,-50%);max-height:80vh;overflow-y:auto}
.rp-head{font-size:15px;text-align:center;color:#8A5A00}
.rp-sub{font-size:12.5px;color:var(--muted);text-align:center;margin-top:4px}
.rp-amt{font-size:26px;font-weight:600;text-align:center;color:#FA5151;margin:10px 0 6px}
.rp-info{font-size:12px;color:var(--muted);text-align:center}
.rp-list{margin-top:12px;border-top:1px solid var(--line);padding-top:8px;max-height:220px;overflow-y:auto}
.rp-row{display:flex;justify-content:space-between;font-size:13px;padding:6px 0;border-bottom:1px dashed var(--line)}
.rp-row:last-child{border-bottom:0}

/* 钱包 */
.wallet-top{background:linear-gradient(135deg,#FA5151,#FF8A50);color:#fff;border-radius:14px;padding:18px;text-align:center}
.wallet-top .wbal{font-size:32px;font-weight:600;margin:6px 0 2px}
.wallet-top .wtip{font-size:11.5px;opacity:.9}
.wtx{display:flex;justify-content:space-between;align-items:center;padding:9px 0;border-bottom:1px solid var(--line);font-size:13px}
.wtx:last-child{border-bottom:0}
.wtx .in{color:#FA5151;font-weight:500}
.wtx .out{color:var(--green);font-weight:500}

/* 微信式「按住说话」 */
.hold-mask{position:fixed;left:0;right:0;top:0;bottom:0;background:rgba(0,0,0,.35);z-index:60;
  display:flex;align-items:center;justify-content:center}
.hold-box{background:rgba(0,0,0,.82);color:#fff;border-radius:16px;padding:20px 26px;text-align:center;min-width:186px}
.hold-box.cancel{background:rgba(196,40,40,.92)}
.hold-ico{font-size:34px;line-height:1}
.hold-cd{font-size:19px;margin-top:6px;font-weight:500}
.hold-tip{font-size:12.5px;opacity:.86;margin-top:8px}
.hold-btn{flex:1;background:#F7F7F7 !important;color:#333 !important;border:1px solid var(--line);font-size:14px}
#voiceToggle.on{color:var(--green)}
/* 签到卡片 */
.checkin-card{background:linear-gradient(135deg,#FF9A3C,#FA5151);color:#fff;border-radius:14px;padding:16px;text-align:center}
.checkin-card .ckn{font-size:15px}
.checkin-card .ckd{font-size:12px;opacity:.9;margin-top:4px}
.checkin-card .ckb{margin-top:12px;background:#fff;color:#FA5151;border-radius:20px;padding:9px 0;font-weight:500}
.checkin-card .ckb.disabled{background:rgba(255,255,255,.35);color:#fff}

/* 自研「文字泡泡」表情（图片表情） */
/* 卡通贴纸：纯透明底，无底色、无边框、无点按方块（长按也不弹系统菜单） */
.stk{height:78px;width:auto;vertical-align:-22px;display:inline-block;margin:2px 3px;
  border:0;outline:0;background:transparent;-webkit-touch-callout:none;
  -webkit-user-select:none;user-select:none}
.bubble .stk{height:88px;vertical-align:-26px}
.emo-grid.stk-grid{grid-template-columns:repeat(3,1fr);gap:6px;padding:10px}
.emo-grid.stk-grid .stk-item{display:flex;align-items:center;justify-content:center;padding:4px;
  border:0;outline:0;background:transparent;border-radius:14px;
  -webkit-touch-callout:none;-webkit-user-select:none;user-select:none}
.emo-grid.stk-grid .stk-item img{width:100%;height:auto;max-height:74px;object-fit:contain;display:block;
  border:0;outline:0;background:transparent;-webkit-touch-callout:none}
/* 点按反馈：只做轻微淡出，不出现任何方框/底色 */
.emo-grid.stk-grid .stk-item:active{background:transparent;opacity:.72}
.emo-grid .emo:focus,.emo-grid .emo:active{outline:0}
/* 按住说话遮罩不拦截指针事件（否则松手收不到 mouseup，录音停不下来） */
.hold-mask{pointer-events:none}

/* 登录页「公司」选择（只显示公司名称） */
.tcur{background:#F7F7F7;border:1px solid var(--line);border-radius:10px;padding:11px 12px;font-size:15px;color:#222}
.tsel{width:100%;background:#F7F7F7;border:1px solid var(--line);border-radius:10px;padding:11px 12px;
  font-size:15px;color:#222;appearance:none;-webkit-appearance:none}

/* AI 团队（公司 AI 化部门） */
.team-grid{display:grid;grid-template-columns:repeat(3,1fr);gap:10px;padding:10px 0 2px}
.team-item{display:flex;flex-direction:column;align-items:center;gap:6px;padding:12px 4px;border:1px solid var(--line);
  border-radius:12px;background:#FCFCFC;cursor:pointer}
.team-item:active{background:#F0F0F0}
.team-ico{width:42px;height:42px;border-radius:50%;background:#EAF7F0;display:flex;align-items:center;
  justify-content:center;font-size:21px}
.team-name{font-size:12.5px;color:#333;text-align:center}

/* ===== 品牌视觉升级 v1 ===== */
:root{ --green-d:#059B4C; --radius:14px; }
.navbar{background:linear-gradient(135deg,#06AD56,#07C160);box-shadow:0 1px 8px rgba(0,0,0,.07)}
.card{border-radius:var(--radius);box-shadow:0 1px 8px rgba(0,0,0,.045)}
.hero{position:relative;overflow:hidden;background:linear-gradient(135deg,#0B8A46,#07C160 58%,#12C56C);
  color:#fff;border-radius:16px;padding:20px 18px;box-shadow:0 8px 22px rgba(7,193,96,.22)}
.hero::after{content:"";position:absolute;right:-46px;top:-46px;width:150px;height:150px;border-radius:50%;
  background:rgba(255,255,255,.10)}
.hero::before{content:"";position:absolute;right:22px;bottom:-56px;width:110px;height:110px;border-radius:50%;
  background:rgba(255,255,255,.07)}
.hero-brand{font-size:19px;font-weight:600;letter-spacing:.3px;position:relative}
.hero-slogan{font-size:12.5px;opacity:.93;margin-top:6px;line-height:1.65;position:relative}
.hero-stats{display:flex;gap:6px;margin-top:14px;flex-wrap:wrap;position:relative}
.hero-stats div{flex:1;min-width:68px;text-align:center;background:rgba(255,255,255,.16);
  border-radius:10px;padding:8px 4px;backdrop-filter:blur(2px)}
.hero-stats b{display:block;font-size:17px;font-weight:600;line-height:1.2}
.hero-stats b i{font-size:10.5px;font-style:normal;font-weight:400;margin-left:1px;opacity:.9}
.hero-stats span{font-size:10.5px;opacity:.88}

/* AI 虚拟头像 */
/* 头像：微信式圆角方形（不是正圆） */
.avimg{width:100%;height:100%;border-radius:22%;display:block;object-fit:cover}
.mava{overflow:hidden}
.mava.bot{background:#E8F0FE;overflow:hidden}
.savatar{overflow:hidden}

/* 图片/语音：微信式（不套气泡内边距，去掉大边框） */
.bubble.plain{background:transparent!important;padding:0!important;border:0!important;box-shadow:none!important}
.bubble.plain .mimg{border-radius:10px;max-width:60vw;max-height:240px}
/* 语音气泡：微信式小胶囊。宽由 JS 内联定死（border-box），所以：
   ① padding 必须小（10px×2=20px），给内容留够空间
   ② 不设 border —— 白底那一版原来带 1px 灰边框，等于又往外顶宽 2px 还多一圈灰线，
      用户的观感就是「太宽、有边框」。对方语音改用极淡投影区分层次，不加边框。 */
.vbub{display:inline-flex;align-items:center;justify-content:center;gap:5px;
  background:var(--green);color:#fff;border-radius:14px;padding:7px 10px;
  cursor:pointer;box-sizing:border-box;overflow:hidden;
  user-select:none;-webkit-user-select:none;-webkit-tap-highlight-color:transparent}
.msg.other .vbub{background:#fff;color:#333;box-shadow:0 1px 4px rgba(0,0,0,.10)}
.vbub.playing{opacity:.72}
.vbub .vico{font-size:14px;line-height:1;flex:0 0 auto}
.vbub .vdur{font-size:12px;line-height:1;opacity:.92;flex:0 0 auto;font-variant-numeric:tabular-nums}
/* 标杆门店：一排两个（大图 + 地址 + 电话 + 导航） */
.sgrid{display:grid;grid-template-columns:repeat(2,1fr);gap:10px;padding:8px 12px 4px}
.scard{background:#fff;border-radius:14px;overflow:hidden;box-shadow:0 1px 8px rgba(0,0,0,.05);display:flex;flex-direction:column}
.scimg{width:100%;height:86px;background:#EAF7F0;display:flex;align-items:center;justify-content:center;font-size:30px;overflow:hidden}
.scimg img{width:100%;height:100%;object-fit:cover;display:block}
.scname{padding:8px 10px 0;font-size:13.5px;line-height:1.3;
  /* 固定两行高度：门店名长短不一时，同一行的两张卡才等高对齐。
     🔴 必须写 calc(8px + 2.6em)，不能只写 2.6em ——
     全站 `*{box-sizing:border-box}`，min-height 已经包含了 8px 上内边距，
     直接写 2.6em(=35.1px) 只够 1.5 行 → 单行名卡 35px、双行名卡 43px，
     差 8px 会让下方「导航」按钮一高一低（实测差 8px）。
     calc(8px + 2.6em)=43.1px = 内边距 + 正好两行，单/双行名一律等高。 */
  min-height:calc(8px + 2.6em);
  display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden}
.scname b{font-weight:600}
.scname span{font-size:11px;color:var(--muted);margin-left:4px}
.scaddr,.scphone{display:block;padding:2px 10px;font-size:11.5px;color:var(--muted);
  white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.scphone{color:var(--green);text-decoration:none}
.scphone.muted{color:var(--muted);font-size:11.5px}
/* 「查看门店详情 ›」：门店卡整张可点，这行是可见的提示 */
.smore{border-top:1px solid var(--line);margin-top:auto;padding:7px 10px;font-size:12px;font-weight:500;
  color:#0B8A46;text-align:center}
.scard:active .smore{background:#F3FCF6}
.scard{cursor:pointer}
/* ——— 门店详情弹层（点门店卡弹出）——— */
.sbox{width:100%;max-width:420px;margin:auto;background:#fff;border-radius:18px;overflow:hidden;
  max-height:88vh;display:flex;flex-direction:column}
.sbox-hero{width:100%;height:172px;background:#EAF7F0;display:flex;align-items:center;justify-content:center;
  font-size:52px;flex:none;overflow:hidden}
.sbox-hero img{width:100%;height:100%;object-fit:cover;display:block}
.sbox-body{padding:16px 18px 18px;overflow-y:auto}
.sbox-kick{font-size:11px;letter-spacing:.16em;color:var(--muted)}
.sbox-n{font-size:19px;font-weight:600;color:var(--text);margin-top:6px;line-height:1.4}
.sbox-t{font-size:12.5px;color:var(--muted);margin-top:5px;line-height:1.6}
.sbox-tags{display:flex;flex-wrap:wrap;gap:6px;margin-top:10px}
.sbox-tags .ptag{color:#0B8A46;background:#EAF7F0;font-size:11.5px;padding:3px 9px;border-radius:20px}
.sbox-rows{margin-top:14px;border-top:1px solid var(--line)}
.sbox-row{display:flex;gap:10px;align-items:flex-start;padding:10px 0;border-bottom:1px solid var(--line);
  font-size:13px;color:var(--text);text-decoration:none;line-height:1.6}
.sbox-row b{flex:0 0 62px;color:var(--muted);font-weight:500;font-size:12.5px}
.sbox-row span{flex:1;min-width:0;word-break:break-word}
.sbox-row.tel span{color:var(--green);font-weight:500}
.sbox-row.muted span{color:var(--muted)}
.sbox-sec{margin-top:16px;font-size:13px;font-weight:600;color:var(--text)}
.sbox-i{margin-top:8px;font-size:13.5px;line-height:1.9;color:var(--text);text-align:justify;word-break:break-word}
.sbox-acts{display:flex;gap:10px;margin-top:18px}
.sbox-btn{flex:1;text-align:center;padding:11px 0;border-radius:10px;font-size:13.5px;font-weight:500;
  text-decoration:none;color:#0B8A46;background:#EAF7F0}
.sbox-btn.primary{background:var(--green,#07C160);color:#fff}
.sbox-btn:active{filter:brightness(.96)}
/* 关闭按钮：门店弹层是白底卡片，不能沿用人物弹层那套"墨绿洒金"的金色按钮
   （那套是在深色卡上设计的，放白底上会变成一块突兀的金条 + 重阴影） */
.sbox .pbox-btn{margin-top:12px;border:1px solid var(--line);color:var(--muted);
  background:#fff;box-shadow:none;font-size:14px;letter-spacing:.06em;font-weight:500}
/* ——— AI 生图弹层 ——— */
.gibox{width:100%;max-width:460px;margin:auto;background:#fff;border-radius:16px;overflow:hidden;
  max-height:90vh;display:flex;flex-direction:column}
.gibox-head{display:flex;justify-content:space-between;align-items:center;padding:14px 16px;
  font-size:16px;font-weight:500;border-bottom:1px solid var(--line)}
.gibox-body{padding:14px 16px 18px;overflow-y:auto}
.gi-ta{width:100%;box-sizing:border-box;border:1px solid var(--line);border-radius:10px;background:#F7F7F7;
  padding:10px 12px;font-size:13.5px;line-height:1.6;resize:vertical;font-family:inherit}
.gi-ta:focus{border-color:var(--green,#07C160);background:#fff;outline:0}
.gi-sel{margin-top:10px;width:100%;height:38px;border:1px solid var(--line);border-radius:10px;
  background:#F7F7F7;font-size:13.5px;padding:0 10px}
.gi-out{margin-top:12px}
.gi-img{width:100%;border-radius:12px;display:block;background:#F2F3F5}
.gi-acts{display:flex;gap:8px;margin-top:10px;align-items:center;flex-wrap:wrap}
.gi-note{margin-top:10px;font-size:11.5px;line-height:1.65;color:var(--muted);
  background:#FAFAF8;border-radius:8px;padding:8px 10px}
.gi-err{margin-top:12px;font-size:13px;line-height:1.7;color:#C0392B;background:#FDECEA;
  border-radius:10px;padding:10px 12px;word-break:break-word}
.genimg-mask{align-items:flex-start;padding-top:24px}
/* ——— 到店核销码（顾客出示）——— */
.rc-mask{align-items:center}
.rcbox{width:100%;max-width:380px;margin:auto;background:#fff;border-radius:18px;overflow:hidden}
.rc-head{display:flex;justify-content:space-between;align-items:center;padding:14px 16px;
  font-size:15px;font-weight:500;border-bottom:1px solid var(--line)}
.rc-body{padding:20px 18px 22px;text-align:center}
.rc-code{font-size:42px;font-weight:600;letter-spacing:.14em;color:var(--text);
  font-variant-numeric:tabular-nums;line-height:1.25}
.rc-clock{height:4px;border-radius:2px;background:#EDEEF0;margin:14px 0 12px;overflow:hidden}
.rc-clock i{display:block;height:100%;width:100%;background:var(--green,#07C160);transition:width .9s linear}
.rc-bal{font-size:13.5px;color:var(--text);font-weight:500}
.rc-tip{margin-top:6px;font-size:12px;color:var(--muted);line-height:1.6;min-height:18px}
.rc-note{margin-top:14px;font-size:11.5px;line-height:1.75;color:var(--muted);text-align:left;
  background:#FAFAF8;border-radius:10px;padding:10px 12px}
.rc-note b{font-weight:500;color:var(--text)}
.sr-ok{margin-top:4px;font-size:13px;line-height:1.7;color:#0B8A46;background:#EAF7F0;
  border-radius:10px;padding:10px 12px;word-break:break-word}
.scnav{margin:6px 10px 10px;text-align:center;background:#EAF7F0;color:#0B8A46;border-radius:8px;
  padding:6px 0;font-size:12.5px;text-decoration:none;font-weight:500}
/* 领军人物：一排三个 */
.hgrid{display:grid;grid-template-columns:repeat(3,1fr);gap:10px;padding:8px 12px 4px}
.pcard{background:#fff;border-radius:18px;padding:20px 10px 18px;text-align:center;box-shadow:0 2px 12px rgba(0,0,0,.06)}
.pcava{width:92px;height:92px;border-radius:50%;overflow:hidden;margin:0 auto 12px;background:#EAF7F0;
  display:flex;align-items:center;justify-content:center;font-size:38px;
  box-shadow:0 4px 14px rgba(11,138,70,.14)}
.pcava img{width:100%;height:100%;object-fit:cover;display:block}
.pcard b{font-size:16px;display:block;line-height:1.35}
.pcard .htit{font-size:12.5px;color:var(--muted);margin-top:4px;line-height:1.5}
/* 「查看简介 ›」提示：告诉用户卡片是可以点的（原来点一下只弹纯文本，没人知道能点） */
.pcard .pmore{margin-top:9px;font-size:11.5px;color:var(--green);font-weight:500;
  background:#EAF7F0;border-radius:20px;display:inline-block;padding:3px 11px}
/* 去掉案例页滚动条（横向+纵向都隐藏，仍可滑动） */
.hscroll{overflow-x:auto;-ms-overflow-style:none;scrollbar-width:none}
.hscroll::-webkit-scrollbar,.wrap::-webkit-scrollbar,.msgs::-webkit-scrollbar{display:none;width:0;height:0}
/* 全局隐藏滚动条：这是手机 H5，只保留手指上下/左右滑动，不显示滚动条。
   桌面浏览器里那条竖向滚动条在真机上并不存在，留着只会破坏真机观感。 */
*{scrollbar-width:none;-ms-overflow-style:none}
*::-webkit-scrollbar{width:0;height:0;display:none}

/* 领军人物：coverflow 轮播（中间大、两边小） */
.cf{position:relative;overflow:hidden;padding:20px 0 10px;cursor:grab;user-select:none;
  -webkit-user-select:none;touch-action:pan-y}
.cf.grabbing{cursor:grabbing}
.cf-track{display:flex;align-items:center;will-change:transform;
  transition:transform .38s cubic-bezier(.22,.61,.36,1)}
.cf.dragging .cf-track{transition:none}
.cf-item{flex:0 0 auto;width:212px;margin:0 -34px;transform:scale(.7);opacity:.45;
  transition:transform .38s cubic-bezier(.22,.61,.36,1),opacity .38s ease;transform-origin:center center}
.cf-item.on{transform:scale(1);opacity:1;z-index:3}
.cf-item.on .pcard{box-shadow:0 8px 24px rgba(11,138,70,.2);border:1px solid rgba(11,138,70,.18)}
.cf-dots{display:flex;justify-content:center;gap:5px;padding:9px 0 2px}
.cf-dots i{width:5px;height:5px;border-radius:50%;background:#CBD5D0;display:block;transition:all .25s}
.cf-dots i.on{width:15px;border-radius:3px;background:#0B8A46}

/* ================= 我的 · 个人资料（微信式） ================= */
/* 头像统一为「圆角方形」（微信头像规则），不再是正圆 */
.mecard{display:flex;align-items:center;gap:12px;cursor:pointer}
.meava{width:54px;height:54px;border-radius:14px;overflow:hidden;flex-shrink:0;background:#F0F4FF}
.meava .avimg{width:54px;height:54px;border-radius:14px;object-fit:cover;display:block}
.meinfo{flex:1;min-width:0}
.mename{font-size:16.5px;font-weight:500;display:flex;align-items:center;gap:6px;
  white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.mephone{color:var(--muted);font-size:13px;margin-top:2px}
.mearrow{color:#C8C8C8;font-size:20px;line-height:1;flex-shrink:0}

.pf-card{padding:2px 14px}
.pf-row{display:flex;align-items:center;justify-content:space-between;gap:12px;
  min-height:58px;border-bottom:1px solid var(--line)}
.pf-row:last-child{border-bottom:0}
.pf-row-dis{cursor:not-allowed}
.pf-k{font-size:15px;color:var(--text);flex-shrink:0}
.pf-v{display:flex;align-items:center;gap:6px;min-width:0}
.pf-input{flex:1;border:0;outline:0;background:transparent;font-size:15px;color:var(--text);
  text-align:right;font-family:inherit;min-width:0;padding:8px 0}
.pf-input::placeholder{color:#BBB}
.pf-lock{color:var(--muted);font-size:14px}
.pf-ava{width:50px;height:50px;border-radius:13px;overflow:hidden;display:inline-block;background:#F0F4FF}
.pf-ava .avimg,.pf-ava img{width:50px;height:50px;border-radius:13px;object-fit:cover;display:block}
.pf-tip{color:var(--muted);font-size:12.5px;line-height:1.65;padding:10px 4px 0}

/* ================= 页面内弹层：输入 / 多行文本（替代浏览器原生 prompt） ================= */
.ask-box{background:#fff;width:100%;max-width:420px;border-radius:14px;padding:18px 16px 14px;margin:auto}
.ask-t{font-size:15.5px;font-weight:500;color:var(--text);margin-bottom:12px;text-align:center}
.ask-i{width:100%;border:1px solid var(--line);border-radius:10px;background:#F7F7F7;
  padding:11px 12px;font-size:15px;color:var(--text);font-family:inherit;outline:0}
.ask-i:focus{border-color:var(--green);background:#fff}
.ask-ta{min-height:132px;line-height:1.65;resize:vertical}
.ask-btns{display:flex;gap:8px;margin-top:12px;justify-content:flex-end;align-items:center}
.ask-btn{border:0;border-radius:9px;padding:9px 18px;font-size:14.5px;font-family:inherit;
  cursor:pointer;background:#F2F2F2;color:#333}
.ask-btn.ok{background:var(--green);color:#fff}
.ask-btn.cancel{background:#F2F2F2;color:#555}
.ask-btn.ai{background:#EAF7EF;color:var(--green-d);font-weight:500;margin-right:auto}
.ask-btn.ai:disabled{opacity:.6;cursor:default}
/* 列表弹层底部的「已选 N 人 + 按钮」两行布局 */
.pick-foot-col{display:block}
.cg-count{font-size:12.5px;color:var(--muted);margin-bottom:8px;text-align:center}
/* 确认弹层：标题是多行说明文字时的排版 */
.ask-t-multi{text-align:left;font-weight:400;font-size:14.5px;line-height:1.65;color:#333;
  white-space:pre-wrap;margin-bottom:4px}
/* 信息弹层正文（替代 alert） */
.info-body{font-size:14.5px;line-height:1.7;color:#333;white-space:pre-wrap;word-break:break-word;
  max-height:52vh;overflow-y:auto;padding:2px 2px 0}

/* ============ 案例页 v2：视频窗 / 图文区 / 案例墙 / 追踪时间线（2026-09-12） ============ */
/* 顶部视频播放窗：黑底等比，封面未加载也不跳版；点下方小卡可换片 */
.vstage{background:#000;margin:12px 12px 0;border-radius:14px;overflow:hidden;position:relative;
  box-shadow:0 2px 14px rgba(0,0,0,.16)}
.vstage video{display:block;width:100%;max-height:46vh;background:#000}
.vstage .vcap{position:absolute;left:0;right:0;bottom:0;padding:28px 12px 10px;color:#fff;
  font-size:14px;line-height:1.5;background:linear-gradient(transparent,rgba(0,0,0,.72));
  pointer-events:none}
.vstage .vcap .vtag{display:inline-block;font-size:10.5px;background:rgba(7,193,96,.92);color:#fff;
  border-radius:4px;padding:1px 6px;margin-right:6px;vertical-align:1px}
.vstage .vcap em{display:block;font-style:normal;font-size:12px;opacity:.85;margin-top:3px}
/* 轮播序号（右下角）—— 让用户知道这是轮播，不是页面出错 */
.vstage .vnum{position:absolute;right:10px;bottom:12px;padding:2px 9px;border-radius:20px;
  background:rgba(0,0,0,.55);color:#fff;font-size:11px;line-height:1.5;letter-spacing:.3px;
  pointer-events:none}

/* 区块标题（视频案例 / 图文案例 / 我的投稿） */
.csec{margin-top:16px}
.csec-h{display:flex;align-items:baseline;gap:8px;padding:2px 14px 8px;font-size:14.5px;font-weight:500}
.csec-h .cnt{font-size:12px;color:var(--muted);font-weight:400}
.csec-h .more{margin-left:auto;font-size:12.5px;color:var(--blue);font-weight:400}

/* 发布人信息行：头像 + 昵称 + 城市（列表与详情共用） */
.who{display:flex;align-items:center;gap:6px;font-size:12.5px;color:var(--muted);margin-top:6px}
.who img,.who .wava{width:22px;height:22px;border-radius:50%;object-fit:cover;flex:none;background:#E8ECEA;
  display:flex;align-items:center;justify-content:center;font-size:12px;overflow:hidden}
.who b{font-weight:400;color:#55605A;max-width:42%;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.who .wcity{color:#7A857F;display:flex;align-items:center;gap:2px}

/* 视频案例小卡：横向滑动条（点一下换上方播放器） */
.vstrip{display:flex;gap:9px;overflow-x:auto;padding:2px 12px 6px;-webkit-overflow-scrolling:touch}
.vstrip::-webkit-scrollbar{display:none}
.vcard{flex:0 0 auto;width:142px;border-radius:11px;overflow:hidden;background:#fff;position:relative;
  box-shadow:0 1px 7px rgba(0,0,0,.07);cursor:pointer}
.vcard.on{outline:2px solid var(--green);outline-offset:0}
.vcard .vthumb{width:100%;height:86px;background:#111;display:flex;align-items:center;justify-content:center;
  color:#fff;font-size:26px;position:relative;overflow:hidden}
.vcard .vthumb img{width:100%;height:100%;object-fit:cover;display:block}
.vcard .vthumb .pico{position:absolute;inset:0;display:flex;align-items:center;justify-content:center;
  background:rgba(0,0,0,.22);color:#fff;font-size:24px;text-shadow:0 1px 4px rgba(0,0,0,.5)}
.vcard .vname{font-size:12.5px;padding:6px 8px 2px;line-height:1.45;height:38px;overflow:hidden;
  display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical}
.vcard .who{padding:0 8px 8px;margin-top:2px;font-size:11.5px}
.vcard .who img,.vcard .who .wava{width:18px;height:18px;font-size:10px}

/* 图文案例卡：两列网格 */
.ggrid{display:grid;grid-template-columns:repeat(2,1fr);gap:10px;padding:2px 12px 4px}
.gcard{background:#fff;border-radius:12px;overflow:hidden;box-shadow:0 1px 7px rgba(0,0,0,.06);
  cursor:pointer;display:flex;flex-direction:column}
.gcard .gimg{width:100%;height:118px;object-fit:cover;background:#F0F2F1;display:block}
.gcard .gph{width:100%;height:118px;background:#F0F2F1;display:flex;align-items:center;justify-content:center;
  color:#C3CCC7;font-size:26px}
.gcard .gt{font-size:13px;line-height:1.45;padding:7px 9px 0;height:45px;overflow:hidden;
  display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical}
.gcard .who{padding:0 9px 9px}
.gcard .who img,.gcard .who .wava{width:18px;height:18px;font-size:10px}
.gcard .gmore{font-size:11.5px;color:#9AA5A0;padding:0 9px 9px}

/* 案例墙条目（列表式，含视频角标） */
.cvtag{display:inline-block;font-size:10.5px;background:#EAF7EF;color:#067A43;border-radius:4px;
  padding:1px 6px;margin-right:6px;vertical-align:1px}

/* ============ 追踪时间线 ============ */
.trk{margin:6px 14px 0}
.trk-hd{display:flex;align-items:center;gap:8px;font-size:14.5px;font-weight:500;padding:10px 0 6px}
.trk-hd .cnt{font-size:12px;color:var(--muted);font-weight:400}
.trk-hd .add{margin-left:auto;font-size:12.5px;color:#fff;background:var(--green);border-radius:14px;
  padding:5px 12px;font-weight:400;cursor:pointer}
.trk-hd .add:active{background:var(--green-d)}
.trk-item{position:relative;padding:0 0 4px 24px;margin-bottom:12px}
.trk-item::before{content:'';position:absolute;left:6px;top:6px;bottom:-12px;width:1px;background:#DFE5E2}
.trk-item:last-child::before{display:none}
.trk-dot{position:absolute;left:0;top:4px;width:13px;height:13px;border-radius:50%;background:#fff;
  border:2px solid var(--green)}
.trk-item.pending .trk-dot{border-color:var(--amber)}
.trk-item.rejected .trk-dot{border-color:var(--red)}
.trk-top{display:flex;align-items:center;gap:7px;margin-bottom:4px}
.trk-no{font-size:11.5px;background:#EAF7EF;color:#067A43;border-radius:4px;padding:1px 7px;font-weight:500}
.trk-no.pending{background:#FFF4E0;color:#B7791F}
.trk-no.rejected{background:#FDECEC;color:#C0392B}
.trk-time{font-size:11.5px;color:var(--muted)}
.trk-txt{font-size:14px;line-height:1.75;color:#2A2A2A;white-space:pre-wrap;word-break:break-word}
.trk-imgs{display:flex;flex-wrap:wrap;gap:6px;margin-top:7px}
.trk-imgs img{width:78px;height:78px;border-radius:7px;object-fit:cover;background:#F0F0F0;cursor:pointer}
.trk-vid{margin-top:7px;position:relative;border-radius:9px;overflow:hidden;background:#000;max-width:240px}
.trk-vid video{display:block;width:100%;max-height:190px;background:#000}
.trk-rej{font-size:12.5px;color:#C0392B;background:#FDECEC;border-radius:6px;padding:5px 8px;margin-top:6px}

/* 追踪录入表单（底部弹出） */
.trk-form{background:#F7F9F8;border-radius:12px;padding:12px;margin:6px 0 4px;
  border:1px solid var(--line)}
.trk-tabs{display:flex;gap:8px;margin-bottom:10px}
.trk-tab{flex:1;text-align:center;font-size:13px;padding:8px 0;border-radius:9px;background:#fff;
  border:1px solid var(--line);color:#666;cursor:pointer}
.trk-tab.on{background:#EAF7EF;border-color:rgba(7,193,96,.5);color:#067A43;font-weight:500}
.trk-drop{border:1px dashed #CFD8D4;border-radius:10px;background:#fff;padding:18px 12px;text-align:center;
  color:var(--muted);font-size:13px;cursor:pointer}
.trk-drop .ic{font-size:26px;display:block;margin-bottom:4px}
.trk-drop .pv{width:100%;max-height:180px;border-radius:8px;object-fit:contain;background:#000}
.trk-picks{display:flex;flex-wrap:wrap;gap:7px}
.trk-pick{position:relative;width:76px;height:76px;border-radius:8px;overflow:hidden;background:#F0F0F0}
.trk-pick img{width:100%;height:100%;object-fit:cover;display:block}
.trk-pick .del{position:absolute;top:2px;right:2px;width:18px;height:18px;border-radius:50%;
  background:rgba(0,0,0,.55);color:#fff;font-size:12px;display:flex;align-items:center;
  justify-content:center;cursor:pointer}
.trk-pick.addpick{display:flex;align-items:center;justify-content:center;border:1px dashed #CFD8D4;
  color:var(--muted);font-size:20px;background:#fff;cursor:pointer}
.trk-btns{display:flex;gap:8px;margin-top:11px}
.trk-btns .btn{margin:0}
.trk-done{text-align:center;font-size:13px;color:#067A43;background:#EAF7EF;border-radius:9px;
  padding:9px;margin-top:8px}
/* 大图查看（案例图/追踪图点击放大，SPA 内不跳页） */
.bigimg-mask{position:fixed;inset:0;z-index:9998;background:rgba(0,0,0,.93);
  display:flex;align-items:center;justify-content:center;flex-direction:column;padding:18px}
.bigimg-mask img{max-width:100%;max-height:76vh;object-fit:contain;border-radius:8px}
.bigimg-mask .bi-bar{margin-top:14px;color:#fff;font-size:13px;opacity:.85;display:flex;
  align-items:center;gap:18px}
.bigimg-mask .bi-bar span{cursor:pointer}

/* 案例页顶部·温和版提示条（替代原来的黄色警告条）
   定位：原来那条是「⚠️ 效果因人而异，不构成疗效承诺」——语气像警示，观感偏负面。
   现在改成温柔正向的表述，但把「效果因人而异」这层合规意思保留在句子里（法律上不能删）。 */
.warmnote{background:linear-gradient(90deg,#F1F9F4,#F7FCF9);border-left:3px solid var(--green);
  color:#2F6B4A;font-size:13px;padding:10px 14px;line-height:1.6}
.warmnote em{font-style:normal;color:#6E8C7C}

/* ================= 领军人物 · 简介弹层 =================
   一张「墨绿洒金」的人物立牌 —— 不是白底弹窗，而是有底色的典雅卡面。
   层次：底色渐变 → 洒金光晕 → 细斜暗纹 → 金色描边 → 内压金线 → 右上纹记 → 金环头像 → 菱形金线分隔。
   ⚠️ 多租户红线：这里所有文案必须中性，不得出现任何公司/品牌名。 */
.pbox{position:relative;width:100%;max-width:392px;margin:auto;border-radius:20px;
  padding:30px 22px 20px;text-align:center;max-height:86vh;
  overflow-y:auto;overflow-x:hidden;-webkit-overflow-scrolling:touch;
  color:#F4F1E6;
  background:
    radial-gradient(130% 70% at 50% -10%, rgba(214,178,94,.24), transparent 62%),
    radial-gradient(90% 60% at 108% 108%, rgba(214,178,94,.14), transparent 62%),
    linear-gradient(158deg,#0F3E2E 0%,#15573F 46%,#082419 100%);
  border:1px solid rgba(206,172,92,.42);
  box-shadow:0 26px 60px rgba(0,0,0,.5),inset 0 2px 0 rgba(255,255,255,.05)}
/* 细斜暗纹：让底色不是一块死渐变，近看有织物的肌理 */
.pbox::before{content:'';position:absolute;inset:0;z-index:0;border-radius:20px;pointer-events:none;
  background:repeating-linear-gradient(45deg,rgba(255,255,255,.028) 0 1px,transparent 1px 7px)}
/* 内压金线：离边框 6px 再走一圈更细的金线，像卡纸压边 */
.pbox::after{content:'';position:absolute;inset:6px;z-index:0;border-radius:14px;pointer-events:none;
  border:1px solid rgba(206,172,92,.20)}
.pbox>*{position:relative;z-index:1}
/* 右上角纹记（纯装饰几何纹，不用汉字，避免任何歧义） */
.pbox-seal{position:absolute;top:14px;right:14px;z-index:2;width:34px;height:34px;border-radius:9px;
  display:flex;align-items:center;justify-content:center;font-style:normal;font-size:13px;
  color:rgba(226,196,120,.8);border:1px solid rgba(206,172,92,.45);
  background:rgba(206,172,92,.08);transform:rotate(-8deg)}
.pbox-kick{font-size:11px;letter-spacing:.22em;color:rgba(226,196,120,.78);
  font-family:"Songti SC","STSong","SimSun",serif}
.pbox-kick::after{content:'';display:block;width:36px;height:1px;margin:9px auto 0;
  background:linear-gradient(90deg,transparent,rgba(206,172,92,.75),transparent)}
.pbox-ava{width:100px;height:100px;border-radius:50%;overflow:hidden;margin:16px auto 14px;
  background:rgba(255,255,255,.06);display:flex;align-items:center;justify-content:center;
  font-size:42px;border:2px solid rgba(216,184,104,.75);
  box-shadow:0 0 0 4px rgba(216,184,104,.13),0 10px 26px rgba(0,0,0,.35)}
.pbox-ava img{width:100%;height:100%;object-fit:cover;display:block}
.pbox-n{font-size:21px;font-weight:600;color:#FFF9EA;line-height:1.35;letter-spacing:.06em;
  font-family:"Songti SC","STSong","SimSun",serif}
.pbox-t{font-size:13px;color:rgba(226,196,120,.92);font-weight:500;margin-top:7px;line-height:1.55}
.pbox-tags{display:flex;flex-wrap:wrap;gap:7px;justify-content:center;margin-top:12px}
.ptag{font-size:11.5px;color:#EBD59A;background:rgba(216,184,104,.12);
  border:1px solid rgba(206,172,92,.34);border-radius:20px;padding:3px 11px;
  line-height:1.5;white-space:nowrap}
/* 分隔线：中间亮、两端淡的金线，正中一颗菱形金点 */
.pbox-line{height:1px;margin:18px 0 15px;
  background:linear-gradient(90deg,transparent,rgba(206,172,92,.5) 22%,rgba(226,196,120,.75) 50%,rgba(206,172,92,.5) 78%,transparent)}
.pbox-line i{display:block;width:5px;height:5px;margin:-2.5px auto 0;transform:rotate(45deg);
  background:rgba(226,196,120,.9)}
.pbox-i{font-size:14px;line-height:1.95;color:#E6E0CF;text-align:justify;word-break:break-word;
  text-shadow:0 1px 0 rgba(0,0,0,.25)}
.pbox-btn{display:block;width:100%;margin-top:20px;padding:12px 0;border:0;cursor:pointer;
  border-radius:12px;font-size:15px;letter-spacing:.16em;font-weight:600;color:#20180A;
  background:linear-gradient(180deg,#E7CE8F,#C9A756);
  box-shadow:0 6px 18px rgba(0,0,0,.35)}
.pbox-btn:active{transform:translateY(1px);filter:brightness(.96)}

/* ========== 🎫 消费券（首页卡片 + 钱包/核销台）==========
   用暖橙金调，和绿色主题的其它卡片区分开 —— 一眼能认出"这是券那一块"。 */
.cpcard{background:linear-gradient(135deg,#E8632F,#F5A623);color:#fff;border-radius:16px;
  padding:18px;text-align:center;box-shadow:0 8px 22px rgba(232,99,47,.22)}
.cpcard .cpt{font-size:15px;font-weight:600;letter-spacing:.04em}
.cpcard .cpsub{font-size:12px;opacity:.92;margin-top:4px}
.cpcard .cpfen{font-size:34px;font-weight:700;line-height:1.2;margin:10px 0 2px}
.cpcard .cpfen .cpunit{font-size:14px;font-weight:400;opacity:.9}
.cpcard .cpmeta{font-size:11.5px;opacity:.9}
.cpcard .cpbtn{display:block;width:100%;margin-top:14px;padding:11px 0;border:0;cursor:pointer;
  border-radius:12px;font-size:15px;font-weight:600;color:#C64A18;background:#fff;
  box-shadow:0 4px 12px rgba(0,0,0,.12)}
.cpcard .cpbtn:active{transform:translateY(1px);filter:brightness(.97)}
.cpcard .cpbtn.off{color:#8A8A8A;background:rgba(255,255,255,.72);box-shadow:none;cursor:default}
.cpcard .cpnote{font-size:11px;opacity:.85;margin-top:9px}
