commit
3fcdf7e5ef
172 files changed
+52525
No files matched your search
@@ -0,0 +1,398 @@
|
||||
|
||||
.aff-classiques-departs__container{
|
||||
--blue-dark: #173771; /* bande foncée */
|
||||
--blue: #275e9f; /* bande claire */
|
||||
--accent-yellow: #e1c14c; /* heure */
|
||||
--white: #f3f3f3;
|
||||
--rows: 9; /* 9 horaires visibles + 1 footer */
|
||||
--footer-height: 100px; /* hauteur de la dernière 'ligne' servant de footer */
|
||||
--watermark-blue: rgba(10,120,180,0.15);
|
||||
}
|
||||
|
||||
/* Déclaration des fontes Achemine (dans public/fonts/) */
|
||||
@font-face {
|
||||
font-family: 'Achemine';
|
||||
src: url('/public/fonts/achemine_regular.ttf') format('truetype');
|
||||
font-weight: 400;
|
||||
font-style: normal;
|
||||
font-display: swap;
|
||||
}
|
||||
@font-face {
|
||||
font-family: 'Achemine';
|
||||
src: url('/public/fonts/achemine_bold.ttf') format('truetype');
|
||||
font-weight: 700;
|
||||
font-style: normal;
|
||||
font-display: swap;
|
||||
}
|
||||
@font-face {
|
||||
font-family: 'Achemine';
|
||||
src: url('/public/fonts/achemine_italic.ttf') format('truetype');
|
||||
font-weight: 400;
|
||||
font-style: italic;
|
||||
font-display: swap;
|
||||
}
|
||||
|
||||
/* Conteneur plein écran pour l'afficheur */
|
||||
.aff-classiques-departs__container{
|
||||
position: relative;
|
||||
width: 100%;
|
||||
height: 100vh;
|
||||
/* autoriser l'affichage des boîtes agrandies qui débordent des lignes */
|
||||
overflow: visible;
|
||||
font-family: "Achemine", "Helvetica Neue", Arial, sans-serif;
|
||||
background: var(--blue-dark);
|
||||
/* plus de padding-bottom : le footer sera superposé en position absolute */
|
||||
}
|
||||
|
||||
/* Boîte affichant le nom de la gare configuré via ?gare=Nom-de-la-gare */
|
||||
.aff-classiques-departs__station-box{
|
||||
position: absolute;
|
||||
left: 18px;
|
||||
top: 12px;
|
||||
color: #ffffff;
|
||||
background: rgba(0,0,0,0.08);
|
||||
padding: 6px 10px;
|
||||
border-radius: 6px;
|
||||
font-weight: 700;
|
||||
z-index: 40;
|
||||
}
|
||||
|
||||
/* arrondir légèrement le bas de l'afficheur pour coller à la maquette */
|
||||
.aff-classiques-departs__container{
|
||||
border-bottom-right-radius: 10px;
|
||||
border-bottom-left-radius: 4px;
|
||||
}
|
||||
|
||||
/* Liste des lignes (bandes horizontales) */
|
||||
.aff-classiques-departs__list{
|
||||
list-style: none;
|
||||
margin: 0;
|
||||
padding: 0;
|
||||
/* La liste occupe toute la hauteur de l'écran; le footer sera affiché
|
||||
en position absolue par-dessus la partie inférieure. */
|
||||
height: 100vh;
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
}
|
||||
|
||||
.aff-classiques-departs__row{
|
||||
display: flex;
|
||||
/* laisser les colonnes occuper toute la hauteur de la ligne, puis centrer leur contenu */
|
||||
align-items: stretch;
|
||||
box-sizing: border-box;
|
||||
padding: 0 1.2vw;
|
||||
/* Répartit l'espace en var(--rows) parts ; on utilise 100% / var(--rows) pour que
|
||||
9 lignes + 1 footer occupent l'écran de façon uniforme. */
|
||||
flex: 0 0 calc(100% / var(--rows));
|
||||
min-height: 50px; /* garde une bonne hauteur sur petits écrans */
|
||||
max-height: 120px;
|
||||
position: relative; /* pour positionner la .platform-box en absolu */
|
||||
overflow: visible; /* laisser la platform-box déborder si agrandie */
|
||||
}
|
||||
|
||||
.aff-classiques-departs__row:nth-child(odd){
|
||||
background: var(--blue);
|
||||
}
|
||||
.aff-classiques-departs__row:nth-child(even){
|
||||
background: var(--blue-dark);
|
||||
}
|
||||
|
||||
/* Colonne logo */
|
||||
.aff-classiques-departs__col-logo{
|
||||
max-width: 100px;
|
||||
display:flex;
|
||||
/* organiser verticalement les éléments et les centrer verticalement */
|
||||
flex-direction: column;
|
||||
justify-content: center; /* centre verticalement le contenu (logo + meta) */
|
||||
align-items: flex-start; /* garder l'alignement horizontal à gauche */
|
||||
flex: 0 0 10%; /* largeur fixe pour se comporter comme une colonne de tableau */
|
||||
}
|
||||
.aff-classiques-departs__logo-box{
|
||||
/* pastille/logo : ne pas forcer la hauteur pour permettre l'empilement vertical */
|
||||
height: auto;
|
||||
width: 100px;
|
||||
display:flex;
|
||||
align-items:flex-start;
|
||||
justify-content:center;
|
||||
font-weight:800;
|
||||
font-size: clamp(14px, 1.6vw, 20px);
|
||||
box-sizing: border-box;
|
||||
flex: 0 0 auto;
|
||||
align-self: flex-start; /* centrer la pastille dans la colonne */
|
||||
}
|
||||
|
||||
/* Logo SVG chargé depuis public/type */
|
||||
.aff-classiques-departs__op-logo{
|
||||
max-width: 90%;
|
||||
max-height: 100%;
|
||||
height: auto;
|
||||
}
|
||||
|
||||
/* Texte à l'intérieur de la pastille/logo (quai) */
|
||||
.aff-classiques-departs__logo-text{
|
||||
text-align: center;
|
||||
/* taille plus grande, responsive ; s'assure qu'elle reste lisible sur petits et grands écrans */
|
||||
font-size: 20px;
|
||||
line-height: 1;
|
||||
letter-spacing: 0.5px;
|
||||
}
|
||||
|
||||
|
||||
/* Colonne heure */
|
||||
.aff-classiques-departs__col-time{
|
||||
max-width: 15%;
|
||||
padding-left: 20px;
|
||||
display:flex;
|
||||
/* colonne verticale : centrer verticalement l'heure */
|
||||
flex-direction: column;
|
||||
align-items: center;
|
||||
justify-content: center;
|
||||
flex: 0 0 18%; /* largeur fixe pour alignement table-like */
|
||||
}
|
||||
.aff-classiques-departs__time{
|
||||
color: var(--accent-yellow);
|
||||
font-weight:850;
|
||||
/* tailles responsives similaires à l'image */
|
||||
font-size: clamp(26px, 7.5vw, 70px);
|
||||
line-height: 1;
|
||||
display: flex;
|
||||
align-items: baseline; /* centre le chiffre verticalement */
|
||||
height: auto;
|
||||
width: 100%; /* occupe toute la colonne pour être centré */
|
||||
text-align: center;
|
||||
}
|
||||
|
||||
/* Destination */
|
||||
.aff-classiques-departs__col-destination{
|
||||
flex: 1 1 auto; /* colonne flexible qui prend l'espace restant */
|
||||
display: flex;
|
||||
/* colonne verticale : centrer verticalement la destination */
|
||||
flex-direction: column;
|
||||
justify-content: center;
|
||||
align-items: flex-start; /* garder le texte aligné à gauche */
|
||||
}
|
||||
.aff-classiques-departs__destination{
|
||||
color: var(--white);
|
||||
font-weight: 500;
|
||||
font-size: clamp(28px, 8vw, 80px);
|
||||
white-space: nowrap;
|
||||
text-overflow: ellipsis;
|
||||
overflow: hidden;
|
||||
}
|
||||
|
||||
/* Colonne Platform (quai) affichée à droite de chaque ligne */
|
||||
.aff-classiques-departs__col-platform{
|
||||
/* La colonne laisse la boîte gérer sa taille ; on aligne la boîte à droite
|
||||
et l'on centre verticalement pour qu'elle suive la hauteur de la ligne. */
|
||||
display:flex;
|
||||
flex: 0 0 8%;
|
||||
align-items: center;
|
||||
justify-content: flex-end;
|
||||
padding-right: 0.5vw;
|
||||
box-sizing: border-box;
|
||||
}
|
||||
.aff-classiques-departs__platform-box{
|
||||
/* Boîte quai : garder un format carré mais ne pas forcer l'étirement vertical */
|
||||
height: 90px; /* limite maximale, garde l'aspect visuel */
|
||||
width: 90px;
|
||||
aspect-ratio: 1 / 1; /* carré strict */
|
||||
display:flex;
|
||||
align-items:center;
|
||||
justify-content:center;
|
||||
background: transparent; /* intérieur transparent pour montrer la couleur de la ligne */
|
||||
border-radius: 12px;
|
||||
box-sizing: border-box;
|
||||
border: 4px solid #ffffff; /* bord blanc épais */
|
||||
padding: 8px; /* espace intérieur pour éloigner le texte du bord */
|
||||
flex: 0 0 auto;
|
||||
align-self: center;
|
||||
}
|
||||
.aff-classiques-departs__platform-text{
|
||||
color: #ffffff;
|
||||
font-weight: 900;
|
||||
/* réduire légèrement la taille du texte afin qu'il ne touche pas la bordure */
|
||||
font-size: clamp(60px, 2.6vw, 100px);
|
||||
line-height:1;
|
||||
letter-spacing: 0.8px;
|
||||
}
|
||||
|
||||
/* Colonne Type de train (victoire de la séparation avec la colonne logo) */
|
||||
.aff-classiques-departs__col-train-type{
|
||||
max-width: 9%;
|
||||
display:flex;
|
||||
/* colonne verticale : centrer verticalement l'heure */
|
||||
flex-direction: column;
|
||||
align-items: stretch;
|
||||
justify-content: center;
|
||||
flex: 0 0 18%; /* largeur fixe pour alignement table-like */
|
||||
}
|
||||
.aff-classiques-departs__train-type-box{
|
||||
height: auto;
|
||||
aspect-ratio: 1 / 1;
|
||||
display:flex;
|
||||
align-items:center;
|
||||
justify-content:center;
|
||||
background: transparent;
|
||||
border-radius: 10px;
|
||||
box-sizing: border-box;
|
||||
}
|
||||
.aff-classiques-departs__train-type-fallback{ text-align:center; }
|
||||
|
||||
|
||||
/* Numéro de train / opérateur (texte sous logo) */
|
||||
.aff-classiques-departs__train-meta{
|
||||
flex-direction:column;
|
||||
align-items:flex-start;
|
||||
/* centrer verticalement sans forcer la hauteur (pour permettre l'empilement) */
|
||||
justify-content: center;
|
||||
color: #ffffff;
|
||||
height: auto;
|
||||
flex: 0 0 auto;
|
||||
}
|
||||
.aff-classiques-departs__train-meta .aff-classiques-departs__op-name{
|
||||
font-weight:900;
|
||||
font-size:1.50rem; /* plus visible */
|
||||
padding-left: 20px;
|
||||
line-height:1;
|
||||
justify-content: flex-start;
|
||||
text-align: left; /* aligner à gauche dans la colonne */
|
||||
}
|
||||
.aff-classiques-departs__train-meta .aff-classiques-departs__op-number{
|
||||
font-weight:500;
|
||||
font-size:1.25rem;
|
||||
padding-left: 20px;
|
||||
text-align: left; /* aligner à gauche */
|
||||
margin: 0 0 2px 0;
|
||||
}
|
||||
|
||||
/* Statuts spéciaux : retardé / supprimé doivent ressortir en jaune */
|
||||
.aff-classiques-departs__train-meta.aff-classiques-departs__train-meta--delayed .aff-classiques-departs__op-name,
|
||||
.aff-classiques-departs__train-meta.aff-classiques-departs__train-meta--delayed .aff-classiques-departs__op-number,
|
||||
.aff-classiques-departs__train-meta.aff-classiques-departs__train-meta--suppressed .aff-classiques-departs__op-name,
|
||||
.aff-classiques-departs__train-meta.aff-classiques-departs__train-meta--suppressed .aff-classiques-departs__op-number{
|
||||
color: var(--accent-yellow);
|
||||
}
|
||||
|
||||
/* Si on veut un alignement plus spécifique quand train-meta apparaît dans la colonne de type */
|
||||
.aff-classiques-departs__col-train-type .aff-classiques-departs__train-meta{ align-items: flex-start; justify-content: center; }
|
||||
.aff-classiques-departs__col-train-type .aff-classiques-departs__train-meta .aff-classiques-departs__op-name,
|
||||
.aff-classiques-departs__col-train-type .aff-classiques-departs__train-meta .aff-classiques-departs__op-number{ text-align: left; }
|
||||
|
||||
/* Watermark vertical à droite */
|
||||
.aff-classiques-departs__watermark{
|
||||
position: absolute;
|
||||
right: 8px;
|
||||
top: 50%;
|
||||
transform: translateY(-50%) rotate(-90deg);
|
||||
transform-origin: center;
|
||||
font-size: 10.8vw;
|
||||
color: var(--watermark-blue);
|
||||
font-weight:800;
|
||||
letter-spacing: 6px;
|
||||
pointer-events: none;
|
||||
user-select: none;
|
||||
}
|
||||
|
||||
/* Petite pastille H en haut à droite (optionnelle) */
|
||||
.aff-classiques-departs__helpline{
|
||||
position: absolute;
|
||||
right: 18px;
|
||||
top: 12px;
|
||||
width:80px;
|
||||
height:80px;
|
||||
border-radius:6px;
|
||||
border:3px solid #fff;
|
||||
color:#fff;
|
||||
display:flex;
|
||||
align-items:center;
|
||||
justify-content:center;
|
||||
font-weight:900;
|
||||
}
|
||||
|
||||
/* Horloge en bas à droite, proche du bord droit (à 400px du bord droit) */
|
||||
.aff-classiques-departs__clock-container{
|
||||
position: relative; /* contenu positionné par le footer */
|
||||
pointer-events: none;
|
||||
z-index: 30; /* au-dessus du footer */
|
||||
display: inline-flex;
|
||||
align-items: center;
|
||||
height: 100%; /* prendra la hauteur de la ligne footer */
|
||||
}
|
||||
.aff-classiques-departs__clock-box{
|
||||
display: inline-flex;
|
||||
align-items: center;
|
||||
justify-content: center;
|
||||
background: var(--blue-dark); /* fond foncé interne comme sur la maquette */
|
||||
border-radius: 10px;
|
||||
padding: 4px 8px; /* réduire padding pour diminuer légèrement la taille globale */
|
||||
border: 6px solid #ffffff; /* bordure un peu moins épaisse */
|
||||
box-shadow: 0 2px 0 rgba(0,0,0,0.12);
|
||||
box-sizing: border-box;
|
||||
overflow: hidden;
|
||||
/* hauteur adaptée pour rentrer exactement dans la ligne footer */
|
||||
height: calc(var(--footer-height) - 12px);
|
||||
min-height: 34px;
|
||||
}
|
||||
|
||||
/* Footer visuel : barre foncée en bas qui chevauche la liste */
|
||||
.aff-classiques-departs__footer{
|
||||
position: absolute;
|
||||
left: 0;
|
||||
right: 0;
|
||||
bottom: 0;
|
||||
height: var(--footer-height);
|
||||
display: flex;
|
||||
align-items: center;
|
||||
justify-content: center;
|
||||
pointer-events: none;
|
||||
z-index: 20; /* en dessous de l'horloge */
|
||||
}
|
||||
.aff-classiques-departs__footer .aff-classiques-departs__footer-inner{
|
||||
width: 100%;
|
||||
height: 100%;
|
||||
position: relative;
|
||||
display: flex;
|
||||
align-items: center; /* centre verticalement le contenu (la clock) */
|
||||
justify-content: flex-end; /* place la clock à droite */
|
||||
padding-right: 12px; /* espace entre le bord et la clock pour le coin arrondi */
|
||||
/* léger dégradé pour donner l'effet de bande plus claire en haut */
|
||||
background: linear-gradient(to bottom, rgba(11,123,180,0.18) 0%, var(--blue-dark) 30%);
|
||||
box-shadow: inset 0 6px 0 rgba(0,0,0,0.08);
|
||||
/* arrondir côté droit comme sur la maquette */
|
||||
|
||||
}
|
||||
|
||||
/* légère ligne (accent) en haut du footer pour séparer visuellement */
|
||||
.aff-classiques-departs__footer .aff-classiques-departs__footer-inner::before{
|
||||
content: '';
|
||||
position: absolute;
|
||||
left: 0;
|
||||
right: 0;
|
||||
top: 0;
|
||||
height: 8px;
|
||||
background: rgba(255,255,255,0.03);
|
||||
pointer-events: none;
|
||||
border-top-right-radius: 12px;
|
||||
}
|
||||
.aff-classiques-departs__clock-main{
|
||||
color: #ffffff;
|
||||
font-weight: 800;
|
||||
/* légèrement plus petit pour tenir dans le footer */
|
||||
font-size: clamp(28px, 4.2vw, 60px);
|
||||
line-height: 1;
|
||||
font-family: "Achemine", "Helvetica Neue", Arial, sans-serif;
|
||||
margin-right: 6px;
|
||||
}
|
||||
.aff-classiques-departs__clock-seconds{
|
||||
color: var(--accent-yellow);
|
||||
font-weight: 800;
|
||||
font-size: clamp(16px, 2.8vw, 36px);
|
||||
line-height: 1;
|
||||
}
|
||||
|
||||
/* Ajustements pour petits écrans */
|
||||
@media (max-width: 700px){
|
||||
.aff-classiques-departs__col-logo{width: 18%;}
|
||||
.aff-classiques-departs__col-time{width: 24%;}
|
||||
|
||||
}
|
||||
Reference in new issue
Block a user