:root{--pine: #17433a;--pine-deep: #0f2f29;--on-pine: #e9f1ed;--on-pine-dim: #a9c2b9;--brass: #b08a3c;--brass-strong: #8a6a24;--ink: #18211f;--muted: #55635f;--rule: #cdd4ce;--paper: #edf0ec;--surface: #fbfcfa;--primary: #17433a;--on-primary: #fff;--danger: #a3302a;--danger-bg: #f9e9e6;--warn-bg: #f8efd8;--warn-ink: #5e4610;--info-bg: #e5eaf5;--info-ink: #27397a;--ok-bg: #dfeee7;--ok-ink: #17503f;--mute-bg: #e4e7e4;--mute-ink: #4b5552;--occupied: #2b3f7a;--dirty: #e4bb56;--dirty-line: #cfa134;--dirty-ink: #33280a;--maint: #566064;--maint-line: #626c70;--serif: "Songti SC", "STSong", "Noto Serif CJK SC", "Source Han Serif SC", "SimSun", serif;--sans: "PingFang SC", "Microsoft YaHei", "Noto Sans CJK SC", "Source Han Sans SC", system-ui, sans-serif}@media(prefers-color-scheme:dark){:root:not([data-theme=light]){--pine: #123229;--pine-deep: #0c241e;--brass: #c9a558;--brass-strong: #d9b76c;--ink: #e5ebe7;--muted: #9eaca6;--rule: #36433e;--paper: #141b19;--surface: #1b2421;--primary: #5fae98;--on-primary: #08201a;--danger: #ef8d84;--danger-bg: #3a1e1b;--warn-bg: #362b12;--warn-ink: #eed48f;--info-bg: #1f2848;--info-ink: #b9c6f2;--ok-bg: #16322a;--ok-ink: #a4dcc8;--mute-bg: #2a3330;--mute-ink: #b6c0bc;--occupied: #3b52a0;--dirty: #d6ab46;--dirty-line: #c29a3a;--maint: #4e585c;--maint-line: #5a6468}}*{box-sizing:border-box}html{-webkit-text-size-adjust:100%}body{margin:0;background:var(--paper);color:var(--ink);font:15px/1.6 var(--sans);font-variant-numeric:tabular-nums}h1,h2,h3{font-family:var(--serif);font-weight:700;line-height:1.3;margin:0}h1{font-size:26px}h2{font-size:18px}h3{font-size:15px;margin:18px 0 8px}p{margin:0 0 8px}a{color:var(--primary)}.muted{color:var(--muted)}.pad{padding:24px}.sr-only{position:absolute;width:1px;height:1px;overflow:hidden;clip-path:inset(50%);white-space:nowrap}:focus-visible{outline:2px solid var(--brass);outline-offset:2px}.shell{display:grid;grid-template-columns:196px minmax(0,1fr);min-height:100vh}.side{background:var(--pine);color:var(--on-pine);display:flex;flex-direction:column;padding:env(safe-area-inset-top,0px) 0 env(safe-area-inset-bottom,0px);position:sticky;top:0;height:100vh;overflow-y:auto}.brand{display:flex;align-items:center;gap:10px;padding:20px;font:700 18px var(--serif);color:inherit;text-decoration:none}.side ul{list-style:none;margin:0;padding:0;flex:1}.side li a{display:block;padding:9px 20px;color:var(--on-pine-dim);text-decoration:none;border-left:3px solid transparent}.side li a:hover{color:#fff;background:var(--pine-deep)}.side li a[aria-current=page]{color:#fff;background:var(--pine-deep);border-left-color:var(--brass)}.side :focus-visible{outline-color:#e6c678;outline-offset:-2px}.who{padding:16px 20px;display:flex;flex-direction:column;font-size:14px;border-top:1px solid var(--pine-deep)}.who-role{color:var(--on-pine-dim);font-size:13px}.btn-link{all:unset;cursor:pointer;margin-top:8px;color:var(--on-pine);text-decoration:underline;font-size:13px;width:fit-content}.btn-link:focus-visible{outline:2px solid #e6c678;outline-offset:2px}.main{padding:calc(24px + env(safe-area-inset-top,0px)) 28px 48px;min-width:0;max-width:1360px}.page-head{display:flex;flex-wrap:wrap;align-items:flex-end;justify-content:space-between;gap:12px;margin-bottom:18px}.page-head p{margin:2px 0 0}.actions,.row-actions{display:flex;flex-wrap:wrap;gap:8px;align-items:center}.btn{display:inline-flex;align-items:center;justify-content:center;font:inherit;font-size:14px;padding:6px 14px;min-height:36px;border:1px solid var(--primary);border-radius:3px;background:transparent;color:var(--primary);cursor:pointer;text-decoration:none;white-space:nowrap}.btn:hover:not(:disabled){background:var(--ok-bg)}.btn:disabled{opacity:.5;cursor:not-allowed}.btn-primary{background:var(--primary);color:var(--on-primary)}.btn-primary:hover:not(:disabled){background:var(--primary);filter:brightness(1.15)}.btn-danger{background:var(--danger);border-color:var(--danger);color:#fff}.btn-danger:hover:not(:disabled){background:var(--danger);filter:brightness(1.1)}.btn-quiet{border-color:var(--rule);color:var(--ink)}.btn-quiet:hover:not(:disabled){background:var(--mute-bg)}.btn-small{min-height:30px;padding:2px 10px;font-size:13px}.btn-block{width:100%;margin-top:12px}.tag{display:inline-block;padding:0 8px;border-radius:2px;font-size:13px;white-space:nowrap;font-family:var(--sans);font-weight:400}.tag-ok{background:var(--ok-bg);color:var(--ok-ink)}.tag-info{background:var(--info-bg);color:var(--info-ink)}.tag-warn{background:var(--warn-bg);color:var(--warn-ink)}.tag-mute{background:var(--mute-bg);color:var(--mute-ink)}.key-hole{display:inline-block;width:14px;height:14px;border-radius:50%;background:var(--paper);border:2px solid var(--brass);flex:none}.today-line{display:flex;flex-wrap:wrap;gap:8px 24px;align-items:baseline;margin-bottom:14px}.today-line b{font:700 22px var(--serif);margin-left:2px}.legend{display:flex;flex-wrap:wrap;gap:4px;margin-left:auto}.legend-item{font:inherit;font-size:13px;color:var(--ink);background:none;border:1px solid transparent;border-radius:3px;padding:3px 8px;cursor:pointer;display:inline-flex;align-items:center;gap:6px}.legend-item:hover{border-color:var(--rule)}.legend-item.on{border-color:var(--ink)}.swatch{width:14px;height:14px;border-radius:2px;border:1px solid var(--rule);display:inline-block;padding:0}.dash-grid{display:grid;grid-template-columns:minmax(0,1fr) 280px;gap:28px;align-items:start}.rail-row{display:grid;grid-template-columns:58px minmax(0,1fr);gap:4px;padding:6px 0 14px}.rail-label{font:700 15px var(--serif);margin:12px 0 0;color:var(--muted)}.rail{list-style:none;margin:0;padding:0;display:flex;flex-wrap:wrap;row-gap:10px}.rail li{position:relative;padding:0 6px}.rail li:before{content:"";position:absolute;left:0;right:0;top:19px;height:3px;background:var(--brass)}.rail li.dim .key{opacity:.25}.key{position:relative;display:flex;flex-direction:column;align-items:center;width:104px;min-height:142px;padding:34px 6px 10px;text-align:center;text-decoration:none;border-radius:40px 40px 8px 8px;border:1px solid var(--primary);background:var(--surface);color:var(--ink);line-height:1.3}.key:hover{box-shadow:0 3px 0 var(--brass)}.key .key-hole{position:absolute;top:13px;left:50%;margin-left:-7px;box-shadow:inset 0 0 0 3px var(--paper);background:var(--brass)}.key-no{font:700 25px var(--serif);letter-spacing:.02em}.key-state{font-size:13px;font-weight:600;margin:2px 0 3px}.key-note{font-size:12px;max-width:92px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.key-vacant{background:var(--surface);border-color:var(--primary)}.key-occupied{background:var(--occupied);border-color:var(--occupied);color:#fff}.key-dirty{background:repeating-linear-gradient(135deg,var(--dirty) 0 7px,var(--dirty-line) 7px 9px);border-color:var(--dirty-line);color:var(--dirty-ink)}.key-maintenance{background:repeating-linear-gradient(45deg,var(--maint) 0 4px,var(--maint-line) 4px 8px),var(--maint);border-color:var(--maint);color:#fff}.todo section{padding:12px 0;border-top:2px solid var(--ink);margin-bottom:8px}.todo .todo-alert{border-top-color:var(--danger)}.todo-alert h2{color:var(--danger)}.todo h2{font-size:16px;margin-bottom:6px}.todo ul{list-style:none;margin:0;padding:0}.todo li{display:flex;justify-content:space-between;gap:8px;padding:4px 0;font-size:14px;flex-wrap:wrap}.todo li .muted{font-size:13px}.table-wrap{overflow-x:auto;background:var(--surface);border:1px solid var(--rule)}table{width:100%;border-collapse:collapse}th{text-align:left;font-size:13px;font-weight:600;color:var(--muted);white-space:nowrap;border-bottom:1px solid var(--ink)}th,td{padding:8px 12px}td{border-bottom:1px solid var(--rule)}tr:last-child td{border-bottom:0}.num{text-align:right;white-space:nowrap}.empty{text-align:center;padding:24px}.pager{display:flex;justify-content:flex-end;align-items:center;gap:10px;padding:10px 0;font-size:14px}.filters{display:flex;flex-wrap:wrap;gap:8px 14px;align-items:flex-end;margin-bottom:14px}.filters .field{margin:0;min-width:130px}.filter-actions{display:flex;gap:8px}.field{margin-bottom:12px;min-width:0}.field label{display:block;font-size:13px;font-weight:600;margin-bottom:3px}.req{color:var(--danger)}input:not([type=checkbox]):not([type=radio]),select,textarea{width:100%;font:inherit;color:var(--ink);background:var(--surface);border:1px solid #8f9b95;border-radius:3px;padding:6px 9px;min-height:36px}input:disabled,select:disabled{background:var(--mute-bg);color:var(--muted)}.field-bad input,.field-bad select,.field-bad textarea{border-color:var(--danger)}.field-check label{font-weight:400;font-size:14px;display:flex;gap:8px;align-items:center}.hint{font-size:13px;color:var(--muted);margin:3px 0 0}.err{font-size:13px;color:var(--danger);margin:3px 0 0}.inline{display:inline-flex;align-items:center;gap:8px;font-size:13px;white-space:nowrap}.form-page{max-width:880px}.form-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(240px,1fr));gap:0 18px}.guests{border:1px solid var(--rule);background:var(--surface);padding:12px 14px;margin:8px 0 14px;min-width:0}.guests legend{font:700 15px var(--serif);padding:0 6px}.guest-row{display:grid;grid-template-columns:repeat(4,minmax(0,1fr)) auto auto;gap:10px;align-items:end;padding-bottom:8px;margin-bottom:8px;border-bottom:1px solid var(--rule)}.guest-row .field{margin:0}.primary-pick{font-size:13px;white-space:nowrap;padding-bottom:8px}.quote{font-size:15px}.quote b{font-family:var(--serif);font-size:18px}.banner{display:flex;justify-content:space-between;gap:12px;flex-wrap:wrap;padding:10px 14px;margin:0 0 14px;border-left:4px solid;font-size:14px}.banner p{margin:2px 0 0}.banner-error{background:var(--danger-bg);border-color:var(--danger)}.banner-warn{background:var(--warn-bg);border-color:var(--brass);color:var(--warn-ink)}.banner-info{background:var(--info-bg);border-color:var(--occupied)}.modal{border:0;border-top:4px solid var(--brass);padding:20px 22px;width:min(460px,calc(100vw - 24px));max-height:90vh;background:var(--surface);color:var(--ink);box-shadow:0 16px 40px #0a1e1959}.modal::backdrop{background:#0a1e1973}.modal h2{margin-bottom:12px}.intro{font-size:14px;color:var(--muted)}.dlg-actions{display:flex;justify-content:flex-end;gap:8px;margin-top:16px}.facts{display:flex;flex-wrap:wrap;gap:10px 28px;margin:0 0 18px}.facts dt{font-size:13px;color:var(--muted)}.facts dd{margin:0;font-weight:600}.section{margin-top:22px}.section-head{display:flex;justify-content:space-between;align-items:center;gap:10px;margin-bottom:8px;flex-wrap:wrap}.folio{display:grid;grid-template-columns:minmax(0,1fr) 300px;gap:28px;align-items:start}.panel{position:sticky;top:16px;background:var(--surface);border:1px solid var(--rule);border-top:4px solid var(--brass);padding:14px 16px 16px}.panel h2{margin-bottom:10px}.panel-alert{border-top-color:var(--danger)}.panel .banner{margin-top:12px;margin-bottom:0}.ledger{margin:10px 0 0}.ledger>div{display:flex;justify-content:space-between;gap:12px;padding:4px 0}.ledger dd{margin:0;white-space:nowrap}.ledger-total{border-top:1px solid var(--ink);font-weight:600;margin-top:4px;padding-top:7px!important}.ledger-balance{border-top:3px double var(--ink);margin-top:6px;padding-top:8px!important;font:700 19px var(--serif);color:var(--danger)}.ledger-balance.zero{color:var(--ok-ink)}.bill{margin-top:8px;background:var(--surface);border:1px solid var(--rule);padding:16px 18px;max-width:760px}.bill .ledger{max-width:420px;margin-left:auto;margin-top:14px}.report{display:flex;flex-wrap:wrap;gap:14px 36px;margin:0 0 8px;padding:14px 0;border-top:2px solid var(--ink);border-bottom:1px solid var(--rule);align-items:flex-end}.report dt{font-size:13px;color:var(--muted)}.report dd{margin:0;font:700 21px var(--serif)}.report-lead dd{font-size:38px;line-height:1.1}.login{min-height:100vh;display:grid;place-items:center;padding:20px;background:var(--pine)}.login-card{position:relative;width:min(370px,100%);background:var(--surface);border-radius:80px 80px 10px 10px;padding:66px 30px 30px;box-shadow:0 0 0 6px var(--pine-deep)}.login-card h1{font-size:23px;text-align:center;margin-bottom:22px}.login-hole{position:absolute;top:22px;left:50%;margin-left:-12px;width:24px;height:24px;background:var(--pine);border-width:3px}.demo-box{margin-top:16px;padding-top:12px;border-top:1px solid var(--rule);display:flex;flex-wrap:wrap;gap:6px}.demo-box p{width:100%;font-size:13px}.toasts{position:fixed;right:18px;bottom:calc(18px + env(safe-area-inset-bottom,0px));display:flex;flex-direction:column;gap:8px;z-index:50;max-width:min(420px,calc(100vw - 36px))}.toasts p{margin:0;background:var(--ink);color:var(--surface);padding:9px 14px;border-radius:3px;font-size:14px}@media(max-width:1080px){.dash-grid,.folio{grid-template-columns:minmax(0,1fr)}.panel{position:static}}@media(max-width:760px){.shell{grid-template-columns:minmax(0,1fr)}.side{position:sticky;top:0;z-index:20;height:auto;flex-direction:row;align-items:center;overflow-x:auto}.brand{padding:10px 12px;white-space:nowrap;font-size:15px}.side ul{display:flex;flex:none}.side li a{padding:12px 10px;white-space:nowrap;border-left:0;border-bottom:3px solid transparent}.side li a[aria-current=page]{border-bottom-color:var(--brass)}.who{flex-direction:row;gap:8px;align-items:center;border:0;white-space:nowrap;padding:0 12px}.btn-link{margin:0}.main{padding:16px 14px 40px}.guest-row{grid-template-columns:repeat(2,minmax(0,1fr))}.rail-row{grid-template-columns:minmax(0,1fr)}.rail-label{margin:0 0 4px 6px}.legend{margin-left:0}.filters .field{flex:1 1 140px}}@media(prefers-reduced-motion:reduce){*{scroll-behavior:auto!important;transition:none!important;animation:none!important}}@media print{:root{color-scheme:light}body{background:#fff;color:#000}.no-print,.no-print-if-bill{display:none!important}.shell{display:block}.main{padding:0;max-width:none}.bill{border:0;padding:0;max-width:none;background:#fff}.table-wrap{border:0;background:#fff}.page-head .tag{display:none}}
