{% extends "base.html" %} {% block title %}Orbital — SignalOps{% endblock %} {% block extra_style %} #orb-map{width:100%;height:100%;background:#000} .layer-row{display:flex;align-items:center;justify-content:space-between;padding:8px 10px;border-radius:6px;background:var(--e);margin-bottom:6px;cursor:pointer;user-select:none;border:1px solid transparent;transition:border-color 0.15s} .layer-row:hover{border-color:rgba(138, 122, 184,0.25)} .layer-row.active{border-color:rgba(138, 122, 184,0.4);background:rgba(138, 122, 184,0.06)} .layer-row span.name{font-family:'Rajdhani',sans-serif;font-weight:600;font-size:12px;letter-spacing:1px;color:var(--t)} .layer-row span.cnt{font-size:10px;color:var(--tm);font-family:monospace} .mission-dot{display:inline-block;width:8px;height:8px;border-radius:50%;margin-right:6px;vertical-align:middle} .legend-row{display:flex;align-items:center;font-size:10px;color:var(--td);padding:3px 0} /* ═══ MAP STYLE TOGGLE (base + overlay) ═══ */ #map-style-toggle{ position:absolute; bottom:14px;left:14px; background:rgba(11, 11, 15,0.92); backdrop-filter:blur(14px) saturate(1.2); -webkit-backdrop-filter:blur(14px) saturate(1.2); border:1px solid rgba(138, 122, 184,0.28); border-radius:10px; padding:4px; z-index:500; display:flex;flex-direction:column;gap:2px; box-shadow:0 10px 30px rgba(0,0,0,0.55), inset 0 1px 0 rgba(255,255,255,0.04); font-family:'Rajdhani',sans-serif; } #map-style-toggle .mst-row{display:flex;gap:1px;padding:2px} #map-style-toggle .mst-sep{ height:1px;margin:1px 8px; background:linear-gradient(to right, transparent, rgba(138, 122, 184,0.25), transparent); } #map-style-toggle button{ background:transparent;border:none; color:var(--td); font-family:'Rajdhani',sans-serif;font-size:10px;font-weight:700; letter-spacing:1.2px; padding:6px 10px;border-radius:6px; cursor:pointer;transition:all 0.18s ease; display:inline-flex;align-items:center;gap:5px; position:relative; } #map-style-toggle button svg{ width:13px;height:13px;flex-shrink:0; stroke:currentColor;fill:none; stroke-width:1.8;stroke-linecap:round;stroke-linejoin:round; opacity:0.85;transition:opacity 0.15s, transform 0.2s; } #map-style-toggle button:hover{color:var(--t);background:rgba(138, 122, 184,0.08)} #map-style-toggle button:hover svg{opacity:1;transform:scale(1.08)} #map-style-toggle .mst-base button.active{ color:#C3B8E2; background:linear-gradient(180deg, rgba(138, 122, 184,0.25), rgba(138, 122, 184,0.12)); box-shadow:inset 0 0 0 1px rgba(180, 168, 214,0.4), 0 0 12px rgba(138, 122, 184,0.2); } #map-style-toggle .mst-base button.active svg{opacity:1} #map-style-toggle .mst-overlay button.active{ color:#FCD34D; background:linear-gradient(180deg, rgba(201, 161, 90,0.2), rgba(201, 161, 90,0.08)); box-shadow:inset 0 0 0 1px rgba(201, 161, 90,0.45), 0 0 10px rgba(201, 161, 90,0.18); } #map-style-toggle .mst-overlay button.active svg{opacity:1} /* Attribution control styling */ .leaflet-control-attribution{ background:rgba(8,11,9,0.7) !important; color:var(--tm) !important; font-size:9px !important; padding:2px 6px !important; border-radius:4px 0 0 0 !important; } .leaflet-control-attribution a{color:var(--td) !important} /* ═══ MAP HUD OVERLAY (live map-derived values) ═══ */ #drone-hud{ position:absolute;inset:0;pointer-events:none;z-index:450; display:none; font-family:'JetBrains Mono',monospace;color:#4ADE80; text-shadow:0 0 4px rgba(74,222,128,0.6); } #drone-hud.active{display:block} #drone-hud::before{ content:'';position:absolute;inset:0; background: radial-gradient(ellipse at center, transparent 35%, rgba(0,0,0,0.35) 100%), linear-gradient(rgba(74,222,128,0.04) 1px, transparent 1px), linear-gradient(90deg, rgba(74,222,128,0.04) 1px, transparent 1px); background-size:100% 100%, 40px 40px, 40px 40px; pointer-events:none; } #drone-hud .dh-cross{ position:absolute;top:50%;left:50%; width:80px;height:80px; transform:translate(-50%,-50%); } #drone-hud .dh-cross::before, #drone-hud .dh-cross::after{ content:'';position:absolute;background:#4ADE80; box-shadow:0 0 6px rgba(74,222,128,0.8); } #drone-hud .dh-cross::before{left:50%;top:0;bottom:0;width:1px;transform:translateX(-0.5px)} #drone-hud .dh-cross::after{top:50%;left:0;right:0;height:1px;transform:translateY(-0.5px)} #drone-hud .dh-cross .dh-dot{ position:absolute;top:50%;left:50%;width:8px;height:8px; border:1px solid #4ADE80;border-radius:50%; transform:translate(-50%,-50%); } #drone-hud .dh-corner{ position:absolute;width:28px;height:28px; border-color:#4ADE80;border-style:solid; } #drone-hud .dh-tl{top:16px;left:16px;border-width:2px 0 0 2px} #drone-hud .dh-tr{top:16px;right:16px;border-width:2px 2px 0 0} #drone-hud .dh-bl{bottom:16px;left:16px;border-width:0 0 2px 2px} #drone-hud .dh-br{bottom:16px;right:16px;border-width:0 2px 2px 0} #drone-hud .dh-telemetry{ position:absolute;top:20px;left:56px; font-size:10px;letter-spacing:1.5px;line-height:1.7; } #drone-hud .dh-telemetry .k{color:rgba(74,222,128,0.5);margin-right:6px} #drone-hud .dh-telemetry .v{color:#4ADE80;font-weight:700} #drone-hud .dh-status{ position:absolute;top:20px;right:56px;text-align:right; font-size:10px;letter-spacing:2px; } #drone-hud .dh-status .rec{ display:inline-block;width:8px;height:8px;border-radius:50%; background:#F87171;margin-right:6px; animation:dh-blink 1s infinite; box-shadow:0 0 8px rgba(248,113,113,0.8); } @keyframes dh-blink{0%,50%{opacity:1}51%,100%{opacity:0.2}} #drone-hud .dh-altbar{ position:absolute;right:24px;top:50%;transform:translateY(-50%); width:4px;height:180px;background:rgba(74,222,128,0.15);border-radius:2px; } #drone-hud .dh-altbar::before{ content:'';position:absolute;left:-1px;right:-1px;bottom:0; height:var(--dh-zoom-pct,60%);background:linear-gradient(to top, #4ADE80, rgba(74,222,128,0.3)); border-radius:2px;box-shadow:0 0 6px rgba(74,222,128,0.6); } #drone-hud .dh-footer{ position:absolute;bottom:20px;left:56px;right:56px; display:flex;justify-content:space-between;font-size:9px; letter-spacing:2px;color:rgba(74,222,128,0.7); } /* ═══ MGRS GRID LABEL ═══ */ .mgrs-lbl{ background:rgba(11, 11, 15,0.85); color:#C9A15A; font-family:'JetBrains Mono',monospace; font-size:9px;font-weight:700; padding:1px 4px;border:1px solid rgba(201, 161, 90,0.3); border-radius:2px;letter-spacing:0.5px; white-space:nowrap;pointer-events:none; } /* Drone-mode subtle map desaturation for immersion */ .orb-map-drone{filter:contrast(1.15) saturate(0.75) brightness(0.9)} /* ═══ RESPONSIVE — map toolbar + HUD (desktop >900px unchanged) ═══ */ @media (max-width:900px){ #map-style-toggle{left:8px;bottom:8px;max-width:calc(100% - 16px)} #map-style-toggle .mst-row{flex-wrap:wrap} #map-style-toggle button{min-height:36px;padding:6px 9px} #drone-hud .dh-corner{width:20px;height:20px} #drone-hud .dh-tl{top:10px;left:10px} #drone-hud .dh-tr{top:10px;right:10px} #drone-hud .dh-bl{bottom:10px;left:10px} #drone-hud .dh-br{bottom:10px;right:10px} #drone-hud .dh-telemetry{top:14px;left:54px;font-size:9px;letter-spacing:0.5px;line-height:1.6} #drone-hud .dh-status{top:14px;right:38px;font-size:9px;letter-spacing:0.5px} #drone-hud .dh-altbar{right:14px;height:110px} #drone-hud .dh-footer{top:96px;bottom:auto;left:54px;right:38px;font-size:8px;letter-spacing:0.5px;gap:8px;flex-wrap:wrap} .leaflet-popup-content{max-width:calc(100vw - 80px)} } @media (max-width:600px){ /* icon-only map toolbar on phones (labels stay in title tooltips) */ #map-style-toggle button{font-size:0;gap:0;min-width:36px;justify-content:center;padding:6px} #map-style-toggle button svg{width:16px;height:16px} } /* ═══ RESPONSIVE — page layout ═══ */ @media (max-width:900px){ .orb-grid{grid-template-columns:minmax(0,1fr) !important;height:auto !important;gap:12px !important} .orb-side{display:contents} .orb-side > .card{order:2;margin-bottom:0 !important} .orb-side > .card:first-child{order:0} .orb-map-card{order:1;height:60vh;min-height:360px;margin-bottom:0} .orb-side .btn{min-height:40px} .layer-row{min-height:40px} .layer-row span.cnt{max-width:55%;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;text-align:right} } @media (max-width:600px){ .orb-side > .card{padding:14px} } {% endblock %} {% block content %}