@smarterplan/ngx-smarterplan-core 1.4.21 → 1.4.22

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 (114) hide show
  1. package/README.md +24 -24
  2. package/esm2022/lib/components/csv-export/csv-export.component.mjs +3 -3
  3. package/esm2022/lib/components/loader/loader.component.mjs +3 -3
  4. package/esm2022/lib/components/menu-bar/avatar/avatar.component.mjs +1 -1
  5. package/esm2022/lib/components/menu-bar/menu-bar.component.mjs +3 -3
  6. package/esm2022/lib/components/menu-bar/navigation-bar/navigation-bar.component.mjs +3 -3
  7. package/esm2022/lib/components/modal-switch-visit/modal-switch-visit.component.mjs +3 -3
  8. package/esm2022/lib/components/search-bar/search-bar.component.mjs +3 -3
  9. package/esm2022/lib/components/splat-viewer/splat-viewer.component.mjs +361 -0
  10. package/esm2022/lib/components/support-modal/support-modal.component.mjs +3 -3
  11. package/esm2022/lib/config.mjs +1 -1
  12. package/esm2022/lib/helpers.service.mjs +1 -1
  13. package/esm2022/lib/matterport-extensions/nest-thermostat/CanvasImage.mjs +1 -1
  14. package/esm2022/lib/matterport-extensions/nest-thermostat/CanvasRenderer.mjs +1 -1
  15. package/esm2022/lib/matterport-extensions/nest-thermostat/NestThermostat.mjs +1 -1
  16. package/esm2022/lib/matterport-extensions/nest-thermostat/PlaneRenderer.mjs +1 -1
  17. package/esm2022/lib/matterport-extensions/scene-component/SceneComponent.mjs +1 -1
  18. package/esm2022/lib/matterport-extensions/security-camera/SecurityCamera.mjs +22 -22
  19. package/esm2022/lib/matterport-extensions/tv-player/TvPlayer.mjs +1 -1
  20. package/esm2022/lib/matterport-extensions/view-frustum-mesh/ViewFrustumMesh.mjs +22 -22
  21. package/esm2022/lib/mattertagData.mjs +1 -1
  22. package/esm2022/lib/ngx-smarterplan-core.module.mjs +9 -4
  23. package/esm2022/lib/ngx-smarterplan-core.service.mjs +1 -1
  24. package/esm2022/lib/pipes/duration-to-string.pipe.mjs +1 -1
  25. package/esm2022/lib/pipes/format-date-number-to-digits.pipe.mjs +1 -1
  26. package/esm2022/lib/pipes/hashtag-from-id.pipe.mjs +1 -1
  27. package/esm2022/lib/pipes/safe-url.pipe.mjs +1 -1
  28. package/esm2022/lib/pipes/time-date-to-local-string.pipe.mjs +1 -1
  29. package/esm2022/lib/pipes/username-from-id.pipe.mjs +1 -1
  30. package/esm2022/lib/services/amplify-cache.service.mjs +1 -1
  31. package/esm2022/lib/services/base-tab.service.mjs +1 -1
  32. package/esm2022/lib/services/baseVisibility.service.mjs +1 -1
  33. package/esm2022/lib/services/content.service.mjs +1 -1
  34. package/esm2022/lib/services/filter.service.mjs +1 -1
  35. package/esm2022/lib/services/intervention.service.mjs +1 -1
  36. package/esm2022/lib/services/locale.service.mjs +1 -1
  37. package/esm2022/lib/services/matterport-import.service.mjs +1 -1
  38. package/esm2022/lib/services/matterport-measurement.service.mjs +1 -1
  39. package/esm2022/lib/services/matterport-navigation.service.mjs +1 -1
  40. package/esm2022/lib/services/matterport-pointer.service.mjs +6 -6
  41. package/esm2022/lib/services/matterport-tag-copy.service.mjs +1 -1
  42. package/esm2022/lib/services/matterport-tag.service.mjs +12 -7
  43. package/esm2022/lib/services/matterport.service.mjs +17 -17
  44. package/esm2022/lib/services/models/affectation.service.mjs +1 -1
  45. package/esm2022/lib/services/models/base-object.service.mjs +1 -1
  46. package/esm2022/lib/services/models/capture.service.mjs +1 -1
  47. package/esm2022/lib/services/models/comment.service.mjs +1 -1
  48. package/esm2022/lib/services/models/domain.service.mjs +1 -1
  49. package/esm2022/lib/services/models/equipment.service.mjs +1 -1
  50. package/esm2022/lib/services/models/event.service.mjs +1 -1
  51. package/esm2022/lib/services/models/feature.service.mjs +1 -1
  52. package/esm2022/lib/services/models/hashtag.service.mjs +1 -1
  53. package/esm2022/lib/services/models/layer.service.mjs +1 -1
  54. package/esm2022/lib/services/models/measurement.service.mjs +1 -1
  55. package/esm2022/lib/services/models/mission.service.mjs +1 -1
  56. package/esm2022/lib/services/models/navigation.service.mjs +1 -1
  57. package/esm2022/lib/services/models/node.service.mjs +1 -1
  58. package/esm2022/lib/services/models/object3D.service.mjs +1 -1
  59. package/esm2022/lib/services/models/operation.service.mjs +1 -1
  60. package/esm2022/lib/services/models/organisation.service.mjs +1 -1
  61. package/esm2022/lib/services/models/plan.service.mjs +1 -1
  62. package/esm2022/lib/services/models/poi.service.mjs +27 -27
  63. package/esm2022/lib/services/models/profile.service.mjs +1 -1
  64. package/esm2022/lib/services/models/property.service.mjs +1 -1
  65. package/esm2022/lib/services/models/space.service.mjs +1 -1
  66. package/esm2022/lib/services/models/template.service.mjs +1 -1
  67. package/esm2022/lib/services/models/ticket.service.mjs +1 -1
  68. package/esm2022/lib/services/models/visit.service.mjs +1 -1
  69. package/esm2022/lib/services/models/zone.service.mjs +1 -1
  70. package/esm2022/lib/services/navigator.service.mjs +1 -1
  71. package/esm2022/lib/services/obj-to-glb.mjs +649 -0
  72. package/esm2022/lib/services/s3.service.mjs +43 -3
  73. package/esm2022/lib/services/search.service.mjs +1 -1
  74. package/esm2022/lib/services/support.service.mjs +1 -1
  75. package/esm2022/lib/services/sweep-locator.service.mjs +1 -1
  76. package/esm2022/lib/services/tag.service.mjs +16 -16
  77. package/esm2022/lib/services/threejs-import.service.mjs +6 -4
  78. package/esm2022/lib/services/threejs.service.mjs +867 -95
  79. package/esm2022/lib/services/user.service.mjs +1 -1
  80. package/esm2022/lib/services/utils/matterport-transform.util.mjs +1 -1
  81. package/esm2022/lib/services/validators.service.mjs +1 -1
  82. package/esm2022/lib/services/viewer.service.mjs +189 -7
  83. package/esm2022/lib/services/zone-drawer.service.mjs +1 -1
  84. package/esm2022/lib/services/zoneChange.service.mjs +1 -1
  85. package/esm2022/lib/tokens/matterport-sdk-key.token.mjs +1 -1
  86. package/esm2022/lib/validators/email.directive.mjs +1 -1
  87. package/esm2022/lib/validators/no-empty.directive.mjs +1 -1
  88. package/esm2022/lib/validators/number.directive.mjs +1 -1
  89. package/esm2022/lib/validators/text.directive.mjs +1 -1
  90. package/esm2022/public-api.mjs +3 -1
  91. package/fesm2022/smarterplan-ngx-smarterplan-core.mjs +2239 -233
  92. package/fesm2022/smarterplan-ngx-smarterplan-core.mjs.map +1 -1
  93. package/lib/components/splat-viewer/splat-viewer.component.d.ts +98 -0
  94. package/lib/ngx-smarterplan-core.module.d.ts +7 -6
  95. package/lib/services/matterport-tag.service.d.ts +5 -5
  96. package/lib/services/obj-to-glb.d.ts +66 -0
  97. package/lib/services/s3.service.d.ts +7 -0
  98. package/lib/services/threejs.service.d.ts +336 -16
  99. package/lib/services/viewer.service.d.ts +110 -8
  100. package/package.json +1 -1
  101. package/public-api.d.ts +2 -0
  102. package/src/assets/viewers/splat/chunk-BYLI4YBI.js +17037 -0
  103. package/src/assets/viewers/splat/chunk-LDV6YPMG.js +1 -0
  104. package/src/assets/viewers/splat/chunk-WZ5Z4TU3.js +105719 -0
  105. package/src/assets/viewers/splat/convert-4DRLH77X.js +1 -0
  106. package/src/assets/viewers/splat/convert.html +11 -0
  107. package/src/assets/viewers/splat/converter-SLBB5MHG.js +1 -0
  108. package/src/assets/viewers/splat/index.html +90 -0
  109. package/src/assets/viewers/splat/spz-DEYRea_v-QE6YSGIB.js +5292 -0
  110. package/src/assets/viewers/splat/viewer-W4X3FWQJ.js +2704 -0
  111. package/src/assets/viewers/splat/viewer.css +1096 -0
  112. package/src/assets/viewers/splat/webp.wasm +0 -0
  113. package/src/assets/viewers/splat/worker.mjs +1383 -0
  114. package/src/assets/vs-app.json +67 -67
