175 lines
5.7 KiB
HTML
175 lines
5.7 KiB
HTML
<!doctype html>
|
|
<html lang="de">
|
|
<head>
|
|
<meta charset="utf-8" />
|
|
<meta name="viewport" content="width=device-width,initial-scale=1,viewport-fit=cover" />
|
|
<meta name="theme-color" content="#0b1020" />
|
|
<meta name="apple-mobile-web-app-capable" content="yes">
|
|
<meta name="mobile-web-app-capable" content="yes">
|
|
<meta name="apple-mobile-web-app-status-bar-style" content="black-translucent">
|
|
|
|
<link rel="manifest" href="./manifest.webmanifest">
|
|
<link rel="icon" href="./icons/icon-192.png">
|
|
<link rel="apple-touch-icon" href="./icons/icon-192.png">
|
|
|
|
<title>WFW-Aushang</title>
|
|
|
|
<style>
|
|
:root,
|
|
:root[data-theme="dark"]{
|
|
--bg:#0b1020; --card:#121a33; --text:#e8eeff; --muted:#9fb0ff;
|
|
--line:rgba(255,255,255,.12); --btn:#2b60ff; --btn2:#1c254b;
|
|
--ok:#2bff9f; --warn:#ffd36b;
|
|
}
|
|
:root[data-theme="light"]{
|
|
--bg:#f6f7fb; --card:#ffffff; --text:#0b1020; --muted:#5060a8;
|
|
--line:rgba(0,0,0,.10); --btn:#2b60ff; --btn2:#eef1ff;
|
|
}
|
|
|
|
|
|
*{ box-sizing:border-box; }
|
|
body{
|
|
margin:0; font-family: system-ui, -apple-system, Segoe UI, Roboto, Ubuntu, Cantarell, Arial;
|
|
background:var(--bg); color:var(--text);
|
|
}
|
|
.wrap{
|
|
max-width: 860px; margin: 0 auto; padding: 16px 16px 92px;
|
|
}
|
|
h1{ font-size: 20px; margin: 8px 0 14px; letter-spacing:.3px; }
|
|
.list{
|
|
display:flex; flex-direction:column; gap:10px;
|
|
}
|
|
.row{
|
|
display:flex; align-items:center; gap:12px;
|
|
background:var(--card); border:1px solid var(--line);
|
|
border-radius:16px; padding:12px 14px;
|
|
text-decoration:none; color:inherit;
|
|
}
|
|
.row:active{ transform: scale(0.995); }
|
|
.ico{
|
|
width:38px; height:38px; border-radius:12px;
|
|
display:grid; place-items:center;
|
|
background:rgba(43,96,255,.16);
|
|
border:1px solid rgba(43,96,255,.22);
|
|
flex:0 0 auto;
|
|
}
|
|
.name{ font-size: 16px; line-height:1.2; }
|
|
.sub{ font-size: 12px; color: var(--muted); margin-top:3px; }
|
|
.spacer{ flex:1; }
|
|
.badge{
|
|
font-size:12px; color:var(--muted);
|
|
border:1px solid var(--line); padding:6px 10px; border-radius:999px;
|
|
background:rgba(0,0,0,.08);
|
|
}
|
|
|
|
.footer{
|
|
position:fixed; left:0; right:0; bottom:0;
|
|
padding:12px 12px calc(12px + env(safe-area-inset-bottom));
|
|
background:linear-gradient(to top, rgba(11,16,32,.95), rgba(11,16,32,.55), rgba(11,16,32,0));
|
|
pointer-events:none;
|
|
}
|
|
@media (prefers-color-scheme: light){
|
|
.footer{ background:linear-gradient(to top, rgba(246,247,251,.95), rgba(246,247,251,.55), rgba(246,247,251,0)); }
|
|
}
|
|
.footerInner{
|
|
max-width: 860px; margin:0 auto; display:flex; gap:10px; pointer-events:auto;
|
|
}
|
|
|
|
/* BIG BUTTONS */
|
|
.btn{
|
|
border:0; border-radius:18px;
|
|
padding:18px 18px; /* bigger */
|
|
font-size:18px; /* bigger */
|
|
font-weight:800;
|
|
min-height:64px; /* bigger */
|
|
display:flex; align-items:center; justify-content:center;
|
|
cursor:pointer;
|
|
box-shadow: 0 10px 30px rgba(0,0,0,.22);
|
|
text-decoration:none;
|
|
user-select:none;
|
|
-webkit-tap-highlight-color: transparent;
|
|
}
|
|
.btnPrimary{ background:var(--btn); color:white; flex:1; }
|
|
.btnSecondary{ background:var(--btn2); color:var(--text); flex:1; border:1px solid var(--line); box-shadow:none; }
|
|
.btn:active{ transform: scale(0.995); }
|
|
|
|
.status{
|
|
margin: 8px 0 14px; color: var(--muted); font-size: 13px;
|
|
}
|
|
.error{
|
|
background: rgba(255,80,80,.12);
|
|
border:1px solid rgba(255,80,80,.25);
|
|
color: #ffb7b7;
|
|
padding: 10px 12px;
|
|
border-radius: 14px;
|
|
font-size: 13px;
|
|
white-space: pre-wrap;
|
|
}
|
|
|
|
/* INSTALL/UPDATE OVERLAY */
|
|
#installOverlay{
|
|
position:fixed; inset:0;
|
|
display:none;
|
|
z-index:2147483647;
|
|
background: rgba(0,0,0,.55);
|
|
backdrop-filter: blur(10px);
|
|
pointer-events:auto;
|
|
padding: 18px 14px;
|
|
}
|
|
#installOverlay *{ pointer-events:auto; }
|
|
.ovCard{
|
|
max-width: 560px;
|
|
margin: 10vh auto 0;
|
|
background: var(--card);
|
|
border: 1px solid var(--line);
|
|
border-radius: 22px;
|
|
padding: 18px 16px;
|
|
box-shadow: 0 20px 70px rgba(0,0,0,.35);
|
|
}
|
|
.ovTitle{ font-size: 18px; font-weight: 850; margin: 6px 0 6px; }
|
|
.ovText{ color: var(--muted); font-size: 14px; line-height: 1.35; margin: 0 0 14px; }
|
|
.ovBtns{ display:flex; gap:12px; margin-top: 10px; }
|
|
.ovBtns .btn{ flex:1; }
|
|
.ovHint{
|
|
margin-top: 12px;
|
|
font-size: 12px;
|
|
color: var(--muted);
|
|
border-top: 1px solid var(--line);
|
|
padding-top: 12px;
|
|
line-height: 1.35;
|
|
}
|
|
</style>
|
|
</head>
|
|
|
|
<body>
|
|
<div class="wrap">
|
|
<h1>WFW-Aushang</h1>
|
|
<div id="status" class="status">Lade Liste…</div>
|
|
<div id="err" class="error" style="display:none"></div>
|
|
<div id="list" class="list"></div>
|
|
</div>
|
|
|
|
<div class="footer">
|
|
<div class="footerInner">
|
|
<button id="closeBtn" class="btn btnSecondary">Aushang schließen</button>
|
|
<button id="themeBtn" class="btn btnSecondary">🌙 Dunkel</button>
|
|
<button id="refreshBtn" class="btn btnPrimary">↻ Refresh</button>
|
|
</div>
|
|
</div>
|
|
|
|
<div id="installOverlay" role="dialog" aria-modal="true">
|
|
<div class="ovCard">
|
|
<div class="ovTitle" id="ovTitle">WFW-Aushang</div>
|
|
<p class="ovText" id="ovText">Installiere mich!</p>
|
|
<div class="ovBtns">
|
|
<button id="ovPrimaryBtn" class="btn btnPrimary">Installieren</button>
|
|
<button id="ovContinueBtn" class="btn btnSecondary">Weiter im Browser</button>
|
|
</div>
|
|
<div class="ovHint" id="ovHint" style="display:none"></div>
|
|
</div>
|
|
</div>
|
|
|
|
<script src="./app.js?v=2025.12.24.10"></script>
|
|
</body>
|
|
</html>
|