/* ===========================================================
   水豚电竞电影酒店集团 · PMS 设计系统（Light Theme）
   =========================================================== */
:root{
  --bg:#f4f5fa;
  --bg-2:#eef0f8;
  --card:#ffffff;
  --card-2:#fafbff;
  --line:#e6e8f2;
  --line-2:#eef0f7;
  --txt:#1c2033;
  --txt-2:#5a6079;
  --muted:#8b90a8;
  --primary:#5b5bd6;
  --primary-2:#7c7cf0;
  --primary-soft:#eeeefc;
  --accent:#0ea5b7;
  --accent-soft:#e4f6f9;
  --ok:#12a594;
  --ok-soft:#e3f6f3;
  --warn:#d98207;
  --warn-soft:#fdf1de;
  --danger:#e5484d;
  --danger-soft:#fdecec;
  --info:#4c6ef5;
  --info-soft:#eaeeff;
  --purple:#8b5cf6;
  --purple-soft:#f2ecfe;
  --gold:#c08a5e;
  --primary-deep:#4b4bc4;
  --danger-txt:#b3252a; --danger-bd:#f3c9ca;
  --st-danger-bg:#ffe5e5; --st-danger-bd:#ee7d81;
  --ok-txt:#0b7d70; --warn-txt:#a35f00; --warn-txt-strong:#7a4b00;
  --info-txt:#3550c9; --purple-txt:#6b3fd4; --accent-txt:#067a89;
  --muted-soft:#eef0f7; --warn-bd:#f0dcbb;
  --scroll:#cfd3e4; --scroll-h:#b6bbd2;
  --st-ok-bg:#e0f7ef; --st-ok-bd:#4fc6a2;
  --st-info-bg:#e5ecff; --st-info-bd:#849af2;
  --st-purple-bg:#efe8ff; --st-purple-bd:#ab88ef;
  --st-warn-bg:#fff0d6; --st-warn-bd:#e8ac45;
  --st-muted-bg:#e9ebf2; --st-muted-bd:#aeb4ca;
  --st-accent-bg:#d4f4f9; --st-accent-bd:#42bbd1;
  /* 房态专用配色（2026-10-19 用户指定）：已入住淡黄 / 未入住淡粉 / 锁房淡蓝 / 退房淡灰 */
  /* 2026-10-20：配色按宝寓「房态」页对齐（在住淡黄 / 空房白 / 锁房淡蓝 / 退房淡灰） */
  --st-occupy-bg:#fbe3a0; --st-occupy-bd:#e0b23c; --st-occupy-txt:#6b5200;
  --st-vacant-bg:#ffffff; --st-vacant-bd:#dfe3ea; --st-vacant-txt:#5b6472;
  --st-locked-bg:#cfe0fb; --st-locked-bd:#6ea4ea; --st-locked-txt:#123f86;
  --st-out-bg:#e1e3e8; --st-out-bd:#b4b9c3; --st-out-txt:#5a606b;
  --login-grad:linear-gradient(135deg,#f6f7fd 0%,#eceffb 55%,#e6f4f7 100%);
  /* 中国习惯：涨=红，跌=绿 */
  --up:#e5484d;
  --down:#12a594;
  --r:10px;
  --r-lg:14px;
  --sh-1:0 1px 2px rgba(24,28,50,.05), 0 1px 3px rgba(24,28,50,.05);
  --sh-2:0 4px 16px rgba(24,28,50,.08);
  --sh-3:0 18px 50px rgba(24,28,50,.18);
  --font:"PingFang SC","Microsoft YaHei","Helvetica Neue",Arial,sans-serif;
  --mono:"JetBrains Mono","SFMono-Regular",Consolas,monospace;
}
*{box-sizing:border-box}
html,body{margin:0;padding:0;height:100%}
body{
  font-family:var(--font);background:var(--bg);color:var(--txt);
  font-size:13px;line-height:1.6;-webkit-font-smoothing:antialiased;
}
h1,h2,h3,h4{margin:0;font-weight:600;letter-spacing:.2px}
p{margin:0}
ul{margin:0;padding:0;list-style:none}
a{color:var(--primary);text-decoration:none}
.hidden{display:none !important}
.muted{color:var(--muted)}
.xs{font-size:11px}
.sm{font-size:12px}
.mono{font-family:var(--mono)}
.right{text-align:right}
.center{text-align:center}
.nowrap{white-space:nowrap}
.mt8{margin-top:8px}.mt12{margin-top:12px}.mt16{margin-top:16px}.mt20{margin-top:20px}
.row{display:flex;align-items:center;gap:8px}
.row-between{display:flex;align-items:center;justify-content:space-between;gap:12px}
.grow{flex:1}
::-webkit-scrollbar{width:9px;height:9px}
::-webkit-scrollbar-thumb{background:var(--scroll);border-radius:6px}
::-webkit-scrollbar-thumb:hover{background:var(--scroll-h)}
::-webkit-scrollbar-track{background:transparent}

/* ---------------- 登录 ---------------- */
/* 宇宙粒子背景画布：铺满视口、置于内容之下、不响应鼠标 */
.cosmos-canvas{position:fixed;inset:0;width:100%;height:100%;z-index:0;pointer-events:none}
.login-wrap{display:flex;min-height:100vh;background:var(--login-grad);position:relative;overflow:hidden}
.login-left,.login-right{position:relative;z-index:1}
.theme-dark .login-wrap{background:
  radial-gradient(1200px 700px at 78% 18%, rgba(76,110,245,.16), transparent 60%),
  radial-gradient(900px 600px at 15% 80%, rgba(139,92,246,.14), transparent 62%),
  linear-gradient(160deg,#0a0e1c 0%,#0d1226 45%,#111a36 100%)}
.login-left{flex:1;padding:56px 60px;display:flex;flex-direction:column;justify-content:center;gap:26px;max-width:620px}
.brand-big{display:flex;gap:18px;align-items:flex-start}
/* 品牌徽标容器（2026-10-17 统一）：全站只用一张彩色图案（= favicon.ico 同源），
   满幅铺进圆角方框，做成 App 图标观感；不再用「渐变底 + 白墨线稿」那套。 */
.brand-logo{width:60px;height:60px;border-radius:16px;background:#fff;overflow:hidden;
  display:flex;align-items:center;justify-content:center;flex:none;
  box-shadow:0 10px 24px rgba(91,91,214,.28)}
.brand-logo.sm{width:34px;height:34px;border-radius:10px;box-shadow:0 3px 10px rgba(6,14,28,.3)}
/* 图标满幅：按目标的 2 倍像素取图（srcset），由浏览器缩小 —— 比放大小图清晰 */
.brand-logo img{width:100%;height:100%;object-fit:contain;display:block}
.brand-logo.sm img{width:100%;height:100%}
.brand-big h1{font-size:23px;line-height:1.35}
.brand-big p{color:var(--txt-2);font-size:12.5px;margin-top:4px}
.brand-sub{color:var(--muted) !important;font-size:12px}
.login-feats{display:grid;gap:9px}
.login-feats li{background:var(--card);border:1px solid var(--line);border-radius:var(--r);padding:9px 14px;font-size:12.5px;
  color:var(--txt-2);box-shadow:var(--sh-1)}
.login-feats b{color:var(--primary);margin-right:8px}
/* 登录页门店分布地图卡片 */
.m-brand{display:none;align-items:center;gap:10px;margin-bottom:14px}
.m-brand b{font-size:15px}
.login-map-card{background:var(--card);border:1px solid var(--line);border-radius:14px;box-shadow:var(--sh-1);padding:14px 16px 10px}
.login-map-card .lm-head{display:flex;align-items:center;justify-content:space-between;margin-bottom:6px}
.login-map-card .lm-head b{font-size:13px}
.login-map{height:252px;width:100%}
.login-map .note{background:transparent}
.lm-legend{display:flex;gap:14px;justify-content:center;padding-top:4px}
.lm-legend .lg-dot{display:inline-block;width:8px;height:8px;border-radius:50%;margin-right:5px;vertical-align:middle}
.login-foot{color:var(--muted);font-size:11.5px}
.login-right{flex:1;display:flex;align-items:center;justify-content:center;padding:40px}
.login-card{background:var(--card);border-radius:18px;box-shadow:var(--sh-2);padding:28px 30px;width:100%;max-width:640px;border:1px solid var(--line)}
.login-card h2{font-size:17px;margin-bottom:5px}
.role-grid{display:grid;grid-template-columns:repeat(3,1fr);gap:9px;margin:18px 0 6px;max-height:346px;overflow:auto;padding-right:4px}
.role-card{border:1.5px solid var(--line);border-radius:var(--r);padding:9px 11px;cursor:pointer;transition:.15s;background:var(--card-2)}
.role-card:hover{border-color:var(--primary-2);background:var(--primary-soft);transform:translateY(-1px)}
.role-card.on{border-color:var(--primary);background:var(--primary-soft);box-shadow:0 0 0 3px rgba(91,91,214,.12)}
.role-card .rc-name{font-weight:600;font-size:12.5px}
.role-card .rc-scope{font-size:10.5px;color:var(--muted);margin-top:1px}
.role-card .rc-tag{display:inline-block;font-size:10px;padding:0 5px;border-radius:4px;margin-top:5px}
.login-actions{display:flex;align-items:flex-end;gap:12px;margin-top:18px}
.login-actions .field{flex:1}
.login-tips{margin-top:14px;background:var(--bg-2);border-radius:var(--r);padding:10px 12px;font-size:12px;color:var(--txt-2);min-height:38px}
.login-reset{margin-top:14px;display:flex;align-items:center;gap:10px;border-top:1px dashed var(--line);padding-top:12px}

/* ---------------- 布局 ---------------- */
.app{display:flex;height:100vh;overflow:hidden}
.sidebar{width:228px;flex:none;background:var(--card);border-right:1px solid var(--line);display:flex;flex-direction:column}
.brand{display:flex;gap:10px;align-items:center;padding:14px 16px;border-bottom:1px solid var(--line-2);
  cursor:pointer;user-select:none;transition:background .15s;position:relative}
.brand:hover{background:var(--bg-2)}
.brand:hover .brand-home{opacity:1;transform:translateX(0)}
.brand:active{opacity:.82}
.brand-home{margin-left:auto;font-size:13px;color:var(--primary);opacity:0;transform:translateX(-4px);transition:.18s}
.brand-txt{min-width:0}
.brand-name{font-size:13px;font-weight:700;letter-spacing:.3px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.brand-sub2{font-size:9px;color:var(--muted);letter-spacing:.5px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.nav{flex:1;overflow:auto;padding:10px 8px 16px}
.nav-group{margin-bottom:6px}
.nav-group-title{font-size:10.5px;color:var(--muted);letter-spacing:1px;padding:10px 10px 5px;font-weight:600}
.nav-item{display:flex;align-items:center;gap:9px;padding:7.5px 10px;border-radius:8px;cursor:pointer;color:var(--txt-2);
  font-size:12.5px;transition:.12s;user-select:none}
.nav-item:hover{background:var(--bg-2);color:var(--txt)}
/* 侧边栏菜单拖拽排序 */
.nav-hint{font-size:10px;color:var(--muted);padding:0 10px 4px;user-select:none;letter-spacing:.3px}
.nav-item[draggable="true"]{cursor:grab}
.nav-item[draggable="true"]:active{cursor:grabbing}
.nav-item.dragging{opacity:.35}
.nav-item.drag-over{box-shadow:inset 0 2px 0 var(--primary);background:var(--primary-soft)}
.nav-reset{margin:10px 10px 2px;padding:6px 10px;border-radius:8px;font-size:11px;color:var(--muted);text-align:center;cursor:pointer;border:1px dashed var(--line)}
.nav-reset:hover{color:var(--primary);border-color:var(--primary-2);background:var(--primary-soft)}
.nav-item.active{background:var(--primary-soft);color:var(--primary);font-weight:600}
.nav-item .ni{width:16px;text-align:center;font-size:12px;flex:none}
.side-foot{border-top:1px solid var(--line-2);padding:10px}
.side-user{display:flex;gap:9px;align-items:center;margin-bottom:8px}
.avatar{width:32px;height:32px;border-radius:9px;background:linear-gradient(140deg,var(--primary),var(--accent));color:#fff;
  display:flex;align-items:center;justify-content:center;font-size:13px;font-weight:600;flex:none}
.side-user-txt{min-width:0}
.side-user-txt>div:first-child{font-size:12.5px;font-weight:600;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.main{flex:1;display:flex;flex-direction:column;min-width:0}
.topbar-left{display:flex;align-items:center;gap:10px;min-width:0}
.menu-btn{display:none}
.topbar{height:52px;flex:none;background:var(--card);border-bottom:1px solid var(--line);display:flex;align-items:center;
  justify-content:space-between;padding:0 18px;gap:14px}
.crumbs{font-size:13px;color:var(--txt-2)}
.crumbs b{color:var(--txt);font-size:14px}
.topbar-right{display:flex;align-items:center;gap:10px}
.clock{font-size:11.5px;color:var(--muted);font-family:var(--mono)}
.icon-btn{width:30px;height:30px;border-radius:8px;border:1px solid var(--line);background:var(--card);cursor:pointer;
  color:var(--txt-2);font-size:13px;display:flex;align-items:center;justify-content:center}
.icon-btn:hover{background:var(--bg-2);color:var(--primary)}
.store-switch select{border:1px solid var(--line);border-radius:8px;padding:5px 8px;font-size:12px;background:var(--card);color:var(--txt);max-width:260px}
.page{flex:1;overflow:auto;padding:18px 20px 40px}

/* ---------------- 组件 ---------------- */
.card{background:var(--card);border:1px solid var(--line);border-radius:var(--r-lg);box-shadow:var(--sh-1);margin-bottom:16px}
.card-head{display:flex;align-items:center;justify-content:space-between;gap:12px;padding:13px 16px;border-bottom:1px solid var(--line-2)}
.card-title{font-size:13.5px;font-weight:600;display:flex;align-items:center;gap:8px}
.card-title .dot{width:3px;height:13px;border-radius:2px;background:var(--primary)}
.card-sub{font-size:11.5px;color:var(--muted)}
.card-body{padding:16px}
.card-body.tight{padding:10px 12px}
/* 卡片折叠（与 H5 的 .bk-fold 同一套视觉语言：右侧箭头随展开旋转、分隔线随收起消失）
   折叠体只 display:none，DOM 里始终在，断言与表格取数不受影响 */
.card-head.is-fold{cursor:pointer;user-select:none;-webkit-tap-highlight-color:transparent}
.card-head.is-fold:hover{background:var(--bg)}
.card-head.is-fold:focus-visible{outline:2px solid var(--primary);outline-offset:-2px}
.card-cv{flex:none;width:8px;height:8px;margin:0 4px 3px 2px;border-right:1.6px solid var(--muted);
  border-bottom:1.6px solid var(--muted);transform:rotate(45deg);transition:transform .18s}
.card-foldable.open .card-cv{transform:rotate(-135deg);margin-bottom:0;margin-top:4px}
.card-foldable:not(.open) .card-head{border-bottom:none}
.card-foldable>.card-body{display:none}
.card-foldable.open>.card-body{display:block}
.grid{display:grid;gap:14px}
.g2{grid-template-columns:repeat(2,minmax(0,1fr))}
.g3{grid-template-columns:repeat(3,minmax(0,1fr))}
.g4{grid-template-columns:repeat(4,minmax(0,1fr))}
/* 指标卡：自适应列数，窄容器不会把卡片挤成细高条（2026-10-20） */
.g5{grid-template-columns:repeat(auto-fit,minmax(180px,1fr))}
/* 门店紧凑卡片（组织架构与门店） */
.store-tile{transition:box-shadow .15s,transform .15s}
.store-tile:hover{box-shadow:var(--sh-2);transform:translateY(-1px)}
.store-tile .card-body{padding:12px 14px}
.store-tile .btn-row{gap:5px;flex-wrap:wrap}
.store-tile .btn-row .btn{padding:3px 8px;font-size:11px}
.g-2-1{grid-template-columns:2fr 1fr}
.g-1-2{grid-template-columns:1fr 2fr}
.g-3-2{grid-template-columns:3fr 2fr}

.stat{min-width:0;background:var(--card);border:1px solid var(--line);border-radius:var(--r-lg);padding:14px 15px;box-shadow:var(--sh-1);position:relative;overflow:hidden}
.stat:before{content:"";position:absolute;left:0;top:0;bottom:0;width:3px;background:var(--primary);opacity:.85}
.stat.ok:before{background:var(--ok)}.stat.warn:before{background:var(--warn)}
.stat.danger:before{background:var(--danger)}.stat.accent:before{background:var(--accent)}
.stat.purple:before{background:var(--purple)}
.stat-label{font-size:11.5px;color:var(--muted)}
.stat-value{font-size:22px;font-weight:700;letter-spacing:-.4px;margin:3px 0 2px;font-variant-numeric:tabular-nums}
.stat-value small{font-size:12px;font-weight:500;color:var(--muted);margin-left:3px}
.stat-foot{display:flex;align-items:center;gap:8px;font-size:11.5px;color:var(--muted)}
/* 员工中心：我的职级 醒目横幅 */
.level-hero{display:flex;justify-content:space-between;align-items:center;gap:18px;background:linear-gradient(135deg,var(--accent-soft),var(--card));border:1px solid var(--accent);border-radius:var(--r-lg);padding:18px 22px;box-shadow:var(--sh-1);margin-bottom:14px}
.level-hero .lh-label{font-size:12px;color:var(--accent-txt);font-weight:700;letter-spacing:.6px}
.level-hero .lh-level{font-size:30px;font-weight:800;margin:4px 0 3px;display:flex;align-items:center;gap:10px;line-height:1.1}
.level-hero .lh-level .badge{font-size:20px;padding:4px 18px}
.level-hero .lh-track{font-size:13px;color:var(--muted)}
.level-hero .lh-right{text-align:right;font-size:12.5px;color:var(--txt-2);max-width:46%}
.level-hero .lh-note{margin-bottom:4px}
.level-hero .lh-sup{color:var(--txt-2)}
/* 员工中心：获奖荣誉列表 */
.award-list{display:flex;flex-direction:column;gap:10px}
.award-item{display:flex;gap:12px;align-items:flex-start;padding:12px 14px;background:var(--card);border:1px solid var(--line);border-radius:var(--r-lg)}
.award-ic{flex:none;margin-top:2px}
.award-title{font-size:14px;font-weight:600}
.award-date{font-size:12px;color:var(--muted);font-weight:500;margin-left:6px}
.award-desc{font-size:12.5px;color:var(--txt-2);margin-top:3px}
@media (max-width:720px){.level-hero{flex-direction:column;align-items:flex-start}.level-hero .lh-right{text-align:left;max-width:100%}}
.delta{display:inline-flex;align-items:center;gap:2px;font-weight:600;font-family:var(--mono)}
.delta.up{color:var(--up)}.delta.down{color:var(--down)}.delta.flat{color:var(--muted)}

.tbl{width:100%;border-collapse:collapse;font-size:12.5px}
.tbl th{text-align:left;font-weight:600;color:var(--muted);font-size:11.5px;padding:9px 12px;border-bottom:1px solid var(--line);
  background:var(--card-2);white-space:nowrap;position:sticky;top:0;z-index:1}
.tbl td{padding:9px 12px;border-bottom:1px solid var(--line-2);vertical-align:middle}
.tbl tbody tr:hover{background:var(--card-2)}
.tbl tbody tr:last-child td{border-bottom:none}
.tbl .num{text-align:right;font-family:var(--mono);font-variant-numeric:tabular-nums}
.tbl-wrap{overflow:auto;max-height:520px;border-radius:0 0 var(--r-lg) var(--r-lg)}
.tbl-wrap.short{max-height:320px}
/* 可排序表头（点一下排序，再点反向） */
.tbl th.th-sort{cursor:pointer;user-select:none;-webkit-user-select:none;transition:color .15s,background .15s}
.tbl th.th-sort:hover{color:var(--primary);background:var(--primary-soft)}
.tbl th.th-sort:active{background:var(--primary-soft)}
.tbl th.th-sort .sort-ind{font-style:normal;font-size:9px;margin-left:5px;color:var(--muted);opacity:.55;vertical-align:1px}
.tbl th.th-sort.on{color:var(--primary)}
.tbl th.th-sort.on .sort-ind{color:var(--primary);opacity:1}
html.theme-dark .tbl th.th-sort:hover,html.theme-dark .tbl th.th-sort.on{color:var(--primary-2);background:var(--card-2)}
html.theme-dark .tbl th.th-sort.on .sort-ind{color:var(--primary-2)}

.badge{display:inline-flex;align-items:center;gap:4px;font-size:11px;padding:2px 8px;border-radius:20px;font-weight:500;white-space:nowrap}
.badge.ok{background:var(--ok-soft);color:var(--ok-txt)}
.badge.warn{background:var(--warn-soft);color:var(--warn-txt)}
.badge.danger{background:var(--danger-soft);color:var(--danger-txt)}
.badge.info{background:var(--info-soft);color:var(--info-txt)}
.badge.purple{background:var(--purple-soft);color:var(--purple-txt)}
.badge.muted{background:var(--muted-soft);color:var(--txt-2)}
.badge.accent{background:var(--accent-soft);color:var(--accent-txt)}

.btn{border:1px solid var(--line);background:var(--card);border-radius:8px;padding:6.5px 13px;font-size:12.5px;cursor:pointer;
  color:var(--txt);font-family:var(--font);transition:.13s;display:inline-flex;align-items:center;gap:6px;white-space:nowrap}
.btn:hover{border-color:var(--primary-2);color:var(--primary);background:var(--primary-soft)}
.btn-primary{background:var(--primary);border-color:var(--primary);color:#fff}
.btn-primary:hover{background:var(--primary-deep);border-color:var(--primary-deep);color:#fff}
.btn-danger{background:var(--card);border-color:var(--danger-bd);color:var(--danger)}
.btn-danger:hover{background:var(--danger-soft);border-color:var(--danger);color:var(--danger)}
.btn-ghost{border-color:transparent;background:transparent;color:var(--txt-2)}
.btn-ghost:hover{background:var(--bg-2)}
.btn-sm{padding:4px 9px;font-size:11.5px;border-radius:7px}
.btn-xs{padding:2px 7px;font-size:11px;border-radius:6px}
.btn-block{width:100%;justify-content:center}
.btn:disabled{opacity:.45;cursor:not-allowed}
.btn-row{display:flex;gap:8px;flex-wrap:wrap}

.field{display:flex;flex-direction:column;gap:5px;margin-bottom:12px}
.field>span{font-size:11.5px;color:var(--txt-2);font-weight:500}
.field.inline{margin:0}
.input,.select,.textarea{border:1px solid var(--line);border-radius:8px;padding:7px 10px;font-size:12.5px;
  font-family:var(--font);background:var(--card);color:var(--txt);width:100%;outline:none;transition:.13s}
.input:focus,.select:focus,.textarea:focus{border-color:var(--primary-2);box-shadow:0 0 0 3px rgba(91,91,214,.1)}
.textarea{min-height:70px;resize:vertical}
.form-grid{display:grid;grid-template-columns:1fr 1fr;gap:0 14px}

/* 会员搜索栏（门店会员 / 集团会员池共用） */
.mb-grid{display:grid;grid-template-columns:minmax(220px,2fr) repeat(3,minmax(126px,1fr)) auto;gap:0 14px;align-items:end}
.mb-grid .field{margin-bottom:0}
.mb-grid .mb-btns{padding-bottom:12px}
.mb-grid .mb-btns .btn{width:100%}
@media(max-width:1280px){.mb-grid{grid-template-columns:minmax(180px,1.6fr) 1fr 1fr}}
@media(max-width:900px){.mb-grid{grid-template-columns:1fr 1fr}}
@media(max-width:760px){.mb-grid{grid-template-columns:1fr}}

/* 会员列表分页器（2026-10-20 宝寓客人回填后会员量上万，门店/集团两个池共用） */
.mb-pager{display:flex;align-items:center;gap:5px;flex-wrap:wrap;margin-top:10px}
.mb-pager .btn[disabled]{opacity:.45;cursor:not-allowed}
.mb-pager-dot{padding:0 3px;color:var(--muted,#8b90a8)}

/* OTA 平台评价（客诉与评价页 / 集团稽查页共用） */
.rv-board{display:grid;grid-template-columns:repeat(4,1fr);gap:12px}
@media(max-width:1200px){.rv-board{grid-template-columns:repeat(2,1fr)}}
@media(max-width:640px){.rv-board{grid-template-columns:1fr}}
.rv-board-item{border:1px solid var(--line);border-radius:var(--r);padding:11px 13px;background:var(--card-2)}
.rvb-top{display:flex;align-items:center;justify-content:space-between;gap:6px}
.rvb-score{font-size:22px;font-weight:700;color:var(--txt);line-height:1.25;margin-top:4px}
.rvb-score small{font-size:11px;font-weight:500;color:var(--muted);margin-left:3px}
.rvb-foot{display:flex;gap:10px;flex-wrap:wrap;margin-top:3px}
.rv-stars{font-size:12px;letter-spacing:1px}
.rv-stars.ok{color:var(--ok)}
.rv-stars.warn{color:var(--warn)}
.rv-stars.danger{color:var(--danger)}
.rv-list{display:flex;flex-direction:column;gap:10px}
.rv-card{border:1px solid var(--line);border-left:3px solid var(--primary-2);border-radius:var(--r);
  padding:11px 14px;background:var(--card);transition:.13s}
.rv-card:hover{box-shadow:var(--sh-1)}
.rv-card.rv-bad{border-left-color:var(--danger);background:var(--danger-soft)}
.rv-head{display:flex;align-items:center;gap:8px;flex-wrap:wrap}
.rv-nick{font-size:12.5px}
.rv-body{margin-top:6px;font-size:12.5px;color:var(--txt);line-height:1.7}
.rv-meta{display:flex;align-items:center;gap:6px;flex-wrap:wrap;margin-top:6px}
.rv-quote{margin-top:7px;padding:7px 10px;border-radius:8px;font-size:12px;line-height:1.65}
.rv-quote.follow{background:var(--bg-2);color:var(--txt-2)}
.rv-quote.reply{background:var(--ok-soft);color:var(--ok-txt)}
.rv-quote.pending{background:var(--warn-soft);color:var(--warn-txt)}
.rv-quote.conv{background:var(--danger-soft);color:var(--danger-txt)}
.rv-acts{display:flex;gap:6px;justify-content:flex-end;margin-top:8px;flex-wrap:wrap}

/* 扫码客诉二维码 */
.cp-qr-wrap{text-align:center}
.cp-qr-box{display:inline-block;padding:14px;border:1px solid var(--line);border-radius:var(--r);background:#fff;margin:4px auto 10px}
.cp-qr-box svg{display:block;width:212px;height:212px}
.cp-qr-url{margin:0 auto 4px;max-width:320px;word-break:break-all;background:var(--bg-2);border:1px solid var(--line-2);border-radius:8px;padding:7px 10px;color:var(--txt-2)}

.tabs{display:flex;gap:4px;border-bottom:1px solid var(--line);padding:0 16px;flex-wrap:wrap}
.tab{padding:9px 12px;font-size:12.5px;color:var(--txt-2);cursor:pointer;border-bottom:2px solid transparent;margin-bottom:-1px}
.tab:hover{color:var(--primary)}
.tab.on{color:var(--primary);font-weight:600;border-bottom-color:var(--primary)}
.tabpane{display:none}
.tabpane.on{display:block}

.progress{height:6px;border-radius:4px;background:var(--line-2);overflow:hidden}
.progress>i{display:block;height:100%;border-radius:4px;background:var(--primary)}
.progress.ok>i{background:var(--ok)}.progress.warn>i{background:var(--warn)}.progress.danger>i{background:var(--danger)}

.room-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(104px,1fr));gap:9px}
.room{border:1px solid var(--line);border-radius:10px;padding:8px 9px;cursor:pointer;background:var(--card);transition:.13s;position:relative}
.room:hover{transform:translateY(-2px);box-shadow:var(--sh-2);border-color:var(--primary-2)}
.room .rm-no{font-weight:700;font-size:13px}
.room .rm-type{font-size:10.5px;color:var(--muted);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.room .rm-meta{font-size:10.5px;margin-top:4px;display:flex;justify-content:space-between;align-items:center}
.room:after{content:"";position:absolute;right:8px;top:9px;width:7px;height:7px;border-radius:50%;background:var(--muted)}
.room[data-s="空房"],.room[data-s="未入住"]{background:var(--st-vacant-bg);border-color:var(--st-vacant-bd)}.room[data-s="空房"]:after,.room[data-s="未入住"]:after{background:var(--st-vacant-bd)}
.room[data-s="入住"],.room[data-s="已入住"]{background:var(--st-occupy-bg);border-color:var(--st-occupy-bd)}.room[data-s="入住"]:after,.room[data-s="已入住"]:after{background:var(--st-occupy-bd)}
.room[data-s="预订"]{background:var(--st-purple-bg);border-color:var(--st-purple-bd)}.room[data-s="预订"]:after{background:var(--purple)}
.room[draggable="true"]{cursor:grab}
.room.dragging{opacity:.45;cursor:grabbing;transform:scale(.96)}
.room.drag-over{border-color:var(--primary);box-shadow:0 0 0 2px var(--primary-2);transform:translateY(-2px)}
.room[data-s="脏房"],.room[data-s="退房"]{background:var(--st-out-bg);border-color:var(--st-out-bd)}.room[data-s="脏房"]:after,.room[data-s="退房"]:after{background:var(--st-out-txt)}
.room[data-s="维修"]{background:var(--st-danger-bg);border-color:var(--st-danger-bd)}.room[data-s="维修"]:after{background:var(--danger)}
.room[data-s="锁房"]{background:var(--st-locked-bg);border-color:var(--st-locked-bd)}.room[data-s="锁房"]:after{background:var(--st-locked-bd)}
.room[data-s="预留"]{background:var(--st-accent-bg);border-color:var(--st-accent-bd)}.room[data-s="预留"]:after{background:var(--accent)}
.room[data-s="空房"] .rm-no,.room[data-s="未入住"] .rm-no{color:var(--st-vacant-txt)}
.room[data-s="入住"] .rm-no,.room[data-s="已入住"] .rm-no{color:var(--st-occupy-txt)}
.room[data-s="预订"] .rm-no{color:var(--purple-txt)}
.room[data-s="脏房"] .rm-no,.room[data-s="退房"] .rm-no{color:var(--st-out-txt)}
.room[data-s="维修"] .rm-no{color:var(--danger-txt)}
.room[data-s="锁房"] .rm-no{color:var(--st-locked-txt)}
.room[data-s="预留"] .rm-no{color:var(--accent-txt)}
.room:hover .rm-no{color:var(--txt)}
/* 未缴押金：虚线红框 + 呼吸警示点 + 角标 */
.room.no-dep{border-style:dashed;border-color:var(--st-danger-bd)}
.room.no-dep:after{background:var(--danger);box-shadow:0 0 0 3px var(--danger-soft);animation:depPulse 1.5s ease-in-out infinite}
.room .rm-dep{margin-top:5px;font-size:10px;font-weight:700;line-height:1.6;color:var(--danger-txt);background:var(--danger-soft);
  border-radius:6px;padding:1px 6px;display:inline-block;max-width:100%;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.floor-dep{margin-left:8px;font-size:11px;font-weight:600;color:var(--danger-txt);background:var(--danger-soft);
  border-radius:20px;padding:2px 9px;white-space:nowrap}
.chip.chip-danger{background:var(--danger-soft);color:var(--danger-txt);border-color:var(--st-danger-bd)}
.chip.chip-danger.on{background:var(--danger);color:#fff;border-color:var(--danger)}
.dep-tip{color:var(--danger-txt);font-weight:600}
@keyframes depPulse{0%,100%{opacity:1;transform:scale(1)}50%{opacity:.45;transform:scale(.78)}}
@media (prefers-reduced-motion:reduce){.room.no-dep:after{animation:none}}

.legend{display:flex;gap:14px;flex-wrap:wrap;font-size:11.5px;color:var(--txt-2)}
.legend i{display:inline-block;width:9px;height:9px;border-radius:3px;margin-right:5px}
/* 房态图例配色与房间卡片一致：已入住淡黄 / 未入住淡粉 / 锁房淡蓝 / 退房（脏房）淡灰 */
.legend i[data-st="入住"],.legend i[data-st="已入住"]{background:var(--st-occupy-bd)}
.legend i[data-st="空房"],.legend i[data-st="未入住"]{background:var(--st-vacant-bd)}
.legend i[data-st="锁房"]{background:var(--st-locked-bd)}
.legend i[data-st="脏房"],.legend i[data-st="退房"]{background:var(--st-out-bd)}
.legend i[data-st="预订"]{background:var(--purple)}
.legend i[data-st="维修"]{background:var(--danger)}
.legend i[data-st="预留"]{background:var(--accent)}

.timeline{padding-left:2px}
.timeline li{position:relative;padding:0 0 14px 18px;border-left:1px dashed var(--line);font-size:12px}
.timeline li:last-child{border-left-color:transparent;padding-bottom:0}
.timeline li:before{content:"";position:absolute;left:-4.5px;top:5px;width:8px;height:8px;border-radius:50%;background:var(--card);border:2px solid var(--primary-2)}
.timeline .tl-t{color:var(--muted);font-size:11px;font-family:var(--mono)}

.kv{display:grid;grid-template-columns:auto 1fr;gap:7px 14px;font-size:12.5px}
.kv dt{color:var(--muted)}
.kv dd{margin:0;font-weight:500}

/* 门店多选（岗位绑定门店 / 员工所属门店共用，18 家店需要滚动） */
.sm-store-box{max-height:170px;overflow:auto;border:1px solid #e3e6f0;border-radius:8px;padding:8px 10px;margin-top:6px;background:var(--bg)}
.sm-store-item{display:flex;align-items:center;gap:6px;margin:4px 0;cursor:pointer;font-size:12.5px}
.sm-store-item:hover{color:var(--brand)}
.sm-store-box .mono{opacity:.6}

.empty{padding:34px 10px;text-align:center;color:var(--muted);font-size:12.5px}
.empty .ico{font-size:26px;display:block;margin-bottom:8px;opacity:.35}

.chip{display:inline-flex;align-items:center;gap:5px;background:var(--bg-2);border-radius:20px;padding:3px 10px;font-size:11.5px;color:var(--txt-2)}
.chip.on{background:var(--primary-soft);color:var(--primary);font-weight:600;cursor:pointer}
.chip{cursor:pointer}
.chip-row{display:flex;gap:7px;flex-wrap:wrap}

.note{background:var(--bg-2);border-left:3px solid var(--primary-2);border-radius:0 8px 8px 0;padding:10px 13px;font-size:12px;color:var(--txt-2)}
.note.warn{background:var(--warn-soft);border-color:var(--warn)}
.note.danger{background:var(--danger-soft);border-color:var(--danger)}
.note.ok{background:var(--ok-soft);border-color:var(--ok)}
/* ===== 员工中心 · 开票信息（戳2003）=====
   发票四要素按「标签 + 值 + 复制」的窄列排布，值允许换行（地址 / 账号很长） */
.inv-head{border:1px dashed var(--line);border-radius:12px;background:var(--card-2);padding:2px 16px}
.inv-row{display:flex;align-items:flex-start;gap:12px;padding:10px 0;border-bottom:1px dashed var(--line-2)}
.inv-row:last-child{border-bottom:0}
.inv-k{flex:none;width:118px;color:var(--muted);font-size:12.5px;line-height:1.75}
.inv-v{flex:1;min-width:0;font-size:13.5px;line-height:1.75;word-break:break-all;color:var(--txt)}
.inv-v.empty{color:var(--muted)}
.inv-copy{flex:none;padding:2px 10px;font-size:11.5px}
.inv-acts{display:flex;gap:8px;flex-wrap:wrap}
@media (max-width:640px){ .inv-head{padding:2px 12px} .inv-k{width:86px} .inv-row{gap:8px} }

.rank-list li{display:flex;align-items:center;gap:10px;padding:8px 0;border-bottom:1px dashed var(--line-2);font-size:12.5px}
.rank-list li:last-child{border-bottom:none}
.rank-no{width:19px;height:19px;border-radius:6px;background:var(--bg-2);color:var(--txt-2);font-size:11px;
  display:flex;align-items:center;justify-content:center;font-weight:700;flex:none}
.rank-list li:nth-child(1) .rank-no{background:var(--danger-soft);color:var(--danger)}
.rank-list li:nth-child(2) .rank-no{background:var(--warn-soft);color:var(--warn-txt)}
.rank-list li:nth-child(3) .rank-no{background:var(--ok-soft);color:var(--ok-txt)}

.alert-item{display:flex;gap:10px;padding:10px 0;border-bottom:1px dashed var(--line-2);font-size:12.5px}
.alert-item:last-child{border-bottom:none}
.alert-item .ai-ico{width:26px;height:26px;border-radius:8px;flex:none;display:flex;align-items:center;justify-content:center;font-size:13px}
.ai-danger{background:var(--danger-soft);color:var(--danger)}
.ai-warn{background:var(--warn-soft);color:var(--warn)}
.ai-info{background:var(--info-soft);color:var(--info)}
.ai-ok{background:var(--ok-soft);color:var(--ok)}

/* 弹窗 */
.modal-mask{position:fixed;inset:0;background:rgba(24,28,50,.42);z-index:900;display:flex;align-items:center;
  justify-content:center;padding:24px;animation:fade .16s ease}
@keyframes fade{from{opacity:0}to{opacity:1}}
.modal{background:var(--card);border-radius:16px;box-shadow:var(--sh-3);width:100%;max-width:560px;max-height:88vh;display:flex;flex-direction:column;
  animation:pop .18s cubic-bezier(.2,.9,.3,1.2)}
@keyframes pop{from{transform:translateY(10px) scale(.98);opacity:0}to{transform:none;opacity:1}}
.modal.wide{max-width:860px}
.modal-head{display:flex;align-items:center;justify-content:space-between;padding:15px 18px;border-bottom:1px solid var(--line-2)}
.modal-head h3{font-size:14.5px}
.modal-body{padding:18px;overflow:auto}
.modal-foot{padding:13px 18px;border-top:1px solid var(--line-2);display:flex;justify-content:flex-end;gap:9px}
.modal-x{border:none;background:transparent;font-size:17px;color:var(--muted);cursor:pointer;line-height:1}

/* Toast */
.toast-layer{position:fixed;top:16px;right:16px;z-index:1000;display:flex;flex-direction:column;gap:9px;pointer-events:none}
.toast{background:var(--card);border:1px solid var(--line);border-left:3px solid var(--primary);border-radius:10px;padding:10px 15px;
  font-size:12.5px;box-shadow:var(--sh-2);min-width:230px;max-width:380px;animation:slide .2s ease}
.toast.ok{border-left-color:var(--ok)}
.toast.warn{border-left-color:var(--warn)}
.toast.danger{border-left-color:var(--danger)}
.toast .t-title{font-weight:600;margin-bottom:1px}
@keyframes slide{from{transform:translateX(20px);opacity:0}to{transform:none;opacity:1}}

/* 水印 */
.wm-layer{position:fixed;inset:0;z-index:800;pointer-events:none;overflow:hidden}
.wm-layer span{position:absolute;color:rgba(91,91,214,.10);font-size:13px;white-space:nowrap;transform:rotate(-24deg);
  font-family:var(--mono)}

/* 图表 */
.chart-legend{display:flex;gap:14px;flex-wrap:wrap;font-size:11.5px;color:var(--txt-2);margin-bottom:6px}
.chart-legend i{display:inline-block;width:9px;height:3px;border-radius:2px;margin-right:5px;vertical-align:middle}
svg.chart{display:block;width:100%;overflow:visible}
svg.chart text{font-family:var(--font);font-size:11px;fill:var(--muted)}
svg.chart .grid-line{stroke:var(--line-2);stroke-width:1}
svg.chart .axis-line{stroke:var(--line);stroke-width:1}

/* 打印/移动 */
.spinner{width:18px;height:18px;border-radius:50%;border:2px solid var(--line);border-top-color:var(--primary);
  animation:spin .7s linear infinite;flex:none}
@keyframes spin{to{transform:rotate(360deg)}}
/* ---------- 平板 / 中屏 ---------- */
@media(max-width:1280px){
  .g4,.g5{grid-template-columns:repeat(2,minmax(0,1fr))}
  .g-2-1,.g-1-2,.g-3-2,.g3{grid-template-columns:1fr}
}
@media(max-width:900px){
  .g2,.g3,.g4,.g5,.g-2-1,.g-1-2,.g-3-2{grid-template-columns:1fr}
  .login-left{display:none}
}

/* ---------- 移动端（≤760px）：抽屉导航 + 触控优化 ---------- */
@media(max-width:760px){
  /* 侧边栏 → 抽屉 */
  .menu-btn{display:flex;align-items:center;justify-content:center;font-size:15px}
  .sidebar{position:fixed;z-index:960;top:0;left:0;bottom:0;width:264px;max-width:84vw;
    transform:translateX(-105%);transition:transform .22s ease;box-shadow:var(--sh-3)}
  .sidebar.open{transform:none}
  .side-mask{position:fixed;inset:0;z-index:950;background:rgba(24,28,50,.45);
    opacity:0;pointer-events:none;transition:opacity .2s}
  .side-mask.show{opacity:1;pointer-events:auto}
  .nav-item{padding:10px 12px;font-size:13.5px}
  .side-user{margin-bottom:10px}

  /* 顶栏精简 */
  .topbar{padding:0 10px;gap:8px;height:48px}
  .topbar-left{gap:8px;min-width:0;flex:1}
  .crumbs{font-size:12px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;flex:1;min-width:0}
  .crumbs .muted{display:none}
  .crumbs .badge{display:none}
  .clock{display:none}
  .topbar-right{gap:6px;flex:none}
  .store-switch select{max-width:96px;font-size:11.5px;padding:4px 6px}
  .sync-pill{max-width:74px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;font-size:10.5px}

  /* 内容区 */
  .page{padding:12px 12px 36px}
  .card{padding:14px 12px}
  .card-title{font-size:13.5px}
  .tbl{font-size:12px}
  .tbl th,.tbl td{padding:8px 9px}
  .tbl-wrap{max-height:none;overflow-x:auto}
  .form-grid{grid-template-columns:1fr}
  .btn-row{flex-wrap:wrap}
  .chip-row{overflow-x:auto;padding-bottom:2px}

  /* 弹窗 → 底部卡片式 */
  .modal-mask{align-items:flex-end;padding:0}
  .modal{max-width:100%;max-height:88vh;border-radius:18px 18px 0 0}
  .toast{max-width:calc(100vw - 24px);min-width:0}
  .toast-layer{left:12px;right:12px;align-items:center}

  /* 房态板触控友好 */
  .room-grid{grid-template-columns:repeat(auto-fill,minmax(96px,1fr))}

  /* 登录页（手机）：左栏隐藏 → 卡片毛玻璃透出宇宙粒子 + 紧凑品牌行 */
  .m-brand{display:flex}
  .login-right{padding:24px 16px}
  .login-card{background:rgba(255,255,255,.88);backdrop-filter:blur(14px);-webkit-backdrop-filter:blur(14px)}
  html.theme-dark .login-card{background:linear-gradient(180deg,rgba(33,39,65,.86),rgba(27,32,48,.9))}
  .login-map-card{background:rgba(255,255,255,.55);backdrop-filter:blur(10px);-webkit-backdrop-filter:blur(10px)}
}

/* ---------- 小屏手机（≤420px） ---------- */
@media(max-width:420px){
  .page{padding:10px 10px 32px}
  .sync-pill{display:none}
  .store-switch select{max-width:84px}
  .btn{padding:9px 14px}
  .btn-sm{padding:6px 10px}
  .icon-btn{width:34px;height:34px}
  .login-actions{flex-direction:column;align-items:stretch}
  .room-grid{grid-template-columns:repeat(auto-fill,minmax(84px,1fr))}
}


/* ===========================================================
   夜间模式（html.theme-dark）· Safari/WebKit 兼容优化
   =========================================================== */
:root{color-scheme:light}
html{-webkit-text-size-adjust:100%}
*{-webkit-tap-highlight-color:transparent}
html.theme-dark{
  color-scheme:dark;
  --bg:#0f1119; --bg-2:#161926; --card:#1d2233; --card-2:#232a40;
  --line:#2f3550; --line-2:#293050;
  --txt:#e8eaf2; --txt-2:#a9b0c6; --muted:#737a92;
  --primary:#7b7bf0; --primary-2:#9595f7; --primary-soft:#2e3058;
  --primary-deep:#6a6ae0;
  --accent:#26b8cd; --accent-soft:#0f323a;
  --ok:#2dd4bf; --ok-soft:#11322d;
  --warn:#f0a13c; --warn-soft:#33270f;
  --danger:#f2555a; --danger-soft:#391a1d;
  --info:#6d87f7; --info-soft:#1c2447;
  --purple:#a78bfa; --purple-soft:#292140;
  --gold:#d4a276;
  --up:#f2666b; --down:#2dd4bf;
  --ok-txt:#5eead4; --warn-txt:#fbbf6b; --warn-txt-strong:#fcd34d;
  --info-txt:#9db1fb; --purple-txt:#c4b5fd; --accent-txt:#5eeaf4;
  --danger-txt:#fca5a5; --danger-bd:#57272a;
  --muted-soft:#232838; --warn-bd:#4a3a14;
  --scroll:#333849; --scroll-h:#454b60;
  --st-ok-bg:#0c3a2b; --st-ok-bd:#25a377;
  --st-info-bg:#16244f; --st-info-bd:#5172f5;
  --st-purple-bg:#241a52; --st-purple-bd:#8763f0;
  --st-warn-bg:#3a2a08; --st-warn-bd:#cf8f22;
  --st-muted-bg:#232a3d; --st-muted-bd:#4d566e;
  --st-accent-bg:#093641; --st-accent-bd:#23a5bc;
  --st-occupy-bg:#3b3413; --st-occupy-bd:#c9a93f; --st-occupy-txt:#f2de9b;
  --st-vacant-bg:#222a36; --st-vacant-bd:#3c4657; --st-vacant-txt:#9aa4b5;
  --st-locked-bg:#12293f; --st-locked-bd:#4e90c4; --st-locked-txt:#9fd0f5;
  --st-out-bg:#262a33; --st-out-bd:#565c69; --st-out-txt:#aeb4c0;
  --st-danger-bg:#421519; --st-danger-bd:#c0454c;
  --login-grad:linear-gradient(135deg,#161927 0%,#141726 55%,#12202a 100%);
  --sh-1:0 1px 2px rgba(0,0,0,.35), 0 1px 3px rgba(0,0,0,.3);
  --sh-2:0 4px 16px rgba(0,0,0,.45);
  --sh-3:0 18px 50px rgba(0,0,0,.6);
}
html.theme-dark body{background:var(--bg);color:var(--txt)}
html.theme-dark .modal-mask{background:rgba(0,0,0,.62)}
html.theme-dark .side-mask{background:rgba(0,0,0,.62)}
html.theme-dark .brand-logo,
html.theme-dark .avatar{box-shadow:0 10px 24px rgba(0,0,0,.45)}
html.theme-dark .role-card.on{box-shadow:0 0 0 3px rgba(123,123,240,.22)}
html.theme-dark .input:focus,
html.theme-dark .select:focus,
html.theme-dark .textarea:focus{box-shadow:0 0 0 3px rgba(123,123,240,.16)}
html.theme-dark ::selection{background:rgba(123,123,240,.4)}
html.theme-dark .stat svg text,
html.theme-dark svg.chart text{fill:var(--txt-2)}
html.theme-dark .room{box-shadow:none}
html.theme-dark .toast{box-shadow:var(--sh-2)}

/* ---------------- Safari / WebKit 专项 ---------------- */
@supports (-webkit-touch-callout:none){
  /* iOS Safari：输入框聚焦不放大（字号<16px 会触发自动缩放） */
  .input,.select,.textarea,.store-switch select{font-size:16px}
  /* iOS 弹性滚动 */
  .nav,.page,.tbl-wrap,.modal-body,.role-grid{-webkit-overflow-scrolling:touch}
}
/* Safari 100vh 视口修正（工具栏遮挡） */
@supports (height:-webkit-fill-available){
  .app{height:100vh;height:-webkit-fill-available}
  .login-wrap{min-height:100vh;min-height:-webkit-fill-available}
}
/* Safari 日期输入对齐 */
input[type="date"]{-webkit-appearance:none;appearance:none;min-height:34px}
input[type="date"]::-webkit-calendar-picker-indicator{cursor:pointer}
/* Safari 数字输入箭头 */
input[type="number"]::-webkit-inner-spin-button,
input[type="number"]::-webkit-outer-spin-button{-webkit-appearance:none;margin:0}
input[type="number"]{-moz-appearance:textfield;appearance:textfield}
/* 触屏设备点击反馈 */
@media (hover:none){
  .nav-item:active{background:var(--primary-soft)}
  .icon-btn:active,.btn:active{transform:scale(.97)}
}
/* 图表深浅色适配元素 */
svg.chart .chart-dot{fill:var(--card)}
svg.chart .chart-ring-track{stroke:var(--line-2)}
/* 主题切换按钮 */
#themeBtn{transition:transform .15s}
#themeBtn:hover{transform:rotate(12deg)}

/* ===========================================================
   夜间模式质感增强 v2
   =========================================================== */
html.theme-dark body{
  background:
    radial-gradient(1100px 700px at 85% -10%, rgba(123,123,240,.10), transparent 60%),
    radial-gradient(900px 600px at -10% 100%, rgba(38,184,205,.07), transparent 55%),
    var(--bg);
}
html.theme-dark .sidebar,
html.theme-dark .topbar{
  background:rgba(26,30,46,.82);
  -webkit-backdrop-filter:blur(14px);
  backdrop-filter:blur(14px);
}
html.theme-dark .stat,
html.theme-dark .card{background:linear-gradient(180deg,#212741,#1c2233)}
html.theme-dark .stat:hover{box-shadow:0 8px 24px rgba(0,0,0,.45);transform:translateY(-1px)}
html.theme-dark .modal{background:linear-gradient(180deg,#232a44,#1c2233)}
html.theme-dark .login-card{background:linear-gradient(180deg,#212741,#1b2030)}
html.theme-dark .btn-primary{
  background:linear-gradient(135deg,#8a8af8,#5f6af0);
  border-color:transparent;
  box-shadow:0 4px 16px rgba(123,123,240,.30);
}
html.theme-dark .btn-primary:hover{background:linear-gradient(135deg,#9a9afa,#6d76f4);box-shadow:0 6px 20px rgba(123,123,240,.42)}
html.theme-dark .btn-primary:hover{background:linear-gradient(135deg,#9a9afa,#6d76f4)}
html.theme-dark .room{box-shadow:inset 0 1px 0 rgba(255,255,255,.03)}
html.theme-dark .room:hover{box-shadow:0 8px 22px rgba(0,0,0,.5)}
html.theme-dark .room:after{box-shadow:0 0 7px rgba(255,255,255,.22)}
html.theme-dark .badge{font-weight:600}
html.theme-dark .nav-item.active{box-shadow:inset 2px 0 0 var(--primary-2)}
html.theme-dark .tbl th{background:var(--bg-2);color:var(--txt-2)}
html.theme-dark .sync-pill .dot{box-shadow:0 0 6px currentColor}
html.theme-dark .login-feats li{background:rgba(33,39,65,.6)}
html.theme-dark ::-webkit-scrollbar-thumb{background:#3e4560}
html.theme-dark ::-webkit-scrollbar-thumb:hover{background:#4c5475}

/* ===========================================================
   房态看板 · 楼层分组 + 出租率堆叠条
   =========================================================== */
.floor-block{margin-bottom:14px}
.floor-block:last-child{margin-bottom:2px}
.floor-head{display:flex;align-items:center;gap:9px;margin-bottom:7px}
.floor-tag{display:inline-flex;align-items:center;justify-content:center;min-width:34px;height:22px;padding:0 7px;
  border-radius:6px;background:var(--primary-soft);color:var(--primary);font-size:11.5px;font-weight:700;letter-spacing:.5px}
.floor-sum{font-size:11px;color:var(--muted);min-width:0;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.occ-bar{display:flex;height:9px;border-radius:6px;overflow:hidden;gap:2px;background:transparent}
.occ-seg{display:block;height:100%;min-width:3px;border-radius:2px;transition:width .3s}
.occ-seg[data-st=入住],.occ-seg[data-st=已入住]{background:var(--st-occupy-bd)}
.occ-seg[data-st=预订]{background:var(--purple)}
.occ-seg[data-st=脏房],.occ-seg[data-st=退房]{background:var(--st-out-bd)}
.occ-seg[data-st=维修]{background:var(--danger)}
.occ-seg[data-st=锁房]{background:var(--st-locked-bd)}
.occ-seg[data-st=预留]{background:var(--accent)}
.occ-seg[data-st=空房],.occ-seg[data-st=未入住]{background:var(--st-vacant-bd)}

/* ===========================================================
   登录页 · 微信扫码
   =========================================================== */
.wx-box{display:flex;flex-direction:column;align-items:center;gap:10px}
.wx-qr-wrap{position:relative;width:198px;height:198px;border:1px solid var(--line);border-radius:14px;
  background:var(--card);padding:13px;box-shadow:var(--sh-1);overflow:hidden}
.wx-qr{width:100%;height:100%;position:relative}
.wx-qr svg{width:100%;height:100%;display:block}
.wx-logo{position:absolute;left:50%;top:50%;transform:translate(-50%,-50%);width:44px;height:44px;border-radius:12px;
  background:#09b83e;display:flex;align-items:center;justify-content:center;box-shadow:0 3px 10px rgba(9,184,62,.35);border:3px solid #fff}
.wx-logo svg{width:30px;height:30px}
.wx-scanline{position:absolute;left:8px;right:8px;top:14px;height:34px;border-radius:8px;pointer-events:none;
  background:linear-gradient(180deg,rgba(9,184,62,0),rgba(9,184,62,.18) 55%,rgba(9,184,62,.30));
  border-bottom:2px solid rgba(9,184,62,.75);
  animation:wx-scan 2.4s ease-in-out infinite alternate}
.wx-qr-wrap.scanned .wx-scanline{display:none}
@keyframes wx-scan{from{top:14px}to{top:150px}}
.wx-qr-mask{position:absolute;inset:0;background:rgba(255,255,255,.93);display:flex;flex-direction:column;
  align-items:center;justify-content:center;gap:8px;border-radius:12px;font-size:13px;font-weight:600;color:var(--txt)}
html.theme-dark .wx-qr-mask{background:rgba(24,28,44,.93)}
.wx-ok-icon{width:46px;height:46px;border-radius:50%;display:flex;align-items:center;justify-content:center;
  font-size:24px;font-weight:700;color:#fff;animation:wx-pop .35s cubic-bezier(.34,1.56,.64,1)}
.wx-ok-icon.scan{background:var(--info)}
.wx-ok-icon.ok{background:var(--ok)}
@keyframes wx-pop{from{transform:scale(.4);opacity:0}to{transform:scale(1);opacity:1}}
.wx-state{display:flex;align-items:center;gap:8px;font-size:12.5px;color:var(--txt-2)}
.wx-state.scanned{color:var(--info);font-weight:600}
.wx-state.done{color:var(--ok);font-weight:600}
.wx-dot{width:8px;height:8px;border-radius:50%;background:#09b83e;flex:none;animation:wx-blink 1.4s ease-in-out infinite}
.wx-state.scanned .wx-dot{background:var(--info)}
.wx-state.done .wx-dot{background:var(--ok);animation:none}
@keyframes wx-blink{0%,100%{opacity:1}50%{opacity:.25}}
.wx-confirm{font-size:12px;color:var(--info);background:var(--info-soft);border:1px solid var(--line);
  border-radius:8px;padding:5px 12px}

/* ===========================================================
   现场附件（照片 / 视频）· media.js
   =========================================================== */
.mfield{margin-top:12px}
.mfield-t{font-size:12px;color:var(--txt-2);font-weight:600;margin-bottom:2px}
.media-picker{margin-top:6px}
.media-picker .btn[disabled]{opacity:.45;cursor:not-allowed}
.media-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(102px,1fr));gap:8px;margin:8px 0}
.media-cell{position:relative;margin:0;border:1px solid var(--line);border-radius:var(--r);overflow:hidden;
  background:var(--card-2);cursor:pointer;transition:box-shadow .15s,border-color .15s}
.media-cell:hover{border-color:var(--primary-2);box-shadow:var(--sh-1)}
.media-cell img{display:block;width:100%;height:74px;object-fit:cover;background:#e9ebf2}
.media-cell figcaption{display:flex;justify-content:space-between;gap:6px;padding:3px 6px;font-size:10px;color:var(--muted);line-height:1.5}
.media-cell figcaption b{font-weight:500;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;min-width:0}
.media-cell figcaption i{font-style:normal;flex:none;font-family:var(--mono)}
.media-play{position:absolute;top:24px;left:50%;transform:translateX(-50%);width:26px;height:26px;line-height:26px;
  text-align:center;border-radius:50%;background:rgba(20,24,40,.62);color:#fff;font-size:11px}
.media-dur{position:absolute;top:4px;left:4px;padding:0 4px;border-radius:4px;background:rgba(20,24,40,.62);
  color:#fff;font-size:10px;font-family:var(--mono)}
.media-tag{position:absolute;top:4px;left:4px;padding:0 5px;border-radius:4px;background:rgba(20,24,40,.55);
  color:#fff;font-size:10px}
.media-del{position:absolute;top:3px;right:3px;width:18px;height:18px;line-height:16px;padding:0;border:0;
  border-radius:50%;background:rgba(20,24,40,.6);color:#fff;font-size:13px;cursor:pointer}
.media-del:hover{background:var(--danger)}
.media-cell.is-busy{display:flex;align-items:center;justify-content:center;height:74px;font-size:11px;
  color:var(--muted);border-style:dashed;cursor:default;background:var(--card)}
.media-empty{grid-column:1/-1;padding:14px;border:1px dashed var(--line);border-radius:var(--r);
  color:var(--muted);font-size:12px;text-align:center;background:var(--card-2)}
.media-view{text-align:center}
.media-view img,.media-view video{display:block;margin:0 auto;max-width:100%;max-height:54vh;border-radius:var(--r);background:#0f1220}
.media-loading{padding:26px;color:var(--muted);font-size:12px}
.kv-media{margin-top:12px;border-top:1px solid var(--line-2);padding-top:10px}
.warn-txt{color:var(--warn-txt)}

/* ===========================================================
   集团经营大屏（group.bigscreen）— 恒深色，不随主题切换，
   适合总部 / 门店电视投屏。仅作用于 .bs-root 内部，不污染其他页面。
   =========================================================== */
.bs-root{--bs-bg:#0b0e1c;--bs-panel:rgba(255,255,255,.045);--bs-line:rgba(255,255,255,.09);
  --bs-txt:#eef1fb;--bs-txt-2:#9aa3c3;--bs-accent:#7c7cff;--bs-ok:#2dd4a7;--bs-warn:#f5b14c;--bs-danger:#ff5d6c;
  position:relative;min-height:calc(100vh - 60px);margin:-18px -20px -40px;padding:22px 22px 14px;border-radius:0;
  background:radial-gradient(1100px 520px at 78% -8%,rgba(124,124,255,.16),transparent 62%),
             radial-gradient(900px 480px at 8% 108%,rgba(45,212,167,.10),transparent 60%),var(--bs-bg);
  color:var(--bs-txt);overflow:hidden}
.bs-root h2{font-size:clamp(17px,1.6vw,24px);font-weight:800;letter-spacing:.5px;margin:0;color:var(--bs-txt)}
.bs-head{display:flex;justify-content:space-between;align-items:flex-start;gap:14px;flex-wrap:wrap;
  padding-bottom:14px;border-bottom:1px solid var(--bs-line)}
.bs-brand{display:flex;gap:12px;align-items:center}
.bs-logo{width:44px;height:44px;border-radius:12px;display:flex;align-items:center;justify-content:center;
  overflow:hidden;background:#fff;box-shadow:0 0 22px rgba(124,124,255,.45)}
.bs-logo img{width:100%;height:100%;object-fit:contain;display:block}
.bs-sub{font-size:12px;color:var(--bs-txt-2);margin-top:3px;letter-spacing:.3px}
.bs-head-r{display:flex;align-items:center;gap:14px}
.bs-clock{font-size:clamp(26px,2.6vw,40px);font-weight:800;font-variant-numeric:tabular-nums;
  color:var(--bs-txt);letter-spacing:1px;line-height:1}
.bs-date{font-size:12px;color:var(--bs-txt-2);text-align:right;min-width:150px}
.bs-btns{display:flex;gap:8px}
.bs-btn{background:rgba(255,255,255,.07);border:1px solid var(--bs-line);color:var(--bs-txt)}
.bs-btn:hover{background:rgba(124,124,255,.25);border-color:var(--bs-accent)}
.bs-stats{display:grid;grid-template-columns:repeat(5,1fr);gap:12px;margin-top:16px}
.bs-stat{background:var(--bs-panel);border:1px solid var(--bs-line);border-radius:14px;padding:14px 16px;
  position:relative;overflow:hidden}
.bs-stat:after{content:'';position:absolute;inset:0 0 auto 0;height:2px;background:var(--bs-accent);opacity:.7}
.bs-stat.up:after{background:var(--bs-ok)}.bs-stat.down:after{background:var(--bs-warn)}
.bs-stat.ok:after{background:var(--bs-ok)}.bs-stat.danger:after{background:var(--bs-danger)}
.bs-stat.accent:after{background:var(--bs-accent)}
.bs-stat-label{font-size:12px;color:var(--bs-txt-2);letter-spacing:1px}
.bs-stat-val{font-size:clamp(24px,2.4vw,38px);font-weight:800;font-variant-numeric:tabular-nums;
  color:var(--bs-txt);margin-top:6px;line-height:1.1;text-shadow:0 0 18px rgba(124,124,255,.25)}
.bs-stat.danger .bs-stat-val{color:var(--bs-danger);text-shadow:0 0 18px rgba(255,93,108,.35)}
.bs-stat.ok .bs-stat-val{color:var(--bs-ok)}
.bs-stat-unit{font-size:14px;font-weight:600;color:var(--bs-txt-2);margin-left:4px}
.bs-stat-sub{font-size:11.5px;color:var(--bs-txt-2);margin-top:6px}
.bs-grid{display:grid;grid-template-columns:1.5fr 1fr 1.3fr;gap:12px;margin-top:12px}
.bs-panel{background:var(--bs-panel);border:1px solid var(--bs-line);border-radius:14px;padding:14px 16px}
.bs-panel h4{margin:0 0 10px;font-size:13px;font-weight:700;color:var(--bs-txt-2);letter-spacing:1px}
.bs-root svg.chart text{fill:#8f99bb}
.bs-ch-legend{display:flex;flex-wrap:wrap;gap:6px 12px;margin-top:8px;font-size:11.5px;color:var(--bs-txt-2)}
.bs-ch-legend span{display:inline-flex;align-items:center;gap:5px}
.bs-ch-legend i{width:9px;height:9px;border-radius:3px;display:inline-block}
.bs-rank-list{display:flex;flex-direction:column;gap:9px}
/* 15 家门店上榜时压缩行距，保证一屏放得下（今日门店营收排行） */
.bs-rank-list.dense{gap:6px}
.bs-rank-list.dense .bs-rank-row{font-size:12px}
.bs-rank-list.dense .bs-rank-no{width:20px;height:20px;border-radius:6px;font-size:11px}
.bs-rank-row{display:grid;grid-template-columns:26px 86px 1fr auto 44px;align-items:center;gap:9px;font-size:12.5px}
.bs-rank-no{width:22px;height:22px;border-radius:7px;display:flex;align-items:center;justify-content:center;
  font-weight:800;font-size:12px;background:rgba(255,255,255,.08);color:var(--bs-txt-2)}
.bs-rank-no.top1{background:linear-gradient(135deg,#ffd166,#f59f00);color:#3d2c00}
.bs-rank-no.top2{background:linear-gradient(135deg,#cfd8ea,#93a1bd);color:#1c2436}
.bs-rank-no.top3{background:linear-gradient(135deg,#f0a97e,#c9713d);color:#3a1d07}
.bs-rank-name{color:var(--bs-txt);white-space:nowrap;overflow:hidden;text-overflow:ellipsis;font-weight:600}
.bs-rank-bar{height:9px;border-radius:5px;background:rgba(255,255,255,.07);overflow:hidden}
.bs-rank-bar i{display:block;height:100%;border-radius:5px;
  background:linear-gradient(90deg,rgba(124,124,255,.55),#7c7cff);transition:width .9s ease}
.bs-rank-val{font-variant-numeric:tabular-nums;font-weight:700;color:var(--bs-txt)}
.bs-rank-occ{color:var(--bs-txt-2);font-size:11.5px;text-align:right}
.bs-p-map,.bs-p-alert{grid-column:1 / -1;margin-top:0}
/* 宝寓外部订单实时接入条（真实同步数据 · 横贯整行） */
.bs-p-bypms{grid-column:1 / -1;margin-top:0}
.bs-ext{display:flex;align-items:center;gap:26px;flex-wrap:wrap}
.bs-ext-cell{display:flex;flex-direction:column;gap:3px;min-width:92px}
.bs-ext-cell span{font-size:11.5px;color:var(--bs-txt-2);letter-spacing:1px}
.bs-ext-cell b{font-size:24px;font-weight:800;color:var(--bs-txt);font-variant-numeric:tabular-nums;line-height:1.1}
.bs-ext-cell b i{font-size:11px;font-style:normal;font-weight:600;color:var(--bs-txt-2);margin-left:3px}
.bs-ext-cell.acc b{color:var(--bs-accent)}
.bs-ext-ch{margin-left:auto;display:flex;align-items:center;gap:16px;flex-wrap:wrap;font-size:12px;color:var(--bs-txt-2)}
.bs-ext-ch b{color:var(--bs-txt);font-weight:700;margin-left:2px}
.bs-ext-stores{display:flex;gap:8px;flex-wrap:wrap;margin-top:11px}
.bs-ext-chip{font-size:11.5px;color:var(--bs-txt-2);background:rgba(255,255,255,.05);border:1px solid var(--bs-line);
  border-radius:8px;padding:4px 9px;white-space:nowrap}
.bs-ext-chip b{color:var(--bs-txt);font-weight:700}
.bs-ext-note{margin-top:9px;font-size:11px;color:var(--bs-txt-2);letter-spacing:.3px;opacity:.85}
.bs-ext-note b{color:var(--bs-warn)}
.bs-ext-empty{font-size:13px;color:var(--bs-txt-2);padding:14px 0}
.bs-p-map #chinaMap{background:rgba(255,255,255,.03);border-radius:10px}
/* 经营大屏栏目拖拽排序 */
.bs-grip{display:inline-flex;align-items:center;justify-content:center;width:18px;height:18px;margin-right:7px;
  border-radius:5px;cursor:grab;color:var(--bs-txt-2);user-select:none;opacity:.6;transition:.15s;
  font-size:12px;line-height:1;vertical-align:1px}
.bs-grip:hover{opacity:1;background:rgba(124,124,255,.18);color:var(--bs-accent)}
.bs-grip:active{cursor:grabbing}
.bs-panel.dragging{opacity:.4;pointer-events:none}
.bs-panel:not(.dragging):hover{box-shadow:0 6px 22px rgba(0,0,0,.28)}
.bs-ticker{overflow:hidden;position:relative;mask-image:linear-gradient(90deg,transparent,#000 4%,#000 96%,transparent);
  -webkit-mask-image:linear-gradient(90deg,transparent,#000 4%,#000 96%,transparent)}
.bs-ticker-in{display:inline-flex;align-items:center;gap:26px;white-space:nowrap;animation:bs-marquee 150s linear infinite;
  padding:4px 0}
.bs-tk{display:inline-flex;align-items:center;gap:7px;font-size:13px;color:var(--bs-txt)}
.bs-tk em{font-style:normal;color:var(--bs-txt-2);font-size:12px}
.bs-ai{width:18px;height:18px;border-radius:6px;display:inline-flex;align-items:center;justify-content:center;
  font-size:11px;font-weight:800;font-style:normal;flex:none}
.bs-ai.danger{background:rgba(255,93,108,.18);color:var(--bs-danger)}
.bs-ai.warn{background:rgba(245,177,76,.18);color:var(--bs-warn)}
.bs-ai.info{background:rgba(124,124,255,.18);color:#a5a5ff}
.bs-ai.ok{background:rgba(45,212,167,.18);color:var(--bs-ok)}
.bs-sep{color:rgba(255,255,255,.22);font-size:9px}
@keyframes bs-marquee{from{transform:translateX(0)}to{transform:translateX(-50%)}}
.bs-foot{margin-top:12px;padding-top:10px;border-top:1px solid var(--bs-line);
  font-size:11.5px;color:var(--bs-txt-2);text-align:center;letter-spacing:.5px}
@media (max-width:1100px){
  .bs-root{margin:-12px -12px -36px;padding:16px 14px 12px}
  .bs-stats{grid-template-columns:repeat(2,1fr)}
  .bs-grid{grid-template-columns:1fr}
  /* min-width:0 —— grid 子项默认 min-width:auto，长店名会把整行顶宽，
     配合 .bs-root 的 overflow:hidden，最右边的「数值」列会被裁掉（手机端实测） */
  .bs-grid,.bs-panel,.bs-rank-list,.bs-rank-row{min-width:0}
  .bs-rank-row{grid-template-columns:26px minmax(0,1fr) auto;grid-template-areas:"no name val" "bar bar bar";
    row-gap:6px;column-gap:8px}
  .bs-rank-no{grid-area:no}
  .bs-rank-name{grid-area:name;min-width:0}
  .bs-rank-val{grid-area:val;white-space:nowrap}
  .bs-rank-bar{grid-area:bar;height:6px}
  .bs-rank-occ{display:none}
}
/* 手机端：门店名 + 金额放同一行（金额永远右对齐可见），进度条单独占一行 */
@media (max-width:640px){
  .bs-root{margin:-10px -10px -32px;padding:12px 10px 10px}
  .bs-rank-list{gap:10px}
  .bs-rank-row{font-size:13px}
  .bs-rank-val{font-size:13.5px}
  .bs-rank-name{font-weight:700}
}
@media (prefers-reduced-motion:reduce){.bs-ticker-in{animation:none}}

/* ===========================================================
   房型实拍图管理（门店上传本店图 / 集团标准图）v2026091905
   =========================================================== */
.rp-cell{display:flex;align-items:center;gap:8px;padding:4px 6px;border:1px solid var(--line);
  border-radius:8px;background:var(--card-2);cursor:pointer;transition:border-color .15s,box-shadow .15s}
.rp-cell:hover{border-color:var(--primary-2);box-shadow:var(--sh-1)}
.rp-thumb{display:block;width:52px;height:36px;object-fit:cover;border-radius:6px;background:#e9ebf2;flex:none}
.rp-thumb.is-dead{background:linear-gradient(135deg,#dfe3f0,#eceff8)}
.rp-thumb.is-empty{display:flex;align-items:center;justify-content:center;font-size:11px;
  color:var(--muted);border:1px dashed var(--line);background:transparent}
.rp-meta{display:flex;flex-direction:column;gap:2px;min-width:0}
.rp-bar{background:var(--primary-soft);border-left:3px solid var(--primary-2);border-radius:0 8px 8px 0;
  padding:10px 13px;font-size:12px;color:var(--txt-2);line-height:1.7}
.rp-warn{margin-top:10px;background:var(--warn-soft);border-left:3px solid var(--warn);
  border-radius:0 8px 8px 0;padding:10px 13px;font-size:12px;color:var(--warn-txt-strong)}
.rp-sec{margin-top:16px}
.rp-sec>b{display:block;margin-bottom:8px;font-size:12px;color:var(--txt)}
.rp-live{display:flex;gap:12px;align-items:center;padding:10px;border:1px solid var(--line);
  border-radius:var(--r);background:var(--card-2)}
.rp-live img{width:150px;height:94px;object-fit:cover;border-radius:8px;background:#e9ebf2;flex:none}
.rp-live img.is-dead{background:linear-gradient(135deg,#dfe3f0,#eceff8)}
.rp-live-t{margin-top:6px;font-size:12px;color:var(--txt);font-weight:500}
.rp-log{list-style:none;margin:0;padding:0;border:1px solid var(--line);border-radius:var(--r);overflow:hidden}
.rp-log li{display:flex;align-items:center;gap:10px;padding:7px 11px;font-size:12px;
  border-bottom:1px solid var(--line-2);background:var(--card)}
.rp-log li:last-child{border-bottom:0}
.rp-log b{font-weight:600;color:var(--txt);flex:none}
.rp-log span{flex:1;min-width:0;color:var(--txt-2);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.rp-log i{font-style:normal;flex:none;color:var(--muted);font-size:11px}
.rp-view{display:flex;align-items:center;justify-content:center;background:var(--bg-2);border-radius:var(--r);padding:10px}
.rp-view img{max-width:100%;max-height:56vh;border-radius:8px;object-fit:contain}
.rp-view img.is-dead{display:none}
/* 云存储不可用时弱化上传按钮 —— 但保留可点击，点了要能看到原因（不能只是点不动） */
.btn.is-disabled{opacity:.55}
html.theme-dark .rp-thumb,html.theme-dark .rp-live img{background:#2a3048}
html.theme-dark .rp-thumb.is-dead,html.theme-dark .rp-live img.is-dead{background:linear-gradient(135deg,#252b42,#2e3550)}

/* ---------------- 进销存：入库/出库/校正 多行明细 + 盘点逐项录入 ---------------- */
.iv-row{display:flex;align-items:center;gap:8px;margin-bottom:8px}
.iv-row .select{flex:1;min-width:0}
.iv-row .input{width:110px;flex:none}
.iv-row .btn{flex:none;width:32px;padding:0;color:var(--muted)}
.iv-row .btn:hover{color:var(--danger)}
.iv-head{display:flex;align-items:center;gap:8px;margin:12px 0 6px}
.iv-head b{font-size:13px}
.iv-count{max-height:46vh;overflow:auto;border:1px solid var(--line);border-radius:10px}
.iv-crow{display:flex;align-items:center;gap:10px;padding:9px 12px;border-bottom:1px solid var(--line)}
.iv-crow:last-child{border-bottom:none}
.iv-crow:nth-child(odd){background:var(--card-2)}
.iv-cname{flex:1;min-width:0;display:flex;flex-direction:column;gap:2px}
.iv-cname b{font-size:13px}
.iv-cname em{font-style:normal}
.iv-crow .input{width:96px;flex:none;text-align:right}
html.theme-dark .iv-crow:nth-child(odd){background:rgba(255,255,255,.03)}
@media (max-width:720px){ .iv-row{flex-wrap:wrap} .iv-row .input{width:100%} }

/* ============ 售后工单改版（mt-*，2026-10-10）============
   只补「视觉态」，不碰任何既有选择器 —— 纵���卡片沿用评价模块那套 .rv-card /
   .rv-head / .rv-meta / .rv-acts，筛选沿用 .chip-row / .chip，排行沿用 .rank-list。
   这里仅给「可点击统计卡」补 hover / 选中态，以及给整卡可点补 cursor。 */
.stat.mt-click{cursor:pointer;transition:box-shadow .15s,transform .15s}
.stat.mt-click:hover{box-shadow:var(--sh-2);transform:translateY(-2px)}
.stat.mt-click.on{box-shadow:0 0 0 2px var(--primary) inset}
.rv-card[data-mt-card]{cursor:pointer}
@media (max-width:720px){ .stat.mt-click:hover{transform:none} }

/* ============ 可搜索人员选择（U.personPicker，2026-10-17）============
   输入姓氏即筛（子串匹配），面板绝对定位浮在字段下方，不撑开排版。 */
.pp{position:relative}
.pp .pp-input{padding-right:28px}
.pp::after{content:'⌕';position:absolute;right:10px;top:9px;color:var(--muted);font-size:14px;line-height:1;pointer-events:none}
.pp-panel{display:none;position:absolute;left:0;right:0;top:calc(100% + 4px);z-index:80;
  max-height:236px;overflow:auto;padding:4px;background:var(--card);
  border:1px solid var(--line);border-radius:10px;box-shadow:0 10px 28px rgba(28,32,51,.16)}
.pp-panel.show{display:block}
/* 字段靠近弹窗/视口底部时向上展开（modal-body 有 overflow:auto，向下弹会被裁掉） */
.pp-panel.up{top:auto;bottom:calc(100% + 4px)}
.pp-opt{padding:7px 10px;border-radius:7px;font-size:13px;color:var(--txt);cursor:pointer;
  white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.pp-opt:hover,.pp-opt.on{background:var(--primary-soft);color:var(--primary-deep)}
.pp-empty{padding:10px;text-align:center;color:var(--muted);font-size:12px}
html.theme-dark .pp-panel{box-shadow:0 12px 30px rgba(0,0,0,.5)}

/* 员工中心「我的职级」标红（戳1994）：label 与数值都用危险色，一眼能看见 */
.stat-red{color:var(--danger);font-weight:700}
.stat-label .stat-red{font-weight:600}

/* ===========================================================
   房态日历矩阵（2026-10-20 改版：参考宝寓「实时房态」）
   行 = 房间（按房型/楼层分组），列 = 日期，色块横跨连住天数
   =========================================================== */
.seg-tabs{display:inline-flex;border:1px solid var(--line);border-radius:8px;overflow:hidden;background:var(--card)}
.seg-tabs .seg{border:0;background:transparent;color:var(--txt-2);font:inherit;font-size:12px;
  padding:5px 10px;cursor:pointer;white-space:nowrap}
.seg-tabs .seg+.seg{border-left:1px solid var(--line)}
.seg-tabs .seg.on{background:var(--primary);color:#fff;font-weight:600}
.seg-tabs .seg:hover:not(.on){background:var(--primary-soft);color:var(--primary-deep)}

.tl-wrap{border:1px solid var(--line);border-radius:10px;overflow:hidden;background:var(--card);
  --tl-min:168px;   /* 单日列最小宽度（2026-10-20 放大：要能看清平台/姓名/价格） */
  --tl-lab:196px;   /* 左侧房号列宽度 */
  --tl-row:62px;    /* 单行高度（放大色块） */
  --tl-sep:rgba(0,0,0,.16);   /* 订单之间的分界色（浅色主题） */
  --tl-grid:var(--line)}      /* 空房格线 */
html.theme-dark .tl-wrap{--tl-sep:rgba(255,255,255,.18)}
.tl-scroll{overflow-x:auto;overflow-y:visible;scrollbar-width:thin;-webkit-overflow-scrolling:touch}
.tl-inner{min-width:calc(var(--tl-lab) + var(--n) * var(--tl-min))}
.tl-hrow,.tl-row{display:flex;align-items:stretch}
.tl-row{min-height:var(--tl-row)}
.tl-corner,.tl-rm{flex:0 0 var(--tl-lab);width:var(--tl-lab);position:sticky;left:0;z-index:3;background:var(--card);
  border-right:1px solid var(--line);display:flex;flex-direction:column;justify-content:center}
.tl-corner{background:var(--card-2);color:var(--muted);font-size:11.5px;padding:8px 10px;
  border-bottom:1px solid var(--line);font-weight:600}
.tl-days,.tl-track{flex:1;display:grid;grid-template-columns:repeat(var(--n),minmax(var(--tl-min),1fr))}
.tl-d{border-bottom:1px solid var(--line);border-right:1px solid var(--line-2);
  padding:6px 6px 5px;text-align:center;background:var(--card-2);line-height:1.35}
.tl-d b{display:block;font-size:12px;color:var(--txt);font-family:var(--mono)}
.tl-d i{display:block;font-style:normal;font-size:10.5px;color:var(--muted)}
.tl-d em{display:block;font-style:normal;font-size:10.5px;color:var(--txt-2);white-space:nowrap}
.tl-d.is-weekend{background:var(--bg-2)}
.tl-d.is-today{background:#e5484d;box-shadow:inset 0 -2px 0 #c93b40}
.tl-d.is-today b,.tl-d.is-today i,.tl-d.is-today em{color:#fff}


.tl-grp{display:flex;align-items:center;gap:10px;padding:5px 10px;background:var(--bg-2);
  border-bottom:1px solid var(--line);border-top:1px solid var(--line);position:sticky;left:0;z-index:2}
.tl-grp b{font-size:12px;color:var(--txt)}
.tl-grp span{font-size:11px;color:var(--muted)}
.tl-row{border-bottom:1px solid var(--line-2)}
.tl-row:hover .tl-rm{background:var(--card-2)}
.tl-rm{padding:5px 10px;cursor:pointer;border-bottom:1px solid transparent}
.tl-rm b{font-size:12.5px;font-family:var(--mono);color:var(--txt);line-height:1.3}
.tl-rm span{font-size:10.5px;color:var(--muted);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.tl-row.is-nodep .tl-rm{box-shadow:inset 3px 0 0 var(--danger)}
.tl-row.is-nodep .tl-rm b{color:var(--danger-txt)}

.tl-track{position:relative;grid-template-rows:1fr;align-content:stretch;background-image:repeating-linear-gradient(to right,
  transparent 0, transparent calc(100% / var(--n) - 1px), var(--tl-grid) calc(100% / var(--n) - 1px), var(--tl-grid) calc(100% / var(--n)));
  background-size:100% 100%}
/* 整格填充，但相邻订单必须一眼分得开：
   右侧留 2px 卡片底色当作「缝」，四边再描 1px 内阴影当「框」 */
.tl-b{grid-row:1;align-self:stretch;margin:0;padding:0 7px;border:0;border-radius:0;cursor:pointer;
  box-shadow:inset -2px 0 0 var(--card),inset 0 0 0 1px var(--tl-sep);
  display:flex;align-items:center;gap:5px;overflow:hidden;
  font-size:11.5px;line-height:1.3;white-space:nowrap;min-width:0;height:100%;transition:filter .12s}
.tl-b:hover{filter:brightness(.94);box-shadow:inset -2px 0 0 var(--card),inset 0 0 0 2px var(--primary)}
.tl-b:focus-visible{outline:2px solid var(--primary);outline-offset:-2px}
/* ===========================================================
   色块内文字提醒（第 28 轮 · 用户要求）
   欠房费 / 押金未收 / 未录证件直接写在色块底部，
   不用点开、也不用去图例里找小方块。只在有提醒时出现。
   =========================================================== */
.tl-b{position:relative}
.tl-b.has-alerts{padding-bottom:16px}
/* 单晚色块只有 130px 左右：三个标签一行放不下时允许折行，
   宁可占两行也不能把「未验证」裁掉一半（截图里就是这样）。 */
.tl-b .tl-alerts{position:absolute;left:0;right:0;bottom:3px;display:flex;flex-wrap:wrap;gap:2px 3px;
  padding:0 5px;overflow:hidden;white-space:nowrap;pointer-events:none;max-height:26px}
.tl-b .tl-al{font-style:normal;font-size:9px;font-weight:800;line-height:1.55;
  padding:0 4px;border-radius:3px;flex:none;letter-spacing:0}
.tl-b .tl-al-debt{background:#fff;color:#b3261e;box-shadow:inset 0 0 0 1px #e7b4b0}
.tl-b .tl-al-dep{background:#fff3d9;color:#8a5a00}
.tl-b .tl-al-cert{background:#efe6ff;color:#5b3aa0}
html.theme-dark .tl-b .tl-al-debt{background:#3f1714;color:#ff9a90;box-shadow:inset 0 0 0 1px #6b2a26}
html.theme-dark .tl-b .tl-al-dep{background:#3a2c15;color:#f0b95c}
html.theme-dark .tl-b .tl-al-cert{background:#2c2440;color:#c3aaff}
.tl-b .tl-dot{width:7px;height:7px;border-radius:50%;flex:0 0 auto}
.tl-b .tl-ch{color:var(--txt-2);font-size:10.5px;max-width:58px;overflow:hidden;text-overflow:ellipsis}
.tl-b .tl-pr{font-family:var(--mono);font-size:11px;color:var(--txt)}
.tl-b .tl-g{flex:1;min-width:0;overflow:hidden;text-overflow:ellipsis;font-style:normal;
  color:var(--muted);font-size:10.5px;text-align:right}
/* 整格填充：直接用房态 token（浅色/深色主题各自一套），满格铺开后靠内描边分隔相邻订单 */
.tl-b-stay{background:var(--st-occupy-bg);color:var(--st-occupy-txt)}
.tl-b-stay .tl-pr{color:var(--st-occupy-txt)}
.tl-b-book{background:#f7c6c6;color:#861818}
.tl-b-book .tl-pr{color:var(--purple-txt)}
.tl-b-fix{background:#fad2d2;color:#9c1c1c}
.tl-b-lock{background:var(--st-locked-bg);color:var(--st-locked-txt)}
.tl-b-hold{background:var(--st-accent-bg);color:var(--accent-txt)}
.tl-b-dirty{background:var(--st-out-bg);color:var(--st-out-txt)}
/* 当天已退房：斜纹底，和「脏房」的纯灰区分开 */
.tl-b-out{background:repeating-linear-gradient(135deg,var(--st-out-bg) 0 7px,var(--card-2) 7px 14px);
  color:var(--st-out-txt);font-weight:600}
html.theme-dark .tl-b-out{background:repeating-linear-gradient(135deg,var(--st-out-bg) 0 7px,#2b3143 7px 14px)}
.tl-b-fix .tl-pr,.tl-b-lock .tl-pr,.tl-b-hold .tl-pr,.tl-b-dirty .tl-pr,.tl-b-out .tl-pr{color:inherit}

.tl-foot{display:flex;align-items:center;justify-content:space-between;gap:12px;flex-wrap:wrap;
  padding:8px 10px;background:var(--card-2);border-top:1px solid var(--line)}
.tl-sums{display:flex;align-items:center;gap:12px;font-size:11.5px;color:var(--txt-2);flex-wrap:wrap}
.tl-lg{display:inline-block;width:9px;height:9px;border-radius:3px;margin-right:5px;vertical-align:-1px}
.tl-lg.tl-b-stay{background:var(--st-occupy-bd)}
.tl-lg.tl-b-book{background:var(--st-purple-bd)}
.tl-lg.tl-b-fix{background:var(--st-danger-bd)}
.tl-lg.tl-b-lock{background:var(--st-locked-bd)}
.tl-lg.tl-b-dirty{background:var(--st-out-bd)}
.tl-lg.tl-b-out{background:repeating-linear-gradient(135deg,var(--st-out-bd) 0 3px,transparent 3px 6px)}
.tl-lg.tl-b-vacant{background:#fff;border:1px solid var(--line)}
/* 自适应：手机窄列 + 大屏放宽，保证「一屏能看越多天越好」又不挤字 */
@media (min-width:1600px){
  .tl-wrap{--tl-min:150px;--tl-lab:200px;--tl-row:60px}
  .tl-b{font-size:12px}
  .tl-d em{font-size:11px}
}
@media (min-width:1920px){
  .tl-wrap{--tl-min:146px;--tl-lab:210px;--tl-row:62px}
  .tl-b{padding:0 8px}
}
@media (min-width:2400px){
  .tl-wrap{--tl-min:152px;--tl-lab:220px;--tl-row:62px}
}
@media (max-width:1024px){
  .tl-wrap{--tl-min:132px;--tl-lab:130px}
  .tl-d{padding:5px 4px}
}
@media (max-width:820px){
  .tl-wrap{--tl-min:122px;--tl-lab:92px;--tl-row:60px;border-radius:8px}
  .tl-corner{font-size:10.5px;padding:7px 8px}
  .tl-corner,.tl-rm{padding-left:8px;padding-right:6px}
  .tl-rm b{font-size:12px}
  .tl-rm span{font-size:9.5px}
  .tl-d b{font-size:11px}
  .tl-d i{font-size:9px}
  .tl-d em{font-size:9px;letter-spacing:-.2px}
  /* 2026-10-20 用户要求：手机端也要能看到「平台 + 客人 + 价格」，不再隐藏渠道与客人 */
  .tl-b{padding:4px 6px;gap:2px;font-size:11px}
  .tl-b .tl-l1{font-size:10.5px}
  .tl-b .tl-l2{font-size:11.5px}
  .tl-b .tl-pr{font-size:11.5px}
  .tl-grp{padding:4px 8px}
  .tl-grp span{display:none}
  .tl-foot{gap:6px}
  .tl-sums{gap:8px;font-size:10.5px}
}
/* 手机端横向滚动提示：只在需要滑动时出现 */
.tl-swipe{display:none;align-items:center;gap:6px;font-size:11px;color:var(--muted);padding:6px 10px 0}
@media (max-width:820px){ .tl-swipe{display:flex} }

/* 手机端：工具栏与看板适配（日期控件收窄、底部说明隐藏、按钮换行不留空洞） */
@media (max-width:820px){
  .tl-foot > .xs.muted{display:none}
  .tl-foot{padding:7px 8px}
  .tl-days,.tl-track{scroll-snap-type:x proximity}
  input[name="bdDate"]{width:132px !important;font-size:12px}
  select[name="bdSpan"]{width:84px !important;font-size:12px}
  select[name="bdGroup"]{width:104px !important;font-size:12px}
  .seg-tabs .seg{padding:5px 8px;font-size:11.5px}
  #roomGrid .row .btn.btn-xs{padding:4px 7px}
}

/* OTA 评价上传入口（2026-10-20）：页面内拖拽区 + 弹窗拖拽区 */
.rv-drop{display:flex;align-items:center;gap:14px;padding:16px 18px;border:1.5px dashed var(--line);
  border-radius:12px;background:var(--card-2);transition:border-color .15s,background .15s}
.rv-drop.on{border-color:var(--primary);background:var(--primary-soft)}
.rv-drop-ico{flex:0 0 auto;width:38px;height:38px;border-radius:50%;background:var(--primary-soft);
  color:var(--primary);display:flex;align-items:center;justify-content:center;font-size:17px}
.rv-drop-txt{flex:1;min-width:0;display:flex;flex-direction:column;gap:3px}
.rv-drop-txt b{font-size:13px;color:var(--txt)}
.rv-drop-txt span{font-size:11.5px;color:var(--muted);line-height:1.6}
.rv-drop-txt a{color:var(--primary);text-decoration:underline;cursor:pointer}
.rv-drop-inline{background:linear-gradient(180deg,var(--primary-soft),var(--card-2));border-color:#cfd0f5}
.rv-drop .btn{flex:0 0 auto}
@media (max-width:720px){
  .rv-drop{flex-wrap:wrap}
  .rv-drop-txt{flex-basis:calc(100% - 56px)}
  .rv-drop .btn{width:100%}
}

/* 会员复购率排名的横条（门店排名表用） */
.rk-wrap{display:flex;align-items:center;gap:8px}
.rk-bar{flex:1;min-width:60px;max-width:120px;height:7px;border-radius:4px;background:var(--muted-soft);overflow:hidden}
.rk-bar i{display:block;height:100%;border-radius:4px;
  background:linear-gradient(90deg,var(--primary-2),var(--primary))}
.rk-wrap b{white-space:nowrap;color:var(--txt)}

/* 新订单提醒（门店房态看板右上角，2026-10-20） */
.no-toasts{position:fixed;top:64px;right:16px;z-index:1400;display:flex;flex-direction:column;gap:10px;
  width:290px;max-width:calc(100vw - 32px)}
.no-toast{background:var(--card);border:1px solid var(--line);border-left:3px solid var(--primary);
  border-radius:10px;padding:10px 12px;box-shadow:var(--sh-2);animation:noIn .28s ease-out}
@keyframes noIn{from{opacity:0;transform:translateX(18px)}to{opacity:1;transform:none}}
.no-th{display:flex;align-items:center;gap:6px;font-size:11px;color:var(--muted)}
.no-th i{font-style:normal;background:var(--primary);color:#fff;border-radius:4px;padding:0 4px;font-size:10px;line-height:16px}
.no-th b{color:var(--txt);font-size:12px}
.no-th em{margin-left:auto;font-style:normal;font-family:var(--mono)}
.no-tb{display:flex;align-items:center;gap:6px;margin-top:6px;font-size:14px}
.no-ts{font-size:11.5px;color:var(--txt-2);margin-top:2px}
.no-ta{display:flex;gap:6px;margin-top:8px}
.no-x{margin-left:6px;border:0;background:transparent;color:var(--muted);font-size:13px;line-height:1;
  cursor:pointer;padding:2px 4px;border-radius:4px}
.no-x:hover{background:var(--danger-soft);color:var(--danger)}
@media (max-width:640px){
  .no-toasts{left:10px;right:10px;width:auto;max-width:none;top:56px}
}

/* 大屏「今日门店排名」：营收 / 预订率 口径切换（2026-10-20） */
.bs-p-rank h4{display:flex;align-items:center;gap:8px;flex-wrap:wrap}
.bs-rank-kpi{font-size:12px;color:var(--bs-accent);font-weight:700;letter-spacing:.5px}
.bs-rank-tabs{margin-left:auto;display:flex;gap:4px;background:rgba(255,255,255,.06);
  border:1px solid var(--bs-line);border-radius:8px;padding:2px}
.bs-rt{border:0;background:transparent;color:var(--bs-txt-2);font:inherit;font-size:11.5px;
  padding:3px 9px;border-radius:6px;cursor:pointer;white-space:nowrap;transition:background .15s,color .15s}
.bs-rt.on{background:var(--bs-accent);color:#fff;font-weight:700}
.bs-rt:hover:not(.on){color:var(--bs-txt);background:rgba(255,255,255,.08)}
@media (max-width:640px){
  .bs-rank-kpi{display:none}
  .bs-rt{padding:4px 10px;font-size:12px}
}

/* 房态看板工具栏：视图切换与日期控件分两行（2026-10-20 用户要求） */
.bd-toolbar{display:flex;flex-direction:column;gap:8px;margin-bottom:10px}
.bd-tb-row{display:flex;align-items:center;gap:8px;flex-wrap:wrap}
.bd-tb-sum{margin-left:auto}
@media (max-width:820px){
  .bd-tb-sum{margin-left:0;flex-basis:100%}
}

/* 渠道营收结构：按金额排名的榜单（集团驾驶舱，2026-10-20） */
.ch-rank{margin-top:12px;display:flex;flex-direction:column;gap:7px}
.ch-rank-row{display:grid;grid-template-columns:22px 96px minmax(60px,1fr) auto 54px;align-items:center;gap:9px;font-size:12px}
.ch-rank-no{width:20px;height:20px;border-radius:6px;display:flex;align-items:center;justify-content:center;
  background:var(--muted-soft);color:var(--txt-2);font-size:11px;font-weight:700}
.ch-rank-no.top1{background:linear-gradient(135deg,#ffd166,#f59f00);color:#3d2c00}
.ch-rank-no.top2{background:linear-gradient(135deg,#cfd8ea,#93a1bd);color:#1c2436}
.ch-rank-no.top3{background:linear-gradient(135deg,#f0a97e,#c9713d);color:#3a1d07}
.ch-rank-name{display:flex;align-items:center;gap:6px;color:var(--txt);font-weight:600;
  white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.ch-rank-name i{width:9px;height:9px;border-radius:3px;flex:none}
.ch-rank-val{font-variant-numeric:tabular-nums;font-weight:700;color:var(--txt);white-space:nowrap}
.ch-rank-pct{text-align:right;color:var(--muted);font-size:11.5px;white-space:nowrap}
@media (max-width:820px){
  .ch-rank-row{grid-template-columns:20px 84px minmax(44px,1fr) auto 48px;gap:6px;font-size:11.5px}
}

/* 页头：标题（门店名）与说明同一行，不占整列（2026-10-20） */
.page-head{display:flex;align-items:center;justify-content:space-between;gap:12px;
  margin-bottom:16px;flex-wrap:wrap;min-width:0}
.ph-main{display:flex;align-items:baseline;gap:10px;min-width:0;flex:1 1 0}
.ph-title{font-size:17px;white-space:nowrap;flex:none;margin:0}
.ph-desc{font-size:12px;color:var(--muted);min-width:0;overflow:hidden;
  text-overflow:ellipsis;white-space:nowrap;line-height:1.5}
.page-head .btn-row{flex:none;display:flex;gap:8px;flex-wrap:wrap;justify-content:flex-end}
@media(max-width:760px){
  .ph-main{flex-wrap:wrap}
  .ph-desc{white-space:normal;flex-basis:100%}
}

/* 布局防挤压：网格/卡片/行容器一律允许收缩，避免被内层宽内容顶开 */
.card,.card-body,.grid,.grid>*,.row,.row-between{min-width:0}
.tl-wrap,.tl-scroll{max-width:100%;min-width:0}
.page{min-width:0}

/* 房间卡片：文字单行省略，卡片不会被长房型名/客人名撑成细高条 */
.room{min-width:0;overflow:hidden}
.room .rm-no{white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.room .rm-meta{min-width:0;gap:6px}
.room .rm-meta span{min-width:0;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.room .rm-meta span:last-child{flex:none}
.room-grid{grid-template-columns:repeat(auto-fill,minmax(132px,1fr))}
@media(min-width:1600px){.room-grid{grid-template-columns:repeat(auto-fill,minmax(150px,1fr))}}

/* ===== 手机端页头 / 指标卡重排（2026-10-20 用户反馈「手机端布局不合理」）=====
   截图问题：标题、说明、按钮挤在同一行，说明被压成一条窄列；
   指标卡一张占满整宽、每张都两三百像素高，翻半天看不到日历。 */
@media(max-width:760px){
  .page-head{flex-direction:column;align-items:stretch;gap:10px;margin-bottom:12px}
  .ph-main{flex-direction:column;align-items:flex-start;gap:4px;flex-wrap:nowrap}
  .ph-title{white-space:normal;font-size:16px;line-height:1.35}
  .ph-desc{white-space:normal;flex:none;font-size:11.5px;line-height:1.45;
    display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden}
  .page-head .btn-row{width:100%;justify-content:flex-start;gap:6px}
  .page-head .btn-row .btn{flex:1 1 0;min-width:0;justify-content:center;padding-left:6px;padding-right:6px}
  /* 指标卡：两列紧凑卡，宽高都收住 */
  .g5,.g4{grid-template-columns:repeat(2,minmax(0,1fr));gap:9px}
  .stat{padding:10px 12px;border-radius:12px}
  .stat-label{font-size:11px}
  .stat-value{font-size:19px;margin:2px 0 1px}
  .stat-value small{font-size:10px}
  .stat-foot{font-size:10.5px;line-height:1.35}
  /* 工具栏也收紧：两行按钮在小屏不再撑高 */
  .bd-toolbar{gap:6px}
  .bd-tb-row{gap:6px}
  .bd-tb-row .btn{padding:5px 8px}
}

/* 手机端页头按钮：三个按钮挤不进一行时按比例收缩（不再被裁掉） */
@media(max-width:760px){
  .page-head .btn-row .btn{flex:1 1 0;min-width:0;font-size:11.5px;padding:7px 4px;
    white-space:nowrap;overflow:hidden;text-overflow:ellipsis;line-height:1.2}
}

/* 房态日历：空白格可点（2026-10-20 · 空房间也能直接点开办理） */
.tl-cell{grid-row:1;border-right:1px dashed var(--line-2);cursor:pointer;border-radius:4px;transition:background .12s}
.tl-cell:hover{background:var(--primary-soft,rgba(91,91,214,.10))}
.tl-track .tl-b{grid-row:1;position:relative;z-index:1}

/* 房态日历色块：宝寓式——在住淡黄、空房留白、锁房淡蓝、退房淡灰斜纹 */
.tl-b-stay{box-shadow:inset 4px 0 0 var(--st-occupy-bd)}
.tl-b-lock{box-shadow:inset 4px 0 0 var(--st-locked-bd)}
.tl-b-out{box-shadow:inset 4px 0 0 var(--st-out-bd)}

/* 房态色块：文字更清晰（2026-10-20 用户反馈「还是看不太清」） */
.tl-b{font-weight:600;letter-spacing:.2px}
.tl-b .tl-pr{font-weight:800}
.tl-b-stay{border:1px solid var(--st-occupy-bd)}
.tl-b-lock{border:1px solid var(--st-locked-bd)}
.tl-b-book{border:1px solid #e9a8a8}
.tl-b-fix{border:1px solid #e89a9a}
.tl-b-out{border:1px solid var(--st-out-bd)}

/* 房态色块内容布局（宝寓式两行）：第一行平台、第二行姓名 + 价格 */
.tl-b{display:flex;flex-direction:column;justify-content:center;gap:3px;padding:5px 7px;overflow:hidden}
.tl-b .tl-l1{display:flex;align-items:center;gap:5px;font-size:11.5px;line-height:1.2;
  color:inherit;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.tl-b .tl-l1 .tl-dot{width:8px;height:8px;border-radius:3px;flex:none}
.tl-b .tl-l1 .tl-ch{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.tl-b .tl-l2{display:flex;align-items:baseline;justify-content:space-between;gap:6px;
  font-size:13px;line-height:1.25;min-width:0}
.tl-b .tl-l2 .tl-g{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;font-weight:700}
.tl-b .tl-l2 .tl-pr{flex:none;font-weight:800;font-variant-numeric:tabular-nums}

/* 暗色主题：待入住（红）/ 维修 用暗红底 + 亮字，避免浅粉底在深色背景上糊成一片 */
html.theme-dark .tl-b-book{background:#5c2026;color:#ffd9d9;border-color:#8f3b41}
html.theme-dark .tl-b-book .tl-pr{color:#ffe6e6}
html.theme-dark .tl-b-book .tl-l1{opacity:1}
html.theme-dark .tl-b-fix{background:#5a2626;color:#ffc9c9;border-color:#8c3a3a}
html.theme-dark .tl-b-fix .tl-pr{color:#ffd6d6}

/* 色块文字对比度（2026-10-20 用户反馈「字太灰看不清名字」） */
.tl-b .tl-l1,.tl-b .tl-l2,.tl-b .tl-l2 .tl-g{color:inherit}
.tl-b-stay{color:#4a3800}
.tl-b-out{color:#4b5160}
.tl-b-lock{color:#123f86}
.tl-b .tl-g{font-weight:800}
.tl-b .tl-pr{font-weight:800}
@media(max-width:820px){
  .tl-b{padding:4px 6px;gap:2px}
  .tl-b .tl-l1{font-size:10.5px;gap:4px}
  .tl-b .tl-l1 .tl-dot{width:7px;height:7px}
  .tl-b .tl-l2{font-size:11.5px;gap:4px}
}

/* ==========================================================================
   房态详情面板（2026-10-20）
   「间夜详情 / 房态日志 / 保洁任务 / 日期备忘」四个页签，参考宝寓的间夜详情。
   ========================================================================== */
.rd-tabs{display:flex;gap:2px;border-bottom:1px solid var(--line);margin:-2px 0 12px;flex-wrap:wrap}
.rd-tab{appearance:none;border:0;background:transparent;color:var(--txt-2);font:inherit;font-size:13.5px;
  font-weight:700;padding:9px 14px;border-radius:8px 8px 0 0;cursor:pointer;position:relative;letter-spacing:.2px}
.rd-tab:hover{background:var(--bg-2);color:var(--txt)}
.rd-tab.on{color:var(--primary);background:var(--primary-soft)}
.rd-tab.on::after{content:"";position:absolute;left:10px;right:10px;bottom:-1px;height:2px;background:var(--primary);border-radius:2px}
.rd-pane{display:none}
.rd-pane.on{display:block}
.rd-row{display:flex;align-items:flex-start;gap:12px;padding:6px 0;font-size:13px;line-height:1.6}
.rd-row>.k{flex:none;width:82px;color:var(--muted);font-weight:600;text-align:right}
.rd-row>.v{flex:1;min-width:0;color:var(--txt);word-break:break-word}
.rd-sep{height:1px;background:var(--line);margin:10px 0}
.rd-chips{display:flex;gap:6px;flex-wrap:wrap}
.rd-chip{display:inline-flex;align-items:center;gap:4px;padding:1px 8px;border-radius:999px;
  font-size:12px;font-weight:600;border:1px solid var(--line);background:var(--bg-2);color:var(--txt-2)}
.rd-chip.on{border-color:var(--primary);background:var(--primary-soft);color:var(--primary)}
.rd-chip.gold{border-color:#e8cfa8;background:#fdf6ea;color:#8a6320}
.rd-money{display:flex;align-items:center;gap:10px;padding:5px 0;font-size:13px}
.rd-money .k{flex:none;width:82px;color:var(--muted);font-weight:600;text-align:right}
.rd-money .v{font-weight:800;font-variant-numeric:tabular-nums;font-size:15px;color:var(--txt)}
.rd-money .v.neg{color:var(--danger-txt)}
.rd-money .v.net{color:var(--ok-txt)}
.rd-money .u{font-size:11.5px;color:var(--muted);font-weight:600}
.rd-box{border:1px solid var(--line);border-radius:10px;padding:8px 12px;background:var(--card-2)}
.rd-note{white-space:pre-wrap;color:var(--txt-2);font-size:12.5px;line-height:1.6}
.rd-sec{font-size:12px;font-weight:800;color:var(--muted);letter-spacing:.4px;margin:2px 0 4px}
.rd-empty{padding:22px 8px;text-align:center;color:var(--muted);font-size:13px}
.rd-log{display:flex;gap:10px;padding:8px 0;border-bottom:1px dashed var(--line-2);font-size:12.8px}
.rd-log:last-child{border-bottom:0}
.rd-log .t{flex:none;width:104px;color:var(--muted);font-variant-numeric:tabular-nums}
.rd-log .b{flex:1;min-width:0}
.rd-log .b b{color:var(--txt)}
.rd-log .who{color:var(--muted);font-size:12px}
.rd-task{border:1px solid var(--line);border-radius:10px;padding:9px 11px;margin-bottom:8px;background:var(--card)}
.rd-task .h{display:flex;align-items:center;justify-content:space-between;gap:8px}
.rd-task .h b{font-size:13px}
.rd-memo{display:flex;gap:10px;padding:8px 0;border-bottom:1px dashed var(--line-2)}
.rd-memo:last-child{border-bottom:0}
.rd-memo .b{flex:1;min-width:0}
.rd-memo .b .x{font-size:12.5px;color:var(--txt);white-space:pre-wrap}
.rd-memo .b .m{font-size:11.5px;color:var(--muted);margin-top:2px}
.rd-acts{display:flex;gap:6px;flex-wrap:wrap;margin:2px 0 10px}
.rd-state-sel{display:flex;gap:6px;flex-wrap:wrap}
.rd-state-sel button{appearance:none;border:1px solid var(--line);background:var(--card);color:var(--txt-2);
  font:inherit;font-size:12.5px;font-weight:700;padding:5px 12px;border-radius:8px;cursor:pointer}
.rd-state-sel button:hover{border-color:var(--primary);color:var(--primary)}
.rd-state-sel button.on{background:var(--primary);border-color:var(--primary);color:#fff}
.rd-state-sel button:disabled{opacity:.45;cursor:not-allowed}
.rd-tag-ro{font-size:11.5px;color:var(--muted)}
html.theme-dark .rd-chip.gold{border-color:#6b5330;background:#3a2f20;color:#e7c98f}
html.theme-dark .rd-box{background:#191a20}
html.theme-dark .rd-state-sel button.on{color:#fff}
@media(max-width:640px){
  .rd-row>.k,.rd-money .k{width:64px;font-size:12px}
  .rd-row{font-size:12.5px}
  .rd-tab{padding:8px 10px;font-size:12.5px}
}

/* ===========================================================
   2026-10-20（第 14 轮）
   ① 驾驶舱「实时异常预警」整行两列布局（原来挤在 1/3 窄列里标题全折行）
   ② 押金提示「小方块」：原来是一条占满行宽的横幅，手机端尤其占地方
   ③ 押金收款弹窗（在线支付 / 现金 + 金额 + 备用金）
   =========================================================== */
.alert-cols{display:grid;grid-template-columns:1fr 1fr;gap:0 20px}
.alert-cols .alert-item:nth-child(2n){}
@media(max-width:900px){.alert-cols{grid-template-columns:1fr}}

/* 押金提醒小方块：一行塞下「图标 + 数字」，点击展开明细 */
.dep-sq{display:inline-flex;align-items:center;gap:8px;padding:5px 12px 5px 6px;border-radius:10px;
  border:1px solid var(--line);background:var(--card);cursor:pointer;font:inherit;line-height:1.2;
  -webkit-tap-highlight-color:transparent;transition:border-color .15s,box-shadow .15s}
.dep-sq:hover{border-color:var(--danger);box-shadow:0 0 0 3px rgba(220,60,60,.08)}
.dep-sq .ii{width:22px;height:22px;border-radius:7px;flex:none;display:flex;align-items:center;justify-content:center;
  font-size:12px;font-weight:800;background:rgba(220,60,60,.12);color:#d64545}
.dep-sq .n{font-size:16px;font-weight:800;font-variant-numeric:tabular-nums;color:#d64545}
.dep-sq .t{font-size:11.5px;color:var(--muted);font-weight:600}
.dep-sq.warn .ii{background:rgba(200,140,40,.14);color:#b37a1e}
.dep-sq.warn .n{color:#b37a1e}
.dep-bar{display:flex;align-items:center;gap:10px;flex-wrap:wrap;margin:2px 0 12px}
html.theme-dark .dep-sq .ii{background:rgba(240,90,90,.18)}
html.theme-dark .dep-sq .n{color:#ff8a8a}

/* 押金收款弹窗 */
.dp-collect .dp-head{display:flex;align-items:baseline;justify-content:space-between;gap:12px;
  padding:10px 12px;border-radius:10px;background:var(--bg-2);margin-bottom:12px}
.dp-collect .dp-head .amt{font-size:30px;font-weight:800;font-variant-numeric:tabular-nums;letter-spacing:-.5px}
.dp-collect .dp-mny{font-size:12px;color:var(--muted);display:flex;gap:14px;flex-wrap:wrap;margin-top:6px}
.dp-collect .dp-mny b{color:var(--txt)}
.dp-methods{display:grid;grid-template-columns:1fr 1fr;gap:10px;margin:12px 0}
.dp-methods button{appearance:none;border:1.5px solid var(--line);background:var(--card);color:var(--txt);
  border-radius:12px;padding:14px 10px;cursor:pointer;font:inherit;font-weight:700;font-size:14px;
  display:flex;flex-direction:column;align-items:center;gap:6px}
.dp-methods button .ic{font-size:22px}
.dp-methods button .x{font-size:11.5px;font-weight:600;color:var(--muted)}
.dp-methods button.on{border-color:var(--primary);background:rgba(91,91,214,.07);color:var(--primary)}
.dp-methods button.on .x{color:var(--primary);opacity:.8}
.dp-qr{display:flex;flex-direction:column;align-items:center;gap:8px;padding:14px;border:1px dashed var(--line);
  border-radius:12px;margin-top:10px;background:#fff}
.dp-qr svg{width:168px;height:168px}
.dp-qr .no{font-size:11.5px;color:#555;font-family:ui-monospace,Menlo,monospace}
html.theme-dark .dp-qr{background:#fff}
.dp-quick{display:flex;gap:6px;flex-wrap:wrap;margin-top:8px}
.dp-quick .chip{cursor:pointer}
@media(max-width:640px){
  .dp-collect .dp-head .amt{font-size:24px}
  .dp-methods{grid-template-columns:1fr 1fr;gap:8px}
  .dp-methods button{padding:12px 6px;font-size:13px}
  .dep-bar{gap:6px;margin-bottom:10px}
  .dep-sq{padding:4px 10px 4px 5px;gap:6px}
  .dep-sq .n{font-size:15px}
  .dep-sq .t{display:none}     /* 手机端只留「⚠ + 数字」，彻底不占地方 */
}

/* ===========================================================
   住客身份登记弹窗（2026-10-21 · 参照「上传证件」界面）
   =========================================================== */
.gr-wrap .gr-tabs{display:flex;gap:6px;border-bottom:1.5px solid var(--line);margin-bottom:12px;flex-wrap:wrap}
.gr-wrap .gr-tabs button{appearance:none;border:0;background:transparent;color:var(--muted);font:inherit;
  font-weight:700;font-size:13.5px;padding:8px 12px;cursor:pointer;border-bottom:2px solid transparent;margin-bottom:-1.5px}
.gr-wrap .gr-tabs button.on{color:var(--primary);border-bottom-color:var(--primary)}
.gr-wrap .gr-tabs button:hover{color:var(--txt)}
.gr-photo-head{display:flex;align-items:center;gap:10px;margin-bottom:8px}
.gr-photo-title{font-weight:800;font-size:13.5px}
.gr-photo-kind{font-size:11.5px;font-weight:700;color:var(--primary);background:rgba(91,91,214,.08);
  border:1px solid rgba(91,91,214,.25);border-radius:6px;padding:1px 8px}
.gr-sample{font-size:11.5px;color:var(--primary);text-decoration:none;margin-left:auto}
.gr-sample:hover{text-decoration:underline}
.gr-slots{display:grid;grid-template-columns:repeat(3,1fr);gap:10px}
.gr-slots-other{grid-template-columns:repeat(3,1fr)}
.gr-slot .gr-add{appearance:none;width:100%;aspect-ratio:4/3;border:1.5px dashed var(--line);background:var(--bg-2);
  border-radius:10px;cursor:pointer;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:4px;
  color:var(--muted);font:inherit;padding:6px}
.gr-slot .gr-add:hover{border-color:var(--primary);color:var(--primary)}
.gr-slot .gr-plus{font-size:22px;font-weight:300;line-height:1}
.gr-slot .gr-add-t{font-size:11.5px;font-weight:700}
.gr-slot .gr-must{font-size:10px;font-weight:700;color:#c0392b;background:rgba(192,57,43,.1);border-radius:4px;padding:0 5px}
.gr-slot .gr-opt{font-size:10px;font-weight:600;color:var(--muted)}
html.theme-dark .gr-slot .gr-must{color:#ff8a8a;background:rgba(240,90,90,.16)}
.gr-shot{position:relative;width:100%;aspect-ratio:4/3;border:1px solid var(--line);border-radius:10px;overflow:hidden;background:var(--bg-2)}
.gr-shot img{width:100%;height:100%;object-fit:cover;display:block}
.gr-shot-x{position:absolute;top:4px;right:4px;width:20px;height:20px;border:0;border-radius:50%;cursor:pointer;
  background:rgba(0,0,0,.55);color:#fff;font-size:13px;line-height:1;display:flex;align-items:center;justify-content:center}
.gr-shot-tag{position:absolute;left:4px;bottom:4px;font-size:10px;font-weight:700;color:#fff;background:rgba(0,0,0,.5);
  border-radius:4px;padding:1px 6px}
.gr-sec{font-weight:800;font-size:13px;margin:14px 0 8px;display:flex;align-items:center;gap:10px}
.gr-minor{font-size:12px;font-weight:600;color:var(--muted);display:inline-flex;align-items:center;gap:5px;cursor:pointer}
.gr-readers{display:grid;grid-template-columns:repeat(3,1fr);gap:10px}
.gr-reader{appearance:none;border:1.5px solid var(--line);background:var(--card);border-radius:10px;cursor:pointer;
  padding:8px 6px;display:flex;flex-direction:column;align-items:center;gap:4px;font:inherit;color:var(--txt);position:relative}
.gr-reader:hover{border-color:var(--primary)}
.gr-reader.on{border-color:var(--primary);background:rgba(91,91,214,.07);box-shadow:0 0 0 1.5px var(--primary) inset}
.gr-reader-img{width:100%;height:44px;border-radius:6px;background:linear-gradient(160deg,#eef1f6,#dfe5ee);
  display:flex;align-items:center;justify-content:center;position:relative}
html.theme-dark .gr-reader-img{background:linear-gradient(160deg,#2a2f3a,#22262f)}
.gr-reader-ic{font-size:20px;color:#8a93a6}
.gr-reader.on .gr-reader-ic{color:var(--primary)}
.gr-hot{position:absolute;top:2px;left:2px;font-size:9px;font-weight:700;color:#fff;background:#e0803a;
  border-radius:4px;padding:0 4px;font-style:normal}
.gr-reader-brand{font-size:11.5px;font-weight:700}
.gr-reader-model{font-size:10.5px;color:var(--muted);font-family:ui-monospace,Menlo,monospace}
.gr-imp-list{display:flex;flex-direction:column;gap:6px;margin-top:8px;max-height:260px;overflow:auto}
.gr-imp{appearance:none;display:flex;align-items:center;gap:10px;border:1.5px solid var(--line);background:var(--card);
  border-radius:10px;padding:9px 12px;cursor:pointer;font:inherit;color:var(--txt);text-align:left}
.gr-imp:hover{border-color:var(--primary)}
.gr-imp.on{border-color:var(--primary);background:rgba(91,91,214,.07)}
.gr-imp .muted{font-weight:400}
.gr-imp-src{margin-left:auto;font-size:10.5px;font-weight:700;color:var(--primary)}
.gr-mode{font-size:10.5px;font-weight:700;color:var(--muted);margin-right:6px}
.gr-view-shots{display:grid;grid-template-columns:repeat(3,1fr);gap:8px;margin-top:10px}
.gr-view-shot{display:flex;flex-direction:column;gap:3px}
.gr-view-shot img{width:100%;aspect-ratio:4/3;object-fit:cover;border:1px solid var(--line);border-radius:8px}
.gr-sample-demo{height:120px;margin-top:8px;border:1.5px dashed var(--line);border-radius:10px;background:var(--bg-2);
  display:flex;align-items:center;justify-content:center;color:var(--muted);font-size:12px}
.gr-sample-demo::after{content:'（样张位：平放 · 四角入镜 · 文字清晰）'}

/* 开单表单：客人姓名旁的身份证读取按钮 */
.gr-inline{display:flex;gap:6px;align-items:center}
.gr-inline .input{flex:1;min-width:0}
.gr-id-btn{appearance:none;flex:none;width:34px;height:34px;border:1.5px solid #2f7ef2;border-radius:8px;cursor:pointer;
  background:rgba(47,126,242,.09);color:#2f7ef2;display:flex;align-items:center;justify-content:center;padding:0}
.gr-id-btn:hover{background:#2f7ef2;color:#fff}
html.theme-dark .gr-id-btn{border-color:#5b9bff;color:#5b9bff;background:rgba(91,155,255,.14)}
html.theme-dark .gr-id-btn:hover{background:#2f7ef2;color:#fff}
@media(max-width:640px){
  .gr-slots,.gr-slots-other,.gr-readers,.gr-view-shots{grid-template-columns:repeat(2,1fr)}
}

/* ===========================================================
   在线收款弹窗（2026-10-21 · 参照「在线收款」：微信/支付宝 + 出示二维码/付款码）
   =========================================================== */
.op-wrap .op-head{display:flex;align-items:baseline;justify-content:space-between;gap:12px;
  padding:10px 12px;border-radius:10px;background:var(--bg-2);margin-bottom:10px}
.op-wrap .op-amt{font-size:30px;font-weight:800;font-variant-numeric:tabular-nums;letter-spacing:-.5px}
.op-wrap .op-mny{font-size:12px;color:var(--muted);display:flex;gap:14px;flex-wrap:wrap;margin-bottom:10px}
.op-wrap .op-mny b{color:var(--txt)}
.op-tabs{display:grid;grid-template-columns:1fr 1fr;gap:8px;margin-bottom:12px}
.op-tabs button{appearance:none;border:1.5px solid var(--line);background:var(--card);color:var(--txt);font:inherit;
  font-weight:800;font-size:14px;border-radius:10px;padding:11px 8px;cursor:pointer;
  display:flex;align-items:center;justify-content:center;gap:8px}
.op-tabs button.on[data-c="wx"]{border-color:#07c160;color:#07c160;background:rgba(7,193,96,.08)}
.op-tabs button.on[data-c="ali"]{border-color:#1677ff;color:#1677ff;background:rgba(22,119,255,.08)}
html.theme-dark .op-tabs button.on[data-c="wx"]{color:#3ddc84;border-color:#3ddc84}
html.theme-dark .op-tabs button.on[data-c="ali"]{color:#5b9bff;border-color:#5b9bff}
.op-ic{width:22px;height:22px;border-radius:6px;display:inline-flex;align-items:center;justify-content:center;
  font-size:12px;font-weight:800;color:#fff}
.op-ic.wx{background:#07c160}
.op-ic.ali{background:#1677ff}
.op-panel{display:grid;grid-template-columns:1fr 1fr;gap:10px}
.op-big{appearance:none;border:0;border-radius:12px;cursor:pointer;color:#fff;font:inherit;font-weight:800;font-size:15px;
  padding:18px 12px;display:flex;flex-direction:column;align-items:center;gap:6px;text-align:center;transition:transform .08s}
.op-big:active{transform:scale(.98)}
.op-big.blue{background:linear-gradient(160deg,#3f8ef7,#2f6fe0)}
.op-big.green{background:linear-gradient(160deg,#3ecf8e,#1fa864)}
.op-big.on{box-shadow:0 0 0 3px rgba(47,126,242,.35)}
.op-big.green.on{box-shadow:0 0 0 3px rgba(31,168,100,.35)}
.op-big-ic{font-size:26px;line-height:1}
.op-big small{display:block;font-size:11px;font-weight:600;opacity:.92;margin-top:2px}
.op-stage{margin-top:12px}
.op-qr{display:flex;flex-direction:column;align-items:center;gap:8px;padding:14px;border:1px dashed var(--line);
  border-radius:12px;background:#fff}
.op-qr svg{width:168px;height:168px}
.op-qr-no{font-size:11.5px;color:#555;font-family:ui-monospace,Menlo,monospace}
html.theme-dark .op-qr{background:#fff}
html.theme-dark .op-qr .xs.muted{color:#666}
.op-scan .note{margin-bottom:4px}
@media(max-width:640px){
  .op-panel{grid-template-columns:1fr}
  .op-wrap .op-amt{font-size:24px}
  .op-big{padding:14px 10px;font-size:14px}
}


/* 电竞设备 · xlsx 导入预览 */
.es-imp-hint{font-size:12px;color:var(--muted);margin-top:6px}
.es-imp-hint b{color:var(--txt)}
.es-imp-bad{color:#d64545;font-weight:700}
.rd-mr{margin-left:8px;flex:none}
.rd-money{align-items:center}
@media(max-width:640px){.rd-mr .btn{font-size:11.5px;padding:3px 8px}}

/* ===========================================================
   2026-10-21（第 15 轮）
   ① 暗色房态块文字看不清：.tl-b-stay 的 color 被 1342 行硬编码成 #4a3800，
      而暗色底是 #3b3413（深橄榄）—— 深字压深底，等于看不见。
      这里按「暗底亮字」逐类补回，并让渠道行继承色块文字色（原来固定 var(--txt-2) 偏灰）。
   =========================================================== */
html.theme-dark .tl-b-stay{color:var(--st-occupy-txt);border-color:var(--st-occupy-bd)}
html.theme-dark .tl-b-stay .tl-pr{color:#fff4c9}
html.theme-dark .tl-b-out{color:var(--st-out-txt)}
html.theme-dark .tl-b-lock{color:var(--st-locked-txt)}
html.theme-dark .tl-b-hold{color:#9deefb}
html.theme-dark .tl-b-dirty{color:#cdd3df}
html.theme-dark .tl-b .tl-ch{color:inherit;opacity:.9}
html.theme-dark .tl-b .tl-g{color:inherit}
/* 暗色下色块内的金色/彩色小点再亮一档，避免糊在暗底里 */
html.theme-dark .tl-b .tl-dot{box-shadow:0 0 0 1px rgba(255,255,255,.35)}

/* 押金「待收」徽章（订单详情押金行） */
.dep-pill{display:inline-flex;align-items:center;gap:4px;font-size:11px;font-weight:800;
  padding:2px 7px;border-radius:999px;line-height:1.5;white-space:nowrap}
.dep-pill.wait{background:rgba(220,60,60,.12);color:#d64545;border:1px solid rgba(220,60,60,.35)}
.dep-pill.paid{background:rgba(40,160,110,.12);color:#1d8a63;border:1px solid rgba(40,160,110,.32)}
.dep-pill.back{background:rgba(120,130,150,.12);color:var(--muted);border:1px solid var(--line)}
html.theme-dark .dep-pill.wait{background:rgba(242,85,90,.16);color:#ff9a9d;border-color:rgba(242,85,90,.4)}
html.theme-dark .dep-pill.paid{background:rgba(45,212,191,.14);color:#5eead4;border-color:rgba(45,212,191,.36)}
html.theme-dark .dep-pill.back{background:rgba(140,150,170,.14);color:#a9b0c6;border-color:#3a4260}
.rd-money .v .dep-pill{margin-left:6px;vertical-align:2px}

/* 年度 RevPAR 排名：新店起算标记 */
.yr-since{font-size:11px;color:var(--warn-txt);font-weight:700}

/* ===========================================================
   开单弹窗（2026-10-21 · 第 19 轮）
   参照宝寓「新建订单 / 散客单」版式：顶部页签 + 入住类型段选 +
   两张分块表单（入离日期/房型房号/房租 → 房费合计，订单来源/预订人/收款方式…）+
   蓝底主按钮。只改版式与录入顺序，落单口径仍走 createOrder 一处。
   =========================================================== */
.bk-wrap{--bk-line:#e6e8f2;--bk-blue:#2f7ef2;--bk-blue-soft:#eaf2ff;--bk-blue-deep:#2168d4}
.bk-tabs{display:flex;gap:4px;align-items:flex-end;border-bottom:1px solid var(--bk-line);margin:0 0 14px}
.bk-tab{appearance:none;border:1px solid transparent;border-bottom:0;background:transparent;font:inherit;
  font-size:13.5px;font-weight:700;color:var(--txt-2);padding:7px 18px;border-radius:9px 9px 0 0;cursor:pointer;
  position:relative;top:1px;transition:.13s}
.bk-tab:hover{color:var(--txt)}
.bk-tab.on{background:var(--card);border-color:var(--bk-line);color:var(--bk-blue);top:0;
  box-shadow:0 -1px 0 var(--bk-line) inset}
.bk-tab.on:after{content:"";position:absolute;left:-1px;right:-1px;bottom:-1px;height:2px;background:var(--card)}
.bk-top{display:flex;align-items:center;gap:12px;flex-wrap:wrap;margin-bottom:12px}
.bk-typebar{display:flex;align-items:center;gap:9px;min-width:0}
.bk-tlabel{font-size:12.5px;font-weight:700;color:var(--txt-2);white-space:nowrap}
.bk-seg{display:inline-flex;border:1px solid var(--bk-line);border-radius:8px;overflow:hidden;background:var(--card)}
.bk-seg button{appearance:none;border:0;border-right:1px solid var(--bk-line);background:transparent;font:inherit;
  font-size:12.5px;font-weight:700;color:var(--txt-2);padding:6px 17px;cursor:pointer;white-space:nowrap;transition:.12s}
.bk-seg button:last-child{border-right:0}
.bk-seg button:hover{background:var(--bk-blue-soft);color:var(--bk-blue)}
.bk-seg button.on{background:var(--bk-blue);color:#fff}
.bk-seg-pay button{padding:6px 15px}
.bk-seg-pay button.on[data-pay="现场扫码"]{background:#0ea5b7}
.bk-seg-pay button.on[data-pay="挂账"]{background:#d98207}
.bk-seg-pay button.on[data-pay="暂不收款"]{background:#8b90a8}
.bk-auto{display:inline-flex;align-items:center;gap:6px;font-size:12.5px;color:var(--txt-2);margin-left:auto;cursor:pointer}
.bk-auto input{width:14px;height:14px;accent-color:var(--bk-blue);cursor:pointer}
.bk-link{font-size:12.5px;font-weight:700;color:var(--bk-blue);cursor:pointer;text-decoration:none;white-space:nowrap}
.bk-link:hover{text-decoration:underline}
.bk-box{border:1px solid var(--bk-line);border-radius:10px;padding:14px 16px;margin-bottom:13px;background:var(--card-2)}
.bk-fields{display:grid;grid-template-columns:1.45fr 1fr .85fr;gap:12px 16px}
.bk-grid{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:12px 16px}
.bk-f{min-width:0}
.bk-f>label{display:block;font-size:12px;font-weight:700;color:var(--txt-2);margin-bottom:5px;line-height:1.3}
.bk-f>label i{color:var(--danger);font-style:normal;margin-right:3px}
.bk-tip{font-weight:400;color:var(--muted);font-size:11px}
.bk-f .input,.bk-f .select{height:34px;font-size:12.5px}
.bk-f .textarea{min-height:64px;font-size:12.5px}
.bk-unit{display:flex;align-items:center;gap:6px}
.bk-unit .input{flex:1;min-width:0}
.bk-unit>span{font-size:11.5px;color:var(--muted);white-space:nowrap}
.bk-daterange{display:flex;align-items:center;gap:6px}
.bk-daterange .input{width:auto;flex:1;min-width:112px}
.bk-dash{font-size:11.5px;color:var(--muted);flex:none}
.bk-hint{font-size:11.5px;color:var(--muted);line-height:1.65;margin-top:6px}
.bk-hint.ok{color:var(--ok-txt)}
.bk-hint.warn{color:var(--warn-txt)}
.bk-hint b{color:var(--txt)}
.bk-boxfoot{display:flex;align-items:center;gap:14px;margin-top:14px;padding-top:12px;border-top:1px dashed var(--bk-line)}
.bk-add{appearance:none;border:1px solid var(--bk-blue);background:var(--bk-blue-soft);color:var(--bk-blue);
  font:inherit;font-size:12.5px;font-weight:700;border-radius:999px;padding:6px 17px;cursor:pointer;transition:.13s}
.bk-add:hover{background:var(--bk-blue);color:#fff}
.bk-sum{margin-left:auto;font-size:12.5px;color:var(--txt-2);white-space:nowrap}
.bk-sum b{color:var(--txt)}
.bk-amt{font-size:18px;font-weight:800;color:var(--warn-txt-strong);font-variant-numeric:tabular-nums;margin:0 4px}
.bk-step{display:flex;align-items:center}
.bk-step button{appearance:none;width:30px;height:34px;border:1px solid var(--bk-line);background:var(--card);
  color:var(--txt-2);font-size:15px;font-weight:700;line-height:1;cursor:pointer}
.bk-step button:first-child{border-radius:8px 0 0 8px}
.bk-step button:last-child{border-radius:0 8px 8px 0}
.bk-step button:hover{color:var(--bk-blue);border-color:var(--bk-blue)}
.bk-step input{width:54px;height:34px;text-align:center;border:1px solid var(--bk-line);border-left:0;border-right:0;
  background:var(--card);color:var(--txt);font:inherit;font-size:12.5px;-moz-appearance:textfield}
.bk-step input::-webkit-outer-spin-button,.bk-step input::-webkit-inner-spin-button{-webkit-appearance:none;margin:0}
.bk-step em{font-style:normal;font-size:11.5px;color:var(--muted);margin-left:7px;white-space:nowrap}
.bk-span2{grid-column:span 2}
.bk-span3{grid-column:1/-1}
.bk-ops{display:flex;align-items:center;gap:8px;flex-wrap:wrap;margin-top:13px;padding-top:11px;border-top:1px dashed var(--bk-line)}
.bk-ops-t{font-size:11.5px;color:var(--muted)}
input.input-ro,.input-ro{background:var(--bg-2);color:var(--txt-2);cursor:not-allowed}
/* 该弹窗的主按钮跟随参照图的蓝底（作用域锁在 .bk-modal，不影响其它弹窗） */
.modal.bk-modal .modal-foot .btn-primary{background:linear-gradient(160deg,#3f8ef7,#2f6fe0);border-color:#2f7ef2}
.modal.bk-modal .modal-foot .btn-primary:hover{background:linear-gradient(160deg,#3a86ee,#2560c9)}
html.theme-dark .bk-wrap{--bk-line:#333a52;--bk-blue:#5b9bff;--bk-blue-soft:rgba(91,155,255,.14);--bk-blue-deep:#7fb2ff}
html.theme-dark .bk-box{background:#1e2436}
html.theme-dark .bk-seg{background:#232a44}
html.theme-dark .bk-tab.on{background:#232a44;border-color:var(--bk-line);box-shadow:none}
html.theme-dark .bk-tab.on:after{background:#232a44}
html.theme-dark .bk-add{color:#9cc4ff;border-color:#3f7fe0}
html.theme-dark .bk-step button,html.theme-dark .bk-step input{background:#232a44}
html.theme-dark .bk-amt{color:#fcd34d}
html.theme-dark input.input-ro,html.theme-dark .input-ro{background:#262d42;color:#a9b0c6}
html.theme-dark .modal.bk-modal .modal-foot .btn-primary{background:linear-gradient(160deg,#3f8ef7,#2f6fe0);border-color:#4d8ef5}
@media(max-width:900px){
  .bk-fields,.bk-grid{grid-template-columns:1fr 1fr}
  .bk-span2,.bk-span3{grid-column:1/-1}
}
@media(max-width:640px){
  .bk-fields,.bk-grid{grid-template-columns:1fr}
  .bk-tab{padding:7px 12px;font-size:12.5px}
  .bk-seg button{padding:6px 10px;font-size:12px}
  .bk-top{gap:8px}
  .bk-auto{margin-left:0}
  .bk-box{padding:12px 12px}
  .bk-sum{width:100%;text-align:right;margin-left:0}
}
/* 开单弹窗暗色可读性再抬一档（未选中段选 / 快捷操作按钮 / 字段标签） */
html.theme-dark .bk-f>label{color:#b9c1d4}
html.theme-dark .bk-seg button{color:#c3cadb}
html.theme-dark .bk-seg button:hover{background:rgba(91,155,255,.16);color:#9cc4ff}
html.theme-dark .bk-ops .btn{color:#c3cadb;border-color:#3a4260;background:#232a44}
html.theme-dark .bk-ops-t{color:#8b93a7}
html.theme-dark .bk-step em,html.theme-dark .bk-hint{color:#9aa4b5}
html.theme-dark .bk-hint.ok{color:#5eead4}
html.theme-dark .bk-hint.warn{color:#fbbf6b}
/* 开单弹窗底部「房态快捷操作」按钮：浅底描边，避免白底白框看不见 */
.bk-ops .btn{background:var(--bg-2);border-color:var(--line);color:var(--txt-2)}
.bk-ops .btn:hover{background:var(--card);border-color:var(--primary);color:var(--primary)}
/* 大屏「今日门店排名」项目条：9 个项目，宽屏右对齐、窄屏整行换行，不挤爆标题 */
.bs-rank-tabs{flex-wrap:wrap;justify-content:flex-end;max-width:100%}
.bs-rt{padding:3px 8px}
@media(max-width:1100px){
  .bs-rank-tabs{margin-left:0;width:100%;justify-content:flex-start}
}
@media(max-width:640px){
  .bs-rank-tabs{gap:3px}
  .bs-rt{padding:4px 8px;font-size:11.5px}
}

/* ---------- 办入住弹窗「入住人登记」区块（第 21 轮 · 参照宝寓散客单） ----------
   验证方式 / 登记人数 / 审核状态 / 入住人 四行，点 ＋ 直接读身份证。
   浅色走卡片底 + 虚线分隔；暗色单独补对比度（未选中文字、输入框、chip）。 */
.ci-reg{margin-top:14px;padding:12px 14px;border:1px solid var(--line);border-radius:10px;background:var(--bg-2)}
.ci-reg-sec{display:flex;align-items:baseline;gap:8px;flex-wrap:wrap;font-size:12.5px;font-weight:600;color:var(--txt);margin-bottom:8px}
.ci-reg-sec em{font-style:normal;font-weight:400;font-size:11.5px;color:var(--muted)}
.ci-row{display:flex;align-items:center;gap:10px;padding:5px 0}
.ci-row + .ci-row{border-top:1px dashed var(--line)}
.ci-row > label{flex:0 0 62px;font-size:12px;color:var(--muted)}
.ci-val{flex:1;min-width:0;display:flex;align-items:center;gap:8px;flex-wrap:wrap;font-size:12.5px;color:var(--txt-2)}
.ci-val .input,.ci-val select{max-width:190px}
.ci-hint{font-size:11.5px;color:var(--muted)}
.ci-hint b{color:var(--warn-txt, #b45309)}
.ci-step{display:inline-flex;align-items:center;border:1px solid var(--line);border-radius:7px;overflow:hidden;background:var(--card)}
.ci-step button{width:26px;height:26px;border:0;background:transparent;color:var(--txt-2);font-size:14px;line-height:1;cursor:pointer}
.ci-step button:hover:not(:disabled){background:var(--bg-2);color:var(--primary)}
.ci-step button:disabled{opacity:.35;cursor:not-allowed}
.ci-step input{width:38px;height:26px;border:0;border-left:1px solid var(--line);border-right:1px solid var(--line);text-align:center;font-size:12.5px;background:transparent;color:var(--txt)}
.ci-chip{display:inline-flex;align-items:center;padding:1px 8px;border-radius:999px;font-size:11.5px;border:1px solid var(--line);background:var(--card);color:var(--txt-2)}
.ci-chip.warn{border-color:#f3c98b;background:#fdf4e3;color:#96610c}
.ci-chip.ok{border-color:#a7d9c4;background:#e8f7ef;color:#0f7a52}
.ci-val-guest{align-items:center}
.ci-guests{display:flex;align-items:center;gap:6px;flex-wrap:wrap;min-height:24px}
.ci-guest{display:inline-flex;align-items:center;gap:4px;padding:1px 8px;border-radius:999px;border:1px solid var(--line);background:var(--card);font-size:12px;color:var(--txt)}
.ci-guest i{font-style:normal;font-size:10.5px;padding:0 4px;border-radius:4px;background:#fde8e8;color:#b42318}
.ci-cnt{font-size:11.5px;color:var(--muted)}
/* 暗色：卡片/输入/chip 逐个补，别只改背景导致字看不见 */
html.theme-dark .ci-reg{background:#1e2436;border-color:#2c3550}
html.theme-dark .ci-reg-sec{color:#e5e9f2}
html.theme-dark .ci-reg-sec em{color:#8b93a7}
html.theme-dark .ci-row + .ci-row{border-top-color:#2c3550}
html.theme-dark .ci-row > label{color:#8b93a7}
html.theme-dark .ci-val{color:#c3cadb}
html.theme-dark .ci-hint{color:#8b93a7}
html.theme-dark .ci-hint b{color:#fbbf6b}
html.theme-dark .ci-step{background:#232a44;border-color:#3a4260}
html.theme-dark .ci-step button{color:#c3cadb}
html.theme-dark .ci-step button:hover:not(:disabled){background:#2c3550;color:#7dd3fc}
html.theme-dark .ci-step input{color:#e5e9f2;border-left-color:#3a4260;border-right-color:#3a4260}
html.theme-dark .ci-chip{background:#232a44;border-color:#3a4260;color:#c3cadb}
html.theme-dark .ci-chip.warn{background:#3a2f16;border-color:#6b5220;color:#fbbf6b}
html.theme-dark .ci-chip.ok{background:#12372c;border-color:#1f6b52;color:#5eead4}
html.theme-dark .ci-guest{background:#232a44;border-color:#3a4260;color:#e5e9f2}
html.theme-dark .ci-guest i{background:#4a1d1d;color:#fca5a5}
html.theme-dark .ci-cnt{color:#8b93a7}
/* 窄屏：label 换行到上方，动作按钮不挤压 */
@media(max-width:640px){
  .ci-row{flex-wrap:wrap;gap:6px}
  .ci-row > label{flex:0 0 auto}
  .ci-val{flex:1 1 100%}
  .ci-val .input,.ci-val select{max-width:100%}
}

/* ---------- 房态格快捷操作条 + 右端间夜抽屉（第 22 轮 · 参照宝寓房态图） ----------
   快捷条用深色悬浮条（两种主题下都清晰，和宝寓一致）；抽屉跟主题走 CSS 变量。 */
.rm-bar{position:fixed;z-index:9500;display:flex;align-items:center;gap:2px;padding:4px;
  background:#2f3646;color:#e9edf6;border-radius:10px;box-shadow:0 10px 28px rgba(15,23,42,.34);
  font-size:13px;white-space:nowrap;max-width:calc(100vw - 24px);overflow-x:auto}
.rm-bar button{border:0;background:transparent;color:#e9edf6;font-size:13px;line-height:1;
  padding:8px 10px;border-radius:7px;cursor:pointer;white-space:nowrap}
.rm-bar button:hover{background:rgba(255,255,255,.14)}
.rm-bar button.main{background:#4f6ef7;color:#fff;font-weight:600}
.rm-bar button.main:hover{background:#425edb}
.rm-bar-t{padding:0 8px 0 6px;color:#9aa4bb;font-size:12px;border-right:1px solid rgba(255,255,255,.14);margin-right:2px}
.rm-bar-arrow{font-weight:600;color:#fcd34d;padding:0 6px}
.rm-bar-x{color:#9aa4bb!important;font-size:16px!important;padding:4px 8px!important}
.room.qb-on{outline:2px solid var(--primary);outline-offset:-2px;box-shadow:0 0 0 3px rgba(79,110,247,.16)}
body.qb-swapping .room{cursor:crosshair}
body.qb-swapping .room[data-s="空房"]{outline:2px dashed #22c55e;outline-offset:-2px}

.rm-drawer{position:fixed;top:0;right:0;bottom:0;width:360px;max-width:92vw;z-index:9400;
  display:flex;flex-direction:column;background:var(--card);color:var(--txt);
  border-left:1px solid var(--line);box-shadow:-12px 0 32px rgba(15,23,42,.16);
  animation:rmd-in .18s ease-out}
@keyframes rmd-in{from{transform:translateX(24px);opacity:.4}to{transform:translateX(0);opacity:1}}
.rmd-head{display:flex;align-items:center;justify-content:space-between;padding:12px 14px;
  border-bottom:1px solid var(--line);font-size:13px}
.rmd-x{border:0;background:transparent;color:var(--muted);font-size:18px;line-height:1;cursor:pointer}
.rmd-body{flex:1;overflow:auto;padding:12px 14px}
.rmd-top{display:flex;align-items:center;gap:10px;margin-bottom:10px}
.rmd-no{font-size:20px;font-weight:700;letter-spacing:.4px}
.rmd-type{font-size:12.5px;color:var(--txt-2)}
.rmd-st{margin-left:auto}
.rmd-sec{margin:14px 0 6px;font-size:11.5px;font-weight:600;color:var(--muted);letter-spacing:.4px}
.rmd-nights{width:100%;border-collapse:collapse;font-size:12px}
.rmd-nights th{font-weight:500;color:var(--muted);text-align:left;padding:4px 0;border-bottom:1px solid var(--line)}
.rmd-nights th.num,.rmd-nights td.num{text-align:right}
.rmd-nights td{padding:5px 0;border-bottom:1px dashed var(--line);color:var(--txt-2)}
.rmd-nights tr.on td{color:var(--txt);font-weight:600}
.rmd-nights tfoot td{padding-top:6px;border-bottom:0;font-weight:600;color:var(--txt)}
.rmd-hist{display:flex;flex-direction:column;gap:6px;font-size:12.5px;color:var(--txt-2)}
.rmd-ext{margin-top:10px;padding:6px 8px;border-radius:6px;background:var(--bg-2);
  border:1px solid var(--line);font-size:11.5px;color:var(--muted)}
.rmd-foot{display:flex;gap:8px;padding:10px 14px;border-top:1px solid var(--line)}
html.theme-dark .rm-drawer{background:#1b2135;border-left-color:#2c3550}
html.theme-dark .rmd-head{border-bottom-color:#2c3550}
html.theme-dark .rmd-type{color:#c3cadb}
html.theme-dark .rmd-nights td{color:#c3cadb;border-bottom-color:#2c3550}
html.theme-dark .rmd-nights tr.on td{color:#e5e9f2}
html.theme-dark .rmd-nights tfoot td{color:#e5e9f2}
html.theme-dark .rmd-ext{background:#232a44;border-color:#3a4260;color:#8b93a7}
html.theme-dark .rmd-foot{border-top-color:#2c3550}
/* 宝寓登记资料读取块（订单详情「住客登记」行内） */
.gr-ext{margin-top:6px}
.gr-ext-row{display:flex;align-items:center;gap:8px;flex-wrap:wrap;padding:6px 0;
  border-top:1px dashed var(--line);font-size:12.5px;color:var(--txt-2)}
.gr-ext-row .btn{margin-left:auto}
html.theme-dark .gr-ext-row{border-top-color:#2c3550;color:#c3cadb}
@media(max-width:640px){
  .rm-drawer{width:100%;max-width:100%;top:auto;height:62vh;border-left:0;border-top:1px solid var(--line);
    border-radius:14px 14px 0 0;animation:rmd-up .18s ease-out}
  @keyframes rmd-up{from{transform:translateY(24px);opacity:.4}to{transform:translateY(0);opacity:1}}
  .rm-bar{font-size:12px}
}

/* ---------- 欠房费提示（第 23 轮 · 收款方式 = 挂账 / 暂不收款） ----------
   和「未缴押金」的红框成对出现：押金=红（客人没交钱锁房），房费=橙（账挂着）。
   两类可以叠在同一间房上，所以颜色和边框风格要能区分，不能都描红。 */
.debt-tip{color:var(--warn-txt-strong);font-weight:600}
.chip.chip-warn{background:var(--warn-soft);color:var(--warn-txt);border-color:var(--warn-bd)}
.chip.chip-warn.on{background:var(--warn);color:#fff;border-color:var(--warn)}
.room.has-debt{border-style:dashed;border-color:var(--warn-bd)}
.room.has-debt:after{background:var(--warn)}
.room.has-debt .rm-no{color:var(--warn-txt-strong)}
.room .rm-debt{margin-top:4px;font-size:10px;font-weight:700;line-height:1.6;color:var(--warn-txt-strong);
  background:var(--warn-soft);border-radius:6px;padding:1px 6px;display:inline-block;max-width:100%;
  white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.floor-debt{margin-left:8px;font-size:11px;font-weight:600;color:var(--warn-txt);background:var(--warn-soft);
  border-radius:20px;padding:2px 9px;white-space:nowrap}
/* 今晚有预订（第 24 轮）：右上角橙色小旗 + 底部一行「今 · 到店」。
   与欠房费的虚橙框区分开：这是「房是空的但今晚有人来」，靠旗子而不是边框表达。 */
.room.has-tonight{border-color:var(--warn-bd)}
.room.has-tonight .rm-tn{margin-top:4px;font-size:10px;font-weight:700;line-height:1.5;color:#7a4b00;
  background:#fdf0d8;border-radius:6px;padding:1px 6px;display:inline-block;white-space:nowrap}
.room.has-tonight:before{content:"今";position:absolute;top:0;right:0;width:15px;height:15px;
  background:var(--warn);color:#fff;font-size:9px;line-height:15px;text-align:center;
  border-radius:0 7px 0 6px;font-weight:700}
/* 状态圆点会被「今」旗压住，有旗时直接隐藏（状态仍由底色 + 文案表达） */
.room.has-tonight:after{display:none}
html.theme-dark .room.has-tonight{border-color:#6b5220}
html.theme-dark .room.has-tonight .rm-tn{background:#3a2f16;color:#fbbf6b}
html.theme-dark .room.has-tonight:before{background:#c98a2e;color:#1c1710}
.tl-row.has-debt .tl-rm{box-shadow:inset 3px 0 0 var(--warn)}
.tl-row.is-nocert .tl-rm{box-shadow:inset 3px 0 0 var(--danger)}
.tl-row.is-nodep.is-nocert .tl-rm{box-shadow:inset 3px 0 0 var(--danger),inset 7px 0 0 var(--warn)}
.tl-row.is-nocert.has-debt .tl-rm{box-shadow:inset 3px 0 0 var(--danger),inset 7px 0 0 var(--warn)}
.tl-row.is-nodep.is-nocert.has-debt .tl-rm{box-shadow:inset 3px 0 0 var(--danger),inset 6px 0 0 var(--warn),inset 9px 0 0 var(--warn)}
.tl-row.is-nodep.has-debt .tl-rm{box-shadow:inset 3px 0 0 var(--danger),inset 7px 0 0 var(--warn)}
.tl-dep,.tl-debt,.tl-cert{display:inline-flex;align-items:center;justify-content:center;width:18px;height:18px;border-radius:5px;
  font-style:normal;font-size:11px;font-weight:800;line-height:1;margin-left:3px;vertical-align:middle;flex:none;
  box-shadow:inset 0 0 0 1px rgba(0,0,0,.08)}
.tl-dep{background:var(--danger-soft);color:var(--danger-txt)}
.tl-cert{background:var(--danger-soft);color:var(--danger-txt)}
.tl-debt{background:var(--warn-soft);color:var(--warn-txt-strong)}
/* 办入住 / 退房弹窗里的欠款块 */
.ci-debt{margin-top:12px;padding:10px 12px;border:1px solid var(--warn-bd);background:var(--warn-soft);border-radius:10px}
.ci-debt-h{font-size:12.5px;font-weight:600;color:var(--warn-txt-strong);display:flex;align-items:center;gap:8px;flex-wrap:wrap;margin-bottom:4px}
.ci-debt-h b{font-size:15px;font-variant-numeric:tabular-nums}
.ci-debt .ci-hint{color:var(--warn-txt-strong);opacity:.92}
.ci-debt-amt{color:var(--warn-txt-strong);font-variant-numeric:tabular-nums}
/* 客史档案统计块（会员详情内） */
.gh-stats{display:grid;grid-template-columns:repeat(4,1fr);gap:8px;margin:6px 0 10px}
.gh-st{background:var(--bg-2);border:1px solid var(--line);border-radius:9px;padding:8px 10px}
.gh-st b{display:block;font-size:15px;font-weight:800;color:var(--txt);font-variant-numeric:tabular-nums;
  white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.gh-st span{font-size:11.5px;color:var(--muted)}
html.theme-dark .chip.chip-warn{background:#3a2f16;border-color:#6b5220;color:#fbbf6b}
html.theme-dark .chip.chip-warn.on{background:var(--warn);color:#1b1508}
html.theme-dark .room.has-debt{border-color:#6b5220}
html.theme-dark .room.has-debt:after{background:#fbbf6b}
html.theme-dark .room.has-debt .rm-no{color:#fbbf6b}
html.theme-dark .room .rm-debt{background:#3a2f16;color:#fbbf6b}
html.theme-dark .floor-debt{background:#3a2f16;color:#fbbf6b}
html.theme-dark .debt-tip{color:#fbbf6b}
html.theme-dark .tl-dep{background:#4a1d1d;color:#fca5a5}
html.theme-dark .tl-debt{background:#3a2f16;color:#fbbf6b}
html.theme-dark .ci-debt{background:#3a2f16;border-color:#6b5220}
html.theme-dark .ci-debt-h{color:#fbbf6b}
html.theme-dark .ci-debt .ci-hint{color:#f0d9b5}
html.theme-dark .ci-debt-amt{color:#fbbf6b}
html.theme-dark .gh-st{background:#1e2436;border-color:#2c3550}
html.theme-dark .gh-st b{color:#e5e9f2}
html.theme-dark .gh-st span{color:#8b93a7}
@media(max-width:900px){.gh-stats{grid-template-columns:repeat(2,1fr)}}

/* ===========================================================
   今日任务流（第 24 轮 · 第 2 期）
   房态看板顶部一条固定队列：待入住 / 待退房 / 欠房费 / 未缴押金 / 脏房 / 今晚有预订
   =========================================================== */
.task-bar{display:flex;gap:8px;flex-wrap:wrap;align-items:center;margin:2px 0 14px}
.task-chip{display:inline-flex;align-items:center;gap:8px;border:1px solid var(--line);background:var(--card);
  border-radius:10px;padding:7px 12px;cursor:pointer;transition:.13s;font:inherit;text-align:left}
.task-chip:hover{border-color:var(--primary-2);transform:translateY(-1px);box-shadow:0 3px 10px rgba(28,32,51,.07)}
.task-chip i{font-style:normal;width:20px;height:20px;border-radius:6px;display:inline-flex;align-items:center;
  justify-content:center;font-size:11px;font-weight:700;background:var(--muted-soft);color:var(--muted);flex:none}
.task-chip b{font-size:15px;font-weight:700;font-variant-numeric:tabular-nums;color:var(--txt);line-height:1}
.task-chip span{font-size:12px;color:var(--txt-2);white-space:nowrap}
.task-chip.t-danger i{background:var(--danger-soft);color:var(--danger)}
.task-chip.t-warn i{background:var(--warn-soft);color:var(--warn-txt)}
.task-chip.t-accent i{background:var(--accent-soft);color:var(--accent-txt)}
.task-chip.zero{opacity:.45}
.task-chip.zero b{color:var(--muted)}
.task-hint{margin-left:auto;font-size:11.5px;color:var(--muted)}
html.theme-dark .task-chip{background:#1b1e2b;border-color:#2c3040}
html.theme-dark .task-chip b{color:#e8eaf3}
html.theme-dark .task-chip span{color:#a3a8bd}
html.theme-dark .task-chip i{background:#262a38;color:#a3a8bd}
html.theme-dark .task-chip.t-danger i{background:#3a1f22;color:#ff9a9d}
html.theme-dark .task-chip.t-warn i{background:#3a2f16;color:#fbbf6b}
html.theme-dark .task-chip.t-accent i{background:#10333a;color:#5fd6e6}
html.theme-dark .task-hint{color:#7b8096}
@media (max-width:860px){
  .task-chip{padding:6px 9px;gap:6px}
  .task-chip span{font-size:11px}
  .task-hint{display:none}
}

/* ===========================================================
   抽屉形态弹窗（第 24 轮 · 房间作业面板）
   roomModal 走 drawer：右侧滑出，左侧房态图仍然可见
   =========================================================== */
.modal-mask.drawer-mask{align-items:stretch;justify-content:flex-end;padding:0}
.modal.drawer{margin:0;height:100vh;max-height:100vh;border-radius:0;width:560px;max-width:96vw;
  animation:drawerIn .2s cubic-bezier(.2,.9,.3,1)}
.modal.drawer.wide{width:860px}
.modal.drawer .modal-body{flex:1;overflow:auto;-webkit-overflow-scrolling:touch}
.modal.drawer .modal-head{position:sticky;top:0;background:var(--card);z-index:2}
@keyframes drawerIn{from{transform:translateX(30px);opacity:.55}to{transform:none;opacity:1}}
html.theme-dark .modal.drawer{background:#171a24;border-left:1px solid #262a38}
html.theme-dark .modal.drawer .modal-head{background:#171a24}
@media (max-width:860px){
  .modal.drawer,.modal.drawer.wide{width:100%;max-width:100%;height:92vh;margin-top:8vh;
    border-radius:18px 18px 0 0;animation:drawerUp .2s ease}
  @keyframes drawerUp{from{transform:translateY(40px);opacity:.5}to{transform:none;opacity:1}}
}

/* ===========================================================
   房态格角标：押 / 证 / 欠（第 25 轮）
   一个方块一个字，红色=缺、青色=已办；金额放在 title 里，不占格子
   =========================================================== */
.room .rm-flags{display:flex;gap:3px;margin-top:4px;align-items:center}
.room .rm-flag{font-style:normal;width:17px;height:17px;line-height:17px;text-align:center;
  border-radius:4px;font-size:11px;font-weight:800;background:var(--danger);color:#fff;
  flex:none;letter-spacing:0;box-shadow:inset 0 0 0 1px rgba(0,0,0,.08)}
.room .rm-flag.ok{background:var(--ok)}
.room .rm-flag.cert{background:var(--danger-txt)}
html.theme-dark .room .rm-flag{background:#c8393f;color:#fff}
html.theme-dark .room .rm-flag.ok{background:#0f9b8c}
html.theme-dark .room .rm-flag.cert{background:#b83036}
/* 格子里同时有「金额欠款块」时别把它挤没了 */
.room .rm-flags + .rm-debt{margin-top:3px}

/* ===========================================================
   宝寓行角标（第 27 轮）
   真实门店在住单全在宝寓：证件没同步到 PMS 时用琥珀色，
   和「本地确实没登记」的红色区分开，避免整屏告警
   =========================================================== */
.room .rm-flag.cert.ext{background:var(--warn);color:#3b2a10}
html.theme-dark .room .rm-flag.cert.ext{background:#c9973f;color:#1a1408}
.tl-cert.ext{background:var(--warn-soft);color:var(--warn-txt-strong)}
.tl-row.is-nocert-ext .tl-rm{box-shadow:inset 3px 0 0 var(--warn)}
.tl-row.is-nodep.is-nocert-ext .tl-rm{box-shadow:inset 3px 0 0 var(--warn),inset 7px 0 0 var(--danger)}
.tl-row.is-nocert-ext.has-debt .tl-rm{box-shadow:inset 3px 0 0 var(--warn),inset 7px 0 0 var(--warn)}

/* 日历行首角标：横向排在楼层后面（第 27 轮实测：竖排会被行高裁掉）
   第 28 轮：楼层与角标各占一个子元素 —— 列窄时只省略楼层，角标永不裁切 */
.tl-rm .tl-sub{display:flex;align-items:center;gap:2px;min-width:0;overflow:hidden}
.tl-rm .tl-floor{flex:0 1 auto;min-width:0;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.tl-rm .tl-badges{display:inline-flex;align-items:center;gap:3px;margin-left:2px;vertical-align:middle;flex:none}
.tl-rm .tl-badges .tl-dep,.tl-rm .tl-badges .tl-cert,.tl-rm .tl-badges .tl-debt{margin-left:0}

/* ===========================================================
   证件自动识别状态条（第 28 轮）
   上传头像面后在这条里显示进度 / 识别结果；不弹窗、不打断录入
   =========================================================== */
.gr-ocr{margin-top:10px;padding:9px 12px;border-radius:9px;font-size:12.5px;line-height:1.65;
  border:1px solid var(--line);background:var(--bg-2);color:var(--txt-2)}
.gr-ocr b{color:var(--txt)}
.gr-ocr.busy{border-color:var(--primary);background:var(--primary-soft);color:var(--primary)}
.gr-ocr.ok{border-color:#b7e2c9;background:#eef9f2;color:#166f4f}
.gr-ocr.warn{border-color:var(--warn-bd);background:var(--warn-soft);color:var(--warn-txt-strong)}
.gr-ocr-sub{display:block;margin-top:3px;font-size:11.5px;opacity:.82;font-weight:400}
html.theme-dark .gr-ocr.ok{background:#153127;border-color:#245c46;color:#5cc79a}
html.theme-dark .gr-ocr.ok b{color:#a8ecc9}
html.theme-dark .gr-ocr.warn{background:#3a2c15;border-color:#5a4420;color:#e0a94f}
html.theme-dark .gr-ocr.busy{background:#16283a;border-color:#2c4a66;color:#8fc3f0}

/* ===========================================================
   客户机监控（第 28 轮打通：PMS 菜单直达 + 房态角标）
   =========================================================== */
.mon-head{display:flex;align-items:center;gap:14px;flex-wrap:wrap;padding:2px 2px 12px}
.mon-title{display:flex;flex-direction:column;gap:2px;min-width:220px}
.mon-title b{font-size:16px;letter-spacing:.2px}
.mon-chips{display:flex;gap:6px;margin-left:auto;flex-wrap:wrap}
.mon-chip{display:inline-flex;align-items:baseline;gap:4px;font-size:12px;padding:3px 10px;border-radius:20px;
  background:var(--muted-soft);color:var(--txt-2);border:1px solid var(--line);white-space:nowrap}
.mon-chip b{font-size:14px;font-weight:700}
.mon-chip.all{background:var(--primary-soft);color:var(--primary);border-color:transparent}
.mon-chip.ok{background:var(--ok-soft);color:var(--ok-txt);border-color:transparent}
.mon-chip.warn{background:var(--warn-soft);color:var(--warn-txt);border-color:transparent}
.mon-chip.bad{background:var(--danger-soft);color:var(--danger-txt);border-color:transparent}
.mon-chip.off{background:var(--muted-soft);color:var(--muted);border-color:transparent}
.mon-acts{display:flex;gap:6px}
.mon-frame-wrap{border-top:1px solid var(--line);background:#0d1117;margin:0 -16px -16px;
  border-radius:0 0 var(--radius,14px) var(--radius,14px);overflow:hidden}
.mon-frame{width:100%;height:calc(100vh - 260px);min-height:560px;border:0;display:block}
.mon-loading{padding:72px 20px;text-align:center;color:var(--muted);font-size:13px}
html.theme-dark .mon-frame-wrap{background:#0b0f15}

/* 日历行角标：机（只在异常/高温/失联时出现） */
.tl-pc{display:inline-flex;align-items:center;justify-content:center;width:18px;height:18px;border-radius:5px;
  font-style:normal;font-size:10px;font-weight:700;line-height:1;margin-left:3px;vertical-align:middle}
.tl-pc.hot{background:var(--warn-soft);color:var(--warn-txt)}
.tl-pc.bad{background:var(--danger-soft);color:var(--danger-txt)}
.tl-pc.off{background:var(--muted-soft);color:var(--muted)}
html.theme-dark .tl-pc.hot{background:#4a3714;color:#f7c463}
html.theme-dark .tl-pc.bad{background:#4a1d1d;color:#fca5a5}
html.theme-dark .tl-pc.off{background:#2a3140;color:#9aa6b8}

/* 房间卡片右上角：机 */
.room .rm-pc{position:absolute;top:6px;right:6px;width:17px;height:17px;border-radius:4px;
  display:flex;align-items:center;justify-content:center;font-style:normal;font-size:9px;font-weight:700;z-index:2}
.room .rm-pc.hot{background:var(--warn-soft);color:var(--warn-txt);border:1px solid var(--warn-bd)}
.room .rm-pc.bad{background:var(--danger-soft);color:var(--danger-txt);border:1px solid var(--danger-bd)}
.room .rm-pc.off{background:var(--muted-soft);color:var(--muted);border:1px solid var(--line)}
html.theme-dark .room .rm-pc.hot{background:#4a3714;color:#f7c463;border-color:#6b4f1c}
html.theme-dark .room .rm-pc.bad{background:#4a1d1d;color:#fca5a5;border-color:#6d2c2c}
html.theme-dark .room .rm-pc.off{background:#2a3140;color:#9aa6b8;border-color:#3a4356}

/* 客户机监控并入「电竞设备管理」页签（第 30 轮）：安装说明清单 + 高温标记 */
.mon-guide{margin:0;padding-left:20px;font-size:13px;line-height:1.85;color:var(--txt-2)}
.mon-guide li+li{margin-top:5px}
.mon-guide b{color:var(--txt);font-weight:600}
.mon-guide code{font-family:ui-monospace,Consolas,monospace;font-size:12px;
  background:var(--muted-soft);padding:1px 5px;border-radius:4px;word-break:break-all}
.mon-hot{color:var(--danger-txt);font-weight:700}
html.theme-dark .mon-hot{color:#fca5a5}
.mon-panel .card + .card{margin-top:14px}
.mon-panel #monTbl .tbl-wrap{border-top:1px solid var(--line)}

/* 本店视图：每台机器一个大方块（2026-10-22 用户要求「和之前一样大方块」） */
.mon-sort{display:flex;gap:6px;align-items:center}
.mon-sort .input{flex:1 1 auto;min-width:118px}
.mon-group-hd{display:flex;align-items:baseline;gap:8px;margin:14px 0 8px;
  padding-bottom:6px;border-bottom:1px dashed var(--line)}
.mon-group-hd b{font-size:13.5px;letter-spacing:.02em}
.mon-cards{display:grid;grid-template-columns:repeat(auto-fill,minmax(232px,1fr));gap:12px}
.mon-card{display:flex;flex-direction:column;gap:6px;padding:12px 14px 10px;
  border:1px solid var(--line);border-left:4px solid var(--line);border-radius:14px;
  background:var(--card);transition:box-shadow .15s}
.mon-card:hover{box-shadow:0 4px 16px rgba(16,24,40,.08)}
.mon-card.st-normal{border-left-color:var(--ok)}
.mon-card.st-warning{border-left-color:var(--warn)}
.mon-card.st-error{border-left-color:var(--danger)}
.mon-card.st-offline{border-left-color:var(--muted)}
.mon-card.is-unassigned{background:var(--warn-soft);border-color:var(--warn-bd)}
.mon-card.is-focus{box-shadow:0 0 0 2px var(--primary-soft)}
.mc-hd{display:flex;align-items:center;justify-content:space-between;gap:8px}
.mc-hd b{font-size:16px;letter-spacing:.02em;font-variant-numeric:tabular-nums}
.mc-sub{font-size:12px;color:var(--txt-2);line-height:1.5}
.mc-un{color:var(--warn-txt);font-weight:700}
.mc-temp{display:flex;flex-wrap:wrap;align-items:baseline;gap:4px 8px;font-size:12.5px}
.mc-spec{font-size:12px;color:var(--muted);line-height:1.5;word-break:break-word}
.mc-ft{display:flex;align-items:center;justify-content:space-between;gap:8px;margin-top:2px;flex-wrap:wrap}
html.theme-dark .mon-card{background:var(--card)}
html.theme-dark .mon-card.is-unassigned{background:#3a2c15;border-color:#5a4420}
html.theme-dark .mon-card:hover{box-shadow:0 4px 18px rgba(0,0,0,.45)}
html.theme-dark .mon-card.is-focus{box-shadow:0 0 0 2px #2b3b5e}

@media (max-width: 640px){
  .mon-cards{grid-template-columns:repeat(auto-fill,minmax(160px,1fr));gap:10px}
  .mon-card{padding:10px 11px 9px}
  .mc-hd b{font-size:15px}
}

@media (max-width: 900px){
  .mon-frame{height:calc(100vh - 210px);min-height:460px}
  .mon-chips{margin-left:0}
}
