:root{--cal-room: 132px;--brand-950: #071f1c;--brand-900: #0b2e2b;--brand-800: #10403b;--brand-700: #155a4f;--brand-600: #1b7a65;--brand-500: #23926f;--brand-200: #bfe6d6;--brand-100: #ddf1e8;--brand-50: #eef7f3;--bg: #f3f5f6;--panel: #ffffff;--panel2: #f6f8f9;--line: #e4e9eb;--line-2: #cfd8db;--text: #15201f;--text-2: #4a5957;--muted: #77878a;--accent: #1b7a65;--info: #2f6fe4;--info-bg: #e9f0fd;--good: #17915f;--good-bg: #e3f5ec;--warn: #b96a05;--warn-bg: #fff3df;--warn-line: #efb45a;--bad: #cf3f4a;--bad-bg: #fdecee;--bad-line: #f2c0c5;--r-ctl: 10px;--r-card: 14px;--r-sheet: 18px;--sh-card: 0 1px 2px rgba(16,24,40,.05), 0 1px 1px rgba(16,24,40,.03);--sh-float: 0 8px 24px rgba(16,24,40,.14);--sh-sheet: 0 -8px 32px rgba(16,24,40,.18);--font: "Segoe UI Variable Text", "Segoe UI", system-ui, -apple-system, Roboto, "Helvetica Neue", sans-serif;--mono: ui-monospace, "Cascadia Mono", "SF Mono", Menlo, Consolas, monospace}*{box-sizing:border-box}body{margin:0;background:var(--bg);color:var(--text);font:15px/1.45 var(--font);-webkit-font-smoothing:antialiased}a{color:var(--accent);text-decoration:none}h2{font-size:22px;font-weight:700;letter-spacing:-.01em;line-height:1.2;margin:0 0 12px}h3{font-size:18px;font-weight:650;line-height:1.3;margin:0 0 10px}code{font-family:var(--mono)}button{font:inherit;font-weight:600;font-size:14px;cursor:pointer;border:1px solid var(--line-2);background:var(--panel);color:var(--text);padding:0 14px;border-radius:var(--r-ctl);display:inline-flex;align-items:center;justify-content:center;gap:6px;white-space:nowrap;min-height:40px}button:hover{border-color:var(--brand-600)}button.primary{background:var(--brand-600);border-color:var(--brand-600);color:#fff}button.primary:hover{background:var(--brand-700);border-color:var(--brand-700)}button.ghost{background:transparent;border-color:var(--line-2);color:var(--text)}button.ghost:hover{background:var(--panel2);border-color:var(--line-2)}button.warn{border-color:var(--warn-line);color:var(--warn);background:var(--warn-bg)}button.warn:hover{border-color:var(--warn)}button:disabled{opacity:.5;cursor:not-allowed}input,select,textarea{font:inherit;background:var(--panel);color:var(--text);border:1px solid var(--line-2);border-radius:var(--r-ctl);padding:8px 12px;width:100%;min-height:40px;min-width:0}input:focus,select:focus,textarea:focus{outline:2px solid var(--brand-200);outline-offset:0;border-color:var(--brand-600)}input::placeholder{color:var(--muted)}input[type=checkbox]{min-height:0;width:18px;height:18px;accent-color:var(--brand-600)}label{display:block;font-size:13px;font-weight:600;color:var(--text-2);margin:10px 0 6px}.panel{background:var(--panel);border:1px solid var(--line);border-radius:var(--r-card);padding:16px;box-shadow:var(--sh-card)}.row{display:flex;gap:12px;flex-wrap:wrap;align-items:center}.grid{display:grid;gap:12px}.grid>*{min-width:0}.panel:has(>table){overflow-x:auto}.muted{color:var(--muted)}.muted.small,.small{font-size:12px}.pill{display:inline-flex;align-items:center;gap:6px;padding:2px 9px;border-radius:999px;font-size:12px;font-weight:600;background:var(--panel2);color:var(--text-2);white-space:nowrap}.pill:before{content:"";width:6px;height:6px;border-radius:50%;background:currentColor;flex:none}.pill.inhouse{background:var(--good-bg);color:var(--good)}.pill.confirmed{background:var(--info-bg);color:var(--info)}.pill.checkedout,.pill.past{background:var(--panel2);color:var(--muted)}.tag{font-size:11px;font-weight:600;color:var(--text-2);background:var(--panel2);border:1px solid var(--line);border-radius:6px;padding:1px 6px}.code{font-family:var(--mono);font-weight:700;font-size:28px;letter-spacing:.1em}.code.big{font-size:44px;letter-spacing:.12em;line-height:1.15}table{width:100%;border-collapse:collapse}th,td{text-align:left;padding:10px 12px;border-bottom:1px solid var(--line);vertical-align:middle}th{color:var(--muted);font-weight:600;font-size:12.5px;white-space:nowrap}.section-title{font-size:15px;font-weight:650;color:var(--text);margin:22px 0 10px;letter-spacing:0;text-transform:none}.err{color:var(--bad);font-size:14px;font-weight:500}.ok{color:var(--good);font-size:14px;font-weight:500}.state-note{color:var(--muted);padding:14px 2px;font-size:14px}.app{max-width:1180px;margin:0 auto;padding:20px 24px 60px}.topbar{display:flex;align-items:center;gap:12px;padding:calc(10px + env(safe-area-inset-top)) 16px 10px;background:var(--brand-900);color:#fff;position:sticky;top:0;z-index:10;flex-wrap:wrap}.topbar .brand{font-weight:700;font-size:17px;letter-spacing:-.01em;color:#fff;white-space:nowrap;display:inline-flex;align-items:center;gap:10px}.nav a{padding:7px 11px;border-radius:9px;color:#ffffffb8;font-size:14px;font-weight:500;white-space:nowrap;display:inline-flex;align-items:center;gap:7px}.nav a:hover{color:#fff}.nav a.active{color:#fff;background:#ffffff1f}.spacer{flex:1}.topbar select{width:auto;min-width:0;max-width:220px;min-height:36px;background:#ffffff1a;color:#fff;border-color:transparent;font-weight:600;font-size:14px}.topbar button{min-height:36px;background:transparent;border-color:#ffffff38;color:#fff}.topbar button:hover{background:#ffffff1f;border-color:#ffffff59}.hotel-context{font-size:11.5px;font-weight:600;letter-spacing:.06em;text-transform:uppercase;color:var(--muted);margin:0 0 12px}.hotel-context button{min-height:32px;font-size:12px;letter-spacing:0;text-transform:none;padding:0 10px}.page-split{display:grid;grid-template-columns:300px 1fr;gap:18px;align-items:start}.bottom-nav{display:none}@media (max-width: 820px){.topbar .nav{display:none}.topbar{gap:10px;padding:calc(10px + env(safe-area-inset-top)) 12px 10px}.topbar select{max-width:46vw;font-size:14px;min-height:36px}.page-split{grid-template-columns:1fr}.app{padding:0 12px calc(84px + env(safe-area-inset-bottom));padding-top:14px}button{min-height:46px}input,select{min-height:46px;font-size:16px}.code.big{font-size:40px}.modal{max-width:100%}.bottom-nav{display:flex;position:fixed;left:0;right:0;bottom:0;z-index:40;background:var(--panel);border-top:1px solid var(--line);padding-bottom:env(safe-area-inset-bottom)}.bottom-nav a,.bottom-nav button{flex:1 1 0;min-width:0;display:flex;flex-direction:column;align-items:center;gap:3px;padding:8px 0;color:var(--muted);font-size:11px;font-weight:600;text-decoration:none;background:none;border:none;border-radius:0;min-height:0;cursor:pointer}.bottom-nav a.active,.bottom-nav button.active{color:var(--brand-700)}.bottom-nav button:hover{border-color:transparent;background:none}.bottom-nav .ic{font-size:22px;line-height:1}.bottom-nav .icw{width:44px;height:28px;border-radius:999px;display:grid;place-items:center}.bottom-nav .icw .icon{width:24px;height:24px}.bottom-nav a.active .icw,.bottom-nav button.active .icw{background:var(--brand-100)}.hotel-context{display:none}.desktop-only{display:none!important}:root{--cal-room: 96px}.panel{padding:14px;border-radius:14px}.section-title{margin:16px 0 8px}th,td{padding:8px 10px}th,td .pill{white-space:normal}.grid,.row{gap:10px}h2{font-size:20px}h3{font-size:17px}}@media (min-width: 600px) and (max-width: 820px){.app{padding-left:24px;padding-right:24px}button,input,select{min-height:42px}}@media (min-width: 821px) and (max-width: 1099px){.nav a{padding:7px 9px}.nav a .lbl{display:none}.nav a.active .lbl{display:inline}.topbar{gap:8px}.topbar select{max-width:150px;overflow:hidden;text-overflow:ellipsis}.topbar button{padding:0 10px;font-size:13px}}.center{min-height:100vh;display:grid;place-items:center;padding:20px}.card{width:100%;max-width:380px}.center:has(.keypad){background:radial-gradient(1200px 600px at 50% -10%,#1d6c5c 0%,var(--brand-900) 55%,var(--brand-950) 100%)}.card:has(.keypad){border-radius:22px;box-shadow:var(--sh-float);padding:26px 22px 22px;border:0}.card:has(.keypad) h2{text-align:center;font-size:24px;margin-bottom:4px}.card:has(.keypad)>.muted{text-align:center}.card:has(.keypad)>label{text-align:center;font-size:11.5px;letter-spacing:.06em;text-transform:uppercase;color:var(--muted);margin-top:14px}.pindots{display:flex;gap:14px;justify-content:center;margin:14px 0 20px}.pindot{width:14px;height:14px;border-radius:50%;border:2px solid var(--line-2)}.pindot.on{background:var(--brand-600);border-color:var(--brand-600)}.keypad{display:grid;grid-template-columns:repeat(3,1fr);gap:10px}.keypad button{min-height:62px;font-size:22px;font-weight:600;border-radius:14px;background:var(--panel2);border-color:transparent}.keypad button:hover{border-color:var(--line-2)}.keypad button.ghost{background:transparent;color:var(--text-2);font-size:15px}.card:has(.keypad) .err{text-align:center;margin:14px 0 0}.cal-wrap{overflow-x:auto;border:1px solid var(--line);border-radius:var(--r-card);background:var(--panel);box-shadow:var(--sh-card)}.cal{min-width:0}.cal-head,.cal-row{display:grid;grid-template-columns:var(--cal-room) repeat(3,minmax(0,1fr))}.cal-head{background:var(--panel2);border-bottom:1px solid var(--line)}.cal-row{border-top:1px solid var(--line)}.cal-daycell{text-align:center;padding:8px 0;font-weight:700;color:var(--text-2);display:grid;gap:1px}.cal-daycell.today{color:var(--brand-700)}.cal-roomcell{padding:8px 12px;font-size:13px;font-weight:600;line-height:1.25;display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden;max-height:calc(2.5em + 16px);align-self:center}.cal-corner{padding:10px 12px;font-size:11.5px;font-weight:600;color:var(--muted);text-transform:uppercase;letter-spacing:.06em;border-right:1px solid var(--line)}.cal-track{grid-column:2 / span 3;position:relative;min-height:52px;border-left:1px solid var(--line)}.cal-colline{position:absolute;top:0;bottom:0;width:1px;background:var(--line)}.cal-today-col{position:absolute;top:0;bottom:0;background:var(--brand-50)}.cal-bar{position:absolute;top:9px;bottom:9px;border-radius:8px;padding:0 10px;display:flex;align-items:center;font-size:12.5px;font-weight:600;color:#fff;overflow:hidden;white-space:nowrap;text-overflow:ellipsis;cursor:pointer;box-shadow:0 1px 2px #1018282e;gap:6px}.cal-bar:hover{filter:brightness(1.06)}.b-house{background:var(--good)}.b-conf{background:var(--info)}.b-out,.b-past{background:#93a1a5}.b-unmapped{background:var(--warn-bg);color:var(--warn);border:1px dashed var(--warn-line);box-shadow:none}.today-lists{display:grid;grid-template-columns:repeat(3,1fr);gap:12px;margin-top:14px}.today-lists ul{list-style:none;margin:6px 0 0;padding:0}.today-lists li{display:flex;justify-content:space-between;gap:8px;padding:9px 0;border-bottom:1px solid var(--line);font-size:14px}.today-lists li:last-child{border-bottom:0}.modal-overlay{position:fixed;top:0;right:0;bottom:0;left:0;background:#071f1c8c;z-index:50;display:grid;place-items:start center;overflow-y:auto;overscroll-behavior:contain;padding:16px;padding-bottom:calc(16px + env(safe-area-inset-bottom))}.modal{width:100%;max-width:440px;margin-block:auto;border-radius:var(--r-sheet);box-shadow:var(--sh-float);padding:18px}@media (max-width: 640px){.today-lists{grid-template-columns:1fr}}.stat-strip{display:grid;grid-template-columns:repeat(3,1fr);gap:10px}.stat{padding:12px 14px;display:flex;flex-direction:column;gap:6px}.stat .muted{font-size:12.5px;font-weight:600}.stat .n{font-size:28px;font-weight:750;letter-spacing:-.02em;line-height:1}@media (max-width: 360px){.stat .n{font-size:24px}.stat{padding:10px}}.tiles{display:grid;grid-template-columns:repeat(auto-fit,minmax(150px,1fr));gap:12px}.tile{border:1px solid var(--line);border-radius:var(--r-card);padding:16px;text-align:left;min-height:96px;display:flex;flex-direction:column;justify-content:space-between;gap:10px;cursor:pointer;background:var(--panel);box-shadow:var(--sh-card)}.tile:hover{border-color:var(--brand-200)}.tile .tile-title{font-size:18px;font-weight:700;line-height:1.2}.tile .tile-hint{font-size:13px;font-weight:500;color:inherit;opacity:.8}.tile.codes{background:var(--brand-100);color:var(--brand-800);border-color:var(--brand-200)}.tile.cal{background:var(--info-bg);color:#1f4fae;border-color:#cfdcf9}.tile.msg{background:var(--good-bg);color:#116b47;border-color:#bfe6d3}.tile.admin{background:#eeeafb;color:#4b38b3;border-color:#ddd6f5}.chips{display:flex;flex-wrap:wrap;gap:8px;align-items:center}.chip-code{font-family:var(--mono);font-weight:700;padding:8px 12px;border-radius:10px;border:1px solid var(--line-2);background:var(--panel);font-size:18px;letter-spacing:.08em}.chip-code .lbl{font-family:var(--font);font-weight:600;font-size:10.5px;text-transform:uppercase;letter-spacing:.06em;color:var(--muted);display:block;margin-bottom:2px}.chip-code.live{border-color:var(--good);color:var(--good);background:var(--good-bg)}.chip-code.master{border-color:var(--warn-line);color:var(--warn)}.chip-code.admin{border-color:#b9cdf7;color:var(--info)}.chip-code.deleted{border-color:var(--bad-line);color:var(--bad);background:var(--bad-bg)}.chip-code.deleted .val{text-decoration:line-through}.sheet .step{display:flex;align-items:center;gap:12px;background:var(--panel2);border:1px solid var(--line);border-radius:12px;padding:14px 16px;margin:10px 0;font-size:17px}.sheet .step .num{flex:none;width:30px;height:30px;border-radius:50%;background:var(--brand-600);color:#fff;display:grid;place-items:center;font-weight:800}.sheet .step .press{font-family:var(--mono);font-weight:700;font-size:20px;letter-spacing:2px}.sheet .bigcode{font-family:var(--mono);font-size:30px;letter-spacing:3px;font-weight:800;color:var(--brand-600)}.deleted-badge{color:var(--bad);border-color:var(--bad)}.keypad-sheet{max-width:560px;width:100%}.keypad-sheet .lead{font-size:18px;margin:4px 0 14px}.kstep{display:grid;grid-template-columns:36px 1fr;gap:2px 12px;align-items:center;background:var(--panel2);border:1px solid var(--line);border-radius:14px;padding:12px 14px;margin:10px 0}.kstep .knum{grid-row:1 / span 2;width:36px;height:36px;border-radius:50%;background:var(--brand-600);color:#fff;display:grid;place-items:center;font-weight:800;font-size:17px}.kstep .klabel{font-size:13px;font-weight:600;color:var(--muted);min-width:0}.kstep .kval{font-size:18px;display:flex;align-items:center;gap:8px;flex-wrap:wrap;min-height:40px;line-height:1.1}.kstep .kval em{font-style:normal;color:var(--muted);font-size:16px}.kstep .press{font-family:var(--mono);font-weight:800;font-size:22px;letter-spacing:.08em;line-height:1;cursor:pointer}.kstep .bigcode{font-family:var(--mono);font-size:30px;letter-spacing:.14em;font-weight:800;line-height:1;color:var(--brand-600);cursor:pointer}.btn.xl,button.xl{min-height:54px;font-size:16px;padding:0 18px;border-radius:12px}.btn.xxl,button.xxl{min-height:60px;font-size:17px;font-weight:700;padding:0 20px;border-radius:14px}.sheet-actions{display:flex;gap:10px;margin-top:18px;flex-wrap:wrap}.sheet-actions>button{flex:1 1 auto}.sheet-actions>button.ghost{background:var(--panel2);border-color:transparent}.badge-left,.badge-old{display:inline-block;padding:5px 11px;border-radius:999px;font-weight:700;font-size:13px;border:1px solid var(--line)}.badge-left{background:var(--panel2)}.badge-left.warn{background:var(--warn-bg);border-color:var(--warn-line);color:var(--warn)}.badge-old{background:var(--bad-bg);border-color:var(--bad-line);color:var(--bad)}.big-chip{font-size:22px;padding:12px 16px;cursor:pointer}.progress-line{height:8px;border-radius:999px;background:var(--line);overflow:hidden;margin:14px 0 6px}.progress-line>div{height:100%;background:var(--brand-600);transition:width .18s ease}.toast-live{position:fixed;left:50%;bottom:96px;transform:translate(-50%);background:var(--brand-900);color:#fff;border:0;border-radius:12px;padding:10px 16px;font-size:15px;font-weight:600;z-index:60;box-shadow:var(--sh-float)}@media (max-width: 560px){.kstep .bigcode{font-size:28px}.sheet-actions>button{flex:1 1 100%}}.more-overlay{position:fixed;top:0;right:0;bottom:0;left:0;background:#071f1c80;z-index:60;display:flex;align-items:flex-end}.more-sheet{width:100%;background:var(--panel);border-top:1px solid var(--line);border-radius:20px 20px 0 0;max-height:82vh;overflow-y:auto;overscroll-behavior:contain;padding:8px 12px calc(12px + env(safe-area-inset-bottom));box-shadow:var(--sh-sheet)}.more-grip{width:40px;height:4px;border-radius:999px;background:var(--line-2);margin:6px auto 10px}.more-sheet .more-item{display:flex;align-items:center;justify-content:flex-start;gap:12px;width:100%;min-height:52px;padding:0 12px;margin:0;border:none;border-radius:12px;background:transparent;color:var(--brand-700);font-size:16px;font-weight:600;text-align:left;text-decoration:none}.more-sheet .more-item:hover{background:var(--panel2);border-color:transparent}.more-sheet .more-item.active{background:var(--brand-50);color:var(--brand-700)}.more-sheet .more-item .ic{font-size:20px;width:36px;height:36px;border-radius:12px;background:var(--panel2);display:grid;place-items:center;flex:none}.more-sheet .more-sep{height:1px;background:var(--line);margin:8px 12px}.more-sheet .more-item.danger{color:var(--bad)}.more-sheet .more-item.danger .ic{background:var(--bad-bg)}.codes-page{display:grid;gap:12px;align-items:start;max-width:720px}.codes-page>*{min-width:0}.keypad-pick{display:flex;align-items:stretch;gap:6px;flex-direction:column}.keypad-pick label{margin:0;flex:none;font-size:11.5px;letter-spacing:.06em;text-transform:uppercase;color:var(--muted)}.keypad-pick select{flex:1 1 auto;width:auto;font-weight:600;min-height:48px}.keypad-head{display:flex;align-items:center;justify-content:space-between;gap:10px;flex-wrap:wrap}.keypad-name{margin:0;font-size:20px;font-weight:700}.keypad-label{font-size:11.5px;font-weight:600;text-transform:uppercase;letter-spacing:.06em;margin-top:12px}.keypad-meta{font-size:12px;margin-top:2px}.keypad-actions{display:flex;gap:8px;flex-wrap:wrap;margin-top:14px}.keypad-actions>button{flex:1 1 140px}.keypad-actions>button:not(.warn):not(.ghost){background:var(--brand-600);border-color:var(--brand-600);color:#fff}.keypad-actions>button:not(.warn):not(.ghost):hover{background:var(--brand-700)}.note-warn,.note-bad{margin-top:12px;padding:12px 14px;font-size:14px;box-shadow:none}.note-warn{border-color:#f4d9a8;background:var(--warn-bg);color:#7a4600}.note-bad{border-color:var(--bad-line);background:var(--bad-bg);color:#9b2630}.code-run{display:flex;flex-wrap:wrap;gap:6px;align-items:center}.mini-code{font-family:var(--mono);font-size:15px;font-weight:600;letter-spacing:.06em;padding:6px 10px;border-radius:9px;border:1px solid var(--line-2);background:var(--panel);color:var(--text);cursor:pointer;display:inline-flex;align-items:center;gap:6px}.mini-code .tag{font-family:var(--font);font-size:9.5px;padding:0 4px;border:none;background:transparent;color:var(--good);text-transform:uppercase;letter-spacing:.06em;font-weight:700}.mini-code.live{border-color:var(--good);color:var(--good);background:var(--good-bg);font-weight:700}.mini-code.risk{border-color:var(--bad-line);color:var(--bad);background:var(--bad-bg);font-weight:700}.mini-code.done{border-style:dashed;color:var(--muted);background:transparent;text-decoration:line-through;cursor:default}.disclosure{border-top:1px solid var(--line);margin-top:12px}.disclosure>summary{cursor:pointer;list-style:none;display:flex;align-items:center;justify-content:space-between;gap:8px;min-height:44px;font-size:14px;font-weight:600;color:var(--text-2)}.disclosure>summary::-webkit-details-marker{display:none}.disclosure>summary:after{content:"▾";font-size:16px;color:var(--muted)}.disclosure[open]>summary:after{content:"▴"}.disclosure-body{padding:2px 0 12px}@media (max-width: 820px){.codes-page{gap:10px}.keypad-actions>button{flex:1 1 118px}.modal-overlay{padding:16px 0 0}.modal{margin-block:auto 0;border-radius:20px 20px 0 0}.modal,.keypad-sheet{padding:14px 16px calc(16px + env(safe-area-inset-bottom))}.sheet-actions{margin-top:14px}.cal-roomcell{padding:6px 8px;font-size:12px;max-height:calc(2.5em + 10px)}.cal-daycell{font-size:12px;padding:8px 0}.cal-corner{padding:8px;font-size:11px}.cal-bar{font-size:11.5px;padding:0 7px}}.scope-panel{margin-top:6px;padding:12px 14px;min-width:0}.scope-panel>label{margin-top:0}.scope-chips{display:flex;flex-wrap:wrap;gap:8px;margin-bottom:8px;min-width:0}.scope-chips>button{min-width:0;max-width:100%;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;display:inline-block}.icon{width:20px;height:20px;flex:none;fill:none;stroke:currentColor;stroke-width:1.9;stroke-linecap:round;stroke-linejoin:round;vertical-align:middle}.topbar .brand .mark{width:30px;height:30px;border-radius:9px;background:#ffffff1f;display:grid;place-items:center}.nav a .icon{width:18px;height:18px}.topbar button.icon-only{width:36px;padding:0}.topbar .avatar{width:32px;height:32px;border-radius:50%;background:var(--brand-500);color:#fff;display:grid;place-items:center;font-size:12.5px;font-weight:700;flex:none;letter-spacing:.02em}.hotel-context button.icon-only{min-height:28px;width:28px;padding:0;border-color:transparent;color:var(--brand-700)}.hotel-context button.icon-only .icon{width:16px;height:16px}.more-sheet .more-item .ic .icon{width:20px;height:20px}.more-sheet .more-item.close{color:var(--text-2)}.app-loading{display:grid;gap:12px;place-items:center;font-size:14px}.app-loading .mark{width:48px;height:48px;border-radius:14px;background:var(--brand-900);color:#fff;display:grid;place-items:center}.app-loading .mark .icon{width:26px;height:26px}@media (max-width: 360px){.topbar .avatar{display:none}}.table-scroll{overflow-x:auto;-webkit-overflow-scrolling:touch}.td-actions{text-align:right;white-space:nowrap}.td-actions button+button{margin-left:6px}@media (max-width: 820px){.table-cards,.table-cards tbody{display:block}.table-cards thead{display:none}.table-cards tr{display:grid;gap:6px 12px;padding:12px 2px;border-bottom:1px solid var(--line);align-items:center}.table-cards tr:last-child{border-bottom:0}.table-cards td{display:block;padding:0;border:0;min-width:0}.table-cards td[data-label]:before{content:attr(data-label);display:block;font-size:11px;color:var(--muted);font-weight:600;letter-spacing:.02em}.table-cards td.c-full{grid-column:1 / -1}.table-cards .td-actions{text-align:left;white-space:normal}.tc-bookings tr{grid-template-columns:1fr 1fr 1fr;grid-template-areas:"guest guest status" "room in out" "id id id"}.tc-bookings .c1{grid-area:guest;font-weight:600}.tc-bookings .c2{grid-area:room}.tc-bookings .c3{grid-area:status;justify-self:end}.tc-bookings .c4{grid-area:in}.tc-bookings .c5{grid-area:out}.tc-bookings .c6{grid-area:id;font-size:12px}.tc-bookings tr:has(.c-full){grid-template-areas:none;grid-template-columns:1fr}.tc-callist tr{grid-template-columns:1fr 1fr;grid-template-areas:"guest status" "room dates"}.tc-callist .c1{grid-area:guest;font-weight:600}.tc-callist .c2{grid-area:room}.tc-callist .c3{grid-area:status;justify-self:end}.tc-callist .c4{grid-area:dates}.tc-rooms tr{grid-template-columns:1fr auto auto}.tc-rooms .c1{font-weight:600}.tc-rooms .c3{display:flex;gap:6px}.tc-rooms .c3 button+button{margin-left:0}.tc-rooms tr:has(.c-full){grid-template-columns:1fr}.tc-users tr{grid-template-columns:1fr auto;grid-template-areas:"name status" "email email" "hotels hotels" "actions actions"}.tc-users .c1{grid-area:name;font-weight:600}.tc-users .c2{grid-area:email}.tc-users .c3{grid-area:status;justify-self:end}.tc-users .c4{grid-area:hotels}.tc-users .c5{grid-area:actions;margin-top:4px}.tc-users .c5 .row{justify-content:flex-start!important}.tc-users tr:has(.c-full){grid-template-areas:none;grid-template-columns:1fr}}.page-title{font-size:22px;font-weight:700;letter-spacing:-.01em;line-height:1.2;margin:0}.picker{position:relative;display:flex;align-items:center}.picker select{width:100%;min-height:48px;padding-left:44px;padding-right:44px;font-weight:600;-moz-appearance:none;appearance:none;-webkit-appearance:none;background:var(--panel)}.picker .icon.lead{position:absolute;left:14px;color:var(--text-2);pointer-events:none}.picker .icon.chev{position:absolute;right:14px;color:var(--muted);pointer-events:none}.picker .picker-hint{position:absolute;right:40px;font-size:12px;color:var(--muted);pointer-events:none;white-space:nowrap}.codewell{margin-top:12px;background:var(--panel2);border:1px solid var(--line);border-radius:14px;padding:14px 16px;display:flex;align-items:center;justify-content:space-between;gap:12px}.codewell .keypad-label{margin-top:0}.codewell .copy-hint{width:22px;height:22px;color:var(--muted)}.ni{width:18px;height:18px;vertical-align:-4px;margin-right:6px}.lock-head{display:flex;align-items:baseline;justify-content:space-between;gap:10px;flex-wrap:wrap;margin-top:14px;margin-bottom:8px}.lock-head .section-title{margin:0}.sheet-head{display:flex;align-items:center;justify-content:space-between;gap:10px;margin-bottom:4px}.sheet-head h3{margin:0}.pill.nodot:before{display:none}.grip{display:none}@media (max-width: 820px){.grip{display:block;width:40px;height:4px;border-radius:999px;background:var(--line-2);margin:0 auto 12px}.picker .picker-hint{display:none}}@media (max-width: 360px){.codes-page>.page-title{display:none}}.cal-tools{display:flex;align-items:center;justify-content:space-between;gap:10px;flex-wrap:wrap}.cal-nav{display:flex;align-items:center;gap:6px}.cal-range{white-space:nowrap;margin-left:4px}button.icon-only{width:40px;padding:0}.seg{display:inline-flex;gap:4px;padding:3px;background:var(--panel2);border:1px solid var(--line);border-radius:12px;max-width:100%}.seg>button{min-height:40px;padding:0 12px;border-color:transparent;background:transparent;color:var(--text-2);border-radius:9px}.seg>button:hover{border-color:transparent;color:var(--text)}.seg>button.primary{background:var(--panel);color:var(--brand-700);box-shadow:var(--sh-card)}.seg>button .icon{width:16px;height:16px}.cal-daycell .dow{font-size:11px;font-weight:600;color:var(--muted);text-transform:uppercase;letter-spacing:.06em}.cal-daycell .dom{font-size:15px;font-weight:700}.cal-daycell.today .dom:after{content:"Today";display:inline-block;margin-left:6px;font-size:10px;font-weight:700;background:var(--brand-100);color:var(--brand-800);padding:1px 6px;border-radius:999px;vertical-align:middle}.cal-roomcell .clamp2{display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden}.cal-bar .ini{width:22px;height:22px;border-radius:50%;background:#ffffff47;display:grid;place-items:center;font-size:10.5px;flex:none}.cal-bar.b-unmapped .ini{background:#b96a0524}.cal-bar .bar-ic{width:16px;height:16px;flex:none}.cal-bar.narrow{padding:0;justify-content:center}.cal-bar.narrow .name{display:none}.pill.warn{background:var(--warn-bg);color:var(--warn)}.pill .pill-ic{width:13px;height:13px}.warn-ic{color:var(--warn);margin-left:6px;margin-right:0}.modal button.icon-only{min-height:40px}.kv{display:grid;gap:8px;margin-top:12px}.kv>div{display:flex;justify-content:space-between;align-items:baseline;gap:12px}.kv .muted{font-size:13px}@media (max-width: 820px){.cal-tools{flex-direction:column;align-items:stretch}.seg{display:flex}.seg>button{flex:1 1 0;min-height:40px}.cal-nav{justify-content:center}.cal-daycell .dom{font-size:13px}.cal-daycell.today .dom:after{display:block;margin:2px auto 0;width:max-content}}.seg.scroll{display:flex;overflow-x:auto;scrollbar-width:none;-webkit-overflow-scrolling:touch}.seg.scroll::-webkit-scrollbar{display:none}.seg.scroll>button{flex:0 0 auto}.note-info,.note-good{margin-top:0;padding:12px 14px;font-size:14px;box-shadow:none}.note-info{border-color:#c9dcf5;background:var(--info-bg);color:#1e3a5f}.note-good{border-color:#b7dfcc;background:var(--good-bg);color:#145238}.admin-page .note-warn{margin-top:0}.two{display:grid;gap:12px;grid-template-columns:minmax(0,1fr);align-items:start}.card-head{display:flex;align-items:center;justify-content:space-between;gap:10px;flex-wrap:wrap}.card-head h3{margin:0;font-size:16px}.card-head .section-title{margin:0}button.danger{color:var(--bad);border-color:var(--bad-line)}button.danger:hover{background:var(--bad-bg);border-color:var(--bad)}button.icon-only.danger .icon{width:18px;height:18px}.chips>button{min-height:40px;font-size:13px;padding:0 12px;max-width:180px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;display:inline-block;line-height:38px}.bulk-ta{min-height:90px;resize:vertical}.disclosure-body.grid{gap:10px}.door-head{display:flex;align-items:center;justify-content:space-between;gap:10px;flex-wrap:wrap}.door-head .who{display:flex;align-items:center;gap:10px;min-width:0;font-size:15px}.door-ic{width:36px;height:36px;border-radius:10px;background:var(--brand-50);color:var(--brand-700);display:grid;place-items:center;flex:none}.door-actions{display:flex;gap:8px;flex-wrap:wrap}.door-actions .icon{width:16px;height:16px}.door-settings{background:var(--panel2);border:1px solid var(--line);border-radius:12px;padding:12px 14px}.digit{width:44px;padding:0}.warn-text{color:var(--warn);font-weight:600;font-size:13px}.panel .door{border:0;box-shadow:none;border-radius:0;padding:12px 0 0;border-top:1px solid var(--line)}.door-card{padding:0;overflow:hidden}.door-card>.door{padding:16px;border-top:0}.door-card>.scope-panel{margin-top:0;padding:12px 16px 14px;border:0;border-top:1px solid var(--line);border-radius:0;box-shadow:none;background:var(--panel2)}.door-card>.scope-panel>label{font-size:11.5px;text-transform:uppercase;letter-spacing:.06em;color:var(--muted)}.aside-info{background:var(--panel2)}@media (min-width: 1024px){.two{grid-template-columns:minmax(0,2fr) minmax(0,1fr);gap:16px}.two.settings{grid-template-columns:minmax(0,640px) minmax(0,1fr)}}@media (max-width: 820px){.seg.scroll>button{min-height:44px;padding:0 14px}.chips>button{min-height:44px;line-height:42px}.door-head{align-items:flex-start}.tc-rooms tr{grid-template-columns:minmax(0,1fr) auto auto}.tc-rooms tr:has(.c3>button+button){grid-template-columns:minmax(0,1fr) auto}.tc-rooms tr:has(.c3>button+button) .c3{grid-column:1 / -1;justify-content:flex-end}.tc-rooms tr:has(.c-full){grid-template-columns:1fr}.tc-rooms .c1{overflow-wrap:anywhere}}.page-head{display:flex;align-items:center;justify-content:space-between;gap:10px;flex-wrap:wrap}.who{display:inline-flex;align-items:center;gap:10px;min-width:0}.avatar.sm{width:30px;height:30px;border-radius:50%;background:var(--brand-100);color:var(--brand-800);display:grid;place-items:center;font-size:11.5px;font-weight:700;flex:none}.user-editor>.note-warn{margin-top:0}.form-grid{display:grid;gap:12px;grid-template-columns:repeat(auto-fit,minmax(220px,1fr))}.form-grid label{margin-top:0}.hotel-well{background:var(--panel2);border:1px solid var(--line);border-radius:12px;padding:10px 12px}.hotel-toggle{margin:0;gap:10px;align-items:center;font-size:15px;min-height:28px}.presets{display:flex;align-items:center;gap:8px;flex-wrap:wrap;margin:10px 0 12px}.perm-grid{display:grid;gap:8px;grid-template-columns:repeat(auto-fill,minmax(340px,1fr))}.perm-card{background:var(--panel);border:1px solid var(--line);border-radius:10px;padding:8px 12px}.perm-title{font-size:11.5px;font-weight:700;text-transform:uppercase;letter-spacing:.06em;color:var(--muted);margin:2px 0}.perm-row{display:grid;grid-template-columns:18px minmax(0,1fr);column-gap:10px;align-items:center;margin:0;padding:3px 0;min-height:34px;font-size:14px;font-weight:500;line-height:1.3;color:var(--text);cursor:pointer}.perm-row input[type=checkbox]{align-self:center}.perm-row .perm-text{min-width:0;overflow-wrap:anywhere}.perm-row .perm-key{font-size:11px;color:var(--muted);white-space:nowrap;margin-left:2px}.sticky-actions{display:flex;gap:8px}@media (min-width: 600px) and (max-width: 1023px){.perm-grid{grid-template-columns:repeat(2,minmax(0,1fr))}}@media (max-width: 820px){.perm-grid{grid-template-columns:minmax(0,1fr)}.sticky-actions{position:sticky;bottom:calc(72px + env(safe-area-inset-bottom));z-index:5;background:var(--panel);margin:0 -16px -16px;padding:10px 16px 12px;border-top:1px solid var(--line);border-radius:0 0 var(--r-card) var(--r-card)}.sticky-actions>button{flex:1 1 0}}@media (max-width: 599px){.perm-grid{grid-template-columns:minmax(0,1fr)}}.login-mark{width:56px;height:56px;border-radius:16px;background:var(--brand-900);color:#fff;display:grid;place-items:center;margin:0 auto 10px}.login-mark .icon{width:30px;height:30px}.keypad button .icon{width:22px;height:22px}.card:has(.keypad) .note-bad{text-align:left;display:flex;align-items:flex-start;gap:6px}.lrow{display:flex;align-items:center;gap:10px;padding:8px 10px;border-radius:12px;cursor:pointer;min-height:52px}.lrow:hover{background:var(--panel2)}.lrow.on{background:var(--brand-50)}.lrow-text{display:flex;flex-direction:column;min-width:0;flex:1 1 auto}.lrow-name{font-weight:600;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.lrow-sub{font-size:12px;color:var(--muted)}.avatar.sm.grp{background:var(--panel2);color:var(--text-2)}.avatar.sm.grp .icon{width:16px;height:16px}.pill.unread{background:var(--brand-600);color:#fff}.convo-list .section-title{margin-bottom:6px}.thread-panel{display:flex;flex-direction:column;min-height:480px}.thread-head{display:flex;align-items:center;gap:10px;padding-bottom:10px;border-bottom:1px solid var(--line);margin-bottom:8px}.thread-head .lrow-name{font-size:15px}.msgs{flex:1;overflow-y:auto;display:flex;flex-direction:column;gap:10px;padding:4px 2px}.msg{max-width:78%;display:flex;flex-direction:column}.msg.mine{align-self:flex-end;align-items:flex-end}.msg.other{align-self:flex-start;align-items:flex-start}.bubble{padding:9px 13px;border-radius:16px;font-size:14.5px;line-height:1.4;overflow-wrap:anywhere}.msg.mine .bubble{background:var(--brand-600);color:#fff;border-bottom-right-radius:5px}.msg.other .bubble{background:var(--panel2);color:var(--text);border-bottom-left-radius:5px}.bubble .att{max-width:220px;border-radius:8px;display:block;margin-top:6px}.msg .meta{font-size:11px;color:var(--muted);margin-top:3px}.msg-retracted .tomb{border:1px dashed var(--line-2);color:var(--muted);padding:8px 12px;border-radius:12px;font-size:13px;font-style:italic}.unsend-row{margin-top:2px}.msg-unsend{font-size:12px;min-height:40px;padding:0 8px;color:var(--muted);border-color:transparent}.sysnote{align-self:stretch;display:flex;gap:8px;align-items:flex-start;background:var(--brand-50);color:var(--brand-800);border-radius:12px;padding:10px 12px;font-size:13.5px;line-height:1.4}.sysnote .ni{flex:none;margin:1px 0 0}.composer{display:flex;align-items:center;gap:8px;border-top:1px solid var(--line);padding-top:10px;margin-top:10px}.composer .attach{position:relative;width:40px;height:40px;border-radius:50%;border:1px solid var(--line-2);display:grid;place-items:center;cursor:pointer;color:var(--text-2);margin:0;flex:none}.composer .attach .badge{position:absolute;top:-4px;right:-4px;min-width:16px;height:16px;border-radius:8px;background:var(--brand-600);color:#fff;font-size:10px;font-weight:700;display:grid;place-items:center;padding:0 4px}.composer .pill-input{flex:1 1 auto;border-radius:999px;padding-left:16px}.composer .send{width:44px;min-height:44px;border-radius:50%;padding:0;flex:none}.picker-list{max-height:360px;overflow-y:auto;margin-top:10px;display:grid;gap:4px}.guest-center{place-items:start center;padding:0 0 24px}.guest-page{width:100%;max-width:520px;display:grid;gap:12px;padding:0 12px}.guest-hero{margin:0 -12px;min-height:200px;background:radial-gradient(900px 400px at 50% -20%,#1d6c5c 0%,var(--brand-900) 60%,var(--brand-950) 100%);color:#fff;padding:28px 20px 56px;border-radius:0 0 26px 26px;display:flex;flex-direction:column;align-items:center;justify-content:center;text-align:center}.guest-hero .mark{width:52px;height:52px;border-radius:14px;background:#ffffff24;display:grid;place-items:center;margin-bottom:10px}.guest-hero .mark .icon{width:28px;height:28px}.guest-hero h2{margin:0;font-size:26px;color:#fff}.guest-hero .sub{opacity:.85;font-size:14px;margin-top:4px}.guest-dates{margin-top:-38px;display:flex;align-items:center;justify-content:space-between;gap:10px}.eyebrow{font-size:11px;font-weight:700;text-transform:uppercase;letter-spacing:.06em;color:var(--muted)}.guest-dates .dates{font-size:18px;font-weight:700;margin-top:2px}.guest-code{display:flex;align-items:center;gap:12px;background:var(--panel2);border:1px solid var(--line);border-radius:14px;padding:12px 14px;min-width:0}.guest-code+.guest-code{margin-top:8px}.guest-code .code{font-size:28px;letter-spacing:.12em;line-height:1.15}.guest-links{display:flex;gap:10px;flex-wrap:wrap}.guest-links a{flex:1 1 180px;text-decoration:none;min-width:0}.guest-links button{width:100%}.guest-chat{display:flex;flex-direction:column;min-height:260px}.platform-page .aside-info{font-size:14px}@media (min-width: 600px){.guest-page{padding:24px 0 0}.guest-hero{margin:0;border-radius:22px}.guest-dates{margin:-38px 16px 0}}@media (max-width: 820px){.thread-panel{min-height:calc(100dvh - 246px)}.composer .send{width:46px;min-height:46px}.composer .attach{width:44px;height:44px}.lrow{min-height:56px}}.mt0{margin-top:0}.mt4{margin-top:4px}.mt6{margin-top:6px}.mt8{margin-top:8px}.mt10{margin-top:10px}.mb10{margin-bottom:10px}.ml6{margin-left:6px}.m0{margin:0}.my12{margin:12px 0}.fs13{font-size:13px}.grow{flex:1 1 0%}.grow-200{flex:1 1 0%;min-width:200px}.w70{width:70px}.w80{width:80px}.w120{width:120px}.gap4{gap:4px}.gap6{gap:6px}.gap8{gap:8px}.gap12{gap:12px}.gap16{gap:16px}.gap18{gap:18px}.end{justify-content:flex-end}.clickable{cursor:pointer}.minh20{min-height:20px}.no-caps{text-transform:none;letter-spacing:0}.danger-solid,.sheet-actions>button.danger-solid{background:var(--bad);border-color:var(--bad)}.sheet-actions>button.grow{flex:1 1 0%}.ul-tight{margin:8px 0 0;padding-left:18px}.file-hidden{display:none}.card.wide{max-width:460px}.nav.row,.desktop-only.row{gap:4px}.topbar select{width:auto}.hotel-context{gap:8px}.cal-track{min-height:56px}.codewell .code.big{cursor:pointer}
