*{box-sizing:border-box;margin:0;padding:0}
:root{
  --ink:#0c1733; --blue:#1b50c4; --blue2:#3b6fe0; --paper:#f5f7fb; --card:#fff;
  --mint:#0ea5a4; --amber:#f59e0b; --green:#16a34a; --taken:#cbd5e1; --line:#e6eaf2;
  --text:#1a2236; --muted:#6b7690;
}
body{font-family:-apple-system,"PingFang SC","Microsoft YaHei",Segoe UI,sans-serif;background:var(--paper);color:var(--text);padding-bottom:48px;-webkit-tap-highlight-color:transparent}
button{cursor:pointer;border:none;border-radius:10px;padding:9px 16px;font-size:14px;background:var(--blue);color:#fff;font-weight:500;transition:filter .15s,transform .05s}
button:hover{filter:brightness(1.06)} button:active{transform:translateY(1px)} button:disabled{opacity:.45;cursor:not-allowed}
button.ghost{background:#eef2fb;color:var(--blue)} button.amber{background:var(--amber)} button.warn{background:#ef4444} button.sm{padding:5px 12px;font-size:13px}
button.go{background:var(--mint);font-size:15px;padding:11px 22px}
select,input[type=time]{padding:8px 11px;border:1px solid var(--line);border-radius:10px;font-size:14px;background:#fff;color:var(--text)}
.muted{color:var(--muted);font-size:13px}

/* 顶栏 */
header{background:linear-gradient(120deg,var(--ink),var(--blue));color:#fff;padding:14px 20px;display:flex;align-items:center;justify-content:space-between;gap:12px}
.brand{display:flex;align-items:center;gap:12px}
.logo{width:40px;height:40px;border-radius:11px;background:rgba(255,255,255,.16);display:grid;place-items:center;font-size:22px;font-weight:700;border:1px solid rgba(255,255,255,.3)}
.ttl{font-size:18px;font-weight:700;letter-spacing:.5px} .sub2{font-size:12px;opacity:.8}
.hd-right{display:flex;align-items:center;gap:10px}
.status{font-size:13px;opacity:.92}
button.ghost{}.hd-right .ghost{background:rgba(255,255,255,.16);color:#fff}

/* 标签 */
.tabs{display:flex;background:var(--card);border-bottom:1px solid var(--line);position:sticky;top:0;z-index:5;overflow-x:auto}
.tabs button{flex:1;min-width:84px;background:none;color:var(--muted);border-radius:0;padding:13px 8px;font-size:15px;font-weight:500}
.tabs button.active{color:var(--blue);box-shadow:inset 0 -3px 0 var(--blue);font-weight:700}
.tab{display:none;padding:16px;max-width:920px;margin:0 auto}.tab.active{display:block}

/* 选座 */
.bar{display:flex;gap:10px;flex-wrap:wrap;align-items:center;margin-bottom:14px}
.bar label{display:flex;flex-direction:column;gap:4px;font-size:12px;color:var(--muted)}
.mapcard{background:var(--card);border:1px solid var(--line);border-radius:16px;padding:14px;box-shadow:0 6px 20px rgba(12,23,51,.05)}
#seatMapWrap{overflow:auto;min-height:140px}
#seatMap{width:100%;height:58vh}
.seat{cursor:pointer;transition:opacity .1s}
.seat.free{fill:var(--green)} .seat.taken{fill:var(--taken)} .seat.taken{cursor:default}
.seat.sel{fill:var(--blue);stroke:var(--ink);stroke-width:.6}
.seat.star{stroke:var(--amber);stroke-width:.8}
.legend{display:flex;gap:18px;flex-wrap:wrap;margin-top:12px;font-size:13px;color:var(--muted)}
.legend i{display:inline-block;width:12px;height:12px;border-radius:4px;vertical-align:-1px;margin-right:5px}
.dot.free{background:var(--green)}.dot.taken{background:var(--taken)}.dot.sel{background:var(--blue)}.dot.star{background:#fff;border:2px solid var(--amber)}
.actbar{display:flex;justify-content:space-between;align-items:center;margin-top:14px;background:var(--card);border:1px solid var(--line);padding:12px 14px;border-radius:14px;position:sticky;bottom:10px}
#picked{font-size:15px;font-weight:600;color:var(--text)} .btns{display:flex;gap:8px}

/* 蹲守面板 */
.panel{background:var(--card);border:1px solid var(--line);border-radius:16px;padding:16px;margin-bottom:14px;box-shadow:0 4px 16px rgba(12,23,51,.04)}
.panel.dark{background:var(--ink);color:#cdd7ee}.panel.dark .muted{color:#8b97b8}
.phead{display:flex;align-items:center;gap:10px;margin-bottom:6px}
.phead h3{font-size:16px}.phead .num{width:24px;height:24px;border-radius:50%;background:var(--blue);color:#fff;display:grid;place-items:center;font-size:13px;font-weight:700}
.phead button{margin-left:auto}
.sub{font-size:13px;font-weight:600;color:var(--muted);margin:14px 0 8px}
.inline{display:flex;align-items:center;gap:12px;flex-wrap:wrap;margin-top:8px}
.prio{list-style:none;display:flex;flex-direction:column;gap:7px}
.prio li{display:flex;align-items:center;gap:10px;background:#f8fafe;border:1px solid var(--line);border-radius:10px;padding:9px 12px;font-size:14px;cursor:grab}
.prio li.drag{opacity:.4} .prio li .grip{color:#aeb8cf;font-size:16px;cursor:grab}
.prio li .rank{width:22px;height:22px;border-radius:50%;background:var(--amber);color:#fff;display:grid;place-items:center;font-size:12px;font-weight:700}
.prio li .nm{flex:1} .prio li .x{background:#fde8e8;color:#c0392b;padding:3px 9px;border-radius:7px}
.chips{display:flex;gap:9px;flex-wrap:wrap}
.chip{display:inline-flex;align-items:center;gap:7px;background:#f1f5fc;border:1px solid var(--line);border-radius:22px;padding:7px 15px;font-size:14px;cursor:pointer;user-select:none}
.chip input{display:none} .chip.on{background:var(--blue);color:#fff;border-color:var(--blue)}
.chip .ord{display:inline-grid;place-items:center;width:18px;height:18px;border-radius:50%;background:#fff;color:var(--blue);font-size:11px;margin-right:6px}
.runbar{display:flex;align-items:center;gap:18px;flex-wrap:wrap;margin-top:16px;padding-top:14px;border-top:1px dashed var(--line)}
.sched{display:flex;align-items:center;gap:10px}
.switch{display:inline-flex;align-items:center;gap:8px;font-size:14px;cursor:pointer}
.switch input{display:none} .track{width:42px;height:24px;border-radius:14px;background:#cbd5e1;position:relative;transition:background .2s}
.track::after{content:"";position:absolute;top:3px;left:3px;width:18px;height:18px;border-radius:50%;background:#fff;transition:left .2s}
.switch input:checked+.track{background:var(--mint)} .switch input:checked+.track::after{left:21px}
.log{background:#0a1126;color:#7fe3d6;font-size:13.5px;line-height:1.65;padding:12px 14px;border-radius:10px;margin-top:10px;white-space:pre-wrap;min-height:170px;max-height:42vh;overflow:auto;font-family:ui-monospace,Menlo,Consolas,monospace}

/* 卡片列表 */
.cards{display:grid;grid-template-columns:repeat(auto-fill,minmax(220px,1fr));gap:12px}
.cards .card{background:var(--card);border:1px solid var(--line);border-radius:14px;padding:14px}
.cards .card h3{font-size:15px;margin-bottom:6px}
.cards .row{display:flex;justify-content:space-between;align-items:center;margin-top:10px}
.tag{font-size:12px;padding:3px 9px;border-radius:7px;background:#e7eefc;color:var(--blue)}

.toast{position:fixed;left:50%;bottom:28px;transform:translateX(-50%);background:var(--ink);color:#fff;padding:12px 22px;border-radius:12px;font-size:14px;opacity:0;transition:opacity .3s;pointer-events:none;z-index:50;max-width:90%;box-shadow:0 8px 30px rgba(0,0,0,.25)}
.toast.show{opacity:1}
@media(max-width:520px){#seatMap{height:50vh}.ttl{font-size:16px}}
.mask{position:fixed;inset:0;background:linear-gradient(135deg,var(--ink),var(--blue));display:flex;align-items:center;justify-content:center;z-index:100;padding:20px}
.loginbox{background:#fff;border-radius:18px;padding:30px 26px;width:100%;max-width:340px;display:flex;flex-direction:column;gap:12px;box-shadow:0 20px 60px rgba(0,0,0,.35)}
.loginbox .logo.big{width:54px;height:54px;border-radius:14px;background:var(--blue);color:#fff;font-size:28px;align-self:center}
.loginbox h2{text-align:center;font-size:18px;color:var(--ink);margin-bottom:4px}
.loginbox input{padding:12px 14px;border:1px solid var(--line);border-radius:10px;font-size:15px}
.loginbox input:focus{outline:none;border-color:var(--blue)}
.loginbox button{padding:12px;font-size:16px;border-radius:10px;margin-top:4px}
.err{color:#ef4444;font-size:13px;text-align:center;min-height:16px}
