omegga 1.5.2 → 1.6.0

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 (95) hide show
  1. package/CHANGELOG.md +19 -2
  2. package/bin/omegga +1 -1
  3. package/dist/cli/terminal.js +46 -0
  4. package/dist/cli/terminal.js.map +1 -1
  5. package/dist/omegga/commandInjector.js +13 -6
  6. package/dist/omegga/commandInjector.js.map +1 -1
  7. package/dist/omegga/player.js +2 -2
  8. package/dist/omegga/player.js.map +1 -1
  9. package/dist/plugin.js.map +1 -1
  10. package/dist/webserver/backend/database.js +219 -7
  11. package/dist/webserver/backend/database.js.map +1 -1
  12. package/dist/webserver/backend/events.js +1 -1
  13. package/dist/webserver/backend/events.js.map +1 -1
  14. package/dist/webserver/backend/index.js +120 -2
  15. package/dist/webserver/backend/index.js.map +1 -1
  16. package/dist/webserver/backend/permissions.js +74 -0
  17. package/dist/webserver/backend/permissions.js.map +1 -0
  18. package/dist/webserver/backend/router/chat.js +9 -7
  19. package/dist/webserver/backend/router/chat.js.map +1 -1
  20. package/dist/webserver/backend/router/index.js +3 -1
  21. package/dist/webserver/backend/router/index.js.map +1 -1
  22. package/dist/webserver/backend/router/mfa.js +162 -0
  23. package/dist/webserver/backend/router/mfa.js.map +1 -0
  24. package/dist/webserver/backend/router/player.js +7 -6
  25. package/dist/webserver/backend/router/player.js.map +1 -1
  26. package/dist/webserver/backend/router/plugin.js +14 -10
  27. package/dist/webserver/backend/router/plugin.js.map +1 -1
  28. package/dist/webserver/backend/router/role.js +2 -1
  29. package/dist/webserver/backend/router/role.js.map +1 -1
  30. package/dist/webserver/backend/router/server.js +85 -71
  31. package/dist/webserver/backend/router/server.js.map +1 -1
  32. package/dist/webserver/backend/router/session.js +11 -2
  33. package/dist/webserver/backend/router/session.js.map +1 -1
  34. package/dist/webserver/backend/router/user.js +175 -13
  35. package/dist/webserver/backend/router/user.js.map +1 -1
  36. package/dist/webserver/backend/router/world.js +10 -9
  37. package/dist/webserver/backend/router/world.js.map +1 -1
  38. package/dist/webserver/backend/scopes.js +303 -0
  39. package/dist/webserver/backend/scopes.js.map +1 -0
  40. package/dist/webserver/backend/totp.js +32 -0
  41. package/dist/webserver/backend/totp.js.map +1 -0
  42. package/dist/webserver/backend/trpc.js +47 -4
  43. package/dist/webserver/backend/trpc.js.map +1 -1
  44. package/doc/permissions.md +193 -0
  45. package/package.json +7 -2
  46. package/public/app.html +932 -526
  47. package/public/assets/IconShieldCheck-Bjlm8mX2.js +2 -0
  48. package/public/assets/IconShieldCheck-Bjlm8mX2.js.map +1 -0
  49. package/public/assets/IconWorld-XmQNg6JI.js +2 -0
  50. package/public/assets/IconWorld-XmQNg6JI.js.map +1 -0
  51. package/public/assets/IconWorldPlus-CxGGv2eD.js +2 -0
  52. package/public/assets/IconWorldPlus-CxGGv2eD.js.map +1 -0
  53. package/public/assets/app-DMr_-wik.js +7 -0
  54. package/public/assets/app-DMr_-wik.js.map +1 -0
  55. package/public/assets/auth-CEYiizOt.js +2 -0
  56. package/public/assets/auth-CEYiizOt.js.map +1 -0
  57. package/public/assets/index-BDkarAkX.js +3 -0
  58. package/public/assets/index-BDkarAkX.js.map +1 -0
  59. package/public/assets/{index-2cgXLhrt.js → index-DEL-PD_8.js} +2 -2
  60. package/public/assets/{index-2cgXLhrt.js.map → index-DEL-PD_8.js.map} +1 -1
  61. package/public/assets/index-D_STNela.js +2 -0
  62. package/public/assets/index-D_STNela.js.map +1 -0
  63. package/public/assets/index-Dkh3HiBz.js +4 -0
  64. package/public/assets/index-Dkh3HiBz.js.map +1 -0
  65. package/public/assets/shared/@components-CgsSYMe6.js +2 -0
  66. package/public/assets/shared/@components-CgsSYMe6.js.map +1 -0
  67. package/public/assets/shared/@hooks-DT93N7wd.js +2 -0
  68. package/public/assets/shared/{@hooks-Ch_hJYh0.js.map → @hooks-DT93N7wd.js.map} +1 -1
  69. package/public/assets/shared/@tabler_icons-react-DrVFX3uL.js +3 -0
  70. package/public/assets/shared/{@tabler_icons-react-iQk11eD_.js.map → @tabler_icons-react-DrVFX3uL.js.map} +1 -1
  71. package/public/assets/shared/{wouter-CUC1caxu.js → wouter-CNISJ5i6.js} +2 -2
  72. package/public/assets/shared/wouter-CNISJ5i6.js.map +1 -0
  73. package/public/assets/useHasScope-BOdFktko.js +2 -0
  74. package/public/assets/useHasScope-BOdFktko.js.map +1 -0
  75. package/public/auth.html +97 -33
  76. package/templates/safe-ts/omegga.d.ts +1 -1
  77. package/public/assets/IconArrowRight-BuVxhqKX.js +0 -2
  78. package/public/assets/IconArrowRight-BuVxhqKX.js.map +0 -1
  79. package/public/assets/IconWorld-B6GK5qpx.js +0 -2
  80. package/public/assets/IconWorld-B6GK5qpx.js.map +0 -1
  81. package/public/assets/IconWorldPlus-Dkos72Ws.js +0 -2
  82. package/public/assets/IconWorldPlus-Dkos72Ws.js.map +0 -1
  83. package/public/assets/app-CLZ-5FIi.js +0 -6
  84. package/public/assets/app-CLZ-5FIi.js.map +0 -1
  85. package/public/assets/auth-6N37o421.js +0 -2
  86. package/public/assets/auth-6N37o421.js.map +0 -1
  87. package/public/assets/index-DLZ8-XzO.js +0 -4
  88. package/public/assets/index-DLZ8-XzO.js.map +0 -1
  89. package/public/assets/index-DY750sgZ.js +0 -2
  90. package/public/assets/index-DY750sgZ.js.map +0 -1
  91. package/public/assets/shared/@components-DPHARroA.js +0 -2
  92. package/public/assets/shared/@components-DPHARroA.js.map +0 -1
  93. package/public/assets/shared/@hooks-Ch_hJYh0.js +0 -2
  94. package/public/assets/shared/@tabler_icons-react-iQk11eD_.js +0 -3
  95. package/public/assets/shared/wouter-CUC1caxu.js.map +0 -1
package/public/app.html CHANGED
@@ -15,643 +15,674 @@
15
15
  /* Warning */
16
16
  /* Button */
17
17
  /* Element */
