diff --git a/static/css/fonts-local.css b/static/css/fonts-local.css
index 30fd2c5..668a3bd 100644
--- a/static/css/fonts-local.css
+++ b/static/css/fonts-local.css
@@ -1,3 +1,20 @@
/* Local font declarations for offline mode */
-/* Note: Roboto Condensed local files not yet bundled - this is a placeholder */
-/* Font is loaded via Google Fonts CDN; offline mode will fall back to Arial Narrow / system sans-serif */
+/* Roboto Condensed - variable font, one file covers all weights */
+
+@font-face {
+ font-family: 'Roboto Condensed';
+ font-style: normal;
+ font-weight: 300 700;
+ font-display: swap;
+ src: url('/static/vendor/fonts/RobotoCondensed-Latin.woff2') format('woff2');
+ unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
+}
+
+@font-face {
+ font-family: 'Roboto Condensed';
+ font-style: normal;
+ font-weight: 300 700;
+ font-display: swap;
+ src: url('/static/vendor/fonts/RobotoCondensed-LatinExt.woff2') format('woff2');
+ unicode-range: U+0100-02BA, U+02BD-02C5, U+02C7-02CC, U+02CE-02D7, U+02DD-02FF, U+0304, U+0308, U+0329, U+1D00-1DBF, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20C0, U+2113, U+2C60-2C7F, U+A720-A7FF;
+}
diff --git a/static/vendor/fonts/RobotoCondensed-Latin.woff2 b/static/vendor/fonts/RobotoCondensed-Latin.woff2
new file mode 100644
index 0000000..b3a4588
Binary files /dev/null and b/static/vendor/fonts/RobotoCondensed-Latin.woff2 differ
diff --git a/static/vendor/fonts/RobotoCondensed-LatinExt.woff2 b/static/vendor/fonts/RobotoCondensed-LatinExt.woff2
new file mode 100644
index 0000000..1d4c7ed
Binary files /dev/null and b/static/vendor/fonts/RobotoCondensed-LatinExt.woff2 differ
diff --git a/templates/adsb_dashboard.html b/templates/adsb_dashboard.html
index 1ac6380..2866461 100644
--- a/templates/adsb_dashboard.html
+++ b/templates/adsb_dashboard.html
@@ -6,9 +6,9 @@
AIRCRAFT RADAR // INTERCEPT - See the Invisible
{% if offline_settings.fonts_source == 'local' %}
-
+
{% else %}
-
+
{% endif %}
{% if offline_settings.assets_source == 'local' %}
diff --git a/templates/adsb_history.html b/templates/adsb_history.html
index 5ca1248..397dcb1 100644
--- a/templates/adsb_history.html
+++ b/templates/adsb_history.html
@@ -5,9 +5,9 @@
ADS-B History // INTERCEPT
{% if offline_settings.fonts_source == 'local' %}
-
+
{% else %}
-
+
{% endif %}
diff --git a/templates/ais_dashboard.html b/templates/ais_dashboard.html
index 216ce83..891d091 100644
--- a/templates/ais_dashboard.html
+++ b/templates/ais_dashboard.html
@@ -6,9 +6,9 @@
VESSEL RADAR // INTERCEPT - See the Invisible
{% if offline_settings.fonts_source == 'local' %}
-
+
{% else %}
-
+
{% endif %}
{% if offline_settings.assets_source == 'local' %}
diff --git a/templates/index.html b/templates/index.html
index 342d7d9..acd96e0 100644
--- a/templates/index.html
+++ b/templates/index.html
@@ -25,8 +25,12 @@
window.INTERCEPT_DEFAULT_LON = {{ default_longitude | tojson }};
-
+
+ {% if offline_settings.fonts_source == 'local' %}
+
+ {% else %}
+ {% endif %}
{% if offline_settings.assets_source == 'local' %}
diff --git a/templates/layout/base.html b/templates/layout/base.html
index 4046cc6..4450f65 100644
--- a/templates/layout/base.html
+++ b/templates/layout/base.html
@@ -6,8 +6,12 @@
{% block title %}iNTERCEPT{% endblock %} // iNTERCEPT
- {# Fonts #}
+ {# Fonts - Conditional CDN/Local loading #}
+ {% if offline_settings and offline_settings.fonts_source == 'local' %}
+
+ {% else %}
+ {% endif %}
{# Core CSS (Design System) #}
diff --git a/templates/network_monitor.html b/templates/network_monitor.html
index c052a24..fbbe29f 100644
--- a/templates/network_monitor.html
+++ b/templates/network_monitor.html
@@ -5,9 +5,9 @@
Network Monitor // INTERCEPT
{% if offline_settings.fonts_source == 'local' %}
-
+
{% else %}
-
+
{% endif %}
diff --git a/templates/satellite_dashboard.html b/templates/satellite_dashboard.html
index b2702e9..8b46dcf 100644
--- a/templates/satellite_dashboard.html
+++ b/templates/satellite_dashboard.html
@@ -6,9 +6,9 @@
SATELLITE COMMAND // iNTERCEPT - See the Invisible
{% if offline_settings.fonts_source == 'local' %}
-
+
{% else %}
-
+
{% endif %}
{% if offline_settings.assets_source == 'local' %}