spoint 0.1.0 → 0.1.11

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 (204) hide show
  1. package/README.md +134 -209
  2. package/SKILL.md +95 -0
  3. package/apps/environment/index.js +200 -1
  4. package/apps/environment/models/decorative/.gitkeep +0 -0
  5. package/apps/environment/models/hazards/.gitkeep +0 -0
  6. package/apps/environment/models/interactive/.gitkeep +0 -0
  7. package/apps/environment/models/structures/.gitkeep +0 -0
  8. package/apps/environment/smartObjects.js +114 -0
  9. package/apps/interactable/index.js +155 -0
  10. package/apps/physics-crate/index.js +15 -9
  11. package/apps/power-crate/index.js +18 -12
  12. package/apps/tps-game/$GDUPI.vrm +0 -0
  13. package/apps/tps-game/Cleetus.vrm +0 -0
  14. package/apps/tps-game/index.js +185 -27
  15. package/apps/world/index.js +68 -22
  16. package/bin/create-app.js +337 -0
  17. package/client/ARControls.js +301 -0
  18. package/client/LoadingManager.js +117 -0
  19. package/client/MobileControls.js +1122 -0
  20. package/client/anim-lib.glb +0 -0
  21. package/client/animation.js +306 -0
  22. package/client/app.js +1341 -65
  23. package/client/camera.js +191 -33
  24. package/client/createLoadingScreen.js +69 -0
  25. package/client/editor/bridge.js +113 -0
  26. package/client/editor/css/main.css +794 -0
  27. package/client/editor/images/rotate.svg +4 -0
  28. package/client/editor/images/scale.svg +4 -0
  29. package/client/editor/images/translate.svg +4 -0
  30. package/client/editor/index.html +103 -0
  31. package/client/editor/js/Command.js +41 -0
  32. package/client/editor/js/Config.js +81 -0
  33. package/client/editor/js/Editor.js +785 -0
  34. package/client/editor/js/EditorControls.js +438 -0
  35. package/client/editor/js/History.js +321 -0
  36. package/client/editor/js/Loader.js +987 -0
  37. package/client/editor/js/LoaderUtils.js +90 -0
  38. package/client/editor/js/Menubar.Add.js +510 -0
  39. package/client/editor/js/Menubar.Edit.js +145 -0
  40. package/client/editor/js/Menubar.File.js +466 -0
  41. package/client/editor/js/Menubar.Help.js +73 -0
  42. package/client/editor/js/Menubar.Status.js +51 -0
  43. package/client/editor/js/Menubar.View.js +183 -0
  44. package/client/editor/js/Menubar.js +27 -0
  45. package/client/editor/js/Player.js +53 -0
  46. package/client/editor/js/Resizer.js +58 -0
  47. package/client/editor/js/Script.js +503 -0
  48. package/client/editor/js/Selector.js +102 -0
  49. package/client/editor/js/Sidebar.Geometry.BoxGeometry.js +121 -0
  50. package/client/editor/js/Sidebar.Geometry.BufferGeometry.js +115 -0
  51. package/client/editor/js/Sidebar.Geometry.CapsuleGeometry.js +97 -0
  52. package/client/editor/js/Sidebar.Geometry.CircleGeometry.js +97 -0
  53. package/client/editor/js/Sidebar.Geometry.CylinderGeometry.js +121 -0
  54. package/client/editor/js/Sidebar.Geometry.DodecahedronGeometry.js +73 -0
  55. package/client/editor/js/Sidebar.Geometry.ExtrudeGeometry.js +196 -0
  56. package/client/editor/js/Sidebar.Geometry.IcosahedronGeometry.js +73 -0
  57. package/client/editor/js/Sidebar.Geometry.LatheGeometry.js +98 -0
  58. package/client/editor/js/Sidebar.Geometry.Modifiers.js +73 -0
  59. package/client/editor/js/Sidebar.Geometry.OctahedronGeometry.js +74 -0
  60. package/client/editor/js/Sidebar.Geometry.PlaneGeometry.js +97 -0
  61. package/client/editor/js/Sidebar.Geometry.RingGeometry.js +121 -0
  62. package/client/editor/js/Sidebar.Geometry.ShapeGeometry.js +76 -0
  63. package/client/editor/js/Sidebar.Geometry.SphereGeometry.js +133 -0
  64. package/client/editor/js/Sidebar.Geometry.TetrahedronGeometry.js +74 -0
  65. package/client/editor/js/Sidebar.Geometry.TorusGeometry.js +109 -0
  66. package/client/editor/js/Sidebar.Geometry.TorusKnotGeometry.js +121 -0
  67. package/client/editor/js/Sidebar.Geometry.TubeGeometry.js +135 -0
  68. package/client/editor/js/Sidebar.Geometry.js +332 -0
  69. package/client/editor/js/Sidebar.Material.BooleanProperty.js +60 -0
  70. package/client/editor/js/Sidebar.Material.ColorProperty.js +87 -0
  71. package/client/editor/js/Sidebar.Material.ConstantProperty.js +62 -0
  72. package/client/editor/js/Sidebar.Material.MapProperty.js +249 -0
  73. package/client/editor/js/Sidebar.Material.NumberProperty.js +60 -0
  74. package/client/editor/js/Sidebar.Material.Program.js +73 -0
  75. package/client/editor/js/Sidebar.Material.RangeValueProperty.js +63 -0
  76. package/client/editor/js/Sidebar.Material.js +751 -0
  77. package/client/editor/js/Sidebar.Object.Animation.js +102 -0
  78. package/client/editor/js/Sidebar.Object.js +898 -0
  79. package/client/editor/js/Sidebar.Project.App.js +165 -0
  80. package/client/editor/js/Sidebar.Project.Image.js +225 -0
  81. package/client/editor/js/Sidebar.Project.Materials.js +82 -0
  82. package/client/editor/js/Sidebar.Project.Renderer.js +144 -0
  83. package/client/editor/js/Sidebar.Project.Video.js +242 -0
  84. package/client/editor/js/Sidebar.Project.js +31 -0
  85. package/client/editor/js/Sidebar.Properties.js +73 -0
  86. package/client/editor/js/Sidebar.Scene.js +585 -0
  87. package/client/editor/js/Sidebar.Script.js +129 -0
  88. package/client/editor/js/Sidebar.Settings.History.js +146 -0
  89. package/client/editor/js/Sidebar.Settings.Shortcuts.js +175 -0
  90. package/client/editor/js/Sidebar.Settings.js +60 -0
  91. package/client/editor/js/Sidebar.js +41 -0
  92. package/client/editor/js/Storage.js +98 -0
  93. package/client/editor/js/Strings.js +2028 -0
  94. package/client/editor/js/Toolbar.js +84 -0
  95. package/client/editor/js/Viewport.Controls.js +92 -0
  96. package/client/editor/js/Viewport.Info.js +136 -0
  97. package/client/editor/js/Viewport.Pathtracer.js +91 -0
  98. package/client/editor/js/Viewport.ViewHelper.js +39 -0
  99. package/client/editor/js/Viewport.XR.js +222 -0
  100. package/client/editor/js/Viewport.js +900 -0
  101. package/client/editor/js/commands/AddObjectCommand.js +68 -0
  102. package/client/editor/js/commands/AddScriptCommand.js +75 -0
  103. package/client/editor/js/commands/Commands.js +23 -0
  104. package/client/editor/js/commands/MoveObjectCommand.js +111 -0
  105. package/client/editor/js/commands/MultiCmdsCommand.js +85 -0
  106. package/client/editor/js/commands/RemoveObjectCommand.js +88 -0
  107. package/client/editor/js/commands/RemoveScriptCommand.js +81 -0
  108. package/client/editor/js/commands/SetColorCommand.js +73 -0
  109. package/client/editor/js/commands/SetGeometryCommand.js +87 -0
  110. package/client/editor/js/commands/SetGeometryValueCommand.js +70 -0
  111. package/client/editor/js/commands/SetMaterialColorCommand.js +86 -0
  112. package/client/editor/js/commands/SetMaterialCommand.js +79 -0
  113. package/client/editor/js/commands/SetMaterialMapCommand.js +143 -0
  114. package/client/editor/js/commands/SetMaterialRangeCommand.js +91 -0
  115. package/client/editor/js/commands/SetMaterialValueCommand.js +90 -0
  116. package/client/editor/js/commands/SetMaterialVectorCommand.js +79 -0
  117. package/client/editor/js/commands/SetPositionCommand.js +84 -0
  118. package/client/editor/js/commands/SetRotationCommand.js +84 -0
  119. package/client/editor/js/commands/SetScaleCommand.js +84 -0
  120. package/client/editor/js/commands/SetSceneCommand.js +103 -0
  121. package/client/editor/js/commands/SetScriptValueCommand.js +80 -0
  122. package/client/editor/js/commands/SetShadowValueCommand.js +73 -0
  123. package/client/editor/js/commands/SetUuidCommand.js +70 -0
  124. package/client/editor/js/commands/SetValueCommand.js +75 -0
  125. package/client/editor/js/libs/acorn/acorn.js +3236 -0
  126. package/client/editor/js/libs/acorn/acorn_loose.js +1299 -0
  127. package/client/editor/js/libs/acorn/walk.js +344 -0
  128. package/client/editor/js/libs/app/index.html +57 -0
  129. package/client/editor/js/libs/app.js +251 -0
  130. package/client/editor/js/libs/codemirror/addon/dialog.css +32 -0
  131. package/client/editor/js/libs/codemirror/addon/dialog.js +163 -0
  132. package/client/editor/js/libs/codemirror/addon/show-hint.css +36 -0
  133. package/client/editor/js/libs/codemirror/addon/show-hint.js +529 -0
  134. package/client/editor/js/libs/codemirror/addon/tern.css +87 -0
  135. package/client/editor/js/libs/codemirror/addon/tern.js +750 -0
  136. package/client/editor/js/libs/codemirror/codemirror.css +344 -0
  137. package/client/editor/js/libs/codemirror/codemirror.js +9849 -0
  138. package/client/editor/js/libs/codemirror/mode/glsl.js +233 -0
  139. package/client/editor/js/libs/codemirror/mode/javascript.js +959 -0
  140. package/client/editor/js/libs/codemirror/theme/monokai.css +41 -0
  141. package/client/editor/js/libs/esprima.js +6401 -0
  142. package/client/editor/js/libs/jsonlint.js +453 -0
  143. package/client/editor/js/libs/signals.min.js +14 -0
  144. package/client/editor/js/libs/tern-threejs/threejs.js +5031 -0
  145. package/client/editor/js/libs/ternjs/comment.js +87 -0
  146. package/client/editor/js/libs/ternjs/def.js +588 -0
  147. package/client/editor/js/libs/ternjs/doc_comment.js +401 -0
  148. package/client/editor/js/libs/ternjs/infer.js +1635 -0
  149. package/client/editor/js/libs/ternjs/polyfill.js +80 -0
  150. package/client/editor/js/libs/ternjs/signal.js +26 -0
  151. package/client/editor/js/libs/ternjs/tern.js +993 -0
  152. package/client/editor/js/libs/ui.js +1346 -0
  153. package/client/editor/js/libs/ui.three.js +855 -0
  154. package/client/facial-animation.js +455 -0
  155. package/client/index.html +7 -4
  156. package/client/loading.css +147 -0
  157. package/client/loading.html +25 -0
  158. package/client/style.css +251 -0
  159. package/package.json +7 -3
  160. package/server.js +9 -1
  161. package/src/apps/AppContext.js +1 -1
  162. package/src/apps/AppLoader.js +50 -37
  163. package/src/apps/AppRuntime.js +32 -8
  164. package/src/client/InputHandler.js +233 -0
  165. package/src/client/JitterBuffer.js +207 -0
  166. package/src/client/KalmanFilter.js +125 -0
  167. package/src/client/MessageHandler.js +101 -0
  168. package/src/client/PhysicsNetworkClient.js +141 -68
  169. package/src/client/ReconnectManager.js +62 -0
  170. package/src/client/SmoothInterpolation.js +127 -0
  171. package/src/client/SnapshotProcessor.js +144 -0
  172. package/src/connection/ConnectionManager.js +21 -3
  173. package/src/connection/SessionStore.js +13 -3
  174. package/src/index.client.js +4 -6
  175. package/src/netcode/EventLog.js +29 -15
  176. package/src/netcode/LagCompensator.js +25 -26
  177. package/src/netcode/NetworkState.js +4 -1
  178. package/src/netcode/PhysicsIntegration.js +20 -6
  179. package/src/netcode/PlayerManager.js +10 -2
  180. package/src/netcode/SnapshotEncoder.js +66 -19
  181. package/src/netcode/TickSystem.js +13 -4
  182. package/src/physics/World.js +66 -13
  183. package/src/protocol/msgpack.js +90 -63
  184. package/src/sdk/ReloadHandlers.js +12 -2
  185. package/src/sdk/ReloadManager.js +5 -0
  186. package/src/sdk/ServerHandlers.js +50 -11
  187. package/src/sdk/StaticHandler.js +22 -6
  188. package/src/sdk/TickHandler.js +101 -34
  189. package/src/sdk/scaffold.js +31 -0
  190. package/src/sdk/server.js +59 -33
  191. package/src/shared/movement.js +2 -1
  192. package/src/spatial/Octree.js +5 -0
  193. package/apps/interactive-door/index.js +0 -33
  194. package/apps/patrol-npc/index.js +0 -37
  195. package/src/connection/QualityMonitor.js +0 -46
  196. package/src/debug/StateInspector.js +0 -42
  197. package/src/index.js +0 -1
  198. package/src/index.server.js +0 -27
  199. package/src/protocol/Codec.js +0 -60
  200. package/src/protocol/SequenceTracker.js +0 -71
  201. package/src/sdk/ClientMessageHandler.js +0 -80
  202. package/src/sdk/client.js +0 -122
  203. package/world/kaira.glb +0 -0
  204. package/world/schwust.glb +0 -0
