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.
@@ -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.87-rc.4",
3
- "channel": "release-candidate-latest",
4
- "baseFrontend": "validated v84 runtime with NexoWatt EOS role, first-login and product branding hardening",
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": "passwordless-first-activation-account-management-rc4",
7
- "release": "passwordless-first-activation-account-management-rc4",
8
- "label": "v87-rc4",
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
- "Stable fallback 7.9.86 remains available; RC4 is published through npm latest as requested for controlled product acceptance.",
11
- "Installer and Guest/End User default accounts can perform one passwordless first activation without receiving an unrestricted authenticated session.",
12
- "Passwordless activation is limited to accounts explicitly marked for first activation and, by default, to private/local networks.",
13
- "Admin/Service can reopen first activation for installer and end-user accounts; installers can reopen end-user accounts only.",
14
- "Reset replaces the old password with an unknown random bootstrap secret and forces the user through the one-time password creation page.",
15
- "The existing administrator account is never included in passwordless activation or role reset.",
16
- "The NexoWatt EOS product shell and access-management surfaces use the RC4 modern visual layer.",
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
- "Adds private-network, same-origin and rate-limited passwordless first-activation claim endpoints with a short-lived HttpOnly claim cookie.",
21
- "Adds default Installer and Guest/End User account provisioning and role assignment while replacing blank passwords with unknown random bootstrap secrets.",
22
- "Adds Admin/Service and Installer account-management endpoints with strict target-role checks.",
23
- "Adds a modern account-management dialog and login-page first-activation launcher.",
24
- "Blocks socket commands for non-admin accounts while password setup is required, including already-open sessions after a reset.",
25
- "Adds modernized cards, dialogs, controls, tables, focus states and responsive product styling without changing the underlying compatibility model.",
26
- "Allows the explicitly requested npm latest release channel for RC4 and protects it with matching metadata and tests."
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": 88,
29
- "shellCacheVersion": 88,
30
- "nativeShellVersion": 88,
31
- "shellCacheTag": "87rc4",
32
- "repositoryEntry": "nexowatt-eos-admin-repository-entry-v87-rc4.json"
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.29",
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 offiziellen `admin`-Adapter erst löschen, wenn der Zugriff über `eos-admin.0` zuverlässig funktioniert.
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 v82
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
- /* v87-rc4: blocking first-login password setup for installer/end-user accounts */
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
+ }