Files
Void-Bastion-Website/index.html
T

279 lines
19 KiB
HTML
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
<!doctype html>
<html lang="de">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<meta name="theme-color" content="#06131f">
<meta name="description" content="Void Bastion ist ein strategisches Tower-Defense-Spiel im Weltraum für Windows, Android und iOS – entwickelt von GerGames.">
<title>Void Bastion — GerGames</title>
<link rel="icon" type="image/svg+xml" href="data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 64 64'%3E%3Crect width='64' height='64' rx='14' fill='%2306121e'/%3E%3Ccircle cx='32' cy='32' r='20' fill='none' stroke='%235cecff' stroke-width='5'/%3E%3Ccircle cx='32' cy='32' r='7' fill='%23ff9d3f'/%3E%3Cpath d='M32 4v11M32 49v11M4 32h11M49 32h11' stroke='%235cecff' stroke-width='5' stroke-linecap='round'/%3E%3C/svg%3E">
<style>
:root {
color-scheme: dark;
--ink: #f3f9fc;
--muted: #9cb2bf;
--cyan: #5cecff;
--cyan-soft: #1e9bb2;
--orange: #ff9d3f;
--navy: #06121e;
--panel: rgba(8, 25, 38, .76);
--line: rgba(117, 226, 247, .22);
--max: 1180px;
}
* { box-sizing: border-box; }
html { scroll-behavior: smooth; }
body {
margin: 0;
min-width: 320px;
background: var(--navy);
color: var(--ink);
font-family: Inter, ui-sans-serif, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", sans-serif;
font-size: 16px;
line-height: 1.6;
overflow-x: hidden;
}
a { color: inherit; }
.shell { width: min(calc(100% - 40px), var(--max)); margin: 0 auto; }
.hero {
min-height: 92svh;
position: relative;
display: grid;
align-items: center;
isolation: isolate;
overflow: hidden;
background: #05101a url("assets/station.webp") center / cover no-repeat;
}
.hero::before {
content: "";
position: absolute;
inset: 0;
z-index: -1;
background:
linear-gradient(90deg, rgba(3, 12, 20, .96) 0%, rgba(3, 12, 20, .74) 47%, rgba(3, 12, 20, .18) 100%),
linear-gradient(0deg, var(--navy) 0%, transparent 22%);
}
.hero::after {
content: "";
position: absolute;
width: 42vw;
aspect-ratio: 1;
right: -15vw;
top: 10vh;
z-index: -1;
border: 1px solid rgba(92, 236, 255, .35);
border-radius: 50%;
box-shadow: 0 0 100px rgba(13, 172, 210, .18), inset 0 0 80px rgba(13, 172, 210, .1);
}
.topbar {
position: absolute;
inset: 0 0 auto;
z-index: 4;
border-bottom: 1px solid rgba(255,255,255,.08);
background: linear-gradient(180deg, rgba(3,12,20,.88), rgba(3,12,20,.28));
backdrop-filter: blur(10px);
}
.nav { height: 76px; display: flex; align-items: center; justify-content: space-between; gap: 24px; }
.brand { display: inline-flex; align-items: center; gap: 12px; text-decoration: none; font-weight: 800; letter-spacing: .12em; }
.brand-mark { width: 34px; height: 34px; display: grid; place-items: center; border: 1px solid var(--cyan); border-radius: 50%; box-shadow: 0 0 20px rgba(92,236,255,.3); }
.brand-mark::before { content: ""; width: 10px; height: 10px; border-radius: 50%; background: var(--orange); box-shadow: 0 0 16px var(--orange); }
.brand small { color: var(--cyan); font-size: .72em; }
.nav-link { color: var(--muted); text-decoration: none; font-size: .94rem; transition: color .2s ease; }
.nav-link:hover, .nav-link:focus-visible { color: var(--cyan); }
.hero-grid { padding: 132px 0 90px; display: grid; grid-template-columns: minmax(0, 680px) 1fr; align-items: center; }
.eyebrow { display: flex; align-items: center; gap: 10px; margin: 0 0 18px; color: var(--cyan); font-weight: 750; letter-spacing: .16em; text-transform: uppercase; font-size: .78rem; }
.eyebrow::before { content: ""; width: 36px; height: 2px; background: var(--cyan); box-shadow: 0 0 12px var(--cyan); }
h1, h2, h3 { margin: 0; line-height: 1.08; text-wrap: balance; }
h1 { max-width: 730px; font-size: clamp(4rem, 9vw, 8.5rem); letter-spacing: -.065em; text-transform: uppercase; }
h1 span { display: block; color: transparent; -webkit-text-stroke: 1px rgba(210, 245, 252, .78); }
.lead { max-width: 610px; margin: 26px 0 32px; color: #c4d4dc; font-size: clamp(1.05rem, 1.8vw, 1.3rem); }
.actions { display: flex; align-items: center; flex-wrap: wrap; gap: 14px; }
.button { min-height: 52px; display: inline-flex; align-items: center; justify-content: center; padding: 0 24px; border: 1px solid var(--cyan); color: #031119; background: var(--cyan); text-decoration: none; font-weight: 800; letter-spacing: .04em; transition: transform .2s ease, box-shadow .2s ease; }
.button:hover, .button:focus-visible { transform: translateY(-2px); box-shadow: 0 10px 30px rgba(92,236,255,.25); }
.button-secondary { color: var(--ink); background: rgba(2,11,18,.68); }
.button-secondary:hover, .button-secondary:focus-visible { color: var(--cyan); }
.status { display: inline-flex; align-items: center; gap: 9px; min-height: 52px; padding: 0 16px; color: #c8d7de; border: 1px solid rgba(255,255,255,.13); background: rgba(2,11,18,.55); }
.status::before { content: ""; width: 7px; height: 7px; background: var(--orange); border-radius: 50%; box-shadow: 0 0 12px var(--orange); }
.platforms { margin-top: 34px; display: flex; gap: 20px; flex-wrap: wrap; color: var(--muted); font-size: .88rem; letter-spacing: .08em; text-transform: uppercase; }
.platforms span { display: flex; align-items: center; gap: 8px; }
.platforms span::before { content: ""; width: 5px; height: 5px; transform: rotate(45deg); background: var(--cyan-soft); }
.tower-strip { position: absolute; right: -4vw; bottom: 4vh; width: min(59vw, 920px); pointer-events: none; filter: drop-shadow(0 22px 45px rgba(0,0,0,.65)); opacity: .82; }
section { position: relative; padding: 110px 0; }
.intro { background: radial-gradient(circle at 82% 10%, rgba(15,132,167,.13), transparent 34%), var(--navy); }
.section-grid { display: grid; grid-template-columns: .85fr 1.15fr; gap: clamp(50px, 9vw, 120px); align-items: center; }
h2 { font-size: clamp(2.4rem, 5vw, 4.8rem); letter-spacing: -.045em; text-transform: uppercase; }
.copy { color: var(--muted); max-width: 650px; font-size: 1.08rem; }
.copy strong { color: var(--ink); }
.stats { display: grid; grid-template-columns: repeat(2, 1fr); border: 1px solid var(--line); background: linear-gradient(145deg, rgba(13,45,63,.78), rgba(4,17,28,.62)); }
.stat { padding: 28px; min-height: 145px; border: 1px solid rgba(117,226,247,.09); }
.stat strong { display: block; color: var(--cyan); font-size: clamp(2.2rem, 5vw, 4rem); line-height: 1; font-variant-numeric: tabular-nums; }
.stat span { display: block; margin-top: 10px; color: #b6c7d0; }
.tactics { background: #081722; border-block: 1px solid rgba(117,226,247,.1); }
.section-head { display: flex; justify-content: space-between; gap: 50px; align-items: end; margin-bottom: 52px; }
.section-head p { max-width: 490px; color: var(--muted); margin: 0; }
.cards { display: grid; grid-template-columns: repeat(3, 1fr); gap: 18px; }
.card { position: relative; min-height: 300px; padding: 34px; border: 1px solid var(--line); overflow: hidden; background: linear-gradient(160deg, rgba(13,42,58,.9), rgba(5,18,29,.95)); }
.card::after { content: attr(data-index); position: absolute; right: 18px; bottom: -28px; color: rgba(92,236,255,.045); font-size: 9rem; font-weight: 900; line-height: 1; }
.card-icon { width: 46px; height: 46px; margin-bottom: 50px; border: 1px solid var(--cyan-soft); display: grid; place-items: center; color: var(--cyan); font-weight: 900; transform: rotate(45deg); }
.card-icon span { transform: rotate(-45deg); }
.card h3 { font-size: 1.45rem; text-transform: uppercase; }
.card p { position: relative; z-index: 1; color: var(--muted); margin: 14px 0 0; }
.development { overflow: hidden; background: #040d15; }
.gallery { background: radial-gradient(circle at 10% 30%, rgba(92,236,255,.08), transparent 35%), #06131f; }
.gallery-grid { display: grid; grid-template-columns: 1.35fr .85fr; gap: 18px; align-items: stretch; }
.shot { margin: 0; position: relative; border: 1px solid var(--line); background: #020910; overflow: hidden; min-height: 330px; }
.shot img { width: 100%; height: 100%; min-height: 330px; display: block; object-fit: cover; transition: transform .5s ease; }
.shot:hover img { transform: scale(1.025); }
.shot figcaption { position: absolute; inset: auto 0 0; padding: 45px 24px 20px; background: linear-gradient(transparent, rgba(2,9,16,.95)); color: #d8e8ee; font-weight: 700; letter-spacing: .04em; }
.shot figcaption small { display: block; margin-top: 4px; color: var(--cyan); font-size: .78rem; font-weight: 700; letter-spacing: .12em; text-transform: uppercase; }
.dev-panel { position: relative; display: grid; grid-template-columns: 230px 1fr; gap: 44px; align-items: center; padding: clamp(30px, 6vw, 70px); border: 1px solid var(--line); background: linear-gradient(110deg, rgba(6,30,45,.95), rgba(12,27,39,.75)); }
.dev-icon { width: 100%; border-radius: 24%; box-shadow: 0 20px 70px rgba(0,0,0,.55), 0 0 45px rgba(45,214,244,.13); }
.dev-panel h2 { font-size: clamp(2rem, 4vw, 4rem); }
.dev-panel p { color: var(--muted); max-width: 680px; margin: 20px 0 0; }
.store-grid { display: grid; grid-template-columns: repeat(3, 1fr); gap: 10px; margin-top: 30px; }
.store-badge { min-height: 68px; display: flex; align-items: center; gap: 12px; padding: 12px 15px; border: 1px solid rgba(255,255,255,.14); background: rgba(2,10,17,.48); color: #d7e5eb; }
.store-badge b { display: block; font-size: .96rem; }
.store-badge small { display: block; color: #7f9aa8; font-size: .74rem; line-height: 1.3; }
a.store-badge { text-decoration: none; transition: border-color .2s ease, background .2s ease, transform .2s ease; }
a.store-badge:hover, a.store-badge:focus-visible { border-color: var(--cyan); background: rgba(10,46,62,.72); transform: translateY(-2px); }
.store-symbol { width: 28px; height: 28px; display: grid; place-items: center; flex: 0 0 auto; border: 1px solid var(--cyan-soft); color: var(--cyan); font-size: .82rem; font-weight: 900; }
.badge { display: inline-block; margin-bottom: 18px; padding: 6px 11px; border: 1px solid rgba(255,157,63,.5); color: #ffc187; font-size: .78rem; letter-spacing: .14em; text-transform: uppercase; }
footer { padding: 36px 0; color: #78919f; border-top: 1px solid rgba(255,255,255,.07); }
.footer-row { display: flex; justify-content: space-between; gap: 20px; flex-wrap: wrap; }
.footer-row strong { color: #bcd2dc; letter-spacing: .12em; }
.footer-links { display: flex; gap: 18px; flex-wrap: wrap; }
.footer-links a { color: #9cb2bf; text-decoration: none; }
.footer-links a:hover, .footer-links a:focus-visible { color: var(--cyan); }
.reveal { opacity: 0; transform: translateY(24px); transition: opacity .7s ease, transform .7s ease; }
.reveal.visible { opacity: 1; transform: none; }
@media (max-width: 900px) {
.hero-grid { grid-template-columns: 1fr; }
.tower-strip { width: 92vw; right: -34vw; bottom: 4vh; opacity: .5; }
.section-grid, .dev-panel { grid-template-columns: 1fr; }
.dev-icon { width: min(190px, 55vw); }
.cards { grid-template-columns: 1fr; }
.gallery-grid { grid-template-columns: 1fr; }
.card { min-height: 240px; }
.card-icon { margin-bottom: 35px; }
.section-head { display: block; }
.section-head p { margin-top: 20px; }
}
@media (max-width: 620px) {
.shell { width: min(calc(100% - 28px), var(--max)); }
.nav { height: 68px; }
.nav-link { display: none; }
.hero { min-height: 860px; }
.hero-grid { padding-top: 112px; align-self: start; }
h1 { font-size: clamp(3.6rem, 19vw, 5.7rem); }
.tower-strip { width: 155vw; max-width: none; right: -63vw; bottom: 5vh; opacity: .58; }
section { padding: 78px 0; }
.stats { grid-template-columns: 1fr 1fr; }
.stat { padding: 20px; min-height: 120px; }
.button, .status { width: 100%; }
.store-grid { grid-template-columns: 1fr; }
.platforms { gap: 12px 18px; }
}
@media (prefers-reduced-motion: reduce) {
html { scroll-behavior: auto; }
.reveal { opacity: 1; transform: none; transition: none; }
.button { transition: none; }
}
</style>
</head>
<body>
<header class="topbar">
<nav class="nav shell" aria-label="Hauptnavigation">
<a class="brand" href="#start" aria-label="GerGames – Startseite"><span class="brand-mark" aria-hidden="true"></span><span>GER<small>GAMES</small></span></a>
<a class="nav-link" href="#entwicklung">Entwicklungsstand</a>
</nav>
</header>
<main>
<section class="hero" id="start">
<div class="hero-grid shell">
<div>
<p class="eyebrow">Strategisches Tower Defense</p>
<h1>Void <span>Bastion</span></h1>
<p class="lead">Die letzte Verteidigungslinie liegt zwischen dem Reaktor und der Leere. Baue, verbessere und halte deine Stellung gegen immer stärkere Angriffswellen.</p>
<div class="actions">
<a class="button" href="https://git.dominicspringer.de/Emporex/Void-Bastion-Releases/releases/download/v0.1.0-alpha.2/Void-Bastion-Setup-x64.exe">Windows Alpha herunterladen</a>
<a class="button button-secondary" href="#spiel">Spiel entdecken</a>
<span class="status">Alpha 0.1.0 · 64 Bit</span>
</div>
<div class="platforms" aria-label="Geplante Plattformen"><span>Windows</span><span>Android</span><span>iOS</span></div>
</div>
</div>
<img class="tower-strip" src="assets/towers.webp" alt="Kinetik-, Laser- und Raketenturm aus Void Bastion">
</section>
<section class="intro" id="spiel">
<div class="section-grid shell">
<div class="reveal">
<p class="eyebrow">Halte die Linie</p>
<h2>Jede Zelle zählt.</h2>
<p class="copy"><strong>Void Bastion verbindet klar lesbare Karten mit taktischen Entscheidungen.</strong> Nutze Reichweite, Feuerrate und Schaden deiner Türme, verteidige unterschiedliche Weltraumsektoren und entscheide nach der letzten Missionswelle selbst, ob du im Endlosmodus weiterkämpfst.</p>
</div>
<div class="stats reveal" aria-label="Spielumfang">
<div class="stat"><strong>03</strong><span>Weltraumkarten</span></div>
<div class="stat"><strong>03</strong><span>Turmklassen</span></div>
<div class="stat"><strong>15</strong><span>Missionswellen</span></div>
<div class="stat"><strong>∞</strong><span>Endlosmodus</span></div>
</div>
</div>
</section>
<section class="tactics">
<div class="shell">
<div class="section-head reveal">
<div><p class="eyebrow">Deine Verteidigung</p><h2>Planen. Aufrüsten. Überleben.</h2></div>
<p>Drei Schwierigkeitsgrade, unterschiedliche Feindklassen und klar erkennbare Reichweiten machen jede Entscheidung nachvollziehbar – aber nicht automatisch leicht.</p>
</div>
<div class="cards">
<article class="card reveal" data-index="1"><div class="card-icon"><span>01</span></div><h3>Position wählen</h3><p>Nutze das Bauraster und platziere jeden Turm dort, wo seine Reichweite den Gegnerweg optimal abdeckt.</p></article>
<article class="card reveal" data-index="2"><div class="card-icon"><span>02</span></div><h3>Systeme kombinieren</h3><p>Kinetik, Laser und Raketen erfüllen verschiedene Rollen – vom schnellen Einzelziel bis zum schweren Flächenschaden.</p></article>
<article class="card reveal" data-index="3"><div class="card-icon"><span>03</span></div><h3>Gemeinsam halten</h3><p>Verteidige im Koop eine gespiegelte Station mit getrennten Ressourcen und einem gemeinsamen Reaktor – lokal mit KI, später auch online.</p></article>
</div>
</div>
</section>
<section class="gallery" aria-labelledby="gallery-title">
<div class="shell">
<div class="section-head reveal">
<div><p class="eyebrow">Direkt aus dem Prototyp</p><h2 id="gallery-title">Die Front im Blick.</h2></div>
<p>Frühe Spielszenen aus der laufenden Entwicklung: transparente Reichweiten, klar erkennbare Bauflächen und eine Koop-Arena mit gemeinsamem Reaktor.</p>
</div>
<div class="gallery-grid">
<figure class="shot reveal"><img src="assets/gameplay-coop.webp" alt="Koop-Arena mit zwei gespiegelten Verteidigungsseiten und gemeinsamem Reaktor" loading="lazy"><figcaption>Gespiegelte Koop-Arena<small>Gemeinsamer Reaktor · getrennte Ressourcen</small></figcaption></figure>
<figure class="shot reveal"><img src="assets/gameplay-grid.webp" alt="Weltraumkarte mit Straßen, Bauraster und Turmauswahl" loading="lazy"><figcaption>Taktisches Bauraster<small>Positionieren · verbessern · verteidigen</small></figcaption></figure>
</div>
</div>
</section>
<section class="development" id="entwicklung">
<div class="shell">
<div class="dev-panel reveal">
<img class="dev-icon" src="assets/reactor.webp" alt="Leuchtender Reaktor von Void Bastion">
<div><span class="badge">Aktuell in Entwicklung</span><h2>Die Bastion wächst.</h2><p>Void Bastion entsteht bei <strong>GerGames</strong>. Karten, KI-Koop, Endlosmodus, Ranglisten und die technische Grundlage für Online-Multiplayer sind bereits in Arbeit. Veröffentlichungstermine und Store-Links folgen, sobald die spielbare Version bereit ist.</p>
<div class="store-grid" aria-label="Geplante Veröffentlichungsplattformen">
<a class="store-badge" href="https://git.dominicspringer.de/Emporex/Void-Bastion-Releases/releases/download/v0.1.0-alpha.2/Void-Bastion-Setup-x64.exe"><span class="store-symbol">PC</span><span><b>Windows Alpha</b><small>Setup herunterladen · 111 MiB</small></span></a>
<span class="store-badge"><span class="store-symbol">A</span><span><b>Android</b><small>Google Play folgt</small></span></span>
<span class="store-badge"><span class="store-symbol">i</span><span><b>iPhone & iPad</b><small>App Store folgt</small></span></span>
</div>
</div>
</div>
</div>
</section>
</main>
<footer>
<div class="footer-row shell"><strong>GERGAMES</strong><span>Void Bastion · Entwickelt in Deutschland</span><span class="footer-links"><a href="impressum.html">Impressum</a><a href="privacy.html">Datenschutz</a><a href="support.html">Support</a><a href="delete-account.html">Konto löschen</a></span></div>
</footer>
<script>
const observer = new IntersectionObserver((entries) => {
entries.forEach((entry) => entry.isIntersecting && entry.target.classList.add('visible'));
}, { threshold: 0.14 });
document.querySelectorAll('.reveal').forEach((element) => observer.observe(element));
</script>
</body>
</html>