:root{
  --primary:#1a73e8;--primary-light:#e8f0fe;--primary-dark:#1557b0;
  --danger:#ea4335;--success:#34a853;--warning:#fbbc04;
  --bg:#f5f6fa;--white:#fff;--card:#fff;
  --text:#202124;--text2:#5f6368;--text3:#9aa0a6;--border:#e8e8e8;
  --radius:12px;--shadow:0 2px 12px rgba(0,0,0,.08);
  --sidebar-w:240px;
}
*{margin:0;padding:0;box-sizing:border-box}
html,body{height:100%;font-family:-apple-system,BlinkMacSystemFont,"PingFang SC","Microsoft YaHei",sans-serif;background:var(--bg);color:var(--text);-webkit-font-smoothing:antialiased}
button{cursor:pointer;font-family:inherit;border:none;outline:none}
a{color:var(--primary);text-decoration:none}

/* 登录页 */
.login-wrap{min-height:100vh;display:flex;align-items:center;justify-content:center;background:linear-gradient(135deg,#1a73e8,#4285f4)}
.login-box{background:var(--white);border-radius:16px;padding:40px 36px;width:400px;box-shadow:0 20px 60px rgba(0,0,0,.2)}
.login-logo{text-align:center;margin-bottom:28px}
.login-logo .icon{font-size:48px;margin-bottom:8px}
.login-logo h1{font-size:22px;color:var(--primary)}
.login-logo p{font-size:13px;color:var(--text3);margin-top:4px}
.form-group{margin-bottom:16px}
.form-group label{display:block;font-size:13px;color:var(--text2);margin-bottom:6px;font-weight:500}
.form-group input{width:100%;padding:12px 14px;border:1.5px solid var(--border);border-radius:8px;font-size:14px;outline:none;transition:border-color .2s}
.form-group input:focus{border-color:var(--primary)}
.form-error{color:var(--danger);font-size:12px;min-height:18px;margin-top:-8px;margin-bottom:8px}
.btn{width:100%;padding:13px;background:var(--primary);color:#fff;border-radius:8px;font-size:15px;font-weight:600;transition:background .2s}
.btn:hover{background:var(--primary-dark)}
.btn-outline{background:var(--white);color:var(--primary);border:1.5px solid var(--primary)}
.btn-sm{padding:7px 16px;border-radius:6px;font-size:13px;width:auto;font-weight:500}
.login-tip{text-align:center;margin-top:16px;font-size:12px;color:var(--text3);line-height:1.8;background:var(--primary-light);padding:10px;border-radius:8px}
.login-links{text-align:center;margin-top:14px;font-size:13px;line-height:1.6}
.login-links a{color:var(--primary);text-decoration:none}
.login-links a:hover{text-decoration:underline}

/* 登录tab切换 */
.login-tabs{display:flex;margin-bottom:20px;border-bottom:2px solid var(--border)}
.login-tab{flex:1;text-align:center;padding:10px 0;font-size:14px;color:var(--text3);cursor:pointer;border-bottom:2px solid transparent;margin-bottom:-2px;transition:all .2s}
.login-tab.active{color:var(--primary);border-bottom-color:var(--primary);font-weight:600}
.form-send-code{flex-shrink:0;background:var(--primary-light);color:var(--primary);border:none;border-radius:8px;padding:0 14px;font-size:13px;cursor:pointer;white-space:nowrap;display:flex;align-items:center;justify-content:center;box-sizing:border-box;align-self:stretch}
.form-send-code.disabled{background:var(--bg);color:var(--text3);cursor:not-allowed}
.form-group.code-group{position:relative}
.code-input-wrap{display:flex;gap:8px;align-items:stretch}
.code-input-wrap input{flex:1;min-width:0;padding-right:14px!important}

/* 主布局 */
.app-layout{display:none;height:100vh}
.app-layout.show{display:flex}
.sidebar{width:var(--sidebar-w);background:var(--white);border-right:1px solid var(--border);display:flex;flex-direction:column;flex-shrink:0}
.sidebar-header{padding:20px 18px;border-bottom:1px solid var(--border);display:flex;align-items:center;gap:10px}
.sidebar-header .logo-icon{font-size:28px}
.sidebar-header h2{font-size:15px;font-weight:700;color:var(--primary);line-height:1.3}
.sidebar-header span{font-size:11px;color:var(--text3);display:block}
.sidebar-user{padding:14px 18px;border-bottom:1px solid var(--border);display:flex;align-items:center;gap:10px}
.avatar{width:40px;height:40px;border-radius:50%;background:var(--primary);color:#fff;display:flex;align-items:center;justify-content:center;font-size:16px;font-weight:600;flex-shrink:0;overflow:hidden}
.avatar.lg{width:48px;height:48px;font-size:20px}
.sidebar-user .info{flex:1;min-width:0}
.sidebar-user .name{font-size:14px;font-weight:600;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.sidebar-user .role{font-size:11px;color:var(--text3)}
.vest-btn{width:32px;height:32px;border-radius:8px;border:none;background:var(--bg);color:var(--text2);cursor:pointer;display:flex;align-items:center;justify-content:center;flex-shrink:0;transition:all .15s;position:relative}
.role-tag{display:inline-block;font-size:12px;padding:1px 7px;border-radius:4px;margin-right:4px;font-weight:500;line-height:1.5}
.role-tag-sm{display:inline-block;font-size:10px;padding:0 5px;border-radius:6px;font-weight:500;line-height:1.4;flex-shrink:0}
.role-admin{background:#fff7e6;color:#d46b08;border:1px solid #ffd591}
.role-agent{background:#e6f7ff;color:#0958d9;border:1px solid #91caff}
.role-gw{background:#f6ffed;color:#389e0d;border:1px solid #b7eb8f}
.role-plain{background:#f5f5f5;color:#8c8c8c;border:1px solid #d9d9d9}
.vest-btn:hover{background:var(--primary-light);color:var(--primary)}
.vest-indicator{display:inline-flex;align-items:center;gap:4px;padding:2px 8px;border-radius:10px;font-size:10px;background:#fff3e0;color:#e8710a;margin-left:4px}
/* 马甲弹窗 */
.modal-overlay{position:fixed;inset:0;background:rgba(0,0,0,.45);z-index:10000;display:none;align-items:center;justify-content:center;padding:20px}
.modal-overlay.show{display:flex}
.modal{background:#fff;border-radius:16px;width:100%;max-width:440px;max-height:80vh;overflow:hidden;display:flex;flex-direction:column;box-shadow:0 20px 60px rgba(0,0,0,.2)}
.modal-header{padding:16px 20px;border-bottom:1px solid var(--border);display:flex;align-items:center;justify-content:space-between}
.modal-header h3{margin:0;font-size:16px;font-weight:600}
.modal-close{width:32px;height:32px;border-radius:8px;border:none;background:none;cursor:pointer;display:flex;align-items:center;justify-content:center;color:var(--text3)}
.modal-close:hover{background:var(--bg)}
.modal-body{padding:20px;overflow-y:auto;flex:1}
.modal-footer{padding:12px 20px;border-top:1px solid var(--border);display:flex;gap:8px;justify-content:flex-end}
.vest-list{display:flex;flex-direction:column;gap:8px;margin-bottom:16px}
.vest-item{display:flex;align-items:center;gap:12px;padding:12px;border:1px solid var(--border);border-radius:12px;cursor:pointer;transition:all .15s}
.vest-item:hover{border-color:var(--primary);background:var(--primary-light)}
.vest-item.active{border-color:var(--primary);background:var(--primary-light)}
.vest-item .avatar{width:42px;height:42px;font-size:15px}
.vest-item .vi-info{flex:1;min-width:0}
.vest-item .vi-name{font-size:14px;font-weight:500;display:flex;align-items:center;gap:6px}
.vest-item .vi-sub{font-size:11px;color:var(--text3);margin-top:2px}
.vest-item .vi-check{color:var(--primary);display:none}
.vest-item.active .vi-check{display:block}
.vest-add-btn{width:100%;padding:12px;border:2px dashed var(--border);border-radius:12px;background:none;cursor:pointer;display:flex;align-items:center;justify-content:center;gap:8px;color:var(--text2);font-size:13px;transition:all .15s}
.vest-add-btn:hover{border-color:var(--primary);color:var(--primary);background:var(--primary-light)}
.vest-form{display:none;flex-direction:column;gap:12px;padding:16px;border:1px solid var(--border);border-radius:12px;margin-bottom:12px}
.vest-form.show{display:flex}
.form-group{display:flex;flex-direction:column;gap:4px}
.form-group label{font-size:12px;color:var(--text2);font-weight:500}
.form-group input{padding:10px 12px;border:1px solid var(--border);border-radius:8px;font-size:14px;font-family:inherit;outline:none}
.form-group input:focus{border-color:var(--primary)}
.form-hint{font-size:11px;color:var(--text3)}
.nav-menu{flex:1;overflow-y:auto;padding:8px 0;display:block}
.nav-menu .nav-item{margin-top:0}
.nav-group-label{padding:15px 20px 5px;font-size:11px;color:var(--text3);letter-spacing:1.5px;font-weight:600;user-select:none}
.nav-group:first-child .nav-group-label{padding-top:4px}
.nav-group + .nav-group .nav-group-label{border-top:1px solid var(--border);margin-left:12px;margin-right:12px;padding-top:14px}
.growth-switch{display:inline-flex;border:1px solid var(--border);border-radius:10px;overflow:hidden;margin-bottom:14px;background:var(--white)}
.growth-switch .gs-btn{padding:8px 20px;border:0;background:transparent;color:var(--text2);font-size:13px;cursor:pointer;transition:all .15s}
.growth-switch .gs-btn:hover{color:var(--primary)}
.growth-switch .gs-btn.active{background:var(--primary);color:#fff;font-weight:600}
.growth-switch .gs-btn + .gs-btn{border-left:1px solid var(--border)}
.nav-item{display:flex;align-items:center;gap:12px;padding:12px 20px;font-size:14px;color:var(--text2);cursor:pointer;transition:all .15s;border-left:3px solid transparent;position:relative}
.nav-item:hover{background:var(--bg);color:var(--text)}
.nav-item.active{background:var(--primary-light);color:var(--primary);border-left-color:var(--primary);font-weight:600}
.nav-item .icon{font-size:18px;width:22px;text-align:center}
.nav-item .badge{position:absolute;right:16px;background:var(--danger);color:#fff;font-size:10px;padding:1px 7px;border-radius:10px;min-width:18px;text-align:center}
.sidebar-footer{padding:12px 18px;border-top:1px solid var(--border)}
.logout-btn{width:100%;padding:10px;background:var(--bg);color:var(--text2);border-radius:8px;font-size:13px;display:flex;align-items:center;justify-content:center;gap:6px}
.logout-btn:hover{background:#e8eaed}

/* 主内容区 */
.main{flex:1;display:flex;flex-direction:column;overflow:hidden}
.topbar{height:56px;background:var(--white);border-bottom:1px solid var(--border);display:flex;align-items:center;padding:0 24px;gap:16px;flex-shrink:0}
.topbar .page-title{font-size:17px;font-weight:600;flex:1}
.topbar .actions{display:flex;gap:8px;align-items:center}
.topbar .connection{font-size:12px;display:flex;align-items:center;gap:4px;padding:4px 10px;border-radius:12px}
.topbar .connection.online{background:#e6f4ea;color:var(--success)}
.topbar .connection.offline{background:#fce8e6;color:var(--danger)}
.topbar .connection::before{content:'';width:6px;height:6px;border-radius:50%}
.topbar .connection.online::before{background:var(--success)}
.topbar .connection.offline::before{background:var(--danger)}

.content{flex:1;overflow-y:auto;padding:20px 24px}
.content.fullscreen{padding:0!important;overflow:hidden!important}

/* 页面通用 */
.page{display:none}
.page.active{display:block}
.page-fullscreen.active{height:100%;padding:0}
.page-header{display:flex;justify-content:space-between;align-items:center;margin-bottom:20px}
.page-header h2{font-size:20px;font-weight:700}

/* 卡片 */
.card{background:var(--card);border-radius:var(--radius);box-shadow:var(--shadow);padding:20px;margin-bottom:16px}
.card-title{font-size:14px;font-weight:600;color:var(--text2);margin-bottom:14px;display:flex;align-items:center;gap:6px}

/* 工作台统计 */
.stats-grid{display:grid;grid-template-columns:repeat(4,1fr);gap:16px;margin-bottom:20px}
.stat-card{background:var(--white);border-radius:var(--radius);padding:20px}
.stat-card .label{font-size:13px;color:var(--text2);margin-bottom:8px}
.stat-card .value{font-size:28px;font-weight:700;color:var(--text)}
.stat-card .sub{font-size:12px;color:var(--text3);margin-top:4px}
.stat-card.primary .value{color:var(--primary)}
.stat-card.danger .value{color:var(--danger)}
.stat-card.success .value{color:var(--success)}
.stat-card.warning .value{color:var(--warning)}

/* 两栏布局 */
.two-col{display:grid;grid-template-columns:2fr 1fr;gap:16px}

/* 趋势图（简易柱状） */
.trend-chart{display:flex;align-items:flex-end;gap:8px;height:120px;padding-top:10px}
.trend-bar{flex:1;display:flex;flex-direction:column;align-items:center;gap:4px}
.trend-bar .bar{width:100%;background:var(--primary-light);border-radius:4px 4px 0 0;min-height:4px;position:relative}
.trend-bar .bar .fill{position:absolute;bottom:0;left:0;right:0;background:var(--primary);border-radius:4px 4px 0 0;transition:height .5s}
.trend-bar .label{font-size:11px;color:var(--text3)}
.trend-bar .val{font-size:11px;color:var(--text2);font-weight:600}

/* 最近浏览者列表 */
.visitor-item{display:flex;align-items:center;gap:10px;padding:10px 0;border-bottom:1px solid var(--border)}
.visitor-item:last-child{border-bottom:none}
.visitor-item .v-info{flex:1;min-width:0}
.visitor-item .v-name{font-size:13px;font-weight:500}
.visitor-item .v-house{font-size:11px;color:var(--text3);white-space:nowrap;overflow:hidden;text-overflow:ellipsis;margin-top:2px}
.visitor-item .v-time{font-size:11px;color:var(--text3);white-space:nowrap}
.visitor-item .v-badge{font-size:10px;padding:2px 6px;border-radius:4px;background:var(--primary-light);color:var(--primary)}

/* 表格 */
.table-wrap{background:var(--white);border-radius:var(--radius);box-shadow:var(--shadow);overflow-x:auto;-webkit-overflow-scrolling:touch;overflow-y:hidden}
.table-wrapper{background:var(--white);border-radius:var(--radius);box-shadow:var(--shadow);overflow-x:auto;-webkit-overflow-scrolling:touch;overflow-y:hidden}
.data-table-wrap{background:#fff;border-radius:10px;border:1px solid var(--border);overflow-x:auto;-webkit-overflow-scrolling:touch;overflow-y:hidden}
table{width:100%;border-collapse:collapse;min-width:600px}
table.banner-table{table-layout:fixed;min-width:unset}
table.banner-table th,table.banner-table td{white-space:normal;word-break:break-word;overflow-wrap:break-word}
table.banner-table th:last-child,table.banner-table td:last-child{white-space:nowrap}
th{background:var(--bg);padding:12px 16px;font-size:12px;font-weight:600;color:var(--text2);text-align:left;border-bottom:1px solid var(--border);white-space:nowrap}
td{padding:14px 16px;font-size:13px;border-bottom:1px solid var(--border);vertical-align:middle}
tr:last-child td{border-bottom:none}
tr:hover td{background:#fafbfc}
.status-badge{display:inline-block;padding:2px 10px;border-radius:10px;font-size:12px;white-space:nowrap;line-height:1.6}
.house-title{font-weight:500;color:var(--text);max-width:280px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.house-meta{font-size:11px;color:var(--text3);margin-top:3px}
.price{color:var(--danger);font-weight:700;font-size:15px}
.tag{display:inline-block;padding:2px 8px;border-radius:4px;font-size:11px}
.tag.online{background:#e6f4ea;color:var(--success)}
.tag.offline{background:#f1f3f4;color:var(--text3)}
.tag.top{background:#fef7e0;color:#e37400}
.action-btns{display:flex;gap:6px}
.action-btns button{padding:5px 12px;border-radius:4px;font-size:12px;background:var(--bg);color:var(--text2)}
.action-btns button:hover{background:var(--primary-light);color:var(--primary)}

/* 筛选栏 */
.filter-bar{display:flex;gap:10px;margin-bottom:16px;align-items:center;flex-wrap:wrap}
.filter-bar input,.filter-bar select{padding:8px 12px;border:1px solid var(--border);border-radius:6px;font-size:13px;outline:none}
.filter-bar input{width:220px}
.tabs{display:flex;gap:4px;background:var(--white);border-radius:8px;padding:4px;box-shadow:var(--shadow)}
.tab{padding:8px 20px;border-radius:6px;font-size:13px;color:var(--text2);background:none}
.tab.active{background:var(--primary);color:#fff;font-weight:500}

.tab-btn{padding:6px 16px;border-radius:6px;font-size:13px;color:var(--text2);background:var(--white);border:1px solid var(--border);cursor:pointer;transition:all .15s}
.tab-btn:hover{border-color:var(--primary);color:var(--primary)}
.tab-btn.active{background:var(--primary);color:#fff;border-color:var(--primary);font-weight:500}
.btn-danger{background:var(--danger)!important;color:#fff!important;border-color:var(--danger)!important}
.btn-danger:hover{background:#cf1322!important}

/* 聊天布局 */
.chat-layout{display:flex;height:100%;background:var(--white);border-radius:var(--radius);box-shadow:var(--shadow);overflow:hidden}
.chat-sidebar{width:300px;border-right:1px solid var(--border);display:flex;flex-direction:column;flex-shrink:0}
.chat-sidebar-header{padding:14px 16px;border-bottom:1px solid var(--border);font-weight:600;font-size:15px;display:flex;align-items:center;justify-content:space-between}
.chat-tabs{display:flex;gap:4px;width:100%}
.chat-tab{flex:1;padding:6px 0;border-radius:6px;font-size:13px;color:var(--text2);background:var(--bg);border:none;cursor:pointer;transition:all .15s;font-family:inherit;display:flex;align-items:center;justify-content:center;gap:4px}
.chat-tab.active{background:var(--primary);color:#fff;font-weight:500}
.chat-tab:hover:not(.active){background:#e8e8e8}
.online-count{background:var(--success);color:#fff;font-size:10px;padding:0 6px;border-radius:10px;min-width:18px;text-align:center;line-height:16px;font-weight:400}
.chat-tab.active .online-count{background:rgba(255,255,255,.3);color:#fff}
.chat-settings-btn:hover{background:var(--bg)!important;color:var(--primary)!important}
#chatSoundToggle:checked + span{background:var(--primary)}
#chatSoundToggle:checked + span + span{transform:translateX(18px)}
.friend-badge{display:inline-flex;align-items:center;background:linear-gradient(135deg,#faad14,#ff7a45);color:#fff;font-size:10px;padding:0 5px;border-radius:3px;margin-left:4px;height:15px;line-height:15px;font-weight:500;vertical-align:middle}
.chat-tab-content{flex:1;display:flex;flex-direction:column;overflow:hidden}
.chat-tab-content#tab-online{flex-direction:column}
.online-item{display:flex;align-items:center;gap:10px;padding:10px 14px;cursor:pointer;border-bottom:1px solid #f5f5f5;transition:background .15s}
.online-item:hover{background:var(--bg)}
.online-item.active{background:var(--primary-light)}
.online-item .avatar{width:40px;height:40px;font-size:14px}
.online-item .avatar-wrap{position:relative;flex-shrink:0}
.online-item .o-info{flex:1;min-width:0}
.online-item .o-name{font-size:13px;font-weight:500;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.online-item .o-status{font-size:11px;color:var(--text3);margin-top:2px;display:flex;align-items:center;gap:4px}
.online-item .o-status::before{content:'';width:6px;height:6px;background:currentColor;border-radius:50%;display:inline-block;flex-shrink:0}
.online-item .o-status.offline::before{background:var(--text3)}
.online-item .o-tag{font-size:10px;padding:1px 6px;border-radius:3px;background:#e3f2fd;color:#1976d2;margin-left:4px;flex-shrink:0}
.online-item.intent-hot{background:#fff9f6;border-left:3px solid #fa541c}
.online-item.intent-hot:hover{background:#fff2e8}
.online-item.intent-urgent{background:#fff5f5;border-left:3px solid #f5222d}
.online-item.intent-urgent:hover{background:#fff1f0}
.chat-search{padding:10px 12px;border-bottom:1px solid var(--border)}
.chat-search input{width:100%;padding:8px 12px;background:var(--bg);border:none;border-radius:20px;font-size:13px;outline:none}
.chat-list{flex:1;overflow-y:auto}
.chat-item{display:flex;align-items:center;gap:10px;padding:12px 14px;cursor:pointer;border-bottom:1px solid #f5f5f5;transition:background .15s}
.chat-item:hover{background:var(--bg)}
.chat-item.active{background:var(--primary-light)}
.chat-item .avatar{width:44px;height:44px;font-size:16px}
.chat-item .avatar-wrap{position:relative;flex-shrink:0}
.chat-item .c-info{flex:1;min-width:0}
.chat-item .c-top{display:flex;justify-content:space-between;align-items:center}
.chat-item .c-name{font-size:14px;font-weight:500;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.chat-item .c-time{font-size:11px;color:var(--text3);flex-shrink:0;margin-left:8px}
.chat-item .c-bottom{display:flex;justify-content:space-between;align-items:center;margin-top:2px}
.chat-item .c-preview{font-size:12px;color:var(--text3);white-space:nowrap;overflow:hidden;text-overflow:ellipsis;flex:1}
.chat-item .c-unread{background:var(--danger);color:#fff;font-size:10px;padding:1px 7px;border-radius:10px;min-width:18px;text-align:center;flex-shrink:0;margin-left:6px}

/* 聊天主区域 */
.chat-main{flex:1;display:flex;flex-direction:column;min-width:0;position:relative;overflow:hidden}
.chat-header{padding:14px 20px;border-bottom:1px solid var(--border);display:flex;align-items:center;gap:10px;position:relative}
.chat-header .ch-info{flex:1}
.chat-header .ch-name{font-size:15px;font-weight:600}
.chat-header .ch-status{font-size:12px;color:var(--text3)}
.chat-header .ch-status.typing{color:var(--primary)}
/* 聊天header更多按钮和下拉菜单 */
.ch-more-btn{width:36px;height:36px;border-radius:50%;border:none;background:transparent;cursor:pointer;display:flex;align-items:center;justify-content:center;color:var(--text3);transition:.15s;flex-shrink:0}
.ch-more-btn:hover{background:#f0f2f5;color:var(--text1)}
.ch-menu{position:absolute;top:48px;right:12px;background:#fff;border-radius:8px;box-shadow:0 4px 16px rgba(0,0,0,.15);z-index:50;min-width:150px;overflow:hidden;display:none}
.ch-menu.show{display:block}
.ch-menu-item{padding:10px 16px;font-size:14px;cursor:pointer;display:flex;align-items:center;gap:8px;color:var(--text1);transition:.15s}
.ch-menu-item:hover{background:#f5f6fa}
.ch-menu-item.danger{color:#ff4d4f}
.ch-menu-item.danger:hover{background:#fff1f0}
.ch-menu-item.disabled{color:#bbb;cursor:not-allowed;pointer-events:none}
/* 会话列表删除按钮 */
.chat-item{position:relative}
.c-del-btn{position:absolute;top:50%;right:10px;transform:translateY(-50%);width:26px;height:26px;border-radius:50%;border:none;background:rgba(0,0,0,.35);color:#fff;cursor:pointer;display:none;align-items:center;justify-content:center;z-index:5;transition:.15s;font-size:14px;line-height:1}
.chat-item:hover .c-del-btn{display:flex}
.c-del-btn:hover{background:#ff4d4f}
/* 小黑屋列表项 */
.blocked-item{display:flex;align-items:center;gap:12px;padding:12px 16px;border-bottom:1px solid var(--border);transition:.15s}
.blocked-item:hover{background:var(--bg)}
.blocked-item .b-info{flex:1;min-width:0}
.blocked-item .b-name{font-size:14px;font-weight:500;color:var(--text1);display:flex;align-items:center;gap:6px}
.blocked-item .b-name .blocked-icon{font-size:12px;color:#ff4d4f}
.blocked-item .b-time{font-size:12px;color:var(--text3);margin-top:2px}
.blocked-item .unblock-btn{padding:6px 14px;border:1px solid var(--border);background:#fff;border-radius:6px;font-size:12px;color:var(--primary);cursor:pointer;transition:.15s;white-space:nowrap}
.blocked-item .unblock-btn:hover{background:var(--primary-light);border-color:var(--primary)}
/* 被拒收提示（输入框上方） */
.blocked-tip{background:#fff2f0;border-bottom:1px solid #ffccc7;padding:8px 20px;font-size:13px;color:#ff4d4f;display:none;align-items:center;gap:6px}
.blocked-tip.show{display:flex}
.blocked-tip .unblock-link{color:var(--primary);cursor:pointer;margin-left:4px;text-decoration:underline}
.chat-messages{flex:1;overflow-y:auto;padding:20px;background:#f5f6fa}
/* 微信风格时间分隔条 */
.msg-time-divider{text-align:center;font-size:12px;color:#fff;background:rgba(0,0,0,.15);padding:3px 10px;border-radius:4px;margin:16px auto;display:table;line-height:1.4}
.msg-row{display:flex;margin-bottom:12px;gap:8px;align-items:flex-end;min-width:0}
.msg-row.no-avatar{margin-bottom:4px}
.msg-row.mine{flex-direction:row-reverse}
.msg-row .avatar{width:36px;height:36px;font-size:14px;flex-shrink:0;border-radius:50%;display:flex;align-items:center;justify-content:center;color:#fff;font-weight:500}
.msg-row .avatar-placeholder{width:36px;height:0;flex-shrink:0}
.msg-bubble{padding:10px 14px;border-radius:16px;font-size:14px;line-height:1.6;word-break:break-word;position:relative;width:-webkit-fit-content;width:fit-content;max-width:100%}
.msg-row.other .msg-bubble{background:var(--white);border-bottom-left-radius:4px;box-shadow:0 1px 2px rgba(0,0,0,.06)}
.msg-row.mine .msg-bubble{background:var(--primary);color:#fff;border-bottom-right-radius:4px;margin-left:auto}
.msg-row.mine .msg-bubble .read-status{font-size:10px;opacity:.7;margin-left:6px}
.chat-input-area{padding:12px 12px;border-top:1px solid var(--border);display:flex;gap:8px;align-items:flex-end;background:var(--white);position:relative;z-index:10}
.chat-input-area textarea{flex:1;min-width:0;border:1px solid var(--border);border-radius:20px;padding:10px 16px;font-size:14px;resize:none;outline:none;max-height:120px;font-family:inherit;line-height:1.5;min-height:40px}
.chat-input-area textarea:focus{border-color:var(--primary)}
.chat-input-area .chat-input-rich{flex:1;min-width:0;border:1px solid var(--border);border-radius:20px;padding:10px 16px;font-size:14px;outline:none;max-height:120px;font-family:inherit;line-height:1.5;min-height:40px;overflow-y:hidden;word-break:break-word;white-space:pre-wrap;box-sizing:border-box;background:var(--white);color:var(--text)}
.chat-input-area .chat-input-rich:focus{border-color:var(--primary)}
.chat-input-rich:empty::before{content:attr(data-placeholder);color:var(--text3);pointer-events:none}
.chat-input-rich .jyn-rich-emoji{display:inline-block;width:1.4em;height:1.4em;vertical-align:-0.28em;margin:0 1px}
.chat-input-area .chat-send-btn{width:40px;height:40px;border-radius:50%;background:var(--primary);color:#fff;font-size:16px;flex-shrink:0;display:flex;align-items:center;justify-content:center;border:none;cursor:pointer;transition:.15s}
.chat-input-area .chat-send-btn:hover{background:var(--primary-dark)}
.chat-input-area .emoji-btn{width:40px;height:40px;border-radius:50%;background:transparent;color:#999;font-size:20px;flex-shrink:0;display:flex;align-items:center;justify-content:center;border:none;cursor:pointer;transition:all .2s;position:relative}
.chat-input-area .emoji-btn:hover{background:#f0f2f5;color:var(--primary)}
.emoji-panel{position:absolute;bottom:55px;left:12px;background:#fff;border-radius:12px;box-shadow:0 4px 20px rgba(0,0,0,.15);padding:10px;z-index:100;display:none;width:320px;max-height:240px;overflow-y:auto}
.emoji-panel.show{display:block}
.emoji-grid{display:grid;grid-template-columns:repeat(8,1fr);gap:4px}
.emoji-item{width:36px;height:36px;border-radius:8px;border:none;background:transparent;cursor:pointer;display:flex;align-items:center;justify-content:center;padding:4px;transition:background .15s}
.emoji-item:hover{background:#f0f2f5}
.emoji-item svg{width:28px;height:28px}
.im-emoji{display:inline-block;vertical-align:middle;width:1.3em;height:1.3em;margin:0 1px}
.im-emoji svg{width:100%;height:100%}
.msg-bubble .im-emoji{width:1.4em;height:1.4em}
.chat-empty{flex:1;display:flex;align-items:center;justify-content:center;flex-direction:column;color:var(--text3);gap:12px;background:#fafbfc}
.chat-empty .icon{font-size:64px;opacity:.3}
.chat-conversation{flex:1;display:flex;flex-direction:column;min-width:0;overflow:hidden}

/* 房源卡片消息 - 重新设计 */
.house-card{width:280px;max-width:100%;background:#fff;border-radius:14px;overflow:hidden;box-shadow:0 2px 12px rgba(0,0,0,.1);border:1px solid rgba(0,0,0,.06);cursor:pointer;transition:all .2s ease;display:block}
.house-card:hover{transform:translateY(-2px);box-shadow:0 6px 20px rgba(0,0,0,.12)}
.house-card:active{transform:translateY(0)}
/* 房源卡片在消息气泡内时，保持独立卡片样式 */
.msg-bubble .house-card{margin:2px;width:280px;border-radius:14px;box-shadow:0 2px 12px rgba(0,0,0,.1);background:#fff;border:1px solid rgba(0,0,0,.06)}
.msg-bubble .house-card-cover{border-radius:14px 14px 0 0;margin:0;width:100%;height:130px}
.msg-bubble .house-card-body{padding:12px 14px}
.house-card-cover{width:100%;height:140px;background:linear-gradient(135deg,#f5f7fa,#e4e8ed);display:flex;align-items:center;justify-content:center;overflow:hidden;position:relative}
.house-card-cover img{width:100%;height:100%;object-fit:cover;transition:transform .3s ease}
.house-card:hover .house-card-cover img{transform:scale(1.05)}
.house-card-cover .no-img{font-size:48px;opacity:.4;display:flex;align-items:center;justify-content:center;width:100%;height:100%;color:#94a3b8}
.house-card-cover .house-card-badge{position:absolute;top:10px;left:10px;padding:4px 10px;border-radius:20px;font-size:11px;font-weight:600;backdrop-filter:blur(8px);-webkit-backdrop-filter:blur(8px)}
.house-card-badge.new{background:rgba(255,107,53,.95);color:#fff}
.house-card-badge.sale{background:rgba(30,136,229,.95);color:#fff}
.house-card-badge.rent{background:rgba(67,160,71,.95);color:#fff}
.house-card-body{padding:12px 14px;background:#fff}
.house-card-title{font-size:15px;font-weight:600;color:#1e293b;margin-bottom:8px;line-height:1.4;overflow:hidden;display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;white-space:normal;min-height:42px}
.house-card-meta{display:flex;align-items:center;gap:8px;margin-bottom:10px;flex-wrap:wrap}
.house-card-addr{font-size:12px;color:#64748b;display:flex;align-items:center;gap:3px;line-height:1.4;flex:1;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.house-card-addr svg{flex-shrink:0;opacity:.7}
.house-card-price{display:flex;align-items:baseline;gap:2px;margin-bottom:10px}
.house-card-price .price-num{font-size:20px;font-weight:700;color:#ef4444;line-height:1}
.house-card-price .price-unit{font-size:12px;font-weight:500;color:#ef4444}
.house-card-price .price-suffix{font-size:12px;color:#94a3b8;font-weight:400;margin-left:2px}
.house-card-price .price-pending{font-size:14px;color:#94a3b8;font-weight:500}
.house-card-footer{display:flex;align-items:center;justify-content:space-between}
.house-card-tag{display:inline-flex;align-items:center;padding:3px 10px;border-radius:6px;font-size:11px;font-weight:500}
.house-card-tag.on-sale{background:#dcfce7;color:#16a34a}
.house-card-tag.pending{background:#fef3c7;color:#d97706}
.house-card-tag.sold{background:#f1f5f9;color:#64748b}
.house-card-view-btn{display:flex;align-items:center;gap:3px;font-size:12px;color:#3b82f6;font-weight:500}
.house-card-contact{margin-top:10px;padding-top:10px;border-top:1px dashed #e2e8f0;font-size:12px;color:#64748b}
.house-card-contact .row{display:flex;align-items:center;margin-bottom:5px}
.house-card-contact .row:last-child{margin-bottom:0}
.house-card-contact .label{width:62px;color:#94a3b8;flex-shrink:0}
.house-card-contact .value{color:#1e293b;font-weight:500}
.house-card-contact .phone{color:#3b82f6;text-decoration:none;font-weight:600}
/* 我发送的房源卡片也保持白色背景 */
.msg-row.mine .house-card{box-shadow:0 2px 12px rgba(0,0,0,.1);background:#fff;border:1px solid rgba(0,0,0,.06)}
.msg-row.mine .house-card-title{color:#1e293b}
.msg-row.mine .house-card-addr{color:#64748b}
.msg-row.mine .house-card-price .price-num{color:#ef4444}
.msg-row.mine .house-card-contact .label{color:#94a3b8}
.msg-row.mine .house-card-contact .value{color:#1e293b}
.msg-row.mine .house-card-contact .phone{color:#3b82f6}
.house-card-type{display:none}

/* 房源详情弹窗 */
.modal-overlay{position:fixed;top:0;left:0;right:0;bottom:0;background:rgba(0,0,0,.5);z-index:1000;display:none;align-items:center;justify-content:center}
.modal-overlay.show{display:flex}
.modal{background:var(--white);border-radius:12px;width:90%;max-width:600px;max-height:80vh;overflow-y:auto;position:relative}
.modal-header{padding:18px 20px;border-bottom:1px solid var(--border);display:flex;align-items:center;justify-content:space-between;font-weight:600;font-size:16px}
.modal-close{width:28px;height:28px;border-radius:50%;background:var(--bg);display:flex;align-items:center;justify-content:center;font-size:18px;color:var(--text2)}
.modal-body{padding:20px}

/* 用户信息卡片 */
.user-profile{text-align:center}
.user-profile .up-avatar{width:72px;height:72px;border-radius:50%;margin:0 auto 12px;display:flex;align-items:center;justify-content:center;font-size:28px;color:#fff;background:linear-gradient(135deg,#667eea,#764ba2);overflow:hidden}
.user-profile .up-avatar img{width:100%;height:100%;object-fit:cover}
.user-profile .up-name{font-size:18px;font-weight:600;margin-bottom:4px}
.user-profile .up-tag{display:inline-block;font-size:11px;padding:2px 8px;border-radius:10px;background:#e3f2fd;color:#1976d2;margin-bottom:12px}
.user-profile .up-tag.customer{background:#f3e5f5;color:#7b1fa2}
.user-profile .up-info{text-align:left;background:#f9f9fb;border-radius:10px;padding:14px;margin-bottom:16px}
.user-profile .up-row{display:flex;padding:6px 0;font-size:13px;border-bottom:1px solid #f0f0f0}
.user-profile .up-row:last-child{border-bottom:none}
.user-profile .up-label{width:70px;color:var(--text3);flex-shrink:0}
.user-profile .up-value{flex:1;color:var(--text1);word-break:break-all}
.user-profile .up-actions{display:flex;gap:10px}
.user-profile .up-btn{flex:1;height:42px;border-radius:8px;border:none;font-size:14px;font-weight:500;cursor:pointer;display:flex;align-items:center;justify-content:center;gap:6px;transition:.15s}
.user-profile .up-btn-primary{background:var(--primary);color:#fff}
.user-profile .up-btn-primary:hover{background:var(--primary-dark)}
.user-profile .up-btn-secondary{background:#f0f2f5;color:var(--text2)}
.user-profile .up-btn-secondary:hover{background:#e4e6e9}
.user-profile .up-listings{margin-top:12px;text-align:left}
.user-profile .up-listings-title{font-size:13px;font-weight:500;color:var(--text2);margin-bottom:8px}
.user-profile .up-listing-item{display:flex;gap:10px;padding:8px;border-radius:8px;background:#f9f9fb;margin-bottom:6px;cursor:pointer}
.user-profile .up-listing-item:hover{background:#f0f2f5}
.user-profile .up-listing-cover{width:50px;height:50px;border-radius:6px;object-fit:cover;flex-shrink:0;background:#eee;display:flex;align-items:center;justify-content:center;font-size:20px}
.user-profile .up-listing-info{flex:1;min-width:0}
.user-profile .up-listing-title{font-size:13px;font-weight:500;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.user-profile .up-listing-meta{font-size:11px;color:var(--text3);margin-top:3px}

/* 楼盘搜索弹窗 */
.loupan-search{position:relative}
.loupan-search-input{width:100%;height:42px;border:1px solid var(--border);border-radius:8px;padding:0 14px;font-size:14px;outline:none;transition:border .2s}
.loupan-search-input:focus{border-color:var(--primary)}
.loupan-search-results{margin-top:12px;max-height:400px;overflow-y:auto}
.loupan-item{display:flex;gap:12px;padding:12px;border-radius:10px;cursor:pointer;border:2px solid transparent;transition:all .15s;margin-bottom:8px;background:#fafbfc}
.loupan-item:hover{background:#f0f2f5}
.loupan-item.selected{border-color:var(--primary);background:var(--primary-light)}
.loupan-item .li-cover{width:80px;height:80px;border-radius:8px;object-fit:cover;flex-shrink:0;background:#eee;display:flex;align-items:center;justify-content:center;font-size:30px;overflow:hidden}
.loupan-item .li-cover img{width:100%;height:100%;object-fit:cover}
.loupan-item .li-info{flex:1;min-width:0;display:flex;flex-direction:column;justify-content:center}
.loupan-item .li-title{font-size:14px;font-weight:500;margin-bottom:4px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.loupan-item .li-addr{font-size:12px;color:var(--text3);margin-bottom:6px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.loupan-item .li-bottom{display:flex;align-items:center;gap:8px}
.loupan-item .li-price{font-size:15px;font-weight:600;color:#f5222d}
.loupan-item .li-tag{font-size:10px;padding:1px 6px;border-radius:3px;background:#e6f7ff;color:#1890ff}
.loupan-send-confirm{text-align:center;margin-top:16px;padding-top:16px;border-top:1px solid var(--border)}
.loupan-send-confirm .lsc-text{font-size:13px;color:var(--text2);margin-bottom:12px}
.loupan-send-confirm .lsc-btns{display:flex;gap:10px;justify-content:center}
.loupan-send-confirm .lsc-btn{padding:0 28px;height:40px;border-radius:8px;border:none;font-size:14px;cursor:pointer;font-weight:500}
.loupan-send-confirm .lsc-btn-cancel{background:#f0f2f5;color:var(--text2)}
.loupan-send-confirm .lsc-btn-confirm{background:var(--primary);color:#fff}
.loupan-empty{text-align:center;padding:40px;color:var(--text3);font-size:13px}
.loupan-loading{text-align:center;padding:20px;color:var(--text3);font-size:13px}

/* 发送楼盘按钮 */
.send-house-btn{width:40px;height:40px;border-radius:50%;background:#f0f2f5;color:#666;font-size:18px;flex-shrink:0;display:flex;align-items:center;justify-content:center;border:none;cursor:pointer;transition:.15s}
.send-house-btn:hover{background:#e3f2fd;color:#1976d2}
.chat-tool-btn{width:40px;height:40px;border-radius:50%;background:#f0f2f5;color:#666;font-size:18px;flex-shrink:0;display:flex;align-items:center;justify-content:center;border:none;cursor:pointer;transition:.15s}
.chat-tool-btn:hover{background:#e8eaed;color:var(--text1)}
.chat-plus-btn{background:#f0f2f5!important;color:#666!important}
.chat-plus-btn:hover{background:#e8eaed!important;color:var(--text1)!important}
.chat-plus-btn.active{background:var(--primary)!important;color:#fff!important;transform:rotate(45deg)}
/* +号弹出面板 */
.chat-plus-panel{position:absolute;bottom:calc(100% + 8px);right:12px;background:var(--white);border-radius:16px;box-shadow:0 4px 24px rgba(0,0,0,.12);padding:0;z-index:200;display:none;overflow:hidden;min-width:240px;animation:plusPanelIn .18s ease-out}
.chat-plus-panel.show{display:block}
@keyframes plusPanelIn{from{opacity:0;transform:translateY(8px) scale(.96);transform-origin:bottom right}to{opacity:1;transform:translateY(0) scale(1)}}
.chat-plus-grid{display:grid;grid-template-columns:repeat(4,1fr);gap:0;padding:16px 12px 8px}
.chat-plus-item{display:flex;flex-direction:column;align-items:center;gap:6px;background:transparent;border:none;cursor:pointer;padding:8px 4px;border-radius:12px;transition:background .15s}
.chat-plus-item:hover{background:var(--bg)}
.plus-icon{width:48px;height:48px;border-radius:14px;background:#f5f5f7;display:flex;align-items:center;justify-content:center;color:#555;transition:all .15s}
.chat-plus-item:hover .plus-icon{background:var(--primary-light);color:var(--primary)}
.chat-plus-item span{font-size:11px;color:var(--text2)}
/* 弹窗内表情面板 */
.chat-plus-emoji{border-top:1px solid var(--separator);padding:8px}
.emoji-panel-inline{background:transparent!important;position:static!important;box-shadow:none!important;width:100%!important;max-height:240px!important;border-radius:0!important;left:auto!important;bottom:auto!important;padding:4px!important;overflow-y:auto!important;overscroll-behavior:contain;-webkit-overflow-scrolling:touch;scrollbar-width:thin}
.emoji-panel-inline::-webkit-scrollbar{width:6px}
.emoji-panel-inline::-webkit-scrollbar-thumb{background:rgba(0,0,0,.2);border-radius:3px}
.emoji-panel-inline::-webkit-scrollbar-track{background:transparent}
.emoji-panel-inline .emoji-grid{grid-template-columns:repeat(8,1fr)}
.ch-user-info-btn:hover{background:var(--bg)!important;color:var(--text1)!important}

/* 用户信息右侧滑入面板 */
.user-panel{position:absolute;top:0;right:0;bottom:0;width:280px;background:var(--white);border-left:1px solid var(--border);z-index:20;transform:translateX(100%);transition:transform .3s cubic-bezier(.4,0,.2,1);display:flex;flex-direction:column;overflow:hidden;box-shadow:-4px 0 12px rgba(0,0,0,.08)}
.user-panel.open{transform:translateX(0)}
/* 移动端面板打开时遮罩 */
@media(max-width:900px){
  body.user-panel-open::after{
    content:'';
    position:fixed;
    inset:0;
    background:rgba(0,0,0,.4);
    z-index:15;
  }
}
/* 微型意向条 */
.ch-intent-bar{display:none;align-items:center;gap:8px;padding:6px 14px;background:#fafcff;border-bottom:1px solid #e6f0ff;font-size:12px;flex-wrap:wrap}
.ch-intent-bar.show{display:flex}
.ch-intent-bar .intent-level{padding:2px 8px;border-radius:10px;font-size:11px;font-weight:600}
.ch-intent-bar .intent-level.low{background:#f5f5f5;color:#999}
.ch-intent-bar .intent-level.medium{background:#fff7e6;color:#fa8c16}
.ch-intent-bar .intent-level.hot{background:#fff2e8;color:#fa541c}
.ch-intent-bar .intent-level.urgent{background:#fff1f0;color:#f5222d;animation:levelPulse 2s infinite}
.ch-intent-bar .intent-current{color:#52c41a;display:flex;align-items:center;gap:3px;flex:1;min-width:0;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.ch-intent-bar .intent-counts{color:var(--text3);display:flex;gap:8px;flex-shrink:0}
.ch-intent-bar .intent-counts b{color:var(--text2);font-weight:600}
.up-panel-header{padding:14px 16px;border-bottom:1px solid var(--border);display:flex;align-items:center;gap:12px;flex-shrink:0}
.up-back-btn{width:32px;height:32px;border-radius:50%;border:none;background:transparent;cursor:pointer;display:flex;align-items:center;justify-content:center;color:var(--primary);transition:background .15s}
.up-back-btn:hover{background:var(--bg)}
.up-panel-title{font-size:16px;font-weight:600;flex:1}
.up-panel-body{flex:1;overflow-y:auto;padding:0}
.user-profile{padding:14px}
.user-profile .up-avatar{width:60px;height:60px;border-radius:50%;margin:0 auto 10px;display:flex;align-items:center;justify-content:center;font-size:24px;color:#fff;background:linear-gradient(135deg,#667eea,#764ba2);overflow:hidden;position:relative}
.user-profile .up-avatar img{width:100%;height:100%;object-fit:cover}
.user-profile .up-name{font-size:17px;font-weight:600;text-align:center;margin-bottom:4px}
.user-profile .up-tag{display:block;text-align:center;font-size:11px;padding:2px 10px;border-radius:12px;background:#e8f5e9;color:#2e7d32;margin:0 auto 12px;width:fit-content}
.user-profile .up-tag.customer{background:#f3e5f5;color:#7b1fa2}
.user-profile .up-info{text-align:left;background:#f9fafb;border-radius:10px;padding:12px;margin-bottom:12px}
.user-profile .up-row{display:flex;padding:6px 0;font-size:12px;border-bottom:1px solid #f0f0f0}
.user-profile .up-row:last-child{border-bottom:none}
.user-profile .up-label{width:60px;color:var(--text3);flex-shrink:0}
.user-profile .up-value{flex:1;color:var(--text1);word-break:break-all;font-size:12px}
.user-profile .up-value a{color:var(--primary);text-decoration:none}
.user-profile .up-actions{display:flex;gap:8px;margin-bottom:12px;flex-wrap:wrap}
.user-profile .up-btn{flex:1;height:38px;border-radius:8px;border:none;font-size:13px;font-weight:500;cursor:pointer;display:flex;align-items:center;justify-content:center;gap:4px;transition:.15s;min-width:80px}
.user-profile .up-btn-primary{background:var(--primary);color:#fff}
.user-profile .up-btn-primary:hover{background:var(--primary-dark)}
.user-profile .up-btn-secondary{background:#f0f2f5;color:var(--text2)}
.user-profile .up-btn-secondary:hover{background:#e4e6e9}
.user-profile .up-btn-accent{background:#f5222d;color:#fff}
.user-profile .up-btn-accent:hover{background:#d32f2f}
.user-profile .up-listings{margin-top:0}
.user-profile .up-listings-title{font-size:13px;font-weight:600;color:var(--text2);margin-bottom:10px;padding:0 4px}
.user-profile .up-listing-item{display:flex;gap:12px;padding:10px;border-radius:10px;background:#f9fafb;margin-bottom:8px;cursor:pointer;transition:background .15s}
.user-profile .up-listing-item:hover{background:#f0f2f5}
.user-profile .up-listing-cover{width:56px;height:56px;border-radius:8px;object-fit:cover;flex-shrink:0;background:#eee;display:flex;align-items:center;justify-content:center;font-size:24px;overflow:hidden}
.user-profile .up-listing-cover img{width:100%;height:100%;object-fit:cover}
.user-profile .up-listing-info{flex:1;min-width:0;display:flex;flex-direction:column;justify-content:center}
.user-profile .up-listing-title{font-size:13px;font-weight:500;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.user-profile .up-listing-meta{font-size:12px;color:var(--text3);margin-top:4px}
.user-profile .up-section-title{font-size:12px;color:var(--text3);margin:16px 0 8px;padding:0 4px;text-transform:uppercase;letter-spacing:.5px}

/* 浏览者详情 */
.visitor-card{display:flex;align-items:center;gap:12px;padding:12px;border-bottom:1px solid var(--border)}
.visitor-card:last-child{border-bottom:none}
.visitor-card .v-detail{flex:1}
.visitor-card .v-name{font-weight:500;font-size:14px}
.visitor-card .v-meta{font-size:12px;color:var(--text3);margin-top:3px}

/* Toast */
.toast{position:fixed;top:20px;left:50%;transform:translateX(-50%);background:rgba(0,0,0,.8);color:#fff;padding:10px 24px;border-radius:20px;font-size:14px;z-index:2000;opacity:0;pointer-events:none;transition:opacity .3s}
.toast.show{opacity:1}

/* 空状态 */
.empty{text-align:center;padding:60px 20px;color:var(--text3)}
.empty .icon{font-size:56px;margin-bottom:12px;opacity:.3}

/* ====== 管理员APP强制移动端样式（不依赖媒体查询） ====== */
body.manager-app-mobile{overflow-x:hidden}
body.manager-app-mobile .login-wrap{background:#fff;align-items:stretch;min-height:100vh}
body.manager-app-mobile .login-box{width:100%;max-width:100%;border-radius:0;box-shadow:none;padding:60px 28px 32px;min-height:100vh;display:flex;flex-direction:column}
body.manager-app-mobile .login-logo{margin-bottom:40px}
body.manager-app-mobile .login-logo .icon{font-size:40px;margin-bottom:16px}
body.manager-app-mobile .login-logo h1{font-size:24px}
body.manager-app-mobile .login-logo p{font-size:13px}
body.manager-app-mobile .login-tabs{margin-bottom:28px}
body.manager-app-mobile .login-tab{font-size:15px;padding:14px 0}
body.manager-app-mobile .form-group{margin-bottom:18px}
body.manager-app-mobile .form-group label{font-size:14px;margin-bottom:8px}
body.manager-app-mobile .form-group input{padding:13px 14px;font-size:15px;border-radius:10px}
body.manager-app-mobile .form-send-code{padding:0 16px;font-size:14px;border-radius:10px;height:auto;min-height:48px}
body.manager-app-mobile .code-input-wrap input{padding-right:14px!important}
body.manager-app-mobile .form-error{min-height:20px;font-size:13px;margin-top:-6px;margin-bottom:10px}
body.manager-app-mobile .btn{padding:14px;border-radius:10px;font-size:16px}
body.manager-app-mobile .login-tip{display:none!important}
body.manager-app-mobile{overflow-x:hidden}
body.manager-app-mobile .sidebar{position:fixed;top:0;left:-280px;z-index:100;width:260px;height:100%;transition:left .3s;box-shadow:2px 0 12px rgba(0,0,0,.15);overflow-y:auto}
body.manager-app-mobile .sidebar.show{left:0}
body.manager-app-mobile .sidebar-overlay{position:fixed;inset:0;background:rgba(0,0,0,.4);z-index:99;display:none}
body.manager-app-mobile .sidebar-overlay.show{display:block}
body.manager-app-mobile .menu-toggle{display:block!important}
body.manager-app-mobile .topbar{padding:0 12px}
body.manager-app-mobile .content{padding:12px}

/* 响应式 */
@media (max-width:900px){
  /* 移动端登录页全屏样式 */
  body.initing .login-wrap{background:#fff}
  .login-wrap{background:var(--white);align-items:stretch}
  .login-box{width:100%;max-width:100%;border-radius:0;box-shadow:none;padding:60px 28px 32px;min-height:100vh;display:flex;flex-direction:column;justify-content:flex-start}
  .login-logo{margin-bottom:40px}
  .login-logo .icon{font-size:40px;margin-bottom:16px}
  .login-logo h1{font-size:24px}
  .login-logo p{font-size:13px}
  .login-tabs{margin-bottom:28px}
  .login-tab{font-size:15px;padding:14px 0}
  .form-group{margin-bottom:18px}
  .form-group label{font-size:14px;margin-bottom:8px}
  .form-group input{padding:13px 14px;font-size:15px;border-radius:10px}
  .form-send-code{padding:0 16px;font-size:14px;border-radius:10px;height:auto;min-height:48px}
  .code-input-wrap input{padding-right:14px!important}
  .form-error{min-height:20px;font-size:13px;margin-top:-6px;margin-bottom:10px}
  .btn{padding:14px;border-radius:10px;font-size:16px}
  .login-tip{margin-top:24px;padding:12px 14px;font-size:12px;line-height:1.7;border-radius:10px}

  .stats-grid{grid-template-columns:repeat(2,1fr)}
  .two-col{grid-template-columns:1fr}
  .topbar{padding:0 12px}
  .content{padding:12px}
  html,body{overflow-x:hidden}
  .sidebar{position:fixed;top:0;left:-280px;z-index:100;width:260px;height:100%;transition:left .3s;box-shadow:2px 0 12px rgba(0,0,0,.15);overflow-y:auto}
  .sidebar.show{left:0}
  .sidebar-overlay{position:fixed;inset:0;background:rgba(0,0,0,.4);z-index:99;display:none}
  .sidebar-overlay.show{display:block}
  .menu-toggle{display:block!important}

  /* 移动端聊天适配 */
  .chat-layout{flex-direction:column;height:100%;border-radius:0;box-shadow:none}
  .chat-sidebar{width:100%!important;height:100%;border-right:none;border-bottom:1px solid var(--border)}
  .chat-main{display:none;width:100%;height:100%}
  .chat-layout.show-chat .chat-sidebar{display:none}
  .chat-layout.show-chat .chat-main{display:flex}
  .chat-back{display:flex!important}
  .chat-messages{padding:12px}
  .chat-header{padding:12px 16px}
  .msg-bubble{max-width:75%!important}

  /* 移动端AI助手适配 */
  .ai-container{flex-direction:column;height:100%;border-radius:0;box-shadow:none}
  .ai-sidebar{width:100%!important;height:auto;max-height:200px;border-right:none;border-bottom:1px solid var(--border);overflow-y:auto}
  .ai-quick-actions{display:flex;gap:8px;flex-wrap:wrap;padding:12px}
  .ai-quick-title{width:100%}
  .ai-action-btn{width:auto;flex:1;min-width:140px;margin:0}
  .ai-msg-bubble{max-width:85%!important}
  .ai-form-row .ai-form-grid{grid-template-columns:1fr!important}

  /* 移动端聊天监控适配 */
  #monitorLayout.show-chat #monitorSidebar{display:none}
  #monitorLayout.show-chat #monitorMain{display:flex}
  #monitorBackBtn{display:flex!important}
  #monitorChatHeader{padding:12px 16px}
  #monitorMessages{padding:12px}
  #monitorComposer{padding:12px 16px;font-size:12px}

  /* 移动端客户工作台适配 */
  #wbStatsBar{padding:6px 8px 0}
  #wbStatsBar>div{padding:6px 2px}
  #wbStatsBar div[id^="wbStat"]{font-size:15px!important}
  #wbStatsBar>div>div>div:last-child{font-size:10px;margin-top:2px}
  #wbViews{padding:6px 8px 0;gap:2px}
  #wbViews .chat-tab{padding:8px 11px;font-size:12px}
  #wbViews .online-count{font-size:10px;min-width:16px;height:16px;line-height:16px}
  #wbMonitorBackBtn{display:flex!important}
  #wbMonitorChatHeader{padding:10px 12px;gap:8px}
  #wbMonitorMessages{padding:12px}
  #wbMonitorComposer{padding:12px 14px;font-size:12px}
  #wbMonitorReplyArea{padding:8px 10px;gap:6px}
  #wbMonitorReplyAsName{min-width:120px;max-width:100%;font-size:12px;height:28px;line-height:28px}
  #wbMonitorReplyAsStatus{width:100%;font-size:11px}
  #wbMonitorReplyArea textarea{font-size:16px!important}
  #wbMonitorEmojiPanel{width:calc(100vw - 36px);max-width:280px}

  /* 移动端弹窗适配 */
  .modal{width:95%!important;max-width:none!important;max-height:90vh!important;border-radius:12px;margin:10px}
  .modal-header{padding:14px 16px;font-size:15px}
  .modal-body{padding:16px}
  .user-profile .up-avatar{width:60px;height:60px;font-size:24px}
  .user-profile .up-name{font-size:16px}
  .user-profile .up-actions{flex-wrap:wrap}
  .user-profile .up-btn{font-size:13px;height:40px;min-width:calc(50% - 5px);flex:1}
  .loupan-item .li-cover{width:64px;height:64px;font-size:24px}
  .loupan-item .li-title{font-size:13px}
  .loupan-item .li-addr{font-size:11px}
  .loupan-item .li-price{font-size:14px}
  .loupan-search-input{height:40px;font-size:14px}
  .loupan-send-confirm .lsc-btn{padding:0 20px;height:38px;font-size:13px}
  .loupan-search-results{max-height:50vh}

  /* 移动端用户面板全屏 */
  .user-panel{width:100%!important;border-left:none!important;top:auto;bottom:0;left:0;right:0;height:80vh;border-radius:16px 16px 0 0;border-top:1px solid var(--border);transform:translateY(100%);box-shadow:0 -4px 20px rgba(0,0,0,.15)}
  .user-panel.open{transform:translateY(0)}
  .up-panel-body{padding-bottom:20px}
  .ch-user-info-btn{display:flex!important}

  /* 移动端在线列表适配 */
  .online-item{padding:10px 12px}
  .online-item .o-name{font-size:13px}
  .chat-tab{font-size:13px;padding:10px 14px}

  /* 移动端聊天输入栏适配 */
  .chat-input-area{padding:8px;gap:6px}
  .chat-input-area textarea{font-size:16px!important}
  .chat-input-area .chat-input-rich{font-size:16px!important}
  .chat-tool-btn,.chat-plus-btn,.chat-send-btn{width:36px!important;height:36px!important;font-size:16px!important}
  .voice-btn-chat{width:36px!important;height:36px!important}
  .voice-tip{display:none}
  .chat-plus-panel{right:8px;min-width:220px}
  .chat-plus-grid{padding:12px 8px 6px}
  .plus-icon{width:42px;height:42px;border-radius:12px}

  /* 移动端房源卡片适配 */
  .house-card,.msg-bubble .house-card{width:240px!important;max-width:100%!important}
  .house-card-cover{height:110px!important}
  .msg-bubble .house-card-cover{height:110px!important}
  .house-card-body,.msg-bubble .house-card-body{padding:10px 12px!important}
  .house-card-title{font-size:14px!important;min-height:auto!important;-webkit-line-clamp:2}
  .house-card-addr{font-size:11px!important}
  .house-card-price .price-num{font-size:18px!important}
  .house-card-contact .row{font-size:11px!important}

  /* 移动端楼盘管理适配 - 卡片化布局 */
  #page-loupan .page-title{flex-direction:column;align-items:flex-start;gap:8px;margin-bottom:12px}
  #page-loupan .page-title h2{font-size:18px}
  #page-loupan .filter-bar{flex-direction:column;align-items:stretch;gap:10px;margin-bottom:12px}
  #page-loupan .filter-bar>div{width:100%}
  #page-loupan .filter-bar select,#page-loupan .filter-bar input{width:100%;height:40px;font-size:14px;border-radius:8px}
  #page-loupan .filter-bar>div:first-child{flex-wrap:wrap;gap:8px}
  #page-loupan .filter-bar>div:first-child>*{flex:1;min-width:calc(50% - 4px)}
  #page-loupan .filter-bar>div:first-child>input{flex:1;min-width:calc(100% - 80px)}
  #page-loupan .filter-bar>div:first-child>.btn{flex:0 0 auto;min-width:60px;padding:0 16px}
  #page-loupan .filter-bar>div:last-child{margin-top:0;justify-content:space-between;width:100%}
  #page-loupan .filter-bar>div:last-child button{flex:1;height:40px;font-size:14px;border-radius:8px}
  #page-loupan .table-wrap{overflow-x:visible;overflow-y:visible;background:transparent;box-shadow:none;padding:0}
  #page-loupan table{min-width:unset;width:100%;border-collapse:separate;border-spacing:0 8px}
  #page-loupan table thead{display:none}
  #page-loupan table tr{display:block;background:#fff;border-radius:12px;box-shadow:0 1px 4px rgba(0,0,0,.06);padding:12px;position:relative}
  #page-loupan table td{display:flex;align-items:center;padding:5px 0;border:none;text-align:left!important;font-size:13px;position:relative}
  #page-loupan table td::before{content:attr(data-label);width:70px;flex-shrink:0;color:var(--text3);font-size:12px}
  /* 封面：绝对定位到卡片左上角 */
  #page-loupan table td:first-child{position:absolute;top:12px;left:12px;padding:0;z-index:1}
  #page-loupan table td:first-child::before{display:none}
  #page-loupan table td:first-child .lp-cover{width:64px;height:48px;border-radius:8px}
  /* 楼盘名称：留出封面空间 */
  #page-loupan table td:nth-child(2){display:block;padding-left:76px;padding-bottom:8px;border-bottom:1px solid #f5f5f5;margin-bottom:4px;min-height:56px}
  #page-loupan table td:nth-child(2)::before{display:none}
  #page-loupan .lp-title{white-space:normal;word-break:break-all;font-size:15px;font-weight:600;margin-bottom:3px;line-height:1.3}
  #page-loupan .lp-addr{white-space:normal;word-break:break-all;font-size:12px;line-height:1.4;color:var(--text3)}
  #page-loupan .lp-tags{margin-top:4px}
  /* 价格突出显示 */
  #page-loupan table td:nth-child(3){justify-content:flex-start}
  #page-loupan table td:nth-child(3)::before{width:70px}
  #page-loupan .lp-price{font-size:16px}
  /* 操作按钮整行 */
  #page-loupan table td:last-child{border-top:1px solid #f5f5f5;margin-top:6px;padding-top:10px;justify-content:flex-end}
  #page-loupan table td:last-child::before{display:none}
  #page-loupan table td:last-child .lp-actions{width:100%;display:flex;gap:8px}
  #page-loupan table td:last-child button{flex:1;height:38px;font-size:13px;border-radius:8px}
  /* 开关按钮（上架/推荐/热门） */
  #page-loupan table td:nth-child(6) button,
  #page-loupan table td:nth-child(7) button,
  #page-loupan table td:nth-child(8) button{min-height:28px;padding:4px 12px!important;font-size:12px!important}
  /* 排序输入框 */
  #page-loupan .lp-weight-input{width:60px;height:30px;font-size:14px}
  /* 空状态/加载状态行 */
  #page-loupan table td[colspan]{display:block;text-align:center;padding:40px 12px!important}
  #page-loupan table td[colspan]::before{display:none!important}
  /* 分页 */
  #loupanPagination{justify-content:center;flex-wrap:wrap;margin-top:12px}
  /* 编辑弹窗移动端 */
  #loupanEditorModal .modal{width:96%!important;max-height:92vh!important;max-width:none!important;margin:10px auto}
  #loupanEditorModal .modal-body{padding:12px}
  #loupanEditorModal .le-tabs{overflow-x:auto;-webkit-overflow-scrolling:touch;flex-wrap:nowrap}
  #loupanEditorModal .le-tab{padding:8px 12px;font-size:13px;white-space:nowrap;flex-shrink:0}
  #loupanEditorModal .le-row{flex-direction:column!important;gap:0!important}
  #loupanEditorModal .le-row .form-group{width:100%!important}
  #loupanEditorModal .form-group{margin-bottom:10px}
  #loupanEditorModal .form-group label{font-size:13px;margin-bottom:4px}
  #loupanEditorModal .form-group input,#loupanEditorModal .form-group select,#loupanEditorModal .form-group textarea{width:100%!important;font-size:14px;height:40px}
  #loupanEditorModal .form-group textarea{height:auto;min-height:70px}
  #loupanEditorModal .modal-footer{padding:10px 12px;flex-wrap:wrap;gap:8px}
  #loupanEditorModal .modal-footer .btn{flex:1;min-width:80px;height:38px;font-size:13px}
  /* 沙盘楼栋弹窗移动端 */
  #shapanBuildingModal .modal{width:96%!important;max-height:92vh!important;margin:10px auto}
  #shapanBuildingModal .modal-body{padding:14px 16px}
  #shapanBuildingModal .modal-body > div{grid-template-columns:1fr!important}
  #shapanBuildingModal .modal-footer{padding:10px 16px;flex-wrap:wrap;gap:8px}
  #shapanBuildingModal .modal-footer .btn{flex:1;min-width:80px;height:38px;font-size:13px}
  /* VR编辑弹窗移动端 */
  #leVrModal .modal{width:96%!important;max-height:92vh!important;margin:10px auto}
  #leVrModal .modal-body{padding:14px 16px}
  #leVrModal .modal-body > div{grid-template-columns:1fr!important}
  #leVrModal .modal-footer{padding:10px 16px;flex-wrap:wrap;gap:8px}
  #leVrModal .modal-footer .btn{flex:1;min-width:80px;height:38px;font-size:13px}

  /* 移动端通用表格横向滚动 */
  .card{padding:12px}
  .card > .table-wrapper,
  .card > .table-wrap,
  .card > .data-table-wrap{margin:0 -12px;border-radius:0;box-shadow:none;overflow-x:auto;-webkit-overflow-scrolling:touch}
  table{font-size:12px}
  th{padding:10px 12px;font-size:11px}
  td{padding:10px 12px;font-size:12px}
  /* 筛选栏移动端 */
  .filter-bar{flex-direction:column;align-items:stretch;gap:8px}
  .filter-bar > div{width:100%}
  .filter-bar .tabs{overflow-x:auto;flex-wrap:nowrap}
  .filter-bar .tab{padding:8px 14px;font-size:13px;white-space:nowrap;flex-shrink:0}
  .filter-bar button{width:100%;height:40px}
  /* 预约看房和业主认证页面筛选 */
  #page-visitors .filter-bar > div:first-child,
  #page-owner_verify > div:first-child{overflow-x:auto;flex-wrap:nowrap}
  #page-visitors .filter-bar .tab,
  #page-owner_verify > div:first-child .tab-btn{white-space:nowrap;flex-shrink:0}
  #page-visitors .filter-bar > div:last-child,
  #page-owner_verify > div:first-child > div:last-child{width:100%;justify-content:space-between;margin-left:0!important}
  #page-visitors .filter-bar > div:last-child button{width:auto;flex:0 0 auto}

  /* 移动端群发消息页适配 */
  #page-broadcast > div:first-child{padding:14px}
  #page-broadcast textarea{font-size:16px!important}
  #page-broadcast .data-table-wrap{overflow-x:visible;overflow-y:visible;background:transparent;box-shadow:none;padding:0}
  #page-broadcast table{min-width:unset;width:100%;border-collapse:separate;border-spacing:0 8px}
  #page-broadcast table thead{display:none}
  #page-broadcast table tr{display:block;background:#fff;border-radius:12px;box-shadow:0 1px 4px rgba(0,0,0,.06);padding:12px}
  #page-broadcast table td{display:flex;align-items:center;padding:5px 0;border:none;text-align:left!important;font-size:13px}
  #page-broadcast table td::before{content:attr(data-label);width:80px;flex-shrink:0;color:var(--text3);font-size:12px}
  #page-broadcast table td:first-child{display:none}
  #page-broadcast table td:last-child{border-top:1px solid #f5f5f5;margin-top:6px;padding-top:10px;justify-content:flex-end}
  #page-broadcast table td:last-child::before{display:none}
  #page-broadcast table td:last-child button{flex:1;height:36px;font-size:13px;border-radius:8px}
  #page-broadcast table td[colspan]{display:block;text-align:center;padding:30px 12px!important}
  #page-broadcast table td[colspan]::before{display:none!important}

  /* 移动端敏感词黑名单适配 */
  #page-blacklist > div:first-child{padding:14px}
  #page-blacklist .data-table-wrap{overflow-x:visible;overflow-y:visible;background:transparent;box-shadow:none;padding:0}
  #page-blacklist table{min-width:unset;width:100%;border-collapse:separate;border-spacing:0 8px}
  #page-blacklist table thead{display:none}
  #page-blacklist table tr{display:block;background:#fff;border-radius:12px;box-shadow:0 1px 4px rgba(0,0,0,.06);padding:12px}
  #page-blacklist table td{display:flex;align-items:center;padding:5px 0;border:none;text-align:left!important;font-size:13px}
  #page-blacklist table td::before{content:attr(data-label);width:80px;flex-shrink:0;color:var(--text3);font-size:12px}
  #page-blacklist table td:first-child{display:none}
  #page-blacklist table td:last-child{border-top:1px solid #f5f5f5;margin-top:6px;padding-top:10px;justify-content:flex-end;gap:6px}
  #page-blacklist table td:last-child::before{display:none}
  #page-blacklist table td:last-child button{flex:1;height:36px;font-size:13px;border-radius:8px}
  #page-blacklist table td[colspan]{display:block;text-align:center;padding:30px 12px!important}
  #page-blacklist table td[colspan]::before{display:none!important}

  /* 移动端管理员管理适配 */
  #page-managers .page-header{flex-direction:column;align-items:flex-start;gap:10px}
  #page-managers .page-header > div:last-child{width:100%;flex-wrap:wrap}
  #page-managers .page-header input{width:100%!important;flex:1;min-width:140px;height:40px;font-size:14px;border-radius:8px}
  #page-managers .page-header button{flex:1;height:40px;font-size:13px;border-radius:8px;min-width:80px}
  #page-managers .table-wrap{overflow-x:visible;overflow-y:visible;background:transparent;box-shadow:none;padding:0}
  #page-managers table{min-width:unset;width:100%;border-collapse:separate;border-spacing:0 8px}
  #page-managers table thead{display:none}
  #page-managers table tr{display:block;background:#fff;border-radius:12px;box-shadow:0 1px 4px rgba(0,0,0,.06);padding:12px}
  #page-managers table td{display:flex;align-items:center;padding:5px 0;border:none;text-align:left!important;font-size:13px}
  #page-managers table td::before{content:attr(data-label);width:70px;flex-shrink:0;color:var(--text3);font-size:12px}
  #page-managers table td:first-child{display:none}
  #page-managers table td:nth-child(2){position:absolute;top:12px;right:12px;padding:0}
  #page-managers table td:nth-child(2)::before{display:none}
  #page-managers table td:nth-child(2) .avatar{width:40px;height:40px;font-size:14px}
  #page-managers table td:nth-child(3){display:block;padding-right:56px;padding-bottom:8px;border-bottom:1px solid #f5f5f5;margin-bottom:4px}
  #page-managers table td:nth-child(3)::before{display:none}
  #page-managers table td:last-child{border-top:1px solid #f5f5f5;margin-top:6px;padding-top:10px;justify-content:flex-end;gap:6px}
  #page-managers table td:last-child::before{display:none}
  #page-managers table td:last-child button{flex:1;height:36px;font-size:13px;border-radius:8px}
  #page-managers table td[colspan]{display:block;text-align:center;padding:30px 12px!important}
  #page-managers table td[colspan]::before{display:none!important}

  /* 移动端周边配套适配 */
  #page-poi > div:first-child{flex-wrap:wrap}
  #page-poi > div:first-child h2{font-size:16px}
  #page-poi .poi-tabs{overflow-x:auto;flex-wrap:nowrap}
  #page-poi .poi-tabs .filter-tag{white-space:nowrap;flex-shrink:0}
  #page-poi > div:nth-child(3){flex-direction:column;align-items:stretch;gap:8px}
  #page-poi > div:nth-child(3) input{width:100%!important;height:40px;font-size:14px;border-radius:8px}
  #page-poi > div:nth-child(3) button{width:100%;height:40px;font-size:14px;border-radius:8px}
  #page-poi .data-table-wrap{overflow-x:visible;overflow-y:visible;background:transparent;box-shadow:none;padding:0}
  #page-poi table{min-width:unset;width:100%;border-collapse:separate;border-spacing:0 8px}
  #page-poi table thead{display:none}
  #page-poi table tr{display:block;background:#fff;border-radius:12px;box-shadow:0 1px 4px rgba(0,0,0,.06);padding:12px}
  #page-poi table td{display:flex;align-items:center;padding:5px 0;border:none;text-align:left!important;font-size:13px}
  #page-poi table td::before{content:attr(data-label);width:70px;flex-shrink:0;color:var(--text3);font-size:12px}
  #page-poi table td:first-child{display:none}
  #page-poi table td:last-child{border-top:1px solid #f5f5f5;margin-top:6px;padding-top:10px;justify-content:flex-end;gap:6px}
  #page-poi table td:last-child::before{display:none}
  #page-poi table td:last-child button{flex:1;height:36px;font-size:13px;border-radius:8px}
  #page-poi table td[colspan]{display:block;text-align:center;padding:30px 12px!important}
  #page-poi table td[colspan]::before{display:none!important}
  #poiEditorModal .modal{width:96%!important;max-height:92vh!important;margin:10px auto}
  #poiEditorModal .modal-body{padding:14px 16px}
  #poiEditorModal .be-row{flex-direction:column!important;gap:0!important}
  #poiEditorModal .be-row .form-group{width:100%!important}

  /* 移动端AI自动审核日志适配 */
  #page-ai-autoreview .filter-bar{flex-direction:column;align-items:stretch;gap:8px}
  #page-ai-autoreview .filter-bar > div{width:100%}
  #page-ai-autoreview .filter-bar select,
  #page-ai-autoreview .filter-bar input{width:100%;height:40px;font-size:14px;border-radius:8px}
  #page-ai-autoreview .filter-bar button{width:100%;height:40px;font-size:14px;border-radius:8px}
  #page-ai-autoreview .data-table-wrap{overflow-x:visible;overflow-y:visible;background:transparent;box-shadow:none;padding:0}
  #page-ai-autoreview table{min-width:unset;width:100%;border-collapse:separate;border-spacing:0 8px}
  #page-ai-autoreview table thead{display:none}
  #page-ai-autoreview table tr{display:block;background:#fff;border-radius:12px;box-shadow:0 1px 4px rgba(0,0,0,.06);padding:12px}
  #page-ai-autoreview table td{display:flex;align-items:flex-start;padding:5px 0;border:none;text-align:left!important;font-size:13px}
  #page-ai-autoreview table td::before{content:attr(data-label);width:70px;flex-shrink:0;color:var(--text3);font-size:12px}
  #page-ai-autoreview table td:first-child{display:none}
  #page-ai-autoreview table td:nth-child(3){display:block;padding-bottom:8px;border-bottom:1px solid #f5f5f5;margin-bottom:4px}
  #page-ai-autoreview table td:nth-child(3)::before{display:none}
  #page-ai-autoreview table td:last-child{border-top:1px solid #f5f5f5;margin-top:6px;padding-top:10px;justify-content:flex-end;gap:6px}
  #page-ai-autoreview table td:last-child::before{display:none}
  #page-ai-autoreview table td:last-child button{flex:1;height:36px;font-size:13px;border-radius:8px}
  #page-ai-autoreview table td[colspan]{display:block;text-align:center;padding:30px 12px!important}
  #page-ai-autoreview table td[colspan]::before{display:none!important}

  /* 移动端业主认证适配 */
  #page-owner_verify .filter-bar{flex-direction:column;align-items:stretch;gap:8px}
  #page-owner_verify .filter-bar > div{width:100%}
  #page-owner_verify .table-wrap,
  #page-owner_verify .data-table-wrap{overflow-x:visible;overflow-y:visible;background:transparent;box-shadow:none;padding:0}
  #page-owner_verify table{min-width:unset;width:100%;border-collapse:separate;border-spacing:0 8px}
  #page-owner_verify table thead{display:none}
  #page-owner_verify table tr{display:block;background:#fff;border-radius:12px;box-shadow:0 1px 4px rgba(0,0,0,.06);padding:12px}
  #page-owner_verify table td{display:flex;align-items:center;padding:5px 0;border:none;text-align:left!important;font-size:13px}
  #page-owner_verify table td::before{content:attr(data-label);width:80px;flex-shrink:0;color:var(--text3);font-size:12px}
  #page-owner_verify table td:first-child{display:none}
  #page-owner_verify table td:last-child{border-top:1px solid #f5f5f5;margin-top:6px;padding-top:10px;justify-content:flex-end;gap:6px}
  #page-owner_verify table td:last-child::before{display:none}
  #page-owner_verify table td:last-child button{flex:1;height:36px;font-size:13px;border-radius:8px}
  #page-owner_verify table td[colspan]{display:block;text-align:center;padding:30px 12px!important}
  #page-owner_verify table td[colspan]::before{display:none!important}

  /* 移动端预约看房适配 */
  #page-visitors .filter-bar{flex-direction:column;align-items:stretch;gap:8px}
  #page-visitors .filter-bar > div{width:100%}
  #page-visitors .table-wrap,
  #page-visitors .data-table-wrap{overflow-x:visible;overflow-y:visible;background:transparent;box-shadow:none;padding:0}
  #page-visitors table{min-width:unset;width:100%;border-collapse:separate;border-spacing:0 8px}
  #page-visitors table thead{display:none}
  #page-visitors table tr{display:block;background:#fff;border-radius:12px;box-shadow:0 1px 4px rgba(0,0,0,.06);padding:12px}
  #page-visitors table td{display:flex;align-items:center;padding:5px 0;border:none;text-align:left!important;font-size:13px}
  #page-visitors table td::before{content:attr(data-label);width:80px;flex-shrink:0;color:var(--text3);font-size:12px}
  #page-visitors table td:first-child{display:none}
  #page-visitors table td:last-child{border-top:1px solid #f5f5f5;margin-top:6px;padding-top:10px;justify-content:flex-end;gap:6px}
  #page-visitors table td:last-child::before{display:none}
  #page-visitors table td:last-child button{flex:1;height:36px;font-size:13px;border-radius:8px}
  #page-visitors table td[colspan]{display:block;text-align:center;padding:30px 12px!important}
  #page-visitors table td[colspan]::before{display:none!important}

  /* 移动端焦点图管理适配 */
  #page-banner > div:first-child{padding:14px}
  #page-banner .filter-bar{flex-direction:column;align-items:stretch;gap:8px}
  #page-banner .filter-bar > div{width:100%}
  #page-banner .filter-bar select,
  #page-banner .filter-bar input{width:100%;height:40px;font-size:14px;border-radius:8px}
  #page-banner .filter-bar button{width:100%;height:40px;font-size:14px;border-radius:8px}
  #page-banner .table-wrap{overflow-x:visible;overflow-y:visible;background:transparent;box-shadow:none;padding:0}
  #page-banner table{min-width:unset;width:100%;border-collapse:separate;border-spacing:0 8px}
  #page-banner table thead{display:none}
  #page-banner table tr{display:block;background:#fff;border-radius:12px;box-shadow:0 1px 4px rgba(0,0,0,.06);padding:12px;position:relative}
  #page-banner table td{display:flex;align-items:center;padding:5px 0;border:none;text-align:left!important;font-size:13px}
  #page-banner table td::before{content:attr(data-label);width:70px;flex-shrink:0;color:var(--text3);font-size:12px}
  #page-banner table td:first-child{position:absolute;top:12px;right:12px;padding:0;z-index:1}
  #page-banner table td:first-child::before{display:none}
  #page-banner table td:nth-child(2){display:block;padding-bottom:8px;border-bottom:1px solid #f5f5f5;margin-bottom:4px}
  #page-banner table td:nth-child(2)::before{display:none}
  #page-banner table td:nth-child(2) .banner-thumb{width:100%;height:auto;aspect-ratio:16/9;border-radius:8px}
  #page-banner table td:nth-child(3){display:block;padding-bottom:8px;border-bottom:1px solid #f5f5f5;margin-bottom:4px}
  #page-banner table td:nth-child(3)::before{display:none}
  #page-banner table td:last-child{border-top:1px solid #f5f5f5;margin-top:6px;padding-top:10px;justify-content:flex-end;gap:6px;flex-wrap:wrap}
  #page-banner table td:last-child::before{display:none}
  #page-banner table td:last-child button{flex:1;min-width:calc(50% - 3px);height:36px;font-size:13px;border-radius:8px}
  #page-banner table td[colspan]{display:block;text-align:center;padding:30px 12px!important}
  #page-banner table td[colspan]::before{display:none!important}

  /* 移动端楼盘评价适配 */
  #page-reviews > div:first-child{padding:14px}
  #page-reviews .filter-bar{flex-direction:column;align-items:stretch;gap:8px}
  #page-reviews .filter-bar > div{width:100%}
  #page-reviews .filter-bar select,
  #page-reviews .filter-bar input{width:100%;height:40px;font-size:14px;border-radius:8px}
  #page-reviews .filter-bar button{width:100%;height:40px;font-size:14px;border-radius:8px}
  #page-reviews .data-table-wrap{overflow-x:visible;overflow-y:visible;background:transparent;box-shadow:none;padding:0}
  #page-reviews table{min-width:unset;width:100%;border-collapse:separate;border-spacing:0 8px}
  #page-reviews table thead{display:none}
  #page-reviews table tr{display:block;background:#fff;border-radius:12px;box-shadow:0 1px 4px rgba(0,0,0,.06);padding:12px}
  #page-reviews table td{display:flex;align-items:center;padding:5px 0;border:none;text-align:left!important;font-size:13px}
  #page-reviews table td::before{content:attr(data-label);width:80px;flex-shrink:0;color:var(--text3);font-size:12px}
  #page-reviews table td:first-child{display:none}
  #page-reviews table td:last-child{border-top:1px solid #f5f5f5;margin-top:6px;padding-top:10px;justify-content:flex-end;gap:6px}
  #page-reviews table td:last-child::before{display:none}
  #page-reviews table td:last-child button{flex:1;height:36px;font-size:13px;border-radius:8px}
  #page-reviews table td[colspan]{display:block;text-align:center;padding:30px 12px!important}
  #page-reviews table td[colspan]::before{display:none!important}

  /* 移动端发帖管理适配 */
  #page-posts > div:first-child{padding:14px}
  #page-posts .filter-bar{flex-direction:column;align-items:stretch;gap:8px}
  #page-posts .filter-bar > div{width:100%}
  #page-posts .filter-bar select,
  #page-posts .filter-bar input{width:100%;height:40px;font-size:14px;border-radius:8px}
  #page-posts .filter-bar button{width:100%;height:40px;font-size:14px;border-radius:8px}
  #page-posts .table-wrap,
  #page-posts .data-table-wrap{overflow-x:visible;overflow-y:visible;background:transparent;box-shadow:none;padding:0}
  #page-posts table{min-width:unset;width:100%;border-collapse:separate;border-spacing:0 8px}
  #page-posts table thead{display:none}
  #page-posts table tr{display:block;background:#fff;border-radius:12px;box-shadow:0 1px 4px rgba(0,0,0,.06);padding:12px}
  #page-posts table td{display:flex;align-items:center;padding:5px 0;border:none;text-align:left!important;font-size:13px}
  #page-posts table td::before{content:attr(data-label);width:80px;flex-shrink:0;color:var(--text3);font-size:12px}
  #page-posts table td:first-child{display:none}
  #page-posts table td:last-child{border-top:1px solid #f5f5f5;margin-top:6px;padding-top:10px;justify-content:flex-end;gap:6px}
  #page-posts table td:last-child::before{display:none}
  #page-posts table td:last-child button{flex:1;height:36px;font-size:13px;border-radius:8px}
  #page-posts table td[colspan]{display:block;text-align:center;padding:30px 12px!important}
  #page-posts table td[colspan]::before{display:none!important}
}

/* ========== 用户监控页面样式 ========== */
.analytics-header{display:flex;justify-content:space-between;align-items:center;margin-bottom:16px;flex-wrap:wrap;gap:10px}
.analytics-header h2{margin:0;font-size:20px}
.live-dot{display:inline-flex;align-items:center;gap:5px;font-size:12px;color:#52c41a;background:#f6ffed;padding:3px 10px;border-radius:12px;font-weight:500}
.live-dot .dot{width:7px;height:7px;background:#52c41a;border-radius:50%;animation:pulse 1.5s infinite}
@keyframes pulse{0%{box-shadow:0 0 0 0 rgba(82,196,26,.6)}70%{box-shadow:0 0 0 6px rgba(82,196,26,0)}100%{box-shadow:0 0 0 0 rgba(82,196,26,0)}}

.analytics-stats{display:grid;grid-template-columns:repeat(auto-fit,minmax(140px,1fr));gap:12px;margin-bottom:20px}
.stat-card{background:#fff;border-radius:12px;padding:16px;display:flex;align-items:center;gap:12px;box-shadow:0 1px 4px rgba(0,0,0,.05);transition:transform .2s}
.stat-card:hover{transform:translateY(-2px);box-shadow:0 4px 12px rgba(0,0,0,.08)}
.stat-icon{width:44px;height:44px;border-radius:10px;display:flex;align-items:center;justify-content:center;flex-shrink:0}
.stat-value{font-size:22px;font-weight:700;line-height:1.2;color:var(--text)}
.stat-label{font-size:12px;color:var(--text3);margin-top:2px}

.analytics-tabs{display:flex;gap:4px;margin-bottom:16px;border-bottom:1px solid var(--border);padding-bottom:0}
.analytics-tabs .tab-btn{display:inline-flex;align-items:center;gap:6px;background:none;border:none;padding:10px 16px;font-size:14px;color:var(--text2);cursor:pointer;border-bottom:2px solid transparent;margin-bottom:-1px;transition:all .2s;border-radius:6px 6px 0 0}
.analytics-tabs .tab-btn:hover{color:var(--primary);background:var(--bg)}
.analytics-tabs .tab-btn.active{color:var(--primary);border-bottom-color:var(--primary);font-weight:500}
.analytics-tabs .hot-count{background:#ff4d4f;color:#fff;font-size:11px;padding:1px 6px;border-radius:10px;min-width:18px;text-align:center;line-height:16px}

.analytics-list{min-height:200px}
.visitor-card{background:#fff;border-radius:12px;padding:14px 16px;margin-bottom:10px;box-shadow:0 1px 4px rgba(0,0,0,.05);display:flex;align-items:center;gap:14px;cursor:pointer;transition:all .2s}
.visitor-card:hover{box-shadow:0 4px 12px rgba(0,0,0,.08);transform:translateX(2px)}
.visitor-card .avatar{width:44px;height:44px;border-radius:50%;background:linear-gradient(135deg,#667eea,#764ba2);color:#fff;display:flex;align-items:center;justify-content:center;font-size:16px;font-weight:600;flex-shrink:0}
.visitor-card.urgent .avatar{background:linear-gradient(135deg,#f5576c,#f093fb)}
.visitor-card.hot .avatar{background:linear-gradient(135deg,#fa709a,#fee140)}
.visitor-card.medium .avatar{background:linear-gradient(135deg,#4facfe,#00f2fe)}
.visitor-info{flex:1;min-width:0}
.visitor-name{font-size:14px;font-weight:600;color:var(--text);display:flex;align-items:center;gap:8px;margin-bottom:3px}
.visitor-meta{font-size:12px;color:var(--text3);display:flex;gap:10px;flex-wrap:wrap;align-items:center}
.visitor-current{font-size:13px;color:var(--text2);margin-top:6px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.visitor-badges{display:flex;gap:4px;flex-wrap:wrap}
.visitor-badge{font-size:10px;padding:1px 6px;border-radius:4px;font-weight:500}
.visitor-badge.device{background:#f0f5ff;color:#2f54eb}
.visitor-badge.source{background:#f6ffed;color:#52c41a}
.visitor-badge.loupan{background:#fff7e6;color:#fa8c16}
.level-badge{font-size:11px;padding:2px 8px;border-radius:10px;font-weight:600;flex-shrink:0}
.level-badge.low{background:#f5f5f5;color:#999}
.level-badge.medium{background:#fff7e6;color:#fa8c16}
.level-badge.hot{background:#fff2e8;color:#fa541c}
.level-badge.urgent{background:#fff1f0;color:#f5222d;animation:levelPulse 2s infinite}
@keyframes levelPulse{0%,100%{box-shadow:0 0 0 0 rgba(245,34,45,.3)}50%{box-shadow:0 0 0 4px rgba(245,34,45,0)}}
.stay-time{font-size:12px;color:var(--text3);white-space:nowrap;display:flex;align-items:center;gap:4px}

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

/* 用户详情弹窗 */
.visitor-detail-header{padding:20px 24px;border-bottom:1px solid var(--border);display:flex;align-items:center;gap:14px}
.visitor-detail-header .avatar{width:56px;height:56px;border-radius:50%;font-size:20px}
.visitor-detail-header .vd-name{font-size:18px;font-weight:700;color:var(--text)}
.visitor-detail-header .vd-meta{font-size:13px;color:var(--text3);margin-top:4px}
.visitor-detail-section{padding:16px 24px;border-bottom:1px solid #f5f5f5}
.visitor-detail-section:last-child{border-bottom:none}
.visitor-detail-section h4{margin:0 0 10px;font-size:14px;color:var(--text);display:flex;align-items:center;gap:6px}
.visitor-detail-tags{display:flex;gap:6px;flex-wrap:wrap;margin-bottom:10px}
.vd-tag{font-size:12px;padding:3px 10px;border-radius:6px;background:var(--bg);color:var(--text2)}
.vd-tag.hot{background:#fff1f0;color:#f5222d;font-weight:500}
.vd-tag.loupan{background:#e6f4ff;color:#1677ff;font-weight:500;max-width:200px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.vd-stat-row{display:grid;grid-template-columns:repeat(auto-fit,minmax(100px,1fr));gap:12px;margin-top:10px}
.vd-stat-item{text-align:center;padding:10px;background:#fafafa;border-radius:8px}
.vd-stat-value{font-size:18px;font-weight:700;color:var(--primary)}
.vd-stat-label{font-size:11px;color:var(--text3);margin-top:2px}
.timeline{position:relative;padding-left:20px}
.timeline::before{content:'';position:absolute;left:6px;top:4px;bottom:4px;width:2px;background:#e8e8e8}
.timeline-item{position:relative;padding-bottom:14px}
.timeline-item:last-child{padding-bottom:0}
.timeline-dot{position:absolute;left:-20px;top:4px;width:14px;height:14px;border-radius:50%;background:#fff;border:2px solid #d9d9d9;z-index:1}
.timeline-item.page_view .timeline-dot{border-color:#1890ff}
.timeline-item.loupan_view .timeline-dot{border-color:#fa8c16;background:#fff7e6}
.timeline-item.huxing_view .timeline-dot{border-color:#722ed1;background:#f9f0ff}
.timeline-item.click_chat,.timeline-item.chat_start .timeline-dot{border-color:#52c41a;background:#f6ffed}
.timeline-item.click_phone,.timeline-item.phone_submit .timeline-dot{border-color:#f5222d;background:#fff1f0}
.timeline-item.intent_hot .timeline-dot{border-color:#fa541c;background:#fff2e8;box-shadow:0 0 0 3px rgba(250,84,28,.2)}
.timeline-time{font-size:11px;color:var(--text3)}
.timeline-content{font-size:13px;color:var(--text);margin-top:2px}
.timeline-content a{color:var(--primary);text-decoration:none}
.timeline-content a:hover{text-decoration:underline}
.timeline-stay{font-size:11px;color:var(--text3);margin-left:6px}
.timeline-ref{font-size:12px;color:var(--text2);background:var(--bg);padding:1px 6px;border-radius:4px;margin-left:4px}

/* 移动端适配 */
@media(max-width:900px){
  .analytics-header h2{font-size:17px}
  .analytics-stats{grid-template-columns:repeat(3,1fr);gap:8px}
  .stat-card{padding:10px 8px;gap:8px}
  .stat-icon{width:36px;height:36px}
  .stat-icon svg{width:16px!important;height:16px!important}
  .stat-value{font-size:17px}
  .stat-label{font-size:11px}
  .analytics-tabs .tab-btn{padding:8px 10px;font-size:13px}
  .visitor-card{padding:12px;gap:10px}
  .visitor-card .avatar{width:38px;height:38px;font-size:14px}
  .visitor-name{font-size:13px}
  .visitor-meta{font-size:11px;gap:6px}
  .visitor-current{font-size:12px}
  .visitor-detail-header{padding:14px 16px}
  .visitor-detail-section{padding:12px 16px}
  .vd-stat-row{grid-template-columns:repeat(2,1fr);gap:8px}
  #visitorDetailModal .modal{width:96%!important;margin:8px auto!important;max-height:94vh!important}
}
@media(max-width:640px){
  .analytics-stats{grid-template-columns:repeat(2,1fr)}
  .analytics-tabs{overflow-x:auto;flex-wrap:nowrap}
  .analytics-tabs .tab-btn{white-space:nowrap;flex-shrink:0}
  .visitor-meta{gap:4px}
  .visitor-badge{font-size:10px;padding:1px 4px}
  /* 客户工作台超小屏：统计条更紧凑，视角条横向滚动不挤压 */
  #wbStatsBar div[id^="wbStat"]{font-size:14px!important}
  #wbStatsBar>div>div>div:last-child{font-size:9px}
  #wbViews{flex-wrap:nowrap;overflow-x:auto;-webkit-overflow-scrolling:touch}
  #wbViews .chat-tab{white-space:nowrap;flex-shrink:0}
}
.menu-toggle{display:flex;align-items:center;justify-content:center;background:none;border:none;font-size:22px;color:var(--text);padding:6px 8px;cursor:pointer;border-radius:8px;transition:background .15s}
.menu-toggle:hover{background:var(--bg)}
/* 桌面端侧边栏折叠：隐藏最左栏，主内容自动占满。移动端(sidebar 为 fixed)不受影响 */
body.sb-collapsed:not(.manager-app-mobile) .sidebar{display:none}
.chat-back{display:none;align-items:center;gap:8px;background:none;border:none;font-size:15px;color:var(--text);padding:0 10px 0 0}

/* 防止加载闪屏 */
body.initing #loginPage, body.initing .app-layout{visibility:hidden}
body.ready #loginPage, body.ready .app-layout{visibility:visible}

/* AI助手样式 */
.ai-container{display:flex;height:100%;background:var(--white);border-radius:var(--radius);box-shadow:var(--shadow);overflow:hidden}
.ai-sidebar{width:260px;border-right:1px solid var(--border);display:flex;flex-direction:column;flex-shrink:0;background:#fafbfc}
.ai-sidebar-header{padding:16px;border-bottom:1px solid var(--border);font-weight:600;font-size:15px;display:flex;align-items:center;gap:8px}
.ai-quick-actions{padding:12px;flex:1;overflow-y:auto}
.ai-quick-title{font-size:12px;color:var(--text3);margin-bottom:10px;font-weight:500}
.ai-action-btn{width:100%;padding:12px 14px;background:var(--white);border:1px solid var(--border);border-radius:10px;margin-bottom:8px;cursor:pointer;display:flex;align-items:center;gap:10px;font-size:13px;color:var(--text);transition:all .2s;text-align:left}
.ai-action-btn:hover{border-color:var(--primary);background:var(--primary-light);color:var(--primary)}
.ai-action-btn .ai-icon{font-size:20px;width:28px;text-align:center}
.ai-action-btn .ai-label{flex:1}
.ai-action-btn .ai-desc{font-size:11px;color:var(--text3);margin-top:2px}
.ai-chat{flex:1;display:flex;flex-direction:column;min-width:0}
.ai-chat-header{padding:14px 20px;border-bottom:1px solid var(--border);display:flex;align-items:center;gap:12px}
.ai-chat-header .ai-avatar{width:40px;height:40px;border-radius:50%;background:linear-gradient(135deg,#667eea,#764ba2);color:#fff;display:flex;align-items:center;justify-content:center;font-size:20px;flex-shrink:0}
.ai-chat-header .ai-info{flex:1}
.ai-chat-header .ai-name{font-weight:600;font-size:15px}
.ai-chat-header .ai-status{font-size:12px;color:var(--success);display:flex;align-items:center;gap:4px}
.ai-chat-header .ai-status::before{content:'';width:6px;height:6px;border-radius:50%;background:var(--success)}
.ai-clear-btn{padding:6px 12px;background:var(--bg);border:none;border-radius:6px;font-size:12px;color:var(--text2);cursor:pointer}
.ai-clear-btn:hover{background:#e8eaed}
.ai-messages{flex:1;overflow-y:auto;padding:20px;background:#f5f6fa}
.ai-msg{display:flex;margin-bottom:16px;gap:10px;align-items:flex-start}
.ai-msg.ai{flex-direction:row}
.ai-msg.user{flex-direction:row-reverse}
.ai-msg .ai-msg-avatar{width:32px;height:32px;border-radius:50%;flex-shrink:0;display:flex;align-items:center;justify-content:center;font-size:16px}
.ai-msg.ai .ai-msg-avatar{background:linear-gradient(135deg,#667eea,#764ba2);color:#fff}
.ai-msg.user .ai-msg-avatar{background:var(--primary);color:#fff}
.ai-msg-bubble{padding:12px 16px;border-radius:16px;font-size:14px;line-height:1.7;max-width:75%;word-break:break-word;position:relative}
.ai-msg.ai .ai-msg-bubble{background:var(--white);border-bottom-left-radius:4px;box-shadow:0 1px 2px rgba(0,0,0,.06)}
.ai-msg.user .ai-msg-bubble{background:var(--primary);color:#fff;border-bottom-right-radius:4px}
.ai-msg-bubble p{margin:0 0 8px}
.ai-msg-bubble p:last-child{margin-bottom:0}
.ai-msg-bubble ul,.ai-msg-bubble ol{margin:8px 0;padding-left:20px}
.ai-msg-bubble li{margin:4px 0}
.ai-msg-bubble strong{font-weight:600}
.ai-typing{display:flex;gap:4px;padding:4px 0}
.ai-typing span{width:8px;height:8px;border-radius:50%;background:#999;animation:aiBounce 1.4s infinite ease-in-out both}
.ai-typing span:nth-child(1){animation-delay:-.32s}
.ai-typing span:nth-child(2){animation-delay:-.16s}
@keyframes aiBounce{0%,80%,100%{transform:scale(0)}40%{transform:scale(1)}}
@keyframes spin{to{transform:rotate(360deg)}}
.ai-form-card{background:#f0f7ff;border:1px solid #d0e3ff;border-radius:10px;padding:14px;margin-top:10px}
.ai-form-card .ai-form-title{font-weight:600;color:var(--primary);margin-bottom:10px;font-size:13px;display:flex;align-items:center;gap:6px}
.ai-form-row{margin-bottom:10px}
.ai-form-row label{display:block;font-size:12px;color:var(--text2);margin-bottom:4px}
.ai-form-row input,.ai-form-row textarea,.ai-form-row select{width:100%;padding:8px 12px;border:1px solid var(--border);border-radius:6px;font-size:13px;outline:none;font-family:inherit}
.ai-form-row input:focus,.ai-form-row textarea:focus,.ai-form-row select:focus{border-color:var(--primary)}
.ai-form-row textarea{min-height:60px;resize:vertical}
.ai-form-row .ai-form-grid{display:grid;grid-template-columns:1fr 1fr;gap:10px}
.ai-form-actions{display:flex;gap:8px;margin-top:12px}
.ai-form-actions button{padding:8px 16px;border-radius:6px;font-size:13px;cursor:pointer;border:none;font-weight:500}
.ai-form-actions .ai-btn-primary{background:var(--primary);color:#fff}
.ai-form-actions .ai-btn-primary:hover{background:var(--primary-dark)}
.ai-form-actions .ai-btn-secondary{background:var(--bg);color:var(--text2)}
.ai-form-actions .ai-btn-secondary:hover{background:#e8eaed}
.ai-suggestions{display:flex;gap:8px;flex-wrap:wrap;margin-top:8px}
.ai-suggestion{padding:6px 14px;background:var(--white);border:1px solid var(--border);border-radius:20px;font-size:12px;color:var(--text2);cursor:pointer;transition:all .2s}
.ai-suggestion:hover{border-color:var(--primary);color:var(--primary);background:var(--primary-light)}
.ai-input-area{padding:12px 16px;border-top:1px solid var(--border);display:flex;gap:10px;align-items:flex-end;background:var(--white)}
.ai-input-area textarea{flex:1;min-width:0;border:1px solid var(--border);border-radius:20px;padding:10px 16px;font-size:14px;resize:none;outline:none;max-height:120px;font-family:inherit;line-height:1.5;min-height:42px}
.ai-input-area textarea:focus{border-color:var(--primary)}
.ai-attach-bar{display:none;padding:8px 16px 0;background:var(--white)}
.ai-attach-bar.show{display:flex}
.ai-attach-chip{display:flex;align-items:center;gap:10px;background:var(--bg);border:1px solid var(--border);border-radius:10px;padding:8px 10px;max-width:340px}
.ai-attach-chip img{width:44px;height:44px;object-fit:cover;border-radius:6px;background:#e8eaed;flex-shrink:0}
.ai-attach-chip .txt{font-size:12px;color:var(--text2);line-height:1.5;min-width:0}
.ai-attach-chip .rm{margin-left:auto;width:24px;height:24px;border-radius:50%;border:none;background:#e8eaed;color:#666;cursor:pointer;display:flex;align-items:center;justify-content:center;flex-shrink:0}
.ai-attach-chip .rm:hover{background:#ffd6d6;color:var(--danger)}
.ai-loupan-card{margin-top:10px;border:1px solid var(--border);border-radius:10px;overflow:hidden;background:var(--white)}
.ai-loupan-hd{display:flex;align-items:center;gap:8px;padding:10px 12px;font-size:13px;font-weight:600;color:var(--text);background:var(--bg);border-bottom:1px solid var(--border)}
.ai-loupan-diff{width:100%;border-collapse:collapse;font-size:13px}
.ai-loupan-diff th,.ai-loupan-diff td{padding:7px 12px;text-align:left;border-bottom:1px solid var(--border)}
.ai-loupan-diff th{color:var(--text3);font-weight:500;font-size:12px;background:var(--bg)}
.ai-loupan-diff tr:last-child td{border-bottom:none}
.ai-loupan-diff .old{color:var(--text3);text-decoration:line-through}
.ai-loupan-diff .new{color:var(--primary);font-weight:600}
.ai-loupan-acts{display:flex;gap:8px;flex-wrap:wrap;padding:10px 12px}
.ai-loupan-cand{display:flex;align-items:center;gap:8px;width:100%;text-align:left;padding:10px 12px;border:none;border-bottom:1px solid var(--border);background:var(--white);cursor:pointer;font-size:13px;color:var(--text)}
.ai-loupan-cand:last-child{border-bottom:none}
.ai-loupan-cand:hover{background:var(--bg)}
.ai-loupan-cand .sub{color:var(--text3);font-size:12px}
.ai-loupan-tip{padding:10px 12px;font-size:12px;color:var(--text3);line-height:1.6;background:var(--bg)}
.ai-msg-bubble img.ai-shot{max-width:180px;max-height:180px;border-radius:8px;display:block;margin-top:6px;border:1px solid var(--border)}
.ai-send-btn{width:42px;height:42px;border-radius:50%;background:var(--primary);color:#fff;font-size:18px;flex-shrink:0;display:flex;align-items:center;justify-content:center;border:none;cursor:pointer;transition:background .2s}
.ai-send-btn:hover{background:var(--primary-dark)}
.ai-send-btn:disabled{background:#ccc;cursor:not-allowed}
.ai-welcome{text-align:center;padding:40px 20px}
.ai-welcome .ai-welcome-icon{font-size:56px;margin-bottom:16px}
.ai-welcome h3{font-size:18px;font-weight:600;margin-bottom:8px;color:var(--text)}
.ai-welcome p{font-size:13px;color:var(--text3);margin-bottom:20px;line-height:1.6}

/* 语音输入按钮 */
.voice-btn,.voice-btn-chat{width:40px;height:40px;border-radius:50%;background:#f0f2f5;color:#666;font-size:20px;flex-shrink:0;display:flex;align-items:center;justify-content:center;border:none;cursor:pointer;transition:all .2s;position:relative}
.voice-btn:hover,.voice-btn-chat:hover{background:#e8eaed;color:var(--primary)}
.voice-btn.recording,.voice-btn-chat.recording{background:#ea4335;color:#fff;animation:pulse 1.5s infinite}
.voice-btn:disabled,.voice-btn-chat:disabled{opacity:.5;cursor:not-allowed}
.voice-tip{position:absolute;bottom:calc(100% + 8px);left:50%;transform:translateX(-50%);background:rgba(0,0,0,.8);color:#fff;font-size:12px;padding:6px 12px;border-radius:6px;white-space:nowrap;pointer-events:none;opacity:0;transition:opacity .2s;z-index:100}
.voice-btn.recording .voice-tip{opacity:1}
.voice-btn.recording .voice-tip::after{content:'';position:absolute;top:100%;left:50%;transform:translateX(-50%);border:6px solid transparent;border-top-color:rgba(0,0,0,.8)}
@keyframes pulse{0%{box-shadow:0 0 0 0 rgba(234,67,53,.4)}70%{box-shadow:0 0 0 10px rgba(234,67,53,0)}100%{box-shadow:0 0 0 0 rgba(234,67,53,0)}}
.voice-wave{display:inline-flex;align-items:center;gap:2px;height:20px;margin:0 4px}
.voice-wave span{width:3px;background:currentColor;border-radius:2px;animation:waveAnim 1s infinite ease-in-out}
.voice-wave span:nth-child(1){height:6px;animation-delay:-.4s}
.voice-wave span:nth-child(2){height:12px;animation-delay:-.2s}
.voice-wave span:nth-child(3){height:18px;animation-delay:0s}
.voice-wave span:nth-child(4){height:12px;animation-delay:-.2s}
.voice-wave span:nth-child(5){height:6px;animation-delay:-.4s}
@keyframes waveAnim{0%,100%{transform:scaleY(.5)}50%{transform:scaleY(1)}}

/* AI新闻编辑器样式 */
.ai-news-editor{background:#fff;border-radius:12px;padding:0;margin-top:12px;box-shadow:0 2px 8px rgba(0,0,0,.08);max-height:500px;display:flex;flex-direction:column}
.ai-news-editor-header{padding:12px 16px;border-bottom:1px solid var(--border);font-weight:600;font-size:14px;display:flex;align-items:center;justify-content:space-between;background:linear-gradient(135deg,#667eea10,#764ba210);border-radius:12px 12px 0 0}
.ai-news-editor-body{padding:14px 16px;overflow-y:auto;flex:1}
.ai-news-step{display:flex;flex-direction:column;gap:12px}
.ai-upload-area{border:2px dashed #c8d0e0;border-radius:10px;padding:24px;text-align:center;cursor:pointer;transition:all .2s;background:#fafbfc}
.ai-upload-area:hover{border-color:var(--primary);background:#f0f7ff}
.ai-upload-area.dragover{border-color:var(--primary);background:#e8f0fe}
.ai-upload-area .upload-icon{font-size:36px;margin-bottom:8px}
.ai-upload-area .upload-text{font-size:13px;color:var(--text2);margin-bottom:4px}
.ai-upload-area .upload-hint{font-size:11px;color:var(--text3)}
.ai-image-list{display:flex;gap:8px;flex-wrap:wrap;margin-top:12px}
.ai-image-item{position:relative;width:80px;height:80px;border-radius:8px;overflow:hidden;border:1px solid var(--border)}
.ai-image-item img{width:100%;height:100%;object-fit:cover}
.ai-image-item .remove-img{position:absolute;top:2px;right:2px;width:20px;height:20px;background:rgba(0,0,0,.6);color:#fff;border-radius:50%;display:flex;align-items:center;justify-content:center;font-size:12px;cursor:pointer}
.ai-image-item .remove-img:hover{background:#d93025}
.ai-loupan-search{position:relative}
.ai-loupan-results{position:absolute;top:100%;left:0;right:0;background:#fff;border:1px solid var(--border);border-radius:0 0 8px 8px;max-height:200px;overflow-y:auto;z-index:10;box-shadow:0 4px 12px rgba(0,0,0,.1)}
.ai-loupan-item{padding:10px 12px;cursor:pointer;display:flex;align-items:center;gap:8px;border-bottom:1px solid #f0f0f0}
.ai-loupan-item:hover{background:#f5f6fa}
.ai-loupan-item:last-child{border-bottom:none}
.ai-loupan-item .lp-img{width:36px;height:36px;border-radius:6px;object-fit:cover;background:#f0f0f0;flex-shrink:0}
.ai-loupan-item .lp-info{flex:1;min-width:0}
.ai-loupan-item .lp-name{font-size:13px;font-weight:500;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.ai-loupan-item .lp-addr{font-size:11px;color:var(--text3);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.ai-loupan-selected{display:flex;align-items:center;gap:8px;padding:8px 12px;background:#f0f7ff;border:1px solid #c8dfff;border-radius:8px;margin-top:8px}
.ai-loupan-selected img{width:32px;height:32px;border-radius:6px;object-fit:cover}
.ai-loupan-selected .lp-name{font-size:13px;font-weight:500;color:var(--primary);flex:1}
.ai-loupan-selected .remove-lp{width:22px;height:22px;border-radius:50%;background:#f0f0f0;border:none;cursor:pointer;font-size:12px;display:flex;align-items:center;justify-content:center}
.ai-loupan-selected .remove-lp:hover{background:#ffecec;color:#d93025}
.ai-form-row-inline{display:grid;grid-template-columns:1fr 1fr;gap:10px}
.ai-flags{display:flex;gap:6px;flex-wrap:wrap}
.ai-flag-chip{padding:5px 12px;border:1px solid var(--border);border-radius:16px;font-size:12px;cursor:pointer;user-select:none;transition:all .2s;background:#fff}
.ai-flag-chip.active{background:var(--primary);color:#fff;border-color:var(--primary)}
.ai-preview-article{background:#fafbfc;border-radius:8px;padding:16px;margin-top:8px}
.ai-preview-title{font-size:18px;font-weight:700;color:var(--text);margin-bottom:8px;line-height:1.4}
.ai-preview-subtitle{font-size:13px;color:var(--text2);margin-bottom:12px;padding-bottom:10px;border-bottom:1px dashed var(--border)}
.ai-preview-meta{display:flex;gap:12px;font-size:11px;color:var(--text3);margin-bottom:14px;flex-wrap:wrap}
.ai-preview-body{font-size:14px;line-height:1.8;color:var(--text)}
.ai-preview-body img{max-width:100%;height:auto;border-radius:6px;margin:10px 0}
.ai-preview-body p{margin-bottom:12px}
.ai-generating{text-align:center;padding:30px}
.ai-generating .gen-icon{font-size:40px;margin-bottom:10px;animation:aiBounce 1.4s infinite}
.ai-generating p{font-size:13px;color:var(--text2)}
.ai-step-nav{display:flex;gap:6px;padding:0 16px 12px}
.ai-step-dot{flex:1;height:4px;background:#e8eaed;border-radius:2px}
.ai-step-dot.active{background:var(--primary)}
.ai-step-dot.done{background:var(--success)}
.ai-news-actions{display:flex;gap:8px;padding:12px 16px;border-top:1px solid var(--border);background:#fafbfc;border-radius:0 0 12px 12px}
.ai-news-actions button{flex:1;padding:10px;border-radius:8px;font-size:13px;font-weight:500;cursor:pointer;border:none;transition:all .2s}
.ai-news-actions .btn-back{background:#f0f2f5;color:var(--text2)}
.ai-news-actions .btn-back:hover{background:#e4e7eb}
.ai-news-actions .btn-generate{background:linear-gradient(135deg,#667eea,#764ba2);color:#fff}
.ai-news-actions .btn-generate:hover{opacity:.9}
.ai-news-actions .btn-submit{background:var(--primary);color:#fff}
.ai-news-actions .btn-submit:hover{background:var(--primary-dark)}
.ai-news-actions .btn-edit{background:#fff;border:1px solid var(--border);color:var(--text)}
.ai-news-actions .btn-edit:hover{border-color:var(--primary);color:var(--primary)}
.ai-source-options{display:flex;gap:6px}
.ai-source-options select,.ai-source-options input{flex:1}
.ai-success-msg{text-align:center;padding:20px}
.ai-success-msg .success-icon{font-size:48px;margin-bottom:10px}
.ai-success-msg h4{font-size:16px;color:var(--success);margin-bottom:6px}
.ai-success-msg p{font-size:13px;color:var(--text3)}

/* 滚动条 */
::-webkit-scrollbar{width:6px}
::-webkit-scrollbar-track{background:transparent}
::-webkit-scrollbar-thumb{background:#ddd;border-radius:3px}
::-webkit-scrollbar-thumb:hover{background:#bbb}

/* ===== 数据统计样式 ===== */
.stats-date-tabs .stats-date-tab{padding:6px 14px;border-radius:6px;font-size:12px;color:var(--text2);background:transparent;border:none;cursor:pointer;transition:all .15s;font-family:inherit;white-space:nowrap}
.stats-date-tabs .stats-date-tab:hover{background:var(--bg)}
.stats-date-tabs .stats-date-tab.active{background:var(--primary);color:#fff;font-weight:500}
.stats-overview-grid{display:grid;grid-template-columns:repeat(6,1fr);gap:12px;margin-bottom:16px}
.stats-ov-card{background:var(--white);border-radius:var(--radius);padding:16px;box-shadow:var(--shadow)}
.stats-ov-label{font-size:12px;color:var(--text2);margin-bottom:8px}
.stats-ov-value{font-size:26px;font-weight:700;color:var(--text);line-height:1.2}
.stats-ov-sub{font-size:11px;color:var(--text3);margin-top:6px}
.stats-ov-change-up{color:var(--danger)}
.stats-ov-change-down{color:var(--success)}
.stats-trend-tab{padding:4px 10px;border-radius:4px;font-size:11px;color:var(--text2);background:var(--bg);border:none;cursor:pointer;font-family:inherit;transition:all .15s}
.stats-trend-tab:hover{background:#e8eaed}
.stats-trend-tab.active{background:var(--primary);color:#fff}
.stats-trend-chart{display:flex;align-items:flex-end;gap:4px;height:160px;padding-top:10px;position:relative}
.stats-trend-bar{flex:1;display:flex;flex-direction:column;align-items:center;gap:3px;min-width:0}
.stats-trend-bar .bar{width:100%;background:var(--primary-light);border-radius:3px 3px 0 0;min-height:3px;position:relative;cursor:pointer;transition:background .15s}
.stats-trend-bar .bar:hover{background:var(--primary)}
.stats-trend-bar .bar .fill{position:absolute;bottom:0;left:0;right:0;background:var(--primary);border-radius:3px 3px 0 0;transition:height .5s}
.stats-trend-bar .label{font-size:10px;color:var(--text3);white-space:nowrap}
.stats-trend-bar .val{font-size:10px;color:var(--text2);font-weight:600}
.dw-tabs-sep{width:1px;height:14px;background:var(--border);margin:0 3px;align-self:center}
.stats-gran-tab{padding:4px 10px;border-radius:4px;font-size:11px;color:var(--text2);background:var(--bg);border:none;cursor:pointer;font-family:inherit;transition:all .15s}
.stats-gran-tab:hover{background:#e8eaed}
.stats-gran-tab.active{background:var(--primary);color:#fff}
.stats-cmp-btn{padding:4px 10px;border-radius:4px;font-size:11px;color:var(--text3);background:transparent;border:1px solid var(--border);cursor:pointer;font-family:inherit;transition:all .15s}
.stats-cmp-btn.active{color:var(--primary);border-color:var(--primary)}
.stats-trend-bars{display:flex;align-items:flex-end;gap:2px;width:100%}
.stats-trend-bars .bar{flex:1 1 0;width:auto;min-width:0}
.stats-trend-bar .bar.ghost{background:rgba(0,0,0,.06);border:1px dashed rgba(0,0,0,.18);cursor:default}
.stats-trend-bar .val .cmp{margin-left:3px}
.stats-trend-bar .val .cmp i{font-style:normal;font-size:9px;font-weight:700}
.stats-trend-bar .val .cmp i.up{color:#e5484d}
.stats-trend-bar .val .cmp i.down{color:#2f9e44}
.stats-trend-bar .val .cmp i.flat{color:var(--text3)}
.stats-domain-item{padding:7px 0;border-bottom:1px solid #f5f5f5}
.stats-domain-item:last-child{border-bottom:none}
.stats-domain-name{font-size:12px;font-weight:500;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;margin-bottom:5px}
.stats-domain-bar{height:6px;background:#f0f0f0;border-radius:3px;overflow:hidden}
.stats-domain-bar .fill{height:100%;background:var(--primary);border-radius:3px;transition:width .5s}
.stats-domain-meta{font-size:10px;color:var(--text3);margin-top:5px;display:flex;align-items:center;gap:6px}
.stats-domain-tag{padding:1px 6px;border-radius:3px;background:var(--bg);color:var(--text2);font-size:10px}
.stats-visitor-item{display:flex;align-items:center;gap:8px;padding:8px 0;border-bottom:1px solid #f5f5f5}
.stats-visitor-item:last-child{border-bottom:none}
.stats-visitor-item .avatar{width:32px;height:32px;font-size:12px;flex-shrink:0}
.stats-visitor-item .v-info{flex:1;min-width:0}
.stats-visitor-item .v-name{font-size:12px;font-weight:500;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.stats-visitor-item .v-page{font-size:11px;color:var(--text3);white-space:nowrap;overflow:hidden;text-overflow:ellipsis;margin-top:1px}
.stats-visitor-item .v-time{font-size:10px;color:var(--text3);flex-shrink:0}
.stats-visitor-item .v-dot{width:6px;height:6px;border-radius:50%;flex-shrink:0}
.stats-visitor-item .v-dot.online{background:var(--success)}
.stats-visitor-item .v-dot.idle{background:#f0ad4e}
.stats-visitor-item .v-dot.offline{background:#ccc}
.stats-rank-item{display:flex;align-items:center;gap:10px;padding:8px 0;border-bottom:1px solid #f5f5f5}
.stats-rank-item:last-child{border-bottom:none}
.stats-rank-num{width:22px;height:22px;border-radius:6px;display:flex;align-items:center;justify-content:center;font-size:11px;font-weight:700;flex-shrink:0;background:var(--bg);color:var(--text3)}
.stats-rank-num.top1{background:linear-gradient(135deg,#ff6b6b,#ee5a24);color:#fff}
.stats-rank-num.top2{background:linear-gradient(135deg,#ffa502,#ff7f50);color:#fff}
.stats-rank-num.top3{background:linear-gradient(135deg,#fbc531,#e1b12c);color:#fff}
.stats-rank-bar{flex:1;height:6px;background:#f0f0f0;border-radius:3px;overflow:hidden;min-width:60px}
.stats-rank-bar .fill{height:100%;background:var(--primary);border-radius:3px;transition:width .5s}
.stats-rank-title{flex:1;min-width:0;font-size:12px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.stats-rank-count{font-size:12px;font-weight:600;color:var(--text);min-width:40px;text-align:right}
.stats-source-item{display:flex;align-items:center;gap:8px;padding:6px 0}
.stats-source-dot{width:10px;height:10px;border-radius:3px;flex-shrink:0}
.stats-source-name{flex:1;font-size:12px}
.stats-source-bar{width:100px;height:6px;background:#f0f0f0;border-radius:3px;overflow:hidden}
.stats-source-bar .fill{height:100%;border-radius:3px}
.stats-source-count{font-size:12px;font-weight:600;min-width:50px;text-align:right}
.stats-source-percent{font-size:11px;color:var(--text3);min-width:35px;text-align:right}
.stats-device-item{display:flex;align-items:center;gap:10px;padding:10px 0;border-bottom:1px solid #f5f5f5}
.stats-device-item:last-child{border-bottom:none}
.stats-device-icon{width:36px;height:36px;border-radius:8px;background:var(--bg);display:flex;align-items:center;justify-content:center;font-size:18px;flex-shrink:0}
.stats-device-info{flex:1}
.stats-device-name{font-size:13px;font-weight:500}
.stats-device-meta{font-size:11px;color:var(--text3);margin-top:2px}
.stats-device-bar{width:120px;height:8px;background:#f0f0f0;border-radius:4px;overflow:hidden}
.stats-device-bar .fill{height:100%;border-radius:4px}
.stats-device-count{font-size:13px;font-weight:600;min-width:50px;text-align:right}
.stats-funnel{display:flex;flex-direction:column;align-items:center;gap:6px;padding:10px 0}
.stats-funnel-step{display:flex;align-items:center;gap:16px;width:100%}
.stats-funnel-bar-wrap{flex:1;display:flex;justify-content:center}
.stats-funnel-bar{height:40px;border-radius:6px;display:flex;align-items:center;justify-content:center;color:#fff;font-size:13px;font-weight:600;transition:width .5s;position:relative}
.stats-funnel-info{width:180px;text-align:left}
.stats-funnel-name{font-size:13px;font-weight:500}
.stats-funnel-count{font-size:18px;font-weight:700;color:var(--text)}
.stats-funnel-rate{font-size:11px;color:var(--text3)}
.stats-funnel-arrow{color:var(--text3);font-size:16px}

/* ===== 深色数据大屏（仅作用于 #page-dashboard.dash-dark）===== */
#page-dashboard.dash-dark{
  --bg:#080c17;--card:rgba(255,255,255,.045);--white:transparent;
  --text:#eaf0ff;--text1:#eaf0ff;--text2:#a7b4d4;--text3:#6c7ba3;
  --border:rgba(255,255,255,.09);
  --primary:#4d8dff;--primary-light:rgba(77,141,255,.32);
  --success:#37d39b;--danger:#ff6b81;--warning:#ffcf5c;
  --radius:14px;--shadow:0 6px 24px rgba(0,0,0,.35);
  background:radial-gradient(1200px 600px at 15% -10%,#152347 0%,transparent 55%),
             radial-gradient(1000px 500px at 100% 0%,#0f2b3d 0%,transparent 50%),
             #080c17;
  color:var(--text);min-height:100%;
}
#page-dashboard.dash-dark .dw-topbar{display:flex;align-items:center;gap:16px;flex-wrap:wrap;padding:6px 4px 16px}
#page-dashboard.dash-dark .dw-brand{display:flex;align-items:center;gap:10px}
#page-dashboard.dash-dark .dw-brand-title{font-size:22px;font-weight:800;letter-spacing:2px;
  background:linear-gradient(90deg,#7db4ff,#4d8dff 40%,#37d39b);-webkit-background-clip:text;background-clip:text;color:transparent}
#page-dashboard.dash-dark .dw-live{display:inline-flex;align-items:center;gap:5px;font-size:11px;font-weight:700;color:#37d39b;
  border:1px solid rgba(55,211,155,.4);border-radius:20px;padding:2px 9px;background:rgba(55,211,155,.08)}
#page-dashboard.dash-dark .dw-live-dot{width:7px;height:7px;border-radius:50%;background:#37d39b;box-shadow:0 0 8px #37d39b;animation:pulse-dot 1.6s ease-in-out infinite}
#page-dashboard.dash-dark .dw-clock{font-size:20px;font-weight:700;font-variant-numeric:tabular-nums;color:#cfe0ff;
  text-shadow:0 0 14px rgba(77,141,255,.5);letter-spacing:1px}
#page-dashboard.dash-dark .dw-controls{display:flex;align-items:center;gap:8px;flex-wrap:wrap;margin-left:auto}
#page-dashboard.dash-dark .dw-dates{background:rgba(255,255,255,.05);border:1px solid var(--border);border-radius:10px;padding:3px}
#page-dashboard.dash-dark .stats-date-tabs .stats-date-tab{color:var(--text2)}
#page-dashboard.dash-dark .stats-date-tabs .stats-date-tab:hover{background:rgba(255,255,255,.08)}
#page-dashboard.dash-dark .stats-date-tabs .stats-date-tab.active{background:var(--primary);color:#fff;box-shadow:0 0 12px rgba(77,141,255,.5)}
#page-dashboard.dash-dark .dw-date{background:rgba(255,255,255,.05);border:1px solid var(--border);border-radius:8px;
  padding:6px 9px;font-size:12px;color:var(--text2);color-scheme:dark}
#page-dashboard.dash-dark .dw-date-sep{color:var(--text3);font-size:12px}
#page-dashboard.dash-dark .dw-btn{background:rgba(255,255,255,.05);border:1px solid var(--border);border-radius:8px;
  padding:6px 12px;font-size:12px;color:var(--text2);transition:all .15s}
#page-dashboard.dash-dark .dw-btn:hover{background:rgba(77,141,255,.18);color:#fff;border-color:rgba(77,141,255,.5)}

#page-dashboard.dash-dark .dw-todos{display:grid;grid-template-columns:repeat(4,1fr);gap:12px;margin-bottom:14px}
#page-dashboard.dash-dark .dw-todo{display:flex;flex-direction:column;gap:2px;cursor:pointer;
  background:linear-gradient(135deg,rgba(77,141,255,.12),rgba(255,255,255,.03));
  border:1px solid var(--border);border-radius:12px;padding:12px 16px;transition:transform .15s,box-shadow .15s}
#page-dashboard.dash-dark .dw-todo:hover{transform:translateY(-2px);box-shadow:0 6px 20px rgba(77,141,255,.25)}
#page-dashboard.dash-dark .dw-todo b{font-size:26px;font-weight:800;color:#fff;line-height:1;font-variant-numeric:tabular-nums}
#page-dashboard.dash-dark .dw-todo span{font-size:12px;color:var(--text2)}

#page-dashboard.dash-dark .dw-kpis{display:grid;grid-template-columns:repeat(4,1fr);gap:12px;margin-bottom:16px}
#page-dashboard.dash-dark .dw-kpi{position:relative;overflow:hidden;background:var(--card);
  border:1px solid var(--border);border-radius:14px;padding:16px 18px;box-shadow:var(--shadow)}
#page-dashboard.dash-dark .dw-kpi::before{content:'';position:absolute;left:0;top:0;bottom:0;width:3px;
  background:linear-gradient(180deg,#4d8dff,#37d39b);opacity:.85}
#page-dashboard.dash-dark .dw-kpi-accent{cursor:pointer;background:linear-gradient(135deg,rgba(255,107,129,.16),rgba(255,255,255,.03))}
#page-dashboard.dash-dark .dw-kpi-accent::before{background:linear-gradient(180deg,#ff6b81,#ffcf5c)}
#page-dashboard.dash-dark .dw-kpi-label{font-size:12px;color:var(--text2);margin-bottom:8px}
#page-dashboard.dash-dark .dw-kpi-value{font-size:34px;font-weight:800;line-height:1.1;color:#fff;
  font-variant-numeric:tabular-nums;text-shadow:0 0 18px rgba(77,141,255,.45)}
#page-dashboard.dash-dark .dw-kpi-accent .dw-kpi-value{text-shadow:0 0 18px rgba(255,107,129,.5)}
#page-dashboard.dash-dark .dw-kpi-sub{font-size:11px;color:var(--text3);margin-top:6px}

#page-dashboard.dash-dark .dw-grid{display:grid;grid-template-columns:repeat(3,1fr);gap:14px}
#page-dashboard.dash-dark .dw-span2{grid-column:span 2}
#page-dashboard.dash-dark .dw-panel{background:var(--card);border:1px solid var(--border);border-radius:14px;
  padding:16px 18px;box-shadow:var(--shadow);backdrop-filter:blur(4px);min-width:0}
#page-dashboard.dash-dark .dw-panel-head{display:flex;align-items:center;justify-content:space-between;gap:8px;
  font-size:14px;font-weight:600;color:var(--text1);margin-bottom:14px;padding-bottom:10px;border-bottom:1px solid var(--border)}
#page-dashboard.dash-dark .dw-tabs{display:flex;gap:4px}
#page-dashboard.dash-dark .stats-trend-tab{background:rgba(255,255,255,.06);color:var(--text2)}
#page-dashboard.dash-dark .stats-trend-tab:hover{background:rgba(255,255,255,.12)}
#page-dashboard.dash-dark .stats-trend-tab.active{background:var(--primary);color:#fff}
#page-dashboard.dash-dark .dw-tabs-sep{background:rgba(255,255,255,.15)}
#page-dashboard.dash-dark .stats-gran-tab{background:rgba(255,255,255,.06);color:var(--text2)}
#page-dashboard.dash-dark .stats-gran-tab:hover{background:rgba(255,255,255,.12)}
#page-dashboard.dash-dark .stats-gran-tab.active{background:var(--primary);color:#fff}
#page-dashboard.dash-dark .stats-cmp-btn{background:rgba(255,255,255,.04);border-color:var(--border);color:var(--text3)}
#page-dashboard.dash-dark .stats-cmp-btn.active{color:#fff;border-color:var(--primary);background:rgba(77,141,255,.18)}
#page-dashboard.dash-dark .stats-trend-bar .bar.ghost{background:rgba(255,255,255,.1);border:1px dashed rgba(255,255,255,.28)}
#page-dashboard.dash-dark .stats-trend-bar .val .cmp i.up{color:#ff8085}
#page-dashboard.dash-dark .stats-trend-bar .val .cmp i.down{color:#37d39b}
#page-dashboard.dash-dark .stats-domain-item{border-bottom-color:rgba(255,255,255,.07)}
#page-dashboard.dash-dark .stats-domain-bar{background:rgba(255,255,255,.1)}
#page-dashboard.dash-dark .stats-domain-name{color:var(--text1)}
#page-dashboard.dash-dark .stats-domain-tag{background:rgba(255,255,255,.07);color:var(--text2)}
#page-dashboard.dash-dark .dw-live-count{font-size:11px;font-weight:500;color:var(--success);font-style:normal}
#page-dashboard.dash-dark .dw-scroll{max-height:320px;overflow-y:auto}
#page-dashboard.dash-dark .dw-loading{text-align:center;padding:26px;color:var(--text3);font-size:13px}
#page-dashboard.dash-dark .dw-hotbox{margin-top:12px;border-top:1px solid var(--border);padding-top:10px}
#page-dashboard.dash-dark .dw-hot-title{font-size:12px;font-weight:600;color:var(--text2);margin-bottom:6px}
/* 注入片段的深色适配：进度条轨道 / 分隔线 */
#page-dashboard.dash-dark .stats-rank-bar,
#page-dashboard.dash-dark .stats-source-bar,
#page-dashboard.dash-dark .stats-device-bar{background:rgba(255,255,255,.1)}
#page-dashboard.dash-dark .stats-rank-item,
#page-dashboard.dash-dark .stats-device-item,
#page-dashboard.dash-dark .stats-visitor-item{border-bottom-color:rgba(255,255,255,.07)}
#page-dashboard.dash-dark .stats-rank-num{background:rgba(255,255,255,.07);color:var(--text2)}
#page-dashboard.dash-dark .stats-rank-count,
#page-dashboard.dash-dark .stats-funnel-count,
#page-dashboard.dash-dark .stats-source-name,
#page-dashboard.dash-dark .stats-device-name{color:var(--text1)}
#page-dashboard.dash-dark .stats-visitor-item .v-name{color:var(--text1)}
#page-dashboard.dash-dark .table-wrap table th{color:var(--text2);border-bottom:1px solid var(--border)}
#page-dashboard.dash-dark .table-wrap table td{color:var(--text2);border-bottom:1px solid rgba(255,255,255,.06)}
#page-dashboard.dash-dark .dashboard-chat-item .v-name{color:var(--text1)}
#page-dashboard.dash-dark .dashboard-chat-item .v-house{color:var(--text3)}
#page-dashboard.dash-dark .dashboard-chat-item{border-bottom:1px solid rgba(255,255,255,.06)}
@media(max-width:1200px){
  #page-dashboard.dash-dark .dw-grid{grid-template-columns:repeat(2,1fr)}
  #page-dashboard.dash-dark .dw-span2{grid-column:span 2}
  #page-dashboard.dash-dark .dw-kpis{grid-template-columns:repeat(3,1fr)}
}
@media(max-width:900px){
  #page-dashboard.dash-dark .dw-grid{grid-template-columns:1fr}
  #page-dashboard.dash-dark .dw-span2{grid-column:span 1}
  #page-dashboard.dash-dark .dw-kpis{grid-template-columns:repeat(2,1fr)}
  #page-dashboard.dash-dark .dw-todos{grid-template-columns:repeat(2,1fr)}
  #page-dashboard.dash-dark .dw-brand-title{font-size:18px}
  #page-dashboard.dash-dark .dw-clock{font-size:16px}
}
@media(max-width:1200px){
  .stats-overview-grid{grid-template-columns:repeat(3,1fr)}
}
@media(max-width:900px){
  /* iPhone风格移动端基础 */
  .content{margin-left:0!important;padding:12px 10px 80px!important;-webkit-overflow-scrolling:touch}
  .stats-overview-grid{grid-template-columns:repeat(2,1fr);gap:8px}
  .stats-ov-card{padding:14px 12px;border-radius:16px}
  .stats-ov-value{font-size:24px}
  .stats-ov-label{font-size:12px}
  .stats-date-bar{flex-direction:column;align-items:stretch;gap:8px;margin-bottom:14px}
  .stats-date-bar > div:last-child{margin-left:0!important}
  .stats-date-tabs{width:100%;overflow-x:auto;justify-content:flex-start;border-radius:12px;padding:4px}
  .stats-date-tabs .stats-date-tab{flex-shrink:0;padding:7px 12px;font-size:13px;border-radius:10px}
  .stats-date-tabs .stats-date-tab.active{background:var(--primary);color:#fff}
  .stats-date-bar > div:nth-child(2){width:100%;display:flex;gap:6px}
  #statsStartDate,#statsEndDate{flex:1;min-width:0;font-size:13px;padding:8px 10px;border-radius:10px}
  #hapticToggleBtn{height:38px;padding:0 16px;border-radius:12px;font-size:13px}
  .two-col{display:block}
  .two-col > div{margin-bottom:12px}
  div[style*="grid-template-columns:1fr 1fr"],div[style*="grid-template-columns:2fr 1fr"]{grid-template-columns:1fr!important;gap:0!important}
  div[style*="grid-template-columns:1fr 1fr"] > div,div[style*="grid-template-columns:2fr 1fr"] > div{margin-bottom:12px}
  .stats-rank-title{max-width:120px;font-size:12px}
  .stats-rank-count{font-size:12px;min-width:32px}
  .stats-source-name{font-size:12px}
  .stats-source-count{font-size:12px;min-width:40px}
  .stats-source-percent{font-size:11px;min-width:32px}
  .stats-source-bar{width:80px}
  .stats-device-item{flex-direction:column;align-items:flex-start;gap:8px}
  .stats-device-bar{width:100%}
  .stats-device-count{width:100%;text-align:left;display:flex;justify-content:space-between;align-items:center}
  .stats-funnel{gap:10px}
  .stats-funnel-step{flex-direction:column;align-items:stretch;gap:8px}
  .stats-funnel-bar-wrap{width:100%}
  .stats-funnel-bar{width:100%!important;height:36px;font-size:13px;border-radius:12px}
  .stats-funnel-info{width:100%;margin-top:0;display:flex;justify-content:space-between}
  .stats-funnel-arrow{text-align:center;font-size:14px}
  .stats-visitor-item .v-name{font-size:12px}
  .stats-visitor-item .v-page{font-size:11px}
  .stats-visitor-item .v-time{font-size:10px}
  .stats-trend-chart{height:140px;gap:3px}
  .stats-trend-bar .label{font-size:9px}
  .stats-trend-bar .val{font-size:10px}
  .stats-trend-tab{padding:5px 10px;font-size:11px;border-radius:8px}
  #statsAgentCard .table-wrap{overflow-x:visible;overflow-y:visible;background:transparent;box-shadow:none}
  #statsAgentCard table{min-width:unset;width:100%;border-collapse:separate;border-spacing:0 10px}
  #statsAgentCard table thead{display:none}
  #statsAgentCard table tr{display:block;background:#fff;border-radius:16px;box-shadow:0 1px 4px rgba(0,0,0,.05),0 4px 12px rgba(0,0,0,.04);padding:14px}
  #statsAgentCard table td{display:flex;align-items:center;padding:5px 0;border:none;text-align:left;font-size:13px;justify-content:space-between}
  #statsAgentCard table td::before{content:attr(data-label);color:var(--text3);font-size:12px;font-weight:500}
  #statsAgentCard table td:first-child{display:none}
  #statsAgentCard table td:nth-child(2)::before{display:none}
  #statsAgentCard table td:nth-child(2){justify-content:flex-start;padding-bottom:10px;margin-bottom:6px;border-bottom:1px solid #f5f5f5;font-weight:500}
  .card{padding:16px;margin-bottom:12px;border-radius:16px;box-shadow:0 1px 3px rgba(0,0,0,.05),0 4px 12px rgba(0,0,0,.04)}
  .card-title{font-size:14px;margin-bottom:12px}
  .stat-card{border-radius:16px}
  .section-title{margin:20px 0 10px 4px}
  .page-header,.page-title{margin-bottom:14px}
  .page-title h2{font-size:22px}
  /* 我的数据grid移动端 */
  #myStatsGrid{grid-template-columns:repeat(2,1fr)!important}
}
@media(max-width:640px){
  .content{padding:10px 8px 80px}
  .stats-overview-grid{grid-template-columns:repeat(2,1fr);gap:6px}
  .stats-ov-card{padding:12px 10px;border-radius:14px}
  .stats-ov-label{font-size:11px;margin-bottom:2px}
  .stats-ov-value{font-size:20px}
  .stats-ov-sub{font-size:10px;margin-top:3px}
  .stats-date-tabs .stats-date-tab{padding:6px 10px;font-size:12px}
  .stats-rank-item{flex-direction:column;align-items:flex-start;gap:4px;padding:10px 0}
  .stats-rank-bar{width:100%;margin-top:2px}
  .stats-rank-count{width:100%;text-align:right}
  .stats-source-item{flex-wrap:wrap;gap:6px}
  .stats-source-bar{width:100%;order:5}
  .stats-source-percent{min-width:auto;font-size:10px}
  .stats-trend-tab{padding:4px 8px;font-size:10px}
  .card{padding:14px;border-radius:14px}
  .card-title{font-size:13px;margin-bottom:10px}
  #myStatsGrid{grid-template-columns:1fr!important}
}

/* 聊天监控 */
#monitorSidebar.hide{display:none}
#monitorMain.show{display:flex}
#monitorSidebar .chat-sidebar-header input:focus,
#monitorSidebar .chat-sidebar-header select:focus{border-color:var(--primary)!important}
#monitorConvList .chat-item{display:flex;align-items:center;gap:10px;padding:12px 16px;cursor:pointer;border-bottom:1px solid var(--border);transition:background .15s}
#monitorConvList .chat-item:hover{background:var(--bg)}
#monitorConvList .chat-item.active{background:var(--primary-light)}
.monitor-mode-indicator{display:inline-flex;align-items:center;gap:4px;padding:2px 8px;border-radius:10px;font-size:11px;background:#fff3e0;color:#e8710a;font-weight:500}
#monitorComposer{background:#fff8f0;border-top:1px solid #ffe0b2}

/* ===== 焦点图编辑弹窗样式 ===== */
#bannerEditorModal .form-group{margin-bottom:0}
#bannerEditorModal .form-group select{width:100%;padding:9px 12px;border:1px solid var(--border);border-radius:8px;font-size:13px;font-family:inherit;outline:none;background:#fff;height:40px;box-sizing:border-box;appearance:auto}
#bannerEditorModal .form-group input[type=text],
#bannerEditorModal .form-group input[type=number],
#bannerEditorModal .form-group input[type=date],
#bannerEditorModal .form-group input[type=url]{width:100%;padding:9px 12px;border:1px solid var(--border);border-radius:8px;font-size:13px;font-family:inherit;outline:none;height:40px;box-sizing:border-box}
#bannerEditorModal .form-group input:focus,#bannerEditorModal .form-group select:focus{border-color:var(--primary)}
.be-section{margin-bottom:4px}
.be-section-title{font-size:13px;font-weight:600;color:var(--text2);border-top:1px solid var(--border);padding-top:14px;margin:12px 0 10px}
.be-row{display:flex;gap:12px;align-items:flex-start}
.be-row .form-group{flex:1;min-width:0}
.be-row-2 .form-group{flex:1}
.be-row-3 .form-group{flex:1}
.be-row-4 .form-group{flex:1}
.be-upload{display:flex;gap:12px;align-items:flex-start}
.be-upload-preview{width:220px;height:110px;background:var(--bg);border-radius:8px;display:flex;align-items:center;justify-content:center;color:var(--text3);font-size:12px;overflow:hidden;flex-shrink:0;border:1.5px dashed var(--border)}
.be-upload-preview img{width:100%;height:100%;object-fit:cover}
.be-upload-info{flex:1;min-width:0}
.be-color-picker{display:flex;gap:6px;align-items:center}
.be-color-picker input[type=color]{width:40px;height:40px;padding:2px;border:1px solid var(--border);border-radius:8px;cursor:pointer;flex-shrink:0;background:#fff}
.be-color-picker input[type=text]{flex:1}
.be-link-picker{display:flex;gap:6px;align-items:center}
.be-link-picker .btn{height:40px;display:inline-flex;align-items:center;justify-content:center}

/* 焦点图关联目标选择弹窗 */
.banner-target-search{position:relative;margin-bottom:12px}
.banner-target-search input{width:100%;padding:10px 12px 10px 36px;border:1px solid var(--border);border-radius:8px;font-size:14px;outline:none;font-family:inherit;box-sizing:border-box}
.banner-target-search input:focus{border-color:var(--primary)}
.banner-target-results{max-height:400px;overflow-y:auto}
.banner-target-item{display:flex;gap:10px;padding:10px;border-radius:8px;cursor:pointer;transition:background .15s;align-items:center}
.banner-target-item:hover{background:var(--bg)}
.banner-target-item.selected{background:var(--primary-light)}
.banner-target-item .bti-cover{width:56px;height:42px;border-radius:6px;overflow:hidden;flex-shrink:0;background:var(--bg);display:flex;align-items:center;justify-content:center;color:var(--text3)}
.banner-target-item .bti-cover img{width:100%;height:100%;object-fit:cover}
.banner-target-item .bti-info{flex:1;min-width:0}
.banner-target-item .bti-title{font-size:13px;font-weight:500;color:var(--text);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.banner-target-item .bti-sub{font-size:11px;color:var(--text3);margin-top:2px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}

/* 焦点图列表表格优化 */
#page-banner .filter-bar{margin-bottom:16px;align-items:center;margin-top:0;padding-top:0}
#page-banner .filter-bar select{height:36px;padding:0 12px;border-radius:8px;border:1px solid var(--border);font-size:13px;outline:none;background:#fff;transition:border-color .2s;box-sizing:border-box;appearance:auto}
#page-banner .filter-bar input{height:36px;padding:0 14px;border-radius:8px;border:1px solid var(--border);font-size:13px;outline:none;transition:border-color .2s;box-sizing:border-box}
#page-banner .filter-bar select:focus,#page-banner .filter-bar input:focus{border-color:var(--primary)}
#page-banner table{table-layout:fixed;width:100%}
#page-banner table thead th{padding:14px 16px;font-weight:600;background:#f8f9fb;white-space:nowrap}
#page-banner table tbody td{padding:12px 16px;height:70px;vertical-align:middle}
#page-banner table tbody td:first-child{text-align:center}
#page-banner table tbody td .banner-thumb{width:80px;height:54px;border-radius:8px;overflow:hidden;background:var(--bg);display:flex;align-items:center;justify-content:center;border:1px solid var(--border)}
#page-banner table tbody td .banner-thumb img{width:100%;height:100%;object-fit:cover;cursor:pointer;transition:transform .2s}
#page-banner table tbody td .banner-thumb img:hover{transform:scale(1.05)}
.banner-title-cell{line-height:1.5}
.banner-title-cell .bt-title{font-weight:500;font-size:14px;color:var(--text);white-space:nowrap;overflow:hidden;text-overflow:ellipsis;max-width:280px}
.banner-title-cell .bt-sub{font-size:12px;color:var(--text3);margin-top:4px;display:flex;align-items:center;gap:8px;flex-wrap:wrap}
.banner-tag{display:inline-block;padding:3px 10px;border-radius:6px;font-size:12px;line-height:1.5;white-space:nowrap;font-weight:500}
.banner-action-btn{padding:6px 14px;border-radius:6px;font-size:13px;cursor:pointer;height:30px;display:inline-flex;align-items:center;justify-content:center;transition:all .15s;border:1px solid transparent;font-weight:500;white-space:nowrap;line-height:1}
.banner-action-btn:hover{transform:translateY(-1px)}
.banner-status-show{background:#e6f4ea;color:#389e0d;border:1px solid #b7eb8f}
.banner-status-hide{background:#f5f5f5;color:#8c8c8c;border:1px solid #d9d9d9}
.banner-btn-edit{background:var(--bg);color:var(--text2);border:1px solid var(--border)}
.banner-btn-edit:hover{background:var(--primary-light);color:var(--primary);border-color:var(--primary)}
.banner-btn-delete{background:#fff1f0;color:#ff4d4f;border:1px solid #ffa39e}
.banner-btn-delete:hover{background:#ff4d4f;color:#fff}
.banner-sort-input{width:60px;padding:5px 8px;border:1px solid var(--border);border-radius:6px;text-align:center;font-size:13px;height:32px;box-sizing:border-box;transition:border-color .2s}
.banner-sort-input:focus{border-color:var(--primary);outline:none}

/* ===== 楼盘列表表格样式 ===== */
#page-loupan table td{vertical-align:middle}
#page-loupan table td:nth-child(4),
#page-loupan table td:nth-child(5),
#page-loupan table td:nth-child(6),
#page-loupan table td:nth-child(7),
#page-loupan table td:nth-child(8),
#page-loupan table td:nth-child(9),
#page-loupan table td:nth-child(10){text-align:center;font-size:13px}
#page-loupan table td:nth-child(9){font-size:12px;color:var(--text2)}
.lp-cover{width:60px;height:45px;border-radius:6px;overflow:hidden;background:#f5f5f5;display:flex;align-items:center;justify-content:center}
.lp-cover img{width:100%;height:100%;object-fit:cover}
.lp-title{font-weight:500;font-size:13px;margin-bottom:3px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.lp-title-link{color:var(--text);text-decoration:none;display:inline-flex;align-items:center;gap:4px;max-width:100%;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.lp-title-link:hover{color:var(--primary);text-decoration:underline}
.lp-title-link svg{flex:none}
.lp-addr{font-size:11px;color:var(--text3);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.lp-tags{margin-top:2px}
.lp-tag{display:inline-block;font-size:10px;padding:1px 5px;border-radius:3px;margin-right:3px}
.lp-tag-hot{background:#fff1f0;color:#ff4d4f}
.lp-tag-tuan{background:#fff7e6;color:#faad14}
.lp-price{color:var(--danger);font-weight:600;font-size:13px}
.lp-sub-info{color:var(--text3)}
.lp-sale-badge{padding:2px 8px;border-radius:10px;font-size:11px}
.lp-check-btn{padding:2px 8px!important;font-size:11px!important;height:24px!important;min-width:30px}
.lp-check-active{background:#52c41a!important;color:#fff!important;border-color:#52c41a!important}
.lp-check-top{background:#ff4d4f!important;color:#fff!important;border-color:#ff4d4f!important}
.lp-weight-input{width:50px;padding:3px 5px;border:1px solid var(--border);border-radius:4px;text-align:center;font-size:12px}
.lp-actions{display:flex;gap:4px;flex-wrap:wrap}

/* ===== 图片裁剪器样式 ===== */
.crop-hint{display:flex;align-items:center;gap:6px;font-size:12px;color:var(--text3);background:var(--bg);padding:8px 12px;border-radius:8px}
.crop-hint strong{color:var(--primary)}
.crop-container{background:#1a1a1a;border-radius:10px;overflow:hidden;position:relative;width:100%;height:480px;touch-action:none}
.crop-container img#cropImage{position:absolute;left:0;top:0;margin:0;padding:0;border:none;max-width:none!important;max-height:none!important;user-select:none;-webkit-user-drag:none;pointer-events:none;display:block}
.crop-overlay{position:absolute;background:rgba(0,0,0,.6);z-index:1;pointer-events:none}
.crop-box{position:absolute;border:2px solid #fff;z-index:2;cursor:move;box-sizing:border-box;pointer-events:auto}
.crop-grid-h,.crop-grid-v{position:absolute;pointer-events:none}
.crop-grid-h{left:0;right:0;top:0;height:100%;background:repeating-linear-gradient(transparent 0,transparent 33.33%,rgba(255,255,255,.4) 33.33%,rgba(255,255,255,.4) calc(33.33% + 1px),transparent calc(33.33% + 1px),transparent 66.66%,rgba(255,255,255,.4) 66.66%,rgba(255,255,255,.4) calc(66.66% + 1px))}
.crop-grid-v{top:0;bottom:0;left:0;width:100%;background:repeating-linear-gradient(90deg,transparent 0,transparent 33.33%,rgba(255,255,255,.4) 33.33%,rgba(255,255,255,.4) calc(33.33% + 1px),transparent calc(33.33% + 1px),transparent 66.66%,rgba(255,255,255,.4) 66.66%,rgba(255,255,255,.4) calc(66.66% + 1px))}
.crop-corner{position:absolute;width:16px;height:16px;border:3px solid #fff;z-index:3;pointer-events:none}
.crop-corner-tl{top:-2px;left:-2px;border-right:none;border-bottom:none}
.crop-corner-tr{top:-2px;right:-2px;border-left:none;border-bottom:none}
.crop-corner-bl{bottom:-2px;left:-2px;border-right:none;border-top:none}
.crop-corner-br{bottom:-2px;right:-2px;border-left:none;border-top:none}
.crop-controls{display:flex;align-items:center;gap:12px}
.crop-zoom{display:flex;align-items:center;gap:8px;background:var(--bg);padding:6px 12px;border-radius:8px}
.crop-zoom-btn{width:32px;height:32px;border-radius:6px;border:1px solid var(--border);background:#fff;cursor:pointer;display:flex;align-items:center;justify-content:center;color:var(--text2);transition:all .15s;flex-shrink:0}
.crop-zoom-btn:hover{background:var(--primary-light);color:var(--primary);border-color:var(--primary)}
.crop-zoom input[type=range]{width:180px;accent-color:var(--primary);cursor:pointer}
.crop-info{font-size:12px;color:var(--text3);font-variant-numeric:tabular-nums;background:var(--bg);padding:6px 12px;border-radius:8px}

/* ===== 楼盘编辑器样式 ===== */
#loupanEditorModal .le-tabs{display:flex;gap:0;border-bottom:2px solid var(--border);margin-bottom:0;background:#fafbfc;border-radius:10px 10px 0 0;overflow-x:auto}
#loupanEditorModal .le-tab{padding:12px 18px;font-size:13px;font-weight:500;color:var(--text2);cursor:pointer;border-bottom:2px solid transparent;margin-bottom:-2px;white-space:nowrap;transition:all .15s;background:none;border-top:none;border-left:none;border-right:none;font-family:inherit}
#loupanEditorModal .le-tab:hover{color:var(--primary);background:var(--primary-light)}
#loupanEditorModal .le-tab.active{color:var(--primary);border-bottom-color:var(--primary);background:#fff}
#loupanEditorModal .le-tab-content{display:none;padding:20px 0;max-height:60vh;overflow-y:auto}
#loupanEditorModal .le-tab-content.active{display:block}
#loupanEditorModal .form-group{margin-bottom:14px}
#loupanEditorModal .form-group label{display:block;font-size:12px;font-weight:600;color:var(--text2);margin-bottom:5px}
#loupanEditorModal .form-group label .required{color:var(--danger);margin-left:2px}
#loupanEditorModal .form-group input[type=text],
#loupanEditorModal .form-group input[type=number],
#loupanEditorModal .form-group input[type=date],
#loupanEditorModal .form-group input[type=tel],
#loupanEditorModal .form-group input[type=url],
#loupanEditorModal .form-group select,
#loupanEditorModal .form-group textarea{width:100%;padding:9px 12px;border:1px solid var(--border);border-radius:8px;font-size:13px;font-family:inherit;outline:none;box-sizing:border-box;background:#fff;transition:border-color .2s}
#loupanEditorModal .form-group input:focus,
#loupanEditorModal .form-group select:focus,
#loupanEditorModal .form-group textarea:focus{border-color:var(--primary)}
#loupanEditorModal .form-group textarea{min-height:80px;resize:vertical;line-height:1.6}
#loupanEditorModal .form-group .hint{font-size:11px;color:var(--text3);margin-top:4px}
#loupanEditorModal .le-row{display:flex;gap:12px}
#loupanEditorModal .le-row .form-group{flex:1;min-width:0}
#loupanEditorModal .le-row-3{display:grid;grid-template-columns:repeat(3,1fr);gap:12px}
#loupanEditorModal .le-row-4{display:grid;grid-template-columns:repeat(4,1fr);gap:12px}
#loupanEditorModal .le-section{margin-bottom:8px}
#loupanEditorModal .le-section-title{font-size:13px;font-weight:700;color:var(--text);border-top:1px solid var(--border);padding-top:16px;margin:16px 0 14px;display:flex;align-items:center;gap:6px}
#loupanEditorModal .le-section-title:first-child{border-top:none;padding-top:0;margin-top:0}
#loupanEditorModal .le-switch-group{display:flex;gap:16px;flex-wrap:wrap}
#loupanEditorModal .le-switch{display:flex;align-items:center;gap:6px;font-size:13px;color:var(--text2);cursor:pointer}
#loupanEditorModal .le-switch input[type=checkbox]{width:16px;height:16px;accent-color:var(--primary);cursor:pointer}
/* 房屋现状分段选择器 */
#loupanEditorModal .le-seg-group{display:flex;gap:8px;flex-wrap:wrap}
#loupanEditorModal .le-seg{padding:7px 18px;height:34px;border-radius:8px;border:1px solid var(--border);background:var(--white);color:var(--text2);font-size:13px;font-family:inherit;cursor:pointer;transition:all .18s;line-height:1}
#loupanEditorModal .le-seg:hover{border-color:var(--primary);color:var(--primary)}
#loupanEditorModal .le-seg.active{color:#fff;border-color:transparent;box-shadow:0 2px 6px rgba(0,0,0,.12)}
#loupanEditorModal .le-seg.active[data-val="0"]{background:#8c8c8c}
#loupanEditorModal .le-seg.active.le-seg-xian{background:#389e0d}
#loupanEditorModal .le-seg.active.le-seg-qi{background:#d46b08}
#loupanEditorModal .le-seg.active.le-seg-zhun{background:#0958d9}
/* 列表房屋现状标签 */
.lp-tag-existing{font-weight:500;padding:1px 6px;line-height:1.5;border-radius:4px}
.lp-tag-existing.ex-xian{background:#f6ffed;color:#389e0d;border:1px solid #b7eb8f}
.lp-tag-existing.ex-qi{background:#fff7e6;color:#d46b08;border:1px solid #ffd591}
.lp-tag-existing.ex-zhun{background:#e6f4ff;color:#0958d9;border:1px solid #91caff}
/* 预约看房：新报名行（未查看）/ 已处理行 */
#page-visitors .bk-row-new{background:#fff7f2}
#page-visitors .bk-row-new:hover>td{background:#fff1e8 !important}
#page-visitors .bk-row-new>td:first-child{box-shadow:inset 3px 0 0 #fa541c}
#page-visitors .bk-row-done{opacity:.55}
/* 已读淡出：高亮在约2秒后平滑消失 */
#page-visitors .bk-row-new>td,#page-visitors .bk-row-new{transition:background .5s ease,box-shadow .5s ease}
#page-visitors .bk-row-new.bk-viewed{background:transparent}
#page-visitors .bk-row-new.bk-viewed>td:first-child{box-shadow:none}
.bk-new-flag{display:inline-block;background:#fa541c;color:#fff;font-size:10px;line-height:1;padding:3px 7px;border-radius:9px;font-weight:500;white-space:nowrap;transition:opacity .5s ease}
.bk-new-dot{display:inline-block;width:7px;height:7px;border-radius:50%;background:#fa541c;margin-right:5px;vertical-align:middle;box-shadow:0 0 0 3px rgba(250,84,28,.15);transition:opacity .5s ease}
.bk-viewed .bk-new-flag,.bk-viewed .bk-new-dot{opacity:0}
#loupanEditorModal .le-upload{display:flex;gap:12px;align-items:flex-start}
#loupanEditorModal .le-upload-preview{width:160px;height:100px;background:var(--bg);border:1.5px dashed var(--border);border-radius:8px;display:flex;align-items:center;justify-content:center;color:var(--text3);font-size:12px;overflow:hidden;flex-shrink:0;cursor:pointer;transition:all .2s}
#loupanEditorModal .le-upload-preview:hover{border-color:var(--primary);background:var(--primary-light)}
#loupanEditorModal .le-upload-preview img{width:100%;height:100%;object-fit:cover}
#loupanEditorModal .le-upload-info{flex:1;min-width:0}
#loupanEditorModal .le-upload-info .btn-upload{padding:8px 16px;height:36px;border-radius:8px;background:var(--white);color:var(--text2);border:1px solid var(--border);font-size:13px;cursor:pointer;display:inline-flex;align-items:center;gap:5px;transition:all .15s;font-family:inherit}
#loupanEditorModal .le-upload-info .btn-upload:hover{background:var(--primary-light);color:var(--primary);border-color:var(--primary)}
#loupanEditorModal .le-thumb-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(120px,1fr));gap:10px;margin-top:10px}
#loupanEditorModal .le-thumb-item{position:relative;border-radius:8px;overflow:hidden;background:var(--bg);aspect-ratio:4/3;border:1px solid var(--border)}
#loupanEditorModal .le-thumb-item img{width:100%;height:100%;object-fit:cover}
#loupanEditorModal .le-thumb-item .remove{position:absolute;top:4px;right:4px;width:22px;height:22px;background:rgba(0,0,0,.6);color:#fff;border-radius:50%;display:flex;align-items:center;justify-content:center;cursor:pointer;font-size:12px;border:none;line-height:1}
#loupanEditorModal .le-thumb-item .remove:hover{background:var(--danger)}
#loupanEditorModal .le-thumb-add{border:2px dashed var(--border);border-radius:8px;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:4px;color:var(--text3);cursor:pointer;aspect-ratio:4/3;transition:all .2s;font-size:12px;background:var(--bg)}
#loupanEditorModal .le-thumb-add:hover{border-color:var(--primary);color:var(--primary);background:var(--primary-light)}
#loupanEditorModal .le-thumb-add svg{width:24px;height:24px}
#loupanEditorModal .le-sub-list{display:flex;flex-direction:column;gap:8px}
#loupanEditorModal .le-sub-item{background:var(--bg);border-radius:10px;padding:12px;border:1px solid var(--border);position:relative}
#loupanEditorModal .le-sub-item-header{display:flex;align-items:center;justify-content:space-between;margin-bottom:10px}
#loupanEditorModal .le-sub-item-title{font-size:13px;font-weight:600;color:var(--text)}
#loupanEditorModal .le-sub-item-actions{display:flex;gap:4px}
#loupanEditorModal .le-sub-item-actions button{width:28px;height:28px;border-radius:6px;border:none;background:var(--white);cursor:pointer;display:flex;align-items:center;justify-content:center;color:var(--text3);transition:all .15s;font-size:14px}
#loupanEditorModal .le-sub-item-actions button:hover{background:var(--danger);color:#fff}
#loupanEditorModal .le-add-btn{width:100%;padding:10px;border:2px dashed var(--border);border-radius:10px;background:transparent;cursor:pointer;display:flex;align-items:center;justify-content:center;gap:6px;color:var(--text2);font-size:13px;transition:all .15s;font-family:inherit;margin-top:8px}
#loupanEditorModal .le-add-btn:hover{border-color:var(--primary);color:var(--primary);background:var(--primary-light)}
#loupanEditorModal .le-agent-list{display:flex;flex-wrap:wrap;gap:8px;margin-top:6px}
#loupanEditorModal .le-agent-chip{display:flex;align-items:center;gap:6px;padding:4px 10px 4px 4px;background:var(--primary-light);border-radius:20px;font-size:12px}
#loupanEditorModal .le-agent-chip img{width:24px;height:24px;border-radius:50%;object-fit:cover;background:#ddd}
#loupanEditorModal .le-agent-chip .remove{width:18px;height:18px;border-radius:50%;background:rgba(0,0,0,.1);border:none;cursor:pointer;display:flex;align-items:center;justify-content:center;font-size:12px;color:var(--text2);line-height:1;padding:0}
#loupanEditorModal .le-agent-chip .remove:hover{background:var(--danger);color:#fff}
#loupanEditorModal .le-search-group{position:relative;display:flex;width:100%;max-width:480px}
#loupanEditorModal .le-search-group input{width:100%;padding-right:72px}
#loupanEditorModal .le-search-group button{position:absolute;right:4px;top:4px;bottom:4px;padding:0 16px;border:none;border-radius:6px;background:var(--primary);color:#fff;font-size:13px;cursor:pointer;font-family:inherit;transition:background .15s}
#loupanEditorModal .le-search-group button:hover{background:var(--primary-dark,#2563eb)}
#loupanEditorModal .shapan-editor-area{position:relative;background:#f5f5f5;border-radius:8px;overflow:hidden;border:1px solid var(--border)}
#loupanEditorModal .shapan-editor-area img{width:100%;display:block}
#loupanEditorModal .shapan-editor-canvas{position:absolute;inset:0;cursor:default}
#loupanEditorModal .modal.large{max-width:900px}
@media(max-width:900px){
  #loupanEditorModal .le-row{flex-direction:column;gap:0}
  #loupanEditorModal .le-row-3,#loupanEditorModal .le-row-4{grid-template-columns:1fr}
  #loupanEditorModal .le-tabs{border-radius:0}
}
#leApartmentModal .le-row-2{display:grid;grid-template-columns:repeat(2,1fr);gap:12px}
#leApartmentModal .le-row-3{display:grid;grid-template-columns:repeat(3,1fr);gap:12px}
#leApartmentModal .le-row-4{display:grid;grid-template-columns:repeat(4,1fr);gap:12px}
#leApartmentModal .le-row-5{display:grid;grid-template-columns:repeat(5,1fr);gap:12px}
#leApartmentModal .form-group input,#leApartmentModal .form-group select,#leApartmentModal .form-group textarea{width:100%;padding:9px 12px;border:1px solid var(--border);border-radius:8px;font-size:14px;font-family:inherit;outline:none;box-sizing:border-box;background:#fff;transition:border-color .2s;height:40px}
#leApartmentModal .form-group input:focus,#leApartmentModal .form-group select:focus{border-color:var(--primary)}
#leApartmentModal .form-group textarea{height:auto;min-height:60px;resize:vertical;line-height:1.6}
#leApartmentModal .le-input-group{display:flex;gap:0;width:100%}
#leApartmentModal .le-input-group input{border-radius:8px 0 0 8px;flex:1 1 60px;min-width:60px}
#leApartmentModal .le-input-group select{border-radius:0 8px 8px 0;border-left:none;width:auto;flex:0 0 auto;padding:0 4px;background:#f7f8fa;font-size:13px}
#leApartmentModal .apt-dropzone{display:flex;align-items:center;justify-content:center;gap:6px;width:150px;height:112px;border:2px dashed #1677ff;border-radius:10px;background:#e6f4ff;color:#1677ff;font-size:13px;font-weight:600;cursor:pointer;transition:all .2s;overflow:hidden}
#leApartmentModal .apt-dropzone:hover{background:#d6e8ff;border-color:#0958d9}
#leApartmentModal .apt-dropzone .plus{font-size:22px;line-height:1}
#leApartmentModal .apt-dropzone:has(img){border-style:solid;border-color:var(--border);background:#fff;padding:0}
#leApartmentModal .apt-dropzone img{width:100%;height:100%;object-fit:cover;display:block}
#leApartmentModal .apt-thumb{width:110px;border:1px solid var(--border);border-radius:8px;overflow:hidden;background:#fff;box-shadow:0 1px 3px rgba(0,0,0,.08)}
#leApartmentModal .apt-thumb img{width:110px;height:82px;object-fit:cover;display:block}
#leApartmentModal .apt-thumb .ops{display:flex;gap:4px;padding:4px}
#leApartmentModal .apt-add-tile{display:flex;flex-direction:column;align-items:center;justify-content:center;gap:2px;width:110px;height:110px;border:2px dashed #c9d4e0;border-radius:8px;color:#8c97a8;font-size:12px;cursor:pointer;background:#fafbfc;transition:all .2s}
#leApartmentModal .apt-add-tile:hover{border-color:#1677ff;color:#1677ff;background:#e6f4ff}
#leApartmentModal .apt-add-tile .plus{font-size:20px;line-height:1}
#leApartmentModal .apt-thumb{cursor:grab}
#leApartmentModal .apt-thumb:active{cursor:grabbing}
#leApartmentModal #leAptPicsGrid .drag-over{outline:2px solid var(--primary);outline-offset:2px}
@media(max-width:640px){
  #leApartmentModal .le-row-2,
  #leApartmentModal .le-row-3,
  #leApartmentModal .le-row-4,
  #leApartmentModal .le-row-5{grid-template-columns:1fr 1fr}
}
.review-stats-row{display:grid;grid-template-columns:repeat(5,1fr);gap:12px;margin-bottom:16px}
.review-stat-card{background:#fff;border-radius:12px;padding:16px;box-shadow:0 1px 4px rgba(0,0,0,.06)}
.review-stat-card .label{font-size:12px;color:var(--text3);margin-bottom:6px}
.review-stat-card .num{font-size:22px;font-weight:700;color:var(--text)}
.review-stat-card .num.danger{color:#ff4d4f}
.review-stat-card .num.warn{color:#fa8c16}
.review-stat-card .num.success{color:#52c41a}
.review-filter-bar{display:flex;align-items:center;gap:10px;margin-bottom:12px;flex-wrap:wrap}
.review-filter-bar .filter-tag{padding:6px 14px;border-radius:20px;background:#fff;border:1px solid var(--border);font-size:13px;cursor:pointer;transition:.15s;color:var(--text2)}
.review-filter-bar .filter-tag:hover{border-color:var(--primary);color:var(--primary)}
.review-filter-bar .filter-tag.active{background:var(--primary);color:#fff;border-color:var(--primary)}
.review-filter-bar .filter-tag .count{margin-left:4px;font-size:11px;opacity:.8}
.review-filter-bar .review-search{flex:1;max-width:280px;height:36px;border:1px solid var(--border);border-radius:8px;padding:0 12px;font-size:13px;outline:none;margin-left:auto}
.review-list{display:flex;flex-direction:column;gap:12px}
.review-card{background:#fff;border-radius:12px;padding:18px;box-shadow:0 1px 4px rgba(0,0,0,.05)}
.review-card-top{display:flex;align-items:center;gap:10px;margin-bottom:10px}
.review-card-top .avatar{width:40px;height:40px;border-radius:50%;background:linear-gradient(135deg,#667eea,#764ba2);color:#fff;display:flex;align-items:center;justify-content:center;font-size:16px;font-weight:600;flex-shrink:0}
.review-card-top .avatar img{width:100%;height:100%;border-radius:50%;object-fit:cover}
.review-card-top .info{flex:1;min-width:0}
.review-card-top .username{font-size:14px;font-weight:600;color:var(--text);display:flex;align-items:center;gap:6px}
.review-card-top .certified-badge{font-size:10px;background:#e6fff2;color:#00b578;padding:1px 6px;border-radius:4px;font-weight:400}
.review-card-top .meta{font-size:12px;color:var(--text3);margin-top:2px}
.review-card-top .score-stars{color:#fa8c16;font-size:13px;letter-spacing:2px}
.review-card-scores{display:flex;gap:16px;margin-bottom:8px;flex-wrap:wrap}
.review-card-scores .score-item{font-size:12px;color:var(--text2);display:flex;align-items:center;gap:4px}
.review-card-scores .score-item .val{color:#fa8c16;font-weight:600}
.review-card-title{font-size:14px;font-weight:600;margin-bottom:6px}
.review-card-content{font-size:14px;color:var(--text1);line-height:1.7;margin-bottom:10px;word-break:break-all}
.review-card-media{display:flex;gap:8px;flex-wrap:wrap;margin-bottom:10px}
.review-card-media .img-thumb{width:96px;height:96px;border-radius:8px;object-fit:cover;cursor:pointer;background:#f5f5f5}
.review-card-media .video-box{width:160px;height:100px;border-radius:8px;background:#000;position:relative;cursor:pointer;overflow:hidden;display:flex;align-items:center;justify-content:center}
.review-card-media .video-box img{width:100%;height:100%;object-fit:cover;opacity:.8}
.review-card-media .video-box .play-btn{position:absolute;width:36px;height:36px;border-radius:50%;background:rgba(0,0,0,.5);color:#fff;display:flex;align-items:center;justify-content:center;font-size:14px}
.review-card-media .video-box .dur{position:absolute;right:6px;bottom:6px;background:rgba(0,0,0,.6);color:#fff;font-size:11px;padding:1px 6px;border-radius:3px}
.review-card-tags{display:flex;gap:6px;margin-bottom:10px;flex-wrap:wrap}
.review-card-tags .tag{font-size:11px;padding:2px 8px;border-radius:4px;background:#f0f5ff;color:#2f54eb}
.review-card-tags .tag.hot{background:#fff7e6;color:#fa8c16}
.review-card-tags .tag.good{background:#fff1f0;color:#f5222d}
.review-card-tags .tag.anon{background:#f5f5f5;color:var(--text3)}
.review-card-bottom{display:flex;align-items:center;gap:8px;padding-top:10px;border-top:1px solid #f5f5f5;flex-wrap:wrap}
.review-card-bottom .btn-sm{padding:5px 12px;font-size:12px;border-radius:6px;border:1px solid var(--border);background:#fff;color:var(--text2);cursor:pointer;font-family:inherit;transition:.15s}
.review-card-bottom .btn-sm:hover{border-color:var(--primary);color:var(--primary)}
.review-card-bottom .btn-sm.danger{color:#ff4d4f;border-color:#ffa39e}
.review-card-bottom .btn-sm.danger:hover{background:#fff1f0;color:#ff4d4f;border-color:#ff4d4f}
.review-card-bottom .btn-sm.success{color:#52c41a;border-color:#b7eb8f}
.review-card-bottom .btn-sm.success:hover{background:#f6ffed;color:#52c41a;border-color:#52c41a}
.review-card-bottom .meta-info{font-size:12px;color:var(--text3);margin-right:auto;display:flex;gap:12px}
.review-reply-section{margin-top:10px;padding-top:10px;border-top:1px dashed #eee}
.review-reply-item{padding:8px 0;font-size:13px;color:var(--text2);line-height:1.6}
.review-reply-item .reply-name{color:var(--primary);font-weight:500}
.review-reply-item .reply-meta{font-size:11px;color:var(--text3);margin-top:2px}
.review-reply-form{display:flex;gap:8px;margin-top:8px}
.review-reply-form input{flex:1;height:34px;border:1px solid var(--border);border-radius:6px;padding:0 10px;font-size:13px;outline:none;font-family:inherit}
.review-reply-form input:focus{border-color:var(--primary)}
.review-reply-form button{padding:0 16px;background:var(--primary);color:#fff;border:none;border-radius:6px;font-size:13px;cursor:pointer;font-family:inherit}
.review-card .reject-reason{background:#fff7e6;border:1px solid #ffd591;color:#d46b08;padding:8px 12px;border-radius:8px;font-size:12px;margin-top:8px}
.review-empty{text-align:center;padding:60px 20px;color:var(--text3);font-size:14px}
.review-pagination{display:flex;align-items:center;justify-content:center;gap:8px;margin-top:20px}
.review-pagination button{min-width:36px;height:34px;border:1px solid var(--border);background:#fff;border-radius:6px;font-size:13px;cursor:pointer;font-family:inherit;color:var(--text2)}
.review-pagination button.active{background:var(--primary);color:#fff;border-color:var(--primary)}
.review-pagination button:disabled{opacity:.5;cursor:not-allowed}
.review-video-player{width:100%;max-width:480px;border-radius:8px}
@media(max-width:768px){
  .review-stats-row{grid-template-columns:repeat(2,1fr)}
  .review-filter-bar .review-search{max-width:100%;margin-left:0;width:100%}
  .review-card-media .img-thumb{width:72px;height:72px}
}

/* ===== 周边配套管理样式 ===== */
.poi-tabs .filter-tag{padding:8px 16px;border-radius:8px 8px 0 0;background:transparent;border:none;border-bottom:2px solid transparent;font-size:13px;cursor:pointer;transition:.15s;color:var(--text2);font-family:inherit;white-space:nowrap}
.poi-tabs .filter-tag:hover{color:var(--primary);background:var(--primary-light)}
.poi-tabs .filter-tag.active{color:var(--primary);border-bottom-color:var(--primary);background:#fff;font-weight:500}
#page-poi .data-table-wrap{background:#fff;border-radius:10px;border:1px solid var(--border);overflow-x:auto;-webkit-overflow-scrolling:touch;overflow-y:hidden}
#page-poi .data-table{width:100%;border-collapse:collapse;font-size:13px}
#page-poi .data-table th{background:#fafbfc;padding:12px 14px;text-align:left;font-weight:500;color:var(--text2);font-size:12px;border-bottom:1px solid var(--border);white-space:nowrap}
#page-poi .data-table td{padding:10px 14px;border-bottom:1px solid var(--bg);vertical-align:middle}
#page-poi .data-table tr:hover td{background:#fafbff}
#page-poi .pagination{display:flex;align-items:center;justify-content:center;gap:8px}
#page-poi .pagination button{min-width:36px;height:34px;border:1px solid var(--border);background:#fff;border-radius:6px;font-size:13px;cursor:pointer;font-family:inherit;color:var(--text2);padding:0 10px}
#page-poi .pagination button.active{background:var(--primary);color:#fff;border-color:var(--primary)}
#page-poi .pagination button:disabled{opacity:.5;cursor:not-allowed}
#poiEditorModal .form-group{margin-bottom:14px}
#poiEditorModal .form-group label{display:block;font-size:13px;color:var(--text2);margin-bottom:6px;font-weight:500}
#poiEditorModal .form-group input[type=text],
#poiEditorModal .form-group input[type=number],
#poiEditorModal .form-group select,
#poiEditorModal .form-group textarea{width:100%;padding:8px 12px;border:1px solid var(--border);border-radius:8px;font-size:13px;font-family:inherit;outline:none;box-sizing:border-box;background:#fff;transition:border-color .15s}
#poiEditorModal .form-group input:focus,
#poiEditorModal .form-group select:focus,
#poiEditorModal .form-group textarea:focus{border-color:var(--primary)}
#poiEditorModal .form-group textarea{resize:vertical;min-height:60px}

/* ====== 消息气泡弹窗 ====== */
@keyframes bubbleSlideIn {
  from { opacity: 0; transform: translateX(100px) translateY(20px); }
  to { opacity: 1; transform: translateX(0) translateY(0); }
}
@keyframes bubbleSlideOut {
  from { opacity: 1; transform: translateX(0) translateY(0); }
  to { opacity: 0; transform: translateX(100px) translateY(20px); }
}
.msg-bubble-notification{position:fixed;bottom:20px;right:20px;background:#fff;border-radius:16px;box-shadow:0 8px 32px rgba(0,0,0,0.12),0 2px 8px rgba(0,0,0,0.08);padding:14px;max-width:320px;min-width:260px;z-index:99999;cursor:pointer;animation:bubbleSlideIn 0.35s cubic-bezier(0.34,1.56,0.64,1);transition:transform 0.15s ease, box-shadow 0.15s ease;border:1px solid rgba(0,0,0,0.04)}
.msg-bubble-notification:hover{transform:translateY(-2px);box-shadow:0 12px 40px rgba(0,0,0,0.15),0 4px 12px rgba(0,0,0,0.1)}
.msg-bubble-notification:active{transform:translateY(0)}
.msg-bubble-notification.closing{animation:bubbleSlideOut 0.25s ease-in forwards}
.msg-bubble-header{display:flex;align-items:center;margin-bottom:10px}
.msg-bubble-header .avatar{margin-right:10px;flex-shrink:0}
.msg-bubble-info{flex:1;min-width:0}
.msg-bubble-name{font-weight:600;font-size:14px;color:#1a1a1a;line-height:1.3}
.msg-bubble-time{font-size:11px;color:#999;margin-top:2px}
.msg-bubble-content{font-size:13px;color:#444;line-height:1.5;word-break:break-word;display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden}
.msg-bubble-close{position:absolute;top:8px;right:8px;width:24px;height:24px;border-radius:50%;display:flex;align-items:center;justify-content:center;color:#999;cursor:pointer;transition:background 0.15s,color 0.15s;font-size:16px;line-height:1}
.msg-bubble-close:hover{background:#f5f5f5;color:#666}
@media (max-width:640px){
  .msg-bubble-notification{left:12px;right:12px;bottom:12px;max-width:none;min-width:0}
}
/* 好友申请列表 */
.freq-item{display:flex;align-items:center;gap:12px;padding:12px 16px;border-bottom:1px solid var(--border);transition:background .15s}
.freq-item:hover{background:var(--bg)}
.freq-avatar{width:42px;height:42px;border-radius:50%;flex-shrink:0;display:flex;align-items:center;justify-content:center;color:#fff;font-weight:600;font-size:16px;overflow:hidden}
.freq-avatar img{width:100%;height:100%;object-fit:cover}
.freq-info{flex:1;min-width:0}
.freq-name{font-size:14px;font-weight:500;color:var(--text1)}
.freq-actions{display:flex;gap:8px;flex-shrink:0}
.freq-accept{padding:5px 16px;border-radius:6px;border:none;background:var(--primary);color:#fff;font-size:13px;cursor:pointer;transition:opacity .15s}
.freq-accept:hover{opacity:.85}
.freq-reject{padding:5px 16px;border-radius:6px;border:1px solid var(--border);background:var(--white);color:var(--text2);font-size:13px;cursor:pointer;transition:all .15s}
.freq-reject:hover{border-color:var(--danger);color:var(--danger)}
.friend-badge{display:inline-flex;align-items:center;gap:2px;background:linear-gradient(135deg,#667eea,#764ba2);color:#fff;font-size:10px;padding:1px 6px;border-radius:8px;font-weight:500}

/* ========== 工作台待办卡片 ========== */
.todo-cards{display:grid;grid-template-columns:repeat(4,1fr);gap:12px}
.todo-card{background:var(--white);border-radius:14px;padding:16px;display:flex;align-items:center;gap:14px;cursor:pointer;transition:all .2s;box-shadow:0 1px 3px rgba(0,0,0,.05);position:relative;overflow:hidden}
.todo-card:hover{transform:translateY(-2px);box-shadow:0 6px 20px rgba(0,0,0,.08)}
.todo-card .todo-icon{width:44px;height:44px;border-radius:12px;display:flex;align-items:center;justify-content:center;flex-shrink:0}
.todo-card.todo-msg .todo-icon{background:#e6f4ff;color:#1677ff}
.todo-card.todo-hot .todo-icon{background:#fff7e6;color:#fa8c16}
.todo-card.todo-lead .todo-icon{background:#f6ffed;color:#52c41a}
.todo-card.todo-online .todo-icon{background:#fff1f0;color:#f5222d}
.todo-card .todo-num{font-size:26px;font-weight:700;color:var(--text1);line-height:1}
.todo-card .todo-label{font-size:12px;color:var(--text3);margin-top:4px}
.todo-card .todo-dot{position:absolute;top:12px;right:12px;width:10px;height:10px;border-radius:50%;background:#52c41a;animation:pulse-dot 2s ease-in-out infinite}
@keyframes pulse-dot{0%,100%{opacity:1;transform:scale(1)}50%{opacity:.5;transform:scale(1.3)}}

/* ========== 用户分析 - 访客卡片增强 ========== */
.visitor-card .avatar-wrap{position:relative;flex-shrink:0}
.visitor-card .online-indicator{position:absolute;bottom:1px;right:1px;width:12px;height:12px;border-radius:50%;background:#52c41a;border:2px solid var(--white);z-index:1}
.visitor-badge.phone{background:#f6ffed;color:#389e0d;border:1px solid #b7eb8f}
.analytics-filter{display:flex;gap:8px;align-items:center;flex-wrap:wrap}
.analytics-filter input:focus,.analytics-filter select:focus{border-color:var(--primary)!important;outline:none}

/* ========== 分页控件 ========== */
.pagination{display:flex;align-items:center;gap:4px;justify-content:center;flex-wrap:wrap}
.page-btn{min-width:34px;height:34px;padding:0 10px;border:1px solid var(--border);border-radius:8px;background:var(--white);color:var(--text2);font-size:13px;cursor:pointer;transition:all .15s;display:inline-flex;align-items:center;justify-content:center}
.page-btn:hover:not(:disabled){border-color:var(--primary);color:var(--primary)}
.page-btn.active{background:var(--primary);color:#fff;border-color:var(--primary)}
.page-btn:disabled{opacity:.5;cursor:not-allowed}
.page-dots{color:var(--text3);padding:0 4px}

/* ========== 访客详情弹窗增强 ========== */
.visitor-detail-header{display:flex;align-items:flex-start;gap:14px;padding:20px 20px 16px;border-bottom:1px solid var(--border)}
.vd-name{font-size:16px;font-weight:600;color:var(--text1);margin-bottom:4px;display:flex;align-items:center}
.vd-meta{font-size:12px;color:var(--text3);display:flex;align-items:center;gap:4px;flex-wrap:wrap}
.vd-phone-row{display:flex;align-items:center;gap:12px;padding:16px 20px;background:linear-gradient(135deg,#f0f9ff,#e6f7ff);border-bottom:1px solid var(--border);margin:0}
.vd-phone-row.vd-no-phone{background:var(--bg)}
.vd-phone-num{font-size:24px;font-weight:700;color:var(--primary);letter-spacing:1px;font-family:-apple-system,BlinkMacSystemFont,'SF Pro Display',sans-serif}
.vd-phone-row.vd-no-phone .vd-phone-num{font-size:15px;font-weight:500;color:var(--text3)}
.vd-contact-btn{display:inline-flex;align-items:center;gap:6px;padding:8px 20px;border-radius:10px;font-size:14px;font-weight:500;margin-left:auto;white-space:nowrap}
.vd-contact-btn.btn-primary{background:var(--primary)}
.vd-online-dot{display:inline-block;width:10px;height:10px;border-radius:50%;background:#52c41a;margin-left:6px;vertical-align:middle;animation:pulse-dot 2s ease-in-out infinite}
.vd-visit-info{display:flex;gap:16px;margin-top:8px;flex-wrap:wrap}
.vd-visit-item{font-size:12px;color:var(--text3)}
.vd-visit-item .label{color:var(--text3);margin-right:4px}
.vd-visit-item .value{color:var(--text2);font-weight:500}
.vd-note-area{padding:0 20px}
.vd-note-area textarea{width:100%;border:1px solid var(--border);border-radius:10px;padding:10px 12px;font-size:13px;resize:vertical;min-height:70px;font-family:inherit;outline:none;transition:border-color .15s;background:var(--white)}
.vd-note-area textarea:focus{border-color:var(--primary)}
.vd-note-area select{outline:none}
.vd-loupan-list{display:flex;flex-direction:column;gap:0}
.vd-loupan-item{display:flex;align-items:center;gap:10px;padding:10px 20px;border-bottom:1px solid var(--border);text-decoration:none;color:var(--text1);transition:background .15s}
.vd-loupan-item:last-child{border-bottom:none}
.vd-loupan-item:hover{background:var(--bg)}
.vd-loupan-name{flex:1;font-size:13px;font-weight:500;color:var(--text1)}
.vd-loupan-price{font-size:12px;color:#C97B6B;font-weight:600;white-space:nowrap}
.vd-loupan-item svg{color:var(--text3);flex-shrink:0}
.visitor-detail-section h4{font-size:13px;font-weight:600;color:var(--text2);margin:0 0 10px;padding:0 20px;display:flex;align-items:center;gap:6px}
.visitor-detail-section{padding:16px 0}
.visitor-detail-tags{padding:0 20px;margin-bottom:12px}
.vd-stat-row{padding:0 20px;display:grid;grid-template-columns:repeat(4,1fr);gap:8px}
.vd-stat-item{text-align:center;padding:10px 4px;background:var(--bg);border-radius:10px}
.vd-stat-value{font-size:20px;font-weight:700;color:var(--text1)}
.vd-stat-label{font-size:11px;color:var(--text3);margin-top:2px}
.timeline{padding:0 20px}

/* ========== 响应式适配 ========== */
@media (max-width:900px){
  .todo-cards{grid-template-columns:repeat(2,1fr)}
  .analytics-stats{grid-template-columns:repeat(3,1fr)!important}
}
@media (max-width:600px){
  .todo-cards{grid-template-columns:repeat(2,1fr);gap:8px}
  .todo-card{padding:12px;gap:10px}
  .todo-card .todo-num{font-size:20px}
  .todo-card .todo-icon{width:36px;height:36px}
  .analytics-stats{grid-template-columns:repeat(2,1fr)!important;gap:8px}
  .visitor-detail-header{padding:16px}
  .vd-phone-row{flex-direction:column;align-items:flex-start;gap:8px;padding:14px 16px}
  .vd-contact-btn{margin-left:0;width:100%;justify-content:center}
  .vd-phone-num{font-size:20px}
  .vd-stat-row{grid-template-columns:repeat(2,1fr);gap:6px;padding:0 16px}
  .visitor-detail-section h4{padding:0 16px}
  .visitor-detail-tags{padding:0 16px}
  .vd-note-area{padding:0 16px}
  .vd-loupan-item{padding:10px 16px}
  .timeline{padding:0 16px}
}

/* ===== 购房服务单（②后台） ===== */
.sv-row-progress{display:flex;align-items:center;gap:8px}
.sv-row-progress span{font-size:12px;color:var(--text3);white-space:nowrap}
.sv-bar{flex:1;height:6px;background:#eef1ea;border-radius:99px;overflow:hidden;min-width:60px}
.sv-bar i{display:block;height:100%;background:#7c8f6b;border-radius:99px;transition:width .3s}
.sv-picked{display:flex;align-items:center;justify-content:space-between;gap:8px;margin-top:8px;padding:8px 12px;background:#f4f7f0;border:1px solid #dde5d4;border-radius:8px;font-size:13px;color:#4c5b45}
.sv-picked button{border:none;background:none;color:#7c8f6b;font-size:12px;cursor:pointer;padding:2px 4px}
.sv-results{position:absolute;left:0;right:0;top:100%;z-index:20;margin-top:4px;background:#fff;border:1px solid var(--border);border-radius:10px;box-shadow:0 12px 32px rgba(0,0,0,.12);max-height:260px;overflow-y:auto}
.sv-result{display:flex;align-items:center;gap:10px;padding:9px 12px;cursor:pointer}
.sv-result:hover{background:#f6f8f3}
.sv-result img{border-radius:50%}
.sv-result-name{font-size:13px;color:var(--text);font-weight:500}
.sv-result-sub{font-size:12px;color:var(--text3);margin-top:2px}
.sv-result-empty{padding:14px 12px;font-size:12px;color:var(--text3);text-align:center}
.sv-detail-head{padding:20px 22px;border-bottom:1px solid var(--border);background:#fafbf7}
.sv-detail-client{display:flex;align-items:center;gap:12px}
.sv-detail-client img{width:44px!important;height:44px!important}
.sv-detail-client>span{width:44px!important;height:44px!important;font-size:17px!important}
.sv-detail-name{font-size:16px;font-weight:600;color:var(--text);display:flex;align-items:center;gap:8px}
.sv-detail-sub{font-size:12px;color:var(--text3);margin-top:3px}
.sv-detail-meta{display:flex;gap:28px;flex-wrap:wrap;margin-top:14px}
.sv-detail-meta div{font-size:12px;color:var(--text3)}
.sv-detail-meta b{display:block;font-size:13px;color:var(--text);margin-top:3px;font-weight:500}
.sv-detail-progress{display:flex;align-items:center;gap:12px;margin-top:14px}
.sv-detail-progress b{font-size:12px;color:var(--text2);font-weight:500;white-space:nowrap}
.sv-detail-remark{margin-top:12px;padding:9px 12px;background:#fff8e6;border:1px solid #ffe7a8;border-radius:8px;font-size:12px;color:#8a6d1d}
.sv-detail-actions{display:flex;gap:8px;margin-top:14px}
.sv-stages{padding:18px 22px 24px}
.sv-stage{border:1px solid var(--border);border-radius:12px;padding:14px 16px;margin-bottom:12px;background:#fff}
.sv-stage.done{border-color:#c9dfb8;background:#fbfdf8}
.sv-stage.doing{border-color:#a9c8f2;box-shadow:0 0 0 3px rgba(24,102,212,.06)}
.sv-stage.skip{opacity:.62}
.sv-stage-hd{display:flex;align-items:center;justify-content:space-between;gap:10px}
.sv-stage-title{display:flex;align-items:center;gap:8px;font-size:14px;font-weight:600;color:var(--text)}
.sv-stage-title i{font-style:normal;font-size:11px;color:#7c8f6b;background:#eef2e8;border-radius:4px;padding:1px 5px}
.sv-stage-state{background:#f5f5f5;color:var(--text3)}
.sv-stage.done .sv-stage-state{background:#f6ffed;color:#389e0d}
.sv-stage.doing .sv-stage-state{background:#e6f4ff;color:#0958d9}
.sv-stage-form{display:grid;grid-template-columns:repeat(4,1fr);gap:10px;margin-top:12px}
.sv-stage-form label{display:flex;flex-direction:column;gap:4px;font-size:11px;color:var(--text3)}
.sv-stage-form input,.sv-stage-form select{padding:7px 9px;border:1px solid var(--border);border-radius:6px;font-size:12px;font-family:inherit;outline:none;width:100%;box-sizing:border-box}
.sv-stage-form input:focus,.sv-stage-form select:focus{border-color:var(--primary)}
.sv-stage-note{margin-top:10px}
.sv-stage-note input{width:100%;box-sizing:border-box;padding:8px 10px;border:1px solid var(--border);border-radius:6px;font-size:12px;font-family:inherit;outline:none}
.sv-stage-actions{display:flex;gap:8px;align-items:center;margin-top:10px}
.sv-upload-btn{display:inline-flex;align-items:center;padding:7px 14px;border:1px solid var(--border);border-radius:6px;font-size:12px;color:var(--text2);background:var(--white);cursor:pointer}
.sv-upload-btn:hover{border-color:#7c8f6b;color:#5b6b52}
.sv-upload-btn input{display:none}
.sv-files{margin-top:10px;border-top:1px dashed var(--border);padding-top:8px}
.sv-file{display:flex;align-items:center;gap:8px;padding:5px 0;font-size:12px}
.sv-file a{color:#0958d9;text-decoration:none;flex:1;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.sv-file a:hover{text-decoration:underline}
.sv-file-ico{font-size:10px;color:#5b6b52;background:#eef2e8;border-radius:4px;padding:1px 5px;flex-shrink:0}
.sv-file-date{color:var(--text3);font-size:11px;flex-shrink:0}
.sv-file button{border:none;background:none;color:var(--text3);cursor:pointer;font-size:14px;line-height:1;padding:2px 4px}
.sv-file button:hover{color:var(--danger)}
.sv-loose{margin-top:6px;padding:12px 16px;border:1px dashed var(--border);border-radius:10px}
.sv-loose-title{font-size:12px;color:var(--text3);margin-bottom:4px}
@media (max-width:700px){
  .sv-stage-form{grid-template-columns:repeat(2,1fr)}
  .sv-detail-meta{gap:14px}
  .sv-stages{padding:14px}
  .sv-detail-head{padding:16px}
}

/* ========== 房源访问 ========== */
.ls-sub{font-size:12px;color:var(--text3);margin-top:4px}
.ls-kpis .stat-card{padding:18px}
.ls-kpis .stat-value{font-size:26px;letter-spacing:-.5px;font-variant-numeric:tabular-nums}
.ls-foot{font-size:12px;color:var(--text3);margin-top:6px;line-height:1.4}
.ls-foot .up{color:var(--success);font-weight:600}
.ls-foot .down{color:var(--danger);font-weight:600}
.ls-card-head{display:flex;align-items:center;justify-content:space-between;gap:10px}
.ls-seg{display:inline-flex;background:var(--bg);border-radius:8px;padding:3px}
.ls-seg button{border:none;background:none;font-size:12px;color:var(--text2);padding:5px 12px;border-radius:6px;cursor:pointer}
.ls-seg button.active{background:var(--white);color:var(--primary);font-weight:600;box-shadow:0 1px 3px rgba(0,0,0,.08)}
.ls-seg button:focus,.ls-seg button:focus-visible{outline:none}
.ls-muted{font-style:normal;font-size:12px;color:var(--text3);font-weight:400}
.ls-table-card{padding:18px 20px}
.ls-table-wrap{box-shadow:none;margin-top:12px;border:1px solid var(--border)}
.ls-loading{text-align:center;padding:36px;color:var(--text3);font-size:13px}
.ls-trend-empty{align-items:center;justify-content:center}
.ls-trend-empty>div{width:100%;text-align:center;padding:24px 10px;color:var(--text3);font-size:13px}
.ls-empty-box{text-align:center;padding:36px 20px;color:var(--text3);font-size:13px;line-height:1.75}
.ls-house{display:flex;gap:10px;align-items:center;min-width:220px}
.ls-house img,.ls-house .ph{width:56px;height:42px;border-radius:6px;object-fit:cover;background:var(--bg);flex-shrink:0}
.ls-house .t{font-size:13px;font-weight:600;color:var(--text);line-height:1.35;display:-webkit-box;-webkit-line-clamp:1;-webkit-box-orient:vertical;overflow:hidden}
.ls-house .m{font-size:11px;color:var(--text3);margin-top:3px}
.ls-num{font-variant-numeric:tabular-nums;font-weight:600;color:var(--text)}
.ls-rank-no{display:inline-flex;width:20px;height:20px;border-radius:6px;align-items:center;justify-content:center;font-size:11px;font-weight:700;background:var(--bg);color:var(--text3);margin-right:6px;vertical-align:middle;flex-shrink:0}
.ls-rank-no.r1{background:#fff7e6;color:#d46b08}
.ls-rank-no.r2{background:#f0f5ff;color:#0958d9}
.ls-rank-no.r3{background:#f6ffed;color:#389e0d}
.ls-visitor{display:flex;align-items:center;gap:8px;min-width:120px}
.ls-visitor .nm{font-size:13px;color:var(--text)}
.ls-phone-mask{font-size:12px;color:var(--text3)}
.ls-src{display:inline-block;font-size:11px;padding:2px 8px;border-radius:10px;background:var(--bg);color:var(--text2);white-space:nowrap}
.ls-time{font-size:12px;color:var(--text2);white-space:nowrap}
.ls-time small{display:block;font-size:11px;color:var(--text3)}
#page-listing_stats .ls-kpis{grid-template-columns:repeat(7,minmax(0,1fr))}
#page-listing_stats .ls-kpis .stat-card{min-width:0}
#page-listing_stats .trend-chart .trend-bar{min-width:0}
@media(max-width:1319px) and (min-width:901px){
  #page-listing_stats .ls-kpis{grid-template-columns:repeat(4,minmax(0,1fr))!important}
  #page-listing_stats .ls-kpis .stat-card:last-child{grid-column:span 2}
}
@media(max-width:900px){
  #page-listing_stats .ls-kpis{grid-template-columns:repeat(3,minmax(0,1fr))!important}
  #page-listing_stats .ls-kpis .stat-card:last-child{grid-column:span 3}
}
@media(max-width:600px){
  #page-listing_stats .ls-kpis{grid-template-columns:repeat(2,minmax(0,1fr))!important}
  #page-listing_stats .ls-kpis .stat-card:last-child{grid-column:span 2}
}
@media(max-width:900px){
  #page-listing_stats .filter-bar .tabs{overflow-x:visible}
  #page-listing_stats .filter-bar .tabs button{width:auto;flex:0 0 auto;height:36px;padding:0 12px}
  #page-listing_stats .trend-chart{height:auto;overflow-x:auto;gap:4px;padding-bottom:4px}
  #page-listing_stats .trend-chart .trend-bar{flex:0 0 24px;justify-content:flex-end}
  #page-listing_stats .trend-chart .trend-bar .label{white-space:nowrap;font-size:10px}
  #page-listing_stats .trend-chart .trend-bar .val{font-size:10px}
  #page-listing_stats .ls-table-wrap table{min-width:640px}
}
