:root{--bg: #0b1220;--bg-2: #0f1a2e;--ink: #ece7da;--ink-dim: #9aa3b5;--ink-faint: #5d6880;--line: rgba(236, 231, 218, .12);--glass: rgba(13, 21, 38, .72);--accent: #f2b33d;--radius: 14px;--gutter: clamp(16px, 3vw, 36px);--font: "IBM Plex Sans Thai", system-ui, sans-serif;--mono: "IBM Plex Mono", ui-monospace, monospace}*{box-sizing:border-box}html,body{margin:0;height:100%;background:var(--bg);color:var(--ink);font-family:var(--font);-webkit-font-smoothing:antialiased}body{overflow:hidden;overscroll-behavior:none}button{font:inherit;color:inherit;cursor:pointer}[hidden]{display:none!important}.hero{--top-h: calc(var(--gutter) * .75 + 56px);--info-bottom: calc(var(--gutter) + 152px + env(safe-area-inset-bottom));--panel-w: 360px;position:relative;width:100%;height:100vh;height:100dvh;overflow:hidden;overflow:clip;background:radial-gradient(ellipse 80% 70% at 50% 50%,#13213a 0%,var(--bg) 70%)}.stage{position:absolute;top:0;right:0;bottom:0;left:0;touch-action:none}.stage canvas{display:block;width:100%;height:100%;outline:none}.stage.is-hovering canvas{cursor:pointer}.stage.is-dragging canvas{cursor:grabbing}.hero>*:not(.stage){position:absolute;z-index:2}.labels{position:absolute;top:0;right:0;bottom:0;left:0;pointer-events:none;z-index:1}.room-label{pointer-events:none;font-size:12px;line-height:1.2;text-align:center;color:var(--ink);text-shadow:0 1px 2px rgba(0,0,0,.65),0 0 8px rgba(0,0,0,.35);white-space:nowrap;transition:opacity .25s ease}.room-label small{display:block;font-family:var(--mono);font-size:9.5px;letter-spacing:.04em;color:var(--ink-dim)}.room-label.is-hidden{opacity:0}.room-label.is-hot{opacity:1;color:#fff;font-weight:600}.topbar{top:0;left:0;right:0;z-index:6!important;display:flex;flex-wrap:wrap;align-items:center;justify-content:space-between;gap:10px 12px;padding:calc(var(--gutter) * .75 + env(safe-area-inset-top)) var(--gutter) 0;pointer-events:none}.topbar>*{pointer-events:auto}.brand{display:flex;align-items:center;gap:12px;color:var(--ink);text-decoration:none}.brand__mark{position:relative;flex:none;width:48px;height:48px}.brand__img,.brand__logo3d{position:absolute;top:0;right:0;bottom:0;left:0;width:100%;height:100%}.brand__logo3d{top:-6px;right:-6px;bottom:-6px;left:-6px;width:calc(100% + 12px);height:calc(100% + 12px);opacity:0;transition:opacity .4s ease}.brand.is-3d .brand__logo3d{opacity:1}.brand.is-3d .brand__img{opacity:0}.brand__text{display:flex;flex-direction:column;line-height:1.1}.brand__text strong{font-family:var(--mono);font-weight:500;letter-spacing:.32em;font-size:15px}.brand__text small{font-size:12px;color:var(--ink-dim)}.timeslot-bar{display:flex;align-items:center;gap:4px;padding:4px;background:var(--glass);border:1px solid var(--line);border-radius:999px;backdrop-filter:blur(14px);-webkit-backdrop-filter:blur(14px);box-shadow:0 4px 20px #00000040;transition:opacity .25s ease,transform .25s ease}.timeslot-bar[hidden]{display:none}.timeslot-btn{display:inline-flex;align-items:center;gap:6px;height:36px;padding:0 12px;border:0;border-radius:999px;background:transparent;color:var(--ink-dim);font-family:inherit;font-size:12.5px;font-weight:500;cursor:pointer;transition:all .18s ease;white-space:nowrap}.timeslot-btn:hover{color:#fff;background:#ffffff0f}.timeslot-btn__icon{font-size:13px}.timeslot-btn__name{font-weight:600}.timeslot-btn__time{font-family:var(--mono);font-size:10.5px;opacity:.75}.timeslot-btn.is-active{background:#10b98138;color:#34d399;border:1px solid rgba(16,185,129,.45);box-shadow:0 0 12px #10b98133;font-weight:600}.timeslot-btn.is-active .timeslot-btn__time{opacity:1;font-weight:500}.info__slots-section{margin-top:10px;padding-top:10px;border-top:1px solid var(--line)}.info__slots-lbl{font-size:11px;color:var(--ink-dim);margin-bottom:6px}.info__slots-grid{display:grid;grid-template-columns:repeat(3,1fr);gap:6px}.slot-chip{padding:6px 8px;border-radius:8px;border:1px solid var(--line);background:#ffffff08;cursor:pointer;transition:all .15s ease;display:flex;flex-direction:column;gap:3px;text-align:left}.slot-chip:hover{background:#ffffff14;border-color:#fff3}.slot-chip.is-current{border-color:#34d399;background:#10b98114}.slot-chip__header{display:flex;align-items:center;justify-content:space-between;font-size:11px;font-weight:600}.slot-chip__time{font-family:var(--mono);font-size:9.5px;color:var(--ink-dim)}.slot-chip__status{font-size:10px;font-weight:600;display:inline-flex;align-items:center;gap:4px}.slot-chip.is-available .slot-chip__status{color:#34d399}.slot-chip.is-occupied .slot-chip__status{color:#f87171}.slot-chip.is-restricted .slot-chip__status{color:#94a3b8}.mode-switch{position:relative;display:grid;grid-template-columns:1fr;padding:4px;background:var(--glass);border:1px solid var(--line);border-radius:999px;backdrop-filter:blur(14px);-webkit-backdrop-filter:blur(14px)}.mode-switch__btn{position:relative;z-index:1;display:flex;align-items:center;justify-content:center;gap:6px;border:0;background:none;padding:8px 14px;border-radius:999px;color:var(--ink-dim);font-size:13px;font-weight:500;white-space:nowrap;transition:color .3s ease}.mode-switch__btn.is-active{color:var(--bg);background:var(--accent);font-weight:600}.mode-switch__thumb{position:absolute;top:4px;bottom:4px;left:4px;width:calc((100% - 8px)/2);border-radius:999px;background:var(--accent);transition:transform .45s cubic-bezier(.65,0,.35,1)}.mode-switch[data-active=lighting] .mode-switch__thumb{opacity:0}.mode-switch[data-active=access] .mode-switch__thumb{transform:translate(100%)}.floor-switch{position:relative;display:grid;grid-template-columns:1fr 1fr;padding:4px;background:var(--glass);border:1px solid var(--line);border-radius:999px;backdrop-filter:blur(14px);-webkit-backdrop-filter:blur(14px)}.floor-switch__btn{position:relative;z-index:1;display:flex;align-items:center;gap:8px;border:0;background:none;padding:8px 18px 8px 8px;border-radius:999px;color:var(--ink-dim);transition:color .3s ease}.floor-switch__btn.is-active{color:var(--bg)}.floor-switch__num{display:grid;place-items:center;width:26px;height:26px;border-radius:50%;font-family:var(--mono);font-size:13px;border:1px solid currentColor}.floor-switch__lbl{font-size:14px;font-weight:500}.floor-switch__thumb{position:absolute;top:4px;bottom:4px;left:4px;width:calc(50% - 4px);border-radius:999px;background:var(--accent);transition:transform .45s cubic-bezier(.65,0,.35,1)}.floor-switch[data-active="2"] .floor-switch__thumb{transform:translate(100%)}.intro{top:calc(var(--top-h) + 14px);left:var(--gutter);max-width:360px;pointer-events:none}.intro__eyebrow{display:flex;align-items:center;gap:8px;margin:0 0 14px;font-family:var(--mono);font-size:11px;letter-spacing:.08em;text-transform:uppercase;color:var(--ink-dim)}.dot{width:7px;height:7px;border-radius:50%;background:var(--accent);box-shadow:0 0 0 4px #f2b33d2e}.intro__title{margin:0;font-size:clamp(34px,4.4vw,58px);line-height:1.02;font-weight:600;letter-spacing:-.01em}.intro__title em{font-style:normal;font-family:var(--mono);font-weight:500;letter-spacing:.18em;color:var(--accent)}.intro__lede{margin:16px 0 22px;font-size:15px;line-height:1.6;color:var(--ink-dim);font-weight:300}.stats{display:flex;gap:28px;margin:0}.stats div{border-top:1px solid var(--line);padding-top:8px}.stats dt{font-size:11px;color:var(--ink-faint)}.stats dd{margin:2px 0 0;font-family:var(--mono);font-size:22px}.stats dd small{font-size:12px;color:var(--ink-dim)}.stat--ok{color:#34d399!important}.stat--bad{color:#f87171!important}.stat--muted{color:#94a3b8!important}.info{bottom:var(--info-bottom);right:var(--gutter);width:min(420px,calc(100% - 2 * var(--gutter)));max-width:calc(100% - 2 * var(--gutter));min-width:0;container-type:inline-size;max-height:calc(100% - var(--top-h) - var(--info-bottom) - 12px);overflow-y:auto;overscroll-behavior:contain;scrollbar-width:thin;padding:18px 20px 16px;background:var(--glass);border:1px solid var(--line);border-radius:var(--radius);backdrop-filter:blur(16px);-webkit-backdrop-filter:blur(16px);box-shadow:0 20px 50px #00000059;animation:rise .3s ease both}.info[hidden]{display:none}.info>*,.info__access>*,.facescan-box>*,.facescan-controls>*{min-width:0;max-width:100%}.info__title,.info__en,.facescan-status{overflow-wrap:anywhere}.facescan-controls .booking-select{width:100%;min-width:0}.facescan-controls .btn-action{height:auto;min-height:44px;white-space:normal;line-height:1.4}@keyframes rise{0%{opacity:0;transform:translateY(8px)}to{opacity:1;transform:none}}.info__close{pointer-events:auto;position:absolute;top:8px;right:10px;width:32px;height:32px;border:0;border-radius:50%;background:transparent;font-size:22px;line-height:1;color:var(--ink-dim)}.info__close:hover{background:#ffffff0f;color:var(--ink)}.info__cat{display:inline-flex;align-items:center;gap:6px;font-size:11px;color:var(--ink-dim)}.info__admin{display:inline-flex;align-items:center;gap:4px;margin-left:8px;padding:2px 8px;border-radius:999px;border:1px solid rgba(148,163,184,.45);background:#64748b2e;font-size:10.5px;font-weight:600;color:#cbd5e1}.info__cat:before{content:"";width:10px;height:10px;border-radius:3px;background:var(--swatch, var(--accent))}.info__title{margin:8px 0 2px;font-size:22px;font-weight:600;line-height:1.25;padding-right:24px}.info__en{margin:0 0 14px;font-size:13px;color:var(--ink-dim)}.info__meta{display:grid;grid-template-columns:repeat(3,auto);gap:14px;margin:0}.info__meta dt{font-size:10.5px;color:var(--ink-faint)}.info__meta dd{margin:2px 0 0;font-family:var(--mono);font-size:13px}.legend{left:var(--gutter);bottom:calc(var(--gutter) + env(safe-area-inset-bottom));display:flex;flex-wrap:wrap;gap:6px;max-width:min(560px,calc(100% - 280px))}.chip{display:inline-flex;align-items:center;gap:7px;padding:6px 12px 6px 9px;border:1px solid var(--line);border-radius:999px;background:var(--glass);backdrop-filter:blur(10px);-webkit-backdrop-filter:blur(10px);font-size:12.5px;color:var(--ink);white-space:nowrap;transition:border-color .2s,background .2s,opacity .2s}.chip i{width:10px;height:10px;border-radius:3px;background:var(--c)}.chip:hover{border-color:#ece7da59}.chip[aria-pressed=true]{border-color:var(--c);background:color-mix(in srgb,var(--c) 22%,var(--glass))}.legend.has-focus .chip[aria-pressed=false]{opacity:.55}.chip[disabled]{opacity:.3!important;cursor:default}.tools{right:var(--gutter);bottom:calc(var(--gutter) + env(safe-area-inset-bottom));display:flex;align-items:flex-end;gap:10px}.tool-group{display:flex;flex-direction:column;background:var(--glass);border:1px solid var(--line);border-radius:12px;backdrop-filter:blur(10px);-webkit-backdrop-filter:blur(10px);overflow:hidden}.tool{width:44px;height:44px;display:grid;place-items:center;border:0;background:transparent;font-size:20px;line-height:1}.tool-group .tool+.tool{border-top:1px solid var(--line)}.tool:hover{background:#ffffff0f}.tool svg{width:18px;height:18px;fill:none;stroke:currentColor;stroke-width:1.8;stroke-linecap:round}.tool--wide{width:auto;height:44px;padding:0 16px;border:1px solid var(--line);border-radius:12px;background:var(--glass);backdrop-filter:blur(10px);-webkit-backdrop-filter:blur(10px);font-family:var(--mono);font-size:13px;letter-spacing:.08em}.tool--wide[aria-pressed=true]{background:var(--accent);color:var(--bg);border-color:var(--accent)}.scale{display:flex;flex-direction:column;align-items:flex-start;gap:4px;margin-right:6px;padding-bottom:4px}.scale__bar{display:block;height:6px;width:80px;border:1.5px solid var(--ink);border-top:0;transition:width .15s linear}.scale__lbl{font-family:var(--mono);font-size:11px;color:var(--ink-dim)}.compass{width:44px;height:44px}.compass svg{width:100%;height:100%;transition:transform .1s linear}.compass circle{fill:var(--glass);stroke:var(--line)}.compass path{fill:var(--accent)}.compass text{fill:var(--ink-dim);font-family:var(--mono);font-size:7px;text-anchor:middle}.hint{left:50%;top:calc(var(--top-h) + 12px);transform:translate(-50%);margin:0;padding:7px 14px;border-radius:999px;background:#0d15268c;font-size:12px;color:var(--ink-dim);white-space:nowrap;pointer-events:none;transition:opacity .6s ease}.hint.is-gone{opacity:0}.loader{top:0;right:0;bottom:0;left:0;display:flex;align-items:center;justify-content:center;gap:12px;background:var(--bg);color:var(--ink-dim);font-size:14px;transition:opacity .6s ease,visibility .6s;z-index:10!important}.loader b{font-weight:inherit}.loader span{width:18px;height:18px;border:2px solid var(--line);border-top-color:var(--accent);border-radius:50%;animation:spin .8s linear infinite}.loader.is-done{opacity:0;visibility:hidden}@keyframes spin{to{transform:rotate(360deg)}}:root{--warm: #ffc85a;--ok: #4fd18b;--bad: #ff6b5b}.topbar__right{display:flex;align-items:center;gap:10px}.lang-switch{display:inline-flex;gap:2px;padding:3px;background:var(--glass);border:1px solid var(--line);border-radius:999px;backdrop-filter:blur(14px);-webkit-backdrop-filter:blur(14px)}.lang-switch button{border:0;background:none;border-radius:999px;padding:8px 9px;color:var(--ink-dim);font:600 12px/1 var(--mono);letter-spacing:.04em;transition:background .2s,color .2s}.lang-switch button:hover{color:var(--ink)}.lang-switch button[aria-pressed=true]{background:var(--ink);color:var(--bg)}body:not(.can-editSettings) [data-perm~=editSettings],body:not(.can-controlDevices) [data-perm~=controlDevices],body:not(.can-controlLights) [data-perm~=controlLights],body:not(.can-book) [data-perm~=book],body:not(.can-manageUsers) [data-perm~=manageUsers]{display:none!important}.topbar__aux{display:flex;align-items:center;gap:8px}.demo-badge{padding:5px 9px;border-radius:999px;background:#f2b33d29;border:1px solid rgba(242,179,61,.5);color:var(--accent);font:600 11px/1 var(--mono);letter-spacing:.08em}.user-menu{position:relative}.user-menu__btn{width:40px;height:40px;padding:0;border-radius:50%;border:1px solid var(--line);background:var(--glass);backdrop-filter:blur(14px);-webkit-backdrop-filter:blur(14px)}.user-menu__btn:hover,.user-menu__btn[aria-expanded=true]{border-color:var(--accent)}.user-menu__avatar{display:grid;place-items:center;width:30px;height:30px;margin:auto;border-radius:50%;background:var(--accent);color:var(--bg);font-weight:700;font-size:14px}.user-menu__pop{position:absolute;right:0;top:calc(100% + 8px);z-index:20;min-width:220px;padding:6px;background:#101a2e;border:1px solid var(--line);border-radius:12px;box-shadow:0 16px 40px #00000073;display:grid}.user-menu__who{display:grid;padding:8px 10px 10px;border-bottom:1px solid var(--line);margin-bottom:4px}.user-menu__who b{font-size:14px}.user-menu__who small{font-size:11.5px;color:var(--ink-dim)}.user-menu__pop button[role=menuitem]{text-align:left;border:0;background:none;padding:9px 10px;border-radius:8px;font-size:13.5px}.user-menu__pop button[role=menuitem]:hover{background:#ffffff12}.login{top:0;right:0;bottom:0;left:0;z-index:8!important;display:grid;place-items:center;padding:20px;background:#080d189e;backdrop-filter:blur(6px);-webkit-backdrop-filter:blur(6px)}.login__card{width:min(380px,100%);display:grid;gap:14px;padding:24px 24px 22px;border-radius:18px;background:#0f1a2e;border:1px solid var(--line);box-shadow:0 30px 80px #00000080}.login__top{display:flex;align-items:center;justify-content:space-between}.login__logo{width:52px;height:52px}.login__title{margin:4px 0 0;font-size:24px;font-weight:600}.login__sub{margin:-8px 0 4px;color:var(--ink-dim);font-size:13.5px}.login__checking{display:none;margin:0;text-align:center;color:var(--ink-dim);font-size:13px}.login.is-checking .login__checking{display:block}.login.is-checking .field,.login.is-checking #loginSubmit{opacity:.4;pointer-events:none}.field{display:grid;gap:6px;font-size:12.5px;color:var(--ink-dim)}.field input,.field select{height:40px;padding:0 12px;border-radius:10px;border:1px solid var(--line);background:#ffffff0a;color:var(--ink);font:inherit;font-size:14px}.field input:focus,.field select:focus{outline:none;border-color:var(--accent)}.field input:disabled{opacity:.6}.field small{color:var(--ink-faint);font-size:11px}.check{display:flex;align-items:center;gap:8px;font-size:13px}.form-error{margin:0;padding:8px 10px;border-radius:8px;font-size:13px;background:#ef44441f;border:1px solid rgba(239,68,68,.4);color:#fecaca}.btn-primary{height:42px;padding:0 16px;border:0;border-radius:10px;background:var(--accent);color:var(--bg);font-weight:600;font-size:14px}.btn-primary:disabled{opacity:.55}.btn-primary--small{height:34px;justify-self:start;font-size:13px}.btn-ghost{height:40px;padding:0 14px;border-radius:10px;border:1px solid var(--line);background:none;font-size:14px}.link-btn{border:0;background:none;color:var(--accent);padding:4px;font-size:13px}.muted{margin:0;color:var(--ink-dim);font-size:12.5px}.modal{position:fixed!important;z-index:30!important;width:min(860px,calc(100% - 24px));max-height:calc(100dvh - 40px);padding:0;border:1px solid var(--line);border-radius:16px;background:#0f1a2e;color:var(--ink);box-shadow:0 30px 80px #0000008c}.modal--small{width:min(400px,calc(100% - 24px))}.modal::backdrop{background:#050912a6}.modal__body{display:grid;gap:12px;padding:20px 22px}.modal__body h2{margin:0;font-size:19px}.modal__head{display:flex;align-items:center;justify-content:space-between}.modal__head .info__close{position:static}.modal__actions{display:flex;justify-content:flex-end;gap:8px}.user-form{display:grid;gap:12px;padding:14px;border:1px solid var(--line);border-radius:12px;background:#ffffff05}.user-form h3{margin:0;font-size:15px}.user-form__grid{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:10px 12px}.field--wide{grid-column:1 / -1}.users-wrap{overflow-x:auto}.report-modal{width:min(1120px,calc(100% - 24px))}.report-filters{display:flex;flex-wrap:wrap;gap:12px;align-items:end}.report-filters .field{flex:1 1 145px}.report-stats{display:grid;grid-template-columns:repeat(auto-fit,minmax(125px,1fr));gap:12px;margin:20px 0}.report-stats>div{padding:14px;border:1px solid var(--line, #dfe3ea);border-radius:12px}.report-stats dt{font-size:12px}.report-stats dd{margin:6px 0 0;font-size:24px;font-weight:700}.report-table{width:100%;border-collapse:collapse;font-size:13px}.report-table th,.report-table td{padding:10px;border-bottom:1px solid var(--line, #dfe3ea);text-align:left}.report-table th{white-space:nowrap}.report-group,.report-pages{display:flex;align-items:center;gap:12px;margin:16px 0}.report-group select{padding:7px;font:inherit}.report-pages{justify-content:space-between}table.users{width:100%;border-collapse:collapse;font-size:13px}table.users th{text-align:left;font-weight:500;color:var(--ink-faint);font-size:11.5px;padding:6px 8px;border-bottom:1px solid var(--line)}table.users td{padding:8px;border-bottom:1px solid var(--line);vertical-align:middle}table.users td b{display:block;font-weight:600}table.users td small{color:var(--ink-faint);font-size:11px}table.users tr.is-inactive td{opacity:.55}.badge{padding:2px 8px;border-radius:999px;font-size:11.5px;font-weight:600}.badge--ok{background:#10b98126;color:#34d399}.badge--off{background:#64748b33;color:#94a3b8}@media (max-width: 560px){.user-form__grid{grid-template-columns:1fr}table.users th:nth-child(4),table.users td:nth-child(4){display:none}}.lights-btn{position:relative;display:inline-flex;align-items:center;gap:8px;height:44px;padding:0 14px 0 12px;border:1px solid var(--line);border-radius:999px;background:var(--glass);backdrop-filter:blur(14px);-webkit-backdrop-filter:blur(14px);font-size:14px;font-weight:500;transition:border-color .2s,background .2s}.lights-btn svg{width:20px;height:20px;fill:none;stroke:var(--warm);stroke-width:1.7;stroke-linecap:round;stroke-linejoin:round}.lights-btn:hover{border-color:#ece7da59}.lights-btn[aria-expanded=true]{border-color:var(--warm);background:color-mix(in srgb,var(--warm) 16%,var(--glass))}.lights-btn__count{min-width:22px;height:22px;padding:0 6px;display:grid;place-items:center;border-radius:999px;background:var(--warm);color:var(--bg);font-family:var(--mono);font-size:12px}.lights-btn.is-offline:after{content:"";position:absolute;top:6px;right:6px;width:8px;height:8px;border-radius:50%;background:var(--bad);box-shadow:0 0 0 2px var(--bg)}.bulb{flex:none;width:10px;height:10px;border-radius:50%;background:#3a4459;border:1px solid rgba(255,255,255,.12);transition:background .25s,box-shadow .25s}.is-on>.bulb,.is-on .bulb,.bulb.is-on{background:var(--warm);border-color:var(--warm);box-shadow:0 0 10px 2px #ffc85a8c}.switch{flex:none;position:relative;width:44px;height:26px;padding:0;border:1px solid var(--line);border-radius:999px;background:#253048;transition:background .25s,border-color .25s}.switch i{position:absolute;top:3px;left:3px;width:18px;height:18px;border-radius:50%;background:var(--ink-dim);transition:transform .25s cubic-bezier(.65,0,.35,1),background .25s}.switch[aria-checked=true]{background:color-mix(in srgb,var(--warm) 80%,#000);border-color:var(--warm)}.switch[aria-checked=true] i{transform:translate(18px);background:#fff}.switch:focus-visible{outline:2px solid var(--warm);outline-offset:2px}.is-pending .switch i{animation:pulse .8s ease-in-out infinite}@keyframes pulse{50%{opacity:.35}}.room-label.is-lit:before{content:"";display:inline-block;vertical-align:middle;width:6px;height:6px;margin:-2px 5px 0 0;border-radius:50%;background:var(--warm);box-shadow:0 0 6px 1px #ffc85ab3}.room-label.is-lit{color:#fff;font-weight:600;text-shadow:0 1px 3px rgba(0,0,0,.95),0 0 12px rgba(255,200,90,.7)}.room-label.is-unlit{opacity:.42}.info__booking{margin-top:14px;padding:12px;border:1px solid var(--line);border-radius:10px;background:#ffffff08}.info__booking-header{display:flex;align-items:center;justify-content:space-between;gap:8px;margin-bottom:8px}.info__booking-lbl{font-size:11px;font-weight:600;text-transform:uppercase;letter-spacing:.06em;color:var(--ink-dim)}.info__booking-meta{font-size:11px;color:var(--ink-dim);text-align:right;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;max-width:150px}.status-selector{display:grid;grid-template-columns:repeat(3,1fr);gap:6px}.status-btn{display:inline-flex;align-items:center;justify-content:center;gap:5px;height:34px;padding:0 4px;border-radius:8px;font-size:11.5px;font-weight:600;cursor:pointer;background:#ffffff0d;border:1px solid var(--line);color:var(--ink-dim);transition:all .15s ease;white-space:nowrap}.status-btn i{width:7px;height:7px;border-radius:50%;background:currentColor;opacity:.7;flex-shrink:0}.status-btn:hover{background:#ffffff1a;color:#fff;border-color:#ffffff40}.status-btn.is-active{font-weight:700;transform:scale(1.02)}.status-btn.is-active i{opacity:1;box-shadow:0 0 8px currentColor}.status-btn--available.is-active{background:#10b98138;border-color:#10b981;color:#34d399}.status-btn--occupied.is-active{background:#ef444438;border-color:#ef4444;color:#f87171}.status-btn--restricted.is-active{background:#64748b38;border-color:#94a3b8;color:#cbd5e1}.info__status-row{display:flex;align-items:center;justify-content:space-between;gap:8px}.status-pill{display:inline-flex;align-items:center;gap:7px;padding:4px 10px;border-radius:999px;font-size:12.5px;font-weight:600;background:#ffffff0f}.status-pill.is-available{background:#10b98126;border:1px solid rgba(16,185,129,.4);color:#34d399}.status-pill.is-occupied{background:#ef444426;border:1px solid rgba(239,68,68,.4);color:#f87171}.status-pill.is-restricted{background:#64748b26;border:1px solid rgba(100,116,139,.4);color:#94a3b8}.status-dot{width:8px;height:8px;border-radius:50%;background:currentColor;box-shadow:0 0 8px currentColor}.info__booking-form{display:grid;grid-template-columns:minmax(0,1fr);gap:12px;margin-top:12px}.info__booking-form>*{min-width:0;max-width:100%}.info__booking-form .booking-input,.info__booking-form .booking-select{width:100%;box-sizing:border-box;min-height:40px}.info__booking-form .btn-action{width:100%;height:auto;min-height:44px;padding:10px 12px;white-space:normal}.booking-hint{margin:0;font-size:11px;line-height:1.5;color:var(--ink-faint)}.info__booking-form[hidden]{display:none}.booking-input,.booking-select{height:32px;padding:0 9px;border-radius:7px;border:1px solid var(--line);background:#00000047;color:var(--ink);font:inherit;font-size:12px;min-width:0}.booking-input:focus,.booking-select:focus{outline:none;border-color:#10b981}.booking-row{display:flex;gap:8px}.booking-field{display:grid;gap:4px;flex:1;min-width:0;font-size:11px;color:var(--ink-faint)}.booking-field--narrow{flex:0 0 86px}.booking-field input{width:100%;color-scheme:dark}#btnCancelBooking{width:100%;margin-top:8px}.info__booking-actions{display:flex;gap:8px;margin-top:10px}.btn-action{flex:1;height:36px;padding:0 12px;border-radius:8px;font-size:13px;font-weight:600;border:0;cursor:pointer;transition:transform .15s,opacity .15s}.btn-action:active{transform:scale(.97)}.btn-action--book{background:#10b981;color:#042416}.btn-action--book:hover{background:#059669}.btn-action--release{background:#ef444433;color:#fca5a5;border:1px solid rgba(239,68,68,.4)}.btn-action--release:hover{background:#ef444459}.btn-action--restrict{flex:0 0 auto;padding:0 10px;font-size:11.5px;background:#64748b29;color:#cbd5e1;border:1px solid rgba(100,116,139,.35)}.btn-action--restrict:hover{background:#64748b47}.btn-action--restrict.is-restricted{background:#10b98126;color:#34d399;border-color:#10b98166}.btn-action[hidden]{display:none}.info__light{pointer-events:auto;display:flex;align-items:center;gap:10px;margin-top:14px;padding:10px 12px;border:1px solid var(--line);border-radius:10px;background:#ffffff08;transition:border-color .25s,background .25s}.info__light[hidden]{display:none}.info__light.is-on{border-color:color-mix(in srgb,var(--warm) 50%,transparent);background:#ffc85a12}.info__light.is-on .bulb{background:var(--warm);border-color:var(--warm);box-shadow:0 0 10px 2px #ffc85a8c}.info__light-txt{flex:1;display:flex;flex-direction:column;line-height:1.25;min-width:0}.info__light-txt b{font-size:14px;font-weight:600}.info__light-txt small{font-family:var(--mono);font-size:10px;color:var(--ink-faint);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.lights{top:calc(var(--top-h) + 12px);right:var(--gutter);bottom:calc(var(--gutter) + 146px + env(safe-area-inset-bottom));width:var(--panel-w);display:flex;flex-direction:column;background:var(--glass);border:1px solid var(--line);border-radius:var(--radius);backdrop-filter:blur(16px);-webkit-backdrop-filter:blur(16px);box-shadow:0 20px 50px #00000059;animation:rise .3s ease both;overflow:hidden;overflow:clip}.lights[hidden]{display:none}.lights>*{flex-shrink:0}.lights>.lights__list{flex:1 1 auto;flex-shrink:1;min-height:96px}.hero.lights-open .info{right:calc(var(--gutter) + var(--panel-w) + 12px)}.lights__head{display:flex;justify-content:space-between;align-items:flex-start;padding:16px 18px 10px}.lights__title{margin:0;font-size:18px;font-weight:600}.lights__title span{color:var(--warm)}.lights__close{position:static;pointer-events:auto}.conn{display:flex;align-items:center;gap:6px;margin:4px 0 0;font-size:11.5px;color:var(--ink-dim)}.conn i{width:8px;height:8px;border-radius:50%;background:var(--bad)}.conn.is-ok i{background:var(--ok);box-shadow:0 0 0 3px #4fd18b2e}.panel-tabs{display:grid;grid-template-columns:1fr 1fr;padding:0 18px 10px;gap:8px}.panel-tab{height:36px;border:1px solid var(--line);border-radius:8px;background:transparent;color:var(--ink-dim);font-size:13px;font-weight:500;transition:all .2s}.panel-tab.is-active{background:#ffffff14;color:#fff;border-color:var(--accent);font-weight:600}.booking-filters{display:flex;gap:6px;padding:10px 18px 4px;overflow-x:auto;scrollbar-width:none}.booking-filters::-webkit-scrollbar{display:none}.filter-pill{padding:4px 10px;border-radius:999px;border:1px solid var(--line);background:transparent;font-size:12px;color:var(--ink-dim);white-space:nowrap;cursor:pointer;transition:all .2s}.filter-pill.is-active{background:#ffffff1f;color:#fff;border-color:#ffffff59;font-weight:600}.zone__booking-badge{font-size:11px;padding:2px 8px;border-radius:999px;font-weight:500;white-space:nowrap}.zone__booking-badge.is-available{background:#10b98126;color:#34d399}.zone__booking-badge.is-occupied{background:#ef444426;color:#f87171}.zone__booking-badge.is-restricted{background:#64748b26;color:#94a3b8}.zone__status-select{height:28px;padding:0 24px 0 10px;border-radius:999px;font-size:11.5px;font-weight:600;font-family:inherit;border:1px solid var(--line);cursor:pointer;background-color:#ffffff0f;-moz-appearance:none;appearance:none;-webkit-appearance:none;background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='10' height='6' viewBox='0 0 10 6'%3E%3Cpath d='M1 1l4 4 4-4' stroke='%2394a3b8' stroke-width='1.5' fill='none' stroke-linecap='round'/%3E%3C/svg%3E");background-repeat:no-repeat;background-position:right 8px center;transition:all .2s;min-width:104px}.zone__status-select:focus{outline:none;border-color:var(--warm)}.zone__status-select.is-available{background-color:#10b98126;border-color:#10b98166;color:#34d399}.zone__status-select.is-occupied{background-color:#ef444426;border-color:#ef444466;color:#f87171}.zone__status-select.is-restricted{background-color:#64748b26;border-color:#64748b66;color:#94a3b8}.zone__status-select option{background-color:#121927;color:#fff}.zone__quick-btn{padding:5px 10px;font-size:12px;border-radius:6px;border:0;cursor:pointer;font-weight:600;white-space:nowrap;transition:transform .15s,opacity .15s}.zone__quick-btn:active{transform:scale(.95)}.zone__quick-btn--book{background:#10b98133;color:#34d399;border:1px solid rgba(16,185,129,.4)}.zone__quick-btn--book:hover{background:#10b98159}.zone__quick-btn--release{background:#ef444433;color:#f87171;border:1px solid rgba(239,68,68,.4)}.zone__quick-btn--release:hover{background:#ef444459}.lights__summary{padding:0 18px}.lights__summary p{margin:6px 0 0;font-size:12.5px;color:var(--ink-dim)}.lights__summary b{font-family:var(--mono);color:var(--warm);font-weight:500}.lights__meter{height:4px;border-radius:4px;background:#ffffff12;overflow:hidden}.lights__meter span{display:block;height:100%;width:0;background:var(--warm);transition:width .35s ease}.lights__bulk{display:grid;grid-template-columns:1fr 1fr;gap:8px;padding:12px 18px 0}.lights__bulk[hidden],.booking-filters[hidden]{display:none}.bulk{height:36px;border:1px solid var(--line);border-radius:10px;background:#ffffff08;font-size:13px}.bulk:hover{border-color:#ece7da59}.bulk[data-all=on]{border-color:color-mix(in srgb,var(--warm) 45%,transparent);color:var(--warm)}.lights__search{margin:12px 18px 6px;height:36px;padding:0 12px;border:1px solid var(--line);border-radius:10px;background:#0003;color:var(--ink);font:inherit;font-size:13px}.lights__search:focus{outline:none;border-color:var(--warm)}.lights__list{flex:1;overflow-y:auto;padding:4px 10px 14px;scrollbar-width:thin}.zgroup{margin-top:10px}.zgroup[hidden],.zone[hidden]{display:none}.zgroup__head{display:flex;align-items:center;gap:8px;padding:4px 8px;font-size:11.5px;color:var(--ink-dim)}.zgroup__head i{width:9px;height:9px;border-radius:3px;background:var(--c)}.zgroup__head span{flex:1}.zgroup__all{border:0;background:none;padding:2px 4px;font-size:11.5px;color:var(--warm)}.zgroup__all:hover{text-decoration:underline}.zone{display:flex;align-items:center;gap:8px;padding:4px 8px 4px 4px;border-radius:10px;transition:background .2s}.zone:hover{background:#ffffff0d}.zone.is-selected{background:#f2b33d1f;box-shadow:inset 0 0 0 1px #f2b33d66}.zone__name{flex:1;min-width:0;display:flex;align-items:center;gap:10px;border:0;background:none;padding:6px;text-align:left}.zone__name>span:last-child{display:flex;flex-direction:column;min-width:0;line-height:1.25}.zone__name b{font-size:13px;font-weight:500;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.zone__name small{font-size:10.5px;color:var(--ink-faint);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.info__access{margin-top:10px;padding:11px 12px;border-radius:12px;background:#0ea5e90f;border:1px solid rgba(56,189,248,.22);display:flex;flex-direction:column;gap:9px}.info__access-header{display:flex;align-items:center;justify-content:space-between;gap:6px;flex-wrap:wrap}.info__access-title{display:flex;min-width:0;flex-wrap:wrap;align-items:center;gap:6px;font-size:12px;font-weight:600;color:#7dd3fc}.info__access-dev{white-space:nowrap;font-family:var(--mono);font-size:10px;padding:2px 6px;border-radius:5px;background:#38bdf826;color:#38bdf8;border:1px solid rgba(56,189,248,.3)}.info__access-policy{max-width:100%;overflow-wrap:anywhere;font-size:10.5px;padding:2px 7px;border-radius:99px;background:#ffffff12;color:var(--ink-dim);font-weight:500}.door-selector{grid-template-columns:repeat(3,minmax(0,1fr));min-width:0}.door-selector .status-btn{min-width:0;min-height:38px;height:auto;padding:7px 4px;box-sizing:border-box;white-space:normal;line-height:1.35}.door-selector .status-btn span{min-width:0;overflow-wrap:normal;word-break:normal}.door-selector .status-btn.is-active{transform:none}.door-selector .door-btn--locked.is-active{background:#0ea5e938;border-color:#38bdf8;color:#bae6fd}.door-selector .door-btn--unlocked.is-active{background:#10b9813d;border-color:#34d399;color:#a7f3d0}.door-selector .door-btn--lockdown.is-active{background:#ef44443d;border-color:#f87171;color:#fecaca}.facescan-box{display:flex;flex-direction:column;gap:8px;padding-top:6px;border-top:1px solid rgba(255,255,255,.08)}.facescan-hud{display:flex;min-width:0;align-items:center;gap:10px;padding:8px 10px;border-radius:10px;background:#070c16a6;border:1px solid rgba(56,189,248,.25);transition:border-color .25s ease,background .25s ease}.facescan-hud.is-scanning{border-color:#38bdf8;background:#0ea5e924}.facescan-hud.is-granted{border-color:#10b981;background:#10b98124}.facescan-hud.is-denied{border-color:#ef4444;background:#ef444426}.facescan-reticle{position:relative;width:40px;height:40px;flex-shrink:0;color:#38bdf8;display:grid;place-items:center;overflow:hidden;border-radius:8px;background:#38bdf814}.facescan-hud.is-granted .facescan-reticle{color:#34d399;background:#10b9811f}.facescan-hud.is-denied .facescan-reticle{color:#f87171;background:#ef44441f}.facescan-reticle svg{width:32px;height:32px}.facescan-laser{position:absolute;left:3px;right:3px;height:2px;background:linear-gradient(90deg,transparent,#38bdf8,#a5f3fc,#38bdf8,transparent);box-shadow:0 0 8px #38bdf8;opacity:0;top:6px}.facescan-hud.is-scanning .facescan-laser{opacity:1;animation:faceLaserScan .9s ease-in-out infinite alternate}@keyframes faceLaserScan{0%{top:5px}to{top:33px}}.facescan-status{display:flex;flex:1;flex-direction:column;min-width:0;gap:2px}.facescan-status b{font-size:11.5px;font-weight:600;color:var(--ink)}.facescan-status small{font-size:10.5px;color:var(--ink-dim);line-height:1.3}.facescan-controls{display:flex;flex-direction:column;gap:6px}.btn-action--scan{background:linear-gradient(135deg,#0284c7,#0ea5e9);color:#fff;font-weight:600;border:1px solid rgba(125,211,252,.35);padding:8px 12px;border-radius:8px;font-size:12px;cursor:pointer;transition:transform .12s ease,filter .15s ease}.btn-action--scan:hover{filter:brightness(1.1)}.btn-action--scan:active{transform:scale(.98)}.panel-tabs--3{display:grid;grid-auto-flow:column;grid-auto-columns:1fr}.access-controls-panel{display:flex;flex-direction:column;gap:8px;padding:0 18px 8px}.access-profile-bar{display:flex;align-items:center;gap:8px;font-size:11.5px;color:var(--ink-dim)}.access-profile-bar label{white-space:nowrap;font-weight:500}.access-profile-bar .booking-select{flex:1;min-width:0}.zone__access-actions{display:flex;align-items:center;gap:5px}.zone__scan-btn{padding:4px 8px;border-radius:6px;border:1px solid rgba(56,189,248,.35);background:#0ea5e926;color:#7dd3fc;font-size:11px;font-weight:600;cursor:pointer;white-space:nowrap;transition:background .15s,border-color .15s}.zone__scan-btn:hover{background:#0ea5e94d;border-color:#38bdf8}.access-logs{border-top:1px solid var(--line);padding:10px 16px 12px;background:#070b148c;display:flex;flex-direction:column;gap:6px;max-height:175px;overflow-y:auto}.access-logs__head{font-size:11px;font-weight:600;color:var(--ink-dim);display:flex;justify-content:space-between}.access-logs__list{display:flex;flex-direction:column;gap:5px}.access-log-item{display:flex;align-items:center;justify-content:space-between;gap:8px;padding:5px 8px;border-radius:7px;background:#ffffff08;border:1px solid rgba(255,255,255,.06);font-size:11px}.access-log-item.is-granted{border-left:3px solid #10b981}.access-log-item.is-denied{border-left:3px solid #ef4444;background:#ef44440f}.access-log-item__main{display:flex;flex-direction:column;min-width:0}.access-log-item__main b{font-size:11px;font-weight:600;color:var(--ink);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.access-log-item__main small{font-size:10px;color:var(--ink-dim);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.access-log-item__meta{display:flex;flex-direction:column;align-items:flex-end;flex-shrink:0;font-family:var(--mono);font-size:9.5px;color:var(--ink-faint)}.access-log-item__badge{font-family:var(--sans);font-size:9.5px;font-weight:600;padding:1px 5px;border-radius:4px}.access-log-item.is-granted .access-log-item__badge{color:#34d399;background:#10b98126}.access-log-item.is-denied .access-log-item__badge{color:#f87171;background:#ef444426}.facescan-marker{display:inline-flex;align-items:center;gap:4px;padding:2px 7px;border-radius:999px;font-size:10px;font-weight:600;font-family:var(--mono);background:#0b1220e0;border:1px solid #38bdf8;color:#e0f2fe;box-shadow:0 2px 8px #00000073,0 0 10px #38bdf859;pointer-events:auto;cursor:pointer;-webkit-user-select:none;user-select:none;white-space:nowrap;transition:transform .15s ease,border-color .2s,box-shadow .2s}.facescan-marker:hover{transform:scale(1.1)}.facescan-marker.is-unlocked{border-color:#10b981;color:#d1fae5;box-shadow:0 2px 8px #00000073,0 0 12px #10b98180}.facescan-marker.is-lockdown{border-color:#ef4444;color:#fee2e2;box-shadow:0 2px 8px #00000073,0 0 12px #ef444480}.facescan-marker__dot{width:6px;height:6px;border-radius:50%;background:#38bdf8}.facescan-marker.is-unlocked .facescan-marker__dot{background:#10b981}.facescan-marker.is-lockdown .facescan-marker__dot{background:#ef4444}.toast{left:50%;bottom:calc(var(--gutter) + 70px + env(safe-area-inset-bottom));transform:translate(-50%,12px);max-width:calc(100% - 2 * var(--gutter));padding:10px 16px;border-radius:10px;background:#3a1d22;border:1px solid rgba(255,107,91,.45);color:#ffd9d4;font-size:13px;opacity:0;pointer-events:none;transition:opacity .25s,transform .25s;z-index:5!important}.toast.is-shown{opacity:1;transform:translate(-50%)}@container (max-width: 300px){.door-selector{grid-template-columns:minmax(0,1fr)}.facescan-hud{align-items:flex-start;flex-wrap:wrap}.facescan-status{flex-basis:150px}}@media (max-width: 1599px){.timeslot-bar{order:3}}@media (max-width: 1100px){.hint{display:none}.topbar__aux{position:absolute;top:calc(100% + 10px);right:var(--gutter)}.hero.lights-open .info{right:auto;left:var(--gutter)}}@media (max-width: 960px){.brand__text{display:none}.floor-switch__btn{padding:6px 10px 6px 6px;gap:0}.floor-switch__lbl,.lights-btn__lbl{display:none}.lights-btn{padding:0 10px}}@media (max-width: 720px){.brand__mark{width:38px;height:38px}.brand__text small{display:none}.floor-switch__btn{padding:4px 8px 4px 4px}.floor-switch__num{width:26px;height:26px}.timeslot-bar{flex:1 1 100%}.timeslot-btn{flex:1;flex-direction:column;justify-content:center;gap:0;height:40px;padding:0 4px;line-height:1.15}.timeslot-btn__icon{display:none}.timeslot-btn__time{font-size:10px}.intro{top:calc(var(--top-h) + 10px);right:var(--gutter);max-width:none}.intro__eyebrow{display:none}.intro__title{font-size:26px}.intro__title br{display:none}.intro__title{padding-right:130px}.intro__lede{display:none}.stats{margin-top:8px;gap:18px}.stats dd{font-size:15px}.stats div{padding-top:4px}.legend{left:0;right:0;max-width:none;bottom:calc(var(--gutter) + 56px + env(safe-area-inset-bottom));flex-wrap:nowrap;overflow-x:auto;padding:0 var(--gutter);scrollbar-width:none}.legend::-webkit-scrollbar{display:none}.tools{left:var(--gutter);justify-content:flex-end}.tool-group{flex-direction:row}.tool-group .tool+.tool{border-top:0;border-left:1px solid var(--line)}.scale{margin-right:auto}.hero{--info-bottom: calc(var(--gutter) + 104px + env(safe-area-inset-bottom))}.info{left:var(--gutter);right:var(--gutter);width:auto;padding:14px 16px}.info__title{font-size:18px}.topbar__right{gap:6px}.mode-switch__btn{padding:6px 10px;gap:4px}.mode-switch__lbl{display:none}.lights-btn{height:40px;padding:0 10px}.lights-btn__lbl{display:none}.lights{top:auto;left:0;right:0;bottom:0;width:auto;max-height:68dvh;border-radius:18px 18px 0 0;padding-bottom:env(safe-area-inset-bottom);z-index:4!important}.toast{z-index:6!important}}@media (max-width: 360px){.topbar{gap:8px}.mode-switch__btn{padding:6px 8px}.lights-btn svg{display:none}}@media (max-height: 520px) and (min-width: 721px){.intro__eyebrow,.intro__lede,.intro__title br{display:none}.intro__title{font-size:24px}.stats{margin-top:6px}.stats dd{font-size:16px}.hint{display:none}.tool-group{flex-direction:row}.tool-group .tool+.tool{border-top:0;border-left:1px solid var(--line)}.hero{--info-bottom: calc(var(--gutter) + 64px + env(safe-area-inset-bottom))}.lights{bottom:calc(var(--gutter) + env(safe-area-inset-bottom));overflow-y:auto;overscroll-behavior:contain}.lights>.lights__list{flex:none;overflow:visible}.hero.lights-open .tools{right:calc(var(--gutter) + var(--panel-w) + 12px)}.hero.lights-open .legend{display:none}}@media (prefers-reduced-motion: reduce){*,*:before,*:after{animation-duration:.01ms!important;transition-duration:.01ms!important}}
