File size: 6,110 Bytes
31b74a9 8bb0613 31b74a9 ba0fc4a 31b74a9 e123f50 ba0fc4a e123f50 46deef5 31b74a9 ba0fc4a 31b74a9 e123f50 31b74a9 e123f50 31b74a9 e123f50 31b74a9 | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 | <!DOCTYPE html>
<html lang="en-GB">
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1, viewport-fit=cover" />
<meta name="robots" content="noindex,nofollow" />
<meta name="theme-color" content="#1e3a5f" />
<meta name="description" content="careTalk updates admin" />
<link rel="icon" type="image/png" href="./icons/favicon.png" />
<title>careTalk — updates</title>
<script>
(function () {
try {
var t = localStorage.getItem("don.ui.theme");
if (t !== "light" && t !== "dark") {
t = matchMedia("(prefers-color-scheme: dark)").matches ? "dark" : "light";
}
document.documentElement.setAttribute("data-theme", t);
} catch (e) {}
})();
</script>
<link rel="preconnect" href="https://fonts.googleapis.com" />
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin />
<link
href="https://fonts.googleapis.com/css2?family=Fraunces:opsz,wght@9..144,550;9..144,700&family=Source+Sans+3:wght@400;600;700&display=swap"
rel="stylesheet"
/>
<script type="module" crossorigin src="./assets/admin-COcnhFD_.js"></script>
<link rel="modulepreload" crossorigin href="./assets/theme-CuaEyjDL.js">
<link rel="modulepreload" crossorigin href="./assets/subscribers-CLCOf4GQ.js">
<link rel="stylesheet" crossorigin href="./assets/subscribers-BHyrZ7wW.css">
<link rel="manifest" href="./manifest.webmanifest"><script id="vite-plugin-pwa:register-sw" src="./registerSW.js"></script></head>
<body class="admin-page">
<header class="site-header">
<a class="brand-lockup" href="./">
<span class="avatar" aria-hidden="true">C</span>
<span class="brand-name">careTalk</span>
</a>
<nav class="nav-links" aria-label="Primary">
<button
type="button"
class="theme-toggle"
data-theme-toggle
aria-label="Switch to dark theme"
title="Dark theme"
>
<svg class="theme-icon theme-icon-sun" viewBox="0 0 24 24" aria-hidden="true" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round">
<circle cx="12" cy="12" r="4" />
<path d="M12 2v2M12 20v2M4.93 4.93l1.41 1.41M17.66 17.66l1.41 1.41M2 12h2M20 12h2M4.93 19.07l1.41-1.41M17.66 6.34l1.41-1.41" />
</svg>
<svg class="theme-icon theme-icon-moon" viewBox="0 0 24 24" aria-hidden="true" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round">
<path d="M21 14.5A8.5 8.5 0 1 1 9.5 3a7 7 0 0 0 11.5 11.5z" />
</svg>
</button>
<a class="btn btn-ghost" href="./">Back to site</a>
</nav>
</header>
<main class="section band">
<div class="section-inner admin-wrap">
<p class="version-pill">Version <span data-app-version>1.1.31</span></p>
<section id="adminLogin" class="admin-card" aria-labelledby="admin-login-title">
<h1 id="admin-login-title">Updates access</h1>
<p class="lede">Sign in to review emails collected for careTalk update notes on this device.</p>
<form id="adminLoginForm" class="feedback-form" autocomplete="on">
<label>
Username
<input name="username" type="text" autocomplete="username" required placeholder="Username" />
</label>
<label>
Password
<input name="password" type="password" autocomplete="current-password" required />
</label>
<div class="feedback-actions">
<button type="submit" class="btn btn-primary">Sign in</button>
<p id="adminLoginStatus" class="feedback-status" hidden></p>
</div>
</form>
<p class="admin-privacy">Credentials are not published on the public site.</p>
</section>
<section id="adminPanel" class="admin-card" hidden aria-labelledby="admin-panel-title">
<div class="admin-panel-head">
<div>
<h1 id="admin-panel-title">Subscribers</h1>
<p class="lede">
<strong id="subscriberCount">0</strong> email(s) on this browser
· careTalk <span data-app-version>1.1.31</span>
</p>
</div>
<div class="admin-actions">
<button type="button" class="btn btn-ghost" id="exportSubscribers">Export CSV</button>
<button type="button" class="btn btn-ghost" id="clearSubscribers">Clear all</button>
<button type="button" class="btn btn-primary" id="adminSignOut">Sign out</button>
</div>
</div>
<p id="subscriberEmpty" class="feedback-wall-empty">No subscribers yet on this device.</p>
<div class="subscriber-table-wrap">
<table class="subscriber-table">
<thead>
<tr>
<th scope="col">Email</th>
<th scope="col">Name</th>
<th scope="col">Subscribed</th>
<th scope="col">Version</th>
<th scope="col"><span class="sr-only">Actions</span></th>
</tr>
</thead>
<tbody id="subscriberRows"></tbody>
</table>
</div>
<p class="admin-privacy">
Static demo storage: lists are kept in this browser’s local storage (same origin).
Export CSV if you need a portable copy.
</p>
</section>
</div>
</main>
<footer class="site-footer">
<div class="section-inner">
<p>careTalk ops · v<span data-app-version>1.1.31</span></p>
</div>
</footer>
<style>
.sr-only {
position: absolute;
width: 1px;
height: 1px;
padding: 0;
margin: -1px;
overflow: hidden;
clip: rect(0, 0, 0, 0);
white-space: nowrap;
border: 0;
}
</style>
</body>
</html>
|