feat: Add SkyView logo, favicon, and branding assets #39
8 changed files with 328 additions and 5 deletions
|
|
@ -101,6 +101,30 @@ body {
|
|||
color: #00a8ff;
|
||||
}
|
||||
|
||||
/* New header branding styles */
|
||||
.header-brand {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
gap: 1rem;
|
||||
}
|
||||
|
||||
.header-logo {
|
||||
height: 50px;
|
||||
width: auto;
|
||||
filter: drop-shadow(0 2px 4px rgba(0, 212, 255, 0.3));
|
||||
}
|
||||
|
||||
.header-text {
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
gap: 0.25rem;
|
||||
}
|
||||
|
||||
.header-links {
|
||||
display: flex;
|
||||
gap: 0.5rem;
|
||||
}
|
||||
|
||||
.stats-summary {
|
||||
display: flex;
|
||||
gap: 1rem;
|
||||
|
|
|
|||
11
assets/static/images/favicon-16.svg
Normal file
11
assets/static/images/favicon-16.svg
Normal file
|
|
@ -0,0 +1,11 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<svg width="16" height="16" viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg">
|
||||
<!-- Simplified favicon for 16x16 -->
|
||||
<circle cx="8" cy="8" r="7" fill="#003d52" stroke="#00d4ff" stroke-width="1"/>
|
||||
<circle cx="8" cy="8" r="5" stroke="#00d4ff" stroke-width="0.5" fill="none" opacity="0.6"/>
|
||||
<circle cx="8" cy="8" r="3" stroke="#00d4ff" stroke-width="0.5" fill="none" opacity="0.4"/>
|
||||
<line x1="8" y1="8" x2="13" y2="5" stroke="#00d4ff" stroke-width="1" opacity="0.8"/>
|
||||
<circle cx="11" cy="6" r="0.8" fill="#00ff00"/>
|
||||
<circle cx="6" cy="10" r="0.8" fill="#00ff00"/>
|
||||
<circle cx="8" cy="8" r="1" fill="#00d4ff"/>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 672 B |
32
assets/static/images/favicon-32.svg
Normal file
32
assets/static/images/favicon-32.svg
Normal file
|
|
@ -0,0 +1,32 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<svg width="32" height="32" viewBox="0 0 32 32" xmlns="http://www.w3.org/2000/svg">
|
||||
<defs>
|
||||
<radialGradient id="bgGradient" cx="50%" cy="50%" r="50%">
|
||||
<stop offset="0%" style="stop-color:#004d66;stop-opacity:1" />
|
||||
<stop offset="100%" style="stop-color:#001a26;stop-opacity:1" />
|
||||
</radialGradient>
|
||||
</defs>
|
||||
|
||||
<!-- Background -->
|
||||
<circle cx="16" cy="16" r="15" fill="url(#bgGradient)" stroke="#00d4ff" stroke-width="1"/>
|
||||
|
||||
<!-- Radar circles -->
|
||||
<circle cx="16" cy="16" r="12" stroke="#00d4ff" stroke-width="1" fill="none" opacity="0.5"/>
|
||||
<circle cx="16" cy="16" r="8" stroke="#00d4ff" stroke-width="0.8" fill="none" opacity="0.6"/>
|
||||
<circle cx="16" cy="16" r="4" stroke="#00d4ff" stroke-width="0.6" fill="none" opacity="0.7"/>
|
||||
|
||||
<!-- Radar sweep -->
|
||||
<line x1="16" y1="16" x2="26" y2="10" stroke="#00d4ff" stroke-width="1.5" opacity="0.9"/>
|
||||
|
||||
<!-- Cross hairs -->
|
||||
<line x1="16" y1="3" x2="16" y2="29" stroke="#00d4ff" stroke-width="0.5" opacity="0.3"/>
|
||||
<line x1="3" y1="16" x2="29" y2="16" stroke="#00d4ff" stroke-width="0.5" opacity="0.3"/>
|
||||
|
||||
<!-- Aircraft blips -->
|
||||
<circle cx="22" cy="12" r="1.2" fill="#00ff00"/>
|
||||
<circle cx="12" cy="20" r="1.2" fill="#00ff00" opacity="0.8"/>
|
||||
<circle cx="20" cy="22" r="1.2" fill="#00ff00" opacity="0.9"/>
|
||||
|
||||
<!-- Center -->
|
||||
<circle cx="16" cy="16" r="1.5" fill="#00d4ff"/>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 1.4 KiB |
43
assets/static/images/favicon-48.svg
Normal file
43
assets/static/images/favicon-48.svg
Normal file
|
|
@ -0,0 +1,43 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<svg width="48" height="48" viewBox="0 0 48 48" xmlns="http://www.w3.org/2000/svg">
|
||||
<defs>
|
||||
<radialGradient id="bgGrad" cx="50%" cy="50%" r="50%">
|
||||
<stop offset="0%" style="stop-color:#004d66;stop-opacity:1" />
|
||||
<stop offset="80%" style="stop-color:#002633;stop-opacity:1" />
|
||||
<stop offset="100%" style="stop-color:#001a26;stop-opacity:1" />
|
||||
</radialGradient>
|
||||
<filter id="glow">
|
||||
<feGaussianBlur stdDeviation="1" result="coloredBlur"/>
|
||||
<feMerge>
|
||||
<feMergeNode in="coloredBlur"/>
|
||||
<feMergeNode in="SourceGraphic"/>
|
||||
</feMerge>
|
||||
</filter>
|
||||
</defs>
|
||||
|
||||
<!-- Background circle -->
|
||||
<circle cx="24" cy="24" r="22" fill="url(#bgGrad)" stroke="#00d4ff" stroke-width="2"/>
|
||||
|
||||
<!-- Radar circles with subtle glow -->
|
||||
<circle cx="24" cy="24" r="18" stroke="#00d4ff" stroke-width="1.5" fill="none" opacity="0.4" filter="url(#glow)"/>
|
||||
<circle cx="24" cy="24" r="14" stroke="#00d4ff" stroke-width="1.2" fill="none" opacity="0.5"/>
|
||||
<circle cx="24" cy="24" r="10" stroke="#00d4ff" stroke-width="1" fill="none" opacity="0.6"/>
|
||||
<circle cx="24" cy="24" r="6" stroke="#00d4ff" stroke-width="0.8" fill="none" opacity="0.7"/>
|
||||
|
||||
<!-- Radar sweep with animation -->
|
||||
<line x1="24" y1="24" x2="38" y2="14" stroke="#00d4ff" stroke-width="2" opacity="0.9" filter="url(#glow)"/>
|
||||
|
||||
<!-- Cross hairs -->
|
||||
<line x1="24" y1="4" x2="24" y2="44" stroke="#00d4ff" stroke-width="0.8" opacity="0.3"/>
|
||||
<line x1="4" y1="24" x2="44" y2="24" stroke="#00d4ff" stroke-width="0.8" opacity="0.3"/>
|
||||
|
||||
<!-- Aircraft blips -->
|
||||
<circle cx="34" cy="16" r="1.8" fill="#00ff00" filter="url(#glow)"/>
|
||||
<circle cx="16" cy="32" r="1.8" fill="#00ff00" opacity="0.8"/>
|
||||
<circle cx="32" cy="34" r="1.8" fill="#00ff00" opacity="0.9"/>
|
||||
<circle cx="14" cy="18" r="1.8" fill="#ffff00" opacity="0.7"/>
|
||||
|
||||
<!-- Center beacon -->
|
||||
<circle cx="24" cy="24" r="2.5" fill="#00d4ff" filter="url(#glow)"/>
|
||||
<circle cx="24" cy="24" r="1.5" fill="#ffffff" opacity="0.8"/>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 2 KiB |
101
assets/static/images/skyview-app-icon.svg
Normal file
101
assets/static/images/skyview-app-icon.svg
Normal file
|
|
@ -0,0 +1,101 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<svg width="512" height="512" viewBox="0 0 512 512" xmlns="http://www.w3.org/2000/svg">
|
||||
<defs>
|
||||
<!-- Background gradient -->
|
||||
<radialGradient id="bgGradient" cx="50%" cy="50%" r="70%">
|
||||
<stop offset="0%" style="stop-color:#0066cc;stop-opacity:1" />
|
||||
<stop offset="50%" style="stop-color:#003d66;stop-opacity:1" />
|
||||
<stop offset="100%" style="stop-color:#001a26;stop-opacity:1" />
|
||||
</radialGradient>
|
||||
|
||||
<!-- Radar sweep gradient -->
|
||||
<linearGradient id="sweepGradient" x1="0%" y1="0%" x2="100%" y2="100%">
|
||||
<stop offset="0%" style="stop-color:#00d4ff;stop-opacity:1" />
|
||||
<stop offset="50%" style="stop-color:#00aadd;stop-opacity:0.8" />
|
||||
<stop offset="100%" style="stop-color:#0088bb;stop-opacity:0.3" />
|
||||
</linearGradient>
|
||||
|
||||
<!-- Glow filter -->
|
||||
<filter id="glow" x="-50%" y="-50%" width="200%" height="200%">
|
||||
<feGaussianBlur stdDeviation="3" result="coloredBlur"/>
|
||||
<feMerge>
|
||||
<feMergeNode in="coloredBlur"/>
|
||||
<feMergeNode in="SourceGraphic"/>
|
||||
</feMerge>
|
||||
</filter>
|
||||
|
||||
<!-- Strong glow for center -->
|
||||
<filter id="strongGlow" x="-100%" y="-100%" width="300%" height="300%">
|
||||
<feGaussianBlur stdDeviation="6" result="coloredBlur"/>
|
||||
<feMerge>
|
||||
<feMergeNode in="coloredBlur"/>
|
||||
<feMergeNode in="SourceGraphic"/>
|
||||
</feMerge>
|
||||
</filter>
|
||||
</defs>
|
||||
|
||||
<!-- Background circle with border -->
|
||||
<circle cx="256" cy="256" r="240" fill="url(#bgGradient)" stroke="#00d4ff" stroke-width="6"/>
|
||||
|
||||
<!-- Outer radar grid circles -->
|
||||
<circle cx="256" cy="256" r="200" stroke="#00d4ff" stroke-width="4" fill="none" opacity="0.3" filter="url(#glow)"/>
|
||||
<circle cx="256" cy="256" r="160" stroke="#00d4ff" stroke-width="3.5" fill="none" opacity="0.4"/>
|
||||
<circle cx="256" cy="256" r="120" stroke="#00d4ff" stroke-width="3" fill="none" opacity="0.5"/>
|
||||
<circle cx="256" cy="256" r="80" stroke="#00d4ff" stroke-width="2.5" fill="none" opacity="0.6"/>
|
||||
<circle cx="256" cy="256" r="40" stroke="#00d4ff" stroke-width="2" fill="none" opacity="0.7"/>
|
||||
|
||||
<!-- Radar sweep line -->
|
||||
<line x1="256" y1="256" x2="416" y2="140" stroke="url(#sweepGradient)" stroke-width="8" opacity="0.9" filter="url(#glow)">
|
||||
<animateTransform attributeName="transform" attributeType="XML" type="rotate" from="0 256 256" to="360 256 256" dur="4s" repeatCount="indefinite"/>
|
||||
</line>
|
||||
|
||||
<!-- Cross hairs -->
|
||||
<line x1="256" y1="40" x2="256" y2="472" stroke="#00d4ff" stroke-width="2" opacity="0.3"/>
|
||||
<line x1="40" y1="256" x2="472" y2="256" stroke="#00d4ff" stroke-width="2" opacity="0.3"/>
|
||||
|
||||
<!-- Diagonal cross hairs -->
|
||||
<line x1="120" y1="120" x2="392" y2="392" stroke="#00d4ff" stroke-width="1.5" opacity="0.2"/>
|
||||
<line x1="392" y1="120" x2="120" y2="392" stroke="#00d4ff" stroke-width="1.5" opacity="0.2"/>
|
||||
|
||||
<!-- Aircraft blips of various types -->
|
||||
<!-- Commercial aircraft -->
|
||||
<circle cx="350" cy="180" r="8" fill="#00ff00" filter="url(#glow)">
|
||||
<animate attributeName="opacity" values="1;0.5;1" dur="2s" repeatCount="indefinite"/>
|
||||
</circle>
|
||||
<circle cx="180" cy="350" r="8" fill="#00ff00" opacity="0.8">
|
||||
<animate attributeName="opacity" values="0.8;0.4;0.8" dur="2.5s" repeatCount="indefinite"/>
|
||||
</circle>
|
||||
|
||||
<!-- Military aircraft -->
|
||||
<circle cx="320" cy="320" r="8" fill="#ffff00" opacity="0.9">
|
||||
<animate attributeName="opacity" values="0.9;0.5;0.9" dur="1.8s" repeatCount="indefinite"/>
|
||||
</circle>
|
||||
|
||||
<!-- General aviation -->
|
||||
<circle cx="160" cy="200" r="6" fill="#00ff88" opacity="0.7">
|
||||
<animate attributeName="opacity" values="0.7;0.3;0.7" dur="3s" repeatCount="indefinite"/>
|
||||
</circle>
|
||||
<circle cx="300" cy="120" r="6" fill="#00ff88" opacity="0.6">
|
||||
<animate attributeName="opacity" values="0.6;0.2;0.6" dur="2.8s" repeatCount="indefinite"/>
|
||||
</circle>
|
||||
|
||||
<!-- Helicopter -->
|
||||
<circle cx="140" cy="300" r="6" fill="#ff8800" opacity="0.8">
|
||||
<animate attributeName="opacity" values="0.8;0.4;0.8" dur="1.5s" repeatCount="indefinite"/>
|
||||
</circle>
|
||||
|
||||
<!-- Emergency aircraft -->
|
||||
<circle cx="380" cy="280" r="8" fill="#ff0000" opacity="1" filter="url(#glow)">
|
||||
<animate attributeName="opacity" values="1;0.6;1" dur="1s" repeatCount="indefinite"/>
|
||||
</circle>
|
||||
|
||||
<!-- Center beacon with strong glow -->
|
||||
<circle cx="256" cy="256" r="12" fill="#00d4ff" filter="url(#strongGlow)"/>
|
||||
<circle cx="256" cy="256" r="8" fill="#ffffff" opacity="0.9"/>
|
||||
<circle cx="256" cy="256" r="4" fill="#00d4ff"/>
|
||||
|
||||
<!-- Range rings with labels -->
|
||||
<text x="256" y="90" text-anchor="middle" font-family="Arial, sans-serif" font-size="16" fill="#00d4ff" opacity="0.6">200 km</text>
|
||||
<text x="256" y="130" text-anchor="middle" font-family="Arial, sans-serif" font-size="14" fill="#00d4ff" opacity="0.5">160 km</text>
|
||||
<text x="256" y="170" text-anchor="middle" font-family="Arial, sans-serif" font-size="12" fill="#00d4ff" opacity="0.4">120 km</text>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 4.9 KiB |
32
assets/static/images/skyview-favicon.svg
Normal file
32
assets/static/images/skyview-favicon.svg
Normal file
|
|
@ -0,0 +1,32 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<svg width="32" height="32" viewBox="0 0 32 32" xmlns="http://www.w3.org/2000/svg">
|
||||
<defs>
|
||||
<linearGradient id="radarBg" x1="0%" y1="0%" x2="100%" y2="100%">
|
||||
<stop offset="0%" style="stop-color:#001a26;stop-opacity:1" />
|
||||
<stop offset="100%" style="stop-color:#003d52;stop-opacity:1" />
|
||||
</linearGradient>
|
||||
</defs>
|
||||
|
||||
<!-- Background circle -->
|
||||
<circle cx="16" cy="16" r="15" fill="url(#radarBg)" stroke="#00d4ff" stroke-width="1"/>
|
||||
|
||||
<!-- Radar circles -->
|
||||
<circle cx="16" cy="16" r="12" stroke="#00d4ff" stroke-width="1" fill="none" opacity="0.4"/>
|
||||
<circle cx="16" cy="16" r="8" stroke="#00d4ff" stroke-width="0.8" fill="none" opacity="0.5"/>
|
||||
<circle cx="16" cy="16" r="4" stroke="#00d4ff" stroke-width="0.6" fill="none" opacity="0.6"/>
|
||||
|
||||
<!-- Radar sweep line -->
|
||||
<line x1="16" y1="16" x2="26" y2="10" stroke="#00d4ff" stroke-width="1.5" opacity="0.8"/>
|
||||
|
||||
<!-- Cross hairs -->
|
||||
<line x1="16" y1="4" x2="16" y2="28" stroke="#00d4ff" stroke-width="0.5" opacity="0.3"/>
|
||||
<line x1="4" y1="16" x2="28" y2="16" stroke="#00d4ff" stroke-width="0.5" opacity="0.3"/>
|
||||
|
||||
<!-- Aircraft blips -->
|
||||
<circle cx="22" cy="12" r="1" fill="#00ff00" opacity="0.9"/>
|
||||
<circle cx="12" cy="20" r="1" fill="#00ff00" opacity="0.7"/>
|
||||
<circle cx="20" cy="22" r="1" fill="#00ff00" opacity="0.8"/>
|
||||
|
||||
<!-- Center dot -->
|
||||
<circle cx="16" cy="16" r="1.5" fill="#00d4ff"/>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 1.4 KiB |
67
assets/static/images/skyview-logo.svg
Normal file
67
assets/static/images/skyview-logo.svg
Normal file
|
|
@ -0,0 +1,67 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<svg width="200" height="60" viewBox="0 0 200 60" xmlns="http://www.w3.org/2000/svg">
|
||||
<defs>
|
||||
<linearGradient id="radarGradient" x1="0%" y1="0%" x2="100%" y2="100%">
|
||||
<stop offset="0%" style="stop-color:#00d4ff;stop-opacity:1" />
|
||||
<stop offset="100%" style="stop-color:#0099cc;stop-opacity:1" />
|
||||
</linearGradient>
|
||||
<linearGradient id="textGradient" x1="0%" y1="0%" x2="100%" y2="100%">
|
||||
<stop offset="0%" style="stop-color:#ffffff;stop-opacity:1" />
|
||||
<stop offset="100%" style="stop-color:#e0e0e0;stop-opacity:1" />
|
||||
</linearGradient>
|
||||
</defs>
|
||||
|
||||
<!-- Radar circle with sweep -->
|
||||
<g id="radar">
|
||||
<!-- Outer radar circle -->
|
||||
<circle cx="30" cy="30" r="25" stroke="#00d4ff" stroke-width="2" fill="none" opacity="0.3"/>
|
||||
|
||||
<!-- Inner radar circles -->
|
||||
<circle cx="30" cy="30" r="18" stroke="#00d4ff" stroke-width="1.5" fill="none" opacity="0.4"/>
|
||||
<circle cx="30" cy="30" r="12" stroke="#00d4ff" stroke-width="1" fill="none" opacity="0.5"/>
|
||||
<circle cx="30" cy="30" r="6" stroke="#00d4ff" stroke-width="1" fill="none" opacity="0.6"/>
|
||||
|
||||
<!-- Radar sweep line -->
|
||||
<line x1="30" y1="30" x2="52" y2="18" stroke="url(#radarGradient)" stroke-width="2" opacity="0.8"/>
|
||||
|
||||
<!-- Cross hairs -->
|
||||
<line x1="30" y1="5" x2="30" y2="55" stroke="#00d4ff" stroke-width="1" opacity="0.3"/>
|
||||
<line x1="5" y1="30" x2="55" y2="30" stroke="#00d4ff" stroke-width="1" opacity="0.3"/>
|
||||
|
||||
<!-- Aircraft blips -->
|
||||
<circle cx="42" cy="22" r="1.5" fill="#00ff00" opacity="0.8">
|
||||
<animate attributeName="opacity" values="0.8;0.3;0.8" dur="2s" repeatCount="indefinite"/>
|
||||
</circle>
|
||||
<circle cx="20" cy="38" r="1.5" fill="#00ff00" opacity="0.6">
|
||||
<animate attributeName="opacity" values="0.6;0.2;0.6" dur="2.5s" repeatCount="indefinite"/>
|
||||
</circle>
|
||||
<circle cx="38" cy="42" r="1.5" fill="#00ff00" opacity="0.7">
|
||||
<animate attributeName="opacity" values="0.7;0.25;0.7" dur="3s" repeatCount="indefinite"/>
|
||||
</circle>
|
||||
|
||||
<!-- Center dot -->
|
||||
<circle cx="30" cy="30" r="2" fill="#00d4ff"/>
|
||||
</g>
|
||||
|
||||
<!-- Text -->
|
||||
<g id="text">
|
||||
<!-- Text outlines for better visibility -->
|
||||
<text x="70" y="25" font-family="Arial, sans-serif" font-size="24" font-weight="bold" fill="none" stroke="#003d52" stroke-width="3" stroke-linejoin="round">
|
||||
Sky
|
||||
</text>
|
||||
<text x="70" y="45" font-family="Arial, sans-serif" font-size="24" font-weight="bold" fill="none" stroke="#003d52" stroke-width="3" stroke-linejoin="round">
|
||||
View
|
||||
</text>
|
||||
|
||||
<!-- Main text -->
|
||||
<text x="70" y="25" font-family="Arial, sans-serif" font-size="24" font-weight="bold" fill="url(#textGradient)">
|
||||
Sky
|
||||
</text>
|
||||
<text x="70" y="45" font-family="Arial, sans-serif" font-size="24" font-weight="bold" fill="url(#textGradient)">
|
||||
View
|
||||
</text>
|
||||
|
||||
<!-- Subtle accent line -->
|
||||
<line x1="70" y1="28" x2="130" y2="28" stroke="#00d4ff" stroke-width="1" opacity="0.4"/>
|
||||
</g>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 3 KiB |
|
|
@ -4,7 +4,14 @@
|
|||
<meta charset="UTF-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||
<title>SkyView - Multi-Source ADS-B Aircraft Tracker</title>
|
||||
<link rel="icon" type="image/x-icon" href="/favicon.ico">
|
||||
|
||||
<!-- Favicon and app icons -->
|
||||
<link rel="icon" type="image/svg+xml" href="/static/images/favicon-16.svg" sizes="16x16">
|
||||
<link rel="icon" type="image/svg+xml" href="/static/images/favicon-32.svg" sizes="32x32">
|
||||
<link rel="icon" type="image/svg+xml" href="/static/images/favicon-48.svg" sizes="48x48">
|
||||
<link rel="icon" type="image/svg+xml" href="/static/images/skyview-favicon.svg">
|
||||
<link rel="apple-touch-icon" href="/static/images/skyview-app-icon.svg" sizes="512x512">
|
||||
<meta name="theme-color" content="#003d52">
|
||||
|
||||
<!-- Leaflet CSS -->
|
||||
<link rel="stylesheet" href="https://unpkg.com/leaflet@1.9.4/dist/leaflet.css" />
|
||||
|
|
@ -28,10 +35,16 @@
|
|||
<body>
|
||||
<div id="app">
|
||||
<header class="header">
|
||||
<h1>SkyView <span class="version-info">v0.0.11</span>
|
||||
<div class="header-brand">
|
||||
<img src="/static/images/skyview-logo.svg" alt="SkyView Logo" class="header-logo">
|
||||
<div class="header-text">
|
||||
<span class="version-info">v0.0.11</span>
|
||||
<div class="header-links">
|
||||
<a href="https://kode.naiv.no/olemd/skyview" target="_blank" class="repo-link" title="Project Repository">⚙</a>
|
||||
<a href="/database" class="repo-link" title="Database Status">📊</a>
|
||||
</h1>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- Status indicators -->
|
||||
<div class="status-section">
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue