:root{--bg:#0f1115;--card:#1a1d24;--line:#2a2e38;--txt:#e7e9ee;--sub:#9aa3b2;--ok:#22c55e;--bad:#ef4444;--occ:#3b82f6;--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;--frame-vacant:#34d399;--frame-leaving:#ffffff}[data-theme=light]{--bg:#eef1f5;--card:#ffffff;--line:#d2d8e0;--txt:#1a1d24;--sub:#5b6472}[data-theme=light] .rate .bar{background:#e2e6ec}[data-theme=light] .fitem.ev-out,[data-theme=light] .fm-row.ev-out,[data-theme=light] .roomtip .rt-text{color:#dc2626}[data-theme=light] .fitem.ev-clean,[data-theme=light] .fm-row.ev-clean{color:#b45309}[data-theme=light] .roomtip .rt-mark{color:#0e7490}[data-theme=light] .meta .upd .auto{color:#059669}[data-theme=light] .feedcard .fmore{color:#2563eb}[data-theme=light] .lg.on{box-shadow:0 0 0 2px #1a1d24,0 0 7px #1a1d2466}[data-theme=light] .rm.stay.leaving{box-shadow:0 0 0 2px #1a1d24}*{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;border-bottom:1px solid var(--line);padding:calc(12px + env(safe-area-inset-top,0px)) 14px 12px}.back{flex:1;display:flex;align-items:center;gap:6px;background:none;border:0;color:var(--txt);cursor:pointer;text-align:left;padding:8px 6px;min-height:44px;font:inherit}.back:active{opacity:.55}.back .bk{font-size:26px;line-height:1;flex:0 0 auto}.back .bk-title{font-size:17px;font-weight:700}.title{flex:1;font-size:17px;font-weight:700}.meta{display:flex;align-items:center;gap:8px;color:var(--sub);font-size:13px}.meta .upd{display:flex;flex-direction:column;align-items:flex-end;line-height:1.15}.meta .upd .auto{font-size:10px;color:#34d399;font-style:normal}.refresh{background:none;border:0;font-size:18px;cursor:pointer}.theme{background:none;border:0;font-size:18px;cursor:pointer;padding:0;line-height:1}.refresh:disabled{cursor:default;opacity:.85}.refresh.spinning{animation:spin .8s linear infinite;display:inline-block}@keyframes spin{0%{transform:rotate(0)}to{transform:rotate(360deg)}}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:8px}.tabs .tab{flex:1;padding:7px;border:1px solid var(--line);border-radius:10px;background:var(--card);color:var(--sub);font-size:19px;font-weight:700;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:6px}.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)}.num.dueout b{color:var(--c-checkout)}.hero.hero-feed .num{flex:0 0 auto;min-width:72px;padding:7px 8px}.hero.hero-feed .num b{font-size:32px}.hero.hero-feed .num span{font-size:14px;margin-top:3px}.feedcard{flex:1;min-width:0;background:var(--card);border:1px solid var(--line);border-radius:14px;padding:7px 11px;text-align:left;display:flex;flex-direction:column;gap:0;overflow:hidden}.feedcard .fh{font-size:14px;color:var(--sub);margin-bottom:2px}.feedcard .fitem{font-size:15px;font-weight:700;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;font-variant-numeric:tabular-nums;line-height:1.3}.fitem.ev-out,.fm-row.ev-out{color:#ff6b6b}.fitem.ev-clean,.fm-row.ev-clean{color:#f5b942}.feedcard .fitem .ft{opacity:.8;margin-right:7px}.feedcard .fempty{font-size:14px;color:var(--sub);padding:6px 0}.feedcard .fmore{margin-top:3px;align-self:flex-start;font-size:14px;color:#7fb1ff;background:none;border:0;padding:0;cursor:pointer}.feedmodal{position:fixed;top:0;right:0;bottom:0;left:0;background:#0009;z-index:60;display:flex;align-items:flex-end;justify-content:center}.feedmodal .fm-box{background:var(--card);border:1px solid var(--line);border-radius:16px 16px 0 0;width:100%;max-width:560px;max-height:75vh;overflow:auto;padding:14px 16px 22px}.feedmodal .fm-head{display:flex;justify-content:space-between;align-items:center;margin-bottom:6px;font-size:13px}.feedmodal .fm-x,.roomtip .rt-x{background:none;border:0;color:var(--sub);font-size:18px;cursor:pointer}.feedmodal .fm-row{display:flex;gap:10px;padding:2px;font-size:15px;font-weight:700;font-variant-numeric:tabular-nums;line-height:1.3}.feedmodal .fm-row .ft{opacity:.8;min-width:48px;font-weight:600}.feedmodal .fm-row .fr{min-width:52px}.rm{cursor:pointer}.roomtip-mask{position:fixed;top:0;right:0;bottom:0;left:0;background:#00000073;z-index:60;display:flex;align-items:center;justify-content:center}.roomtip{background:var(--card);border:1px solid var(--line);border-radius:14px;padding:14px 18px;display:flex;align-items:center;gap:12px;box-shadow:0 8px 30px #00000080}.roomtip .rt-room{font-size:22px;font-weight:800;color:var(--txt)}.roomtip .rt-lines{display:flex;flex-direction:column;gap:4px;align-items:flex-start}.roomtip .rt-text{font-size:16px;color:#ff6b6b;font-weight:700}.roomtip .rt-mark{font-size:15px;color:#67e8f9;font-weight:700}.rate{font-size:14px;color:var(--sub);margin-bottom:6px}.rate .bar{margin-top:3px;height:6px;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{position:relative;min-width:48px;text-align:center;padding:6px 8px;border-radius:8px;font-size:13px;font-weight:600;color:#fff}.rm-dot{position:absolute;left:1px;width:7px;height:7px;border-radius:50%;box-shadow:0 0 0 1px #fff,0 0 2px #00000073;pointer-events:none}.rm-dot.sw-card{top:1px;background:#22c55e}.rm-dot.sw-dnd{bottom:1px;background:#ef4444}.rm-dot.sw-clean{bottom:1px;background:#facc15}.rm-dot.sw-wentout{left:auto;right:1px;top:1px;background:#f5b942}.rm-dot.sw-mark{left:auto;right:1px;bottom:1px;background:#22d3ee}.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-restout{display:block;font-size:10px;font-weight:700;line-height:1.15;margin-top:1px;letter-spacing:.3px}.rm.cleaning{background:var(--c-cleaning);color:#ffe6c7}.rm.vacant{background:var(--c-vacant);color:#fff;font-weight:800;box-shadow:0 0 0 2px var(--frame-vacant),0 0 9px var(--frame-vacant)}.rm.stay.leaving{box-shadow:0 0 0 2px var(--frame-leaving)}.hint{margin-top:14px;color:var(--sub);font-size:12px}.legend{display:grid;grid-template-columns:repeat(5,1fr);gap:3px;margin-top:6px;padding-top:6px;border-top:1px solid var(--line)}.lg{display:flex;align-items:center;justify-content:center;gap:5px;border:1px solid transparent;font:inherit;font-size:14px;font-weight:700;padding:3px 4px;border-radius:999px;cursor:pointer;min-width:0;white-space:nowrap;color:#fff}.lg.on{box-shadow:0 0 0 2px #fff,0 0 8px #ffffff73;font-weight:800}.lg.sw-card,.lg.sw-dnd,.lg.sw-clean,.lg.sw-mark{background:#2a2e38;color:#d4dbe8}.lg.sw-card:before,.lg.sw-dnd:before,.lg.sw-clean:before,.lg.sw-mark:before{content:"";flex:0 0 auto;width:10px;height:10px;border-radius:50%;box-shadow:0 0 0 1px #fff}.lg.sw-card:before{background:#22c55e}.lg.sw-dnd:before{background:#ef4444}.lg.sw-clean:before{background:#facc15}.lg.sw-mark:before{background:#22d3ee}.markfind{display:flex;align-items:center;gap:6px;margin:8px 0 2px}.markfind-i{flex:1;min-width:0;background:var(--card);border:1px solid #22d3ee;border-radius:10px;color:var(--txt);font:inherit;font-size:15px;padding:7px 10px;outline:none}.markfind-i::placeholder{color:var(--sub)}.markfind-x{flex:0 0 auto;background:none;border:0;color:var(--sub);font-size:18px;cursor:pointer;padding:2px 6px}.finfo{color:#8aa0ff;font-weight:700;margin-left:6px}.finfo-lite{margin:6px 0 2px;font-size:13px;font-weight:700;color:#8aa0ff}.rm.dim{opacity:.12;filter:grayscale(.5);box-shadow:none}.lg.stay{background:var(--c-stay)}.lg.new{background:var(--c-new)}.lg.last{background:var(--c-last)}.lg.checkout{background:var(--c-checkout);color:#1a1d24}.lg.rest{background:var(--c-rest)}.lg.cleaning{background:var(--c-cleaning);color:#ffe6c7}.lg.vacant{background:var(--c-vacant)}.menu{background:none;border:0;font-size:20px;cursor:pointer;color:var(--txt)}.logout-lite{background:none;border:1px solid var(--line);color:var(--sub);font:inherit;font-size:13px;font-weight:600;padding:4px 12px;border-radius:8px;cursor:pointer}.logout-lite:hover{background:var(--card);color:var(--txt)}.menupop{position:absolute;top:calc(52px + env(safe-area-inset-top,0px));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:calc(20px + env(safe-area-inset-bottom,0px));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}
