De opfrisbeurt uit het designsysteem: Gate 0.0.25, Relay 0.5.2

Beide pagina's volgen nu HomeGit/Docs/website-design-system.html, in dezelfde ronde als AssetApp.
Drie dingen, en de volgorde is niet willekeurig:

- een accentgloed achter de pagina, uit de linkerbovenhoek. Dit is de VOORWAARDE voor de rest en
  niet de finishing touch: een backdrop-filter op een egale ondergrond levert per definitie niets
  op, dus er moet eerst iets achter de vlakken staan;
- kaarten doorschijnend, met een randlicht bovenlangs en een schaduw uit een token;
- één hoek voor elk buitenste kader. De kaart van --radius-xl naar --radius-lg, gelijk aan het
  logkader, dat zijn geneste hoek daarvan afleidt.

Het volle accentpalet van AssetApp (vijf kleuren, licht en donker) staat erin; beide apps blijven
op oranje en krijgen bewust geen knop. Om dezelfde reden staat de diepte hier vast aan, terwijl het
in AssetApp een instelling is: dit zijn statuspagina's met licht/donker en verder geen bediening.

--pos is groen geworden in plaats van oranje. Hij volgde het accent, en dat las als merkkleur in
plaats van als betekenis; zichtbaar gevolg is dat de badge "Running" nu groen is.

Meegevonden en meteen gerepareerd: prefers-reduced-motion en prefers-reduced-transparency mogen
niet in één media-query. Windows heeft een schakelaar "Animatie-effecten" die bij veel mensen uit
staat en die zet reduced-motion op reduce; samen in één query bleef er van de hele opmaak niets
over. Ze staan apart, en reduced-motion haalt alleen de overgang weg.

Alleen de pagina's, dus geen nieuwe images: VERSION in tools/evolu-relay/build.sh blijft staan en
alleen de manifesten gaan omhoog.

