/* ============ 房满满酒管PMS · 全局 ============ */
* { margin:0; padding:0; box-sizing:border-box; }
html,body { height:100%; }
body {
  font: 14px/1.55 "Microsoft YaHei","PingFang SC",-apple-system,sans-serif;
  background:#f3f5f9; color:#333; overflow:hidden;
}
.hidden { display:none !important; }
a { text-decoration:none; color:inherit; cursor:pointer; }
button { font-family:inherit; cursor:pointer; }

/* ============ 按钮 ============ */
.btn {
  display:inline-block; padding:7px 16px; border:1px solid #d9e1ec; border-radius:4px;
  background:#fff; color:#333; font-size:13px; line-height:1.4; transition:all .15s; white-space:nowrap;
}
.btn:hover { border-color:#2b5cff; color:#2b5cff; }
.btn-primary { background:#2b5cff; border-color:#2b5cff; color:#fff; }
.btn-primary:hover { background:#1e4de6; color:#fff; }
.btn-sm { padding:4px 10px; font-size:12px; }
.btn-block { display:block; width:100%; }
.btn-ghost { background:transparent; border-color:rgba(255,255,255,.5); color:#fff; }
.btn-ghost:hover { background:rgba(255,255,255,.15); color:#fff; border-color:#fff; }
.btn-lg { padding:10px 20px; font-size:15px; }
.btn-danger { background:#e5484d; border-color:#e5484d; color:#fff; }
.btn-danger:hover { background:#cf3f44; color:#fff; }
.btn-warn { background:#ff8f1f; border-color:#ff8f1f; color:#fff; }
.btn-warn:hover { background:#ee7f0d; color:#fff; }
.btn-ok { background:#12b76a; border-color:#12b76a; color:#fff; }
.btn-ok:hover { background:#0fa25d; color:#fff; }
.btn[disabled] { opacity:.5; cursor:not-allowed; }

/* ============ 输入 ============ */
.ipt,.sel {
  width:100%; padding:8px 10px; border:1px solid #d9e1ec; border-radius:4px;
  font-size:14px; background:#fff; outline:none;
}
.ipt:focus,.sel:focus { border-color:#2b5cff; box-shadow:0 0 0 2px rgba(43,92,255,.12); }
.f-label { display:block; font-size:13px; color:#666; margin-bottom:4px; }
/* 兼容类（弹窗表单） */
.f-input { width:100%; padding:8px 10px; border:1px solid #d9e1ec; border-radius:4px; font-size:14px; background:#fff; outline:none; }
.f-input:focus { border-color:#2b5cff; box-shadow:0 0 0 2px rgba(43,92,255,.12); }
.mt10 { margin-top:10px; }
.flex { display:flex; gap:8px; align-items:center; }
.flex-between { display:flex; justify-content:space-between; align-items:center; gap:10px; }
.mb10 { margin-bottom:10px; }
.spacer { flex:1; }

/* ============ 登录页 ============ */
.login-page {
  position:fixed; inset:0; display:flex; align-items:center; justify-content:center;
  background:linear-gradient(160deg,#0b1f5e 0%,#1238c9 45%,#2b5cff 70%,#4f7bff 100%);
  overflow:hidden;
}
.login-page::before{
  content:""; position:absolute; inset:0;
  background:
    radial-gradient(1000px 420px at 18% -8%, rgba(255,255,255,.20), transparent 60%),
    radial-gradient(800px 380px at 92% 112%, rgba(255,255,255,.14), transparent 60%);
}
/* 星空夜景背景（CSS 星星） */
.login-stars {
  position:absolute; inset:0; pointer-events:none;
  background-image:
    radial-gradient(1.2px 1.2px at 12% 18%, rgba(255,255,255,.9) 50%, transparent 52%),
    radial-gradient(1px 1px at 28% 8%, rgba(255,255,255,.7) 50%, transparent 52%),
    radial-gradient(1.5px 1.5px at 42% 26%, rgba(255,255,255,.85) 50%, transparent 52%),
    radial-gradient(1px 1px at 56% 12%, rgba(255,255,255,.6) 50%, transparent 52%),
    radial-gradient(1.2px 1.2px at 66% 30%, rgba(255,255,255,.8) 50%, transparent 52%),
    radial-gradient(1px 1px at 78% 16%, rgba(255,255,255,.65) 50%, transparent 52%),
    radial-gradient(1.4px 1.4px at 88% 34%, rgba(255,255,255,.9) 50%, transparent 52%),
    radial-gradient(1px 1px at 8% 42%, rgba(255,255,255,.6) 50%, transparent 52%),
    radial-gradient(1.2px 1.2px at 24% 58%, rgba(255,255,255,.75) 50%, transparent 52%),
    radial-gradient(1px 1px at 38% 46%, rgba(255,255,255,.55) 50%, transparent 52%),
    radial-gradient(1.4px 1.4px at 52% 62%, rgba(255,255,255,.85) 50%, transparent 52%),
    radial-gradient(1px 1px at 64% 52%, rgba(255,255,255,.6) 50%, transparent 52%),
    radial-gradient(1.2px 1.2px at 76% 68%, rgba(255,255,255,.75) 50%, transparent 52%),
    radial-gradient(1px 1px at 90% 56%, rgba(255,255,255,.6) 50%, transparent 52%),
    radial-gradient(1.4px 1.4px at 96% 78%, rgba(255,255,255,.9) 50%, transparent 52%),
    radial-gradient(1px 1px at 16% 84%, rgba(255,255,255,.6) 50%, transparent 52%),
    radial-gradient(1.2px 1.2px at 48% 90%, rgba(255,255,255,.7) 50%, transparent 52%),
    radial-gradient(1px 1px at 72% 88%, rgba(255,255,255,.6) 50%, transparent 52%);
}
.login-box {
  position:relative; width:380px; background:#fff; border-radius:12px; padding:34px 36px 30px;
  box-shadow:0 24px 60px rgba(10,30,90,.35);
}
.login-logo { font-size:26px; font-weight:700; color:#1e4de6; text-align:center; letter-spacing:1px; }
.login-sub { font-size:12px; color:#8a94a6; text-align:center; margin:8px 0 24px; }
.login-form .ipt, .login-form .sel { margin-bottom:14px; }
.shift-row { display:flex; align-items:center; gap:10px; margin-bottom:10px; }
.shift-label { font-size:13px; color:#666; width:38px; }
.login-extra { display:flex; align-items:center; justify-content:space-between; margin-bottom:14px; }
.remember { font-size:12px; color:#666; display:flex; align-items:center; gap:4px; cursor:pointer; }
.forgot { font-size:12px; color:#1e4de6; cursor:pointer; }
.login-err { color:#e5484d; font-size:12px; text-align:center; margin-top:8px; min-height:18px; }

/* 消息中心 */
.tb-notice { cursor:pointer; }
.unread-row { background:#eef3ff; }
.dot-red { display:inline-block; width:7px; height:7px; border-radius:50%; background:#e5484d; margin-right:6px; vertical-align:middle; }

/* ============ 顶部导航 ============ */
.main-page { display:flex; flex-direction:column; height:100vh; }
.topbar {
  height:48px; flex:0 0 48px; display:flex; align-items:center; padding:0 14px;
  background:linear-gradient(90deg,#1639c4,#2b5cff 55%,#3d6cff);
  color:#fff; box-shadow:0 2px 8px rgba(20,50,150,.25); position:relative; z-index:60;
}
.brand { font-size:17px; font-weight:700; letter-spacing:1px; padding-right:22px; white-space:nowrap; }
.topnav { display:flex; align-items:center; gap:2px; flex:1; overflow-x:auto; height:48px; scrollbar-width:none; }
.topnav::-webkit-scrollbar { display:none; }
.nav-item {
  padding:0 10px; height:48px; line-height:48px; font-size:13.5px; color:rgba(255,255,255,.88);
  border-bottom:2px solid transparent; white-space:nowrap; flex-shrink:0; cursor:pointer; transition:all .15s;
}
.nav-item:hover { color:#fff; background:rgba(255,255,255,.10); }
.nav-item.active { color:#fff; font-weight:600; border-bottom-color:#ffd23f; background:rgba(255,255,255,.08); }
.nav-more-btn {
  flex-shrink:0; height:48px; line-height:48px; padding:0 14px; font-size:13.5px; color:#ffd23f;
  cursor:pointer; user-select:none; border-left:1px solid rgba(255,255,255,.18); transition:all .15s;
}
.nav-more-btn:hover { color:#fff; background:rgba(255,255,255,.12); }
.nav-caret { font-size:10px; margin-left:2px; }
.more-panel {
  display:none; position:fixed; right:320px; top:52px; z-index:1200; min-width:140px; max-height:70vh; overflow:auto;
  background:#1e2b4d; border:1px solid rgba(255,255,255,.14); border-radius:8px; box-shadow:0 8px 24px rgba(0,0,0,.35); padding:6px;
}
.more-panel.show { display:block; }
.more-item { padding:9px 14px; font-size:13.5px; color:rgba(255,255,255,.9); border-radius:5px; cursor:pointer; white-space:nowrap; }
.more-item:hover { background:rgba(255,255,255,.12); color:#fff; }
.more-item.active { background:rgba(255,255,255,.16); color:#ffd23f; font-weight:600; }
.topbar-right { display:flex; align-items:center; gap:8px; white-space:nowrap; }
.tb-btn {
  height:30px; padding:0 10px; border:1px solid rgba(255,255,255,.45); border-radius:4px;
  background:rgba(255,255,255,.08); color:#fff; font-size:12.5px; line-height:1;
}
.tb-btn:hover { background:rgba(255,255,255,.2); }
.tb-notice { font-size:12.5px; color:#fff; position:relative; cursor:pointer; padding:4px 6px; }
.tb-notice b {
  position:absolute; top:-4px; right:-2px; min-width:15px; height:15px; line-height:15px; text-align:center;
  background:#ff3b30; color:#fff; font-size:10px; border-radius:8px; padding:0 3px;
}
.biz-date { font-size:12.5px; color:rgba(255,255,255,.85); padding:0 4px; }
.user-info { font-size:12.5px; color:#fff; padding:0 4px; }

/* ============ 快速办理下拉 ============ */
.quick-wrap { position:relative; }
.quick-menu {
  position:absolute; right:0; top:36px; width:168px; background:#fff; border:1px solid #e3e9f2;
  border-radius:6px; box-shadow:0 12px 32px rgba(20,40,90,.18); z-index:80; padding:6px 0; overflow:hidden;
}
.quick-menu a {
  display:block; padding:9px 16px; font-size:13.5px; color:#333; border-bottom:1px solid #f2f5fa;
}
.quick-menu a:hover { background:#f0f4ff; color:#2b5cff; }
.quick-menu a:last-child { border-bottom:none; }

/* ============ 多页签 ============ */
.tabbar {
  height:34px; flex:0 0 34px; display:flex; align-items:flex-end; gap:2px; padding:0 10px;
  background:#fff; border-bottom:1px solid #e3e9f2; position:relative; z-index:50;
}
.tab {
  display:inline-flex; align-items:center; gap:6px; height:28px; padding:0 14px; margin-top:4px;
  font-size:13px; color:#555; background:#f5f7fa; border:1px solid #e3e9f2; border-bottom:none;
  border-radius:5px 5px 0 0; cursor:pointer;
}
.tab.active { background:#2b5cff; color:#fff; border-color:#2b5cff; font-weight:600; }
.tab .tab-x { color:#b9c2d0; font-size:14px; margin-left:2px; }
.tab.active .tab-x { color:#fff; }
.tab .tab-x:hover { color:#e5484d; }

/* ============ 内容区 ============ */
.content { flex:1; overflow:auto; background:#f3f5f9; }
.page { padding:14px; min-height:100%; }

/* ============ 卡片 ============ */
.card {
  background:#fff; border:1px solid #e6ebf3; border-radius:8px; padding:14px 16px;
  box-shadow:0 1px 3px rgba(20,40,90,.04);
}
.card-title { font-size:14px; font-weight:600; color:#1a2b52; margin-bottom:10px; display:flex; align-items:center; gap:8px; }
.card-title .sub { font-size:12px; color:#9aa3b8; font-weight:400; }

/* ============ 表格 ============ */
.tbl-wrap { overflow:auto; }
table.tbl { width:100%; border-collapse:collapse; font-size:13px; }
table.tbl th {
  background:#f0f4ff; color:#31456e; font-weight:600; text-align:left; padding:8px 10px;
  border-bottom:1px solid #dde5f2; white-space:nowrap;
}
table.tbl td { padding:8px 10px; border-bottom:1px solid #f0f3f8; color:#3a4556; white-space:nowrap; }
table.tbl tr:hover td { background:#f8faff; }
table.tbl .num { text-align:right; font-variant-numeric:tabular-nums; }
.empty { text-align:center; color:#9aa3b8; padding:26px 0 !important; }

/* ============ 徽标 ============ */
.badge { display:inline-block; padding:2px 8px; border-radius:10px; font-size:12px; line-height:1.5; }
.badge.info { background:#e8efff; color:#2b5cff; }
.badge.ok { background:#e6f7ef; color:#0f9d58; }
.badge.warn { background:#fff4e0; color:#d97706; }
.badge.danger { background:#fde8e8; color:#d33030; }
.badge.gray { background:#eef1f5; color:#6b7688; }

/* ============ 房态网格 ============ */
.room-layout { display:flex; gap:12px; height:calc(100vh - 132px); }
.sidebar {
  width:230px; flex:0 0 230px; background:linear-gradient(180deg,#fbfcff 0%,#fff 55%);
  border:1px solid #e3eaf7; border-radius:10px; overflow-y:auto; padding:12px 14px;
  box-shadow:0 2px 10px rgba(20,40,90,.05);
}
.sidebar h4 {
  font-size:12.5px; font-weight:700; color:#7b8aa8; letter-spacing:.5px; margin:14px 0 8px;
  display:flex; justify-content:space-between; align-items:center; padding-bottom:6px;
  border-bottom:1px solid #eef2f9;
}
.sidebar h4:first-child { margin-top:2px; }
.sidebar h4::before {
  content:''; width:3px; height:12px; border-radius:2px; background:linear-gradient(180deg,#2b5cff,#6c8cff); margin-right:6px;
}
.sidebar h4 .h-cnt { background:#eef3ff; color:#2b5cff; border-radius:9px; padding:0 8px; font-size:11.5px; font-weight:600; }
.sidebar .side-item {
  font-size:12.5px; color:#4a5672; padding:7px 10px; margin:2px 0; display:flex; justify-content:space-between;
  align-items:center; border-radius:7px; cursor:pointer; transition:all .15s;
}
.sidebar .side-item:hover { background:#f0f5ff; color:#2b5cff; }
.sidebar .side-item .n {
  color:#2b5cff; font-weight:600; background:#eef3ff; border-radius:10px; padding:1px 8px; font-size:12px; min-width:22px; text-align:center;
}
.sidebar .side-item.side-active { background:#eef3ff; color:#2b5cff; font-weight:600; box-shadow:inset 3px 0 0 #2b5cff; }
.sidebar .side-item.side-active .n { background:#2b5cff; color:#fff; }
.sidebar .side-link, .split-left .side-link {
  display:flex; align-items:center; gap:8px; padding:9px 10px; margin:2px 0; font-size:13px;
  color:#4a5672; border-radius:7px; cursor:pointer; position:relative; transition:all .15s; white-space:nowrap;
}
.sidebar .side-link .s-ico, .split-left .side-link .s-ico { width:20px; text-align:center; font-size:14px; flex-shrink:0; }
.sidebar .side-link .cnt, .split-left .side-link .cnt {
  margin-left:auto; background:#eef3ff; color:#2b5cff; border-radius:10px; padding:1px 8px;
  font-size:12px; font-weight:600; min-width:22px; text-align:center;
}
.sidebar .side-link:hover, .split-left .side-link:hover { background:#f0f5ff; color:#2b5cff; }
.sidebar .side-link.active, .split-left .side-link.active {
  background:linear-gradient(90deg,#2b5cff,#4a7bff); color:#fff; font-weight:600;
  box-shadow:0 4px 12px rgba(43,92,255,.28);
}
.sidebar .side-link.active .cnt, .split-left .side-link.active .cnt { background:rgba(255,255,255,.25); color:#fff; }
.sidebar hr { border:none; border-top:1px solid #eef1f6; margin:10px 0; }
.side-row { display:flex; gap:6px; margin-top:8px; }
.side-row .btn { flex:1; padding:5px 4px; font-size:12px; }

.room-main { flex:1; display:flex; flex-direction:column; gap:10px; min-width:0; }
.room-toolbar {
  background:#fff; border:1px solid #e6ebf3; border-radius:8px; padding:8px 12px;
  display:flex; align-items:center; gap:14px; flex-wrap:wrap;
}
.room-toolbar .view-tabs { display:flex; gap:2px; }
.room-toolbar .view-tabs a {
  padding:5px 12px; font-size:13px; color:#555; border:1px solid transparent; border-radius:4px; cursor:pointer;
}
.room-toolbar .view-tabs a.active { background:#2b5cff; color:#fff; }
.room-toolbar .floors { display:flex; gap:2px; align-items:center; }
.room-toolbar .floors a { padding:4px 10px; font-size:12.5px; color:#555; border-radius:4px; cursor:pointer; }
.room-toolbar .floors a.active { background:#eef3ff; color:#2b5cff; font-weight:600; }
.room-toolbar .rates { font-size:13px; color:#1a2b52; font-weight:600; }
.room-toolbar .rates small { color:#9aa3b8; font-weight:400; }
.room-toolbar .spacer { flex:1; }

.room-board { background:#fff; border:1px solid #e6ebf3; border-radius:8px; flex:1; overflow-y:auto; padding:10px 12px; }
.room-view-body { background:#fff; border:1px solid #e6ebf3; border-radius:8px; flex:1; overflow-y:auto; padding:10px 12px; }
.room-view-body .loading { color:#9aa3b8; text-align:center; padding:40px 0; }
.room-group { margin-bottom:12px; }
.room-group-title {
  font-size:13px; font-weight:600; color:#31456e; padding:6px 4px 8px;
  border-bottom:1px solid #eef1f6; display:flex; gap:12px; align-items:center;
}
.room-group-title .cnt { color:#9aa3b8; font-weight:400; font-size:12px; }
.room-grid { display:flex; flex-wrap:wrap; gap:6px; padding-top:8px; }
.room-cell {
  width:118px; border-radius:6px; padding:5px 7px 6px; cursor:pointer; position:relative;
  border:2px solid transparent; transition:all .12s; min-height:54px;
}
.room-cell:hover { transform:translateY(-1px); box-shadow:0 4px 12px rgba(20,40,90,.14); }
.room-cell.selected { border-color:#2b5cff; box-shadow:0 0 0 2px rgba(43,92,255,.25); }
.room-cell .rc-no { font-size:13.5px; font-weight:700; color:#fff; display:flex; justify-content:space-between; align-items:center; }
.room-cell .rc-no .m { font-size:10px; font-weight:400; opacity:.9; }
.room-cell .rc-type { font-size:11px; color:rgba(255,255,255,.9); margin-top:1px; }
.room-cell .rc-guest { font-size:11px; color:rgba(255,255,255,.92); margin-top:1px; overflow:hidden; text-overflow:ellipsis; white-space:nowrap; }
.room-cell .rc-rate { font-size:11.5px; color:#fff; margin-top:1px; font-weight:600; }
.room-cell .rc-check { position:absolute; top:3px; right:3px; display:none; }
.room-cell.multi .rc-check { display:block; }
/* 房态色 */
.room-cell.st-VC { background:linear-gradient(145deg,#2fbf71,#22a35c); }  /* 空净 绿 */
.room-cell.st-VD { background:linear-gradient(145deg,#a8b0bd,#8d97a6); }  /* 空脏 灰 */
.room-cell.st-OC { background:linear-gradient(145deg,#ffa43c,#f58a12); }  /* 住净 橙 */
.room-cell.st-OD { background:linear-gradient(145deg,#f58a12,#e07a08); }  /* 住脏 深橙 */
.room-cell.st-MT { background:linear-gradient(145deg,#9d7ff0,#7c5fe0); }  /* 维修 紫 */
.room-cell.st-LC { background:linear-gradient(145deg,#5aa5f0,#3b82f6); }  /* 锁房 蓝 */

/* 房态图例 */
.legend { display:flex; gap:14px; flex-wrap:wrap; }
.legend span { display:inline-flex; align-items:center; gap:5px; font-size:12.5px; color:#555; }
.legend i { width:12px; height:12px; border-radius:3px; display:inline-block; }
.legend .l-VC{background:#2fbf71}.legend .l-VD{background:#a8b0bd}.legend .l-OC{background:#ffa43c}
.legend .l-OD{background:#f58a12}.legend .l-MT{background:#9d7ff0}.legend .l-LC{background:#5aa5f0}

/* ============ 房间操作浮层 ============ */
.room-mask { position:fixed; inset:0; background:rgba(15,25,60,.35); z-index:90; }
.room-panel {
  position:fixed; top:0; right:0; width:460px; height:100vh; background:#fff; z-index:95;
  box-shadow:-8px 0 30px rgba(15,30,70,.18); overflow-y:auto; padding:18px 20px;
}
.room-panel .rp-head { font-size:17px; font-weight:700; color:#1a2b52; display:flex; justify-content:space-between; align-items:center; margin-bottom:14px; }
.rp-close { font-size:20px; color:#9aa3b8; cursor:pointer; padding:0 4px; }
.rp-close:hover { color:#e5484d; }
.rp-section { margin-bottom:16px; }
.rp-title { font-size:13px; font-weight:600; color:#31456e; margin-bottom:8px; }
.rp-grid { display:grid; grid-template-columns:1fr 1fr; gap:8px; }
.rp-item { background:#f7f9fc; border:1px solid #eef1f6; border-radius:6px; padding:7px 10px; }
.rp-item .k { font-size:11.5px; color:#8a94a6; }
.rp-item .v { font-size:14px; color:#1a2b52; font-weight:600; }
.rp-item .v.danger { color:#e5484d; }
.rp-btns { display:flex; flex-wrap:wrap; gap:8px; }
.rp-btns .btn { flex:0 0 auto; padding:6px 12px; font-size:12.5px; }
.rp-textarea { width:100%; min-height:54px; border:1px solid #d9e1ec; border-radius:4px; padding:7px 9px; font-size:13px; resize:vertical; outline:none; }
.rp-textarea:focus { border-color:#2b5cff; }

/* ============ 首页 ============ */
.hero {
  background:linear-gradient(120deg,#1b47d8,#2b5cff 60%,#4f7bff); border-radius:10px; color:#fff;
  padding:20px 26px; display:flex; justify-content:space-between; align-items:center; margin-bottom:14px;
  box-shadow:0 6px 20px rgba(30,70,200,.25);
}
.hero .h1 { font-size:22px; font-weight:700; }
.hero .h2 { font-size:13px; color:rgba(255,255,255,.85); margin-top:6px; }
.hero .h-phone { font-size:15px; color:#ffd76a; font-weight:600; }
.stat-row { display:grid; grid-template-columns:repeat(3,1fr); gap:12px; margin-bottom:14px; }
.stat-card {
  background:#fff; border:1px solid #e6ebf3; border-radius:8px; padding:14px 18px; display:flex;
  justify-content:space-between; align-items:center;
}
.stat-card .k { font-size:13px; color:#6b7688; }
.stat-card .v { font-size:26px; font-weight:700; color:#1a2b52; margin-top:4px; }
.stat-card .v .unit { font-size:13px; color:#9aa3b8; font-weight:400; }
.stat-card .link { font-size:12px; color:#2b5cff; margin-top:6px; cursor:pointer; }
.stat-card.blue .v { color:#2b5cff; }
.dash-grid { display:grid; grid-template-columns:1.1fr 1.1fr 1fr; gap:12px; }
.dash-card { background:#fff; border:1px solid #e6ebf3; border-radius:8px; padding:16px 18px; }
.dash-card .dc-title { font-size:13.5px; font-weight:600; color:#31456e; margin-bottom:12px; display:flex; justify-content:space-between; }
.dash-card .dc-title .total { color:#2b5cff; }
.ring-wrap { display:flex; align-items:center; gap:18px; }
.ring-center { position:relative; width:130px; height:130px; }
.ring-center svg { transform:rotate(-90deg); }
.ring-center .ring-txt { position:absolute; inset:0; display:flex; flex-direction:column; align-items:center; justify-content:center; }
.ring-center .ring-txt b { font-size:24px; color:#1a2b52; }
.ring-center .ring-txt span { font-size:12px; color:#9aa3b8; }
.donut-wrap { display:flex; align-items:center; gap:18px; }
.donut { width:120px; height:120px; border-radius:50%; position:relative; flex:0 0 120px; }
.donut::after { content:""; position:absolute; inset:22px; background:#fff; border-radius:50%; }
.donut-txt { position:absolute; inset:0; display:flex; flex-direction:column; align-items:center; justify-content:center; z-index:2; }
.donut-txt b { font-size:20px; color:#1a2b52; }
.donut-txt span { font-size:11px; color:#9aa3b8; }
.legend-col { display:flex; flex-direction:column; gap:5px; }
.legend-col span { display:flex; justify-content:space-between; gap:18px; font-size:12.5px; color:#555; }
.legend-col b { color:#1a2b52; }
.rate-grid { display:grid; grid-template-columns:1fr 1fr; gap:10px; }
.rate-item { background:#f7f9fc; border:1px solid #eef1f6; border-radius:8px; padding:12px; text-align:center; }
.rate-item .k { font-size:12px; color:#8a94a6; }
.rate-item .v { font-size:22px; font-weight:700; color:#1a2b52; margin-top:4px; }
.rate-item .v.g { color:#0f9d58; }
.rate-item .v.b { color:#2b5cff; }
.fab {
  position:fixed; right:26px; bottom:26px; z-index:70; width:56px; height:56px; border-radius:50%;
  background:linear-gradient(135deg,#ff9a3c,#f5760a); color:#fff; font-size:13px; font-weight:600;
  display:flex; align-items:center; justify-content:center; box-shadow:0 8px 22px rgba(245,118,10,.4);
  border:none; cursor:pointer; transition:all .15s;
}
.fab:hover { transform:translateY(-2px); box-shadow:0 12px 26px rgba(245,118,10,.5); }

/* ============ 订单/夜审等左右布局 ============ */
.split-layout { display:flex; gap:12px; height:calc(100vh - 132px); }
.split-left.card {
  width:196px; flex:0 0 196px; padding:14px 12px !important; overflow-y:auto;
  background:linear-gradient(180deg,#fbfcff 0%,#fff 55%);
  border:1px solid #e3eaf7; border-radius:10px; box-shadow:0 2px 10px rgba(20,40,90,.05);
}
.split-left .card-title {
  font-size:12.5px; font-weight:700; color:#7b8aa8; letter-spacing:.5px;
  padding-bottom:8px; margin-bottom:10px; border-bottom:1px solid #eef2f9;
  display:flex; align-items:center; gap:8px;
}
.split-left .card-title::before {
  content:''; width:3px; height:14px; border-radius:2px; background:linear-gradient(180deg,#2b5cff,#6c8cff);
}
.split-left hr { border:none; border-top:1px solid #eef1f6; margin:10px 0; }
.split-main { flex:1; min-width:0; display:flex; flex-direction:column; gap:10px; }
.orders-toolbar { display:flex; gap:8px; align-items:center; flex-wrap:wrap; }
.orders-toolbar .ipt { width:280px; }
.order-table-wrap { flex:1; overflow:auto; }
.chip { display:inline-flex; align-items:center; gap:4px; font-size:12px; color:#555; cursor:pointer; padding:4px 10px; border:1px solid #e0e6f0; border-radius:14px; background:#fff; }
.chip.active { background:#2b5cff; color:#fff; border-color:#2b5cff; }

/* ============ 夜审 ============ */
.na-item {
  display:flex; justify-content:space-between; align-items:center; padding:9px 10px; border:1px solid #e6ebf3;
  border-radius:6px; margin-bottom:8px; font-size:13px; background:#fff;
}
.na-item .st { font-size:12px; }

/* ============ 弹窗 ============ */
.modal-mask { position:fixed; inset:0; background:rgba(15,25,60,.4); z-index:100; display:flex; align-items:center; justify-content:center; }
.modal-box {
  background:#fff; border-radius:10px; width:520px; max-width:92vw; max-height:86vh; overflow:auto;
  padding:20px 22px; box-shadow:0 20px 60px rgba(10,25,70,.3);
}
.modal-title { font-size:16px; font-weight:700; color:#1a2b52; margin-bottom:16px; }
.modal-actions { display:flex; gap:10px; justify-content:flex-end; margin-top:16px; }
.form-grid { display:grid; grid-template-columns:1fr 1fr; gap:12px 14px; }
.form-grid .full { grid-column:1 / -1; }
.f-line { margin-bottom:12px; }

/* ============ 锁屏 ============ */
.lock-screen {
  position:fixed; inset:0; z-index:200; background:linear-gradient(135deg,#0f2f9e,#2b5cff 55%,#4f7bff);
  display:flex; align-items:center; justify-content:center;
}
.lock-inner { width:340px; text-align:center; color:#fff; }
.lock-logo { font-size:24px; font-weight:700; letter-spacing:2px; margin-bottom:26px; }
.lock-time { font-size:64px; font-weight:700; letter-spacing:4px; }
.lock-date { font-size:15px; color:rgba(255,255,255,.85); margin:8px 0 34px; }
.lock-input { text-align:center; color:#fff; background:rgba(255,255,255,.12); border-color:rgba(255,255,255,.4); margin-bottom:12px; }
.lock-input::placeholder { color:rgba(255,255,255,.55); }
.lock-inner .btn { background:#fff; color:#2b5cff; border:none; }
.lock-inner .btn:hover { background:#ffd76a; color:#1a2b52; }

/* ============ Toast ============ */
.toast {
  position:fixed; top:64px; left:50%; transform:translateX(-50%); z-index:300;
  background:rgba(20,32,60,.92); color:#fff; padding:10px 22px; border-radius:6px;
  font-size:13.5px; box-shadow:0 8px 24px rgba(10,25,70,.3); max-width:70vw;
}

/* ============ 报表/图表通用 ============ */
.bar-col { display:flex; align-items:flex-end; gap:10px; height:160px; padding:0 8px; }
.bar-item { flex:1; display:flex; flex-direction:column; align-items:center; gap:4px; min-width:0; }
.bar-item .bar { width:100%; max-width:44px; background:linear-gradient(180deg,#5b84ff,#2b5cff); border-radius:4px 4px 0 0; min-height:2px; }
.bar-item .lb { font-size:11px; color:#8a94a6; overflow:hidden; text-overflow:ellipsis; white-space:nowrap; max-width:100%; }
.bar-item .vl { font-size:12px; color:#1a2b52; font-weight:600; }

/* 远期房态 */
.future-grid { display:flex; flex-direction:column; border:1px solid #e6ebf3; border-radius:8px; overflow:auto; background:#fff; }
.future-row { display:flex; border-bottom:1px solid #f0f3f8; }
.future-row.head { background:#f0f4ff; position:sticky; top:0; z-index:2; }
.future-cell { flex:0 0 76px; text-align:center; padding:6px 2px; font-size:12px; border-right:1px solid #f0f3f8; }
.future-cell.type { flex:0 0 130px; text-align:left; padding-left:12px; font-weight:600; }
.future-cell.hd { color:#31456e; font-weight:600; }
.future-cell.sold { background:#ffe9d6; color:#d97706; font-weight:600; }
.future-cell.mid { background:#fff2e0; }
.future-cell.full { background:#fde3e3; color:#d33030; font-weight:600; }

/* ---- 房态六视图扩展（日历/竖版/预测/渠道/物品/房务） ---- */
.side-item.side-active { background:#eef3ff; color:#2b5cff; font-weight:600; box-shadow:inset 3px 0 0 #2b5cff; }
.room-view-body { background:#fff; border:1px solid #e6ebf3; border-radius:8px; flex:1; overflow-y:auto; padding:10px 12px; }
.room-view-body .loading { color:#9aa3b8; text-align:center; padding:40px 0; }
.cal-wrap { overflow:auto; }
.cal-table { border-collapse:collapse; width:100%; font-size:12px; }
.cal-table th { background:#f5f7fb; color:#31456e; font-weight:600; padding:6px 4px; border:1px solid #e6ebf3; text-align:center; white-space:nowrap; }
.cal-table th small { color:#9aa3b8; font-weight:400; }
.cal-table td { border:1px solid #eef1f6; padding:4px; text-align:center; color:#31456e; }
.cal-room { text-align:left !important; white-space:nowrap; font-weight:600; color:#31456e; }
.cal-room small { color:#9aa3b8; font-weight:400; margin-left:6px; }
.cal-guest { color:#d97706; font-weight:400; font-size:11px; }
.cal-cell { font-size:11px; white-space:nowrap; }
.cal-cell.st-in { background:#ffe9d6; color:#d97706; font-weight:600; }
.cal-cell.st-rs { background:#e8f0ff; color:#2b5cff; }
.cal-cell.st-VD { background:#eceff3; color:#8d97a6; }
.cal-cell.st-VC { background:#e8f9f0; color:#22a35c; }
.cal-cell.st-MT { background:#f0eaff; color:#7c5fe0; }
.cal-cell.st-LC { background:#e8f3ff; color:#3b82f6; }
.cal-cell.st-OC, .cal-cell.st-OD { background:#fff2e0; color:#f58a12; }

/* 竖版房态 */
.v-board { display:flex; flex-wrap:wrap; gap:8px; padding:4px 0; }
.v-room { width:calc(12.5% - 8px); min-width:96px; border-radius:8px; padding:8px 10px; cursor:pointer; color:#fff; box-shadow:0 1px 4px rgba(20,40,90,.08); }
.v-room:hover { transform:translateY(-1px); box-shadow:0 4px 12px rgba(20,40,90,.16); }
.v-room.st-VC { background:linear-gradient(145deg,#2fbf71,#22a35c); }
.v-room.st-VD { background:linear-gradient(145deg,#a8b0bd,#8d97a6); }
.v-room.st-OC { background:linear-gradient(145deg,#ffa43c,#f58a12); }
.v-room.st-OD { background:linear-gradient(145deg,#f58a12,#e07a08); }
.v-room.st-MT { background:linear-gradient(145deg,#9d7ff0,#7c5fe0); }
.v-room.st-LC { background:linear-gradient(145deg,#5aa5f0,#3b82f6); }
.v-no { font-size:15px; font-weight:700; }
.v-type { font-size:10.5px; opacity:.9; margin-top:2px; }
.v-guest { font-size:11px; margin-top:4px; overflow:hidden; text-overflow:ellipsis; white-space:nowrap; font-weight:600; }
.v-rate { font-size:11px; opacity:.95; margin-top:1px; }
.v-mark { font-size:10px; margin-top:3px; background:rgba(255,255,255,.22); border-radius:3px; padding:1px 5px; display:inline-block; }

/* 物品管理 */
.cell-chk { text-align:center; }
.chk input { display:none; }
.chk span { display:inline-block; width:16px; height:16px; border:1px solid #c6cfdd; border-radius:3px; cursor:pointer; position:relative; }
.chk input:checked + span { background:#2b5cff; border-color:#2b5cff; }
.chk input:checked + span::after { content:""; position:absolute; left:5px; top:2px; width:4px; height:8px; border:solid #fff; border-width:0 2px 2px 0; transform:rotate(45deg); }
.tr-total td { background:#f5f7fb; font-weight:700; color:#31456e; }

/* 房务管理 */
.hk-group { margin-bottom:14px; }
.hk-title { font-size:13px; font-weight:600; color:#31456e; padding:6px 4px 8px; border-bottom:1px solid #eef1f6; display:flex; gap:12px; align-items:center; }
.hk-title .cnt { color:#9aa3b8; font-weight:400; font-size:12px; }
.hk-empty { color:#9aa3b8; font-size:12px; padding:10px 4px; }
.cell-ops { white-space:nowrap; }
