:root{--navy:#073b5c;--blue:#0b78e3;--green:#61b535;--bg:#f4f8fb;--line:#dbe7ef;--text:#102a43;--muted:#657b8c}*{box-sizing:border-box}body{margin:0;font-family:-apple-system,BlinkMacSystemFont,"Segoe UI",Arial,sans-serif;background:var(--bg);color:var(--text)}button,input,select,textarea{font:inherit}.login{min-height:100vh;display:grid;place-items:center;padding:24px;background:linear-gradient(135deg,#073b5c,#0b78e3)}.login-card{width:min(430px,100%);background:#fff;border-radius:22px;padding:30px;box-shadow:0 24px 70px #001b2b55}.login-logo{display:flex;align-items:center;gap:14px;margin-bottom:25px}.login-logo img{width:70px;height:70px;object-fit:contain}.login-logo b{font-size:26px;color:var(--navy)}.field{display:block;font-size:13px;color:var(--muted);margin:13px 0}.field input,.field select,.field textarea{width:100%;padding:13px;border:1px solid #cbdbe6;border-radius:10px;margin-top:6px;background:white}.hint{font-size:12px;color:var(--muted);margin-top:14px}.shell{display:flex;min-height:100vh}.side{width:240px;background:var(--navy);color:#fff;padding:18px 14px;position:fixed;inset:0 auto 0 0;z-index:10}.brand{display:flex;align-items:center;gap:10px;font-size:20px;margin-bottom:22px}.brand img{width:46px;height:46px;object-fit:contain}.brand b{color:#7bc442}.nav button{width:100%;border:0;background:transparent;color:#dceaf5;padding:12px;text-align:left;border-radius:9px;margin:2px 0;cursor:pointer}.nav button.active,.nav button:hover{background:var(--blue);color:white}.main{margin-left:240px;width:calc(100% - 240px)}.head{height:72px;background:#fff;display:flex;align-items:center;gap:16px;padding:0 24px;border-bottom:1px solid var(--line);position:sticky;top:0;z-index:6}.head input{flex:1;max-width:650px;padding:12px 14px;border:1px solid #cbdbe6;border-radius:10px}.menu{display:none;border:0;background:var(--navy);color:white;border-radius:8px;padding:10px}.content{padding:24px}.top{display:flex;justify-content:space-between;gap:12px;align-items:center}.btn{border:0;border-radius:9px;padding:11px 15px;background:var(--blue);color:white;font-weight:700;cursor:pointer}.btn.green{background:#2ca44f}.btn.ghost{background:#eaf3f9;color:var(--navy)}.grid{display:grid;grid-template-columns:repeat(4,1fr);gap:14px;margin:18px 0}.card{background:#fff;border:1px solid var(--line);border-radius:14px;padding:17px;box-shadow:0 2px 10px #173c5c0a}.kpi b{font-size:28px}.two{display:grid;grid-template-columns:1.45fr 1fr;gap:15px}.list .row{display:grid;grid-template-columns:80px 1fr 135px 90px;gap:9px;padding:12px 0;border-bottom:1px solid #e8eff4;align-items:center}.tag{display:inline-block;background:#e5f2ff;color:#0873db;padding:5px 8px;border-radius:7px;font-size:12px}.tag.green{background:#e4f7e9;color:#168a37}.tag.orange{background:#fff0d8;color:#b96200}.muted{color:var(--muted)}table{width:100%;border-collapse:collapse;background:#fff}th,td{padding:11px;border-bottom:1px solid #e7eef4;text-align:left}th{background:#eef6fc}.tablewrap{overflow:auto}.form{display:grid;grid-template-columns:1fr 1fr;gap:13px}.equipment{display:grid;grid-template-columns:repeat(3,1fr);gap:14px}.bottomnav{display:none}.map{height:230px;border-radius:12px;background:linear-gradient(135deg,#dff1e3,#dcecff);display:grid;place-items:center;font-size:42px}.step{display:flex;gap:10px;align-items:center;padding:11px 0;border-bottom:1px solid #e8eff4}.check{width:22px;height:22px}.notice{background:#eaf7ec;border:1px solid #c8e8cf;border-radius:10px;padding:12px}.overlay{position:fixed;inset:0;background:#001b2b77;z-index:20;display:grid;place-items:center;padding:18px}.modal{background:#fff;border-radius:16px;width:min(620px,100%);max-height:88vh;overflow:auto;padding:20px}
@media(max-width:900px){.side{transform:translateX(-100%);transition:.2s}.side.open{transform:none}.main{margin-left:0;width:100%}.menu{display:block}.grid{grid-template-columns:1fr 1fr}.two,.equipment{grid-template-columns:1fr}.form{grid-template-columns:1fr}.head{padding:0 12px}.head b{display:none}.content{padding:16px 14px 84px}.list .row{grid-template-columns:62px 1fr}.list .row>*:nth-child(3),.list .row>*:nth-child(4){grid-column:2}.bottomnav{display:grid;grid-template-columns:repeat(4,1fr);position:fixed;bottom:0;left:0;right:0;background:white;border-top:1px solid var(--line);z-index:9;padding-bottom:env(safe-area-inset-bottom)}.bottomnav button{border:0;background:white;padding:10px 4px;font-size:11px;color:var(--navy)}.bottomnav button strong{display:block;font-size:19px}.top{align-items:flex-start}.top h1{font-size:25px;margin:4px 0}.hide-mobile{display:none}}@media(max-width:520px){.grid{grid-template-columns:1fr}.head input{min-width:0}.login-card{padding:22px}.card{padding:14px}}
/* V0.3 */
.full{width:100%}.actions,.sectionhead{display:flex;gap:10px;align-items:center}.sectionhead{justify-content:space-between;margin-top:22px}.lower{margin-top:15px}.span2{grid-column:1/-1}.success{text-align:center;max-width:680px;margin:auto}.checkbig{font-size:54px}.modalclose{display:flex;justify-content:flex-end;margin-bottom:-8px}.timeline p{padding:9px 0;border-bottom:1px solid #e8eff4}.content{padding-top:28px}.head{min-height:72px;height:auto;padding-top:env(safe-area-inset-top)}
@media(max-width:900px){.content{padding-top:22px}.sectionhead{align-items:flex-start}.actions{flex-wrap:wrap}.head{position:sticky;top:0}.tablewrap table{min-width:720px}}
/* V0.4 interactions */
.clickable{cursor:pointer}.clickable:hover{background:#f6fbff}.maplive{cursor:pointer;display:flex;flex-direction:column;gap:12px}.maplive small{font-size:14px}.linkbtn{border:0;background:transparent;color:#0873db;font:inherit;font-weight:700;text-align:left;text-decoration:underline;cursor:pointer;padding:6px 0}.btn,.nav button,.bottomnav button,.clickable,.maplive,.linkbtn{touch-action:manipulation;min-height:44px}@media(max-width:900px){.modal{max-height:78vh;margin-bottom:70px}.top>.btn{flex-shrink:0}.content button{max-width:100%}}
/* V0.4 interactions */
.clickable{cursor:pointer}.clickable:hover{background:#f6fbff}.maplive{cursor:pointer;display:flex;flex-direction:column;gap:12px}.maplive small{font-size:14px}.linkbtn{border:0;background:transparent;color:#0873db;font:inherit;font-weight:700;text-align:left;text-decoration:underline;cursor:pointer;padding:6px 0}.btn,.nav button,.bottomnav button,.clickable,.maplive,.linkbtn{touch-action:manipulation;min-height:44px}@media(max-width:900px){.modal{max-height:78vh;margin-bottom:70px}.top>.btn{flex-shrink:0}.content button{max-width:100%}}
/* V0.5 */
.planbar{display:flex;align-items:center;justify-content:space-between;gap:12px;margin:18px 0;flex-wrap:wrap}.planbar h2{margin:0;text-transform:capitalize}.seg{display:flex;background:#eaf3f9;border-radius:10px;padding:3px}.seg button{border:0;background:transparent;padding:9px 12px;border-radius:8px;color:var(--navy);font-weight:700}.seg button.on{background:white;box-shadow:0 1px 5px #1232}.calendar{background:white;border:1px solid var(--line);border-radius:14px;overflow:hidden}.weekdays,.calgrid{display:grid;grid-template-columns:repeat(7,1fr)}.weekdays b{padding:10px;text-align:center;background:#eef6fc}.calday{min-height:120px;border-top:1px solid var(--line);border-right:1px solid var(--line);padding:8px}.calday.empty{background:#f8fafc}.calday button{display:block;width:100%;border:0;background:#e5f2ff;color:var(--navy);border-radius:6px;padding:5px;margin-top:5px;text-align:left;font-size:11px}.calday button small{display:block;color:var(--muted)}.yeargrid{display:grid;grid-template-columns:repeat(4,1fr);gap:12px}.monthcard{border:1px solid var(--line);text-align:left;cursor:pointer;min-height:100px}.monthcard b{display:block;font-size:18px;text-transform:capitalize;margin-bottom:8px}.routecard{margin-top:16px}.routehead{display:flex;justify-content:space-between;gap:12px;align-items:center}.routehead select{padding:11px;border:1px solid #cbdbe6;border-radius:9px;background:white}.routeStops{display:flex;gap:6px;flex-wrap:wrap;margin-top:10px}.dochead{display:flex;justify-content:space-between;align-items:start}.docbox{background:#f6f9fb;border-radius:12px;padding:14px;margin:14px 0}
@media(max-width:900px){.yeargrid{grid-template-columns:repeat(2,1fr)}.calendar{overflow:auto}.weekdays,.calgrid{min-width:760px}.routehead{align-items:flex-start;flex-direction:column}.routehead select{width:100%}}

/* V0.6 planning readability */
.agendaList .row{grid-template-columns:130px minmax(260px,1fr) 150px 30px;column-gap:18px}.agendaDate{display:flex;flex-direction:column;gap:3px;white-space:nowrap}.agendaDate span{font-weight:700}.agendaClient{min-width:0}.agendaClient b{display:block;margin-bottom:3px}.maplive{cursor:pointer}.routeStops .tag{line-height:1.35}
@media(max-width:900px){.agendaList .row{grid-template-columns:115px minmax(0,1fr);gap:10px 16px}.agendaList .row>*:nth-child(3),.agendaList .row>*:nth-child(4){grid-column:2}.agendaDate{grid-row:1 / span 2}.routehead{align-items:flex-start;flex-direction:column}.routehead select{width:100%}}

/* V1.0.1 responsive hotfix: prevent client/equipment forms from overflowing */
html,body{max-width:100%;overflow-x:hidden}.shell,.main,.content,.card,.two,.equipment,.form{min-width:0}.content>*{max-width:100%}.card{overflow-wrap:anywhere}.field{min-width:0}.field input,.field select,.field textarea{min-width:0;max-width:100%}.equipment{grid-template-columns:repeat(auto-fit,minmax(min(280px,100%),1fr))}.modal{max-width:min(620px,calc(100vw - 28px));overflow-x:hidden}.modal .form{grid-template-columns:repeat(2,minmax(0,1fr))}
@media(max-width:700px){.modal .form{grid-template-columns:minmax(0,1fr)}.modal .span2{grid-column:auto}.actions{flex-wrap:wrap}.top{flex-wrap:wrap}.two{grid-template-columns:minmax(0,1fr)}}

/* V1.0.2 — correctif fenêtre modale (classe réellement utilisée par app.js) */
.modalback{position:fixed;inset:0;z-index:1000;background:#001b2b77;display:grid;place-items:center;padding:18px;overflow:auto}
.modalback .modal{width:min(620px,calc(100vw - 36px));max-width:620px;max-height:calc(100vh - 36px);margin:0;overflow:auto}
@media(max-width:700px){.modalback{padding:12px;align-items:start;padding-top:calc(12px + env(safe-area-inset-top))}.modalback .modal{width:100%;max-width:100%;max-height:calc(100vh - 24px - env(safe-area-inset-top));margin:0}.modalback .modal .form{grid-template-columns:minmax(0,1fr)}}
/* V1.1 */
.btn.danger{background:#b42318}.portal{min-height:100vh;background:var(--bg)}.portalhead{background:var(--navy);color:white;padding:14px 22px;display:flex;justify-content:space-between;align-items:center}.portalhead .brand{margin:0}.portalmain{max-width:1100px;margin:auto;padding:24px}.portalmain .grid{grid-template-columns:repeat(2,minmax(0,1fr))}select[id^="role_"],select[id^="client_"]{max-width:180px;padding:8px;border:1px solid var(--line);border-radius:8px;background:white}
@media(max-width:700px){.portalhead{align-items:flex-start;gap:12px;flex-direction:column}.portalmain{padding:16px}.portalmain .grid{grid-template-columns:1fr}}
/* V1.2 — dashboard cards are navigation shortcuts */
.kpi-link{cursor:pointer;position:relative;transition:transform .15s ease,box-shadow .15s ease,border-color .15s ease}
.kpi-link:hover,.kpi-link:focus{transform:translateY(-2px);box-shadow:0 10px 24px rgba(20,45,70,.10);border-color:#9fc5e8;outline:none}
.kpi-open{display:block;margin-top:9px;font-size:12px;font-weight:700;color:#1779d4}
/* V1.3 - galerie photos chantier */
.photo-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(140px,1fr));gap:12px;margin-top:16px}.photo-tile{min-height:120px;border:1px solid #dfe6ea;background:#f8fafb;border-radius:12px;padding:14px;cursor:pointer;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:8px;overflow:hidden}.photo-tile span{font-size:32px}.photo-tile small{max-width:100%;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.photo-tile:hover{background:#eef6f2}@media(max-width:700px){.photo-grid{grid-template-columns:repeat(2,minmax(0,1fr))}}

/* V1.5 galerie photos + suppression */
.photo-card{position:relative;min-width:0}.photo-tile{width:100%;padding:8px;min-height:150px}.photo-thumb-wrap{width:100%;aspect-ratio:4/3;border-radius:9px;overflow:hidden;background:#eef2f4;display:flex;align-items:center;justify-content:center;position:relative}.photo-thumb{width:100%;height:100%;object-fit:cover;display:block;opacity:0;transition:opacity .15s ease}.photo-thumb.ready{opacity:1}.photo-loading{position:absolute;font-size:12px;color:#667}.photo-delete{width:100%;margin-top:6px;border:1px solid #e4b6b6;background:#fff7f7;color:#a32626;border-radius:9px;padding:7px 8px;cursor:pointer;font-weight:700}.photo-delete:hover{background:#fdecec}
/* V1.7 interventions complètes */
.report-block{padding:12px 0;border-bottom:1px solid #e7ecef}.report-block:last-child{border-bottom:0}.report-block h3{margin:0 0 6px;font-size:15px}.report-block p{margin:0;line-height:1.55}.intervention-files{display:grid;grid-template-columns:repeat(auto-fill,minmax(190px,1fr));gap:12px;margin-top:16px}.iv-file-card{border:1px solid #dfe6ea;border-radius:12px;padding:9px;min-width:0;cursor:pointer;background:#fff}.iv-thumb{width:100%;aspect-ratio:4/3;border-radius:9px;overflow:hidden;background:#eef2f4;display:flex;align-items:center;justify-content:center;position:relative}.iv-thumb img{width:100%;height:100%;object-fit:cover}.iv-thumb span{position:absolute;font-size:12px;color:#667}.iv-file-icon{height:120px;border-radius:9px;background:#f3f6f8;display:flex;align-items:center;justify-content:center;font-size:42px}.iv-file-name{font-weight:700;font-size:13px;margin:8px 0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}@media(max-width:700px){.intervention-files{grid-template-columns:repeat(2,minmax(0,1fr))}}
