:root{--ink: #002626;--teal: #00b8b8;--teal-soft: #e3f7f7;--magenta: #e21c5b;--pink: #ffcadb;--grey: #d8d8d8;--band: #ececec;--paper: #ffffff;--surface: #f5f7f7;--text: #0f1f1f;--muted: #5b6b6b;--input: #1d4ed8;--input-bg: #f3f6ff;--rule: #002626;--font: "IBM Plex Sans", system-ui, sans-serif;--font-cond: "IBM Plex Sans Condensed", "IBM Plex Sans", system-ui, sans-serif;--nav-w: 232px}*{box-sizing:border-box}html,body,#root{height:100%}body{margin:0;font-family:var(--font);font-size:14px;line-height:1.45;color:var(--text);background:var(--surface)}button,input,select,textarea{font:inherit;color:inherit}a{color:var(--ink)}:focus-visible{outline:2px solid var(--teal);outline-offset:1px}@media (prefers-reduced-motion: reduce){*{transition:none!important;animation:none!important}}.shell{display:grid;grid-template-columns:var(--nav-w) 1fr;height:100%}.nav{background:var(--ink);color:#cfe3e3;overflow-y:auto;padding:16px 0 24px}.nav .brand{display:flex;align-items:center;gap:10px;padding:0 18px 18px;color:#fff;font-weight:600;text-decoration:none}.nav .brand svg{flex:none}.nav .back{display:block;padding:6px 18px 14px;color:#9fc3c3;text-decoration:none;font-size:13px}.nav .back:hover{color:#fff}.nav h4{margin:14px 18px 4px;font-size:12px;font-weight:500;color:#7fa6a6}.nav a.item,.nav span.item{display:flex;justify-content:space-between;align-items:baseline;padding:6px 18px 6px 15px;border-left:3px solid transparent;color:#e6f1f1;text-decoration:none}.nav a.item:hover{background:#0a3434}.nav a.item.active{border-left-color:var(--teal);background:#0b3a3a;color:#fff;font-weight:500}.nav span.item{color:#5e8585;cursor:default}.nav span.item small{font-size:11px;color:#4f7676}.nav .num{color:#6f9999;font-variant-numeric:tabular-nums;margin-right:8px;min-width:16px;display:inline-block}.main{display:flex;flex-direction:column;min-width:0;height:100%}.header{display:flex;align-items:center;gap:16px;padding:10px 24px;background:var(--paper);border-bottom:1px solid var(--grey);flex-wrap:wrap}.header h1{font-size:17px;margin:0;font-weight:600;color:var(--ink)}.header .version{color:var(--muted)}.header .spacer{flex:1}.content{flex:1;overflow:auto;padding:20px 24px 48px}.page-title{display:flex;align-items:baseline;gap:16px;margin:0 0 4px}.page-title h2{font-size:22px;margin:0;font-weight:600;color:var(--ink);letter-spacing:-.01em}.lede{color:var(--muted);margin:0 0 18px;max-width:72ch}.seg{display:inline-flex;border:1px solid var(--ink);border-radius:6px;overflow:hidden}.seg button{border:0;background:var(--paper);padding:4px 12px;cursor:pointer}.seg button+button{border-left:1px solid var(--ink)}.seg button.on{background:var(--ink);color:#fff}.btn{border:1px solid var(--ink);background:var(--paper);color:var(--ink);padding:6px 14px;border-radius:6px;cursor:pointer;font-weight:500}.btn:hover{background:var(--teal-soft)}.btn.primary{background:var(--ink);color:#fff}.btn.primary:hover{background:#0b3a3a}.btn.small{padding:2px 9px;font-size:13px}.btn.link{border:0;background:none;padding:0;text-decoration:underline;color:var(--ink)}.btn.danger{border-color:var(--magenta);color:var(--magenta)}.btn:disabled{opacity:.45;cursor:not-allowed}.toolbar{display:flex;gap:10px;align-items:center;flex-wrap:wrap;margin:0 0 14px}.chip{display:inline-flex;align-items:center;gap:8px;border-radius:999px;padding:3px 12px 3px 10px;font-size:13px;font-weight:500;border:1px solid;cursor:pointer;background:var(--paper)}.chip:before{content:"";width:8px;height:8px;border-radius:50%;background:currentColor}.chip.ok{color:#007575;border-color:var(--teal)}.chip.warn{color:#9b1240;border-color:var(--pink);background:#fff5f8}.chip.err{color:#fff;border-color:var(--magenta);background:var(--magenta)}.chip.busy{color:var(--muted);border-color:var(--grey)}.checks-pop{position:absolute;right:24px;top:54px;z-index:30;width:min(560px,90vw);max-height:60vh;overflow:auto;background:var(--paper);border:1px solid var(--ink);border-radius:8px;padding:12px 16px;box-shadow:0 10px 30px #0026262e}.sheet-wrap{overflow:auto;border:1px solid var(--grey);background:var(--paper);border-radius:4px;max-width:100%}table.sheet{border-collapse:separate;border-spacing:0;font-variant-numeric:tabular-nums;width:max-content;min-width:100%}.sheet th,.sheet td{padding:4px 10px;white-space:nowrap;border-bottom:1px solid #f0f0f0}.sheet thead th{position:sticky;top:0;z-index:2;background:var(--ink);color:#fff;font-family:var(--font-cond);font-weight:600;font-size:13px;vertical-align:bottom}.sheet thead th small{display:block;font-weight:500;color:#9fc3c3}.sheet th.num,.sheet td.num{text-align:right}.sheet th.txt,.sheet td.txt{text-align:left}.sheet .sticky{position:sticky;left:0;z-index:1;background:inherit}.sheet thead th.sticky{z-index:3;background:var(--ink)}.sheet thead th.box.sticky,.sheet thead th.box{background:#0b3a3a}.sheet tbody tr{background:var(--paper)}.sheet tr.band td{background:var(--band);font-weight:600;color:var(--ink);padding-top:7px}.sheet tr.total td{border-top:1.5px solid var(--rule);font-weight:600}.sheet tr.grand td{border-top:1.5px solid var(--rule);border-bottom:3px double var(--rule);font-weight:700}.sheet tr.sub td{color:var(--muted)}.sheet tr.flag td{background:#fff1f5}.sheet tr.flag td:first-child{box-shadow:inset 3px 0 0 var(--magenta)}.sheet td.indent{padding-left:26px}.sheet td.box,.sheet th.box{background:#f2fafa;border-left:1.5px solid var(--ink);border-right:1.5px solid var(--ink)}.sheet thead th.box{background:#0b3a3a}.sheet .grp{border-left:2px solid var(--ink)}.sheet .alt{background:#f8fbfb}.sheet td.calc{cursor:zoom-in}.sheet td.calc:hover{background:var(--teal-soft)}.sheet td.neg{color:var(--text)}.sheet .muted{color:var(--muted)}.sheet caption{caption-side:top;text-align:left;font-weight:600;color:var(--ink);padding:0 0 6px}.cell-input{width:100%;min-width:64px;border:1px solid transparent;background:var(--input-bg);color:var(--input);padding:2px 6px;border-radius:3px;font-variant-numeric:tabular-nums}.cell-input.num{text-align:right}.cell-input:hover{border-color:#b9c8f3}.cell-input:focus{border-color:var(--input);background:#fff;outline:none}.cell-input:disabled{background:transparent;color:var(--input);opacity:1}.cell-input.bad{border-color:var(--magenta);background:#fff1f5}select.cell-input{padding-right:2px}td.inp{padding:2px 4px}.legend{display:flex;gap:18px;color:var(--muted);font-size:13px;margin:0 0 12px;flex-wrap:wrap}.legend .sw-in{color:var(--input);background:var(--input-bg);padding:0 6px;border-radius:3px}.legend .sw-flag{background:#fff1f5;box-shadow:inset 3px 0 0 var(--magenta);padding:0 8px}.section{margin:0 0 26px}.section>h3{font-size:15px;margin:0 0 8px;color:var(--ink);font-weight:600}.section>p.note{color:var(--muted);margin:-4px 0 8px;font-size:13px;max-width:80ch}.grid2{display:grid;grid-template-columns:minmax(0,1fr) minmax(0,1fr);gap:24px;align-items:start}@media (max-width: 1100px){.grid2{grid-template-columns:1fr}}.form{display:grid;grid-template-columns:max-content minmax(220px,420px);gap:8px 16px;align-items:center}.form label{color:var(--muted)}.form textarea.cell-input{min-height:64px;resize:vertical}.strip{display:flex;gap:0;border:1px solid var(--grey);background:var(--paper);margin:0 0 18px;border-radius:4px;overflow:hidden;flex-wrap:wrap}.strip>div{padding:10px 18px;border-right:1px solid var(--grey);min-width:170px}.strip>div:last-child{border-right:0}.strip .k{font-size:12px;color:var(--muted)}.strip .v{font-size:20px;font-weight:600;color:var(--ink);font-variant-numeric:tabular-nums}.strip .v small{font-size:12px;font-weight:500;color:var(--muted);margin-left:6px}.badge{display:inline-block;padding:0 8px;border-radius:999px;font-size:12px;font-weight:500}.badge.flag{background:var(--pink);color:#7a0f33}.badge.ok{background:var(--teal-soft);color:#006060}.badge.lock{background:var(--band);color:var(--ink)}.trace{position:fixed;top:0;right:0;bottom:0;width:min(440px,92vw);background:var(--paper);border-left:2px solid var(--ink);z-index:40;display:flex;flex-direction:column;box-shadow:-12px 0 30px #0026261f}.trace header{padding:14px 18px;background:var(--ink);color:#fff;display:flex;justify-content:space-between;align-items:start;gap:12px}.trace header h3{margin:0;font-size:15px}.trace header .v{font-size:22px;font-weight:600;font-variant-numeric:tabular-nums}.trace .body{overflow:auto;padding:14px 18px}.trace .formula{background:var(--surface);border-left:3px solid var(--teal);padding:8px 12px;margin:0 0 14px}.trace h4{margin:14px 0 6px;font-size:13px;color:var(--muted);font-weight:500}.trace ul{list-style:none;margin:0;padding:0}.trace li{display:flex;justify-content:space-between;gap:10px;padding:5px 0;border-bottom:1px solid #f0f0f0}.trace li button{background:none;border:0;padding:0;color:var(--ink);text-decoration:underline;cursor:pointer;text-align:left}.trace li code{color:var(--input);font-size:12px}.trace .crumbs{font-size:12px;color:#9fc3c3;margin-top:4px}.trace .crumbs button{background:none;border:0;color:#cfe3e3;text-decoration:underline;padding:0;cursor:pointer;font-size:12px}.toast{position:fixed;bottom:18px;left:50%;transform:translate(-50%);background:var(--magenta);color:#fff;padding:10px 18px;border-radius:6px;z-index:60;max-width:80vw;box-shadow:0 6px 20px #0003}.toast.info{background:var(--ink)}.scrim{position:fixed;inset:0;background:#00262659;z-index:50;display:grid;place-items:center}.modal{background:var(--paper);border-radius:8px;padding:20px 22px;width:min(640px,92vw);max-height:86vh;overflow:auto;border-top:4px solid var(--teal)}.modal h3{margin:0 0 12px;color:var(--ink)}.modal .actions{display:flex;justify-content:flex-end;gap:10px;margin-top:16px}.modal textarea{width:100%;min-height:180px;font-family:ui-monospace,monospace;font-size:12px}.login{min-height:100%;display:grid;grid-template-columns:minmax(320px,1fr) minmax(320px,1.1fr)}.login .side{background:var(--ink);color:#dff0f0;padding:56px;display:flex;flex-direction:column;justify-content:space-between}.login .side .mark{font-size:40px;line-height:1.1;font-weight:600;color:#fff;max-width:14ch;letter-spacing:-.02em}.login .side .rows{font-variant-numeric:tabular-nums;border-top:1px solid #1c4a4a}.login .side .rows div{display:flex;justify-content:space-between;padding:8px 0;border-bottom:1px solid #1c4a4a}.login .side .rows div.t{border-top:1.5px solid var(--teal);font-weight:600;color:#fff}.login .panel{display:grid;place-items:center;padding:40px;background:var(--paper)}.login .panel>div{width:min(380px,100%)}.login .panel h2{margin:0 0 6px;color:var(--ink)}.google-btn{display:flex;align-items:center;justify-content:center;gap:10px;width:100%;padding:10px;border:1px solid #c8d0d0;border-radius:6px;background:#fff;cursor:pointer;font-weight:500;text-decoration:none;color:var(--text)}.google-btn:hover{border-color:var(--ink)}.err-text{color:var(--magenta)}@media (max-width: 800px){.login{grid-template-columns:1fr}.login .side{padding:32px}.shell{grid-template-columns:1fr}.nav{display:none}}.proj-name{font-weight:600;color:var(--ink);text-decoration:none}.proj-name:hover{text-decoration:underline}.proj-addr{display:block;color:var(--muted);font-size:12px;font-weight:400}.chart{background:var(--paper);border:1px solid var(--grey);border-radius:4px;padding:10px 12px 6px}.chart h4{margin:0 0 6px;font-size:13px;color:var(--ink);font-weight:600}.chart svg text{font-family:var(--font);font-size:11px;fill:var(--muted)}.viewer{display:grid;grid-template-columns:minmax(320px,.9fr) minmax(0,1.4fr);gap:16px;align-items:start}.viewer .doc{position:sticky;top:0;border:1px solid var(--grey);background:var(--paper);height:calc(100vh - 200px);min-height:420px;display:flex;flex-direction:column}.viewer .doc iframe{flex:1;border:0;width:100%}.viewer .doc .doc-head{padding:6px 10px;border-bottom:1px solid var(--grey);display:flex;gap:8px;align-items:center}.viewer .doc .empty{padding:24px;color:var(--muted)}@media (max-width: 1200px){.viewer{grid-template-columns:1fr}.viewer .doc{position:static;height:480px}}.toolbar .cell-input{width:auto;min-width:140px}.sheet td.na{background:repeating-linear-gradient(135deg,#ececec 0 6px,#d8d8d8 6px 7px)}.sheet td.ro{color:var(--ink);font-weight:600}.sheet td.dim .cell-input{opacity:.45}.kpis{display:grid;grid-template-columns:repeat(auto-fill,minmax(250px,1fr));gap:0;border:1px solid var(--grey);background:var(--paper);margin:0 0 20px}.kpi{padding:12px 16px;border-right:1px solid var(--grey);border-bottom:1px solid var(--grey);cursor:zoom-in}.kpi:hover{background:var(--teal-soft)}.kpi .k{font-size:13px;color:var(--muted)}.kpi .vals{display:flex;gap:18px;align-items:baseline;margin-top:4px;font-variant-numeric:tabular-nums}.kpi .vals div{display:flex;flex-direction:column}.kpi .vals small{font-size:11px;color:var(--muted)}.kpi .vals b{font-size:20px;font-weight:600;color:var(--ink)}.kpi .vals .pf b{color:#007575}.print-only{display:none}.tearsheet{background:var(--paper);border:1px solid var(--grey);padding:18px 20px;max-width:1280px}.ts-head{display:flex;justify-content:space-between;align-items:flex-end;border-bottom:3px solid var(--ink);padding-bottom:8px;margin-bottom:10px}.ts-head h2{margin:0;font-size:20px;color:var(--ink)}.ts-case{text-align:right;font-weight:600;color:#007575}.ts-case small{color:var(--muted);font-weight:400}.ts-grid{display:grid;grid-template-columns:1fr 1fr 1.15fr;gap:18px}.ts-grid h4{margin:10px 0 4px;font-size:12.5px;color:var(--ink);border-bottom:1px solid var(--teal);padding-bottom:2px}.ts-grid h4:first-child{margin-top:0}.tearsheet .sheet th,.tearsheet .sheet td{padding:2px 6px;font-size:12px}.tearsheet .sheet.kv{width:100%;min-width:0}.tearsheet .chart{border:0;padding:6px 0 0}.ts-foot{margin-top:10px;font-size:11px;color:var(--muted);border-top:1px solid var(--grey);padding-top:4px}@media (max-width: 1100px){.ts-grid{grid-template-columns:1fr}}@page{size:letter landscape;margin:.35in}@media print{body{background:#fff;font-size:11px}.nav,.header,.no-print,.toast,.trace{display:none!important}.shell{display:block;height:auto}.main,.content{display:block;overflow:visible;height:auto;padding:0}.print-only{display:block;font-size:15px;margin:0 0 8px;color:var(--ink)}.tearsheet{border:0;padding:0;max-width:none}.ts-grid{grid-template-columns:1fr 1fr 1.15fr}.sheet-wrap{overflow:visible;border:0;max-height:none!important}.sheet thead th,.sheet .sticky{position:static}*{-webkit-print-color-adjust:exact;print-color-adjust:exact}}a.btn{text-decoration:none;display:inline-block}
