iobroker.eos-admin 7.9.87-rc.4 → 7.9.89
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/INSTALL_TEST_V7.9.89.md +73 -0
- package/NEXOWATT_EOS_BUILD_INFO.json +26 -26
- package/PUBLISH_STABLE_V7.9.89.md +33 -0
- package/README.md +13 -2
- package/README_STABILITY_V7.9.89.md +26 -0
- package/RELEASE_ACCEPTANCE_V7.9.89.md +40 -0
- package/adminWww/css/nexowatt-native-shell.css +332 -2
- package/adminWww/index.html +11 -11
- package/adminWww/js/eos-account-management.js +43 -25
- package/adminWww/js/eos-assistant.js +42 -22
- package/adminWww/js/eos-basic-settings.js +1 -1
- package/adminWww/js/eos-branding-sanitizer.js +1 -1
- package/adminWww/js/eos-native-security.js +1 -1
- package/adminWww/js/eos-policy-client.js +1 -1
- package/adminWww/js/eos-role-bootstrap.js +166 -87
- package/adminWww/js/eos-role-ui.js +147 -57
- package/adminWww/js/nexowatt-native-shell.js +30 -2
- package/build/lib/web.js +13 -0
- package/build/main.js +55 -1
- package/io-package.json +24 -7
- package/package.json +12 -11
- package/tools/nexowatt-account-management-selftest.cjs +16 -22
- package/tools/nexowatt-internal-reserve-selftest.cjs +54 -0
- package/tools/nexowatt-modern-ui-selftest.cjs +19 -10
- package/tools/nexowatt-validate-package.cjs +18 -6
- package/INSTALL_TEST_V7.9.87_RC4.md +0 -98
- package/PUBLISH_RC_V7.9.87_RC4.md +0 -59
- package/README_STABILITY_V7.9.87_RC4.md +0 -100
- package/RELEASE_ACCEPTANCE_V7.9.87_RC4.md +0 -123
|
@@ -0,0 +1,73 @@
|
|
|
1
|
+
# Installation und Abnahme – NexoWatt EOS Admin 7.9.89
|
|
2
|
+
|
|
3
|
+
## Installation aus npm
|
|
4
|
+
|
|
5
|
+
```bash
|
|
6
|
+
cd /opt/iobroker
|
|
7
|
+
iobroker backup
|
|
8
|
+
iobroker stop eos-admin.0
|
|
9
|
+
npm install --no-save --omit=dev iobroker.eos-admin@7.9.89
|
|
10
|
+
iobroker upload eos-admin
|
|
11
|
+
iobroker restart eos-admin.0
|
|
12
|
+
```
|
|
13
|
+
|
|
14
|
+
## Portbelegung
|
|
15
|
+
|
|
16
|
+
```bash
|
|
17
|
+
iobroker set admin.0 --port 18081 --ip 127.0.0.1 --enabled false
|
|
18
|
+
iobroker set eos-admin.0 --port 8081 --ip 0.0.0.0 --enabled true
|
|
19
|
+
iobroker restart eos-admin.0
|
|
20
|
+
```
|
|
21
|
+
|
|
22
|
+
Aufruf:
|
|
23
|
+
|
|
24
|
+
```text
|
|
25
|
+
http://SYSTEM-IP:8081
|
|
26
|
+
```
|
|
27
|
+
|
|
28
|
+
## Pflichtabnahme
|
|
29
|
+
|
|
30
|
+
### Admin / Service
|
|
31
|
+
|
|
32
|
+
- Anmeldung mit dem fest eingerichteten Passwort.
|
|
33
|
+
- Kein erzwungener Erstkennwortdialog.
|
|
34
|
+
- Expertenmodus verfügbar.
|
|
35
|
+
- Interner Admin und System-Notfallsicherung sichtbar.
|
|
36
|
+
- Vollständige Zugangs- und Rechteverwaltung.
|
|
37
|
+
|
|
38
|
+
### Installateur
|
|
39
|
+
|
|
40
|
+
- Erste Aktivierung: Ebene **Installateur**, Benutzer `installer`, Passwort leer, danach persönliches Passwort setzen.
|
|
41
|
+
- Kein Expertenmodus.
|
|
42
|
+
- Inbetriebnahme, Module, Dienste, Datenpunkte und Diagnose erreichbar.
|
|
43
|
+
- **Zugänge & Rechte** erreichbar; nur Endkunden-Reset möglich.
|
|
44
|
+
- Interner Admin und interne BackItUp-Notfallreserve nicht sichtbar.
|
|
45
|
+
- NexoWatt Sicherung nutzbar, sofern installiert und freigegeben.
|
|
46
|
+
|
|
47
|
+
### Gast / Endkunde
|
|
48
|
+
|
|
49
|
+
- Erste Aktivierung: Ebene **Gast / Endkunde**, Benutzer `guest`, Passwort leer, danach persönliches Passwort setzen.
|
|
50
|
+
- Kein Expertenmodus.
|
|
51
|
+
- Freigegebenes Smart Home, Räume, Funktionen und Bedienoberflächen erreichbar.
|
|
52
|
+
- Keine technischen System-, Repository-, Zertifikats- oder Rohdiagnosebereiche.
|
|
53
|
+
- Interner Admin und interne BackItUp-Notfallreserve nicht sichtbar.
|
|
54
|
+
- NexoWatt Sicherung nutzbar, sofern freigegeben.
|
|
55
|
+
|
|
56
|
+
### Bedienoberfläche
|
|
57
|
+
|
|
58
|
+
- EOS Assist sitzt im Kopfbereich und überlappt keine Inhalte.
|
|
59
|
+
- Zugangsverwaltung erscheint nur unter **Zugänge & Rechte**.
|
|
60
|
+
- Startseite ist **Übersicht**, nicht Easy.
|
|
61
|
+
- Keine `permissionError`-Leerseite.
|
|
62
|
+
- Dialoge, Popups und Schließen-Schaltflächen funktionieren.
|
|
63
|
+
- Schreibbare Datenpunkte sind entsprechend Rolle bedienbar.
|
|
64
|
+
|
|
65
|
+
## Rückfall auf 7.9.86
|
|
66
|
+
|
|
67
|
+
```bash
|
|
68
|
+
cd /opt/iobroker
|
|
69
|
+
iobroker stop eos-admin.0
|
|
70
|
+
npm install --no-save --omit=dev iobroker.eos-admin@7.9.86
|
|
71
|
+
iobroker upload eos-admin
|
|
72
|
+
iobroker restart eos-admin.0
|
|
73
|
+
```
|
|
@@ -1,33 +1,33 @@
|
|
|
1
1
|
{
|
|
2
|
-
"version": "7.9.
|
|
3
|
-
"channel": "
|
|
4
|
-
"baseFrontend": "validated
|
|
2
|
+
"version": "7.9.89",
|
|
3
|
+
"channel": "stable-latest",
|
|
4
|
+
"baseFrontend": "validated Admin 7 runtime with NexoWatt EOS role, login, overview and service-reserve hardening",
|
|
5
5
|
"runtimeEntry": "v84",
|
|
6
|
-
"releaseType": "
|
|
7
|
-
"release": "
|
|
8
|
-
"label": "
|
|
6
|
+
"releaseType": "stable-sales-product-role-login-overview-reserve-visibility",
|
|
7
|
+
"release": "stable-sales-product-role-login-overview-reserve-visibility",
|
|
8
|
+
"label": "v89",
|
|
9
9
|
"notes": [
|
|
10
|
-
"
|
|
11
|
-
"Installer and Guest/End User
|
|
12
|
-
"
|
|
13
|
-
"
|
|
14
|
-
"
|
|
15
|
-
"The
|
|
16
|
-
"
|
|
17
|
-
"EOS Admin remains on default port 8081; the internal legacy admin remains protected on 127.0.0.1:18081."
|
|
10
|
+
"7.9.89 is the accepted stable sales-product release and is intended for npm dist-tag latest.",
|
|
11
|
+
"Installer and Guest/End User perform their one-time passwordless activation inside the normal login card, then must create a personal password.",
|
|
12
|
+
"Admin/Service retains the configured password and is excluded from passwordless activation and role reset.",
|
|
13
|
+
"EOS Assist is integrated into the header and account management exists only under Zugänge & Rechte.",
|
|
14
|
+
"The current tab-intro overview is modernized; the Easy overview is not used.",
|
|
15
|
+
"The internal admin and BackItUp emergency reserve are restricted to Admin/Service; NexoWatt Backup remains available to approved roles.",
|
|
16
|
+
"EOS Admin defaults to port 8081; the internal legacy admin remains protected on 127.0.0.1:18081."
|
|
18
17
|
],
|
|
19
18
|
"changes": [
|
|
20
|
-
"
|
|
21
|
-
"
|
|
22
|
-
"
|
|
23
|
-
"
|
|
24
|
-
"
|
|
25
|
-
"
|
|
26
|
-
"
|
|
19
|
+
"Integrates role selection into the normal login card and removes the separate passwordless-first-login panel.",
|
|
20
|
+
"Moves EOS Assist into the top header and removes overlapping floating launchers.",
|
|
21
|
+
"Keeps account and password reset functions exclusively under Zugänge & Rechte.",
|
|
22
|
+
"Modernizes the current overview for Admin, Installer and Guest/End User without using Easy mode.",
|
|
23
|
+
"Restricts exact official admin and backitup adapter/instance visibility and control to Admin/Service at UI, socket and object ACL layers.",
|
|
24
|
+
"Keeps NexoWatt Backup visible and usable for approved installer and end-user roles.",
|
|
25
|
+
"Retains Admin/Service-only expert mode, service settings and security administration.",
|
|
26
|
+
"Publishes the final stable package through npm latest with exact version and package validation."
|
|
27
27
|
],
|
|
28
|
-
"brandingCacheVersion":
|
|
29
|
-
"shellCacheVersion":
|
|
30
|
-
"nativeShellVersion":
|
|
31
|
-
"shellCacheTag": "
|
|
32
|
-
"repositoryEntry": "nexowatt-eos-admin-repository-entry-
|
|
28
|
+
"brandingCacheVersion": 89,
|
|
29
|
+
"shellCacheVersion": 89,
|
|
30
|
+
"nativeShellVersion": 89,
|
|
31
|
+
"shellCacheTag": "89",
|
|
32
|
+
"repositoryEntry": "nexowatt-eos-admin-repository-entry-v89.json"
|
|
33
33
|
}
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
# npm-Veröffentlichung – NexoWatt EOS Admin 7.9.89 Stable
|
|
2
|
+
|
|
3
|
+
## Vorprüfung
|
|
4
|
+
|
|
5
|
+
```powershell
|
|
6
|
+
npm run check:eos-publish-channel
|
|
7
|
+
npm run check:eos-package
|
|
8
|
+
npm run check:eos-stability
|
|
9
|
+
npm publish --dry-run --tag latest
|
|
10
|
+
```
|
|
11
|
+
|
|
12
|
+
## Veröffentlichung
|
|
13
|
+
|
|
14
|
+
```powershell
|
|
15
|
+
npm login
|
|
16
|
+
npm whoami
|
|
17
|
+
npm publish --tag latest
|
|
18
|
+
```
|
|
19
|
+
|
|
20
|
+
## Kontrolle
|
|
21
|
+
|
|
22
|
+
```powershell
|
|
23
|
+
npm view iobroker.eos-admin@latest version
|
|
24
|
+
npm dist-tag ls iobroker.eos-admin
|
|
25
|
+
```
|
|
26
|
+
|
|
27
|
+
Erwartet:
|
|
28
|
+
|
|
29
|
+
```text
|
|
30
|
+
latest: 7.9.89
|
|
31
|
+
```
|
|
32
|
+
|
|
33
|
+
Bereits veröffentlichte Paketversionen dürfen nicht mit verändertem Inhalt erneut veröffentlicht werden. Jede spätere Änderung benötigt eine höhere Versionsnummer.
|
package/README.md
CHANGED
|
@@ -13,6 +13,12 @@ Standard-Port: 8081
|
|
|
13
13
|
|
|
14
14
|
Damit überschreibt der Adapter den offiziellen `admin`-Adapter nicht mehr. Die alte ioBroker-Admin-Oberfläche kann parallel vorhanden bleiben, während NexoWatt-Systeme über `eos-admin.0` die EOS-Oberfläche nutzen.
|
|
15
15
|
|
|
16
|
+
## Aktuelle Stable 7.9.89
|
|
17
|
+
|
|
18
|
+
Die Verkaufsversion 7.9.89 verwendet die aktuelle **Übersicht** als Startseite, integriert EOS Assist in den Header und führt Zugangsverwaltung ausschließlich unter **Zugänge & Rechte**. Installer und Guest aktivieren ihr Konto beim ersten Login im normalen Anmeldeformular einmalig ohne Startpasswort und vergeben anschließend ein persönliches Passwort. Admin / Service bleibt unverändert.
|
|
19
|
+
|
|
20
|
+
Der interne Admin und die interne BackItUp-Notfallreserve bleiben installiert, sind aber ausschließlich für Admin / Service sichtbar. Für den regulären Betrieb wird die NexoWatt Sicherung verwendet.
|
|
21
|
+
|
|
16
22
|
## Installation über das NexoWatt Repository
|
|
17
23
|
|
|
18
24
|
Im NexoWatt Repository muss der Adapter unter dem Key `eos-admin` stehen. Da das npm-Paket unscoped `iobroker.eos-admin` heißt, ist kein `packetName` nötig.
|
|
@@ -23,7 +29,7 @@ Minimaler Repository-Eintrag:
|
|
|
23
29
|
{
|
|
24
30
|
"eos-admin": {
|
|
25
31
|
"name": "eos-admin",
|
|
26
|
-
"version": "7.9.
|
|
32
|
+
"version": "7.9.89",
|
|
27
33
|
"title": "NexoWatt EOS Admin",
|
|
28
34
|
"desc": {
|
|
29
35
|
"de": "NexoWatt EOS Administrationsoberfläche als eigenständiger Adapter.",
|
|
@@ -81,7 +87,7 @@ Danach läuft NexoWatt EOS Admin unter:
|
|
|
81
87
|
http://DEINE-IP:8081
|
|
82
88
|
```
|
|
83
89
|
|
|
84
|
-
Den
|
|
90
|
+
Den internen `admin`-Adapter nicht löschen. Er bleibt deaktiviert auf `127.0.0.1:18081` als geschützte Service-Reserve erhalten.
|
|
85
91
|
|
|
86
92
|
|
|
87
93
|
## EOS Rollen- und Löschschutz
|
|
@@ -97,7 +103,12 @@ Standardmäßig geschützt:
|
|
|
97
103
|
|
|
98
104
|
```text
|
|
99
105
|
eos-admin
|
|
106
|
+
admin
|
|
100
107
|
backitup
|
|
108
|
+
nexowatt-backup
|
|
109
|
+
eos-backup
|
|
110
|
+
nexowatt-devices
|
|
111
|
+
nexowatt-ui
|
|
101
112
|
```
|
|
102
113
|
|
|
103
114
|
Administratoren können weitere Adapter in der Tabelle `Protected adapters` ergänzen. Die sichtbaren Admin-Gruppen werden über `EOS admin groups` definiert, standardmäßig `administrator`.
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
# NexoWatt EOS Admin 7.9.89 – Stable
|
|
2
|
+
|
|
3
|
+
Version 7.9.89 ist die freigegebene Produktlinie für NexoWatt-EOS-Verkaufssysteme auf Basis der bewährten Admin-7-Laufzeit.
|
|
4
|
+
|
|
5
|
+
## Produktfunktionen
|
|
6
|
+
|
|
7
|
+
- Rollenmodell **Admin / Service**, **Installateur** und **Gast / Endkunde**.
|
|
8
|
+
- Expertenmodus ausschließlich für Admin / Service.
|
|
9
|
+
- Installateurzugriff für Inbetriebnahme, Konfiguration und Fehlersuche.
|
|
10
|
+
- Endkundenzugriff für freigegebenes Smart Home, Räume, Funktionen und NexoWatt-Bedienbereiche.
|
|
11
|
+
- Erstanmeldung von `installer` und `guest` direkt in der normalen Anmeldekarte: Benutzerstufe wählen, Passwort einmalig leer lassen und anschließend zwingend ein persönliches Passwort vergeben.
|
|
12
|
+
- Passwort-Reset: Admin / Service darf Installateur und Endkunde zurücksetzen; Installateur ausschließlich Endkunde.
|
|
13
|
+
- EOS Assist im Kopfbereich ohne Überlagerung der Inhaltsfläche.
|
|
14
|
+
- Zugangsverwaltung ausschließlich unter **Zugänge & Rechte**.
|
|
15
|
+
- Moderne aktuelle **Übersicht**; die Easy-Übersicht wird nicht als Produktstartseite verwendet.
|
|
16
|
+
- Interner System-Admin und interne BackItUp-Notfallreserve nur für Admin / Service sichtbar.
|
|
17
|
+
- NexoWatt Sicherung für die dafür freigegebenen Rollen nutzbar.
|
|
18
|
+
- Standardport 8081; interne Admin-Reserve auf 127.0.0.1:18081.
|
|
19
|
+
|
|
20
|
+
## Sicherheitsprinzip
|
|
21
|
+
|
|
22
|
+
Ausgeblendete Bedienelemente sind nicht die einzige Schutzschicht. Kritische Aktionen werden zusätzlich über Rollenprüfung, Socket-Guard und Objekt-ACLs abgesichert. Fehlende oder unbekannte Rollen fallen auf die geringsten Endkundenrechte zurück.
|
|
23
|
+
|
|
24
|
+
## Rückfallstand
|
|
25
|
+
|
|
26
|
+
Die vorherige Stable 7.9.86 bleibt als dokumentierter Rückfallstand erhalten. Vor einem Produktupdate ist ein vollständiges Backup vorgeschrieben.
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
# Release-Abnahme – NexoWatt EOS Admin 7.9.89
|
|
2
|
+
|
|
3
|
+
## Automatische Prüfgates
|
|
4
|
+
|
|
5
|
+
- [ ] Versionsgleichheit in package.json, Lockdateien, io-package.json, Frontend und Build-Info
|
|
6
|
+
- [ ] npm-Kanal `latest`
|
|
7
|
+
- [ ] Paketvalidierung
|
|
8
|
+
- [ ] Syntax- und Importintegrität
|
|
9
|
+
- [ ] Frontend-Abhängigkeitsgraph
|
|
10
|
+
- [ ] Rollen- und Rechteprüfung
|
|
11
|
+
- [ ] integrierte Erstanmeldung
|
|
12
|
+
- [ ] Passwort-Reset-Hierarchie
|
|
13
|
+
- [ ] Expertenmodus-Sperre
|
|
14
|
+
- [ ] interne Admin-/BackItUp-Reserve
|
|
15
|
+
- [ ] NexoWatt-Sicherung für freigegebene Rollen
|
|
16
|
+
- [ ] moderne Übersicht und Header-EOS-Assist
|
|
17
|
+
- [ ] Zugangsverwaltung nur unter Zugänge & Rechte
|
|
18
|
+
- [ ] Popup-, Datenpunkt- und Updateprüfung
|
|
19
|
+
- [ ] Standardport 8081
|
|
20
|
+
- [ ] npm pack und npm publish --dry-run
|
|
21
|
+
|
|
22
|
+
## Reale Systemabnahme
|
|
23
|
+
|
|
24
|
+
- [ ] Neuinstallation auf dem Produktcontroller
|
|
25
|
+
- [ ] Update von 7.9.86
|
|
26
|
+
- [ ] Admin-/Service-Anmeldung
|
|
27
|
+
- [ ] Installateur-Erstanmeldung ohne Startpasswort
|
|
28
|
+
- [ ] Guest-Erstanmeldung ohne Startpasswort
|
|
29
|
+
- [ ] Admin setzt Installateur zurück
|
|
30
|
+
- [ ] Admin setzt Guest zurück
|
|
31
|
+
- [ ] Installateur setzt Guest zurück
|
|
32
|
+
- [ ] Installateur kann weder sich selbst noch Admin zurücksetzen
|
|
33
|
+
- [ ] Guest kann keine Zugänge zurücksetzen
|
|
34
|
+
- [ ] Neustart des Controllers
|
|
35
|
+
- [ ] Anmeldung nach Neustart
|
|
36
|
+
- [ ] NexoWatt Sicherung erstellen und Rücklesetest
|
|
37
|
+
- [ ] interne Notfallreserve nur als Admin sichtbar
|
|
38
|
+
- [ ] Rollback auf 7.9.86
|
|
39
|
+
|
|
40
|
+
Eine Checkbox darf erst nach nachvollziehbarem Testnachweis gesetzt werden.
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
/* NexoWatt EOS native shell
|
|
1
|
+
/* NexoWatt EOS native shell v89
|
|
2
2
|
Clean presentation layer for the NexoWatt fork of ioBroker Admin.
|
|
3
3
|
This stylesheet deliberately avoids broad pointer-event, visibility and DOM-structure overrides. */
|
|
4
4
|
|
|
@@ -79,6 +79,7 @@ html.eos-login .MuiAvatar-img { object-fit: contain !important; filter: drop-sha
|
|
|
79
79
|
/* Main header */
|
|
80
80
|
html.eos-app .MuiAppBar-root {
|
|
81
81
|
position: fixed !important;
|
|
82
|
+
z-index: 1600 !important;
|
|
82
83
|
top: var(--nx-shell-top) !important;
|
|
83
84
|
left: var(--nx-page-x) !important;
|
|
84
85
|
right: var(--nx-page-x) !important;
|
|
@@ -510,7 +511,7 @@ html.eos-security-nonadmin [data-eos-admin-only-control="1"] { display: none !im
|
|
|
510
511
|
.eos-basic-settings-actions button:disabled { opacity: .55; cursor: wait; }
|
|
511
512
|
@media (max-width: 760px) { .eos-basic-settings-overlay { padding: 8px; } .eos-basic-settings-dialog { width: 100%; max-height: 96vh; } .eos-basic-settings-form { grid-template-columns: 1fr; } .eos-basic-settings-actions { flex-direction: column-reverse; } .eos-basic-settings-actions button { width: 100%; } }
|
|
512
513
|
|
|
513
|
-
/*
|
|
514
|
+
/* v89: blocking first-login password setup for installer/end-user accounts */
|
|
514
515
|
html.eos-first-login-active,html.eos-first-login-active body { min-height: 100%; overflow: hidden !important; background: #020914 !important; }
|
|
515
516
|
.eos-first-login-overlay { position: fixed; inset: 0; z-index: 2147483647; display: grid; place-items: center; box-sizing: border-box; padding: 24px; color: #effbff; background: radial-gradient(circle at 20% 0%,rgba(0,229,138,.15),transparent 38%),linear-gradient(145deg,#020914,#061927); font-family: Inter,Roboto,Arial,sans-serif; }
|
|
516
517
|
.eos-first-login-card { width: min(520px,100%); box-sizing: border-box; padding: 30px; border: 1px solid rgba(0,229,138,.34); border-radius: 22px; background: rgba(4,21,33,.96); box-shadow: 0 28px 90px rgba(0,0,0,.58),0 0 42px rgba(0,229,138,.08); }
|
|
@@ -822,3 +823,332 @@ html.eos-modern-login body::before {
|
|
|
822
823
|
.eos-account-management-launcher span { display: none; }
|
|
823
824
|
.eos-account-management-launcher { min-width: 40px; padding: 7px 9px; }
|
|
824
825
|
}
|
|
826
|
+
|
|
827
|
+
|
|
828
|
+
/* ==========================================================================
|
|
829
|
+
NexoWatt EOS 7.9.89 – stable product layout
|
|
830
|
+
Integrated first login, header assistant, role-safe overview and account
|
|
831
|
+
management exclusively below "Zugänge & Rechte".
|
|
832
|
+
========================================================================== */
|
|
833
|
+
|
|
834
|
+
html.eos-app .eos-top-toolbar {
|
|
835
|
+
overflow: visible !important;
|
|
836
|
+
}
|
|
837
|
+
|
|
838
|
+
.eos-brand-badge:is(button) {
|
|
839
|
+
appearance: none;
|
|
840
|
+
font: inherit;
|
|
841
|
+
color: inherit;
|
|
842
|
+
cursor: pointer;
|
|
843
|
+
}
|
|
844
|
+
.eos-brand-badge:is(button):focus-visible {
|
|
845
|
+
outline: 3px solid rgba(69, 213, 255, .78);
|
|
846
|
+
outline-offset: 3px;
|
|
847
|
+
}
|
|
848
|
+
|
|
849
|
+
/* First login is part of the normal login card – never a floating page action. */
|
|
850
|
+
.eos-passwordless-launcher,
|
|
851
|
+
.eos-account-management-launcher,
|
|
852
|
+
.eos-account-management-floating {
|
|
853
|
+
display: none !important;
|
|
854
|
+
}
|
|
855
|
+
html.eos-login .eos-login-card-modern {
|
|
856
|
+
max-height: min(760px, calc(100vh - 30px)) !important;
|
|
857
|
+
overflow: auto !important;
|
|
858
|
+
}
|
|
859
|
+
.eos-login-role-selector {
|
|
860
|
+
width: 100%;
|
|
861
|
+
margin: 14px 0 5px;
|
|
862
|
+
padding: 13px;
|
|
863
|
+
border: 1px solid rgba(69, 213, 255, .18);
|
|
864
|
+
border-radius: 16px;
|
|
865
|
+
background: linear-gradient(145deg, rgba(4, 23, 36, .82), rgba(2, 12, 23, .74));
|
|
866
|
+
box-shadow: inset 0 1px 0 rgba(255, 255, 255, .04);
|
|
867
|
+
}
|
|
868
|
+
.eos-login-role-heading {
|
|
869
|
+
display: flex;
|
|
870
|
+
align-items: baseline;
|
|
871
|
+
justify-content: space-between;
|
|
872
|
+
gap: 12px;
|
|
873
|
+
margin-bottom: 10px;
|
|
874
|
+
}
|
|
875
|
+
.eos-login-role-heading strong { color: #effcff; font-size: 13px; }
|
|
876
|
+
.eos-login-role-heading span { color: #88aab8; font-size: 10px; text-align: right; }
|
|
877
|
+
.eos-login-role-buttons {
|
|
878
|
+
display: grid;
|
|
879
|
+
grid-template-columns: repeat(3, minmax(0, 1fr));
|
|
880
|
+
gap: 8px;
|
|
881
|
+
}
|
|
882
|
+
.eos-login-role-buttons button {
|
|
883
|
+
min-width: 0;
|
|
884
|
+
min-height: 58px;
|
|
885
|
+
display: grid;
|
|
886
|
+
grid-template-columns: 25px minmax(0, 1fr);
|
|
887
|
+
align-items: center;
|
|
888
|
+
gap: 7px;
|
|
889
|
+
padding: 8px 9px;
|
|
890
|
+
color: #dceff6;
|
|
891
|
+
text-align: left;
|
|
892
|
+
border: 1px solid rgba(133, 193, 218, .18);
|
|
893
|
+
border-radius: 12px;
|
|
894
|
+
background: rgba(255, 255, 255, .028);
|
|
895
|
+
cursor: pointer;
|
|
896
|
+
transition: transform .16s ease, border-color .16s ease, background .16s ease;
|
|
897
|
+
}
|
|
898
|
+
.eos-login-role-buttons button span {
|
|
899
|
+
display: grid;
|
|
900
|
+
place-items: center;
|
|
901
|
+
width: 25px;
|
|
902
|
+
height: 25px;
|
|
903
|
+
color: #03151c;
|
|
904
|
+
font-size: 14px;
|
|
905
|
+
font-weight: 900;
|
|
906
|
+
border-radius: 8px;
|
|
907
|
+
background: linear-gradient(135deg, #00e58a, #45d5ff);
|
|
908
|
+
}
|
|
909
|
+
.eos-login-role-buttons button strong {
|
|
910
|
+
overflow: hidden;
|
|
911
|
+
font-size: 11px;
|
|
912
|
+
line-height: 1.25;
|
|
913
|
+
text-overflow: ellipsis;
|
|
914
|
+
}
|
|
915
|
+
.eos-login-role-buttons button:hover,
|
|
916
|
+
.eos-login-role-buttons button.active {
|
|
917
|
+
transform: translateY(-1px);
|
|
918
|
+
border-color: rgba(0, 229, 138, .46);
|
|
919
|
+
background: linear-gradient(145deg, rgba(0, 229, 138, .10), rgba(69, 213, 255, .055));
|
|
920
|
+
}
|
|
921
|
+
.eos-login-first-hint {
|
|
922
|
+
min-height: 29px;
|
|
923
|
+
margin: 10px 2px 0;
|
|
924
|
+
color: #91b2bf;
|
|
925
|
+
font-size: 11px;
|
|
926
|
+
line-height: 1.35;
|
|
927
|
+
}
|
|
928
|
+
.eos-login-first-ready .eos-login-first-hint { color: #5cefb0; }
|
|
929
|
+
.eos-login-first-status {
|
|
930
|
+
min-height: 20px;
|
|
931
|
+
margin: 4px 2px 0;
|
|
932
|
+
color: #9dbcc9;
|
|
933
|
+
font-size: 12px;
|
|
934
|
+
}
|
|
935
|
+
.eos-login-first-status[data-kind="error"] { color: #ff8d98; }
|
|
936
|
+
.eos-login-first-status[data-kind="success"] { color: #54f1aa; }
|
|
937
|
+
.eos-login-first-ready button[type="submit"] {
|
|
938
|
+
box-shadow: 0 0 0 1px rgba(0, 229, 138, .28), 0 12px 28px rgba(0, 229, 138, .14) !important;
|
|
939
|
+
}
|
|
940
|
+
|
|
941
|
+
/* EOS Assist lives in the fixed header and opens below it. */
|
|
942
|
+
.eos-assist-root.eos-assist-header-root {
|
|
943
|
+
position: relative !important;
|
|
944
|
+
inset: auto !important;
|
|
945
|
+
z-index: 1500 !important;
|
|
946
|
+
margin-left: auto;
|
|
947
|
+
flex: 0 0 auto;
|
|
948
|
+
}
|
|
949
|
+
.eos-assist-header-root .eos-assist-button {
|
|
950
|
+
min-width: 132px;
|
|
951
|
+
height: 46px;
|
|
952
|
+
padding: 6px 13px;
|
|
953
|
+
border-radius: 15px;
|
|
954
|
+
}
|
|
955
|
+
.eos-assist-header-root .eos-assist-panel {
|
|
956
|
+
position: fixed !important;
|
|
957
|
+
top: calc(var(--nx-shell-top) + var(--nx-header-h) + 8px) !important;
|
|
958
|
+
right: calc(var(--nx-page-x) + 10px) !important;
|
|
959
|
+
bottom: auto !important;
|
|
960
|
+
width: min(480px, calc(100vw - 32px));
|
|
961
|
+
max-height: calc(100vh - var(--nx-content-top) - 12px);
|
|
962
|
+
overflow: auto;
|
|
963
|
+
transform-origin: top right;
|
|
964
|
+
box-shadow: 0 30px 80px rgba(0, 0, 0, .58), 0 0 36px rgba(0, 229, 138, .13);
|
|
965
|
+
}
|
|
966
|
+
.eos-assist-header-root.eos-assist-open .eos-assist-panel {
|
|
967
|
+
transform: translateY(0) scale(1);
|
|
968
|
+
}
|
|
969
|
+
|
|
970
|
+
/* Modern overview – current Overview tab, never Easy mode. */
|
|
971
|
+
#app-paper { position: relative !important; }
|
|
972
|
+
.eos-overview-hero {
|
|
973
|
+
display: flex;
|
|
974
|
+
align-items: center;
|
|
975
|
+
justify-content: space-between;
|
|
976
|
+
gap: 24px;
|
|
977
|
+
margin: 14px 16px 18px;
|
|
978
|
+
padding: clamp(20px, 2.6vw, 32px);
|
|
979
|
+
color: #edfbff;
|
|
980
|
+
border: 1px solid rgba(0, 229, 138, .24);
|
|
981
|
+
border-radius: 24px;
|
|
982
|
+
background:
|
|
983
|
+
radial-gradient(circle at 8% 30%, rgba(0, 229, 138, .14), transparent 35%),
|
|
984
|
+
radial-gradient(circle at 90% 20%, rgba(69, 213, 255, .10), transparent 34%),
|
|
985
|
+
linear-gradient(145deg, rgba(6, 31, 44, .97), rgba(2, 13, 23, .98));
|
|
986
|
+
box-shadow: 0 22px 56px rgba(0, 0, 0, .31), inset 0 1px 0 rgba(255, 255, 255, .055);
|
|
987
|
+
}
|
|
988
|
+
.eos-overview-eyebrow {
|
|
989
|
+
color: #00e58a;
|
|
990
|
+
font-size: 11px;
|
|
991
|
+
font-weight: 950;
|
|
992
|
+
letter-spacing: .17em;
|
|
993
|
+
text-transform: uppercase;
|
|
994
|
+
}
|
|
995
|
+
.eos-overview-hero h1 {
|
|
996
|
+
margin: 6px 0 5px;
|
|
997
|
+
font-size: clamp(26px, 3.7vw, 42px);
|
|
998
|
+
line-height: 1.05;
|
|
999
|
+
}
|
|
1000
|
+
.eos-overview-hero p {
|
|
1001
|
+
max-width: 760px;
|
|
1002
|
+
margin: 0;
|
|
1003
|
+
color: #a3c0cc;
|
|
1004
|
+
font-size: 14px;
|
|
1005
|
+
line-height: 1.55;
|
|
1006
|
+
}
|
|
1007
|
+
.eos-overview-role {
|
|
1008
|
+
display: inline-flex;
|
|
1009
|
+
align-items: center;
|
|
1010
|
+
gap: 9px;
|
|
1011
|
+
flex: 0 0 auto;
|
|
1012
|
+
padding: 10px 14px;
|
|
1013
|
+
color: #dff8ff;
|
|
1014
|
+
font-size: 12px;
|
|
1015
|
+
font-weight: 850;
|
|
1016
|
+
border: 1px solid rgba(69, 213, 255, .20);
|
|
1017
|
+
border-radius: 999px;
|
|
1018
|
+
background: rgba(69, 213, 255, .055);
|
|
1019
|
+
}
|
|
1020
|
+
.eos-overview-status-dot {
|
|
1021
|
+
width: 9px;
|
|
1022
|
+
height: 9px;
|
|
1023
|
+
border-radius: 50%;
|
|
1024
|
+
background: #00e58a;
|
|
1025
|
+
box-shadow: 0 0 13px rgba(0, 229, 138, .88);
|
|
1026
|
+
}
|
|
1027
|
+
.eos-native-overview-hero + .MuiPaper-root,
|
|
1028
|
+
.eos-native-overview-hero + div { border-radius: 18px; }
|
|
1029
|
+
.eos-role-safe-overview {
|
|
1030
|
+
position: absolute;
|
|
1031
|
+
inset: 0;
|
|
1032
|
+
z-index: 25;
|
|
1033
|
+
overflow: auto;
|
|
1034
|
+
padding: 0 0 24px;
|
|
1035
|
+
background:
|
|
1036
|
+
radial-gradient(circle at 12% 8%, rgba(0, 229, 138, .07), transparent 33%),
|
|
1037
|
+
linear-gradient(180deg, rgba(3, 15, 27, .995), rgba(3, 17, 29, .995));
|
|
1038
|
+
}
|
|
1039
|
+
.eos-overview-grid {
|
|
1040
|
+
display: grid;
|
|
1041
|
+
grid-template-columns: repeat(auto-fit, minmax(245px, 1fr));
|
|
1042
|
+
gap: 13px;
|
|
1043
|
+
padding: 0 16px 20px;
|
|
1044
|
+
}
|
|
1045
|
+
.eos-overview-action {
|
|
1046
|
+
min-height: 105px;
|
|
1047
|
+
display: grid;
|
|
1048
|
+
grid-template-columns: 52px minmax(0, 1fr) 22px;
|
|
1049
|
+
align-items: center;
|
|
1050
|
+
gap: 13px;
|
|
1051
|
+
padding: 17px;
|
|
1052
|
+
color: #eafaff;
|
|
1053
|
+
text-align: left;
|
|
1054
|
+
border: 1px solid rgba(133, 193, 218, .14);
|
|
1055
|
+
border-radius: 18px;
|
|
1056
|
+
background: linear-gradient(145deg, rgba(10, 35, 50, .84), rgba(3, 16, 28, .92));
|
|
1057
|
+
box-shadow: 0 13px 28px rgba(0, 0, 0, .20), inset 0 1px 0 rgba(255, 255, 255, .035);
|
|
1058
|
+
cursor: pointer;
|
|
1059
|
+
transition: transform .16s ease, border-color .16s ease, background .16s ease, box-shadow .16s ease;
|
|
1060
|
+
}
|
|
1061
|
+
.eos-overview-action:hover {
|
|
1062
|
+
transform: translateY(-2px);
|
|
1063
|
+
border-color: rgba(0, 229, 138, .35);
|
|
1064
|
+
background: linear-gradient(145deg, rgba(0, 229, 138, .085), rgba(69, 213, 255, .045));
|
|
1065
|
+
box-shadow: 0 18px 36px rgba(0, 0, 0, .26), 0 0 24px rgba(0, 229, 138, .055);
|
|
1066
|
+
}
|
|
1067
|
+
.eos-overview-action-icon {
|
|
1068
|
+
display: grid;
|
|
1069
|
+
place-items: center;
|
|
1070
|
+
width: 52px;
|
|
1071
|
+
height: 52px;
|
|
1072
|
+
color: #03151c;
|
|
1073
|
+
font-size: 24px;
|
|
1074
|
+
font-weight: 950;
|
|
1075
|
+
border-radius: 16px;
|
|
1076
|
+
background: linear-gradient(135deg, #00e58a, #45d5ff);
|
|
1077
|
+
box-shadow: 0 10px 22px rgba(0, 229, 138, .13);
|
|
1078
|
+
}
|
|
1079
|
+
.eos-overview-action > span:nth-child(2) { display: grid; gap: 6px; min-width: 0; }
|
|
1080
|
+
.eos-overview-action strong { font-size: 16px; }
|
|
1081
|
+
.eos-overview-action small { color: #91afbc; font-size: 12px; line-height: 1.4; }
|
|
1082
|
+
.eos-overview-action i { color: #59e5bd; font-size: 29px; font-style: normal; }
|
|
1083
|
+
.eos-official-reserve-hidden { display: none !important; }
|
|
1084
|
+
|
|
1085
|
+
/* Account management is available only inside Zugänge & Rechte. */
|
|
1086
|
+
.eos-account-management-entry {
|
|
1087
|
+
position: relative;
|
|
1088
|
+
z-index: 30;
|
|
1089
|
+
display: flex;
|
|
1090
|
+
align-items: center;
|
|
1091
|
+
justify-content: space-between;
|
|
1092
|
+
gap: 24px;
|
|
1093
|
+
margin: 16px;
|
|
1094
|
+
padding: 24px;
|
|
1095
|
+
color: #eafaff;
|
|
1096
|
+
border: 1px solid rgba(0, 229, 138, .26);
|
|
1097
|
+
border-radius: 22px;
|
|
1098
|
+
background:
|
|
1099
|
+
radial-gradient(circle at 8% 50%, rgba(0, 229, 138, .12), transparent 42%),
|
|
1100
|
+
linear-gradient(145deg, rgba(7, 31, 45, .98), rgba(2, 14, 24, .98));
|
|
1101
|
+
box-shadow: 0 20px 52px rgba(0, 0, 0, .30);
|
|
1102
|
+
}
|
|
1103
|
+
.eos-account-management-entry-copy { min-width: 0; }
|
|
1104
|
+
.eos-account-management-entry h1 { margin: 4px 0 7px; font-size: clamp(24px, 3vw, 34px); }
|
|
1105
|
+
.eos-account-management-entry p { max-width: 750px; margin: 0; color: #9dbac6; line-height: 1.5; }
|
|
1106
|
+
.eos-account-management-entry-security { margin-top: 12px; color: #71e3c0; font-size: 12px; line-height: 1.45; }
|
|
1107
|
+
.eos-account-management-entry-button {
|
|
1108
|
+
min-width: 230px;
|
|
1109
|
+
min-height: 58px;
|
|
1110
|
+
display: inline-flex;
|
|
1111
|
+
align-items: center;
|
|
1112
|
+
justify-content: center;
|
|
1113
|
+
gap: 10px;
|
|
1114
|
+
flex: 0 0 auto;
|
|
1115
|
+
padding: 12px 17px;
|
|
1116
|
+
color: #03151c;
|
|
1117
|
+
font-weight: 950;
|
|
1118
|
+
border: 0;
|
|
1119
|
+
border-radius: 15px;
|
|
1120
|
+
background: linear-gradient(135deg, #00e58a, #45d5ff);
|
|
1121
|
+
box-shadow: 0 14px 28px rgba(0, 229, 138, .14);
|
|
1122
|
+
cursor: pointer;
|
|
1123
|
+
}
|
|
1124
|
+
.eos-account-management-entry-button svg { width: 24px; height: 24px; fill: currentColor; }
|
|
1125
|
+
html.eos-account-page-installer #app-paper > :not(.eos-account-management-entry):not(.MuiSnackbar-root):not([role="presentation"]) {
|
|
1126
|
+
display: none !important;
|
|
1127
|
+
}
|
|
1128
|
+
html.eos-account-page-installer .eos-account-management-entry { min-height: calc(100% - 32px); }
|
|
1129
|
+
|
|
1130
|
+
/* Existing overview cards receive a restrained modern surface. */
|
|
1131
|
+
html.eos-route-intro #app-paper .MuiCard-root,
|
|
1132
|
+
html.eos-route-intro #app-paper [class*="introCard"],
|
|
1133
|
+
html.eos-route-intro #app-paper [class*="card"] {
|
|
1134
|
+
border-radius: 18px !important;
|
|
1135
|
+
border-color: rgba(133, 193, 218, .15) !important;
|
|
1136
|
+
box-shadow: 0 14px 30px rgba(0, 0, 0, .20) !important;
|
|
1137
|
+
}
|
|
1138
|
+
|
|
1139
|
+
@media (max-width: 900px) {
|
|
1140
|
+
.eos-assist-header-root .eos-assist-button { min-width: 47px; width: 47px; padding: 6px; }
|
|
1141
|
+
.eos-assist-header-root .eos-assist-button strong,
|
|
1142
|
+
.eos-assist-header-root .eos-assist-button small { display: none; }
|
|
1143
|
+
.eos-account-management-entry { align-items: stretch; flex-direction: column; }
|
|
1144
|
+
.eos-account-management-entry-button { width: 100%; min-width: 0; }
|
|
1145
|
+
}
|
|
1146
|
+
@media (max-width: 720px) {
|
|
1147
|
+
.eos-login-role-buttons { grid-template-columns: 1fr; }
|
|
1148
|
+
.eos-login-role-buttons button { min-height: 46px; }
|
|
1149
|
+
.eos-overview-hero { align-items: flex-start; flex-direction: column; margin: 9px; border-radius: 18px; }
|
|
1150
|
+
.eos-overview-grid { grid-template-columns: 1fr; padding: 0 9px 16px; }
|
|
1151
|
+
.eos-overview-action { min-height: 90px; }
|
|
1152
|
+
.eos-account-management-entry { margin: 9px; padding: 19px; border-radius: 18px; }
|
|
1153
|
+
.eos-assist-header-root .eos-assist-panel { right: 8px !important; width: calc(100vw - 16px); }
|
|
1154
|
+
}
|