:root{--paper: #f6f6f2;--panel: #ffffff;--panel-2: #eceee7;--plate: #ffffff;--ink: #15181a;--ink-2: #565b5c;--ink-3: #878c88;--rule: #dbdfd7;--rule-2: #ebeee7;--accent: #17557f;--accent-ink: #ffffff;--st-pending: #9aa09b;--st-progress: #c98a12;--st-done: #1c7a3e;--st-issue: #b3372c;--st-notv: #b9bcb4;--cat-inside: #7a7a7a;--cat-ocean: #f2b6c6;--cat-balcony: #e8604c;--cat-mini: #9b6bb3;--cat-suite: #2f4b7c;--cat-spa: #3aa7a3;--cat-studio: #c9a227;--cat-crew: #b8c4d6;--cat-officer: #d9b38c;--cat-none: #d8d8d8;--shadow: 0 1px 2px rgba(20, 24, 22, .05), 0 10px 28px rgba(20, 24, 22, .1);--plan-invert: 0}@media (prefers-color-scheme: dark){:root:not([data-theme=light]){--paper: #0f1211;--panel: #191d1b;--panel-2: #232825;--plate: #0b0d0c;--ink: #f1f3ee;--ink-2: #b0b5b0;--ink-3: #7d827d;--rule: #2c312d;--rule-2: #232825;--accent: #4a9fd8;--accent-ink: #06131c;--st-pending: #7f847f;--st-progress: #e0a52c;--st-done: #45b567;--st-issue: #e8695c;--st-notv: #5d625d;--cat-inside: #8d8d8d;--cat-ocean: #d99cae;--cat-balcony: #e0705e;--cat-mini: #a67bc0;--cat-suite: #4a6aa6;--cat-spa: #46b3af;--cat-studio: #d1ad3a;--cat-crew: #93a2b8;--cat-officer: #c9a27a;--cat-none: #4a4f4c;--shadow: 0 1px 2px rgba(0, 0, 0, .4), 0 10px 30px rgba(0, 0, 0, .55);--plan-invert: 1}}:root[data-theme=dark]{--paper: #0f1211;--panel: #191d1b;--panel-2: #232825;--plate: #0b0d0c;--ink: #f1f3ee;--ink-2: #b0b5b0;--ink-3: #7d827d;--rule: #2c312d;--rule-2: #232825;--accent: #4a9fd8;--accent-ink: #06131c;--st-pending: #7f847f;--st-progress: #e0a52c;--st-done: #45b567;--st-issue: #e8695c;--st-notv: #5d625d;--cat-inside: #8d8d8d;--cat-ocean: #d99cae;--cat-balcony: #e0705e;--cat-mini: #a67bc0;--cat-suite: #4a6aa6;--cat-spa: #46b3af;--cat-studio: #d1ad3a;--cat-crew: #93a2b8;--cat-officer: #c9a27a;--cat-none: #4a4f4c;--shadow: 0 1px 2px rgba(0, 0, 0, .4), 0 10px 30px rgba(0, 0, 0, .55);--plan-invert: 1}*,*:before,*:after{box-sizing:border-box}html,body,#root{height:100%}body{margin:0;background:var(--paper);color:var(--ink);font:400 15px/1.5 IBM Plex Sans,system-ui,-apple-system,sans-serif;-webkit-text-size-adjust:100%;overscroll-behavior:none}button,input,select,textarea{font:inherit;color:inherit}button{background:none;border:none;cursor:pointer}:focus-visible{outline:2px solid var(--accent);outline-offset:2px}.mono{font-family:IBM Plex Mono,ui-monospace,monospace;font-variant-numeric:tabular-nums}.cond{font-family:IBM Plex Sans Condensed,system-ui,sans-serif}.app{display:flex;flex-direction:column;height:100%;overflow:hidden}.topbar{flex:none;background:var(--panel);border-bottom:1px solid var(--rule);padding:8px 12px 0;padding-top:max(8px,env(safe-area-inset-top))}.trow{display:flex;align-items:center;gap:12px;flex-wrap:wrap}.brand{font:700 15px/1.1 IBM Plex Sans Condensed,sans-serif;letter-spacing:-.01em;white-space:nowrap}.brand span{color:var(--ink-3);font-weight:600}.grow{flex:1}.meterwrap{display:flex;align-items:center;gap:9px;flex:2 1 200px;min-width:160px}.meter{flex:1;height:10px;border-radius:5px;background:var(--panel-2);display:flex;overflow:hidden}.meter i{display:block;height:100%}.pct{font:600 14px/1 IBM Plex Mono,monospace;font-variant-numeric:tabular-nums;white-space:nowrap}.pct small{color:var(--ink-3);font-weight:400;font-size:11.5px}.tabs{display:flex;gap:2px;margin-top:8px}.tabs button{padding:8px 13px;font:600 13px/1 IBM Plex Sans Condensed,sans-serif;color:var(--ink-3);border-bottom:2px solid transparent;white-space:nowrap}.tabs button.on{color:var(--ink);border-bottom-color:var(--accent)}.tabs .badge{display:inline-block;margin-left:5px;background:var(--st-issue);color:#fff;border-radius:9px;padding:0 5px;font-size:10.5px;font-weight:600}.deckstrip{display:flex;gap:5px;overflow-x:auto;padding:8px 0 7px;scrollbar-width:thin}.deckchip{flex:none;border:1px solid var(--rule);border-radius:15px;padding:4px 10px;font:600 12.5px/1.25 IBM Plex Sans Condensed,sans-serif;color:var(--ink-2);background:var(--panel);display:flex;gap:6px;align-items:baseline;white-space:nowrap}.deckchip .dp{font-family:IBM Plex Mono,monospace;font-size:10.5px;color:var(--ink-3)}.deckchip.on{background:var(--accent);border-color:var(--accent);color:var(--accent-ink)}.deckchip.on .dp{color:var(--accent-ink);opacity:.85}.syncbadge{display:inline-flex;align-items:center;gap:6px;border:1px solid var(--rule);border-radius:14px;padding:4px 10px;font:500 12px/1 IBM Plex Sans,sans-serif;color:var(--ink-2);white-space:nowrap}.dot{width:8px;height:8px;border-radius:50%;flex:none}.dot.ok{background:var(--st-done)}.dot.warn{background:var(--st-progress)}.dot.off{background:var(--ink-3)}.dot.err{background:var(--st-issue)}.spin{animation:sp .9s linear infinite}@keyframes sp{to{transform:rotate(360deg)}}@media (prefers-reduced-motion: reduce){.spin{animation:none}}.viewport{flex:1;position:relative;overflow:hidden;touch-action:none;background:var(--paper)}.world{position:absolute;left:0;top:0;transform-origin:0 0}.plan{display:block;max-width:none!important;max-height:none!important;filter:invert(var(--plan-invert)) hue-rotate(calc(var(--plan-invert) * 180deg))}.overlay{position:absolute;left:0;top:0;overflow:visible;max-width:none!important}.overlay polygon{cursor:pointer;stroke-linejoin:round}.p-PENDING{fill:#9aa09b38;stroke:#74796f}.p-IN_PROGRESS{fill:#c98a1299;stroke:#8c5f08}.p-COMPLETED{fill:#1c7a3e8c;stroke:#12602f}.p-ISSUE{fill:#b3372c9e;stroke:#8b271e}.p-NO_TV{fill:#b9bcb447;stroke:#8f938b;stroke-dasharray:6 5}.p-blank{fill:#17557f1f;stroke:#17557f;stroke-dasharray:7 6}.dim{opacity:.12}.labels{position:absolute;left:0;top:0;pointer-events:none}.labels span{position:absolute;transform:translate(-50%,-50%);font:600 10px/1 IBM Plex Mono,monospace;font-variant-numeric:tabular-nums;white-space:nowrap;color:var(--ink);text-shadow:0 0 3px var(--paper),0 0 6px var(--paper)}.labels span.on-fill{color:#fff;text-shadow:0 0 3px rgba(0,0,0,.7)}.zoomctl{position:absolute;right:11px;bottom:max(14px,env(safe-area-inset-bottom));display:flex;flex-direction:column;gap:1px;border-radius:9px;overflow:hidden;box-shadow:var(--shadow)}.zoomctl button{width:40px;height:40px;background:var(--panel);border:1px solid var(--rule);font-size:18px;font-weight:600}.hint{position:absolute;left:11px;bottom:max(14px,env(safe-area-inset-bottom));background:var(--panel);border:1px solid var(--rule);border-radius:8px;padding:6px 10px;font-size:12px;color:var(--ink-2);max-width:60%;box-shadow:var(--shadow)}.toolbar{flex:none;display:flex;align-items:center;gap:7px;flex-wrap:wrap;padding:7px 12px;background:var(--panel);border-bottom:1px solid var(--rule)}.chip{display:inline-flex;align-items:center;gap:6px;border:1px solid var(--rule);border-radius:14px;padding:4px 10px;font:500 12.5px/1.3 IBM Plex Sans,sans-serif;color:var(--ink-2);background:var(--panel);white-space:nowrap}.chip .sw{width:10px;height:10px;border-radius:3px;flex:none}.chip .n{font-family:IBM Plex Mono,monospace;color:var(--ink-3);font-size:11.5px}.chip.on{border-color:var(--ink-2);background:var(--panel-2);color:var(--ink)}.chip.paint{border-color:var(--accent);box-shadow:inset 0 0 0 1px var(--accent);color:var(--ink)}.seg{display:flex;border:1px solid var(--rule);border-radius:8px;overflow:hidden}.seg button{padding:5px 12px;font:600 12.5px/1.3 IBM Plex Sans Condensed,sans-serif;color:var(--ink-2)}.seg button.on{background:var(--accent);color:var(--accent-ink)}.btn{border:1px solid var(--rule);border-radius:8px;padding:6px 12px;font:600 12.5px/1.3 IBM Plex Sans,sans-serif;color:var(--ink-2);background:var(--panel);white-space:nowrap}.btn.primary{background:var(--accent);border-color:var(--accent);color:var(--accent-ink)}.btn.danger{color:var(--st-issue)}.btn:disabled{opacity:.45;cursor:not-allowed}.search{display:flex;align-items:center;gap:6px;border:1px solid var(--rule);border-radius:8px;background:var(--panel);padding:4px 9px}.search input{border:none;background:none;outline:none;width:96px;font-family:IBM Plex Mono,monospace}.scrim{position:fixed;inset:0;background:#0000006b;z-index:40}.sheet{position:fixed;left:50%;transform:translate(-50%);bottom:0;width:min(520px,100%);max-height:84vh;overflow-y:auto;z-index:41;background:var(--panel);border:1px solid var(--rule);border-bottom:none;border-radius:14px 14px 0 0;box-shadow:var(--shadow);padding:14px 15px calc(16px + env(safe-area-inset-bottom))}.sheet h2{font:700 21px/1.1 IBM Plex Mono,monospace;margin:0;letter-spacing:-.01em}.sheet .meta{color:var(--ink-3);font-size:12px;margin:3px 0 12px;display:flex;gap:8px;flex-wrap:wrap}.pill{border:1px solid var(--rule);border-radius:10px;padding:1px 7px;font-size:11px;font-weight:500;color:var(--ink-2)}.statusgrid{display:grid;grid-template-columns:repeat(auto-fit,minmax(112px,1fr));gap:6px}.statusgrid button{display:flex;align-items:center;gap:7px;border:1px solid var(--rule);border-radius:9px;padding:9px 10px;font:600 13px/1.2 IBM Plex Sans,sans-serif;color:var(--ink-2);background:var(--panel)}.statusgrid button.on{border-color:var(--ink-2);background:var(--panel-2);color:var(--ink)}.sheet label.field{display:block;font:600 10.5px/1 IBM Plex Mono,monospace;letter-spacing:.09em;text-transform:uppercase;color:var(--ink-3);margin:14px 0 6px}.sheet textarea,.sheet input[type=text]{width:100%;border:1px solid var(--rule);border-radius:8px;background:var(--paper);padding:8px 10px;resize:none}.unitrow{display:flex;align-items:center;gap:8px;padding:8px 0;border-bottom:1px solid var(--rule-2)}.unitrow:last-child{border-bottom:none}.unitrow .seq{font:600 11px/1 IBM Plex Mono,monospace;color:var(--ink-3);width:22px;flex:none}.unitrow .model{font-family:IBM Plex Mono,monospace;font-size:11.5px;color:var(--ink-2);flex:1;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.unitrow select{border:1px solid var(--rule);border-radius:7px;background:var(--paper);padding:4px 6px;font-size:12px}.unitrow input{width:96px;border:1px solid var(--rule);border-radius:7px;background:var(--paper);padding:4px 7px;font-family:IBM Plex Mono,monospace;font-size:12px}.rowbtns{display:flex;gap:7px;margin-top:14px}.rowbtns .btn{flex:1;padding:9px;text-align:center}.scroll{flex:1;overflow-y:auto;padding:12px;padding-bottom:calc(20px + env(safe-area-inset-bottom))}.card{background:var(--panel);border:1px solid var(--rule);border-radius:10px;padding:13px 14px;margin-bottom:10px;box-shadow:var(--shadow)}.card h3{font:600 14px/1.2 IBM Plex Sans Condensed,sans-serif;margin:0 0 4px}.card p{margin:0 0 8px;color:var(--ink-2);font-size:13.5px;max-width:70ch}.card p:last-child{margin-bottom:0}.rowlist{display:flex;flex-direction:column;border:1px solid var(--rule);border-radius:10px;overflow:hidden;background:var(--panel)}.rowitem{display:flex;align-items:center;gap:10px;padding:9px 12px;border-bottom:1px solid var(--rule-2);text-align:left;width:100%}.rowitem:last-child{border-bottom:none}.rowitem:hover{background:var(--panel-2)}.rowitem .no{font:600 14px/1 IBM Plex Mono,monospace;width:58px;flex:none}.rowitem .dk{font-size:11.5px;color:var(--ink-3);width:46px;flex:none;font-family:IBM Plex Mono,monospace}.rowitem .st{margin-left:auto;display:flex;align-items:center;gap:6px;font-size:12px;color:var(--ink-2);white-space:nowrap}.rowitem .rm{font-size:12px;color:var(--ink-3);overflow:hidden;text-overflow:ellipsis;white-space:nowrap;flex:1;min-width:0}.empty{color:var(--ink-3);text-align:center;padding:34px 12px;font-size:14px}table.data{width:100%;border-collapse:collapse;font-size:13px}table.data th,table.data td{text-align:left;padding:7px 9px;border-bottom:1px solid var(--rule-2)}table.data th{font:600 10.5px/1.2 IBM Plex Mono,monospace;letter-spacing:.06em;text-transform:uppercase;color:var(--ink-3)}table.data td.n{text-align:right;font-family:IBM Plex Mono,monospace;font-variant-numeric:tabular-nums}.tablewrap{overflow-x:auto}.login{min-height:100%;display:grid;place-items:center;padding:22px}.loginbox{width:min(370px,100%);background:var(--panel);border:1px solid var(--rule);border-radius:12px;padding:22px;box-shadow:var(--shadow)}.loginbox h1{font:700 21px/1.15 IBM Plex Sans Condensed,sans-serif;margin:0 0 4px}.loginbox p.sub{color:var(--ink-2);font-size:13.5px;margin:0 0 18px}.loginbox label{display:block;font:600 10.5px/1 IBM Plex Mono,monospace;letter-spacing:.09em;text-transform:uppercase;color:var(--ink-3);margin:0 0 6px}.loginbox input{width:100%;border:1px solid var(--rule);border-radius:8px;background:var(--paper);padding:9px 11px;margin-bottom:13px}.loginbox .btn{width:100%;padding:10px;text-align:center}.err{color:var(--st-issue);font-size:13px;margin:0 0 12px}.toast{position:fixed;left:50%;transform:translate(-50%);bottom:max(20px,env(safe-area-inset-bottom));z-index:60;background:var(--ink);color:var(--paper);padding:9px 16px;border-radius:9px;font-weight:500;font-size:13.5px;max-width:88vw;box-shadow:var(--shadow)}:root{--sg-1: #7a8ba0;--sg-2: #5b8fb0;--sg-3: #c98a12;--sg-4: #7a9c2e;--sg-5: #1c7a3e}@media (prefers-color-scheme: dark){:root:not([data-theme=light]){--sg-1: #8b9cae;--sg-2: #6ea6c8;--sg-3: #e0a52c;--sg-4: #a3c94a;--sg-5: #45b567}}:root[data-theme=dark]{--sg-1: #8b9cae;--sg-2: #6ea6c8;--sg-3: #e0a52c;--sg-4: #a3c94a;--sg-5: #45b567}.unitcard{border:1px solid var(--rule);border-radius:10px;padding:10px 11px;margin-bottom:9px;background:var(--paper)}.unithead{display:flex;align-items:baseline;gap:9px;margin-bottom:8px}.unithead .seq{font:600 12px/1 IBM Plex Sans Condensed,sans-serif;color:var(--ink)}.unithead .model{font-size:11px;color:var(--ink-3);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}ol.gates{list-style:none;margin:0;padding:0;display:flex;flex-direction:column;gap:3px}ol.gates .gate{display:flex;align-items:center;gap:9px;width:100%;text-align:left;border:1px solid var(--rule);border-radius:8px;padding:7px 9px;background:var(--panel);font:500 13px/1.2 IBM Plex Sans,sans-serif;color:var(--ink-2)}ol.gates .tick{width:20px;height:20px;flex:none;border-radius:5px;display:grid;place-items:center;background:var(--panel-2);color:var(--ink-3);font:600 11px/1 IBM Plex Mono,monospace}ol.gates li.done .gate{border-color:var(--st-done);color:var(--ink)}ol.gates li.done .tick{background:var(--st-done);color:#fff}ol.gates li.next .gate{border-color:var(--accent);box-shadow:inset 0 0 0 1px var(--accent);color:var(--ink)}ol.gates .glabel{flex:1}ol.gates .stamp{font-size:10.5px;color:var(--ink-3);white-space:nowrap}.unitfoot{display:flex;gap:7px;margin-top:9px}.unitfoot .serial{flex:1;min-width:0;border:1px solid var(--rule);border-radius:7px;background:var(--panel);padding:6px 9px;font-size:12.5px}.held{margin-top:8px;border-left:3px solid var(--st-issue);padding:6px 10px;font-size:12.5px;color:var(--ink-2);background:var(--panel);border-radius:0 7px 7px 0}.held strong{color:var(--st-issue);font-weight:600}.btn.wide{width:100%;text-align:center;padding:9px}.notice{border:1px solid var(--rule);border-radius:9px;padding:11px 12px;color:var(--ink-2);font-size:13.5px;background:var(--paper)}.funnel{display:flex;flex-direction:column;gap:9px;margin:4px 0 10px}.fbar{display:grid;grid-template-columns:minmax(120px,1.1fr) 3fr 46px;gap:10px;align-items:center}.flabel{display:flex;flex-direction:column;gap:1px;min-width:0}.fname{font:600 13px/1.2 IBM Plex Sans Condensed,sans-serif}.fnum{font-size:12px;color:var(--ink-2)}.fnum small{color:var(--ink-3)}.ftrack{height:14px;border-radius:7px;background:var(--panel-2);overflow:hidden}.ftrack i{display:block;height:100%;border-radius:7px;transition:width .25s ease}@media (prefers-reduced-motion: reduce){.ftrack i{transition:none}}.fpct{font-size:12px;color:var(--ink-2);text-align:right}.fine{font-size:12px;color:var(--ink-3)}tr.totalrow td{border-top:1px solid var(--ink);font-weight:600}@media (max-width: 560px){.fbar{grid-template-columns:1fr 2fr 42px}.fname{font-size:12px}}.overlay .g-0{fill:#9aa09b2e;stroke:#74796f}.overlay .g-1{fill:#7a8ba073;stroke:#52627a}.overlay .g-2{fill:#5b8fb080;stroke:#3d6d8c}.overlay .g-3{fill:#c98a1294;stroke:#8c5f08}.overlay .g-4{fill:#7a9c2e94;stroke:#5b7420}.overlay .g-5{fill:#1c7a3e94;stroke:#12602f}.overlay .held{stroke:var(--st-issue);stroke-dasharray:5 3}.card.danger-card{border-left:3px solid var(--st-issue)}.card.warn-card{border-left:3px solid var(--st-progress)}.tabs .badge.warn{background:var(--st-progress);color:#14100a}.verdict{margin-top:7px;border-radius:7px;padding:7px 10px;font-size:12.5px;font-weight:500;border:1px solid var(--rule)}.verdict.bad{color:var(--st-issue);border-color:var(--st-issue)}.verdict.warn{color:var(--st-progress);border-color:var(--st-progress)}.verdict.ok{color:var(--st-done);border-color:var(--st-done)}:root{--cell-idle: #e3e6e0;--hull: #ffffff;--hull-line: #b9bfb6;--room-line: rgba(0,0,0,.28)}@media (prefers-color-scheme: dark){:root:not([data-theme=light]){--cell-idle: #2f3532;--hull: #171a19;--hull-line: #454c47;--room-line: rgba(255,255,255,.22)}}:root[data-theme=dark]{--cell-idle: #2f3532;--hull: #171a19;--hull-line: #454c47;--room-line: rgba(255,255,255,.22)}.planwrap{flex:1;overflow:auto;position:relative;padding:14px 12px calc(20px + env(safe-area-inset-bottom));display:flex;flex-direction:column;align-items:flex-start}.plan-svg{display:block;flex:none;max-width:none!important;margin:0 auto}.planwrap .schemlegend{align-self:center}.plan-svg .hull{fill:var(--hull);stroke:var(--hull-line);stroke-width:2.5}.plan-svg .deckname{font:700 22px IBM Plex Sans Condensed,sans-serif;letter-spacing:.18em;fill:var(--ink-3)}.plan-svg .room-blank{fill:none;stroke:var(--hull-line);stroke-width:1.2;stroke-dasharray:4 3}.plan-svg .room{cursor:pointer}.plan-svg .room polygon{stroke:var(--room-line);stroke-width:1.6;stroke-linejoin:round}.plan-svg .room text{font-family:IBM Plex Mono,monospace;font-weight:600;font-variant-numeric:tabular-nums;fill:var(--ink-2);pointer-events:none}.plan-svg .room.lit text{fill:#fff}.plan-svg .room.held polygon{stroke:var(--st-issue);stroke-width:3.5}.plan-svg .room.dim{opacity:.12}.plan-svg .room:hover polygon{filter:brightness(1.08)}.plan-svg .room.flash polygon{animation:roomflash .8s ease 3}@keyframes roomflash{50%{stroke:var(--accent);stroke-width:7}}@media (prefers-reduced-motion: reduce){.plan-svg .room.flash polygon{animation:none;stroke:var(--accent);stroke-width:5}}.planwrap .zoomctl{position:fixed}.schemlegend{display:flex;gap:13px;flex-wrap:wrap;justify-content:center;padding:12px 0 4px;font-size:11.5px;color:var(--ink-2)}.schemlegend i{display:inline-block;width:11px;height:11px;border-radius:2px;margin-right:5px;vertical-align:-1px;box-shadow:inset 0 0 0 1px #00000024}.editor{display:flex;flex:1;min-height:0}.editor .edstage{position:relative;flex:1;min-width:0;overflow:hidden;background:var(--plate);touch-action:none}.editor .edstage canvas{display:block}.editor .edpanel{width:290px;flex:none;border-left:1px solid var(--rule);background:var(--panel);padding:12px;overflow:auto;font-size:13px}.editor .edpanel h3{font-size:11px;text-transform:uppercase;letter-spacing:.05em;color:var(--ink-2);margin:14px 0 6px}.editor .edpanel h3:first-child{margin-top:0}.editor .edpanel .row{display:flex;gap:6px;align-items:center;margin:4px 0;flex-wrap:wrap}.editor .edpanel .row label{width:70px;color:var(--ink-2)}.editor .edpanel .row input[type=text],.editor .edpanel .row select{flex:1;min-width:0;margin:0}.editor .edpanel .stats{display:grid;grid-template-columns:1fr auto;gap:3px 10px;font-variant-numeric:tabular-nums}.editor .edpanel .stats b{font-weight:600}.editor .edpanel .warn{color:var(--st-issue)}.editor .edpanel .legend{display:grid;grid-template-columns:1fr 1fr;gap:4px 8px}.editor .edpanel .legend span{display:flex;align-items:center;gap:6px}.editor .edpanel .legend i{width:13px;height:13px;border-radius:3px;border:1px solid rgba(0,0,0,.15);display:inline-block}.editor .edpanel .keys{color:var(--ink-2);font-size:12px;line-height:1.5}.editor .edpanel .unplaced{display:flex;flex-wrap:wrap;gap:4px}.editor .edpanel .unplaced button{font-size:11px;padding:2px 6px;border-radius:10px;border:1px solid var(--rule);background:var(--panel);color:var(--ink);cursor:pointer}.editor .edpanel .unplaced button:hover{border-color:var(--accent)}.editor .inline{position:absolute;z-index:5;font:700 14px Arial,Helvetica,sans-serif;text-align:center;padding:2px 4px;border:2px solid #ff9800;border-radius:4px;background:#fff;color:#222;outline:none;min-width:64px;width:auto;margin:0}.editor .inline.dup{border-color:#c0392b;background:#fff3f2}.editor .edtoast{position:absolute;left:12px;bottom:12px;background:var(--ink);color:var(--paper);padding:6px 10px;border-radius:6px;opacity:.92;pointer-events:none;font-size:13px}.toolbar .sliders{display:flex;gap:10px;align-items:center;color:var(--ink-2);font-size:12px}.toolbar .sliders input[type=range]{width:80px;margin:0 0 0 4px;vertical-align:middle}@media (max-width: 900px){.editor{flex-direction:column}.editor .edpanel{width:auto;max-height:38vh;border-left:0;border-top:1px solid var(--rule)}}.toolbar .hintline{color:var(--ink-2);font-size:12px}.frames{pointer-events:none}.frames .axis{stroke:var(--accent);opacity:.55}.frames .tick{stroke:var(--accent);fill:none;opacity:.75}.frames .tick.minor{opacity:.4}.frames text{fill:var(--accent);font-family:IBM Plex Mono,ui-monospace,monospace;font-weight:600;paint-order:stroke;stroke:var(--paper);stroke-linejoin:round}.plan-svg .frames text{stroke:#fff}.themebtn{flex:none;display:inline-flex;align-items:center;justify-content:center;width:32px;height:32px;padding:0;border:1px solid var(--rule);border-radius:8px;background:var(--panel);color:var(--ink-2);cursor:pointer}.themebtn:hover{color:var(--ink);border-color:var(--ink-3)}.themepick{display:flex;flex-wrap:wrap;gap:6px}.acct{position:relative}.acct summary{list-style:none;cursor:pointer;display:flex;align-items:center;gap:6px;padding:5px 10px;border:1px solid var(--rule);border-radius:8px;background:var(--panel);font-size:13px;max-width:260px}.acct summary::-webkit-details-marker{display:none}.acct .who{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.acct .rolechip{font-size:11px;padding:1px 6px;border-radius:10px;background:var(--accent);color:var(--accent-ink);flex:none}.acct .menu{position:absolute;right:0;top:calc(100% + 6px);background:var(--panel);border:1px solid var(--rule);border-radius:10px;box-shadow:var(--shadow);padding:8px;display:flex;flex-direction:column;gap:6px;min-width:190px;z-index:30}.ro .sheet button,.ro .sheet input,.ro .sheet textarea,.ro .sheet select{pointer-events:none;opacity:.5}.ro .sheet .rowbtns>.btn:first-child{pointer-events:auto;opacity:1}.ro .sheet:before{content:"Read-only: your role is Viewer. Ask an admin for Technician access to update cabins.";display:block;font-size:12px;color:var(--st-issue);margin-bottom:8px}.team{flex:1;overflow:auto;padding:14px;display:grid;gap:14px;max-width:980px}.team .card h2{font-size:17px;margin:0 0 6px}.team .muted{color:var(--ink-2);font-size:13px}.team .err{color:var(--st-issue)}.tbl{width:100%;border-collapse:collapse;font-size:13px}.tbl th{text-align:left;font-weight:600;color:var(--ink-2);font-size:12px;padding:6px 8px;border-bottom:1px solid var(--rule)}.tbl td{padding:6px 8px;border-bottom:1px solid var(--rule);vertical-align:middle}.tbl select{margin:0;padding:4px 6px}.tbl .actions{display:flex;gap:6px;justify-content:flex-end}.newuser{display:grid;grid-template-columns:1fr 1fr;gap:10px 14px;align-items:end}.newuser label{display:flex;flex-direction:column;gap:4px;font-size:12px;color:var(--ink-2)}.newuser input,.newuser select{margin:0}.newuser p,.newuser>.btn{grid-column:1 / 3}.pwrow{display:flex;gap:6px;align-items:center}.pwrow input{flex:1;margin:0;min-width:0}@media (max-width: 700px){.newuser{grid-template-columns:1fr}.newuser p,.newuser>.btn{grid-column:1}.tbl .actions{flex-direction:column}}.profile{flex:1;overflow:auto;padding:14px;display:grid;gap:14px;max-width:760px;align-content:start}.profile .card h2,.team .card h2{font-size:17px;margin:0 0 6px}.profile .muted{color:var(--ink-2);font-size:13px}.profile .err{color:var(--st-issue)}.idrow{display:flex;gap:14px;align-items:center}.idrow .big{font:600 18px/1.2 IBM Plex Sans Condensed,sans-serif}.idrow .rolechip{font-size:11px;padding:1px 6px;border-radius:10px;background:var(--accent);color:var(--accent-ink)}.avatar{width:52px;height:52px;border-radius:50%;background:var(--accent);color:var(--accent-ink);display:grid;place-items:center;font:700 19px/1 IBM Plex Sans Condensed,sans-serif;flex:none}.kv{display:grid;grid-template-columns:max-content 1fr;gap:6px 14px;font-size:13px;margin:0}.kv dt{color:var(--ink-3);font:600 10.5px/1.7 IBM Plex Mono,monospace;letter-spacing:.08em;text-transform:uppercase}.kv dd{margin:0}.pwform{display:grid;gap:10px;max-width:360px}.pwform label{display:flex;flex-direction:column;gap:4px;font-size:12px;color:var(--ink-2)}.pwform label.check{flex-direction:row;align-items:center;gap:8px}.pwform input{margin:0}.matrix{width:100%;border-collapse:collapse;font-size:13px}.matrix th,.matrix td{padding:6px 8px;border-bottom:1px solid var(--rule);text-align:center}.matrix th{font-weight:600;color:var(--ink-2);font-size:12px}.matrix td:first-child,.matrix th:first-child{text-align:left}.matrix .yes{color:var(--accent);font-weight:700}.matrix .no{color:var(--ink-3)}.mywork{display:flex;gap:8px;flex-wrap:wrap}.mywork .stat{border:1px solid var(--rule);border-radius:8px;padding:6px 10px;font-size:13px;display:flex;gap:6px;align-items:center}.mywork .stat b{font-size:16px}.mywork .sw{width:10px;height:10px;border-radius:3px;display:inline-block}.recent{list-style:none;margin:10px 0 0;padding:0;display:grid;gap:4px;font-size:13px}.recent li{display:flex;gap:10px;align-items:baseline}.recent .no{font-weight:600;min-width:90px}.recent .t{color:var(--ink-3);margin-left:auto;font-size:12px}.tbl .namecell{display:flex;gap:6px;align-items:center}.tbl .namecell input{margin:0;padding:4px 6px;width:160px}.tbl .rename{border:0;background:none;color:var(--ink-3);cursor:pointer;padding:0 4px;font-size:12px}.tbl .rename:hover{color:var(--accent)}.kpis{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:10px;margin-bottom:10px}@media (max-width: 760px){.kpis{grid-template-columns:repeat(2,minmax(0,1fr))}}.kpi{display:flex;flex-direction:column;align-items:flex-start;gap:4px;text-align:left;background:var(--panel);border:1px solid var(--rule);border-radius:10px;padding:12px 13px;box-shadow:var(--shadow);min-width:0}.kpi.on{border-color:var(--accent);box-shadow:inset 0 0 0 1px var(--accent),var(--shadow)}.kpi .klabel{font:600 12px/1.2 IBM Plex Sans Condensed,sans-serif;color:var(--ink-2);letter-spacing:.02em}.kpi .big{font:700 28px/1 IBM Plex Sans Condensed,sans-serif;font-variant-numeric:tabular-nums}.kpi .kbar{display:block;width:100%;height:6px;border-radius:3px;background:var(--panel-2);overflow:hidden;margin:3px 0 1px}.kpi .kbar i{display:block;height:100%;background:var(--st-done);border-radius:3px}.kpi .ksub{font-size:12px;color:var(--ink-2)}.kpi .ksub b{color:var(--ink)}.kpi .ksub2{font-size:11.5px;color:var(--ink-3);font-family:IBM Plex Mono,monospace}.kpi .held-n{color:var(--st-issue);font-weight:600}table.data td .sw,table.data th .sw{display:inline-block;width:9px;height:9px;border-radius:2px;vertical-align:middle;margin-right:2px}table.data .barcol{width:26%;min-width:90px}.stagebar{display:block;height:9px;border-radius:5px;background:var(--panel-2);overflow:hidden}.stagebar i{display:block;height:100%;border-radius:5px}tr.heldrow td{color:var(--st-issue)}table.data td .of{color:var(--ink-3);font-size:11px}.verdict-pill{font:600 10.5px/1 IBM Plex Mono,monospace;letter-spacing:.06em;padding:3px 7px;border-radius:9px;border:1px solid}.verdict-pill.ok{color:var(--st-done);border-color:var(--st-done)}.verdict-pill.short{color:var(--st-issue);border-color:var(--st-issue);background:#b3372c14}.pillrow{display:flex;flex-wrap:wrap;gap:6px;margin:6px 0 4px}.pill.warnpill{color:var(--st-progress);border-color:var(--st-progress)}h4.subhead{font:600 12.5px/1.2 IBM Plex Sans Condensed,sans-serif;color:var(--ink-2);margin:14px 0 6px;letter-spacing:.02em;text-transform:uppercase}.rowitem .no.venue{width:auto;max-width:42%;font:600 13px/1.2 IBM Plex Sans Condensed,sans-serif;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.sheet h2.venue{font-family:IBM Plex Sans Condensed,sans-serif;font-size:20px}.unitmeta{display:flex;flex-wrap:wrap;gap:4px 12px;font-size:11.5px;color:var(--ink-3);font-family:IBM Plex Mono,monospace;margin:-2px 0 6px}.btn.stays{color:var(--st-done);border-color:var(--st-done)}.buildbadge{position:fixed;right:8px;bottom:max(8px,env(safe-area-inset-bottom));z-index:40;display:flex;align-items:center;gap:6px;padding:4px 9px;border-radius:999px;border:1px solid var(--rule);background:color-mix(in srgb,var(--panel) 85%,transparent);backdrop-filter:blur(6px);font-size:11px;line-height:1;color:var(--ink);opacity:.75;user-select:none;pointer-events:none}.buildbadge:hover{opacity:1}.buildbadge i{width:6px;height:6px;border-radius:50%;background:var(--st-pending)}.buildbadge.production i{background:var(--st-done)}.buildbadge.preview i{background:var(--st-progress)}.buildbadge b{font-weight:600}.buildbadge span{font-family:IBM Plex Mono,ui-monospace,monospace;color:var(--ink-2)}.planwrap .zoomctl,.viewport .zoomctl{bottom:max(44px,calc(env(safe-area-inset-bottom) + 30px))}.toolbar .tabpick{margin:0}.infocard .infohead{display:flex;align-items:center;gap:10px;flex-wrap:wrap;margin-bottom:8px}.infocard .infohead h3{margin:0}.infogrid{max-height:calc(100vh - 250px);overflow:auto;border:1px solid var(--rule);border-radius:8px}table.grid{width:max-content;min-width:100%}table.grid td{white-space:pre-wrap;max-width:420px;vertical-align:top;font-size:12.5px;padding:5px 8px;border-right:1px solid var(--rule-2)}table.grid td:last-child{border-right:none}table.grid td.rn{color:var(--ink-3);font-family:IBM Plex Mono,monospace;font-size:11px;text-align:right;background:var(--panel-2);position:sticky;left:0;z-index:1}table.grid tr.hdr td{position:sticky;top:0;background:var(--panel-2);font-weight:600;z-index:2}table.grid tr.hdr td.rn{z-index:3}
