feat(popups): enhance vessel details with flags, USNI intel, and tracking (#1567)

* feat(popups): enhance vessel details with flags, USNI intel, and tracking history

- Add flag emojis for operator countries in vessel and cluster popups
- Add collapsible USNI intel section (strike group, region, description)
- Add collapsible tracking history trail from vessel.track
- Display nearChokepoint, nearBase, lastSeen with aisGapMinutes
- Restructure header with hull badge and badge row
- Fix hemisphere bug: use N/S and E/W based on coordinate sign
- Fix lastAisUpdate null check to prevent "Invalid Date"
- Deduplicate cluster vessel rendering into shared helper
- Add i18n keys (recentTracking, lastReport, nearChokepoint,
  nearBase, lastSeen) across all 21 locale files

Co-authored-by: lspassos1 <lspassos@icloud.com>

* fix(popups): correct track coord order, fix CSS variables, remove dead styles

- Fix coordinate swap: track stores [lat, lon], was passing (lon, lat)
  to formatCoord, now correctly passes (lat, lon)
- Replace undefined --semantic-high-rgb CSS variable with literal
  rgba(255, 136, 0, ...) values matching --semantic-high: #ff8800
- Remove dead CSS classes (.popup-badge.usni-deployed/underway/in-port)
  that were never applied in HTML
- Add missing CSS for .popup-stat.warning (orange highlight for
  nearChokepoint) and .popup-stat.full-width (span full grid row)

---------

Co-authored-by: lspassos1 <lspassos@icloud.com>
This commit is contained in:
Elie Habib
2026-03-14 14:07:22 +04:00
committed by GitHub
parent 68f8e69f3e
commit 158e9693d8
23 changed files with 395 additions and 48 deletions

View File

@@ -7028,6 +7028,143 @@ a.prediction-link:hover {
color: var(--accent);
}
/* Vessel Popup Enhancements */
.popup-title-row {
display: flex;
align-items: center;
gap: 6px;
flex: 1;
min-width: 0;
}
.hull-badge {
font-size: 9px;
font-weight: 600;
color: var(--text-dim);
background: var(--overlay-subtle);
padding: 1px 4px;
border-radius: 3px;
white-space: nowrap;
}
.popup-badges {
display: flex;
align-items: center;
gap: 4px;
flex-wrap: wrap;
}
.flag-icon {
font-size: 1.25em;
margin-right: 6px;
vertical-align: middle;
}
.flag-icon-small {
font-size: 1em;
vertical-align: middle;
}
.usni-intel-section {
background: rgba(255, 136, 0, 0.05);
border: 1px solid rgba(255, 136, 0, 0.2);
border-radius: 6px;
padding: 10px;
margin: 12px 0;
}
.section-header.usni {
display: flex;
align-items: center;
gap: 6px;
margin-bottom: 8px;
color: var(--semantic-high);
}
.section-header.usni .section-label {
font-weight: 700;
color: inherit;
margin-bottom: 0;
letter-spacing: 1px;
}
.usni-intel-content {
display: flex;
flex-direction: column;
gap: 6px;
}
.usni-field {
font-size: 11px;
color: var(--text);
}
.usni-description {
font-size: 11px;
line-height: 1.5;
color: var(--text-secondary);
border-left: 2px solid rgba(255, 136, 0, 0.3);
padding-left: 8px;
margin: 4px 0;
}
.usni-source-row {
margin-top: 4px;
font-size: 10px;
}
.usni-link {
color: var(--semantic-high);
text-decoration: none;
opacity: 0.8;
transition: opacity 0.15s;
}
.usni-link:hover {
opacity: 1;
text-decoration: underline;
}
.vessel-history-list {
display: flex;
flex-direction: column;
gap: 4px;
}
.vessel-history-item {
display: flex;
justify-content: space-between;
align-items: center;
padding: 4px 6px;
background: rgba(255, 255, 255, 0.03);
border-radius: 4px;
font-size: 10px;
}
.history-point {
color: var(--text-muted);
font-family: monospace;
}
.history-tag {
background: var(--overlay-light);
color: var(--accent);
padding: 1px 4px;
border-radius: 3px;
font-size: 9px;
font-weight: 600;
text-transform: uppercase;
}
.popup-stat.warning .stat-value {
color: var(--semantic-high);
font-weight: 600;
}
.popup-stat.full-width {
grid-column: 1 / -1;
}
.popup-link {
display: inline-block;
color: var(--green);