*{box-sizing:border-box}body{margin:0;font-family:system-ui,-apple-system,Segoe UI,Roboto,sans-serif;background:#f3f4f6;color:#1f2937}
header{background:#1f2937;color:#fff;display:flex;align-items:center;gap:10px;padding:10px 16px;position:sticky;top:0;z-index:5}header h1{font-size:18px;margin:0}
#menuBtn{display:none;background:none;border:0;color:#fff;font-size:22px}
nav{position:fixed;top:48px;left:0;bottom:0;width:210px;background:#fff;border-right:1px solid #e5e7eb;padding:8px;overflow:auto}
nav a{display:block;padding:10px 12px;border-radius:8px;color:#374151;text-decoration:none;margin-bottom:2px}nav a.on,nav a:hover{background:#fff1e6;color:#c2410c;font-weight:600}
main{margin-left:210px;padding:18px;max-width:1200px}
@media(max-width:800px){#menuBtn{display:block}nav{display:none;z-index:4;width:75%}nav.open{display:block}main{margin-left:0;padding:10px}}
h2{margin:0 0 12px}.bar{display:flex;flex-wrap:wrap;gap:8px;align-items:center;margin-bottom:12px}.bar .grow{flex:1}
button,.btn{background:#ea580c;color:#fff;border:0;border-radius:8px;padding:8px 14px;font-size:14px;cursor:pointer;text-decoration:none;display:inline-block}
button.sec,.btn.sec{background:#e5e7eb;color:#111}button.danger{background:#dc2626}button.sm{padding:4px 9px;font-size:13px}
input,select,textarea{font:inherit;padding:8px;border:1px solid #d1d5db;border-radius:8px;width:100%;background:#fff}textarea{min-height:80px}
.card{background:#fff;border-radius:12px;padding:14px;box-shadow:0 1px 3px #0001;margin-bottom:12px}
.grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(280px,1fr));gap:12px}
table{width:100%;border-collapse:collapse;background:#fff;border-radius:12px;overflow:hidden}th,td{padding:9px;border-bottom:1px solid #eee;text-align:left;font-size:14px}th{background:#f9fafb}
.tw{overflow-x:auto}.muted{color:#6b7280;font-size:13px}.tag{display:inline-block;padding:2px 8px;border-radius:999px;font-size:12px;background:#e5e7eb}
.tag.En.cours,.s-En{background:#dbeafe;color:#1e40af}.s-Terminé{background:#dcfce7;color:#166534}.s-Soumission{background:#fef3c7;color:#92400e}.s-En{}.s-Suspendu{background:#fee2e2;color:#991b1b}
dialog{border:0;border-radius:14px;padding:0;width:min(560px,95vw)}dialog form{padding:18px}dialog label{display:block;margin:8px 0 3px;font-size:13px;font-weight:600}
.actions{display:flex;justify-content:flex-end;gap:8px;margin-top:14px}
#toast{position:fixed;bottom:16px;left:50%;transform:translateX(-50%);background:#111;color:#fff;padding:10px 16px;border-radius:8px;display:none;z-index:9}
.cal{display:grid;grid-template-columns:repeat(7,1fr);gap:4px}.cal .d{background:#fff;border-radius:8px;min-height:90px;padding:5px;font-size:12px}.cal .d.out{opacity:.45}.cal .d.today{outline:2px solid #ea580c}
.cal .h{font-weight:700;text-align:center;font-size:12px}.ev{background:#fff1e6;border-left:3px solid #ea580c;border-radius:4px;padding:2px 4px;margin-top:3px;cursor:pointer}
@media(max-width:800px){.cal.week{grid-template-columns:1fr}.cal.week .h{display:none}}
.gal{display:grid;grid-template-columns:repeat(auto-fill,minmax(170px,1fr));gap:10px}.gal figure{margin:0;background:#fff;border-radius:10px;overflow:hidden}
.gal img{width:100%;height:150px;object-fit:cover;display:block;cursor:pointer}.gal figcaption{padding:6px;font-size:13px}
.wx{display:grid;grid-template-columns:repeat(auto-fill,minmax(120px,1fr));gap:8px}.wx .day{background:#fff;border-radius:10px;padding:10px;text-align:center}.big{font-size:40px;font-weight:700}
.ico{font-size:30px}.pick{display:grid;grid-template-columns:repeat(auto-fill,minmax(90px,1fr));gap:6px}.pick label{font-weight:400}.pick img{width:100%;height:70px;object-fit:cover;border-radius:6px}

.tabs{display:flex;gap:4px;overflow-x:auto;border-bottom:2px solid #e5e7eb;margin-bottom:14px}.tabs a{padding:9px 14px;text-decoration:none;color:#374151;white-space:nowrap;border-radius:8px 8px 0 0}
.tabs a.on{background:#fff;color:#c2410c;font-weight:700;border-bottom:3px solid #ea580c}.crumb a{color:#c2410c;text-decoration:none;font-weight:600}
table.files td a{color:#1f2937;text-decoration:none}table.files td a:hover{text-decoration:underline}.nw{white-space:nowrap;text-align:right}.drop.over{outline:3px dashed #ea580c}nav hr{border:0;border-top:1px solid #eee}
.me{border-top:1px solid #eee;margin-top:10px;padding:10px 12px;font-size:14px}.me button{margin-top:6px}
body.login nav,body.login #menuBtn{display:none}body.login main{margin-left:0}.loginbox{max-width:360px;margin:60px auto}.loginbox label{display:block;margin:10px 0 4px;font-weight:600;font-size:13px}
.mail{display:grid;grid-template-columns:minmax(240px,1fr) 2fr;gap:10px}.mlist{background:#fff;border-radius:12px;max-height:75vh;overflow:auto}
.mi{display:block;padding:10px;border-bottom:1px solid #eee;color:#111;text-decoration:none}.mi.on,.mi:hover{background:#fff1e6}.mbody{width:100%;height:55vh;border:1px solid #eee;border-radius:8px;background:#fff}
table.hdr th{width:60px;background:none;padding:3px}table.hdr td{padding:3px}.atts{margin:8px 0;display:flex;flex-wrap:wrap;gap:6px}.att{background:#f3f4f6;border-radius:8px;padding:4px 8px;font-size:13px}
@media(max-width:800px){.mail{grid-template-columns:1fr}}
.s-Actif{background:#dbeafe;color:#1e40af}.s-Soumissionné{background:#ede9fe;color:#5b21b6}

/* --- Lisibilité / débordements --- */
*{min-width:0}body{overflow-wrap:anywhere;word-break:normal}main{min-width:0;overflow-x:hidden}
.card,.grid>*,.bar>*,td,th,.mi,.att,figcaption{min-width:0;overflow-wrap:anywhere}
table{table-layout:auto}td a,.crumb{overflow-wrap:anywhere}.bar .grow{min-width:0}
input,select,textarea,button{max-width:100%}.nw{white-space:normal}
.ftabs{display:flex;gap:6px;flex-wrap:wrap;margin-bottom:10px}.ft{background:#fff;color:#374151;border:1px solid #e5e7eb}.ft span{background:#f3f4f6;border-radius:999px;padding:0 7px;margin-left:4px;font-size:12px}
.ft.on{background:#ea580c;color:#fff;border-color:#ea580c}.ft.on span{background:#fff3;color:#fff}
.plist{background:#fff;border-radius:12px;box-shadow:0 1px 3px #0001;overflow:hidden}
.prow{display:grid;grid-template-columns:70px 1fr 190px 110px;gap:12px;align-items:center;padding:11px 14px;border-bottom:1px solid #f0f0f0;color:#111;text-decoration:none}
.prow:hover{background:#fff7ed}.pno{font-weight:700;color:#9a3412;font-variant-numeric:tabular-nums}.pname{font-weight:600;line-height:1.3}.pname small{display:block;font-weight:400;color:#6b7280}
.pdate{color:#6b7280;font-size:13px;text-align:right}.splink{font-size:13px;color:#2563eb;text-decoration:none}.ptitle{font-size:20px;line-height:1.25}
.tabs{scrollbar-width:thin}
@media(max-width:800px){.prow{grid-template-columns:56px 1fr;row-gap:4px}.pst{grid-column:2}.pdate{display:none}.ptitle{font-size:17px}
 .mail{grid-template-columns:1fr}.cal.month{gap:2px}.cal.month .d{min-height:60px;font-size:10px;padding:3px}.cal.month .ev{font-size:10px}
 table.files th:nth-child(2),table.files td:nth-child(2),table.files th:nth-child(3),table.files td:nth-child(3){display:none}
 .bar{gap:6px}h2{font-size:20px}}

.tabs a,.ft,.ftabs>*,.bar>button,.bar>.btn,.tag,.btn,button{flex:0 0 auto}
h1,h2,h3,.ptitle{overflow-wrap:normal;word-break:normal}
.more{position:relative;display:inline-block}.more summary{list-style:none;cursor:pointer;background:#e5e7eb;border-radius:8px;padding:4px 12px;font-weight:700}
.more summary::-webkit-details-marker{display:none}.more[open]>div{position:absolute;right:0;z-index:5;background:#fff;box-shadow:0 4px 14px #0003;border-radius:10px;padding:8px;display:flex;flex-wrap:wrap;gap:6px;width:200px;justify-content:flex-end}
@media(max-width:800px){#pq{flex:1 1 100%;max-width:none!important;order:3}.bar h2.grow{flex:1 1 auto}
 table.files th:nth-child(4),table.files td:nth-child(4){display:none}.tabs a{padding:9px 11px}}

header .grow{flex:1}#syncBtn{background:#374151;color:#fff}#syncBtn.warn{background:#b45309}.badge{background:#ea580c;color:#fff;border-radius:999px;padding:0 7px;margin-left:4px}
#offbar{position:sticky;top:48px;z-index:4;background:#fde68a;color:#78350f;padding:8px 16px;font-size:14px;text-align:center}
body.login #syncBtn{display:none}@media(max-width:800px){#syncBtn{font-size:0;padding:6px 10px}#syncBtn::before{content:'⟳';font-size:16px}#syncBtn .badge{font-size:12px}}
#instBtn{background:#374151;color:#fff;margin-right:6px}body.login #instBtn{display:none}@media(display-mode:standalone){#instBtn{display:none}}
.fgrid{display:grid;grid-template-columns:repeat(auto-fill,minmax(260px,1fr));gap:12px 20px;margin:12px 0}.fgrid .wide{grid-column:1/-1}.fgrid dt{font-size:12px;color:#6b7280;text-transform:uppercase;letter-spacing:.03em}.fgrid dd{margin:2px 0 0;overflow-wrap:anywhere}.fgrid .src{display:block;font-size:11px;margin-top:2px}
.dash{display:grid;grid-template-columns:repeat(auto-fit,minmax(320px,1fr));gap:16px}.dash .card{margin:0}.late{color:#b91c1c;font-weight:600}
tr.done td{opacity:.55}tr.done b{text-decoration:line-through}.drow{padding:6px 0;border-bottom:1px solid #eee}.qlist{display:grid;gap:12px}
.tag.rs-0{background:#fee2e2;color:#991b1b}.tag.rs-1{background:#fef3c7;color:#92400e}.tag.rs-2{background:#dcfce7;color:#166534}.tag.rs-3{background:#e5e7eb;color:#4b5563}.wx.mini .day{min-width:0;padding:6px;font-size:13px}.tk{width:20px;height:20px}
.wxday{background:#eff6ff;color:#1e3a8a;border-radius:8px;padding:6px 10px;margin:4px 0;font-size:14px}
header h1{white-space:nowrap;overflow:hidden;text-overflow:ellipsis;min-width:0;flex:1 1 auto}header h1 .tshort{display:none}@media(max-width:900px){header h1 .tlong{display:none}header h1 .tshort{display:inline}}

/* Formulaire de fin de projet */
.fp .card{margin-bottom:10px}.fp-head{display:flex;gap:10px;align-items:center;flex-wrap:wrap}.fp-head img{height:44px}.fp-brand{color:#168AB1;font-size:1.3em}.fp-l1{font-weight:600;font-size:.85em}.fp-l2{font-size:.75em}
.fp-t{display:flex;flex-direction:column;text-align:right;margin-left:auto}.fp-t b:first-child{color:#168AB1}.fp-t i{font-size:.8em;color:#595959}
.fp-sec{background:#168AB1;color:#fff;font-weight:700;padding:4px 8px;margin:-4px -4px 8px;border-radius:4px}
.fp-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(210px,1fr));gap:8px;align-items:end}
.fp-f{display:flex;flex-direction:column;gap:2px;min-width:0;flex:1}.fp-f>span{font-size:.75em;font-weight:600;color:#33566b}.fp-f input,.fp-f textarea{width:100%;min-width:0;resize:none}
.fp-row{display:flex;gap:8px;flex-wrap:wrap;align-items:flex-end}.fp-n{color:#7f7f7f;min-width:1.4em;align-self:center}
.fp-it{border-top:1px solid #dcdcdc;padding:6px 2px}.fp-it.alt{background:#F2F2F2}.fp-det{font-size:.75em;color:#595959;font-style:italic;margin:2px 0}
.fp-chk,.fp-v{display:flex;flex-wrap:wrap;gap:4px 12px;margin:6px 0;align-items:center}.fp-c{display:inline-flex;gap:6px;align-items:center;min-height:36px;cursor:pointer}.fp-c input{width:22px;height:22px;margin:0}
.fp-sigs{display:grid;grid-template-columns:repeat(auto-fit,minmax(260px,1fr));gap:12px}.fp-sh{background:#DCEFF5;font-weight:700;text-align:center;padding:3px}
.fp-sig canvas{width:100%;height:150px;border:1px dashed #168AB1;border-radius:6px;background:#fff;touch-action:none}.fp-sig canvas.ro{border-style:solid;border-color:#ccc}
.fp-note{background:#fff7e0;border:1px solid #e8c45a;padding:6px 10px;border-radius:6px;margin-bottom:8px}.fp-lock{background:#eaf6ea;border-color:#9bc89b}
.fp-act{position:sticky;bottom:0;background:#fff;padding:8px;border-top:1px solid #ddd;z-index:5}.fp-def{border-top:1px solid #eee;padding:6px 0}.fp-acc{font-size:.85em}

/* Messagerie */
.notif{display:flex;gap:10px;align-items:center;flex-wrap:wrap}.notif.on{background:#ecfdf5}.notif.denied,.notif.ios-browser{background:#fff7ed}
.clist{display:grid;gap:6px}.crow{display:flex;gap:10px;align-items:center;background:#fff;border-radius:10px;padding:10px 12px;color:inherit;text-decoration:none;box-shadow:0 1px 3px #0001}
.cic{font-size:22px}.cmain{flex:1;min-width:0;display:flex;flex-direction:column}.cmain small{color:#6b7280;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.cside{display:flex;flex-direction:column;align-items:flex-end;gap:4px}.cside small{color:#6b7280;white-space:nowrap}
.chat{display:flex;flex-direction:column;height:calc(100vh - 120px);height:calc(100dvh - 120px)}.cmem{font-size:12px;padding:0 2px 6px}.btn{text-decoration:none;display:inline-block}
.msgs{flex:1;overflow-y:auto;background:#eef2f7;border-radius:10px;padding:10px;display:flex;flex-direction:column;gap:6px;-webkit-overflow-scrolling:touch}
.msg{display:flex}.msg.me{justify-content:flex-end}.mb{max-width:80%;background:#fff;border-radius:12px;padding:7px 10px;box-shadow:0 1px 2px #0001;overflow-wrap:anywhere}.msg.me .mb{background:#dbeafe}.msg.pend .mb{opacity:.65}
.mby{display:block;font-size:12px;color:#1d4ed8}.mb img{max-width:100%;max-height:260px;border-radius:8px;display:block;margin:2px 0}.mt{font-size:11px;color:#6b7280;margin-top:2px;text-align:right}
.mform{display:flex;gap:6px;align-items:flex-end;padding:8px 0 calc(4px + env(safe-area-inset-bottom))}.mform textarea{flex:1;resize:none;min-height:42px;font-size:16px;border-radius:10px}.mph{font-size:24px;cursor:pointer;padding:6px}
#menuBtn.hasmsg{position:relative}#menuBtn.hasmsg::after{content:'';position:absolute;top:4px;right:4px;width:10px;height:10px;border-radius:50%;background:#ef4444}
#msgAlert{position:fixed;inset:0;z-index:100000;display:flex;align-items:center;justify-content:center;animation:maflash .8s infinite alternate;padding:20px}
@keyframes maflash{from{background:rgba(220,38,38,.92)}to{background:rgba(250,204,21,.92)}}
.ma-box{background:#fff;border-radius:16px;padding:22px;max-width:420px;width:100%;text-align:center;box-shadow:0 10px 40px #0006;animation:mapulse .8s infinite alternate}
@keyframes mapulse{from{transform:scale(1)}to{transform:scale(1.04)}}
.ma-ic{font-size:48px}.ma-t{font-size:22px;font-weight:700}.ma-s{color:#6b7280;margin-bottom:8px}.ma-b{font-size:18px;margin:10px 0 18px;white-space:pre-wrap;overflow-wrap:anywhere;max-height:40vh;overflow:auto}
.ma-act{display:flex;gap:10px}.ma-act button{flex:1;font-size:20px;padding:14px}.ma-vu{background:#16a34a;color:#fff}
