.ct{--border:#e2e5ea;--col-line:#edeff3;--ink:#1c2733;--muted:#6b7684;--accent:#1f6feb;--section-bg:#eef2f7;--hover:#f0f6ff;--note:#b45309;--neg:#b42318;--page:#fafbfc;color:var(--ink)}.ct.app,.ct .app{padding:16px 20px 30px}.ct header{flex-wrap:wrap;justify-content:space-between;align-items:flex-end;gap:16px;margin-bottom:14px;display:flex}.ct h1{margin:0 0 2px;font-size:20px}.ct .meta{color:var(--muted);margin:0;font-size:13px}.ct .stale{color:var(--note);font-weight:600}.ct .header-actions{flex-wrap:wrap;align-items:center;gap:10px;display:flex}.ct select{border:1px solid var(--border);background:#fff;border-radius:6px;padding:6px 8px;font-size:13px}.ct .range-label{color:var(--muted);align-items:center;gap:5px;font-size:12px;display:flex}.ct .search-input{border:1px solid var(--border);border-radius:6px;width:220px;padding:7px 10px;font-size:13px}.ct .view-toggle{border:1px solid var(--border);border-radius:6px;display:flex;overflow:hidden}.ct .view-toggle button{cursor:pointer;color:var(--ink);background:#fff;border:none;padding:7px 12px;font-size:13px}.ct .view-toggle button.active{background:var(--accent);color:#fff}.ct .cat-dropdown{position:relative}.ct .cat-button{border:1px solid var(--border);cursor:pointer;color:var(--ink);background:#fff;border-radius:6px;padding:7px 10px;font-size:13px}.ct .cat-menu{z-index:30;border:1px solid var(--border);background:#fff;border-radius:8px;min-width:240px;max-height:70vh;padding:8px 10px;position:absolute;top:calc(100% + 4px);left:0;overflow-y:auto;box-shadow:0 6px 20px #0f17201f}.ct .cat-menu-head{border-bottom:1px solid var(--border);gap:12px;margin-bottom:6px;padding-bottom:6px;display:flex}.ct .cat-menu-sub{border-top:1px solid var(--border);text-transform:uppercase;letter-spacing:.04em;color:var(--muted);margin-top:6px;padding:6px 2px 2px;font-size:11px}.ct .cat-option{cursor:pointer;align-items:center;gap:8px;padding:4px 2px;font-size:13px;display:flex}.ct .upload-screen{text-align:center;max-width:520px;margin:18vh auto}.ct .dropzone{border:2px dashed #0000;border-radius:12px;padding:30px}.ct .dropzone.drag-over,.ct.app.drag-over{outline:3px dashed var(--accent);outline-offset:-3px}.ct .drop-hint{background:var(--accent);color:#fff;z-index:20;pointer-events:none;border-radius:8px;width:fit-content;margin:0 auto;padding:10px 22px;font-size:14px;position:fixed;inset:auto 0 24px}.ct .upload-btn{background:var(--accent);color:#fff;cursor:pointer;border:none;border-radius:8px;padding:10px 18px;font-size:15px;display:inline-block}.ct .upload-btn.small{color:var(--accent);border:1px solid var(--accent);background:#fff;padding:6px 12px;font-size:13px}.ct .error{color:var(--neg)}.ct .board{max-height:calc(100vh - 150px);padding-bottom:4px;overflow:auto}.ct .board::-webkit-scrollbar{-webkit-appearance:none;width:12px;height:12px}.ct .board::-webkit-scrollbar-thumb{border:3px solid var(--page);background:#c4cad3;border-radius:6px}.ct .board::-webkit-scrollbar-track{background:var(--page)}.ct .board table{border-collapse:collapse;table-layout:fixed;font-size:13px}.ct .board th,.ct .board td{white-space:nowrap;text-overflow:ellipsis;padding:5px 10px;overflow:hidden}.ct .head-table{margin-bottom:10px}.ct .head-table th{z-index:3;background:var(--page);text-align:right;border-bottom:2px solid var(--border);font-weight:600;position:sticky;top:0}.ct .head-table th.code-col{text-align:left;z-index:4}.ct .section-table{border:1px solid var(--border);background:#fff;margin-bottom:18px}.ct .section-table td{border-bottom:1px solid var(--border)}.ct .section-table tr:last-child td{border-bottom:none}.ct .section-table td:not(.code-col){border-left:1px solid var(--col-line)}.ct .section-table td.total-col{border-left:2px solid var(--border)}.ct .code-col{z-index:1;text-align:left;border-right:1px solid var(--border);background:#fff;position:sticky;left:0}.ct .head-table .code-col{background:var(--page);border-right:none}.ct .code{color:var(--muted);font-variant-numeric:tabular-nums;margin-right:4px}.ct .chevron{color:var(--muted);width:10px;margin-right:6px;font-size:10px;display:inline-block}.ct .num{text-align:right;font-variant-numeric:tabular-nums}.ct .neg{color:var(--neg)}.ct .total-col{background:#fbfcfe;font-weight:600}.ct .wrap{white-space:normal}.ct .section-row td{background:var(--section-bg);font-weight:600}.ct .section-row .code-col{background:var(--section-bg)}.ct .total-table{background:#dfe9f5}.ct .grand-total-row td{background:#dfe9f5;font-weight:700}.ct .grand-total-row .code-col{background:#dfe9f5}.ct .sub-row td{color:#3d4854;background:#f7f9fb;font-size:12.5px}.ct .sub-row .code-col{background:#f7f9fb}.ct .sub-label{font-style:italic;padding-left:34px!important}.ct .clickable{cursor:pointer}.ct tbody tr.clickable:hover td,.ct td.clickable:hover{background:var(--hover)}.ct .noted{font-weight:600}.ct .noted:after{content:" •";color:var(--note)}.ct .moved-tag{color:var(--accent);background:#eaf1fd;border-radius:4px;margin-left:5px;padding:1px 5px;font-size:11px;font-style:italic}.ct .link{color:var(--accent);cursor:pointer;background:0 0;border:none;padding:0;font-size:13px}.ct .link.danger{color:var(--neg)}.ct .table-wrap{border:1px solid var(--border);background:#fff;border-radius:8px;max-height:calc(100vh - 190px);overflow:auto}.ct .table-wrap table{border-collapse:collapse;width:100%;font-size:13px}.ct .table-wrap th,.ct .table-wrap td{border-bottom:1px solid var(--border);padding:5px 10px}.ct .table-wrap thead th{z-index:2;text-align:left;border-bottom:2px solid var(--border);background:#fff;font-weight:600;position:sticky;top:0}.ct .table-wrap thead th.num{text-align:right}.ct .search-view td{white-space:normal}.ct .changes-view{border:1px solid var(--border);background:#fff;border-radius:8px;padding:16px 20px}.ct .changes-view h2{margin:10px 0 6px;font-size:15px}.ct .modal-backdrop{z-index:10;background:#0f172073;justify-content:center;align-items:center;display:flex;position:fixed;inset:0}.ct .modal{background:#fff;border-radius:10px;width:min(820px,94vw);max-height:84vh;padding:18px 22px;overflow-y:auto}.ct .modal-head{justify-content:space-between;align-items:center;gap:12px;display:flex}.ct .modal h2{margin:0;font-size:16px}.ct .modal h3{margin:18px 0 6px;font-size:14px}.ct .drill-table{border-collapse:collapse;width:100%;font-size:13px}.ct .drill-table th{text-align:left;color:var(--muted);font-weight:600}.ct .drill-table th.num{text-align:right}.ct .drill-table th,.ct .drill-table td{border-bottom:1px solid var(--col-line);padding:5px 8px}.ct .drill-table td{white-space:normal}.ct .drill-table tfoot td{border-top:2px solid var(--border);border-bottom:none;font-weight:600}.ct .move-picker{border:1px solid var(--border);background:#f7f9fb;border-radius:8px;margin:12px 0;padding:12px}.ct .move-picker-head{justify-content:space-between;margin-bottom:8px;display:flex}.ct .move-picker input{border:1px solid var(--border);border-radius:6px;width:100%;margin-bottom:8px;padding:7px 9px;font-size:13px}.ct .move-picker-list{flex-direction:column;max-height:200px;display:flex;overflow-y:auto}.ct .move-option{text-align:left;cursor:pointer;color:var(--ink);background:0 0;border:none;border-radius:5px;padding:5px 8px;font-size:13px}.ct .move-option:hover{background:var(--hover)}.ct .note-list{margin:0 0 10px;padding:0;list-style:none}.ct .note-list li{border-bottom:1px solid var(--col-line);align-items:baseline;gap:10px;padding:6px 0;font-size:13px;display:flex}.ct .note-initials{background:var(--section-bg);color:#37424e;border-radius:5px;padding:1px 7px;font-size:12px;font-weight:700}.ct .note-text{flex:1}.ct .note-form{flex-wrap:wrap;gap:8px;margin-top:10px;display:flex}.ct .note-form input{border:1px solid var(--border);border-radius:6px;padding:7px 9px;font-size:13px}.ct .initials-input{text-transform:uppercase;width:80px}.ct .note-form input[type=text]:not(.initials-input){flex:1;min-width:220px}.ct .note-form button{background:var(--accent);color:#fff;cursor:pointer;border:none;border-radius:6px;padding:7px 14px;font-size:13px}:root{--border:#e2e5ea;--ink:#1c2733;--muted:#6b7684;--accent:#1f6feb;--hover:#f0f6ff;--neg:#b42318;--page:#fafbfc;color:var(--ink);font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,sans-serif}*{box-sizing:border-box}body{background:var(--page);margin:0}.app{max-width:1100px;margin:0 auto;padding:0 20px 60px}.center-screen{justify-content:center;align-items:center;min-height:60vh;display:flex}.meta{color:var(--muted);font-size:13px}.error{color:var(--neg);font-size:14px}.empty-state{text-align:center;margin-top:60px;font-size:15px}.topbar{border-bottom:1px solid var(--border);justify-content:space-between;align-items:center;margin-bottom:26px;padding:14px 0;display:flex}.brand{color:var(--ink);letter-spacing:.01em;font-size:20px;font-weight:700;text-decoration:none}.topbar-actions{align-items:center;gap:16px;display:flex}.topbar-actions a{color:var(--accent);font-size:14px;text-decoration:none}.link{color:var(--accent);cursor:pointer;background:0 0;border:none;padding:0;font-size:14px}.link.danger{color:var(--neg)}.primary-btn{background:var(--accent);color:#fff;cursor:pointer;border:none;border-radius:6px;padding:8px 16px;font-size:14px}.primary-btn:disabled{opacity:.6}.login-screen{justify-content:center;align-items:center;min-height:100vh;display:flex}.login-card{border:1px solid var(--border);text-align:center;background:#fff;border-radius:12px;flex-direction:column;gap:12px;width:340px;padding:36px;display:flex}.login-card h1{margin:0;font-size:24px}.login-card input{border:1px solid var(--border);border-radius:7px;padding:10px 12px;font-size:15px}.login-card button[type=submit]{background:var(--accent);color:#fff;cursor:pointer;border:none;border-radius:7px;padding:10px;font-size:15px}.login-divider{color:var(--muted);align-items:center;gap:10px;font-size:12px;display:flex}.login-divider:before,.login-divider:after{content:"";border-top:1px solid var(--border);flex:1}.google-btn{border:1px solid var(--border);color:var(--ink);background:#fff;border-radius:7px;justify-content:center;align-items:center;gap:10px;padding:10px;font-size:15px;text-decoration:none;display:flex}.google-btn:hover{background:var(--hover)}.project-grid{grid-template-columns:repeat(auto-fill,minmax(280px,1fr));gap:22px;display:grid}.project-card{border:1px solid var(--border);color:var(--ink);background:#fff;border-radius:12px;text-decoration:none;transition:box-shadow .15s,transform .15s;overflow:hidden}.project-card:hover{transform:translateY(-2px);box-shadow:0 8px 24px #0f17201a}.project-card img{object-fit:cover;background:#e8edf3;width:100%;height:170px;display:block}.project-card-name{padding:14px 16px;font-size:16px;font-weight:600}.crumbs{color:var(--muted);margin-bottom:20px;font-size:14px}.crumbs a{color:var(--accent);text-decoration:none}.section-grid{grid-template-columns:repeat(auto-fill,minmax(220px,1fr));gap:18px;display:grid}.section-tile{border:1px solid var(--border);color:var(--ink);background:#fff;border-radius:10px;flex-direction:column;gap:6px;padding:26px 20px;text-decoration:none;transition:box-shadow .15s;display:flex}.section-tile:hover{box-shadow:0 6px 18px #0f172017}.section-name{font-size:16px;font-weight:600}.placeholder{border:1px dashed var(--border);text-align:center;background:#fff;border-radius:10px;padding:60px}.placeholder h2{margin:0 0 8px}.admin-panel{border:1px solid var(--border);background:#fff;border-radius:10px;padding:20px 24px}.admin-panel h2{margin:8px 0 12px;font-size:16px}.admin-table{border-collapse:collapse;width:100%;font-size:14px}.admin-table th{text-align:left;color:var(--muted);border-bottom:2px solid var(--border);padding:6px 10px;font-size:13px;font-weight:600}.admin-table td{border-bottom:1px solid var(--border);padding:8px 10px}.user-disabled td{opacity:.5}.row-actions{gap:12px;display:flex}.grants-cell{background:#f7f9fb}.grants-editor{flex-direction:column;gap:10px;padding:6px 0;display:flex}.grants-project{flex-wrap:wrap;align-items:center;gap:16px;font-size:14px;display:flex}.grant-option{cursor:pointer;align-items:center;gap:6px;font-size:14px;display:flex}.add-user{border-top:1px solid var(--border);margin-top:28px;padding-top:16px}.add-user-fields{flex-wrap:wrap;gap:10px;margin-bottom:12px;display:flex}.add-user-fields input,.add-user-fields select{border:1px solid var(--border);border-radius:6px;padding:8px 10px;font-size:14px}.add-user-fields input[type=email]{width:220px}.add-user .primary-btn{margin-top:12px}.modal-backdrop{z-index:10;background:#0f172073;justify-content:center;align-items:center;display:flex;position:fixed;inset:0}.modal{background:#fff;border-radius:10px;flex-direction:column;gap:12px;width:min(420px,92vw);padding:20px 24px;display:flex}.modal-head{justify-content:space-between;align-items:center;display:flex}.modal h2{margin:0;font-size:16px}.modal input{border:1px solid var(--border);border-radius:6px;padding:9px 11px;font-size:14px}.budget-banner{background:#fff8e6;border:1px solid #f0d998;border-radius:8px;flex-wrap:wrap;justify-content:space-between;align-items:center;gap:10px;margin-bottom:14px;padding:10px 14px;font-size:13px;display:flex}.notes-toggle{cursor:pointer;align-items:center;gap:7px;font-size:13px;display:flex}.budget-tabs{flex-wrap:wrap;gap:6px;margin-bottom:16px;display:flex}.budget-tabs button{border:1px solid var(--border);cursor:pointer;color:var(--ink);background:#fff;border-radius:7px;padding:7px 13px;font-size:13px}.budget-tabs button.active{background:var(--accent);color:#fff;border-color:var(--accent)}.stat-row{grid-template-columns:repeat(auto-fit,minmax(240px,1fr));gap:14px;margin-bottom:10px;display:grid}.stat-card{border:1px solid var(--border);background:#fff;border-radius:10px;padding:16px 18px}.stat-label{text-transform:uppercase;letter-spacing:.04em;color:var(--muted);font-size:12px;font-weight:600}.stat-value{font-variant-numeric:tabular-nums;margin:6px 0 4px;font-size:24px;font-weight:700}.basis-head{margin:22px 0 10px;font-size:15px}.basis-bty{border-top:3px solid #1f6feb}.basis-papered{border-top:3px solid #b45309}.basis-actual{border-top:3px solid #15803d}.budget-foot{margin-top:18px}.budget-table-wrap{border:1px solid var(--border);background:#fff;border-radius:10px;padding:14px 18px;overflow-x:auto}.budget-table-wrap h3{margin:22px 0 8px;font-size:14px}.budget-table{border-collapse:collapse;width:100%;font-size:13px}.budget-table th{text-align:left;color:var(--muted);border-bottom:2px solid var(--border);white-space:nowrap;padding:6px 8px;font-size:12px;font-weight:600}.budget-table th.num{text-align:right}.budget-table td{vertical-align:top;border-bottom:1px solid #eef0f3;padding:6px 8px}.budget-table .num{text-align:right;font-variant-numeric:tabular-nums;white-space:nowrap}.budget-table tfoot td{border-top:2px solid var(--border);border-bottom:none;font-weight:700}.over-budget td{background:#fef2f2}.notes-cell{color:#52606e;min-width:260px;font-size:12px}th.basis-bty-h{color:#1f6feb}th.basis-papered-h{color:#b45309}th.basis-actual-h{color:#15803d}.status-chip{white-space:nowrap;border-radius:5px;padding:2px 7px;font-size:11px;font-weight:600;display:inline-block}.st-signed{color:#15803d;background:#dcfce7}.st-draft{color:#92400e;background:#fef3c7}.st-internal{color:#6d28d9;background:#ede9fe}.flag-tag{color:#b45309;white-space:nowrap;cursor:help;background:#fef3c7;border-radius:4px;margin-left:6px;padding:1px 5px;font-size:11px}.findings{border:1px solid var(--border);background:#fff;border-radius:10px;padding:16px 22px}.findings ol{margin:8px 0 4px;padding-left:22px}.findings li{margin-bottom:12px;font-size:14px;line-height:1.5}.ref-bty{color:#1f6feb}.ref-est{color:#6d28d9}.ref-vendor{color:#15803d}.ref-btn{cursor:pointer;font-variant-numeric:tabular-nums;color:inherit;background:0 0;border:none;border-radius:4px;padding:2px 4px;font-size:13px}.ref-btn:hover:not(:disabled){background:var(--hover)}.ref-btn:disabled{cursor:default}.budget-input{text-align:right;border:1px solid var(--border);border-radius:5px;width:110px;padding:5px 7px;font-size:13px}.note-input{border:1px solid var(--border);border-radius:5px;width:160px;padding:5px 7px;font-size:12px}.dirty-row td{background:#fffbeb}.src-tag{color:#37424e;white-space:nowrap;background:#eef2f7;border-radius:4px;padding:1px 6px;font-size:10px;font-weight:600}.src-bty{color:#1d4ed8;background:#dbeafe}.src-internal-estimate{color:#6d28d9;background:#ede9fe}.src-vendor-contract{color:#15803d;background:#dcfce7}.mapping-callout{background:#fff8e6;border:1px solid #f0d998;border-radius:8px;margin-top:14px;padding:10px 14px;font-size:13px}.info-icon{cursor:help;color:var(--muted);vertical-align:1px;margin-left:5px;font-size:12px;font-weight:400}.info-icon:hover{color:var(--accent)}
