diff --git a/app.py b/app.py
index 2dfb167..373b368 100644
--- a/app.py
+++ b/app.py
@@ -105,7 +105,7 @@ def inject_offline_settings():
'enabled': get_setting('offline.enabled', False),
'assets_source': get_setting('offline.assets_source', 'cdn'),
'fonts_source': get_setting('offline.fonts_source', 'cdn'),
- 'tile_provider': get_setting('offline.tile_provider', 'openstreetmap'),
+ 'tile_provider': get_setting('offline.tile_provider', 'cartodb_dark_cyan'),
'tile_server_url': get_setting('offline.tile_server_url', '')
}
}
diff --git a/routes/offline.py b/routes/offline.py
index 04e31d4..a35b6e9 100644
--- a/routes/offline.py
+++ b/routes/offline.py
@@ -13,7 +13,7 @@ OFFLINE_DEFAULTS = {
'offline.enabled': False,
'offline.assets_source': 'cdn',
'offline.fonts_source': 'cdn',
- 'offline.tile_provider': 'openstreetmap',
+ 'offline.tile_provider': 'cartodb_dark_cyan',
'offline.tile_server_url': ''
}
diff --git a/static/css/settings.css b/static/css/settings.css
index ac3d2e7..9641b2b 100644
--- a/static/css/settings.css
+++ b/static/css/settings.css
@@ -421,6 +421,11 @@
color: var(--accent-cyan, #00d4ff);
}
+/* Map tile variants */
+.tile-layer-cyan {
+ filter: sepia(0.35) hue-rotate(185deg) saturate(1.75) brightness(1.06) contrast(1.05);
+}
+
/* Responsive */
@media (max-width: 640px) {
.settings-modal.active {
diff --git a/static/js/core/settings-manager.js b/static/js/core/settings-manager.js
index 11fae2d..f5c8b9d 100644
--- a/static/js/core/settings-manager.js
+++ b/static/js/core/settings-manager.js
@@ -8,7 +8,7 @@ const Settings = {
'offline.enabled': false,
'offline.assets_source': 'cdn',
'offline.fonts_source': 'cdn',
- 'offline.tile_provider': 'cartodb_dark',
+ 'offline.tile_provider': 'cartodb_dark_cyan',
'offline.tile_server_url': ''
},
@@ -24,6 +24,14 @@ const Settings = {
attribution: '© OSM © CARTO',
subdomains: 'abcd'
},
+ cartodb_dark_cyan: {
+ url: 'https://cartodb-basemaps-{s}.global.ssl.fastly.net/dark_all/{z}/{x}/{y}.png',
+ attribution: '© OSM © CARTO',
+ subdomains: 'abcd',
+ options: {
+ className: 'tile-layer-cyan'
+ }
+ },
cartodb_light: {
url: 'https://cartodb-basemaps-{s}.global.ssl.fastly.net/light_all/{z}/{x}/{y}.png',
attribution: '© OSM © CARTO',
@@ -213,7 +221,8 @@ const Settings = {
const config = this.getTileConfig();
const options = {
attribution: config.attribution,
- maxZoom: 19
+ maxZoom: 19,
+ ...(config.options || {})
};
if (config.subdomains) {
options.subdomains = config.subdomains;
@@ -351,7 +360,8 @@ const Settings = {
// Add new tile layer
const options = {
attribution: config.attribution,
- maxZoom: 19
+ maxZoom: 19,
+ ...(config.options || {})
};
if (config.subdomains) {
options.subdomains = config.subdomains;
diff --git a/static/js/modes/meshtastic.js b/static/js/modes/meshtastic.js
index 1e3387f..ee98fe7 100644
--- a/static/js/modes/meshtastic.js
+++ b/static/js/modes/meshtastic.js
@@ -117,12 +117,13 @@ const Meshtastic = (function() {
Settings.createTileLayer().addTo(meshMap);
Settings.registerMap(meshMap);
} else {
- L.tileLayer('https://cartodb-basemaps-{s}.global.ssl.fastly.net/dark_all/{z}/{x}/{y}.png', {
- attribution: '© OSM © CARTO',
- maxZoom: 19,
- subdomains: 'abcd'
- }).addTo(meshMap);
- }
+ L.tileLayer('https://cartodb-basemaps-{s}.global.ssl.fastly.net/dark_all/{z}/{x}/{y}.png', {
+ attribution: '© OSM © CARTO',
+ maxZoom: 19,
+ subdomains: 'abcd',
+ className: 'tile-layer-cyan'
+ }).addTo(meshMap);
+ }
// Handle resize
setTimeout(() => {
diff --git a/static/js/modes/sstv.js b/static/js/modes/sstv.js
index 2392afc..fa28af2 100644
--- a/static/js/modes/sstv.js
+++ b/static/js/modes/sstv.js
@@ -183,10 +183,11 @@ const SSTV = (function() {
Settings.registerMap(issMap);
} else {
// Fallback to dark theme tiles
- L.tileLayer('https://{s}.basemaps.cartocdn.com/dark_all/{z}/{x}/{y}{r}.png', {
- maxZoom: 19
- }).addTo(issMap);
- }
+ L.tileLayer('https://{s}.basemaps.cartocdn.com/dark_all/{z}/{x}/{y}{r}.png', {
+ maxZoom: 19,
+ className: 'tile-layer-cyan'
+ }).addTo(issMap);
+ }
// Create ISS icon
const issIcon = L.divIcon({
diff --git a/templates/adsb_dashboard.html b/templates/adsb_dashboard.html
index 7f690e0..9a12a1c 100644
--- a/templates/adsb_dashboard.html
+++ b/templates/adsb_dashboard.html
@@ -2391,7 +2391,8 @@ sudo make install
L.tileLayer('https://cartodb-basemaps-{s}.global.ssl.fastly.net/dark_all/{z}/{x}/{y}.png', {
attribution: '© OSM © CARTO',
maxZoom: 19,
- subdomains: 'abcd'
+ subdomains: 'abcd',
+ className: 'tile-layer-cyan'
}).addTo(radarMap);
}
diff --git a/templates/ais_dashboard.html b/templates/ais_dashboard.html
index 86d0d5d..492ac68 100644
--- a/templates/ais_dashboard.html
+++ b/templates/ais_dashboard.html
@@ -413,7 +413,8 @@
L.tileLayer('https://cartodb-basemaps-{s}.global.ssl.fastly.net/dark_all/{z}/{x}/{y}.png', {
attribution: '© OSM © CARTO',
maxZoom: 19,
- subdomains: 'abcd'
+ subdomains: 'abcd',
+ className: 'tile-layer-cyan'
}).addTo(vesselMap);
}
diff --git a/templates/index.html b/templates/index.html
index a230e89..1127c12 100644
--- a/templates/index.html
+++ b/templates/index.html
@@ -7969,7 +7969,8 @@
L.tileLayer('https://cartodb-basemaps-{s}.global.ssl.fastly.net/dark_all/{z}/{x}/{y}.png', {
attribution: '© OSM © CARTO',
maxZoom: 19,
- subdomains: 'abcd'
+ subdomains: 'abcd',
+ className: 'tile-layer-cyan'
}).addTo(aprsMap);
}
@@ -8892,7 +8893,8 @@
L.tileLayer('https://cartodb-basemaps-{s}.global.ssl.fastly.net/dark_all/{z}/{x}/{y}.png', {
attribution: '© OSM © CARTO',
maxZoom: 19,
- subdomains: 'abcd'
+ subdomains: 'abcd',
+ className: 'tile-layer-cyan'
}).addTo(groundTrackMap);
}
diff --git a/templates/partials/settings-modal.html b/templates/partials/settings-modal.html
index ece566a..3448563 100644
--- a/templates/partials/settings-modal.html
+++ b/templates/partials/settings-modal.html
@@ -72,6 +72,7 @@