Files
SchotzIAD/frontend/src/app/features/consultation-jour/consultation-jour.component.scss
T
MadJax 4748303e57 Page Trajets : effet d'ombre sur les zones encadrées
Ajoute l'ombre de référence du carnet d'adresses (0 2px 8px
rgba(0,0,0,0.1)) aux grandes zones encadrées de la page Trajets :
panneau Totaux, zone du sélecteur temporel, barre d'actions de la
liste, zone du formulaire de saisie et conteneur de la liste des
trajets. Carte et lignes de trajet individuelles non concernées.
2026-10-13 08:38:15 +02:00

210 lines
5.0 KiB
SCSS

:host {
display: block;
// La vue occupe toute la hauteur de <main> (qui vaut le viewport moins la barre de
// navigation, quelle que soit sa hauteur réelle grâce au layout flex global).
// overflow:hidden : aucune scrollbar de page ; seule la sous-zone liste défile.
height: 100%;
min-height: 0;
overflow: hidden;
}
.consultation {
display: flex;
flex-direction: column;
height: 100%;
min-height: 0;
gap: 1rem;
padding: 1.5rem;
box-sizing: border-box;
overflow: hidden; // aucun scroll global : seule la liste défile (voir &__liste)
// Zone dates (colonne gauche) : sélecteur temporel (année/mois), compacte.
&__dates {
display: flex;
flex-direction: column;
gap: 0.5rem;
padding: 0.75rem;
background: #f7f8fa;
border: 1px solid #e3e6ea;
border-radius: 8px;
box-shadow: 0 2px 8px rgba(0, 0, 0, 0.1);
}
// Bande fixe en haut de la colonne DROITE : sélecteur véhicule + bouton d'ajout.
// Reste visible pendant le scroll de la page (la liste défile en dessous).
&__barre-liste {
flex: 0 0 auto;
display: flex;
flex-wrap: wrap;
align-items: flex-end;
justify-content: space-between;
gap: 0.75rem 1rem;
padding: 0.75rem;
background: #f7f8fa;
border: 1px solid #e3e6ea;
border-radius: 8px;
box-shadow: 0 2px 8px rgba(0, 0, 0, 0.1);
}
&__vehicule {
display: flex;
flex-direction: column;
gap: 0.25rem;
}
&__vehicule-libelle {
font-size: 0.8rem;
color: #5a616b;
}
&__vehicule-select {
padding: 0.4rem 0.6rem;
border: 1px solid #c7ccd3;
border-radius: 6px;
background: #fff;
min-width: 12rem;
}
// --- Corps deux colonnes ---
&__corps {
display: grid;
// Colonne GAUCHE = dates + totaux + carte (fixe) ; DROITE = bande + liste (liste défilante).
grid-template-columns: minmax(380px, 460px) minmax(0, 1fr);
gap: 1.5rem;
align-items: stretch;
flex: 1 1 auto;
min-height: 0; // indispensable pour que la colonne droite puisse contraindre la liste
}
&__principal {
display: flex;
flex-direction: column;
gap: 0.75rem;
min-width: 0;
min-height: 0; // permet à la liste enfant de scroller au lieu de pousser la hauteur
}
&__formulaire {
padding: 1rem;
border: 1px solid #e3e6ea;
border-radius: 8px;
background: #fff;
box-shadow: 0 2px 8px rgba(0, 0, 0, 0.1);
}
&__actions {
display: flex;
justify-content: flex-end;
}
&__ajouter {
align-self: flex-end;
padding: 0.5rem 1rem;
border: none;
border-radius: 6px;
background: var(--couleur-bleu);
color: #fff;
cursor: pointer;
font-size: 0.9rem;
white-space: nowrap;
&:hover {
background: var(--couleur-orange);
}
}
// Bouton secondaire : déplie toutes les journées de la liste.
&__ouvrir-tout {
align-self: flex-end;
padding: 0.5rem 1rem;
border: 1px solid #c7ccd3;
border-radius: 6px;
background: #fff;
color: #33475b;
cursor: pointer;
font-size: 0.9rem;
white-space: nowrap;
&:hover {
background: #eef1f5;
}
}
&__erreur {
color: #b3261e;
margin: 0;
}
&__chargement {
color: #5a616b;
margin: 0;
}
// Zone des trajets : SEULE zone défilante de la vue. Elle occupe la hauteur restante
// de la colonne droite et fait défiler uniquement la liste (tout le reste est figé).
&__liste {
flex: 1 1 auto;
min-height: 0;
overflow-y: auto;
border: 1px solid #e3e6ea;
border-radius: 8px;
background: #fff;
box-shadow: 0 2px 8px rgba(0, 0, 0, 0.1);
}
&__vide {
padding: 1rem;
margin: 0;
color: #5a616b;
}
// Panneau latéral toujours visible (sticky) : totaux + carte (Exigence 12.9).
// Il fait partie de la zone FIXE : il se cale près du haut du viewport pendant que
// la liste des trajets défile avec la page. `top` réduit pour maximiser la visibilité ;
// borné en hauteur avec défilement interne si les totaux + carte dépassent l'écran.
&__panneau {
// Colonne gauche FIGÉE : ne défile jamais. Alignée en haut.
align-self: start;
display: flex;
flex-direction: column;
gap: 1rem;
min-height: 0;
}
}
// --- Modale du formulaire de trajet (réutilise le motif d'overlay du ConfirmDialog) ---
.modale-overlay {
position: fixed;
inset: 0;
display: flex;
align-items: flex-start;
justify-content: center;
background: rgba(15, 23, 42, 0.45);
z-index: 1000;
padding: 2rem 1rem;
overflow-y: auto;
}
.modale-panneau {
background: #fff;
border-radius: 10px;
box-shadow: 0 12px 32px rgba(0, 0, 0, 0.25);
max-width: 640px;
width: 100%;
padding: 1.5rem;
margin: auto;
}
// Repli en une colonne sur petits écrans : le panneau redevient statique.
@media (max-width: 900px) {
.consultation__corps {
grid-template-columns: 1fr;
}
.consultation__panneau {
position: static;
// Sur une colonne, le panneau (totaux + carte) s'affiche en premier, au-dessus de la liste.
order: -1;
}
}