:root{--ink:#1b3446;--muted:#687f8d;--blue:#1765aa;--sky:#e7f1f9;--line:#d8e3e9;--paper:#fff;--back:#f1f6f9;--green:#25806b;--amber:#a46525}*{box-sizing:border-box}body{margin:0;color:var(--ink);background:var(--back);font:15px/1.6 -apple-system,BlinkMacSystemFont,"PingFang SC",sans-serif}header{background:#fff;border-bottom:1px solid var(--line);padding:20px max(24px,calc((100vw - 1360px)/2));display:flex;justify-content:space-between;align-items:center}.brand{display:flex;gap:12px;align-items:center;font-size:29px;color:var(--ink);text-decoration:none}.brand span{font-size:20px;font-weight:650}.brand small{display:block;font-size:11px;font-weight:400;color:var(--muted);letter-spacing:1px}main{max-width:1410px;padding:32px 25px;margin:auto}h1{font-size:38px;line-height:1.2;margin:9px 0 14px;font-weight:650;letter-spacing:-1px}h2{font-size:19px;margin:0 0 12px}h3{font-size:16px}p{margin:8px 0}.muted{color:var(--muted)}.small,small{font-size:12px}.eyebrow{letter-spacing:2.4px;color:var(--blue);font-size:11px;font-weight:700}.title-row,.section-title,.actions{display:flex;justify-content:space-between;align-items:center;gap:15px}.section-title{align-items:flex-start}.section-title h2{margin-bottom:0}.badge{padding:4px 9px;border-radius:5px;background:var(--sky);color:var(--blue);font-size:12px;white-space:nowrap}button,.upload{border:1px solid var(--line);border-radius:7px;background:white;padding:9px 15px;color:var(--ink);cursor:pointer;font:inherit;font-size:13px;white-space:nowrap}button:hover,.upload:hover{border-color:var(--blue);background:#f3f8fc}button:disabled{opacity:.5;cursor:wait}.primary{background:var(--blue);color:white;border-color:var(--blue)}.primary:hover{background:#12538e;color:white}input,select{border:1px solid var(--line);border-radius:6px;padding:10px;font:inherit;color:var(--ink);background:white;max-width:100%}input[type=checkbox]{accent-color:var(--blue)}input:focus,button:focus-visible,select:focus{outline:2px solid #76add5;outline-offset:2px}.network-strip{display:flex;gap:22px;margin:20px 0 26px;font-size:13px;flex-wrap:wrap}.network-strip b{font-family:ui-monospace,monospace}.network-strip span{padding-left:12px;border-left:3px solid var(--green)}.network-strip .down{border-color:var(--amber)}.main-grid{display:grid;grid-template-columns:minmax(0,2.25fr) minmax(280px,1fr);gap:22px}.panel{background:var(--paper);border:1px solid var(--line);border-radius:12px;padding:24px}.map-panel{padding-bottom:14px}#floor-area{margin-top:18px;background-color:#f6fafc;background-image:radial-gradient(#cfdee8 1px,transparent 1px);background-size:18px 18px;min-height:330px;border-radius:7px;display:grid;place-items:center}#empty-floor{text-align:center;padding:20px;width:100%;color:var(--muted)}#empty-floor h3{color:var(--ink);font-size:23px;margin:8px}.house{font-size:64px;line-height:1.2;color:#8baabd}#network-map{display:flex;justify-content:center;gap:20px;margin:24px 0 0}#network-map div{background:#fff;border:1px solid var(--line);padding:10px 22px;border-radius:7px;font-family:ui-monospace,monospace;font-size:12px}.map-footer{display:flex;gap:15px;flex-wrap:wrap;font-size:11px;color:var(--muted);margin-top:14px}.map-footer span:first-child{color:var(--green)}#placing{margin-left:auto}#floor-wrap{position:relative;width:100%;line-height:0}#floor-image{display:block;width:100%;height:auto;border-radius:7px}#pins{position:absolute;inset:0;pointer-events:none}.pin{position:absolute;transform:translate(-50%,-50%);border:2px solid white;border-radius:100%;width:27px;height:27px;padding:0;background:var(--green);color:white;pointer-events:auto;box-shadow:0 1px 7px #1234;line-height:22px;font-size:12px}.pin.off{background:#8395a1}.child-card{padding:13px 0;border-bottom:1px solid var(--line);display:flex;justify-content:space-between;gap:10px;cursor:pointer}.child-card strong{font-size:14px}.note{padding:14px;background:var(--sky);color:#476a83;font-size:12px;border-radius:7px;margin:20px 0}.metric-pair{display:flex;gap:30px;padding-top:8px}.metric-pair small,.metric-pair strong{display:block}.metric-pair strong{font-size:21px;margin-top:5px;color:var(--muted)}.inventory{margin-top:24px}.inventory .section-title input{width:300px}.filters{display:flex;gap:12px;align-items:center;margin:20px 0}.filters label{font-size:13px}.table-wrap{overflow:auto}table{border-collapse:collapse;width:100%;text-align:left;font-size:13px}th{font-weight:500;color:var(--muted);padding:10px 12px;background:#f6f9fb;white-space:nowrap}td{padding:15px 12px;border-bottom:1px solid #e7eef2;white-space:nowrap}td small{display:block;color:var(--muted);font-family:ui-monospace,monospace;font-size:11px}.device-link{padding:0;background:none;border:0;text-align:left;font-size:14px;font-weight:600;white-space:normal}.status{font-size:12px;color:var(--green)}.status.off{color:var(--muted)}.status.unknown{color:var(--amber)}.bottom-grid{display:grid;grid-template-columns:1fr 1fr;gap:24px;margin-top:24px}.event,.mail-row{padding:12px 0;border-bottom:1px solid var(--line);font-size:13px}.event small,.mail-row small{display:block;color:var(--muted)}label{display:block}label input:not([type=checkbox]),label select{display:block;width:100%;margin:6px 0 16px}.actions{justify-content:flex-start;flex-wrap:wrap}.login{max-width:500px;margin:8vh auto;padding:42px;background:#fff;border:1px solid var(--line);border-radius:16px}.login h1{line-height:1.4}.login p{margin-bottom:24px}#login-form{margin-top:25px;display:grid;grid-template-columns:1fr auto;gap:12px;align-items:center}#login-form input{margin-bottom:0}dialog{border:1px solid var(--line);border-radius:13px;padding:28px;width:min(560px,94vw);color:var(--ink)}dialog::backdrop{background:#17334566}.form-grid{display:grid;grid-template-columns:1fr 1fr;gap:15px}.check{margin:10px 0 20px}.history{display:flex;gap:2px;align-items:stretch;height:35px;overflow:hidden}.history span{min-width:2px;flex:1;background:#b7c8d4}.history span.yes{background:#4c9c89}.history span.unknown{background:#f1f5f8}#toast{position:fixed;bottom:25px;left:50%;transform:translateX(-50%);background:var(--ink);color:white;padding:12px 24px;border-radius:9px;box-shadow:0 5px 30px #1233;display:none;max-width:90vw;z-index:10}footer{text-align:center;padding:20px;color:var(--muted);font-size:11px}[hidden]{display:none!important}@media(max-width:900px){.main-grid,.bottom-grid{grid-template-columns:1fr}.child-panel .metric-pair{display:none}.inventory .section-title{flex-wrap:wrap}}@media(max-width:560px){header{padding:14px 18px}main{padding:22px 12px}.panel{padding:18px}h1{font-size:31px}.filters{flex-wrap:wrap}.network-strip{gap:10px;font-size:11px}.login{padding:25px;margin:4vh 0}.section-title{gap:9px}.upload{font-size:11px;padding:8px}#network-map{gap:8px}#network-map div{padding:9px}.title-row button{font-size:11px}.map-footer{gap:8px}.inventory .section-title input{width:100%}.form-grid{grid-template-columns:1fr}.brand span{font-size:17px}}

.person-row{border-top:1px solid var(--line);padding:12px 0}.person-device{display:grid;gap:8px;margin:16px 0}.person-device .history{height:25px}.person-device small{font-size:11px}

#login-form{display:block}#passkey-login{width:100%}#login-message:empty,#passkey-message:empty{display:none}#login-message,#passkey-message{font-size:13px;color:var(--amber)}

.unplaced-section{margin-top:22px;border-top:1px solid var(--line);padding-top:16px}.map-device-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(190px,1fr));gap:8px}.map-device{display:flex;flex-direction:column;align-items:flex-start;gap:4px;width:100%;padding:10px 12px;text-align:left;background:#f6fafc;border:1px solid var(--line);border-radius:7px;margin-bottom:6px}.map-device strong{font-size:13px}.map-device small{font-size:11px;color:var(--muted);overflow-wrap:anywhere}.map-device-group h4{font-size:12px;color:var(--muted);font-weight:500}.pin{min-width:27px;z-index:1}

/* Keep normalized room coordinates relative to the floor image only. */
#floor-wrap{background:#f5fafc;border:1px solid #cfdee8;border-radius:9px;overflow:hidden}#floor-surface{position:relative}#floor-wrap .unplaced-section{line-height:1.5;margin:0;padding:16px;border-top:2px dashed #b6cbd9;background:#edf5fa}#floor-wrap .unplaced-section h3{margin:0}#floor-wrap .map-device-grid{grid-template-columns:repeat(auto-fit,minmax(155px,1fr));gap:12px}#floor-wrap .diagram-device{border-radius:18px;padding:9px 12px;background:white;white-space:normal;min-height:95px;position:relative;border-color:#adc4d4;box-shadow:0 2px 4px #1733450a}#floor-wrap .diagram-device::before{content:'';position:absolute;left:50%;top:-10px;height:9px;border-left:1px solid #adc4d4}#floor-wrap .map-device strong{overflow-wrap:anywhere}#floor-wrap .pin{width:auto;max-width:45%;height:auto;min-height:27px;border-radius:8px;padding:4px 8px;line-height:1.35;white-space:normal;font-size:12px}#map-placed-list{display:none}

#map-scroll{overflow:auto;max-height:1050px}#map-layout{position:relative;width:1300px;background:#f6fafc}#floor-surface{width:900px}#map-lines{position:absolute;inset:0;pointer-events:none;z-index:1;overflow:visible}#map-lines path{fill:none;stroke:#92afc1;stroke-width:1.5;stroke-dasharray:4 4}#map-callouts{position:absolute;left:930px;top:0;width:350px;z-index:2}.room-callout{position:absolute;width:350px;border:1px solid #b8cedb;border-radius:8px;background:#fff;overflow:hidden;line-height:1.4}.room-callout h3{font-size:13px;padding:10px 12px;margin:0;background:#e8f1f6}.map-equipment{display:flex;width:100%;align-items:center;gap:8px;padding:5px 10px;height:49px;border:0;border-top:1px solid #e8eef2;border-radius:0;text-align:left;white-space:normal}.equipment-icon{font-size:22px;width:28px;text-align:center}.equipment-text{flex:1;min-width:0}.equipment-text strong{font-size:12px;display:block;overflow-wrap:anywhere}.equipment-text small{font-size:10px;color:#6d8090}.equipment-state{font-size:10px;white-space:nowrap}.map-equipment.online{color:#176b54;background:#f3fbf7}.map-equipment.offline{color:#647581;background:#f3f5f7}.map-equipment.unknown{color:#986322;background:#fffbef}#floor-wrap .room-anchor{font-size:10px;background:#fff;color:#36566d;border:1px solid #8eacbf;padding:2px 4px;min-height:18px;line-height:1.1}

/* Responsive room diagram: labels and devices share the same room boundary. */
#map-scroll{overflow:visible;max-height:none}#map-layout{width:100%;min-height:0!important;padding:14px}#map-lines{display:none}#map-callouts{position:static;width:100%}#original-floor{line-height:1.5;margin-bottom:14px}#original-floor summary{cursor:pointer;font-size:12px;color:#607c90}#floor-surface{width:100%}.floor-rooms{line-height:1.4;margin-bottom:24px}.floor-rooms>h3{font-size:18px;margin:10px 0}.room-grid{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:12px}.room-box{border:2px solid #9aafbd;background:white;min-width:0;border-radius:4px;overflow:hidden}.room-box h4{font-size:14px;margin:0;padding:10px 12px;background:#e8f0f6;color:#36566d;display:flex;flex-wrap:wrap;gap:4px;justify-content:space-between}.room-box h4 small{font-weight:400;color:#6b8190}.room-equipment{padding:6px}.room-empty{font-size:12px;color:#8a9ba7;margin:12px}.room-box .map-equipment{border:1px solid #dce7ed;border-radius:5px;margin:5px 0;height:auto;min-height:52px;flex-wrap:wrap}.room-box .equipment-state{margin-left:auto}.room-box .equipment-text{min-width:90px}.room-box .equipment-text strong{font-size:12px}.floor-rooms:last-child .room-box{grid-column:1/-1}@media(max-width:600px){.room-grid{grid-template-columns:minmax(0,1fr)}#map-layout{padding:10px}.room-box .equipment-text strong{font-size:13px}.room-box .map-equipment{flex-wrap:nowrap}.room-box h4{font-size:15px}}

/* Original floorplan with compact status counts and on-demand room detail. */
#map-layout{padding:0;width:100%;min-height:0!important}#map-callouts{display:none}#floor-surface{width:100%}#floor-wrap .room-count{font-size:11px;min-height:20px;min-width:32px;padding:2px 5px;white-space:nowrap;background:#fff;border:1px solid #a8c0cf;color:#687f8d;line-height:1.3;box-shadow:0 1px 4px #2342}.count-online{color:#177454;font-weight:700}.count-offline{color:#6b7782;font-weight:700}.count-unknown{color:#a46525;font-size:10px}#room-devices-list .map-equipment{height:auto;min-height:58px;flex-wrap:wrap}#room-devices-list .equipment-text{min-width:120px}#room-devices-list .equipment-text small{overflow-wrap:anywhere}#room-devices-list .equipment-state{margin-left:auto}#room-devices-dialog{max-height:85vh;overflow:auto}

.network-badge{display:inline-block;font-size:10px;line-height:1.5;padding:2px 6px;border-radius:4px;margin:3px 0;border:1px solid}.network-badge.telecom{color:#1759a0;background:#ecf4ff;border-color:#b7d1ef}.network-badge.huawei{color:#7550a4;background:#f6efff;border-color:#d8c5ed}#network-inventory-summary{margin-bottom:18px}

.printer-3d-icon{display:inline-block;position:relative;width:28px;height:28px;flex-shrink:0;border:2px solid currentColor;border-bottom-width:4px;border-radius:2px;background:transparent}.printer-3d-icon:before{content:'';position:absolute;top:2px;left:10px;width:4px;height:7px;background:currentColor;clip-path:polygon(0 0,100% 0,100% 65%,50% 100%,0 65%)}.printer-3d-icon:after{content:'';position:absolute;bottom:2px;left:6px;width:10px;height:10px;border:1.5px solid currentColor;transform:skewY(-12deg);background:transparent}
