From 6783a0b3ba5448bd653a717f08a2d5bb8d919901 Mon Sep 17 00:00:00 2001 From: Brian Smith Date: Sat, 12 Sep 2026 18:00:41 -0700 Subject: [PATCH] feat: add 3-way audio mode, viral share API, offline road-ready indicator, multi-app navigation (Google/Apple/Waze), and PWA car HUD install (v25) --- css/styles.css | 232 +++++++++++++++++++++++++++++++++++++++++++++++++ index.html | 88 ++++++++++++++++--- js/radar.js | 220 +++++++++++++++++++++++++++++++++++++++------- sw.js | 26 +++--- 4 files changed, 509 insertions(+), 57 deletions(-) diff --git a/css/styles.css b/css/styles.css index 538342c..f9901f9 100644 --- a/css/styles.css +++ b/css/styles.css @@ -850,6 +850,95 @@ body { transform: scale(0.98); } +/* Audio Alert Mode 3-Way Selector */ +.audio-mode-selector { + display: grid; + grid-template-columns: repeat(3, 1fr); + gap: 4px; + background: rgba(15, 23, 42, 0.7); + padding: 3px; + border-radius: 8px; + border: 1px solid rgba(255, 255, 255, 0.08); + margin-top: 2px; +} + +.btn-audio-mode { + padding: 6px 4px; + font-size: 0.72rem; + font-weight: 600; + border-radius: 6px; + background: transparent; + border: none; + color: #94a3b8; + display: flex; + align-items: center; + justify-content: center; + gap: 4px; + cursor: pointer; + transition: all 0.18s ease; + white-space: nowrap; +} + +.btn-audio-mode.active { + background: #0ea5e9; + color: #ffffff; + box-shadow: 0 2px 8px rgba(14, 165, 233, 0.4); +} + +.btn-audio-mode:hover:not(.active) { + color: #f1f5f9; + background: rgba(255, 255, 255, 0.05); +} + +/* Offline Road-Ready Status Pill */ +.tools-offline-status-pill { + display: flex; + align-items: center; + gap: 8px; + padding: 8px 10px; + background: rgba(16, 185, 129, 0.1); + border: 1px solid rgba(16, 185, 129, 0.25); + border-radius: 8px; + font-size: 0.72rem; + color: #a7f3d0; + font-weight: 500; + margin-bottom: 2px; +} + +.tools-offline-status-pill.offline-mode { + background: rgba(245, 158, 11, 0.15); + border-color: rgba(245, 158, 11, 0.35); + color: #fcd34d; +} + +.dot-online { + width: 7px; + height: 7px; + border-radius: 50%; + background: #10b981; + box-shadow: 0 0 6px #10b981; + flex-shrink: 0; +} + +.dot-offline { + width: 7px; + height: 7px; + border-radius: 50%; + background: #f59e0b; + box-shadow: 0 0 6px #f59e0b; + flex-shrink: 0; +} + +.btn-share-accent { + background: rgba(56, 189, 248, 0.12) !important; + border-color: rgba(56, 189, 248, 0.3) !important; + color: #38bdf8 !important; +} + +.btn-share-accent:hover { + background: rgba(56, 189, 248, 0.22) !important; +} + .btn-hud-action { padding: 9px 16px; background: var(--bg-hud); @@ -3636,6 +3725,137 @@ body { background: rgba(148, 163, 184, 0.25); } +/* Multi-App Navigation Row & Pin Share */ +.proof-nav-apps-block { + grid-column: 1 / -1; + display: flex; + flex-direction: column; + gap: 8px; + background: rgba(15, 23, 42, 0.7); + padding: 12px; + border-radius: 10px; + border: 1px solid rgba(255, 255, 255, 0.08); + margin-top: 4px; +} + +.proof-nav-label { + font-size: 0.65rem; + font-weight: 700; + letter-spacing: 0.8px; + color: #64748b; + text-transform: uppercase; +} + +.proof-nav-btn-grid { + display: grid; + grid-template-columns: repeat(4, 1fr); + gap: 6px; +} + +.btn-nav-app-link { + display: flex; + align-items: center; + justify-content: center; + gap: 5px; + padding: 8px 6px; + border-radius: 8px; + font-size: 0.75rem; + font-weight: 600; + text-decoration: none; + cursor: pointer; + transition: all 0.2s ease; + white-space: nowrap; + border: 1px solid transparent; +} + +.nav-google { + background: rgba(66, 133, 244, 0.15); + border-color: rgba(66, 133, 244, 0.35); + color: #93c5fd; +} +.nav-google:hover { + background: rgba(66, 133, 244, 0.28); + color: #ffffff; +} + +.nav-apple { + background: rgba(255, 255, 255, 0.08); + border-color: rgba(255, 255, 255, 0.2); + color: #f1f5f9; +} +.nav-apple:hover { + background: rgba(255, 255, 255, 0.18); + color: #ffffff; +} + +.nav-waze { + background: rgba(51, 204, 255, 0.15); + border-color: rgba(51, 204, 255, 0.35); + color: #67e8f9; +} +.nav-waze:hover { + background: rgba(51, 204, 255, 0.28); + color: #ffffff; +} + +.nav-share { + background: rgba(16, 185, 129, 0.15); + border-color: rgba(16, 185, 129, 0.35); + color: #6ee7b7; +} +.nav-share:hover { + background: rgba(16, 185, 129, 0.28); + color: #ffffff; +} + +/* Support Modal Viral Share Banner */ +.support-share-banner { + margin: 18px 0 12px; + padding: 14px 16px; + background: linear-gradient(135deg, rgba(30, 41, 59, 0.7), rgba(15, 23, 42, 0.85)); + border: 1px dashed rgba(56, 189, 248, 0.35); + border-radius: 12px; + display: flex; + align-items: center; + justify-content: space-between; + gap: 12px; +} + +.share-banner-title { + display: block; + font-size: 0.88rem; + font-weight: 700; + color: #f8fafc; + margin-bottom: 2px; +} + +.share-banner-desc { + font-size: 0.74rem; + color: #94a3b8; + margin: 0; +} + +.btn-support-share { + display: inline-flex; + align-items: center; + gap: 6px; + padding: 8px 14px; + background: #0284c7; + border: none; + border-radius: 8px; + color: #ffffff; + font-size: 0.8rem; + font-weight: 600; + cursor: pointer; + transition: all 0.2s ease; + white-space: nowrap; +} + +.btn-support-share:hover { + background: #0369a1; + transform: translateY(-1px); +} + .photo-preview-box.hidden { display: none !important; } @@ -3645,6 +3865,18 @@ body { grid-template-columns: 1fr 1fr; gap: 10px; } + .proof-nav-btn-grid { + grid-template-columns: 1fr 1fr; + gap: 8px; + } + .support-share-banner { + flex-direction: column; + align-items: flex-start; + } + .btn-support-share { + width: 100%; + justify-content: center; + } } /* Photo Verified Pin & Contested Pin on Map */ diff --git a/index.html b/index.html index 34ec459..697f50e 100644 --- a/index.html +++ b/index.html @@ -54,7 +54,7 @@ - + @@ -365,6 +365,42 @@ + +
+
AUDIO ALERT STYLE
+
+ + + +
+
+ + +
+
ROAD READINESS & SHARING
+
+ + 36 Cameras Cached • Ready for Dead Zones +
+ + +
+
DIAGNOSTICS & SYSTEM
- - - - - Maps ↗ - +
+
RE-ROUTE AROUND CAMERA:
+ +
@@ -1281,7 +1332,18 @@ Choose Amount - + + + +
+ +