:root{--paper:#f4f1ea;--card:#fff;--sunk:#ebe7de;--ink:#16212b;--muted:#5a6570;--line:#dcd6ca;--navy:#0f2f4a;--navy-2:#1c4a70;--act:#c4480f;--act-press:#a63b0a;--act-soft:#fbeadf;--ok:#1d7a4c;--warn:#8a5a00;--bad:#b8281f;--s-cabling:#8a6410;--s-termination:#6f45b5;--s-installation:#1f63b8;--s-test:#0c7a86;--s-complete:#1d7a4c;--s-issue:#b8281f;--s-cancelled:#7b8591;--radius:14px;--control:10px;--shadow:0 1px 2px #16212b0f, 0 6px 18px #16212b0f;--top:56px;--tabs:62px}*{box-sizing:border-box}html,body{height:100%;margin:0}html.no-scroll,html.no-scroll body{overflow:hidden}body{background:var(--paper);color:var(--ink);font-variant-numeric:tabular-nums;-moz-text-size-adjust:100%;text-size-adjust:100%;-webkit-tap-highlight-color:transparent;font:16px/1.5 Noto Sans TC,PingFang TC,Microsoft JhengHei,system-ui,-apple-system,sans-serif}h1{letter-spacing:.01em;margin:0 0 14px;font-size:1.45rem;font-weight:800;line-height:1.25}h2{margin:26px 0 10px;font-size:1.08rem;font-weight:800}h3{margin:12px 0 6px;font-size:1rem;font-weight:700}p{margin:6px 0}a{color:var(--navy-2);text-underline-offset:3px}.icon{vertical-align:-.2em;flex:none}.muted{color:var(--muted);font-size:.9rem}.error-text{color:var(--bad);font-size:.92rem;font-weight:600}.ok-text{color:var(--ok);font-weight:600}.empty{color:var(--muted);text-align:center;padding:28px 12px}.splash{height:100vh;color:var(--muted);place-items:center;display:grid}:focus-visible{outline-offset:2px;outline:3px solid #f2a33a}input,select,textarea,button{font:inherit}input,select,textarea{border:1.5px solid var(--line);border-radius:var(--control);width:100%;color:var(--ink);background:#fff;min-height:46px;padding:10px 12px}input:focus,select:focus,textarea:focus{border-color:var(--navy-2);outline:none;box-shadow:0 0 0 3px #1c4a702e}input[type=checkbox]{vertical-align:middle;width:22px;height:22px;min-height:0;accent-color:var(--navy);padding:0}input[type=file]{padding:8px}textarea{resize:vertical;min-height:76px}label{color:var(--muted);margin:12px 0 4px;font-size:.88rem;font-weight:600;display:block}label.check{color:var(--ink);align-items:center;gap:8px;font-size:1rem;font-weight:400;display:flex}button,a.button{border-radius:var(--control);border:1.5px solid var(--line);min-height:46px;color:var(--ink);cursor:pointer;touch-action:manipulation;background:#fff;justify-content:center;align-items:center;gap:7px;padding:8px 16px;font-weight:600;text-decoration:none;display:inline-flex}button:active:not(:disabled),a.button:active{background:var(--sunk);transform:translateY(1px)}button:disabled{opacity:.45;cursor:default}button.primary{background:var(--act);border-color:var(--act);color:#fff;font-weight:700}button.primary:active:not(:disabled){background:var(--act-press)}button.danger{color:var(--bad);border-color:#e3b4ae}button.ghost{color:var(--navy-2);background:0 0;border-color:#0000}button.big{width:100%;min-height:58px;font-size:1.1rem}button.small{min-height:38px;padding:4px 12px;font-size:.9rem}button.square{flex:none;width:46px;padding:0}.row{flex-wrap:wrap;align-items:center;gap:8px;display:flex}.row.tight{gap:6px;margin-top:4px}.row>.grow{flex:160px;min-width:0}.grow{flex:1;min-width:0}.spread{justify-content:space-between;align-items:center;gap:10px;display:flex}.app{min-height:100vh;display:flex}.nav{background:var(--navy);color:#fff;flex-direction:column;flex:none;width:236px;height:100vh;padding:14px 10px;display:flex;position:sticky;top:0;overflow-y:auto}.brand{letter-spacing:.04em;align-items:center;gap:10px;padding:6px 12px 18px;font-size:1.25rem;font-weight:800;display:flex}.brand-mark{background:var(--act);border-radius:8px;place-items:center;width:30px;height:30px;display:grid}.nav-item{color:#c9d8e6;border-radius:10px;align-items:center;gap:12px;min-height:46px;padding:11px 12px;font-weight:500;text-decoration:none;display:flex}.nav-item:hover{background:#ffffff12}.nav-item.active{color:var(--navy);background:#fff;font-weight:700}.nav-foot{border-top:1px solid #ffffff29;margin-top:auto;padding:14px 12px 4px}.nav-foot .muted{color:#a9bdd0}.nav-foot .ghost{color:#fff;padding-left:0}.badge{background:var(--bad);color:#fff;text-align:center;border-radius:999px;min-width:24px;margin-left:auto;padding:1px 8px;font-size:.8rem;font-weight:700}.main{flex-direction:column;flex:1;min-width:0;display:flex}.topbar{height:var(--top);background:var(--card);border-bottom:1px solid var(--line);z-index:20;align-items:center;gap:10px;padding:0 16px;display:flex;position:sticky;top:0}.topbar select{flex:1;width:auto;min-width:0;font-weight:700}.site-name{text-overflow:ellipsis;white-space:nowrap;flex:1;min-width:0;font-size:1.05rem;font-weight:800;overflow:hidden}.content{width:100%;max-width:1180px;padding:20px}.banner{padding:10px 16px;font-size:.95rem}.banner.wait{color:#5c4300;background:#fdf1cf}.banner.warn{color:#7a1c15;background:#fbe3e0}.banner.inline{border-radius:12px;align-items:center;gap:8px;margin-bottom:10px;padding:10px 12px;display:flex}.banner.inline>span{flex:1;min-width:0}.banner.inline a{white-space:nowrap;color:inherit;font-weight:700}.hint{color:#1e3a52;background:#e8eef3;border-radius:12px;align-items:center;gap:8px;margin-bottom:10px;padding:8px 6px 8px 12px;font-size:.93rem;display:flex}.hint>div{flex:1;min-width:0}.sync-pill{white-space:nowrap;min-height:36px;color:var(--ok);background:#e6f2ec;border-width:0;border-radius:999px;padding:4px 12px 4px 10px;font-size:.88rem;font-weight:700}.sync-pill:before{content:"";background:currentColor;border-radius:50%;width:8px;height:8px}.sync-pill.busy{color:var(--navy-2);background:#e3edf6}.sync-pill.wait{color:#6b4a00;background:#fdf1cf}.sync-pill.bad{background:var(--bad);color:#fff}.sheet{right:12px;top:calc(var(--top) + 6px);background:var(--card);border:1px solid var(--line);z-index:70;border-radius:16px;width:min(440px,100vw - 24px);max-height:76vh;padding:14px;position:fixed;overflow-y:auto;box-shadow:0 18px 44px #0f1e2d47}.sheet-head{justify-content:space-between;align-items:center;display:flex}.queue-item{border-top:1px solid var(--line);padding:10px 0}.card{background:var(--card);border:1px solid var(--line);border-radius:var(--radius);box-shadow:var(--shadow);margin-bottom:12px;padding:16px}.grid{grid-template-columns:repeat(auto-fit,minmax(150px,1fr));gap:10px;display:grid}.stat{background:var(--card);border:1px solid var(--line);border-radius:var(--radius);padding:12px 14px}.stat b{font-size:1.7rem;font-weight:800;line-height:1.2;display:block}.bar{background:var(--sunk);border-radius:999px;gap:2px;height:12px;display:flex;overflow:hidden}.bar.thin{height:6px;margin:2px 0 10px}.bar>span{min-width:3px;height:100%;display:block}.stage{white-space:nowrap;color:var(--tone);background:color-mix(in srgb, var(--tone) 13%, #fff);border:1px solid color-mix(in srgb, var(--tone) 32%, #fff);border-radius:999px;align-items:center;gap:6px;padding:3px 10px 3px 8px;font-size:.84rem;font-weight:700;display:inline-flex}.stage:before{content:"";background:var(--tone);border-radius:50%;width:8px;height:8px}.pending_cabling{--tone:var(--s-cabling)}.pending_termination{--tone:var(--s-termination)}.pending_installation{--tone:var(--s-installation)}.pending_test{--tone:var(--s-test)}.complete{--tone:var(--s-complete)}.issue{--tone:var(--s-issue)}.cancelled{--tone:var(--s-cancelled)}.bar>span,.swatch{background:var(--tone,var(--s-cancelled))}.swatch{border-radius:50%;flex:none;width:10px;height:10px;display:inline-block}.stage-text{color:var(--tone);font-weight:700}.tag{background:var(--sunk);color:var(--muted);border-radius:6px;padding:1px 8px;font-size:.8rem;font-weight:600;display:inline-block}.tag.wait{color:#6b4a00;background:#fdf1cf}.chips{scrollbar-width:none;gap:6px;padding-bottom:4px;display:flex;overflow-x:auto}.chips::-webkit-scrollbar{display:none}.chip{border-radius:999px;flex:none;min-height:42px;padding:4px 14px;font-weight:700}.chip.on{background:var(--navy);color:#fff;border-color:var(--navy)}.chip.small{min-height:36px;padding:2px 12px;font-size:.88rem}.chip-count{background:var(--sunk);text-align:center;border-radius:999px;min-width:22px;padding:0 7px;font-size:.78rem}.chip.on .chip-count{background:#ffffff38}.chip-done{color:var(--ok);display:inline-flex}.chip.on .chip-done{color:#9fe0bf}.list{background:var(--card);border:1px solid var(--line);border-radius:var(--radius);box-shadow:var(--shadow);margin-bottom:12px;overflow:hidden}.list-head{background:var(--sunk);color:var(--tone,var(--ink));border-bottom:1px solid var(--line);justify-content:space-between;padding:7px 14px;font-size:.92rem;font-weight:800;display:flex}.list-head>span:last-child{color:var(--muted);font-weight:600}.item{border-top:1px solid var(--line);color:inherit;align-items:center;gap:10px;min-height:62px;padding:11px 12px 11px 16px;text-decoration:none;display:flex;position:relative}.list-head+.item,.item:first-child{border-top:0}.item[class*=\ s-]:before{content:"";background:var(--rail);border-radius:0 4px 4px 0;width:5px;position:absolute;top:8px;bottom:8px;left:0}.s-pending_cabling{--rail:var(--s-cabling)}.s-pending_termination{--rail:var(--s-termination)}.s-pending_installation{--rail:var(--s-installation)}.s-pending_test{--rail:var(--s-test)}.s-complete{--rail:var(--s-complete)}.s-issue{--rail:var(--s-issue);background:#fdf5f4}.s-cancelled{--rail:var(--s-cancelled)}.s-complete .name{color:#3d4a55}.item .grow{flex:1;min-width:0}.item .name{overflow-wrap:anywhere;font-weight:700;line-height:1.35}.item .meta{color:var(--muted);flex-wrap:wrap;gap:2px 10px;margin-top:1px;font-size:.86rem;display:flex}.item-link{color:inherit;text-decoration:none;display:block}.item .meta .code{letter-spacing:0;font-family:inherit}.issue-line{color:var(--bad);overflow-wrap:anywhere;margin-top:2px;font-size:.9rem;font-weight:600}.issue-line.fixed{color:var(--ok)}.act{background:var(--act);border-color:var(--act);color:#fff;min-width:96px;min-height:50px;box-shadow:0 2px 0 var(--act-press);border-radius:12px;flex:none;font-size:1.02rem;font-weight:800}.act:active:not(:disabled){background:var(--act-press);box-shadow:none}.act.fix{color:var(--bad);border-color:var(--bad);background:#fff;box-shadow:0 2px #e3b4ae}.done-mark{color:var(--ok);place-items:center;width:48px;display:grid}table{border-collapse:collapse;width:100%;font-size:.95rem}th,td{text-align:left;border-bottom:1px solid var(--line);vertical-align:top;padding:9px 10px}th{color:var(--muted);white-space:nowrap;font-size:.86rem;font-weight:700}tbody tr:last-child>td,tbody tr:last-child>th{border-bottom:0}.table-wrap{overflow-x:auto}td.num,th.num{text-align:right}.back-link{align-items:center;gap:4px;min-height:40px;margin-bottom:8px;font-weight:700;text-decoration:none;display:inline-flex}.device-head h1{margin:0;font-size:1.35rem}.steps{margin:16px 0 8px;display:flex}.step{text-align:center;color:var(--muted);flex:1;padding-top:26px;font-size:.82rem;font-weight:600;position:relative}.step:before{content:"";border:3px solid var(--line);z-index:1;background:#fff;border-radius:50%;width:16px;height:16px;margin-left:-8px;position:absolute;top:4px;left:50%}.step:after{content:"";background:var(--line);width:100%;height:3px;position:absolute;top:10.5px;left:-50%}.step:first-child:after{display:none}.step.done{color:var(--ok)}.step.done:before{background:var(--ok);border-color:var(--ok)}.step.done:after,.step.now:after{background:var(--ok)}.step.now{color:var(--act);font-weight:800}.step.now:before{border-color:var(--act);box-shadow:0 0 0 4px var(--act-soft)}.timeline{border-left:3px solid var(--line);margin-left:7px;padding-left:16px}.event{margin-bottom:16px;position:relative}.event:before{content:"";background:var(--navy-2);border:2px solid var(--paper);border-radius:50%;width:12px;height:12px;position:absolute;top:6px;left:-24.5px}.event.reverted{opacity:.55}.thumbs{flex-wrap:wrap;gap:8px;margin-top:6px;display:flex}.thumb{object-fit:cover;border:1px solid var(--line);background:var(--sunk);cursor:pointer;border-radius:10px;width:96px;height:96px}.thumb.void{opacity:.4}.preview{border-radius:10px;max-width:100%;max-height:240px;margin-top:8px;display:block}.modal{z-index:90;background:#081018eb;flex-direction:column;display:flex;position:fixed;inset:0}.modal img{object-fit:contain;flex:1;width:100%;min-height:0}.modal .row{justify-content:center;padding:10px}.issue-box{color:#7a1c15;border-left:5px solid var(--bad);background:#fbe3e0;border-radius:12px;margin:12px 0;padding:10px 12px}.issue-box .muted{color:#8a4a45}.attributes{flex-wrap:wrap;gap:6px;margin-top:8px;display:flex}.plan-picker{gap:8px;margin-bottom:8px;display:flex}.plan-picker select{flex:1;min-width:0;font-weight:700}.legend{margin-bottom:8px}.plan-view{border:1px solid var(--line);border-radius:var(--radius);touch-action:none;-webkit-user-select:none;user-select:none;cursor:grab;height:clamp(340px,100dvh - 330px,780px);box-shadow:var(--shadow);overscroll-behavior:contain;background:#fff;position:relative;overflow:hidden}.plan-view:active{cursor:grabbing}.plan-view.placing,.plan-view.placing:active{cursor:crosshair}.plan-view.full{z-index:80;border:0;border-radius:0;height:100dvh;position:fixed;inset:0}.plan-canvas{transform-origin:0 0;will-change:transform;--inv:1;position:absolute;top:0;left:0}.plan-canvas img{pointer-events:none;-webkit-user-drag:none;width:100%;height:100%;display:block}.dot{background:var(--tone,var(--s-cancelled));width:30px;height:30px;min-height:0;transform:translate(-50%, -50%) scale(var(--inv));cursor:pointer;color:#fff;border:3px solid #fff;border-radius:50%;padding:0;font-size:15px;font-weight:900;line-height:1;position:absolute;box-shadow:0 0 0 1.5px #0a141e8c,0 2px 6px #0000004d}.dot:before{content:"";border-radius:50%;position:absolute;inset:-9px}.dot:after{font-size:13px}.dot.pending_cabling:after{content:"拉"}.dot.pending_termination:after{content:"結"}.dot.pending_installation:after{content:"裝"}.dot.pending_test:after{content:"測"}.dot.issue:after{content:"!";font-size:16px}.dot.complete:after{content:"✓";font-size:14px}.dot:active:not(:disabled){transform:translate(-50%, -50%) scale(var(--inv));background:var(--tone,var(--s-cancelled))}.dot.selected{z-index:3;box-shadow:0 0 0 4px #ffcf3f,0 0 0 6px #0a141ebf,0 2px 8px #0006}.dot-label{background:var(--ink);color:#fff;white-space:nowrap;pointer-events:none;border-radius:8px;padding:4px 10px;font-size:13px;font-weight:700;position:absolute;bottom:calc(100% + 12px);left:50%;transform:translate(-50%)}.plan-tools{border:1px solid var(--line);box-shadow:var(--shadow);cursor:default;z-index:5;background:#fffffff5;border-radius:12px;align-items:center;display:flex;position:absolute;top:10px;right:10px;overflow:hidden}.plan-view.full .plan-tools{top:calc(10px + env(safe-area-inset-top))}.plan-tools button{background:0 0;border:0;border-radius:0;width:44px;min-height:44px;padding:0}.plan-tools .plan-fit{border-left:1px solid var(--line);border-right:1px solid var(--line);width:auto;padding:0 10px;font-size:.86rem}.plan-zoom{text-align:center;min-width:48px;color:var(--muted);font-size:.84rem;font-weight:700}.plan-overlay{left:10px;right:10px;bottom:calc(10px + env(safe-area-inset-bottom));z-index:5;cursor:default;gap:8px;display:grid;position:absolute}.plan-overlay:empty{display:none}.plan-card{border:1px solid var(--line);background:#fff;border-radius:14px;width:100%;max-width:560px;margin:0 auto;padding:12px;box-shadow:0 10px 28px #0f1e2d47}.plan-card .row{margin-top:10px}.plan-card .row>*{flex:auto}.plan-note{background:var(--ink);color:#fff;border-radius:999px;justify-self:center;align-items:center;gap:6px;padding:6px 14px;font-size:.9rem;display:flex}.plan-note .ghost{color:#ffd9a8;min-height:32px;padding:0 6px}.plan-hint{text-align:center;margin:8px 0 12px}.fold{padding:0}.fold>summary{cursor:pointer;align-items:center;gap:8px;min-height:52px;padding:14px 16px;font-weight:800;list-style:none;display:flex}.fold>summary::-webkit-details-marker{display:none}.fold>summary:after{content:"＋";color:var(--muted);margin-left:auto;font-weight:400}.fold[open]>summary:after{content:"－"}.fold-body{padding:0 16px 14px}.export-row{border-top:1px solid var(--line);align-items:center;gap:12px;padding:12px 0;display:flex}.export-row>div{flex:1;min-width:0}.export-row>button{flex:none}.work-head{top:var(--top);z-index:15;background:var(--paper);margin:-8px 0 4px;padding:8px 0 6px;position:sticky}.floor-chips{padding-bottom:8px}.work-search{grid-template-columns:minmax(0,1.4fr) minmax(0,1fr);gap:8px;display:grid}.search-box{color:var(--muted);position:relative}.search-box .icon{pointer-events:none;margin-top:-9px;position:absolute;top:50%;left:12px}.search-box input{padding-left:38px}.stage-tiles{grid-template-columns:repeat(8,minmax(0,1fr));gap:6px;margin:6px 0 8px;display:grid}.tile{border:1.5px solid var(--line);border-top:4px solid var(--tone,var(--navy));background:#fff;border-radius:12px;flex-direction:column;gap:0;min-height:60px;padding:6px 2px 7px;line-height:1.2}.tile-count{color:var(--ink);font-size:1.25rem;font-weight:800}.tile-label{color:var(--tone,var(--muted));white-space:nowrap;font-size:.78rem;font-weight:700}.tile.zero .tile-count{color:#a3abb3}.tile.on{background:var(--tone,var(--navy));border-color:var(--tone,var(--navy))}.tile.on .tile-count,.tile.on .tile-label{color:#fff}.result-bar{flex-wrap:wrap;align-items:center;gap:10px;min-height:38px;margin:0 2px 8px;font-weight:700;display:flex}.result-bar .muted{font-weight:500}.hero{background:var(--navy);color:#fff;border-radius:18px;grid-template-columns:auto 1fr;align-items:center;gap:14px;margin-bottom:12px;padding:18px;display:grid}.hero-figure{letter-spacing:-.02em;font-size:3.2rem;font-weight:800;line-height:1}.hero-figure small{margin-left:2px;font-size:1.2rem;font-weight:700}.hero-title{font-size:1.1rem;font-weight:800}.hero .muted{color:#b9cbdc}.hero .bar{background:#ffffff29;margin-top:8px}.stat-link{color:inherit;border-top:4px solid var(--tone);text-decoration:none;display:block}.stat-link b{margin-top:2px}.stat-link span{color:var(--tone);font-size:.9rem;font-weight:700}.system-row{border-top:1px solid var(--line);padding:10px 0}.system-row:first-child{border-top:0;padding-top:0}.system-row:last-child{padding-bottom:0}.system-row a{font-weight:700;text-decoration:none}.system-row .bar{margin-top:6px}.matrix th,.matrix td{text-align:center;white-space:nowrap}.matrix th:first-child{background:var(--card);z-index:1;position:sticky;left:0}.matrix .cell{border-bottom:0;padding:3px;position:relative}.matrix .cell a{color:inherit;background:var(--fill);border-radius:8px;min-width:60px;padding:9px 8px;font-weight:600;text-decoration:none;display:block}.matrix .empty{color:#b3bcc6;padding:10px 8px}.level-0{--fill:#efece5}.level-1{--fill:#d9eadf}.level-2{--fill:#b9dcc7}.level-3{--fill:#8fcaa8}.level-4{--fill:#1d7a4c}.level-4 a{color:#fff!important}.issue-dot{background:var(--s-issue);border:2px solid #fff;border-radius:50%;width:10px;height:10px;position:absolute;top:6px;right:6px}.compare{grid-template-columns:1fr 1fr;gap:10px;margin:10px 0;display:grid}.compare>div{background:var(--paper);border-radius:10px;padding:10px}.compare h3{color:var(--muted);margin:0 0 6px;font-size:.9rem}.login{background:linear-gradient(180deg, var(--navy) 0 240px, var(--paper) 240px);place-items:center;min-height:100vh;padding:16px;display:grid}.login .card{width:min(440px,100%);padding:22px;box-shadow:0 18px 44px #0f1e2d38}.login h1{align-items:center;gap:10px;display:flex}.demo-accounts{border-top:1px solid var(--line);margin-top:16px;padding-top:10px}.demo-accounts button{justify-content:flex-start;width:100%;margin-top:6px;font-weight:500}.tabs{border-bottom:1px solid var(--line);gap:4px;margin-bottom:14px;display:flex;overflow-x:auto}.tab{white-space:nowrap;color:var(--muted);background:0 0;border:0;border-bottom:3px solid #0000;border-radius:0}.tab.on{border-bottom-color:var(--act);color:var(--ink);font-weight:800}.code{letter-spacing:.02em;font-family:ui-monospace,Menlo,Consolas,monospace}.scrim{display:none}.scrim.show{z-index:45;background:#08101880;display:block;position:fixed;inset:0}.tabbar{display:none}.bottom-sheet{z-index:95;background:var(--card);padding:10px 16px calc(16px + env(safe-area-inset-bottom));border-radius:20px 20px 0 0;max-width:640px;max-height:92vh;margin:0 auto;position:fixed;bottom:0;left:0;right:0;overflow-y:auto;box-shadow:0 -10px 34px #0810184d}.bottom-sheet:before{content:"";background:var(--line);border-radius:999px;width:44px;height:5px;margin:0 auto 10px;display:block}.capture-photo{align-items:flex-end;gap:10px;margin-top:10px;display:flex}.capture-photo img{object-fit:contain;background:var(--sunk);border-radius:12px;max-width:70%;max-height:34vh}.toast{left:50%;bottom:calc(var(--tabs) + 22px + env(safe-area-inset-bottom));background:var(--ink);color:#fff;z-index:99;text-align:center;border-radius:999px;max-width:calc(100vw - 32px);padding:11px 18px;font-size:.95rem;font-weight:600;position:fixed;transform:translate(-50%);box-shadow:0 8px 24px #08101859}@media (max-width:860px){.nav{z-index:60;width:272px;transition:transform .18s;position:fixed;top:0;left:0;transform:translate(-100%)}.nav.open{transform:none}.scrim.show{z-index:50}.topbar{background:var(--navy);color:#fff;border-bottom:0;padding:0 12px}.topbar select{color:#fff;background:#ffffff1a;border-color:#ffffff40;min-height:40px;padding:4px 10px}.topbar select option{color:var(--ink)}.content{padding:12px 12px calc(var(--tabs) + 28px + env(safe-area-inset-bottom))}.tabbar{z-index:30;background:var(--card);border-top:1px solid var(--line);padding-bottom:env(safe-area-inset-bottom);display:flex;position:fixed;bottom:0;left:0;right:0;box-shadow:0 -4px 16px #16212b0f}.tab-item{min-height:var(--tabs);color:var(--muted);background:0 0;border:0;border-radius:0;flex-direction:column;flex:1;justify-content:center;align-items:center;gap:3px;padding:0;font-size:.78rem;font-weight:600;text-decoration:none;display:flex;position:relative}.tab-item.active{color:var(--navy);font-weight:800}.tab-item.active:before{content:"";background:var(--act);border-radius:0 0 3px 3px;height:3px;position:absolute;top:0;left:24%;right:24%}.dot-badge{margin:0;position:absolute;top:6px;left:56%}.compare{grid-template-columns:1fr}.stage-tiles{grid-template-columns:repeat(4,minmax(0,1fr))}.plan-view{height:calc(100dvh - var(--top) - var(--tabs) - 196px - env(safe-area-inset-bottom));min-height:300px}.plans-page{margin-top:-2px}.hero-figure{font-size:2.7rem}.export-row{flex-wrap:wrap}.export-row>button{flex:100%}h1{font-size:1.3rem}}@media (max-width:380px){.work-search{grid-template-columns:1fr}.act{min-width:84px}}@media (prefers-reduced-motion:reduce){*{transition:none!important}}.demo-accounts button{text-align:left;flex-wrap:wrap;gap:0 4px}.demo-accounts .code{white-space:nowrap}.layout-switch{margin-bottom:10px}.layout-tabs{background:var(--sunk);border-radius:12px;grid-auto-columns:1fr;grid-auto-flow:column;gap:3px;padding:3px;display:grid}.layout-tabs button{min-height:40px;color:var(--muted);background:0 0;border:0;border-radius:9px;padding:0}.layout-tabs button.on{background:var(--card);color:var(--ink);font-weight:800;box-shadow:0 1px 3px #16212b2e}.layout-switch .muted{margin:4px 2px 0;font-size:.82rem}button.plain{text-align:left;font-weight:inherit;background:0 0;border:0;border-radius:0;flex-direction:column;justify-content:flex-start;align-items:stretch;gap:0;min-height:0;padding:0}button.plain:active:not(:disabled){background:0 0;transform:none}.item.picked{background:#fff6d6;box-shadow:inset 0 0 0 2px #e2b100}.floor-list{gap:8px;display:grid}.floor-row{border-radius:var(--radius);text-align:left;width:100%;min-height:76px;box-shadow:var(--shadow);justify-content:flex-start;gap:12px;padding:10px 12px;font-weight:400}.floor-row.all-done{box-shadow:none;background:#f2f8f4}.floor-name{min-width:58px;font-size:1.45rem;font-weight:800}.floor-row .grow{gap:5px;display:grid}.floor-row .bar{height:10px}.floor-detail{color:var(--muted);font-size:.84rem}.floor-left{white-space:nowrap;color:var(--muted);font-size:.86rem}.floor-left b{color:var(--ink);font-size:1.35rem;font-weight:800}.floor-row.all-done .floor-left{color:var(--ok)}.floor-row .badge{margin-left:0}.floor-bar{top:var(--top);z-index:15;background:var(--paper);align-items:center;gap:8px;margin-top:-8px;padding:8px 0;display:flex;position:sticky}.floor-title{font-size:1.5rem;font-weight:800;line-height:1.15}.fold-head{border:0;border-bottom:1px solid var(--line);border-radius:0;align-items:center;width:100%;min-height:44px;font-size:.95rem}.fold-head:active:not(:disabled){transform:none}.fold-head>span:first-child{align-items:center;gap:8px;display:inline-flex}[data-testid=floor-screen] .chips,[data-testid=floors-screen] .chips{margin-bottom:10px}.home{gap:12px;display:grid}.home>*{min-width:0;margin:0}.home-hello{justify-content:space-between;align-items:center;gap:12px;display:flex}.home-hello h1{margin:0}a.button.primary-link{background:var(--act);border-color:var(--act);color:#fff;min-height:52px;padding:8px 18px;font-weight:800}.home-line{color:inherit;align-items:center;gap:12px;padding:12px 14px;text-decoration:none;display:flex}.home-line .grow{display:grid}.home-line.due{border-left:6px solid var(--act)}.home-line.ok{color:var(--ok)}.home-line.ok .muted,.home-line.ok strong{color:inherit}.home-number{text-align:center;min-width:44px;font-size:2rem;font-weight:800;line-height:1}.home-head{align-items:center;gap:8px;margin:4px 2px 8px;display:flex}.home-head h2{margin:0}.home-head a{margin-left:auto;font-size:.9rem;font-weight:700}.count{background:var(--navy);color:#fff;text-align:center;border-radius:999px;min-width:24px;padding:0 8px;font-size:.82rem;font-weight:800;line-height:1.6}.count.bad{background:var(--bad)}.home-block .list{margin-bottom:0}.home-progress{background:var(--navy);color:#fff;border-radius:var(--radius);align-items:center;gap:12px;padding:12px 14px;text-decoration:none;display:flex}.home-progress .grow{display:grid}.home-progress .muted{color:#b9cbdc;align-items:center;gap:2px;display:inline-flex}.home-percent{font-size:2rem;font-weight:800;line-height:1}.home-percent small{font-size:1rem}.home-clear{color:var(--ok);justify-items:center;gap:6px;padding:28px 16px;display:grid}.home-links{flex-wrap:wrap;gap:8px;display:flex}.home-links>*{flex:140px}.review-item{align-items:stretch}.review-actions{align-content:center;gap:6px;display:grid}a.item{color:inherit;text-decoration:none}a.item .grow{display:grid}.issue-tabs{margin-bottom:10px;display:none}.issue-tabs .count{margin-left:4px}.issue-board{grid-template-columns:repeat(3,minmax(0,1fr));align-items:start;gap:12px;display:grid}.issue-column{background:var(--sunk);border-radius:var(--radius);gap:10px;padding:10px;display:grid}.issue-column>header{align-items:center;gap:8px;padding:2px 4px;display:flex}.issue-column>header h2{margin:0}.issue-column>header .muted{margin-left:auto}.issue-card{background:var(--card);border:1px solid var(--line);border-radius:12px;gap:6px;padding:12px;display:grid}.issue-card p{margin:0}.issue-title{color:inherit;text-decoration:none;display:grid}.issue-reason{color:var(--bad);overflow-wrap:anywhere;font-weight:700}.shots{color:var(--muted);align-items:center;gap:6px;margin:4px 0;display:flex}.shot{text-align:center;flex:1;min-width:0;margin:0}.shot figcaption{color:var(--muted);margin-top:2px;font-size:.78rem}.shot-image{aspect-ratio:4/3;object-fit:cover;border:1px solid var(--line);background:var(--sunk);cursor:pointer;width:100%;color:var(--muted);border-radius:8px;place-items:center;font-size:.8rem;display:grid}.shot-image.none{cursor:default;border-style:dashed}.section-head{justify-content:space-between;align-items:center;gap:12px;margin:26px 0 10px;display:flex}.section-head h2{margin:0}.layout-tabs.mini{width:150px}.layout-tabs.mini button{min-height:34px;font-size:.9rem}.building-grid{background:var(--card);border:1px solid var(--line);border-bottom:4px solid var(--ink);border-radius:12px 12px 0 0;gap:3px;margin-top:8px;padding:10px 10px 12px;display:grid}.building-system{text-align:center;color:var(--muted);white-space:nowrap;text-overflow:ellipsis;padding-bottom:4px;font-size:.82rem;font-weight:700;overflow:hidden}.building-floor{color:var(--ink);place-items:center;min-height:44px;font-weight:800;text-decoration:none;display:grid}.building-cell{background:var(--sunk);min-height:44px;color:var(--ink);border-radius:4px;place-items:center;font-size:.92rem;font-weight:700;text-decoration:none;display:grid;position:relative;overflow:hidden}.building-cell.none{border:1px dashed var(--line);background:0 0}.building-fill{background:#9fd3b5;position:absolute;top:0;bottom:0;left:0}.building-cell.full{color:#fff}.building-cell.full .building-fill{background:var(--s-complete)}.building-text{align-items:center;gap:2px;display:inline-flex;position:relative}.building-issue{background:var(--bad);color:#fff;border-radius:4px;padding:0 4px;font-size:.72rem;line-height:1.5;position:absolute;top:2px;right:2px}.building-floor.ground,.building-cell.ground{box-shadow:0 5px 0 -2px var(--ink);margin-bottom:4px}.curve-say{margin:0 0 6px;font-weight:700}.curve-frame{outline-offset:4px;touch-action:pan-y;margin-top:8px;position:relative}.curve-frame svg{width:100%;height:auto;display:block;overflow:visible}.curve-title{color:var(--muted);margin:6px 0 2px;font-size:.82rem;font-weight:700}.curve-grid{stroke:var(--line);stroke-width:1px}.curve-goal{stroke:var(--muted);stroke-width:1px;stroke-dasharray:4 4}.curve-axis{stroke:var(--muted);stroke-width:1px}.curve-tick{fill:var(--muted);font-size:12px}.curve-value{fill:var(--ink);font-size:13px;font-weight:700}.curve-line{fill:none;stroke:var(--s-complete);stroke-width:2px;stroke-linejoin:round;stroke-linecap:round}.curve-end{fill:var(--s-complete);stroke:#fff;stroke-width:2px}.curve-bar{fill:var(--navy-2);opacity:.8}.curve-bar.on{opacity:1}.curve-idle{fill:#fff;stroke:var(--muted);stroke-width:1.5px}.curve-cross{stroke:var(--ink);stroke-width:1px;opacity:.55}.curve-tip{background:var(--ink);color:#fff;pointer-events:none;white-space:nowrap;z-index:2;border-radius:8px;padding:6px 10px;font-size:.84rem;position:absolute;top:4px;transform:translate(10px)}.curve-tip[data-side=left]{transform:translate(calc(-100% - 10px))}.curve-tip .muted{color:#c3ccd5;font-size:.78rem}.curve-table{margin-top:10px}.curve-table summary{cursor:pointer;color:var(--navy-2);min-height:36px;font-weight:600}.digest-actions{margin:10px 0}.digest-sheet{padding:0;overflow:hidden}.digest-sheet>header{background:var(--navy);color:#fff;padding:16px}.digest-sheet>header .muted{color:#c9d8e6}.digest-site{font-size:1.3rem;font-weight:800}.digest-figures{border-bottom:1px solid var(--line);grid-template-columns:repeat(4,1fr);display:grid}.digest-figures>div{text-align:center;border-left:1px solid var(--line);padding:12px 6px}.digest-figures>div:first-child{border-left:0}.digest-figures b{font-size:1.5rem;font-weight:800;line-height:1.2;display:block}.digest-figures span{color:var(--muted);font-size:.8rem}.digest-sheet section{padding:4px 16px 10px}.digest-sheet h2{margin:12px 0 6px}.digest-list{gap:4px;margin:0;padding-left:0;list-style:none;display:grid}.digest-list li{overflow-wrap:anywhere}.digest-list li.bad strong{color:var(--bad)}.digest-list li.warn{color:var(--warn);font-weight:600}.digest-photos{grid-template-columns:repeat(4,1fr);gap:6px;padding-bottom:8px;display:grid}.digest-photo{aspect-ratio:1;object-fit:cover;background:var(--sunk);cursor:pointer;border-radius:6px;width:100%;display:block}@media (max-width:860px){.issue-tabs{display:grid}.issue-board{grid-template-columns:1fr}.issue-column{background:0 0;padding:0;display:none}.issue-column.shown{display:grid}.issue-column>header{display:none}.digest-photos{grid-template-columns:repeat(3,1fr)}.tab-item{font-size:.74rem}}@media print{.nav,.topbar,.tabbar,.banner,.no-print,.toast{display:none!important}body{background:#fff}.content{max-width:none;padding:0}.digest-sheet{box-shadow:none;border:0}.digest-sheet>header{color:#000;background:0 0;border-bottom:2px solid #000}.digest-sheet>header .muted{color:#333}}@media (max-width:860px){.plans-page .plan-view:not(.full){height:52dvh;min-height:280px}}