Suite groen: 22 + 43 + 54 + 22 + 65 + 39 + 115.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
Harmen
2026-08-31 11:28:11 +02:00
co-authored by Claude Opus 5
parent 627c8306b1
commit 45dd50fb0b
9 changed files with 425 additions and 95 deletions
+34
View File
@@ -8,6 +8,40 @@ Wat er nog moet gebeuren staat **niet** hier maar in de plannen; zie [CONTINUE_H
Een lijst met geplande features op twee plekken loopt uit elkaar, en dan is geen van beide meer te
vertrouwen.
## [0.0.25] - 2026-08-31
### Changed
- **De opfrisbeurt uit het gedeelde designsysteem** (`HomeGit/Docs/website-design-system.html`), in
dezelfde ronde doorgevoerd in Evolu Relay en in AssetApp. Drie dingen:
- **een accentgloed achter de pagina**, uit de linkerbovenhoek, met een zwakker tegenlichtje
rechtsboven. Dit is het deel dat het meeste doet, en het is ook de vóórwaarde voor de rest: een
`backdrop-filter` op een egale ondergrond levert per definitie niets op, dus er moet eerst iets
áchter de vlakken staan;
- **kaarten zijn doorschijnend met een randlicht en een schaduw.** Ze lezen daardoor als panelen
die op de pagina liggen in plaats van als vlakken die erop geschilderd zijn;
- **één hoek voor élk buitenste kader.** De kaart ging van 28 naar 20 pixels, gelijk aan het
logkader en aan AssetApp; twee radii naast elkaar lezen als een fout in plaats van als een
keuze. De geneste hoek van het logkader rekent mee.
De vijf accentkleuren van AssetApp (oranje, blauw, lila, teal, magenta) staan nu in het palet;
deze app blijft op oranje. Wisselen kan door `data-accent` op `<html>` te zetten, er is bewust
geen knop voor: dit is een statuspagina met licht/donker en verder geen bediening. Om dezelfde
reden staat de diepte hier vást aan, terwijl het in AssetApp een instelling is.
- **`--pos` is groen geworden in plaats van oranje.** Hij volgde het accent, en dat las als
merkkleur in plaats van als betekenis. Zichtbaar gevolg: de badge "Running" is groen.
### Fixed
- **`prefers-reduced-motion` zette per ongeluk de hele opmaak plat.** Die wens stond samen met
`prefers-reduced-transparency` in één media-query. Windows heeft een schakelaar "Animatie-
effecten" die bij veel mensen uit staat, en die zet `reduced-motion` op `reduce`; op zo'n machine
bleef er van de nieuwe opmaak niets over. De twee zeggen ook echt iets anders: de ene gaat over
doorschijnende vlakken, de andere over beweging. Ze staan nu apart, en `reduced-motion` haalt
alleen de overgang weg.
## [0.0.24] - 2026-08-30
### Added
+26
View File
@@ -19,6 +19,32 @@ De regel is: **verhoog je `VERSION`, dan verhoog je ook het manifest; andersom n
> geschreven uit de `releaseNotes` in het manifest en uit `PROGRESS.md` van het plan **Umbrelapp**. Ze zijn
> daarom korter dan de rest.
## 0.5.2 - 31-08-2026
**Alleen de pagina, dus geen nieuwe image.** `VERSION` in `tools/evolu-relay/build.sh` blijft staan; het
manifest gaat naar 0.5.2. Precies het geval waar de regel bovenaan dit bestand over gaat.
De opfrisbeurt uit het gedeelde designsysteem (`HomeGit/Docs/website-design-system.html`), in dezelfde
ronde doorgevoerd in Electrum Gate en in AssetApp:
- **een accentgloed achter de pagina**, uit de linkerbovenhoek, met een zwakker tegenlichtje rechtsboven.
Dit doet het meeste werk en het is de vóórwaarde voor de rest: een `backdrop-filter` op een egale
ondergrond levert per definitie niets op, dus er moet eerst iets áchter de vlakken staan;
- **kaarten zijn doorschijnend met een randlicht en een schaduw**, zodat ze lezen als panelen die op de
pagina liggen in plaats van als vlakken die erop geschilderd zijn;
- **één hoek voor élk buitenste kader**: de kaart van 28 naar 20 pixels, gelijk aan het logkader en aan
AssetApp. De geneste hoek van dat logkader rekent mee.
De vijf accentkleuren van AssetApp staan nu in het palet; deze app blijft op oranje en heeft er bewust
geen knop voor. Om dezelfde reden staat de diepte hier vást aan, terwijl het in AssetApp een instelling
is. `--pos` is groen geworden in plaats van oranje: hij volgde het accent, en dat las als merkkleur in
plaats van als betekenis.
**Eén valkuil is meteen ingebouwd en verdient het om onthouden te worden.** `prefers-reduced-motion` en
`prefers-reduced-transparency` mogen niet in één media-query: Windows heeft een schakelaar
"Animatie-effecten" die bij veel mensen uit staat en die zet `reduced-motion` op `reduce`, waarna er van
de hele opmaak niets overbleef. Ze staan apart, en `reduced-motion` haalt alleen de overgang weg.
## 0.5.1 - 30-08-2026
**Reparatie, gemeld door de gebruiker binnen een uur na 0.5.0.** De melding bovenaan de pagina ging nooit
+2 -2
View File
@@ -29,9 +29,9 @@
| Plan | App | Volgende stap | Status |
|-|-|-|-|
| [Umbrelapp](Plannen/Actief/008-Umbrelapp/TAKEN.md) | Relay | **0.5.1 staat klaar en de pagina is af op de lijst van de gebruiker (30-08-2026):** tijdvenster van twee minuten met de teller in het relay-proces, labels op een eigenaar-id, geblokkeerd en geweigerd in één kader, maatvoering gelijk aan Electrum Gate. De image is dezelfde dag op de Umbrel gebouwd, geduwd en gepind. **Volgende stap is van de gebruiker en is een blik, geen sessie:** verversen, updaten, en dan de drie dingen nakijken die alleen het apparaat kan zeggen (teller met de pagina dicht, label na een herstart, het adres achter de app-proxy). Wat daarna nog open is: data per eigenaar wissen, en een `package-lock.json`. **Het pinnen van `python:3-alpine` en `nginx:alpine` is bewust géén werk meer hier** en wacht op Eigenimage; zie [KNOWLEDGE.md](KNOWLEDGE.md) | 🔶 |
| [Umbrelapp](Plannen/Actief/008-Umbrelapp/TAKEN.md) | Relay | **0.5.2 staat klaar (31-08-2026): de opfrisbeurt uit het gedeelde designsysteem** (accentgloed, doorschijnende kaarten met randlicht en schaduw, één hoek voor elk buitenste kader, het volle accentpalet met oranje als stand). Alleen de pagina, dus geen nieuwe image. **Nog nakijken op het apparaat, en dat is een blik.** Daarvóór stond er: **0.5.1 staat klaar en de pagina is af op de lijst van de gebruiker (30-08-2026):** tijdvenster van twee minuten met de teller in het relay-proces, labels op een eigenaar-id, geblokkeerd en geweigerd in één kader, maatvoering gelijk aan Electrum Gate. De image is dezelfde dag op de Umbrel gebouwd, geduwd en gepind. **Volgende stap is van de gebruiker en is een blik, geen sessie:** verversen, updaten, en dan de drie dingen nakijken die alleen het apparaat kan zeggen (teller met de pagina dicht, label na een herstart, het adres achter de app-proxy). Wat daarna nog open is: data per eigenaar wissen, en een `package-lock.json`. **Het pinnen van `python:3-alpine` en `nginx:alpine` is bewust géén werk meer hier** en wacht op Eigenimage; zie [KNOWLEDGE.md](KNOWLEDGE.md) | 🔶 |
| [Proefopstelling](Plannen/Actief/007-Proefopstelling/TAKEN.md) | Relay | **Volledig ingehaald op 28-08-2026 en klaar voor het archief.** Beide vragen die het nog bezat zijn beantwoord door **Umbrelapp**: Trezor Suite accepteert een eigen relay, en een eigenaar registreren is niet meer nodig sinds de quota-manager eruit is. Wat er in fase 2 en 3 stond gaat over een pakket dat niet meer bestaat. **Eén beslissing van de gebruiker: opheffen of laten staan** | 🔶 |
| [Webinterface](Plannen/Actief/005-Webinterface/TAKEN.md) | Gate | **De pagina is af en goedgekeurd, op een breed scherm én op een telefoon (27-08-2026).** Op 28-08-2026 kapotgegaan door de tweede app en gerepareerd in 0.0.23. In 0.0.24 (30-08-2026) is de statuswidget van "Answering" naar "Running" gegaan en is er een menu-item "About this app" bij gekomen; dat kwam uit het werk aan Evolu Relay, waar de gebruiker de twee pagina's naast elkaar zag. **Nog nakijken op het apparaat, en dat is een blik en geen sessie.** Wat er verder staat wacht op tijd (het activiteitenlog een etmaal laten lopen) of is een beslissing van de gebruiker (waar Nginx Proxy Manager zijn certificaten neerzet, en of Zoraxy een harde afhankelijkheid wordt) | 🔶 |
| [Webinterface](Plannen/Actief/005-Webinterface/TAKEN.md) | Gate | **0.0.25 (31-08-2026): dezelfde opfrisbeurt als de Relay**, uit het gedeelde designsysteem, plus een reparatie die daarbij aan het licht kwam: `prefers-reduced-motion` zette per ongeluk de hele opmaak plat, omdat die wens met `prefers-reduced-transparency` in één media-query stond. **Nog nakijken op het apparaat.** Daarvóór: **De pagina is af en goedgekeurd, op een breed scherm én op een telefoon (27-08-2026).** Op 28-08-2026 kapotgegaan door de tweede app en gerepareerd in 0.0.23. In 0.0.24 (30-08-2026) is de statuswidget van "Answering" naar "Running" gegaan en is er een menu-item "About this app" bij gekomen; dat kwam uit het werk aan Evolu Relay, waar de gebruiker de twee pagina's naast elkaar zag. **Nog nakijken op het apparaat, en dat is een blik en geen sessie.** Wat er verder staat wacht op tijd (het activiteitenlog een etmaal laten lopen) of is een beslissing van de gebruiker (waar Nginx Proxy Manager zijn certificaten neerzet, en of Zoraxy een harde afhankelijkheid wordt) | 🔶 |
| [Appstore](Plannen/Actief/010-Appstore/TAKEN.md) | Gate | De repo `ElectrumTLS` weghalen op de Git-server; daar staat het domein nog in de historie. **De omschakeling naar Fulcrum is op 27-08-2026 gelukt zonder aanpassing**, dus daarvan is alleen de herstartcontrole nog over, en die komt vanzelf bij de eerstvolgende herstart | 🔶 |
## C - Wacht op afhankelijkheid
@@ -28,6 +28,11 @@
## Volgende stap
- [x] **De opfrisbeurt uit het gedeelde designsysteem (31-08-2026, 0.0.25).** Accentgloed achter de
pagina, doorschijnende kaarten met randlicht en schaduw, en één hoek voor elk buitenste kader
(28 naar 20 pixels). Het volle accentpalet staat erin, met oranje als stand; er komt bewust geen
knop bij, want dit is een statuspagina. Meegevonden en gerepareerd: `prefers-reduced-motion` zette
de hele opmaak plat doordat die wens met `prefers-reduced-transparency` in één media-query stond.
- [x] **De statuswidget verduidelijkt en een dialoog "About this app" toegevoegd (30-08-2026, 0.0.24).**
Dit kwam niet uit dit plan maar uit het werk aan Evolu Relay: de gebruiker zag de twee pagina's naast
elkaar en meldde dat de tegel "Answering / answered in 7 ms, from inside the app" onduidelijk is
@@ -30,6 +30,10 @@
dus **één architectuur en geen multi-arch index**. Dat is bij bouwen op het apparaat zelf te
verwachten en het klopt per constructie met de host; voor de officiele store hoort er arm64 bij, en
dat staat bij **Publicatie-Relay**
- [x] **0.5.2: de opfrisbeurt uit het gedeelde designsysteem (31-08-2026).** Dezelfde drie dingen als in
Electrum Gate: accentgloed, doorschijnende kaarten met randlicht en schaduw, en één hoek voor elk
buitenste kader. Alleen de pagina, dus `VERSION` in `build.sh` blijft staan en het manifest gaat
alleen omhoog. Dat is de regel uit de kop van de changelog, en dit is het tweede geval op rij.
- [x] **0.5.1: de melding bovenaan ging nooit weg (30-08-2026).** Gemeld door de gebruiker binnen een uur
na 0.5.0, op de pagina op zijn eigen Umbrel. Eén ontbrekende tak: de ronde zette de melding wel áán
maar nooit uit, dus "Sent." bleef staan tot je herlaadde. Nu is de melding van de ronde en niet van de
+166 -50
View File
@@ -17,7 +17,7 @@
niet, dan zegt hij dat. Hij verzint niets, want hij wordt juist geraadpleegd
op het moment dat er iets mis lijkt te zijn.
-->
<html lang="en" data-theme="dark" data-accent="orange">
<html lang="en" data-theme="dark" data-accent="orange" data-depth="deep">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
@@ -36,52 +36,152 @@
}
[data-theme="dark"][data-accent="orange"] {
--bg: #080808;
--bg-elevated: #181818;
--bg-raised: #242424;
--bg-overlay: #303030;
--border: rgba(255,255,255,0.18);
--border-mid: rgba(255,255,255,0.28);
--text-primary: #f2f2f2;
--text-sec: #a3a3a3;
--text-ter: #6a6a6a;
--accent: #FF6B00;
--accent-soft: rgba(255,107,0,0.16);
--accent-mid: rgba(255,107,0,0.26);
--accent-text: #FF8124;
--pos: #FF8124;
--pos-bg: rgba(255,107,0,0.18);
--neg: #ff5a5a;
--neg-bg: rgba(255,69,69,0.18);
--neutral-bg: rgba(255,255,255,0.08);
--scrollbar: #2c2c2c;
--bg: #080808; --bg-elevated: #181818; --bg-raised: #242424; --bg-overlay: #303030;
--border: rgba(255,255,255,0.18); --border-mid: rgba(255,255,255,0.28);
--text-primary: #f2f2f2; --text-sec: #a3a3a3; --text-ter: #6a6a6a;
--accent: #FF6B00; --accent-soft: rgba(255,107,0,0.16); --accent-mid: rgba(255,107,0,0.26);
--accent-glow: rgba(255,107,0,0.30); --accent-text: #FF8124;
--pos: #39FF8A; --pos-bg: rgba(57,255,138,0.16); --neg: #ff5a5a; --neg-bg: rgba(255,69,69,0.18);
--neutral-bg: rgba(255,255,255,0.08); --input-bg: #1c1c1c; --scrollbar: #2c2c2c;
}
[data-theme="light"][data-accent="orange"] {
--bg: #ffffff; --bg-elevated: #f7f7f7; --bg-raised: #f0f0f0; --bg-overlay: #e8e8e8;
--border: rgba(0,0,0,0.12); --border-mid: rgba(0,0,0,0.18);
--text-primary: #0a0a0a; --text-sec: #888888; --text-ter: #bbbbbb;
--accent: #E05500; --accent-soft: rgba(224,85,0,0.08); --accent-mid: rgba(224,85,0,0.16);
--accent-glow: rgba(224,85,0,0.22); --accent-text: #E05500;
--pos: #007a48; --pos-bg: rgba(0,149,90,0.08); --neg: #cc2222; --neg-bg: rgba(204,34,34,0.08);
--neutral-bg: rgba(0,0,0,0.04); --input-bg: #f5f5f5; --scrollbar: #ddd;
}
[data-theme="dark"][data-accent="blue"] {
--bg: #080808; --bg-elevated: #181818; --bg-raised: #242424; --bg-overlay: #303030;
--border: rgba(255,255,255,0.18); --border-mid: rgba(255,255,255,0.28);
--text-primary: #f2f2f2; --text-sec: #a3a3a3; --text-ter: #6a6a6a;
--accent: #3B82F6; --accent-soft: rgba(59,130,246,0.16); --accent-mid: rgba(59,130,246,0.26);
--accent-glow: rgba(59,130,246,0.30); --accent-text: #6AA1FF;
--pos: #39FF8A; --pos-bg: rgba(57,255,138,0.16); --neg: #ff5a5a; --neg-bg: rgba(255,69,69,0.18);
--neutral-bg: rgba(255,255,255,0.08); --input-bg: #1c1c1c; --scrollbar: #2c2c2c;
}
[data-theme="light"][data-accent="blue"] {
--bg: #ffffff; --bg-elevated: #f7f7f7; --bg-raised: #f0f0f0; --bg-overlay: #e8e8e8;
--border: rgba(0,0,0,0.12); --border-mid: rgba(0,0,0,0.18);
--text-primary: #0a0a0a; --text-sec: #888888; --text-ter: #bbbbbb;
--accent: #2563EB; --accent-soft: rgba(37,99,235,0.08); --accent-mid: rgba(37,99,235,0.16);
--accent-glow: rgba(37,99,235,0.22); --accent-text: #2563EB;
--pos: #007a48; --pos-bg: rgba(0,149,90,0.08); --neg: #cc2222; --neg-bg: rgba(204,34,34,0.08);
--neutral-bg: rgba(0,0,0,0.04); --input-bg: #f5f5f5; --scrollbar: #ddd;
}
[data-theme="dark"][data-accent="lila"] {
--bg: #080808; --bg-elevated: #181818; --bg-raised: #242424; --bg-overlay: #303030;
--border: rgba(255,255,255,0.18); --border-mid: rgba(255,255,255,0.28);
--text-primary: #f2f2f2; --text-sec: #a3a3a3; --text-ter: #6a6a6a;
--accent: #B388FF; --accent-soft: rgba(179,136,255,0.16); --accent-mid: rgba(179,136,255,0.26);
--accent-glow: rgba(179,136,255,0.30); --accent-text: #C7A6FF;
--pos: #39FF8A; --pos-bg: rgba(57,255,138,0.16); --neg: #ff5a5a; --neg-bg: rgba(255,69,69,0.18);
--neutral-bg: rgba(255,255,255,0.08); --input-bg: #1c1c1c; --scrollbar: #2c2c2c;
}
[data-theme="light"][data-accent="lila"] {
--bg: #ffffff; --bg-elevated: #f7f7f7; --bg-raised: #f0f0f0; --bg-overlay: #e8e8e8;
--border: rgba(0,0,0,0.12); --border-mid: rgba(0,0,0,0.18);
--text-primary: #0a0a0a; --text-sec: #888888; --text-ter: #bbbbbb;
--accent: #7C3AED; --accent-soft: rgba(124,58,237,0.08); --accent-mid: rgba(124,58,237,0.16);
--accent-glow: rgba(124,58,237,0.22); --accent-text: #7C3AED;
--pos: #007a48; --pos-bg: rgba(0,149,90,0.08); --neg: #cc2222; --neg-bg: rgba(204,34,34,0.08);
--neutral-bg: rgba(0,0,0,0.04); --input-bg: #f5f5f5; --scrollbar: #ddd;
}
[data-theme="dark"][data-accent="teal"] {
--bg: #080808; --bg-elevated: #181818; --bg-raised: #242424; --bg-overlay: #303030;
--border: rgba(255,255,255,0.18); --border-mid: rgba(255,255,255,0.28);
--text-primary: #f2f2f2; --text-sec: #a3a3a3; --text-ter: #6a6a6a;
--accent: #14B8A6; --accent-soft: rgba(20,184,166,0.16); --accent-mid: rgba(20,184,166,0.26);
--accent-glow: rgba(20,184,166,0.30); --accent-text: #2DD4BF;
--pos: #39FF8A; --pos-bg: rgba(57,255,138,0.16); --neg: #ff5a5a; --neg-bg: rgba(255,69,69,0.18);
--neutral-bg: rgba(255,255,255,0.08); --input-bg: #1c1c1c; --scrollbar: #2c2c2c;
}
[data-theme="light"][data-accent="teal"] {
--bg: #ffffff; --bg-elevated: #f7f7f7; --bg-raised: #f0f0f0; --bg-overlay: #e8e8e8;
--border: rgba(0,0,0,0.12); --border-mid: rgba(0,0,0,0.18);
--text-primary: #0a0a0a; --text-sec: #888888; --text-ter: #bbbbbb;
--accent: #0D9488; --accent-soft: rgba(13,148,136,0.08); --accent-mid: rgba(13,148,136,0.16);
--accent-glow: rgba(13,148,136,0.22); --accent-text: #0D9488;
--pos: #007a48; --pos-bg: rgba(0,149,90,0.08); --neg: #cc2222; --neg-bg: rgba(204,34,34,0.08);
--neutral-bg: rgba(0,0,0,0.04); --input-bg: #f5f5f5; --scrollbar: #ddd;
}
[data-theme="dark"][data-accent="magenta"] {
--bg: #080808; --bg-elevated: #181818; --bg-raised: #242424; --bg-overlay: #303030;
--border: rgba(255,255,255,0.18); --border-mid: rgba(255,255,255,0.28);
--text-primary: #f2f2f2; --text-sec: #a3a3a3; --text-ter: #6a6a6a;
--accent: #E24DAE; --accent-soft: rgba(226,77,174,0.16); --accent-mid: rgba(226,77,174,0.26);
--accent-glow: rgba(226,77,174,0.30); --accent-text: #F072C4;
--pos: #39FF8A; --pos-bg: rgba(57,255,138,0.16); --neg: #ff5a5a; --neg-bg: rgba(255,69,69,0.18);
--neutral-bg: rgba(255,255,255,0.08); --input-bg: #1c1c1c; --scrollbar: #2c2c2c;
}
[data-theme="light"][data-accent="magenta"] {
--bg: #ffffff; --bg-elevated: #f7f7f7; --bg-raised: #f0f0f0; --bg-overlay: #e8e8e8;
--border: rgba(0,0,0,0.12); --border-mid: rgba(0,0,0,0.18);
--text-primary: #0a0a0a; --text-sec: #888888; --text-ter: #bbbbbb;
--accent: #BE2A86; --accent-soft: rgba(190,42,134,0.08); --accent-mid: rgba(190,42,134,0.16);
--accent-glow: rgba(190,42,134,0.22); --accent-text: #BE2A86;
--pos: #007a48; --pos-bg: rgba(0,149,90,0.08); --neg: #cc2222; --neg-bg: rgba(204,34,34,0.08);
--neutral-bg: rgba(0,0,0,0.04); --input-bg: #f5f5f5; --scrollbar: #ddd;
}
[data-theme="light"][data-accent="orange"] {
--bg: #ffffff;
--bg-elevated: #f7f7f7;
--bg-raised: #f0f0f0;
--bg-overlay: #e8e8e8;
/* Steviger dan de 0,07 en 0,11 die hier stonden (27-08-2026). Overgenomen uit
AssetApp, waar het licht-thema deze stap al gemaakt had: op wit verdwijnt een
rand van 7 procent zwart vrijwel, en dan drijven de kaders zonder begrenzing
op de achtergrond. In het donkere thema speelt dat niet, want daar staat een
lichte rand op een donkere ondergrond en die zie je hoe dan ook. */
--border: rgba(0,0,0,0.12);
--border-mid: rgba(0,0,0,0.18);
--text-primary: #0a0a0a;
--text-sec: #888888;
--text-ter: #bbbbbb;
--accent: #E05500;
--accent-soft: rgba(224,85,0,0.08);
--accent-mid: rgba(224,85,0,0.16);
--accent-text: #E05500;
--pos: #D04800;
--pos-bg: rgba(224,85,0,0.08);
--neg: #cc2222;
--neg-bg: rgba(204,34,34,0.08);
--neutral-bg: rgba(0,0,0,0.04);
--scrollbar: #ddd;
/* -- Diepte ------------------------------------------------------------------
Overgenomen uit HomeGit/Docs/website-design-system.html (31-08-2026). In
AssetApp is dit een instelling; hier staat hij vast aan, want dit is een
statuspagina met dark/light en verder geen knoppen, en een schuif erbij zou
meer bediening zijn dan de pagina zelf.
Het werkt omdat er iets ACHTER de vlakken komt te staan: een accentgloed uit
de linkerbovenhoek. Een backdrop-filter op een egale ondergrond levert per
definitie niets op, dus de gloed is het eerste deel en het glas het tweede. */
:root {
--surface: var(--bg-elevated);
--surface-inset: var(--bg-raised);
--surface-blur: 16px;
--surface-sat: 135%;
--edge: none;
--ambient: none;
--shadow-1: 0 1px 2px rgba(0,0,0,0.06), 0 4px 16px rgba(0,0,0,0.05);
}
[data-theme="dark"] {
--surface: color-mix(in srgb, #1c1c1c 78%, transparent);
--surface-inset: color-mix(in srgb, #262626 76%, transparent);
--edge: linear-gradient(180deg, rgba(255,255,255,0.10), rgba(255,255,255,0) 42%);
--shadow-1: 0 1px 2px rgba(0,0,0,0.35), 0 10px 30px -18px rgba(0,0,0,0.9);
}
[data-theme="light"] {
--surface: color-mix(in srgb, #ffffff 72%, transparent);
--surface-inset: color-mix(in srgb, #f2f2f2 74%, transparent);
--edge: linear-gradient(180deg, rgba(255,255,255,0.85), rgba(255,255,255,0) 46%);
}
[data-depth="deep"] {
--ambient: radial-gradient(58rem 34rem at 8% -8%, var(--accent-glow), transparent 62%),
radial-gradient(46rem 30rem at 102% 4%, color-mix(in srgb, var(--accent) 14%, transparent), transparent 66%);
}
/* De twee toegankelijkheidswensen horen NIET in een gedeelde media-query, en dat
is een les die een ronde kostte: Windows heeft een schakelaar "Animatie-
effecten" die bij veel mensen uit staat, en die zet prefers-reduced-motion op
reduce. Samen in een query deed de hele stand dan niets. Ze zeggen ook echt
iets anders: de ene gaat over doorschijnende vlakken, de andere over
beweging. */
@media (prefers-reduced-transparency: reduce) {
:root {
--surface: var(--bg-elevated); --surface-inset: var(--bg-raised);
--surface-blur: 0px; --surface-sat: 100%;
}
}
@media (prefers-reduced-motion: reduce) {
body::before, .card { transition: none; }
}
/* De gloed ligt achter alles en vangt geen klikken. z-index 0 hier en 1 op .wrap:
zonder stapelcontext kan een fixed pseudo-element van body over de inhoud heen
komen te liggen. */
body::before {
content: ''; position: fixed; inset: 0; z-index: 0; pointer-events: none;
background: var(--ambient); transition: background 0.3s;
}
* { margin: 0; padding: 0; box-sizing: border-box; }
@@ -97,7 +197,7 @@ body {
/* Breed, maar niet oneindig: op een ultrawide monitor zou een kader van 2500px
regels opleveren die niemand leest. 1760 is ruim genoeg voor drie kolommen
statuskaders naast een lijstkader. */
.wrap { max-width: 1760px; margin: 0 auto; }
.wrap { position: relative; z-index: 1; max-width: 1760px; margin: 0 auto; }
/* ── Het raster ─────────────────────────────────────────────────────────────
Twaalf kolommen, en de kaders vullen ze in de volgorde waarin ze in de HTML
@@ -175,13 +275,30 @@ body {
/* ── Kaarten ────────────────────────────────────────────────────────────── */
.card {
background: var(--bg-elevated);
--radius: var(--radius-xl);
position: relative;
background: var(--surface);
/* --radius-lg en niet --radius-xl (31-08-2026): elk buitenste kader heeft
dezelfde hoek, want ze staan in beeld naast en om elkaar heen en twee radii
lezen dan als een fout. Het logkader leidt zijn hoek hiervan af. */
--radius: var(--radius-lg);
--padding: 1.8rem;
border-radius: var(--radius);
padding: var(--padding);
margin-bottom: 1rem;
box-shadow: var(--shadow-1);
backdrop-filter: blur(var(--surface-blur)) saturate(var(--surface-sat));
-webkit-backdrop-filter: blur(var(--surface-blur)) saturate(var(--surface-sat));
transition: background 0.25s, box-shadow 0.25s;
}
/* Het randlicht: een verloop van licht naar niets over de bovenste 40 procent.
Dit is het verschil tussen doorzichtig en glas; zonder deze laag ziet een
halftransparante kaart er alleen bleek uit. De inhoud moet erbovenop blijven,
anders ligt er een waas over de tekst in plaats van erachter. */
.card::before {
content: ''; position: absolute; inset: 0; border-radius: inherit;
background: var(--edge); pointer-events: none;
}
.card > * { position: relative; }
[data-theme="dark"] .card { border: 1px solid var(--border); }
/* Rand én schaduw in het lichte thema (27-08-2026), overgenomen uit AssetApp.
Hier stond alleen een schaduw, en een zachte schaduw op wit geeft wel diepte
@@ -190,7 +307,6 @@ body {
in plaats van 3 en 24) zodat het samen niet zwaar wordt. */
[data-theme="light"] .card {
border: 1px solid var(--border);
box-shadow: 0 1px 2px rgba(0,0,0,0.06), 0 4px 16px rgba(0,0,0,0.05);
}
.card-head { display: flex; align-items: center; justify-content: space-between; gap: 1rem; margin-bottom: 1.1rem; }
@@ -375,7 +491,7 @@ body {
/* ── Logregels ──────────────────────────────────────────────────────────── */
.log {
background: var(--bg-raised);
border-radius: max(4px, calc(var(--radius-xl) - 1.8rem));
border-radius: max(4px, calc(var(--radius-lg) - 1.8rem));
padding: 0.9rem 1.1rem;
font-family: var(--font-mono);
font-size: 0.75rem;
+11 -1
View File
@@ -9,7 +9,7 @@ manifestVersion: 1
id: whatsnext-electrum-gate
category: bitcoin
name: Electrum Gate
version: "0.0.24"
version: "0.0.25"
tagline: Your own node from anywhere, without waiting for Tor
description: >-
The privacy win is already yours: you run the Electrum server. A public one gets asked for
@@ -56,6 +56,16 @@ description: >-
# staan. In 0.0.9 stond er daardoor drie keer "Earlier releases" en twee keer
# dezelfde 0.0.4-regel. De toets let er nu op.
releaseNotes: >-
A visual refresh, shared with the other apps in this store. The page now has a soft glow behind it in
the accent colour, and the cards are translucent with a light edge and a shadow, so they read as
panels sitting on the page instead of flat blocks painted on it. Card corners are a little tighter,
and every framed element now uses the same corner radius. Nothing about what the page reports has
changed.
Everything in 0.0.24, released the day before:
The menu has a new "About this app" item: what the app is for, what it asks of you, and what the
Status card does and does not prove. That last one was the reason for this release. The card used to
read "Answering" with "answered in 7 ms, from inside the app" underneath, which was unclear in both
+166 -41
View File
@@ -35,7 +35,7 @@
is.
═══════════════════════════════════════════════════════════════════════════════
-->
<html lang="en" data-theme="dark" data-accent="orange">
<html lang="en" data-theme="dark" data-accent="orange" data-depth="deep">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
@@ -54,43 +54,152 @@
}
[data-theme="dark"][data-accent="orange"] {
--bg: #080808;
--bg-elevated: #181818;
--bg-raised: #242424;
--border: rgba(255,255,255,0.18);
--border-mid: rgba(255,255,255,0.28);
--text-primary: #f2f2f2;
--text-sec: #a3a3a3;
--text-ter: #6a6a6a;
--accent: #FF6B00;
--accent-soft: rgba(255,107,0,0.16);
--accent-text: #FF8124;
--pos: #FF8124;
--pos-bg: rgba(255,107,0,0.18);
--neg: #ff5a5a;
--neg-bg: rgba(255,69,69,0.18);
--neutral-bg: rgba(255,255,255,0.08);
--scrollbar: #2c2c2c;
--bg: #080808; --bg-elevated: #181818; --bg-raised: #242424; --bg-overlay: #303030;
--border: rgba(255,255,255,0.18); --border-mid: rgba(255,255,255,0.28);
--text-primary: #f2f2f2; --text-sec: #a3a3a3; --text-ter: #6a6a6a;
--accent: #FF6B00; --accent-soft: rgba(255,107,0,0.16); --accent-mid: rgba(255,107,0,0.26);
--accent-glow: rgba(255,107,0,0.30); --accent-text: #FF8124;
--pos: #39FF8A; --pos-bg: rgba(57,255,138,0.16); --neg: #ff5a5a; --neg-bg: rgba(255,69,69,0.18);
--neutral-bg: rgba(255,255,255,0.08); --input-bg: #1c1c1c; --scrollbar: #2c2c2c;
}
[data-theme="light"][data-accent="orange"] {
--bg: #ffffff; --bg-elevated: #f7f7f7; --bg-raised: #f0f0f0; --bg-overlay: #e8e8e8;
--border: rgba(0,0,0,0.12); --border-mid: rgba(0,0,0,0.18);
--text-primary: #0a0a0a; --text-sec: #888888; --text-ter: #bbbbbb;
--accent: #E05500; --accent-soft: rgba(224,85,0,0.08); --accent-mid: rgba(224,85,0,0.16);
--accent-glow: rgba(224,85,0,0.22); --accent-text: #E05500;
--pos: #007a48; --pos-bg: rgba(0,149,90,0.08); --neg: #cc2222; --neg-bg: rgba(204,34,34,0.08);
--neutral-bg: rgba(0,0,0,0.04); --input-bg: #f5f5f5; --scrollbar: #ddd;
}
[data-theme="dark"][data-accent="blue"] {
--bg: #080808; --bg-elevated: #181818; --bg-raised: #242424; --bg-overlay: #303030;
--border: rgba(255,255,255,0.18); --border-mid: rgba(255,255,255,0.28);
--text-primary: #f2f2f2; --text-sec: #a3a3a3; --text-ter: #6a6a6a;
--accent: #3B82F6; --accent-soft: rgba(59,130,246,0.16); --accent-mid: rgba(59,130,246,0.26);
--accent-glow: rgba(59,130,246,0.30); --accent-text: #6AA1FF;
--pos: #39FF8A; --pos-bg: rgba(57,255,138,0.16); --neg: #ff5a5a; --neg-bg: rgba(255,69,69,0.18);
--neutral-bg: rgba(255,255,255,0.08); --input-bg: #1c1c1c; --scrollbar: #2c2c2c;
}
[data-theme="light"][data-accent="blue"] {
--bg: #ffffff; --bg-elevated: #f7f7f7; --bg-raised: #f0f0f0; --bg-overlay: #e8e8e8;
--border: rgba(0,0,0,0.12); --border-mid: rgba(0,0,0,0.18);
--text-primary: #0a0a0a; --text-sec: #888888; --text-ter: #bbbbbb;
--accent: #2563EB; --accent-soft: rgba(37,99,235,0.08); --accent-mid: rgba(37,99,235,0.16);
--accent-glow: rgba(37,99,235,0.22); --accent-text: #2563EB;
--pos: #007a48; --pos-bg: rgba(0,149,90,0.08); --neg: #cc2222; --neg-bg: rgba(204,34,34,0.08);
--neutral-bg: rgba(0,0,0,0.04); --input-bg: #f5f5f5; --scrollbar: #ddd;
}
[data-theme="dark"][data-accent="lila"] {
--bg: #080808; --bg-elevated: #181818; --bg-raised: #242424; --bg-overlay: #303030;
--border: rgba(255,255,255,0.18); --border-mid: rgba(255,255,255,0.28);
--text-primary: #f2f2f2; --text-sec: #a3a3a3; --text-ter: #6a6a6a;
--accent: #B388FF; --accent-soft: rgba(179,136,255,0.16); --accent-mid: rgba(179,136,255,0.26);
--accent-glow: rgba(179,136,255,0.30); --accent-text: #C7A6FF;
--pos: #39FF8A; --pos-bg: rgba(57,255,138,0.16); --neg: #ff5a5a; --neg-bg: rgba(255,69,69,0.18);
--neutral-bg: rgba(255,255,255,0.08); --input-bg: #1c1c1c; --scrollbar: #2c2c2c;
}
[data-theme="light"][data-accent="lila"] {
--bg: #ffffff; --bg-elevated: #f7f7f7; --bg-raised: #f0f0f0; --bg-overlay: #e8e8e8;
--border: rgba(0,0,0,0.12); --border-mid: rgba(0,0,0,0.18);
--text-primary: #0a0a0a; --text-sec: #888888; --text-ter: #bbbbbb;
--accent: #7C3AED; --accent-soft: rgba(124,58,237,0.08); --accent-mid: rgba(124,58,237,0.16);
--accent-glow: rgba(124,58,237,0.22); --accent-text: #7C3AED;
--pos: #007a48; --pos-bg: rgba(0,149,90,0.08); --neg: #cc2222; --neg-bg: rgba(204,34,34,0.08);
--neutral-bg: rgba(0,0,0,0.04); --input-bg: #f5f5f5; --scrollbar: #ddd;
}
[data-theme="dark"][data-accent="teal"] {
--bg: #080808; --bg-elevated: #181818; --bg-raised: #242424; --bg-overlay: #303030;
--border: rgba(255,255,255,0.18); --border-mid: rgba(255,255,255,0.28);
--text-primary: #f2f2f2; --text-sec: #a3a3a3; --text-ter: #6a6a6a;
--accent: #14B8A6; --accent-soft: rgba(20,184,166,0.16); --accent-mid: rgba(20,184,166,0.26);
--accent-glow: rgba(20,184,166,0.30); --accent-text: #2DD4BF;
--pos: #39FF8A; --pos-bg: rgba(57,255,138,0.16); --neg: #ff5a5a; --neg-bg: rgba(255,69,69,0.18);
--neutral-bg: rgba(255,255,255,0.08); --input-bg: #1c1c1c; --scrollbar: #2c2c2c;
}
[data-theme="light"][data-accent="teal"] {
--bg: #ffffff; --bg-elevated: #f7f7f7; --bg-raised: #f0f0f0; --bg-overlay: #e8e8e8;
--border: rgba(0,0,0,0.12); --border-mid: rgba(0,0,0,0.18);
--text-primary: #0a0a0a; --text-sec: #888888; --text-ter: #bbbbbb;
--accent: #0D9488; --accent-soft: rgba(13,148,136,0.08); --accent-mid: rgba(13,148,136,0.16);
--accent-glow: rgba(13,148,136,0.22); --accent-text: #0D9488;
--pos: #007a48; --pos-bg: rgba(0,149,90,0.08); --neg: #cc2222; --neg-bg: rgba(204,34,34,0.08);
--neutral-bg: rgba(0,0,0,0.04); --input-bg: #f5f5f5; --scrollbar: #ddd;
}
[data-theme="dark"][data-accent="magenta"] {
--bg: #080808; --bg-elevated: #181818; --bg-raised: #242424; --bg-overlay: #303030;
--border: rgba(255,255,255,0.18); --border-mid: rgba(255,255,255,0.28);
--text-primary: #f2f2f2; --text-sec: #a3a3a3; --text-ter: #6a6a6a;
--accent: #E24DAE; --accent-soft: rgba(226,77,174,0.16); --accent-mid: rgba(226,77,174,0.26);
--accent-glow: rgba(226,77,174,0.30); --accent-text: #F072C4;
--pos: #39FF8A; --pos-bg: rgba(57,255,138,0.16); --neg: #ff5a5a; --neg-bg: rgba(255,69,69,0.18);
--neutral-bg: rgba(255,255,255,0.08); --input-bg: #1c1c1c; --scrollbar: #2c2c2c;
}
[data-theme="light"][data-accent="magenta"] {
--bg: #ffffff; --bg-elevated: #f7f7f7; --bg-raised: #f0f0f0; --bg-overlay: #e8e8e8;
--border: rgba(0,0,0,0.12); --border-mid: rgba(0,0,0,0.18);
--text-primary: #0a0a0a; --text-sec: #888888; --text-ter: #bbbbbb;
--accent: #BE2A86; --accent-soft: rgba(190,42,134,0.08); --accent-mid: rgba(190,42,134,0.16);
--accent-glow: rgba(190,42,134,0.22); --accent-text: #BE2A86;
--pos: #007a48; --pos-bg: rgba(0,149,90,0.08); --neg: #cc2222; --neg-bg: rgba(204,34,34,0.08);
--neutral-bg: rgba(0,0,0,0.04); --input-bg: #f5f5f5; --scrollbar: #ddd;
}
[data-theme="light"][data-accent="orange"] {
--bg: #ffffff;
--bg-elevated: #f7f7f7;
--bg-raised: #f0f0f0;
--border: rgba(0,0,0,0.12);
--border-mid: rgba(0,0,0,0.18);
--text-primary: #0a0a0a;
--text-sec: #888888;
--text-ter: #bbbbbb;
--accent: #E05500;
--accent-soft: rgba(224,85,0,0.08);
--accent-text: #E05500;
--pos: #D04800;
--pos-bg: rgba(224,85,0,0.08);
--neg: #cc2222;
--neg-bg: rgba(204,34,34,0.08);
--neutral-bg: rgba(0,0,0,0.04);
--scrollbar: #ddd;
/* -- Diepte ------------------------------------------------------------------
Overgenomen uit HomeGit/Docs/website-design-system.html (31-08-2026). In
AssetApp is dit een instelling; hier staat hij vast aan, want dit is een
statuspagina met dark/light en verder geen knoppen, en een schuif erbij zou
meer bediening zijn dan de pagina zelf.
Het werkt omdat er iets ACHTER de vlakken komt te staan: een accentgloed uit
de linkerbovenhoek. Een backdrop-filter op een egale ondergrond levert per
definitie niets op, dus de gloed is het eerste deel en het glas het tweede. */
:root {
--surface: var(--bg-elevated);
--surface-inset: var(--bg-raised);
--surface-blur: 16px;
--surface-sat: 135%;
--edge: none;
--ambient: none;
--shadow-1: 0 1px 2px rgba(0,0,0,0.06), 0 4px 16px rgba(0,0,0,0.05);
}
[data-theme="dark"] {
--surface: color-mix(in srgb, #1c1c1c 78%, transparent);
--surface-inset: color-mix(in srgb, #262626 76%, transparent);
--edge: linear-gradient(180deg, rgba(255,255,255,0.10), rgba(255,255,255,0) 42%);
--shadow-1: 0 1px 2px rgba(0,0,0,0.35), 0 10px 30px -18px rgba(0,0,0,0.9);
}
[data-theme="light"] {
--surface: color-mix(in srgb, #ffffff 72%, transparent);
--surface-inset: color-mix(in srgb, #f2f2f2 74%, transparent);
--edge: linear-gradient(180deg, rgba(255,255,255,0.85), rgba(255,255,255,0) 46%);
}
[data-depth="deep"] {
--ambient: radial-gradient(58rem 34rem at 8% -8%, var(--accent-glow), transparent 62%),
radial-gradient(46rem 30rem at 102% 4%, color-mix(in srgb, var(--accent) 14%, transparent), transparent 66%);
}
/* De twee toegankelijkheidswensen horen NIET in een gedeelde media-query, en dat
is een les die een ronde kostte: Windows heeft een schakelaar "Animatie-
effecten" die bij veel mensen uit staat, en die zet prefers-reduced-motion op
reduce. Samen in een query deed de hele stand dan niets. Ze zeggen ook echt
iets anders: de ene gaat over doorschijnende vlakken, de andere over
beweging. */
@media (prefers-reduced-transparency: reduce) {
:root {
--surface: var(--bg-elevated); --surface-inset: var(--bg-raised);
--surface-blur: 0px; --surface-sat: 100%;
}
}
@media (prefers-reduced-motion: reduce) {
body::before, .card { transition: none; }
}
/* De gloed ligt achter alles en vangt geen klikken. z-index 0 hier en 1 op .wrap:
zonder stapelcontext kan een fixed pseudo-element van body over de inhoud heen
komen te liggen. */
body::before {
content: ''; position: fixed; inset: 0; z-index: 0; pointer-events: none;
background: var(--ambient); transition: background 0.3s;
}
* { margin: 0; padding: 0; box-sizing: border-box; }
@@ -105,7 +214,7 @@ body {
/* Dezelfde maat als Electrum Gate. Breed, maar niet oneindig: op een ultrawide
monitor zou een kader van 2500px regels opleveren die niemand leest. */
.wrap { max-width: 1760px; margin: 0 auto; }
.wrap { position: relative; z-index: 1; max-width: 1760px; margin: 0 auto; }
/* ── Het raster ─────────────────────────────────────────────────────────────
Twaalf kolommen, en de kaders vullen ze in de volgorde waarin ze in de HTML
@@ -164,19 +273,35 @@ body {
/* ── Kaarten ────────────────────────────────────────────────────────────── */
.card {
background: var(--bg-elevated);
--radius: var(--radius-xl);
position: relative;
background: var(--surface);
/* --radius-lg en niet --radius-xl (31-08-2026): elk buitenste kader heeft
dezelfde hoek, want ze staan in beeld naast en om elkaar heen en twee radii
lezen dan als een fout. Het logkader leidt zijn hoek hiervan af. */
--radius: var(--radius-lg);
--padding: 1.8rem;
border-radius: var(--radius);
padding: var(--padding);
margin-bottom: 1rem;
box-shadow: var(--shadow-1);
backdrop-filter: blur(var(--surface-blur)) saturate(var(--surface-sat));
-webkit-backdrop-filter: blur(var(--surface-blur)) saturate(var(--surface-sat));
transition: background 0.25s, box-shadow 0.25s;
}
/* Het randlicht: een verloop van licht naar niets over de bovenste 40 procent.
Dit is het verschil tussen doorzichtig en glas; zonder deze laag ziet een
halftransparante kaart er alleen bleek uit. De inhoud moet erbovenop blijven,
anders ligt er een waas over de tekst in plaats van erachter. */
.card::before {
content: ''; position: absolute; inset: 0; border-radius: inherit;
background: var(--edge); pointer-events: none;
}
.card > * { position: relative; }
[data-theme="dark"] .card { border: 1px solid var(--border); }
/* Rand én schaduw in het lichte thema: een zachte schaduw op wit geeft wel diepte
maar geen begrenzing. Dezelfde waarden als Electrum Gate. */
[data-theme="light"] .card {
border: 1px solid var(--border);
box-shadow: 0 1px 2px rgba(0,0,0,0.06), 0 4px 16px rgba(0,0,0,0.05);
}
.card-head {
display: flex; align-items: center; justify-content: space-between;
@@ -247,7 +372,7 @@ body {
font-size: 0.9rem;
background: var(--bg-raised);
border: 1px solid var(--border);
border-radius: max(4px, calc(var(--radius-xl) - 1.8rem));
border-radius: max(4px, calc(var(--radius-lg) - 1.8rem));
padding: 0.9rem 1.1rem;
overflow-wrap: anywhere;
color: var(--accent);
+11 -1
View File
@@ -11,7 +11,7 @@ manifestVersion: 1
id: whatsnext-evolu-relay
category: files
name: Evolu Relay
version: "0.5.1"
version: "0.5.2"
tagline: Encrypted sync and backup for your local-first apps
description: >-
Local-first apps keep your data on your own device and work whether or not you have a
@@ -43,6 +43,16 @@ description: >-
your app at the address shown there. Away from home you will need a way in, such as Tailscale
or a reverse proxy with your own domain.
releaseNotes: >-
A visual refresh, shared with the other apps in this store. The page now has a soft glow behind it in
the accent colour, and the cards are translucent with a light edge and a shadow, so they read as
panels sitting on the page instead of flat blocks painted on it. Card corners are a little tighter,
and every framed element now uses the same corner radius. Nothing about what the relay does has
changed.
Everything in 0.5.1:
Fixes a message at the top of the page that never went away. Confirming that a command was sent is worth
saying for a second or two, but it stayed until you reloaded the page, so it was still there long after it
stopped being true. It now clears itself as soon as the relay has picked the command up. A refusal is the