/* =========================================================================
   春恋 · 同城交友 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)}

.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}

/* ---------------------------------------------------------------- 首页「同城」列表（真机录像 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:flex;gap:7.5px;overflow-x:auto;padding:16.5px 12px 0;scrollbar-width:none;-webkit-overflow-scrolling:touch}
.home-promos::-webkit-scrollbar{display:none}
.home-promo{position:relative;flex:0 0 102px;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:65px;height:65px;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}.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 img,.ep-photo-grid button{width:64px;height:64px;border-radius:7px;object-fit:cover;flex:none}.ep-photo-grid button{border:1px dashed #F4A6BE;background:#FFF8FA;color:#EF6E97;font-size:23px;display:flex;flex-direction:column;align-items:center;justify-content:center}.ep-photo-grid small{font-size:10px}.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))}.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{height:44px;width:100%;border-radius:22px;background:var(--brand-grad);color:#fff;font-size:15px;font-weight:700}.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}
.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-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-voice{display:flex;align-items:center;gap:10px;padding:5px 0 2px;color:#7C7480;font-size:13px}.uh-voice audio{height:32px;max-width:100%}.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}
.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，画布 360×800，1 CSS px = 1.2 帧 px；y 从 banner 顶边算起）：
   banner 342.5×70.8 @(8.3,0) r13；两 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-banner{position:relative;margin:-11.7px 9.2px 0;height:70.8px;border-radius:13px;overflow:hidden;
  background:linear-gradient(112deg,#7C299F 0%,#54206E 44%,#2F1846 100%);color:#fff;cursor:pointer}
.msg-banner .mb-tag{position:absolute;left:20.8px;top:6.7px;height:14px;padding:0 7px;border-radius:7px;
  background:linear-gradient(90deg,#FFB347,#FF7A45);font-size:9.5px;font-weight:700;color:#fff;
  display:flex;align-items:center;letter-spacing:.5px}
/* 真机：tag 左 20.8；主标题墨迹从卡内 43.7 起（f_0430 帧 x62~68）；副标题（含 💗）**在卡内居中** */
.msg-banner .mb-title{position:absolute;left:57px;top:14px;font-size:23px;line-height:26px;font-weight:800;
  letter-spacing:.5px;background:linear-gradient(90deg,#FFF6D0,#FFC700);-webkit-background-clip:text;
  background-clip:text;color:transparent}
.msg-banner .mb-sub{position:absolute;left:0;right:0;top:46.5px;text-align:center;
  font-size:14px;line-height:18px;color:#EFE0F7;letter-spacing:.5px}
.msg-banner .mb-art{position:absolute;right:6px;bottom:0;width:84px;height:64px;background-size:contain;
  background-repeat:no-repeat;background-position:right bottom;opacity:.95}

.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{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:-9px;top:-3px;min-width:22px;height:22px;border-radius:11px;
  background:#FF3B52;color:#fff;font-size:12px;font-weight:600;display:flex;align-items:center;
  justify-content:center;padding:0 5px;box-sizing:border-box}
.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{font-size:13px;line-height:18px;color:#8A8A94;margin-top:4px;overflow:hidden;
  text-overflow:ellipsis;white-space:nowrap}
.conv .cinfo .last em{font-style:normal;color:#D89A86}
.conv .ctime{font-size:12px;color:#A9A8B0;flex:none;align-self:flex-start;padding-top:4px}
.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}
.uh-topbar{position:absolute;z-index:20;top:0;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}
.uh-voice-fab{position:absolute;left:14px;bottom:24px;height:42px;padding:0 18px;border-radius:22px;background:linear-gradient(105deg,#FA5AB4,#8E61FF);color:#fff;font-size:15px;box-shadow:0 5px 14px rgba(111,75,205,.28)}
/* 轮播缩略图行：真机 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-mpill{position:absolute;left:20px;bottom:10px;z-index:3;height:32px;padding:0 12px;border-radius:16px;display:flex;align-items:center;gap:9px;background:linear-gradient(90deg,#FF4FB2,#8E5BE0);color:#fff;font-size:13px;box-shadow:0 3px 10px rgba(120,60,180,.25)}
.uh-mpill[hidden]{display:none!important}.uh-mpill button{color:#fff;display:flex;align-items:center}
.uh-mpill .ico{width:15px;height:15px}.uh-mp-dur{font-weight:600;font-size:13px}
.uh-sheet{background:#fff;padding:22px 14px 0;position:relative}
/* 昵称与右侧等级胶囊同一行、垂直居中（真机 f_0112：昵称末尾到第一枚胶囊 3.1 CSS）。 */
.uh-name{font-size:16px;font-weight:700;line-height:1.4;color:#111114;display:flex;align-items:center;gap:3.1px}
/* 等级胶囊（量自 f_0112）：48.8×11.9 CSS，左侧圆牌装等级数，右侧渐变底白字装等级名；
   蓝 #65BAFA→#5265E6 / 粉紫 #F9759A→#DE4FF6；两枚间距 6.9。 */
.uh-lv{display:inline-flex;align-items:center;height:11.9px;border-radius:6px;padding:0 3.4px 0 13.6px;
  font-size:8.4px;font-weight:600;color:#fff;line-height:1;position:relative;flex:none}
/* 两枚之间真机量到 7.5 CSS；.uh-name 的 flex gap 已经给了 3.1，这里再补 4.4。 */
.uh-lv+.uh-lv{margin-left:4.4px}
/* 圆牌：真机是「左圆右尖」的标签形（右侧收成尖角），不是纯圆。 */
.uh-lv i{position:absolute;left:1.2px;top:1.2px;width:11px;height:9.5px;
  background:rgba(255,255,255,.42);display:flex;align-items:center;justify-content:center;
  font-size:6.4px;font-style:normal;font-weight:700;line-height:1;
  border-radius:4.7px 0 0 4.7px;clip-path:polygon(0 0,70% 0,100% 50%,70% 100%,0 100%)}
.uh-lv b{font-weight:600}
.uh-lv-blue{background:linear-gradient(90deg,#65BAFA,#5265E6)}
.uh-lv-pink{background:linear-gradient(90deg,#F9759A,#DE4FF6)}
/* 「获赞: 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-cert.off{color:#A49EA8;filter:grayscale(.4)}.uh-medals span,.uh-gifts span{font-size:13px;color:var(--t3)}
.uh-certs{display:flex;flex-wrap:wrap;gap:32px}
.uh-cert{display:inline-flex;align-items:center;gap:5px;height:20px;font-size:12px;color:#2C2D31}
.uh-cert img{width:20px;height:20px;border-radius:6px;object-fit:contain}
.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-rate{display:flex;align-items:center;gap:6px;padding:12px 0 0;font-size:var(--fs-12);cursor:pointer}
.uh-rate .st{color:var(--gold-ink);letter-spacing:1px}
.uh-rate b{font-size:var(--fs-15)}
.uh-rate .c{color:var(--t4)}
.uh-rate .ar{margin-left:auto;color:var(--t4)}
.uh-stat{display:flex;gap:22px;padding:12px 0 4px}
.uh-stat div{font-size:var(--fs-11);color:var(--t3);text-align:center}
.uh-stat b{display:block;font-size:var(--fs-16);color:var(--t1);margin-bottom:2px}
.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}

/* --- 直播 --- */
.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 .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:6px 16px 14px;background:linear-gradient(160deg,#FF5E8E 0%,#FF4C81 40%,#FF8E61 100%)}
.mine-me{display:flex;align-items:center;gap:12px;color:#fff}
.mine-me img.av{width:62px;height:62px;border-radius:50%;object-fit:cover;border:2px solid rgba(255,255,255,.85)}
.mine-me .nm{font-size:var(--fs-18);font-weight:700;display:flex;align-items:center;gap:6px}
.mine-me .id{font-size:var(--fs-11);opacity:.85;margin-top:4px;display:flex;align-items:center;gap:6px}
.mine-me .edit{margin-left:auto;font-size:var(--fs-11);background:rgba(0,0,0,.18);border-radius:14px;padding:5px 12px}
.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 .sw{display:flex;gap:10px;margin-top:14px;width:auto}
.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)}
/* 顶部余额卡上的两个主按钮：充值（品牌渐变）/ 提现（描边玻璃） */
.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}
.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}
.coin.hot{border-color:var(--brand);background:#FFFBFC}
.coin .badge-hot{position:absolute;top:-1px;left:-1px;background:var(--brand-grad);color:#fff;font-size:9px;padding:2px 8px;border-radius:12px 0 12px 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}

/* --- 礼物面板 --- */
.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}

/* 通用工具 */
.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}

/* --- 排行榜 --- */
.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)}
.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(3,1fr);gap:4px}
.fpimg img{width:100%;aspect-ratio:1;object-fit:cover;border-radius:6px}
.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}
.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}

/* --- 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);gap:10px}
.act-item{background:#fff;border-radius:14px;padding:12px 6px;text-align:center;
  box-shadow:0 2px 10px rgba(255,142,97,.08)}
.act-item img{width:42px;height:42px;object-fit:contain;margin:0 auto 7px}
.act-item b{display:block;font-size:var(--fs-12)}
.act-item small{display:block;font-size:9px;color:var(--t3);margin-top:3px;line-height:1.4}
.act-btn{display:block;margin:8px auto 0;width:64px;height:23px;line-height:23px;border-radius:12px;
  background:var(--brand-grad);color:#fff;font-size:10px}

.startlive{position:absolute;inset:0;overflow:hidden;background:#0E0A18;display:flex;flex-direction:column}
.startlive .sl-bg{position:absolute;inset:0;background-size:cover;background-position:center;opacity:.5;filter:blur(6px)}
.startlive .sl-mask{position:absolute;inset:0;
  background:linear-gradient(180deg,rgba(10,6,18,.85),rgba(10,6,18,.35) 34%,rgba(10,6,18,.96))}
.sl-top{position:relative;z-index:3;display:flex;align-items:center;gap:10px;padding:4px 16px 6px;color:#fff}
.sl-top .sl-title{font-size:var(--fs-16);font-weight:600}
.sl-preview{position:relative;z-index:3;margin:6px 16px 0;border-radius:16px;overflow:hidden;
  border:1px solid rgba(255,255,255,.16)}
.sl-preview img{width:100%;height:214px;object-fit:cover}
.sl-plive{position:absolute;left:10px;top:10px;display:flex;align-items:center;gap:5px;
  background:rgba(0,0,0,.45);color:#fff;font-size:10.5px;border-radius:10px;padding:3px 9px}
.sl-plive i{width:6px;height:6px;border-radius:50%;background:#FF3B30}
.sl-ptip{position:absolute;left:0;right:0;bottom:0;padding:16px 12px 8px;color:rgba(255,255,255,.85);
  font-size:10px;background:linear-gradient(180deg,transparent,rgba(0,0,0,.65))}
.sl-panel{position:relative;z-index:3;margin-top:14px;flex:1;background:rgba(20,14,32,.92);
  border-radius:20px 20px 0 0;padding:8px 16px 22px;backdrop-filter:blur(14px);color:#fff;overflow:hidden}
.sl-row{display:flex;align-items:center;gap:10px;padding:14px 0;border-bottom:1px solid rgba(255,255,255,.08);
  font-size:var(--fs-13)}
.sl-row>span:first-child{color:rgba(255,255,255,.62);flex:none;width:62px}
.sl-input{flex:1;background:none;border:none;outline:none;color:#fff;font-size:var(--fs-13);
  font-family:inherit}
.sl-count{font-size:10px;color:rgba(255,255,255,.4)}
.sl-chips{display:flex;gap:7px;margin-left:auto}
.sl-chips .chip{background:rgba(255,255,255,.1);color:rgba(255,255,255,.75)}
.sl-chips .chip.on{background:var(--brand-grad);color:#fff}
.sl-more{color:#FF9EC0;font-size:11.5px}
.sl-agree{display:flex;align-items:flex-start;gap:7px;font-size:10.5px;color:rgba(255,255,255,.6);
  padding:14px 0;line-height:1.6}
.sl-agree .cbx{background:var(--brand);color:#fff;border:none}
.sl-start{height:48px;border-radius:24px;background:var(--brand-grad);color:#fff;
  font-size:var(--fs-16);font-weight:600;display:flex;align-items:center;justify-content:center;
  box-shadow:0 10px 26px rgba(255,76,129,.4)}

/* =========================================================================
   第四批：补齐《方案》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{width:44px;height:26px;border-radius:13px;background:var(--brand-grad);position:relative;flex:none}
.p4-sw::after,.set-item .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{background:#E9E9EE}
.p4-sw.off::after,.set-item .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}
.p4-prop{background:#fff;border-radius:14px;padding:10px 8px;text-align:center}
.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}
.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.off{opacity:.62}

/* --- 暗色房间页（连麦 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}
.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}
.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-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}
.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-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-more{margin-left:auto;margin-right:4px;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}

/* 认证条：真机是「左右各 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}
/* 真机（f_0011）：反诈条底 82.5 → 资料卡顶 93.1，卡左右各 10（宽 340）。
   通用 .chatx 的 6px/12px 内距会把卡片往右挤 12、往下挤 6，这里按真机改掉。 */
.chatpage .body.chatx{padding:10.6px 0 0}
.chatpage .msgs{padding:0}
.chatpage .chat-loading{padding:42px 16px;text-align:center;color:#A9A6AE;font-size:13px}
.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 .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 .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}

/* 匹配度卡：白底 + 粉描边，只在真拿到 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:35px;padding:0 10px 0 13.8px;background:#fff;display:flex;align-items:center}
.chatpage .cinput .ci-mic{width:21.2px;height:21.2px;flex:none;display:flex;align-items:center;justify-content:center;cursor:pointer;color:#26262A}
.chatpage .cinput .ci-mic-c{width:10px;height:14.4px;display:flex;align-items:center;justify-content:center;color:#26262A;transform:translate(-1.27px,.58px)}
.chatpage .cinput .ci-mic .ico{width:10px;height:14.4px}
.chatpage .cinput .ci-ipt{position:relative;flex:1;min-width:0;height:35px;margin:0 2.55px 0 7px;border-radius:17.5px;background:#FBFBFD;
  display:flex;align-items:center;padding:0 11.9px 0 8.9px;cursor:text}
.chatpage .cinput input.ci-ph{display:block;box-sizing:border-box;width:100%;height:100%;min-width:0;line-height:35px;
  border:0;outline:0;background:transparent;padding:0;color:#3A3A3C;font-size:12.7px}
.chatpage .cinput input.ci-ph::placeholder{color:#A5A5A6;opacity:1}
.chatpage .cinput .ci-ph{flex:1;min-width:0;font-size:12.7px;color:#A5A5A6;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.chatpage .cinput .ci-dots{width:18.8px;flex:none;display:flex;align-items:center;justify-content:space-between;cursor:pointer}
.chatpage .cinput .ci-dots i{width:3.8px;height:3.8px;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;left:233px;top:50%;transform:translateY(-50%);
  width:22.5px;height:22.5px}
.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:25.6px;height:25.6px;border-radius:50%;flex:none;cursor:pointer;color:#fff;
  background:linear-gradient(145deg,#FF9C6B,#FF6A78 60%,#F9507C);display:flex;align-items:center;justify-content:center}
.chatpage .cinput .ci-send .ico{width:10px;height:14px;color:#fff}
.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)}
/* 「新」红牌：真机 f_0011 量得 19.6×14、圆角 7、中心 (193.3, 700.1) */
.chatpage .ctools .ct-new{position:absolute;left:calc(50% + 3.3px);top:calc(50% - 17.5px);height:14px;padding:0 5px;
  border-radius:7px;background:#FF3B4E;color:#fff;font-style:normal;font-size:10.5px;font-weight:700;line-height:14px}
.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}
/* 更多面板（真机 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:41px;display:flex;align-items:center;justify-content:center;font-size:29px;line-height:1;cursor:pointer}
.chatpage .cte-e img{width:30px;height:30px;object-fit:contain}
.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}

/* 顶部「平台倡导真实交友」粉色海报条（f_0003 量得：左右 10 → 宽 340，顶 48.75、高 59.4，圆角 13）。
   它是**浮层**：真机里它压在同一条灰色反诈条上，下方资料卡位置不动（f_0003 与 f_0011 的照片顶
   都在 css 109 一带）。所以这里用 absolute 盖住反诈条，收起后反诈条自然露出来。 */
.chatpage .cpromo{position:absolute;left:10px;right:10px;top:49px;height:59.4px;z-index:16;
  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{padding-left:16.9px;line-height:1.22}
.chatpage .cpromo .cpromo-tx b{display:block;font-size:15px;font-weight:700;letter-spacing:.2px}
.chatpage .cpromo .cpromo-tx em{display:block;margin-top:5.4px;font-style:normal;font-size:12.5px;opacity:.96}
/* 白胶囊「去上传」：x 264.4~324.4（宽 60）、y 66.2~90.6（高 24.4）、垂直居中 */
.chatpage .cpromo .cpromo-go{position:absolute;right:25px;top:50%;transform:translateY(-50%);
  width:60px;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:6.4px;top:6.4px;width:20px;height:20px;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{margin:0 10px 16px;padding:12.5px 16.4px 12px;border-radius:12px;background:#fff;
  box-shadow:inset 0 0 0 1px #F7D3DF;position:relative}
.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-more{margin-left:auto;padding-top:5px;font-size:12.5px;line-height:14px;color:#8A8790;
  cursor:pointer;white-space:nowrap}
/* 语音胶囊（真机 f_0010 复量：胶囊 x 263.8~332.5 → 69.4×25、appY 131.2~155.6、垂直中心 143.4；
   白墨只有 x 284.4~309（喇叭 ~12 + 「10s」字高 8.8 → 字号 12.5），左右内边距各 ≈20.6 / 23.5；
   **渐变是横的、左粉右橙**（x=430→(254,85,126) 深粉、x=528→(255,143,106) 橙，上下同色 → 90deg）。
   上一版写成 120deg 且橙在左，方向是反的。 */
.chatpage .peercard .pc-voice{position:absolute;right:16.2px;top:37.8px;height:25px;padding:0 20px;
  border-radius:12.5px;background:linear-gradient(90deg,#FF557E,#FF8F6A);color:#fff;
  display:flex;align-items:center;gap:4px;cursor:pointer}
.chatpage .peercard .pc-voice .ico{width:12px;height:12px}
.chatpage .peercard .pc-voice b{font-size:12.5px;font-weight:600}
.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}
/* 反诈提示条（f_0011：93.1~126.6，底 #F6F6F6，「裸聊」红字、其余 #3A3A3C） */
.chatpage .csafe{flex:none;background:#F6F7F9;padding:8px 6px 8px 15px;
  font-size:10.7px;line-height:18.1px;color:#3A3A3C;word-break:break-word}
.chatpage .csafe .csafe-link{color:#4E88D8}
.chatpage .csafe .csafe-r{color:#E8695F}
.chatpage .csafe[hidden]{display:none}


/* 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,
.chatpage[data-chat-loading="1"] .csafe{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:8px}
/* 键盘态（真机 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-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))}
/* 真机：播放圆 15px @(10,12.7)（卡左 12.5, 卡顶 96） */
.vdt-card .vdt-play{position:absolute;left:10px;top:12.7px;width:15px;height:15px;border-radius:50%;
  box-shadow:inset 0 0 0 1.4px rgba(255,255,255,.92);background:rgba(0,0,0,.16);
  display:flex;align-items:center;justify-content:center;color:#fff}
/* 真机 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，所以逐条挪。 */
.vds-back{position:absolute;left:2.3px;top:-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}
/* 礼物：真机 f_0004 整格墨迹（含右上「新」）= 61×60 帧px = 38.1×37.5 CSS；我们原来 34 盒 → 67×55（偏宽偏矮） */
.famchat .fc-tools [data-fc-tool="gift"] img{width:38px;height:38px}
.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}
.famchat .fc-tools .fc-tool .ct-new{position:absolute;left:calc(50% + 1px);top:calc(50% - 18px);height:14px;
  padding:0 5px;border-radius:7px;background:#FF3B4E;color:#fff;font-size:10px;line-height:14px;
  font-style:normal;white-space:nowrap}
/* 家族群聊 · 键盘态：真机 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 高）。
   ========================================================================= */
.p4-gift{position:absolute;left:0;right:0;bottom:0;height:472.75px;display:flex;flex-direction:column;
  background:transparent;border-radius:0;padding:0;color:#1A1A1A;overflow:visible}
.gm-strip{position:relative;flex:none;height:108.75px}
/* 财富值卡：真机 f_0037 帧 y524..581（CSS y327.5..363.1 h35.6）、x14..562（CSS 8.75..351.25 w342.5，圆角9）
   里面是「绿箭头等级牌 + 进度条 + 文案」：牌帧x28..82 y536..562、条帧x100..556 y533..551、文案帧x100..215 y553..570 */
.gm-wealth{position:absolute;left:8.75px;top:0;width:342.5px;height:35.6px;border-radius:9px;
  background:linear-gradient(90deg,#FDF0F3 0%,#FFF5F2 55%,#FFFAF6 100%);
  box-shadow:inset 0 0 0 1px rgba(255,206,220,.75)}
.gm-wealth .gw-lv{position:absolute;left:8.75px;top:7.5px;width:33.75px;height:16.25px;
  clip-path:polygon(0 50%,7px 0,100% 0,100% 100%,7px 100%);
  background:linear-gradient(90deg,#4FD0E4 0%,#3FCB8E 46%,#4BC85A 100%);
  color:#fff;font-size:11px;font-weight:700;line-height:16.25px;text-align:center;padding-left:5px;
  box-sizing:border-box}
.gm-wealth .gw-track{position:absolute;left:53.75px;top:5.6px;width:285px;height:11.25px;
  border-radius:5.6px;background:#FFFDFB;box-shadow:inset 0 0 0 1px rgba(255,203,214,.9);overflow:hidden}
.gm-wealth .gw-fill{position:absolute;left:0;top:0;bottom:0;width:0;border-radius:5.6px;
  background:linear-gradient(90deg,#FF4E6E,#FF8A5C)}
.gm-wealth .gw-gain{position:absolute;top:1.6px;bottom:1.6px;left:0;width:0;border-radius:5px;
  background:repeating-linear-gradient(115deg,rgba(255,110,140,.5) 0 2.6px,rgba(255,255,255,0) 2.6px 7.5px)}
.gm-wealth .gw-txt{position:absolute;left:53.75px;top:18.1px;font-size:12.5px;line-height:12px;
  color:#C193A0;white-space:nowrap}
/* Tab 相关推广条：真机 f_0037 帧 y598..697（CSS y373.75..435.6 h61.9，圆角10）；
   标题墨迹 帧x45..335 y611..642、副标题 帧y655..668、查看规则胶囊 帧x364..465 y615..648 */
.gm-promo{position:absolute;left:8.75px;top:46.25px;width:342.5px;height:61.9px;border-radius:10px;
  overflow:hidden;background:linear-gradient(95deg,#FF5D8A 0%,#FF7B9C 30%,#FF9A93 62%,#FFC79E 100%)}
.gm-promo::after{content:"";position:absolute;right:-18px;top:-22px;width:132px;height:106px;border-radius:50%;
  background:radial-gradient(closest-side,rgba(255,214,150,.95),rgba(255,196,130,.35) 68%,rgba(255,196,130,0))}
.gm-promo b{position:absolute;left:19.35px;top:8.15px;font-size:19px;font-weight:800;color:#fff;
  letter-spacing:-.5px;text-shadow:0 2px 0 rgba(206,52,104,.5);white-space:nowrap}
.gm-promo small{position:absolute;left:19.35px;top:35.6px;font-size:9.5px;line-height:10px;
  color:rgba(255,255,255,.95);white-space:nowrap}
.gm-promo .gm-promo-btn{position:absolute;left:218.75px;top:10.65px;width:63.1px;height:20.6px;
  border-radius:10.3px;background:linear-gradient(90deg,#FF3B8D,#D8449C);color:#fff;font-size:12.5px;
  font-weight:700;line-height:20.6px;text-align:center;box-shadow:inset 0 0 0 1.5px rgba(255,255,255,.5)}
/* 粉色渐变带：真机是不透明的「左橙→中粉→右奶油橙」横向渐变 + 越往下越白 */
.p4-gift::before{content:"";position:absolute;left:0;right:0;top:108.75px;height:41px;border-radius:14px 14px 0 0;
  background:linear-gradient(180deg,rgba(255,255,255,0) 0%,rgba(255,255,255,.58) 100%),
             linear-gradient(90deg,#FF9673 0%,#FF7B7D 42%,#FF9673 62%,#FFC59C 100%);z-index:0}
.gm-mask{background:rgba(0,0,0,.05);backdrop-filter:none}

/* Tab 条：真机 6 个 Tab 的中心 x33.5 + 44.5k */
.p4-gift .gift-tabs{position:relative;z-index:1;display:flex;align-items:center;gap:14px;flex:none;
  height:41px;padding:4px 0 0 18.7px;margin:0;font-size:14.5px;line-height:1;color:#fff}
.p4-gift .gift-tabs>span{white-space:nowrap;text-shadow:0 1px 3px rgba(190,60,40,.28);cursor:pointer}
.p4-gift .gift-tabs .on{font-weight:700;color:#fff}
.p4-gift .gift-tabs .on::after{display: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)}
.p4-gift .gm-x1{position:absolute;left:186px;top:151.55px;width:60px;text-align:center;font-size:34px;
  font-style:italic;font-weight:700;color:#FFD33C;text-shadow:0 2px 8px rgba(0,0,0,.3);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}
.p4-gift .gift-grid{flex:1;display:flex;flex-wrap:wrap;align-content:flex-start;justify-content:space-between;
  padding:11.5px 8.6px 0;overflow-y:auto;gap:6.25px 0;scrollbar-width:none}
.p4-gift .gift-grid::-webkit-scrollbar{display:none}
.p4-gift .gm-note{width:100%;padding:20px 0;text-align:center;font-size:12.5px;color:#8A8A94}
.p4-gift .gift{width:85.7px;height:102.5px;position:relative;text-align:center;flex:none}
.p4-gift .gift img{width:62px;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}
.p4-gift .gm-qty{position:absolute;left:216px;top:0;width:64.6px;height:25.6px;border-radius:12.8px;
  background:#fff;box-shadow:0 0 0 1px #FFD3E0;display:flex;align-items:center;justify-content:center;
  gap:9px;font-size:14px;color:#2A2A30}
.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:absolute;left:280.6px;top:0;width:64.9px;height:25.6px;line-height:25.6px;
  border-radius:12.8px;background:linear-gradient(90deg,#FF3D7A,#FF8A45);color:#fff;font-size:13px;
  font-weight:500;text-align:center;padding:0;box-sizing:border-box}

/* 面板底部那条手势条：真机 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-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}
.lv-empty{display:flex;flex-direction:column;align-items:center;padding-top:0}
.lv-empty svg{width:142px;height:158px;margin-top:15.1px;transform:translateX(-2.8px)}
.lv-empty span{margin-top:-17.8px;font-size:13.8px;color:#A9A9B2}

/* 聊天页「按住说话」面板 —— 真机 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}

/* ---------------------------------------------------------------- 用户名片弹层（真机 a28fb78a f_0064）
   几何量自该帧：弹层上沿 446.2 CSS（层高 353.8）、头像 58 圆且上沿高出层顶 9、
   昵称行顶 49.4（字高 13.1）、等级牌顶 89.8、UID 行顶 108.8（字号 11）、
   亲密卡 143.8~197.6（54.4 高）、荣耀卡 208.8~263.2（55 高）、
   按钮行 283.2~316.9（34.4 高；送礼 70.6 宽@左63.1、私信 75.6@141.9、@TA 76.2@223.8）。
   配色：亲密卡 #FDECF7→#F4F2F8 / 标题 #E8558A；荣耀卡 #FBF1EC→#F8EDE8 / 标题 #E08A3C；按钮底 #F5F4F6。 */
.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(36.9px + 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-lv{margin-top:25px;display:flex;justify-content:center}
.uc-lvpill{min-width:34px;height:18px;padding:0 6px;border-radius:9px;display:flex;align-items:center;justify-content:center;
  background:linear-gradient(90deg,#5FE0A8,#2FC08A);color:#fff;font-size:11px;font-weight:700}
.uc-uid{margin-top:1px;text-align:center;font-size:11px;color:#8E8891;line-height:1.4}
.uc-card{margin-top:18.4px;height:54.4px;border-radius:12px;padding:0 12px;display:flex;align-items:center;
  position:relative;overflow:hidden}
.uc-card+.uc-card{margin-top:11.2px;height:55px}
.uc-cl{display:flex;flex-direction:column;gap:3px;flex:none}
.uc-cl b{font-size:14.5px;font-weight:700}
.uc-cl i{font-size:12px;font-style:normal;color:#3A343D;font-weight:600}
.uc-pink{background:linear-gradient(96deg,#FDECF7,#F4F2F8)}
.uc-pink .uc-cl b{color:#E8558A}
.uc-cream{background:linear-gradient(96deg,#FBF1EC,#F8EDE8)}
.uc-cream .uc-cl b{color:#E08A3C}
.uc-cr{margin-left:auto;font-size:11.5px;color:#A9A4AE;display:flex;align-items:center;gap:6px}
.uc-cr u,.uc-cream>u{text-decoration:none;color:#C6C1CA;font-size:15px;line-height:1}
.uc-medals{margin-left:auto;display:flex;align-items:center;gap:4px}
.uc-medals img{width:34px;height:34px;object-fit:contain}
.uc-cream>u{margin-left:6px}
.uc-btns{margin-top:18px;display:flex;align-items:center;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;margin-left:53.1px;color:#E8558A}
.uc-btns button[data-uc-dm]{width:75.6px;margin-left:8.2px}
.uc-btns button[data-uc-at]{width:76.2px;margin-left:6.3px}

/* 榜单台座皇冠 —— 真机 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;
}

/* 直播画面：垫在封面之上、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}
