:root{--bg:#f4f4f4;--layer:#fff;--layer-2:#f4f4f4;--layer-hover:#e8e8e8;--field:#f4f4f4;--border:#e0e0e0;--border-strong:#8d8d8d;--text:#161616;--text-2:#525252;--text-3:#6f6f6f;--shell:#161616;--shell-text:#f4f4f4;--primary:#007d79;--primary-hover:#005d5d;--primary-weak:#d9fbfb;--on-primary:#fff;--btn-secondary:#393939;--btn-secondary-hover:#4c4c4c;--btn-danger:#da1e28;--btn-danger-hover:#b81921;--ok:#198038;--ok-bg:#defbe6;--warn:#8e6a00;--warn-bg:#fcf4d6;--warn-line:#f1c21b;--urgent:#8a3800;--urgent-bg:#fff2e8;--urgent-line:#ff832b;--err:#da1e28;--err-bg:#fff1f1;--info:#0f62fe;--info-bg:#edf5ff;--focus:#0f62fe;--t-m80:#6929c4;--t-m80-bg:#e8daff;--t-ln2:#fff;--t-ln2-bg:#002d9c;--viewfinder:#0b1a1a;--sans:"IBM Plex Sans", "Noto Sans TC", system-ui, sans-serif;--mono:"IBM Plex Mono", ui-monospace, "Noto Sans TC", monospace;--lightningcss-light:initial;--lightningcss-dark: ;color-scheme:light}@media (prefers-color-scheme:dark){:root{--bg:#161616;--layer:#262626;--layer-2:#393939;--layer-hover:#333;--field:#393939;--border:#393939;--border-strong:#6f6f6f;--text:#f4f4f4;--text-2:#c6c6c6;--text-3:#a8a8a8;--shell:#0b0b0b;--primary:#08bdba;--primary-hover:#3ddbd9;--primary-weak:#004144;--on-primary:#081a1c;--ok:#42be65;--ok-bg:#044317;--warn:#f1c21b;--warn-bg:#3d3100;--warn-line:#f1c21b;--urgent:#ff832b;--urgent-bg:#3e1a00;--urgent-line:#ff832b;--err:#ff8389;--err-bg:#520408;--info:#78a9ff;--info-bg:#001d6c;--focus:#fff;--t-m80:#be95ff;--t-m80-bg:#491d8b;--t-ln2:#fff;--t-ln2-bg:#0043ce;--lightningcss-light: ;--lightningcss-dark:initial;color-scheme:dark}}*{box-sizing:border-box}html,body{margin:0}body{background:var(--bg);color:var(--text);font-family:var(--sans);letter-spacing:.16px;font-size:14px;line-height:1.43;overflow-x:hidden}a{color:var(--primary)}button{font:inherit;color:inherit;cursor:pointer}:focus-visible{outline:2px solid var(--focus);outline-offset:-2px}.mono{font-family:var(--mono);letter-spacing:0}.muted{color:var(--text-3)}.small{font-size:12px}.big{margin:8px 0 16px;font-size:20px;font-weight:500}.pre{white-space:pre-wrap}.hidden{display:none!important}.inline{display:inline}.contents{display:contents}svg.i{fill:none;stroke:currentColor;stroke-width:1.6px;stroke-linecap:round;stroke-linejoin:round;flex-shrink:0;width:20px;height:20px}h1{overflow-wrap:anywhere;margin:0;font-size:28px;font-weight:400;line-height:1.25}h2{margin:0 0 12px;font-size:16px;font-weight:600;line-height:1.4}h3{margin:24px 0 12px;font-size:14px;font-weight:600}.header{z-index:30;background:var(--shell);height:48px;color:var(--shell-text);border-bottom:1px solid #393939;align-items:center;display:flex;position:fixed;inset:0 0 auto}.header .menu{width:48px;height:48px;color:inherit;background:0 0;border:0;justify-content:center;align-items:center;display:none}.header .menu:hover,.hbtn:hover{background:#353535}.brand{white-space:nowrap;height:48px;color:inherit;align-items:center;gap:8px;padding:0 16px;font-size:14px;font-weight:600;text-decoration:none;display:flex}.brand b{color:#3ddbd9;font-weight:600}.brand span{color:#c6c6c6;font-weight:400}.header .spacer{flex:1}.hbtn{min-width:48px;height:48px;color:inherit;background:0 0;border:0;justify-content:center;align-items:center;gap:8px;padding:0 12px;text-decoration:none;display:flex}.hbtn .who{color:#c6c6c6;font-size:14px}.header a.hbtn[aria-current=page]{background:#262626}.avatar{color:#fff;background:#005d5d;border-radius:50%;flex-shrink:0;justify-content:center;align-items:center;width:28px;height:28px;font-size:12px;font-weight:600;display:flex}.sidenav{z-index:25;background:var(--layer);border-right:1px solid var(--border);flex-direction:column;width:240px;padding:16px 0;display:flex;position:fixed;top:48px;bottom:0;left:0;overflow-y:auto}.sidenav .group{color:var(--text-3);padding:16px 16px 8px;font-size:12px}.navlink{width:100%;min-height:40px;color:var(--text-2);border-left:3px solid #0000;align-items:center;gap:12px;padding:0 16px;font-weight:500;text-decoration:none;display:flex}.navlink:hover{background:var(--layer-hover);color:var(--text)}.navlink[aria-current=page]{background:var(--layer-2);color:var(--text);border-left-color:var(--primary)}.role{background:var(--layer-2);color:var(--text-2);margin:auto 16px 0;padding:12px;font-size:12px}.role strong{color:var(--text);font-size:14px;display:block}.scrim{display:none}main{min-height:100vh;padding-top:48px}.sidenav~main{padding-left:240px}.page{max-width:1440px;padding:24px 32px 48px}.tabbar{display:none}.crumbs{color:var(--text-3);flex-wrap:wrap;gap:4px 8px;margin:0 0 8px;font-size:12px;display:flex}.crumbs a{color:var(--primary);text-decoration:none}.crumbs a:hover{text-decoration:underline}.crumbs .sep{color:var(--text-3)}.title-row{flex-wrap:wrap;align-items:flex-end;gap:8px 16px;margin-bottom:24px;display:flex}.title-row .tags{flex-wrap:wrap;align-items:center;gap:8px;padding-bottom:4px;display:flex}.title-row .actions{flex-wrap:wrap;gap:1px;margin-left:auto;display:flex}.title-row .sub{width:100%;color:var(--text-2);margin:0}.lead{color:var(--text-2);max-width:72ch;margin:-16px 0 24px}.btn{text-align:left;white-space:nowrap;background:var(--btn-secondary);color:#fff;border:0;border-radius:0;justify-content:space-between;align-items:center;gap:32px;min-width:120px;height:48px;padding:0 16px;font-weight:500;text-decoration:none;display:inline-flex}.btn .i{margin-right:-4px}.btn:disabled{opacity:.5;cursor:not-allowed}.btn-primary{background:var(--primary);color:var(--on-primary)}.btn-primary:hover:not(:disabled){background:var(--primary-hover)}.btn-secondary{background:var(--btn-secondary);color:#fff}.btn-secondary:hover:not(:disabled){background:var(--btn-secondary-hover)}.btn-ghost{color:var(--primary);background:0 0}.btn-ghost:hover:not(:disabled){background:var(--layer-hover)}.btn-danger{background:var(--btn-danger);color:#fff}.btn-danger:hover:not(:disabled){background:var(--btn-danger-hover)}.btn-danger-ghost{color:var(--err);background:0 0}.btn-danger-ghost:hover:not(:disabled){background:var(--err-bg)}.btn-block{width:100%}.btn-row{flex-wrap:wrap;gap:1px;margin-top:16px;display:flex}form>.btn,.form-actions{margin-top:24px}.tag{white-space:nowrap;background:var(--layer-2);height:24px;color:var(--text-2);border-radius:12px;align-items:center;gap:4px;padding:0 8px;font-size:12px;font-weight:500;display:inline-flex}.tag-ok{background:var(--ok-bg);color:var(--ok)}.tag-warn{background:var(--warn-bg);color:var(--warn)}.tag-urgent{background:var(--urgent-bg);color:var(--urgent)}.tag-err{background:var(--err-bg);color:var(--err)}.tag-info{background:var(--info-bg);color:var(--info)}.tag-neutral,.tag-rt{background:var(--layer-2);color:var(--text-2)}.tag-4c{background:var(--ok-bg);color:var(--ok)}.tag-m20{background:var(--info-bg);color:var(--info)}.tag-m80{background:var(--t-m80-bg);color:var(--t-m80)}.tag-ln2{background:var(--t-ln2-bg);color:var(--t-ln2)}.count{color:var(--text-3);font-size:12px;font-weight:400}.tile{background:var(--layer);min-width:0;margin-bottom:16px;padding:16px}.tile>:last-child{margin-bottom:0}.tile-head{flex-wrap:wrap;justify-content:space-between;align-items:center;gap:12px;margin-bottom:16px;display:flex}.tile-head h2{margin:0}.tile-head .sub{color:var(--text-3);font-size:12px}.tile.danger{border-top:3px solid var(--err)}.tile.danger h2{color:var(--err)}.grid-2{grid-template-columns:minmax(0,1fr) minmax(0,1fr);align-items:start;gap:16px;display:grid}.grid-2>.tile{margin-bottom:0}.empty-state{color:var(--text-3);margin:0}.notice{border-left:3px solid;margin:0 0 16px;padding:12px 16px;font-size:14px;display:block}.notice-ok{background:var(--ok-bg);border-color:var(--ok);color:var(--text)}.notice-err{background:var(--err-bg);border-color:var(--err);color:var(--text)}.error{color:var(--err);margin:8px 0}.toast{z-index:70;top:calc(48px + 16px + env(safe-area-inset-top,0px));right:max(16px, env(safe-area-inset-right,0px));width:min(400px,100vw - 32px);color:var(--text);border:1px solid;border-left-width:3px;padding:12px 16px;font-size:14px;animation:.15s ease-out toast-in;position:fixed}.toast-ok{background:var(--ok-bg);border-color:var(--ok)}@keyframes toast-in{0%{opacity:0;transform:translateY(-8px)}}@media (prefers-reduced-motion:reduce){.toast{animation:none}}.modal-scrim{z-index:50;background:#16161680;justify-content:center;align-items:center;padding:16px;display:flex;position:fixed;inset:0}.modal{background:var(--layer);border:1px solid var(--border);width:min(480px,100%)}.modal-body{padding:16px 16px 32px}.modal-body h2{margin:0 0 8px;font-size:20px;font-weight:400}.modal-body p{color:var(--text-2);margin:0}.modal-actions{grid-template-columns:repeat(2,minmax(0,1fr));gap:1px;display:grid}.modal-actions .btn{min-width:0;height:64px}label{color:var(--text-2);margin:16px 0 0;font-size:12px;display:block}label>input,label>select,label>textarea{margin-top:8px}input,select,textarea{width:100%;min-height:48px;font:inherit;letter-spacing:.16px;color:var(--text);background:var(--field);border:0;border-bottom:1px solid var(--border-strong);border-radius:0;padding:0 16px;font-size:14px;display:block}textarea{resize:vertical;min-height:72px;padding:12px 16px}input::placeholder{color:var(--text-3)}textarea::placeholder{color:var(--text-3)}input:focus,select:focus,textarea:focus{outline:2px solid var(--focus);outline-offset:-2px}input:disabled,select:disabled{color:var(--text-3);border-bottom-color:var(--border);cursor:not-allowed}input[type=hidden]{display:none}input[type=checkbox]{width:20px;height:20px;min-height:0;accent-color:var(--primary);flex-shrink:0;margin:0;padding:0}input[type=radio]{width:20px;height:20px;min-height:0;accent-color:var(--primary);flex-shrink:0;margin:0;padding:0}label.check{color:var(--text);cursor:pointer;align-items:flex-start;gap:12px;margin:12px 0 0;font-size:14px;display:flex}label.check input{margin-top:1px}.check-hint{color:var(--text-3);font-size:12px;display:block}fieldset{border:0;min-width:0;margin:24px 0 0;padding:0}legend{color:var(--text);margin-bottom:4px;padding:0;font-size:14px;font-weight:600}label+input,label+select,label+textarea{margin-top:8px}input.qty{height:56px;font-family:var(--mono);text-align:center;font-size:24px;font-weight:500}.toolbar{flex-wrap:wrap;align-items:center;gap:8px 24px;margin-bottom:16px;display:flex}.toolbar input[type=search]{flex:1;min-width:min(100%,240px)}.toolbar label.check,.tile-head label.check{margin:0}.row-form{grid-template-columns:repeat(auto-fit,minmax(160px,1fr));align-items:end;gap:0 16px;display:grid}.row-form>.btn{margin-top:16px}.form-narrow{max-width:400px}.form-hint{color:var(--text-3);margin:8px 0 0;font-size:12px}.facts{grid-template-columns:max-content minmax(0,1fr);gap:8px 24px;margin:16px 0;font-size:14px;display:grid}.facts>div{display:contents}.facts dt{color:var(--text-3)}.facts dd{overflow-wrap:anywhere;margin:0}.danger-text{color:var(--err);font-weight:600}.meter{margin:16px 0}.meter .row{color:var(--text-2);justify-content:space-between;align-items:baseline;gap:12px;margin-bottom:6px;font-size:12px;display:flex}.meter .row b{color:var(--text);font-size:20px;font-weight:500}.meter .track{background:var(--layer-2);height:8px}.meter .track i{background:var(--primary);height:100%;display:block}.table-wrap{overflow-x:auto}table.data{border-collapse:collapse;background:var(--layer);width:100%;font-size:14px}table.data th{text-align:left;background:var(--layer-2);white-space:nowrap;height:40px;color:var(--text);padding:0 16px;font-size:12px;font-weight:600}table.data td{border-bottom:1px solid var(--border);vertical-align:middle;height:48px;padding:8px 16px}table.data tbody tr{position:relative}table.data tbody tr:hover td{background:var(--layer-hover)}table.data .nm a{color:var(--text);font-weight:600;text-decoration:none}table.data .nm a:after{content:"";position:absolute;inset:0}table.data .nm .sub{color:var(--text-3);font-size:12px;font-weight:400;display:block}table.data .num{white-space:nowrap}table.data .st{text-align:right;white-space:nowrap}table.data .st .tag+.tag{margin-left:4px}table.data .st .btn{z-index:1;position:relative}.loc-layout{grid-template-columns:260px minmax(0,1fr);align-items:start;gap:16px;display:grid}.loc-tree{padding:8px 0}.loc-tree .tile-head{margin-bottom:8px;padding:8px 16px 0}.tree{margin:0;padding:0;list-style:none}.tree .tree a{padding-left:32px}.tree .tree .tree a{padding-left:48px}.tree .tree .tree .tree a{padding-left:64px}.tree a{min-height:40px;color:var(--text-2);border-left:3px solid #0000;justify-content:space-between;align-items:center;gap:8px;padding:0 16px;text-decoration:none;display:flex}.tree a span:first-child{text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.tree a:hover{background:var(--layer-hover);color:var(--text)}.tree a.current{background:var(--layer-2);color:var(--text);border-left-color:var(--primary);font-weight:600}.badge{text-align:center;background:var(--layer-2);min-width:24px;color:var(--text-2);border-radius:12px;padding:0 6px;font-size:12px;font-weight:400}.tree a.current .badge{background:var(--layer)}.kind{color:var(--text-3);font-size:14px;font-weight:400}.tiles{background:var(--border);border:1px solid var(--border);grid-template-columns:repeat(auto-fill,minmax(180px,1fr));gap:1px;display:grid}.tiles .tile{min-height:96px;color:var(--text);flex-direction:column;gap:4px;margin:0;text-decoration:none;display:flex}.tiles .tile strong{font-size:16px;font-weight:500}.tiles .tile:hover{background:var(--layer-hover)}.floor{gap:4px;margin:0 0 16px;display:grid}.floor .zone{border:1px solid var(--border);background:var(--layer-2);min-width:0;min-height:52px;color:var(--text-2);flex-direction:column;justify-content:space-between;gap:4px;padding:6px 8px;font-size:12px;text-decoration:none;display:flex}.floor .zone strong{color:var(--text);text-overflow:ellipsis;white-space:nowrap;font-size:13px;font-weight:600;overflow:hidden}.floor .zone:hover{border-color:var(--border-strong)}.floor .zone .meta{white-space:nowrap;align-items:center;gap:8px;min-width:0;display:flex;overflow:hidden}.floor.fit{--col-min:64px}.floor.fit .zone strong{white-space:normal;overflow-wrap:anywhere;text-overflow:clip}.floor.edit{--col-min:120px;touch-action:none;-webkit-user-select:none;user-select:none;position:relative}.floor.edit .slot{border:1px dashed var(--border);background:var(--layer);min-width:0}.floor.edit.arming .slot{cursor:crosshair}.floor.edit.arming .slot:hover{background:var(--primary-weak)}.floor.edit .zone{cursor:grab;z-index:1;position:relative;overflow:hidden}.floor .zone.sel{background:var(--primary-weak);outline:2px solid var(--primary);outline-offset:-2px}.floor .zone.bad{background:var(--err-bg);outline:2px solid var(--err);outline-offset:-2px}.floor .zone.dragging{opacity:.5;cursor:grabbing}.floor .zone .grip{background:var(--primary);cursor:nwse-resize;touch-action:none;width:16px;height:16px;position:absolute;bottom:0;right:0}.floor .preview{z-index:2;pointer-events:none;border:2px dashed var(--primary);background:var(--primary-weak);color:var(--primary);justify-content:center;align-items:center;min-width:0;font-size:13px;font-weight:600;display:flex;overflow:hidden}.floor .preview.bad{border-color:var(--err);background:var(--err-bg);color:var(--err)}.floor .zone.mark{text-align:center;justify-content:center;align-items:center}.floor .zone.mark-text{border:1px dashed var(--border-strong);color:var(--text-2);background:0 0}.floor .zone.mark-door{background:var(--layer);border:2px solid var(--text-2);color:var(--text);font-weight:600}.floor .zone.mark-blocked{background:repeating-linear-gradient(135deg, transparent 0 6px, var(--border-strong) 6px 7px);border:1px solid var(--border-strong);color:var(--text-2)}.view-only{display:none}.form-pad{padding:0 16px 16px}@media (width<=671px),(pointer:coarse) and (height<=500px){.edit-only{display:none}.view-only{display:block}}.tree a.draggable{cursor:grab;touch-action:none}.loc-tree.drop{outline:2px dashed var(--err);outline-offset:-2px;background:var(--err-bg)}.qr summary{cursor:zoom-in;background:#fff;width:72px;padding:4px;list-style:none}.qr summary::-webkit-details-marker{display:none}.qr summary svg{width:64px;height:64px;display:block}.qr-large{background:#fff;width:max-content;max-width:100%;margin-top:8px;padding:8px}.qr-large svg{width:240px;max-width:100%;height:240px;display:block}.qr-small{background:#fff;flex-shrink:0;padding:4px}.qr-small svg{width:64px;height:64px;display:block}.accordion{background:var(--layer);margin-bottom:16px}.accordion>summary{cursor:pointer;align-items:center;gap:12px;min-height:48px;padding:0 16px;font-weight:600;list-style:none;display:flex}.accordion>summary::-webkit-details-marker{display:none}.accordion>summary:before{content:"";border-right:2px solid var(--text-2);border-bottom:2px solid var(--text-2);width:8px;height:8px;margin:0 4px;transition:transform .15s;transform:rotate(-45deg)}.accordion[open]>summary:before{transform:rotate(45deg)}.accordion>summary:hover{background:var(--layer-hover)}.accordion>section{border-top:1px solid var(--border);padding:16px}.accordion>section h2{margin-bottom:0}.accordion>section.danger h2{color:var(--err)}.ltree,.ltree ul{margin:0;padding:0;list-style:none}.ltree{--row-h:40px}.ltree ul{padding-left:16px}.ltree li{position:relative}.ltree ul>li:before{content:"";border-left:1px solid var(--border);position:absolute;top:0;bottom:0;left:-8px}.ltree ul>li:last-child:before{height:calc(var(--row-h) / 2);bottom:auto}.ltree ul>li:after{content:"";left:-8px;top:calc(var(--row-h) / 2);border-top:1px solid var(--border);width:8px;position:absolute}.ltree ul>li.pass:before{border-left-color:var(--primary)}.ltree ul>li.on-path:after{border-top-color:var(--primary)}.ltree ul>li.on-path>.trow:before{content:"";height:calc(var(--row-h) / 2);border-left:1px solid var(--primary);position:absolute;top:0;left:-8px}.ltree .trow{min-height:var(--row-h);align-items:center;display:flex;position:relative}.ltree .tw{width:24px;height:var(--row-h);color:var(--text-2);background:0 0;border:0;flex-shrink:0;justify-content:center;align-items:center;padding:0;display:flex}.ltree .tw:hover{color:var(--text);background:var(--layer-hover)}.ltree .tw svg{width:16px;height:16px;transition:transform .15s}.ltree .tw[aria-expanded=true] svg{transform:rotate(90deg)}.ltree .tw-none{flex-shrink:0;width:24px}.ltree a{min-width:0;min-height:var(--row-h);color:var(--text-2);flex:1;align-items:center;gap:8px;padding:0 8px;text-decoration:none;display:flex}.ltree a .nm{overflow-wrap:anywhere;min-width:0;padding:8px 0;line-height:1.3}.ltree a .tag,.ltree a .badge{flex-shrink:0}.ltree a .badge{margin-left:auto}.ltree a:hover{background:var(--layer-hover);color:var(--text)}.ltree a.anc{color:var(--primary);font-weight:600}.ltree a.current{background:var(--primary-weak);color:var(--text);box-shadow:inset 3px 0 0 var(--primary);font-weight:600}.ltree a .cur-label{color:var(--primary);flex-shrink:0;font-size:12px;font-weight:600}@media (prefers-reduced-motion:reduce){.ltree .tw svg{transition:none}}.locbar{display:none}@media (width<=671px){.locbar{background:var(--layer);width:100%;min-height:48px;color:var(--text);text-align:left;border:0;align-items:center;gap:12px;margin:0 0 16px;padding:0 12px 0 16px;display:flex}.locbar .p{text-overflow:ellipsis;white-space:nowrap;flex:1;min-width:0;overflow:hidden}.locbar .p b{font-weight:600}}.sheet{z-index:60;background:var(--layer);padding-top:env(safe-area-inset-top,0px);flex-direction:column;display:flex;position:fixed;inset:0}.sheet-head{border-bottom:1px solid var(--border);align-items:center;min-height:48px;padding-left:16px;display:flex}.sheet-head h2{flex:1;margin:0}.sheet-head .close{width:48px;height:48px;color:var(--text);background:0 0;border:0;justify-content:center;align-items:center;display:flex}.sheet-head .close:hover{background:var(--layer-hover)}.sheet-body{padding:8px 16px calc(16px + env(safe-area-inset-bottom,0px));flex:1;overflow-y:auto}.sheet .ltree{--row-h:48px}.stepper{grid-template-columns:repeat(var(--n), minmax(0, 1fr));margin:16px 0 0;padding:0;list-style:none;display:grid}.stepper li{text-align:center;flex-direction:column;align-items:center;min-width:0;display:flex;position:relative}.stepper li+li:before{content:"";background:var(--border);height:2px;position:absolute;top:23px;left:-50%;right:50%}.stepper li.line-done:before{background:var(--primary)}.stepper .dot{z-index:1;background:0 0;border:0;justify-content:center;align-items:center;width:48px;height:48px;padding:0;display:flex;position:relative}.stepper .o{border:1px solid var(--border-strong);background:var(--layer);width:24px;height:24px;color:var(--text-3);border-radius:50%;justify-content:center;align-items:center;font-size:12px;font-weight:600;display:flex}.stepper .o svg{stroke-width:2.2px;width:16px;height:16px}.stepper .dot:hover .o{border-color:var(--primary)}.stepper .now .o{border:2px solid var(--primary);background:var(--primary-weak);color:var(--primary)}.stepper .done .o{border-color:var(--primary);background:var(--primary);color:var(--on-primary)}.stepper .st-name{max-width:100%;color:var(--text-2);text-overflow:ellipsis;white-space:nowrap;padding:0 4px;font-size:12px;overflow:hidden}.stepper .now .st-name{color:var(--text);font-weight:600}.guide-step{border-top:1px solid var(--border);margin-top:16px;padding-top:12px}.guide-step .step-no{color:var(--text-3);margin:0 0 2px;font-size:12px}.guide-step h3{margin:0 0 12px;font-size:14px;font-weight:400}.guide-step h3 b{color:var(--primary);font-weight:600}.guide-step .floor{margin-bottom:0}.guide-modal{flex-direction:column;width:min(960px,100%);height:min(760px,100dvh - 32px);display:flex}.guide-modal .sheet-head,.guide-top,.guide-modal .modal-actions{flex-shrink:0}.guide-top{border-bottom:1px solid var(--border);padding:16px 16px 12px}.guide-modal-body{flex-direction:column;flex:1;min-height:0;padding:0 16px 16px;display:flex}.guide-modal .guide-step{border-top:0;flex-direction:column;flex:1;min-height:0;margin-top:0;padding-top:12px;display:flex}.guide-modal .guide-step>p,.guide-modal .guide-step>h3,.guide-modal .scan-check{flex-shrink:0}.map{flex-direction:column;flex:0 auto;min-height:0;display:flex;position:relative}.map .table-wrap{overscroll-behavior:contain;cursor:grab;-webkit-user-select:none;user-select:none;flex:0 auto;min-height:0;overflow:auto}.map .table-wrap.panning{cursor:grabbing}.map .floor .zone:hover,.map .floor .zone.sel:hover{border-color:var(--border)}.map-bar{flex-shrink:0;align-items:center;gap:8px;margin:-8px 0 4px;display:flex}.map-bar[hidden]{display:none}.map-bar .form-hint{flex:1;min-width:0;margin:0}.map-recenter{flex-shrink:0;gap:8px;min-width:0;padding:0 12px}@media (width<=671px){.guide-scrim{padding:0}.guide-modal{width:100%;height:100%;padding:env(safe-area-inset-top,0px) 0 env(safe-area-inset-bottom,0px);border:0}}.scan-check{display:none}.scan-body .viewfinder{margin:0 -16px}.scan-body .form-hint{margin:12px 0}@media (width<=671px){.scan-check{margin-top:16px;display:block}.scan-check .btn{height:56px}.scan-check .notice{margin:0}}.tree-tools{padding:0 16px 8px}.tree-tools .btn-row{margin-top:8px}.tree-tools .btn{flex:1;gap:8px;min-width:0;padding:0 12px}.tree-box{padding:0 8px 8px 16px}.next-tiles-wrap{display:none}@media (width<=671px){.loc-layout.with-locbar>.loc-tree{display:none}.next-tiles-wrap{display:block}}.box-grid{gap:4px;max-width:560px;display:grid}.box-grid .cell{aspect-ratio:1;border:1px solid var(--border);background:var(--layer);min-width:0;color:var(--text);text-align:left;flex-direction:column;justify-content:space-between;gap:2px;padding:4px 6px;font-size:11px;line-height:1.25;text-decoration:none;display:flex;position:relative;overflow:hidden}.cell-label{color:var(--text-3);font-size:11px;font-family:var(--mono)}.cell-text{color:var(--text);-webkit-line-clamp:2;overflow-wrap:anywhere;-webkit-box-orient:vertical;font-size:12px;font-weight:600;display:-webkit-box;overflow:hidden}.cell-out{color:var(--info);font-size:11px;font-weight:500}.box-grid .cell.full:hover{border-color:var(--border-strong)}.box-grid .cell.empty{background:repeating-linear-gradient(135deg, transparent 0 6px, var(--layer-2) 6px 7px);border-style:dashed}.box-grid .cell.expired{background:var(--err-bg);border-color:var(--err)}.box-grid .cell.out{border:2px dashed var(--info);background:var(--info-bg)}.box-grid .cell.out .cell-text{color:var(--info)}.box-grid .cell.highlight{outline:3px solid var(--primary);outline-offset:-3px}.box-grid .cell.pickable{cursor:pointer;font:inherit;font-size:11px}.box-grid .cell.pickable:hover{border-color:var(--primary);border-style:solid}.box-grid .cell.selected{background:var(--primary);border:0}.box-grid .cell.selected .cell-label{color:var(--on-primary)}.legend{color:var(--text-2);flex-wrap:wrap;gap:8px 16px;margin-top:16px;font-size:12px;display:flex}.legend span{align-items:center;gap:6px;display:inline-flex}.legend i{border:1px solid var(--border-strong);background:var(--layer);width:12px;height:12px;display:inline-block}.legend i.l-expired{background:var(--err-bg);border-color:var(--err)}.legend i.l-out{background:var(--info-bg);border:2px dashed var(--info)}.legend i.l-empty{background:0 0;border-style:dashed}.legend i.l-sel{background:var(--primary-weak);border:2px solid var(--primary)}.legend i.l-bad{background:var(--err-bg);border:2px solid var(--err)}.legend i.l-text{border:1px dashed var(--border-strong);background:0 0}.legend i.l-door{border:2px solid var(--text-2)}.legend i.l-blocked{background:repeating-linear-gradient(135deg, transparent 0 3px, var(--border-strong) 3px 4px)}.mini-box{max-width:320px;margin-top:16px}.path{flex-wrap:wrap;gap:4px;margin:0;padding:0;list-style:none;display:flex}.path li{background:var(--layer-2);padding:2px 8px;font-size:12px}.path li:last-child{background:var(--primary-weak);color:var(--primary);font-weight:600}.path a{color:inherit;text-decoration:none}.scan-grid{grid-template-columns:minmax(0,1fr) minmax(0,1fr);align-items:start;gap:16px;max-width:1100px;display:grid}.scanner{flex-direction:column;display:flex}.viewfinder{aspect-ratio:4/3;background:radial-gradient(circle at 50% 45%, #1d3a3a, var(--viewfinder) 70%);justify-content:center;align-items:center;display:flex;position:relative;overflow:hidden}.viewfinder video{object-fit:cover;width:100%;height:100%;position:absolute;inset:0}.viewfinder .frame{aspect-ratio:1;pointer-events:none;width:52%;position:relative}.viewfinder .frame b{border:4px solid #3ddbd9;width:28px;height:28px;position:absolute}.viewfinder .frame b:first-child{border-bottom:0;border-right:0;top:0;left:0}.viewfinder .frame b:nth-child(2){border-bottom:0;border-left:0;top:0;right:0}.viewfinder .frame b:nth-child(3){border-top:0;border-right:0;bottom:0;left:0}.viewfinder .frame b:nth-child(4){border-top:0;border-left:0;bottom:0;right:0}.viewfinder .laser{background:#3ddbd9;height:2px;animation:2s ease-in-out infinite alternate sweep;position:absolute;left:6%;right:6%;box-shadow:0 0 12px #3ddbd9}.viewfinder .idle-icon{color:#3ddbd9;justify-content:center;align-items:center;display:flex;position:absolute;inset:0}.viewfinder .idle-icon .i{stroke-width:1.2px;width:48px;height:48px}.viewfinder.active .idle-icon,.viewfinder:not(.active) .laser{display:none}@keyframes sweep{0%{top:8%}to{top:92%}}@media (prefers-reduced-motion:reduce){.viewfinder .laser{animation:none;top:50%}}.viewfinder .hint{text-align:center;color:#c6c6c6;font-size:13px;position:absolute;bottom:12px;left:12px;right:12px}.scan-btns{grid-template-columns:minmax(0,1fr);gap:1px;margin-top:1px;display:grid}.scan-btns .btn{min-width:0;height:56px}.scanner .error{margin:12px 0 0}.panel-placeholder{color:var(--text-3);text-align:center;border:1px dashed var(--border-strong);flex-direction:column;justify-content:center;align-items:center;gap:8px;min-height:200px;margin-top:16px;padding:16px;display:flex}.panel-placeholder .i{width:32px;height:32px}.code-form{align-items:stretch;gap:1px;display:flex}.code-form input{min-width:0;height:56px;font-family:var(--mono);text-transform:uppercase;letter-spacing:1px;flex:1;font-size:18px}.code-form .btn{min-width:96px;height:56px}.container-head{justify-content:space-between;align-items:flex-start;gap:16px;display:flex}.container-head .uid{font-size:18px;font-weight:500}.container-head .name{color:var(--text-2);margin:4px 0 0}.container-head .name a{color:var(--primary);text-decoration:none}.status-row{flex-wrap:wrap;align-items:center;gap:8px;margin:12px 0 0;display:flex}.actions-grid{grid-template-columns:repeat(auto-fill,minmax(160px,1fr));gap:1px;margin-bottom:16px;display:grid}.actions-grid .btn{width:100%;min-width:0;height:56px}.actions-grid .contents{display:contents}.actions-grid .wide{grid-column:1/-1}.actions-grid form>.btn{margin-top:0}.history{margin:0;padding:0;list-style:none}.history li{border-bottom:1px solid var(--border);grid-template-columns:minmax(0,1fr) auto;gap:2px 12px;padding:12px 0;display:grid}.history li:last-child{border-bottom:0}.history .what{font-weight:600}.history .delta{font-family:var(--mono);text-align:right;font-weight:500}.history .meta{color:var(--text-3);grid-column:1/-1;font-size:12px}.user-list{grid-template-columns:repeat(auto-fill,minmax(min(100%,440px),1fr));gap:16px;display:grid}.user-list .tile{margin:0}.user-card.inactive{opacity:.65}.user-card .tile-head{margin-bottom:0}.user-card form+form{border-top:1px solid var(--border);margin-top:16px;padding-top:8px}.field-row{border-bottom:1px solid var(--border);padding:8px 0 16px}.field-row:last-child{border-bottom:0;padding-bottom:0}.field-row.inactive{opacity:.6}.login{max-width:400px;margin:48px auto}.login h1{margin-bottom:8px}.login .btn{width:100%;margin-top:32px}.labels{grid-template-columns:repeat(auto-fill,62mm);gap:4mm;margin-top:16px;display:grid}.label{color:#000;width:62mm;height:29mm;font-family:var(--sans);background:#fff;border:1px dashed #8d8d8d;align-items:center;gap:2mm;padding:2mm;display:flex;overflow:hidden}.label-qr svg{width:25mm;height:25mm;display:block}.label-text{flex-direction:column;gap:1mm;min-width:0;display:flex}.label-text strong{overflow-wrap:anywhere;font-size:11pt}.label-text .small{overflow-wrap:anywhere;font-size:7pt}@media print{.header,.sidenav,.tabbar,.scrim,.no-print{display:none!important}body{background:#fff}main,.sidenav~main{padding:0}.page{max-width:none;padding:0}.label{break-inside:avoid;border-color:#ccc}}@media (width<=1055px){.header .menu{display:flex}.brand{padding-left:0}.sidenav{visibility:hidden;transition:transform .2s;transform:translate(-100%)}.sidenav.open{visibility:visible;transform:none;box-shadow:0 4px 16px #0000004d}.scrim.open{z-index:24;background:#16161680;border:0;padding:0;display:block;position:fixed;inset:48px 0 0}.sidenav~main{padding-left:0}.page{padding:24px}.loc-layout{grid-template-columns:220px minmax(0,1fr)}}@media (width<=1055px) and (prefers-reduced-motion:reduce){.sidenav{transition:none}}@media (width<=671px){body{font-size:15px}input,select,textarea{font-size:16px}.brand span,.hbtn .who{display:none}.page{padding:16px 16px 48px}.sidenav~main .page{padding-bottom:calc(96px + env(safe-area-inset-bottom))}h1{font-size:22px}.title-row{margin-bottom:16px}.title-row .actions{flex-direction:column;width:100%;margin-left:0}.title-row .actions .btn{width:100%}.lead{margin:-8px 0 16px}.grid-2,.scan-grid,.row-form{grid-template-columns:minmax(0,1fr)}.btn-row{flex-direction:column}.btn-row .btn,form>.btn,.row-form>.btn{width:100%}.form-narrow{max-width:none}.tile{padding:16px}.facts{grid-template-columns:minmax(88px,max-content) minmax(0,1fr);gap:8px 16px}table.data,table.data tbody{background:0 0;display:block}table.data thead{display:none}table.data tbody tr{border-bottom:1px solid var(--border);grid-template-columns:minmax(0,1fr) auto;gap:2px 12px;padding:12px 0;display:grid}table.data tbody tr:hover td{background:0 0}table.data td{height:auto;color:var(--text-3);border:0;grid-column:1;padding:0;font-size:12px;display:block}table.data td.nm{color:var(--text);font-size:15px}table.data td.st{flex-direction:column;grid-area:1/2/span 3;align-self:center;align-items:flex-end;gap:4px;display:flex}table.data td.st .tag+.tag{margin-left:0}table.data td:empty{display:none}table.data td[data-label]:not(:empty):before{content:attr(data-label) "："}.loc-layout{grid-template-columns:minmax(0,1fr)}.loc-detail{order:-1}.floor{gap:3px}.floor .zone{min-height:44px;padding:4px 6px}.box-grid{gap:3px}.box-grid .cell{padding:3px 4px}.cell-out{display:none}.actions-grid{grid-template-columns:repeat(2,minmax(0,1fr))}.container-head .qr-small svg{width:56px;height:56px}.user-list{grid-template-columns:minmax(0,1fr)}.login{margin:24px auto}.toast{left:max(16px, env(safe-area-inset-left,0px));width:auto}.tabbar{z-index:20;height:calc(64px + env(safe-area-inset-bottom));padding-bottom:env(safe-area-inset-bottom);background:var(--layer);border-top:1px solid var(--border);grid-template-columns:repeat(5,minmax(0,1fr));display:grid;position:fixed;bottom:0;left:0;right:0}.tab{color:var(--text-3);flex-direction:column;justify-content:center;align-items:center;gap:2px;min-width:0;font-size:11px;text-decoration:none;display:flex}.tab[aria-current=page]{color:var(--primary);font-weight:600}.tab.scan{color:var(--primary);font-weight:600;position:relative}.tab.scan .fab{background:var(--primary);width:56px;height:56px;color:var(--on-primary);border-radius:50%;justify-content:center;align-items:center;margin-top:-24px;display:flex;box-shadow:0 2px 8px #00000040}.tab.scan .fab svg{width:26px;height:26px}}.box-grid .cell.counted{background:var(--ok-bg);border-color:var(--ok)}.box-grid .cell.counted:after{content:"";background:var(--ok);width:14px;height:14px;position:absolute;top:4px;right:4px;-webkit-mask:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'%3E%3Cpath d='m5 12.5 4.5 4.5L19 7.5' fill='none' stroke='black' stroke-width='3'/%3E%3C/svg%3E") 50%/contain no-repeat;mask:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'%3E%3Cpath d='m5 12.5 4.5 4.5L19 7.5' fill='none' stroke='black' stroke-width='3'/%3E%3C/svg%3E") 50%/contain no-repeat}.box-grid .cell.missing{border:2px dashed var(--err);background:var(--err-bg)}.scan-log{margin:0;padding:0;list-style:none}.scan-log li{border-bottom:1px solid var(--border);align-items:center;gap:12px;min-height:48px;font-size:14px;display:flex}.scan-log li>div{flex:1;min-width:0}.scan-log .sub{color:var(--text-3);font-size:12px;font-family:var(--mono);display:block}.count-code{margin-top:16px}.count-actions{flex-wrap:wrap;gap:1px;margin-top:16px;display:flex}.count-row-actions select{min-width:160px}.thumbs{grid-template-columns:repeat(auto-fill,minmax(120px,160px));gap:16px;margin:0 0 24px;display:grid}.thumb{color:var(--text);flex-direction:column;gap:4px;min-width:0;text-decoration:none;display:flex}.thumb img{aspect-ratio:1;object-fit:cover;background:var(--layer-2);border:1px solid var(--border);width:100%;display:block}.thumb:hover img{border-color:var(--primary)}.thumb .cap{white-space:nowrap;text-overflow:ellipsis;font-size:12px;overflow:hidden}.thumb .meta{color:var(--text-3);font-size:11px}.upload-row{border-top:1px solid var(--border);grid-template-columns:200px minmax(0,1fr) auto;align-items:end;gap:0 16px;margin-top:24px;padding-top:16px;display:grid}.upload-row input[type=file]{width:100%;height:auto;padding:10px 12px;font-size:14px}.upload-row input[type=file]::file-selector-button{font:inherit;background:var(--btn-secondary);color:#fff;cursor:pointer;border:0;margin-right:12px;padding:8px 12px}.upload-lot{max-width:320px;margin-top:16px;display:block}.thumbs .btn{margin-top:4px}@media (width<=671px){.count-actions .btn{flex:100%}.thumbs{grid-template-columns:repeat(3,minmax(0,1fr));gap:8px}.upload-row{grid-template-columns:minmax(0,1fr)}.upload-row .btn{width:100%;margin-top:16px}}