modify interactive aircraft scatter hero effect

This commit is contained in:
Marc Froehlich
2026-07-13 00:26:24 +02:00
parent 3988a6d456
commit d532f935d6
4 changed files with 592 additions and 916 deletions
+12 -18
View File
@@ -4,6 +4,7 @@
<meta charset="utf-8">
<title>{{ title or "KST4Contest" }}</title>
<meta name="viewport" content="width=device-width, initial-scale=1">
<meta name="theme-color" content="#08110b">
<meta name="description" content="{{ description or 'KST4Contest is a contest-optimized ON4KST chat client for VHF, UHF and SHF ham radio contests.' }}">
<link rel="canonical" href="https://kst4contest.hamradioonline.de{{ page.url }}">
@@ -12,34 +13,33 @@
<meta property="og:description" content="{{ description or 'Contest-optimized ON4KST chat client for VHF, UHF and SHF ham radio contests.' }}">
<meta property="og:url" content="https://kst4contest.hamradioonline.de{{ page.url }}">
<meta property="og:site_name" content="KST4Contest">
<meta property="og:locale" content="en_GB">
<meta property="og:image" content="https://kst4contest.hamradioonline.de/assets/social/kst4contest-og.png">
<meta property="og:image:width" content="1200">
<meta property="og:image:height" content="630">
<meta name="twitter:card" content="summary_large_image">
<meta name="twitter:title" content="{{ title or 'KST4Contest' }}">
<meta name="twitter:description" content="{{ description or 'Contest-optimized ON4KST chat client for VHF, UHF and SHF ham radio contests.' }}">
<meta name="twitter:image" content="https://kst4contest.hamradioonline.de/assets/social/kst4contest-og.png">
<link rel="stylesheet" href="/assets/css/main.css?v={{ build.version }}">
<link rel="alternate" type="application/rss+xml" title="KST4Contest News" href="/feed.xml">
<meta property="og:image" content="https://kst4contest.hamradioonline.de/assets/social/kst4contest-og.png">
<meta property="og:image:width" content="1200">
<meta property="og:image:height" content="630">
<meta name="twitter:image" content="https://kst4contest.hamradioonline.de/assets/social/kst4contest-og.png">
</head>
<body>
<div class="site-bg"></div>
<div class="site-bg" aria-hidden="true"></div>
<header class="site-header">
<a class="brand" href="/">
<span class="brand-mark">◎</span>
<a class="brand" href="/" aria-label="KST4Contest home">
<span class="brand-mark" aria-hidden="true">◎</span>
<span>
<strong>KST4Contest</strong>
<small>ON4KST Contest Client</small>
</span>
</a>
<nav class="site-nav">
<nav class="site-nav" aria-label="Main navigation">
{% for item in navigation %}
<a href="{{ item.url }}">{{ item.title }}</a>
{% endfor %}
@@ -47,9 +47,7 @@
</nav>
</header>
<main>
{{ content | safe }}
</main>
<main>{{ content | safe }}</main>
<footer class="site-footer">
<div class="footer-grid">
@@ -57,7 +55,6 @@
<strong>KST4Contest</strong>
<p>Contest-optimized ON4KST workflow for VHF/UHF/SHF operators.</p>
</div>
<div>
<strong>Project</strong>
<p><a href="/features/">Features</a></p>
@@ -65,7 +62,6 @@
<p><a href="/manual/">Manual</a></p>
<p><a href="/roadmap/">Roadmap</a></p>
</div>
<div>
<strong>Community</strong>
<p><a href="https://github.com/praktimarc/kst4contest">GitHub Repository</a></p>
@@ -73,7 +69,6 @@
<p><a href="/contact/">Contact</a></p>
<p><a href="/support/">❤️ Support KST4Contest</a></p>
</div>
<div>
<strong>Legal</strong>
<p><a href="/legal-notice/">Legal Notice</a></p>
@@ -85,6 +80,5 @@
{% if heroFx %}
<script src="/assets/js/hero-radio-fx.js?v={{ build.version }}" defer></script>
{% endif %}
</body>
</html>
</html>
+214 -33
View File
@@ -11,18 +11,6 @@
--accent2: #a855f7;
--accent3: #22c55e;
--shadow: 0 24px 80px rgba(0, 0, 0, 0.45);
--accent: #54d63d;
--accent2: #8aef64;
--accent3: #31b54a;
--fx-plane: #79ff73;
--fx-plane-muted: rgba(121, 255, 115, 0.42);
--fx-beam: #52ff65;
--fx-beam-glow: rgba(82, 255, 101, 0.28);
--fx-reflection: #d2ffc8;
--fx-trail: rgba(121, 255, 115, 0.17);
--fx-grid: rgba(121, 255, 115, 0.055);
}
* {
@@ -37,7 +25,6 @@ html {
body {
margin: 0;
min-height: 100vh;
background:
radial-gradient(circle at 14% 12%, rgba(168, 85, 247, 0.30), transparent 28%),
radial-gradient(circle at 82% 16%, rgba(56, 189, 248, 0.24), transparent 30%),
@@ -575,52 +562,246 @@ a:hover {
grid-template-columns: 1fr;
}
}
/* ================================================================
KST4Contest brand recovery: green operator-console identity
and full-screen interactive hero
================================================================ */
/*
* Full-width, full-height home hero
*/
:root {
--bg: #050806;
--bg2: #0b140f;
--panel: rgba(15, 28, 20, 0.82);
--panel2: rgba(24, 43, 31, 0.84);
--border: rgba(125, 178, 134, 0.22);
--text: #f4f7f3;
--muted: #a9b8ad;
--soft: #6e8173;
--accent: #54d63d;
--accent2: #8aef64;
--accent3: #31b54a;
--fx-plane: #79ff73;
--fx-plane-muted: rgba(121, 255, 115, 0.42);
--fx-beam: #52ff65;
--fx-beam-glow: rgba(82, 255, 101, 0.28);
--fx-reflection: #d2ffc8;
--fx-trail: rgba(121, 255, 115, 0.17);
--fx-grid: rgba(121, 255, 115, 0.055);
}
body {
background:
radial-gradient(circle at 14% 12%, rgba(52, 165, 57, 0.20), transparent 30%),
radial-gradient(circle at 82% 16%, rgba(95, 218, 82, 0.14), transparent 32%),
radial-gradient(circle at 50% 85%, rgba(32, 126, 55, 0.12), transparent 36%),
linear-gradient(180deg, #070b09 0%, #0b1410 100%);
}
body::before {
background:
radial-gradient(circle at 20% 20%, rgba(60, 173, 61, 0.18), transparent 28%),
radial-gradient(circle at 78% 18%, rgba(97, 222, 80, 0.13), transparent 30%),
radial-gradient(circle at 45% 80%, rgba(34, 122, 53, 0.11), transparent 26%);
}
body::after {
background-image:
linear-gradient(rgba(160,255,160,0.032) 1px, transparent 1px),
linear-gradient(90deg, rgba(160,255,160,0.032) 1px, transparent 1px);
}
.site-bg {
background:
linear-gradient(180deg, rgba(5, 8, 6, 0.10), rgba(5, 8, 6, 0.84)),
radial-gradient(circle at 8% 24%, rgba(52, 165, 57, 0.14), transparent 26%),
radial-gradient(circle at 82% 20%, rgba(95, 218, 82, 0.12), transparent 30%);
}
.site-header {
background: rgba(5, 8, 7, 0.82);
}
.brand-mark,
.nav-cta,
.button {
background: linear-gradient(135deg, var(--accent), var(--accent2));
}
.brand-mark {
box-shadow:
0 0 26px rgba(84, 214, 61, 0.42),
0 0 50px rgba(49, 181, 74, 0.16);
}
.nav-cta {
color: #061008 !important;
box-shadow: 0 0 22px rgba(84, 214, 61, 0.28);
}
main {
width: 100%;
}
.hero.hero-split {
position: relative;
width: 100%;
max-width: none;
min-height: calc(100vh - 77px);
padding:
clamp(56px, 7vh, 100px)
clamp(28px, 6vw, 110px);
min-height: calc(100vh - 73px);
display: grid;
grid-template-columns: minmax(420px, 0.9fr) minmax(520px, 1.1fr);
gap: clamp(40px, 5vw, 110px);
align-items: center;
align-content: center;
padding: clamp(56px, 7vh, 100px) clamp(28px, 6vw, 110px);
overflow: hidden;
}
.hero.hero-split > div:first-of-type {
.hero.hero-split > *:not(.hero-radio-fx):not(.hero-fx-vignette) {
position: relative;
z-index: 3;
}
.hero-copy {
max-width: 760px;
}
.hero.hero-split .hero-panel {
width: min(100%, 700px);
.hero.hero-split h1 {
font-size: clamp(3.4rem, 8vw, 7rem);
background: linear-gradient(90deg, #ffffff 0%, #c9ffd0 28%, #77ec70 58%, #45bd4d 100%);
-webkit-background-clip: text;
background-clip: text;
color: transparent;
}
.badge,
.eyebrow {
color: #caffc0;
background: rgba(52, 165, 57, 0.12);
border-color: rgba(105, 232, 88, 0.32);
box-shadow: 0 0 22px rgba(82, 255, 101, 0.08);
}
.button {
color: #041007;
box-shadow:
0 16px 44px rgba(84, 214, 61, 0.22),
inset 0 1px 0 rgba(255,255,255,0.35);
}
.button.secondary {
color: white;
background: rgba(28, 43, 32, 0.90);
}
.hero-panel {
width: min(100%, 760px);
justify-self: center;
transform: perspective(1200px) rotateY(-4deg) rotateX(1.5deg);
}
.hero-panel,
.card,
.cta-panel {
background:
linear-gradient(180deg, rgba(255,255,255,0.045), transparent 42%),
rgba(15, 28, 20, 0.82);
}
.mini-card {
background: rgba(12, 25, 17, 0.88);
border-color: rgba(148, 184, 155, 0.16);
}
.card:hover {
border-color: rgba(84, 214, 61, 0.42);
background:
linear-gradient(180deg, rgba(255,255,255,0.055), transparent 42%),
rgba(12, 25, 17, 0.94);
box-shadow:
0 26px 90px rgba(0,0,0,0.50),
0 0 30px rgba(84,214,61,0.07);
}
.hero-radio-fx {
position: absolute;
inset: 0;
z-index: 0;
width: 100%;
height: 100%;
pointer-events: none;
opacity: 0.78;
}
.hero-fx-vignette {
position: absolute;
inset: 0;
z-index: 1;
pointer-events: none;
background:
linear-gradient(90deg,
rgba(7,11,9,0.92) 0%,
rgba(7,11,9,0.70) 32%,
rgba(7,11,9,0.17) 62%,
rgba(7,11,9,0.38) 100%),
linear-gradient(180deg,
rgba(7,11,9,0.08),
rgba(7,11,9,0.58));
}
html[data-theme="light"] {
--bg: #f4f4f2;
--bg2: #ffffff;
--panel: rgba(255,255,255,0.90);
--panel2: rgba(242,242,239,0.94);
--border: rgba(91,91,86,0.20);
--text: #252522;
--muted: #656560;
--soft: #888881;
--accent: #d33732;
--accent2: #f25a51;
--accent3: #ae2727;
--fx-plane: #df3732;
--fx-plane-muted: rgba(211,55,50,0.38);
--fx-beam: #ef4039;
--fx-beam-glow: rgba(239,64,57,0.22);
--fx-reflection: #ff8d84;
--fx-trail: rgba(211,55,50,0.15);
--fx-grid: rgba(185,47,43,0.045);
}
@media (min-width: 1600px) {
.hero.hero-split {
grid-template-columns:
minmax(520px, 0.85fr)
minmax(600px, 1.15fr);
gap: clamp(50px, 6vw, 130px);
grid-template-columns: minmax(520px, 0.85fr) minmax(620px, 1.15fr);
}
.hero.hero-split .hero-panel {
width: min(100%, 780px);
.hero-panel {
width: min(100%, 820px);
}
}
@media (max-width: 900px) {
@media (max-width: 1000px) {
.hero.hero-split {
min-height: auto;
padding-top: 60px;
padding-bottom: 60px;
grid-template-columns: 1fr;
padding-top: 64px;
padding-bottom: 64px;
}
}
.hero-panel {
width: min(100%, 760px);
transform: none;
}
.hero-radio-fx {
opacity: 0.50;
}
.hero-fx-vignette {
background: linear-gradient(180deg, rgba(7,11,9,0.84), rgba(7,11,9,0.34));
}
}
@media (prefers-reduced-motion: reduce) {
.hero-radio-fx {
opacity: 0.28;
}
}
File diff suppressed because it is too large Load Diff
+5 -10
View File
@@ -6,15 +6,10 @@ heroFx: true
---
<section class="hero hero-split">
<canvas
class="hero-radio-fx"
data-hero-radio-fx
aria-hidden="true">
</canvas>
<canvas class="hero-radio-fx" data-hero-radio-fx aria-hidden="true"></canvas>
<div class="hero-fx-vignette" aria-hidden="true"></div>
<div>
<div class="hero-copy">
<p class="badge">The contest-optimized ON4KST client</p>
<h1>KST4Contest</h1>
<p class="lead">
@@ -82,7 +77,7 @@ heroFx: true
<div class="actions">
<a class="button" href="/download/">Download KST4Contest</a>
<a class="button secondary" href="/features/">Explore features</a>
<a class="button ghost" href="/support/">❤️ Support Development</a>
<a class="button ghost" href="/support/">❤️ Support development</a>
</div>
</div>
</section>
@@ -98,4 +93,4 @@ heroFx: true
"downloadUrl":"https://github.com/praktimarc/kst4contest/releases",
"description":"Contest-optimized ON4KST client for VHF, UHF and SHF amateur radio contests."
}
</script>
</script>