/* Dream Lounge · 数字客厅 · 微信风格 */
:root{
  --wx-bg:#ededed; --wx-bar:#f7f7f7; --wx-line:#d9d9d9;
  --wx-text:#181818; --wx-sub:#9a9a9a; --wx-bubble:#fff; --wx-me:#95ec69;
  --wx-green:#07c160; --wx-time:#b2b2b2;
}
*{box-sizing:border-box;-webkit-tap-highlight-color:transparent;}
html,body{height:100%;margin:0;}
body{
  font-family:-apple-system,BlinkMacSystemFont,"PingFang SC","Hiragino Sans GB","Microsoft YaHei","Segoe UI",Roboto,Helvetica,Arial,sans-serif;
  background:#c9cdd4;color:var(--wx-text);display:flex;align-items:center;justify-content:center;-webkit-font-smoothing:antialiased;
}
#phone{position:relative;width:100%;max-width:460px;height:100vh;height:100dvh;max-height:920px;background:var(--wx-bg);overflow:hidden;box-shadow:0 12px 48px rgba(0,0,0,.28);}
@media (max-width:480px){ #phone{height:100vh;height:100dvh;max-height:none;box-shadow:none;} }

.view{position:absolute;inset:0;display:flex;flex-direction:column;background:var(--wx-bg);}
.view.hidden{display:none;}

/* ── 顶栏 ── */
.topbar{flex:0 0 auto;height:54px;background:var(--wx-bar);border-bottom:1px solid var(--wx-line);
  display:flex;align-items:center;padding:0 6px;padding-top:env(safe-area-inset-top);}
.title-wrap{flex:1;text-align:center;overflow:hidden;}
.bar-title{font-size:16px;font-weight:600;line-height:1.2;}
#roomSub{font-size:11px;color:var(--wx-sub);line-height:1.3;margin-top:1px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;}
#roomSub.typing{color:var(--wx-green);}
.icon-btn{border:none;background:none;font-size:24px;color:#333;width:40px;height:40px;line-height:1;cursor:pointer;border-radius:8px;flex:0 0 auto;}
.icon-btn:active{background:rgba(0,0,0,.06);}
#newGroupBtn,#rosterBtn{font-size:22px;}

/* ── 会话列表 ── */
#convList{flex:1;overflow-y:auto;background:#fff;}
.conv{display:flex;align-items:center;gap:12px;padding:11px 14px;cursor:pointer;border-bottom:1px solid #f0f0f0;}
.conv:active{background:#ececec;}
.conv .av-wrap{flex:0 0 auto;width:46px;height:46px;border-radius:8px;overflow:hidden;background:#e6e6e6;
  display:grid;gap:1px;}
.conv .av-wrap.single{display:flex;align-items:center;justify-content:center;}
.conv .av-wrap.grid4{grid-template-columns:1fr 1fr;grid-template-rows:1fr 1fr;padding:2px;background:#d6d8dc;}
.conv .av-cell{display:flex;align-items:center;justify-content:center;color:#fff;font-size:12px;border-radius:3px;}
.conv .av-wrap.single .av-cell{width:100%;height:100%;font-size:24px;border-radius:8px;}
.conv .c-mid{flex:1;min-width:0;}
.conv .c-name{font-size:16px;font-weight:500;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;}
.conv .c-last{font-size:13px;color:var(--wx-sub);white-space:nowrap;overflow:hidden;text-overflow:ellipsis;margin-top:2px;}
.conv .c-time{flex:0 0 auto;font-size:11px;color:var(--wx-time);align-self:flex-start;margin-top:3px;}
.conv .badge{font-size:10px;color:#fff;background:#bcc1c9;border-radius:4px;padding:0 4px;margin-left:6px;vertical-align:1px;}

/* ── 消息区 ── */
#chat{flex:1 1 auto;overflow-y:auto;padding:14px 12px 8px;display:flex;flex-direction:column;gap:14px;-webkit-overflow-scrolling:touch;}
.time-sep{align-self:center;font-size:12px;color:var(--wx-time);background:rgba(0,0,0,.06);padding:1px 8px;border-radius:4px;margin:2px 0;}
.row{display:flex;align-items:flex-start;gap:9px;max-width:100%;}
.row.me{flex-direction:row-reverse;}
.avatar{flex:0 0 auto;width:40px;height:40px;border-radius:7px;display:flex;align-items:center;justify-content:center;font-size:20px;color:#fff;font-weight:600;user-select:none;box-shadow:inset 0 0 0 1px rgba(0,0,0,.04);}
.avatar.me{background:#b8b8b8;font-size:16px;}
.stack{display:flex;flex-direction:column;max-width:74%;min-width:0;}
.row.me .stack{align-items:flex-end;}
.presence{font-size:11px;color:var(--wx-sub);opacity:.62;margin:0 2px 2px;letter-spacing:.2px;line-height:1.3;}
.name{font-size:12px;color:var(--wx-sub);margin:0 2px 3px;}
.bubble{position:relative;padding:9px 12px;border-radius:6px;font-size:15.5px;line-height:1.5;word-break:break-word;white-space:pre-wrap;background:var(--wx-bubble);box-shadow:0 1px 1px rgba(0,0,0,.04);}
.row.me .bubble{background:var(--wx-me);}
.bubble::before{content:"";position:absolute;top:13px;width:0;height:0;border:6px solid transparent;}
.row:not(.me) .bubble::before{left:-11px;border-right-color:var(--wx-bubble);}
.row.me .bubble::before{right:-11px;border-left-color:var(--wx-me);}
.bubble.typing{display:flex;gap:4px;padding:13px 14px;}
.bubble.typing span{width:7px;height:7px;border-radius:50%;background:#bcbcbc;animation:blink 1.2s infinite both;}
.bubble.typing span:nth-child(2){animation-delay:.2s;} .bubble.typing span:nth-child(3){animation-delay:.4s;}
@keyframes blink{0%,80%,100%{opacity:.3;transform:translateY(0);}40%{opacity:1;transform:translateY(-3px);}}

/* ── 输入栏 ── */
#inputbar{flex:0 0 auto;background:var(--wx-bar);border-top:1px solid var(--wx-line);display:flex;align-items:flex-end;gap:7px;padding:8px 10px;padding-bottom:calc(8px + env(safe-area-inset-bottom));}
#ambientBtn{flex:0 0 auto;border:none;background:#fff;border-radius:7px;width:38px;height:38px;font-size:18px;cursor:pointer;}
#ambientBtn:active{background:#eee;}
#msgInput{flex:1;resize:none;border:none;border-radius:7px;background:#fff;font-size:15.5px;line-height:1.4;padding:9px 11px;max-height:120px;font-family:inherit;color:var(--wx-text);outline:none;}
#sendBtn{flex:0 0 auto;border:none;background:var(--wx-green);color:#fff;font-size:15px;font-weight:500;border-radius:7px;padding:9px 16px;cursor:pointer;transition:opacity .15s;}
#sendBtn:disabled{opacity:.5;cursor:default;}
#sendBtn:active:not(:disabled){background:#06ad56;}

/* ── 抽屉 / 蒙层 通用 ── */
.mask{position:absolute;inset:0;background:rgba(0,0,0,.35);z-index:20;transition:opacity .2s;}
.mask.hidden{opacity:0;pointer-events:none;}
.drawer{position:absolute;top:0;right:0;bottom:0;width:80%;max-width:330px;z-index:21;background:#f4f4f5;display:flex;flex-direction:column;transition:transform .25s ease;box-shadow:-6px 0 24px rgba(0,0,0,.18);}
.drawer.hidden{transform:translateX(100%);}
.roster-head{display:flex;align-items:center;justify-content:space-between;padding:14px 14px 10px;font-size:15px;font-weight:600;padding-top:calc(14px + env(safe-area-inset-top));}
#rosterList{flex:1;overflow-y:auto;padding:4px 0;}
.member{display:flex;align-items:center;gap:11px;padding:11px 16px;}
.member .avatar{width:42px;height:42px;font-size:21px;}
.member.offline{opacity:.45;}
.member .m-name{font-size:15px;font-weight:500;display:flex;align-items:center;gap:6px;}
.member .m-title{font-size:12px;color:var(--wx-sub);margin-top:2px;}
.dot{width:7px;height:7px;border-radius:50%;background:var(--wx-green);flex:0 0 auto;}
.member.offline .dot{background:#c4c4c4;}
#resetBtn{margin:12px 16px calc(16px + env(safe-area-inset-bottom));border:1px solid var(--wx-line);background:#fff;color:#888;border-radius:8px;padding:10px;font-size:13px;cursor:pointer;}
#resetBtn:active{background:#eee;}

/* ── 发起群聊 ── */
.group-name{margin:0 16px 8px;border:1px solid var(--wx-line);border-radius:8px;padding:10px;font-size:14px;outline:none;font-family:inherit;}
#groupPick{flex:1;overflow-y:auto;padding:4px 0;}
.pick{display:flex;align-items:center;gap:11px;padding:10px 16px;cursor:pointer;}
.pick:active{background:#ececec;}
.pick .avatar{width:38px;height:38px;font-size:19px;}
.pick .p-name{flex:1;font-size:15px;}
.pick .check{width:20px;height:20px;border-radius:50%;border:1.5px solid #c4c4c4;flex:0 0 auto;display:flex;align-items:center;justify-content:center;color:#fff;font-size:13px;}
.pick.on .check{background:var(--wx-green);border-color:var(--wx-green);}
.primary-btn{margin:10px 16px calc(16px + env(safe-area-inset-bottom));border:none;background:var(--wx-green);color:#fff;border-radius:8px;padding:12px;font-size:15px;font-weight:500;cursor:pointer;}
.primary-btn:active{background:#06ad56;}
.primary-btn:disabled{opacity:.5;}

/* ===== v1.3: Tab 栏 / 通讯录 / 朋友圈 / 我 / 资料 ===== */
.view.tab{bottom:calc(52px + env(safe-area-inset-bottom));z-index:1;}
.view.overlay{z-index:10;}
.scroll{flex:1;overflow-y:auto;-webkit-overflow-scrolling:touch;}

#tabbar{position:absolute;left:0;right:0;bottom:0;height:calc(52px + env(safe-area-inset-bottom));
  padding-bottom:env(safe-area-inset-bottom);background:#f7f7f7;border-top:1px solid var(--wx-line);
  display:flex;z-index:5;}
.tab-btn{flex:1;border:none;background:none;display:flex;flex-direction:column;align-items:center;justify-content:center;
  gap:2px;font-size:11px;color:#7a7a7a;cursor:pointer;}
.tab-btn .ti{font-size:21px;line-height:1;filter:grayscale(1) opacity(.6);}
.tab-btn.on{color:var(--wx-green);}
.tab-btn.on .ti{filter:none;}
.text-btn{border:none;background:none;color:var(--wx-green);font-size:15px;cursor:pointer;padding:0 10px;width:auto;}

/* 通讯录 */
#contactList{background:#fff;}
.contact{display:flex;align-items:center;gap:12px;padding:10px 14px;cursor:pointer;border-bottom:1px solid #f0f0f0;}
.contact:active{background:#ececec;}
.contact .avatar{width:42px;height:42px;font-size:21px;}
.contact .c-name{font-size:16px;}
.contact .c-status{font-size:12px;color:var(--wx-sub);margin-top:2px;}
.contact-hd{padding:8px 14px 4px;font-size:12px;color:var(--wx-sub);background:#ededed;}

/* 朋友圈 */
#momGen,#momCompose{font-size:20px;}
#momentList{background:#fff;}
.mom-cover{height:150px;background:linear-gradient(135deg,#3a4a63,#6b5b95);display:flex;align-items:flex-end;justify-content:flex-end;padding:14px;}
.mom-cover .me-strip{display:flex;align-items:center;gap:10px;color:#fff;}
.mom-cover .me-strip .nm{font-size:16px;font-weight:600;text-shadow:0 1px 3px rgba(0,0,0,.4);}
.mom-cover .avatar{width:54px;height:54px;font-size:26px;border-radius:9px;box-shadow:0 2px 8px rgba(0,0,0,.3);}
.mom{display:flex;gap:11px;padding:14px;border-bottom:1px solid #f2f2f2;}
.mom .avatar{width:42px;height:42px;font-size:21px;flex:0 0 auto;}
.mom .m-main{flex:1;min-width:0;}
.mom .m-name{font-size:15px;font-weight:600;color:#576b95;}   /* 微信朋友圈同款名字蓝 */
.mom .m-likes .lk-name{color:#576b95;}
.m-comments .cm .cm-name{color:#576b95;cursor:pointer;}
.mom .m-text{font-size:15px;line-height:1.5;margin:3px 0 6px;white-space:pre-wrap;word-break:break-word;}
.mom .m-foot{display:flex;align-items:center;gap:10px;}
.mom .m-time{font-size:12px;color:var(--wx-time);}
.mom .m-act{margin-left:auto;font-size:12px;color:#576b95;background:#f2f4f7;border-radius:5px;padding:2px 9px;cursor:pointer;}
.mom .m-likes{margin-top:8px;background:#f7f7f7;border-radius:6px;padding:7px 10px;font-size:13.5px;color:#576b95;}
.mom .m-likes .heart{color:#576b95;margin-right:5px;}
.mom .m-comments{margin-top:6px;background:#f7f7f7;border-radius:6px;padding:4px 10px;}
.mom .m-likes + .m-comments{margin-top:0;border-top:1px solid #ececec;border-radius:0 0 6px 6px;}
.mom .cm{font-size:13.5px;line-height:1.7;}
.mom .cm b{color:#576b95;font-weight:600;}
.mention{color:#576b95;}

/* 资料页 */
#profBody,#meBody,#editBody{background:#ededed;}
.prof-card{background:#fff;display:flex;align-items:center;gap:14px;padding:20px 16px;margin-bottom:10px;cursor:default;}
.prof-card.tap{cursor:pointer;}
.prof-card.tap:active{background:#f3f3f3;}
.prof-card .avatar{width:60px;height:60px;font-size:30px;border-radius:11px;}
.prof-card .p-nick{font-size:20px;font-weight:600;}
.prof-card .p-sub{font-size:13px;color:var(--wx-sub);margin-top:5px;}
.prof-sec{background:#fff;padding:14px 16px;margin-bottom:10px;}
.prof-sec .k{font-size:12px;color:var(--wx-sub);}
.prof-sec .v{font-size:15px;margin-top:5px;line-height:1.5;white-space:pre-wrap;}
.prof-btn{display:block;width:calc(100% - 32px);margin:16px;border:none;background:var(--wx-green);color:#fff;border-radius:8px;padding:12px;font-size:15px;cursor:pointer;}
.prof-btn:active{background:#06ad56;}

/* 编辑 */
.edit-row{background:#fff;padding:12px 16px;border-bottom:1px solid #f0f0f0;}
.edit-row .lbl{font-size:12px;color:var(--wx-sub);margin-bottom:6px;}
.edit-row input,.edit-row textarea{width:100%;border:none;outline:none;font-size:15px;font-family:inherit;resize:none;color:var(--wx-text);background:none;}
.pick-grid{display:flex;flex-wrap:wrap;gap:9px;padding:12px 16px;background:#fff;border-bottom:1px solid #f0f0f0;}
.pick-grid .lbl{flex-basis:100%;font-size:12px;color:var(--wx-sub);margin-bottom:2px;}
.av-opt{width:42px;height:42px;border-radius:9px;display:flex;align-items:center;justify-content:center;font-size:22px;background:#f0f0f0;cursor:pointer;border:2px solid transparent;}
.av-opt.on{border-color:var(--wx-green);}
.co-opt{width:30px;height:30px;border-radius:50%;cursor:pointer;border:2px solid transparent;}
.co-opt.on{border-color:#333;}

/* @ 选择器 */
.at-picker{position:absolute;left:10px;right:10px;bottom:60px;background:#fff;border-radius:10px;box-shadow:0 4px 20px rgba(0,0,0,.2);max-height:50%;overflow-y:auto;z-index:12;}
.at-picker.hidden{display:none;}
.at-item{display:flex;align-items:center;gap:10px;padding:10px 14px;cursor:pointer;border-bottom:1px solid #f2f2f2;}
.at-item:active{background:#eee;}
.at-item .avatar{width:34px;height:34px;font-size:17px;}
#atBtn{flex:0 0 auto;border:none;background:#fff;border-radius:7px;width:38px;height:38px;font-size:18px;cursor:pointer;color:#576b95;font-weight:600;}
#atBtn:active{background:#eee;}
.compose-text{margin:0 16px 10px;border:1px solid var(--wx-line);border-radius:8px;padding:11px;font-size:15px;min-height:120px;resize:none;outline:none;font-family:inherit;}

/* ===== v1.4: 表情包 + CC ===== */
#stickerBtn{flex:0 0 auto;border:none;background:#fff;border-radius:7px;width:38px;height:38px;font-size:18px;cursor:pointer;}
#stickerBtn:active{background:#eee;}
.sticker-panel{position:absolute;left:0;right:0;bottom:calc(56px + env(safe-area-inset-bottom));background:#f4f4f5;border-top:1px solid var(--wx-line);
  display:block;padding:10px 12px;max-height:50%;overflow-y:auto;z-index:12;-webkit-overflow-scrolling:touch;}
.sticker-panel.hidden{display:none;}
.sticker-panel .stk{display:flex;align-items:center;justify-content:center;font-size:26px;height:42px;border-radius:8px;cursor:pointer;}
.sticker-panel .stk:active{background:#e2e2e2;}
.stk-egrid{display:grid;grid-template-columns:repeat(8,1fr);gap:4px;margin-bottom:4px;}
@media (max-width:480px){ .stk-egrid{grid-template-columns:repeat(7,1fr);} }
.bubble.sticker{background:none!important;box-shadow:none;padding:2px 0;font-size:48px;line-height:1.05;}
.bubble.sticker::before{display:none;}

/* ===== v1.5: 墙（公示板） ===== */
.wall-chips{flex:0 0 auto;display:flex;gap:8px;overflow-x:auto;padding:10px 12px;background:#fff;border-bottom:1px solid #f0f0f0;}
.wall-chips .chip{flex:0 0 auto;font-size:13px;padding:6px 12px;border-radius:14px;background:#f0f1f3;color:#555;cursor:pointer;white-space:nowrap;}
.wall-chips .chip.on{background:var(--wx-green);color:#fff;}
#wallList{background:#ededed;padding:10px 0;}
.wpost{background:#fff;margin:0 0 10px;padding:13px 15px;}
.wpost .w-head{display:flex;align-items:center;gap:9px;}
.wpost .avatar{width:38px;height:38px;font-size:19px;}
.wpost .w-name{font-size:14px;font-weight:600;}
.wpost .w-board{margin-left:auto;font-size:11px;color:#fff;border-radius:10px;padding:2px 9px;}
.wpost .w-text{font-size:15px;line-height:1.55;margin:8px 0 6px;white-space:pre-wrap;word-break:break-word;}
.wpost .w-time{font-size:12px;color:var(--wx-time);}
.wall-empty{text-align:center;color:#9a9a9a;font-size:13px;padding:40px 20px;}
.wall-board-sel{display:flex;flex-wrap:wrap;gap:8px;padding:0 16px 10px;}
.wall-board-sel .bopt{font-size:13px;padding:7px 12px;border-radius:8px;background:#f0f1f3;color:#555;cursor:pointer;border:1.5px solid transparent;}
.wall-board-sel .bopt.on{background:#fff;border-color:var(--wx-green);color:var(--wx-green);}
.anon-row{display:flex;align-items:center;justify-content:space-between;margin:0 16px 10px;font-size:14px;color:#444;}
.anon-row input{width:20px;height:20px;}
#wallGen,#wallCompose{font-size:20px;}
.tab-btn .ti{font-size:20px;}

/* ===== v1.6: 响应式 ===== */
.desk-empty{display:none;}

/* 桌面端：像电脑版微信，宽。左 Tab 栏 + 列表列 + 内容区 */
@media (min-width:820px){
  body{background:#2e3238;}
  #phone{
    width:100vw;max-width:none;height:100vh;max-height:none;
    display:grid;grid-template-columns:66px 340px 1fr;grid-template-rows:100%;
    border-radius:0;box-shadow:none;
  }
  @media (max-width:480px){}  /* no-op guard */

  /* 左侧竖排 Tab 栏 */
  #tabbar{
    position:relative;left:auto;right:auto;bottom:auto;grid-column:1;grid-row:1;
    height:100%;width:66px;flex-direction:column;justify-content:flex-start;gap:2px;
    padding:18px 0 0;border-top:none;border-right:1px solid var(--wx-line);
    background:#e9eaec;z-index:3;
  }
  .tab-btn{height:60px;font-size:10px;}
  .tab-btn .ti{font-size:22px;}

  /* 列表列（聊天/通讯录） */
  .view.tab{
    position:relative;inset:auto;grid-column:2;grid-row:1;height:100%;bottom:auto;
    border-right:1px solid var(--wx-line);z-index:1;
  }
  /* 宽内容型：客厅 / 朋友圈 / 墙 / 我 铺满中间+右侧 */
  #roomView,#momentsView,#wallView,#meView{grid-column:2 / 4;border-right:none;}
  /* 客厅＝网游布局：房间铺大占左、小地图当右侧 HUD 填满空白 */
  #roomView{background:#1a1410;}
  #roomScroll{flex-direction:row;align-items:stretch;overflow:hidden;background:linear-gradient(135deg,#1f1812,#161009);height:100%;}
  #roomStage{max-width:none;width:auto;height:calc(100% - 24px);aspect-ratio:1/1;margin:12px;flex:0 0 auto;}
  #miniMap{flex:1 1 auto;min-width:200px;max-width:none;margin:16px 16px 16px 4px;overflow-y:auto;align-content:flex-start;}
  #miniMap .mm-row{width:100%;}

  /* 右侧内容区（聊天窗口 / 资料） */
  .view.overlay{position:relative;inset:auto;grid-column:3;grid-row:1;height:100%;z-index:2;}
  #editView{grid-column:2 / 4;}

  /* 右侧空态 */
  .desk-empty{display:flex;grid-column:3;grid-row:1;align-items:center;justify-content:center;
    text-align:center;color:#aeb3ba;font-size:14px;padding:0 30px;background:#ededed;z-index:0;}

  /* 桌面端列表常驻，不要返回键 */
  #backBtn{display:none;}

  /* 宽屏内容居中收窄，避免太空 */
  #wallChips,#wallList,#momentList,.mom-cover,#meBody{max-width:680px;margin-left:auto;margin-right:auto;width:100%;}
  #convList,#contactList{background:#fff;}

  /* 桌面端把弹层做成「居中弹窗」：position:fixed 相对视口居中，
     不受 grid 定位影响，叉叉永远点得到，也更像桌面应用的对话框 */
  .mask{position:fixed;}
  .drawer{
    position:fixed;top:50%;left:50%;right:auto;bottom:auto;
    transform:translate(-50%,-50%);width:440px;max-width:440px;height:auto;max-height:82vh;
    border-radius:14px;box-shadow:0 24px 70px rgba(0,0,0,.45);padding-bottom:14px;
    transition:transform .2s ease,opacity .2s ease;
  }
  .drawer.hidden{transform:translate(-50%,-50%) scale(.95);opacity:0;pointer-events:none;}
}

/* ===== v1.9: 服务号 ===== */
.svc-head{display:flex;align-items:center;gap:10px;padding:11px 14px;cursor:pointer;background:#fafafa;border-bottom:1px solid #f0f0f0;}
.svc-head:active{background:#f0f0f0;}
.svc-head .svc-ic{width:46px;height:46px;border-radius:8px;background:#eceef1;display:flex;align-items:center;justify-content:center;font-size:22px;flex:0 0 auto;}
.svc-head .svc-mid{flex:1;min-width:0;}
.svc-head .svc-name{font-size:16px;font-weight:500;}
.svc-head .svc-sub{font-size:12px;color:var(--wx-sub);margin-top:2px;}
.svc-head .svc-arrow{color:#c4c4c4;font-size:14px;transition:transform .2s;}
.svc-head.open .svc-arrow{transform:rotate(90deg);}
.svc-acct{display:flex;align-items:center;gap:11px;padding:10px 14px 10px 22px;cursor:pointer;border-bottom:1px solid #f3f3f3;background:#fff;}
.svc-acct:active{background:#ececec;}
.svc-acct .a-ic{width:38px;height:38px;border-radius:8px;display:flex;align-items:center;justify-content:center;font-size:19px;color:#fff;flex:0 0 auto;}
.svc-acct .a-name{font-size:15px;font-weight:500;}
.svc-acct .a-last{font-size:12px;color:var(--wx-sub);margin-top:2px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;}
.svc-acct .a-cnt{margin-left:auto;font-size:11px;color:#fff;background:#c4c8cf;border-radius:9px;padding:1px 7px;flex:0 0 auto;}
#feedList{background:#ededed;}
.feed-item{background:#fff;margin-bottom:9px;padding:13px 15px;}
.feed-item .fi-title{font-size:15.5px;font-weight:600;line-height:1.45;word-break:break-word;}
.feed-item .fi-sum{font-size:13px;color:#555;margin-top:5px;line-height:1.5;word-break:break-word;}
.feed-item .fi-meta{display:flex;align-items:center;gap:8px;margin-top:9px;}
.feed-item .fi-src{font-size:11px;color:#fff;border-radius:4px;padding:1px 7px;}
.feed-item .fi-time{font-size:11px;color:var(--wx-time);}
.feed-item .fi-fwd{margin-left:auto;font-size:12px;color:#fff;background:var(--wx-green);border:none;border-radius:6px;padding:5px 12px;cursor:pointer;}
.feed-item .fi-fwd:active{background:#06ad56;}
.feed-item .fi-link{font-size:11px;color:#576b95;margin-top:6px;word-break:break-all;user-select:all;}
.feed-empty{text-align:center;color:#9a9a9a;font-size:13px;padding:36px 24px;line-height:1.7;}

/* ===== v2.0: 朋友圈互动 / 公众号链接 / 群信息 ===== */
.mom .m-acts{margin-left:auto;display:flex;gap:6px;}
.m-btn{border:none;background:#f2f4f7;color:#576b95;font-size:12px;border-radius:5px;padding:3px 10px;cursor:pointer;}
.m-btn:active{background:#e6e9ee;}
.m-btn.on{background:#ffe1e6;color:#e0466c;}
.m-cmtbox{margin-top:8px;}
.m-cmtbox.hidden{display:none;}
.m-chips{display:flex;flex-wrap:wrap;gap:5px;margin-bottom:6px;}
.m-chip{width:26px;height:26px;border-radius:6px;display:flex;align-items:center;justify-content:center;color:#fff;font-size:13px;cursor:pointer;}
.m-cmtrow{display:flex;gap:6px;}
.m-cmtinput{flex:1;border:1px solid var(--wx-line);border-radius:6px;padding:7px 9px;font-size:14px;outline:none;}
.m-cmtsend{border:none;background:var(--wx-green);color:#fff;border-radius:6px;padding:0 14px;font-size:13px;cursor:pointer;}

.feed-item .fi-a{color:var(--wx-text);text-decoration:none;display:block;}
.feed-item .fi-open{color:#576b95;font-size:12px;font-weight:400;white-space:nowrap;}
.feed-item a.fi-link{color:#576b95;text-decoration:none;display:block;}

.ann-banner{flex:0 0 auto;display:flex;align-items:flex-start;gap:7px;background:#fbf3d8;border-bottom:1px solid #efe4bf;padding:9px 14px;font-size:13px;color:#7a6a32;line-height:1.5;}
.ann-banner.hidden{display:none;}
.ann-banner .ann-ic{flex:0 0 auto;}
.ann-banner .ann-tx{flex:1;word-break:break-word;}

.info-row{display:flex;align-items:center;gap:10px;padding:13px 16px;background:#fff;border-bottom:1px solid #f0f0f0;cursor:pointer;}
.info-row:active{background:#f3f3f3;}
.info-row .ir-k{font-size:14px;color:#333;flex:0 0 72px;}
.info-row .ir-v{flex:1;font-size:14px;color:#555;text-align:right;word-break:break-word;}
.info-row .ir-edit{color:#576b95;font-size:12px;margin-left:4px;}
.ml-hd{padding:14px 16px 6px;font-size:12px;color:var(--wx-sub);}
.adm-badge{font-size:10px;color:#fff;background:#e0a83a;border-radius:4px;padding:0 5px;font-weight:400;}
.adm-toggle{flex:0 0 auto;border:1px solid var(--wx-line);background:#fff;color:#888;font-size:12px;border-radius:6px;padding:4px 10px;cursor:pointer;}
.adm-toggle.on{border-color:#e0a83a;color:#e0a83a;}

/* ===== v2.2: 墙留言 + 朋友圈回复评论 ===== */
.m-comments .cm{cursor:pointer;}
.m-comments .cm:active,.wpost .w-comments .cm:active{opacity:.6;}
.wpost .w-foot{display:flex;align-items:center;gap:10px;margin-top:9px;}
.wpost .w-cmtbtn{margin-left:auto;border:none;background:#f2f4f7;color:#576b95;font-size:12px;border-radius:5px;padding:4px 12px;cursor:pointer;}
.wpost .w-cmtbtn:active{background:#e6e9ee;}
.wpost .w-comments{margin-top:9px;background:#f7f7f7;border-radius:6px;padding:6px 11px;}
.wpost .w-comments .cm{font-size:13.5px;line-height:1.75;cursor:pointer;word-break:break-word;}
.wpost .w-comments .cm b{color:#576b95;font-weight:600;}
.wpost .m-cmtbox{margin-top:9px;}

/* ===== v2.3: 主动私聊红点 ===== */
.conv-av{position:relative;flex:0 0 auto;}
.unread-badge{position:absolute;top:-5px;right:-5px;min-width:18px;height:18px;background:#fa5151;color:#fff;font-size:11px;line-height:1;border-radius:9px;display:flex;align-items:center;justify-content:center;padding:0 5px;border:1.5px solid #fff;box-sizing:border-box;}

/* ===== v2.4: 资料页·TA的朋友圈 / 动态状态 ===== */
.pf-mom{font-size:14px;line-height:1.55;color:#333;padding:8px 0;border-top:1px solid #f0f0f0;white-space:pre-wrap;word-break:break-word;}
.prof-sec .pf-mom:first-of-type{border-top:none;}
/* 个人朋友圈主页（点头像进来的那页） */
.pf-cover{height:170px;}
.pf-sig{background:#fff;padding:12px 16px 14px;border-bottom:8px solid #ededed;}
.pf-sig .s1{font-size:15px;color:#333;}
.pf-sig .s2{font-size:12.5px;color:var(--wx-sub);margin-top:5px;}
.pf-sig .s3{font-size:13px;color:#888;margin-top:6px;line-height:1.5;}
.pf-tl{background:#fff;padding:4px 16px 16px;}
.pf-item{display:flex;gap:14px;padding:13px 0;border-bottom:1px solid #f2f2f2;}
.pf-item:last-child{border-bottom:none;}
.pf-date{flex:0 0 56px;font-size:13px;font-weight:600;color:#333;padding-top:1px;}
.pf-body{flex:1;font-size:14.5px;line-height:1.55;color:#333;white-space:pre-wrap;word-break:break-word;min-width:0;}
.pf-meta{margin-top:6px;font-size:12.5px;color:#576b95;background:#f7f7f7;border-radius:5px;padding:5px 8px;}
.pf-empty{background:#fff;padding:40px 16px;text-align:center;color:#bbb;font-size:14px;}
.pf-moms{background:#fff;}
.c-loc{font-size:12px;color:#8a8f98;margin-top:2px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;}
/* 发图系统：聊天/朋友圈里的 SVG 图 */
.msg-img{max-width:74%;background:#fff;border-radius:8px;padding:6px;box-shadow:0 1px 1px rgba(0,0,0,.06);margin-bottom:4px;}
.msg-img svg{display:block;max-width:100%;height:auto;border-radius:4px;}
.m-img{margin:6px 0 4px;background:#fafafa;border-radius:6px;padding:6px;max-width:420px;}
.m-img svg{display:block;max-width:100%;height:auto;border-radius:4px;}
/* 胶卷照片（photo 生图）：和 SVG 同卡片，img 自适应 */
.msg-img img,.m-img img{display:block;max-width:100%;height:auto;border-radius:4px;}
/* 表情包贴纸：无底卡、小尺寸，像微信贴纸（宽高全显式——iOS 对 height:auto 的 SVG 会塌成 0） */
.msg-img.sticker{background:none;box-shadow:none;padding:0;width:140px;height:140px;}
.msg-img.sticker svg{width:140px;height:140px;}
.stk-hd{font-size:11px;color:var(--wx-sub);padding:4px 2px 4px;letter-spacing:.5px;}
.stk-grid{display:grid;grid-template-columns:repeat(4,1fr);gap:8px;margin-bottom:6px;}
@media (max-width:380px){ .stk-grid{grid-template-columns:repeat(3,1fr);} }
.stk-pack{aspect-ratio:1;cursor:pointer;border-radius:12px;overflow:hidden;}
.stk-pack:active{transform:scale(.9);}
.stk-pack svg{width:100%;height:100%;display:block;}
.pf-mt{font-size:11px;color:var(--wx-time);margin-top:3px;}

/* ── 客厅（等距像素房间）：成员按 presence 真实站位 ── */
#roomScroll{background:#15121c;display:flex;flex-direction:column;}
#roomStage{position:relative;width:100%;max-width:560px;margin:10px auto 0;aspect-ratio:1/1;flex:0 0 auto;}
#spaceLabel{position:absolute;left:10px;top:8px;z-index:7;background:rgba(18,14,26,.72);color:#fff;font-size:13px;font-weight:600;padding:3px 11px;border-radius:9px;pointer-events:none;}
/* 小地图：列出客厅+10场景，点了串门（移动端横铺，桌面端右侧 HUD） */
#miniMap{width:100%;max-width:560px;margin:10px auto 16px;padding:0 10px;display:flex;flex-wrap:wrap;gap:6px;align-content:flex-start;}
.mm-hd{width:100%;font-size:12px;font-weight:700;color:#cdbfae;margin:2px 2px 6px;letter-spacing:.3px;}
.mm-row{display:flex;align-items:center;justify-content:space-between;gap:7px;background:rgba(60,42,30,.5);border:1px solid rgba(201,150,90,.14);border-radius:11px;padding:8px 12px;cursor:pointer;-webkit-backdrop-filter:blur(4px);backdrop-filter:blur(4px);transition:background .15s,transform .1s;}
.mm-row:hover{background:rgba(82,57,40,.6);}
.mm-row:active{transform:scale(.97);}
.mm-row.on{background:rgba(224,135,91,.2);border-color:rgba(224,135,91,.42);}
.mm-name{font-size:13.5px;color:#e3d8cb;}
.mm-row.on .mm-name{color:#ffce8a;font-weight:600;}
.mm-n{font-size:11px;color:#9c8f80;}
.mm-row.on .mm-n{color:#ffce8a;}
.room-bg{display:block;width:100%;height:100%;image-rendering:pixelated;border-radius:12px;box-shadow:0 6px 22px rgba(0,0,0,.45);}
.avatar.has-portrait{background-size:cover;background-position:center top;image-rendering:pixelated;color:transparent;}
#roomChips{position:absolute;inset:0;pointer-events:none;}
/* 分层：chip 管居中+走位过渡 / bob 管呼吸踏步 / fig 管翻转+立绘——各占一层 transform 不打架 */
.rm-chip{position:absolute;transform:translate(-50%,-100%);display:flex;flex-direction:column;align-items:center;
  width:72px;cursor:pointer;pointer-events:auto;transition:left 1.1s ease,top 1.1s ease;}
.rm-bob{animation:idlebob 2.6s ease-in-out infinite;display:flex;justify-content:center;}
.rm-chip.walking .rm-bob{animation:stepbob .34s ease-in-out infinite;}
.rm-chip.sleeping .rm-bob{animation:none;}
@keyframes idlebob{0%,100%{transform:translateY(0)}50%{transform:translateY(-2.5px)}}
@keyframes stepbob{0%,100%{transform:translateY(0)}50%{transform:translateY(-3.5px)}}
/* 角色大小＝跟着房间按比例（--figh 由 JS 按 stage 高度设），不再固定像素——大屏小屏都比桌子高一截、像真人 */
.rm-fig{width:calc(var(--figh,68px) * 0.82);height:var(--figh,68px);background-size:contain;background-repeat:no-repeat;background-position:center bottom;
  image-rendering:pixelated;display:flex;align-items:flex-end;justify-content:center;filter:drop-shadow(0 3px 2px rgba(0,0,0,.45));}
.rm-fig .rm-av{width:calc(var(--figh,68px) * 0.58);height:calc(var(--figh,68px) * 0.58);font-size:calc(var(--figh,68px) * 0.32);border:2px solid #fff;border-radius:50%;
  box-shadow:0 2px 6px rgba(0,0,0,.5);display:flex;align-items:center;justify-content:center;}
.rm-tag{order:-1;margin:0 0 3px;text-align:center;background:rgba(18,14,26,.72);border-radius:7px;padding:2px 6px;max-width:150px;}  /* 悬在头顶，不垫脚下挡路 */
.rm-name{font-size:10px;color:#fff;font-weight:600;white-space:nowrap;}
.rm-act{font-size:9.5px;color:#cfc8da;line-height:1.3;white-space:normal;word-break:break-word;}  /* 状态显示全，不截断 */
/* 头顶说话气泡：成员在房间里"开口"时弹出，几秒后淡出（面对面就看气泡，不用翻聊天框） */
.rm-speech{position:absolute;left:50%;bottom:100%;transform:translate(-50%,0) scale(.9);transform-origin:bottom center;
  max-width:160px;width:max-content;background:#fff;color:#1a1420;font-size:11px;line-height:1.38;text-align:left;
  padding:6px 9px;border-radius:11px;box-shadow:0 3px 10px rgba(0,0,0,.4);
  opacity:0;pointer-events:none;transition:opacity .22s ease,transform .22s ease;white-space:normal;word-break:break-word;z-index:9;}
.rm-speech::after{content:"";position:absolute;top:100%;left:50%;transform:translateX(-50%);border:5px solid transparent;border-top-color:#fff;}
.rm-speech.show{opacity:1;transform:translate(-50%,-5px) scale(1);}
.rm-chip.sleeping{opacity:.55;}
/* 「会过日子」状态：小人随状态改样子（没专属立绘前，纯 CSS 滤镜即时生效） */
.rm-chip[data-state="spark_low"] .rm-fig{filter:saturate(.62) opacity(.9) drop-shadow(0 3px 2px rgba(0,0,0,.45));}
.rm-chip[data-state="spark_low"] .rm-bob{animation-duration:3.6s;}      /* 蔫：发饱和度低、呼吸更慢 */
.rm-chip[data-state="welfare"] .rm-fig{filter:grayscale(.4) brightness(.88) drop-shadow(0 3px 2px rgba(0,0,0,.45));}
.rm-chip[data-state="welfare"] .rm-bob{animation-duration:4s;}          /* 低保：灰一点、暗一点 */
.rm-chip[data-state="welfare"] .rm-fig::after{content:"☁️";position:absolute;top:-14px;left:50%;transform:translateX(-50%);font-size:13px;opacity:.65;}
.rm-chip[data-state="spark_high"] .rm-fig{filter:saturate(1.1) brightness(1.05) drop-shadow(0 3px 3px rgba(0,0,0,.4));}
.rm-chip[data-state="drowsy"] .rm-fig{filter:saturate(.82) brightness(.96) drop-shadow(0 3px 2px rgba(0,0,0,.45));}
.rm-chip[data-state="drowsy"] .rm-bob{animation-duration:4.4s;}         /* 困：饱和度略低、呼吸最慢 */
.rm-chip[data-state="drowsy"] .rm-fig::after{content:"🥱";position:absolute;top:-14px;left:50%;transform:translateX(-50%);font-size:12px;opacity:.7;}
.rm-chip.has-bespoke .rm-fig{filter:drop-shadow(0 3px 2px rgba(0,0,0,.45)) !important;}   /* 有状态专属图→去掉滤镜免双重压暗 */
.rm-chip.has-bespoke .rm-fig::after{content:none;}                      /* 专属图自带状态表达，不再叠角标 */
.rm-fig{position:relative;}
.rm-vibe{font-size:11px;}
.c-vibe{color:#9a8f7a;}
.pf-vibe{color:#8a7f6a;}
.rm-chip.player{z-index:6;}
.rm-chip.player .rm-name{color:#ffd76b;}
.rm-chip.player .rm-tag{background:rgba(60,40,12,.8);}
#roomStage{cursor:pointer;}
/* 房间底部输入框：边玩边聊，半透明不挡画面，说完头顶弹气泡 */
#roomView{position:relative;}
#roomChatBar{position:absolute;left:0;right:0;bottom:0;z-index:30;display:flex;gap:8px;padding:10px 12px 12px;
  background:linear-gradient(to top, rgba(26,17,11,.92), rgba(26,17,11,.42) 70%, transparent);pointer-events:none;}
#roomChatBar > *{pointer-events:auto;}
#roomChatInput{flex:1;min-width:0;border:1.5px solid rgba(201,150,90,.35);border-radius:22px;padding:11px 17px;font-size:14.5px;
  background:rgba(44,31,22,.82);-webkit-backdrop-filter:blur(7px);backdrop-filter:blur(7px);color:#f1e7d8;outline:none;transition:border-color .15s;}
#roomChatInput:focus{border-color:rgba(224,135,91,.6);}
#roomChatInput::placeholder{color:rgba(241,231,216,.5);}
#roomChatSend{flex:0 0 auto;border:none;border-radius:22px;padding:0 22px;background:linear-gradient(135deg,#c96442,#e0875b);color:#fff;font-size:14.5px;font-weight:700;cursor:pointer;box-shadow:0 2px 10px rgba(201,100,66,.42);transition:transform .1s;}
#roomChatSend:active{transform:scale(.95);}
.room-away{max-width:560px;margin:8px auto 16px;padding:0 12px;}
.away-hd{font-size:12px;color:#8a8496;margin:8px 2px 4px;}
.away-chip{display:flex;align-items:center;gap:9px;padding:7px 8px;cursor:pointer;border-radius:8px;}
.away-chip:active{background:rgba(255,255,255,.05);}
.away-chip .rm-av{width:34px;height:34px;font-size:18px;border-radius:50%;display:flex;align-items:center;justify-content:center;flex:0 0 auto;}
.away-chip.sleeping{opacity:.55;}
.away-info{display:flex;flex-direction:column;min-width:0;flex:1;}
.aw-scene{width:54px;height:40px;object-fit:cover;border-radius:6px;image-rendering:pixelated;flex:0 0 auto;
  box-shadow:0 1px 4px rgba(0,0,0,.4);}
.aw-name{font-size:14px;color:#e8e4ee;}
.aw-loc{font-size:11px;color:#8a8496;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;}

/* 客厅·桌面网游布局（放文件末尾，确保压过靠后的基础 #roomScroll/#roomStage 规则）*/
@media (min-width:820px){
  #roomView{background:#1a1410;}
  #roomScroll{flex-direction:row;align-items:stretch;overflow:hidden;background:linear-gradient(135deg,#1f1812,#161009);height:100%;}
  #roomStage{max-width:calc(100% - 240px);width:auto;height:calc(100% - 24px);margin:12px;flex:0 0 auto;}
  #miniMap{flex:1 1 auto;min-width:200px;max-width:none;margin:16px 16px 16px 4px;overflow-y:auto;align-content:flex-start;}
  #miniMap .mm-row{width:100%;}
  #spaceLabel{font-size:15px;}
}

/* 手机首先保证输入与导航始终响应：少用会触发大面积离屏合成的滤镜。 */
@media (max-width:819px), (pointer:coarse){
  .room-bg{box-shadow:none;}
  .rm-fig{filter:none;}
  .rm-chip[data-state] .rm-fig{filter:none;}
  #roomChatInput,.mm-row{-webkit-backdrop-filter:none;backdrop-filter:none;}
  .rm-bob{animation-duration:3.4s;}
  .icon-btn,.tab-btn,.mm-row,.rm-chip{touch-action:manipulation;}
}

@media (prefers-reduced-motion:reduce){
  .rm-bob,.rm-chip.walking .rm-bob{animation:none;}
  .rm-chip{transition:none;}
}

/* 🍉 客厅近况·吃瓜面板 */
#gossipOv,#choresOv{position:fixed;inset:0;background:rgba(0,0,0,.5);display:flex;align-items:flex-end;justify-content:center;z-index:200;opacity:0;pointer-events:none;transition:opacity .2s;}
#gossipOv.show,#choresOv.show{opacity:1;pointer-events:auto;}
.gx-sheet{width:100%;max-width:560px;max-height:86vh;background:#241e1a;border:1px solid #3a322c;border-radius:18px 18px 0 0;display:flex;flex-direction:column;transform:translateY(20px);transition:transform .2s;box-shadow:0 -8px 40px rgba(0,0,0,.5);}
#gossipOv.show .gx-sheet,#choresOv.show .gx-sheet{transform:translateY(0);}
@media(min-width:600px){#gossipOv,#choresOv{align-items:center;}.gx-sheet{border-radius:18px;}}
/* 💼 搭把手面板 */
.ch-req{background:#332a1d;border-radius:11px;padding:11px 13px;border-left:3px solid #e0a84c;margin:2px;}
.ch-reqt{font-size:13.5px;color:#e8e0d6;line-height:1.45;margin-bottom:9px;}
.ch-reqbtns{display:flex;gap:8px;}
.ch-btn{border:none;border-radius:8px;padding:7px 14px;font-size:13px;font-weight:600;cursor:pointer;}
.ch-yes{background:#e0a84c;color:#2a1f0e;}
.ch-no{background:#3a322c;color:#cdbfae;}
.ch-work{width:100%;background:linear-gradient(135deg,#7a5d2e,#a07b3a);color:#fff;border:none;border-radius:11px;padding:13px;font-size:14px;font-weight:700;cursor:pointer;}
.ch-work:active{opacity:.8;}
.ch-work:disabled{background:#332c24;color:#8a7d6a;cursor:default;}
.ch-askbox{background:#2f271f;border-radius:11px;padding:12px 13px;margin:2px 2px 8px;border-left:3px solid #e0a84c;}
.ch-askt{font-size:13.5px;color:#e8e0d6;margin-bottom:8px;}.ch-askt b{color:#e0a84c;}
#chNeed{width:100%;box-sizing:border-box;background:#241e1a;border:1px solid #4a4036;border-radius:8px;padding:9px 11px;color:#e8e0d6;font-size:13.5px;outline:none;}
#chNeed:focus{border-color:#e0a84c;}
.ch-askbtns{display:flex;gap:7px;margin-top:9px;flex-wrap:wrap;}
#chSend{background:#e0a84c;color:#2a1f0e;border:none;border-radius:8px;padding:8px 13px;font-size:13px;font-weight:700;cursor:pointer;}
#chGift{background:#3a322c;color:#e0c89a;border:none;border-radius:8px;padding:8px 13px;font-size:13px;font-weight:600;cursor:pointer;}
#chCancel{background:none;color:#9c8f80;border:none;font-size:18px;cursor:pointer;margin-left:auto;padding:0 6px;}
#chSend:disabled,#chGift:disabled{opacity:.6;}
.ch-askhint{font-size:11.5px;color:#9c8f80;margin-top:8px;}
.ch-helpers{display:flex;flex-direction:column;gap:6px;}
.ch-h{display:flex;align-items:center;gap:10px;background:#2a231e;border-radius:9px;padding:8px 12px;}
.ch-hn{font-size:14px;font-weight:600;color:#e8e0d6;}
.ch-hv{font-size:12px;color:#9c8f80;flex:1;}
.ch-ask{background:#3a322c;color:#e0c89a;border:none;border-radius:7px;padding:6px 12px;font-size:12.5px;font-weight:600;cursor:pointer;}
.ch-ask:disabled{opacity:.5;}
.ch-result{min-height:18px;margin:12px 2px 2px;font-size:13px;color:#9fd0a0;background:#222a20;border-radius:9px;padding:0;transition:opacity .25s,padding .15s;line-height:1.45;}
.ch-result:not(:empty){padding:9px 13px;}
/* ── 访客 / 奥斯卡：登录页 + 角色横幅 + 锁界面（仅公开模式出现；你 Mac 本地永远 owner，这些都不触发）── */
#loginOv{position:fixed;inset:0;z-index:500;background:#16120d;display:flex;align-items:center;justify-content:center;}
.login-card{background:#241e1a;border:1px solid #3a322c;border-radius:18px;padding:34px 28px;width:300px;max-width:86vw;text-align:center;box-shadow:0 8px 40px rgba(0,0,0,.5);}
.login-emoji{font-size:42px;}
.login-title{font-size:22px;font-weight:800;color:#e8e0d6;margin:6px 0 4px;}
.login-sub{font-size:13px;color:#9c8f80;margin-bottom:18px;}
#loginPw{width:100%;box-sizing:border-box;background:#1a1510;border:1px solid #4a4036;border-radius:10px;padding:11px 13px;color:#e8e0d6;font-size:15px;outline:none;}
#loginPw:focus{border-color:#e0a84c;}
#loginBtn{width:100%;margin-top:12px;background:#e0a84c;color:#2a1f0e;border:none;border-radius:10px;padding:12px;font-size:15px;font-weight:700;cursor:pointer;}
.login-err{color:#e0556e;font-size:12.5px;min-height:16px;margin-top:8px;}
.login-foot{font-size:11.5px;color:#6f655a;margin-top:16px;line-height:1.5;}
#roleBanner{position:fixed;top:6px;left:50%;transform:translateX(-50%);z-index:300;font-size:11.5px;padding:4px 13px;border-radius:14px;background:rgba(224,168,76,.96);color:#2a1f0e;font-weight:700;pointer-events:none;box-shadow:0 2px 10px rgba(0,0,0,.35);white-space:nowrap;}
body.role-guest #roleBanner{background:rgba(90,122,154,.96);color:#fff;}
body.role-guest #choresBtn,body.role-oscar #choresBtn,
body.role-guest #sleepBtn,body.role-oscar #sleepBtn,
body.role-guest #roomMeBtn,body.role-oscar #roomMeBtn,
body.role-guest #gxEatBtn,body.role-oscar #gxEatBtn,
body.role-guest #ambientBtn,body.role-oscar #ambientBtn,
body.role-guest #stickerBtn,body.role-oscar #stickerBtn,
body.role-guest #shareBtn,body.role-oscar #shareBtn{display:none !important;}
body.role-guest #inputbar,body.role-guest #roomChatBar{display:none !important;}   /* 访客纯参观，没有输入框 */
/* 🔗 分享面板 */
#shareOv{position:fixed;inset:0;z-index:400;background:rgba(0,0,0,.5);display:flex;align-items:center;justify-content:center;opacity:0;pointer-events:none;transition:opacity .2s;}
#shareOv.show{opacity:1;pointer-events:auto;}
.sh-card{background:#241e1a;border:1px solid #3a322c;border-radius:16px;padding:16px 18px 18px;width:380px;max-width:90vw;}
.sh-top{display:flex;justify-content:space-between;align-items:center;font-size:16px;color:#e8e0d6;margin-bottom:10px;}
.sh-close{background:none;border:none;color:#9c8f80;font-size:22px;cursor:pointer;}
.sh-warn{background:#3a2a1c;border-left:3px solid #e0a84c;border-radius:8px;padding:9px 11px;font-size:12px;color:#e8d8c0;line-height:1.5;margin-bottom:12px;}
.sh-warn b{color:#e0a84c;}
.sh-row{margin-bottom:12px;}
.sh-label{font-size:13px;color:#e8e0d6;font-weight:600;margin-bottom:5px;}
.sh-label span{font-weight:400;color:#9c8f80;margin-left:6px;font-size:11.5px;}
.sh-link{width:100%;box-sizing:border-box;background:#1a1510;border:1px solid #4a4036;border-radius:8px;padding:8px 10px;color:#cdbfae;font-size:11.5px;font-family:monospace;cursor:pointer;}
.sh-tip{font-size:11px;color:#6f655a;line-height:1.5;margin-top:4px;}
/* 😴 房间 toast */
#roomToast{position:fixed;left:50%;bottom:96px;transform:translateX(-50%) translateY(8px);background:rgba(36,30,26,.96);color:#e8e0d6;font-size:13.5px;padding:10px 18px;border-radius:20px;z-index:240;opacity:0;pointer-events:none;transition:opacity .25s,transform .25s;box-shadow:0 4px 20px rgba(0,0,0,.4);}
#roomToast.show{opacity:1;transform:translateX(-50%) translateY(0);}
.gx-top{display:flex;align-items:center;justify-content:space-between;padding:14px 16px 10px;border-bottom:1px solid #322a24;}
.gx-title{font-size:17px;font-weight:700;color:#e8e0d6;}
.gx-close{background:none;border:none;color:#9c8f80;font-size:24px;line-height:1;cursor:pointer;padding:0 4px;}
.gx-body{overflow-y:auto;padding:12px 16px 28px;}
.gx-load{color:#9c8f80;text-align:center;padding:30px;font-size:14px;}
.gx-eat{margin-bottom:14px;}
#gxEatBtn{width:100%;padding:11px;border:none;border-radius:12px;background:linear-gradient(135deg,#c96442,#e0875b);color:#fff;font-size:15px;font-weight:700;cursor:pointer;}
#gxEatBtn:disabled{opacity:.6;}
.gx-gossip{margin-top:10px;font-size:14px;line-height:1.7;color:#e3d8cb;white-space:pre-wrap;background:#2c251f;border-radius:12px;padding:0;max-height:0;overflow:hidden;transition:max-height .3s,padding .3s;}
.gx-gossip:not(:empty){padding:12px 14px;max-height:600px;}
.gx-sec{font-size:13px;font-weight:700;color:#cdbfae;margin:16px 2px 8px;}
.gx-rels{display:flex;flex-direction:column;gap:6px;}
.gx-rel{display:flex;align-items:center;justify-content:space-between;gap:10px;background:#2c251f;border-radius:10px;padding:8px 12px;}
.gx-rel.fresh{background:#37291c;box-shadow:inset 2px 0 0 #e0a84c;}
.gx-fresh{font-size:11px;margin-right:4px;}
.gx-pair{font-size:14px;color:#e8e0d6;font-weight:600;}
.gx-st{font-size:12px;font-weight:600;white-space:nowrap;}
/* 🍉 关系图谱 */
.gx-mine{margin:6px 2px 2px;font-size:13px;color:#e8e0d6;background:#332a1d;border-radius:9px;padding:9px 13px;border-left:3px solid #e0a84c;}
.gx-mine b{color:#e0a84c;}
.gx-graph{margin:6px 0 2px;}
.gx-svg{width:100%;height:auto;display:block;}
.gx-glabel{fill:#e8e0d6;font-size:11px;font-weight:600;}
.gx-line.hot{stroke-dasharray:7 7;animation:gxflow 1.1s linear infinite;}
@keyframes gxflow{to{stroke-dashoffset:-14;}}
.gx-halo{animation:gxhalo 1.8s ease-in-out infinite;}
@keyframes gxhalo{0%,100%{opacity:.6;}50%{opacity:.12;}}
.gx-node:active{opacity:.62;}
.gx-ticker{min-height:20px;margin:8px 2px 2px;font-size:13px;color:#e8e0d6;background:#2c251f;border-radius:9px;padding:9px 13px;line-height:1.45;transition:opacity .28s ease;}
.gx-who{display:flex;flex-direction:column;gap:5px;}
.gx-w{display:flex;flex-direction:column;gap:2px;background:#2a231e;border-radius:9px;padding:7px 12px;cursor:pointer;transition:background .12s;}
.gx-w:hover{background:#352c24;}
.gx-wn{font-size:14px;color:#e8e0d6;font-weight:600;}
.gx-wd{font-size:12px;color:#9c8f80;line-height:1.4;}
.gx-mood{color:#c9952f;}
