@floegence/floe-webapp-core 0.55.2 → 0.56.1

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.
@@ -0,0 +1,911 @@
1
+ /* Composition objects and their previews share the approved material renderer. */
2
+ @layer components {
3
+ .workbench-surface {
4
+ --workbench-composition-font:
5
+ -apple-system, BlinkMacSystemFont, 'Segoe UI', 'PingFang SC', sans-serif;
6
+ --workbench-canvas-ink: oklch(
7
+ from var(--foreground) min(calc(l * 0.88), 0.37) calc(c * 0.88) h
8
+ );
9
+ }
10
+ .dark .workbench-surface {
11
+ --workbench-canvas-ink: var(--foreground);
12
+ }
13
+ .workbench-object-tools {
14
+ pointer-events: auto;
15
+ font-family: var(--workbench-composition-font);
16
+ font-size: 13px;
17
+ line-height: 1.5;
18
+ }
19
+ .workbench-composition-toolbar {
20
+ position: relative;
21
+ display: flex;
22
+ flex-direction: column;
23
+ width: max-content;
24
+ max-width: 100%;
25
+ background: var(--card);
26
+ border: 1px solid var(--wb-window-edge);
27
+ border-radius: 10px;
28
+ color: var(--foreground);
29
+ box-shadow: 0 3px 10px -4px rgb(0 0 0 / 20%);
30
+ }
31
+ .workbench-toolbar-main {
32
+ display: flex;
33
+ align-items: center;
34
+ justify-content: center;
35
+ padding: 6px;
36
+ gap: 3px;
37
+ min-height: 44px;
38
+ }
39
+ .workbench-composition-toolbar button {
40
+ display: inline-flex;
41
+ align-items: center;
42
+ justify-content: center;
43
+ gap: 6px;
44
+ min-width: 29px;
45
+ height: 30px;
46
+ padding: 0;
47
+ border: 0;
48
+ border-radius: 5px;
49
+ background: transparent;
50
+ color: var(--foreground);
51
+ font: inherit;
52
+ font-size: 11px;
53
+ flex-shrink: 0;
54
+ cursor: pointer;
55
+ }
56
+ .workbench-composition-toolbar button:disabled {
57
+ opacity: 0.4;
58
+ cursor: default;
59
+ }
60
+ .workbench-composition-toolbar button:enabled:hover {
61
+ background: color-mix(in oklab, var(--foreground) 7%, var(--card));
62
+ }
63
+ .workbench-composition-toolbar button.is-danger:hover {
64
+ color: var(--error);
65
+ }
66
+ .workbench-composition-toolbar svg {
67
+ stroke-width: 1.65;
68
+ width: 15px;
69
+ height: 15px;
70
+ flex-shrink: 0;
71
+ }
72
+ .workbench-composition-toolbar
73
+ button[aria-pressed='true']:not(.workbench-style-choice):not(
74
+ .workbench-treatment-options > button
75
+ ) {
76
+ background: var(--muted);
77
+ }
78
+ .workbench-composition-divider {
79
+ display: block;
80
+ width: 1px;
81
+ height: 20px;
82
+ margin: 0 4px;
83
+ flex-shrink: 0;
84
+ background: var(--border);
85
+ }
86
+ .workbench-color-options {
87
+ display: flex;
88
+ gap: 3px;
89
+ }
90
+ .workbench-composition-toolbar button.workbench-style-choice {
91
+ position: relative;
92
+ min-width: 26px;
93
+ width: 26px;
94
+ height: 30px;
95
+ padding: 3px;
96
+ border: 1px solid transparent;
97
+ }
98
+ .workbench-composition-toolbar button.workbench-style-choice[aria-pressed='true'] {
99
+ border-color: var(--wb-window-active);
100
+ }
101
+ .workbench-style-choice > svg {
102
+ display: none;
103
+ position: absolute;
104
+ width: 11px;
105
+ height: 11px;
106
+ color: var(--foreground);
107
+ background: var(--card);
108
+ border-radius: 3px;
109
+ bottom: 0;
110
+ right: -1px;
111
+ padding: 1px;
112
+ pointer-events: none;
113
+ }
114
+ .workbench-style-choice[aria-pressed='true'] > svg {
115
+ display: block;
116
+ }
117
+ .workbench-composition-toolbar .workbench-treatment-trigger {
118
+ padding: 0 5px;
119
+ gap: 6px;
120
+ }
121
+ .workbench-treatment-trigger > svg {
122
+ width: 12px;
123
+ }
124
+ .workbench-treatment-trigger[aria-expanded='true'],
125
+ .workbench-emoji-trigger[aria-expanded='true'] {
126
+ background: var(--muted);
127
+ }
128
+ .workbench-treatment-trigger > span {
129
+ white-space: nowrap;
130
+ }
131
+ .workbench-composition-toolbar .workbench-treatment-options > button[aria-pressed='true'] {
132
+ border-color: var(--wb-window-active);
133
+ background: color-mix(in oklab, var(--foreground) 4%, var(--card));
134
+ }
135
+ .workbench-treatment-label {
136
+ display: flex;
137
+ align-items: center;
138
+ justify-content: space-between;
139
+ font-weight: 550;
140
+ }
141
+ .workbench-treatment-label > svg {
142
+ width: 11px;
143
+ height: 11px;
144
+ visibility: hidden;
145
+ }
146
+ [aria-pressed='true'] > .workbench-treatment-label > svg {
147
+ visibility: visible;
148
+ }
149
+ .workbench-composition-toolbar .workbench-composition-menu {
150
+ position: absolute;
151
+ z-index: 1;
152
+ width: 208px;
153
+ max-width: calc(100vw - 24px);
154
+ overflow-y: auto;
155
+ overscroll-behavior: contain;
156
+ padding: 5px;
157
+ border: 1px solid var(--wb-window-edge);
158
+ border-radius: 9px;
159
+ background: var(--card);
160
+ box-shadow: 0 4px 12px -4px rgb(0 0 0 / 20%);
161
+ }
162
+ .workbench-composition-toolbar .workbench-treatment-options {
163
+ display: flex;
164
+ flex-direction: column;
165
+ gap: 2px;
166
+ }
167
+ .workbench-composition-toolbar .workbench-treatment-options > button {
168
+ display: flex;
169
+ flex-shrink: 0;
170
+ flex-direction: row;
171
+ align-items: center;
172
+ height: 42px;
173
+ padding: 5px 7px;
174
+ gap: 10px;
175
+ border: 1px solid transparent;
176
+ border-radius: 7px;
177
+ text-align: left;
178
+ }
179
+ .workbench-composition-toolbar .workbench-treatment-label {
180
+ flex: 1;
181
+ }
182
+ .workbench-composition-toolbar .workbench-treatment-options .workbench-note-preview {
183
+ flex: 0 0 32px;
184
+ width: 32px;
185
+ height: 29px;
186
+ --stripe-width: 3px;
187
+ --rule-space: 5px;
188
+ --rule-margin: 6px;
189
+ }
190
+ .workbench-composition-toolbar[data-kind='region'] .workbench-treatment-options > button {
191
+ height: 38px;
192
+ }
193
+ .workbench-composition-toolbar .workbench-treatment-options .workbench-region-preview-mat {
194
+ flex: 0 0 40px;
195
+ width: 40px;
196
+ height: 26px;
197
+ }
198
+ /* Small menu swatches emphasize texture without changing the canvas material. */
199
+ .workbench-composition-toolbar .workbench-treatment-options .workbench-region-material__sample {
200
+ --region-hatch: color-mix(in oklab, var(--region-outline) 78%, var(--region-fill));
201
+ --hatch-spacing: 7px;
202
+ --hatch-line: 1px;
203
+ border-radius: 5px;
204
+ background-position: center;
205
+ }
206
+ .workbench-treatment-options .workbench-region-material__sample.is-material-dotted {
207
+ background-image: radial-gradient(var(--region-hatch) 1.15px, transparent 1.35px);
208
+ background-size: 8px 8px;
209
+ }
210
+ .workbench-treatment-options .workbench-region-material__sample.is-material-grid {
211
+ background-size: 8px 8px;
212
+ }
213
+ .workbench-treatment-options .workbench-region-material__sample.is-material-glass {
214
+ background-image: linear-gradient(
215
+ 135deg,
216
+ color-mix(in oklab, var(--region-fill) 20%, var(--card)),
217
+ var(--region-fill) 48%,
218
+ color-mix(in oklab, var(--region-fill) 35%, var(--region-outline))
219
+ );
220
+ }
221
+ .workbench-emoji-heading {
222
+ padding: 3px 5px 7px;
223
+ color: var(--muted-foreground);
224
+ font-size: 11px;
225
+ font-weight: 500;
226
+ }
227
+ .workbench-emoji-options {
228
+ display: grid;
229
+ grid-template-columns: repeat(6, minmax(0, 1fr));
230
+ gap: 2px;
231
+ }
232
+ .workbench-composition-toolbar .workbench-emoji-option {
233
+ min-width: 0;
234
+ width: 100%;
235
+ height: 30px;
236
+ font-size: 19px;
237
+ line-height: 1;
238
+ }
239
+ .workbench-material-settings {
240
+ display: flex;
241
+ flex-direction: column;
242
+ gap: 6px;
243
+ padding: 8px 7px 3px;
244
+ margin-top: 5px;
245
+ border-top: 1px solid var(--wb-window-edge);
246
+ }
247
+ .workbench-material-settings label {
248
+ display: flex;
249
+ align-items: center;
250
+ gap: 8px;
251
+ font-size: 11px;
252
+ }
253
+ .workbench-material-settings input {
254
+ min-width: 0;
255
+ width: 100%;
256
+ accent-color: var(--muted-foreground);
257
+ }
258
+ .workbench-material-settings > button {
259
+ width: 100%;
260
+ font-size: 11px;
261
+ }
262
+ .workbench-composition-toolbar select {
263
+ height: 30px;
264
+ width: 69px;
265
+ max-width: 116px;
266
+ padding: 0 7px;
267
+ font: inherit;
268
+ font-size: 11px;
269
+ color: var(--foreground);
270
+ background: var(--card);
271
+ border: 1px solid var(--wb-window-edge);
272
+ border-radius: 5px;
273
+ cursor: pointer;
274
+ }
275
+ .workbench-composition-toolbar .workbench-name-trigger {
276
+ padding: 0 7px;
277
+ white-space: nowrap;
278
+ }
279
+ .workbench-composition-more {
280
+ display: flex;
281
+ align-items: center;
282
+ flex-wrap: wrap;
283
+ gap: 6px;
284
+ padding: 12px;
285
+ border-bottom: 1px solid var(--wb-window-edge);
286
+ }
287
+ .workbench-composition-more label {
288
+ display: flex;
289
+ align-items: center;
290
+ gap: 8px;
291
+ font-size: 11px;
292
+ }
293
+
294
+ [data-note-color] {
295
+ --note-hue: 82;
296
+ --note-chroma: 0.038;
297
+ --note-face-lightness: 0.945;
298
+ --note-edge-lightness: 0.79;
299
+ --note-edge-chroma: 0.025;
300
+ --note-marker-lightness: 0.54;
301
+ --note-marker-chroma: 0.075;
302
+ --note-cos: cos(calc(var(--note-hue) * 1deg));
303
+ --note-sin: sin(calc(var(--note-hue) * 1deg));
304
+ --note-face: oklch(0.945 var(--note-chroma) var(--note-hue));
305
+ --note-ink: oklch(0.32 0.025 var(--note-hue));
306
+ --note-muted: oklch(0.45 0.03 var(--note-hue));
307
+ --note-marker: oklch(var(--note-marker-lightness) var(--note-marker-chroma) var(--note-hue));
308
+ --note-edge: oklch(0.79 0.025 var(--note-hue));
309
+ --note-paper: var(--wb-window);
310
+ }
311
+ [data-note-color='sage'] {
312
+ --note-hue: 145;
313
+ }
314
+ [data-note-color='azure'] {
315
+ --note-hue: 245;
316
+ }
317
+ [data-note-color='coral'] {
318
+ --note-hue: 42;
319
+ }
320
+ [data-note-color='rose'] {
321
+ --note-hue: 350;
322
+ }
323
+ [data-note-color='graphite'] {
324
+ --note-hue: 255;
325
+ --note-chroma: 0.008;
326
+ --note-marker-chroma: 0.012;
327
+ }
328
+ .dark [data-note-color] {
329
+ --note-face-lightness: clamp(0.29, calc(l + 0.025), 0.4);
330
+ --note-edge-lightness: calc(var(--note-face-lightness) + 0.065);
331
+ --note-edge-chroma: 0.018;
332
+ --note-face: oklch(
333
+ from var(--wb-window) clamp(0.29, calc(l + 0.025), 0.4) var(--note-chroma) var(--note-hue)
334
+ );
335
+ --note-ink: oklch(0.9 0.016 var(--note-hue));
336
+ --note-muted: oklch(0.77 0.018 var(--note-hue));
337
+ --note-marker-lightness: 0.68;
338
+ --note-marker-chroma: 0.07;
339
+ --note-edge: oklch(from var(--note-face) calc(l + 0.065) 0.018 var(--note-hue));
340
+ }
341
+ .dark [data-note-color='graphite'] {
342
+ --note-marker-chroma: 0.012;
343
+ }
344
+ [data-note-material] {
345
+ --note-fill: var(--note-face);
346
+ --note-surface-ink: var(--note-ink);
347
+ --note-surface-muted: var(--note-muted);
348
+ --note-surface-edge: var(--note-edge);
349
+ --paper-rule: oklab(
350
+ from var(--note-fill) calc(l * 0.78 + var(--note-marker-lightness) * 0.22)
351
+ calc(a * 0.78 + var(--note-marker-chroma) * var(--note-cos) * 0.22)
352
+ calc(b * 0.78 + var(--note-marker-chroma) * var(--note-sin) * 0.22)
353
+ );
354
+ --margin-rule: oklab(
355
+ from var(--note-fill) calc(l * 0.62 + var(--note-marker-lightness) * 0.38)
356
+ calc(a * 0.62 + var(--note-marker-chroma) * var(--note-cos) * 0.38)
357
+ calc(b * 0.62 + var(--note-marker-chroma) * var(--note-sin) * 0.38)
358
+ );
359
+ background-color: var(--note-fill);
360
+ color: var(--note-surface-ink);
361
+ border: 1px solid var(--note-surface-edge);
362
+ border-radius: var(--surface-radius, 9px);
363
+ }
364
+ [data-note-material='tab'] {
365
+ --note-fill: var(--note-paper);
366
+ --note-surface-ink: var(--foreground);
367
+ --note-surface-muted: var(--muted-foreground);
368
+ --note-surface-edge: var(--wb-window-edge);
369
+ }
370
+ [data-note-material='tab']::before {
371
+ content: '';
372
+ position: absolute;
373
+ left: 0;
374
+ top: 0;
375
+ bottom: 0;
376
+ width: var(--stripe-width, 9px);
377
+ border-radius: var(--surface-radius, 8px) 0 0 var(--surface-radius, 8px);
378
+ background: var(--note-marker);
379
+ pointer-events: none;
380
+ }
381
+ [data-note-material='ruled'] {
382
+ /* Equivalent Oklab interpolation without nesting color-mix through relative
383
+ colors, which crashes WebKit when the dark window itself is a color mix. */
384
+ --note-fill: oklab(
385
+ from var(--note-paper) calc(l * 0.52 + var(--note-face-lightness) * 0.48)
386
+ calc(a * 0.52 + var(--note-chroma) * var(--note-cos) * 0.48)
387
+ calc(b * 0.52 + var(--note-chroma) * var(--note-sin) * 0.48)
388
+ );
389
+ --note-surface-ink: var(--foreground);
390
+ --note-surface-muted: var(--muted-foreground);
391
+ --note-surface-edge: oklab(
392
+ from var(--note-paper) calc(l * 0.35 + var(--note-edge-lightness) * 0.65)
393
+ calc(a * 0.35 + var(--note-edge-chroma) * var(--note-cos) * 0.65)
394
+ calc(b * 0.35 + var(--note-edge-chroma) * var(--note-sin) * 0.65)
395
+ );
396
+ border-radius: 3px;
397
+ }
398
+ [data-note-material='ruled']::before {
399
+ content: '';
400
+ position: absolute;
401
+ inset: 0;
402
+ background-image:
403
+ linear-gradient(
404
+ to right,
405
+ transparent var(--rule-margin, 30px),
406
+ var(--margin-rule) var(--rule-margin, 30px),
407
+ var(--margin-rule) calc(var(--rule-margin, 30px) + var(--rule-width, 1px)),
408
+ transparent calc(var(--rule-margin, 30px) + var(--rule-width, 1px))
409
+ ),
410
+ repeating-linear-gradient(
411
+ to bottom,
412
+ transparent 0,
413
+ transparent calc(var(--rule-space, 28px) - var(--rule-width, 1px)),
414
+ var(--paper-rule) calc(var(--rule-space, 28px) - var(--rule-width, 1px)),
415
+ var(--paper-rule) var(--rule-space, 28px)
416
+ );
417
+ background-position:
418
+ 0 0,
419
+ 0 var(--rule-start, 0px);
420
+ border-radius: inherit;
421
+ pointer-events: none;
422
+ }
423
+ .workbench-sticky {
424
+ display: flex;
425
+ overflow: visible;
426
+ border-radius: 9px;
427
+ transform-origin: 0 0;
428
+ cursor: grab;
429
+ font-family: var(--workbench-composition-font);
430
+ }
431
+ .workbench-sticky__surface {
432
+ --ring: var(--wb-window-active);
433
+ --stripe-width: 9px;
434
+ --rule-space: 28px;
435
+ --rule-start: 27px;
436
+ --rule-margin: 30px;
437
+ position: relative;
438
+ width: 100%;
439
+ height: 100%;
440
+ box-shadow: 0 3px 7px -5px rgb(0 0 0 / 24%);
441
+ }
442
+ .workbench-sticky__content {
443
+ position: relative;
444
+ padding: 27px 24px 22px;
445
+ overflow: hidden;
446
+ height: 100%;
447
+ }
448
+ .workbench-sticky.is-selected .workbench-sticky__content {
449
+ overflow: auto;
450
+ }
451
+ .workbench-sticky__title {
452
+ font-size: 20px;
453
+ font-weight: 560;
454
+ line-height: 1.4;
455
+ letter-spacing: -0.45px;
456
+ margin: 0 0 14px;
457
+ white-space: pre-wrap;
458
+ overflow-wrap: anywhere;
459
+ min-height: 28px;
460
+ }
461
+ .workbench-sticky__body {
462
+ margin: 0;
463
+ font-size: 14px;
464
+ line-height: 28px;
465
+ font-weight: 400;
466
+ color: var(--note-surface-muted);
467
+ white-space: pre-wrap;
468
+ overflow-wrap: anywhere;
469
+ min-height: 28px;
470
+ }
471
+ .workbench-sticky__surface[data-note-material='tab'] .workbench-sticky__content {
472
+ padding-left: 30px;
473
+ }
474
+ .workbench-sticky__surface[data-note-material='ruled'] .workbench-sticky__content {
475
+ padding: 28px 24px 22px 43px;
476
+ }
477
+ .workbench-sticky__surface[data-note-material='ruled'] .workbench-sticky__title {
478
+ font-size: 19px;
479
+ line-height: 28px;
480
+ margin-bottom: 0;
481
+ }
482
+ .workbench-sticky__grip {
483
+ position: absolute;
484
+ top: 2px;
485
+ right: 4px;
486
+ width: calc(24px * var(--workbench-layer-control-inverse-scale));
487
+ height: calc(24px * var(--workbench-layer-control-inverse-scale));
488
+ padding: calc(6px * var(--workbench-layer-control-inverse-scale));
489
+ z-index: 2;
490
+ color: var(--note-surface-muted);
491
+ opacity: 0;
492
+ border: 0;
493
+ border-radius: calc(4px * var(--workbench-layer-control-inverse-scale));
494
+ background: transparent;
495
+ cursor: grab;
496
+ }
497
+ .workbench-sticky__grip > svg {
498
+ width: 100%;
499
+ height: 100%;
500
+ }
501
+ .workbench-sticky:hover .workbench-sticky__grip,
502
+ .workbench-sticky.is-selected .workbench-sticky__grip,
503
+ .workbench-sticky__grip:focus-visible {
504
+ opacity: 0.75;
505
+ }
506
+ .workbench-sticky__grip:hover {
507
+ background: color-mix(in oklab, currentColor 8%, transparent);
508
+ opacity: 1;
509
+ }
510
+ .workbench-note-preview {
511
+ position: relative;
512
+ display: block;
513
+ width: 20px;
514
+ height: 22px;
515
+ flex-shrink: 0;
516
+ overflow: hidden;
517
+ --stripe-width: 3px;
518
+ --rule-space: 5px;
519
+ --rule-start: 0px;
520
+ --rule-margin: 5px;
521
+ --surface-radius: 3px;
522
+ --rule-width: 1px;
523
+ }
524
+ .workbench-treatment-trigger > .workbench-note-preview {
525
+ width: 18px;
526
+ height: 20px;
527
+ }
528
+ .workbench-preview-writing {
529
+ position: absolute;
530
+ top: 28%;
531
+ left: 22%;
532
+ width: 58%;
533
+ height: 3px;
534
+ border-radius: 1px;
535
+ background: currentColor;
536
+ opacity: 0.42;
537
+ }
538
+ .workbench-preview-writing::after {
539
+ content: '';
540
+ position: absolute;
541
+ top: 7px;
542
+ left: 0;
543
+ width: 76%;
544
+ height: 2px;
545
+ background: currentColor;
546
+ box-shadow: 0 5px 0 currentColor;
547
+ }
548
+ .workbench-color-options .workbench-preview-writing {
549
+ display: none;
550
+ }
551
+ .workbench-treatment-trigger .workbench-preview-writing {
552
+ height: 1px;
553
+ }
554
+ .workbench-treatment-trigger .workbench-preview-writing::after {
555
+ top: 4px;
556
+ height: 1px;
557
+ box-shadow: 0 3px 0 currentColor;
558
+ }
559
+ .workbench-treatment-options .workbench-note-preview {
560
+ width: 100%;
561
+ height: 57px;
562
+ --stripe-width: 5px;
563
+ --rule-space: 9px;
564
+ --rule-margin: 11px;
565
+ --surface-radius: 4px;
566
+ }
567
+
568
+ :is(
569
+ .workbench-background-region,
570
+ .workbench-region-material__sample,
571
+ .workbench-region-visibility-outline
572
+ ) {
573
+ --region-lightness: 0.83;
574
+ --region-edge-delta: -0.08;
575
+ --region-outline-lightness: 0.56;
576
+ --region-chroma: 0.065;
577
+ --region-outline-chroma: 0.065;
578
+ --region-face: oklch(
579
+ from var(--wb-canvas) clamp(0.77, calc(l - 0.07), 0.88) var(--region-chroma) var(--region-hue)
580
+ );
581
+ --region-edge: oklch(from var(--region-face) calc(l - 0.08) min(0.032, c) var(--region-hue));
582
+ --region-outline: oklch(0.56 var(--region-outline-chroma) var(--region-hue));
583
+ --region-fill: color-mix(
584
+ in oklab,
585
+ var(--region-face) var(--workbench-region-strength, 100%),
586
+ var(--wb-canvas)
587
+ );
588
+ --region-border: var(--region-edge);
589
+ --region-hatch: color-mix(in oklab, var(--region-outline) 20%, var(--region-fill));
590
+ --region-stroke: 1px;
591
+ --hatch-spacing: 10px;
592
+ --hatch-line: 1px;
593
+ background-color: var(--region-fill);
594
+ border: var(--region-stroke) solid var(--region-border);
595
+ border-radius: 12px;
596
+ color: var(--workbench-canvas-ink);
597
+ }
598
+ .dark
599
+ :is(
600
+ .workbench-background-region,
601
+ .workbench-region-material__sample,
602
+ .workbench-region-visibility-outline
603
+ ) {
604
+ --region-lightness: 0.3;
605
+ --region-edge-delta: 0.085;
606
+ --region-outline-lightness: 0.58;
607
+ --region-chroma: 0.045;
608
+ --region-outline-chroma: 0.055;
609
+ --region-face: oklch(
610
+ from var(--wb-canvas) clamp(0.255, calc(l + 0.085), 0.34) var(--region-chroma)
611
+ var(--region-hue)
612
+ );
613
+ --region-edge: oklch(from var(--region-face) calc(l + 0.085) min(0.025, c) var(--region-hue));
614
+ --region-outline: oklch(0.58 var(--region-outline-chroma) var(--region-hue));
615
+ }
616
+ :is(
617
+ .workbench-background-region,
618
+ .workbench-region-material__sample,
619
+ .workbench-region-visibility-outline
620
+ ).is-material-frame {
621
+ --region-fill: transparent;
622
+ --region-border: var(--region-outline);
623
+ border-width: calc(2 * var(--region-stroke));
624
+ border-style: dashed;
625
+ }
626
+ :is(
627
+ .workbench-background-region,
628
+ .workbench-region-material__sample,
629
+ .workbench-region-visibility-outline
630
+ ).is-material-hatched {
631
+ --region-fill: color-mix(in oklab, var(--region-face) 80%, var(--wb-canvas));
632
+ background-image: repeating-linear-gradient(
633
+ 135deg,
634
+ transparent 0,
635
+ transparent calc(var(--hatch-spacing) - var(--hatch-line)),
636
+ var(--region-hatch) calc(var(--hatch-spacing) - var(--hatch-line)),
637
+ var(--region-hatch) var(--hatch-spacing)
638
+ );
639
+ }
640
+ :is(
641
+ .workbench-background-region,
642
+ .workbench-region-material__sample,
643
+ .workbench-region-visibility-outline
644
+ ).is-material-dotted {
645
+ background-image: radial-gradient(var(--region-hatch) 1px, transparent 1px);
646
+ background-size: 10px 10px;
647
+ }
648
+ :is(
649
+ .workbench-background-region,
650
+ .workbench-region-material__sample,
651
+ .workbench-region-visibility-outline
652
+ ).is-material-grid {
653
+ background-image:
654
+ linear-gradient(var(--region-hatch) 1px, transparent 1px),
655
+ linear-gradient(90deg, var(--region-hatch) 1px, transparent 1px);
656
+ background-size: 24px 24px;
657
+ }
658
+ :is(
659
+ .workbench-background-region,
660
+ .workbench-region-material__sample,
661
+ .workbench-region-visibility-outline
662
+ ).is-material-glass {
663
+ background-image: linear-gradient(
664
+ 135deg,
665
+ color-mix(in srgb, white 10%, transparent),
666
+ transparent 60%
667
+ );
668
+ }
669
+ .workbench-background-region,
670
+ .workbench-region-visibility-outline {
671
+ --region-stroke: calc(1px * var(--workbench-layer-control-inverse-scale, 1));
672
+ --hatch-spacing: calc(10px * var(--workbench-layer-control-inverse-scale, 1));
673
+ --hatch-line: calc(0.75px * var(--workbench-layer-control-inverse-scale, 1));
674
+ box-shadow: none;
675
+ pointer-events: none;
676
+ font-family: var(--workbench-composition-font);
677
+ }
678
+ .workbench-region-visibility-outline {
679
+ background: none;
680
+ }
681
+ .workbench-background-region.is-editable {
682
+ pointer-events: auto;
683
+ cursor: grab;
684
+ touch-action: none;
685
+ }
686
+ .workbench-background-region.is-transforming {
687
+ will-change: transform;
688
+ }
689
+ .workbench-background-region__label {
690
+ --ring: var(--wb-window-active);
691
+ position: absolute;
692
+ top: calc(-34px * var(--workbench-region-content-scale, 1));
693
+ left: 0;
694
+ display: flex;
695
+ align-items: center;
696
+ min-height: 26px;
697
+ padding: 2px 0;
698
+ max-width: calc(100% * var(--workbench-region-content-inverse-scale, 1) - 30px);
699
+ transform: scale(var(--workbench-region-content-scale, 1));
700
+ transform-origin: left top;
701
+ color: var(--workbench-canvas-ink);
702
+ white-space: nowrap;
703
+ font-size: 12px;
704
+ border: 1px solid transparent;
705
+ border-radius: 2px;
706
+ }
707
+ .workbench-background-region__label > div {
708
+ display: block;
709
+ min-width: 1px;
710
+ font-weight: 550;
711
+ white-space: nowrap;
712
+ overflow: hidden;
713
+ text-overflow: ellipsis;
714
+ }
715
+ .workbench-background-region__label.is-empty {
716
+ display: none;
717
+ }
718
+ .workbench-background-region.is-editing .workbench-background-region__label {
719
+ min-width: 180px;
720
+ max-width: calc(100% * var(--workbench-region-content-inverse-scale, 1));
721
+ z-index: 14;
722
+ background: var(--card);
723
+ color: var(--foreground);
724
+ }
725
+ .workbench-background-region.is-editing .workbench-background-region__label > div {
726
+ min-width: 178px;
727
+ text-overflow: clip;
728
+ }
729
+ .workbench-region-grip {
730
+ opacity: 0;
731
+ visibility: hidden;
732
+ }
733
+ .workbench-background-region.is-editable:is(:hover, .is-selected, :focus-within)
734
+ > .workbench-region-grip {
735
+ opacity: 1;
736
+ visibility: visible;
737
+ }
738
+ .workbench-region-preview-mat {
739
+ display: block;
740
+ position: relative;
741
+ width: 20px;
742
+ height: 22px;
743
+ flex-shrink: 0;
744
+ background: var(--wb-canvas);
745
+ border-radius: 4px;
746
+ }
747
+ .workbench-region-material__sample {
748
+ display: block;
749
+ width: 100%;
750
+ height: 100%;
751
+ border-radius: 4px;
752
+ --hatch-spacing: 5px;
753
+ --hatch-line: 0.6px;
754
+ }
755
+ .workbench-treatment-trigger > .workbench-region-preview-mat {
756
+ width: 20px;
757
+ height: 20px;
758
+ }
759
+ .workbench-composition-selection,
760
+ .workbench-layer-control__selection {
761
+ position: absolute;
762
+ inset: 0;
763
+ border: calc(1px * var(--workbench-layer-control-inverse-scale, 1)) solid
764
+ var(--wb-window-active);
765
+ border-radius: inherit;
766
+ pointer-events: none;
767
+ }
768
+ .workbench-composition-selection::before,
769
+ .workbench-composition-selection::after,
770
+ .workbench-layer-control__selection::before,
771
+ .workbench-layer-control__selection::after {
772
+ content: '';
773
+ position: absolute;
774
+ width: calc(4px * var(--workbench-layer-control-inverse-scale, 1));
775
+ height: calc(4px * var(--workbench-layer-control-inverse-scale, 1));
776
+ background: var(--card);
777
+ border: calc(1px * var(--workbench-layer-control-inverse-scale, 1)) solid
778
+ var(--wb-window-active);
779
+ border-radius: calc(1px * var(--workbench-layer-control-inverse-scale, 1));
780
+ }
781
+ :is(.workbench-composition-selection, .workbench-layer-control__selection)::before {
782
+ left: calc(-2px * var(--workbench-layer-control-inverse-scale, 1));
783
+ top: calc(-2px * var(--workbench-layer-control-inverse-scale, 1));
784
+ }
785
+ :is(.workbench-composition-selection, .workbench-layer-control__selection)::after {
786
+ right: calc(-2px * var(--workbench-layer-control-inverse-scale, 1));
787
+ bottom: calc(-2px * var(--workbench-layer-control-inverse-scale, 1));
788
+ }
789
+ .workbench-layer-control--region {
790
+ border-radius: 12px;
791
+ }
792
+ .workbench-layer-control--text {
793
+ border-radius: 3px;
794
+ }
795
+ .workbench-layer-control .workbench-layer-resize,
796
+ .workbench-sticky .workbench-layer-resize {
797
+ right: calc(-12px * var(--workbench-layer-control-inverse-scale, 1));
798
+ bottom: calc(-12px * var(--workbench-layer-control-inverse-scale, 1));
799
+ width: calc(24px * var(--workbench-layer-control-inverse-scale, 1));
800
+ height: calc(24px * var(--workbench-layer-control-inverse-scale, 1));
801
+ /* The dimensions already compensate for canvas zoom. */
802
+ transform: none;
803
+ border: 0;
804
+ border-radius: 0;
805
+ background: transparent;
806
+ opacity: 0;
807
+ pointer-events: auto;
808
+ }
809
+ .workbench-region-grip,
810
+ .workbench-text-move {
811
+ position: absolute;
812
+ width: calc(22px * var(--workbench-layer-control-inverse-scale, 1));
813
+ height: calc(22px * var(--workbench-layer-control-inverse-scale, 1));
814
+ left: calc(-29px * var(--workbench-layer-control-inverse-scale, 1));
815
+ top: 0;
816
+ padding: calc(4px * var(--workbench-layer-control-inverse-scale, 1));
817
+ color: var(--muted-foreground);
818
+ background: var(--card);
819
+ border: calc(1px * var(--workbench-layer-control-inverse-scale, 1)) solid var(--wb-window-edge);
820
+ border-radius: calc(4px * var(--workbench-layer-control-inverse-scale, 1));
821
+ pointer-events: auto;
822
+ cursor: grab;
823
+ }
824
+ .workbench-region-grip > svg,
825
+ .workbench-text-move > svg {
826
+ width: 100%;
827
+ height: 100%;
828
+ }
829
+ .workbench-sticky [contenteditable],
830
+ .workbench-background-region [contenteditable] {
831
+ user-select: text;
832
+ cursor: text;
833
+ }
834
+ .workbench-sticky [contenteditable]:empty::before,
835
+ .workbench-background-region [contenteditable]:empty::before {
836
+ content: attr(data-placeholder);
837
+ color: var(--muted-foreground);
838
+ opacity: 0.6;
839
+ pointer-events: none;
840
+ }
841
+ :root[data-floe-shell-theme='hc-light']
842
+ :is(
843
+ .workbench-background-region,
844
+ .workbench-region-material__sample,
845
+ .workbench-region-visibility-outline
846
+ ) {
847
+ --region-outline: oklch(0.44 var(--region-outline-chroma) var(--region-hue));
848
+ --region-border: var(--region-outline);
849
+ }
850
+ :root[data-floe-shell-theme='hc-light'] [data-note-material] {
851
+ border-color: var(--foreground);
852
+ }
853
+ @media (max-width: 1100px) {
854
+ .workbench-composition-toolbar {
855
+ gap: 3px;
856
+ }
857
+ }
858
+ @media (max-width: 760px) {
859
+ .workbench-toolbar-main {
860
+ flex-wrap: wrap;
861
+ gap: 2px;
862
+ }
863
+ .workbench-composition-divider {
864
+ display: none;
865
+ }
866
+ .workbench-composition-toolbar select {
867
+ max-width: 92px;
868
+ }
869
+ .workbench-color-options {
870
+ gap: 0;
871
+ }
872
+ .workbench-composition-toolbar button.workbench-style-choice {
873
+ min-width: 24px;
874
+ width: 24px;
875
+ }
876
+ .workbench-composition-toolbar button {
877
+ min-width: 25px;
878
+ }
879
+ .workbench-composition-toolbar[data-kind='region'] .workbench-color-options {
880
+ flex-basis: 100%;
881
+ justify-content: center;
882
+ padding-bottom: 3px;
883
+ }
884
+ }
885
+ @media (forced-colors: active) {
886
+ .workbench-sticky__surface,
887
+ .workbench-background-region {
888
+ background: Canvas !important;
889
+ color: CanvasText !important;
890
+ border: 1px solid CanvasText !important;
891
+ }
892
+ .workbench-sticky__body,
893
+ .workbench-sticky__grip {
894
+ color: CanvasText !important;
895
+ }
896
+ .workbench-composition-selection,
897
+ .workbench-layer-control__selection {
898
+ border-color: Highlight !important;
899
+ }
900
+ [data-note-material],
901
+ .workbench-region-material__sample {
902
+ border-color: CanvasText !important;
903
+ }
904
+ [data-note-material]::before {
905
+ forced-color-adjust: none;
906
+ }
907
+ .workbench-background-region.is-material-frame {
908
+ border-style: dashed !important;
909
+ }
910
+ }
911
+ }