- Paquet roadtripsgenerator (pyproject.toml), commande rtg : generer, etat, analyser, compresser, accueil, migrer - Réglages site.toml / voyage.toml (anciens mymaps.txt et moto.txt encore lus) ; qualité vidéo en trois crans - Sources laissées en place : traces découpées par journée d'après leurs horodatages (coupure à 4 h) ou la date du nom de fichier, photos copiées, HEIC converties en JPEG, position déduite de la trace pour les photos sans GPS - extraction_infos.sh et compress.sh portés en Python (plus de bash) ; sorties vidéo écrites sous un nom temporaire ; positions des rushs inchangés reprises du dernier export ; export vidéo conservé quand le disque des rushs est débranché - Pages, accueil et carte globale repris dans le paquet : sortie identique aux scripts (123 fichiers comparés sur 7 voyages) - Tests pytest sur un voyage d'exemple fabriqué à la volée Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01Mf2kATMtqVABHSYdxJMnim
132 lines
6.1 KiB
CSS
132 lines
6.1 KiB
CSS
/* =============================================================================
|
|
Pages d'un voyage : carte générale (index.html) et cartes du jour (html/).
|
|
Copié dans <voyage>/assets/ à chaque génération.
|
|
============================================================================= */
|
|
|
|
/* --- Contrôles Leaflet : zoom en bas à gauche, la barre latérale occupe le haut */
|
|
.leaflet-top.leaflet-left { top: auto !important; bottom: 20px !important; left: 15px !important; }
|
|
.leaflet-popup-content-wrapper { border-radius: 12px; max-width: 95vw !important; }
|
|
|
|
/* --- Épingles des médias --------------------------------------------------- */
|
|
.pin { position: relative; height: 40px; width: 24px; }
|
|
.pin-tete {
|
|
position: absolute; top: 0; z-index: 2;
|
|
width: 24px; height: 24px; border-radius: 50%;
|
|
background: var(--c); border: 2px solid #fff; box-shadow: 0 2px 4px rgba(0,0,0,0.4);
|
|
display: flex; align-items: center; justify-content: center;
|
|
color: #fff; font-size: 12px;
|
|
}
|
|
.pin-tige {
|
|
position: absolute; top: 22px; left: 10.5px; z-index: 1;
|
|
width: 3px; height: 18px; background: var(--c);
|
|
}
|
|
|
|
/* --- Boutons flottants ----------------------------------------------------- */
|
|
.btn-flottant {
|
|
position: fixed; right: 15px; z-index: 10001; display: block;
|
|
padding: 12px 20px; border: 2px solid #fff; border-radius: 50px;
|
|
color: #fff; text-decoration: none; font: bold 14px sans-serif;
|
|
box-shadow: 0 4px 15px rgba(0,0,0,0.4); cursor: pointer;
|
|
}
|
|
.btn-journal { bottom: 25px; z-index: 10000; background: #FFD700; color: #000; }
|
|
.btn-gpx { bottom: 85px; background: #28a745; }
|
|
.btn-accueil {
|
|
top: 15px; left: 15px; right: auto; border-radius: 10px;
|
|
background: #333; box-shadow: 0 4px 10px rgba(0,0,0,0.5);
|
|
}
|
|
|
|
/* --- Barre latérale de la carte générale ------------------------------------ */
|
|
.sidebar {
|
|
position: fixed; top: 15px; left: 15px; z-index: 9999;
|
|
width: 160px; max-height: 85vh; overflow-y: auto; padding: 12px;
|
|
background: rgba(255,255,255,0.9); border-radius: 12px;
|
|
box-shadow: 0 4px 20px rgba(0,0,0,0.2); font-family: sans-serif;
|
|
}
|
|
.sidebar a {
|
|
display: block; margin-bottom: 8px; padding: 12px; border-radius: 8px;
|
|
color: #fff; text-decoration: none; font-weight: bold; text-align: center;
|
|
}
|
|
.sidebar .btn-retour { margin-bottom: 15px; background: #444; border: 2px solid #666; }
|
|
.sidebar .jour { background: var(--c); }
|
|
.sidebar-titre {
|
|
border-top: 1px solid #ccc; margin-bottom: 10px; padding-top: 10px;
|
|
font-size: 12px; font-weight: bold; color: #666; text-align: center;
|
|
}
|
|
|
|
/* --- Popup d'une étape (clic sur la trace) ---------------------------------- */
|
|
.popup-trace { text-align: center; font-family: sans-serif; }
|
|
.popup-trace .btn-jour {
|
|
display: inline-block; margin-top: 14px; padding: 8px 12px; border-radius: 4px;
|
|
background: var(--c); color: #fff; text-decoration: none; font-weight: bold;
|
|
}
|
|
|
|
/* --- Popup vidéo ------------------------------------------------------------ */
|
|
.popup-video { width: calc(85vw - 40px); max-width: 1000px; text-align: center; }
|
|
.popup-video video {
|
|
display: block; width: 100%; max-height: 70vh;
|
|
border-radius: 8px; background: #000;
|
|
}
|
|
.header-row {
|
|
display: flex; justify-content: space-between; align-items: center;
|
|
background: #f0f0f0; padding: 5px 10px; border-radius: 4px; margin-bottom: 5px;
|
|
}
|
|
.file-name {
|
|
font: bold 11px monospace; color: #333; max-width: 60%;
|
|
overflow: hidden; text-overflow: ellipsis; white-space: nowrap;
|
|
}
|
|
.quality-controls { display: flex; gap: 6px; }
|
|
.quality-btn {
|
|
padding: 3px 8px; border: 1px solid #ccc; border-radius: 12px; background: #fff;
|
|
font: bold 10px sans-serif; text-transform: uppercase;
|
|
cursor: pointer; opacity: 0.6; transition: 0.2s;
|
|
}
|
|
.quality-btn:hover { opacity: 1; background: #eee; }
|
|
.active-720 { background: #2ECC71 !important; color: #fff; border-color: #27ae60 !important; opacity: 1 !important; }
|
|
.active-1080 { background: #007AFF !important; color: #fff; border-color: #0056b3 !important; opacity: 1 !important; }
|
|
.qbtn-disabled, .qbtn-disabled:hover {
|
|
opacity: 0.35 !important; background: #eee !important;
|
|
cursor: not-allowed !important; text-decoration: line-through;
|
|
}
|
|
.hevc-note {
|
|
display: none; margin-top: 6px; padding: 6px 10px; border-radius: 6px;
|
|
font: 11px sans-serif; color: #8a6d3b; background: #fcf8e3; text-align: left;
|
|
}
|
|
|
|
/* --- Popup photos (diaporama) ----------------------------------------------- */
|
|
.slider-container { position: relative; width: calc(85vw - 60px); max-width: 800px; min-height: 200px; text-align: center; }
|
|
.file-header { font: bold 11px monospace; color: #555; margin-bottom: 4px; }
|
|
.slide img { display: block; margin: auto; max-width: 100%; max-height: 65vh; border-radius: 8px; }
|
|
.nav-btn {
|
|
position: absolute; top: 50%; transform: translateY(-50%); z-index: 10;
|
|
padding: 12px; border: 2px solid #fff; border-radius: 50%;
|
|
background: rgba(0,0,0,0.6); color: #fff; font-size: 18px; cursor: pointer;
|
|
}
|
|
.prev { left: -10px; }
|
|
.next { right: -10px; }
|
|
.slide-counter { margin-top: 8px; font: bold 13px sans-serif; color: #333; }
|
|
|
|
/* --- Carnet de route -------------------------------------------------------- */
|
|
#journal-panel {
|
|
position: fixed; top: 0; right: -100%; z-index: 10005;
|
|
width: 400px; height: 100%; padding: 25px; overflow-y: auto;
|
|
background: #fff; box-shadow: -5px 0 15px rgba(0,0,0,0.2);
|
|
font-family: sans-serif; transition: 0.4s;
|
|
}
|
|
#journal-panel.open { right: 0; }
|
|
@media (max-width: 600px) { #journal-panel { width: 85%; } }
|
|
.close-btn {
|
|
position: absolute; top: 15px; right: 15px;
|
|
border: none; background: none; font-size: 24px; cursor: pointer;
|
|
}
|
|
.journal-content a.lien-jour {
|
|
display: inline-block; margin: 4px 0 10px; padding: 5px 12px; border-radius: 14px;
|
|
background: #007AFF; color: #fff !important; text-decoration: none;
|
|
font-size: 12px; font-weight: bold;
|
|
}
|
|
.journal-content a.lien-jour:hover { background: #0056b3; }
|
|
.journal-content a.lien-jour.jour-actif { background: #2ECC71; box-shadow: 0 0 0 3px rgba(46,204,113,0.3); }
|
|
.journal-content a.lien-media {
|
|
color: #007AFF; text-decoration: underline;
|
|
text-decoration-style: dotted; text-underline-offset: 2px;
|
|
}
|