jagd-apps/portal/index.html

266 lines
6.9 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="#2d6a2d" />
<meta name="apple-mobile-web-app-capable" content="yes" />
<meta name="apple-mobile-web-app-status-bar-style" content="default" />
<meta name="apple-mobile-web-app-title" content="Jagd Apps" />
<meta name="mobile-web-app-capable" content="yes" />
<link rel="manifest" href="/manifest.json" />
<meta name="description" content="Jagd Apps Heidekreis Nachsuche, Drohnenführer, Stöberhunde" />
<title>Jagd Apps Heidekreis</title>
<style>
*, *::before, *::after { box-sizing: border-box; }
:root {
--green: #2d6a2d;
--green-dark: #1e4d1e;
--green-light: #e8f5e9;
--text: #1a1a1a;
--muted: #555;
--bg: #f5f5f0;
--card-bg: #ffffff;
--border: #d4e8d4;
--shadow: 0 2px 8px rgba(0,0,0,0.08);
--radius: 12px;
}
html, body {
margin: 0;
padding: 0;
background: var(--bg);
color: var(--text);
font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, sans-serif;
min-height: 100vh;
}
header {
background: var(--green);
color: #fff;
padding: 1.25rem 1.5rem;
text-align: center;
}
header h1 {
margin: 0;
font-size: 1.35rem;
font-weight: 700;
letter-spacing: 0.01em;
}
header p {
margin: 0.3rem 0 0;
font-size: 0.9rem;
opacity: 0.85;
}
main {
max-width: 520px;
margin: 0 auto;
padding: 1.5rem 1rem 3rem;
display: flex;
flex-direction: column;
gap: 1rem;
}
.app-card {
background: var(--card-bg);
border: 1px solid var(--border);
border-left: 5px solid var(--green);
border-radius: var(--radius);
box-shadow: var(--shadow);
display: flex;
align-items: center;
gap: 1.25rem;
padding: 1.25rem 1.25rem;
text-decoration: none;
color: var(--text);
transition: transform 0.15s, box-shadow 0.15s;
-webkit-tap-highlight-color: transparent;
}
.app-card:active {
transform: scale(0.98);
box-shadow: 0 1px 4px rgba(0,0,0,0.1);
}
@media (hover: hover) {
.app-card:hover {
transform: translateY(-2px);
box-shadow: 0 6px 18px rgba(0,0,0,0.12);
}
}
.app-icon {
font-size: 2.4rem;
flex-shrink: 0;
width: 52px;
text-align: center;
}
.app-info {
flex: 1;
}
.app-name {
font-size: 1.1rem;
font-weight: 700;
margin: 0 0 0.2rem;
}
.app-desc {
font-size: 0.85rem;
color: var(--muted);
margin: 0;
line-height: 1.4;
}
.app-arrow {
color: var(--green);
font-size: 1.3rem;
flex-shrink: 0;
}
footer {
text-align: center;
padding: 1rem;
font-size: 0.75rem;
color: var(--muted);
}
/* Install banner */
#install-banner {
display: none;
position: sticky;
top: 0;
z-index: 100;
background: var(--green);
color: #fff;
padding: 0.6rem 1rem;
font-size: 0.88rem;
align-items: center;
gap: 0.75rem;
flex-wrap: wrap;
}
#install-banner.visible { display: flex; }
#install-banner span { flex: 1; }
#install-btn {
background: #fff;
color: var(--green);
border: none;
border-radius: 4px;
padding: 0.3rem 0.8rem;
font-weight: 600;
font-size: 0.85rem;
cursor: pointer;
white-space: nowrap;
}
#dismiss-btn {
background: transparent;
border: none;
color: rgba(255,255,255,0.8);
font-size: 1rem;
cursor: pointer;
padding: 0.2rem 0.3rem;
flex-shrink: 0;
}
</style>
</head>
<body>
<div id="install-banner" role="banner">
<span id="install-text">📲 App auf dem Homescreen installieren</span>
<button id="install-btn">Installieren</button>
<button id="dismiss-btn" aria-label="Schließen"></button>
</div>
<header>
<h1>🦌 Jagd Apps Heidekreis</h1>
<p>Wählen Sie Ihre App</p>
</header>
<main>
<a href="/nachsuche/" class="app-card">
<div class="app-icon">🐕</div>
<div class="app-info">
<p class="app-name">Nachsuche</p>
<p class="app-desc">Nachsuchenstation Heidekreis Übersicht der Nachsuchenführer und Verfügbarkeiten</p>
</div>
<span class="app-arrow"></span>
</a>
<a href="/drohnenfuehrer/" class="app-card">
<div class="app-icon">🚁</div>
<div class="app-info">
<p class="app-name">Drohnenführer</p>
<p class="app-desc">Drohnenführer Heidekreis Übersicht der zertifizierten Drohnenführer im Einsatz</p>
</div>
<span class="app-arrow"></span>
</a>
<a href="/stoeberhunde/" class="app-card">
<div class="app-icon">🐾</div>
<div class="app-info">
<p class="app-name">Stöberhunde</p>
<p class="app-desc">Stöberhunde Heidekreis Übersicht der Stöberhundleiter und Einsatzmöglichkeiten</p>
</div>
<span class="app-arrow"></span>
</a>
</main>
<footer>Jägerschaft Fallingbostel e.V.</footer>
<script>
// Register service worker
if ('serviceWorker' in navigator) {
navigator.serviceWorker.register('/sw.js').catch(() => {});
}
// PWA install banner
const banner = document.getElementById('install-banner');
const installBtn = document.getElementById('install-btn');
const dismissBtn = document.getElementById('dismiss-btn');
const installText = document.getElementById('install-text');
const DISMISSED_KEY = 'portal-pwa-dismissed';
let deferredPrompt = null;
const isInStandalone = () =>
window.matchMedia('(display-mode: standalone)').matches ||
window.navigator.standalone === true;
const isIOS = () =>
/iphone|ipad|ipod/i.test(navigator.userAgent) && !window.MSStream;
if (!isInStandalone() && !localStorage.getItem(DISMISSED_KEY)) {
if (isIOS()) {
installText.textContent = '📲 Zum Homescreen hinzufügen: Teilen ⬆️ → „Zum Home-Bildschirm"';
installBtn.style.display = 'none';
banner.classList.add('visible');
} else {
window.addEventListener('beforeinstallprompt', (e) => {
e.preventDefault();
deferredPrompt = e;
banner.classList.add('visible');
});
}
}
installBtn.addEventListener('click', async () => {
if (!deferredPrompt) return;
deferredPrompt.prompt();
const { outcome } = await deferredPrompt.userChoice;
if (outcome === 'accepted') banner.classList.remove('visible');
deferredPrompt = null;
});
dismissBtn.addEventListener('click', () => {
localStorage.setItem(DISMISSED_KEY, '1');
banner.classList.remove('visible');
});
</script>
</body>
</html>