/* Pronto Dashboard · Jobs (job management phase 1) v0.5.0 */
.nav-lbl{font-size:10.5px;letter-spacing:.14em;text-transform:uppercase;color:var(--ink3);font-weight:800;padding:12px 12px 4px}
.nav-lbl:first-child{padding-top:4px}
.nav a{position:relative}
.nav-cnt{margin-left:auto;background:var(--fail);color:#fff;font-size:11px;font-weight:800;border-radius:9px;padding:1px 7px}
.muted{color:var(--ink2)} .small{font-size:12.5px} .nw{white-space:nowrap} .grow{flex:1;min-width:0} .pre{white-space:pre-wrap}
.flink{color:var(--blue);font-weight:650;font-size:13px;background:none;border:0;cursor:pointer;padding:0;text-decoration:none}
.flink.red{color:var(--fail)} .flink:hover{text-decoration:underline}
.jm-red{color:var(--fail)}
/* heading */
.jm-head{margin-bottom:16px}
.jm-back{display:inline-flex;align-items:center;gap:4px;color:var(--ink2);font-weight:650;text-decoration:none;font-size:13.5px;margin:-6px 0 8px -4px;padding:4px 8px 4px 2px;border-radius:8px}
.jm-back svg{width:18px;height:18px;fill:none;stroke:currentColor;stroke-width:2.2;stroke-linecap:round;stroke-linejoin:round}
.jm-back:hover{background:#fff;color:var(--ink)}
.jm-hrow{display:flex;align-items:flex-end;gap:16px;flex-wrap:wrap}
.jm-hrow h1{font-size:24px;margin:0;font-weight:750;letter-spacing:-.015em;line-height:1.2}
.jm-hrow .sub{color:var(--ink2);margin-top:4px;max-width:760px}
.jm-hbtns{display:flex;gap:8px;align-items:center;flex-wrap:wrap}
/* toolbar + tabs */
.jm-toolbar{display:flex;align-items:center;gap:12px;margin-bottom:12px;flex-wrap:wrap}
.jm-toolbar .search{margin-left:auto}
.jm-tabs{display:inline-flex;background:#e9edf2;border-radius:11px;padding:3px;gap:2px}
.jm-tab{padding:7px 14px;border-radius:9px;font-weight:650;color:var(--ink2);text-decoration:none;font-size:14px;display:inline-flex;gap:6px;align-items:center}
.jm-tab .n{font-size:12px;color:var(--ink3);font-weight:700}
.jm-tab.on{background:#fff;color:var(--ink);box-shadow:0 1px 2px rgba(16,24,40,.08)} .jm-tab.on .n{color:var(--blue)}
.jm-tabs.big .jm-tab{padding:8px 18px;font-size:15px}
/* chips */
.jm-stage{display:inline-block;font-size:12px;font-weight:750;padding:3px 9px;border-radius:999px;background:#eef1f5;color:#4a5562;white-space:nowrap}
.jm-stage.sm{font-size:11px;padding:2px 7px}
.st-new{background:#eef1f5;color:#4a5562} .st-contacted_1,.st-contacted_2,.st-contacted_3{background:#fff4dc;color:#8a5a00}
.jm-stage.st-ready{background:#e7f0fe;color:#1764c0} .jm-stage.st-booked{background:#e3f6ec;color:#127046} .jm-stage.st-surveyed{background:#e0f4f6;color:#0d6b76}
.jm-stage.st-issued{background:#16191d;color:#fff} .jm-stage.st-cancelled{background:#f3f3f3;color:#999;text-decoration:line-through}
.jm-tag{display:inline-block;font-size:11.5px;font-weight:750;padding:2px 8px;border-radius:6px;background:#eef1f5;color:#4a5562;margin:4px 4px 0 0;white-space:nowrap}
.jm-tag.sm{font-size:10.5px;padding:1px 6px}
.jm-tag.na{background:#fde7e6;color:#c62828} .jm-tag.flag{background:#c62828;color:#fff} .jm-tag.warn{background:#fff3dc;color:#8a5a00} .jm-tag.ok{background:#e3f6ec;color:#127046} .jm-tag.best{background:var(--blue);color:#fff}
.jm-type{font-size:13px;font-weight:600}
.jm-vst{font-size:12px;font-weight:750;padding:3px 8px;border-radius:6px;white-space:nowrap}
.jm-vst.tb{background:#eef1f5;color:#4a5562} .jm-vst.bk{background:#e3f6ec;color:#127046} .jm-vst.os{background:#e7f0fe;color:#1764c0} .jm-vst.dn{background:#127046;color:#fff} .jm-vst.na{background:#fde7e6;color:#c62828} .jm-vst.cx{background:#f3f3f3;color:#999}
.jm-tags{margin-top:2px}
.jm-prog{height:5px;background:#e9edf2;border-radius:3px;overflow:hidden;margin:7px 0 3px;max-width:150px} .jm-prog i{display:block;height:100%;background:linear-gradient(90deg,#2ee6b0,#2a8ff0)}
.jm-tbl td{vertical-align:top}
.jm-none{padding:40px;text-align:center;color:var(--ink2);background:#fff;border:1px dashed var(--line);border-radius:var(--r)}
.jm-empty{padding:36px;text-align:center} .jm-empty h3{margin:0 0 6px;font-size:18px} .jm-empty p{color:var(--ink2);max-width:520px;margin:0 auto 16px}
/* insights */
.jm-ins{margin-top:16px;padding:16px 18px}
.jm-ins-h{display:flex;align-items:baseline;gap:10px;margin-bottom:10px} .jm-ins-h h3{margin:0;font-size:15px}
.jm-stats{display:grid;grid-template-columns:repeat(auto-fit,minmax(190px,1fr));gap:10px}
.jm-stat{background:var(--bg);border-radius:12px;padding:12px 14px} .jm-stat .k{font-size:12px;color:var(--ink2);font-weight:650} .jm-stat .v{font-size:22px;font-weight:750;margin:2px 0} .jm-stat .s{font-size:12px;color:var(--ink2)}
/* job page */
.jm-stagebar{background:#fff;border:1px solid var(--line);border-radius:var(--r);padding:14px 18px 10px;margin-bottom:14px}
.jm-steps{display:flex;gap:4px;margin-bottom:8px}
.jm-step{flex:1;min-width:0;text-align:center;font-size:11.5px;font-weight:650;color:var(--ink3)}
.jm-step i{display:block;height:6px;border-radius:3px;background:#e9edf2;margin-bottom:6px}
.jm-step.done{color:var(--ink2)} .jm-step.done i{background:#9fd8c2}
.jm-step.on{color:var(--ink)} .jm-step.on i{background:linear-gradient(90deg,#2ee6b0,#2a8ff0)}
.jm-step span{display:block;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.jm-stagesel{display:flex;align-items:center;gap:8px;font-size:13px;font-weight:650;color:var(--ink2)}
.jm-stagesel select,.jm-card select,.jm-form select,.jm-f select,.jm-f input,.jm-f textarea,.jm-form textarea{height:38px;border:1px solid var(--line);border-radius:10px;padding:0 10px;background:#fff;font:inherit;color:var(--ink);width:100%}
.jm-stagesel select{width:auto;min-width:160px;font-weight:650}
.jm-f textarea,.jm-form textarea{height:auto;padding:9px 10px;resize:vertical}
.jm-banner{display:flex;gap:10px;align-items:flex-start;padding:11px 14px;border-radius:12px;margin:0 0 12px;font-size:14px}
.jm-banner svg{width:20px;height:20px;flex:none;fill:none;stroke:currentColor;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;margin-top:1px}
.jm-banner.flag{background:#fde7e6;color:#8e1c1c} .jm-banner.warn{background:#fff3dc;color:#6e4700} .jm-banner.ok{background:#e3f6ec;color:#0d5535} .jm-banner.info{background:#e7f0fe;color:#123f78}
.jm-banner ul{margin:4px 0 0;padding-left:18px}
.jm-grid{display:grid;grid-template-columns:minmax(0,1fr) 340px;gap:14px;align-items:start}
@media (max-width:1100px){.jm-grid{grid-template-columns:1fr}}
.jm-side{display:flex;flex-direction:column;gap:14px}
.jm-card{padding:16px 18px} .jm-card h3{margin:0 0 10px;font-size:15px;display:flex;align-items:center;gap:10px} .jm-card h3 .flink{margin-left:auto}
.jm-visits{padding:16px 0 4px} .jm-visits h3{padding:0 18px}
.jm-vtbl td{padding:10px 10px} .jm-vtbl th{padding:9px 10px} .jm-vtbl td:first-child,.jm-vtbl th:first-child{padding-left:18px} .jm-vtbl .t{white-space:nowrap}
.jm-vact{text-align:right;white-space:nowrap} .jm-vact .btn{margin-left:4px}
.jm-more{width:32px;padding:0!important;font-size:18px;line-height:1}
.jm-nabtn{font-weight:750;color:#c62828;background:#fde7e6;border-radius:6px;padding:2px 8px;font-size:12.5px}
.jm-fee{display:flex;margin-top:5px;gap:5px;align-items:center;font-size:12.5px;font-weight:650;color:var(--ink2);white-space:nowrap}
.jm-dl{display:grid;grid-template-columns:110px 1fr;gap:7px 10px;margin:0;font-size:14px} .jm-dl dt{color:var(--ink2);font-size:13px} .jm-dl dd{margin:0;min-width:0;overflow-wrap:anywhere} .jm-dl .s{color:var(--ink2);font-size:12.5px}
.jm-mt{margin-top:10px}
.jm-dz{text-align:right;padding:0 4px}
.jm-clog{margin:0 0 12px;padding-left:20px;font-size:13.5px} .jm-clog li{margin-bottom:6px} .jm-clog .s{color:var(--ink2)}
.jm-list{display:flex;flex-direction:column}
.jm-li{display:flex;flex-direction:column;gap:2px;padding:10px 0;border-bottom:1px solid var(--line);text-decoration:none;color:var(--ink)} .jm-li:last-child{border-bottom:0}
.jm-li b{font-weight:650} .jm-li span{font-size:13px;color:var(--ink2)} .jm-li:hover b{color:var(--blue)}
/* menu */
.jm-menu{position:absolute;z-index:60;background:#fff;border:1px solid var(--line);border-radius:12px;box-shadow:0 12px 32px rgba(16,24,40,.16);padding:6px;min-width:220px}
.jm-menu button{display:block;width:100%;text-align:left;padding:9px 12px;border-radius:8px;font-size:14px} .jm-menu button:hover{background:var(--bg)}
/* modal */
.jm-modal{position:fixed;inset:0;z-index:80;background:rgba(15,23,32,.38);display:flex;align-items:flex-start;justify-content:center;padding:6vh 16px;overflow:auto;animation:jmf .12s ease-out}
@keyframes jmf{from{opacity:0}}
.jm-dlg{background:#fff;border-radius:18px;box-shadow:0 24px 60px rgba(16,24,40,.25);width:560px;max-width:100%;padding:22px 24px 18px}
.jm-dlg.sm{width:440px} .jm-dlg.lg{width:780px}
.jm-dlg h2{margin:0 0 4px;font-size:19px;letter-spacing:-.01em}
.jm-sub{color:var(--ink2);font-size:13.5px;margin-bottom:6px}
.jm-dbody{margin:14px 0 6px;display:flex;flex-direction:column;gap:12px}
.jm-dfoot{display:flex;gap:8px;justify-content:flex-end;align-items:center;margin-top:14px;padding-top:14px;border-top:1px solid var(--line)}
.jm-f{display:flex;flex-direction:column;gap:5px;font-size:13px;font-weight:650;color:var(--ink2)} .jm-f input,.jm-f select,.jm-f textarea{font-weight:400;color:var(--ink)}
.jm-f.inl{flex-direction:row;align-items:center;gap:8px} .jm-f.inl input{width:auto}
.jm-row2{display:grid;grid-template-columns:1fr 1fr;gap:10px} .jm-row3{display:grid;grid-template-columns:1fr 1fr 1fr;gap:10px}
.jm-chk{display:flex;gap:8px;align-items:center;font-size:14px}
.jm-seg{display:inline-flex;background:#e9edf2;border-radius:10px;padding:3px;gap:2px} .jm-seg button{padding:7px 14px;border-radius:8px;font-weight:650;color:var(--ink2);font-size:13.5px} .jm-seg button.on{background:#fff;color:var(--ink);box-shadow:0 1px 2px rgba(16,24,40,.08)}
.jm-seg.sm button{padding:5px 12px;font-size:13px}
.jm-h3{font-size:14px;margin:6px 0 0;display:flex;gap:8px;align-items:baseline}
.jm-slots{display:grid;grid-template-columns:repeat(4,1fr);gap:8px}
@media (max-width:760px){.jm-slots{grid-template-columns:repeat(2,1fr)}}
.jm-slot{text-align:left;border:1.5px solid var(--line);border-radius:12px;padding:10px 11px;background:#fff;position:relative}
.jm-slot:hover{border-color:#9cc4f2} .jm-slot.on{border-color:var(--blue);background:#f2f8ff;box-shadow:0 0 0 3px rgba(30,136,229,.15)}
.jm-slot .d{font-weight:750;font-size:13.5px} .jm-slot .tm{font-size:15px;font-weight:650;margin:2px 0} .jm-slot .s{font-size:12px;color:var(--ink2);display:flex;gap:4px;align-items:center}
.jm-slot .s svg,.jm-dbody .muted svg{width:14px;height:14px;fill:none;stroke:currentColor;stroke-width:2;vertical-align:-2px}
.jm-slot .jm-tag.best{position:absolute;top:6px;right:6px;margin:0}
#jm-bok.warn{background:#d97706}
.jm-flatpick{border:1px solid var(--line);border-radius:12px;padding:10px 12px}
.jm-fph{display:flex;gap:12px;align-items:center;margin-bottom:6px;font-size:13.5px}
.jm-fpl{display:flex;flex-wrap:wrap;gap:6px 14px;max-height:120px;overflow:auto;font-size:13.5px} .jm-fpl label{display:flex;gap:5px;align-items:center}
.jm-na{display:flex;gap:14px;justify-content:space-between;align-items:flex-start;border-bottom:1px solid var(--line);padding-bottom:10px}
.jm-na img{width:180px;height:135px;object-fit:cover;border-radius:10px}
/* new job */
.jm-form{padding:6px 22px 18px;max-width:860px}
.jm-fsec{display:flex;gap:16px;padding:18px 0;border-bottom:1px solid var(--line)} .jm-fsec h3{margin:2px 0 10px;font-size:15px}
.jm-fnum{width:28px;height:28px;border-radius:50%;background:var(--bluebg);color:var(--blue);font-weight:800;display:flex;align-items:center;justify-content:center;flex:none}
.jm-types{display:grid;grid-template-columns:repeat(3,1fr);gap:8px;margin-bottom:12px}
@media (max-width:900px){.jm-types{grid-template-columns:1fr}}
.jm-typec{display:flex;gap:9px;align-items:flex-start;border:1.5px solid var(--line);border-radius:12px;padding:11px 12px;cursor:pointer}
.jm-typec:has(input:checked){border-color:var(--blue);background:#f2f8ff}
.jm-typec b{display:block;font-size:14px} .jm-typec span{font-size:12.5px;color:var(--ink2)} .jm-typec input{margin-top:3px}
.jm-ffoot{display:flex;gap:8px;justify-content:flex-end;padding-top:16px}
.jm-form .jm-f{margin-top:10px}
.jm-days{display:flex;gap:10px;flex-wrap:wrap;font-weight:400;color:var(--ink)} .jm-days label{display:flex;gap:4px;align-items:center}
/* schedule (fits the screen, slim header) */
body.jm-fit .main{padding-top:14px;padding-bottom:12px;max-width:none}
.jm-sched{display:flex;flex-direction:column;min-height:420px}
.jm-shdr{display:flex;align-items:center;gap:10px;flex-wrap:wrap;padding-bottom:10px}
.jm-shdr h1{font-size:20px;margin:0 6px 0 0;letter-spacing:-.01em}
.jm-stitle{font-weight:700;font-size:15px;margin-left:4px}
.jm-dnav{display:flex;gap:4px}
.jm-pin{display:inline-flex;align-items:center;gap:5px;font-size:12.5px;font-weight:650;color:var(--ink2);padding:5px 9px;border-radius:8px;border:1px dashed var(--line)}
.jm-pin svg{width:15px;height:15px;fill:none;stroke:currentColor;stroke-width:2;stroke-linejoin:round}
.jm-pin.on{color:var(--blue);border-style:solid;border-color:#bcd7f6;background:#f2f8ff} .jm-pin.on svg{fill:currentColor}
.jm-cnt{background:var(--ink2);color:#fff;border-radius:9px;font-size:11px;padding:0 6px;font-weight:800} .jm-cnt.red{background:var(--fail)}
.jm-sbody{flex:1;min-height:0;display:flex;gap:10px}
.jm-grid-t{flex:1;min-width:0;display:flex;background:#fff;border:1px solid var(--line);border-radius:var(--r);overflow:hidden}
.jm-gutter{width:52px;flex:none;display:flex;flex-direction:column;border-right:1px solid var(--line)}
.jm-cols{flex:1;display:flex;min-width:0}
.jm-col{flex:1;min-width:0;display:flex;flex-direction:column;border-right:1px solid var(--line)} .jm-col:last-child{border-right:0}
.jm-ch{height:44px;flex:none;display:flex;align-items:center;justify-content:center;gap:6px;border-bottom:1px solid var(--line);font-size:13px;color:var(--ink2)}
.jm-ch b{font-size:17px;color:var(--ink)} .jm-ch i{font-style:normal;font-size:11px;background:var(--bluebg);color:var(--blue);border-radius:8px;padding:0 6px;font-weight:800}
.jm-col.today .jm-ch b{background:var(--blue);color:#fff;border-radius:50%;width:28px;height:28px;display:inline-flex;align-items:center;justify-content:center}
.jm-cb{position:relative;flex:1;min-height:0}
.jm-col.today .jm-cb{background:#fbfdff}
.jm-hl{position:absolute;left:0;right:0;border-top:1px solid #f0f2f5;font-size:10.5px;color:var(--ink3)} .jm-hl span{position:absolute;top:-7px;right:6px;background:#fff;padding:0 2px}
.jm-gl{position:absolute;left:0;right:0;border-top:1px solid #f0f2f5}
.jm-blk{position:absolute;left:4px;right:4px;border-radius:8px;padding:4px 7px;font-size:12px;line-height:1.25;overflow:hidden;text-decoration:none;color:#0d4a2f;background:#e3f6ec;border-left:3px solid #2bb673;box-shadow:0 1px 2px rgba(16,24,40,.06)}
.jm-blk b{display:block;font-weight:700;white-space:nowrap;overflow:hidden;text-overflow:ellipsis} .jm-blk span{display:block;color:#3f6b56;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.jm-blk em{display:block;font-style:normal;font-weight:750;color:#a35f00}
.jm-blk.st-on_site{background:#e7f0fe;border-left-color:var(--blue);color:#123f78}
.jm-blk.late{background:#fff3dc;border-left-color:#e08a00}
.jm-blk:hover{filter:brightness(.97);z-index:2}
.jm-now{position:absolute;left:0;right:0;height:2px;background:var(--fail);z-index:3} .jm-now::before{content:"";position:absolute;left:-4px;top:-4px;width:10px;height:10px;border-radius:50%;background:var(--fail)}
.jm-month{flex:1;display:flex;flex-direction:column;background:#fff;border:1px solid var(--line);border-radius:var(--r);overflow:hidden;min-width:0}
.jm-mh{display:grid;grid-template-columns:repeat(7,1fr);border-bottom:1px solid var(--line)} .jm-mh div{padding:8px 10px;font-size:12px;font-weight:700;color:var(--ink2);text-transform:uppercase;letter-spacing:.05em}
.jm-mg{flex:1;display:grid;grid-template-columns:repeat(7,1fr);grid-auto-rows:1fr}
.jm-mc{border-right:1px solid var(--line);border-bottom:1px solid var(--line);padding:6px 7px;min-height:0;overflow:hidden;cursor:pointer} .jm-mc:hover{background:#f7fafd}
.jm-mc .n{font-weight:700;font-size:13px;margin-bottom:3px} .jm-mc.out{background:#fafbfc} .jm-mc.out .n{color:var(--ink3)} .jm-mc.today .n{color:var(--blue)}
.jm-mi{font-size:11.5px;background:#e3f6ec;color:#0d4a2f;border-radius:5px;padding:1px 5px;margin-bottom:2px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis} .jm-mi.more{background:none;color:var(--ink2)}
.jm-unb{width:280px;flex:none;background:#fff;border:1px solid var(--line);border-radius:var(--r);overflow:auto}
.jm-unbh{display:flex;align-items:center;justify-content:space-between;padding:12px 14px;border-bottom:1px solid var(--line);position:sticky;top:0;background:#fff}
.jm-x svg{width:18px;height:18px;fill:none;stroke:currentColor;stroke-width:2}
.jm-unbi{display:block;width:100%;text-align:left;padding:10px 14px;border-bottom:1px solid var(--line)} .jm-unbi:hover{background:#f7fafd} .jm-unbi .t{font-weight:650;font-size:13.5px} .jm-unbi .s{font-size:12.5px;color:var(--ink2)}
/* summary */
.jm-sum{padding:16px 18px;margin-bottom:14px}
.jm-sumh{display:flex;gap:12px;align-items:flex-start;justify-content:space-between;flex-wrap:wrap} .jm-sumh h3{margin:0;font-size:17px}
.jm-sumn{color:var(--ink2);margin-top:2px} .jm-sumn b{color:var(--ink)} .jm-sumn b.g{color:var(--pass)} .jm-sumn b.r{color:var(--fail)}
.jm-pre{white-space:pre-wrap;font:13.5px/1.55 inherit;font-family:inherit;background:var(--bg);border-radius:12px;padding:12px 14px;margin:12px 0}
.jm-phs{display:flex;gap:10px;flex-wrap:wrap} .jm-phs figure{margin:0;font-size:12px;color:var(--ink2)} .jm-phs img{width:160px;height:120px;object-fit:cover;border-radius:10px;display:block;margin-bottom:3px}

/* new job v2: full width + type-to-search */
.main:has(.jm-form-wide){max-width:none}
.jm-form.jm-form-wide{max-width:none;padding:6px 28px 20px}
.jm-form-wide .jm-fsec{gap:18px;padding:20px 0}
.jm-form-wide .jm-fsec h3{margin:3px 0 12px}
.jm-cs{display:grid;grid-template-columns:minmax(0,1fr) minmax(0,1fr);gap:14px 22px;align-items:start}
.jm-form-wide .jm-cs .jm-f{margin-top:0}
.jm-acf>span{font-size:13px;font-weight:650;color:var(--ink2)}
.jm-acrow{display:flex;gap:8px;align-items:stretch}
.jm-ac{position:relative;flex:1;min-width:0}
.jm-ac>svg{position:absolute;left:12px;top:50%;transform:translateY(-50%);width:16px;height:16px;fill:none;stroke:var(--ink3);stroke-width:2.2;stroke-linecap:round;pointer-events:none}
.jm-form .jm-ac input{height:42px;border:1px solid var(--line);border-radius:10px;padding:0 34px 0 36px;background:#fff;font:inherit;font-weight:400;color:var(--ink);width:100%;transition:border-color .15s,box-shadow .15s}
.jm-form .jm-ac input:focus{outline:none;border-color:var(--blue);box-shadow:0 0 0 3px rgba(30,136,229,.15)}
.jm-ac.has input{font-weight:600;background:#f7fbff;border-color:#bcd9f5}
.jm-ac.has>svg{stroke:var(--blue)}
.jm-acx{position:absolute;right:6px;top:50%;transform:translateY(-50%);width:28px;height:28px;border-radius:8px;border:0;background:none;color:var(--ink3);font-size:20px;line-height:1;cursor:pointer}
.jm-acx:hover{background:#eef2f6;color:var(--ink)}
.jm-acadd{flex:none;width:42px;height:42px;border-radius:10px;border:1px solid var(--line);background:#fff;color:var(--blue);display:flex;align-items:center;justify-content:center;cursor:pointer;transition:background .15s,border-color .15s}
.jm-acadd:hover{background:var(--bluebg);border-color:#bcd9f5}
.jm-acadd svg{width:20px;height:20px;fill:none;stroke:currentColor;stroke-width:2.4;stroke-linecap:round}
.jm-acl{position:absolute;left:0;right:0;top:calc(100% + 6px);z-index:60;background:#fff;border-radius:12px;box-shadow:0 14px 40px rgba(16,24,40,.16),0 0 0 1px rgba(16,24,40,.06);max-height:340px;overflow:auto;padding:6px}
.jm-acg{font-size:11.5px;letter-spacing:.05em;text-transform:uppercase;color:var(--ink3);font-weight:750;padding:8px 10px 4px}
.jm-aco{display:flex;flex-direction:column;gap:1px;padding:8px 10px;border-radius:8px;cursor:pointer;font-weight:400}
.jm-aco b{font-weight:600;font-size:14px;color:var(--ink)} .jm-aco small{font-size:12.5px;color:var(--ink2)}
.jm-aco mark{background:#fff3b0;color:inherit;border-radius:2px;padding:0 1px}
.jm-aco:hover{background:#f4f7fa} .jm-aco.act{background:var(--bluebg)} .jm-aco.sel b::after{content:" ✓";color:var(--blue)}
.jm-acnew{flex-direction:row;align-items:center;gap:8px;color:var(--blue);font-weight:650;font-size:14px;border-top:1px solid var(--line);border-radius:0 0 8px 8px;margin-top:4px}
.jm-acnew svg{width:16px;height:16px;fill:none;stroke:currentColor;stroke-width:2.4;stroke-linecap:round;flex:none}
.jm-acnone{padding:10px;color:var(--ink2);font-size:13.5px}
.jm-siteinfo{margin-top:6px;min-height:1em}
.jm-form-wide .jm-types{gap:12px;margin-bottom:4px}
.jm-form-wide .jm-typec{padding:14px 16px}
.jm-form-wide .jm-row3{gap:14px 22px} .jm-form-wide .jm-row3 .jm-f{margin-top:0}
.jm-form-wide .jm-f input,.jm-form-wide .jm-f select{height:42px}
.jm-form-wide .jm-ffoot{padding-top:18px}
@media (max-width:900px){.jm-cs{grid-template-columns:1fr}.jm-form-wide .jm-row3{grid-template-columns:1fr 1fr}.jm-form.jm-form-wide{padding:4px 16px 16px}}
@media (max-width:560px){.jm-form-wide .jm-row3{grid-template-columns:1fr}.jm-form-wide .jm-fsec{gap:10px}.jm-form-wide .jm-ffoot{flex-wrap:wrap}}

/* sign-in gate */
html.pg-locked .shell,html.pg-locked .ps-banner,html.pg-locked .toast,html.pg-locked .drop{display:none!important}
html.pg-locked body{background:linear-gradient(160deg,#4FB3FF 0%,#1565D8 100%);min-height:100vh}
.pg-gate{position:fixed;inset:0;z-index:1500;display:flex;align-items:center;justify-content:center;padding:24px 18px;overflow:auto;background:linear-gradient(160deg,#4FB3FF 0%,#1565D8 100%)}
.pg-gate[hidden]{display:none}
.pg-card{width:100%;max-width:400px;background:#fff;border-radius:20px;box-shadow:0 24px 60px rgba(10,40,90,.28);padding:34px 32px 26px;text-align:center}
.pg-logo{height:60px;width:auto;max-width:240px;object-fit:contain;margin:0 auto 18px;display:block}
.pg-card h1{font-size:22px;margin:0 0 4px;color:var(--ink)}
.pg-sub{color:var(--ink2);margin:0 0 22px;font-size:14px}
.pg-card form{display:flex;flex-direction:column;gap:14px;text-align:left}
.pg-card label{display:flex;flex-direction:column;gap:6px;font-size:13px;font-weight:650;color:var(--ink2)}
.pg-card input{height:46px;border:1px solid var(--line);border-radius:12px;padding:0 14px;font:inherit;font-size:15px;color:var(--ink);width:100%;box-sizing:border-box;background:#fff}
.pg-card input:focus{outline:none;border-color:var(--blue);box-shadow:0 0 0 3px rgba(30,136,229,.18)}
.pg-pw{position:relative;display:block} .pg-pw input{padding-right:64px}
.pg-eye{position:absolute;right:6px;top:50%;transform:translateY(-50%);height:34px;padding:0 10px;border:0;background:none;color:var(--blue);font-weight:650;font-size:13px;cursor:pointer;border-radius:8px}
.pg-eye:hover{background:var(--bluebg)}
.pg-go{height:48px;border:0;border-radius:12px;background:var(--blue);color:#fff;font:inherit;font-size:16px;font-weight:700;cursor:pointer;margin-top:4px;transition:background .15s}
.pg-go:hover{background:#1976d2} .pg-go:disabled{opacity:.7;cursor:default}
.pg-forgot{border:0;background:none;color:var(--blue);font:inherit;font-weight:600;font-size:14px;cursor:pointer;padding:6px;align-self:center}
.pg-err{background:#fdecec;color:#b42318;border-radius:10px;padding:10px 12px;font-size:13.5px;font-weight:550}
.pg-fine{color:var(--ink3);font-size:12.5px;margin:16px 0 0}

/* ===== v0.6.0 building types + sites ===== */
.req{color:var(--fail);font-style:normal;font-weight:800}
.jm-f .opt{font-weight:500;color:var(--ink3);font-size:12px}
.bt-big .jm-ac input,.bt-ej .jm-ac input{height:40px;border:1px solid var(--line);border-radius:10px;padding:0 34px 0 36px;background:#fff;font:inherit;font-weight:400;color:var(--ink);width:100%}
.bt-big .jm-ac.has input,.bt-ej .jm-ac.has input{font-weight:600;background:#f7fbff;border-color:#bcd9f5}
.bt-big .jm-ac input:focus,.bt-ej .jm-ac input:focus,.bt-big .jm-f input:focus,.bt-big .jm-f textarea:focus{outline:none;border-color:var(--blue);box-shadow:0 0 0 3px rgba(30,136,229,.15)}
.bt-big .jm-acadd{width:40px;height:40px}
.jm-modal.bt-wide{padding:2vh 16px;align-items:flex-start}
.jm-dlg.bt-big{width:min(1600px,calc(100vw - 40px));padding:0;display:flex;flex-direction:column;max-height:96vh;overflow:hidden}
.bt-big::before{content:"";height:4px;background:var(--brand);display:block;flex:none}
.bt-hd{display:flex;align-items:center;gap:12px;padding:14px 26px 12px;border-bottom:1px solid var(--line);flex:none}
.bt-hd h2{margin:0;font-size:20px;font-weight:750;letter-spacing:-.01em}.bt-hd p{margin:2px 0 0;color:var(--ink2);font-size:13.5px}
.bt-x{margin-left:auto;width:36px;height:36px;border-radius:9px;border:0;background:none;display:flex;align-items:center;justify-content:center;color:var(--ink2);cursor:pointer}
.bt-x:hover{background:#eef2f6}.bt-x svg{width:20px;height:20px;fill:none;stroke:currentColor;stroke-width:2.2;stroke-linecap:round}
.bt-body{padding:14px 26px 16px;overflow:auto;flex:1;min-height:0}
.bt-cols{display:grid;grid-template-columns:minmax(0,47fr) minmax(0,53fr);gap:28px;align-items:start}
.bt-fields{display:flex;flex-direction:column;gap:10px;min-width:0}
.bt-fields .jm-f input,.bt-fields .jm-f textarea{height:40px}
.bt-fields .jm-f textarea{height:auto;min-height:60px;padding:9px 10px;resize:vertical}
.bt-sec{font-size:11px;letter-spacing:.12em;text-transform:uppercase;color:var(--ink3);font-weight:800;margin:8px 0 -2px;display:flex;gap:10px;align-items:baseline;flex-wrap:wrap}
.bt-sec span{letter-spacing:0;text-transform:none;font-weight:500;font-size:12.5px}
.bt-sec:first-child{margin-top:0}
.bt-g2{display:grid;grid-template-columns:minmax(0,1fr) minmax(0,1fr);gap:10px 12px}
.bt-g21{grid-template-columns:minmax(0,2fr) minmax(0,1fr)}
.bt-g3{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:8px 12px}
.bt-errrow{margin-top:-8px}.bt-errrow .bt-err:empty{display:none}.bt-errrow:has(.bt-err:empty + .bt-err:empty){display:none}
.bt-err{font-style:normal;font-size:12px;color:var(--fail);font-weight:650;min-height:0;line-height:1.2}
.bt-err:empty{display:none}
.jm-f input.bad,.jm-f textarea.bad,.jm-ac.bad input{border-color:var(--fail)!important;box-shadow:0 0 0 3px rgba(229,57,53,.10)!important}
.bt-cs{display:flex;flex-direction:column;gap:10px}
.bt-cc{border:1px solid var(--line);border-radius:12px;padding:10px 14px 12px;background:#fbfcfd}
.bt-cc.main{border-color:#b9d6f6;background:#f7fbff}
.bt-cch{display:flex;align-items:center;gap:8px;margin-bottom:6px;font-size:13px;font-weight:750;color:var(--ink);min-height:28px}
.bt-mainc{display:inline-flex;align-items:center;gap:5px;font-size:12px;font-weight:750;border-radius:999px;padding:3px 10px;background:#fff6dc;border:1px solid #f3d27a;color:#8a5a00}
.bt-mainc svg{width:14px;height:14px;fill:#f5b400;stroke:#e0a100;stroke-width:1.5;stroke-linejoin:round}
.bt-cbtn{margin-left:auto;display:flex;gap:4px}
.bt-cbtn button{width:28px;height:28px;border-radius:8px;border:1px solid var(--line);background:#fff;display:flex;align-items:center;justify-content:center;color:var(--ink2);cursor:pointer}
.bt-cbtn button:hover{background:#eef2f6;color:var(--ink)}
.bt-cbtn svg{width:15px;height:15px;fill:none;stroke:currentColor;stroke-width:2.2;stroke-linecap:round;stroke-linejoin:round}
.bt-cc .jm-f{font-size:12px}.bt-cc .jm-f input{height:36px!important}
.bt-lext{grid-template-columns:minmax(0,2fr) minmax(0,1fr);gap:8px}
.bt-addc{display:inline-flex;align-items:center;gap:7px;color:var(--blue);font-weight:700;font-size:14px;padding:4px 2px;border:0;background:none;cursor:pointer;align-self:flex-start}
.bt-addc svg{width:17px;height:17px;fill:none;stroke:currentColor;stroke-width:2.4;stroke-linecap:round}
.bt-tg{border:1px solid var(--line);border-radius:12px;padding:10px 12px;min-width:0}
.bt-tg.on{border-color:#f6c58f;background:#fffaf3}
.bt-tgl{display:flex;gap:12px;align-items:flex-start;cursor:pointer}
.bt-tgl input{position:absolute;opacity:0;width:1px;height:1px}
.bt-sw{width:38px;height:22px;border-radius:999px;background:#d6dce3;position:relative;flex:none;margin-top:1px;transition:background .15s}
.bt-sw::after{content:"";position:absolute;left:3px;top:3px;width:16px;height:16px;border-radius:50%;background:#fff;box-shadow:0 1px 2px rgba(0,0,0,.2);transition:left .15s}
.bt-tgl input:checked+.bt-sw{background:var(--na)}.bt-tgl input:checked+.bt-sw::after{left:19px}
.bt-tgl input:focus-visible+.bt-sw{box-shadow:0 0 0 3px rgba(30,136,229,.25)}
.bt-tgl b{display:block;font-size:14px;color:var(--ink)}.bt-tgl small{display:block;color:var(--ink3);font-size:12.5px;margin-top:1px}
.bt-flagr{margin-top:8px;height:36px;border:1px solid var(--line);border-radius:10px;padding:0 10px;font:inherit;width:100%;background:#fff}
.bt-mapcol{display:flex;flex-direction:column;gap:8px;position:sticky;top:0;min-width:0}
.bt-msearch .pp-manual{display:none!important}
.bt-msearch input.pp-in{height:42px;border:1px solid var(--line);border-radius:10px;font:inherit}
.bt-nosearch{display:flex;gap:10px;align-items:center;border:1px dashed #cdd6e0;border-radius:10px;padding:9px 12px;color:var(--ink2);font-size:13px;background:#fafbfc}
.bt-nosearch svg{width:16px;height:16px;flex:none;fill:none;stroke:var(--ink3);stroke-width:2.2;stroke-linecap:round}
.bt-mnote:empty{display:none}
.bt-map{position:relative;height:min(560px,calc(96vh - 260px));min-height:300px;border-radius:12px;border:1px solid var(--line);overflow:hidden;background:#eef1ec;user-select:none}
.bt-map.has{cursor:crosshair}
.bt-map.sm{height:300px;min-height:0;cursor:default}
.bt-tiles img{position:absolute;width:256px;height:256px;max-width:none}
.bt-pin{position:absolute;left:50%;top:50%;width:40px;height:40px;transform:translate(-50%,-100%);pointer-events:none;filter:drop-shadow(0 3px 4px rgba(0,0,0,.3))}
.bt-pin svg{width:40px;height:40px;fill:var(--fail);stroke:#fff;stroke-width:1.4}
.bt-ml{position:absolute;left:10px;top:10px;background:rgba(255,255,255,.95);border-radius:8px;padding:5px 10px;font-size:12.5px;font-weight:700;color:var(--ink);box-shadow:0 1px 4px rgba(0,0,0,.12);max-width:70%;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.bt-ml:empty{display:none}
.bt-zm{position:absolute;right:10px;top:10px;display:flex;flex-direction:column;background:#fff;border-radius:8px;box-shadow:0 1px 4px rgba(0,0,0,.18);overflow:hidden}
.bt-zm button{width:32px;height:32px;border:0;background:#fff;font-size:18px;font-weight:700;color:var(--ink2);cursor:pointer}.bt-zm button+button{border-top:1px solid var(--line)}
.bt-att{position:absolute;right:0;bottom:0;background:rgba(255,255,255,.85);font-size:10.5px;color:#555;padding:1px 6px;border-top-left-radius:6px}
.bt-mapempty{position:absolute;inset:0;display:flex;flex-direction:column;gap:8px;align-items:center;justify-content:center;color:var(--ink3);font-size:14px;background:repeating-linear-gradient(45deg,#f1f4f1,#f1f4f1 12px,#edf0ec 12px,#edf0ec 24px)}
.bt-mapempty svg{width:30px;height:30px;fill:none;stroke:currentColor;stroke-width:1.8}
.bt-ft{display:flex;gap:10px;align-items:center;padding:12px 26px;border-top:1px solid var(--line);flex:none;background:#fff}
.bt-ft .grow{flex:1;color:var(--ink3);font-size:13px}
.bt-ft .btn{height:42px;padding:0 20px}
.btn-primary.off{opacity:.45;box-shadow:none;cursor:not-allowed}
.bt-okmsg{display:inline-flex;gap:6px;align-items:center;color:var(--pass);font-weight:650}
.bt-okmsg svg{width:15px;height:15px;fill:none;stroke:currentColor;stroke-width:2.6;stroke-linecap:round;stroke-linejoin:round}
.bt-banner{margin-bottom:12px}
/* chips + new job */
.bt-sitebits,.bt-chips{display:flex;flex-wrap:wrap;gap:6px 8px;align-items:center;margin-top:8px}
.bt-chips{margin:0 0 12px}
.bt-chip{display:inline-flex;align-items:center;gap:6px;min-height:26px;padding:2px 11px;border-radius:999px;background:#eef6ee;color:#1f6b2a;font-size:12.5px;font-weight:650}
.bt-chip i{font-style:normal;color:#5f8a65;font-weight:500}
.bt-chip svg{width:14px;height:14px;fill:none;stroke:currentColor;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;flex:none}
.bt-chip.none{background:#f1f3f6;color:var(--ink2)}.bt-chip.grey{background:#f1f3f6;color:var(--ink2)}
.bt-chip.stop{background:#fdecea;color:#b3261e}.bt-chip.flag{background:#fff3e0;color:#a14d00}
.bt-chip .flink{font-size:12.5px}
.bt-pcon{display:flex;align-items:center;gap:6px;flex-wrap:wrap;font-size:13.5px;color:var(--ink2);margin-top:8px}
.bt-pcon svg{width:15px;height:15px;fill:none;stroke:var(--ink3);stroke-width:2;stroke-linecap:round;stroke-linejoin:round}
.bt-pcon b{color:var(--ink);font-weight:650}
.jm-siteinfo{font-size:13px}
.bt-accrow{display:grid;grid-template-columns:minmax(260px,420px) minmax(0,1fr);gap:16px;align-items:end;margin-bottom:12px}
.bt-accrow select{height:42px!important;font-weight:600}
.bt-acchelp{padding-bottom:12px}
.bt-ejb{display:flex;flex-direction:column;gap:10px}.jm-dlg.bt-ej{width:640px}
.bt-ejinfo .flink[disabled]{pointer-events:none;color:var(--ink2);text-decoration:none}
/* site page */
.bt-stabs{display:flex;gap:2px;border-bottom:1px solid var(--line);margin:0 0 16px;overflow-x:auto}
.bt-stabs a{padding:10px 16px;font-weight:650;color:var(--ink2);text-decoration:none;border-bottom:2.5px solid transparent;margin-bottom:-1px;font-size:14.5px;display:flex;gap:7px;align-items:center;white-space:nowrap}
.bt-stabs a.on{color:var(--blue);border-bottom-color:var(--blue)}
.bt-stabs a i{font-style:normal;font-size:12px;background:#eef1f5;color:var(--ink2);border-radius:999px;padding:1px 7px;font-weight:700}
.bt-ov{display:grid;grid-template-columns:minmax(0,1fr) minmax(0,1fr) minmax(0,1.2fr);gap:16px;align-items:start}
.bt-ovmid{display:flex;flex-direction:column;gap:12px;min-width:0}
.bt-allc{margin:-4px 0 0 4px}
.bt-cvs{display:grid;grid-template-columns:repeat(auto-fill,minmax(min(300px,100%),1fr));gap:14px;margin-bottom:14px}
.bt-ccv{padding:16px 18px}.bt-ccv.main{border:1px solid #b9d6f6;background:#f7fbff}
.bt-cvh{margin-bottom:8px}.bt-cvn{font-size:16px;display:block}
.bt-cvl{display:flex;flex-direction:column;gap:4px;margin-top:10px;font-size:14px}
.bt-cvl a{display:inline-flex;gap:7px;align-items:center;text-decoration:none}
.bt-cvl svg{width:15px;height:15px;fill:none;stroke:currentColor;stroke-width:2;stroke-linecap:round;stroke-linejoin:round}
.bt-notes{width:100%;border:1px solid var(--line);border-radius:10px;padding:10px 12px;font:inherit;resize:vertical}
/* settings */
.bt-setwrap{display:grid;grid-template-columns:minmax(0,1.4fr) minmax(320px,1fr);gap:16px;align-items:start;margin-top:16px}
.bt-setwrap:empty{display:none}
.bt-set,.bt-rep{margin:0!important}
.bt-seth h3,.bt-rep h3{margin:0 0 4px}.bt-seth p{margin:0 0 12px}
.bt-tbl{width:100%;border-collapse:collapse}
.bt-tbl td{padding:6px 8px;border-top:1px solid var(--line);vertical-align:middle;font-size:14.5px}
.bt-tbl tr:first-child td{border-top:0}
.bt-tbl .grip{width:28px;color:#b5bec8;cursor:grab;padding-left:2px}.bt-tbl .grip svg{width:18px;height:18px;fill:currentColor;display:block}
.bt-tbl tr.drag td{background:#f3f8fe}
.bt-tbl .bt-nm{height:36px;border:1px solid transparent;border-radius:8px;padding:0 10px;font:inherit;font-weight:650;color:var(--ink);background:transparent;width:min(100%,340px)}
.bt-tbl .bt-nm:hover{border-color:var(--line);background:#fff}.bt-tbl .bt-nm:focus{outline:none;border-color:var(--blue);background:#fff;box-shadow:0 0 0 3px rgba(30,136,229,.15)}
.bt-tbl tr.arch .bt-nm{font-weight:500;color:var(--ink3)}
.bt-tbl .cnt{color:var(--ink2);white-space:nowrap;width:110px}.bt-tbl .cnt b{color:var(--ink)}
.bt-tbl .acts{text-align:right;width:90px}
.bt-addt{display:flex;gap:8px;margin-top:12px;padding-top:12px;border-top:1px solid var(--line)}
.bt-addt input{flex:1;height:40px;border:1px solid var(--line);border-radius:10px;padding:0 12px;font:inherit;max-width:420px}
.bt-rep p{margin:0 0 12px}
.bt-bar{display:grid;grid-template-columns:130px 1fr 34px;gap:10px;align-items:center;margin:8px 0;font-size:13.5px}
.bt-bar .t{height:12px;background:#eef1f5;border-radius:6px;overflow:hidden}.bt-bar .t i{display:block;height:100%;border-radius:6px}
.bt-bar b{text-align:right}
@media (max-width:1300px){.bt-ov{grid-template-columns:minmax(0,1fr) minmax(0,1fr)}.bt-ovmap{grid-column:1/-1}.bt-setwrap{grid-template-columns:1fr}}
@media (max-width:1100px){.bt-cols{grid-template-columns:1fr}.bt-mapcol{position:static}.bt-map{height:320px}}
@media (max-width:760px){.bt-g2,.bt-g21,.bt-g3,.bt-accrow{grid-template-columns:1fr}.bt-ov{grid-template-columns:1fr}.jm-dlg.bt-big{width:100%;max-height:none}}

.bt-l{display:block}
.bt-l .opt{margin-left:4px}
.bt-tbl tr{display:table-row}.bt-tbl td{display:table-cell}
.bt-tbl td:nth-child(2){white-space:nowrap}.bt-tbl .bt-nm{width:min(100%,300px)}

/* v0.6.2: full client window, stacked windows, auto refs */
.jm-modal.jm-stack{z-index:90;background:rgba(15,23,32,.30)}
.bt-cols.cd-cols{grid-template-columns:minmax(0,62fr) minmax(0,38fr)}
.cd-side{position:sticky;top:0}
.bt-tg.cd-fee.on{border-color:#b9d6f6;background:#f7fbff}
.bt-warn{font-style:normal;font-size:12px;color:#b45309;font-weight:650;line-height:1.25}
.bt-warn:empty{display:none}
.cd-clist{display:flex;flex-direction:column;gap:10px}
.cd-ci{padding:10px 0;border-top:1px solid var(--line);display:flex;flex-direction:column;gap:3px;align-items:flex-start}
.cd-ci:first-child{border-top:0;padding-top:2px}
.cd-ci .small{color:var(--ink2)}
.bt-mainc.sm{font-size:11px;padding:1px 8px;margin-bottom:2px}
.side-logo span{margin-top:4px}
@media (max-width:1100px){.cd-side{position:static}}

/* v0.6.3: every window fits the screen: header and buttons always visible, only the middle scrolls; booking window wide, two columns */
html.jm-lock,html.jm-lock body{overflow:hidden}
.jm-modal{padding:clamp(12px,5vh,56px) 16px;overscroll-behavior:contain}
.jm-dlg{display:flex;flex-direction:column;max-height:calc(100vh - 2*clamp(12px,5vh,56px))}
.jm-dlg>h2,.jm-dlg>.jm-sub,.jm-dlg>.bk-hd{flex:none}
.jm-dlg>.jm-dbody{flex:1 1 auto;min-height:0;overflow:auto;overscroll-behavior:contain;margin:12px -6px 0;padding:2px 6px 4px}
.jm-dlg>.jm-dfoot{flex:none;margin-top:10px;background:#fff}
.jm-modal.bt-wide{padding:12px 16px}
.jm-dlg.bt-big{max-height:calc(100vh - 24px)}
.bt-body{overscroll-behavior:contain}
.jm-dlg.lg.bk{width:min(1200px,92vw)}
.bk-body{display:grid!important;grid-template-columns:minmax(0,5fr) minmax(0,7fr);gap:14px 26px;align-items:start}
.bk-l,.bk-r{display:flex;flex-direction:column;gap:12px;min-width:0}
.bk-l .jm-banner,.bk-r .jm-banner{margin:0}
.jm-banner.bk-slim{padding:7px 12px;font-size:13px;align-items:center}
.jm-banner.bk-slim svg{width:17px;height:17px;margin:0}
.bk-sug{padding-top:9px}
.bk .jm-h3{margin:0}
.bk .jm-slots{grid-template-columns:repeat(4,minmax(0,1fr));gap:8px}
.bk .jm-slot{padding:8px 10px 9px}
.bk .jm-slot .d{font-size:13px;padding-right:34px;line-height:1.3}
.bk .jm-slot .d .tm{display:block;font-size:15px;font-weight:700;margin:1px 0 0}
.bk .jm-slot .s{font-size:11.5px;margin-top:3px;line-height:1.25}
.bk .jm-slot .jm-tag.ok{margin-top:5px;font-size:11px}
.bk #jm-warn .jm-banner{margin:0}
@media (max-width:1100px){.bk .jm-slots{grid-template-columns:repeat(2,minmax(0,1fr))}}
@media (max-width:820px){.bk-body{grid-template-columns:1fr}}
.bt-chint{font-size:11.5px;color:var(--ink3);margin-top:6px}
.bt-l .opt{margin-left:6px}

/* v0.6.4: job page = the job form; saved banner; activity; sticky form footers */
.jm-form-wide .jm-ffoot{position:sticky;bottom:0;z-index:6;background:#fff;box-shadow:0 -8px 16px -12px rgba(16,24,40,.25)}
.jp-ref{font-size:.62em;font-weight:700;color:var(--ink2);background:#eef3f8;border:1px solid var(--line);border-radius:8px;padding:2px 8px;vertical-align:4px;margin-left:6px;letter-spacing:.02em}
.jp-saved{display:flex;align-items:center;gap:14px;background:#e6f6ec;border:1px solid #a9dfbd;color:#0d5535;border-radius:14px;padding:12px 16px;margin:0 0 14px}
.jp-saved .grow{display:flex;flex-direction:column;gap:2px}.jp-saved b{font-size:15.5px}.jp-saved span{font-size:13.5px;color:#26704a}
.jp-ok{width:34px;height:34px;border-radius:50%;background:#1f9d55;display:grid;place-items:center;flex:none}
.jp-ok svg{width:20px;height:20px;fill:none;stroke:#fff;stroke-width:2.6;stroke-linecap:round;stroke-linejoin:round}
.jp-saved .btn{height:40px;white-space:nowrap}
.jp-form{margin-bottom:16px}
.jp-foot .jp-dirty{display:flex;align-items:center;gap:6px;color:#8a5a00;font-weight:650;font-size:13.5px}
.jp-foot .jp-dirty svg{width:17px;height:17px;fill:none;stroke:currentColor;stroke-width:2}
.jp-form.dirty{border-color:#f3d27a;box-shadow:0 0 0 3px rgba(245,180,0,.12)}
.jp-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(min(340px,100%),1fr));gap:16px;margin-top:16px;align-items:start}
.jp-grid .jm-card{margin:0}
.jp-hist{list-style:none;margin:0;padding:0;display:flex;flex-direction:column}
.jp-hist li{display:flex;gap:10px;padding:7px 0;border-top:1px solid var(--line)}.jp-hist li:first-child{border-top:0}
.jp-hist li i{width:9px;height:9px;border-radius:50%;background:#9db3c9;flex:none;margin-top:6px}
.jp-hist li.ok i{background:#1f9d55}.jp-hist li.na i{background:#e0653a}
.jp-hist b{display:block;font-size:13.5px;font-weight:600}.jp-hist span{font-size:12px;color:var(--ink3)}
.jm-visits{margin-bottom:0}
.jp-foot[hidden]{display:none!important}

/* v0.6.5: schedule hover card */
.vpop{position:fixed;z-index:120;width:300px;max-width:calc(100vw - 20px);background:#fff;border:1px solid var(--line);border-radius:12px;box-shadow:0 14px 40px rgba(16,24,40,.22);padding:12px 14px;pointer-events:none;font-size:13px}
.vpop[hidden]{display:none}
.vp-h{display:flex;align-items:baseline;gap:8px;flex-wrap:wrap}.vp-h b{font-size:14.5px}.vp-pc{font-weight:700;color:var(--ink2);font-size:12.5px}
.vp-t{color:var(--blue);font-weight:650;margin:2px 0 8px}
.vp-fl{display:flex;gap:6px;flex-wrap:wrap;margin:-2px 0 8px}
.vp-fl .flag{display:inline-flex;align-items:center;gap:4px;font-size:11.5px;font-weight:700;padding:2px 7px;border-radius:6px}
.vp-fl .flag svg{width:12px;height:12px;fill:none;stroke:currentColor;stroke-width:2.4}
.vp-fl .flag.red{background:#fdecea;color:#c62828}.vp-fl .flag.amber{background:#fff3e0;color:#b45309}
.vp-r{display:flex;gap:10px;padding:3px 0;border-top:1px solid #f0f2f5}.vp-r span{width:92px;flex:none;color:var(--ink3)}.vp-r b{font-weight:600;min-width:0}
.vp-ft{margin-top:8px;font-size:11.5px;color:var(--ink3)}
a.jm-mi{display:block;color:inherit;text-decoration:none;border-radius:6px}a.jm-mi:hover{background:#e7f0fe}
.jm-blk:hover{filter:brightness(.97);box-shadow:0 0 0 2px rgba(30,136,229,.35)}

/* v0.6.6: footer buttons never clipped on short/narrow laptop screens */
.main{min-width:0}
.jm-form,.jm-form.jm-form-wide{max-width:100%;min-width:0;box-sizing:border-box}
.jm-form .grow,.jm-fsec>.grow{min-width:0}
.jm-row3>*,.jm-cs>*,.bt-accrow>*{min-width:0}
.jm-form select,.jm-form input,.jm-form textarea,.jm-dlg select,.jm-dlg input,.jm-dlg textarea{min-width:0;max-width:100%;box-sizing:border-box}
.jm-ffoot,.jm-dfoot,.jp-foot{flex-wrap:wrap;row-gap:8px;min-width:0;max-width:100%;box-sizing:border-box}
.jm-ffoot .btn,.jm-dfoot .btn,.jp-foot .btn{flex:0 1 auto;min-width:0;white-space:nowrap}
.jm-form-wide .jm-ffoot{right:0}
@media (max-width:1600px),(max-height:760px){
 .jm-form-wide .jm-ffoot,.jm-dlg>.jm-dfoot,.jp-foot{gap:8px;padding-top:12px;padding-bottom:12px}
 .jm-ffoot .btn,.jm-dfoot .btn,.jp-foot .btn{padding-left:14px;padding-right:14px}
}
@media (max-width:1100px){ .bt-accrow{grid-template-columns:1fr} }

/* v0.6.7: cancelled jobs, Book now */
.jm-steps.is-cx .jm-step.done i{background:#c9d1db}
.jm-steps.is-cx .jm-step.done{color:var(--ink3)}
.jm-steps.is-cx .jm-step.off i{background:#f1f3f6}
.jm-steps.is-cx .jm-step.off{color:#b8c0ca}
.jm-step.cx{color:#c62828} .jm-step.cx i{background:#e53935}
.jm-banner.cx{background:#fdecec;border:1px solid #f5c2c0;color:#8e1d1d;display:flex;align-items:center;gap:10px}
.jm-banner.cx>div{flex:1;min-width:0} .jm-banner.cx b{color:#b71c1c}
.jm-banner.cx .cxr{display:block;font-weight:500;color:#7a2a2a;margin-top:2px}
.jm-banner.cx .btn{flex:none;background:#fff}
.jm-stage.st-cancelled{background:#fdecec;color:#b71c1c}
.jm-bkc{width:1%;text-align:right}
.jm-booknow{white-space:nowrap;display:inline-flex;align-items:center;gap:6px}
.jm-booknow svg{width:15px;height:15px;fill:none;stroke:currentColor;stroke-width:2}
.jlx .chip.ch-cx{background:#f1f3f6;color:#6b7480} .jlx .chip.ch-cx .d{background:#98a2b3}
.jlx .act.show{opacity:1!important;visibility:visible!important;transform:none!important}

/* v0.6.7: double booking is red */
.jm-banner.bad{background:#fdecec;border:1px solid #f5c2c0;color:#8e1d1d}
.jm-banner.bad b{color:#b71c1c}
#jm-bok.bad{background:#d92d20;border-color:#d92d20;color:#fff}

.bk-alert{display:inline-flex;align-items:center;gap:6px;color:#8a5a00;font-weight:650;font-size:13.5px;line-height:1.3}
.bk-alert.bad{color:#c62828}
.bk-alert svg{width:16px;height:16px;fill:none;stroke:currentColor;stroke-width:2;flex:none}

/* v0.6.9: Today / Tomorrow labels on the schedule */
.jm-ch .rel{font-style:normal;font-weight:700;color:var(--blue);margin-right:2px}
.jm-col.today .jm-ch .rel{color:var(--blue)}

.jm-blk.st-done{background:#f1f3f6;border-left-color:#98a2b3;color:#475467} .jm-blk.st-done span{color:#667085}
.jm-blk.grp{border-left-width:4px}

/* v0.7.0: jobs list, client page, site page (approved mockup) */
.jlx .jl-top{position:sticky;top:0;z-index:30;height:68px;display:flex;align-items:center;gap:18px;padding:0 36px;background:rgba(255,255,255,.94);backdrop-filter:saturate(1.4) blur(8px);border-bottom:1px solid var(--line)}
.jlx .jl-title{display:flex;align-items:center;gap:10px;flex:none}
.jlx .jl-title h1{margin:0;font-size:24px;font-weight:750;letter-spacing:-.01em}
.jlx .jl-count{font-size:13px;font-weight:700;color:var(--ink2);background:#eef1f5;border-radius:999px;padding:2px 10px}
.jlx .jl-search{flex:1;max-width:560px;margin-left:18px;position:relative;display:flex;align-items:center}
.jlx .jl-search svg{position:absolute;left:13px;width:17px;height:17px;fill:none;stroke:#8a929c;stroke-width:2.2;stroke-linecap:round}
.jlx .jl-search input{width:100%;height:42px;border:1px solid var(--line);border-radius:11px;background:#f7f9fb;padding:0 40px 0 40px;outline:none;transition:border-color .15s,background .15s,box-shadow .15s}
.jlx .jl-search input:focus{background:#fff;border-color:#9cc6f2;box-shadow:0 0 0 4px rgba(30,136,229,.12)}
.jlx .jl-search kbd{position:absolute;right:11px;font:600 11.5px/1 inherit;color:var(--ink3);border:1px solid var(--line);border-radius:6px;padding:4px 7px;background:#fff}
.jlx .jl-sync{margin-left:auto;display:flex;align-items:center;gap:7px;font-size:13px;font-weight:600;color:var(--ink2)}
.jlx .jl-sync i{width:8px;height:8px;border-radius:50%;background:#2fb67c;box-shadow:0 0 0 3px #dff5ea}
.jlx .jl-add{height:42px;padding:0 18px;font-size:14.5px;border-radius:11px}
.jlx .jl-add svg{width:18px;height:18px;fill:none;stroke:#fff;stroke-width:2.6;stroke-linecap:round}
.jlx .jl-main{padding:22px 36px 60px}
.jlx .jl-tabs{display:flex;gap:8px;flex-wrap:wrap;margin-bottom:14px}
.jlx .jl-tab{display:inline-flex;align-items:center;gap:9px;height:40px;padding:0 16px;border-radius:11px;background:#fff;border:1px solid var(--line);font-weight:650;color:var(--ink2);transition:all .12s}
.jlx .jl-tab:hover{border-color:#cfd6de;color:var(--ink)}
.jlx .jl-tab .dot{width:9px;height:9px;border-radius:50%}
.jlx .jl-tab .n{font-size:12.5px;font-weight:750;min-width:24px;text-align:center;padding:1px 7px;border-radius:999px;background:#eef1f5;color:var(--ink2)}
.jlx .jl-tab.on{background:var(--ink);border-color:var(--ink);color:#fff}
.jlx .jl-tab.on .n{background:rgba(255,255,255,.18);color:#fff}
.jlx .jl-tab.alert .n{background:#fdecea;color:#c62828}
.jlx .jl-tab.on.alert .n{background:#e53935;color:#fff}
.jlx .jl-filters{display:flex;align-items:center;gap:8px;flex-wrap:wrap;margin-bottom:14px}
.jlx .jl-f{position:relative;display:inline-flex;align-items:center;height:34px;border:1px solid var(--line);border-radius:9px;background:#fff;font-size:13px;padding:0 0 0 11px;cursor:pointer}
.jlx .jl-f:hover{border-color:#cfd6de}
.jlx .jl-f span{color:var(--ink3);font-weight:600;margin-right:4px}
.jlx .jl-f select{appearance:none;-webkit-appearance:none;border:0;background:transparent url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='10' height='10' viewBox='0 0 24 24' fill='none' stroke='%235f6b78' stroke-width='3' stroke-linecap='round'%3E%3Cpath d='M6 9l6 6 6-6'/%3E%3C/svg%3E") no-repeat right 10px center;font-weight:650;color:var(--ink);padding:0 28px 0 0;height:32px;cursor:pointer;outline:none}
.jlx .jl-f.set{background:var(--bluebg);border-color:#b7d6f5}
.jlx .jl-f.set select{color:#1764c0}
.jlx .jl-clear{font-size:13px;font-weight:650;color:var(--blue);padding:0 6px;height:34px}
.jlx .jl-attn{margin-left:auto;font-size:13px;color:var(--ink2);display:flex;gap:14px}
.jlx .jl-attn b{font-weight:700}
.jlx .jl-attn .r{color:#c62828}
.jlx .jl-attn .a{color:#b45309}
.jlx .jl-card{background:#fff;border:1px solid var(--line);border-radius:var(--r);box-shadow:0 1px 3px rgba(16,24,40,.04)}
.jlx .jl-tbl{width:100%;border-collapse:separate;border-spacing:0;font-size:14px}
.jlx .jl-tbl thead th{position:sticky;top:0;z-index:5;background:#f9fafb;text-align:left;font-size:12px;font-weight:700;letter-spacing:.04em;text-transform:uppercase;color:var(--ink3);padding:0 14px;height:44px;border-bottom:1px solid var(--line);white-space:nowrap;cursor:pointer;user-select:none}
.jlx .jl-tbl thead th:first-child{border-top-left-radius:var(--r);padding-left:22px}
.jlx .jl-tbl thead th:last-child{border-top-right-radius:var(--r);cursor:default}
.jlx .jl-tbl thead th:hover{color:var(--ink2)}
.jlx .jl-tbl thead th.sorted{color:var(--ink)}
.jlx .jl-tbl thead th .ar{display:inline-block;margin-left:4px;font-size:10px;color:var(--blue)}
.jlx .jl-tbl th.num,.jlx .jl-tbl td.num{text-align:right}
.jlx .jl-tbl tbody td{padding:0 14px;height:68px;border-bottom:1px solid #eef1f4;vertical-align:middle}
.jlx .jl-tbl tbody tr:last-child td{border-bottom:0}
.jlx .jl-tbl tbody tr{cursor:pointer;transition:background .1s}
.jlx .jl-tbl tbody tr:hover td{background:#f7faff}
.jlx .jl-tbl tbody td:first-child{padding-left:22px;position:relative}
.jlx .jl-tbl tr.at-red td:first-child{box-shadow:inset 4px 0 0 #e53935}
.jlx .jl-tbl tr.at-amber td:first-child{box-shadow:inset 4px 0 0 #f59e0b}
.jlx .jl-tbl tr.at-red td{background:#fffafa}
.jlx .jl-tbl tr.at-amber td{background:#fffcf5}
.jlx .ref{font-weight:700;color:var(--ink2);font-variant-numeric:tabular-nums;font-size:13.5px}
.jlx .st{font-weight:650;color:var(--ink);display:flex;align-items:center;gap:7px}
.jlx .ss{font-size:12.5px;color:var(--ink3);margin-top:2px;display:flex;gap:6px;align-items:center;flex-wrap:wrap}
.jlx .pc{font-weight:650;color:var(--ink2);letter-spacing:.02em}
.jlx .flag{display:inline-flex;align-items:center;gap:4px;font-size:11.5px;font-weight:700;padding:2px 7px;border-radius:6px;white-space:nowrap}
.jlx .flag svg{width:12px;height:12px;fill:none;stroke:currentColor;stroke-width:2.4;stroke-linecap:round;stroke-linejoin:round}
.jlx .flag.red{background:#fdecea;color:#c62828}
.jlx .flag.amber{background:#fff3e0;color:#b45309}
.jlx .cl{font-weight:600}
.jlx .bt{display:inline-flex;align-items:center;gap:7px;color:var(--ink2);white-space:nowrap}
.jlx .bt svg{width:17px;height:17px;fill:none;stroke:#8a96a3;stroke-width:1.9;stroke-linecap:round;stroke-linejoin:round}
.jlx .acc{display:inline-flex;align-items:center;gap:7px;white-space:nowrap;color:var(--ink2)}
.jlx .acc i{width:26px;height:26px;border-radius:8px;display:grid;place-items:center;flex:none}
.jlx .acc i svg{width:15px;height:15px;fill:none;stroke:currentColor;stroke-width:2.1;stroke-linecap:round;stroke-linejoin:round}
.jlx .acc.k i{background:#e8f5e9;color:#2e7d32}
.jlx .acc.ct i{background:#e3f0fc;color:#1764c0}
.jlx .acc.we i{background:#f3e8fd;color:#7b3fc4}
.jlx .doors{font-weight:650;font-variant-numeric:tabular-nums}
.jlx .chip{display:inline-flex;align-items:center;gap:7px;height:28px;padding:0 11px;border-radius:999px;font-size:12.5px;font-weight:700;white-space:nowrap}
.jlx .chip .d{width:7px;height:7px;border-radius:50%;background:currentColor}
.jlx .ch-new{background:#eef1f5;color:#4a5562}
.jlx .ch-contacted{background:#fff3e0;color:#b45309}
.jlx .ch-ready{background:#e7f0fe;color:#1764c0}
.jlx .ch-booked{background:#e3f6ec;color:#127046}
.jlx .ch-surveyed{background:#e0f4f6;color:#0d6b76}
.jlx .ch-due{background:#fdecea;color:#c62828}
.jlx .ch-issued{background:#16191d;color:#fff}
.jlx .tries{display:inline-flex;gap:3px;margin-left:2px}
.jlx .tries b{width:6px;height:6px;border-radius:50%;background:#f5c98a}
.jlx .tries b.on{background:#b45309}
.jlx .when{white-space:nowrap}
.jlx .when .w1{font-weight:650}
.jlx .when .w2{font-size:12.5px;color:var(--ink3);margin-top:2px}
.jlx .sv{display:inline-flex;align-items:center;gap:9px;white-space:nowrap}
.jlx .av{width:30px;height:30px;border-radius:50%;display:grid;place-items:center;font-size:11.5px;font-weight:750;color:#fff;flex:none}
.jlx .c-act{width:150px;text-align:right}
.jlx td.c-act{text-align:right;padding-right:20px!important}
.jlx .act{opacity:0;transform:translateX(4px);transition:all .12s;height:34px;padding:0 14px;font-size:13px}
.jlx tr:hover .act,.jlx tr.hov .act{opacity:1;transform:none}
.jlx .act.sec{background:#fff;border:1px solid var(--line);color:var(--ink)}
.jlx .chev{width:18px;height:18px;fill:none;stroke:#b9c1ca;stroke-width:2.2;stroke-linecap:round;vertical-align:middle;margin-left:6px}
.jlx .jl-none{padding:60px 20px;text-align:center;color:var(--ink2)}
.jlx .jl-foot{font-size:12.5px;color:var(--ink3);margin:12px 4px 0}
@media (max-width:1500px){.jlx .jl-top{padding:0 26px;gap:14px}
.jlx .jl-main{padding:20px 26px 50px}
.jlx .jl-tbl tbody td{padding:0 10px}
.jlx .jl-tbl thead th{padding:0 10px}
.jlx .jl-tbl tbody td:first-child,.jlx .jl-tbl thead th:first-child{padding-left:18px}
.jlx .acc .lb2{display:none}
.jlx .c-act{width:120px}
.jlx .sv .nm2{display:none}
.jlx .jl-attn{display:none}}

@media (max-width:1279px){.jlx .c-bt{display:none}}
.jlx .jl-tbl td.c-ref,.jlx .jl-tbl th.c-ref{white-space:nowrap;width:88px}
.jlx .c-client .cl{white-space:nowrap}
.jlx td.c-act{white-space:nowrap;width:180px}
.jlx .act.show{opacity:1;transform:none}
.jlx .crumbs{display:flex;align-items:center;gap:9px;font-size:15px;white-space:nowrap;flex:none}
.jlx .crumbs a{color:var(--ink2);text-decoration:none;font-weight:600}
.jlx .crumbs a:hover{color:var(--blue)}
.jlx .crumbs span{color:var(--ink3)}
.jlx .crumbs b{font-weight:750;font-size:17px}
.jlx .hero{display:flex;gap:24px;align-items:flex-start;background:#fff;border:1px solid var(--line);border-radius:var(--r);padding:22px 24px;margin-bottom:16px}
.jlx .hero-l{display:flex;gap:18px;flex:1;min-width:0}
.jlx .logo-t{width:56px;height:56px;border-radius:14px;color:#fff;font-weight:800;font-size:19px;display:grid;place-items:center;flex:none}
.jlx .hero-t{flex:1;min-width:0}
.jlx .hero-row{display:flex;align-items:center;gap:10px;flex-wrap:wrap}
.jlx .hero h1{margin:0 6px 0 0;font-size:26px;font-weight:750;letter-spacing:-.01em}
.jlx .hero-sub{color:var(--ink2);margin-top:4px;font-size:14px;display:flex;align-items:center;gap:8px;flex-wrap:wrap}
.jlx .hero-sub.big{font-size:15px;color:var(--ink)}
.jlx .hero-sub svg,.jlx .hero-ct svg{width:16px;height:16px;fill:none;stroke:currentColor;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;flex:none}
.jlx .hero-sub .pc{font-weight:700}
.jlx .dotsep{width:4px;height:4px;border-radius:50%;background:#c3cad2}
.jlx .hero-ct{display:flex;align-items:center;gap:14px;flex-wrap:wrap;margin-top:14px;font-size:14px}
.jlx .hero-ct a{display:inline-flex;align-items:center;gap:6px;color:var(--ink);text-decoration:none;cursor:pointer}
.jlx .hero-ct a:hover{color:var(--blue)}
.jlx .hero-ct a svg{color:var(--ink3)}
.jlx .hero-ct a.more{color:var(--blue);font-weight:600}
.jlx .hero-ct.sm2{margin-top:8px;color:var(--ink2);font-size:13.5px}
.jlx .hero-ct.sm2 span{display:inline-flex;align-items:center;gap:6px}
.jlx .hero-ct.sm2 svg{color:var(--ink3)}
.jlx .mainb{display:inline-flex;align-items:center;gap:5px;font-size:11.5px;font-weight:750;color:#a16207;background:#fef6d8;border-radius:6px;padding:3px 8px;white-space:nowrap}
.jlx .mainb svg{width:12px;height:12px;fill:#eab308;stroke:#eab308;stroke-width:1.5}
.jlx .pill{display:inline-flex;align-items:center;gap:6px;height:28px;padding:0 11px;border-radius:999px;font-size:12.5px;font-weight:700;white-space:nowrap}
.jlx .pill svg{width:14px;height:14px;fill:none;stroke:currentColor;stroke-width:2.4;stroke-linecap:round;stroke-linejoin:round}
.jlx .pill.ok{background:#e8f5e9;color:#2e7d32}
.jlx .pill.amb{background:#fff3e0;color:#b45309}
.jlx .pill.bt2{background:#eef1f5;color:#3f4a56}
.jlx .hero-r{display:flex;gap:10px;flex:none}
.jlx .hero-r.l{margin-top:16px}
.jlx .btn.sec2{background:#fff;border:1px solid var(--line);color:var(--ink)}
.jlx .btn.sec2:hover{border-color:#cfd6de}
.jlx .btn svg{width:17px;height:17px;fill:none;stroke:currentColor;stroke-width:2.3;stroke-linecap:round;stroke-linejoin:round}
.jlx .kpis{display:flex;gap:12px;margin-bottom:18px}
.jlx .kpis div{flex:1;background:#fff;border:1px solid var(--line);border-radius:12px;padding:12px 18px;display:flex;align-items:baseline;gap:8px}
.jlx .kpis b{font-size:22px;font-weight:750}
.jlx .kpis b.r{color:#c62828}
.jlx .kpis span{color:var(--ink2);font-size:13.5px}
.jlx .pg-tabs{display:flex;gap:4px;border-bottom:1px solid var(--line);margin-bottom:16px}
.jlx .pg-tab{height:44px;padding:0 16px;font-weight:650;color:var(--ink2);border-bottom:2.5px solid transparent;margin-bottom:-1px;display:inline-flex;align-items:center;gap:8px;font-size:15px}
.jlx .pg-tab:hover{color:var(--ink)}
.jlx .pg-tab.on{color:var(--blue);border-bottom-color:var(--blue)}
.jlx .pg-tab .n{font-size:12px;font-weight:750;background:#eef1f5;color:var(--ink2);padding:1px 8px;border-radius:999px}
.jlx .pg-tab.on .n{background:var(--bluebg);color:var(--blue)}
.jlx .tbar{display:flex;align-items:center;justify-content:space-between;gap:12px;margin-bottom:12px}
.jlx .mini-s{position:relative;display:flex;align-items:center;width:340px}
.jlx .mini-s svg{position:absolute;left:11px;width:15px;height:15px;fill:none;stroke:#8a929c;stroke-width:2.2;stroke-linecap:round}
.jlx .mini-s input{width:100%;height:38px;border:1px solid var(--line);border-radius:10px;padding:0 12px 0 34px;background:#fff;outline:none}
.jlx .sm{font-size:13px}
.jlx .cnt{display:inline-grid;place-items:center;min-width:28px;height:26px;border-radius:8px;background:#f1f3f6;color:var(--ink3);font-weight:700;font-size:13px}
.jlx .cnt.on{background:var(--bluebg);color:var(--blue)}
.jlx .w1b{font-weight:650}
.jlx .c-act2{width:50px;text-align:right}
.jlx .jl-tbl.grp tr.gh td{height:48px;background:#f9fafb;border-bottom:1px solid var(--line);cursor:pointer;font-size:14.5px}
.jlx .jl-tbl.grp tbody.g+tbody.g tr.gh td{border-top:1px solid var(--line)}
.jlx .tw{display:inline-block;vertical-align:middle;margin-right:8px;transition:transform .15s}
.jlx .tw svg{width:16px;height:16px;fill:none;stroke:var(--ink2);stroke-width:2.4;stroke-linecap:round}
.jlx tbody.shut .tw{transform:rotate(-90deg)}
.jlx tbody.shut tr:not(.gh){display:none}
.jlx .gl{float:right;color:var(--blue);font-weight:600;font-size:13px;cursor:pointer;display:inline-flex;align-items:center}
.jlx .gl .chev{stroke:var(--blue);margin-left:2px;width:15px;height:15px}
.jlx .jl-tbl.grp tr.gh:hover td{background:#f3f6fa}
.jlx .ct-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(min(340px,100%),1fr));gap:14px}
.jlx .ct-card{background:#fff;border:1px solid var(--line);border-radius:var(--r);padding:18px 20px;text-align:left}
.jlx .ct-h{display:flex;gap:12px;align-items:center}
.jlx .av.lg{width:42px;height:42px;font-size:14px}
.jlx .ct-n{font-weight:700;font-size:15.5px;display:flex;align-items:center;gap:8px;flex-wrap:wrap}
.jlx .ct-p{color:var(--ink2);font-size:13.5px}
.jlx .ct-l{display:flex;flex-direction:column;gap:6px;margin-top:14px;font-size:14px}
.jlx .ct-l span{display:flex;align-items:center;gap:8px}
.jlx .ct-l svg{width:15px;height:15px;fill:none;stroke:var(--ink3);stroke-width:2;stroke-linecap:round;stroke-linejoin:round}
.jlx .ct-add{display:flex;align-items:center;justify-content:center;gap:8px;border-style:dashed;color:var(--blue);font-weight:650;min-height:150px}
.jlx .ct-add svg{width:18px;height:18px;fill:none;stroke:currentColor;stroke-width:2.4;stroke-linecap:round}
.jlx .jl-card.form{padding:6px 26px 22px}
.jlx .form h3{font-size:13px;text-transform:uppercase;letter-spacing:.06em;color:var(--ink3);margin:22px 0 12px}
.jlx .fg{display:grid;grid-template-columns:repeat(4,1fr);gap:14px 18px}
.jlx .fd{display:flex;flex-direction:column;gap:6px;font-size:13px;font-weight:650;color:var(--ink2)}
.jlx .fd.w2{grid-column:span 2}
.jlx .fd.w4{grid-column:span 4}
.jlx .fd input,.jlx .fd select,.jlx .fd textarea{height:42px;border:1px solid var(--line);border-radius:10px;padding:0 12px;font-weight:500;color:var(--ink);background:#fff;font-size:14.5px}
.jlx .fd textarea{height:auto;padding:10px 12px;resize:vertical}
.jlx .tg{display:flex;align-items:center;gap:12px;border:1px solid var(--line);border-radius:12px;padding:10px 14px;cursor:pointer}
.jlx .tg input{display:none}
.jlx .tg i{width:38px;height:22px;border-radius:999px;background:#d5dbe2;position:relative;flex:none;transition:background .15s}
.jlx .tg i::after{content:"";position:absolute;top:3px;left:3px;width:16px;height:16px;border-radius:50%;background:#fff;transition:left .15s}
.jlx .tg input:checked+i{background:#f59e0b}
.jlx .tg input:checked+i::after{left:19px}
.jlx .tg span{display:flex;flex-direction:column;font-size:14px}
.jlx .tg em{font-style:normal;color:var(--ink3);font-size:12.5px}
.jlx .ffoot{display:flex;justify-content:flex-end;gap:10px;margin-top:22px;padding-top:18px;border-top:1px solid var(--line)}
.jlx .hero.site{align-items:stretch}
.jlx .mapbox{width:400px;flex:none;border-radius:12px;overflow:hidden;position:relative;border:1px solid var(--line);min-height:190px}
.jlx .map{width:100%;height:100%;display:block;position:absolute;inset:0}
.jlx .mapa{position:absolute;right:10px;bottom:10px;background:#fff;border-radius:8px;padding:6px 10px;font-size:12.5px;font-weight:650;box-shadow:0 1px 4px rgba(0,0,0,.15);cursor:pointer;color:var(--blue)}
.jlx .fi{width:17px;height:17px;fill:none;stroke:var(--ink3);stroke-width:2;vertical-align:-3px}
.jlx .jl-card.pad{padding:20px}
.jlx .note-in{width:100%;min-height:80px;border:1px solid var(--line);border-radius:10px;padding:10px 12px;resize:vertical}
.jlx .note{margin-top:16px;padding-top:14px;border-top:1px solid var(--line)}
.jlx .note p{margin:4px 0 0}
.jlx .files{display:grid;grid-template-columns:repeat(auto-fill,minmax(200px,1fr));gap:14px}
.jlx .fcard{background:#fff;border:1px solid var(--line);border-radius:12px;padding:20px;display:flex;flex-direction:column;align-items:center;gap:10px;font-weight:600;font-size:13.5px}
.jlx .fcard svg{width:30px;height:30px;fill:none;stroke:var(--blue);stroke-width:1.6;stroke-linecap:round;stroke-linejoin:round}
.jlx .fcard.add{border-style:dashed;color:var(--blue)}
@media (max-width:1500px){.jlx .mapbox{width:320px}
.jlx .kpis div{padding:10px 14px}
.jlx .fg{grid-template-columns:repeat(3,1fr)}
.jlx .fd.w4{grid-column:span 3}
.jlx .hero-l .hero-r{}}

@media (max-width:1500px){.jlx td.c-act{width:140px}
.jlx .c-act{width:140px}
.jlx .jl-tbl tbody td.c-act{padding-right:12px!important}
.jlx .act{padding:0 11px}
.jlx .jl-tbl .c-ref{width:76px}}

@media (max-width:1500px){.jlx .bt svg{display:none}
.jlx .jl-tbl tbody td,.jlx .jl-tbl thead th{padding-left:9px;padding-right:9px}}

/* v0.7.0 integration tweaks */
.jlx{margin:-6px 0 0}
.jlx .jl-top{position:static;height:auto;padding:4px 0 16px;background:none;backdrop-filter:none;border-bottom:0}
.jlx .jl-add{margin-left:auto}
.jlx .jl-card{overflow:visible}
.jlx .jl-tbl tbody tr[hidden]{display:none}
.jlx .crumbs-row{margin:0 0 12px}
.jlx .hero .flink{font-size:inherit}
.jlx .hero-ct .flink,.jlx .pill .flink{margin-left:4px}
.jlx .fv{font-weight:500;color:var(--ink);font-size:14.5px;min-height:22px}
.jlx .fv .pre{white-space:pre-wrap}
.jlx .mapbox .bt-map{height:100%;min-height:190px;border-radius:0}
.jlx .ct-card.ct-add{cursor:pointer;background:#fff;font:inherit;font-weight:650}
.jlx .act.sec{background:#fff;border:1px solid var(--line);color:var(--ink)}
.jlx .jl-tbl.sm-rows tbody td{height:60px}
.jlx .jl-none .flink{font-size:inherit}
.jlx .st svg{width:16px;height:16px;fill:none;stroke:var(--ink3);stroke-width:2;flex:none}
.jlx .pill.bt2 svg{fill:none;stroke:currentColor}
@media (max-width:1400px){ .jlx .c-surv .nm2{display:none} }
@media (max-width:1100px){ .jlx .c-acc .lb2{display:none} .jlx .hero.site{flex-direction:column} .jlx .mapbox{width:100%;height:200px} .jlx .kpis{flex-wrap:wrap} .jlx .kpis div{flex:1 1 30%} }

/* v0.7.0: Clients & sites main page (mockup screen 4) */
.jlx .w1b{font-weight:650}
.jlx .cs-top .jl-search{max-width:620px}
.jlx .cs-head{display:flex;align-items:flex-end;justify-content:space-between;gap:20px;border-bottom:1px solid var(--line);margin-bottom:16px}
.jlx .cs-tabs{display:flex;gap:6px}
.jlx .cs-tab{display:inline-flex;align-items:center;gap:10px;height:54px;padding:0 22px;font-size:18px;font-weight:700;color:var(--ink2);border-bottom:3px solid transparent;margin-bottom:-1px;background:none}
.jlx .cs-tab svg{width:20px;height:20px;fill:none;stroke:currentColor;stroke-width:1.9;stroke-linecap:round;stroke-linejoin:round}
.jlx .cs-tab:hover{color:var(--ink)}
.jlx .cs-tab .n{font-size:13px;font-weight:750;background:#eef1f5;color:var(--ink2);padding:2px 9px;border-radius:999px}
.jlx .cs-tab.on{color:var(--blue);border-bottom-color:var(--blue)}
.jlx .cs-tab.on .n{background:var(--bluebg);color:var(--blue)}
.jlx .cs-kpis{display:flex;gap:10px;padding-bottom:10px}
.jlx .cs-kpis div{display:flex;align-items:baseline;gap:6px;background:#fff;border:1px solid var(--line);border-radius:10px;padding:6px 14px}
.jlx .cs-kpis b{font-size:18px;font-weight:750}
.jlx .cs-kpis span{font-size:13px;color:var(--ink2)}
.jlx .cs-kpis .k-amb b{color:#b45309}
.jlx .cs-filters{min-height:36px}
.jlx .cs-seg{display:inline-flex;gap:6px}
.jlx .cs-sg{display:inline-flex;align-items:center;gap:7px;height:34px;padding:0 13px;border-radius:9px;border:1px solid var(--line);background:#fff;font-weight:650;font-size:13.5px;color:var(--ink2)}
.jlx .cs-sg b{font-size:12px;font-weight:750;background:#eef1f5;border-radius:999px;padding:0 7px}
.jlx .cs-sg i{width:8px;height:8px;border-radius:50%}
.jlx .cs-sg.k-ok i{background:#2fb67c}
.jlx .cs-sg.k-flag i{background:#f59e0b}
.jlx .cs-sg.k-stop i{background:#e53935}
.jlx .cs-sg:hover{border-color:#cfd6de;color:var(--ink)}
.jlx .cs-sg.on{background:var(--ink);border-color:var(--ink);color:#fff}
.jlx .cs-sg.on b{background:rgba(255,255,255,.2)}
.jlx .cs-hint{margin-left:auto;font-size:13px;color:var(--ink3)}
.jlx .cs-back{display:inline-flex;align-items:center;gap:4px;font-weight:650;color:var(--blue);font-size:13.5px;cursor:pointer}
.jlx .cs-back .chev{width:14px;height:14px}
.jlx .cs-tbl{width:100%;table-layout:fixed}
.jlx .cs-tbl tbody tr{cursor:pointer}
.jlx .cs-name{display:flex;align-items:center;gap:12px;min-width:0}
.jlx .cs-name>div{min-width:0}
.jlx .cs-name .st{white-space:nowrap;overflow:hidden;text-overflow:ellipsis;display:block}
.jlx .cs-logo{flex:none;width:38px;height:38px;border-radius:10px;display:grid;place-items:center;color:#fff;font-weight:750;font-size:13.5px;letter-spacing:.02em}
.jlx .cs-logo.sm{width:24px;height:24px;border-radius:7px;font-size:10px}
.jlx .cs-new{font-size:11px;font-weight:750;color:var(--blue);background:var(--bluebg);border-radius:6px;padding:1px 6px;margin-left:4px}
.jlx .cs-ct{font-weight:600;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.jlx .cs-i{width:13px;height:13px;fill:none;stroke:currentColor;stroke-width:2;stroke-linecap:round;stroke-linejoin:round}
.jlx .cs-link{display:inline-grid;place-items:center;min-width:34px;height:28px;padding:0 8px;border-radius:8px;border:1px solid #d6e6f8;background:#f3f8fe;color:var(--blue);font-weight:750;cursor:pointer}
.jlx .cs-link:hover{background:var(--blue);color:#fff;border-color:var(--blue)}
.jlx .cs-chip{display:inline-flex;align-items:center;gap:5px;font-size:12.5px;font-weight:700;padding:4px 10px;border-radius:999px;white-space:nowrap}
.jlx .cs-chip svg{width:13px;height:13px;fill:none;stroke:currentColor;stroke-width:2.2;stroke-linecap:round;stroke-linejoin:round}
.jlx .cs-ok{background:#e8f5e9;color:#2e7d32}
.jlx .cs-flag{background:#fff3e0;color:#b45309}
.jlx .cs-stop{background:#fdecea;color:#c62828}
.jlx .cs-why{white-space:nowrap;overflow:hidden;text-overflow:ellipsis;display:block}
.jlx .cs-cl{display:inline-flex;align-items:center;gap:8px;font-weight:600;color:var(--ink);cursor:pointer;max-width:100%;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.jlx .cs-cl:hover{color:var(--blue);text-decoration:underline}
.jlx .cs-bt{display:inline-flex;align-items:center;gap:6px;font-size:12.5px;font-weight:650;color:#3f4a56;background:#eef1f5;border-radius:999px;padding:4px 10px 4px 8px;white-space:nowrap}
.jlx .cs-bt svg{width:14px;height:14px;fill:none;stroke:currentColor;stroke-width:1.9;stroke-linecap:round;stroke-linejoin:round}
.jlx .cs-tb{color:#b45309;font-weight:650;justify-content:flex-end}
.jlx .cs-tbl td.num .ss{justify-content:flex-end}
.jlx .cs-tbl .w1b{font-weight:650;white-space:nowrap}
.jlx .cs-tbl td{overflow:hidden}
.jlx .cs-tbl .c-go{width:44px}
.jlx .cs-tbl td.c-go .chev{width:18px;height:18px;stroke:#b6bec8}
.jlx .cs-tbl tr:hover td.c-go .chev{stroke:var(--blue)}
.jlx .cs-c .c-n{width:27%}
.jlx .cs-c .c-ct{width:19%}
.jlx .cs-c .c-num{width:9%}
.jlx .cs-c .c-last{width:12%}
.jlx .cs-c .c-st{width:15%}
.jlx .cs-s .c-sn{width:22%}
.jlx .cs-s .c-cl{width:18%}
.jlx .cs-s .c-bt2{width:12%}
.jlx .cs-s .c-ct{width:13%}
.jlx .cs-s .c-num{width:9%}
.jlx .cs-s .c-nx{width:13%}
.jlx .cs-s .c-last{width:11%}
.jlx .cs-tbl .ss{flex-wrap:nowrap;white-space:nowrap;overflow:hidden}
@media (max-width:1500px){.jlx .cs-kpis div{padding:5px 11px}
.jlx .cs-kpis b{font-size:16px}
.jlx .cs-tab{font-size:17px;padding:0 16px;height:50px}
.jlx .cs-hint{display:none}
.jlx .cs-c .c-n{width:28%}
.jlx .cs-c .c-ct{width:19%}
.jlx .cs-c .c-num{width:8.5%}
.jlx .cs-c .c-last{width:12%}
.jlx .cs-c .c-st{width:15.5%}
.jlx .cs-s .c-sn{width:23%}
.jlx .cs-s .c-cl{width:19%}
.jlx .cs-s .c-bt2{width:12%}
.jlx .cs-s .c-ct{width:13%}
.jlx .cs-s .c-num{width:9%}
.jlx .cs-s .c-nx{width:13%}
.jlx .cs-s .c-last{width:11%}
.jlx .cs-bt svg{display:none}
.jlx .cs-tbl .c-go{width:30px}}
@media (max-width:1399px){.jlx .cs-kpis{display:none}}
.jlx .cs-nb{color:#b45309;font-weight:600;font-size:13.5px;white-space:nowrap}
@media (max-width:1500px){.jlx .cs-s .c-sn{width:26%}
.jlx .cs-s .c-cl{width:18%}
.jlx .cs-s .c-bt2{width:10.5%}
.jlx .cs-s .c-ct{width:12%}
.jlx .cs-s .c-num{width:8%}
.jlx .cs-s .c-nx{width:13.5%}
.jlx .cs-s .c-last{width:12%}
.jlx .cs-s .flag{padding:2px 5px}}
.jlx .cs-tab{text-decoration:none}
.jlx .cs-cl{text-decoration:none;color:inherit;display:inline-flex;align-items:center;gap:8px}
.jlx .cs-cl:hover{color:var(--blue)}
.jlx .cs-back{text-decoration:none}

/* pages with their own + Add button hide the top-bar one (one Add button per screen) */
body.jm-own-add #add-btn{display:none!important}

/* v0.7.0: new list/client/site/clients pages use the full width */
.main:has(.jlx){max-width:none}

/* v0.7.2: client page site rows show a job breakdown; site page shows flat progress */
.jlx td.sj{white-space:nowrap} .jlx td.sj b{font-weight:700;margin-right:8px}
.jlx td.sj span{display:inline-block;font-size:12.5px;font-weight:650;border-radius:999px;padding:2px 8px;margin-right:4px}
.jlx .sj-tb{background:#e7f0fe;color:#1565c0} .jlx .sj-bk{background:#e3f6ec;color:#0d6b42} .jlx .sj-due{background:#fdecec;color:#b71c1c}
.jlx .jp-mini{display:flex;align-items:center;gap:8px;margin-top:5px;font-size:12px;color:var(--ink2)} .jlx .jp-mini .jm-prog{width:70px;margin:0}

/* v0.7.3: every number, card and chip clicks through */
.jlx .kpis>a{flex:1;background:#fff;border:1px solid var(--line);border-radius:12px;padding:12px 18px;display:flex;align-items:baseline;gap:8px;color:inherit;text-decoration:none;transition:border-color .12s,box-shadow .12s,transform .12s}
.jlx .cs-kpis>a{display:flex;align-items:baseline;gap:6px;background:#fff;border:1px solid var(--line);border-radius:10px;padding:6px 14px;color:inherit;text-decoration:none;transition:border-color .12s,box-shadow .12s}
.jlx .kpis>a:hover,.jlx .cs-kpis>a:hover{border-color:#1E88E5;box-shadow:0 2px 10px rgba(30,136,229,.14)}
.jlx .kpis>a:hover span,.jlx .cs-kpis>a:hover span{color:#1565c0}
.jlx .cs-kpis>a.on{border-color:#bcd7f7;background:#f3f8fe}
@media (max-width:1500px){.jlx .kpis>a{padding:10px 14px} .jlx .cs-kpis>a{padding:5px 11px}}
@media (max-width:1300px){.jlx .kpis>a{flex:1 1 30%}}
.jlx a.golist{color:inherit;text-decoration:none;cursor:pointer}
.jlx td a.golist .cnt{transition:box-shadow .12s}
.jlx td a.golist:hover .cnt{box-shadow:0 0 0 2px #1E88E5}
.jlx .cs-tb a.golist{color:#b45309;font-weight:650}
.jlx .cs-tb a.golist:hover{text-decoration:underline}
.jlx td.sj a{display:inline-block;font-size:12.5px;font-weight:650;border-radius:999px;padding:2px 8px;margin-right:4px;text-decoration:none}
.jlx td.sj a.sj-all{font-size:14px;font-weight:700;padding:2px 6px 2px 0;margin-right:6px;color:inherit}
.jlx td.sj a:hover{box-shadow:0 0 0 1.5px currentColor}
.jlx td.sj a.sj-all:hover{box-shadow:none;text-decoration:underline;color:#1565c0}
.jlx .jl-set,.jlx [data-csf],.jlx [data-csbt]{cursor:pointer}
.jlx td .jl-set:hover .chip,.jlx td span.jl-set.bt:hover,.jlx td .flag.jl-set:hover,.jlx .cs-chip[data-csf]:hover,.jlx .cs-bt[data-csbt]:hover{box-shadow:0 0 0 1.5px #1E88E5;border-radius:999px}
.jlx td .sv.jl-set:hover .nm2{text-decoration:underline;color:#1565c0}
.jlx a.jl-lnk{color:inherit;text-decoration:none}
.jlx a.jl-lnk:hover{color:#1565c0;text-decoration:underline}
.jlx .jl-xchip{display:inline-flex;align-items:center;gap:6px;height:32px;padding:0 10px 0 12px;border-radius:999px;border:1px solid #bcd7f7;background:#e9f2fd;color:#1565c0;font:inherit;font-size:13px;font-weight:650;cursor:pointer}
.jlx .jl-xchip b{font-size:15px;line-height:1}
.jlx .jl-xchip:hover{background:#dbeafc}
/*x*/.bt-map.has{background-color:#eef1f4;background-image:repeating-linear-gradient(0deg,transparent 0 63px,#e2e6ea 63px 64px),repeating-linear-gradient(90deg,transparent 0 63px,#e2e6ea 63px 64px)}
.bt-map img{color:transparent}
.bt-map.notiles::after{content:'Map preview unavailable';position:absolute;left:0;right:0;bottom:8px;text-align:center;font-size:12px;color:#667085}
.jlx .ch-part{background:linear-gradient(90deg,#e3f6ec,#e7f0fe);color:#0f5f8f}
.jlx .ch-part .pb{font-variant-numeric:tabular-nums;opacity:.85}

/* ===== v0.7.4 Dashboard home (mockup #dashboard) ===== */
.dbh .db-top{display:flex;align-items:center;gap:14px;flex:none}
.db-top .db-hi{display:flex;align-items:baseline;gap:14px;min-width:0}
.db-top h1{margin:0;font-size:23px;font-weight:750;letter-spacing:-.01em;white-space:nowrap}
.db-top #db-date{color:var(--ink2);font-weight:600;font-size:14px;white-space:nowrap}
.db-top .jl-add{margin-left:auto}
body.jm-home .main{padding:14px 24px 14px;max-width:none}
#db-root{display:flex;flex-direction:column;gap:14px;height:calc(100vh - 60px - 28px);min-height:560px;box-sizing:border-box}
.db-kpis{display:grid;grid-template-columns:repeat(5,minmax(0,1fr));gap:14px}
.db-k{text-decoration:none;color:inherit;box-sizing:border-box;cursor:pointer;background:#fff;border:1px solid var(--line);border-radius:14px;padding:12px 16px 11px;display:flex;flex-direction:column;gap:6px;min-width:0;transition:border-color .12s,box-shadow .12s,transform .12s}
.db-k:hover{border-color:#bcd6f2;box-shadow:0 6px 18px rgba(20,40,70,.07);transform:translateY(-1px)}
.db-kh{display:flex;align-items:center;gap:9px;font-size:13px;font-weight:700;color:var(--ink2);white-space:nowrap}
.db-kh .go{width:16px;height:16px;margin-left:auto;fill:none;stroke:#b3bcc6;stroke-width:2.4;stroke-linecap:round;stroke-linejoin:round}
.db-k:hover .go{stroke:var(--blue)}
.db-ki{width:26px;height:26px;border-radius:8px;display:grid;place-items:center;flex:none}
.db-ki svg{width:15px;height:15px;fill:none;stroke:currentColor;stroke-width:2.2;stroke-linecap:round;stroke-linejoin:round}
.db-ki.b{background:#e3f0fc;color:#1e88e5}.db-ki.t{background:#e0f4f6;color:#0d6b76}.db-ki.a{background:#fff3e0;color:#b45309}.db-ki.r{background:#fdecea;color:#c62828}.db-ki.g{background:#eef1f5;color:#4a5562}
.db-kv{display:flex;align-items:baseline;gap:8px;white-space:nowrap;min-width:0}
.db-kv b{font-size:28px;font-weight:780;letter-spacing:-.02em;line-height:1}
.db-kv em{font-style:normal;color:var(--ink2);font-size:13.5px;font-weight:600;overflow:hidden;text-overflow:ellipsis}
.db-kv em.red{color:#c62828}
.db-bar{display:flex;gap:3px;height:7px;border-radius:99px;overflow:hidden}
.db-bar i{display:block;border-radius:99px;min-width:4px}
.db-bar i.g{background:#2fb67c}.db-bar i.b{background:#1e88e5}.db-bar i.r{background:#e53935}.db-bar i.e{background:#e9edf2}.db-bar i.t{background:#14a3b5}.db-bar i.a{background:#f59e0b}
.db-ks{font-size:12.5px;color:var(--ink3);font-weight:600;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.db-ks .ok{color:#127046}
.db-tries{display:flex;gap:10px;height:7px;align-items:center;font-size:11.5px;font-weight:700;color:var(--ink2)}
.db-tries span{display:inline-flex;align-items:center;gap:3px}
.db-tries b{width:9px;height:9px;border-radius:50%;background:#e9edf2}.db-tries b.on{background:#f59e0b}.db-tries span.x b.on{background:#e53935}.db-tries span.x{color:#c62828}
.db-tries span+span{padding-left:2px}
.db-grid{display:grid;grid-template-columns:minmax(330px,25%) minmax(0,1fr) minmax(300px,23%);gap:14px;flex:1;min-height:0}
.db-card{background:#fff;border:1px solid var(--line);border-radius:14px;display:flex;flex-direction:column;min-height:0;overflow:hidden}
.db-ch{display:flex;align-items:center;gap:10px;padding:12px 16px;border-bottom:1px solid #eef1f4;flex:none;min-height:50px;box-sizing:border-box}
.db-ch h2{margin:0;font-size:15.5px;font-weight:750;white-space:nowrap}
.db-sub{color:var(--ink3);font-size:12.5px;font-weight:600;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.db-link{margin-left:auto;display:inline-flex;align-items:center;gap:2px;font-size:13px;font-weight:650;color:var(--blue);cursor:pointer;white-space:nowrap}
.db-link .go{width:15px;height:15px;fill:none;stroke:currentColor;stroke-width:2.4;stroke-linecap:round}
.db-scroll{overflow:auto;flex:1;min-height:0}
.db-sv{padding:2px 0 5px;border-bottom:1px solid #f1f3f6;transition:opacity .15s}
.db-sv.dim{opacity:.35}
.db-svh{display:flex;align-items:center;gap:10px;padding:7px 16px 3px}
.db-av{width:30px;height:30px;border-radius:50%;color:#fff;font-size:12px;font-weight:750;display:grid;place-items:center;flex:none}
.db-svn{display:flex;flex-direction:column;min-width:0}
.db-svn b{font-size:14px}
.db-svn span{font-size:12px;color:var(--ink2);font-weight:600;display:flex;align-items:center;gap:6px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.db-svn .live{width:7px;height:7px;border-radius:50%;flex:none;animation:dbp 1.8s infinite}
@keyframes dbp{0%{box-shadow:0 0 0 0 rgba(30,136,229,.45)}70%{box-shadow:0 0 0 6px rgba(30,136,229,0)}100%{box-shadow:0 0 0 0 rgba(30,136,229,0)}}
.db-svc{margin-left:auto;font-size:12px;font-weight:700;color:var(--ink2);background:#f1f4f7;border-radius:99px;padding:3px 9px;white-space:nowrap}
.db-v{display:flex;align-items:center;gap:10px;padding:4px 14px 4px 13px;cursor:pointer;border-left:3px solid transparent}
.db-v:hover{background:#f6f9fd;border-left-color:var(--blue)}
.db-t{width:40px;flex:none;font-size:13px;font-weight:700;color:var(--ink2);font-variant-numeric:tabular-nums}
.db-num{width:22px;height:22px;border-radius:50%;flex:none;display:grid;place-items:center;font-size:11.5px;font-weight:800;border:2px solid var(--c);color:var(--c);background:#fff;box-sizing:border-box}
.db-v.done .db-num{background:var(--c);color:#fff;opacity:.55}
.db-v.done .db-num svg{width:12px;height:12px;fill:none;stroke:#fff;stroke-width:3.2;stroke-linecap:round;stroke-linejoin:round}
.db-v.onsite .db-num{background:var(--c);color:#fff}
.db-v.noaccess .db-num{border-color:#e53935;color:#e53935}
.db-site{display:flex;flex-direction:column;min-width:0;flex:1}
.db-site b{font-size:13.5px;font-weight:650;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.db-site span{font-size:12px;color:var(--ink3);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.db-site em{font-style:normal;color:var(--ink2);font-weight:600}
.db-v.done .db-site b{color:var(--ink2)}
.db-st{flex:none;font-size:11.5px;font-weight:750;border-radius:99px;padding:3px 9px;white-space:nowrap}
.db-done{background:#e3f6ec;color:#127046}.db-on{background:#1e88e5;color:#fff}.db-next{background:#eef1f5;color:#4a5562}.db-late{background:#fff3e0;color:#b45309}.db-na{background:#fdecea;color:#c62828}
.db-mf{margin-left:auto;display:flex;gap:4px;background:#f1f4f7;border-radius:10px;padding:3px}
.db-mf button{all:unset;cursor:pointer;font-size:12.5px;font-weight:650;color:var(--ink2);padding:5px 11px;border-radius:8px;display:inline-flex;align-items:center;gap:6px;white-space:nowrap}
.db-mf button i{width:8px;height:8px;border-radius:50%}
.db-mf button.on{background:#fff;color:var(--ink);box-shadow:0 1px 3px rgba(0,0,0,.08)}
.db-mapw{position:relative;flex:1;min-height:0}
#db-leaf{position:absolute;inset:0;background:#eef2ea;font:inherit}
#db-leaf.fb{background:#eef2ea url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='600' height='400'%3E%3Cpath d='M0 260C150 230 260 300 400 250S560 220 600 230' stroke='%23cfe3f5' stroke-width='18' fill='none'/%3E%3Cg stroke='%23fff' stroke-width='8' fill='none'%3E%3Cpath d='M0 120L600 160M200 0L260 400M420 0L380 400M0 330L600 300'/%3E%3C/g%3E%3C/svg%3E") center/cover}
.db-fbm{position:absolute;left:50%;top:50%;transform:translate(-50%,-50%);color:var(--ink3);font-weight:650}
.db-legend{position:absolute;left:12px;bottom:12px;z-index:500;background:rgba(255,255,255,.95);border:1px solid var(--line);border-radius:10px;padding:7px 11px;display:flex;gap:12px;font-size:12px;font-weight:650;color:var(--ink2);box-shadow:0 2px 8px rgba(0,0,0,.06)}
.db-legend span{display:inline-flex;align-items:center;gap:6px;white-space:nowrap}
.db-legend .lg{width:12px;height:12px;border-radius:50%;box-sizing:border-box;display:inline-block}
.db-legend .lg.done{background:#7aa7d6}.db-legend .lg.on{background:#1e88e5;box-shadow:0 0 0 3px rgba(30,136,229,.25)}.db-legend .lg.nx{background:#fff;border:2px solid #1e88e5}.db-legend .lg.na{background:#fff;border:2px solid #e53935}.db-legend .lg.me{width:10px;height:10px;background:#1e88e5;border:2px solid #fff;box-shadow:0 0 0 2px #1e88e5}
.db-pin{width:27px;height:27px;border-radius:50%;box-sizing:border-box;display:grid;place-items:center;font:800 12.5px/1 Inter,system-ui,sans-serif;background:#fff;color:var(--c);border:3px solid var(--c);box-shadow:0 2px 6px rgba(0,0,0,.25);transition:transform .12s}
.db-pin.done{background:var(--c);color:#fff;opacity:.6;border-color:#fff}
.db-pin.onsite{background:var(--c);color:#fff;border-color:#fff;box-shadow:0 0 0 4px color-mix(in srgb,var(--c) 30%,transparent),0 2px 6px rgba(0,0,0,.25)}
.db-pin.noaccess{border-color:#e53935;color:#e53935}
.db-pin.late{border-color:#f59e0b;color:#b45309}
.db-pin.hl{transform:scale(1.35);opacity:1}
.db-me{width:22px;height:22px;border-radius:50%;background:var(--c);border:3px solid #fff;box-sizing:border-box;box-shadow:0 0 0 2px var(--c),0 2px 6px rgba(0,0,0,.3);position:relative}
.db-me::after{content:"";position:absolute;inset:-9px;border-radius:50%;background:var(--c);opacity:.2;animation:dbr 2s infinite}
.db-me span{display:none}
@keyframes dbr{0%{transform:scale(.5);opacity:.35}100%{transform:scale(1.4);opacity:0}}
.db-tip{font:600 12.5px/1.4 Inter,system-ui,sans-serif;border-radius:8px;padding:6px 9px}
.leaflet-container{font-family:inherit}
#db-leaf .leaflet-control-attribution{font-size:10px;background:rgba(255,255,255,.7)}
.db-legend{bottom:10px}
.db-rc{display:flex;flex-direction:column;gap:14px;min-height:0}
.db-wk{flex:none}
.db-tot{margin-left:auto;font-size:12.5px;color:var(--ink3);font-weight:600;white-space:nowrap}
.db-tot b{font-size:17px;color:var(--ink);font-weight:780}
.db-tot .up{color:#127046}
.db-bars{display:flex;align-items:flex-end;gap:10px;height:150px;padding:14px 18px 10px;box-sizing:border-box}
.db-bc{text-decoration:none;color:inherit;border-radius:8px;flex:1;height:100%;display:flex;flex-direction:column;justify-content:flex-end;align-items:center;gap:4px;min-width:0}
.db-bc i{display:block;width:100%;max-width:34px;background:#cfe2f6;border-radius:6px 6px 3px 3px;min-height:4px}
.db-bc.today i{background:var(--blue)}
.db-bc .v{font-size:12px;font-weight:750;color:var(--ink2)}
.db-bc .d{font-size:11.5px;font-weight:650;color:var(--ink3)}
.db-bc.today .d,.db-bc.today .v{color:var(--blue)}
.db-att{flex:1}
.db-cnt{font-size:12px;font-weight:800;background:#fdecea;color:#c62828;border-radius:99px;padding:2px 9px}
.db-a{display:flex;flex-direction:column;gap:7px;padding:11px 16px 11px 13px;border-bottom:1px solid #f1f3f6;border-left:3px solid transparent}
.db-a.red{border-left-color:#e53935}.db-a.amber{border-left-color:#f59e0b}.db-a.grey{border-left-color:#9aa4ae}
.db-at{display:flex;flex-direction:column;gap:2px;min-width:0}
.db-at b{font-size:13.5px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.db-at>span:last-child{font-size:12px;color:var(--ink3);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.db-tag{align-self:flex-start;font-size:11px;font-weight:800;text-transform:uppercase;letter-spacing:.04em;border-radius:6px;padding:2px 7px;margin-bottom:2px}
.db-tag.red{background:#fdecea;color:#c62828}.db-tag.amber{background:#fff3e0;color:#b45309}.db-tag.grey{background:#eef1f5;color:#4a5562}
.db-ab{display:flex;gap:6px}
.db-ab .btn.sm{height:28px;font-size:12.5px;padding:0 10px;border-radius:8px}
.btn.db-pri{background:var(--ink);color:#fff}.btn.db-pri:hover{background:#000}
@media (max-width:1500px){
 body.jm-home .main{padding:12px 18px 12px} #db-root{gap:11px;height:calc(100vh - 60px - 24px);min-height:520px}
 .db-kpis{gap:10px}.db-k{padding:11px 13px 10px;gap:6px}.db-kv b{font-size:24px}
 .db-grid{gap:12px;grid-template-columns:300px minmax(0,1fr) 280px;min-height:0}
 .db-legend{gap:9px;font-size:11.5px}.db-legend{padding:6px 9px}
 .db-bars{height:118px;padding:10px 14px 8px;gap:7px}
 .db-mf button{padding:5px 8px}
 .db-a{padding:9px 13px 9px 11px;gap:5px}
}
@media (max-width:1400px){ .db-site span{font-size:11.5px} .db-t{width:36px}  #db-root{gap:10px}  .db-top #db-date{font-size:13px} .db-top h1{font-size:21px} .db-sub{display:none} .db-tries{gap:6px;font-size:11px} }

.db-bc:hover{background:#f3f8fe}.db-bc:hover i{background:#90c2f0}.db-bc.today:hover i{background:#1565c0}
.db-ks .over{color:#c62828}
.db-tot .dn{color:#b45309}
.db-legend .lg.lt{background:#fff;border:2px solid #f59e0b}
.db-v.late .db-num{border-color:#f59e0b;color:#b45309}
.db-v.noaccess .db-site b{color:#c62828}
.db-a{cursor:pointer}.db-a:hover{background:#fafcff}
.db-empty{display:flex;flex-direction:column;align-items:center;justify-content:center;gap:6px;text-align:center;padding:34px 18px;color:var(--ink2);height:100%;box-sizing:border-box}
.db-empty svg{width:30px;height:30px;fill:none;stroke:#9aa4ae;stroke-width:1.8;stroke-linecap:round;stroke-linejoin:round;margin-bottom:4px}
.db-empty b{color:var(--ink);font-size:14.5px}.db-empty span{font-size:13px}
.db-empty .btn{margin-top:8px}
.db-empty.sm{padding:22px 14px}.db-empty.sm svg{stroke:#2fb67c}
.dbh .db-ch .db-link.golist{color:var(--blue)}
#db-leaf .leaflet-control-zoom a{text-decoration:none}
.db-legend{pointer-events:none}
@media (max-height:720px){ .db-k{padding:9px 13px 8px;gap:4px} .db-kv b{font-size:22px} .db-kh{font-size:12.5px} .db-ki{width:22px;height:22px} .db-ch{min-height:42px;padding:8px 14px} .db-bars{height:104px;padding:8px 12px 6px} .db-top h1{font-size:20px} .db-top .btn{height:34px} .db-a{padding:8px 12px 8px 10px;gap:5px} .db-ab .btn.sm{height:26px} }

/* v0.7.4: the sidebar never makes the page taller than the screen (scrolls inside on short screens) */
.side{overflow-y:auto;overflow-x:hidden;scrollbar-width:thin}
@media (max-height:800px){ .nav a{padding:7px 12px} .nav-lbl{margin-top:6px!important;padding-top:4px!important;padding-bottom:2px!important} .side-logo{padding:12px 18px 8px} .side-foot{padding:8px 14px} .side-note{margin-top:4px} }
@media (max-height:680px){ .nav a{padding:6px 12px} .side-foot .side-usage{display:none!important} }

/* ===== v0.7.5 Flats sub-jobs (mockup #flats) ===== */
.fl-top{gap:16px}
.fl-back{display:inline-flex;align-items:center;gap:2px;color:var(--ink2);font-weight:650;text-decoration:none;padding:7px 10px 7px 4px;border-radius:9px;flex:none}
.fl-back:hover{background:var(--bg);color:var(--ink)}
.fl-back svg{width:18px;height:18px;fill:none;stroke:currentColor;stroke-width:2.4;stroke-linecap:round;stroke-linejoin:round}
.fl-tt{display:flex;align-items:center;gap:12px;min-width:0}
.fl-tt h1{margin:0;font-size:23px;font-weight:750;white-space:nowrap}
.fl-ref{font-weight:750;font-size:13px;color:var(--ink2);background:#eef1f5;border-radius:7px;padding:3px 8px}
.fl-tr{margin-left:auto;display:flex;align-items:center;gap:16px}
.fl-tr .jl-add svg{width:17px;height:17px;fill:none;stroke:#fff;stroke-width:2.2;stroke-linecap:round;stroke-linejoin:round}
.fl-main{padding-top:14px}
.fl-sub{display:flex;align-items:center;gap:8px;flex-wrap:wrap;color:var(--ink2);font-weight:600;font-size:14px;margin-bottom:12px}
.fl-sub .bt,.fl-sub .acc{display:inline-flex;align-items:center;gap:6px;border-radius:999px;padding:3px 10px 3px 8px;font-size:12.5px;font-weight:700}
.fl-sub .bt{background:#e7f0fe;color:#1764c0}.fl-sub .acc{background:#f3ecfc;color:#6a35b0}
.fl-sub svg{width:15px;height:15px;fill:none;stroke:currentColor;stroke-width:2;stroke-linecap:round;stroke-linejoin:round}
.fl-stage{display:flex;align-items:center;gap:18px;margin-bottom:12px}
.stg{display:flex;flex:1;gap:4px;min-width:0}
.sg{flex:1;display:flex;flex-direction:column;gap:6px;min-width:0}
.sg i{display:block;height:6px;border-radius:99px;background:#e6eaef}
.sg.done i{background:#2fb67c}.sg.cur i{background:linear-gradient(90deg,#1e88e5 62%,#e6eaef 62%)}
.sg span{font-size:12px;font-weight:700;color:var(--ink3);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.sg.done span{color:#127046}.sg.cur span{color:var(--blue)}
.fl-note{flex:none;max-width:520px;display:flex;align-items:center;gap:9px;background:#f4f8fd;border:1px solid #d7e6f7;color:#24507e;border-radius:11px;padding:8px 12px;font-size:13px;font-weight:600}
.fl-note svg{width:18px;height:18px;flex:none;fill:none;stroke:#1e88e5;stroke-width:2.2;stroke-linecap:round}
.fl-det{display:flex;align-items:center;gap:0;background:#fff;border:1px solid var(--line);border-radius:14px;padding:10px 8px 10px 4px;margin-bottom:14px;overflow:hidden}
.fl-det .fd{display:flex;flex-direction:column;gap:2px;padding:0 16px;border-right:1px solid #eef1f4;min-width:0}
.fl-det .fd span{font-size:11.5px;font-weight:700;color:var(--ink3);text-transform:uppercase;letter-spacing:.04em;white-space:nowrap}
.fl-det .fd b{font-size:13.5px;font-weight:650;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.fl-det .fd:nth-last-child(2){border-right:0;flex:1}
.fl-edit{margin-left:auto;flex:none}
.fl-card{background:#fff;border:1px solid var(--line);border-radius:16px;padding:16px 18px 12px}
.fl-head{display:flex;align-items:center;gap:24px;margin-bottom:12px}
.fl-ttl{display:flex;align-items:center;gap:10px;flex:none}
.fl-ttl h2{margin:0;font-size:20px;font-weight:780}
.fl-sum{flex:1;display:flex;flex-direction:column;gap:7px;min-width:0;max-width:820px}
.fl-nums{display:flex;gap:18px;align-items:center;font-size:13.5px;color:var(--ink2);font-weight:600;white-space:nowrap}
.fl-nums b{color:var(--ink);font-size:16px;font-weight:780;margin-right:3px}
.fl-nums span{display:inline-flex;align-items:center;gap:5px}
.fl-nums .r b{color:#c62828}
.fl-nums .pc{margin-left:auto;font-weight:750;color:#127046}
.fl-nums .d{width:9px;height:9px;border-radius:50%}
.d.bk,.fl-bar .bk{background:#1e88e5}.d.tb,.fl-bar .tb{background:#f59e0b}.d.na,.fl-bar .na{background:#e53935}.fl-bar .dn{background:#2fb67c}
.fl-bar{display:flex;gap:2px;height:9px;border-radius:99px;overflow:hidden;background:#eef1f5}
.fl-bar i{display:block;height:100%}
.fl-add{margin-left:auto;height:40px;flex:none}
.fl-add svg{width:18px;height:18px;fill:none;stroke:#fff;stroke-width:2.6;stroke-linecap:round}
.fl-tools{display:flex;align-items:center;gap:12px;margin-bottom:10px}
.fl-tools .jl-tabs{margin:0}
.fl-tools .jl-tab{height:36px;padding:0 13px}
.fl-search{margin-left:auto;max-width:380px}
.fl-search input{height:36px}
.fl-tools .btn svg{width:16px;height:16px;fill:none;stroke:currentColor;stroke-width:2.2;stroke-linecap:round;stroke-linejoin:round}
#fl-bulk:empty{display:none}
.fb-bulk{display:flex;align-items:center;gap:8px;background:#16191d;color:#fff;border-radius:12px;padding:7px 8px 7px 16px;margin-bottom:10px}
.fb-bulk b{font-size:14px}.fb-bulk .sep{width:1px;height:20px;background:rgba(255,255,255,.2);margin:0 6px}
.fb-bulk .btn{background:rgba(255,255,255,.1);color:#fff;border:1px solid rgba(255,255,255,.14)}
.fb-bulk .btn:hover{background:rgba(255,255,255,.18)}
.fb-bulk .btn svg{width:15px;height:15px;fill:none;stroke:currentColor;stroke-width:2.2;stroke-linecap:round;stroke-linejoin:round}
.fb-clr{all:unset;cursor:pointer;margin-left:auto;color:#aeb7c2;font-weight:650;font-size:13px;padding:0 10px}
.fl-tblw{border-radius:12px}
.fl-tbl tbody td{height:50px}
.fl-tbl thead th{top:60px}
.ft-ten small{display:none;font-size:12px;color:var(--ink3);font-weight:500;max-width:200px;overflow:hidden;text-overflow:ellipsis}
.fl-tbl tbody tr{cursor:pointer}
.fl-tbl tr.sel td{background:#f2f8ff}
.ft-cb{width:34px}
.ft-cb input{width:16px;height:16px;accent-color:#1e88e5;cursor:pointer}
.ft-no b{font-weight:750;white-space:nowrap}
.ft-ten{font-weight:600;white-space:nowrap}
.ft-mob{white-space:nowrap;font-variant-numeric:tabular-nums}
.ft-em{color:var(--ink2);max-width:240px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.ft-tries{display:flex;align-items:center;gap:8px;font-size:12.5px;color:var(--ink2);white-space:nowrap}
.ft-tries .dots{display:inline-flex;gap:3px}
.ft-tries .dots b{width:9px;height:9px;border-radius:50%;background:#e6eaef}
.ft-tries .dots b.on{background:#f59e0b}.ft-tries .dots b.on.r{background:#e53935}
.fchip{display:inline-flex;align-items:center;gap:7px;height:26px;padding:0 10px;border-radius:999px;font-size:12.5px;font-weight:700;white-space:nowrap}
.fchip i{width:7px;height:7px;border-radius:50%;background:currentColor}
.fc-tc{background:#eef1f5;color:#4a5562}.fc-c{background:#fff3e0;color:#b45309}.fc-rdy{background:#e7f0fe;color:#1764c0}.fc-bk{background:#e3f0fc;color:#1565c0}.fc-na{background:#fdecea;color:#c62828}.fc-sv{background:#e0f4f6;color:#0d6b76}.fc-rep{background:#e3f6ec;color:#127046}
.ft-sv{white-space:nowrap;font-weight:600}
.ft-sv .av{display:inline-grid;place-items:center;width:24px;height:24px;border-radius:50%;color:#fff;font-size:10.5px;font-weight:750;margin-right:7px;vertical-align:middle}
.ft-act{text-align:right;white-space:nowrap;width:1%}
.ft-act .btn{margin-left:5px;height:30px;padding:0 10px;font-size:12.5px;border-radius:8px}
.ft-act .btn svg{width:15px;height:15px;fill:none;stroke:currentColor;stroke-width:2.2;stroke-linecap:round;stroke-linejoin:round}
.btn.fb-pri{background:var(--ink);color:#fff}.btn.fb-pri:hover{background:#000}
.fb-open{padding:0 6px!important}
.fl-tbl tr.at-red td:first-child{box-shadow:inset 3px 0 0 #e53935}
.fl-tbl tr.at-amber td:first-child{box-shadow:inset 3px 0 0 #f59e0b}
.ft-none{text-align:center;color:var(--ink3);padding:30px!important}
.fd-h{display:flex;align-items:flex-start;gap:12px;padding:18px 22px 14px;border-bottom:1px solid var(--line)}
.fd-h>div{flex:1;display:flex;flex-direction:column;gap:6px;align-items:flex-start}
.fd-h h3{margin:0;font-size:20px;font-weight:780}
.fd-k{font-size:11.5px;font-weight:750;text-transform:uppercase;letter-spacing:.05em;color:var(--ink3)}
.fd-x{all:unset;cursor:pointer;width:34px;height:34px;border-radius:9px;display:grid;place-items:center}
.fd-x:hover{background:var(--bg)}
.fd-x svg{width:20px;height:20px;fill:none;stroke:var(--ink2);stroke-width:2.2;stroke-linecap:round}
.fd-b{flex:1;overflow:auto;padding:6px 22px 22px}
.fd-sec{padding:14px 0;border-bottom:1px solid #f0f2f5}
.fd-sec h4{margin:0 0 10px;font-size:14px;font-weight:750;display:flex;gap:8px;align-items:baseline}
.fd-sec h4 .muted{font-size:12.5px;font-weight:600}
.fd-grid{display:grid;grid-template-columns:1fr 1fr;gap:10px 18px}
.fd-grid span{display:block;font-size:11.5px;font-weight:700;color:var(--ink3);text-transform:uppercase;letter-spacing:.04em}
.fd-grid b{font-weight:650;font-size:14px;word-break:break-word}
.fd-btns{display:flex;gap:8px;padding:14px 0 4px}
.fd-btns .btn svg{width:15px;height:15px;fill:none;stroke:currentColor;stroke-width:2.2;stroke-linecap:round;stroke-linejoin:round}
.fd-t{width:100%;border-collapse:collapse;font-size:13.5px}
.fd-t td{padding:7px 0;border-bottom:1px solid #f3f5f7}
.fd-t td.r{color:#c62828;font-weight:650}
.fd-log{display:grid;grid-template-columns:110px 60px 1fr;gap:8px;font-size:13.5px;padding:5px 0}
.fd-log span{color:var(--ink2)}.fd-log em{font-style:normal;color:var(--ink2)}
.fd-rep{display:flex;align-items:center;gap:10px;border:1px solid var(--line);border-radius:10px;padding:10px 12px;font-weight:600;font-size:13.5px}
.fd-rep svg{width:20px;height:20px;fill:none;stroke:#c62828;stroke-width:2}
.fd-rep .btn{margin-left:auto}
.fd-b textarea.note-in{width:100%;box-sizing:border-box;min-height:70px}
.fa-seg{display:flex;gap:4px;background:#f1f4f7;border-radius:11px;padding:4px;margin:16px 22px 4px}
.fa-seg button{all:unset;cursor:pointer;flex:1;text-align:center;padding:8px 10px;border-radius:8px;font-weight:650;font-size:13.5px;color:var(--ink2)}
.fa-seg button.on{background:#fff;color:var(--ink);box-shadow:0 1px 3px rgba(0,0,0,.08)}
.fa-g{display:grid;grid-template-columns:repeat(2,1fr);gap:12px 14px;padding:14px 22px 6px}
.fa-g.r{grid-template-columns:1.1fr .7fr .7fr 1.3fr .8fr}
.fa-g label span{display:block;font-size:12px;font-weight:700;color:var(--ink2);margin-bottom:5px}
.fa-g input{width:100%;box-sizing:border-box;height:40px;border:1px solid var(--line);border-radius:10px;padding:0 11px;font:inherit}
.fa-ta{display:block;width:calc(100% - 44px);margin:14px 22px 4px;box-sizing:border-box;height:120px;border:1px solid var(--line);border-radius:10px;padding:10px 12px;font:13px/1.6 ui-monospace,Menlo,Consolas,monospace;resize:vertical}
.fa-prev{margin:8px 22px 0;background:#f4f8fd;border-radius:10px;padding:10px 12px;font-size:13px;color:#24507e}
.fa-prev a{color:var(--blue);font-weight:650;cursor:pointer}
.fa-btns{display:flex;justify-content:flex-end;gap:10px;padding:16px 22px 18px}
@media (max-width:1500px){
 .fl-tbl .ft-em{display:none} .ft-ten small{display:block} .fl-tbl tbody td{height:54px}
 .ft-act .btn span{display:none} .ft-act .btn{padding:0 8px}
 .fl-det .fd:nth-child(n+6):not(:nth-last-child(2)){display:none}
 .fl-note{max-width:380px;font-size:12.5px}
 .ft-em{max-width:170px}
 .fl-head{gap:18px}
}
@media (max-width:1400px){
 .fl-det .fd:nth-child(5){display:none}
 .fl-nums{gap:12px;font-size:13px}.fl-nums .pc{display:none}
 .fl-search{max-width:260px}
 .fl-tbl td,.fl-tbl th{padding-left:10px;padding-right:10px}
 .ft-em{max-width:150px}
}

.fl-wrap{margin:14px 0 16px}
.main:has(.fl-wrap){max-width:1500px}
.fl-card .jl-card{overflow:visible}
.fl-nums .dr{color:var(--ink3);font-weight:600}
.fl-nums .d.dn{background:#2fb67c}
.fc-os{background:#1e88e5;color:#fff}.fc-cl{background:#f1f3f5;color:#6b7480}
.fl-tbl tr.fl-closed td{color:var(--ink3)}.fl-tbl tr.fl-closed .ft-no b{text-decoration:line-through;text-decoration-color:#b8c0c8}
.fl-split{margin:0 0 10px}
.ft-act a.btn{display:inline-flex;align-items:center;gap:6px;text-decoration:none}
.fl-tbl .ft-act .btn svg{width:15px;height:15px}
/* drawer = a window docked to the right; closes only via ×, Esc (Cancel inside) */
.jm-modal.fd-modal{justify-content:flex-end;align-items:stretch;padding:0}
.jm-dlg.fdr{width:min(540px,94vw)!important;max-width:94vw!important;height:100vh;max-height:100vh!important;border-radius:0!important;padding:0!important;display:flex;flex-direction:column;animation:fdin .16s ease-out;box-shadow:-12px 0 40px rgba(16,24,40,.18)}
@keyframes fdin{from{transform:translateX(30px);opacity:.6}}
#fd-wrap{display:flex;flex-direction:column;height:100%;min-height:0}
.fd-g{display:grid;grid-template-columns:1fr 1fr;gap:10px 14px}
.fd-g .fd-wide{grid-column:span 2}
.fd-g input,.fd-g textarea{width:100%;box-sizing:border-box}
.fd-form .opt,.fa-g .opt,.jm-f .opt{font-weight:500;color:var(--ink3);font-size:12px}
.fd-hint{font-style:normal;font-weight:500;font-size:12px;color:var(--ink3)}
.fd-save{display:grid;grid-template-columns:1fr 1fr;gap:8px;margin-top:12px;position:sticky;bottom:0;background:#fff;padding:8px 0;z-index:2} /* 0.10.3: always shown, equal-width */
.fd-save .btn{width:100%;min-height:40px;justify-content:center;margin:0}
.fd-save .btn[disabled]{opacity:.45;cursor:default}
.fd-save .btn.fd-saved{background:#127046;border-color:#127046;color:#fff}
.fd-modal.fd-dirty .fd-save{background:#fffdf5}
.fd-modal.fd-dirty .fd-form{background:#fffdf5;border-radius:10px;box-shadow:0 0 0 8px #fffdf5}
input.bad{border-color:#e53935!important;box-shadow:0 0 0 3px rgba(229,57,53,.12)}
.fd-btns{flex-wrap:wrap}
.fd-t td.g{color:#127046;font-weight:650}.fd-t td.b{color:#1565c0;font-weight:650}
/* add flats window */
.jm-dlg .fa-seg{margin:0;display:flex}
.jm-dlg .fa-g{padding:0}
.jm-dlg .fa-g label.jm-f input{height:40px}
.jm-dlg .fa-ta{width:100%;margin:6px 0 0}
.jm-dlg .fa-prev{margin:0}
.fa-prev .amb{color:#b45309;font-weight:650}
.fa-bad{margin-top:6px;color:#c62828;font-weight:650;display:flex;gap:6px;align-items:center}.fa-bad svg{width:15px;height:15px;fill:none;stroke:currentColor;stroke-width:2.2}
.fa-time{margin-top:4px;color:var(--ink2)}
.fa-up{cursor:pointer}
.fl-nums2{background:#f6f8fb;border-radius:10px;padding:10px 12px;font-size:13.5px}
.fl-numl{display:flex;flex-wrap:wrap;gap:4px 14px;margin:6px 0;color:var(--ink2);max-height:110px;overflow:auto}
.fl-numb{display:flex;gap:8px;margin-top:6px}.fl-numb a.btn{text-decoration:none}
@media (max-width:1400px){ .jm-dlg .fa-g.r{grid-template-columns:1fr .6fr .6fr 1fr .7fr} }
.jm-f i.opt{font-style:normal;font-weight:500;color:var(--ink3);font-size:12px;margin-left:4px}

/* v0.7.5: filter strip on client Sites tab and site Jobs tab (stays in Clients & sites) */
.jlx .jf-seg{display:flex;align-items:center;gap:6px;flex-wrap:wrap;margin:0 0 10px}
.jlx .jf-s{display:inline-flex;align-items:center;gap:6px;height:32px;padding:0 12px;border-radius:999px;border:1px solid var(--line);background:#fff;color:var(--ink2);font-weight:650;font-size:13px;text-decoration:none}
.jlx .jf-s .n{font-size:12px;color:var(--ink3)}
.jlx .jf-s:hover{border-color:#bcd7f7;color:#1565c0}
.jlx .jf-s.on{background:#16191d;border-color:#16191d;color:#fff}.jlx .jf-s.on .n{color:#cfd5dc}
.jlx .jf-seg .jl-xchip{margin-left:6px;text-decoration:none}
.main:has(.jp-crumbwrap){max-width:1500px}
.jp-crumbwrap{margin-bottom:6px}

/* ===== v0.7.6 back buttons + flat rows ===== */
.jm-back.pg-back{display:inline-flex;align-items:center;gap:6px;height:34px;padding:0 14px 0 10px;margin:0 0 10px 0;border:1px solid #d7dde6;background:#fff;border-radius:999px;color:#1f2937;font-weight:650;font-size:13.5px;text-decoration:none;box-shadow:0 1px 2px rgba(16,24,40,.05);white-space:nowrap;flex:none}
.jm-back.pg-back:hover{background:#f2f6fb;border-color:#c3ccd8;color:#111827}
.jm-back.pg-back svg{width:17px;height:17px}
.crumbs-row{display:flex;align-items:center;gap:14px;flex-wrap:wrap}
.crumbs-row .pg-back{margin:0}
.fl-tbl tbody tr[data-flat]:hover td{background:#f5f9ff}
.fl-tbl tbody tr.sel[data-flat]:hover td{background:#e9f3ff}
.jm-vtbl tbody tr{cursor:pointer}
.jm-vtbl tbody tr:hover td{background:#f5f9ff}
.fp-min{margin-left:2px}
.jp-smc{display:flex;align-items:center;gap:6px;flex-wrap:wrap;margin:0 0 10px;font-size:14px}
.jp-smc svg{width:15px;height:15px;fill:none;stroke:#f59e0b;stroke-width:2}
.jlx .acc.jl-set{cursor:pointer}
.bk-tline{display:flex;gap:10px;align-items:flex-start;background:#f3f8ff;border:1px solid #d6e6fb;border-radius:12px;padding:10px 14px;margin:4px 0 12px}
.bk-tline svg{width:18px;height:18px;flex:none;margin-top:2px;fill:none;stroke:#1e6fd9;stroke-width:2;stroke-linecap:round;stroke-linejoin:round}
.bk-tline b{display:block;font-size:14.5px;color:#0f2a4d}
.bk-tline span{display:block;font-size:12.5px;color:#5b6b80;margin-top:2px}
/* v0.7.7: access column always shows its short label (Client arranges / Site contact / Tenanted flats) */
.jlx .acc .lb2{display:inline!important}
@media (max-width:1500px){.jlx .acc{gap:5px;font-size:12.5px}.jlx .acc i{width:22px;height:22px}}
/* ===== v0.7.8 flats status ===== */
.fbar{display:flex!important;gap:0!important;column-gap:0!important;flex-direction:row!important;flex-wrap:nowrap!important;align-items:stretch!important;height:8px;border-radius:99px;overflow:hidden;background:#eef1f5;width:56px;flex:none;padding:0;margin:0}
.fbar>i{display:block!important;height:100%!important;flex:none!important;border-radius:0!important;margin:0!important;padding:0!important;min-width:0!important;position:static!important}
.fbar>i.dn{background:#2fb67c!important}.fbar>i.bk{background:#1e88e5!important}.fbar>i.tb{background:#c9d3df!important}.fbar>i.na{background:#e53935!important}
.fbar.lg{width:100%;height:12px;margin:8px 0 4px}
.fmini{display:inline-flex;align-items:center;gap:7px;white-space:nowrap}
.fmini .fm-t{display:flex;flex-direction:column;line-height:1.15}
.fmini b{font-size:13px;font-weight:700;color:#1f2937}
.fmini .n{font-size:11.5px;color:#6b7280}
.fmini.fs-pb b{color:#b45309}.fmini.fs-ab b{color:#1565c0}.fmini.fs-sv b{color:#0d8a96}.fmini.fs-is b{color:#16191d}.fmini.fs-cx b{color:#98a2b3}
.flt{flex:1;min-width:0}
.flt-h{display:flex;align-items:center;gap:14px;flex-wrap:wrap;font-size:14px;color:#4b5563}
.flt-h b{color:#111827;font-size:15px}
.flt-h .r{color:#d32f2f;font-weight:650}
.fs-chip{display:inline-flex;align-items:center;height:26px;padding:0 11px;border-radius:99px;font-weight:700;font-size:12.5px;background:#eef1f5;color:#374151}
.fs-chip.fs-pb{background:#fff4e0;color:#b45309}.fs-chip.fs-ab{background:#e3f0fc;color:#1565c0}.fs-chip.fs-sv{background:#e0f5f6;color:#0d8a96}.fs-chip.fs-is{background:#e8eaed;color:#16191d}
.flt-ask{display:inline-flex;align-items:center;gap:6px;margin-top:4px;border:0;background:#fff4e0;color:#9a5b00;border-radius:8px;padding:5px 10px;font-weight:650;font-size:13px;cursor:pointer}
.flt-ask:hover{background:#ffe9c2}
.flt-ask svg{width:15px;height:15px;fill:none;stroke:currentColor;stroke-width:2}
.fl-asktag{vertical-align:middle}
@media (max-width:1500px){.jlx .fmini .fbar{width:40px}.jlx .fmini b{font-size:12.5px}.jlx .c-act{width:auto}.jlx .jl-tbl .acc .lb2{max-width:96px;white-space:normal;line-height:1.15}}
@media (max-width:1500px){.jlx .act{padding:0 10px;font-size:12.5px}.jlx td.c-act{padding-right:12px!important}.jlx .jl-tbl tbody td.c-client{max-width:150px}}
@media (max-width:1500px){.jlx .jl-tbl tbody td,.jlx .jl-tbl thead th{padding-left:8px;padding-right:8px}}
@media (max-width:1400px){.jlx .jl-tbl tbody td.c-client{max-width:118px}.jlx .jl-tbl tbody td.c-client .cl{white-space:normal;line-height:1.2}.jlx .jl-tbl .c-bt .bt{white-space:normal;line-height:1.2}.jlx .jl-tbl td.c-ref,.jlx .jl-tbl th.c-ref{width:auto}}

/* v0.7.8.3: dashboard flats mini bar + Snag 37 site picker hint / Complete site details */
.db-a .db-fm{display:flex;align-items:center;gap:8px;margin-top:4px}.db-a .db-fm .fbar{width:84px;height:6px}.db-a .db-fm em{font-style:normal;font-size:11.5px;color:#6b7280;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.jm-acg.hint{color:#b45309;background:#fff7ed}
.sd-need{display:flex;align-items:center;gap:6px;flex-wrap:wrap;margin:0 0 6px;padding:6px 10px;border-radius:8px;background:#fff7ed;border:1px solid #fcd9a8;color:#92400e;font-size:12.5px}
.sd-need svg{width:15px;height:15px;flex:none;stroke:#d97706}.sd-need .flink{color:#b45309;font-weight:700;text-decoration:underline}.sd-need span{color:#92400e}

/* v0.7.9 History card (audit trail) */
.h-card{margin-top:16px}.h-card .h-head{display:flex;align-items:center;gap:14px;flex-wrap:wrap;margin-bottom:8px}.h-card .h-head h3{margin:0}
.h-filt{display:flex;gap:6px;flex-wrap:wrap}.h-filt button{border:1px solid #d7dde5;background:#fff;border-radius:99px;padding:4px 11px;font:inherit;font-size:12.5px;color:#475467;cursor:pointer}
.h-filt button.on{background:#14284b;border-color:#14284b;color:#fff}
.h-list{max-height:560px;overflow:auto}.h-list li.h-status>i{background:#1e88e5}.h-list li.h-booking>i{background:#2fb67c}.h-list li.h-flats>i{background:#8e6ad8}.h-list li.h-contact>i{background:#f59e0b}.h-list li.h-details>i{background:#98a2b3}
.h-off{display:flex;gap:10px;align-items:flex-start;padding:12px 14px;border-radius:10px;background:#f6f8fb;border:1px dashed #cfd6e0}.h-off svg{width:18px;height:18px;flex:none;margin-top:1px}
.h-off b{display:block;font-size:14px}.h-off span{display:block;color:#667085;font-size:12.5px;margin-top:2px}.h-fb{margin-top:12px}.h-note{margin-top:8px}

/* v0.8.0 snag 39/40: field-status colours on the schedule + key; busy month days scroll */
.jm-skey{display:flex;flex-wrap:wrap;gap:6px 16px;align-items:center;padding:2px 2px 10px;font-size:12.5px;color:var(--ink2,#475467)}
.jm-skey span{display:inline-flex;align-items:center;gap:6px;white-space:nowrap} .jm-skey i{width:12px;height:12px;border-radius:3px;display:inline-block;border-left:3px solid}
.jm-skey .fs-bk i{background:#e8f2fd;border-color:#1e88e5} .jm-skey .fs-ow i{background:#f3e8fb;border-color:#8e44ad} .jm-skey .fs-os i{background:#fff3dc;border-color:#f59e0b}
.jm-skey .fs-dn i{background:#e3f6ec;border-color:#2fb67c} .jm-skey .fs-na i{background:#fdecec;border-color:#e53935} .jm-skey .fs-cx i{background:#f1f3f6;border-color:#98a2b3}
.jm-blk.fs-bk{background:#e8f2fd;border-left-color:#1e88e5;color:#0f3a6b} .jm-blk.fs-ow{background:#f3e8fb;border-left-color:#8e44ad;color:#4a1764}
.jm-blk.fs-os{background:#fff3dc;border-left-color:#f59e0b;color:#6b3f00} .jm-blk.fs-dn{background:#e3f6ec;border-left-color:#2fb67c;color:#0d4a2f}
.jm-blk.fs-na{background:#fdecec;border-left-color:#e53935;color:#7a1414} .jm-blk.fs-cx{background:#f1f3f6;border-left-color:#98a2b3;color:#667085;text-decoration:line-through}
.jm-blk.fs-dn span,.jm-blk.fs-cx span{color:inherit;opacity:.85}
.jm-mlist{margin-top:2px} .jm-mlist.scroll{max-height:66px;overflow-y:auto;overscroll-behavior:contain;scrollbar-width:thin;scrollbar-color:#c3ccd8 transparent;padding-right:2px}
.jm-mlist.scroll::-webkit-scrollbar{width:5px} .jm-mlist.scroll::-webkit-scrollbar-thumb{background:#c3ccd8;border-radius:3px}
.jm-mi{border-left:3px solid transparent;line-height:18px;height:20px;box-sizing:border-box} a.jm-mi:hover{filter:brightness(.97)}
.jm-mi.fs-bk{background:#e8f2fd;border-left-color:#1e88e5;color:#0f3a6b} .jm-mi.fs-ow{background:#f3e8fb;border-left-color:#8e44ad;color:#4a1764}
.jm-mi.fs-os{background:#fff3dc;border-left-color:#f59e0b;color:#6b3f00} .jm-mi.fs-dn{background:#e3f6ec;border-left-color:#2fb67c;color:#0d4a2f}
.jm-mi.fs-na{background:#fdecec;border-left-color:#e53935;color:#7a1414} .jm-mi.fs-cx{background:#f1f3f6;border-left-color:#98a2b3;color:#667085;text-decoration:line-through}
.jm-mc .n{display:flex;align-items:center;gap:6px} .jm-mn{font-size:10.5px;font-weight:700;background:#eef2f6;color:#475467;border-radius:8px;padding:0 6px;line-height:16px}

/* v0.8 snag 45: Paused (teal) */
.jm-skey .fs-pz i{background:#ccfbf1;border-color:#0d9488}
.jm-blk.fs-pz{background:#ccfbf1;border-left-color:#0d9488;color:#134e4a} .jm-mi.fs-pz{background:#ccfbf1;border-left-color:#0d9488;color:#134e4a}
.fc-pz{background:#0d9488;color:#fff}

/* v0.8 snag 40: "+N more" in a busy month cell (no scrolling list); rows share the height instead of growing with a busy day */
.jm-mg{grid-auto-rows:minmax(0,1fr);min-height:0} .jm-month{min-height:0}
.jm-mlist .jm-mi[hidden]{display:none} .jm-mmore{display:block;width:100%;text-align:left;border:0;background:none;padding:0 5px;font:inherit;font-size:11.5px;font-weight:700;color:var(--blue,#1e88e5);line-height:18px;height:20px;cursor:pointer;border-radius:5px} .jm-mmore:hover{background:#e7f0fe} .jm-mmore[hidden]{display:none}

/* v0.8 phone width: the dashboard is built for a computer, but on a phone the page itself never scrolls sideways; wide tables scroll inside their card */
@media (max-width:700px){
 .db-grid{grid-template-columns:1fr !important} #db-root{height:auto;min-height:0} .db-legend{flex-wrap:wrap;right:12px} .db-rc{min-width:0}
 .jlx .jl-card,.card{max-width:100%;box-sizing:border-box;overflow-x:auto} .card.setcard{min-width:0}
 .jlx .jl-tbl,table.tbl{display:block;overflow-x:auto;max-width:100%}
 .jlx .jl-top{flex-wrap:wrap;gap:10px} .jlx .cs-seg{display:flex;flex-wrap:wrap} .frow2>*{min-width:0;max-width:100%}
 .setcard .set-h{flex-wrap:wrap;gap:12px}
 .db-kpis{grid-template-columns:repeat(2,minmax(0,1fr))} .db-kh{flex-wrap:wrap}
}

/* v0.8 snag 45: paused chips (teal, same as the Schedule key) */
.jm-vst.pz{background:#ccfbf1;color:#0f766e} .db-pz{background:#0d9488;color:#fff}

/* v0.8.1 snag 54: the day/week grid scrolls inside itself (the day header row stays), visits that overlap sit side by side, a 5-minute visit is still a readable card */
.jm-grid-t{overflow-x:hidden;overflow-y:auto;align-items:flex-start;overscroll-behavior:contain;scrollbar-width:thin;scrollbar-color:#c3ccd8 transparent}
.jm-grid-t::-webkit-scrollbar{width:8px} .jm-grid-t::-webkit-scrollbar-thumb{background:#c3ccd8;border-radius:4px}
.jm-grid-t>.jm-gutter,.jm-grid-t>.jm-cols{min-height:100%}
.jm-grid-t .jm-cb{flex:1 0 auto}
.jm-grid-t .jm-ch{position:sticky;top:0;z-index:6;background:#fff} .jm-grid-t .jm-gutter .jm-hl:first-child span{top:1px}
.jm-blk{min-height:22px;box-sizing:border-box}
.jm-blk.nar{padding:3px 5px;font-size:11px}
button.jm-blk.jm-bmore{border:0;border-left:3px solid #98a2b3;background:#eef2f6;color:var(--blue,#1e88e5);font:inherit;font-size:12px;font-weight:750;text-align:left;cursor:pointer;padding:3px 7px;white-space:nowrap;z-index:1}
button.jm-blk.jm-bmore:hover{background:#e7f0fe}
/* v0.8.1 snag 53: "+N more" list over the month */
.jm-mpop{position:fixed;z-index:110;width:340px;max-width:calc(100vw - 16px);max-height:min(460px,calc(100vh - 16px));display:flex;flex-direction:column;background:#fff;border:1px solid var(--line);border-radius:12px;box-shadow:0 14px 40px rgba(16,24,40,.24);outline:none;overflow:hidden}
.jm-ph{display:flex;align-items:flex-start;gap:8px;padding:10px 10px 8px 14px;border-bottom:1px solid var(--line);flex:none}
.jm-ph>div{flex:1;min-width:0} .jm-ph b{display:block;font-size:15px;color:var(--ink)} .jm-ph span{font-size:12px;color:var(--ink2)}
.jm-px{flex:none;width:30px;height:30px;border:0;background:none;border-radius:8px;cursor:pointer;color:var(--ink2);display:inline-flex;align-items:center;justify-content:center} .jm-px:hover{background:#f1f3f6;color:var(--ink)} .jm-px svg{width:16px;height:16px}
.jm-pl{flex:1 1 auto;min-height:0;overflow-y:auto;overscroll-behavior:contain;padding:6px;scrollbar-width:thin;scrollbar-color:#c3ccd8 transparent}
a.jm-pi{display:flex;align-items:center;gap:9px;padding:6px 8px;margin-bottom:3px;border-radius:7px;border-left:3px solid transparent;text-decoration:none;color:inherit;background:#e8f2fd}
a.jm-pi:hover{filter:brightness(.96)} a.jm-pi:last-child{margin-bottom:0}
.jm-pi .t{flex:none;width:42px;font-size:12px;font-weight:750;line-height:1.2} .jm-pi .t i{display:block;font-style:normal;font-weight:500;opacity:.75}
.jm-pi .m{flex:1;min-width:0} .jm-pi .m b{display:block;font-size:12.5px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis} .jm-pi .m span{display:block;font-size:11.5px;opacity:.8;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.jm-pi em{flex:none;font-style:normal;font-size:10.5px;font-weight:700;opacity:.85}
.jm-pi.fs-bk{background:#e8f2fd;border-left-color:#1e88e5;color:#0f3a6b} .jm-pi.fs-ow{background:#f3e8fb;border-left-color:#8e44ad;color:#4a1764}
.jm-pi.fs-os{background:#fff3dc;border-left-color:#f59e0b;color:#6b3f00} .jm-pi.fs-pz{background:#ccfbf1;border-left-color:#0d9488;color:#134e4a}
.jm-pi.fs-dn{background:#e3f6ec;border-left-color:#2fb67c;color:#0d4a2f} .jm-pi.fs-na{background:#fdecec;border-left-color:#e53935;color:#7a1414}
.jm-pi.fs-cx{background:#f1f3f6;border-left-color:#98a2b3;color:#667085} .jm-pi.fs-cx .m b{text-decoration:line-through}
.jm-pf{flex:none;border-top:1px solid var(--line);padding:6px 10px;text-align:right} .jm-pday{border:0;background:none;font:inherit;font-size:12px;font-weight:700;color:var(--blue,#1e88e5);cursor:pointer;padding:4px 6px;border-radius:6px} .jm-pday:hover{background:#e7f0fe}

/* v0.8.2: loose (similar address) report matches in Link a report */
#jm-link option.jm-loose{color:#64748b}

/* v0.8.4: grouped flats run lists its flats inside the block, each chip outlined in its status colour */
.jm-blk .jm-bfl{display:flex;flex-wrap:wrap;align-items:center;gap:3px;margin-top:3px;white-space:normal;overflow:hidden;color:inherit}
.jm-blk .jm-bfl .bfl-l{display:inline;font-weight:650;opacity:.85;margin-right:2px;color:inherit;white-space:nowrap}
.jm-blk .jm-bfl .fp{font-style:normal;font-weight:750;font-size:11px;line-height:15px;padding:0 5px;border-radius:5px;background:#fff;border:1px solid #1e88e5;color:#0f3a6b;white-space:nowrap}
.jm-blk .jm-bfl .fp.fs-ow{border-color:#8e44ad;color:#4a1764} .jm-blk .jm-bfl .fp.fs-os{border-color:#f59e0b;color:#6b3f00} .jm-blk .jm-bfl .fp.fs-pz{border-color:#0d9488;color:#134e4a}
.jm-blk .jm-bfl .fp.fs-dn{border-color:#2fb67c;color:#0d4a2f} .jm-blk .jm-bfl .fp.fs-na{border-color:#e53935;background:#fdecec;color:#b71c1c} .jm-blk .jm-bfl .fp.fs-cx{border-color:#98a2b3;color:#667085;text-decoration:line-through}
.jm-blk .jm-bfl .fp.more{border-color:transparent;background:rgba(255,255,255,.6)}
.jm-blk .jm-bcl{margin-top:2px}
.jm-blk .jm-bfx{font-weight:650}
.jm-blk.nar .jm-bfl .fp{font-size:10.5px;padding:0 4px}
/* v0.8.4: Jobs list "Date added" column */
.jlx .jl-tbl td.c-added,.jlx .jl-tbl th.c-added{white-space:nowrap}
.jlx .c-added .ad{font-weight:600;color:var(--ink2);font-variant-numeric:tabular-nums}

/* v0.8.4: no sideways scroll on #/jm at 1280–1600 with the extra column: compact layout and tighter cells up to 1600, Building type hidden below 1320 */
@media (max-width:1600px){.jlx .jl-top{padding:0 26px;gap:14px}
.jlx .jl-main{padding:20px 26px 50px}
.jlx .jl-tbl tbody td,.jlx .jl-tbl thead th{padding:0 10px}
.jlx .jl-tbl tbody td:first-child,.jlx .jl-tbl thead th:first-child{padding-left:18px}
.jlx .acc .lb2{display:none}
.jlx .c-act{width:120px}
.jlx .sv .nm2{display:none}
.jlx .jl-attn{display:none}
.jlx .jl-tbl th.c-added{white-space:normal;line-height:1.2;width:64px}}
@media (max-width:1600px){.jlx .jl-tbl tbody td,.jlx .jl-tbl thead th{padding:0 8px}
.jlx .jl-tbl tbody td:first-child,.jlx .jl-tbl thead th:first-child{padding-left:16px}
.jlx td.c-act{width:auto;padding-right:12px!important}
.jlx td.c-act .chev{display:none}
.jlx .c-client .cl{white-space:normal}
.jlx .c-ref .ref{display:inline-block;max-width:100px;overflow:hidden;text-overflow:ellipsis;vertical-align:middle}
.jlx .c-site .st,.jlx .c-client .cl{overflow-wrap:anywhere;min-width:9.5ch}
.jlx .c-client .cl{display:inline-block}
.jlx .jl-tbl thead th.c-bt,.jlx .jl-tbl thead th.c-acc{white-space:normal;line-height:1.2}
.jlx .c-bt .bt{white-space:normal}}
@media (max-width:1320px){.jlx .c-bt{display:none}}

/* v0.8.5: "Booked" header/values now read "Scheduled" / "Not scheduled" (longer words). Keep #/jm free of sideways scroll at 1280–1600: in the compact layout the Scheduled header loses its letter-spacing and the arrow hugs it, and "Not scheduled" may wrap onto two lines. */
@media (max-width:1600px){.jlx .jl-tbl thead th.c-when{letter-spacing:0}
.jlx .jl-tbl thead th.c-when .ar{margin-left:2px}
.jlx .jl-tbl td.c-when .muted{display:inline-block;white-space:normal;max-width:9ch;line-height:1.2}}
@media (min-width:1601px){.jlx .c-site .st,.jlx .c-client .cl{overflow-wrap:anywhere}
.jlx .c-client .cl{white-space:normal;display:inline-block;min-width:9.5ch}
.jlx .c-ref .ref{display:inline-block;max-width:140px;overflow:hidden;text-overflow:ellipsis;vertical-align:middle}
.jlx .jl-tbl td.c-when .muted{display:inline-block;white-space:normal;max-width:9ch;line-height:1.2}}

/* v0.9.3 (David 21 Oct 11:58): calm Status + Scheduled columns. One pill shape for every status (24px, left aligned);
   extras (flats progress, part scheduled, tries) are a small muted line under the pill; Scheduled = date with the time
   small under it, or one muted "Not scheduled" line that never wraps. Scoped to .stc / td.c-when so other chips are untouched. */
.jlx .stc{display:inline-flex;flex-direction:column;align-items:flex-start;gap:5px;vertical-align:middle;max-width:100%}
.jlx .stc .chip{height:24px;padding:0 10px 0 9px;gap:6px;font-size:12px;font-weight:650;line-height:1;letter-spacing:.005em;border-radius:999px}
.jlx .stc .chip .d{width:6px;height:6px;flex:none}
.jlx .stc .chip.ch-issued{background:#e9ebf0;color:#262b33}
.jlx .stc .chip.ch-issued .d{background:#262b33}
.jlx .stc .st2{display:inline-flex;align-items:center;gap:6px;padding-left:3px;font-size:11.5px;font-weight:500;line-height:1.15;color:#7c8794;white-space:nowrap;font-variant-numeric:tabular-nums}
.jlx .stc .st2 .fbar{width:30px;height:4px;flex:none}
.jlx .stc .st2 .tries{margin:0;gap:3px}
.jlx .stc .st2 .tries b{width:5px;height:5px}
.jlx .jl-tbl td.c-when{white-space:nowrap}
.jlx td.c-when .w1{font-size:13px;font-weight:600;color:var(--ink,#16191d);line-height:1.2;white-space:nowrap;font-variant-numeric:tabular-nums}
.jlx td.c-when .w2{font-size:11.5px;font-weight:500;color:#7c8794;margin-top:3px;line-height:1.15;font-variant-numeric:tabular-nums}
.jlx td.c-when .wn{display:inline-block;white-space:nowrap;font-size:12.5px;font-weight:500;color:var(--ink3,#929ca7);line-height:1.2}
@media (max-width:1600px){.jlx .stc .st2 .fw{display:none}
.jlx td.c-when .wn{font-size:12px}}

/* v0.9.3 (David 21 Oct 12:04): "No site contact: use the client's main contact" in the New/Edit site window */
.bt-tg.sd-nosc{margin:0}
.bt-tg.sd-nosc.on{border-color:#b9d6f6;background:#f5f9ff}
.bt-tg.sd-nosc .bt-tgl input:checked+.bt-sw{background:var(--blue,#1E88E5)}
.sd-cwrap{display:flex;flex-direction:column;gap:inherit;transition:opacity .15s}
.sd-cwrap.off{opacity:.42;filter:grayscale(1);pointer-events:none;user-select:none}
.sd-cwrap.off input{background:#f3f5f8}
.jlx .mainb.cl{color:#1e5fa8;background:#e8f1fc}
.jlx .mainb.cl svg{fill:#5b9be0;stroke:#5b9be0}
.jlx .sc-viacl{display:flex;gap:10px;align-items:flex-start;border:1px solid #cfe2f8;background:#f5f9ff;border-radius:12px;padding:12px 14px;margin:0 0 14px;font-size:14px}
.jlx .sc-viacl svg{width:16px;height:16px;flex:none;margin-top:2px;fill:#5b9be0;stroke:#5b9be0;stroke-width:1.5}
.jlx .sc-viacl b{display:block;color:var(--ink)}
.jlx .sc-viacl span{display:block;color:var(--ink2);margin-top:2px}

/* v0.9.3: postcode mismatch question when linking a similar-address report */
.jm-dlg.pc-dlg{max-width:440px}
.pc-dlg .pc-hd{display:flex;align-items:flex-start;justify-content:space-between;gap:12px}
.pc-dlg .pc-hd h2{margin:0}
.pc-dlg .pc-opts{display:flex;flex-direction:column;gap:8px;margin-top:14px}
.pc-dlg .pc-opts .btn{width:100%;justify-content:center;height:auto;min-height:42px;padding:9px 14px;white-space:normal;text-align:center}
.pc-dlg .pc-opts .btn span{font-weight:500;opacity:.8;margin-left:4px}

/* v0.9.3b (David 21 Oct 12:57: "the Doors column is too close to the status column… change column name to Door Count").
   Header reads "Door Count"; the count is centred under it and Status gets extra left padding, so there is a clear gap
   (≥24px) between the number and the status pill at every width. In the compact layout (≤1600px) the header may stack
   onto two lines ("Door / Count") so the column stays narrow and the table still fits with no sideways scroll. */
.jlx .jl-tbl thead th.c-doors,.jlx .jl-tbl tbody td.c-doors{text-align:center}
.jlx .jl-tbl thead th.c-doors .ar{margin-left:3px}
.jlx .jl-tbl thead th.c-status,.jlx .jl-tbl tbody td.c-status{padding-left:22px}
@media (max-width:1600px){.jlx .jl-tbl thead th.c-doors{white-space:normal;line-height:1.2;letter-spacing:.02em}
.jlx .jl-tbl thead th.c-status,.jlx .jl-tbl tbody td.c-status{padding-left:18px}}

/* v0.9.3c (David 21 Oct 13:08: "something still does not look right with the status column").
   1) Every status pill is one fixed width (sized to the longest label) with its label centred, so the column reads as a straight
      stack of identical pills, left edge at the same x as the STATUS header.
   2) The pill is always vertically centred in the row, level with Door Count / Scheduled / Date added. The optional small line
      (flats progress, tries) hangs directly under the pill in a zero-height grid row, so it never pushes the pill up.
   3) "New" gets its own calm indigo; Unscheduled (flats) stays grey. Scheduled green, Completed teal, Cancelled unchanged. */
.jlx .stc{display:inline-grid;grid-template-rows:24px 0;row-gap:0;justify-items:start;vertical-align:middle;gap:0}
.jlx .stc .chip{width:var(--stw,118px);min-width:var(--stw,118px);justify-content:center;box-sizing:border-box;padding:0 8px}
.jlx .stc .st2{align-self:start;margin-top:4px;padding-left:2px}
.jlx .stc .chip.ch-new{background:#eef0fd;color:#4338ca}
.jlx .stc .chip.ch-new .d{background:#6366f1}
.jlx .stc .chip.ch-uns{background:#eef1f5;color:#4a5562}
.jlx .stc .chip.ch-uns .d{background:#8a94a3}
@media (max-width:1600px){.jlx .stc .chip{width:var(--stw,108px);min-width:var(--stw,108px);padding:0 6px;gap:5px}}

/* v0.9.4 TEST (David 21 Oct): one set of job statuses everywhere. Colours: New indigo, Unscheduled grey, Scheduled green,
   In progress blue, Awaiting QC sign-off teal (was Completed), QC Approved purple, Report Sent slate (was Report issued), Cancelled light grey. */
.chip.ustc{display:inline-flex;align-items:center;gap:6px;height:22px;padding:0 9px;border-radius:999px;font-size:12px;font-weight:650;line-height:1;white-space:nowrap;vertical-align:middle;letter-spacing:.005em}
.chip.ustc.sm{height:19px;padding:0 7px;font-size:11px;gap:5px}
.chip.ustc .d{width:6px;height:6px;border-radius:50%;flex:none;background:currentColor}
.ch-new.ustc,.jlx .stc .chip.ch-new{background:#eef0fd;color:#4338ca}.ch-new.ustc .d,.jlx .stc .chip.ch-new .d{background:#6366f1}
.ch-uns.ustc,.jlx .stc .chip.ch-uns{background:#eef1f5;color:#4a5562}.ch-uns.ustc .d,.jlx .stc .chip.ch-uns .d{background:#8a94a3}
.ch-booked.ustc,.jlx .stc .chip.ch-booked{background:#e3f6ec;color:#127046}.ch-booked.ustc .d,.jlx .stc .chip.ch-booked .d{background:#2fb67c}
.ch-prog.ustc,.jlx .stc .chip.ch-prog{background:#e7f0fe;color:#1764c0}.ch-prog.ustc .d,.jlx .stc .chip.ch-prog .d{background:#1E88E5}
.ch-surveyed.ustc,.jlx .stc .chip.ch-surveyed{background:#e0f4f6;color:#0d6b76}.ch-surveyed.ustc .d,.jlx .stc .chip.ch-surveyed .d{background:#0d8a96}
.ch-qc.ustc,.jlx .stc .chip.ch-qc{background:#f3e8ff;color:#6b21a8}.ch-qc.ustc .d,.jlx .stc .chip.ch-qc .d{background:#9333ea}
.ch-issued.ustc,.jlx .stc .chip.ch-issued{background:#e9ebf0;color:#262b33}.ch-issued.ustc .d,.jlx .stc .chip.ch-issued .d{background:#262b33}
.ch-cx.ustc{background:#f1f3f6;color:#6b7480}.ch-cx.ustc .d{background:#98a2b3}
.jlx .stc .chip{--stw:154px}
@media (max-width:1600px){.jlx .stc .chip{--stw:146px}}
.u-tag{display:inline-flex;align-items:center;height:16px;padding:0 6px;margin-left:4px;border-radius:5px;background:#fff4e0;color:#a15c00;font-size:10.5px;font-weight:700;letter-spacing:.01em;white-space:nowrap;vertical-align:middle}
.jlx .stc .st2 .u-tag{margin-left:0}
.u-hsub{font-size:12px;color:var(--ink3,#7c8794);font-weight:500;white-space:nowrap}
.u-steps .jm-step span{white-space:normal;overflow:visible;line-height:1.2}
.u-steps .jm-step .u-sub{display:block;font-style:normal;font-weight:500;font-size:11px;color:var(--ink3,#7c8794);margin-top:2px;line-height:1.2}
.u-steps .jm-step.on i{background:linear-gradient(90deg,#2ee6b0,#2a8ff0)}
@media (max-width:760px){.u-steps{gap:3px;position:relative;padding-bottom:36px}.u-steps .jm-step:not(.on)>span,.u-steps .jm-step:not(.on)>.u-sub{display:none}
  .u-steps .jm-step.on>span{position:absolute;left:0;right:0;top:12px;text-align:left;font-size:13px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
  .u-steps .jm-step.on>.u-sub{position:absolute;left:0;right:0;top:30px;text-align:left;font-size:11.5px}
  .u-steps.is-cx .jm-step.cx>span{position:absolute;left:0;right:0;top:12px;text-align:left;display:block}}
.u-steps + .flt{margin-top:10px}

/* v0.9.4: phone, flats card no longer pushes the page sideways (was already so in 0.9.3d): the counts wrap, the table scrolls inside the card */
@media (max-width:760px){.fl-wrap,.fl-card{max-width:100%;min-width:0}.fl-card{overflow-x:auto}.fl-head,.fl-sum,.fl-nums{flex-wrap:wrap;row-gap:4px}.fl-nums span{white-space:nowrap}}

/* v0.9.7 TEST: Close visit */
.cv-btn{display:inline-flex;align-items:center;gap:5px;white-space:nowrap;background:#eff6ff;color:#1d4ed8;border:1px solid #bfdbfe;font-weight:650}
.cv-btn svg{width:14px;height:14px;fill:none;stroke:currentColor;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;flex:none}
.cv-btn:hover{background:#dbeafe}
.cv-btn.cv-quiet,.cv-btn.cv-edit{background:transparent;color:var(--ink2,#475467);border-color:var(--line,#e4e7ec);font-weight:600}
.db-cv{display:flex;gap:6px;flex:none}
.db-cvb.btn.sm{height:28px;font-size:12.5px;padding:0 9px;border-radius:8px}
.cv-who{margin:0 0 12px;display:flex;flex-direction:column;gap:2px}
.cv-who b{font-size:14.5px}
.cv-who span{font-size:12.5px;color:var(--ink3,#667085)}
.cv-body input[type=date],.cv-body input[type=time]{min-height:44px;font-size:16px}
.cv-sum{margin:10px 0 2px;font-size:13.5px}
.cv-err{display:block;min-height:1em;margin:2px 0 6px}
.cv-modal .jm-dfoot .btn{min-height:44px}
@media (max-width:560px){
  .db-v.onsite{flex-wrap:wrap}
  .db-v.onsite .db-cv{flex-basis:100%;justify-content:flex-end;padding:0 0 4px}
  .db-cvb.btn.sm{height:36px;padding:0 12px}
  .cv-body .jm-row2{grid-template-columns:1fr 1fr}
}

/* v0.9.9 TEST (22 Oct): City field + address search above the address on the site and client windows; record links on the job and site */
.bt-g3a{display:grid;grid-template-columns:minmax(0,2fr) minmax(0,1.1fr) minmax(0,1fr);gap:10px 12px}
@media (max-width:760px){.bt-g3a{grid-template-columns:minmax(0,1fr) minmax(0,1fr)}.bt-g3a .bt-a{grid-column:1/-1}}
.bt-fsearch{margin:2px 0 10px;min-width:0}
.bt-fsearch:empty{display:none}
.bt-fsearch .pp-manual{display:none}
.bt-fsearch .bt-nosearch{margin:0}
.sd-clink{margin:-4px 0 8px;min-height:0}
.sd-clink:empty{display:none}
a.xlink{color:#1565D8;font-weight:600;text-decoration:underline;text-decoration-thickness:1px;text-underline-offset:3px;cursor:pointer;overflow-wrap:anywhere}
a.xlink:hover{color:#0d4fb0;text-decoration-thickness:2px}
a.xlink i{font-style:normal;margin-left:4px;text-decoration:none;display:inline-block}
.jp-open{display:inline-flex;align-items:center;margin-top:6px;font-size:13.5px;padding:4px 0;min-height:32px}
.hero-cl{gap:8px;align-items:center}
.hero-cl a.xlink{font-size:15px}
@media (max-width:760px){.jlx .mapbox{max-width:100%;overflow:hidden}.jlx .pg-tabs{overflow-x:auto;max-width:100%;scrollbar-width:none}.jlx .crumbs{flex-wrap:wrap;min-width:0}.jlx .hero,.jlx .hero-t{min-width:0;max-width:100%}.jlx .hero-r{flex-wrap:wrap}}
@media (max-width:760px){.jlx .crumbs-row{flex-wrap:wrap;max-width:100%;min-width:0}.jlx .crumbs-row .crumbs{flex:1 1 100%;max-width:100%;overflow:hidden}.jlx .crumbs b,.jlx .crumbs a{min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}}

/* v0.9.9t3 (David 22 Oct 14:57): client/site links as soft brand-blue pill buttons with icons, matching the Dash's pills and Back button. Display only. */
a.xpill{display:inline-flex;align-items:center;gap:7px;height:34px;max-width:100%;padding:0 10px 0 11px;border-radius:999px;background:var(--bluebg);border:1px solid #cfe2f8;color:#1565D8;font-weight:650;font-size:13.5px;line-height:1;text-decoration:none;white-space:nowrap;cursor:pointer;-webkit-tap-highlight-color:transparent;transition:background-color .12s,border-color .12s,box-shadow .12s,transform .08s;vertical-align:middle}
a.xpill span{overflow:hidden;text-overflow:ellipsis;min-width:0}
a.xpill:hover{background:#d6e8fb;border-color:#b5d3f5;color:#0d4fb0}
a.xpill:active{background:#c3dcf8;border-color:#9fc5f1;transform:scale(.97)}
a.xpill:focus-visible{outline:3px solid rgba(31,127,224,.4);outline-offset:2px}
a.xpill svg{flex:none;fill:none;stroke:currentColor;stroke-linecap:round;stroke-linejoin:round}
a.xpill svg.xi{width:16px;height:16px;stroke-width:2}
a.xpill svg.xc{width:14px;height:14px;stroke-width:2.4;margin-left:-2px;opacity:.75}
.jp-open.xpill{margin-top:10px;font-size:13.5px;padding:0 10px 0 11px;min-height:0}
.sd-clink a.xpill{margin-top:2px}
.jlx .hero-ct a.xpill{display:inline-flex;gap:7px;color:#1565D8;font-size:14px;margin-left:2px}
.jlx .hero-ct a.xpill:hover{color:#0d4fb0}
.jlx .hero-ct a.xpill svg{color:inherit}
.jlx .hero-ct a.xpill svg.xi{width:16px;height:16px}
.jlx .hero-ct a.xpill svg.xc{width:14px;height:14px}
.hero-cl{gap:8px!important}
/* heading links: no underline; a weight/colour change and a small chevron */
a.hlink{display:inline-flex;align-items:center;gap:1px;color:var(--ink);font-weight:600;text-decoration:none;border-radius:8px;padding:3px 4px;margin:-3px -2px;cursor:pointer;-webkit-tap-highlight-color:transparent;transition:background-color .12s,color .12s;overflow-wrap:anywhere}
a.hlink svg.xc{width:14px;height:14px;flex:none;fill:none;stroke:var(--blue);stroke-width:2.4;stroke-linecap:round;stroke-linejoin:round;opacity:.85}
a.hlink:hover{color:#1565D8;background:var(--bluebg)}
a.hlink:active{background:#c3dcf8}
@media (max-width:640px){
 a.xpill{height:40px;padding:0 12px 0 13px;font-size:14px}
 a.hlink{padding:9px 4px;margin:-9px -2px}
}

/* v0.9.11 TEST (David 22 Oct 16:19): back to the 0.9.4 address layout. Address (wide) + Postcode on one row as before; City under the Address; client: a one-line address search beside City; site: search back above the map */
.bt-adr{grid-template-areas:"a p" "c s"}
.bt-adr .ad-a{grid-area:a}.bt-adr .ad-p{grid-area:p}.bt-adr .ad-c{grid-area:c}.bt-adr .ad-s{grid-area:s;min-width:0}
.bt-adr .ad-s .bt-fsearch{margin:0}
.bt-adr .ad-s .pp-manual{display:none!important}
.bt-adr .ad-s input.pp-in{height:42px;border:1px solid var(--line);border-radius:10px;font:inherit;font-size:14px}
.bt-adr .ad-s .bt-nosearch{padding:0 10px;height:42px;font-size:12.5px;white-space:nowrap;overflow:hidden}
@media (max-width:760px){.bt-adr{grid-template-areas:"a" "c" "p" "s"}}
.sd-sec{display:flex;align-items:baseline;gap:10px}
.sd-sec .sd-clink{margin:0 0 0 auto;min-height:0}
a.sd-clk{display:inline-flex;align-items:center;gap:2px;font-size:13px;font-weight:650;color:#1565D8;text-decoration:none;text-transform:none;letter-spacing:0;border-radius:6px;padding:2px 4px}
a.sd-clk:hover{background:var(--bluebg);color:#0d4fb0}
a.sd-clk svg.xc{width:13px;height:13px;flex:none;fill:none;stroke:currentColor;stroke-width:2.4;stroke-linecap:round;stroke-linejoin:round}

/* 0.10.1-test (QA 26 Oct): Jobs list was 35-75 px too wide on a 1366 laptop (sideways scroll). Under 1440 px: hide "Date added" (still sortable on bigger screens) and let Status wrap. Applies to live at go-live too. */
@media (max-width:1440px){ .jlx .jl-tbl .c-added{display:none} .jlx .jl-tbl td.c-status{max-width:190px;white-space:normal} .jlx .jl-tbl td.c-status .fmini{flex-wrap:wrap} .jlx .jl-tbl thead th{letter-spacing:.02em} }
@media (max-width:1300px) and (min-width:861px){ .jlx .jl-tbl .c-bt{display:none} }

/* ===== 0.11.0 (Thu 29 Oct): Jobs list filters = one equal-width grid of dropdowns (David 27 Oct 16:34; UI style rule 26 Oct 19:46) ===== */
.jlx .jl-filters.jl-fgrid{display:grid;grid-template-columns:repeat(6,minmax(0,1fr)) auto;gap:8px;align-items:stretch;flex-wrap:nowrap;margin-bottom:10px}
.jlx .jl-fgrid .jl-f{display:flex;flex-direction:column;align-items:stretch;justify-content:center;height:auto;min-height:50px;min-width:0;width:100%;padding:5px 10px 4px;border-radius:10px;box-sizing:border-box;gap:1px;cursor:pointer}
.jlx .jl-fgrid .jl-f>span{font-size:11px;line-height:1.2;font-weight:700;letter-spacing:.02em;text-transform:uppercase;color:var(--ink3);margin:0;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.jlx .jl-fgrid .jl-f select{width:100%;min-width:0;height:24px;padding:0 18px 0 0;font-size:13.5px;font-weight:600;color:var(--ink);background-position:right 2px center;text-overflow:ellipsis;cursor:pointer}
.jlx .jl-fgrid .jl-f.set select{color:#1764c0}
.jlx .jl-fgrid .jl-fcl{cursor:text}
.jlx .jl-fgrid .jl-fcl .jm-ac{position:relative;flex:none;min-width:0}
.jlx .jl-fgrid .jl-fcl .jm-ac>svg{left:0;width:13px;height:13px}
.jlx .jl-fgrid .jl-fcl .jm-ac input{width:100%;height:24px;border:0;background:transparent;padding:0 24px 0 18px;font:inherit;font-size:13.5px;font-weight:600;color:var(--ink);box-sizing:border-box;text-overflow:ellipsis}
.jlx .jl-fgrid .jl-fcl .jm-ac input::placeholder{color:var(--ink);font-weight:600;opacity:1}
.jlx .jl-fgrid .jl-fcl .jm-ac input:focus{outline:none}
.jlx .jl-fgrid .jl-fcl.set .jm-ac input{color:#1764c0}
.jlx .jl-fgrid .jl-fcl .jm-acx{right:-6px;width:26px;height:26px;font-size:18px}
.jlx .jl-fgrid .jl-fcl:focus-within{border-color:var(--blue);box-shadow:0 0 0 3px rgba(30,136,229,.15)}
.jlx .jl-fgrid .jl-fcl .jm-acl{left:-11px;right:-11px;top:calc(100% + 10px);min-width:240px}
.jlx .jl-fgrid .jl-clear{height:auto;min-height:50px;padding:0 14px;border:1px solid var(--line);border-radius:10px;background:#fff;white-space:nowrap}
.jlx .jl-fgrid .jl-clear:disabled{color:var(--ink3);opacity:.6;cursor:default}
.jlx .jl-xrow{display:flex;align-items:center;gap:8px;flex-wrap:wrap;margin-bottom:12px}
.jlx .jl-xrow:not(:has(.jl-xchip)):not(:has(#jl-attn span)){display:none}
.jlx .jl-xrow .jl-attn{margin-left:auto}
@media (max-width:1180px){.jlx .jl-filters.jl-fgrid{grid-template-columns:repeat(3,minmax(0,1fr))}.jlx .jl-fgrid .jl-clear{grid-column:1/-1;min-height:40px}}
@media (max-width:700px){.jlx .jl-filters.jl-fgrid{grid-template-columns:repeat(2,minmax(0,1fr))}.jlx .jl-fgrid .jl-fcl .jm-acl{min-width:0}}
/* 0.11.0: Book now / Book the rest in the Scheduled column, one fixed size on every row */
.jlx .jl-tbl td.c-when .jl-book{display:inline-flex;align-items:center;justify-content:center;width:112px;height:32px;padding:0 8px;font-size:13px;white-space:nowrap;opacity:1;transform:none;visibility:visible}
.jlx .jl-tbl td.c-when .jl-booksub{margin-top:4px;white-space:nowrap}

/* 0.11.0 (UI style rule audit, Dash): chip groups that wrapped into ragged rows are equal-width grids now */
.fl-tools{flex-wrap:wrap}
.fl-tools .jl-tabs.fl-tabs{display:grid;grid-template-columns:repeat(5,minmax(0,1fr));gap:8px;flex:1 1 560px;min-width:0;flex-wrap:nowrap}
.fl-tools .fl-tabs .jl-tab{min-width:0;width:100%;justify-content:center;padding:0 8px;white-space:nowrap;overflow:hidden}
.jlx .cs-seg{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:6px}
.jlx .cs-seg>*{min-width:0;justify-content:center}
.jlx .jf-seg{display:grid;grid-template-columns:repeat(auto-fill,minmax(150px,1fr));gap:6px}
.jlx .jf-seg>*{min-width:0;justify-content:center;margin-left:0}
@media (max-width:700px){
 .fl-tools .jl-tabs.fl-tabs{grid-template-columns:repeat(3,minmax(0,1fr));flex-basis:100%}
 .fl-tools .fl-tabs .jl-tab{padding:0 4px;gap:5px;font-size:13px}
 .jlx .cs-seg{display:grid;grid-template-columns:repeat(2,minmax(0,1fr))}
 .jlx .jf-seg{grid-template-columns:repeat(2,minmax(0,1fr))}
}

@media (max-width:1100px){.jlx .kpis{display:grid;grid-template-columns:repeat(3,minmax(0,1fr))}.jlx .kpis>*{min-width:0}}
@media (max-width:700px){.jlx .kpis{grid-template-columns:repeat(2,minmax(0,1fr))}.fl-tools>.btn{flex:1 1 0;justify-content:center;min-width:0}}

@media (max-width:700px){
 .fl-tools .jl-tabs.fl-tabs{grid-template-columns:repeat(auto-fill,minmax(96px,1fr))}
 .fl-tools .fl-tabs .jl-tab{height:auto;min-height:36px;white-space:normal;line-height:1.15;padding:4px 6px;text-align:center;overflow:visible;flex-wrap:wrap;gap:3px 5px}
}

/* 0.11.0: flat panel — Access with keys + required tenant names */
.fd-keys{display:flex;align-items:flex-start;gap:10px;padding:10px 12px;border:1px solid var(--line);border-radius:10px;background:#f8fafc;cursor:pointer}
.fd-keys input{width:20px!important;height:20px;margin:1px 0 0;flex:none;accent-color:var(--blue)}
.fd-keys span{display:flex;flex-direction:column;gap:2px;line-height:1.25}
.fd-keys small{color:var(--ink3);font-size:12.5px}
.fd-g.fd-keyson .fd-keys{background:var(--bluebg,#e8f2fd);border-color:#b7d6f5}
.fd-g.fd-keyson .fd-tf{opacity:.45}
.fd-g .fd-tf input:disabled{background:#f1f3f5;cursor:not-allowed}
.fd-reqw{display:block;font-style:normal;font-size:13px;font-weight:600;color:#b3261e;background:#fdecea;border-radius:8px;padding:8px 10px;line-height:1.3}
.fd-reqw[hidden]{display:none}
.fd-g .jm-f input.bad{border-color:var(--fail,#e53935)!important;box-shadow:0 0 0 3px rgba(229,57,53,.10)!important}
.fl-keys{white-space:nowrap;margin-right:4px}
@media (max-width:560px){.fd-g{grid-template-columns:1fr}.fd-g .fd-wide{grid-column:auto}}
/* 0.11.0: Number of flats + the flat names grid (equal-width) */
.nf-row{display:grid;grid-template-columns:minmax(0,220px) minmax(0,1fr);gap:10px 16px;align-items:end;margin-top:12px}
.nf-row .jm-f{margin:0}
.nf-row .jm-f input{width:100%;box-sizing:border-box}
.nf-help{padding-bottom:10px}
.nf-list{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:8px;margin-top:10px}
.nf-list:empty{display:none}
.nf-i{display:flex;align-items:center;gap:6px;min-width:0;border:1px solid var(--line);border-radius:10px;background:#fff;padding:0 4px 0 10px;height:40px;box-sizing:border-box}
.nf-i span{font-size:12px;font-weight:700;color:var(--ink3);min-width:18px}
.nf-i input{flex:1;min-width:0;border:0!important;box-shadow:none!important;height:36px;padding:0 4px;font:inherit;background:transparent}
.nf-i:focus-within{border-color:var(--blue);box-shadow:0 0 0 3px rgba(30,136,229,.15)}
#jp-nfw{display:block;margin-top:6px}
@media (max-width:900px){.nf-list{grid-template-columns:repeat(3,minmax(0,1fr))}}
@media (max-width:640px){.nf-row{grid-template-columns:1fr}.nf-help{padding-bottom:0}.nf-list{grid-template-columns:repeat(2,minmax(0,1fr))}}

/* 0.12.1 contact log redesign (David 29 Oct 15:25-15:32) */
.cl-head{display:flex;align-items:center;justify-content:space-between;gap:10px;flex-wrap:wrap;margin-bottom:12px}
.cl-head h3,.cl-head h4{margin:0}
.cl-count{font-size:12px;font-weight:750;color:#1565c0;background:var(--bluebg);padding:3px 10px;border-radius:999px;white-space:nowrap}
.cl-who{display:flex;align-items:center;gap:12px;flex-wrap:wrap;background:#f7f9fb;border:1px solid var(--line);border-radius:12px;padding:10px 12px;margin:0 0 12px}
.cl-av{flex:0 0 auto;width:40px;height:40px;border-radius:50%;background:var(--bluebg);color:#1565c0;font-weight:800;font-size:14px;display:flex;align-items:center;justify-content:center;letter-spacing:.3px}
.cl-wn{flex:1 1 0;min-width:0;display:flex;flex-direction:column;line-height:1.25}
.cl-wn b{font-size:15px;display:flex;align-items:center;gap:5px;overflow-wrap:anywhere}
.cl-wn small{color:var(--ink2);font-size:12.5px;margin-top:2px;overflow-wrap:anywhere}
.cl-star svg{width:15px;height:15px;fill:#f59e0b;stroke:#f59e0b;stroke-width:1.5;display:block}
.cl-wb{display:flex;gap:8px;flex:0 0 auto;flex-wrap:wrap}
.cl-cbtn{background:#fff;border:1px solid #cfd8e3;color:var(--ink)}
.cl-cbtn:hover{border-color:var(--blue);color:var(--blue)}
.cl-log{list-style:none;margin:0 0 12px;padding:0;border:1px solid var(--line);border-radius:12px;overflow:hidden}
.cl-log li{display:flex;gap:11px;align-items:flex-start;padding:10px 12px;border-top:1px solid var(--line);background:#fff}
.cl-log li:first-child{border-top:0}
.cl-ic{flex:0 0 auto;width:32px;height:32px;border-radius:9px;display:flex;align-items:center;justify-content:center;background:#eef1f5;color:#4a5562}
.cl-ic svg{width:16px;height:16px;fill:none;stroke:currentColor;stroke-width:2;stroke-linecap:round;stroke-linejoin:round}
.cl-ic.cl-call{background:#e3f0fc;color:#1565c0} .cl-ic.cl-email{background:#efe9fb;color:#5b3fb5} .cl-ic.cl-text{background:#e3f6ec;color:#127046} .cl-ic.cl-letter{background:#fff3dc;color:#8a5a00}
.cl-row{flex:1;min-width:0}
.cl-top{display:flex;align-items:center;gap:6px;flex-wrap:wrap;font-size:14px}
.cl-when{margin-left:auto;color:var(--ink3);font-size:12.5px;white-space:nowrap}
.cl-note{color:var(--ink2);font-size:13.5px;margin-top:3px;overflow-wrap:anywhere}
.cl-tag{display:inline-block;font-size:11.5px;font-weight:750;padding:2px 8px;border-radius:6px;background:#eef1f5;color:#4a5562;white-space:nowrap}
.cl-tag.ok{background:#e3f6ec;color:#127046} .cl-tag.na{background:#fde7e6;color:#c62828} .cl-tag.warn{background:#fff3dc;color:#8a5a00} .cl-tag.sent{background:#e3f0fc;color:#1565c0}
.cl-acts{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));grid-auto-rows:1fr;gap:8px;align-items:stretch}
.cl-acts .btn svg{flex:0 0 auto}
.cl-acts .btn{width:100%;height:100%;min-width:0;min-height:42px;box-sizing:border-box;margin:0;white-space:normal;text-align:center;padding:8px 14px;font-size:14px;line-height:1.25;border-radius:10px;border-width:1px} /* 0.12.1l2 (David 29 Oct 18:20): green Access confirmed button exactly the same size as Log Contact Attempt (equal columns, equal rows) */
.cl-acts .btn:only-child{grid-column:1/-1;width:auto;justify-self:start}
.cl-ready{background:#2e7d32;color:#fff;border-color:#2e7d32} .cl-ready:hover{background:#27692b}
.cl-none{margin:0 0 12px}
.cl-res{margin:12px 0 2px}
.cl-res[hidden]{display:none}
.cl-resl{display:block;font-size:13px;font-weight:650;color:var(--ink2);margin-bottom:6px} .cl-resl i{font-style:normal;font-weight:500;color:var(--ink3)}
.cl-resb{display:flex;gap:8px;flex-wrap:wrap}
.cl-resb button{padding:7px 14px;border-radius:999px;border:1px solid #cfd8e3;background:#fff;font-weight:650;font-size:13.5px;color:var(--ink2)}
.cl-resb button.on{background:var(--blue);border-color:var(--blue);color:#fff}
@media (max-width:520px){ .cl-acts{grid-template-columns:minmax(0,1fr)} .cl-acts .btn:only-child{width:100%} .cl-wb{flex:1 1 100%} .cl-wb .btn{flex:1} }
.cl-who .cl-av+.cl-wn{flex-basis:0}
