iobroker.eos-admin 7.10.6 → 7.10.8

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.
Files changed (31) hide show
  1. package/INSTALL_TEST_V7.10.7.md +9 -0
  2. package/MERGE_UPDATE_README_V7.10.7.md +7 -0
  3. package/NEXOWATT_EOS_BUILD_INFO.json +19 -19
  4. package/NEXOWATT_EOS_PREBUILT_MANIFEST.json +26 -24
  5. package/PUBLISH_STABLE_V7.10.7.md +9 -0
  6. package/README_STABILITY_V7.10.7.md +7 -0
  7. package/RELEASE_ACCEPTANCE_V7.10.7.md +12 -0
  8. package/RELEASE_NOTES_V7.10.7.md +19 -0
  9. package/{SECURITY_ROLE_MATRIX_V7.10.6.md → SECURITY_ROLE_MATRIX_V7.10.7.md} +4 -2
  10. package/adminWww/css/nexowatt-native-shell.css +332 -0
  11. package/adminWww/index.html +14 -14
  12. package/adminWww/js/eos-role-bootstrap.js +4 -3
  13. package/adminWww/js/eos-role-ui.js +34 -18
  14. package/adminWww/js/nexowatt-native-shell.js +104 -2
  15. package/adminWww/static/js/{nexowatt-stable-v7106.js → nexowatt-stable-v7108.js} +2 -2
  16. package/build/lib/web.js +3 -0
  17. package/io-package.json +10 -5
  18. package/package.json +16 -12
  19. package/tools/nexowatt-installer-ems-selftest.cjs +44 -0
  20. package/tools/nexowatt-merge-update-selftest.cjs +1 -1
  21. package/tools/nexowatt-role-security-selftest.cjs +19 -6
  22. package/tools/nexowatt-stable-v7103-selftest.cjs +2 -2
  23. package/tools/nexowatt-user-area-selftest.cjs +1 -1
  24. package/tools/nexowatt-v7108-ui-foundation-selftest.cjs +64 -0
  25. package/tools/nexowatt-validate-package.cjs +9 -7
  26. package/INSTALL_TEST_V7.10.6.md +0 -8
  27. package/MERGE_UPDATE_README_V7.10.6.md +0 -7
  28. package/PUBLISH_STABLE_V7.10.6.md +0 -8
  29. package/README_STABILITY_V7.10.6.md +0 -5
  30. package/RELEASE_ACCEPTANCE_V7.10.6.md +0 -11
  31. package/RELEASE_NOTES_V7.10.6.md +0 -14
@@ -0,0 +1,9 @@
1
+ # Installation test 7.10.7
2
+
3
+ - Install/update EOS Admin 7.10.7 and verify port 8081 remains reachable.
4
+ - Sign in as Admin: all previous functions, datapoint writes, expert mode, Admin and XTerm remain available.
5
+ - Sign in as Installer: **EMS Apps öffnen** is visible and opens the EMS App-Center.
6
+ - Installer: Simulation and License remain hidden/blocked; expert head, ioBroker Admin, XTerm and Users/Rights remain unavailable.
7
+ - Sign in as End User: EMS App-Center, Simulation and License remain hidden/blocked; datapoints remain read-only.
8
+ - Confirm an End User cannot inherit an existing UI/Admin session on port 8188.
9
+ - Confirm navigation editing and backup visibility behavior remain restart-safe.
@@ -0,0 +1,7 @@
1
+ # Merge/update note 7.10.7
2
+
3
+ Always replace the previous repository with the complete 7.10.7 repository. Do not merge old `adminWww` role runtime files back into this release.
4
+
5
+ The authoritative role policy in 7.10.7 allows the Installer to use the EMS App-Center, while Simulation and License remain Admin-only and the End User remains blocked.
6
+
7
+ After a merge, run package validation, stability checks, role-security checks and `npm publish --dry-run` before publishing.
@@ -1,29 +1,29 @@
1
1
  {
2
- "version": "7.10.6",
2
+ "version": "7.10.8",
3
3
  "channel": "stable-latest",
4
- "baseFrontend": "validated v84 runtime with authoritative RBAC and End User read-only UI correction",
4
+ "baseFrontend": "validated v84 runtime with modern Services, Datapoints and System Logs surfaces",
5
5
  "runtimeEntry": "v84",
6
- "releaseType": "stable-enduser-readonly-system-info",
7
- "release": "stable-enduser-readonly-system-info",
8
- "label": "v7-10-6",
6
+ "releaseType": "stable-ui-foundation",
7
+ "release": "stable-ui-foundation",
8
+ "label": "v7-10-8",
9
9
  "notes": [
10
- "Administrator authority and all Admin controls remain unchanged.",
11
- "End User datapoints remain visible but all edit, delete and settings actions are hidden.",
12
- "End User datapoint writes remain denied by the backend role guard.",
13
- "The End User system card receives read-only platform, RAM, Node.js and NPM information from an authenticated endpoint.",
14
- "The restricted End User system-card info popup is removed to prevent permissionError dialogs."
10
+ "Administrator, Installer and End User role behavior from 7.10.7 remains unchanged.",
11
+ "Services, Datapoints and System Logs use modern NexoWatt EOS presentation layers.",
12
+ "Structure is hidden and direct tab-enums navigation is redirected for every role.",
13
+ "Installer service rows expand and remain operable without opening Basic Settings."
15
14
  ],
16
15
  "changes": [
17
- "Added an authenticated read-only system information endpoint for restricted roles.",
18
- "Added End User-only action-column suppression in the ObjectBrowser.",
19
- "Kept the system.user.admin full-rights bypass untouched.",
20
- "Raised the release and browser cache identity to 7.10.6 / 7106."
16
+ "Restricted the Basic Settings click guard to the actual top-header system settings control.",
17
+ "Added modern route headers and technical surface styling for Services, Datapoints and System Logs.",
18
+ "Added log severity accents without changing native log behavior.",
19
+ "Removed Structure from the native and role-filtered navigation for all roles.",
20
+ "Raised release and browser cache identity to 7.10.8 / 7108."
21
21
  ],
22
- "brandingCacheVersion": 7106,
23
- "shellCacheVersion": 7106,
24
- "nativeShellVersion": 7106,
25
- "shellCacheTag": "7106",
26
- "repositoryEntry": "nexowatt-eos-admin-repository-entry-v7-10-6.json",
22
+ "brandingCacheVersion": 7108,
23
+ "shellCacheVersion": 7108,
24
+ "nativeShellVersion": 7108,
25
+ "shellCacheTag": "7108",
26
+ "repositoryEntry": "nexowatt-eos-admin-repository-entry-v7-10-8.json",
27
27
  "autoUpdateCacheVersion": 7103,
28
28
  "autoUpdateCacheTag": "7103"
29
29
  }
