feat(v27): directional FOV approach filter, dynamic ETA countdown, windshield mirror HUD, stealth AMOLED night mode, 1-tap driving sighting stamp, audio boost and steering haptics

This commit is contained in:
2026-09-12 19:01:06 -07:00
parent 671c908c46
commit 4f8c67e6f6
4 changed files with 862 additions and 128 deletions
+266 -17
View File
@@ -489,15 +489,15 @@ body {
/* HUD Metrics */
.hud-metrics-row {
display: grid;
grid-template-columns: 1fr 1fr;
gap: 12px;
grid-template-columns: repeat(3, 1fr);
gap: 8px;
}
.hud-metric-box {
background: rgba(7, 9, 14, 0.6);
border: 1px solid var(--border-subtle);
border-radius: var(--radius-md);
padding: 12px;
padding: 10px 4px;
text-align: center;
}
@@ -2948,7 +2948,7 @@ body {
pointer-events: auto;
}
/* Compact Floating Action Button on Mobile */
/* Compact Floating Action Buttons on Mobile */
.driver-fab-container {
position: absolute;
bottom: max(18px, env(safe-area-inset-bottom));
@@ -2956,22 +2956,37 @@ body {
z-index: 500;
margin: 0;
pointer-events: auto;
display: flex;
flex-direction: row;
align-items: center;
gap: 8px;
}
.btn-driver-fab {
padding: 10px 16px;
padding: 10px 14px;
border-radius: 9999px;
gap: 8px;
box-shadow: 0 4px 16px rgba(239, 68, 68, 0.45);
gap: 6px;
box-shadow: 0 4px 16px rgba(0, 0, 0, 0.4);
}
.btn-fab-stamp {
background: linear-gradient(135deg, #0284c7, #0369a1);
border: 1.5px solid rgba(56, 189, 248, 0.5);
box-shadow: 0 4px 16px rgba(2, 132, 199, 0.45);
}
.btn-fab-photo {
background: linear-gradient(135deg, #ef4444, #dc2626);
border: 1.5px solid rgba(255, 255, 255, 0.3);
box-shadow: 0 4px 16px rgba(239, 68, 68, 0.45);
}
.fab-icon-glow {
font-size: 1.25rem;
font-size: 1.15rem;
}
.fab-main-title {
font-size: 0.84rem;
font-size: 0.82rem;
font-weight: 700;
}
@@ -3277,37 +3292,56 @@ body {
box-shadow: 0 0 8px rgba(56, 189, 248, 0.3);
}
/* 3. Giant 1-Tap "Log Flock Camera" Driver FAB */
/* 3. Floating Action Buttons: 1-Tap Sighting Stamp & Photo Log */
.driver-fab-container {
position: absolute;
bottom: 25px;
right: 25px;
z-index: 1100;
display: flex;
flex-direction: column;
gap: 10px;
align-items: flex-end;
}
.btn-driver-fab {
display: flex;
align-items: center;
gap: 12px;
background: linear-gradient(135deg, #ef4444 0%, #b91c1c 100%);
color: #ffffff;
border: 2px solid rgba(255, 255, 255, 0.4);
border-radius: 50px;
padding: 14px 22px;
font-size: 0.95rem;
padding: 12px 20px;
font-size: 0.92rem;
font-weight: 700;
letter-spacing: 0.5px;
cursor: pointer;
box-shadow: 0 6px 25px rgba(239, 68, 68, 0.55), 0 0 15px rgba(239, 68, 68, 0.4);
transition: all 0.15s cubic-bezier(0.4, 0, 0.2, 1);
user-select: none;
touch-action: manipulation;
}
.btn-driver-fab:hover {
.btn-fab-stamp {
background: linear-gradient(135deg, #0284c7 0%, #0369a1 100%);
border: 2px solid rgba(56, 189, 248, 0.6);
box-shadow: 0 6px 25px rgba(2, 132, 199, 0.5), 0 0 15px rgba(56, 189, 248, 0.35);
}
.btn-fab-stamp:hover {
transform: translateY(-2px) scale(1.02);
border-color: #38bdf8;
box-shadow: 0 8px 30px rgba(2, 132, 199, 0.7), 0 0 22px rgba(56, 189, 248, 0.5);
}
.btn-fab-photo {
background: linear-gradient(135deg, #ef4444 0%, #b91c1c 100%);
border: 2px solid rgba(255, 255, 255, 0.4);
box-shadow: 0 6px 25px rgba(239, 68, 68, 0.55), 0 0 15px rgba(239, 68, 68, 0.4);
}
.btn-fab-photo:hover {
transform: translateY(-2px) scale(1.02);
box-shadow: 0 8px 30px rgba(239, 68, 68, 0.75), 0 0 25px rgba(239, 68, 68, 0.5);
border-color: #ffffff;
box-shadow: 0 8px 30px rgba(239, 68, 68, 0.75), 0 0 25px rgba(239, 68, 68, 0.5);
}
.btn-driver-fab:active {
@@ -4689,3 +4723,218 @@ body {
grid-template-columns: 1fr;
}
}
/* ==========================================================================
v27 DRIVER-CENTRIC POLISH REFINEMENTS
1. Directional Approach Angle & FOV Badges
2. Time-to-Zone Intercept Dynamic Countdown
3. Windshield Reflection Mirror Mode & Stealth AMOLED Mode
4. Instant 1-Tap Driving Sighting Stamp
5. Tools Drawer Cockpit HUD & Sound/Haptics Controls
========================================================================== */
/* Directional Approach Angle Badges */
.hud-approach-badge {
display: inline-flex;
align-items: center;
gap: 4px;
font-size: 0.66rem;
font-weight: 700;
padding: 3px 8px;
border-radius: 9999px;
letter-spacing: 0.04em;
text-transform: uppercase;
transition: all 0.25s ease;
white-space: nowrap;
}
.hud-approach-badge.approach-direct {
background: rgba(239, 68, 68, 0.22);
color: #f87171;
border: 1px solid rgba(239, 68, 68, 0.5);
box-shadow: 0 0 10px rgba(239, 68, 68, 0.35);
animation: pulse-approach 1.2s infinite alternate;
}
@keyframes pulse-approach {
0% { transform: scale(1); box-shadow: 0 0 6px rgba(239, 68, 68, 0.3); }
100% { transform: scale(1.04); box-shadow: 0 0 12px rgba(239, 68, 68, 0.6); }
}
.hud-approach-badge.approach-cross {
background: rgba(245, 158, 11, 0.2);
color: #fbbf24;
border: 1px solid rgba(245, 158, 11, 0.45);
}
.hud-approach-badge.approach-away {
background: rgba(148, 163, 184, 0.15);
color: #94a3b8;
border: 1px solid rgba(148, 163, 184, 0.3);
}
.hud-approach-badge.approach-none {
background: rgba(16, 185, 129, 0.14);
color: #34d399;
border: 1px solid rgba(16, 185, 129, 0.3);
}
/* Time-to-Zone Intercept Countdown */
#hud-eta-box {
transition: all 0.2s ease;
}
#hud-eta-box .hud-metric-number {
color: #38bdf8;
text-shadow: 0 0 8px rgba(56, 189, 248, 0.3);
}
/* Windshield Reflection Mirror Mode (Inverts horizontally for dashboard reflection) */
.mirror-hud {
transform: scaleX(-1) !important;
transform-origin: center center;
}
/* Stealth AMOLED Pitch Dark Mode (#000000 Zero Cockpit Glare) */
body.stealth-amoled {
background-color: #000000 !important;
color: #e2e8f0;
}
body.stealth-amoled .radar-view-container,
body.stealth-amoled .radar-map-canvas,
body.stealth-amoled #radar-map {
background-color: #000000 !important;
filter: brightness(0.4) contrast(1.5) saturate(0.2) !important;
}
body.stealth-amoled .driver-hud {
background: #000000 !important;
border-color: #1e293b !important;
box-shadow: 0 0 24px rgba(0, 0, 0, 0.95), 0 0 0 1px #111827 !important;
backdrop-filter: none !important;
-webkit-backdrop-filter: none !important;
}
body.stealth-amoled .hud-capsule-header {
background: #000000 !important;
border-color: #1e293b !important;
}
body.stealth-amoled .hud-metric-box {
background: #040608 !important;
border-color: #1e293b !important;
}
body.stealth-amoled .hud-metric-number {
color: #00f0ff !important;
text-shadow: 0 0 8px rgba(0, 240, 255, 0.45) !important;
}
body.stealth-amoled .map-top-controls {
background: rgba(0, 0, 0, 0.98) !important;
border-color: #1e293b !important;
}
body.stealth-amoled .app-header,
body.stealth-amoled .site-nav {
background: #000000 !important;
border-color: #1e293b !important;
}
/* Tools Drawer Toggle Grid */
.tools-toggle-grid {
display: grid;
grid-template-columns: 1fr 1fr;
gap: 8px;
}
@media (max-width: 420px) {
.tools-toggle-grid {
grid-template-columns: 1fr;
}
}
/* Saved Sighting Stamps in Tools Drawer */
.stamps-list-container {
display: flex;
flex-direction: column;
gap: 6px;
max-height: 140px;
overflow-y: auto;
padding: 4px;
}
.stamps-empty-hint {
font-size: 0.76rem;
color: var(--text-muted);
line-height: 1.4;
margin: 0;
font-style: italic;
}
.stamp-item-card {
display: flex;
align-items: center;
justify-content: space-between;
background: rgba(255, 255, 255, 0.04);
border: 1px solid rgba(255, 255, 255, 0.08);
border-radius: 6px;
padding: 6px 10px;
font-size: 0.74rem;
color: #cbd5e1;
transition: background 0.15s ease;
}
.stamp-item-card:hover {
background: rgba(56, 189, 248, 0.1);
border-color: rgba(56, 189, 248, 0.3);
}
.stamp-item-left {
display: flex;
align-items: center;
gap: 6px;
}
.stamp-badge-zap {
color: #f59e0b;
font-weight: bold;
}
.btn-mini-clear {
background: none;
border: none;
color: #94a3b8;
font-size: 0.72rem;
cursor: pointer;
padding: 2px 6px;
border-radius: 4px;
transition: all 0.15s ease;
}
.btn-mini-clear:hover {
background: rgba(239, 68, 68, 0.15);
color: #ef4444;
}
/* Temporary Stamp Marker Animation on Map */
.stamp-pulse-pin {
display: flex;
align-items: center;
justify-content: center;
background: #f59e0b;
color: #000;
font-weight: 800;
font-size: 14px;
border-radius: 50%;
border: 2px solid #fff;
box-shadow: 0 0 16px rgba(245, 158, 11, 0.85);
animation: stamp-drop 0.4s cubic-bezier(0.175, 0.885, 0.32, 1.275);
}
@keyframes stamp-drop {
0% { transform: scale(0.3) translateY(-20px); opacity: 0; }
70% { transform: scale(1.2) translateY(3px); opacity: 1; }
100% { transform: scale(1) translateY(0); opacity: 1; }
}