:root{--navy:#10233f;--blue:#2f6fed;--bg:#f4f7fb;--line:#dfe6ef;--text:#17243a;--muted:#6b778c;--white:#fff;--shadow:0 10px 30px rgba(20,39,73,.08)}
*{box-sizing:border-box}body{margin:0;background:var(--bg);color:var(--text);font:14px/1.45 Inter,ui-sans-serif,system-ui,-apple-system,sans-serif}button,input,select,textarea{font:inherit}button{cursor:pointer;border:1px solid var(--line);background:#fff;border-radius:9px;padding:9px 13px;color:var(--text)}header{height:68px;background:#fff;border-bottom:1px solid var(--line);display:flex;align-items:center;padding:0 28px;gap:36px}.brand{display:flex;gap:10px;align-items:center;min-width:170px}.brand strong,.brand small{display:block}.brand strong{font-size:18px}.brand small{color:var(--muted)}.brand-mark{display:grid;place-items:center;width:52px;height:52px;background:linear-gradient(145deg,#1b77d2,#0b3d7c);color:#fff;font-weight:900;font-size:28px;border-radius:15px}.brand-mark.small{width:38px;height:38px;border-radius:10px;font-size:20px}nav{display:flex;gap:8px;flex:1}nav button{border:0}.nav-active{background:#edf4ff;color:var(--blue);font-weight:700}.user{display:flex;gap:14px;align-items:center}.user form{margin:0}main{padding:30px;max-width:1700px;margin:auto}.page-title{display:flex;align-items:end;justify-content:space-between;margin-bottom:22px}h1,h2,p{margin-top:0}h1{font-size:30px;margin-bottom:4px}h2{font-size:23px}.eyebrow{font-size:11px;letter-spacing:.14em;color:var(--blue);font-weight:800;margin-bottom:5px}.muted{color:var(--muted)}.primary{background:var(--blue);border-color:var(--blue);color:#fff;font-weight:700}.wide{width:100%;padding:12px}.metrics{display:grid;grid-template-columns:repeat(3,1fr);gap:15px;margin-bottom:18px}.metrics article{background:#fff;border:1px solid var(--line);border-radius:12px;padding:17px 20px;box-shadow:var(--shadow)}.metrics span{color:var(--muted)}.metrics strong{font-size:24px;display:block;margin-top:4px}.toolbar{display:flex;justify-content:space-between;gap:16px;background:#fff;padding:12px;border:1px solid var(--line);border-radius:12px 12px 0 0}.date-nav,.filters{display:flex;gap:7px}.toolbar input,.toolbar select{border:1px solid var(--line);border-radius:8px;padding:8px 10px;background:#fff}.filters input{min-width:260px}.board-shell{display:grid;grid-template-columns:270px minmax(600px,1fr);min-height:570px;background:#fff;border:1px solid var(--line);border-top:0;border-radius:0 0 12px 12px;overflow:hidden}.board-shell aside{background:#f8fafc;border-right:1px solid var(--line)}.lane-head{height:54px;padding:16px;display:flex;justify-content:space-between;border-bottom:1px solid var(--line)}.lane-head span{background:#e9eef6;border-radius:20px;padding:1px 8px}.schedule{overflow-x:auto}.board{display:grid;grid-auto-flow:column;grid-auto-columns:minmax(250px,1fr);height:100%}.tech-lane{border-right:1px solid var(--line);min-height:570px}.tech-head{height:54px;padding:12px 14px;border-bottom:1px solid var(--line);display:flex;gap:9px;align-items:center}.avatar{width:29px;height:29px;border-radius:50%;color:#fff;display:grid;place-items:center;font-weight:800}.tech-head small{display:block;color:var(--muted)}.dropzone{min-height:510px;padding:10px}.dropzone.dragover{background:#edf4ff}.job{background:#fff;border:1px solid var(--line);border-left:4px solid var(--blue);border-radius:9px;padding:11px;margin-bottom:9px;box-shadow:0 3px 10px rgba(20,39,73,.06);cursor:grab}.job:hover{box-shadow:var(--shadow)}.job .top{display:flex;justify-content:space-between;gap:8px}.job strong{font-size:13px}.job .time{color:var(--blue);font-weight:700}.job p{font-size:13px;margin:7px 0 2px}.job small{color:var(--muted)}.badges{display:flex;gap:5px;margin-top:9px;flex-wrap:wrap}.badge{font-size:10px;text-transform:uppercase;letter-spacing:.04em;border-radius:20px;padding:3px 7px;background:#eef2f7}.urgent,.high{background:#fff0ef;color:#b5281f}.completed{background:#e8f8ef;color:#187844}.queue{padding:10px}.queue .job{background:#fff}dialog{border:0;border-radius:16px;padding:0;width:min(650px,calc(100% - 24px));box-shadow:0 24px 80px rgba(5,20,45,.25)}dialog::backdrop{background:rgba(10,24,45,.55)}dialog form{padding:24px}.dialog-head,.dialog-actions{display:flex;justify-content:space-between;align-items:start}.icon{font-size:24px;border:0;padding:0 8px}.form-grid{display:grid;grid-template-columns:1fr 1fr;gap:15px}.form-grid label{font-size:12px;font-weight:700}.form-grid input,.form-grid select,.form-grid textarea{display:block;width:100%;margin-top:6px;border:1px solid var(--line);border-radius:8px;padding:10px;background:#fff}.full{grid-column:1/-1}.dialog-actions{justify-content:flex-end;gap:8px;margin-top:20px}.alert{padding:10px 12px;background:#fff0ef;color:#a72b22;border-radius:8px;margin:12px 0}.hidden{display:none!important}#toast{position:fixed;right:24px;bottom:24px;background:var(--navy);color:#fff;padding:12px 18px;border-radius:9px;opacity:0;transform:translateY(10px);transition:.2s;pointer-events:none}#toast.show{opacity:1;transform:none}.login-body{min-height:100vh;display:grid;place-items:center;background:radial-gradient(circle at 15% 10%,#e5f0ff,transparent 35%),var(--bg)}.login-card{width:min(410px,calc(100% - 30px));background:#fff;padding:38px;border-radius:18px;box-shadow:0 20px 70px rgba(20,39,73,.14)}.login-card .brand-mark{margin-bottom:22px}.login-card label{display:block;font-size:12px;font-weight:700;margin:17px 0}.login-card input{display:block;width:100%;padding:12px;margin-top:6px;border:1px solid var(--line);border-radius:9px}.secure-note{text-align:center;color:var(--muted);font-size:12px;margin:22px 0 0}
@media(max-width:800px){header{padding:0 14px}nav{display:none}.user span{display:none}main{padding:18px 12px}.metrics{grid-template-columns:1fr 1fr}.metrics article:last-child{display:none}.toolbar{flex-direction:column}.filters input{min-width:0;width:100%}.board-shell{grid-template-columns:220px minmax(260px,1fr)}.page-title{align-items:center}.form-grid{grid-template-columns:1fr}.full{grid-column:auto}}

.detail-dialog{width:min(1050px,calc(100% - 24px))}.detail-layout{display:grid;grid-template-columns:minmax(0,1fr) 310px;gap:24px}.history-panel{border-left:1px solid var(--line);padding-left:20px;max-height:470px;overflow:auto}.history-title{display:flex;justify-content:space-between;align-items:center;padding-bottom:13px;border-bottom:1px solid var(--line)}.history-title span{font-size:11px;color:var(--muted);text-transform:uppercase;letter-spacing:.08em}.history-event{display:grid;grid-template-columns:12px 1fr;gap:9px;padding:14px 0;border-bottom:1px solid #edf0f5}.history-dot{width:9px;height:9px;border-radius:50%;background:var(--blue);margin-top:5px}.history-event strong{text-transform:capitalize}.history-event p{margin:3px 0;color:var(--text);font-size:12px}.history-event small{color:var(--muted);font-size:11px}.split-actions{display:grid;grid-template-columns:auto 1fr auto auto;align-items:center}.danger{color:#b42318;border-color:#f0b8b4;background:#fff}.danger:hover{background:#fff1f0}.danger:disabled{opacity:.5;cursor:not-allowed}.open-hint{margin-left:auto;color:var(--blue);font-size:11px;align-self:center}.job-cancelled{opacity:.66}.job-cancelled p{text-decoration:line-through}.empty-state{text-align:center;padding-top:25px}.toast-error{background:#a72b22!important}
@media(max-width:800px){.detail-layout{grid-template-columns:1fr}.history-panel{border-left:0;border-top:1px solid var(--line);padding:18px 0 0;max-height:260px}.split-actions{grid-template-columns:1fr 1fr}.split-actions span{display:none}.detail-dialog form{padding:18px}}
.range-label{display:flex;align-items:center;padding:0 8px;white-space:nowrap}.view-toggle{display:flex;background:#eef2f7;border-radius:9px;padding:3px}.view-toggle button{border:0;background:transparent;padding:6px 12px}.view-toggle button.active{background:#fff;color:var(--blue);box-shadow:0 1px 4px rgba(20,39,73,.15);font-weight:700}.week-timeline{position:relative;min-height:570px;background:#fff}.week-header{height:76px;display:grid;grid-template-columns:145px 1fr;position:sticky;top:0;z-index:8;background:#fff;border-bottom:1px solid var(--line)}.resource-corner{position:sticky;left:0;z-index:10;background:#f7f9fc;padding:16px 12px;border-right:1px solid var(--line);display:flex;flex-direction:column}.resource-corner small{color:var(--muted);margin-top:5px;font-size:10px}.week-axis{display:flex}.week-day-head{position:relative;flex:0 0 660px;padding:9px 10px;border-right:2px solid #bac5d4;background:#fff}.week-day-head.today{background:#f3f8ff}.week-day-head>strong{font-size:13px}.week-day-head>span{color:var(--muted);margin-left:6px;font-size:12px}.hour-labels{position:absolute;left:0;right:0;bottom:0;height:27px;border-top:1px solid #edf0f5}.hour-labels span{position:absolute;width:60px;padding:6px 0 0 5px;color:#8994a6;font-size:9px;border-left:1px solid #dfe5ed}.resource-row{display:grid;grid-template-columns:145px 1fr;min-height:88px;border-bottom:1px solid var(--line)}.resource-label{position:sticky;left:0;z-index:6;background:#f8fafc;border-right:1px solid var(--line);display:flex;align-items:flex-start;gap:8px;padding:14px 10px}.resource-label small{display:block;color:var(--muted);font-size:10px;margin-top:3px}.week-track{position:relative;background-color:#fff;background-image:repeating-linear-gradient(to right,transparent 0,transparent 59px,#e8ecf2 60px),repeating-linear-gradient(to right,transparent 0,transparent 659px,#aeb9c8 660px)}.week-track.dragover{background-color:#edf5ff}.timeline-job{position:absolute;height:46px;min-width:30px;background:#fff;border:1px solid;border-left-width:4px;border-radius:7px;padding:5px 10px 5px 7px;box-shadow:0 2px 7px rgba(20,39,73,.13);overflow:hidden;cursor:grab;z-index:2;white-space:nowrap}.timeline-job:hover{z-index:5;box-shadow:0 6px 18px rgba(20,39,73,.2)}.timeline-job>div{display:flex;gap:8px;justify-content:space-between;font-size:10px}.timeline-job>div span{color:var(--blue)}.timeline-job p{font-size:11px;font-weight:700;margin:2px 0 0;overflow:hidden;text-overflow:ellipsis}.timeline-job small{display:block;font-size:9px;color:var(--muted);overflow:hidden;text-overflow:ellipsis}.resize-handle{position:absolute;right:0;top:0;width:9px;height:100%;padding:0;border:0;border-radius:0;background:linear-gradient(to right,transparent,#d8e3f4);cursor:ew-resize;touch-action:none}.resize-handle:after{content:"";position:absolute;right:2px;top:14px;width:2px;height:16px;border-left:1px solid #7182a0;border-right:1px solid #7182a0}.schedule:has(.week-timeline){max-height:72vh;overflow:auto}.week-timeline .job-cancelled{background:#f4f5f6}.week-timeline .job-cancelled p{text-decoration:line-through}
@media(max-width:800px){.range-label{display:none}.date-nav{flex-wrap:wrap}.filters{flex-wrap:wrap}.view-toggle{order:-1}.week-header,.resource-row{grid-template-columns:120px 1fr}.resource-corner,.resource-label{width:120px}.schedule:has(.week-timeline){max-height:68vh}}
.team-dialog{width:min(1120px,calc(100% - 24px))}.team-shell{padding:24px}.team-dialog form{padding:0}.team-layout{display:grid;grid-template-columns:245px minmax(0,1fr);gap:24px;min-height:600px}.team-sidebar{background:#f7f9fc;border:1px solid var(--line);border-radius:12px;padding:12px}.team-list{display:flex;flex-direction:column;gap:7px;margin-top:12px}.team-member{display:flex;align-items:center;text-align:left;gap:10px;border:0;background:transparent;width:100%;padding:9px}.team-member:hover,.team-member.active{background:#fff;box-shadow:0 2px 10px rgba(20,39,73,.09)}.team-member span:last-child{min-width:0}.team-member strong,.team-member small{display:block;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.team-member small{color:var(--muted);font-size:10px;margin-top:2px}.availability-editor{min-width:0}.empty-editor{display:grid;place-items:center;text-align:center;min-height:400px}.editor-heading{display:flex;align-items:start;justify-content:space-between;border-bottom:1px solid var(--line);padding-bottom:14px;margin-bottom:18px}.editor-heading h3{font-size:21px;margin:0}.config-state{font-size:10px;text-transform:uppercase;letter-spacing:.06em;background:#fff4df;color:#8a5a00;padding:5px 9px;border-radius:20px}.config-state.configured{background:#e8f8ef;color:#187844}.section-heading{display:flex;justify-content:space-between;align-items:center;margin:22px 0 9px}.section-heading span{font-size:11px;color:var(--muted)}.shift-list{border:1px solid var(--line);border-radius:10px;overflow:hidden}.shift-row{display:grid;grid-template-columns:minmax(120px,1fr) 110px 20px 110px;align-items:center;gap:8px;padding:8px 12px;border-bottom:1px solid var(--line)}.shift-row:last-child{border:0}.shift-row label{font-weight:650}.shift-row input[type=time]{border:1px solid var(--line);border-radius:7px;padding:7px}.shift-row.disabled{background:#f7f8fa;color:#929aaa}.shift-row.disabled input[type=time]{opacity:.45;pointer-events:none}.editor-actions{display:flex;justify-content:flex-end;margin-top:12px}.absence-heading{border-top:1px solid var(--line);padding-top:18px}.absence-form{display:grid;grid-template-columns:110px 140px 140px 1fr auto;gap:7px}.absence-form input,.absence-form select{min-width:0;border:1px solid var(--line);border-radius:8px;padding:8px}.absence-list{margin-top:10px}.absence-item{display:grid;grid-template-columns:70px 1fr auto;align-items:center;gap:10px;padding:9px;border-bottom:1px solid var(--line)}.absence-item strong,.absence-item small{display:block}.absence-item small{color:var(--muted);font-size:11px}.absence-item button{border:0;font-size:18px}.absence-kind{text-align:center;text-transform:capitalize;border-radius:20px;padding:4px 7px;font-size:10px;background:#eef2f7}.absence-kind.sick{background:#fff0ef;color:#b42318}.absence-kind.leave{background:#e8f1ff;color:#2459a9}.absence-kind.training{background:#f3eefe;color:#6741a5}.empty-absence{text-align:center;padding:18px}.offshift-overlay,.absence-overlay{position:absolute;top:0;bottom:0;z-index:1;pointer-events:none}.offshift-overlay{background:repeating-linear-gradient(135deg,rgba(119,132,151,.11) 0,rgba(119,132,151,.11) 5px,rgba(119,132,151,.04) 5px,rgba(119,132,151,.04) 10px);border-right:1px dashed #c4ccd8}.offshift-overlay>span{position:absolute;left:8px;top:5px;color:#8c96a6;font-size:9px}.absence-overlay{background:rgba(219,74,65,.11);border-left:2px solid rgba(196,54,45,.5);display:flex;align-items:center;justify-content:center;gap:6px;color:#a72b22}.absence-overlay strong{text-transform:capitalize}.absence-overlay span{font-size:10px}.unavailable-lane{background:repeating-linear-gradient(135deg,#fafbfc 0,#fafbfc 8px,#f2f4f7 8px,#f2f4f7 16px)}.resource-label em{display:block;color:#6f7c90;font-size:9px;font-style:normal;margin-top:3px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;max-width:95px}
@media(max-width:800px){.team-shell{padding:16px}.team-layout{grid-template-columns:1fr;min-height:0}.team-sidebar{max-height:180px;overflow:auto}.team-list{display:grid;grid-template-columns:1fr 1fr}.shift-row{grid-template-columns:1fr 92px 14px 92px}.absence-form{grid-template-columns:1fr 1fr}.absence-form input[name=notes]{grid-column:1/-1}.availability-editor{max-height:65vh;overflow:auto}}
/* Step 5 dispatch workflow */
.metrics{grid-template-columns:repeat(5,minmax(135px,1fr))}.metrics article{position:relative}.metrics article small{display:block;color:var(--muted);font-size:10px;margin-top:2px}.metrics .attention-metric{border-color:#f3c6c2;background:linear-gradient(135deg,#fff,#fff7f6)}.metrics .attention-metric strong{color:#b42318}
.board-shell{grid-template-columns:320px minmax(600px,1fr)}.queue-toolbar{display:flex;align-items:center;justify-content:space-between;gap:8px;padding:9px 10px;border-bottom:1px solid var(--line);background:#fff}.queue-toolbar label{display:flex;align-items:center;gap:6px;font-size:11px;color:var(--muted)}.queue-toolbar select,.bulk-bar select{min-width:0;border:1px solid var(--line);border-radius:7px;background:#fff;padding:6px;font-size:11px}.bulk-bar{display:grid;grid-template-columns:1fr 1.35fr auto;align-items:center;gap:7px;padding:9px 10px;background:#edf4ff;border-bottom:1px solid #c9daf7}.bulk-bar strong{font-size:11px}.bulk-bar button{padding:7px 9px;font-size:11px}.bulk-bar button:disabled{opacity:.6;cursor:wait}
.queue .job{position:relative;padding-left:39px}.queue-select{position:absolute;left:11px;top:11px;width:18px;height:18px;z-index:3}.queue-select input{position:absolute;opacity:0}.queue-select span{display:block;width:18px;height:18px;border:1px solid #aeb9c8;border-radius:5px;background:#fff}.queue-select input:checked+span{background:var(--blue);border-color:var(--blue);box-shadow:inset 0 0 0 4px #fff}.dispatch-flag{font-size:9px;text-transform:uppercase;letter-spacing:.03em;border-radius:20px;padding:3px 7px;font-weight:750}.overdue-flag{background:#feeceb;color:#a72820}.travel-flag{background:#fff4d9;color:#875b00}.job-attention{background:#fffafa}.job-travel-risk{box-shadow:inset 0 0 0 1px #f0bc57,0 3px 10px rgba(20,39,73,.06)}.timeline-job.job-attention{background:#fff5f4}.timeline-job.job-travel-risk:before{content:"!";position:absolute;right:10px;bottom:4px;width:13px;height:13px;border-radius:50%;display:grid;place-items:center;background:#e5a62f;color:#fff;font-size:9px;font-weight:900}.filters{flex-wrap:wrap}
@media(max-width:1100px){.metrics{grid-template-columns:repeat(3,1fr)}.board-shell{grid-template-columns:280px minmax(600px,1fr)}}
@media(max-width:800px){.metrics{grid-template-columns:1fr 1fr}.metrics article:last-child{display:block}.board-shell{grid-template-columns:250px minmax(260px,1fr)}.bulk-bar{grid-template-columns:1fr}.queue-toolbar{align-items:flex-start;flex-direction:column}}
/* Step 6 technician portal controls */
.mobile-heading{border-top:1px solid var(--line);padding-top:18px}.mobile-access-form{display:grid;grid-template-columns:1fr 1fr auto auto;gap:9px;align-items:end}.mobile-access-form label{font-size:11px;font-weight:700}.mobile-access-form input:not([type=checkbox]){display:block;width:100%;margin-top:5px;border:1px solid var(--line);border-radius:8px;padding:9px}.mobile-toggle{display:flex;align-items:center;gap:6px;padding:10px 4px}.mobile-access-form button{height:39px}.field-history{background:#f8fbff}.field-history a{display:inline-block;color:var(--blue);font-size:11px;margin-bottom:5px}.field-history small{display:block}
@media(max-width:800px){.mobile-access-form{grid-template-columns:1fr}.mobile-access-form button{width:100%}}
