        @import url('https://fonts.googleapis.com/css2?family=Share+Tech+Mono&display=swap');

        * { margin: 0; padding: 0; box-sizing: border-box; }

        :root {
            --green: #00ff41;
            --green-dim: #00cc33;
            --green-glow: #33ff66;
            --yellow: #ffff00;
            --amber: #ffb000;
            --bg: #0a0a0a;
            --bg-card: #0d0d0d;
            --border: #00ff41;
            --font: 'Share Tech Mono', 'Courier New', Consolas, Monaco, monospace;
        }

        body {
            font-family: var(--font);
            background: var(--bg);
            color: var(--green);
            min-height: 100vh;
            padding: 20px;
            display: flex;
            justify-content: center;
            align-items: flex-start;
            /* CRT scanlines overlay */
            position: relative;
        }

        /* CRT scanlines effect */
        body::before {
            content: '';
            position: fixed;
            top: 0; left: 0;
            width: 100%; height: 100%;
            background: repeating-linear-gradient(
                0deg,
                transparent,
                transparent 2px,
                rgba(0, 0, 0, 0.15) 2px,
                rgba(0, 0, 0, 0.15) 4px
            );
            pointer-events: none;
            z-index: 9999;
        }

        /* Blinking cursor animation */
        @keyframes blink {
            0%, 49% { opacity: 1; }
            50%, 100% { opacity: 0; }
        }

        /* Text glow animation */
        @keyframes textGlow {
            0%, 100% { text-shadow: 0 0 5px var(--green), 0 0 10px var(--green); }
            50% { text-shadow: 0 0 8px var(--green-glow), 0 0 16px var(--green-glow), 0 0 24px var(--green); }
        }

        @keyframes fadeIn {
            from { opacity: 0; }
            to { opacity: 1; }
        }

        @keyframes slideUp {
            from { transform: translateY(30px); opacity: 0; }
            to { transform: translateY(0); opacity: 1; }
        }

        .container {
            background: var(--bg);
            border: 1px solid var(--green-dim);
            padding: 30px;
            max-width: 620px;
            width: 100%;
            box-shadow: 0 0 20px rgba(0, 255, 65, 0.15), inset 0 0 20px rgba(0,0,0,0.5);
        }

        /* ASCII-art header box */
        .terminal-header {
            border: 1px solid var(--green);
            padding: 16px 20px;
            margin-bottom: 20px;
            text-align: center;
            box-shadow: 0 0 10px rgba(0,255,65,0.2);
        }

        .terminal-header::before {
            content: '╔══════════════════════════════════════╗';
            display: block;
            font-size: 13px;
            color: var(--green-dim);
            margin-bottom: 4px;
            overflow: hidden;
        }

        .terminal-header::after {
            content: '╚══════════════════════════════════════╝';
            display: block;
            font-size: 13px;
            color: var(--green-dim);
            margin-top: 4px;
            overflow: hidden;
        }

        h1 {
            color: var(--green);
            font-size: 20px;
            font-family: var(--font);
            text-align: center;
            margin-bottom: 4px;
            animation: textGlow 3s ease-in-out infinite;
            letter-spacing: 2px;
        }

        h1::before { content: '║  '; color: var(--green-dim); }
        h1::after  { content: '  ║'; color: var(--green-dim); }

        .subtitle {
            color: var(--green-dim);
            text-align: center;
            font-size: 13px;
            margin-bottom: 2px;
        }

        .subtitle::before { content: '║  '; }
        .subtitle::after  { content: '  ║'; }

        .status-line {
            color: var(--green);
            text-align: center;
            font-size: 12px;
        }

        .status-line::before { content: '║  '; color: var(--green-dim); }
        .status-line::after  { content: '  ║'; color: var(--green-dim); }

        .status-line .cursor {
            display: inline-block;
            width: 8px;
            height: 14px;
            background: var(--green);
            animation: blink 1s step-end infinite;
            vertical-align: middle;
            margin-left: 2px;
        }

        p, a {
            color: var(--green-dim);
            text-align: center;
            font-size: 13px;
            font-family: var(--font);
        }

        a {
            color: var(--green);
            text-decoration: none;
            border-bottom: 1px dashed var(--green-dim);
        }

        a:hover { color: var(--green-glow); border-bottom-color: var(--green-glow); }

        hr {
            border: none;
            border-top: 1px solid var(--green-dim);
            margin: 10px 0;
        }

        /* Speed meter */
        .speed-meter {
            text-align: center;
            margin-bottom: 20px;
            padding: 16px;
            border: 1px solid var(--green-dim);
            background: var(--bg-card);
            box-shadow: 0 0 8px rgba(0,255,65,0.1);
        }

        .speed-meter-label {
            font-size: 11px;
            color: var(--green-dim);
            letter-spacing: 2px;
            margin-bottom: 8px;
        }

        .speed-avg {
            font-size: 36px;
            font-weight: normal;
            color: var(--green);
            text-shadow: 0 0 10px var(--green);
            font-family: var(--font);
        }

        .speed-unit { font-size: 16px; color: var(--green-dim); }

        .rtt-avg {
            font-size: 16px;
            color: var(--amber);
            text-shadow: 0 0 6px var(--amber);
            margin-top: 6px;
        }

        .last-test-info {
            text-align: center;
            color: var(--green-dim);
            font-size: 12px;
            margin-top: 8px;
        }

        /* Dashboard grid */
        .dashboard-grid {
            display: grid;
            grid-template-columns: repeat(3, 1fr);
            gap: 10px;
            margin-bottom: 20px;
        }

        .dashboard-card {
            background: var(--bg-card);
            color: var(--green);
            padding: 18px 14px;
            border: 1px solid var(--green-dim);
            cursor: pointer;
            transition: border-color 0.2s, box-shadow 0.2s;
            text-align: center;
            position: relative;
        }

        .dashboard-card:hover {
            border-color: var(--green);
            box-shadow: 0 0 12px rgba(0,255,65,0.3);
        }

        .dashboard-card::before {
            content: '> ';
            position: absolute;
            left: 8px;
            top: 8px;
            font-size: 11px;
            color: var(--green-dim);
        }

        .dashboard-card .icon {
            font-size: 14px;
            margin-bottom: 6px;
            color: var(--green-dim);
            font-family: var(--font);
        }

        .dashboard-card .title {
            font-size: 13px;
            color: var(--green);
            font-family: var(--font);
        }

        /* All card variants use the same terminal style */
        .dashboard-card.primary,
        .dashboard-card.success,
        .dashboard-card.warning,
        .dashboard-card.info {
            background: var(--bg-card);
        }

        /* Main button */
        button.main-btn {
            width: 100%;
            padding: 14px;
            background: transparent;
            color: var(--green);
            border: 1px solid var(--green);
            font-size: 15px;
            font-family: var(--font);
            cursor: pointer;
            transition: background 0.2s, box-shadow 0.2s;
            letter-spacing: 1px;
            text-transform: uppercase;
        }

        button.main-btn::before { content: '> '; color: var(--green-dim); }

        button.main-btn:hover {
            background: rgba(0, 255, 65, 0.08);
            box-shadow: 0 0 14px rgba(0,255,65,0.35);
        }

        button.main-btn:active { background: rgba(0, 255, 65, 0.15); }

        button.main-btn:disabled {
            opacity: 0.4;
            cursor: not-allowed;
        }

        /* Modal */
        .modal {
            display: none;
            position: fixed;
            z-index: 1000;
            left: 0; top: 0;
            width: 100%; height: 100%;
            overflow: auto;
            background-color: rgba(0,0,0,0.85);
            animation: fadeIn 0.2s;
        }

        .modal-content {
            background: var(--bg);
            border: 1px solid var(--green);
            box-shadow: 0 0 30px rgba(0,255,65,0.2);
            margin: 5% auto;
            padding: 0;
            width: 90%;
            max-width: 700px;
            animation: slideUp 0.2s;
        }

        .modal-header {
            padding: 14px 20px;
            background: var(--bg-card);
            border-bottom: 1px solid var(--green-dim);
            display: flex;
            justify-content: space-between;
            align-items: center;
        }

        .modal-header h2 {
            margin: 0;
            font-size: 15px;
            color: var(--green);
            font-family: var(--font);
            font-weight: normal;
            display: flex;
            align-items: center;
            gap: 8px;
            letter-spacing: 1px;
        }

        .modal-header h2::before { content: '╔══ '; color: var(--green-dim); }

        .close {
            color: var(--green-dim);
            font-size: 20px;
            font-weight: normal;
            cursor: pointer;
            font-family: var(--font);
            transition: color 0.2s;
            line-height: 1;
        }

        .close:hover { color: var(--green); text-shadow: 0 0 8px var(--green); }

        .modal-body {
            padding: 20px;
            max-height: 70vh;
            overflow-y: auto;
        }

        /* Scrollbar */
        .modal-body::-webkit-scrollbar { width: 6px; }
        .modal-body::-webkit-scrollbar-track { background: var(--bg); }
        .modal-body::-webkit-scrollbar-thumb { background: var(--green-dim); }

        .info-row {
            display: flex;
            justify-content: space-between;
            align-items: center;
            padding: 10px 0;
            border-bottom: 1px dashed rgba(0,255,65,0.2);
            font-size: 13px;
        }

        .info-row:last-child { border-bottom: none; }

        .label { color: var(--green-dim); }
        .label::before { content: '> '; }

        .value { color: var(--green); text-shadow: 0 0 4px rgba(0,255,65,0.4); }

        .status {
            display: inline-block;
            padding: 3px 10px;
            font-size: 13px;
            font-family: var(--font);
            border: 1px solid;
        }

        .status.online  { color: var(--green); border-color: var(--green); }
        .status.offline { color: var(--amber); border-color: var(--amber); }

        #speedChart {
            margin: 10px auto;
            display: block;
            max-width: 100%;
            width: 100% !important;
            height: auto !important;
        }

        .average-info {
            margin-top: 12px;
            text-align: center;
            font-size: 13px;
            color: var(--green-dim);
        }

        .average-info span {
            margin: 0 6px;
            color: var(--green);
            text-shadow: 0 0 4px rgba(0,255,65,0.4);
        }

        .cand {
            padding: 10px;
            margin: 8px 0;
            background: var(--bg-card);
            border: 1px solid rgba(0,255,65,0.3);
            border-left: 3px solid var(--green-dim);
            font-size: 12px;
            color: var(--green);
        }

        .info-row2 {
            display: flex;
            justify-content: space-between;
            padding: 10px;
            margin: 6px 0;
            background: var(--bg-card);
            border: 1px solid rgba(0,255,65,0.2);
            font-size: 13px;
        }

        .info-row2 label { color: var(--green-dim); }
        .info-row2 label::before { content: '> '; }
        .info-row2 b { color: var(--green); font-weight: normal; font-family: var(--font); word-break: break-all; }

        #warning {
            color: var(--amber);
            padding: 12px;
            margin-top: 16px;
            border: 1px solid var(--amber);
            font-size: 13px;
        }

        #warning::before { content: '[WARN] '; color: var(--amber); }

        /* Divider */
        .term-divider {
            color: var(--green-dim);
            font-size: 12px;
            margin: 6px 0;
            overflow: hidden;
            white-space: nowrap;
        }

        .link-row { margin: 4px 0; }

        .dim-text { color: var(--green-dim); }

        @media (max-width: 480px) {
            .container { padding: 16px; }
            .dashboard-grid { grid-template-columns: 1fr 1fr; gap: 8px; }
            h1 { font-size: 15px; }
            .speed-avg { font-size: 28px; }
            .terminal-header::before,
            .terminal-header::after { font-size: 10px; }
        }

        /* Geolocation map */
        #geoMap {
            height: 280px;
            border: 1px solid var(--green-dim);
            margin-top: 14px;
            background: #0a0a0a;
        }

        /* Leaflet overrides for terminal style */
        .leaflet-container { background: #111; font-family: var(--font); }
        .leaflet-tile { filter: grayscale(0.8) brightness(0.6) hue-rotate(100deg); }

        /* Jamming status badge */
        .jam-status {
            display: inline-block;
            padding: 5px 14px;
            font-size: 14px;
            border: 1px solid;
            margin-bottom: 10px;
        }
        .jam-status.normal   { color: var(--green);  border-color: var(--green); }
        .jam-status.suspicious { color: var(--amber); border-color: var(--amber); }
        .jam-status.jamming  { color: var(--yellow); border-color: var(--yellow); }

        /* Jamming incident log entry */
        .incident-item {
            padding: 6px 8px;
            margin: 3px 0;
            background: var(--bg-card);
            border: 1px solid rgba(255,176,0,0.3);
            border-left: 3px solid var(--amber);
            font-size: 11px;
            color: var(--amber);
        }

        /* Jamming progress bar */
        .jam-progress {
            width: 100%;
            height: 4px;
            background: var(--bg-card);
            margin: 10px 0;
            overflow: hidden;
        }
        .jam-progress-bar {
            height: 100%;
            background: var(--green);
            transition: width 0.3s;
        }

        /* Confidence level indicator */
        .confidence-indicator {
            display: inline-block;
            padding: 4px 10px;
            font-size: 11px;
            border: 1px solid;
            margin-left: 8px;
            vertical-align: middle;
        }
        .confidence-high   { color: var(--green);  border-color: var(--green); }
        .confidence-medium { color: var(--amber);  border-color: var(--amber); }
        .confidence-low    { color: var(--yellow); border-color: var(--yellow); }

        /* Location display block */
        .location-display {
            background: var(--bg-card);
            border: 1px solid var(--green-dim);
            padding: 16px;
            margin-bottom: 20px;
            box-shadow: 0 0 8px rgba(0,255,65,0.1);
        }

        .location-label {
            font-size: 11px;
            color: var(--green);
            letter-spacing: 2px;
            text-align: center;
            margin-bottom: 8px;
            text-shadow: 0 0 6px rgba(0,255,65,0.3);
        }

        .location-address {
            font-size: 13px;
            color: var(--green);
            line-height: 1.8;
        }

        .location-row {
            display: flex;
            align-items: flex-start;
            margin: 6px 0;
            gap: 8px;
        }

        .loc-icon {
            color: var(--green-dim);
            flex-shrink: 0;
        }

        .loc-label {
            color: var(--green-dim);
            min-width: 120px;
            flex-shrink: 0;
        }

        .loc-value {
            color: var(--green);
            text-shadow: 0 0 4px rgba(0,255,65,0.4);
            word-break: break-word;
        }

        .location-refresh-btn {
            font-size: 11px;
            color: var(--green);
            background: transparent;
            border: 1px solid var(--green);
            padding: 6px 12px;
            cursor: pointer;
            font-family: var(--font);
            letter-spacing: 1px;
            transition: background 0.2s, box-shadow 0.2s;
        }

        .location-refresh-btn:hover {
            background: rgba(0, 255, 65, 0.08);
            box-shadow: 0 0 10px rgba(0,255,65,0.25);
        }

        .location-refresh-btn:active {
            background: rgba(0, 255, 65, 0.15);
        }

        .location-refresh-btn:disabled {
            opacity: 0.4;
            cursor: not-allowed;
        }

        @media (max-width: 480px) {
            .loc-label {
                min-width: 90px;
                font-size: 11px;
            }
            .loc-value {
                font-size: 11px;
            }
        }

        /* ─── AI Analyzer Block ───────────────────────────────────────────────── */

        .ai-analyzer {
            background: var(--bg-card);
            border: 1px solid var(--green-dim);
            padding: 16px;
            margin-bottom: 20px;
            box-shadow: 0 0 8px rgba(0,255,65,0.1);
        }

        .ai-label {
            font-size: 11px;
            color: var(--green);
            letter-spacing: 2px;
            text-align: center;
            margin-bottom: 12px;
            text-shadow: 0 0 6px rgba(0,255,65,0.3);
        }

        .ai-quality {
            margin-bottom: 10px;
        }

        .ai-quality-label {
            font-size: 12px;
            color: var(--green-dim);
            display: block;
            margin-bottom: 6px;
        }

        .ai-progress-bar {
            width: 100%;
            height: 8px;
            background: var(--bg);
            border: 1px solid var(--green-dim);
            margin-bottom: 6px;
            overflow: hidden;
        }

        .ai-progress-fill {
            height: 100%;
            background: var(--green);
            box-shadow: 0 0 8px var(--green);
            transition: width 0.5s ease;
            width: 0%;
        }

        .ai-quality-value {
            font-size: 16px;
            color: var(--green);
            text-shadow: 0 0 6px var(--green);
        }

        .ai-info {
            display: flex;
            flex-direction: column;
            gap: 4px;
            font-size: 11px;
            color: var(--green-dim);
            margin-top: 8px;
        }

        .ai-info span {
            color: var(--green-dim);
        }

        .ai-info span span {
            color: var(--green);
        }

        /* ─── AI Classification Modal ─────────────────────────────────────────── */

        .ai-classification {
            font-family: var(--font);
        }

        .classification-title {
            font-size: 12px;
            color: var(--green);
            letter-spacing: 1px;
            margin: 12px 0 8px 0;
            text-align: center;
        }

        .classification-result {
            padding: 12px;
            background: var(--bg-card);
            border: 1px solid var(--green);
            margin-bottom: 12px;
        }

        .class-quality, .class-confidence {
            font-size: 14px;
            color: var(--green-dim);
            margin: 6px 0;
        }

        .class-quality span, .class-confidence span {
            color: var(--green);
            text-shadow: 0 0 6px var(--green);
            font-size: 16px;
        }

        .confidence-matrix {
            display: flex;
            flex-direction: column;
            gap: 6px;
            margin-bottom: 12px;
        }

        .matrix-row {
            display: flex;
            justify-content: space-between;
            align-items: center;
            padding: 8px;
            background: var(--bg-card);
            border-left: 3px solid var(--green-dim);
        }

        .matrix-row.selected {
            border-left-color: var(--green);
            background: rgba(0,255,65,0.05);
        }

        .matrix-label {
            color: var(--green-dim);
            font-size: 13px;
        }

        .matrix-bar {
            flex: 1;
            height: 6px;
            background: var(--bg);
            border: 1px solid var(--green-dim);
            margin: 0 12px;
            overflow: hidden;
        }

        .matrix-bar-fill {
            height: 100%;
            background: var(--green);
            transition: width 0.5s ease;
        }

        .matrix-value {
            color: var(--green);
            font-size: 13px;
            min-width: 50px;
            text-align: right;
        }

        .matrix-selected-indicator {
            color: var(--green);
            font-size: 11px;
            margin-left: 6px;
        }

        /* ─── AI Recommendations ──────────────────────────────────────────────── */

        .ai-recommendations {
            margin-bottom: 12px;
        }

        .recommendation-item {
            padding: 8px 12px;
            margin: 6px 0;
            background: var(--bg-card);
            border-left: 3px solid var(--amber);
            color: var(--green-dim);
            font-size: 12px;
        }

        .recommendation-item::before {
            content: '> ';
            color: var(--amber);
        }

        /* ─── Model Stats ─────────────────────────────────────────────────────── */

        .model-stats {
            margin-bottom: 12px;
        }

        /* ─── AI Training Visualization ───────────────────────────────────────── */

        .ai-training-viz {
            margin: 16px 0;
            padding: 12px;
            background: var(--bg-card);
            border: 1px solid var(--green-dim);
        }

        #aiLossChart {
            max-width: 100%;
            height: auto !important;
        }

        /* ─── AI Controls ─────────────────────────────────────────────────────── */

        .ai-controls {
            display: flex;
            flex-direction: column;
            gap: 8px;
            margin: 16px 0;
        }

        /* ─── User Feedback ───────────────────────────────────────────────────── */

        .ai-feedback {
            margin-top: 20px;
        }

        .feedback-buttons {
            display: grid;
            grid-template-columns: repeat(2, 1fr);
            gap: 8px;
            margin-top: 10px;
        }

        .feedback-btn {
            padding: 10px;
            background: transparent;
            color: var(--green);
            border: 1px solid var(--green);
            font-family: var(--font);
            font-size: 12px;
            cursor: pointer;
            transition: background 0.2s, box-shadow 0.2s;
        }

        .feedback-btn:hover {
            background: rgba(0, 255, 65, 0.08);
            box-shadow: 0 0 10px rgba(0,255,65,0.25);
        }

        .feedback-btn:active {
            background: rgba(0, 255, 65, 0.15);
        }

        @media (max-width: 480px) {
            .feedback-buttons {
                grid-template-columns: 1fr;
            }
        }

        /* ─── Prediction Widget ──────────────────────────────────────────────────── */

        .prediction-widget {
            border: 1px solid var(--green-dim);
            background: var(--bg-card);
            padding: 14px 16px;
            margin-bottom: 20px;
            box-shadow: 0 0 8px rgba(0,255,65,0.08);
        }

        .prediction-widget-label {
            font-size: 11px;
            color: var(--green-dim);
            letter-spacing: 2px;
            margin-bottom: 12px;
        }

        .forecast-timeline {
            display: flex;
            flex-direction: column;
            gap: 8px;
            margin-bottom: 12px;
        }

        .forecast-item {
            display: grid;
            grid-template-columns: 60px 1fr 90px;
            align-items: center;
            gap: 8px;
        }

        .forecast-time {
            font-size: 11px;
            color: var(--green-dim);
            white-space: nowrap;
        }

        .forecast-bar-wrap {
            background: rgba(0,255,65,0.05);
            border: 1px solid rgba(0,255,65,0.2);
            height: 14px;
            overflow: hidden;
        }

        .forecast-bar {
            height: 100%;
            width: 0%;
            transition: width 0.4s ease, background 0.4s ease;
        }

        .forecast-bar.quality-excellent { background: #00ff41; box-shadow: 0 0 6px #00ff41; }
        .forecast-bar.quality-good      { background: #00cc33; }
        .forecast-bar.quality-fair      { background: var(--amber); }
        .forecast-bar.quality-poor      { background: #ff3333; box-shadow: 0 0 6px #ff3333; }

        .forecast-label {
            font-size: 11px;
            color: var(--green);
            text-align: right;
            white-space: nowrap;
        }

        /* ─── Usage Bar ──────────────────────────────────────────────────────────── */

        .usage-bar-wrap {
            display: flex;
            align-items: center;
            gap: 8px;
        }

        .usage-bar-label {
            font-size: 11px;
            color: var(--green-dim);
            white-space: nowrap;
        }

        .usage-bar-track {
            flex: 1;
            background: rgba(0,255,65,0.05);
            border: 1px solid rgba(0,255,65,0.2);
            height: 10px;
            overflow: hidden;
        }

        .usage-bar {
            height: 100%;
            width: 0%;
            background: var(--green-dim);
            transition: width 0.4s ease, background 0.4s ease;
        }

        .usage-bar.level-notice   { background: var(--green); }
        .usage-bar.level-warning  { background: var(--amber); }
        .usage-bar.level-danger   { background: #ff6600; }
        .usage-bar.level-critical { background: #ff3333; }

        .usage-bar-value {
            font-size: 11px;
            color: var(--green-dim);
            white-space: nowrap;
        }

        /* ─── Prediction Modal Sections ─────────────────────────────────────────── */

        .prediction-section {
            margin-bottom: 8px;
        }

        .prediction-section .dim-text {
            margin-top: 8px;
            font-size: 12px;
        }

        .pred-forecast-row {
            display: grid;
            grid-template-columns: 70px 1fr 100px;
            align-items: center;
            gap: 10px;
            margin: 6px 0;
            font-size: 12px;
        }

        .pred-pattern-row {
            display: flex;
            gap: 12px;
            font-size: 12px;
            margin: 4px 0;
        }

        .pred-pattern-row .label {
            color: var(--green-dim);
            min-width: 120px;
        }

        @media (max-width: 480px) {
            .forecast-item {
                grid-template-columns: 55px 1fr 80px;
            }
            .pred-forecast-row {
                grid-template-columns: 60px 1fr 90px;
            }
        }
