intelligent-system-design-language 0.3.21 → 0.3.23

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 (116) hide show
  1. package/.claude/agents/langium-language-designer.md +38 -38
  2. package/.claude/agents/typescript-vscode-expert.md +29 -29
  3. package/.claude/agents/ui-ux-designer.md +36 -36
  4. package/.claude/settings.local.json +33 -33
  5. package/.idea/inspectionProfiles/Project_Default.xml +6 -6
  6. package/.idea/isdl.iml +13 -13
  7. package/.idea/modules.xml +8 -8
  8. package/.idea/vcs.xml +6 -6
  9. package/.idea/watcherTasks.xml +3 -3
  10. package/.vscodeignore +18 -18
  11. package/LICENSE +673 -673
  12. package/README.md +86 -86
  13. package/bin/cli.js +4 -4
  14. package/bin/lsp.js +8 -8
  15. package/out/_backgrounds.scss +91 -91
  16. package/out/_handlebars.scss +497 -497
  17. package/out/_isdlStyles.scss +1444 -1381
  18. package/out/_vuetifyOverrides.scss +425 -425
  19. package/out/_vuetifyStyles.scss +31957 -31957
  20. package/out/cli/components/_backgrounds.scss +91 -91
  21. package/out/cli/components/_handlebars.scss +497 -497
  22. package/out/cli/components/_isdlStyles.scss +1444 -1381
  23. package/out/cli/components/_vuetifyOverrides.scss +425 -425
  24. package/out/cli/components/_vuetifyStyles.scss +31957 -31957
  25. package/out/cli/components/active-effect-sheet-generator.js +453 -453
  26. package/out/cli/components/chat-card-generator.js +654 -651
  27. package/out/cli/components/chat-card-generator.js.map +1 -1
  28. package/out/cli/components/css-generator.js +4 -4
  29. package/out/cli/components/damage-roll-generator.js +160 -160
  30. package/out/cli/components/datamodel-generator.js +264 -257
  31. package/out/cli/components/datamodel-generator.js.map +1 -1
  32. package/out/cli/components/derived-data-generator.js +923 -923
  33. package/out/cli/components/hotbar-drop-hook-generator.js +82 -82
  34. package/out/cli/components/init-hook-generator.js +495 -495
  35. package/out/cli/components/language-generator.js +1 -1
  36. package/out/cli/components/language-generator.js.map +1 -1
  37. package/out/cli/components/measured-template-preview.js +221 -221
  38. package/out/cli/components/method-generator.js +979 -887
  39. package/out/cli/components/method-generator.js.map +1 -1
  40. package/out/cli/components/ready-hook-generator.js +404 -404
  41. package/out/cli/components/token-generator.js +116 -116
  42. package/out/cli/components/vue/base-components/vue-attribute.js +138 -138
  43. package/out/cli/components/vue/base-components/vue-boolean.js +64 -64
  44. package/out/cli/components/vue/base-components/vue-calculator.js +93 -93
  45. package/out/cli/components/vue/base-components/vue-damage-application.js +356 -356
  46. package/out/cli/components/vue/base-components/vue-damage-bonuses.js +165 -165
  47. package/out/cli/components/vue/base-components/vue-damage-resistances.js +196 -196
  48. package/out/cli/components/vue/base-components/vue-damage-track.js +121 -121
  49. package/out/cli/components/vue/base-components/vue-date-time.js +42 -42
  50. package/out/cli/components/vue/base-components/vue-dice.js +98 -98
  51. package/out/cli/components/vue/base-components/vue-die.js +73 -73
  52. package/out/cli/components/vue/base-components/vue-document-choice.js +149 -149
  53. package/out/cli/components/vue/base-components/vue-document-choices.js +179 -179
  54. package/out/cli/components/vue/base-components/vue-document-link.js +60 -60
  55. package/out/cli/components/vue/base-components/vue-extended-choice.js +88 -88
  56. package/out/cli/components/vue/base-components/vue-inventory.js +519 -519
  57. package/out/cli/components/vue/base-components/vue-macro-choice.js +138 -138
  58. package/out/cli/components/vue/base-components/vue-measured-template.js +530 -530
  59. package/out/cli/components/vue/base-components/vue-money.js +483 -483
  60. package/out/cli/components/vue/base-components/vue-number.js +174 -174
  61. package/out/cli/components/vue/base-components/vue-paperdoll.js +43 -43
  62. package/out/cli/components/vue/base-components/vue-parent-property-reference.js +76 -76
  63. package/out/cli/components/vue/base-components/vue-prosemirror.js +18 -18
  64. package/out/cli/components/vue/base-components/vue-resource.js +136 -136
  65. package/out/cli/components/vue/base-components/vue-roll-visualizer.js +286 -109
  66. package/out/cli/components/vue/base-components/vue-roll-visualizer.js.map +1 -1
  67. package/out/cli/components/vue/base-components/vue-self-property-reference.js +62 -62
  68. package/out/cli/components/vue/base-components/vue-string-choice.js +98 -98
  69. package/out/cli/components/vue/base-components/vue-string-choices.js +203 -203
  70. package/out/cli/components/vue/base-components/vue-string.js +60 -60
  71. package/out/cli/components/vue/base-components/vue-text-field.js +53 -53
  72. package/out/cli/components/vue/base-components/vue-tracker.js +431 -431
  73. package/out/cli/components/vue/vue-action-component-generator.js +64 -64
  74. package/out/cli/components/vue/vue-active-effect-sheet-generator.js +856 -856
  75. package/out/cli/components/vue/vue-datatable-sheet-class-generator.js +292 -292
  76. package/out/cli/components/vue/vue-datatable2-component-generator.js +824 -824
  77. package/out/cli/components/vue/vue-document-creation-app.js +121 -121
  78. package/out/cli/components/vue/vue-document-creation-sheet.js +94 -94
  79. package/out/cli/components/vue/vue-generator.js +40 -40
  80. package/out/cli/components/vue/vue-mixin.js +296 -296
  81. package/out/cli/components/vue/vue-pinned-datatable-component-generator.js +260 -260
  82. package/out/cli/components/vue/vue-prompt-generator.js +91 -76
  83. package/out/cli/components/vue/vue-prompt-generator.js.map +1 -1
  84. package/out/cli/components/vue/vue-prompt-sheet-class-generator.js +317 -317
  85. package/out/cli/components/vue/vue-sheet-application-generator.js +1177 -1167
  86. package/out/cli/components/vue/vue-sheet-application-generator.js.map +1 -1
  87. package/out/cli/components/vue/vue-sheet-class-generator.js +510 -510
  88. package/out/cli/generator.js +438 -433
  89. package/out/cli/generator.js.map +1 -1
  90. package/out/extension/github/githubAuthProvider.js +71 -29
  91. package/out/extension/github/githubAuthProvider.js.map +1 -1
  92. package/out/extension/github/githubGistManager.js +4 -3
  93. package/out/extension/github/githubGistManager.js.map +1 -1
  94. package/out/extension/github/githubManager.js +40 -38
  95. package/out/extension/github/githubManager.js.map +1 -1
  96. package/out/extension/github/githubQuickActions.js +120 -120
  97. package/out/extension/github/system-workflow.yml +47 -47
  98. package/out/extension/main.cjs +909 -532
  99. package/out/extension/main.cjs.map +3 -3
  100. package/out/extension/package.json +419 -419
  101. package/out/language/generated/ast.js +51 -2
  102. package/out/language/generated/ast.js.map +1 -1
  103. package/out/language/generated/grammar.js +14240 -13991
  104. package/out/language/generated/grammar.js.map +1 -1
  105. package/out/language/intelligent-system-design-language-validator.js +32 -2
  106. package/out/language/intelligent-system-design-language-validator.js.map +1 -1
  107. package/out/language/isdl-scope-provider.js +14 -1
  108. package/out/language/isdl-scope-provider.js.map +1 -1
  109. package/out/language/main.cjs +913 -569
  110. package/out/language/main.cjs.map +3 -3
  111. package/out/package.json +419 -419
  112. package/out/progressbar.min.js +6 -6
  113. package/out/styles.scss +762 -747
  114. package/out/test/validating/diagnostics.test.js +40 -0
  115. package/out/test/validating/diagnostics.test.js.map +1 -1
  116. package/package.json +419 -419
