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>