@yurikilian/lex4 0.3.1 → 1.0.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.
package/dist/style.css CHANGED
@@ -1,1367 +1,936 @@
1
- @import url('https://rsms.me/inter/inter.css');
2
-
3
- *, ::before, ::after{
4
- --tw-border-spacing-x: 0;
5
- --tw-border-spacing-y: 0;
6
- --tw-translate-x: 0;
7
- --tw-translate-y: 0;
8
- --tw-rotate: 0;
9
- --tw-skew-x: 0;
10
- --tw-skew-y: 0;
11
- --tw-scale-x: 1;
12
- --tw-scale-y: 1;
13
- --tw-pan-x: ;
14
- --tw-pan-y: ;
15
- --tw-pinch-zoom: ;
16
- --tw-scroll-snap-strictness: proximity;
17
- --tw-gradient-from-position: ;
18
- --tw-gradient-via-position: ;
19
- --tw-gradient-to-position: ;
20
- --tw-ordinal: ;
21
- --tw-slashed-zero: ;
22
- --tw-numeric-figure: ;
23
- --tw-numeric-spacing: ;
24
- --tw-numeric-fraction: ;
25
- --tw-ring-inset: ;
26
- --tw-ring-offset-width: 0px;
27
- --tw-ring-offset-color: #fff;
28
- --tw-ring-color: rgb(59 130 246 / 0.5);
29
- --tw-ring-offset-shadow: 0 0 #0000;
30
- --tw-ring-shadow: 0 0 #0000;
31
- --tw-shadow: 0 0 #0000;
32
- --tw-shadow-colored: 0 0 #0000;
33
- --tw-blur: ;
34
- --tw-brightness: ;
35
- --tw-contrast: ;
36
- --tw-grayscale: ;
37
- --tw-hue-rotate: ;
38
- --tw-invert: ;
39
- --tw-saturate: ;
40
- --tw-sepia: ;
41
- --tw-drop-shadow: ;
42
- --tw-backdrop-blur: ;
43
- --tw-backdrop-brightness: ;
44
- --tw-backdrop-contrast: ;
45
- --tw-backdrop-grayscale: ;
46
- --tw-backdrop-hue-rotate: ;
47
- --tw-backdrop-invert: ;
48
- --tw-backdrop-opacity: ;
49
- --tw-backdrop-saturate: ;
50
- --tw-backdrop-sepia: ;
51
- --tw-contain-size: ;
52
- --tw-contain-layout: ;
53
- --tw-contain-paint: ;
54
- --tw-contain-style: ;
55
- }
56
-
57
- ::backdrop{
58
- --tw-border-spacing-x: 0;
59
- --tw-border-spacing-y: 0;
60
- --tw-translate-x: 0;
61
- --tw-translate-y: 0;
62
- --tw-rotate: 0;
63
- --tw-skew-x: 0;
64
- --tw-skew-y: 0;
65
- --tw-scale-x: 1;
66
- --tw-scale-y: 1;
67
- --tw-pan-x: ;
68
- --tw-pan-y: ;
69
- --tw-pinch-zoom: ;
70
- --tw-scroll-snap-strictness: proximity;
71
- --tw-gradient-from-position: ;
72
- --tw-gradient-via-position: ;
73
- --tw-gradient-to-position: ;
74
- --tw-ordinal: ;
75
- --tw-slashed-zero: ;
76
- --tw-numeric-figure: ;
77
- --tw-numeric-spacing: ;
78
- --tw-numeric-fraction: ;
79
- --tw-ring-inset: ;
80
- --tw-ring-offset-width: 0px;
81
- --tw-ring-offset-color: #fff;
82
- --tw-ring-color: rgb(59 130 246 / 0.5);
83
- --tw-ring-offset-shadow: 0 0 #0000;
84
- --tw-ring-shadow: 0 0 #0000;
85
- --tw-shadow: 0 0 #0000;
86
- --tw-shadow-colored: 0 0 #0000;
87
- --tw-blur: ;
88
- --tw-brightness: ;
89
- --tw-contrast: ;
90
- --tw-grayscale: ;
91
- --tw-hue-rotate: ;
92
- --tw-invert: ;
93
- --tw-saturate: ;
94
- --tw-sepia: ;
95
- --tw-drop-shadow: ;
96
- --tw-backdrop-blur: ;
97
- --tw-backdrop-brightness: ;
98
- --tw-backdrop-contrast: ;
99
- --tw-backdrop-grayscale: ;
100
- --tw-backdrop-hue-rotate: ;
101
- --tw-backdrop-invert: ;
102
- --tw-backdrop-opacity: ;
103
- --tw-backdrop-saturate: ;
104
- --tw-backdrop-sepia: ;
105
- --tw-contain-size: ;
106
- --tw-contain-layout: ;
107
- --tw-contain-paint: ;
108
- --tw-contain-style: ;
109
- }
110
-
111
- /*
112
- ! tailwindcss v3.4.19 | MIT License | https://tailwindcss.com
113
- */
114
-
115
- /*
116
- 1. Prevent padding and border from affecting element width. (https://github.com/mozdevs/cssremedy/issues/4)
117
- 2. Allow adding a border to an element by just adding a border-width. (https://github.com/tailwindcss/tailwindcss/pull/116)
118
- */
119
-
120
- *,
121
- ::before,
122
- ::after {
123
- box-sizing: border-box; /* 1 */
124
- border-width: 0; /* 2 */
125
- border-style: solid; /* 2 */
126
- border-color: #e5e7eb; /* 2 */
127
- }
128
-
129
- ::before,
130
- ::after {
131
- --tw-content: '';
132
- }
133
-
134
- /*
135
- 1. Use a consistent sensible line-height in all browsers.
136
- 2. Prevent adjustments of font size after orientation changes in iOS.
137
- 3. Use a more readable tab size.
138
- 4. Use the user's configured `sans` font-family by default.
139
- 5. Use the user's configured `sans` font-feature-settings by default.
140
- 6. Use the user's configured `sans` font-variation-settings by default.
141
- 7. Disable tap highlights on iOS
142
- */
143
-
144
- html,
145
- :host {
146
- line-height: 1.5; /* 1 */
147
- -webkit-text-size-adjust: 100%; /* 2 */
148
- -moz-tab-size: 4; /* 3 */
149
- -o-tab-size: 4;
150
- tab-size: 4; /* 3 */
151
- font-family: Inter, system-ui, -apple-system, sans-serif; /* 4 */
152
- font-feature-settings: normal; /* 5 */
153
- font-variation-settings: normal; /* 6 */
154
- -webkit-tap-highlight-color: transparent; /* 7 */
155
- }
156
-
157
- /*
158
- 1. Remove the margin in all browsers.
159
- 2. Inherit line-height from `html` so users can set them as a class directly on the `html` element.
160
- */
161
-
162
- body {
163
- margin: 0; /* 1 */
164
- line-height: inherit; /* 2 */
165
- }
166
-
167
- /*
168
- 1. Add the correct height in Firefox.
169
- 2. Correct the inheritance of border color in Firefox. (https://bugzilla.mozilla.org/show_bug.cgi?id=190655)
170
- 3. Ensure horizontal rules are visible by default.
171
- */
172
-
173
- hr {
174
- height: 0; /* 1 */
175
- color: inherit; /* 2 */
176
- border-top-width: 1px; /* 3 */
177
- }
178
-
179
- /*
180
- Add the correct text decoration in Chrome, Edge, and Safari.
181
- */
182
-
183
- abbr:where([title]) {
184
- -webkit-text-decoration: underline dotted;
185
- text-decoration: underline dotted;
186
- }
187
-
188
- /*
189
- Remove the default font size and weight for headings.
190
- */
191
-
192
- h1,
193
- h2,
194
- h3,
195
- h4,
196
- h5,
197
- h6 {
198
- font-size: inherit;
199
- font-weight: inherit;
200
- }
201
-
202
- /*
203
- Reset links to optimize for opt-in styling instead of opt-out.
204
- */
205
-
206
- a {
207
- color: inherit;
208
- text-decoration: inherit;
209
- }
210
-
211
- /*
212
- Add the correct font weight in Edge and Safari.
213
- */
214
-
215
- b,
216
- strong {
217
- font-weight: bolder;
218
- }
219
-
220
- /*
221
- 1. Use the user's configured `mono` font-family by default.
222
- 2. Use the user's configured `mono` font-feature-settings by default.
223
- 3. Use the user's configured `mono` font-variation-settings by default.
224
- 4. Correct the odd `em` font sizing in all browsers.
225
- */
226
-
227
- code,
228
- kbd,
229
- samp,
230
- pre {
231
- font-family: ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace; /* 1 */
232
- font-feature-settings: normal; /* 2 */
233
- font-variation-settings: normal; /* 3 */
234
- font-size: 1em; /* 4 */
235
- }
236
-
237
- /*
238
- Add the correct font size in all browsers.
239
- */
240
-
241
- small {
242
- font-size: 80%;
243
- }
244
-
245
- /*
246
- Prevent `sub` and `sup` elements from affecting the line height in all browsers.
247
- */
248
-
249
- sub,
250
- sup {
251
- font-size: 75%;
252
- line-height: 0;
253
- position: relative;
254
- vertical-align: baseline;
255
- }
256
-
257
- sub {
258
- bottom: -0.25em;
259
- }
260
-
261
- sup {
262
- top: -0.5em;
263
- }
264
-
265
- /*
266
- 1. Remove text indentation from table contents in Chrome and Safari. (https://bugs.chromium.org/p/chromium/issues/detail?id=999088, https://bugs.webkit.org/show_bug.cgi?id=201297)
267
- 2. Correct table border color inheritance in all Chrome and Safari. (https://bugs.chromium.org/p/chromium/issues/detail?id=935729, https://bugs.webkit.org/show_bug.cgi?id=195016)
268
- 3. Remove gaps between table borders by default.
269
- */
270
-
271
- table {
272
- text-indent: 0; /* 1 */
273
- border-color: inherit; /* 2 */
274
- border-collapse: collapse; /* 3 */
275
- }
276
-
277
- /*
278
- 1. Change the font styles in all browsers.
279
- 2. Remove the margin in Firefox and Safari.
280
- 3. Remove default padding in all browsers.
281
- */
282
-
283
- button,
284
- input,
285
- optgroup,
286
- select,
287
- textarea {
288
- font-family: inherit; /* 1 */
289
- font-feature-settings: inherit; /* 1 */
290
- font-variation-settings: inherit; /* 1 */
291
- font-size: 100%; /* 1 */
292
- font-weight: inherit; /* 1 */
293
- line-height: inherit; /* 1 */
294
- letter-spacing: inherit; /* 1 */
295
- color: inherit; /* 1 */
296
- margin: 0; /* 2 */
297
- padding: 0; /* 3 */
298
- }
299
-
300
- /*
301
- Remove the inheritance of text transform in Edge and Firefox.
302
- */
303
-
304
- button,
305
- select {
306
- text-transform: none;
307
- }
308
-
309
- /*
310
- 1. Correct the inability to style clickable types in iOS and Safari.
311
- 2. Remove default button styles.
312
- */
313
-
314
- button,
315
- input:where([type='button']),
316
- input:where([type='reset']),
317
- input:where([type='submit']) {
318
- -webkit-appearance: button; /* 1 */
319
- background-color: transparent; /* 2 */
320
- background-image: none; /* 2 */
321
- }
322
-
323
- /*
324
- Use the modern Firefox focus style for all focusable elements.
325
- */
326
-
327
- :-moz-focusring {
328
- outline: auto;
329
- }
330
-
331
- /*
332
- Remove the additional `:invalid` styles in Firefox. (https://github.com/mozilla/gecko-dev/blob/2f9eacd9d3d995c937b4251a5557d95d494c9be1/layout/style/res/forms.css#L728-L737)
333
- */
334
-
335
- :-moz-ui-invalid {
336
- box-shadow: none;
337
- }
338
-
339
- /*
340
- Add the correct vertical alignment in Chrome and Firefox.
341
- */
342
-
343
- progress {
344
- vertical-align: baseline;
345
- }
346
-
347
- /*
348
- Correct the cursor style of increment and decrement buttons in Safari.
349
- */
350
-
351
- ::-webkit-inner-spin-button,
352
- ::-webkit-outer-spin-button {
353
- height: auto;
354
- }
355
-
356
- /*
357
- 1. Correct the odd appearance in Chrome and Safari.
358
- 2. Correct the outline style in Safari.
359
- */
1
+ /* ───────────────────────────────────────────────────────────
2
+ Lex4 Editor — Pure CSS (no Tailwind in production output)
3
+ ─────────────────────────────────────────────────────────── */
360
4
 
