Files
intercept/static/css/adsb_history.css
Smittix 5e9fcc5c49 feat: Switch application font to Roboto Condensed
Replace IBM Plex Mono, Space Mono, and JetBrains Mono with Roboto
Condensed across all CSS variables, inline styles, canvas ctx.font
references, and Google Fonts CDN links. Updates 28 files covering
templates, stylesheets, and JS modules for consistent typography.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-16 23:29:05 +00:00

634 lines
12 KiB
CSS

* {
margin: 0;
padding: 0;
box-sizing: border-box;
}
:root {
--font-sans: 'Roboto Condensed', 'Arial Narrow', Roboto, 'Helvetica Neue', Arial, sans-serif;
--font-mono: 'Roboto Condensed', 'Arial Narrow', Roboto, 'Helvetica Neue', Arial, sans-serif;
--bg-dark: #0b1118;
--bg-panel: #101823;
--bg-card: #151f2b;
--border-color: #263246;
--border-glow: rgba(74, 163, 255, 0.4);
--text-primary: #d7e0ee;
--text-secondary: #9fb0c7;
--text-dim: #6f7f94;
--accent-cyan: #4aa3ff;
--accent-green: #38c180;
--accent-amber: #d6a85e;
--grid-line: rgba(74, 163, 255, 0.1);
--noise-image: url("data:image/svg+xml,%3Csvg%20xmlns='http://www.w3.org/2000/svg'%20width='40'%20height='40'%20viewBox='0%200%2040%2040'%3E%3Cg%20fill='%23ffffff'%20fill-opacity='0.05'%3E%3Ccircle%20cx='3'%20cy='5'%20r='1'/%3E%3Ccircle%20cx='11'%20cy='9'%20r='1'/%3E%3Ccircle%20cx='18'%20cy='3'%20r='1'/%3E%3Ccircle%20cx='26'%20cy='12'%20r='1'/%3E%3Ccircle%20cx='34'%20cy='6'%20r='1'/%3E%3Ccircle%20cx='7'%20cy='19'%20r='1'/%3E%3Ccircle%20cx='15'%20cy='24'%20r='1'/%3E%3Ccircle%20cx='28'%20cy='22'%20r='1'/%3E%3Ccircle%20cx='36'%20cy='18'%20r='1'/%3E%3Ccircle%20cx='5'%20cy='33'%20r='1'/%3E%3Ccircle%20cx='19'%20cy='32'%20r='1'/%3E%3Ccircle%20cx='31'%20cy='34'%20r='1'/%3E%3C/g%3E%3C/svg%3E");
}
body {
font-family: var(--font-sans);
background: var(--bg-dark);
color: var(--text-primary);
min-height: 100vh;
}
.mono {
font-family: var(--font-mono);
}
.radar-bg {
position: fixed;
inset: 0;
background-image:
var(--noise-image),
linear-gradient(var(--grid-line) 1px, transparent 1px),
linear-gradient(90deg, var(--grid-line) 1px, transparent 1px);
background-size: 40px 40px, 50px 50px, 50px 50px;
pointer-events: none;
z-index: 0;
}
.scanline {
position: fixed;
top: 0;
left: 0;
right: 0;
height: 2px;
background: linear-gradient(90deg, transparent, var(--accent-cyan), transparent);
color: var(--accent-cyan);
animation: scan 6s linear infinite;
pointer-events: none;
z-index: 1;
opacity: 0.25;
box-shadow: 0 0 8px currentColor;
}
@keyframes scan {
0% { top: -4px; }
100% { top: 100vh; }
}
.header {
position: relative;
z-index: 2;
padding: 12px 20px;
background: var(--bg-panel);
border-bottom: 1px solid var(--border-color);
display: flex;
justify-content: space-between;
align-items: center;
flex-wrap: wrap;
gap: 12px;
}
.header::after {
content: '';
position: absolute;
left: 0;
right: 0;
bottom: 0;
height: 2px;
background: linear-gradient(90deg, transparent, var(--accent-cyan), transparent);
opacity: 0.6;
pointer-events: none;
}
.logo {
font-size: 18px;
font-weight: 700;
letter-spacing: 2px;
text-transform: uppercase;
}
.logo span {
color: var(--text-secondary);
font-weight: 400;
font-size: 12px;
margin-left: 10px;
letter-spacing: 1px;
}
.status-bar {
display: flex;
align-items: center;
gap: 12px;
font-family: var(--font-mono);
font-size: 11px;
}
.back-link {
color: var(--accent-cyan);
text-decoration: none;
font-size: 11px;
padding: 6px 12px;
border: 1px solid var(--accent-cyan);
border-radius: 4px;
}
.history-shell {
position: relative;
z-index: 2;
padding: 16px 18px 28px;
display: flex;
flex-direction: column;
gap: 16px;
}
.summary-strip {
display: grid;
grid-template-columns: repeat(auto-fit, minmax(150px, 1fr));
gap: 12px;
}
.session-strip {
display: grid;
grid-template-columns: repeat(auto-fit, minmax(160px, 1fr));
gap: 14px;
align-items: center;
background: linear-gradient(120deg, rgba(15, 18, 24, 0.95), rgba(20, 26, 36, 0.95));
border: 1px solid var(--border-color);
border-radius: 12px;
padding: 14px 16px;
box-shadow: 0 0 18px rgba(0, 0, 0, 0.35);
}
.session-status {
display: flex;
align-items: center;
gap: 12px;
}
.status-dot {
width: 12px;
height: 12px;
border-radius: 50%;
background: var(--text-dim);
box-shadow: 0 0 12px rgba(75, 85, 99, 0.6);
}
.status-dot.active {
background: var(--accent-green);
box-shadow: 0 0 14px rgba(34, 197, 94, 0.8);
}
.session-label {
font-size: 10px;
color: var(--text-secondary);
text-transform: uppercase;
letter-spacing: 1.2px;
}
.session-value {
font-size: 14px;
font-weight: 600;
}
.session-metric {
display: flex;
flex-direction: column;
gap: 6px;
}
#sessionNotice {
color: var(--accent-cyan);
}
.session-controls {
display: flex;
gap: 10px;
align-items: center;
justify-content: flex-end;
}
.session-controls select {
background: var(--bg-dark);
border: 1px solid var(--border-color);
color: var(--text-primary);
padding: 8px 10px;
border-radius: 6px;
font-size: 12px;
min-width: 180px;
}
.primary-btn.stop {
background: var(--accent-amber);
color: #0a0c10;
}
.summary-card {
background: var(--bg-card);
border: 1px solid var(--border-color);
border-radius: 10px;
padding: 14px 16px;
box-shadow: 0 0 14px rgba(0, 0, 0, 0.3);
}
.summary-label {
font-size: 11px;
color: var(--text-secondary);
text-transform: uppercase;
letter-spacing: 1.3px;
margin-bottom: 6px;
}
.summary-value {
font-size: 18px;
font-weight: 600;
color: var(--text-primary);
}
.controls {
display: flex;
flex-wrap: wrap;
gap: 14px;
align-items: flex-end;
background: var(--bg-panel);
border: 1px solid var(--border-color);
border-radius: 10px;
padding: 14px 16px;
}
.control-group {
display: flex;
flex-direction: column;
gap: 6px;
}
.control-group label {
font-size: 10px;
color: var(--text-secondary);
text-transform: uppercase;
letter-spacing: 1.2px;
}
.control-group input,
.control-group select {
background: var(--bg-dark);
border: 1px solid var(--border-color);
color: var(--text-primary);
padding: 8px 10px;
border-radius: 6px;
font-size: 12px;
min-width: 160px;
}
.primary-btn {
background: var(--accent-cyan);
border: none;
color: #0a0c10;
font-weight: 600;
padding: 10px 18px;
border-radius: 6px;
cursor: pointer;
transition: transform 0.2s ease, box-shadow 0.2s ease;
}
.primary-btn:hover {
transform: translateY(-1px);
box-shadow: 0 6px 14px rgba(74, 158, 255, 0.3);
}
.status-pill {
font-family: var(--font-mono);
font-size: 11px;
padding: 8px 12px;
border-radius: 999px;
border: 1px solid var(--accent-amber);
color: var(--accent-amber);
text-transform: uppercase;
letter-spacing: 1px;
}
.content-grid {
display: grid;
grid-template-columns: minmax(300px, 1fr) minmax(320px, 1fr);
gap: 16px;
}
.panel {
background: var(--bg-panel);
border: 1px solid var(--border-color);
border-radius: 12px;
display: flex;
flex-direction: column;
min-height: 420px;
}
.panel-header {
display: flex;
justify-content: space-between;
align-items: center;
padding: 12px 16px;
border-bottom: 1px solid var(--border-color);
font-size: 12px;
letter-spacing: 1.6px;
text-transform: uppercase;
color: var(--text-secondary);
}
.panel-meta {
font-family: var(--font-mono);
font-size: 11px;
color: var(--accent-cyan);
}
.panel-body {
padding: 12px 14px;
flex: 1;
overflow: auto;
}
.aircraft-table {
width: 100%;
border-collapse: collapse;
font-size: 12px;
}
.aircraft-table th,
.aircraft-table td {
padding: 8px 6px;
border-bottom: 1px solid rgba(31, 41, 55, 0.6);
text-align: left;
}
.aircraft-table th {
font-size: 10px;
color: var(--text-secondary);
text-transform: uppercase;
letter-spacing: 1px;
}
.aircraft-row {
cursor: pointer;
transition: background 0.15s ease;
}
.aircraft-row:hover {
background: rgba(74, 158, 255, 0.1);
}
.mono {
font-family: var(--font-mono);
}
.empty-row td,
.empty-row {
color: var(--text-dim);
text-align: center;
padding: 18px 10px;
}
.detail-card {
padding: 12px 14px;
background: var(--bg-card);
border: 1px solid var(--border-color);
border-radius: 10px;
margin-bottom: 12px;
}
.detail-title {
font-weight: 600;
font-size: 14px;
margin-bottom: 6px;
}
.detail-meta {
color: var(--text-secondary);
font-size: 12px;
}
.chart-card {
background: var(--bg-card);
border: 1px solid var(--border-color);
border-radius: 10px;
padding: 10px;
height: 180px;
display: flex;
flex-direction: column;
gap: 6px;
}
.chart-grid {
display: grid;
grid-template-columns: repeat(auto-fit, minmax(180px, 1fr));
gap: 10px;
margin-bottom: 12px;
}
.chart-title {
font-size: 10px;
color: var(--text-secondary);
text-transform: uppercase;
letter-spacing: 1px;
}
#altitudeChart {
width: 100%;
height: 100%;
}
#speedChart,
#headingChart,
#verticalChart {
width: 100%;
height: 100%;
}
.timeline-list {
display: flex;
flex-direction: column;
gap: 8px;
font-size: 12px;
color: var(--text-secondary);
}
.timeline-row {
display: flex;
justify-content: space-between;
gap: 8px;
padding: 6px 10px;
border: 1px solid rgba(31, 41, 55, 0.6);
border-radius: 6px;
background: rgba(15, 18, 24, 0.6);
}
.squawk-list {
margin-top: 10px;
display: flex;
flex-direction: column;
gap: 8px;
color: var(--text-secondary);
}
.modal-backdrop {
position: fixed;
inset: 0;
background: rgba(5, 8, 15, 0.65);
display: flex;
align-items: center;
justify-content: center;
opacity: 0;
pointer-events: none;
transition: opacity 0.2s ease;
z-index: 50;
}
.modal-backdrop.open {
opacity: 1;
pointer-events: auto;
}
.modal-card {
background: var(--bg-panel);
border: 1px solid var(--border-color);
border-radius: 14px;
padding: 18px;
width: min(820px, 92vw);
box-shadow: 0 20px 60px rgba(0, 0, 0, 0.4);
position: relative;
}
.modal-close {
position: absolute;
top: 12px;
right: 12px;
border: none;
background: transparent;
color: var(--text-secondary);
font-size: 24px;
cursor: pointer;
}
.modal-header {
display: flex;
justify-content: space-between;
align-items: center;
gap: 16px;
margin-bottom: 14px;
}
.modal-title {
font-size: 20px;
font-weight: 600;
}
.modal-subtitle {
color: var(--text-secondary);
font-size: 12px;
margin-top: 4px;
}
.modal-actions {
display: flex;
gap: 8px;
}
.nav-btn {
background: rgba(74, 158, 255, 0.15);
border: 1px solid rgba(74, 158, 255, 0.4);
color: var(--accent-cyan);
padding: 6px 10px;
border-radius: 6px;
cursor: pointer;
}
.modal-body {
display: grid;
grid-template-columns: 1fr 1.2fr;
gap: 16px;
}
.modal-photo {
background: var(--bg-card);
border-radius: 12px;
border: 1px solid var(--border-color);
min-height: 220px;
display: flex;
align-items: center;
justify-content: center;
overflow: hidden;
}
.modal-photo img {
width: 100%;
height: 100%;
object-fit: cover;
display: none;
}
.photo-fallback {
color: var(--text-dim);
font-size: 12px;
text-transform: uppercase;
letter-spacing: 1px;
display: flex;
align-items: center;
justify-content: center;
height: 100%;
width: 100%;
}
.modal-details {
display: grid;
grid-template-columns: 1fr 1fr;
gap: 10px 18px;
font-size: 12px;
}
.detail-row {
display: flex;
flex-direction: column;
gap: 4px;
padding: 8px 10px;
background: rgba(20, 26, 36, 0.6);
border-radius: 8px;
border: 1px solid rgba(31, 41, 55, 0.6);
}
.detail-row span {
color: var(--text-secondary);
font-size: 10px;
text-transform: uppercase;
letter-spacing: 1px;
}
.detail-row strong {
font-size: 13px;
}
@media (max-width: 1024px) {
.content-grid {
grid-template-columns: 1fr;
}
.modal-body {
grid-template-columns: 1fr;
}
}
@media (max-width: 720px) {
.controls {
flex-direction: column;
align-items: stretch;
}
.control-group input,
.control-group select {
min-width: 100%;
}
.panel {
min-height: 320px;
}
.session-controls {
flex-direction: column;
align-items: stretch;
}
.modal-card {
padding: 16px;
}
.modal-details {
grid-template-columns: 1fr;
}
}