:root{--cream:#f0ede8;--cream2:#e8e4de;--white:#fff;--dark:#1a1919;--orange:#f37021;--muted:#888;--border:#00000014;--mono:"JetBrains Mono", monospace;--sans:"IBM Plex Sans", sans-serif}*{box-sizing:border-box}body{background:var(--cream);color:var(--dark);font-family:var(--sans);margin:0}#root{min-height:100vh}.layout{min-height:100vh;display:flex}.sidebar{background:var(--dark);flex-shrink:0;width:220px;height:100vh;padding:2rem 1.2rem;position:sticky;top:0}.logo-app{cursor:pointer;align-items:center;gap:.5rem;text-decoration:none;display:flex}.logo-icone{flex-shrink:0}.sidebar-logo{letter-spacing:-.01em;color:var(--white);margin-bottom:1.5rem;font-size:.95rem;font-weight:600}.sidebar-logo .ora{color:var(--orange)}.sidebar-utilisateur{border-bottom:1px solid #ffffff1a;margin-bottom:2rem;padding-bottom:1.5rem}.nom-connecte{color:var(--white);margin-bottom:.5rem;font-size:.9rem;font-weight:600;display:block}.btn-deconnexion{font-family:var(--sans);color:#fff9;cursor:pointer;background:#ffffff14;border:1px solid #ffffff26;border-radius:6px;padding:.35rem .7rem;font-size:.76rem}.btn-deconnexion:hover{color:var(--white);border-color:#ffffff4d}.page-connexion{background:var(--cream);justify-content:center;align-items:center;min-height:100vh;display:flex}.carte-connexion{background:var(--white);border:1px solid var(--border);border-radius:12px;flex-direction:column;width:320px;padding:2.5rem;display:flex}.champ-connexion{flex-direction:column;gap:.3rem;margin-bottom:1.1rem;display:flex}.champ-connexion label{font-family:var(--mono);letter-spacing:.06em;text-transform:uppercase;color:var(--muted);font-size:.6rem}.champ-connexion input{font-family:var(--sans);border:1px solid var(--border);background:var(--white);color:var(--dark);border-radius:6px;padding:.65rem .8rem;font-size:.9rem}.champ-connexion input:focus{border-color:var(--orange);outline:none}.carte-connexion button{font-family:var(--sans);background:var(--dark);color:var(--white);cursor:pointer;border:none;border-radius:6px;margin-top:.5rem;padding:.7rem 1.2rem;font-size:.85rem;font-weight:500;transition:background .2s}.carte-connexion button:hover:not(:disabled){background:var(--orange)}.carte-connexion button:disabled{background:var(--muted);cursor:not-allowed}.carte-compte{max-width:420px;padding:1.5rem}.formulaire-mot-de-passe button{font-family:var(--sans);background:var(--dark);color:var(--white);cursor:pointer;border:none;border-radius:6px;padding:.65rem 1.2rem;font-size:.85rem;font-weight:500;transition:background .2s}.formulaire-mot-de-passe button:hover:not(:disabled){background:var(--orange)}.formulaire-mot-de-passe button:disabled{background:var(--muted);cursor:not-allowed}.sidebar-links{flex-direction:column;gap:.2rem;margin:0;padding:0;list-style:none;display:flex}.sidebar-links a{color:#ffffff8c;border-radius:6px;padding:.6rem .8rem;font-size:.85rem;text-decoration:none;transition:background .15s,color .15s;display:block}.sidebar-links a:hover{color:var(--white);background:#ffffff0d}.sidebar-links a.active{color:var(--orange);background:#f370211a}.content{flex:1;min-width:0;max-width:1400px;padding:3rem 2.5rem}.eyebrow{font-family:var(--mono);letter-spacing:.1em;text-transform:uppercase;color:var(--orange);margin-bottom:.8rem;font-size:.95rem;font-weight:700}.page-title{letter-spacing:-.03em;margin:0 0 2.5rem;font-size:clamp(2rem,4vw,2.8rem);font-weight:600;line-height:1}.page-title .ora{color:var(--orange)}.card{background:var(--white);border:1px solid var(--border);border-radius:10px;overflow:auto hidden}table{border-collapse:collapse;width:100%}thead th{font-family:var(--mono);letter-spacing:.08em;text-transform:uppercase;color:var(--muted);text-align:left;border-bottom:1px solid var(--border);padding:.9rem 1.3rem;font-size:.62rem}tbody td{border-bottom:1px solid var(--border);padding:.9rem 1.3rem;font-size:.88rem}tbody tr:last-child td{border-bottom:none}tbody tr:hover{background:#fafaf8}.section-title{letter-spacing:-.02em;margin:2.5rem 0 1rem;font-size:1.3rem;font-weight:600}.empty{color:var(--muted);text-align:center;padding:2.5rem;font-size:.88rem}.btn-supprimer{font-family:var(--sans);color:var(--muted);border:1px solid var(--border);cursor:pointer;background:0 0;border-radius:6px;padding:.4rem .8rem;font-size:.78rem}.btn-supprimer:hover{color:#c0392b;border-color:#c0392b}.search-form{flex-wrap:wrap;align-items:center;gap:.7rem;margin-bottom:1.5rem;display:flex}.search-form input,.search-form select{font-family:var(--sans);border:1px solid var(--border);background:var(--white);color:var(--dark);border-radius:6px;padding:.65rem .9rem;font-size:.85rem}.search-form button{font-family:var(--sans);background:var(--dark);color:var(--white);cursor:pointer;border:none;border-radius:6px;padding:.65rem 1.3rem;font-size:.82rem;font-weight:500;transition:background .2s}.search-form button:hover:not(:disabled){background:var(--orange)}.search-form button:disabled{background:var(--muted);cursor:not-allowed}.search-form .btn-secondaire{color:var(--muted);border:1px solid var(--border);background:0 0}.search-form .btn-secondaire:hover:not(:disabled){color:var(--dark);border-color:var(--dark);background:0 0}.feedback{background:#f3702114;border:1px solid #f3702133;border-radius:6px;margin-bottom:1.5rem;padding:.7rem 1rem;font-size:.85rem}.feedback-erreur{color:#c0392b;background:#c0392b14;border-color:#c0392b40}.muted{color:var(--muted);font-size:.82rem}.selecteur-cible{align-items:center;gap:.6rem;margin-bottom:1.2rem;display:flex}.selecteur-cible label{font-family:var(--mono);letter-spacing:.06em;text-transform:uppercase;color:var(--muted);font-size:.62rem}.selecteur-cible select{font-family:var(--sans);border:1px solid var(--border);background:var(--white);color:var(--dark);border-radius:6px;padding:.5rem .8rem;font-size:.85rem}.ligne-mois-export{justify-content:space-between;align-items:center;margin-bottom:1.5rem;display:flex}.selecteur-mois{align-items:center;gap:1rem;display:flex}.btn-export-pdf{font-family:var(--sans);color:var(--dark);border:1px solid var(--border);background:0 0;border-radius:6px;padding:.55rem 1.1rem;font-size:.82rem;font-weight:500;text-decoration:none;transition:border-color .2s,color .2s}.btn-export-pdf:hover{border-color:var(--orange);color:var(--orange)}.selecteur-mois button{font-family:var(--mono);background:var(--white);border:1px solid var(--border);cursor:pointer;border-radius:6px;width:2.2rem;height:2.2rem;font-size:.9rem}.selecteur-mois button:hover{border-color:var(--orange);color:var(--orange)}.selecteur-mois .mois-libelle{text-transform:capitalize;min-width:160px;font-weight:600}.badge-statut{font-family:var(--mono);letter-spacing:.06em;text-transform:uppercase;border-radius:100px;padding:.3rem .7rem;font-size:.65rem;font-weight:700;display:inline-block}.badge-statut.saisie{background:var(--border);color:var(--muted)}.badge-statut.soumis{color:#2980b9;background:#3498db1f}.badge-statut.valide{color:#27ae60;background:#27ae601f}.badge-statut.rejete{color:#c0392b;background:#c0392b1a}.commentaire-manager{background:#c0392b0f;border:1px solid #c0392b33;border-radius:8px;margin:1rem 0 1.5rem;padding:.9rem 1.1rem;font-size:.85rem}.commentaire-manager strong{font-family:var(--mono);letter-spacing:.06em;text-transform:uppercase;color:#c0392b;margin-bottom:.3rem;font-size:.62rem;display:block}.grille-saisie-conteneur{background:var(--white);border:1px solid var(--border);border-radius:10px;overflow-x:auto}.grille-saisie{border-collapse:collapse;font-size:.78rem}.grille-saisie th,.grille-saisie td{border:1px solid var(--border);text-align:center;padding:0}.grille-saisie thead th{font-family:var(--sans);text-transform:none;letter-spacing:0;white-space:nowrap;padding:.4rem .2rem}.grille-saisie .jour-numero{font-weight:700;display:block}.grille-saisie .jour-libelle{font-family:var(--mono);text-transform:uppercase;color:var(--muted);font-size:.58rem;display:block}.colonne-tache{z-index:1;background:var(--white);white-space:nowrap;text-overflow:ellipsis;min-width:220px;max-width:220px;position:sticky;left:0;overflow:hidden;text-align:left!important;padding:.5rem .8rem!important}.colonne-total{min-width:55px;font-family:var(--mono);background:#fafaf8;font-weight:700}.colonne-jour{min-width:3.9rem}.jour-weekend{background:#f5f3ef}.ligne-projet-grille td{background:var(--dark);padding:0!important}.etiquette-projet-grille{color:var(--white);padding:.5rem 0;font-weight:600;display:inline-block;position:sticky;left:.8rem}.cellule-select{text-align:center;text-align-last:center;width:100%;height:2.6rem;font-family:var(--sans);color:var(--dark);cursor:pointer;background:0 0;border:none;font-size:.85rem}.cellule-select:focus{outline:2px solid var(--orange);outline-offset:-2px}.cellule-lecture-seule{color:var(--muted);padding:.5rem 0;display:block}.grille-saisie tfoot td{background:#fafaf8;font-weight:700}.total-colonne{font-family:var(--mono)}.total-colonne.ok{color:#27ae60}.total-colonne.incomplet{color:var(--orange)}.actions-releve{align-items:center;gap:.8rem;margin-top:1.5rem;display:flex}.jours-incomplets-liste{margin:.5rem 0 0;padding-left:1.2rem;font-size:.82rem}.liste-collaborateurs{flex-direction:column;gap:.6rem;margin-bottom:2rem;display:flex}.collaborateur-carte{background:var(--white);border:1px solid var(--border);cursor:pointer;border-radius:10px;justify-content:space-between;align-items:center;padding:1rem 1.3rem;display:flex}.collaborateur-carte:hover{border-color:var(--orange)}.collaborateur-carte.selectionne{border-color:var(--orange);background:#f370210a}.collaborateur-nom{font-weight:600}.zone-rejet{align-items:flex-start;gap:.7rem;margin-top:1rem;display:flex}.zone-rejet textarea{border:1px solid var(--border);font-family:var(--sans);resize:vertical;border-radius:6px;flex:1;min-height:3rem;padding:.7rem .9rem;font-size:.85rem}.btn-valider{background:#27ae60!important}.btn-valider:hover:not(:disabled){background:#219150!important}.btn-rejeter{background:#c0392b!important}.btn-rejeter:hover:not(:disabled){background:#a5321f!important}.deux-formulaires{flex-direction:column;gap:.7rem;margin-bottom:1.5rem;display:flex}.label-formulaire{font-family:var(--mono);letter-spacing:.06em;text-transform:uppercase;color:var(--muted);min-width:110px;font-size:.62rem}.groupe-client{margin-bottom:2rem}.groupe-client .section-title{margin:0 0 .8rem;font-size:1.05rem}.ligne-projet td{background:#fafaf8;font-weight:600}.ligne-tache td{color:var(--dark);padding-left:2.2rem}.ligne-tache-vide{color:var(--muted);padding-left:2.2rem;font-size:.82rem;font-style:italic}.ligne-cliquable{cursor:pointer}.panneau-affectations{background:#fafaf8;margin-top:1rem;padding:1.1rem 1.3rem!important}.sous-section-panneau{border-bottom:1px solid var(--border);margin-bottom:1rem;padding-bottom:1rem}.sous-section-panneau:last-child{border-bottom:none;margin-bottom:0;padding-bottom:0}.sous-section-titre{text-transform:uppercase;letter-spacing:.04em;color:var(--dark);margin:0 0 .6rem;font-size:.78rem;font-weight:700}.groupe-affectations-client{margin-bottom:.9rem}.groupe-affectations-client:last-child{margin-bottom:0}.groupe-affectations-client .label-formulaire{margin-bottom:.4rem;display:block}.lignes-affectations{flex-direction:column;gap:.5rem;display:flex}.ligne-affectation{flex-wrap:wrap;align-items:center;gap:1rem;display:flex}.case-affectation{cursor:pointer;align-items:center;gap:.4rem;min-width:180px;font-size:.85rem;display:flex}.champs-mission{gap:.6rem;display:flex}.champs-mission input{font-family:var(--sans);border:1px solid var(--border);background:var(--white);color:var(--dark);border-radius:6px;width:190px;padding:.4rem .6rem;font-size:.82rem}.toggle-actif{font-family:var(--sans);border:1px solid var(--border);background:var(--white);cursor:pointer;border-radius:6px;padding:.35rem .7rem;font-size:.78rem}.toggle-actif.est-actif{color:#27ae60;border-color:#27ae604d}.toggle-actif.est-inactif{color:var(--muted)}.tuiles-kpi{gap:1rem;margin-bottom:2rem;display:flex}.tuile-kpi{background:var(--white);border:1px solid var(--border);border-radius:10px;flex:1;padding:1.2rem 1.4rem}.tuile-kpi-label{font-family:var(--mono);letter-spacing:.06em;text-transform:uppercase;color:var(--muted);margin-bottom:.5rem;font-size:.62rem;display:block}.tuile-kpi-valeur{letter-spacing:-.02em;font-size:1.8rem;font-weight:600;display:block}.carte-graphe{padding:1.5rem 1.5rem .5rem;overflow:visible}.graphe-barres{align-items:flex-end;gap:.8rem;padding-bottom:.5rem;display:flex}.barre-colonne{flex-direction:column;flex:1;align-items:center;min-width:0;height:100%;display:flex}.barre-valeur{font-family:var(--mono);color:var(--dark);height:1rem;margin-bottom:.3rem;font-size:.72rem;font-weight:700}.barre-piste{flex:1;justify-content:center;align-items:flex-end;width:100%;display:flex}.barre{border-radius:4px 4px 0 0;width:60%;min-width:8px;max-width:24px;transition:height .2s,opacity .15s}.barre-colonne:hover .barre{opacity:.82}.barre-label{color:var(--muted);text-align:center;text-overflow:ellipsis;white-space:nowrap;max-width:100%;margin-top:.5rem;font-size:.7rem;overflow:hidden}.graphe-courbe{flex-direction:column;display:flex}.graphe-courbe-zone{cursor:crosshair;flex:1;position:relative}.svg-courbe{width:100%;height:100%;position:absolute;inset:0;overflow:visible}.grille-hairline{stroke:var(--border);stroke-width:1px;vector-effect:non-scaling-stroke}.courbe-crosshair{stroke:var(--muted);stroke-width:1px;stroke-dasharray:3 3;vector-effect:non-scaling-stroke}.courbe-point{border:2px solid var(--white);opacity:0;pointer-events:none;border-radius:50%;width:9px;height:9px;transition:opacity .12s;position:absolute;transform:translate(-50%,-50%)}.courbe-point.visible{opacity:1}.courbe-valeur-fin{font-family:var(--mono);color:var(--dark);white-space:nowrap;pointer-events:none;font-size:.75rem;font-weight:700;position:absolute;transform:translate(10px,-50%)}.courbe-infobulle{background:var(--dark);color:var(--white);white-space:nowrap;pointer-events:none;z-index:2;border-radius:6px;flex-direction:column;gap:.1rem;padding:.45rem .65rem;font-size:.75rem;display:flex;position:absolute;top:0;transform:translate(-50%,calc(-100% - .6rem))}.courbe-infobulle strong{font-family:var(--mono)}.courbe-infobulle span{color:#fff9;font-size:.68rem}.courbe-labels{justify-content:space-between;margin-top:.6rem;padding-bottom:.5rem;display:flex}.courbe-labels span{color:var(--muted);font-size:.7rem}
