:root{font-family:Arial,sans-serif;color:#203431;background:#f4f7f5;font-size:14px}*{box-sizing:border-box}body{margin:0}button,input,textarea,select{font:inherit}button,a,input,select,textarea{outline-offset:3px}button{cursor:pointer;border:1px solid #d5dfd9;background:white;border-radius:7px;padding:9px 13px;color:#253d35;font-weight:600}button:hover{background:#edf3ef}button:disabled{opacity:.5;cursor:default}a{color:#17634e}h1{font-size:30px;letter-spacing:-1px;margin:8px 0}h2{font-size:21px;margin:6px 0 16px}h3{font-size:17px}h4{margin:8px 0 16px}p{line-height:1.6}small{display:block;font-size:12px;color:#6b7b74;margin-top:5px}.shell{display:flex;min-height:100vh}aside{background:#123e33;color:#fff;width:224px;flex-shrink:0;padding:30px 20px;position:sticky;top:0;height:100vh}.logo{font-size:29px;letter-spacing:-1px;font-weight:bold}.logo small{letter-spacing:2px;color:#a8c7b9;font-size:10px}.workspace{font-size:10px;letter-spacing:1.8px;color:#a0bbae;margin:45px 12px 14px}.nav{display:block;width:100%;text-align:left;border:0;color:#cadbd1;background:transparent;padding:13px;margin:5px 0}.nav.active,.nav:hover{background:#2b584a;color:white}.side-bottom{position:absolute;bottom:30px;font-size:12px;max-width:178px}.side-bottom p{color:#b1c9bd}main{padding:30px 36px;min-width:0;flex:1}header{display:flex;align-items:center;justify-content:space-between;gap:20px;margin-bottom:26px}.eyebrow{font-size:10px;letter-spacing:2px;font-weight:700;color:#60796d}.muted{color:#748078;font-weight:400;font-size:13px}.actions{display:flex;align-items:center;gap:10px;flex-wrap:wrap}.primary{background:#17634e;color:#fff;border-color:#17634e}.primary:hover{background:#104f3d}.stats{display:grid;grid-template-columns:repeat(4,1fr);gap:16px;margin-bottom:25px}.stats>div{background:#fff;border:1px solid #e0e6e1;border-radius:11px;padding:20px}.stats small{font-size:10px;letter-spacing:1px}.stats strong{display:block;font-size:31px;font-weight:500;margin-top:8px}.toolbar{display:flex;align-items:center;gap:16px;margin-bottom:24px}.toolbar>input{flex:1;max-width:430px}input,textarea,select{background:#fff;border:1px solid #ccd8d0;border-radius:6px;padding:10px;max-width:100%;color:#233b30}input:not([type=checkbox]):not([type=file]),textarea,select{width:100%}label{display:block;font-size:12px;font-weight:600;line-height:1.8}label input,label select,label textarea{display:block;font-weight:400;margin:4px 0 14px}.check{display:flex;gap:8px;align-items:center;font-weight:400}.check input{margin:0;width:auto}.cards{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:16px}.card{text-align:left;padding:20px;border-radius:10px;border:1px solid #dce5df;background:white;min-height:220px}.card.selected{border-color:#277454;box-shadow:0 0 0 1px #277454}.card-top{display:flex;align-items:center;justify-content:space-between;gap:5px}.card-top>strong{font-size:18px}.card h3{line-height:1.4;margin:20px 0 4px}.card p{font-weight:400;color:#718076;margin:0 0 14px}.tags{display:flex;flex-wrap:wrap;gap:6px}.badge{font-size:10px;display:inline-block;border-radius:5px;padding:5px 8px;font-weight:600;line-height:1.3}.amber{background:#fff0d0;color:#80550c}.blue{background:#e9efff;color:#42659e}.purple{background:#f0e8fa;color:#79549f}.green{background:#e1f1e6;color:#2c7145}.grey{background:#eef0f0;color:#78807e}.card-foot{display:flex;justify-content:space-between;gap:10px;border-top:1px solid #edf0ed;padding-top:14px;margin-top:18px;font-size:10px;font-weight:400;color:#718176}.panel{background:white;border:1px solid #dce5df;border-radius:10px;padding:24px;margin-bottom:20px}.detail{margin-top:24px}.section-title{display:flex;align-items:center;justify-content:space-between;gap:15px}.detail-grid{display:grid;grid-template-columns:1.2fr 1fr;gap:30px;margin-top:25px}.structure-line{display:flex;align-items:center;gap:12px;padding:13px 0;border-bottom:1px solid #edf0ed;font-size:12px}.structure-line>div{flex:1}.finding{border-left:3px solid #b48c42;background:#fffcf4;padding:16px;margin-top:20px}.finding p{font-size:12px;margin:6px 0}table{width:100%;border-collapse:collapse;font-size:12px;text-align:left}th{font-size:10px;text-transform:uppercase;letter-spacing:.6px;color:#748076;background:#f7faf7}td,th{padding:14px 12px;border-bottom:1px solid #e7ede7;vertical-align:middle}td small{max-width:260px;font-size:11px}.table-wrap{overflow:auto}.link{border:0;background:none;padding:0;color:#17634e;font-weight:700}.pagination{display:flex;align-items:center;justify-content:flex-end;gap:10px;margin-top:15px;font-size:12px}.pagination span{margin-right:auto}.paste{height:270px;font-family:monospace;font-size:12px;margin:20px 0}summary{cursor:pointer;line-height:1.5}details{padding:18px 0;border-bottom:1px solid #e3e9e3}pre{white-space:pre-wrap;overflow-wrap:anywhere;font:12px/1.7 Arial;padding:20px;background:#f6f8f5;max-height:500px;overflow:auto}footer{display:flex;align-items:center;justify-content:space-between;font-size:11px;color:#819083;margin-top:30px}.overlay{position:fixed;inset:0;background:#15352966;z-index:10;display:flex;align-items:flex-start;justify-content:center;padding:30px;overflow:auto}.dialog{background:white;width:900px;max-width:100%;padding:30px;border-radius:14px;box-shadow:0 15px 60px #0003;max-height:calc(100vh - 60px);overflow:auto}.dialog.narrow{width:560px}.form-grid{display:grid;grid-template-columns:1fr 1fr;gap:0 20px}.dialog textarea{min-height:90px}.dialog hr{border:0;border-top:1px solid #e4eae5;margin:25px 0}.mail-editor{margin-top:20px;padding:20px;background:#f6f8f5;border-radius:8px}.alert{padding:14px 18px;border-radius:7px;margin:12px 0}.error{background:#fff0ed;color:#9d3326}.success{background:#e6f3e9;color:#286c40}@media(max-width:1200px){.cards{grid-template-columns:repeat(2,minmax(0,1fr))}aside{width:190px}main{padding:25px}header{align-items:flex-start;flex-direction:column}}@media(max-width:800px){.shell{display:block}aside{position:relative;width:auto;height:auto;padding:16px}.logo{font-size:23px}.workspace,.side-bottom{display:none}.nav{display:inline-block;width:auto;padding:10px}.stats{grid-template-columns:repeat(2,1fr)}.cards,.detail-grid,.form-grid{grid-template-columns:1fr}.toolbar{flex-wrap:wrap}main{padding:18px}.dialog{padding:20px}.overlay{padding:12px}.dialog{max-height:calc(100vh - 24px)}h1{font-size:26px}footer{gap:14px;flex-wrap:wrap}}

.calendar-scroll{overflow:auto}.calendar-grid{display:grid;grid-template-columns:repeat(7,minmax(110px,1fr));min-width:770px;border-left:1px solid #e0e7e0;border-top:1px solid #e0e7e0}.calendar-head{padding:12px;background:#eef3ef;font-size:12px;font-weight:600}.calendar-day{min-height:125px;border-right:1px solid #e0e7e0;border-bottom:1px solid #e0e7e0;padding:8px;font-size:12px}.calendar-day.outside{background:#f8faf8}.calendar-event{display:block;text-align:left;width:100%;padding:8px;margin:7px 0;background:#e4f2e9;border:0;border-left:3px solid #367759;font-size:10px;line-height:1.5}.calendar-event span{display:block;margin-top:3px}.calendar-event small{font-size:9px}

.booking-warning{background:#fff0d0;color:#80550c;padding:4px}.calendar-grid{min-width:630px;grid-template-columns:repeat(7,minmax(90px,1fr))}

.logo small{font-size:13px;letter-spacing:.3px;line-height:1.5;margin-top:8px;font-weight:500}

.cards{align-items:start;margin-bottom:24px}
.job-card{background:#fff;border:1px solid #dce5df;border-radius:10px;overflow:hidden;min-width:0}
.job-card.expanded{grid-column:1 / -1;border-color:#277454;box-shadow:0 0 0 1px #277454}
.job-card-summary{display:block;width:100%;padding:15px 17px;text-align:left;border:0;border-radius:0;background:transparent;font-weight:400}
.job-card-summary:hover{background:#f7faf8}
.job-card-summary:focus-visible{outline:3px solid #277454;outline-offset:-4px}
.job-card-summary .card-top{gap:10px}
.job-card-summary .card-top>strong{font-size:16px;margin-right:auto;min-width:0;overflow-wrap:anywhere;line-height:1.4}
.job-card-summary .card-top>.badge,.job-card-summary .card-chevron{flex-shrink:0}
.card-chevron{font-size:21px;color:#41765f;line-height:1;transition:transform .15s}
.expanded .card-chevron{transform:rotate(180deg)}
.card-address{display:block;font-size:14px;font-weight:600;line-height:1.4;margin:10px 0 4px}
.card-builder{display:block;color:#718076;font-size:12px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.card-overview{display:flex;align-items:center;justify-content:space-between;gap:10px;margin-top:12px}
.card-expand-label{color:#537363;font-size:11px;white-space:nowrap}
.job-card-detail{padding:0 20px 20px;border-top:1px solid #e5ece6}
.job-card-detail[hidden]{display:none}
.job-card-detail h3{margin:16px 0}
.job-card-detail .section-title{margin-bottom:12px}
.card-bookings{display:flex;flex-wrap:wrap;gap:20px;padding-top:20px}
.card-bookings>div{flex:1;min-width:200px}
.card-bookings p{margin:8px 0;font-size:12px}
.card-job-notes{white-space:pre-wrap;color:#596f62}
.card-related{display:flex;align-items:center;gap:8px;flex-wrap:wrap;margin-top:16px}
.sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border:0}
@media(max-width:800px){.job-card-detail{padding:0 14px 16px}.job-card-detail .section-title{flex-wrap:wrap}.job-card-summary{padding:14px}.job-card-detail td,.job-card-detail th{padding:10px 8px}.job-card-detail table{min-width:350px}}

.teal{background:#e0f2ed;color:#176a59}.indigo{background:#e7eafa;color:#4f5aa2}
.card-measure{display:block;font-size:11px;color:#62796b;margin-top:8px}
.progress-editor{border-top:1px solid #e2e9e3;margin-top:20px;padding-top:10px}
.milestone-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(160px,1fr));gap:12px}
.milestone-dot{display:inline-block;border-radius:50%;width:8px;height:8px;margin-right:6px;border:2px solid currentColor}
.calendar-legend{display:flex;gap:8px;flex-wrap:wrap;margin-bottom:16px}.calendar-stage{border-radius:4px;padding:3px 5px;display:inline-block;font-weight:600}
.calendar-event.blue{background:#e9efff;border-color:#42659e}.calendar-event.teal{background:#e0f2ed;border-color:#176a59}.calendar-event.indigo{background:#e7eafa;border-color:#4f5aa2}.calendar-event.purple{background:#f0e8fa;border-color:#79549f}.calendar-event.green{background:#e1f1e6;border-color:#2c7145}.calendar-event.grey{background:#eef0f0;border-color:#78807e}.calendar-event.amber{background:#fff0d0;border-color:#80550c}
.calendar-event.draggable{cursor:grab}.calendar-event.draggable:active{cursor:grabbing}.calendar-event:hover{filter:brightness(.97)}.calendar-day.drop-target{background:#ddf2e6;box-shadow:inset 0 0 0 2px #267459}
.calendar-list-line{flex-wrap:wrap}.calendar-list-line>div{min-width:180px}.calendar-event{font-size:11px}.calendar-event small{font-size:10px}
.booking-dialog{border:0;width:620px;max-height:90vh;margin:auto}.booking-dialog::backdrop{background:#15352988}.booking-before{background:#f3f7f3;padding:14px;margin:12px 0}.booking-before p{margin:5px 0}.booking-pending{background:#fff4dc;color:#74520f;font-size:12px}.danger{border-color:#b15446;color:#9f3d30;background:#fff7f4}
#calendar-month{width:155px}.milestone-readonly{display:flex;flex-wrap:wrap;gap:16px}
@media(max-width:800px){.calendar-list-line{align-items:flex-start}.booking-dialog{width:calc(100% - 24px)}.milestone-grid{grid-template-columns:repeat(2,minmax(0,1fr))}}

.correspondence-panel h2{margin-top:10px}.correspondence-panel>.section-title{align-items:flex-start}.correspondence-empty{padding:22px 0;color:#718076}.mail-participants{font-size:12px;overflow-wrap:anywhere}.mail-participants p{margin:5px 0}

.outlook-panel{max-width:1100px}.outlook-panel ol{padding-left:24px;line-height:1.7}.outlook-panel code{overflow-wrap:anywhere;font-size:.85em}.outlook-panel .device-code{display:inline-block;font-size:1.45rem;letter-spacing:.12em;margin:8px}.outlook-source-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(250px,1fr));gap:16px;margin:20px 0}.outlook-panel .finding{margin:16px 0}.outlook-panel .actions{margin:12px 0}

.correspondence-job-messages{padding-left:16px;border-left:2px solid #e5ece6;margin:12px 0 0 4px}
.correspondence-job-group>summary{overflow-wrap:anywhere}

.calendar-day.is-today{background:#f5f8f5;box-shadow:none}
.calendar-day.is-today>.calendar-date-number{font-weight:700}
.calendar-today-label{display:inline-flex;align-items:center;gap:4px;margin-left:0;color:#526557;font-size:10px;font-weight:600}
.calendar-today-label::before{content:"";width:4px;height:4px;border-radius:50%;background:#6c806e}
.calendar-day.is-today.drop-target{background:#ddf2e6;box-shadow:inset 0 0 0 2px #267459}

.card-thumbnail{display:block;margin-top:12px;height:150px;background:#f2f5f2;border:1px solid #e2e9e3;border-radius:6px;overflow:hidden}.card-thumbnail img{display:block;width:100%;height:100%;object-fit:contain}.expanded .card-thumbnail{max-width:320px}.thumbnail-editor{border-top:1px solid #e4eae5;border-bottom:1px solid #e4eae5;padding:8px 0 20px;margin:12px 0 20px}.thumbnail-editor h3{margin-bottom:4px}.thumbnail-editor-row{display:flex;align-items:flex-start;gap:20px}.thumbnail-preview{display:flex;align-items:center;justify-content:center;width:160px;height:120px;flex:none;background:#f3f7f3;border:1px solid #dce5df;border-radius:7px;overflow:hidden;color:#748078;font-size:12px}.thumbnail-preview img{display:block;width:100%;height:100%;object-fit:contain}.thumbnail-controls{min-width:0;flex:1}.thumbnail-controls input{max-width:100%}@media(max-width:550px){.thumbnail-editor-row{flex-direction:column}.thumbnail-preview{width:100%;height:160px}}


/* Calendar cards stay neutral; colour is limited to labelled progress tiles. */
.calendar-event.calendar-event-neutral{background:#fff;color:#203431;border:1px solid #d5dfd9;border-left:3px solid #9aa9a0}
.calendar-event.calendar-event-neutral:hover{background:#f6f8f7;filter:none}
.calendar-event .calendar-progress-tiles{display:flex;flex-wrap:wrap;gap:4px;margin-top:7px}
.calendar-event .calendar-progress-tile{display:inline-block;margin:0;padding:3px 5px;border-radius:4px;font-size:10px;line-height:1.4;font-weight:600;overflow-wrap:anywhere}
.calendar-progress-tile.grey{color:#505c56}

/* One grid keeps weekday headings aligned while the entire month scrolls. */
.calendar-scroll{max-width:100%;overflow-x:auto;overflow-y:auto;scrollbar-width:auto;padding-bottom:8px;touch-action:pan-y}
.calendar-scroll:focus-visible{outline:3px solid #277454;outline-offset:3px}
.calendar-scroll-help{font-size:12px;margin:10px 0}

.calendar-day-strip{display:flex;position:relative;gap:0;touch-action:pan-x pan-y;align-items:stretch;border-top:1px solid #e0e7e0;border-left:1px solid #e0e7e0}
.calendar-day-strip>.calendar-day{flex:0 0 calc(100% / 5);min-width:180px;max-width:none}
.calendar-day-heading{font-weight:700;font-size:12px;padding-bottom:8px;white-space:nowrap}
@media(prefers-reduced-motion:reduce){.calendar-day-strip{scroll-behavior:auto}}

.thumbnail-crop-editor{margin-top:18px;padding-top:16px;border-top:1px solid #e3eae5}.thumbnail-crop-editor h4{margin:0 0 6px}.thumbnail-crop-preview{display:block;width:100%;max-width:640px;height:auto;aspect-ratio:32 / 15;background:#fff;border:1px solid #cbd8d0;border-radius:6px}.thumbnail-crop-controls{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:16px;margin-top:16px;max-width:640px}.thumbnail-crop-controls output{float:right;font-weight:400;color:#60766a}.thumbnail-crop-controls input[type=range]{width:100%;padding:0;accent-color:#17634e;min-height:24px;cursor:pointer}.thumbnail-crop-controls input:disabled{cursor:default}@media(max-width:550px){.thumbnail-crop-controls{grid-template-columns:1fr;gap:0}}

/* Compact month thumbnails navigate the detailed strip without changing its cards. */
.month-overview{margin:18px 0 22px;border:1px solid #e3eae5;border-radius:8px;background:#fafcfb;padding:12px;min-width:0}.month-overview-heading{display:flex;justify-content:space-between;gap:12px;align-items:center}.month-overview-heading h3{font-size:13px;margin:0}.month-overview-heading p{font-size:11px;margin:4px 0 10px}.month-overview-heading .actions{flex-wrap:nowrap;gap:5px}.month-overview-heading button{padding:5px 9px}.month-overview-scroll{position:relative;display:flex;gap:12px;overflow-x:auto;overflow-y:hidden;padding:2px 2px 10px;overscroll-behavior-x:contain;scrollbar-width:thin;min-width:0}.month-overview-scroll:focus-visible{outline:2px solid #277454;outline-offset:3px}.month-overview-card{flex:0 0 calc((100% - 24px) / 3);min-width:210px;margin:0;border:1px solid #e1e8e3;border-radius:7px;padding:10px;background:#fff}.month-overview-card.selected-month{border-color:#aebfb3}.month-overview-card h4{font-size:12px;margin:0 0 9px}.month-overview-week,.month-overview-days{display:grid;grid-template-columns:repeat(7,minmax(0,1fr));gap:2px}.month-overview-week span{text-align:center;font-size:9px;font-weight:600;color:#65746b;padding-bottom:5px}.month-overview-day,.month-overview-blank{height:24px;min-width:24px}.month-overview-day{position:relative;border:0;border-radius:4px;background:transparent;padding:0;font-size:10px;font-weight:400;line-height:20px;color:#30473b}.month-overview-day:hover{background:#eaf1ec}.month-overview-day.overview-today{background:#f1f5f1;font-weight:700}.month-overview-day.selected-day{background:#245e48;color:white;font-weight:700}.month-overview-day:focus-visible{outline:2px solid #277454;outline-offset:1px;z-index:1}.month-booking-dot{position:absolute;bottom:1px;left:calc(50% - 1.5px);width:3px;height:3px;border-radius:50%;background:#548370}.selected-day .month-booking-dot{background:#fff}.month-overview-card.outside-coverage{background:#f8faf8}.month-overview-card small{font-size:9px;margin:4px 0 0;color:#69776e}@media(max-width:550px){.month-overview{padding:9px}.month-overview-heading{align-items:flex-start}.month-overview-heading p{max-width:230px}}

/* Saved time has its own line; progress stays inside a narrow right-hand rail. */
.calendar-event.calendar-event-neutral{display:grid;grid-template-columns:minmax(0,1fr) 24px;gap:6px;align-items:start;padding:8px;max-width:100%;overflow-wrap:anywhere}.calendar-event-open{display:block;min-width:0;width:100%;text-align:left;background:transparent;border:0;padding:0;border-radius:2px;font-size:11px;line-height:1.45;font-weight:400}.calendar-event-open:hover{background:transparent}.calendar-event-open b{display:block;font-size:12px}.calendar-event .calendar-booking-time{display:block;font-size:14px;font-weight:700;line-height:1.3;margin:0 0 6px;color:#203e32;overflow-wrap:normal}.calendar-event .calendar-booking-time.time-missing{font-size:11px;color:#6a756e;font-weight:500}.calendar-progress-toggle{display:flex;flex-direction:column;align-items:center;gap:6px;width:24px;min-height:24px;max-width:24px;padding:4px;border:0;background:transparent;border-radius:4px}.calendar-progress-toggle:hover,.calendar-progress-toggle[aria-expanded=true]{background:#edf3ef}.calendar-event .calendar-progress-square{display:inline-block;flex:none;width:12px;height:12px;margin:0;padding:0;border-radius:2px;border:1px solid currentColor}.calendar-progress-square.blue{background:#42659e;color:#42659e}.calendar-progress-square.teal{background:#3d817a;color:#3d817a}.calendar-progress-square.indigo{background:#7060a8;color:#7060a8}.calendar-progress-square.purple{background:#9669ad;color:#9669ad}.calendar-progress-square.green{background:#448257;color:#448257}.calendar-progress-square.amber{background:#b08330;color:#b08330}.calendar-progress-square.grey{background:#8b9690;color:#8b9690}.calendar-progress-explanation{grid-column:1 / -1;border-top:1px solid #e3e9e5;margin-top:2px;padding-top:6px;font-size:10px;line-height:1.4}.calendar-progress-explanation>div{display:flex;gap:6px;align-items:flex-start;margin:4px 0}.calendar-progress-explanation small{font-size:9px;margin-top:1px}.calendar-progress-explanation>div>span:last-child{min-width:0;margin:0}
.calendar-progress-square.booked-yellow{background:#ffdf00;color:#8f7900}.calendar-progress-square.measured-green{background:#00d12f;color:#00851d}.calendar-progress-square.started-blue{background:#0066ff;color:#004ac2}.calendar-progress-square.detailed-magenta{background:#ff00d4;color:#b40095}.calendar-progress-square.signedoff-red{background:#ff1717;color:#be0000}
.calendar-square-legend{display:flex;flex-wrap:wrap;gap:8px 14px}.calendar-square-legend>span{display:inline-flex;gap:6px;align-items:center;font-size:10px}.calendar-square-legend .calendar-progress-square{display:inline-block;width:10px;height:10px;flex:none;border:1px solid currentColor;border-radius:1px}.logo.business-brand{font-size:21px;letter-spacing:-.4px;line-height:1.3}.logo.business-brand small{font-size:12px;letter-spacing:0;line-height:1.5;margin-top:7px;max-width:180px}.logo.business-brand a{display:inline-block;color:#e0efe5;font-size:13px;font-weight:500;letter-spacing:.4px;margin-top:8px;text-decoration:none}.logo.business-brand a:hover{text-decoration:underline}@media(max-width:800px){.logo.business-brand{font-size:21px}.logo.business-brand small{display:inline-block;max-width:none;margin:0 12px;font-size:12px}.logo.business-brand a{font-size:12px;margin-top:0}}

.calendar-event .calendar-job-name{display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden;font-weight:600;font-size:12px;line-height:1.35;overflow-wrap:anywhere}

/* Each structure owns its own recorded progress; never inherit parent milestones. */
.card-structure-progress{padding:0 18px 10px;min-width:0}
.structure-progress-row{padding:0;border:0;margin:0;border-top:1px solid #edf0ee}
.structure-progress-row>summary{display:flex;align-items:center;gap:8px;min-height:34px;padding:5px 0;cursor:pointer;list-style:none;font-size:11px;border-radius:3px}
.structure-progress-row>summary::-webkit-details-marker{display:none}
.structure-progress-row>summary:focus-visible{outline:2px solid #176b47;outline-offset:2px}
.structure-progress-code{font-weight:700;overflow-wrap:anywhere;min-width:0}
.structure-progress-squares{display:flex;align-items:center;flex-wrap:wrap;gap:5px;margin-left:auto}
.structure-progress-help{font-size:13px;color:#58665e;flex:none}
.structure-progress-squares .calendar-progress-square,.structure-progress-check .calendar-progress-square{display:inline-block;width:12px;height:12px;padding:0;margin:0;flex:none;border:1px solid currentColor;border-radius:2px}
.structure-progress-empty{font-size:10px;white-space:nowrap}
.structure-progress-meaning{padding:2px 0 10px;font-size:11px;color:#45554a}
.structure-progress-meaning ul{margin:0;padding-left:18px;display:grid;gap:4px}
.structure-progress-meaning p{margin:0}
.structure-progress-editor{border:1px solid #dce4df;border-radius:8px;padding:12px;margin:16px 0;min-width:0}
.structure-progress-editor legend{font-weight:700;padding:0 4px}
.structure-progress-editor .structure-progress-check{display:flex;align-items:center;gap:8px;margin:8px 0;font-weight:500}
.structure-progress-check input[type=checkbox]{width:18px;height:18px;flex:none;margin:0}
.structure-progress-check small{display:block;font-size:11px;color:#5b6b60;font-weight:400;margin-top:2px}

/* Explicit per-structure progress rails remain inside the single booking border. */
.calendar-event.calendar-event-neutral{grid-template-columns:minmax(0,1fr)}
.calendar-event.calendar-event-neutral.has-structure-progress{grid-template-columns:minmax(0,1fr) 64px;column-gap:8px}
.calendar-structure-progress{min-width:0;max-width:100%;align-self:start}
.calendar-event .calendar-structures-heading{display:block;margin:0 0 4px;text-align:center;font-size:9px;color:#52635a;font-weight:600}
.calendar-structure-rails{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:4px;min-width:0}
.calendar-structure-rails.single-structure{grid-template-columns:minmax(0,1fr)}
.calendar-structure-rail{display:flex;flex-direction:column;align-items:center;gap:5px;min-width:0;width:100%;padding:4px 2px;min-height:32px;border:1px solid #e2e8e4;border-radius:4px;background:#fff;cursor:pointer;font-size:9px;line-height:1.3}
.calendar-structure-rail:hover,.calendar-structure-rail[aria-expanded=true]{background:#edf3ef;border-color:#a6baad}
.calendar-structure-rail:focus-visible{outline:2px solid #176b47;outline-offset:1px}
.calendar-event .calendar-structure-label{display:block;font-size:10px;font-weight:700;line-height:1.2;margin:0;max-width:100%;overflow-wrap:anywhere}
.calendar-event .calendar-structure-squares{display:flex;flex-direction:column;gap:5px;align-items:center;margin:0;max-width:100%}
.calendar-event .calendar-structure-empty{font-size:8px;font-weight:400;color:#627168;line-height:1.3;margin:0;overflow-wrap:anywhere}
.calendar-progress-explanation>strong{display:block;overflow-wrap:anywhere}
.calendar-progress-explanation>small{display:block;color:#627168;margin-top:6px}

/* Continuous NZ-hour axis; card width is readable content, never a duration bar. */
.hourly-timeline-scroll{overflow:auto;position:relative;max-height:75vh;overscroll-behavior-x:contain;touch-action:pan-x pan-y;border:1px solid #dce5df;border-radius:7px;scrollbar-width:thin}.hourly-timeline-scroll:focus-visible{outline:2px solid #277454;outline-offset:3px}.hourly-timeline-canvas{min-width:100%;position:relative}.hourly-timeline-days{display:flex;position:sticky;top:0;z-index:2;background:#f5f8f5;min-width:100%;border-bottom:1px solid #cddbd1}.hourly-timeline-day{overflow:clip;flex:none;border-left:1px solid #aebfb3;min-height:65px}.hourly-timeline-day.is-today{background:#edf4ed}.hourly-day-label{position:sticky;left:0;width:max-content;max-width:100%;flex-wrap:wrap;padding:7px 8px;font-size:12px;font-weight:700;display:flex;gap:10px;align-items:center}.hourly-dst-note{font-weight:400;font-size:10px;color:#516758}.hourly-hours{display:flex}.hourly-hours>span{flex:none;font-size:10px;border-left:1px solid #dce5df;padding:4px 5px;min-height:28px;line-height:1.2}.hourly-hours small{font-size:8px;margin:2px 0 0}.hourly-timeline-lanes{background:repeating-linear-gradient(to right,#e7ede8 0,#e7ede8 1px,transparent 1px,transparent 72px);padding:10px 0 16px;min-height:160px}.hourly-timeline-lane{display:flex;align-items:flex-start;margin-bottom:14px}.hourly-timeline-lane:last-child{margin-bottom:0}.hourly-booking-anchor{flex:none;min-width:0;position:relative;border-left:2px solid #2c7052}.hourly-start-pin{font-size:10px;font-weight:700;color:#285b46;line-height:1.5;white-space:nowrap;padding-left:3px}.hourly-start-pin>span{position:absolute;left:-6px;top:0;background:white}.hourly-booking-anchor>.calendar-event{margin:4px 0 0}.hourly-time-warning{font-size:10px;color:#8f442e;margin:5px 7px}.hourly-empty{position:sticky;left:12px;display:inline-block;max-width:300px;font-size:12px;color:#687b6d;margin:20px 12px}.hourly-time-review{border:1px solid #e5d7bd;background:#fffcf5;border-radius:7px;margin-top:14px;padding:12px}.hourly-time-review .structure-line{flex-wrap:wrap}.hourly-time-review summary{font-weight:600;font-size:12px}@media(prefers-reduced-motion:reduce){.hourly-timeline-scroll{scroll-behavior:auto}}

/* Saved-history detail is a read-only native dialog; closing restores list focus. */
.saved-job-dialog{width:min(900px,calc(100vw - 32px));max-height:calc(100dvh - 40px);overflow:auto;border:1px solid #d7e1db;border-radius:12px;padding:22px;color:#203431;background:#f8faf8;box-shadow:0 18px 70px #0d211b33}
.saved-job-dialog::backdrop{background:#132c2466}
.saved-job-dialog>.section-title{align-items:start;gap:12px}
.saved-job-dialog>.section-title h2{overflow-wrap:anywhere}
.saved-job-dialog>.section-title button{flex:none}
.saved-job-dialog .job-card{max-width:100%;width:100%}
@media(max-width:600px){.saved-job-dialog{padding:14px;width:calc(100vw - 20px)}.saved-job-dialog>.section-title{flex-wrap:wrap}}

/* Uploaded is a green check, distinct by shape from the measured green square. */
.calendar-progress-square.uploaded-green-tick{background:transparent;color:#009b2b;border:0;border-radius:0;font-family:Arial,sans-serif;font-size:17px;font-weight:900;line-height:12px;text-align:center;overflow:visible}
.calendar-progress-square.uploaded-green-tick .progress-check-glyph{display:block;margin:0;font:inherit;line-height:inherit;color:inherit}

/* The info list uses matching progress markers instead of plain list bullets. */
.structure-progress-meaning ul{list-style:none;padding-left:0}
.structure-progress-meaning li{display:flex;align-items:flex-start;gap:8px}
.structure-progress-meaning li>.calendar-progress-square{display:inline-block;width:12px;height:12px;flex:none;margin:2px 0 0;padding:0}
.structure-progress-meaning .calendar-progress-square:not(.uploaded-green-tick){border:1px solid currentColor;border-radius:2px}
.structure-progress-meaning li>span:last-child{min-width:0;overflow-wrap:anywhere}

/* Shared wall-clock rows run vertically; days scroll horizontally. */
.vertical-timeline-canvas{position:relative;min-width:100%}.vertical-timeline-header{display:flex;position:sticky;top:0;z-index:4;height:64px;background:#f5f8f5;border-bottom:1px solid #bdcec2}.vertical-time-corner{position:sticky;left:0;z-index:5;flex:none;display:flex;align-items:center;justify-content:center;background:#eef3ef;border-right:1px solid #bdcec2;font-size:10px;font-weight:700}.vertical-day-heading{flex:none;min-width:0;border-right:1px solid #cddbd1;padding:9px 12px;font-size:12px;font-weight:700;overflow:clip}.vertical-day-heading>div{position:sticky;left:76px;width:max-content;max-width:100%;display:flex;align-items:center;gap:10px}.vertical-day-heading.is-today{background:#f5f8f5}.vertical-day-heading .hourly-dst-note{position:sticky;left:76px;display:block;width:max-content;max-width:100%;margin-top:4px}.vertical-timeline-body{display:flex;position:relative}.vertical-time-axis{position:sticky;left:0;flex:none;z-index:3;background:#f6f8f6;border-right:1px solid #bdcec2}.vertical-time-axis>span{position:absolute;right:8px;font-size:10px;line-height:14px;transform:translateY(-7px);font-variant-numeric:tabular-nums}.vertical-time-axis>span:first-child{transform:none}.vertical-day-column{position:relative;flex:none;border-right:1px solid #bdcec2;background:repeating-linear-gradient(to bottom,#dce5df 0,#dce5df 1px,transparent 1px,transparent 96px)}.vertical-day-column.is-today{background-color:#fafcf9}.vertical-booking-anchor{position:absolute;z-index:2;border-left:0;border-top:2px solid #2c7052}.vertical-booking-anchor .hourly-start-pin{padding-left:8px}.vertical-booking-anchor .hourly-start-pin>span{left:-4px;top:-9px}.vertical-dst-hour{position:absolute;left:0;right:0;background:repeating-linear-gradient(135deg,#fff3d9 0,#fff3d9 7px,#fff9ed 7px,#fff9ed 14px);color:#77521c;border-top:1px dashed #bf913e;border-bottom:1px dashed #bf913e;padding:8px 12px;font-size:10px}.vertical-dst-hour>span{position:sticky;left:76px;display:inline-block;max-width:280px}.vertical-timeline-canvas .hourly-booking-anchor>.calendar-event{margin-top:4px}

/* Out-of-hours appointments remain explicit; card height never implies duration. */
.hourly-outside-hours{border:1px solid var(--ui-blue,#003976);border-radius:8px;padding:16px;margin:16px 0;background:#fff}.hourly-outside-hours h3{margin:0 0 8px}.hourly-outside-cards{display:grid;grid-template-columns:repeat(auto-fit,minmax(min(100%,320px),1fr));gap:16px}.hourly-outside-booking{min-width:0;max-width:420px}.hourly-outside-label{font-size:12px;line-height:1.5;margin:0 0 8px}.hourly-outside-booking>.calendar-event{width:100%;max-width:100%}

/* Structure tiles: exact headings above recorded symbols; native details retain dates and actions. */
.card-structure-progress{display:grid;grid-template-columns:repeat(auto-fit,minmax(min(100%,160px),1fr));gap:10px;align-items:start}
.structure-progress-tile{min-width:0;max-width:100%;margin:0;padding:0;border:1px solid var(--ui-border,#cbd6e2);border-radius:8px;background:#fff;overflow-wrap:anywhere}
.structure-progress-tile>summary{display:grid;grid-template-columns:minmax(0,1fr);align-items:start;gap:9px;min-height:0;margin:0;padding:11px;font-size:12px;border-radius:8px}
.structure-progress-tile>summary:hover{background:var(--ui-hover,#edf3f8)}
.structure-progress-tile>summary:focus-visible{outline:2px solid var(--ui-blue,#003976);outline-offset:2px}
.structure-progress-heading{display:flex;flex-direction:column;gap:3px;min-width:0}
.structure-progress-tile .structure-progress-code{font-size:13px;line-height:1.35;white-space:normal;overflow-wrap:anywhere}
.structure-tile-state{font-size:11px;font-weight:500;color:var(--ui-muted,#566579)}
.structure-progress-tile .structure-progress-squares{margin:0;flex-direction:column;align-items:flex-start;justify-content:flex-start;gap:6px;min-width:0;min-height:14px}
.structure-progress-tile .structure-progress-help{font-size:11px;color:var(--ui-muted,#566579);justify-self:start}
.structure-progress-tile .structure-progress-meaning{padding:0 11px 11px;color:var(--ui-ink,#203447);min-width:0;overflow-wrap:anywhere}
.structure-tile-facts{display:grid;grid-template-columns:minmax(0,1fr);gap:3px;margin:12px 0 8px;font-size:11px}
.structure-tile-facts dt{font-weight:600;color:var(--ui-muted,#566579)}
.structure-tile-facts dd{margin:0 0 5px;min-width:0;white-space:normal;overflow-wrap:anywhere}
.structure-progress-tile .structure-tile-estimate-note{margin:8px 0}
.structure-progress-tile .structure-progress-meaning>button{max-width:100%;min-height:36px;white-space:normal}
@media(max-width:420px){.card-structure-progress{padding-left:12px;padding-right:12px;gap:8px;grid-template-columns:repeat(auto-fit,minmax(min(100%,140px),1fr))}}
/* End structure tiles. */

/* Focused cards stay mounted while their siblings are hidden; saved order is untouched. */
.job-card-focus-shell{min-width:0}.job-card-focus-shell.expanded{grid-column:1 / -1}
.job-card-focus-shell[hidden],.job-card-order-shell[hidden],.card-order-help[hidden]{display:none!important}
.card-focus-bar{display:flex;align-items:center;justify-content:space-between;gap:16px;padding:12px 16px;margin:0 0 14px;border:1px solid var(--ui-border);border-radius:8px;background:#fff;min-width:0;overflow-wrap:anywhere}
.card-focus-bar p{font-size:12px;margin:4px 0 0}.card-focus-bar button{flex:none;min-height:40px}.card-focus-bar button:focus-visible{outline:2px solid var(--ui-blue);outline-offset:2px}
@media(max-width:600px){.card-focus-bar{align-items:stretch;flex-direction:column;gap:10px}.card-focus-bar button{align-self:flex-start;max-width:100%;white-space:normal}}

/* Owner-requested colour inspiration only; no third-party logo or affiliation. */
:root{--ui-blue:#003976;--ui-blue-hover:#002c5c;--ui-cyan:#00b4cd;--ui-yellow:#ffd520;--ui-ink:#203447;--ui-muted:#566579;--ui-border:#cbd6e2;--ui-surface:#f4f6f8;--ui-hover:#edf3f8;color:var(--ui-ink);background:var(--ui-surface)}
button{color:var(--ui-blue);border-color:var(--ui-border)}
button:hover{background:var(--ui-hover)}
a,.link{color:var(--ui-blue)}
button:focus-visible,a:focus-visible,input:focus-visible,select:focus-visible,textarea:focus-visible,summary:focus-visible{outline-color:var(--ui-blue)}
input,textarea,select{color:var(--ui-ink);border-color:var(--ui-border);accent-color:var(--ui-blue)}
small,.muted,.eyebrow,footer{color:var(--ui-muted)}
aside{background:var(--ui-blue);color:#fff}
aside .logo small,aside .workspace,aside .side-bottom p{color:#dceaf6}
aside .logo.business-brand a{color:#fff}
aside .nav{background:transparent;color:#fff}
aside .nav:hover{background:var(--ui-blue-hover);color:#fff}
aside .nav.active,aside .nav.active:hover{background:var(--ui-cyan);color:var(--ui-blue-hover);box-shadow:inset 3px 0 0 var(--ui-yellow)}
aside :focus-visible{outline-color:var(--ui-yellow)}
.primary{background:var(--ui-blue);border-color:var(--ui-blue);color:#fff}
.primary:hover{background:var(--ui-blue-hover);border-color:var(--ui-blue-hover);color:#fff}
.stats>div,.panel,.card,.job-card,.structure-progress-editor{border-color:var(--ui-border)}
.card.selected,.job-card.expanded{border-color:var(--ui-blue);box-shadow:0 0 0 1px var(--ui-blue)}
.job-card-summary:hover{background:var(--ui-hover)}
.job-card-summary:focus-visible{outline-color:var(--ui-blue)}
.card-chevron,.card-expand-label{color:var(--ui-blue)}
.card-builder,.card-measure,.card p,.card-foot,.card-job-notes{color:var(--ui-muted)}
th{color:var(--ui-muted);background:#f3f6f9}
pre,.mail-editor{background:#f3f6f9}
.overlay{background:#122c4666}
.saved-job-dialog{color:var(--ui-ink);background:#f7f9fb;border-color:var(--ui-border)}
.saved-job-dialog::backdrop{background:#122c4666}
.month-overview{background:#f7f9fb;border-color:var(--ui-border)}
.month-overview-card.selected-month{border-color:#8da7c1}
.month-overview-day{color:var(--ui-ink)}
.month-overview-day:hover{background:var(--ui-hover)}
.month-overview-day.selected-day{background:var(--ui-blue);color:#fff}
.month-booking-dot{background:var(--ui-blue)}
.selected-day .month-booking-dot{background:#fff}
.month-overview-scroll:focus-visible,.month-overview-day:focus-visible,.calendar-scroll:focus-visible,.hourly-timeline-scroll:focus-visible,.calendar-structure-rail:focus-visible{outline-color:var(--ui-blue)}
.calendar-event.calendar-event-neutral{color:var(--ui-ink);border-color:var(--ui-border);border-left-color:#94a4b5;background:#fff}
.calendar-event.calendar-event-neutral:hover{background:#f7f9fb}
.calendar-event .calendar-booking-time{color:var(--ui-blue)}
.calendar-event .calendar-booking-time.time-missing{color:var(--ui-muted)}
.calendar-structure-rail:hover,.calendar-structure-rail[aria-expanded=true]{background:var(--ui-hover);border-color:#91a8be}
.hourly-start-pin{color:var(--ui-blue)}
.hourly-booking-anchor{border-left-color:var(--ui-blue)}
.vertical-booking-anchor{border-top-color:var(--ui-blue)}
.thumbnail-crop-controls input[type=range]{accent-color:var(--ui-blue)}
/* End owner-requested palette. Recorded progress colours and Today stay unchanged. */

/* Confirmed duration geometry is independent of content; details live outside the grid. */
.duration-scaled-timeline{max-height:min(560px,72vh)}
.duration-scaled-timeline .vertical-timeline-header{height:48px}
.duration-scaled-timeline .vertical-day-heading{padding:5px 12px}
.vertical-duration-anchor{position:absolute;z-index:2;box-sizing:border-box;padding:0;border:0;min-height:0}
.vertical-duration-bar{display:block;position:absolute;inset:0;width:100%;height:100%;min-height:0;max-height:100%;margin:0;padding:0;border:0;border-radius:3px;background:#fff;box-shadow:inset 0 0 0 1px #0a477b;text-align:left;overflow:hidden;color:#07376d;line-height:1.15;cursor:pointer;box-sizing:border-box}
.vertical-duration-bar:hover,.vertical-duration-bar.is-selected{background:#eef8fc;box-shadow:inset 0 0 0 2px #07376d}
.vertical-duration-bar:focus-visible{outline:2px solid #07376d;outline-offset:2px}
.vertical-bar-content{display:flex;flex-direction:column;gap:2px;padding:4px 7px;font-size:11px;min-width:0}
.vertical-bar-content>strong{font-variant-numeric:tabular-nums;font-size:11px}
.vertical-bar-content>span{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.vertical-bar-content>small{font-size:10px;margin:0}
.vertical-start-only-marker{position:absolute;inset:0;height:0;border:0;border-top:1px dashed #315e7e;opacity:.85}
.timeline-booking-detail,.hourly-unknown-duration,.hourly-short-bookings{margin-top:12px;border:1px solid #cbd8e4;border-radius:7px;padding:12px;background:#fff}
.timeline-booking-detail>.calendar-event{max-width:680px}
.timeline-booking-detail h3{margin:0;font-size:14px}
.timeline-booking-detail h3:focus{outline:none}
.timeline-booking-list-row{display:flex;align-items:center;flex-wrap:wrap;gap:8px 16px;border-top:1px solid #e1e7ed;padding:5px 0;font-size:12px}
.timeline-booking-list-row>button{min-height:36px;flex:none;text-align:left}
.timeline-booking-list-row>span{font-variant-numeric:tabular-nums}
@media(max-width:600px){.timeline-booking-detail .section-title{align-items:flex-start;gap:10px}.timeline-booking-list-row{display:block}.timeline-booking-list-row>span{display:block}}

.vertical-start-only-label{position:absolute;left:0;width:100%;min-height:0;line-height:24px;padding:0 6px;border:0;border-bottom:1px dashed #315e7e;border-radius:0;background:#f8fbfd;color:#07376d;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;text-align:left;font-size:10px;box-sizing:border-box;cursor:pointer}
.vertical-start-only-label:focus-visible{outline:2px solid #07376d;outline-offset:1px}

/* Card-header stages match the established progress-square colours. */
.badge.card-stage-badge.booked-yellow{background:#ffdf00;color:#171717}
.badge.card-stage-badge.measured-green{background:#00d12f;color:#171717}
.badge.card-stage-badge.started-blue{background:#0066ff;color:#fff}
.badge.card-stage-badge.detailed-magenta{background:#ff00d4;color:#171717}
.badge.card-stage-badge.sentoff-orange{background:#ff8a00;color:#171717}
.badge.card-stage-badge.signedoff-red{background:#ff1717;color:#171717}
.badge.card-stage-badge.uploaded-green-tick{background:#fff;color:#007521;border:1px solid #009b2b}
.badge.card-stage-badge.uploaded-green-tick .card-stage-icon{color:#009b2b}
.badge.card-stage-badge.neutral{background:#eef0f0;color:#45534e}

.badge.card-stage-badge{display:inline-flex;align-items:center;gap:5px;white-space:nowrap}
.card-stage-icon{display:block;flex-shrink:0}

/* Read-only calendar indicators stay inside duration bars; short bars use the list. */
.calendar-booking-indicators{display:flex;flex-direction:column;gap:4px;min-width:0;max-width:100%;white-space:normal}
.calendar-booking-indicators .card-stage-badge{align-self:flex-start;max-width:100%;font-size:10px;padding:2px 5px;line-height:1.2}
.calendar-booking-indicators .card-stage-icon{width:14px;height:14px}
.calendar-indicator-structures{display:flex;flex-wrap:wrap;align-items:center;gap:3px 7px;white-space:normal}
.calendar-indicator-structure{display:inline-flex;align-items:center;gap:3px;font-size:10px;line-height:1.3}
.calendar-indicator-structure small{font-size:9px;color:#63716b}
.calendar-booking-indicators .calendar-progress-square{display:inline-flex;align-items:center;justify-content:center;width:10px;height:10px;min-width:10px;border:0;border-radius:2px;font-size:9px;line-height:1;margin:0}
.calendar-booking-indicators .calendar-progress-square:not(.uploaded-green-tick){border:1px solid currentColor}
.vertical-bar-content>.calendar-booking-indicators{white-space:normal;overflow:visible}
.calendar-event-open>.card-stage-badge{display:inline-flex;margin:3px 0}
.calendar-list-line>.calendar-booking-indicators,.timeline-booking-list-row>.calendar-booking-indicators{flex:0 1 auto}

/* Display-only job timeline. Root stylesheet imports this file. */
.job-milestone-timeline{margin:18px 0;padding:16px;border:1px solid #d9e2ed;border-radius:12px;background:#fbfcfe;color:#18324b}
.job-timeline-heading{display:flex;align-items:baseline;justify-content:space-between;gap:12px;flex-wrap:wrap}
.job-timeline-heading h3{margin:0;font-size:17px}
.job-timeline-heading>span{font-size:12px;color:#465e73}
.job-timeline-help,.job-timeline-empty{margin:8px 0 12px;font-size:12px;line-height:1.55;color:#465e73}
.job-timeline-legend{display:flex;flex-wrap:wrap;gap:7px 14px;list-style:none;margin:12px 0;padding:0;font-size:11px}
.job-timeline-legend li,.job-timeline-date-list li{display:flex;align-items:center;gap:6px}
.job-timeline-key{width:10px;height:10px;border-radius:2px;display:inline-block;flex:0 0 auto;background:var(--timeline-colour);box-shadow:0 0 0 1px #18324b22}
.job-milestone-timeline .booked-yellow{--timeline-colour:#ffdf00}
.job-milestone-timeline .measured-green{--timeline-colour:#00d12f}
.job-milestone-timeline .started-blue{--timeline-colour:#0066ff}
.job-milestone-timeline .detailed-magenta{--timeline-colour:#ff00d4}
.job-milestone-timeline .sentoff-orange{--timeline-colour:#ff8a00}
.job-milestone-timeline .signedoff-red{--timeline-colour:#ff1717}
.job-milestone-timeline .uploaded-green-tick{--timeline-colour:#009b2b}
.job-timeline-key.uploaded-green-tick,.job-timeline-point.uploaded-green-tick{background:transparent!important;color:#009b2b;box-shadow:none;font-size:17px;line-height:10px;font-weight:900}
.job-timeline-scroll{overflow-x:auto;border-top:1px solid #d9e2ed;padding-top:12px;scrollbar-width:thin}
.job-timeline-scroll:focus-visible{outline:2px solid #0066ff;outline-offset:3px}
.job-timeline-chart{min-width:650px}
.job-timeline-axis,.job-timeline-row{display:grid;grid-template-columns:170px minmax(0,1fr);column-gap:20px}
.job-timeline-axis{height:35px;font-size:10px;color:#50677b}
.job-timeline-axis>div{position:relative;margin:0 45px;height:30px}
.job-timeline-axis time{position:absolute;transform:translateX(-50%);white-space:nowrap;top:3px}
.job-timeline-row{padding:12px 0;border-top:1px solid #e4eaf2;align-items:start}
.job-timeline-row-heading{display:flex;flex-direction:column;gap:4px;overflow-wrap:anywhere;font-size:12px}
.job-timeline-row-heading strong{font-size:13px}
.job-timeline-row-heading small{color:#52697b;font-size:10px}
.job-timeline-row-heading>span{font-size:11px;line-height:1.4}
.job-timeline-row-body{min-width:0}
.job-timeline-track{position:relative;height:32px;margin:0 45px 6px;background:linear-gradient(transparent 15px,#d8e2ec 15px,#d8e2ec 17px,transparent 17px)}
.job-timeline-gridline{position:absolute;top:0;bottom:0;border-left:1px dashed #d9e2ed}
.job-timeline-segment{position:absolute;top:12px;height:8px;border-radius:4px;background:var(--timeline-colour);box-shadow:0 0 0 1px #18324b1a}
.job-timeline-points{position:absolute;top:9px;display:flex;gap:2px;transform:translateX(-50%);align-items:center;z-index:1}
.job-timeline-point{display:block;box-sizing:border-box;width:13px;height:13px;border:1px solid #18324b66;border-radius:3px;background:var(--timeline-colour);flex:0 0 auto}
.job-timeline-point.timeline-booked,.job-timeline-point.timeline-provisional,.job-timeline-point.timeline-historical,.job-timeline-point.timeline-unverified{background:#fff;border:3px solid #ad9300}
.job-timeline-point.timeline-provisional,.job-timeline-point.timeline-unverified{border-style:dashed}
.job-timeline-point.timeline-historical{border-color:#6a7c8e}
.job-timeline-point.uploaded-green-tick{border:0}
.job-timeline-no-date{position:absolute;left:50%;transform:translateX(-50%);top:7px;background:#fbfcfe;padding:0 8px;white-space:nowrap;font-size:11px;color:#536879}
.job-timeline-date-list{list-style:none;display:flex;flex-wrap:wrap;gap:6px 12px;margin:0;padding:0;font-size:11px;line-height:1.4}
.job-timeline-date-list li{align-items:baseline}
.job-timeline-date-list .timeline-date-provisional,.job-timeline-date-list .timeline-date-unverified{border-bottom:1px dashed #8d7900}
.job-timeline-missing{margin:7px 0 0;font-size:11px;line-height:1.5;color:#596b7b}
.job-timeline-warning{margin:6px 0 0;padding:6px 8px;border-left:3px solid #b56b00;background:#fff5e5;font-size:11px;color:#734400}
@media(max-width:640px){.job-milestone-timeline{padding:12px}.job-timeline-heading{gap:5px}.job-timeline-help{font-size:11px}.job-timeline-chart{min-width:600px}.job-timeline-axis,.job-timeline-row{grid-template-columns:130px minmax(0,1fr);column-gap:14px}}

/* Grouped view: every structure and job uses the same 14 equal day columns. */
.grouped-timeline .toolbar{flex-wrap:wrap}.grouped-timeline .toolbar label{display:flex;align-items:center;gap:8px}.grouped-timeline .toolbar input{width:auto}.grouped-timeline-scroll{overflow:auto;max-height:75vh;border:1px solid #d9e2ed}.grouped-timeline-grid{min-width:860px}.grouped-axis,.grouped-structure-row{display:grid;grid-template-columns:180px minmax(0,1fr)}.grouped-axis{position:sticky;top:0;z-index:4;background:#eef3f6;border-bottom:1px solid #cbd8df;min-height:52px}.grouped-axis>strong{padding:14px}.grouped-axis>div{display:grid;grid-template-columns:repeat(14,minmax(0,1fr))}.grouped-axis time{text-align:center;padding:7px 0;font-variant-numeric:tabular-nums;font-size:13px}.grouped-axis small{font-size:11px;margin:1px 0}.grouped-job h3{padding:12px 14px;background:#e9f1ee;margin:0;font-size:15px;display:flex;gap:14px;align-items:baseline}.grouped-job h3 small{font-size:12px;margin:0}.grouped-job+.grouped-job{margin-top:18px}.grouped-structure-row{border-bottom:1px solid #e1e8ed}.grouped-structure-label{padding:16px 14px;background:#fbfcfe;position:sticky;left:0;z-index:2}.grouped-daily-track{position:relative;min-height:62px;background-image:linear-gradient(to right,#dfe7ed 1px,transparent 1px);background-size:calc(100% / 14) 100%}.grouped-span{position:absolute;top:14px;height:12px;min-height:0;border:0;padding:0;border-radius:2px;background:var(--timeline-colour);opacity:.8}.grouped-span:hover{background:var(--timeline-colour);opacity:1}.grouped-point{position:absolute;transform:translateX(-50%);width:18px;height:18px;min-height:0;padding:0;border-radius:3px;border:1px solid #18324b66;background:var(--timeline-colour);font-size:19px;line-height:18px;z-index:1}.grouped-point:hover{background:var(--timeline-colour)}.grouped-point.uploaded-green-tick{background:#fbfcfe;color:#009b2b;border:0;font-weight:900}.grouped-point:not(.timeline-recorded){background:#fff;border:3px solid #ad9300}.grouped-point.timeline-provisional,.grouped-point.timeline-unverified{border-style:dashed}.grouped-point.timeline-historical{border-color:#6a7c8e}.grouped-blank{position:absolute;left:14px;top:21px;font-size:12px;color:#596b7b;background:#fbfcfe}.grouped-selection{min-height:42px;font-size:13px}.grouped-visit-details{padding:8px 14px;background:#f5f8fa;font-size:12px}.grouped-visit-details p{font-size:12px}.grouped-structure-row>.job-timeline-warning{grid-column:1 / -1}@media(max-width:650px){.grouped-timeline .toolbar{gap:7px}.grouped-timeline .toolbar button{min-height:40px}.grouped-timeline-grid{min-width:790px}.grouped-axis,.grouped-structure-row{grid-template-columns:130px minmax(0,1fr)}}

.calendar-progress-square.sentoff-orange{background:#ff8a00;color:#a65300}

/* Keep recorded progress readable without opening the structure. */
.card-structure-progress .structure-progress-squares{grid-column:1 / -1;margin-left:0;flex-direction:column;align-items:flex-start;flex-wrap:wrap;gap:6px;min-width:0}
.structure-progress-item{display:flex;align-items:flex-start;gap:7px;max-width:100%;min-width:0}
.structure-progress-item>.calendar-progress-square{margin-top:3px}
.structure-progress-label{font-size:12px;line-height:1.45;font-weight:500;color:var(--ui-ink,#203447);overflow-wrap:anywhere;min-width:0}

.stage-pending-square{display:inline-block;width:14px;height:14px;min-width:14px;border:1px dashed #8997a7;border-radius:2px;background:#f1f4f7}.structure-progress-meaning li{align-items:flex-start}.structure-progress-meaning li>span:last-child{min-width:0;word-break:normal;overflow-wrap:normal}
/* Recorded visits are events; amber does not mean a missing record. */
.measure-visit-notes{padding:0 16px 8px}.recorded-visit{background:#fff7e4;border-left:3px solid #c88710;color:#765009;padding:8px;font-size:12px;margin:5px 0}.recorded-visit>strong,.recorded-visit>small,.recorded-visit>span{display:block;margin-bottom:4px}.recorded-visit strong>span{display:inline-block;background:#f3be47;border:1px solid #a56a00;border-radius:3px;padding:0 4px}.stage-note{font-size:12px;min-width:0}.stage-note summary{color:#285d87;font-weight:600;cursor:pointer;width:fit-content;padding:3px 0}.stage-note p{white-space:pre-wrap;overflow-wrap:anywhere;margin:6px 0}.stage-note>div{padding:8px;background:#f5f8fc;border:1px solid #d7e0eb;border-radius:6px}.stage-note small{display:block;color:#586a7c}.structure-progress-meaning li{flex-wrap:wrap}.structure-progress-meaning li>.stage-note{flex-basis:100%;margin-left:24px}
details.stage-note{padding:0;border:0;background:transparent;margin:0}
.job-card{border:1px solid #c5d2e2;border-radius:16px;box-shadow:0 4px 14px #17355314,0 1px 3px #1735530d;background:#fff;overflow:hidden}.job-card-summary{border-top:4px solid #173f70;border-radius:15px 15px 0 0;background:linear-gradient(#f0f5fb,#fff 90px)}
.card-top{flex-wrap:wrap;gap:8px}.card-top>strong{flex:1 0 100%;min-width:0;overflow-wrap:break-word;word-break:normal}.card-top .card-chevron{margin-left:auto}
.job-card-summary .card-top>strong,.card-top>strong{font-size:clamp(1.15rem,2vw,1.45rem);line-height:1.2}.signed-proof img{max-width:min(420px,100%);height:auto}.signed-proof summary{color:#0c4778;cursor:pointer}.recorded-visit.succeeded{background:#e8f6ec;color:#174632}.recorded-visit.booked,.recorded-visit.allowance{background:#eaf1f7;color:#183650}

.signed-proof summary .calendar-progress-square{display:inline-block;width:14px;height:14px;vertical-align:middle;margin-right:3px}
.signed-proof-cube{cursor:pointer;display:inline-block}.signed-proof-cube:focus-visible,.signed-proof summary:focus-visible{outline:3px solid #184c77;outline-offset:3px}

/* Stage markers keep one footprint across cards, calendars and the stage key. */
:root{--pbs-stage-square:18px}
.calendar-progress-square,.stage-pending-square,.milestone-dot,
.job-timeline-key,.job-timeline-point,.grouped-point{
 box-sizing:border-box;display:inline-flex;align-items:center;justify-content:center;vertical-align:middle;
 width:var(--pbs-stage-square)!important;height:var(--pbs-stage-square)!important;
 min-width:var(--pbs-stage-square)!important;min-height:var(--pbs-stage-square)!important;
 flex:0 0 var(--pbs-stage-square)!important;padding:0!important;
 border-radius:3px!important;line-height:1;
}
.calendar-progress-square.milestone-unrecorded,.stage-pending-square{background:transparent;border-style:dashed}
.calendar-progress-square.uploaded-green-tick{font-size:17px;line-height:1;color:#00851d}
.job-timeline-points{top:calc(16px - var(--pbs-stage-square) / 2)}

.production-visit-stage{display:inline-flex;align-items:center;gap:6px}.production-visit-stage .failed-visit{background:#ffe1da;border:1px solid #bb4b38;color:#9b3527;font-size:11px}
.stage-pending-square.pending-booked{border-color:#8f7900}.stage-pending-square.pending-measured{border-color:#00851d}.stage-pending-square.pending-detailingStarted{border-color:#004ac2}.stage-pending-square.pending-detailed{border-color:#b40095}.stage-pending-square.pending-signOff{border-color:#cc6500}.stage-pending-square.pending-signedOff{border-color:#be0000}.stage-pending-square.pending-uploaded{border-color:#00851d}

/* Read-only Production uses the same job card front as PBS. */
.job-card.pbs-card{overflow:hidden;min-width:0;border:1px solid #b8a17a;border-radius:10px;background:#eee0c4;background-image:repeating-linear-gradient(8deg,#fff5 0px,#fff5 1px,transparent 1px,transparent 5px),repeating-linear-gradient(95deg,#82653806 0px,#82653806 1px,transparent 1px,transparent 7px);box-shadow:0 3px 0 #c6b18c,0 4px 0 #a68d65,0 9px 18px #44321924}
.pbs-card .simple-job-heading{display:flex;align-items:center;justify-content:space-between;flex-wrap:wrap;gap:9px;padding:10px 16px;background:#173f70;color:white;border-bottom:3px solid #bfa880}
.pbs-card .simple-job-identity,.pbs-card .stage-cube-key{display:flex;align-items:center;flex-wrap:wrap;gap:5px}.pbs-card .simple-job-identity{gap:8px 12px}.pbs-card .simple-job-identity strong{font-size:clamp(17px,2vw,20px);line-height:1.2;letter-spacing:.025em}
.pbs-card .simple-job-heading .calendar-progress-square{box-shadow:0 0 0 1px #fff5}.pbs-card .simple-job-heading .job-card-summary{width:auto;min-height:28px;border:1px solid #ffffff38;border-radius:6px;background:#ffffff12;color:white;padding:4px 7px;font-size:14px;font-weight:650}
.pbs-card-body{padding:14px 16px}.pbs-card .production-style-heading{display:flex;align-items:flex-start;justify-content:space-between;gap:9px}.pbs-card h2{margin:0;font-size:17px;line-height:1.2;overflow-wrap:break-word}.pbs-card .simple-stage-badge{background:#e4eff7;color:#23415e;padding:4px 7px;border-radius:5px;font-weight:700;font-size:11px;line-height:1.25}.pbs-card .simple-stage-badge.blocked{background:#ffded5;color:#8d3024}.pbs-card .simple-stage-badge.archive{background:#d6efdf;color:#195b34}
.pbs-card .simple-job-address,.pbs-card .pbs-appointment{margin:.45rem 0;color:#435768;font-size:13px;font-weight:600}.simple-structure-status{display:flex;gap:4px;flex-wrap:wrap;margin:.6rem 0}.simple-structure-status span{background:#fff9;border:1px solid #c1b498;border-radius:4px;font-size:12px;font-weight:700;padding:3px 6px}
.pbs-stages{background:#fff9;border:1px solid #cbbd9f;border-radius:8px;padding:8px 10px}.pbs-stages h3,.pbs-card .job-card-detail h3{font-size:15px;margin:.1rem 0 .4rem}.pbs-stage{padding:5px 0;border-top:1px solid #d5c9b3}.pbs-stage-label{display:flex;gap:7px;align-items:center;font-size:13px}.pbs-stage-date{display:flex;align-items:baseline;justify-content:space-between;gap:7px;flex-wrap:wrap;color:#506277;font-size:12px;padding-left:25px}.pbs-stage-date.actual{color:#245d3a}.pbs-stages>.measure-visit-notes{padding:0}.pbs-stages .recorded-visit{padding:5px 7px;margin:3px 0}.pbs-stage .stage-note{margin-left:25px}.pbs-stages>small{font-size:11px;color:#566476}.pbs-card .job-card-detail:not([hidden]){margin-top:.75rem}.pbs-card .signed-proof-cube{min-height:0}

/* Approved contacts, compact rows without losing names or contact details. */
.production-contacts{display:flex;flex-direction:column;gap:0;margin:7px 0;padding:2px 8px;border:1px solid #d9e3ef;border-radius:7px;background:#ffffff80;font-size:12px}
.production-contacts>div{display:grid;grid-template-columns:minmax(0,1fr) auto;gap:0 10px;align-items:center;padding:2px 0;min-width:0}
.production-contacts>div+div{border-top:1px solid #d9e3ef}.production-contacts strong{font-size:12px;font-weight:650}.production-contacts a,.production-contacts span,.production-contacts strong{overflow-wrap:anywhere;min-width:0}.production-contacts a{min-height:32px;display:inline-flex;align-items:center}.production-history-label{display:block;font-size:11px;color:#566476;padding:3px 7px}
@media(max-width:600px){.production-contacts>div{grid-template-columns:minmax(0,1fr) auto;gap:0 8px;padding:3px 0}.production-contact-phone{grid-column:2;grid-row:1}.production-contact-email{grid-column:1/-1}.production-contacts a{min-height:32px}}

.production-contact-phone{grid-column:2;grid-row:1}.production-contact-email{grid-column:1/-1}.production-contacts a.production-contact-email{min-height:26px}

.job-enquiries{margin:12px 0;border-top:1px solid #cad9df;padding-top:10px}.enquiry-toggle{width:100%;text-align:left;font-weight:700}.enquiry-new{display:inline-block;padding:2px 7px;border-radius:12px;background:#165f80;color:white;font-size:12px}.enquiry-notice{font-size:12px;color:#526873}.enquiry-content label{display:block;margin:9px 0}.enquiry-content textarea{display:block;width:100%;box-sizing:border-box;min-height:76px;resize:vertical;padding:8px}.enquiry-content select{max-width:100%;margin-left:8px}.enquiry-thread{margin-top:12px;border:1px solid #cad9df;border-radius:8px;padding:10px}.enquiry-thread summary{cursor:pointer;overflow-wrap:anywhere}.enquiry-message{padding:10px 0;border-bottom:1px solid #e1e7eb}.enquiry-message time{display:block;font-size:11px;color:#526873}.enquiry-message p{white-space:pre-wrap;overflow-wrap:anywhere}.enquiry-content button{min-height:36px}.enquiry-content button:disabled{opacity:.6}
