Files
ui/_docs/ui_design/v2/stitch/flights.html
Armen Rohalov 2a62415f0c ui_design v2: redesign of all 5 pages
ui_design v2: tactical-ops redesign of all 5 pages

Two parallel takes on visual polish for flights, annotations, dataset
explorer, admin, and settings.

- v2/plugin/ — self-contained HTML produced via the frontend-design
  plugin, adheres to v2/plugin/_design_system.md..
- v2/stitch/ — Google Stitch MCP exports against the same design
  system.

IA from the original wireframes in _docs/ui_design/ is preserved
verbatim — this pass is visual only.
2026-05-16 20:09:16 +03:00

338 lines
16 KiB
HTML

<!DOCTYPE html>
<html class="dark" lang="en"><head>
<meta charset="utf-8"/>
<meta content="width=device-width, initial-scale=1.0" name="viewport"/>
<title>AZAION Tactical Ops - FLIGHTS</title>
<script src="https://cdn.tailwindcss.com?plugins=forms,container-queries"></script>
<link href="https://fonts.googleapis.com/css2?family=JetBrains+Mono:wght@400;700&amp;family=IBM+Plex+Sans:wght@400;500;600&amp;display=swap" rel="stylesheet"/>
<link href="https://fonts.googleapis.com/css2?family=Material+Symbols+Outlined:wght,FILL@100..700,0..1&amp;display=swap" rel="stylesheet"/>
<link href="https://fonts.googleapis.com/css2?family=Material+Symbols+Outlined:wght,FILL@100..700,0..1&amp;display=swap" rel="stylesheet"/>
<style>
body {
font-family: 'IBM Plex Sans', sans-serif;
background-color: #0A0D10;
color: #E8ECF1;
margin: 0;
overflow: hidden;
}
.font-headline { font-family: 'JetBrains Mono', monospace; }
.tabular-nums { font-variant-numeric: tabular-nums; }
.scanline-overlay {
background: linear-gradient(rgba(18, 16, 16, 0) 50%, rgba(0, 0, 0, 0.1) 50%), linear-gradient(90deg, rgba(255, 0, 0, 0.03), rgba(0, 255, 0, 0.01), rgba(0, 0, 255, 0.03));
background-size: 100% 2px, 3px 100%;
pointer-events: none;
}
.grid-bg {
background-image: linear-gradient(to right, rgba(255, 255, 255, 0.03) 1px, transparent 1px),
linear-gradient(to bottom, rgba(255, 255, 255, 0.03) 1px, transparent 1px);
background-size: 60px 60px;
}
/* Corner Brackets */
.corner-bracket {
position: relative;
}
.corner-bracket::before, .corner-bracket::after,
.corner-bracket > .bracket-bottom::before, .corner-bracket > .bracket-bottom::after {
content: '';
position: absolute;
width: 8px;
height: 8px;
border-color: #FF9D3D;
border-style: solid;
pointer-events: none;
}
/* Top Left */
.corner-bracket::before { top: 0; left: 0; border-width: 1px 0 0 1px; }
/* Top Right */
.corner-bracket::after { top: 0; right: 0; border-width: 1px 1px 0 0; }
/* Bottom Left */
.bracket-bottom::before { bottom: 0; left: 0; border-width: 0 0 1px 1px; }
/* Bottom Right */
.bracket-bottom::after { bottom: 0; right: 0; border-width: 0 1px 1px 0; }
.custom-scrollbar::-webkit-scrollbar { width: 4px; }
.custom-scrollbar::-webkit-scrollbar-track { background: #13171C; }
.custom-scrollbar::-webkit-scrollbar-thumb { background: #252B34; }
</style>
<script id="tailwind-config">
tailwind.config = {
darkMode: "class",
theme: {
extend: {
colors: {
surface: {
0: "#0A0D10",
1: "#13171C",
2: "#1A1F26"
},
hairline: "#252B34",
amber: "#FF9D3D",
cyan: "#36D6C5",
red: "#FF4756",
green: "#3DDC84"
},
fontFamily: {
headline: ["JetBrains Mono", "monospace"],
body: ["IBM Plex Sans", "sans-serif"]
}
}
}
}
</script>
</head>
<body class="h-screen flex flex-col">
<!-- TopAppBar -->
<header class="bg-[#13171C] border-b border-[#252B34] h-12 flex justify-between items-center px-4 z-50">
<div class="flex items-center gap-6">
<span class="font-headline text-lg font-bold tracking-tighter text-[#FF9D3D]">AZAION</span>
<div class="flex items-center border border-amber px-2 py-0.5 rounded-sm gap-2 bg-surface-2 cursor-pointer">
<span class="font-headline text-[10px] tracking-[0.12em] text-amber">FL02</span>
<span class="material-symbols-outlined text-amber text-xs">arrow_drop_down</span>
</div>
<nav class="flex h-12 items-center">
<a class="text-[#FF9D3D] border-b-2 border-[#FF9D3D] h-full flex items-center px-4 font-headline text-[10px] tracking-[0.12em] uppercase transition-colors duration-150" href="#">FLIGHTS</a>
<a class="text-[#5B6573] hover:text-[#E8ECF1] hover:bg-[#1A1F26] h-full flex items-center px-4 font-headline text-[10px] tracking-[0.12em] uppercase transition-colors duration-150" href="#">ANNOTATIONS</a>
<a class="text-[#5B6573] hover:text-[#E8ECF1] hover:bg-[#1A1F26] h-full flex items-center px-4 font-headline text-[10px] tracking-[0.12em] uppercase transition-colors duration-150" href="#">DATASET</a>
<a class="text-[#5B6573] hover:text-[#E8ECF1] hover:bg-[#1A1F26] h-full flex items-center px-4 font-headline text-[10px] tracking-[0.12em] uppercase transition-colors duration-150" href="#">ADMIN</a>
</nav>
</div>
<div class="flex items-center gap-4">
<div class="flex items-center gap-2">
<span class="font-headline text-[10px] tracking-[0.12em] text-cyan">SYSTEM_STATUS: OK</span>
<div class="w-1.5 h-1.5 rounded-full bg-cyan shadow-[0_0_4px_#36D6C5]"></div>
</div>
<div class="flex items-center gap-3">
<span class="material-symbols-outlined text-[#5B6573] text-lg hover:text-white cursor-pointer">settings</span>
<span class="material-symbols-outlined text-[#5B6573] text-lg hover:text-white cursor-pointer">notifications</span>
<div class="flex items-center gap-2 pl-2 border-l border-hairline">
<span class="font-headline text-[10px] text-secondary">OPERATOR_042</span>
<span class="material-symbols-outlined text-[#5B6573] text-xl">account_circle</span>
</div>
</div>
</div>
</header>
<main class="flex-1 flex overflow-hidden">
<!-- Column 1: Flights Sidebar -->
<aside class="w-[200px] bg-surface-1 border-r border-hairline flex flex-col p-4 corner-bracket">
<div class="bracket-bottom"></div>
<h2 class="font-headline text-[10px] tracking-[0.12em] text-amber mb-4">FLIGHTS_INDEX</h2>
<div class="flex-1 space-y-1 overflow-y-auto custom-scrollbar">
<div class="px-3 py-2 border border-transparent hover:bg-surface-2 cursor-pointer transition-colors">
<div class="font-headline text-xs text-white">FL01</div>
<div class="font-headline text-[9px] text-muted tracking-tighter">2023-11-24 08:30</div>
</div>
<div class="px-3 py-2 bg-surface-2 border-l-2 border-amber cursor-pointer">
<div class="font-headline text-xs text-amber">FL02</div>
<div class="font-headline text-[9px] text-amber/60 tracking-tighter">2023-11-24 10:15</div>
</div>
<div class="px-3 py-2 border border-transparent hover:bg-surface-2 cursor-pointer">
<div class="font-headline text-xs text-white">FL03</div>
<div class="font-headline text-[9px] text-muted tracking-tighter">2023-11-24 14:00</div>
</div>
<div class="px-3 py-2 border border-transparent hover:bg-surface-2 cursor-pointer">
<div class="font-headline text-xs text-white">FL04</div>
<div class="font-headline text-[9px] text-muted tracking-tighter">2023-11-25 09:12</div>
</div>
</div>
<div class="mt-4 pt-4 border-t border-hairline">
<h3 class="font-headline text-[10px] tracking-[0.12em] text-muted mb-2">TELEMETRY_LOG</h3>
<div class="bg-surface-0 border border-hairline p-2 flex items-center justify-between cursor-pointer">
<span class="font-headline text-[10px] text-secondary">24_NOV_2023</span>
<span class="material-symbols-outlined text-xs text-muted">calendar_today</span>
</div>
</div>
<button class="mt-6 w-full border border-amber py-2 font-headline text-[10px] tracking-[0.12em] text-amber hover:bg-amber/10 transition-colors uppercase">
+ NEW FLIGHT
</button>
</aside>
<!-- Column 2: Parameters & Waypoints -->
<aside class="w-[260px] bg-surface-1 border-r border-hairline flex flex-col p-4 corner-bracket">
<div class="bracket-bottom"></div>
<h2 class="font-headline text-[10px] tracking-[0.12em] text-amber mb-4">FLIGHT_PARAMETERS</h2>
<div class="space-y-4 mb-6">
<div>
<label class="font-headline text-[10px] text-muted tracking-widest block mb-1">AIRCRAFT</label>
<div class="bg-surface-0 border border-hairline px-2 py-1.5 text-xs text-white">DJI Mavic 3 Enterprise</div>
</div>
<div>
<label class="font-headline text-[10px] text-muted tracking-widest block mb-1">DEFAULT_HEIGHT</label>
<div class="flex items-center gap-2">
<div class="bg-surface-0 border border-hairline px-2 py-1.5 text-xs text-white flex-1 tabular-nums">100</div>
<span class="font-headline text-[10px] text-muted">M</span>
</div>
</div>
<div class="grid grid-cols-3 gap-2">
<div>
<label class="font-headline text-[9px] text-muted block mb-1">FOCAL</label>
<div class="bg-surface-0 border border-hairline p-1 text-[10px] tabular-nums text-center">24MM</div>
</div>
<div>
<label class="font-headline text-[9px] text-muted block mb-1">SENSOR</label>
<div class="bg-surface-0 border border-hairline p-1 text-[10px] tabular-nums text-center">17.3MM</div>
</div>
<div>
<label class="font-headline text-[9px] text-muted block mb-1">ALT</label>
<div class="bg-surface-0 border border-hairline p-1 text-[10px] tabular-nums text-center">45M</div>
</div>
</div>
<div>
<label class="font-headline text-[10px] text-muted tracking-widest block mb-1">COMM_ADDR</label>
<div class="bg-surface-0 border border-hairline px-2 py-1.5 text-xs text-white font-headline tabular-nums">192.168.1.1:8080</div>
</div>
</div>
<div class="flex-1 flex flex-col min-h-0">
<h2 class="font-headline text-[10px] tracking-[0.12em] text-amber mb-2">WAYPOINTS_V1</h2>
<div class="flex-1 overflow-y-auto custom-scrollbar border border-hairline">
<table class="w-full text-left border-collapse">
<thead class="bg-surface-2 sticky top-0">
<tr>
<th class="font-headline text-[9px] p-2 border-b border-hairline text-muted">ID</th>
<th class="font-headline text-[9px] p-2 border-b border-hairline text-muted">LABEL</th>
<th class="font-headline text-[9px] p-2 border-b border-hairline text-muted">STATUS</th>
</tr>
</thead>
<tbody class="text-[10px] font-headline">
<tr class="border-b border-hairline hover:bg-surface-2 cursor-pointer">
<td class="p-2 text-green">A1</td>
<td class="p-2">START_POINT</td>
<td class="p-2 text-green">LOCKED</td>
</tr>
<tr class="border-b border-hairline hover:bg-surface-2 cursor-pointer">
<td class="p-2 text-amber">A2</td>
<td class="p-2">TRANS_01</td>
<td class="p-2 text-amber">READY</td>
</tr>
<tr class="border-b border-hairline hover:bg-surface-2 cursor-pointer">
<td class="p-2 text-amber">A3</td>
<td class="p-2">TRANS_02</td>
<td class="p-2 text-amber">READY</td>
</tr>
<tr class="border-b border-hairline hover:bg-surface-2 cursor-pointer">
<td class="p-2 text-amber">A4</td>
<td class="p-2">TRANS_03</td>
<td class="p-2 text-muted">PENDING</td>
</tr>
<tr class="border-b border-hairline hover:bg-surface-2 cursor-pointer">
<td class="p-2 text-amber">A5</td>
<td class="p-2">TRANS_04</td>
<td class="p-2 text-muted">PENDING</td>
</tr>
<tr class="hover:bg-surface-2 cursor-pointer">
<td class="p-2 text-red">A6</td>
<td class="p-2">FINISH_LINE</td>
<td class="p-2 text-muted">PENDING</td>
</tr>
</tbody>
</table>
</div>
</div>
<div class="grid grid-cols-2 gap-2 mt-4">
<button class="border border-red text-red font-headline text-[10px] py-2 hover:bg-red/10 transition-colors">GPS-DENIED</button>
<button class="border border-green text-green font-headline text-[10px] py-2 hover:bg-green/10 transition-colors">UPLOAD</button>
</div>
</aside>
<!-- Column 3: Map View -->
<section class="flex-1 relative bg-surface-0 grid-bg overflow-hidden">
<div class="absolute inset-0 scanline-overlay"></div>
<!-- Map Simulation (SVG Path) -->
<svg class="absolute inset-0 w-full h-full opacity-60">
<!-- Original Path (Red Dashed) -->
<path d="M 200,600 L 400,450 L 550,500 L 700,300 L 900,350 L 1100,200" fill="none" stroke="#FF4756" stroke-dasharray="8,4" stroke-width="2"></path>
<!-- Corrected Path (Cyan Solid) -->
<path d="M 200,600 L 420,430 L 580,480 L 720,280 L 930,330 L 1100,200" fill="none" stroke="#36D6C5" stroke-width="2"></path>
</svg>
<!-- Waypoint Markers -->
<div class="absolute" style="top: 600px; left: 200px; transform: translate(-50%, -50%);">
<div class="w-4 h-4 bg-green border-2 border-white"></div>
<span class="absolute top-6 left-1/2 -translate-x-1/2 font-headline text-[9px] text-green">START</span>
</div>
<div class="absolute" style="top: 430px; left: 420px; transform: translate(-50%, -50%);">
<div class="w-3 h-3 bg-amber border border-white"></div>
<span class="absolute top-4 left-1/2 -translate-x-1/2 font-headline text-[9px] text-amber">A2</span>
</div>
<div class="absolute" style="top: 480px; left: 580px; transform: translate(-50%, -50%);">
<div class="w-3 h-3 bg-amber border border-white"></div>
<span class="absolute top-4 left-1/2 -translate-x-1/2 font-headline text-[9px] text-amber">A3</span>
</div>
<div class="absolute" style="top: 280px; left: 720px; transform: translate(-50%, -50%);">
<div class="w-3 h-3 bg-amber border border-white"></div>
</div>
<div class="absolute" style="top: 330px; left: 930px; transform: translate(-50%, -50%);">
<div class="w-3 h-3 bg-amber border border-white"></div>
</div>
<div class="absolute" style="top: 200px; left: 1100px; transform: translate(-50%, -50%);">
<div class="w-4 h-4 bg-red rotate-45 border-2 border-white"></div>
<span class="absolute top-6 left-1/2 -translate-x-1/2 font-headline text-[9px] text-red">FINISH</span>
</div>
<!-- HUD (Top-Right) -->
<div class="absolute top-6 right-6 p-4 bg-surface-1/80 border border-hairline corner-bracket backdrop-blur-sm min-w-[180px]">
<div class="bracket-bottom"></div>
<div class="flex items-center gap-2 mb-3">
<div class="w-2 h-2 rounded-full bg-cyan animate-pulse"></div>
<span class="font-headline text-[10px] tracking-widest text-white">LIVE • CONNECTED</span>
</div>
<div class="space-y-1 font-headline text-[11px] tabular-nums">
<div class="flex justify-between">
<span class="text-muted">LAT</span>
<span class="text-white">48.856621</span>
</div>
<div class="flex justify-between">
<span class="text-muted">LON</span>
<span class="text-white">2.352212</span>
</div>
<div class="flex justify-between">
<span class="text-muted">SAT</span>
<span class="text-white">12_ACTIVE</span>
</div>
<div class="flex justify-between border-t border-hairline pt-1 mt-1">
<span class="text-muted">ALT</span>
<span class="text-cyan">45.28M</span>
</div>
</div>
</div>
<!-- Map Controls Overlay -->
<div class="absolute top-6 left-6 flex flex-col gap-2">
<button class="w-8 h-8 bg-surface-1 border border-hairline flex items-center justify-center hover:bg-surface-2">
<span class="material-symbols-outlined text-sm">add</span>
</button>
<button class="w-8 h-8 bg-surface-1 border border-hairline flex items-center justify-center hover:bg-surface-2">
<span class="material-symbols-outlined text-sm">remove</span>
</button>
<button class="w-8 h-8 bg-surface-1 border border-hairline flex items-center justify-center hover:bg-surface-2 mt-4">
<span class="material-symbols-outlined text-sm">layers</span>
</button>
</div>
<!-- Legend (Bottom-Left) -->
<div class="absolute bottom-6 left-6 p-3 bg-surface-1/90 border border-hairline text-[10px] font-headline flex flex-col gap-2">
<div class="flex items-center gap-2">
<div class="w-2 h-2 rounded-full bg-red"></div>
<span class="text-muted uppercase">Original path</span>
</div>
<div class="flex items-center gap-2">
<div class="w-2 h-2 rounded-full bg-cyan"></div>
<span class="text-muted uppercase">Corrected path</span>
</div>
</div>
<!-- Compass Overlay -->
<div class="absolute bottom-6 right-6 opacity-40">
<svg height="80" viewbox="0 0 80 80" width="80">
<circle cx="40" cy="40" fill="none" r="38" stroke="#252B34" stroke-width="1"></circle>
<text fill="#5B6573" font-family="JetBrains Mono" font-size="8" text-anchor="middle" x="40" y="12">N</text>
<path d="M 40,20 L 45,40 L 40,60 L 35,40 Z" fill="#FF9D3D"></path>
</svg>
</div>
</section>
</main>
<!-- Contextual Footer / Status Bar -->
<footer class="h-6 bg-[#13171C] border-t border-[#252B34] flex justify-between items-center px-4">
<div class="flex items-center gap-4">
<span class="font-headline text-[9px] text-muted">LOG_BUFFER: 100%</span>
<span class="font-headline text-[9px] text-muted">FRAME_RATE: 60FPS</span>
</div>
<div class="flex items-center gap-4">
<span class="font-headline text-[9px] text-muted">SECTOR_7_ACTIVE</span>
<span class="font-headline text-[9px] text-amber uppercase">Security level: ALPHA</span>
</div>
</footer>
</body></html>