:root{
  --bg:#f4f6f9;
  --panel-bg:#ffffff;
  --line:#e6e9ee;
  --line-strong:#d7dce3;
  --text:#1f2733;
  --text-2:#5a6573;
  --text-3:#8a93a0;
  /* Robin Powered 品牌主色：洋红「红线」(magenta thread)，全局强调色 -> 现替换为品牌主色蓝色 */
  --brand:#036EB8;
  --brand-strong:#025893;
  --brand-bright:#1286d8;
  --brand-50:#e6f0f8;
  /* 旧的 --blue 令牌全部指向品牌洋红，原有 var(--blue) 用法即整体换肤 */
  --blue:var(--brand);
  --blue-700:var(--brand-strong);
  --blue-50:var(--brand-50);
  --green:#22b865;
  --green-fill:#41c878;
  --green-border:#2aa861;
  --green-50:#e7f7ee;
  --gray-fill:#cbd2db;
  --gray-border:#b3bcc8;
  --gray-50:#eef1f5;
  --amber:#eab308;
  --amber-fill:#f3c43d;
  --amber-border:#dca91f;
  --amber-50:#fdf6e3;
  --red:#e2483d;
  --red-50:#fdecea;
  --wall:#2b3340;
  --wall-soft:#3a4350;
  --room-fill:#ffffff;
  /* Robin 风格画布：温暖的米白底 + 极淡网格 */
  --canvas-bg:#faf7f4;
  --canvas-grid:rgba(31,39,51,.04);
  --shadow-sm:0 1px 2px rgba(16,24,40,.06);
  --shadow:0 4px 16px rgba(16,24,40,.10);
  --shadow-lg:0 12px 32px rgba(16,24,40,.16);
}

*{box-sizing:border-box;}
[hidden]{display:none!important;}
html,body{height:100%;margin:0;}
body{
  font-family:-apple-system,BlinkMacSystemFont,"PingFang SC","Hiragino Sans GB","Microsoft YaHei",system-ui,sans-serif;
  color:var(--text);
  background:var(--bg);
  font-size:14px;
  -webkit-font-smoothing:antialiased;
}
button{font-family:inherit;cursor:pointer;}
.muted{color:var(--text-3);font-weight:500;}

