@import url('https://fonts.googleapis.com/css2?family=DM+Sans:wght@400;500;600;700&family=Manrope:wght@600;700&display=swap');
:root{--ink:#101820;--muted:#667782;--line:#dce7eb;--paper:#f3f8fa;--white:#fff;--purple:#009fd4;--purple-dark:#0877d8;--lime:#08d0cd;--nav:#071c27;--red:#c83b5b;--green:#118269}
*{box-sizing:border-box}body{margin:0;color:var(--ink);font-family:'DM Sans',system-ui,sans-serif;background:var(--paper)}button,input{font:inherit}.hidden{display:none!important}.eyebrow{margin:0 0 10px;text-transform:uppercase;letter-spacing:.14em;font-size:11px;font-weight:700}.purple{color:var(--purple)}.muted{color:var(--muted)}
.login-shell{min-height:100vh;display:grid;grid-template-columns:1.15fr .85fr;background:#fff}.login-art{position:relative;overflow:hidden;padding:42px 52px;background:radial-gradient(circle at 75% 15%,#08d0cd 0,transparent 25%),linear-gradient(145deg,#061923 0%,#07506f 52%,#0877d8 100%);color:#fff}.brand{display:flex;align-items:center;gap:11px;font:700 15px Manrope;letter-spacing:.16em}.brand-mark{display:grid;place-items:center;width:34px;height:34px;background:linear-gradient(145deg,#0877e2,#08d0cd);color:#fff;border-radius:10px;font:800 18px Manrope;box-shadow:0 6px 20px #001e2d38}.login-copy{position:absolute;left:52px;bottom:100px;max-width:590px}.login-copy h1{margin:0;font:700 clamp(48px,6vw,88px)/.95 Manrope;letter-spacing:-.055em}.login-copy p:last-child{max-width:470px;margin:28px 0 0;color:#ccecf2;font-size:17px;line-height:1.65}.signal-lines{position:absolute;inset:auto -90px -120px auto;width:520px;height:520px;border:1px solid #ffffff24;border-radius:50%}.signal-lines i{position:absolute;inset:55px;border:1px solid #ffffff20;border-radius:50%}.signal-lines i:nth-child(2){inset:115px}.signal-lines i:nth-child(3){inset:180px;background:var(--lime);border:0;box-shadow:0 0 70px #08d0cd77}.login-panel{display:grid;place-items:center;padding:40px}.login-form{width:min(390px,100%);display:grid;gap:22px}.login-logo{display:block;width:100%;max-width:360px;height:auto;margin:0 0 -3px;mix-blend-mode:multiply}.login-form h2{font:700 35px Manrope;margin:0 0 9px;letter-spacing:-.035em}.login-form label{display:grid;gap:8px;font-weight:600;font-size:13px}.login-form input{width:100%;border:1px solid var(--line);border-radius:10px;padding:14px 15px;outline:none}.login-form input:focus{border-color:var(--purple);box-shadow:0 0 0 3px #009fd425}.primary{border:0;border-radius:10px;background:var(--purple);color:#fff;padding:15px 18px;display:flex;justify-content:space-between;font-weight:700;cursor:pointer}.primary:hover{background:var(--purple-dark)}.demo-note{text-align:center;color:var(--muted);font-size:12px}.error{color:var(--red);font-size:13px;margin:0;min-height:18px}
.app-shell{min-height:100vh;display:grid;grid-template-columns:240px 1fr}.sidebar{position:sticky;top:0;height:100vh;background:var(--nav);color:#fff;padding:28px 20px;display:flex;flex-direction:column}.sidebar .brand{padding:0 9px 28px}.sidebar nav{display:grid;gap:6px;overflow-y:auto}.sidebar nav button,.sidebar nav a,.logout{border:0;background:transparent;color:#aea6ba;padding:12px 14px;border-radius:9px;text-align:left;cursor:pointer;display:flex;gap:12px;align-items:center;text-decoration:none;font:inherit}.sidebar nav button:hover,.sidebar nav a:hover,.sidebar nav button.active{background:#ffffff10;color:#fff}.sidebar nav button.active{box-shadow:inset 3px 0 var(--lime)}.sidebar-footer{margin-top:auto;border-top:1px solid #ffffff14;padding-top:18px}.status{display:flex;gap:9px;align-items:center;color:#aaa1b5;font-size:12px;padding:8px 13px}.status i{width:7px;height:7px;border-radius:50%;background:#54d598;box-shadow:0 0 0 4px #54d59818}.workspace{min-width:0}.topbar{height:106px;background:#fff;border-bottom:1px solid var(--line);padding:22px 36px;display:flex;justify-content:space-between;align-items:center}.topbar h2{margin:0;font:700 25px Manrope}.user-chip{display:flex;align-items:center;gap:11px}.user-chip>span{display:grid;place-items:center;width:39px;height:39px;border-radius:12px;background:#eee8fb;color:var(--purple);font-weight:700}.user-chip div{display:grid}.user-chip small{color:var(--muted)}.content{padding:32px 36px;max-width:1500px}.hero-row{display:flex;justify-content:space-between;align-items:end;margin-bottom:24px}.hero-row h1{font:700 32px Manrope;margin:0 0 7px;letter-spacing:-.03em}.hero-row p{margin:0;color:var(--muted)}.metric-grid{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:16px;margin-bottom:24px}.metric{background:#fff;border:1px solid var(--line);border-radius:14px;padding:20px}.metric-head{display:flex;justify-content:space-between;color:var(--muted);font-size:13px}.metric-icon{width:31px;height:31px;display:grid;place-items:center;border-radius:9px;background:#f1ecfc;color:var(--purple)}.metric strong{display:block;font:700 32px Manrope;margin-top:20px}.metric small{color:var(--green)}.panel{background:#fff;border:1px solid var(--line);border-radius:14px;overflow:hidden}.panel-head{padding:19px 21px;border-bottom:1px solid var(--line);display:flex;justify-content:space-between;align-items:center}.panel-head h3{font:700 16px Manrope;margin:0}.toolbar{display:flex;gap:10px}.search{border:1px solid var(--line);border-radius:8px;padding:9px 12px;min-width:240px}.ghost{border:1px solid var(--line);background:#fff;padding:9px 12px;border-radius:8px;cursor:pointer}.data-table{width:100%;border-collapse:collapse}.data-table th{text-align:left;padding:11px 16px;background:#faf9fb;color:var(--muted);font-size:11px;text-transform:uppercase;letter-spacing:.08em}.data-table td{padding:14px 16px;border-top:1px solid var(--line);font-size:13px}.data-table tr:hover td{background:#fcfbfd}.pill{display:inline-flex;padding:5px 8px;border-radius:20px;background:#edf8f4;color:var(--green);font-size:11px;font-weight:700}.pill.new{background:#f0ebfc;color:var(--purple)}.pill.cancelled{background:#fceef1;color:var(--red)}.empty{text-align:center;padding:70px 30px;color:var(--muted)}.empty strong{display:block;color:var(--ink);font:700 17px Manrope;margin-bottom:6px}.loader{padding:70px;text-align:center;color:var(--muted)}
.hero-actions{display:flex;gap:10px}.compact{padding:10px 14px;gap:20px}.danger-link{border:0;background:transparent;color:var(--red);font-weight:700;cursor:pointer}.modal-backdrop{position:fixed;inset:0;background:#06192399;backdrop-filter:blur(5px);display:grid;place-items:center;padding:24px;z-index:10}.modal{position:relative;background:#fff;border-radius:16px;padding:28px;width:min(620px,100%);max-height:90vh;overflow:auto;box-shadow:0 28px 80px #001e2d38}.modal-close{position:absolute;right:18px;top:14px;border:0;background:transparent;color:var(--muted);font-size:27px;cursor:pointer}.modal h2{font:700 25px Manrope;margin:0 0 6px}.modal .muted{margin:0 0 22px}.form-grid{display:grid;grid-template-columns:1fr 1fr;gap:16px}.form-grid .wide{grid-column:1/-1}.form-grid label{display:grid;gap:7px;font-size:12px;font-weight:700}.form-grid input,.form-grid select{border:1px solid var(--line);border-radius:9px;padding:12px;background:#fff}.form-grid input:focus,.form-grid select:focus{outline:0;border-color:var(--purple);box-shadow:0 0 0 3px #009fd425}.form-actions{grid-column:1/-1;display:flex;justify-content:flex-end;gap:10px;margin-top:8px}.upload-box{border:1px dashed #8fbfca;border-radius:12px;padding:24px;background:#f5fbfc}.upload-box input{width:100%}.helper{font-size:12px;color:var(--muted);line-height:1.5}.helper a{color:var(--purple-dark);font-weight:700}.toast{position:fixed;right:26px;bottom:26px;background:var(--nav);color:#fff;padding:14px 18px;border-radius:10px;box-shadow:0 15px 40px #071c2744;z-index:20}.toast.error-toast{background:#8e2942}
.session-actions{display:flex;align-items:center;gap:16px}.typeahead{position:relative}.typeahead-results{position:absolute;z-index:2;left:0;right:0;top:100%;margin-top:5px;background:#fff;border:1px solid var(--line);border-radius:10px;box-shadow:0 14px 35px #06192320;max-height:230px;overflow:auto}.typeahead-option{display:block;width:100%;border:0;border-bottom:1px solid var(--line);background:#fff;padding:11px 13px;text-align:left;cursor:pointer}.typeahead-option:hover{background:#edfafd}.typeahead-option strong,.typeahead-option small{display:block}.typeahead-option small{color:var(--muted);margin-top:3px}.impersonation-note{padding:9px 12px;border-radius:8px;background:#fff7d9;color:#735d00;font-size:12px;font-weight:700}
.sq-search{display:flex;gap:10px;margin-bottom:22px}.sq-search input{flex:1;border:1px solid var(--line);border-radius:11px;padding:15px 17px;font-size:15px}.sq-grid{display:grid;gap:14px}.sq-card{background:#fff;border:1px solid var(--line);border-radius:14px;padding:20px;display:grid;grid-template-columns:minmax(220px,1.3fr) repeat(3,minmax(110px,.7fr));gap:20px;align-items:center}.sq-address strong{display:block;font:700 15px Manrope}.sq-address small{display:block;color:var(--muted);margin-top:5px}.sq-field span{display:block;color:var(--muted);font-size:10px;text-transform:uppercase;letter-spacing:.09em;margin-bottom:5px}.sq-field strong{font-size:13px}.availability{display:inline-flex;padding:7px 10px;border-radius:20px;font-size:11px;font-weight:700}.availability.free{background:#e7f8f1;color:var(--green)}.availability.occupied{background:#fceef1;color:var(--red)}.availability.own{background:#eee8fb;color:var(--purple)}.availability.reserved{background:#fff6d8;color:#7b6200}.sq-details{grid-column:1/-1;display:grid;grid-template-columns:repeat(3,1fr);padding-top:14px;border-top:1px solid var(--line)}
@media(max-width:900px){.login-shell{grid-template-columns:1fr}.login-art{display:none}.app-shell{grid-template-columns:74px 1fr}.sidebar{padding:24px 12px}.sidebar .brand span:last-child,.sidebar nav button:not(.active){font-size:0}.sidebar nav button span{font-size:16px}.sidebar-footer{display:none}.metric-grid{grid-template-columns:repeat(2,1fr)}.content{padding:24px 18px}.topbar{padding:20px}.user-chip div{display:none}}
@media(max-width:560px){.metric-grid{grid-template-columns:1fr 1fr}.topbar .eyebrow{display:none}.panel{overflow:auto}.toolbar{display:none}}
@media(max-width:560px){.form-grid{grid-template-columns:1fr}.form-grid .wide{grid-column:auto}.hero-row{align-items:flex-start;gap:15px}.hero-actions{flex-direction:column}}
@media(max-width:800px){.sq-card{grid-template-columns:1fr 1fr}.sq-address{grid-column:1/-1}.sq-details{grid-template-columns:1fr}}
.pill.in-provisioning{background:#fff6d8;color:#7b6200}.pill.rejected{background:#fceef1;color:var(--red)}
.mode-banner{display:flex;justify-content:space-between;align-items:center;padding:17px 20px;margin-bottom:20px;border:1px solid var(--line);border-radius:13px;background:#fff}.mode-banner strong,.mode-banner small{display:block}.mode-banner small{margin-top:4px;color:var(--muted)}.mode-banner.production{border-color:#eeb5c2;background:#fff7f9}.mode-banner.production strong{color:var(--red)}.mode-banner.staging{border-color:#eadb9f;background:#fffbeb}.permission-grid{display:grid;grid-template-columns:1fr 1fr;gap:8px;max-height:260px;overflow:auto;border:1px solid var(--line);border-radius:10px;padding:12px}.permission-grid label{padding:8px;border-radius:8px;background:#faf9fb}.permission-grid small{display:block;margin:4px 0 0 24px;color:var(--muted);font-weight:400}.row-actions{display:flex;flex-wrap:wrap;gap:6px}.row-actions .ghost{padding:6px 8px;font-size:11px}
@media(max-width:800px){.mode-banner{align-items:flex-start;gap:14px}.permission-grid{grid-template-columns:1fr}}
.form-section-title{padding-top:8px;border-top:1px solid var(--line);font:700 14px Manrope}.health-summary{display:flex;justify-content:space-between;align-items:center;padding:16px;border-radius:12px;margin:18px 0}.health-summary.good{background:#e8f8f2;color:var(--green)}.health-summary.attention{background:#fceef1;color:var(--red)}.health-summary.unknown{background:#fff6d8;color:#755e00}.health-summary strong{text-transform:capitalize;font:700 18px Manrope}.health-list{display:grid;gap:8px;margin-top:18px}.health-check{display:flex;gap:11px;padding:11px;border:1px solid var(--line);border-radius:10px}.health-check>span{width:9px;height:9px;border-radius:50%;background:#d2ced8;margin-top:4px}.health-check.good>span{background:var(--green)}.health-check.attention>span{background:var(--red)}.health-check strong,.health-check small{display:block}.health-check small{color:var(--muted);margin-top:3px}.telemetry-grid{display:grid;grid-template-columns:repeat(2,1fr);gap:8px;margin-top:15px}.telemetry-grid span{padding:11px;background:#f8f7fa;border-radius:9px;color:var(--muted);font-size:11px}.telemetry-grid strong{display:block;color:var(--ink);margin-top:4px}.contractor-admin-grid{display:grid;grid-template-columns:1fr 1fr;gap:20px;margin-bottom:20px}
.contractor-mode .app-shell{grid-template-columns:1fr}.contractor-mode .sidebar{display:none}.contractor-mode .topbar{height:76px;padding:14px 20px;position:sticky;top:0;z-index:5}.contractor-mode .topbar>div:first-child{display:none}.contractor-mode .workspace{width:100%;max-width:760px;margin:auto;background:#f3f2f5;min-height:100vh}.contractor-mode .content{padding:20px 16px 60px;max-width:none}.contractor-mode .session-actions{width:100%;justify-content:space-between}.contractor-mode .user-chip div{display:grid}.contractor-mode .user-chip small{text-transform:capitalize}.field-hero,.field-detail-head{display:flex;justify-content:space-between;align-items:center;margin-bottom:18px}.field-hero h1,.job-summary h1{font:700 29px Manrope;letter-spacing:-.035em;margin:0}.field-section{background:#fff;border:1px solid var(--line);border-radius:16px;padding:18px;margin-bottom:14px}.section-heading{display:flex;justify-content:space-between;align-items:center;margin-bottom:14px}.section-heading h2{font:700 17px Manrope;margin:0}.section-heading>span{font-size:11px;color:var(--muted);text-transform:uppercase;letter-spacing:.08em}.field-job-list{display:grid;gap:11px}.field-job-card{width:100%;border:1px solid var(--line);border-radius:13px;background:#fff;padding:16px;text-align:left;cursor:pointer;color:var(--ink)}.field-job-card>div{display:flex;justify-content:space-between;align-items:center}.field-job-card h3{font:700 16px Manrope;margin:13px 0 5px}.field-job-card p{margin:0 0 9px;color:var(--muted);line-height:1.45}.field-job-card small,.field-date{color:var(--muted);font-size:11px}.field-job-card:hover{border-color:#bba7e5;box-shadow:0 8px 24px #3e285516}.field-empty{text-align:center;padding:38px 20px;color:var(--muted)}.back-button{border:0;background:transparent;color:var(--purple);font-weight:700;padding:10px 0;cursor:pointer}.job-summary .eyebrow{margin-bottom:8px}.job-identifiers{display:grid;grid-template-columns:repeat(3,1fr);gap:8px;margin:17px 0}.job-identifiers span{padding:10px;background:#f7f5f9;border-radius:9px;color:var(--muted);font-size:10px;text-transform:uppercase}.job-identifiers strong{display:block;color:var(--ink);font-size:12px;margin-top:4px;text-transform:none;overflow-wrap:anywhere}.contact-card{display:flex;gap:10px;align-items:center;border-top:1px solid var(--line);padding-top:14px}.contact-card>div{display:grid;margin-right:auto}.contact-card small{color:var(--muted)}.contact-card a{padding:9px 11px;border-radius:8px;background:#f0ebfc;color:var(--purple);font-weight:700;text-decoration:none}.fault-brief{border-left:4px solid var(--red);background:#fff6f8;padding:12px;margin:14px 0}.fault-brief p{margin:6px 0}.fault-brief span{font-size:11px;color:var(--red)}.field-form{display:grid;gap:0}.field-form label{display:grid;gap:7px;font-size:12px;font-weight:700;margin-bottom:14px}.field-form input,.field-form select,.field-form textarea{width:100%;border:1px solid var(--line);border-radius:10px;padding:13px;background:#fff;font:inherit}.field-form textarea{resize:vertical}.inline-field-form{grid-template-columns:1fr auto;gap:10px}.inline-field-form label,.inline-field-form select{margin:0}.attendance-toggle{position:relative;grid-template-columns:1fr auto auto;align-items:center;min-height:48px}.attendance-toggle input{position:absolute;opacity:0}.attendance-toggle i{width:48px;height:27px;border-radius:20px;background:#c9c5cf;position:relative;transition:.2s}.attendance-toggle i:after{content:'';position:absolute;width:21px;height:21px;border-radius:50%;background:#fff;left:3px;top:3px;transition:.2s;box-shadow:0 1px 4px #0003}.attendance-toggle input:checked+i{background:var(--green)}.attendance-toggle input:checked+i:after{transform:translateX(21px)}.attendance-toggle b{width:24px}.commission-section{border-color:#d6c7f4}.commission-result{padding:13px;border-radius:10px;background:#e9f8f2;margin-bottom:13px}.commission-result>strong{display:block;color:var(--green);margin-bottom:10px}.commission-result>div{display:grid;grid-template-columns:repeat(3,1fr);gap:7px}.commission-result span{font-size:10px;color:var(--muted)}.commission-result b{display:block;color:var(--ink);font-size:11px;margin-top:3px;overflow-wrap:anywhere}.full-button{width:100%;justify-content:center;min-height:48px}.full-button:disabled{opacity:.55}.photo-upload-grid{display:grid;grid-template-columns:1fr 1fr;gap:9px}.photo-upload-grid label{border:1px dashed #b9aecb;border-radius:11px;padding:13px;color:var(--purple);cursor:pointer;text-align:center}.photo-upload-grid input{position:absolute;opacity:0;width:1px}.job-photo-grid{display:grid;grid-template-columns:1fr 1fr;gap:10px;margin-top:13px}.job-photo{margin:0;border:1px solid var(--line);border-radius:11px;overflow:hidden}.job-photo img,.photo-placeholder{display:block;width:100%;aspect-ratio:4/3;object-fit:cover;background:#efedf1}.photo-placeholder{display:grid;place-items:center;color:var(--muted);font-size:11px}.job-photo figcaption{padding:9px;font-size:11px;font-weight:700}.job-photo figcaption small{display:block;color:var(--muted);font-weight:400;margin-top:3px}.completion-section{position:sticky;bottom:8px;box-shadow:0 10px 32px #24172f24}.completion-section label{margin-bottom:10px}
.field-hero-actions{display:flex;gap:8px}
@media(max-width:1050px){.contractor-admin-grid{grid-template-columns:1fr}}
@media(max-width:560px){.contractor-mode .topbar{height:68px}.contractor-mode .content{padding:16px 12px 50px}.contractor-mode .user-chip>span{width:35px;height:35px}.contractor-mode .user-chip small{max-width:210px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.field-section{padding:15px}.job-identifiers{grid-template-columns:1fr}.commission-result>div{grid-template-columns:1fr}.photo-upload-grid,.job-photo-grid{grid-template-columns:1fr 1fr}.health-summary{display:grid;gap:5px}.telemetry-grid{grid-template-columns:1fr 1fr}}
.reference-number{font:700 13px Manrope;color:var(--purple);white-space:nowrap}.job-kind{display:inline-flex;padding:5px 9px;border-radius:7px;font-size:10px;font-weight:800;text-transform:uppercase;letter-spacing:.08em}.job-kind.install{background:#e9f8f2;color:#167052}.job-kind.fault{background:#fff0f3;color:#a32647}.field-job-card.install{border-left:5px solid #32a77e}.field-job-card.fault{border-left:5px solid #d65372}.field-job-card.failed{border-color:#df8ca1;background:#fff8fa}.field-job-card .field-card-meta{justify-content:flex-start;gap:14px;margin:0 0 9px;color:var(--muted);font-size:11px}.pill.failed,.pill.billing-sync-failed,.pill.billing-on-hold{background:#fceef1;color:var(--red)}.pill.success,.pill.billing-paid,.pill.billing-sent,.pill.billing-authorised{background:#e8f8f2;color:var(--green)}.pill.pending,.pill.billing-draft,.pill.billing-xero-draft,.pill.billing-awaiting-approval{background:#fff6d8;color:#755e00}.failed-row td{background:#fff8fa!important}.work-order-heading{color:var(--purple);overflow-wrap:anywhere}.job-result{padding:13px;border-radius:11px;margin:14px 0}.job-result strong,.job-result span{display:block}.job-result.success{background:#e8f8f2;color:var(--green)}.job-result.failed{background:#fceef1;color:var(--red)}.job-result ul{margin:7px 0 0;padding-left:20px}.completion-controls{display:grid;grid-template-columns:1fr 1fr;gap:10px}.workflow-strip{display:grid;grid-template-columns:repeat(4,1fr);gap:10px;margin:0 0 20px}.workflow-strip span{display:flex;align-items:center;gap:9px;padding:13px;background:#fff;border:1px solid var(--line);border-radius:10px;color:var(--muted);font-size:12px}.workflow-strip b{display:grid;place-items:center;width:25px;height:25px;border-radius:50%;background:#f0ebfc;color:var(--purple)}.billing-line{display:grid;grid-template-columns:minmax(180px,2fr) 90px 150px 90px auto;gap:8px;align-items:end;padding:12px;border:1px solid var(--line);border-radius:10px;margin-bottom:8px}.billing-line label{margin:0}.billing-line .danger-link{margin-bottom:2px}.billing-form{width:min(900px,90vw)}
.billing-contact-list{display:grid;gap:8px;margin:18px 0}.billing-contact{display:flex;align-items:center;justify-content:space-between;width:100%;padding:13px;border:1px solid var(--line);border-radius:10px;background:#fff;text-align:left;cursor:pointer}.billing-contact span{display:grid}.billing-contact small{color:var(--muted);margin-top:3px}.billing-contact b{color:var(--purple)}
@media(max-width:800px){.workflow-strip{grid-template-columns:1fr 1fr}.billing-line{grid-template-columns:1fr 1fr}.billing-line label:first-child{grid-column:1/-1}.completion-controls{grid-template-columns:1fr}}
.contractor-mode .completion-section{position:static;bottom:auto;box-shadow:none;margin-top:4px}
