.hotel-mobile-list { display:none; }
.hotel-room-link { color:inherit;text-decoration:none;font-weight:600; }
.hotel-room-link:hover { color:var(--bs-primary); }
.room-picks { display:grid;grid-template-columns:repeat(auto-fill,minmax(125px,1fr));gap:10px; }
.room-pick { display:flex;align-items:center;gap:8px;border:1px solid #dce2e8;border-radius:10px;padding:12px;cursor:pointer;min-height:52px; }
.room-pick:has(input:checked) { background:#eef5ff;border-color:#4386df;color:#14539c; }
.room-pick input { width:18px;height:18px;flex-shrink:0; }
.room-pick small { display:block;font-size:12px;color:#6c757d; }
.room-pick:focus-within { outline:2px solid #4386df;outline-offset:2px; }
.hotel-room-table td { vertical-align:middle; }
@media (max-width:767.98px), (hover:none) and (pointer:coarse) {
 .hotel-desktop-list { display:none; }
 .hotel-mobile-list { display:block; }
 .hotel-swipe-row { position:relative;overflow:hidden;border-bottom:1px solid #edf0f3;background:#f1f4f7; }
 .hotel-swipe-row:last-child { border-bottom:0; }
 .hotel-swipe-actions { position:absolute;inset:0 0 0 auto;width:216px;display:flex;align-items:stretch;visibility:hidden; }
 .hotel-swipe-row.open .hotel-swipe-actions,.hotel-swipe-row.dragging .hotel-swipe-actions { visibility:visible; }
 .hotel-swipe-actions button,.hotel-swipe-actions a { width:72px;border:0;border-radius:0;display:flex;align-items:center;justify-content:center;text-decoration:none;font-size:14px;padding:5px; }
 .hotel-swipe-actions .edit { background:#e8effa;color:#1a579e; }
 .hotel-swipe-actions .delete { background:#fbeaea;color:#b02a37; }
 .hotel-swipe-actions .types { background:#e6f3ed;color:#176743; }
 .hotel-slide { position:relative;z-index:1;display:flex;align-items:center;min-height:70px;background:white;padding:20px 16px;touch-action:pan-y;transition:transform .18s ease;user-select:none;-webkit-user-select:none;overflow-wrap:anywhere; }
 .hotel-swipe-row.open .hotel-slide { transform:translateX(-216px); }
 .hotel-swipe-row.dragging .hotel-slide { transition:none; }
 .room-picks { grid-template-columns:repeat(auto-fill,minmax(80px,1fr));gap:10px; }
 .room-pick { position:relative;justify-content:center;text-align:center;padding:12px 6px;min-height:58px; }
 .room-pick input { position:absolute;opacity:0;width:1px;height:1px; }
 .room-pick:has(input:checked) { background:#2268b9;color:#fff;border-color:#2268b9; }
 .room-pick:has(input:checked) small { color:#e5effc; }
 .hotel-room-table .room-created,.hotel-room-table .room-id { display:none; }
 .hotel-room-table td,.hotel-room-table th { padding:12px 8px; }
}
@media (prefers-reduced-motion:reduce) { .hotel-slide { transition:none; } }
/* Hotel and room inventory cards share the same compact visual language. */
.hotel-card-grid,.room-card-grid { display:grid;grid-template-columns:repeat(auto-fit,minmax(min(100%,340px),1fr));gap:16px; }
.hotel-mobile-list { display:none; }
.inventory-card { border:1px solid var(--bs-border-color,#edf0f4);border-radius:15px;overflow:hidden;background:var(--bs-body-bg,#fff);box-shadow:0 3px 12px #182d4910; }
.card-body-link { display:block;padding:20px;text-decoration:none;color:var(--bs-body-color,#18212d); }
.list-card-top { display:flex;align-items:center;justify-content:space-between;gap:16px; }
.list-card-name { font-size:19px;font-weight:600;overflow-wrap:anywhere; }
.list-card-bottom { display:flex;justify-content:space-between;align-items:center;gap:8px;margin-top:12px;font-size:13px;font-weight:400;color:var(--bs-secondary-color,#8b95a5); }
.list-card-bottom time { text-align:right;font-size:12px; }
.swipe-hint { font-size:28px;line-height:1;color:var(--bs-secondary-color,#8b95a5); }
.desktop-card-actions { display:flex;justify-content:flex-end;gap:8px;padding:0 20px 16px; }
.room-network { display:flex;flex-wrap:wrap;gap:8px 18px;margin-top:14px;color:var(--bs-secondary-color,#8b95a5);font-size:13px;font-weight:400;overflow-wrap:anywhere; }
.presence-badge { display:inline-block;margin-top:16px;font-size:12px;font-weight:400;border-radius:6px;padding:4px 9px; }
.presence-badge.online { color:#168050 !important;background:#eaf8ef; }
.presence-badge.offline { color:#cf3b47 !important;background:#fff0f1; }
.presence-badge.unconfigured { color:#437abb;background:#edf4ff; }
.room-filters { display:flex;gap:10px;padding:10px;background:var(--bs-body-bg,#fff);border:1px solid var(--bs-border-color,#edf0f4);border-radius:12px; }
.room-filter { border:0;border-radius:18px;background:var(--bs-tertiary-bg,#f2f4f7);color:var(--bs-body-color,#444);min-width:68px;padding:7px 16px; }
.room-filter.active { background:#405265;color:white; }
.room-card-grid .hotel-swipe-actions { display:none; }
@media (min-width:768px) and (hover:hover) { .inventory-card .swipe-hint { display:none; } }
@media (max-width:767.98px), (hover:none) and (pointer:coarse) {
 .hotel-desktop-list { display:none; }
 .hotel-mobile-list { display:grid; }
 .hotel-card-grid,.room-card-grid { grid-template-columns:minmax(0,1fr);gap:14px; }
 .inventory-card.hotel-swipe-row { border:1px solid var(--bs-border-color,#edf0f4); }
 .inventory-card .hotel-slide { display:block;background:var(--bs-body-bg,#fff);padding:20px; }
 .inventory-card .desktop-card-actions { display:none; }
 .room-card-grid .hotel-swipe-actions { display:flex; }
 .room-swipe-row .hotel-swipe-actions { width:144px; }
 .room-swipe-row.open .hotel-slide { transform:translateX(-144px); }
}

/* Room endpoint counts and room-type cards. */
.room-card-meta { display:flex;align-items:baseline;justify-content:space-between;gap:12px;margin-top:14px; }
.room-networks { min-width:0; }
.room-card-meta .room-network { margin-top:0; }
.room-card-meta .room-network + .room-network { margin-top:8px; }
.room-card-meta .device-count { flex-shrink:0; }
.room-network span { max-width:100%; }
.device-count { color:var(--bs-secondary-color,#7c8794);font-size:13px;font-weight:400;white-space:nowrap; }
.type-card-grid { display:grid;grid-template-columns:repeat(auto-fill,minmax(min(100%,360px),1fr));gap:16px;align-items:start; }
.type-card { border:1px solid var(--bs-border-color,#e5e9ed);border-radius:14px;background:var(--bs-body-bg,#fff);overflow:hidden; }
.type-rooms summary { display:flex;justify-content:space-between;align-items:center;gap:12px;padding:20px;cursor:pointer;list-style:none; }
.type-rooms summary::-webkit-details-marker { display:none; }
.type-rooms summary:focus-visible { outline:2px solid #4386df;outline-offset:-3px; }
.type-name { display:block;font-size:17px;overflow-wrap:anywhere; }
.type-stats { display:block;color:var(--bs-secondary-color,#7c8794);font-size:13px;margin-top:9px; }
.type-expand { color:var(--bs-secondary-color,#7c8794);display:flex;align-items:center;gap:7px;font-size:13px;white-space:nowrap; }
.expand-arrow { display:block;width:8px;height:8px;border-right:1.5px solid currentColor;border-bottom:1.5px solid currentColor;transform:rotate(45deg);margin:0 2px 4px 0;flex-shrink:0;transition:transform .15s; }
.type-rooms[open] .expand-arrow { transform:rotate(225deg);margin-bottom:0; }
.type-room-list { border-top:1px solid var(--bs-border-color,#edf0f4);padding:0 20px;max-height:360px;overflow-y:auto; }
.type-room-line { display:flex;justify-content:space-between;align-items:center;gap:12px;padding:10px 0;border-bottom:1px solid var(--bs-border-color,#edf0f4); }
.type-room-line a { color:inherit;text-decoration:none;overflow-wrap:anywhere; }
.type-unbind-all { padding:8px 0;text-align:right; }
.type-actions { display:flex;justify-content:space-between;align-items:center;padding:10px 12px;border-top:1px solid var(--bs-border-color,#edf0f4); }
.type-actions-right { display:flex;gap:6px; }
.type-editor-tabs .nav-link { flex:1;text-align:center;padding:12px; }
.type-editor-tabs+.tab-content { min-height:180px; }
@media (max-width:767.98px), (hover:none) and (pointer:coarse) {
 .type-card-grid { grid-template-columns:minmax(0,1fr); }
 .type-actions button,.type-room-line button { min-height:42px; }
}

/* Whole-label targets preserve native checkbox/change behavior on both layouts. */
.selection-tile { cursor:pointer; }
 .selection-grid { display:grid;grid-template-columns:repeat(auto-fill,minmax(105px,1fr));gap:10px;margin:0; }
 .selection-grid > .col-md-3 { width:auto;padding:0;min-width:0; }
 .selection-tile { position:relative;display:flex;align-items:center;justify-content:center;text-align:center;height:100%;min-height:56px;margin:0;padding:12px 8px;border:1px solid #dce2e8;border-radius:10px;color:var(--bs-body-color,#333);overflow-wrap:anywhere; }
 .selection-tile .form-check-input { position:absolute;opacity:0;width:1px;height:1px;margin:0; }
 .selection-tile:has(input:checked) { background:#2268b9;color:#fff;border-color:#2268b9; }
 .selection-tile:focus-within { outline:2px solid #4386df;outline-offset:2px; }

.scene-device-row { display:flex;align-items:stretch;gap:12px;margin-bottom:10px; }
.scene-device-choice,.scene-action-choice { border:1px solid #dce2e8;border-radius:9px;padding:11px 16px;background:var(--bs-body-bg,#fff);color:var(--bs-body-color,#333);min-height:46px; }
.scene-device-row > .scene-device-choice { flex:1;text-align:left;overflow-wrap:anywhere;min-width:0; }
.scene-action-options { display:flex;gap:8px;flex-shrink:0; }
.scene-device-choice.selected,.scene-action-choice.selected { background:#2268b9;border-color:#2268b9;color:#fff; }
.scene-device-picker summary { cursor:pointer;color:#2268b9;padding:8px 0; }
.scene-device-candidates { display:grid;grid-template-columns:repeat(auto-fill,minmax(110px,1fr));gap:10px;margin-top:8px; }
.scene-device-choice:focus-visible,.scene-action-choice:focus-visible { outline:2px solid #4386df;outline-offset:2px; }
/* Scene rows support swipe on desktop and mobile; name taps do not remove. */
.scene-swipe-row { position:relative;overflow:hidden;margin-bottom:10px;border-radius:10px; }
.scene-swipe-row .hotel-swipe-actions { display:flex;position:absolute;inset:0 0 0 auto;width:72px;visibility:hidden; }
.scene-swipe-row .hotel-swipe-actions button { width:72px;border:0;background:#fbeaea;color:#b02a37; }
.scene-swipe-row.open .hotel-swipe-actions,.scene-swipe-row.dragging .hotel-swipe-actions { visibility:visible; }
.scene-swipe-row .hotel-slide { position:relative;z-index:1;display:flex;gap:12px;padding:0;min-height:46px;background:var(--bs-body-bg,#fff);margin:0;touch-action:pan-y;transition:transform .18s; }
.scene-swipe-row.open .hotel-slide { transform:translateX(-72px); }
.scene-swipe-row.dragging .hotel-slide { transition:none; }
.scene-swipe-row .scene-device-choice { display:flex;align-items:center;cursor:default; }
.inline-panel-group { border:1px solid var(--bs-border-color,#e4e8ed);border-radius:12px;padding:16px;margin-bottom:16px; }
.inline-panel-instance + .inline-panel-instance { margin-top:24px;border-top:1px solid #edf0f3;padding-top:16px; }
.panel-face { width:100%;aspect-ratio:1;display:flex;flex-direction:column;max-width:320px;margin:0 auto;border-radius:16px;overflow:hidden;background:#202b39; }
.panel-face-blank { flex:0 0 50%;min-height:0;border-bottom:1px solid #b3bbc4; }
.panel-key-grid { flex:1;min-height:0;display:grid;grid-template-columns:1fr 1fr; }
.panel-key { min-height:0;border:1px solid #46515e;background:transparent;color:#71c6bb;padding:14px 8px;overflow-wrap:anywhere; }
.panel-key:focus-visible { outline:3px solid #4386df;outline-offset:-3px; }
.panel-relay-row { display:flex;width:100%;justify-content:space-between;gap:12px;align-items:center;padding:16px 8px;background:var(--bs-body-bg,#fff);color:var(--bs-body-color,#333);border:0;border-bottom:1px solid var(--bs-border-color,#e4e8ed);text-align:left; }
.inline-binding-picker { margin-top:16px;border:1px solid #ccd7e6;border-radius:12px;padding:14px; }

.panel-binding-dialog { border:0;border-radius:16px;padding:24px;width:min(92vw,600px);max-height:80vh;overflow:auto;color:var(--bs-body-color,#333);background:var(--bs-body-bg,#fff);box-shadow:0 12px 50px #0004; }
.panel-binding-dialog::backdrop { background:#0007; }
.scene-choice-list .scene-device-row { align-items:stretch; }

.type-bind-actions { display:flex;flex-wrap:wrap;gap:4px; }

.room-filter[data-status="online"] { color:#168050 !important; }
.room-filter[data-status="offline"] { color:#cf3b47 !important; }
