:root{--paper: #f4f1ea;--panel: #fffdf8;--panel-2: #ebe6da;--plate: #fffdf8;--ink: #1b1a17;--ink-2: #5c5850;--ink-3: #8d887c;--rule: #e2ddd0;--rule-2: #ece8dd;--accent: #0f4c81;--accent-ink: #ffffff;--st-pending: #c4bfb2;--st-progress: #d29a2a;--st-done: #1f7a45;--st-issue: #b5442f;--st-notv: #d8d3c6;--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(27, 26, 23, .06), 0 10px 28px rgba(27, 26, 23, .1);--plan-invert: 0;color-scheme:light}@media (prefers-color-scheme: dark){:root:not([data-theme=light]){--paper: #14140f;--panel: #1d1d17;--panel-2: #2a2921;--plate: #0e0e0a;--ink: #f1ede3;--ink-2: #b5b0a3;--ink-3: #948e80;--rule: #2e2d25;--rule-2: #26251e;--accent: #6aa8dc;--accent-ink: #0b1a26;--st-pending: #6e6a5e;--st-progress: #e0a52c;--st-done: #3fae6a;--st-issue: #e0664f;--st-notv: #514e45;--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;color-scheme:dark}}:root[data-theme=dark]{--paper: #14140f;--panel: #1d1d17;--panel-2: #2a2921;--plate: #0e0e0a;--ink: #f1ede3;--ink-2: #b5b0a3;--ink-3: #948e80;--rule: #2e2d25;--rule-2: #26251e;--accent: #6aa8dc;--accent-ink: #0b1a26;--st-pending: #6e6a5e;--st-progress: #e0a52c;--st-done: #3fae6a;--st-issue: #e0664f;--st-notv: #514e45;--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;color-scheme:dark}*,*: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 Barlow,system-ui,-apple-system,sans-serif;font-variant-numeric:tabular-nums;-webkit-text-size-adjust:100%;overscroll-behavior:none}button,input,select,textarea{font:inherit;color:inherit}button{background:none;border:none;cursor:pointer}select{background:var(--panel);color:var(--ink);border:1px solid var(--rule);border-radius:3px;padding:4px 6px}select option{background:var(--panel);color:var(--ink)}:focus-visible{outline:2px solid var(--accent);outline-offset:2px}.mono{font-family:JetBrains Mono,ui-monospace,monospace;font-variant-numeric:tabular-nums}.cond{font-family:Barlow 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:0 14px;padding-top:env(safe-area-inset-top);overflow:hidden}.trow{display:flex;align-items:center;gap:14px;flex-wrap:wrap;padding:9px 0}.brand{font:700 20px/1 Barlow Condensed,sans-serif;letter-spacing:.04em;text-transform:uppercase;white-space:nowrap;min-width:0;flex:1 1 auto;overflow:hidden;text-overflow:ellipsis}.brand span{color:var(--ink-3);font-weight:500}.grow{flex:1}.tabs{display:flex;gap:4px;min-width:0;overflow-x:auto;scrollbar-width:none}.tabs::-webkit-scrollbar{display:none}.tabs button{display:inline-flex;align-items:center;gap:6px;padding:7px 12px;font:600 13px/1 Barlow Condensed,sans-serif;letter-spacing:.06em;text-transform:uppercase;color:var(--ink-2);border-radius:3px;white-space:nowrap}.tabs button:hover{color:var(--ink);background:var(--panel-2)}.tabs button.on{background:var(--ink);color:var(--paper)}.tabs .badge{display:inline-block;background:var(--st-issue);color:#fff;border-radius:2px;padding:2px 5px;font-size:11px;font-weight:600;letter-spacing:0}@media (max-width: 900px){.trow{gap:10px}.brand{font-size:17px}.tabs{order:10;flex-basis:100%}.acct summary{max-width:150px}}.deckstrip{display:flex;gap:5px;overflow-x:auto;padding:0 0 9px;scrollbar-width:thin}.deckchip{flex:none;border:1px solid var(--rule);border-radius:3px;padding:4px 10px;font:600 12.5px/1.25 Barlow Condensed,sans-serif;letter-spacing:.03em;color:var(--ink-2);background:var(--panel);display:flex;gap:6px;align-items:baseline;white-space:nowrap}.deckchip .dp{font-variant-numeric:tabular-nums;font-size:10.5px;color:var(--ink-3)}.deckchip.on{background:var(--ink);border-color:var(--ink);color:var(--paper)}.deckchip.on .dp{color:var(--paper);opacity:.75}.syncbadge{display:inline-flex;align-items:center;gap:7px;padding:4px 0;font:500 12.5px/1 Barlow,sans-serif;color:var(--ink-2);white-space:nowrap;cursor:pointer}.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)) saturate(var(--plan-sat, 1))}.plan.tile{position:absolute;top:0}.planlayer{position:absolute;left:0;top:0}.overlay.hullfill,.overlay.hullline{pointer-events:none}.overlay.hullfill polygon{fill:var(--hull);stroke:none;cursor:default}.overlay.hullline polygon{fill:none;stroke:var(--hull-line);stroke-linejoin:round;cursor:default}.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 JetBrains 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:3px;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:3px;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:3px;padding:4px 10px;font:500 12.5px/1.3 Barlow,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:JetBrains 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:3px;overflow:hidden}.seg button{padding:5px 12px;font:600 12.5px/1.3 Barlow 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:3px;padding:6px 12px;font:600 12.5px/1.3 Barlow,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:3px;background:var(--panel);padding:4px 9px}.search input{border:none;background:none;outline:none;width:96px;font-family:JetBrains 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:8px 8px 0 0;box-shadow:var(--shadow);padding:14px 15px calc(16px + env(safe-area-inset-bottom))}.sheet h2{font:700 21px/1.1 JetBrains 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:3px;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:3px;padding:9px 10px;font:600 13px/1.2 Barlow,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 JetBrains 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:3px;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 JetBrains Mono,monospace;color:var(--ink-3);width:22px;flex:none}.unitrow .model{font-family:JetBrains 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:3px;background:var(--paper);padding:4px 6px;font-size:12px}.unitrow input{width:96px;border:1px solid var(--rule);border-radius:3px;background:var(--paper);padding:4px 7px;font-family:JetBrains 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:0;padding:13px 14px;margin-bottom:10px}.card h3{font:700 16px/1.2 Barlow Condensed,sans-serif;text-transform:uppercase;letter-spacing:.04em;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:0;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 JetBrains Mono,monospace;width:58px;flex:none}.rowitem .dk{font-size:11.5px;color:var(--ink-3);width:46px;flex:none;font-family:JetBrains 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 JetBrains Mono,monospace;letter-spacing:.06em;text-transform:uppercase;color:var(--ink-3)}table.data td.n{text-align:right;font-family:JetBrains 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:3px;padding:22px;box-shadow:var(--shadow)}.loginbox h1{font:700 21px/1.15 Barlow 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 JetBrains 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:3px;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:3px;font-weight:500;font-size:13.5px;max-width:88vw;box-shadow:var(--shadow)}:root{--sg-1: #8fa3b5;--sg-2: #5c8bb0;--sg-3: #d29a2a;--sg-4: #8aa23a;--sg-5: #1f7a45}@media (prefers-color-scheme: dark){:root:not([data-theme=light]){--sg-1: #6e8296;--sg-2: #6ea3cc;--sg-3: #e0a52c;--sg-4: #a3c94a;--sg-5: #3fae6a}}:root[data-theme=dark]{--sg-1: #6e8296;--sg-2: #6ea3cc;--sg-3: #e0a52c;--sg-4: #a3c94a;--sg-5: #3fae6a}.unitcard{border:1px solid var(--rule);border-radius:0;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 Barlow 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:3px;padding:7px 9px;background:var(--panel);font:500 13px/1.2 Barlow,sans-serif;color:var(--ink-2)}ol.gates .tick{width:20px;height:20px;flex:none;border-radius:3px;display:grid;place-items:center;background:var(--panel-2);color:var(--ink-3);font:600 11px/1 JetBrains 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:3px;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}.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:0;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 Barlow Condensed,sans-serif}.fnum{font-size:12px;color:var(--ink-2)}.fnum small{color:var(--ink-3)}.ftrack{height:14px;border-radius:3px;background:var(--panel-2);overflow:hidden}.ftrack i{display:block;height:100%;border-radius:3px;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:3px;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: #e6e1d4;--hull: #fffdf8;--hull-line: #bdb7a8;--room-line: rgba(0,0,0,.28)}@media (prefers-color-scheme: dark){:root:not([data-theme=light]){--cell-idle: #2a2921;--hull: #1a1a14;--hull-line: #4a4840;--room-line: rgba(255,255,255,.22)}}:root[data-theme=dark]{--cell-idle: #2a2921;--hull: #1a1a14;--hull-line: #4a4840;--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 Barlow 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:JetBrains 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:3px;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:3px;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:JetBrains 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:3px;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:8px;padding:5px 0;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:600 11px/1 Barlow Condensed,sans-serif;letter-spacing:.06em;text-transform:uppercase;padding:3px 6px;border:1px solid var(--ink);border-radius:2px;color:var(--ink);flex:none}.acct .menu{position:absolute;right:0;top:calc(100% + 6px);background:var(--panel);border:1px solid var(--rule);border-radius:3px;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 Barlow Condensed,sans-serif}.idrow .rolechip{font-size:11px;padding:1px 6px;border-radius:3px;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 Barlow 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 JetBrains 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:3px;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)}.board{padding:0 0 calc(20px + env(safe-area-inset-bottom))}.board .headline{padding:26px 28px 8px;display:grid;grid-template-columns:auto minmax(0,1fr);gap:40px;align-items:end}.eyebrow{font:600 12px/1 Barlow Condensed,sans-serif;letter-spacing:.14em;text-transform:uppercase;color:var(--ink-3)}.eyebrow.row{display:flex;justify-content:space-between;gap:10px;margin-bottom:8px}.bignum{font:700 132px/1 Barlow Condensed,sans-serif;letter-spacing:-.03em;font-variant-numeric:tabular-nums}.bignum span{font-size:64px;color:var(--ink-3)}.herosub{font-size:15px;color:var(--ink-2);margin-top:-4px}.herosub b{color:var(--ink);font-weight:600}.heldtext{color:var(--st-issue);font-weight:600}.donetext{color:var(--st-done);font-weight:600}.dimtext{color:var(--ink-3);font-weight:400}.whereall{padding-bottom:6px;min-width:0}.stackbar{display:flex;height:12px;gap:1px}.stackbar i{display:block;height:100%}.stackbar.tall{height:34px;gap:2px;padding:2px;border:1px solid var(--ink);background:var(--panel)}.legend{display:flex;gap:8px 18px;margin-top:10px;flex-wrap:wrap}.legend span{display:flex;align-items:center;gap:6px;font-size:12.5px;color:var(--ink-2)}.legend i{width:10px;height:10px;flex:none}.legend b{font-weight:600;color:var(--ink);font-variant-numeric:tabular-nums}.trackers{padding:20px 28px;display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:14px}.tcard{display:flex;flex-direction:column;gap:10px;text-align:left;background:var(--panel);border:1px solid var(--rule);border-top:3px solid var(--ink);padding:16px 18px 14px;min-width:0;color:inherit}.tcard:hover{border-color:var(--ink-3);border-top-color:var(--ink)}.tcard.on{border-color:var(--accent);border-top-color:var(--accent);box-shadow:inset 0 0 0 1px var(--accent)}.tcard .thead{display:flex;justify-content:space-between;align-items:baseline;gap:8px}.tcard .ttitle{font:700 18px/1 Barlow Condensed,sans-serif;text-transform:uppercase;letter-spacing:.03em}.tcard .tsheet{font:600 11px/1 Barlow Condensed,sans-serif;letter-spacing:.1em;text-transform:uppercase;color:var(--ink-3);white-space:nowrap}.tcard .tnum{display:flex;align-items:baseline;gap:10px}.tcard .tpct{font:700 52px/1 Barlow Condensed,sans-serif;letter-spacing:-.02em;font-variant-numeric:tabular-nums}.tcard .tof{font-size:13px;color:var(--ink-2)}.tcard .tfoot{display:flex;justify-content:space-between;gap:8px;font-size:12.5px;color:var(--ink-2)}.tcard .tlink{color:var(--accent);font-weight:600;white-space:nowrap}.boardgrid{padding:0 28px 28px;display:grid;grid-template-columns:7fr 5fr;gap:14px;align-items:start}.boardgrid .stack{display:flex;flex-direction:column;gap:8px;min-width:0}.fold{background:var(--panel);border:1px solid var(--rule)}.fold.open{border-color:var(--ink)}.fhead{width:100%;display:flex;justify-content:space-between;align-items:center;gap:12px;padding:14px 20px;text-align:left;color:inherit}.ftitle{font:700 16px/1.15 Barlow Condensed,sans-serif;text-transform:uppercase;letter-spacing:.04em}.ftitle .sub{margin-left:8px}.ftog{font:600 11px/1 Barlow Condensed,sans-serif;letter-spacing:.1em;text-transform:uppercase;color:var(--accent);white-space:nowrap}.fbody{padding:0 20px 18px}.fbody .lead{margin:0 0 10px;font-size:13.5px;color:var(--ink-2);max-width:78ch}.fbody .fine,.deckcard .fine{margin:10px 0 0}.gridwrap{overflow-x:auto}.gtable{display:flex;flex-direction:column;font-size:14px;font-variant-numeric:tabular-nums}.gtable .gh,.gtable .gr,.gtable .gt{display:grid;gap:0 14px;align-items:center}.gtable .gh{font:600 11px/1 Barlow Condensed,sans-serif;letter-spacing:.1em;text-transform:uppercase;color:var(--ink-3);padding:0 0 8px;border-bottom:1px solid var(--ink)}.gtable .gr{padding:8px 0;border-bottom:1px solid var(--rule)}.gtable .gt{padding:8px 0 0;font-weight:600}.gtable .n{text-align:right}.gtable .b{font-weight:600}.gtable .sec{color:var(--ink-2)}.gtable .zero{color:var(--ink-3)}.gtable .hi{color:var(--ink);font-weight:600}.gtable .gh .hi{color:var(--ink)}.gtable .heldrow{color:var(--st-issue)}.gtable .stname{display:flex;align-items:center;gap:10px;min-width:0}.gtable .stname i{width:10px;height:10px;flex:none}.gtable .of{color:var(--ink-3);font-size:11px;font-weight:400}.gbar{display:block;height:10px;background:var(--panel-2)}.gbar i{display:block;height:100%}.gtable.stages-all>*{grid-template-columns:minmax(200px,1fr) repeat(4,64px) minmax(90px,150px);min-width:600px}.gtable.holds>*{grid-template-columns:1fr 50px minmax(90px,200px)}.gtable.sizes>*{grid-template-columns:56px repeat(6,minmax(58px,1fr)) minmax(96px,1.2fr) 64px;min-width:700px}.gtable.sizes .verdict-pill{justify-self:end}.gtable.sources>*{grid-template-columns:1.2fr 1fr 1fr 1.4fr 60px 90px;min-width:560px}.gtable.gates>*{grid-template-columns:minmax(110px,1fr) 110px 56px minmax(90px,2fr)}.gtable.means>*{grid-template-columns:minmax(180px,220px) 1fr;align-items:start}.gtable.means .inapp{color:var(--ink-3)}.deckcard{background:var(--panel);border:1px solid var(--rule);padding:18px 20px;min-width:0}.deckcard .dhead{display:flex;justify-content:space-between;align-items:baseline;gap:8px;margin-bottom:12px;font-size:12.5px}.decks{display:flex;flex-direction:column;gap:5px}.deckrow{display:grid;grid-template-columns:28px 1fr 44px;gap:10px;align-items:center}.deckrow .dno{font:700 13px/1 Barlow Condensed,sans-serif;color:var(--ink-3);text-align:right}.deckrow .dbar{display:block;height:13px;background:var(--panel-2)}.deckrow .dbar i{display:block;height:100%;background:var(--st-done)}.deckrow .dpct{font-size:12px;color:var(--ink-2);font-variant-numeric:tabular-nums;text-align:right}.dtotal{display:grid;grid-template-columns:1fr auto 44px;gap:10px;margin-top:10px;padding-top:8px;border-top:1px solid var(--ink);font-weight:600;font-size:13px;font-variant-numeric:tabular-nums}.dtotal .n{text-align:right}.dtotal .of{color:var(--ink-3);font-size:11px;font-weight:400}@media (max-width: 1000px){.boardgrid{grid-template-columns:1fr}.bignum{font-size:104px}.bignum span{font-size:52px}}@media (max-width: 760px){.board .headline{grid-template-columns:1fr;gap:18px;padding:18px 14px 6px}.bignum{font-size:84px}.bignum span{font-size:42px}.trackers{grid-template-columns:1fr;padding:14px;gap:10px}.tcard .tpct{font-size:44px}.boardgrid{padding:0 14px 20px}.fhead{padding:12px 14px}.fbody{padding:0 14px 14px}.deckcard{padding:14px}.legend{gap:8px 14px}}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:3px;background:var(--panel-2);overflow:hidden}.stagebar i{display:block;height:100%;border-radius:3px}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 JetBrains Mono,monospace;letter-spacing:.06em;padding:3px 7px;border-radius:3px;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 Barlow 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 Barlow Condensed,sans-serif;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.sheet h2.venue{font-family:Barlow 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:JetBrains 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:JetBrains 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)}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:JetBrains 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}.alldecks{flex:1;overflow:auto;padding:10px 12px 44px}.deckpage{margin:0 auto 16px;max-width:1400px}.deckpage header{display:flex;align-items:baseline;gap:10px;padding:0 2px 5px}.decklink{background:none;border:0;padding:0;cursor:pointer;color:var(--ink);font:600 15px/1.2 IBM Plex Sans Condensed,sans-serif;letter-spacing:.02em}.decklink:hover{color:var(--accent);text-decoration:underline}.deckpage .tally{color:var(--ink-3);font-size:12px}.deckpage .pct{margin-left:auto;font:600 13px IBM Plex Mono,monospace;color:var(--ink-2)}.deckmini{display:block;width:100%;height:auto;background:var(--panel);border:1px solid var(--rule);border-radius:6px}.deckmini .hull{fill:var(--hull);stroke:var(--hull-line);stroke-width:3}.deckmini .room-blank{fill:none;stroke:var(--hull-line);stroke-width:1.4}.deckmini .room{stroke:var(--room-line);stroke-width:1.4;cursor:pointer}.deckmini .room.dim{opacity:.12}.deckmini .room:hover{filter:brightness(1.12)}.pubsets{border-top:1px solid var(--rule);padding:10px 14px 16px;max-height:34vh;overflow:auto}.pubsets h4{margin:0 0 8px;font:600 13px IBM Plex Sans Condensed,sans-serif;letter-spacing:.04em;text-transform:uppercase;color:var(--ink-2)}.pubsets h4 .n{margin-left:8px;font:600 12px IBM Plex Mono,monospace;color:var(--ink-3)}.pubsets ul{list-style:none;margin:0 0 8px;padding:0;display:grid;gap:4px;grid-template-columns:repeat(auto-fill,minmax(300px,1fr))}.pubsets li button{display:flex;align-items:center;gap:8px;width:100%;text-align:left;cursor:pointer;background:var(--panel);border:1px solid var(--rule);border-radius:5px;padding:6px 8px;color:var(--ink)}.pubsets li button:hover{border-color:var(--accent)}.pubsets .nm{flex:1;font-size:13px}.pubsets .tvs,.pubsets .st{font:600 11px IBM Plex Mono,monospace;color:var(--ink-3)}.pubsets .muted{color:var(--ink-3);font-size:12px;margin:0}
