Tracker ordering fix + March–April fixture entries #1

Merged
m038 merged 34 commits from experimental-polar-steps into main 2026-06-18 22:41:55 +02:00
4 changed files with 60 additions and 42 deletions
Showing only changes of commit 5a3f2bc0c5 - Show all commits
+53 -35
View File
@@ -347,12 +347,12 @@ body {
.lightbox-prev:hover, .lightbox-prev:hover,
.lightbox-next:hover { background: rgba(255,255,255,0.26); } .lightbox-next:hover { background: rgba(255,255,255,0.26); }
/* ── Map page ───────────────────────────────────────────────────────────────── */ /* ── Map page ───────────────────────────────────────────────────────────────── */
.map-page .site-main { max-width: none; padding: 0; } .map-page .site-main { max-width: none; padding: 0; }
.map-container { .map-container {
height: calc(100vh - 61px); height: calc(100vh - var(--site-header-height));
width: 100%; width: 100%;
} }
@@ -361,72 +361,87 @@ body {
align-items: center; align-items: center;
justify-content: center; justify-content: center;
height: 100%; height: 100%;
color: #666; color: var(--color-ink-muted);
font-style: italic; font-style: italic;
} }
/* ── Stats page ─────────────────────────────────────────────────────────────── */ /* ── Stats page ─────────────────────────────────────────────────────────────── */
.stats-heading {
font-family: var(--font-display);
font-size: var(--text-2xl);
font-weight: 400;
margin-bottom: var(--space-8);
color: var(--color-ink);
}
.stats-grid { .stats-grid {
display: grid; display: grid;
grid-template-columns: repeat(2, 1fr); grid-template-columns: repeat(2, 1fr);
gap: 1rem; gap: var(--space-4);
margin-bottom: 2rem; margin-bottom: var(--space-8);
} }
.stat-block { .stat-block {
border: 1px solid #e5e5e5; background: var(--color-canvas);
border-radius: 8px; border: 1px solid var(--color-border);
padding: 1.25rem 1rem; border-radius: var(--radius-md);
padding: var(--space-6) var(--space-5);
text-align: center; text-align: center;
box-shadow: 0 1px 3px rgba(0,0,0,0.06); box-shadow: var(--shadow-sm);
} }
.stat-value { .stat-value {
display: block; display: block;
font-size: 2.5rem; font-family: var(--font-display);
font-weight: 700; font-size: var(--text-3xl);
color: #0066cc; font-weight: 400;
color: var(--color-accent);
line-height: 1.1; line-height: 1.1;
margin-bottom: 0.3rem; margin-bottom: var(--space-2);
} }
.stat-label { .stat-label {
display: block; display: block;
font-size: 0.8rem; font-size: var(--text-xs);
color: #666; font-weight: 600;
color: var(--color-ink-muted);
text-transform: uppercase; text-transform: uppercase;
letter-spacing: 0.04em; letter-spacing: 0.07em;
} }
.stats-countries { .stats-countries {
font-size: 0.9rem; font-size: var(--text-sm);
color: #444; color: var(--color-ink-2);
text-align: center; text-align: center;
line-height: 1.8; line-height: 1.9;
} }
.stats-countries-label { .stats-countries-label {
font-weight: 600; font-weight: 600;
display: block; display: block;
margin-bottom: 0.4rem; margin-bottom: var(--space-2);
color: #1a1a1a; color: var(--color-ink);
text-transform: uppercase;
font-size: var(--text-xs);
letter-spacing: 0.07em;
} }
.stats-note { .stats-note {
font-size: 0.78rem; font-size: var(--text-xs);
color: #999; color: var(--color-ink-muted);
text-align: center; text-align: center;
margin-top: 1.5rem; margin-top: var(--space-6);
} }
/* ── Mini-map on tracker feed ───────────────────────────────────────────────── */ /* ── Mini-map on tracker feed ───────────────────────────────────────────────── */
.feed-map-wrap { .feed-map-wrap {
margin-bottom: 2rem; margin-bottom: var(--space-10);
border-radius: 8px; border-radius: var(--radius-md);
overflow: hidden; overflow: hidden;
border: 1px solid #e5e5e5; border: 1px solid var(--color-border);
box-shadow: var(--shadow-sm);
} }
.feed-map { .feed-map {
@@ -435,20 +450,23 @@ body {
} }
@media (min-width: 520px) { @media (min-width: 520px) {
.feed-map { height: 320px; } .feed-map { height: 300px; }
} }
.feed-map-link { .feed-map-link {
display: block; display: block;
text-align: right; text-align: right;
font-size: 0.8rem; font-size: var(--text-xs);
color: #0066cc; font-weight: 500;
color: var(--color-accent);
text-decoration: none; text-decoration: none;
padding: 0.4rem 0.6rem; padding: var(--space-2) var(--space-4);
background: #fafafa; background: var(--color-paper);
border-top: 1px solid #e5e5e5; border-top: 1px solid var(--color-border);
} }
.feed-map-link:hover { color: var(--color-accent-hover); }
/* ── Login form ─────────────────────────────────────────────────────────────── */ /* ── Login form ─────────────────────────────────────────────────────────────── */
.login-form { max-width: 400px; margin: var(--space-8) auto; padding: 0 var(--space-4); } .login-form { max-width: 400px; margin: var(--space-8) auto; padding: 0 var(--space-4); }
+4 -4
View File
@@ -48,17 +48,17 @@ if (ENTRIES.length === 0) {
var latLngs = ENTRIES.map(function(e) { return [parseFloat(e.lat), parseFloat(e.lng)]; }); var latLngs = ENTRIES.map(function(e) { return [parseFloat(e.lat), parseFloat(e.lng)]; });
// Route polyline // Route polyline
L.polyline(latLngs, { color: '#0066cc', weight: 3, opacity: 0.7 }).addTo(map); L.polyline(latLngs, { color: '#1F6B5A', weight: 3, opacity: 0.7 }).addTo(map);
// Markers // Markers
ENTRIES.forEach(function(entry, i) { ENTRIES.forEach(function(entry, i) {
var isLatest = (i === ENTRIES.length - 1); var isLatest = (i === ENTRIES.length - 1);
var size = isLatest ? 18 : 12; var size = isLatest ? 18 : 12;
var color = isLatest ? '#0044aa' : '#0066cc'; var color = isLatest ? '#155244' : '#1F6B5A';
var icon = L.divIcon({ var icon = L.divIcon({
className: '', className: '',
html: '<div style="width:' + size + 'px;height:' + size + 'px;background:' + color + ';border:2px solid #fff;border-radius:50%;box-shadow:0 1px 4px rgba(0,0,0,0.4);' + (isLatest ? 'box-shadow:0 0 0 3px rgba(0,102,204,0.3),0 1px 4px rgba(0,0,0,0.4);' : '') + '"></div>', html: '<div style="width:' + size + 'px;height:' + size + 'px;background:' + color + ';border:2px solid #fff;border-radius:50%;box-shadow:0 1px 4px rgba(0,0,0,0.4);' + (isLatest ? 'box-shadow:0 0 0 3px rgba(31,107,90,0.3),0 1px 4px rgba(0,0,0,0.4);' : '') + '"></div>',
iconSize: [size, size], iconSize: [size, size],
iconAnchor: [size/2, size/2], iconAnchor: [size/2, size/2],
popupAnchor: [0, -(size/2 + 4)] popupAnchor: [0, -(size/2 + 4)]
@@ -70,7 +70,7 @@ if (ENTRIES.length === 0) {
} }
popupContent += '<div style="font-size:0.75rem;color:#666;margin-bottom:2px;">📅 ' + entry.date + '</div>'; popupContent += '<div style="font-size:0.75rem;color:#666;margin-bottom:2px;">📅 ' + entry.date + '</div>';
popupContent += '<div style="font-weight:600;font-size:0.9rem;margin-bottom:8px;">' + entry.title + '</div>'; popupContent += '<div style="font-weight:600;font-size:0.9rem;margin-bottom:8px;">' + entry.title + '</div>';
popupContent += '<a href="' + entry.url + '" style="color:#0066cc;font-size:0.85rem;text-decoration:none;">Read entry →</a>'; popupContent += '<a href="' + entry.url + '" style="color:#1F6B5A;font-size:0.85rem;text-decoration:none;">Read entry →</a>';
popupContent += '</div>'; popupContent += '</div>';
L.marker([parseFloat(entry.lat), parseFloat(entry.lng)], { icon: icon }) L.marker([parseFloat(entry.lat), parseFloat(entry.lng)], { icon: icon })
+1 -1
View File
@@ -45,7 +45,7 @@
{% endfor %} {% endfor %}
<div class="stats-page"> <div class="stats-page">
<h1 style="font-size:1.5rem;margin-bottom:1.5rem;">Trip Statistics</h1> <h1 class="stats-heading">Trip Statistics</h1>
<div class="stats-grid"> <div class="stats-grid">
<div class="stat-block"> <div class="stat-block">
@@ -35,13 +35,13 @@ L.tileLayer('https://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png', {
var latLngs = FEED_ENTRIES.map(function(e) { return [parseFloat(e.lat), parseFloat(e.lng)]; }); var latLngs = FEED_ENTRIES.map(function(e) { return [parseFloat(e.lat), parseFloat(e.lng)]; });
if (latLngs.length > 1) { if (latLngs.length > 1) {
L.polyline(latLngs, { color: '#0066cc', weight: 3, opacity: 0.7 }).addTo(map); L.polyline(latLngs, { color: '#1F6B5A', weight: 3, opacity: 0.7 }).addTo(map);
} }
FEED_ENTRIES.forEach(function(entry, i) { FEED_ENTRIES.forEach(function(entry, i) {
var isLatest = (i === FEED_ENTRIES.length - 1); var isLatest = (i === FEED_ENTRIES.length - 1);
var size = isLatest ? 16 : 10; var size = isLatest ? 16 : 10;
var color = isLatest ? '#0044aa' : '#0066cc'; var color = isLatest ? '#155244' : '#1F6B5A';
var icon = L.divIcon({ var icon = L.divIcon({
className: '', className: '',
html: '<div style="width:' + size + 'px;height:' + size + 'px;background:' + color + ';border:2px solid #fff;border-radius:50%;box-shadow:0 1px 3px rgba(0,0,0,0.35);cursor:pointer;"></div>', html: '<div style="width:' + size + 'px;height:' + size + 'px;background:' + color + ';border:2px solid #fff;border-radius:50%;box-shadow:0 1px 3px rgba(0,0,0,0.35);cursor:pointer;"></div>',