diff --git a/CHANGELOG.md b/CHANGELOG.md
index 9d17b06..ee3755b 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -10,6 +10,11 @@ Versioning follows [SemVer](https://semver.org/): **MAJOR.MINOR.PATCH**
---
+## [1.35.1] — 2026-06-10
+
+### Fixed
+- **Modo demo não oferece mais "Trocar senha" e "Verificação em duas etapas".** O backend já bloqueava ambas (`@demo_blocked`), mas o menu do usuário ainda exibia os links — que viravam beco sem saída (clique → aviso → volta). No `DEMO_MODE` o menu agora mostra apenas o nome do usuário, sem ações de conta.
+
## [1.35.0] — 2026-06-10
### Added
diff --git a/VERSION b/VERSION
index 2aeaa11..7eee785 100644
--- a/VERSION
+++ b/VERSION
@@ -1 +1 @@
-1.35.0
+1.35.1
diff --git a/templates/base.html b/templates/base.html
index 92700cc..0399515 100644
--- a/templates/base.html
+++ b/templates/base.html
@@ -144,6 +144,13 @@
+ {% if demo_mode %}
+ {# No modo demo as ações de conta (trocar senha / 2FA) são bloqueadas no backend;
+ não oferecemos os links para não virarem beco sem saída. Só o nome do usuário. #}
+
+ {{ session.username }}
+
+ {% else %}
+ {% endif %}
diff --git a/tests/test_demo_account.py b/tests/test_demo_account.py
new file mode 100644
index 0000000..3df5d2b
--- /dev/null
+++ b/tests/test_demo_account.py
@@ -0,0 +1,39 @@
+"""Modo demo: ações de conta bloqueadas e não oferecidas na UI.
+
+No DEMO_MODE o admin não pode trocar a senha nem ativar 2FA — o backend bloqueia
+(@demo_blocked) e o menu do usuário não mostra esses links (viram beco sem saída).
+"""
+from werkzeug.security import check_password_hash
+
+
+def test_demo_mode_blocks_password_change_get(auth_client, app_module, monkeypatch):
+ monkeypatch.setattr(app_module, "DEMO_MODE", True)
+ resp = auth_client.get("/account/password")
+ assert resp.status_code == 302 # demo_blocked redireciona
+
+
+def test_demo_mode_blocks_password_change_post(auth_client, app_module, db, monkeypatch):
+ monkeypatch.setattr(app_module, "DEMO_MODE", True)
+ before = db.get_user_by_username("admin")["password_hash"]
+ resp = auth_client.post("/account/password", data={
+ "current_password": "admin-test-pass",
+ "new_password": "nova-senha-123",
+ "confirm_password": "nova-senha-123",
+ })
+ assert resp.status_code == 302 # bloqueado, não processa
+ after = db.get_user_by_username("admin")["password_hash"]
+ assert after == before # senha intacta
+ assert not check_password_hash(after, "nova-senha-123")
+
+
+def test_demo_mode_hides_account_menu_links(auth_client, app_module, monkeypatch):
+ monkeypatch.setattr(app_module, "DEMO_MODE", True)
+ html = auth_client.get("/").get_data(as_text=True)
+ assert "/account/password" not in html
+ assert "/account/2fa" not in html
+
+
+def test_non_demo_shows_account_menu_links(auth_client):
+ html = auth_client.get("/").get_data(as_text=True)
+ assert "/account/password" in html
+ assert "/account/2fa" in html