/* =========================================================================
   春恋 · 同城交友 APP —— 统一设计令牌（Design Tokens）
   依据《三合一整合方案》5.2 / 5.3 / 5.4，取三款 App 最佳值
   ========================================================================= */
:root{
  --brand:#FF4C81;            /* 品牌主色（粉红） */
  --brand-2:#FF4362;          /* 品牌红（次） */
  --brand-deep:#FF3355;       /* 品牌红（深） */
  --brand-orange:#FF8E61;     /* 品牌橙（渐变尾） */
  --brand-grad:linear-gradient(135deg,#FF4C81 0%,#FF8E61 100%);
  --grad-pink:linear-gradient(135deg,#FF4C81 0%,#FF4362 100%);   /* 纯粉渐变：主播条 / 选中态 */
  --grad-hero:linear-gradient(160deg,#FF4C81 0%,#9E4CFF 45%,#6A3BFF 100%);   /* 冷启动/登录：粉紫渐变 */
  --brand-soft:#FFF1F6;       /* 浅粉底 */
  --brand-soft2:#FFF7FA;
  --soft-bg:#F5F6F9;          /* 统一浅灰底：列表 / 页面底 */
  --shadow-soft:0 4px 12px rgba(255,76,129,.12);   /* 卡片 / 按钮柔投影 */
  --stroke-brand:1px solid rgba(255,76,129,.25);   /* 描边胶囊 */
  --selected-bg:#FF9E8CB3;    /* Tab / 标签选中态（真实选中紫） */
  --live-bg:#1B1B2E;          /* 直播/语音房/通话 深色场景 */
  --live-bg2:#0E1116;
  --gold:#FFC700;             /* 金色：钻石/礼物/收益 */
  --gold-2:#FFF27C;
  --gold-ink:#C98200;         /* 金色·文字用（白底 3.2:1，与 --ok-ink 同规矩）——价格 / 钻石数 */
  --fab-yellow:#FFE600;       /* 动态页发布 FAB 的纯黄底（量自真机帧 f_142：色相 53.7° / 饱和 .92） */
  --danger:#FF3B30;           /* 警示红 */
  --ok-ink:#12A150;           /* 成功绿·文字用（白底 3.37:1） */
  --t1:#181818; --t2:#666666; --t3:#8A8A94; --t4:#8E8E99;
  --line:#E5E5E5; --line-2:#F0F0F0; --line-3:#F5F6F9;
  --chat-light:#147AFF; --chat-lively:#FF8E82; --chat-serious:#0052FF;
  /* 间距 5dp 网格 */
  --s1:5px; --s2:8px; --s3:10px; --s4:15px; --s5:20px; --s6:30px; --s7:40px;
  --r-cap:30px;               /* 胶囊 */
  --r-card:16px;              /* 卡片 */
  --r-sm:8px;
  --fs-10:10px; --fs-11:11px; --fs-12:12px; --fs-13:13px; --fs-14:14px;
  --fs-15:15px; --fs-16:16px; --fs-17:17px; --fs-18:18px; --fs-20:20px;
  --fw:375px;                 /* 手机宽 */
  --fh:812px;                 /* 手机高 */
  /* 系统状态栏 / 手势条的真实高度（APP 模式下 .sysbar / .tabbar 用它留白）：
     安卓壳会先读 WindowInsets 覆盖这两个值；手机浏览器退回 env()；桌面为 0。 */
  --safe-top:env(safe-area-inset-top,0px);
  --safe-bottom:env(safe-area-inset-bottom,0px);
}

*{box-sizing:border-box;-webkit-tap-highlight-color:transparent}
.ico{display:inline-flex;flex:none;width:20px;height:20px;align-items:center;justify-content:center}
.ico svg{width:100%;height:100%;display:block}
html,body{margin:0;padding:0}
body{
  font-family:-apple-system,BlinkMacSystemFont,"PingFang SC","Hiragino Sans GB","Microsoft YaHei",sans-serif;
  background:#0d0d12;color:#eee;min-height:100vh;
}
img{display:block}
button{font-family:inherit;cursor:pointer;border:none;background:none;color:inherit}
::-webkit-scrollbar{width:8px;height:8px}
::-webkit-scrollbar-thumb{background:#2c2c36;border-radius:8px}
::-webkit-scrollbar-track{background:transparent}

/* ---------------------------------------------------------------- 顶部工具条 */
.topbar{
  position:sticky;top:0;z-index:50;display:flex;align-items:center;justify-content:space-between;gap:20px;
  padding:14px 22px;background:rgba(13,13,18,.92);backdrop-filter:blur(12px);border-bottom:1px solid #232330;
}
.brand{display:flex;align-items:center;gap:12px}
.brand-logo{
  width:40px;height:40px;border-radius:12px;background:var(--brand-grad);color:#fff;font-weight:700;
  display:flex;align-items:center;justify-content:center;font-size:19px;box-shadow:0 6px 18px rgba(255,76,129,.35)
}
.topbar h1{margin:0;font-size:16px;font-weight:700;letter-spacing:.3px;color:#fff}
.topbar p{margin:2px 0 0;font-size:11.5px;color:#8b8b98}
.top-actions{display:flex;gap:8px}
.tabbtn{padding:8px 16px;border-radius:20px;background:#1c1c26;color:#9a9aa8;font-size:13px;transition:.18s}
.tabbtn:hover{background:#25252f;color:#dcdce6}
.tabbtn.active{background:var(--brand-grad);color:#fff;font-weight:600;box-shadow:0 4px 14px rgba(255,76,129,.35)}
.tab-sep{width:1px;align-self:stretch;margin:6px 2px;background:#2a2a35}
.tabbtn.ref{background:transparent;color:#6f6f7d;border:1px dashed #33333f}
.tabbtn.ref:hover{background:#1c1c26;color:#a8a8b6}
.tabbtn.ref.active{background:#22222c;color:#c9c9d4;font-weight:500;box-shadow:none;border-style:solid}

.view{display:none;padding:26px 22px 80px}
.view.active{display:block}

/* ---------------------------------------------------------------- 全部页面板 */
.board-grid{display:flex;flex-wrap:wrap;gap:34px 26px;justify-content:flex-start}
.board-item{width:397px}
.board-cap{display:flex;align-items:baseline;gap:8px;margin:0 0 10px}
.board-cap b{font-size:14px;color:#fff;font-weight:600}
.board-cap span{font-size:11px;color:#7c7c8a}

/* ---------------------------------------------------------------- 手机外框 */
.phone{
  width:calc(var(--fw) + 22px);height:calc(var(--fh) + 22px);border-radius:44px;background:#08080c;padding:11px;
  box-shadow:0 0 0 2px #2a2a35, 0 26px 60px rgba(0,0,0,.6);position:relative;flex:none
}
.phone::after{ /* 侧键 */
  content:"";position:absolute;right:-2px;top:190px;width:3px;height:64px;border-radius:3px;background:#2a2a35
}
.phone::before{content:"";position:absolute;left:-2px;top:150px;width:3px;height:44px;border-radius:3px;background:#2a2a35}
.screen{
  width:100%;height:100%;border-radius:34px;overflow:hidden;position:relative;background:#fff;color:var(--t1);
  display:flex;flex-direction:column;
}
.notch{
  position:absolute;top:0;left:50%;transform:translateX(-50%);width:150px;height:26px;
  background:#08080c;border-radius:0 0 18px 18px;z-index:40
}

/* 系统状态栏占位：只占真实高度，不画图标、不写时间 —— 页面不再画假状态栏。
   真机上顶上那条是系统的；设计稿的手机壳（.phone / 单屏预览）没有系统栏，
   给一个和真机等高的 44px 留白，免得页面内容顶到假刘海里。 */
.sysbar{flex:none;height:var(--safe-top,0px)}
.phone,#onlyScreen{--safe-top:44px}

/* ---------------------------------------------------------------- 通用组件 */
.scroll{position:absolute;inset:0;overflow:hidden}
.page{position:absolute;inset:0;display:flex;flex-direction:column;background:#fff}
.body{flex:1;min-height:0;overflow-y:auto;overflow-x:hidden;position:relative;
  scrollbar-width:none;-webkit-overflow-scrolling:touch}
.body::-webkit-scrollbar{width:0;height:0}
.pad{padding:0 var(--s4)}
.sr-only{position:absolute!important;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;
  clip:rect(0,0,0,0);white-space:nowrap;border:0}

.navbar{
  height:44px;display:flex;align-items:center;padding:0 var(--s3);position:relative;flex:none;z-index:20
}
.navbar .nb-back{width:30px;height:30px;display:flex;align-items:center;justify-content:center;margin-left:-4px}
.navbar .nb-title{position:absolute;left:0;right:0;text-align:center;font-size:var(--fs-17);font-weight:600;pointer-events:none}
.navbar .nb-right{margin-left:auto;display:flex;align-items:center;gap:10px;font-size:var(--fs-13);color:var(--t2)}

.appbar{padding:0 var(--s4) 6px;flex:none;display:flex;align-items:center;gap:var(--s3)}
.appbar .main-title{font-size:var(--fs-20);font-weight:700;letter-spacing:.5px}
.chip{
  height:26px;padding:0 12px;border-radius:13px;background:var(--line-3);color:var(--t2);
  font-size:var(--fs-12);display:inline-flex;align-items:center;gap:4px
}
.chip.on{background:var(--brand-soft);color:var(--brand-deep);font-weight:600}
.chip-solid{height:26px;padding:0 12px;border-radius:13px;background:var(--brand-grad);color:#fff;font-size:var(--fs-12);display:inline-flex;align-items:center}
.tagline{font-size:var(--fs-12);color:var(--t3)}

.btn{
  height:44px;border-radius:var(--r-cap);display:flex;align-items:center;justify-content:center;
  font-size:var(--fs-16);font-weight:600;color:#fff;background:var(--brand-grad);box-shadow:0 8px 20px rgba(255,76,129,.28)
}
.btn.ghost{background:#fff;color:var(--brand);box-shadow:inset 0 0 0 1px #FFD3E2}
.btn.solid{background:var(--grad-pink);box-shadow:0 10px 24px rgba(168,18,74,.42), inset 0 0 0 1px rgba(255,255,255,.22)}
.btn.grey{background:var(--line-3);color:var(--t2);box-shadow:none}
.btn.sm{height:30px;font-size:var(--fs-13);padding:0 16px;box-shadow:none;width:auto}
.btn.block{width:100%}
.divider{height:1px;background:var(--line-2)}

.card{background:#fff;border-radius:var(--r-card);box-shadow:var(--shadow-soft)}

/* ---------------------------------------------------------------------------
   皮肤层（对齐真实 AnsenShape）：圆角 / 渐变 / 描边四件套。
   规则：按钮与胶囊一律 30px 圆角；卡片 16px；描边用 --stroke-brand；柔投影用 --shadow-soft。
   --------------------------------------------------------------------------- */
.pill-btn{
  display:inline-flex;align-items:center;justify-content:center;gap:6px;
  min-height:40px;padding:0 22px;border:0;border-radius:var(--r-cap);
  background:var(--brand-grad);color:#fff;font-size:var(--fs-14);font-weight:600;
  box-shadow:var(--shadow-soft);cursor:pointer
}
.pill-btn.ghost{background:#fff;color:var(--brand);border:var(--stroke-brand);box-shadow:none}
.pill-btn.block{display:flex;width:100%}
.pill-chip{
  display:inline-flex;align-items:center;gap:4px;height:28px;padding:0 13px;
  border-radius:var(--r-cap);background:#fff;border:var(--stroke-brand);
  color:var(--t2);font-size:var(--fs-12);cursor:pointer
}
.pill-chip.on{background:var(--selected-bg);border-color:transparent;color:#fff;font-weight:600}
.soft-bg{background:var(--soft-bg)}
.avatar{border-radius:50%;object-fit:cover;background:var(--line-3)}
.cover{border-radius:var(--r-card);object-fit:cover;background:var(--line-3)}

/* 底部 Tab 栏 */
.tabbar{
  /* 真机 60347fd1 f_0044/f_0045/f_0047/f_0060 逐帧量：5 格等分（中心 36/108/180/252/324），
     图标墨迹 y688 起、文字墨迹到 y727、系统手势条 y741..745 —— 内容贴顶排，不居中 */
  flex:none;height:calc(75px + var(--safe-bottom,0px));display:flex;align-items:flex-start;background:rgba(255,255,255,.98);
  border-top:1px solid var(--line-2);padding:5px 0 0;position:relative;z-index:25
}
.tabbar .tb{flex:1;display:flex;flex-direction:column;align-items:center;gap:3px;color:#8E8E99;font-size:11px}
.tabbar .tb.on{color:var(--brand);font-weight:600}
/* 底部栏图标是原版素材（选中/未选中两张），不再是内联 SVG；中间那格是「我」的头像 + 未读角标 */
.tabbar .tb .tbic{width:23px;height:23px;object-fit:contain}
.tabbar .tb-me .tbav{position:relative;display:block;width:28px;height:28px;border-radius:50%;background:var(--line-3)}
.tabbar .tb-me .tbav-img{width:28px;height:28px;border-radius:50%;object-fit:cover;box-shadow:0 0 0 1px rgba(0,0,0,.06)}
.tabbar .tb-me .tbbadge{
  position:absolute;top:-4px;right:-7px;min-width:16px;height:16px;padding:0 4px;border-radius:8px;
  background:#FF3B30;color:#fff;font-size:9px;font-style:normal;font-weight:600;
  display:flex;align-items:center;justify-content:center;border:1.5px solid #fff
}
.tabbar .tb-me .tbbadge[hidden]{display:none}
.tabbar .tb-me>span:last-child{font-size:var(--fs-10);line-height:1}
/* 中间那格的两种形态（真机量得的规则见 screens.js 注释）：
   noav = 账号没有头像 → 「消息」气泡 23px + 「消息」文字；有头像时只放 28px 圆头像、不显文字。 */
.tabbar .tb-me .tbav-fb{display:none;width:23px;height:23px;object-fit:contain}
.tabbar .tb-me .tbav-lb{display:none;font-size:11px;line-height:1}
.tabbar .tb-me.noav .tbav{width:23px;height:23px;border-radius:0;background:none}
.tabbar .tb-me.noav .tbav-img{display:none}
.tabbar .tb-me.noav .tbav-fb{display:block}
.tabbar .tb-me.noav .tbav-lb{display:block}
.tabbar .tb-me.noav .tbbadge{top:-5px;right:-8px}
/* 动态列表就地评论：键盘已经把可见区域收矮，底部 Tab 若继续参与布局就会被顶到键盘上方。
   评论期间隐藏它，关闭评论后恢复；评论输入栏单独贴在可见区域底部。 */
.screen.qc-open .tabbar{display:none}
.screen.qc-open .feedlist{padding-bottom:68px}

/* ---------------------------------------------------------------- 首页「同城」列表（真机录像 f_0001） */
.body.homebody{display:flex;flex-direction:column;overflow:hidden;background:#F5F6F9}
.hr-live{position:absolute;left:4px;top:4px;background:rgba(255,59,92,.92);color:#fff;border-radius:6px;padding:1px 5px;font-size:9px;line-height:14px;z-index:2;cursor:pointer}.hr-live i{display:inline-block;width:5px;height:5px;border-radius:50%;background:#fff;margin-right:3px;vertical-align:1px}
.home-tools{flex:none;display:flex;gap:14px;overflow-x:auto;padding:10px 12px 0;background:#fff;scrollbar-width:none}.home-tools::-webkit-scrollbar{display:none}.home-tools>span{flex:none;width:48px;display:flex;flex-direction:column;align-items:center;gap:3px;color:#FF5E90;cursor:pointer}.home-tools .ico{width:27px;height:27px;padding:5px;border-radius:10px;background:#FFF0F5}.home-tools i{font-size:10px;font-style:normal;color:#5A5660;white-space:nowrap}.home-tools>span:nth-child(2n) .ico{color:#845BE8;background:#F1ECFF}.home-tools>span:nth-child(3n) .ico{color:#F29A38;background:#FFF2E1}
.home-top{flex:none;
  /* 页面底色按新录像 88b906b5 逐点取色（左边缘 x=3.75css 一列）：
     y12.5 #F6DEFE → y42 #F9E4FC → y87 #FFEDFE → y117 #FEF4FE → y140 #FFF9FF → y150 起全白。
     老录像 f_0001 同样是 y146 附近就已经淡成 #FFF5FF。
     所以这一条是「薰衣草 → 粉 → 白」**纵向收白**，不是原来那种越往下越粉的横扫渐变；
     横向再压一层右侧粉（顶部左 #FADEFF / 右 #FFDBE4）。 */
  background:
    linear-gradient(90deg, rgba(255,215,230,0) 38%, rgba(255,211,226,.5) 100%),
    linear-gradient(180deg,#F8DCFF 0%,#FCE6FD 26%,#FEF1FE 56%,#FFF9FE 78%,#FFFFFF 100%)}
.home-promos{display:grid;grid-template-columns:repeat(3,1fr);gap:7.5px;padding:28px 12px 0}
.home-promo{position:relative;width:auto;min-width:0;height:83.5px;box-sizing:border-box;border-radius:16px;background:#fff;padding:42px 4px 0;display:flex;flex-direction:column;align-items:center;gap:3px;overflow:visible;cursor:pointer;box-shadow:0 3px 10px rgba(206,160,240,.18)}
.home-promo-art{position:absolute;left:50%;top:-22px;transform:translateX(-50%);width:62px;height:62px;background-position:center;background-repeat:no-repeat;background-size:contain;pointer-events:none}
.home-promo b{font-size:15px;line-height:20px;color:#3E3C44;font-weight:700;white-space:nowrap}
.home-promo small{font-size:11px;line-height:15px;color:#A3A1A9;white-space:nowrap}
/* 红包条（礼物播报）：卡 css x15~345（左右各 15）、y157.5~207.5（高 50）—— 与真机录像 88b906b5 逐点量的一致。
   老注释里的「左右 12 / 高 52 / 头像 28 / 字号 14 / 胶囊右 8 下 4」都是上一轮肉眼估的，按帧实测对不上，已改（见文档 §16.6）。 */
/* 花瓣形状：三种朝向（-28° / 20° / 6°）各一张内联 SVG，fill 是淡粉渐变、fill-opacity .6 —— 比真机略淡是故意的
   （真机那片粉是图片素材，录到我们手里已经过一遍缩放/色度抽样；宁可淡一点，也不要糊成一块）。 */
.home-marquee{--petal-a:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 40 40'%3E%3Cdefs%3E%3ClinearGradient id='p' x1='0' y1='0' x2='1' y2='1'%3E%3Cstop offset='0' stop-color='%23FFE4EC'/%3E%3Cstop offset='1' stop-color='%23FFB4C8'/%3E%3C/linearGradient%3E%3C/defs%3E%3Cellipse cx='20' cy='20' rx='8.5' ry='15' transform='rotate(-28 20 20)' fill='url(%23p)' fill-opacity='.62'/%3E%3C/svg%3E");
  --petal-b:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 40 40'%3E%3Cdefs%3E%3ClinearGradient id='p' x1='0' y1='0' x2='1' y2='1'%3E%3Cstop offset='0' stop-color='%23FFE4EC'/%3E%3Cstop offset='1' stop-color='%23FFB4C8'/%3E%3C/linearGradient%3E%3C/defs%3E%3Cellipse cx='20' cy='20' rx='8.5' ry='15' transform='rotate(20 20 20)' fill='url(%23p)' fill-opacity='.62'/%3E%3C/svg%3E");
  --petal-c:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 40 40'%3E%3Cdefs%3E%3ClinearGradient id='p' x1='0' y1='0' x2='1' y2='1'%3E%3Cstop offset='0' stop-color='%23FFE4EC'/%3E%3Cstop offset='1' stop-color='%23FFB4C8'/%3E%3C/linearGradient%3E%3C/defs%3E%3Cellipse cx='20' cy='20' rx='8.5' ry='15' transform='rotate(6 20 20)' fill='url(%23p)' fill-opacity='.62'/%3E%3C/svg%3E");
  position:relative;height:50px;box-sizing:border-box;margin:12px 15px 0;border-radius:5px;
  /* 圆角按 f_0000 的左上/右上角逐行量：边框从 (x32,y251) 弯到 (x24,y260)，横向 8px、纵向 9px，
     即半径 ≈ 8.5 帧px = 5.3css。上一版写 14 是肉眼估的，并排看四角明显比真机圆一圈。
     左内边距写 0：两种版式的头像左沿不同（方框 24 / 圆 30.6），统一 padding 会把其中一个顶偏，
     所以头像自带左内缩（见 .hm-av）。右内边距仍 10 —— 真机 f_0000 第一行墨迹右沿 335，
     卡右 344.4 - 描边 1 - 10 = 333.4 ≈ 335，留着。 */
  padding:0 10px 0 0;display:flex;align-items:center;overflow:hidden;border:1px solid #E4D0D0;
  /* 卡面底色：对新录像 88b906b5 的**卡内大色块**取中位数（f_0090，避开文字/头像，x 每 24css 一段）：
     x16-40 #FFFBFE / x40-160 #FFF6F9 / x232-256 #FFF5F5 / x280-304 #FFECEC / x304-344 #FFE8E6。
     关键结论：真机卡面**整张都是淡粉**、从左到右逐渐加粉，而不是「白底 + 右下角一块粉」——
     上一版写成近白底，和真机并排看就是「白得像张纸」，所以这里改成横向粉渐变（暖粉，G≈B），
     右下角再叠一层极淡的径向粉做体积感。描边同步调暖（真机外沿取到 #D7B5B4，是暖粉不是洋红）。 */
  background:
    /* 花瓣：真机卡面上散着 5~6 片淡粉花瓣（f_0090 逐点量位置/大小，见文档 §16.9）。
       我们没有这个图片素材，用一段同形的内联 SVG（旋转椭圆 + 淡粉渐变）重画 —— 纯装饰、不含数据。
       位置用百分比（跟着卡宽走），大小按帧量：20/14/24/22/26/22css。 */
    var(--petal-a) 14% -9px/20px 20px no-repeat,
    var(--petal-b) 24% 2px/16px 16px no-repeat,
    var(--petal-c) 40% 6px/22px 22px no-repeat,
    var(--petal-b) 58% 12px/20px 20px no-repeat,
    var(--petal-c) 74% 25px/24px 24px no-repeat,
    var(--petal-a) 93% 33px/20px 20px no-repeat,
    radial-gradient(150px 74px at 104% 108%, rgba(255,206,200,.42), rgba(255,206,200,0) 72%),
    linear-gradient(90deg,#FFFBFE 0%,#FFF6F9 14%,#FFF6F9 46%,#FFF4F4 66%,#FFEEED 80%,#FFE8E6 100%);
  box-shadow:0 2px 8px rgba(226,180,178,.16)}
.home-marquee-copy{position:relative;flex:1;min-width:0;height:38px}
/* 换条动画：对录像 88b906b5 逐帧看（f_177→f_182，30fps）——上一条向上滑出、下一条从下面滑进来，
   整段位移只有约 5 帧 ≈ 0.17s。旧实现写 0.42s，和录像并排播就是「慢半拍」。取 0.2s。 */
.home-marquee-msg{position:absolute;left:0;right:0;top:0;height:38px;display:flex;align-items:center;gap:6px;
  opacity:0;transform:translateY(100%);transition:opacity .2s ease,transform .2s ease}
.home-marquee-msg.on{opacity:1;transform:none}
.home-marquee-msg.out{opacity:0;transform:translateY(-100%)}
/* 播报条有**两套版式**，对照录像 88b906b5 的两条真实播报逐帧量（卡 = css x15~344.4 / y156.9~206.25）：
   · 房间送礼（f_0264「＋❤峰生+ 在 语音房 送给🎤静 21个[给你拍拍]，赶快去围观吧👏👏👏」）——
     方框头像 40、左沿 24（卡内缩 9）、文字左沿 70（缝 6）；胶囊 83.75x17.5。
   · 个人/祝福（f_0000「夕阳细雨 送给缘聚12个月伯爵，一起来祝福他们吧。」）——
     圆形头像 **26**、左沿 30.6（卡内缩 15.6）、文字左沿 76.25（缝 19.65）；胶囊更小 73.75x15。
   上一轮只做了「房间送礼」那套，**还把它套给了所有消息**，于是个人类播报也顶着一枚 40 方头像，
   和真机并排看就是「左边一大块、文字贴着脸」。根因在量法：那一轮量 f150 时把「圆头像 + 头条角标」的
   **并集**（x25~64.4 / y162.5~202.5，正好 39.4x40）当成了头像本身，才得出「40x40 圆角方、几乎顶满卡高」。 */
.home-marquee-msg[data-style="user"]{gap:19.65px}
/* 「上电视」类播报（带房间场景）左侧不是头像，是那枚电视贴纸：
   对 f0198 / f0220 / f0242 三帧平均后量，css 左沿 18.3、宽 49、高 44（含外发光），
   文字左沿 76.7 —— 即「卡内缩 2.3 + 贴纸 49 + 缝 9.4」。后端没有这枚素材，用同形内联 SVG 画。 */
.hm-tv{flex:none;width:46px;height:44px;margin-left:4px;margin-bottom:-2px;pointer-events:none;
  background:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 46 44'%3E%3Cdefs%3E%3ClinearGradient id='f' x1='0' y1='0' x2='0' y2='1'%3E%3Cstop offset='0' stop-color='%23F4867E'/%3E%3Cstop offset='1' stop-color='%23E0506E'/%3E%3C/linearGradient%3E%3ClinearGradient id='s' x1='0' y1='0' x2='0' y2='1'%3E%3Cstop offset='0' stop-color='%23F4AEF6'/%3E%3Cstop offset='1' stop-color='%23DD8BD3'/%3E%3C/linearGradient%3E%3C/defs%3E%3Crect x='1.5' y='2' width='43' height='40' rx='13' fill='%23FFD7E3' opacity='.5'/%3E%3Cpath d='M15 9 11.5 3.6' stroke='%23FFC93D' stroke-width='2.8' stroke-linecap='round'/%3E%3Cpath d='M31 9 34.5 3.6' stroke='%23FFC93D' stroke-width='2.8' stroke-linecap='round'/%3E%3Crect x='7.5' y='8.4' width='31' height='26.4' rx='7.5' fill='url(%23f)'/%3E%3Crect x='9.7' y='10.6' width='26.6' height='22' rx='5.6' fill='url(%23s)'/%3E%3Cpath d='M19.6 15.6c0-1.15 1.25-1.86 2.24-1.27l8 4.9c.94.58.94 1.94 0 2.52l-8 4.9c-.99.6-2.24-.11-2.24-1.27z' fill='%23fff' opacity='.94'/%3E%3C/svg%3E") center/contain no-repeat}
.home-marquee-msg[data-style="room"]{gap:10.7px}

/* 「头条」类播报（无房间场景）左侧才是送礼人本人头像：圆 26、左沿 30.6（卡内缩 14.6）、
   中心 y175.6 —— 比卡心 182.2 高 6.6，因为真机是「头像 + 头条角标」作为一组居中，头像要上抬 12.8/2。
   上一版还在头像外圈画了 1.5px 粉描边（box-shadow 0 0 0 1.5px #FFD8E8）：对 88b906b5 f0000 的
   头像左沿逐点取色（x30.5 #FDFBFE → x31.2 直接进头像像素），真机**没有这一圈**，卡底色一路铺到头像边上。
   并排看那圈粉就是「贴纸感」的来源，去掉。 */
.hm-av{flex:none;width:26px;height:26px;margin-left:14.6px;margin-bottom:12.8px;border-radius:50%;
  object-fit:cover;background:#F7EAF3}
/* 「头条」角标：真机 f0154 / f0176 独立重量（两帧一致）—— css x26.25~64.38 / y190~200，即 38.75 x 10.62，
   左沿 10（卡内缩）、下沿离消息盒底 1；金→橙→洋红渐变 + 白字「头条」（10px/600）+ 右端深红圆点，
   外面还压着一圈 1px 白描边（上一版没有，并排看角标像块脏补丁）。房间类 f0198 没有这枚角标。
   角标是纯装饰位（后端没有对应字段），live.js 只给首条头条类播报加，避免整条播报每屏都挂一枚。 */
.hm-tag{position:absolute;left:10px;top:27px;height:10.6px;display:flex;align-items:center;gap:2px;
  padding:0 6.5px;border-radius:5.3px;color:#fff;font-size:10px;font-weight:600;line-height:10.6px;
  white-space:nowrap;background:linear-gradient(90deg,#FFD96A 0%,#FFA64D 48%,#F04C8C 100%);
  box-shadow:0 0 0 1px rgba(255,255,255,.85),0 1px 2px rgba(240,110,90,.26)}
.hm-tag::after{content:"";flex:none;width:4px;height:4px;border-radius:50%;background:#E0313F;
  box-shadow:inset 0 0 0 1px rgba(255,255,255,.7)}
/* 正文 13/19.3：真机逐字量（「夕阳细雨」字距 12.5~13.1css、墨迹高 11.2~11.9css）=> 字号 13；
   行高按两行墨迹顶差 f_0000 = 19.35css（行一 166.25、行二 185.6）取 19.3。
   正文色：拿「同城」当标尺（两边都是同一档深灰）——录像里它的墨芯是 #2E2E2F，我们本机渲染是 #1F1E24，
   说明录像把墨压浅了约 15 级。按这个偏移回推 f_0000 正文最暗 12% 的中位数 #7B7375 → 真值 ≈ #6C6466。
   上一版写 #56545B 比真值深 22 级，并排看整条播报「又黑又挤」，这就是用户说的「一点间隙都没有」。 */
.hm-text{flex:1;min-width:0;padding-right:82px;box-sizing:border-box;font-size:13px;line-height:38px;color:#6C6466;overflow:hidden;
  display:block;white-space:nowrap;text-overflow:ellipsis}
.hm-text b{font-weight:400;color:#7E6090}
/* 房间类播报在送礼人/收礼人名字前各挂一枚小方头像（bxh3 f_0001「▣流年送给▣岁月」、
   88b906b5 f0195「▣＋❤峰生+ 在 语音房 送给▣🎤静」两段录像一致）。按 f_0001（1.2px/css）量：
   13.4 x 14.2 css、圆角 ≈3、与名字的间距 ≈2.5、下沿正好压在同一基线上（inline-block 默认基线对齐即可）。
   头条类**没有**这枚小头像（88b906b5 f0000 的「夕阳细雨」直接起笔）—— 左侧挂的已经是本人头像了。 */
.hm-nava{display:inline-block;width:13px;height:13px;border-radius:3px;object-fit:cover;
  background:#EDE6EB;margin-right:2.5px}
/* 送礼人昵称与后面那串文案之间的空档：真机 f_0000 量到「雨」右沿 126.2 → 「送」左沿 135.0 = **8.1**；
   我们原来只是一个半角空格（≈4.7），并排看就是「名字和正文黏在一起」。补 3.5 的空档对齐真机。 */
.hm-text > b:first-child{margin-right:3.5px}
.hm-text u{text-decoration:none;color:#3E8AD8}
.hm-text em{font-style:normal;font-weight:600;color:#D8427A}
.hm-idle{color:#A9A3AF;margin-left:54px}
/* 「如何上电视 ›」浮在第二行右侧，不占文字宽度。逐帧重量的结果（卡右 345 / 卡底 207）：
   f_0210 同款胶囊 css x255~339.4 / y185~201.9（宽 85 高 17.5）→ 右内缩 5.6、下内缩 5.1、字号 11。
   取色是 #FF537E→#FF8C64（比「锁屏中 Ns」那款 #FE77B1→#FEB17D 更饱和）。
   **定位基点从卡片改成「每条消息」**：录像 f_174→f_182 那次换条里，胶囊是跟着自己那条消息一起上滑的，
   而且两条消息的胶囊文案本来就不同（祝福类=「锁屏中 Ns」，房间送礼=「如何上电视 ›」）——所以它是消息的一部分，
   不是卡上的固定标签。消息盒 = 卡内容区的 flex 子项（高 38、上下各留 5），所以右内缩写成 -5（= 卡内缩 5）、
   bottom 0（= 卡底内缩 5）。几何最终仍按「胶囊右内缩 5.6 / 下内缩 5.1」核对（见文档 §16.9）。 */
/* 胶囊内边距**左右不等**：真机把文案整体推到靠右，左边留一大块。
   量法（88b906b5 f0000「锁屏中6s」）：胶囊 x263.75~339.4，白字起笔 x279.5、收笔 x333。左右内缩 = 15.75 / 6.4。
   另一款「如何上电视 ›」在同一段录像里也是 14.5 / 3.0（见文档 §16.9 的逐帧重量）——两款一致，不是量错。
   上一版统一写 padding:0 12px，胶囊里那串字被顶在正中间、两边只剩 12，"又粗又居中" 是「看着挤」的主因。
   字号同时从 11/11.5 提到 12/13 并按录像复核字重：真机是 400~500，我们原来是 600，白字糊成一团。
   「锁屏中6s」里数字与「中」是紧贴的（f0000 白字「中」右沿 x317 与「6」左沿 x317.5 相接），文案里不留空格。 */
.home-marquee-more{position:absolute;right:-6.2px;bottom:-2.4px;height:17.5px;display:flex;align-items:center;
  background:linear-gradient(90deg,#FF5380,#FF8C64);color:#fff;border-radius:8.75px;padding:0 7px 0 14.5px;
  font-size:11px;font-weight:400;white-space:nowrap;cursor:pointer;box-shadow:0 2px 6px rgba(255,120,150,.3)}
.home-marquee-msg[data-style="user"] .home-marquee-more{right:-5px;bottom:1.5px;height:17.5px;
  border-radius:8.75px;padding:0 15px;font-size:11px;font-weight:400;background:linear-gradient(90deg,#FF6FAE,#FFAE7C)}
.more-features{padding:12px}.mf-hero{padding:18px 16px;border-radius:12px;background:linear-gradient(135deg,#FFECF3,#F3EDFF);display:flex;flex-direction:column;gap:5px;color:#573B54}.mf-hero b{font-size:17px}.mf-hero span{font-size:12px;color:#897889}.mf-grid{display:grid;grid-template-columns:repeat(5,minmax(0,1fr));gap:18px 8px;margin:20px 2px 8px}.mf-grid button{min-width:0;height:72px;background:transparent;display:flex;flex-direction:column;align-items:center;justify-content:flex-start;color:#35323A}.mf-grid .ico{width:29px;height:29px;padding:7px;border-radius:12px;background:#FFF0F5;color:#FF5A8D;box-sizing:content-box}.mf-grid button:nth-child(3n) .ico{background:#FFF3E5;color:#E99A38}.mf-grid button:nth-child(3n + 2) .ico{background:#F1ECFF;color:#8260DE}.mf-grid span{font-size:11px;font-weight:500;line-height:18px;margin-top:4px;white-space:nowrap;max-width:100%;overflow:hidden;text-overflow:ellipsis}

/* 编辑资料：真机截图中的分区长表单。 */
.ep-body{padding:12px 12px 28px}.navbar .ep-save{height:28px;padding:0 13px;border-radius:14px;background:var(--brand-grad);color:#fff;font-size:12px;font-weight:700}.ep-head{padding:14px 0 10px;background:#fff;display:flex;flex-direction:column;align-items:center}.ep-avatar{width:80px;height:80px;border-radius:50%;object-fit:cover;background:#F2EFF1;cursor:zoom-in}.ep-head button{margin-top:8px;color:#77717A;font-size:12px}.ep-percent{margin-top:7px;color:#FF4C81;font-size:13px}.ep-card{margin:12px 0 0;border-radius:10px;background:#fff;padding:0 16px}.ep-card h3{margin:0;padding:15px 0 9px;font-size:15px;color:#2D2930}.ep-row{min-height:48px;display:flex;align-items:center;gap:8px;border-top:1px solid #F1EFF1;cursor:pointer}.ep-row>span{font-size:14px;color:#4B4650;flex:none}.ep-row>b{margin-left:auto;max-width:60%;font-size:13px;color:#8E8891;font-weight:400;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;text-align:right}.ep-row>i{font-size:22px;font-style:normal;color:#C9C3CB;line-height:1}.ep-row[data-deep] b{color:#F15C6E}.ep-intro{min-height:84px;padding:10px 0 16px;color:#8E8891;font-size:13px;line-height:1.65;cursor:pointer}.ep-chips{padding:3px 0 15px;display:flex;gap:7px;flex-wrap:wrap;min-height:39px;cursor:pointer}.ep-chips span{padding:5px 10px;border-radius:14px;background:#FFF0F5;color:#E95A88;font-size:12px}.ep-photo-grid{display:flex;gap:8px;padding:2px 0 12px;overflow-x:auto}.ep-photo-grid>.ep-photo{position:relative;width:64px;height:64px;border-radius:7px;overflow:hidden;background:#F2EFF1;flex:none}.ep-photo-grid .ep-photo img{display:block;width:100%;height:100%;object-fit:cover;cursor:zoom-in}
.ep-photo-up{position:absolute;inset:0;display:flex;align-items:center;justify-content:center;background:rgba(255,255,255,.55);color:#E95A88;font-size:11px}.ep-photo-grid>button{width:64px;height:64px;border:1px dashed #F4A6BE;background:#FFF8FA;color:#EF6E97;font-size:23px;border-radius:7px;flex:none;display:flex;flex-direction:column;align-items:center;justify-content:center}.ep-photo-grid small{font-size:10px}.ep-photo-del{position:absolute;right:3px;top:3px;width:21px!important;height:21px!important;padding:0;border:1px solid rgba(255,255,255,.8)!important;border-radius:50%!important;background:rgba(30,25,32,.62)!important;color:#fff!important;font-size:18px!important;line-height:18px!important;display:flex!important;align-items:center;justify-content:center!important;box-shadow:0 2px 6px rgba(0,0,0,.18)}.ep-img-view{position:fixed;inset:0;z-index:1200;display:flex;align-items:center;justify-content:center;padding:36px 18px;box-sizing:border-box;background:rgba(12,9,14,.92)}.ep-img-view img{display:block;max-width:100%;max-height:100%;object-fit:contain;border-radius:14px;box-shadow:0 18px 50px rgba(0,0,0,.38)}.ep-img-view>button{position:absolute;right:15px;top:calc(12px + env(safe-area-inset-top,0px));width:38px;height:38px;border-radius:50%;background:rgba(255,255,255,.16);color:#fff;font-size:27px;line-height:36px;text-align:center}.ep-img-view small{position:absolute;left:0;right:0;bottom:calc(20px + env(safe-area-inset-bottom,0px));text-align:center;color:rgba(255,255,255,.7);font-size:11px}.ep-sheet-mask{position:fixed;inset:0;z-index:999;background:rgba(20,15,20,.42);display:flex;align-items:flex-end}.ep-sheet{width:100%;max-height:72vh;overflow:auto;background:#fff;border-radius:16px 16px 0 0;padding:0 16px calc(16px + env(safe-area-inset-bottom,0px));color:var(--t1)}.ep-sheet header{height:54px;display:flex;align-items:center;justify-content:space-between}.ep-sheet header b{font-size:17px}.ep-sheet header button{font-size:13px;color:#8E8891}.ep-sheet-options{display:flex;gap:9px;flex-wrap:wrap;padding:4px 0 16px}.ep-sheet-options button{padding:8px 12px;border-radius:17px;background:#F6F4F6;color:#5C5660;font-size:13px}.ep-sheet-options button.on{background:#FFF0F5;color:#ED5486;box-shadow:inset 0 0 0 1px #FF9DB9}.ep-sheet-ok{flex:none;height:48px;width:100%;margin:6px 0 2px;border-radius:24px;background:linear-gradient(103deg,#FF5E5B 0%,#FF4C81 52%,#C94DF0 100%);color:#fff;font-size:16px;font-weight:700;letter-spacing:.5px;box-shadow:0 10px 24px rgba(255,76,129,.34),inset 0 1px 0 rgba(255,255,255,.45)}.ep-sheet-ok:active{transform:translateY(1px);box-shadow:0 4px 12px rgba(255,76,129,.30)}.ep-input{width:100%;height:44px;padding:0 11px;border:1px solid #E8E3E7;border-radius:8px;font-size:15px;margin:4px 0 14px;color:#37323A}
/* 我的标签：分类面板（8 组词表，超长词表整块可滚，头和确定键固定） */
.tag-sheet{display:flex;flex-direction:column;max-height:74vh;overflow:hidden}
.tag-hint{padding:0 0 8px;font-size:12px;color:#B0AAB3}
.tag-hint span{color:#ED5486}
.tag-body{flex:1;min-height:0;overflow-y:auto;-webkit-overflow-scrolling:touch}
.tag-grp{margin:0 0 12px}
.tag-grp h4{margin:0 0 8px;font-size:12px;color:#B0AAB3;font-weight:400}
.tag-row{display:flex;gap:8px;flex-wrap:wrap}
.tag-row button{padding:7px 11px;border-radius:15px;background:#F6F4F6;color:#5C5660;font-size:12.5px}
.tag-row button.on{background:#FFF0F5;color:#ED5486;box-shadow:inset 0 0 0 1px #FF9DB9}
/* 兴趣爱好滚轮：已选那排 + 「添加」（滚轮本身复用 .wp-* 那套） */
.ep-picked{display:flex;gap:7px;flex-wrap:wrap;padding:0 0 10px;min-height:26px}
.ep-pk{padding:5px 10px;border-radius:13px;background:#FFF0F5;color:#ED5486;font-size:12.5px}
.ep-pk-none{font-size:12.5px;color:#B0AAB3;line-height:26px}
.ep-add{width:100%;height:40px;margin:2px 0 0;border-radius:20px;background:#F6F4F6;color:#ED5486;font-size:14px;font-weight:600}
/* 输入类弹层：贴顶卡片（不是贴底）—— 安卓 WebView 键盘弹起时 layout/visual viewport 都不缩，
   JS 量不到键盘，贴底的输入框会被键盘整个盖住。放屏幕上方，键盘够不到。 */

/* ============================ 发布动态（照用户给的参考图重做：正文+字数 / 九格素材 / 话题 / 位置 / 可见范围 / 底部悬浮发布）
   原先这一屏的骨架里写死了三张示例图 + 一句假正文，进屏第一帧就会闪出来（用户反馈「最开始闪一下女的照片」），
   骨架已改成空壳，这里只留真数据渲染用的样式。 */
.pub2-sheet{background:#fff;border-radius:18px 18px 0 0;padding:0}
.pub2-nav{height:52px;display:flex;align-items:center;padding:0 16px;border-bottom:1px solid #F1EFF1}
.pub2-nav b{flex:1;text-align:center;font-size:17px;color:#2D2930}
.pub2-cancel{font-size:15px;color:#6B6570;cursor:pointer}
.pub2-navsub{height:32px;padding:0 16px;border-radius:16px;background:var(--brand-grad);color:#fff;
  font-size:14px;font-weight:600;box-shadow:0 4px 12px rgba(255,76,129,.28)}
.pub2-navsub[disabled]{background:#E7E4E7;color:#B0AAB3;box-shadow:none}
.pub2-body{padding:0 0 12px}
.pub2-text{padding:14px 16px 6px}
.pub2-ta{width:100%;min-height:120px;border:0;outline:none;resize:none;font-size:15px;line-height:1.7;
  color:#2D2930;font-family:inherit;background:none;display:block}
.pub2-ta::placeholder{color:#B0AAB3}
.pub2-count{text-align:right;font-size:12px;color:#B0AAB3;margin-top:4px}
.pub2-grid{display:grid;grid-template-columns:repeat(4,1fr);gap:6px;padding:10px 16px 14px}
.pub2-cell{position:relative;padding-top:100%;border-radius:8px;overflow:hidden;background:#F6F4F6}
.pub2-cell>img,.pub2-cell>video{position:absolute;inset:0;width:100%;height:100%;object-fit:cover;display:block}
.pub2-up{position:absolute;left:5px;bottom:5px;padding:2px 6px;border-radius:8px;background:rgba(0,0,0,.46);color:#fff;font-size:10px;line-height:1.4}
.pub2-del{position:absolute;right:3px;top:3px;width:19px;height:19px;border-radius:50%;
  background:rgba(0,0,0,.55);color:#fff;display:flex;align-items:center;justify-content:center;cursor:pointer}
.pub2-del svg{width:9px;height:9px;stroke:#fff;fill:none;stroke-width:2.4}
.pub2-vtag{position:absolute;left:3px;bottom:3px;padding:1px 5px;border-radius:8px;background:rgba(0,0,0,.5);
  color:#fff;font-size:9.5px}
.pub2-add{background:#F6F4F6;color:#A9A3AC;display:flex;flex-direction:column;align-items:center;
  justify-content:center;gap:1px;cursor:pointer}
.pub2-add>*{position:absolute;left:0;right:0;text-align:center}
.pub2-plus{top:16%;font-size:22px;line-height:1;color:#C4BEC7}
.pub2-add b{top:44%;font-size:13px;color:#8E8891;font-weight:500}
.pub2-add small:nth-of-type(1){top:62%;font-size:10.5px}
.pub2-add small:nth-of-type(2){top:76%;font-size:10.5px}
.pub2-sec{border-top:1px solid #F1EFF1;padding:14px 16px 4px}
.pub2-h{font-size:16px;font-weight:600;color:#2D2930}
.pub2-h2{font-size:15px;font-weight:600;color:#2D2930;margin:16px 0 2px}
.pub2-trow{display:flex;align-items:center;gap:10px;margin:10px 0 12px}
.pub2-hash{width:34px;height:34px;flex:none;border:1.4px solid #2D2930;border-radius:8px;display:flex;
  align-items:center;justify-content:center;font-size:19px;font-weight:700;color:#2D2930}
.pub2-tin{flex:1;min-width:0;height:36px;border:0;border-radius:18px;background:#F6F4F6;
  padding:0 14px;font-size:14px;color:#2D2930;font-family:inherit;outline:none}
.pub2-tin::placeholder{color:#B0AAB3}
.pub2-tadd{flex:none;height:36px;padding:0 16px;border-radius:18px;background:#F6F4F6;color:#6B6570;font-size:14px}
.pub2-picked{display:flex;gap:8px;flex-wrap:wrap;min-height:24px;align-items:center}
.pub2-pick-none{font-size:12px;color:#B0AAB3}
.pub2-cloud{display:flex;gap:8px;flex-wrap:wrap;padding:10px 0 6px}
.pub2-cloud .chip{background:#F6F4F6;color:#6B6570;font-size:13px;padding:8px 14px;border-radius:16px}
.pub2-cloud .chip.on{background:#FFF0F5;color:#ED5486;box-shadow:inset 0 0 0 1px #FF9DB9}
.pub2-picked .chip i{font-style:normal;margin-left:2px;color:#ED5486}
.pub2-rows{border-top:1px solid #F1EFF1;margin-top:6px}
.pub2-row{height:54px;display:flex;align-items:center;gap:10px;padding:0 16px;cursor:pointer;
  border-bottom:1px solid #F1EFF1}
.pub2-row img{width:19px;height:19px;flex:none;opacity:.85}
.pub2-row span{font-size:15px;color:#2D2930}
.pub2-row b{margin-left:auto;font-size:13.5px;color:#8E8891;font-weight:400;max-width:52%;
  overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.pub2-row i{font-style:normal;font-size:19px;color:#C9C3CB;line-height:1}
.pub2-foot{position:sticky;bottom:0;padding:10px 16px calc(12px + env(safe-area-inset-bottom,0px));
  background:linear-gradient(180deg,rgba(255,255,255,.7),#fff 34%)}
.pub2-submit{width:100%;height:46px;border-radius:23px;background:var(--brand-grad);color:#fff;
  font-size:16px;font-weight:700;letter-spacing:.5px;box-shadow:0 10px 22px rgba(255,76,129,.30)}
.pub2-submit[disabled]{background:#E7E4E7;color:#B0AAB3;box-shadow:none}

/* 作者编辑动态：复用发布器的完整表单，铺满当前屏幕，正文区自己滚动，底部保存按钮固定。 */
.fd-edit-layer{position:fixed;inset:0;z-index:760;background:#fff;display:flex;flex-direction:column}
.fd-edit-sheet{position:absolute;inset:0;border-radius:0;display:flex;flex-direction:column;overflow:hidden}
.fd-edit-sheet .pub2-body{flex:1;min-height:0;overflow-y:auto;-webkit-overflow-scrolling:touch}

/* 话题行（主发布页：# + 已选标签横向滚动 + 右侧添加按钮） */
.pub2-topicrow{display:flex;align-items:center;gap:10px;padding:14px 16px;border-top:1px solid #F1EFF1}
.pub2-hash-sm{font-size:18px;font-weight:700;color:#FF6B35;flex:none;line-height:1}
.pub2-tagscroll{flex:1;display:flex;align-items:center;gap:6px;overflow-x:auto;
  scrollbar-width:none;-webkit-overflow-scrolling:touch;min-height:28px}
.pub2-tagscroll::-webkit-scrollbar{display:none}
.pub2-tag{flex:none;display:inline-flex;align-items:center;gap:4px;height:26px;padding:0 10px;
  border-radius:13px;background:#FFF3EC;color:#FF6B35;font-size:12.5px;white-space:nowrap}
.pub2-tag i{font-style:normal;font-size:14px;line-height:1;color:#FF6B35;opacity:.7}
.pub2-addbtn{flex:none;height:28px;padding:0 14px;border-radius:14px;border:1px solid #FF6B35;
  background:#fff;color:#FF6B35;font-size:13px;font-weight:600}

/* 话题选择底部弹窗 */
.topic-sheet{padding:0 16px calc(16px + env(safe-area-inset-bottom,0px))}
.ts-handle{width:36px;height:4px;border-radius:2px;background:#E0DCE0;margin:8px auto 14px}
.ts-searchrow{display:flex;align-items:center;gap:8px;background:#F5F3F5;border-radius:22px;
  padding:0 6px 0 14px;height:44px;margin-bottom:18px}
.ts-hash{font-size:17px;font-weight:700;color:#FF6B35;flex:none}
.ts-input{flex:1;min-width:0;border:0;background:transparent;font-size:14.5px;outline:none;
  color:#2D2930;font-family:inherit;height:44px}
.ts-input::placeholder{color:#B0AAB3}
.ts-add{flex:none;color:#FF6B35;font-size:15px;font-weight:600;padding:0 8px}
.ts-sec{font-size:15px;font-weight:600;color:#2D2930;margin:0 0 10px}
.ts-picked{display:flex;flex-wrap:wrap;gap:8px;margin-bottom:18px;min-height:28px}
.ts-tag-on{display:inline-flex;align-items:center;gap:4px;height:32px;padding:0 12px;
  border-radius:16px;border:1px solid #FF6B35;background:#fff;color:#FF6B35;font-size:13.5px}
.ts-tag-on i{font-style:normal;font-size:16px;line-height:1;opacity:.6}
.ts-rec{display:flex;flex-wrap:wrap;gap:8px;padding-bottom:20px}
.ts-tag{display:inline-flex;align-items:center;height:34px;padding:0 16px;border-radius:17px;
  background:#F5F3F5;color:#4B4650;font-size:13.5px;cursor:pointer}
.ts-tag.on{border:1px solid #FF6B35;background:#fff;color:#FF6B35}
.ts-tag.dis{opacity:.4;pointer-events:none}
/* 位置弹层：真高德底图 + 真周边地点 + 省市区街道四级滚轮 */
.loc-sheet .loc-body{max-height:62vh;overflow-y:auto}
.loc-map{position:relative;height:168px;background:#DCE7F5;overflow:hidden}
.loc-map img{width:100%;height:100%;object-fit:cover;display:block}
.loc-pin{position:absolute;left:50%;top:50%;transform:translate(-50%,-108%);width:30px;height:30px;
  border-radius:50%;background:var(--brand-grad);display:flex;align-items:center;justify-content:center;
  box-shadow:0 6px 14px rgba(255,76,129,.42)}
.loc-pin img{width:15px;height:15px;object-fit:contain}
.loc-addr{padding:10px 16px;font-size:13.5px;color:#2D2930;line-height:1.6;border-bottom:1px solid #F1EFF1}
.loc-addr small{display:block;font-size:11px;color:#B0AAB3;margin-top:2px}
.ep-mask-top{align-items:flex-start;padding:12vh 0 0}
.ep-dialog{width:calc(100% - 48px);margin:0 auto;background:#fff;border-radius:18px;padding:4px 18px 16px;
  box-shadow:0 14px 36px rgba(46,20,38,.24)}
.ep-dialog header{height:48px;display:flex;align-items:center;justify-content:center}
.ep-dialog header b{font-size:16px;color:#2D2930;font-weight:600}
.ep-dialog .ep-input{margin:2px 0 16px;border:1px solid #F3D7E0;background:#FFFBFD}
.ep-dialog .ep-input:focus{outline:none;border-color:#FF7FA8;box-shadow:0 0 0 3px rgba(255,127,168,.16)}
.ep-dialog-btns{display:flex;gap:10px}
.ep-ghost,.ep-primary{flex:1;height:44px;border-radius:22px;font-size:15px}
.ep-ghost{background:#F6F4F6;color:#6B6570;font-weight:500}
.ep-primary{background:var(--brand-grad);color:#fff;font-weight:700;line-height:44px;letter-spacing:.5px;
  box-shadow:0 8px 20px rgba(255,76,129,.30)}
.ep-primary:active{transform:translateY(1px);box-shadow:0 4px 12px rgba(255,76,129,.26)}
/* 其余带输入框的弹层（职业搜索）聚焦时抬头，键盘够不到 */
.ep-sheet-mask.ep-mask-kb{align-items:flex-start;padding-top:9vh}
.ep-sheet-mask.ep-mask-kb .ep-sheet{max-height:58vh}
.hbar{flex:none;display:flex;align-items:baseline;gap:17px;padding:12px 16px 3px 17px}
.hbar .htab{font-size:15px;color:#7C7B82;line-height:24px;cursor:pointer}
.hbar .htab.on{font-size:17px;font-weight:700;color:#1F1E24}
.hbar .hfun{margin-left:auto;align-self:center;display:flex;color:#6E6D74;cursor:pointer}
.hbar .hfun .ico{width:18px;height:18px}
/* .hauth（首页粉色认证条）已删除：录像里首页没有这条，见 js/screens.js 里的说明。 */
.hmain{flex:1;min-height:0;position:relative}
/* 行卡按 f_0001 量：卡宽 336（左右各 12）、卡高 85、卡间距 19（行距 104），白底圆角 10；
   头像 72 圆角方块、卡内左边距 8；文字左起 102；昵称 15/700、信息行与签名 12。 */
/* 上留 9.5 + .hbar 上留 12：两个数一起把首卡顶钉在 css y252.5（60347fd1 f_0000~f_0008 逐帧量到的
   真机首行头像顶 y262.5 —— 卡顶 = 头像顶 - 卡内上留 10）。改任一个都要两个一起动，否则首行会整体偏移。 */
.hlist{height:100%;overflow-y:auto;padding:9.5px 12px 14px;-webkit-overflow-scrolling:touch}
.hlist::-webkit-scrollbar{width:0;height:0}
/* 列表项按真机 f_0001 逐像素量：行高 112、圆角方头像 78、右侧「HI 圆形按钮 + 搭讪文字」。 */
.hr{height:90px;box-sizing:border-box;display:flex;align-items:center;gap:9.4px;margin:0 0 12.5px;padding:0 10px 0 9.5px;background:#fff;border:none;border-radius:10px;cursor:pointer}
.hr-av{position:relative;flex:none;width:70px;height:70px;border-radius:9.5px;overflow:hidden;background:var(--line-3)}
.hr-av>img{width:100%;height:100%;object-fit:cover;display:block}
.hr-new{position:absolute;left:0;top:0;height:15.5px;display:flex;align-items:center;padding:0 4.4px;border-radius:0 4px 4px 4px;background:linear-gradient(90deg,#F6537E,#FF9A5C);color:#fff;font-size:9px;line-height:1;font-weight:500;pointer-events:none}
.hr-main{flex:1;min-width:0;display:flex;flex-direction:column;gap:5px;padding-top:9px}
.hr-nm{display:flex;align-items:center;gap:6px;font-size:14px;line-height:19px;font-weight:700;color:#26242A}
.hr-nm .nick{max-width:7.5em;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.hr-real{display:inline-flex;align-items:center;gap:2px;padding:0 5px 0 1px;border-radius:9px;background:#EFFCF7;box-shadow:inset 0 0 0 1px rgba(18,179,124,.32);color:#12B37C;font-size:10px;line-height:15px;font-weight:500;flex:none}
.hr-real .ico{width:13px;height:13px;flex:none}
.hr-info{display:flex;align-items:center;flex-wrap:nowrap;gap:0 4.5px;font-size:12px;line-height:17px;color:#5A5962;white-space:nowrap;overflow:hidden}.hr-info i{font-style:normal;font-size:11px;color:#A2A1AB}
.hr-sig{margin-top:0.9px;font-size:11px;line-height:16px;color:#9C9BA3;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
/* 第三行另一形态：**语音介绍条**（真机 f0154 第 4 行「美丽的天空」）。
   逐点量（尺子同 §二十一：录像 576x1280 = 360x800css，1css = 1.6 帧px）：
     胶囊 x101.25~181.88 / y625.62~645.0（81.25 x 19.4，全圆角）；卡顶 562.5 → 卡内 y+63.12~+82.5；
     白底 + 1px #E7E2E4 描边；左边距 6.6 起 13 根柱子（柱宽 1.9 / 缝 1.8 / 高 1.9~12.5），
     末柱后 6.2 起「13s」（墨迹 x160.75~175.75 w15.62，h8.12 → 字号 11）。
   柱子高度与秒数都是**后端实测**（voiceWave / voiceSeconds，见 docs/14 §二十二），没有数据就整条不画。
   上行负外边距 1.25 是让这条 19.4 高的胶囊在版式里只占「个性签名那 16.9 的位」，
   相对位移 +1.5 把胶囊中心对齐真机的卡内 +72.8。 */
.hr-voice{display:inline-flex;align-items:center;gap:6.2px;height:19.4px;box-sizing:border-box;
  margin:-1.25px 0;padding:0 7.6px 0 6.6px;border:1px solid #E7E2E4;border-radius:9.7px;background:#fff;
  position:relative;top:1.5px;align-self:flex-start;flex:none;cursor:pointer}
.hr-wv{display:flex;align-items:center;gap:2.2px;height:13px}
.hr-wv i{width:1.55px;border-radius:0.78px;flex:none}
.hr-voice b{font-size:11px;line-height:1;font-weight:500;color:#D46590;white-space:nowrap}
.hr-voice.on{border-color:#F7BED1;background:#FFF7FA}
.hr-act{position:relative;flex:none;width:40px;display:flex;flex-direction:column;align-items:center;gap:3px;margin-top:8.24px;cursor:pointer}
.hr-hi{position:relative;width:22.5px;height:22.5px;display:flex;align-items:center;justify-content:center}
.hr-hi .hr-hi-bub{position:absolute;inset:0;width:100%;height:100%;overflow:visible}
.hr-hi .hr-hi-t{position:relative;font-size:10px;line-height:1;font-weight:700;font-style:italic;background:linear-gradient(90deg,#FF7A5C,#FF5B92);-webkit-background-clip:text;background-clip:text;-webkit-text-fill-color:transparent;color:#FF5B92}
.hr-chat-ic{width:22.5px;height:22.5px;border-radius:50%;display:flex;align-items:center;justify-content:center;background:#FFF1F6;color:#FF5B92}
.hr-chat-ic .ico{width:14px;height:14px}
.hr-hi-tip{font-size:12.5px;line-height:18px;color:#4C4C50;white-space:nowrap}
.hr-gift-art{position:absolute;top:-7px;left:50%;transform:translateX(-50%);width:46px;height:46px;background-position:center;background-repeat:no-repeat;background-size:contain;pointer-events:none}
.hr-gift-tag{position:absolute;top:16px;left:50%;transform:translateX(-50%);background:linear-gradient(90deg,#FF9A3D,#FF6A3D);color:#fff;font-size:10px;line-height:15px;padding:0 5px;border-radius:8px;white-space:nowrap}
.hlist .hempty{padding:46px 24px;text-align:center;color:var(--t3);font-size:var(--fs-13);line-height:1.7}
.hlist .hempty img{width:54px;margin:0 auto 10px;opacity:.5}

.fate-mask{position:absolute;inset:0;z-index:50;background:rgba(35,20,29,.48);display:flex;align-items:center;justify-content:center;padding:22px;backdrop-filter:blur(2px)}
.fate-modal{position:relative;width:min(300px,100%);background:linear-gradient(180deg,#FFF7FA 0,#fff 45%);border-radius:20px;padding:20px;box-sizing:border-box;box-shadow:0 14px 36px rgba(0,0,0,.26);text-align:center}
.fate-close{position:absolute;top:8px;right:8px;width:28px;height:28px;background:transparent;color:#B5AAB0;display:flex;align-items:center;justify-content:center}.fate-close .ico{width:16px;height:16px}
.fate-crown{height:24px;color:#C76CFF;font-size:24px;line-height:24px;background:linear-gradient(90deg,#FF6B9D,#9E4CFF);-webkit-background-clip:text;background-clip:text;-webkit-text-fill-color:transparent}.fate-crown span{font-size:12px;vertical-align:top;margin-left:3px}.fate-title{font-size:18px;line-height:26px;background:linear-gradient(90deg,#FF4C81,#9E4CFF);-webkit-background-clip:text;background-clip:text;color:transparent;font-weight:700}.fate-modal p{font-size:12px;color:#A29AA1;margin:3px 0 15px}
.fate-grid{display:grid;grid-template-columns:repeat(3,1fr);gap:12px 8px}.fate-person{display:flex;flex-direction:column;align-items:center;gap:4px;font-size:10px;color:#58535A;min-width:0;cursor:pointer}.fate-person img{width:64px;height:64px;border-radius:50%;object-fit:cover;background:#EEE}.fate-person span{max-width:100%;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.uh-medals,.uh-gifts{display:flex;align-items:center;gap:10px;min-height:42px;padding:3px 0}.uh-medals img{width:38px;height:38px;object-fit:contain}.uh-gifts img{width:34px;height:34px;object-fit:contain}.uh-gifts span{font-size:13px;color:#7C7480}
.fate-enter{height:44px;width:100%;margin-top:17px;border-radius:22px;background:linear-gradient(90deg,#FF6B9D,#FF4C81);color:#fff;font-size:15px;font-weight:700}

/* 视频速配：录像 f_0180 的粉紫匹配等待页。 */
/* ============ 视频速配·匹配等待页（真机 f_0174~f_0186） ============
   量出来的东西：
   · 背景不是「上深下浅」的一根渐变：顶部左右角各有一团暖色（左上偏桃 #FEB3A8、右上偏洋红 #FF77A1），
     中间（css 350~600）几乎洗成 #FFE6EA 的白，底部再回到 #FFCBCF。
   · 正中一个**软白晕**（半径 ~42px 就化没了，没有硬边），里面是浅紫的吉祥物形状。
   · 头像是一团**大小不一（25~42px）**的圆，散布在 y 167~382 之间；部分头像上方有白底理由胶囊。
   · 底部只有「正在为你匹配...」（20px 粉）+「心动在靠近，有点耐心哦」（15px 灰紫）。
   本页与真机的**唯一已知偏差**：真机匹配是自动的、这一步没有任何按钮，我们必须留手动出口，
   所以把「换一个 / 开始速配 / 今日剩余次数」放在同一页最底部（`.match-actions`）。 */
.match-scene{position:absolute;inset:0;overflow:hidden;
  /* cdf950 速配录像使用的就是素材包 bg07，保留原始飞鸟、球体、剪影和底部彩带。 */
  background:url('../assets/bg07.webp') center top/cover no-repeat}
.voice-match-scene{background:url('../assets/bg07.webp') center top/cover no-repeat}
.voice-match-scene::before,.voice-match-scene::after{display:none}
.voice-match-scene .match-couple{display:none}
.voice-match-scene .match-actions{display:none}
.match-scene::before,.match-scene::after{content:'';position:absolute;border-radius:50%;filter:blur(22px)}
.match-scene::before{width:200px;height:200px;left:-120px;top:-100px;background:rgba(255,255,255,.45)}
/* 右上角真机是纯洋红，没有白团，所以 ::after 不画（保留规则位置，写清楚为什么没有）。 */
.match-scene::after{display:none}
.voice-match-scene::before,.voice-match-scene::after{display:none}
.match-scene .navbar{position:absolute;z-index:8;background:transparent;color:#fff;left:0;right:0;top:0}
.match-scene .nb-back img{filter:brightness(0) invert(1)}
.match-scene .nb-title{display:none}
/* 真机这一屏的「速配规则」胶囊在 y46~73（不是 navbar 纵向居中），所以让 navbar 顶部对齐。 */
.match-scene .navbar{align-items:flex-start;padding:36px 18px 0 10px}
.match-scene .nb-back{margin-left:-4px}
/* 真机这颗胶囊不是白底粉字，是「很淡的白底(约 12%) + 白字」(f_0182 量：胶囊内比旁边底色亮约 10)。 */
/* cdf950 f_0010 量：胶囊文字墨迹 y54.4~66.2（14px）、右缘 342；返回箭头墨迹 y44.4~59.4 / x15~23.1。
   navbar 顶距 36 是给箭头的，胶囊再单独下移 12。 */
.match-rules{display:inline-flex;align-items:center;height:26px;padding:0 9px;border-radius:13px;margin-top:12px;
  background:rgba(255,255,255,.14);color:#fff;font-size:14px;font-weight:600;cursor:pointer}
.match-stage{position:absolute;inset:0;z-index:2}
.match-cloud{position:absolute;inset:0}
.match-av{position:absolute;width:var(--sz,38px);height:var(--sz,38px);opacity:0;
  animation:match-pop .55s cubic-bezier(.2,1.4,.5,1) forwards;animation-delay:var(--d,0s)}
.match-av>img{width:100%;height:100%;border-radius:50%;object-fit:cover;display:block;
  border:1.5px solid rgba(255,255,255,.9);box-shadow:0 4px 12px rgba(150,80,120,.22);
  animation:match-float var(--fd,3.6s) ease-in-out infinite;animation-delay:var(--d,0s)}
/* 没有真实候选时的中性剪影圆（不拿陌生人照片充数，也不留白） */
.match-av.ghost>span{display:flex;align-items:center;justify-content:center;width:100%;height:100%;border-radius:50%;
  border:1.5px solid rgba(255,255,255,.9);box-shadow:0 4px 12px rgba(150,80,120,.14);
  background:rgba(255,255,255,.55);
  animation:match-float var(--fd,3.6s) ease-in-out infinite;animation-delay:var(--d,0s)}
.match-av.ghost>span .ico{display:block;width:54%;height:54%;color:rgba(188,150,175,.72)}
/* 没候选时的说明行**占 meta 那一行**（top 690），单行不换行：底部留给操作区，互不压字。 */
.match-reason{position:absolute;left:28px;right:28px;top:690px;text-align:center;
  font-size:12px;line-height:16px;color:rgba(120,92,104,.9);
  white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.match-av small{position:absolute;bottom:100%;left:50%;transform:translate(-50%,-2px);white-space:nowrap;
  padding:3px 7px;border-radius:5px;background:#fff;color:#6E6170;font-size:11px;line-height:1.2;
  box-shadow:0 2px 7px rgba(150,80,120,.16)}
.match-av.chip-r small{left:auto;right:-8px;transform:translate(0,-2px)}
.match-av.chip-l small{left:-8px;transform:translate(0,-2px)}
/* cdf950 f_0010 量：正中那团白晕很淡（晕内亮度 ~246，底 ~230，不是纯白），直径约 92；
   里面是「心 + 电话」两个实心紫图形，整体 40.6×37.5 @ (161.9,264.4)。 */
.match-core{position:absolute;left:180px;top:281.6px;width:92px;height:92px;transform:translate(-50%,-50%);
  background:radial-gradient(circle at 50% 50%,rgba(255,255,255,.60) 0 34%,rgba(255,255,255,.34) 58%,rgba(255,255,255,0) 82%)}
/* 素材库里没有原版吉祥物插画，用同形图标（心 + 电话）按其量到的位置/尺寸顶位：
   心 17x15 @ 相对晕盒 (32,32)，电话 26x48 @ (53,31)。
   真机那两团是**实心**紫，所以把描边加粗到 3.2 近似实心（同一个 IC 别处仍是细线）。 */
.match-core .ico{position:absolute;color:#A79BF6;animation:match-breathe 3.2s ease-in-out infinite}
.match-core .ico:nth-child(1){width:23px;height:23px;left:24.5px;top:25.4px}
.match-core .ico:nth-child(2){width:34px;height:56px;left:37.6px;top:22.2px}
.match-core .ico svg path{stroke-width:3.2;stroke-linejoin:round;fill:currentColor;stroke:currentColor}
/* 真机这里是一张半透明白色「双人剪影」照片，x116..205 / y417..500；素材库里没有同款，
   用 cpl-wedding 压白顶位（同首页三张推广卡的既有处理方式）。 */
.match-couple{display:none}
.match-couple img{width:100%;height:100%;object-fit:cover;display:block;filter:brightness(0) invert(1)}
.match-status{position:absolute;left:16px;right:16px;top:548px;text-align:center;color:#9E8F94;font-size:13px;line-height:1.2}
.match-status b{color:#EE6E93;font-weight:400}
/* 真机标题是 18px（不是 20px），且从左到右是「粉→橙」的渐变字，图标是视频机轮廓（同 IC('video')）。 */
.match-title{position:absolute;left:0;right:0;top:606.5px;text-align:center;font-size:19.5px;font-weight:700;letter-spacing:.4px;color:#F8636B}
.match-title .ico{width:24px;height:24px;vertical-align:-5px;margin-right:7px}
.match-title i{font-style:normal;background:linear-gradient(90deg,#F8475F,#FF8A5F);-webkit-background-clip:text;background-clip:text;-webkit-text-fill-color:transparent;color:transparent}
.match-sub{position:absolute;left:0;right:0;top:664px;text-align:center;font-size:14px;color:#9E8F94}
/* 语音速配这一屏真机底部只有「正在为你匹配.」+「心动在靠近，有点耐心哦」两行（cdf950 f_0004~f_0017 逐帧确认），
   所以 meta 行（匹配度/km）在语音速配里不显示。 */
.voice-match-scene .match-meta{display:none}
.match-meta{position:absolute;left:0;right:0;top:690px;text-align:center;font-size:12px;color:rgba(120,92,104,.9)}
/* 操作区贴底、单列纵排：不再用负 top 把「换一个」顶到画面中间去压状态字。
   真机这一屏没有按钮（自动匹配），这两个按钮是我们必须留的手动出口，所以只占最底部一条。 */
.match-actions{position:absolute;left:16px;right:16px;bottom:12px;display:none;flex-direction:column;align-items:center;gap:5px}
.match-scene.match-controls-open .match-actions{display:flex}
/* 面板展开时把 meta 行让出来（meta 在 690、面板占底部，否则两行会叠上）。 */
.match-scene.match-controls-open .match-meta{display:none}
/* 已匹配到人时手动展开的面板更高（多两行次数/盲盒），连副标一起让位；
   没候选时副标必须留着（真机等待态就有这一行），所以只在 has-cand 时隐藏。 */
.match-scene.match-controls-open.match-has-cand .match-sub{display:none}
/* 没候选时（操作面板展开、但还没有 match-has-cand）底部实际是四行：
   标题 / 副标 / 原因 / 按钮。真机那两行是钉在 360×800 画布上的 606.5 与 664，
   矮一点的屏（比如 393×699）上按钮会直接压在副标上、原因行还会被切掉一半
   （模拟器截图：换一个/开始速配 盖住「心动在靠近…」，原因只剩半行）。
   所以只在**这一态**里改成从底往上排，别用钉死的 top；有候选那一态照旧用真机的位置。 */
.match-scene.match-controls-open:not(.match-has-cand) .match-title{top:auto;bottom:118px}
.match-scene.match-controls-open:not(.match-has-cand) .match-sub{top:auto;bottom:90px}
.match-scene.match-controls-open:not(.match-has-cand) .match-reason{top:auto;bottom:62px}
.match-act-row{display:flex;align-items:center;justify-content:center;gap:10px}
.match-actions button{height:36px;padding:0 20px;border-radius:18px;background:rgba(255,255,255,.72);color:#E24C7B;font-size:13px;font-weight:600;box-shadow:0 3px 12px rgba(214,86,124,.18)}
.match-actions button[data-next]{height:32px;padding:0 16px;border:1px solid rgba(255,255,255,.65);background:rgba(255,255,255,.42);color:#B65D7D;font-size:12px;font-weight:500;box-shadow:none}
.match-actions button[data-accept]{background:linear-gradient(90deg,#FF73A4,#FF4C81);color:#fff}
.match-actions small{text-align:center;color:rgba(120,92,104,.8);font-size:11px}
.match-actions .match-unavailable{color:rgba(120,92,104,.62);font-size:10px}
@keyframes match-pop{from{opacity:0;transform:scale(.35)}to{opacity:1;transform:scale(1)}}
@keyframes match-float{0%,100%{transform:translateY(0)}50%{transform:translateY(-7px)}}
@keyframes match-breathe{0%,100%{transform:scale(1)}50%{transform:scale(1.08)}}

/* ============ 视频速配规则弹层（真机 f_0168~f_0172） ============
   遮罩把粉底压到 40%（黑 60%），白纸从 css 266px 起、圆角 16、内边距 22，
   标题 18px 居中、右上 ×，正文 14px / 行高 20，小标题 15px 加粗。 */
.mr-mask{position:absolute;inset:0;z-index:60;background:rgba(0,0,0,.6)}
.mr-mask[hidden]{display:none!important}
.mr-sheet{position:absolute;left:0;right:0;top:266px;bottom:0;background:#fff;border-radius:16px 16px 0 0;
  padding:22px 22px 34px;overflow-y:auto;-webkit-overflow-scrolling:touch;box-sizing:border-box}
.mr-sheet::-webkit-scrollbar{width:0}
.mr-title{font-size:17px;font-weight:700;color:#22222A;text-align:center;margin-bottom:16px}
.mr-close{position:absolute;top:24px;right:16px;width:28px;height:28px;color:#B9B4BC;display:flex;align-items:center;justify-content:center;cursor:pointer}
.mr-close .ico{width:17px;height:17px}
.mr-body{font-size:13.5px;line-height:20px;color:#8C8894}
.mr-h{font-size:14px;font-weight:600;color:#22222A;margin:0 0 8px}
.mr-t{margin:0 0 8px}
.mr-t+ .mr-h{margin-top:4px}

.homebar{position:absolute;bottom:8px;left:50%;transform:translateX(-50%);width:134px;height:5px;border-radius:3px;background:#111;opacity:.85;z-index:35}
.homebar.on-dark{background:#fff;opacity:.85}

/* 爱情故事（参考录像）：宣传横幅 + 全部/精选 + 双列动态瀑布流。 */
.story-page{background:#fff;overflow-y:auto;overflow-x:hidden;padding-bottom:76px}
.story-submit{font-size:12px;color:#F34F74;cursor:pointer}
.story-hero{height:138px;position:relative;overflow:hidden;background:linear-gradient(105deg,#FFF5F7 0%,#FFDCE7 53%,#FFB9C8 100%);padding:15px 16px;box-sizing:border-box}
.story-hero-copy{position:relative;z-index:2;display:flex;flex-direction:column;gap:21px;max-width:62%}
.story-hero-copy b{font-size:21px;line-height:26px;color:#242129;letter-spacing:0}
.story-hero-copy span{font-size:11px;line-height:17px;color:#6D5661}
.story-hero>img{position:absolute;right:-4px;bottom:-34px;width:156px;height:150px;object-fit:cover;object-position:center top;filter:drop-shadow(0 5px 7px rgba(200,95,119,.16))}
.story-hero-count{position:absolute;right:10px;top:17px;z-index:3;background:rgba(255,255,255,.78);color:#E66B91;border-radius:16px;padding:7px 10px;font-size:10px;white-space:nowrap}
.story-tabs{height:39px;display:flex;align-items:center;gap:26px;padding:0 18px;border-radius:18px 18px 0 0;background:#fff;position:relative;margin-top:-1px;z-index:4;box-shadow:0 -2px 9px rgba(70,33,48,.04)}
.story-tabs [role="tab"]{font-size:16px;color:#85808B;cursor:pointer;line-height:39px}
.story-tabs [role="tab"].on{font-size:18px;font-weight:700;color:#1E1B20}
.story-grid{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:10px 6px;padding:3px 12px 18px;align-items:start}
.story-card{overflow:hidden;border-radius:7px;background:#fff;cursor:pointer;min-width:0}
.story-cover{position:relative;aspect-ratio:.809;background:#F5F1F3;overflow:hidden;border-radius:5px}
.story-media{width:100%;height:100%;display:block;object-fit:cover}
.story-play{position:absolute;left:50%;top:50%;width:34px;height:34px;margin:-17px 0 0 -17px;border-radius:50%;background:rgba(20,16,24,.55);color:#fff;display:flex;align-items:center;justify-content:center}
.story-play .ico{width:16px;height:16px}
.story-cover img{width:100%;height:100%;object-fit:cover}
.story-badge{position:absolute;right:5px;top:5px;padding:3px 7px;border-radius:9px;background:rgba(255,91,145,.88);color:#fff;font-size:9px;line-height:1}
.story-date{display:none}
.story-card-meta{height:24px;display:flex;align-items:center;justify-content:space-between;padding:0 3px;color:#9A96A0;font-size:10px}
.story-stack{display:flex;align-items:center;min-width:25px}
.story-stack img{width:22px;height:22px;border-radius:50%;object-fit:cover;background:#F1EEF1;border:1.5px solid #fff;box-shadow:0 1px 3px rgba(0,0,0,.12)}
.story-bless{white-space:nowrap}
.story-copy{padding:0 3px 4px}
.story-title{font-size:12.5px;line-height:18px;color:#38363D;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;min-height:18px}
.story-loading,.story-empty{grid-column:1/-1;text-align:center;padding:70px 16px;color:#9A98A1;font-size:13px;line-height:1.8}
.story-empty small{font-size:11px;color:#B2AFB7}
.story-error{color:#C0392B}
.story-float-cta{position:absolute;z-index:12;left:50%;bottom:50px;transform:translateX(-50%);width:235px;height:53px;border:0;border-radius:26.5px;background:linear-gradient(90deg,#FF5C91,#FF8E74);color:#fff;box-shadow:0 7px 18px rgba(255,86,135,.3);display:flex;flex-direction:column;align-items:center;justify-content:center;gap:1px;cursor:pointer}
.story-float-cta b{font-size:16px;line-height:19px;font-weight:700}
.story-float-cta small{font-size:11px;opacity:.92;line-height:14px}

/* 游戏速配入口：参考视频先选玩法，再进入语音房；没有 roomId 时不显示空房间错误页。 */
.game-pick{position:absolute;inset:0;background:#fff;color:#1C1B20;padding:0 16px}
.game-pick-nav{height:52px;display:flex;align-items:center;justify-content:center;position:relative}
.game-pick-nav .nb-back{position:absolute;left:-8px;width:32px;height:32px;display:flex;align-items:center;justify-content:center;cursor:pointer}
.game-pick-nav .nb-back img{width:19px;height:19px}
.game-pick-nav b{font-size:17px}
.game-help{position:absolute;right:0;width:20px;height:20px;border:1px solid #A9A7AE;border-radius:50%;font-size:12px;color:#8E8B95;display:flex;align-items:center;justify-content:center}
.game-pick-sub{display:none}
.game-pick-grid{display:grid;grid-template-columns:1fr 1fr;gap:8px;margin-top:34px}
.game-pick-card{height:112px;border:0;border-radius:10px;background:linear-gradient(135deg,#F5E8FF,#EAD7FA);text-align:left;padding:0 0 0 16px;position:relative;overflow:hidden;cursor:pointer;color:#29232E;display:flex;align-items:flex-start;justify-content:center;flex-direction:column}
.game-pick-card:nth-child(2){background:linear-gradient(135deg,#FFF0F3,#FCE0F0)}
.game-pick-card b{position:relative;z-index:2;display:block;font-size:15px;line-height:20px}
.game-pick-card small{position:relative;z-index:2;display:block;font-size:10.5px;line-height:15px;color:#716A78;max-width:120px;margin-top:3px}
.game-pick-card em{position:absolute;left:16px;right:10px;bottom:8px;z-index:3;font-style:normal;font-size:9.5px;line-height:13px;color:#B65C2B}
.game-pick-card.is-blocked{cursor:not-allowed;opacity:.58;filter:saturate(.65)}
.game-pick-note{display:block;margin:14px 4px;font-size:11px;line-height:17px;color:#8A8790}
.game-art{position:absolute;right:-1px;bottom:0;width:112px;height:100px;display:flex;align-items:flex-end;justify-content:flex-end;opacity:1;-webkit-mask-image:linear-gradient(90deg,transparent 0%,#000 18%,#000 100%);mask-image:linear-gradient(90deg,transparent 0%,#000 18%,#000 100%)}
.game-art img{width:112px;height:100px;object-fit:cover;display:block}
.pool-art,.puzzle-art{background:none;transform:none}

/* ---------------------------------------------------------------- 展示板演示区 */
.demo-wrap{display:flex;gap:28px;justify-content:center;align-items:flex-start}
.demo-list{width:250px;flex:none;max-height:calc(100vh - 140px);overflow:auto;padding-right:6px}
.demo-list .dl-group{font-size:11px;color:#6f6f7d;margin:14px 0 6px;letter-spacing:.6px}
.demo-list .dl-item{
  display:flex;align-items:center;gap:9px;padding:9px 11px;border-radius:11px;font-size:13px;color:#b9b9c6;margin-bottom:3px
}
.demo-list .dl-item:hover{background:#1b1b25;color:#fff}
.demo-list .dl-item.on{background:linear-gradient(90deg,rgba(255,76,129,.22),rgba(255,142,97,.08));color:#fff;font-weight:600}
.demo-list .dl-item i{width:18px;text-align:center;font-style:normal;font-size:11px;color:#71717f}
.demo-stage{display:flex;flex-direction:column;align-items:center;gap:14px}
.demo-hint{font-size:12px;color:#6f6f7d}

/* ---------------------------------------------------------------- 设计规范页 */
.spec-wrap{max-width:1080px;margin:0 auto;color:#d8d8e2}
.spec-wrap h2{font-size:15px;color:#fff;margin:34px 0 14px;letter-spacing:.5px}
.spec-wrap h2:first-child{margin-top:0}
.swatches{display:flex;flex-wrap:wrap;gap:12px}
.sw{width:132px;border-radius:12px;overflow:hidden;background:#16161d;border:1px solid #23232e}
.sw i{display:block;height:60px}
.sw div{padding:8px 10px;font-size:11px;color:#9a9aa8;line-height:1.5}
.sw div b{display:block;color:#e8e8f0;font-size:12px;margin-bottom:2px}
.spec-table{width:100%;border-collapse:collapse;font-size:12.5px}
.spec-table th,.spec-table td{text-align:left;padding:9px 12px;border-bottom:1px solid #22222c}
.spec-table th{color:#7f7f8d;font-weight:500;font-size:11.5px}
.asset-row{display:flex;flex-wrap:wrap;gap:10px}
.asset-row figure{margin:0;width:84px;background:#16161d;border:1px solid #23232e;border-radius:10px;padding:8px;text-align:center}
.asset-row img{width:44px;height:44px;object-fit:contain;margin:0 auto 6px}
.asset-row figcaption{font-size:9.5px;color:#7f7f8d;word-break:break-all}

/* =========================================================================
   页面级样式
   ========================================================================= */
/* --- 渐变底 / 深色场景 --- */
.bg-photo{position:absolute;inset:0;background-size:cover;background-position:center;z-index:0}
.bg-mask{position:absolute;inset:0;z-index:1}
.mask-b{background:linear-gradient(180deg,rgba(0,0,0,0) 42%,rgba(0,0,0,.62) 100%)}
.mask-t{background:linear-gradient(180deg,rgba(0,0,0,.55),rgba(0,0,0,0) 45%)}
.mask-all{background:rgba(0,0,0,.38)}
.on-dark,.on-dark .nb-title,.on-dark .nb-right{color:#fff}

/* --- 启动/引导 --- */
.splash{position:absolute;inset:0;z-index:2;display:flex;flex-direction:column;align-items:center;padding:0 var(--s6)}
.splash .logo-ring{width:104px;height:104px;border-radius:30px;display:flex;align-items:center;justify-content:center;box-shadow:0 16px 40px rgba(255,76,129,.5);margin-top:132px}
/* 品牌标换成真图（圆角方块 + 心形牵手图形），不再用「春」字加渐变色块拼 */
.splash .logo-ring img{width:100%;height:100%;display:block}
.splash h2{font-size:44px;margin:20px 0 8px;letter-spacing:8px;font-weight:800;
  /* 上半截留白、下半截转玫红：照参考图那版的字色（白 → 粉） */
  background:linear-gradient(180deg,#FFFFFF 0%,#FFFFFF 44%,#FF8FB6 78%,#FF5E93 100%);
  -webkit-background-clip:text;background-clip:text;color:transparent;
  text-shadow:0 0 22px rgba(255,95,155,.85),0 4px 18px rgba(255,64,130,.5)}
.splash .sub{color:#FFD9E6;font-size:var(--fs-14);letter-spacing:2px}
.splash .slogan{color:#fff;font-size:var(--fs-15);font-weight:600;letter-spacing:2px;margin-top:6px}
.splash .bottom{position:absolute;left:var(--s6);right:var(--s6);bottom:38px}
/* 认证进度环：三种认证各占一弧（手机=品牌粉 / 实名=紫 / 真人=金），中心是完成数 */
.ring3{width:92px;height:92px;border-radius:50%;flex:none;position:relative;
  background:conic-gradient(from -90deg,#FF4C81 0 25%,#9E4CFF 25% 50%,#FFC700 50% 75%,#6A3BFF 75% 100%);
  box-shadow:0 6px 18px rgba(0,0,0,.18)}
.ring3::before{content:'';position:absolute;inset:9px;border-radius:50%;background:#fff;opacity:.94}
.ring3 .ring3-in{position:absolute;inset:0;display:flex;flex-direction:column;align-items:center;justify-content:center;color:#181818}
.ring3 .ring3-in b{font-size:22px;font-weight:700;line-height:1}
.ring3 .ring3-in i{font-size:10px;font-style:normal;color:#8A8A94;margin-top:3px}
.verify-benefits-grid{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:9px}
.verify-benefit{position:relative;display:flex;flex-direction:column;min-width:0;min-height:112px;padding:10px;
  border-radius:14px;background:linear-gradient(145deg,#FFF6FA 0%,#FFF9FC 48%,#F7F3FF 100%);
  box-shadow:0 3px 12px rgba(158,76,255,.05)}
.verify-benefit.is-locked{background:linear-gradient(145deg,#F8F7F9 0%,#FAF9FB 52%,#F3F1F6 100%);
  box-shadow:0 3px 12px rgba(83,76,92,.035)}
.vb-head{display:flex;align-items:center;justify-content:space-between;gap:6px;margin-bottom:7px}
.vb-icon{width:27px;height:27px;border-radius:9px;background:rgba(255,255,255,.82);display:flex;
  align-items:center;justify-content:center;flex:none;box-shadow:0 2px 8px rgba(229,83,124,.07)}
.vb-icon img{width:18px;height:18px;object-fit:contain}
.vb-state{font-size:8.5px;line-height:1;color:#E5537C;white-space:nowrap}
.is-locked .vb-state{color:#A49CA8}
.vb-title{display:block;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;
  font-size:12px;font-weight:600;line-height:1.35;color:#3C3541}
.vb-desc{display:-webkit-box;margin-top:3px;overflow:hidden;color:#8F8794;font-size:9.5px;line-height:1.45;
  -webkit-box-orient:vertical;-webkit-line-clamp:3}
.is-locked .vb-title{color:#756E79}
.is-locked .vb-desc{color:#A39CA7}
.agree{display:flex;align-items:flex-start;gap:7px;color:rgba(255,255,255,.9);font-size:var(--fs-11);line-height:1.5;justify-content:center}
.agree .cbx{width:13px;height:13px;border-radius:50%;background:var(--brand);color:#fff;font-size:9px;display:flex;align-items:center;justify-content:center;flex:none;margin-top:1px}
.agree a{color:#FFD9E6;text-decoration:none}

/* --- 登录 --- */
/* 品牌底：粉紫渐变 + 城市剪影 + 牵手情侣（assets/brand-hero.svg）。
   暗紫台球桌那版已废——真实三款 App 的冷启动都是粉紫系。 */
.brand-hero{position:absolute;inset:0;z-index:0;background-color:#9E4CFF;background-image:url(../assets/brand-hero.svg);background-size:cover;background-position:center bottom;background-repeat:no-repeat}
.brand-hero.soft{background-image:none;background:var(--grad-hero)}
.hero-scrim{position:absolute;inset:0;z-index:1;background:linear-gradient(180deg,rgba(22,8,48,.16) 0%,rgba(22,8,48,0) 26%,rgba(22,8,48,.24) 62%,rgba(16,6,36,.72) 100%)}
.brand-badge{display:inline-flex;align-items:center;gap:5px;height:24px;padding:0 12px;border-radius:12px;background:rgba(255,255,255,.20);border:1px solid rgba(255,255,255,.42);color:#fff;font-size:var(--fs-11);font-weight:600;letter-spacing:1px;margin-top:12px}
.login-hero{position:absolute;inset:0;z-index:0;background-color:#9E4CFF;background-image:url(../assets/brand-city.svg);background-size:cover;background-position:center bottom;background-repeat:no-repeat}
.login-hero::after{content:'';position:absolute;inset:0;background:linear-gradient(170deg,rgba(24,8,52,.30) 0%,rgba(24,8,52,.10) 34%,rgba(20,6,44,.62) 100%)}
.login-in{position:relative;z-index:2;padding:0 30px}
.login-in h2{color:#fff;font-size:26px;font-weight:700;margin:26px 0 6px}
.login-in .lt{color:rgba(255,255,255,.75);font-size:var(--fs-13);margin-bottom:30px}
.field{display:flex;align-items:center;gap:10px;height:48px;border-radius:var(--r-cap);background:rgba(255,255,255,.16);padding:0 18px;margin-bottom:14px;border:1px solid rgba(255,255,255,.22)}
.field input{flex:1;background:none;border:none;outline:none;color:#fff;font-size:var(--fs-15)}
.field input::placeholder{color:rgba(255,255,255,.55)}
.field .pre{color:#fff;font-size:var(--fs-15);font-weight:600}
.field .code{color:#FFD9E6;font-size:var(--fs-13);white-space:nowrap}
.field.light{background:var(--line-3);border:1px solid var(--line-2)}
.field.light input{color:var(--t1)}
.field.light input::placeholder{color:var(--t3)}
.field.light .code{color:var(--brand-deep)}

/* ---------- 登录 / 注册页（2026-10-14 按线上真机重排） ----------
   改的三件事：①验证码拆成左右两栏 ②发送后按钮进禁用态 + 60s 倒计时 ③提示紧贴验证码行下方。
   顺带把输入框对比度提上来（原来 rgba(255,255,255,.16) 在强光下几乎看不出边框）。 */
.lg-title{font-size:26px;font-weight:800;letter-spacing:.4px;line-height:1.25}
.lg-close-tap{width:44px;height:44px;margin:2px 0 4px -10px;display:flex;align-items:center;justify-content:center}
.lg-field{display:flex;align-items:center;gap:10px;height:52px;border-radius:var(--r-cap);
  background:rgba(255,255,255,.26);border:1.5px solid rgba(255,255,255,.38);padding:0 18px;
  transition:border-color .15s ease,background .15s ease}
.lg-field input{flex:1;min-width:0;background:none;border:0;outline:none;color:#fff;
  font-size:var(--fs-16);font-weight:600;letter-spacing:.5px}
.lg-field input::placeholder{color:rgba(255,255,255,.72);font-weight:400;letter-spacing:0}
.lg-field .pre{color:#fff;font-size:var(--fs-16);font-weight:700}
/* 错误态：整条框描红 + 下面一行红字（手机号格式 / 验证码位数都走这条） */
.lg-field.is-err{border-color:#FF5C7A;background:rgba(255,70,100,.22)}
.lg-arrow{width:34px;height:34px;margin-right:-12px;border:0;background:none;color:#fff;
  font-size:12px;opacity:.9;cursor:pointer}
.lg-err{display:none;margin:6px 4px -4px;font-size:var(--fs-12);color:#FFD3DE}
.lg-err.on{display:block}
.lg-code-row{display:flex;align-items:center;gap:10px;margin-top:14px}
.lg-code-row .lg-field{flex:1 1 auto;min-width:0;padding-right:14px}
.lg-code-btn{flex:0 0 auto;height:52px;padding:0 20px;border:0;border-radius:var(--r-cap);
  background:var(--brand-grad);color:#fff;font-size:var(--fs-14);font-weight:700;white-space:nowrap;
  cursor:pointer;box-shadow:0 8px 18px rgba(255,76,129,.36)}
.lg-code-btn[disabled]{background:rgba(255,255,255,.26);color:rgba(255,255,255,.66);
  box-shadow:none;cursor:default}
.lg-code-hint{display:flex;justify-content:space-between;gap:10px;
  min-height:17px;margin:9px 4px 0;font-size:var(--fs-12);color:rgba(255,255,255,.9)}
.lg-code-hint .lg-hint-r{color:rgba(255,255,255,.66)}
/* 原来这枚是 <div class="btn">，换成 <button> 之后宽度默认 auto，会缩成一小块 —— 必须显式撑满 */
.lg-submit{display:flex;width:100%;margin-top:16px;height:52px;font-size:var(--fs-17);font-weight:700}
/* 一键登录是次级操作：半透明实心块 + 不可点，不和主按钮抢焦点 */
.lg-onekey{display:block;width:100%;height:52px;margin-top:14px;border:0;border-radius:var(--r-cap);
  background:rgba(255,255,255,.20);color:rgba(255,255,255,.80);font-size:var(--fs-16);
  font-weight:600;cursor:not-allowed}
.lg-agree{margin-top:16px;justify-content:flex-start;gap:9px;line-height:1.8;font-size:var(--fs-12);
  color:rgba(255,255,255,.88)}
.lg-agree .cbx{width:16px;height:16px;font-size:10px;margin-top:3px}
.lg-agree a{color:#FFD9E6}
.lg-divider{display:flex;align-items:center;gap:14px;margin-top:30px;
  color:rgba(255,255,255,.66);font-size:var(--fs-12)}
.lg-divider i{flex:1;height:1px;background:rgba(255,255,255,.3)}
.lg-methods{display:flex;justify-content:center;gap:30px;margin-top:20px}
.lg-method{text-align:center;color:rgba(255,255,255,.86);font-size:var(--fs-11);cursor:pointer}
.lg-method .ic{width:48px;height:48px;border-radius:50%;background:rgba(255,255,255,.16);
  display:flex;align-items:center;justify-content:center;margin:0 auto 7px}
.lg-method .ic img{width:24px;opacity:.92}
/* 当前正在用的方式（手机验证码）：白底 + 粉色描边，一眼看出选中的是哪个 */
.lg-method.cur{color:#fff;font-weight:700}
.lg-method.cur .ic{background:#fff;box-shadow:0 0 0 2.5px #FF7FA8,0 8px 18px rgba(255,76,129,.38)}
.lg-method.cur .ic img{width:30px;opacity:1}

/* --- 首页卡片流 --- */
.feed{position:absolute;inset:0;overflow:hidden}
.feed .fcard{position:absolute;left:14px;right:14px;border-radius:20px;box-shadow:0 10px 30px rgba(0,0,0,.18)}
.feed .fcard .fimg{position:absolute;inset:0;border-radius:20px;overflow:hidden}
.feed .fcard .fimg img{width:100%;height:100%;object-fit:cover}
.feed .fcard img{width:100%;height:100%;object-fit:cover}
.feed .fmeta{position:absolute;left:14px;right:74px;bottom:14px;color:#fff;z-index:3}
.feed .fmeta .nm{font-size:var(--fs-18);font-weight:700;display:flex;align-items:center;gap:6px}
.feed .fmeta .nm em{font-style:normal;font-size:var(--fs-13);font-weight:400;opacity:.9}
.feed .fmeta .tags{display:flex;gap:6px;margin-top:7px;flex-wrap:wrap}
.feed .fmeta .tags span{font-size:var(--fs-10);padding:2px 8px;border-radius:9px;background:rgba(255,255,255,.22);backdrop-filter:blur(4px)}
.feed .facts{position:absolute;right:12px;bottom:24px;display:flex;flex-direction:column;gap:20px;z-index:3}
.feed .facts button{width:46px;height:46px;border-radius:50%;background:rgba(255,255,255,.92);display:flex;align-items:center;justify-content:center;box-shadow:0 6px 16px rgba(0,0,0,.22)}
.feed .facts button img{width:26px;height:26px;object-fit:contain}
.feed .facts button.primary{background:var(--brand-grad)}
.feed .facts small{display:block;text-align:center;margin-top:3px;font-size:9px;color:#fff;text-shadow:0 1px 3px rgba(0,0,0,.55)}
/* --- P1 首页推荐大卡：照片全幅（无左右留白），信息卡与操作条浮在照片上 --- */
.feed.big .fcard{left:0;right:0;top:0;bottom:0;border-radius:0;box-shadow:none;color:#fff}
.feed.big .fcard .fimg{border-radius:0}
.feed.big .fmeta{left:18px;right:96px;bottom:24px}
.feed.big .facts{right:13px;bottom:26px;gap:16px}
.feed.big .facts button{width:50px;height:50px}
.feed.big .facts .like{width:58px;height:58px;background:var(--brand-grad);color:#fff;
  box-shadow:0 10px 24px rgba(255,76,129,.45)}
.feed.big .facts .act-skip button{background:rgba(24,24,34,.42);color:#fff;backdrop-filter:blur(6px)}
.feed.big .facts .act-skip img{filter:brightness(0) invert(1)}
.feed.big .fmeta .nm{font-size:var(--fs-20);text-shadow:0 2px 8px rgba(0,0,0,.45)}
.feed .fmeta .fsub{display:flex;align-items:center;gap:8px;margin-top:5px;font-size:var(--fs-13);opacity:.94}
.feed .fmeta .fsub em{font-style:normal}
.feed .fmeta .nm{white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.feed .fmatch{display:inline-flex;align-items:center;gap:4px;padding:3px 9px;border-radius:12px;
  background:rgba(255,76,129,.9);font-size:10px;font-weight:600;color:#fff;font-style:normal}
.feed .fcard{transition:transform .26s ease,opacity .26s ease}
.feed .fcard.swipe-out{transform:translateX(-118%) rotate(-7deg);opacity:0}
.feed .fcard.swipe-in{transform:translateX(26px);opacity:0}
.feed .fempty{position:absolute;left:0;right:0;top:0;bottom:0;display:flex;flex-direction:column;
  align-items:center;justify-content:center;gap:10px;padding:0 34px;text-align:center;color:var(--t3);
  font-size:13px;line-height:1.8}
.feed .fempty img{width:56px;opacity:.5}
.onscreen-tip{
  position:absolute;left:14px;right:14px;top:0;height:40px;border-radius:12px;background:linear-gradient(90deg,#FFF1F6,#FFEAF3);
  display:flex;align-items:center;gap:8px;padding:0 12px;font-size:var(--fs-12);color:var(--brand);z-index:6
}

/* --- 聊天 --- */
.chat-bg{background:#F6F6F6}
/* 聊天页顶部那几张「长在业务里」的卡（真机录像 12.1）：对方动态横条 / 同城定位卡 / 灵感回复。
   真数据；任一段拉不到就整段不画（后端不编，前端也不塞占位）。 */
.chatx{padding:6px 12px 0}
.chatx .cx{background:#fff;border-radius:14px;padding:10px 12px;margin-bottom:8px;box-shadow:var(--shadow-soft)}
.chatx .cx-hd{font-size:var(--fs-12);color:#8A8A94;margin-bottom:8px}
.chatx .cx-row{display:flex;gap:8px;overflow-x:auto}
.chatx .cx-row::-webkit-scrollbar{height:0}
.chatx .cx-th{flex:none;width:56px;height:56px;border-radius:10px;overflow:hidden;background:var(--line-3);display:block}
.chatx .cx-th img{width:100%;height:100%;object-fit:cover;display:block}
.chatx .cx-profile{position:relative;margin:0 8.3px 16px;padding:10px 12px 10px;border:1px solid #F3D5DF;border-radius:12px;background:#fff;min-height:104px}
.chatx .cx-profile-photos{float:left;display:flex;gap:5px;margin:0 10px 4px 0}
.chatx .cx-profile-photos img{width:54px;height:64px;border-radius:9px;object-fit:cover;background:#F1EFF3;display:block}
.chatx .cx-profile-main{min-height:64px;padding-top:2px}
.chatx .cx-profile-main b{display:block;font-size:15px;line-height:21px;color:#29272B;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.chatx .cx-profile-main span{display:block;margin-top:3px;font-size:12px;color:#6F6C74;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.chatx .cx-profile-main p{margin:5px 0 0;font-size:12px;line-height:16px;color:#8A8790;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.chatx .cx-profile-distance{clear:both;padding:5px 0 0;border-top:1px solid #F3F1F3;font-size:12px;color:#C28768}
.chatx .cx-profile-voice{display:inline-flex;align-items:center;gap:4px;margin-top:7px;padding:4px 9px;border-radius:13px;background:#FFF0F4;color:#D46D91;font-size:11px}
.chatx .cx-profile-voice .ico{width:15px;height:15px}
.chatx .cx-profile-voice b{font-weight:600}
.chatx .cx-city b{font-size:var(--fs-15);color:#181818}
.chatx .cx-city small{display:block;margin-top:4px;font-size:var(--fs-11);color:#8A8A94;line-height:1.4}
.chatx .cx-inspire .cx-ins{display:flex;align-items:center;gap:8px;height:34px;padding:0 12px;margin-bottom:6px;
  border-radius:17px;border:var(--stroke-brand);background:var(--brand-soft);color:#C0326A;font-size:var(--fs-13)}
.chatx .cx-inspire .cx-ins:last-child{margin-bottom:0}
.chatx .cx-inspire .cx-ins em{margin-left:auto;font-style:normal;font-size:var(--fs-11);color:#C0326A;opacity:.85}
.msg{display:flex;gap:9px;margin-bottom:16px;padding:0 14px}
/* 气泡头像的兜底尺寸（聊天页会覆盖成真机量到的 46） */
.msg .avatar{width:38px;height:38px;border-radius:12px;object-fit:cover;background:#EEEDF2;flex:none}
.msg.me{flex-direction:row-reverse}
.msg .bub{max-width:216px;padding:10px 13px;border-radius:14px;background:#ECECEC;font-size:var(--fs-14);line-height:1.5;color:var(--t1);position:relative}
.msg.me .bub{background:#FFDCE8;color:#2b1a22}
.msg .bub .t{display:block;font-size:9px;color:var(--t3);margin-top:5px;text-align:right}
/* 语音条：秒数是服务端存下来的真实录音时长（content.durationMs），点一下真播这一段 */
.msg .bub .vmsg{display:inline-flex;align-items:center;gap:7px;min-width:56px;cursor:pointer;user-select:none;font-variant-numeric:tabular-nums}
.msg .bub .vmsg .vplay{width:20px;height:20px;border-radius:50%;background:var(--brand-grad);color:#fff;
  font-size:10px;line-height:20px;text-align:center;flex:none;font-style:normal}
.msg .bub .vmsg:active{opacity:.7}
.msg.system{justify-content:center}
.msg.system .bub{background:rgba(0,0,0,.05);color:var(--t2);font-size:var(--fs-11);padding:5px 12px;border-radius:10px}
/* 聊天三套主题（同城聊 IMNChat 原样保留，色值取自逆向资源包「3.3 聊天页三套主题」） */
.chat-theme-light{background:#F6F6F6}
.chat-theme-light .chat-bg{background:#F6F6F6}
.chat-theme-light .msg .bub{background:#ECECEC}
.chat-theme-light .msg.me .bub{background:#DCEAFD;color:#152A4A}
.chat-theme-light .ipt{background:#EBF0F6}
.chat-theme-lively{background:#FFF7F8}
.chat-theme-lively .chat-bg{background:#FFF7F8}
.chat-theme-lively .msg .bub{background:#F8F8F9}
.chat-theme-lively .msg.me .bub{background:#FFB3A7;color:#3a1b15}
.chat-theme-lively .msg.me .bub .t{color:#7a4a40}
.chat-theme-serious{background:#F4F5FA}
.chat-theme-serious .chat-bg{background:#F4F5FA}
.chat-theme-serious .msg .bub{background:#fff;box-shadow:0 1px 3px rgba(16,24,64,.07)}
.chat-theme-serious .msg.me .bub{background:#E04F78;color:#fff}
.chat-theme-serious .msg.me .bub .t{color:rgba(255,255,255,.72)}

/* ---------- 红包（M08 · 148~150）：聊天气泡上的那张卡 + 「拆红包」浮层 ----------
   卡片本身就是入口（data-grab 带真 packetId），点开才是 149 详情 / 150 抢。
   放在主题规则之后：红包在四种聊天主题下都该是同一个红，不被主题背景色盖掉。 */
.msg .bub.bub-rp,.msg.me .bub.bub-rp{background:linear-gradient(135deg,#FF7A45,#FF3B30) !important;
  background-color:transparent !important;
  color:#FFF3D6;padding:10px 12px;box-shadow:0 6px 14px rgba(255,59,48,.2)}
.msg .bub.bub-rp .t{color:rgba(255,243,214,.78)}
.rp-bub{display:flex;align-items:center;gap:9px;min-width:158px;cursor:pointer;text-align:left}
.rp-bub.rp-plain{cursor:default}
.rp-bub .rp-ic{width:34px;height:34px;flex:none;filter:drop-shadow(0 2px 4px rgba(0,0,0,.18))}
.rp-bub .rp-bless{font-size:13px;font-weight:600;line-height:1.3}
.rp-bub .rp-sub{font-size:10.5px;opacity:.82;margin-top:3px}
.rp-mask{position:absolute;inset:0;background:rgba(0,0,0,.5);z-index:60;display:flex;align-items:flex-end;
  animation:pv-fade .18s ease}
.rp-card{width:100%;max-height:80%;overflow:auto;background:#fff;border-radius:18px 18px 0 0;
  padding:18px 16px calc(16px + var(--safe-bottom,0px));animation:pv-up .22s cubic-bezier(.2,.9,.25,1)}
.rp-card .rp-top{display:flex;align-items:center;gap:10px}
.rp-card .rp-av{width:40px;height:40px;border-radius:50%;object-fit:cover;flex:none;background:#F1F1F5}
.rp-card .rp-av.sm{width:30px;height:30px}
.rp-card .rp-who{font-size:14px;font-weight:600}
.rp-card .rp-bless2{font-size:11.5px;color:var(--t3);margin-top:3px}
.rp-card .rp-open{width:96px;height:96px;margin:18px auto 0;border-radius:50%;cursor:pointer;
  background:linear-gradient(160deg,#FFD98A,#FFB02E);color:#8A4B00;font-size:30px;font-weight:800;
  display:flex;align-items:center;justify-content:center;border:3px solid #FFF4D8;
  box-shadow:0 10px 24px rgba(255,176,46,.4)}
.rp-card .rp-open-tip{text-align:center;font-size:11px;color:var(--t3);margin-top:8px}
.rp-card .rp-mine,.rp-card .rp-state{text-align:center;font-size:13px;color:var(--t2);
  margin-top:16px;line-height:1.7}
.rp-card .rp-mine b{font-size:22px;color:#E0631F}
.rp-card .rp-bestline{text-align:center;font-size:11.5px;color:#B8860B;margin-top:10px}
.rp-card .rp-list{margin-top:14px;border-top:1px solid var(--line-3);padding-top:4px}
.rp-card .rp-row{display:flex;align-items:center;gap:8px;padding:8px 0}
.rp-card .rp-nm{font-size:12.5px;flex:1;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.rp-card .rp-best{font-size:9.5px;color:#B8860B;background:#FFF6DF;border-radius:8px;padding:1px 6px;flex:none}
.rp-card .rp-amt{font-size:12.5px;font-weight:600;color:#E0631F;flex:none}
.rp-card .rp-empty{text-align:center;font-size:11.5px;color:var(--t3);margin-top:16px}
.rp-card .rp-foot{text-align:center;font-size:11px;color:var(--t3);margin-top:12px}
.rp-card .rp-close{margin-top:14px;height:42px;border-radius:var(--r-cap);background:var(--soft-bg);
  color:var(--t2);display:flex;align-items:center;justify-content:center;font-size:var(--fs-14);
  font-weight:600;cursor:pointer}
.rp-card .rp-wait{text-align:center;font-size:12.5px;color:var(--t3);padding:24px 0}
.rp-card .rp-err{margin-top:10px;text-align:center;font-size:12px;color:#C0392B;line-height:1.7}
.cth{width:15px;height:15px;border-radius:50%;flex:none;display:inline-block;box-shadow:0 0 0 1px rgba(0,0,0,.12)}
.cth[data-ctheme="light"]{background:#147AFF}
.cth[data-ctheme="lively"]{background:#FF8E82}
.cth[data-ctheme="serious"]{background:#0052FF}
.cth.on{box-shadow:0 0 0 2px #fff,0 0 0 3.5px var(--brand)}
.inputbar{flex:none;min-height:54px;border-top:1px solid var(--line-2);background:#fff;display:flex;align-items:center;gap:8px;padding:8px 12px 18px;position:relative}
.inputbar .ib{width:24px;height:24px;flex:none;display:flex;align-items:center;justify-content:center;color:#8a8a92;cursor:pointer}
.inputbar .ib{position:relative}
.inputbar .ib .ib-new{position:absolute;top:-6px;right:-8px;height:13px;padding:0 4px;border-radius:7px;
  background:var(--grad-pink);color:#fff;font-size:9px;font-style:normal;line-height:13px;font-weight:600}
.inputbar .ib img{width:22px;height:22px;object-fit:contain}
.inputbar .ipt{flex:1;height:36px;border-radius:18px;background:var(--line-3);display:flex;align-items:center;padding:0 14px;color:var(--t3);font-size:var(--fs-13)}
.hello-entry{position:absolute;left:0;bottom:calc(100% + 6px);display:flex;align-items:center;gap:6px;padding:5px 11px;border-radius:14px;background:rgba(255,255,255,.96);box-shadow:0 6px 16px rgba(0,0,0,.16);font-size:var(--fs-11);color:var(--brand);z-index:9}

/* --- 消息列表 --- */
/* ---------------------------------------------------------------------------
   消息列表（真机 f_0430 的量尺；精简版去掉顶部 AI 定制 banner，直接从两 Tab 开始）：
   两 Tab ink 起 y 93.3、48.3 间距；垃圾桶 25px @ 右边距 14；
   两行应用入口图标/会话头像都是 54 圆角方（r12），文字列 x 80，未读角标红色 22 圆 @ 头像右上角；
   行高 ≈76；「查看」胶囊 47.5×25.8，右边缘 345.8。
   --------------------------------------------------------------------------- */
.msgbody{background:#fff}

.msg-tabs{position:relative;display:flex;align-items:flex-end;gap:12.3px;padding:14.7px 4px 0 11px}
.msg-tabs .mtab{font-size:18px;line-height:25px;color:#B3B1B8;cursor:pointer}
.msg-tabs .mtab.on{color:#3F3D44;font-weight:700}
.msg-tabs .msg-trash{margin-left:auto;display:inline-flex;align-items:center;color:#26242A;cursor:pointer;padding-bottom:4px}
.msg-tabs .msg-trash .ico{width:25px;height:25px}

.msg-list{padding:15.5px 0 10px}
.conv-swipe{position:relative;overflow:hidden;background:#fff;touch-action:pan-y}
.conv-swipe>.conv{position:relative;z-index:1;width:100%;box-sizing:border-box;background:#fff;will-change:transform}
.conv-swipe.is-pinned,.conv-swipe.is-pinned>.conv{background:#F5F6F8}
.conv-swipe.swiped>.conv{transform:translateX(-164px);transition:transform .18s ease}
.conv-del{position:absolute;right:0;top:0;bottom:0;width:82px;padding:0;border:0;background:#FF3B52;
  color:#fff;font-size:14px;font-weight:600;cursor:pointer}
.conv-del:active{background:#E93047}
.conv-pin{position:absolute;right:82px;top:0;bottom:0;width:82px;padding:0;border:0;background:#EEF0F4;
  color:#55555F;font-size:13px;font-weight:600;cursor:pointer}
.conv-pin.on{background:#FFF0F6;color:#E84B87}
.conv-pin:active{background:#E2E5EB}
.conv-pin.on:active{background:#FFE3EF}
.conv-swipe.deleting{opacity:.6;pointer-events:none}
.conv{display:flex;gap:13.3px;padding:10px 14.2px;align-items:center;position:relative;cursor:pointer}
.conv .cav{position:relative;flex:none;width:54px;height:54px}
.conv .cav img{width:54px;height:54px;border-radius:12px;object-fit:cover;display:block}
.conv .cav .dot{position:absolute;right:-5px;top:-5px;min-width:20px;height:20px;border-radius:10px;
  border:2px solid #fff;background:#FF3B52;color:#fff;font-size:11px;font-weight:700;display:flex;
  align-items:center;justify-content:center;padding:0 4px;box-sizing:border-box;z-index:2;
  line-height:1;pointer-events:none;box-shadow:0 2px 6px rgba(255,59,82,.28)}
.conv .cinfo{flex:1;min-width:0}
.conv .cinfo .top{display:flex;align-items:center;gap:6px}
.conv .cinfo .nm{font-size:16px;line-height:21px;font-weight:600;color:#22222A;overflow:hidden;
  text-overflow:ellipsis;white-space:nowrap}
.conv .cinfo .age{font-size:13.5px;color:#6E6E76;flex:none}
.conv .cinfo .tagline2{font-size:11px;color:var(--brand-deep);background:var(--brand-soft);border-radius:8px;padding:1px 6px}
.conv .cinfo .last{display:flex;align-items:center;min-width:0;font-size:13px;line-height:18px;color:#8A8A94;margin-top:4px}
.conv .cinfo .last-text{min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.conv .cinfo .last-read{flex:none;margin-left:4px;font-size:11px;line-height:16px;font-weight:500;color:#E84B87}
.conv .cinfo .last-read.is-read{color:#A6A3AD}
.conv .cinfo .last em{font-style:normal;color:#D89A86}
.conv .cmeta{flex:none;align-self:flex-start;padding-top:2px;display:flex;flex-direction:column;align-items:flex-end;gap:4px}
.conv .ctime{font-size:12px;color:#A9A8B0;white-space:nowrap}
.conv .cheat{font-size:11px;line-height:17px;color:#E84B87;background:#FFF0F6;border-radius:9px;padding:0 6px;white-space:nowrap}
.conv .cheat-live{position:relative;display:inline-flex;align-items:center;justify-content:center;
  width:40px;height:35px;min-width:40px;box-sizing:border-box;padding:0;overflow:visible;isolation:isolate;
  color:#E83E7C;background:none;border:0;box-shadow:none;transform:translateZ(0)}
.conv .cheat-live::before{content:"";position:absolute;inset:0;border-radius:50%;z-index:-1;
  background:radial-gradient(circle,rgba(255,92,151,.24),rgba(255,92,151,0) 70%);
  opacity:.3;transform:scale(.9);pointer-events:none}
.conv .cheat-live::after{content:none}
.conv .cheat-live.is-fresh::after{animation:il-sheen 1.05s ease-out .08s 1}
.conv .cheat-live.is-fresh .il-value{animation:il-number-pop .66s cubic-bezier(.2,.9,.25,1.25) both}
.conv .il-heart{position:relative;flex:none;width:40px;height:35px;display:block;
  color:#FF4E8A;filter:drop-shadow(0 2px 4px rgba(232,62,124,.18)) drop-shadow(0 0 3.5px rgba(255,78,138,.4));
  transform-origin:50% 58%;
  animation:il-heartbeat 1.9s ease-in-out infinite;will-change:transform}
.conv .il-heart svg{width:100%;height:100%;display:block;fill:currentColor}
.conv .il-value{position:absolute;z-index:2;left:0;right:0;top:16px;text-align:center;
  font-size:8.5px;line-height:1;font-weight:800;letter-spacing:-.15px;color:#fff;
  font-variant-numeric:tabular-nums;text-shadow:0 1px 2px rgba(125,22,63,.38);white-space:nowrap}
.conv .il-aura{display:none}
.conv .cheat-live.is-hot{color:#FF3D76;background:none;box-shadow:none}
.conv .cheat-live.is-hot .il-heart{color:#FF326F;filter:drop-shadow(0 0 5px rgba(255,50,111,.68))}
.conv .cheat-live.is-hot::before,.conv .cheat-live.is-blaze::before{animation:il-aura-breathe 2.8s ease-in-out infinite}
.conv .cheat-live.is-hot .il-aura,.conv .cheat-live.is-blaze .il-aura{opacity:.22;animation:il-aura-slide 4.8s ease-in-out infinite}
.conv .cheat-live.is-blaze{color:#F23273;background:none;box-shadow:none}
.conv .cheat-live.is-blaze .il-heart{color:#F42C72;filter:drop-shadow(0 0 6px rgba(255,55,135,.78))}
.conv .il-spark{position:absolute;z-index:3;pointer-events:none;font-size:7px;line-height:1;font-style:normal;
  color:#FF6DA2;opacity:0;text-shadow:0 0 4px rgba(255,79,142,.55);
  animation:il-spark-fly .9s ease-out both;will-change:transform,opacity}
@keyframes il-heartbeat{0%,100%{transform:scale(1)}13%{transform:scale(1.17)}23%{transform:scale(.95)}34%{transform:scale(1.08)}47%{transform:scale(1)}}
@keyframes il-aura-breathe{0%,100%{opacity:.3;transform:scale(.9)}50%{opacity:.68;transform:scale(1.06)}}
@keyframes il-aura-slide{0%,58%{transform:translateX(-75%);opacity:0}68%{opacity:.35}86%,100%{transform:translateX(78%);opacity:0}}
@keyframes il-sheen{0%{background-position:160% 0;opacity:0}18%{opacity:.9}100%{background-position:-60% 0;opacity:0}}
@keyframes il-number-pop{0%{transform:scale(.72);opacity:.55}58%{transform:scale(1.12)}100%{transform:scale(1);opacity:1}}
@keyframes il-spark-fly{0%{opacity:0;transform:translate3d(0,0,0) scale(.35) rotate(0)}
  18%{opacity:1}100%{opacity:0;transform:translate3d(var(--il-dx,0),var(--il-dy,-16px),0) scale(1.15) rotate(var(--il-rot,0deg))}}
@media (prefers-reduced-motion:reduce){
  .conv .cheat-live::before,.conv .cheat-live::after,.conv .il-heart,.conv .il-aura,.conv .il-spark,
  .conv .cheat-live.is-fresh .il-value{animation:none!important}
}
.conv .look{flex:none;width:47.5px;height:25.8px;box-sizing:border-box;border-radius:13px;
  box-shadow:inset 0 0 0 1px #E4E3E8;color:#8A8A94;font-size:12.5px;display:flex;align-items:center;justify-content:center}
.conv .pick{flex:none;width:24px;height:24px;border-radius:12px;box-sizing:border-box;
  box-shadow:inset 0 0 0 1.5px #D8D7DD}
.conv.on .pick{background:var(--brand);box-shadow:none;position:relative}
.conv.on .pick::after{content:"";position:absolute;left:7.5px;top:5px;width:6px;height:11px;
  border:solid #fff;border-width:0 2px 2px 0;transform:rotate(42deg)}
.conv-app .cav img{border-radius:12px;object-fit:cover;padding:0;box-sizing:border-box;background:#FFF3F5}
.gc-list-head{padding:18px 16px 10px;background:#fff;display:flex;flex-direction:column;gap:4px}
.gc-list-head b{font-size:18px;color:#22222A}
.gc-list-head span{font-size:12px;color:#8A8A94}
.gc-list{background:#fff;border-top:1px solid var(--line-2)}
.gc-section-title{padding:14px 16px 8px;background:#FAFAFC;color:#777580;font-size:11px;font-weight:600;letter-spacing:.2px}
.gc-party-list{background:#fff;border-bottom:1px solid var(--line-2)}
.gc-party-row{display:flex;align-items:center;gap:11px;min-height:82px;padding:10px 16px;border-bottom:1px solid var(--line-2);cursor:pointer}
.gc-party-row:last-child{border-bottom:0}
.gc-party-row:active{background:#FFF5F8}
.gc-party-cover{position:relative;width:58px;height:58px;flex:none;border-radius:15px;overflow:hidden;background:#FFE6EE}
.gc-party-cover img{width:100%;height:100%;object-fit:cover}
.gc-party-cover span{position:absolute;left:4px;bottom:4px;padding:2px 5px;border-radius:7px;background:rgba(0,0,0,.42);color:#fff;font-size:9px}
.gc-party-main{display:flex;flex:1;min-width:0;flex-direction:column;gap:4px}
.gc-party-main b{overflow:hidden;color:#25242B;font-size:14px;text-overflow:ellipsis;white-space:nowrap}
.gc-party-main small{overflow:hidden;color:#8D8B96;font-size:11px;text-overflow:ellipsis;white-space:nowrap}
.gc-party-main em{overflow:hidden;color:#E36D8B;font-size:10px;font-style:normal;text-overflow:ellipsis;white-space:nowrap}
.gc-empty-small{min-height:96px;padding:14px;flex-direction:row;justify-content:flex-start;gap:10px}
.gc-empty-small .gc-create{margin:0 0 0 auto}
.gc-row{display:flex;align-items:center;gap:11px;min-height:72px;padding:10px 16px;border-bottom:1px solid var(--line-2);cursor:pointer}
.gc-row:active{background:#F8F8FA}
.gc-row-av{width:48px;height:48px;border-radius:14px;object-fit:cover;background:#FFF0F4;flex:none}
.gc-row-main{flex:1;min-width:0}
.gc-row-top{display:flex;align-items:center;gap:7px;min-width:0}
.gc-row-top b{font-size:14px;color:#25242B;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.gc-row-top i{font-style:normal;min-width:18px;height:18px;padding:0 5px;border-radius:9px;background:#FF4C81;color:#fff;font-size:10px;line-height:18px;text-align:center}
.gc-row-main>span{display:block;margin-top:5px;color:#92919B;font-size:12px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.gc-row small{color:#A4A2AC;font-size:10px;flex:none}
.gc-row-arrow{color:#B9B7C0;font-size:20px;line-height:1;flex:none}
.gc-empty{display:flex;align-items:center;justify-content:center;flex-direction:column;gap:8px;min-height:260px;padding:24px;color:#8A8A94;text-align:center;font-size:12px}
.gc-empty b{font-size:15px;color:#4A4852}
.gc-create{margin-top:8px;height:34px;padding:0 18px;border:0;border-radius:17px;background:var(--brand-grad);color:#fff;font-size:12px;font-weight:600;cursor:pointer}
.gc-create:disabled{opacity:.55}
.gc-error{color:#C0392B}
.wedding-list-page{position:relative;display:flex;flex:1;min-height:0;flex-direction:column;overflow:hidden;background:linear-gradient(180deg,#F9B4C6 0%,#FFD3C8 100%);color:#5B3D56}
.wedding-list-nav{height:48px;flex:none;display:flex;align-items:center;justify-content:space-between;padding:0 17px;color:#1F1821;background:rgba(255,226,232,.72)}
.wedding-list-nav .nb-back{width:28px;height:34px;display:flex;align-items:center;cursor:pointer}
.wedding-list-nav b{font-size:18px;font-weight:700}
.wedding-list-nav>span:last-child{font-size:12px;font-weight:600}
/* 真机 a28fb78a f_0164 量的（box = 屏幕 CSS 坐标）：
   日期胶囊 box 81.9..113.1（高 31.2）、选中那颗 css x 94.4..161.2（宽 66.9）；
   第一张卡 138.1 起、卡片 x 16.2..344.4、card 边框盒高 109（内区 105）、卡间距 18.1；
   底部「预约婚礼」box 710.6..753.8（高 43.1）、css x 15.0..346.2。
   ⚠ 真机这条列表**没有滚动条**，我们原来右边多出一条深色条并把卡片挤窄 8px，所以这里关掉。 */
.wedding-list-scroll{flex:1;min-height:0;overflow-y:auto;padding:6px 16px 94px;scrollbar-width:none}
.wedding-list-scroll::-webkit-scrollbar{display:none;width:0}
.wedding-date-strip{display:flex;gap:6px;overflow-x:auto;padding:28px 0 25px;scrollbar-width:none}
.wedding-date-strip::-webkit-scrollbar{display:none}
.wedding-date{height:31px;min-width:67px;padding:0 12px;border:0;border-radius:16px;background:rgba(255,170,203,.68);color:#fff;font-size:13px;white-space:nowrap;cursor:pointer}
.wedding-date.on{background:#F05A8D;color:#fff;box-shadow:0 5px 12px rgba(195,48,105,.2)}
.wedding-cards{display:flex;flex-direction:column;gap:18px}
.wedding-card{padding:8px 12px 7px;background:#FFF7E9;border:2px solid #FF9F86;box-shadow:0 2px 5px rgba(176,72,89,.15);cursor:pointer}
.wedding-card-head{display:grid;grid-template-columns:minmax(0,1fr) auto auto;align-items:center;gap:8px;min-height:17px}
.wedding-card-head b{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;font-size:13px;color:#654C70;font-weight:500}
.wedding-card-head time{font-size:12px;color:#654C70;white-space:nowrap}
.wedding-status{padding:2px 5px;background:#F8C95A;color:#fff;font-size:9px;white-space:nowrap}
.wedding-card-body{display:flex;align-items:center;gap:10px;margin-top:14px}
.wedding-person{width:56px;height:56px;border-radius:50%;overflow:hidden;background:#F5D9DD;flex:none}
.wedding-person img{width:100%;height:100%;object-fit:cover}
.wedding-relation{display:flex;flex:1;min-width:40px;align-items:center;flex-direction:column;gap:2px;color:#C98286;font-size:11px;white-space:nowrap}
.wedding-relation img{width:27px;height:27px;object-fit:contain}
.wedding-relation .wed-ring{width:26px;height:26px;display:block}
.wedding-enter{height:38px;padding:0 13px;border:1px solid #E8A2B2;border-radius:20px;background:transparent;color:#C77684;font-size:12px;white-space:nowrap;cursor:pointer}
.wedding-book{position:absolute;left:15px;right:15px;bottom:46px;height:43px;border:0;border-radius:22px;background:linear-gradient(100deg,#F83487,#FF805D);color:#fff;font-size:16px;font-weight:600;box-shadow:0 8px 18px rgba(195,54,101,.24);cursor:pointer}
.wedding-empty-note{padding:28px 0;text-align:center;color:#9D687D;font-size:13px}
.we-loading,.we-empty{padding:42px 16px;text-align:center;font-size:12px;line-height:1.8;color:#9A8C94}
.we-empty small{font-size:11px;color:#B3A6AC}
.we-error{color:#C0392B}
.wedding-room-open{align-self:center;margin:8px auto 0;height:34px;padding:0 18px;border:1px solid rgba(255,214,150,.7);border-radius:18px;background:rgba(255,174,75,.22);color:#FFE6AF;font-size:12px;cursor:pointer}
.msg-foot{position:absolute;left:0;right:0;bottom:calc(58px + var(--safe-bottom,0px));display:flex;
  align-items:center;gap:10px;padding:10px 14px;background:#fff;box-shadow:0 -3px 12px rgba(0,0,0,.07);z-index:20}
.msg-foot[hidden]{display:none}
.msg-foot .mf-t{flex:1;font-size:13px;color:#6E6E76}
.msg-foot .pill-btn{height:32px;padding:0 16px;border-radius:16px;display:inline-flex;align-items:center;
  justify-content:center;font-size:13px;cursor:pointer}
.msg-foot .pill-btn.ghost{color:#6E6E76;box-shadow:inset 0 0 0 1px #E4E3E8;background:#fff}
.msg-empty{padding:40px 24px;text-align:center;font-size:13px;line-height:21px;color:#8A8A94}

/* --- 个人主页(TA)：真机版式（大图轮播 + 三段 + 底部三操作条）--- */
.uh-body{flex:1;min-height:0;overflow-y:auto;overflow-x:hidden;background:var(--soft-bg);scrollbar-width:none}
.uh-body::-webkit-scrollbar{width:0;height:0}
.uh-media{position:relative;height:342px;background:#16161c;overflow:hidden}
/* top 必须带状态栏高度：壳里 WebView 是 edge-to-edge 的，`.screen` 从**屏幕最顶端**开始，
   内容靠 .sysbar 往下顶，而这条 topbar 是 absolute —— top:0 就是压在系统状态栏底下，
   返回键看不见（07-14 手机截图：一整条都在状态栏里）。--safe-top 由壳读 WindowInsets 写入，
   浏览器里是 env(safe-area-inset-*)，桌面为 0，所以这里不会动到网页版。 */
.uh-topbar{position:absolute;z-index:20;top:var(--safe-top,0px);left:0;right:0;height:46px;padding:0 6px;display:flex;align-items:center;justify-content:space-between;color:#fff;transition:background .2s,color .2s}
/* 顶部压暗：原来只有 .3 → 0 的一层，压在**亮照片**（海滩 / 白墙）上白字就糊没了 ——
   07-14 手机上「返回键看不见了」是这个，不是按钮跑出屏幕。改成三段、起手更深，
   并且给返回 / 更多两颗按钮加半透明圆底（旧 WebView 不支持 backdrop-filter，所以是实色）。 */
.uh-topbar::before{content:"";position:absolute;inset:0;pointer-events:none;
  background:linear-gradient(180deg,rgba(0,0,0,.55),rgba(0,0,0,.22) 62%,rgba(0,0,0,0))}
.uh-topbar.solid{background:#fff;color:#1B1B20}.uh-topbar.solid::before{display:none}
.uh-topbar button{position:relative;width:34px;height:34px;display:flex;align-items:center;justify-content:center;color:inherit;background:rgba(0,0,0,.28);border-radius:50%;flex:none}
.uh-topbar.solid button{background:none}
.uh-topbar .ico{width:24px;height:24px;filter:drop-shadow(0 1px 2px rgba(0,0,0,.3))}
.uh-topbar img{width:22px;height:22px;object-fit:contain}
.uh-topbar.solid .ico{filter:none}
.uh-back .ico{transform:rotate(180deg)}
.uh-top-title{position:relative;flex:1;text-align:center;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;font-size:16px;font-weight:600;opacity:0;transition:opacity .2s}
.uh-topbar.solid .uh-top-title{opacity:1}
.uh-track{display:flex;height:100%;overflow-x:auto;overflow-y:hidden;scroll-snap-type:x mandatory;-webkit-overflow-scrolling:touch}
.uh-track::-webkit-scrollbar{height:0}
.uh-slide{flex:none;width:100%;height:100%;scroll-snap-align:center}
.uh-slide img,.uh-slide video{width:100%;height:100%;object-fit:cover}
/* 轮播指示：真机 a28fb78a f_0112 不是圆点，是右下角一排小缩略图（当前那张带白描边）。
   量自 f_0112（帧px/1.6）：缩略图 60×59 → 37.5×37 CSS、间距 10 → 6.25、第一张左边缘 262 → 163.75、
   下沿 537 离照片底 550 有 13 → 8.1；整排是方图（里面的图竖着是内容，不是框）。 */
.uh-dots{display:none}
/* 守护徽章：真机量到整枚（含两侧羽翼、顶部吊饰）外框 85×68，右沿贴屏幕右边、下沿离照片底 56.75。 */
.uh-media .uh-guard{position:absolute;right:0;bottom:56.75px;width:85px;height:68px;
  padding:0;background:none;border-radius:0;color:#fff;cursor:pointer}
.uh-media .uh-guard[hidden],.uh-actions[hidden]{display:none!important}
.uh-media .uh-guard svg{width:100%;height:100%;display:block}
/* 视频按钮：从「画面左下角的长胶囊」改成**画面正中的白色半透明圆钮**（用户 2026-10-14 反馈：
   播放胶囊和「我的语音」胶囊都贴在左下角，两条糊在一起，分不清哪条管视频哪条管语音）。
   视频**不自动播放**，必须点这颗钮。静音钮缩成左下角一颗小圆钮（右下角被缩略图行占着）。 */
.uh-vplay{position:absolute;left:50%;top:50%;transform:translate(-50%,-50%);z-index:4;
  width:62px;height:62px;border-radius:50%;display:flex;align-items:center;justify-content:center;
  background:rgba(255,255,255,.26);border:1.5px solid rgba(255,255,255,.78);color:#fff;
  -webkit-backdrop-filter:blur(2px);backdrop-filter:blur(2px);box-shadow:0 4px 16px rgba(0,0,0,.22);cursor:pointer}
.uh-vplay[hidden]{display:none!important}
.uh-vplay .ico{width:26px;height:26px;margin-left:2px}
.uh-vplay.on .ico{margin-left:0}
.uh-vmute{position:absolute;left:14px;bottom:12px;z-index:4;width:34px;height:34px;border-radius:50%;
  display:flex;align-items:center;justify-content:center;background:rgba(22,18,26,.42);
  border:1px solid rgba(255,255,255,.42);color:#fff;cursor:pointer}
.uh-vmute[hidden]{display:none!important}
.uh-vmute .ico{width:17px;height:17px}
/* 语音条：从画面里搬出来，单独一条放在大图下方、昵称上方（用户要求它只播个人语音介绍，
   和相册视频彻底分开）。渐变长条 + 左侧圆形播放键，进页面可自动播（设置里能关）。 */
.uh-voice-bar{display:flex;align-items:center;gap:10px;margin:0 0 15px;padding:9px 14px;border-radius:16px;
  background:linear-gradient(105deg,#FA5AB4,#8E61FF);color:#fff;cursor:pointer;
  box-shadow:0 5px 14px rgba(111,75,205,.24)}
.uh-voice-bar[hidden]{display:none!important}
.uh-vb-play{flex:none;width:30px;height:30px;border-radius:50%;display:flex;align-items:center;justify-content:center;
  background:rgba(255,255,255,.94);color:#C2428F}
.uh-vb-play .ico{width:15px;height:15px;margin-left:1px}
.uh-voice-bar.on .uh-vb-play .ico{margin-left:0}
.uh-vb-title{font-size:14px;font-weight:600}
.uh-vb-dur{margin-left:auto;font-size:12.5px;opacity:.93}
/* 轮播缩略图行：真机 a28fb78a f_0112 量出来的 —— 37.5×37（当前那张 2px 白描边）、
   间距 6.25、第一张左边缘 163.75、下沿离照片底 8.1；照片多于 5 张时最右边那张会被屏幕裁一半（真机就是这样）。 */
.uh-thumbrail{position:absolute;left:163.75px;bottom:8.1px;display:flex;gap:6.25px;z-index:3}
.uh-thumbrail[hidden]{display:none!important}
.uh-thumbrail img,.uh-thumbrail video,.uh-thumbrail button{width:37.5px;height:37px;flex:none;border-radius:6px;object-fit:cover;border:2px solid transparent;background:rgba(36,29,39,.45)}
.uh-thumbrail img.on,.uh-thumbrail video.on{border-color:#fff}
.uh-thumbrail button{color:#fff;font-size:22px;display:flex;align-items:center;justify-content:center;border-color:rgba(255,255,255,.85)}
.uh-sheet{background:#fff;padding:22px 14px 0;position:relative}
.uh-name{font-size:16px;font-weight:700;line-height:1.4;color:#111114;display:flex;align-items:center;gap:3.1px}
/* 「获赞: N」：真机 f_0112 里它距前面那串距离 11.8 CSS。 */
.uh-liked{margin-left:11.8px}
.uh-meta{font-size:12px;color:#8A8A92;margin-top:10px;line-height:1.4}
.uh-uid{font-size:12px;color:#96969E;margin-top:8px;line-height:1.4;display:flex;align-items:center;gap:10px}
.uh-uid .uh-copy{color:#96969E;cursor:pointer}
.uh-pane{padding:15px 0 12px}
.uh-h{font-size:14px;font-weight:700;color:#16161A;margin:18px 0 15px}
.uh-pane>.uh-sec:first-child .uh-h{margin-top:0}
.uh-info{display:grid;grid-template-columns:1fr 1fr;background:#F7F8FA;border-radius:10px;padding:6px 15px 3px}
.uh-i-wide{grid-column:1/-1}
.uh-i-wide b{white-space:normal;line-height:1.25}
.uh-i{display:flex;align-items:center;min-height:36px;padding:0;min-width:0;line-height:1.5}
.uh-i-wide{min-height:0;align-items:flex-start;padding:9px 0}
.uh-i i{font-style:normal;color:#999AA0;font-size:12px;flex:none;width:55px}
.uh-i b{font-weight:400;font-size:13px;color:#2D2D33;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;min-width:0}
.uh-intro{font-size:var(--fs-13);line-height:1.75;color:var(--t2);background:var(--soft-bg);border-radius:12px;padding:12px}
.uh-empty-copy{color:var(--t3)}.uh-fill-profile{float:right;height:30px;padding:0 14px;border-radius:15px;background:var(--brand-grad);color:#fff;font-size:12px}.uh-medals span,.uh-gifts span{font-size:13px;color:var(--t3)}
.uh-certs{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:9px}
.uh-cert{--cert-soft:#FFF2F7;--cert-mark:#E56A98;position:relative;display:flex;align-items:center;gap:9px;min-width:0;min-height:58px;
  padding:9px 10px;border-radius:14px;box-sizing:border-box;overflow:hidden;
  background:linear-gradient(135deg,var(--cert-soft),#fff 72%);box-shadow:0 2px 10px rgba(39,33,53,.035)}
.uh-cert.tone-blue{--cert-soft:#F0F5FF;--cert-mark:#6289E7}
.uh-cert.tone-amber{--cert-soft:#FFF7E9;--cert-mark:#E8A03E}
.uh-cert.tone-mint{--cert-soft:#EEFAF4;--cert-mark:#45AE82}
.uh-cert-icon{width:34px;height:34px;flex:none;border-radius:50%;display:flex;align-items:center;justify-content:center;
  background:rgba(255,255,255,.82);box-shadow:0 1px 5px rgba(42,34,58,.06)}
.uh-cert-icon img{width:23px;height:23px;display:block;object-fit:contain}
.uh-cert-copy{display:flex;flex:1;min-width:0;flex-direction:column;gap:3px}
.uh-cert-copy b{font-size:13px;font-weight:600;line-height:1.2;color:#33323A;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.uh-cert-copy em{font-style:normal;font-size:11px;line-height:1.15;color:#2E9B74}
.uh-cert-mark{width:6px;height:6px;flex:none;border-radius:50%;background:var(--cert-mark);box-shadow:0 0 0 3px rgba(229,106,152,.08)}
.uh-cert.tone-blue .uh-cert-mark{box-shadow:0 0 0 3px rgba(98,137,231,.08)}
.uh-cert.tone-amber .uh-cert-mark{box-shadow:0 0 0 3px rgba(232,160,62,.09)}
.uh-cert.tone-mint .uh-cert-mark{box-shadow:0 0 0 3px rgba(69,174,130,.09)}
.uh-cert.is-off{opacity:.58}
.uh-cert.is-off .uh-cert-icon{filter:grayscale(1);opacity:.72}
.uh-cert.is-off .uh-cert-copy b{color:#77747D}
.uh-cert.is-off .uh-cert-copy em{color:#9B98A1}
.uh-cert.is-off .uh-cert-mark{background:#C8C6CC;box-shadow:none}
.uh-cert-demo{grid-column:1/-1;min-height:44px;background:#F7F7FA}
.uh-tags{display:flex;flex-wrap:wrap;gap:8px}
.uh-tags span{height:26px;padding:0 12px;border-radius:13px;display:inline-flex;align-items:center;font-size:var(--fs-12)}
.uh-tags span.p{background:#FFF1F6;color:#E8548A}
.uh-tags span.b{background:#EFF4FB;color:#5B7BE8}
.uh-hobby{display:flex;flex-direction:column;gap:9px}
.uh-hobby-row{display:flex;align-items:flex-start;gap:8px}
.uh-hobby-row>i{font-style:normal;font-size:12px;color:#999AA0;flex:none;width:55px;line-height:26px}
.uh-hobby-row .uh-tags{flex:1;min-width:0;gap:6px}
.uh-info.uh-deep .uh-i{align-items:flex-start;padding:7px 0}
.uh-info.uh-deep .uh-i b{white-space:normal;line-height:1.35;overflow:visible;text-overflow:clip}
.uh-slide.uh-noimg{display:flex;align-items:center;justify-content:center;background:#F2F3F7;
  color:var(--t3);font-size:var(--fs-13)}
.uh-none{padding:40px 0;text-align:center;font-size:var(--fs-13);color:var(--t3)}
.uf{background:#fff;border-bottom:1px solid var(--line-3);padding:12px 2px;cursor:pointer}
.uf-h{display:flex;align-items:center}
.uf-h .uf-d{font-size:var(--fs-12);color:var(--t2);background:var(--soft-bg);border-radius:10px;padding:3px 10px}
.uf-h .uf-r{margin-left:auto;font-size:var(--fs-12);color:var(--t3)}
.uf-t{font-size:var(--fs-14);margin:8px 0 0;line-height:1.55}
.uf-img{width:74%;max-height:300px;object-fit:cover;border-radius:10px;margin-top:8px}
.uf-f{display:flex;align-items:center;gap:16px;margin-top:8px;font-size:var(--fs-12);color:var(--t3)}
.uf-f .n{display:inline-flex;align-items:center;gap:4px}
.uf-f .n .ico{width:15px;height:15px}
.uh-actions{display:flex;align-items:center;justify-content:space-between;gap:8px;padding:12px 14px 26px;background:#fff;
  border-top:1px solid #F2F0F4;flex:none;position:relative;z-index:6}
.uh-greet{width:192px;flex:none;height:42px;border-radius:21px;background:linear-gradient(90deg,#FF4E86,#FF9166);color:#fff;
  display:flex;align-items:center;justify-content:center;gap:9px;font-size:15px;font-weight:600;cursor:pointer}
.uh-hi{width:24px;height:24px;border-radius:50%;background:#fff;color:#FF4E86;font-size:11px;font-weight:800;
  display:flex;align-items:center;justify-content:center;letter-spacing:-.5px;flex:none}
.uh-greet img{width:22px;height:22px;object-fit:contain}
.uh-act2{flex:none;display:flex;align-items:center;gap:5px;font-size:15px;color:#55555F;padding:0;cursor:pointer}
.uh-act2 img{width:22px;height:22px;object-fit:contain}
.uh-act2 .ico{width:22px;height:22px;color:#8A8A94}
.uh-follow.on{color:var(--brand)}
.uh-follow.on .ico{color:var(--brand)}

/* --- 通话页 --- */
.call{background:linear-gradient(170deg,#241B3A,#120E1E)}
.call .remote{position:absolute;inset:0;background-size:cover;background-position:center}
.call .self{position:absolute;right:14px;top:152px;width:96px;height:142px;border-radius:14px;overflow:hidden;box-shadow:0 8px 20px rgba(0,0,0,.5);border:1px solid rgba(255,255,255,.25)}
.call .self img{width:100%;height:100%;object-fit:cover}
.call .cinfo2{position:absolute;left:0;right:0;top:58px;text-align:center;color:#fff;z-index:6}
.call .cinfo2 .nm{font-size:22px;font-weight:700}
.call .timer{margin-top:8px;font-size:var(--fs-15);opacity:.9;font-variant-numeric:tabular-nums}
.call .rate{margin-top:6px;display:inline-flex;align-items:center;gap:5px;background:rgba(255,199,0,.18);color:var(--gold-2);font-size:var(--fs-12);padding:3px 12px;border-radius:12px}
.call .giftfly{position:absolute;left:18px;bottom:200px;display:flex;align-items:center;gap:8px;color:#fff;font-size:var(--fs-12);background:rgba(0,0,0,.35);padding:6px 12px;border-radius:14px}
.call-ctrls{position:absolute;left:0;right:0;bottom:30px;display:flex;justify-content:center;gap:13px}
.call-ctrls .cc{display:flex;flex-direction:column;align-items:center;gap:6px;color:#fff;font-size:var(--fs-10)}
.call-ctrls .cc .cir{width:46px;height:46px;border-radius:50%;background:rgba(255,255,255,.18);display:flex;align-items:center;justify-content:center;backdrop-filter:blur(6px)}
.call-ctrls .cc .cir img{width:23px;height:23px;object-fit:contain}
/* `.cir.solid` = 这个按钮用的是「整块不透明的按钮素材」（l-hangup 红圆 / i-videoblue 蓝圆 / i-brush 美颜），
   素材自己就是按钮本体：再画一层圆底、再 invert 染白，只会把整块遮罩填成一坨白圆（字形消失）。
   细字形素材仍然走上面 .cir 的半透明圆底 + 行内 invert 染白。判据见 js/ast.js 的 SOLID_BTN。 */
.call-ctrls .cc .cir.solid{background:none;backdrop-filter:none;box-shadow:none}
.call-ctrls .cc .cir.solid img{width:46px;height:46px}

/* --- 1v1 音视频通话（2026-10-29 重做） ---
   视频：远端全屏，本地小窗贴右上，顶部只留昵称和计时，底部一排纯图标控制。
   语音：深色底 + 真头像 + 计时，不再拿素材照片冒充对方画面。
   两层都按安全区留白，底部挂断键不会再压到系统手势条上。 */
.vcall,.acall{position:absolute;inset:0;overflow:hidden;background:#111014;color:#fff;z-index:1;
  -webkit-tap-highlight-color:transparent;isolation:isolate}
.vcall-remote{position:absolute;inset:0;z-index:2;background:transparent;overflow:hidden}
.vcall-remote video,.vcall-pip [data-rtc-local] video{
  display:block!important;width:100%!important;height:100%!important;object-fit:cover}
.vcall-idle{position:absolute;inset:0;z-index:1;display:flex;align-items:center;justify-content:center;
  background:radial-gradient(120% 78% at 50% 0%,#242129 0%,#141216 52%,#0E0D10 100%)}
.vcall-idle .id-av{position:relative;width:98px;height:98px;border-radius:50%;object-fit:cover;
  box-shadow:0 14px 36px rgba(0,0,0,.38)}
.vcall-shade{position:absolute;inset:0;z-index:3;pointer-events:none;
  background:linear-gradient(180deg,rgba(10,9,12,.52) 0%,rgba(10,9,12,.06) 24%,transparent 44%,transparent 64%,rgba(10,9,12,.66) 100%)}
.vcall-top{position:absolute;left:0;right:0;top:0;z-index:5;padding:calc(var(--safe-top,0px) + 18px) 28px 0;
  box-sizing:border-box;text-align:center;pointer-events:none}
.vcall-name{display:block;font-size:16.5px;line-height:23px;font-weight:600;letter-spacing:.2px;color:#fff;
  overflow:hidden;white-space:nowrap;text-overflow:ellipsis;text-shadow:0 1px 8px rgba(0,0,0,.45)}
.vcall-timer{display:block;margin-top:3px;font-size:12px;line-height:17px;color:rgba(255,255,255,.66);
  font-variant-numeric:tabular-nums;text-shadow:0 1px 8px rgba(0,0,0,.45)}
.vcall-pip{position:absolute;right:14px;top:calc(var(--safe-top,0px) + 74px);z-index:5;width:88px;height:120px;
  border-radius:14px;overflow:hidden;background:#1A181E;
  border:1px solid rgba(255,255,255,.16);box-shadow:0 8px 22px rgba(0,0,0,.28)}
.vcall-pip [data-rtc-local]{position:absolute;inset:0;z-index:1;background:transparent;overflow:hidden}
.vcall-pip .pip-av{position:absolute;inset:0;width:100%;height:100%;object-fit:cover;opacity:.5}
.vcall-controls{position:absolute;left:0;right:0;bottom:calc(30px + var(--safe-bottom, env(safe-area-inset-bottom,0px)));
  z-index:7;display:flex;align-items:center;justify-content:center;gap:26px}
.vcall-btn{width:56px;height:56px;border-radius:50%;border:none;
  background:rgba(255,255,255,.12);color:#fff;display:flex;align-items:center;justify-content:center;
  padding:0;cursor:pointer;-webkit-backdrop-filter:blur(18px);backdrop-filter:blur(18px);
  transition:background .16s ease,transform .12s ease}
.vcall-btn:active{transform:scale(.94);background:rgba(255,255,255,.2)}
.vcall-btn svg{width:23px;height:23px;display:block;pointer-events:none}
.vcall-btn .slash{opacity:0;transition:opacity .16s ease}
.vcall-btn.on{background:#fff;color:#26202C}
.vcall-btn.on .slash{opacity:1}
.vcall-btn.hangup{width:64px;height:64px;background:#FF3B30;box-shadow:0 8px 24px rgba(255,59,48,.28)}
.vcall-btn.hangup svg{transform:rotate(135deg)}
.vcall-btn.hangup:active{background:#E9342A}
.vcall-status{position:absolute;left:24px;right:24px;bottom:calc(110px + var(--safe-bottom, env(safe-area-inset-bottom,0px)));
  z-index:8;margin:0 auto;max-width:310px;text-align:center;color:rgba(255,255,255,.66);font-size:12px;
  line-height:17px;text-shadow:0 1px 8px rgba(0,0,0,.55);pointer-events:none}
.vcall-status[hidden]{display:none}

/* 语音通话：纯色底，只留头像 / 昵称 / 计时，底部三键。 */
.acall{background:radial-gradient(120% 78% at 50% 0%,#242129 0%,#141216 52%,#0E0D10 100%)}
.acall::before{display:none}
.acall-main{position:absolute;left:0;right:0;top:calc(50% - 180px);z-index:3;text-align:center}
.acall-avatar{display:block;width:98px;height:98px;margin:0 auto;border-radius:50%;object-fit:cover;
  background:#2A2730;box-shadow:0 14px 36px rgba(0,0,0,.38)}
.acall-name{margin-top:22px;padding:0 28px;box-sizing:border-box;font-size:21px;line-height:29px;
  font-weight:600;color:#fff;letter-spacing:.2px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.acall-meta{margin-top:8px;display:flex;align-items:center;justify-content:center;
  min-height:18px;font-size:12.5px;line-height:18px;color:rgba(255,255,255,.58);
  font-variant-numeric:tabular-nums}
.acall-timer{font-size:12.5px}
.acall-rate{display:inline-flex;align-items:center;gap:4px;color:rgba(255,255,255,.58);font-size:12px}
.acall-rate:empty{display:none}
.acall-rate:not(:empty)::before{content:'·';margin:0 7px;color:rgba(255,255,255,.32)}
.acall-rate img{width:13px;height:13px;opacity:.72}
.acall-controls .vcall-btn{background:rgba(255,255,255,.1)}
.acall-controls .vcall-btn.on{background:#fff;color:#26202C}

/* --- 直播 --- */
.live{background:#000}
.live .lv-bg{position:absolute;inset:0;background-size:cover;background-position:center}
.live .lv-mask{position:absolute;inset:0;background:linear-gradient(180deg,rgba(0,0,0,.45),transparent 32%,transparent 52%,rgba(0,0,0,.72))}
.live .top{position:absolute;top:64px;left:12px;right:12px;display:flex;gap:10px;align-items:flex-start;z-index:5}
.live .anchor{display:flex;align-items:center;gap:8px;background:rgba(0,0,0,.34);border-radius:22px;padding:4px 12px 4px 4px;backdrop-filter:blur(6px)}
.live .anchor img.a{width:36px;height:36px;border-radius:50%;object-fit:cover;border:1.5px solid rgba(255,255,255,.7)}
.live .anchor .txt{color:#fff}
.live .anchor .txt b{font-size:var(--fs-13);display:flex;align-items:center;gap:5px}
.live .anchor .txt small{font-size:var(--fs-10);opacity:.85}
.live .topright{margin-left:auto;display:flex;align-items:center;gap:8px;color:#fff}
.live .vchip{display:flex;align-items:center;gap:4px;background:rgba(0,0,0,.34);border-radius:14px;padding:5px 11px;font-size:var(--fs-11);backdrop-filter:blur(6px)}
.live .ranks{position:absolute;right:12px;top:150px;display:flex;flex-direction:column;gap:20px;z-index:5}
.live .ranks .rk{width:44px;text-align:center}
.live .ranks .rk img{width:44px;height:44px;border-radius:50%;object-fit:cover;border:2px solid rgba(255,199,0,.85);box-shadow:0 4px 12px rgba(0,0,0,.45)}
.live .giftbar{position:absolute;left:0;right:0;bottom:128px;display:flex;justify-content:center;align-items:center;z-index:6;pointer-events:none}
.live .giftbar img{width:96px;height:96px;object-fit:contain;filter:drop-shadow(0 6px 18px rgba(255,80,140,.65))}
.live .danmu{position:absolute;left:12px;right:92px;bottom:222px;z-index:5;display:flex;flex-direction:column;gap:6px}
.live .danmu .dm{font-size:var(--fs-12);color:#fff;background:rgba(0,0,0,.32);border-radius:12px;padding:5px 11px;width:fit-content;backdrop-filter:blur(4px)}
.live .danmu .dm b{color:#FFB1D0;font-weight:600}
.live .bottom{position:absolute;left:12px;right:12px;bottom:30px;display:flex;align-items:center;gap:10px;z-index:7}
.live .bottom .say{flex:1;height:40px;border-radius:20px;background:rgba(255,255,255,.2);backdrop-filter:blur(8px);display:flex;align-items:center;padding:0 16px;color:rgba(255,255,255,.85);font-size:var(--fs-13)}
.live .bottom .rt{width:38px;height:38px;border-radius:50%;background:rgba(255,255,255,.2);backdrop-filter:blur(8px);display:flex;align-items:center;justify-content:center}
.live .bottom .rt img{width:24px;height:24px;object-fit:contain}

/* 直播间：主播卡片 / 点赞 / 观众与主播两套工具区 / 礼物特效 / 连麦管理 */
.live .top{left:10px;right:10px;gap:8px}
.live .anchor{min-width:0;max-width:calc(100% - 136px);box-sizing:border-box;padding:4px 9px 4px 4px}
.live .anchor .txt{min-width:0}
.live .anchor .txt b{min-width:0;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.live .anchor .txt small{display:block;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.live .anchor .lv-level{font-size:10px;opacity:.82;font-weight:500}
.live .lv-follow{flex:none;height:26px;padding:0 10px;border:1px solid rgba(255,255,255,.55);border-radius:13px;
  background:rgba(255,255,255,.12);color:#fff;font-size:11px;font-weight:600;cursor:pointer;
  display:inline-flex;align-items:center;justify-content:center;gap:3px;white-space:nowrap}
.live .lv-follow-plus{font-size:15px;line-height:1;font-weight:500;color:#FFC7DD;margin-top:-1px}
.live .lv-follow.on{border-color:rgba(255,255,255,.24);background:rgba(255,255,255,.16);color:rgba(255,255,255,.7)}
.live .lv-self-tag{flex:none;padding:3px 8px;border-radius:10px;background:rgba(255,91,144,.72);
  font-size:10px;font-weight:600;color:#fff}
.live .lv-rail{position:absolute;right:11px;bottom:calc(96px + var(--safe-bottom,0px));z-index:9;
  display:flex;flex-direction:column;align-items:center;gap:11px}
.live .lv-tool{position:relative;width:48px;height:58px;border:0;padding:0;background:transparent;
  color:#fff;display:flex;flex-direction:column;align-items:center;justify-content:flex-start;gap:4px;
  cursor:pointer;-webkit-tap-highlight-color:transparent}
.live .lv-tool-ico{width:44px;height:44px;border-radius:50%;display:flex;align-items:center;justify-content:center;
  background:rgba(20,15,26,.38);border:1px solid rgba(255,255,255,.18);
  -webkit-backdrop-filter:blur(10px);backdrop-filter:blur(10px);
  box-shadow:0 5px 16px rgba(0,0,0,.24);transition:transform .14s ease,background .14s ease}
.live .lv-tool:active .lv-tool-ico{transform:scale(.92);background:rgba(255,255,255,.22)}
.live .lv-tool-ico .ico{width:23px;height:23px;display:flex;align-items:center;justify-content:center}
.live .lv-tool-ico svg{width:23px;height:23px;display:block}
.live .lv-tool small{font-size:10px;line-height:12px;color:rgba(255,255,255,.92);
  text-shadow:0 1px 4px rgba(0,0,0,.55);white-space:nowrap}
.live .lv-tool[disabled]{opacity:.5;pointer-events:none}
.live .lv-badge{position:absolute;left:30px;top:-3px;min-width:17px;height:17px;padding:0 4px;box-sizing:border-box;
  border-radius:9px;background:#FF3F73;color:#fff;font-size:10px;line-height:17px;text-align:center;
  font-style:normal;box-shadow:0 2px 8px rgba(255,63,115,.45)}
.live .lv-tools{display:flex;align-items:center;gap:8px;flex:none}
.live .lv-like{height:40px;min-width:58px;padding:0 12px;border-radius:20px;border:1px solid rgba(255,255,255,.16);
  background:rgba(20,15,26,.32);backdrop-filter:blur(8px);color:#fff;display:flex;align-items:center;
  justify-content:center;gap:5px;cursor:pointer;-webkit-tap-highlight-color:transparent}
.live .lv-like .ico,.live .lv-like svg{width:20px;height:20px;display:block;color:#FF8FB4}
.live .lv-like span{font-size:12px;font-weight:600;font-variant-numeric:tabular-nums}
.live .lv-like:active{transform:scale(.95)}
.live .lv-fx{position:absolute;inset:0;z-index:22;overflow:hidden;pointer-events:none}
.live .lv-giftfx{position:absolute;left:50%;top:38%;width:210px;height:180px;margin-left:-105px;
  display:flex;align-items:center;justify-content:center;animation:lvGiftFloat 2.4s cubic-bezier(.18,.75,.22,1) both}
.live .lv-giftfx img{width:112px;height:112px;object-fit:contain;position:relative;z-index:2;
  filter:drop-shadow(0 14px 30px rgba(255,82,146,.55));animation:lvGiftPop .7s cubic-bezier(.18,.9,.3,1.25) both}
.live .lv-fx-copy{position:absolute;left:50%;top:132px;transform:translateX(-50%);z-index:3;
  display:flex;align-items:baseline;gap:5px;padding:4px 14px;border-radius:14px;
  background:linear-gradient(100deg,rgba(255,75,139,.94),rgba(179,92,255,.9));
  box-shadow:0 7px 22px rgba(255,65,137,.42);white-space:nowrap}
.live .lv-fx-copy b{font-size:13px;color:#fff}
.live .lv-fx-copy small{font-size:12px;color:rgba(255,255,255,.9);font-weight:700}
.live .lv-fx-ring{position:absolute;left:50%;top:52px;width:114px;height:114px;margin-left:-57px;border-radius:50%;
  border:2px solid rgba(255,171,209,.9);box-shadow:0 0 34px rgba(255,95,158,.8),inset 0 0 28px rgba(255,213,231,.55);
  animation:lvGiftRing .95s ease-out both}
.live .lv-fx-spark{position:absolute;left:50%;top:52%;width:7px;height:7px;border-radius:50%;
  background:#FFD7E7;box-shadow:0 0 12px #FF709F;animation:lvSpark 1.15s ease-out both}
.live .lv-fx-spark.s2{width:5px;height:5px;animation-delay:.08s}
.live .lv-fx-spark.s3{width:4px;height:4px;animation-delay:.16s}
.live .lv-fx-spark.s4{width:6px;height:6px;animation-delay:.24s}
.live .lv-like-fly{position:absolute;right:20px;bottom:96px;width:21px;height:21px;color:#FF6C9D;
  animation:lvLikeFly 1.55s ease-out var(--delay,0ms) both}
.live .lv-like-fly svg{width:21px;height:21px;filter:drop-shadow(0 2px 7px rgba(255,70,130,.4))}
.live .danmu .dm-gift{display:flex;align-items:center;gap:6px;background:linear-gradient(100deg,rgba(122,42,86,.72),rgba(74,35,105,.66));
  border:1px solid rgba(255,160,199,.32)}
.live .danmu .dm-gift img{width:23px;height:23px;object-fit:contain;flex:none}
.live .danmu .dm-gift b{flex:none}
.live .danmu .dm-gift em{font-style:normal;color:#FFE0EF}
.live .danmu .dm-cohost{background:rgba(117,76,194,.58);border:1px solid rgba(204,178,255,.3)}
.live .lv-sheet{position:absolute;left:12px;right:12px;bottom:calc(92px + var(--safe-bottom,0px));z-index:31;
  border-radius:20px;color:#fff;background:rgba(30,22,42,.96);border:1px solid rgba(255,255,255,.1);
  box-shadow:0 18px 46px rgba(0,0,0,.46);backdrop-filter:blur(18px);overflow:hidden}
.live .lv-sheet-h{height:50px;padding:0 13px 0 17px;display:flex;align-items:center;justify-content:space-between;
  border-bottom:1px solid rgba(255,255,255,.08)}
.live .lv-sheet-h b{font-size:15px}
.live .lv-sheet-h button{width:32px;height:32px;padding:0;border:0;background:transparent;color:rgba(255,255,255,.72);
  display:flex;align-items:center;justify-content:center;cursor:pointer}
.live .lv-sheet-h button .ico,.live .lv-sheet-h button svg{width:19px;height:19px}
.live .lv-sheet-list{padding:6px 10px 10px;max-height:310px;overflow:auto}
.live .lv-sheet-list>button{width:100%;height:50px;padding:0 9px;border:0;background:transparent;color:#fff;
  display:flex;align-items:center;gap:12px;font-size:14px;text-align:left;border-radius:12px;cursor:pointer}
.live .lv-sheet-list>button:active{background:rgba(255,255,255,.08)}
.live .lv-sheet-list>button .ico,.live .lv-sheet-list>button svg{width:21px;height:21px;color:#FF9BC3}
.live .lv-sheet-list>button.danger,.live .lv-sheet-list>button.danger .ico{color:#FF7D8D}
.live .lv-sheet-empty{padding:28px 12px;text-align:center;font-size:12.5px;color:rgba(255,255,255,.58)}
.live .lv-req-list{padding-top:4px}
.live .lv-req{display:flex;align-items:center;gap:9px;padding:10px 7px;border-bottom:1px solid rgba(255,255,255,.06)}
.live .lv-req:last-child{border-bottom:0}
.live .lv-req>img{width:42px;height:42px;border-radius:50%;object-fit:cover;flex:none;background:rgba(255,255,255,.12)}
.live .lv-req-info{flex:1;min-width:0}
.live .lv-req-info b{display:block;font-size:13.5px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.live .lv-req-info small{display:block;margin-top:4px;font-size:11px;color:rgba(255,255,255,.58)}
.live .lv-req button{flex:none;height:30px;padding:0 12px;border:0;border-radius:15px;cursor:pointer;
  background:linear-gradient(105deg,#FF638D,#C36BFF);color:#fff;font-size:12px;font-weight:600}
.live .lv-req button.no{background:rgba(255,255,255,.1);color:rgba(255,255,255,.8)}
.live .lv-gift-list>button{gap:9px}
.live .lv-gift-list>button>img{width:38px;height:38px;border-radius:50%;object-fit:cover;flex:none}
.live .lv-gift-rank{width:19px;flex:none;text-align:center;color:#FFC75E;font-size:12px;font-style:normal;font-weight:700}
.live .lv-gift-name{flex:1;min-width:0;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.live .lv-gift-amount{margin-left:auto;display:flex;align-items:center;gap:3px;color:#FFD6E8;font-size:12px;flex:none}
.live .lv-gift-amount img{width:14px;height:14px;object-fit:contain}
@keyframes lvGiftFloat{0%{opacity:0;transform:translateY(24px) scale(.82)}12%{opacity:1}76%{opacity:1}100%{opacity:0;transform:translateY(-24px) scale(1)}}
@keyframes lvGiftPop{0%{opacity:0;transform:scale(.35) rotate(-8deg)}70%{opacity:1;transform:scale(1.08) rotate(2deg)}100%{transform:scale(1) rotate(0)}}
@keyframes lvGiftRing{0%{opacity:0;transform:scale(.35)}18%{opacity:1}100%{opacity:0;transform:scale(1.55)}}
@keyframes lvSpark{0%{opacity:0;transform:translate(0,0) scale(.4)}16%{opacity:1}100%{opacity:0;transform:translate(var(--sx,40px),var(--sy,-54px)) scale(1)}}
.live .lv-fx-spark.s1{--sx:-48px;--sy:-50px}
.live .lv-fx-spark.s2{--sx:56px;--sy:-38px}
.live .lv-fx-spark.s3{--sx:-35px;--sy:34px}
.live .lv-fx-spark.s4{--sx:44px;--sy:42px}
@keyframes lvLikeFly{0%{opacity:0;transform:translate(0,0) scale(.45)}18%{opacity:1}100%{opacity:0;transform:translate(var(--dx,18px),-128px) scale(1.12)}}
.live .stats-card{position:absolute;left:12px;right:12px;top:120px;background:rgba(24,20,40,.72);border-radius:14px;padding:12px 14px;color:#fff;backdrop-filter:blur(8px);z-index:6}
.live .stats-card .h{display:flex;align-items:center;justify-content:space-between;font-size:var(--fs-13);font-weight:600;margin-bottom:10px}
.live .stats-card .g{display:flex;gap:20px}
.live .stats-card .g div{font-size:var(--fs-10);color:rgba(255,255,255,.65)}
.live .stats-card .g b{display:block;font-size:var(--fs-18);color:var(--gold-2);margin-top:2px}

/* --- 美颜面板 --- */
.panel{position:absolute;left:0;right:0;bottom:0;background:rgba(20,18,30,.94);backdrop-filter:blur(14px);border-radius:18px 18px 0 0;padding:14px 16px 22px;z-index:20;color:#fff}
.panel .ph{display:flex;align-items:center;justify-content:space-between;font-size:var(--fs-13);font-weight:600;margin-bottom:12px}
.panel .tabs{display:flex;gap:20px;font-size:var(--fs-13);color:rgba(255,255,255,.6);margin-bottom:14px}
.panel .tabs .on{color:#fff;font-weight:600;position:relative}
.panel .tabs .on::after{content:"";position:absolute;left:50%;transform:translateX(-50%);bottom:-6px;width:16px;height:2.5px;border-radius:2px;background:var(--brand-grad)}
.slider{display:flex;align-items:center;gap:12px;margin-bottom:14px}
.slider span{width:34px;font-size:var(--fs-12);color:rgba(255,255,255,.82)}
.slider .track{flex:1;height:3px;border-radius:2px;background:rgba(255,255,255,.22);position:relative}
.slider .track i{position:absolute;left:0;top:0;bottom:0;border-radius:2px;background:#fff}
.slider .track b{position:absolute;top:50%;width:15px;height:15px;border-radius:50%;background:#fff;transform:translate(-50%,-50%)}
.slider em{font-style:normal;width:26px;text-align:right;font-size:var(--fs-11);color:rgba(255,255,255,.6)}

/* --- 语音房（房间内版式）---
   整块排版照真机录像 a28fb78a f_0144 用绝对坐标摆放，单位 CSS px（360×756）：
   顶栏 0~44 ／ 主持·嘉宾 42~150 ／ 麦位网格 156~376 ／ 公屏 380~638 ／
   快捷语 646~669 ／ 底部操作条 682~719。数字 = 真机帧 px ÷1.6 得来，改前请重新量帧。 */
.voice{position:absolute;inset:0;overflow:hidden;background:#1b0f30;color:#fff;
  -webkit-tap-highlight-color:transparent}
.voice .vbg{position:absolute;inset:0;background:url('../assets/bg10.webp') center/cover no-repeat}
.voice .vmask{position:absolute;inset:0;background:linear-gradient(180deg,rgba(12,5,28,.82) 0,rgba(16,7,34,.55) 22%,rgba(34,12,58,.46) 46%,rgba(56,24,82,.58) 70%,rgba(96,58,120,.78) 100%)}

/* 顶栏：头像 + 昵称/ID + 关注 + 右侧小头像 + 电源 */
.voice .vtop{position:absolute;left:0;right:0;top:0;height:44px;z-index:6}
.voice .vtop .vav{position:absolute;left:3px;top:3px;width:34px;height:34px;border-radius:50%;object-fit:cover;background:rgba(255,255,255,.16)}
.voice .vtop .vtxt{position:absolute;left:42px;top:-1px;max-width:62px}
.voice .vtop .vtxt b{display:block;font-size:13px;line-height:16px;font-weight:400;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.voice .vtop .vtxt small{display:block;font-size:10.5px;line-height:12px;color:rgba(255,255,255,.85);margin-top:5px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.voice .vtop .vfollow{position:absolute;left:106px;top:8.5px;width:48px;height:20px;line-height:20px;
  border-radius:10px;text-align:center;font-size:13px;background:linear-gradient(180deg,#FF8092,#FF5F72);
  box-shadow:0 2px 6px rgba(255,95,114,.35)}
.voice .vtop .vfollow.off{display:none}
.voice .vtop .vmini{position:absolute;left:204px;top:3px;display:flex;gap:8px}
.voice .vtop .vmini img{width:26px;height:26px;border-radius:50%;object-fit:cover;background:rgba(255,255,255,.14)}
.voice .vtop .vpower{position:absolute;left:316px;top:5px;width:25px;height:25px;object-fit:contain;filter:brightness(0) invert(1)}
.voice .vnotice-btn{position:absolute;left:306px;top:57px;font-size:13px;z-index:6;text-shadow:0 1px 3px rgba(0,0,0,.5)}

/* 主持 / 嘉宾 大卡（主持 63px @ (148,42)；嘉宾 48px @ (242,53)） */
.voice .vbig{position:absolute;display:flex;flex-direction:column;align-items:center;z-index:5}
.voice .vbig.host{left:146.5px;top:42px;width:67px}
.voice .vbig.guest{left:242px;top:53px;width:48px}
.voice .vbig .vface{position:relative;width:100%;height:63px;border-radius:50%}
.voice .vbig.guest .vface{height:48px}
.voice .vbig .vface img{width:100%;height:100%;border-radius:50%;object-fit:cover;background:rgba(255,255,255,.14)}
.voice .vbig.host .vface{width:67px;height:67px;padding:13.5px;box-sizing:border-box;
  background:url('../assets/b-ring.webp') center/contain no-repeat}
.voice .vbig.host .vface img{width:40px;height:40px;border-radius:50%}
.voice .vbig.guest .vface{box-shadow:0 0 0 2px rgba(160,214,255,.9),0 0 8px rgba(110,170,255,.6)}
.voice .vbig .vmic{position:absolute;right:-1px;bottom:-1px;width:15px;height:15px;border-radius:50%;
  background:linear-gradient(135deg,#8FD0FF,#4A90FF);box-shadow:0 0 0 1px rgba(255,255,255,.5)}
.voice .vbig.host .vtagrow{margin-top:4px}
.voice .vbig .vtagrow{margin-top:8px;height:18px;max-width:112px;display:flex;align-items:center;justify-content:center;gap:4px;white-space:nowrap}
.voice .vbig .vtag{font-size:10px;line-height:16px;padding:0 2px;border-radius:9px;
  background:rgba(52,30,84,.9);border:1px solid rgba(206,170,255,.65)}
.voice .vbig.guest .vtag{border-color:rgba(160,214,255,.75)}
.voice .vbig.guest .vtagrow{margin-top:12px}
.voice .vbig .vname{font-size:12px;font-weight:400;max-width:52px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.voice .vbig .vheart{margin-top:5px;height:16px;display:flex;align-items:center;gap:4px;font-size:11.5px}
.voice .vbig .vheart span{color:#FF6B93;font-size:11px}
.voice .vbig .vheart i{font-style:normal}

/* 麦位网格：4 列 × 2 行，圆卡 68。
   几何按真机 f_0144 量（1.6 倍帧）：4 列中心 42.8 / 134 / 225.2 / 316.4（列距 91.2、左右对称），
   两行标签墨迹 y 270.6~277.5 与 383.1~390.6（行距 112.8），标签下 21 是那枚「♥ N」胶囊。
   原来 top 156 / 列距 89 / 行距 4 会让整块麦位板比真机高 41.2、行距小 6。 */
.voice .vboard{position:absolute;left:0;right:0;top:197px;z-index:5;
  display:grid;grid-template-columns:repeat(4,91.2px);row-gap:10px;justify-content:center}
.voice .vcell{display:flex;flex-direction:column;align-items:center;cursor:pointer}
.voice .vcell .vf{position:relative;width:68px;height:68px;border-radius:50%}
.voice .vcell .vf img{width:100%;height:100%;border-radius:50%;object-fit:cover}
.voice .vcell.empty .vf{background:rgba(255,255,255,.09)}
.voice .vcell.empty .vf::after{content:'';position:absolute;inset:0;border-radius:50%;
  border:1.5px dashed rgba(255,255,255,.42)}
.voice .vcell .chair{position:absolute;inset:0;display:flex;align-items:center;justify-content:center;opacity:.45}
.voice .vcell .vmic{position:absolute;right:1px;bottom:1px;width:15px;height:15px;border-radius:50%;
  background:linear-gradient(135deg,#8FD0FF,#4A90FF);box-shadow:0 0 0 1px rgba(255,255,255,.45)}
.voice .vcell b{font-size:9px;font-weight:400;margin-top:2px;height:13px;line-height:13px;
  max-width:86px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.voice .vcell .vh{margin-top:7.5px;height:15px;line-height:15px;display:flex;align-items:center;justify-content:center;
  gap:4px;font-size:11px;font-weight:600;padding:0 7px;border-radius:7.5px;background:rgba(0,0,0,.3);width:max-content;margin-left:auto;margin-right:auto}
.voice .vcell .vh span{color:#FF6B93;font-size:10px}
.voice .vcell .vh i{font-style:normal}

/* 公屏 */
.voice .chatline{position:absolute;left:0;right:0;top:380px;height:258px;z-index:5;display:flex;
  flex-direction:column;justify-content:flex-end;gap:6px;padding:0 10px;overflow:hidden;font-size:13px;line-height:1.35}
.voice .cmsg{display:flex;align-items:flex-start;gap:6px;color:#fff}
.voice .cmsg .cfav{width:26px;height:26px;border-radius:50%;object-fit:cover;background:rgba(255,255,255,.16);
  flex:none;margin-top:1px}
.voice .cmsg .cbody{flex:1;min-width:0}
.voice .cmsg .cnick{display:inline-block;font-size:11.5px;line-height:16px;padding:0 6px;border-radius:8px;
  margin-right:5px;background:rgba(198,146,64,.6)}
.voice .cmsg .ctxt{background:rgba(150,110,180,.4);border-radius:11px;padding:2px 9px;display:inline;
  word-break:break-word}
.voice .cmsg.hint .ctxt{background:rgba(255,255,255,.13);color:rgba(255,255,255,.78)}

/* 快捷语横条 */
.voice .vphrases{position:absolute;left:0;right:0;top:650px;height:20px;z-index:6;display:flex;
  align-items:center;gap:8px;padding:0 12px;overflow:hidden;white-space:nowrap}
.voice .vphrases span{flex:none;font-size:13.5px;line-height:20px;padding:0 11.5px;border-radius:10px;
  background:rgba(255,255,255,.17);color:#fff}

/* 底部操作条：聊一聊 / 话筒(带角标) / 四宫格 / 上麦 / 礼物 */
.voice .vbar{position:absolute;left:0;right:0;top:682px;height:37px;z-index:7;display:block}
.voice .vbar .say{position:absolute;left:9px;top:0;width:63px;height:37px;border-radius:18.5px;
  background:rgba(255,255,255,.18);display:flex;align-items:center;padding:0 12px;overflow:hidden;
  color:rgba(255,255,255,.95);font-size:10px}
.voice .vbar .say input{flex:1;min-width:0;border:0;outline:0;background:transparent;color:#fff;padding:0;font-size:10px;height:100%}
.voice .vbar .say input::placeholder{color:#fff;opacity:1}
.voice .vbar .vic{position:absolute;left:186.5px;top:3.8px;width:29.4px;height:29.4px;border-radius:50%;
  display:flex;align-items:center;justify-content:center;cursor:pointer}
.voice .vbar .vic img{width:26px;height:26px;object-fit:contain;filter:brightness(0) invert(1)}
.voice .vbar .vic .badge{position:absolute;left:20px;top:-9px;min-width:17px;height:17px;line-height:17px;
  border-radius:8.5px;padding:0 4px;font-size:10.5px;text-align:center;color:#fff;
  background:linear-gradient(180deg,#FF7A93,#FF3D66)}
.voice .vbar .vic .badge.off{display:none}
.voice .vbar .vic[data-vs-grid]{left:236px;top:6px;width:20px;height:20px;border-radius:0;
  display:grid;grid-template-columns:9px 9px;grid-gap:4px;justify-content:center;align-content:center}
.voice .vbar .vic[data-vs-grid] i{width:9px;height:9px;border-radius:2.5px;background:#fff}
.voice .vbar .vmicon{position:absolute;left:274px;top:2px;width:36px;height:33px;border-radius:16.5px;
  line-height:33px;text-align:center;font-size:13.5px;cursor:pointer;
  background:linear-gradient(180deg,#FF9A86,#FF5F8C);box-shadow:0 3px 10px rgba(255,95,140,.4)}
.voice .vbar .vgift{position:absolute;left:310px;top:0;width:40px;height:40px;border-radius:50%;
  display:flex;align-items:center;justify-content:center;cursor:pointer;
  background:linear-gradient(135deg,#B47BFF,#8A3CE8);box-shadow:0 3px 10px rgba(140,60,232,.45)}
.voice .vbar .vgift img{width:26px;height:26px;object-fit:contain}
/* --- 婚礼房 --- */
.wedding{position:relative;display:flex;flex:1;min-height:0;flex-direction:column;overflow:hidden;background:#20122A}
.wedding .wbg{position:absolute;inset:0;background-size:cover;background-position:center;opacity:.92}
.wedding .wbg,.wedding .wmask{pointer-events:none}
.wedding .wmask{position:absolute;inset:0;background:linear-gradient(180deg,rgba(28,12,26,.42),rgba(28,12,26,.86))}
.wedding>.navbar{position:relative;z-index:30}
.wedding .wtitle{text-align:center;color:#fff;padding-top:2px;flex:none}
.wedding .wtitle h3{margin:0;font-size:22px;font-weight:700;letter-spacing:1px;text-shadow:0 2px 14px rgba(255,180,90,.55)}
.wedding .wtitle p{margin:8px 0 0;font-size:var(--fs-12);color:rgba(255,255,255,.78);letter-spacing:1px}
.wedding .wbody{position:relative;z-index:5;flex:1;display:flex;flex-direction:column;padding:0 18px 24px;min-height:0}
.wedding .couple{flex:1;display:flex;align-items:center;justify-content:center;min-height:0;padding:6px 0}
.wedding .couple img{max-width:252px;max-height:100%;object-fit:contain;border-radius:16px;filter:drop-shadow(0 16px 40px rgba(0,0,0,.55))}
.wedding .seats2{display:grid;grid-template-columns:repeat(4,1fr);gap:12px;flex:none;padding-bottom:16px}
.wedding .seats2 .se{text-align:center;color:#fff}
.wedding .seats2 .se .r{width:52px;height:52px;border-radius:50%;margin:0 auto;background:rgba(255,255,255,.14);border:1.5px dashed rgba(255,214,150,.6);display:flex;align-items:center;justify-content:center;font-size:12px;color:rgba(255,255,255,.75)}
.wedding .seats2 .se img{width:100%;height:100%;border-radius:50%;object-fit:cover}
.wedding .seats2 .se small{display:block;font-size:var(--fs-10);margin-top:5px;color:rgba(255,255,255,.8)}
.wedding .wbar{display:flex;justify-content:center;gap:14px;flex:none}
.wedding .wbar .wb{height:40px;padding:0 22px;border-radius:20px;background:linear-gradient(135deg,#FFD98A,#FFB24A);color:#5A3200;font-size:var(--fs-13);font-weight:700;display:flex;align-items:center;gap:6px;box-shadow:0 8px 20px rgba(255,178,74,.4)}
.wedding .wbar .wb.ghost{background:rgba(255,255,255,.16);color:#fff;box-shadow:none;font-weight:500}

/* --- 家族 --- */
.fam-head{position:relative;height:172px;flex:none;background-size:cover;background-position:center;display:flex;align-items:flex-end;padding:0 16px 14px}
.fam-head .fm{position:relative;z-index:2;display:flex;align-items:center;gap:12px;color:#fff;width:100%}
.fam-head .badge{width:58px;height:58px;border-radius:16px;border:2px solid rgba(255,255,255,.7);overflow:hidden;flex:none}
.fam-head .badge img{width:100%;height:100%;object-fit:cover}
.fam-head .fm b{font-size:var(--fs-18);display:block}
.fam-head .fm small{font-size:var(--fs-11);opacity:.85}
.fam-head .fm .join{margin-left:auto}
.fam-stat{display:flex;gap:26px;padding:14px 16px;background:#fff}
.fam-stat div{font-size:var(--fs-11);color:var(--t3);text-align:center}
.fam-stat b{display:block;font-size:var(--fs-16);color:var(--t1);margin-bottom:2px}
.fam-redpack{margin:10px 16px;border-radius:14px;background:linear-gradient(90deg,#FFF1F6,#FFE7F0);padding:12px 14px;display:flex;align-items:center;gap:10px}
.fam-redpack b{font-size:var(--fs-13);color:var(--brand-deep);display:block}
.fam-redpack small{font-size:var(--fs-11);color:#A84A6E}
.fam-redpack .btn{margin-left:auto}
.member-grid{display:grid;grid-template-columns:repeat(4,1fr);gap:14px 8px;padding:6px 16px 16px}
.member-grid .mb{text-align:center;font-size:var(--fs-10);color:var(--t2)}
.member-grid .mb .av{width:52px;height:52px;border-radius:50%;margin:0 auto 5px;position:relative}
.member-grid .mb img{width:100%;height:100%;border-radius:50%;object-fit:cover}
.member-grid .mb .lv{position:absolute;left:50%;transform:translateX(-50%);bottom:-6px;background:var(--brand-grad);color:#fff;font-size:8px;border-radius:7px;padding:1px 6px;white-space:nowrap}
.tabstrip{display:flex;gap:20px;padding:12px 16px 6px;font-size:var(--fs-14);color:var(--t3);flex:none}
.tabstrip .on{color:var(--t1);font-weight:700;position:relative}
.tabstrip .on::after{content:"";position:absolute;left:50%;transform:translateX(-50%);bottom:-6px;width:18px;height:3px;border-radius:2px;background:var(--brand-grad)}

/* --- 动态广场 --- */
.waterfall{columns:2;column-gap:8px;padding:0 12px}
.feedlist.waterfall{columns:1;padding:0}
.wf{break-inside:avoid;margin-bottom:8px;border-radius:14px;overflow:hidden;background:#fff;box-shadow:0 2px 10px rgba(24,24,24,.07)}
.wf img{width:100%;display:block}
.wf .wfi{padding:8px 9px}
.wf .wfi .t{font-size:var(--fs-12);line-height:1.45;color:var(--t1);margin-bottom:7px}
.wf .wfi .u{display:flex;align-items:center;gap:6px;font-size:var(--fs-10);color:var(--t3)}
.wf .wfi .u img{width:18px;height:18px;border-radius:50%;object-fit:cover}
.wf .wfi .u .likes{margin-left:auto;display:flex;align-items:center;gap:3px}

/* --- 我的 --- */
.mine-head{position:relative;flex:none;padding:0 16px 12px;
  background-image:
    radial-gradient(125% 72% at 100% 0%,rgba(255,184,216,.62) 0%,rgba(255,184,216,0) 62%),
    linear-gradient(180deg,#FFE1EF 0%,#FFF1F8 56%,#F7EFF7 100%)}
.mine-me{display:flex;align-items:center;gap:12px;color:#1B1B20;padding-top:10px}
.mine-me img.av{width:64px;height:64px;border-radius:50%;object-fit:cover;border:3px solid rgba(255,255,255,.92);
  box-shadow:0 6px 16px rgba(105,41,76,.16)}
.mine-me>div:not(.mm-icos){flex:1;min-width:0}
.mine-me .nm{font-size:19px;line-height:26px;font-weight:700;color:#1A1A20;display:block;max-width:100%;
  white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.mine-me .id{font-size:var(--fs-12);color:#7D7784;margin-top:5px;display:flex;align-items:center;
  gap:4px 6px;flex-wrap:wrap;white-space:nowrap;overflow:visible}
/* 账号状态是一个整体：同行放不下就整枚换到下一行，不能像以前那样被 overflow 裁掉半截。 */
.mine-me .id .acc-state{display:inline-flex;align-items:center;flex:none;font-size:11px;line-height:16px;
  padding:1px 6px;border-radius:9px;white-space:nowrap}
.mm-icos{margin-left:auto;display:flex;align-items:center;gap:3px;flex:none}
.mm-ico{width:36px;height:36px;border-radius:50%;display:flex;align-items:center;justify-content:center;
  color:#25232A;padding:0;transition:background .16s}
.mm-ico:active{background:rgba(60,30,50,.08)}
.mm-ico .ico{width:23px;height:23px}
/* 参考图的四格关系统计：数字在上、标签在下，无分隔线 */
.mine-stats{display:grid;grid-template-columns:repeat(4,1fr);padding:12px 2px 2px}
.mine-stat{text-align:center;min-width:0}
.mine-stat b{display:flex;align-items:center;justify-content:center;min-height:27px;font-size:22px;
  font-weight:700;line-height:1.2;color:#17171C;font-variant-numeric:tabular-nums}
.mine-stat span{display:block;margin-top:4px;font-size:var(--fs-12);color:#7C7782}
.wallet{display:flex;background:#fff;border-radius:14px;margin:10px 16px 0;padding:12px 0;box-shadow:0 6px 18px rgba(255,76,129,.12)}
.wallet .w{flex:1;text-align:center;position:relative}
.wallet .w+.w::before{content:"";position:absolute;left:0;top:12%;height:76%;width:1px;background:var(--line-2)}
.wallet .w b{display:block;font-size:var(--fs-18);color:var(--t1);font-variant-numeric:tabular-nums}
.wallet .w small{font-size:var(--fs-10);color:var(--t3)}
.wallet .w .gold{color:#C98200}
.vipstrip{display:flex;gap:10px;margin:10px 16px 0}
.vipstrip .v{flex:1;height:56px;border-radius:14px;display:flex;align-items:center;gap:9px;padding:0 12px;color:#6A4300;background:linear-gradient(120deg,#FFE9B0,#FFCE6B)}
.vipstrip .v.blue{background:linear-gradient(120deg,#DCE9FF,#A9C8FF);color:#1B3C74}
.vipstrip .v img{width:30px;height:30px;object-fit:contain}
.vipstrip .v b{font-size:var(--fs-13);display:block}
.vipstrip .v small{font-size:var(--fs-10);opacity:.8}
.cert-row{display:flex;gap:10px;margin:10px 16px 0;background:#fff;border-radius:14px;padding:10px 14px;align-items:center;box-shadow:0 2px 10px rgba(24,24,24,.06)}
.cert-row img{width:26px;height:26px;object-fit:contain}
.cert-row .ct{flex:1}
.cert-row .ct b{font-size:var(--fs-13);display:block}
.cert-row .ct small{font-size:var(--fs-11);color:var(--t3)}
.cert-row .btn{height:28px;font-size:var(--fs-12);padding:0 14px;width:auto}
.grid9{display:grid;grid-template-columns:repeat(4,1fr);gap:12px 8px;margin:10px 16px 8px;background:#fff;border-radius:14px;padding:10px;box-shadow:0 2px 10px rgba(24,24,24,.06)}
.grid9 .g{text-align:center;font-size:var(--fs-11);color:var(--t2)}
.grid9 .g img{width:30px;height:30px;object-fit:contain;margin:0 auto 7px}
.grid9 .g .em{font-size:22px;line-height:30px;margin-bottom:7px}
.mine-quick{display:grid;grid-template-columns:repeat(3,1fr);gap:8px 6px;margin:0 16px 8px;background:#fff;border-radius:14px;padding:10px 8px;box-shadow:0 2px 10px rgba(24,24,24,.06)}
.mine-quick .mq{display:flex;flex-direction:column;align-items:center;gap:7px;font-size:var(--fs-11);color:var(--t2);text-align:center}
.mine-quick .mq img{width:28px;height:28px;object-fit:contain}

/* --- 钱包/充值 --- */
.wallet-top{margin:8px 16px 0;border-radius:18px;background:linear-gradient(135deg,#2B2340,#4A2A46);padding:16px;color:#fff}
.wallet-top .bal{font-size:30px;font-weight:700;color:var(--gold-2);font-variant-numeric:tabular-nums;display:flex;align-items:center;gap:8px}
.wallet-top .bal img{width:24px;height:24px;object-fit:contain}
.wallet-top .lbl{font-size:var(--fs-11);color:rgba(255,255,255,.7);margin-bottom:6px}
.wallet-top .wallet-hint{margin-top:12px;font-size:var(--fs-11);color:rgba(255,255,255,.68)}
.wallet-top .sw{display:flex;gap:10px;margin-top:14px;width:auto;
  /* 781 行那条 .sw 是给设计页的色卡用的（深底 + 深描边），这里只是借了个类名当两格容器，
     不覆盖就会在两格之间露出一条近乎黑色的底 —— 产品 2026-10-15 指出「两个框中间有黑色缝隙」。 */
  background:transparent;border:0;overflow:visible}
.wallet-top .sw .s{flex:1;background:rgba(255,255,255,.1);border-radius:12px;padding:9px 12px}
.wallet-top .sw .s b{display:block;font-size:var(--fs-15)}
.wallet-top .sw .s small{font-size:var(--fs-10);color:rgba(255,255,255,.6)}
/* 需要登录才有数的格子（「我的」余额/魅力值、钱包余额…）在数据到位前显示**灰条骨架**，
   不再摆示例值（真数据回来时整屏数字一起跳）也不再摆破折号「—」（用户反馈像坏掉了）。 */
.sk{display:inline-block;width:44px;height:12px;border-radius:6px;vertical-align:middle;
  background:linear-gradient(90deg,rgba(20,23,28,.07),rgba(20,23,28,.16),rgba(20,23,28,.07));
  background-size:200% 100%;animation:sk-breathe 1.3s linear infinite}
/* 深色底（「我的」头像行在品牌渐变上、钱包顶部深紫卡）要用白色半透明那版，否则看不见 */
.sk-dark{background:linear-gradient(90deg,rgba(255,255,255,.20),rgba(255,255,255,.44),rgba(255,255,255,.20));
  background-size:200% 100%}
@keyframes sk-breathe{from{background-position:200% 0}to{background-position:-200% 0}}
/* ================================================================ 「我的」D 版重构（2026-10-14）
   五层结构：身份区 → 信任认证（深色质感卡）→ 我的权益（VIP/贵族合并、弱化营销）
   → 功能分组（统一圆形底板）→ 设置。功能入口一个没删，只是分组；低频四项收在「更多」里展开。 */
.mc-trust{margin:12px 0 0;border-radius:16px;padding:14px 14px 0;
  background:linear-gradient(140deg,#2A2E39,#342B3B 58%,#472C3C);box-shadow:0 10px 22px rgba(40,26,40,.20)}
.mc-trust-row{display:flex;align-items:center;gap:10px;color:#fff}
.mc-trust-row>img{width:30px;height:30px;object-fit:contain;flex:none}
.mc-trust-row .tt{flex:1;min-width:0}
.mc-trust-row .tt b{display:block;font-size:var(--fs-15);font-weight:700}
.mc-trust-row .tt small{font-size:var(--fs-11);color:rgba(255,255,255,.60)}
.mc-cta{flex:none;height:32px;padding:0 18px;border-radius:16px;display:flex;align-items:center;
  font-size:var(--fs-13);font-weight:600;color:#fff;background:linear-gradient(120deg,#FF8FB0,#FF6E93);
  box-shadow:0 6px 14px rgba(255,110,147,.32)}
.mc-cta.done{background:rgba(116,224,154,.16);color:#9BE7B5;box-shadow:none}
/* 资产三个数并进深色卡下半行：不再单独铺一条白色资产条（参考图一） */
.mc-trust .wallet{margin:12px 0 0;padding:12px 0 10px;background:none;box-shadow:none;border-radius:0;
  border-top:1px solid rgba(255,255,255,.10)}
.mc-trust .wallet .w{display:flex;align-items:center;justify-content:center;gap:5px}
.mc-trust .wallet .w+.w::before{background:rgba(255,255,255,.14);top:14%;height:72%}
.mc-trust .wallet .w img{width:16px;height:16px;object-fit:contain}
.mc-trust .wallet .w small{font-size:var(--fs-11);color:rgba(255,255,255,.66)}
.mc-trust .wallet .w b{display:inline;font-size:var(--fs-15);color:#fff}
.mc-trust .wallet .w b.gold{color:#FFD6A2}
/* 我的 · 每日签到（嵌在页面里，真值来自 /tasks/checkin） */
.mc-signin{margin:0 10px 16px;background:#fff;border-radius:18px;overflow:hidden;box-shadow:0 8px 22px rgba(206,160,240,.16)}
.ms-head{display:flex;align-items:center;justify-content:space-between;padding:13px 16px;
  background:linear-gradient(135deg,#241C22 0%,#3B2A33 100%);color:#fff}
.ms-head b{font-size:16px;font-weight:700;letter-spacing:.3px}
.ms-more{font-size:12px;color:rgba(255,255,255,.8)}
.ms-body{padding:10px 8px 12px}
.ms-days{display:grid;grid-template-columns:repeat(7,1fr);gap:5px}
.ms-day{position:relative;border-radius:12px;background:#FFF1F7;padding:9px 1px 8px;text-align:center;min-width:0;
  min-height:82px;display:flex;flex-direction:column;align-items:center;justify-content:center}
.ms-day img{display:block;margin:0 auto 2px;width:36px;height:36px;object-fit:contain}
.ms-day span{display:block;margin-top:0;font-size:9.5px;color:#B25A86;line-height:1.2;white-space:nowrap}
.ms-day.today{background:#F8D9F3;box-shadow:inset 0 0 0 1px #F0A9DD}
.ms-day.done{background:#FDE7F1}
.ms-day i{position:absolute;right:3px;top:3px;font-size:8px;font-style:normal;color:#fff;
  background:#FF6FA5;border-radius:6px;padding:0 3px;line-height:12px}
.ms-btn{margin-top:12px;height:48px;border-radius:24px;display:flex;align-items:center;justify-content:center;
  font-size:16px;font-weight:700;color:#fff;background:var(--brand-grad)}
.ms-btn.off{background:#FFE6F1;color:#D94C86}
/* 我的 · 一行一个入口 */
.mc-list{margin:0 14px 14px;background:#fff;border-radius:16px;overflow:hidden}
.mc-row{display:flex;align-items:center;gap:12px;padding:15px 16px;font-size:14.5px;
  color:var(--t1);border-bottom:1px solid #F4F1F5}
.mc-row:last-child{border-bottom:0}
.mc-row img{width:22px;height:22px;object-fit:contain;flex:none}
.mc-row span{flex:1}
.mr-ar{font-size:18px;color:#C9C4CC;line-height:1;font-style:normal}
/* 人工客服：留言与官方回复。英雄区只说明真实处理方式，不伪造“正在接入”状态。 */
.sup-hero{display:flex;align-items:flex-start;gap:13px;margin:14px 14px 0;padding:16px;
  border-radius:16px;background:linear-gradient(135deg,#FFF1F6 0%,#FFF8F2 100%);
  box-shadow:0 4px 16px rgba(255,76,129,.08)}
.sup-ico{width:46px;height:46px;border-radius:14px;background:var(--brand-grad);color:#fff;
  display:flex;align-items:center;justify-content:center;flex:none;box-shadow:0 7px 16px rgba(255,76,129,.24)}
.sup-ico .ico{width:24px;height:24px}
.sup-copy{flex:1;min-width:0;padding-top:1px}
.sup-copy b{display:block;font-size:15px;color:var(--t1)}
.sup-copy span{display:block;margin-top:6px;font-size:11.5px;line-height:1.75;color:var(--t3)}
.sup-editor{margin:14px 14px 0;padding:15px 14px 14px;border-radius:16px;background:#fff;
  box-shadow:0 3px 14px rgba(24,24,24,.05)}
.sup-input{display:block;width:100%;min-height:112px;box-sizing:border-box;border:0;outline:0;resize:none;
  padding:12px;border-radius:12px;background:#F7F7FA;color:var(--t1);font:inherit;font-size:13px;line-height:1.65}
.sup-input::placeholder{color:#AAAAB3}
.sup-editor .btn{margin-top:12px}
.sup-note{padding:9px 2px 0;text-align:center;font-size:10.5px;line-height:1.6;color:#9A9AA3}
.sup-history{padding:17px 14px 24px}
.sup-item{margin-bottom:10px;padding:13px 14px;border-radius:14px;background:#fff;
  box-shadow:0 2px 10px rgba(24,24,24,.04)}
.sup-item-main{font-size:13px;line-height:1.65;color:var(--t1);word-break:break-word}
.sup-meta{margin-top:7px;font-size:10.5px;line-height:1.6;color:var(--t3)}
.sup-status{display:inline-flex;align-items:center;height:20px;padding:0 8px;margin-right:6px;
  border-radius:10px;background:var(--brand-soft);color:var(--brand-deep);font-size:10px;font-weight:600}
.sup-reply{margin-top:10px;padding:10px 11px;border-radius:10px;background:#FFF7F9;
  font-size:12px;line-height:1.7;color:#5E4650}
.sup-reply b{color:var(--brand-deep)}
.sup-empty{padding:24px 16px;border-radius:14px;background:#fff;text-align:center;font-size:12px;color:var(--t3)}

/* --- 客服中心（工单 / FAQ / 快捷入口 / 回复记录） --- */
.sup2{padding-bottom:28px;background:linear-gradient(180deg,#FFF4F8 0,#F7F5FA 245px,#F7F5FA 100%);overflow-x:hidden}
/* 客服中心 · 流式布局：用留白和细线分区，不再把每一段都塞进大圆角卡片 */
.sup2-clean{padding-bottom:0;overflow-y:hidden;overscroll-behavior:none;
  background:linear-gradient(180deg,#FFF7FA 0,#F8F6FA 250px,#F8F6FA 100%)}
.sup2-stream{max-width:560px;margin:0 auto;padding:8px 20px 0;box-sizing:border-box}
.sup2-clean .sup2-stream{height:100%;display:flex;flex-direction:column;padding:6px 20px 4px}
.sup2-clean .sup2-section{flex:none;padding:14px 0 15px}
.sup2-clean .sup2-section:first-child{padding-top:6px}
.sup2-clean .sup2-faq-section{flex:1;min-height:0;display:flex;flex-direction:column;padding-bottom:6px}
.sup2-clean .sup2-faq-section .sup2-faq-list{flex:1;min-height:0;overflow-y:auto;
  overscroll-behavior:contain;-webkit-overflow-scrolling:touch;scrollbar-width:none}
.sup2-clean .sup2-faq-section .sup2-faq-list::-webkit-scrollbar{display:none}
.sup2-submit-entry-row{width:100%;padding:13px 0;text-align:left;font-family:inherit}
.sup2-submit-entry-row .sup2-service-ico{color:#fff;background:linear-gradient(145deg,#FF75A8,#B75BDD);
  box-shadow:0 5px 14px rgba(222,91,157,.2)}
.sup2-submit-page{padding-bottom:calc(30px + env(safe-area-inset-bottom,0px));
  background:linear-gradient(180deg,#FFF7FA 0,#F8F6FA 250px,#F8F6FA 100%)}
.sup2-submit-sheet{max-width:560px;margin:0 auto;padding:12px 20px 8px;box-sizing:border-box}
.sup2-submit-head{padding:4px 0 15px;border-bottom:1px solid rgba(82,57,72,.055)}
.sup2-submit-head b{display:block;font-size:17px;line-height:1.4;color:#332C38}
.sup2-submit-head p{margin:5px 0 0;font-size:10.5px;line-height:1.65;color:#9A939F}
.sup2-nav-human{width:34px;height:34px;padding:0;border:0;border-radius:50%;display:flex;align-items:center;justify-content:center;
  color:#fff;background:linear-gradient(145deg,#FF78A8,#C65BDD);box-shadow:0 5px 14px rgba(218,86,155,.22);
  cursor:pointer;-webkit-tap-highlight-color:transparent}
.sup2-nav-human:active{transform:scale(.94)}
.sup2-nav-human .ico{width:19px;height:19px;display:flex;align-items:center;justify-content:center}
.sup2-nav-human svg{width:19px;height:19px;display:block}
.sup2-section{padding:20px 0 22px;border-top:1px solid rgba(82,57,72,.035)}
.sup2-section:first-child{padding-top:10px;border-top:0}
.sup2-section-head{display:flex;align-items:baseline;gap:10px}
.sup2-section-head b{font-size:16px;line-height:1.4;font-weight:700;color:#332C38;letter-spacing:.1px}
.sup2-section-head span{margin-left:auto;font-size:10.5px;font-weight:400;color:#A19AA5}
.sup2-clean .sup2-quick-grid--clean{gap:2px 20px;margin-top:8px}
.sup2-clean .sup2-quick-item--clean{padding:12px 0;border:0;border-radius:0;background:none;box-shadow:none;
  display:grid;grid-template-columns:38px minmax(0,1fr);grid-template-rows:auto auto;column-gap:11px;align-items:center}
.sup2-clean .sup2-quick-item--clean>span{grid-row:1/3;width:38px;height:38px;border-radius:50%;
  color:#D95D91;background:rgba(255,255,255,.62);box-shadow:none}
.sup2-clean .sup2-quick-item--clean>span .ico{width:20px;height:20px}
.sup2-clean .sup2-quick-item--clean b{grid-column:2;margin:0;font-size:13px;line-height:1.35;color:#3C3542}
.sup2-clean .sup2-quick-item--clean small{grid-column:2;margin:2px 0 0;font-size:9.5px;line-height:1.35;color:#9B949F}
.sup2-service-list{margin-top:5px}
.sup2-service{display:flex;align-items:center;gap:12px;min-height:57px;padding:10px 0;box-sizing:border-box;
  border-bottom:1px solid rgba(82,57,72,.07);cursor:pointer;-webkit-tap-highlight-color:transparent}
.sup2-service:last-child{border-bottom:0}
.sup2-service:active{opacity:.65}
.sup2-service-ico{width:37px;height:37px;border-radius:50%;flex:none;display:flex;align-items:center;justify-content:center;
  color:#D95D91;background:rgba(255,255,255,.78)}
.sup2-service-ico .ico{width:20px;height:20px}
.sup2-service.is-human .sup2-service-ico{color:#fff;background:linear-gradient(145deg,#FF75A8,#B75BDD);
  box-shadow:0 5px 14px rgba(222,91,157,.2)}
.sup2-service-copy{flex:1;min-width:0}
.sup2-service-copy b{display:block;font-size:14px;line-height:1.4;font-weight:600;color:#3B3440}
.sup2-service-copy small{display:block;margin-top:3px;font-size:10.5px;line-height:1.45;color:#99929D;
  overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.sup2-service-arrow{flex:none;color:#C9C1CB;font-size:20px;line-height:1}
.sup2-clean .sup2-faq-list{margin-top:3px}
.sup2-clean .sup2-faq-item{border-bottom:1px solid rgba(82,57,72,.045)}
.sup2-clean .sup2-faq-q{padding:13px 0;font-size:13px;line-height:1.5;color:#403944}
.sup2-clean .sup2-faq-a{padding:0 28px 13px 0;font-size:11.5px;line-height:1.75;color:#827B87}
.sup2-human-note{margin:11px 0 2px;padding:9px 12px;border-left:0;border-radius:9px;
  background:rgba(255,236,244,.62);font-size:11.5px;line-height:1.55;color:#8B526B}
.sup2-form-note{margin:11px 0 0;font-size:10px;line-height:1.65;color:#A09AA5}
.sup2-result{margin-top:13px;padding:11px 0 0;border-top:1px solid rgba(82,57,72,.07);
  font-size:11.5px;line-height:1.65;color:#188457}
.sup2-result[hidden]{display:none!important}
.sup2-hero{position:relative;overflow:hidden;margin:14px 14px 0;padding:18px 17px 15px;border-radius:22px;color:#fff;
  background:linear-gradient(135deg,#FF6E9F 0%,#E15497 52%,#A955D8 100%);
  box-shadow:0 16px 34px rgba(224,84,151,.25)}
.sup2-hero::after{content:"";position:absolute;right:-50px;top:-76px;width:184px;height:184px;border-radius:50%;
  background:radial-gradient(circle,rgba(255,255,255,.28),rgba(255,255,255,0) 68%)}
.sup2-hero-top{position:relative;display:flex;align-items:flex-start;gap:12px}
.sup2-hero-ico{width:48px;height:48px;border-radius:16px;flex:none;display:flex;align-items:center;justify-content:center;
  color:#fff;background:rgba(255,255,255,.17);border:1px solid rgba(255,255,255,.18)}
.sup2-hero-ico .ico{width:25px;height:25px}
.sup2-hero-copy{flex:1;min-width:0;padding-top:1px}
.sup2-hero-copy b{display:block;font-size:18px;line-height:1.35;letter-spacing:.2px}
.sup2-hero-copy p{margin:6px 0 0;font-size:11px;line-height:1.65;color:rgba(255,255,255,.76)}
.sup2-tags{position:relative;display:flex;gap:7px;margin-top:14px;flex-wrap:wrap}
.sup2-tags span{padding:4px 9px;border-radius:11px;font-size:9.5px;color:rgba(255,255,255,.82);
  background:rgba(255,255,255,.12);border:1px solid rgba(255,255,255,.14)}
.sup2-safety{display:flex;align-items:flex-start;gap:10px;margin:12px 14px 0;padding:12px 13px;border-radius:16px;
  background:linear-gradient(135deg,#FFF9EC,#FFFDF8);border:1px solid #F6E6CA}
.sup2-safety-ico{width:24px;height:24px;border-radius:50%;flex:none;display:flex;align-items:center;justify-content:center;
  background:#F0A33D;color:#fff;font-size:13px;font-weight:800}
.sup2-safety div{flex:1;min-width:0}
.sup2-safety b{display:block;font-size:12px;color:#6C5434}
.sup2-safety p{margin:3px 0 0;font-size:10px;line-height:1.6;color:#9B8464}
.sup2-contacts{margin:12px 14px 0;border-radius:17px;overflow:hidden;background:#fff;
  box-shadow:0 4px 17px rgba(52,36,48,.055)}
.sup2-contacts[hidden]{display:none!important}
.sup2-contact-row{display:flex;align-items:center;gap:11px;padding:12px 13px;border-bottom:1px solid #F4EFF3;
  color:inherit;text-decoration:none;cursor:pointer}
.sup2-contact-row:last-child{border-bottom:0}
.sup2-contact-ico{width:35px;height:35px;border-radius:12px;flex:none;display:flex;align-items:center;justify-content:center;
  color:#E15488;background:#FFF0F6}
.sup2-contact-ico .ico{width:19px;height:19px}
.sup2-contact-copy{flex:1;min-width:0}
.sup2-contact-copy b{display:block;font-size:12.5px;color:#3C3542}
.sup2-contact-copy small{display:block;margin-top:2px;font-size:10px;color:#96909B;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.sup2-contact-arrow{color:#C9C2CC;font-size:18px}
.sup2-contact-empty{padding:15px 14px;background:#fff}
.sup2-contact-empty b{display:block;font-size:12.5px;color:#3C3542}
.sup2-contact-empty span{display:block;margin-top:4px;font-size:10px;line-height:1.6;color:#96909B}
.sup2-card{margin:12px 14px 0;padding:15px;border-radius:19px;background:#fff;box-shadow:0 5px 20px rgba(52,36,48,.055)}
.sup2-sec-head{display:flex;align-items:center;gap:8px}
.sup2-sec-head b{font-size:15px;color:#352F3A}
.sup2-sec-head span{margin-left:auto;font-size:10px;color:#98929D;font-weight:400}
.sup2-quick-grid{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:9px;margin-top:12px}
.sup2-quick-item{padding:12px 11px;border-radius:14px;background:linear-gradient(145deg,#FFF6FA,#FFF9FC);
  border:1px solid #FBEBF3;cursor:pointer;min-width:0}
.sup2-quick-item>span{width:31px;height:31px;border-radius:10px;display:flex;align-items:center;justify-content:center;
  color:#DB5E91;background:#fff;box-shadow:0 4px 12px rgba(219,94,145,.1)}
.sup2-quick-item>span .ico{width:18px;height:18px}
.sup2-quick-item b{display:block;margin-top:8px;font-size:12.5px;color:#3C3542}
.sup2-quick-item small{display:block;margin-top:2px;font-size:9.5px;color:#9B949F}
.sup2-faq-list{margin-top:9px}
.sup2-faq-item{border-bottom:1px solid #F4EFF3}
.sup2-faq-item:last-child{border-bottom:0}
.sup2-faq-q{width:100%;display:flex;align-items:center;gap:10px;padding:11px 0;border:0;background:none;
  color:#3C3542;font-family:inherit;font-size:12.5px;font-weight:500;text-align:left;cursor:pointer}
.sup2-faq-q span{flex:1;min-width:0;line-height:1.5}
.sup2-faq-q i{flex:none;width:20px;height:20px;border-radius:50%;display:flex;align-items:center;justify-content:center;
  background:#F7F3F7;color:#9A939F;font-style:normal;font-size:15px;line-height:1;transition:transform .18s ease}
.sup2-faq-item.open .sup2-faq-q i{transform:rotate(45deg);background:#FFEFF6;color:#D85B8D}
.sup2-faq-a{padding:0 28px 12px 0;font-size:10.5px;line-height:1.75;color:#807A86}
.sup2-faq-a[hidden]{display:none!important}
.sup2-label{margin:14px 0 8px;font-size:11.5px;font-weight:600;color:#4B4351}
.sup2-label span{margin-left:5px;font-size:9.5px;font-weight:400;color:#A09AA5}
.sup2-cats{display:flex;flex-wrap:wrap;gap:7px}
.sup2-cat{height:30px;padding:0 11px;border-radius:15px;border:1px solid #EFE9EF;background:#F9F7FA;
  color:#77717E;font-family:inherit;font-size:10.5px;cursor:pointer;white-space:nowrap}
.sup2-cat.on{border-color:transparent;background:linear-gradient(135deg,#FF7CA9,#D35DD8);color:#fff;
  box-shadow:0 5px 13px rgba(226,91,162,.22)}
.sup2-field{position:relative}
.sup2-input{display:block;width:100%;min-height:116px;box-sizing:border-box;border:0;outline:0;resize:none;
  padding:12px 12px 26px;border-radius:14px;background:#F8F6F9;color:#3C3542;font:inherit;font-size:12.5px;line-height:1.65}
.sup2-input::placeholder{color:#AAA4AE}
.sup2-count{position:absolute;right:11px;bottom:8px;font-size:9.5px;color:#AAA4AE;pointer-events:none}
.sup2-count.over{color:#D9536B}
.sup2-evidence{padding:0;margin-top:1px}
.sup2-evidence .pimg{width:72px;height:72px}
.sup2-add{padding:0;border:1.5px dashed #DCD6DE;background:#FCFAFD;font-family:inherit;cursor:pointer}
.sup2-add .ico{width:18px;height:18px;color:#A39CA8}
.sup2-add small{font-size:9px;color:#9A939F}
.sup2-privacy{margin:10px 0 0;padding:9px 10px;border-radius:10px;background:#FFF7F2;
  font-size:9.5px;line-height:1.6;color:#9B7A64}
.sup2-submit{height:48px;border-radius:24px;margin-top:13px;font-size:15px}
.sup2-submit:disabled{opacity:.65}

/* --- 人工客服对话 --- */
.ai-sup-page{display:flex;flex-direction:column;overflow:hidden;overscroll-behavior:none;
  background:radial-gradient(120% 55% at 88% -8%,rgba(255,154,194,.26) 0,rgba(255,154,194,0) 60%),
             linear-gradient(180deg,#FFF9FC 0,#F7F5FA 42%,#F6F4F9 100%)}
.aisup-messages{flex:1;min-height:0;overflow-y:auto;overscroll-behavior:contain;-webkit-overflow-scrolling:touch;
  padding:14px 16px 8px;scrollbar-width:none}
.aisup-messages::-webkit-scrollbar{display:none;width:0;height:0}
.aisup-row{display:flex;align-items:flex-start;gap:8px;margin-bottom:13px}
.aisup-row.user{justify-content:flex-end}
.aisup-avatar{width:27px;height:27px;border-radius:10px;flex:none;display:flex;align-items:center;justify-content:center;
  color:#D55390;background:#FFF0F7;box-shadow:inset 0 0 0 1px rgba(231,125,168,.13)}
.aisup-avatar .ico{width:16px;height:16px}
.aisup-bubble{max-width:82%;padding:10px 13px;border-radius:17px 17px 17px 6px;background:rgba(255,255,255,.92);
  color:#3D3542;font-size:13px;line-height:1.7;word-break:break-word;white-space:normal;
  box-shadow:0 5px 18px rgba(62,42,56,.045)}
.aisup-row.user .aisup-bubble{border-radius:17px 17px 6px 17px;color:#fff;
  background:linear-gradient(135deg,#FF74A5,#D75CBB);box-shadow:0 6px 18px rgba(220,91,170,.18)}
.aisup-bubble.is-error{background:#FFF8F6;color:#6F5350;box-shadow:inset 0 0 0 1px rgba(235,181,171,.32)}
.aisup-inline-ticket{display:block;margin-top:9px;padding:0;border:0;background:none;color:#C24F86;
  font-size:12px;font-weight:600;font-family:inherit;text-decoration:underline;text-underline-offset:3px}
.aisup-typing{display:flex;align-items:center;gap:4px;min-width:58px;height:39px}
.aisup-typing i{width:5px;height:5px;border-radius:50%;background:#C9B8C8;animation:aisup-dot 1.15s infinite ease-in-out}
.aisup-typing i:nth-child(3){animation-delay:.14s}.aisup-typing i:nth-child(4){animation-delay:.28s}
@keyframes aisup-dot{0%,68%,100%{opacity:.35;transform:translateY(0)}34%{opacity:1;transform:translateY(-3px)}}
.aisup-suggests{flex:none;display:flex;gap:8px;overflow-x:auto;padding:4px 16px 9px;scrollbar-width:none}
.aisup-suggests::-webkit-scrollbar{display:none;width:0;height:0}
.aisup-suggests button{flex:none;height:29px;padding:0 12px;border-radius:15px;border:1px solid rgba(220,196,211,.5);
  background:rgba(255,255,255,.7);color:#6E626F;font-size:11px;font-family:inherit;white-space:nowrap}
.aisup-suggests button:active{background:#FFF0F7;color:#C34F87}
.aisup-composer{flex:none;padding:9px 14px calc(10px + env(safe-area-inset-bottom,0px));
  background:rgba(255,255,255,.9);border-top:1px solid rgba(85,62,77,.055);
  -webkit-backdrop-filter:blur(16px);backdrop-filter:blur(16px)}
.aisup-input-row{display:flex;align-items:flex-end;gap:7px;padding:5px 6px 5px 14px;border-radius:21px;background:#F3F0F5}
.aisup-input{display:block;flex:1;width:100%;min-height:30px;max-height:96px;padding:5px 0;box-sizing:border-box;
  border:0;outline:0;resize:none;background:none;color:#332C38;font-family:inherit;font-size:13px;line-height:1.55;overflow-y:auto}
.aisup-input::placeholder{color:#AAA2AD}
.aisup-send{width:34px;height:34px;border-radius:50%;flex:none;display:flex;align-items:center;justify-content:center;
  color:#fff;background:linear-gradient(145deg,#FF77A6,#CA58C0);box-shadow:0 4px 12px rgba(206,80,165,.23)}
.aisup-send .ico{width:17px;height:17px}
.aisup-send:disabled{color:#B9B0BC;background:#E7E2E9;box-shadow:none}
.sup2-history{margin:16px 14px 0}
.sup2-filters{display:flex;gap:7px;margin-top:10px}
.sup2-filters button{height:29px;padding:0 13px;border-radius:15px;border:1px solid #ECE6ED;background:#fff;
  color:#77717E;font-family:inherit;font-size:10.5px;cursor:pointer}
.sup2-filters button.on{border-color:transparent;background:#332831;color:#fff}
.sup2-history>div[data-sup-history]{margin-top:10px}
.sup2-ticket{margin-bottom:9px;padding:13px 13px 10px;border-radius:16px;background:#fff;
  box-shadow:0 3px 13px rgba(52,36,48,.045)}
.sup2-ticket-top{display:flex;align-items:center;gap:6px}
.sup2-ticket-cat{padding:3px 8px;border-radius:9px;background:#FFF1F6;color:#C45482;font-size:9.5px;font-weight:600}
.sup2-ticket-status{padding:3px 7px;border-radius:9px;font-size:9px;font-weight:600;background:#F3F1F4;color:#8A8390}
.sup2-ticket-status.st-pending{background:#FFF4E7;color:#C37822}
.sup2-ticket-status.st-processing{background:#EEF1FF;color:#5D64D4}
.sup2-ticket-status.st-replied{background:#EAF8F0;color:#1D8E5B}
.sup2-ticket-status.st-closed{background:#F2F1F4;color:#8A8390}
.sup2-ticket-top time{margin-left:auto;font-size:9px;color:#AAA4AE}
.sup2-ticket-body{margin-top:9px;font-size:12px;line-height:1.65;color:#443D4A;word-break:break-word}
.sup2-ticket-media{display:inline-block;margin-top:6px;padding:2px 7px;border-radius:8px;background:#F7F4F8;
  font-size:9px;color:#8E8794}
.sup2-ticket-reply{margin-top:9px;padding:10px 11px;border-radius:11px;background:#FFF6FA}
.sup2-ticket-reply b{display:block;font-size:9.5px;color:#B64E7C;font-weight:600}
.sup2-ticket-reply p{margin:4px 0 0;font-size:10.5px;line-height:1.7;color:#6E5663;white-space:normal}
.sup2-ticket-wait{margin-top:9px;font-size:9.5px;color:#A09AA5}
.sup2-ticket-foot{display:flex;align-items:center;margin-top:9px;padding-top:8px;border-top:1px solid #F5F1F5}
.sup2-ticket-foot span{font-size:9px;color:#B0AAB4}
.sup2-ticket-foot button{margin-left:auto;height:28px;padding:0 11px;border-radius:14px;border:1px solid #F4C9DC;
  background:#FFF7FA;color:#C45482;font-family:inherit;font-size:10px;font-weight:600;cursor:pointer}
.sup2-empty{padding:24px 15px;border-radius:16px;background:#fff;text-align:center;box-shadow:0 3px 13px rgba(52,36,48,.04)}
.sup2-empty b{display:block;font-size:12.5px;color:#4B4351}
.sup2-empty p{margin:5px auto 0;max-width:230px;font-size:10px;line-height:1.65;color:#9A939F}
.sup2-empty button{margin-top:11px;height:30px;padding:0 14px;border-radius:15px;border:1px solid #F1C8DA;
  background:#FFF6FA;color:#C45482;font-family:inherit;font-size:10.5px;font-weight:600;cursor:pointer}
.mc-card{margin:0 14px 18px;background:#fff;border-radius:16px;padding:14px 12px 0;
  box-shadow:0 3px 14px rgba(24,24,24,.05)}
.mc-title{display:flex;align-items:center;font-size:var(--fs-15);font-weight:700;color:var(--t1);
  padding:0 4px;margin-bottom:12px}
.mc-more{margin-left:auto;font-size:var(--fs-12);font-weight:400;color:#9499A5;cursor:pointer}
.mc-more::after{content:"›";display:inline-block;margin-left:4px;transition:transform .16s}
.mc-more.on::after{transform:rotate(90deg)}
/* 统一图标规范：四列、每格一个同尺寸圆形底板（以前圆形/方形/圆角混用，像几个页面拼的） */
.mc-grid{display:grid;grid-template-columns:repeat(4,1fr);gap:16px 4px;padding-bottom:16px}
.mc-grid .g{display:flex;flex-direction:column;align-items:center;gap:7px}
.mc-grid .gi{width:42px;height:42px;border-radius:50%;display:flex;align-items:center;justify-content:center;
  background:linear-gradient(160deg,#FFF3F8,#FDE9F1)}
.mc-grid .gi img{width:22px;height:22px;object-fit:contain}
.mc-grid .gt{font-size:var(--fs-12);color:var(--t2)}
.mc-fold{display:none}
.mc-fold.on{display:grid}
/* 「我的权益」：一张卡里两个圆形底板 + 名称 + **只写状态**（未开通）。
   以前每格底下还挂一行「点这里看档位与特权」，用户明确要求删掉 —— 状态就是状态。 */
.mc-viprow{display:flex;align-items:center;gap:14px;padding:0 2px 10px}
.mc-viprow .v{display:flex;align-items:center;gap:8px}
.mc-viprow .vb{width:34px;height:34px;border-radius:50%;flex:none;display:flex;align-items:center;
  justify-content:center;background:linear-gradient(150deg,#FDEBBF,#F7D889)}
.mc-viprow .vb.purple{background:linear-gradient(150deg,#EDE9FD,#D6CEF8)}
.mc-viprow .vb img{width:20px;height:20px;object-fit:contain}
.mc-viprow .v b{display:block;font-size:var(--fs-14);font-weight:700;color:#8A6520}
.mc-viprow .v:nth-child(2) b{color:var(--t1)}
.mc-viprow .v small{font-size:var(--fs-12);color:var(--t3)}
.mc-viprow .mc-more{margin-left:auto;font-size:var(--fs-13)}
/* 「更多工具」按参考图三是**横排一行**：美颜相机 ｜ 活动中心 …… 更多 ›（不是格子）。 */
.mc-tools{display:flex;align-items:center;padding:0 2px 16px;font-size:var(--fs-14);color:var(--t1)}
.mc-tools .tl{display:flex;align-items:center;gap:7px}
.mc-tools .tl img{width:22px;height:22px;object-fit:contain}
.mc-tools .tl+.tl{margin-left:16px;padding-left:16px;border-left:1px solid #EFEAF0}
.mc-tools .mc-more{margin-left:auto;font-size:var(--fs-13)}
/* 「我的」页主体：第一张卡离页头 8、卡间距 18（照参考图三的呼吸感量的） */
.mine-body{padding-top:8px}
.mc-row{display:flex;align-items:center;gap:10px;padding:15px 16px;font-size:var(--fs-14);color:var(--t1)}
.mc-row img{width:22px;height:22px;object-fit:contain}
.mc-row .ar{margin-left:auto;color:var(--t4);font-size:12px}
/* 顶部余额卡上的两个主按钮：充值（品牌渐变）/ 提现（描边玻璃） */
/* 兑换页那张深卡上的比例条：一句话说清换算关系（真值来自配置，不是写死的文案） */
.xch-ratio{margin-top:12px;border-radius:10px;background:rgba(255,255,255,.09);
  padding:7px 10px;font-size:var(--fs-11);color:rgba(255,255,255,.78);text-align:center}
.xch-head{display:flex;align-items:center;justify-content:space-between;padding:14px 16px 0;
  font-size:14px;font-weight:600}
.xch-head span{font-size:var(--fs-11);font-weight:400;color:var(--t3)}
.xch-note{text-align:center;font-size:10.5px;color:#8E8E99;padding:0 24px 12px;line-height:1.7}
.wallet-top .wacts{display:flex;gap:10px;margin-top:14px}
.wacts .wact{flex:1;height:38px;border-radius:var(--r-cap);display:flex;align-items:center;justify-content:center;
  font-size:var(--fs-14);font-weight:600;color:#fff;background:var(--brand-grad);cursor:pointer;
  box-shadow:0 8px 18px rgba(255,76,129,.3)}
.wacts .wact.ghost{background:rgba(255,255,255,.14);box-shadow:inset 0 0 0 1px rgba(255,255,255,.36)}
.first-charge{margin:12px 16px 0;border-radius:14px;background:linear-gradient(90deg,#FFEFF4,#FFE1EC);padding:12px 14px;display:flex;align-items:center;gap:10px}
.first-charge .fc-t b{font-size:var(--fs-14);color:var(--brand-deep);display:block}
.first-charge .fc-t small{font-size:var(--fs-11);color:#BF6E8C}
.first-charge .btn{margin-left:auto;width:auto;padding:0 18px;
  /* 不要被 flex 压到换行：「领金币」三个字原来会被挤成「领金」/「币」两行。 */
  flex:none;white-space:nowrap}
.coin-grid{display:grid;grid-template-columns:repeat(3,1fr);gap:10px;padding:12px 16px 16px}
.coin{position:relative;border-radius:12px;border:1.5px solid var(--line-2);background:#fff;padding:14px 6px 10px;text-align:center;cursor:pointer;-webkit-tap-highlight-color:transparent}
.coin.hot{border-color:var(--line-2);background:#fff}
.coin .badge-hot{position:absolute;top:4px;left:7px;background:none;color:var(--brand);font-size:9px;font-weight:600;
  line-height:1;letter-spacing:.1px;padding:0;border-radius:0}
.coin .badge-last{position:absolute;top:-1px;right:-1px;background:#FFF3D6;color:#C8901A;font-size:9px;padding:2px 8px;border-radius:0 12px 0 12px}
.coin .badge-double{position:absolute;top:-1px;right:-1px;background:linear-gradient(135deg,#FF3B30,#FF7A45);
  color:#fff;font-size:9px;font-weight:700;padding:2px 8px;border-radius:0 12px 0 12px;
  box-shadow:0 4px 10px rgba(255,59,48,.32)}
.coin .gift-extra{font-size:var(--fs-10);font-weight:600;color:var(--gold-ink)}
.coin .amt{font-size:var(--fs-18);font-weight:700;display:flex;align-items:center;justify-content:center;gap:4px}
.coin .amt img{width:17px;height:17px;object-fit:contain}
.coin .price{margin-top:6px;font-size:var(--fs-13);color:var(--brand);font-weight:600}
.coin .old{font-size:var(--fs-10);color:var(--t4);text-decoration:line-through}
/* 选中的档位：品牌色描边 + 浅粉底 + 一圈淡光，和 .coin.hot（推荐）区分开。 */
.coin.on{border-color:var(--brand);background:#FFFBFC;box-shadow:0 0 0 3px rgba(255,76,129,.13)}
.coin.on::after{content:"✓";position:absolute;right:5px;bottom:5px;width:16px;height:16px;border-radius:50%;
  display:flex;align-items:center;justify-content:center;background:var(--brand-grad);color:#fff;font-size:10px;font-weight:700}
.wallet-checkout{position:sticky;bottom:10px;z-index:6;margin:0 16px 16px;padding:12px;border-radius:18px;
  background:rgba(255,255,255,.96);backdrop-filter:blur(14px);box-shadow:0 10px 32px rgba(42,20,38,.16);
  display:flex;align-items:center;gap:12px}
.wallet-checkout .btn{flex:none;width:auto;height:42px;padding:0 20px;border-radius:14px;white-space:nowrap}
.wallet-checkout .btn:disabled{background:#ECECF1;color:#9A9AA8;box-shadow:none;cursor:default}
.wallet-checkout--simple{padding:10px}
.wallet-checkout--simple .btn{flex:1;width:100%}

/* --- 礼物面板 --- */
.gift-tabs{display:flex;gap:18px;padding:12px 16px 8px;font-size:var(--fs-13);color:var(--t3)}
.gift-tabs .on{color:var(--t1);font-weight:700;position:relative}
.gift-tabs .on::after{content:"";position:absolute;left:50%;transform:translateX(-50%);bottom:-6px;width:16px;height:3px;border-radius:2px;background:var(--brand-grad)}
.gift-grid{display:grid;grid-template-columns:repeat(4,1fr);gap:12px 6px;padding:6px 16px 12px}
.gift{text-align:center;position:relative}
.gift img{width:56px;height:56px;object-fit:contain;margin:0 auto 4px}
.gift b{display:block;font-size:var(--fs-11);font-weight:500;color:var(--t1)}
.gift small{font-size:var(--fs-10);color:#C98200;display:flex;align-items:center;justify-content:center;gap:2px}
.gift.sel::before{content:"";position:absolute;inset:-4px -2px 0;border:1.5px solid var(--brand);border-radius:12px}
.gift small{color:var(--gold-ink)}
/* 礼物面板：语音房的「送给谁」（U11）。收礼人只能是麦上的人，这里现选一枚。 */
.gift-to{display:flex;align-items:center;gap:8px;padding:0 16px 10px;overflow-x:auto}
.gift-to .gt-lb{flex:none;font-size:11.5px;color:#8A8A94}
.gift-to .gt-p{flex:none;display:inline-flex;align-items:center;gap:6px;font-size:11.5px;color:#333;
  background:#F5F6F9;border:1px solid transparent;border-radius:30px;padding:3px 12px 3px 3px;cursor:pointer}
.gift-to .gt-p img{width:22px;height:22px;border-radius:50%;object-fit:cover}
.gift-to .gt-p.on{background:var(--brand-soft);border-color:rgba(255,76,129,.45);color:var(--brand-deep);font-weight:600}
.gift-bal{display:flex;align-items:center;gap:10px;padding:2px 16px 8px}
.gift-bal .coinpill{flex:1;height:34px;border-radius:17px;background:var(--line-3);display:flex;align-items:center;
  padding:0 14px;font-size:var(--fs-13);color:var(--t2);gap:6px}
.gift-bal .coinpill img{width:15px;height:15px;object-fit:contain}
.gift-bal .gb-recharge{font-size:var(--fs-12);font-weight:600;color:var(--brand);cursor:pointer;flex:none}
.gift-foot{display:flex;align-items:center;gap:10px;padding:10px 16px 24px}
.gift-foot .coinpill{flex:1;height:36px;border-radius:18px;background:var(--line-3);display:flex;align-items:center;padding:0 14px;font-size:var(--fs-13);color:var(--t2);gap:6px}
.gift-foot .coinpill img{width:16px;height:16px}

/* --- 贵族/特权 --- */
.noble-head{flex:none;padding:10px 16px 22px;background:linear-gradient(160deg,#2A2138,#4A3556 60%,#6a4a52);color:#fff;position:relative;overflow:hidden}
.noble-head::after{content:"";position:absolute;right:-40px;top:-50px;width:180px;height:180px;border-radius:50%;background:radial-gradient(circle,rgba(255,199,0,.35),transparent 70%)}
.noble-head h3{margin:8px 0 4px;font-size:22px;letter-spacing:1px}
.noble-head p{margin:0;font-size:var(--fs-12);color:rgba(255,255,255,.75)}
.noble-head .tags{display:flex;gap:8px;margin-top:14px}
.noble-head .tags span{font-size:var(--fs-11);background:rgba(255,255,255,.14);border-radius:12px;padding:4px 10px}
.noble-list{padding:8px 16px 16px}
.noble-item{display:flex;align-items:center;gap:12px;padding:12px 0;border-bottom:1px solid var(--line-2)}
.noble-item:last-child{border-bottom:none}
.noble-item .ic{width:40px;height:40px;border-radius:12px;background:linear-gradient(135deg,#FFF3D6,#FFE0A6);display:flex;align-items:center;justify-content:center;flex:none}
/* --- P1 贵族档位卡：分层渐变 + 当前档白描边（重视觉页，一眼看出层级） --- */
.noble-cards{margin:12px 16px 0}
.noble-cards .noble-rail{display:flex;gap:10px;overflow-x:auto;padding:2px 0 8px;
  -webkit-overflow-scrolling:touch}
.tier-card{position:relative;flex:0 0 138px;border-radius:16px;padding:14px 12px 12px;color:#fff;
  box-shadow:0 8px 20px rgba(0,0,0,.14)}
.tier-card.tier-violet{background:linear-gradient(160deg,#8C6BFF,#5B32D6)}
.tier-card.tier-pink{background:linear-gradient(160deg,#FF7FB0,#FF4C81)}
.tier-card.tier-gold{background:linear-gradient(160deg,#FFD75E,#E88A1A)}
.tier-card.on{outline:2px solid #fff;outline-offset:-2px;
  box-shadow:0 0 0 3px rgba(255,76,129,.5),0 10px 24px rgba(0,0,0,.2)}
.tier-card .tier-ic{width:34px;height:34px;object-fit:contain}
.tier-card .tier-nm{font-size:14px;font-weight:700;margin-top:8px}
.tier-card .tier-pr{font-size:12.5px;margin-top:4px}
/* 价格前面那枚钻石是 b-diamond（自带金色/粉色的插画），invert 会把它抹成一片白；
   卡面本身就是深色渐变，原色直接看得清。 */
.tier-card .tier-pr img{vertical-align:-1px}
.tier-card .tier-du{font-size:11px;opacity:.85;margin-top:2px}
.tier-card .tier-buy{margin-top:10px;height:30px;border-radius:15px;background:rgba(255,255,255,.94);
  color:#333;display:flex;align-items:center;justify-content:center;font-size:12.5px;font-weight:600;cursor:pointer}
.tier-card .tier-on{position:absolute;top:9px;right:9px;font-style:normal;font-size:10px;
  background:rgba(255,255,255,.26);border-radius:9px;padding:2px 7px}
.noble-item .ic img{width:24px;height:24px;object-fit:contain}
.noble-item .tt{flex:1}
.noble-item .tt b{font-size:var(--fs-14);display:block}
.noble-item .tt .lvtag{font-style:normal;font-size:10px;font-weight:600;color:#8A8A94;
  background:#F1F1F5;border-radius:9px;padding:1px 6px;margin-left:6px;vertical-align:1px}
.noble-item.on .ic{background:linear-gradient(135deg,#FFE9F1,#FFD8E6)}
.noble-item .noble-on{font-size:11px;font-weight:600;color:#C98200;flex:none}
.noble-item .tt small{font-size:var(--fs-11);color:var(--t3)}
.noble-item .pr{font-size:var(--fs-13);color:#C98200;font-weight:700;display:flex;align-items:center;gap:4px}

/* --- 设置 --- */
.set-group{background:#fff;margin:8px 0 0}
.p4-sec+.set-group{margin-top:0}
.set-item{display:flex;align-items:center;gap:12px;padding:11px 16px;font-size:var(--fs-14);border-bottom:1px solid var(--line-2)}
.set-item:last-child{border-bottom:none}
.set-item img{width:22px;height:22px;object-fit:contain}
.set-item .ar{margin-left:auto;color:var(--t4);font-size:12px}
/* 开关的尺寸 / 颜色只有一套，见文件末尾 `.p4-sw, .set-item .sw-tgl`（原来这里另写了一套 25px / #DDD，
   和 .p4-sw 的 26px / #E9E9EE 在同一个 App 里并存 = 两个开关长得不一样）。这里只留「靠右」。 */
.set-item .sw-tgl{margin-left:auto}

/* 设置中心：账号、隐私、通知与安全统一成原生设置式分组卡片。
   这一套只作用于 .st-page，不污染聊天 / 房间 / 直播间里同名的通用设置行。 */
.st-page{padding:2px 0 calc(26px + var(--safe-bottom,0px));background:#F6F7FA}
.st-group{margin:16px 14px 0}
.st-label{padding:0 5px 8px;font-size:12px;font-weight:600;letter-spacing:.2px;color:#96939D}
.st-card{background:#fff;border:1px solid rgba(34,29,42,.045);border-radius:18px;overflow:hidden;
  box-shadow:0 8px 24px rgba(36,28,44,.045)}
.st-row{position:relative;display:flex;align-items:center;gap:12px;min-height:62px;padding:11px 15px;
  font-size:14px;color:#25222A;cursor:pointer;transition:background .16s ease;isolation:isolate}
.st-row+.st-row::before{content:"";position:absolute;left:64px;right:0;top:0;height:1px;background:#F1F0F4}
.st-row:active{background:#FFF5F8}
.st-ico{width:38px;height:38px;border-radius:12px;display:flex;align-items:center;justify-content:center;flex:none;
  background:#FFF0F5;box-shadow:inset 0 0 0 1px rgba(255,255,255,.7)}
.st-ico .ico{width:20px;height:20px;color:#E85780}
.st-ico img{width:20px;height:20px;object-fit:contain}
.st-ico.tone-pink .ico{color:#E85780}.st-ico.tone-blue .ico{color:#4C7FE8}
.st-ico.tone-violet .ico{color:#8464D8}.st-ico.tone-mint .ico{color:#18A47A}
.st-ico.tone-orange .ico{color:#E28A3B}.st-ico.tone-lime .ico{color:#6A9D34}
.st-ico.tone-cyan .ico{color:#269BA5}.st-ico.tone-gold .ico{color:#C08A2A}
.st-ico.tone-red .ico{color:#D95359}.st-ico.tone-slate .ico{color:#716D7B}
.st-ico.tone-brand .ico{color:#E85780}
.st-ico.tone-pink{background:#FFF0F5}.st-ico.tone-blue{background:#EEF5FF}
.st-ico.tone-violet{background:#F3EEFF}.st-ico.tone-mint{background:#EAF9F3}
.st-ico.tone-orange{background:#FFF4E9}.st-ico.tone-lime{background:#F2F9E9}
.st-ico.tone-cyan{background:#EAF9FA}.st-ico.tone-gold{background:#FFF8E4}
.st-ico.tone-red{background:#FFF0F0}.st-ico.tone-slate{background:#F3F3F6}
.st-ico.tone-brand{background:linear-gradient(135deg,#FFF0F5,#F5EFFF)}
.st-main{flex:1;min-width:0;display:block;line-height:1.35}
.st-main b{display:block;font-size:14px;font-weight:600;color:#25222A;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.st-main small{display:block;margin-top:3px;font-size:11.5px;line-height:1.45;color:#92909A;
  overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.st-arrow{flex:none;margin-left:1px;font-size:21px;line-height:1;color:#C6C3CB;font-family:-apple-system,BlinkMacSystemFont,sans-serif}
.st-value{flex:none;max-width:104px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;
  font-size:12px;color:#A09DA7;text-align:right}
.st-value .st-value-sk{width:44px;height:10px;border-radius:5px}
.st-value.danger{color:#E5484D;font-size:12px;font-weight:500}
.st-status{flex:none;font-size:11.5px;color:#8E8B95;text-align:right}
.st-status .st-status-sk{width:34px;height:9px;border-radius:5px}
.st-status.on{color:#E54870}.st-status.off{color:#12A150}
.st-row .sw-tgl{margin-left:auto;flex:none}
.st-row .sw-tgl.st-unset{visibility:hidden}
.st-row .sw-tgl.st-pending{opacity:.58;animation:st-pending 1.25s ease-in-out infinite}
@keyframes st-pending{0%,100%{opacity:.42}50%{opacity:.78}}
.st-row.is-busy{pointer-events:none}
.st-row.is-busy .sw-tgl{opacity:.62}
.st-hint{margin:7px 20px 0;font-size:11px;line-height:1.6;color:#96939D}
.st-note{margin:18px 20px 0;text-align:center;font-size:10.5px;line-height:1.7;color:#A4A1AA}
.st-logout{margin:22px 14px 0;height:50px;border-radius:16px;background:#fff;border:1px solid rgba(34,29,42,.045);
  display:flex;align-items:center;justify-content:center;color:#E5484D;font-size:14px;font-weight:600;
  box-shadow:0 8px 24px rgba(36,28,44,.04);cursor:pointer}
.st-logout:active{background:#FFF3F4}
.st-page>.p4-sec{padding:18px 20px 8px;font-size:12.5px;font-weight:600;letter-spacing:.2px;color:#96939D}
.st-page>.p4-card{margin:0 14px;border:1px solid rgba(34,29,42,.045);border-radius:18px;overflow:hidden;
  box-shadow:0 8px 24px rgba(36,28,44,.045)}
.st-page>.p4-card .p4-row{padding:14px 15px;border-color:#F1F0F4}
.st-page>.set-group{margin:0 14px;border:1px solid rgba(34,29,42,.045);border-radius:18px;overflow:hidden;
  box-shadow:0 8px 24px rgba(36,28,44,.045)}
.st-page>.set-group .set-item{padding:14px 15px;border-color:#F1F0F4}
.st-page>.set-group .set-item img{width:20px;height:20px;opacity:.72}
.st-page>.p4-note{margin:14px 20px 0}

/* 黑名单：空态只保留一处说明；有数据时只显示人数，不再出现上限。 */
.st-bl-intro{display:flex;align-items:center;gap:12px;margin:18px 16px 0;padding:2px 2px 0}
.st-bl-intro-main{flex:1;min-width:0}
.st-bl-intro-main b{display:block;font-size:14px;color:#25222A}
.st-bl-intro-main small{display:block;margin-top:4px;font-size:11.5px;line-height:1.6;color:#92909A}
.st-count{flex:none;padding:5px 10px;border-radius:12px;background:#FFF0F5;color:#E85780;font-size:11px;font-weight:600}
.st-bl-card{margin:14px 14px 0}
.st-bl-card .st-row{padding:13px 15px;cursor:pointer}
.st-bl-card .st-row+.st-row::before{left:74px}
.st-bl-card .st-av{width:46px;height:46px;border-radius:50%;object-fit:cover;background:#F1F0F4;flex:none;filter:grayscale(.22)}
.st-bl-card .st-bl-time{margin-top:4px;font-size:11px;color:#9A97A1}
.st-unblock{flex:none;padding:7px 13px;border-radius:14px;background:#FFF1F3;color:#E5484D;font-size:11.5px;font-weight:600}
.st-unblock:active{background:#FFE4E7}
.st-empty{display:flex;flex-direction:column;align-items:center;padding:48px 24px 52px;text-align:center}
.st-empty-ico{width:64px;height:64px;border-radius:22px;background:linear-gradient(145deg,#FFF1F6,#F5F0FF);
  display:flex;align-items:center;justify-content:center;margin-bottom:15px}
.st-empty-ico img{width:30px;height:30px;object-fit:contain;opacity:.88}
.st-empty-ico .ico{width:30px;height:30px;color:#8D82A0}
.st-empty b{font-size:14px;font-weight:600;color:#3A363F}
.st-empty small{margin-top:6px;font-size:11.5px;line-height:1.65;color:#9A97A1}
.st-bl-skeleton .st-main .sk:first-child{margin-top:1px}

/* 通话收费：价格、区间和免费名单与设置主页使用同一套卡片，不再混用旧弹窗样式。 */
.cs-page .st-row .sw-tgl{margin-left:auto}
.cs-page .cs-price{max-width:132px;color:#E85780;font-weight:600;font-size:11.5px}
.cs-range-card{padding:16px 16px 14px}
.cs-range-note{margin:0 0 20px;font-size:11.5px;line-height:1.65;color:#92909A}
.cs-page .prange{margin:0 5px}
.cs-range-scale{display:flex;justify-content:space-between;margin-top:17px;font-size:10.5px;color:#A09DA7}
.cs-range-scale b{font-weight:600;color:#77727F}
.cs-free-card{padding-bottom:2px}
.cs-free-head{display:flex;align-items:center;gap:10px;padding:14px 15px 2px}
.cs-free-head span{flex:1;min-width:0;font-size:11.5px;color:#92909A}
.cs-free-head b{flex:none;font-size:11px;font-weight:600;color:#E85780}
.cs-free-list{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:13px 8px;padding:14px 14px 16px}
.cs-free-item{position:relative;display:flex;flex-direction:column;align-items:center;gap:6px;min-width:0;cursor:pointer}
.cs-free-item>span:not(.cs-free-av){max-width:100%;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;
  font-size:11.5px;color:#55515C}
.cs-free-av{width:49px;height:49px;border-radius:50%;overflow:hidden;display:block;background:#F2F1F4;
  box-shadow:0 0 0 1px rgba(34,29,42,.035)}
.cs-free-av img{width:100%;height:100%;object-fit:cover}
.cs-free-item>i{position:absolute;right:5px;top:-3px;width:17px;height:17px;border-radius:50%;display:flex;
  align-items:center;justify-content:center;background:#3B3640;color:#fff;font-size:12px;font-style:normal;
  line-height:1;box-shadow:0 2px 7px rgba(25,20,30,.20)}
.cs-free-add{display:flex;flex-direction:column;align-items:center;justify-content:center;gap:5px;width:49px;
  height:49px;margin:0 auto;border:1.5px dashed #DDD9E2;border-radius:50%;background:#FCFBFD;color:#9C96A3;
  padding:0;font-family:inherit;cursor:pointer}
.cs-free-add .ico{width:19px;height:19px}
.cs-free-add small{font-size:10px;color:#9C96A3}
.cs-free-skeleton{cursor:default}
.cs-free-skeleton>span{width:49px;height:49px;border-radius:50%}
.cs-free-skeleton>i{position:static;width:38px;height:9px;border-radius:5px;background:#F1F0F4}

/* 账号申诉：没有处罚时只展示真实状态；首帧也不再闪设计稿里的假处罚。 */
.appeal-skeleton-hero{display:flex;align-items:center;gap:12px;padding:16px 15px}
.appeal-status-card{display:flex;align-items:center;gap:13px;padding:18px 16px}
.appeal-status-card .st-main b{font-size:15px}
.appeal-status-card .st-main small{font-size:12px;line-height:1.55}
.appeal-status-card.danger{background:linear-gradient(135deg,#FFF7F7,#fff)}
.appeal-status-card.danger .st-main b{color:#C33A43}

/* 通用工具 */
.flex{display:flex}.between{justify-content:space-between}.center{align-items:center}
.mt4{margin-top:4px}.mt8{margin-top:8px}.mt10{margin-top:10px}.mt12{margin-top:12px}.mt14{margin-top:14px}.mt16{margin-top:16px}.mt20{margin-top:20px}
.f11{font-size:var(--fs-11)}.f12{font-size:var(--fs-12)}.f13{font-size:var(--fs-13)}.f14{font-size:var(--fs-14)}
.t2c{color:var(--t2)}.t3c{color:var(--t3)}.brandc{color:var(--brand)}.goldc{color:#C98200}
.w700{font-weight:700}.w600{font-weight:600}
.ticon{width:16px;height:16px;object-fit:contain}
/* 通用「空状态」块。名字带上 -state：叫 .empty 会和 .kmic.empty（KTV 空麦位那种自带尺寸的元素）撞车，
   继承到这里的 padding:60px 30px，麦位会被撑成 62x122 的椭圆。 */
.empty-state{text-align:center;color:var(--t3);font-size:var(--fs-13);line-height:2;padding:60px 30px}
.empty-state img{width:110px;margin:0 auto 12px;opacity:.9}

/* =========================================================================
   原版还原：三款 App 真实布局的 1:1 渲染视图
   ========================================================================= */
.real-wrap{max-width:1560px;margin:0 auto;color:#d8d8e2;padding-bottom:60px}
.ref-banner{max-width:1240px;margin:18px auto 0;display:flex;align-items:center;gap:14px;flex-wrap:wrap;
  padding:11px 16px;border:1px dashed #3a3a48;border-radius:12px;background:#14141b;color:#9a9aa8;font-size:12.5px}
.ref-banner b{color:#c9c9d4}
.ref-banner .ref-back{margin-left:auto;padding:7px 14px;border-radius:16px;background:#22222c;color:#c9c9d4;
  font-size:12.5px;border:1px solid #33333f;transition:.18s}
.ref-banner .ref-back:hover{background:#2c2c38;color:#fff}
.real-note{background:#16161e;border:1px solid #24242e;border-left:3px solid var(--brand);
  border-radius:12px;padding:18px 20px;margin-bottom:26px}
.real-note h2{font-size:16px;color:#fff;margin:0 0 10px;letter-spacing:.5px}
.real-note p{font-size:12.5px;line-height:1.9;color:#9a9aa8;margin:0}
.real-note strong{color:#ffd7e4}
.real-note code{color:#FF9EC0;font-size:12px}
.real-group{margin-bottom:34px}
.real-group h3{font-size:14px;color:#fff;margin:0 0 16px;letter-spacing:.5px;
  display:flex;align-items:baseline;gap:12px}
.real-group h3 span{font-size:11.5px;color:#5f5f6d;font-weight:400;letter-spacing:0}
.real-grid{display:flex;flex-wrap:wrap;gap:24px 20px}
.real-item{margin:0;width:201px}
.real-cap{display:flex;flex-direction:column;gap:2px;margin-bottom:8px;min-height:34px}
.real-cap b{font-size:12.5px;color:#e8e8f0;font-weight:600}
.real-cap code{font-size:10.5px;color:#6f6f80;word-break:break-all;line-height:1.35}
.real-phone{width:201px;height:436px;border-radius:16px;overflow:hidden;background:#000;
  border:1px solid #2a2a36;box-shadow:0 6px 22px rgba(0,0,0,.45)}
.real-phone iframe{width:375px;height:812px;border:0;transform:scale(.536);transform-origin:0 0}

/* =========================================================================
   第二批页面（附近 / 访客 / 榜单 / 签到 / 收益 / 首充 / 礼物墙 / 商城 /
   动态详情 / 发布 / 相册 / 家族广场 / KTV / 盲盒 / 情侣 / 通话设置 /
   通知 / 搜索 / 青少年模式）
   ========================================================================= */
.sec-title{display:flex;align-items:center;gap:8px;font-size:var(--fs-13);font-weight:700;color:var(--t1);margin:0 0 10px}
.sec-title span{font-size:var(--fs-11);font-weight:400;color:var(--t3)}
.tagwrap{display:flex;flex-wrap:wrap;gap:8px}

/* --- 附近的人 --- */
.ncard{position:relative;height:218px;border-radius:14px;overflow:hidden;background:#ddd;box-shadow:0 3px 12px rgba(24,24,24,.10)}
.ncard img{width:100%;height:100%;object-fit:cover}
.nshade{position:absolute;inset:0;background:linear-gradient(180deg,rgba(0,0,0,0) 44%,rgba(0,0,0,.72))}
.nlive{position:absolute;left:8px;top:8px;display:flex;align-items:center;gap:4px;background:rgba(0,0,0,.42);color:#fff;font-size:9.5px;border-radius:9px;padding:3px 7px;backdrop-filter:blur(4px)}
.nlive i{width:6px;height:6px;border-radius:50%;background:#3ED07F}
.nmeta{position:absolute;left:9px;right:9px;bottom:9px;color:#fff}
.nmeta .nn{display:flex;align-items:center;gap:4px;font-size:var(--fs-13);font-weight:600}
.nmeta .nn img{width:16px;height:16px;object-fit:contain}
.nmeta .nd{font-size:9.5px;opacity:.85;margin-top:2px}
.nmeta .nt{display:flex;gap:4px;margin-top:5px}
.nmeta .nt span{font-size:9px;background:rgba(255,255,255,.22);border-radius:7px;padding:1px 5px}

/* --- 访客 --- */
.vipstrip{display:flex;align-items:center;gap:12px;margin:10px 14px 0}
.vrow{display:flex;align-items:center;gap:12px;padding:12px 16px;border-bottom:1px solid var(--line-2)}
.vrow>img{width:48px;height:48px;border-radius:50%;object-fit:cover;flex:none}
.vinfo{flex:1;min-width:0}
.vnn{display:flex;align-items:center;gap:5px;font-size:var(--fs-14);font-weight:600}
.vnn img{width:18px;height:18px;object-fit:contain}
.vnn .vt{font-size:9.5px;color:var(--brand-deep);background:var(--brand-soft);border-radius:8px;padding:1px 6px;font-weight:400}
.vd{font-size:var(--fs-11);color:var(--t3);margin-top:4px}
.vbtn{flex:none;height:27px;padding:0 13px;border-radius:14px;background:var(--brand-grad);color:#fff;font-size:var(--fs-12);display:flex;align-items:center}

/* 访客记录：三组关系共用一张信息卡，靠统计头、胶囊分类和更大的头像建立层级。 */
.visit-body{background:linear-gradient(180deg,#FFF5F8 0,#F5F6F9 230px);padding-bottom:28px}
.visit-hero{
  position:relative;isolation:isolate;overflow:hidden;display:flex;align-items:center;gap:14px;
  margin:12px 14px 0;padding:18px;border-radius:22px;color:#fff;
  background:linear-gradient(128deg,#FF477E 0%,#FF708C 55%,#FF9A76 100%);
  box-shadow:0 10px 26px rgba(255,76,129,.24)
}
.visit-hero::before,.visit-hero::after{content:"";position:absolute;z-index:-1;border-radius:50%;background:rgba(255,255,255,.12)}
.visit-hero::before{width:116px;height:116px;right:-28px;top:-54px}
.visit-hero::after{width:86px;height:86px;left:-38px;bottom:-54px}
.visit-hero-copy{flex:1;min-width:0}
.visit-kicker{display:block;font-size:9px;font-weight:700;letter-spacing:1.8px;opacity:.68}
.visit-hero-copy>b{display:block;margin-top:5px;font-size:19.5px;line-height:1.2;letter-spacing:-.2px}
.visit-hero-copy>small{display:block;margin-top:7px;font-size:11px;line-height:1.45;opacity:.78;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.visit-total{
  flex:none;min-width:72px;height:66px;padding:0 11px;border-radius:18px;display:flex;flex-direction:column;
  align-items:center;justify-content:center;background:rgba(255,255,255,.16);border:1px solid rgba(255,255,255,.28);
  box-shadow:inset 0 1px 0 rgba(255,255,255,.18)
}
.visit-total>b{font-size:25px;line-height:1;font-weight:800;letter-spacing:-.6px}
.visit-total>span{margin-top:5px;font-size:9.5px;opacity:.72}
.visit-tabs{
  display:flex;gap:4px;margin:12px 14px 0;padding:5px;border-radius:18px;background:#fff;
  box-shadow:0 7px 20px rgba(38,27,48,.06)
}
.visit-tabs>button{
  flex:1;min-width:0;height:40px;padding:0 4px;border-radius:14px;border:0;background:transparent;
  display:flex;align-items:center;justify-content:center;gap:5px;white-space:nowrap;
  font-family:inherit;font-size:12.5px;color:#7E7984
}
.visit-tabs>button.on{background:var(--brand-grad);color:#fff;font-weight:700;box-shadow:0 6px 14px rgba(255,76,129,.24)}
.visit-tab-count{
  min-width:17px;height:17px;padding:0 5px;border-radius:9px;display:inline-flex;align-items:center;justify-content:center;
  background:#FFF0F5;color:#FF4C81;font-size:9.5px;font-weight:700;font-style:normal
}
.visit-tabs>button.on .visit-tab-count{background:rgba(255,255,255,.21);color:#fff}
.visit-panel{
  margin:12px 14px 28px;border-radius:20px;overflow:hidden;background:#fff;
  box-shadow:0 9px 26px rgba(38,27,48,.065)
}
.visit-list{padding:2px 14px}
.visit-row{display:flex;align-items:center;gap:12px;padding:14px 0;border-bottom:1px solid #F3F0F3;cursor:pointer}
.visit-row:last-child{border-bottom:0}
.visit-row:active{opacity:.72}
.visit-avatar{position:relative;width:56px;height:56px;flex:none;border-radius:50%;background:#F2F0F4}
.visit-avatar>img{width:100%;height:100%;border-radius:50%;object-fit:cover;box-shadow:0 3px 10px rgba(31,23,40,.11)}
.visit-online{position:absolute;right:1px;bottom:1px;width:12px;height:12px;border-radius:50%;background:#39CE7C;border:2px solid #fff}
.visit-copy{flex:1;min-width:0}
.visit-name-row{display:flex;align-items:center;gap:6px;min-width:0}
.visit-name{min-width:0;max-width:100%;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;color:#211E25;font-size:14.5px;font-weight:700}
.visit-tag{
  flex:none;height:17px;padding:0 5px;border-radius:6px;display:inline-flex;align-items:center;
  font-size:9px;font-weight:600;line-height:1
}
.visit-tag.mutual{background:#FFF0F5;color:#FF4C81}
.visit-tag.fresh{background:#FFF2EB;color:#FF784B}
.visit-meta,.visit-event{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.visit-meta{margin-top:4px;color:#6F6974;font-size:11px}
.visit-event{margin-top:3px;color:#A29CA6;font-size:10.5px}
.visit-act{
  flex:none;min-width:54px;height:31px;padding:0 11px;border-radius:16px;border:1px solid #FFD3E1;
  display:inline-flex;align-items:center;justify-content:center;background:#FFF5F8;color:#FF3D73;
  font-family:inherit;font-size:11.5px;font-weight:600
}
button.visit-act{cursor:pointer}
button.visit-act:disabled{opacity:.62;cursor:default}
.visit-act.solid{background:var(--brand-grad);border-color:transparent;color:#fff;box-shadow:0 4px 10px rgba(255,76,129,.2)}
.visit-act.done{background:#F5F4F6;border-color:transparent;color:#9A959F;font-weight:500}
.visit-skeleton{cursor:default}
.visit-skeleton:active{opacity:1}
.visit-av-skeleton{
  width:56px;height:56px;flex:none;border-radius:50%;
  background:linear-gradient(90deg,#F3F1F5,#FCFBFC,#F3F1F5)
}
.visit-empty{padding:46px 28px 42px;text-align:center}
.visit-empty-icon{
  width:62px;height:62px;margin:0 auto 13px;border-radius:50%;display:flex;align-items:center;justify-content:center;
  color:#FF5B86;background:linear-gradient(145deg,#FFF2F6,#FFE3EB);box-shadow:inset 0 0 0 1px rgba(255,76,129,.08)
}
.visit-empty-icon .ico{width:28px;height:28px}
.visit-empty>b{display:block;color:#3D3942;font-size:14px}
.visit-empty>p{margin:7px 0 0;color:#9B96A0;font-size:11.5px;line-height:1.65}
.visit-locked{
  margin:0 14px 14px;padding:10px 12px;border-radius:12px;background:#FFF6F9;color:#B35873;
  text-align:center;font-size:11px;line-height:1.5
}
.visit-locked[hidden]{display:none}

/* --- 排行榜 --- */
.rank{position:absolute;inset:0;overflow:hidden;background:#140C24}
.rank .rbg{position:absolute;inset:0;background:
  radial-gradient(70% 34% at 50% 4%,rgba(255,199,0,.34),transparent 70%),
  radial-gradient(90% 40% at 12% 30%,rgba(155,123,255,.34),transparent 70%),
  radial-gradient(80% 40% at 92% 26%,rgba(255,76,129,.28),transparent 70%),
  linear-gradient(180deg,#241544,#120C1F 58%,#0C0814)}
.rank .rmask{position:absolute;inset:0;background:linear-gradient(180deg,rgba(0,0,0,.5),transparent 30%,rgba(8,5,14,.9))}
.rtitle{position:absolute;top:52px;left:14px;right:14px;display:flex;align-items:center;gap:10px;color:#fff;z-index:4;font-size:var(--fs-16)}
.rtabs{position:absolute;top:92px;left:0;right:0;display:flex;justify-content:center;gap:22px;z-index:4}
.rtabs span{font-size:var(--fs-13);color:rgba(255,255,255,.6);padding-bottom:6px}
.rtabs span.on{color:#fff;font-weight:700;position:relative}
.rtabs span.on::after{content:"";position:absolute;left:50%;transform:translateX(-50%);bottom:0;width:18px;height:3px;border-radius:2px;background:linear-gradient(90deg,#FFD98A,#FFB24A)}
.rpodium{position:absolute;top:132px;left:14px;right:14px;height:186px;display:flex;align-items:flex-end;justify-content:center;gap:10px;z-index:4}
.pod{width:96px;text-align:center;color:#fff;position:relative;padding-bottom:10px}
.pod .pav{position:relative;width:64px;height:64px;margin:0 auto}
.pod .pav img{width:64px;height:64px;border-radius:50%;object-fit:cover;border:2px solid rgba(255,199,0,.9);box-shadow:0 6px 18px rgba(0,0,0,.5)}
.pod.pod1 .pav{width:78px;height:78px}
.pod.pod1 .pav img{width:78px;height:78px;border-color:#FFC700}
.pcrown{position:absolute;left:50%;top:-9px;transform:translateX(-50%);width:22px;height:22px;border-radius:50%;
  background:linear-gradient(180deg,#FFE59A,#F0B63C);color:#5B3B00;font-size:11px;font-weight:800;
  display:flex;align-items:center;justify-content:center;border:2px solid #fff;box-shadow:0 3px 8px rgba(0,0,0,.35)}
.pod2 .pcrown{background:linear-gradient(180deg,#E7ECF5,#B9C4D6);color:#4A5468}
.pod3 .pcrown{background:linear-gradient(180deg,#F3CBA6,#CE9260);color:#593516}
.pnm{font-size:var(--fs-12);font-weight:600;margin-top:7px}
.pval{font-size:9.5px;color:var(--gold-2);margin-top:2px}
.pbar{height:26px;border-radius:8px 8px 0 0;margin-top:7px;display:flex;align-items:center;justify-content:center;font-size:var(--fs-13);font-weight:700;color:#5B3B00;
  background:linear-gradient(180deg,#FFE59A,#F0B63C)}
.pod2 .pbar{height:20px;background:linear-gradient(180deg,#E7ECF5,#B9C4D6);color:#4A5468}
.pod3 .pbar{height:16px;background:linear-gradient(180deg,#F3CBA6,#CE9260);color:#593516}
.rme{position:absolute;top:322px;left:14px;right:14px;height:34px;border-radius:12px;
  background:rgba(255,255,255,.12);border:1px solid rgba(255,255,255,.18);backdrop-filter:blur(6px);
  display:flex;align-items:center;gap:8px;padding:0 12px;color:#fff;font-size:var(--fs-12);z-index:5}
.rme b{font-weight:700}
.rme .rme-sub{margin-left:auto;font-size:10.5px;color:rgba(255,255,255,.62);white-space:nowrap}
.rme .rme-none{color:rgba(255,255,255,.72)}
.rlist{position:absolute;top:362px;left:10px;right:10px;bottom:24px;overflow:hidden;z-index:4}
.rrow{display:flex;align-items:center;gap:11px;padding:10px 12px;border-radius:14px;background:rgba(255,255,255,.06);margin-bottom:8px;backdrop-filter:blur(6px)}
.rrow .rk{width:22px;text-align:center;font-size:var(--fs-14);font-weight:700;color:rgba(255,255,255,.5)}
.rrow>img{width:40px;height:40px;border-radius:50%;object-fit:cover;flex:none}
.rinfo{flex:1;min-width:0;color:#fff}
.rinfo .rnm{font-size:var(--fs-13);font-weight:600}
.rinfo .rd{font-size:9.5px;color:rgba(255,255,255,.5);margin-top:3px}
.rrow .rv{display:flex;align-items:center;gap:4px;font-size:var(--fs-12);color:var(--gold-2)}
.rrow .rv img{width:15px;height:15px}


/* --- 排行榜（真机三榜：恩爱 / 女神 / 荣耀）--------------------------------
   尺子：432×960 的真机帧 ÷1.2 = 360×800 的 CSS。逐帧量出来的锚点（见 docs §17）：
   顶栏 0~85（标题墨迹 y55~70）→ hero 渐变 y85~437.5 → 白卡从 432.5 起（16px 圆角，压在 hero 上 5px）。
   一级 Tab 墨迹 y105~119.2（选中白粗体 + y122.5 的 4px 白点）；「?」圆 13.4 @ (335,117.5)。
   二级胶囊条 x20~340 / y143.3~170.8（高 27.5，底 = 白 16% 叠加，选中胶囊 = 条的 1/n，深色）。
   顶栏 0~85 写实（截图里 .sysbar 是 0 高，直接对齐真机帧 ÷1.2）。
   这一屏**不复用** .rank/.rbg/.rtabs 那一套：那套还被「人气榜」「房间贡献榜」用着。 */
.rk2{position:absolute;inset:0;display:flex;flex-direction:column;background:#fff;overflow:hidden;
  --rk-a:#F67490;--rk-b:#FDACAB;--rk-p:#F4556B}
.rk2[data-t="goddess"]{--rk-a:#C558FF;--rk-b:#C6A4FF;--rk-p:#A126FD}
.rk2[data-t="glory"]{--rk-a:#D96A00;--rk-b:#FFC57C;--rk-p:#CB4C05}

/* 顶栏 0~85：标题墨迹 y55~70（= 居中在 62.5），返回箭头墨迹 x13.3~23 y55~70。
   与首页同一把尺子：截图里 .sysbar 是 0 高（桌面/无壳），所以这里直接把 85 写实，
   和真机帧除以 1.2 的结果对齐（首页的 52px 顶部留白也是这么来的）。 */
.rk2-nav{height:85px;flex:none;position:relative;background:#fff;z-index:30}
.rk2-nav .nb-title{position:absolute;left:0;right:0;top:50.5px;line-height:24px;text-align:center;
  font-size:17px;font-weight:600;color:#181818;pointer-events:none}
.rk2-nav .nb-back{position:absolute;left:3px;top:47.5px;width:30px;height:30px;display:flex;
  align-items:center;justify-content:center;cursor:pointer}

.rk2-hero{position:relative;flex:none;height:352.5px;overflow:hidden;
  background:linear-gradient(180deg,var(--rk-a) 0%,var(--rk-b) 100%)}

/* 一级 Tab */
.rk2-tabs{position:absolute;left:0;right:0;top:14px;display:flex;justify-content:center;z-index:4}
.rk2-tab{position:relative;padding:0 28px;line-height:26px;font-size:17px;
  color:rgba(255,255,255,.62);cursor:pointer;white-space:nowrap}
.rk2-tab.on{color:#fff;font-weight:700}
.rk2-tab.on::after{content:"";position:absolute;left:50%;bottom:-2px;transform:translateX(-50%);
  width:5px;height:5px;border-radius:50%;background:#fff}
.rk2-help{position:absolute;right:18.3px;top:27.5px;width:13.4px;height:13.4px;box-sizing:border-box;
  border:1px solid rgba(255,255,255,.82);border-radius:50%;color:#fff;font-size:9px;line-height:11.5px;
  text-align:center;font-weight:600;z-index:5;cursor:pointer}

/* 二级胶囊条 */
.rk2-chips{position:absolute;left:20px;right:20px;top:58.3px;height:27.5px;border-radius:13.8px;
  background:rgba(255,255,255,.16);display:flex;z-index:4}
.rk2-chip{flex:1;display:flex;align-items:center;justify-content:center;font-size:12.5px;
  color:rgba(255,255,255,.8);border-radius:13.8px;cursor:pointer;white-space:nowrap}
.rk2-chip.on{background:var(--rk-p);color:#fff;font-weight:600}

/* 领奖台：三格绝对定位（坐标全在 pages2.js 的 RK_POD 里，hero 本地坐标）。
   恩爱榜 f_0068 每格两个人（两个圆 + 皇冠 + 两行名字）；女神 / 荣耀 f_0074 每格一个人。 */
.rk2-pods{position:absolute;inset:0;z-index:3}
.rk2-pod{position:absolute;inset:0;color:#fff}
.rk2-pod .rk2-crown{position:absolute;line-height:0}
.rk2-pod .rk2-crown svg{display:block}
.rk2-pod .rk2-av{position:absolute;border-radius:50%;object-fit:cover;
  background:rgba(255,255,255,.22);box-sizing:border-box}
.rk2-pod .rk2-nm{position:absolute;font-size:15px;font-weight:600;line-height:18px;
  max-width:104px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;
  text-shadow:0 1px 3px rgba(0,0,0,.18)}
.rk2-pod .rk2-lv{display:inline-block;vertical-align:-3px;margin-left:3px;line-height:0}
.rk2-pod .rk2-lv img{width:19px;height:19px;object-fit:contain}
.rk2-pod .rk2-gap{position:absolute;font-size:12px;color:rgba(255,255,255,.92);line-height:15px;
  white-space:nowrap;text-shadow:0 1px 3px rgba(0,0,0,.18)}

/* 名次台阶：真机是三个浅色方块（带透视顶面），底部被白卡切掉 */
.rk2-steps{position:absolute;inset:0;z-index:2;pointer-events:none}
.rk2-step{position:absolute;text-align:center;
  background:linear-gradient(180deg,rgba(255,255,255,.19) 0%,rgba(255,255,255,.42) 100%)}
.rk2-step-top{position:absolute;left:0;right:0;background:rgba(255,255,255,.21)}
.rk2-step-n{position:absolute;left:0;right:0;font-size:29px;line-height:1;font-weight:700;
  color:rgba(255,255,255,.8);transform:translateY(-50%)}

/* 白卡 + 列表 */
.rk2-card{margin-top:-5px;border-radius:16px 16px 0 0;background:#fff;flex:1;min-height:0;
  position:relative;z-index:10;overflow:hidden;display:flex;flex-direction:column}
.rk2-list{flex:1;min-height:0;overflow-y:auto;padding-top:14px}
.rk2-row{height:66.4px;display:flex;align-items:center;padding:0 14px 0 10px}
.rk2-row.rk2-paired{height:58.4px}
.rk2-row .rk2-no{width:21px;flex:none;text-align:center;font-size:15px;color:#9A9AA4;line-height:1}
.rk2-row .rk2-main{display:flex;align-items:center;gap:6px;flex:1;min-width:0}
.rk2-row .rk2-av{width:53.3px;height:53.3px;flex:none;border-radius:50%;object-fit:cover;
  background:#F1F1F4;margin-left:3px}
.rk2-row .rk2-pair2{display:flex;flex:none;margin-left:3px}
.rk2-row .rk2-pair2 img{width:48px;height:48px;border-radius:50%;object-fit:cover;background:#F1F1F4;
  border:1px solid #fff;box-sizing:border-box}
.rk2-row .rk2-pair2 img:first-child{margin-right:-15px}
.rk2-row .rk2-info{flex:1;min-width:0}
.rk2-row .rk2-nm{display:flex;align-items:center;gap:4px;font-size:15px;color:#181818;line-height:19px;
  overflow:hidden;white-space:nowrap}
.rk2-row .rk2-nm img{width:19px;height:19px;object-fit:contain;flex:none}
.rk2-row .rk2-nm em{font-style:normal;overflow:hidden;text-overflow:ellipsis}
.rk2-row .rk2-gap{font-size:12px;color:#9A9AA4;line-height:15px;margin-top:7px;white-space:nowrap}
.rk2-row.rk2-paired .rk2-nm{font-size:14px;line-height:18px}
.rk2-row.rk2-paired .rk2-nm+.rk2-nm{margin-top:2px}
.rk2-row.rk2-paired .rk2-info{padding-top:1px}
.rk2-row .rk2-right{flex:none;text-align:right;font-size:12px;color:#9A9AA4;line-height:17px;
  padding-left:8px;white-space:nowrap}
.rk2-row .rk2-right b{display:block;font-weight:400}
.rk2-empty{padding:26px 16px;text-align:center;font-size:13px;color:#9A9AA4;line-height:1.7}

/* 未上榜（只在「我不在榜上」时出现；真机是吸底的一条，上方一条浅影） */
.rk2-me{flex:none;height:77.5px;display:flex;align-items:flex-start;padding:6px 14px 0 10px;
  background:#fff;box-shadow:0 -3px 8px rgba(0,0,0,.05);position:relative;z-index:11}
.rk2-me[hidden]{display:none}
.rk2-me .rk2-me-t{width:132px;flex:none;font-size:14px;font-weight:600;color:#181818;
  line-height:48px;padding-left:4px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.rk2-me img{width:48px;height:48px;border-radius:50%;object-fit:cover;background:#F1F1F4;
  margin-left:4px}
.rk2-me .rk2-me-n{font-size:13px;color:#181818;margin-left:9px;line-height:48px;
  overflow:hidden;text-overflow:ellipsis;white-space:nowrap}

/* 排行榜：整屏渐变页（真机 60347fd1 f_0068 恩爱榜 / f_0074 女神榜 / 荣耀榜），不是底部弹层。
   量尺（576×1280 ÷1.6 = 360×800）：顶栏 0→88（标题墨迹 y56~70）；hero 88→443.6；白卡 443.6 起（16 圆角）。
   hero 内：一级 Tab 墨迹 y107.5~125；二级胶囊条 y143.7~171.9（高 28.1）；「?」圆 15.6。
   列表：恩爱榜行高 57.2（两人头像 46、叠 18.2、名从 x125 起、右列右缘 336.2）；
        女神榜行高 65.6（头像 46 @x37、名与「距上一名差」都从 x95 起）。 */
.rk2{position:absolute;inset:0;z-index:60;background:#fff;pointer-events:auto}
.rk2-mask{display:none}
.rk2-sheet{position:absolute;inset:0;display:flex;flex-direction:column;overflow:hidden;
  background:#fff;border-radius:0;box-shadow:none}
.rk2-grab{display:none}
.rk2-nav{height:88px}
.rk2-hero{height:355.6px}
.rk2-tabs{top:14.2px;justify-content:center;padding-left:6px}
.rk2-tab{padding:0 29px}
.rk2-chips{left:24.4px;right:1.1px;top:55.7px;height:28.1px;border-radius:14.1px}
.rk2-card{margin-top:0}
.rk2-list{padding-top:6px}
.rk2-row{height:65.6px;padding:0 23.8px 0 10px;border-top:none}
.rk2-row.rk2-paired{height:57.2px}
.rk2-row .rk2-no{width:24px;font-size:15px;color:#9A9AA4;line-height:1}
.rk2-row .rk2-av{width:46px;height:46px;margin-left:3px}
.rk2-row .rk2-pair2{margin-left:6.6px}
.rk2-row .rk2-pair2 img{width:46px;height:46px}
.rk2-row .rk2-pair2 img:first-child{margin-right:-18.2px}
.rk2-row .rk2-main{gap:12px}
.rk2-row.rk2-paired .rk2-main{gap:10.6px}
.rk2-row .rk2-nm{font-size:14px;line-height:18px}
.rk2-row .rk2-nm img{width:20px;height:20px}
.rk2-row.rk2-paired .rk2-nm{font-size:14px;line-height:18px}
.rk2-row.rk2-paired .rk2-nm+.rk2-nm{margin-top:2.6px}
.rk2-row .rk2-gap{font-size:12px;color:#9A9AA4;line-height:16px;margin-top:5.6px}
.rk2-row .rk2-right{font-size:11px;color:#9A9AA4;line-height:17.5px;padding-left:6px}
.rk2-row .rk2-right b{display:block;font-weight:400}

/* --- 签到 / 任务 --- */
.signhead{background:var(--brand-grad);padding:18px 16px 24px;border-radius:0 0 22px 22px;color:#fff}
.signhead .sh-t{font-size:var(--fs-17);font-weight:700;letter-spacing:.5px}
.signhead .sh-t b{font-size:23px;margin:0 3px}
.signhead .sh-s{font-size:var(--fs-11);opacity:.86;margin-top:6px}
.sdays{display:flex;justify-content:space-between;margin-top:18px}
.sday{width:40px;text-align:center}
.sday .coin-badge{width:40px;height:40px;border-radius:50%;background:rgba(255,255,255,.22);display:flex;align-items:center;justify-content:center;margin-bottom:5px;position:relative}
.sday .coin-badge img{width:22px;height:22px;object-fit:contain}
.sday.done .coin-badge{background:rgba(255,255,255,.42)}
.sday.done .coin-badge::after{content:"✓";position:absolute;right:-2px;bottom:-2px;width:15px;height:15px;border-radius:50%;background:#3ED07F;color:#fff;font-size:9px;display:flex;align-items:center;justify-content:center}
.sday.today .coin-badge{background:#FFE9A8;box-shadow:0 0 0 3px rgba(255,255,255,.5)}
.sday span{font-size:9.5px;display:block;opacity:1;text-shadow:0 1px 2px rgba(140,20,55,.4)}
.sday i{font-size:9px;font-style:normal;display:block;opacity:.78;margin-top:1px}
.sday small{font-size:9.5px;font-weight:700;color:#6B3B00}
.sday.today small{color:#4A1400}
.trow{display:flex;align-items:center;gap:12px;padding:13px 16px;border-bottom:1px solid var(--line-2)}
.trow:last-child{border-bottom:none}
.trow>img{width:30px;height:30px;object-fit:contain;flex:none}
.tinfo{flex:1;min-width:0}
.tinfo .tt{font-size:var(--fs-13);font-weight:600}
.tinfo .tv{font-size:var(--fs-11);color:var(--brand);margin-top:3px}

/* --- 收益 --- */
.income-top{background:var(--brand-grad);padding:20px 20px 18px;border-radius:0 0 22px 22px;color:#fff}
.income-top .it-l{font-size:var(--fs-12);opacity:.9}
.income-top .it-v{font-size:32px;font-weight:700;display:flex;align-items:center;gap:8px;margin:6px 0 2px}
.income-top .it-v img{width:24px}
.income-top .it-s{font-size:var(--fs-11);opacity:.85}
.income-top .it-btn{width:150px;height:36px;border-radius:18px;background:#fff;color:var(--brand);font-size:var(--fs-13);font-weight:600;display:flex;align-items:center;justify-content:center;margin:14px 0 0}
.income-top .it-row{display:flex;gap:26px;margin-top:16px;border-top:1px solid rgba(255,255,255,.25);padding-top:12px}
.income-top .it-row div{font-size:var(--fs-10);opacity:.86}
.income-top .it-row b{display:block;font-size:var(--fs-15);margin-bottom:2px}
.inc-row{display:flex;align-items:center;padding:13px 16px;border-bottom:1px solid var(--line-2)}
.inc-row:last-child{border-bottom:none}
.inc-row .ii{flex:1;min-width:0}
.inc-row .ii .it{font-size:var(--fs-13);font-weight:600}
.inc-row .ii .is{font-size:var(--fs-10);color:var(--t3);margin-top:3px}
.inc-row .ir{text-align:right}
.inc-row .ir .ia{font-size:var(--fs-14);font-weight:600}
.inc-row .ir .iv{font-size:var(--fs-10);margin-top:3px}

/* --- 弹层通用 --- */
.modal-mask{position:absolute;inset:0;background:rgba(0,0,0,.302);z-index:30;backdrop-filter:blur(2px);
  cursor:pointer}   /* 点灰底 = 关掉这个浮层，见 boot.js 的全局点击处理 */
.modal{position:absolute;left:0;right:0;z-index:31}
.modal .mclose{position:absolute;right:12px;top:12px;width:28px;height:28px;display:flex;align-items:center;justify-content:center;color:rgba(255,255,255,.8);z-index:2}
.modal .mclose .ico{width:18px;height:18px}

/* --- 弹层统一壳（方案十）：白底 + 16px 圆角顶 + 底部滑入；遮罩 = 真实 #4D000000 ---
   礼物 / 红包 / 表情 / 房间公告 这些「核心交易与面板」一律叠在宿主页上，独立页只是壳。 */
.sheet{position:absolute;left:0;right:0;bottom:0;background:#fff;color:var(--t1);border-radius:16px 16px 0 0;
  box-shadow:0 -8px 30px rgba(0,0,0,.18);animation:pv-up .22s cubic-bezier(.2,.9,.25,1);z-index:31}
.sheet-x{width:26px;height:26px;border-radius:50%;background:var(--line-3);display:flex;align-items:center;
  justify-content:center;color:var(--t2);flex:none;cursor:pointer;margin-left:8px}
.sheet-x .ico{width:14px;height:14px}
.sheet .ph{display:flex;align-items:center;justify-content:space-between;font-size:var(--fs-13);
  font-weight:600;padding:14px 16px 0;margin-bottom:12px}
.sheet .ph .ph-r{display:flex;align-items:center;gap:10px}

/* 聊天页顶部的通话胶囊（真实产品里资料条右侧就挂着通话 / 视频入口） */
.nb-call{width:28px;height:28px;border-radius:50%;background:var(--brand-grad);color:#fff;flex:none;
  display:inline-flex;align-items:center;justify-content:center;cursor:pointer;box-shadow:var(--shadow-soft)}
.nb-call .ico{width:15px;height:15px}

/* 礼物 / 红包弹层：底部分隔与安全区留白 */
.p4-gift{padding-bottom:calc(20px + var(--safe-bottom,0px))}
.p4-gift .ph{padding-top:14px}
.p4-gift .ph-r span[data-open]{cursor:pointer}
.p4-rp .ph{padding-top:14px}
.p4-rp{padding-bottom:calc(6px + var(--safe-bottom,0px))}

/* 聊天页「更多」面板：白底圆角顶 + 四格（拍摄 / 位置 / 名片 / 收藏） */
.chat-more{position:absolute;left:0;right:0;bottom:0;z-index:32;background:#fff;border-radius:16px 16px 0 0;
  padding:14px 16px calc(24px + var(--safe-bottom,0px));animation:pv-up .2s cubic-bezier(.2,.9,.25,1)}
.chat-more .cm-h{display:flex;align-items:center;justify-content:space-between;font-size:var(--fs-13);font-weight:600;margin-bottom:14px}
.chat-more .cm-grid{display:grid;grid-template-columns:repeat(4,1fr);gap:14px 8px}
.chat-more .cm-i{display:flex;flex-direction:column;align-items:center;gap:7px;cursor:pointer}
.chat-more .cm-i .cir{width:50px;height:50px;border-radius:16px;background:var(--soft-bg);display:flex;
  align-items:center;justify-content:center}
.chat-more .cm-i .cir img{width:24px;height:24px;object-fit:contain;opacity:.82}
.chat-more .cm-i small{font-size:var(--fs-11);color:var(--t2)}

/* 礼物特效：CSS 光效替代 SVGA（第三方播放器未接入） */
@keyframes gfx-pulse{0%,100%{transform:scale(1);filter:drop-shadow(0 0 26px rgba(255,199,0,.55))}
  50%{transform:scale(1.07);filter:drop-shadow(0 0 40px rgba(255,199,0,.9))}}
.gfx-pulse{animation:gfx-pulse 1.6s ease-in-out infinite}
.sheet-dark{background:linear-gradient(180deg,#2A2140,#1A1428);color:#fff;border-radius:20px 20px 0 0;padding:22px 16px 26px;box-shadow:0 -8px 30px rgba(0,0,0,.5)}
.firstcharge .fc-h{display:flex;align-items:center;gap:12px}
.firstcharge .fc-h img{filter:drop-shadow(0 6px 14px rgba(255,199,0,.5))}
.firstcharge .fc-h b{display:block;font-size:var(--fs-18);letter-spacing:1px;background:linear-gradient(90deg,#FFE9A8,#FFC700);-webkit-background-clip:text;background-clip:text;color:transparent}
.firstcharge .fc-h small{font-size:var(--fs-11);color:rgba(255,255,255,.6)}
.fc-timer{margin:14px 0 12px;font-size:var(--fs-11);color:rgba(255,255,255,.72);background:rgba(255,255,255,.1);border-radius:10px;padding:7px 12px;display:flex;justify-content:space-between}
.fc-timer b{color:#FFC700;font-size:var(--fs-13)}
.fc-grid{display:grid;grid-template-columns:repeat(3,1fr);gap:9px}
.fc-item{background:rgba(255,255,255,.08);border-radius:12px;padding:12px 6px;text-align:center;border:1.5px solid transparent}
.fc-item.on{background:rgba(255,76,129,.2);border-color:var(--brand);position:relative}
.fc-item.on::after{content:"推荐";position:absolute;right:-1px;top:-1px;background:var(--brand-grad);font-size:8.5px;padding:2px 6px;border-radius:0 12px 0 10px}
.fc-item .c{display:flex;align-items:center;justify-content:center;gap:4px;font-size:var(--fs-13);font-weight:600}
.fc-item .c img{width:16px;height:16px}
.fc-item .p{font-size:var(--fs-15);font-weight:700;color:#FFE9A8;margin-top:7px}
.fc-item .g{font-size:9.5px;color:#FF9EC0;margin-top:2px}
.fc-foot{display:flex;align-items:center;justify-content:space-between;margin-top:16px}
.fc-foot .fcf-l{font-size:var(--fs-13);color:rgba(255,255,255,.8)}
.fc-foot .fcf-l b{font-size:var(--fs-18);color:#FFC700;margin-left:4px}
.fc-foot .fcf-l span{font-size:var(--fs-10);color:rgba(255,255,255,.5)}
.fc-note{font-size:9.5px;color:rgba(255,255,255,.42);text-align:center;margin-top:12px}

/* --- 礼物墙 --- */
.gwall{position:absolute;inset:0;overflow:hidden;background:linear-gradient(180deg,#20143A,#140E24 40%,#100B1C)}
.gwall .gwtop{position:relative;padding-top:44px}
.gwall .gwnav{display:flex;align-items:center;gap:10px;padding:4px 14px 12px;color:#fff;font-size:var(--fs-16)}
.gwall .ghead{display:flex;align-items:center;gap:12px;padding:6px 16px 16px;color:#fff}
.gwall .ghead>img{width:60px;height:60px;border-radius:50%;object-fit:cover;border:2px solid rgba(255,199,0,.8)}
.gwall .ghead b{font-size:var(--fs-17)}
.gwall .ghead small{display:block;font-size:var(--fs-11);color:rgba(255,255,255,.6);margin-top:4px}
.gwall .ghead em{color:#FFC700;font-style:normal;font-weight:700}
.gwbody{position:absolute;left:0;right:0;top:196px;bottom:0;background:#F5F6F9;border-radius:20px 20px 0 0;padding:16px 14px 24px;overflow:hidden}
.gtabs{display:flex;gap:20px;font-size:var(--fs-13);color:var(--t3);margin-bottom:14px;padding:0 2px}
.gtabs .on{color:var(--t1);font-weight:700;position:relative}
.gtabs .on::after{content:"";position:absolute;left:50%;transform:translateX(-50%);bottom:-6px;width:16px;height:3px;border-radius:2px;background:var(--brand-grad)}
.gwtip{font-size:11px;color:var(--t3);margin:-10px 0 12px;padding:0 2px}
.gwgrid{display:grid;grid-template-columns:repeat(3,1fr);gap:14px 10px}
.gwitem{text-align:center}
.gwimg{width:74px;height:74px;margin:0 auto;border-radius:50%;background:#fff;display:flex;align-items:center;justify-content:center}
.gwimg img{width:52px;height:52px;object-fit:contain}
.gwnm{font-size:var(--fs-11);margin-top:7px;color:var(--t1)}
.gwc{font-size:var(--fs-10);color:var(--brand-deep);font-weight:600}
.gwsect{margin-top:20px}
.gwshow{display:flex;gap:10px}
.gws{width:64px;height:64px;border-radius:14px;background:#fff;display:flex;align-items:center;justify-content:center;box-shadow:0 3px 10px rgba(24,24,24,.07)}
.gws img{width:44px;height:44px;object-fit:contain}
.gws.add{border:1.5px dashed #DCDCE3;color:#8A8A94;background:transparent;box-shadow:none}

/* --- 兑换商城 --- */
.shoptabs{display:flex;gap:20px;padding:12px 16px;background:#fff;font-size:var(--fs-13);color:var(--t3);overflow:hidden}
.shoptabs .on{color:var(--t1);font-weight:700;position:relative}
.shoptabs .on::after{content:"";position:absolute;left:50%;transform:translateX(-50%);bottom:-8px;width:16px;height:3px;border-radius:2px;background:var(--brand-grad)}
.shopgrid{display:grid;grid-template-columns:repeat(2,1fr);gap:10px;padding:14px}
.sitem{background:#fff;border-radius:14px;padding:12px;text-align:center;box-shadow:0 2px 10px rgba(24,24,24,.05)}
.simg{height:76px;display:flex;align-items:center;justify-content:center}
.simg img{max-width:76px;max-height:76px;object-fit:contain}
.snm{font-size:var(--fs-13);font-weight:600;margin-top:6px}
.sd{font-size:var(--fs-10);color:var(--t3);margin-top:3px}
.sbtn{margin-top:9px;height:28px;border-radius:14px;background:var(--brand-grad);color:#fff;font-size:var(--fs-12);display:flex;align-items:center;justify-content:center;gap:4px}
.sbtn img{width:14px;height:14px}
.sbtn.own{background:#F5F6F9;color:var(--t3)}
/* 当前佩戴项：品牌渐变描边（背景用两层 clip：内白底 + 外渐变边） */
.sitem.on{border:2px solid transparent;background:linear-gradient(#fff,#fff) padding-box,var(--brand-grad) border-box;
  box-shadow:0 8px 20px rgba(255,76,129,.18)}
.af-tile{position:relative;width:64px;height:64px;margin:0 auto;border-radius:50%;border:2px solid transparent}
.af-tile.on{background:linear-gradient(#fff,#fff) padding-box,var(--brand-grad) border-box;
  box-shadow:0 6px 16px rgba(255,76,129,.28)}
/* 我的装扮行：佩戴中的那张卡也点亮（同 .sitem.on 的渐变描边手法） */
.card.on{border:2px solid transparent;background:linear-gradient(#fff,#fff) padding-box,var(--brand-grad) border-box;
  box-shadow:0 8px 20px rgba(255,76,129,.18)}
/* 商品图标可点开预览浮层 */
.shopgrid .simg{cursor:pointer}
.af-tile img{width:100%;height:100%;object-fit:contain}

/* 预览浮层（P1）：点商品图标看大图，再决定买 / 佩戴。白色圆角顶 + 底部滑入。 */
.pv-mask{position:absolute;inset:0;background:rgba(0,0,0,.45);z-index:60;display:flex;align-items:flex-end;
  animation:pv-fade .18s ease}
.pv-card{width:100%;background:#fff;border-radius:18px 18px 0 0;padding:18px 16px calc(20px + var(--safe-bottom,0px));
  animation:pv-up .22s cubic-bezier(.2,.9,.25,1)}
.pv-card .pv-img{height:132px;display:flex;align-items:center;justify-content:center}
.pv-card .pv-img img{max-width:132px;max-height:132px;object-fit:contain}
.pv-card .pv-nm{text-align:center;font-size:var(--fs-15);font-weight:700;margin-top:6px}
.pv-card .pv-meta{text-align:center;font-size:var(--fs-11);color:var(--t3);margin-top:5px}
.pv-card .pv-acts{display:flex;gap:10px;margin-top:14px}
.pv-card .pv-acts .pv-btn{flex:1;height:42px;border-radius:var(--r-cap);display:flex;align-items:center;
  justify-content:center;font-size:var(--fs-14);font-weight:600;cursor:pointer}
.pv-card .pv-acts .pv-btn.main{background:var(--brand-grad);color:#fff;box-shadow:0 8px 20px rgba(255,76,129,.28)}
.pv-card .pv-acts .pv-btn.alt{background:var(--soft-bg);color:var(--t2)}
@keyframes pv-fade{from{opacity:0}to{opacity:1}}
@keyframes pv-up{from{transform:translateY(60px)}to{transform:translateY(0)}}

/* 雷达扫描动效（P1）：一圈扫描光 + 三环呼吸。pure CSS，不引第三方。 */
.radar-sweep{position:absolute;inset:0;border-radius:50%;pointer-events:none;
  background:conic-gradient(from 0deg,rgba(255,76,129,.55),rgba(255,76,129,.16) 40deg,rgba(255,76,129,0) 78deg 360deg);
  animation:radar-turn 3.4s linear infinite}
.rd-ring{position:absolute;border-radius:50%;border:1px solid rgba(255,255,255,.22);animation:radar-pulse 3.4s ease-in-out infinite}
.rd-ring.r1{inset:0}
.rd-ring.r2{inset:34px;animation-delay:.5s}
.rd-ring.r3{inset:70px;animation-delay:1s}
@keyframes radar-turn{to{transform:rotate(360deg)}}
@keyframes radar-pulse{0%,100%{opacity:.55}50%{opacity:1}}

/* --- 动态详情 --- */
.fpost{padding:14px 16px 0}
.fph{display:flex;align-items:center;gap:11px}
.fpi{flex:1;min-width:0}
.fpi .fpn{display:flex;align-items:center;gap:5px;font-size:var(--fs-14);font-weight:600}
.fpi .fpn img{width:18px;height:18px;object-fit:contain}
.fpi .fpd{font-size:var(--fs-11);color:var(--t3);margin-top:3px}
.fptext{font-size:var(--fs-14);line-height:1.72;color:var(--t1);margin:12px 0 10px}
.fpimg{display:grid;grid-template-columns:repeat(2,1fr);gap:6px}
.fpimg img{width:100%;aspect-ratio:1;object-fit:cover;border-radius:6px}
.fpimg.single{grid-template-columns:1fr}
.fpimg.single img{aspect-ratio:auto;max-height:72vh;object-fit:contain;background:#0b0a0d}
.fpimg.single .video-cover{aspect-ratio:4/5;max-height:72vh}
.fpimg .video-cover{border-radius:8px}
.dc-img[data-feed-media],.fpimg img[data-feed-media]{cursor:pointer}

/* 视频封面统一走 <button> + OSS 首帧，不再把裸 <video> 塞进列表。
   裸 video 在安卓 WebView 里常常只画灰底 + 系统大播放键，且首帧未绘制前会短暂发声音；
   现在必须点自定义播放键才创建播放器。 */
.video-cover{position:relative;display:block;padding:0;border:0;margin:0;overflow:hidden;
  background:#211d24;color:#fff;cursor:pointer;font:inherit;text-align:left;
  -webkit-appearance:none;appearance:none;aspect-ratio:9/16}
.video-cover>img{position:absolute;inset:0;display:block;width:100%;height:100%;object-fit:cover}
.video-cover-play{position:absolute;left:50%;top:50%;width:46px;height:46px;margin:-23px 0 0 -23px;
  border-radius:50%;display:flex;align-items:center;justify-content:center;
  background:rgba(16,13,20,.52);border:1px solid rgba(255,255,255,.72);color:#fff;
  box-shadow:0 3px 12px rgba(0,0,0,.22);pointer-events:none}
.video-cover-play .ico{width:19px;height:19px;margin-left:2px}
.video-cover-tag{position:absolute;left:8px;bottom:8px;padding:2px 7px;border-radius:9px;
  background:rgba(16,13,20,.52);color:#fff;font-size:10px;line-height:15px;pointer-events:none}
.video-cover-empty{display:flex;align-items:center;justify-content:center;padding:12px;
  color:#9A96A0;font-size:12px;background:#F3F1F4;text-align:center}
.video-cover-empty .video-cover-play,.video-cover-empty .video-cover-tag{display:none}
.video-player{display:block;width:100%;max-height:420px;object-fit:contain;background:#08070a;border-radius:6px}
.fpimg .video-cover{width:100%;aspect-ratio:9/16;border-radius:8px}
.fpimg .video-player{width:100%;aspect-ratio:1;object-fit:cover;border-radius:6px}
.wf-video{width:100%;height:100%;aspect-ratio:auto;border-radius:0}
.wf-video>img{object-fit:cover}
.wf-video .video-cover-play{width:40px;height:40px;margin:-20px 0 0 -20px}

/* 动态图片全屏预览：独立一层，不接管视频控件。黑底只为了看图，不放保存/分享等没有真实结果的按钮。 */
.feed-media-viewer{position:fixed;inset:0;z-index:1800;display:flex;flex-direction:column;background:#08070A;
  color:#fff;overscroll-behavior:contain;animation:fmv-in .18s ease-out}
@keyframes fmv-in{from{opacity:0}to{opacity:1}}
.fmv-top{flex:none;height:calc(52px + env(safe-area-inset-top,0px));box-sizing:border-box;
  padding:env(safe-area-inset-top,0px) 16px 0;display:flex;align-items:center;justify-content:space-between}
.fmv-close,.fmv-top-gap{width:38px;height:38px;flex:none}
.fmv-close{border:0;border-radius:50%;background:rgba(255,255,255,.12);color:#fff;font-size:28px;
  line-height:1;display:flex;align-items:center;justify-content:center;padding:0 0 3px;cursor:pointer}
.fmv-counter{font-size:13px;font-weight:600;letter-spacing:.02em;color:rgba(255,255,255,.9)}
.fmv-stage{position:relative;flex:1;min-height:0;display:flex;align-items:center;justify-content:center;
  padding:10px 14px;touch-action:pan-y}
.fmv-image{display:block;max-width:100%;max-height:100%;object-fit:contain;border-radius:4px;
  opacity:0;transition:opacity .16s ease;user-select:none;-webkit-user-select:none}
.fmv-image.ready{opacity:1}
.fmv-image[hidden],.fmv-video[hidden],.fmv-video-toggle[hidden],.fmv-video-bar[hidden]{display:none}
.fmv-video{display:block;width:100%;height:100%;max-width:100%;max-height:100%;object-fit:contain;
  border-radius:4px;background:#000}
.fmv-video-toggle{position:absolute;left:50%;top:50%;z-index:3;width:62px;height:62px;margin:-31px 0 0 -31px;
  border:1px solid rgba(255,255,255,.72);border-radius:50%;background:rgba(14,12,18,.58);color:#fff;
  display:flex;align-items:center;justify-content:center;padding:0 0 2px 3px;font-size:24px;line-height:1;
  cursor:pointer;backdrop-filter:blur(8px);-webkit-backdrop-filter:blur(8px)}
.fmv-video-bar{position:absolute;left:20px;right:20px;bottom:14px;z-index:3;display:flex;align-items:center;
  gap:9px;padding:8px 10px;border-radius:14px;background:rgba(14,12,18,.72);
  backdrop-filter:blur(12px);-webkit-backdrop-filter:blur(12px)}
.fmv-video-play{width:26px;height:26px;flex:none;border:0;border-radius:50%;background:rgba(255,255,255,.14);
  color:#fff;font-size:11px;line-height:1;display:flex;align-items:center;justify-content:center;padding:0;cursor:pointer}
.fmv-video-time,.fmv-video-duration{flex:none;min-width:31px;font-size:10.5px;color:rgba(255,255,255,.72);
  font-variant-numeric:tabular-nums}
.fmv-video-range{flex:1;min-width:0;height:18px;margin:0;background:transparent;accent-color:#FF6D98;cursor:pointer}
.fmv-thumb{position:relative}
.fmv-thumb-play{position:absolute;left:50%;top:50%;width:22px;height:22px;margin:-11px 0 0 -11px;border-radius:50%;
  display:flex;align-items:center;justify-content:center;padding-left:2px;background:rgba(10,8,12,.6);
  color:#fff;font-size:9px;line-height:1;pointer-events:none}
.fmv-nav{position:absolute;top:50%;transform:translateY(-50%);width:42px;height:58px;border:0;border-radius:13px;
  background:rgba(255,255,255,.1);color:rgba(255,255,255,.9);font-size:32px;line-height:1;display:flex;
  align-items:center;justify-content:center;padding:0 0 3px;cursor:pointer;backdrop-filter:blur(8px)}
.fmv-nav.prev{left:8px}
.fmv-nav.next{right:8px}
.fmv-bottom{flex:none;padding:10px 16px calc(14px + env(safe-area-inset-bottom,0px));
  background:linear-gradient(180deg,rgba(8,7,10,0),rgba(8,7,10,.92) 24%)}
.fmv-meta{display:flex;align-items:center;gap:9px;min-width:0;padding:2px 0 9px}
.fmv-avatar{width:30px;height:30px;border-radius:50%;object-fit:cover;background:#2B2830;flex:none}
.fmv-meta-text{min-width:0;display:flex;flex-direction:column;gap:2px}
.fmv-meta-text b{font-size:13px;font-weight:600;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.fmv-meta-text small{font-size:10.5px;color:rgba(255,255,255,.55);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.fmv-thumbs{display:flex;gap:8px;overflow-x:auto;scrollbar-width:none;padding:1px 0 3px}
.fmv-thumbs::-webkit-scrollbar{display:none}
.fmv-thumb{flex:none;width:46px;height:46px;padding:0;border:2px solid transparent;border-radius:7px;
  overflow:hidden;background:#242129;opacity:.55;transition:opacity .16s,border-color .16s;cursor:pointer}
.fmv-thumb.on{border-color:#FF6D98;opacity:1}
.fmv-thumb img{display:block;width:100%;height:100%;object-fit:cover}
.fptopic{font-size:var(--fs-12);color:var(--chat-light);margin-top:10px}
.fptopic b{color:var(--brand);font-weight:600}
.fpb{display:flex;align-items:center;gap:18px;font-size:var(--fs-12);color:var(--t2);padding:12px 0;border-bottom:1px solid var(--line-2)}
.fpshare{margin-left:auto}
.fcomments{padding:14px 16px 0}
.fc-title{font-size:var(--fs-13);font-weight:700;margin-bottom:12px}
.fc-row{display:flex;gap:10px;padding:9px 0}
.fcbody{flex:1;min-width:0}
.fcbody .fcn{font-size:var(--fs-12);font-weight:600;color:var(--t2);display:flex;align-items:center;gap:6px}
.fc-lz{font-size:9px;color:var(--brand-deep);background:var(--brand-soft);border-radius:7px;padding:1px 5px;font-weight:400}
.fcbody .fct{font-size:var(--fs-13);color:var(--t1);margin-top:4px;line-height:1.6}
.fcbody .fcm{font-size:var(--fs-10);color:var(--t3);margin-top:5px;display:flex;gap:14px}
.fclike{display:flex;align-items:center;gap:3px;font-size:var(--fs-10);color:var(--t3);height:18px}
.fclike .ico{width:14px;height:14px}
.inputbar .ib small{display:block;text-align:center;color:var(--t3);line-height:1}

/* --- 发布动态 --- */
.pub-h{display:flex;align-items:center;justify-content:space-between;font-size:var(--fs-15)}
.pub-h b{font-size:var(--fs-16)}
.pub-h span{font-size:var(--fs-13);color:var(--t3)}
.pub-h .pub-sub{color:#fff;background:var(--brand-grad);border-radius:14px;padding:5px 14px}
.pub-in{width:100%;border:none;outline:none;resize:none;font-size:var(--fs-14);line-height:1.7;color:var(--t1);font-family:inherit;padding:14px 2px;background:none}
.pub-imgs{display:flex;gap:8px;flex-wrap:wrap;padding-bottom:12px}
.pimg{position:relative;width:78px;height:78px;border-radius:10px;overflow:hidden}
.pimg img{width:100%;height:100%;object-fit:cover}
.pimg .pdel{position:absolute;right:0;top:0;width:18px;height:18px;border-radius:0 10px 0 10px;background:rgba(0,0,0,.5);color:#fff;font-size:12px;display:flex;align-items:center;justify-content:center}
.pimg.add{border:1.5px dashed #DCDCE3;display:flex;flex-direction:column;align-items:center;justify-content:center;color:#8A8A94;gap:3px}
.pimg.add small{font-size:9.5px}
.pub-row{display:flex;align-items:center;gap:10px;padding:13px 2px;border-top:1px solid var(--line-2);font-size:var(--fs-13)}
.pub-row img{width:18px;height:18px;opacity:.7}
.pub-row .ar{margin-left:auto;color:var(--t3);font-size:var(--fs-12)}
.pub-quick{display:flex;gap:8px;padding:12px 0 4px;flex-wrap:wrap;overflow:visible}
.pub-quick::-webkit-scrollbar{display:none}
/* 话题胶囊横向滑：真机就是横滑这一排；胶囊不许被压成竖排字（16 个话题时会挤） */
.pub-quick .chip{flex:0 0 auto;white-space:nowrap}

/* --- 相册 --- */
.al-head{display:flex;gap:14px;padding:14px 16px;align-items:center}
.al-head>img{width:64px;height:64px;border-radius:50%;object-fit:cover}
.al-head b{font-size:var(--fs-16);display:flex;align-items:center;gap:5px}
.al-head small{display:block;font-size:var(--fs-11);color:var(--t3);margin-top:4px}
.al-bar{height:6px;border-radius:3px;background:var(--line-2);margin-top:8px;overflow:hidden}
.al-bar i{display:block;height:100%;border-radius:3px;background:var(--brand-grad)}
.vsrow{display:flex;gap:10px;overflow-x:auto;margin:0 calc(-1 * var(--s4));padding:0 var(--s4) 2px}
.vsrow::-webkit-scrollbar{display:none}
.vsitem{position:relative;width:104px;height:140px;border-radius:12px;overflow:hidden;background:#ddd;flex:none}
.vsitem img{width:100%;height:100%;object-fit:cover}
.vsplay{position:absolute;left:50%;top:50%;transform:translate(-50%,-50%);width:34px;height:34px;border-radius:50%;background:rgba(0,0,0,.42);display:flex;align-items:center;justify-content:center}
.vsplay img{width:16px;height:16px}
.vstime{position:absolute;right:6px;bottom:6px;font-size:9.5px;color:#fff;background:rgba(0,0,0,.45);border-radius:7px;padding:1px 5px}
.vsitem.add{display:flex;flex-direction:column;align-items:center;justify-content:center;gap:4px;background:#F7F8FA;border:1.5px dashed #E2E2E8;color:#8A8A94;font-size:var(--fs-11)}

/* --- 家族广场 --- */
.fam-top{background:#fff;padding:12px 16px 14px}
.fam-top .ft-l{font-size:var(--fs-13);font-weight:700;margin-bottom:10px}
.ft-card{display:flex;align-items:center;gap:12px;background:linear-gradient(135deg,#2C1B4D,#48265C);border-radius:16px;padding:14px;color:#fff}
.ft-card b{font-size:var(--fs-15)}
.ft-card small{display:block;font-size:var(--fs-10);color:rgba(255,255,255,.68);margin-top:4px}
.ft-actions{display:flex;gap:10px;margin-top:12px}
.fa{flex:1;height:52px;border-radius:12px;background:#F7F8FA;display:flex;align-items:center;justify-content:center;font-size:var(--fs-12);color:var(--t2);font-weight:600}
.famrow{display:flex;align-items:center;gap:11px;background:#fff;border-radius:14px;padding:12px 14px;margin-bottom:9px;box-shadow:0 2px 8px rgba(24,24,24,.04)}
.frk{width:22px;height:22px;border-radius:7px;font-size:var(--fs-11);font-weight:700;display:flex;align-items:center;justify-content:center;flex:none}
.famrow>img{width:42px;height:42px;object-fit:contain;flex:none}
.finfo{flex:1;min-width:0}
.finfo .fn{font-size:var(--fs-13);font-weight:600;display:flex;align-items:center;gap:6px}
.ftag{font-size:9px;border-radius:7px;padding:1px 5px;font-weight:400}
.finfo .fd{font-size:var(--fs-10);color:var(--t3);margin-top:4px}
.fjoin{flex:none;font-size:var(--fs-12);color:var(--brand);border:1px solid #FFD3E2;border-radius:14px;padding:5px 11px}

/* --- KTV --- */
.ktv{position:absolute;inset:0;overflow:hidden;background:#150F26}
.ktv .kbg{position:absolute;inset:0;background:
  radial-gradient(70% 30% at 18% 6%,rgba(255,76,129,.4),transparent 70%),
  radial-gradient(80% 34% at 88% 12%,rgba(90,200,250,.3),transparent 70%),
  linear-gradient(180deg,#2B1740,#150F26 50%,#0D0918)}
.ktv .kmask{position:absolute;inset:0;background:linear-gradient(180deg,rgba(0,0,0,.45),rgba(0,0,0,.1) 30%,rgba(8,6,14,.94))}
.ktitle{position:absolute;top:52px;left:14px;right:14px;display:flex;align-items:center;gap:10px;color:#fff;z-index:4}
.ktinfo b{font-size:var(--fs-15)}
.ktinfo small{display:block;font-size:var(--fs-10);color:rgba(255,255,255,.6);margin-top:3px}
.kmics{position:absolute;top:118px;left:16px;right:16px;display:grid;grid-template-columns:repeat(4,1fr);gap:14px 8px;z-index:4}
.kmic{text-align:center;color:#fff;position:relative}
.kmic>img{width:56px;height:56px;border-radius:50%;object-fit:cover;margin:0 auto;border:2px solid rgba(255,255,255,.35)}
.kmic.singing>img{border-color:#FFC700;box-shadow:0 0 0 4px rgba(255,199,0,.22)}
.kmic .kmm{position:absolute;left:50%;top:16px;transform:translateX(-50%);font-size:var(--fs-18);color:#FFC700;
  text-shadow:0 1px 3px rgba(0,0,0,.55)}
.kmic .kmn{font-size:9.5px;margin-top:5px;color:rgba(255,255,255,.8)}
.kmic.empty{height:56px;border-radius:50%;width:56px;margin:0 auto;border:1.5px dashed rgba(255,255,255,.32);display:flex;align-items:center;justify-content:center;font-size:9.5px;color:rgba(255,255,255,.55)}
.ksong{position:absolute;left:16px;right:16px;top:318px;background:rgba(255,255,255,.07);border-radius:16px;padding:14px;backdrop-filter:blur(8px);z-index:4;color:#fff}
.ksong .ks-h{display:flex;align-items:center;gap:7px;font-size:var(--fs-12);color:rgba(255,255,255,.7)}
.ksong .ks-h img{width:16px;height:16px}
.ksong .ks-h b{color:#fff;font-size:var(--fs-13)}
.ksong .ks-p{margin-left:auto;font-size:var(--fs-10)}
.ks-bar{height:4px;border-radius:2px;background:rgba(255,255,255,.2);margin:12px 0 8px;overflow:hidden}
.ks-bar i{display:block;height:100%;border-radius:2px;background:linear-gradient(90deg,#FFC700,#FF8E61)}
.ks-lrc{font-size:var(--fs-13);color:#FFE9A8;text-align:center}
.kpanel{position:absolute;left:12px;right:12px;top:430px;bottom:96px;background:rgba(255,255,255,.07);border-radius:16px;padding:14px;backdrop-filter:blur(8px);z-index:4;overflow:hidden}
.kpanel .kph{display:flex;justify-content:space-between;font-size:var(--fs-13);font-weight:600;color:#fff;margin-bottom:10px}
.kpanel .kph span{font-size:var(--fs-11);color:rgba(255,255,255,.6);font-weight:400}
.krow{display:flex;align-items:center;gap:10px;padding:9px 0;border-bottom:1px solid rgba(255,255,255,.08)}
.krow .ki{width:18px;font-size:var(--fs-11);color:rgba(255,255,255,.5);text-align:center}
.kin{flex:1;min-width:0;color:#fff}
.kin .kn2{font-size:var(--fs-13)}
.kin .ku{font-size:9.5px;color:rgba(255,255,255,.5);margin-top:3px}
.kt2{font-size:9px;color:#FFC700;background:rgba(255,199,0,.16);border-radius:7px;padding:1px 6px}
.kbot{font-size:var(--fs-11);color:var(--brand);margin-left:4px}
.kbottom{position:absolute;left:14px;right:14px;bottom:34px;display:flex;gap:10px;z-index:5}
.kbb{flex:1;height:42px;border-radius:21px;background:rgba(255,255,255,.14);backdrop-filter:blur(8px);display:flex;align-items:center;justify-content:center;gap:5px;color:#fff;font-size:var(--fs-12)}
/* 上麦 = l-mic（紫圆 + 白麦克风）、点歌 = l-music（青圆 + 白音符）——这两张都是「彩色圆底 + 白字形」
   的按钮素材，invert 会把它们填成一坨白圆。直接用原色，缩到 18px 当图标。 */
.kbb img{width:18px;height:18px;border-radius:50%;object-fit:contain}
.kbb .ico{width:17px;height:17px}
.kbb.on{background:var(--brand-grad)}

/* --- 盲盒 --- */
.blind{position:absolute;inset:0;overflow:hidden;background:#160E2B}
.blind .bbg{position:absolute;inset:0;background:
  radial-gradient(60% 26% at 50% 12%,rgba(255,199,0,.32),transparent 70%),
  radial-gradient(80% 30% at 14% 40%,rgba(155,123,255,.34),transparent 72%),
  linear-gradient(180deg,#2A1848,#160E2B 52%,#0D0818)}
.blind .bmask{position:absolute;inset:0;background:linear-gradient(180deg,rgba(0,0,0,.42),rgba(0,0,0,.1) 30%,rgba(8,5,14,.94))}
.btitle{position:absolute;top:52px;left:14px;right:14px;display:flex;align-items:center;gap:10px;color:#fff;z-index:4;font-size:var(--fs-16)}
.boxwrap{position:absolute;top:110px;left:0;right:0;display:flex;justify-content:center;z-index:4}
.bigbox{width:270px;background:rgba(255,255,255,.08);border:1px solid rgba(255,199,0,.3);border-radius:22px;padding:24px 18px;text-align:center;position:relative;backdrop-filter:blur(8px)}
.bigbox .blink{position:absolute;inset:-1px;border-radius:22px;border:1px solid rgba(255,199,0,.45);
  background:linear-gradient(180deg,rgba(255,199,0,.12),transparent 60%)}
.bigbox img{width:96px;height:96px;margin:0 auto;object-fit:contain;position:relative;filter:drop-shadow(0 10px 24px rgba(255,199,0,.45))}
.bigbox .btxt{color:rgba(255,255,255,.8);font-size:var(--fs-12);margin-top:16px;position:relative}
.bigbox .bprice{margin-top:12px;display:inline-flex;align-items:center;gap:5px;background:rgba(255,199,0,.16);color:#FFE9A8;font-size:var(--fs-12);border-radius:14px;padding:6px 14px;position:relative}
.bigbox .bprice img{width:16px;height:16px}
.bdraw{position:absolute;left:14px;right:14px;top:378px;bottom:92px;z-index:4;overflow-y:auto;overflow-x:hidden;-webkit-overflow-scrolling:touch}
.brow{display:flex;align-items:center;gap:11px;background:rgba(255,255,255,.06);border-radius:14px;padding:10px 12px;margin-bottom:8px;backdrop-filter:blur(6px)}
.brow>img{width:38px;height:38px;object-fit:contain;flex:none}
.binfo{flex:1;min-width:0;color:#fff}
.binfo .bn{font-size:var(--fs-13);font-weight:600;display:flex;align-items:center;gap:6px}
.binfo .br{font-size:9px;border-radius:7px;padding:1px 5px;font-weight:400}
.binfo .bu{font-size:9.5px;color:rgba(255,255,255,.5);margin-top:3px}
.brow .btime{font-size:9.5px;color:rgba(255,255,255,.4)}
.bbottom{position:absolute;left:14px;right:14px;bottom:34px;display:flex;align-items:center;gap:12px;z-index:5}
.bbottom .bb2{flex:1;color:rgba(255,255,255,.75);font-size:var(--fs-12)}
/* 盲盒 / 游戏房：底部两行（操作行 + 定价与次数行），操作行里两个按钮等宽，不再让文字被压成两行 */
.blind .bbottom{flex-direction:column;align-items:stretch;gap:8px}
.blind .bbottom .bactions{display:flex;align-items:center;gap:12px}
.blind .bbottom .bactions .bb2{flex:1;text-align:center;background:rgba(255,255,255,.08);
  border:1px solid rgba(255,255,255,.18);border-radius:30px;padding:12px 0;color:#fff;font-size:var(--fs-13)}
.blind .bbottom .bactions .btn{flex:1}
.blind .bbottom .bhint{text-align:center;font-size:11px;color:rgba(255,255,255,.68)}
/* 猜拳（200 kind=rps）：三个手势 + 结果行，贴着底部操作条上方；.bdraw 让出这一条的高度 */
.blind .brps{position:absolute;left:14px;right:14px;bottom:130px;z-index:5}
.blind .brps .rpsrow{display:flex;gap:10px;padding:6px 2px 0}
.blind .brps .rpsbtn{flex:1;display:flex;align-items:center;justify-content:center;gap:5px;padding:9px 0;
  background:rgba(255,255,255,.08);border:1px solid rgba(255,255,255,.18);border-radius:14px;
  color:#fff;font-size:var(--fs-12);user-select:none}
.blind .brps .rpsbtn img{width:20px;height:20px;object-fit:contain}
.blind .brps .rpsbtn:active{opacity:.7}
.blind .brps .rpsres{padding:8px 2px 0;min-height:18px;color:rgba(255,255,255,.82);font-size:var(--fs-12)}
.blind .bdraw{bottom:240px}

/* --- 情侣空间 --- */
.cp-head{position:relative;background:#fff;border-radius:0 0 22px 22px;padding:18px 16px 20px;overflow:hidden}
.cp-head .cp-bg{position:absolute;left:0;right:0;top:0;height:96px;background:
  radial-gradient(60% 100% at 20% 0%,rgba(255,76,129,.22),transparent 70%),
  radial-gradient(60% 100% at 82% 10%,rgba(255,142,97,.2),transparent 70%)}
.cp-avatars{position:relative;display:flex;align-items:center;justify-content:center;gap:18px;margin-top:6px}
.cp-avatars .cpa{text-align:center}
.cp-avatars .cpa img{width:66px;height:66px;border-radius:50%;object-fit:cover;border:2px solid #fff;box-shadow:0 4px 14px rgba(255,76,129,.22)}
.cp-avatars .cpa span{display:block;font-size:var(--fs-11);color:var(--t2);margin-top:5px}
.cp-heart{text-align:center}
.cp-heart img{width:38px;height:38px;object-fit:contain;margin:0 auto}
.cp-heart em{display:block;font-style:normal;font-size:9.5px;color:var(--brand);margin-top:2px}
.cp-since{position:relative;text-align:center;font-size:var(--fs-12);color:var(--t2);margin-top:14px}
.cp-since b{color:var(--brand);font-size:var(--fs-15);margin:0 3px}
.cp-lv{position:relative;margin-top:14px;background:#FFF6F9;border-radius:12px;padding:12px 14px}
.cp-lv span{font-size:var(--fs-12);font-weight:600}
.cp-bar{height:6px;border-radius:3px;background:#FFE3EC;margin-top:8px;overflow:hidden}
.cp-bar i{display:block;height:100%;border-radius:3px;background:var(--brand-grad)}
.cp-lv small{display:block;font-size:var(--fs-10);color:var(--t3);margin-top:6px}
.cp-grid{display:grid;grid-template-columns:repeat(3,1fr);gap:10px}
.cpitem{background:#fff;border-radius:14px;padding:12px 6px;text-align:center;box-shadow:0 2px 10px rgba(255,76,129,.07)}
.cpitem img{width:38px;height:38px;object-fit:contain;margin:0 auto 7px}
.cpitem b{display:block;font-size:var(--fs-12)}
.cpitem small{display:block;font-size:9.5px;color:var(--t3);margin-top:3px}

/* --- 通话收费设置 --- */
.prange{height:6px;border-radius:3px;background:#F0F0F0;position:relative;margin:22px 4px 0}
.prange i{display:block;height:100%;border-radius:3px;background:var(--brand-grad)}
.prange b{position:absolute;top:-9px;width:24px;height:24px;border-radius:50%;background:#fff;box-shadow:0 2px 8px rgba(255,76,129,.5);border:2px solid var(--brand);transform:translateX(-50%)}
.freelist{display:flex;gap:10px;flex-wrap:wrap}
.fitem{width:62px;text-align:center;font-size:9.5px;color:var(--t3)}
.fitem img{width:46px;height:46px;border-radius:50%;object-fit:cover;margin:0 auto 5px}
.fitem.add img{display:none}
.fitem.add{display:flex;flex-direction:column;align-items:center;justify-content:center;width:46px;height:46px;border-radius:50%;border:1.5px dashed #DCDCE3;color:#8A8A94;position:relative;margin-bottom:16px}
.fitem.add .ico{width:16px;height:16px}
.fitem.add span{position:absolute;top:48px;width:60px;color:var(--t3);font-size:9.5px}

/* --- 系统通知 --- */
.ntabs{display:flex;gap:20px;padding:12px 16px;background:#fff;font-size:var(--fs-13);color:var(--t3)}
.ntabs .on{color:var(--t1);font-weight:700;position:relative}
.ntabs .on::after{content:"";position:absolute;left:50%;transform:translateX(-50%);bottom:-8px;width:16px;height:3px;border-radius:2px;background:var(--brand-grad)}
.nrow{display:flex;gap:12px;padding:14px 16px;background:#fff;border-bottom:1px solid var(--line-2)}
.nrow>img{width:42px;height:42px;border-radius:12px;object-fit:cover;flex:none}
.nrow>.nthumb{width:54px;height:54px;border-radius:8px;object-fit:cover;flex:none;margin-left:2px;background:#F2F2F5}
.nbody{flex:1;min-width:0}
.nbody .nt{font-size:var(--fs-14);font-weight:600;display:flex;align-items:center;gap:7px}
.ndot{font-size:9px;color:#fff;background:var(--danger);border-radius:8px;padding:1px 6px;font-weight:400}
.nbody .nd{font-size:var(--fs-12);color:var(--t2);line-height:1.6;margin-top:5px}
.nbody .ntm{font-size:var(--fs-10);color:var(--t3);margin-top:6px}

/* --- 搜索 --- */
.sbar{display:flex;align-items:center;gap:10px;padding:10px 14px;background:#fff;border-bottom:1px solid var(--line-2)}
.sbar .sin{flex:1;height:36px;border-radius:18px;background:var(--line-3);display:flex;align-items:center;gap:8px;padding:0 14px;font-size:var(--fs-13);color:var(--t1)}
.sbar .sin img{width:16px;height:16px;opacity:.5}
/* 搜索框里那行字是**真关键词**，没搜过就是空的（原来写死设计稿的「糖糖」，
   既当占位又会被 hydrate 当成关键词自动搜一次、写进真实搜索历史 —— 实测库里有 109 条）。 */
.sbar .sin span{flex:1;min-width:0;outline:none;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.sbar .sin span:empty::before{content:attr(data-ph);color:#B4B4BE}
.sbar .ssub{font-size:var(--fs-13);color:var(--brand)}
.hsrow{display:flex;align-items:center;gap:12px;padding:11px 2px;font-size:var(--fs-13);border-bottom:1px solid var(--line-2)}
.hsrow .hsi{width:18px;text-align:center;font-size:var(--fs-12);color:var(--t3);font-weight:700}
.hsrow .hsi.top{color:var(--brand)}
.hsrow .hsh{margin-left:auto;font-size:9px;color:#E0673A;background:#FFF1E9;border-radius:7px;padding:1px 5px}
.suser{display:flex;align-items:center;gap:12px;padding:12px 16px}
.suser>img{width:46px;height:46px;border-radius:50%;object-fit:cover}
.suser .sun{display:flex;align-items:center;gap:5px;font-size:var(--fs-14);font-weight:600}
.suser .sun img{width:17px;height:17px;object-fit:contain}
.suser .sud{font-size:var(--fs-11);color:var(--t3);margin-top:4px}
.suser .btn{margin-left:auto}

/* --- 青少年模式 --- */
.teen-hero{background:#fff;padding:26px 20px 24px;text-align:center}
.teen-hero img{margin:0 auto 12px;border-radius:14px}
.teen-hero b{display:block;font-size:var(--fs-16)}
.teen-hero small{display:block;font-size:var(--fs-12);color:var(--t3);margin-top:8px;line-height:1.6}

/* --- 青少年模式（守护卡 / 真实策略 / 家长说明） --- */
.agree-link{color:inherit;font-weight:600;text-decoration:underline;text-underline-offset:2px;cursor:pointer}
.ag-meta{padding:16px 18px 0;font-size:11.5px;color:#8A8A94}
.ag-block{padding:14px 18px 0;font-size:12.5px;color:#333;line-height:1.9}
.ag-block b{font-size:14px;color:#2E2932}
.ag-loading{padding:18px 18px 0}
.ag-loading .sk{display:block;width:100%;height:11px;margin:0 0 10px;border-radius:6px}
.ag-loading .sk.sk-head{height:15px;margin:12px 0 12px}
.ag-links{padding:16px 18px 0}
.ag-foot{padding:18px 16px calc(26px + env(safe-area-inset-bottom))}
.ag-foot .btn{height:48px;border-radius:24px}
.ag-foot small{display:block;margin-top:10px;text-align:center;font-size:10.5px;line-height:1.55;color:#9A9AA4}

.teen-page{padding-bottom:26px;background:linear-gradient(180deg,#FFF5F9 0,#F7F6FA 230px,#F7F6FA 100%)}
.teen-hero2{position:relative;overflow:hidden;margin:14px 14px 0;padding:18px 17px 16px;border-radius:22px;color:#fff;
  background:linear-gradient(145deg,#2B1E2B 0%,#4A2B3E 56%,#6A3D56 100%);
  box-shadow:0 16px 34px rgba(67,35,58,.24)}
.teen-hero2.is-on{background:linear-gradient(145deg,#1F342E 0%,#2B5547 56%,#3E7D64 100%);
  box-shadow:0 16px 34px rgba(31,83,67,.24)}
.teen-hero2-glow{position:absolute;right:-64px;top:-86px;width:200px;height:200px;border-radius:50%;
  background:radial-gradient(circle,rgba(255,160,202,.4),rgba(255,160,202,0) 68%);pointer-events:none}
.teen-hero2.is-on .teen-hero2-glow{background:radial-gradient(circle,rgba(134,232,190,.32),rgba(134,232,190,0) 68%)}
.teen-hero2-top{position:relative;display:flex;align-items:flex-start;gap:12px}
.teen-shield{width:48px;height:48px;border-radius:16px;flex:none;display:flex;align-items:center;justify-content:center;
  background:linear-gradient(135deg,#FF8DB9,#C969D8);box-shadow:0 8px 20px rgba(255,104,164,.3)}
.teen-hero2.is-on .teen-shield{background:linear-gradient(135deg,#67DCA8,#2A9C71);box-shadow:0 8px 20px rgba(59,196,139,.3)}
.teen-shield .ico{width:24px;height:24px;color:#fff}
.teen-shield .ico svg{width:24px;height:24px;display:block}
.teen-hero-copy{flex:1;min-width:0;padding-top:1px}
.teen-hero-copy b{display:block;font-size:17px;line-height:1.35;letter-spacing:.2px}
.teen-hero-copy p{margin:6px 0 0;font-size:11px;line-height:1.65;color:rgba(255,255,255,.68)}
.teen-state{flex:none;margin-top:1px;padding:4px 9px;border-radius:11px;font-size:10px;font-weight:600;line-height:1.4;
  background:rgba(255,255,255,.13);color:rgba(255,255,255,.8);border:1px solid rgba(255,255,255,.12)}
.teen-state.on{background:rgba(98,234,177,.2);color:#BFF7DE;border-color:rgba(143,244,203,.28)}
.teen-state.off{background:rgba(255,196,128,.16);color:#FFD9A8;border-color:rgba(255,211,159,.22)}
.teen-hero-meta{position:relative;display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:7px;margin-top:15px}
.teen-meta{min-width:0;padding:9px 10px;border-radius:13px;background:rgba(255,255,255,.08);
  border:1px solid rgba(255,255,255,.08)}
.teen-meta small{display:block;font-size:9.5px;color:rgba(255,255,255,.52);white-space:nowrap}
.teen-meta b{display:block;margin-top:3px;font-size:12px;line-height:1.3;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.teen-switch{position:relative;width:100%;height:46px;margin-top:14px;border:0;border-radius:15px;cursor:pointer;
  color:#6D2545;font-family:inherit;font-size:14.5px;font-weight:700;
  background:linear-gradient(135deg,#FFD8E8,#FFF0F6);box-shadow:0 8px 20px rgba(0,0,0,.16)}
.teen-switch.on{color:#fff;background:rgba(255,255,255,.14);border:1px solid rgba(255,255,255,.2);box-shadow:none}
.teen-switch.disabled,.teen-switch:disabled{cursor:default;opacity:.58}
.teen-card{margin:13px 14px 0;padding:15px 15px 12px;border-radius:19px;background:#fff;
  box-shadow:0 5px 20px rgba(49,35,47,.055)}
.teen-card-head{display:flex;align-items:center;gap:8px;margin-bottom:4px}
.teen-card-head b{font-size:15px;color:#352F3A}
.teen-card-head span{margin-left:auto;font-size:10px;color:#98929D;font-weight:400}
.teen-limit-list{margin-top:2px}
.teen-limit{display:flex;align-items:flex-start;gap:10px;padding:10px 0;border-bottom:1px solid #F3EFF3}
.teen-limit:last-child{border-bottom:0;padding-bottom:2px}
.teen-limit-icon{width:34px;height:34px;border-radius:11px;flex:none;display:flex;align-items:center;justify-content:center;
  background:#FFF1F7}
.teen-limit-icon img{width:18px;height:18px;object-fit:contain}
.teen-limit-main{flex:1;min-width:0;padding-top:1px}
.teen-limit-main b{display:block;font-size:12.5px;line-height:1.35;color:#3C3542;font-weight:600}
.teen-limit-main small{display:block;margin-top:3px;font-size:10px;line-height:1.5;color:#96909B}
.teen-limit-state{flex:none;max-width:108px;padding-top:2px;text-align:right;font-size:10px;line-height:1.45;
  color:#C15A86;font-weight:600}
.teen-limit-state.muted{color:#96909B;font-weight:500}
.teen-policy-tip{margin-top:11px;padding:10px 11px;border-radius:11px;background:#FFF8F2;
  font-size:10px;line-height:1.65;color:#9A715E}
.teen-tools{margin-top:5px}
.teen-tool{display:flex;align-items:center;gap:11px;padding:11px 0;border-bottom:1px solid #F3EFF3;cursor:pointer}
.teen-tool:last-child{border-bottom:0;padding-bottom:3px}
.teen-tool-ico{width:33px;height:33px;border-radius:11px;flex:none;display:flex;align-items:center;justify-content:center;
  background:#F8F3F8}
.teen-tool-ico img{width:18px;height:18px;object-fit:contain}
.teen-tool-main{flex:1;min-width:0}
.teen-tool-main b{display:block;font-size:12.5px;line-height:1.35;color:#3C3542;font-weight:600}
.teen-tool-main small{display:block;margin-top:2px;font-size:10px;line-height:1.45;color:#96909B}
.teen-tool-arrow{margin-left:auto;font-size:18px;line-height:1;color:#C8C2CB;font-style:normal}
.teen-parent{padding-bottom:14px}
.teen-parent-head{width:100%;display:flex;align-items:center;gap:11px;padding:0;border:0;background:none;
  color:inherit;font-family:inherit;text-align:left;cursor:pointer}
.teen-parent-ico{width:36px;height:36px;border-radius:12px;flex:none;display:flex;align-items:center;justify-content:center;
  background:linear-gradient(150deg,#F1EAFE,#E7DCFC);color:#8D6AC9}
.teen-parent-ico .ico{width:20px;height:20px}
.teen-parent-copy{flex:1;min-width:0}
.teen-parent-copy b{display:block;font-size:13.5px;color:#3C3542}
.teen-parent-copy small{display:block;margin-top:3px;font-size:10px;color:#96909B;line-height:1.45}
.teen-parent-arrow{flex:none;color:#BEB7C1;display:flex;align-items:center;justify-content:center;
  transition:transform .18s ease}
.teen-parent-arrow .ico{width:18px;height:18px;transform:rotate(90deg);transition:transform .18s ease}
.teen-parent-head.open .teen-parent-arrow .ico{transform:rotate(-90deg)}
.teen-parent-body{margin-top:12px;padding-top:12px;border-top:1px solid #F3EFF3}
.teen-parent-body[hidden]{display:none!important}
.teen-parent-body p{margin:0;font-size:11px;line-height:1.75;color:#77717D}
.teen-parent-body ul{margin:10px 0 0;padding:0;list-style:none}
.teen-parent-body li{position:relative;padding-left:12px;margin-top:8px;font-size:10.5px;line-height:1.7;color:#77717D}
.teen-parent-body li::before{content:"";position:absolute;left:2px;top:7px;width:4px;height:4px;border-radius:50%;background:#D9A7C0}
.teen-parent-body li b{color:#4A414F}
.teen-parent-actions{display:flex;gap:9px;margin-top:12px}
.teen-parent-actions span{flex:1;height:34px;border-radius:17px;display:flex;align-items:center;justify-content:center;
  font-size:11.5px;font-weight:600;color:#B64E7C;background:#FFF2F7;cursor:pointer}
.teen-safety{display:flex;align-items:flex-start;gap:10px;margin:13px 14px 0;padding:13px 14px;border-radius:16px;
  background:linear-gradient(135deg,#FFF9EE,#FFFDF8);border:1px solid #F7E8CF}
.teen-safety-ico{width:23px;height:23px;border-radius:50%;flex:none;display:flex;align-items:center;justify-content:center;
  background:#F0A33D;color:#fff;font-size:13px;font-weight:800}
.teen-safety div{flex:1;min-width:0}
.teen-safety b{display:block;font-size:12px;color:#6C5434}
.teen-safety p{margin:3px 0 0;font-size:10px;line-height:1.6;color:#9B8464}
.teen-safety-link{flex:none;align-self:center;padding:5px 9px;border-radius:12px;background:#fff;
  color:#B77B2E;font-size:10px;font-weight:600;cursor:pointer;border:1px solid #F2DFC0}
.teen-foot{padding:17px 24px 4px;text-align:center}
.teen-foot p{margin:0;font-size:9.5px;line-height:1.65;color:#A29CA7}
.teen-foot div{margin-top:7px;display:flex;align-items:center;justify-content:center;gap:6px;flex-wrap:wrap;
  font-size:10px;color:#B34F7E}
.teen-foot div span{cursor:pointer}
.teen-foot div i{font-style:normal;color:#D2CCD4}
.sk-soft{background:linear-gradient(90deg,#F6F1F5,#FBF8FA,#F6F1F5);background-size:200% 100%;animation:sk-breathe 1.2s linear infinite}

/* --- APP 模式（单机全流程可交互） --- */
.appmode{display:flex;gap:28px;justify-content:center;align-items:flex-start;padding:26px 20px 60px;max-width:1100px;margin:0 auto}
.app-col{width:300px;flex:none;color:#c9c9d4}
.app-col h3{font-size:12px;letter-spacing:2px;color:#6f6f7d;font-weight:500;margin:0 0 10px}
.app-nav{background:#15151d;border:1px solid #232330;border-radius:14px;padding:10px;max-height:640px;overflow:auto}
.app-nav .grp{font-size:10.5px;color:#6f6f7d;padding:8px 8px 4px;letter-spacing:1px}
.app-nav .nv{display:flex;align-items:center;gap:8px;padding:7px 9px;border-radius:9px;font-size:12.5px;color:#b9b9c6;cursor:pointer}
.app-nav .nv:hover{background:#1e1e28;color:#fff}
.app-nav .nv.on{background:#2a1a24;color:#FF9EC0}
.app-nav .nv i{font-style:normal;font-size:10px;color:#5f5f6d;width:16px}
.app-phone{position:relative;flex:none}
.app-tip{margin-top:14px;font-size:11.5px;line-height:1.85;color:#7c7c8a;background:#15151d;border:1px solid #232330;border-radius:12px;padding:12px 14px}
.app-tip b{color:#FF9EC0}
.app-tip code{color:#9ad1ff;font-size:11px}
.app-crumbs{display:flex;flex-wrap:wrap;gap:6px;margin-top:12px}
.app-crumbs span{font-size:11px;background:#1c1c26;border-radius:8px;padding:4px 9px;color:#9a9aa8}
.app-crumbs span.now{background:#2a1a24;color:#FF9EC0}
.overlay{position:absolute;inset:0;border-radius:0;overflow:hidden}

/* =========================================================================
   第三批页面（家族群聊 / AI 专属礼物 / 特惠视频 / 举报 / 黑名单 /
   通话记录 / 活动中心 / 开播准备）
   ========================================================================= */
.gc-notice{display:flex;align-items:center;gap:10px;margin:0 14px 12px;padding:10px 12px;
  border-radius:12px;background:rgba(255,255,255,.82);box-shadow:0 2px 10px rgba(255,76,129,.08)}
.gc-notice>img{width:30px;height:30px;object-fit:contain}
.gc-notice b{font-size:var(--fs-12);display:block}
.gc-notice small{font-size:10.5px;color:var(--t3);display:block;margin-top:2px;
  overflow:hidden;text-overflow:ellipsis;white-space:nowrap;max-width:230px}
.gc-notice .ar{margin-left:auto;color:var(--t4)}

.ai-hero{text-align:center;padding:18px 26px 14px;color:#fff}
.ai-hero .ai-glow{width:78px;height:78px;object-fit:contain;margin:0 auto 10px;
  filter:drop-shadow(0 8px 22px rgba(255,199,0,.55))}
.ai-hero b{display:block;font-size:var(--fs-16);letter-spacing:.4px}
.ai-hero small{display:block;font-size:var(--fs-11);color:rgba(255,255,255,.6);margin-top:8px;line-height:1.6}
.ai-card{margin:0 14px 12px;background:rgba(255,255,255,.07);border:1px solid rgba(255,255,255,.1);
  border-radius:16px;padding:14px;color:#fff;backdrop-filter:blur(8px)}
.ai-step{display:flex;align-items:center;gap:8px;font-size:var(--fs-13);font-weight:600;margin-bottom:12px}
.ai-step .n{width:19px;height:19px;border-radius:50%;background:var(--brand-grad);
  font-size:11px;display:flex;align-items:center;justify-content:center}
.ai-photos{display:flex;gap:10px}
.ap{position:relative;width:82px;height:82px;border-radius:12px;overflow:hidden}
.ap img{width:100%;height:100%;object-fit:cover}
.ap .ok{position:absolute;right:4px;bottom:4px;width:18px;height:18px;border-radius:50%;
  background:#12A150;color:#fff;font-size:11px;display:flex;align-items:center;justify-content:center}
.ap.add{border:1.5px dashed rgba(255,255,255,.3);display:flex;flex-direction:column;
  align-items:center;justify-content:center;gap:4px;color:rgba(255,255,255,.55);font-size:10px}
.ai-tip{font-size:10px;color:rgba(255,255,255,.45);margin-top:10px;line-height:1.6}
.ai-styles{display:grid;grid-template-columns:repeat(4,1fr);gap:8px}
.as{position:relative;border-radius:12px;padding:8px 4px;text-align:center;font-size:11px;
  background:rgba(255,255,255,.06)}
.as span{display:block;height:38px;border-radius:8px;margin-bottom:6px}
.as.on{background:rgba(255,76,129,.18)}
.ai-row{display:flex;justify-content:space-between;font-size:var(--fs-12);padding:7px 0;
  color:rgba(255,255,255,.72)}
.ai-row b{color:#fff;font-weight:600}
.ai-note{font-size:10px;color:rgba(255,255,255,.4);text-align:center;margin-top:10px}

.vs-banner{margin:12px 14px 0;border-radius:16px;padding:16px;
  background:linear-gradient(120deg,#FF4C81,#FF8E61);color:#fff;position:relative;overflow:hidden}
.vs-banner::after{content:"";position:absolute;right:-30px;top:-30px;width:130px;height:130px;
  border-radius:50%;background:rgba(255,255,255,.16)}
.vs-banner .vsb-t{font-size:var(--fs-16);font-weight:700;position:relative}
.vs-banner .vsb-t b{background:rgba(255,255,255,.22);border-radius:10px;padding:2px 8px;margin-left:6px}
.vs-banner .vsb-s{font-size:var(--fs-11);opacity:.9;margin-top:8px;position:relative}
.vs-banner .vsb-btn{width:108px;height:32px;border-radius:16px;background:#fff;color:var(--brand);
  font-size:var(--fs-13);font-weight:600;display:flex;align-items:center;justify-content:center;
  margin-top:14px;position:relative}
.vs-list{display:flex;flex-direction:column;gap:10px}
.vs-card{display:flex;align-items:center;gap:11px;background:#fff;border-radius:14px;padding:10px;
  box-shadow:0 2px 10px rgba(24,24,24,.05)}
.vsc-img{position:relative;width:74px;height:92px;border-radius:11px;overflow:hidden;flex:none}
.vsc-img img{width:100%;height:100%;object-fit:cover}
.vsc-t{position:absolute;right:5px;bottom:5px;font-size:9px;color:#fff;background:rgba(0,0,0,.45);
  border-radius:7px;padding:1px 5px}
.vsc-live{position:absolute;left:5px;top:5px;display:flex;align-items:center;gap:4px;
  background:rgba(0,0,0,.42);color:#fff;font-size:9px;border-radius:8px;padding:2px 6px}
.vsc-live i{width:5px;height:5px;border-radius:50%;background:#3ED07F}
.vsc-body{flex:1;min-width:0}
.vsc-n{display:flex;align-items:center;gap:5px;font-size:var(--fs-14);font-weight:600}
.vsc-n img{width:17px;height:17px;object-fit:contain}
.vsc-tag{font-size:9px;color:#E0673A;background:#FFF1E9;border-radius:7px;padding:1px 5px;font-weight:400}
.vsc-d{font-size:var(--fs-10);color:var(--t3);margin-top:4px}
.vsc-p{display:flex;align-items:baseline;gap:7px;margin-top:7px}
.vsc-p .old{font-size:var(--fs-10);color:var(--t4);text-decoration:line-through}
.vsc-p .now{font-size:var(--fs-13);color:var(--brand);font-weight:700}
.vsc-btn{flex:none;height:30px;padding:0 14px;border-radius:15px;background:var(--brand-grad);
  color:#fff;font-size:var(--fs-12);display:flex;align-items:center}

.rp-grid{display:grid;grid-template-columns:repeat(2,1fr);gap:9px}
.rp-item{display:flex;align-items:center;gap:9px;background:#fff;border-radius:12px;padding:12px;
  font-size:var(--fs-12);border:1.5px solid transparent}
.rp-item img{width:22px;height:22px;object-fit:contain}
.rp-item.on{border-color:var(--brand);background:#FFF5F8;color:var(--brand);font-weight:600}
.rp-area{background:#fff;border-radius:12px;padding:13px 14px;font-size:var(--fs-12.5);
  font-size:12.5px;line-height:1.7;color:var(--t1)}

.bl-row{display:flex;align-items:center;gap:12px;padding:12px 16px;border-bottom:1px solid var(--line-2)}
.bl-row:last-child{border-bottom:none}
.bl-btn{flex:none;height:28px;padding:0 14px;border-radius:14px;font-size:var(--fs-12);
  color:var(--t2);border:1px solid var(--line)}

.cl-row{display:flex;align-items:center;gap:12px;padding:13px 16px;border-bottom:1px solid var(--line-2)}
.cl-row:last-child{border-bottom:none}
.cl-av{position:relative;flex:none}
.cl-av img{width:46px;height:46px;border-radius:50%;object-fit:cover}
.cl-badge{position:absolute;right:-2px;bottom:-2px;width:18px;height:18px;border-radius:50%;
  background:#12A150;color:#fff;font-size:10px;display:flex;align-items:center;
  justify-content:center;border:1.5px solid #fff}
.cl-badge.miss{background:var(--danger)}
.cl-badge.out{background:#E8890B}
.cl-n{display:flex;align-items:center;gap:8px;font-size:var(--fs-14);font-weight:600}
.cl-n small{font-weight:400}
.cl-d{font-size:var(--fs-11);color:var(--t3);margin-top:4px}
.cl-c{text-align:right;flex:none}
.cl-c b{display:block;font-size:var(--fs-13);color:var(--t2);margin-bottom:6px}
.cl-call{display:inline-flex;align-items:center;gap:4px;height:26px;padding:0 11px;
  border-radius:13px;background:var(--brand-soft);color:var(--brand);font-size:var(--fs-11)}
.cl-call .ico{width:13px;height:13px}

.act-hero{margin:12px 14px 0;border-radius:18px;padding:20px 18px;text-align:center;color:#fff;
  background:linear-gradient(150deg,#FF4C81,#FF7A5C 60%,#FFB24A)}
.act-hero img{width:88px;height:88px;object-fit:contain;margin:0 auto 8px;
  filter:drop-shadow(0 8px 18px rgba(0,0,0,.25))}
.act-hero .ah-t{font-size:var(--fs-18);font-weight:700;letter-spacing:.5px}
.act-hero .ah-s{font-size:var(--fs-11);opacity:.92;margin-top:7px}
.act-hero .ah-btn{width:112px;height:32px;border-radius:16px;background:#fff;color:var(--brand);
  font-size:var(--fs-13);font-weight:600;display:flex;align-items:center;justify-content:center;
  margin:14px auto 0}
.act-hero .ah-timer{font-size:var(--fs-11);opacity:.9;margin-top:12px;display:flex;
  align-items:center;justify-content:center;gap:6px}
.act-hero .ah-timer b{background:rgba(0,0,0,.22);border-radius:7px;padding:2px 7px;
  font-size:var(--fs-13);font-variant-numeric:tabular-nums}
.act-grid{display:grid;grid-template-columns:repeat(3,1fr);grid-auto-rows:1fr;gap:10px}
.act-item{height:100%;min-height:148px;background:#fff;border-radius:14px;padding:12px 7px 11px;text-align:center;
  box-shadow:0 2px 10px rgba(255,142,97,.08);display:flex;flex-direction:column;align-items:center}
.act-item img{width:42px;height:42px;object-fit:contain;margin:0 auto 7px}
.act-item b{display:-webkit-box;width:100%;min-height:30px;font-size:var(--fs-12);line-height:1.35;
  -webkit-box-orient:vertical;-webkit-line-clamp:2;overflow:hidden}
.act-item small{display:-webkit-box;width:100%;min-height:25px;font-size:9px;color:var(--t3);margin-top:3px;
  line-height:1.4;-webkit-box-orient:vertical;-webkit-line-clamp:2;overflow:hidden}
.act-btn{display:flex;align-items:center;justify-content:center;margin:8px auto 0;width:64px;height:23px;
  border-radius:12px;background:var(--brand-grad);color:#fff;font-size:10px;flex:none}
.act-item .act-btn{margin-top:auto}

.act-rules-intro{display:flex;align-items:baseline;justify-content:space-between;gap:10px;padding:1px 2px 13px}
.act-rules-intro b{font-size:13px;font-weight:600;color:#3B3540}
.act-rules-intro span{flex:none;font-size:10.5px;color:#AAA3AE;line-height:1.5}
.act-rules{display:flex;flex-direction:column;gap:10px;padding:0 0 12px}
.act-rule{position:relative;overflow:hidden;isolation:isolate;padding:15px 15px 14px;border-radius:17px;
  background:linear-gradient(135deg,#FFF3F8 0%,#FFF9FC 52%,#F7F1FF 100%);
  box-shadow:0 5px 16px rgba(117,70,98,.05)}
.act-rule::after{content:"";position:absolute;z-index:-1;right:-64px;top:-76px;width:152px;height:152px;
  border-radius:50%;pointer-events:none;
  background:radial-gradient(circle,rgba(255,130,174,.20) 0%,rgba(255,130,174,0) 72%)}
.act-rule.is-upcoming{background:linear-gradient(135deg,#FFF7EC 0%,#FFFAF4 50%,#FFF2F6 100%);
  box-shadow:0 5px 16px rgba(145,104,49,.045)}
.act-rule.is-upcoming::after{background:radial-gradient(circle,rgba(247,174,72,.18) 0%,rgba(247,174,72,0) 72%)}
.act-rule.is-ended{background:linear-gradient(135deg,#F7F6F8 0%,#FBFAFC 52%,#F2F0F6 100%);
  box-shadow:0 4px 14px rgba(83,76,92,.035)}
.act-rule.is-ended::after{background:radial-gradient(circle,rgba(155,145,170,.12) 0%,rgba(155,145,170,0) 72%)}
.act-rule-head{display:flex;align-items:center;justify-content:space-between;gap:12px;margin-bottom:8px}
.act-rule-head b{min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;font-size:14.5px;font-weight:600;color:#332D38}
.act-rule-status{display:inline-flex;align-items:center;gap:5px;flex:none;font-size:10.5px;line-height:1;color:#8C8691;white-space:nowrap}
.act-rule-status::before{content:"";width:6px;height:6px;border-radius:50%;background:#B6B0BA}
.act-rule-status.is-running{color:#E5537C}
.act-rule-status.is-running::before{background:#FF6696;box-shadow:0 0 0 3px rgba(255,102,150,.10)}
.act-rule-status.is-upcoming{color:#B98025}
.act-rule-status.is-upcoming::before{background:#F0B542}
.act-rule-status.is-ended{color:#A29CA6}
.act-rule-status.is-ended::before{background:#C8C3CA}
.act-rule>p{margin:0;color:#6A626F;font-size:12.5px;line-height:1.7}
.act-rule-time{margin-top:8px;color:#A096A4;font-size:11px;line-height:1.5}
.act-rule.is-ended .act-rule-head b{color:#625C68}
.act-rule.is-ended>p,.act-rule.is-ended .act-rule-time{color:#98919D}
.act-rules-empty{padding:54px 20px;text-align:center;color:#A49DA7;font-size:12px}

.startlive{position:absolute;inset:0;overflow:hidden;background:#09070D;display:flex;flex-direction:column}
.sl-media{position:absolute;inset:0;overflow:hidden;background:#09070D}
.sl-cover-bg,.sl-camera{position:absolute;inset:0;width:100%;height:100%;object-fit:cover}
.sl-cover-bg{filter:blur(12px) brightness(.56) saturate(1.05);transform:scale(1.08)}
.sl-camera{opacity:0;transition:opacity .25s ease;transform:scaleX(-1);z-index:1}
.sl-camera.on{opacity:1}
.sl-camera.rear{transform:none}
.sl-media .sl-mask{position:absolute;inset:0;z-index:2;
  background:linear-gradient(180deg,rgba(4,3,8,.66) 0%,rgba(4,3,8,.08) 27%,rgba(4,3,8,.12) 52%,rgba(4,3,8,.9) 100%)}
.sl-top{position:relative;z-index:6;height:52px;flex:none;display:flex;align-items:center;
  padding:3px 16px 0;color:#fff}
.sl-close{width:36px;height:36px;border:0;border-radius:50%;padding:0;background:rgba(0,0,0,.22);
  color:#fff;display:flex;align-items:center;justify-content:center;cursor:pointer}
.sl-close .ico,.sl-close .ico svg{width:20px;height:20px;display:block}
.sl-mode{position:absolute;left:50%;top:11px;transform:translateX(-50%);height:31px;display:flex;align-items:flex-start}
.sl-mode span{position:relative;font-size:16px;font-weight:700;line-height:24px;color:#fff;padding:0 4px 7px}
.sl-mode span.on::after{content:"";position:absolute;left:50%;bottom:0;transform:translateX(-50%);
  width:22px;height:3px;border-radius:2px;background:#fff}
.sl-top-note{margin-left:auto;font-size:11.5px;color:rgba(255,255,255,.7);letter-spacing:.5px}
.sl-stage{position:relative;z-index:5;flex:1;min-height:0;display:flex;align-items:flex-start;
  gap:14px;padding:16px 18px 0;color:#fff}
.sl-cover{position:relative;width:72px;height:94px;border:1px solid rgba(255,255,255,.42);border-radius:14px;
  padding:0;overflow:hidden;flex:none;background:rgba(0,0,0,.25);color:#fff;cursor:pointer;
  box-shadow:0 8px 24px rgba(0,0,0,.28)}
.sl-cover img{width:100%;height:100%;object-fit:cover;display:block}
.sl-cover-tip{position:absolute;left:0;right:0;bottom:0;height:25px;line-height:25px;text-align:center;
  font-size:10px;background:rgba(0,0,0,.52);backdrop-filter:blur(5px)}
.sl-headline{flex:1;min-width:0;padding-top:22px}
.sl-input{display:block;width:100%;background:none;border:0;outline:0;color:#fff;font-family:inherit;
  font-size:21px;line-height:1.35;font-weight:700;text-shadow:0 2px 12px rgba(0,0,0,.5);min-width:0}
.sl-input::placeholder{color:rgba(255,255,255,.86)}
.sl-title-line{display:flex;align-items:flex-start;gap:8px}
.sl-title-line .sl-input{flex:1;padding:0 0 4px;border-bottom:1px solid transparent;transition:border-color .18s ease}
.sl-title-line .sl-input.is-error{border-bottom-color:#FF8FA8}
.sl-count{flex:none;min-width:38px;padding-top:7px;text-align:right;font-size:10.5px;line-height:15px;
  color:rgba(255,255,255,.48);font-variant-numeric:tabular-nums;text-shadow:0 1px 8px rgba(0,0,0,.45)}
.sl-count.is-valid{color:#FFD0DE}
.sl-title-hint{margin-top:7px;font-size:10.5px;line-height:1.45;color:rgba(255,255,255,.54);
  text-shadow:0 1px 8px rgba(0,0,0,.45);transition:color .18s ease}
.sl-title-hint.is-error{color:#FFB5C5;font-weight:600}
.sl-title-hint[hidden]{display:none!important}
.sl-subline{display:flex;align-items:center;gap:5px;margin-top:7px;font-size:11.5px;
  color:rgba(255,255,255,.72);text-shadow:0 1px 8px rgba(0,0,0,.45)}
.sl-subline img{width:13px;height:13px;object-fit:contain;filter:brightness(0) invert(1);opacity:.75}
.sl-controls{position:relative;z-index:6;flex:none;display:flex;align-items:flex-start;justify-content:space-between;
  padding:0 22px;margin-bottom:8px;color:#fff}
.sl-tool{width:56px;border:0;background:none;padding:4px 0 0;color:#fff;display:flex;flex-direction:column;
  align-items:center;gap:8px;cursor:pointer;font-family:inherit;text-shadow:0 1px 8px rgba(0,0,0,.5)}
.sl-tool-ic{width:42px;height:42px;border-radius:50%;display:flex;align-items:center;justify-content:center;
  background:rgba(22,18,27,.52);border:1px solid rgba(255,255,255,.13);backdrop-filter:blur(10px)}
.sl-tool-ic svg,.sl-tool-ic .ico,.sl-tool-ic .ico svg{width:22px;height:22px;display:block}
.sl-tool em{font-style:normal;font-size:11px;line-height:1;color:rgba(255,255,255,.88)}
.sl-bottom{position:relative;z-index:6;flex:none;padding:4px 20px 18px}
.sl-resume:empty{display:none}
.sl-resume{margin-bottom:9px;padding:10px 13px;border-radius:13px;background:rgba(24,18,31,.72);
  border:1px solid rgba(255,255,255,.12);color:#fff;font-size:11.5px;line-height:1.55;backdrop-filter:blur(12px)}
.sl-resume b{color:#FFD1E0}
.sl-start{height:56px;border-radius:28px;background:linear-gradient(90deg,#FF385C 0%,#FF5D86 100%);
  color:#fff;font-size:17px;font-weight:700;display:flex;align-items:center;justify-content:center;
  box-shadow:0 12px 30px rgba(255,56,92,.35);transition:opacity .18s ease,box-shadow .18s ease,transform .18s ease;
  border:0;padding:0;font-family:inherit;width:100%;cursor:pointer}
.sl-start:active{transform:translateY(1px)}
.sl-start.is-idle,.sl-start[aria-disabled="true"]{opacity:.58;box-shadow:none}
.sl-form-msg{margin:0 2px 10px;padding:10px 13px;border-radius:12px;text-align:left;font-size:11.5px;
  line-height:1.55;color:#FFD4DF;background:rgba(255,76,129,.14);border:1px solid rgba(255,145,174,.22);
  backdrop-filter:blur(12px)}
.sl-form-msg.is-neutral{color:rgba(255,255,255,.76);background:rgba(255,255,255,.08);
  border-color:rgba(255,255,255,.12)}
.sl-form-msg[hidden]{display:none!important}
.sl-agree{display:flex;align-items:flex-start;justify-content:flex-start;gap:10px;padding:14px 2px 0;
  font-size:11.5px;color:rgba(255,255,255,.64);line-height:1.55;text-align:left}
.sl-agree-toggle{width:28px;height:28px;margin:-4px 0 0 -4px;padding:4px;border:0;background:none;
  display:flex;align-items:center;justify-content:center;flex:none;cursor:pointer;font-family:inherit}
.sl-agree .cbx{width:20px;height:20px;border-radius:6px;background:rgba(255,255,255,.06);color:#fff;
  border:1.5px solid rgba(255,255,255,.62);box-sizing:border-box;display:flex;align-items:center;
  justify-content:center;flex:none;font-size:12px;line-height:1;transition:background .16s ease,border-color .16s ease}
.sl-agree .cbx.on{background:linear-gradient(135deg,#FF4C81,#FF7A68);border-color:#FF7C9B;
  box-shadow:0 4px 12px rgba(255,76,129,.32)}
.sl-agree-copy{flex:1;min-width:0;padding-top:1px}
.sl-doc-link{border:0;background:none;padding:0;margin:0;color:#FFC3D5;font:inherit;font-weight:600;
  display:inline;cursor:pointer;line-height:inherit}
.sl-doc-link:active{opacity:.68}
.sl-agree-error{margin:7px 0 0 32px;font-size:10.5px;line-height:1.4;color:#FFB5C5}
.sl-agree-error[hidden]{display:none!important}

.sl-agree-mask{position:absolute;inset:0;z-index:48;display:flex;align-items:flex-end;
  background:rgba(9,5,14,.58);backdrop-filter:blur(4px);animation:sl-fade .18s ease}
.sl-agree-mask[hidden]{display:none!important}
.sl-agree-sheet{width:100%;max-height:calc(100% - 74px);display:flex;flex-direction:column;
  background:#fff;color:#29232D;border-radius:24px 24px 0 0;box-shadow:0 -18px 50px rgba(0,0,0,.24);
  padding-bottom:env(safe-area-inset-bottom,0px);animation:sl-up .24s cubic-bezier(.2,.9,.25,1)}
.sl-agree-grip{width:38px;height:4px;border-radius:2px;background:#E9E4E9;margin:8px auto 0;flex:none}
.sl-agree-head{height:58px;flex:none;display:grid;grid-template-columns:38px minmax(0,1fr) 38px;align-items:center;
  padding:0 14px}
.sl-agree-head b{grid-column:2;grid-row:1;min-width:0;text-align:center;font-size:16px;line-height:1.3;
  font-weight:700;letter-spacing:.1px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.sl-agree-back,.sl-agree-close{width:36px;height:36px;border:0;border-radius:50%;padding:0;background:#F7F4F7;
  color:#5F5662;display:flex;align-items:center;justify-content:center;cursor:pointer;grid-row:1}
.sl-agree-back{grid-column:1;justify-self:start}
.sl-agree-close{grid-column:3;justify-self:end}
.sl-agree-back .ico,.sl-agree-close .ico,.sl-agree-back .ico svg,.sl-agree-close .ico svg{width:18px;height:18px;display:block}
.sl-agree-back[hidden]{display:none!important}
.sl-agree-index{overflow-y:auto;padding:2px 18px 12px;min-height:0}
.sl-agree-index[hidden],.sl-doc-reader[hidden]{display:none!important}
.sl-agree-intro{margin:2px 2px 16px;color:#817783;font-size:12.5px;line-height:1.75}
.sl-agree-doc{width:100%;display:flex;align-items:center;gap:12px;padding:15px 12px;margin:0 0 10px;
  border:1px solid #F1EBF0;border-radius:16px;background:#FCFAFB;text-align:left;cursor:pointer;
  font-family:inherit;color:inherit}
.sl-agree-doc:active{background:#FFF5F8}
.sl-agree-doc-badge{width:38px;height:38px;border-radius:12px;flex:none;display:flex;align-items:center;
  justify-content:center;color:#F05283;background:#FFF0F5;font-size:11px;font-weight:700;letter-spacing:.5px}
.sl-agree-doc-text{flex:1;min-width:0;display:block}
.sl-agree-doc-text b{display:block;font-size:14px;line-height:1.35;color:#302A33}
.sl-agree-doc-text small{display:block;margin-top:3px;font-size:11px;line-height:1.35;color:#9B919E}
.sl-agree-doc-arrow{flex:none;color:#C9C0CB;font-size:22px;line-height:1}
.sl-agree-note{margin:14px 2px 2px;color:#AAA1AD;font-size:10.5px;line-height:1.5;text-align:center}
.sl-doc-reader{overflow-y:auto;min-height:0;padding:2px 20px 22px;flex:1}
.sl-doc-meta{color:#A69CA9;font-size:10.5px;line-height:1.5;margin:0 0 14px}
.sl-doc-body{color:#3C3540;font-size:13px;line-height:1.9;word-break:break-word}
.sl-doc-body h4{font-size:14px;line-height:1.5;margin:18px 0 4px;color:#2B252E}
.sl-doc-body p{margin:0 0 12px}
.sl-doc-loading{padding:24px 0;text-align:center;color:#A69CA9;font-size:12px}
.sl-doc-error{padding:26px 12px;border-radius:14px;background:#FFF5F7;color:#C04A6B;text-align:center;
  font-size:12px;line-height:1.7}
.sl-agree-sheet-foot{flex:none;padding:12px 18px 16px;border-top:1px solid #F4EFF3;background:#fff}
.sl-agree-accept{width:100%;height:50px;border:0;border-radius:25px;color:#fff;font-family:inherit;
  font-size:16px;font-weight:700;letter-spacing:.4px;cursor:pointer;
  background:linear-gradient(103deg,#FF5E5B 0%,#FF4C81 52%,#C94DF0 100%);
  box-shadow:0 10px 24px rgba(255,76,129,.28)}
.sl-agree-accept:active{transform:translateY(1px)}
@keyframes sl-up{from{transform:translateY(28px);opacity:.65}to{transform:translateY(0);opacity:1}}
@keyframes sl-fade{from{opacity:0}to{opacity:1}}
@media (max-height:700px){
  .sl-stage{padding-top:10px}
  .sl-headline{padding-top:12px}
  .sl-cover{width:64px;height:84px}
  .sl-controls{margin-bottom:4px}
  .sl-tool-ic{width:38px;height:38px}
  .sl-tool{gap:6px}
  .sl-bottom{padding-bottom:12px}
  .sl-start{height:52px}
  .sl-agree-sheet{max-height:calc(100% - 44px)}
  .sl-agree-head{height:50px}
  .sl-agree-intro{margin-bottom:11px}
  .sl-agree-doc{padding:12px 11px;margin-bottom:8px}
  .sl-agree-doc-badge{width:34px;height:34px}
}

/* =========================================================================
   第四批：补齐《方案》4.2 功能清单的页面样式（命名前缀 p4-）
   自定义招呼 / 表情贴纸 / 隐私设置 / 换绑手机 / 直播连麦 PK / 语音房 PK /
   房主管理 / 守护 / 家族申请审核 / 我的道具 / 美颜相机 / 通话悬浮窗
   ========================================================================= */
.p4-tabs{display:flex;gap:22px;padding:12px 16px 10px;background:#fff;font-size:var(--fs-13);color:var(--t3);flex:none;border-bottom:1px solid var(--line-2)}
.p4-tabs>span{position:relative;padding-bottom:6px;white-space:nowrap}
.p4-tabs>span.on{color:var(--t1);font-weight:700}
.p4-tabs>span.on::after{content:"";position:absolute;left:50%;transform:translateX(-50%);bottom:0;width:20px;height:3px;border-radius:2px;background:var(--brand-grad)}
.p4-sec{padding:14px 16px 8px;font-size:var(--fs-12);color:var(--t3)}
.p4-card{margin:0 14px;background:#fff;border-radius:var(--r-card);overflow:hidden}
/* `.set-item`（设置页那一类行）与 `.p4-row`（隐私 / 房间设置 / 换绑 / 换手机等）是**同一类「设置行」的两个历史类名**，
   原来各写一套度量：图标 22 vs 20、字号 14 vs 13、内边距 11-16 vs 13-14、右箭头 12 vs 15、图标透明度 1 vs .85 ——
   同一个 App 里两种「设置行」，肉眼能看出不一样。现在统一成同一套（以设置页那套为准），类名保留、结构不动。 */
.p4-row{display:flex;align-items:center;gap:12px;padding:11px 16px;border-bottom:1px solid var(--line-2);font-size:var(--fs-14);color:var(--t1);background:#fff}
.p4-row:last-child{border-bottom:none}
.p4-row.on{background:var(--brand-soft2)}
.p4-row .lb2{flex:1;min-width:0}
.p4-row .sb{font-size:var(--fs-11);color:var(--t3);margin-top:3px;line-height:1.5}
.p4-ic{width:22px;height:22px;object-fit:contain;flex:none}
.p4-row .ar{color:var(--t4);font-size:12px;margin-left:6px}
.p4-badge{margin-left:6px;font-size:9.5px;color:var(--brand-deep);background:var(--brand-soft);border-radius:8px;padding:1px 6px;vertical-align:1px}
.p4-btns{display:flex;gap:8px;flex:none}
.p4-mini{height:26px;padding:0 12px;border-radius:13px;font-size:var(--fs-11);display:inline-flex;align-items:center;justify-content:center;flex:none}
.p4-mini.p{background:var(--brand-grad);color:#fff;box-shadow:0 3px 8px rgba(255,76,129,.28)}
.p4-mini.g{background:#F2F2F6;color:var(--t2)}
.p4-mini.o{border:1px solid #FFC9DC;color:var(--brand)}
.p4-drag{width:14px;height:20px;display:flex;flex-direction:column;justify-content:center;gap:3px;flex:none}
.p4-drag i{display:block;height:2px;border-radius:2px;background:#DCDCE2}
.p4-play{width:34px;height:34px;border-radius:50%;background:var(--brand-soft);color:var(--brand);display:flex;align-items:center;justify-content:center;flex:none}
.p4-play svg{width:17px;height:17px}
.p4-play.plus{background:#F2F2F6;color:var(--t2)}
.p4-wave{display:flex;align-items:center;gap:2px;height:20px;flex:none}
.p4-wave i{width:2px;border-radius:2px;background:linear-gradient(180deg,#FF8FB4,#FF4C81)}
.p4-photos{display:flex;gap:10px}
.p4-ph{position:relative;width:70px;height:70px;border-radius:12px;overflow:hidden;background:#F2F2F6;flex:none}
.p4-ph img{width:100%;height:100%;object-fit:cover}
.p4-ph .x{position:absolute;right:0;top:0;width:20px;height:20px;background:rgba(0,0,0,.45);color:#fff;font-size:11px;display:flex;align-items:center;justify-content:center;border-bottom-left-radius:10px}
.p4-ph.add{display:flex;flex-direction:column;align-items:center;justify-content:center;gap:4px;color:var(--t3);border:1px dashed #DCDCE2}
.p4-ph.add svg{width:20px;height:20px}
.p4-ph.add small{font-size:var(--fs-10)}
.p4-note{margin:16px 18px 0;font-size:var(--fs-11);color:var(--t4);line-height:1.8}
.p4-ipt{flex:1;text-align:right;border:none;outline:none;font-size:var(--fs-13);color:var(--t1);background:transparent;min-width:0;float:none}
.p4-ipt::placeholder{color:var(--t4)}
.p4-code{font-size:var(--fs-12);color:var(--brand-deep);flex:none;padding-left:10px;border-left:1px solid var(--line-2)}
.p4-av{width:42px;height:42px;border-radius:50%;object-fit:cover;flex:none}
/* 开关唯一来源：.sw-tgl（.set-item 行）与 .p4-sw（.p4-row 行）是同一个开关的两个历史类名。 */
.p4-sw,.set-item .sw-tgl,.st-row .sw-tgl{width:44px;height:26px;border-radius:13px;background:var(--brand-grad);position:relative;flex:none;cursor:pointer}
.p4-sw::after,.set-item .sw-tgl::after,.st-row .sw-tgl::after{content:"";position:absolute;right:2px;top:2px;width:22px;height:22px;border-radius:50%;background:#fff;box-shadow:0 1px 3px rgba(0,0,0,.25)}
.p4-sw.off,.set-item .sw-tgl.off,.st-row .sw-tgl.off{background:#E9E9EE}
.p4-sw.off::after,.set-item .sw-tgl.off::after,.st-row .sw-tgl.off::after{left:2px;right:auto}
.p4-price{display:inline-flex;align-items:center;gap:4px;margin-top:6px;font-size:var(--fs-12);color:#E0952B;font-weight:600}
.p4-price img{width:13px;height:13px;object-fit:contain}
.p4-role{font-size:var(--fs-11);color:var(--brand-deep);background:var(--brand-soft);border-radius:10px;padding:3px 9px;flex:none}
.p4-cover{position:relative;width:74px;height:74px;border-radius:12px;background-size:cover;background-position:center;flex:none;display:flex;align-items:flex-end;justify-content:center;padding-bottom:5px}
.p4-cover span{background:rgba(0,0,0,.5);color:#fff;font-size:10px;border-radius:8px;padding:2px 8px}

/* --- 表情 / 贴纸弹层（统一壳 .sheet + 描边胶囊 Tab + 关闭） --- */
.p4-emoji{padding:14px 14px calc(22px + var(--safe-bottom,0px))}
.p4-emoji-tabs{display:flex;align-items:center;gap:8px;font-size:var(--fs-13)}
.p4-emoji-send{margin-left:auto;height:28px;padding:0 16px;border-radius:15px;background:var(--brand-grad);color:#fff;font-size:var(--fs-12);display:flex;align-items:center}
.p4-emoji-sub{margin:12px 4px 8px}
.p4-emoji-grid{display:grid;grid-template-columns:repeat(8,1fr);gap:6px;margin:14px 0 6px}
.p4-emo{font-size:21px;text-align:center;line-height:38px;border-radius:10px;background:#F7F7FA}
.p4-emoji-sub{font-size:var(--fs-12);color:var(--t3);margin:12px 0 8px}
.p4-sticker-grid{display:grid;grid-template-columns:repeat(6,1fr);gap:8px}
.p4-sticker{height:52px;border-radius:10px;background:#F7F7FA;display:flex;align-items:center;justify-content:center}
.p4-sticker img{max-width:78%;max-height:78%;object-fit:contain}

/* --- 守护 --- */
.p4-guard-hero{position:relative;margin:12px 14px 0;border-radius:18px;overflow:hidden;background:linear-gradient(150deg,#3A2456,#7A3358 58%,#B4557A);color:#fff;padding:18px}
.p4-guard-hero .glow{position:absolute;right:-40px;top:-40px;width:190px;height:190px;border-radius:50%;background:radial-gradient(circle,rgba(255,199,0,.35),transparent 70%)}
.p4-guard-hero .gimg{width:62px;height:62px;object-fit:contain;position:relative}
.p4-guard-hero .gt{font-size:18px;font-weight:700;margin-top:6px;position:relative}
.p4-guard-hero .gs{font-size:11.5px;opacity:.82;margin-top:6px;line-height:1.6;position:relative}
.p4-guard-hero .grow{display:flex;margin-top:16px;position:relative}
.p4-guard-hero .grow>div{flex:1;text-align:center}
.p4-guard-hero .grow b{display:block;font-size:16px}
.p4-guard-hero .grow span{font-size:10.5px;opacity:.75}

/* --- 家族成员管理 --- */
.p4-fam-head{margin:12px 14px 0;background:#fff;border-radius:var(--r-card);padding:14px}
.p4-fam-head .hd{display:flex;justify-content:space-between;align-items:center;font-size:12.5px;font-weight:700;margin-bottom:8px}
.p4-fam-head .hd span{color:var(--brand);font-weight:500;font-size:11.5px}
.p4-fam-head .txt{font-size:12px;color:var(--t2);line-height:1.7}

/* --- 我的道具 --- */
.p4-props{display:grid;grid-template-columns:repeat(3,1fr);gap:10px;padding:14px 14px 22px}
.p4-prop{position:relative;overflow:hidden;background:#fff;border:1px solid rgba(34,29,42,.05);border-radius:14px;padding:10px 8px 11px;text-align:center;transition:transform .16s ease,box-shadow .16s ease}
.p4-prop:active{transform:scale(.98)}
.p4-prop .im{height:64px;display:flex;align-items:center;justify-content:center}
.p4-prop .im img{max-width:82%;max-height:100%;object-fit:contain;position:relative;z-index:1}
.p4-prop b{display:block;font-size:11.5px;margin-top:6px}
.p4-prop small{display:block;font-size:10px;color:var(--t3);margin-top:3px}
.p4-prop .u{display:inline-flex;margin-top:8px;height:22px;padding:0 12px;border-radius:11px;font-size:10.5px;align-items:center;background:#F2F2F6;color:var(--t2)}
.p4-prop .u.on{background:var(--brand-grad);color:#fff}
.p4-prop .u.get{background:#FFF0F5;color:#E94F7D}
.p4-prop .u.expired{background:#F4F3F5;color:#918D96}
.p4-prop.is-owned{border-color:rgba(255,94,142,.25);background:linear-gradient(155deg,#FFF9FC 0%,#fff 58%,#FFF4F8 100%);box-shadow:0 7px 18px rgba(255,76,129,.11),inset 0 1px 0 rgba(255,255,255,.9)}
.p4-prop.is-owned::before{content:"";position:absolute;inset:-20% -60%;background:radial-gradient(circle at 82% 18%,rgba(255,219,119,.45),transparent 23%),radial-gradient(circle at 18% 78%,rgba(255,126,169,.22),transparent 30%);pointer-events:none}
.p4-prop.is-owned::after{content:"";position:absolute;top:-70%;bottom:-70%;left:-85%;width:52%;background:linear-gradient(90deg,transparent,rgba(255,255,255,.82),transparent);transform:rotate(19deg);animation:p4-prop-shine 3.8s ease-in-out infinite;pointer-events:none}
.p4-prop.is-owned b,.p4-prop.is-owned small,.p4-prop.is-owned .u{position:relative;z-index:2}
.p4-prop.off{background:#F8F7F9;border-color:rgba(42,36,48,.04);box-shadow:none}
.p4-prop.off .im img{filter:grayscale(1) saturate(.15);opacity:.45}
.p4-prop.off b{color:#8C8791}
.p4-prop.off small{color:#AAA6AF}
.p4-prop-qty{position:absolute;right:6px;top:6px;z-index:3;min-width:25px;height:19px;padding:0 6px;border-radius:10px;background:linear-gradient(135deg,#FF5E8E,#FF815F);color:#fff;font-size:10px;font-weight:700;line-height:19px;box-shadow:0 3px 8px rgba(255,76,129,.28)}
@keyframes p4-prop-shine{0%,58%{transform:translateX(-30%) rotate(19deg);opacity:0}66%{opacity:1}86%,100%{transform:translateX(330%) rotate(19deg);opacity:0}}
@media (prefers-reduced-motion:reduce){.p4-prop.is-owned::after{animation:none;opacity:0}.p4-prop{transition:none}}

.p4p-shop{display:flex;align-items:center;gap:10px;margin:12px 14px 2px;padding:12px 13px;border-radius:17px;color:#fff;background:linear-gradient(115deg,#FF5E8B 0%,#FF7E69 58%,#F09A45 100%);box-shadow:0 9px 22px rgba(255,94,139,.23);cursor:pointer;position:relative;overflow:hidden}
.p4p-shop::after{content:"";position:absolute;right:-22px;top:-35px;width:100px;height:100px;border-radius:50%;background:rgba(255,255,255,.13);pointer-events:none}
.p4p-shop-ic{width:39px;height:39px;border-radius:12px;background:rgba(255,255,255,.20);display:flex;align-items:center;justify-content:center;flex:none;backdrop-filter:blur(5px)}
.p4p-shop-ic img{width:28px;height:28px;object-fit:contain;filter:drop-shadow(0 3px 5px rgba(120,25,45,.18))}
.p4p-shop-copy{display:flex;flex-direction:column;gap:3px;min-width:0;flex:1}
.p4p-shop-copy b{font-size:14px;line-height:1.15}
.p4p-shop-copy small{font-size:10.5px;opacity:.83}
.p4p-shop-bal{font-size:10.5px;padding:4px 8px;border-radius:10px;background:rgba(98,31,44,.16);white-space:nowrap}
.p4p-shop-go{font-size:11px;font-weight:700;white-space:nowrap}
.p4p-shop.is-skeleton{background:#F2EFF3;box-shadow:none;cursor:default}
.p4p-shop.is-skeleton::after{display:none}
.p4p-shop.is-skeleton .p4p-shop-ic{background:#E6E1E8}
.p4p-shop-copy i.sk{display:block;width:78px;height:12px;border-radius:6px}
.p4p-shop-copy i.sk.short{width:118px;height:9px;margin-top:7px}

.p4p-mask{position:absolute;inset:0;z-index:150;display:flex;align-items:flex-end;background:rgba(22,17,25,.44);backdrop-filter:blur(2px);animation:p4p-fade .18s ease-out}
.p4p-sheet{width:100%;max-height:79vh;overflow-y:auto;background:#fff;border-radius:22px 22px 0 0;padding:0 16px;box-shadow:0 -12px 38px rgba(35,24,40,.18);animation:p4p-up .24s cubic-bezier(.18,.78,.32,1)}
.p4p-sheet::-webkit-scrollbar{width:0}
.p4p-sheet>header{height:55px;display:flex;align-items:center;justify-content:space-between;position:sticky;top:0;z-index:3;background:rgba(255,255,255,.96);backdrop-filter:blur(10px)}
.p4p-sheet>header b{font-size:17px;color:#2A2530}
.p4p-sheet>header button{font-size:12px;color:#8D8791;background:#F5F3F6;border-radius:13px;padding:5px 10px}
.p4p-sub{font-size:11px;color:#99949D;padding:0 0 12px}
.p4p-loading,.p4p-empty{min-height:190px;display:flex;flex-direction:column;align-items:center;justify-content:center;text-align:center;color:#AAA5AE;font-size:12px;line-height:1.9;padding:24px 18px}
.p4p-sheet-bottom{height:calc(20px + env(safe-area-inset-bottom,0px))}
.p4p-usage{padding-bottom:4px}
.p4p-usage-row{display:flex;align-items:center;gap:10px;padding:11px 0;border-bottom:1px solid #F2F0F3}
.p4p-usage-ic,.p4p-mall-ic,.p4p-buy-ic{width:42px;height:42px;border-radius:13px;background:linear-gradient(145deg,#FFF4F8,#F7F3FA);display:flex;align-items:center;justify-content:center;flex:none}
.p4p-usage-ic img,.p4p-mall-ic img,.p4p-buy-ic img{width:31px;height:31px;object-fit:contain}
.p4p-usage-copy,.p4p-mall-copy{display:flex;flex-direction:column;gap:3px;min-width:0;flex:1}
.p4p-usage-copy b,.p4p-mall-copy b{font-size:13px;color:#3B3540}
.p4p-usage-copy small,.p4p-mall-copy small{font-size:10.5px;color:#98929C;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.p4p-usage-row time{font-size:10px;color:#B4AFB7;white-space:nowrap;align-self:flex-start;margin-top:3px}
.p4p-mall{padding-bottom:2px}
.p4p-mall-row{display:flex;align-items:center;gap:10px;padding:10px 0;border-bottom:1px solid #F2F0F3;cursor:pointer}
.p4p-mall-row:active{opacity:.72}
.p4p-mall-price{display:flex;align-items:center;gap:3px;color:#E65B32;font-size:12px;font-weight:700;white-space:nowrap}
.p4p-mall-price img{width:15px;height:15px;object-fit:contain}
.p4p-hero{display:flex;align-items:center;gap:16px;padding:7px 2px 18px}
.p4p-hero-art{position:relative;width:76px;height:76px;flex:none;display:flex;align-items:center;justify-content:center}
.p4p-hero-art::before{content:"";position:absolute;inset:3px;border-radius:50%;background:radial-gradient(circle at 50% 48%,#FFF0F7 0%,rgba(255,240,247,.55) 48%,rgba(255,240,247,0) 72%)}
.p4p-hero-art img{position:relative;width:64px;height:64px;object-fit:contain;filter:drop-shadow(0 8px 12px rgba(91,55,85,.16))}
.p4p-hero-copy{display:flex;flex-direction:column;gap:5px;min-width:0;flex:1}
.p4p-hero-copy small{font-size:10.5px;color:#A49DA7;line-height:1.2}
.p4p-hero-copy b{font-size:19px;line-height:1.25;color:#2C2730;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.p4p-hero-copy em{font-style:normal;font-size:12px;font-weight:600;color:#E85780;line-height:1.35}
.p4p-meta-line{display:flex;flex-wrap:wrap;gap:6px 18px;padding:0 2px 15px;border-bottom:1px solid #F3F0F4;color:#99929D;font-size:11.5px;line-height:1.5}
.p4p-meta-line b{margin-left:2px;color:#4C4651;font-weight:600}
.p4p-about{padding:15px 2px 3px}
.p4p-about>span{display:block;margin-bottom:6px;color:#A9A2AC;font-size:11px;line-height:1.3}
.p4p-about>p{margin:0;color:#5B5560;font-size:13px;line-height:1.8;white-space:pre-wrap;word-break:break-word}
.p4p-purchase{margin-top:11px}
.p4p-detail-unavailable{padding:12px 0 14px;text-align:center;color:#A7A1AA;font-size:11.5px}
.p4p-buy-error{display:flex;align-items:center;justify-content:space-between;gap:10px;margin:0 0 10px;padding:9px 11px;border-radius:11px;background:#FFF1F3;color:#D94A63;font-size:11px;line-height:1.5}
.p4p-buy-error[hidden]{display:none}
.p4p-buy-error button{border:0;background:#fff;border-radius:10px;padding:5px 9px;color:#E44662;font-size:10.5px;font-weight:600;flex:none}
.p4p-action-stack{display:flex;gap:9px;margin-top:2px}
.p4p-action-stack .p4p-buy-btn{flex:1.25;width:auto;min-width:0}
.p4p-use-btn{flex:1;height:47px;border-radius:24px;border:1.5px solid #FFAFCD;background:#FFF8FB;color:#E94F7D;font-size:14px;font-weight:700;box-shadow:0 7px 16px rgba(255,76,129,.10)}
.p4p-use-btn[disabled]{opacity:.62}
.p4p-qty{display:flex;align-items:center;justify-content:space-between;padding:13px 2px 6px;border-top:1px solid #F3F0F4}
.p4p-qty>span{font-size:13px;color:#4D4653}
.p4p-qty>div{display:flex;align-items:center;gap:15px}
.p4p-qty button{position:relative;min-width:26px;height:30px;padding:0 4px;background:none;color:#8E8892;font-size:13px;font-weight:500}
.p4p-qty button.on{color:#E84F7E;font-weight:700}
.p4p-qty button.on::after{content:"";position:absolute;left:50%;bottom:1px;width:14px;height:2px;border-radius:2px;background:#FF709E;transform:translateX(-50%)}
.p4p-total{display:flex;align-items:center;justify-content:space-between;padding:8px 2px 15px}
.p4p-total>span{font-size:13px;color:#4D4653}
.p4p-total b{display:flex;align-items:center;gap:4px;color:#E2572C;font-size:19px}
.p4p-total b img{width:19px;height:19px;object-fit:contain}
.p4p-buy-btn{width:100%;height:47px;border-radius:24px;background:linear-gradient(105deg,#FF5E5B,#FF4C81 58%,#DC53D7);color:#fff;font-size:15px;font-weight:700;box-shadow:0 10px 22px rgba(255,76,129,.28)}
.p4p-buy-btn[disabled]{opacity:.65;box-shadow:none}
.p4p-safe{text-align:center;font-size:10.5px;color:#AAA5AE;line-height:1.6;padding-top:11px}
@keyframes p4p-fade{from{opacity:0}to{opacity:1}}
@keyframes p4p-up{from{transform:translateY(22px);opacity:.6}to{transform:translateY(0);opacity:1}}

/* --- 暗色房间页（连麦 PK / 语音房 PK） --- */
.p4-dark{position:absolute;inset:0;overflow:hidden;background:#140E24;color:#fff}
.p4-dark .room-title{position:absolute;top:64px;left:16px;right:16px;z-index:6;color:#fff;display:flex;align-items:center;gap:10px;
  padding:6px 10px;border-radius:14px;background:linear-gradient(90deg,rgba(0,0,0,.42),rgba(0,0,0,.04))}
.p4-dark .room-title b{font-size:var(--fs-16)}
.p4-split{position:absolute;left:0;right:0;top:0;height:398px;display:flex}
.p4-split .side{flex:1;position:relative;overflow:hidden;background:#000}
.p4-split .side img{width:100%;height:100%;object-fit:cover;opacity:.92}
.p4-split .side:first-child{border-right:1px solid rgba(255,255,255,.2)}
.p4-split .nm{position:absolute;left:8px;bottom:10px;font-size:12px;color:#fff;background:rgba(0,0,0,.42);border-radius:12px;padding:3px 10px;display:flex;align-items:center;gap:6px}
.p4-split .nm small{opacity:.75;font-size:10px}
.p4-split .vs{position:absolute;left:50%;top:168px;transform:translateX(-50%);width:68px;height:68px;border-radius:50%;background:rgba(20,14,36,.88);border:2px solid rgba(255,199,0,.6);display:flex;flex-direction:column;align-items:center;justify-content:center;gap:1px;z-index:4;box-shadow:0 6px 18px rgba(0,0,0,.5)}
.p4-split .vs img{width:24px;height:24px;object-fit:contain}
.p4-split .vs b{font-size:9px;color:var(--gold);letter-spacing:1px}
.p4-split .vs small{font-size:10.5px;font-weight:600}
.p4-pkbar{position:absolute;left:14px;right:14px;top:412px;height:22px;border-radius:11px;overflow:hidden;display:flex;z-index:5;box-shadow:0 4px 14px rgba(0,0,0,.4)}
.p4-pkbar .l{background:linear-gradient(90deg,#FF4C81,#FF8E61);display:flex;align-items:center;padding:0 10px;font-size:11px;font-weight:600;color:#fff;justify-content:flex-start;overflow:hidden;white-space:nowrap}
.p4-pkbar .r{background:linear-gradient(90deg,#4C7DFF,#61B0FF);display:flex;align-items:center;padding:0 10px;font-size:11px;font-weight:600;color:#fff;justify-content:flex-end;overflow:hidden;white-space:nowrap}
.p4-seatbar{position:absolute;left:14px;right:14px;top:452px;display:flex;gap:10px;z-index:5}
.p4-seat{flex:1;text-align:center;color:#fff;font-size:10px;position:relative;min-width:0}
.p4-seat img{width:100%;aspect-ratio:1/1;border-radius:14px;object-fit:cover;border:1.5px solid rgba(255,255,255,.25)}
.p4-seat.on img{border-color:var(--gold)}
.p4-seat>span{display:block;margin-top:5px;opacity:.85;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.p4-seat .p4-seat-empty{display:flex;align-items:center;justify-content:center;width:100%;aspect-ratio:1/1;border-radius:14px;border:1px dashed rgba(255,255,255,.32);color:rgba(255,255,255,.6);margin-top:0}
.p4-seat i{position:absolute;right:-3px;bottom:16px;width:20px;height:20px;border-radius:50%;background:rgba(255,255,255,.92);color:#333;display:flex;align-items:center;justify-content:center;font-style:normal}
.p4-seat i svg{width:12px;height:12px}
.p4-seat i.mic{background:#12A150;color:#fff}
.p4-live-bottom{position:absolute;left:14px;right:14px;bottom:26px;z-index:7;display:flex;flex-direction:column;gap:8px}
.p4-danmu{display:flex;flex-direction:column;gap:6px;font-size:11.5px;color:#fff;align-items:flex-start}
.p4-danmu span{background:rgba(0,0,0,.34);border-radius:12px;padding:5px 11px;max-width:100%;backdrop-filter:blur(6px);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.p4-bar{display:flex;align-items:center;gap:10px}
.p4-bar .say{flex:1;height:38px;border-radius:19px;background:rgba(255,255,255,.16);display:flex;align-items:center;padding:0 16px;color:rgba(255,255,255,.8);font-size:var(--fs-12)}
.p4-bar .rt{width:38px;height:38px;border-radius:50%;background:rgba(255,255,255,.16);display:flex;align-items:center;justify-content:center;color:#fff;flex:none}
.p4-bar .rt svg{width:20px;height:20px}
.p4-bar .rt img{width:22px;height:22px;object-fit:contain}
.p4-bar .rt.red{width:auto;border-radius:19px;padding:0 14px;background:linear-gradient(135deg,#FF3B30,#FF6A5E);font-size:var(--fs-12);font-weight:600}
.p4-room-bg{position:absolute;inset:0;background-size:cover;background-position:center;opacity:.8}
.p4-room-mask{position:absolute;inset:0;background:linear-gradient(180deg,rgba(12,8,22,.55),rgba(12,8,22,.9))}
.p4-teams{position:absolute;left:14px;right:14px;top:128px;display:flex;gap:12px;z-index:5}
.p4-team{flex:1;background:rgba(255,255,255,.08);border-radius:16px;padding:12px;backdrop-filter:blur(8px);border:1px solid rgba(255,255,255,.12);min-width:0}
.p4-team.red{border-color:rgba(255,76,129,.5)}
.p4-team.blue{border-color:rgba(76,125,255,.5)}
.p4-team .hd{display:flex;align-items:center;justify-content:space-between;font-size:12px;color:#fff;margin-bottom:10px;gap:6px}
.p4-team .hd .val{font-weight:700;color:var(--gold)}
.p4-team-seats{display:grid;grid-template-columns:repeat(2,1fr);gap:8px}
.p4-tseat{text-align:center;color:#fff;font-size:9.5px;position:relative;min-width:0}
.p4-tseat img{width:100%;aspect-ratio:1/1;border-radius:12px;object-fit:cover}
.p4-tseat span{display:block;margin-top:4px;opacity:.85;overflow:hidden;white-space:nowrap;text-overflow:ellipsis}
.p4-tseat i.mic{position:absolute;left:50%;transform:translateX(-50%);bottom:15px;width:18px;height:18px;border-radius:50%;background:#12A150;display:flex;align-items:center;justify-content:center}
.p4-tseat i.mic svg{width:11px;height:11px;color:#fff}
.p4-contrib{position:absolute;left:14px;right:14px;background:rgba(255,255,255,.08);border-radius:16px;padding:12px 14px;color:#fff;z-index:5;backdrop-filter:blur(8px)}
.p4-contrib .ch{display:flex;align-items:center;justify-content:space-between;font-size:12px;font-weight:600;margin-bottom:8px}
.p4-contrib .cr{display:flex;align-items:center;gap:9px;padding:4px 0;font-size:12px}
.p4-contrib .cr img.av{width:26px;height:26px;border-radius:50%;object-fit:cover}
.p4-contrib .cr .rk{width:16px;height:16px;border-radius:50%;background:rgba(255,255,255,.22);display:flex;align-items:center;justify-content:center;font-size:10px;font-weight:700}
.p4-contrib .cr .rk.rk1{background:linear-gradient(135deg,#FFD98A,#E0A43C);color:#4A2E00}
.p4-contrib .cr .rk.rk2{background:linear-gradient(135deg,#E8EEF7,#B9C6D8);color:#37414F}
.p4-contrib .cr .rk.rk3{background:linear-gradient(135deg,#F0C9A8,#C99B72);color:#4A2E00}
.p4-contrib .cr .val{margin-left:auto;display:flex;align-items:center;gap:4px;color:var(--gold)}
.p4-contrib .cr .val img{width:12px;height:12px;object-fit:contain}

/* --- 语音房 PK（195）：卡片流式排布、可滚动；底部公屏 / 输入条固定不动 ---
   原来四张卡（队卡 / 比分条 / 贡献榜 / 本轮 PK）是绝对定位写死 top 的，
   真实数据一多（贡献榜 6 行、发起 / 接受 / 结束三套按钮）就压到底部公屏上。 */
.p4-dark .pk-body{position:absolute;left:14px;right:14px;top:118px;bottom:150px;display:flex;
  flex-direction:column;gap:12px;overflow-y:auto;overflow-x:hidden;z-index:5;
  -webkit-overflow-scrolling:touch;scrollbar-width:none}
.p4-dark .pk-body::-webkit-scrollbar{display:none;width:0;height:0}
.p4-dark .pk-body>*{flex:none}   /* 不能让 flex 把比分条压扁（压过就是 4px 的一条） */
.p4-dark .pk-body>.p4-contrib{padding:12px 14px}
/* 0 分那一侧的色块宽度会是 0%，字就没了；留一个最小宽度，标签始终看得见 */
.p4-pkbar .l,.p4-pkbar .r{min-width:64px}
/* 195：本轮 PK 卡里的按钮 / 输入框。原来 .btns .b 只写在 `.voice .auction` 下，
   这里直接借用会「按钮没样式、看起来就是一行白字」，所以补一份。 */
.p4-dark .pk-body .btns{display:flex;gap:10px}
.p4-dark .pk-body .btns .b{flex:1;height:34px;border-radius:17px;display:flex;align-items:center;
  justify-content:center;font-size:12.5px;font-weight:600}
.p4-dark .pk-body .btns .b1{background:var(--brand-grad);color:#fff}
.p4-dark .pk-body .btns .b2{background:rgba(255,255,255,.18);color:#fff}
.p4-dark .pk-body .p4-ipt{width:100%;box-sizing:border-box;text-align:left;height:34px;border-radius:17px;
  padding:0 14px;background:rgba(255,255,255,.12);color:#fff;font-size:12.5px;border:none;outline:none;min-width:0}
.p4-dark .pk-body .p4-ipt::placeholder{color:rgba(255,255,255,.55)}

/* --- 美颜相机 --- */
.p4-cam{position:absolute;inset:0;background-size:cover;background-position:center}
.p4-cam-mask{position:absolute;inset:0;background:linear-gradient(180deg,rgba(10,8,20,.62),rgba(10,8,20,.18) 42%,rgba(10,8,20,.92))}
.p4-cam-top{position:absolute;top:56px;left:14px;right:14px;display:flex;align-items:center;gap:10px;z-index:6;color:#fff}
.p4-cam-top .cb{width:34px;height:34px;border-radius:50%;background:rgba(0,0,0,.4);display:flex;align-items:center;justify-content:center;flex:none}
.p4-cam-top .cb svg{width:18px;height:18px}
.p4-cam-top .cb img{width:18px;height:18px;object-fit:contain}
.p4-cam-tabs{flex:1;display:flex;justify-content:center;gap:18px;font-size:12.5px;color:rgba(255,255,255,.7)}
.p4-cam-tabs .on{color:#fff;font-weight:700}
.p4-face-box{position:absolute;left:50%;top:118px;transform:translateX(-50%);width:206px;height:268px;border-radius:104px/136px;border:1.5px dashed rgba(255,255,255,.55);display:flex;align-items:flex-end;justify-content:center;padding-bottom:16px;font-size:11px;color:rgba(255,255,255,.82);z-index:5}
.p4-cam-panel{position:absolute;left:0;right:0;bottom:0;background:linear-gradient(180deg,rgba(16,12,26,0),rgba(16,12,26,.94) 16%);padding:16px 16px 26px;z-index:6;color:#fff}
.p4-cam-modes{display:flex;gap:18px;justify-content:center;font-size:13px;color:rgba(255,255,255,.7)}
.p4-cam-modes .on{color:#fff;font-weight:700;position:relative}
.p4-cam-modes .on::after{content:"";position:absolute;left:50%;transform:translateX(-50%);bottom:-7px;width:18px;height:3px;border-radius:2px;background:var(--brand-grad)}
.p4-sliders{margin-top:16px;display:flex;flex-direction:column;gap:10px}
.p4-sliders .sl{display:flex;align-items:center;gap:10px;font-size:11.5px;color:rgba(255,255,255,.85)}
.p4-sliders .sl>span{width:38px;flex:none}
.p4-sliders .sl em{width:26px;text-align:right;font-style:normal;font-size:11px}
.p4-sliders .track{flex:1;height:4px;border-radius:2px;background:rgba(255,255,255,.25);position:relative}
.p4-sliders .track i{position:absolute;left:0;top:0;bottom:0;border-radius:2px;background:linear-gradient(90deg,#FFD98A,#FF4C81)}
.p4-sliders .track b{position:absolute;top:50%;width:14px;height:14px;border-radius:50%;background:#fff;transform:translate(-50%,-50%);box-shadow:0 1px 4px rgba(0,0,0,.4)}
.p4-cam-thumbs{display:flex;gap:10px;margin-top:16px;overflow:hidden}
.p4-cam-thumbs .th{width:52px;height:52px;border-radius:12px;background:rgba(255,255,255,.12);display:flex;align-items:center;justify-content:center;flex:none}
.p4-cam-thumbs .th img{max-width:78%;max-height:78%;object-fit:contain}
.p4-cam-thumbs .th.on{border:1.5px solid var(--gold)}
.p4-cam-foot{display:flex;align-items:center;justify-content:space-between;margin-top:18px}
.p4-cam-foot .side{width:58px;text-align:center;font-size:12px;color:rgba(255,255,255,.85)}
.p4-cam-foot .shutter{width:70px;height:70px;border-radius:50%;border:3px solid rgba(255,255,255,.85);display:flex;align-items:center;justify-content:center}
.p4-cam-foot .shutter i{width:56px;height:56px;border-radius:50%;background:#FF3B30;display:block}

/* --- 通话悬浮窗 --- */
.p4-float-bg{position:absolute;inset:0;background-size:cover;background-position:center;opacity:.18}
.p4-float-mask{position:absolute;inset:0;background:linear-gradient(180deg,rgba(255,255,255,.94),rgba(255,255,255,.88))}
.p4-float-page{position:absolute;inset:0}
.p4-float-head{display:flex;align-items:center;padding:14px 16px 10px;font-size:var(--fs-17);font-weight:700}
.p4-conv{display:flex;align-items:center;gap:12px;padding:12px 16px;background:rgba(255,255,255,.92);border-bottom:1px solid var(--line-2)}
.p4-conv img{width:46px;height:46px;border-radius:50%;object-fit:cover;flex:none}
.p4-conv>div{flex:1;min-width:0}
.p4-conv b{font-size:var(--fs-14);display:block}
.p4-conv small{font-size:var(--fs-12);color:var(--t3);display:block;margin-top:4px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.p4-conv .tm{margin-left:auto;font-size:10.5px;color:var(--t4);flex:none}
.p4-float{position:absolute;right:14px;bottom:100px;width:178px;height:104px;border-radius:16px;overflow:hidden;background:#000;box-shadow:0 14px 30px rgba(0,0,0,.45);z-index:20}
.p4-float .fv{position:absolute;inset:0;width:100%;height:100%;object-fit:cover;opacity:.9}
.p4-float .fi{position:absolute;left:10px;bottom:9px;color:#fff;text-shadow:0 1px 4px rgba(0,0,0,.6);z-index:2}
.p4-float .fi b{font-size:12.5px}
.p4-float .fi small{display:block;font-size:10px;opacity:.9;margin-top:2px}
/* 底色按里面的图标来定：l-expand 是**纯白**字形（均值 #ffffff），压在白圆上等于看不见，
   所以这枚按钮改深色半透明底（挂断那枚用 l-hangup 自带红圆，见下面的 .fb.hang）。 */
.p4-float .fb{position:absolute;right:8px;width:30px;height:30px;border-radius:50%;background:rgba(17,17,26,.55);display:flex;align-items:center;justify-content:center;z-index:3}
.p4-float .fb img{width:15px;height:15px;object-fit:contain}
.p4-float .fb[data-open]{top:8px}
/* l-hangup 素材本身就是「红圆 + 白话筒」，直接铺满 30px 当按钮：
   原来画的白圆底 + invert 会把红圆一起染成白圆，挂断按钮变成一个看不出是什么的白点。 */
.p4-float .fb.hang{bottom:8px;background:none}
.p4-float .fb.hang img{width:30px;height:30px}
.p4-float .drag{position:absolute;left:50%;bottom:6px;transform:translateX(-50%);width:34px;height:4px;border-radius:2px;background:rgba(255,255,255,.75)}
.p4-float-tip{position:absolute;left:16px;right:16px;bottom:34px;text-align:center;font-size:var(--fs-11);color:var(--t3);z-index:5}

/* =========================================================================
   原版 APP 模式：三款 App 的真实布局 1:1 渲染，按 App 分组可逐屏导航
   ========================================================================= */
.realmode{display:flex;gap:24px;justify-content:center;align-items:flex-start;padding:26px 20px 60px;max-width:1240px;margin:0 auto}
.rm-col{width:296px;flex:none;color:#c9c9d4}
.rm-col h3{font-size:12px;letter-spacing:2px;color:#6f6f7d;font-weight:500;margin:0 0 10px}
.rm-col h3:not(:first-child){margin-top:16px}
.rm-apps{display:flex;gap:8px}
.rm-apps button{flex:1;min-width:0;background:#15151d;border:1px solid #232330;border-radius:12px;color:#b9b9c6;
  font-family:inherit;font-size:12px;line-height:1.45;padding:9px 4px;cursor:pointer;transition:.15s}
.rm-apps button b{display:block;font-size:12.5px;color:#e8e8f0;font-weight:600;white-space:nowrap}
.rm-apps button span{display:block;font-size:10px;color:#5f5f6d;margin-top:2px}
.rm-apps button:hover{border-color:#3a3a4a}
.rm-apps button.on{background:#2a1a24;border-color:#5a2c3e}
.rm-apps button.on b{color:#FF9EC0}
.rm-apps button.on span{color:#a4697f}
.rm-stage{position:relative;flex:none}
.rm-phone{box-shadow:0 0 0 2px #2a2a35, 0 30px 70px rgba(0,0,0,.65)}
.rm-frame{width:375px;height:812px;border:0;display:block;background:#111}
.rm-bar{display:flex;align-items:center;gap:10px;margin-top:14px;font-size:12px}
.rm-bar button{background:#15151d;border:1px solid #232330;border-radius:10px;color:#c9c9d4;
  font-family:inherit;font-size:12px;padding:8px 13px;cursor:pointer;transition:.15s;white-space:nowrap}
.rm-bar button:hover{border-color:#5a2c3e;color:#FF9EC0}
.rm-bar .t{flex:1;text-align:center;color:#e8e8f0;font-size:12.5px;
  overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.rm-bar .t .thin-tag{margin-left:5px}
.rm-bar .t small{display:block;font-size:10.5px;color:#5f5f6d;margin-top:2px}
.rm-bar a{color:#9ad1ff;text-decoration:none;font-size:11.5px;white-space:nowrap}
.rm-bar a:hover{text-decoration:underline}
.rm-info{background:#15151d;border:1px solid #232330;border-radius:12px;padding:12px 14px;
  font-size:11.5px;line-height:2;color:#8b8b99;word-break:break-word}
.rm-info b{color:#e8e8f0;font-weight:600}
.rm-info code{color:#FF9EC0;font-size:11px}
.rm-info .k{display:inline-block;width:44px;color:#5f5f6d}
.rm-info .sep{height:1px;background:#232330;margin:9px 0}
.rm-hints{display:flex;flex-direction:column;gap:7px}
.rm-hints div{display:flex;align-items:center;gap:9px;background:#15151d;border:1px solid #232330;
  border-radius:10px;padding:8px 11px;font-size:11.5px;color:#8b8b99;cursor:pointer}
.rm-hints div:hover{border-color:#3a3a4a;color:#c9c9d4}
.rm-hints div.on{border-color:#5a2c3e;color:#FF9EC0}
.rm-hints kbd{background:#232330;border-radius:5px;padding:1px 6px;font-family:inherit;font-size:10.5px;color:#c9c9d4}
.real-item.hit .real-phone{box-shadow:0 0 0 2px var(--brand), 0 14px 34px rgba(255,76,129,.35)}
.real-open{display:inline-block;margin-top:7px;font-size:10.5px;color:#9ad1ff;text-decoration:none}
.real-open:hover{text-decoration:underline}
.thin-tag{font-style:normal;font-size:9.5px;font-weight:500;color:#cdb17a;background:#33290f;
  border:1px solid #4a3b16;border-radius:5px;padding:0 5px;margin-left:6px;vertical-align:1px;cursor:help}

/* =========================================================================
   窄屏 / 小窗口适配（笔记本 1024~1280、平板、手机浏览器）
   ========================================================================= */
@media (max-width:1300px){
  .appmode,.realmode{flex-wrap:wrap;justify-content:center;gap:18px;padding:18px 14px 50px}
  .app-col,.rm-col{width:min(300px,28vw)}
  .app-nav,.rm-nav{max-height:440px}
}
@media (max-width:980px){
  .topbar{flex-wrap:wrap;gap:10px;padding:12px 14px}
  .topbar p{display:none}
  .top-actions{flex-wrap:wrap;gap:6px}
  .tabbtn{padding:7px 12px;font-size:12.5px}
  .appmode,.realmode{padding:14px 10px 40px;gap:14px}
  .app-col,.rm-col{width:100%;max-width:420px}
  .app-nav,.rm-nav{max-height:250px}
  .app-phone,.rm-stage{order:-1}
  .rm-bar{flex-wrap:wrap;justify-content:center}
  .demo-wrap{flex-wrap:wrap;gap:16px;justify-content:center}
  .demo-list{width:100%;max-width:440px;max-height:220px}
  .spec-wrap{padding:0 12px}
  .spec-table{display:block;overflow-x:auto}
}
@media (max-width:470px){
  .app-phone,.rm-stage,.demo-stage{zoom:.92}
  .board-grid{gap:22px 14px}
}

/* ---------------------------------------------------------------------------
   P2 视觉批（U6）：动态发布浮钮 / 家族红包卡 / 贡献榜金银铜 / 话题选中色 /
   来电头像呼吸 / 礼物飘屏粒子 / 通话按钮白描边 / 弹层统一滑入。
   注：本节的规则都放在文件末尾，靠「同权重后者胜」覆盖前面那版，
       不改前面任何一条已有规则（U1~U5 的类名与选择器契约一个都不动）。
   --------------------------------------------------------------------------- */

/* ---------------------------------------------------------------------------
   动态广场顶部（U18）：真机是「同城 / 推荐 / 关注」三 Tab（选中粉字 + 短粉下划线）
   + 右侧一个铃铛，下面是「热门话题」标题 + 「话题广场 ›」+ 2×2 话题卡。
   量自真机录像帧 f_141 / f_142（360×800）：下划线宽 20px、话题卡无底色（平铺在白底上）、
   「#」是描边圆角方块 + 名字 + 「N人已参与」+ 一个粉色小装饰块。
   --------------------------------------------------------------------------- */
.feed-appbar{padding:8px 15px 0 16.6px}
.feed-tabs{display:flex;align-items:center;gap:18.6px}
.feed-tab{font-size:14.5px;line-height:25px;color:#635660;cursor:pointer}
.feed-tab.on{font-size:18.5px;color:#2A1E26;font-weight:700}
.feed-bell{margin-left:auto;display:inline-flex;align-items:center;color:#26242A;cursor:pointer}
.feed-bell .ico{width:24px;height:24px}

.hot-head{padding:16.7px 21px 0 19px;flex:none;display:flex;align-items:center;gap:8px;cursor:pointer}
.hot-head .hot-chev{display:inline-flex;align-items:center;margin-left:3px;vertical-align:-2px}
.hot-head .hot-chev .ico{width:14px;height:14px;color:#A8A2AA;transition:transform .22s ease;transform:rotate(-90deg)}
.hot-collapsed .hot-head .hot-chev .ico{transform:rotate(90deg)}
.hot-head .hot-title{font-size:16px;line-height:24px;font-weight:700;color:#352F34}
.hot-head .hot-more{margin-left:auto;display:inline-flex;align-items:center;gap:1px;
  font-size:11.5px;color:#6F6868;cursor:pointer}
.hot-head .hot-more .ico{width:13px;height:13px;color:var(--t4)}

.hot-topics{flex:none;padding:11px 15px 0;display:grid;grid-template-columns:1fr 1fr;gap:2px 20px;
  max-height:220px;overflow:hidden;opacity:1;
  transition:max-height .26s cubic-bezier(.2,.7,.3,1),opacity .18s ease,padding-top .26s ease}
.hot-collapsed .hot-topics{max-height:0;opacity:0;padding-top:0}
.hot-card{cursor:pointer;min-width:0;padding-bottom:7px}
.hot-card .hc-top{display:flex;align-items:center;gap:6px;min-width:0;height:22px}
.hot-card .hc-tag{width:18px;height:16px;flex:none;border-radius:4px;display:flex;
  align-items:center;justify-content:center;font-size:10.5px;font-weight:700;color:#585256;
  box-shadow:inset 0 0 0 1.2px #585256}
.hot-card .hc-name{flex:1;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;
  font-size:13px;font-weight:600;color:#3B363A}
.hot-card .hc-sub{margin:3px 0 0 26.5px;display:flex;align-items:center;gap:6px;height:16px;
  font-size:11px;color:var(--t3)}
/* 参与人数右边那个粉色小物件：真机是一块品红圆角块 + 里面一块更亮的方块（f_142 放大图） */
.hot-card .hc-deco{position:relative;flex:none;width:15.8px;height:8.8px;border-radius:3px;
  background:linear-gradient(135deg,#FF4C81,#B70B4C)}
.hot-card .hc-deco::after{content:"";position:absolute;right:1.6px;top:2.2px;width:6px;height:4.4px;
  border-radius:1.6px;background:rgba(255,255,255,.78)}

/* ---------------------------------------------------------------------------
   动态广场的单列动态流（真机 f_0425 逐像素量出来的，画布 360×800，1 CSS px = 1.2 帧 px）：
   头像 45 圆角方（左上 x9.2/y200）＋ 昵称/「女｜N岁｜城市」（文字列 x65.8）＋ 右侧 HI 搭讪；
   正文在文字列上；图 164 宽、左边缘也在文字列上（图右留白，不是居中）；
   最下面一行只有赞/评论两个数，右边缘 339.2。
   「浏览次数」那一格**没有画**：FeedView 只有 like/comment/shareCount，没有浏览量字段。
   --------------------------------------------------------------------------- */
.feedlist{padding:17.3px 0 14px}
.dc{padding:0 0 0 9.2px;margin-bottom:35.8px}
.dc-head{display:flex;align-items:center;gap:11.6px;height:45px;padding-right:20.8px}
.dc-av{flex:none;width:45px;height:45px;border-radius:10px;overflow:hidden;background:var(--line-3)}
.dc-av img{width:100%;height:100%;object-fit:cover;display:block}
.dc-hx{flex:1;min-width:0}
.dc-nm{font-size:15px;line-height:18px;font-weight:700;color:#26242A;overflow:hidden;
  text-overflow:ellipsis;white-space:nowrap}
.dc-meta{margin-top:3px;font-size:12px;line-height:15px;color:#B9B8BE;display:flex;align-items:center;gap:4px}
.dc-meta i{font-style:normal;color:#D6D5DA}
.dc-hi{flex:none;display:flex;align-items:center;gap:5px;cursor:pointer}
.dc-hi-b{width:25px;height:27px;box-sizing:border-box;border:1px solid #F5C2D5;border-radius:9px;
  color:#EE7FA4;font-size:12.5px;font-weight:700;font-style:italic;
  display:flex;align-items:center;justify-content:center}
.dc-hi-t{font-size:14px;color:#E28B9E}
.dc-hi.is-chat{gap:0;padding:4px 13px;border-radius:14px;background:#FFF0F5}
.dc-hi.is-chat .dc-hi-t{font-size:13px;font-weight:600;color:#EE5D89}
.feed-more{display:flex;align-items:center;justify-content:center;gap:7px;padding:6px 0 22px;
  font-size:12px;color:#B3B1B8}
.feed-more-dot{width:13px;height:13px;box-sizing:border-box;border:2px solid #F3B7C9;
  border-top-color:#EE5D89;border-radius:50%;animation:feed-more-spin .7s linear infinite}
@keyframes feed-more-spin{to{transform:rotate(360deg)}}
.dc-b{margin:6px 0 0 57.5px;font-size:15px;line-height:20px;color:#26242A}
.dc-img{display:block;margin:11px 0 0 57.5px;width:164px;border-radius:4px;background:var(--line-3)}
/* 素材文件已经不在了（库里 media 行还在）：给一句实话，别留一个灰块 / 破图。
   尺寸取真机那条视频条的宽高比附近的量级，保证卡片高度不塌。 */
.dc-img-miss{display:flex;align-items:center;justify-content:center;height:96px;
  font-size:12.5px;color:#9A9AA4;background:#F2F2F5;border:1px dashed #DCDCE2}
.dc-f{display:flex;justify-content:flex-end;align-items:center;gap:30px;padding:8px 20.8px 0 0}
.dc-n{display:inline-flex;align-items:center;gap:5px;font-size:15px;color:#3A3A40;cursor:pointer}
.dc-n .ico{width:17px;height:17px;color:#3A3A40}
.dc-n .ico.brandc{color:var(--brand)}

/* 动态广场右下角浮动发布按钮：真机是**纯黄底 + 黑色加号**（不是我们的品牌粉渐变）。
   色值量自 f_142：色相 53.7°、饱和 .92 → #FFE600；f_0425 复量为直径 69（帧 83px）、右边距 16.7；真机里圆钮底边在底栏上方 36.7 —— 这里就按
   「底栏上方 36.7」定位（我们这台机器没有手势条，底栏只有 58 高，按屏幕底算会整块偏下）。 */
.fab-pub{position:absolute;right:16.7px;bottom:calc(120px + var(--safe-bottom,0px));width:62px;height:62px;
  border-radius:50%;background:var(--fab-yellow);color:#111;display:flex;align-items:center;justify-content:center;
  z-index:30;cursor:pointer;box-shadow:0 8px 20px rgba(0,0,0,.16)}
.fab-pub .ico{width:30px;height:30px}
.fab-pub .ico svg{stroke-width:2.6}

/* 家族招募红包：金 / 红渐变红包卡（原来是浅粉，跟「红包」这个物件不像） */
.fam-redpack{background:linear-gradient(135deg,#FF5A45,#D81E2E 62%,#AE131E);
  box-shadow:0 8px 20px rgba(216,30,46,.26),inset 0 0 0 1.5px rgba(255,214,120,.72)}
.fam-redpack b{color:#FFF3C4}
.fam-redpack small{color:rgba(255,243,196,.86)}
.fam-redpack .btn{background:linear-gradient(135deg,#FFE08A,#FFB43D);color:#8A3B00;font-weight:700;
  box-shadow:0 4px 12px rgba(0,0,0,.18)}

/* 直播贡献榜：金银铜三档（名次角标 + 头像圈色），第 4 名往后保持原来的金圈 */
.live .ranks .rk{position:relative}
.live .ranks .rk .rkno{position:absolute;left:-3px;top:-3px;width:17px;height:17px;border-radius:50%;
  display:flex;align-items:center;justify-content:center;font-size:10px;font-weight:700;color:#5A3A00;
  background:linear-gradient(135deg,#FFE9A8,#FFC02E);box-shadow:0 2px 6px rgba(0,0,0,.45);z-index:2}
.live .ranks .rk .rkamt{font-size:9px;color:#FFE7A8;margin-top:3px}
.live .ranks .rk.rk1 img{border-color:#FFD24A;box-shadow:0 0 0 2px rgba(255,210,74,.42),0 4px 12px rgba(0,0,0,.45)}
.live .ranks .rk.rk2 img{border-color:#DDE3EC;box-shadow:0 0 0 2px rgba(221,227,236,.38),0 4px 12px rgba(0,0,0,.45)}
.live .ranks .rk.rk3 img{border-color:#E2A36B;box-shadow:0 0 0 2px rgba(226,163,107,.38),0 4px 12px rgba(0,0,0,.45)}
.live .ranks .rk.rk2 .rkno{background:linear-gradient(135deg,#F2F5F9,#C9D2DE)}
.live .ranks .rk.rk3 .rkno{background:linear-gradient(135deg,#F0C79A,#DB9A57)}

/* 来电页：头像呼吸（缩放 + 扩散光环），只是动效，不改任何数据 */
.inc-av{animation:inc-breathe 2.6s ease-in-out infinite}
@keyframes inc-breathe{
  0%,100%{transform:scale(1);box-shadow:0 0 0 0 rgba(255,255,255,.34)}
  50%{transform:scale(1.05);box-shadow:0 0 0 14px rgba(255,255,255,0)}
}

/* 通话页「你送出礼物」浮条：加一圈 CSS 粒子扩散（纯 CSS，不引第三方） */
.call .giftfly::after{content:"";position:absolute;left:44px;top:50%;width:26px;height:26px;border-radius:50%;
  border:2px solid rgba(255,227,150,.85);pointer-events:none;animation:gift-puff 1.6s ease-out infinite}
@keyframes gift-puff{
  0%{transform:translate(-50%,-50%) scale(.5);opacity:.9}
  100%{transform:translate(-50%,-50%) scale(2.1);opacity:0}
}

/* 通话按钮排：白描边圆钮（原来只有半透明底，在亮画面上会糊掉） */
.call-ctrls .cc .cir{box-shadow:inset 0 0 0 1px rgba(255,255,255,.5)}

/* 弹层统一：底部滑入，与预览浮层 .pv-card 共用同一条 pv-up 曲线 */
.panel{animation:pv-up .22s cubic-bezier(.2,.9,.25,1)}
/* --- U23：动态详情的评论输入框 / 分享面板（feedd · momentd） ---
   原来详情页底部那条是「一个 div 写着说点什么…」——长得像输入框但打不了字。
   换成真 <input>（.ipt 的样式沿用原设计），分享 / 删除用 .fd-menu 这层壳，
   里面复用 U7 定下的 .modal-mask + .sheet（白底圆角顶 + 底部滑入）。 */
input.ipt{flex:1;min-width:0;border:0;outline:none;font-family:inherit;color:var(--t1)}
.fd-menu{position:absolute;inset:0;z-index:70}

/* ---------- TA 主页子 Tab（真机 f_0008 / f_0070）----------
   .tabstrip 是聊天页等处共用的类：带 gap:20px 和「选中项底部一条粉色下划线」。
   这一页真机是三等分、没有下划线、选中那个在右上角点一个粉色圆点，所以在这里覆盖掉公共样式。 */
.tabstrip.uh-tabs{display:flex;gap:0;padding:27px 0 0;font-size:15px;color:#55555F;border-bottom:1px solid #EFEDF1}
.tabstrip.uh-tabs>span{flex:1;display:flex;justify-content:center;align-items:flex-start;position:relative;padding:0 0 12px;cursor:pointer}
.tabstrip.uh-tabs>.on{color:#16161A;font-weight:700}
.tabstrip.uh-tabs>.on::after{content:"";position:static;transform:none;left:auto;bottom:auto;flex:none;
  width:11px;height:11px;border-radius:50%;margin:-1px 0 0 -3px;
  background:radial-gradient(circle at 40% 35%,#FFC2DC,#FF7FB6)}

/* 关注：真机是粉/橙渐变的心（f_0008 / f_0070 底栏），这里至少把心染成那个粉 */
.uh-follow .ico{color:#FF6E9C}
.uh-follow.on .ico{color:var(--brand)}

/* ---------- 动态卡片（真机 f_0008）----------
   左侧一个粉色时间点（x≈12.5）、正文整体缩进到 33px、日期胶囊往回缩 6px 让胶囊里的字和正文对齐；
   只有 TA 主页的动态页签这样排，不动其它页复用的 .uf 基础样式。 */
.uh-pane .uf{position:relative;padding-left:17px}
.uh-pane .uf::before{content:"";position:absolute;left:-4px;top:17px;width:8px;height:8px;border-radius:50%;background:#FF8FBE}
.uh-pane .uf-h .uf-d{margin-left:-6px}
.uh-pane .uf-img,.uh-pane .uf-vwrap{width:264px;max-width:100%}
.uf-vwrap{position:relative;margin-top:8px}
.uf-vwrap .uf-img{width:100%;margin-top:0;display:block}
.uf-play{position:absolute;left:50%;top:50%;transform:translate(-50%,-50%);color:#fff;opacity:.92;pointer-events:none}
.uf-play .ico{width:34px;height:34px;filter:drop-shadow(0 1px 4px rgba(0,0,0,.45))}

/* ============ 203 家族广场（真机录像 a28fb78a f_0130 逐项量） ============
   换算：帧 px ÷1.6 = CSS x；y =（帧 px − 70.4）÷1.6。下列数字都是 f_0130 量出来的：
   · 顶栏：「家族广场」17px 粗（ink y10.4~27.2）+ 放大镜 20.3px 紧随其后（x201.6~221.9）；
     右侧「＋创建家族」粉描边胶囊 74.4×26.9（外框 x267.5~341.9），粉字 13.5px。
     真机这一屏的导航内容整体比我们的通用导航高 ~2.2px，所以 .fam-title/.fam-create 各自上移 2.2。
   · 礼物播报条：x8.75~350.6、y46~100（高 54）、圆角 12、浅粉底（顶 #FDEBF2 → 底 #FFFDFE）。
     左侧「上电视」贴纸 44.5×46.8 @ x16.2；文案两行 14px/15.6，左沿 x68.75；
     右下角「如何上电视 ›」粉橙胶囊 82.8×16.5 @ x260.6（我们宽 84.4，差 1.2）。
   · banner：x8.75~350.6、y106~173（高 67）、圆角 12；播报条与 banner 间距 6。
   · Tab 行：文字 ink y186.6~204.1；「推荐」18px 粗，其余 14px 灰；
     ink 列 15/68.1/111.9/156.2/228.8；最右是**家族排行奖杯**（huwei icon_family_rank）19×21 @ x323.1~341.9。
     （旧注释里的 17.5px 漏斗图标是看错素材，已换成原版奖杯。）
   · 卡片：x12.5~347.5（宽 336）、高 129、pitch 153.1（卡间距 24.1）、圆角 14、白底；首卡 top y229.1。
     族徽 80×77 @ 卡片 (3,1.3)：光环素材打底 + 61px 圆照片居中（照片左沿 x26.6）；
     正文列从卡片 x92.5 起：名字 16px 粗（ink y242.2~259.1）+ Lv 胶囊 45.6×19.4；
     宣言 14px 灰（ink y266~281）；成员头像 3 个 26px、步进 9.5（x105~150）；人数/热度 11px；
     右侧「进入房间 / 进入聊天」粉字 12.4px（ink 右边 x325）；
     底部胶囊行 x26.9 起、高 21.9、圆角 11、11px 字，四档底色照真机取色（.ct1~.ct4）；
     招募红包角标 52 宽、骑在卡片上沿（相对卡片 top −23）。 */
.fam-cream{background:#F7F7F9}
/* 真机 f_0130 的「＋创建家族」胶囊：外框 x267.5~341.9、y6~32.9（74.4x26.9），文字 13.5px 粉字 */
.fam-create{display:inline-flex;align-items:center;gap:1.5px;height:26.9px;padding:0 4.5px;border-radius:13.5px;
  border:1px solid #FFC9DC;color:#FF4C81;font-size:13.5px;font-weight:600;margin-right:0;cursor:pointer;
  position:relative;top:-2.2px}
.fam-title{display:inline-flex;align-items:center;gap:9.4px;font-size:16.5px;font-weight:600;color:#22222A;
  position:relative;top:-2.2px}
.fam-title .ico{width:20.3px;height:20.3px;color:#5A5560}

/* 礼物播报条（真机 f_0130）：x8.75~350.6、y46~100（高 54）、浅粉底；
   左侧 43x45 上电视贴纸，文案两行 14/15.6，右下角「如何上电视 ›」粉橙胶囊 82.8x16.5 @ (260.6,75.1)。 */
.fam-marquee{margin:2px 8.75px 0;height:54px;border-radius:12px;
  background:linear-gradient(180deg,#FFFFFF 0%,#FFFCFD 100%);
  box-shadow:0 2px 8px rgba(24,24,24,.05);
  display:flex;align-items:center;gap:9.35px;padding:0 5.6px 0 7.45px;box-sizing:border-box;position:relative;overflow:hidden}
.fm-tv{flex:none;width:44.5px;height:46.8px;display:block;pointer-events:none}
.fm-tv svg{width:100%;height:100%;display:block}
.fm-copy{flex:1;min-width:0;position:relative;height:31.2px;overflow:hidden}
.fm-msg{position:absolute;left:0;right:0;top:0;font-size:14px;line-height:15.6px;color:#66606C;
  display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden;
  opacity:0;transform:translateY(100%);transition:transform .5s ease,opacity .5s ease}
.fm-msg.on{opacity:1;transform:none}
.fm-msg.out{opacity:0;transform:translateY(-100%)}
.fm-av{width:13px;height:13px;border-radius:3px;object-fit:cover;background:#F2EEF4;
  display:inline-block;vertical-align:-1.5px;margin-right:2px}
.fm-msg em{font-style:normal;color:#E8455F}
.fm-msg b{font-weight:400;color:#4A4550}
.fm-msg u{text-decoration:none;color:#8B5FB0}
.fm-msg i{font-style:normal;color:#D8427A;font-weight:500}
.fm-goto{position:absolute;right:5.6px;bottom:7.7px;height:16.5px;padding:0 10.5px;border-radius:8.25px;
  background:linear-gradient(90deg,#F45283,#F98B6A);color:#fff;font-size:11px;font-weight:500;
  display:inline-flex;align-items:center;gap:1.5px;letter-spacing:.2px;pointer-events:none}
/* 真机胶囊 82.8x16.5 @ x260.6，文字 11px */
.fm-goto i{font-style:normal;font-size:10px;opacity:.95}

.fam-banner{margin:6px 8.75px 0;height:67px;border-radius:12px;overflow:hidden;background:#FFE9EF}
.fam-banner img{width:100%;height:100%;object-fit:cover;display:block}

.fam-tabs{display:flex;align-items:center;gap:16px;padding:8.5px 13.3px 0 15px;height:36px;box-sizing:border-box;flex:none}
.fam-tabs>span{cursor:pointer;white-space:nowrap;font-size:14px;color:#8A8A94}
.fam-tabs>span.on{font-size:18px;font-weight:700;color:#22222A}
/* 真机最右不是漏斗，是 huwei 包里的家族排行奖杯 icon_family_rank（48x48 素材，显示 19x21） */
.fam-tabs .fam-rank{margin-left:auto;display:inline-flex;cursor:pointer}
.fam-tabs .fam-rank img{width:19px;height:21px;object-fit:contain;display:block;filter:brightness(.78)}
/* 真机 f_0130 最右是奖杯（杯身有「1」+ 底部斜线）：b-famrank 素材其实是柱状图，改用线性 trophy */
.fam-tabs .fam-rank .ico{width:29px;height:33px;color:#6E6A74}
.fam-tabs .fam-rank .ico svg{width:100%;height:100%;display:block}

.fam-search{margin:8px 8px 0;height:34px;border-radius:10px;background:#fff;border:1px solid #EEEAF0;
  display:flex;align-items:center;gap:7px;padding:0 10px}
.fam-search .ico{width:15px;height:15px;color:#B9B4BC;flex:none}
.fam-search input{flex:1;min-width:0;border:none;background:transparent;font-size:13px;font-family:inherit;outline:none}
.fam-search span{font-size:12.5px;color:#FF4C81;cursor:pointer}
.fam-search[hidden]{display:none!important}

.fam-list{position:relative;padding:20.1px 12px 14px}
/* 空态：开箱插画 + 「目前您还没有好友哦~」。
   位置照真机 a28fb78a f_0156（78.0s）量：插画顶部 = tab 行下方 +56px，插画 157x144，
   文案 ink appY 334.1..347.9（= 列表顶 +175..188.8）。APK assets 里没有这张插画，按帧描成近似 SVG。 */
/* 空态插画：真机 a28fb78a f_0156 量到墨迹 166.2×98.1、水平居中、上沿 appY 218.1（= 本页 box 261.9），
   文案墨迹 appY 336.2..351.2（box 380..395）、宽 128.8（12.5px 字号）。
   .fam-list 的 top 是 209，所以绝对定位给 53 就能让插画上沿落在 262。 */
.fam-empty{position:absolute;left:0;right:0;top:53px;display:flex;flex-direction:column;align-items:center;pointer-events:none}
.fam-empty svg{width:166px;height:98px;display:block}
.fam-empty span{margin-top:21px;font-size:13.5px;line-height:1;color:#B4B4BC}
/* 红包浮标：真机是「红包信封 45x40 + 橙色胶囊 55x19.6」叠在一起，视口右边距 8、底边距 189 */
.fam-rp{position:absolute;right:8px;bottom:189px;width:55px;z-index:20;text-align:center}
.fam-rp[hidden]{display:none}
.fam-rp img{width:45px;height:40px;object-fit:contain;display:block;margin:0 3.5px}
.fam-rp i{display:block;margin-top:-2.5px;height:19.6px;border-radius:9.8px;
  background:linear-gradient(180deg,#FF9A62,#FF7A3D);color:#fff;font-style:normal;box-sizing:border-box;padding-top:1px}
.fam-rp i b{display:block;font-size:9px;line-height:9.5px;font-weight:400}
.fam-rp i span{display:block;font-size:10px;line-height:10px;font-weight:700}
.fam-card{position:relative;background:#fff;border-radius:14px;height:129px;margin-bottom:21.3px;
  box-shadow:0 2px 10px rgba(24,24,24,.04);box-sizing:border-box;cursor:pointer}
/* 族徽（真机 f_0130 x15~95 / 卡片上沿+1.3，80x77）：照片 62 圆居中，光环素材压在最上层。 */
.fc-badge{position:absolute;left:3px;top:1.3px;width:80px;height:77px}
.fc-photo{position:absolute;left:11px;top:11.2px;width:61px;height:61px;border-radius:50%;object-fit:cover;
  background:#F2EEF4}
.fc-ring{position:absolute;left:0;top:0;width:80px;height:77px;object-fit:contain}
.fc-art{position:absolute;right:0;bottom:0;width:28px;height:28px;object-fit:contain;
  filter:drop-shadow(0 1px 3px rgba(120,80,110,.3))}
.fc-main{position:absolute;left:92.5px;right:23px;top:11px}
.fc-row1{display:flex;align-items:center;gap:7px;height:20px}
.fc-name{font-size:14px;font-weight:700;color:#22222A;max-width:150px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
/* 等级胶囊照真机 f_0148 量：不是实心粉底白字，是**极浅的紫底 + 粉紫渐变描边 + 粉紫渐变粗字**
   （取样：底 #FFEFFF、描边/字最饱和 #C616C0~#BB1BB9、图标是左侧一枚粉紫月牙）。
   2026-10-13 19:1x 用 thr16「含浅底/描边」这一把尺子重在同一帧上量（真机 Lv.12 x271..336 y386..410 =
   41.25x15.62 CSS、Lv.5 x312..377 y879..902 = 41.25x15.00），我们原来是 52.50x16.88 / 47.50x16.88 —— 宽出 6~11 CSS。
   拆开看：真机 图标 11.9 + 间隙 3.1 + 文字 25.6（"Lv.12"）+ 左右内边距≈0.6；我们是 图标13 + 间隙1.5 + 文字28（11px/800）+ 内边距8 + 描边2。
   所以把 font-size 11→10（"Lv.12" 墨迹 28→25.5，与真机 25.6 对齐）、height 17→15.5（真机 15.0~15.62）、
   内边距 0 5px 0 3px → 0 1px、gap 1.5→3、圆角 8.5→7.75、图标 13→12.5。 */
.fc-lv{display:inline-flex;align-items:center;gap:3px;height:15.5px;padding:0 1px;border-radius:7.75px;
  background:#FFEFFF;border:1px solid #E58BE8;color:#C616C0;font-size:10px;font-weight:800;flex:none;
  letter-spacing:-.2px}
.fc-lv img{width:11px;height:11px;object-fit:contain;filter:none}
/* Lv 牌分档（真机 a28fb78a f_0148 / f_0152，取样口径写在 live.js 的 FAM_LV_ICON 注释里）：
   图标一律 13.1 CSS（真机 21x21 帧px），低档是青 chevron + 灰字，中档是绿房子 + 绿字，
   不上 class 的默认档就是上面的紫粉描边款（Lv.11/12）。 */
.fc-lv .lvi{width:12.5px;height:12.5px;flex:none}
.fc-lv.t-low{background:#F2FAFC;border-color:#8FD6E0;color:#8C8C94}
.fc-lv.t-mid{background:#F1FBF1;border-color:#8FD49A;color:#3FB56F}
.fc-decl{margin-top:6.5px;font-size:12px;line-height:17px;color:#8A8A94;
  overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.fc-row3{margin-top:5.4px;display:flex;align-items:center;gap:5px;height:26px}
.fc-avs{display:flex;flex:none}
.fc-avs img{width:26px;height:26px;border-radius:50%;object-fit:cover;border:1.5px solid #fff;background:#F2EEF4}
.fc-avs img+img{margin-left:-16.5px}
.fc-num,.fc-hot{font-size:11px;color:#5A5560}
.fc-hot{display:inline-flex;align-items:center;gap:2px}
.fc-hot .ico{width:12px;height:15.5px;color:#C6BFCA}
/* 卡片右侧「进入房间 / 进入聊天」—— 真机 f_0130 三张卡逐像素复量（y503/x439、y743/x438、y984/x439 三处同款）：
   纯粉字，没有底板、没有描边（视频里那圈浅粉晕经 6× 放大确认是 4:2:0 色度出血，没有直边）。
   · 墨迹 83~84×21~23 帧px = 52.0×13.6 CSS → 字号 13.5（原来 12.4 太小，只画出 77×20 帧px）；
   · 墨迹右沿距卡右沿 20.6 CSS（右内边距 8 + right 12 = 20）；
   · 竖直中心 appY 276.6：内边距 6.95 + 行高 13.5/2 = 13.7，与旧版（7.5 + 12.4/2）逐像素等价，位置不动；
   · **颜色/光晕（2026-10-13 二次复量，产品说上一版「实心玫红、特别丑」）**：把我们的渲染按真机同一把尺子
     （360×800 @1.6 → 576×1280）截图、过同一条 JPEG(Q75) 4:2:0 管线，与真机 f_0130 取同口径：
       真机 笔画核心 (226,120,157)、墨迹 83×21 帧px、字外围一圈淡粉晕占 38.9%；
       旧版 笔画核心 (224,88,131)、墨迹 109×40（含角标，实为 83×21）、晕只占 9.4%。
     即真机是**浅一档的粉 + 一层粉晕** —— 但「浅一档」到底取哪一档，用**整块均值**再定：
       **2026-10-13 三次复量（产品说上一版「太浅、糊、特别丑」）**：光比**整块均值**是不够的 —— 均值
       被大面积白底主导，只要「墨量×深浅」的乘积对得上就算过，所以上一版挑出了一个**偏亮偏艳**的粉
       （#E084A5），笔画核心比真机浅一大截。改成同时比**两个统计量**：
         · 整块均值（88×24 帧px，与真机同框）   真机 (238,206,217)
         · 最暗 10% 像素均值（≈笔画核心色）     真机 (186,121,142)
       候选（一次渲染 6 条，同框同学号量）：
         #E084A5/500 均值 (244,203,218) 核心 (224,132,165) → 偏差和 82（就是上一版）
         #C87390/400 均值 (240,208,219) 核心 (200,115,144) → 27
         #BA798E/400 均值 (236,209,218) 核心 (186,121,142) → **6（核心色逐像素命中）**
       → 取 #BA798E = (186,121,142) + font-weight 400 + 晕收到 3px/.45（原来 500 + 4px/.55 太粗太糊，
       与真机同样 88×24 框内墨迹 84×20，未变）。 */
.fc-enter{position:absolute;right:12px;top:35.1px;padding:6.95px 8px;font-size:13.5px;font-weight:400;
  line-height:13.5px;color:#BA798E;cursor:pointer;background:none;border:0;
  text-shadow:0 0 3px rgba(255,140,180,.45)}
/* 真机 f_0148 逐枚量：胶囊高 25（帧 516~556）、全圆角 12.5、字号 11、左右内边距 8、
   两枚间距 4.4、首枚左沿离卡片 13.5（帧 43 → css 26.9，卡片左沿 13.1）、底沿离卡片底 12.2（帧 575.5）。
   底色/字色按像素取样：地域=暖奶油底橙棕字、性别=浅蓝底灰蓝字、活跃=浅粉底玫红字。 */
.fc-chips{position:absolute;left:13.5px;right:14px;bottom:12.2px;display:flex;gap:4.4px;overflow:hidden}
.fc-chip{height:25px;padding:0 8px;border-radius:12.5px;background:#F2F2FC;color:#7B7BAF;
  font-size:11px;display:inline-flex;align-items:center;white-space:nowrap;max-width:120px;
  overflow:hidden;text-overflow:ellipsis}
/* 三枚统计胶囊的取色（f_0148 第一张卡：`10%贵州` bg #FDF4E4 / 字 #C8792F，
   `54%男` bg #E9EFFD / 字 #7E90B8，`1人活跃` bg #FDE4E6 / 字 #D1595F）。 */
.fc-chip.ct-region{background:#FDF4E4;color:#C8792F}
.fc-chip.ct-gender{background:#E9EFFD;color:#7E90B8}
.fc-chip.ct-active{background:#FDE4E6;color:#D1595F}
/* 招募红包角标：真机 f_0130 第 3 张卡是「红包图 31x35 + 橙底两行白字标签 52x19.4」，
   整体骑在卡片上沿（相对卡片顶 −22.9，右沿略超出卡片 2.5）。 */
.fc-rp{position:absolute;right:-4.4px;top:-19.7px;width:55px;display:flex;flex-direction:column;align-items:center;gap:0}
/* 真机那个角标是「浅橙圆形光晕 + 红包 + 橙底两行白字」，光晕照 f_0124 量：约 46x44 圆，红包压在正中 */
.fc-rp::before{content:"";position:absolute;left:50%;margin-left:-23px;top:-4px;width:46px;height:44px;border-radius:50%;
  background:radial-gradient(circle,rgba(255,216,176,.95) 0%,rgba(255,199,152,.78) 52%,rgba(255,190,140,0) 74%)}
.fc-rp img{width:30px;height:35px;object-fit:contain;position:relative;z-index:1}
.fc-rp span{margin-top:-4.4px;width:55px;box-sizing:border-box;font-size:9.5px;line-height:9.6px;color:#fff;
  font-weight:600;padding:1px 0;border-radius:10px;text-align:center;white-space:normal;
  background:linear-gradient(180deg,#FF8B56,#F4705C)}

/* ---- 家族广场：数据填充阶段补的几条（卡片内容、空态、我的家族、红包角标） ---- */
.fam-note{padding:28px 22px;text-align:center;font-size:12.5px;line-height:1.75;color:#8A8A94}
/* 礼物消息卡（真机 a28fb78a f_0004 家族群聊 / outputs/gift-sbs.png 的 1:1 送礼卡，同一套）：
   整块粉渐变卡 top 299.1→403、左沿 61.2（与昵称行同一起点）、右沿渐隐到 ~270（宽 209）；
   内边距左 18.2 / 上 13.1；「送给」15px #2E2226、收礼人头像 22 圆；
   礼物名 13px #665B58（f_0004 取样最暗 95/84/82）；白底胶囊 71.2×26.9 r13.5 文字 13.5px。 */
.bub.bub-gift{background:none;padding:0;border-radius:0;box-shadow:none}
.fg-card{position:relative;width:209px;height:103.8px;border-radius:10px;overflow:hidden;
  background:linear-gradient(90deg,#FFEBEE 0%,#FDE7EF 58%,rgba(255,247,250,0) 100%)}
.fg-to{position:absolute;left:18.2px;top:13.1px;display:flex;align-items:center;gap:5px;
  font-size:15px;line-height:1;color:#2E2226}
.fg-av{width:22px;height:22px;border-radius:50%;object-fit:cover;background:#F2EEF4;flex:none}
.fg-nm{max-width:104px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.fg-gname{position:absolute;left:18.2px;top:41.9px;font-size:13px;line-height:1;color:#665B58}
.fg-btn{position:absolute;left:18.2px;top:65px;width:71.2px;height:26.9px;border-radius:13.45px;
  background:#fff;color:#2E2226;font-size:13.5px;display:flex;align-items:center;justify-content:center;
  box-shadow:0 1px 4px rgba(214,140,165,.10)}
.fg-art{position:absolute;right:8px;top:24px;width:62px;height:62px;object-fit:contain}
/* 自己发的那张（右对齐）：真机没有自方礼物卡的帧，按同一张卡镜像 —— 渐隐边朝外侧，
   礼物图贴到左内侧，不然贴在屏幕右缘会像被裁掉。 */
.msg.me .fg-card{background:linear-gradient(270deg,#FFEBEE 0%,#FDE7EF 58%,rgba(255,247,250,0) 100%)}
.msg.me .fg-art{right:auto;left:8px}
.msg.me .fg-to,.msg.me .fg-gname,.msg.me .fg-btn{left:auto;right:18.2px}
.msg.me .fg-to{justify-content:flex-end}
.msg.me .fg-nm{text-align:right}

/* 群礼物没有收礼人（gift_sends.to_user_id 为空）→ 不画「送给」行，卡片收矮一档 */
.fg-card.solo{height:80px}
.fg-card.solo .fg-gname{top:18px}
.fg-card.solo .fg-btn{top:38px}
.fg-card.solo .fg-art{top:10px}

/* 家族群聊「非成员」态：后端 22010 的落点。原来是直接把 traceId 当消息画出来（看着像坏了），
   现在画加入引导：家族名 + 宣言 + 一句门禁说明 + 申请入口。配色沿用家族广场那套粉/灰。 */
.fc-join{padding:44px 30px 0;text-align:center}
.fc-join b{display:block;font-size:16px;font-weight:700;color:#22222A}
.fc-join p{margin:10px 0 0;font-size:12.5px;line-height:1.7;color:#8A8A94;word-break:break-all}
.fc-join .fcj-tip{display:block;margin-top:22px;font-size:12.5px;line-height:1.7;color:#B4B4BC}
.fc-join .fcj-btn{display:block;width:176px;height:40px;margin:26px auto 0;border:0;border-radius:20px;
  background:#FF4C81;color:#fff;font-size:14px;font-weight:600;cursor:pointer}
.fc-join .fcj-btn.ghost{margin-top:12px;height:36px;background:#F5F4F6;color:#6B6B76;font-weight:400}
.fam-note .fam-link{color:#FF4C81;font-weight:600;cursor:pointer}
/* 真机 f_0148 的「生日中」不是胶囊，是**白色文字直接压在头像照片上**（居中、约 12.5px、
   带一层很淡的灰投影好压在亮照片上）。只在家族里确实有成员今天生日时才画（后端 birthdayToday）。 */
.fc-bday{position:absolute;left:11px;top:11.2px;width:61px;height:61px;border-radius:50%;
  display:flex;align-items:center;justify-content:center;color:#fff;font-size:12.5px;line-height:1;
  text-shadow:0 1px 2px rgba(60,50,60,.45);pointer-events:none}
.fc-badge{object-fit:contain;pointer-events:none}
.fc-ring{pointer-events:none}
.fc-photo{pointer-events:none}
.fc-chip.mine{background:linear-gradient(90deg,#FF7BB0,#E8459B);color:#fff;font-weight:600}
.fc-avs:empty{display:none}
.fc-rp[hidden]{display:none}
.fc-main{pointer-events:none}

/* 家族广场「语音房」Tab：房间数据来自 /api/v1/rooms?familyId，不使用示例房间。 */
.fam-room-note{margin:0 2px 12px;padding:0 2px;color:#8A8A94;font-size:11.5px;line-height:16px}
.fam-room-card{position:relative;display:flex;gap:11px;min-height:104px;margin-bottom:12px;padding:10px 30px 10px 10px;
  box-sizing:border-box;background:#fff;border-radius:12px;box-shadow:0 2px 10px rgba(24,24,24,.04);cursor:pointer;overflow:hidden}
.fam-room-card:active{background:#FFF5F8}
.fam-room-cover{position:relative;width:84px;height:84px;flex:none;border-radius:10px;overflow:hidden;background:#F2EEF4;display:flex;align-items:center;justify-content:center}
.fam-room-cover img{width:100%;height:100%;object-fit:cover;display:block}
.fam-room-cover-empty{color:#B8AFC0;font-size:11px}
.fam-room-live{position:absolute;left:5px;bottom:5px;padding:2px 5px;border-radius:6px;background:rgba(31,25,40,.65);color:#fff;font-size:9px;line-height:12px}
.fam-room-body{min-width:0;flex:1;padding-top:1px}
.fam-room-title{overflow:hidden;color:#22222A;font-size:15px;font-weight:700;line-height:20px;text-overflow:ellipsis;white-space:nowrap}
.fam-room-owner{display:flex;align-items:center;gap:5px;margin-top:6px;min-width:0;color:#6F6B77;font-size:11px;line-height:18px}
.fam-room-owner img{width:18px;height:18px;border-radius:50%;object-fit:cover;background:#F2EEF4;flex:none}
.fam-room-owner span{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.fam-room-meta{display:flex;gap:9px;margin-top:6px;overflow:hidden;color:#8A8A94;font-size:10.5px;line-height:15px;white-space:nowrap}
.fam-room-meta span{overflow:hidden;text-overflow:ellipsis}
.fam-room-tags{display:flex;gap:5px;margin-top:5px;overflow:hidden}
.fam-room-tags span{max-width:80px;padding:2px 6px;border-radius:8px;background:#F2F2FC;color:#7B7BAF;font-size:9.5px;line-height:13px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.fam-room-arrow{position:absolute;right:12px;top:42px;color:#B8AFC0;font-size:22px;line-height:22px}

/* ---- 任务中心（f_0297 / f_0299 / f_0300 / f_0303 逐帧量的） ----
   页面底 #F0F1F3；两张白卡左右各留 ~9px；行高 72.2（分隔线 1px），
   行内：名称 16/700 + 红色奖励字 + 金币图；描述 12.5 灰；右侧胶囊 65×38 r19 淡紫描边。 */
.tk-body{background:#F0F1F3;padding-top:8px}
.tk-card{background:#fff;border-radius:8px;margin:0 9px 10px;overflow:hidden}
.tk-h{font-size:17px;font-weight:700;color:#1F1E24;padding:14px 14px 0;margin:0}
.tk-row{position:relative;display:flex;align-items:center;padding:15px 16px 10px 14px;border-bottom:1px solid #F0F0F0}
.tk-card>*:last-child .tk-row:last-child,.tk-card .tk-row:last-child{border-bottom:none}
.tk-main{flex:1;min-width:0}
.tk-t{display:flex;align-items:center;gap:6px;height:20px}
.tk-name{font-size:16px;font-weight:700;color:#1F1E24;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.tk-rw{display:inline-flex;align-items:center;gap:3px;flex:none}
.tk-rw em{font-style:normal;font-size:13px;font-weight:600;color:#E0455F}
.tk-rw img{width:15px;height:15px;object-fit:contain}
.tk-d{margin-top:9px;font-size:12.5px;line-height:17px;color:#8A8A94;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.tk-btn{flex:none;margin-left:10px;min-width:65px;height:38px;box-sizing:border-box;border-radius:19px;
  border:1px solid #C6BEE8;color:#8E76D6;font-size:13.5px;display:inline-flex;align-items:center;
  justify-content:center;padding:0 12px;cursor:pointer;background:#fff;white-space:nowrap}
.tk-btn.done{border-color:#E2E0E8;color:#AEACB6;cursor:default}
.tk-btn.hot{border-color:#8E76D6}
.tk-note{padding:16px 14px;font-size:12.5px;line-height:1.7;color:#8A8A94}

/* 签到弹层：7 日格子复用旧的 .signhead/.sdays 那套（整套原来是签到页的头图） */
.tk-mask{position:absolute;left:0;right:0;top:0;bottom:0;background:rgba(20,18,26,.45);z-index:80;
  display:flex;align-items:flex-end}
.tk-sheet{width:100%;background:#fff;border-radius:16px 16px 0 0;overflow:hidden;padding-bottom:14px}
.tk-sheet .signhead{border-radius:0}
.tk-sheet .tk-sbtn{margin:16px 16px 0;height:44px;border-radius:22px;background:var(--brand-grad);color:#fff;
  font-size:15px;font-weight:600;display:flex;align-items:center;justify-content:center;cursor:pointer}
.tk-sheet .tk-sbtn.off{background:#EDEBF1;color:#A8A5B0;cursor:default}
.tk-sheet .tk-close{position:absolute;right:14px;top:14px;color:#fff;opacity:.9;cursor:pointer;font-size:18px;z-index:2}
.tk-sheet-wrap{position:relative}

/* ===========================================================================
   聊天页（真机 f_0440 顶部 / f_0450 中部；画布 360×800，1 CSS px = 1.2 帧 px，帧 y 先减 56）
   ---------------------------------------------------------------------------
   顶栏        0 .. 41.7   白底：‹ 13.3..22.5 /「31」胶囊 25×18.3 @32.5 / 30 圆角方头像 @65 /
                            昵称 15px @105 /「真人」标 37.5×15 @170.8 / ⋮ 右边缘 359.2
   认证条      41.7 .. 103.3  粉渐变卡（左右各 8.3，宽 342.5，r13）：标题 17px800 @卡内 16.7、
                            「完成真人认证可得 10 钻石💎」13px @卡内 8.4,y82.5 /「去上传」白胶囊
                            68.3×27.5 @264.2,58.3 / ✕ 白 12.5 @341.7,53.3
   匹配度卡    110.8 .. 185.8  白底 + 粉描边 r12，左右各 8.3：❤️ @27.5、「匹配度: N%」16px @50.8、
                            破冰行 💬 @27.5 + 两行 15px @54.2
   系统提示    灰气泡 #F3F2F7，居中；14px 行高 20
   语音气泡    146×40 琥珀渐变，行首 46 圆角方头像 @13.3
   灵感面板    27.5 .. 332.5（宽 305）× 447.5 .. 580.8：头部 15px #D67774，两行白底行高 45.8（内缩 8），
                            行右 ↑ 粉圆 22（右内缩 14）
   输入条      646.7 .. 679.2  整条 #F8F8F8：声波 @16.7 / 占位 15px #969696 @57.5 / ··· 18.5 @284 /
                            粉色圆钮 30 @325
   工具栏      693.3 .. 726.7  白底五等分（中心 36/108/180/252/324），描线图标 26，礼物用 3D 素材 +「新」
   =========================================================================== */
.chatpage{display:flex;flex:1;min-height:0;flex-direction:column;position:relative;overflow:hidden}
.chatpage .cnav{height:48.4px;flex:none;display:flex;align-items:center;background:#fff;padding-left:6.7px;position:relative;z-index:20}
.chatpage .cn-back{display:flex;align-items:center;cursor:pointer;color:#1B1B1F}
.chatpage .cn-back .ico{width:20px;height:20px}
.chatpage .cn-unread{margin-left:4.4px;height:18.3px;min-width:25px;padding:0 5px;border-radius:9.2px;background:#F84450;
  color:#fff;font-size:11px;font-weight:700;font-style:normal;display:flex;align-items:center;justify-content:center}
.chatpage .cn-unread[hidden]{display:none}
.chatpage .cn-av{width:31.9px;height:32.5px;border-radius:9px;object-fit:cover;background:#EEEDF2;margin-left:10px;flex:none;cursor:pointer}
.chatpage .cn-identity{margin-left:7px;min-width:0;max-width:132px;display:flex;flex-direction:column;justify-content:center;line-height:1.05}
.chatpage .cn-nm{font-size:15px;font-weight:700;color:#2E2C2F;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.chatpage .cn-distance{display:block;margin-top:3px;font-size:10.5px;line-height:12px;font-style:normal;font-weight:400;color:#8A8790;white-space:nowrap}
.chatpage .cn-distance[hidden]{display:none}
.chatpage .cn-distance.is-typing{color:#F45B8A;font-weight:600;animation:cnTypingPulse 1.2s ease-in-out infinite}
@keyframes cnTypingPulse{50%{opacity:.48}}
.chatpage .cn-real{margin-left:4.4px;display:inline-flex;align-items:center;gap:2px;height:15px;padding:0 2.4px;
  border-radius:7.5px;background:#fff;box-shadow:inset 0 0 0 1px #DDE7E5;color:#35C2B4;font-size:9.2px;font-weight:600;flex:none}
.chatpage .cn-real .ico{width:10.6px;height:9.2px;color:#43C9BE}
.chatpage .cn-real[hidden]{display:none}
.chatpage .cn-actions{margin-left:auto;margin-right:4px;display:flex;align-items:center;gap:2px;flex:none}
.chatpage .cn-card-toggle{width:26px;height:26px;padding:0;border:0;background:transparent;color:#1B1B1F;
  display:flex;align-items:center;justify-content:center;cursor:pointer;flex:none}
.chatpage .cn-card-toggle[hidden]{display:none}
.chatpage .cn-card-toggle .ico{width:19px;height:19px;transform:rotate(90deg);transition:transform .18s ease}
.chatpage .cn-card-toggle[aria-expanded="false"] .ico{transform:rotate(-90deg)}
.chatpage .cn-more{width:26px;height:26px;display:flex;align-items:center;
  justify-content:center;color:#1B1B1F;cursor:pointer;flex:none}
.chatpage .cn-more .ico{width:26px;height:26px}
.chatpage[data-card-keyboard="1"] .peercard-slot{display:none!important}

/* 认证条：真机是「左右各 8.3 的粉渐变卡」，不是通栏 */
.chatpage .cbar{position:relative;flex:none;margin:2.5px 9.2px 0;height:58.3px;border-radius:13px;overflow:hidden;
  background:linear-gradient(160deg,#FF7DBE 0%,#FF84AF 52%,#FF94A8 100%);color:#fff}
.chatpage .cbar[hidden]{display:none}
.chatpage .cbar .cb-tx{position:absolute;left:16.7px;top:8.3px}
.chatpage .cbar .cb-tx b{display:block;margin-left:8.3px;font-size:14.6px;line-height:19px;font-weight:700;letter-spacing:.2px}
.chatpage .cbar .cb-tx em{display:block;margin-top:5px;font-style:normal;font-size:12.4px;line-height:17px;opacity:.9}
.chatpage .cbar .cb-go{position:absolute;left:255px;top:16.6px;width:68.3px;height:27.5px;border-radius:13.8px;
  background:#fff;color:#FF4E7A;font-size:14px;font-weight:700;display:flex;align-items:center;justify-content:center;cursor:pointer}
.chatpage .cbar .cb-x{position:absolute;right:5.4px;top:11.6px;width:16px;height:16px;display:flex;align-items:center;
  justify-content:center;color:#fff;cursor:pointer;opacity:.92}
.chatpage .cbar .cb-x .ico{width:13px;height:13px}

.chatpage .chat-bg{background:#fff}
/* 资料卡固定在消息滚动区上方；消息区只负责自身滚动。 */
.chatpage .body.chatx{padding:10.6px 0 0}
.chatpage .msgs{padding:0}
/* 最后一条消息不要留 25px 的会话间距：键盘弹起后这一截会变成输入栏上方的空档，
   看起来就像「消息没有贴到底」。 */
.chatpage .msgs > .msg:last-child{margin-bottom:0}
.chatpage .chat-loading{padding:42px 16px;text-align:center;color:#A9A6AE;font-size:13px}
.chatpage .chat-time{appearance:none;border:0;background:transparent;width:100%;box-sizing:border-box;
  display:flex;justify-content:center;margin:0 0 12px;padding:0 14px;font-family:inherit;cursor:pointer}
.chatpage .chat-time>span{display:inline-flex;align-items:center;min-height:18px;padding:1px 8px;border-radius:9px;
  background:#F4F3F6;color:#A19EA7;font-size:11px;line-height:16px;white-space:nowrap;
  transition:background .16s ease,color .16s ease}
.chatpage .chat-time[data-full="1"]>span{background:#FFF0F5;color:#D85E86}
.chatpage .chat-time:active>span{background:#EDEBF1;color:#8E8995}
.chatpage .msg{display:flex;gap:10px;margin-bottom:25.25px;padding:0 14.4px;align-items:flex-start}
.chatpage .msg.me{flex-direction:row-reverse}
.chatpage .msg .avatar{width:45.6px;height:46px;border-radius:10px;object-fit:cover;background:#EEEDF2;flex:none}
.chatpage .msg-col{display:flex;flex-direction:column;align-items:flex-start;min-width:0}
.chatpage .msg.me .msg-col{align-items:flex-end}
.chatpage .msg-read{margin-top:5px;padding:0 2px;font-size:10.5px;line-height:13px;color:#AAA7B0;white-space:nowrap}
.chatpage .msg-read.is-read{color:#8B8793}
.chatpage .msg .bub{max-width:230px;padding:6px 12.6px;border-radius:5px 11.5px 11.5px 11.5px;background:#F6FCFC;
  font-size:14.4px;line-height:20px;color:#43444A;position:relative}
.chatpage .msg.me .bub{background:#FEEEEF;border-radius:11.5px 5px 11.5px 11.5px;color:#43444A}
.chatpage .msg .bub .msg-quote{display:flex;align-items:baseline;gap:5px;width:fit-content;max-width:100%;
  box-sizing:border-box;margin:-1px 0 7px;padding:7px 9px;border-left:3px solid #FFAFBF;border-radius:8px;
  background:rgba(255,255,255,.72);color:#8B7D84;font-size:11.5px;line-height:16px;overflow:hidden}
.chatpage .msg.me .bub .msg-quote{background:rgba(255,255,255,.64)}
.chatpage .msg .bub .msg-quote b{flex:none;max-width:88px;color:#E35C82;font-weight:600;overflow:hidden;
  text-overflow:ellipsis;white-space:nowrap}
.chatpage .msg .bub .msg-quote span{min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.chatpage .msg .bub .t{display:block;font-size:9.5px;color:#A9A8B0;margin-top:5px;text-align:right}
.chatpage .msg.system{justify-content:center;padding:0}
.chatpage .msg.system .bub{max-width:280px;background:#F6F7F9;color:#87888A;font-size:11.7px;line-height:14.4px;
  padding:8.6px 13.5px;border-radius:11px;text-align:left}
.chatpage .msg.system .bub .hl{color:#EAD68E}
.chatpage .msg.call-record .bub{display:inline-flex;align-items:center;justify-content:center;gap:5px;
  padding:7px 12px;text-align:center}
.chatpage .msg.call-record .bub .sico{width:14px;height:14px;flex:none}

/* 匹配度卡：白底 + 粉描边，只在真拿到 matchPercent 时才画（见 live.js） */
.chatpage .cx-match{margin:0 8.3px 16px;padding:5.9px 0 0;border-radius:12px;box-shadow:inset 0 0 0 1px #F7D3DF;background:#fff}
.chatpage .cx-match .cx-m{display:flex;align-items:center;gap:8.3px;padding:0 19.2px}
.chatpage .cx-match .cx-m i{font-style:normal;font-size:13.3px;line-height:1}
.chatpage .cx-match .cx-m b{font-size:13.6px;font-weight:600;color:#3A3A3C}
.chatpage .cx-match .cx-tip{display:flex;gap:8.3px;padding:6.5px 19.2px 6.7px}
.chatpage .cx-match .cx-tip .ico{width:24px;height:24px;color:#B9B8C0;flex:none}
.chatpage .cx-match .cx-tip span{font-size:13.4px;line-height:16px;color:#3A3A3C}

/* 灵感回复面板（真机 f_0450：滚到最底时停在输入条上方） */
.chatpage .cinsp{margin:0 auto 0;width:305px;border-radius:14px;padding:6px 8px;
  background:linear-gradient(150deg,#FDEBE7 0%,#FEF3F1 46%,#FFFFFF 100%)}
.chatpage .cinsp[hidden]{display:none}
.chatpage .cinsp .ci-hd{display:flex;align-items:center;gap:6.5px;padding:1px 5px 6px}
.chatpage .cinsp .ci-hd .ci-ic{width:20px;height:20px;border-radius:50%;background:linear-gradient(140deg,#FF8FB0,#FF5E7E);
  color:#fff;display:flex;align-items:center;justify-content:center;flex:none}
.chatpage .cinsp .ci-hd .ci-ic .ico{width:13px;height:13px}
.chatpage .cinsp .ci-hd b{font-size:13.6px;font-weight:700;color:#D67774}
.chatpage .cinsp .ci-row{position:relative;height:45.8px;border-radius:10px;background:#fff;margin-bottom:4px;
  display:flex;align-items:center;padding:0 8px 0 12.5px;cursor:pointer;box-shadow:0 1px 3px rgba(180,120,130,.10)}
.chatpage .cinsp .ci-row:last-child{margin-bottom:0}
.chatpage .cinsp .ci-row span{font-size:13.4px;color:#3A3A3C;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.chatpage .cinsp .ci-row .ci-up{position:absolute;right:14px;top:50%;transform:translateY(-50%);width:22px;height:22px;
  border-radius:50%;background:linear-gradient(140deg,#FF7E93,#F8415F);color:#fff;display:flex;align-items:center;
  justify-content:center;font-style:normal}
.chatpage .cinsp .ci-row .ci-up .ico{width:13px;height:13px}

/* 聊天页「常用语」底部面板 —— 真机 43f5ac75 f_0017~f_0020 逐项量（CSS px）：
   面板顶 appY 407.2（盖住输入条 + 工具栏），白底 #FFFFFF；
   标题「常用语」ink x13.8~65.6 y445.4~462.9 → 17px/700 #262626，左留白 13；
   「添加」ink 右缘 347.5 y450.4~459.1（高 8.8）→ 12px 橙粉，右留白 12.5，与标题同行；
   行卡 x17~343、高 57（838..929px）、圆角 12、底 #FBFBFD、节距 65.6（卡间 8.1）；
   行字 ink 左 29.4（= 卡左 17 + 12.4）、14px；右箭头 10×10 橙（右缘距卡右 19.2）。 */
.chatpage .cphrase{position:absolute;left:0;right:0;bottom:0;height:348.8px;background:#fff;
  z-index:30;display:flex;flex-direction:column}
.chatpage .cphrase[hidden]{display:none}
.chatpage .cphrase .cp-hd{display:flex;align-items:baseline;padding:35.6px 10.1px 0 13px}
.chatpage .cphrase .cp-hd b{font-size:17.8px;line-height:24px;font-weight:700;color:#262626}
.chatpage .cphrase .cp-add{margin-left:auto;font-size:12px;line-height:1;color:#F4667F;cursor:pointer;position:relative;top:-0.8px}
.chatpage .cphrase .cp-rows{flex:1;min-height:0;overflow-y:auto;padding:12.4px 17px 20px;scrollbar-width:none}
.chatpage .cphrase .cp-rows::-webkit-scrollbar{display:none}
.chatpage .cphrase .cp-row{position:relative;height:59.5px;margin-bottom:6.1px;border-radius:12px;
  background:#FBFBFD;display:flex;align-items:center;padding:0 40px 0 11.2px;cursor:pointer}
.chatpage .cphrase .cp-row:last-child{margin-bottom:0}
.chatpage .cphrase .cp-row span{font-size:14px;color:#333;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.chatpage .cphrase .cp-row .cp-up{position:absolute;right:15.9px;top:50%;transform:translateY(-50%);margin-top:-1.25px;
  width:17.5px;height:17.5px;color:#F6835F}
.chatpage .cphrase .cp-row .cp-up .ico{width:17.5px;height:17.5px;color:#F6835F}
.chatpage .cphrase .cp-note{padding:18px 0;font-size:13px;color:#8A8A94}

/* 语音气泡（f_0450 量：136.7×39.2 / r10 / 琥珀渐变 + 浅金内描边 / 深色波形条 / 右侧白字时长）。
   宽度按时长走（4s → 136.7，"4s" 右缘距气泡右 31.6 —— 真机右下角还有一枚金色小角标占位，所以留白偏大）。
   **波形条是装饰**：真机那排条是从录音算出来的真波形，我们没做音频分析，画的是固定图案（文档里记了这条偏差）。 */
/* 语音条不套灰气泡：琥珀卡就是气泡本体（真机 f_0450 量过，外面没有额外一层框） */
.chatpage .msg .bub.bub-v{background:none;padding:0;max-width:none;border-radius:0}
.chatpage .msg .bub.bub-v .vmsg{display:inline-flex;align-items:center;height:39.2px;border-radius:10px;
  padding:0 31.6px 0 4px;background:linear-gradient(115deg,#D7996A 0%,#B9663A 42%,#9E5329 100%);
  box-shadow:inset 0 0 0 1.5px rgba(255,222,180,.42),inset 0 1.2px 0 rgba(255,240,220,.5);
  cursor:pointer;user-select:none;vertical-align:middle}
.chatpage .msg .bub .vmsg .vbars{display:flex;align-items:center;gap:2.6px;height:22px;flex:none}
.chatpage .msg .bub .vmsg .vbars i{width:2.4px;border-radius:1.2px;background:#542709;opacity:.9}
.chatpage .msg .bub .vmsg .vdur{margin-left:auto;font-style:normal;font-size:17px;color:#fff;font-variant-numeric:tabular-nums}
.chatpage .msg .bub .vmsg.on .vbars i{background:#FFF1D6;opacity:1}
/* 文件消息（云信 v2 type=4）：一枚文档图标 + 文件名 + 大小，整块可点开原文件。
   和语音条一样是**气泡本身**（不再套一层灰框），尺寸随输入栏那套走。 */
.msg .bub .fmsg{display:inline-flex;align-items:center;gap:7px;min-width:104px;max-width:216px;
  padding:7px 11px;border-radius:10px;background:#F2F3F7;color:#333;text-decoration:none;
  cursor:pointer;user-select:none;vertical-align:middle}
.msg .bub .fmsg:active{opacity:.75}
.msg .bub .fmsg .fl-ic{flex:none;font-style:normal;font-size:19px;line-height:1}
.msg .bub .fmsg .fl-nm{display:flex;flex-direction:column;gap:1px;min-width:0;font-weight:400;
  font-size:13px;line-height:1.25;word-break:break-all}
.msg .bub .fmsg .fl-nm b.fl-size{font-weight:400;font-size:11px;color:#8A8A94}
/* 「对方已通过真人认证」这类系统提示前的绿色小勾（真机 f_0450：气泡内左侧一枚青绿圆点） */
.chatpage .msg.system .bub .sico{display:inline-flex;align-items:center;justify-content:center;width:16.2px;height:13.5px;
  margin-right:3.2px;color:#43C9BE;font-style:normal;vertical-align:-1.6px}
.chatpage .msg.system .bub .sico .ico{display:block;width:100%;height:100%}

/* 输入行（f_0450 量出来的结构，不是「一条 #F8F8F8 通栏」）：
   白底行 31.6 高 —— 左「声波」图标 —— 中间灰胶囊 #F7F7F7 / r16 —— 右粉色发送钮。
   胶囊在设计稿宽度下约 260px，但在窄屏上必须收缩，避免被键盘和发送钮挤出屏幕。
   行底到工具栏顶之间真机有 12.6 白（量出来的空档，不是写错的多余 margin）。 */
/* 输入行 + 底部工具栏 + 两个面板，**全部按 43f5ac75 真机帧量出来的锚点**：
   输入行：胶囊 690~724.4（高 35 / r17.5 / #FBFBFD），左「声波」浅灰圆 13.8~35（21.2），
          占位文案左起 61.9、右「···」284.4~300.6、发送钮 323~350.5（27.5）；整行高 35。
   工具栏：默认态 725~800（图标中心 x 36/108/180/252/324，图标 744.4~766.9 中心 755.6）。
   面板态：工具栏盒缩到 48.2（图标居中），下面接面板 —— 表情面板 273.8、更多面板 206.8，
          所以整叠往上的位移正好是 247 / 180（= 面板高 - 26.8）。 */
.chatpage .cinput{flex:none;min-height:0;height:46px;padding:0 10px 0 12px;background:#fff;display:flex;align-items:center}
.chatpage .ci-quote{flex:none;min-height:48px;display:flex;align-items:center;gap:8px;padding:7px 10px 8px 13px;
  background:#fff;border-top:1px solid #F6F1F3;box-sizing:border-box}
.chatpage .ci-quote[hidden]{display:none!important}
.chatpage .ci-quote-bar{width:3px;height:31px;border-radius:3px;background:linear-gradient(180deg,#FFAFBE,#FF698F);flex:none}
.chatpage .ci-quote-main{flex:1;min-width:0;display:flex;flex-direction:column;gap:2px}
.chatpage .ci-quote-main b{font-size:12.5px;line-height:16px;color:#E45D83;font-weight:600;overflow:hidden;
  text-overflow:ellipsis;white-space:nowrap}
.chatpage .ci-quote-main em{font-style:normal;font-size:11.5px;line-height:15px;color:#8F8992;overflow:hidden;
  text-overflow:ellipsis;white-space:nowrap}
.chatpage .ci-quote-x{width:30px;height:30px;border:0;border-radius:50%;padding:0;flex:none;background:#F7F4F6;
  color:#8E8791;display:flex;align-items:center;justify-content:center;cursor:pointer}
.chatpage .ci-quote-x .ico{width:14px;height:14px}
.chatpage .cinput .ci-mic{width:24px;height:24px;flex:none;display:flex;align-items:center;justify-content:center;cursor:pointer;color:#26262A}
.chatpage .cinput .ci-mic-c{width:11px;height:16px;display:flex;align-items:center;justify-content:center;color:#26262A;transform:translate(-1.27px,.58px)}
.chatpage .cinput .ci-mic .ico{width:11px;height:16px}
.chatpage .cinput .ci-ipt{position:relative;flex:1;min-width:0;height:42px;margin:0 4px 0 8px;border-radius:21px;background:#FBFBFD;
  display:flex;align-items:center;padding:0 12px;cursor:text}
.chatpage .cinput input.ci-ph{display:block;box-sizing:border-box;width:100%;height:100%;min-width:0;line-height:42px;
  border:0;outline:0;background:transparent;padding:0;color:#3A3A3C;font-size:14.5px}
.chatpage .cinput input.ci-ph::placeholder{color:#A5A5A6;opacity:1}
.chatpage .cinput .ci-ph{flex:1;min-width:0;font-size:14.5px;color:#A5A5A6;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.chatpage .cinput .ci-dots{width:22px;min-height:32px;flex:none;display:flex;align-items:center;justify-content:space-between;
  cursor:pointer;touch-action:manipulation}
.chatpage .cinput .ci-dots i{width:4.2px;height:4.2px;border-radius:50%;background:#A5A5A7}
/* 语音输入态（真机 f_0013~f_0025）：左键为键盘图标、输入框右侧的「···」换成一颗灰脸、
   框内出现 3.1×17.5 的青色闪烁光标（按 1s 方波闪：f_0013/16/20/21/23/25 有、f_0014/17/18/19/22/24 没有）。 */
.chatpage .cinput .ci-pale{display:none}
.chatpage .cinput .ci-caret{display:none}
.chatpage.chat-voice-open .cinput .ci-dots{display:none}
.chatpage.chat-voice-open .cinput .ci-pale{display:block;position:absolute;right:13px;top:50%;transform:translateY(-50%);
  width:23px;height:23px}
.chatpage.chat-voice-open .cinput .ci-caret{display:block;position:absolute;left:8px;top:50%;transform:translateY(-50%);
  width:3.1px;height:17.5px;border-radius:1.6px;background:#53C5E0;animation:nin-caret 1s steps(1,end) infinite}
@keyframes nin-caret{0%,49.99%{opacity:1}50%,100%{opacity:0}}
.chatpage .cinput .ci-send{width:30px;height:30px;border-radius:50%;flex:none;cursor:pointer;color:#fff;touch-action:manipulation;
  user-select:none;-webkit-user-select:none;background:linear-gradient(145deg,#FF9C6B,#FF6A78 60%,#F9507C);
  display:flex;align-items:center;justify-content:center}
.chatpage .cinput .ci-send .ico{width:12px;height:16px;color:#fff}

/* 聊天消息长按菜单：微信式深色浮层，贴着被长按的气泡上方出现；顶部空间不够时自动翻到下方。 */
.msg-actions-mask{position:fixed;inset:0;z-index:1500;background:rgba(18,16,18,.02);
  -webkit-tap-highlight-color:transparent}
.msg-actions-pop{position:fixed;display:flex;align-items:stretch;height:66px;padding:5px 4px;box-sizing:border-box;
  color:#fff;background:linear-gradient(180deg,#414146 0%,#303034 100%);
  border:1px solid rgba(255,255,255,.13);border-radius:12px;
  box-shadow:0 9px 26px rgba(0,0,0,.3),inset 0 1px 0 rgba(255,255,255,.08);
  visibility:hidden;animation:ma-pop-in .15s cubic-bezier(.2,.9,.25,1.2) both}
.msg-actions-pop[data-placement="above"]{transform-origin:50% 100%;--ma-enter-y:5px}
.msg-actions-pop[data-placement="below"]{transform-origin:50% 0;--ma-enter-y:-5px}
.msg-actions-pop::after{content:"";position:absolute;left:var(--ma-arrow-left,50%);width:11px;height:11px;
  box-sizing:border-box;background:#343438;border:1px solid rgba(255,255,255,.11);
  transform:translateX(-50%) rotate(45deg)}
.msg-actions-pop[data-placement="above"]::after{bottom:-6px;border-top:0;border-left:0;border-radius:0 0 2px 0}
.msg-actions-pop[data-placement="below"]::after{top:-6px;border-right:0;border-bottom:0;border-radius:2px 0 0 0}
.ma-item{position:relative;z-index:1;flex:0 0 58px;width:58px;height:56px;box-sizing:border-box;
  border:0;border-radius:8px;padding:0 6px;
  background:transparent;color:#F7F5F6;display:flex;flex-direction:column;align-items:center;justify-content:center;
  gap:5px;font-family:inherit;font-size:11px;line-height:14px;white-space:nowrap;cursor:pointer}
.ma-item+.ma-item::before{content:"";position:absolute;left:0;top:9px;bottom:9px;width:1px;background:rgba(255,255,255,.08)}
.ma-item .ico{width:21px;height:21px;color:#fff;filter:drop-shadow(0 1px 2px rgba(0,0,0,.16))}
.ma-item:active{background:rgba(255,255,255,.11)}
.ma-item.ma-danger{color:#FFD8E2}
.ma-item.ma-danger .ico{color:#FFD8E2}
@keyframes ma-pop-in{from{opacity:0;transform:translateY(var(--ma-enter-y,4px)) scale(.9)}
  to{opacity:1;transform:translateY(0) scale(1)}}
.chatpage .ctools{flex:none;height:75px;padding-bottom:13.8px;background:#fff;display:flex;align-items:center}
.chatpage .ctools.inputbar{box-sizing:border-box;min-height:0;padding:0 0 13.8px;border-top:0;gap:0}
/* 面板展开时工具条压到 48.2 高。真机三态实测（f_0005 常态 / f_0058 表情 / f_0071 更多）：
   **输入框底 → 工具条图标中心恒为 31**（32.2 / 30.9 / 31.0），所以展开态那 13.8 是**上内距**不是下内距
   （下内距 13.8 会让这个间距塌成 17.2，输入框被顶到工具条上）。 */
.chatpage.chat-panel-open .ctools{height:48.2px;padding:13.8px 0 0}
.chatpage .ctools .ib{flex:1 1 0;width:auto;height:100%;min-width:0;margin:0;display:flex;align-items:center;
  justify-content:center;position:relative;color:#202023;cursor:pointer}
/* 5 颗图标：几何逐颗量自真机 f_0005（1.6x 帧，已折算 CSS）——
   相册 23.10×22.50 墨迹心(35.95,712.45)｜通话 23.12² 心(107.81,712.18)｜礼物 36.25×33.12 心(185.63,709.68)
   表情 26.90² 心(251.60,712.25)｜＋ 28.80×29.40 心(324.99,710.90)，红点 d≈10 心(335.25,701.0)。
   5 列等宽 72（列心 36/108/180/252/324），所以每颗只差一个 translate 微调。
   相册/表情/＋ 是按帧描的内联 SVG（线上版那套细描边素材图库里没有，dump 出来的是实心旧版）；
   通话与礼物连旧版都对不上，直接用真机帧像素裁切贴回原位（1:1，@1.6x 下逐像素）。 */
.chatpage .ctools .ct-ic,.chatpage .ctools .ct-img{display:block;flex:none}
.chatpage .ctools .ct-ic svg,.chatpage .ctools .ct-kb svg,.chatpage .ctools .ct-mx svg,.chatpage .ctools .ct-pale svg{display:block;width:100%;height:100%;overflow:visible}
.chatpage .ctools .ct-kb .ico,.chatpage .ctools .ct-mx .ico,.chatpage .ctools .ct-pale .ico{display:block;width:100%;height:100%}
.chatpage .ctools .ib[data-album] .ct-ic{width:23.1px;height:22.5px;transform:translate(-.05px,.85px)}
.chatpage .ctools .ib[data-call] .ct-img{width:23.12px;height:23.12px;transform:translate(-.19px,.58px)}
.chatpage .ctools .ib[data-open] .ct-img{width:36.25px;height:33.12px;transform:translate(5.63px,-1.92px)}
.chatpage .ctools .ib[data-emoji] .ct-ic{width:26.9px;height:26.9px;transform:translate(-.4px,.65px)}
.chatpage .ctools .ib[data-more] .ct-ic{width:28.8px;height:29.4px;transform:translate(.99px,-.7px)}
/* 礼物入口换成了干净的线性图标；不再挂旧版「新」红牌。 */
.chatpage .ctools .ib[data-open] .ct-img.ct-gift{width:26px;height:26px;transform:translateY(-.8px)}
.chatpage .ctools .ct-ci{width:27px;height:27px;border-radius:50%;box-shadow:inset 0 0 0 1.25px #202023;display:flex;
  align-items:center;justify-content:center}
.chatpage .ctools .ct-ci .ico{width:15px;height:15px}
.chatpage .ctools .ct-ci-x{display:none}

/* 表情面板开着时：表情键变成虚线圈（f_0058）；更多面板开着时：更多键变成 ✕（f_0071） */
/* 表情面板开着时第 4 颗换成「圆 + 3×3 点」（f_0058 实测：圆 d26、点 2.6、间距 4.6） */
.chatpage .ctools .ib[data-emoji] .ct-kb{display:none;width:28.12px;height:28.12px;flex:none;transform:translate(-.44px,.6px)}
.chatpage.chat-emoji-open .ctools .ib[data-emoji] .ct-ic{display:none}
.chatpage.chat-emoji-open .ctools .ib[data-emoji] .ct-kb{display:flex;align-items:center;justify-content:center}
/* 更多面板开着时第 5 颗换成「圆 + ✕ + 红点」（f_0071：圆 d26 心(323.8,532.5)、✕ 8.4×8.4、红点 d10 心(335.6,520.5)） */
.chatpage .ctools .ib[data-more] .ct-mx{display:none;width:27px;height:27px;flex:none;font-style:normal;
  transform:translate(0,0)}
.chatpage.chat-more-open .ctools .ib[data-more] .ct-ic{display:none}
.chatpage.chat-more-open .ctools .ib[data-more] .ct-mx{display:flex}
/* 更多面板开着时第 4 颗变成「深色圆 + 淡灰笑脸」（f_0071 实测：面 #E7E7E7、五官 #A5A5AA、环 #202023 d26） */
.chatpage .ctools .ib[data-emoji] .ct-pale{display:none;width:26.88px;height:26.88px;flex:none;transform:translate(-.4px,.65px)}
.chatpage.chat-more-open .ctools .ib[data-emoji] .ct-ic{display:none}
.chatpage.chat-more-open .ctools .ib[data-emoji] .ct-pale{display:flex;align-items:center;justify-content:center}
/* 通话入口：语音 / 视频二选一。两行原生动作面板。
   注意别再给按钮挂 .voice —— 语音房整页样式就是 .voice{position:absolute;inset:0}，
   会把这颗按钮撑成整屏盖住选择器（2026-10-30 真踩过）。 */
.call-picker-mask{z-index:1101}
.call-picker{max-height:none;padding:0 16px calc(14px + env(safe-area-inset-bottom,0px))}
.call-picker header{height:56px;justify-content:center;position:relative}
.call-picker header b{font-size:16px;color:#29262D;font-weight:600}
.call-picker-policy{margin:0 0 12px;padding:10px 12px;border-radius:12px;background:#FFF5F7;
  color:#8E6670;font-size:11.5px;line-height:18px;text-align:center}
.call-picker-policy b{color:#FF4D6D;font-size:13px;font-weight:700;margin-right:3px}
.call-picker-policy span{margin:0 5px;color:#C8AEB4}
.call-picker-types{display:flex;flex-direction:column;gap:10px;padding:2px 0 14px}
.call-picker-option{width:100%;height:72px;border-radius:16px;display:flex;align-items:center;gap:14px;
  padding:0 16px;background:#F7F6F8;color:#2D2930;text-align:left;cursor:pointer;
  transition:transform .12s ease,background .12s ease;-webkit-tap-highlight-color:transparent}
.call-picker-option:active{transform:scale(.985);background:#F1EFF3}
.call-picker-ico{width:44px;height:44px;border-radius:14px;display:flex;align-items:center;justify-content:center;
  flex:none;background:#FFEAF0;color:#FF5B86}
.call-picker-ico svg{width:23px;height:23px;display:block}
.call-picker-option[data-call-kind="video"] .call-picker-ico{background:#EAF1FF;color:#5B7CFF}
.call-picker-option.is-locked{background:#F4F3F5;cursor:default}
.call-picker-option.is-locked:active{transform:none;background:#F4F3F5}
.call-picker-option.is-locked .call-picker-ico{background:#EBE9ED;color:#A29CA6}
.call-picker-option.is-locked .call-picker-tx b{color:#8B858F}
.call-picker-option.is-locked .call-picker-tx small{color:#B3ADB6}
.call-picker-tx{display:flex;flex-direction:column;gap:2px;min-width:0;flex:1}
.call-picker-tx b{font-size:15.5px;line-height:21px;font-weight:600;color:#29262D}
.call-picker-tx small{font-size:11.5px;line-height:16px;color:#9A949E}
.call-picker-chev{font-size:24px;line-height:24px;color:#C9C3CB;font-weight:300;flex:none}
.call-picker-lock{width:22px;height:22px;flex:none;color:#A9A2AC}
.call-picker-lock svg{display:block;width:22px;height:22px}
.call-picker-hint{margin:-4px 0 12px;padding:9px 12px;border-radius:11px;background:#FFF0F3;
  color:#C24963;font-size:12px;line-height:17px;text-align:center}
.call-picker-hint[hidden]{display:none}
.call-picker-cancel{width:100%;height:48px;border-radius:14px;background:#F5F3F6;color:#6F6872;
  font-size:15px;font-weight:500;cursor:pointer}
.intimacy-call-policy{margin:12px 16px 0;padding:13px 15px;border-radius:14px;background:#FFF7F9;
  border:1px solid #FFE7ED;display:grid;gap:9px}
.intimacy-call-policy>div{display:flex;align-items:center;justify-content:space-between;gap:12px}
.intimacy-call-policy b{font-size:12.5px;color:#3A343C;font-weight:600}
.intimacy-call-policy span{font-size:11.5px;color:#A28B92;flex:none}
/* 更多面板（真机 f_0070 / f_0071 实测）：
   面板高 206.8、白底、4 列（左右各留 10 → 列宽 85，列中心 52.5/137.5/222.5/307.5，
   真机量得 52.2/136.3/222.2/305.9）、行距 83.75（上内距 12.3、下内距 35.6）；
   行1 图标底板中心 587.5、行2 671.25；底板 52×52 圆角 13 底色 #FBFBFD（真机取色 251,251,252），
   图标撑满底板（8 颗素材的墨迹占比实测与 52 框吻合）。 */
.chatpage .ctools-more{flex:none;height:207.775px;background:#fff;display:grid;grid-template-columns:repeat(4,1fr);
  grid-auto-rows:83.75px;align-content:start;padding:12.3px 10px 35.6px}
.chatpage .ctools-more[hidden]{display:none}
.chatpage .ctm{position:relative;display:flex;flex-direction:column;align-items:center;gap:7.5px;cursor:pointer;color:#3A3A3C}
.chatpage .ctm-t{width:52px;height:52px;border-radius:13px;background:#FBFBFD;display:flex;align-items:center;justify-content:center;font-style:normal}
.chatpage .ctm-t img{width:52px;height:52px;object-fit:contain}
.chatpage .ctm-t.ctm-emo{background:transparent;font-size:30px;line-height:52px}
.chatpage .ctm small{font-size:13px;line-height:17px}
/* 红点的位置按 f_0071 量：中心 = 底板中心 x+20、底板顶 +9.1（直径 7.5→8） */
.chatpage .ctm[data-newdot]::after{content:"";position:absolute;top:5.1px;left:calc(50% + 16px);width:8px;height:8px;border-radius:50%;background:#FA3B47}
/* 表情面板：滚动区 + 底部 75 的分区条（GIF / 😀 / ❤️ / 🎲 / ✕，f_0058） */
.chatpage .ctools-emoji{flex:none;height:281.375px;background:#fff;display:flex;flex-direction:column;border-top:1px solid #EFEFF2}
.chatpage .ctools-emoji[hidden]{display:none}
.chatpage .cte-scroll{flex:1;min-height:0;overflow-y:auto;padding-top:14.5px}
.chatpage .cte-sub{padding-left:15.6px;font-size:11.5px;line-height:13px;color:#8A8A94;margin:0}
.chatpage .cte-sub+.cte-grid{margin-bottom:8px}
.chatpage .cte-grid{display:grid;grid-template-columns:repeat(7,1fr);padding:0 4px}
.chatpage .cte-note{grid-column:1/-1;padding:14px 16px;font-size:12.5px;color:#8A8A94}
.chatpage .cte-e{height:45px;display:flex;align-items:center;justify-content:center;font-size:29px;line-height:1;cursor:pointer;
  touch-action:manipulation;user-select:none;-webkit-user-select:none}
.chatpage .cte-e img{width:36px;height:36px;object-fit:contain;pointer-events:none;transition:transform .12s ease}
.chatpage .cte-e:active img{transform:scale(.88)}
.chatpage .cte-cats{flex:none;height:74.75px;padding:0 19.4px 26px 14px;display:flex;align-items:center}
.chatpage .cte-cat{width:50px;display:flex;align-items:center;justify-content:center;font-size:21px;line-height:1;cursor:pointer;color:#3A3A3C}
.chatpage .cte-cat.cte-gif{width:27px;height:27px;border-radius:50%;background:#F5A623;color:#fff;
  font-size:9px;font-weight:700;letter-spacing:0;margin-right:27px}
.chatpage .cte-cat.on{width:37px;height:37px;border-radius:10px;background:#E9E9EB;margin:0 6.5px}
.chatpage .cte-x{margin-left:auto;width:24px;height:24px;display:flex;align-items:center;justify-content:center;color:#6B6B72;cursor:pointer}
.chatpage .cte-x .ico{width:20px;height:20px}

/* 顶部「平台倡导真实交友」提示：正常参与纵向布局，不再绝对定位覆盖资料卡。
   这样安全区、导航、长文案与窄屏换行都由 flex 自动处理，提示收起时也不会压住聊天内容。 */
.chatpage .cpromo{position:relative;left:auto;right:auto;top:auto;z-index:auto;flex:none;
  box-sizing:border-box;width:auto;min-height:56px;height:auto;margin:6px 10px 8px;
  padding:8px 94px 8px 16px;border-radius:13px;display:flex;align-items:center;
  background:linear-gradient(100deg,#FF7BAD,#FF5E90 55%,#FF4C81);color:#fff;overflow:hidden}
.chatpage .cpromo[hidden]{display:none}
/* 文字墨迹：首行 61.9~75.6（字号 ~15 粗体，左内距 16.9），次行 86.2~95.6（字号 ~12.5） */
.chatpage .cpromo .cpromo-tx{min-width:0;line-height:1.22}
.chatpage .cpromo .cpromo-tx b{display:block;font-size:14.5px;line-height:18px;font-weight:700;letter-spacing:.2px}
.chatpage .cpromo .cpromo-tx em{display:block;margin-top:4px;font-style:normal;font-size:12.4px;line-height:17px;opacity:.96;
  overflow-wrap:anywhere}
/* 白胶囊「去上传」：始终在文字右侧，不盖住文案 */
.chatpage .cpromo .cpromo-go{position:absolute;right:30px;top:50%;transform:translateY(-50%);
  width:58px;height:24.4px;justify-content:center;
  border-radius:12.2px;background:#fff;color:#FF4C81;font-size:14px;font-weight:700;display:flex;align-items:center}
/* ✕：浮层右上角，中心约 css (336, 62.5) */
.chatpage .cpromo .cpromo-x{position:absolute;right:3px;top:3px;width:23px;height:23px;display:flex;
  align-items:center;justify-content:center;color:rgba(255,255,255,.92)}
.chatpage .cpromo .cpromo-x .ico{width:13px;height:13px}
/* TA 资料卡（f_0011：内容 89~234，左右 10，圆角 12，浅粉描边；照片 46、名 15 粗、年龄职业 12.5 灰、
   右上「查看更多 ›」、右侧粉色语音胶囊「10s」、地址行橙色、话题行深灰） */
/* 卡内锚点全部按 f_0010 / f_0011 复量（页面 CSS）：卡顶 93.1、卡底 238.1、卡左右 10~349.4；
   两枚照片是**正圆**（原来的 46×46 圆角方块是错的）：左圆左沿 x26.9、圆心 52.5、直径 51.2，
   右圆圆心 95.6、直径 ≥50，两圆心相距 43.1 → 叠 9；**左圆压在上层**（真机左圆的白边切过右圆）；
   两枚竖直中心同为 appY130.4 → 照片顶 = 130.4-51/2 ≈ 104.9（卡内 11.8）；
   姓名墨迹 x136.2 起 / appY113.8~126.2；行首 x 26.2；距离行墨迹 171.9~180；话题行 198.1~209.4。 */
.chatpage .peercard-slot{flex:none;position:relative;z-index:3;background:#fff;padding-top:2px;
  box-shadow:0 1px 0 rgba(58,45,52,.06)}
.chatpage .peercard-slot[hidden]{display:none}
.chatpage .peercard{margin:0 10px 8px;padding:12.5px 16.4px 12px;border-radius:12px;background:#fff;
  box-shadow:inset 0 0 0 1px #F7D3DF;position:relative;overflow:hidden;
  transition:padding .18s ease}
.chatpage .peercard .pc-top{display:flex;align-items:flex-start}
.chatpage .peercard .pc-photos{display:flex;flex:none}
.chatpage .peercard .pc-photos img{width:51px;height:51px;border-radius:50%;object-fit:cover;background:#F1EFF3}
/* 第二枚只做负边距；压在上面的是**第一枚**（真机如此），所以 z-index 加在 :first-child 上。 */
.chatpage .peercard .pc-photos img+img{margin-left:-9px}
.chatpage .peercard .pc-photos img:first-child{position:relative;z-index:1}
.chatpage .peercard .pc-id{margin-left:16.3px;min-width:0;padding-top:5.7px}
.chatpage .peercard .pc-id b{display:block;font-size:15px;line-height:18px;font-weight:700;color:#2E2C2F}
.chatpage .peercard .pc-id span{display:block;margin-top:8px;font-size:12.5px;line-height:14px;color:#8A8790}
.chatpage .peercard .pc-actions{margin-left:auto;display:flex;align-items:flex-start;gap:4px}
.chatpage .peercard .pc-more{padding-top:5px;font-size:12.5px;line-height:14px;color:#8A8790;
  cursor:pointer;white-space:nowrap}
.chatpage .peercard .pc-extra{max-height:280px;opacity:1;overflow:hidden;transition:max-height .18s ease,opacity .14s ease}
.chatpage .peercard .pc-row{display:flex;gap:8.5px;margin-top:15.4px;font-size:13.4px;line-height:15.7px;color:#3A3A3C}
.chatpage .peercard .pc-row .ico{width:17px;height:17px;flex:none;color:#8A8790;margin-top:0.5px}
.chatpage .peercard .pc-row+.pc-row{margin-top:12px}
.chatpage .peercard .pc-row.pc-dist span{color:#E0954F}
.chatpage .peercard .pc-recent{margin-top:13px;padding:9px 10px 10px;border-radius:11px;background:#F8F6F9}
.chatpage .peercard .pc-recent[hidden]{display:none}
.chatpage .peercard .pc-recent-hd{font-size:11.5px;line-height:15px;color:#8A8790;margin-bottom:7px}
.chatpage .peercard .pc-recent-row{display:flex;gap:6px;overflow-x:auto;scrollbar-width:none}
.chatpage .peercard .pc-recent-row::-webkit-scrollbar{height:0}
.chatpage .peercard .pc-recent-th{flex:none;width:54px;height:54px;border-radius:9px;overflow:hidden;background:#EDEAF0;display:block}
.chatpage .peercard .pc-recent-th img{width:100%;height:100%;object-fit:cover;display:block}
/* Never expose the design-time peer while the real conversation is loading. */
.chatpage[data-chat-loading="1"] .cn-av,
.chatpage[data-chat-loading="1"] .cn-real{visibility:hidden}
.chatpage[data-chat-loading="1"] .cn-nm{color:#969696;font-weight:500}
.chatpage.chat-keyboard .cinput,
.chatpage.chat-keyboard .ctools{position:relative;z-index:30;flex-shrink:0}
.chatpage.chat-keyboard .body{padding-bottom:0}
/* 键盘态只保留输入行：相册/通话/礼物/表情/更多这一排和面板都收起，
   否则键盘上方会多叠一整行。iOS 的「上一项/下一项/完成」属于系统输入助手，
   不是页面 DOM，无法用 CSS 删除。 */
.chatpage.chat-keyboard > .ctools,
.chatpage.chat-keyboard > .ctools-more,
.chatpage.chat-keyboard > .ctools-emoji,
.chatpage.chat-keyboard > .cvoice{display:none!important}
/* 键盘态（真机 f_0056）：输入行中心 376.25、工具条图标中心 424.6、键盘顶 448.12 ——
   图标中心仍是「输入框底 +31」，但工具条底到键盘顶另有 6.2 白，所以补在下面。 */
.chatpage.chat-keyboard .ctools{padding-bottom:6.2px}
.msg-list [data-static-entry="1"]{cursor:default;pointer-events:none}

/* ================================================================
   视频约会（f_0370~f_0374 双列卡片 / f_0376~f_0381 全屏流）
   量尺：432×960 帧 ÷1.2 = 360×800；y 先减 44（系统状态栏）得「内容相对」坐标，
   与浏览器里 .sysbar=0 的截图同坐标系（见 docs/14 §十九）。
   列表：头 85.2（导航 37 + Tab 行 48.2）—— 网格：左右 11 / 列缝 6.7 / 行缝 6 / 卡 166×213。
   全屏流：本机没有真实推流，照片位用 TA 本人的头像铺满（不伪造视频、不挂假认证标）。
   ================================================================ */
.vdt{display:flex;flex-direction:column;height:100%;background:#fff}
.vdt .navbar{height:37px}
/* 真机 f_0062：栅格从 y96 起（导航 37 + 分类行 59） */
.vdt-tabs{flex:none;height:59px;display:flex;align-items:center;gap:18.3px;padding:0 6.7px}
.vdt-tab{position:relative;font-size:15px;line-height:1;color:#82828C;cursor:pointer}
.vdt-tab.on{font-size:18px;font-weight:700;color:#111}
/* 真机 a28fb78a f_0174「推荐」右上角那个红点（同屏 5× 放大逐像素量）：
   红团 bbox 帧 x64..78 / y154..172 → 9.4 CSS，**中心 x44.4、appY58.1**，也就是说它压在
   「荐」右沿上（荐 ink 到 x68 → 42.5 CSS），不是排在字右边空一截。
   同一行的 R-G 剖面 16→24→30→39→45→50→52→52→50→43→42→37→33→31→25 是**连续爬升再连续回落**，
   说明这是**软边光斑**（视频里被 4:2:0 色度再糊了一道），不是硬边圆点；峰值 R-G 只有 52。
   上一版 right:-8px/top:-3.5px/8px 硬圆 + opaque #FF7E96：中心偏右 2.5 CSS、边缘是硬切。
   再量**过红点中心那一列的亮度**（亮度不被 4:2:0 色度下采样破坏，可用）：最暗只到 lum 207
   （rgb 243,189,202 / 248,196,208），而 #FF7E96 实心点的 lum 是 167 —— 差 40，说明真机那个
   **不是饱和红点，是一团很淡的粉光**（上一版 #FF7E96 是照「聊天页新消息点」抄来的，抄错了对象）。
   亮度剖面上，心色 (243,189,202) 在 y160..170 这 11 帧px（≈7 CSS）里一直维持，两边各约 3 CSS 才收干净 ——
   所以是「**内芯 7 CSS 接近实心 + 外圈 3 CSS 渐隐**」，不是一坨大模糊。
   改：11.6px 圆内做径向渐变（内芯 44% 实心 → 外圈渐隐），心色取实测 #F4BECC。 */
.vdt-tab.on::after{content:"";position:absolute;right:-7.6px;top:-1.1px;width:9.8px;height:9.8px;border-radius:50%;
  background:radial-gradient(circle at 50% 50%,#F4BECC 0%,#F4BECC 40%,rgba(244,190,204,.7) 66%,
    rgba(250,214,223,.32) 84%,rgba(252,225,232,.16) 94%,rgba(255,255,255,0) 100%)}
.vdt-body{flex:1;min-height:0;overflow-y:auto;-webkit-overflow-scrolling:touch;background:#fff}
/* 真机 a28fb78a f_0174：列1 x10.6..175.6 / 列2 x183.1..348.8（卡宽 165.6、列距 7.5、左右边距 10.6）；
   行 1/2/3 = appY 93.1..304.4 / 311.2..521.2 / 528.8..739.4（卡高 210.5、行距 7.2）。
   上一版 padding 12.5 + 列距 6.9 + 卡高 208.8 是按旧基线量的。 */
.vdt-grid{display:grid;grid-template-columns:1fr 1fr;gap:7.2px 7.5px;padding:0 10.6px 16px}
/* 真机 f_0062：卡 163.7×208.8、左右边距 12.5/13.1、列距 6.9、行距 6.8 */
/* 圆角 12 → **5**：真机 f_0174 量卡片**下方两角**（那里是暗色渐变、最干净）：14×14 角块里
   「白像素数」8 个样本中位 **22**（换算 R≈6.3 未校正）。同一把尺子量我们自己：
   CSS 12 → 中位 87（R 12.6）、CSS 6 → 中位 29.5（R 7.3），两点线性反解 → 真机 ≈ **5.0** CSS
   （纯面积比 sqrt(22/29.5)=0.864 → 5.2；两种算法都落在 5 附近）。注意别用合成色块标定：
   拿 8 级半径的测试色块拟合得 8.0，和真机卡片的底色/内容不一样，标不准。 */
.vdt-card{position:relative;height:210.5px;border-radius:5px;overflow:hidden;background:#F1F1F5;cursor:pointer}
.vdt-card>img{position:absolute;left:0;top:0;width:100%;height:100%;object-fit:cover;display:block}
.vdt-card>.vdt-cover-video{position:absolute;left:0;top:0;width:100%;height:100%;object-fit:cover;
  display:block;background:#000;pointer-events:none}
.vdt-card .vdt-cshade{position:absolute;left:0;right:0;bottom:0;height:74px;
  background:linear-gradient(180deg,rgba(0,0,0,0),rgba(0,0,0,.46))}
/* 真机 a28fb78a f_0174 逐像素复量（第 6 张卡，照片亮、边界清楚）：
   胶囊外沿 y924..954 → 高 19.4 CSS（上一版 15.6 取自旧基线 f_0370，按当前基线改回）；
   行 y939 上暗区 x487..550 → 宽 39.4；圆点墨迹 x496..507 / y935..944 → 6.7×6.2，绿 **(113,200,12) ≈ #7ED321**
   （上一版写成薄荷绿 #3FD98C，方向错了）；「在线」白字墨迹 x511..542.5 → 19.7 CSS 两字 → 字号 ≈10.5（上一版 13 偏大）；
   胶囊距卡右沿 (558−550)/1.6 ≈ 5.0、距卡顶 (924−916)/1.6 ≈ 5.0。 */
.vdt-card .vdt-chip{position:absolute;right:5px;top:5px;height:19.4px;padding:0 4.4px;border-radius:9.7px;
  background:rgba(0,0,0,.42);display:flex;align-items:center;gap:3px;font-size:10.5px;line-height:1;color:#fff}
.vdt-card .vdt-chip i{width:6.7px;height:6.7px;border-radius:50%;background:#7ED321}
.vdt-card .vdt-chip.warm i{background:#FFB020}
/* 真机：视频按钮 28.1×29.4 @右11.2/下11.9 */
.vdt-card .vdt-btn{position:absolute;right:8.75px;bottom:12.5px;width:31.2px;height:31.2px;border-radius:50%;
  background:linear-gradient(140deg,#FF93A6,#F94A63 58%,#F5327A);color:#fff;
  display:flex;align-items:center;justify-content:center;box-shadow:0 2px 7px rgba(249,74,99,.38)}
/* 卡内文字左沿按 f_0370 卡1 白字墨迹量：x 13.3 起（CJK 左侧留白约 1）→ 盒左 12.3；
   两行底内缩：昵称墨迹 14.1、年龄行 37.8（我们 15/20 + 12/16 + margin 5 落 15/40，差 2~3css）。 */
.vdt-meta{position:absolute;left:12.3px;right:46px;bottom:9.4px;color:#fff}
/* 真机：年龄城市墨迹 y257.2..267.9（13px）、昵称墨迹 y279.1..292.9（17px 粗），卡底 304.8 */
.vdt-meta .l1{display:block;font-size:13px;line-height:17px;text-shadow:0 1px 3px rgba(0,0,0,.5)}
.vdt-meta .l2{display:block;margin-top:3.4px;font-size:15px;line-height:20px;font-weight:600;text-shadow:0 1px 3px rgba(0,0,0,.5);
  overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.vdt-msg{grid-column:1/-1;padding:30px 0;text-align:center;font-size:13px;color:#8A8A94}

/* 全屏视频约会流 */
.vds{position:relative;flex:1;min-height:0;background:#000;overflow:hidden;touch-action:pan-x}
.vds-slide{position:absolute;left:0;top:0;right:0;bottom:0}
.vds-slide img{width:100%;height:100%;object-fit:cover;display:block}
.vds-shade{position:absolute;left:0;right:0;bottom:0;height:260px;pointer-events:none;
  background:linear-gradient(180deg,rgba(0,0,0,0),rgba(0,0,0,.5) 58%,rgba(0,0,0,.72))}
/* 全屏流的一圈几何全部按 f_0381 量（内容坐标 = 帧px/1.2 - 44，即先扣掉 44css 状态栏）。
   上一版整圈都偏低：返回箭头墨迹该在 y1.0（紧贴内容顶），昵称块该在「距内容底 152.5~167.5」，
   右侧列该在「距底 135~271.7」—— 实测分别是 y14、距底 136.3、距底 153~300，所以逐条挪。 */
/* top 同理（见 .uh-topbar 那条注释）：全屏流是 edge-to-edge，top:-7 会顶到状态栏底下甚至出屏，
   原来的基线把 44 的状态栏算进了「内容坐标」，这里换成壳给的真实 --safe-top。 */
.vds-back{position:absolute;left:2.3px;top:calc(var(--safe-top,0px) - 7px);width:30px;height:30px;display:flex;align-items:center;
  justify-content:center;cursor:pointer;z-index:4}
/* 右侧列：头像 48、与「私信」按钮之间空 37（f_0381 里这段空档有头像的 3/4 高，不是紧挨）。
   列底 = 距内容底 134 → 私信文字墨迹落在 135~147、气泡图标 160~186、头像 223.4~271.7，与帧一致。 */
.vds-side{position:absolute;right:14px;bottom:134px;display:flex;flex-direction:column;align-items:center;
  gap:37px;z-index:4}
.vds-av{position:relative;width:48px;height:48px}
.vds-av img{width:48px;height:48px;border-radius:50%;object-fit:cover;object-position:top;
  box-shadow:0 0 0 1.6px rgba(255,255,255,.92)}
.vds-add{position:absolute;left:50%;bottom:-8px;transform:translateX(-50%);width:18px;height:18px;border-radius:50%;
  background:#FA3B54;color:#fff;font-size:12px;font-style:normal;line-height:16px;text-align:center;
  box-shadow:0 0 0 1.4px #fff}
.vds-act{display:flex;flex-direction:column;align-items:center;gap:11px;color:#fff;font-size:11px;cursor:pointer;
  text-shadow:0 1px 3px rgba(0,0,0,.5)}
.vds-act .ico{width:26px;height:26px}
/* 左下昵称块：f_0381 墨迹 x18.3起 / 昵称 588.5~603.5 / 徽章行 614.3~631（距底 125~167.5）。
   上一版 bottom:110 让整块压到距底 110~150，和按钮之间只剩 9 的空档（真机是 50）。 */
.vds-info{position:absolute;left:18.3px;bottom:125px;z-index:4;color:#fff;max-width:62%}
.vds-name{font-size:15px;font-weight:600;text-shadow:0 1px 3px rgba(0,0,0,.55);
  overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.vds-badges{display:flex;align-items:center;gap:6px;margin-top:7px;flex-wrap:wrap}
.vds-real{display:inline-flex;align-items:center;gap:2px;height:16px;padding:0 6px;border-radius:8px;
  background:rgba(45,199,155,.92);font-size:10px;line-height:1}
.vds-lv{display:inline-flex;align-items:center;gap:3px;height:16px;padding:0 6px;border-radius:8px;
  background:linear-gradient(120deg,#FF8FB0,#F1457E);font-size:10px;line-height:1;font-weight:600}
.vds-cta{position:absolute;left:23.3px;right:23.3px;bottom:47.5px;height:55px;border-radius:27.5px;z-index:4;
  background:linear-gradient(100deg,#FF88AC,#FA3B5E 55%,#F5327A);display:flex;flex-direction:column;
  align-items:center;justify-content:center;color:#fff;cursor:pointer;box-shadow:0 6px 18px rgba(250,59,94,.36)}
.vds-cta .t{display:flex;align-items:center;gap:6px;font-size:16px;font-weight:700;line-height:1.1}
.vds-cta .t .ico{width:19px;height:19px}
.vds-cta .s{margin-top:2px;font-size:10.5px;line-height:1;opacity:.94}
.vds-cta.off{background:linear-gradient(100deg,#C9C9D2,#A9A9B6);box-shadow:none}

.gc-loading{min-height:240px;display:flex;align-items:center;justify-content:center;color:#9A98A2;font-size:13px;background:#fff}

/* ================================================================
   家族群聊（真机录像 a28fb78a f_0004 / f_0006 / f_0015 / f_0034 / f_0094）
   家族广场卡片「进入聊天」的落点，屏幕 id = famchat，根节点 .famchat。
   量尺：576×1280 帧；CSS x = 帧px/1.6，CSS y = (帧px − 70.4)/1.6
   （= 页面自身的坐标系，和浏览器截图 360×756 同一把尺子；70.4 是本录像的状态栏高）。
   * 顶栏 46（帧 y70..144）：‹ 墨迹 x13.8..22.5 y16..31.6 / 未读红胶囊 x33.8..52.5 y15.4..32.2 /
     标题纯文字行 ink x65.6..262.5 y18.5..32.9 / 奖杯 ink x295.6..315.6 y14.1..33.5 /
     双人 ink x328.1..347.5 y14.1..33.5（右边距 12.5）
   * 招募条 30（帧 y144..192）：紫→粉横向渐变，行均值 #A496BA(左) → #B36988(右)；
     红包图标 13×12 @ x11.9 y57.2；文案 ink 起 x37.5（数字橙金 #FFAB2E）；chevron ink x339.4..343.8
   * 列表底 #FDFDFD（视频压缩值，实际就是白）；
     第一条是**家族语音消息卡**（整条通栏，会随列表滚走）：80.6 高、粉→蜜桃渐变
     #FE769C(左) → #FDCCBF(右)；头像 50 r8 @ x11.3 y90.6；昵称白字 15px ink 起 x72.5 y93.5..105.4；
     性别年龄胶囊紧随昵称；第二行内容 ink y116..133；右下时长白字 11px 右缘 x346.9（右边距 13）
   * 普通消息行：头像 41.25 r6.6 @ x8.8；昵称行（昵称 13px + 性别年龄胶囊 + 家族头衔胶囊）在气泡**上方**，
     ink 起 x61.9；气泡左沿 x61.9（= 头像右 50 + 11.9）
   * 文明公告 灰底块 x38.8..321.2 y571..632.2（r8 / #EFF3F6），三行灰字，挂在列表末尾
   * 底部输入区（顶 646、高 110）：输入胶囊 312.5×36.2 r18.1 @ x40..352.5 / y648.5..684.7（底 #F6F6F8）；
     胶囊内「顶」灰胶囊 35×22.5 r11.25 @ x48.8（底 #DBDBDB，字 #B9B9BE）；
     工具栏 6 格等分（每格 60），图标 23 上下，行中心 y715.3 —— 真机帧量到 5 个中心
     28.4 / 148.1 / 210 / 270.6 / 331.6（等分格中心 30/90/150/210/270/330，最大差 1.6）
   ================================================================ */
.famchat{display:flex;flex-direction:column;height:100%;background:#fff}
.famchat .fc-nav{position:relative;flex:none;height:46px;background:#fff}
.famchat .fc-nav .fcn-back{position:absolute;left:0;top:0;width:60px;height:46px;color:#26262A;cursor:pointer}
/* ‹ 真机 ink x13.8..22.5 / y16..31.6：chevL 的 viewBox 24 里墨迹从 6.45 起、高 17.1，
   所以图标盒 22 + 左上角 (7.9,12.85) 正好把墨迹放到量到的位置上。 */
.famchat .fc-nav .fcn-back .ico{position:absolute;left:7.9px;top:12.85px;width:22px;height:22px}
/* 未读红胶囊：真机 x33.8..52.5 y15.4..32.2（18.7×16.8）压在 ‹ 的右肩上 */
.famchat .fc-nav .fcn-unread{position:absolute;left:33.8px;top:15.4px;min-width:18.7px;height:16.8px;
  padding:0 5px;box-sizing:border-box;border-radius:8.4px;background:#FA3B54;color:#fff;font-style:normal;
  font-size:11px;line-height:16.8px;text-align:center;font-weight:500}
.famchat .fc-nav .fcn-unread[hidden]{display:none}
/* 标题是「家族名 宣言」纯文字单行：ink x65.6 起，字 16.5 */
.famchat .fc-nav .fcn-title{position:absolute;left:65.6px;right:52px;top:0;height:46px;display:flex;
  align-items:center;color:#26262A;overflow:hidden;white-space:nowrap}
.famchat .fc-nav .fcn-title b{font-size:15.5px;font-weight:600;line-height:1}
.famchat .fc-nav .fcn-title em{font-style:normal;font-size:15.5px;font-weight:400;line-height:1;margin-left:7px;
  overflow:hidden;text-overflow:ellipsis}
/* 右侧两枚线性图标：奖杯 ink x295.6..315.6 / 双人 ink x328.1..347.5，垂直中心 23.8 */
.famchat .fc-nav .fcn-ic{position:absolute;top:9.8px;width:28px;height:28px;display:flex;align-items:center;
  justify-content:center;color:#26262A;cursor:pointer}
.famchat .fc-nav .fcn-ic .ico{width:28px;height:28px}
/* 双人那张自描图标的墨迹只占盒子的 0.85，进 22.8 的盒子才落回真机 ink 的 19.4 宽 */
.famchat .fc-nav [data-fcn-members] .ico{width:22.8px;height:22.8px}
/* 真机两个图标 ink：奖杯 x295.6..315.6 / 双人 x328.1..347.5，垂直中心都是 23.8 */
.famchat .fc-nav [data-fcn-rank]{left:291.6px}
.famchat .fc-nav [data-fcn-members]{left:324.3px}

/* 招募条：紫→粉 */
.famchat .fc-marquee{position:relative;flex:none;height:30px;display:flex;align-items:center;
  background:linear-gradient(90deg,#A496BA 0%,#B36988 100%);color:#fff}
.famchat .fc-marquee[hidden]{display:none}
.famchat .fc-marquee .fm-rp{width:13px;height:12px;object-fit:contain;margin-left:11.9px;flex:none}
.famchat .fc-marquee .fm-tx{margin-left:11.3px;font-size:13px;line-height:1;overflow:hidden;
  text-overflow:ellipsis;white-space:nowrap}
.famchat .fc-marquee .fm-tx b{color:#FFAB2E;font-weight:500}
.famchat .fc-marquee .fm-go{margin-left:auto;margin-right:14.2px;color:#fff;opacity:.92;flex:none;display:flex}
.famchat .fc-marquee .fm-go .ico{width:11px;height:11px}

.famchat .fc-body{flex:1;min-height:0;overflow-y:auto;background:#fff;padding:0}
.famchat .fc-msgs{padding:0}

/* 家族语音消息卡（整条通栏、粉→蜜桃渐变；房主/成员说话那条都长这样） */
.famchat .fc-voice{position:relative;display:flex;height:80.6px;padding:14.5px 0 0 10.9px;
  background:linear-gradient(90deg,#FE769C 0%,#FDCCBF 100%);cursor:pointer}
.famchat .fc-voice>*{position:relative;z-index:1}
.famchat .fc-voice .fv-av{width:51px;height:51px;border-radius:8px;object-fit:cover;flex:none;background:#F1EFF3}
.famchat .fc-voice .fv-main{flex:1;min-width:0;margin-left:10.6px;margin-top:1px}
.famchat .fc-voice .fv-row{display:flex;align-items:center;gap:4.2px;height:17.2px}
.famchat .fc-voice .fv-nm{font-size:13.6px;font-weight:600;color:#fff;line-height:1;white-space:nowrap;
  overflow:hidden;text-overflow:ellipsis;max-width:170px}
.famchat .fc-voice .fv-tx{margin-top:9.7px;font-size:13.5px;line-height:1;color:#fff;
  overflow:hidden;text-overflow:ellipsis;white-space:nowrap;max-width:250px}
.famchat .fc-voice .fv-play{display:flex;align-items:center;gap:5px;color:#fff}
.famchat .fc-voice .fv-play .ico{width:12px;height:12px}
.famchat .fc-voice .fv-dur{position:absolute;right:11.9px;bottom:8.5px;font-size:11.5px;line-height:1;color:#fff;
  font-variant-numeric:tabular-nums}

/* 消息行：昵称行在气泡上方（群聊口径） */
.famchat .fc-msgs .msg{display:flex;gap:11.9px;padding:0 9px 0 8.8px;margin-bottom:16px;align-items:flex-start}
.famchat .fc-msgs .msg .avatar{width:41.25px;height:41.25px;border-radius:6.6px;flex:none;object-fit:cover;
  background:#EEEDF2}
.famchat .fc-msgs .msg .fm-col{flex:1;min-width:0}
.famchat .fc-msgs .msg .fm-head{display:flex;align-items:center;gap:6px;height:17px;margin-bottom:4.6px}
.famchat .fc-msgs .msg .fm-nm{font-size:13px;line-height:1;color:#5B5B60;white-space:nowrap;overflow:hidden;
  text-overflow:ellipsis;max-width:180px}
.famchat .fmg-pill, .fammembers .fmg-pill, .fc-sheet .fmg-pill{display:inline-flex;align-items:center;gap:2.5px;height:16.8px;padding:0 5.6px;
  border-radius:8.4px;font-size:11px;line-height:1;flex:none;box-sizing:border-box}
/* 真机 f_0015 的语音卡上，性别年龄胶囊是**只描边、无实底**的（卡片粉色透出来），
   白底消息行上看着像白底只是因为底本来就是白的（f_0004 姜也那行）。所以这里不填色，
   两个面都跟真机一致。 */
.famchat .fmg-pill.m, .fammembers .fmg-pill.m, .fc-sheet .fmg-pill.m{color:#5B78C8;background:transparent;box-shadow:inset 0 0 0 1px #B9C8F0}
.famchat .fmg-pill.f, .fammembers .fmg-pill.f, .fc-sheet .fmg-pill.f{color:#D4618C;background:transparent;box-shadow:inset 0 0 0 1px #F5BBD2}
.famchat .fmg-city{display:inline-flex;align-items:center;gap:2px;height:16.8px;padding:0 7px;border-radius:8.4px;
  background:#C9C9CC;color:#fff;font-size:11px;line-height:1;flex:none;max-width:104px;overflow:hidden;
  text-overflow:ellipsis;white-space:nowrap}
.famchat .fmg-title{display:inline-flex;align-items:center;height:16.8px;padding:0 6px;border-radius:5px;
  background:#3B4256;color:#fff;font-size:11px;line-height:1;flex:none}
.famchat .fc-msgs .msg .bub{display:inline-block;max-width:230px;padding:9px 12.6px;border-radius:4px 12px 12px 12px;
  background:#F2F2F4;font-size:14px;line-height:20px;color:#3A3A3E;word-break:break-word}
.famchat .fc-msgs .msg .bub img.msg-sticker{display:block;max-width:178px;border-radius:8px}
.famchat .fc-msgs .msg .bub.bub-rp{background:linear-gradient(135deg,#FF7A45,#FF3B30) !important;color:#FFF3D6}
.famchat .fc-msgs .msg.system{justify-content:center;padding:0}
.famchat .fc-msgs .msg.system .bub{background:rgba(0,0,0,.05);color:#87888A;font-size:11.7px;line-height:15px;
  padding:7px 12px;border-radius:10px}

/* 文明公告：列表最后一项，左右各 38.8 */
.famchat .fc-notice{margin:4px 38.8px 14px;padding:10.6px 13.7px;border-radius:8px;background:#EFF3F6;
  font-size:13px;line-height:13.7px;color:#87888A}

/* 底部输入区 */
.famchat .fc-input{flex:none;height:110px;background:#fff;display:flex;flex-direction:column}
/* 非成员态（从家族广场点「进入聊天」但不是本族成员）：整条输入区收起来，只留加入引导。
   [hidden] 必须显式写成 display:none —— 上面那条 display:flex 会盖掉 UA 的 [hidden] 规则。 */
.famchat .fc-input[hidden]{display:none}
.famchat .fc-irow{flex:none;height:38.7px;padding:2.5px 7.5px 0 0;display:flex;align-items:center}
.famchat .fc-irow .fc-mic{width:22px;height:22px;margin-left:11.5px;flex:none;display:flex;align-items:center;
  justify-content:center;color:#3A3A3E;cursor:pointer}
/* 真机那个「声波」ink 是 11.9×15（ciWave 的 viewBox 10×14.4，等比放进 16 盒正好） */
.famchat .fc-irow .fc-mic .ico{width:16px;height:16px}
.famchat .fc-ipt{flex:1;min-width:0;height:36.2px;margin-left:4px;border-radius:18.1px;background:#F6F6F8;
  display:flex;align-items:center;cursor:text}
.famchat .fc-ipt .fc-top{height:22.5px;padding:0 11.5px;margin-left:8.8px;border-radius:11.25px;background:#DBDBDB;
  color:#B9B9BE;font-size:12px;line-height:22.5px;flex:none}
.famchat .fc-ipt .fc-top[hidden]{display:none}
.famchat .fc-ipt input{flex:1;min-width:0;height:100%;border:0;outline:0;background:transparent;
  font-size:13.4px;color:#3A3A3E;padding:0 12px}
.famchat .fc-ipt input::placeholder{color:#B9B9BE;opacity:1}
.famchat .fc-ipt .fc-send{flex:none;margin-right:11px;font-size:13.4px;color:#FF4C81;font-weight:600;
  cursor:pointer}
.famchat .fc-ipt .fc-send[hidden]{display:none}
.famchat .fc-tools{flex:1;display:flex;align-items:center;padding-bottom:10.1px}
.famchat .fc-tools .fc-tool{flex:1 1 0;min-width:0;height:100%;display:flex;align-items:center;
  justify-content:center;cursor:pointer;position:relative}
/* 每格图标按真机 f_0004 逐个量到的墨迹尺寸定（六个工具 ink：23.8 / 24.4 / 36.9×35.6（含「新」）/
   20×25.6 / 27.5×28.1 / 27.5×28.1）。素材图自带留白，所以盒子的值比墨迹大。 */
.famchat .fc-tools .fc-tool img{height:24px;object-fit:contain}
/* 福袋：真机 f_0004 墨迹 46×40（帧px）= 28.8×25 CSS，我们原来只 23.8×23.1 —— 放大到 48 盒后 ≈27.1×26.4 */
.famchat .fc-tools [data-fc-tool="fudai"] img{width:48px;height:48px}
/* 礼物：普通线性图标，不再带右上「新」角标。 */
.famchat .fc-tools [data-fc-tool="gift"] img{width:27px;height:27px}
.famchat .fc-tools [data-fc-tool="redpack"] img{width:25px;height:25px}
.famchat .fc-tools .fc-tool .ct-ic{width:23.1px;height:22.5px;display:block}
.famchat .fc-tools [data-fc-tool="emoji"] .ct-ic{width:27.4px;height:27.4px}
.famchat .fc-tools [data-fc-tool="more"] .ct-ic{width:29.5px;height:29.5px}
.famchat .fc-tools .fc-tool .ct-ic svg{display:block;width:100%;height:100%;overflow:visible}
/* 家族群聊 · 键盘态：真机 f_0056 的口径和聊天页一致（输入行随可视窗口上移，工具条留在它下面） */
.famchat.fc-kb .fc-input{position:relative;z-index:30;flex-shrink:0}
.famchat.fc-kb .fc-body{padding-bottom:8px}

/* ===================== 家族成员列表 fammembers =====================
   全部量自 a28fb78a（576×1280 = 360×800 @1.6）：帧 f_0108（女神）/ f_0116（男神）
   css x = 帧px/1.6，css y = (帧px − 70.4)/1.6
   ‹ 墨迹 x12..22 y10..28（10×18）；标题「成员列表」墨迹 y12..28（17.5px，居中）
   Tab 行：女神（选中，17px #1A1A1A + 右侧粉晕）x8..44，男神（14px 灰）x58..90，墨迹 y62..78
   行：头像 55.6 r6 @x11.25（首行 y101.6）×行距 75.5；文字列 x91.25；
       昵称 13.5px；性别年龄胶囊紧随；「日贡献值：N」13.5px，墨迹 y137..148.5；
       行底 1px 分隔线 #ECECEE，x90..345 */
.fammembers{position:absolute;inset:0;background:#fff;display:flex;flex-direction:column;overflow:hidden}
.fammembers .fmm-nav{position:relative;flex:none;height:40px;background:#fff}
.fammembers .fmm-back{position:absolute;left:12px;top:10px;width:10px;height:18px;display:flex;
  align-items:center;color:#1A1A1A;cursor:pointer}
.fammembers .fmm-back .ico{width:10px;height:18px}
.fammembers .fmm-title{position:absolute;left:0;right:0;top:11.5px;text-align:center;
  font-size:17.5px;line-height:1;color:#1A1A1A}

.fammembers .fmm-tabs{position:relative;flex:none;height:59px;display:flex;align-items:center;gap:14px;
  padding:7.4px 0 0 8px;background:#fff}
.fammembers .fmm-tab{position:relative;display:inline-flex;align-items:center;font-size:14px;line-height:1;
  color:#9A9AA2;cursor:pointer}
.fammembers .fmm-tab.on{font-size:17px;font-weight:500;color:#1A1A1A}
.fammembers .fmm-glow{display:none;position:absolute;right:-10px;top:50%;width:17px;height:17px;
  margin-top:-8.5px;border-radius:50%;
  background:radial-gradient(circle at 50% 50%,rgba(255,138,168,.62) 0%,rgba(255,150,178,.34) 45%,rgba(255,160,185,0) 72%)}
.fammembers .fmm-tab.on .fmm-glow{display:block}

.fammembers .fmm-list{flex:1;min-height:0;overflow-y:auto;background:#fff}
.fammembers .fmm-empty{padding:60px 0;text-align:center;font-size:13.5px;color:#9A9AA2}
.fammembers .fmm-row{position:relative;display:flex;align-items:flex-start;height:75.5px;
  padding:6.8px 0 0 11.25px;box-sizing:border-box}
.fammembers .fmm-row .avatar{width:55.6px;height:55.6px;border-radius:6px;object-fit:cover;flex:none;
  background:#EEEDF2}
.fammembers .fmm-col{flex:1;min-width:0;margin-left:24.4px;padding-top:1.5px}
.fammembers .fmm-head{display:flex;align-items:center;gap:9.2px;height:17px}
.fammembers .fmm-nm{font-size:16px;font-weight:400;line-height:1;color:#1A1A1A;white-space:nowrap;overflow:hidden;
  text-overflow:ellipsis;max-width:150px}
.fammembers .fmm-sub{margin-top:23.75px;font-size:13.5px;line-height:1;color:#8A8A94}
/* 真机 f_0109：「日贡献值：」灰 #7D7B7E，数值紫 #726996 */
.fammembers .fmm-sub b{font-weight:400;color:#7C5FD0}
.fammembers .fmm-line{position:absolute;left:90px;right:15px;bottom:0;height:1px;background:#ECECEE}

/* ===================== 家族排行榜面板（famchat 里按下弹） =====================
   量自 a28fb78a f_0096（576×1280；css x = 帧px/1.6，css y = (帧px − 70.4)/1.6 = 页面坐标）
   面板上沿 249.1（帧 y469）；Tab 三列居中 60/180/300，墨迹 y272.9..284.8（≈13.5px #4A4A4A，
   三列大小/颜色一致，没有下划线）；前三名金/紫圈 + 排名徽章 + 昵称（#1 墨迹 y381..393、
   #2/#3 y415..425.6）+ 性别年龄胶囊 + 「魅力值：N」红字（#1 y424..433、#2/#3 y461.6..471）；
   4 名起：名次灰字 + 头像 40.6 + 昵称（墨迹 y492.8..499）+ 胶囊（y513..522.5）+
   右对齐「魅力值：N」右缘 343.75；行距 71；底部提示墨迹 y711..723.5 */
.fc-dim{position:absolute;inset:0;background:rgba(0,0,0,.45);z-index:8}
.fc-dim[hidden]{display:none}
.fc-sheet{position:absolute;left:0;right:0;top:249.1px;bottom:0;z-index:9;background:#fff;
  border-radius:14px 14px 0 0;display:flex;flex-direction:column;overflow:hidden}
.fc-sheet[hidden]{display:none}
.fc-sheet .fcr-tabs{flex:none;height:40px;margin-top:10.4px;display:flex;align-items:center}
.fc-sheet .fcr-tab{position:relative;flex:1;text-align:center;font-size:13.5px;line-height:1;
  color:#4A4A4A;cursor:pointer}
/* 选中 Tab 的粉色短条：真机 f_0100 量到 x453..480（17.5 CSS 宽）、y558..567（6.25 CSS 高），
   落在 Tab 文字下方 25 CSS 处（Tab 行高 40，所以它其实压在台座区上沿）。 */
.fc-sheet .fcr-tab.on{color:#1A1A1A}
.fc-sheet .fcr-tab.on::after{content:"";position:absolute;left:50%;margin-left:-8.75px;top:45.5px;
  width:17.5px;height:6.25px;border-radius:3.2px;background:#FF4E86}
/* 真机 f_0100 的台座是正对屏幕中心（恩爱值墨迹中心 x180.9、心形中心 x181.5）—— 说明真机没有占宽的滚动条。
   桌面 Chrome 的经典滚动条会占掉 15px，把整块内容推左 7.5 CSS，所以这里把滚动条宽度归零。 */
.fc-sheet .fcr-body{flex:1;min-height:0;overflow-y:auto;scrollbar-width:none}
.fc-sheet .fcr-body::-webkit-scrollbar{width:0;height:0}
.fc-sheet .fcr-tip{flex:none;height:32px;display:flex;align-items:center;justify-content:center;
  font-size:13.5px;color:#9A9AA2}

.fc-sheet .fcr-podium{position:relative;height:245.3px}
/* 台座高度按真机稳定帧 f_0094 重算：第一行（第 4 名）头像墨迹顶 appY 545.0、
   右侧「魅力值：N」墨迹 560.0..569.4 → 行顶 = appY544.8 → 245.3 = 544.8 − 299.5。
   上一版 189.6 是按过渡帧量的，导致台座的「魅力值」行（#1 479.2 / #2·#3 514.2）压到列表行上。
   行距核对：真机第 4/5/6 行的榜值行 560.0 / 631.2 / 702.5 → 步进 71.2、71.3，我们的行高 71 ✓。 */
.fc-sheet .fcr-name{position:absolute;text-align:center;font-size:13.5px;line-height:1;color:#1A1A1A}
.fc-sheet .fcr-name.big{font-size:12px}
.fc-sheet .fcr-pillrow{position:absolute;display:flex;justify-content:center;align-items:center;gap:5px}
.fc-sheet .fcr-value{position:absolute;text-align:center;font-size:12.5px;line-height:1;color:#F7407C}
.fc-sheet .fcr-ring{position:absolute;display:flex;align-items:center;justify-content:center;
  border-radius:50%}
.fc-sheet .fcr-ring img{border-radius:50%;object-fit:cover;display:block}
.fc-sheet .fcr-badge{position:absolute;transform:translateX(-50%);height:17px;
  min-width:26px;padding:0 6px;border-radius:9px;font-size:12px;line-height:17px;color:#fff;
  text-align:center;box-sizing:border-box}

.fc-sheet .fcr-row{position:relative;display:flex;align-items:flex-start;height:71px;padding-left:0}
.fc-sheet .fcr-no{width:40.6px;flex:none;text-align:center;font-size:14px;line-height:1;
  color:#B0B0B8;padding-top:14px}
.fc-sheet .fcr-av{position:absolute;left:40.6px;top:0;width:40.6px;height:40.6px;border-radius:50%;
  object-fit:cover;background:#EEEDF2}
.fc-sheet .fcr-col{position:absolute;left:100px;right:0;top:2px}
.fc-sheet .fcr-rnm{font-size:13.5px;line-height:1;color:#1A1A1A;display:block;
  white-space:nowrap;overflow:hidden;text-overflow:ellipsis;max-width:170px}
.fc-sheet .fcr-rpill{display:flex;align-items:center;gap:6px;margin-top:13px}
.fc-sheet .fcr-rval{position:absolute;right:16.25px;top:14px;font-size:13.5px;line-height:1;
  color:#F7407C}
.fc-sheet .fcr-ring-gold{background:linear-gradient(180deg,#FFC63A 0%,#FF8A1F 100%)}
.fc-sheet .fcr-ring-lav{background:linear-gradient(180deg,#E7E1FB 0%,#B7A6E8 100%)}
.fc-sheet .fcr-badge-gold{background:linear-gradient(180deg,#FFC63A 0%,#FF8A1F 100%);
  box-shadow:0 0 0 1.5px #fff}
.fc-sheet .fcr-badge-lav{background:linear-gradient(180deg,#D9D1F5 0%,#B7A6E8 100%);
  box-shadow:0 0 0 1.5px #fff}

/* 恩爱榜「双人台座」—— 真机录像 a28fb78a f_0100_0050.0s.jpg 逐像素量（面板上沿 249.38，我们 249.1）。
   台座坐标原点 appY299.5 = 面板顶 + 10.4 + 40（Tab 行高），下面所有 top 都是相对它：
   · 翅膀：左右各 43.1×40.6 CSS（真机墨迹 69×65 帧px），外沿 x85 / x275，顶 appY308.1；
   · 光环：三点拟合 (116.3,310)(181.6,366)(246.9,310) → 圆心 (180.6,299.9)、直径 132.2，只露下半圈，
     所以 top 给 −66.1 让圆心正好落在台座原点上；
   · 头像：两个 d72 的圆（圆心 x 148.6 / 212.6，并集 x112.6..248.6 = 真机量到的 136 CSS 宽），
     且整块台座在 appY308 处被**齐平裁切**（真机 f_0100 逐列量：x200..386 的上沿恒在 307.5~308.1，
     是直边不是圆弧）—— 所以 fcr-love 用 clip-path:inset(8.5px 0 0 0)，头像圆心落在 appY316.4，
     露出 70 CSS 宽的平顶弦；
   · 心形：53.1×40.6，圆心 (181.5, appY347.2)，压在两头像接缝上，白字「1」；
   · 两行名字墨迹顶 appY371.2 / 391.9（行距 20.7），♂ 蓝 #4EC3E8、♀ 粉 #EF6BA5，名字 13px 超 78px 省略；
   · 「恩爱值：N」墨迹 appY416.2..426.9，粉 #F7407C。 */
.fc-sheet .fcr-love{position:relative;height:136px;clip-path:inset(8.5px 0 0 0)}
.fc-sheet .fcl-wing{position:absolute;top:8.6px;width:43.1px;height:40.6px}
.fc-sheet .fcl-wing.l{left:85px}
.fc-sheet .fcl-wing.r{left:232px}
.fc-sheet .fcl-ring{position:absolute;left:114.5px;top:-63.1px;width:132.2px;height:132.2px}
.fc-sheet .fcl-av{position:absolute;top:-19.1px;width:72px;height:72px;border-radius:50%;
  object-fit:cover;background:#EEEDF2}
.fc-sheet .fcl-av.l{left:112.6px}
.fc-sheet .fcl-av.r{left:176.6px}
/* 心形：真机 f_0100 逐行取样（appY340 粉 266..316 / 348 263..316 / 356 269..310，顶 appY332、尖 appY368）
   → 墨迹 33x36 CSS、心 x 289.5。我们上一版 53.1x40.6（墨迹 48.8x37.5）整整宽了 48%，
   缩到 35.4x39 的框（r-heart.webp 墨迹占框 93%x92%）后与真机同尺寸；滤镜去掉 hue-rotate(-28deg)，
   真机心核是 #FA458E（偏品红），我们带 hue-rotate 是 #EF3776（偏橙红）。 */
.fc-sheet .fcl-heart{position:absolute;left:164.8px;top:29.5px;width:32.6px;height:39px;
  filter:hue-rotate(-32deg) saturate(.77) brightness(1.1)}
/* 心尖两侧的蓝色燕尾（真机 f_0100：左帧x240..269/右帧x310..341、顶appY355/尖appY365.5） */
.fc-sheet .fcl-bow{position:absolute;left:150px;top:55.5px;width:63.125px;height:10.5px}
.fc-sheet .fcl-no{position:absolute;left:164.8px;top:35.4px;width:32.6px;text-align:center;
  font-size:26px;line-height:1;font-weight:800;color:#fff;text-shadow:0 1px 2px rgba(186,20,86,.5)}
.fc-sheet .fcl-line{position:absolute;left:0;right:0;display:flex;align-items:center;
  justify-content:center;gap:2.4px;font-size:13px;line-height:13px;color:#1A1A1A}
.fc-sheet .fcl-line.g1{top:71.4px}
.fc-sheet .fcl-line.g2{top:92.1px}
.fc-sheet .fcl-line .sx{flex:none;width:10.6px;height:10.6px;display:block}
.fc-sheet .fcl-line.f .sx{width:7.7px}
.fc-sheet .fcl-line.m .sx{color:#79CFF2}
.fc-sheet .fcl-line.f .sx{color:#EFA6C6}
.fc-sheet .fcl-line .nm{max-width:78px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.fc-sheet .fcl-val{position:absolute;left:0;right:0;top:116.6px;text-align:center;
  font-size:11.5px;line-height:11.5px;color:#F7407C}

/* =========================================================================
   家族语音房 famroom —— 真机录像 a28fb78a f_0142_0071.0s.jpg 逐帧量出来的
   帧→CSS 换算：x = 帧px/1.6；y = (帧px − 70.4)/1.6（70.4 = 系统状态栏高）
   下面每条注释里的数字都是这帧上量到的值。
   ========================================================================= */
.famroom{position:absolute;inset:0;overflow:hidden;background:#0E0A1E}
.famroom .fr-bg{position:absolute;inset:0;background-size:cover;background-position:center}
.famroom .fr-bg::after{content:'';position:absolute;inset:0;background:
  linear-gradient(180deg,rgba(10,6,22,.52) 0%,rgba(10,6,22,.34) 20%,rgba(10,6,22,.30) 58%,rgba(10,6,26,.78) 100%)}

/* 左缘那个深色「抽屉把手」：帧 x0..18.75 y268..332（深橄榄圆角条 + 一条白竖线） */
.famroom .fr-pull{position:absolute;left:-8px;top:268px;width:27px;height:64px;border-radius:13px;
  background:rgba(28,32,22,.72)}
.famroom .fr-pull i{position:absolute;right:9px;top:25px;width:2.5px;height:14px;border-radius:2px;
  background:rgba(255,255,255,.85)}

/* —— 顶栏 ——
   房主头像 d37.5 中心(19.4,17.2)；昵称墨迹 y7.25..23.5；ID 墨迹 y26.6..39.1；
   「关注」粉胶囊 x105..154.4 y7.9..27.9（帧取色 #FF4E87→#FF8865）；
   右上到访头像 3 枚 d26 中心 x222.5/254/285.5 y17；退出电源图标 中心(331.5,17.2) 18×16.4 */
.famroom .fr-top{position:absolute;left:0;right:0;top:0;height:44px;z-index:6}
.famroom .fr-hostav{position:absolute;left:1.2px;top:-1.5px;width:37.5px;height:37.5px;border-radius:50%;
  object-fit:cover;background:#2A2340;box-shadow:0 0 0 1px rgba(255,255,255,.30)}
.famroom .fr-who{position:absolute;left:46.3px;top:3.8px;max-width:55px}
.famroom .fr-name{display:block;font-size:17px;line-height:17px;color:#fff;font-weight:500;
  white-space:nowrap;overflow:hidden;text-overflow:ellipsis;text-shadow:0 1px 3px rgba(0,0,0,.5)}
.famroom .fr-id{display:block;margin-top:7px;font-size:10.5px;line-height:10.5px;color:rgba(255,255,255,.94);
  text-shadow:0 1px 3px rgba(0,0,0,.5)}
.famroom .fr-follow{position:absolute;left:105px;top:7.9px;width:49.4px;height:20px;border-radius:10px;
  background:linear-gradient(90deg,#FF4E87,#FF8865);color:#fff;font-size:12px;line-height:20px;
  text-align:center;font-weight:500}
.famroom .fr-visits{position:absolute;left:209.5px;top:4px;display:flex;gap:5.5px}
.famroom .fr-visits img{width:26px;height:26px;border-radius:50%;object-fit:cover;
  box-shadow:0 0 0 1.4px rgba(255,255,255,.75)}
.famroom .fr-exit{position:absolute;right:19.5px;top:9px;width:18px;height:16.4px;color:#fff}
.famroom .fr-exit .ico{width:18px;height:16.4px;display:block}

/* —— 舞台：主持圈（藤环外径 67，中心(180,75)）+ 嘉宾圈（d50，中心(272,78)）——
   主持 label 墨迹 x149.4..218.1 y117.2..124.1；爱心 pill 墨迹 x168.1..191.2 y139.8..147.2 */
.famroom .fr-stage{position:absolute;left:0;right:0;top:0;height:172px;z-index:4;pointer-events:none}
.famroom .fr-hseat{position:absolute;left:146.5px;top:41.5px;width:67px;height:67px;border-radius:50%;
  background:conic-gradient(from 205deg,#FFD98A,#FF7FD6,#A97BFF,#FFE9A8,#FF7FD6,#FFD98A);
  box-shadow:0 0 14px rgba(255,140,215,.5),inset 0 0 0 2.5px rgba(255,246,214,.85)}
.famroom .fr-hseat::after{content:'';position:absolute;left:3.5px;top:3.5px;right:3.5px;bottom:3.5px;
  border-radius:50%;background:#1A1030}
.famroom .fr-hseat .fr-face{position:absolute;left:11px;top:11px;width:45px;height:45px;border-radius:50%;
  object-fit:cover;z-index:1}
.famroom .fr-gseat{position:absolute;left:247px;top:53px;width:50px;height:50px;border-radius:50%;
  box-shadow:0 0 0 1.5px rgba(255,255,255,.55),0 0 12px rgba(150,200,255,.45)}
.famroom .fr-gseat .fr-face{position:absolute;left:3px;top:3px;width:44px;height:44px;border-radius:50%;
  object-fit:cover}
.famroom .fr-hlabel,.famroom .fr-glabel{position:absolute;top:113.4px;display:flex;align-items:center;
  gap:3.4px;height:16px;max-width:92px;font-size:11.5px;line-height:16px;color:#fff;
  white-space:nowrap;overflow:hidden;text-overflow:ellipsis;text-shadow:0 1px 3px rgba(0,0,0,.55)}
.famroom .fr-hlabel{left:180px;transform:translateX(-50%)}
.famroom .fr-glabel{left:272px;transform:translateX(-50%)}
.famroom .fr-role{height:14px;padding:0 4.5px;border-radius:7px;background:rgba(0,0,0,.34);
  font-size:9.5px;line-height:14px;color:#fff}
.famroom .fr-heart{position:absolute;left:160.35px;top:135.6px;width:39.3px;height:16px;border-radius:8px;
  background:rgba(24,10,44,.45);display:flex;align-items:center;justify-content:center;gap:3.2px;
  font-size:10.5px;line-height:16px;color:#fff}
.famroom .fr-gheart{left:252.35px}
.famroom .fr-hi{width:11px;height:10px;display:block}
.famroom .fr-notice{pointer-events:auto;position:absolute;right:22px;top:64px;height:17px;padding:0 7px;
  border-radius:9px;background:rgba(0,0,0,.32);color:#fff;font-size:11px;line-height:17px}

/* —— 麦位池 4 列 × 2 排 ——
   列中心 x45/135/225/315（360/4）；第 1 排圆心 y189.8、第 2 排 y303（排距 113.2）；
   空麦位虚线圆 d53；昵称墨迹在圆心 +37.3..45.2；爱心 pill 在圆心 +57.4..64.4 */
.famroom .fr-grid{position:absolute;left:0;right:0;top:163.5px;height:232px;z-index:4}
.famroom .fr-seat{position:absolute;top:0;width:74px;text-align:center;color:#fff}
.famroom .fr-seatrow2{top:113.2px}
.famroom .fr-seatrow3{top:226.4px}
.famroom .fr-sav{position:relative;width:53px;height:53px;margin:0 auto}
.famroom .fr-sav img{width:53px;height:53px;border-radius:50%;object-fit:cover;display:block;
  background:rgba(255,255,255,.08)}
.famroom .fr-sav.empty{border-radius:50%;box-sizing:border-box;border:1.5px dashed rgba(178,166,214,.42);
  background:rgba(90,80,130,.16);display:flex;align-items:center;justify-content:center}
.famroom .fr-chair{width:34px;height:30px;opacity:.62}
.famroom .fr-mic{position:absolute;right:-1px;bottom:1px;width:15px;height:15px;border-radius:50%;
  background:rgba(20,12,40,.75);display:flex;align-items:center;justify-content:center;color:#fff;font-size:9px}
.famroom .fr-snm{margin-top:7.6px;max-width:74px;margin-left:auto;margin-right:auto;font-size:10.5px;
  line-height:12px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;text-shadow:0 1px 3px rgba(0,0,0,.5)}
.famroom .fr-shp{margin-top:8.4px;display:inline-flex;align-items:center;gap:3.2px;height:16px;padding:0 8px;
  border-radius:8px;background:rgba(24,10,44,.42);font-size:10px}

/* —— 公屏：首行 pill 左缘 x14、行高 ~19.5（单行）/ 家族公屏是紫色底（帧 #8F66B2）—— */
.famroom .fr-chat{position:absolute;left:9px;right:6px;top:384px;height:250px;z-index:4;overflow:hidden;
  display:flex;flex-direction:column;justify-content:flex-end;gap:4px}
.famroom .fr-msg{align-self:flex-start;max-width:302px;border-radius:11px;background:rgba(255,255,255,.13);
  padding:3.5px 8px;font-size:11px;line-height:16px;color:#fff;word-break:break-word}
.famroom .fr-msg b{font-weight:500;color:#fff}
.famroom .fr-msg.fam{background:rgba(158,102,205,.55)}
.famroom .fr-empty{font-size:12px;color:rgba(255,255,255,.72)}

/* —— 快捷语行：pill 高 25、墨迹 y652.2..664.7（字号 13）—— */
.famroom .fr-quick{position:absolute;left:8px;right:0;top:646px;height:25px;z-index:5;display:flex;gap:6.3px}
.famroom .fr-quick span{flex:none;height:25px;padding:0 10px;border-radius:12.5px;
  background:rgba(255,255,255,.14);color:#fff;font-size:13px;line-height:25px;white-space:nowrap}

/* —— 底栏：聊一聊胶囊 x7.5 w62.5 h25；4 个圆钮 d33 中心 x207/252/295/337.5 y700 —— */
.famroom .fr-bar{position:absolute;left:0;right:0;top:683.5px;height:50px;z-index:6}
.famroom .fr-ipt{position:absolute;left:7.5px;top:4px;width:62.5px;height:25px;border-radius:12.5px;
  background:rgba(255,255,255,.13)}
.famroom .fr-ipt input{width:100%;height:25px;border:0;background:transparent;color:#fff;
  font-size:12px;text-align:center;outline:none;padding:0}
.famroom .fr-ipt input::placeholder{color:rgba(255,255,255,.92)}
.famroom .fr-ic,.famroom .fr-up{position:absolute;top:0;width:33px;height:33px;border-radius:50%;
  background:rgba(255,255,255,.15);display:flex;align-items:center;justify-content:center;color:#fff}
.famroom .fr-ic .ico{width:19px;height:19px;display:block}
.famroom [data-fr-msg]{left:190.5px}
.famroom [data-fr-apps]{left:235.5px}
.famroom .fr-up{left:278.5px;background:linear-gradient(90deg,#FF4E87,#FF7E6B);font-size:12px}
.famroom [data-fr-gift]{left:321px;background:linear-gradient(135deg,#C94BE0,#8A3BE0);color:#FFD34E}
.famroom [data-fr-gift] .ico{width:21px;height:21px}
.famroom .fr-badge{position:absolute;right:-3px;top:-3px;min-width:15px;height:15px;border-radius:7.5px;
  background:#FA3B47;color:#fff;font-size:10px;line-height:15px;text-align:center;padding:0 3px;
  font-style:normal;font-family:inherit}

/* =========================================================================
   礼物面板 p4-gift —— 真机 a28fb78a f_0028_0014.0s.jpg / f_0030_0015.0s.jpg 逐帧量（box 坐标，CSS=帧px/1.6）：
     面板上沿 y436（圆角 14）；粉色渐变带 436..477（含 6 个 Tab，白字墨迹 y451.2..465.6，字 14.5，
     左墨迹 20.0 / 63.1 / 105.6 / 149.4 / 192.5 / 235.0）；白底 #FDFDFD 从 y477 起；
     收礼人行在白底顶部：「送给」墨迹 x13.8 字 11.3 → 圆头像 d20 @x44.4 → 昵称墨迹 x70 字 15.5；
     ×1 黄字 x186.2..246.2 y478.8..505.6；4 列礼物格：列中心 51.6+85.7k、卡顶 y520、图形 62、名字墨迹 y588.8..600、
     价格墨迹 y611.2..619.4、行距 108.7；底栏：💎x14.4 + 「67」x31.9 + 「充值」x66.2 + › x91.2，
     数量胶囊 x216..280.6、赠送 x280.6..345.5（25.6 高）。
   ========================================================================= */
/* 礼物面板不再显示「全部礼物」Tab 条：收礼人行直接从白色面板顶部开始，
   高度同步减掉原来的 41px 渐变带，礼物格与底栏尺寸保持不变。 */
.p4-gift{position:absolute;left:0;right:0;bottom:0;height:323px;display:flex;flex-direction:column;
  background:transparent;border-radius:0;padding:0;color:#1A1A1A;overflow:visible}
/* 面板外面那层灰底：以前是近乎透明的 rgba(0,0,0,.05)，聊天页原样透出来 → 产品说
   「上面看着透明、跟面板连成一体」。现在按全站弹层的口径压暗（**不加 blur**：全屏毛玻璃在
   手机上是要一直重绘的，面板一开就卡）。 */
.gm-mask{background:rgba(0,0,0,.42);backdrop-filter:none}

/* 收礼人行（真实房在聊天页上时就是白底这一行「送给 + 圆头像 + 昵称」，**没有**深色胶囊） */
.p4-gift .gm-to{height:29px;flex:none;margin:0;display:flex;align-items:center;box-sizing:border-box;
  padding:9.4px 0 0 12.8px}
.p4-gift .gm-lb{flex:none;font-size:11.5px;color:#8E8E99}
.p4-gift .gm-av{flex:none;width:20px;height:20px;border-radius:50%;object-fit:cover;margin-left:8px;
  background:#F2D9E4;box-shadow:0 0 0 1px rgba(0,0,0,.07)}
.p4-gift .gm-who{display:flex;align-items:center;min-width:0;max-width:230px;margin-left:5.6px}
.p4-gift .gm-who b{font-size:15.5px;line-height:19px;font-weight:600;color:#2A2A30;
  white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
/* 收礼人换成「麦上现选」时（语音房）那排 chip */
.p4-gift .gift-to{position:absolute;left:44px;top:0;height:32px;max-width:300px;overflow-x:auto;
  display:flex;align-items:center;gap:8px;color:#fff}
.p4-gift .gift-to .gt-lb{font-size:11px;opacity:.9}
.p4-gift .gift-to .gt-p{font-size:11px;background:rgba(74,68,76,.42);border-radius:14px;
  padding:3px 8px;white-space:nowrap;display:flex;align-items:center;gap:5px;cursor:pointer}
.p4-gift .gift-to .gt-p img{width:18px;height:18px;border-radius:50%;object-fit:cover}
.p4-gift .gift-to .gt-p.on{background:rgba(255,78,135,.85)}
/* 「×N」跟着收礼人行（真机 f_0030 的 ×1 就在「送给 + 昵称」这一行的右边）：
   以前是绝对定位甩在面板中间，面板一改高度就落到礼物格上，黄字落在白底上几乎看不见。 */
.p4-gift .gm-x1{flex:none;margin-left:10px;font-size:17px;font-style:italic;font-weight:700;
  color:#FFB300;pointer-events:none}

/* 白色面板：y466 起，圆角 14 */
.p4-gift .gm-body{flex:1;background:#FDFDFD;border-radius:14px 14px 0 0;position:relative;
  display:flex;flex-direction:column;overflow:hidden}
/* 礼物分页：每页 4 列 × 2 行 = 8 个，横向滑动 + 底部圆点。每个礼物页正好两整行，
   页与页之间用 scroll-snap 吸附；最后一页也是满 8 个，不会再出现末行空洞。 */
.p4-gift .gift-pager{flex:1;min-height:0;display:flex;flex-direction:column;margin-bottom:6px}
.p4-gift .gift-grid{flex:1;min-height:0;display:flex;overflow-x:auto;overflow-y:hidden;
  padding:0;
  scroll-snap-type:x mandatory;scroll-behavior:smooth;-webkit-overflow-scrolling:touch;
  scrollbar-width:none}
.p4-gift .gift-grid::-webkit-scrollbar{display:none}
.p4-gift .gift-page{flex:0 0 100%;min-width:100%;height:100%;box-sizing:border-box;
  display:grid;grid-template-columns:repeat(4,minmax(0,1fr));grid-template-rows:repeat(2,102.5px);
  gap:6.25px 0;align-content:start;padding:11.5px 8.6px 0;
  scroll-snap-align:start;scroll-snap-stop:always}
.p4-gift .gm-note{width:100%;padding:20px 0;text-align:center;font-size:12.5px;color:#8A8A94}
.p4-gift .gift-grid>.gm-note{flex:1;display:flex;align-items:center;justify-content:center;padding:0}
.p4-gift .gift-dots{flex:none;height:16px;display:flex;align-items:center;justify-content:center;gap:6px}
.p4-gift .gift-dots[hidden]{display:none}
.p4-gift .gift-dot{width:6px;height:6px;padding:0;border:0;border-radius:4px;background:#E6E6EC;
  transition:width .2s ease,background .2s ease;cursor:pointer}
.p4-gift .gift-dot.on{width:16px;background:linear-gradient(90deg,#FF4E87,#FF8A45)}
.p4-gift .gift{width:100%;min-width:0;height:102.5px;position:relative;text-align:center;flex:none}
.p4-gift .gift img{width:62px;max-width:88%;height:62px;object-fit:contain;display:block;margin:2.75px auto 0}
/* 名字/价格行按 f_0037 复量：名字墨迹 8.8（原 13px 字号量到 10.6）→ 11px；
   价格行墨迹顶 = 白面板上沿 +131.25（原 +136.25）→ margin-top 9->4；
   选中框高 64.4（f_0037 边界墨迹 476.25..478.12 / 540.62..541.88）→ 68->64.5；
   价格行是「数字在前、钻石在后」（真机 f_0037 appY571 列1：数字 x40.0..54.4、钻石 x61.2）。 */
.p4-gift .gift b{display:block;font-size:11px;line-height:13px;font-weight:400;color:#2A2A30;
  margin-top:2px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.p4-gift .gift small{display:flex;align-items:center;justify-content:center;gap:4px;font-size:12px;
  line-height:15px;color:#ACACB4;margin-top:7.75px}
.p4-gift .gift small img{width:11px;height:11px;margin:0}
.p4-gift .gift.sel::before{content:'';position:absolute;left:0;right:0;top:0;height:64.5px;border-radius:12px;
  box-shadow:inset 0 0 0 1.5px #FF7BA6}
/* 底栏：内容中心 y719.5（面板底 756 − 安全区 24） */
.p4-gift .gift-foot{flex:none;height:49px;display:flex;align-items:center;padding:0 15px 24px 14.4px;
  box-sizing:border-box;position:relative}
.p4-gift .gift-bal{display:flex;align-items:center;gap:21.8px;flex:none;padding:0}
.p4-gift .gift-bal .coinpill{display:flex;align-items:center;gap:5px;flex:none;height:auto;border-radius:0;
  background:transparent;padding:0;font-size:13.5px;color:#2A2A30}
.p4-gift .gift-bal .coinpill img{width:15px;height:15px;object-fit:contain}
.p4-gift .gift-bal .gb-recharge{font-size:11.5px;font-weight:500;color:#FF4E87;cursor:pointer;flex:none}
/* 数量 + 赠送：一颗胶囊。外圈 1px 浅粉描边 + overflow:hidden 裁掉中间那条缝，
   左段是白底「1 ⌄」、右段是粉橙渐变「赠送」—— 真机 x216..345.5 就是这么一颗。 */
.p4-gift .gm-send{position:absolute;left:216px;top:0;width:129.5px;height:25.6px;display:flex;
  border-radius:12.8px;overflow:hidden;box-shadow:0 0 0 1px #FFD3E0}
.p4-gift .gm-qty{position:relative;left:0;top:0;width:64.6px;height:25.6px;border-radius:0;
  background:#fff;display:flex;align-items:center;justify-content:center;
  gap:9px;font-size:14px;color:#2A2A30;cursor:pointer}
.p4-gift .gm-qty i{width:7px;height:7px;border-right:1.5px solid #B9B9C0;border-bottom:1.5px solid #B9B9C0;
  transform:rotate(45deg) translate(-1px,-1px)}
.p4-gift .gift-foot .btn{position:relative;left:0;top:0;width:64.9px;height:25.6px;line-height:25.6px;
  border-radius:0;background:linear-gradient(90deg,#FF3D7A,#FF8A45);color:#fff;font-size:13px;
  font-weight:500;text-align:center;padding:0;box-sizing:border-box;display:flex;align-items:center;
  justify-content:center}

/* 面板底部那条手势条：真机 f_0030 量到 w120.6 h4 底 8（全站 .homebar 是 134×5，这里按帧收窄） */
.p4-gift .homebar{width:120.6px;height:4px;bottom:8px;border-radius:2px;background:#8E8E93;opacity:.9}

/* 背包/互赠的空态（真机 f_0034）：插画 y512..588、文案墨迹 y636.6..648.5（14px 灰） */
.p4-gift .gm-empty{width:100%;display:flex;flex-direction:column;align-items:center;padding-top:0}
.p4-gift .gm-empty svg{width:140.7px;height:90.6px;margin-top:-3.2px}
.p4-gift .gm-empty span{margin-top:26.9px;font-size:13.4px;color:#A8A8B0}

/* =========================================================================
   游戏速配 —— 真机 60347fd1 f_0010_0005.0s.jpg 逐帧量（CSS y = 帧px/1.6 − 44）
   标题墨迹 y2.9..18.5（17px 粗体居中）；右上「?」外圈 20px 中心 (332.8, 9.9)；
   卡片 152.5×93.5、圆角 13、间距 11、左边距 23.1、卡顶 y63.5；
   卡内标签墨迹 y92.9..107.2（左边距 15、15.5px 粗体）；美术图贴卡片右缘、高度撑满。
   ========================================================================= */
.gq-body{background:#fff;position:relative}
.gq-nav{position:relative;height:36px}
.gq-nav b{position:absolute;left:0;right:0;top:1.3px;text-align:center;
  font-size:17px;font-weight:700;color:#1A1A1A;line-height:21px}
.gq-nav .gq-back{position:absolute;left:12.5px;top:-1px;width:19px;height:19px;display:block;cursor:pointer}
.gq-nav .gq-back img{width:19px;display:block}
.gq-nav .gq-help{position:absolute;right:17.2px;top:-1px;width:20px;height:20px;border-radius:50%;
  border:1.8px solid #3A3A40;box-sizing:border-box;color:#3A3A40;font-size:12.5px;font-weight:700;
  line-height:15.6px;text-align:center}
.gq-cards{display:flex;gap:10.6px;padding:27.5px 23.1px 0;overflow-x:auto;overflow-y:hidden;scrollbar-width:none}
.gq-cards::-webkit-scrollbar{display:none}
.gq-card{position:relative;flex:none;width:152.5px;height:93.5px;border-radius:13px;overflow:hidden;
  background:linear-gradient(115deg,#F8F2FE 0%,#F1E9FE 100%);cursor:pointer}
.gq-card.pink{background:linear-gradient(115deg,#FFF3FB 0%,#FFEDF7 100%)}
.gq-card b{position:absolute;left:15px;top:26px;z-index:1;font-size:15.5px;font-weight:700;color:#1A1A1A}
/* 真机美术图彩色区 x80..175（宽 95、贴卡片右缘、上下都被卡片裁掉一点）→ 用 108.5 高居中裁切 */
.gq-card .gq-art{position:absolute;right:-12px;top:50%;transform:translateY(-50%);height:108.5px;width:auto;pointer-events:none}

/* =========================================================================
   直播 / 聊天室（livelist）—— 真机 60347fd1 f_0044_0022.0s.jpg、f_0047_0023.5s.jpg 逐帧量
   标题行墨迹 y19.1..36：直播 15px 灰、聊天室 19px 粗（右上角 7px 粉点）+ 下方 7px 粉点
   分类行墨迹 y59.1..71（13px，间距 26；当前项 = #FE5C85 粉胶囊，高 21.9 = 文字 + 5.7）
   卡片 164.3×166.6、列距 6.9、行距 14、左右边距 11.9、卡顶 y89.4、圆角 13
   卡内：头像 69×72 圆角 10 @(12.5,10)；房名墨迹 y184.1..196.6（16px 粗）@x24.4；
        底行 y227.25..246.6 = 白胶囊（心 + 分类名，粉字）67.8×19.35 + 右火焰数
   本轮重核（同一批帧）：底部 5 格 tab 内容墨迹 y688..727（icon 688..712、文字 715..727）、手势条 y741..745；
        卡内照片左缘 x23.75（= 卡左缘 11.9 + 11.85）、上缘 y99.7（= 卡顶 89.5 + 10.2）；
        「创建房间」= 85×33 @(260,633.8)，右缘距屏右 14.5
   空态（f_0047）：插画 125×104 居中 @y101.6、文案墨迹 y247.9..261（14px 灰），没有按钮
   ========================================================================= */
.lv-page{background:#fff;position:relative}
.lv-square{flex:1;min-height:0;display:flex;flex-direction:column;background:#fff;color:var(--t1)}
.lv-tabs{flex:none;display:flex;align-items:center;gap:8px;overflow-x:auto;overflow-y:hidden;
  padding:11px 16px 10px;scrollbar-width:none;-webkit-overflow-scrolling:touch;
  background:linear-gradient(115deg,#FFF0F7 0%,#F9EFFF 48%,#F1EDFF 100%);
  border-bottom:1px solid #F0E4F5;box-shadow:inset 0 -12px 22px rgba(255,255,255,.34)}
.lv-tabs::-webkit-scrollbar{width:0;height:0;display:none}
.lv-tabs .chip{flex:none;height:32px;padding:0 15px;border-radius:16px;background:rgba(255,255,255,.82);
  color:#555560;font-size:13px;line-height:32px;white-space:nowrap;cursor:pointer}
.lv-tabs .chip.on{background:var(--brand-grad);color:#fff;font-weight:600;
  box-shadow:0 5px 14px rgba(255,76,129,.24)}
.lv-search{flex:none;margin:0;padding:8px 16px 10px;background:#fff;border-bottom:1px solid #F8F0F4}
.lv-empty{display:flex;flex-direction:column;align-items:center;justify-content:flex-start;
  padding:56px 0 40px;min-height:368px}
.lv-empty img{display:block;width:min(72vw,260px);height:auto;object-fit:contain;
  filter:drop-shadow(0 16px 24px rgba(148,101,75,.10))}
.lv-results{flex:1;min-height:0;overflow-y:auto;overflow-x:hidden;scrollbar-width:none;-webkit-overflow-scrolling:touch}
.lv-results::-webkit-scrollbar{width:0;height:0}
.lv-head{position:relative;height:89.4px;flex:none;
  background-image:linear-gradient(180deg,rgba(255,255,255,0) 0%,rgba(255,255,255,.42) 38%,#fff 80%),
    linear-gradient(100deg,#E8CCFC 0%,#FFD2D5 55%,#FFB2C0 100%)}
.lv-seg{position:absolute;left:18.4px;top:14.3px;height:26px;display:flex;align-items:baseline;gap:22.5px}
.lv-seg>span{font-size:13.5px;color:#6E6E78;cursor:pointer;position:relative}
.lv-seg>span.on{font-size:18px;font-weight:700;color:#17171C}
.lv-seg>span.on i{position:absolute;right:-8.5px;top:-0.5px;width:8px;height:8px;border-radius:50%;background:#FFB3C1;filter:blur(.3px)}
.lv-cats{position:absolute;left:0;right:0;top:50px;height:30px;display:flex;align-items:center;gap:3.2px;
  padding:0 16px;overflow-x:auto;overflow-y:hidden;white-space:nowrap;scrollbar-width:none}
.lv-cats::-webkit-scrollbar{display:none}
.lv-cats>span{font-size:13px;color:#5C5C66;cursor:pointer;flex:none;height:22.5px;line-height:22.5px;
  border-radius:11.25px;padding:0 10.2px;transition:background .15s}
.lv-cats>span.on{background:linear-gradient(90deg,#FA4F7E 0%,#FF8A5F 100%);color:#fff;font-weight:600}
.lv-grid{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:14px 6.9px;padding:0 11.9px 16px}
.lv-card{position:relative;height:166.6px;border-radius:13px;cursor:pointer;overflow:hidden;
  background:linear-gradient(160deg,#F1FCFF 0%,#E5E5FF 100%)}
.lv-card .lv-av{position:absolute;left:12.5px;top:10px;width:69px;height:72px;border-radius:10px;
  object-fit:cover;background:#E9E9F2}
.lv-card b{position:absolute;left:12.5px;top:90.9px;max-width:140px;font-size:16px;font-weight:700;
  line-height:21px;color:#22222A;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.lv-card .lv-foot{position:absolute;left:12.5px;right:10.6px;top:137.85px;height:19.4px;
  display:flex;align-items:center;justify-content:space-between}
.lv-catpill{display:flex;align-items:center;gap:3px;height:19.4px;border-radius:9.7px;background:#fff;
  padding:0 7px;font-size:11px;color:#E8517F;max-width:110px;overflow:hidden}
.lv-catpill svg{flex:none}
.lv-heat{display:flex;align-items:center;gap:3px;font-size:13px;color:#4A4A55}
.lv-fab{position:absolute;right:14.5px;bottom:90px;z-index:20;display:flex;align-items:center;
  justify-content:center;height:33px;padding:0 14.5px;border-radius:16.5px;cursor:pointer;
  background:linear-gradient(90deg,#FA6A8B 0%,#FF8C6A 100%);color:#fff;font-size:14px;font-weight:600;
  box-shadow:0 6px 16px rgba(250,106,139,.34)}
.lv-fab[hidden]{display:none}
/* 空态（真机 60347fd1 f_0047=23.5s 逐像素量，单位 CSS px）：
   插画簇 ink x106.2..247.5（宽 141.9）appY 106.0..205.4（高 99.4）；
   文案「暂无聊天室」ink x145.6..213.1（宽 67.5）appY 247.9..260.4（高 12.5）。 */
/* ---------- 新消息弹层（真机 60347fd1 f_0050=25.0s 逐像素量，单位 CSS px）----------
   scrim：真机背景亮度 102/255 → rgba(0,0,0,.6)；
   卡片：x30.6..329.4（w299.4）appY 260.4..563.5（h304.1）r16，顶淡粉 #FCE5EF → 34% 近白 → 白；
   昵称 ink appY 334.8..348.5（16.5px 深 #3C3638）；年龄 ink appY 366.0..377.2（12.5px 灰 #9C9CA4）；
   文案 ink appY 416.6..431.0 x77.5..274.4（16px #6A6A6A）；
   按钮 x81.2..279.4（w198.8）appY 473.5..515.4（h42.5，r21.25）渐变 #FB507C→#FB9169，白字 17px；
   「残忍离开」ink appY 531.6..543.5 x153.1..206.2（14px #6F6F6F）。
   头像簇（星球环+白球+照片+闪光）真机约 x112..248 appY 195..307；红「+N」胶囊 x210.6..243.1 appY 211.6..230.4。 */
.mp-mask{position:absolute;inset:0;z-index:65;background:rgba(0,0,0,.6);animation:pv-fade .18s ease}
.mp-card{position:absolute;left:30.6px;top:260.4px;width:299.4px;height:304.1px;border-radius:16px;
  background:linear-gradient(180deg,#FAE5EE 0%,#FFEAF1 14%,#FFF1F4 28%,#FFFBFB 38%,#FFFFFF 46%);
  box-shadow:0 12px 30px rgba(80,50,90,.18);animation:pv-up .22s cubic-bezier(.2,.9,.25,1)}
.mp-fig{position:absolute;left:49.4px;top:-68.4px;width:200px;height:170px;pointer-events:none}
.mp-fig svg{display:block;width:200px;height:170px}
.mp-name{position:absolute;left:0;right:0;top:73.6px;text-align:center;font-size:16.5px;line-height:1;
  font-weight:600;color:#3C3638}
.mp-age{position:absolute;left:0;right:0;top:105.1px;text-align:center;font-size:12.5px;line-height:1;color:#9C9CA4}
.mp-msg{position:absolute;left:0;right:0;top:155.4px;text-align:center;font-size:16px;line-height:1;color:#6A6A6A}
.mp-go{position:absolute;left:50.6px;top:213.1px;width:198.8px;height:42.5px;border:0;border-radius:21.25px;
  background:linear-gradient(90deg,#FB507C 0%,#FB9169 100%);color:#fff;font-size:17px;font-weight:600;
  line-height:42.5px;text-align:center;cursor:pointer;font-family:inherit}
.mp-leave{position:absolute;left:0;right:0;top:270.6px;text-align:center;font-size:14px;line-height:1;
  color:#6F6F6F;cursor:pointer}


/* 聊天页「按住说话」面板 —— 真机 43f5ac75 f_0010（文字态）→ f_0016（语音态）逐项量（CSS px）：
   切过去以后工具栏图标中心从 709.15 提到 509.15（正好上移 200），底部露出 229.6 高的语音区；
   面板纯白、无上边框。「按住说话」ink y553.5~565.4 x154.4~205.6（13.2px，居中）；
   麦克风圆盘 d108.75、圆心 (180, 636.3)、盘面 #FAFAFA；内圈白圆 d73.75 + 0.6px #E8E8E8 描边；
   正中 25×25 麦克风图形（描边胶囊 + 两短横 + 下方开口弧，橙 #F58A4B → 粉 #F2477A 渐变）。 */
.chatpage .cvoice{flex:none;height:227.75px;background:#fff;position:relative}
.chatpage .cvoice[hidden]{display:none}
.chatpage.chat-voice-open .ctools{height:48.2px;padding:13.8px 0 0}
.chatpage .cv-hold{position:absolute;left:0;right:0;bottom:189.4px;text-align:center;
  font-size:13.2px;line-height:13.2px;color:#1F1F1F;font-weight:400}
.chatpage .cv-btn{position:absolute;left:50%;bottom:65.65px;transform:translateX(-50%);
  width:108.75px;height:108.75px;border-radius:50%;background:#FAFAFA;
  display:flex;align-items:center;justify-content:center;cursor:pointer}
.chatpage .cv-core{width:73.75px;height:73.75px;border-radius:50%;background:#fff;
  box-shadow:0 0 0 .6px #E8E8E8, 0 1px 3px rgba(0,0,0,.03);
  display:flex;align-items:center;justify-content:center}
.chatpage .cv-core svg{width:25px;height:25px;display:block}
/* 输入条左侧那颗按钮：文字态是「)))」波形（切到语音），语音态换成键盘圆点图标（切回文字）。 */
.chatpage .ci-mic .ci-kb-c{display:none}
.chatpage .ci-mic .ci-kb-c .ico{width:17px;height:17px}
.chatpage.chat-voice-open .ci-mic .ci-mic-c{display:none}
.chatpage.chat-voice-open .ci-mic .ci-kb-c{display:flex;align-items:center;justify-content:center}

/* ---------------------------------------------------------------- 用户名片弹层
   精简版保留头像、昵称、UID 与三个动作按钮，不再展示等级、亲密关系或勋章。 */
.uc-mask{position:fixed;inset:0;z-index:998;background:rgba(20,15,20,.28);display:flex;align-items:flex-end}
.uc-sheet{position:relative;width:100%;background:#fff;border-radius:18px 18px 0 0;
  padding:0 10px calc(18px + env(safe-area-inset-bottom,0px))}
.uc-av{position:absolute;left:50%;top:-9px;transform:translateX(-50%);width:58px;height:58px;border-radius:50%;
  object-fit:cover;border:3px solid #fff;background:#F2EFF1;box-sizing:border-box;display:block}
.uc-name{margin-top:47.5px;display:flex;align-items:center;justify-content:center;gap:4px;
  font-size:12.5px;font-weight:600;color:#1B1720;line-height:1.35}
.uc-uid{margin-top:5px;text-align:center;font-size:11px;color:#8E8891;line-height:1.4}
.uc-btns{margin-top:18px;display:flex;align-items:center;justify-content:center;gap:8px;height:34.4px}
.uc-btns button{height:34.4px;border-radius:17.2px;background:#F5F4F6;color:#2B2730;font-size:13px;
  display:flex;align-items:center;justify-content:center;gap:5px;font-weight:500}
.uc-btns button img{width:16px;height:16px;object-fit:contain}
.uc-btns button[data-uc-gift]{width:70.6px;color:#E8558A}
.uc-btns button[data-uc-dm]{width:75.6px}
.uc-btns button[data-uc-at]{width:76.2px}

/* 榜单台座皇冠 —— 真机 f_0097：**第 1 名没有皇冠**（更大的金环 + 环底数字胶囊），
   第 2 名淡紫皇冠、第 3 名金皇冠，两者墨迹都是 84×32 帧px = 52.5×20 CSS，
   中心对齐环心、底边压在环顶下方 9.4 CSS（真机 #3 皇冠 y565..596，环顶 y581）。
   素材库里 threexdjy_live_rank_topicon1/2/3.webp 是「细环 + 小皇冠 + 数字」，环与冠都不同款，
   所以这里按帧描近似：三尖冠 + 两侧翼状外撇 + 正中宝石心。 */
.fc-sheet .fcr-ring .fcr-crown{position:absolute;left:50%;transform:translateX(-50%);
  bottom:calc(100% - 9px);width:56.5px;height:25px;pointer-events:none;
  filter:drop-shadow(0 1px 2px rgba(180,120,20,.28))}

/* ---------------------------------------------------------------- 音视频通话 2.0（云信 NERTC）

   NERTC 的 stream.play(container) 会**自己往容器里塞一个 <video>**，那个 video 不带任何尺寸
   （实测 offsetWidth/Height = 0：数据在流、画面却看不见）。容器给多少它铺多少，所以这里把
   SDK 插进来的 video 拉满容器。两个容器：
     [data-rtc-remote] 对方的画面（videocall 全屏）
     [data-rtc-local]  自己的小窗（videocall 右上角）
   没接通时容器是黑底，不会把上一帧或者素材图留在那儿冒充正在通话。 */
/* SDK 还会**再套一层** div.nertc-video-container，并给这层写死 style="width:0px;height:0px"
   （实测就是这么进来的），只给 <video> 定尺寸是不够的 —— 套层是 0，画面就是 0，屏幕上纯黑。
   两层的尺寸都由这里管；SDK 的行内样式要 !important 才盖得住。 */
/* 干脆全局管：SDK 插的容器和 video 都铺满各自的容器。
   逐个选择器点名会漏（直播间那套是 data-lv-*，第一版就因为只写了 data-rtc-* 而只显示一块黑）。 */
.nertc-video-container,
.nertc-video-container video {
  display: block !important;
  width: 100% !important;
  height: 100% !important;
  object-fit: cover;
}

/* 关播结算：暖色浅底 + 白卡片，避免整页黑白断层 */
.le-page{background:linear-gradient(180deg,#FFF7FA 0%,#F8F2FF 48%,#FFF9F4 100%);
  min-height:0;display:flex;flex-direction:column;
  padding:18px 16px calc(16px + var(--safe-bottom, env(safe-area-inset-bottom,0px)));box-sizing:border-box}
.le-hero{position:relative;overflow:hidden;border-radius:22px;padding:24px 18px 22px;text-align:center;
  background:linear-gradient(145deg,#FFF0F6 0%,#F8ECFF 56%,#FFF7ED 100%);
  box-shadow:0 12px 32px rgba(191,125,162,.12);border:1px solid rgba(255,255,255,.9)}
.le-hero-glow{position:absolute;width:180px;height:180px;border-radius:50%;right:-56px;top:-80px;
  background:radial-gradient(circle,rgba(255,173,205,.45),rgba(255,173,205,0) 70%)}
.le-check{position:relative;width:58px;height:58px;border-radius:20px;margin:0 auto;display:flex;
  align-items:center;justify-content:center;background:#fff;box-shadow:0 8px 22px rgba(200,116,160,.16)}
.le-check img{width:24px;height:24px;opacity:.7}
.le-title{position:relative;margin-top:14px;font-size:20px;font-weight:700;color:#3E2E3B;letter-spacing:.2px}
.le-time{position:relative;margin-top:7px;font-size:12px;line-height:1.7;color:#9B8794}
.le-stats{display:grid;grid-template-columns:1fr 1fr;gap:10px;margin-top:16px}
.le-stat{background:#fff;border:1px solid #F7EDF2;border-radius:16px;padding:16px 14px;
  box-shadow:0 6px 18px rgba(150,108,130,.06)}
.le-stat b{display:block;font-size:22px;line-height:1.1;color:#3E2E3B;font-weight:700}
.le-stat span{display:block;margin-top:7px;font-size:11.5px;color:#9B8794}
.le-note{display:flex;align-items:center;gap:12px;margin-top:14px;padding:14px;border-radius:16px;
  background:rgba(255,255,255,.72);border:1px solid rgba(255,255,255,.9)}
.le-note-icon{width:36px;height:36px;border-radius:12px;background:#FFF0F6;color:#D66E9B;
  display:flex;align-items:center;justify-content:center;flex:none;font-size:18px;font-weight:700}
.le-note b{display:block;font-size:13px;color:#4B3945;font-weight:600}
.le-note span{display:block;margin-top:3px;font-size:11.5px;color:#9B8794;line-height:1.5}
.le-actions{display:flex;gap:10px;margin-top:auto;padding-top:18px;flex:none}
.le-btn{flex:1;height:48px;border:0;border-radius:24px;font-size:14px;font-weight:600;cursor:pointer}
.le-btn.primary{color:#fff;background:linear-gradient(135deg,#FF8FBC,#D978EA);
  box-shadow:0 10px 22px rgba(214,110,160,.24)}
.le-btn.secondary{color:#6D5A66;background:#fff;border:1px solid #F0E5EB}

/* 直播画面：垫在封面之上、UI 之下（z-index 1）。没接到流时容器透明，露出的还是封面。 */
.live .lv-stage{position:absolute;inset:0;z-index:1;pointer-events:none}
.live .lv-remote{position:absolute;inset:0;background:transparent;overflow:hidden}
.live .lv-self{position:absolute;right:12px;top:150px;width:78px;height:108px;border-radius:12px;
  overflow:hidden;border:1px solid rgba(255,255,255,.55);background:transparent;display:none}
/* 尺寸交给上面的 .nertc-video-container 全局规则，这里只管容器位置 */
/* 容器里有流了才把小窗露出来（空的时候不占位） */
.live .lv-self:not(:empty){display:block}

/* 连麦（PK）：同一间房里站着两位主播，舞台左右两格各一路远端画面 + 各自名字与 PK 分。
   只给一格时（一通话 / 普通直播）这一整块不生效，版式与以前完全一样。 */
.live .lv-stage.lv-pk .lv-remote{inset:0 50% 0 0}
.live .lv-stage.lv-pk .lv-remote-pk2{inset:0 0 0 50%}
.live .lv-stage.lv-pk::after{content:'';position:absolute;left:50%;top:0;bottom:0;width:1px;
  background:rgba(255,255,255,.45);z-index:2}
.live .lv-pk-labels{position:absolute;left:0;right:0;bottom:10px;display:flex;justify-content:space-between;
  padding:0 10px;z-index:3;pointer-events:none}
.live .lv-pkname{font-size:11px;color:#fff;background:rgba(0,0,0,.38);border-radius:10px;padding:2px 8px;
  max-width:46%;overflow:hidden;white-space:nowrap;text-overflow:ellipsis}

/* ================================================================ 齿轮滚轮选择器（编辑资料，2026-10-14）
   身高 / 体重 / 学历 / 年收入 / 生日 / 家乡 / 居住情况… 全部改成「点一下 → 底部上滑弹出滚轮」。
   iOS 版式：5 行可见，中间一行是选中项（底色圆角条 + 加重字色），上下两行渐隐。
   滚动本身用原生 overflow + scroll-snap（惯性、吸附由系统做），所以这里没有一行 JS 物理代码。 */
.wp-sheet{padding-bottom:calc(8px + env(safe-area-inset-bottom,0px))}
.wp-sheet header{height:50px}
.wp-sheet header b{flex:1;text-align:center;font-size:16px;color:#2D2930}
.wp-sheet header button{font-size:15px;color:#8E8891;background:none;border:0;padding:0 4px}
.wp-sheet header .wp-ok{color:#FF4C81;font-weight:600}
.wp-wheels{position:relative;display:flex;height:180px;margin:0 0 8px;
  -webkit-mask-image:linear-gradient(180deg,transparent 0,#000 27%,#000 73%,transparent 100%);
  mask-image:linear-gradient(180deg,transparent 0,#000 27%,#000 73%,transparent 100%)}
.wp-band{position:absolute;left:0;right:0;top:50%;height:36px;margin-top:-18px;border-radius:9px;
  background:#F7F3F6;pointer-events:none}
.wp-col{position:relative;flex:1;min-width:0;z-index:1}
.wp-list{height:180px;overflow-y:scroll;overflow-x:hidden;padding:72px 0;
  scroll-snap-type:y mandatory;-webkit-overflow-scrolling:touch;scrollbar-width:none}
.wp-list::-webkit-scrollbar{width:0;height:0}
.wp-it{height:36px;line-height:36px;text-align:center;font-size:15px;color:#B0AAB3;
  scroll-snap-align:center;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;padding:0 4px}
.wp-it.on{color:#2D2930;font-weight:600}
/* 职业：两级（左行业 / 右岗位）+ 搜索框。点岗位直接落草稿，不用再点一次确定。 */
.occ-sheet header b{flex:1;text-align:center;font-size:16px;color:#2D2930}
.occ-search{margin:0 0 10px;height:38px;border-radius:19px;background:#F6F3F6;display:flex;align-items:center;
  gap:8px;padding:0 14px}
.occ-search img{width:15px;opacity:.45}
.occ-search input{flex:1;border:0;background:none;font-size:14px;color:#2D2930;outline:none;min-width:0}
.occ-wrap{display:flex;height:46vh;min-height:240px;border-radius:12px;overflow:hidden;background:#fff}
.occ-left{width:38%;overflow-y:auto;background:#F8F6F8}
.occ-left .oi{padding:13px 10px 13px 12px;font-size:13px;color:#6B6570;line-height:1.3}
.occ-left .oi.on{background:#fff;color:#FF4C81;font-weight:600}
.occ-right{flex:1;overflow-y:auto}
.occ-right .ri{display:flex;align-items:baseline;gap:8px;padding:13px 14px;font-size:14px;color:#4B4650;
  border-bottom:1px solid #F6F4F6}
.occ-right .ri small{margin-left:auto;font-size:11px;color:#B0AAB3;flex:none}
.occ-right .occ-none{padding:28px 14px;text-align:center;font-size:13px;color:#B0AAB3}
/* 家乡存的是「省-市-区-街道」，这行允许折两行，不然 64 字全被省略号吃了 */
.ep-row[data-field="hometown"] b{white-space:normal;line-height:1.35;max-width:62%}
.ep-row[data-field^="hobby_"] b{white-space:normal;line-height:1.4;max-width:62%;overflow:visible;text-overflow:clip}

/* 顶部轻提示（live.js 的 tip()）：浅粉胶囊 + 橙色圆对勾 + 粉色人名 + （可选）右侧红色动作。
   2026-10-15 产品给了参考图，把原来那版「白底 + 2px 粉边 + 玫红渐变字方块」整条换掉（被点名太丑）。
   ① 整条 pointer-events:none：它是浮层，**绝不能吃点击**。线上实锤过一次 —— 它 position:absolute
      横跨整屏、top 落在 52px、z-index:70，而动态详情页作者区那颗「关注」正好在 y≈79，
      整行点击都被这条接走，表现就是「关注点了没反应 / 取关点不动」。只有 .lt-a 动作单独把点击收回来。
   ② 底色先写实心 #FDE9EC 兜底，再叠同色系渐变 —— 老 WebView 丢掉渐变那层也不会变成透明
      （上一版的坑：双底图被整条丢弃，落在黑屏页上就是「黑底白字」）。 */
.live-tip{position:absolute;left:12px;right:12px;top:52px;z-index:70;box-sizing:border-box;
  display:flex;align-items:center;gap:9px;padding:11px 16px;border-radius:26px;
  background:#FDE9EC;background-image:linear-gradient(180deg,#FFF5F6,#FBE3E8);
  box-shadow:0 10px 24px rgba(214,96,120,.20);pointer-events:none;
  font-size:15px;line-height:21px;color:#2D2930;text-align:left}
.live-tip .lt-ic{flex:none;width:22px;height:22px;border-radius:50%;text-align:center;
  font-style:normal;font-size:13px;font-weight:700;line-height:22px;color:#fff;
  background:#F7A45E;background-image:linear-gradient(135deg,#FFCE8E,#F79A56)}
.live-tip.lt-bad .lt-ic{background:#FF6577;background-image:linear-gradient(135deg,#FF9AA4,#FF5E73)}
.live-tip .lt-t{flex:1;min-width:0;display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;
  overflow:hidden;overflow-wrap:break-word}
.live-tip .lt-nm{color:#D1466E;font-weight:700}
/* 动作（如「去聊天」）：全条唯一的可点区域，所以它自己把 pointer-events 收回来。 */
.live-tip .lt-a{flex:none;color:#E8552F;font-weight:600;cursor:pointer;pointer-events:auto;
  padding:2px 2px 2px 8px}

/* 展示图删除键：用 CSS 横线而不是字体减号，避免 21px 圆钮里字重/基线把小号“−”吃掉。 */
.ep-photo-del{width:24px!important;height:24px!important;font-size:0!important;line-height:0!important;
  background:rgba(255,255,255,.96)!important;border-color:rgba(255,255,255,.98)!important;
  box-shadow:0 2px 7px rgba(38,22,30,.28)!important}
.ep-photo-del::before{content:"";display:block;width:12px;height:2px;border-radius:1px;background:#E64C72}
