SignsOfAI.Desktop.exe: on the warning, More info → Run anyway.",
"dl.zip.body": "There is no installer. It is a .zip you extract wherever you like — keep the folder together, because the app reads files next to the executable. To uninstall it, delete the folder.",
+ "update.ask": "Check for new versions?",
+ "update.ask.detail": "This app does not update itself. A check asks GitHub which build is newest — no text, no account and no identifier are sent, and nothing is ever downloaded for you. You can change this later on the Windows app page.",
+ "update.yes": "Yes, check",
+ "update.no": "No",
+ "update.available": "Version {0} is published",
+ "update.available.detail": "You are running {0}. Nothing here updates itself — read what changed and decide.",
+ "update.see": "What changed",
+ "update.dismiss": "Not now",
+ "dl.updates.label": "Tell me when a new version is published",
+ "dl.updates.detail": "At most one check a day. No text, no account, no identifier — and nothing is downloaded for you.",
"footer.runtime.browser": "built with .NET 10 and Blazor WebAssembly · runs 100% in your browser",
"footer.runtime.desktop": "built with .NET 10, Blazor and WebView2 · runs on this machine",
"nav.catalog": "Catalog",
diff --git a/src/SignsOfAI.UI/wwwroot/i18n/es.json b/src/SignsOfAI.UI/wwwroot/i18n/es.json
index 55b7702..5bdbda0 100644
--- a/src/SignsOfAI.UI/wwwroot/i18n/es.json
+++ b/src/SignsOfAI.UI/wwwroot/i18n/es.json
@@ -63,6 +63,16 @@
"dl.warn.step2": "Compara su SHA-256 con el que está impreso en las notas de la versión — en PowerShell, Get-FileHash.",
"dl.warn.step3": "Solo entonces descomprímelo y ejecuta SignsOfAI.Desktop.exe: en el aviso, Más información → Ejecutar de todas formas.",
"dl.zip.body": "No hay instalador. Es un .zip que descomprimes donde quieras — mantén la carpeta junta, porque la app lee archivos que están al lado del ejecutable. Para desinstalarla, borra la carpeta.",
+ "update.ask": "¿Compruebo si hay versiones nuevas?",
+ "update.ask.detail": "Esta app no se actualiza sola. La comprobación le pregunta a GitHub cuál es la compilación más reciente — no se envía texto, ni cuenta, ni identificador, y nunca se descarga nada por ti. Puedes cambiarlo después en la página de la app de Windows.",
+ "update.yes": "Sí, comprueba",
+ "update.no": "No",
+ "update.available": "Está publicada la versión {0}",
+ "update.available.detail": "Estás usando la {0}. Aquí nada se actualiza solo — lee qué cambió y decide.",
+ "update.see": "Qué cambió",
+ "update.dismiss": "Ahora no",
+ "dl.updates.label": "Avísame cuando se publique una versión nueva",
+ "dl.updates.detail": "Como mucho una comprobación al día. Sin texto, sin cuenta, sin identificador — y no se descarga nada por ti.",
"footer.runtime.browser": "hecho con .NET 10 y Blazor WebAssembly · funciona 100% en tu navegador",
"footer.runtime.desktop": "hecho con .NET 10, Blazor y WebView2 · funciona en esta máquina",
"nav.catalog": "Catálogo",
diff --git a/tests/SignsOfAI.Desktop.Tests/UpdateCheckTests.cs b/tests/SignsOfAI.Desktop.Tests/UpdateCheckTests.cs
new file mode 100644
index 0000000..d788ae9
--- /dev/null
+++ b/tests/SignsOfAI.Desktop.Tests/UpdateCheckTests.cs
@@ -0,0 +1,91 @@
+using System.Linq;
+using SignsOfAI.UI.Services;
+
+namespace SignsOfAI.Desktop.Tests;
+
+///