@@ -0,0 +1,1096 @@
1
+ @charset "UTF-8";
2
+ .sse-viewer {
3
+ --sse-text: #e0dcdd;
4
+ --sse-text-light: #fff;
5
+ --sse-text-dark: #aaa;
6
+ --sse-text-darkest: #666;
7
+ --sse-accent: #f60;
8
+ --sse-grip: #ffaf50;
9
+ --sse-bkg: #000;
10
+ --sse-bkg-dark: #282828;
11
+ --sse-bkg-darkest: #141414;
12
+ --sse-bkg-light: #444;
13
+ --canvas-opacity: 1;
14
+ position: relative;
15
+ width: 100%;
16
+ height: 100%;
17
+ overflow: hidden;
18
+ isolation: isolate;
19
+ font-family: "Arial", sans-serif;
20
+ -moz-user-select: none;
21
+ user-select: none;
22
+ -webkit-user-select: none;
23
+ -webkit-touch-callout: none;
24
+ }
25
+ .sse-viewer,
26
+ .sse-viewer * {
27
+ margin: 0;
28
+ padding: 0;
29
+ touch-action: none;
30
+ }
31
+ .sse-viewer > canvas {
32
+ opacity: var(--canvas-opacity);
33
+ position: absolute;
34
+ top: 0;
35
+ left: 0;
36
+ width: 100%;
37
+ height: 100%;
38
+ }
39
+ .sse-viewer::after {
40
+ content: "";
41
+ position: absolute;
42
+ top: 0;
43
+ left: 0;
44
+ width: 1px;
45
+ height: 1px;
46
+ backdrop-filter: blur(1px);
47
+ -webkit-backdrop-filter: blur(1px);
48
+ pointer-events: none;
49
+ }
50
+ .sse-viewer button {
51
+ -webkit-appearance: none;
52
+ -moz-appearance: none;
53
+ appearance: none;
54
+ }
55
+ .sse-viewer .sse-hidden {
56
+ display: none !important;
57
+ }
58
+ .sse-viewer .sse-spacer {
59
+ flex-grow: 1;
60
+ }
61
+ .sse-viewer .sse-sceneLayer {
62
+ position: absolute;
63
+ top: 0;
64
+ left: 0;
65
+ width: 100%;
66
+ height: 100%;
67
+ pointer-events: none;
68
+ }
69
+ .sse-viewer .sse-ui {
70
+ position: absolute;
71
+ top: 0;
72
+ left: 0;
73
+ width: 100%;
74
+ height: 100%;
75
+ pointer-events: none;
76
+ }
77
+ .sse-viewer .sse-ui * {
78
+ pointer-events: auto;
79
+ }
80
+ .sse-viewer .sse-key {
81
+ display: inline-flex;
82
+ align-items: center;
83
+ justify-content: center;
84
+ box-sizing: border-box;
85
+ min-width: 20px;
86
+ height: 20px;
87
+ padding: 0 5px;
88
+ border-radius: 4px;
89
+ border: 1px solid rgba(255, 255, 255, 0.14);
90
+ border-bottom-color: rgba(255, 255, 255, 0.26);
91
+ background-color: rgba(255, 255, 255, 0.08);
92
+ color: var(--sse-text-light);
93
+ font-family: inherit;
94
+ font-size: 11px;
95
+ font-weight: 500;
96
+ }
97
+ .sse-viewer .sse-panelButton {
98
+ width: 26px;
99
+ height: 26px;
100
+ flex-shrink: 0;
101
+ display: flex;
102
+ align-items: center;
103
+ justify-content: center;
104
+ border: 0;
105
+ border-radius: 6px;
106
+ cursor: pointer;
107
+ color: var(--sse-text-dark);
108
+ background-color: transparent;
109
+ transition: color 150ms ease, background-color 150ms ease;
110
+ }
111
+ .sse-viewer .sse-panelButton > svg {
112
+ width: 14px;
113
+ height: 14px;
114
+ fill: none;
115
+ stroke: currentColor;
116
+ stroke-width: 2.5;
117
+ stroke-linecap: round;
118
+ stroke-linejoin: round;
119
+ }
120
+ .sse-viewer .sse-panelButton:hover {
121
+ color: var(--sse-text-light);
122
+ background-color: rgba(255, 255, 255, 0.1);
123
+ }
124
+ .sse-viewer .sse-panelButton.sse-active {
125
+ color: var(--sse-accent);
126
+ }
127
+ .sse-viewer {
128
+ /* controlsHint: the current camera mode's controls, at the top right */
129
+ }
130
+ .sse-viewer .sse-controlsHint {
131
+ position: absolute;
132
+ right: max(16px, env(safe-area-inset-right));
133
+ bottom: calc(max(16px, env(safe-area-inset-bottom)) + 70px);
134
+ min-width: 200px;
135
+ max-width: calc(100% - 32px);
136
+ box-sizing: border-box;
137
+ padding: 8px 8px 8px 12px;
138
+ border-radius: 16px;
139
+ border: 1px solid rgba(255, 255, 255, 0.08);
140
+ font-size: 12px;
141
+ color: var(--sse-text);
142
+ background-color: color-mix(in srgb, var(--sse-bkg) 50%, transparent);
143
+ backdrop-filter: blur(20px);
144
+ -webkit-backdrop-filter: blur(20px);
145
+ }
146
+ .sse-viewer .sse-controlsHint > .sse-controlsHintHeader {
147
+ display: flex;
148
+ align-items: flex-start;
149
+ gap: 8px;
150
+ }
151
+ .sse-viewer .sse-controlsHint > .sse-controlsHintHeader > .sse-controlsHintIcon {
152
+ width: 20px;
153
+ height: 20px;
154
+ margin-top: 3px;
155
+ flex-shrink: 0;
156
+ fill: var(--sse-text-light);
157
+ }
158
+ .sse-viewer .sse-controlsHint > .sse-controlsHintHeader > .sse-controlsHintTitles {
159
+ flex-grow: 1;
160
+ display: flex;
161
+ flex-direction: column;
162
+ min-width: 0;
163
+ }
164
+ .sse-viewer .sse-controlsHint > .sse-controlsHintHeader > .sse-controlsHintTitles > .sse-controlsHintTitle {
165
+ line-height: 26px;
166
+ font-size: 13px;
167
+ font-weight: bold;
168
+ color: var(--sse-text-light);
169
+ }
170
+ .sse-viewer .sse-controlsHint > .sse-controlsHintHeader > .sse-controlsHintTitles > .sse-controlsHintSubtitle {
171
+ margin-top: -5px;
172
+ font-size: 11px;
173
+ color: var(--sse-text-dark);
174
+ }
175
+ .sse-viewer .sse-controlsHint > .sse-controlsHintHeader > .sse-controlsHintTitles > .sse-controlsHintSubtitle:empty {
176
+ display: none;
177
+ }
178
+ .sse-viewer .sse-controlsHint > .sse-controlsHintRows {
179
+ margin-top: 8px;
180
+ padding: 4px 4px 0 0;
181
+ border-top: 1px solid rgba(255, 255, 255, 0.06);
182
+ }
183
+ .sse-viewer .sse-controlsHint > .sse-controlsHintRows:empty {
184
+ display: none;
185
+ }
186
+ .sse-viewer .sse-controlsHint > .sse-controlsHintRows > .sse-controlsHintItem {
187
+ display: flex;
188
+ align-items: center;
189
+ justify-content: space-between;
190
+ gap: 16px;
191
+ min-height: 28px;
192
+ }
193
+ .sse-viewer .sse-controlsHint > .sse-controlsHintRows > .sse-controlsHintItem > .sse-controlsHintInputs {
194
+ display: flex;
195
+ align-items: center;
196
+ justify-content: flex-end;
197
+ gap: 3px;
198
+ flex-shrink: 0;
199
+ color: var(--sse-text-dark);
200
+ }
201
+ .sse-viewer .sse-controlsHint > .sse-controlsHintRows > .sse-divider {
202
+ height: 1px;
203
+ margin: 4px 0;
204
+ background-color: rgba(255, 255, 255, 0.06);
205
+ }
206
+ .sse-viewer .sse-controlsHint .sse-mouse {
207
+ display: inline-flex;
208
+ align-items: center;
209
+ gap: 3px;
210
+ }
211
+ .sse-viewer .sse-controlsHint .sse-mouse > .sse-mouseIcon {
212
+ width: 15px;
213
+ height: 22px;
214
+ }
215
+ .sse-viewer .sse-controlsHint .sse-mouse > .sse-mouseIcon > .sse-mouseBody {
216
+ fill: none;
217
+ stroke: rgba(255, 255, 255, 0.6);
218
+ stroke-width: 1.5;
219
+ }
220
+ .sse-viewer .sse-controlsHint .sse-mouse > .sse-mouseIcon > .sse-mouseSplit {
221
+ fill: none;
222
+ stroke: rgba(255, 255, 255, 0.35);
223
+ stroke-width: 1.25;
224
+ }
225
+ .sse-viewer .sse-controlsHint .sse-mouse > .sse-mouseIcon > .sse-mouseActive {
226
+ fill: rgba(255, 255, 255, 0.85);
227
+ }
228
+ .sse-viewer .sse-controlsHint .sse-mouse > .sse-dragIcon {
229
+ width: 12px;
230
+ height: 12px;
231
+ fill: none;
232
+ stroke: currentColor;
233
+ stroke-width: 1.2;
234
+ stroke-linecap: round;
235
+ stroke-linejoin: round;
236
+ }
237
+ .sse-viewer .sse-controlsHint .sse-mouse > .sse-mouseCount {
238
+ font-size: 10px;
239
+ font-weight: 500;
240
+ }
241
+ .sse-viewer .sse-controlsHint .sse-gesture {
242
+ display: inline-flex;
243
+ align-items: center;
244
+ min-height: 20px;
245
+ padding: 1px 7px;
246
+ box-sizing: border-box;
247
+ border-radius: 5px;
248
+ border: 1px solid rgba(255, 255, 255, 0.14);
249
+ background-color: rgba(255, 255, 255, 0.08);
250
+ color: var(--sse-text-light);
251
+ font-size: 11px;
252
+ text-align: right;
253
+ }
254
+ .sse-viewer .sse-controlsHint .sse-or {
255
+ font-size: 11px;
256
+ color: var(--sse-text-darkest);
257
+ }
258
+ .sse-viewer {
259
+ /* branding link for third-party embeds */
260
+ }
261
+ .sse-viewer .sse-viewerBranding {
262
+ position: absolute;
263
+ top: max(16px, env(safe-area-inset-top));
264
+ left: max(16px, env(safe-area-inset-left));
265
+ display: flex;
266
+ align-items: center;
267
+ gap: 6px;
268
+ text-decoration: none;
269
+ white-space: nowrap;
270
+ cursor: pointer;
271
+ transition: color 150ms ease;
272
+ color: var(--sse-text);
273
+ }
274
+ .sse-viewer .sse-viewerBranding:hover {
275
+ color: var(--sse-text-light);
276
+ }
277
+ .sse-viewer .sse-viewerBranding > svg {
278
+ height: 16px;
279
+ width: auto;
280
+ flex-shrink: 0;
281
+ padding: 8px;
282
+ border-radius: 6px;
283
+ background-color: rgba(0, 0, 0, 0.3);
284
+ }
285
+ .sse-viewer .sse-viewerBranding > span {
286
+ font-size: 14px;
287
+ font-weight: bold;
288
+ text-shadow: -1px -1px 0 rgba(0, 0, 0, 0.4), 1px -1px 0 rgba(0, 0, 0, 0.4), -1px 1px 0 rgba(0, 0, 0, 0.4), 1px 1px 0 rgba(0, 0, 0, 0.4);
289
+ }
290
+ .sse-viewer {
291
+ /* poster */
292
+ }
293
+ .sse-viewer .sse-poster {
294
+ display: none;
295
+ position: absolute;
296
+ top: 0;
297
+ left: 0;
298
+ width: 100%;
299
+ height: 100%;
300
+ background-image: var(--poster-url);
301
+ background-size: cover;
302
+ background-position: center;
303
+ background-repeat: no-repeat;
304
+ }
305
+ .sse-viewer {
306
+ /* loadingWrap */
307
+ }
308
+ .sse-viewer .sse-loadingWrap {
309
+ position: absolute;
310
+ bottom: 120px;
311
+ left: 50%;
312
+ transform: translate(-50%, 0);
313
+ width: min(380px, 100% - 32px);
314
+ display: flex;
315
+ flex-direction: column;
316
+ padding: 16px;
317
+ }
318
+ .sse-viewer .sse-loadingWrap > .sse-loadingText {
319
+ font-size: 18px;
320
+ color: var(--sse-text-light);
321
+ text-align: center;
322
+ text-shadow: 0 0 4px rgba(0, 0, 0, 0.5);
323
+ }
324
+ .sse-viewer .sse-loadingWrap > .sse-loadingBar {
325
+ width: 100%;
326
+ height: 10px;
327
+ margin-top: 8px;
328
+ border-radius: 4px;
329
+ overflow: hidden;
330
+ }
331
+ .sse-viewer {
332
+ /* controlsWrap */
333
+ }
334
+ .sse-viewer .sse-controlsWrap {
335
+ position: absolute;
336
+ left: max(16px, env(safe-area-inset-left));
337
+ right: max(16px, env(safe-area-inset-right));
338
+ bottom: max(16px, env(safe-area-inset-bottom));
339
+ display: flex;
340
+ flex-direction: column;
341
+ }
342
+ .sse-viewer .sse-controlsWrap.sse-faded-in {
343
+ visibility: visible;
344
+ opacity: 1;
345
+ transition: opacity 0.5s ease-out;
346
+ }
347
+ .sse-viewer .sse-controlsWrap.sse-faded-out {
348
+ visibility: hidden;
349
+ opacity: 0;
350
+ transition: visibility 0s 0.5s, opacity 0.5s ease-out;
351
+ }
352
+ .sse-viewer .sse-controlsWrap.sse-dimmed {
353
+ opacity: 0.4;
354
+ }
355
+ .sse-viewer .sse-controlsWrap > .sse-timelineContainer {
356
+ height: 30px;
357
+ cursor: pointer;
358
+ }
359
+ .sse-viewer .sse-controlsWrap > .sse-timelineContainer > .sse-line {
360
+ width: 100%;
361
+ height: 50%;
362
+ border-bottom: 4px solid #d9d9d9;
363
+ }
364
+ .sse-viewer .sse-controlsWrap > .sse-timelineContainer > .sse-handle {
365
+ position: absolute;
366
+ top: 16.5px;
367
+ width: 12px;
368
+ height: 12px;
369
+ transform: translate(-50%, -50%);
370
+ border: 2px solid #d9d9d9;
371
+ border-radius: 50%;
372
+ background-color: var(--sse-grip);
373
+ }
374
+ .sse-viewer .sse-controlsWrap > .sse-timelineContainer > .sse-time {
375
+ position: absolute;
376
+ top: 0;
377
+ padding: 2px 4px;
378
+ transform: translate(-50%, -100%);
379
+ font-size: 12px;
380
+ border-radius: 4px;
381
+ color: var(--sse-text-light);
382
+ background-color: color-mix(in srgb, var(--sse-bkg-dark) 50%, transparent);
383
+ }
384
+ .sse-viewer .sse-controlsWrap > .sse-buttonsContainer {
385
+ display: flex;
386
+ gap: 8px;
387
+ }
388
+ .sse-viewer .sse-controlsWrap > .sse-buttonsContainer .sse-buttonGroup {
389
+ display: flex;
390
+ background-color: rgba(0, 0, 0, 0.3);
391
+ border-radius: 6px;
392
+ }
393
+ .sse-viewer .sse-controlsWrap > .sse-buttonsContainer .sse-buttonGroup:not(:has(> :not(.sse-hidden))) {
394
+ display: none;
395
+ }
396
+ .sse-viewer .sse-controlsWrap > .sse-buttonsContainer {
397
+ /* controlButton */
398
+ }
399
+ .sse-viewer .sse-controlsWrap > .sse-buttonsContainer .sse-controlButton {
400
+ width: 34px;
401
+ height: 34px;
402
+ padding: 0;
403
+ margin: 0;
404
+ border: 0;
405
+ cursor: pointer;
406
+ color: var(--sse-text);
407
+ background-color: transparent;
408
+ }
409
+ .sse-viewer .sse-controlsWrap > .sse-buttonsContainer .sse-controlButton:hover {
410
+ color: var(--sse-text-light);
411
+ }
412
+ .sse-viewer .sse-controlsWrap > .sse-buttonsContainer .sse-controlButton {
413
+ /* icon styling */
414
+ }
415
+ .sse-viewer .sse-controlsWrap > .sse-buttonsContainer .sse-controlButton > svg {
416
+ display: block;
417
+ margin: auto;
418
+ }
419
+ .sse-viewer .sse-controlsWrap > .sse-buttonsContainer .sse-controlButton > svg > g.sse-stroke {
420
+ fill: none;
421
+ stroke: black;
422
+ stroke-width: 2;
423
+ stroke-linejoin: round;
424
+ opacity: 0.4;
425
+ }
426
+ .sse-viewer .sse-controlsWrap > .sse-buttonsContainer .sse-controlButton > svg > g.sse-fill {
427
+ fill: currentColor;
428
+ stroke: none;
429
+ }
430
+ .sse-viewer .sse-controlsWrap > .sse-buttonsContainer .sse-controlButton {
431
+ /* active highlight for simple toggle buttons (settings, controls, info) */
432
+ }
433
+ .sse-viewer .sse-controlsWrap > .sse-buttonsContainer .sse-controlButton.sse-active:not(.sse-toggle) {
434
+ color: var(--sse-accent);
435
+ }
436
+ .sse-viewer .sse-controlsWrap > .sse-buttonsContainer .sse-controlButton {
437
+ /* camera toggle styling */
438
+ }
439
+ .sse-viewer .sse-controlsWrap > .sse-buttonsContainer .sse-controlButton.sse-toggle {
440
+ background: linear-gradient(90deg, transparent 0%, transparent 50%, var(--sse-accent) 50%, var(--sse-accent) 100%);
441
+ background-size: 200% 100%;
442
+ background-position: 100% 0%;
443
+ background-repeat: no-repeat;
444
+ transition: background-position 0.1s ease-in-out;
445
+ }
446
+ .sse-viewer .sse-controlsWrap > .sse-buttonsContainer .sse-controlButton.sse-toggle.sse-left {
447
+ border-radius: 4px 0px 0px 4px;
448
+ }
449
+ .sse-viewer .sse-controlsWrap > .sse-buttonsContainer .sse-controlButton.sse-toggle.sse-left:not(.sse-active) {
450
+ background-position: 0% 0%;
451
+ }
452
+ .sse-viewer .sse-controlsWrap > .sse-buttonsContainer .sse-controlButton.sse-toggle.sse-middle {
453
+ border-radius: 0;
454
+ }
455
+ .sse-viewer .sse-controlsWrap > .sse-buttonsContainer .sse-controlButton.sse-toggle.sse-middle:not(.sse-active) {
456
+ background-position: 0% 0%;
457
+ }
458
+ .sse-viewer .sse-controlsWrap > .sse-buttonsContainer .sse-controlButton.sse-toggle.sse-right {
459
+ border-radius: 0px 4px 4px 0px;
460
+ }
461
+ .sse-viewer .sse-controlsWrap > .sse-buttonsContainer .sse-controlButton.sse-toggle.sse-right:not(.sse-active) {
462
+ background-position: 200% 0%;
463
+ }
464
+ .sse-viewer {
465
+ /* settingsPanel */
466
+ }
467
+ .sse-viewer .sse-settingsPanel {
468
+ position: absolute;
469
+ right: max(16px, env(safe-area-inset-right));
470
+ bottom: calc(max(16px, env(safe-area-inset-bottom)) + 70px);
471
+ padding: 12px;
472
+ border-radius: 16px;
473
+ border: 1px solid rgba(255, 255, 255, 0.08);
474
+ display: flex;
475
+ flex-direction: column;
476
+ align-items: flex-end;
477
+ gap: 4px;
478
+ font-size: 14px;
479
+ color: var(--sse-text);
480
+ background-color: color-mix(in srgb, var(--sse-bkg) 50%, transparent);
481
+ backdrop-filter: blur(20px);
482
+ -webkit-backdrop-filter: blur(20px);
483
+ }
484
+ .sse-viewer .sse-settingsPanel > .sse-settingsGroup {
485
+ display: flex;
486
+ flex-direction: column;
487
+ gap: 4px;
488
+ width: 100%;
489
+ }
490
+ .sse-viewer .sse-settingsPanel > .sse-settingsGroup:not(:has(> :not(.sse-hidden))) {
491
+ display: none;
492
+ }
493
+ .sse-viewer .sse-settingsPanel > .sse-settingsGroup:not(:last-child) {
494
+ padding-bottom: 8px;
495
+ margin-bottom: 4px;
496
+ border-bottom: 1px solid rgba(255, 255, 255, 0.08);
497
+ }
498
+ .sse-viewer .sse-settingsPanel > .sse-settingsGroup > .sse-settingsRow {
499
+ display: flex;
500
+ align-items: center;
501
+ justify-content: space-between;
502
+ gap: 4px;
503
+ width: 100%;
504
+ }
505
+ .sse-viewer .sse-settingsPanel > .sse-settingsGroup > .sse-settingsRow > button {
506
+ flex-grow: 1;
507
+ height: 34px;
508
+ padding: 0 20px;
509
+ border: 1px solid rgba(255, 255, 255, 0.1);
510
+ border-radius: 8px;
511
+ font-size: 13px;
512
+ cursor: pointer;
513
+ color: var(--sse-text-dark);
514
+ background-color: rgba(255, 255, 255, 0.04);
515
+ transition: background-color 250ms ease, color 250ms ease;
516
+ }
517
+ .sse-viewer .sse-settingsPanel > .sse-settingsGroup > .sse-settingsRow > button:hover {
518
+ color: var(--sse-text-light);
519
+ background-color: rgba(255, 255, 255, 0.1);
520
+ }
521
+ .sse-viewer .sse-settingsPanel > .sse-settingsGroup > .sse-settingsRow > div {
522
+ height: 34px;
523
+ display: flex;
524
+ align-items: center;
525
+ padding: 0 8px;
526
+ cursor: pointer;
527
+ color: var(--sse-text-dark);
528
+ }
529
+ .sse-viewer .sse-settingsPanel > .sse-settingsGroup > .sse-settingsRow > div.sse-toggleSwitch {
530
+ padding: 0 4px;
531
+ }
532
+ .sse-viewer .sse-settingsPanel > .sse-settingsGroup > .sse-settingsRow > div.sse-toggleSwitch .sse-toggleTrack {
533
+ width: 36px;
534
+ height: 20px;
535
+ border-radius: 10px;
536
+ background-color: rgba(255, 255, 255, 0.15);
537
+ position: relative;
538
+ transition: background-color 200ms ease;
539
+ }
540
+ .sse-viewer .sse-settingsPanel > .sse-settingsGroup > .sse-settingsRow > div.sse-toggleSwitch .sse-toggleTrack .sse-toggleThumb {
541
+ width: 16px;
542
+ height: 16px;
543
+ border-radius: 50%;
544
+ background-color: #777;
545
+ position: absolute;
546
+ top: 2px;
547
+ left: 2px;
548
+ transition: transform 200ms ease, background-color 200ms ease;
549
+ }
550
+ .sse-viewer .sse-settingsPanel > .sse-settingsGroup > .sse-settingsRow > div.sse-toggleSwitch.sse-active .sse-toggleTrack {
551
+ background-color: color-mix(in srgb, var(--sse-accent) 35%, transparent);
552
+ }
553
+ .sse-viewer .sse-settingsPanel > .sse-settingsGroup > .sse-settingsRow > div.sse-toggleSwitch.sse-active .sse-toggleTrack .sse-toggleThumb {
554
+ transform: translateX(16px);
555
+ background-color: var(--sse-accent);
556
+ }
557
+ .sse-viewer .sse-settingsPanel > .sse-settingsGroup > .sse-settingsRow > div:hover {
558
+ color: var(--sse-text);
559
+ }
560
+ .sse-viewer {
561
+ /* infoPanel */
562
+ }
563
+ .sse-viewer .sse-infoPanel {
564
+ position: absolute;
565
+ top: 0;
566
+ left: 0;
567
+ width: 100%;
568
+ height: 100%;
569
+ }
570
+ .sse-viewer .sse-infoPanel::before {
571
+ content: "";
572
+ position: absolute;
573
+ top: 0;
574
+ left: 0;
575
+ width: 100%;
576
+ height: 100%;
577
+ backdrop-filter: blur(3px);
578
+ -webkit-backdrop-filter: blur(3px);
579
+ }
580
+ .sse-viewer .sse-infoPanel > .sse-infoPanelContent {
581
+ position: absolute;
582
+ top: 50%;
583
+ left: 50%;
584
+ transform: translate(-50%, -50%);
585
+ width: 320px;
586
+ max-width: calc(100% - 32px);
587
+ max-height: calc(100% - 32px);
588
+ box-sizing: border-box;
589
+ overflow-y: auto;
590
+ padding: 24px 20px 20px;
591
+ border-radius: 16px;
592
+ border: 1px solid rgba(255, 255, 255, 0.08);
593
+ display: flex;
594
+ flex-direction: column;
595
+ gap: 16px;
596
+ font-size: 13px;
597
+ color: var(--sse-text);
598
+ background-color: color-mix(in srgb, var(--sse-bkg) 50%, transparent);
599
+ backdrop-filter: blur(20px);
600
+ -webkit-backdrop-filter: blur(20px);
601
+ }
602
+ .sse-viewer .sse-infoPanel > .sse-infoPanelContent > .sse-infoClose {
603
+ position: absolute;
604
+ top: 10px;
605
+ right: 10px;
606
+ }
607
+ .sse-viewer .sse-infoPanel > .sse-infoPanelContent > .sse-viewerTitle {
608
+ align-self: center;
609
+ display: flex;
610
+ flex-direction: column;
611
+ align-items: center;
612
+ gap: 6px;
613
+ text-decoration: none;
614
+ color: var(--sse-text-light);
615
+ transition: opacity 150ms ease;
616
+ }
617
+ .sse-viewer .sse-infoPanel > .sse-infoPanelContent > .sse-viewerTitle > .sse-viewerLogo {
618
+ width: 56px;
619
+ height: 56px;
620
+ margin-bottom: 6px;
621
+ }
622
+ .sse-viewer .sse-infoPanel > .sse-infoPanelContent > .sse-viewerTitle > .sse-title-name {
623
+ font-size: 16px;
624
+ font-weight: bold;
625
+ }
626
+ .sse-viewer .sse-infoPanel > .sse-infoPanelContent > .sse-viewerTitle > .sse-title-version {
627
+ font-size: 12px;
628
+ color: var(--sse-accent);
629
+ }
630
+ .sse-viewer .sse-infoPanel > .sse-infoPanelContent > .sse-viewerTitle:hover {
631
+ opacity: 0.8;
632
+ }
633
+ .sse-viewer .sse-infoPanel > .sse-infoPanelContent > .sse-infoGpu {
634
+ padding: 7px 10px;
635
+ border-radius: 8px;
636
+ background-color: rgba(0, 0, 0, 0.2);
637
+ font-size: 12px;
638
+ text-align: center;
639
+ overflow-wrap: anywhere;
640
+ }
641
+ .sse-viewer .sse-infoPanel > .sse-infoPanelContent > .sse-infoGpu > .sse-rendererName {
642
+ font-weight: bold;
643
+ color: var(--sse-text-light);
644
+ }
645
+ .sse-viewer .sse-infoPanel > .sse-infoPanelContent > .sse-infoGpu > .sse-gpuName {
646
+ color: var(--sse-text);
647
+ -moz-user-select: text;
648
+ user-select: text;
649
+ -webkit-user-select: text;
650
+ }
651
+ .sse-viewer .sse-infoPanel > .sse-infoPanelContent > .sse-infoGpu > .sse-gpuName::before {
652
+ content: "·";
653
+ margin-right: 4px;
654
+ color: var(--sse-text-dark);
655
+ }
656
+ .sse-viewer .sse-infoPanel > .sse-infoPanelContent > .sse-infoGpu > .sse-gpuName:empty {
657
+ display: none;
658
+ }
659
+ .sse-viewer .sse-infoPanel > .sse-infoPanelContent > .sse-infoLinks {
660
+ display: flex;
661
+ justify-content: center;
662
+ gap: 8px;
663
+ }
664
+ .sse-viewer .sse-infoPanel > .sse-infoPanelContent > .sse-infoLinks > .sse-infoLink {
665
+ flex: 1 1 0;
666
+ display: flex;
667
+ flex-direction: column;
668
+ align-items: center;
669
+ gap: 4px;
670
+ padding: 6px 4px;
671
+ border-radius: 8px;
672
+ text-decoration: none;
673
+ text-align: center;
674
+ font-size: 11px;
675
+ color: var(--sse-text-dark);
676
+ transition: color 150ms ease, background-color 150ms ease;
677
+ }
678
+ .sse-viewer .sse-infoPanel > .sse-infoPanelContent > .sse-infoLinks > .sse-infoLink > .sse-infoLinkVersion {
679
+ color: var(--sse-text);
680
+ }
681
+ .sse-viewer .sse-infoPanel > .sse-infoPanelContent > .sse-infoLinks > .sse-infoLink:hover {
682
+ color: var(--sse-text-light);
683
+ background-color: rgba(255, 255, 255, 0.06);
684
+ }
685
+ .sse-viewer .sse-infoPanel > .sse-infoPanelContent > .sse-infoShortcuts {
686
+ padding-top: 12px;
687
+ border-top: 1px solid rgba(255, 255, 255, 0.06);
688
+ }
689
+ .sse-viewer .sse-infoPanel > .sse-infoPanelContent > .sse-infoShortcuts > h1 {
690
+ font-size: 11px;
691
+ font-weight: bold;
692
+ text-transform: uppercase;
693
+ letter-spacing: 1px;
694
+ padding-bottom: 6px;
695
+ color: var(--sse-accent);
696
+ }
697
+ .sse-viewer .sse-infoPanel > .sse-infoPanelContent > .sse-infoShortcuts > .sse-infoShortcut {
698
+ display: flex;
699
+ justify-content: space-between;
700
+ align-items: center;
701
+ gap: 16px;
702
+ min-height: 28px;
703
+ font-size: 12px;
704
+ }
705
+ .sse-viewer .sse-infoPanel > .sse-infoPanelContent > .sse-infoShortcuts > .sse-infoShortcut .sse-keys {
706
+ display: flex;
707
+ gap: 3px;
708
+ }
709
+ .sse-viewer .sse-joystickBase {
710
+ position: absolute;
711
+ left: 70px;
712
+ bottom: 140px;
713
+ width: 56px;
714
+ height: 100px;
715
+ transform: translate(-50%, 50%);
716
+ border-radius: 28px;
717
+ touch-action: none;
718
+ background: linear-gradient(180deg, rgba(0, 0, 0, 0.2666666667) 0%, rgba(0, 0, 0, 0) 30%, rgba(0, 0, 0, 0) 70%, rgba(0, 0, 0, 0.2666666667) 100%);
719
+ background-color: rgba(0, 0, 0, 0.2);
720
+ border: 2px solid rgba(255, 255, 255, 0.2);
721
+ transition: width 0.2s ease, height 0.2s ease, border-radius 0.2s ease;
722
+ }
723
+ .sse-viewer .sse-joystickBase > .sse-joystick {
724
+ position: absolute;
725
+ left: 8px;
726
+ width: 40px;
727
+ height: 40px;
728
+ border-radius: 50%;
729
+ touch-action: none;
730
+ background-color: rgba(255, 255, 255, 0.5333333333);
731
+ box-shadow: 0 2px 8px rgba(0, 0, 0, 0.3);
732
+ transition: left 0.1s ease;
733
+ }
734
+ .sse-viewer .sse-joystickBase.sse-mode-2d {
735
+ width: 100px;
736
+ height: 100px;
737
+ border-radius: 50px;
738
+ background: radial-gradient(circle, rgba(0, 0, 0, 0) 40%, rgba(0, 0, 0, 0.2666666667) 100%);
739
+ background-color: rgba(0, 0, 0, 0.2);
740
+ }
741
+ .sse-viewer .sse-joystickBase.sse-mode-2d > .sse-joystick {
742
+ left: 30px;
743
+ }
744
+ .sse-viewer {
745
+ /* xr WebGL-required modal */
746
+ }
747
+ .sse-viewer .sse-xrModal {
748
+ position: absolute;
749
+ top: 0;
750
+ left: 0;
751
+ width: 100%;
752
+ height: 100%;
753
+ display: flex;
754
+ align-items: center;
755
+ justify-content: center;
756
+ }
757
+ .sse-viewer .sse-xrModal > .sse-xrModalContent {
758
+ width: min(360px, 100% - 32px);
759
+ padding: 20px;
760
+ border-radius: 16px;
761
+ border: 1px solid rgba(255, 255, 255, 0.08);
762
+ color: var(--sse-text);
763
+ background-color: color-mix(in srgb, var(--sse-bkg) 50%, transparent);
764
+ backdrop-filter: blur(20px);
765
+ -webkit-backdrop-filter: blur(20px);
766
+ }
767
+ .sse-viewer .sse-xrModal > .sse-xrModalContent > h2 {
768
+ font-size: 16px;
769
+ font-weight: bold;
770
+ color: var(--sse-text-light);
771
+ margin-bottom: 12px;
772
+ }
773
+ .sse-viewer .sse-xrModal > .sse-xrModalContent > p {
774
+ font-size: 13px;
775
+ line-height: 1.4;
776
+ color: var(--sse-text);
777
+ margin-bottom: 16px;
778
+ }
779
+ .sse-viewer .sse-xrModal > .sse-xrModalContent > .sse-xrModalButtons {
780
+ display: flex;
781
+ justify-content: flex-end;
782
+ gap: 8px;
783
+ }
784
+ .sse-viewer .sse-xrModal > .sse-xrModalContent > .sse-xrModalButtons > button {
785
+ height: 34px;
786
+ padding: 0 20px;
787
+ border: 1px solid rgba(255, 255, 255, 0.1);
788
+ border-radius: 8px;
789
+ font-size: 13px;
790
+ cursor: pointer;
791
+ color: var(--sse-text-dark);
792
+ background-color: rgba(255, 255, 255, 0.04);
793
+ transition: background-color 250ms ease, color 250ms ease;
794
+ }
795
+ .sse-viewer .sse-xrModal > .sse-xrModalContent > .sse-xrModalButtons > button:hover {
796
+ color: var(--sse-text-light);
797
+ background-color: rgba(255, 255, 255, 0.1);
798
+ }
799
+ .sse-viewer .sse-xrModal > .sse-xrModalContent > .sse-xrModalButtons > button.sse-xrModalOk {
800
+ color: var(--sse-text-light);
801
+ background-color: color-mix(in srgb, var(--sse-accent) 70%, transparent);
802
+ border-color: color-mix(in srgb, var(--sse-accent) 80%, transparent);
803
+ }
804
+ .sse-viewer .sse-xrModal > .sse-xrModalContent > .sse-xrModalButtons > button.sse-xrModalOk:hover {
805
+ background-color: var(--sse-accent);
806
+ }
807
+ .sse-viewer .sse-tooltip {
808
+ display: none;
809
+ position: absolute;
810
+ border-radius: 4px;
811
+ padding: 4px 4px;
812
+ font-size: 12px;
813
+ white-space: nowrap;
814
+ color: var(--sse-text);
815
+ background-color: var(--sse-bkg-dark);
816
+ }
817
+ .sse-viewer .sse-annotations {
818
+ position: absolute;
819
+ top: 0;
820
+ left: 0;
821
+ width: 100%;
822
+ height: 100%;
823
+ pointer-events: none;
824
+ }
825
+ .sse-viewer .sse-annotations * {
826
+ pointer-events: auto;
827
+ }
828
+ .sse-viewer .sse-annotations > .sse-annotation-hotspots {
829
+ position: absolute;
830
+ top: 0;
831
+ left: 0;
832
+ width: 100%;
833
+ height: 100%;
834
+ isolation: isolate;
835
+ pointer-events: none;
836
+ }
837
+ .sse-viewer .sse-annotations > .sse-annotation-hotspots > .sse-annotation-hotspot {
838
+ position: absolute;
839
+ left: 0;
840
+ top: 0;
841
+ will-change: transform;
842
+ display: none;
843
+ align-items: center;
844
+ justify-content: center;
845
+ box-sizing: border-box;
846
+ width: 26px;
847
+ height: 26px;
848
+ border-radius: 50%;
849
+ border: 2px solid rgba(255, 255, 255, 0.9);
850
+ cursor: pointer;
851
+ font-size: 12px;
852
+ font-weight: bold;
853
+ color: var(--sse-text-light);
854
+ background-color: rgba(0, 0, 0, 0.7);
855
+ box-shadow: 0 1px 4px rgba(0, 0, 0, 0.4);
856
+ transition: opacity 300ms cubic-bezier(0.45, 0, 0.55, 1), border-color 150ms ease, background-color 150ms ease;
857
+ }
858
+ .sse-viewer .sse-annotations > .sse-annotation-hotspots > .sse-annotation-hotspot:hover {
859
+ border-color: var(--sse-accent);
860
+ }
861
+ .sse-viewer .sse-annotations > .sse-annotation-hotspots > .sse-annotation-hotspot.sse-active {
862
+ border-color: var(--sse-accent);
863
+ background-color: var(--sse-accent);
864
+ }
865
+ .sse-viewer .sse-annotations > .sse-annotation-hotspots > .sse-annotation-hotspot.sse-occluded {
866
+ opacity: 0.4;
867
+ transition: opacity 450ms cubic-bezier(0.45, 0, 0.55, 1), border-color 150ms ease, background-color 150ms ease;
868
+ }
869
+ .sse-viewer .sse-annotations > .sse-annotation-hotspots > .sse-annotation-hotspot.sse-occluded:hover, .sse-viewer .sse-annotations > .sse-annotation-hotspots > .sse-annotation-hotspot.sse-occluded.sse-active {
870
+ opacity: 1;
871
+ transition: opacity 300ms cubic-bezier(0.45, 0, 0.55, 1), border-color 150ms ease, background-color 150ms ease;
872
+ }
873
+ .sse-viewer .sse-annotations > .sse-annotation {
874
+ --sse-annotation-bkg: rgba(0, 0, 0, 0.9);
875
+ position: absolute;
876
+ left: 0;
877
+ top: 0;
878
+ will-change: transform;
879
+ width: -moz-max-content;
880
+ width: max-content;
881
+ max-width: min(280px, 100% - 16px);
882
+ box-sizing: border-box;
883
+ padding: 10px 12px 12px;
884
+ border-radius: 12px;
885
+ border: 1px solid rgba(255, 255, 255, 0.08);
886
+ pointer-events: none;
887
+ font-size: 12px;
888
+ line-height: 1.45;
889
+ color: var(--sse-text);
890
+ background-color: var(--sse-annotation-bkg);
891
+ backdrop-filter: blur(20px);
892
+ -webkit-backdrop-filter: blur(20px);
893
+ overflow-wrap: break-word;
894
+ visibility: hidden;
895
+ opacity: 0;
896
+ transition: visibility 0s 0.2s, opacity 0.2s ease-out;
897
+ }
898
+ .sse-viewer .sse-annotations > .sse-annotation.sse-visible {
899
+ visibility: visible;
900
+ opacity: 1;
901
+ transition: opacity 0.2s ease-out;
902
+ }
903
+ .sse-viewer .sse-annotations > .sse-annotation > .sse-annotation-title {
904
+ font-size: 13px;
905
+ font-weight: bold;
906
+ color: var(--sse-text-light);
907
+ }
908
+ .sse-viewer .sse-annotations > .sse-annotation > .sse-annotation-text {
909
+ margin-top: 4px;
910
+ }
911
+ .sse-viewer .sse-annotations > .sse-annotation:has(> .sse-annotation-text:empty) {
912
+ padding-bottom: 10px;
913
+ }
914
+ .sse-viewer .sse-annotations > .sse-annotation:has(> .sse-annotation-text:empty) > .sse-annotation-text {
915
+ display: none;
916
+ }
917
+ .sse-viewer .sse-annotations > .sse-annotation:has(> .sse-annotation-title:empty):has(> .sse-annotation-text:empty) {
918
+ display: none;
919
+ }
920
+ .sse-viewer .sse-annotations > .sse-annotation.sse-arrow-right::before, .sse-viewer .sse-annotations > .sse-annotation.sse-arrow-left::before {
921
+ content: "";
922
+ position: absolute;
923
+ top: var(--arrow-top, 50%);
924
+ transform: translateY(-50%);
925
+ border-top: 8px solid transparent;
926
+ border-bottom: 8px solid transparent;
927
+ }
928
+ .sse-viewer .sse-annotations > .sse-annotation.sse-arrow-right::before {
929
+ left: -8px;
930
+ border-right: 8px solid var(--sse-annotation-bkg);
931
+ }
932
+ .sse-viewer .sse-annotations > .sse-annotation.sse-arrow-left::before {
933
+ right: -8px;
934
+ border-left: 8px solid var(--sse-annotation-bkg);
935
+ }
936
+ .sse-viewer {
937
+ /* annotationNav */
938
+ }
939
+ .sse-viewer .sse-annotationNav {
940
+ pointer-events: none;
941
+ }
942
+ .sse-viewer .sse-annotationNav.sse-faded-in {
943
+ visibility: visible;
944
+ opacity: 1;
945
+ transition: opacity 0.5s ease-out;
946
+ }
947
+ .sse-viewer .sse-annotationNav.sse-faded-out {
948
+ visibility: hidden;
949
+ opacity: 0;
950
+ transition: visibility 0s 0.5s, opacity 0.5s ease-out;
951
+ }
952
+ .sse-viewer .sse-annotationNav.sse-dimmed {
953
+ opacity: 0.4;
954
+ }
955
+ .sse-viewer .sse-annotationNav > button {
956
+ pointer-events: auto;
957
+ -webkit-appearance: none;
958
+ -moz-appearance: none;
959
+ appearance: none;
960
+ border: 0;
961
+ padding: 0;
962
+ margin: 0;
963
+ cursor: pointer;
964
+ display: flex;
965
+ align-items: center;
966
+ justify-content: center;
967
+ color: var(--sse-text);
968
+ background-color: rgba(0, 0, 0, 0.3);
969
+ }
970
+ .sse-viewer .sse-annotationNav > button:hover {
971
+ color: var(--sse-text-light);
972
+ background-color: rgba(0, 0, 0, 0.5);
973
+ }
974
+ .sse-viewer .sse-annotationNav > button > svg {
975
+ display: block;
976
+ }
977
+ .sse-viewer .sse-annotationNav > button > svg > g.sse-stroke {
978
+ fill: none;
979
+ stroke: black;
980
+ stroke-width: 3;
981
+ stroke-linecap: round;
982
+ stroke-linejoin: round;
983
+ opacity: 0.4;
984
+ }
985
+ .sse-viewer .sse-annotationNav > button > svg > g.sse-fill {
986
+ fill: none;
987
+ stroke: currentColor;
988
+ stroke-width: 2;
989
+ stroke-linecap: round;
990
+ stroke-linejoin: round;
991
+ }
992
+ .sse-viewer .sse-annotationNav.sse-desktop {
993
+ position: absolute;
994
+ top: max(16px, env(safe-area-inset-top));
995
+ left: 50%;
996
+ transform: translateX(-50%);
997
+ display: flex;
998
+ align-items: center;
999
+ gap: 0;
1000
+ border-radius: 6px;
1001
+ overflow: hidden;
1002
+ background-color: rgba(0, 0, 0, 0.6);
1003
+ }
1004
+ .sse-viewer .sse-annotationNav.sse-desktop > button {
1005
+ width: 34px;
1006
+ height: 34px;
1007
+ background-color: transparent;
1008
+ }
1009
+ .sse-viewer .sse-annotationNav.sse-desktop > button:hover {
1010
+ background-color: rgba(255, 255, 255, 0.1);
1011
+ }
1012
+ .sse-viewer .sse-annotationNav.sse-desktop > .sse-annotationInfo {
1013
+ pointer-events: none;
1014
+ display: flex;
1015
+ align-items: center;
1016
+ justify-content: center;
1017
+ gap: 8px;
1018
+ padding: 0 12px;
1019
+ white-space: nowrap;
1020
+ width: 300px;
1021
+ align-self: stretch;
1022
+ }
1023
+ .sse-viewer .sse-annotationNav.sse-desktop > .sse-annotationInfo > .sse-annotationNavNumber {
1024
+ flex-shrink: 0;
1025
+ display: flex;
1026
+ align-items: center;
1027
+ justify-content: center;
1028
+ box-sizing: border-box;
1029
+ min-width: 20px;
1030
+ height: 20px;
1031
+ padding: 0 4px;
1032
+ border-radius: 10px;
1033
+ border: 1.5px solid rgba(255, 255, 255, 0.9);
1034
+ font-size: 11px;
1035
+ font-weight: bold;
1036
+ color: var(--sse-text-light);
1037
+ background-color: rgba(0, 0, 0, 0.7);
1038
+ }
1039
+ .sse-viewer .sse-annotationNav.sse-desktop > .sse-annotationInfo > .sse-annotationNavNumber:empty {
1040
+ display: none;
1041
+ }
1042
+ .sse-viewer .sse-annotationNav.sse-desktop > .sse-annotationInfo > .sse-annotationNavTitle {
1043
+ min-width: 0;
1044
+ font-size: 14px;
1045
+ color: var(--sse-text-light);
1046
+ overflow: hidden;
1047
+ text-overflow: ellipsis;
1048
+ }
1049
+ .sse-viewer .sse-annotationNav.sse-desktop > .sse-annotationInfo > .sse-annotationNavNumber,
1050
+ .sse-viewer .sse-annotationNav.sse-desktop > .sse-annotationInfo > .sse-annotationNavTitle {
1051
+ transition: opacity 150ms ease;
1052
+ }
1053
+ .sse-viewer .sse-annotationNav.sse-desktop.sse-unselected > .sse-annotationInfo {
1054
+ pointer-events: auto;
1055
+ cursor: pointer;
1056
+ }
1057
+ .sse-viewer .sse-annotationNav.sse-desktop.sse-unselected > .sse-annotationInfo > .sse-annotationNavNumber,
1058
+ .sse-viewer .sse-annotationNav.sse-desktop.sse-unselected > .sse-annotationInfo > .sse-annotationNavTitle {
1059
+ opacity: 0.45;
1060
+ }
1061
+ .sse-viewer .sse-annotationNav.sse-desktop.sse-unselected > .sse-annotationInfo:hover {
1062
+ background-color: rgba(255, 255, 255, 0.1);
1063
+ }
1064
+ .sse-viewer .sse-annotationNav.sse-desktop.sse-unselected > .sse-annotationInfo:hover > .sse-annotationNavNumber,
1065
+ .sse-viewer .sse-annotationNav.sse-desktop.sse-unselected > .sse-annotationInfo:hover > .sse-annotationNavTitle {
1066
+ opacity: 1;
1067
+ }
1068
+ .sse-viewer .sse-annotationNav.sse-touch {
1069
+ position: absolute;
1070
+ top: 0;
1071
+ left: 0;
1072
+ width: 100%;
1073
+ height: 100%;
1074
+ }
1075
+ .sse-viewer .sse-annotationNav.sse-touch > .sse-annotationInfo {
1076
+ display: none;
1077
+ }
1078
+ .sse-viewer .sse-annotationNav.sse-touch > button {
1079
+ position: absolute;
1080
+ top: 50%;
1081
+ transform: translateY(-50%);
1082
+ width: 44px;
1083
+ height: 80px;
1084
+ background-color: rgba(0, 0, 0, 0.3);
1085
+ }
1086
+ .sse-viewer .sse-annotationNav.sse-touch > button:active {
1087
+ background-color: rgba(0, 0, 0, 0.4);
1088
+ }
1089
+ .sse-viewer .sse-annotationNav.sse-touch > .sse-annotationPrev {
1090
+ left: max(0px, env(safe-area-inset-left));
1091
+ border-radius: 0 6px 6px 0;
1092
+ }
1093
+ .sse-viewer .sse-annotationNav.sse-touch > .sse-annotationNext {
1094
+ right: max(0px, env(safe-area-inset-right));
1095
+ border-radius: 6px 0 0 6px;
1096
+ }