fix(modal): fix desktop support modal positioning and bind close button (v22)
This commit is contained in:
+49
-39
@@ -2144,9 +2144,8 @@ body {
|
|||||||
padding: 0;
|
padding: 0;
|
||||||
box-shadow: 0 25px 50px -12px rgba(0, 0, 0, 0.8), var(--shadow-glow);
|
box-shadow: 0 25px 50px -12px rgba(0, 0, 0, 0.8), var(--shadow-glow);
|
||||||
position: fixed;
|
position: fixed;
|
||||||
top: 50%;
|
inset: 0;
|
||||||
left: 50%;
|
margin: auto;
|
||||||
transform: translate(-50%, -50%);
|
|
||||||
max-height: 88vh;
|
max-height: 88vh;
|
||||||
max-height: 88dvh;
|
max-height: 88dvh;
|
||||||
overflow-y: auto !important;
|
overflow-y: auto !important;
|
||||||
@@ -3642,15 +3641,26 @@ body {
|
|||||||
========================================================================== */
|
========================================================================== */
|
||||||
.support-dialog {
|
.support-dialog {
|
||||||
max-width: 860px;
|
max-width: 860px;
|
||||||
|
max-height: 92vh;
|
||||||
|
max-height: 92dvh;
|
||||||
background: radial-gradient(circle at 50% 0%, rgba(30, 41, 59, 0.95), rgba(10, 14, 23, 0.98));
|
background: radial-gradient(circle at 50% 0%, rgba(30, 41, 59, 0.95), rgba(10, 14, 23, 0.98));
|
||||||
border: 1px solid rgba(245, 158, 11, 0.35);
|
border: 1px solid rgba(245, 158, 11, 0.35);
|
||||||
box-shadow: 0 25px 60px -10px rgba(0, 0, 0, 0.85), 0 0 30px rgba(245, 158, 11, 0.15);
|
box-shadow: 0 25px 60px -10px rgba(0, 0, 0, 0.85), 0 0 30px rgba(245, 158, 11, 0.15);
|
||||||
}
|
}
|
||||||
|
|
||||||
.support-modal-header {
|
.support-modal-header {
|
||||||
|
padding: 16px 22px;
|
||||||
border-bottom: 1px solid rgba(255, 255, 255, 0.08);
|
border-bottom: 1px solid rgba(255, 255, 255, 0.08);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.support-modal-header .modal-agency-meta {
|
||||||
|
display: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
.support-modal-body {
|
||||||
|
padding: 14px 22px 16px;
|
||||||
|
}
|
||||||
|
|
||||||
.support-dev-pill {
|
.support-dev-pill {
|
||||||
display: inline-flex;
|
display: inline-flex;
|
||||||
align-items: center;
|
align-items: center;
|
||||||
@@ -3658,20 +3668,20 @@ body {
|
|||||||
background: rgba(239, 68, 68, 0.14);
|
background: rgba(239, 68, 68, 0.14);
|
||||||
border: 1px solid rgba(239, 68, 68, 0.35);
|
border: 1px solid rgba(239, 68, 68, 0.35);
|
||||||
border-radius: 9999px;
|
border-radius: 9999px;
|
||||||
padding: 3px 10px;
|
padding: 2px 9px;
|
||||||
font-size: 0.72rem;
|
font-size: 0.68rem;
|
||||||
font-weight: 700;
|
font-weight: 700;
|
||||||
text-transform: uppercase;
|
text-transform: uppercase;
|
||||||
letter-spacing: 0.05em;
|
letter-spacing: 0.05em;
|
||||||
color: #fca5a5;
|
color: #fca5a5;
|
||||||
margin-bottom: 8px;
|
margin-bottom: 4px;
|
||||||
}
|
}
|
||||||
|
|
||||||
.support-intro-text {
|
.support-intro-text {
|
||||||
font-size: 0.92rem;
|
font-size: 0.84rem;
|
||||||
line-height: 1.6;
|
line-height: 1.45;
|
||||||
color: var(--text-muted);
|
color: var(--text-muted);
|
||||||
margin-bottom: 20px;
|
margin-bottom: 12px;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Monthly Subscription Banner */
|
/* Monthly Subscription Banner */
|
||||||
@@ -3679,14 +3689,14 @@ body {
|
|||||||
display: flex;
|
display: flex;
|
||||||
align-items: center;
|
align-items: center;
|
||||||
justify-content: space-between;
|
justify-content: space-between;
|
||||||
gap: 20px;
|
gap: 16px;
|
||||||
background: linear-gradient(135deg, rgba(16, 185, 129, 0.12), rgba(6, 182, 212, 0.15), rgba(15, 23, 42, 0.9));
|
background: linear-gradient(135deg, rgba(16, 185, 129, 0.12), rgba(6, 182, 212, 0.15), rgba(15, 23, 42, 0.9));
|
||||||
border: 1.5px solid rgba(16, 185, 129, 0.45);
|
border: 1.5px solid rgba(16, 185, 129, 0.45);
|
||||||
border-radius: 18px;
|
border-radius: 14px;
|
||||||
padding: 22px 24px;
|
padding: 12px 18px;
|
||||||
text-decoration: none;
|
text-decoration: none;
|
||||||
color: inherit;
|
color: inherit;
|
||||||
margin-bottom: 22px;
|
margin-bottom: 12px;
|
||||||
box-shadow: 0 8px 30px rgba(16, 185, 129, 0.15), 0 0 20px rgba(6, 182, 212, 0.1);
|
box-shadow: 0 8px 30px rgba(16, 185, 129, 0.15), 0 0 20px rgba(6, 182, 212, 0.1);
|
||||||
transition: all 0.25s cubic-bezier(0.16, 1, 0.3, 1);
|
transition: all 0.25s cubic-bezier(0.16, 1, 0.3, 1);
|
||||||
position: relative;
|
position: relative;
|
||||||
@@ -3694,30 +3704,30 @@ body {
|
|||||||
}
|
}
|
||||||
|
|
||||||
.monthly-sub-banner:hover {
|
.monthly-sub-banner:hover {
|
||||||
transform: translateY(-3px);
|
transform: translateY(-2px);
|
||||||
border-color: #10b981;
|
border-color: #10b981;
|
||||||
box-shadow: 0 14px 36px rgba(16, 185, 129, 0.25), 0 0 25px rgba(6, 182, 212, 0.2);
|
box-shadow: 0 12px 32px rgba(16, 185, 129, 0.25), 0 0 25px rgba(6, 182, 212, 0.2);
|
||||||
}
|
}
|
||||||
|
|
||||||
.monthly-badge {
|
.monthly-badge {
|
||||||
display: inline-flex;
|
display: inline-flex;
|
||||||
align-items: center;
|
align-items: center;
|
||||||
gap: 6px;
|
gap: 5px;
|
||||||
background: rgba(16, 185, 129, 0.2);
|
background: rgba(16, 185, 129, 0.2);
|
||||||
border: 1px solid #10b981;
|
border: 1px solid #10b981;
|
||||||
color: #34d399;
|
color: #34d399;
|
||||||
font-size: 0.7rem;
|
font-size: 0.68rem;
|
||||||
font-weight: 800;
|
font-weight: 800;
|
||||||
text-transform: uppercase;
|
text-transform: uppercase;
|
||||||
letter-spacing: 0.06em;
|
letter-spacing: 0.06em;
|
||||||
padding: 3px 10px;
|
padding: 2px 8px;
|
||||||
border-radius: 9999px;
|
border-radius: 9999px;
|
||||||
margin-bottom: 8px;
|
margin-bottom: 4px;
|
||||||
}
|
}
|
||||||
|
|
||||||
.pulse-sub-dot {
|
.pulse-sub-dot {
|
||||||
width: 7px;
|
width: 6px;
|
||||||
height: 7px;
|
height: 6px;
|
||||||
border-radius: 50%;
|
border-radius: 50%;
|
||||||
background: #10b981;
|
background: #10b981;
|
||||||
box-shadow: 0 0 8px #10b981;
|
box-shadow: 0 0 8px #10b981;
|
||||||
@@ -3726,17 +3736,17 @@ body {
|
|||||||
|
|
||||||
.monthly-title {
|
.monthly-title {
|
||||||
font-family: var(--font-heading);
|
font-family: var(--font-heading);
|
||||||
font-size: 1.35rem;
|
font-size: 1.15rem;
|
||||||
font-weight: 800;
|
font-weight: 800;
|
||||||
color: #ffffff;
|
color: #ffffff;
|
||||||
margin-bottom: 6px;
|
margin-bottom: 2px;
|
||||||
}
|
}
|
||||||
|
|
||||||
.monthly-desc {
|
.monthly-desc {
|
||||||
font-size: 0.82rem;
|
font-size: 0.76rem;
|
||||||
color: #94a3b8;
|
color: #94a3b8;
|
||||||
line-height: 1.5;
|
line-height: 1.35;
|
||||||
max-width: 460px;
|
max-width: 440px;
|
||||||
}
|
}
|
||||||
|
|
||||||
.monthly-sub-right {
|
.monthly-sub-right {
|
||||||
@@ -3837,8 +3847,8 @@ body {
|
|||||||
.support-tiers-grid {
|
.support-tiers-grid {
|
||||||
display: grid;
|
display: grid;
|
||||||
grid-template-columns: repeat(4, 1fr);
|
grid-template-columns: repeat(4, 1fr);
|
||||||
gap: 16px;
|
gap: 12px;
|
||||||
margin-bottom: 24px;
|
margin-bottom: 16px;
|
||||||
}
|
}
|
||||||
|
|
||||||
@media (max-width: 820px) {
|
@media (max-width: 820px) {
|
||||||
@@ -3856,8 +3866,8 @@ body {
|
|||||||
.support-tier-card {
|
.support-tier-card {
|
||||||
background: rgba(15, 23, 42, 0.65);
|
background: rgba(15, 23, 42, 0.65);
|
||||||
border: 1px solid rgba(255, 255, 255, 0.08);
|
border: 1px solid rgba(255, 255, 255, 0.08);
|
||||||
border-radius: 16px;
|
border-radius: 14px;
|
||||||
padding: 20px 16px;
|
padding: 15px 14px;
|
||||||
display: flex;
|
display: flex;
|
||||||
flex-direction: column;
|
flex-direction: column;
|
||||||
justify-content: space-between;
|
justify-content: space-between;
|
||||||
@@ -3918,18 +3928,18 @@ body {
|
|||||||
|
|
||||||
.tier-amount {
|
.tier-amount {
|
||||||
font-family: var(--font-heading);
|
font-family: var(--font-heading);
|
||||||
font-size: 2.2rem;
|
font-size: 1.9rem;
|
||||||
font-weight: 800;
|
font-weight: 800;
|
||||||
color: #ffffff;
|
color: #ffffff;
|
||||||
line-height: 1;
|
line-height: 1;
|
||||||
margin-bottom: 12px;
|
margin-bottom: 6px;
|
||||||
}
|
}
|
||||||
|
|
||||||
.tier-desc {
|
.tier-desc {
|
||||||
font-size: 0.78rem;
|
font-size: 0.75rem;
|
||||||
color: #94a3b8;
|
color: #94a3b8;
|
||||||
line-height: 1.45;
|
line-height: 1.4;
|
||||||
margin-bottom: 18px;
|
margin-bottom: 12px;
|
||||||
flex: 1;
|
flex: 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -3938,10 +3948,10 @@ body {
|
|||||||
align-items: center;
|
align-items: center;
|
||||||
justify-content: center;
|
justify-content: center;
|
||||||
gap: 6px;
|
gap: 6px;
|
||||||
padding: 10px 14px;
|
padding: 8px 12px;
|
||||||
border-radius: 10px;
|
border-radius: 9px;
|
||||||
font-weight: 700;
|
font-weight: 700;
|
||||||
font-size: 0.85rem;
|
font-size: 0.82rem;
|
||||||
background: rgba(255, 255, 255, 0.08);
|
background: rgba(255, 255, 255, 0.08);
|
||||||
border: 1px solid rgba(255, 255, 255, 0.15);
|
border: 1px solid rgba(255, 255, 255, 0.15);
|
||||||
color: #ffffff;
|
color: #ffffff;
|
||||||
@@ -3974,7 +3984,7 @@ body {
|
|||||||
|
|
||||||
.support-security-footer {
|
.support-security-footer {
|
||||||
border-top: 1px solid rgba(255, 255, 255, 0.08);
|
border-top: 1px solid rgba(255, 255, 255, 0.08);
|
||||||
padding-top: 18px;
|
padding-top: 14px;
|
||||||
}
|
}
|
||||||
|
|
||||||
.security-badges-row {
|
.security-badges-row {
|
||||||
|
|||||||
+6
-6
@@ -54,7 +54,7 @@
|
|||||||
<meta name="apple-mobile-web-app-title" content="FlockRadar">
|
<meta name="apple-mobile-web-app-title" content="FlockRadar">
|
||||||
|
|
||||||
<!-- Main Stylesheet -->
|
<!-- Main Stylesheet -->
|
||||||
<link rel="stylesheet" href="css/styles.css?v=21">
|
<link rel="stylesheet" href="css/styles.css?v=22">
|
||||||
</head>
|
</head>
|
||||||
<body>
|
<body>
|
||||||
|
|
||||||
@@ -1313,11 +1313,11 @@
|
|||||||
<script src="https://unpkg.com/leaflet@1.9.4/dist/leaflet.js" integrity="sha256-20nQCchB9co0qIjJZRGuk2/Z9VM+kNiyxNV1lvTlZBo=" crossorigin=""></script>
|
<script src="https://unpkg.com/leaflet@1.9.4/dist/leaflet.js" integrity="sha256-20nQCchB9co0qIjJZRGuk2/Z9VM+kNiyxNV1lvTlZBo=" crossorigin=""></script>
|
||||||
|
|
||||||
<!-- Data & Application Logic with Cache Busting -->
|
<!-- Data & Application Logic with Cache Busting -->
|
||||||
<script src="data/portals.js?v=21"></script>
|
<script src="data/portals.js?v=22"></script>
|
||||||
<script src="js/icons.js?v=21"></script>
|
<script src="js/icons.js?v=22"></script>
|
||||||
<script src="js/auth.js?v=21"></script>
|
<script src="js/auth.js?v=22"></script>
|
||||||
<script src="js/radar.js?v=21"></script>
|
<script src="js/radar.js?v=22"></script>
|
||||||
<script src="js/app.js?v=21"></script>
|
<script src="js/app.js?v=22"></script>
|
||||||
|
|
||||||
<!-- Service Worker Instant Cache Invalidation -->
|
<!-- Service Worker Instant Cache Invalidation -->
|
||||||
<script>
|
<script>
|
||||||
|
|||||||
+11
@@ -2597,10 +2597,21 @@
|
|||||||
openSupportModal();
|
openSupportModal();
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
if (el.supportCloseBtn) {
|
||||||
|
el.supportCloseBtn.addEventListener('click', (e) => {
|
||||||
|
e.preventDefault();
|
||||||
|
e.stopPropagation();
|
||||||
|
closeSupportModal();
|
||||||
|
});
|
||||||
|
}
|
||||||
if (el.supportModal) {
|
if (el.supportModal) {
|
||||||
el.supportModal.addEventListener('click', e => {
|
el.supportModal.addEventListener('click', e => {
|
||||||
if (e.target === el.supportModal) closeSupportModal();
|
if (e.target === el.supportModal) closeSupportModal();
|
||||||
});
|
});
|
||||||
|
el.supportModal.addEventListener('cancel', (e) => {
|
||||||
|
e.preventDefault();
|
||||||
|
closeSupportModal();
|
||||||
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
// Global listener for camera & portal inspection: NEVER switches views away from radar!
|
// Global listener for camera & portal inspection: NEVER switches views away from radar!
|
||||||
|
|||||||
@@ -1,20 +1,20 @@
|
|||||||
// Service Worker for FlockRadar Offline Driving & Live Updates
|
// Service Worker for FlockRadar Offline Driving & Live Updates
|
||||||
const CACHE_NAME = 'flockradar-v21';
|
const CACHE_NAME = 'flockradar-v22';
|
||||||
const ASSETS_TO_CACHE = [
|
const ASSETS_TO_CACHE = [
|
||||||
'./',
|
'./',
|
||||||
'./index.html',
|
'./index.html',
|
||||||
'./css/styles.css?v=21',
|
'./css/styles.css?v=22',
|
||||||
'./js/icons.js?v=21',
|
'./js/icons.js?v=22',
|
||||||
'./js/app.js?v=21',
|
'./js/app.js?v=22',
|
||||||
'./js/auth.js?v=21',
|
'./js/auth.js?v=22',
|
||||||
'./js/radar.js?v=21',
|
'./js/radar.js?v=22',
|
||||||
'./data/portals.js?v=21',
|
'./data/portals.js?v=22',
|
||||||
'./favicon.svg?v=21',
|
'./favicon.svg?v=22',
|
||||||
'./favicon.ico?v=21',
|
'./favicon.ico?v=22',
|
||||||
'./apple-touch-icon.png?v=21',
|
'./apple-touch-icon.png?v=22',
|
||||||
'./icon-192.png?v=21',
|
'./icon-192.png?v=22',
|
||||||
'./icon-512.png?v=21',
|
'./icon-512.png?v=22',
|
||||||
'./og-image.png?v=21',
|
'./og-image.png?v=22',
|
||||||
'./assets/img/logo.svg',
|
'./assets/img/logo.svg',
|
||||||
'./assets/img/flock_pole_cam_palmdale.jpg',
|
'./assets/img/flock_pole_cam_palmdale.jpg',
|
||||||
'./manifest.json'
|
'./manifest.json'
|
||||||
|
|||||||
Reference in New Issue
Block a user