.sidebar-header{border-bottom:1px solid #ffffff0d;align-items:center;height:64px;transition:all .3s;display:flex}.sidebar:not(.sidebar-collapsed) .sidebar-header{justify-content:space-between;padding:0 20px}.sidebar-collapsed .sidebar-header{justify-content:center;padding:0}.sidebar-header .logo-area{color:inherit;border-radius:8px;align-items:center;gap:10px;min-width:0;text-decoration:none;display:flex}.sidebar-header .logo-area:hover .logo-icon,.sidebar-header .logo-area:focus-visible .logo-icon{color:#f5b536}.sidebar-header .logo-area:focus-visible{outline-offset:4px;outline:2px solid #e39a1673}.sidebar-header .logo-icon{font-size:24px}.sidebar-header h1{color:#fff;letter-spacing:.5px;margin:0;font-size:1.1rem;font-weight:800}.sidebar-toggle{color:#ffffffb3;justify-content:center;align-items:center;display:flex}.sidebar-collapsed .sidebar-toggle{width:100%}.nav-group-header{width:100%;color:inherit;text-align:left;background:0 0;border:0}.nav-group-header:focus-visible,.nav-link:focus-visible,.topbar-menu-btn:focus-visible,.notification-list button:focus-visible{outline:2px solid var(--accent);outline-offset:2px}.topbar-menu-btn{display:none}.nav-group--dashboard{border-bottom:1px solid #ffffff24;margin-bottom:14px;padding-bottom:12px}.sidebar-collapsed .nav-group-items{opacity:1;pointer-events:auto;max-height:none}.sidebar-collapsed .nav-group{margin-bottom:4px}.sidebar-collapsed .nav-group--dashboard{margin-bottom:8px;padding-bottom:8px}.notification-list{border-radius:8px}.notification-close-btn{margin-left:0!important}@media (width<=980px){.sidebar{z-index:300;border-bottom:0;border-right:1px solid #ffffff29;width:min(272px,100vw - 56px);padding:16px 14px;transition:transform .18s;position:fixed;inset:0 auto 0 0;transform:translate(0);box-shadow:16px 0 32px #0b233533}.sidebar-collapsed .sidebar{width:min(272px,100vw - 56px);box-shadow:none;padding:16px 14px;transform:translate(-100%)}.main-wrapper{width:100%;margin-left:0}.app-shell:not(.sidebar-collapsed) .sidebar .logo-area,.app-shell:not(.sidebar-collapsed) .sidebar .nav-group-header,.app-shell:not(.sidebar-collapsed) .sidebar .nav-link>span:not(.material-symbols-outlined){display:flex}.app-shell:not(.sidebar-collapsed) .sidebar .nav-link>span:not(.material-symbols-outlined){display:inline}.app-shell:not(.sidebar-collapsed) .sidebar .nav-link{justify-content:flex-start;padding-inline:14px}.app-shell:not(.sidebar-collapsed) .sidebar .nav-group-header{justify-content:space-between}.sidebar-collapsed .nav-group-items{opacity:1;pointer-events:auto;max-height:none}.top-bar{padding:0 16px}.topbar-menu-btn{display:grid}.top-bar-right{gap:8px}.user-profile{padding-left:8px}.notification-list{width:auto;max-width:420px;position:fixed;top:72px;left:76px;right:12px}}@media (width<=560px){.user-info,.user-profile>.material-symbols-outlined{display:none}.user-profile{border-left:0;padding-left:0}.top-bar-right{gap:4px}.notification-list{left:12px}}.nav-link.active{color:#fff!important;background:#ffffff1a!important}.simulator-btn{color:var(--danger);margin-right:8px}.login-page{background:linear-gradient(135deg,#0f5f861a,#e39a1614),#eef3f7;place-items:center;min-height:100vh;padding:32px;display:grid}.login-panel{border:1px solid var(--border);width:min(440px,100%);box-shadow:var(--shadow-lg);background:#fff;border-radius:8px;padding:32px}.login-brand{align-items:center;gap:14px;margin-bottom:28px;display:flex}.login-brand-icon{width:48px;height:48px;color:var(--brand);background:#e8f3f8;border-radius:8px;place-items:center;font-size:30px;display:grid}.login-eyebrow{color:var(--muted);letter-spacing:.08em;text-transform:uppercase;margin:0 0 4px;font-size:.78rem;font-weight:700}.login-brand h1{color:var(--brand-deep);margin:0;font-size:1.45rem}.login-form{gap:18px;display:grid}.login-form label{color:var(--text);gap:8px;font-size:.92rem;font-weight:700;display:grid}.login-form input{border:1px solid var(--border);width:100%;height:44px;color:var(--text);font:inherit;background:var(--surface-alt);border-radius:6px;padding:0 12px}.login-form input:focus{border-color:var(--brand);background:#fff;outline:2px solid #0f5f862e}.login-error{color:var(--danger);background:#fdecec;border:1px solid #f4c7c4;border-radius:6px;padding:10px 12px;font-weight:700}.login-submit{background:var(--brand);color:#fff;cursor:pointer;border:0;border-radius:6px;justify-content:center;align-items:center;gap:8px;height:46px;font-weight:800;display:inline-flex}.login-submit:hover:not(:disabled){background:var(--brand-deep)}.login-submit:disabled{opacity:.65;cursor:not-allowed}.login-meta{color:var(--muted);align-items:center;gap:8px;margin-top:20px;font-size:.82rem;display:flex}@media (width<=520px){.login-page{padding:18px}.login-panel{padding:24px}}@font-face{font-family:MiAIMS CJK;src:url(/fonts/DroidSansFallbackFull.ttf)format("truetype");font-weight:400;font-style:normal;font-display:swap}@font-face{font-family:MiAIMS Latin;src:url(/fonts/Lato-Regular.ttf)format("truetype");font-weight:400;font-style:normal;font-display:swap}@font-face{font-family:MiAIMS Latin;src:url(/fonts/Lato-Bold.ttf)format("truetype");font-weight:700;font-style:normal;font-display:swap}.material-symbols-outlined{letter-spacing:0;text-indent:-9999px;text-transform:none;white-space:nowrap;vertical-align:-.125em;-webkit-user-select:none;user-select:none;justify-content:center;align-items:center;width:1em;min-width:1em;height:1em;font-style:normal;font-weight:700;line-height:1;display:inline-flex;position:relative;overflow:hidden;font-family:MiAIMS Latin,MiAIMS CJK,sans-serif!important}.material-symbols-outlined:before{content:attr(data-icon-symbol);text-indent:0;justify-content:center;align-items:center;font-family:MiAIMS Latin,MiAIMS CJK,sans-serif;font-size:.92em;font-weight:700;line-height:1;display:flex;position:absolute;inset:0}*{box-sizing:border-box}html,body,#root{min-height:100%;margin:0}body{font-family:MiAIMS Latin,MiAIMS CJK,Microsoft JhengHei,PingFang TC,sans-serif}a{color:inherit;text-decoration:none}table{border-collapse:collapse;width:100%}:root{--bg:#eef3f7;--surface:#fff;--surface-alt:#f7fafc;--border:#d6e1ea;--text:#162430;--muted:#5b6f81;--brand:#0f5f86;--brand-deep:#0b3c57;--accent:#e39a16;--info:#2b5f9e;--ok:#22805f;--warn:#bc7a0f;--danger:#b03b35;--shadow-sm:0 1px 2px #0000000d;--shadow-md:0 4px 12px #0f5f8614;--shadow-lg:0 12px 28px #1025341f}body{background:radial-gradient(circle at 8% 0%, #dce9f4 0%, transparent 28%), radial-gradient(circle at 100% 100%, #dcefe7 0%, transparent 30%), var(--bg);color:var(--text)}.app-shell{min-height:100vh;display:flex}.sidebar{color:#f0f6fb;background:linear-gradient(#123d57 0%,#0f2f45 54%,#0b2335 100%);border-right:1px solid #ffffff29;flex-direction:column;flex-shrink:0;width:250px;height:100vh;padding:24px 14px;transition:width .3s;display:flex;position:sticky;top:0;overflow-y:auto}.sidebar-collapsed .sidebar{width:64px}.sidebar-header{white-space:nowrap;justify-content:space-between;align-items:center;margin-bottom:32px;padding:0 10px;display:flex}.logo-area{align-items:center;gap:12px;display:flex}.logo-icon{color:var(--accent);font-size:28px}.sidebar-header h1{letter-spacing:.04em;margin:0;font-size:1.25rem;font-weight:700;transition:opacity .2s}.sidebar-collapsed .sidebar-header h1{opacity:0;pointer-events:none}.nav-group{margin-bottom:8px}.nav-group-header{cursor:pointer;-webkit-user-select:none;user-select:none;border-radius:8px;justify-content:space-between;align-items:center;margin-bottom:4px;padding:8px 12px;transition:background .2s;display:flex}.nav-group-header:hover{background:#ffffff0d}.nav-group-title{text-transform:uppercase;letter-spacing:.05em;color:#ffffffe6;margin:0;font-size:.88rem;font-weight:700}.nav-group-header .expand-icon{color:#ffffff4d;font-size:18px;transition:transform .3s}.nav-group.expanded .nav-group-header .expand-icon{transform:rotate(180deg)}.nav-group-items{transition:max-height .3s ease-out,opacity .2s;overflow:hidden}.nav-group.collapsed .nav-group-items{opacity:0;pointer-events:none;max-height:0}.nav-group.expanded .nav-group-items{opacity:1;max-height:500px}.nav-link{color:#ffffffa6;white-space:nowrap;border-radius:12px;align-items:center;gap:12px;margin-bottom:4px;padding:10px 14px;font-size:.85rem;text-decoration:none;transition:all .2s;display:flex}.nav-link.active{color:var(--accent);box-shadow:inset 2px 0 0 var(--accent);background:linear-gradient(90deg,#ffffff1a,#0000)}.main-wrapper{flex-direction:column;flex:1;min-width:0;display:flex}.main-content{background-color:#f0f4f8;flex:1;padding:32px;overflow-y:auto}.top-bar{background:var(--surface);border-bottom:1px solid var(--border);z-index:100;justify-content:space-between;align-items:center;height:64px;padding:0 24px;display:flex;position:sticky;top:0}.icon-btn{cursor:pointer;width:40px;height:40px;color:var(--muted);background:0 0;border:none;border-radius:10px;place-items:center;transition:all .2s;display:grid}.icon-btn:hover{background:var(--surface-alt);color:var(--brand)}button+button,.btn-primary+.btn-secondary,.btn-secondary+.btn-primary,.icon-btn+.icon-btn{margin-left:12px}.top-bar-right{align-items:center;gap:16px;display:flex}.notification-wrap,.bell-btn{position:relative}.bell-btn.active{color:var(--brand);background:#f0f7ff}.badge{background:var(--danger);color:#fff;border:2px solid var(--surface);border-radius:10px;justify-content:center;align-items:center;min-width:16px;height:16px;font-size:9px;font-weight:700;line-height:1;display:flex;position:absolute;top:3px;right:3px}.bell-btn.has-unread .material-symbols-outlined{animation:.5s infinite bell-shake}@keyframes bell-shake{0%{transform:rotate(0)}20%{transform:rotate(15deg)}40%{transform:rotate(-15deg)}60%{transform:rotate(10deg)}80%{transform:rotate(-10deg)}to{transform:rotate(0)}}.notification-list{border:1px solid var(--border);z-index:200;background:#fff;border-radius:16px;width:320px;position:absolute;top:50px;right:0;overflow:hidden;box-shadow:0 10px 30px #00000026}.notification-list header{border-bottom:1px solid var(--border);color:var(--brand-deep);background:var(--surface-alt);justify-content:space-between;align-items:center;padding:10px 16px;font-weight:700;display:flex}.notification-items{max-height:400px;overflow-y:auto}.notification-item{cursor:pointer;border-bottom:1px solid #f0f4f8;padding:12px 16px;transition:background .2s}.notification-item:hover{background:#f8fbfe}.notification-item.unread{background:#f4faff}.notification-item p{margin:0 0 4px;font-size:.9rem}.notification-item small{color:var(--muted)}.notif-header{justify-content:space-between;margin-bottom:6px;display:flex}.source-tag{color:var(--brand);font-size:.75rem;font-weight:700}.severity-tag{text-transform:uppercase;border-radius:4px;padding:2px 6px;font-size:10px;font-weight:800}.severity-high .severity-tag{color:#b91c1c;background:#fee2e2}.severity-warning .severity-tag{color:#d97706;background:#fef3c7}.severity-info .severity-tag{color:#0284c7;background:#e0f2fe}.notification-item.severity-high{border-left:4px solid #ef4444}.notif-footer{justify-content:space-between;align-items:center;margin-top:8px;display:flex}.ack-btn{background:var(--brand);color:#fff;cursor:pointer;border:0;border-radius:6px;padding:4px 8px;font-size:.75rem}.ack-btn:hover{background:var(--brand-deep)}.loading-item{text-align:center;color:var(--muted);padding:20px}.user-profile{border-left:1px solid var(--border);color:var(--text);align-items:center;gap:12px;padding-left:16px;display:flex}.user-info{flex-direction:column;line-height:1.2;display:flex}.user-name{font-size:.95rem;font-weight:700}.role-badge{color:var(--brand);opacity:.8;font-size:.75rem;font-weight:500}.logout-btn{border-radius:8px;width:34px;height:34px}.shadow{box-shadow:0 10px 40px #0000001a}.page-header{background:var(--surface);border:1px solid var(--border);border-radius:16px;justify-content:space-between;align-items:center;gap:14px;margin-bottom:24px;padding:24px 32px;display:flex;box-shadow:0 4px 12px #0f5f860a}.page-header.compact{margin-bottom:16px;padding:16px 24px}.page-header h1,.page-header h2{color:var(--brand-deep);margin:0;font-size:1.55rem;font-weight:800}.page-header p{color:var(--muted);margin:4px 0 0;font-size:.95rem}.sync-info{color:var(--muted);justify-items:end;gap:4px;font-size:.88rem;display:grid}.error-text{color:var(--danger)}.header-actions{align-items:center;gap:12px;display:flex}.panel{border:1px solid var(--border);background:var(--surface);border-radius:14px;box-shadow:0 12px 28px #10253414}.panel-headline{border-bottom:1px solid var(--border);background:linear-gradient(90deg,#f3f8fc 0%,#fdfefe 70%);justify-content:space-between;align-items:center;gap:10px;padding:12px 14px;display:flex}.panel-headline h3{margin:0;font-size:1.02rem}.panel-headline small{color:var(--muted)}.with-actions{align-items:center}.tile-grid{grid-template-columns:repeat(6,minmax(0,1fr));gap:8px;padding:12px;display:grid}.metric-tile{border:1px solid var(--border);background:linear-gradient(#fff 0%,#f9fcff 100%);border-radius:10px;padding:10px}.metric-tile p{color:var(--muted);margin:0;font-size:.79rem}.metric-tile strong{margin-top:7px;font-size:1.05rem;display:block}.metric-tile[data-tone=info] strong{color:#1d6f9a}.metric-tile[data-tone=warn] strong{color:var(--warn)}.metric-tile[data-tone=ok] strong{color:var(--ok)}.metric-tile[data-tone=danger] strong{color:var(--danger)}.metric-tile[data-tone=brand] strong{color:var(--brand-deep)}.cockpit-grid{grid-template-columns:1.1fr 1.1fr .9fr;align-items:start;gap:12px;margin-top:12px;display:grid}.stacked-column{gap:12px;display:grid}.card-block{border-top:1px dashed #d9e4ec;padding:12px}.card-block:first-of-type{border-top:0}.card-title-row{justify-content:space-between;align-items:center;gap:10px;margin-bottom:8px;display:flex}.card-title-row h4{margin:0;font-size:.94rem}.card-title-row small{color:var(--muted);font-size:.8rem}.energy-chart-wrap{background:#fcfeff;border:1px solid #d8e4ec;border-radius:10px;padding:6px 8px 8px}.energy-chart,.timeseries-chart{width:100%;height:auto;display:block}.energy-axis{color:var(--muted);justify-content:space-between;font-size:.76rem;display:flex}.health-grid{grid-template-columns:repeat(3,minmax(0,1fr));gap:8px;display:grid}.health-gauge{text-align:center}.gauge-ring{border-radius:999px;width:84px;height:84px;margin:0 auto 8px;padding:8px}.gauge-inner{width:100%;height:100%;color:var(--brand-deep);background:#fff;border-radius:999px;justify-content:center;align-items:center;font-weight:700;display:flex}.health-gauge p{color:var(--muted);margin:0;font-size:.82rem}.table-wrap{border:1px solid #dbe6ed;border-radius:10px;overflow-x:auto}.table{border-collapse:collapse;width:100%;font-size:.86rem}.table th,.table td{text-align:left;vertical-align:middle;border-bottom:1px solid #dbe5ec;border-right:1px solid #dbe5ec;padding:8px 10px}.table th{color:#405a6b;text-align:left;background:#edf4f8;font-weight:700}.table th:last-child,.table td:last-child{border-right:0}.table tbody tr:last-child td{border-bottom:0}.table tbody tr:hover{background:#f7fbff}.emotion-bars{gap:7px;margin:0;padding:0;list-style:none;display:grid}.emotion-bars li{grid-template-columns:72px 1fr 44px;align-items:center;gap:8px;display:grid}.bar-track{background:#dfe9f1;border-radius:999px;height:8px;overflow:hidden}.bar-fill{background:linear-gradient(90deg, var(--brand) 0%, var(--accent) 100%);height:100%}.empty-text{color:var(--muted);text-align:center;flex-direction:column;align-items:center;gap:12px;padding:32px 16px;font-size:.88rem;display:flex}.empty-text:before{content:"!";opacity:.2;font-family:MiAIMS Latin,MiAIMS CJK,sans-serif;font-size:2rem;font-weight:700}.with-switcher{gap:8px}.metric-switcher{background:#edf4fa;border:1px solid #d5e2ec;border-radius:10px;gap:4px;padding:3px;display:inline-flex}.metric-switcher button{color:#34546a;cursor:pointer;background:0 0;border:0;border-radius:7px;padding:5px 8px;font-size:.78rem}.metric-switcher button.active{color:var(--brand-deep);background:#fff;box-shadow:0 1px 2px #00000024}.timeseries-wrap{border:1px solid #d9e4ec;border-radius:10px;padding:8px}.status-chip{background:#f4f8fb;border:1px solid #d2dee8;border-radius:999px;padding:2px 8px;font-size:.76rem;display:inline-block}.camera-grid{gap:8px;display:grid}.camera-grid-4{grid-template-columns:repeat(2,minmax(0,1fr))}.camera-grid-6,.camera-grid-9{grid-template-columns:repeat(3,minmax(0,1fr))}.camera-card{background:linear-gradient(135deg,#cbdae6 0%,#95b2c8 100%);border:1px solid #cfdeea;border-radius:10px;min-height:88px;position:relative;overflow:hidden}.camera-card img{object-fit:cover;width:100%;height:100%}.camera-overlay{color:#fff;background:#0b2e44d1;justify-content:space-between;align-items:center;padding:6px 8px;font-size:.74rem;display:flex;position:absolute;bottom:0;left:0;right:0}.empty-graph{color:var(--muted);text-align:center;background:#fbfdff;border:1px dashed #d4e1ea;border-radius:10px;padding:14px;font-size:.86rem}.placeholder-page{border:1px solid var(--border);background:#fff;border-radius:14px;padding:22px}.placeholder-page h2{margin:0 0 10px}.placeholder-page p{color:var(--muted);margin:0 0 8px}.device-layout{gap:12px;display:grid}.page-error{margin:8px 0 10px}.boundary-grid{grid-template-columns:repeat(3,minmax(0,1fr));gap:10px;display:grid}.boundary-card{background:linear-gradient(#fff 0%,#f9fcff 100%);border:1px solid #d7e3ec;border-radius:10px;padding:10px}.boundary-card h4{margin:0 0 6px;font-size:.88rem}.boundary-card ul{color:var(--muted);gap:4px;margin:0;padding-left:18px;font-size:.82rem;display:grid}.boundary-card.do h4{color:var(--ok)}.boundary-card.avoid h4{color:var(--danger)}.boundary-card.backend h4{color:var(--brand-deep)}.filter-row{grid-template-columns:220px 1fr auto;align-items:end;gap:10px;display:grid}.filter-row label{color:var(--muted);gap:6px;font-size:.82rem;display:grid}.filter-row select,.filter-row input{color:var(--text);background:#fff;border:1px solid #cedde8;border-radius:8px;padding:8px 10px}.filter-row button{color:var(--brand-deep);cursor:pointer;background:#f5f9fc;border:1px solid #b9ccda;border-radius:8px;height:36px;padding:0 12px}.smart-building-page{gap:12px;display:grid}.smart-building-header{border:1px solid var(--border);background:linear-gradient(90deg,#f8fcff 0%,#f6fbf9 55%,#fff 100%);border-radius:16px;padding:14px 16px}.smart-building-badge{color:var(--brand-deep);background:#f4f9fd;border:1px solid #cddde8;border-radius:999px;padding:4px 10px;font-size:.78rem}.smart-building-grid{grid-template-columns:repeat(2,minmax(0,1fr));gap:12px;display:grid}.sb-panel{overflow:hidden}.sb-status-grid{grid-template-columns:repeat(2,minmax(0,1fr));gap:8px;display:grid}.sb-status-card{background:linear-gradient(#fff 0%,#f9fcff 100%);border:1px solid #d8e5ef;border-radius:10px;padding:10px}.sb-status-card p{color:var(--muted);margin:0;font-size:.8rem}.sb-status-card strong{margin-top:6px;font-size:1rem;display:block}.sb-status-card small{color:#5e778b;margin-top:4px;font-size:.76rem;display:block}.sb-status-card.is-ok strong{color:var(--ok)}.sb-status-card.is-warn strong{color:var(--warn)}.sb-status-card.is-danger strong{color:var(--danger)}.sb-linkage-list{gap:8px;display:grid}.sb-linkage-list div{background:#fbfeff;border:1px solid #d8e5ef;border-radius:10px;padding:10px}.sb-linkage-list h4,.sb-mini-card h4{margin:0 0 4px;font-size:.9rem}.sb-linkage-list p,.sb-mini-card p,.sb-note{color:var(--muted);margin:0;font-size:.82rem}.sb-access-grid{grid-template-columns:repeat(3,minmax(0,1fr));gap:8px;display:grid}.sb-mini-card{background:linear-gradient(#fff 0%,#f9fcff 100%);border:1px solid #d9e6ef;border-radius:10px;padding:10px}.sb-cctv-strip{grid-template-columns:repeat(4,minmax(0,1fr));gap:8px;margin-bottom:8px;display:grid}.sb-cam{text-align:center;color:#f7fbff;background:linear-gradient(135deg,#204f6b 0%,#153a55 100%);border:1px solid #c7d9e7;border-radius:8px;justify-content:center;align-items:center;min-height:52px;font-size:.78rem;display:flex}.sb-cam.active{background:linear-gradient(135deg,#d98911 0%,#af6708 100%)}.sb-fire-linkage{grid-template-columns:repeat(4,minmax(0,1fr));gap:6px;margin-top:10px;display:grid}.sb-fire-linkage span{color:#355c73;text-align:center;background:#f4f9fd;border:1px dashed #bdd3e2;border-radius:999px;padding:6px 8px;font-size:.76rem}@media (width<=1400px){.tile-grid{grid-template-columns:repeat(4,minmax(0,1fr))}.cockpit-grid{grid-template-columns:1fr 1fr}.stacked-column{grid-column:1/-1;grid-template-columns:1fr 1fr}.boundary-grid,.smart-building-grid{grid-template-columns:1fr}.sb-access-grid{grid-template-columns:1fr 1fr}}@media (width<=980px){.app-shell{width:100%}.sidebar{z-index:10;border-bottom:1px solid #fff3;border-right:0;width:64px;padding:16px 8px;position:sticky;top:0}.sidebar .logo-area,.sidebar .nav-group-header,.sidebar .nav-link>span:not(.material-symbols-outlined){display:none}.sidebar .sidebar-header{justify-content:center;padding:0}.sidebar .nav-link{justify-content:center;padding-inline:10px}.main-content{min-width:0;padding:24px 16px}.sync-info{justify-items:start}.page-header,.panel-headline{flex-direction:column;align-items:flex-start}.tile-grid,.health-grid,.stacked-column,.camera-grid-4,.camera-grid-6,.camera-grid-9,.cockpit-grid,.filter-row,.sb-status-grid,.sb-access-grid,.sb-cctv-strip,.sb-fire-linkage{grid-template-columns:1fr}}.floorplan-layout{grid-template-columns:240px 1fr 300px;gap:12px;display:grid}.floorplan-layout .floorplan-list,.floorplan-layout .floorplan-inspector{border:1px solid var(--border);background:#fbfdff;border-radius:10px;height:max-content;padding:12px}.floorplan-layout .floorplan-items{flex-direction:column;gap:8px;margin-top:8px;display:flex}.floorplan-layout .floorplan-item{text-align:left;cursor:pointer;background:#fff;border:1px solid #cedce8;border-radius:8px;flex-direction:column;gap:4px;padding:10px;transition:all .2s;display:flex}.floorplan-layout .floorplan-item:hover{background:#f9fcff;border-color:#8eb7d0}.floorplan-layout .floorplan-item.active{border-color:var(--brand);box-shadow:0 0 0 1px var(--brand);background:#f0f7ff}.floorplan-layout .floorplan-item strong{color:var(--text);font-size:.88rem}.floorplan-layout .floorplan-item span{color:var(--muted);font-size:.78rem}.floorplan-layout-v2{grid-template-columns:1fr;gap:0;transition:grid-template-columns .3s;display:grid;position:relative;overflow:hidden}.floorplan-layout-v2.with-inspector{grid-template-columns:1fr 340px}.floorplan-canvas-head{justify-content:space-between;align-items:center;margin-bottom:12px;padding:0 4px;display:flex}.floorplan-canvas-head .title-area h4{margin:0;font-size:1.1rem}.floorplan-canvas-head .action-area{gap:8px;display:flex}.floorplan-canvas-head .action-area button{border:1px solid var(--border);color:#3f5d75;cursor:pointer;background:#f8fbfe;border-radius:8px;padding:6px 14px;font-weight:500;transition:all .2s}.floorplan-canvas-head .action-area button:hover{background:#edf3f8;border-color:#abbcc9}.floorplan-canvas-head .action-area button.active{background:var(--brand);color:#fff;border-color:var(--brand);box-shadow:0 2px 6px #0f5f8633}.floorplan-canvas-wrap{background:#fbfdff;border:0;border-radius:10px;padding:10px}.floorplan-canvas{background:#f2f7fb;border:1px dashed #cbdbe7;border-radius:8px;min-height:480px;position:relative;overflow:hidden}.floorplan-canvas.leaf-wrapper{padding:0}.floorplan-placeholder{min-height:480px;color:var(--muted);border:1px dashed var(--border);background:#f7fafc;border-radius:8px;justify-content:center;align-items:center;display:flex}.leaflet-floorplan-root{background:#f2f7fb;width:100%;height:100%;min-height:480px}.device-marker-icon{color:#fff;background:#0f5f86eb;border:2px solid #fff;border-radius:999px;place-items:center;width:30px;height:30px;display:grid;transform:translateZ(0);box-shadow:0 2px 8px #0f5f8659}.device-marker-icon .material-symbols-outlined{font-size:18px;line-height:1}.device-marker-icon.active{background:#f59e0b;box-shadow:0 4px 12px #f59e0b73}.slide-panel{border-left:1px solid var(--border);background:#fff;flex-direction:column;height:100%;animation:.3s slideInRight;display:flex;position:relative;box-shadow:-4px 0 16px #00000008}@keyframes slideInRight{0%{transform:translate(100%)}to{transform:translate(0)}}.inspector-head{border-bottom:1px solid var(--border);background:#fafdff;justify-content:space-between;align-items:center;padding:14px 16px;display:flex}.inspector-head h4{color:var(--brand-deep);margin:0;font-size:1rem}.inspector-head .close-btn{cursor:pointer;color:#999;background:0 0;border:0;font-size:1.5rem;line-height:1}.inspector-content{padding:16px;overflow-y:auto}.prop-row{border-bottom:1px solid #f0f4f8;justify-content:space-between;padding:8px 0;font-size:.88rem;display:flex}.prop-row span:first-child{color:var(--muted)}.prop-row span:last-child{color:var(--text);text-align:right;word-break:break-all;max-width:60%;font-weight:500}.scale-toolbox-v2{background:#fff8ef;border:1px solid #ffe8cc;border-radius:12px;margin-top:16px;padding:14px}.scale-toolbox-v2 h5{color:#c27810;margin:0 0 10px}.scale-toolbox-v2 .btn-group{gap:8px;display:flex}.scale-toolbox-v2 .scale-input-row{align-items:center;margin-top:8px}.floorplan-image{object-fit:contain;background:#f9fcff;width:100%;height:100%;min-height:320px;display:block}.floorplan-overlay{pointer-events:none;position:absolute;inset:0}.map-pin{pointer-events:auto;cursor:pointer;background:0 0;border:0;border-radius:999px;width:18px;height:18px;padding:0;position:absolute;transform:translate(-50%,-50%)}.map-pin span{background:var(--brand);border:2px solid #fff;border-radius:999px;width:100%;height:100%;display:block;box-shadow:0 0 0 2px #0f5f8659}.map-pin.active span{background:var(--accent);box-shadow:0 0 0 3px #e39a1666}.floorplan-placeholder{min-height:320px;color:var(--muted);background:#f7fbff;justify-content:center;align-items:center;display:flex}.inspector-card{background:#fff;border:1px solid #d8e5ef;border-radius:8px;margin-bottom:8px;padding:8px}.inspector-card p{color:var(--muted);margin:0 0 5px;font-size:.82rem}.upload-form{gap:7px;display:grid}.upload-form label{color:var(--muted);gap:4px;font-size:.8rem;display:grid}.upload-form input{color:var(--text);background:#fff;border:1px solid #ccdae7;border-radius:8px;padding:7px 9px}.upload-form button{color:#597083;background:#eef4fa;border:1px solid #c2d4e2;border-radius:8px;height:34px}@media (width<=1400px){.floorplan-layout{grid-template-columns:1fr}}@media (width<=980px){.floorplan-canvas,.floorplan-image,.floorplan-placeholder,.leaflet-floorplan-root{min-height:260px}}.inline-actions{align-items:center;gap:8px;display:inline-flex}.inline-actions button,.row-actions button,.realtime-toolbar button{color:var(--brand-deep);cursor:pointer;background:#f4f9fd;border:1px solid #b8cddd;border-radius:8px;height:30px;padding:0 10px}.row-actions{gap:6px;display:inline-flex}.row-actions .danger{color:#9f2f2a;background:#fdf1f1;border-color:#e0b1ae}.modal-backdrop-lite{z-index:1000;background:#0e1c2a6b;place-items:center;display:grid;position:fixed;inset:0}.modal-card-lite{background:#fff;border:1px solid #c8d9e6;border-radius:14px;width:min(920px,100vw - 32px);max-height:calc(100vh - 32px);padding:12px;overflow:auto;box-shadow:0 22px 42px #0003}.modal-card-lite>header,.modal-card-lite>footer{justify-content:space-between;align-items:center;gap:10px;margin-bottom:10px;display:flex}.modal-card-lite>header h3{margin:0}.modal-card-lite>header button:not(:is(.btn-primary,.primary-btn,.btn-secondary,.secondary-btn,.btn-danger,.danger-btn)),.modal-card-lite>footer button:not(:is(.btn-primary,.primary-btn,.btn-secondary,.secondary-btn,.btn-danger,.danger-btn)){color:var(--brand-deep);background:#f4f8fc;border:1px solid #bfd0dd;border-radius:8px;height:32px;padding:0 12px}.modal-grid{grid-template-columns:repeat(2,minmax(0,1fr));gap:10px;display:grid}.modal-grid label{color:var(--muted);gap:5px;font-size:.82rem;display:grid}.modal-grid label.full{grid-column:1/-1}.modal-grid input,.modal-grid select,.modal-grid textarea{border:1px solid #c9d9e7;border-radius:8px;padding:8px 10px}.realtime-drawer{z-index:1100;background:#fcfdff;border-left:1px solid #d8e3ee;flex-direction:column;width:min(360px,36vw);transition:right .24s cubic-bezier(.16,1,.3,1);display:flex;position:fixed;top:0;bottom:0;right:-380px;overflow:hidden;box-shadow:-8px 0 28px #031b3114}.realtime-drawer.open{right:0}.realtime-body{gap:12px;overflow:auto}.realtime-toolbar{grid-template-columns:1fr;margin-top:auto;padding-top:6px}.realtime-summary{background:#fafdff;border:1px solid #d9e5ee;border-radius:10px;margin-bottom:8px;padding:8px}.realtime-summary p{color:var(--muted);margin:0 0 4px;font-size:.85rem}.realtime-section{margin-bottom:8px}.realtime-section h4{margin:0 0 6px;font-size:.88rem}.realtime-metrics{grid-template-columns:repeat(2,minmax(0,1fr));gap:8px;display:grid}.realtime-metrics article{border:1px solid #d7e4ed;border-radius:10px;padding:8px}.realtime-metrics p{color:var(--muted);margin:0;font-size:.78rem}.realtime-metrics strong{gap:4px;margin-top:6px;display:inline-flex}.realtime-metrics strong span{color:var(--muted);font-size:.78rem;font-weight:400}.realtime-events{gap:8px;margin:0;padding:0;list-style:none;display:grid}.realtime-events li{border:1px solid #d8e4ee;border-radius:10px;padding:8px}.realtime-events li[data-level=warn]{background:#fff8ea;border-color:#ead5ad}.realtime-events li[data-level=error]{background:#fff1f1;border-color:#ecc2c0}.realtime-events span{color:var(--muted);margin-bottom:4px;font-size:.74rem;display:inline-block}.realtime-events p{margin:0 0 4px;font-size:.86rem}.realtime-events small{color:var(--muted)}@media (width<=980px){.modal-grid{grid-template-columns:1fr}.realtime-drawer{width:100%;right:-100%}}.floorplan-list h4,.floorplan-inspector h4,.floorplan-canvas-head h4{font-size:.92rem}.floorplan-canvas-wrap .table-wrap{margin-top:4px}.floorplan-canvas-wrap .row-actions{justify-content:flex-start}.scale-toolbox{background:#fbfdff;border:1px solid #d4e2ed;border-radius:10px;margin-top:10px;padding:10px}.scale-toolbox-header{justify-content:space-between;align-items:center;gap:8px;display:flex}.scale-toolbox-header h5{margin:0;font-size:.9rem}.scale-toolbox-header button,.scale-input-row button{color:var(--brand-deep);background:#f2f8fc;border:1px solid #bdd1df;border-radius:8px;height:32px;padding:0 10px}.scale-toolbox-header button.active{color:#805617;background:#fff6e6;border-color:#c99f51}.scale-toolbox p{color:var(--muted);margin:8px 0;font-size:.82rem}.scale-input-row{grid-template-columns:220px auto auto;align-items:end;gap:8px;display:grid}.scale-input-row label{color:var(--muted);gap:4px;font-size:.8rem;display:grid}.scale-input-row input{border:1px solid #c9d8e5;border-radius:8px;padding:7px 9px}.scale-preview{color:var(--muted);flex-wrap:wrap;gap:12px;margin-top:8px;font-size:.82rem;display:flex}.scale-message{color:var(--brand-deep);margin:8px 0 0;font-size:.82rem}.scale-point{color:#fff;pointer-events:none;border:2px solid #fff;border-radius:999px;place-items:center;width:22px;height:22px;font-size:.72rem;font-weight:700;display:grid;position:absolute;transform:translate(-50%,-50%)}.scale-point.point-a{background:#b54b37}.scale-point.point-b{background:#2d6e95}.scale-line{pointer-events:none;width:100%;height:100%;position:absolute;inset:0}.scale-line line{stroke:#d08a18;stroke-width:.45px;stroke-dasharray:1.2 .8}@media (width<=980px){.scale-input-row{grid-template-columns:1fr}}.btn-primary,.primary-btn{background:linear-gradient(135deg, var(--brand) 0%, var(--brand-deep) 100%);cursor:pointer;border:0;border-radius:10px;justify-content:center;align-items:center;gap:8px;padding:10px 20px;font-size:.92rem;font-weight:600;transition:all .2s cubic-bezier(.4,0,.2,1);display:inline-flex;box-shadow:0 4px 12px #0f5f863d;color:#fff!important}.btn-primary:hover,.primary-btn:hover{filter:brightness(1.1);transform:translateY(-2px);box-shadow:0 6px 16px #0f5f864d}.btn-secondary,.secondary-btn{border:1px solid var(--border);background:var(--surface-alt);color:var(--brand-deep);cursor:pointer;border-radius:10px;justify-content:center;align-items:center;gap:8px;padding:10px 20px;font-size:.92rem;font-weight:600;transition:all .2s;display:inline-flex}.btn-secondary:hover,.secondary-btn:hover{border-color:var(--brand);color:var(--brand);background:#fff}.btn-danger,.danger-btn{background:linear-gradient(135deg, var(--danger) 0%, #8b2d29 100%);cursor:pointer;border:0;border-radius:10px;justify-content:center;align-items:center;gap:8px;padding:10px 20px;font-size:.92rem;font-weight:600;transition:all .2s;display:inline-flex;color:#fff!important}.btn-danger:hover,.danger-btn:hover{filter:brightness(1.1);transform:translateY(-2px)}button:disabled{opacity:.6;cursor:not-allowed!important;transform:none!important}.data-table-container{background:var(--surface);border:1px solid var(--border);box-shadow:var(--shadow-md);border-radius:16px;overflow:auto hidden}.data-table{border-collapse:collapse;width:100%}.data-table th{color:#405a6b;text-align:left;vertical-align:middle;background:#edf4f8;border-bottom:2px solid #c8d8e2;border-right:1px solid #d3dfe7;padding:16px;font-size:.85rem;font-weight:700}.data-table td{vertical-align:middle;border-bottom:1px solid #e0e8ee;border-right:1px solid #e0e8ee;padding:16px;font-size:.92rem}.data-table th:last-child,.data-table td:last-child{border-right:0}.data-table tbody tr:last-child td{border-bottom:0}.data-table tbody tr:hover{background:#f8fafc}.tag{border:1px solid #0000;border-radius:999px;align-items:center;padding:4px 12px;font-size:.75rem;font-weight:600;display:inline-flex}.tag-success{color:var(--ok);background:#ecfdf5;border-color:#d1fae5}.tag-warning{color:var(--warn);background:#fffbeb;border-color:#fef3c7}.tag-danger{color:var(--danger);background:#fef2f2;border-color:#fee2e2}.tag-info{color:var(--brand);background:#eff6ff;border-color:#dbeafe}.page-header{margin-bottom:32px}.page-header h1{color:var(--text);margin:0 0 8px;font-size:1.75rem;font-weight:800}.page-header p{color:var(--muted);font-size:1rem}.form-input,input[type=text],input[type=number],input[type=datetime-local],select{border:1px solid var(--border);background:#fff;border-radius:10px;width:100%;padding:12px 14px;font-size:.95rem;transition:all .2s}.form-input:focus,input:focus,select:focus{border-color:var(--brand);outline:none;box-shadow:0 0 0 4px #0f5f861a}.active-row{background:#f0f7ff!important}.active-row td{border-bottom-color:var(--brand)!important}.toast-container{z-index:9999;pointer-events:none;flex-direction:column;gap:12px;display:flex;position:fixed;top:24px;right:24px}.toast{-webkit-backdrop-filter:blur(10px);pointer-events:auto;background:#ffffffe6;border:1px solid #ffffff80;border-radius:12px;grid-template-columns:auto 1fr auto;align-items:center;gap:14px;min-width:320px;max-width:450px;padding:16px 20px;animation:.4s cubic-bezier(.175,.885,.32,1.275) forwards toastSlideIn;display:grid;position:relative;overflow:hidden;box-shadow:0 10px 30px #0000001a,0 1px 2px #0000000d}@keyframes toastSlideIn{0%{opacity:0;transform:translate(120%)}to{opacity:1;transform:translate(0)}}.toast.removing{animation:.3s ease-in forwards toastSlideOut}@keyframes toastSlideOut{to{opacity:0;transform:translate(120%)}}.toast-icon{color:#fff;border-radius:50%;justify-content:center;align-items:center;width:24px;height:24px;font-size:14px;display:flex}.toast-content{color:var(--text)}.toast-content h5{margin:0 0 2px;font-size:.95rem;font-weight:700}.toast-content p{color:var(--muted);margin:0;font-size:.88rem}.toast-close{color:#999;cursor:pointer;background:0 0;border:0;border-radius:4px;padding:4px;font-size:18px;line-height:1;transition:background .2s}.toast-close:hover{color:#666;background:#0000000d}.toast-success .toast-icon{background:linear-gradient(135deg,#22c55e 0%,#16a34a 100%)}.toast-success{border-left:4px solid #22c55e}.toast-error .toast-icon{background:linear-gradient(135deg,#ef4444 0%,#dc2626 100%)}.toast-error{border-left:4px solid #ef4444}.toast-progress{background:#0000000d;width:100%;height:3px;position:absolute;bottom:0;left:0}.toast-progress-fill{width:0%;height:100%;transition:width linear}.toast-success .toast-progress-fill{background:#22c55e}.toast-error .toast-progress-fill{background:#ef4444}.device-mgmt-container{gap:20px;height:calc(100vh - 150px);margin-top:10px;display:flex;overflow:hidden}.device-inventory-sidebar{background:var(--surface);border:1px solid var(--border);border-radius:20px;flex-direction:column;width:360px;transition:all .3s;display:flex;overflow:hidden;box-shadow:0 4px 20px #0000000a}.inventory-header{border-bottom:1px solid var(--border);background:#fcfdfe;padding:24px 20px}.inventory-header h3{color:var(--heading);align-items:center;gap:8px;margin:0 0 16px;font-size:1.1rem;display:flex}.inventory-search-wrap{position:relative}.inventory-search-wrap input{border:1px solid var(--border);background:#f1f5f9;border-radius:12px;width:100%;padding:10px 14px 10px 40px;font-size:.9rem;transition:all .2s}.inventory-search-wrap input:focus{border-color:var(--brand);background:#fff;box-shadow:0 0 0 4px #0f5f861a}.inventory-search-wrap .material-symbols-outlined{color:var(--muted);font-size:20px;position:absolute;top:50%;left:12px;transform:translateY(-50%)}.inventory-list{flex:1;padding:16px;overflow-y:auto}.device-card-item{cursor:pointer;background:#fff;border:1px solid #0000;border-radius:16px;align-items:center;gap:12px;margin-bottom:10px;padding:14px;transition:all .2s;display:flex}.device-card-item:hover{background:var(--surface-alt);transform:translateY(-2px);box-shadow:0 4px 12px #0000000d}.device-card-item.active{border-color:var(--brand-light);background:#f0f7ff;box-shadow:0 4px 15px #0f5f861a}.device-card-icon{width:44px;height:44px;color:var(--brand);background:#f1f5f9;border-radius:12px;place-items:center;transition:all .2s;display:grid}.device-card-item.active .device-card-icon{background:var(--brand);color:#fff}.device-card-info{flex:1;min-width:0}.device-card-info h4{color:var(--heading);white-space:nowrap;text-overflow:ellipsis;margin:0 0 4px;font-size:.95rem;overflow:hidden}.device-card-info p{color:var(--muted);margin:0;font-size:.8rem}.device-item-meta{align-items:center;gap:8px;margin-top:4px;display:flex}.status-indicator{align-items:center;gap:4px;font-size:.75rem;font-weight:600;display:flex}.status-dot{background:#cbd5e1;border-radius:50%;width:6px;height:6px}.status-dot.online{background:#22c55e;box-shadow:0 0 8px #22c55e66}.device-main-view{border:1px solid var(--border);box-shadow:var(--shadow-sm);background:#e2e8f0;border-radius:20px;flex:1;position:relative;overflow:hidden}.map-interaction-shell{flex-direction:column;height:100%;display:flex}.map-floating-bar{z-index:1000;pointer-events:none;justify-content:space-between;display:flex;position:absolute;top:20px;left:20px;right:20px}.glass-panel{-webkit-backdrop-filter:blur(12px);backdrop-filter:blur(12px);pointer-events:auto;background:#ffffffd6;border:1px solid #ffffff80;border-radius:14px;align-items:center;gap:12px;padding:8px 16px;display:flex;box-shadow:0 8px 32px #00000014}.glass-panel .floor-select{color:var(--text);cursor:pointer;background:0 0;border:none;outline:none;font-size:.9rem;font-weight:600}.device-inspector-floating{z-index:1001;background:#fcfdff;border-left:1px solid #d8e3ee;border-radius:0;flex-direction:column;width:min(360px,36vw);animation:.28s cubic-bezier(.16,1,.3,1) slideInInspectorPanel;display:flex;position:absolute;top:0;bottom:0;right:0;overflow:hidden;box-shadow:-8px 0 28px #031b3114}@keyframes slideInInspectorPanel{0%{opacity:0;transform:translate(28px)}to{opacity:1;transform:translate(0)}}.inspector-header{color:#111827;background:#f8fbff;border-bottom:1px solid #dbe4ed;justify-content:space-between;align-items:center;padding:18px 20px;display:flex}.inspector-header h4{letter-spacing:.01em;margin:0;font-size:1.55rem;font-weight:700}.inspector-body{flex-direction:column;gap:12px;padding:18px 20px 20px;display:flex;overflow-y:auto}.inspector-meta-caption{letter-spacing:.1em;text-transform:uppercase;color:#94a3b8;font-size:.72rem;font-weight:700}.inspector-props{background:#fff;border:1px solid #e0e8f0;border-radius:12px;overflow:hidden}.inspector-row{border-bottom:1px solid #eef3f8;justify-content:space-between;gap:16px;padding:12px 14px;font-size:.95rem;display:flex}.inspector-row:last-child{border-bottom:none}.inspector-row span:first-child{color:#64748b;font-weight:500}.inspector-row span:last-child{color:#1f2937;text-align:right;font-weight:700}.inspector-actions{grid-template-columns:1fr 1fr;gap:10px;margin-top:auto;padding-top:6px;display:grid}.inspector-btn{cursor:pointer;background:#fff;border:1px solid #d4deea;border-radius:14px;justify-content:center;align-items:center;gap:8px;min-height:56px;font-size:1rem;font-weight:600;transition:all .2s;display:flex}.device-inspector-floating .inspector-btn{white-space:nowrap;min-height:46px;padding:0 12px;font-size:.92rem}.device-inspector-floating .inspector-actions{gap:8px}.inspector-btn:hover{background:#f7fbff;border-color:#afc2d7}.inspector-btn.primary{color:#fff;background:#0f5f86;border:1px solid #0f5f86}.inspector-btn.primary:hover{transform:translateY(-1px);box-shadow:0 4px 12px #0f5f8640}.inspector-close-btn{color:#64748b;cursor:pointer;background:0 0;border:none;border-radius:8px;place-items:center;width:32px;height:32px;display:grid}.inspector-close-btn:hover{color:#0f172a;background:#eef3f8}@media (width<=1200px){.device-inspector-floating{width:min(340px,48vw)}}@media (width<=860px){.device-inspector-floating{border-top:1px solid #d8e3ee;border-left:none;width:100%;max-height:56%;top:auto}}.empty-inventory{text-align:center;color:var(--muted);padding:40px 20px}.empty-inventory .material-symbols-outlined{opacity:.3;margin-bottom:16px;font-size:48px}.stress-analysis-page{flex-direction:column;height:calc(100vh - 80px);display:flex}.tab-group-fancy{background:#ffffff0d;border:1px solid #ffffff1a;border-radius:50px;gap:15px;padding:5px;display:flex}.tab-group-fancy button{color:#94a3b8;cursor:pointer;background:0 0;border:none;border-radius:50px;align-items:center;gap:8px;padding:8px 16px;font-weight:500;transition:all .3s;display:flex}.tab-group-fancy button.active{background:var(--brand);color:#fff;box-shadow:0 4px 15px #0f5f864d}.tab-group-fancy button .material-symbols-outlined{font-size:20px}.stress-content-wrapper{flex:1;min-height:0;margin-top:1.5rem;overflow-y:auto}.stress-realtime-container{flex-direction:column;gap:1rem;height:100%;display:flex}.view-controls{justify-content:space-between;align-items:center;display:flex}.mode-toggle{padding:4px;display:flex}.mode-toggle button{color:#64748b;cursor:pointer;background:0 0;border:none;border-radius:6px;align-items:center;gap:6px;padding:6px 12px;font-size:.9rem;display:flex}.mode-toggle button.active{color:var(--brand);background:#0f5f861a;font-weight:600}.live-indicator{letter-spacing:1px;color:#ef4444;align-items:center;gap:8px;font-size:.75rem;font-weight:700;display:flex}.dot.pulse-red{background-color:#ef4444;border-radius:50%;width:8px;height:8px;animation:2s infinite pulse-red;display:inline-block}@keyframes pulse-red{0%{transform:scale(.95);box-shadow:0 0 #ef4444b3}70%{transform:scale(1);box-shadow:0 0 0 10px #ef444400}to{transform:scale(.95);box-shadow:0 0 #ef444400}}.stress-view-body{background:#fff;border:1px solid #e2e8f0;border-radius:12px;flex:1;min-height:clamp(460px,64vh,860px);overflow:hidden;box-shadow:0 1px 3px #0000000d}.stress-map-visualizer{background:linear-gradient(#f7fbff 0%,#eef4f9 100%);height:100%;min-height:clamp(460px,64vh,860px);position:relative}.map-overlay-stats{z-index:1000;pointer-events:none;flex-wrap:wrap;align-items:stretch;gap:10px;display:flex;position:absolute;top:14px;left:14px;right:14px}.stat-card{pointer-events:auto;min-width:130px;padding:8px 14px}.stat-card label{text-transform:uppercase;color:#64748b;font-size:.7rem;display:block}.stat-card .value{color:var(--brand);font-size:1.35rem;font-weight:700}.stat-card.warning .value{color:#f59e0b}.gold-glass{-webkit-backdrop-filter:blur(8px);backdrop-filter:blur(8px);background:#ffffffe6;border:1px solid #0f5f8633;border-radius:50px}.floor-switcher{pointer-events:auto;margin-left:auto}.floor-switcher select{color:#1e293b;background:#fff;border:1px solid #bfd0df;border-radius:10px;min-width:140px;height:36px;padding:0 10px}.leaflet-container-wrapper{height:100%;min-height:inherit;padding:72px 16px 66px;position:relative}.stress-map-visualizer .leaflet-floorplan-root{background:radial-gradient(circle at 20% 10%,#0f5f860d 0,#0f5f8600 45%),#f3f7fb;border:1px solid #cfdae7;border-radius:14px;height:100%;min-height:100%;box-shadow:inset 0 0 0 1px #ffffff73}.map-empty-state{color:#64748b;background:#f6fbff;border:1px dashed #c9d7e5;border-radius:14px;place-items:center;height:100%;min-height:360px;font-weight:600;display:grid}.map-legend{z-index:1000;gap:16px;padding:8px 16px;display:flex;position:absolute;bottom:14px;left:50%;transform:translate(-50%)}.legend-item{align-items:center;gap:6px;font-size:.8rem;font-weight:500;display:flex}.legend-item .dot{border-radius:50%;width:10px;height:10px}.dot.normal{background:#22c55e}.dot.warning{background:#f59e0b}.dot.high{background:#ef4444}@media (width<=980px){.stress-view-body,.stress-map-visualizer{min-height:420px}.leaflet-container-wrapper{padding:114px 10px 60px}.map-overlay-stats{gap:8px}.stat-card{min-width:120px;padding:7px 10px}.floor-switcher{width:100%;margin-left:0}.floor-switcher select{width:100%}.map-legend{gap:10px;padding:6px 12px}}.stress-list-view{flex-direction:column;height:100%;display:flex;position:relative;overflow:hidden}.list-grid-header{color:#475569;background:#f8fafc;border-bottom:1px solid #e2e8f0;grid-template-columns:1fr 1fr 1fr 1fr 1.5fr 88px;padding:15px 25px;font-size:.85rem;font-weight:600;display:grid}.list-item-row{border-bottom:1px solid #f1f5f9}.list-item-row.expanded{background:#f8fbff;border-left:3px solid #0f5f8638}.main-info{grid-template-columns:1fr 1fr 1fr 1fr 1.5fr 88px;align-items:center;padding:15px 25px;font-size:.9rem;display:grid}.main-info>div:last-child{justify-content:center;display:flex}.operation-toggle-btn{color:#0f5f86;cursor:pointer;background:#fff;border:1px solid #dbe6ed;border-radius:8px;align-items:center;gap:4px;padding:6px 12px;font-size:.85rem;font-weight:600;transition:all .2s;display:inline-flex}.operation-toggle-btn .material-symbols-outlined{font-size:18px}.operation-toggle-btn:hover,.operation-toggle-btn.active{background:#eef4fa;border-color:#c9ddec}.subject-name{align-items:center;gap:10px;font-weight:600;display:flex}.stress-badge-cell{justify-content:center;display:flex}.stress-badge{border:1px solid #0000;border-radius:50px;padding:4px 10px;font-size:.75rem;font-weight:600}.stress-badge.normal{color:#166534;background:#f0fdf4;border-color:#dcfce7}.stress-badge.info{color:#1d4ed8;background:#eff6ff;border-color:#bfdbfe}.stress-badge.warning{color:#92400e;background:#fffbeb;border-color:#fef3c7}.stress-badge.high{color:#991b1b;background:#fef2f2;border-color:#fee2e2}.battery-indicator{background:#f1f5f9;border-radius:4px;width:50px;height:8px;margin:0 auto;position:relative}.battery-bar{border-radius:4px;height:100%}.battery-indicator small{color:#94a3b8;font-size:.65rem;position:absolute;top:-15px;left:50%;transform:translate(-50%)}.chart-placeholder{color:#94a3b8;background:#fff;border:1px dashed #d5e0ea;border-radius:10px;flex-direction:column;justify-content:center;align-items:center;min-height:170px;padding:10px 12px;font-size:.8rem;display:flex}.mock-sparkline{background:linear-gradient(90deg,#0000 0%,#0f5f860d 50%,#0000 100%);width:80%;height:50px;margin-top:10px;position:relative}.detail-metrics{grid-template-columns:1fr 1fr;gap:10px;display:grid}.detail-metrics article{background:#fff;border:1px solid #d7e4ed;border-radius:10px;padding:10px}.detail-metrics p{color:var(--muted);margin:0;font-size:.78rem}.detail-metrics strong{color:#0f172a;gap:4px;margin-top:6px;display:inline-flex}.detail-metrics strong span{color:var(--muted);font-size:.78rem;font-weight:400}.realtime-chart-panel h4{margin:0 0 8px;font-size:.86rem}.stress-history-container{flex-direction:column;gap:1.5rem;height:100%;display:flex}.history-filters{background:var(--surface);border:1px solid var(--border);box-shadow:var(--shadow-sm);border-radius:12px;flex-wrap:wrap;align-items:flex-end;gap:1.5rem;margin-bottom:24px;padding:1.25rem 1.5rem;display:flex}.history-filters .filter-item{flex-direction:column;gap:6px;min-width:180px;display:flex}.history-filters .date-range-wrap{align-items:center;gap:12px;display:flex}.form-control-group{flex-direction:column;gap:6px;min-width:0;display:flex}.form-label{color:var(--muted);letter-spacing:.02em;font-size:.82rem;font-weight:700}.input-with-icon{align-items:center;width:100%;display:flex;position:relative}.input-with-icon .material-symbols-outlined{color:#94a3b8;pointer-events:none;font-size:20px;position:absolute;left:12px}.input-with-icon .form-input{width:100%;padding-left:40px!important}.search-input-wrap{flex:1;min-width:250px}.history-table-card{background:var(--surface);min-height:320px;box-shadow:var(--shadow-sm);border-radius:12px;flex:1;padding:0;overflow:auto}.mini-progress-bar{background:#f1f5f9;border-radius:3px;width:80px;height:6px;margin:0 auto;position:relative}.mini-progress-bar .progress{background:var(--brand);opacity:.7;border-radius:3px;height:100%}.mini-progress-bar small{color:#64748b;font-size:.7rem;position:absolute;top:-5px;right:-25px}.history-summary-grid{flex-direction:column;gap:1.5rem;display:flex}.summary-card{padding:1.5rem}.summary-card h5{color:#1e293b;margin-bottom:1rem}.chart-placeholder.mini{height:120px}.course-management-content{flex-direction:column;gap:32px;display:flex}.course-templates h3,.course-schedule-timeline h3{color:var(--text);align-items:center;gap:10px;margin-bottom:20px;font-size:1.25rem;display:flex}.course-templates h3 .material-symbols-outlined,.course-schedule-timeline h3 .material-symbols-outlined{color:var(--brand)}.template-grid{grid-template-columns:repeat(auto-fill,minmax(280px,1fr));gap:20px;margin-top:20px;display:grid}.template-card.detailed{background:var(--surface);border:1px solid var(--border);cursor:pointer;border-radius:16px;flex-direction:column;gap:16px;padding:24px;transition:all .3s cubic-bezier(.4,0,.2,1);display:flex;position:relative;box-shadow:0 4px 6px #1025340a}.template-card.detailed:hover{border-color:var(--brand);transform:translateY(-4px);box-shadow:0 12px 24px #1025341a}.template-card .card-badge{color:var(--brand);background:#f0f7ff;border:1px solid #d0e4f7;border-radius:999px;padding:4px 12px;font-size:.75rem;font-weight:600;position:absolute;top:16px;right:16px}.template-card .card-header-icon{width:48px;height:48px;color:var(--brand);background:linear-gradient(135deg,#f0f7ff 0%,#e1effe 100%);border-radius:12px;place-items:center;display:grid}.template-card .card-header-icon .material-symbols-outlined{font-size:28px}.template-card .card-body h4{color:var(--text);margin:0 0 8px;font-size:1.1rem}.template-card .card-body p{color:var(--muted);margin:0;font-size:.9rem;line-height:1.5}.template-card .card-footer{border-top:1px solid var(--surface-alt);justify-content:space-between;align-items:center;margin-top:auto;padding-top:16px;display:flex}.template-card .duration{color:var(--muted);align-items:center;gap:6px;font-size:.85rem;display:flex}.template-card .duration .material-symbols-outlined{font-size:18px}.template-card .btn-icon{width:32px;height:32px;color:var(--brand);background:#f8fafc;border:0;border-radius:8px;place-items:center;transition:all .2s;display:grid}.template-card.detailed:hover .btn-icon{background:var(--brand);color:#fff}.section-title{align-items:center;gap:12px;margin-bottom:20px;padding:0 4px;display:flex}.section-title h3{color:var(--brand-deep);letter-spacing:-.01em;margin:0;font-size:1.25rem;font-weight:800}.content-card{background:var(--surface);border:1px solid var(--border);border-radius:18px;margin-bottom:28px;padding:24px;transition:all .3s;box-shadow:0 8px 24px #0f5f860f}.content-card:hover{box-shadow:0 16px 40px #0f5f861a}.system-status-card{transition:all .2s cubic-bezier(.4,0,.2,1);box-shadow:0 2px 8px #00000008;background:#fff!important;border:1px solid #e2e8f0!important}.system-status-card:hover{transform:translateY(-3px);box-shadow:0 10px 20px #0f5f8614;border-color:var(--brand)!important}.dashboard-page-container{max-width:1680px;margin:0 auto}.mini-progress{background:#f1f5f9;border-radius:2px;height:4px;overflow:hidden}.tag{letter-spacing:.02em;font-weight:700}.unread-row{background-color:#fef2f2!important}.unread-row:hover{background-color:#fee2e2!important}.unread-row td{border-bottom-color:#fecaca!important}.severity-tag{text-transform:uppercase;border-radius:4px;padding:2px 8px;font-size:.75rem;font-weight:800;display:inline-block}.table thead th,.data-table thead th{text-align:left!important}.table-action-btn{place-items:center;position:relative;width:34px!important;min-width:34px!important;height:34px!important;padding:0!important;display:inline-grid!important}.table-action-btn:after{content:attr(aria-label);z-index:20;color:#fff;white-space:nowrap;opacity:0;pointer-events:none;background:#17212b;border-radius:4px;padding:5px 8px;font-size:.75rem;font-weight:600;line-height:1;transition:opacity .15s;position:absolute;top:50%;right:calc(100% + 8px);transform:translateY(-50%)}.table-action-btn:hover:after,.table-action-btn:focus-visible:after{opacity:1}.font-bold{font-weight:700!important}.font-medium{font-weight:500!important}.monospace{font-family:JetBrains Mono,Fira Code,monospace!important}.text-right{text-align:right!important}.text-center{text-align:center!important}.flex{display:flex!important}.items-center{align-items:center!important}.justify-between{justify-content:space-between!important}.gap-2{gap:8px!important}.gap-4{gap:16px!important}.p-4{padding:16px!important}.m-0{margin:0!important}.h-full{height:100%!important}.w-full{width:100%!important}.overflow-auto{overflow:auto!important}.flex-1{flex:1!important}.text-muted{color:var(--muted)!important}
