/* 大厅首屏（design2/lobby.md）：打开就是楼面平面图 + 底部一排入口
   结构：#floorScreen > .content.lobby = .fp-body（楼面图，2:1，1240 × 620：主楼面 1000 + 东侧连廊 240）+ .dock（入口栏）
         + .fp-drawer（右侧场所抽屉）+ .fp-pop（没带钱的小卡）；悬停卡 .fp-peek 在舞台里。
   门牌一行：名字 │ 最低注（进不去加锁、打烊加月亮）；其余信息悬停 / 点开才看（Leo 反馈 2-1）。
   整页 zoom = k：这里全部是 dp；门牌字号跟着楼面图大小走（.fp-body 是 size 容器，cq 单位按 dp 算）。
   SVG / 门牌由 js/core/floor-ui.js 生成；顶栏在 css/base.css。 */

#floorScreen > .content.lobby{padding:0;display:grid;grid-template-rows:minmax(0,1fr) 64px;overflow:hidden;position:relative;}

/* ---------- 楼面图舞台：2:1 等比放大，两侧只留 12 ---------- */
.fp-body{position:relative;min-height:0;container-type:size;display:flex;align-items:center;justify-content:center;
  background:radial-gradient(ellipse at 50% 0%,rgba(255,200,130,.06),transparent 60%),var(--ink-950);}
.fp-stage{position:relative;flex:none;width:min(calc(calc(100cqw / var(--cqz,1)) - 24px),calc((calc(100cqh / var(--cqz,1)) - 16px) * 2));aspect-ratio:1240 / 620;
  border-radius:var(--r-1);box-shadow:0 0 0 1px #000,var(--shadow-2);overflow:hidden;
  --fs:clamp(12px,min(calc(1.12cqw / var(--cqz,1)),calc(2.25cqh / var(--cqz,1))),17px);--map-filter:none;--lamp-o:1;--sign-a:.93;}
.fp-svg{position:absolute;inset:0;width:100%;height:100%;display:block;filter:var(--map-filter);}
.fp-zones{position:absolute;inset:0;}
/* 夜间柔和：楼面图压 12% 亮度、射灯光斑减半、门牌底更实（不改布局、不加字） */
html[data-night] .fp-stage{--map-filter:brightness(.86) saturate(.92);--lamp-o:.45;--sign-a:.97;}
html[data-night] #topbar,html[data-night] .dock{filter:brightness(.92);}