18
- .background {
19
- position: fixed;
20
- left: 0;
21
- top: 0;
22
- width: 100%;
23
- height: 100%;
24
- overflow: visible;
25
- background-image: url("/assets/auth_bg-DJZN1T-H.webp");
26
- background-repeat: no-repeat;
27
- background-attachment: fixed;
28
- background-size: cover;
29
- background-position: 50% 50%;
30
- }
31
- .bg-img {
32
- position: absolute;
33
- filter: blur(20px);
34
- left: -40px;
35
- top: -40px;
36
- width: calc(100% + 80px);
37
- height: calc(100% + 80px);
38
- object-fit: cover;
18
+ @font-face {
19
+ font-family: "Glacial Indifference";
20
+ src: url("/assets/GlacialIndifferenceBold-DhenBmgZ.ttf") format("truetype");
21
+ font-weight: bold;
22
+ font-style: normal;
39
23
  }
40
- .version {
41
- position: absolute;
42
- top: 5px;
43
- right: 5px;
44
- font-weight: 200;
45
- font-size: 12px;
46
- color: rgba(255, 255, 255, 0.5);
47
- text-shadow: 0 0 2px rgba(0, 0, 0, 0.5);
24
+ @font-face {
25
+ font-family: "Glacial Indifference";
26
+ src: url("/assets/GlacialIndifferenceItalic-BApAEtVA.otf") format("opentype");
27
+ font-weight: normal;
28
+ font-style: italic;
48
29
  }
49
- @media (prefers-color-scheme: dark) {
50
- .background {
51
- background-image: url("/assets/dark_bg-uu5tZDxN.webp");
52
- }
53
- .background .light {
54
- display: none;
55
- }
30
+ @font-face {
31
+ font-family: "Glacial Indifference";
32
+ src: url("/assets/GlacialIndifferenceMedium-CALcoUYm.otf") format("opentype");
33
+ font-weight: normal;
34
+ font-style: normal;
56
35
  }
57
- @media (prefers-color-scheme: light) {
58
- .dark {
59
- display: none;
60
- }
36
+ @font-face {
37
+ font-family: "Glacial Indifference";
38
+ src: url("/assets/GlacialIndifferenceRegular-DynFsoUc.ttf") format("truetype");
39
+ font-weight: normal;
40
+ font-style: normal;
61
41
  }
62
- .button {
63
- display: flex;
64
- align-items: center;
65
- justify-content: center;
66
- text-transform: uppercase;
67
- height: 32px;
68
- font-size: 24px;
69
- border-radius: 16px;
70
- box-sizing: border-box;
71
- color: #ffffff;
42
+ @font-face {
43
+ font-family: "Roboto";
44
+ src: url("/assets/RobotoBold-DB1hqCFM.ttf") format("truetype");
72
45
  font-weight: bold;
73
- padding: 0 16px;
74
- cursor: pointer;
75
- user-select: none;
76
- }
77
- .button.boxy {
78
- border-radius: 8px;
79
- padding: 0 8px;
46
+ font-style: normal;
80
47
  }
81
- .button:not(:last-child) {
82
- margin-right: 8px;
48
+ @font-face {
49
+ font-family: "Roboto";
50
+ src: url("/assets/RobotoItalic-DIrf6xfk.ttf") format("truetype");
51
+ font-weight: normal;
52
+ font-style: italic;
83
53
  }
84
- .button:not(.icon) .tabler-icon {
85
- margin-right: 8px;
54
+ @font-face {
55
+ font-family: "Roboto";
56
+ src: url("/assets/RobotoRegular-CGSfnFoJ.ttf") format("truetype");
57
+ font-weight: normal;
58
+ font-style: normal;
86
59
  }
87
- .button.icon {
88
- border-radius: 8px;
89
- padding: 0;
90
- width: 32px;
91
- min-width: 32px;
60
+ body {
61
+ font-family: "Glacial Indifference";
92
62
  }
93
- .button.disabled {
94
- opacity: 50%;
95
- cursor: default;
96
- pointer-events: none;
63
+ :root {
64
+ --br-bg-primary: theme.$br-bg-primary;
65
+ --br-bg-primary-alt: theme.$br-bg-primary-alt;
66
+ --br-bg-secondary: theme.$br-bg-secondary;
67
+ --br-bg-secondary-alt: theme.$br-bg-secondary-alt;
68
+ --br-bg-footer: theme.$br-bg-footer;
69
+ --br-bg-header: theme.$br-bg-header;
70
+ --br-fg-footer: theme.$br-fg-footer;
71
+ --br-fg-header: theme.$br-fg-header;
72
+ --br-header-font: theme.$br-header-font;
73
+ --br-header-height: theme.$br-header-height;
74
+ --br-footer-font: theme.$br-footer-font;
75
+ --br-footer-height: theme.$br-footer-height;
76
+ --br-radius-sm: theme.$br-radius-sm;
77
+ --br-radius-md: theme.$br-radius-md;
78
+ --br-radius-lg: theme.$br-radius-lg;
79
+ --br-boring-button-fg: theme.$br-boring-button-fg;
80
+ --br-button-fg: theme.$br-button-fg;
81
+ --br-inverted-fg: theme.$br-inverted-fg;
82
+ --br-main-normal: theme.$br-main-normal;
83
+ --br-main-hover: theme.$br-main-hover;
84
+ --br-main-pressed: theme.$br-main-pressed;
85
+ --br-main-disabled: theme.$br-main-disabled;
86
+ --br-info-normal: theme.$br-info-normal;
87
+ --br-info-hover: theme.$br-info-hover;
88
+ --br-info-pressed: theme.$br-info-pressed;
89
+ --br-info-disabled: theme.$br-info-disabled;
90
+ --br-error-normal: theme.$br-error-normal;
91
+ --br-error-hover: theme.$br-error-hover;
92
+ --br-error-pressed: theme.$br-error-pressed;
93
+ --br-error-disabled: theme.$br-error-disabled;
94
+ --br-warn-normal: theme.$br-warn-normal;
95
+ --br-warn-hover: theme.$br-warn-hover;
96
+ --br-warn-pressed: theme.$br-warn-pressed;
97
+ --br-warn-disabled: theme.$br-warn-disabled;
98
+ --br-button-normal: theme.$br-button-normal;
99
+ --br-button-hover: theme.$br-button-hover;
100
+ --br-button-pressed: theme.$br-button-pressed;
101
+ --br-button-disabled: theme.$br-button-disabled;
102
+ --br-element-normal: theme.$br-element-normal;
103
+ --br-element-fg: theme.$br-element-fg;
104
+ --br-element-pressed: theme.$br-element-pressed;
105
+ --br-element-overlay: theme.$br-element-overlay;
106
+ --br-element-hover: theme.$br-element-hover;
107
+ --br-element-bg: theme.$br-element-bg;
108
+ --br-element-popout-bg: theme.$br-element-popout-bg;
109
+ --br-element-header-bg: theme.$br-element-header-bg;
110
+ --br-element-footer-bg: theme.$br-element-footer-bg;
111
+ --br-element-height: theme.$br-element-height;
112
+ --br-element-font: theme.$br-element-font;
97
113
  }
98
- .button .button-content {
99
- display: flex;
100
- text-align: center;
101
- align-items: center;
102
- justify-content: center;
114
+ html,
115
+ body {
116
+ margin: 0;
117
+ padding: 0;
103
118
  }
104
- .button:not(.disabled):active .button-content {
105
- padding-top: 4px;
119
+ html {
120
+ width: 100%;
121
+ height: 100%;
122
+ display: table;
106
123
  }
107
- .button.warn {
108
- background-color: #ffa10b;
124
+ body {
125
+ width: 100%;
126
+ display: table-cell;
127
+ position: relative;
128
+ overflow: hidden;
129
+ font-family: "Glacial Indifference";
109
130
  }
110
- .button.warn:hover {
111
- background-color: #ffbd54;
131
+ @media screen and (max-width: 600px) {
132
+ body {
133
+ overflow-y: auto;
134
+ }
112
135
  }
113
- .button.warn:active, .button.warn.disabled {
114
- background-color: #b37108;
136
+ ::-webkit-scrollbar {
137
+ width: 16px;
115
138
  }
116
- .button.main {
117
- background-color: #5da93d;
139
+ ::-webkit-scrollbar-track {
140
+ background-color: #162841;
118
141
  }
119
- .button.main:hover {
120
- background-color: #8dc377;
142
+ ::-webkit-scrollbar-thumb {
143
+ background: #224c7b;
121
144
  }
122
- .button.main:active, .button.main.disabled {
123
- background-color: #41772b;
145
+ ::-webkit-scrollbar-thumb:hover {
146
+ background: #fff;
124
147
  }
125
- .button.info {
126
- background-color: #009bee;
148
+ .generic-container {
149
+ flex: 1;
150
+ position: relative;
151
+ margin-left: 8px;
127
152
  }
128
- .button.info:hover {
129
- background-color: #4cb9f3;
153
+ .stat {
154
+ color: white;
155
+ font-weight: bold;
130
156
  }
131
- .button.info:active, .button.info.disabled {
132
- background-color: #007da7;
157
+ .stats {
158
+ padding: 12px;
159
+ font-size: 24px;
160
+ word-break: break-word;
161
+ background-color: #263f61;
133
162
  }
134
- .button.error {
135
- background-color: #e02d2d;
163
+ .stat b {
164
+ color: #a7bbce;
136
165
  }
137
- .button.error:hover {
138
- background-color: #e96c6c;
166
+ .log-entry {
167
+ font-size: 24px;
168
+ text-shadow: -1px -1px 0 #000, 1px -1px 0 #000, -1px 1px 0 #000, 1px 1px 0 #000;
169
+ word-break: break-all;
139
170
  }
140
- .button.error:active, .button.error.disabled {
141
- background-color: #9d2020;
171
+ .log-entry .user {
172
+ font-weight: bold;
142
173
  }
143
- .button.normal {
144
- background-color: #455a7e;
145
- color: #a7bbce;
174
+ .log-entry .join-message,
175
+ .log-entry .join-message .user {
176
+ color: #3477e3 !important;
146
177
  }
147
- .button.normal:hover {
148
- background-color: #5e7190;
178
+ .log-entry .chat-message {
179
+ color: #ffffff;
149
180
  }
150
- .button.normal:active, .button.normal.disabled {
151
- background-color: #263f61;
181
+ .log-entry .server-message {
182
+ color: #ff00ff;
152
183
  }
153
- .log-entry {
154
- text-decoration: none;
155
- font-family: "Roboto";
184
+ table.br-table {
185
+ font-weight: bold;
186
+ border-collapse: collapse;
187
+ font-size: 24px;
156
188
  }
157
- .log-entry .log-row {
158
- display: flex;
159
- align-items: center;
189
+ table.br-table thead th {
190
+ color: white;
191
+ height: 50px;
192
+ background-color: #1b2f4a;
193
+ white-space: nowrap;
160
194
  }
161
- .log-entry .log-row .user,
162
- .log-entry .log-row .time-link {
163
- text-decoration: none;
195
+ table.br-table th,
196
+ table.br-table td {
197
+ padding: 0 10px;
164
198
  }
165
- .log-entry .log-row .time-link {
166
- display: flex;
167
- align-items: center;
199
+ table.br-table tr td:first-child,
200
+ table.br-table tr th:first-child {
201
+ padding-left: 20px;
168
202
  }
169
- .log-entry .log-row .time-link .tabler-icon {
170
- opacity: 0;
171
- color: white;
203
+ table.br-table tr td:last-child,
204
+ table.br-table tr th:last-child {
205
+ padding-right: 20px;
172
206
  }
173
- .log-entry .log-row .message {
174
- flex: 1;
207
+ table.br-table tbody tr {
208
+ background-color: #131d30;
175
209
  }
176
- .log-entry:hover .log-row {
177
- background: rgba(255, 255, 255, 0.2);
178
- border-radius: 8px;
210
+ table.br-table tbody tr:nth-child(even) {
211
+ background-color: #111a2b;
179
212
  }
180
- .log-entry:hover .log-row .tabler-icon {
181
- opacity: 1;
213
+ table.br-table tbody tr td {
214
+ font-size: 20px;
215
+ color: #a7bbce;
216
+ height: 50px;
217
+ overflow: hidden;
218
+ white-space: nowrap;
182
219
  }
183
- .log-entry.focused .log-row {
184
- border-radius: 8px;
185
- background: #5da93d;
220
+ a,
221
+ :visited {
222
+ color: #0ff;
186
223
  }
187
- .chat-timestamp {
188
- align-self: center;
189
- font-size: 16px;
190
- margin-right: 8px;
191
- font-weight: bold;
192
- text-align: right;
193
- display: inline-block;
194
- width: 75px;
195
- min-width: 75px;
196
- color: #ccc;
224
+ .inputs-list {
225
+ background-color: #162841;
197
226
  }
198
- .dimmer {
227
+ .inputs-list .inputs-item {
199
228
  background-color: #1b2f4a;
200
- width: 100%;
201
- height: 100%;
202
- position: absolute;
203
- top: 0;
204
- left: 0;
205
- background-color: rgba(0, 0, 0, 0.7);
206
- display: none;
207
- align-items: stretch;
208
- z-index: 200;
229
+ display: flex;
230
+ align-items: center;
231
+ justify-content: space-between;
232
+ height: 50px;
233
+ padding: 0 10px;
209
234
  }
210
- .dimmer.visible {
235
+ .inputs-list .inputs-item:nth-child(even) {
236
+ background-color: #182b44;
237
+ }
238
+ .inputs-list .inputs-item label,
239
+ .inputs-list .inputs-item .inputs {
211
240
  display: flex;
241
+ align-items: center;
212
242
  }
213
- .dimmer .dimmer-content {
214
- position: relative;
243
+ .inputs-list .inputs-item .inputs {
215
244
  flex: 1;
216
245
  }
217
- .dropdown {
218
- display: flex;
219
- flex-direction: column;
220
- align-items: stretch;
246
+ .inputs-list .inputs-item .inputs .toggle,
247
+ .inputs-list .inputs-item .inputs .br-input {
248
+ margin-right: 8px;
249
+ }
250
+ .inputs-list .inputs-item label {
251
+ color: #a7bbce;
252
+ min-width: 300px;
253
+ flex: 0.5;
254
+ font-size: 18px;
221
255
  font-weight: bold;
222
- cursor: pointer;
223
- user-select: none;
224
- position: relative;
225
- width: 100%;
256
+ overflow: hidden;
257
+ white-space: nowrap;
226
258
  }
227
- .dropdown:not(:last-child) {
228
- margin-bottom: 0;
259
+ @media screen and (max-width: 1200px) {
260
+ .inputs-list .inputs-item label {
261
+ min-width: 150px;
262
+ }
229
263
  }
230
- .dropdown.disabled {
231
- pointer-events: none;
232
- opacity: 50%;
233
- cursor: default;
264
+ .widgets-container {
265
+ z-index: 100;
266
+ position: relative;
234
267
  }
235
- .dropdown .options {
268
+ .widgets-container .widgets-list {
236
269
  position: absolute;
237
- bottom: 100%;
238
- left: 0;
239
- width: 100%;
240
- max-height: 200px;
241
- overflow-y: auto;
242
- overflow-x: hidden;
243
- z-index: 10;
244
- box-shadow: 0 4px 8px rgba(0, 0, 0, 0.4);
245
- border-radius: 8px;
270
+ top: 100%;
271
+ right: 0;
272
+ background-color: #162841;
273
+ min-width: 200px;
274
+ border-radius: 12px;
246
275
  }
247
- .dropdown .options .green {
248
- background-color: #5da93d;
276
+ .widgets-container .widgets-list > .button {
277
+ justify-content: flex-start;
278
+ white-space: nowrap;
279
+ width: 100%;
280
+ border-radius: 0;
281
+ margin-right: 0;
282
+ box-sizing: border-box;
249
283
  }
250
- .dropdown .options .green:hover {
251
- background: #8dc377;
252
- outline: none;
284
+ .widgets-container .widgets-list > .button:first-child:not(.hidden) {
285
+ border-top-left-radius: 12px;
286
+ border-top-right-radius: 12px;
253
287
  }
254
- .dropdown .options .green:active {
255
- background: #41772b;
256
- outline: none;
288
+ .widgets-container .widgets-list > .button:last-child {
289
+ border-bottom-left-radius: 12px;
290
+ border-bottom-right-radius: 12px;
257
291
  }
258
- .dropdown .option,
259
- .dropdown .selected {
260
- font-family: "Glacial Indifference";
261
- background: #455a7e;
262
- color: #1a2848;
263
- height: 32px;
264
- padding: 2px 12px;
265
- padding-right: 0;
266
- box-sizing: border-box;
267
- font-weight: bold;
268
- font-size: 24px;
292
+ .widgets-container .widgets-list > .button.hidden + .button {
293
+ border-top-left-radius: 12px;
294
+ border-top-right-radius: 12px;
269
295
  }
270
- .dropdown .option:hover,
271
- .dropdown .selected:hover {
272
- background: #5e7190;
273
- outline: none;
296
+ .widgets-container .widgets-list .widget-item {
297
+ border-radius: 12px;
298
+ background-color: #1b2f4a;
299
+ display: flex;
300
+ align-items: center;
301
+ justify-content: space-between;
302
+ height: 50px;
303
+ padding: 0 10px;
274
304
  }
275
- .dropdown .option:active,
276
- .dropdown .selected:active {
277
- background: #263f61;
278
- outline: none;
305
+ .widgets-container .widgets-list .widget-item:nth-child(even) {
306
+ background-color: #182b44;
279
307
  }
280
- .dropdown .selected {
308
+ .widgets-container .widgets-list .widget-item .name {
309
+ text-transform: uppercase;
281
310
  display: flex;
282
- border: none;
283
311
  align-items: center;
284
- border-radius: 8px;
312
+ margin-right: 10px;
285
313
  }
286
- .dropdown .selected .value {
287
- flex: 1;
314
+ .widgets-container .widgets-list .widget-item .name .tabler-icon {
315
+ margin-right: 10px;
288
316
  }
289
- .dropdown .icon {
290
- margin-right: 8px;
317
+ @keyframes spin {
318
+ from {
319
+ transform: rotate(0deg);
320
+ }
321
+ to {
322
+ transform: rotate(360deg);
323
+ }
291
324
  }
292
- .footer {
293
- background-color: #091021;
294
- color: #ffffff;
295
- display: flex;
296
- font-size: 24px;
297
- font-weight: bold;
298
- height: 30px;
299
- padding: 10px;
300
- text-transform: uppercase;
325
+ .spinning {
326
+ animation: spin 1s linear infinite;
327
+ }
328
+ .hidden {
329
+ display: none !important;
330
+ }
331
+ .background {
332
+ position: fixed;
333
+ left: 0;
334
+ top: 0;
335
+ width: 100%;
336
+ height: 100%;
337
+ overflow: visible;
338
+ background-image: url("/assets/auth_bg-DJZN1T-H.webp");
339
+ background-repeat: no-repeat;
340
+ background-attachment: fixed;
341
+ background-size: cover;
342
+ background-position: 50% 50%;
343
+ }
344
+ .bg-img {
345
+ position: absolute;
346
+ filter: blur(20px);
347
+ left: -40px;
348
+ top: -40px;
349
+ width: calc(100% + 80px);
350
+ height: calc(100% + 80px);
351
+ object-fit: cover;
352
+ }
353
+ .version {
354
+ position: absolute;
355
+ top: 5px;
356
+ right: 5px;
357
+ font-weight: 200;
358
+ font-size: 12px;
359
+ color: rgba(255, 255, 255, 0.5);
360
+ text-shadow: 0 0 2px rgba(0, 0, 0, 0.5);
361
+ }
362
+ @media (prefers-color-scheme: dark) {
363
+ .background {
364
+ background-image: url("/assets/dark_bg-uu5tZDxN.webp");
365
+ }
366
+ .background .light {
367
+ display: none;
368
+ }
301
369
  }
302
- .footer.attached {
303
- border-bottom-left-radius: 12px;
304
- border-bottom-right-radius: 12px;
370
+ @media (prefers-color-scheme: light) {
371
+ .dark {
372
+ display: none;
373
+ }
305
374
  }
306
- .header {
307
- align-items: center;
308
- background-color: #091021;
309
- color: #ffffff;
375
+ .button {
310
376
  display: flex;
311
- font-size: 24px;
312
- font-weight: bold;
313
- height: 50px;
314
- padding-left: 20px;
315
- padding-right: 10px;
377
+ align-items: center;
378
+ justify-content: center;
316
379
  text-transform: uppercase;
317
- }
318
- .header.attached {
319
- border-top-left-radius: 12px;
320
- border-top-right-radius: 12px;
321
- }
322
- .input {
323
- display: flex;
324
- flex-direction: column;
325
- align-items: stretch;
380
+ height: 32px;
381
+ font-size: 24px;
382
+ border-radius: 16px;
383
+ box-sizing: border-box;
384
+ color: #ffffff;
326
385
  font-weight: bold;
386
+ padding: 0 16px;
327
387
  cursor: pointer;
328
388
  user-select: none;
329
389
  }
330
- .input:not(:last-child) {
331
- margin-bottom: 0;
390
+ .button.boxy {
391
+ border-radius: 8px;
392
+ padding: 0 8px;
332
393
  }
333
- .input.icon {
334
- border-radius: 0;
394
+ .button:not(:last-child) {
395
+ margin-right: 8px;
396
+ }
397
+ .button:not(.icon) .tabler-icon {
398
+ margin-right: 8px;
399
+ }
400
+ .button.icon {
401
+ border-radius: 8px;
335
402
  padding: 0;
336
403
  width: 32px;
404
+ min-width: 32px;
337
405
  }
338
- .input.disabled {
339
- pointer-events: none;
406
+ .button.disabled {
340
407
  opacity: 50%;
341
408
  cursor: default;
409
+ pointer-events: none;
342
410
  }
343
- .input input {
344
- height: 32px;
345
- font-family: "Glacial Indifference";
346
- padding: 2px 12px;
347
- box-sizing: border-box;
348
- font-weight: bold;
349
- font-size: 24px;
350
- background: #455a7e;
351
- color: #1a2848;
352
- border: none;
353
- border-radius: 8px;
411
+ .button .button-content {
412
+ display: flex;
413
+ text-align: center;
414
+ align-items: center;
415
+ justify-content: center;
354
416
  }
355
- .input input::placeholder {
356
- color: #224c7b;
417
+ .button:not(.disabled):active .button-content {
418
+ padding-top: 4px;
357
419
  }
358
- .input input:focus {
359
- background: #5e7190;
360
- outline: none;
420
+ .button.warn {
421
+ background-color: #ffa10b;
361
422
  }
362
- .input.roboto > input {
363
- font-family: "Roboto";
364
- font-weight: 400;
423
+ .button.warn:hover {
424
+ background-color: #ffbd54;
365
425
  }
366
- .input .icon {
367
- margin-right: 8px;
426
+ .button.warn:active, .button.warn.disabled {
427
+ background-color: #b37108;
368
428
  }
369
- .header > .input input {
370
- height: 32px !important;
429
+ .button.main {
430
+ background-color: #5da93d;
371
431
  }
372
- @font-face {
373
- font-family: "Glacial Indifference";
374
- src: url("/assets/GlacialIndifferenceBold-DhenBmgZ.ttf") format("truetype");
375
- font-weight: bold;
376
- font-style: normal;
432
+ .button.main:hover {
433
+ background-color: #8dc377;
377
434
  }
378
- @font-face {
379
- font-family: "Glacial Indifference";
380
- src: url("/assets/GlacialIndifferenceItalic-BApAEtVA.otf") format("opentype");
381
- font-weight: normal;
382
- font-style: italic;
435
+ .button.main:active, .button.main.disabled {
436
+ background-color: #41772b;
383
437
  }
384
- @font-face {
385
- font-family: "Glacial Indifference";
386
- src: url("/assets/GlacialIndifferenceMedium-CALcoUYm.otf") format("opentype");
387
- font-weight: normal;
388
- font-style: normal;
438
+ .button.info {
439
+ background-color: #009bee;
389
440
  }
390
- @font-face {
391
- font-family: "Glacial Indifference";
392
- src: url("/assets/GlacialIndifferenceRegular-DynFsoUc.ttf") format("truetype");
393
- font-weight: normal;
394
- font-style: normal;
441
+ .button.info:hover {
442
+ background-color: #4cb9f3;
395
443
  }
396
- @font-face {
397
- font-family: "Roboto";
398
- src: url("/assets/RobotoBold-DB1hqCFM.ttf") format("truetype");
399
- font-weight: bold;
400
- font-style: normal;
444
+ .button.info:active, .button.info.disabled {
445
+ background-color: #007da7;
401
446
  }
402
- @font-face {
403
- font-family: "Roboto";
404
- src: url("/assets/RobotoItalic-DIrf6xfk.ttf") format("truetype");
405
- font-weight: normal;
406
- font-style: italic;
447
+ .button.error {
448
+ background-color: #e02d2d;
407
449
  }
408
- @font-face {
450
+ .button.error:hover {
451
+ background-color: #e96c6c;
452
+ }
453
+ .button.error:active, .button.error.disabled {
454
+ background-color: #9d2020;
455
+ }
456
+ .button.normal {
457
+ background-color: #455a7e;
458
+ color: #a7bbce;
459
+ }
460
+ .button.normal:hover {
461
+ background-color: #5e7190;
462
+ }
463
+ .button.normal:active, .button.normal.disabled {
464
+ background-color: #263f61;
465
+ }
466
+ .log-entry {
467
+ text-decoration: none;
409
468
  font-family: "Roboto";
410
- src: url("/assets/RobotoRegular-CGSfnFoJ.ttf") format("truetype");
411
- font-weight: normal;
412
- font-style: normal;
413
469
  }
414
- body {
415
- font-family: "Glacial Indifference";
470
+ .log-entry .log-row {
471
+ display: flex;
472
+ align-items: center;
416
473
  }
417
- :root {
418
- --br-bg-primary: theme.$br-bg-primary;
419
- --br-bg-primary-alt: theme.$br-bg-primary-alt;
420
- --br-bg-secondary: theme.$br-bg-secondary;
421
- --br-bg-secondary-alt: theme.$br-bg-secondary-alt;
422
- --br-bg-footer: theme.$br-bg-footer;
423
- --br-bg-header: theme.$br-bg-header;
424
- --br-fg-footer: theme.$br-fg-footer;
425
- --br-fg-header: theme.$br-fg-header;
426
- --br-header-font: theme.$br-header-font;
427
- --br-header-height: theme.$br-header-height;
428
- --br-footer-font: theme.$br-footer-font;
429
- --br-footer-height: theme.$br-footer-height;
430
- --br-radius-sm: theme.$br-radius-sm;
431
- --br-radius-md: theme.$br-radius-md;
432
- --br-radius-lg: theme.$br-radius-lg;
433
- --br-boring-button-fg: theme.$br-boring-button-fg;
434
- --br-button-fg: theme.$br-button-fg;
435
- --br-inverted-fg: theme.$br-inverted-fg;
436
- --br-main-normal: theme.$br-main-normal;
437
- --br-main-hover: theme.$br-main-hover;
438
- --br-main-pressed: theme.$br-main-pressed;
439
- --br-main-disabled: theme.$br-main-disabled;
440
- --br-info-normal: theme.$br-info-normal;
441
- --br-info-hover: theme.$br-info-hover;
442
- --br-info-pressed: theme.$br-info-pressed;
443
- --br-info-disabled: theme.$br-info-disabled;
444
- --br-error-normal: theme.$br-error-normal;
445
- --br-error-hover: theme.$br-error-hover;
446
- --br-error-pressed: theme.$br-error-pressed;
447
- --br-error-disabled: theme.$br-error-disabled;
448
- --br-warn-normal: theme.$br-warn-normal;
449
- --br-warn-hover: theme.$br-warn-hover;
450
- --br-warn-pressed: theme.$br-warn-pressed;
451
- --br-warn-disabled: theme.$br-warn-disabled;
452
- --br-button-normal: theme.$br-button-normal;
453
- --br-button-hover: theme.$br-button-hover;
454
- --br-button-pressed: theme.$br-button-pressed;
455
- --br-button-disabled: theme.$br-button-disabled;
456
- --br-element-normal: theme.$br-element-normal;
457
- --br-element-fg: theme.$br-element-fg;
458
- --br-element-pressed: theme.$br-element-pressed;
459
- --br-element-overlay: theme.$br-element-overlay;
460
- --br-element-hover: theme.$br-element-hover;
461
- --br-element-bg: theme.$br-element-bg;
462
- --br-element-popout-bg: theme.$br-element-popout-bg;
463
- --br-element-header-bg: theme.$br-element-header-bg;
464
- --br-element-footer-bg: theme.$br-element-footer-bg;
465
- --br-element-height: theme.$br-element-height;
466
- --br-element-font: theme.$br-element-font;
474
+ .log-entry .log-row .user,
475
+ .log-entry .log-row .time-link {
476
+ text-decoration: none;
467
477
  }
468
- html,
469
- body {
470
- margin: 0;
471
- padding: 0;
478
+ .log-entry .log-row .time-link {
479
+ display: flex;
480
+ align-items: center;
472
481
  }
473
- html {
474
- width: 100%;
475
- height: 100%;
476
- display: table;
482
+ .log-entry .log-row .time-link .tabler-icon {
483
+ opacity: 0;
484
+ color: white;
477
485
  }
478
- body {
479
- width: 100%;
480
- display: table-cell;
481
- position: relative;
482
- overflow: hidden;
483
- font-family: "Glacial Indifference";
486
+ .log-entry .log-row .message {
487
+ flex: 1;
484
488
  }
485
- @media screen and (max-width: 600px) {
486
- body {
487
- overflow-y: auto;
488
- }
489
+ .log-entry:hover .log-row {
490
+ background: rgba(255, 255, 255, 0.2);
491
+ border-radius: 8px;
489
492
  }
490
- ::-webkit-scrollbar {
491
- width: 16px;
493
+ .log-entry:hover .log-row .tabler-icon {
494
+ opacity: 1;
492
495
  }
493
- ::-webkit-scrollbar-track {
494
- background-color: #162841;
496
+ .log-entry.focused .log-row {
497
+ border-radius: 8px;
498
+ background: #5da93d;
499
+ }
500
+ .chat-timestamp {
501
+ align-self: center;
502
+ font-size: 16px;
503
+ margin-right: 8px;
504
+ font-weight: bold;
505
+ text-align: right;
506
+ display: inline-block;
507
+ width: 75px;
508
+ min-width: 75px;
509
+ color: #ccc;
495
510
  }
496
- ::-webkit-scrollbar-thumb {
497
- background: #224c7b;
511
+ .dimmer {
512
+ background-color: #1b2f4a;
513
+ width: 100%;
514
+ height: 100%;
515
+ position: absolute;
516
+ top: 0;
517
+ left: 0;
518
+ background-color: rgba(0, 0, 0, 0.7);
519
+ display: none;
520
+ align-items: stretch;
521
+ z-index: 200;
498
522
  }
499
- ::-webkit-scrollbar-thumb:hover {
500
- background: #fff;
523
+ .dimmer.visible {
524
+ display: flex;
501
525
  }
502
- .generic-container {
503
- flex: 1;
526
+ .dimmer .dimmer-content {
504
527
  position: relative;
505
- margin-left: 8px;
528
+ flex: 1;
506
529
  }
507
- .stat {
508
- color: white;
530
+ .dropdown {
531
+ display: flex;
532
+ flex-direction: column;
533
+ align-items: stretch;
509
534
  font-weight: bold;
535
+ cursor: pointer;
536
+ user-select: none;
537
+ position: relative;
510
538
  }
511
- .stats {
512
- padding: 8px;
513
- font-size: 24px;
514
- word-break: break-all;
515
- background-color: #263f61;
516
- }
517
- .stat b {
518
- color: #a7bbce;
539
+ .dropdown:not(:last-child) {
540
+ margin-right: 8px;
519
541
  }
520
- .log-entry {
521
- font-size: 24px;
522
- text-shadow: -1px -1px 0 #000, 1px -1px 0 #000, -1px 1px 0 #000, 1px 1px 0 #000;
523
- word-break: break-all;
542
+ .dropdown.disabled {
543
+ pointer-events: none;
544
+ opacity: 50%;
545
+ cursor: default;
524
546
  }
525
- .log-entry .user {
526
- font-weight: bold;
547
+ .dropdown .options {
548
+ position: absolute;
549
+ bottom: 100%;
550
+ right: 0;
551
+ width: max-content;
552
+ min-width: 100%;
553
+ max-height: 200px;
554
+ overflow-y: auto;
555
+ z-index: 10;
556
+ box-shadow: 0 4px 8px rgba(0, 0, 0, 0.4);
557
+ border-radius: 8px;
527
558
  }
528
- .log-entry .join-message,
529
- .log-entry .join-message .user {
530
- color: #3477e3 !important;
559
+ .dropdown .options .green {
560
+ background-color: #5da93d;
531
561
  }
532
- .log-entry .chat-message {
533
- color: #ffffff;
562
+ .dropdown .options .green:hover {
563
+ background: #8dc377;
564
+ outline: none;
534
565
  }
535
- .log-entry .server-message {
536
- color: #ff00ff;
566
+ .dropdown .options .green:active {
567
+ background: #41772b;
568
+ outline: none;
537
569
  }
538
- table.br-table {
570
+ .dropdown .option,
571
+ .dropdown .selected {
572
+ font-family: "Glacial Indifference";
573
+ background: #455a7e;
574
+ color: #1a2848;
575
+ height: 32px;
576
+ padding: 0 12px;
577
+ box-sizing: border-box;
539
578
  font-weight: bold;
540
- border-collapse: collapse;
541
579
  font-size: 24px;
542
- }
543
- table.br-table thead th {
544
- color: white;
545
- height: 50px;
546
- background-color: #1b2f4a;
580
+ display: flex;
581
+ align-items: center;
582
+ justify-content: flex-start;
547
583
  white-space: nowrap;
548
584
  }
549
- table.br-table th,
550
- table.br-table td {
551
- padding: 0 10px;
552
- }
553
- table.br-table tr td:first-child,
554
- table.br-table tr th:first-child {
555
- padding-left: 20px;
585
+ .dropdown .option .tabler-icon,
586
+ .dropdown .selected .tabler-icon {
587
+ margin-right: 8px;
588
+ flex-shrink: 0;
556
589
  }
557
- table.br-table tr td:last-child,
558
- table.br-table tr th:last-child {
559
- padding-right: 20px;
590
+ .dropdown .option:hover,
591
+ .dropdown .selected:hover {
592
+ background: #5e7190;
593
+ outline: none;
560
594
  }
561
- table.br-table tbody tr {
562
- background-color: #131d30;
595
+ .dropdown .option:active,
596
+ .dropdown .selected:active {
597
+ background: #263f61;
598
+ outline: none;
563
599
  }
564
- table.br-table tbody tr:nth-child(even) {
565
- background-color: #111a2b;
600
+ .dropdown .selected {
601
+ border: none;
602
+ border-radius: 8px;
566
603
  }
567
- table.br-table tbody tr td {
568
- font-size: 20px;
569
- color: #a7bbce;
570
- height: 50px;
571
- overflow: hidden;
572
- white-space: nowrap;
604
+ .dropdown .selected .value {
605
+ flex: 1;
573
606
  }
574
- a,
575
- :visited {
576
- color: #0ff;
607
+ .footer {
608
+ background-color: #091021;
609
+ color: #ffffff;
610
+ display: flex;
611
+ font-size: 24px;
612
+ font-weight: bold;
613
+ height: 30px;
614
+ padding: 10px;
615
+ text-transform: uppercase;
577
616
  }
578
- .inputs-list {
579
- background-color: #162841;
617
+ .footer.attached {
618
+ border-bottom-left-radius: 12px;
619
+ border-bottom-right-radius: 12px;
580
620
  }
581
- .inputs-list .inputs-item {
582
- background-color: #1b2f4a;
583
- display: flex;
621
+ .header {
584
622
  align-items: center;
585
- justify-content: space-between;
623
+ background-color: #091021;
624
+ color: #ffffff;
625
+ display: flex;
626
+ font-size: 24px;
627
+ font-weight: bold;
586
628
  height: 50px;
587
- padding: 0 10px;
629
+ padding-left: 20px;
630
+ padding-right: 10px;
631
+ text-transform: uppercase;
588
632
  }
589
- .inputs-list .inputs-item:nth-child(even) {
590
- background-color: #182b44;
633
+ .header.attached {
634
+ border-top-left-radius: 12px;
635
+ border-top-right-radius: 12px;
591
636
  }
592
- .inputs-list .inputs-item label,
593
- .inputs-list .inputs-item .inputs {
637
+ .input {
594
638
  display: flex;
595
- align-items: center;
596
- }
597
- .inputs-list .inputs-item .inputs {
598
- flex: 1;
599
- }
600
- .inputs-list .inputs-item .inputs .toggle,
601
- .inputs-list .inputs-item .inputs .br-input {
602
- margin-right: 8px;
603
- }
604
- .inputs-list .inputs-item label {
605
- color: #a7bbce;
606
- min-width: 300px;
607
- flex: 0.5;
608
- font-size: 18px;
639
+ flex-direction: column;
640
+ align-items: stretch;
609
641
  font-weight: bold;
610
- overflow: hidden;
611
- white-space: nowrap;
642
+ cursor: pointer;
643
+ user-select: none;
612
644
  }
613
- .widgets-container {
614
- z-index: 100;
615
- display: flex;
616
- flex-direction: column;
617
- align-items: flex-end;
645
+ .input:not(:last-child) {
646
+ margin-bottom: 0;
618
647
  }
619
- .widgets-container .widgets-list {
620
- background-color: #162841;
621
- margin-right: 8px;
622
- min-width: 200px;
623
- border-radius: 12px;
648
+ .input.icon {
649
+ border-radius: 0;
650
+ padding: 0;
651
+ width: 32px;
624
652
  }
625
- .widgets-container .widgets-list .widget-item {
626
- border-radius: 12px;
627
- background-color: #1b2f4a;
628
- display: flex;
629
- align-items: center;
630
- justify-content: space-between;
631
- height: 50px;
632
- padding: 0 10px;
653
+ .input.disabled {
654
+ pointer-events: none;
655
+ opacity: 50%;
656
+ cursor: default;
633
657
  }
634
- .widgets-container .widgets-list .widget-item:nth-child(even) {
635
- background-color: #182b44;
658
+ .input input {
659
+ height: 32px;
660
+ font-family: "Glacial Indifference";
661
+ padding: 2px 12px;
662
+ box-sizing: border-box;
663
+ font-weight: bold;
664
+ font-size: 24px;
665
+ background: #455a7e;
666
+ color: #1a2848;
667
+ border: none;
668
+ border-radius: 8px;
636
669
  }
637
- .widgets-container .widgets-list .widget-item .name {
638
- text-transform: uppercase;
639
- display: flex;
640
- align-items: center;
670
+ .input input::placeholder {
671
+ color: rgb(28.4777070064, 63.6560509554, 103.0222929936);
641
672
  }
642
- .widgets-container .widgets-list .widget-item .name .tabler-icon {
643
- margin-right: 10px;
673
+ .input input:focus {
674
+ background: #5e7190;
675
+ outline: none;
644
676
  }
645
- @keyframes spin {
646
- from {
647
- transform: rotate(0deg);
648
- }
649
- to {
650
- transform: rotate(360deg);
651
- }
677
+ .input.roboto > input {
678
+ font-family: "Roboto";
679
+ font-weight: 400;
680
+ }
681
+ .input .icon {
682
+ margin-right: 8px;
652
683
  }
653
- .spinning {
654
- animation: spin 1s linear infinite;
684
+ .header > .input input {
685
+ height: 32px !important;
655
686
  }
656
687
  .br-list-input {
657
688
  display: flex;
@@ -738,6 +769,7 @@ a,
738
769
  width: 500px;
739
770
  opacity: 0;
740
771
  border-radius: 12px;
772
+ overflow: hidden;
741
773
  }
742
774
  .modal.visible {
743
775
  opacity: 1;
@@ -774,6 +806,19 @@ a,
774
806
  border-bottom-left-radius: 0;
775
807
  border-bottom-right-radius: 0;
776
808
  }
809
+ .user-menu a,
810
+ .user-menu a:visited {
811
+ text-decoration: none !important;
812
+ color: inherit !important;
813
+ }
814
+ .user-menu-name {
815
+ margin: 0 4px;
816
+ }
817
+ @media screen and (max-width: 600px) {
818
+ .user-menu-name {
819
+ display: none;
820
+ }
821
+ }
777
822
  .main-content {
778
823
  display: flex;
779
824
  flex: 1;
@@ -984,13 +1029,6 @@ a,
984
1029
  margin-top: -8px;
985
1030
  margin-right: 8px;
986
1031
  }
987
- @media screen and (max-width: 600px) {
988
- .main-menu-buttons {
989
- margin-right: 0;
990
- width: 100%;
991
- min-width: 100%;
992
- }
993
- }
994
1032
  .menu-button {
995
1033
  display: flex;
996
1034
  align-items: center;
@@ -1046,6 +1084,32 @@ a,
1046
1084
  .menu-button:not(.disabled):active .menu-button-content {
1047
1085
  padding-top: 4px;
1048
1086
  }
1087
+ @media screen and (max-width: 1400px) {
1088
+ .main-menu-buttons {
1089
+ width: 200px;
1090
+ }
1091
+ .menu-button {
1092
+ width: 200px;
1093
+ height: 40px;
1094
+ font-size: 18px;
1095
+ }
1096
+ .menu-button .ti,
1097
+ .menu-button .tabler-icon {
1098
+ width: 28px;
1099
+ height: 28px;
1100
+ margin-right: 12px;
1101
+ }
1102
+ }
1103
+ @media screen and (max-width: 600px) {
1104
+ .main-menu-buttons {
1105
+ margin-right: 0;
1106
+ width: 100%;
1107
+ min-width: 100%;
1108
+ }
1109
+ .menu-button {
1110
+ width: 100%;
1111
+ }
1112
+ }
1049
1113
  .br-table {
1050
1114
  width: 100%;
1051
1115
  flex: 1;
@@ -1198,14 +1262,14 @@ a,
1198
1262
  border-radius: 8px;
1199
1263
  }
1200
1264
  .calendar-container {
1201
- display: flex;
1202
- flex-direction: column;
1265
+ position: relative;
1203
1266
  margin-right: 8px;
1204
1267
  z-index: 100;
1205
- min-height: 32px;
1206
- align-items: flex-end;
1207
1268
  }
1208
1269
  .calendar {
1270
+ position: absolute;
1271
+ top: 100%;
1272
+ right: 0;
1209
1273
  background-color: #162841;
1210
1274
  border-radius: 12px;
1211
1275
  min-width: 200px;
@@ -1272,6 +1336,17 @@ a,
1272
1336
  overflow-x: hidden;
1273
1337
  z-index: 10;
1274
1338
  }
1339
+ .no-permissions-message {
1340
+ display: flex;
1341
+ align-items: center;
1342
+ justify-content: center;
1343
+ height: 100%;
1344
+ width: 100%;
1345
+ color: #5e7190;
1346
+ font-size: 24px;
1347
+ font-weight: bold;
1348
+ text-transform: uppercase;
1349
+ }
1275
1350
  .react-grid-layout {
1276
1351
  position: absolute;
1277
1352
  left: 0;
@@ -1390,6 +1465,7 @@ a,
1390
1465
  top: 0;
1391
1466
  position: sticky;
1392
1467
  text-transform: uppercase;
1468
+ z-index: 10;
1393
1469
  }
1394
1470
  .player-info table {
1395
1471
  width: 100%;
@@ -1469,6 +1545,15 @@ a,
1469
1545
  border-bottom-right-radius: 12px;
1470
1546
  overflow: hidden;
1471
1547
  }
1548
+ @media screen and (max-width: 1200px) {
1549
+ .players-container {
1550
+ flex-direction: column;
1551
+ }
1552
+ .player-table-container {
1553
+ margin-right: 0;
1554
+ margin-bottom: 16px;
1555
+ }
1556
+ }
1472
1557
  .plugin-view,
1473
1558
  .plugin-info {
1474
1559
  display: flex;
@@ -1657,15 +1742,26 @@ a,
1657
1742
  border-bottom-left-radius: 12px;
1658
1743
  border-bottom-right-radius: 12px;
1659
1744
  }
1745
+ @media screen and (max-width: 1200px) {
1746
+ .plugins-container {
1747
+ flex-direction: column;
1748
+ }
1749
+ .plugins-list-container {
1750
+ margin-right: 0;
1751
+ margin-bottom: 16px;
1752
+ }
1753
+ }
1660
1754
  .server-container {
1661
1755
  display: flex;
1662
1756
  align-items: stretch;
1663
1757
  flex-direction: column;
1664
1758
  }
1665
1759
  .server-container .navbar {
1666
- margin-top: 8px;
1667
1760
  text-transform: uppercase;
1668
1761
  }
1762
+ .server-container .navbar:not(.server-status) {
1763
+ margin-top: 8px;
1764
+ }
1669
1765
  .server-container .navbar .saved-note {
1670
1766
  color: #009bee;
1671
1767
  display: inline-flex;
@@ -1687,8 +1783,304 @@ a,
1687
1783
  .buttons {
1688
1784
  flex-direction: row;
1689
1785
  display: flex;
1786
+ flex-wrap: wrap;
1787
+ gap: 4px;
1690
1788
  margin-top: 8px;
1691
1789
  }
1790
+ .permission-editor .perm-row {
1791
+ display: flex;
1792
+ align-items: center;
1793
+ justify-content: space-between;
1794
+ padding: 4px 10px;
1795
+ min-height: 40px;
1796
+ }
1797
+ .permission-editor .perm-row.root-row {
1798
+ background-color: #091021;
1799
+ }
1800
+ .permission-editor .perm-row.domain-row {
1801
+ background-color: #091021;
1802
+ position: sticky;
1803
+ top: 32px;
1804
+ z-index: 5;
1805
+ }
1806
+ .permission-editor .perm-row.scope-row {
1807
+ padding-left: 16px;
1808
+ }
1809
+ .permission-editor .perm-row.scope-row.even {
1810
+ background-color: #131d30;
1811
+ }
1812
+ .permission-editor .perm-row.scope-row.odd {
1813
+ background-color: #111a2b;
1814
+ }
1815
+ .permission-editor .perm-search {
1816
+ padding: 4px 10px;
1817
+ background-color: #091021;
1818
+ }
1819
+ .permission-editor .perm-search .input {
1820
+ width: 100%;
1821
+ }
1822
+ .permission-editor .perm-label {
1823
+ color: #5e7190;
1824
+ flex: 1;
1825
+ min-width: 0;
1826
+ overflow: hidden;
1827
+ text-overflow: ellipsis;
1828
+ white-space: nowrap;
1829
+ }
1830
+ .permission-editor .perm-label.root-label {
1831
+ color: white;
1832
+ font-weight: bold;
1833
+ text-transform: uppercase;
1834
+ }
1835
+ .permission-editor .perm-label.domain-label {
1836
+ cursor: pointer;
1837
+ color: white;
1838
+ font-weight: bold;
1839
+ user-select: none;
1840
+ text-transform: uppercase;
1841
+ display: flex;
1842
+ align-items: center;
1843
+ gap: 4px;
1844
+ }
1845
+ .permission-editor .scope-info {
1846
+ display: flex;
1847
+ flex-direction: column;
1848
+ flex: 1;
1849
+ min-width: 0;
1850
+ margin-right: 8px;
1851
+ }
1852
+ .permission-editor .scope-name {
1853
+ color: white;
1854
+ font-weight: bold;
1855
+ display: flex;
1856
+ align-items: center;
1857
+ }
1858
+ .permission-editor .scope-desc {
1859
+ color: #5e7190;
1860
+ font-size: 13px;
1861
+ font-weight: bold;
1862
+ }
1863
+ .permission-editor .scope-badge {
1864
+ display: inline-flex;
1865
+ align-items: center;
1866
+ justify-content: center;
1867
+ width: 18px;
1868
+ height: 18px;
1869
+ margin-right: 6px;
1870
+ font-size: 11px;
1871
+ font-weight: bold;
1872
+ border-radius: 3px;
1873
+ flex-shrink: 0;
1874
+ }
1875
+ .permission-editor .scope-badge.read {
1876
+ background-color: rgba(0, 155, 238, 0.3);
1877
+ color: #009bee;
1878
+ }
1879
+ .permission-editor .scope-badge.write {
1880
+ background-color: rgba(255, 161, 11, 0.3);
1881
+ color: #ffa10b;
1882
+ }
1883
+ .permission-editor .inherited {
1884
+ display: inline-flex;
1885
+ align-items: center;
1886
+ }
1887
+ .permission-editor .inherited.on {
1888
+ color: #5da93d;
1889
+ }
1890
+ .permission-editor .scope-controls {
1891
+ display: flex;
1892
+ align-items: center;
1893
+ flex-shrink: 0;
1894
+ gap: 8px;
1895
+ }
1896
+ .permission-editor .level-picker {
1897
+ display: flex;
1898
+ flex-shrink: 0;
1899
+ }
1900
+ .permission-editor .level-picker.dimmed {
1901
+ opacity: 0.4;
1902
+ pointer-events: none;
1903
+ }
1904
+ .permission-editor .level-picker .level-option {
1905
+ border: none;
1906
+ padding: 0 8px;
1907
+ height: 28px;
1908
+ line-height: 28px;
1909
+ font-family: inherit;
1910
+ font-size: 14px;
1911
+ font-weight: bold;
1912
+ text-transform: uppercase;
1913
+ cursor: pointer;
1914
+ border-radius: 0;
1915
+ color: #a7bbce;
1916
+ background-color: #1b2f4a;
1917
+ }
1918
+ .permission-editor .level-picker .level-option:hover {
1919
+ background-color: #5e7190;
1920
+ }
1921
+ .permission-editor .level-picker .level-option:active, .permission-editor .level-picker .level-option.disabled {
1922
+ background-color: #263f61;
1923
+ }
1924
+ .permission-editor .level-picker .level-option.first {
1925
+ border-radius: 8px 0 0 8px;
1926
+ }
1927
+ .permission-editor .level-picker .level-option.last {
1928
+ border-radius: 0 8px 8px 0;
1929
+ }
1930
+ .permission-editor .level-picker .level-option.active {
1931
+ color: white;
1932
+ }
1933
+ .permission-editor .level-picker .level-option.active.level-all, .permission-editor .level-picker .level-option.active.level-everything {
1934
+ background-color: #5da93d;
1935
+ }
1936
+ .permission-editor .level-picker .level-option.active.level-all:hover, .permission-editor .level-picker .level-option.active.level-everything:hover {
1937
+ background-color: #8dc377;
1938
+ }
1939
+ .permission-editor .level-picker .level-option.active.level-all:active, .permission-editor .level-picker .level-option.active.level-all.disabled, .permission-editor .level-picker .level-option.active.level-everything:active, .permission-editor .level-picker .level-option.active.level-everything.disabled {
1940
+ background-color: #41772b;
1941
+ }
1942
+ .permission-editor .level-picker .level-option.active.level-read {
1943
+ background-color: #009bee;
1944
+ }
1945
+ .permission-editor .level-picker .level-option.active.level-read:hover {
1946
+ background-color: #4cb9f3;
1947
+ }
1948
+ .permission-editor .level-picker .level-option.active.level-read:active, .permission-editor .level-picker .level-option.active.level-read.disabled {
1949
+ background-color: #007da7;
1950
+ }
1951
+ .permission-editor .level-picker .level-option.active.level-none, .permission-editor .level-picker .level-option.active.level-off, .permission-editor .level-picker .level-option.active.level-manual {
1952
+ background-color: #2a9d8f;
1953
+ }
1954
+ .permission-editor .level-picker .level-option.active.level-none:hover, .permission-editor .level-picker .level-option.active.level-off:hover, .permission-editor .level-picker .level-option.active.level-manual:hover {
1955
+ background-color: #3dbdad;
1956
+ }
1957
+ .permission-editor .level-picker .level-option.active.level-none:active, .permission-editor .level-picker .level-option.active.level-none.disabled, .permission-editor .level-picker .level-option.active.level-off:active, .permission-editor .level-picker .level-option.active.level-off.disabled, .permission-editor .level-picker .level-option.active.level-manual:active, .permission-editor .level-picker .level-option.active.level-manual.disabled {
1958
+ background-color: #1e7268;
1959
+ }
1960
+ .perm-error {
1961
+ background-color: rgba(224, 45, 45, 0.2);
1962
+ color: #e02d2d;
1963
+ padding: 8px 12px;
1964
+ margin: 8px;
1965
+ border-radius: 8px;
1966
+ font-weight: bold;
1967
+ text-transform: capitalize;
1968
+ }
1969
+ .players-container .players-list {
1970
+ border-bottom-left-radius: 12px;
1971
+ border-bottom-right-radius: 12px;
1972
+ overflow: hidden;
1973
+ }
1974
+ .player-inspector-container .player-inspector.has-footer {
1975
+ border-bottom-left-radius: 0;
1976
+ border-bottom-right-radius: 0;
1977
+ }
1978
+ .widgets-list-up {
1979
+ bottom: 100% !important;
1980
+ top: auto !important;
1981
+ right: 0;
1982
+ min-width: max-content !important;
1983
+ }
1984
+ .mfa-manager .mfa-error {
1985
+ background-color: rgba(224, 45, 45, 0.2);
1986
+ color: #e02d2d;
1987
+ padding: 8px 12px;
1988
+ margin-bottom: 8px;
1989
+ border-radius: 8px;
1990
+ font-weight: bold;
1991
+ text-transform: capitalize;
1992
+ }
1993
+ .mfa-manager .note {
1994
+ color: #5e7190 !important;
1995
+ font-size: 12px;
1996
+ }
1997
+ .mfa-manager .mfa-actions {
1998
+ display: flex;
1999
+ align-items: center;
2000
+ flex-wrap: wrap;
2001
+ gap: 8px;
2002
+ padding: 8px 0;
2003
+ }
2004
+ .mfa-manager .mfa-actions .input {
2005
+ min-width: 180px;
2006
+ flex: 1;
2007
+ }
2008
+ .mfa-manager .mfa-actions .button {
2009
+ margin-right: 0;
2010
+ }
2011
+ .mfa-manager .totp-setup .qr-code {
2012
+ display: block;
2013
+ width: 200px;
2014
+ height: 200px;
2015
+ margin: 8px 0;
2016
+ border-radius: 8px;
2017
+ }
2018
+ .mfa-manager .totp-setup .manual-secret {
2019
+ display: flex;
2020
+ align-items: center;
2021
+ gap: 8px;
2022
+ }
2023
+ .mfa-manager .totp-setup .manual-secret code {
2024
+ font-family: monospace;
2025
+ color: white;
2026
+ user-select: all;
2027
+ word-break: break-all;
2028
+ }
2029
+ .mfa-manager .totp-setup .manual-secret .button {
2030
+ flex-shrink: 0;
2031
+ }
2032
+ .mfa-manager .passkey-list .passkey-item {
2033
+ display: flex;
2034
+ align-items: center;
2035
+ gap: 8px;
2036
+ padding: 6px 0;
2037
+ }
2038
+ .mfa-manager .passkey-list .passkey-item .passkey-name {
2039
+ color: white;
2040
+ font-weight: bold;
2041
+ display: flex;
2042
+ align-items: center;
2043
+ gap: 4px;
2044
+ flex: 1;
2045
+ }
2046
+ .mfa-manager .passkey-list .passkey-item .passkey-meta {
2047
+ color: #5e7190;
2048
+ font-size: 13px;
2049
+ }
2050
+ .mfa-manager .recovery-grid {
2051
+ display: grid;
2052
+ grid-template-columns: repeat(2, 120px);
2053
+ gap: 4px;
2054
+ padding: 8px 0;
2055
+ }
2056
+ .mfa-manager .recovery-grid code {
2057
+ font-family: monospace;
2058
+ color: white;
2059
+ font-size: 16px;
2060
+ font-weight: bold;
2061
+ padding: 4px 8px;
2062
+ background-color: #1b2f4a;
2063
+ border-radius: 8px;
2064
+ text-align: center;
2065
+ user-select: all;
2066
+ }
2067
+ @media screen and (max-width: 800px) {
2068
+ .mfa-manager .mfa-actions {
2069
+ flex-direction: column;
2070
+ align-items: stretch;
2071
+ }
2072
+ .mfa-manager .mfa-actions .input {
2073
+ max-width: none;
2074
+ }
2075
+ }
2076
+ @media screen and (max-width: 1200px) {
2077
+ .default-perms-standalone {
2078
+ display: none !important;
2079
+ }
2080
+ .default-perms-dropdown.hidden {
2081
+ display: flex !important;
2082
+ }
2083
+ }
1692
2084
  .world-view,
1693
2085
  .world-info {
1694
2086
  display: flex;
@@ -1735,8 +2127,9 @@ a,
1735
2127
  background-color: #111a2b;
1736
2128
  }
1737
2129
  .revision-item .revision-note {
1738
- color: #ffffff;
2130
+ color: #5e7190;
1739
2131
  flex: 1;
2132
+ padding: 8px;
1740
2133
  }
1741
2134
  .revision-item .revision-index {
1742
2135
  width: 40px;
@@ -1755,7 +2148,10 @@ a,
1755
2148
  .worlds.widgets-container .widgets-list .button {
1756
2149
  border-radius: 0;
1757
2150
  margin-right: 0;
1758
- text-align: left;
2151
+ justify-content: flex-start;
2152
+ white-space: nowrap;
2153
+ width: 100%;
2154
+ box-sizing: border-box;
1759
2155
  }
1760
2156
  .worlds.widgets-container .widgets-list .button:first-child {
1761
2157
  border-top-left-radius: 12px;
@@ -1861,6 +2257,15 @@ a,
1861
2257
  border-bottom-left-radius: 12px;
1862
2258
  border-bottom-right-radius: 12px;
1863
2259
  }
2260
+ @media screen and (max-width: 1200px) {
2261
+ .worlds-container {
2262
+ flex-direction: column;
2263
+ }
2264
+ .worlds-list-container {
2265
+ margin-right: 0;
2266
+ margin-bottom: 16px;
2267
+ }
2268
+ }
1864
2269
  .chat-widget {
1865
2270
  display: flex;
1866
2271
  flex: 1;
@@ -2004,8 +2409,8 @@ a,
2004
2409
  font-variant-numeric: tabular-nums;
2005
2410
  }
2006
2411
  </style>
2007
- <script type="importmap">{"imports":{"react":"./assets/shared/react-iXLZ_Bod.js","react-dom":"./assets/shared/react-dom-8Rcmh_FG.js","react/jsx-runtime":"./assets/shared/react_jsx-runtime-BwhiLcBy.js","@nanostores/react":"./assets/shared/@nanostores_react-DJPF1Eqx.js","nanostores":"./assets/shared/nanostores-BFqqIY_c.js","@tabler/icons-react":"./assets/shared/@tabler_icons-react-iQk11eD_.js","@hooks":"./assets/shared/@hooks-Ch_hJYh0.js","wouter":"./assets/shared/wouter-CUC1caxu.js","@utils":"./assets/shared/@utils-BA2UvC9c.js","@components":"./assets/shared/@components-DPHARroA.js"}}</script>
2008
- <script type="module" crossorigin src="/assets/app-CLZ-5FIi.js"></script>
2412
+ <script type="importmap">{"imports":{"react":"./assets/shared/react-iXLZ_Bod.js","react-dom":"./assets/shared/react-dom-8Rcmh_FG.js","react/jsx-runtime":"./assets/shared/react_jsx-runtime-BwhiLcBy.js","@nanostores/react":"./assets/shared/@nanostores_react-DJPF1Eqx.js","nanostores":"./assets/shared/nanostores-BFqqIY_c.js","@tabler/icons-react":"./assets/shared/@tabler_icons-react-DrVFX3uL.js","@hooks":"./assets/shared/@hooks-DT93N7wd.js","wouter":"./assets/shared/wouter-CNISJ5i6.js","@utils":"./assets/shared/@utils-BA2UvC9c.js","@components":"./assets/shared/@components-CgsSYMe6.js"}}</script>
2413
+ <script type="module" crossorigin src="/assets/app-DMr_-wik.js"></script>
2009
2414
  <link rel="modulepreload" crossorigin href="/assets/index-D0OPOe3j.js">
2010
2415
  <link rel="modulepreload" crossorigin href="/assets/index-CtCtK5BX.js">
2011
2416
  <link rel="modulepreload" crossorigin href="/assets/client-BT1QYH0O.js">
@@ -2018,14 +2423,15 @@ a,
2018
2423
  <link rel="modulepreload" crossorigin href="/assets/index-CSV4ZXsq.js">
2019
2424
  <link rel="modulepreload" crossorigin href="/assets/IconCheck-DOe3u7iH.js">
2020
2425
  <link rel="modulepreload" crossorigin href="/assets/IconX-CvmO0bbE.js">
2021
- <link rel="modulepreload" crossorigin href="/assets/index-DY750sgZ.js">
2022
- <link rel="modulepreload" crossorigin href="/assets/index-2cgXLhrt.js">
2023
- <link rel="modulepreload" crossorigin href="/assets/IconWorld-B6GK5qpx.js">
2426
+ <link rel="modulepreload" crossorigin href="/assets/index-D_STNela.js">
2427
+ <link rel="modulepreload" crossorigin href="/assets/index-DEL-PD_8.js">
2428
+ <link rel="modulepreload" crossorigin href="/assets/IconWorld-XmQNg6JI.js">
2024
2429
  <link rel="modulepreload" crossorigin href="/assets/utils-Ds3ldd-U.js">
2025
- <link rel="modulepreload" crossorigin href="/assets/index-DLZ8-XzO.js">
2026
- <link rel="modulepreload" crossorigin href="/assets/IconWorldPlus-Dkos72Ws.js">
2027
- <link rel="modulepreload" crossorigin href="/assets/IconArrowRight-BuVxhqKX.js">
2028
- <link rel="modulepreload" crossorigin href="/assets/shared/@hooks-Ch_hJYh0.js">
2430
+ <link rel="modulepreload" crossorigin href="/assets/useHasScope-BOdFktko.js">
2431
+ <link rel="modulepreload" crossorigin href="/assets/index-Dkh3HiBz.js">
2432
+ <link rel="modulepreload" crossorigin href="/assets/IconShieldCheck-Bjlm8mX2.js">
2433
+ <link rel="modulepreload" crossorigin href="/assets/IconWorldPlus-CxGGv2eD.js">
2434
+ <link rel="modulepreload" crossorigin href="/assets/shared/@hooks-DT93N7wd.js">
2029
2435
  </head>
2030
2436
  <body>
2031
2437
  <div id="root"></div>