Spaces:
Running
Running
| <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> | |