diff --git a/templates/gsm_spy_dashboard.html b/templates/gsm_spy_dashboard.html index ff05a7c..3cdc173 100644 --- a/templates/gsm_spy_dashboard.html +++ b/templates/gsm_spy_dashboard.html @@ -428,7 +428,7 @@ position: relative; z-index: 10; display: grid; - grid-template-columns: 280px 1fr 300px; + grid-template-columns: 280px 1fr 340px; grid-template-rows: 1fr auto; gap: 0; height: calc(100vh - 160px); @@ -821,16 +821,15 @@ } .tracked-list-content { - max-height: 400px; overflow-y: auto; } .list-item { - padding: 10px 12px; + padding: 12px 14px; border-bottom: 1px solid var(--border-color); cursor: pointer; transition: background 0.2s; - font-size: 11px; + font-size: 12px; } .list-item:hover { @@ -861,9 +860,9 @@ } .list-item-details { - font-size: 10px; + font-size: 11px; color: var(--text-secondary); - line-height: 1.4; + line-height: 1.5; } .rogue-indicator { @@ -1098,10 +1097,289 @@ /* Responsive adjustments */ @media (max-width: 1400px) { .dashboard { - grid-template-columns: 250px 1fr 280px; + grid-template-columns: 250px 1fr 300px; } } + /* Signal Strength Bar */ + .signal-bar-container { + display: flex; + align-items: center; + gap: 6px; + margin-top: 4px; + } + + .signal-bar-track { + flex: 1; + height: 4px; + background: rgba(255, 255, 255, 0.08); + border-radius: 2px; + overflow: hidden; + } + + .signal-bar-fill { + height: 100%; + border-radius: 2px; + transition: width 0.3s ease; + } + + .signal-bar-label { + font-size: 10px; + font-family: var(--font-mono); + color: var(--text-dim); + min-width: 50px; + text-align: right; + } + + /* Device Card Styles */ + .device-card { + padding: 12px 14px; + border-bottom: 1px solid var(--border-color); + cursor: pointer; + transition: all 0.2s; + font-size: 12px; + } + + .device-card:hover { + background: rgba(74, 163, 255, 0.08); + border-left: 3px solid var(--accent-cyan); + } + + .device-card-top { + display: flex; + justify-content: space-between; + align-items: center; + margin-bottom: 6px; + } + + .device-card-id { + font-weight: 700; + font-family: var(--font-mono); + font-size: 12px; + display: flex; + align-items: center; + gap: 6px; + } + + .device-type-badge { + display: inline-block; + padding: 1px 6px; + border-radius: 3px; + font-size: 9px; + font-weight: 700; + letter-spacing: 0.5px; + text-transform: uppercase; + } + + .device-type-badge.imsi { + background: rgba(56, 193, 128, 0.2); + color: var(--accent-green); + border: 1px solid rgba(56, 193, 128, 0.3); + } + + .device-type-badge.tmsi { + background: rgba(74, 163, 255, 0.2); + color: var(--accent-cyan); + border: 1px solid rgba(74, 163, 255, 0.3); + } + + .device-card-time { + font-size: 10px; + color: var(--text-dim); + font-family: var(--font-mono); + } + + .device-card-mid { + display: flex; + gap: 12px; + font-size: 11px; + color: var(--text-secondary); + margin-bottom: 4px; + } + + .device-card-mid span { + display: flex; + align-items: center; + gap: 3px; + } + + .device-card-bottom { + display: flex; + justify-content: space-between; + align-items: center; + font-size: 10px; + } + + .device-seen-badge { + padding: 1px 6px; + border-radius: 3px; + font-size: 9px; + font-weight: 600; + } + + .device-seen-badge.new { + background: rgba(225, 194, 107, 0.15); + color: var(--accent-yellow); + } + + .device-seen-badge.returning { + background: rgba(56, 193, 128, 0.15); + color: var(--accent-green); + } + + /* Device Detail Modal */ + .device-detail-modal { + display: none; + position: fixed; + top: 0; + left: 0; + right: 0; + bottom: 0; + z-index: 2000; + animation: fadeIn 0.2s ease-out; + } + + .device-detail-modal.active { + display: flex; + justify-content: center; + align-items: center; + } + + .device-detail-backdrop { + position: absolute; + top: 0; + left: 0; + right: 0; + bottom: 0; + background: rgba(11, 17, 24, 0.9); + backdrop-filter: blur(4px); + } + + .device-detail-content { + position: relative; + background: var(--bg-panel); + border: 1px solid var(--border-color); + border-radius: 8px; + width: 420px; + max-width: 90vw; + max-height: 80vh; + overflow: hidden; + display: flex; + flex-direction: column; + box-shadow: 0 0 40px rgba(74, 163, 255, 0.25); + animation: slideUp 0.3s ease-out; + } + + .device-detail-header { + padding: 14px 18px; + background: var(--bg-card); + border-bottom: 1px solid var(--border-color); + display: flex; + justify-content: space-between; + align-items: center; + } + + .device-detail-title { + font-size: 14px; + font-weight: 700; + letter-spacing: 1px; + color: var(--accent-cyan); + text-transform: uppercase; + } + + .device-detail-close { + width: 28px; + height: 28px; + border: 1px solid var(--border-color); + background: var(--bg-dark); + color: var(--text-secondary); + border-radius: 4px; + cursor: pointer; + transition: all 0.2s; + font-size: 16px; + display: flex; + align-items: center; + justify-content: center; + } + + .device-detail-close:hover { + border-color: var(--accent-red); + color: var(--accent-red); + } + + .device-detail-body { + padding: 16px 18px; + overflow-y: auto; + flex: 1; + } + + .detail-grid { + display: grid; + grid-template-columns: 1fr 1fr; + gap: 12px; + margin-bottom: 16px; + } + + .detail-field { + display: flex; + flex-direction: column; + gap: 3px; + } + + .detail-field.full-width { + grid-column: 1 / -1; + } + + .detail-field-label { + font-size: 9px; + color: var(--text-dim); + text-transform: uppercase; + letter-spacing: 0.5px; + font-family: var(--font-mono); + } + + .detail-field-value { + font-size: 13px; + font-weight: 600; + color: var(--text-primary); + font-family: var(--font-mono); + display: flex; + align-items: center; + gap: 6px; + } + + .detail-copy-btn { + background: none; + border: 1px solid var(--border-color); + color: var(--text-dim); + border-radius: 3px; + padding: 2px 6px; + font-size: 9px; + cursor: pointer; + transition: all 0.2s; + font-family: var(--font-mono); + } + + .detail-copy-btn:hover { + border-color: var(--accent-cyan); + color: var(--accent-cyan); + } + + .detail-section { + border-top: 1px solid var(--border-color); + padding-top: 12px; + margin-top: 4px; + } + + .detail-section-title { + font-size: 10px; + font-weight: 700; + color: var(--text-secondary); + text-transform: uppercase; + letter-spacing: 1px; + margin-bottom: 10px; + } + @media (max-width: 1024px) { .dashboard { grid-template-columns: 1fr; @@ -1133,6 +1411,16 @@ {% set active_mode = 'gsm' %} {% include 'partials/nav.html' with context %} + + + + {% include 'partials/settings-modal.html' %} +
@@ -1488,6 +1776,19 @@
+ +
+
+
+
+ Device Detail + +
+
+
+
+
+ + +