package/out/styles.scss CHANGED
@@ -1,748 +1,763 @@
1
- @use "./backgrounds";
2
- @use "./handlebars";
3
- @use "./vuetifyStyles";
4
- @use "./vuetifyOverrides";
5
- @use "./isdlStyles";
6
-
7
- /* -------------------------------------------- */
8
- /* Vuetify Overrides */
9
- /* -------------------------------------------- */
10
-
11
- .#{$dynamic-id}.vue-application {
12
-
13
- html {
14
- overflow-x: hidden;
15
- overflow-y: scroll;
16
- }
17
- }
18
-
19
- /* -------------------------------------------- */
20
- /* System Stylesheet */
21
- /* -------------------------------------------- */
22
-
23
- .#{$dynamic-id}.handlebars-sheet {
24
- @include handlebars.handlebarsSheet;
25
- }
26
-
27
- .v-overlay-container {
28
- @include vuetifyStyles.vuetifyStyles;
29
- @include vuetifyOverrides.vuetifyOverrides;
30
-
31
- --v-theme-overlay-multiplier: 1;
32
- --v-disabled-opacity: 0.7;
33
- }
34
-
35
- // Copy of Foundry app styles for vue apps
36
- .#{$dynamic-id}.vue-application {
37
-
38
- --color-text-primary: var(--color-light-2);
39
- --color-header-background: rgba(0, 0, 0, 0.5);
40
- --color-border: var(--color-cool-4);
41
- --color-fieldset-border: var(--color-light-6);
42
- --color-form-hint: var(--color-light-5);
43
- --color-form-hint-hover: var(--color-light-4);
44
- --color-form-label: var(--color-light-4);
45
- --color-form-label-hover: var(--color-light-2);
46
- --color-select-option-bg: transparent;
47
- --v-theme-overlay-multiplier: 1;
48
- --v-disabled-opacity: 0.7;
49
-
50
-
51
- .window-content {
52
- @include vuetifyStyles.vuetifyStyles;
53
- @include vuetifyOverrides.vuetifyOverrides;
54
-
55
- --color-text-primary: var(--color-light-2);
56
- --color-header-background: rgba(0, 0, 0, 0.5);
57
- --color-border: var(--color-cool-4);
58
- --color-fieldset-border: var(--color-light-6);
59
- --color-form-hint: var(--color-light-5);
60
- --color-form-hint-hover: var(--color-light-4);
61
- --color-form-label: var(--color-light-4);
62
- --color-form-label-hover: var(--color-light-2);
63
- --color-select-option-bg: transparent;
64
- --v-theme-overlay-multiplier: 1;
65
- --v-disabled-opacity: 0.7;
66
-
67
- overflow-y: scroll;
68
-
69
- input[type="text"]:focus,
70
- input[type="number"]:focus,
71
- input[type="password"]:focus,
72
- input[type="date"]:focus,
73
- input[type="time"]:focus,
74
- input[type="search"]:focus {
75
- box-shadow: none;
76
- }
77
-
78
- .v-application {
79
- @include isdlStyles.isdlStyles;
80
- }
81
- }
82
-
83
- &.document-creation {
84
-
85
- .window-content {
86
- overflow: hidden;
87
- }
88
-
89
- // With the window sized to content (height: auto), neutralize Vuetify's 100vh
90
- // min-heights so the layout collapses to the form instead of leaving dark space.
91
- .v-application__wrap {
92
- min-height: unset;
93
- }
94
-
95
- .v-main {
96
- flex: 1 1 auto;
97
- min-height: 0;
98
- }
99
-
100
- .v-container {
101
- padding: 1rem;
102
- }
103
- }
104
-
105
- &.isdl-prompt {
106
-
107
- // Prompts pin a Submit/Cancel footer below a scrolling field list. For that
108
- // the height must cascade down to the inner scroller, so the outer window must
109
- // not scroll and the Vuetify layout must be allowed to shrink to the window.
110
- .window-content {
111
- overflow: hidden;
112
- }
113
-
114
- .v-application__wrap {
115
- min-height: unset;
116
- }
117
-
118
- .v-main {
119
- flex: 1 1 auto;
120
- min-height: 0;
121
- }
122
- }
123
-
124
- &.active-effect {
125
- .v-col {
126
- padding: 0;
127
- }
128
-
129
- .v-card {
130
- padding: 0.25rem;
131
-
132
- > .v-card-title {
133
- padding-top: 0;
134
- padding-bottom: 0;
135
- }
136
- }
137
-
138
- .v-autocomplete__selection {
139
- .v-chip__close {
140
- border: none;
141
- background: none;
142
- }
143
- }
144
-
145
- }
146
-
147
- position: absolute;
148
- z-index: var(--z-index-window);
149
- transform-origin: top left;
150
- display: flex;
151
- flex-direction: column;
152
- flex-wrap: nowrap;
153
- min-width: 200px;
154
- max-height: 100%;
155
- max-width: 100%;
156
- overflow: hidden;
157
- background: var(--background);
158
- font-size: var(--font-size-14);
159
- color: var(--color-text-primary);
160
- border: 1px solid var(--color-border);
161
- border-radius: 6px;
162
- box-shadow: 0 0 10px #000;
163
-
164
- > .window-resize-handle {
165
- position: absolute;
166
- inset: auto 0px 0px auto;
167
- width: 11px;
168
- height: 11px;
169
- cursor: nwse-resize;
170
- background: transparent url(/ui/resize-handle.webp) no-repeat center / contain;
171
- }
172
-
173
- > .window-header {
174
- --button-size: 24px;
175
- display: flex;
176
- flex-wrap: nowrap;
177
- align-items: center;
178
- flex: 0 0 var(--header-height);
179
- position: relative;
180
- overflow: hidden;
181
- padding: 0 0.5rem;
182
- gap: 0.25rem;
183
- z-index: 1;
184
- cursor: grab;
185
- background: var(--color-cool-5-90);
186
- font-size: var(--font-size-13);
187
- color: var(--color-light-1);
188
- border-bottom: 1px solid var(--color-border);
189
- font: unset;
190
-
191
- > .window-title {
192
- flex: 1;
193
- font-size: inherit;
194
- font-family: inherit;
195
- font-weight: inherit;
196
- text-shadow: none;
197
- margin: 0;
198
- line-height: var(--header-height);
199
- border: none;
200
- overflow: hidden;
201
- text-align: left;
202
- white-space: nowrap;
203
- text-overflow: ellipsis;
204
- }
205
-
206
- > .header-control {
207
- flex: 0 0 var(--button-size);
208
- height: var(--button-size);
209
- padding: 0;
210
- margin: 0;
211
- border: none;
212
- color: var(--color-light-text-heading);
213
- background: none;
214
- }
215
- }
216
-
217
- > .controls-dropdown {
218
- position: absolute;
219
- overflow: hidden auto;
220
- top: var(--header-height);
221
- right: 0;
222
- width: max-content;
223
- min-width: 100px;
224
- max-width: 300px;
225
- max-height: 0;
226
- z-index: 1;
227
- list-style: none;
228
- margin: 0 0.25rem;
229
- padding: 0;
230
- background: var(--background);
231
- border-radius: 0 0 4px 4px;
232
- transition: max-height 0.5s;
233
- pointer-events: none;
234
-
235
- > .header-control {
236
- margin: 0.25rem;
237
-
238
- > button {
239
- --button-background-color: none;
240
- --button-text-color: var(--color-text-primary);
241
- width: 100%;
242
- display: flex;
243
- justify-content: space-between;
244
- border: none;
245
- font-size: var(--font-size-12);
246
- color: var(--button-text-color);
247
- background: var(--button-background-color);
248
-
249
- > i {
250
- line-height: 28px;
251
- }
252
- }
253
- }
254
-
255
- &.expanded {
256
- max-height: calc(100% - var(--header-height));
257
- pointer-events: all;
258
- box-shadow: 0 0 8px var(--color-cool-3);
259
- }
260
- }
261
-
262
- > .window-content {
263
- backdrop-filter: blur(4px);
264
- }
265
-
266
-
267
- }
268
-
269
-
270
- .#{$dynamic-id} {
271
-
272
-
273
- --header-height: 36px;
274
- --minimized-width: 200px;
275
- --background: var(--color-cool-5-90);
276
- --color-text-primary: var(--color-light-2);
277
- --color-header-background: rgba(0, 0, 0, 0.5);
278
- --color-border: var(--color-cool-4);
279
- --color-fieldset-border: var(--color-light-6);
280
- --color-form-hint: var(--color-light-5);
281
- --color-form-hint-hover: var(--color-light-4);
282
- --color-form-label: var(--color-light-4);
283
- --color-form-label-hover: var(--color-light-2);
284
- --color-select-option-bg: transparent;
285
- --color-text-light-highlight: #f0f0e0;
286
- --color-text-light-heading: #c9c7b8;
287
- --color-text-light-primary: #b5b3a4;
288
- --color-text-dark-primary: #191813;
289
- --color-text-dark-secondary: #4b4a44;
290
- --color-text-dark-header: #23221d;
291
- --color-text-dark-inactive: #7a7971;
292
- --color-text-hyperlink: #ff6400;
293
- --color-text-selection: #f7f3e8;
294
- --color-text-selection-bg: #777;
295
- --color-text-light-0: #fff;
296
- --color-text-light-1: #eee;
297
- --color-text-light-2: #ddd;
298
- --color-text-light-3: #ccc;
299
- --color-text-light-4: #bbb;
300
- --color-text-light-5: #aaa;
301
- --color-text-light-6: #999;
302
- --color-text-light-7: #888;
303
- --color-text-dark-1: #111;
304
- --color-text-dark-2: #222;
305
- --color-text-dark-3: #444;
306
- --color-text-dark-4: #555;
307
- --color-text-dark-5: #666;
308
- --color-text-dark-6: #777;
309
- --color-border-light-1: #ddd;
310
- --color-border-light-2: #999;
311
- --color-border-dark-1: #111;
312
- --color-border-dark-2: #222;
313
- --color-border-dark-3: #333;
314
- --color-border-dark-4: #444;
315
- --color-border-dark-5: #666;
316
- --color-shadow-primary: #ff0000;
317
- --color-shadow-highlight: #ff6400;
318
- --color-shadow-dark: #000;
319
- --color-underline-inactive: #7a7971;
320
- --color-underline-active: #44191A;
321
- --color-underline-header: #782e22;
322
- --color-border-light-highlight: #f0f0e0;
323
- --color-border-light-primary: #b5b3a4;
324
- --color-border-light-secondary: #c9c7b8;
325
- --color-border-light-tertiary: #7a7971;
326
- --color-border-dark: #000;
327
- --color-border-dark-primary: #191813;
328
- --color-border-dark-secondary: #23221d;
329
- --color-border-dark-tertiary: #4b4a44;
330
- --color-border-highlight: #ff6400;
331
- --color-border-highlight-alt: #ff0000;
332
- --color-bg-btn-minor-inactive: #c9c7b8;
333
- --color-bg-btn-minor-active: #b5b3a4;
334
- --color-select-option-bg: #dad8cc;
335
- --color-checkbox-checked: #666;
336
- --color-ownership-none: #5500ff;
337
- --color-ownership-observer: #7a7971;
338
- --color-ownership-owner: #b5b3a4;
339
- --sidebar-width: 300px;
340
- --sidebar-header-height: 32px;
341
- --sidebar-item-height: 48px;
342
- --hotbar-height: 52px;
343
- --hotbar-width: 578px;
344
- --macro-size: 50px;
345
- --color-scrollbar: #782e22;
346
- --color-scrollbar-track: transparent;
347
- --color-scrollbar-border: #ff6400;
348
- --players-width: 200px;
349
- --form-field-height: 26px;
350
- --font-primary: "Signika", sans-serif;
351
- --line-height-12: 0.75rem;
352
- --line-height-16: 1rem;
353
- --line-height-20: 1.25rem;
354
- --line-height-30: 1.875rem;
355
-
356
- &.create-document {
357
- ol.unlist {
358
- display: grid;
359
- grid-template-columns: repeat(auto-fit, minmax(100px, 1fr));
360
- gap: 1rem;
361
- list-style: none;
362
-
363
- label {
364
- display: block;
365
- padding-bottom: 5px;
366
- }
367
-
368
- img {
369
- border-bottom: none;
370
- }
371
- }
372
- }
373
-
374
- &.chat-card {
375
-
376
- .chat-header {
377
- border: 2px solid gray;
378
- border-radius: 2px;
379
- align-items: center;
380
- transition: max-height 500ms ease;
381
-
382
- .name {
383
- font-size: 16px;
384
- font-weight: bold;
385
- }
386
-
387
- .type {
388
- font-style: italic;
389
- font-size: 14px;
390
- }
391
-
392
- > header {
393
- align-items: center;
394
-
395
- > img {
396
- flex: 0;
397
- border-radius: 0;
398
- margin-right: 1rem;
399
- }
400
-
401
- > i {
402
- flex: 0;
403
- }
404
- }
405
- }
406
-
407
- i {
408
- transition: all 250ms ease;
409
- margin-right: 0.25rem;
410
- }
411
-
412
- .collapsible-content {
413
- transition: height 500ms ease;
414
- padding: 0.25rem;
415
- }
416
-
417
- .collapsible > header {
418
- cursor: pointer;
419
- }
420
-
421
- .collapsed {
422
- max-height: 54px;
423
- overflow: hidden;
424
-
425
- .collapse-icon {
426
- transform: rotate(-90deg);
427
- }
428
-
429
- .collapsible-content {
430
- opacity: 0;
431
- height: 0px;
432
- }
433
- }
434
-
435
- .chat-info {
436
- color: black;
437
- .wide {
438
- flex-basis: 100%;
439
-
440
- > dd {
441
- padding-left: 0.5rem;
442
- }
443
- }
444
-
445
- dl {
446
- display: flex;
447
- flex-wrap: wrap;
448
- margin: 0.5em 0;
449
- color: black;
450
- text-shadow: none;
451
- }
452
-
453
- dt {
454
- flex-basis: 25%;
455
- color: black;
456
- text-shadow: none;
457
- }
458
-
459
- dd {
460
- flex-basis: 25%;
461
- margin: 0;
462
- padding: 0 0 10px 0;
463
-
464
- > p {
465
- line-height: 1.5rem;
466
- }
467
- }
468
-
469
- .dice-roll {
470
- .dice-total {
471
- height: 35px;
472
- line-height: 35px;
473
- margin-bottom: 0.5rem;
474
- font-weight: normal;
475
- font-size: 16px;
476
- text-align: left;
477
-
478
- > i {
479
- padding-left: 0.5rem;
480
- line-height: 35px;
481
- position: absolute;
482
- }
483
-
484
- .dice-info {
485
- display: inline-block;
486
- width: 200px;
487
- white-space: nowrap;
488
- overflow: hidden;
489
- text-overflow: ellipsis;
490
- margin-left: 30px;
491
- }
492
-
493
- > .label {
494
- font-weight: bold;
495
- }
496
-
497
- > .result {
498
- font-size: 20px;
499
- font-weight: bold;
500
- right: 10px;
501
- position: absolute;
502
- border-left: 1px solid gray;
503
- padding-left: 10px;
504
- line-height: 33px;
505
- }
506
- }
507
-
508
- // Enhanced styling for damage rolls
509
- &.damage-roll {
510
- position: relative;
511
-
512
- .dice-total {
513
- .damage-type {
514
- font-weight: normal;
515
- font-size: 14px;
516
- margin-left: 8px;
517
- opacity: 0.9;
518
- }
519
- }
520
-
521
- .damage-metadata {
522
- margin-top: 0.25rem;
523
- margin-left: 0.25px;
524
- font-size: 12px;
525
- color: var(--color-text-dark-1);
526
-
527
- .damage-property {
528
- display: inline-block;
529
- padding: 2px 6px;
530
- background: rgba(0, 0, 0, 0.2);
531
- border-radius: 3px;
532
- border: 1px solid rgba(255, 255, 255, 0.1);
533
- }
534
- }
535
-
536
- }
537
- }
538
-
539
- .measured-template {
540
- display: flex;
541
-
542
- .measured-template-button {
543
- flex: 0 0 100%;
544
- height: 35px;
545
- line-height: 35px;
546
- margin: 0;
547
- margin-bottom: 0.5rem;
548
- font-weight: normal;
549
- font-size: 16px;
550
- text-align: left;
551
- position: relative;
552
- background: rgba(0, 0, 0, 0.1);
553
- --color-border-light-2: #999;
554
- border: 1px solid var(--color-border-light-2);
555
- border-radius: 3px;
556
- box-shadow: 0 0 2px #FFF inset;
557
- word-break: break-all;
558
-
559
- > i {
560
- padding-left: 0.5rem;
561
- line-height: 30px;
562
- position: absolute;
563
- }
564
-
565
- .summary {
566
- display: inline-block;
567
- width: 100%;
568
- white-space: nowrap;
569
- overflow: hidden;
570
- text-overflow: ellipsis;
571
- margin-left: 8px;
572
- font-size: 16px;
573
- font-weight: normal;
574
-
575
- > .result {
576
- font-size: 20px;
577
- font-weight: bold;
578
- right: 2px;
579
- position: absolute;
580
- border-left: 1px solid gray;
581
- padding-left: 7px;
582
- height: 34px;
583
-
584
- > i {
585
- &:hover {
586
- cursor: pointer;
587
- box-shadow: 0 0 10px var(--color-shadow-highlight);
588
- }
589
- }
590
- }
591
- }
592
- }
593
- }
594
-
595
- .chat-info-tags {
596
- display: grid;
597
- grid-template-columns: repeat(4, auto);
598
- gap: 5px;
599
- /* Space between items */
600
-
601
- .tag {
602
- border: 2px outset whitesmoke;
603
- border-radius: 2px;
604
- display: flex;
605
- flex-direction: column;
606
- font-size: 12px;
607
- text-align: center;
608
-
609
- .label {
610
- font-weight: bold;
611
- }
612
- }
613
- }
614
- }
615
-
616
- .chat-effects {
617
-
618
- .title {
619
- margin-top: 1rem;
620
- font-size: 1.25em;
621
- border-bottom: 1px solid var(--color-underline-header);
622
- color: var(--color-text-dark-primary);
623
-
624
- > i {
625
- right: 1rem;
626
- }
627
- }
628
-
629
- img {
630
- flex: 0;
631
- }
632
-
633
- .effect {
634
- .name {
635
- margin-left: 0.5rem;
636
- line-height: 30px;
637
- font-size: 16px;
638
- }
639
-
640
- &:not(:last-child) {
641
- border-bottom: 1px dashed gray;
642
- margin-bottom: 0.75rem;
643
- padding-bottom: 0.25rem;
644
- }
645
-
646
- &:hover {
647
- cursor: pointer;
648
- border: 1px dashed var(--color-shadow-primary);
649
- }
650
- }
651
- }
652
- }
653
- }
654
-
655
-
656
- /* ----------------------------------------- */
657
- /* Context Dropdown Menu
658
- /* ----------------------------------------- */
659
- #context-menu2 {
660
- width: 100%;
661
- height: max-content;
662
- min-width: 200px;
663
- max-width: 360px;
664
- position: absolute;
665
- left: 0;
666
- background: linear-gradient(180deg, rgba(24, 23, 20, 0.8) 0%, rgba(35, 34, 29, 0.8) 100%);
667
- border: 1px solid #000;
668
- box-shadow: 0 0 20px -2px #000;
669
- border-radius: 5px;
670
- color: #EEE;
671
- z-index: 31;
672
-
673
- h2 {
674
- font-family: 'warnock-pro', sans-serif;
675
- line-height: 44px;
676
- padding: 0 5px;
677
- border-bottom: 1px solid var(--color-border-highlight);
678
- text-shadow: none;
679
- }
680
- }
681
-
682
- #context-menu2.expand-down {
683
- top: calc(100% + 2px);
684
- }
685
-
686
- #context-menu2.expand-up {
687
- bottom: calc(100% + 2px);
688
- }
689
-
690
- #context-menu2 ol.context-items {
691
- list-style: none;
692
- margin: 0;
693
- padding: 0;
694
- }
695
-
696
- #context-menu2 li.context-item {
697
- padding: 0 5px;
698
- line-height: 32px;
699
- text-shadow: none;
700
- }
701
-
702
- #context-menu2 li.context-item:hover {
703
- color: #FFF;
704
- text-shadow: 0 0 4px red;
705
- }
706
-
707
- #context-menu2 li.context-item > i {
708
- margin-right: 5px;
709
- }
710
-
711
- .window-app #context-menu2 {
712
- z-index: 101;
713
- }
714
-
715
- #chat-log #context-menu2 {
716
- button {
717
- font-size: 12px;
718
- background: transparent;
719
- color: #fff;
720
- border: 1px dashed var(--color-border-highlight);
721
- box-shadow: none;
722
- opacity: 0.5;
723
- background: rgba(160, 157, 231, 0.5);
724
-
725
- &.active,
726
- &:hover {
727
- border: 1px solid var(--color-border-highlight);
728
- color: #fff;
729
- opacity: 1;
730
- box-shadow: inset 0 0 10px 0px var(--color-shadow-primary);
731
- }
732
-
733
- &:hover {
734
- border: 1px solid #35a7e9;
735
- box-shadow: inset 0 0 8px 2px var(--color-shadow-primary);
736
- }
737
- }
738
-
739
- .reroll,
740
- .modifiers {
741
- border-top: 1px solid var(--color-border-highlight);
742
- }
743
-
744
- .modifiers {
745
- margin: 6px 0 0;
746
- padding-top: 6px;
747
- }
1
+ @use "./backgrounds";
2
+ @use "./handlebars";
3
+ @use "./vuetifyStyles";
4
+ @use "./vuetifyOverrides";
5
+ @use "./isdlStyles";
6
+
7
+ /* -------------------------------------------- */
8
+ /* Vuetify Overrides */
9
+ /* -------------------------------------------- */
10
+
11
+ .#{$dynamic-id}.vue-application {
12
+
13
+ html {
14
+ overflow-x: hidden;
15
+ overflow-y: scroll;
16
+ }
17
+ }
18
+
19
+ /* -------------------------------------------- */
20
+ /* System Stylesheet */
21
+ /* -------------------------------------------- */
22
+
23
+ .#{$dynamic-id}.handlebars-sheet {
24
+ @include handlebars.handlebarsSheet;
25
+ }
26
+
27
+ .v-overlay-container {
28
+ @include vuetifyStyles.vuetifyStyles;
29
+ @include vuetifyOverrides.vuetifyOverrides;
30
+
31
+ --v-theme-overlay-multiplier: 1;
32
+ --v-disabled-opacity: 0.7;
33
+ }
34
+
35
+ // Copy of Foundry app styles for vue apps
36
+ .#{$dynamic-id}.vue-application {
37
+
38
+ --color-text-primary: var(--color-light-2);
39
+ --color-header-background: rgba(0, 0, 0, 0.5);
40
+ --color-border: var(--color-cool-4);
41
+ --color-fieldset-border: var(--color-light-6);
42
+ --color-form-hint: var(--color-light-5);
43
+ --color-form-hint-hover: var(--color-light-4);
44
+ --color-form-label: var(--color-light-4);
45
+ --color-form-label-hover: var(--color-light-2);
46
+ --color-select-option-bg: transparent;
47
+ --v-theme-overlay-multiplier: 1;
48
+ --v-disabled-opacity: 0.7;
49
+
50
+
51
+ .window-content {
52
+ @include vuetifyStyles.vuetifyStyles;
53
+ @include vuetifyOverrides.vuetifyOverrides;
54
+
55
+ --color-text-primary: var(--color-light-2);
56
+ --color-header-background: rgba(0, 0, 0, 0.5);
57
+ --color-border: var(--color-cool-4);
58
+ --color-fieldset-border: var(--color-light-6);
59
+ --color-form-hint: var(--color-light-5);
60
+ --color-form-hint-hover: var(--color-light-4);
61
+ --color-form-label: var(--color-light-4);
62
+ --color-form-label-hover: var(--color-light-2);
63
+ --color-select-option-bg: transparent;
64
+ --v-theme-overlay-multiplier: 1;
65
+ --v-disabled-opacity: 0.7;
66
+
67
+ overflow-y: scroll;
68
+
69
+ input[type="text"]:focus,
70
+ input[type="number"]:focus,
71
+ input[type="password"]:focus,
72
+ input[type="date"]:focus,
73
+ input[type="time"]:focus,
74
+ input[type="search"]:focus {
75
+ box-shadow: none;
76
+ }
77
+
78
+ .v-application {
79
+ @include isdlStyles.isdlStyles;
80
+ }
81
+ }
82
+
83
+ &.document-creation {
84
+
85
+ .window-content {
86
+ overflow: hidden;
87
+ }
88
+
89
+ // With the window sized to content (height: auto), neutralize Vuetify's 100vh
90
+ // min-heights so the layout collapses to the form instead of leaving dark space.
91
+ .v-application__wrap {
92
+ min-height: unset;
93
+ }
94
+
95
+ .v-main {
96
+ flex: 1 1 auto;
97
+ min-height: 0;
98
+ }
99
+
100
+ .v-container {
101
+ padding: 1rem;
102
+ }
103
+ }
104
+
105
+ &.isdl-prompt {
106
+
107
+ // Cap prompt windows at 80% of the viewport (overrides the base max-height: 100%).
108
+ max-height: 80vh;
109
+
110
+ // When a prompt exceeds the cap, scroll the content. We scroll at .window-content
111
+ // rather than an inner field-list scroller because the window is height:auto and
112
+ // max-height is NOT a definite height, so a percentage/flex height cascade can't
113
+ // bound an inner scroller. window-content has a real used height, so it scrolls
114
+ // reliably; the Submit/Cancel footer stays visible via position: sticky.
115
+ .window-content {
116
+ overflow-y: auto;
117
+ overflow-x: hidden;
118
+ }
119
+
120
+ .isdl-prompt-footer {
121
+ position: sticky;
122
+ bottom: 0;
123
+ z-index: 2;
124
+ background: rgb(var(--v-theme-surface));
125
+ border-top: 1px solid rgba(0, 0, 0, 0.12);
126
+ }
127
+
128
+ .v-application__wrap {
129
+ min-height: unset;
130
+ }
131
+
132
+ .v-main {
133
+ flex: 1 1 auto;
134
+ min-height: 0;
135
+ }
136
+ }
137
+
138
+ &.active-effect {
139
+ .v-col {
140
+ padding: 0;
141
+ }
142
+
143
+ .v-card {
144
+ padding: 0.25rem;
145
+
146
+ > .v-card-title {
147
+ padding-top: 0;
148
+ padding-bottom: 0;
149
+ }
150
+ }
151
+
152
+ .v-autocomplete__selection {
153
+ .v-chip__close {
154
+ border: none;
155
+ background: none;
156
+ }
157
+ }
158
+
159
+ }
160
+
161
+ position: absolute;
162
+ z-index: var(--z-index-window);
163
+ transform-origin: top left;
164
+ display: flex;
165
+ flex-direction: column;
166
+ flex-wrap: nowrap;
167
+ min-width: 200px;
168
+ max-height: 100%;
169
+ max-width: 100%;
170
+ overflow: hidden;
171
+ background: var(--background);
172
+ font-size: var(--font-size-14);
173
+ color: var(--color-text-primary);
174
+ border: 1px solid var(--color-border);
175
+ border-radius: 6px;
176
+ box-shadow: 0 0 10px #000;
177
+
178
+ > .window-resize-handle {
179
+ position: absolute;
180
+ inset: auto 0px 0px auto;
181
+ width: 11px;
182
+ height: 11px;
183
+ cursor: nwse-resize;
184
+ background: transparent url(/ui/resize-handle.webp) no-repeat center / contain;
185
+ }
186
+
187
+ > .window-header {
188
+ --button-size: 24px;
189
+ display: flex;
190
+ flex-wrap: nowrap;
191
+ align-items: center;
192
+ flex: 0 0 var(--header-height);
193
+ position: relative;
194
+ overflow: hidden;
195
+ padding: 0 0.5rem;
196
+ gap: 0.25rem;
197
+ z-index: 1;
198
+ cursor: grab;
199
+ background: var(--color-cool-5-90);
200
+ font-size: var(--font-size-13);
201
+ color: var(--color-light-1);
202
+ border-bottom: 1px solid var(--color-border);
203
+ font: unset;
204
+
205
+ > .window-title {
206
+ flex: 1;
207
+ font-size: inherit;
208
+ font-family: inherit;
209
+ font-weight: inherit;
210
+ text-shadow: none;
211
+ margin: 0;
212
+ line-height: var(--header-height);
213
+ border: none;
214
+ overflow: hidden;
215
+ text-align: left;
216
+ white-space: nowrap;
217
+ text-overflow: ellipsis;
218
+ }
219
+
220
+ > .header-control {
221
+ flex: 0 0 var(--button-size);
222
+ height: var(--button-size);
223
+ padding: 0;
224
+ margin: 0;
225
+ border: none;
226
+ color: var(--color-light-text-heading);
227
+ background: none;
228
+ }
229
+ }
230
+
231
+ > .controls-dropdown {
232
+ position: absolute;
233
+ overflow: hidden auto;
234
+ top: var(--header-height);
235
+ right: 0;
236
+ width: max-content;
237
+ min-width: 100px;
238
+ max-width: 300px;
239
+ max-height: 0;
240
+ z-index: 1;
241
+ list-style: none;
242
+ margin: 0 0.25rem;
243
+ padding: 0;
244
+ background: var(--background);
245
+ border-radius: 0 0 4px 4px;
246
+ transition: max-height 0.5s;
247
+ pointer-events: none;
248
+
249
+ > .header-control {
250
+ margin: 0.25rem;
251
+
252
+ > button {
253
+ --button-background-color: none;
254
+ --button-text-color: var(--color-text-primary);
255
+ width: 100%;
256
+ display: flex;
257
+ justify-content: space-between;
258
+ border: none;
259
+ font-size: var(--font-size-12);
260
+ color: var(--button-text-color);
261
+ background: var(--button-background-color);
262
+
263
+ > i {
264
+ line-height: 28px;
265
+ }
266
+ }
267
+ }
268
+
269
+ &.expanded {
270
+ max-height: calc(100% - var(--header-height));
271
+ pointer-events: all;
272
+ box-shadow: 0 0 8px var(--color-cool-3);
273
+ }
274
+ }
275
+
276
+ > .window-content {
277
+ backdrop-filter: blur(4px);
278
+ }
279
+
280
+
281
+ }
282
+
283
+
284
+ .#{$dynamic-id} {
285
+
286
+
287
+ --header-height: 36px;
288
+ --minimized-width: 200px;
289
+ --background: var(--color-cool-5-90);
290
+ --color-text-primary: var(--color-light-2);
291
+ --color-header-background: rgba(0, 0, 0, 0.5);
292
+ --color-border: var(--color-cool-4);
293
+ --color-fieldset-border: var(--color-light-6);
294
+ --color-form-hint: var(--color-light-5);
295
+ --color-form-hint-hover: var(--color-light-4);
296
+ --color-form-label: var(--color-light-4);
297
+ --color-form-label-hover: var(--color-light-2);
298
+ --color-select-option-bg: transparent;
299
+ --color-text-light-highlight: #f0f0e0;
300
+ --color-text-light-heading: #c9c7b8;
301
+ --color-text-light-primary: #b5b3a4;
302
+ --color-text-dark-primary: #191813;
303
+ --color-text-dark-secondary: #4b4a44;
304
+ --color-text-dark-header: #23221d;
305
+ --color-text-dark-inactive: #7a7971;
306
+ --color-text-hyperlink: #ff6400;
307
+ --color-text-selection: #f7f3e8;
308
+ --color-text-selection-bg: #777;
309
+ --color-text-light-0: #fff;
310
+ --color-text-light-1: #eee;
311
+ --color-text-light-2: #ddd;
312
+ --color-text-light-3: #ccc;
313
+ --color-text-light-4: #bbb;
314
+ --color-text-light-5: #aaa;
315
+ --color-text-light-6: #999;
316
+ --color-text-light-7: #888;
317
+ --color-text-dark-1: #111;
318
+ --color-text-dark-2: #222;
319
+ --color-text-dark-3: #444;
320
+ --color-text-dark-4: #555;
321
+ --color-text-dark-5: #666;
322
+ --color-text-dark-6: #777;
323
+ --color-border-light-1: #ddd;
324
+ --color-border-light-2: #999;
325
+ --color-border-dark-1: #111;
326
+ --color-border-dark-2: #222;
327
+ --color-border-dark-3: #333;
328
+ --color-border-dark-4: #444;
329
+ --color-border-dark-5: #666;
330
+ --color-shadow-primary: #ff0000;
331
+ --color-shadow-highlight: #ff6400;
332
+ --color-shadow-dark: #000;
333
+ --color-underline-inactive: #7a7971;
334
+ --color-underline-active: #44191A;
335
+ --color-underline-header: #782e22;
336
+ --color-border-light-highlight: #f0f0e0;
337
+ --color-border-light-primary: #b5b3a4;
338
+ --color-border-light-secondary: #c9c7b8;
339
+ --color-border-light-tertiary: #7a7971;
340
+ --color-border-dark: #000;
341
+ --color-border-dark-primary: #191813;
342
+ --color-border-dark-secondary: #23221d;
343
+ --color-border-dark-tertiary: #4b4a44;
344
+ --color-border-highlight: #ff6400;
345
+ --color-border-highlight-alt: #ff0000;
346
+ --color-bg-btn-minor-inactive: #c9c7b8;
347
+ --color-bg-btn-minor-active: #b5b3a4;
348
+ --color-select-option-bg: #dad8cc;
349
+ --color-checkbox-checked: #666;
350
+ --color-ownership-none: #5500ff;
351
+ --color-ownership-observer: #7a7971;
352
+ --color-ownership-owner: #b5b3a4;
353
+ --sidebar-width: 300px;
354
+ --sidebar-header-height: 32px;
355
+ --sidebar-item-height: 48px;
356
+ --hotbar-height: 52px;
357
+ --hotbar-width: 578px;
358
+ --macro-size: 50px;
359
+ --color-scrollbar: #782e22;
360
+ --color-scrollbar-track: transparent;
361
+ --color-scrollbar-border: #ff6400;
362
+ --players-width: 200px;
363
+ --form-field-height: 26px;
364
+ --font-primary: "Signika", sans-serif;
365
+ --line-height-12: 0.75rem;
366
+ --line-height-16: 1rem;
367
+ --line-height-20: 1.25rem;
368
+ --line-height-30: 1.875rem;
369
+
370
+ &.create-document {
371
+ ol.unlist {
372
+ display: grid;
373
+ grid-template-columns: repeat(auto-fit, minmax(100px, 1fr));
374
+ gap: 1rem;
375
+ list-style: none;
376
+
377
+ label {
378
+ display: block;
379
+ padding-bottom: 5px;
380
+ }
381
+
382
+ img {
383
+ border-bottom: none;
384
+ }
385
+ }
386
+ }
387
+
388
+ &.chat-card {
389
+
390
+ .chat-header {
391
+ border: 2px solid gray;
392
+ border-radius: 2px;
393
+ align-items: center;
394
+ transition: max-height 500ms ease;
395
+
396
+ .name {
397
+ font-size: 16px;
398
+ font-weight: bold;
399
+ }
400
+
401
+ .type {
402
+ font-style: italic;
403
+ font-size: 14px;
404
+ }
405
+
406
+ > header {
407
+ align-items: center;
408
+
409
+ > img {
410
+ flex: 0;
411
+ border-radius: 0;
412
+ margin-right: 1rem;
413
+ }
414
+
415
+ > i {
416
+ flex: 0;
417
+ }
418
+ }
419
+ }
420
+
421
+ i {
422
+ transition: all 250ms ease;
423
+ margin-right: 0.25rem;
424
+ }
425
+
426
+ .collapsible-content {
427
+ transition: height 500ms ease;
428
+ padding: 0.25rem;
429
+ }
430
+
431
+ .collapsible > header {
432
+ cursor: pointer;
433
+ }
434
+
435
+ .collapsed {
436
+ max-height: 54px;
437
+ overflow: hidden;
438
+
439
+ .collapse-icon {
440
+ transform: rotate(-90deg);
441
+ }
442
+
443
+ .collapsible-content {
444
+ opacity: 0;
445
+ height: 0px;
446
+ }
447
+ }
448
+
449
+ .chat-info {
450
+ color: black;
451
+ .wide {
452
+ flex-basis: 100%;
453
+
454
+ > dd {
455
+ padding-left: 0.5rem;
456
+ }
457
+ }
458
+
459
+ dl {
460
+ display: flex;
461
+ flex-wrap: wrap;
462
+ margin: 0.5em 0;
463
+ color: black;
464
+ text-shadow: none;
465
+ }
466
+
467
+ dt {
468
+ flex-basis: 25%;
469
+ color: black;
470
+ text-shadow: none;
471
+ }
472
+
473
+ dd {
474
+ flex-basis: 25%;
475
+ margin: 0;
476
+ padding: 0 0 10px 0;
477
+
478
+ > p {
479
+ line-height: 1.5rem;
480
+ }
481
+ }
482
+
483
+ .dice-roll {
484
+ .dice-total {
485
+ height: 35px;
486
+ line-height: 35px;
487
+ margin-bottom: 0.5rem;
488
+ font-weight: normal;
489
+ font-size: 16px;
490
+ text-align: left;
491
+
492
+ > i {
493
+ padding-left: 0.5rem;
494
+ line-height: 35px;
495
+ position: absolute;
496
+ }
497
+
498
+ .dice-info {
499
+ display: inline-block;
500
+ width: 200px;
501
+ white-space: nowrap;
502
+ overflow: hidden;
503
+ text-overflow: ellipsis;
504
+ margin-left: 30px;
505
+ }
506
+
507
+ > .label {
508
+ font-weight: bold;
509
+ }
510
+
511
+ > .result {
512
+ font-size: 20px;
513
+ font-weight: bold;
514
+ right: 10px;
515
+ position: absolute;
516
+ border-left: 1px solid gray;
517
+ padding-left: 10px;
518
+ line-height: 33px;
519
+ }
520
+ }
521
+
522
+ // Enhanced styling for damage rolls
523
+ &.damage-roll {
524
+ position: relative;
525
+
526
+ .dice-total {
527
+ .damage-type {
528
+ font-weight: normal;
529
+ font-size: 14px;
530
+ margin-left: 8px;
531
+ opacity: 0.9;
532
+ }
533
+ }
534
+
535
+ .damage-metadata {
536
+ margin-top: 0.25rem;
537
+ margin-left: 0.25px;
538
+ font-size: 12px;
539
+ color: var(--color-text-dark-1);
540
+
541
+ .damage-property {
542
+ display: inline-block;
543
+ padding: 2px 6px;
544
+ background: rgba(0, 0, 0, 0.2);
545
+ border-radius: 3px;
546
+ border: 1px solid rgba(255, 255, 255, 0.1);
547
+ }
548
+ }
549
+
550
+ }
551
+ }
552
+
553
+ .measured-template {
554
+ display: flex;
555
+
556
+ .measured-template-button {
557
+ flex: 0 0 100%;
558
+ height: 35px;
559
+ line-height: 35px;
560
+ margin: 0;
561
+ margin-bottom: 0.5rem;
562
+ font-weight: normal;
563
+ font-size: 16px;
564
+ text-align: left;
565
+ position: relative;
566
+ background: rgba(0, 0, 0, 0.1);
567
+ --color-border-light-2: #999;
568
+ border: 1px solid var(--color-border-light-2);
569
+ border-radius: 3px;
570
+ box-shadow: 0 0 2px #FFF inset;
571
+ word-break: break-all;
572
+
573
+ > i {
574
+ padding-left: 0.5rem;
575
+ line-height: 30px;
576
+ position: absolute;
577
+ }
578
+
579
+ .summary {
580
+ display: inline-block;
581
+ width: 100%;
582
+ white-space: nowrap;
583
+ overflow: hidden;
584
+ text-overflow: ellipsis;
585
+ margin-left: 8px;
586
+ font-size: 16px;
587
+ font-weight: normal;
588
+
589
+ > .result {
590
+ font-size: 20px;
591
+ font-weight: bold;
592
+ right: 2px;
593
+ position: absolute;
594
+ border-left: 1px solid gray;
595
+ padding-left: 7px;
596
+ height: 34px;
597
+
598
+ > i {
599
+ &:hover {
600
+ cursor: pointer;
601
+ box-shadow: 0 0 10px var(--color-shadow-highlight);
602
+ }
603
+ }
604
+ }
605
+ }
606
+ }
607
+ }
608
+
609
+ .chat-info-tags {
610
+ display: grid;
611
+ grid-template-columns: repeat(4, auto);
612
+ gap: 5px;
613
+ /* Space between items */
614
+
615
+ .tag {
616
+ border: 2px outset whitesmoke;
617
+ border-radius: 2px;
618
+ display: flex;
619
+ flex-direction: column;
620
+ font-size: 12px;
621
+ text-align: center;
622
+
623
+ .label {
624
+ font-weight: bold;
625
+ }
626
+ }
627
+ }
628
+ }
629
+
630
+ .chat-effects {
631
+
632
+ .title {
633
+ margin-top: 1rem;
634
+ font-size: 1.25em;
635
+ border-bottom: 1px solid var(--color-underline-header);
636
+ color: var(--color-text-dark-primary);
637
+
638
+ > i {
639
+ right: 1rem;
640
+ }
641
+ }
642
+
643
+ img {
644
+ flex: 0;
645
+ }
646
+
647
+ .effect {
648
+ .name {
649
+ margin-left: 0.5rem;
650
+ line-height: 30px;
651
+ font-size: 16px;
652
+ }
653
+
654
+ &:not(:last-child) {
655
+ border-bottom: 1px dashed gray;
656
+ margin-bottom: 0.75rem;
657
+ padding-bottom: 0.25rem;
658
+ }
659
+
660
+ &:hover {
661
+ cursor: pointer;
662
+ border: 1px dashed var(--color-shadow-primary);
663
+ }
664
+ }
665
+ }
666
+ }
667
+ }
668
+
669
+
670
+ /* ----------------------------------------- */
671
+ /* Context Dropdown Menu
672
+ /* ----------------------------------------- */
673
+ #context-menu2 {
674
+ width: max-content;
675
+ height: max-content;
676
+ min-width: 200px;
677
+ max-width: 360px;
678
+ // Rendered to <body> with explicit viewport coordinates (see ContextMenu2._setPosition) so
679
+ // the menu escapes the chat log's overflow clipping and any transformed sheet ancestor.
680
+ position: fixed;
681
+ background: linear-gradient(180deg, rgba(24, 23, 20, 0.8) 0%, rgba(35, 34, 29, 0.8) 100%);
682
+ border: 1px solid #000;
683
+ box-shadow: 0 0 20px -2px #000;
684
+ border-radius: 5px;
685
+ color: #EEE;
686
+ z-index: 100000;
687
+
688
+ h2 {
689
+ font-family: 'warnock-pro', sans-serif;
690
+ line-height: 44px;
691
+ padding: 0 5px;
692
+ border-bottom: 1px solid var(--color-border-highlight);
693
+ text-shadow: none;
694
+ }
695
+ }
696
+
697
+ // Positioning is set inline from the target's viewport rect (ContextMenu2._setPosition);
698
+ // these classes remain only as open-direction markers for the slide animation.
699
+ #context-menu2.expand-down {
700
+ transform-origin: top;
701
+ }
702
+
703
+ #context-menu2.expand-up {
704
+ transform-origin: bottom;
705
+ }
706
+
707
+ #context-menu2 ol.context-items {
708
+ list-style: none;
709
+ margin: 0;
710
+ padding: 0;
711
+ }
712
+
713
+ #context-menu2 li.context-item {
714
+ padding: 0 5px;
715
+ line-height: 32px;
716
+ text-shadow: none;
717
+ }
718
+
719
+ #context-menu2 li.context-item:hover {
720
+ color: #FFF;
721
+ text-shadow: 0 0 4px red;
722
+ }
723
+
724
+ #context-menu2 li.context-item > i {
725
+ margin-right: 5px;
726
+ }
727
+
728
+ // The menu now mounts on <body>, so its damage-apply buttons/modifiers (which only exist in
729
+ // the chat context) are styled by id alone rather than via a #chat-log ancestor selector.
730
+ #context-menu2 {
731
+ button {
732
+ font-size: 12px;
733
+ background: transparent;
734
+ color: #fff;
735
+ border: 1px dashed var(--color-border-highlight);
736
+ box-shadow: none;
737
+ opacity: 0.5;
738
+ background: rgba(160, 157, 231, 0.5);
739
+
740
+ &.active,
741
+ &:hover {
742
+ border: 1px solid var(--color-border-highlight);
743
+ color: #fff;
744
+ opacity: 1;
745
+ box-shadow: inset 0 0 10px 0px var(--color-shadow-primary);
746
+ }
747
+
748
+ &:hover {
749
+ border: 1px solid #35a7e9;
750
+ box-shadow: inset 0 0 8px 2px var(--color-shadow-primary);
751
+ }
752
+ }
753
+
754
+ .reroll,
755
+ .modifiers {
756
+ border-top: 1px solid var(--color-border-highlight);
757
+ }
758
+
759
+ .modifiers {
760
+ margin: 6px 0 0;
761
+ padding-top: 6px;
762
+ }
748
763
  }