@@ -1,9 +1,9 @@
1
1
  {
2
2
  "format": 1,
3
3
  "package": "iobroker.eos-admin",
4
- "version": "7.10.6",
4
+ "version": "7.10.8",
5
5
  "algorithm": "sha256",
6
- "fileCount": 1390,
6
+ "fileCount": 1392,
7
7
  "trackedRoots": [
8
8
  "src",
9
9
  "build",
@@ -527,7 +527,7 @@
527
527
  "adminWww/css/images/marker-icon.png": "574c3a5cca85f4114085b6841596d62f00d7c892c7b03f28cbfa301deb1dc437",
528
528
  "adminWww/css/images/marker-shadow.png": "264f5c640339f042dd729062cfc04c17f8ea0f29882b538e3848ed8f10edb4da",
529
529
  "adminWww/css/leaflet.css": "7a30116fa3852c0ff7e556bb2e80b0dc89c5bca8e725bbe3948af1746ca55103",
530
- "adminWww/css/nexowatt-native-shell.css": "cd55f82f7e1de5041058213dda973226c8ea188de554511b9c9fffaf1ed12d0c",
530
+ "adminWww/css/nexowatt-native-shell.css": "4583af99c9d87b8ff860f9026b715a6c2a7517234bde55153e97eff6223f2b7f",
531
531
  "adminWww/favicon.ico": "3a357e949ab04b9f7bb1539764419ade50d1b4fc7caa51b8f33202a3f57a1f74",
532
532
  "adminWww/img/admin.png": "7f93d65d9e1d795bf127e1af31d88d7468ccb70b026f98351d0abbc3f3bd4df6",
533
533
  "adminWww/img/admin.svg": "1167118074ff84d8cef82ad80c38609719dacfde9417126e46966c1ec986534b",
@@ -552,7 +552,7 @@
552
552
  "adminWww/img/le.png": "ef5ebb7112926f646e781a326b639f56888fafe0891b9b000178091b4f8ed9dd",
553
553
  "adminWww/img/logo.svg": "1167118074ff84d8cef82ad80c38609719dacfde9417126e46966c1ec986534b",
554
554
  "adminWww/img/no-image.svg": "25fc382f4ad3a36f8a637cd966b9107368e1f11906d706102ad5f37db6f57f34",
555
- "adminWww/index.html": "d0346434c12041cd85b105ef70afb347a2e4913ca116ce46551dd36ad319767a",
555
+ "adminWww/index.html": "cdc67a669d04bc6e548c29e4a222695ef712710a8f01a31cbd01cf3f483c51a6",
556
556
  "adminWww/js/adapter-settings.js": "fb2e538a3385899f7fd47275ec588051c735d8f778a44b89f40f5eb820a31dbc",
557
557
  "adminWww/js/eos-account-management.js": "dbba398605b2391ac1a7ec97cf7eb84da7f929ea16bfb6761750cd700a687fbe",
558
558
  "adminWww/js/eos-assistant.js": "be43f49fd5310d2962365035556c37109d4868856e874e1f964c4b2f05bb6beb",
@@ -563,11 +563,11 @@
563
563
  "adminWww/js/eos-manual-write-policy.js": "3c93487146b4fd5f681aa45a6bb137d9a91c3fa145ebfa94ec5ccb6b15498e8b",
564
564
  "adminWww/js/eos-native-security.js": "33098b98164623fc133314658bca2f622d19971795dd8bd3c90aca68598aab90",
565
565
  "adminWww/js/eos-policy-client.js": "5ffd32270307137fbec69a9b9bea57ca1d2e27ede987ce1eb37ff1df6677d8d2",
566
- "adminWww/js/eos-role-bootstrap.js": "4cc1da40837606c0176c50c2bb4561bae8e6733b7561e00e9b19ac10111463f2",
567
- "adminWww/js/eos-role-ui.js": "d31b2ffbd6367bb8837ef139d44fb4091d644d2d18191ad3b28a17fbbadf7739",
566
+ "adminWww/js/eos-role-bootstrap.js": "97a4f53e4041f1a2d6581b8490659c57cdd3649662f86188d1e07dcc75508cea",
567
+ "adminWww/js/eos-role-ui.js": "8d340d48d92c80f71d7c520fd295c40d8e7056505a32d897bf1690ed625a5191",
568
568
  "adminWww/js/license.js": "13798e577c82d7a5549b07a244b8b8453ef43e53fc7789f565c35b56e6654007",
569
569
  "adminWww/js/listHeader.js": "ed336a68a64e16a062d1af2269428fd20a08a4b695f17635f55a18bc1ef693a4",
570
- "adminWww/js/nexowatt-native-shell.js": "5ebd9504d08764f48e926790fc1f187a45bf70b9cd8686897a53a1c3721e834f",
570
+ "adminWww/js/nexowatt-native-shell.js": "8348747f19e56cb840b482152c55eb6a479411f71a764bfc11293ba1a1ca5596",
571
571
  "adminWww/js/tableEditor.js": "5508044619fec70071895d0ae3ab6ff75dd03bd936e7b133f98d098d4245ec20",
572
572
  "adminWww/js/translate.js": "264442c0f42a10148057125532bf55b7672c4cc051c28e7cbb922984a558f8d3",
573
573
  "adminWww/js/treeTable.js": "8abde0b7880a89f6f927a87bb041945dea1502f51bc9870d8ba0be9d3dd9eed8",
@@ -747,7 +747,7 @@
747
747
  "adminWww/static/js/html.js": "159b7192459d73d92761dab8c4d48e138e94e4d8e7bf99004bac257e403a0c3b",
748
748
  "adminWww/static/js/javascript.js": "6287a6b820c8707a0cd7b9e4545bcb023a8b9228569cfd21be6635d1409aabf4",
749
749
  "adminWww/static/js/nexowatt-stable-login.js": "ff0c6d4dc2086f3ab4be8ef455e5891a2ccb5f534bddfacbef2f5cd6ce65489e",
750
- "adminWww/static/js/nexowatt-stable-v7106.js": "a4a3e460cac1e028cc6a6a889e0a56c303df98cfa556a427cb5b47e0e3794496",
750
+ "adminWww/static/js/nexowatt-stable-v7108.js": "0e34e89d3a42c4b000dde42302c61f902d281e7965dfa1b6cafa74e2230f6885",
751
751
  "adminWww/static/js/worker-css.js": "83c767cacd6b190e2f083b139cb3f124d1b560afbd7a6dbb74bf5539aa4cadee",
752
752
  "adminWww/static/js/worker-html.js": "661d2448443c0089fba31d2829d77761a5fc042035c38433eff0e20707f17457",
753
753
  "adminWww/static/js/worker-javascript.js": "73fcf007e2d19eacba8f365719ee92d14345505b03f9cf66e6338aef02fccd21",
@@ -793,7 +793,7 @@
793
793
  "build/lib/translations.js.map": "c74bcf48d2dd6ec58c48d48a7fb39c59a84fd58c25095bc0cb5bb46c88cfe24f",
794
794
  "build/lib/utils.js": "b013a5df06f95ed5bfcb851bb87c0617f61f70e6fe7f1fbf2402fd4d0aadec9b",
795
795
  "build/lib/utils.js.map": "74238d0d82cc28d41c4f627b73793f6cda26b338ef1bd97916b6417783949e29",
796
- "build/lib/web.js": "172f19ea7ccffada720f03271ff52d00457aaa44cbd7ce4dfe924013535a9ae6",
796
+ "build/lib/web.js": "f7d0adebfe5b7890f09d3b5eff986cd564724cc7a8497048dc670b43d69b1d90",
797
797
  "build/lib/web.js.map": "5fb9f337f3a27c04bb4303cb61ffa5f0da857299a7d2890609eb5f55f24f1789",
798
798
  "build/main.js": "7578ee14ea840950ad5164b0063c091c983528ebc32689dec5dc499062fbc92e",
799
799
  "build/main.js.map": "1cd3887da9b3d4061c59b6ad497c536c6c9a79938b10bbddf7128a1e7930dfbd",
@@ -817,7 +817,7 @@
817
817
  "src-admin/public/css/images/marker-icon.png": "574c3a5cca85f4114085b6841596d62f00d7c892c7b03f28cbfa301deb1dc437",
818
818
  "src-admin/public/css/images/marker-shadow.png": "264f5c640339f042dd729062cfc04c17f8ea0f29882b538e3848ed8f10edb4da",
819
819
  "src-admin/public/css/leaflet.css": "7a30116fa3852c0ff7e556bb2e80b0dc89c5bca8e725bbe3948af1746ca55103",
820
- "src-admin/public/css/nexowatt-native-shell.css": "cd55f82f7e1de5041058213dda973226c8ea188de554511b9c9fffaf1ed12d0c",
820
+ "src-admin/public/css/nexowatt-native-shell.css": "4583af99c9d87b8ff860f9026b715a6c2a7517234bde55153e97eff6223f2b7f",
821
821
  "src-admin/public/favicon.ico": "3a357e949ab04b9f7bb1539764419ade50d1b4fc7caa51b8f33202a3f57a1f74",
822
822
  "src-admin/public/img/admin.png": "f4c004482fa2623bea6f7e83df40fdda2e07334f61d5ae27eb0aba186c10ca97",
823
823
  "src-admin/public/img/admin.svg": "1167118074ff84d8cef82ad80c38609719dacfde9417126e46966c1ec986534b",
@@ -850,11 +850,11 @@
850
850
  "src-admin/public/js/eos-manual-write-policy.js": "3c93487146b4fd5f681aa45a6bb137d9a91c3fa145ebfa94ec5ccb6b15498e8b",
851
851
  "src-admin/public/js/eos-native-security.js": "33098b98164623fc133314658bca2f622d19971795dd8bd3c90aca68598aab90",
852
852
  "src-admin/public/js/eos-policy-client.js": "5ffd32270307137fbec69a9b9bea57ca1d2e27ede987ce1eb37ff1df6677d8d2",
853
- "src-admin/public/js/eos-role-bootstrap.js": "4cc1da40837606c0176c50c2bb4561bae8e6733b7561e00e9b19ac10111463f2",
854
- "src-admin/public/js/eos-role-ui.js": "d31b2ffbd6367bb8837ef139d44fb4091d644d2d18191ad3b28a17fbbadf7739",
853
+ "src-admin/public/js/eos-role-bootstrap.js": "97a4f53e4041f1a2d6581b8490659c57cdd3649662f86188d1e07dcc75508cea",
854
+ "src-admin/public/js/eos-role-ui.js": "8d340d48d92c80f71d7c520fd295c40d8e7056505a32d897bf1690ed625a5191",
855
855
  "src-admin/public/js/license.js": "13798e577c82d7a5549b07a244b8b8453ef43e53fc7789f565c35b56e6654007",
856
856
  "src-admin/public/js/listHeader.js": "ed336a68a64e16a062d1af2269428fd20a08a4b695f17635f55a18bc1ef693a4",
857
- "src-admin/public/js/nexowatt-native-shell.js": "5ebd9504d08764f48e926790fc1f187a45bf70b9cd8686897a53a1c3721e834f",
857
+ "src-admin/public/js/nexowatt-native-shell.js": "8348747f19e56cb840b482152c55eb6a479411f71a764bfc11293ba1a1ca5596",
858
858
  "src-admin/public/js/tableEditor.js": "5508044619fec70071895d0ae3ab6ff75dd03bd936e7b133f98d098d4245ec20",
859
859
  "src-admin/public/js/translate.js": "264442c0f42a10148057125532bf55b7672c4cc051c28e7cbb922984a558f8d3",
860
860
  "src-admin/public/js/treeTable.js": "8abde0b7880a89f6f927a87bb041945dea1502f51bc9870d8ba0be9d3dd9eed8",
@@ -975,7 +975,7 @@
975
975
  "src-admin/public/manifest.json": "15244d5d50f08420fc5d4793e5699e99c7b900b6908cfbc00a7182f4d4db55bd",
976
976
  "src-admin/public/robots.txt": "90d24bc3bf698ac1e173739502298ccca72adf1f564fab05f484b8c48d1cadd2",
977
977
  "src-admin/public/static/js/nexowatt-stable-login.js": "ff0c6d4dc2086f3ab4be8ef455e5891a2ccb5f534bddfacbef2f5cd6ce65489e",
978
- "src-admin/public/static/js/nexowatt-stable-v7106.js": "a4a3e460cac1e028cc6a6a889e0a56c303df98cfa556a427cb5b47e0e3794496",
978
+ "src-admin/public/static/js/nexowatt-stable-v7108.js": "0e34e89d3a42c4b000dde42302c61f902d281e7965dfa1b6cafa74e2230f6885",
979
979
  "src-admin/src/App.tsx": "8ab367389c604d5face72cc71da49b08021ffa2e566db4d32df9ad98f9fe762a",
980
980
  "src-admin/src/Workers/AdaptersWorker.tsx": "3a2cdeb8010598c901df0e3cffcdae913e62e7ac7c84fcadf15cb7f961dc6ed9",
981
981
  "src-admin/src/Workers/GenericWorker.tsx": "3b3c6e7856602477c54d1dc085aa23b5cfcac7784cc73710b00622ac04ed5a97",
@@ -1191,7 +1191,7 @@
1191
1191
  "src-admin/src/components/CustomPopper.tsx": "07f924ece634d54f1bc5c3d41ffb2702ea89d289c28d98221a5617eaba7cae3d",
1192
1192
  "src-admin/src/components/CustomSelectButton.tsx": "1547393f97fba81b13331a3df4457509f239735bad9d17713eeecd48acd420db",
1193
1193
  "src-admin/src/components/DragWrapper.tsx": "c417b1cc7786398c1d467d98db10d49e5b81d28ba9a6b0a55f6d9f5b6ad9a035",
1194
- "src-admin/src/components/Drawer.tsx": "1c8969bb2f97d8ab66bf8be4d2989bc598d0b7397d5a99ff846aa42ceeb7618f",
1194
+ "src-admin/src/components/Drawer.tsx": "5b1bdd38516cce1b84e22e82b4f32da61ce8853c8930da586db413dad6e0a25d",
1195
1195
  "src-admin/src/components/DrawerItem.tsx": "41a011ccfb84258b7e113d0ff2c8f3f12f12cc555eb34e5decd474c71f70453a",
1196
1196
  "src-admin/src/components/EasyModeCard.tsx": "403e8f47532cf469f42f91a7c40c8f9d9c09f66cc4486177ac49fc5aa230b80c",
1197
1197
  "src-admin/src/components/Editor.tsx": "47bc1dd26ab86317d7f65560b10e9611b138be8b0f13c90d78166debcd2ed4ee",
@@ -1323,7 +1323,7 @@
1323
1323
  "src-admin/src/tabs/Objects.tsx": "2b87a8a7e771e10e1cce49019c4be62578f10096eee5abd17d2685f5f41cc67c",
1324
1324
  "src-admin/src/tabs/Users.tsx": "45ed37e57b66f7e23eb465aef9ad9db55613b40bf44530ab81d6206806de102d",
1325
1325
  "src-admin/src/types.d.ts": "3cfac48af5f8416b55b89c0daca78499dbbd402c0b44cc661112b76953ba3344",
1326
- "src-admin/src/version.json": "8333ad3db33a8616fc0d4e5990a1a4fd0b1504868d5ec252550520ed5e5001b1",
1326
+ "src-admin/src/version.json": "afda0053e179042668b57354a0ad6539455c7cd22c7b44967f9fb94301a86e20",
1327
1327
  "src/i18n/de.json": "85d4ecfedf15d78984922b05377063b808ae8c5a75944af323e72a2c3a483d50",
1328
1328
  "src/i18n/en.json": "6a0156a1b026903821d395ef2ceef845e90531f323a218f97f5abefaabb46a23",
1329
1329
  "src/i18n/es.json": "54369f8044dfa222779849d2f158eb100188a43816d6c42a64575122cb528a30",
@@ -1350,7 +1350,7 @@
1350
1350
  "src/lib/testPassword.ts": "c627432e64b6ed40081e2828af207238bc9e9e1f8b823eaf20c7d3e059c5e938",
1351
1351
  "src/lib/translations.ts": "8fdb51d81c3f98e17e0231f6773381886eb1c68068a3f53dd5e32bf6b58f9d16",
1352
1352
  "src/lib/utils.ts": "5398da6c6a660c4300e2679aa5e001e05297d684cc39bdfab091375768169f30",
1353
- "src/lib/web.ts": "ca2a04d1bb1e2cd51bea6fc0f70355c963b9251121cfca539be97068b9f94187",
1353
+ "src/lib/web.ts": "c4683adc8e32e23280bf6fead41cc7c67ff41982d33e388119b18a7ac9997fb7",
1354
1354
  "src/main.ts": "e9eb8013a229d9616be923850075e8cb5475bde32c882008721225ed37a85a8c",
1355
1355
  "src/types.d.ts": "12117a644a45cb0b551555184126563e80bf909726aa378c7d72327a30c61054",
1356
1356
  "tasks.mts": "84a396f8581e7e3ca499a1c4ce01d22ea29f81700520f804b48a95fb54d72408",
@@ -1375,10 +1375,11 @@
1375
1375
  "tools/nexowatt-generate-eos-admin-repo-entry.cjs": "a8b55d6001b0ed6d97221448b194748945f2e8382cdaf0b11ea91c63fb517139",
1376
1376
  "tools/nexowatt-generate-repo-entry.cjs": "4e98acc7db74546bd942cfa36d57015673c6f1514758494753e7339068f7eb68",
1377
1377
  "tools/nexowatt-import-integrity-selftest.cjs": "f46951126a237a6010c3c0949c25e2415ebe9af568d29411d10691951cb3ed87",
1378
+ "tools/nexowatt-installer-ems-selftest.cjs": "eb0ee98500f180e17f5ec591afd7543518f48390776a2d160fd9ddac255ebc41",
1378
1379
  "tools/nexowatt-internal-reserve-selftest.cjs": "f027a2272a4277d65167d68d4ca4428cd0c28a6c6c2b610eda575abd3f2bc90a",
1379
1380
  "tools/nexowatt-login-layout-selftest.cjs": "7d4baae82f1d53fc14446b8ef80aaffa39b0b3529821599f4a6e2c27fbc7a7f2",
1380
1381
  "tools/nexowatt-manual-write-policy-selftest.cjs": "a41057610972d681120bf35e0321029facc08b098c79da9b131980f80bd3fdce",
1381
- "tools/nexowatt-merge-update-selftest.cjs": "a029a368a8d1363b3a9a120ac19105ac28986d159fce93e6ebc1c3deb0ee18ac",
1382
+ "tools/nexowatt-merge-update-selftest.cjs": "f8abe1505e4dd8ade64577825e8c67ae3828892493c613a566ea353b668bfaaf",
1382
1383
  "tools/nexowatt-modern-ui-selftest.cjs": "0145adc4b7d84e996f227dee02c09f767ab9a29bb2151041a50b88bb27a5b93a",
1383
1384
  "tools/nexowatt-module-popup-selftest.cjs": "31f02e8cf0bfd61d7769e1095c93887a34cfbbd76a9805ef4931cea6dff53ddf",
1384
1385
  "tools/nexowatt-native-shell-selftest.cjs": "13aabd3a19f0c0422bbc1c676718685b77c88a526167a7b511fa6c9ab2ac860c",
@@ -1391,21 +1392,22 @@
1391
1392
  "tools/nexowatt-publish-channel-selftest.cjs": "c4efd1104ebe471ce1dc63195f322cffe760af295bf60f13b9766491acd0280e",
1392
1393
  "tools/nexowatt-release-defaults-selftest.cjs": "3e3c96ca774200461978c546d1a937cbae18d7f11497ed84dda639c2358f6e16",
1393
1394
  "tools/nexowatt-repair-eos-admin-update.cjs": "f28c1999b0f75139e582770ad649d17d11f9e909ac49d13c31be5fa5b36253e3",
1394
- "tools/nexowatt-role-access-selftest.cjs": "51a25973a41d066f421c9517515db4eb9abf737a5da6ee839089ae3e59688bb7",
1395
- "tools/nexowatt-role-security-selftest.cjs": "a7ab0513d8d7fc232561962554db27ce00e32d4a6b04af088ba5baef6d2f6dd5",
1395
+ "tools/nexowatt-role-access-selftest.cjs": "37ee2410a23a80f676ad4c8763480f1c12414e852ff4072fe381b04b7c245184",
1396
+ "tools/nexowatt-role-security-selftest.cjs": "336153b5c14d4ec5770c403c547cebf5e2520258ee4f20643b67e1e6be22322b",
1396
1397
  "tools/nexowatt-runtime-cleanup-selftest.cjs": "f317b09aa0c51ffe7e1b5eaf10c52c886804ec6e8084967cd88e4ebece6ecfb5",
1397
- "tools/nexowatt-stability-check.cjs": "2df8d43fa2b5b78b72c71781a85bfc2583e716654b7f23c985dae238dcc04092",
1398
+ "tools/nexowatt-stability-check.cjs": "3d35e4540c836a7f20d98cb69ea9b87e9526b99b604b75e598483de1fc3ef97a",
1398
1399
  "tools/nexowatt-stable-v7101-selftest.cjs": "817d09861ef29c52a67f64ec5b8f4ad4654ce7e6486eded786bb16f3c773eaf8",
1399
1400
  "tools/nexowatt-stable-v7102-selftest.cjs": "75baab5f8069569ad4896e5018f3c5ccbbda2c2297aca5c5146bce94f9cf795d",
1400
- "tools/nexowatt-stable-v7103-selftest.cjs": "20e0be31811dfa61772a2438085ae1a83d6e009330b01fcea5a4320f15586406",
1401
+ "tools/nexowatt-stable-v7103-selftest.cjs": "1dcb71929ad1274466d748a5b46afef2eca7ced9b434c867ba77e5802bdf1a89",
1401
1402
  "tools/nexowatt-stable-v94-selftest.cjs": "5226881b3ad8918c67921ffb37716490f053ec88e7c0f24827a5eda7c75d4019",
1402
1403
  "tools/nexowatt-stable-v95-selftest.cjs": "0b15fcd329eb2994e64c407ab04eaafab7c38c4688136c197bf9601e1c35ee07",
1403
1404
  "tools/nexowatt-stable-v97-selftest.cjs": "4f50ad6e53b8de7eb045d56657cccd846883eacd8a877d51240d78153ba53d80",
1404
1405
  "tools/nexowatt-sync-release-version.cjs": "2478d714533ece21a275071ef6e5467f73c2fa33d0a63d76f408dc048a86c6f6",
1405
1406
  "tools/nexowatt-ui-overview-runtime-selftest.cjs": "83255e5d3c9a548013f6e9a74706644d15d98450d0bfa2eb3da83c740d8618ea",
1406
1407
  "tools/nexowatt-update-selftest.cjs": "c38c454135f98de683de8fa15fc4b9032063823f0f55fcfc8b675f551fd342f5",
1407
- "tools/nexowatt-user-area-selftest.cjs": "8c1c86c0b3de59f09ad866bbda0e2d8702896f56a4593bbbdb540d3eceef673b",
1408
- "tools/nexowatt-validate-package.cjs": "97de7ed0308d88d9db0401136acde98136907fb2ae4481a5e08ed57dbb6b6a34",
1408
+ "tools/nexowatt-user-area-selftest.cjs": "eb66de5932128d12b489bace4a53af8cb756033f069c873d605d2f6ed9ad7b82",
1409
+ "tools/nexowatt-v7108-ui-foundation-selftest.cjs": "6085c14a03185a6b84e34e6b65a30a0b92595a6d62c68ca46fb1d03ffc15781c",
1410
+ "tools/nexowatt-validate-package.cjs": "6ebef1a4c77dea4c72d832288533f31bd9a001b8b799f4825ca547747ac929f8",
1409
1411
  "tools/nexowatt-value-column-selftest.cjs": "29d0a9bbea05a87dcf8ee09c86cc81acb6c59e1e34801890768f5e342083871a",
1410
1412
  "tools/nexowatt-version-sync-selftest.cjs": "65d7c8634b6d5581f337365e13a1a9432c7d47dbf5aebc237886730c32ba5e94",
1411
1413
  "tsconfig.build.json": "d3a31263975a13de77b97af9ff246d89931f3abb594047be2739cf11378b97f5",
@@ -0,0 +1,9 @@
1
+ # NPM publication 7.10.7
2
+
3
+ 1. Use a freshly extracted repository ZIP.
4
+ 2. Run `npm publish --dry-run`.
5
+ 3. Confirm version `7.10.7`, complete `build/` runtime and all active `adminWww` runtime files.
6
+ 4. Verify the Installer EMS self-test and role-security self-test are successful.
7
+ 5. Publish with `npm publish` only after the dry run succeeds.
8
+
9
+ No `npm install`, `npm ci`, `tsc` or `tsx` is required for the sealed prebuilt release.
@@ -0,0 +1,7 @@
1
+ # NexoWatt EOS Admin 7.10.7 – stability and RBAC baseline
2
+
3
+ This release retains the validated crash, package, update-placement, Admin-rights and End User read-only fixes from 7.10.2–7.10.6.
4
+
5
+ Role decisions continue to come exclusively from the authenticated `/nexowatt/security/context` response. Administrator remains the unconditional full-rights path. End User datapoints remain read-only in frontend and backend. Installer receives EMS App-Center access, while Simulation, License, expert mode, ioBroker Admin, XTerm and account administration remain restricted.
6
+
7
+ Menu edits continue to use the adapter state and must never write `system.config`.
@@ -0,0 +1,12 @@
1
+ # Release Acceptance 7.10.7
2
+
3
+ - [ ] Admin retains unrestricted access and all existing controls.
4
+ - [ ] Installer can open and use the EMS App-Center.
5
+ - [ ] Installer cannot open Simulation or License.
6
+ - [ ] Installer does not see expert mode, ioBroker Admin, XTerm or Users/Rights.
7
+ - [ ] End User cannot open EMS App-Center, Simulation or License.
8
+ - [ ] End User datapoints remain read-only and action icons remain hidden.
9
+ - [ ] End User session scrubbing on port 8188 remains active.
10
+ - [ ] Pencil navigation edits do not restart EOS Admin.
11
+ - [ ] Backup navigation follows the enabled state of the backup instance.
12
+ - [ ] `npm publish --dry-run` succeeds from a fresh extraction.
@@ -0,0 +1,19 @@
1
+ # NexoWatt EOS Admin 7.10.7
2
+
3
+ ## Installateurbereich
4
+
5
+ - Der Installateur kann **EMS Apps öffnen** und das EMS App-Center wie der Administrator verwenden.
6
+ - Die Freigabe gilt ausschließlich für das EMS App-Center.
7
+ - Simulation und Lizenzverwaltung bleiben ausschließlich für Administratoren verfügbar.
8
+ - Der Installateur erhält weiterhin keinen Expertenmodus, keinen ioBroker-Admin-Zugang, kein XTerm und keine Benutzer-/Rechteverwaltung.
9
+
10
+ ## Bestehende Rollen bleiben unverändert
11
+
12
+ - Administrator: vollständige Rechte und alle bisherigen Funktionen.
13
+ - Endkunde: Datenpunkte nur lesend; App-Center, Simulation und Lizenz bleiben vollständig gesperrt.
14
+ - Der Endkunden-Sitzungsschutz auf Port 8188 bleibt aktiv; nur der Installateur wird davon für die EMS-Nutzung ausgenommen.
15
+
16
+ ## Veröffentlichung
17
+
18
+ - Neue npm-Version 7.10.7, da 7.10.6 bereits veröffentlicht ist.
19
+ - Release-Dateien, Browser-Cache-Tags, Repository-Eintrag und Prebuilt-Manifest sind auf 7.10.7 synchronisiert.
@@ -1,12 +1,14 @@
1
- # NexoWatt EOS role matrix 7.10.6
1
+ # NexoWatt EOS role matrix 7.10.7
2
2
 
3
3
  | Capability | Admin | Installer | End User |
4
4
  |---|---:|---:|---:|
5
5
  | Datapoints read | Yes | Yes | Yes |
6
6
  | Datapoints write/edit | Yes | Yes | No |
7
+ | EMS App-Center | Yes | Yes | No |
8
+ | Simulation | Yes | No | No |
9
+ | License administration | Yes | No | No |
7
10
  | Expert mode | Yes | No | No |
8
11
  | ioBroker Admin / XTerm | Yes | No | No |
9
- | App Center / License / Simulation | Yes | No | No |
10
12
  | Users, groups, passwords | Yes | No | No |
11
13
  | Smart Home structure | Yes | Yes | Yes |
12
14
  | Navigation layout editing | Yes | No | No |
@@ -1550,3 +1550,335 @@ html.eos-app.eos-route-intro #app-paper {
1550
1550
  html.eos-route-intro .eos-native-intro-grid { position: relative !important; width:100% !important; padding-bottom:72px !important; overflow:visible !important; }
1551
1551
  html.eos-route-intro .eos-overview-edit-controls { position:absolute !important; right:16px !important; bottom:16px !important; z-index:3 !important; padding:6px !important; border:1px solid rgba(0,229,138,.24) !important; border-radius:16px !important; background:rgba(3,23,34,.94) !important; }
1552
1552
  html.eos-route-intro .eos-overview-edit-controls .MuiFab-root { position:static !important; inset:auto !important; margin:0 !important; }
1553
+
1554
+
1555
+
1556
+
1557
+ /* NexoWatt EOS 7.10.8 – modern core operating surfaces.
1558
+ These rules are presentation-only: native ioBroker/EOS event handlers,
1559
+ accordions, state editors and virtualized tables remain authoritative. */
1560
+
1561
+ /* Structure is intentionally unavailable in this EOS foundation release. */
1562
+ html.eos-app [data-eos-tab="tab-enums"],
1563
+ html.eos-app a[href="#tab-enums"],
1564
+ html.eos-app a[href="#/tab-enums"],
1565
+ html.eos-app .nexowatt-native-nav-item:has(a[href*="tab-enums"]) {
1566
+ display: none !important;
1567
+ }
1568
+
1569
+ .eos-technical-surface-header {
1570
+ position: sticky;
1571
+ top: 0;
1572
+ z-index: 80;
1573
+ box-sizing: border-box;
1574
+ min-height: 104px;
1575
+ display: grid;
1576
+ grid-template-columns: 58px minmax(0, 1fr) auto;
1577
+ align-items: center;
1578
+ gap: 16px;
1579
+ margin: 12px 14px 14px;
1580
+ padding: 16px 20px;
1581
+ color: #effcff;
1582
+ border: 1px solid rgba(0, 229, 138, .25);
1583
+ border-radius: 19px;
1584
+ background:
1585
+ radial-gradient(circle at 4% 20%, rgba(0, 229, 138, .16), transparent 31%),
1586
+ radial-gradient(circle at 92% 20%, rgba(69, 213, 255, .10), transparent 30%),
1587
+ linear-gradient(135deg, rgba(7, 31, 45, .97), rgba(3, 15, 27, .97));
1588
+ box-shadow: 0 15px 34px rgba(0, 0, 0, .28), inset 0 1px 0 rgba(255, 255, 255, .045);
1589
+ backdrop-filter: blur(16px) saturate(120%);
1590
+ }
1591
+ .eos-technical-surface-icon {
1592
+ width: 54px;
1593
+ height: 54px;
1594
+ display: grid;
1595
+ place-items: center;
1596
+ color: #061923;
1597
+ border: 1px solid rgba(255, 255, 255, .22);
1598
+ border-radius: 17px;
1599
+ background: linear-gradient(135deg, #00e58a, #45d5ff);
1600
+ box-shadow: 0 12px 25px rgba(0, 229, 138, .16), inset 0 1px 0 rgba(255,255,255,.28);
1601
+ }
1602
+ .eos-technical-surface-icon svg {
1603
+ width: 28px;
1604
+ height: 28px;
1605
+ fill: none;
1606
+ stroke: currentColor;
1607
+ stroke-width: 1.9;
1608
+ stroke-linecap: round;
1609
+ stroke-linejoin: round;
1610
+ }
1611
+ .eos-technical-surface-copy { min-width: 0; }
1612
+ .eos-technical-surface-copy > span {
1613
+ display: block;
1614
+ margin-bottom: 3px;
1615
+ color: #55eeb0;
1616
+ font-size: 10px;
1617
+ font-weight: 950;
1618
+ letter-spacing: .18em;
1619
+ }
1620
+ .eos-technical-surface-copy h1 {
1621
+ margin: 0;
1622
+ color: #f2fbff;
1623
+ font-size: clamp(23px, 2.2vw, 32px);
1624
+ line-height: 1.12;
1625
+ }
1626
+ .eos-technical-surface-copy p {
1627
+ margin: 6px 0 0;
1628
+ max-width: 780px;
1629
+ color: #9dbbc8;
1630
+ font-size: 13px;
1631
+ line-height: 1.45;
1632
+ }
1633
+ .eos-technical-surface-meta {
1634
+ min-width: 150px;
1635
+ display: grid;
1636
+ grid-template-columns: 10px 1fr;
1637
+ align-items: center;
1638
+ gap: 1px 8px;
1639
+ padding: 10px 13px;
1640
+ border: 1px solid rgba(133, 193, 218, .17);
1641
+ border-radius: 13px;
1642
+ background: rgba(3, 17, 28, .66);
1643
+ }
1644
+ .eos-technical-surface-meta i {
1645
+ grid-row: 1 / span 2;
1646
+ width: 9px;
1647
+ height: 9px;
1648
+ border-radius: 50%;
1649
+ background: #00e58a;
1650
+ box-shadow: 0 0 12px rgba(0,229,138,.8);
1651
+ }
1652
+ .eos-technical-surface-meta strong { color: #eafaff; font-size: 12px; }
1653
+ .eos-technical-surface-meta small { color: #83a8b8; font-size: 10px; }
1654
+
1655
+ /* Shared technical toolbars. */
1656
+ html.eos-app #app-paper[data-eos-technical-surface] .MuiToolbar-root,
1657
+ html.eos-app #app-paper[data-eos-technical-surface] [role="toolbar"] {
1658
+ min-height: 54px !important;
1659
+ margin: 0 14px 10px !important;
1660
+ padding: 7px 10px !important;
1661
+ gap: 7px !important;
1662
+ color: #eaf9ff !important;
1663
+ border: 1px solid rgba(133, 193, 218, .13) !important;
1664
+ border-radius: 15px !important;
1665
+ background: linear-gradient(180deg, rgba(9, 31, 47, .94), rgba(4, 18, 30, .95)) !important;
1666
+ box-shadow: 0 10px 24px rgba(0,0,0,.20), inset 0 1px 0 rgba(255,255,255,.035) !important;
1667
+ }
1668
+ html.eos-app #app-paper[data-eos-technical-surface] .MuiToolbar-root .MuiIconButton-root,
1669
+ html.eos-app #app-paper[data-eos-technical-surface] [role="toolbar"] button {
1670
+ min-width: 38px;
1671
+ min-height: 38px;
1672
+ color: #dff8ff !important;
1673
+ border: 1px solid rgba(133, 193, 218, .12) !important;
1674
+ border-radius: 11px !important;
1675
+ background: rgba(255,255,255,.025) !important;
1676
+ }
1677
+ html.eos-app #app-paper[data-eos-technical-surface] .MuiToolbar-root .MuiIconButton-root:hover,
1678
+ html.eos-app #app-paper[data-eos-technical-surface] [role="toolbar"] button:hover {
1679
+ color: #fff !important;
1680
+ border-color: rgba(0,229,138,.30) !important;
1681
+ background: rgba(0,229,138,.085) !important;
1682
+ }
1683
+ html.eos-app #app-paper[data-eos-technical-surface] .MuiToolbar-root .MuiInputBase-root,
1684
+ html.eos-app #app-paper[data-eos-technical-surface] [role="toolbar"] input {
1685
+ min-height: 38px !important;
1686
+ border-radius: 10px !important;
1687
+ background: rgba(2, 13, 23, .72) !important;
1688
+ }
1689
+
1690
+ /* Dienste & Instanzen – modern operating cards while preserving every native action. */
1691
+ html.eos-route-instances #app-paper .MuiAccordion-root {
1692
+ margin: 7px 14px !important;
1693
+ overflow: hidden !important;
1694
+ border: 1px solid rgba(133, 193, 218, .14) !important;
1695
+ border-radius: 14px !important;
1696
+ background: linear-gradient(180deg, rgba(10, 32, 48, .94), rgba(5, 20, 32, .95)) !important;
1697
+ box-shadow: 0 9px 22px rgba(0, 0, 0, .17) !important;
1698
+ }
1699
+ html.eos-route-instances #app-paper .MuiAccordion-root::before { display: none !important; }
1700
+ html.eos-route-instances #app-paper .MuiAccordionSummary-root {
1701
+ min-height: 52px !important;
1702
+ padding: 0 14px !important;
1703
+ transition: background .15s ease, border-color .15s ease !important;
1704
+ }
1705
+ html.eos-route-instances #app-paper .MuiAccordionSummary-root:hover {
1706
+ background: rgba(0, 229, 138, .045) !important;
1707
+ }
1708
+ html.eos-route-instances #app-paper .MuiAccordionSummary-root.Mui-expanded {
1709
+ min-height: 54px !important;
1710
+ background: linear-gradient(90deg, rgba(0,229,138,.08), rgba(69,213,255,.035)) !important;
1711
+ }
1712
+ html.eos-route-instances #app-paper .MuiAccordionDetails-root {
1713
+ padding: 15px 18px 18px !important;
1714
+ border-top: 1px solid rgba(133, 193, 218, .12) !important;
1715
+ background: rgba(2, 14, 24, .54) !important;
1716
+ }
1717
+ html.eos-route-instances #app-paper .eos-service-row {
1718
+ transition: filter .14s ease, box-shadow .14s ease, transform .14s ease !important;
1719
+ }
1720
+ html.eos-route-instances #app-paper .eos-service-row:hover {
1721
+ filter: brightness(1.07);
1722
+ }
1723
+ html.eos-route-instances #app-paper tr.eos-service-row > td {
1724
+ border-top: 1px solid rgba(133, 193, 218, .09) !important;
1725
+ border-bottom: 1px solid rgba(1, 8, 14, .35) !important;
1726
+ }
1727
+ html.eos-route-instances #app-paper tr.eos-service-row > td:first-child { border-radius: 10px 0 0 10px; }
1728
+ html.eos-route-instances #app-paper tr.eos-service-row > td:last-child { border-radius: 0 10px 10px 0; }
1729
+ html.eos-route-instances #app-paper .eos-service-row-expanded {
1730
+ box-shadow: inset 3px 0 0 rgba(0,229,138,.62) !important;
1731
+ }
1732
+ html.eos-route-instances #app-paper .MuiTableContainer-root,
1733
+ html.eos-route-instances #app-paper [role="grid"] {
1734
+ margin: 0 14px 14px !important;
1735
+ overflow: auto !important;
1736
+ border: 1px solid rgba(133, 193, 218, .12) !important;
1737
+ border-radius: 15px !important;
1738
+ background: rgba(2, 14, 24, .42) !important;
1739
+ }
1740
+ html.eos-route-instances #app-paper .MuiTableHead-root .MuiTableCell-root {
1741
+ position: sticky;
1742
+ top: 0;
1743
+ z-index: 4;
1744
+ background: rgba(7, 29, 43, .97) !important;
1745
+ }
1746
+
1747
+ /* Datenpunkte – calm, readable technical tree/grid. */
1748
+ html.eos-route-objects #app-paper [role="grid"],
1749
+ html.eos-route-objects #app-paper [role="treegrid"],
1750
+ html.eos-route-objects #app-paper .MuiDataGrid-root,
1751
+ html.eos-route-objects #app-paper .ReactVirtualized__Grid {
1752
+ border-color: rgba(133, 193, 218, .15) !important;
1753
+ background: linear-gradient(180deg, rgba(5, 21, 34, .82), rgba(2, 13, 23, .90)) !important;
1754
+ }
1755
+ html.eos-route-objects #app-paper .MuiDataGrid-columnHeaders,
1756
+ html.eos-route-objects #app-paper [role="columnheader"],
1757
+ html.eos-route-objects #app-paper thead th {
1758
+ color: #e8f8ff !important;
1759
+ font-weight: 850 !important;
1760
+ background: linear-gradient(180deg, rgba(13, 42, 59, .97), rgba(6, 25, 39, .97)) !important;
1761
+ border-bottom-color: rgba(0, 229, 138, .20) !important;
1762
+ }
1763
+ html.eos-route-objects #app-paper .eos-datapoint-row,
1764
+ html.eos-route-objects #app-paper .MuiDataGrid-row,
1765
+ html.eos-route-objects #app-paper [role="row"] {
1766
+ transition: background .12s ease, box-shadow .12s ease !important;
1767
+ }
1768
+ html.eos-route-objects #app-paper .eos-datapoint-row:hover,
1769
+ html.eos-route-objects #app-paper .MuiDataGrid-row:hover,
1770
+ html.eos-route-objects #app-paper [role="row"]:hover {
1771
+ background: rgba(69, 213, 255, .045) !important;
1772
+ }
1773
+ html.eos-route-objects #app-paper .Mui-selected,
1774
+ html.eos-route-objects #app-paper [aria-selected="true"] {
1775
+ color: #f4ffff !important;
1776
+ background: linear-gradient(90deg, rgba(0, 229, 138, .19), rgba(69, 213, 255, .08)) !important;
1777
+ box-shadow: inset 3px 0 0 #00e58a !important;
1778
+ }
1779
+ html.eos-route-objects #app-paper .eos-object-value-cell {
1780
+ min-height: 30px !important;
1781
+ padding: 3px 7px !important;
1782
+ border: 1px solid transparent !important;
1783
+ border-radius: 8px !important;
1784
+ font-variant-numeric: tabular-nums;
1785
+ }
1786
+ html.eos-route-objects #app-paper .eos-object-value-cell[data-eos-object-writable="1"] {
1787
+ border-color: rgba(0,229,138,.12) !important;
1788
+ background: rgba(0,229,138,.035) !important;
1789
+ }
1790
+ html.eos-route-objects #app-paper input,
1791
+ html.eos-route-objects #app-paper .MuiSelect-select {
1792
+ border-radius: 9px !important;
1793
+ }
1794
+ html.eos-role-enduser.eos-route-objects #app-paper[data-eos-datapoints-readonly]::before {
1795
+ content: 'NUR LESEN';
1796
+ position: sticky;
1797
+ top: 112px;
1798
+ z-index: 75;
1799
+ float: right;
1800
+ margin: 0 24px -32px 0;
1801
+ padding: 6px 10px;
1802
+ color: #89b5c5;
1803
+ font-size: 9px;
1804
+ font-weight: 950;
1805
+ letter-spacing: .13em;
1806
+ border: 1px solid rgba(133,193,218,.18);
1807
+ border-radius: 999px;
1808
+ background: rgba(3,17,28,.88);
1809
+ pointer-events: none;
1810
+ }
1811
+
1812
+ /* Systemlogs – diagnostic stream with severity accenting. */
1813
+ html.eos-route-logs #app-paper .MuiTableContainer-root,
1814
+ html.eos-route-logs #app-paper [role="grid"] {
1815
+ margin: 0 14px 14px !important;
1816
+ overflow: auto !important;
1817
+ border: 1px solid rgba(133, 193, 218, .13) !important;
1818
+ border-radius: 15px !important;
1819
+ background: rgba(2, 13, 22, .72) !important;
1820
+ }
1821
+ html.eos-route-logs #app-paper .MuiTableHead-root .MuiTableCell-root,
1822
+ html.eos-route-logs #app-paper [role="columnheader"] {
1823
+ position: sticky;
1824
+ top: 0;
1825
+ z-index: 5;
1826
+ color: #e9f9ff !important;
1827
+ font-weight: 850 !important;
1828
+ background: rgba(7, 29, 43, .98) !important;
1829
+ border-bottom: 1px solid rgba(0,229,138,.18) !important;
1830
+ }
1831
+ html.eos-route-logs #app-paper .eos-log-row {
1832
+ box-shadow: inset 3px 0 0 rgba(133,193,218,.25) !important;
1833
+ transition: background .12s ease, filter .12s ease !important;
1834
+ }
1835
+ html.eos-route-logs #app-paper .eos-log-row:hover { filter: brightness(1.08); }
1836
+ html.eos-route-logs #app-paper .eos-log-row-error {
1837
+ background: rgba(255, 77, 103, .075) !important;
1838
+ box-shadow: inset 3px 0 0 #ff4d67 !important;
1839
+ }
1840
+ html.eos-route-logs #app-paper .eos-log-row-warn {
1841
+ background: rgba(255, 201, 51, .06) !important;
1842
+ box-shadow: inset 3px 0 0 #ffc933 !important;
1843
+ }
1844
+ html.eos-route-logs #app-paper .eos-log-row-info {
1845
+ box-shadow: inset 3px 0 0 rgba(69, 213, 255, .55) !important;
1846
+ }
1847
+ html.eos-route-logs #app-paper .eos-log-row-debug {
1848
+ opacity: .78;
1849
+ box-shadow: inset 3px 0 0 rgba(157, 181, 193, .35) !important;
1850
+ }
1851
+ html.eos-route-logs #app-paper .eos-log-row td,
1852
+ html.eos-route-logs #app-paper .eos-log-row [role="cell"] {
1853
+ font-variant-numeric: tabular-nums;
1854
+ border-bottom-color: rgba(133,193,218,.075) !important;
1855
+ }
1856
+ html.eos-route-logs #app-paper pre,
1857
+ html.eos-route-logs #app-paper code {
1858
+ color: #dff7ff;
1859
+ font-family: ui-monospace, SFMono-Regular, Menlo, Consolas, monospace;
1860
+ }
1861
+
1862
+ @media (max-width: 850px) {
1863
+ .eos-technical-surface-header {
1864
+ grid-template-columns: 46px minmax(0, 1fr);
1865
+ min-height: 92px;
1866
+ margin: 9px;
1867
+ padding: 14px;
1868
+ gap: 12px;
1869
+ border-radius: 16px;
1870
+ }
1871
+ .eos-technical-surface-icon { width: 44px; height: 44px; border-radius: 13px; }
1872
+ .eos-technical-surface-icon svg { width: 23px; height: 23px; }
1873
+ .eos-technical-surface-meta { grid-column: 1 / -1; min-width: 0; }
1874
+ html.eos-app #app-paper[data-eos-technical-surface] .MuiToolbar-root,
1875
+ html.eos-app #app-paper[data-eos-technical-surface] [role="toolbar"],
1876
+ html.eos-route-instances #app-paper .MuiAccordion-root,
1877
+ html.eos-route-instances #app-paper .MuiTableContainer-root,
1878
+ html.eos-route-instances #app-paper [role="grid"],
1879
+ html.eos-route-logs #app-paper .MuiTableContainer-root,
1880
+ html.eos-route-logs #app-paper [role="grid"] {
1881
+ margin-left: 9px !important;
1882
+ margin-right: 9px !important;
1883
+ }
1884
+ }