/* ---------- SVG：场外 / 地面 / 墙 ---------- */
.fp-svg .fp-outside{fill:#0b0908;}
.fp-svg .fp-road{fill:#131110;}
.fp-svg .fp-lane{stroke:rgba(216,203,175,.12);stroke-width:1;fill:none;}
.fp-svg .fp-pave{fill:#171412;}
.fp-svg .fp-walk-edge{stroke:rgba(201,160,82,.22);stroke-width:1;fill:none;}
.fp-svg .fp-pit{fill:#1d1611;stroke:rgba(201,160,82,.35);stroke-width:1;}
.fp-svg .fp-podium{fill:#2c211a;stroke:var(--brass-900);stroke-width:1;}
.fp-svg .fp-wall{fill:none;stroke:#050403;stroke-width:8;stroke-linejoin:miter;}
.fp-svg .fp-wall-hi{fill:none;stroke:rgba(201,160,82,.45);stroke-width:1;}
.fp-svg .fp-room{fill:none;stroke:#070504;stroke-width:5;stroke-linecap:square;}
.fp-svg .fp-room-hi{fill:none;stroke:rgba(201,160,82,.5);stroke-width:1;stroke-linecap:square;}
.fp-svg .fp-door{fill:none;stroke:rgba(201,160,82,.45);stroke-width:1;}
.fp-svg .fp-arrow{fill:none;stroke:var(--brass-300);stroke-width:2;stroke-linecap:round;stroke-linejoin:round;}
.fp-svg .fp-pillar{fill:#241a13;stroke:var(--brass-700);stroke-width:1;}
.fp-svg .fp-rope rect{fill:none;stroke:var(--wine-300);stroke-width:1.6;}
.fp-svg .fp-rope circle{fill:var(--brass-500);stroke:#1d1408;stroke-width:.6;}
.fp-svg .fp-gate path{fill:none;stroke:var(--wine-300);stroke-width:1.8;}
.fp-svg .fp-gate circle{fill:var(--brass-300);stroke:#1d1408;stroke-width:.6;}
.fp-svg .lamp{opacity:var(--lamp-o);}

/* 家具 */
.fp-svg .fp-furn .counter{fill:none;stroke:#6b4426;stroke-width:6;stroke-linecap:round;}
.fp-svg .fp-furn .stool{fill:#1e1510;stroke:#5f3a22;stroke-width:1;}
.fp-svg .fp-furn .htable,.fp-svg .fp-furn .dtable{fill:#4a2e1b;stroke:#875634;stroke-width:1;}
.fp-svg .fp-furn .tv{fill:#0b141b;stroke:#243541;stroke-width:.8;}
.fp-svg .fp-furn .divider{fill:none;stroke:rgba(201,160,82,.5);stroke-width:2;}
.fp-svg .fp-furn .bigscreen{fill:#0b141b;stroke:#2a3a46;stroke-width:1;}
.fp-svg .fp-furn .etg{fill:#1b1714;stroke:#3a3129;stroke-width:1;}
.fp-svg .fp-furn .desk{fill:none;stroke:#875634;stroke-width:7;stroke-linecap:round;}
.fp-svg .fp-furn .staff{fill:#2b2f36;stroke:#c9a052;stroke-width:.8;}
.fp-svg .fp-furn .cage{fill:#2a2019;stroke:var(--brass-700);stroke-width:1;}
.fp-svg .fp-furn .cage-bar{stroke:var(--brass-500);stroke-width:1;}
.fp-svg .fp-furn .mat{fill:#231a15;stroke:rgba(201,160,82,.35);stroke-width:1;}
.fp-svg .fp-furn .stage{fill:#3b2619;stroke:var(--brass-500);stroke-width:1.2;}
.fp-svg .fp-furn .stage-edge{fill:none;stroke:rgba(255,216,155,.45);stroke-width:1;}
.fp-svg .fp-furn .esc{fill:#2a2622;stroke:#8f8f8f;stroke-width:1;}
.fp-svg .fp-furn .esc-step{stroke:#57524c;stroke-width:1;}
.fp-svg .fp-furn .lift{fill:#26221e;stroke:var(--brass-700);stroke-width:1;}
.fp-svg .fp-furn .lift-door{stroke:var(--brass-500);stroke-width:1;}
/* 东侧连廊：沙发、床、池子、剧场座位、烤炉、寿司吧台 */
.fp-svg .fp-furn .sofa{fill:#3a2c22;stroke:#6b5238;stroke-width:1;}
.fp-svg .fp-furn .rug{fill:rgba(201,160,82,.08);stroke:rgba(201,160,82,.3);stroke-width:1;}
.fp-svg .fp-furn .plant{fill:#1f3a2a;stroke:#2f5a40;stroke-width:1;}
.fp-svg .fp-furn .bed{fill:#d9cfbd;stroke:#8e7f66;stroke-width:1;} .fp-svg .fp-furn .bedsheet{fill:#b9ae98;}
.fp-svg .fp-furn .pool{fill:url(#fpWater);stroke:#8fa39a;stroke-width:1.2;}
.fp-svg .fp-furn .seatrow{fill:#4a1a20;}
.fp-svg .fp-furn .grill{fill:#1a1210;stroke:#b3542a;stroke-width:1.2;}
.fp-svg .fp-furn .sushi{fill:none;stroke:#b8a27a;stroke-width:5;stroke-linecap:round;}
.fp-svg .fp-furn .pillar-sm{fill:#241a13;stroke:#8e6a2b;stroke-width:1;}

/* 牌桌：on 开着（台布 + 木边 + 荷官）· off 收台（盖布）· res 暂未开桌（盖布 + 围栏） */
.fp-svg .fp-t .rail{fill:#5f3a22;stroke:#26170d;stroke-width:1;}
.fp-svg .fp-t .felt{fill:url(#fpFelt-green);}
.fp-svg .fp-t.f-green-lt .felt{fill:url(#fpFelt-green-lt);}
.fp-svg .fp-t.f-navy .felt{fill:url(#fpFelt-navy);}
.fp-svg .fp-t.f-wine .felt{fill:url(#fpFelt-wine);}
.fp-svg .fp-t .ink{fill:none;stroke:rgba(231,201,127,.55);stroke-width:.8;}
.fp-svg .fp-t .tray{fill:#1a1310;stroke:var(--brass-700);stroke-width:.6;}
.fp-svg .fp-t .bowl{fill:#6b4426;stroke:#26170d;stroke-width:1;}
.fp-svg .fp-t .wheel{fill:#3a0d12;stroke:var(--brass-500);stroke-width:1;}
.fp-svg .fp-t .hub{fill:var(--brass-300);}
.fp-svg .fp-t .dome{fill:rgba(240,235,220,.35);stroke:rgba(255,255,255,.45);stroke-width:.8;}
.fp-svg .fp-t .st{fill:#1a1310;stroke:#5f3a22;stroke-width:1;}
.fp-svg .fp-t .st.on{fill:#e9d9b4;stroke:var(--brass-700);}
.fp-svg .fp-t .dl{fill:#23262c;stroke:var(--brass-300);stroke-width:1;}
.fp-svg .fp-t.off .felt,.fp-svg .fp-t.res .felt{fill:url(#fpCover);}
.fp-svg .fp-t.off .rail,.fp-svg .fp-t.res .rail{fill:#3a2a1d;}
.fp-svg .fp-t.off .ink,.fp-svg .fp-t.res .ink,.fp-svg .fp-t.off .tray,.fp-svg .fp-t.res .tray{display:none;}
.fp-svg .fp-t.off .wheel,.fp-svg .fp-t.res .wheel{fill:#2b2622;stroke:#3a3129;}
.fp-svg .fp-t.off .st,.fp-svg .fp-t.res .st{fill:#15100d;stroke:#3a2a1d;}
.fp-svg .fp-t.closing .felt{opacity:.75;}
/* 老虎机：机柜 + 屏（有人玩就亮）+ 凳子 */
.fp-svg .fp-slots .bank{fill:#120d0a;stroke:var(--brass-900);stroke-width:1;}
.fp-svg .fp-slots .mc{fill:#2a2019;stroke:#4d3812;stroke-width:.8;}
.fp-svg .fp-slots .scr{fill:#3a342c;}
.fp-svg .fp-slots .scr.on{fill:var(--lamp);}
.fp-svg .fp-slots .st{fill:#1a1310;stroke:#4a3524;stroke-width:.8;}
.fp-svg .fp-slots .st.on{fill:#e9d9b4;stroke:var(--brass-700);}

/* ---------- 门牌：一行 = 名字 │ 最低注（最多再一个状态图标） ---------- */
.fp-zone{position:absolute;border-radius:3px;outline:none;transition:box-shadow .15s,background-color .15s;}
.fp-zone[role=button]{cursor:pointer;}
.fp-zone[role=button]:hover,.fp-zone[role=button]:focus-visible,.fp-zone.hot{background-color:rgba(255,200,120,.06);
  box-shadow:inset 0 0 0 1px var(--brass-500),inset 0 0 30px rgba(255,200,120,.07);}
.fp-sign{position:absolute;transform:translate(-50%,calc(-50% + var(--dy,0px)));pointer-events:none;white-space:nowrap;
  display:flex;align-items:center;gap:.5em;padding:.28em .66em .32em;font-size:var(--fs);line-height:1.2;
  border:1px solid var(--brass-700);border-radius:3px;
  background:linear-gradient(180deg,rgba(33,24,18,var(--sign-a)),rgba(15,11,8,var(--sign-a)));
  box-shadow:0 3px 10px rgba(0,0,0,.6),var(--hi-brass);transition:border-color .15s;}
.fp-zone[role=button]:hover .fp-sign,.fp-zone[role=button]:focus-visible .fp-sign,.fp-zone.hot .fp-sign{border-color:var(--brass-300);}
.fp-sign .nm{font-family:var(--serif);color:var(--tx-1);letter-spacing:.04em;}
.fp-sign .mn{font-family:var(--serif);font-variant-numeric:tabular-nums lining-nums;color:var(--brass-300);letter-spacing:.02em;padding-left:.5em;border-left:1px solid var(--brass-900);}
.fp-sign .mn:empty{display:none;}
.fp-sign .ic{width:1.05em;height:1.05em;fill:var(--brass-500);vertical-align:0;}
.fp-sign .st{display:none;}
.fp-sign .st.lk{display:block;fill:#e6b07a;}
.fp-sign .st.moon{display:block;fill:var(--cream-500);}
/* 消费点：图标 + 名字，没有框线，比游戏门牌轻一档 */
.k-venue .fp-sign{border-color:transparent;background:rgba(12,9,7,.78);box-shadow:0 2px 8px rgba(0,0,0,.5);padding:.22em .6em .26em .5em;gap:.42em;}
.k-venue .fp-sign .nm{font-family:var(--sans);font-size:.9em;color:var(--tx-2);letter-spacing:.02em;}
.k-venue.closed .fp-sign{opacity:.62;}
/* 服务台 / 出口 */
.k-desk .fp-sign,.k-exit .fp-sign{border-color:var(--brass-900);}
.k-desk .fp-sign .nm,.k-exit .fp-sign .nm{font-size:.94em;}
/* 分厅：门牌边框加粗一档；不够格 = 名字降一档 + 锁 */
.k-hall .fp-sign{border-color:var(--brass-500);box-shadow:0 3px 10px rgba(0,0,0,.6),var(--hi-brass),0 0 0 1px rgba(0,0,0,.6);}
.k-hall.locked .fp-sign .nm{color:var(--cream-300);}
/* 收台 / 没到开桌时间：整块降一档灰 */
.closed:not(.k-venue) .fp-sign .nm,.closed:not(.k-venue) .fp-sign .mn{color:var(--cream-500);}
/* 身上没钱：Cage 门牌亮一档（静态，不闪） */
.lobby.broke #fpz-cage .fp-sign{border-color:var(--brass-300);box-shadow:0 0 0 1px rgba(231,201,127,.35),0 0 18px rgba(255,200,120,.18),var(--hi-brass);}
.lobby.broke #fpz-cage .fp-sign .nm{color:var(--brass-100);}
/* 街名 / 指北针 */
.fp-street{position:absolute;top:50%;transform:translate(-50%,-50%) rotate(-90deg);font-family:var(--serif);font-size:12px;letter-spacing:.42em;color:var(--cream-700);white-space:nowrap;pointer-events:none;}
.fp-street.e{transform:translate(-50%,-50%) rotate(90deg);font-size:9px;letter-spacing:.3em;}
.fp-compass{position:absolute;right:1.4%;top:1.2%;display:flex;flex-direction:column;align-items:center;pointer-events:none;}
.fp-compass svg{width:14px;height:14px;fill:var(--brass-500);}
.fp-compass b{font:12px/1 var(--serif);color:var(--brass-300);}

/* ---------- 悬停卡：细节只在悬停 / 键盘焦点时出现（最多 3 行 + 一条迷你路单 / 最近开号） ---------- */
.fp-peek{position:absolute;z-index:20;pointer-events:none;min-width:190px;max-width:270px;padding:10px 12px 11px;
  font-size:12.5px;line-height:1.55;color:var(--tx-2);border:1px solid var(--brass-700);border-radius:var(--r-2);
  background:linear-gradient(180deg,rgba(30,22,17,.98),rgba(14,10,8,.98));box-shadow:var(--shadow-2),var(--hi-brass);
  opacity:0;transform:translate(-50%,calc(-100% - 6px));transition:opacity .12s;}
.fp-peek.on{opacity:1;}
.fp-peek.below{transform:translate(-50%,6px);}
.fp-peek h4{font-family:var(--serif);font-weight:400;font-size:15px;color:var(--tx-1);letter-spacing:.04em;margin-bottom:4px;display:flex;align-items:baseline;gap:8px;white-space:nowrap;}
.fp-peek h4 em{font-style:normal;font-size:12px;color:var(--brass-300);letter-spacing:.1em;font-variant-numeric:lining-nums tabular-nums;}
.fp-peek .r{display:flex;justify-content:space-between;gap:14px;white-space:nowrap;}
.fp-peek .r b{font-family:var(--serif);font-weight:400;color:var(--brass-100);}
.fp-peek .lk{color:#e6b07a;}
.fp-peek .beads{display:inline-grid;grid-auto-flow:column;grid-template-rows:repeat(4,8px);grid-auto-columns:8px;gap:2px;padding:3px 4px;margin-top:6px;background:#05080b;border:1px solid #1d2a33;border-radius:2px;}
.fp-peek .beads i{border-radius:50%;display:block;} .fp-peek .beads i.B{background:var(--banker);} .fp-peek .beads i.P{background:var(--player);} .fp-peek .beads i.T{background:var(--tie);}
.fp-peek .nums{display:flex;gap:3px;margin-top:6px;}
.fp-peek .nums i{min-width:20px;height:18px;padding:0 3px;border-radius:2px;display:inline-flex;align-items:center;justify-content:center;font:12px/1 var(--serif);font-style:normal;color:#f4ead3;}
.fp-peek .nums i.r{background:var(--banker);} .fp-peek .nums i.b{background:#141212;box-shadow:inset 0 0 0 1px #3a3a3a;} .fp-peek .nums i.g{background:var(--tie);} .fp-peek .nums i.lo{background:var(--player);}

/* ---------- 底部入口：像牌桌的木 rail，一排按钮 ---------- */
.dock{position:relative;z-index:5;display:flex;align-items:center;justify-content:center;gap:10px;padding:0 22px;
  background:linear-gradient(180deg,#3b2618 0%,#2a1a10 45%,#1c110a 100%);
  border-top:1px solid var(--brass-700);box-shadow:0 -1px 0 rgba(0,0,0,.8),0 1px 0 rgba(255,220,160,.1) inset,0 -6px 18px rgba(0,0,0,.45);}
.dock::before{content:"";position:absolute;left:0;right:0;top:3px;height:1px;background:linear-gradient(90deg,transparent,rgba(231,201,127,.25) 20%,rgba(231,201,127,.25) 80%,transparent);}
.dock .grp{display:flex;gap:10px;}
.dock .gap{width:26px;}
.dk{position:relative;display:inline-flex;align-items:center;gap:9px;height:40px;padding:0 18px;border-radius:var(--r-1);cursor:pointer;
  font-family:var(--sans);font-size:14px;letter-spacing:.08em;color:var(--brass-100);border:1px solid var(--brass-700);white-space:nowrap;
  background:linear-gradient(180deg,#3a2a1c,#221812);box-shadow:var(--hi-brass),0 1px 2px rgba(0,0,0,.6);transition:border-color .12s,background .12s;}
.dk:hover{border-color:var(--brass-500);background:linear-gradient(180deg,#46331f,#2a1d14);}
.dk .ic{width:19px;height:19px;fill:var(--brass-300);}
.dk small{font-family:var(--serif);font-size:13px;letter-spacing:0;color:var(--cream-500);opacity:1;}
.dk small.pos{color:var(--good);} .dk small.neg{color:var(--bad);}
.dk.primary{color:#1d1408;border-color:var(--brass-700);font-weight:600;
  background:linear-gradient(180deg,var(--brass-100) 0%,var(--brass-300) 30%,var(--brass-500) 100%);
  box-shadow:0 1px 0 rgba(255,255,255,.55) inset,0 -1px 0 rgba(0,0,0,.25) inset,0 2px 6px rgba(0,0,0,.6);}
.dk.primary .ic{fill:#1d1408;}
.dk.out{background:transparent;border-color:var(--brass-900);color:var(--cream-300);}
.dk.out .ic{fill:var(--cream-500);}
.dk.out:hover{border-color:var(--brass-700);color:var(--brass-300);}
/* 首次没带钱：Cage 上方一行提示（不弹窗、不闪） */
.coach{position:absolute;bottom:calc(100% + 10px);left:50%;transform:translateX(-50%);white-space:nowrap;
  padding:7px 12px 7px 14px;font-size:13px;letter-spacing:.04em;color:var(--tx-1);display:flex;align-items:center;gap:10px;font-weight:400;
  background:linear-gradient(180deg,#2a1e15,#18110c);border:1px solid var(--brass-500);border-radius:var(--r-1);box-shadow:var(--shadow-2);}
.coach::after{content:"";position:absolute;left:50%;top:100%;width:10px;height:10px;transform:translate(-50%,-5px) rotate(45deg);
  background:#18110c;border-right:1px solid var(--brass-500);border-bottom:1px solid var(--brass-500);}
.coach .x,.dk.primary .coach .ic.x{width:14px;height:14px;fill:var(--cream-500);cursor:pointer;}   /* 在 Cage 主按钮里：压过 .dk.primary .ic 的深色 */
.coach .x:hover,.dk.primary .coach .ic.x:hover{fill:var(--brass-300);}

/* ---------- 没带钱就点了游戏：点哪儿就在哪儿冒一个小卡 ---------- */
.fp-pop{position:absolute;z-index:50;display:none;padding:10px 12px 12px;min-width:210px;border:1px solid var(--brass-500);border-radius:var(--r-2);
  background:linear-gradient(180deg,#261b14,#130e0a);box-shadow:var(--shadow-2);font-size:13px;color:var(--tx-1);}
.fp-pop.on{display:block;}
.fp-pop .t{font-family:var(--serif);font-size:15px;margin-bottom:8px;letter-spacing:.04em;white-space:nowrap;}
.fp-pop .t small{font-family:var(--sans);font-size:12px;color:var(--cream-500);margin-left:6px;opacity:1;}
.fp-pop .b{display:flex;gap:8px;}

/* ---------- 场所抽屉（右侧）：点地图上的餐厅 / 酒吧 / 酒店 / 水疗 / 演出直接翻到这一家 ---------- */
.fp-drawer{position:absolute;z-index:40;top:0;bottom:64px;right:0;width:360px;display:flex;flex-direction:column;
  border-left:1px solid var(--brass-700);background:linear-gradient(180deg,#1b1410,#0f0b08);box-shadow:-18px 0 40px rgba(0,0,0,.55);
  transform:translateX(105%);transition:transform .2s ease;visibility:hidden;}
.fp-drawer.on{transform:none;visibility:visible;}
.fp-drawer .art{height:128px;position:relative;flex:none;overflow:hidden;border-bottom:1px solid var(--brass-900);}
.fp-drawer .art svg.va{position:absolute;inset:0;width:100%;height:100%;}
.fp-drawer .hd{padding:14px 18px 10px;}
.fp-drawer .hd h3{font-family:var(--serif);font-weight:400;font-size:22px;color:var(--tx-1);letter-spacing:.04em;}
.fp-drawer .hd div{font-size:12px;color:var(--tx-3);margin-top:4px;display:flex;align-items:center;gap:6px;}
.fp-drawer .hd .dot{width:7px;height:7px;border-radius:50%;background:var(--good);flex:none;} .fp-drawer .hd .dot.off{background:var(--cream-700);}
.fp-drawer .items{flex:1;overflow:auto;padding:4px 18px;min-height:0;}
.fp-drawer .it{display:flex;align-items:center;gap:12px;padding:11px 0;border-bottom:1px solid var(--hairline);font-size:14px;color:var(--tx-2);}
.fp-drawer .it span{flex:1;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;}
.fp-drawer .it b{font-family:var(--serif);font-weight:400;font-size:15px;color:var(--brass-100);white-space:nowrap;}
.fp-drawer .ft{display:flex;gap:10px;padding:12px 18px;border-top:1px solid var(--hairline);}
.fp-drawer .ft .btn{flex:1;}
.fp-drawer .x{position:absolute;right:10px;top:10px;width:30px;height:30px;border-radius:var(--r-1);display:flex;align-items:center;justify-content:center;
  background:rgba(0,0,0,.5);border:0;cursor:pointer;z-index:2;}
.fp-drawer .x .ic{fill:var(--cream-300);}
