:root{
  --noir:#1a1a1a; --sable:#f9f8f5; --dore:#c9a84c; --dore-dark:#b8972f;
  --gris:#6b6b6b; --gris-border:#e0dcd4; --success:#28a745; --danger:#dc3545; --info:#17a2b8;
  --radius:8px; --shadow:0 2px 8px rgba(0,0,0,.06);
  --s-plan:#6b6b6b; --s-cours:var(--dore); --s-valid:var(--info); --s-ok:var(--success);
}
*{margin:0;padding:0;box-sizing:border-box}
body{font-family:'Segoe UI',-apple-system,sans-serif;background:var(--sable);color:var(--noir);font-size:14px;line-height:1.5}
a{color:inherit}
button{font-family:inherit;cursor:pointer}
.app{min-height:100vh}

/* ---- Barre de navigation (haut) ---- */
.topnav{position:sticky;top:0;z-index:100;display:flex;align-items:center;background:var(--noir);color:#fff;height:56px;padding:0 22px;box-shadow:0 2px 10px rgba(0,0,0,.12)}
.topnav .brand{display:flex;align-items:center;gap:11px;padding-right:10px;flex:0 0 auto}
.topnav .logo{width:34px;height:34px;border-radius:6px;background:url(/img/logo-p.png) center/60% no-repeat,linear-gradient(135deg,#e6c063,var(--dore));font-size:0;flex:0 0 auto}
.topnav .brand h1{font-size:14px;letter-spacing:2px;color:var(--dore);line-height:1.1}
.topnav .brand small{font-size:9.5px;color:rgba(255,255,255,.35);display:block;letter-spacing:.5px}
.topnav .tabs{display:flex;align-self:stretch;margin-left:14px;min-width:0;overflow-x:auto}
.topnav .tab{display:flex;align-items:center;gap:8px;padding:0 16px;color:rgba(255,255,255,.6);text-decoration:none;font-size:13px;font-weight:600;border-bottom:3px solid transparent;transition:all .15s;white-space:nowrap}
.topnav .tab:hover{color:#fff;background:rgba(255,255,255,.04)}
.topnav .tab.active{color:var(--dore);border-bottom-color:var(--dore)}
.topnav .tab svg{width:17px;height:17px;flex:0 0 auto}
.topnav .nav-user{margin-left:auto;display:flex;align-items:center;gap:10px;padding-left:12px;flex:0 0 auto}
.user-badge{display:flex;align-items:center;gap:10px}
.user-avatar{width:32px;height:32px;border-radius:50%;background:var(--dore);color:var(--noir);display:grid;place-items:center;font-size:11px;font-weight:700;flex:0 0 auto}
.user-name{font-size:12px;font-weight:600}
.user-role{font-size:10px;color:rgba(255,255,255,.4)}
.topnav .logout{color:rgba(255,255,255,.4);display:flex}
.topnav .logout:hover{color:#fff}
@media(max-width:760px){.topnav .brand small,.topnav .nav-user .user-meta{display:none}.topnav .tab span{display:none}.topnav .tab{padding:0 12px}}

.main{padding:22px 26px;max-width:1640px;margin:0 auto;min-height:calc(100vh - 56px)}
.topbar{display:flex;align-items:center;justify-content:space-between;margin-bottom:18px;flex-wrap:wrap;gap:12px}
.page-title{font-size:22px;font-weight:700}
.page-subtitle{font-size:12px;color:var(--gris);margin-top:2px}
.hint-banner{background:linear-gradient(135deg,#fff,#fdf8ec);border:1px solid var(--gris-border);border-left:4px solid var(--dore);border-radius:var(--radius);padding:10px 15px;font-size:12.5px;color:var(--gris);margin-bottom:16px;display:flex;align-items:center;gap:10px}
.alert{padding:12px 18px;border-radius:var(--radius);margin-bottom:16px;font-size:13px}
.alert-success{background:#d4edda;color:#155724;border:1px solid #c3e6cb}
.alert-error{background:#f8d7da;color:#721c24;border:1px solid #f5c6cb}

/* ---- Buttons / forms ---- */
.btn{display:inline-flex;align-items:center;gap:6px;padding:8px 16px;border:1px solid var(--gris-border);border-radius:var(--radius);font-size:13px;font-weight:600;background:#fff;color:var(--noir);transition:all .15s;text-decoration:none}
.btn:hover{border-color:var(--dore);color:var(--dore-dark)}
.btn-primary{background:var(--dore);color:var(--noir);border-color:var(--dore)}
.btn-primary:hover{background:var(--dore-dark);color:var(--noir)}
.btn-sm{padding:5px 12px;font-size:12px}
.form-group{margin-bottom:14px}
.form-label{display:block;font-size:11px;font-weight:600;text-transform:uppercase;letter-spacing:.5px;color:var(--gris);margin-bottom:5px}
.form-control{width:100%;padding:9px 12px;border:1px solid var(--gris-border);border-radius:var(--radius);font-size:13px;font-family:inherit;background:#fff}
.form-control:focus{outline:none;border-color:var(--dore)}
.form-row{display:grid;grid-template-columns:1fr 1fr;gap:14px}

/* ---- Card / table ---- */
.card{background:#fff;border:1px solid var(--gris-border);border-radius:var(--radius);box-shadow:var(--shadow)}
.card-header{display:flex;align-items:center;justify-content:space-between;padding:14px 20px;border-bottom:1px solid var(--gris-border)}
.card-header h2{font-size:13px;font-weight:700;letter-spacing:.5px;text-transform:uppercase;color:var(--gris)}
.card-body{padding:18px 20px}
table{width:100%;border-collapse:collapse}
thead th{font-size:11px;text-transform:uppercase;letter-spacing:.5px;color:var(--gris);padding:10px 14px;border-bottom:2px solid var(--gris-border);text-align:left}
td{padding:10px 14px;border-bottom:1px solid var(--gris-border);font-size:13px}
tbody tr:hover{background:rgba(201,168,76,.04)}
.badge{display:inline-block;padding:3px 10px;border-radius:20px;font-size:11px;font-weight:600}
.badge-plan{background:#f0ede7;color:var(--gris)} .badge-cours{background:#fdf8ec;color:var(--dore-dark)}
.badge-valid{background:#e2f4f7;color:var(--info)} .badge-ok{background:#e3f5e3;color:var(--success)}

/* ---- Stat cards ---- */
.stats-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(180px,1fr));gap:14px;margin-bottom:18px}
.stat-card{background:#fff;border:1px solid var(--gris-border);border-radius:var(--radius);padding:16px 18px;box-shadow:var(--shadow)}
.stat-card.accent{border-color:var(--dore);background:linear-gradient(135deg,#fff,#fdf8ec)}
.stat-card .top{display:flex;align-items:center;justify-content:space-between}
.stat-card .icn{width:32px;height:32px;border-radius:7px;display:grid;place-items:center;font-size:15px}
.stat-label{font-size:11px;text-transform:uppercase;letter-spacing:.5px;color:var(--gris)}
.stat-value{font-size:30px;font-weight:700;margin-top:6px;line-height:1}
.stat-delta{font-size:11px;font-weight:700;margin-top:6px;color:var(--gris)}
.up{color:var(--success)}.down{color:var(--danger)}
.panels{display:grid;grid-template-columns:1.4fr 1fr;gap:14px}
.bar-row{display:flex;align-items:center;gap:12px;margin-bottom:12px}
.bar-row .name{width:120px;font-size:12.5px;font-weight:600;color:var(--gris)}
.bar-track{flex:1;background:#f3f1eb;border-radius:5px;height:22px;overflow:hidden}
.bar-fill{height:100%;border-radius:5px;background:var(--dore);display:flex;align-items:center;justify-content:flex-end;color:var(--noir);font-size:11px;font-weight:700;padding-right:8px;min-width:22px}

/* ---- Toolbar planning ---- */
.toolbar{display:flex;align-items:center;gap:10px;margin-bottom:14px;flex-wrap:wrap}
.toolbar .fsel{width:auto;min-width:158px;padding:6px 10px;font-size:12.5px;box-shadow:var(--shadow)}
.seg{display:flex;background:#fff;border:1px solid var(--gris-border);border-radius:var(--radius);padding:3px;box-shadow:var(--shadow)}
.seg button{border:0;background:transparent;padding:6px 13px;border-radius:6px;font-size:12.5px;font-weight:600;color:var(--gris)}
.seg button.on{background:var(--dore);color:var(--noir)}
.datenav{display:flex;align-items:center;gap:4px;background:#fff;border:1px solid var(--gris-border);border-radius:var(--radius);padding:3px;box-shadow:var(--shadow)}
.datenav button{border:0;background:transparent;width:28px;height:28px;border-radius:6px;color:var(--gris);font-size:16px}
.datenav button:hover{background:var(--sable);color:var(--dore-dark)}
.datenav .lbl{font-weight:700;padding:0 8px;font-size:13px;text-transform:capitalize}
.kstrip{display:flex;gap:8px;flex-wrap:wrap}
.kpi-mini{background:#fff;border:1px solid var(--gris-border);border-radius:var(--radius);padding:6px 12px;display:flex;align-items:center;gap:8px;box-shadow:var(--shadow)}
.kpi-mini .n{font-size:18px;font-weight:700;line-height:1}
.kpi-mini .l{font-size:11px;color:var(--gris);font-weight:600}
.pill{width:9px;height:9px;border-radius:50%}
.grow{flex:1}

/* ---- Board ---- */
.board-wrap{background:#fff;border:1px solid var(--gris-border);border-radius:var(--radius);box-shadow:var(--shadow);overflow:auto}
.board{display:grid;grid-template-columns:196px repeat(var(--cols,10),minmax(92px,1fr));position:relative;min-width:900px}
.hcell{padding:9px 6px;font-size:11px;font-weight:700;color:var(--gris);text-align:center;border-bottom:2px solid var(--gris-border);border-left:1px solid #f0ede7;background:#fbfaf7}
.corner{background:#fbfaf7;border-bottom:2px solid var(--gris-border);position:sticky;left:0;z-index:5}
.corner span{display:block;padding:9px 14px;font-size:10.5px;font-weight:700;color:var(--gris);text-transform:uppercase;letter-spacing:.5px}
.techcell{display:flex;flex-direction:column;justify-content:center;gap:8px;padding:10px 12px;border-bottom:1px solid var(--gris-border);border-right:1px solid var(--gris-border);position:sticky;left:0;background:#fff;z-index:4;min-height:74px}
.techcell .thead{display:flex;align-items:center;gap:10px}
.techcell .av{width:34px;height:34px;border-radius:50%;flex:0 0 auto;display:grid;place-items:center;color:#fff;font-weight:700;font-size:12.5px}
.techcell .tn{font-weight:700;font-size:13px;line-height:1.15}
.techcell .tt{font-size:11px;color:var(--gris)}
.slot{border-bottom:1px solid var(--gris-border);border-left:1px solid #f0ede7;min-height:74px;position:relative}
.slot.lunch{background:repeating-linear-gradient(45deg,#f4f1ea,#f4f1ea 7px,#e8e3d7 7px,#e8e3d7 14px)}
.hcell.lunch{background:#ece7dc;color:#a49c8a}
.slot.dragover{background:rgba(201,168,76,.12);box-shadow:inset 0 0 0 2px var(--dore)}
.task{position:relative;margin:5px;height:calc(100% - 10px);border-radius:6px;padding:7px 9px;overflow:hidden;cursor:grab;box-shadow:0 1px 3px rgba(0,0,0,.15)}
.task .city{font-weight:700;font-size:12.5px;line-height:1.1}
.task .os{font-size:11px;opacity:.9;margin-top:1px}
.task .meta{position:absolute;right:8px;bottom:6px;font-size:10.5px;opacity:.85}
.t-cours{background:var(--dore);color:var(--noir)} .t-valid{background:var(--info);color:#fff}
.t-ok{background:var(--success);color:#fff} .t-plan,.t-a_planifier{background:var(--gris);color:#fff}
.t-en_cours{background:var(--dore);color:var(--noir)} .t-termine_a_valider{background:var(--info);color:#fff} .t-validee{background:var(--success);color:#fff}
.toplan{display:flex;flex-direction:column;gap:5px;margin:1px 0 0 7px;padding-left:9px;border-left:2px solid var(--gris-border)}
.toplan .lbl{font-size:9px;font-weight:800;text-transform:uppercase;letter-spacing:.4px;color:var(--gris)}
.uchip{display:flex;flex-direction:column;gap:2px;width:100%;background:#fff;border:1px solid var(--gris-border);border-left:3px solid var(--dore);border-radius:6px;padding:5px 9px;cursor:grab;box-shadow:0 1px 2px rgba(0,0,0,.04)}
.uchip:hover{box-shadow:var(--shadow);border-left-color:var(--dore-dark)}
.uchip .top{display:flex;align-items:center;gap:6px}
.uchip .c{font-weight:700;font-size:12px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.uchip .o{font-size:9.5px;color:var(--gris)}
.uchip .d{margin-left:auto;font-size:10px;font-weight:700;color:var(--dore-dark);background:#fdf8ec;border-radius:4px;padding:1px 6px}
.legend{display:flex;gap:16px;flex-wrap:wrap;margin-top:14px;font-size:12px;color:var(--gris)}
.legend span{display:inline-flex;align-items:center;gap:6px}
.lg{width:11px;height:11px;border-radius:3px}

/* ---- Vue Semaine ---- */
.board.week{grid-template-columns:196px repeat(var(--days,6),minmax(150px,1fr));min-width:1050px}
.dhead{padding:9px 6px;font-size:11.5px;font-weight:700;color:var(--gris);text-align:center;border-bottom:2px solid var(--gris-border);border-left:1px solid #f0ede7;background:#fbfaf7;text-transform:capitalize}
.daycell{border-bottom:1px solid var(--gris-border);border-left:1px solid #f0ede7;min-height:96px;padding:6px;display:flex;flex-direction:column;gap:5px}
.daycell.dragover{background:rgba(201,168,76,.12);box-shadow:inset 0 0 0 2px var(--dore)}
.wk-block{border-radius:6px;padding:6px 8px;cursor:grab;box-shadow:0 1px 3px rgba(0,0,0,.15);font-size:12px}
.wk-block:active{cursor:grabbing}
.wk-block .c{font-weight:700;font-size:12.5px;line-height:1.1}
.wk-block .o{font-size:10.5px;opacity:.9}
.wk-block .h{font-size:10px;opacity:.85;margin-top:1px}

/* ---- Drawer ---- */
.overlay{position:fixed;inset:0;background:rgba(0,0,0,.5);opacity:0;pointer-events:none;transition:.2s;z-index:900}
.overlay.show{opacity:1;pointer-events:auto}
.drawer{position:fixed;top:0;right:0;height:100%;width:420px;max-width:92vw;background:#fff;box-shadow:-8px 0 30px rgba(0,0,0,.25);transform:translateX(100%);transition:transform .24s;z-index:901;display:flex;flex-direction:column}
.drawer.show{transform:none}
.dh{background:var(--noir);color:#fff;padding:18px 20px;position:relative}
.dh .os{font-size:12px;color:rgba(255,255,255,.5)}
.dh .city{font-size:21px;font-weight:700;margin-top:2px;color:var(--dore)}
.dh .close{position:absolute;top:14px;right:14px;background:rgba(255,255,255,.12);border:0;color:#fff;width:32px;height:32px;border-radius:7px;font-size:17px}
.db{padding:18px 20px;overflow:auto;flex:1}
.field{margin-bottom:16px}
.field .k{font-size:10px;text-transform:uppercase;letter-spacing:.5px;color:var(--gris);font-weight:700;margin-bottom:6px}
.statusrow{display:flex;gap:7px;flex-wrap:wrap}
.schip{border:1px solid var(--gris-border);background:#fff;border-radius:20px;padding:5px 11px;font-size:12px;font-weight:600;color:var(--gris);display:inline-flex;align-items:center;gap:6px;cursor:pointer}
.schip .d{width:8px;height:8px;border-radius:50%}
.schip.on{color:#fff;border-color:transparent}
.line-item{display:flex;align-items:center;gap:10px;padding:10px 0;border-bottom:1px solid #f0ede7}
.line-item .ld{margin-left:auto;font-weight:700;font-size:13px}
.totalrow{display:flex;justify-content:space-between;padding:11px 12px;background:#fdf8ec;border:1px solid #f0e6cc;border-radius:var(--radius);margin-top:10px;font-weight:700}
.kv{display:flex;justify-content:space-between;font-size:13px;padding:6px 0}
.kv .kk{color:var(--gris)}
.actions{display:flex;gap:9px;padding:14px 20px;border-top:1px solid var(--gris-border)}
.actions .btn{flex:1;justify-content:center}

/* ---- Modal ---- */
.modal-overlay{display:none;position:fixed;inset:0;background:rgba(0,0,0,.5);z-index:1000;align-items:center;justify-content:center}
.modal-overlay.active{display:flex}
.modal{background:#fff;border-radius:var(--radius);width:90%;max-width:460px;box-shadow:0 20px 60px rgba(0,0,0,.3)}
.modal-header{display:flex;align-items:center;justify-content:space-between;padding:16px 20px;border-bottom:1px solid var(--gris-border)}
.modal-body{padding:20px}
.modal-footer{display:flex;justify-content:flex-end;align-items:center;gap:10px;padding:14px 20px;border-top:1px solid var(--gris-border)}
/* Modale rapport (plein ecran) */
.modal.modal-lg{max-width:920px;width:min(920px,94vw);max-height:90vh;display:flex;flex-direction:column}
.modal.modal-lg .modal-body{overflow:auto}
.rapport-grid{display:grid;grid-template-columns:1fr 1fr;gap:24px}
@media(max-width:760px){.rapport-grid{grid-template-columns:1fr}}
.rap-col .field{margin-bottom:16px}
.photo-select{display:grid;grid-template-columns:repeat(auto-fill,minmax(92px,1fr));gap:8px}
.photo-select .p{position:relative;aspect-ratio:1;border-radius:8px;overflow:hidden;border:2px solid var(--gris-border);cursor:pointer}
.photo-select .p img{width:100%;height:100%;object-fit:cover;display:block}
.photo-select .p.sel{border-color:var(--dore)}
.photo-select .p .chk{position:absolute;top:5px;right:5px;width:20px;height:20px;border-radius:5px;background:rgba(255,255,255,.9);border:1px solid var(--gris-border);display:grid;place-items:center;font-size:12px;color:transparent}
.photo-select .p.sel .chk{background:var(--dore);border-color:var(--dore);color:#fff}
.modal-close{background:none;border:none;font-size:22px;cursor:pointer;color:var(--gris)}

/* ---- Login ---- */
.login-page{min-height:100vh;display:flex;align-items:center;justify-content:center;background:var(--noir)}
.login-card{background:#fff;border-radius:var(--radius);width:380px;box-shadow:0 20px 60px rgba(0,0,0,.4);overflow:hidden}
.login-header{padding:30px;text-align:center;background:var(--noir)}
.login-header .logo{width:48px;height:48px;border-radius:10px;margin:0 auto 12px;background:url(/img/logo-p.png) center/60% no-repeat,linear-gradient(135deg,#e6c063,var(--dore));display:grid;place-items:center;font-size:0}
.login-header h1{color:var(--dore);font-size:20px;letter-spacing:3px}
.login-header p{color:rgba(255,255,255,.4);font-size:12px;margin-top:4px}
.login-body{padding:30px}
.btn-login{width:100%;padding:12px;background:var(--dore);color:var(--noir);border:none;border-radius:var(--radius);font-size:14px;font-weight:700;cursor:pointer;letter-spacing:.5px;margin-top:6px}
.btn-login:hover{background:var(--dore-dark)}

/* ---- Mobile technicien ---- */
.tech-app{max-width:520px;margin:0 auto;min-height:100vh;background:var(--sable)}
.tech-top{background:var(--noir);color:#fff;padding:16px}
.tech-top .brand{color:var(--dore);font-weight:700;letter-spacing:2px;font-size:14px}
.tech-card{background:#fff;border:1px solid var(--gris-border);border-radius:12px;padding:14px;margin:12px;box-shadow:var(--shadow);text-decoration:none;color:inherit;display:block}
a.tech-card:active{background:#fdfbf5}
.tech-card h4{font-size:11px;text-transform:uppercase;letter-spacing:.5px;color:var(--gris);margin-bottom:10px}
.m-line{display:flex;gap:9px;align-items:center;padding:7px 0;border-bottom:1px solid #f0ede7;font-size:13px}
.m-line:last-child{border-bottom:0}
.m-line .d{margin-left:auto;font-weight:700}
.tache-row{display:flex;align-items:center;gap:12px;text-decoration:none;color:inherit}
.tache-row .os{font-weight:700;color:var(--dore-dark)}
.photos-grid{display:grid;grid-template-columns:repeat(3,1fr);gap:8px}
.photos-grid img{width:100%;aspect-ratio:1;object-fit:cover;border-radius:8px}
.photo-add{aspect-ratio:1;border:1.5px dashed var(--dore);border-radius:8px;display:grid;place-items:center;color:var(--dore-dark);font-size:24px;background:#fdf8ec}
.dictee-btn{display:flex;align-items:center;justify-content:center;gap:8px;width:100%;margin-top:10px;background:#fbe5e5;color:var(--danger);border:0;border-radius:8px;padding:11px;font-weight:700}
.dictee-btn.rec{animation:pulse 1.1s infinite}
@keyframes pulse{0%,100%{box-shadow:0 0 0 0 rgba(220,53,69,.4)}50%{box-shadow:0 0 0 7px rgba(220,53,69,0)}}

@media(max-width:768px){
  .sidebar{display:none}.main{margin-left:0;padding:14px}
  .panels{grid-template-columns:1fr}.form-row{grid-template-columns:1fr}
}
