:root{
  --bg:#0e1014; --panel:#161a21; --panel2:#1d222b; --line:#262c37;
  --text:#eceff4; --muted:#8b95a7; --gold:#e0b25a; --gold-soft:#3a2f1c;
  --danger:#ef6b6b; --ok:#4fbf8b; --radius:14px;
}
*{box-sizing:border-box}
html{-webkit-text-size-adjust:100%;text-size-adjust:100%;touch-action:manipulation}
body{margin:0;background:var(--bg);color:var(--text);font-family:system-ui,-apple-system,'PingFang SC','Microsoft YaHei',sans-serif;-webkit-font-smoothing:antialiased}
button,input{font-family:inherit}
a{color:var(--gold);text-decoration:none}

/* ---------- login ---------- */
.login-wrap{min-height:100vh;min-height:100dvh;display:flex;align-items:center;justify-content:center;padding:24px;background:radial-gradient(1200px 600px at 50% -10%,#1c2230 0%,#0e1014 60%)}
.login-card{width:100%;max-width:380px;background:var(--panel);border:1px solid var(--line);border-radius:20px;padding:34px 28px 28px;box-shadow:0 18px 50px rgba(0,0,0,.45)}
.brand{display:flex;align-items:center;gap:12px;margin-bottom:26px}
.brand-badge{width:44px;height:44px;border-radius:13px;background:linear-gradient(145deg,#e8c07a,#c98f2e);display:flex;align-items:center;justify-content:center;font-weight:800;color:#221a0c;font-size:18px}
.brand h1{font-size:17px;margin:0;letter-spacing:.5px}
.brand span{display:block;font-size:12px;color:var(--muted);font-weight:400;margin-top:3px;letter-spacing:0}
.field{margin-bottom:14px}
.field label{display:block;font-size:12.5px;color:var(--muted);margin-bottom:7px}
.field input{width:100%;height:46px;border-radius:11px;border:1px solid var(--line);background:#11151b;color:var(--text);padding:0 13px;font-size:15px;outline:none}
.field input:focus{border-color:#4a5670;box-shadow:0 0 0 3px rgba(224,178,90,.08)}
.pw-wrap{position:relative}
.pw-wrap input{padding-right:52px}
.pw-toggle{position:absolute;right:6px;top:5px;height:36px;width:44px;border:0;background:transparent;color:var(--muted);font-size:12px;cursor:pointer}
.btn{width:100%;height:47px;border:0;border-radius:11px;background:linear-gradient(145deg,#e8c07a,#d09b3f);color:#23190a;font-weight:700;font-size:15px;cursor:pointer}
.btn:active{transform:translateY(1px)}
.btn[disabled]{opacity:.6;cursor:default}
.form-msg{min-height:18px;font-size:12.5px;color:var(--danger);margin:2px 0 10px}
.login-foot{margin-top:18px;text-align:center;font-size:12.5px;color:var(--muted)}

/* ---------- app shell ---------- */
.shell{display:flex;min-height:100vh;min-height:100dvh}
.sidebar{width:228px;flex:0 0 228px;background:var(--panel);border-right:1px solid var(--line);display:flex;flex-direction:column;transition:width .22s ease,flex-basis .22s ease;overflow:hidden}
.sidebar .side-brand{display:flex;align-items:center;gap:10px;padding:18px 16px;border-bottom:1px solid var(--line)}
.side-brand .brand-badge{width:36px;height:36px;border-radius:10px;font-size:15px}
.side-brand .txt{white-space:nowrap;font-size:14.5px;font-weight:600}
.side-brand .txt small{display:block;color:var(--muted);font-size:11px;font-weight:400;margin-top:2px}
.nav{flex:1;padding:12px 10px;overflow-y:auto;overflow-x:hidden}
.nav-item{display:flex;align-items:center;gap:11px;height:42px;padding:0 11px;border-radius:10px;color:#c6ccd8;font-size:13.5px;cursor:pointer;white-space:nowrap;margin-bottom:3px;border:0;background:transparent;width:100%;text-align:left}
.nav-item:hover{background:var(--panel2)}
.nav-item.active{background:var(--gold-soft);color:var(--gold)}
.nav-item .ico{width:19px;text-align:center;font-size:15px;flex:0 0 19px}
.side-foot{padding:10px 10px 14px;border-top:1px solid var(--line)}
.sidebar.collapsed{width:64px;flex-basis:64px}
.sidebar.collapsed .txt,.sidebar.collapsed .nav-item span.lbl,.sidebar.collapsed .side-foot .who{display:none}
.sidebar.collapsed .nav-item{justify-content:center;padding:0}
.sidebar.collapsed .side-brand{justify-content:center;padding:18px 8px}

.main{flex:1;min-width:0;display:flex;flex-direction:column}
.topbar{height:60px;display:flex;align-items:center;gap:12px;padding:0 20px;border-bottom:1px solid var(--line);background:rgba(14,16,20,.7);position:sticky;top:0;backdrop-filter:blur(8px);z-index:5}
.icon-btn{width:38px;height:38px;border-radius:10px;border:1px solid var(--line);background:var(--panel);color:var(--text);cursor:pointer;font-size:15px;display:flex;align-items:center;justify-content:center}
.page-title{font-size:15px;font-weight:600}
.topbar .spacer{flex:1}
.user-chip{display:flex;align-items:center;gap:8px;font-size:13px;color:#c9d0dc}
.avatar{width:30px;height:30px;border-radius:50%;background:#2a3240;display:flex;align-items:center;justify-content:center;font-size:12px;color:var(--gold)}
.content{padding:22px;max-width:1180px;width:100%}
.hidden{display:none!important}

.stats{display:grid;grid-template-columns:repeat(auto-fit,minmax(190px,1fr));gap:14px}
.stat{background:var(--panel);border:1px solid var(--line);border-radius:var(--radius);padding:18px}
.stat .k{font-size:12.5px;color:var(--muted)}
.stat .v{font-size:24px;font-weight:700;margin-top:8px;letter-spacing:.5px}
.stat .sub{font-size:11.5px;color:var(--muted);margin-top:6px}
.panel{background:var(--panel);border:1px solid var(--line);border-radius:var(--radius);padding:18px;margin-top:16px}
.panel h3{margin:0 0 14px;font-size:14px;font-weight:600}
.placeholder{color:var(--muted);font-size:13.5px;line-height:1.8;padding:26px 6px}

/* mobile drawer */
.overlay{position:fixed;inset:0;background:rgba(0,0,0,.5);z-index:20;opacity:0;pointer-events:none;transition:opacity .2s}
.overlay.show{opacity:1;pointer-events:auto}
@media (max-width:860px){
  .sidebar{position:fixed;left:0;top:0;bottom:0;z-index:30;transform:translateX(-100%);width:232px;flex-basis:232px}
  .sidebar.open{transform:none}
  .sidebar.collapsed{width:232px;flex-basis:232px}
  .sidebar.collapsed .txt,.sidebar.collapsed .nav-item span.lbl,.sidebar.collapsed .side-foot .who{display:block}
  .sidebar.collapsed .nav-item{justify-content:flex-start;padding:0 11px}
  .content{padding:16px}
}

/* ---------- tables ---------- */
.tables-head{display:flex;align-items:center;justify-content:space-between;gap:12px;margin-bottom:14px;flex-wrap:wrap}
.tables-sum{display:flex;gap:8px;flex-wrap:wrap}
.pill{font-size:12px;padding:6px 11px;border-radius:999px;border:1px solid var(--line);background:var(--panel);color:var(--muted)}
.pill b{color:var(--text);font-weight:600}
.pill.free b{color:var(--ok)}
.pill.busy b{color:var(--gold)}
.ghost-btn{height:34px;padding:0 14px;border-radius:9px;border:1px solid var(--line);background:var(--panel);color:#cfd6e2;font-size:13px;cursor:pointer}
.ghost-btn:hover{border-color:#3a4356}
.tables-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(150px,1fr));gap:12px}
.table-card{position:relative;background:var(--panel);border:1px solid var(--line);border-radius:14px;padding:16px;cursor:pointer;transition:border-color .15s,transform .1s}
.table-card:hover{border-color:#3a4356}
.table-card:active{transform:scale(.99)}
.table-card .tname{font-size:19px;font-weight:700;letter-spacing:.5px}
.table-card .tcode{font-size:11.5px;color:var(--muted);margin-top:3px}
.table-card .tfoot{display:flex;align-items:center;justify-content:space-between;margin-top:14px;font-size:12px;color:var(--muted)}
.table-card .dot{width:7px;height:7px;border-radius:50%;display:inline-block;margin-right:6px;background:var(--ok)}
.table-card.busy{border-color:#4a3a1e;background:linear-gradient(160deg,#1e1a12,#161a21)}
.table-card.busy .dot{background:var(--gold)}
.table-card .amt{color:var(--gold);font-weight:600}
.table-card.selected{border-color:var(--gold)}
@media (max-width:520px){.tables-grid{grid-template-columns:repeat(2,1fr);gap:10px}.table-card{padding:13px}.table-card .tname{font-size:17px}}

/* ---------- topone floor plan ---------- */
.zone-tabs{display:flex;gap:8px}
.zone-tab{height:34px;padding:0 14px;border-radius:9px;border:1px solid var(--line);background:var(--panel);color:var(--muted);font-size:13px;cursor:pointer}
.zone-tab.active{background:var(--gold-soft);color:var(--gold);border-color:#4a3a1e}
.floor-card{background:var(--panel);border:1px solid var(--line);border-radius:16px;padding:14px;margin-bottom:14px}
.floor-title{font-size:12.5px;color:var(--muted);margin-bottom:10px;letter-spacing:.5px}
.stage-bar{height:38px;border-radius:9px;background:linear-gradient(90deg,#3a2f1c,#4a3a1e);color:var(--gold);display:flex;align-items:center;justify-content:center;font-size:12px;letter-spacing:3px;font-weight:600;margin-bottom:10px}
.fp-row{display:flex;gap:8px;align-items:flex-start}
.fp-col{display:flex;flex-direction:column;gap:6px;width:76px}
.fp-mid{flex:1;display:flex;flex-direction:column;gap:6px}
.fp-line{display:flex;gap:6px}
.fp-cell{flex:1;min-height:44px;border-radius:9px;border:1px solid var(--line);background:#12161d;display:flex;align-items:center;justify-content:center;font-size:12.5px;color:#cfd6e2;cursor:pointer;padding:4px;text-align:center}
.fp-cell:hover{border-color:#3a4356}
.fp-cell.busy{border-color:#4a3a1e;color:var(--gold);background:#1e1a12}
.fp-cell.selected{border-color:var(--gold)}
.fp-cell.empty{opacity:.25;cursor:default}
.fp-bottom{display:flex;gap:6px;margin-top:8px}
.fp2{display:flex;gap:10px;align-items:stretch}
.fp2-left,.fp2-right{flex:1;display:flex;flex-direction:column;gap:6px}
.fp-divider{width:26px;display:flex;align-items:center;justify-content:center;color:var(--muted);font-size:10px;line-height:1.6;text-align:center;border-left:1px dashed #2a2f3a;border-right:1px dashed #2a2f3a}
@media (max-width:640px){.fp-col{width:58px}.fp-cell{min-height:38px;font-size:11px}.fp-divider{width:16px;font-size:9px}}

/* ---------- responsive hardening ---------- */
html,body{max-width:100%;overflow-x:hidden}
img,svg{max-width:100%}
.content{width:100%;max-width:1180px;padding:clamp(12px,3vw,22px)}
.login-card{max-width:min(380px,92vw)}
.login-wrap{padding:clamp(14px,4vw,24px)}
.brand h1{font-size:clamp(15px,4.2vw,17px)}
.topbar{height:auto;min-height:58px;padding:8px clamp(12px,3vw,20px);flex-wrap:wrap}
.page-title{font-size:clamp(14px,3.6vw,15px)}
.user-chip{max-width:45vw}
.user-chip span{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.stats{grid-template-columns:repeat(auto-fit,minmax(clamp(140px,42vw,190px),1fr));gap:clamp(10px,2.4vw,14px)}
.stat{padding:clamp(13px,3vw,18px)}
.stat .v{font-size:clamp(20px,5.6vw,24px)}
.tables-grid{grid-template-columns:repeat(auto-fill,minmax(clamp(120px,42vw,150px),1fr))}
.table-card{padding:clamp(12px,3vw,16px)}
.table-card .tname{font-size:clamp(15px,4.4vw,19px)}
.tables-head{gap:clamp(8px,2vw,12px)}
.zone-tab{height:34px;padding:0 clamp(10px,2.6vw,14px);font-size:clamp(12px,3.4vw,13px)}
.floor-card{padding:clamp(10px,2.8vw,14px);overflow-x:auto}
.fp-row{gap:clamp(4px,1.4vw,8px);min-width:0}
.fp-col{width:clamp(50px,13vw,76px)}
.fp-mid{min-width:0}
.fp-line{gap:clamp(4px,1.2vw,6px)}
.fp-cell{min-height:clamp(34px,9vw,44px);font-size:clamp(10px,2.7vw,12.5px);padding:2px}
.stage-bar{height:clamp(30px,8vw,38px);font-size:clamp(10px,2.8vw,12px);letter-spacing:clamp(1px,.6vw,3px)}
.fp2{gap:clamp(6px,1.6vw,10px)}
.fp-divider{width:clamp(14px,4vw,26px);font-size:clamp(8px,2.2vw,10px)}
@media (max-width:860px){
  .sidebar{width:min(280px,86vw);flex-basis:min(280px,86vw)}
  .sidebar.collapsed{width:min(280px,86vw);flex-basis:min(280px,86vw)}
}
@media (max-width:520px){
  .tables-grid{grid-template-columns:repeat(2,1fr);gap:10px}
  .table-card .tcode{font-size:10.5px}
  .table-card .tfoot{font-size:11px;margin-top:10px}
  .user-chip span{display:none}
  .tables-sum .pill{font-size:11px;padding:5px 9px}
  .ghost-btn{height:32px;padding:0 11px;font-size:12px}
  .fp2-left,.fp2-right{gap:5px}
}
@media (max-width:400px){
  .tables-grid{grid-template-columns:1fr}
  .fp-col{width:clamp(44px,12vw,56px)}
}
@media (min-width:1440px){.content{max-width:1320px}}