@@ -0,0 +1,794 @@
1
+ :root {
2
+ color-scheme: light dark;
3
+ }
4
+
5
+ [hidden] {
6
+ display: none !important;
7
+ }
8
+
9
+ body {
10
+ font-family: Helvetica, Arial, sans-serif;
11
+ font-size: 14px;
12
+ margin: 0;
13
+ overflow: hidden;
14
+ }
15
+
16
+ hr {
17
+ border: 0;
18
+ border-top: 1px solid #ccc;
19
+ }
20
+
21
+ button {
22
+ position: relative;
23
+ }
24
+
25
+ input {
26
+ vertical-align: middle;
27
+ }
28
+
29
+ input[type="color"]::-webkit-color-swatch-wrapper {
30
+ padding: 0;
31
+ }
32
+ input[type="color"]::-webkit-color-swatch {
33
+ border: none;
34
+ }
35
+
36
+ textarea {
37
+ tab-size: 4;
38
+ white-space: pre;
39
+ word-wrap: normal;
40
+ }
41
+
42
+ textarea.success {
43
+ border-color: #8b8 !important;
44
+ }
45
+
46
+ textarea.fail {
47
+ border-color: #f00 !important;
48
+ background-color: rgba(255,0,0,0.05);
49
+ }
50
+
51
+ textarea, input { outline: none; } /* osx */
52
+
53
+ .Panel {
54
+ -moz-user-select: none;
55
+ -webkit-user-select: none;
56
+ -ms-user-select: none;
57
+
58
+ /* No support for these yet */
59
+ -o-user-select: none;
60
+ user-select: none;
61
+ }
62
+
63
+ .TabbedPanel {
64
+ -moz-user-select: none;
65
+ -webkit-user-select: none;
66
+ -ms-user-select: none;
67
+
68
+ /* No support for these yet */
69
+ -o-user-select: none;
70
+ user-select: none;
71
+ position: relative;
72
+ display: block;
73
+ width: 100%;
74
+ min-width: 335px;
75
+ }
76
+
77
+ .TabbedPanel .Tabs {
78
+ position: relative;
79
+ z-index: 1; /** Above .Panels **/
80
+ display: block;
81
+ width: 100%;
82
+ white-space: pre;
83
+ overflow: hidden;
84
+ overflow-x: auto;
85
+ }
86
+
87
+ .TabbedPanel .Tabs::-webkit-scrollbar {
88
+ height: 5px;
89
+ background: #eee;
90
+ }
91
+ .TabbedPanel .Tabs::-webkit-scrollbar-thumb {
92
+ background: #08f3;
93
+ }
94
+ .TabbedPanel .Tabs:hover::-webkit-scrollbar-thumb {
95
+ background: #08f;
96
+ cursor: ew-resize;
97
+ }
98
+
99
+ .TabbedPanel .Tabs .Tab {
100
+ padding: 10px 9px;
101
+ text-transform: uppercase;
102
+ }
103
+
104
+ .TabbedPanel .Panels {
105
+ position: absolute;
106
+ top: 40px;
107
+ display: block;
108
+ width: 100%;
109
+ }
110
+
111
+ /* Listbox */
112
+ .Listbox {
113
+ color: #444;
114
+ background-color: #fff;
115
+ padding: 0;
116
+ width: 100%;
117
+ min-height: 180px;
118
+ font-size: 12px;
119
+ cursor: default;
120
+ overflow: auto;
121
+ }
122
+
123
+ .Listbox .ListboxItem {
124
+ padding: 6px;
125
+ color: #666;
126
+ white-space: nowrap;
127
+ }
128
+
129
+ .Listbox .ListboxItem.active {
130
+ background-color: rgba(0, 0, 0, 0.04);
131
+ }
132
+
133
+ /* CodeMirror */
134
+
135
+ .CodeMirror {
136
+
137
+ position: absolute !important;
138
+ top: 37px;
139
+ width: 100% !important;
140
+ height: calc(100% - 37px) !important;
141
+
142
+ }
143
+
144
+ .CodeMirror .errorLine {
145
+
146
+ background: rgba(255,0,0,0.25);
147
+
148
+ }
149
+
150
+ .CodeMirror .esprima-error {
151
+
152
+ color: #f00;
153
+ text-align: right;
154
+ padding: 0 20px;
155
+
156
+ }
157
+
158
+ /* outliner */
159
+
160
+ #outliner .opener {
161
+ display: inline-block;
162
+ width: 14px;
163
+ height: 14px;
164
+ margin: 0px 4px;
165
+ vertical-align: top;
166
+ text-align: center;
167
+ }
168
+
169
+ #outliner .opener.open:after {
170
+ content: '−';
171
+ }
172
+
173
+ #outliner .opener.closed:after {
174
+ content: '+';
175
+ }
176
+
177
+ #outliner .option {
178
+
179
+ border: 1px solid transparent;
180
+
181
+ }
182
+
183
+ #outliner .option.drag {
184
+
185
+ border: 1px dashed #999;
186
+
187
+ }
188
+
189
+ #outliner .option.dragTop {
190
+
191
+ border-top: 1px dashed #999;
192
+
193
+ }
194
+
195
+ #outliner .option.dragBottom {
196
+
197
+ border-bottom: 1px dashed #999;
198
+
199
+ }
200
+
201
+ #outliner .type {
202
+ display: inline-block;
203
+ width: 14px;
204
+ height: 14px;
205
+ color: #ddd;
206
+ text-align: center;
207
+ }
208
+
209
+ #outliner .type:after {
210
+ content: '●';
211
+ }
212
+
213
+ /* */
214
+
215
+ #outliner .Scene {
216
+ color: #8888dd;
217
+ }
218
+
219
+ #outliner .Camera {
220
+ color: #dd8888;
221
+ }
222
+
223
+ #outliner .Light {
224
+ color: #dddd88;
225
+ }
226
+
227
+ /* */
228
+
229
+ #outliner .Object3D {
230
+ color: #aaaaee;
231
+ }
232
+
233
+ #outliner .Mesh {
234
+ color: #8888ee;
235
+ }
236
+
237
+ #outliner .Line {
238
+ color: #88ee88;
239
+ }
240
+
241
+ #outliner .LineSegments {
242
+ color: #88ee88;
243
+ }
244
+
245
+ #outliner .Points {
246
+ color: #ee8888;
247
+ }
248
+
249
+ /* */
250
+
251
+ #outliner .Geometry {
252
+ color: #aaeeaa;
253
+ }
254
+
255
+ #outliner .Material {
256
+ color: #eeaaee;
257
+ }
258
+
259
+ /* */
260
+
261
+ #outliner .Script:after {
262
+ content: '◎'
263
+ }
264
+
265
+ /* */
266
+
267
+ button {
268
+ color: #555;
269
+ background-color: #ddd;
270
+ border: 0px;
271
+ margin: 0px; /* GNOME Web */
272
+ padding: 5px 8px;
273
+ font-size: 12px;
274
+ text-transform: uppercase;
275
+ cursor: pointer;
276
+ outline: none;
277
+ }
278
+
279
+ button:hover {
280
+ background-color: #fff;
281
+ }
282
+
283
+ button.selected {
284
+ background-color: #fff;
285
+ }
286
+
287
+ input, textarea {
288
+ border: 1px solid transparent;
289
+ color: #444;
290
+ }
291
+
292
+ input.Number {
293
+ color: #08f!important;
294
+ font-size: 12px;
295
+ border: 0px;
296
+ padding: 2px;
297
+ }
298
+
299
+ select {
300
+ color: #666;
301
+ background-color: #ddd;
302
+ border: 0px;
303
+ text-transform: uppercase;
304
+ cursor: pointer;
305
+ outline: none;
306
+ }
307
+
308
+ select:hover {
309
+ background-color: #fff;
310
+ }
311
+
312
+ /* UI */
313
+
314
+ #resizer {
315
+ position: absolute;
316
+ z-index: 2; /* Above #sidebar */
317
+ top: 32px;
318
+ right: 350px;
319
+ width: 5px;
320
+ bottom: 0px;
321
+ transform: translatex(2.5px);
322
+ cursor: col-resize;
323
+ }
324
+
325
+ #resizer:hover {
326
+ background-color: #08f8;
327
+ transition-property: background-color;
328
+ transition-delay: 0.1s;
329
+ transition-duration: 0.2s;
330
+ }
331
+
332
+ #resizer:active {
333
+ background-color: #08f;
334
+ }
335
+
336
+ #viewport {
337
+ position: absolute;
338
+ top: 32px;
339
+ left: 0;
340
+ right: 350px;
341
+ bottom: 0;
342
+ }
343
+
344
+ #viewport .Text {
345
+ text-shadow: 1px 1px 0 rgba(0,0,0,0.25);
346
+ pointer-events: none;
347
+ }
348
+
349
+ #script {
350
+ position: absolute;
351
+ top: 32px;
352
+ left: 0;
353
+ right: 350px;
354
+ bottom: 0;
355
+ opacity: 0.9;
356
+ }
357
+
358
+ #player {
359
+ position: absolute;
360
+ top: 32px;
361
+ left: 0;
362
+ right: 350px;
363
+ bottom: 0;
364
+ }
365
+
366
+ #menubar {
367
+ position: absolute;
368
+ width: 100%;
369
+ height: 32px;
370
+ background: #eee;
371
+ padding: 0;
372
+ margin: 0;
373
+ right: 0;
374
+ top: 0;
375
+ }
376
+
377
+ #menubar .menu {
378
+ float: left;
379
+ cursor: pointer;
380
+ padding-right: 8px;
381
+ }
382
+
383
+ #menubar .menu.right {
384
+ float: right;
385
+ cursor: auto;
386
+ padding-right: 0;
387
+ text-align: right;
388
+ }
389
+
390
+ #menubar .menu .title {
391
+ display: inline-block;
392
+ color: #888;
393
+ margin: 0;
394
+ padding: 8px;
395
+ line-height: 16px;
396
+ }
397
+
398
+ #menubar .menu .key {
399
+ position: absolute;
400
+ right: 10px;
401
+ color: #ccc;
402
+ border: 1px solid #ccc;
403
+ border-radius: 4px;
404
+ font-size: 9px;
405
+ padding: 2px 4px;
406
+ right: 10px;
407
+ pointer-events: none;
408
+ }
409
+
410
+ #menubar .menu .options {
411
+ position: fixed;
412
+ z-index: 1; /* higher than resizer */
413
+ display: none;
414
+ padding: 5px 0;
415
+ background: #eee;
416
+ min-width: 150px;
417
+ max-height: calc(100vh - 80px);
418
+ overflow: auto;
419
+ }
420
+
421
+ #menubar .menu:hover .options {
422
+ display: block;
423
+ box-shadow: 0 10px 10px -5px #00000033;
424
+ }
425
+
426
+ #menubar .menu .options hr {
427
+ border-color: #ddd;
428
+ }
429
+
430
+ #menubar .menu .options .option {
431
+ color: #666;
432
+ background-color: transparent;
433
+ padding: 5px 10px;
434
+ margin: 0 !important;
435
+ }
436
+
437
+ #menubar .menu .options .option:hover {
438
+ color: #fff;
439
+ background-color: #08f;
440
+ }
441
+
442
+ #menubar .menu .options .option:not(.submenu-title):active {
443
+ color: #666;
444
+ background: transparent;
445
+ }
446
+
447
+ #menubar .menu .options .option.toggle::before {
448
+
449
+ content: ' ';
450
+ display: inline-block;
451
+ width: 16px;
452
+
453
+ }
454
+
455
+ #menubar .menu .options .option.toggle-on::before {
456
+
457
+ content: '✔';
458
+ font-size: 12px;
459
+
460
+ }
461
+
462
+ #menubar .submenu-title::after {
463
+ content: '⏵';
464
+ float: right;
465
+ }
466
+
467
+ #menubar .menu .options .inactive {
468
+ color: #bbb;
469
+ background-color: transparent;
470
+ padding: 5px 10px;
471
+ margin: 0 !important;
472
+ cursor: not-allowed;
473
+ }
474
+
475
+
476
+
477
+ #sidebar {
478
+ position: absolute;
479
+ right: 0;
480
+ top: 32px;
481
+ bottom: 0;
482
+ width: 350px;
483
+ background: #eee;
484
+ overflow: auto;
485
+ overflow-x: hidden;
486
+ }
487
+
488
+ #sidebar .Panel {
489
+ color: #888;
490
+ padding: 10px;
491
+ border-top: 1px solid #ccc;
492
+ }
493
+
494
+ #sidebar .Panel.collapsed {
495
+ margin-bottom: 0;
496
+ }
497
+
498
+ #sidebar .Row {
499
+ display: flex;
500
+ align-items: center;
501
+ min-height: 24px;
502
+ margin-bottom: 10px;
503
+ }
504
+
505
+ #sidebar .Row .Label {
506
+
507
+ width: 120px;
508
+
509
+ }
510
+
511
+ #tabs {
512
+ background-color: #ddd;
513
+ border-top: 1px solid #ccc;
514
+ }
515
+
516
+ #tabs span {
517
+ color: #aaa;
518
+ border-right: 1px solid #ccc;
519
+ padding: 10px;
520
+ }
521
+
522
+ #tabs span.selected {
523
+ color: #888;
524
+ background-color: #eee;
525
+ }
526
+
527
+ #toolbar {
528
+ position: absolute;
529
+ left: 10px;
530
+ top: 42px;
531
+ width: 32px;
532
+ background: #eee;
533
+ text-align: center;
534
+ }
535
+
536
+ #toolbar button, #toolbar input {
537
+ height: 32px;
538
+ }
539
+
540
+ #toolbar button img {
541
+ width: 16px;
542
+ opacity: 0.5;
543
+ }
544
+
545
+ .Outliner {
546
+ color: #444;
547
+ background-color: #fff;
548
+ padding: 0;
549
+ width: 100%;
550
+ height: 180px;
551
+ font-size: 12px;
552
+ cursor: default;
553
+ overflow: auto;
554
+ resize: vertical;
555
+ outline: none !important;
556
+ }
557
+
558
+ .Outliner .option {
559
+ padding: 4px;
560
+ color: #666;
561
+ white-space: nowrap;
562
+ }
563
+
564
+ .Outliner .option:hover {
565
+ background-color: rgba(0,0,0,0.02);
566
+ }
567
+
568
+ .Outliner .option.active {
569
+ background-color: rgba(0,0,0,0.04);
570
+ }
571
+
572
+
573
+ .TabbedPanel .Tabs {
574
+ background-color: #ddd;
575
+ border-top: 1px solid #ccc;
576
+ }
577
+
578
+ .TabbedPanel .Tab {
579
+ color: #aaa;
580
+ border-right: 1px solid #ccc;
581
+ }
582
+
583
+ .TabbedPanel .Tab.selected {
584
+ color: #888;
585
+ background-color: #eee;
586
+ }
587
+
588
+ .Listbox {
589
+ color: #444;
590
+ background-color: #fff;
591
+ }
592
+
593
+ .Panel {
594
+ color: #888;
595
+ }
596
+
597
+ /* */
598
+
599
+ @media all and ( max-width: 600px ) {
600
+
601
+ #resizer {
602
+ display: none;
603
+ }
604
+
605
+ #menubar .menu .options {
606
+ max-height: calc(100% - 80px);
607
+ }
608
+
609
+ #menubar .menu.right {
610
+ display: none;
611
+ }
612
+
613
+ #viewport {
614
+ left: 0;
615
+ right: 0;
616
+ top: 32px;
617
+ height: calc(100% - 352px);
618
+ }
619
+
620
+ #script {
621
+ left: 0;
622
+ right: 0;
623
+ top: 32px;
624
+ height: calc(100% - 352px);
625
+ }
626
+
627
+ #player {
628
+ left: 0;
629
+ right: 0;
630
+ top: 32px;
631
+ height: calc(100% - 352px);
632
+ }
633
+
634
+ #sidebar {
635
+ left: 0;
636
+ width: 100%;
637
+ top: calc(100% - 320px);
638
+ bottom: 0;
639
+ }
640
+
641
+ }
642
+
643
+ /* DARK MODE */
644
+
645
+ @media ( prefers-color-scheme: dark ) {
646
+
647
+ button {
648
+ color: #aaa;
649
+ background-color: #222;
650
+ }
651
+
652
+ button:hover {
653
+ color: #ccc;
654
+ background-color: #444;
655
+ }
656
+
657
+ button.selected {
658
+ color: #fff;
659
+ background-color: #08f;
660
+ }
661
+
662
+ input, textarea {
663
+ background-color: #222;
664
+ border: 1px solid transparent;
665
+ color: #888;
666
+ }
667
+
668
+ select {
669
+ color: #aaa;
670
+ background-color: #222;
671
+ }
672
+
673
+ select:hover {
674
+ color: #ccc;
675
+ background-color: #444;
676
+ }
677
+
678
+ /* UI */
679
+
680
+ #menubar {
681
+ background: #111;
682
+ }
683
+
684
+ #menubar .menu .key {
685
+ color: #444;
686
+ border-color: #444;
687
+ }
688
+
689
+ #menubar .menu .options {
690
+ background: #111;
691
+ }
692
+
693
+ #menubar .menu .options hr {
694
+ border-color: #222;
695
+ }
696
+
697
+ #menubar .menu .options .option {
698
+ color: #888;
699
+ }
700
+
701
+ #menubar .menu .options .inactive {
702
+ color: #444;
703
+ }
704
+
705
+ #sidebar {
706
+ background-color: #111;
707
+ }
708
+
709
+ #sidebar .Panel {
710
+ border-top: 1px solid #222;
711
+ }
712
+
713
+ #sidebar .Panel.Material canvas {
714
+ border: solid 1px #5A5A5A;
715
+ }
716
+
717
+ #tabs {
718
+ background-color: #1b1b1b;
719
+ border-top: 1px solid #222;
720
+ }
721
+
722
+ #tabs span {
723
+ color: #555;
724
+ border-right: 1px solid #222;
725
+ }
726
+
727
+ #tabs span.selected {
728
+ background-color: #111;
729
+ }
730
+
731
+ #toolbar {
732
+ background-color: #111;
733
+ }
734
+
735
+ #toolbar img {
736
+ filter: invert(1);
737
+ }
738
+
739
+ .Outliner {
740
+ background: #222;
741
+ }
742
+
743
+ .Outliner .option {
744
+ color: #999;
745
+ }
746
+
747
+ .Outliner .option:hover {
748
+ background-color: rgba(21,60,94,0.5);
749
+ }
750
+
751
+ .Outliner .option.active {
752
+ background-color: rgba(21,60,94,1);
753
+ }
754
+
755
+ .TabbedPanel .Tabs {
756
+ background-color: #1b1b1b;
757
+ border-top: 1px solid #222;
758
+ }
759
+
760
+ .TabbedPanel .Tabs::-webkit-scrollbar {
761
+ background: #111;
762
+ }
763
+
764
+ .TabbedPanel .Tab {
765
+ color: #555;
766
+ border-right: 1px solid #222;
767
+ }
768
+
769
+ .TabbedPanel .Tab.selected {
770
+ color: #888;
771
+ background-color: #111;
772
+ }
773
+
774
+ .Listbox {
775
+ color: #888;
776
+ background: #222;
777
+ }
778
+
779
+ .Listbox .ListboxItem:hover {
780
+ background-color: rgba(21,60,94,0.5);
781
+ }
782
+
783
+ .Listbox .ListboxItem.active {
784
+ background-color: rgba(21,60,94,1);
785
+ }
786
+
787
+ }
788
+
789
+ /* Temporary Chrome fix (#24794) */
790
+
791
+ [draggable="true"] {
792
+ transform: translate(0, 0);
793
+ z-index: 0;
794
+ }