Nettoyage et construction micro services

This commit is contained in:
Christian CUNAT-BRULE
2026-09-13 13:02:10 +02:00
parent d8eb7f4375
commit 941feb3e96
77 changed files with 4477 additions and 8473 deletions
+441 -21
View File
@@ -1,21 +1,441 @@
/* The accent is the only configurable color; surfaces derive from it. */
body.light{--bg:color-mix(in srgb,var(--accent) 3%,#f2f2ee);--surface2:color-mix(in srgb,var(--accent) 4%,#f5f5f2);--border:color-mix(in srgb,var(--accent) 9%,#deded8)}
.rail,body.light .rail{background:color-mix(in srgb,var(--accent) 4%,var(--bg))}
.brand span,.gear>span,.text-link span{color:var(--accent)}
.clock-card{background:color-mix(in srgb,var(--accent) 13%,#14201e)}
.sun{background:var(--accent);box-shadow:0 0 80px color-mix(in srgb,var(--accent) 20%,transparent)}
.mountain{background:color-mix(in srgb,var(--accent) 22%,#23312d)}
.mountain.two{background:color-mix(in srgb,var(--accent) 8%,#12221e)}
.road{background:color-mix(in srgb,var(--accent) 45%,#48534c)}
.album-art{background:linear-gradient(140deg,color-mix(in srgb,var(--accent) 70%,#849484),color-mix(in srgb,var(--accent) 12%,#243a33))}
.record:after{border-color:color-mix(in srgb,var(--accent) 45%,#314436)}
.tiny-dot{box-shadow:0 0 12px color-mix(in srgb,var(--accent) 25%,transparent)}
body.light .rail nav a.active{color:var(--ink)}
.theme-grid{display:grid;grid-template-columns:1fr 1fr;gap:15px}input[type=color]{width:100%;height:46px;padding:4px;border:1px solid var(--border);border-radius:10px;background:var(--surface2)}
.weather-actions{display:flex;align-items:center;gap:9px;margin:0 0 10px;flex-wrap:wrap}.weather-actions button{font-size:10px;padding:6px 10px}.weather-actions a{font-size:10px;color:var(--accent)}.weather-credit{font-size:8px;color:var(--muted);margin-top:8px}.weather-main strong #weather-temperature{color:var(--text)}.weather-card{min-height:280px}.weather-card #weather-status{font-size:10px;min-height:26px;margin-bottom:8px}
.journey-grid{display:grid;grid-template-columns:minmax(0,1fr) 285px;gap:16px}.map-column{min-width:0}#map-canvas{height:420px;min-height:200px;border-radius:17px;border:1px solid var(--border);background:var(--surface2);z-index:0;isolation:isolate}.journey-panel{padding:18px;overflow:auto;max-height:680px}.journey-panel label{font-size:11px;display:block;margin:12px 0 7px}.journey-panel input:not([type=checkbox]):not([type=file]),.journey-panel select{width:100%;min-width:0;min-height:44px;border:1px solid var(--border);border-radius:8px;padding:10px;color:var(--text);background:var(--surface2)}.search-line{display:flex;gap:6px}.search-line input{flex:1}.search-line button{font-size:23px;padding:5px 14px}#place-results button{text-align:left;width:100%;margin-top:8px;font-size:11px;overflow-wrap:anywhere}#place-results p{font-size:11px;color:var(--muted)}.map-actions{display:flex;align-items:center;gap:8px;flex-wrap:wrap}.map-actions button,.map-actions label{font-size:11px}.journey-panel p,#map-status{font-size:11px;color:var(--muted);line-height:1.5}.journey-panel details{padding:14px 0;border-top:1px solid var(--border);margin-top:10px}.journey-panel summary{font-size:12px;cursor:pointer;min-height:34px;padding-top:8px}.provider-credit a{color:var(--accent)}#route-steps{padding-left:20px;font-size:11px;color:var(--muted)}#route-steps li{padding:8px 0}#route-steps li.current{color:var(--accent)}#guidance{padding:15px;margin-top:10px}#guidance strong{font-size:18px}#guidance p{font-size:11px}.journey-panel label.check-label{display:flex;align-items:center;gap:10px;min-height:36px}.check-label input{accent-color:var(--accent)}#zone-alert{position:fixed;z-index:1500;bottom:22px;left:50%;transform:translateX(-50%);background:#fbd499;color:#30200d;border:2px solid #af6d16;box-shadow:var(--shadow);border-radius:14px;padding:18px 65px 18px 22px;max-width:calc(100vw - 28px);width:520px}#zone-alert strong,#zone-alert span{display:block}#zone-alert span{font-size:12px;margin-top:6px}#zone-alert button{position:absolute;right:10px;top:10px;background:#fff4;color:#30200d;border-color:#af6d16}
.leaflet-container{font-family:inherit;color:#20312a}.leaflet-container .leaflet-control-attribution{font-size:10px}.leaflet-container .leaflet-control-attribution a{color:#22557b}.leaflet-control-zoom a{min-width:40px;min-height:40px;line-height:40px!important}.leaflet-tooltip{font-size:12px}.leaflet-control-attribution{max-width:100%;white-space:normal}.rail nav{gap:8px}.rail nav a{min-height:65px}
@media(max-width:1100px){.journey-grid{grid-template-columns:minmax(0,1fr) 250px}#map-canvas{height:340px}.journey-panel{padding:14px}}
@media(max-height:650px) and (min-width:760px){.weather-card{min-height:260px}.weather-card .weather-main{margin:4px 0}.weather-card #weather-status{min-height:0}.weather-actions{margin-bottom:6px}.weather-credit{margin-top:5px}#map-canvas{height:270px}.journey-panel{max-height:480px}.rail nav a{min-height:56px}.rail nav{gap:4px}}
@media(max-height:520px) and (min-width:760px){.rail nav a{min-height:48px;gap:4px}.rail nav .icon{font-size:21px}.weather-card{min-height:220px}.weather-actions{gap:5px}.weather-actions button{font-size:9px;padding:5px}.weather-card #weather-status{display:block}.weather-credit{font-size:7px}#map-canvas{height:230px}.journey-panel{max-height:420px}}
@media(max-width:759px){.journey-grid{grid-template-columns:1fr}.journey-panel{max-height:none}#map-canvas{height:320px}.map-actions button{padding:8px}.weather-card{min-height:290px}.theme-grid{gap:10px}.rail nav a{min-height:60px}.leaflet-container .leaflet-control-attribution{font-size:9px}}
body.light {
--bg: color-mix(in srgb,var(--accent) 3%,#f2f2ee);
--surface2: color-mix(in srgb,var(--accent) 4%,#f5f5f2);
--border: color-mix(in srgb,var(--accent) 9%,#deded8);
}
.rail, body.light .rail {
background: color-mix(in srgb,var(--accent) 4%,var(--bg));
}
.brand span, .gear > span, .text-link span {
color: var(--accent);
}
.clock-card {
background: color-mix(in srgb,var(--accent) 13%,#14201e);
}
.sun {
background: var(--accent);
box-shadow: 0 0 80px color-mix(in srgb,var(--accent) 20%,transparent);
}
.mountain {
background: color-mix(in srgb,var(--accent) 22%,#23312d);
}
.mountain.two {
background: color-mix(in srgb,var(--accent) 8%,#12221e);
}
.road {
background: color-mix(in srgb,var(--accent) 45%,#48534c);
}
.album-art {
background: linear-gradient(140deg,color-mix(in srgb,var(--accent) 70%,#849484),color-mix(in srgb,var(--accent) 12%,#243a33));
}
.record::after {
border-color: color-mix(in srgb,var(--accent) 45%,#314436);
}
.tiny-dot {
box-shadow: 0 0 12px color-mix(in srgb,var(--accent) 25%,transparent);
}
body.light .rail nav a.active {
color: var(--ink);
}
.theme-grid {
display: grid;
grid-template-columns: 1fr 1fr;
gap: 15px;
}
input[type="color"] {
width: 100%;
height: 46px;
padding: 4px;
border: 1px solid var(--border);
border-radius: 10px;
background: var(--surface2);
}
.weather-actions {
display: flex;
align-items: center;
gap: 9px;
margin: 0px 0px 10px;
flex-wrap: wrap;
}
.weather-actions button {
font-size: 10px;
padding: 6px 10px;
}
.weather-actions a {
font-size: 10px;
color: var(--accent);
}
.weather-credit {
font-size: 8px;
color: var(--muted);
margin-top: 8px;
}
.weather-main strong #weather-temperature {
color: var(--text);
}
.weather-card {
min-height: 280px;
}
.weather-card #weather-status {
font-size: 10px;
min-height: 26px;
margin-bottom: 8px;
}
.journey-grid {
display: grid;
grid-template-columns: minmax(0px, 1fr) 285px;
gap: 16px;
}
.map-column {
min-width: 0px;
}
#map-canvas {
height: 420px;
min-height: 200px;
border-radius: 17px;
border: 1px solid var(--border);
background: var(--surface2);
z-index: 0;
isolation: isolate;
}
.journey-panel {
padding: 18px;
overflow: auto;
max-height: 680px;
}
.journey-panel label {
font-size: 11px;
display: block;
margin: 12px 0px 7px;
}
.journey-panel input:not([type="checkbox"]):not([type="file"]), .journey-panel select {
width: 100%;
min-width: 0px;
min-height: 44px;
border: 1px solid var(--border);
border-radius: 8px;
padding: 10px;
color: var(--text);
background: var(--surface2);
}
.search-line {
display: flex;
gap: 6px;
}
.search-line input {
flex: 1 1 0%;
}
.search-line button {
font-size: 23px;
padding: 5px 14px;
}
#place-results button {
text-align: left;
width: 100%;
margin-top: 8px;
font-size: 11px;
overflow-wrap: anywhere;
}
#place-results p {
font-size: 11px;
color: var(--muted);
}
.map-actions {
display: flex;
align-items: center;
gap: 8px;
flex-wrap: wrap;
}
.map-actions button, .map-actions label {
font-size: 11px;
}
.journey-panel p, #map-status {
font-size: 11px;
color: var(--muted);
line-height: 1.5;
}
.journey-panel details {
padding: 14px 0px;
border-top: 1px solid var(--border);
margin-top: 10px;
}
.journey-panel summary {
font-size: 12px;
cursor: pointer;
min-height: 34px;
padding-top: 8px;
}
.provider-credit a {
color: var(--accent);
}
#route-steps {
padding-left: 20px;
font-size: 11px;
color: var(--muted);
}
#route-steps li {
padding: 8px 0px;
}
#route-steps li.current {
color: var(--accent);
}
#guidance {
padding: 15px;
margin-top: 10px;
}
#guidance strong {
font-size: 18px;
}
#guidance p {
font-size: 11px;
}
.journey-panel label.check-label {
display: flex;
align-items: center;
gap: 10px;
min-height: 36px;
}
.check-label input {
accent-color: var(--accent);
}
#zone-alert {
position: fixed;
z-index: 1500;
bottom: 22px;
left: 50%;
transform: translateX(-50%);
background: rgb(251, 212, 153);
color: rgb(48, 32, 13);
border: 2px solid rgb(175, 109, 22);
box-shadow: var(--shadow);
border-radius: 14px;
padding: 18px 65px 18px 22px;
max-width: calc(-28px + 100vw);
width: 520px;
}
#zone-alert strong, #zone-alert span {
display: block;
}
#zone-alert span {
font-size: 12px;
margin-top: 6px;
}
#zone-alert button {
position: absolute;
right: 10px;
top: 10px;
background: rgba(255, 255, 255, 0.267);
color: rgb(48, 32, 13);
border-color: rgb(175, 109, 22);
}
.leaflet-container {
font-family: inherit;
color: rgb(32, 49, 42);
}
.leaflet-container .leaflet-control-attribution {
font-size: 10px;
}
.leaflet-container .leaflet-control-attribution a {
color: rgb(34, 85, 123);
}
.leaflet-control-zoom a {
min-width: 40px;
min-height: 40px;
line-height: 40px !important;
}
.leaflet-tooltip {
font-size: 12px;
}
.leaflet-control-attribution {
max-width: 100%;
white-space: normal;
}
.rail nav {
gap: 8px;
}
.rail nav a {
min-height: 65px;
}
@media (max-width: 1100px) {
.journey-grid {
grid-template-columns: minmax(0px, 1fr) 250px;
}
#map-canvas {
height: 340px;
}
.journey-panel {
padding: 14px;
}
}
@media (max-height: 650px) and (min-width: 760px) {
.weather-card {
min-height: 260px;
}
.weather-card .weather-main {
margin: 4px 0px;
}
.weather-card #weather-status {
min-height: 0px;
}
.weather-actions {
margin-bottom: 6px;
}
.weather-credit {
margin-top: 5px;
}
#map-canvas {
height: 270px;
}
.journey-panel {
max-height: 480px;
}
.rail nav a {
min-height: 56px;
}
.rail nav {
gap: 4px;
}
}
@media (max-height: 520px) and (min-width: 760px) {
.rail nav a {
min-height: 48px;
gap: 4px;
}
.rail nav .icon {
font-size: 21px;
}
.weather-card {
min-height: 220px;
}
.weather-actions {
gap: 5px;
}
.weather-actions button {
font-size: 9px;
padding: 5px;
}
.weather-card #weather-status {
display: block;
}
.weather-credit {
font-size: 7px;
}
#map-canvas {
height: 230px;
}
.journey-panel {
max-height: 420px;
}
}
@media (max-width: 759px) {
.journey-grid {
grid-template-columns: 1fr;
}
.journey-panel {
max-height: none;
}
#map-canvas {
height: 320px;
}
.map-actions button {
padding: 8px;
}
.weather-card {
min-height: 290px;
}
.theme-grid {
gap: 10px;
}
.rail nav a {
min-height: 60px;
}
.leaflet-container .leaflet-control-attribution {
font-size: 9px;
}
}