.app-layout{background-color:var(--bg-color-page);min-height:100vh}.ant-layout-sider{bottom:0;box-shadow:2px 0 8px #0000000f;height:100vh;left:0;position:fixed!important;top:0;z-index:100}.ant-layout-content,.ant-layout-sider{overflow-y:auto;transition:all .3s ease}.ant-layout-content{background-color:var(--bg-color-page);min-height:calc(100vh - 64px)}.ant-layout-header{box-shadow:0 2px 8px #0000000f;transition:all .3s ease;z-index:10}@media (max-width:768px){.ant-layout-sider,.app-layout{-webkit-overflow-scrolling:touch}.ant-layout-sider{box-shadow:none;height:auto;position:relative!important}.ant-layout-content{-webkit-overflow-scrolling:touch;margin-left:0!important}.ant-layout-header{-webkit-backdrop-filter:saturate(180%) blur(10px);backdrop-filter:saturate(180%) blur(10px);margin-left:0!important;padding-top:env(safe-area-inset-top)}.app-layout{padding-bottom:env(safe-area-inset-bottom)}}.logo{align-items:center;border-bottom:1px solid var(--border-color-base);display:flex;height:64px;justify-content:center;padding:0 16px}.logo h2{font-size:16px;font-weight:600;letter-spacing:.02em;margin:0;transition:all .3s ease}[data-theme=light] .logo,[data-theme=light] .logo h2{color:#1890ff}[data-theme=dark] .logo,[data-theme=dark] .logo h2{color:#fff}.ant-layout-header h1{color:var(--primary-color);font-size:20px;font-weight:600;letter-spacing:.02em;margin:0;transition:color .3s ease}.theme-toggle{margin-right:12px;transition:all .3s ease}.user-info-container{align-items:center;background-color:initial;border-radius:8px;cursor:pointer;display:flex;gap:10px;padding:6px 12px;transition:all .3s ease}.user-info-container:hover{background-color:#0000000f;background-color:var(--bg-color-container-hover,#0000000f);transform:translateY(-1px)}.user-details{display:flex;flex-direction:column;justify-content:center;line-height:1.3;min-width:60px}.user-details .ant-typography{margin:0;transition:color .3s ease}[data-theme=dark] .user-info-container:hover{background-color:#ffffff1a}.ant-layout-sider-light .ant-menu{background:#0000}[data-theme=light] .ant-menu-light{background:#0000!important}[data-theme=light] .ant-menu-light .ant-menu-item{color:#000000d9!important;font-weight:500}[data-theme=light] .ant-menu-light .ant-menu-item-selected,[data-theme=light] .ant-menu-light .ant-menu-item:hover{background-color:#e6f7ff!important;color:#1890ff!important}[data-theme=light] .ant-menu-light .ant-menu-item-icon{color:inherit!important;font-size:16px}[data-theme=light] ul.ant-menu{background:#0000!important}[data-theme=light] .ant-layout-sider{background-color:#fff!important}[data-theme=light] .ant-menu-item{background-color:initial!important}[data-theme=dark] .ant-menu-dark{background:#0000!important}[data-theme=dark] .ant-menu-dark .ant-menu-item{color:#ffffffa6!important;font-weight:500}[data-theme=dark] .ant-menu-dark .ant-menu-item:hover{background-color:#1890ff33!important;color:#fff!important}[data-theme=dark] .ant-menu-dark .ant-menu-item-selected{background-color:#1890ff!important;color:#fff!important}[data-theme=dark] .ant-menu-dark .ant-menu-item-icon{color:inherit!important;font-size:16px}[data-theme=dark] ul.ant-menu{background:#0000!important}[data-theme=dark] .ant-layout-sider{background-color:#141414!important}[data-theme=dark] .ant-menu-item{background-color:initial!important}.mobile-drawer .ant-drawer-body{padding:0}.mobile-drawer .ant-menu{border-right:none}.mobile-drawer .logo{border-bottom:1px solid var(--border-color-base);margin:0}.mobile-header{box-shadow:0 2px 8px #0000001a;padding:0 16px;position:-webkit-sticky;position:sticky;top:0;z-index:100}.mobile-content{overflow-x:hidden;padding:16px}.mobile-menu-button{font-size:20px;padding:0 12px}@media (max-width:992px){.logo h2{font-size:15px}.ant-layout-header h1{font-size:19px}.ant-layout-content{padding:20px 16px}}@media (max-width:768px){.logo h2{font-size:14px}.ant-layout-header h1{font-size:18px}.mobile-header{padding:0 16px}.mobile-content{padding:16px}.theme-toggle{margin-right:8px}.ant-layout-content{padding:16px 12px}}@media (max-width:576px){.logo h2{font-size:13px}.ant-layout-header h1{font-size:16px}.mobile-header{padding:0 12px}.mobile-content{padding:12px}.mobile-menu-button{font-size:18px}.theme-toggle{margin-right:6px}.user-info-container{gap:8px;padding:4px 8px}.ant-layout-content{padding:12px 8px}}@media (max-width:480px){.logo{height:56px}.logo h2{font-size:12px}.ant-layout-header h1{font-size:14px}.mobile-header{padding:0 8px}.mobile-content{padding:8px}.theme-toggle{margin-right:4px}.ant-layout-content{padding:8px 4px}}.ant-menu-item,.ant-menu-submenu-title{border-radius:6px!important;margin:4px 8px!important;transition:all .3s ease!important}.ant-menu-item-icon,.ant-menu-submenu-icon{margin-right:12px!important}.ant-menu-item-selected{box-shadow:0 2px 8px #1890ff33!important}.ant-dropdown-menu{border:1px solid var(--border-color-base);border-radius:8px;box-shadow:0 4px 16px #0000001f}.ant-dropdown-menu-item{border-radius:4px;margin:2px 4px;transition:all .3s ease}.ant-dropdown-menu-item:hover{background-color:var(--bg-color-container-hover)}.ant-avatar{transition:all .3s ease}.user-info-container:hover .ant-avatar{transform:scale(1.05)}.ant-space{gap:12px}.ant-btn-group>.ant-btn{border-radius:0}.ant-btn-group>.ant-btn:first-child{border-radius:6px 0 0 6px}.ant-btn-group>.ant-btn:last-child{border-radius:0 6px 6px 0}.ant-btn-group>.ant-btn:not(:first-child):not(:last-child){border-radius:0}.dashboard-container{box-sizing:border-box;padding:16px;width:100%}.dashboard-header{align-items:center;display:flex;flex-wrap:wrap;gap:16px;justify-content:space-between;margin-bottom:24px}@media (max-width:768px){.dashboard-container{-webkit-overflow-scrolling:touch;overflow-x:hidden}.ant-card{-webkit-tap-highlight-color:transparent}.ant-table-body,.ant-table-wrapper{-webkit-overflow-scrolling:touch}}.dashboard-header h2{font-size:24px;margin:0}.dashboard-controls{gap:16px}.dashboard-actions,.dashboard-controls{align-items:center;display:flex;flex-wrap:wrap}.dashboard-actions{gap:8px}.export-button{margin-right:4px}.connection-status{flex-wrap:wrap;gap:8px}.last-update-time{color:#00000073;white-space:nowrap}.loading-container{height:300px}.charts-row,.stats-row,.tables-row{margin-bottom:24px}.table-card{height:400px;overflow:hidden}.dashboard-container .room-card{margin-bottom:-20%;margin-right:-20%;transform:scale(.8);transform-origin:top left;transition:all .3s ease}.dashboard-container .room-card:hover{box-shadow:0 4px 12px #00000026;transform:scale(.85) translateY(-2px)}.table-card .ant-table-wrapper{height:calc(100% - 57px)}.table-card .ant-table{height:100%}.table-card .ant-table-body{height:calc(100% - 39px);overflow-y:auto}.table-card .ant-table-tbody>tr>td{max-width:0}.table-card .ant-table-tbody>tr>td,.table-card .ant-table-thead>tr>th{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}@media (max-width:992px){.dashboard-container{padding:12px}.dashboard-header h2{font-size:22px}.table-card{height:350px}}@media (max-width:768px){.dashboard-container{padding:8px}.dashboard-header{align-items:flex-start;flex-direction:column;gap:12px}.dashboard-header h2{font-size:20px}.dashboard-controls{justify-content:space-between;width:100%}.charts-row .ant-col,.stats-row .ant-col,.tables-row .ant-col{margin-bottom:16px}.table-card{height:300px}}@media (max-width:576px){.dashboard-container{padding:4px}.dashboard-header h2{font-size:18px}.dashboard-controls{align-items:flex-start;flex-direction:column;gap:8px}.dashboard-actions{justify-content:space-between;width:100%}.connection-status{justify-content:flex-start;width:100%}.last-update-time{font-size:10px}.charts-row .ant-col,.stats-row .ant-col,.tables-row .ant-col{margin-bottom:12px}.table-card{height:250px}.ant-btn{min-height:44px;min-width:44px}.ant-table{font-size:12px}.ant-table-tbody>tr>td:nth-child(4),.ant-table-thead>tr>th:nth-child(4){display:none}}@media (max-width:400px){.dashboard-container{padding:2px}.dashboard-header h2{font-size:16px}.table-card{height:200px}.ant-table-tbody>tr>td:nth-child(3),.ant-table-thead>tr>th:nth-child(3){display:none}}.devices-card,.devices-container{width:100%}.devices-card .ant-card-body{padding:12px}.devices-controls{margin-bottom:12px}.connection-status{margin-bottom:8px;padding:6px 10px}.last-update-time{margin-left:12px}.devices-toolbar{align-items:center;display:flex;justify-content:space-between;margin-bottom:12px}.devices-pagination{display:flex;justify-content:flex-end;margin-top:12px}.devices-card .ant-table{font-size:12px}.devices-card .ant-table-thead>tr>th{font-size:12px;padding:6px 8px}.devices-card .ant-table-tbody>tr>td{font-size:12px;padding:4px 8px}.devices-card .ant-table-small{border:none}.devices-card .ant-table-small>.ant-table-content>.ant-table-body{margin:0}.devices-card .ant-table-pagination.ant-pagination{margin:8px 0 0}.ant-table-cell{font-size:15px!important;white-space:nowrap!important}@media (max-width:992px){.devices-toolbar{align-items:stretch;flex-direction:column;gap:10px}}@media (max-width:768px){.connection-status{align-items:flex-start;flex-direction:column;gap:6px}.last-update-time{margin-left:0;margin-top:4px}.devices-card .ant-card-body{padding:8px}}@media (max-width:576px){.devices-controls{margin-bottom:8px}.connection-status{padding:4px 6px}.devices-toolbar{gap:6px}.devices-card .ant-card-body{padding:6px}}@media (max-width:480px){.devices-controls{margin-bottom:6px}.connection-status{padding:3px 5px}.last-update-time{font-size:12px}.devices-card .ant-card-body{padding:4px}.devices-card .ant-table-tbody>tr>td,.devices-card .ant-table-thead>tr>th{font-size:12px;padding:3px 5px}}.device-logs-container{background:#f0f2f5;min-height:100vh;padding:24px}.device-logs-container .ant-card{box-shadow:0 2px 8px #0000001a}.device-logs-container .ant-statistic-title{color:#00000073;font-size:14px}.device-logs-container .ant-statistic-content{font-size:24px;font-weight:600}.device-logs-container .ant-table-cell{padding:8px 12px}.device-logs-container .ant-tag{margin:0}.connections-container{background-color:#f5f7fa;background-color:var(--bg-color-page,#f5f7fa);min-height:100vh;padding:24px;transition:background-color .3s ease}.page-header{align-items:center;display:flex;justify-content:space-between;margin-bottom:24px}.page-title{color:#262626;color:var(--text-color-primary,#262626);font-size:24px;font-weight:600;margin:0;transition:color .3s ease}.export-button{align-items:center;display:flex}.stats-cards{margin-bottom:24px}.stats-card{background-color:#fff;background-color:var(--bg-color-container,#fff);border:1px solid #f0f0f0;border:1px solid var(--border-color-base,#f0f0f0);border-radius:12px;box-shadow:0 2px 8px #00000014;height:100%;overflow:hidden;transition:all .3s ease}.stats-card:hover{box-shadow:0 4px 16px #0000001f;transform:translateY(-2px)}.stats-card .ant-card-body{align-items:center;display:flex;padding:20px}.stats-icon{align-items:center;background-color:#1890ff1a;border-radius:12px;display:flex;height:48px;justify-content:center;margin-right:16px;width:48px}.connected-card .stats-icon{background-color:#52c41a1a}.total-card .stats-icon{background-color:#1890ff1a}.max-card .stats-icon{background-color:#722ed11a}.disconnected-card .stats-icon{background-color:#ff4d4f1a}.stats-content{flex:1 1}.stats-title{color:#8c8c8c;color:var(--text-color-secondary,#8c8c8c);font-size:14px;margin-bottom:8px;transition:color .3s ease}.stats-value{color:#262626;color:var(--text-color-primary,#262626);font-size:28px;font-weight:600;line-height:1;transition:color .3s ease}.connections-card{background-color:#fff;background-color:var(--bg-color-container,#fff);border:1px solid #f0f0f0;border:1px solid var(--border-color-base,#f0f0f0);border-radius:12px;box-shadow:0 2px 8px #0000000f;margin-bottom:24px}.connections-card .ant-card-body{padding:0}.filters-section{background-color:#fafafa;background-color:var(--bg-color-container,#fafafa);border-bottom:1px solid #f0f0f0;border-bottom:1px solid var(--border-color-base,#f0f0f0);border-radius:12px 12px 0 0;padding:20px 24px;transition:background-color .3s ease,border-color .3s ease}.connections-table{padding:0 24px 24px}.connections-table .ant-table-thead>tr>th{background-color:#f5f7fa;background-color:var(--bg-color-container,#f5f7fa);border-bottom:1px solid #e8e8e8;border-bottom:1px solid var(--border-color-base,#e8e8e8);color:#595959;color:var(--text-color-secondary,#595959);font-weight:600;transition:background-color .3s ease,color .3s ease,border-color .3s ease}.connections-table .ant-table-tbody>tr>td{border-bottom:1px solid #f0f0f0;border-bottom:1px solid var(--border-color-split,#f0f0f0);padding:12px 16px;transition:border-color .3s ease}.connections-table .ant-table-tbody>tr:hover>td{background-color:#f5f7fa;background-color:var(--bg-color-container-hover,#f5f7fa);transition:background-color .3s ease}.event-tag{border-radius:12px;font-weight:500}.connection-detail-modal .ant-modal-body{padding:24px}.detail-item{align-items:center;display:flex;margin-bottom:16px}.detail-label{color:#595959;color:var(--text-color-secondary,#595959);flex-shrink:0;font-weight:500;transition:color .3s ease;width:100px}.detail-value{color:#262626;color:var(--text-color-primary,#262626);flex:1 1;transition:color .3s ease}.error-message{background-color:#fff2f0;background-color:var(--error-color-bg,#fff2f0);border-radius:8px;color:#ff4d4f;color:var(--error-color,#ff4d4f);margin-bottom:16px;padding:16px;text-align:center;transition:color .3s ease,background-color .3s ease}.chart-container{height:100%;padding:20px}.chart-controls{margin-bottom:20px}.chart-content{background-color:#fff;background-color:var(--bg-color-container,#fff);border:1px solid #f0f0f0;border:1px solid var(--border-color-base,#f0f0f0);border-radius:8px;box-shadow:0 2px 8px #0000000f;padding:16px;transition:background-color .3s ease,border-color .3s ease}.chart-empty{align-items:center;display:flex;height:400px;justify-content:center}[data-theme=dark] .connections-container{background-color:#141414}[data-theme=dark] .page-title{color:#ffffffd9}[data-theme=dark] .stats-card{background-color:#1f1f1f;border-color:#303030;box-shadow:0 2px 8px #0003}[data-theme=dark] .stats-card:hover{box-shadow:0 4px 16px #0000004d}[data-theme=dark] .stats-title{color:#ffffff73}[data-theme=dark] .stats-value{color:#ffffffd9}[data-theme=dark] .connections-card{box-shadow:0 2px 8px #0003}[data-theme=dark] .connections-card,[data-theme=dark] .filters-section{background-color:#1f1f1f;border-color:#303030}[data-theme=dark] .connections-table .ant-table-thead>tr>th{background-color:#262626;border-color:#303030;color:#ffffffa6}[data-theme=dark] .connections-table .ant-table-tbody>tr>td{border-color:#303030}[data-theme=dark] .connections-table .ant-table-tbody>tr:hover>td{background-color:#262626}[data-theme=dark] .connection-detail-modal .ant-modal-content{background-color:#1f1f1f;border:1px solid #303030}[data-theme=dark] .connection-detail-modal .ant-modal-header{background-color:#1f1f1f;border-bottom:1px solid #303030}[data-theme=dark] .connection-detail-modal .ant-modal-title{color:#ffffffd9}[data-theme=dark] .connection-detail-modal .ant-modal-body{background-color:#1f1f1f}[data-theme=dark] .connection-detail-modal .ant-modal-footer{background-color:#1f1f1f;border-top:1px solid #303030}[data-theme=dark] .detail-label{color:#ffffffa6}[data-theme=dark] .detail-value{color:#ffffffd9}[data-theme=dark] .error-message{background-color:#2a1215;color:#ff7875}[data-theme=dark] .chart-content{background-color:#1f1f1f;border-color:#303030;box-shadow:0 2px 8px #0003}[data-theme=dark] .chart-empty .ant-empty-description{color:#ffffff73}@media (max-width:768px){.connections-container{padding:16px}.page-header{align-items:flex-start;flex-direction:column;gap:16px}.stats-cards .ant-col{margin-bottom:16px}.filters-section{padding:16px}.connections-table{padding:0 16px 16px}.chart-container{padding:16px}}.messages-card,.messages-container{width:100%}.messages-controls{margin-bottom:16px}.connection-status{align-items:center;background-color:#f5f5f5;border-radius:4px;display:flex;margin-bottom:12px;padding:8px 12px}.last-update-time{color:#666;font-size:12px;margin-left:16px}.messages-toolbar{align-items:center;display:flex;justify-content:space-between;margin-bottom:16px}.messages-pagination{display:flex;justify-content:flex-end;margin-top:16px}.message-detail{padding:10px 0}.detail-row{align-items:flex-start;display:flex;margin-bottom:10px}.detail-row>.ant-typography:first-child{flex-shrink:0;width:120px}.detail-row>.ant-typography:last-child{flex:1 1;word-break:break-all}.payload-content{margin-top:5px;max-height:200px;overflow-y:auto}@media (max-width:768px){.messages-toolbar{align-items:stretch;flex-direction:column;gap:10px}.connection-status{align-items:flex-start;flex-direction:column}.last-update-time{margin-left:0;margin-top:8px}.detail-row{flex-direction:column}.detail-row>.ant-typography:first-child{margin-bottom:5px;width:100%}}@media (max-width:576px){.messages-controls{margin-bottom:12px}.connection-status{padding:6px 10px}.message-detail{padding:8px 0}}.settings-card,.settings-container{width:100%}.loading-container{height:200px}.sync-controls,.sync-stats{margin-bottom:24px}.control-item{align-items:center;display:flex;gap:10px}.sync-description ul{padding-left:20px}.sync-description li{line-height:1.5;margin-bottom:8px}@media (max-width:768px){.sync-controls,.sync-stats{margin-bottom:20px}.control-item{align-items:flex-start;flex-direction:column;gap:8px}.sync-description ul{padding-left:16px}.sync-description li{font-size:14px;margin-bottom:6px}}@media (max-width:576px){.sync-controls,.sync-stats{margin-bottom:16px}.loading-container{height:150px}}.room-overview-section{margin-bottom:24px}.room-overview-cards .ant-col{margin-bottom:16px}.room-overview-card{border-radius:12px;box-shadow:0 2px 8px #0000000f;display:flex;flex-direction:column;height:100%;min-height:160px;transition:all .3s ease}.room-overview-card:hover{box-shadow:0 8px 16px #0000001a;transform:translateY(-4px)}.room-overview-card .ant-card-body{display:flex;flex:1 1;flex-direction:column;padding:16px}.room-overview-card .ant-tag{word-wrap:break-word;height:auto;line-height:1.4;margin-bottom:4px;max-width:100%;white-space:normal;word-break:break-all}.rooms-container{background:#f5f7fa;min-height:100vh;padding:24px}.rooms-header{align-items:flex-start;display:flex;flex-wrap:wrap;gap:16px;justify-content:space-between;margin-bottom:24px}.rooms-title-section{display:flex;flex-direction:column;gap:8px}.rooms-title-section h2{color:#1a1a1a;margin:0}.rooms-controls{align-items:center;display:flex;flex-wrap:wrap;gap:16px}.stats-container{margin-bottom:24px}.stat-card{border:none;border-radius:12px;box-shadow:0 2px 8px #0000000f;text-align:center;transition:all .3s ease}.stat-card:hover{box-shadow:0 8px 16px #0000001a;transform:translateY(-4px)}.rooms-grid{grid-gap:16px;display:grid;gap:16px;grid-template-columns:repeat(auto-fill,minmax(240px,1fr));width:100%}.room-card,.room-card-wrapper{display:flex;flex-direction:column;height:100%}.room-card{border-radius:16px;box-shadow:0 4px 12px #00000014;min-height:360px;overflow:hidden;transition:all .3s ease}.room-card:hover{box-shadow:0 4px 12px #00000026;transform:none}.room-card.ant-card-hoverable:hover{transform:none}.room-card .ant-card-body{display:flex;flex:1 1;flex-direction:column;overflow:hidden;padding:20px}.room-card .ant-card-actions{border-top:1px solid #f0f0f0;flex-shrink:0;margin-top:auto;padding:8px 0}.room-card .ant-card-actions li{margin:12px 0}.room-card .ant-card-actions li span{color:#666;font-size:16px;transition:color .3s}.room-card .ant-card-actions li:hover span{color:#1890ff}.room-cover{align-items:center;display:flex;height:60px;justify-content:center;overflow:hidden;position:relative}.room-icon-wrapper{position:relative;z-index:2}.room-badges{position:absolute;right:16px;top:16px;z-index:3}.room-title{display:flex;flex-direction:column;gap:4px;margin-bottom:8px}.room-number{color:#1890ff;font-size:24px;font-weight:700;margin-bottom:4px}.room-name,.room-title .ant-card-meta-title{color:#1a1a1a;font-size:18px;font-weight:600}.room-tags{display:flex;flex-wrap:wrap;gap:6px}.room-description{display:flex;flex:1 1;flex-direction:column;overflow:hidden}.room-devices{margin-top:4px;max-height:none;overflow-y:visible}.device-list{display:flex;flex-direction:row;flex-wrap:wrap;gap:4px;margin-top:4px;width:auto}.device-info{align-items:flex-start;gap:4px;overflow:visible;width:100%}.device-item{align-items:center;background:#f9f9f9;border-radius:4px;display:flex;flex-basis:auto;font-size:12px;gap:4px;margin-bottom:0;max-width:100%;min-height:auto;min-width:auto;padding:4px 8px;transition:background-color .3s}.device-item:hover{background:#f0f7ff}.device-item span,.device-name{flex:1 1;font-size:12px;font-weight:500;line-height:1.2;overflow:visible;white-space:nowrap}.rooms-floor-view{display:flex;flex-direction:column;gap:24px}.floor-section{background:#f9f9f9;border-radius:8px;padding:16px;transition:all .3s ease}.floor-section:hover{box-shadow:0 4px 12px #0000001a}.floor-header{display:flex;flex-direction:column;margin-bottom:16px}.floor-title-row{align-items:center;display:flex;flex-wrap:wrap;gap:12px;justify-content:space-between}.room-numbers{display:flex;flex-wrap:wrap;gap:8px}.floor-room-cards{grid-gap:16px;display:grid;gap:16px;grid-template-columns:repeat(auto-fill,minmax(240px,1fr));width:100%}.floor-room-card,.floor-room-card-wrapper{display:flex;flex-direction:column;height:100%}.floor-room-card{border-radius:16px;box-shadow:0 4px 12px #00000014;margin-bottom:16px;max-height:500px;min-height:360px;overflow:hidden;transition:all .3s cubic-bezier(.4,0,.2,1)}.floor-room-card:hover{box-shadow:0 4px 12px #00000026;transform:none}.floor-room-card.ant-card-hoverable:hover{transform:none}.floor-room-card .ant-card-body{display:flex;flex:1 1;flex-direction:column;overflow:hidden;padding:20px}.floor-room-card .ant-card-actions{border-top:1px solid #f0f0f0;flex-shrink:0;margin-top:auto;padding:8px 0}.floor-room-card .ant-card-actions li{margin:12px 0}.floor-room-card .ant-card-actions li span{color:#666;font-size:16px;transition:color .3s}.floor-room-card .ant-card-actions li:hover span{color:#1890ff}.floor-room-card .room-title{display:flex;flex-direction:column;gap:4px;margin-bottom:8px}.floor-room-card .room-number{color:#1890ff;font-size:24px;font-weight:700;margin-bottom:4px}.floor-room-card .room-name{color:#1a1a1a;font-size:18px;font-weight:600}.floor-room-card .room-tags{display:flex;flex-wrap:wrap;gap:6px}.empty-state{background:#fff;border-radius:16px;box-shadow:0 2px 8px #0000000f;padding:60px 20px;text-align:center}.empty-icon{color:#d9d9d9;font-size:64px;margin-bottom:16px}.empty-state h4{color:#595959;margin-bottom:8px}.device-selection-container{display:flex;flex-direction:column;max-height:500px}.device-selection-list{border:1px solid #d9d9d9;border-radius:6px;flex:1 1;margin-bottom:16px;overflow-y:auto;padding:8px}.device-selection-item{border:1px solid #f0f0f0;border-radius:6px;cursor:pointer;margin-bottom:8px;padding:12px;transition:all .3s}.device-selection-item:hover{background-color:#f9f9f9;border-color:#d9d9d9}.device-selection-item.selected{background-color:#f0f7ff;border-color:#1890ff}.device-selection-header{align-items:flex-start;display:flex;gap:12px;margin-bottom:8px}.device-selection-info{flex:1 1}.device-name{font-size:16px;font-weight:600;margin-bottom:6px}.device-details{align-items:center;display:flex;flex-wrap:wrap;gap:12px}.device-clientid,.device-ip{color:#666;font-size:12px}.device-selection-meta{display:flex;flex-wrap:wrap;gap:16px;margin-top:8px}.device-meta-item{display:flex;flex-direction:column;gap:2px}.meta-label{color:#8c8c8c;font-size:12px}.meta-value{color:#262626;font-size:12px;font-weight:500}.device-selection-summary{background-color:#f5f5f5;border-radius:6px;color:#1890ff;font-weight:500;padding:8px 12px;text-align:center}@media (max-width:768px){.rooms-container{padding:12px}.rooms-header{align-items:flex-start;flex-direction:column;margin-bottom:16px}.rooms-controls{justify-content:space-between;width:100%}.floor-room-cards,.rooms-grid{gap:12px;grid-template-columns:1fr}.floor-room-card,.room-card{max-height:none;min-height:auto}.room-card{margin-bottom:0}.room-card .ant-card-actions{padding:4px 0}.room-card .ant-card-actions li{margin:6px 0}.room-cover{height:120px}.room-title{flex-direction:column;gap:8px}.room-tags{margin-top:4px}.room-number{font-size:20px}.room-name{font-size:16px}.room-devices{margin-top:8px}.device-item{font-size:11px;padding:3px 6px}.stats-container{margin-bottom:16px}}@media (max-width:576px){.rooms-container{padding:8px}.stats-container .ant-col{margin-bottom:12px}.stat-card{border-radius:8px}.room-cover{height:80px}.room-card .ant-card-body{padding:12px}.rooms-header{margin-bottom:12px}.rooms-title-section h2{font-size:20px}.room-number{font-size:18px}.room-name{font-size:14px}.device-item{font-size:10px;padding:2px 4px}.floor-section{padding:12px}.floor-header{margin-bottom:12px}.floor-header h3{font-size:18px}}@keyframes fadeIn{0%{opacity:0;transform:translateY(20px)}to{opacity:1;transform:translateY(0)}}.room-card{animation:fadeIn .5s ease-out}.device-type-tag{color:#8c8c8c;font-size:12px;margin-left:8px}.ant-modal-header{border-bottom:1px solid #f0f0f0}.ant-modal-body{padding:24px}.ant-form-item-label>label{font-weight:500}.ant-float-btn{box-shadow:0 4px 12px #1890ff66}.ant-float-btn,.ant-float-btn-body{border-radius:50%;height:56px;width:56px}.ant-segmented{background:#f5f5f5;border-radius:8px;padding:4px}.ant-segmented-item{border-radius:6px;transition:all .3s}.ant-segmented-item-label{font-weight:500;padding:6px 12px}.ant-segmented-item-selected{background:#fff;box-shadow:0 2px 4px #0000001a}.room-card .ant-card-actions li span{align-items:center;display:flex;font-size:14px;justify-content:center;line-height:1;min-height:24px}.room-card .anticon{align-items:center;display:inline-flex;justify-content:center;vertical-align:middle}@media (max-width:768px){.room-card .ant-card-actions li span{font-size:16px;min-height:32px}.room-card .ant-card-actions{padding:6px 0}}.room-detail-container{background-color:#f5f5f5;min-height:100vh;padding:24px}.room-detail-header{align-items:center;display:flex;gap:16px;margin-bottom:24px}.back-button{margin-right:16px}.loading-container{align-items:center;display:flex;justify-content:center;padding:60px 0}.room-info-card{box-shadow:0 2px 8px #00000017;margin-bottom:24px}.room-basic-info{padding:16px 0}.room-meta{display:flex;flex-wrap:wrap;gap:8px;margin-top:16px}.room-status-card{border-radius:8px;height:100%;position:-webkit-sticky;position:sticky;top:24px}.status-item{gap:16px;padding:12px 0}.status-icon,.status-item{align-items:center;display:flex}.status-icon{background-color:#f0f0f0;border-radius:50%;height:48px;justify-content:center;width:48px}.status-content{flex:1 1}.temperature-value{font-size:24px;font-weight:700;margin-top:4px}.relay-status-value{font-size:16px;font-weight:700;margin-top:4px}.room-devices-card{box-shadow:0 2px 8px #00000017;margin-bottom:24px}.device-card{border-radius:8px;height:100%}.device-header{align-items:center;display:flex;justify-content:space-between}.device-info{display:flex;flex-direction:column;gap:8px}.relay-timeline-card,.temperature-chart-card{box-shadow:0 2px 8px #00000017;margin-bottom:24px;min-height:300px}.chart-placeholder{align-items:center;background-color:#fafafa;border-radius:8px;display:flex;flex-direction:column;height:300px;justify-content:center}.chart-placeholder text{margin-top:16px}@media (max-width:768px){.room-detail-container{padding:16px}.room-detail-header{align-items:flex-start;flex-direction:column;gap:8px}.back-button{margin-right:0}.room-meta{align-items:flex-start;flex-direction:column}.status-item{flex-direction:column;gap:8px;text-align:center}.chart-placeholder{height:250px}.room-status-card{margin-bottom:24px;position:static}}.ota-page{width:100%}.ota-section{background-color:#f9f9f9;border-radius:8px;margin-bottom:32px;padding:16px}.ota-section:last-child{margin-bottom:0}.ota-section h3{color:#262626;font-size:16px;font-weight:600;margin:0 0 16px}.ota-section-header{align-items:center;display:flex;justify-content:space-between;margin-bottom:16px}.ota-modal-content{padding:16px 0}.ota-modal-section{margin-bottom:24px}.ota-modal-section:last-child{margin-bottom:0}.ota-modal-section h4{color:#595959;font-size:14px;font-weight:600;margin:0 0 8px}.upload-hint{color:#8c8c8c;font-size:12px;margin:8px 0 0}.firmware-info-card{background-color:#f0f2f5;border:1px solid #e8e8e8;border-radius:8px;margin:16px 0 0;padding:16px}.firmware-info-card h5{color:#595959;font-size:14px;font-weight:600;margin:0 0 12px}.firmware-info-card div{color:#262626;font-size:13px;line-height:1.5}.firmware-list{grid-gap:16px;display:grid;gap:16px;grid-template-columns:repeat(auto-fill,minmax(300px,1fr));max-height:400px;overflow-y:auto;padding:8px}.firmware-card{cursor:pointer;display:flex;flex-direction:column;height:100%;position:relative;transition:all .3s ease}.firmware-card:hover{box-shadow:0 4px 12px #00000026}.firmware-card.selected{border-color:#1890ff;box-shadow:0 0 0 2px #1890ff33}.firmware-card-content{flex:1 1;font-size:13px}.firmware-card-content h4{color:#1890ff;font-size:16px;margin:0 0 8px}.firmware-card-content p{color:#666;line-height:1.4;margin:4px 0}.firmware-card .ant-card-actions{border-top:1px solid #f0f0f0;margin:0;padding:8px 0}@media screen and (max-width:768px){.ota-section{padding:12px}.ota-section-header{align-items:flex-start;flex-direction:column}.ota-section-header .ant-input-search{margin-top:8px;width:100%!important}.firmware-list{grid-template-columns:1fr}}.sensor-data-container{background:#f0f2f5;min-height:100vh;padding:24px}.sensor-data-header{align-items:center;display:flex;justify-content:space-between;margin-bottom:24px}.sensor-data-header h1{color:#1890ff;font-size:24px;font-weight:600;margin:0}.sensor-data-filters{border-radius:8px;box-shadow:0 2px 8px #0000001a;margin-bottom:16px}.filter-item{display:flex;flex-direction:column;gap:8px}.filter-item label{color:#666;font-size:14px;font-weight:500}.sensor-data-stats{border-radius:8px;box-shadow:0 2px 8px #0000001a;margin-bottom:16px}.sensor-data-stats .ant-statistic-title{color:#666;font-size:14px}.sensor-data-stats .ant-statistic-content{font-size:24px;font-weight:600}.sensor-data-table{border-radius:8px;box-shadow:0 2px 8px #0000001a}.sensor-data-table .ant-table{font-size:14px}.sensor-data-table .ant-table-thead>tr>th{background:#fafafa;font-weight:600}.sensor-data-table .ant-table-tbody>tr:hover>td{background:#f5f5f5}@media (max-width:768px){.sensor-data-container{padding:16px}.sensor-data-header h1{font-size:20px}.sensor-data-filters,.sensor-data-stats,.sensor-data-table{margin-bottom:12px}}.App{text-align:center}.App-logo{height:40vmin;pointer-events:none}@media (prefers-reduced-motion:no-preference){.App-logo{animation:App-logo-spin 20s linear infinite}}.App-header{align-items:center;background-color:#282c34;color:#fff;display:flex;flex-direction:column;font-size:calc(10px + 2vmin);justify-content:center;min-height:100vh}.App-link{color:#61dafb}@keyframes App-logo-spin{0%{transform:rotate(0deg)}to{transform:rotate(1turn)}}body{font-size:14px;letter-spacing:.02em;line-height:1.6;overflow-x:hidden;padding:0;transition:background-color .3s ease,color .3s ease}@media (max-width:768px){input,select,textarea{-webkit-appearance:none;appearance:none;border-radius:0}input[type=checkbox],input[type=radio]{-webkit-appearance:auto;appearance:auto}button{-webkit-appearance:none;appearance:none;cursor:pointer}*{-webkit-touch-callout:none;-webkit-user-select:none;user-select:none}[contenteditable],input,textarea{-webkit-user-select:auto;user-select:auto}.scrollable{-webkit-overflow-scrolling:touch;overflow-y:auto}*{touch-action:manipulation}.ant-btn{-webkit-tap-highlight-color:transparent}::-webkit-input-placeholder{color:#bfbfbf}:-moz-placeholder,::-moz-placeholder{color:#bfbfbf;opacity:1}:-ms-input-placeholder{color:#bfbfbf}}h1,h2,h3,h4,h5,h6{font-weight:600;line-height:1.3;margin-bottom:16px}h1{font-size:28px}h2{font-size:24px}h3{font-size:20px}h4{font-size:16px}p{margin-bottom:16px}a{color:#1890ff;color:var(--primary-color);text-decoration:none;transition:color .3s ease}a:hover{color:#40a9ff;text-decoration:underline}.ant-btn{border-radius:6px;font-weight:500}.ant-btn,.ant-card{transition:all .3s ease}.ant-card{border-radius:8px;box-shadow:0 2px 8px #0000001a;box-shadow:var(--shadow)}.ant-card:hover{box-shadow:0 4px 16px #0000001f}.ant-input,.ant-picker,.ant-select-selector{border-radius:6px;transition:all .3s ease}.ant-table{border-radius:8px;overflow:hidden}.ant-table-thead>tr>th{background-color:#f5f5f5;background-color:var(--secondary-color);font-weight:600}.ant-menu{border-radius:6px}.ant-menu-item{margin:4px 8px;transition:all .3s ease}.ant-menu-item,.ant-menu-item-selected,.ant-tag{border-radius:4px}.ant-tag{font-weight:500}.ant-statistic{margin-bottom:16px}.ant-statistic-title{color:#666;color:var(--text-color-secondary);font-weight:500;margin-bottom:8px}.ant-statistic-content{font-size:28px;font-weight:600}:root{--primary-color:#1890ff;--secondary-color:#f5f5f5;--text-color:#333;--text-color-secondary:#666;--background-color:#fff;--card-background:#fff;--border-color:#d9d9d9;--border-color-base:#f0f0f0;--border-color-split:#f0f0f0;--shadow:0 2px 8px #0000001a;--bg-color-page:#f5f7fa;--bg-color-container:#fff;--bg-color-container-hover:#f5f7fa;--text-color-primary:#262626;--error-color:#ff4d4f;--error-color-bg:#fff2f0}[data-theme=dark]{--primary-color:#177ddc;--secondary-color:#141414;--text-color:#fff;--text-color-secondary:#a6a6a6;--background-color:#141414;--card-background:#1f1f1f;--border-color:#434343;--border-color-base:#303030;--border-color-split:#303030;--shadow:0 2px 8px #0000004d;--bg-color-page:#141414;--bg-color-container:#1f1f1f;--bg-color-container-hover:#262626;--text-color-primary:#ffffffd9;--error-color:#ff7875;--error-color-bg:#2a1215}@media (max-width:768px){.ant-table{font-size:12px}.ant-table-tbody>tr>td,.ant-table-thead>tr>th{padding:8px 4px}.ant-card{margin-bottom:12px}.ant-card-head{min-height:48px;padding:0 12px}.ant-card-head-title{font-size:14px;padding:12px 0}.ant-card-body{padding:12px}.ant-btn{height:32px}.ant-btn,.ant-input{font-size:12px;padding:4px 8px}.ant-form-item-label>label,.ant-select,.ant-statistic-title{font-size:12px}.ant-statistic-content{font-size:16px}}@media (max-width:576px){.ant-table{font-size:11px}.ant-table-tbody>tr>td,.ant-table-thead>tr>th{padding:6px 2px}.ant-card{margin-bottom:8px}.ant-card-head{min-height:40px;padding:0 8px}.ant-card-head-title{font-size:12px;padding:8px 0}.ant-card-body{padding:8px}.ant-btn{height:28px}.ant-btn,.ant-input{font-size:11px;padding:2px 6px}.ant-form-item-label>label,.ant-select,.ant-statistic-title{font-size:11px}.ant-statistic-content{font-size:14px}}body{-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Oxygen,Ubuntu,Cantarell,Fira Sans,Droid Sans,Helvetica Neue,sans-serif}code{font-family:source-code-pro,Menlo,Monaco,Consolas,Courier New,monospace}@media (max-width:768px){*{-webkit-touch-callout:none}*,input,select,textarea{-webkit-tap-highlight-color:transparent}input,select,textarea{-webkit-user-select:auto;user-select:auto}.ant-btn,.ant-btn-link,.ant-btn-text,a,button{-webkit-tap-highlight-color:transparent;min-height:44px;min-width:44px}.ant-drawer-body,.ant-layout-content,.ant-modal-body,.ant-table-body,.scrollable{-webkit-overflow-scrolling:touch;overflow-y:auto}*{touch-action:manipulation}@supports (padding-top:env(safe-area-inset-top)){.ant-layout-header{padding-top:calc(env(safe-area-inset-top, 0px))}.app-layout{padding-bottom:env(safe-area-inset-bottom,0)}}.ant-input,.ant-picker,.ant-select-selector{-webkit-appearance:none;border-radius:6px}input[type=checkbox],input[type=radio]{-webkit-appearance:auto}input:focus,textarea:focus{outline:none}.ant-btn:active,.ant-card:active,.ant-list-item:active{opacity:.7;transition:opacity .1s}.ant-dropdown-menu-item,.ant-menu-item{line-height:44px;min-height:44px}.ant-table{font-size:12px}.ant-card{margin-bottom:12px}.ant-btn,.ant-input,.ant-select-selector{font-size:14px;height:40px}}@media (max-width:480px){.ant-statistic-content{font-size:20px}.ant-statistic-title{font-size:12px}}@media (prefers-reduced-motion:reduce){*,:after,:before{animation-duration:.01ms!important;animation-iteration-count:1!important;transition-duration:.01ms!important}}body,html{height:100%;width:100%}input::-ms-clear,input::-ms-reveal{display:none}*,:after,:before{box-sizing:border-box}html{-webkit-text-size-adjust:100%;-ms-text-size-adjust:100%;-ms-overflow-style:scrollbar;-webkit-tap-highlight-color:rgba(0,0,0,0);font-family:sans-serif;line-height:1.15}body{margin:0}[tabindex="-1"]:focus{outline:none}hr{box-sizing:initial;height:0;overflow:visible}h1,h2,h3,h4,h5,h6{font-weight:500;margin-bottom:.5em;margin-top:0}p{margin-bottom:1em;margin-top:0}abbr[data-original-title],abbr[title]{border-bottom:0;cursor:help;-webkit-text-decoration:underline dotted;text-decoration:underline dotted}address{font-style:normal;line-height:inherit;margin-bottom:1em}input[type=number],input[type=password],input[type=text],textarea{-webkit-appearance:none}dl,ol,ul{margin-bottom:1em;margin-top:0}ol ol,ol ul,ul ol,ul ul{margin-bottom:0}dt{font-weight:500}dd{margin-bottom:.5em;margin-left:0}blockquote{margin:0 0 1em}dfn{font-style:italic}b,strong{font-weight:bolder}small{font-size:80%}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:initial}sub{bottom:-.25em}sup{top:-.5em}code,kbd,pre,samp{font-family:SFMono-Regular,Consolas,Liberation Mono,Menlo,Courier,monospace;font-size:1em}pre{margin-bottom:1em;margin-top:0;overflow:auto}figure{margin:0 0 1em}img{border-style:none;vertical-align:middle}[role=button],a,area,button,input:not([type=range]),label,select,summary,textarea{touch-action:manipulation}table{border-collapse:collapse}caption{caption-side:bottom;padding-bottom:.3em;padding-top:.75em;text-align:left}button,input,optgroup,select,textarea{color:inherit;font-family:inherit;font-size:inherit;line-height:inherit;margin:0}button,input{overflow:visible}button,select{text-transform:none}[type=reset],[type=submit],button,html [type=button]{-webkit-appearance:button}[type=button]::-moz-focus-inner,[type=reset]::-moz-focus-inner,[type=submit]::-moz-focus-inner,button::-moz-focus-inner{border-style:none;padding:0}input[type=checkbox],input[type=radio]{box-sizing:border-box;padding:0}input[type=date],input[type=datetime-local],input[type=month],input[type=time]{-webkit-appearance:listbox}textarea{overflow:auto;resize:vertical}fieldset{border:0;margin:0;min-width:0;padding:0}legend{color:inherit;display:block;font-size:1.5em;line-height:inherit;margin-bottom:.5em;max-width:100%;padding:0;white-space:normal;width:100%}progress{vertical-align:initial}[type=number]::-webkit-inner-spin-button,[type=number]::-webkit-outer-spin-button{height:auto}[type=search]{-webkit-appearance:none;outline-offset:-2px}[type=search]::-webkit-search-cancel-button,[type=search]::-webkit-search-decoration{-webkit-appearance:none}::-webkit-file-upload-button{-webkit-appearance:button;font:inherit}output{display:inline-block}summary{display:list-item}template{display:none}[hidden]{display:none!important}mark{background-color:#feffe6;padding:.2em}