:root{color-scheme:dark;font-family:PingFang SC,Microsoft YaHei,Noto Sans CJK SC,system-ui,-apple-system,sans-serif;font-synthesis:none;text-rendering:optimizeLegibility;--bg: #041326;--bg-deep: #020d1c;--surface: #071b33;--surface-raised: #0a2442;--surface-soft: #0d2b4d;--surface-hover: #10365d;--border: rgba(49, 154, 218, .62);--border-soft: rgba(89, 162, 215, .22);--text: #edf7ff;--text-secondary: #b5c8da;--muted: #7791aa;--blue: #2d8cff;--blue-bright: #4ba5ff;--cyan: #32d0e7;--teal: #58d2cf;--green: #73c75b;--amber: #f7bd42;--orange: #ff7a2f;--red: #ff5e67;--font-2xs: clamp(12px, .66vw, 16px);--font-xs: clamp(13px, .73vw, 17px);--font-sm: clamp(14px, .8vw, 19px);--font-md: clamp(16px, .94vw, 22px);--font-lg: clamp(18px, 1.15vw, 28px);--icon-sm: clamp(20px, 1vw, 27px);--icon-md: clamp(26px, 1.3vw, 34px);--icon-lg: clamp(34px, 1.9vw, 48px);--header-height: clamp(64px, 7.6vh, 120px);--page-padding: clamp(8px, .63vw, 16px);--page-gap: clamp(8px, .63vw, 16px);--panel-gap: clamp(8px, .52vw, 12px);--panel-header-height: clamp(38px, 4.45vh, 56px);--radius: 12px;--radius-sm: 8px;--shadow: 0 18px 46px rgba(0, 6, 18, .28)}*{box-sizing:border-box}html{min-width:1200px;min-height:100%;background:var(--bg-deep)}body{margin:0;min-width:1200px;min-height:100vh;color:var(--text);background:radial-gradient(circle at 48% -20%,rgba(22,92,148,.2),transparent 42%),linear-gradient(180deg,#05172d 0%,var(--bg) 54%,#031225 100%);-webkit-font-smoothing:antialiased;overflow-x:hidden}button,input{font:inherit}button{color:inherit}button:focus-visible,input:focus-visible,video:focus-visible{outline:2px solid var(--cyan);outline-offset:2px}button:disabled{cursor:not-allowed;opacity:.42}.app-shell{min-height:100dvh}.app-header{position:sticky;top:0;z-index:50;display:grid;grid-template-columns:clamp(260px,17.5vw,520px) minmax(540px,1fr) clamp(360px,23.7vw,680px);align-items:center;height:var(--header-height);padding:0 var(--page-padding);border-bottom:1px solid rgba(50,153,220,.45);background:#031020f0;box-shadow:0 8px 28px #00061040;-webkit-backdrop-filter:blur(18px);backdrop-filter:blur(18px)}.brand{display:flex;align-items:center;gap:clamp(8px,.63vw,14px);min-width:0;padding:0;border:0;background:transparent;text-align:left;cursor:pointer}.brand__icon{display:grid;place-items:center;flex:0 0 clamp(40px,2.3vw,64px);width:clamp(40px,2.3vw,64px);height:clamp(40px,2.3vw,64px);color:var(--cyan);border:1px solid rgba(50,208,231,.52);border-radius:10px;background:#1a77b32b}.brand__icon svg{width:clamp(28px,1.45vw,40px);height:clamp(28px,1.45vw,40px)}.brand>span:last-child{display:grid;min-width:0}.brand strong{overflow:hidden;font-size:var(--font-lg);font-weight:700;letter-spacing:.03em;text-overflow:ellipsis;white-space:nowrap}.brand small{margin-top:3px;color:var(--muted);font-size:var(--font-xs);letter-spacing:.11em}.main-nav{display:flex;align-self:stretch;justify-content:center;min-width:0;scrollbar-width:none}.main-nav::-webkit-scrollbar{display:none}.main-nav__item{position:relative;display:inline-flex;align-items:center;justify-content:center;flex-shrink:0;height:100%;min-width:clamp(82px,5vw,118px);padding:0 clamp(10px,1.1vw,24px);border:0;background:transparent;color:var(--text-secondary);font-size:var(--font-md);font-weight:600;text-decoration:none;white-space:nowrap;cursor:pointer;transition:color .16s ease,background .16s ease}.main-nav__item:hover{color:var(--text);background:#2372ad24}.main-nav__item:focus-visible{outline:2px solid var(--cyan);outline-offset:-2px}.main-nav__item:after{position:absolute;right:25%;bottom:0;left:25%;height:3px;border-radius:3px 3px 0 0;background:var(--blue);box-shadow:0 -5px 18px #2d8cff8f;content:"";opacity:0;transform:scaleX(.45);transition:.16s ease}.main-nav__item.is-active{color:#fff;background:#2370b842}.main-nav__item.is-active:after{opacity:1;transform:scaleX(1)}.nav-dropdown{position:relative;display:flex;align-self:stretch}.nav-dropdown>.main-nav__item{display:flex;align-items:center;justify-content:center;gap:6px}.nav-dropdown>.main-nav__item svg{width:15px;height:15px;transition:transform .16s ease}.nav-dropdown>.main-nav__item svg.is-open{transform:rotate(180deg)}.nav-dropdown__menu{position:absolute;z-index:30;top:calc(100% + 1px);left:50%;display:grid;width:156px;gap:5px;padding:7px;border:1px solid rgba(50,153,220,.56);border-radius:0 0 9px 9px;background:#031426fa;box-shadow:0 16px 32px #0006106b;transform:translate(-50%)}.nav-dropdown__menu button{min-height:38px;padding:7px 12px;border:1px solid transparent;border-radius:6px;background:transparent;color:var(--text-secondary);font-size:var(--font-sm);font-weight:600;cursor:pointer}.nav-dropdown__menu button:hover,.nav-dropdown__menu button:focus-visible{color:#fff;border-color:var(--border-soft);background:#2372ad2e;outline:0}.nav-dropdown__menu button.is-active{color:#fff;border-color:#2d8cff85;background:#2d8cff3d}.main-nav__item[aria-disabled=true],.nav-dropdown__menu button[aria-disabled=true]{cursor:default}.header-meta{display:flex;align-items:center;justify-content:flex-end;gap:clamp(7px,.63vw,13px);min-width:0}.header-meta time{display:flex;align-items:baseline;gap:10px;white-space:nowrap}.header-meta time span{color:#9cb0c5;font-size:var(--font-sm)}.header-meta time strong{font-family:ui-monospace,SFMono-Regular,Menlo,monospace;font-size:clamp(22px,1.35vw,34px);letter-spacing:.06em}.account-button,.logout-button{display:grid;place-items:center;width:clamp(36px,2vw,50px);height:clamp(36px,2vw,50px);padding:0;border:1px solid var(--border-soft);border-radius:8px;background:#0a2a4bb8;cursor:pointer}.account-button:hover,.logout-button:hover{color:var(--cyan);border-color:var(--border)}.account-button svg,.logout-button svg{width:var(--icon-md);height:var(--icon-md)}.app-content{min-height:calc(100dvh - var(--header-height));padding:var(--page-padding)}.page-enter{min-height:calc(100dvh - var(--header-height) - (var(--page-padding) * 2));animation:page-in .22s ease-out}@keyframes page-in{0%{opacity:0;transform:translateY(4px)}to{opacity:1;transform:none}}.dashboard-grid{display:grid;height:calc(100dvh - var(--header-height) - (var(--page-padding) * 2));min-height:0;gap:var(--page-gap)}.panel{display:flex;min-width:0;min-height:0;flex-direction:column;overflow:hidden;border:1px solid var(--border);border-radius:var(--radius);background:linear-gradient(145deg,#091f38fa,#05182dfa);box-shadow:inset 0 1px #77cbff0a,var(--shadow)}.panel__header{display:flex;min-height:var(--panel-header-height);align-items:center;justify-content:space-between;gap:10px;padding:clamp(6px,.58vw,11px) clamp(10px,.73vw,16px);border-bottom:1px solid rgba(75,150,202,.1)}.panel__header h2{margin:0;font-size:var(--font-md);font-weight:650;letter-spacing:.02em}.panel__actions{display:flex;align-items:center;gap:8px}.panel__body{min-width:0;min-height:0;flex:1;padding:clamp(8px,.63vw,14px) clamp(10px,.73vw,16px)}.chart{width:100%;height:100%;min-height:0}.progress-panel .panel__body,.weather-list,.data-table-wrap,.category-tabs,.location-list,.camera-list,.ai-gallery{scrollbar-color:rgba(75,165,226,.52) transparent;scrollbar-width:thin}.progress-panel .panel__body::-webkit-scrollbar,.weather-list::-webkit-scrollbar,.data-table-wrap::-webkit-scrollbar,.category-tabs::-webkit-scrollbar,.location-list::-webkit-scrollbar,.camera-list::-webkit-scrollbar,.ai-gallery::-webkit-scrollbar{width:6px;height:6px}.progress-panel .panel__body::-webkit-scrollbar-thumb,.weather-list::-webkit-scrollbar-thumb,.data-table-wrap::-webkit-scrollbar-thumb,.category-tabs::-webkit-scrollbar-thumb,.location-list::-webkit-scrollbar-thumb,.camera-list::-webkit-scrollbar-thumb,.ai-gallery::-webkit-scrollbar-thumb{border-radius:999px;background:#4ba5e285}.text-button{padding:5px 0;border:0;background:transparent;color:var(--cyan);font-size:var(--font-sm);cursor:pointer}.panel-counter{color:var(--muted);font-size:var(--font-xs)}.primary-button,.date-range-button{min-height:38px;padding:7px 14px;border:1px solid rgba(65,151,229,.55);border-radius:7px;background:#1e69bc6b;color:#eaf6ff;font-size:var(--font-sm);cursor:pointer}.primary-button:hover,.date-range-button:hover{border-color:var(--blue-bright);background:#247ee18c}.status-badge{display:inline-flex;align-items:center;justify-content:center;min-height:26px;padding:3px 8px;border:1px solid transparent;border-radius:999px;font-size:var(--font-2xs);font-style:normal;white-space:nowrap}.status-badge--positive{color:#83ead1;border-color:#58d2cf40;background:#28a48f1f}.status-badge--warning{color:#ffd275;border-color:#f7bd4247;background:#f7bd421a}.status-badge--muted{color:#91a7bb;border-color:#89a2b933;background:#6c869e1a}.segmented{display:inline-flex;gap:4px;padding:3px;border:1px solid var(--border-soft);border-radius:8px;background:#0311218f}.segmented button{min-height:32px;padding:5px 14px;border:0;border-radius:5px;background:transparent;color:var(--text-secondary);font-size:var(--font-xs);cursor:pointer;white-space:nowrap}.segmented button:hover{color:#fff}.segmented button.is-active{color:#fff;background:var(--blue);box-shadow:0 4px 14px #2d8cff3d}.overview-grid{grid-template-columns:minmax(270px,.92fr) minmax(540px,1.9fr) minmax(280px,1fr);height:auto;min-height:calc(100dvh - var(--header-height) - (var(--page-padding) * 2))}.overview-column{display:grid;min-height:0;gap:var(--panel-gap)}.overview-column--left{grid-template-rows:max-content max-content minmax(165px,1fr)}.overview-column--center,.overview-column--right{contain:size}.overview-column--center{grid-template-rows:minmax(0,1.65fr) minmax(0,.72fr) minmax(205px,.7fr)}.overview-column--right{grid-template-rows:minmax(0,1fr) minmax(0,1.08fr)}.project-metrics{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:10px}.project-metric{display:flex;align-items:center;gap:10px;min-width:0;padding:8px 6px}.project-metric+.project-metric{border-left:1px solid var(--border-soft);padding-left:12px}.project-metric__icon{display:grid;place-items:center;flex:0 0 40px;height:40px;color:var(--blue-bright);border-radius:9px;background:#2d8cff29}.project-metric__icon--amber{color:var(--amber);background:#f7bd4224}.project-metric__icon svg{width:var(--icon-md);height:var(--icon-md)}.project-metric div{display:grid;min-width:0}.project-metric strong{font-family:ui-monospace,SFMono-Regular,Menlo,monospace;font-size:clamp(20px,1.35vw,34px);line-height:1.1}.project-metric small{margin-top:6px;color:var(--muted);font-size:var(--font-xs)}.project-description{margin:10px 4px 0;color:var(--text-secondary);font-size:var(--font-xs);line-height:1.75;white-space:pre-line;overflow-wrap:anywhere}.bim-panel .panel__body{display:flex;padding:0}.bim-viewer{display:block;width:100%;height:100%;min-height:0;border:0;background:var(--bg-deep)}.construction-embed-panel .panel__body{display:flex;padding:0}.construction-embed-viewer{display:block;width:100%;height:100%;min-height:0;border:0;background:var(--bg-deep)}.construction-embed-status{display:grid;flex:1;place-items:center;padding:var(--page-padding);color:var(--text-secondary);font-size:var(--font-sm)}.key-value-list{display:grid;gap:5px}.key-value-row{display:grid;grid-template-columns:104px minmax(0,1fr);align-items:center;min-height:36px;padding:6px 9px;border:1px solid rgba(78,149,201,.14);border-radius:6px;background:#0a2a4961}.key-value-row>span{display:flex;align-items:center;gap:7px;color:var(--text-secondary);font-size:var(--font-xs)}.key-value-row svg{width:var(--icon-sm);height:var(--icon-sm);color:var(--cyan)}.key-value-row strong{overflow:hidden;color:#d9e9f6;font-size:var(--font-xs);font-weight:500;text-overflow:ellipsis;white-space:nowrap}.staff-panel{contain:size}.staff-list{display:grid;height:100%;gap:7px;grid-auto-rows:minmax(62px,max-content);align-content:start;overflow-y:auto}.staff-card{display:grid;grid-template-columns:50px minmax(0,1fr);align-items:center;gap:10px;padding:9px;border-bottom:1px dashed rgba(120,168,205,.22)}.staff-card:last-child{border-bottom:0}.staff-card>svg{width:46px;height:46px;color:#b6c9da}.staff-card div{display:grid;gap:3px;min-width:0}.staff-card strong{font-size:var(--font-sm)}.staff-card span{overflow:hidden;color:var(--text-secondary);font-size:var(--font-xs);text-overflow:ellipsis;white-space:nowrap}.staff-empty{display:grid;height:100%;place-content:center;justify-items:center;gap:8px;color:var(--muted);text-align:center}.staff-empty svg{width:52px;height:52px;color:#7898b4}.staff-empty strong{color:var(--text-secondary);font-size:var(--font-sm)}.staff-empty span{font-size:var(--font-xs)}.weather-current{display:flex;justify-content:space-between;gap:8px;color:var(--text-secondary);font-size:var(--font-xs)}.weather-current>span:last-child{display:flex;align-items:center;gap:4px}.weather-current svg{width:var(--icon-sm);height:var(--icon-sm);color:var(--cyan)}.project-media-panel .panel__body{padding:8px 12px 12px}.project-media-switch{display:flex;gap:4px;padding:3px;border:1px solid rgba(92,172,228,.32);border-radius:8px;background:#06172b}.project-media-switch button{padding:4px 12px;border:0;border-radius:5px;background:transparent;color:#9db8d1;font-size:var(--font-xs);cursor:pointer}.project-media-switch button[aria-pressed=true]{background:#1c6ba8;color:#fff}.project-media{position:relative;height:100%;margin:0;overflow:hidden;border:1px solid rgba(92,172,228,.32);border-radius:8px;background:var(--bg-deep)}.project-media img{width:100%;height:100%;object-fit:cover}.project-media video{width:100%;height:100%;object-fit:cover;background:#03080e}.project-video-play{position:absolute;left:50%;top:50%;transform:translate(-50%,-50%);padding:12px 20px;border:1px solid #68b8f2;border-radius:8px;color:#fff;background:#061f38e6;cursor:pointer}.project-media:after{position:absolute;inset:auto 0 0;height:35%;background:linear-gradient(180deg,transparent,rgba(2,12,25,.86));content:"";pointer-events:none}.project-media--plan img{object-fit:cover;object-position:center}.project-media--plan:after{display:none}.progress-panel .panel__body{display:flex;align-items:center;padding:12px 18px 16px}.progress-track{display:flex;width:100%;align-items:flex-start}.progress-node{position:relative;display:grid;flex:1;justify-items:center;gap:6px;min-width:0;text-align:center}.progress-node__dot{position:relative;z-index:2;width:13px;height:13px;border:3px solid #92aabe;border-radius:50%;background:#17344f}.progress-node__line{position:absolute;z-index:1;top:6px;left:50%;width:100%;height:2px;background:#80a3bf4d}.progress-node--completed .progress-node__dot{border-color:var(--teal);background:var(--teal);box-shadow:0 0 12px #58d2cf73}.progress-node--completed .progress-node__line{background:var(--teal)}.progress-node--active .progress-node__dot{border-color:var(--blue-bright);background:#082446;box-shadow:0 0 16px #2d8cffb8}.progress-node div{display:grid;gap:3px;min-width:0}.progress-node strong{font-size:var(--font-xs);font-weight:600}.progress-node small{display:flex;align-items:center;justify-content:center;gap:3px;color:var(--muted);font-size:var(--font-2xs);line-height:1.25}.progress-node small time{white-space:nowrap}.progress-node em{color:var(--muted);font-size:var(--font-2xs);font-style:normal}.progress-node--active em{color:var(--blue-bright)}.weather-panel .panel__body{display:flex;flex-direction:column;justify-content:center;gap:5px;padding-top:6px}.weather-current{width:100%}.weather-list{display:grid;width:100%;grid-template-columns:repeat(7,minmax(62px,1fr));gap:4px}.weather-item{display:grid;justify-items:center;gap:3px;padding:6px 2px;border-radius:7px;transition:background .16s ease}.weather-item:hover{background:#2169a02e}.weather-item svg{width:var(--icon-lg);height:var(--icon-lg);color:#dfeaf4}.weather-item strong{margin-top:-26px;margin-left:30px;color:var(--amber);font-size:var(--font-2xs)}.weather-item span{margin-top:11px;font-size:var(--font-xs)}.weather-item small{color:var(--muted);font-size:var(--font-2xs)}.distribution-panel .panel__body{padding:2px 8px 10px}.distribution-empty{display:grid;place-items:center;height:100%;color:var(--text-secondary);font-size:var(--font-xs)}.alarms-panel .panel__body{padding:2px 12px 10px}.alarm-list{display:grid;height:100%}.alarm-item{display:grid;grid-template-columns:46px minmax(0,1fr) auto;align-items:center;gap:10px;min-height:76px;border-bottom:1px dashed rgba(121,166,202,.22)}.alarm-item:last-child{border-bottom:0}.alarm-item__icon{display:grid;place-items:center;width:42px;height:42px;color:var(--amber);border-radius:9px;background:#f7bd421a}.alarm-item--critical .alarm-item__icon{color:var(--red);background:#ff5e671a}.alarm-item__icon svg{width:27px;height:27px}.alarm-item div{display:grid;min-width:0;gap:5px}.alarm-item strong{overflow:hidden;font-size:var(--font-xs);font-weight:550;text-overflow:ellipsis;white-space:nowrap}.alarm-item div span{color:var(--muted);font-size:var(--font-2xs)}.power-grid{grid-template-columns:clamp(320px,18vw,520px) minmax(0,1fr)}.power-summary-panel .panel__body{padding:4px 12px 10px}.power-summary-list{display:grid;height:100%;grid-template-rows:repeat(3,minmax(0,1fr))}.power-summary{display:grid;min-height:0;grid-template-rows:auto minmax(90px,1fr) auto;padding:12px 4px;border-bottom:1px solid var(--border-soft)}.power-summary:last-child{border-bottom:0}.power-summary header{display:flex;align-items:baseline;justify-content:space-between;gap:10px}.power-summary header span{color:var(--text-secondary);font-size:var(--font-sm)}.power-summary header strong{color:var(--cyan);font-family:ui-monospace,SFMono-Regular,Menlo,monospace;font-size:clamp(22px,1.35vw,34px)}.power-summary header small{color:var(--text-secondary);font-family:inherit;font-size:var(--font-xs);font-weight:500}.power-summary__chart,.power-summary__chart .chart{min-height:0}.power-summary footer{display:flex;justify-content:center;gap:16px}.power-summary footer span{display:inline-flex;align-items:center;gap:5px;color:var(--muted);font-size:var(--font-2xs)}.power-summary footer i{width:8px;height:8px;border-radius:2px}.power-main{display:grid;min-width:0;min-height:0;grid-template-rows:minmax(0,.82fr) minmax(0,1.18fr);gap:var(--panel-gap)}.power-chart-panel .panel__body{padding:4px 12px 10px}.power-live{display:flex;align-items:center;gap:6px;color:#82e3d2;font-size:var(--font-xs)}.power-live svg{width:var(--icon-sm);height:var(--icon-sm);color:var(--cyan)}.power-table-panel .panel__body{display:flex;min-height:0;flex-direction:column;padding:12px}.table-toolbar{display:flex;align-items:center;gap:12px;margin-bottom:10px}.table-toolbar>div:first-child{display:grid;gap:2px;margin-right:auto}.table-toolbar>div:first-child strong{font-size:var(--font-md)}.table-toolbar>div:first-child span{color:var(--muted);font-size:var(--font-2xs)}.date-range-button{color:var(--text-secondary)}.data-table-wrap{min-height:0;flex:1;overflow:auto;border:1px solid rgba(111,167,210,.24);border-radius:8px}.data-table{width:100%;min-width:780px;border-collapse:collapse;font-size:var(--font-xs)}.data-table th{position:sticky;top:0;z-index:2;height:40px;padding:8px 13px;color:#c6d8e8;background:#0c2c4e;font-weight:600;text-align:left}.data-table td{height:40px;padding:8px 13px;border-top:1px solid rgba(100,156,199,.17);color:#bfd1e0}.data-table tbody tr:nth-child(2n){background:#0e30524d}.data-table tbody tr:hover{background:#1a528161}.text-warning{color:var(--amber)!important}.text-positive{color:#76d7c4!important}.table-state{display:inline-flex;padding:4px 9px;border-radius:999px;color:#81dfcd;background:#3fb1981f;font-size:var(--font-2xs)}.table-state--warning{color:#ffd173;background:#f7bd421f}.pagination{display:flex;justify-content:flex-end;gap:5px;padding-top:10px}.pagination button{display:grid;place-items:center;min-width:34px;height:34px;padding:0 9px;border:1px solid rgba(87,151,203,.28);border-radius:6px;background:#09233fb8;color:var(--text-secondary);font-size:var(--font-xs);cursor:pointer}.pagination button:hover:not(:disabled){border-color:var(--blue);color:#fff}.pagination button.is-active{color:#fff;border-color:var(--blue);background:var(--blue)}.pagination svg{width:15px;height:15px}.location-grid,.video-grid{grid-template-columns:clamp(330px,20vw,600px) minmax(0,1fr)}.location-list-panel .panel__body,.camera-list-panel .panel__body{display:flex;min-height:0;flex-direction:column;padding:10px 12px 12px}.location-counts{display:grid;grid-template-columns:1fr 1fr;margin:12px 0;border:1px solid var(--border-soft);border-radius:8px;overflow:hidden}.location-counts div{display:flex;align-items:baseline;justify-content:center;gap:7px;padding:10px;background:#113a6073}.location-counts div+div{border-left:1px solid var(--border-soft)}.location-counts strong{color:var(--cyan);font-family:ui-monospace,SFMono-Regular,Menlo,monospace;font-size:clamp(24px,1.3vw,34px)}.location-counts .is-offline strong{color:var(--amber)}.location-counts span{color:var(--text-secondary);font-size:var(--font-xs)}.search-field{display:flex;align-items:center;gap:8px;height:40px;margin-bottom:10px;padding:0 11px;border:1px solid var(--border-soft);border-radius:7px;background:#0311209e;color:var(--muted)}.search-field svg{width:var(--icon-sm);height:var(--icon-sm)}.search-field input{width:100%;border:0;outline:0;background:transparent;color:var(--text);font-size:var(--font-xs)}.search-field input::placeholder{color:#607c97}.location-list,.camera-list{display:grid;min-height:0;flex:1;align-content:start;gap:7px;overflow:auto;padding-right:3px}.location-row,.camera-row{display:grid;width:100%;min-height:70px;align-items:center;gap:10px;padding:9px 10px;border:1px solid transparent;border-radius:8px;background:#0e3257b8;text-align:left;cursor:pointer;transition:.15s ease}.location-row{grid-template-columns:36px minmax(0,1fr) auto}.location-row:hover,.camera-row:hover{border-color:#4aa0de6b;background:#11416ed1}.location-row.is-selected,.camera-row.is-selected{border-color:var(--blue);background:#2169b857;box-shadow:inset 3px 0 var(--blue)}.location-row__icon{display:grid;place-items:center;width:38px;height:38px;border-radius:8px;color:var(--cyan);background:#32d0e71a}.location-row__icon svg{width:23px;height:23px}.location-row>span:nth-child(2),.location-row>span:nth-child(3),.camera-row>span:nth-child(2){display:grid;min-width:0;gap:4px}.location-row>span:nth-child(3){justify-items:end}.location-row strong,.camera-row strong{overflow:hidden;font-size:var(--font-sm);text-overflow:ellipsis;white-space:nowrap}.location-row small,.camera-row small{color:var(--muted);font-size:var(--font-2xs)}.location-map-panel .panel__body{padding:8px}.map-coordinates{color:var(--muted);font-family:ui-monospace,SFMono-Regular,Menlo,monospace;font-size:var(--font-2xs)}.map-canvas{position:relative;height:100%;min-height:0;overflow:hidden;border-radius:8px;background:#061b31}.map-canvas>img{width:100%;height:100%;object-fit:cover;filter:saturate(.86) contrast(1.04) brightness(.84)}.map-overlay{position:absolute;top:0;right:0;bottom:0;left:0}.map-marker{position:absolute;display:grid;place-items:center;width:34px;height:40px;padding:0;border:0;background:transparent;color:var(--red);cursor:pointer;transform:translate(-50%,-100%);filter:drop-shadow(0 3px 5px rgba(0,0,0,.5))}.map-marker svg{width:32px;height:32px}.map-marker--offline{color:#8498aa}.map-marker.is-selected{color:var(--cyan);transform:translate(-50%,-100%) scale(1.3)}.map-detail-card{position:absolute;top:16px;left:16px;display:grid;width:min(360px,calc(100% - 32px));grid-template-columns:44px minmax(0,1fr) auto;align-items:center;gap:10px;padding:12px;border:1px solid rgba(66,180,224,.65);border-radius:9px;background:#031324e6;box-shadow:0 14px 36px #00071261;-webkit-backdrop-filter:blur(12px);backdrop-filter:blur(12px)}.map-detail-card__icon{display:grid;place-items:center;width:42px;height:42px;border-radius:8px;color:var(--cyan);background:#32d0e71f}.map-detail-card__icon svg{width:25px;height:25px}.map-detail-card>div{display:grid;gap:3px;min-width:0}.map-detail-card small,.map-detail-card span{color:var(--muted);font-size:var(--font-2xs)}.map-detail-card strong{font-size:var(--font-sm)}.map-legend{position:absolute;right:16px;bottom:14px;display:flex;gap:13px;padding:7px 10px;border:1px solid var(--border-soft);border-radius:7px;background:#031324db}.map-legend span{display:flex;align-items:center;gap:5px;color:var(--text-secondary);font-size:var(--font-2xs)}.map-legend i{width:8px;height:8px;border-radius:50%;background:var(--red)}.map-legend .marker-offline{background:#8498aa}.map-legend .marker-selected{background:var(--cyan)}.camera-summary{display:flex;align-items:center;justify-content:space-between;margin-bottom:10px;padding:10px;border:1px solid var(--border-soft);border-radius:8px;background:#0c2e509e}.camera-summary span{display:flex;align-items:center;gap:7px;color:var(--text-secondary);font-size:var(--font-xs)}.camera-summary svg{width:var(--icon-md);height:var(--icon-md);color:var(--cyan)}.camera-summary strong{color:var(--cyan);font-family:ui-monospace,SFMono-Regular,Menlo,monospace;font-size:20px}.camera-summary small{color:var(--muted);font-size:var(--font-xs)}.camera-row{grid-template-columns:38px minmax(0,1fr) auto}.camera-row__index{display:grid;place-items:center;width:38px;height:38px;color:var(--cyan);border:1px solid rgba(50,208,231,.22);border-radius:7px;background:#32d0e714;font-family:ui-monospace,SFMono-Regular,Menlo,monospace;font-size:var(--font-sm)}.video-viewer-panel .panel__body{padding:8px;display:flex;flex-direction:column;gap:8px;min-height:0}.video-viewer-panel .video-wall{flex:1;min-height:0;height:auto}.video-toolbar{display:flex;gap:12px;flex-wrap:wrap;justify-content:flex-end}.ezopen-frame{display:block;width:100%;height:100%;border:0}.ptz-controls,.recording-controls{flex:none;border:1px solid var(--border);border-radius:6px;background:#0a1a2a;padding:10px 12px;font-size:var(--font-sm)}.ptz-controls{display:flex;align-items:center;flex-wrap:wrap;gap:12px}.ptz-controls small{display:block;color:var(--text-secondary);margin-top:3px}.ptz-buttons{display:flex;gap:6px}.ptz-buttons button{display:grid;place-items:center;width:36px;height:34px}.ptz-buttons svg{width:22px;height:22px}.ptz-result{flex:1;min-width:180px}.recording-query,.recording-selection{display:flex;align-items:center;flex-wrap:wrap;gap:10px}.recording-query label,.recording-selection label{display:flex;align-items:center;gap:8px}.recording-selection{margin-top:10px}.recording-selection input[type=range]{flex:1;min-width:100px;min-height:26px;accent-color:#1bd5e6;cursor:pointer;touch-action:none}.recording-time{min-width:8ch;font-variant-numeric:tabular-nums}.playback-rate{display:flex;align-items:center;gap:8px;white-space:nowrap}.playback-rate__error{color:var(--warning, #ffc76a);white-space:normal;max-width:24em}.recording-controls input[type=date],.recording-controls select{color-scheme:dark;background:#10263b;color:#dcecf5;padding:6px;border:1px solid #284d68;border-radius:4px}.recording-controls button,.ptz-controls button{border:1px solid #285570;border-radius:4px;background:#143149;color:#c5edfa;padding:6px 10px}.ptz-controls button:disabled,.recording-controls button:disabled{opacity:.4;cursor:not-allowed}.recording-controls p{margin:8px 0 0}.video-layout-tabs{display:inline-flex;gap:4px}.video-layout-tabs button{min-height:34px;padding:6px 12px;border:1px solid transparent;border-radius:6px;background:transparent;color:var(--text-secondary);font-size:var(--font-xs);cursor:pointer}.video-layout-tabs button.is-active{color:var(--cyan);border-color:#32d0e752;background:#32d0e71a}.video-wall{display:grid;height:100%;gap:7px}.video-wall--1{grid-template-columns:1fr}.video-wall--4{grid-template-columns:repeat(2,minmax(0,1fr));grid-template-rows:repeat(2,minmax(0,1fr))}.video-wall--9{grid-template-columns:repeat(3,minmax(0,1fr));grid-template-rows:repeat(3,minmax(0,1fr))}.video-tile{position:relative;display:grid;grid-template-rows:auto minmax(0,1fr) auto;min-width:0;min-height:0;overflow:hidden;border:1px solid rgba(86,158,211,.28);border-radius:8px;background:#020a13}.video-tile video{width:100%;height:100%;object-fit:contain}.video-tile video{display:block;background:#01060c}.video-stage{position:relative;min-height:0;overflow:hidden}.official-camera-player{position:absolute;top:0;right:0;bottom:0;left:0;overflow:hidden}.official-camera-player .ezplayer-footer{display:none}.video-controls{flex-wrap:wrap}.video-controls__actions{display:flex;align-items:center;gap:3px}.video-controls button{display:grid;place-items:center;width:32px;height:30px;border:0;border-radius:4px;background:transparent;cursor:pointer}.video-controls button:hover{background:#32d0e71f}.video-controls button:disabled{opacity:.4;cursor:not-allowed}.video-controls select{min-height:30px;max-width:115px;padding:3px 6px;border:1px solid var(--border-soft);border-radius:4px;background:#071726;color:var(--text-secondary);font:inherit}.video-codec{margin-left:auto;white-space:nowrap}.video-tile:fullscreen{width:100vw;height:100vh;max-width:none;max-height:none;margin:0;border:0;border-radius:0}.video-tile>header{display:flex;flex-wrap:wrap;align-items:center;gap:8px;min-height:38px;padding:7px 10px;background:#071726}.video-tile>header>span{display:flex;align-items:center;gap:4px;color:#ff7e87;font-size:var(--font-2xs);font-weight:700}.video-tile>header i{width:6px;height:6px;border-radius:50%;background:var(--red);box-shadow:0 0 7px var(--red)}.video-tile>header strong{font-size:var(--font-xs)}.video-tile>header small{margin-left:auto;color:#aec1d3;font-size:var(--font-2xs)}.video-tile>footer{display:flex;justify-content:space-between;align-items:center;gap:7px;min-height:32px;padding:6px 10px;color:#aec1d3;background:#071726;font-size:var(--font-2xs)}.video-tile>footer svg{width:var(--icon-sm);height:var(--icon-sm);color:var(--cyan)}.video-tile>footer time{margin-left:auto}.video-tile>header .video-state{color:var(--text-secondary)}.video-tile>header .video-state i{background:currentColor;box-shadow:none}.video-tile>header .video-state--playing{color:var(--cyan)}.video-tile>header .video-state--error{color:var(--red)}.video-expand{display:grid;place-items:center;margin-left:auto;padding:4px;border:1px solid var(--border-soft);border-radius:5px;background:transparent;color:var(--text-secondary);cursor:pointer}.video-expand svg,.video-feedback button svg{width:var(--icon-sm);height:var(--icon-sm)}.video-loading{position:absolute;left:50%;top:50%;transform:translate(-50%,-50%);color:var(--text-secondary);font-size:var(--font-sm);pointer-events:none}.video-feedback{position:absolute;top:0;right:0;bottom:0;left:0;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:10px;padding:16px;overflow:auto;background:#06121f;text-align:center}.video-feedback>svg{flex:0 0 auto;width:var(--icon-lg, 32px);height:var(--icon-lg, 32px);color:var(--muted)}.video-feedback p{max-width:560px;margin:0;font-size:var(--font-sm);line-height:1.65;color:var(--text-secondary)}.video-feedback button,.camera-empty button{display:inline-flex;align-items:center;justify-content:center;gap:6px;min-height:34px;padding:5px 14px;border:1px solid var(--border-soft);border-radius:6px;background:#32d0e71a;color:var(--cyan);font-size:var(--font-xs);cursor:pointer}.video-tile--empty{display:flex;flex-direction:column;align-items:center;justify-content:center;gap:10px;color:var(--muted);font-size:var(--font-xs)}.video-tile--empty>svg{width:var(--icon-md);height:var(--icon-md)}.camera-empty{padding:14px;color:var(--text-secondary);font-size:var(--font-sm);line-height:1.6}.camera-protocol{font-size:var(--font-xs);color:var(--cyan)}.video-wall--9 .video-feedback{gap:5px;padding:8px}.video-wall--9 .video-feedback>svg{display:none}.video-wall--9 .video-feedback p{font-size:var(--font-xs);line-height:1.45}.construction-grid{grid-template-columns:clamp(310px,24vw,620px) minmax(0,1fr)}.construction-main{display:grid;grid-template-rows:minmax(0,.85fr) minmax(0,1.15fr);gap:var(--panel-gap);min-width:0;min-height:0}.construction-device-panel .panel__body,.construction-table-panel .panel__body{display:flex;flex-direction:column;gap:10px;min-height:0}.construction-link{border:0;padding:4px 0;background:transparent;color:var(--cyan);font-size:var(--font-xs);cursor:pointer;white-space:nowrap}.construction-source{flex:0 0 auto;color:var(--amber);font-size:var(--font-2xs);line-height:1.5}.construction-source--live{color:var(--cyan)}.construction-source small{display:block;color:var(--muted);font-size:inherit}.construction-device-hint{color:var(--muted);font-size:var(--font-xs);line-height:1.5}.construction-live-source{display:flex;justify-content:space-between;flex-wrap:wrap;gap:2px 12px;font-size:var(--font-xs)}.construction-live-source strong{font-weight:500}.construction-refresh{display:inline-flex;align-items:center;gap:6px;padding:4px 9px;border:1px solid var(--border-soft);border-radius:6px;background:var(--surface-raised);color:var(--cyan);font-size:var(--font-xs);cursor:pointer}.construction-refresh svg{width:var(--icon-sm);height:var(--icon-sm)}.construction-summary{display:flex;justify-content:space-between;gap:10px;padding-block:2px 8px}.construction-summary>span{display:flex;align-items:center;gap:9px;font-size:var(--font-sm);color:var(--text-secondary)}.construction-summary strong{display:grid;place-items:center;min-width:48px;height:36px;border:1px solid var(--border-soft);border-radius:6px;font-size:var(--font-lg);font-weight:600;color:var(--cyan);font-variant-numeric:tabular-nums;background:var(--surface-raised)}.construction-summary>span:last-child strong{color:var(--amber)}.construction-summary small{font-size:var(--font-xs)}.construction-filters{display:flex;gap:8px;min-width:0}.construction-search{display:flex;align-items:center;flex:1;min-width:0;gap:7px;padding:6px 9px;border:1px solid var(--border-soft);border-radius:7px;background:var(--bg)}.construction-search svg{width:var(--icon-sm);height:var(--icon-sm);flex-shrink:0;color:var(--muted)}.construction-search input{min-width:0;width:100%;padding:0;border:0;background:transparent;color:var(--text);font-size:var(--font-xs)}.construction-search input::placeholder{color:var(--muted)}.construction-filters select{max-width:110px;padding:5px;border:1px solid var(--border-soft);border-radius:7px;background:var(--bg);color:var(--text-secondary);font:inherit;font-size:var(--font-xs)}.construction-selection{display:flex;align-items:center;justify-content:space-between;gap:8px;color:var(--text-secondary);font-size:var(--font-xs)}.construction-device-list{display:flex;flex:1;min-height:0;flex-direction:column;gap:9px;overflow:auto;scrollbar-width:thin;scrollbar-color:var(--border) transparent;container-type:inline-size}.construction-device{display:grid;flex:0 0 auto;gap:5px;width:100%;padding:clamp(10px,.7vw,17px);border:1px solid var(--border-soft);border-radius:var(--radius-sm);background:var(--surface-raised);text-align:left;cursor:pointer}.construction-device:hover{background:var(--surface-hover);border-color:var(--border)}.construction-device.is-selected{border-color:var(--cyan);background:var(--surface-hover);box-shadow:inset 3px 0 0 var(--cyan)}.construction-device__heading{display:flex;align-items:center;gap:8px;padding-bottom:5px}.construction-device__heading>svg{width:var(--icon-md);height:var(--icon-md);color:var(--cyan);flex-shrink:0}.construction-device__heading>strong{flex:1;font-size:var(--font-sm)}.construction-device__line{display:flex;justify-content:space-between;gap:10px;font-size:var(--font-xs);line-height:1.5}.construction-device__line>span{flex-shrink:0;color:var(--muted)}.construction-device__line b{font-weight:500;text-align:right;overflow-wrap:anywhere}.construction-device__pair{display:grid;grid-template-columns:minmax(0,1fr) minmax(0,1fr);gap:14px}@container (max-width: 370px){.construction-device__pair{grid-template-columns:1fr;gap:5px}}.construction-table-panel{min-width:0}.construction-table-scroll{position:relative;display:flex;flex-direction:column;scrollbar-gutter:stable}.construction-table{flex-shrink:0;table-layout:auto;font-variant-numeric:tabular-nums}.construction-table--compaction-live,.construction-table--rolling-live{min-width:1500px}.construction-table--compaction-records,.construction-table--rolling-records{min-width:830px}.construction-table th,.construction-table td{text-align:center;white-space:nowrap;border-right:1px solid var(--border-soft);padding:5px 8px;line-height:1.4}.construction-table th:last-child,.construction-table td:last-child{border-right:0}.construction-table th{height:44px;color:var(--text)}.construction-table th small{display:block;margin-top:1px;color:var(--muted);font-size:var(--font-2xs);font-weight:400}.construction-table td{height:clamp(36px,3.4vh,54px)}.construction-table .construction-cell--coordinates{white-space:pre-line;font-size:var(--font-2xs)}.construction-table .status-badge{min-height:24px;white-space:nowrap}.construction-table .construction-cell--device{position:sticky;left:0;z-index:1;min-width:96px;background:var(--surface-raised);color:var(--text);font-weight:600;border-right:1px solid var(--border)}.construction-table th.construction-cell--device{z-index:3;background:#0c2c4e}.construction-cell--live-time small{display:block;margin-top:3px;color:var(--muted);font-size:var(--font-2xs)}.construction-cell--live-time .construction-report--offline{color:var(--amber)}.construction-missing{color:var(--muted)}.construction-table-footer{display:flex;flex-shrink:0;align-items:center;justify-content:space-between;gap:10px}.construction-table-footer>span{color:var(--muted);font-size:var(--font-2xs);white-space:nowrap}.construction-table-footer .pagination{padding-top:0}.construction-table-footer .pagination svg{width:var(--icon-sm);height:var(--icon-sm)}.construction-device-empty,.construction-table-empty{display:flex;flex-direction:column;align-items:center;justify-content:center;gap:12px;padding:24px 14px;color:var(--muted);text-align:center;font-size:var(--font-xs)}.construction-device-empty{flex:1}.construction-table-empty{flex:1;min-height:140px;position:sticky;left:0}.construction-device-empty>svg,.construction-table-empty>svg{width:var(--icon-lg);height:var(--icon-lg);color:var(--muted)}.construction-device-empty strong,.construction-table-empty strong{color:var(--text-secondary);font-size:var(--font-sm);font-weight:500}.construction-grid select:focus-visible,.construction-table-scroll:focus-visible{outline:2px solid var(--cyan);outline-offset:-2px}.construction-history-query{display:flex;align-items:end;flex-wrap:wrap;gap:8px 12px;flex:0 0 auto}.construction-history-query label{display:grid;gap:4px;color:var(--muted);font-size:var(--font-2xs)}.construction-history-query input{width:clamp(216px,15.5vw,430px);padding:6px 8px;border:1px solid var(--border-soft);border-radius:6px;background:var(--bg);color:var(--text);font:inherit;font-size:var(--font-xs);color-scheme:dark}.construction-history-query button{min-height:34px;padding:6px 17px;border:1px solid var(--border);border-radius:6px;color:var(--cyan);background:var(--surface-raised);font-size:var(--font-xs);cursor:pointer}.construction-history-source{flex:0 0 auto;color:var(--text-secondary);font-size:var(--font-2xs);line-height:1.4}.construction-history-source small{font:inherit;color:var(--muted);margin-left:12px}.environment-grid{grid-template-columns:clamp(340px,20vw,600px) minmax(0,1fr)}.environment-side{display:grid;min-height:0;grid-template-rows:minmax(0,1.2fr) minmax(0,.8fr);gap:var(--panel-gap)}.environment-main{display:grid;min-height:0;grid-template-rows:minmax(0,.78fr) minmax(0,.9fr) minmax(0,.85fr);gap:var(--panel-gap)}.device-identity{display:grid;grid-template-columns:14px minmax(0,1fr) auto;align-items:center;gap:9px;padding:10px;border:1px solid var(--border-soft);border-radius:8px;background:#0c30528c}.device-identity__pulse{width:9px;height:9px;border-radius:50%;background:var(--teal);box-shadow:0 0 0 5px #58d2cf14,0 0 13px #58d2cf9e}.device-identity__pulse--inactive{background:var(--muted);box-shadow:none}.environment-device-panel .panel__body{overflow:auto}.environment-device-select{display:grid;gap:6px;margin-bottom:10px;color:var(--muted);font-size:var(--font-xs)}.environment-device-select select{width:100%;padding:8px;color:var(--text);border:1px solid var(--border-soft);border-radius:6px;background:var(--bg);font:inherit}.environment-data-status{color:var(--cyan);font-size:var(--font-xs);line-height:1.6}.environment-data-status small{display:block;color:var(--muted);font-size:var(--font-2xs)}.environment-empty{display:flex;height:100%;flex-direction:column;justify-content:center;align-items:center;gap:12px;padding:12px;color:var(--muted);text-align:center;font-size:var(--font-xs)}.environment-empty svg{width:var(--icon-lg);height:var(--icon-lg)}.environment-chart-note{flex-shrink:0;color:var(--muted);font-size:var(--font-2xs);padding:5px 4px 0}.environment-trend-panel .panel__body{display:flex;flex-direction:column}.environment-trend-panel .chart{flex:1;min-height:0}.device-identity>div{display:grid;gap:3px}.device-identity small,.device-identity span{color:var(--muted);font-size:var(--font-2xs)}.device-identity strong{font-size:var(--font-sm)}.device-info{display:grid;gap:0;margin:10px 0}.device-info div{display:flex;justify-content:space-between;gap:12px;padding:7px 4px;border-bottom:1px dashed rgba(108,160,202,.18)}.device-info dt{color:var(--muted);font-size:var(--font-xs)}.device-info dd{margin:0;color:var(--text-secondary);font-size:var(--font-xs)}.environment-device-panel .primary-button{width:100%}.environment-alarm-panel .panel__body{padding:4px 12px 10px}.environment-alarm-list{display:grid;height:100%;align-content:start;gap:7px;overflow:auto}.environment-alarm-list article{display:grid;grid-template-columns:42px minmax(0,1fr) auto;align-items:center;gap:9px;min-height:78px;padding:9px;border:1px solid rgba(95,153,199,.14);border-radius:8px;background:#0e30527a}.environment-alarm-list article>span{display:grid;place-items:center;width:40px;height:40px;color:var(--amber);border-radius:8px;background:#f7bd421a}.environment-alarm-list article svg{width:24px;height:24px}.environment-alarm-list article div{display:grid;min-width:0;gap:4px}.environment-alarm-list article strong{overflow:hidden;font-size:var(--font-xs);text-overflow:ellipsis;white-space:nowrap}.environment-alarm-list article small{color:var(--muted);font-size:var(--font-2xs)}.environment-alarm-list article button{padding:6px;border:0;background:transparent;color:var(--cyan);font-size:var(--font-xs);cursor:pointer}.environment-realtime-panel .panel__body{padding:8px 12px 12px}.environment-realtime{display:grid;height:100%;grid-template-columns:minmax(130px,.6fr) minmax(0,2.6fr);gap:12px}.environment-gauge{position:relative;min-height:0}.environment-gauge .chart{min-height:0}.environment-gauge>span{position:absolute;bottom:4px;left:50%;color:var(--muted);font-size:var(--font-2xs);transform:translate(-50%);white-space:nowrap}.metric-card-grid{display:grid;grid-template-columns:repeat(5,minmax(110px,1fr));gap:8px}.metric-card{display:grid;min-width:0;grid-template-columns:auto minmax(0,1fr);align-items:center;gap:8px;padding:10px;border:1px solid rgba(67,137,194,.18);border-radius:8px;background:#0f375e9e}.metric-card>svg{width:var(--icon-md);height:var(--icon-md);color:var(--cyan)}.metric-card>div{display:grid;min-width:0;gap:3px}.metric-card small{overflow:hidden;color:var(--muted);font-size:var(--font-2xs);text-overflow:ellipsis;white-space:nowrap}.metric-card strong{font-size:var(--font-xs)}.metric-card>span{grid-column:1 / -1;color:#f1f8ff;font-family:ui-monospace,SFMono-Regular,Menlo,monospace;font-size:clamp(20px,1.25vw,32px);font-weight:700}.metric-card em{margin-left:4px;color:var(--muted);font-family:inherit;font-size:var(--font-2xs);font-style:normal;font-weight:500}.environment-trend-panel .panel__body,.environment-bottom-grid .panel__body{padding:2px 10px 8px}.environment-bottom-grid{display:grid;min-height:0;grid-template-columns:repeat(2,minmax(0,1fr));gap:var(--panel-gap)}.ai-page{display:grid;height:calc(100dvh - var(--header-height) - (var(--page-padding) * 2));min-height:0;grid-template-rows:auto minmax(0,.72fr) minmax(0,1.28fr);gap:var(--page-gap)}.page-toolbar{display:flex;min-height:48px;align-items:center;gap:12px;padding:7px 11px;border:1px solid var(--border-soft);border-radius:9px;background:#071b32b8}.page-toolbar>div{display:flex;align-items:center;gap:10px}.page-toolbar>div>strong{color:var(--text-secondary);font-size:var(--font-xs)}.ai-engine-state{display:flex;align-items:center;gap:6px;margin-left:auto;color:#86e2d1;font-size:var(--font-xs)}.ai-engine-state svg{width:var(--icon-sm);height:var(--icon-sm)}.ai-top-grid{display:grid;min-height:0;grid-template-columns:minmax(300px,.72fr) minmax(0,1.9fr);gap:var(--panel-gap)}.ai-pie-panel .panel__body,.ai-trend-panel .panel__body{padding:2px 10px 8px}.ai-gallery-panel .panel__body{display:flex;min-height:0;flex-direction:column;padding:10px 12px}.category-tabs{display:flex;gap:4px;margin-bottom:9px;overflow-x:auto}.category-tabs button{min-height:36px;padding:6px 15px;border:1px solid rgba(59,132,192,.35);background:#12417080;color:var(--text-secondary);font-size:var(--font-xs);cursor:pointer;white-space:nowrap}.category-tabs button:first-child{border-radius:6px 0 0 6px}.category-tabs button:last-child{border-radius:0 6px 6px 0}.category-tabs button.is-active{color:#fff;border-color:var(--blue);background:var(--blue)}.ai-gallery{display:grid;min-height:0;flex:1;grid-template-columns:repeat(4,minmax(200px,1fr));grid-auto-rows:minmax(210px,1fr);gap:clamp(6px,.47vw,10px);overflow:auto}.ai-event-card{display:grid;min-width:0;min-height:0;grid-template-rows:minmax(100px,1fr) auto;overflow:hidden;border:1px solid rgba(82,148,199,.22);border-radius:8px;background:#081f37bd}.ai-event-image{position:relative;min-height:0;overflow:hidden;background:#07131e;border:0;padding:0;cursor:zoom-in}.ai-event-image>img{width:100%;height:100%;object-fit:contain}.ai-event-card footer{display:grid;grid-template-columns:minmax(0,1fr) auto;align-items:center;gap:4px;padding:7px 8px}.ai-event-card footer>span{display:flex;min-width:0;align-items:center;gap:5px}.ai-event-card footer svg{width:var(--icon-sm);height:var(--icon-sm);color:var(--cyan)}.ai-event-card footer strong{overflow:hidden;font-size:var(--font-xs);text-overflow:ellipsis;white-space:nowrap}.ai-event-card footer em{color:#84dfcd;font-size:var(--font-2xs);font-style:normal}.ai-event-card footer time{grid-column:1 / -1;color:var(--muted);font-size:var(--font-2xs)}.ai-pagination{justify-content:center;padding-top:7px}.ai-empty{flex:1;height:100%;display:flex;align-items:center;justify-content:center;flex-direction:column;gap:12px;color:var(--muted)}.ai-event-card footer small{grid-column:1 / -1;color:var(--text-secondary);overflow:hidden;text-overflow:ellipsis;white-space:nowrap;font-size:var(--font-xs)}.ai-image-message{display:grid;height:100%;place-content:center;color:var(--muted);font-size:var(--font-xs)}.ai-image-dialog{width:min(1100px,88vw);max-height:92vh;padding:20px;background:var(--bg-deep);color:var(--text);border:1px solid var(--cyan);border-radius:12px}.ai-image-dialog::backdrop{background:#000000c2}.ai-image-dialog header{display:flex;justify-content:space-between;align-items:center;margin-bottom:14px}.ai-image-dialog header button{background:none;border:0;color:var(--text-secondary);cursor:pointer}.ai-image-dialog header svg{width:var(--icon-md);height:var(--icon-md)}.ai-image-dialog>img{display:block;width:100%;max-height:65vh;object-fit:contain}.ai-image-dialog p{color:var(--text-secondary);font-size:var(--font-sm)}.auth-loading{display:flex;min-height:100dvh;align-items:center;justify-content:center;gap:12px;color:var(--text-secondary);background:radial-gradient(circle at 48% 25%,rgba(28,111,176,.22),transparent 34%),var(--bg-deep);font-size:var(--font-sm)}.auth-loading>span{width:24px;height:24px;border:3px solid rgba(77,158,219,.28);border-top-color:var(--cyan);border-radius:50%;animation:loading-spin .8s linear infinite}.login-page{position:relative;display:grid;min-height:100dvh;grid-template-columns:minmax(650px,1.22fr) minmax(460px,.78fr);overflow:hidden;background:var(--bg-deep)}.login-visual{position:relative;display:flex;min-width:0;flex-direction:column;justify-content:space-between;overflow:hidden;padding:clamp(34px,3vw,72px) clamp(42px,4.2vw,110px);border-right:1px solid rgba(51,160,224,.28);background:linear-gradient(rgba(79,175,234,.055) 1px,transparent 1px),linear-gradient(90deg,rgba(79,175,234,.055) 1px,transparent 1px),radial-gradient(circle at 74% 58%,rgba(35,144,213,.3),transparent 28%),linear-gradient(145deg,#04182d,#062744 52%,#031324);background-size:48px 48px,48px 48px,auto,auto}.login-visual:after{position:absolute;top:0;right:0;bottom:0;left:0;background:linear-gradient(90deg,transparent 70%,rgba(3,13,28,.6));content:"";pointer-events:none}.login-brand,.login-hero{position:relative;z-index:2}.login-brand{display:flex;align-items:center;gap:16px}.login-brand>span{display:grid;place-items:center;width:clamp(52px,3.1vw,76px);height:clamp(52px,3.1vw,76px);color:var(--cyan);border:1px solid rgba(50,208,231,.54);border-radius:13px;background:#1672ac33;box-shadow:inset 0 0 18px #32d0e714}.login-brand svg{width:66%;height:66%}.login-brand>div{display:grid;gap:4px}.login-brand strong{font-size:clamp(21px,1.35vw,34px);letter-spacing:.035em}.login-brand small{color:#809bb5;font-size:var(--font-sm);letter-spacing:.17em}.login-hero{max-width:min(760px,90%);margin:auto 0;padding:5vh 0}.login-kicker{display:inline-flex;align-items:center;gap:8px;color:var(--cyan);font-size:var(--font-xs);font-weight:700;letter-spacing:.15em}.login-kicker svg{width:var(--icon-sm);height:var(--icon-sm)}.login-hero h1{margin:clamp(16px,2.1vh,30px) 0;font-size:clamp(42px,3.4vw,84px);line-height:1.2;letter-spacing:.02em}.login-hero p{max-width:680px;margin:0;color:#9eb6ca;font-size:clamp(16px,1vw,24px);line-height:1.9}.login-capabilities{display:flex;gap:12px;margin-top:clamp(22px,3.8vh,46px)}.login-capabilities span{padding:8px 15px;color:#bee4f7;border:1px solid rgba(64,167,224,.3);border-radius:999px;background:#155b8b38;font-size:var(--font-xs)}.login-orbit{position:absolute;z-index:1;border:1px solid rgba(50,208,231,.15);border-radius:50%;pointer-events:none}.login-orbit:before,.login-orbit:after{position:absolute;width:10px;height:10px;border-radius:50%;background:var(--cyan);box-shadow:0 0 24px #32d0e7d9;content:""}.login-orbit--one{right:-13vw;bottom:-25vw;width:49vw;height:49vw}.login-orbit--one:before{top:12%;left:20%}.login-orbit--one:after{top:47%;left:-5px}.login-orbit--two{right:4vw;bottom:-18vw;width:34vw;height:34vw;border-color:#2d8cff38}.login-orbit--two:before{top:4%;left:39%;background:var(--blue-bright)}.login-orbit--two:after{display:none}.login-panel{position:relative;z-index:3;display:grid;place-items:center;min-width:0;padding:clamp(28px,4vw,84px);background:radial-gradient(circle at 12% 50%,rgba(31,112,174,.12),transparent 38%),linear-gradient(160deg,#030e1e,#041426)}.login-card{width:min(100%,500px);padding:clamp(30px,2.5vw,52px);border:1px solid rgba(55,154,217,.45);border-radius:18px;background:linear-gradient(150deg,#0a233ff5,#05182cfa);box-shadow:0 32px 80px #00050f7a,inset 0 1px #79ccff0f}.login-card header{margin-bottom:clamp(24px,3.2vh,38px)}.login-card header>span{color:var(--cyan);font-size:var(--font-xs);font-weight:700;letter-spacing:.12em}.login-card h2{margin:10px 0 8px;color:#f3f9ff;font-size:clamp(25px,1.65vw,38px);line-height:1.25}.login-card header p{margin:0;color:var(--muted);font-size:var(--font-sm)}.login-field{display:grid;gap:8px;margin-top:18px}.login-field>span{color:#c2d3e2;font-size:var(--font-sm);font-weight:600}.login-field>div{display:flex;height:clamp(50px,5.2vh,62px);align-items:center;gap:11px;padding:0 15px;border:1px solid rgba(88,155,205,.3);border-radius:9px;background:#020f1ea8;transition:border-color .16s ease,box-shadow .16s ease}.login-field>div:focus-within{border-color:var(--cyan);box-shadow:0 0 0 3px #32d0e717}.login-field svg{flex:0 0 auto;width:var(--icon-md);height:var(--icon-md);color:#64bedf}.login-field input{width:100%;min-width:0;border:0;outline:0;background:transparent;color:#f1f8ff;font-size:var(--font-md)}.login-field input::placeholder{color:#58738d}.login-error{min-height:24px;padding-top:7px;color:#ff8a91;font-size:var(--font-xs)}.login-submit{display:flex;width:100%;height:clamp(50px,5.4vh,64px);align-items:center;justify-content:center;gap:11px;margin-top:7px;border:1px solid #349df9;border-radius:9px;background:linear-gradient(105deg,#1978dd,#2d8cff 55%,#2aaed6);color:#fff;box-shadow:0 12px 28px #1978dd47;font-size:var(--font-md);font-weight:700;cursor:pointer}.login-submit:not(:disabled):hover{filter:brightness(1.08);transform:translateY(-1px)}.login-submit svg{width:var(--icon-sm);height:var(--icon-sm)}.system-security-page{position:relative;display:grid;min-height:100dvh;place-items:center;overflow:hidden;padding:clamp(40px,5vw,100px);background:radial-gradient(circle at 50% 24%,rgba(40,137,207,.18),transparent 34%),linear-gradient(145deg,#020b17,#05192d 52%,#020d1b)}.system-security-page:before,.system-security-page:after{position:absolute;border:1px solid rgba(53,161,222,.14);border-radius:50%;content:"";pointer-events:none}.system-security-page:before{width:52vw;height:52vw;min-width:760px;min-height:760px}.system-security-page:after{width:38vw;height:38vw;min-width:560px;min-height:560px;border-color:#32d0e71a}.system-security-page--locked{background:radial-gradient(circle at 50% 25%,rgba(255,94,103,.12),transparent 35%),linear-gradient(145deg,#10090f,#071525 54%,#020d1b)}.system-security-page--warning{background:radial-gradient(circle at 50% 25%,rgba(247,189,66,.12),transparent 35%),linear-gradient(145deg,#100d08,#071525 54%,#020d1b)}.system-security-card{position:relative;z-index:1;display:grid;width:min(680px,calc(100vw - 96px));justify-items:center;padding:clamp(36px,3.2vw,62px);border:1px solid rgba(64,164,222,.42);border-radius:20px;background:linear-gradient(150deg,#0a233ff7,#041324fa);box-shadow:0 38px 100px #00040e8f,inset 0 1px #85d3ff12;text-align:center}.system-security-brand{position:absolute;top:20px;left:24px;display:flex;align-items:center;gap:9px;color:#a9c4d9;font-size:var(--font-xs);font-weight:700}.system-security-brand span{padding-left:9px;color:var(--muted);border-left:1px solid var(--border-soft);font-weight:500}.system-security-icon{display:grid;width:clamp(78px,5.2vw,116px);height:clamp(78px,5.2vw,116px);margin-top:20px;place-items:center;color:var(--cyan);border:1px solid rgba(50,208,231,.42);border-radius:24px;background:#1c70a829;box-shadow:inset 0 0 32px #32d0e714,0 18px 44px #00061259}.system-security-icon svg{width:56%;height:56%}.system-security-page--locked .system-security-icon{color:#ff7d84;border-color:#ff5e676b;background:#97263429}.system-security-page--warning .system-security-icon{color:var(--amber);border-color:#f7bd426b;background:#91671629}.system-security-eyebrow{margin-top:24px;color:var(--cyan);font-size:var(--font-xs);font-weight:700;letter-spacing:.17em}.system-security-page--locked .system-security-eyebrow{color:#ff8d93}.system-security-page--warning .system-security-eyebrow{color:var(--amber)}.system-security-card h1{margin:10px 0 8px;font-size:clamp(30px,2.1vw,48px);line-height:1.2}.system-security-card>p{max-width:540px;margin:0;color:#91aac0;font-size:var(--font-sm);line-height:1.8}.system-lock-state{display:inline-flex;align-items:center;gap:8px;margin-top:24px;padding:7px 14px;border:1px solid;border-radius:999px;font-size:var(--font-sm);font-weight:700}.system-lock-state>span{width:9px;height:9px;border-radius:50%;background:currentColor;box-shadow:0 0 12px currentColor}.system-lock-state.is-unlocked{color:#75ddba;border-color:#75ddba4d;background:#247d631f}.system-lock-state.is-locked{color:#ff858c;border-color:#ff5e6752;background:#97263421}.system-lock-form{display:grid;width:min(100%,500px);margin-top:22px;text-align:left}.system-lock-form label{display:grid;gap:8px}.system-lock-form label>span{color:#c2d3e2;font-size:var(--font-sm);font-weight:600}.system-lock-form label>div{display:flex;height:clamp(52px,5.4vh,64px);align-items:center;gap:11px;padding:0 15px;border:1px solid rgba(88,155,205,.34);border-radius:10px;background:#020f1eb8}.system-lock-form label>div:focus-within{border-color:var(--cyan);box-shadow:0 0 0 3px #32d0e717}.system-lock-form label svg{flex:0 0 auto;width:var(--icon-md);height:var(--icon-md);color:#64bedf}.system-lock-form input{width:100%;min-width:0;border:0;outline:0;background:transparent;color:#f1f8ff;font-size:var(--font-md);letter-spacing:.05em}.system-lock-form input::placeholder{color:#58738d;letter-spacing:0}.system-lock-feedback{min-height:34px;padding-top:8px;font-size:var(--font-xs);text-align:center}.system-lock-feedback .is-error{color:#ff8a91}.system-lock-feedback .is-success{color:#75ddba}.system-security-action{display:inline-flex;min-width:190px;min-height:52px;align-items:center;justify-content:center;gap:10px;padding:10px 24px;border:1px solid #349df9;border-radius:10px;background:linear-gradient(105deg,#1978dd,#2d8cff 55%,#2aaed6);color:#fff;box-shadow:0 12px 28px #1978dd40;font-size:var(--font-md);font-weight:700;cursor:pointer}.system-security-action:not(:disabled):hover{filter:brightness(1.08);transform:translateY(-1px)}.system-security-action.is-danger{border-color:#e75d67;background:linear-gradient(105deg,#a92f3e,#cf4350 55%,#a92f3e);box-shadow:0 12px 28px #9f253340}.system-security-action svg{width:var(--icon-sm);height:var(--icon-sm)}.system-security-note{margin-top:20px;color:#667f96;font-size:var(--font-xs);line-height:1.6}.system-locked-message{display:inline-flex;align-items:center;gap:9px;margin-top:28px;padding:10px 18px;color:#d7a2a6;border:1px solid rgba(255,94,103,.24);border-radius:999px;background:#821f2b1a;font-size:var(--font-sm)}.system-locked-message span{width:8px;height:8px;border-radius:50%;background:#ff6e76;box-shadow:0 0 12px #ff6e76;animation:security-pulse 1.8s ease-in-out infinite}@keyframes security-pulse{50%{opacity:.38;transform:scale(.72)}}.page-error{display:grid;width:min(460px,calc(100vw - 32px));justify-items:center;gap:9px;margin:15vh auto 0;padding:30px;border:1px solid var(--border);border-radius:var(--radius);background:var(--surface);text-align:center}.page-error svg{width:42px;height:42px;color:var(--amber)}.page-error strong{font-size:17px}.page-error span{color:var(--muted);font-size:12px}.page-error button{margin-top:4px;padding:7px 16px;border:1px solid var(--blue);border-radius:7px;background:#2d8cff33;cursor:pointer}.page-loading{display:flex;min-height:58vh;align-items:center;justify-content:center;gap:10px;color:var(--text-secondary);font-size:12px}.page-loading span{width:18px;height:18px;border:2px solid rgba(77,158,219,.28);border-top-color:var(--cyan);border-radius:50%;animation:loading-spin .8s linear infinite}@keyframes loading-spin{to{transform:rotate(360deg)}}@media(max-width:1550px){.app-header{grid-template-columns:250px minmax(490px,1fr) 330px}.main-nav__item{min-width:82px;padding-inline:10px;font-size:var(--font-md)}.brand strong{font-size:var(--font-md)}.header-meta{gap:8px}.header-meta time span{display:none}.project-metric{gap:7px;padding-inline:2px}.project-metric+.project-metric{padding-left:8px}.project-metric__icon{flex-basis:38px;height:38px}}@media(max-width:1320px){.app-header{grid-template-columns:235px minmax(470px,1fr) 295px}.main-nav__item{min-width:76px;padding-inline:6px}.brand{gap:8px}.brand small{display:none}.header-meta time{gap:6px}.overview-grid{grid-template-columns:minmax(290px,.98fr) minmax(500px,1.76fr) minmax(270px,.92fr)}.login-page{grid-template-columns:minmax(650px,1.15fr) minmax(500px,.85fr)}.login-visual{padding-inline:46px}.login-panel{padding-inline:38px}}@media(max-height:920px)and (min-width:1200px){:root{--page-padding: 8px;--page-gap: 8px;--panel-gap: 8px;--panel-header-height: 38px}.app-header{padding-inline:8px}.brand__icon{width:38px;height:38px;flex-basis:38px;border-radius:8px}.brand__icon svg{width:26px;height:26px}.brand small{margin-top:1px}.account-button,.logout-button{width:34px;height:34px}.account-button svg,.logout-button svg{width:23px;height:23px}.header-meta time strong{font-size:22px}.login-visual{padding-block:28px}.login-hero{padding-block:3vh}.login-hero h1{margin-block:13px;font-size:clamp(38px,3vw,54px)}.login-hero p{font-size:15px;line-height:1.65}.login-capabilities{margin-top:18px}.login-card{padding-block:28px}.login-card header{margin-bottom:20px}.login-field{margin-top:13px}.panel__header{gap:7px;padding:5px 10px}.panel__body{padding:7px 10px 8px}.primary-button,.date-range-button{min-height:32px;padding:5px 10px}.segmented button{min-height:28px;padding:4px 10px}.status-badge{min-height:24px;padding:2px 7px}.project-metrics{gap:4px}.project-metric{gap:5px;padding:3px 2px}.project-metric+.project-metric{padding-left:6px}.project-metric__icon{flex-basis:34px;height:34px}.project-metric strong{font-size:20px}.project-metric small{margin-top:3px}.project-description{margin-top:6px}.key-value-list{gap:3px}.participants-panel .panel__body{padding-block:3px}.key-value-row{grid-template-columns:94px minmax(0,1fr);min-height:30px;padding:4px 6px}.staff-list{gap:3px}.staff-card{grid-template-columns:42px minmax(0,1fr);gap:7px;padding:4px 6px}.staff-card>svg{width:38px;height:38px}.project-media-panel .panel__body{padding:6px 8px 8px}.progress-panel .panel__body{padding:7px 10px 8px}.progress-node{gap:3px}.progress-node small{display:grid;max-width:100%;justify-items:center;gap:0}.progress-node small span{display:none}.weather-panel .panel__body{padding-top:3px}.weather-item{gap:1px;padding-block:2px}.weather-item strong{margin-top:-27px;margin-left:31px}.weather-item span{margin-top:10px}.alarm-item{grid-template-columns:42px minmax(0,1fr) auto;gap:7px;min-height:0}.alarm-item__icon{width:38px;height:38px}.power-summary-panel .panel__body{padding:2px 9px 6px}.power-summary{grid-template-rows:auto minmax(0,1fr) auto;padding:6px 3px}.power-summary header strong{font-size:22px}.power-summary footer{gap:10px}.power-chart-panel .panel__body{padding:2px 8px 6px}.power-table-panel .panel__body{padding:7px 9px}.table-toolbar{gap:8px;margin-bottom:6px}.data-table th,.data-table td{height:34px;padding:5px 10px}.pagination{padding-top:6px}.pagination button{min-width:30px;height:30px;padding-inline:7px}.location-list-panel .panel__body,.camera-list-panel .panel__body{padding:7px 9px 8px}.location-counts{margin:7px 0}.location-counts div{padding:6px}.search-field{height:36px;margin-bottom:7px}.location-list,.camera-list{gap:6px}.location-row,.camera-row{min-height:62px;gap:8px;padding:6px 8px}.location-map-panel .panel__body,.video-viewer-panel .panel__body{padding:6px}.camera-summary{margin-bottom:7px;padding:7px 9px}.video-layout-tabs button{min-height:30px;padding:4px 9px}.video-tile>header,.video-tile>footer{min-height:34px;padding:6px 8px}.device-identity{gap:7px;padding:6px 8px}.device-info{margin:4px 0 5px}.device-info div{padding:4px}.environment-alarm-panel .panel__body{padding:3px 9px 7px}.environment-side{grid-template-rows:minmax(0,1.35fr) minmax(0,.65fr)}.environment-main{grid-template-rows:minmax(0,1.1fr) minmax(0,.82fr) minmax(0,.72fr)}.environment-alarm-list{gap:5px}.environment-alarm-list article{min-height:68px;gap:7px;padding:6px 7px}.environment-alarm-list article>span{width:38px;height:38px}.environment-alarm-list article svg{width:26px;height:26px}.environment-realtime-panel .panel__body{padding:5px 8px 7px}.environment-realtime{grid-template-columns:minmax(130px,.5fr) minmax(0,2.5fr);gap:8px}.metric-card-grid{grid-template-columns:repeat(5,minmax(110px,1fr));gap:5px}.metric-card{gap:5px;padding:5px 7px}.metric-card>span{font-size:20px}.environment-trend-panel .panel__body,.environment-bottom-grid .panel__body{padding:0 7px 5px}.page-toolbar{min-height:40px;gap:8px;padding:4px 8px}.ai-pie-panel .panel__body,.ai-trend-panel .panel__body{padding:0 7px 5px}.ai-gallery-panel .panel__body{padding:6px 8px}.category-tabs{gap:3px;margin-bottom:5px}.category-tabs button{min-height:30px;padding:4px 10px}.ai-event-card{grid-template-rows:minmax(0,1fr) auto}.ai-event-card footer{padding:5px 6px}.ai-pagination{padding-top:5px}}@media(min-width:2560px)and (min-height:1200px){.location-row,.camera-row{min-height:82px}.alarm-item{min-height:90px}.environment-alarm-list article{min-height:92px}.data-table th,.data-table td{height:48px}.pagination button{min-width:42px;height:42px}.category-tabs button{min-height:42px}}@media(prefers-reduced-motion:reduce){*,*:before,*:after{scroll-behavior:auto!important;animation-duration:.01ms!important;animation-iteration-count:1!important;transition-duration:.01ms!important}}@media(min-width:1900px){.app-header{grid-template-columns:minmax(230px,16vw) minmax(0,1fr) auto}.main-nav__item{min-width:74px;padding-inline:clamp(8px,.65vw,22px);font-size:var(--font-sm)}.header-meta time{gap:7px}}@media(max-width:1899px){:root{--header-height: 108px}.app-header{grid-template-columns:minmax(250px,1fr) auto;grid-template-rows:56px 52px;height:var(--header-height)}.app-header .brand{grid-column:1;grid-row:1}.app-header .header-meta{grid-column:2;grid-row:1}.app-header .main-nav{grid-column:1 / -1;grid-row:2}.main-nav__item{min-width:90px;padding-inline:12px}.register-field{grid-template-columns:95px minmax(0,1fr)}}.device-alerts-panel .panel__body{display:flex;flex-direction:column;gap:6px;min-height:0}.device-alerts-panel .alarm-list{flex:1;height:auto;min-height:0;overflow:auto;align-content:start}.device-alerts-panel .alarm-list>.distribution-empty{min-height:80px}.device-alerts-panel .alarm-item{min-height:88px;padding:8px 0}.device-alerts-panel .alarm-item strong{white-space:normal;line-height:1.4;overflow-wrap:anywhere}.device-alerts-panel .alarm-item div span{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.device-alerts-panel time{color:var(--muted);font-size:var(--font-2xs)}.device-alerts-summary{display:flex;flex-wrap:wrap;justify-content:space-between;gap:4px;color:var(--text-secondary);font-size:var(--font-2xs)}.device-alerts-notice{margin:0;color:var(--amber);font-size:var(--font-2xs);line-height:1.5}.device-alerts-rules{flex-shrink:0;max-height:40%;overflow:auto;color:var(--text-secondary);font-size:var(--font-2xs)}.device-alerts-rules summary{cursor:pointer;padding:4px 0;color:var(--cyan)}.device-alerts-rules>div{display:grid;gap:4px;padding:4px 0}.device-alerts-rules small{line-height:1.5}
