:root{--sidebar-w: 220px;--topbar-h: 56px;--color-bg: #f6f7f9;--color-surface: #ffffff;--color-border: #e2e5ea;--color-text: #1c2230;--color-muted: #6b7280;--color-accent: #2563eb;--color-accent-contrast: #ffffff;--color-accent-2: #0ea5e9;--color-accent-2-contrast: #ffffff;--color-error-bg: #fdecea;--color-error-text: #97231b;--radius: 8px;--touch: 44px;--space: 16px}*{box-sizing:border-box}html,body,#root{height:100%}body{margin:0;font-family:system-ui,-apple-system,Segoe UI,Roboto,Helvetica,Arial,sans-serif;color:var(--color-text);background:var(--color-bg);-webkit-font-smoothing:antialiased}.app-shell{min-height:100%}.topbar{position:sticky;top:0;z-index:30;display:flex;align-items:center;gap:12px;height:var(--topbar-h);padding:0 var(--space);background:var(--color-surface);border-bottom:1px solid var(--color-border)}.topbar-title{font-weight:600}.hamburger{width:var(--touch);height:var(--touch);font-size:20px;line-height:1;border:1px solid var(--color-border);border-radius:var(--radius);background:var(--color-surface);cursor:pointer}.sidebar{position:fixed;top:0;left:0;z-index:40;width:var(--sidebar-w);height:100%;padding:var(--space);background:var(--color-surface);border-right:1px solid var(--color-border);transform:translate(-100%);transition:transform .2s ease;overflow-y:auto;display:flex;flex-direction:column}.sidebar-open{transform:translate(0)}.sidebar-brand{font-size:18px;font-weight:700;margin-bottom:var(--space)}.nav-backdrop{position:fixed;top:0;right:0;bottom:0;left:0;z-index:35;background:#00000059}.nav-list{list-style:none;margin:0;padding:0}.nav-link{display:flex;align-items:center;min-height:var(--touch);padding:0 12px;margin-bottom:4px;border-radius:var(--radius);color:var(--color-text);text-decoration:none;font-weight:500}.nav-link:hover{background:var(--color-bg)}.nav-link.active{background:var(--color-accent);color:var(--color-accent-contrast)}.content{padding:var(--space);max-width:100%}.page{max-width:1100px;margin:0 auto}.page h1{margin-top:0}.muted{color:var(--color-muted)}.banner{padding:12px 14px;border-radius:var(--radius);margin-bottom:var(--space)}.banner-error{background:var(--color-error-bg);color:var(--color-error-text);border:1px solid #f3c2bd}.table-wrap{width:100%;overflow-x:auto;-webkit-overflow-scrolling:touch;border:1px solid var(--color-border);border-radius:var(--radius);background:var(--color-surface)}table{width:100%;border-collapse:collapse;min-width:480px}th,td{text-align:left;padding:12px;border-bottom:1px solid var(--color-border);white-space:nowrap}th{font-weight:600;background:var(--color-bg);border-bottom:2px solid var(--color-accent-2)}tbody tr:last-child td{border-bottom:none}input,select,textarea,button{font:inherit}input,select,textarea{min-height:var(--touch);padding:8px 10px;border:1px solid var(--color-border);border-radius:var(--radius);background:var(--color-surface);color:var(--color-text);max-width:100%}button{min-height:var(--touch);padding:8px 14px;border-radius:var(--radius);border:1px solid var(--color-border);background:var(--color-surface);cursor:pointer}button.primary{background:var(--color-accent);color:var(--color-accent-contrast);border-color:var(--color-accent)}button.danger{background:var(--color-error-text);color:#fff;border-color:var(--color-error-text)}button.danger-ghost{color:var(--color-error-text);border-color:#f3c2bd;background:var(--color-surface)}.banner{display:flex;align-items:flex-start;justify-content:space-between;gap:12px}.banner-dismiss{min-height:auto;padding:0 8px;border:none;background:transparent;color:inherit;font-size:20px;line-height:1;cursor:pointer}.page-head{display:flex;align-items:center;justify-content:space-between;gap:12px;flex-wrap:wrap}.toolbar{display:flex;align-items:center;gap:12px;flex-wrap:wrap;margin-bottom:var(--space)}.toolbar .search{flex:1 1 220px}.checkbox{display:inline-flex;align-items:center;gap:8px;min-height:var(--touch)}.checkbox input{min-height:auto}.row-inactive td{color:var(--color-muted)}.row-actions{display:flex;gap:8px;white-space:nowrap}.modal-backdrop{position:fixed;top:0;right:0;bottom:0;left:0;z-index:50;background:#0006;display:flex;align-items:flex-end;justify-content:center;padding:0}.modal,.side-panel{background:var(--color-surface);width:100%;max-height:90vh;overflow-y:auto;padding:var(--space);border-top-left-radius:16px;border-top-right-radius:16px}.modal{max-width:440px}.modal-title{margin-top:0}.modal-body{color:var(--color-text)}.modal-actions{display:flex;justify-content:flex-end;gap:12px;margin-top:var(--space)}.form-grid{display:flex;flex-direction:column;gap:12px}.form-grid label{display:flex;flex-direction:column;gap:6px;font-weight:500}.form-grid label.checkbox{flex-direction:row;align-items:center}.money-input{display:flex;align-items:center;border:1px solid var(--color-border);border-radius:var(--radius);background:var(--color-surface);overflow:hidden}.money-prefix{padding:0 4px 0 10px;color:var(--color-muted)}.money-input input{border:none;flex:1;min-width:0}.lists-layout{display:grid;grid-template-columns:1fr;gap:var(--space)}.panel{background:var(--color-surface);border:1px solid var(--color-border);border-radius:var(--radius);padding:var(--space)}.panel-title{margin-top:0;display:flex;align-items:center;gap:8px}.panel-footer{margin-top:var(--space)}.type-list{list-style:none;margin:0 0 var(--space);padding:0}.type-item{display:flex;align-items:center;justify-content:space-between;gap:8px;width:100%;min-height:var(--touch);margin-bottom:4px;text-align:left}.type-item.active{background:var(--color-accent);color:var(--color-accent-contrast);border-color:var(--color-accent)}.lock{font-size:13px}.inline-add{display:flex;gap:8px}.inline-add input{flex:1;min-width:0}.value-list{list-style:none;margin:0 0 var(--space);padding:0}.value-row{display:flex;align-items:center;gap:8px;padding:6px 0;border-bottom:1px solid var(--color-border);flex-wrap:wrap}.value-row.inactive .value-name{color:var(--color-muted);text-decoration:line-through}.value-name{flex:1 1 140px;min-width:0}.value-actions{display:flex;gap:4px;flex-wrap:wrap}.value-actions button{min-width:var(--touch);padding:8px}.muted-btn{color:var(--color-muted)}.card{background:var(--color-surface);border:1px solid var(--color-border);border-radius:var(--radius);padding:var(--space)}.contact-cards{display:grid;grid-template-columns:1fr;gap:12px}.contact-card.is-primary{border-color:var(--color-accent);box-shadow:inset 0 0 0 1px var(--color-accent)}.contact-card-head{display:flex;align-items:center;justify-content:space-between;gap:8px;flex-wrap:wrap;margin-bottom:8px}.contact-card-body{line-height:1.5}.contact-fieldset{border:1px solid var(--color-border);border-radius:var(--radius);padding:12px;margin:0}.contact-fieldset legend{font-weight:600;padding:0 6px}@media(min-width:768px){.topbar,.nav-backdrop{display:none}.sidebar{transform:none;transition:none}.content{margin-left:var(--sidebar-w);padding:24px 32px}.lists-layout{grid-template-columns:minmax(220px,300px) 1fr;align-items:start}.modal-backdrop{align-items:center;padding:var(--space)}.modal,.side-panel{border-radius:var(--radius)}.side-panel{max-width:480px}.contact-cards{grid-template-columns:repeat(auto-fill,minmax(260px,1fr))}}.badge{display:inline-block;padding:2px 10px;border-radius:999px;font-size:13px;font-weight:600;line-height:1.6;white-space:nowrap;border:1px solid transparent}.badge-draft{background:#eef1f5;color:#47506a;border-color:#dde1ea}.badge-in_progress{background:#e5efff;color:#1e4fbf;border-color:#c9ddff}.badge-completed{background:#e6f6ec;color:#1c7c43;border-color:#c7ecd4}.badge-invoiced{background:#ede7fb;color:#5b3bbf;border-color:#d9cdf6}.badge-cancelled{background:#f3f4f6;color:#8a8f99;border-color:#e2e5ea;text-decoration:line-through}.badge-sent{background:#e5efff;color:#1e4fbf;border-color:#c9ddff}.badge-paid{background:#e6f6ec;color:#1c7c43;border-color:#c7ecd4}.badge-void{background:#fdecea;color:#97231b;border-color:#f3c2bd;text-decoration:line-through}.badge-unknown{background:#eef1f5;color:#47506a}.row-clickable:hover td{background:var(--color-bg)}.job-head-row{display:flex;flex-wrap:wrap;gap:var(--space);justify-content:space-between;margin-bottom:var(--space)}.job-customer-link{font-size:18px;font-weight:600;color:var(--color-accent);text-decoration:none}.job-customer-link:hover{text-decoration:underline}.status-row{display:flex;align-items:center;gap:8px;flex-wrap:wrap}.job-header-form{margin-top:var(--space)}.lock-notice{background:#ede7fb;color:#5b3bbf;border:1px solid #d9cdf6}.line-editor{display:flex;flex-direction:column;gap:var(--space)}.line-table{min-width:640px}.line-table th,.line-table td{vertical-align:top;padding:8px}.line-table .col-amount,.line-table .col-price,.line-table .col-qty{text-align:right;white-space:nowrap}.line-table tfoot td{border-top:2px solid var(--color-border);border-bottom:none}.total-cell{font-size:16px}.line-input{width:100%;min-width:120px}.qty-input{width:72px;text-align:right}.line-attrs{font-size:13px;margin-top:4px}.line-actions{display:flex;gap:6px;align-items:center;flex-wrap:wrap}.icon-btn{min-width:var(--touch);padding:8px 10px}.attrs-field{margin-top:6px}.attrs-input{font-size:13px}.attrs-insert{margin-top:4px}.link-btn{min-height:auto;padding:4px 0;border:none;background:transparent;color:var(--color-accent);cursor:pointer;font-size:13px}.attrs-picker{margin-top:6px;padding:8px;border:1px solid var(--color-border);border-radius:var(--radius);background:var(--color-bg)}.attrs-values{display:flex;flex-wrap:wrap;gap:6px;margin-top:8px}.chip{min-height:auto;padding:6px 10px;border-radius:999px;border:1px solid var(--color-border);background:var(--color-surface);font-size:13px;cursor:pointer}.chip:hover{border-color:var(--color-accent-2);color:var(--color-accent-2)}.add-line{border:1px dashed var(--color-border);border-radius:var(--radius);padding:var(--space);background:var(--color-surface)}.add-line-title{margin:0 0 12px;font-size:15px}.add-line-service{margin-bottom:12px;position:relative}.add-line-service label{display:flex;flex-direction:column;gap:6px;font-weight:500}.service-suggestions{list-style:none;margin:4px 0 0;padding:0;border:1px solid var(--color-border);border-radius:var(--radius);background:var(--color-surface);max-height:240px;overflow-y:auto}.service-suggestions li{border-bottom:1px solid var(--color-border)}.service-suggestions li:last-child{border-bottom:none}.service-suggestions button{width:100%;display:flex;justify-content:space-between;gap:12px;border:none;border-radius:0;background:transparent;text-align:left}.service-suggestions button:hover{background:var(--color-bg)}.add-line-fields{display:flex;flex-direction:column;gap:12px}.add-line-fields label{display:flex;flex-direction:column;gap:6px;font-weight:500}.add-btn{align-self:stretch}.attachments-panel{margin-top:0}.drop-zone{border:2px dashed var(--color-border);border-radius:var(--radius);padding:var(--space);text-align:center;cursor:pointer;margin-bottom:var(--space);min-height:var(--touch)}.drop-zone.drag-over{border-color:var(--color-accent);background:#eef4ff}.drop-zone p{margin:0}.visually-hidden-file{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0 0 0 0);white-space:nowrap;border:0}.attachment-cards{display:grid;grid-template-columns:1fr;gap:12px}.attachment-card{display:flex;flex-direction:column;gap:12px}.attachment-thumb{width:100%;height:140px;border-radius:var(--radius);border:1px solid var(--color-border);background:var(--color-bg);display:flex;align-items:center;justify-content:center;overflow:hidden}.attachment-thumb img{max-width:100%;max-height:100%;object-fit:contain}.file-icon{font-weight:700;color:var(--color-muted);letter-spacing:1px}.attachment-body{display:flex;flex-direction:column;gap:8px}.attachment-body label{display:flex;flex-direction:column;gap:4px;font-weight:500;font-size:14px}.attachment-name{font-weight:600;word-break:break-all}.attachment-size{font-size:13px}.attachment-actions{display:flex;gap:8px;flex-wrap:wrap;align-items:center}.button-link{display:inline-flex;align-items:center;min-height:var(--touch);padding:8px 14px;border:1px solid var(--color-border);border-radius:var(--radius);background:var(--color-surface);color:var(--color-text);text-decoration:none}.invoice-actions{flex-wrap:wrap}.totals-block{margin-top:var(--space);margin-left:auto;width:100%;max-width:340px;border:1px solid var(--color-border);border-radius:var(--radius);background:var(--color-bg);padding:12px var(--space)}.totals-row{display:flex;justify-content:space-between;gap:12px;padding:4px 0;font-variant-numeric:tabular-nums}.totals-grand{border-top:2px solid var(--color-accent-2);margin-top:6px;padding-top:10px;font-weight:700;font-size:1.05rem}th.num,td.num{text-align:right;font-variant-numeric:tabular-nums}.invoice-money-summary{display:flex;flex-wrap:wrap;gap:var(--space);margin-top:var(--space);padding:12px var(--space);border:1px solid var(--color-border);border-radius:var(--radius);background:var(--color-bg)}.money-figure{display:flex;flex-direction:column;gap:2px;min-width:120px;flex:1 1 120px}.money-figure-value{font-size:1.15rem;font-weight:600;font-variant-numeric:tabular-nums}.money-figure-balance .money-figure-value{color:var(--color-accent);font-size:1.3rem;font-weight:700}.payments-table{min-width:480px}.payments-summary{display:flex;justify-content:space-between;gap:12px;margin-top:var(--space);padding-top:12px;border-top:2px solid var(--color-accent-2);font-variant-numeric:tabular-nums;font-size:1.05rem}.record-payment-form{margin-top:var(--space)}.record-payment-form .panel-title{margin-bottom:0;font-size:1rem}.payments-table.credit-ledger{min-width:640px}.credit-headline{display:flex;flex-direction:column;align-items:flex-end;gap:2px;font-variant-numeric:tabular-nums}.credit-headline strong{font-size:1.3rem;color:var(--color-accent-2)}.deposit-chips{display:flex;flex-wrap:wrap;gap:6px;margin-bottom:var(--space)}.deposit-chip,.credit-chip{cursor:default;border-color:var(--color-accent-2);color:var(--color-accent-2);background:var(--color-bg);white-space:nowrap}.credit-chip{margin-left:8px;font-size:12px;vertical-align:middle}.branding-logo{display:flex;flex-wrap:wrap;gap:var(--space);align-items:flex-start;margin-bottom:var(--space)}.logo-preview{width:160px;height:100px;border:1px solid var(--color-border);border-radius:var(--radius);background:var(--color-bg);display:flex;align-items:center;justify-content:center;overflow:hidden}.logo-preview img{max-width:100%;max-height:100%;object-fit:contain}.logo-actions{display:flex;flex-direction:column;gap:8px}.logo-filename{font-size:13px;word-break:break-all;max-width:260px}.branding-colors{gap:var(--space)}.color-field{display:flex;flex-direction:column;gap:6px}.color-field-label{font-weight:500}.color-field-row{display:flex;gap:8px;align-items:center;flex-wrap:wrap}.color-field-row input[type=color]{width:var(--touch);min-width:var(--touch);padding:4px;height:var(--touch)}.color-hex{width:140px;font-variant-numeric:tabular-nums}@media(min-width:768px){.add-line-fields{flex-direction:row;align-items:flex-end}.add-line-fields .grow{flex:1 1 auto}.add-line-fields .qty{flex:0 0 90px}.add-line-fields .price{flex:0 0 150px}.add-btn{align-self:flex-end}.attachment-cards{grid-template-columns:repeat(auto-fill,minmax(280px,1fr))}.lists-layout.has-workflow{grid-template-columns:minmax(200px,260px) 1fr minmax(240px,360px)}}.cat-tag{display:inline-block;margin-left:8px;padding:1px 8px;border-radius:999px;font-size:12px;font-weight:500;color:var(--color-muted, #64748b);background:var(--color-bg);border:1px solid var(--color-border);vertical-align:middle}.all-cats-toggle{margin-top:8px;font-size:14px}.stepper-head{display:flex;align-items:baseline;justify-content:space-between;gap:var(--space)}.stepper-count{font-variant-numeric:tabular-nums}.stage-stepper{list-style:none;display:flex;gap:8px;margin:0;padding:4px 0;min-width:min-content}.stage-step-item{flex:0 0 auto}.stage-step{min-height:var(--touch, 44px);padding:0 16px;border:1px solid var(--color-border);border-radius:999px;background:var(--color-surface);white-space:nowrap;cursor:pointer;font-size:14px}.stage-step.done{background:var(--color-accent-2);border-color:var(--color-accent-2);color:var(--color-accent-2-contrast)}.stage-step.current{background:var(--color-accent);border-color:var(--color-accent);color:var(--color-accent-contrast);font-weight:600}.col-cat select,.col-workflow select{max-width:160px}.col-tax{white-space:nowrap}.line-workflow{display:flex;flex-direction:column;gap:6px;min-width:160px}.line-workflow-stage{display:flex;align-items:center;gap:6px;flex-wrap:wrap}.stage-stepper-compact{gap:4px}.stage-stepper-compact .stage-step{min-height:32px;padding:0 10px;font-size:12px}.complete-toggle{font-size:13px}.complete-toggle.complete-ready{font-weight:700;color:var(--color-accent)}.line-workflow .icon-btn{min-width:44px;min-height:44px}.progress-chip{background:var(--color-bg)}.chip.work-complete{background:#e6f4ea;border-color:#b7e0c2;color:#1e7a3d}.chip.exempt-badge{background:#fef3c7;border-color:#fde68a;color:#92600a;margin-left:6px}.inline-picker{display:flex;gap:6px;align-items:stretch}.inline-picker select{flex:1}.attrs-values-counts{display:flex;flex-direction:column;gap:4px;padding:6px 0}.attr-count-row{display:flex;align-items:center;gap:8px;justify-content:space-between}.attr-count-input{width:64px}.attrs-qty-offer{display:flex;align-items:center;gap:8px;font-size:13px;margin-top:4px}.cert-row{display:flex;align-items:center;gap:6px;flex-wrap:wrap}.logo-preview-backing{background:#f2f2f2;display:inline-block}.auth-loading{display:flex;align-items:center;justify-content:center;min-height:100vh;color:var(--color-muted)}.signin-screen{display:flex;align-items:center;justify-content:center;min-height:100vh;padding:var(--space);background:var(--color-bg)}.signin-card{width:100%;max-width:360px;padding:32px 24px;background:var(--color-surface);border:1px solid var(--color-border);border-radius:var(--radius);text-align:center}.signin-brand{font-size:28px;font-weight:700}.signin-sub{margin:8px 0 24px}.signin-btn{display:flex;align-items:center;justify-content:center;width:100%;min-height:var(--touch);padding:0 16px;border-radius:var(--radius);background:var(--color-accent);color:var(--color-accent-contrast);font-weight:600;text-decoration:none}.signin-btn:hover{filter:brightness(.95)}.sidebar-footer{margin-top:auto;padding-top:var(--space);border-top:1px solid var(--color-border)}.sidebar-user{font-weight:600;font-size:14px;margin-bottom:8px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.signout-btn{display:flex;align-items:center;justify-content:center;width:100%;min-height:var(--touch);border:1px solid var(--color-border);border-radius:var(--radius);background:var(--color-bg);color:var(--color-text);font-weight:500;cursor:pointer}.signout-btn:hover{background:var(--color-surface);border-color:var(--color-accent)}.visually-hidden{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0 0 0 0);white-space:nowrap;border:0}.dashboard-grid{display:grid;grid-template-columns:1fr;gap:var(--space)}.dashboard-panel{margin:0}.dashboard-empty{padding:var(--space) 0}.dashboard-panel-head{display:flex;align-items:center;justify-content:space-between;gap:8px;flex-wrap:wrap}.dashboard-period select{min-height:var(--touch);min-width:140px}.pie-wrap{display:flex;flex-wrap:wrap;align-items:center;gap:var(--space);margin-top:var(--space)}.pie-svg{width:180px;max-width:60%;height:auto;flex:0 0 auto}.pie-legend{list-style:none;margin:0;padding:0;flex:1 1 200px;min-width:180px;display:flex;flex-direction:column;gap:6px}.pie-legend-item{display:flex;align-items:center;gap:8px;font-size:14px}.pie-swatch{width:14px;height:14px;border-radius:3px;flex:0 0 auto}.pie-legend-label{flex:1 1 auto;min-width:0}.pie-legend-value{color:var(--color-muted);white-space:nowrap}@media(min-width:768px){.dashboard-grid{grid-template-columns:1fr 1fr}}
