*,*:before,*:after{box-sizing:border-box;margin:0;padding:0}:root{--color-bg: #eef2ff;--color-surface: #ffffff;--color-border: #dde6f5;--color-text-primary: #1e293b;--color-text-secondary: #64748b;--color-accent: #2563eb;--color-online: #22c55e;--color-warning: #f59e0b;--color-offline: #94a3b8}html,body,#root{height:100%}.app{display:flex;flex-direction:column;height:100%;background:var(--color-bg);font-family:Inter,PingFang SC,Microsoft YaHei,sans-serif;color:var(--color-text-primary)}.top-bar{display:flex;align-items:center;gap:16px;padding:12px 24px;background:var(--color-surface);border-bottom:1px solid var(--color-border);flex-shrink:0;z-index:10}.room-name{font-size:18px;font-weight:700;letter-spacing:.04em;color:var(--color-accent)}.room-status{display:flex;align-items:center;gap:6px;font-size:13px;color:var(--color-text-secondary)}.status-dot{width:8px;height:8px;border-radius:50%;flex-shrink:0}.status-dot.online{background:var(--color-online)}.status-dot.warning{background:var(--color-warning)}.status-dot.offline{background:var(--color-offline)}.room-selector{display:flex;gap:6px}.room-pill{padding:4px 14px;border-radius:99px;border:1px solid var(--color-border);background:transparent;font-size:13px;font-weight:500;color:var(--color-text-secondary);cursor:pointer;transition:all .15s ease}.room-pill:hover{border-color:var(--color-accent);color:var(--color-accent)}.room-pill.active{background:var(--color-accent);border-color:var(--color-accent);color:#fff}.top-time{margin-left:auto;font-size:13px;font-variant-numeric:tabular-nums;color:var(--color-text-secondary)}.main-content{display:flex;flex:1;overflow:hidden}.scene-wrapper{flex:0 0 65%;position:relative}.right-panel{flex:0 0 35%;background:var(--color-surface);border-left:1px solid var(--color-border);overflow-y:auto;padding:24px}.device-list-panel{position:absolute;bottom:20px;left:20px;width:200px;background:#ffffffd1;-webkit-backdrop-filter:blur(8px);backdrop-filter:blur(8px);border:1px solid var(--color-border);border-radius:12px;padding:12px;z-index:10;pointer-events:all}.device-list-title{font-size:11px;font-weight:600;text-transform:uppercase;letter-spacing:.08em;color:var(--color-text-secondary);margin-bottom:8px}.device-list{list-style:none;display:flex;flex-direction:column;gap:2px}.device-list-item{display:flex;align-items:center;gap:8px;padding:6px 8px;border-radius:6px;cursor:pointer;transition:background .12s ease;font-size:13px;color:var(--color-text-primary)}.device-list-item:hover{background:var(--color-bg)}.device-list-item.selected{background:#dbeafe;color:var(--color-accent);font-weight:600}.device-list-dot{width:7px;height:7px;border-radius:50%;flex-shrink:0}.device-list-name{flex:1;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.device-list-size{font-size:11px;color:var(--color-text-secondary);flex-shrink:0}.device-list-item.selected .device-list-size{color:var(--color-accent);opacity:.7}.schedule-panel{position:absolute;top:20px;right:20px;width:230px;max-height:calc(100% - 40px);overflow-y:auto;background:#ffffffd1;-webkit-backdrop-filter:blur(8px);backdrop-filter:blur(8px);border:1px solid var(--color-border);border-radius:12px;padding:12px;z-index:10}.schedule-title{font-size:11px;font-weight:600;text-transform:uppercase;letter-spacing:.08em;color:var(--color-text-secondary);margin-bottom:8px}.schedule-list{list-style:none;display:flex;flex-direction:column;gap:4px}.schedule-item{display:flex;gap:8px;padding:6px 6px 6px 0;border-radius:6px;cursor:pointer;transition:background .12s ease}.schedule-item:hover{background:var(--color-bg)}.schedule-item.selected{background:#dbeafe}.schedule-item--past{opacity:.45}.schedule-bar{width:3px;border-radius:99px;flex-shrink:0;align-self:stretch;min-height:40px}.schedule-bar--past{background:var(--color-border)}.schedule-bar--active{background:var(--color-online)}.schedule-bar--upcoming{background:var(--color-accent)}.schedule-body{display:flex;flex-direction:column;gap:2px;min-width:0}.schedule-time{font-size:11px;font-variant-numeric:tabular-nums;color:var(--color-text-secondary);display:flex;align-items:center;gap:6px}.schedule-badge{font-size:10px;font-weight:600;padding:1px 5px;border-radius:99px;background:var(--color-online);color:#fff;letter-spacing:0}.schedule-device{font-size:13px;font-weight:600;color:var(--color-text-primary);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.schedule-item.selected .schedule-device{color:var(--color-accent)}.schedule-meta{font-size:11px;color:var(--color-text-secondary);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.schedule-list-panel{list-style:none;display:flex;flex-direction:column;gap:4px}.sched-item{display:flex;gap:8px;padding:6px 4px;border-radius:6px;cursor:pointer;transition:background .12s ease}.sched-item:hover{background:var(--color-bg)}.sched-item--past{opacity:.45}.sched-item--selected{background:#dbeafe}.sched-bar{width:3px;border-radius:99px;flex-shrink:0;align-self:stretch;min-height:38px}.sched-bar--past{background:var(--color-border)}.sched-bar--active{background:var(--color-online)}.sched-bar--upcoming{background:var(--color-accent)}.sched-body{display:flex;flex-direction:column;gap:1px;min-width:0}.sched-time{font-size:11px;font-variant-numeric:tabular-nums;color:var(--color-text-secondary);display:flex;align-items:center;gap:5px}.sched-badge{font-size:10px;font-weight:600;padding:1px 5px;border-radius:99px;background:var(--color-online);color:#fff}.sched-device{font-size:13px;font-weight:600;color:var(--color-text-primary);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.sched-item--selected .sched-device{color:var(--color-accent)}.panel-title{font-size:16px;font-weight:600;margin-bottom:16px;color:var(--color-text-primary)}.panel-subtitle{font-size:11px;font-weight:600;text-transform:uppercase;letter-spacing:.08em;color:var(--color-text-secondary);margin:20px 0 10px}.log-list{list-style:none;display:flex;flex-direction:column;gap:6px}.log-item{display:flex;gap:10px;font-size:13px;padding:8px 10px;border-radius:6px;background:var(--color-bg)}.log-time{color:var(--color-text-secondary);font-variant-numeric:tabular-nums;flex-shrink:0;min-width:44px}.log-device{color:var(--color-accent);flex-shrink:0}.log-event{color:var(--color-text-primary)}.status-grid{display:grid;grid-template-columns:repeat(3,1fr);gap:10px;margin-bottom:4px}.status-card{display:flex;flex-direction:column;align-items:center;padding:14px 8px;border-radius:10px;border:1px solid var(--color-border);background:var(--color-bg)}.status-card.online{border-color:var(--color-online)}.status-card.warning{border-color:var(--color-warning)}.status-card.offline{border-color:var(--color-offline)}.status-count{font-size:30px;font-weight:700;line-height:1}.status-card.online .status-count{color:var(--color-online)}.status-card.warning .status-count{color:var(--color-warning)}.status-card.offline .status-count{color:var(--color-offline)}.status-label{font-size:12px;color:var(--color-text-secondary);margin-top:6px}.device-header{display:flex;align-items:center;justify-content:space-between;margin-bottom:4px}.status-badge{padding:3px 10px;border-radius:99px;font-size:12px;font-weight:600;color:#fff}.metrics-grid{display:grid;grid-template-columns:repeat(3,1fr);gap:10px;margin-bottom:12px}.metric-item{display:flex;flex-direction:column;gap:4px;padding:10px;border-radius:8px;background:var(--color-bg);border:1px solid var(--color-border)}.metric-label{font-size:11px;color:var(--color-text-secondary);text-transform:uppercase;letter-spacing:.05em}.metric-value{font-size:18px;font-weight:700;color:var(--color-accent);font-variant-numeric:tabular-nums}.load-bar{height:4px;background:var(--color-border);border-radius:99px;overflow:hidden;margin-bottom:16px}.load-fill{height:100%;background:var(--color-accent);border-radius:99px;transition:width .4s ease}