361
- [type='search'] {
362
- -webkit-appearance: textfield; /* 1 */
363
- outline-offset: -2px; /* 2 */
5
+ /* ── Scoped reset ────────────────────────────────────────── */
6
+ .lex4-editor *,
7
+ .lex4-editor *::before,
8
+ .lex4-editor *::after {
9
+ box-sizing: border-box;
364
10
  }
365
11
 
366
- /*
367
- Remove the inner padding in Chrome and Safari on macOS.
368
- */
369
-
370
- ::-webkit-search-decoration {
371
- -webkit-appearance: none;
372
- }
373
-
374
- /*
375
- 1. Correct the inability to style clickable types in iOS and Safari.
376
- 2. Change font properties to `inherit` in Safari.
377
- */
378
-
379
- ::-webkit-file-upload-button {
380
- -webkit-appearance: button; /* 1 */
381
- font: inherit; /* 2 */
382
- }
383
-
384
- /*
385
- Add the correct display in Chrome and Safari.
386
- */
387
-
388
- summary {
389
- display: list-item;
390
- }
391
-
392
- /*
393
- Removes the default spacing and border for appropriate elements.
394
- */
395
-
396
- blockquote,
397
- dl,
398
- dd,
399
- h1,
400
- h2,
401
- h3,
402
- h4,
403
- h5,
404
- h6,
405
- hr,
406
- figure,
407
- p,
408
- pre {
409
- margin: 0;
410
- }
411
-
412
- fieldset {
413
- margin: 0;
12
+ .lex4-editor button {
13
+ cursor: pointer;
14
+ border: none;
15
+ background: none;
414
16
  padding: 0;
17
+ font: inherit;
18
+ color: inherit;
415
19
  }
416
20
 
417
- legend {
418
- padding: 0;
21
+ .lex4-editor select {
22
+ font: inherit;
419
23
  }
420
24
 
421
- ol,
422
- ul,
423
- menu {
25
+ .lex4-editor ol,
26
+ .lex4-editor ul {
424
27
  list-style: none;
425
28
  margin: 0;
426
29
  padding: 0;
427
30
  }
428
31
 
429
- /*
430
- Reset default styling for dialogs.
431
- */
432
-
433
- dialog {
434
- padding: 0;
435
- }
436
-
437
- /*
438
- Prevent resizing textareas horizontally by default.
439
- */
440
-
441
- textarea {
442
- resize: vertical;
443
- }
444
-
445
- /*
446
- 1. Reset the default placeholder opacity in Firefox. (https://github.com/tailwindlabs/tailwindcss/issues/3300)
447
- 2. Set the default placeholder color to the user's configured gray 400 color.
448
- */
449
-
450
- input::-moz-placeholder, textarea::-moz-placeholder {
451
- opacity: 1; /* 1 */
452
- color: #9ca3af; /* 2 */
453
- }
454
-
455
- input::placeholder,
456
- textarea::placeholder {
457
- opacity: 1; /* 1 */
458
- color: #9ca3af; /* 2 */
459
- }
460
-
461
- /*
462
- Set the default cursor for buttons.
463
- */
464
-
465
- button,
466
- [role="button"] {
467
- cursor: pointer;
468
- }
469
-
470
- /*
471
- Make sure disabled buttons don't get the pointer cursor.
472
- */
473
-
474
- :disabled {
475
- cursor: default;
476
- }
477
-
478
- /*
479
- 1. Make replaced elements `display: block` by default. (https://github.com/mozdevs/cssremedy/issues/14)
480
- 2. Add `vertical-align: middle` to align replaced elements more sensibly by default. (https://github.com/jensimmons/cssremedy/issues/14#issuecomment-634934210)
481
- This can trigger a poorly considered lint error in some tools but is included by design.
482
- */
483
-
484
- img,
485
- svg,
486
- video,
487
- canvas,
488
- audio,
489
- iframe,
490
- embed,
491
- object {
492
- display: block; /* 1 */
493
- vertical-align: middle; /* 2 */
494
- }
495
-
496
- /*
497
- Constrain images and videos to the parent width and preserve their intrinsic aspect ratio. (https://github.com/mozdevs/cssremedy/issues/14)
498
- */
499
-
500
- img,
501
- video {
502
- max-width: 100%;
503
- height: auto;
504
- }
505
-
506
- /* Make elements with the HTML hidden attribute stay hidden by default */
32
+ /* ── Design tokens ───────────────────────────────────────── */
33
+ .lex4-editor {
34
+ /* Brand / accent */
35
+ --lex4-color-primary: #3b82f6;
36
+ --lex4-color-primary-light: #eff6ff;
37
+ --lex4-color-primary-text: #1d4ed8;
38
+ --lex4-color-primary-border: #93c5fd;
39
+ --lex4-color-primary-focus: #60a5fa;
507
40
 
508
- [hidden]:where(:not([hidden="until-found"])) {
509
- display: none;
510
- }
41
+ /* Surfaces */
42
+ --lex4-color-bg: #ffffff;
43
+ --lex4-color-bg-muted: #f9fafb;
44
+ --lex4-color-bg-canvas: #e5e7eb;
511
45
 
512
- .\!container{
513
- width: 100% !important;
514
- }
46
+ /* Borders */
47
+ --lex4-color-border: #e5e7eb;
48
+ --lex4-color-border-light: #f3f4f6;
515
49
 
516
- .container{
517
- width: 100%;
518
- }
50
+ /* Text */
51
+ --lex4-color-text: #111827;
52
+ --lex4-color-text-secondary: #6b7280;
53
+ --lex4-color-text-muted: #9ca3af;
54
+ --lex4-color-text-disabled: #d1d5db;
519
55
 
520
- @media (min-width: 640px){
56
+ /* Hover / interaction */
57
+ --lex4-color-hover: #f3f4f6;
58
+ --lex4-color-hover-text: #111827;
521
59
 
522
- .\!container{
523
- max-width: 640px !important;
524
- }
60
+ /* Selection (global Ctrl+A) */
61
+ --lex4-color-selection-bg: rgb(191 219 254);
62
+ --lex4-color-selection-text: rgb(30 64 175);
525
63
 
526
- .container{
527
- max-width: 640px;
528
- }
529
- }
530
-
531
- @media (min-width: 768px){
64
+ /* Header / footer regions */
65
+ --lex4-color-hf-bg: rgb(239 246 255 / 0.6);
66
+ --lex4-color-hf-border: #bfdbfe;
67
+ --lex4-color-hf-border-inner: #dbeafe;
532
68
 
533
- .\!container{
534
- max-width: 768px !important;
535
- }
69
+ /* Dimensions */
70
+ --lex4-sidebar-width: 336px;
71
+ --lex4-toolbar-height: auto;
536
72
 
537
- .container{
538
- max-width: 768px;
539
- }
540
- }
73
+ /* UI font */
74
+ --lex4-ui-font-family: Inter, ui-sans-serif, system-ui, -apple-system, BlinkMacSystemFont, 'Segoe UI', sans-serif;
541
75
 
542
- @media (min-width: 1024px){
76
+ /* Document font */
77
+ --lex4-font-family: 'Calibri', 'Carlito', sans-serif;
543
78
 
544
- .\!container{
545
- max-width: 1024px !important;
546
- }
547
-
548
- .container{
549
- max-width: 1024px;
550
- }
551
- }
79
+ /* Toolbar icon button */
80
+ --lex4-toolbar-btn-size: 1.75rem;
81
+ --lex4-toolbar-btn-radius: 0.25rem;
552
82
 
553
- @media (min-width: 1280px){
83
+ /* Dropdown menu */
84
+ --lex4-menu-width: 14rem;
85
+ --lex4-menu-radius: 0.5rem;
86
+ --lex4-menu-shadow: 0 10px 15px -3px rgb(0 0 0 / 0.1);
554
87
 
555
- .\!container{
556
- max-width: 1280px !important;
557
- }
88
+ /* Page */
89
+ --lex4-page-shadow: 0 20px 25px -5px rgb(0 0 0 / 0.1),
90
+ 0 8px 10px -6px rgb(0 0 0 / 0.1);
558
91
 
559
- .container{
560
- max-width: 1280px;
561
- }
92
+ font-family: var(--lex4-ui-font-family);
93
+ -webkit-font-smoothing: antialiased;
562
94
  }
563
95
 
564
- @media (min-width: 1536px){
565
-
566
- .\!container{
567
- max-width: 1536px !important;
568
- }
569
-
570
- .container{
571
- max-width: 1536px;
572
- }
96
+ /* ── Root layout ─────────────────────────────────────────── */
97
+ .lex4-editor {
98
+ display: flex;
99
+ flex-direction: column;
100
+ height: 100%;
573
101
  }
574
102
 
575
- .pointer-events-none{
103
+ .lex4-selection-buffer {
576
104
  pointer-events: none;
577
- }
578
-
579
- .visible{
580
- visibility: visible;
581
- }
582
-
583
- .static{
584
- position: static;
585
- }
586
-
587
- .fixed{
588
105
  position: fixed;
589
- }
590
-
591
- .absolute{
592
- position: absolute;
593
- }
594
-
595
- .relative{
596
- position: relative;
597
- }
598
-
599
- .sticky{
600
- position: sticky;
601
- }
602
-
603
- .-left-\[9999px\]{
604
106
  left: -9999px;
107
+ top: 0;
108
+ height: 0;
109
+ width: 0;
110
+ opacity: 0;
605
111
  }
606
112
 
607
- .left-0{
608
- left: 0px;
609
- }
610
-
611
- .left-2\.5{
612
- left: 0.625rem;
613
- }
614
-
615
- .right-2{
616
- right: 0.5rem;
617
- }
618
-
619
- .top-0{
620
- top: 0px;
621
- }
622
-
623
- .top-1\/2{
624
- top: 50%;
625
- }
626
-
627
- .top-2{
628
- top: 0.5rem;
113
+ /* ── Canvas ──────────────────────────────────────────────── */
114
+ .lex4-canvas {
115
+ display: flex;
116
+ flex: 1;
117
+ min-height: 0;
118
+ overflow: hidden;
119
+ background-color: var(--lex4-color-bg-canvas);
629
120
  }
630
121
 
631
- .top-full{
632
- top: 100%;
122
+ .lex4-canvas-scroll {
123
+ min-width: 0;
124
+ flex: 1;
125
+ overflow: auto;
633
126
  }
634
127
 
635
- .z-10{
128
+ /* ── Toolbar ─────────────────────────────────────────────── */
129
+ .lex4-toolbar {
130
+ position: sticky;
131
+ top: 0;
636
132
  z-index: 10;
133
+ border-bottom: 1px solid var(--lex4-color-border);
134
+ background-color: var(--lex4-color-bg);
637
135
  }
638
136
 
639
- .z-50{
640
- z-index: 50;
641
- }
642
-
643
- .mx-0\.5{
644
- margin-left: 0.125rem;
645
- margin-right: 0.125rem;
646
- }
647
-
648
- .my-1{
649
- margin-top: 0.25rem;
650
- margin-bottom: 0.25rem;
651
- }
652
-
653
- .mb-1{
654
- margin-bottom: 0.25rem;
655
- }
656
-
657
- .mb-2{
658
- margin-bottom: 0.5rem;
137
+ .lex4-toolbar-row {
138
+ display: flex;
139
+ align-items: center;
140
+ -moz-column-gap: 0.25rem;
141
+ column-gap: 0.25rem;
142
+ row-gap: 0.375rem;
143
+ padding: 0.375rem 0.5rem;
144
+ flex-wrap: wrap;
659
145
  }
660
146
 
661
- .mb-3{
662
- margin-bottom: 0.75rem;
147
+ .lex4-toolbar-group {
148
+ display: flex;
149
+ align-items: center;
150
+ gap: 0.125rem;
663
151
  }
664
152
 
665
- .ml-6{
666
- margin-left: 1.5rem;
153
+ .lex4-toolbar-group-gap {
154
+ display: flex;
155
+ align-items: center;
156
+ gap: 0.25rem;
667
157
  }
668
158
 
669
- .ml-auto{
159
+ .lex4-toolbar-end {
670
160
  margin-left: auto;
671
- }
672
-
673
- .mt-0\.5{
674
- margin-top: 0.125rem;
675
- }
676
-
677
- .mt-1{
678
- margin-top: 0.25rem;
679
- }
680
-
681
- .block{
682
- display: block;
683
- }
684
-
685
- .inline-block{
686
- display: inline-block;
687
- }
688
-
689
- .inline{
690
- display: inline;
691
- }
692
-
693
- .flex{
694
161
  display: flex;
162
+ align-items: center;
163
+ gap: 0.375rem;
695
164
  }
696
165
 
697
- .inline-flex{
698
- display: inline-flex;
699
- }
700
-
701
- .grid{
702
- display: grid;
703
- }
704
-
705
- .list-item{
706
- display: list-item;
707
- }
708
-
709
- .hidden{
710
- display: none;
711
- }
712
-
713
- .h-0{
714
- height: 0px;
166
+ .lex4-toolbar-btn {
167
+ display: flex;
168
+ align-items: center;
169
+ justify-content: center;
170
+ height: var(--lex4-toolbar-btn-size);
171
+ width: var(--lex4-toolbar-btn-size);
172
+ border-radius: var(--lex4-toolbar-btn-radius);
173
+ color: var(--lex4-color-text-secondary);
174
+ transition: color 150ms, background-color 150ms;
715
175
  }
716
-
717
- .h-3{
718
- height: 0.75rem;
176
+ .lex4-toolbar-btn svg {
177
+ flex-shrink: 0;
719
178
  }
720
-
721
- .h-4{
722
- height: 1rem;
179
+ .lex4-toolbar-btn:hover:not(:disabled):not(.active) {
180
+ background-color: var(--lex4-color-hover);
181
+ color: var(--lex4-color-hover-text);
723
182
  }
724
-
725
- .h-5{
726
- height: 1.25rem;
183
+ .lex4-toolbar-btn.active {
184
+ background-color: var(--lex4-color-primary-light);
185
+ color: var(--lex4-color-primary-text);
727
186
  }
728
-
729
- .h-6{
730
- height: 1.5rem;
187
+ .lex4-toolbar-btn:disabled {
188
+ color: var(--lex4-color-text-disabled);
189
+ cursor: not-allowed;
731
190
  }
732
191
 
733
- .h-7{
192
+ .lex4-toolbar-select {
734
193
  height: 1.75rem;
194
+ border-radius: 0.25rem;
195
+ border: 1px solid var(--lex4-color-border);
196
+ padding: 0 0.5rem;
197
+ font-size: 0.75rem;
198
+ line-height: 1rem;
199
+ font-weight: 500;
200
+ background-color: var(--lex4-color-bg);
201
+ color: var(--lex4-color-text);
735
202
  }
736
-
737
- .h-full{
738
- height: 100%;
739
- }
740
-
741
- .h-px{
742
- height: 1px;
743
- }
744
-
745
- .max-h-48{
746
- max-height: 12rem;
747
- }
748
-
749
- .min-h-0{
750
- min-height: 0px;
751
- }
752
-
753
- .min-h-\[24px\]{
754
- min-height: 24px;
755
- }
756
-
757
- .min-h-full{
758
- min-height: 100%;
759
- }
760
-
761
- .w-0{
762
- width: 0px;
203
+ .lex4-toolbar-select:focus {
204
+ outline: none;
205
+ border-color: var(--lex4-color-primary-focus);
206
+ box-shadow: 0 0 0 1px var(--lex4-color-primary-focus);
763
207
  }
764
208
 
765
- .w-16{
209
+ .lex4-toolbar-select-narrow {
766
210
  width: 4rem;
211
+ padding: 0 0.25rem;
767
212
  }
768
213
 
769
- .w-3{
770
- width: 0.75rem;
771
- }
772
-
773
- .w-56{
774
- width: 14rem;
775
- }
776
-
777
- .w-6{
778
- width: 1.5rem;
779
- }
780
-
781
- .w-64{
782
- width: 16rem;
783
- }
784
-
785
- .w-7{
786
- width: 1.75rem;
787
- }
788
-
789
- .w-\[320px\]{
790
- width: 320px;
791
- }
792
-
793
- .w-full{
794
- width: 100%;
795
- }
796
-
797
- .w-px{
214
+ .lex4-toolbar-separator {
215
+ margin: 0 0.125rem;
216
+ height: 1.25rem;
798
217
  width: 1px;
218
+ background-color: var(--lex4-color-border);
799
219
  }
800
220
 
801
- .min-w-0{
802
- min-width: 0px;
221
+ .lex4-toolbar-icon {
222
+ color: var(--lex4-color-text-secondary);
803
223
  }
804
224
 
805
- .flex-1{
806
- flex: 1 1 0%;
807
- }
808
-
809
- .flex-shrink-0{
810
- flex-shrink: 0;
811
- }
812
-
813
- .shrink-0{
814
- flex-shrink: 0;
815
- }
816
-
817
- .-translate-y-1\/2{
818
- --tw-translate-y: -50%;
819
- transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));
820
- }
821
-
822
- .translate-x-0\.5{
823
- --tw-translate-x: 0.125rem;
824
- transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));
825
- }
826
-
827
- .translate-x-3\.5{
828
- --tw-translate-x: 0.875rem;
829
- transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));
830
- }
831
-
832
- .cursor-default{
833
- cursor: default;
834
- }
835
-
836
- .cursor-not-allowed{
837
- cursor: not-allowed;
225
+ /* ── Header / footer row ─────────────────────────────────── */
226
+ .lex4-hf-row {
227
+ display: flex;
228
+ align-items: center;
229
+ gap: 0.25rem;
230
+ padding: 0.375rem 0.5rem;
231
+ border-top: 1px solid var(--lex4-color-border-light);
232
+ flex-wrap: wrap;
838
233
  }
839
234
 
840
- .cursor-pointer{
235
+ /* ── Header / footer toggle ──────────────────────────────── */
236
+ .lex4-hf-toggle {
237
+ display: flex;
238
+ align-items: center;
239
+ gap: 0.375rem;
240
+ min-height: 1.75rem;
841
241
  cursor: pointer;
842
- }
843
-
844
- .select-none{
845
242
  -webkit-user-select: none;
846
243
  -moz-user-select: none;
847
244
  user-select: none;
848
245
  }
849
246
 
850
- .list-decimal{
851
- list-style-type: decimal;
852
- }
853
-
854
- .list-disc{
855
- list-style-type: disc;
856
- }
857
-
858
- .list-none{
859
- list-style-type: none;
860
- }
861
-
862
- .grid-cols-2{
863
- grid-template-columns: repeat(2, minmax(0, 1fr));
247
+ .lex4-hf-toggle-icon {
248
+ color: var(--lex4-color-text-secondary);
864
249
  }
865
250
 
866
- .flex-col{
867
- flex-direction: column;
868
- }
869
-
870
- .items-start{
871
- align-items: flex-start;
251
+ .lex4-hf-toggle-label {
252
+ font-size: 0.75rem;
253
+ line-height: 1rem;
254
+ font-weight: 500;
255
+ color: var(--lex4-color-text-secondary);
872
256
  }
873
257
 
874
- .items-center{
258
+ .lex4-hf-switch {
259
+ position: relative;
260
+ display: inline-flex;
261
+ height: 1rem;
262
+ width: 1.75rem;
875
263
  align-items: center;
264
+ border-radius: 9999px;
265
+ transition: background-color 200ms;
876
266
  }
877
267
 
878
- .justify-center{
879
- justify-content: center;
880
- }
881
-
882
- .justify-between{
883
- justify-content: space-between;
268
+ .lex4-hf-switch-knob {
269
+ display: inline-block;
270
+ height: 0.75rem;
271
+ width: 0.75rem;
272
+ border-radius: 9999px;
273
+ background-color: white;
274
+ box-shadow: 0 1px 2px 0 rgb(0 0 0 / 0.05);
275
+ transition: transform 200ms;
276
+ transform: translateX(0.125rem);
884
277
  }
885
278
 
886
- .gap-0\.5{
887
- gap: 0.125rem;
279
+ .lex4-hf-switch[aria-checked="true"] .lex4-hf-switch-knob {
280
+ transform: translateX(0.875rem);
888
281
  }
889
282
 
890
- .gap-1{
283
+ /* ── Settings menu (HF actions) ──────────────────────────── */
284
+ .lex4-settings-trigger {
285
+ display: flex;
286
+ height: 1.75rem;
287
+ align-items: center;
891
288
  gap: 0.25rem;
892
- }
893
-
894
- .gap-1\.5{
895
- gap: 0.375rem;
896
- }
897
-
898
- .gap-2{
899
- gap: 0.5rem;
900
- }
901
-
902
- .gap-8{
903
- gap: 2rem;
904
- }
905
-
906
- .divide-y > :not([hidden]) ~ :not([hidden]){
907
- --tw-divide-y-reverse: 0;
908
- border-top-width: calc(1px * calc(1 - var(--tw-divide-y-reverse)));
909
- border-bottom-width: calc(1px * var(--tw-divide-y-reverse));
910
- }
911
-
912
- .divide-gray-100 > :not([hidden]) ~ :not([hidden]){
913
- --tw-divide-opacity: 1;
914
- border-color: rgb(243 244 246 / var(--tw-divide-opacity, 1));
915
- }
916
-
917
- .overflow-auto{
918
- overflow: auto;
919
- }
920
-
921
- .overflow-hidden{
922
- overflow: hidden;
923
- }
924
-
925
- .overflow-y-auto{
926
- overflow-y: auto;
927
- }
928
-
929
- .whitespace-nowrap{
930
- white-space: nowrap;
931
- }
932
-
933
- .rounded{
934
289
  border-radius: 0.25rem;
290
+ padding: 0 0.375rem;
291
+ font-size: 0.75rem;
292
+ line-height: 1rem;
293
+ color: var(--lex4-color-text-secondary);
294
+ transition: color 150ms, background-color 150ms;
935
295
  }
936
-
937
- .rounded-full{
938
- border-radius: 9999px;
296
+ .lex4-settings-trigger:hover:not([aria-expanded="true"]) {
297
+ background-color: var(--lex4-color-hover);
298
+ color: var(--lex4-color-hover-text);
939
299
  }
940
-
941
- .rounded-lg{
942
- border-radius: 0.5rem;
300
+ .lex4-settings-trigger[aria-expanded="true"] {
301
+ background-color: var(--lex4-color-primary-light);
302
+ color: var(--lex4-color-primary-text);
943
303
  }
944
304
 
945
- .rounded-md{
946
- border-radius: 0.375rem;
305
+ .lex4-settings-menu {
306
+ position: absolute;
307
+ left: 0;
308
+ top: 100%;
309
+ margin-top: 0.25rem;
310
+ z-index: 50;
311
+ padding: 0.375rem 0;
312
+ width: 15rem;
313
+ background-color: var(--lex4-color-bg);
314
+ border: 1px solid var(--lex4-color-border);
315
+ border-radius: var(--lex4-menu-radius);
316
+ box-shadow: var(--lex4-menu-shadow);
947
317
  }
948
318
 
949
- .border{
950
- border-width: 1px;
319
+ .lex4-settings-label {
320
+ padding: 0.5rem 0.75rem 0.25rem;
321
+ font-size: 10px;
322
+ font-weight: 600;
323
+ text-transform: uppercase;
324
+ letter-spacing: 0.05em;
325
+ color: var(--lex4-color-text-muted);
951
326
  }
952
327
 
953
- .border-b{
954
- border-bottom-width: 1px;
328
+ .lex4-settings-item {
329
+ display: flex;
330
+ width: 100%;
331
+ align-items: center;
332
+ gap: 0.5rem;
333
+ padding: 0.375rem 0.75rem;
334
+ font-size: 0.75rem;
335
+ line-height: 1rem;
336
+ color: var(--lex4-color-text);
337
+ transition: background-color 150ms;
955
338
  }
956
-
957
- .border-b-2{
958
- border-bottom-width: 2px;
339
+ .lex4-settings-item:hover:not(:disabled) {
340
+ background-color: var(--lex4-color-hover);
959
341
  }
960
-
961
- .border-l{
962
- border-left-width: 1px;
342
+ .lex4-settings-item:disabled {
343
+ color: var(--lex4-color-text-disabled);
344
+ cursor: not-allowed;
963
345
  }
964
-
965
- .border-l-4{
966
- border-left-width: 4px;
346
+ .lex4-settings-item svg {
347
+ flex-shrink: 0;
348
+ color: var(--lex4-color-text-muted);
967
349
  }
968
-
969
- .border-t{
970
- border-top-width: 1px;
350
+ .lex4-settings-item:hover:not(:disabled) svg {
351
+ color: var(--lex4-color-text-secondary);
971
352
  }
972
353
 
973
- .border-t-2{
974
- border-top-width: 2px;
354
+ .lex4-settings-divider {
355
+ margin: 0.25rem 0;
356
+ height: 1px;
357
+ background-color: var(--lex4-color-border-light);
975
358
  }
976
359
 
977
- .border-dashed{
978
- border-style: dashed;
360
+ .lex4-settings-counter-grid {
361
+ display: grid;
362
+ grid-template-columns: 1fr 1fr;
363
+ gap: 0.375rem;
364
+ padding: 0 0.75rem 0.625rem;
979
365
  }
980
366
 
981
- .border-blue-100{
982
- --tw-border-opacity: 1;
983
- border-color: rgb(219 234 254 / var(--tw-border-opacity, 1));
367
+ .lex4-settings-counter-btn {
368
+ border-radius: 0.25rem;
369
+ padding: 0.375rem 0.625rem;
370
+ font-size: 0.75rem;
371
+ line-height: 1rem;
372
+ text-align: left;
373
+ color: var(--lex4-color-text-secondary);
374
+ transition: background-color 150ms, color 150ms;
984
375
  }
985
-
986
- .border-blue-300{
987
- --tw-border-opacity: 1;
988
- border-color: rgb(147 197 253 / var(--tw-border-opacity, 1));
376
+ .lex4-settings-counter-btn:hover:not([aria-checked="true"]) {
377
+ background-color: var(--lex4-color-hover);
989
378
  }
990
-
991
- .border-gray-100{
992
- --tw-border-opacity: 1;
993
- border-color: rgb(243 244 246 / var(--tw-border-opacity, 1));
379
+ .lex4-settings-counter-btn[aria-checked="true"] {
380
+ background-color: var(--lex4-color-primary-light);
381
+ color: var(--lex4-color-primary-text);
382
+ font-weight: 500;
994
383
  }
995
384
 
996
- .border-gray-200{
997
- --tw-border-opacity: 1;
998
- border-color: rgb(229 231 235 / var(--tw-border-opacity, 1));
385
+ /* ── Sidebar ─────────────────────────────────────────────── */
386
+ .lex4-sidebar {
387
+ display: flex;
388
+ height: 100%;
389
+ flex-shrink: 0;
390
+ flex-direction: column;
391
+ width: var(--lex4-sidebar-width);
392
+ border-left: 1px solid var(--lex4-color-border);
393
+ background-color: var(--lex4-color-bg);
999
394
  }
1000
395
 
1001
- .border-gray-300{
1002
- --tw-border-opacity: 1;
1003
- border-color: rgb(209 213 219 / var(--tw-border-opacity, 1));
396
+ .lex4-sidebar-header {
397
+ display: flex;
398
+ align-items: flex-start;
399
+ justify-content: space-between;
400
+ padding: 0.75rem 0.875rem;
401
+ border-bottom: 1px solid var(--lex4-color-border);
1004
402
  }
1005
403
 
1006
- .border-b-blue-200{
1007
- --tw-border-opacity: 1;
1008
- border-bottom-color: rgb(191 219 254 / var(--tw-border-opacity, 1));
404
+ .lex4-sidebar-title {
405
+ font-size: 0.75rem;
406
+ line-height: 1rem;
407
+ font-weight: 600;
408
+ color: var(--lex4-color-text);
1009
409
  }
1010
410
 
1011
- .border-t-blue-200{
1012
- --tw-border-opacity: 1;
1013
- border-top-color: rgb(191 219 254 / var(--tw-border-opacity, 1));
411
+ .lex4-sidebar-subtitle {
412
+ margin-top: 0.125rem;
413
+ font-size: 0.75rem;
414
+ line-height: 1rem;
415
+ color: var(--lex4-color-text-secondary);
1014
416
  }
1015
417
 
1016
- .bg-blue-50{
1017
- --tw-bg-opacity: 1;
1018
- background-color: rgb(239 246 255 / var(--tw-bg-opacity, 1));
418
+ .lex4-sidebar-actions {
419
+ display: flex;
420
+ align-items: center;
421
+ gap: 0.25rem;
1019
422
  }
1020
423
 
1021
- .bg-blue-50\/60{
1022
- background-color: rgb(239 246 255 / 0.6);
424
+ .lex4-sidebar-action-btn {
425
+ display: flex;
426
+ height: 1.5rem;
427
+ width: 1.5rem;
428
+ align-items: center;
429
+ justify-content: center;
430
+ border-radius: 0.25rem;
431
+ color: var(--lex4-color-text-muted);
432
+ transition: color 150ms, background-color 150ms;
1023
433
  }
1024
-
1025
- .bg-blue-500{
1026
- --tw-bg-opacity: 1;
1027
- background-color: rgb(59 130 246 / var(--tw-bg-opacity, 1));
434
+ .lex4-sidebar-action-btn:hover {
435
+ background-color: var(--lex4-color-hover);
436
+ color: var(--lex4-color-hover-text);
1028
437
  }
1029
438
 
1030
- .bg-gray-100{
1031
- --tw-bg-opacity: 1;
1032
- background-color: rgb(243 244 246 / var(--tw-bg-opacity, 1));
439
+ .lex4-sidebar-body {
440
+ min-height: 0;
441
+ flex: 1;
442
+ overflow: auto;
1033
443
  }
1034
444
 
1035
- .bg-gray-200{
1036
- --tw-bg-opacity: 1;
1037
- background-color: rgb(229 231 235 / var(--tw-bg-opacity, 1));
445
+ /* ── History sidebar ─────────────────────────────────────── */
446
+ .lex4-history-empty {
447
+ padding: 1rem 0.75rem;
448
+ font-size: 0.75rem;
449
+ line-height: 1rem;
450
+ color: var(--lex4-color-text-secondary);
1038
451
  }
1039
452
 
1040
- .bg-gray-300{
1041
- --tw-bg-opacity: 1;
1042
- background-color: rgb(209 213 219 / var(--tw-bg-opacity, 1));
453
+ .lex4-history-list > li + li {
454
+ border-top: 1px solid var(--lex4-color-border-light);
1043
455
  }
1044
456
 
1045
- .bg-gray-50{
1046
- --tw-bg-opacity: 1;
1047
- background-color: rgb(249 250 251 / var(--tw-bg-opacity, 1));
457
+ .lex4-history-entry {
458
+ width: 100%;
459
+ padding: 0.5rem 0.75rem;
460
+ text-align: left;
461
+ background-color: var(--lex4-color-bg);
462
+ transition: background-color 150ms;
1048
463
  }
1049
-
1050
- .bg-white{
1051
- --tw-bg-opacity: 1;
1052
- background-color: rgb(255 255 255 / var(--tw-bg-opacity, 1));
464
+ .lex4-history-entry:hover:not(.active) {
465
+ background-color: var(--lex4-color-hover);
1053
466
  }
1054
-
1055
- .p-0{
1056
- padding: 0px;
467
+ .lex4-history-entry.active {
468
+ background-color: var(--lex4-color-primary-light);
1057
469
  }
1058
470
 
1059
- .p-1{
1060
- padding: 0.25rem;
471
+ .lex4-history-entry-row {
472
+ display: flex;
473
+ align-items: flex-start;
474
+ justify-content: space-between;
475
+ gap: 0.5rem;
1061
476
  }
1062
477
 
1063
- .p-2{
1064
- padding: 0.5rem;
478
+ .lex4-history-entry-content {
479
+ min-width: 0;
1065
480
  }
1066
481
 
1067
- .p-3{
1068
- padding: 0.75rem;
482
+ .lex4-history-entry-label {
483
+ font-size: 0.75rem;
484
+ line-height: 1rem;
485
+ color: var(--lex4-color-text);
1069
486
  }
1070
-
1071
- .px-1{
1072
- padding-left: 0.25rem;
1073
- padding-right: 0.25rem;
487
+ .lex4-history-entry-label.current {
488
+ font-weight: 600;
489
+ color: var(--lex4-color-primary-text);
1074
490
  }
1075
491
 
1076
- .px-1\.5{
1077
- padding-left: 0.375rem;
1078
- padding-right: 0.375rem;
492
+ .lex4-history-entry-source {
493
+ margin-top: 0.125rem;
494
+ font-size: 0.75rem;
495
+ line-height: 1rem;
496
+ color: var(--lex4-color-text-muted);
1079
497
  }
1080
498
 
1081
- .px-2{
1082
- padding-left: 0.5rem;
1083
- padding-right: 0.5rem;
499
+ .lex4-history-entry-time {
500
+ flex-shrink: 0;
501
+ font-size: 0.75rem;
502
+ line-height: 1rem;
503
+ color: var(--lex4-color-text-muted);
1084
504
  }
1085
505
 
1086
- .px-2\.5{
1087
- padding-left: 0.625rem;
1088
- padding-right: 0.625rem;
506
+ /* ── Variable panel ──────────────────────────────────────── */
507
+ .lex4-variable-search-container {
508
+ padding: 0.75rem;
1089
509
  }
1090
510
 
1091
- .px-3{
1092
- padding-left: 0.75rem;
1093
- padding-right: 0.75rem;
511
+ .lex4-variable-search-wrapper {
512
+ position: relative;
1094
513
  }
1095
514
 
1096
- .py-0\.5{
1097
- padding-top: 0.125rem;
1098
- padding-bottom: 0.125rem;
515
+ .lex4-variable-search-icon {
516
+ position: absolute;
517
+ left: 0.625rem;
518
+ top: 50%;
519
+ transform: translateY(-50%);
520
+ color: var(--lex4-color-text-muted);
1099
521
  }
1100
522
 
1101
- .py-1{
1102
- padding-top: 0.25rem;
1103
- padding-bottom: 0.25rem;
523
+ .lex4-variable-search-input {
524
+ width: 100%;
525
+ border-radius: 0.5rem;
526
+ border: 1px solid var(--lex4-color-border);
527
+ background-color: var(--lex4-color-bg-muted);
528
+ padding: 0.375rem 0.75rem 0.375rem 2rem;
529
+ font-size: 0.75rem;
530
+ line-height: 1rem;
531
+ color: var(--lex4-color-text);
1104
532
  }
1105
-
1106
- .py-1\.5{
1107
- padding-top: 0.375rem;
1108
- padding-bottom: 0.375rem;
533
+ .lex4-variable-search-input:focus {
534
+ outline: none;
535
+ border-color: var(--lex4-color-primary-focus);
536
+ box-shadow: 0 0 0 1px var(--lex4-color-primary-focus);
1109
537
  }
1110
538
 
1111
- .py-2{
1112
- padding-top: 0.5rem;
1113
- padding-bottom: 0.5rem;
539
+ .lex4-variable-list {
540
+ padding: 0 0.75rem 1rem;
1114
541
  }
1115
542
 
1116
- .py-2\.5{
1117
- padding-top: 0.625rem;
1118
- padding-bottom: 0.625rem;
543
+ .lex4-variable-list-empty {
544
+ padding: 1rem 0;
545
+ text-align: center;
546
+ font-size: 0.75rem;
547
+ line-height: 1rem;
548
+ color: var(--lex4-color-text-muted);
1119
549
  }
1120
550
 
1121
- .py-4{
1122
- padding-top: 1rem;
1123
- padding-bottom: 1rem;
551
+ .lex4-variable-group {
552
+ margin-bottom: 0.625rem;
553
+ display: flex;
554
+ flex-direction: column;
555
+ gap: 0.25rem;
1124
556
  }
1125
557
 
1126
- .py-8{
1127
- padding-top: 2rem;
1128
- padding-bottom: 2rem;
558
+ .lex4-variable-list-item {
559
+ display: grid;
560
+ grid-template-columns: minmax(0, 1fr) auto;
561
+ align-items: center;
562
+ gap: 0.75rem;
563
+ border-radius: 0.5rem;
564
+ padding: 0.5rem 0.625rem;
565
+ text-align: left;
566
+ font-size: 0.75rem;
567
+ line-height: 1rem;
568
+ transition: background-color 150ms;
1129
569
  }
1130
-
1131
- .pb-1{
1132
- padding-bottom: 0.25rem;
570
+ .lex4-variable-list-item:hover {
571
+ background-color: var(--lex4-color-primary-light);
1133
572
  }
1134
573
 
1135
- .pb-2{
1136
- padding-bottom: 0.5rem;
574
+ .lex4-variable-badge {
575
+ display: inline-flex;
576
+ align-items: center;
577
+ justify-self: start;
578
+ max-width: 100%;
579
+ overflow: hidden;
580
+ border-radius: 9999px;
581
+ border: 1px solid var(--lex4-color-primary-border);
582
+ padding: 0.1875rem 0.5625rem;
583
+ font-size: 11px;
584
+ font-weight: 500;
585
+ color: var(--lex4-color-primary-text);
586
+ white-space: nowrap;
587
+ text-overflow: ellipsis;
1137
588
  }
1138
589
 
1139
- .pb-3{
1140
- padding-bottom: 0.75rem;
590
+ .lex4-variable-group-label {
591
+ white-space: nowrap;
592
+ text-align: right;
593
+ font-size: 10px;
594
+ font-weight: 600;
595
+ text-transform: uppercase;
596
+ letter-spacing: 0.05em;
597
+ color: var(--lex4-color-text-muted);
1141
598
  }
1142
599
 
1143
- .pl-4{
1144
- padding-left: 1rem;
600
+ /* ── Variable picker (toolbar dropdown) ──────────────────── */
601
+ .lex4-variable-picker {
602
+ position: relative;
603
+ display: inline-block;
1145
604
  }
1146
605
 
1147
- .pl-8{
1148
- padding-left: 2rem;
606
+ .lex4-variable-picker-btn {
607
+ height: 1.75rem;
608
+ border-radius: 0.25rem;
609
+ border: 1px solid var(--lex4-color-border);
610
+ padding: 0 0.5rem;
611
+ font-size: 0.75rem;
612
+ line-height: 1rem;
613
+ font-weight: 500;
614
+ background-color: var(--lex4-color-bg);
615
+ color: var(--lex4-color-text);
1149
616
  }
1150
-
1151
- .pr-24{
1152
- padding-right: 6rem;
617
+ .lex4-variable-picker-btn:focus {
618
+ outline: none;
619
+ border-color: var(--lex4-color-primary-focus);
620
+ box-shadow: 0 0 0 1px var(--lex4-color-primary-focus);
1153
621
  }
1154
-
1155
- .pr-3{
1156
- padding-right: 0.75rem;
622
+ .lex4-variable-picker-btn:disabled {
623
+ opacity: 0.5;
624
+ cursor: not-allowed;
1157
625
  }
1158
626
 
1159
- .pt-2{
1160
- padding-top: 0.5rem;
627
+ .lex4-variable-picker-dropdown {
628
+ position: absolute;
629
+ left: 0;
630
+ top: 100%;
631
+ z-index: 50;
632
+ margin-top: 0.25rem;
633
+ width: min(20rem, calc(100vw - 2rem));
634
+ border-radius: 0.5rem;
635
+ border: 1px solid var(--lex4-color-border);
636
+ background-color: var(--lex4-color-bg);
637
+ box-shadow: 0 10px 15px -3px rgb(0 0 0 / 0.1),
638
+ 0 4px 6px -4px rgb(0 0 0 / 0.1);
1161
639
  }
1162
640
 
1163
- .text-left{
1164
- text-align: left;
641
+ .lex4-variable-picker-search {
642
+ padding: 0.625rem;
643
+ border-bottom: 1px solid var(--lex4-color-border-light);
1165
644
  }
1166
645
 
1167
- .text-center{
1168
- text-align: center;
646
+ .lex4-variable-picker-search input {
647
+ width: 100%;
648
+ border-radius: 0.375rem;
649
+ border: 1px solid var(--lex4-color-border);
650
+ background-color: var(--lex4-color-bg-muted);
651
+ padding: 0.375rem 0.625rem;
652
+ font-size: 0.75rem;
653
+ line-height: 1rem;
654
+ color: var(--lex4-color-text);
1169
655
  }
1170
-
1171
- .text-justify{
1172
- text-align: justify;
656
+ .lex4-variable-picker-search input:focus {
657
+ outline: none;
658
+ border-color: var(--lex4-color-primary-focus);
659
+ box-shadow: 0 0 0 1px var(--lex4-color-primary-focus);
1173
660
  }
1174
661
 
1175
- .text-2xl{
1176
- font-size: 1.5rem;
1177
- line-height: 2rem;
662
+ .lex4-variable-picker-list {
663
+ max-height: 12rem;
664
+ overflow-y: auto;
665
+ padding: 0.375rem;
1178
666
  }
1179
667
 
1180
- .text-3xl{
1181
- font-size: 1.875rem;
1182
- line-height: 2.25rem;
668
+ .lex4-variable-picker-empty {
669
+ padding: 0.25rem 0.5rem;
670
+ font-size: 0.75rem;
671
+ line-height: 1rem;
672
+ color: var(--lex4-color-text-muted);
1183
673
  }
1184
674
 
1185
- .text-\[10px\]{
675
+ .lex4-variable-picker-group-label {
676
+ padding: 0.375rem 0.625rem 0.25rem;
1186
677
  font-size: 10px;
678
+ font-weight: 600;
679
+ text-transform: uppercase;
680
+ letter-spacing: 0.05em;
681
+ color: var(--lex4-color-text-muted);
1187
682
  }
1188
683
 
1189
- .text-\[11px\]{
1190
- font-size: 11px;
684
+ .lex4-variable-picker-option {
685
+ display: grid;
686
+ width: 100%;
687
+ grid-template-columns: minmax(0, 1fr) minmax(6.5rem, auto);
688
+ align-items: start;
689
+ gap: 0.75rem;
690
+ border-radius: 0.25rem;
691
+ padding: 0.4375rem 0.625rem;
692
+ text-align: left;
693
+ font-size: 0.75rem;
694
+ line-height: 1rem;
695
+ transition: background-color 150ms;
1191
696
  }
1192
-
1193
- .text-base{
1194
- font-size: 1rem;
1195
- line-height: 1.5rem;
697
+ .lex4-variable-picker-option:hover {
698
+ background-color: var(--lex4-color-primary-light);
1196
699
  }
1197
700
 
1198
- .text-lg{
1199
- font-size: 1.125rem;
1200
- line-height: 1.75rem;
701
+ .lex4-variable-picker-key {
702
+ min-width: 0;
703
+ overflow: hidden;
704
+ font-weight: 500;
705
+ color: var(--lex4-color-primary-text);
706
+ white-space: nowrap;
707
+ text-overflow: ellipsis;
1201
708
  }
1202
709
 
1203
- .text-xl{
1204
- font-size: 1.25rem;
1205
- line-height: 1.75rem;
710
+ .lex4-variable-picker-label {
711
+ text-align: right;
712
+ color: var(--lex4-color-text-secondary);
1206
713
  }
1207
714
 
1208
- .text-xs{
1209
- font-size: 0.75rem;
1210
- line-height: 1rem;
715
+ /* ── Variable chip (inline node) ─────────────────────────── */
716
+ .lex4-variable-chip {
717
+ display: inline-flex;
718
+ align-items: center;
719
+ border-radius: 9999px;
720
+ border: 1px solid var(--lex4-color-primary-border);
721
+ background-color: var(--lex4-color-bg);
722
+ padding: 0.125rem 0.5rem;
723
+ font-size: 11px;
724
+ font-weight: 500;
725
+ color: var(--lex4-color-primary-text);
726
+ -webkit-user-select: none;
727
+ -moz-user-select: none;
728
+ user-select: none;
729
+ cursor: default;
730
+ white-space: nowrap;
731
+ margin: 0 0.125rem;
1211
732
  }
1212
733
 
1213
- .font-bold{
1214
- font-weight: 700;
734
+ /* ── Document view ───────────────────────────────────────── */
735
+ .lex4-document-view {
736
+ display: flex;
737
+ flex-direction: column;
738
+ align-items: center;
739
+ gap: 2rem;
740
+ padding: 2rem 0;
741
+ min-height: 100%;
1215
742
  }
1216
743
 
1217
- .font-medium{
1218
- font-weight: 500;
744
+ /* ── Page ────────────────────────────────────────────────── */
745
+ .lex4-page {
746
+ display: flex;
747
+ flex-direction: column;
748
+ background-color: var(--lex4-color-bg);
749
+ box-shadow: var(--lex4-page-shadow);
1219
750
  }
1220
751
 
1221
- .font-semibold{
1222
- font-weight: 600;
752
+ .lex4-page,
753
+ .lex4-page [contenteditable],
754
+ .lex4-page .lex4-page-placeholder,
755
+ .lex4-page .lex4-page-hf-placeholder {
756
+ font-family: var(--lex4-font-family);
1223
757
  }
1224
758
 
1225
- .uppercase{
1226
- text-transform: uppercase;
759
+ /* ── Page body ───────────────────────────────────────────── */
760
+ .lex4-page-body {
761
+ flex: 1;
762
+ min-height: 0;
763
+ position: relative;
764
+ overflow: hidden;
1227
765
  }
1228
766
 
1229
- .italic{
1230
- font-style: italic;
767
+ .lex4-page-body-editable {
768
+ outline: none;
769
+ height: 100%;
770
+ padding: 0;
771
+ overflow: visible;
1231
772
  }
1232
773
 
1233
- .tracking-wider{
1234
- letter-spacing: 0.05em;
774
+ .lex4-root {
775
+ outline: none;
1235
776
  }
1236
777
 
1237
- .text-blue-600{
1238
- --tw-text-opacity: 1;
1239
- color: rgb(37 99 235 / var(--tw-text-opacity, 1));
778
+ .lex4-paragraph {
779
+ margin: 0;
780
+ text-align: justify;
1240
781
  }
1241
782
 
1242
- .text-blue-700{
1243
- --tw-text-opacity: 1;
1244
- color: rgb(29 78 216 / var(--tw-text-opacity, 1));
783
+ .lex4-heading {
784
+ margin: 0 0 0.5rem;
785
+ font-weight: 600;
786
+ line-height: 1.25;
787
+ color: var(--lex4-color-text);
1245
788
  }
1246
789
 
1247
- .text-gray-300{
1248
- --tw-text-opacity: 1;
1249
- color: rgb(209 213 219 / var(--tw-text-opacity, 1));
790
+ .lex4-heading-h1 {
791
+ font-size: 1.875rem;
792
+ font-weight: 700;
1250
793
  }
1251
794
 
1252
- .text-gray-400{
1253
- --tw-text-opacity: 1;
1254
- color: rgb(156 163 175 / var(--tw-text-opacity, 1));
795
+ .lex4-heading-h2 {
796
+ font-size: 1.5rem;
797
+ font-weight: 700;
1255
798
  }
1256
799
 
1257
- .text-gray-500{
1258
- --tw-text-opacity: 1;
1259
- color: rgb(107 114 128 / var(--tw-text-opacity, 1));
800
+ .lex4-heading-h3 {
801
+ font-size: 1.25rem;
1260
802
  }
1261
803
 
1262
- .text-gray-600{
1263
- --tw-text-opacity: 1;
1264
- color: rgb(75 85 99 / var(--tw-text-opacity, 1));
804
+ .lex4-heading-h4 {
805
+ font-size: 1.125rem;
1265
806
  }
1266
807
 
1267
- .text-gray-700{
1268
- --tw-text-opacity: 1;
1269
- color: rgb(55 65 81 / var(--tw-text-opacity, 1));
808
+ .lex4-heading-h5 {
809
+ font-size: 1rem;
810
+ font-weight: 500;
1270
811
  }
1271
812
 
1272
- .text-gray-900{
1273
- --tw-text-opacity: 1;
1274
- color: rgb(17 24 39 / var(--tw-text-opacity, 1));
813
+ .lex4-text-bold {
814
+ font-weight: 700;
1275
815
  }
1276
816
 
1277
- .underline{
1278
- text-decoration-line: underline;
817
+ .lex4-text-italic {
818
+ font-style: italic;
1279
819
  }
1280
820
 
1281
- .line-through{
1282
- text-decoration-line: line-through;
821
+ .lex4-text-underline {
822
+ text-decoration: underline;
1283
823
  }
1284
824
 
1285
- .placeholder-gray-400::-moz-placeholder{
1286
- --tw-placeholder-opacity: 1;
1287
- color: rgb(156 163 175 / var(--tw-placeholder-opacity, 1));
825
+ .lex4-text-strikethrough {
826
+ text-decoration: line-through;
1288
827
  }
1289
828
 
1290
- .placeholder-gray-400::placeholder{
1291
- --tw-placeholder-opacity: 1;
1292
- color: rgb(156 163 175 / var(--tw-placeholder-opacity, 1));
829
+ .lex4-text-underline.lex4-text-strikethrough {
830
+ text-decoration: underline line-through;
1293
831
  }
1294
832
 
1295
- .opacity-0{
1296
- opacity: 0;
833
+ .lex4-list {
834
+ margin: 0;
835
+ padding-left: 1.5rem;
1297
836
  }
1298
837
 
1299
- .shadow-lg{
1300
- --tw-shadow: 0 10px 15px -3px rgb(0 0 0 / 0.1), 0 4px 6px -4px rgb(0 0 0 / 0.1);
1301
- --tw-shadow-colored: 0 10px 15px -3px var(--tw-shadow-color), 0 4px 6px -4px var(--tw-shadow-color);
1302
- box-shadow: var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000), var(--tw-shadow);
838
+ .lex4-list-ordered {
839
+ list-style: decimal;
1303
840
  }
1304
841
 
1305
- .shadow-sm{
1306
- --tw-shadow: 0 1px 2px 0 rgb(0 0 0 / 0.05);
1307
- --tw-shadow-colored: 0 1px 2px 0 var(--tw-shadow-color);
1308
- box-shadow: var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000), var(--tw-shadow);
842
+ .lex4-list-unordered {
843
+ list-style: disc;
1309
844
  }
1310
845
 
1311
- .shadow-xl{
1312
- --tw-shadow: 0 20px 25px -5px rgb(0 0 0 / 0.1), 0 8px 10px -6px rgb(0 0 0 / 0.1);
1313
- --tw-shadow-colored: 0 20px 25px -5px var(--tw-shadow-color), 0 8px 10px -6px var(--tw-shadow-color);
1314
- box-shadow: var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000), var(--tw-shadow);
846
+ .lex4-listitem {
847
+ margin: 0.25rem 0;
1315
848
  }
1316
849
 
1317
- .outline-none{
1318
- outline: 2px solid transparent;
1319
- outline-offset: 2px;
850
+ .lex4-listitem-nested {
851
+ list-style: none;
1320
852
  }
1321
853
 
1322
- .blur{
1323
- --tw-blur: blur(8px);
1324
- filter: var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow);
854
+ .lex4-quote {
855
+ margin: 0;
856
+ border-left: 4px solid var(--lex4-color-border);
857
+ padding-left: 1rem;
858
+ color: var(--lex4-color-text-secondary);
859
+ font-style: italic;
1325
860
  }
1326
861
 
1327
- .\!filter{
1328
- filter: var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow) !important;
862
+ .lex4-page-placeholder {
863
+ position: absolute;
864
+ top: 0;
865
+ left: 0;
866
+ color: var(--lex4-color-text-muted);
867
+ pointer-events: none;
868
+ -webkit-user-select: none;
869
+ -moz-user-select: none;
870
+ user-select: none;
1329
871
  }
1330
872
 
1331
- .filter{
1332
- filter: var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow);
873
+ /* ── Page header / footer ────────────────────────────────── */
874
+ .lex4-page-header {
875
+ position: relative;
876
+ flex-shrink: 0;
877
+ background-color: var(--lex4-color-hf-bg);
878
+ border-top: 2px solid var(--lex4-color-hf-border);
879
+ border-bottom: 1px dashed var(--lex4-color-hf-border-inner);
880
+ overflow: clip;
1333
881
  }
1334
882
 
1335
- .transition-colors{
1336
- transition-property: color, background-color, border-color, text-decoration-color, fill, stroke;
1337
- transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1);
1338
- transition-duration: 150ms;
883
+ .lex4-page-footer {
884
+ position: relative;
885
+ flex-shrink: 0;
886
+ background-color: var(--lex4-color-hf-bg);
887
+ border-bottom: 2px solid var(--lex4-color-hf-border);
888
+ border-top: 1px dashed var(--lex4-color-hf-border-inner);
889
+ overflow: clip;
1339
890
  }
1340
891
 
1341
- .transition-transform{
1342
- transition-property: transform;
1343
- transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1);
1344
- transition-duration: 150ms;
892
+ .lex4-page-hf-editable {
893
+ outline: none;
894
+ padding: 0.5rem;
895
+ color: var(--lex4-color-text-secondary);
896
+ min-height: 24px;
1345
897
  }
1346
898
 
1347
- .duration-200{
1348
- transition-duration: 200ms;
899
+ .lex4-page-hf-narrow {
900
+ padding-right: 6rem;
1349
901
  }
1350
902
 
1351
- .lex4-editor {
1352
- font-family: 'Calibri', 'Carlito', sans-serif;
903
+ .lex4-page-hf-placeholder {
904
+ position: absolute;
905
+ top: 0;
906
+ left: 0;
907
+ padding: 0.5rem;
908
+ color: var(--lex4-color-text-muted);
909
+ pointer-events: none;
910
+ -webkit-user-select: none;
911
+ -moz-user-select: none;
912
+ user-select: none;
1353
913
  }
1354
914
 
1355
- .lex4-page,
1356
- .lex4-page [contenteditable],
1357
- .lex4-page .pointer-events-none {
1358
- font-family: inherit;
915
+ .lex4-page-counter {
916
+ position: absolute;
917
+ right: 0.5rem;
918
+ top: 0.5rem;
919
+ font-family: var(--lex4-ui-font-family);
920
+ font-size: 11px;
921
+ line-height: 1rem;
922
+ color: var(--lex4-color-text-secondary);
923
+ pointer-events: none;
924
+ -webkit-user-select: none;
925
+ -moz-user-select: none;
926
+ user-select: none;
1359
927
  }
1360
928
 
929
+ /* ── Global selection ────────────────────────────────────── */
1361
930
  .lex4-editor[data-global-selection-active="true"] [data-testid^="page-body-"] [contenteditable="true"] {
1362
- background-color: rgb(191 219 254) !important;
931
+ background-color: var(--lex4-color-selection-bg) !important;
1363
932
  caret-color: transparent;
1364
- color: rgb(30 64 175) !important;
933
+ color: var(--lex4-color-selection-text) !important;
1365
934
  }
1366
935
 
1367
936
  .lex4-editor[data-global-selection-active="true"] [data-testid^="page-body-"] [contenteditable="true"] p,
@@ -1382,77 +951,3 @@ video {
1382
951
  .lex4-editor[data-global-selection-active="true"] [data-testid^="page-body-"] [contenteditable="true"] s {
1383
952
  color: inherit !important;
1384
953
  }
1385
-
1386
- .hover\:bg-blue-50:hover{
1387
- --tw-bg-opacity: 1;
1388
- background-color: rgb(239 246 255 / var(--tw-bg-opacity, 1));
1389
- }
1390
-
1391
- .hover\:bg-gray-100:hover{
1392
- --tw-bg-opacity: 1;
1393
- background-color: rgb(243 244 246 / var(--tw-bg-opacity, 1));
1394
- }
1395
-
1396
- .hover\:bg-gray-50:hover{
1397
- --tw-bg-opacity: 1;
1398
- background-color: rgb(249 250 251 / var(--tw-bg-opacity, 1));
1399
- }
1400
-
1401
- .hover\:text-gray-600:hover{
1402
- --tw-text-opacity: 1;
1403
- color: rgb(75 85 99 / var(--tw-text-opacity, 1));
1404
- }
1405
-
1406
- .hover\:text-gray-900:hover{
1407
- --tw-text-opacity: 1;
1408
- color: rgb(17 24 39 / var(--tw-text-opacity, 1));
1409
- }
1410
-
1411
- .focus\:border-blue-400:focus{
1412
- --tw-border-opacity: 1;
1413
- border-color: rgb(96 165 250 / var(--tw-border-opacity, 1));
1414
- }
1415
-
1416
- .focus\:bg-white:focus{
1417
- --tw-bg-opacity: 1;
1418
- background-color: rgb(255 255 255 / var(--tw-bg-opacity, 1));
1419
- }
1420
-
1421
- .focus\:outline-none:focus{
1422
- outline: 2px solid transparent;
1423
- outline-offset: 2px;
1424
- }
1425
-
1426
- .focus\:ring-1:focus{
1427
- --tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);
1428
- --tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(1px + var(--tw-ring-offset-width)) var(--tw-ring-color);
1429
- box-shadow: var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow, 0 0 #0000);
1430
- }
1431
-
1432
- .focus\:ring-blue-400:focus{
1433
- --tw-ring-opacity: 1;
1434
- --tw-ring-color: rgb(96 165 250 / var(--tw-ring-opacity, 1));
1435
- }
1436
-
1437
- .disabled\:cursor-not-allowed:disabled{
1438
- cursor: not-allowed;
1439
- }
1440
-
1441
- .disabled\:text-gray-300:disabled{
1442
- --tw-text-opacity: 1;
1443
- color: rgb(209 213 219 / var(--tw-text-opacity, 1));
1444
- }
1445
-
1446
- .disabled\:opacity-50:disabled{
1447
- opacity: 0.5;
1448
- }
1449
-
1450
- .group:hover .group-hover\:border-blue-400{
1451
- --tw-border-opacity: 1;
1452
- border-color: rgb(96 165 250 / var(--tw-border-opacity, 1));
1453
- }
1454
-
1455
- .group:hover .group-hover\:bg-blue-50{
1456
- --tw-bg-opacity: 1;
1457
- background-color: rgb(239 246 255 / var(--tw-bg-opacity, 1));
1458
- }