:root{--bg:#0f1115;--card:#1a1d24;--line:#2a2e38;--txt:#e7e9ee;--sub:#9aa3b2;--ok:#22c55e;--bad:#ef4444;--occ:#ef4444;--vac:#34d399;--last:#f59e0b;--new:#3b82f6;--checkout:#eab308;--c-stay:#ef4444;--c-new:#3b82f6;--c-last:#f59e0b;--c-checkout:#eab308;--c-cleaning:#8a5a2b;--c-vacant:#525a68;--c-rest:#8e24aa}*{box-sizing:border-box}body{margin:0;background:var(--bg);color:var(--txt);font-family:-apple-system,BlinkMacSystemFont,Microsoft JhengHei,PingFang TC,sans-serif;-webkit-font-smoothing:antialiased}button{font-family:inherit}header{position:sticky;top:0;z-index:10;background:var(--bg);display:flex;align-items:center;gap:8px;padding:12px 14px;border-bottom:1px solid var(--line)}.back{background:none;border:0;color:var(--txt);font-size:26px;line-height:1;cursor:pointer;padding:0 4px}.title{flex:1;font-size:17px;font-weight:700}.meta{display:flex;align-items:center;gap:8px;color:var(--sub);font-size:13px}.refresh{background:none;border:0;font-size:18px;cursor:pointer}main{padding:0}.loading,.err{color:var(--sub);text-align:center;padding:36px 0}.err{color:#f87171}.login-wrap{display:flex;align-items:center;justify-content:center;height:100vh}.login{background:var(--card);padding:28px;border-radius:14px;width:280px;text-align:center}.login h1{font-size:18px;margin:0 0 18px}.login input{width:100%;box-sizing:border-box;padding:12px;border-radius:8px;border:1px solid #333;background:var(--bg);color:var(--txt);font-size:16px}.login button{margin-top:14px;width:100%;padding:12px;border:0;border-radius:8px;background:#3b82f6;color:#fff;font-size:16px;cursor:pointer}.err-line{color:#f87171;font-size:14px;margin:0 0 8px}.home{display:grid;grid-template-columns:1fr 1fr;gap:10px;padding:14px}.card{border:2px solid var(--line);border-radius:14px;background:var(--card);padding:14px 10px;text-align:center;cursor:pointer;min-height:84px;color:var(--txt);display:flex;flex-direction:column;justify-content:center;gap:8px}.card.ok{border-color:var(--ok)}.card.bad{border-color:var(--bad)}.card .cn{font-size:17px;font-weight:700}.card .cc{font-size:15px}.card .cc .o{color:var(--occ);font-weight:800}.card .cc .r{color:var(--c-rest);font-weight:800}.card .cc .v{color:var(--vac);font-weight:800}.card .cc .sep{color:var(--sub);margin:0 4px}.card .badmsg{color:#f87171;font-size:13px}.detail{padding:16px 14px 24px}.tabs{display:flex;gap:8px;margin-bottom:14px}.tabs .tab{flex:1;padding:10px;border:1px solid var(--line);border-radius:10px;background:var(--card);color:var(--sub);font-size:15px;cursor:pointer}.tabs .tab.on{background:#3b82f6;border-color:#3b82f6;color:#fff;font-weight:700}.datebar{display:flex;align-items:center;justify-content:space-between;margin-bottom:14px}.datebar button{background:var(--card);border:1px solid var(--line);color:var(--txt);padding:8px 14px;border-radius:10px;font-size:14px;cursor:pointer}.datebar .d{font-size:18px;font-weight:700}table.avail{width:100%;border-collapse:collapse;font-size:14px;margin-top:4px}table.avail th,table.avail td{padding:8px 6px;text-align:center;border-bottom:1px solid var(--line)}table.avail th{color:var(--sub);font-weight:600;font-size:12px}table.avail .l{text-align:left}table.avail td.l{font-size:13px}table.avail td.l b{color:var(--new)}table.avail tr.has{background:#34d39914}table.avail td.rmn{color:var(--vac);font-weight:800;font-size:16px}.hero{display:flex;gap:10px;margin-bottom:14px}.num{flex:1;background:var(--card);border:1px solid var(--line);border-radius:14px;padding:16px 8px;text-align:center}.num b{display:block;font-size:34px;line-height:1.1;font-weight:800}.num span{display:block;margin-top:4px;font-size:13px;color:var(--sub)}.num.occ b{color:var(--occ)}.num.vac b{color:var(--vac)}.num.tot b{color:var(--txt)}.rate{font-size:14px;color:var(--sub);margin-bottom:18px}.rate .bar{margin-top:6px;height:10px;background:#2a2e38;border-radius:999px;overflow:hidden}.rate .bar i{display:block;height:100%;background:linear-gradient(90deg,#3b82f6,#ef4444)}.grid{display:flex;flex-direction:column;gap:10px}.floor{display:flex;align-items:flex-start;gap:10px}.fl{flex:0 0 36px;color:var(--sub);font-size:13px;padding-top:6px;font-weight:600}.rooms{display:flex;flex-wrap:wrap;gap:6px}.rm{min-width:48px;text-align:center;padding:6px 8px;border-radius:8px;font-size:13px;font-weight:600;color:#fff}.rm.stay{background:var(--c-stay)}.rm.new{background:var(--c-new)}.rm.last{background:var(--c-last)}.rm.checkout{background:var(--c-checkout);color:#1a1d24}.rm.rest{background:var(--c-rest);color:#fff}.rm.cleaning{background:var(--c-cleaning);color:#ffe6c7}.rm.vacant{background:var(--c-vacant);color:#e7e9ee;border:1px solid #6b7686}.hint{margin-top:14px;color:var(--sub);font-size:12px}.legend{display:flex;flex-wrap:wrap;gap:10px 14px;margin-top:18px;padding-top:14px;border-top:1px solid var(--line);font-size:12px;color:var(--sub)}.lg{display:flex;align-items:center;gap:5px}.lg:before{content:"";width:12px;height:12px;border-radius:3px;display:inline-block}.lg.stay:before{background:var(--c-stay)}.lg.new:before{background:var(--c-new)}.lg.last:before{background:var(--c-last)}.lg.checkout:before{background:var(--c-checkout)}.lg.rest:before{background:var(--c-rest)}.lg.cleaning:before{background:var(--c-cleaning)}.lg.vacant:before{background:var(--c-vacant);border:1px solid #6b7686}.menu{background:none;border:0;font-size:20px;cursor:pointer;color:var(--txt)}.menupop{position:absolute;top:52px;right:10px;z-index:30;background:var(--card);border:1px solid var(--line);border-radius:12px;padding:6px;min-width:150px;box-shadow:0 8px 24px #00000080;display:flex;flex-direction:column}.menupop .mu-name{padding:8px 12px;color:var(--sub);font-size:13px;border-bottom:1px solid var(--line);margin-bottom:4px}.menupop button{background:none;border:0;color:var(--txt);text-align:left;padding:10px 12px;font-size:15px;border-radius:8px;cursor:pointer}.menupop button:hover{background:var(--bg)}.menupop .mu-logout{color:#f87171}.legend.editing{gap:10px 16px}.lgedit{display:flex;align-items:center;gap:6px;color:var(--txt);font-size:13px}.lgedit input[type=color]{width:30px;height:24px;border:1px solid var(--line);border-radius:6px;background:none;padding:0;cursor:pointer}.cedit{display:flex;align-items:center;gap:10px;margin-top:14px;flex-wrap:wrap}.cedit button{padding:9px 16px;border:1px solid var(--line);border-radius:10px;background:var(--card);color:var(--txt);font-size:14px;cursor:pointer}.cedit button.primary{background:#3b82f6;border-color:#3b82f6;color:#fff;font-weight:700}.cedit button.danger{color:#f87171}.cedit button:disabled{opacity:.5;cursor:default}.cmsg{color:var(--sub);font-size:13px}.panel{padding:16px 14px 28px;max-width:560px;margin:0 auto}.panel h2{font-size:17px;margin:4px 0 14px}.panel>label{display:block;margin:10px 0;color:var(--sub);font-size:13px}.panel>label input[type=text],.panel>label input[type=password]{display:block;width:100%;margin-top:5px;padding:11px;border-radius:9px;border:1px solid var(--line);background:var(--bg);color:var(--txt);font-size:16px}.ok-line{color:#34d399;font-size:14px;margin:0 0 8px}.fieldset{border:1px solid var(--line);border-radius:12px;padding:12px;margin:14px 0}.fl-title{color:var(--sub);font-size:13px;margin-bottom:8px}.checks{display:flex;flex-wrap:wrap;gap:8px 16px}.chk{display:flex;align-items:center;gap:6px;color:var(--txt);font-size:14px;margin:4px 0}.chk input{width:18px;height:18px}.acc-head{display:flex;align-items:center;justify-content:space-between;gap:10px;margin-bottom:6px}.acc-head h2{margin:0}table.users{width:100%;border-collapse:collapse;font-size:14px;margin-top:10px}table.users th,table.users td{padding:10px 6px;border-bottom:1px solid var(--line);vertical-align:top}table.users th{color:var(--sub);font-weight:600;font-size:12px;text-align:left}table.users .l{text-align:left}table.users .small{font-size:12px;color:var(--txt)}table.users .muted{color:var(--sub)}table.users tr.off{opacity:.55}table.users .acts{white-space:nowrap;text-align:right}table.users .acts button{margin-left:6px;padding:6px 10px;border:1px solid var(--line);border-radius:8px;background:var(--card);color:var(--txt);font-size:13px;cursor:pointer}table.users .acts button.danger{color:#f87171}.tag{display:inline-block;margin-left:6px;padding:1px 7px;border-radius:999px;font-size:11px;background:#3a3f4b;color:#cbd2dd}.tag.me{background:#1e3a5f;color:#9ec5ff}.cpick{margin-top:16px;border-top:1px solid var(--line);padding-top:14px}.cpick-hint{color:var(--sub);font-size:12px;margin-bottom:10px}.crow{padding:10px 0;border-bottom:1px solid var(--line)}.crow-h{display:flex;align-items:center;gap:10px;margin-bottom:8px}.csw{width:26px;height:26px;border-radius:7px;border:1px solid #6b7686;flex:0 0 auto}.cname{font-size:14px;min-width:64px}.chex{width:104px;padding:7px 9px;border-radius:8px;border:1px solid var(--line);background:var(--bg);color:var(--txt);font-size:14px;font-family:ui-monospace,monospace}.pal{display:flex;flex-wrap:wrap;gap:7px}.pdot{width:30px;height:30px;border-radius:8px;border:2px solid transparent;cursor:pointer;padding:0}.pdot.on{border-color:#fff;box-shadow:0 0 0 2px #000 inset}.diagfab{position:fixed;right:16px;bottom:20px;z-index:40;display:inline-flex;align-items:center;gap:6px;padding:11px 18px;border-radius:999px;background:#f59e0b;color:#1a1a1a;text-decoration:none;font-size:15px;font-weight:800;box-shadow:0 4px 12px #0000008c;border:1px solid #fbbf24}
