diff --git a/app/public/dashboard-settings.html b/app/public/dashboard-settings.html new file mode 100644 index 0000000..e036866 --- /dev/null +++ b/app/public/dashboard-settings.html @@ -0,0 +1,451 @@ + + + + + +Station Settings + + + + + + +
+ + +
+
Station API Keys
+

+
+
+ + +
+
+ + +
+
+
+ + +
+

Find these at ambientweather.net → My Account → API Keys. Keys are stored on the server only — never exposed to the browser.

+
+ + +
+
Alert Thresholds
+

Leave blank to disable. Applied to all push/ntfy subscriptions.

+
+
+
+
+
+
+
+ + +
+
+ + +
+
Station Display
+
+ + +
+
+ + +
+
+ + +
+
Station Location (for NWS Alerts)
+

Used to fetch active NWS weather alerts. If you have push notifications enabled, your saved subscription location is used automatically.

+
+
+
+
+
+ + +
+
+ + +
+
Data
+ +
+
+
Export
+

Download your station history as a CSV spreadsheet.

+
+
+ + Download CSV +
+
+ +
+ +
+
+
Import Historical Data
+

Pull existing data from Ambient's servers into your local records. Ambient keeps ~1 year of history.

+
+
+ + +
+
+ +
+ + +
+
Change Password
+
+
+
+
+
+ + +
+
+ +
+ + + + diff --git a/app/public/dashboard.html b/app/public/dashboard.html index d789707..edc0783 100644 --- a/app/public/dashboard.html +++ b/app/public/dashboard.html @@ -141,45 +141,13 @@ a { color: var(--cool); text-decoration: none; } /* ── No-data ── */ .no-data { display: flex; align-items: center; justify-content: center; height: 180px; font-size: 0.85rem; color: var(--ink-light); } -/* ── Settings panel ── */ +/* ── Settings panel (collapsible sections) ── */ .settings-panel { margin-top: 2.5rem; border: 1px solid var(--border); border-radius: 12px; overflow: hidden; } .settings-panel summary { padding: 0.85rem 1.2rem; cursor: pointer; font-size: 0.82rem; text-transform: uppercase; letter-spacing: 0.06em; color: var(--ink-light); background: var(--paper-dark); list-style: none; display: flex; align-items: center; gap: 0.5rem; user-select: none; } .settings-panel summary::before { content: '›'; display: inline-block; transition: transform 0.2s; } .settings-panel[open] summary::before { transform: rotate(90deg); } .settings-panel summary::-webkit-details-marker { display: none; } .settings-body { padding: 1.2rem; background: var(--paper-dark); border-top: 1px solid var(--border); } -.settings-grid { display: grid; grid-template-columns: 1fr 1fr; gap: 1rem; margin: 0.75rem 0; } -@media (max-width: 600px) { .settings-grid { grid-template-columns: 1fr; } } -.settings-body label { display: block; font-size: 0.8rem; color: var(--ink-light); margin-bottom: 0.3rem; } -.settings-body input { width: 100%; padding: 0.5rem 0.75rem; background: var(--paper); border: 1px solid var(--border); border-radius: 8px; color: var(--ink); font-size: 0.9rem; font-family: var(--mono); } -.settings-body input:focus { outline: 2px solid var(--accent); } -.settings-actions { display: flex; align-items: center; gap: 1rem; margin-top: 0.75rem; } -.settings-body button { - padding: 0.45rem 1.2rem; - background: var(--accent); - color: #fff; - border: none; - border-radius: 8px; - font-family: var(--mono); - font-size: 0.9rem; - cursor: pointer; - font-weight: 600; - transition: opacity .18s cubic-bezier(.2,0,0,1), - box-shadow .18s cubic-bezier(.2,0,0,1), - transform .1s cubic-bezier(.2,0,0,1); -} -.settings-body button:hover { - opacity: 0.88; - box-shadow: 0 0 0 3px color-mix(in srgb, var(--accent) 25%, transparent); -} -.settings-body button:active { transform: scale(0.95); box-shadow: none; } -.save-msg { font-size: 0.85rem; color: var(--cool); } -.save-msg.err { color: var(--accent); } -.keys-status { font-size: 0.85rem; margin-bottom: 0.25rem; } -.keys-status.ok { color: var(--cool); } -.keys-status.missing { color: var(--accent); } -.keys-hint { font-size: 0.78rem; color: var(--ink-light); margin-top: 1rem; line-height: 1.5; } -.settings-divider { border: none; border-top: 1px solid var(--border); margin: 1.25rem 0; } /* Records */ .records-grid { display: grid; grid-template-columns: repeat(auto-fill, minmax(200px, 1fr)); gap: 0.6rem; } .record-item { background: var(--paper); border: 1px solid var(--border); border-radius: 8px; padding: 0.6rem 0.85rem; } @@ -189,16 +157,6 @@ a { color: var(--cool); text-decoration: none; } /* Anomaly tile */ .stat.anomaly-above { border-color: var(--accent); } .stat.anomaly-below { border-color: var(--cool); } -/* Export link */ -.export-link { display: inline-block; padding: 0.45rem 1.2rem; background: var(--cool); color: #fff !important; border-radius: 8px; font-size: 0.9rem; font-weight: 600; text-decoration: none !important; } -.export-link:hover { opacity: 0.88; } -.backfill-header { display: flex; align-items: flex-start; justify-content: space-between; gap: 1rem; flex-wrap: wrap; } -.backfill-controls { display: flex; gap: 0.5rem; align-items: center; flex-shrink: 0; } -.backfill-controls select { padding: 0.45rem 0.6rem; background: var(--paper); border: 1px solid var(--border); border-radius: 8px; color: var(--ink); font-family: var(--mono); font-size: 0.85rem; } -.progress-bar-wrap { height: 6px; background: var(--paper-darker); border-radius: 3px; margin-top: 1rem; overflow: hidden; } -.progress-bar { height: 100%; background: var(--cool); border-radius: 3px; transition: width 0.5s; width: 0%; } -.progress-text { font-size: 0.82rem; color: var(--ink-light); margin-top: 0.4rem; } -.backfill-progress { margin-top: 0.75rem; } /* NWS alert cards */ .alert-card { border-radius: 10px; padding: 0.6rem 1rem; margin-bottom: 0.5rem; font-size: 0.85rem; border: 1px solid; } .alert-card.sev-extreme { background: rgba(120,0,0,0.12); border-color: #a00; color: var(--ink); } @@ -243,11 +201,6 @@ a { color: var(--cool); text-decoration: none; } .ah-body { color: var(--ink-light); font-size: 0.78rem; margin-top: 0.1rem; line-height: 1.4; } .ah-empty { padding: 1.5rem; text-align: center; color: var(--ink-light); font-size: 0.85rem; } -/* Settings sections */ -.settings-section-hdr { font-size: 0.72rem; font-weight: 700; text-transform: uppercase; letter-spacing: 0.07em; color: var(--ink-light); margin: 1.25rem 0 0.6rem; padding-bottom: 0.4rem; border-bottom: 1px solid var(--border); } -.threshold-row { display: grid; grid-template-columns: 1fr 1fr; gap: 0.75rem; } -@media (max-width: 480px) { .threshold-row { grid-template-columns: 1fr; } } - .hidden { display: none !important; } /* ── Section cards ── */ @@ -371,6 +324,7 @@ canvas.sparkline { display: block; width: 100%; height: 22px; margin-top: 0.4rem Conditions ← Weather + Settings Sign out @@ -562,125 +516,6 @@ canvas.sparkline { display: block; width: 100%; height: 22px; margin-top: 0.4rem - -
- Station API Keys -
-

-
-
- - -
-
- - -
-
-
- - -
-

Find these at ambientweather.net → My Account → API Keys. Keys are stored on the server only — never exposed to the browser.

- -
- -
-
-
Export Data
-

Download your station history as a CSV spreadsheet.

-
-
- - Download CSV -
-
- -
- -
-
-
-
Import Historical Data
-

Pull existing data from Ambient's servers into your local records. Ambient keeps ~1 year of history.

-
-
- - -
-
- -
- -
- -
Alert Thresholds (Station)
-

Leave blank to disable. These extend your existing push/ntfy alert subscriptions.

-
-
-
-
-
-
-
- - -
- -
- -
Station Display
-
- - -
-
- - -
- -
- -
Station Location (for NWS Alerts)
-

Used to fetch active NWS weather alerts for your area. If you have push notifications enabled, your saved location is used automatically.

-
-
-
-
-
- - -
- -
- -
Change Password
-
-
-
-
-
- - -
-
-