/* ================= LOGIN ================= */
.login-shell{
  min-height:100vh;
  display:grid;
  grid-template-columns:minmax(360px,460px) minmax(420px,1fr);
  background:
    linear-gradient(0deg,rgba(31,39,51,.035) 1px,transparent 1px),
    linear-gradient(90deg,rgba(31,39,51,.035) 1px,transparent 1px),
    #f5f7fa;
  background-size:30px 30px,30px 30px;
}
.login-main{
  display:flex;
  flex-direction:column;
  justify-content:center;
  padding:56px clamp(34px,5vw,72px);
  background:#fff;
  border-right:1px solid var(--line);
}
.login-brand{
  display:flex;
  align-items:center;
  gap:12px;
  color:var(--text);
  font-size:15px;
  font-weight:800;
  margin-bottom:72px;
}
.login-logo{display:flex;align-items:center;}
.login-copy{max-width:360px;}
.login-eyebrow{
  margin:0 0 12px;
  color:var(--brand);
  font-size:12px;
  font-weight:800;
  letter-spacing:.08em;
  text-transform:uppercase;
}
.login-copy h1{
  margin:0;
  color:var(--text);
  font-size:32px;
  line-height:1.16;
  font-weight:800;
  letter-spacing:0;
  text-wrap:balance;
}
.login-copy p:last-child{
  margin:16px 0 0;
  color:var(--text-2);
  line-height:1.7;
  font-size:14.5px;
}
.dingtalk-login{
  margin-top:34px;
  width:100%;
  max-width:360px;
  height:46px;
  border:1px solid var(--brand);
  border-radius:9px;
  background:var(--brand);
  color:#fff;
  display:inline-flex;
  align-items:center;
  justify-content:center;
  gap:10px;
  font-size:15px;
  font-weight:800;
  box-shadow:0 8px 22px rgba(3,110,184,.18);
}
.dingtalk-login:hover{background:var(--brand-strong);}
.dingtalk-login:disabled{cursor:not-allowed;opacity:.72;}
.skip-login{margin-top:10px;width:100%;padding:10px 18px;border:1px solid var(--line,#d4d4d8);border-radius:10px;background:transparent;color:var(--ink,#3f3f46);font-size:13px;cursor:pointer;transition:background .15s;}
.skip-login:hover{background:rgba(0,0,0,.04);}
.dt-mark{
  width:24px;
  height:24px;
  display:inline-flex;
  align-items:center;
  justify-content:center;
  color:#fff;
}
.dt-mark svg{display:block;}
.login-status{
  min-height:22px;
  max-width:360px;
  margin:14px 0 0;
  color:var(--text-3);
  line-height:1.55;
  font-size:12.5px;
}
.login-status.is-error{color:var(--red);}
.login-status.is-ok{color:#16824d;}
.login-config{
  max-width:360px;
  margin-top:14px;
  padding-top:14px;
  border-top:1px solid var(--line);
}
.login-config label{
  display:block;
  color:var(--text-2);
  font-size:12.5px;
  font-weight:700;
  margin-bottom:8px;
}
.login-config-row{display:flex;gap:8px;}
.login-config input{
  flex:1;
  min-width:0;
  height:38px;
  border:1px solid var(--line-strong);
  border-radius:9px;
  padding:0 11px;
  font-size:13px;
  outline:none;
}
.login-config input:focus{border-color:var(--blue);box-shadow:0 0 0 3px var(--blue-50);}
.login-config button{
  height:38px;
  border:1px solid var(--line-strong);
  border-radius:9px;
  background:#fff;
  color:var(--brand);
  font-size:13px;
  font-weight:800;
  padding:0 13px;
}
.login-config button:hover{background:var(--blue-50);}
.login-preview{
  display:block;
  padding:0;
  overflow:hidden;
}
.login-video{
  display:block;
  width:100%;
  height:100%;
  object-fit:cover;
  background:#000;
}
.preview-top,
.preview-stats{
  width:min(620px,100%);
  display:flex;
  align-items:center;
  justify-content:space-between;
  gap:16px;
  color:var(--text-2);
  font-size:13px;
  font-weight:700;
}
.preview-top b{color:var(--brand);}
.preview-map{
  position:relative;
  width:min(620px,100%);
  aspect-ratio:1.55;
  background:#faf7f4;
  border:1px solid var(--line-strong);
  border-radius:12px;
  box-shadow:0 18px 42px rgba(16,24,40,.12);
  overflow:hidden;
}
.preview-map::before{
  content:"";
  position:absolute;
  inset:30px 34px 34px 34px;
  border:7px solid var(--wall);
  border-right-width:5px;
  border-radius:28px 8px 18px 42px;
  background:rgba(255,255,255,.54);
}
.preview-zone,
.preview-desk,
.preview-person{position:absolute;display:block;}
.preview-zone{
  border:1px dashed rgba(3,110,184,.48);
  background:rgba(3,110,184,.08);
  border-radius:8px;
}
.zone-a{left:17%;top:28%;width:23%;height:22%;}
.zone-b{left:43%;top:28%;width:18%;height:30%;}
.zone-c{left:65%;top:40%;width:20%;height:25%;}
.preview-desk{
  width:34px;
  height:24px;
  background:#d8e8d0;
  border:1px solid #b9cfb0;
  border-radius:3px;
}
.d1{left:22%;top:34%;}.d2{left:29%;top:34%;}.d3{left:22%;top:43%;}.d4{left:29%;top:43%;}
.d5{left:48%;top:37%;background:#a9bcd8;border-color:#8fa6c8;}.d6{left:48%;top:48%;background:#a9bcd8;border-color:#8fa6c8;}
.d7{left:69%;top:47%;background:#f1bb9c;border-color:#da9d7d;}.d8{left:77%;top:47%;background:#f1bb9c;border-color:#da9d7d;}
.preview-person{
  width:25px;
  height:25px;
  border-radius:50%;
  border:2px solid #fff;
  box-shadow:0 4px 12px rgba(16,24,40,.14);
}
.p1{left:31%;top:30%;background:#00b481;}
.p2{left:52%;top:45%;background:#5b89fe;}
.p3{left:78%;top:57%;background:#f27357;}
.preview-stats{
  justify-content:flex-start;
  gap:28px;
}
.preview-stats span{
  display:flex;
  flex-direction:column;
  gap:3px;
}
.preview-stats b{
  color:var(--text);
  font-size:24px;
  line-height:1;
}

.app{display:flex;flex-direction:column;height:100vh;overflow:hidden;}

/* ================= HEADER ================= */
.header{
  height:60px;flex:0 0 60px;
  display:flex;align-items:center;gap:24px;
  padding:0 20px;
  background:var(--panel-bg);
  border-bottom:1px solid var(--line);
  position:relative;z-index:60;
}
.header-left{display:flex;align-items:center;gap:14px;}
.logo{display:flex;align-items:center;gap:9px;}
.logo-mark{
  width:auto;height:34px;border-radius:0;
  background:none;
  color:#fff;display:flex;align-items:center;justify-content:center;
  box-shadow:none;
}
.logo-text{font-size:18px;font-weight:800;letter-spacing:.2px;color:#0f1722;}
.logo-text b{color:var(--blue);font-weight:800;}
.header-sub{
  color:var(--text-2);font-size:14px;font-weight:600;
  padding-left:14px;border-left:1px solid var(--line);
}

.header-center{display:flex;align-items:center;gap:12px;flex:1;justify-content:flex-start;padding-left:6px;position:relative;}
.search-group{display:flex;align-items:center;position:relative;}
.search-scope{
  height:38px;display:flex;align-items:center;gap:5px;
  padding:0 12px;border:1px solid var(--line-strong);border-right:none;
  background:#f8fafc;border-radius:9px 0 0 9px;color:var(--text-2);font-weight:600;font-size:13px;
}
.search-field{position:relative;}
.search-field input{
  height:38px;width:340px;border:1px solid var(--line-strong);border-radius:0 9px 9px 0;
  padding:0 38px 0 12px;font-size:14px;color:var(--text);outline:none;background:#fff;
}
.search-field input:focus{border-color:var(--blue);box-shadow:0 0 0 3px var(--blue-50);}
.search-icon{position:absolute;right:11px;top:50%;transform:translateY(-50%);color:var(--text-3);}
.dept-filter{
  height:38px;display:flex;align-items:center;gap:8px;
  padding:0 14px;border:1px solid var(--line-strong);border-radius:9px;
  background:#fff;color:var(--text);font-weight:600;font-size:13px;
}
.chev{color:var(--text-3);}

.header-right{display:flex;align-items:center;gap:10px;}
.btn{
  height:38px;display:inline-flex;align-items:center;gap:7px;justify-content:center;
  padding:0 14px;border-radius:9px;font-size:13.5px;font-weight:600;border:1px solid transparent;
  background:none;white-space:nowrap;
}
.btn-ghost{border-color:var(--line-strong);background:#fff;color:var(--text);}
.btn-ghost:hover{background:#f6f8fb;}
.icon-btn{
  width:38px;height:38px;border-radius:9px;border:1px solid var(--line-strong);
  background:#fff;color:var(--text-2);display:inline-flex;align-items:center;justify-content:center;
}
.icon-btn:hover{background:#f6f8fb;}
.icon-btn.sm{width:30px;height:30px;border-color:transparent;}
.user-chip{
  height:38px;display:flex;align-items:center;gap:8px;padding:0 10px 0 6px;
  border:1px solid var(--line-strong);border-radius:20px;background:#fff;font-weight:600;color:var(--text);
}
.avatar{
  width:26px;height:26px;border-radius:50%;background:#e7eef8;color:var(--blue);
  display:flex;align-items:center;justify-content:center;
}

/* ===== search suggestions ===== */
.search-suggest{
  position:absolute;top:46px;left:0;width:432px;
  background:#fff;border:1px solid var(--line);border-radius:12px;
  box-shadow:var(--shadow-lg);padding:6px;z-index:80;display:none;
  max-height:min(440px,calc(100vh - 96px));overflow-y:auto;overscroll-behavior:contain;
}
.search-suggest.open{display:block;}
.search-suggest::-webkit-scrollbar{width:9px;}
.search-suggest::-webkit-scrollbar-thumb{background:var(--line-strong);border-radius:5px;border:2px solid #fff;background-clip:padding-box;}
.search-suggest::-webkit-scrollbar-thumb:hover{background:#b3bcc8;background-clip:padding-box;}
.suggest-item{
  display:flex;align-items:center;gap:12px;padding:9px 12px;border-radius:9px;cursor:pointer;
}
.suggest-item:hover{background:#f5f8fd;}
.suggest-item.active{background:var(--blue-50);}
.suggest-check{
  width:18px;height:18px;border-radius:5px;border:1.5px solid var(--line-strong);flex:0 0 18px;
  display:flex;align-items:center;justify-content:center;background:#fff;
}
.suggest-item.active .suggest-check{background:var(--green-fill);border-color:var(--green-border);color:#fff;}
.suggest-main{display:flex;align-items:baseline;gap:6px;min-width:138px;}
.suggest-name{font-weight:700;color:var(--text);white-space:nowrap;}
.suggest-py{color:var(--text-3);font-size:12px;white-space:nowrap;}
.suggest-emp{color:var(--text-2);font-size:12.5px;min-width:104px;white-space:nowrap;}
.suggest-dept{color:var(--text-3);font-size:12.5px;margin-left:auto;white-space:nowrap;}

/* ================= BODY LAYOUT ================= */
.body{flex:1;display:flex;min-height:0;}

/* ===== left nav ===== */
.sidebar{
  width:76px;flex:0 0 76px;background:#fff;border-right:1px solid var(--line);
  padding:14px 0;display:flex;flex-direction:column;gap:6px;align-items:center;
}
.nav-item{
  width:60px;height:58px;border:none;background:none;border-radius:11px;
  display:flex;flex-direction:column;align-items:center;justify-content:center;gap:5px;
  color:var(--text-3);font-size:12px;font-weight:600;
}
.nav-item:hover{background:#f5f7fa;color:var(--text-2);}
.nav-item.active{background:var(--blue-50);color:var(--blue);}

/* ===== main ===== */
.main{flex:1;display:flex;flex-direction:column;min-width:0;}
.main-toolbar{
  height:54px;flex:0 0 54px;display:flex;align-items:center;gap:22px;
  padding:0 22px;border-bottom:1px solid var(--line);background:#fbfcfe;
}
.floor-select{
  height:36px;display:flex;align-items:center;gap:7px;padding:0 13px;
  border:1px solid var(--line-strong);border-radius:9px;background:#fff;font-size:15px;color:var(--text);
}
.floor-select b{font-size:15px;}
body.edit-mode #floorLabel{
  min-height:24px;
  display:inline-flex;
  align-items:center;
  padding:2px 4px;
  margin:-2px -4px;
  border-radius:6px;
  cursor:text;
}
body.edit-mode #floorLabel:hover{background:var(--blue-50);}
.floor-select.editing-name{
  border-color:var(--blue);
  box-shadow:0 0 0 3px var(--blue-50);
}
.floor-name-input{
  height:26px;
  min-width:72px;
  max-width:220px;
  border:1px solid var(--blue);
  border-radius:6px;
  background:#fff;
  color:var(--text);
  font:inherit;
  font-weight:800;
  padding:0 7px;
  outline:none;
}
.stats{display:flex;align-items:center;gap:24px;margin-left:auto;padding-right:6px;}
.stat{display:flex;align-items:center;gap:7px;color:var(--text-2);font-weight:600;font-size:13.5px;}
.stat b{color:var(--text);font-weight:800;font-size:15px;}
.stat-total{padding-left:24px;border-left:1px solid var(--line);color:var(--text-2);}
.dot{width:13px;height:13px;border-radius:4px;display:inline-block;}
.dot-o{background:var(--green-fill);}
.dot-a{background:var(--gray-fill);}
.dot-r{background:var(--amber-fill);}

/* ===== floor plan ===== */
.floor-wrap{
  flex:1;position:relative;overflow:hidden;
  background:
    linear-gradient(0deg,var(--canvas-grid) 1px,transparent 1px),
    linear-gradient(90deg,var(--canvas-grid) 1px,transparent 1px),
    var(--canvas-bg);
  background-size:28px 28px,28px 28px;
}
.canvas{
  position:absolute;top:0;left:0;width:2040px;height:1320px;
  transform-origin:top left;
  background:transparent;   /* 透明绘制坐标系：户型由墙体/导入决定，不再有固定白色矩形 */
}

/* rooms — 厚墙体 */
.room{
  position:absolute;border:4px solid var(--wall);background:var(--room-fill);
  display:flex;align-items:center;justify-content:center;text-align:center;
}
.room-label{font-size:13px;font-weight:700;color:#374151;line-height:1.4;pointer-events:none;padding:3px;}
/* 非房间的小配套：细边 */
.room-storage,.room-util,.room-water,.room-pillar,.room-printer,.room-cell,.room-fire,.room-elec{
  border-width:1.5px;border-color:#9aa3b0;
}
.room-balcony{background:#eaf2fb;}
.room-server,.room-elec{background:#f2f4f7;}
.room-reception{background:#dbeafe;}
.room-tea{background:#fff;border-style:dashed;}
.room-water{background:#e7f3ff;border-color:#9fc3e8;}
.room-storage{background:#f4f5f7;}
.room-pillar{background:#cfd4dc;border-color:#aeb6c2;}
.room-printer{background:#eef1f5;}
.room-fire{background:#fde8e6;}
.room-cell{border-radius:4px;}
.room-cell .room-label,.room-water .room-label,.room-pillar .room-label,
.room-storage .room-label,.room-util .room-label,.room-fire .room-label,
.room-elec .room-label,.room-printer .room-label{font-size:10px;font-weight:600;line-height:1.25;}
/* 区号 / 通道 等注记 */
.annotation{position:absolute;font-weight:800;pointer-events:none;white-space:nowrap;text-shadow:0 0 4px #fff,0 0 4px #fff,0 0 4px #fff;}

/* simple furniture */
.furn{position:absolute;background:#eef1f5;border:1.5px solid #c9d0da;border-radius:3px;}
.furn.round{border-radius:999px;}
.chair{position:absolute;width:9px;height:9px;background:#dde3ea;border:1.5px solid #c2cad4;border-radius:3px;}
.icon-furn{position:absolute;display:flex;align-items:center;justify-content:center;color:#aab2be;}

/* desk groups */
.dgroup{position:absolute;}
.dgrid{display:grid;gap:5px;}
.seat {
  position: absolute;
  cursor: pointer;
  overflow: visible;
  transition: transform 0.12s ease, box-shadow 0.12s ease;
  box-sizing: border-box;
  background-color: var(--seat-bg, #EAEAEA);
  border-radius: 2px;
}

.seat.is-occupied::before {
  content: '';
  position: absolute;
  background-color: var(--seat-border, #478F59);
  z-index: -1;
  border-radius: 2px;
}

/* Direction Left */
.seat.dir-left.is-occupied::before { width: 36%; height: 28%; top: 50%; left: -18%; transform: translateY(-50%); }
.seat.dir-left .avatar-badge { top: 50%; left: -18px; transform: translateY(-50%); }

/* Direction Right */
.seat.dir-right.is-occupied::before { width: 36%; height: 28%; top: 50%; right: -18%; transform: translateY(-50%); }
.seat.dir-right .avatar-badge { top: 50%; right: -18px; transform: translateY(-50%); }

/* Direction Top */
.seat.dir-top.is-occupied::before { width: 28%; height: 36%; left: 50%; top: -18%; transform: translateX(-50%); }
.seat.dir-top .avatar-badge { left: 50%; top: -18px; transform: translateX(-50%); }

/* Direction Bottom */
.seat.dir-bottom.is-occupied::before { width: 28%; height: 36%; left: 50%; bottom: -18%; transform: translateX(-50%); }
.seat.dir-bottom .avatar-badge { left: 50%; bottom: -18px; transform: translateX(-50%); }

.avatar-badge {
  position: absolute;
  width: 36px;
  height: 36px;
  border-radius: 50%;
  border: 2px solid #FFFFFF;
  background-color: #FFFFFF;
  overflow: hidden;
  box-shadow: 0 4px 12px rgba(0, 0, 0, 0.08);
  z-index: 2;
  pointer-events: none;
}
.avatar-badge img {
  width: 100%;
  height: 100%;
  object-fit: cover;
  display: block;
}

.seat-label {
  position: absolute;
  top: 50%; left: 50%; transform: translate(-50%, -50%);
  font-size: 8.5px;
  font-weight: 700;
  color: var(--seat-text-color, #334155);
  white-space: nowrap;
  pointer-events: none;
  letter-spacing: -0.2px;
  z-index: 3;
}

.seat:hover {
  transform: translateY(-1.5px) scale(1.03);
  z-index: 5;
  box-shadow: 0 4px 8px rgba(0, 0, 0, 0.12);
}

.seat.is-empty {
  opacity: 1;
}
.seat.selected {
  outline: 2.5px solid var(--brand);
  outline-offset: 3px;
  border-radius: 2px;
  z-index: 6;
}
.seat.dim {
  opacity: 0.22;
}
.seat.is-empty.dim {
  opacity: 0.12;
}

/* 着色模式切换 */
.seg{display:inline-flex;border:1px solid var(--line-strong);border-radius:9px;overflow:hidden;height:36px;}
.seg button{padding:0 13px;border:none;background:#fff;font-size:13px;font-weight:600;color:var(--text-2);border-right:1px solid var(--line);}
.seg button:last-child{border-right:none;}
.seg button.active{background:var(--blue);color:#fff;}

/* 部门图例（可折叠，双列紧凑） */
.dept-legend{position:absolute;top:12px;left:12px;background:rgba(255,255,255,.97);border:1px solid var(--line);border-radius:10px;box-shadow:var(--shadow-sm);padding:8px 10px;width:262px;z-index:25;}
.lg-title{font-size:11.5px;font-weight:700;color:var(--text-2);margin-bottom:7px;cursor:pointer;display:flex;align-items:center;justify-content:space-between;user-select:none;}
.lg-caret{transition:transform .15s;}
.dept-legend.collapsed{width:auto;}
.dept-legend.collapsed .lg-items{display:none;}
.dept-legend.collapsed .lg-title{margin-bottom:0;}
.dept-legend.collapsed .lg-caret{transform:rotate(-90deg);}
.lg-items{display:grid;grid-template-columns:1fr 1fr;gap:1px 12px;}
.lg-item{display:flex;align-items:center;gap:6px;font-size:10.5px;color:var(--text-2);padding:2px 0;}
.lg-item i{width:12px;height:12px;border-radius:3px;flex:0 0 12px;border:1px solid rgba(0,0,0,.08);}
.dlabel{font-size:9px;color:var(--text-3);font-weight:600;text-align:center;pointer-events:none;white-space:nowrap;letter-spacing:-.2px;}

/* highlighted (searched) seat */
.seat.hl{
  outline:2.5px solid var(--red);outline-offset:2px;border-radius:7px;z-index:6;
  animation:pulse 1.5s ease-out infinite;
}
@keyframes pulse{
  0%{box-shadow:0 0 0 0 rgba(226,72,61,.5);}
  70%{box-shadow:0 0 0 12px rgba(226,72,61,0);}
  100%{box-shadow:0 0 0 0 rgba(226,72,61,0);}
}

/* tooltip popup */
.seat-popup{
  position:absolute;width:248px;background:#fff;border:1px solid var(--line);
  border-radius:12px;box-shadow:var(--shadow-lg);padding:14px 16px;z-index:40;
  display:none;
}
.seat-popup.open{display:block;}
.sp-head{display:flex;align-items:center;gap:8px;margin-bottom:10px;}
.sp-id{font-size:16px;font-weight:800;color:var(--text);}
.sp-badge{margin-left:auto;}
.sp-row{display:flex;gap:10px;font-size:12.5px;margin:5px 0;}
.sp-row .k{color:var(--text-3);width:54px;flex:0 0 54px;white-space:nowrap;}
.sp-row .v{color:var(--text);font-weight:600;}
.sp-link{
  display:inline-flex;align-items:center;gap:5px;margin-top:10px;padding-top:10px;
  border-top:1px dashed var(--line);color:var(--blue);font-weight:600;font-size:12.5px;cursor:pointer;
}

/* badges */
.badge{font-size:12px;font-weight:700;padding:3px 9px;border-radius:6px;}
.badge-o{background:var(--green-50);color:#16a34a;}
.badge-a{background:var(--gray-50);color:#64748b;}
.badge-r{background:var(--amber-50);color:#b8860b;}

/* zoom controls */
.zoom-ctrl{position:absolute;left:18px;bottom:20px;display:flex;flex-direction:column;gap:8px;z-index:30;}
.zoom-stack{background:#fff;border:1px solid var(--line);border-radius:10px;box-shadow:var(--shadow-sm);overflow:hidden;}
.zoom-stack button{display:block;width:38px;height:38px;border:none;background:#fff;color:var(--text-2);}
.zoom-stack button:first-child{border-bottom:1px solid var(--line);}
.zoom-stack button:hover{background:#f5f7fa;}
.zoom-pct{width:38px;height:34px;border:1px solid var(--line);border-radius:10px;background:#fff;font-size:11px;font-weight:700;color:var(--text-2);box-shadow:var(--shadow-sm);}
.zoom-icon{width:38px;height:38px;border:1px solid var(--line);border-radius:10px;background:#fff;color:var(--text-2);display:flex;align-items:center;justify-content:center;box-shadow:var(--shadow-sm);}
.zoom-icon:hover,.zoom-pct:hover{background:#f5f7fa;}

/* minimap —— 实时缩略图 */
.minimap{position:absolute;right:16px;top:14px;width:150px;height:108px;background:#fff;border:1px solid var(--line);border-radius:10px;box-shadow:var(--shadow);overflow:hidden;z-index:24;cursor:pointer;}
#minimapSvg{position:absolute;inset:0;width:100%;height:100%;display:block;}
.minimap-view{position:absolute;border:1.5px solid var(--blue);background:rgba(214,0,110,.12);border-radius:2px;pointer-events:none;}

/* ================= RIGHT PANEL ================= */
.panel{
  width:340px;flex:0 0 340px;background:#fff;border-left:1px solid var(--line);
  display:flex;flex-direction:column;min-height:0;
}
.panel-head{
  height:54px;flex:0 0 54px;display:flex;align-items:center;justify-content:space-between;
  padding:0 18px;border-bottom:1px solid var(--line);
}
.panel-head h3{margin:0;font-size:15px;font-weight:700;}
.panel-scroll{flex:1;overflow-y:auto;padding:18px;}

.seat-title{display:flex;align-items:center;gap:10px;margin-bottom:18px;}
.seat-swatch{width:22px;height:22px;border-radius:6px;background:var(--green-fill);border:1.5px solid var(--green-border);}
.seat-id{font-size:22px;font-weight:800;color:var(--text);}
.seat-title .badge{margin-left:auto;}

.detail-grid{display:flex;flex-direction:column;gap:13px;padding-bottom:18px;border-bottom:1px solid var(--line);}
.d-row{display:flex;align-items:center;}
.d-label{color:var(--text-3);width:84px;flex:0 0 84px;font-size:13.5px;}
.d-value{color:var(--text);font-weight:600;font-size:13.5px;}

.section{padding:18px 0;border-bottom:1px solid var(--line);}
.section h4{margin:0 0 12px;font-size:14px;font-weight:700;}

.bind-box{
  height:42px;display:flex;align-items:center;justify-content:space-between;
  padding:0 8px 0 13px;border:1px solid var(--line-strong);border-radius:9px;background:#fff;
}
.bind-name{font-size:13.5px;font-weight:600;color:var(--text);}
.bind-actions{display:flex;align-items:center;gap:4px;}
.bind-x{width:24px;height:24px;border:none;background:none;border-radius:6px;color:var(--text-3);display:flex;align-items:center;justify-content:center;}
.bind-x:hover{background:#f1f3f6;color:var(--text);}
.link{display:inline-block;color:var(--blue);font-weight:600;font-size:13.5px;margin-top:11px;cursor:pointer;text-decoration:none;}
.link:hover{text-decoration:underline;}

.status-toggle{display:flex;gap:0;border:1px solid var(--line-strong);border-radius:9px;overflow:hidden;}
.st-btn{flex:1;height:40px;border:none;background:#fff;color:var(--text-2);font-weight:600;font-size:13.5px;border-right:1px solid var(--line);}
.st-btn:last-child{border-right:none;}
.st-btn:hover{background:#f7f9fc;}
.st-btn.active[data-st="o"]{background:var(--green-50);color:#16a34a;box-shadow:inset 0 0 0 1.5px var(--green-border);}
.st-btn.active[data-st="a"]{background:var(--gray-50);color:#475569;box-shadow:inset 0 0 0 1.5px var(--gray-border);}
.st-btn.active[data-st="r"]{background:var(--amber-50);color:#b8860b;box-shadow:inset 0 0 0 1.5px var(--amber-border);}

.op-row{display:flex;gap:10px;}
.op-row .btn{flex:1;}
.btn-outline-blue{border-color:#bcd0ff;color:var(--blue);background:#f7faff;}
.btn-outline-blue:hover{background:var(--blue-50);}
.btn-outline-red{border-color:#f4c4bf;color:var(--red);background:#fef7f6;}
.btn-outline-red:hover{background:var(--red-50);}

.import-section{border-bottom:none;}
.import-desc{margin:0 0 12px;color:var(--text-3);font-size:13px;}
.link-num{display:flex;align-items:center;gap:8px;margin-top:0;margin-bottom:11px;}
.link-num .num{width:18px;height:18px;border-radius:50%;background:var(--blue-50);color:var(--blue);font-size:11px;display:flex;align-items:center;justify-content:center;font-weight:700;}
.file-row{display:flex;align-items:center;gap:10px;margin:6px 0 14px;}
.file-btn{display:inline-flex;align-items:center;height:34px;padding:0 14px;border:1px solid var(--line-strong);border-radius:8px;background:#f8fafc;font-size:13px;font-weight:600;color:var(--text-2);cursor:pointer;}
.file-btn:hover{background:#eff2f6;}
.file-name{color:var(--text-3);font-size:13px;}
.btn-primary{background:var(--blue);color:#fff;}
.btn-primary:hover{background:var(--blue-700);}
.btn-block{width:100%;height:42px;font-size:14px;}
.import-section .link{margin-top:13px;}

/* scrollbar */
.panel-scroll::-webkit-scrollbar{width:8px;}
.panel-scroll::-webkit-scrollbar-thumb{background:#d8dee6;border-radius:8px;}

/* ================= VIEW SWITCHING ================= */
.hamburger{display:none;width:38px;height:38px;border:none;background:none;border-radius:9px;color:var(--text-2);align-items:center;justify-content:center;}
.main{position:relative;}
.view{display:none;flex-direction:column;height:100%;min-height:0;}
.view.active{display:flex;}
.view-page .view-body{flex:1;overflow-y:auto;padding:22px 26px;}
body.no-panel .panel{display:none;}

.view-head{display:flex;align-items:flex-start;justify-content:space-between;gap:16px;margin-bottom:18px;flex-wrap:wrap;}
.view-head h2{margin:0;font-size:20px;font-weight:800;}
.view-sub{margin:4px 0 0;color:var(--text-3);font-size:13px;}
.view-tools{display:flex;align-items:center;gap:10px;flex-wrap:wrap;}
.vt-search{height:36px;width:240px;border:1px solid var(--line-strong);border-radius:9px;padding:0 12px;font-size:13.5px;outline:none;}
.vt-search:focus{border-color:var(--blue);box-shadow:0 0 0 3px var(--blue-50);}
.vt-select{height:36px;border:1px solid var(--line-strong);border-radius:9px;padding:0 10px;font-size:13.5px;background:#fff;color:var(--text);}

/* ================= DATA TABLE ================= */
.table-wrap{border:1px solid var(--line);border-radius:12px;overflow:auto;background:#fff;box-shadow:var(--shadow-sm);}
.data-table{width:100%;border-collapse:collapse;font-size:13.5px;}
.data-table th{text-align:left;padding:12px 14px;background:#f7f9fc;color:var(--text-2);font-weight:700;border-bottom:1px solid var(--line);white-space:nowrap;position:sticky;top:0;}
.data-table td{padding:11px 14px;border-bottom:1px solid var(--line);color:var(--text);}
.data-table tr:last-child td{border-bottom:none;}
.data-table tbody tr:hover{background:#f9fbfe;}
.data-table .muted{color:var(--text-3);}
.data-table .ok{color:#16a34a;font-weight:700;}
.data-table .fail{color:var(--red);font-weight:700;}
.empty-cell{text-align:center;color:var(--text-3);padding:30px!important;}
.row-actions{white-space:nowrap;display:flex;gap:6px;}
.mini{height:28px;padding:0 10px;border:1px solid var(--line-strong);background:#fff;border-radius:7px;font-size:12.5px;font-weight:600;color:var(--text-2);}
.mini:hover{background:#f3f6fa;color:var(--text);}
.mini.danger{color:var(--red);border-color:#f4c4bf;}
.mini.danger:hover{background:var(--red-50);}
.tag{display:inline-block;font-size:12px;font-weight:700;padding:2px 9px;border-radius:6px;}
.tag-o{background:var(--green-50);color:#16a34a;}
.tag-a{background:var(--gray-50);color:#64748b;}
.tag-r{background:var(--amber-50);color:#b8860b;}

/* ================= MODAL ================= */
.overlay{position:fixed;inset:0;background:rgba(15,23,42,.42);z-index:200;display:flex;align-items:center;justify-content:center;padding:20px;backdrop-filter:blur(1px);}
.overlay[hidden]{display:none;}
.modal{background:#fff;border-radius:14px;box-shadow:var(--shadow-lg);max-width:94vw;max-height:88vh;display:flex;flex-direction:column;animation:pop .16s ease-out;}
@keyframes pop{from{transform:translateY(8px) scale(.98);opacity:0;}to{transform:none;opacity:1;}}
.modal-head{display:flex;align-items:center;justify-content:space-between;padding:16px 20px;border-bottom:1px solid var(--line);}
.modal-head h3{margin:0;font-size:16px;font-weight:700;}
.modal-body{padding:18px 20px;overflow-y:auto;}
.modal-foot{padding:14px 20px;border-top:1px solid var(--line);display:flex;justify-content:flex-end;gap:10px;}
.confirm-msg{margin:0;color:var(--text-2);line-height:1.6;font-size:14px;}
.danger-confirm{display:flex;flex-direction:column;gap:14px;}
.danger-consequences{border:1px solid #f3c0bc;background:var(--red-50);border-radius:10px;padding:12px 14px;}
.danger-consequences b{display:block;margin-bottom:7px;color:var(--red);font-size:13px;}
.danger-consequences ul{margin:0;padding-left:18px;color:var(--text-2);font-size:13.5px;line-height:1.75;}
.danger-check{display:flex;align-items:center;gap:9px;font-size:13.5px;font-weight:600;color:var(--text);cursor:pointer;}
.danger-check input{width:16px;height:16px;accent-color:var(--red);}
.modal-foot .btn:disabled{opacity:.45;cursor:not-allowed;filter:none;}
.btn-danger{background:var(--red);color:#fff;}
.btn-danger:hover{filter:brightness(.95);}

/* form */
.form{display:flex;flex-direction:column;gap:14px;}
.fld{display:flex;flex-direction:column;gap:6px;}
.fld>span{font-size:13px;color:var(--text-2);font-weight:600;}
.fld input,.fld select{height:38px;border:1px solid var(--line-strong);border-radius:9px;padding:0 12px;font-size:14px;outline:none;background:#fff;}
.fld input:focus,.fld select:focus{border-color:var(--blue);box-shadow:0 0 0 3px var(--blue-50);}
.fld input:disabled{background:#f3f5f8;color:var(--text-3);}
.fld-row{display:flex;gap:12px;}
.fld-row .fld{flex:1;}

/* employee picker */
.picker-search{display:flex;flex-direction:column;gap:8px;margin-bottom:12px;}
.picker-search input{height:38px;border:1px solid var(--line-strong);border-radius:9px;padding:0 12px;font-size:14px;outline:none;}
.picker-search input:focus{border-color:var(--blue);box-shadow:0 0 0 3px var(--blue-50);}
.pk-unbound{display:flex;align-items:center;gap:7px;font-size:13px;color:var(--text-2);cursor:pointer;}
.picker-list{max-height:340px;overflow-y:auto;display:flex;flex-direction:column;gap:4px;}
.pk-item{display:flex;align-items:center;gap:11px;padding:9px 10px;border-radius:9px;cursor:pointer;border:1px solid transparent;}
.pk-item:hover{background:#f5f8fd;border-color:#e2ebf8;}
.pk-avatar{width:30px;height:30px;border-radius:50%;background:#e7eef8;color:var(--blue);display:flex;align-items:center;justify-content:center;font-weight:700;flex:0 0 30px;}
.pk-avatar.lg{width:46px;height:46px;font-size:20px;flex-basis:46px;}
.pk-avatar img,.user-chip .avatar img{width:100%;height:100%;border-radius:50%;object-fit:cover;display:block;}
.user-chip .avatar{overflow:hidden;}
.pk-main{display:flex;flex-direction:column;min-width:90px;}
.pk-main b{font-size:14px;}
.pk-py{font-size:12px;color:var(--text-3);}
.pk-meta{color:var(--text-2);font-size:12.5px;margin-left:auto;}
.pk-seat{font-size:11.5px;color:#b8860b;background:var(--amber-50);padding:2px 8px;border-radius:6px;}
.pk-free{font-size:11.5px;color:#16a34a;background:var(--green-50);padding:2px 8px;border-radius:6px;}

/* history timeline */
.timeline{display:flex;flex-direction:column;}
.tl-item{display:flex;gap:12px;padding-bottom:18px;position:relative;}
.tl-item::before{content:"";position:absolute;left:5px;top:14px;bottom:-4px;width:2px;background:var(--line);}
.tl-item:last-child::before{display:none;}
.tl-dot{width:12px;height:12px;border-radius:50%;background:var(--gray-fill);border:2px solid #fff;box-shadow:0 0 0 2px var(--gray-border);margin-top:3px;flex:0 0 12px;z-index:1;}
.tl-current .tl-dot{background:var(--green-fill);box-shadow:0 0 0 2px var(--green-border);}
.tl-name{font-weight:700;font-size:14px;}
.tl-dept{font-weight:500;color:var(--text-3);font-size:12.5px;margin-left:4px;}
.tl-badge{font-size:11px;background:var(--green-50);color:#16a34a;padding:1px 7px;border-radius:5px;margin-left:6px;}
.tl-date{color:var(--text-3);font-size:12.5px;margin-top:2px;}
.emp-detail .emp-head{display:flex;align-items:center;gap:14px;margin-bottom:16px;}
.emp-name{font-size:18px;font-weight:800;}
.emp-py{color:var(--text-3);font-size:13px;}

/* import result */
.import-result{display:flex;gap:10px;margin-bottom:14px;}
.ir-row{flex:1;border:1px solid var(--line);border-radius:10px;padding:12px;text-align:center;}
.ir-row span{display:block;color:var(--text-3);font-size:12.5px;margin-bottom:4px;}
.ir-row b{font-size:22px;}
.ir-row.ok b{color:#16a34a;}
.ir-row.fail b{color:var(--red);}
.ir-errors{background:var(--red-50);border-radius:10px;padding:12px;font-size:12.5px;color:#b4231a;max-height:160px;overflow:auto;}
.ir-errtitle{font-weight:700;margin-bottom:6px;}

/* dropdown menu */
.dropdown-menu{padding:6px;}
.menu-item{padding:9px 12px;border-radius:8px;cursor:pointer;font-size:13.5px;font-weight:600;color:var(--text);}
.menu-item:hover{background:#f5f8fd;}
.menu-item.active{background:var(--blue-50);color:var(--blue);}
.suggest-empty{padding:14px;text-align:center;color:var(--text-3);font-size:13px;}

/* panel empty */
.panel-empty{display:flex;flex-direction:column;align-items:center;justify-content:center;gap:12px;color:var(--text-3);text-align:center;padding:60px 24px;}
.panel-empty svg{color:var(--line-strong);}
.bind-name.is-empty{color:var(--text-3);}
.d-history{margin-top:2px;}
.d-history .link{margin-top:0;}

/* reservations */
.card-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(220px,1fr));gap:14px;}
.rsv-card{border:1px solid var(--line);border-radius:12px;padding:14px;background:#fff;box-shadow:var(--shadow-sm);}
.rsv-top{display:flex;align-items:center;justify-content:space-between;margin-bottom:6px;}
.rsv-top b{font-size:16px;}
.rsv-area{color:var(--text-3);font-size:13px;margin-bottom:12px;}
.rsv-actions{display:flex;gap:6px;flex-wrap:wrap;}

/* reports */
.report-cards{display:grid;grid-template-columns:repeat(4,1fr);gap:14px;margin-bottom:8px;}
.rc{border:1px solid var(--line);border-radius:12px;padding:18px;background:#fff;box-shadow:var(--shadow-sm);}
.rc-num{font-size:30px;font-weight:800;}
.rc-label{color:var(--text-3);font-size:13px;margin-top:2px;}
.rc-o{background:var(--green-50);border-color:#cdeedd;} .rc-o .rc-num{color:#16a34a;}
.rc-a{background:var(--gray-50);} .rc-a .rc-num{color:#64748b;}
.rc-r{background:var(--amber-50);border-color:#f3e6c2;} .rc-r .rc-num{color:#b8860b;}
.report-block{margin-top:22px;border:1px solid var(--line);border-radius:12px;padding:18px;background:#fff;}
.report-block h3{margin:0 0 14px;font-size:15px;}
.occ-bar{height:18px;border-radius:9px;overflow:hidden;display:flex;background:var(--gray-50);}
.occ-bar span{display:block;height:100%;}
.ob-o{background:var(--green-fill);} .ob-r{background:var(--amber-fill);} .ob-a{background:var(--gray-fill);}
.occ-legend{display:flex;gap:18px;margin-top:10px;color:var(--text-2);font-size:12.5px;}
.occ-legend span{display:flex;align-items:center;gap:6px;}
.bars{display:flex;flex-direction:column;gap:11px;}
.bar-row{display:flex;align-items:center;gap:12px;}
.bar-label{width:80px;font-size:13px;color:var(--text-2);}
.bar-track{flex:1;height:14px;background:var(--gray-50);border-radius:7px;overflow:hidden;}
.bar-fill{display:block;height:100%;background:linear-gradient(90deg,var(--brand-bright),var(--brand));border-radius:7px;}
.bar-num{width:30px;text-align:right;font-weight:700;font-size:13px;}

/* settings */
.set-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(300px,1fr));gap:16px;}
.set-card{border:1px solid var(--line);border-radius:12px;padding:18px;background:#fff;box-shadow:var(--shadow-sm);display:flex;flex-direction:column;gap:12px;}
.set-card h3{margin:0;font-size:15px;display:flex;align-items:center;gap:8px;}
.set-card .fld{margin:0;}
.set-row{display:flex;justify-content:space-between;font-size:13.5px;color:var(--text-2);}
.set-actions{display:flex;gap:10px;flex-wrap:wrap;}
.set-card .btn{align-self:flex-start;}

/* toast */
.toast-host{position:fixed;top:74px;left:50%;transform:translateX(-50%);z-index:300;display:flex;flex-direction:column;gap:8px;align-items:center;pointer-events:none;}
.toast{background:#1f2733;color:#fff;padding:10px 18px;border-radius:10px;font-size:13.5px;font-weight:600;box-shadow:var(--shadow-lg);opacity:0;transform:translateY(-8px);transition:.25s;}
.toast.show{opacity:1;transform:none;}
.toast-error{background:#dc3a2e;} .toast-warn{background:#d98a16;} .toast-info{background:#1f2733;}

.floor-wrap.grabbing{cursor:grabbing;}

/* ================= 布局编辑器 ================= */
.edit-toggle{height:36px;display:inline-flex;align-items:center;gap:6px;padding:0 13px;border:1px solid var(--line-strong);border-radius:9px;background:#fff;font-size:13px;font-weight:600;color:var(--text-2);}
.edit-toggle:hover{background:#f6f8fb;}
.edit-toggle.active{background:var(--blue);color:#fff;border-color:var(--blue);}
/* —— 顶部选项 / 操作条（中性 chrome，工具已移到底部浮动 dock） —— */
.editor-bar{display:flex;align-items:center;gap:8px;flex-wrap:nowrap;overflow-x:auto;overflow-y:hidden;padding:7px 14px;background:var(--panel-bg);border-bottom:1px solid var(--line);position:relative;}
.editor-bar>*{flex:0 0 auto;}
.editor-bar .ed-spacer{flex:1 1 0;min-width:8px;}
.editor-bar #edExit{position:sticky;right:0;box-shadow:-10px 0 10px -6px var(--panel-bg);}
.editor-bar::-webkit-scrollbar{height:6px;}
.editor-bar::-webkit-scrollbar-thumb{background:var(--line-strong);border-radius:3px;}
.eb-group{display:inline-flex;align-items:center;gap:6px;}
.eb-div{width:1px;height:22px;background:var(--line);margin:0 2px;}
.ed-sep{width:1px;height:22px;background:var(--line);}
.ed-spacer{flex:1;}
.ed-inline{display:inline-flex;align-items:center;gap:5px;font-size:12px;color:var(--text-2);font-weight:600;}
.ed-inline select,.ed-inline input{height:30px;border:1px solid var(--line-strong);border-radius:7px;padding:0 8px;font-size:12.5px;background:#fff;outline:none;}
.ed-inline select:focus-visible,.ed-inline input:focus-visible{border-color:var(--blue);box-shadow:0 0 0 3px var(--blue-50);}
.ed-inline input[type=number]{width:48px;}
.ed-inline input#edPrefix{width:44px;}
.ed-inline.ck input[type=checkbox]{width:auto;height:auto;}
.ebtn{height:30px;padding:0 11px;border:1px solid var(--line-strong);border-radius:8px;background:#fff;font-size:12.5px;font-weight:600;color:var(--text);}
.ebtn:hover{background:#f6f8fb;}
.ebtn.ico{width:30px;padding:0;font-size:15px;line-height:1;color:var(--text-2);display:inline-flex;align-items:center;justify-content:center;}
.ebtn.ico svg{display:block;}
.ebtn.danger:hover{border-color:var(--red);color:var(--red);background:var(--red-50);}
.ebtn.accent{color:var(--blue);border-color:#bcd3ff;background:var(--blue-50);}
.ebtn.accent:hover{background:#e4edff;}
.ebtn.primary{background:var(--blue);color:#fff;border-color:var(--blue);}
.ebtn.primary:hover{background:var(--blue-700);}

/* —— 底部浮动工具 dock（学习 Figma UI3：暗色、圆角、悬浮、图标优先） —— */
.tool-dock{position:absolute;left:50%;bottom:20px;transform:translateX(-50%);z-index:38;display:none;align-items:stretch;gap:2px;padding:6px;background:#1e2330;border:1px solid #2c3340;border-radius:14px;box-shadow:0 14px 34px rgba(8,12,20,.36);}
body.edit-mode .tool-dock{display:flex;}
.tool-dock button[data-tool]{display:flex;flex-direction:column;align-items:center;justify-content:flex-end;gap:4px;width:50px;padding:7px 4px 5px;border:none;border-radius:9px;background:none;color:#aeb6c4;font-size:11px;font-weight:600;line-height:1;}
.tool-dock button[data-tool] svg{color:#cdd4df;}
.tool-dock button[data-tool]:hover{background:#2b3242;color:#fff;}
.tool-dock button[data-tool]:hover svg{color:#fff;}
.tool-dock button[data-tool].active{background:var(--blue);color:#fff;}
.tool-dock button[data-tool].active svg{color:#fff;}
.dock-sep{width:1px;align-self:stretch;background:#333b4b;margin:5px 3px;}

body.edit-mode .floor-wrap{cursor:crosshair;}
body.edit-mode .seat,body.edit-mode .room,body.edit-mode .annotation{cursor:move;}
body.edit-mode .annotation{pointer-events:auto;}   /* 编辑态下文字可点选/拖动（查看态仍不挡工位） */
body.edit-mode .seat:hover,body.edit-mode .room:hover{box-shadow:0 0 0 2px var(--blue) inset;}
.sel-edit{outline:2.5px dashed var(--blue)!important;outline-offset:2px;z-index:40!important;}
.res-handle{position:absolute;right:-6px;bottom:-6px;width:12px;height:12px;background:#fff;border:2px solid var(--blue);border-radius:3px;cursor:nwse-resize;z-index:41;}
.draw-preview{border:2px dashed var(--blue);background:rgba(214,0,110,.08);border-radius:4px;pointer-events:none;z-index:39;}

/* —— 区域 / 部门区（半透明色块，铺在最底层，不挡工位点击） —— */
.zone{z-index:1;pointer-events:none;border-radius:8px;box-sizing:border-box;}
.zone-label{position:absolute;top:5px;left:8px;font-size:12.5px;font-weight:800;letter-spacing:-.2px;pointer-events:none;text-shadow:0 0 4px #fff,0 0 4px #fff,0 0 4px #fff;}
.zone-dept .zone-label{font-size:13px;}
body.edit-mode .zone{pointer-events:auto;cursor:move;}
body.edit-mode .zone:hover{outline:2px dashed var(--blue);outline-offset:-2px;}

/* —— 图层层级（底图 / 区域 / 墙 / 房间 / 楼梯 / 工位 / 文字） —— */
#underlay{z-index:0;}
#wallLayer{z-index:1;}
.room{z-index:2;}
.stair{z-index:2;}
.seat{z-index:4;}
.annotation{z-index:6;}
/* —— 墙体顶点 / 弧度手柄 —— */
.wall-handle{position:absolute;width:13px;height:13px;transform:translate(-50%,-50%);z-index:50;cursor:grab;box-sizing:border-box;}
.wall-handle.vtx{background:#fff;border:2px solid var(--blue);border-radius:2px;}
.wall-handle.mid{width:12px;height:12px;background:var(--blue);border:2px solid #fff;border-radius:50%;box-shadow:0 0 0 1px var(--blue);}
.wall-handle:hover{transform:translate(-50%,-50%) scale(1.3);}
/* —— 楼梯 —— */
.stair{position:absolute;border:2px solid #8a93a0;background:rgba(255,255,255,.55);box-sizing:border-box;overflow:hidden;}
.stair-steps{position:absolute;inset:0;}
.stair-steps span{position:absolute;top:0;bottom:0;width:1.5px;background:#c2cad4;}
.stair-arrow{position:absolute;left:0;right:0;bottom:2px;text-align:center;font-size:10px;color:#7a8392;font-weight:700;pointer-events:none;}
.ed-tip{font-size:12px;color:var(--text-3);line-height:1.5;margin:8px 0 0;}
.ed-tip b{color:var(--blue);}
/* —— 楼层下拉菜单 —— */
.floor-menu .menu-item{display:flex;align-items:center;justify-content:space-between;gap:8px;}
.fm-del{border:none;background:none;color:var(--text-3);font-size:12px;width:20px;height:20px;border-radius:5px;cursor:pointer;flex:0 0 20px;}
.fm-del:hover{background:#fde8e6;color:var(--red);}
.floor-menu .fm-add{color:var(--blue);font-weight:600;border-top:1px solid var(--line);margin-top:4px;}
body.edit-mode #deptLegend{display:none!important;}
.ebtn:disabled{opacity:.38;cursor:not-allowed;}
.ed-spacer{flex:1 1 auto;}
#edUnderlayCtl{display:inline-flex;align-items:center;gap:6px;}
#edUlOpacity{width:78px;vertical-align:middle;}
img#underlay.sel-edit{outline:2.5px dashed var(--blue);outline-offset:2px;}

/* —— HR 平台对接 / 人员变动 / 设备 —— */
.hr-bell{position:relative;}
.hr-bell.has-alert{color:var(--red);border-color:#f4c4bf;}
.hr-badge{position:absolute;top:-5px;right:-5px;min-width:17px;height:17px;padding:0 4px;border-radius:9px;background:var(--red);color:#fff;font-size:10px;font-weight:700;display:flex;align-items:center;justify-content:center;line-height:1;box-shadow:0 0 0 2px #fff;}
/* —— 人员变动（HR 待办）卡片 —— */
.hr-changes{display:flex;flex-direction:column;gap:9px;}
.hrc-gtitle{display:flex;align-items:center;gap:8px;font-size:12px;font-weight:800;color:var(--text-2);letter-spacing:.3px;margin:8px 2px 1px;}
.hrc-gtitle:first-child{margin-top:0;}
.hrc-gtitle::before{content:"";width:8px;height:8px;border-radius:50%;flex:0 0 auto;}
.hrc-gtitle.off::before{background:var(--red);}
.hrc-gtitle.on::before{background:var(--blue);}
.hrc-gcount{font-size:11px;font-weight:700;color:var(--text-3);background:var(--gray-50);border-radius:9px;padding:1px 8px;}
.hrc{position:relative;display:flex;align-items:center;gap:11px;border:1px solid var(--line);border-radius:12px;padding:11px 13px 11px 16px;background:#fff;overflow:hidden;transition:box-shadow .12s,border-color .12s;}
.hrc::before{content:"";position:absolute;left:0;top:0;bottom:0;width:4px;}
.hrc-off::before{background:linear-gradient(180deg,var(--red),#f0857a);}
.hrc-on::before{background:linear-gradient(180deg,var(--blue),#5b8def);}
.hrc:hover{box-shadow:0 5px 16px rgba(16,24,40,.08);border-color:var(--line-strong);}
.hrc-av{flex:0 0 auto;width:38px;height:38px;border-radius:50%;display:flex;align-items:center;justify-content:center;font-size:15px;font-weight:800;box-shadow:inset 0 0 0 1px rgba(0,0,0,.07);}
.hrc-body{flex:1 1 auto;min-width:0;}
.hrc-row1{display:flex;align-items:center;gap:8px;}
.hrc-row1 b{font-size:14.5px;font-weight:700;color:var(--text);white-space:nowrap;}
.hrc-tag{font-size:10.5px;font-weight:700;padding:2px 7px;border-radius:6px;letter-spacing:.4px;flex:0 0 auto;}
.hrc-tag.off{background:var(--red-50);color:var(--red);}
.hrc-tag.on{background:var(--blue-50);color:var(--blue);}
.hrc-meta{font-size:12px;color:var(--text-3);margin-top:3px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;}
.hrc-meta2{font-size:12px;color:var(--text-2);margin-top:2px;display:flex;align-items:center;gap:5px;min-width:0;}
.hrc-when{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;min-width:0;}
.hrc-seat{flex:0 0 auto;font-weight:700;color:var(--text);background:var(--gray-50);border:1px solid var(--line);border-radius:5px;padding:0 6px;font-size:11.5px;letter-spacing:.3px;}
.hrc-actions{flex:0 0 auto;display:flex;align-items:center;gap:7px;}
.hrc-btn{height:31px;padding:0 13px;border-radius:8px;font-size:12.5px;font-weight:600;border:1px solid var(--line-strong);background:#fff;color:var(--text);white-space:nowrap;transition:background .12s,border-color .12s,box-shadow .12s;}
.hrc-btn.ghost:hover{background:#f5f7fb;border-color:#c4ccd8;}
.hrc-btn.danger{background:var(--red);border-color:var(--red);color:#fff;}
.hrc-btn.danger:hover{background:#cb3d31;box-shadow:0 3px 9px rgba(226,72,61,.28);}
.hrc-btn.primary{background:var(--blue);border-color:var(--blue);color:#fff;}
.hrc-btn.primary:hover{background:var(--blue-700);box-shadow:0 3px 9px rgba(214,0,110,.26);}
@media (max-width:560px){ .hrc{flex-wrap:wrap;} .hrc-actions{width:100%;justify-content:flex-end;} }
.device-list{display:flex;flex-direction:column;gap:7px;margin-bottom:8px;}
.dev-item{display:flex;align-items:center;gap:9px;border:1px solid var(--line);border-radius:8px;padding:7px 9px;}
.dev-ic{width:26px;height:26px;border-radius:6px;background:#eef2f8;color:var(--blue);display:flex;align-items:center;justify-content:center;font-weight:700;font-size:13px;flex:0 0 26px;}
.dev-main{display:flex;flex-direction:column;min-width:0;flex:1;}
.dev-main b{font-size:13px;}
.dev-x{width:22px;height:22px;border:none;background:none;color:var(--text-3);border-radius:5px;cursor:pointer;flex:0 0 22px;}
.dev-x:hover{background:var(--red-50);color:var(--red);}
.dev-empty{font-size:12.5px;padding:4px 0;}
.set-hr{grid-column:1 / -1;}
/* 入职去安排提示条 */
.arrange-bar{position:absolute;top:14px;left:50%;transform:translateX(-50%);z-index:35;display:none;align-items:center;gap:12px;background:var(--blue);color:#fff;padding:9px 16px;border-radius:10px;box-shadow:var(--shadow-lg);font-size:13.5px;font-weight:600;max-width:92%;}
.arrange-bar b{font-weight:800;}
.arrange-bar button{border:none;background:rgba(255,255,255,.25);color:#fff;height:26px;padding:0 12px;border-radius:7px;font-weight:600;cursor:pointer;flex:0 0 auto;}
.arrange-bar button:hover{background:rgba(255,255,255,.4);}
/* 清退影响预览 */
.clear-impact p{margin:0 0 10px;font-size:14px;color:var(--text);}
.clear-impact ul{margin:0;padding-left:18px;color:var(--text-2);font-size:13.5px;line-height:1.9;}
.clear-impact b{color:var(--text);}

#editorPanel .ed-hint{color:var(--text-2);font-size:13px;line-height:1.7;background:#f6f9ff;border:1px solid #dbe7ff;border-radius:10px;padding:14px;}
#editorPanel .ed-hint b{display:block;margin-bottom:6px;color:var(--text);font-size:14px;}
/* —— Figma 风格属性面板：对象头 + 分区 + 安静输入 + 成对数值框 —— */
.ed-objhead{display:flex;align-items:center;gap:9px;padding:2px 0 13px;}
.ed-obj-ic{width:26px;height:26px;border-radius:7px;background:var(--blue-50);color:var(--blue);display:flex;align-items:center;justify-content:center;flex:0 0 auto;}
.ed-obj-name{font-size:14px;font-weight:700;color:var(--text);}
.ed-obj-id{font-size:12px;color:var(--text-3);font-weight:600;margin-left:auto;font-variant-numeric:tabular-nums;}
.ed-sec{padding:13px 0;border-top:1px solid var(--line);}
.ed-sec:first-of-type{border-top:none;padding-top:2px;}
.ed-sec-h{display:flex;align-items:center;justify-content:space-between;font-size:11px;font-weight:700;letter-spacing:.03em;color:var(--text-3);margin-bottom:9px;}
.ed-sec-act{color:var(--blue);cursor:pointer;}
.ed-f{display:flex;align-items:center;gap:10px;margin-bottom:8px;}
.ed-f:last-child{margin-bottom:0;}
.ed-f>span{flex:0 0 50px;font-size:12px;color:var(--text-3);font-weight:600;}
.ed-f input,.ed-f select{flex:1;min-width:0;height:30px;border:1px solid transparent;background:#f1f3f6;border-radius:7px;padding:0 9px;font-size:13px;color:var(--text);outline:none;}
.ed-f select{cursor:pointer;}
.ed-f input:hover,.ed-f select:hover{background:#eaedf2;}
.ed-f input:focus-visible,.ed-f select:focus-visible{background:#fff;border-color:var(--blue);box-shadow:0 0 0 3px var(--blue-50);}
.ed-f input[type=color]{flex:0 0 42px;padding:3px;height:30px;background:#fff;border:1px solid var(--line-strong);cursor:pointer;}
.ed-f input[type=range]{flex:1;background:transparent;padding:0;}
.fld-pair{display:flex;align-items:center;border:1px solid var(--line-strong);border-radius:8px;background:#fff;overflow:hidden;}
.fld-pair:focus-within{border-color:var(--blue);box-shadow:0 0 0 3px var(--blue-50);}
.fld-cell{flex:1;min-width:0;display:flex;align-items:center;gap:6px;padding:0 9px;height:32px;}
.fld-glyph{font-size:11px;font-weight:700;color:var(--text-3);flex:0 0 auto;font-family:ui-monospace,SFMono-Regular,Menlo,monospace;}
.fld-cell input{flex:1;min-width:0;width:100%;border:none;background:none;outline:none;font-size:13px;color:var(--text);padding:0;font-variant-numeric:tabular-nums;}
.fld-div{width:1px;align-self:stretch;background:var(--line);}
.ed-lock{flex:0 0 auto;width:27px;align-self:stretch;display:flex;align-items:center;justify-content:center;border:none;border-left:1px solid var(--line);border-right:1px solid var(--line);background:#fafbfc;color:var(--text-3);cursor:pointer;}
.ed-lock:hover{background:#f0f2f5;color:var(--text-2);}
.ed-lock.on{background:var(--blue);color:#fff;border-color:var(--blue);}
.ed-actionbtn{display:flex;align-items:center;justify-content:center;gap:6px;width:100%;height:34px;margin:12px 0 0;border:1px solid #bcd3ff;background:var(--blue-50);color:var(--blue);border-radius:8px;font-size:13px;font-weight:600;}
.ed-actionbtn:hover{background:#e4edff;}
.ed-delbtn{display:flex;align-items:center;justify-content:center;gap:7px;width:100%;height:34px;margin:14px 0 2px;border:1px solid var(--line);background:#fff;color:var(--red);border-radius:8px;font-size:13px;font-weight:600;}
.ed-delbtn:hover{background:var(--red-50);border-color:#f3c0bb;}
.ed-sec-sub{font-size:10.5px;font-weight:600;color:var(--text-3);letter-spacing:0;}
.ed-rot{display:flex;align-items:center;gap:8px;}
.ed-rotbtn{flex:0 0 auto;width:34px;height:32px;display:flex;align-items:center;justify-content:center;border:1px solid var(--line-strong);background:#fff;border-radius:8px;font-size:17px;line-height:1;color:var(--text-2);cursor:pointer;}
.ed-rotbtn:hover{background:var(--blue-50);border-color:var(--blue);color:var(--blue);}
.ed-rotbtn:active{transform:scale(.94);}
.ed-rot-val{flex:1;text-align:center;font-size:13px;font-weight:700;color:var(--text);font-variant-numeric:tabular-nums;background:#f1f3f6;height:32px;line-height:32px;border-radius:7px;}
.ed-rot-reset{flex:0 0 auto;height:32px;padding:0 11px;border:1px solid var(--line-strong);background:#fff;border-radius:8px;font-size:12px;font-weight:600;color:var(--text-3);cursor:pointer;}
.ed-rot-reset:hover{background:#f0f2f5;color:var(--text-2);}

/* ===== responsive (mobile) ===== */
@media (max-width:880px){
  .login-shell{grid-template-columns:1fr;}
  .login-main{min-height:100vh;border-right:none;padding:38px 24px;}
  .login-brand{margin-bottom:56px;}
  .login-copy h1{font-size:28px;}
  .dingtalk-login{max-width:none;}
  .login-preview{display:none;}
  .hamburger{display:flex;}
  .header{gap:12px;padding:0 12px;}
  .header-sub,.logo-text{display:none;}
  .header-center{position:static;flex:1;}
  .search-group{flex:1;}
  .search-field{flex:1;}
  .search-field input{width:100%;}
  .dept-filter{display:none;}
  .search-suggest{position:fixed;top:58px;left:10px;right:10px;width:auto;}
  .suggest-main{min-width:auto;}
  .suggest-emp{min-width:auto;font-size:12px;}
  .suggest-py,.suggest-dept{display:none;}
  .btn-ghost#exportBtn span,.btn-ghost#exportBtn{font-size:0;}
  .sidebar{position:fixed;left:0;top:60px;bottom:0;z-index:120;transform:translateX(-100%);transition:transform .25s;box-shadow:var(--shadow-lg);}
  .sidebar.open{transform:none;}
  .panel{position:fixed;right:0;top:60px;bottom:0;width:88vw;max-width:360px;z-index:130;box-shadow:var(--shadow-lg);transform:translateX(100%);transition:transform .25s;}
  .panel.show{transform:none;}
  body.no-panel .panel{display:flex;}
  .main-toolbar{gap:12px;padding:0 12px;}
  .floor-select{white-space:nowrap;flex-shrink:0;}
  .stats{gap:14px;overflow-x:auto;font-size:12px;margin-left:12px;}
  .stat{white-space:nowrap;flex-shrink:0;}
  .report-cards{grid-template-columns:repeat(2,1fr);}
  .view-page .view-body{padding:16px;}
  .view-tools{width:100%;}
  .vt-search{flex:1;width:auto;}
}

/* —— 部门管理弹窗 —— */
.dept-mgr .dm-list{display:flex;flex-direction:column;gap:8px;max-height:46vh;overflow:auto;margin:6px 0 14px;padding-right:4px;}
.dept-mgr .dm-row{display:flex;align-items:center;gap:10px;}
.dept-mgr .dm-color{width:30px;height:30px;padding:0;border:1px solid var(--line);border-radius:7px;background:none;cursor:pointer;flex:0 0 auto;}
.dept-mgr .dm-name{flex:1;min-width:0;padding:7px 10px;border:1px solid var(--line);border-radius:8px;font-size:13.5px;}
.dept-mgr .dm-name:focus{outline:none;border-color:var(--blue);box-shadow:0 0 0 3px rgba(214,0,110,.12);}
.dept-mgr .dm-count{font-size:12px;color:var(--text-3);flex:0 0 auto;min-width:48px;text-align:right;}
.dept-mgr .dm-del{flex:0 0 auto;width:30px;height:30px;display:flex;align-items:center;justify-content:center;border:1px solid var(--line);background:#fff;border-radius:7px;color:var(--text-3);cursor:pointer;}
.dept-mgr .dm-del:hover{border-color:var(--red);color:var(--red);background:#fef2f2;}
.dept-mgr .dm-add{display:flex;align-items:center;gap:10px;border-top:1px dashed var(--line);padding-top:14px;}
.dept-mgr .dm-add #dm-newcol{width:30px;height:30px;padding:0;border:1px solid var(--line);border-radius:7px;background:none;cursor:pointer;flex:0 0 auto;}
.dept-mgr .dm-add #dm-new{flex:1;min-width:0;padding:7px 10px;border:1px solid var(--line);border-radius:8px;font-size:13.5px;}
.dept-mgr .dm-add #dm-new:focus{outline:none;border-color:var(--blue);box-shadow:0 0 0 3px rgba(214,0,110,.12);}

/* —— 框选批量：多选任意元素 + 批量操作条 —— */
.multi-sel{outline:2.5px solid var(--blue)!important;outline-offset:1px;box-shadow:0 0 0 3px rgba(214,0,110,.18);}
.seat.multi-sel{z-index:7!important;}   /* 仅工位抬升层级，避免选中的房间/区域盖住其内部工位、误吃点击 */
#wallLayer path.multi-sel{outline:none;box-shadow:none;stroke:var(--blue)!important;}
/* —— 重叠工位告警：编辑态下相互重叠的工位描红环 —— */
.seat.overlap-warn{outline:2.5px dashed var(--red)!important;outline-offset:1px;box-shadow:0 0 0 3px rgba(226,72,61,.22);z-index:6;}
/* 「整理」按钮在检测到重叠时显示红点 */
.ebtn.has-overlap{position:relative;color:var(--red);}
.ebtn.has-overlap::after{content:"";position:absolute;top:2px;right:2px;width:7px;height:7px;border-radius:50%;background:var(--red);box-shadow:0 0 0 1.5px #fff;}
.batch-bar{position:absolute;bottom:94px;left:50%;transform:translateX(-50%);z-index:36;display:flex;align-items:center;justify-content:center;flex-wrap:wrap;gap:8px 12px;background:#fff;border:1px solid var(--line);box-shadow:var(--shadow-lg);border-radius:12px;padding:9px 16px;font-size:13px;color:var(--text);max-width:min(calc(100% - 32px),680px);}
.batch-bar>*{flex:0 0 auto;white-space:nowrap;}
.batch-bar b{font-weight:800;}
.batch-bar label{display:flex;align-items:center;gap:6px;color:var(--text-2);font-weight:600;}
.batch-bar select{height:30px;border:1px solid var(--line-strong);border-radius:7px;padding:0 8px;font-size:13px;background:#fff;}
.batch-bar .ebtn{height:30px;padding:0 12px;border:1px solid var(--line-strong);border-radius:7px;background:#fff;color:var(--text);font-weight:600;font-size:13px;}
.batch-bar .ebtn:hover{background:#f6f8fb;}
.batch-bar .ebtn.primary{background:var(--blue);border-color:var(--blue);color:#fff;}
.batch-bar .ebtn.primary:hover{background:var(--blue-700);}
.batch-bar .bb-rot{display:flex;align-items:center;gap:6px;padding-left:12px;margin-left:2px;border-left:1px solid var(--line);}
.batch-bar .bb-rot-lbl{color:var(--text-2);font-weight:600;}
.batch-bar .ebtn.ico{width:30px;padding:0;font-size:16px;line-height:1;display:inline-flex;align-items:center;justify-content:center;color:var(--text-2);}
.batch-bar .ebtn.ico:hover{background:var(--blue-50);border-color:var(--blue);color:var(--blue);}

/* —— 报表 · 部门看板表 —— */
.dept-table{width:100%;border-collapse:collapse;font-size:13.5px;}
.dept-table th,.dept-table td{padding:9px 12px;border-bottom:1px solid var(--line);text-align:left;}
.dept-table thead th{font-size:12px;color:var(--text-3);font-weight:700;background:#fbfcfe;}
.dept-table th.num,.dept-table td.num{text-align:right;width:78px;}
.dept-table th.occ,.dept-table td.occ{width:180px;}
.dept-table tbody tr:hover{background:#f6f8fb;}
.dept-table .dt-sw{display:inline-block;width:12px;height:12px;border-radius:4px;margin-right:8px;vertical-align:-1px;}
.dept-table .dt-bar{display:inline-block;width:110px;height:8px;border-radius:5px;background:var(--gray-50);overflow:hidden;vertical-align:middle;margin-right:8px;}
.dept-table .dt-fill{display:block;height:100%;background:linear-gradient(90deg,#41c878,#2aa861);}
.dept-table .dt-pct{font-weight:700;color:var(--text-2);font-size:12.5px;}

/* —— 左侧图层面板（编辑模式）—— */
.layers{display:none;flex-direction:column;width:238px;flex:0 0 238px;background:var(--panel-bg);border-right:1px solid var(--line);min-height:0;}
body.has-layers .layers{display:flex;}
.layers.collapsed{width:36px;flex-basis:36px;}
.lyr-head{display:flex;align-items:center;gap:7px;height:46px;flex:0 0 46px;padding:0 8px 0 14px;border-bottom:1px solid var(--line);}
.lyr-title{font-size:13px;font-weight:800;color:var(--text);letter-spacing:.2px;}
.lyr-total{font-size:11px;color:var(--text-3);font-weight:600;font-variant-numeric:tabular-nums;}
.lyr-toggle{margin-left:auto;width:26px;height:26px;display:flex;align-items:center;justify-content:center;border:none;background:none;color:var(--text-3);border-radius:6px;transition:transform .15s;}
.lyr-toggle:hover{background:#eef1f5;color:var(--text);}
.layers.collapsed .lyr-toggle{transform:rotate(180deg);}
.layers.collapsed .lyr-title,.layers.collapsed .lyr-total,.layers.collapsed .lyr-search,.layers.collapsed .lyr-list{display:none;}
.lyr-search{display:flex;align-items:center;gap:7px;margin:10px;padding:0 9px;height:32px;background:#f1f3f6;border:1px solid transparent;border-radius:8px;color:var(--text-3);}
.lyr-search:focus-within{background:#fff;border-color:var(--blue);box-shadow:0 0 0 3px var(--blue-50);color:var(--blue);}
.lyr-search input{flex:1;min-width:0;border:none;background:none;outline:none;font-size:13px;color:var(--text);}
.lyr-list{flex:1;overflow-y:auto;padding:2px 6px 16px;}
.lyr-grp,.lyr-sub{display:flex;align-items:center;gap:6px;height:30px;padding:0 7px;cursor:pointer;border-radius:7px;user-select:none;}
.lyr-grp{margin-top:5px;}
.lyr-grp:hover,.lyr-sub:hover{background:#f1f4f8;}
.lyr-sub{padding-left:15px;}
.lyr-gname{font-size:11.5px;font-weight:800;color:var(--text-2);letter-spacing:.2px;}
.lyr-subname{font-size:12.5px;font-weight:600;color:var(--text);overflow:hidden;text-overflow:ellipsis;white-space:nowrap;}
.lyr-cnt{margin-left:auto;font-size:11px;color:var(--text-3);font-weight:600;font-variant-numeric:tabular-nums;background:#eef1f5;border-radius:9px;padding:1px 7px;}
.lyr-caret{width:13px;flex:0 0 13px;font-size:9px;color:var(--text-3);display:flex;align-items:center;justify-content:center;transition:transform .12s;}
.lyr-caret::before{content:"▾";}
.lyr-caret.c{transform:rotate(-90deg);}
.lyr-row{display:flex;align-items:center;gap:8px;height:28px;padding:0 8px 0 24px;cursor:pointer;border-radius:7px;}
.lyr-row.deep{padding-left:36px;}
.lyr-row:hover{background:#eaf0f7;}
.lyr-row.active{background:var(--blue-50);}
.lyr-row.active .lyr-name{color:var(--blue);font-weight:600;}
.lyr-ic{display:flex;color:var(--text-3);flex:0 0 auto;}
.lyr-dot{width:11px;height:11px;border-radius:3px;flex:0 0 auto;box-shadow:inset 0 0 0 1px rgba(0,0,0,.08);}
.lyr-name{flex:1;min-width:0;font-size:12.5px;color:var(--text);overflow:hidden;text-overflow:ellipsis;white-space:nowrap;}
.lyr-tag{font-size:10.5px;color:var(--text-3);font-weight:600;flex:0 0 auto;}
.lyr-empty{padding:22px 12px;text-align:center;color:var(--text-3);font-size:12.5px;}
.lyr-rail{display:none;flex:1;writing-mode:vertical-rl;text-orientation:mixed;align-items:center;justify-content:flex-start;padding-top:14px;font-size:12px;font-weight:800;color:var(--text-3);cursor:pointer;letter-spacing:3px;}
.layers.collapsed .lyr-rail{display:flex;}
.lyr-flash{outline:2.5px solid var(--blue)!important;outline-offset:2px;z-index:7;}
@media (max-width:880px){ .layers{display:none!important;} }

/* —— 编辑模式：精简顶栏，给图层面板 + 画布 + 属性面板让位（Figma 式留白）—— */
body.edit-mode #colorMode,
body.edit-mode .main-toolbar .stats,
body.edit-mode #editToggle{display:none;}
.floor-select,.edit-toggle{white-space:nowrap;}
.main-toolbar{gap:16px;}

/* 工具参数：限制部门下拉宽度，避免占用过多顶栏空间 */
.eb-params select{max-width:132px;text-overflow:ellipsis;}
.eb-params input[type=number]{width:42px;}

.eb-actions{display:flex;align-items:center;gap:8px;}

/* —— 抓手平移光标（空格 / 中键 / 拖动中）—— */
.floor-wrap.grabbing{cursor:grabbing!important;}
body.space-pan .floor-wrap{cursor:grab;}
body.space-pan .floor-wrap.grabbing{cursor:grabbing!important;}

/* —— 编辑器快捷键速查 —— */
.ed-keys{margin-top:14px;border-top:1px solid var(--line);padding-top:12px;}
.ed-keys>b{display:block;font-size:12px;color:var(--text-2);margin-bottom:9px;letter-spacing:.3px;}
.ed-keyrow{display:flex;align-items:center;gap:5px;font-size:12px;color:var(--text-3);margin-bottom:8px;}
.ed-keyrow>span{margin-left:auto;color:var(--text-2);text-align:right;}
.ed-keyrow .km{margin-left:0;color:var(--text-2);font-weight:600;}
kbd{display:inline-flex;align-items:center;justify-content:center;min-width:20px;height:20px;padding:0 5px;background:#f1f3f6;border:1px solid var(--line-strong);border-bottom-width:2px;border-radius:5px;font-size:11px;font-weight:600;color:var(--text-2);font-family:inherit;line-height:1;}

/* —— Device Search Modal —— */
.device-results {
  max-height: 400px;
  overflow-y: auto;
  margin-top: 10px;
  border: 1px solid var(--line);
  border-radius: 8px;
  background: var(--bg-1);
}
.dev-res-item {
  display: flex;
  flex-direction: column;
  padding: 12px 16px;
  border-bottom: 1px solid var(--line);
  cursor: pointer;
  transition: background .2s;
}
.dev-res-item:last-child {
  border-bottom: none;
}
.dev-res-item:hover {
  background: var(--bg-2);
}
.dev-res-brand {
  font-size: 12px;
  color: var(--text-3);
  margin-bottom: 4px;
}
.dev-res-model {
  font-size: 14px;
  font-weight: 500;
  color: var(--text-1);
}
.dev-res-part {
  font-size: 12px;
  color: var(--text-3);
  margin-top: 4px;
}
.dev-hl {
  color: var(--accent);
  font-weight: bold;
}

.renum-row{display:flex;gap:14px;align-items:center;flex-wrap:wrap;margin-bottom:10px;}
.renum-row label{display:flex;align-items:center;gap:6px;font-size:13px;}
.renum-row input,.renum-row select{padding:5px 8px;border:1px solid var(--line,#d4d4d8);border-radius:7px;}
