:root{--navy: #1F3448;--error: #B3261E;color-scheme:light}*{box-sizing:border-box}html,body{margin:0;padding:0;font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,sans-serif;font-size:16px;color:#1a1a1a;background:#f5f6f7}h1,h2{color:var(--navy)}a{color:var(--navy);text-decoration:none}a:hover,a:focus-visible{text-decoration:underline}nav.tabbar a:hover,nav.topbar a:hover,.listswitch a:hover,.walllist li a:hover,a.card:hover,.gantt-row:hover,.contactlink:hover,.contactlink:focus-visible{text-decoration:none}.shell{display:grid;grid-template-rows:auto auto minmax(0,1fr) auto;grid-template-columns:minmax(0,1fr);height:100vh;height:100dvh}.shell>nav.topbar{grid-row:1}.shell>.topstack{grid-row:2;grid-column:1;display:grid;gap:6px;padding:8px 8px 0}.shell>.topstack:empty{display:none}.shell>.content{grid-row:3;grid-column:1;min-height:0;overflow:auto;-webkit-overflow-scrolling:touch}.shell>nav.tabbar{grid-row:4}.shell>.install-banner{grid-row:3;grid-column:1;align-self:end;z-index:5;margin:0 8px 8px}.offlinebar-wrap{display:grid;gap:6px;min-height:0;max-height:50vh}.screen{padding:12px}label{display:block;font-weight:600;margin:16px 0 6px}input{width:100%;min-height:44px;font-size:16px;padding:8px 12px;border:1px solid #ccc;border-radius:6px}button{min-height:44px;font-size:16px;border-radius:6px;border:none;cursor:pointer}.primary{display:block;width:100%;margin-top:20px;background:var(--navy);color:#fff;font-weight:700}.primary:active{opacity:.85}.error{color:var(--error);font-weight:600;margin-top:12px}.chip{display:inline-block;width:var(--chip-w, auto);text-align:center;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;padding:2px 10px;border-radius:999px;border:1px solid rgba(0,0,0,.35);font-size:14px;font-weight:600}nav.tabbar{display:flex;background:var(--navy);padding-bottom:env(safe-area-inset-bottom)}nav.tabbar a{flex:1;display:flex;align-items:center;justify-content:center;min-height:44px;padding:8px 0;color:#fff;text-decoration:none;font-weight:600;font-size:14px}nav.tabbar a:active{opacity:.8}.plan-wrap{position:relative;flex:1;min-height:0;overflow:hidden;touch-action:none;background:#f4f6f8}.plan-retry{position:absolute;left:50%;bottom:12px;transform:translate(-50%);padding:8px 16px;background:#1f3448eb;color:#fff;font-weight:700;box-shadow:0 2px 10px #00000040}.plan-screen{display:flex;flex-direction:column;height:100%;min-height:0;overflow:hidden}.plan-screen .plan-main{display:flex;flex-direction:column;flex:1;min-height:0}svg.plan{width:100%;height:100%}polygon.room{fill:transparent;stroke:none;pointer-events:all}polygon.room.room-complete{fill:#2e7d3259}polygon.room.room-partial{fill:#ffa00059}.room.selected{stroke:#1f34488c;stroke-width:1.5;vector-effect:non-scaling-stroke}polygon.room.selected:not(.room-complete):not(.room-partial){fill:#1f34481a}circle.badge{fill:#e6194b;stroke:#fff;stroke-width:2}.sheet{position:fixed;left:0;right:0;bottom:0;max-height:70vh;overflow-y:auto;background:#fff;border-radius:16px 16px 0 0;box-shadow:0 -4px 24px #0003;z-index:20;padding-bottom:env(safe-area-inset-bottom)}.sheet-head{position:sticky;top:0;display:flex;align-items:flex-start;justify-content:space-between;padding:16px;background:#fff;border-bottom:1px solid #eee}.sheet-head h2{margin:0;font-size:18px}.sheet-head small{color:#667}.sheet-head small.phase{display:block;margin-top:2px}.sheet-head a.sheetref{color:var(--navy);text-decoration:underline}.sheet .close,.wallviewer .close{border:none;background:none;font-size:24px;line-height:1;min-width:44px;min-height:44px}.sheet .tabs{display:flex;gap:4px;padding:0 16px}.sheet .tabs button{flex:1;padding:10px 4px;border:none;background:none;border-bottom:3px solid transparent;font-weight:600;color:#667}.sheet .tabs button.on{color:#fff;background:var(--navy);border-bottom-color:var(--navy)}.notice{margin:0 16px;padding:8px 12px;background:#fff3cd;border-radius:8px;color:#7a5c00}.lines,.walls,.sheets{padding:12px 16px 24px}.line{display:grid;grid-template-columns:auto 1fr auto;gap:10px;align-items:center;padding:10px 0;border-bottom:1px solid #f0f0f0}.line-body .material{font-weight:600}.line-body .labor{color:#667;font-size:13px}.line-nums{text-align:right;font-size:13px}.line-nums .amt{font-weight:700;font-size:15px}.total{display:flex;justify-content:space-between;padding:12px 0 0;font-size:16px}.total.grand{padding:16px;font-size:18px}.hint{color:#667;font-size:13px;margin:0 0 10px}.walllist{list-style:none;margin:0;padding:0}.walllist li a{display:flex;align-items:center;gap:10px;min-height:48px;color:inherit;text-decoration:none;border-bottom:1px solid #f0f0f0}.wallkey-wrap{position:relative;display:block;margin-bottom:12px}.wallkey{display:block;width:100%;border-radius:8px;touch-action:manipulation}.img-loading{position:absolute;inset:0;display:flex;align-items:center;justify-content:center;background:#fff9;border-radius:8px}.img-loading:after{content:"";width:32px;height:32px;border:4px solid rgba(31,52,72,.15);border-top-color:var(--navy);border-radius:50%;animation:spin .8s linear infinite}.wallkey .seg{fill:none;stroke:transparent;stroke-width:18;stroke-linecap:round;pointer-events:stroke;cursor:pointer}.wallkey .seg.on{stroke:#e6194bbf;stroke-width:10}.wallkey .wallchip{cursor:pointer;pointer-events:all}.wallkey .leader{stroke:var(--navy);stroke-width:2;vector-effect:non-scaling-stroke}.wallkey .chipdot{fill:#fff;stroke:var(--navy);stroke-width:2.5;vector-effect:non-scaling-stroke}.wallkey .chipnum{fill:var(--navy);font-weight:700;pointer-events:none;-webkit-user-select:none;user-select:none}.wallkey-error{display:flex;align-items:center;gap:10px;color:var(--error);font-weight:600;margin:-4px 0 12px}.wallkey-error button{min-width:100px;background:var(--navy);color:#fff;font-weight:700}.disc{display:inline-flex;align-items:center;justify-content:center;width:28px;height:28px;border-radius:50%;color:#fff;font-weight:700;font-size:13px}.sheets figure{margin:0 0 16px}.sheets img{width:100%;border-radius:8px}.sheets figcaption{color:#667;font-size:13px;margin-top:4px}.sheet-thumb{display:block;color:inherit;text-decoration:none}.wallviewer{position:fixed;inset:0;background:#fff;z-index:30;display:flex;flex-direction:column}.wallviewer .bar{display:flex;align-items:center;justify-content:space-between;padding:10px 12px;gap:8px}.wallviewer .bar small{color:#667}.wallviewer .steps{display:flex;gap:4px}.wallviewer .steps button{min-width:44px;min-height:44px;font-size:20px;border:1px solid #ddd;border-radius:8px;background:#fff}.wallviewer .steps button:disabled{opacity:.3}.wallviewer .steps.bottom{justify-content:center;gap:24px;padding:10px 12px calc(10px + env(safe-area-inset-bottom));background:#fff;border-top:1px solid #eee}.wallbox{flex:1;overflow:hidden;touch-action:none;background:#111;display:flex;align-items:center;justify-content:center;position:relative}.wallbox img{max-height:100%;width:auto;max-width:100%}.spinner{position:absolute;width:36px;height:36px;border:4px solid rgba(255,255,255,.25);border-top-color:#fff;border-radius:50%;animation:spin .8s linear infinite}@keyframes spin{to{transform:rotate(360deg)}}.viewer-error{position:absolute;inset:0;display:flex;flex-direction:column;align-items:center;justify-content:center;background:#111111eb;color:#fff;text-align:center}.viewer-error p{margin:0 0 12px}.viewer-error button{min-width:120px;background:#fff;color:var(--navy);font-weight:700}.wall-legend{padding:10px 16px;background:#fff;border-top:1px solid #eee;max-height:32vh;overflow-y:auto}.wall-legend h4{margin:10px 0 4px;font-size:13px;color:#667;text-transform:uppercase;letter-spacing:.02em}.wall-legend h4:first-child{margin-top:0}.wall-legend ul{list-style:none;margin:0;padding:0}.wall-legend li{display:flex;align-items:center;gap:8px;padding:4px 0}.sheet-room{padding:0 0 16px;border-bottom:8px solid #f4f6f8}.sheet-room .line,.sheet-room .total{margin-left:16px;margin-right:16px}.roomrow{display:block;color:inherit;text-decoration:none;padding:12px 16px;border-bottom:1px solid #dde3e8}.sheet-room:nth-of-type(2n) .roomrow{background:#f7f9fb}.roomrow:active{background:#eef1f3}.roomrow h3{margin:0;font-size:16px}.roomrow h3 small{color:#667;font-weight:400;margin-left:6px}.materials-table{width:100%;border-collapse:collapse;margin:12px 0 24px}.materials-table thead{display:none}.materials-table tbody tr,.materials-table tfoot tr{display:block;background:#fff;border:1px solid #e2e6e9;border-radius:10px;margin-bottom:10px;padding:4px 12px}.materials-table tbody td,.materials-table tfoot td{display:flex;justify-content:space-between;align-items:center;gap:10px;padding:6px 0;border-bottom:1px solid #f0f0f0;text-align:right}.materials-table tbody td:last-child,.materials-table tfoot td:last-child{border-bottom:none}.materials-table td:before{content:attr(data-label);font-weight:600;color:#667;font-size:12px;text-transform:uppercase;letter-spacing:.02em}.materials-table tfoot tr{background:#eef1f3;font-weight:700}.materials-table tfoot td:first-child{justify-content:flex-start}.materials-table tfoot td:first-child:before{content:none}@media(min-width:768px){.materials-table thead{display:table-header-group}.materials-table th{text-align:left;padding:8px 10px;background:#eef1f3;color:var(--navy);font-size:13px;text-transform:uppercase;letter-spacing:.02em}.materials-table th:nth-child(n+5),.materials-table td:nth-child(n+5){text-align:right}.materials-table tbody tr,.materials-table tfoot tr{display:table-row;background:none;border:none;border-bottom:1px solid #e2e6e9;border-radius:0;padding:0;margin:0}.materials-table tbody td,.materials-table tfoot td{display:table-cell;border-bottom:none;padding:8px 10px;text-align:left}.materials-table td:before{content:none}.materials-table tfoot tr{background:#eef1f3}}.cards{list-style:none;margin:0;padding:0;display:flex;flex-direction:column;gap:10px}.card{display:block;background:#fff;border:1px solid #e2e6e9;border-radius:10px;padding:12px;color:inherit;text-decoration:none}.card-title{font-weight:600}.card-title-row{display:flex;align-items:center;gap:8px}.card-title-row .pill{margin-top:0;flex:none}.card-title-row .sub-name{font-weight:600;min-width:0;overflow-wrap:anywhere}.card-title-row .pill-right{margin-left:auto}.card-title-row .job-name{min-width:0;overflow-wrap:anywhere}.jobno{color:var(--navy);font-weight:700;margin-right:6px}.pill{display:inline-block;margin-top:6px;padding:2px 10px;border-radius:999px;font-size:13px;font-weight:600;background:#eef1f3;color:var(--navy)}.pill.warn{background:var(--error);color:#fff}.pill.pm-tag{background:var(--navy);color:#fff}.save-offline{display:flex;align-items:center;flex-wrap:wrap;gap:8px;margin-top:6px}.save-offline-btn{padding:0 14px;border:1px solid #ccd;background:#fff;color:var(--navy);font-weight:600}.save-offline-btn:disabled{color:#889;cursor:default}.save-offline-remove{padding:0 14px;border:1px solid #ddd;background:#fff;color:#667}.save-offline-state{font-size:13px;color:#667}.save-offline-state.error{color:var(--error)}.bar{display:flex;align-items:center;gap:6px;padding:8px 0}.bar>div{flex:1;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;font-weight:600}.bar>.bar-title{color:var(--navy);font-weight:700}.back{display:flex;align-items:center;justify-content:center;min-width:44px;min-height:44px;flex-shrink:0;font-size:24px;color:var(--navy);text-decoration:none}button.back{background:none;border:0;font:inherit;color:inherit;cursor:pointer}.link{flex-shrink:0;color:var(--navy);font-weight:600;text-decoration:none}.plan-screen>.bar{flex-wrap:wrap}.plan-screen>.bar>div:not(.planbar){min-width:150px}.plan-screen>.bar>.planbar{flex:1 0 100%;min-width:0}.planbar{display:grid;grid-template-columns:repeat(auto-fit,minmax(150px,1fr));gap:10px;padding:8px 0}.planbar>*{min-height:44px;display:flex;align-items:center;justify-content:center;min-width:0;white-space:normal;text-align:center;line-height:1.15;padding:4px 6px;border-radius:10px;font-weight:700;font-size:14px;text-decoration:none}.planbar-action{background:var(--navy);color:#fff;border:1px solid var(--navy)}.planbar-link{background:#fff;color:var(--navy);border:2px solid var(--navy)}.planbar-link.on{background:var(--navy);color:#fff}.planbar-request{background:#fff;color:var(--navy);border:2px solid var(--navy)}.listswitch{display:grid;grid-auto-flow:column;grid-auto-columns:1fr;gap:6px;margin:8px 0 12px}.listswitch a{min-height:40px;display:flex;align-items:center;justify-content:center;border:1px solid #ccd;border-radius:8px;background:#fff;color:#445;font-weight:700;text-decoration:none}.listswitch a.on{background:var(--navy);border-color:var(--navy);color:#fff}.area-select{display:block;width:100%;margin:12px 0;min-height:44px;font-size:16px;font-weight:600;color:var(--navy);border:1px solid #ddd;border-radius:8px;padding:6px 10px;background:#fff}.tabs{display:flex;gap:6px;margin:12px 0;flex-wrap:wrap}.tabs button{min-height:36px;padding:6px 14px;border:1px solid #ddd;border-radius:999px;background:#fff;font-weight:600;color:#667}.tabs button.on{background:var(--navy);border-color:var(--navy);color:#fff}.seg{display:flex;gap:6px;margin:8px 0 20px}.seg button{flex:1;padding:8px;border:1px solid #ddd;border-radius:8px;background:#fff;font-weight:600;color:#667}.seg button.on{background:var(--navy);border-color:var(--navy);color:#fff}.jobchips{list-style:none;display:flex;flex-wrap:wrap;gap:6px;margin:8px 0;padding:0}.jobchips li{display:inline-flex;align-items:center;gap:4px;background:#eef1f3;border-radius:999px;padding:2px 4px 2px 10px;font-size:13px}.jobchips li button{min-width:24px;min-height:24px;border:none;background:none;font-size:16px;line-height:1;color:#667;padding:0 4px}.jobchips li.none{background:none;color:#667;padding-left:0}.jobchips .jobno{margin-right:0}.people{list-style:none;margin:0 0 12px;padding:0}.people li{display:flex;align-items:center;gap:8px;padding:8px 0;border-bottom:1px solid #eef1f3}.people .person-name{font-weight:600}.people small{color:#667}.people button.danger{margin-left:auto;min-width:32px;min-height:32px;background:none;border:0;color:#b22222;font-size:18px}.row{display:flex;gap:8px;margin-top:12px}.form label{margin:12px 0 4px}.last-seen{color:#667;font-size:13px;margin-top:4px}.acks{list-style:none;margin:8px 0 0;padding:0;font-size:13px;color:#667}.acks li{padding:3px 0}.warn{color:var(--error);font-weight:600}.signout-confirm{display:flex;flex-wrap:wrap;align-items:center;gap:8px}.signout-confirm p{flex:1 1 100%;margin:0}.savedcopy{margin:8px 0;padding:6px 10px;border-radius:8px;background:#eef0f4;color:#55606e;font-size:13px;font-weight:600}.banner{margin:12px 0;padding:12px;background:#fff3cd;border-radius:10px;color:#7a5c00}.update-banner{display:flex;align-items:center;gap:10px;padding:8px 12px;background:var(--navy);color:#fff;border-radius:10px;font-size:13px;box-shadow:0 2px 10px #0003}.update-text{flex:1;min-width:0;font-weight:600}.update-banner button{flex:0 0 auto;min-height:36px;padding:0 14px;border-radius:8px;border:0;background:#fff;color:var(--navy);font-weight:700;font-size:13px}.legacy-banner{display:flex;align-items:center;gap:10px;padding:8px 12px;background:#fff3cd;color:#7a5c00;border-radius:10px;font-size:13px;box-shadow:0 2px 10px #00000026}.legacy-text{flex:1;min-width:0;font-weight:600}.legacy-go{flex:0 0 auto;display:inline-flex;align-items:center;min-height:36px;padding:0 14px;border-radius:8px;background:var(--navy);color:#fff;font-weight:700;font-size:13px;text-decoration:none}.banner-actions{display:flex;gap:8px;margin-top:10px}.banner-actions button{flex:1}.changes{list-style:none;margin:10px 0 0;padding:10px 0 0;border-top:1px solid rgba(0,0,0,.08);font-size:14px;max-height:28vh;overflow-y:auto}.changes li{padding:3px 0}nav.topbar{display:flex;align-items:center;gap:24px;height:56px;padding:0 20px;background:var(--navy)}.brand-logo{height:36px;width:auto;display:block}@media(min-width:1100px){.brand-logo{height:44px}}nav.topbar .brand-logo{margin-right:auto}.screen-head{display:flex;align-items:center;gap:12px;margin:12px 0 4px}.screen-head h1{margin:0}.login-logo{margin:24px auto 8px}.banner-logo{height:20px;flex:0 0 auto}.install-banner{display:flex;align-items:center;gap:10px;padding:8px 10px}.install-text{flex:1;min-width:0;font-size:13px;line-height:1.3;display:-webkit-box;-webkit-box-orient:vertical;-webkit-line-clamp:2;overflow:hidden}.install-banner .banner-actions{margin-top:0;flex:0 0 auto}.install-banner .banner-actions button{flex:0 0 auto;padding:6px 12px;font-size:13px}nav.topbar a{color:#fff;text-decoration:none;font-weight:600;font-size:14px}nav.topbar a:hover{opacity:.85}@media(min-width:768px){.screen:not(.plan-screen){max-width:1100px;margin:0 auto}.cards{display:grid;grid-template-columns:repeat(2,1fr);gap:12px}.plan-screen.wide{display:grid;grid-template-columns:1fr 380px;grid-template-rows:auto auto auto auto minmax(0,1fr);column-gap:16px;align-items:start;height:100%;min-height:0;overflow:hidden}.plan-screen.wide>.bar{grid-row:1;grid-column:1 / -1}.plan-screen.wide>.savedcopy{grid-row:2;grid-column:1 / -1}.plan-screen.wide>.banner{grid-row:3;grid-column:1 / -1}.plan-screen.wide>.plan-cards{grid-row:4;grid-column:1 / -1;min-width:0;display:grid;grid-template-columns:repeat(auto-fit,minmax(230px,1fr));gap:0 12px;align-items:start}.plan-screen.wide>.plan-cards>*{min-width:0}.plan-screen.wide .plan-main{grid-column:1;grid-row:5;min-width:0;height:100%;display:flex;flex-direction:column;min-height:0}.plan-screen.wide .plan-side{grid-column:2;grid-row:5;height:100%;overflow-y:auto}.side-empty{padding:24px 16px;color:#667;text-align:center;font-size:14px}.plan-screen.wide.has-list{grid-template-columns:300px minmax(0,1fr)}.plan-screen.wide.has-list .plan-main{grid-column:2}.plan-screen.wide.has-list .plan-side{display:none}.plan-screen.wide.has-list.has-room{grid-template-columns:1fr 380px}.plan-screen.wide.has-list.has-room .plan-list{display:none}.plan-screen.wide.has-list.has-room .plan-main{grid-column:1}.plan-screen.wide.has-list.has-room .plan-side{display:block;grid-column:2;grid-row:5}.plan-list{grid-column:1;grid-row:5;min-width:0;height:100%;overflow-y:auto;background:#fff;border-right:1px solid #dde3e8}.plan-list .roomrow{width:100%;text-align:left;background:#fff;border:0;border-bottom:1px solid #dde3e8;font:inherit;cursor:pointer}.plan-list .roomrow.on{background:#eef1f3;box-shadow:inset 3px 0 0 var(--navy)}.plan-list .roomrow[aria-expanded=true]{background:#eef1f3;border-bottom:0}.roomrow-body{padding:4px 12px 12px;background:#fbfcfd;border-bottom:1px solid #dde3e8}.roomrow-body .matrow{padding:6px 0;border-bottom:1px solid #eef1f3}.roomrow-body .matrow:last-of-type{border-bottom:0}.roomrow-body .hint{margin:6px 0}.roomrow-body .primary{width:100%;min-height:44px;margin-top:8px}.matrow{display:flex;align-items:center;gap:8px;padding:10px 12px;border-bottom:1px solid #f0f0f0;font-size:13px}.matrow .matqty{margin-left:auto;color:#667;white-space:nowrap;flex:0 0 auto}.matrow .chip{flex:0 0 auto}.matrow>span{min-width:0}.plan-screen.wide>.wallboard{grid-column:1 / -1;grid-row:5;height:100%;min-height:0;overflow-y:auto}.wallboard{display:grid;grid-template-columns:clamp(220px,30%,360px) minmax(0,1fr);align-content:start;gap:12px 20px;padding:0 16px 24px}.wallboard{--wallboard-head: 72px }.wallboard-head{grid-column:1 / -1;display:flex;align-items:center;gap:10px;flex-wrap:wrap;position:sticky;top:0;z-index:2;background:#f5f6f7;min-height:var(--wallboard-head);padding:12px 0 8px}.wallboard-head h2{margin:0;font-size:18px;color:var(--navy)}.wallboard-head .hint{margin:0 0 0 auto}.wallboard-head .back{background:none;border:0;font-size:28px;line-height:1;color:var(--navy);padding:0 6px;cursor:pointer}.wallboard-key{grid-column:1;min-width:0;position:sticky;top:var(--wallboard-head);align-self:start;z-index:1}.wallboard-grid{grid-column:2;list-style:none;margin:0;padding:0;display:grid;grid-template-columns:repeat(auto-fill,minmax(220px,1fr));gap:14px;align-content:start}.wallboard-cell{position:relative;margin:0;min-width:0}.wallboard-shot{display:block;color:inherit;text-decoration:none}.wallboard-cell img{display:block;width:100%;height:auto;max-height:42vh;object-fit:contain;background:#fff;border:1px solid #dde3e8;border-radius:8px}.wallboard-shot:focus-visible{outline:3px solid var(--navy);outline-offset:2px}.wallboard-cell.lit img,.wallboard-cell.lit .wallboard-broken{border-color:#e6194bbf;box-shadow:0 0 0 4px #e6194b4d}.wallboard-broken{display:block;width:100%;height:160px;border:1px dashed #ccd;border-radius:8px;background:#f7f9fb}.wallboard-error{margin:4px 0 0;font-size:13px;color:#a12}.wallboard-error button{margin-left:6px}.wallboard-cap{display:flex;align-items:center;gap:8px;margin-top:6px;font-size:13px;color:#445}.wallboard-legend{grid-column:1 / -1;list-style:none;margin:8px 0 0;padding:0;display:flex;flex-wrap:wrap;gap:8px 16px;font-size:13px}.wallboard-legend li{display:flex;align-items:center;gap:8px}.sheet.side{position:static;height:100%;border-radius:10px;box-shadow:none;border:1px solid #e2e6e9}.sheet.side .sheet-head{border-radius:10px 10px 0 0}.wallviewer .bar .steps.inline{margin-left:auto}}@media(min-width:1100px){.plan-screen.wide{grid-template-columns:1fr 440px}.plan-screen.wide.has-list{grid-template-columns:360px minmax(0,1fr)}.plan-screen.wide.has-list.has-room{grid-template-columns:360px minmax(0,1fr) 420px}.plan-screen.wide.has-list.has-room .plan-list{display:block;grid-column:1;grid-row:5}.plan-screen.wide.has-list.has-room .plan-main{grid-column:2}.plan-screen.wide.has-list.has-room .plan-side{display:block;grid-column:3;grid-row:5}nav.tabbar{display:none}.users-table{width:100%;border-collapse:collapse;margin:12px 0 24px}.users-table th{text-align:left;padding:8px 10px;background:#eef1f3;color:var(--navy);font-size:13px;text-transform:uppercase;letter-spacing:.02em}.users-table td{padding:10px;border-bottom:1px solid #e2e6e9;vertical-align:top}.users-table tbody tr:hover{background:#fafbfc}.users-table .jobchips{margin:0 0 8px}.users-table label{margin:0;font-weight:400}.users-table .field{margin:0}.users-table .field>span{font-weight:600}}.line-group{border-bottom:1px solid #f0f0f0}.line-group .line{border-bottom:none}.line.markable{grid-template-columns:auto 1fr auto auto}.line-progress{margin-top:3px;font-size:12px;color:#667;display:flex;gap:6px;align-items:center;flex-wrap:wrap}.mark-btn{min-width:64px;min-height:44px;padding:0 12px;border:none;border-radius:8px;background:var(--navy);color:#fff;font-weight:700}.pill{padding:1px 8px;border-radius:999px;font-size:12px;font-weight:600;background:#eef1f4;color:#445}.pill.pending,.pill.requested{background:#fff3cd;color:#7a5c00}.pill.approved{background:#e3f4e7;color:#1d6b33}.pill.rejected,.pill.denied{background:#fde8e8;color:#9b1c1c}.mymark{display:flex;flex-wrap:wrap;align-items:center;justify-content:space-between;gap:8px;padding:0 0 10px;font-size:13px;color:#667}.mymark button{min-height:36px;padding:0 12px;border:1px solid #ccd;border-radius:8px;background:#fff;font-weight:600}.mymark .error{flex-basis:100%;margin-top:0}.sheet-tools{display:flex;gap:8px;padding:8px 16px 0}.sheet-tools button{flex:1;min-height:44px;border:1px solid var(--navy);border-radius:8px;background:#fff;color:var(--navy);font-weight:700}.marksheet,.extrassheet{z-index:30;max-height:85vh}.marksheet-body,.extras-body{padding:12px 16px 24px}.field{display:block;margin:12px 0}.fieldrow{display:flex;flex-wrap:wrap;gap:0 12px;margin:12px 0}.fieldrow>.field{flex:1 1 180px;margin:0 0 8px}.field>span{display:block;font-size:13px;font-weight:600;color:#445;margin-bottom:4px}.field input,.field select,.field textarea{width:100%;box-sizing:border-box;min-height:44px;padding:8px 10px;border:1px solid #ccd;border-radius:8px;font:inherit;background:#fff}.sheet-actions{display:flex;gap:8px;margin-top:16px}.sheet-actions button{flex:1;min-height:48px;border:1px solid #ccd;border-radius:8px;background:#fff;font-weight:700}.sheet-actions button.primary,button.primary{background:var(--navy);color:#fff;border-color:var(--navy)}.warn{margin:8px 0;padding:8px 12px;background:#fff3cd;border-radius:8px;color:#7a5c00}.onbehalf{margin:12px 0}.onbehalf>label{display:block;font-size:13px;font-weight:600;color:#445;margin-bottom:4px}.onbehalf-row{display:flex;gap:8px}.onbehalf-row select{flex:1;min-height:44px;padding:8px 10px;border:1px solid #ccd;border-radius:8px;font:inherit;background:#fff}.extralist{list-style:none;margin:0;padding:0}.extralist li{display:flex;align-items:center;justify-content:space-between;gap:8px;padding:10px 0;border-bottom:1px solid #f0f0f0}.extralist button{min-height:40px;padding:0 12px;border:1px solid var(--navy);border-radius:8px;background:#fff;color:var(--navy);font-weight:700}.bar .toggle{border:1px solid #ccd;border-radius:999px;background:#fff;min-height:36px;padding:0 12px;font-weight:600;color:#445}.bar .toggle[aria-pressed=true]{background:var(--navy);border-color:var(--navy);color:#fff}.bar .jobpct{font-weight:700}.weeklist{list-style:none;margin:0;padding:0}.weeklist li{display:flex;flex-wrap:wrap;align-items:center;justify-content:space-between;gap:8px;padding:10px 0;border-bottom:1px solid #f0f0f0}.week-photos{flex-basis:100%}.week-photos small{display:block;margin-bottom:4px;color:#667;font-size:12px}.weeklist .where{font-size:13px;color:#667}.hubcard{display:flex;flex-direction:column;gap:4px;min-height:64px;justify-content:center}.hub-sub{color:#667;font-size:13px}.filters{display:flex;gap:12px;flex-wrap:wrap;margin:12px 0}.filters label{flex:1;min-width:160px;margin:0;font-size:13px;font-weight:600;color:#445}.filters select{display:block;width:100%;min-height:44px;margin-top:4px;padding:6px 10px;border:1px solid #ccd;border-radius:8px;font:inherit;background:#fff}.revgroup{margin:20px 0}.revgroup h2{font-size:16px;margin:0 0 8px}.revgroup>button{min-height:44px;padding:0 14px;border:1px solid var(--navy);border-radius:8px;background:#fff;color:var(--navy);font-weight:700}.revlist{list-style:none;margin:10px 0 0;padding:0;display:flex;flex-direction:column;gap:10px}.revrow{background:#fff;border:1px solid #e2e6e9;border-radius:10px;padding:12px}.revrow.flagged{border-color:#f0b429;background:#fffdf5}.rev-what{font-weight:600}.rev-what small,.rev-who small{color:#667;font-weight:400}.rev-nums{display:flex;flex-wrap:wrap;gap:10px;align-items:baseline;margin-top:4px;font-size:13px;color:#667}.rev-nums strong{color:#223}.rev-nums .amt{font-size:15px}.rev-who{display:flex;flex-wrap:wrap;gap:8px;align-items:center;margin-top:4px;font-size:13px;color:#667}.rev-note{margin:8px 0 0;font-size:14px}.rev-photos{list-style:none;display:flex;flex-wrap:wrap;gap:8px;margin:10px 0 0;padding:0}.rev-photos .thumb{width:72px;height:72px;padding:0;border:1px solid #ddd;border-radius:8px;overflow:hidden;background:#f4f6f8}.rev-photos img{width:100%;height:100%;object-fit:cover;display:block}.rev-actions{display:flex;gap:8px;align-items:center;margin-top:12px}.rev-actions button{min-height:44px;padding:0 16px;border:1px solid #ccd;border-radius:8px;background:#fff;font-weight:700}.rev-actions button.primary{background:var(--navy);color:#fff;border-color:var(--navy)}.rev-actions button.danger{border-color:var(--error);color:var(--error)}.rev-actions input{flex:1;min-height:44px;padding:8px 10px;border:1px solid #ccd;border-radius:8px;font:inherit}.weekopen,.weekclosed{margin:20px 0}.weekopen h2,.weekclosed h2{font-size:16px;margin:0 0 4px}.subtotals{list-style:none;margin:10px 0;padding:0}.subtotals>li{padding:8px 0;border-bottom:1px solid #f0f0f0}.subtotal-head{display:flex;align-items:baseline;gap:8px}.subtotal-head small,.crewtotals small{color:#667;font-size:13px}.subtotals .amt{margin-left:auto;font-weight:700}.subtotal-total{display:flex;align-items:baseline;gap:8px;border-bottom:none;font-size:16px}.crewtotals{list-style:none;margin:6px 0 0;padding:0 0 0 14px;border-left:2px solid #e2e6e9}.crewtotals li{display:flex;align-items:baseline;gap:8px;padding:4px 0;font-size:14px}.linkish{min-height:32px;padding:0;border:none;background:none;color:var(--navy);font-weight:600;text-decoration:underline}.weekdetail{margin-top:12px;border-top:1px solid #e2e6e9;padding-top:10px}.payreq h4{margin:10px 0 6px;font-size:14px;display:flex;gap:8px}.payreq h4 .amt{margin-left:auto}.paylines{width:100%;border-collapse:collapse;font-size:13px}.paylines thead{display:none}.paylines tbody tr{display:block;border:1px solid #e2e6e9;border-radius:8px;margin-bottom:8px;padding:6px 8px}.paylines tbody td{display:flex;justify-content:space-between;gap:8px;padding:2px 0}.paylines td:before{content:attr(data-label);font-weight:600;color:#667;font-size:12px;text-transform:uppercase}@media(min-width:768px){.paylines thead{display:table-header-group}.paylines th{text-align:left;padding:6px 8px;background:#eef1f3;color:var(--navy);font-size:12px;text-transform:uppercase}.paylines tbody tr{display:table-row;border:none;border-bottom:1px solid #e2e6e9;border-radius:0;padding:0}.paylines tbody td{display:table-cell;padding:6px 8px}.paylines td:before{content:none}}.complist{list-style:none;margin:8px 0 0;padding:0}.complist li{display:flex;flex-wrap:wrap;align-items:center;gap:8px;padding:4px 0}.complist .kind{min-width:130px;font-size:13px;font-weight:600;color:#445}.complist small{color:#667;font-size:13px}.pill.state-ok{background:#e3f4e7;color:#1d6b33}.pill.state-soon{background:#fff3cd;color:#7a5c00}.pill.state-expired,.pill.state-missing{background:#fde8e8;color:#9b1c1c}.notes{padding:12px 16px 24px}.note-form{padding-bottom:12px;border-bottom:1px solid #dde3e8;margin-bottom:12px}.note-form h3{margin:0;font-size:14px;color:var(--navy)}.note-form button.primary{width:100%;min-height:48px;border:1px solid var(--navy);border-radius:8px;font-weight:700}.note{padding:10px 0;border-bottom:1px solid #f0f0f0}.note small{color:#667;font-size:12px}.note p{margin:4px 0 6px}.note-shots{display:flex;flex-wrap:wrap;gap:8px}.note-shots img{width:88px;height:88px;object-fit:cover;border-radius:8px;border:1px solid #dde3e8;cursor:pointer}.note button.link{min-height:32px;padding:0;border:none;background:none;font-size:13px;text-decoration:underline;cursor:pointer}.note-confirm{display:flex;flex-wrap:wrap;align-items:center;gap:8px;margin-top:6px;font-size:13px}.note-confirm button{min-height:36px;padding:0 12px;border:1px solid #ccd;border-radius:8px;background:#fff;font-weight:600}.note-confirm button.danger{border-color:var(--error);color:var(--error)}.undo-confirm{display:flex;align-items:center;gap:8px;flex-wrap:wrap;margin:6px 0;font-size:14px;color:#445}.undo-confirm button{min-height:36px;padding:6px 12px;border:1px solid #ccd;border-radius:8px;background:#fff;font-weight:700}.undo-confirm button.danger{border-color:var(--error);color:var(--error)}.markdone{font-weight:700;color:var(--navy)}.paidweek{color:#667}.rejectnote{color:#667;font-style:italic}button.more{min-height:44px;margin-top:12px;padding:0 16px;border:1px solid #ccd;border-radius:8px;background:#fff;font-weight:600}.shots{list-style:none;margin:0 0 8px;padding:0}.shot{display:flex;align-items:center;gap:8px;padding:3px 0;font-size:13px}.shot-name{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.shot-state{margin-left:auto;color:#667;font-size:12px}.shot.done .shot-state{color:#1d6b33}.shot.failed .shot-state{color:var(--error)}.shot button.link{min-height:32px;padding:0;border:none;background:none;color:var(--navy);font-weight:600;font-size:13px;text-decoration:underline;cursor:pointer}.shot button.shot-remove{margin-left:10px;color:#667}.shot button.link:disabled{opacity:.5}.photoqueue{list-style:none;margin:6px 0 0;padding:0}.photoqueue .pq{display:flex;align-items:center;gap:8px;padding:6px 0;border-bottom:1px solid #f0f0f0;font-size:13px}.photoqueue .pq-name{flex:1;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.photoqueue .pq-state{color:#667}.photoqueue .uploaded .pq-state{color:var(--ok, #1a7f37);font-weight:700}.photoqueue .failed .pq-state{color:var(--error);font-weight:700}.photoqueue .pq-why{color:var(--error);font-size:12px;font-weight:600}.mark-photos h3{margin:14px 0 6px;font-size:13px;font-weight:700;color:#556}.photoqueue button{min-height:32px;padding:0 10px;border:1px solid var(--navy);border-radius:8px;background:#fff;color:var(--navy);font-weight:700}.photoqueue button:disabled{opacity:.5}.photoqueue button.pq-remove{border:none;background:none;color:#667;font-weight:600;text-decoration:underline;padding:0 4px}.offlinebar{width:100%;min-height:36px;padding:6px 12px;border:1px solid var(--navy);border-radius:8px;background:#fff;color:var(--navy);font-weight:700;font-size:13px;text-align:left;box-shadow:0 1px 4px #00000026}.offlinebar.off{border-color:var(--error);color:var(--error)}.outboxsheet{background:#fff;border:1px solid #ddd;border-radius:8px;padding:4px 12px 8px;box-shadow:0 2px 8px #0003;overflow:auto;min-height:0}.outboxsheet-head{display:flex;align-items:center;justify-content:space-between;gap:8px}.outboxsheet-head h2{margin:6px 0;font-size:15px}.outboxsheet-head button{min-height:36px;padding:0 12px;border:1px solid var(--navy);border-radius:8px;background:var(--navy);color:#fff;font-weight:700}.outboxsheet-head button:disabled{opacity:.5}.outboxlist{list-style:none;margin:0;padding:0}.outboxlist .ob{display:flex;align-items:center;flex-wrap:wrap;gap:8px;padding:6px 0;border-bottom:1px solid #f0f0f0;font-size:13px}.outboxlist .ob-kind{font-weight:700}.outboxlist .ob-where{flex:1 1 auto;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;color:#445}.outboxlist .ob-state{color:#667}.outboxlist .failed .ob-state{color:var(--error);font-weight:700}.outboxlist .done .ob-state{color:var(--ok, #1a7f37);font-weight:700}.outboxlist .ob-error{order:9;flex-basis:100%;color:#667}.outboxlist button{min-height:32px;padding:0 10px;border:1px solid var(--navy);border-radius:8px;background:#fff;color:var(--navy);font-weight:700}.outboxlist button:disabled{opacity:.5}.outboxlist button.pq-remove{border:none;background:none;color:#667;font-weight:600;text-decoration:underline;padding:0 4px}.note-form .field small{display:block;margin-top:4px;color:#667;font-size:12px}.note-form .field small.warn{margin:4px 0 0;padding:0;background:none;color:var(--error);font-weight:700}.plan-tools{display:flex;align-items:center;gap:8px;margin:12px 0}.plan-tools .area-select{flex:1;min-width:0;margin:0}.areatabs{flex:1;min-width:0;display:flex;flex-wrap:nowrap;gap:6px;overflow-x:auto;-webkit-overflow-scrolling:touch}.areatabs .areatab{flex:0 0 auto;min-height:40px;padding:6px 14px;border:1px solid #ccd;border-radius:999px;background:#fff;color:var(--navy);font-weight:700;font-size:14px}.areatabs .areatab.on{background:var(--navy);border-color:var(--navy);color:#fff}.select-start{flex:0 0 auto;max-width:45%;min-height:44px;padding:4px 12px;border:1px solid #ccd;border-radius:10px;background:#fff;color:var(--navy);font-weight:700;font-size:14px;line-height:1.15;white-space:normal}.select-start.on{background:var(--navy);border-color:var(--navy);color:#fff}.selectbar{position:fixed;left:0;right:0;bottom:0;z-index:25;display:flex;flex-wrap:wrap;align-items:center;gap:10px;padding:10px 16px calc(10px + env(safe-area-inset-bottom));background:#fff;box-shadow:0 -4px 24px #0003}.selectbar span{flex:1;font-weight:700}.selectbar .hint{flex:1 1 100%;order:-1;margin:0 0 6px;padding:0;background:none;font-weight:600}.selectbar button{min-height:44px;padding:0 14px;border:1px solid #ccd;border-radius:10px;background:#fff;font-weight:700}.selectbar button.primary{border-color:var(--navy);background:var(--navy);color:#fff}.selectbar button:disabled{opacity:.5}svg polygon.room.picked{fill:#1f34484d;stroke:var(--navy);stroke-width:2;vector-effect:non-scaling-stroke}svg polygon.room.unselectable{fill:#0000000f;pointer-events:none}.batch-rooms{margin:4px 0 10px}.batch-room{padding:8px 0;border-bottom:1px solid #eee}.batch-room:last-child{border-bottom:none}.batch-room h3{margin:0;font-size:15px;display:flex;align-items:baseline;gap:8px}.batch-room h3 small{margin-left:auto;font-size:12px;font-weight:700;text-align:right}.batch-room h3 small.batch-ok{color:var(--ok, #1a7f37)}.batch-room h3 small.batch-bad{color:var(--error)}.batch-room ul{list-style:none;margin:4px 0 0;padding:0;color:#445;font-size:13px}.batch-room li{padding:1px 0}.batch-room .batch-total{margin:4px 0 0;font-weight:700}.reqrow{display:flex;align-items:center;gap:10px;padding:8px 0;border-bottom:1px solid #f0f0f0}.reqrow span{flex:1;font-weight:600;color:#445}.reqrow input{width:92px;min-height:44px;text-align:right;font-size:16px;border:1px solid #ddd;border-radius:8px;padding:6px 10px}.reqcard{padding:10px 0;border-bottom:1px solid #f0f0f0}.reqcard small{color:#667}.reqhead{display:flex;align-items:center;gap:8px;flex-wrap:wrap}.reqhead .reqjob{font-weight:700;color:#223}.reqitems{margin:4px 0;font-weight:600}.reqnote{margin:4px 0;color:#445}.reqhandled{display:block;margin-top:4px;color:#1a7f37}.reqhandle{display:grid;grid-template-columns:1fr auto;gap:8px;align-items:end}.reqhandle .field{margin:8px 0 0}.reqhandle button{min-height:44px;padding:0 16px;border-radius:8px;border:1px solid var(--navy)}@media(max-width:480px){.reqhandle{grid-template-columns:1fr}}.reqdot{display:inline-block;width:9px;height:9px;margin-left:6px;border-radius:50%;background:var(--ok, #1a7f37);vertical-align:middle}.pill.sent{background:#fdf3d7;color:#7a5b00}.pill.handled{background:#e3f3e6;color:#1a7f37}.ok{color:#1a7f37;font-weight:700}.sched{margin:0 0 12px}.sched-none{color:#667;margin:4px 0}.schedbar{display:flex;flex-wrap:wrap;align-items:baseline;gap:8px 16px;padding:8px 0}.scheddates{font-size:18px;color:var(--navy)}.schedfact{font-size:14px;color:#445}.schedfact small{display:block;font-size:11px;text-transform:uppercase;letter-spacing:.04em;color:#889}.scheddetail{margin:4px 0;display:grid;grid-template-columns:max-content 1fr;gap:2px 12px}.scheddetail dt{font-size:12px;text-transform:uppercase;letter-spacing:.04em;color:#889}.scheddetail dd{margin:0;color:#223}.schedflags{margin:8px 0 0;padding:8px 12px;background:#fff3cd;border-radius:8px}.schedflags h3{margin:0 0 4px;font-size:13px;text-transform:uppercase;letter-spacing:.04em;color:#7a5c00}.schedflag{margin:4px 0;color:#4a3a00}.flagask{display:block;font-size:13px}.flagask small{text-transform:uppercase;letter-spacing:.04em;color:#7a5c00;margin-right:6px}.schedboard .card-title small{color:#667;font-weight:400}.schedwhen{margin:4px 0;color:#223;display:flex;align-items:center;gap:8px;flex-wrap:wrap}.schedcounts{margin:4px 0 0;font-size:14px;color:#445}.schedcounts small{color:#667}.schedcard{display:flex;align-items:baseline;gap:8px 12px;flex-wrap:wrap;margin:0 0 8px;padding:8px 12px;background:#fff;border:1px solid #e6e8ea;border-radius:8px;text-decoration:none;color:inherit}.schedcard-title{font-size:12px;text-transform:uppercase;letter-spacing:.04em;color:#889}.schedcard-dates{font-weight:700;color:var(--navy)}.schedcard-out{flex:1 0 100%;margin:2px 0 0;text-align:center;font-size:14px}.matlist{display:block}.mat-none{color:#667}.matcard{padding:10px 0;border-bottom:1px solid #f0f0f0}.matcard:last-child{border-bottom:none}.matcard header{display:flex;align-items:baseline;gap:8px;flex-wrap:wrap}.matcard h3{margin:0;font-size:15px;color:#223}.matcard h3 small{display:block;font-weight:400;color:#667}.matpill{margin-left:auto;padding:2px 10px;border-radius:999px;font-size:12px;font-weight:700;background:#eef1f4;color:#445;white-space:nowrap}.matcard.in .matpill{background:#e3f4e7;color:#1d6b33}.matwas{margin:4px 0 0;font-size:13px;color:#7a5c00}.matover{margin:2px 0 0;font-size:13px;color:#445}.matovernote{display:block;color:#667}.matfacts{margin:6px 0 0;display:grid;grid-template-columns:max-content 1fr;gap:2px 12px}.matfacts dt{font-size:12px;text-transform:uppercase;letter-spacing:.04em;color:#889}.matfacts dd{margin:0;color:#223}.matreceipt{margin:6px 0 0;padding:6px 10px;background:#f4f8f5;border-radius:8px}.matreceipt p{margin:0;font-size:14px;color:#1d6b33}.matrqty{margin-left:8px;font-weight:700}.matrnote{color:#445!important}.matreceipt img{width:72px;height:72px;object-fit:cover;border-radius:6px;margin:6px 6px 0 0}.matactions{display:flex;gap:8px;flex-wrap:wrap;margin:8px 0 0}.matbtn{min-height:44px;padding:0 16px;border-radius:8px;border:1px solid var(--navy);background:#fff;color:var(--navy);font-size:15px;font-weight:600}.matbtn.primary{background:var(--navy);color:#fff;width:auto;margin-top:0}.matbtn[disabled]{opacity:.6}.matform{margin:8px 0 0;padding:8px 10px;background:#fafbfc;border-radius:8px}@media(max-width:480px){.scheddetail,.matfacts{grid-template-columns:1fr;gap:0}.scheddetail dt,.matfacts dt{margin-top:6px}}.contactcard{margin:0 0 8px;padding:10px 12px;background:#fff;border:1px solid #e6e8ea;border-radius:8px}.contactcard header{display:flex;align-items:baseline;gap:8px}.contactcard h3{margin:0;font-size:12px;text-transform:uppercase;letter-spacing:.04em;color:#889}.contactcard header .contactbtn{margin-left:auto}.contact-none{margin:4px 0 0;color:#667}.contactname{margin:2px 0 0;font-size:17px;font-weight:700;color:var(--navy)}.contactco{margin:0;color:#445}.contactlinks{display:flex;flex-wrap:wrap;gap:8px;margin:8px 0 0}.contactlink{display:inline-flex;align-items:center;min-height:44px;padding:0 18px;border:1px solid var(--navy);border-radius:8px;background:#fff;color:var(--navy);font-size:15px;font-weight:700;text-decoration:none}.contactraw{margin:6px 0 0;font-size:13px;color:#667;word-break:break-word}.contactconf{display:block;font-weight:400;font-size:13px}.contactby{margin:6px 0 0;font-size:12px;color:#889}.contactform{margin:4px 0 0}.contactactions{display:flex;gap:8px;flex-wrap:wrap;margin:8px 0 0}.contactbtn{min-height:44px;padding:0 16px;border-radius:8px;border:1px solid var(--navy);background:#fff;color:var(--navy);font-size:15px;font-weight:600;width:auto;margin-top:0}.contactbtn.primary{background:var(--navy);color:#fff;width:auto;margin-top:0}.contactbtn[disabled]{opacity:.6}.sitecard .contactco{font-size:15px;color:var(--navy)}.gantt{--gantt-week: 30px;--gantt-label: 190px;margin:0 0 16px}.gantt-scroll{overflow-x:auto;-webkit-overflow-scrolling:touch}.gantt-grid{position:relative;min-width:calc(var(--gantt-label) + var(--weeks) * var(--gantt-week))}.gantt-head,.gantt-row{display:grid;grid-template-columns:var(--gantt-label) minmax(0,1fr)}.gantt-row{color:inherit;text-decoration:none;border-top:1px solid #eef1f3}.gantt-row:hover{background:#f7f9fb}.gantt-track{position:relative;display:grid;grid-template-columns:repeat(var(--weeks),minmax(var(--gantt-week),1fr));align-items:center}.gantt-label{padding:6px 8px;overflow:hidden;position:sticky;left:0;z-index:1;background:#fff;border-right:1px solid #eef1f3}.gantt-row:hover .gantt-label{background:#f7f9fb}.gantt-label .gantt-name{margin-left:6px}.gantt-label small{display:block;color:#667;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.gantt-who+.gantt-who:before{content:" · "}.gantt-month,.gantt-weeklabel{font-size:11px;color:#667;text-align:center;border-left:1px solid #eef1f3;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.gantt-month{background:#d9e1f2;font-weight:600}.gantt-cell{height:28px;border-left:1px solid #f2f4f6}.gantt-bar{position:absolute;height:14px;border-radius:7px;display:flex;align-items:center;justify-content:flex-end;padding-right:2px;box-shadow:0 0 0 2px #fff}.gantt-bar.inprogress{background:#2e75b6}.gantt-bar.notstarted{background:#59708a}.gantt-bar.scheduled{background:#3ea5a5}.gantt-bar.other{background:#c9ced4}.gantt-mat{position:absolute;left:100%;margin-left:3px;font-size:10px;white-space:nowrap;background:#e9ecef;color:#343a40}.gantt-mat.short{background:#c92a2a;color:#fff}.gantt-mat.atrisk{background:#c2410c;color:#fff}.gantt-mat.watch{background:#ffd43b;color:#4d3b00}.gantt-mat.ordered{background:#1864ab;color:#fff}.gantt-mat.ready{background:#25793a;color:#fff}.gantt-mat.other{background:#e9ecef;color:#343a40}.gantt-legend.mat{margin-top:0}.swatch.mat.short{background:#c92a2a}.swatch.mat.atrisk{background:#c2410c}.swatch.mat.watch{background:#ffd43b}.swatch.mat.ordered{background:#1864ab}.swatch.mat.ready{background:#25793a}.swatch.mat.other{background:#e9ecef}.gantt-mat.flip{left:auto;right:100%;margin-left:0;margin-right:3px}.gantt-today{position:absolute;top:0;bottom:0;width:2px;background:#e6194b;opacity:.8;pointer-events:none}.gantt-legend{list-style:none;display:flex;flex-wrap:wrap;gap:12px;margin:0 0 6px;padding:0;font-size:12px;color:#445}.gantt-legend .swatch{display:inline-block;width:12px;height:12px;border-radius:2px;margin-right:5px;vertical-align:-1px}.gantt-hint{margin:0 0 8px;font-size:12px;color:#667}@media(min-width:1100px){.gantt{--gantt-week: 20px;--gantt-label: 240px }}.pill.punch-open{background:#eef1f4;color:#445}.pill.punch-submitted{background:#fff3cd;color:#7a5c00}.pill.punch-verified{background:#e3f4e7;color:#1d6b33}.pill.punch-returned{background:#fde8e8;color:#9b1c1c}.planbar-punch{background:#fff;color:var(--navy);border:2px solid var(--navy)}.planbar-punch.on{background:var(--navy);color:#fff}.punchcount{display:inline-block;min-width:20px;margin-left:6px;padding:0 5px;border-radius:999px;background:var(--error);color:#fff;font-size:12px;line-height:18px}.planbar-punch.on .punchcount{background:#fff;color:var(--navy)}.punchpanel{display:flex;flex-direction:column}.punchbody{padding:12px 16px 24px}.punchlist h3{margin:14px 0 6px;font-size:14px;color:#667;text-transform:none}.punchitems{list-style:none;margin:0;padding:0}.punchrow{display:flex;align-items:center;gap:8px;width:100%;min-height:44px;padding:8px 0;border:none;border-bottom:1px solid #eee;background:none;text-align:left;font:inherit}.punchno{flex:none;min-width:28px;font-weight:700;color:var(--navy)}.punchdesc{flex:1;min-width:0}.punchrow .pill{flex:none;margin-top:0}.punchitem{padding-bottom:24px}.punchitem>*:not(.sheet-head){margin-left:16px;margin-right:16px}.punch-head{display:flex;align-items:center;gap:12px;padding-top:10px}div.punch-returned{margin-top:10px;padding:8px 12px;border-left:3px solid var(--error);background:#fff6f6}div.punch-returned small{color:var(--error);font-weight:700}div.punch-returned p{margin:2px 0 0}.punch-pin{margin-top:12px;border:1px solid #e2e6e9;border-radius:8px;overflow:hidden}.punch-pin svg{display:block;width:100%;max-height:220px}.punch-dot{stroke:#fff;stroke-width:2;vector-effect:non-scaling-stroke;fill:#445}.punch-dot.punch-submitted{fill:#b58100}.punch-dot.punch-verified{fill:#1d6b33}.punch-dot.punch-returned{fill:var(--error)}.punch-place{width:calc(100% - 32px);min-height:44px;margin-top:12px;border-radius:10px;border:1px solid var(--navy);background:#fff;color:var(--navy);font-weight:700}.punchpin{pointer-events:all;cursor:pointer}.punchpin circle{fill:#445;stroke:#fff;stroke-width:2;vector-effect:non-scaling-stroke}.punchpin .punchpin-dot{fill:#fff;stroke:none}.punchpin.punch-submitted circle{fill:#b58100}.punchpin.punch-verified circle{fill:#1d6b33}.punchpin.punch-returned circle{fill:var(--error)}.punchpin.punch-submitted .punchpin-dot,.punchpin.punch-verified .punchpin-dot,.punchpin.punch-returned .punchpin-dot{fill:#fff}.punchpin:focus-visible circle{stroke:var(--navy);stroke-width:3}.plan-placing,.plan-placing svg.plan{cursor:crosshair}.plan-placebar{position:absolute;top:8px;left:8px;right:8px;z-index:2;display:flex;align-items:center;gap:8px;padding:8px 10px;border-radius:8px;background:var(--navy);color:#fff;font-size:13px;box-shadow:0 2px 8px #00000040}.plan-placebar span{flex:1;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.plan-placebar button{flex:none;min-height:32px;padding:0 12px;border-radius:6px;border:1px solid #fff;background:transparent;color:#fff;font-weight:700}.punch-side{margin-top:16px}.punch-side h4{margin:0 0 6px;font-size:14px}.punch-side .field{margin:8px 0 0}.punchitem .primary{width:calc(100% - 32px);min-height:48px;margin-top:16px;border-radius:10px;border:1px solid var(--navy);background:var(--navy);color:#fff;font-weight:700}.punchitem .primary:disabled{opacity:.5}.punch-actions{display:flex;gap:8px;margin-top:16px}.punch-actions .primary{margin-top:0}.punch-actions button{flex:1;min-height:44px;border-radius:10px;border:1px solid var(--navy);background:#fff;color:var(--navy);font-weight:700}.punch-return .danger{width:100%;min-height:44px;margin-top:8px;border-radius:10px;border:1px solid var(--error);background:var(--error);color:#fff;font-weight:700}.punch-return .danger:disabled,.card.form .primary:disabled{opacity:.5}.punch-history{list-style:none;margin:6px 0 0;padding:0;color:#667;font-size:13px}.punch-history li{padding:2px 0}.punch-history small{display:block;color:#889}.push{margin:18px 0 0}.push button{margin:0 8px 8px 0}.push .hint{margin-bottom:6px}.push-devices{list-style:none;margin:4px 0 10px;padding:0}.push-devices li{display:flex;flex-wrap:wrap;align-items:baseline;justify-content:space-between;gap:8px;padding:6px 0;border-bottom:1px solid #f0f0f0;font-size:14px}.push-devices small{color:#667}.push-what{margin:0 0 4px;padding-left:20px;color:#667;font-size:13px}.push-what li{margin:2px 0}.push-devices .here{font-style:normal;font-weight:600;margin-left:6px;color:var(--navy)}
