@dotit/editor 1.0.0

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 ADDED
@@ -0,0 +1,1364 @@
1
+ /* @dotit/editor — stylesheet for the embeddable IntentText visual editor.
2
+ *
3
+ * Import once in your app: import "@dotit/editor/style.css";
4
+ *
5
+ * Everything is scoped under .docs-container / .docs-page so it can sit inside
6
+ * any host page (ERP, portal) without leaking styles. The same stylesheet is
7
+ * cloned into the WYSIWYG print document, which is what makes the exported PDF
8
+ * match the on-screen pages exactly.
9
+ */
10
+
11
+ /* ─── Scoped reset (the editor must not depend on host-page resets) ───────── */
12
+
13
+ .docs-container {
14
+ font-family: "Inter", "Segoe UI", sans-serif;
15
+ color: #1f2937;
16
+ }
17
+ .docs-container *,
18
+ .docs-container *::before,
19
+ .docs-container *::after {
20
+ margin: 0;
21
+ padding: 0;
22
+ box-sizing: border-box;
23
+ }
24
+ .docs-container button {
25
+ font-family: inherit;
26
+ cursor: pointer;
27
+ border: none;
28
+ background: none;
29
+ color: inherit;
30
+ }
31
+
32
+ /* ═══════════════════════════════════════════════════════════════
33
+ GOOGLE DOCS – Visual Editor (TipTap)
34
+ ═══════════════════════════════════════════════════════════════ */
35
+
36
+ /* Container fills the panel */
37
+ .docs-container {
38
+ display: flex;
39
+ flex-direction: column;
40
+ height: 100%;
41
+ background: #f8f9fa;
42
+ }
43
+
44
+ /* ─── Docs Toolbar (formatting bar) ───────────────────────── */
45
+
46
+ .docs-toolbar {
47
+ display: flex;
48
+ align-items: center;
49
+ gap: 2px;
50
+ padding: 4px 12px;
51
+ background: rgba(108, 63, 197, 0.08);
52
+ border-bottom: 1px solid #dadce0;
53
+ flex-shrink: 0;
54
+ min-height: 40px;
55
+ flex-wrap: wrap;
56
+ }
57
+ .docs-toolbar button,
58
+ .docs-toolbar select {
59
+ display: inline-flex;
60
+ align-items: center;
61
+ justify-content: center;
62
+ min-width: 28px;
63
+ height: 28px;
64
+ padding: 0 6px;
65
+ border: none;
66
+ border-radius: 4px;
67
+ background: transparent;
68
+ color: #444746;
69
+ font-size: 13px;
70
+ cursor: pointer;
71
+ transition: background 0.1s;
72
+ }
73
+ .docs-toolbar button:hover,
74
+ .docs-toolbar select:hover {
75
+ background: rgba(0, 0, 0, 0.06);
76
+ }
77
+ .docs-toolbar button.active {
78
+ background: rgba(108, 63, 197, 0.12);
79
+ color: #6c3fc5;
80
+ }
81
+ .docs-toolbar select {
82
+ padding: 0 4px;
83
+ font-family: inherit;
84
+ font-size: 13px;
85
+ width: 150px;
86
+ min-width: 150px;
87
+ appearance: auto;
88
+ }
89
+ .docs-toolbar-sep {
90
+ width: 1px;
91
+ height: 20px;
92
+ background: #c4c7c5;
93
+ margin: 0 4px;
94
+ flex-shrink: 0;
95
+ }
96
+
97
+ /* Docs toolbar button styles */
98
+ .docs-tb-btn {
99
+ display: inline-flex;
100
+ align-items: center;
101
+ justify-content: center;
102
+ gap: 4px;
103
+ min-width: 28px;
104
+ height: 28px;
105
+ padding: 0 6px;
106
+ border: none;
107
+ border-radius: 4px;
108
+ background: transparent;
109
+ color: #444746;
110
+ font-size: 13px;
111
+ cursor: pointer;
112
+ transition: background 0.1s;
113
+ }
114
+ .docs-tb-btn:hover {
115
+ background: rgba(0, 0, 0, 0.06);
116
+ }
117
+ .docs-tb-btn:disabled {
118
+ opacity: 0.3;
119
+ cursor: default;
120
+ }
121
+ .docs-tb-btn.active {
122
+ background: rgba(108, 63, 197, 0.12);
123
+ color: #6c3fc5;
124
+ }
125
+ .docs-tb-btn.active:hover {
126
+ background: rgba(108, 63, 197, 0.18);
127
+ }
128
+ .docs-tb-sep {
129
+ width: 1px;
130
+ height: 20px;
131
+ background: #c4c7c5;
132
+ margin: 0 4px;
133
+ flex-shrink: 0;
134
+ }
135
+ .docs-tb-dropdown {
136
+ position: relative;
137
+ }
138
+ .docs-tb-style-btn {
139
+ display: inline-flex;
140
+ align-items: center;
141
+ gap: 4px;
142
+ height: 28px;
143
+ padding: 0 8px;
144
+ border: none;
145
+ border-radius: 4px;
146
+ background: transparent;
147
+ color: #444746;
148
+ font-size: 13px;
149
+ cursor: pointer;
150
+ min-width: 120px;
151
+ transition: background 0.1s;
152
+ }
153
+ .docs-tb-style-btn:hover {
154
+ background: rgba(0, 0, 0, 0.06);
155
+ }
156
+ .docs-tb-insert-btn {
157
+ gap: 4px;
158
+ padding: 0 8px;
159
+ font-size: 13px;
160
+ }
161
+ .docs-tb-dropdown-menu {
162
+ position: absolute;
163
+ top: calc(100% + 4px);
164
+ left: 0;
165
+ z-index: 100;
166
+ min-width: 180px;
167
+ background: #fff;
168
+ border: 1px solid #dadce0;
169
+ border-radius: 8px;
170
+ padding: 4px;
171
+ box-shadow:
172
+ 0 2px 6px rgba(60, 64, 67, 0.15),
173
+ 0 1px 3px rgba(60, 64, 67, 0.08);
174
+ }
175
+ .docs-style-menu {
176
+ min-width: 220px;
177
+ }
178
+ .docs-insert-menu {
179
+ min-width: 260px;
180
+ max-width: 280px;
181
+ max-height: 400px;
182
+ overflow-y: auto;
183
+ padding: 4px 0;
184
+ }
185
+ .docs-tb-dropdown-item {
186
+ display: flex;
187
+ align-items: center;
188
+ gap: 8px;
189
+ width: 100%;
190
+ padding: 6px 12px;
191
+ border-radius: 4px;
192
+ font-size: 13px;
193
+ color: #3c4043;
194
+ text-align: left;
195
+ cursor: pointer;
196
+ border: none;
197
+ background: transparent;
198
+ font-family: inherit;
199
+ transition: background 0.1s;
200
+ }
201
+ .docs-tb-dropdown-item:hover {
202
+ background: #f1f3f4;
203
+ }
204
+ .docs-tb-dropdown-item.active {
205
+ background: rgba(108, 63, 197, 0.08);
206
+ color: #6c3fc5;
207
+ }
208
+ .docs-style-preview {
209
+ display: block;
210
+ white-space: nowrap;
211
+ }
212
+ .docs-style-preview.docs-style-itTitle {
213
+ font-size: 20px;
214
+ font-weight: 700;
215
+ }
216
+ .docs-style-preview.docs-style-itSection {
217
+ font-size: 16px;
218
+ font-weight: 600;
219
+ }
220
+ .docs-style-preview.docs-style-itSub {
221
+ font-size: 14px;
222
+ font-weight: 600;
223
+ }
224
+ .docs-style-preview.docs-style-itSummary {
225
+ font-size: 14px;
226
+ color: #5f6368;
227
+ }
228
+ .docs-style-preview.docs-style-itQuote {
229
+ font-style: italic;
230
+ color: #5f6368;
231
+ }
232
+ .docs-insert-icon {
233
+ width: 20px;
234
+ text-align: center;
235
+ flex-shrink: 0;
236
+ color: #5f6368;
237
+ display: inline-flex;
238
+ align-items: center;
239
+ justify-content: center;
240
+ }
241
+
242
+ /* ── Insert dropdown categories & items ───────────────────── */
243
+ .docs-insert-category {
244
+ padding: 6px 12px 2px;
245
+ font-size: 10px;
246
+ font-weight: 600;
247
+ text-transform: uppercase;
248
+ letter-spacing: 0.06em;
249
+ color: #80868b;
250
+ }
251
+ .docs-insert-divider {
252
+ height: 1px;
253
+ background: #e8eaed;
254
+ margin: 4px 8px;
255
+ }
256
+ .docs-insert-item {
257
+ display: flex;
258
+ align-items: center;
259
+ gap: 8px;
260
+ text-align: left;
261
+ padding: 5px 12px;
262
+ }
263
+ .docs-insert-label {
264
+ flex: 1;
265
+ white-space: nowrap;
266
+ }
267
+ .docs-insert-kw {
268
+ font-size: 11px;
269
+ color: #9aa0a6;
270
+ font-family: "SF Mono", "Fira Code", "Cascadia Code", monospace;
271
+ }
272
+
273
+ /* ── Select‑style buttons (style / font / insert) ────────── */
274
+ .docs-tb-select {
275
+ display: inline-flex;
276
+ align-items: center;
277
+ gap: 4px;
278
+ height: 28px;
279
+ padding: 0 6px 0 10px;
280
+ border: 1px solid transparent;
281
+ border-radius: 4px;
282
+ background: transparent;
283
+ color: #444746;
284
+ font-size: 13px;
285
+ font-family: inherit;
286
+ cursor: pointer;
287
+ transition:
288
+ background 0.1s,
289
+ border-color 0.1s;
290
+ white-space: nowrap;
291
+ width: 150px;
292
+ min-width: 150px;
293
+ }
294
+ .docs-tb-select:hover {
295
+ background: rgba(0, 0, 0, 0.06);
296
+ border-color: #c4c7c5;
297
+ }
298
+ .docs-tb-select-label {
299
+ flex: 1;
300
+ text-align: left;
301
+ overflow: hidden;
302
+ text-overflow: ellipsis;
303
+ }
304
+ .docs-tb-font-select {
305
+ width: 150px;
306
+ min-width: 150px;
307
+ }
308
+ .docs-tb-insert-select {
309
+ min-width: unset;
310
+ gap: 3px;
311
+ padding: 0 6px;
312
+ }
313
+ .docs-font-menu {
314
+ min-width: 180px;
315
+ }
316
+
317
+ /* ── Font size indicator ──────────────────────────────────── */
318
+ .docs-tb-fontsize {
319
+ display: inline-flex;
320
+ align-items: center;
321
+ justify-content: center;
322
+ min-width: 30px;
323
+ height: 26px;
324
+ border: 1px solid #dadce0;
325
+ border-radius: 4px;
326
+ font-size: 12px;
327
+ color: #3c4043;
328
+ background: #fff;
329
+ text-align: center;
330
+ }
331
+
332
+ /* ── Color picker ─────────────────────────────────────────── */
333
+ .docs-tb-color-dropdown {
334
+ display: inline-flex;
335
+ }
336
+ .docs-tb-color-btn {
337
+ position: relative;
338
+ flex-direction: column;
339
+ gap: 1px;
340
+ min-width: 28px;
341
+ height: 30px;
342
+ padding: 3px 5px 2px;
343
+ }
344
+ .docs-tb-color-indicator {
345
+ display: block;
346
+ width: 16px;
347
+ height: 3px;
348
+ border-radius: 1px;
349
+ }
350
+ .docs-color-grid-menu {
351
+ padding: 10px;
352
+ min-width: 240px;
353
+ }
354
+ .docs-color-grid-label {
355
+ font-size: 12px;
356
+ color: #5f6368;
357
+ margin-bottom: 8px;
358
+ }
359
+ .docs-color-grid {
360
+ display: grid;
361
+ grid-template-columns: repeat(10, 1fr);
362
+ gap: 2px;
363
+ margin-bottom: 6px;
364
+ }
365
+ .docs-highlight-grid {
366
+ grid-template-columns: repeat(5, 1fr);
367
+ gap: 4px;
368
+ }
369
+ .docs-color-swatch {
370
+ width: 22px;
371
+ height: 22px;
372
+ border-radius: 3px;
373
+ border: 1px solid rgba(0, 0, 0, 0.12);
374
+ cursor: pointer;
375
+ transition: transform 0.1s;
376
+ padding: 0;
377
+ }
378
+ .docs-color-swatch:hover {
379
+ transform: scale(1.25);
380
+ z-index: 1;
381
+ border-color: #6c3fc5;
382
+ }
383
+
384
+ /* ─── Canvas (scrollable area) ────────────────────────────── */
385
+
386
+ .docs-canvas {
387
+ flex: 1;
388
+ overflow: auto;
389
+ padding: 20px 0 60px;
390
+ }
391
+ /* Auto-hide scrollbars — appear only when scrolling */
392
+ .docs-canvas {
393
+ scrollbar-width: thin;
394
+ scrollbar-color: transparent transparent;
395
+ }
396
+ .docs-canvas:hover {
397
+ scrollbar-color: rgba(0, 0, 0, 0.18) transparent;
398
+ }
399
+ .docs-canvas::-webkit-scrollbar {
400
+ width: 8px;
401
+ height: 8px;
402
+ }
403
+ .docs-canvas::-webkit-scrollbar-thumb {
404
+ background: transparent;
405
+ border-radius: 4px;
406
+ transition: background 0.3s;
407
+ }
408
+ .docs-canvas:hover::-webkit-scrollbar-thumb {
409
+ background: rgba(0, 0, 0, 0.18);
410
+ }
411
+ .docs-canvas::-webkit-scrollbar-track {
412
+ background: transparent;
413
+ }
414
+
415
+ /* ─── Zoom scaler wrapper ─────────────────────────────────── */
416
+
417
+ .docs-page-scaler {
418
+ position: relative;
419
+ margin: 0 auto;
420
+ }
421
+
422
+ .docs-page-flow {
423
+ position: relative;
424
+ width: 794px;
425
+ }
426
+
427
+ /* ─── Page (Word-like paper) ──────────────────────────────────────────────────
428
+ One continuous editable sheet, visually cut into real pages. Vertical margins
429
+ are real bands (header/footer text lives in them, exactly like print's @page
430
+ margin boxes); horizontal margins are padding on the content (.tiptap).
431
+ Geometry (size + margins) comes inline from the document's page: block. */
432
+
433
+ .docs-page {
434
+ background: #fff;
435
+ box-shadow:
436
+ 0 1px 3px rgba(60, 64, 67, 0.15),
437
+ 0 1px 2px rgba(60, 64, 67, 0.1);
438
+ border-radius: 2px;
439
+ position: relative;
440
+ overflow: visible;
441
+ }
442
+
443
+ .docs-page.docs-sheet {
444
+ margin: 0 auto;
445
+ overflow: visible;
446
+ }
447
+
448
+ /* Content column: horizontal page margins only — vertical space comes from the
449
+ header band above and the pagination spacers below. flow-root traps first/last
450
+ block margins inside the content box so page geometry stays exact (and matches
451
+ print, where the same stylesheet applies). */
452
+ .docs-page .tiptap {
453
+ padding: 0 var(--page-mx-r, 75.6px) 0 var(--page-mx-l, 75.6px);
454
+ display: flow-root;
455
+ }
456
+
457
+ /* Page 1's top margin + header text (static, outside the editable content). */
458
+ .docs-sheet-header {
459
+ position: relative;
460
+ user-select: none;
461
+ }
462
+
463
+ /* Header/footer band text — mirrors print's @page margin boxes:
464
+ 10px, muted, centered both ways. */
465
+ .docs-pb-header,
466
+ .docs-pb-footer {
467
+ position: absolute;
468
+ inset: 0;
469
+ display: flex;
470
+ align-items: center;
471
+ justify-content: center;
472
+ font: 10px -apple-system, BlinkMacSystemFont, sans-serif;
473
+ color: #9aa0a6;
474
+ pointer-events: none;
475
+ overflow: hidden;
476
+ }
477
+ .docs-pb-text {
478
+ white-space: nowrap;
479
+ overflow: hidden;
480
+ text-overflow: ellipsis;
481
+ max-width: 90%;
482
+ }
483
+
484
+ /* ─── Page-break spacer: filler + footer band + gap + next header band ────── */
485
+ .docs-page-spacer {
486
+ position: relative;
487
+ /* span the full sheet width, past the content's horizontal margins */
488
+ margin-left: calc(-1 * var(--pb-mx-l, 75.6px));
489
+ margin-right: calc(-1 * var(--pb-mx-r, 75.6px));
490
+ user-select: none;
491
+ }
492
+ .docs-pb-fill {
493
+ background: #fff;
494
+ }
495
+ .docs-pb-margin {
496
+ position: relative;
497
+ background: #fff;
498
+ }
499
+ /* The gap reads as "space between two sheets of paper": canvas color with a
500
+ soft shadow edge on each page card. */
501
+ .docs-pb-gap {
502
+ background: var(--bg-app, #eef0f3);
503
+ box-shadow:
504
+ inset 0 6px 5px -4px rgba(15, 23, 42, 0.14),
505
+ inset 0 -4px 4px -3px rgba(15, 23, 42, 0.1);
506
+ }
507
+
508
+ .docs-page-footer {
509
+ margin-top: 12px;
510
+ font-size: 12px;
511
+ color: var(--text-muted, #64748b);
512
+ text-align: center;
513
+ }
514
+ .zoom-indicator {
515
+ color: var(--text-primary, #1f2937);
516
+ font-weight: 500;
517
+ }
518
+
519
+ /* Fidelity guard banner — shown only when styling can't be saved to .it. */
520
+ .docs-fidelity-warning {
521
+ flex-shrink: 0;
522
+ padding: 8px 14px;
523
+ font-size: 12.5px;
524
+ line-height: 1.5;
525
+ color: #8a5800;
526
+ background: #fff6e0;
527
+ border-bottom: 1px solid #f0d48a;
528
+ }
529
+ .docs-fidelity-warning code {
530
+ background: #fff;
531
+ border: 1px solid #f0d48a;
532
+ border-radius: 3px;
533
+ padding: 0 4px;
534
+ }
535
+
536
+ /* ═══════════════════════════════════════════════════════════════
537
+ TipTap Content Styles — inside .docs-page
538
+ ═══════════════════════════════════════════════════════════════ */
539
+
540
+ .docs-page .tiptap {
541
+ position: relative;
542
+ z-index: 2;
543
+ outline: none;
544
+ min-height: 400px;
545
+ font-family: var(--it-font-body, "Inter", Arial, sans-serif);
546
+ font-size: var(--it-font-size, 15px);
547
+ line-height: var(--it-leading, 1.7);
548
+ color: var(--it-color-text, #202124);
549
+ }
550
+
551
+ /* Paragraph */
552
+ .docs-page .tiptap p {
553
+ margin: 4px 0;
554
+ min-height: 1em;
555
+ }
556
+
557
+ /* Placeholder */
558
+ .docs-page .tiptap .is-empty::before {
559
+ content: attr(data-placeholder);
560
+ color: #9aa0a6;
561
+ pointer-events: none;
562
+ float: left;
563
+ height: 0;
564
+ }
565
+
566
+ /* ─── Title ───────────────────────────────────────────────── */
567
+
568
+ .docs-page .tiptap .it-doc-title {
569
+ font-family: var(--it-font-heading, inherit);
570
+ font-size: 28px;
571
+ font-weight: 700;
572
+ line-height: 1.3;
573
+ letter-spacing: -0.5px;
574
+ margin-bottom: 4px;
575
+ color: var(--it-color-heading, #202124);
576
+ }
577
+
578
+ /* ─── Summary ─────────────────────────────────────────────── */
579
+
580
+ .docs-page .tiptap .it-doc-summary {
581
+ font-size: 16px;
582
+ color: var(--it-color-muted, #5f6368);
583
+ line-height: 1.5;
584
+ margin-bottom: 8px;
585
+ }
586
+
587
+ /* ─── Section (h2) ────────────────────────────────────────── */
588
+
589
+ .docs-page .tiptap .it-doc-section {
590
+ font-family: var(--it-font-heading, inherit);
591
+ font-size: 22px;
592
+ font-weight: 600;
593
+ line-height: 1.3;
594
+ margin-top: 24px;
595
+ margin-bottom: 4px;
596
+ padding-bottom: 4px;
597
+ border-bottom: 1px solid var(--it-color-border, #dadce0);
598
+ color: var(--it-color-heading, #202124);
599
+ }
600
+
601
+ /* ─── Sub (h3) ────────────────────────────────────────────── */
602
+
603
+ .docs-page .tiptap .it-doc-sub {
604
+ font-family: var(--it-font-heading, inherit);
605
+ font-size: 17px;
606
+ font-weight: 600;
607
+ line-height: 1.3;
608
+ margin-top: 16px;
609
+ margin-bottom: 2px;
610
+ color: var(--it-color-heading, #202124);
611
+ }
612
+
613
+ /* ─── Callouts ────────────────────────────────────────────── */
614
+
615
+ .docs-page .tiptap .it-doc-callout {
616
+ display: flex;
617
+ gap: 10px;
618
+ padding: 12px 16px;
619
+ border-radius: 8px;
620
+ font-size: 14px;
621
+ line-height: 1.6;
622
+ margin: 8px 0;
623
+ }
624
+ .docs-page .tiptap .it-doc-callout .it-doc-callout-icon {
625
+ flex-shrink: 0;
626
+ width: 18px;
627
+ height: 18px;
628
+ margin-top: 3px;
629
+ user-select: none;
630
+ background-size: 18px 18px;
631
+ background-repeat: no-repeat;
632
+ background-position: center;
633
+ }
634
+ /* Lucide SVG icons via data URI */
635
+ .docs-page .tiptap .it-doc-callout-icon-tip {
636
+ background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='18' height='18' viewBox='0 0 24 24' fill='none' stroke='%231a73e8' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M15 14c.2-1 .7-1.7 1.5-2.5 1-.9 1.5-2.2 1.5-3.5A6 6 0 0 0 6 8c0 1 .2 2.2 1.5 3.5.7.7 1.3 1.5 1.5 2.5'/%3E%3Cpath d='M9 18h6'/%3E%3Cpath d='M10 22h4'/%3E%3C/svg%3E");
637
+ }
638
+ .docs-page .tiptap .it-doc-callout-icon-info {
639
+ background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='18' height='18' viewBox='0 0 24 24' fill='none' stroke='%231a73e8' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Ccircle cx='12' cy='12' r='10'/%3E%3Cpath d='M12 16v-4'/%3E%3Cpath d='M12 8h.01'/%3E%3C/svg%3E");
640
+ }
641
+ .docs-page .tiptap .it-doc-callout-icon-warning {
642
+ background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='18' height='18' viewBox='0 0 24 24' fill='none' stroke='%23e8a300' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='m21.73 18-8-14a2 2 0 0 0-3.48 0l-8 14A2 2 0 0 0 4 21h16a2 2 0 0 0 1.73-3'/%3E%3Cpath d='M12 9v4'/%3E%3Cpath d='M12 17h.01'/%3E%3C/svg%3E");
643
+ }
644
+ .docs-page .tiptap .it-doc-callout-icon-danger {
645
+ background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='18' height='18' viewBox='0 0 24 24' fill='none' stroke='%23d93025' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M20 13c0 5-3.5 7.5-7.66 8.95a1 1 0 0 1-.67-.01C7.5 20.5 4 18 4 13V6a1 1 0 0 1 1-1c2 0 4.5-1.2 6.24-2.72a1.17 1.17 0 0 1 1.52 0C14.51 3.81 17 5 19 5a1 1 0 0 1 1 1z'/%3E%3Cpath d='M12 8v4'/%3E%3Cpath d='M12 16h.01'/%3E%3C/svg%3E");
646
+ }
647
+ .docs-page .tiptap .it-doc-callout-icon-success {
648
+ background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='18' height='18' viewBox='0 0 24 24' fill='none' stroke='%23188038' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Ccircle cx='12' cy='12' r='10'/%3E%3Cpath d='m9 12 2 2 4-4'/%3E%3C/svg%3E");
649
+ }
650
+ .docs-page .tiptap .it-doc-callout[data-variant="tip"] {
651
+ background: rgba(108, 63, 197, 0.08);
652
+ border: 1px solid rgba(108, 63, 197, 0.18);
653
+ }
654
+ .docs-page .tiptap .it-doc-callout[data-variant="info"] {
655
+ background: rgba(108, 63, 197, 0.08);
656
+ border: 1px solid rgba(108, 63, 197, 0.18);
657
+ }
658
+ .docs-page .tiptap .it-doc-callout[data-variant="warning"] {
659
+ background: #fef7e0;
660
+ border: 1px solid #fdd663;
661
+ }
662
+ .docs-page .tiptap .it-doc-callout[data-variant="danger"] {
663
+ background: #fce8e6;
664
+ border: 1px solid #f5c6c0;
665
+ }
666
+ .docs-page .tiptap .it-doc-callout[data-variant="success"] {
667
+ background: #e6f4ea;
668
+ border: 1px solid #ceead6;
669
+ }
670
+
671
+ /* ─── Quote ───────────────────────────────────────────────── */
672
+
673
+ .docs-page .tiptap .it-doc-quote {
674
+ border-left: 3px solid var(--it-color-muted, #5f6368);
675
+ padding-left: 16px;
676
+ margin: 12px 0;
677
+ font-style: italic;
678
+ color: var(--it-color-muted, #3c4043);
679
+ font-size: 15px;
680
+ line-height: 1.7;
681
+ }
682
+
683
+ /* ─── Code ────────────────────────────────────────────────── */
684
+
685
+ .docs-page .tiptap .it-doc-code {
686
+ display: block;
687
+ background: var(--it-color-code-bg, #f8f9fa);
688
+ border: 1px solid var(--it-color-border, #dadce0);
689
+ border-radius: 8px;
690
+ padding: 12px 16px;
691
+ margin: 8px 0;
692
+ white-space: pre-wrap;
693
+ word-break: break-all;
694
+ }
695
+ .docs-page .tiptap .it-doc-code code {
696
+ font-family: var(--it-font-mono, "JetBrains Mono", "Fira Code", monospace);
697
+ font-size: 13px;
698
+ line-height: 1.6;
699
+ color: #37474f;
700
+ }
701
+
702
+ /* ─── Divider ─────────────────────────────────────────────── */
703
+
704
+ .docs-page .tiptap .it-doc-divider {
705
+ border: none;
706
+ border-top: 1px solid var(--it-color-border, #dadce0);
707
+ margin: 16px 0;
708
+ }
709
+
710
+ /* ─── Metadata (page:/meta:/font:/header:/footer:) ────────────
711
+ Document settings — kept in the model for round-trip, but hidden in the visual
712
+ editor (edit them in Source mode). Zero height so they never affect layout. */
713
+ .docs-page .tiptap .it-doc-meta {
714
+ display: block;
715
+ height: 0;
716
+ overflow: hidden;
717
+ margin: 0;
718
+ padding: 0;
719
+ border: 0;
720
+ pointer-events: none;
721
+ user-select: none;
722
+ }
723
+
724
+ /* ─── Table ───────────────────────────────────────────────── */
725
+ .docs-page .tiptap .it-doc-table {
726
+ width: 100%;
727
+ border-collapse: collapse;
728
+ margin: 12px 0;
729
+ font-size: 0.92em;
730
+ }
731
+ .docs-page .tiptap .it-doc-table th {
732
+ text-align: left;
733
+ font-weight: 600;
734
+ font-size: 0.78rem;
735
+ text-transform: uppercase;
736
+ letter-spacing: 0.04em;
737
+ padding: 6px 10px;
738
+ border-bottom: 2px solid var(--it-color-text, #333);
739
+ }
740
+ .docs-page .tiptap .it-doc-table td {
741
+ padding: 6px 10px;
742
+ border-bottom: 1px solid var(--it-color-border, #ddd);
743
+ vertical-align: top;
744
+ }
745
+
746
+ /* ─── Trust blocks (sign / seal / approve / freeze / amendment) ─── */
747
+ .docs-page .tiptap .it-doc-trust {
748
+ display: flex;
749
+ flex-wrap: wrap;
750
+ gap: 8px;
751
+ align-items: center;
752
+ margin: 10px 0;
753
+ padding: 9px 14px;
754
+ border: 1px solid #daa520;
755
+ border-radius: 8px;
756
+ background: #fffdf5;
757
+ font-size: 0.9rem;
758
+ user-select: none;
759
+ }
760
+ .docs-page .tiptap .it-doc-trust--seal {
761
+ border: 2px solid #c62828;
762
+ background: #fdf5f5;
763
+ font-weight: 600;
764
+ }
765
+ .docs-page .tiptap .it-doc-trust--approve {
766
+ border-color: #4caf50;
767
+ background: #f6fbf6;
768
+ }
769
+ .docs-page .tiptap .it-doc-trust--freeze {
770
+ border-color: #5b8def;
771
+ background: #f5f8ff;
772
+ }
773
+ .docs-page .tiptap .it-doc-trust--amendment,
774
+ .docs-page .tiptap .it-doc-trust--amend {
775
+ border-color: #b0b0b0;
776
+ background: #fafafa;
777
+ }
778
+ .docs-page .tiptap .it-doc-trust__icon {
779
+ font-size: 1rem;
780
+ line-height: 1;
781
+ }
782
+ .docs-page .tiptap .it-doc-trust__label {
783
+ font-weight: 600;
784
+ letter-spacing: 0.02em;
785
+ }
786
+ .docs-page .tiptap .it-doc-trust__name {
787
+ font-weight: 600;
788
+ color: #111;
789
+ }
790
+ .docs-page .tiptap .it-doc-trust__role {
791
+ color: #555;
792
+ }
793
+ .docs-page .tiptap .it-doc-trust__date {
794
+ color: #777;
795
+ font-size: 0.8rem;
796
+ margin-left: auto;
797
+ }
798
+ .docs-page .tiptap .it-doc-trust__hash {
799
+ font-family: ui-monospace, monospace;
800
+ font-size: 0.78rem;
801
+ color: #444;
802
+ }
803
+ .docs-page .tiptap .it-doc-trust__meta {
804
+ font-size: 0.78rem;
805
+ color: #777;
806
+ }
807
+
808
+ /* ─── Template variables ({{path}}) ───────────────────────── */
809
+ .docs-page .tiptap .it-doc-var {
810
+ background: #eef2ff;
811
+ color: #4338ca;
812
+ border: 1px solid #c7d2fe;
813
+ border-radius: 4px;
814
+ padding: 0 3px;
815
+ font-family: ui-monospace, "SF Mono", Menlo, monospace;
816
+ font-size: 0.86em;
817
+ }
818
+ .docs-page .tiptap .it-doc-table .it-doc-var-cell {
819
+ background: #eef2ff;
820
+ color: #4338ca;
821
+ font-family: ui-monospace, "SF Mono", Menlo, monospace;
822
+ font-size: 0.85em;
823
+ }
824
+ /* Variable chips are an authoring aid — print plain (merged docs have real data). */
825
+ @media print {
826
+ .it-doc-var,
827
+ .it-doc-table .it-doc-var-cell {
828
+ background: none !important;
829
+ border: none !important;
830
+ color: inherit !important;
831
+ font-family: inherit !important;
832
+ font-size: inherit !important;
833
+ }
834
+ }
835
+
836
+ /* ─── Document style rule chip (style: blocks) ────────────── */
837
+ .docs-page .tiptap .it-doc-stylerule {
838
+ display: flex;
839
+ align-items: baseline;
840
+ gap: 8px;
841
+ margin: 4px 0;
842
+ padding: 4px 10px;
843
+ border: 1px dashed #c5cae0;
844
+ border-radius: 6px;
845
+ background: #f7f8fd;
846
+ font-size: 12px;
847
+ color: #4a5170;
848
+ user-select: none;
849
+ }
850
+ .docs-page .tiptap .it-doc-stylerule__icon {
851
+ font-size: 11px;
852
+ line-height: 1;
853
+ }
854
+ .docs-page .tiptap .it-doc-stylerule__target {
855
+ font-weight: 600;
856
+ font-family: ui-monospace, monospace;
857
+ }
858
+ .docs-page .tiptap .it-doc-stylerule__decl {
859
+ font-family: ui-monospace, monospace;
860
+ color: #6b7280;
861
+ overflow: hidden;
862
+ text-overflow: ellipsis;
863
+ white-space: nowrap;
864
+ }
865
+ /* Style-rule chips are editing aids — never print them. */
866
+ @media print {
867
+ .it-doc-stylerule {
868
+ display: none !important;
869
+ }
870
+ }
871
+
872
+ /* ─── Metric / total row ──────────────────────────────────── */
873
+ .docs-page .tiptap .it-doc-metric {
874
+ display: flex;
875
+ align-items: baseline;
876
+ justify-content: space-between;
877
+ gap: 16px;
878
+ padding: 5px 0;
879
+ border-bottom: 1px solid var(--it-color-border, #eee);
880
+ }
881
+ .docs-page .tiptap .it-doc-metric__label {
882
+ color: var(--it-color-muted, #555);
883
+ }
884
+ .docs-page .tiptap .it-doc-metric__value {
885
+ font-variant-numeric: tabular-nums;
886
+ font-weight: 600;
887
+ color: var(--it-color-text, #111);
888
+ white-space: nowrap;
889
+ }
890
+ /* A "Total Due" / "Balance" metric reads as the grand total. */
891
+ .docs-page .tiptap .it-doc-metric--total {
892
+ border-bottom: none;
893
+ border-top: 2px solid var(--it-color-text, #333);
894
+ margin-top: 2px;
895
+ padding-top: 8px;
896
+ font-size: 1.05em;
897
+ }
898
+ .docs-page .tiptap .it-doc-metric--total .it-doc-metric__label {
899
+ color: var(--it-color-text, #111);
900
+ font-weight: 600;
901
+ }
902
+
903
+ /* ─── Page Break ──────────────────────────────────────────── */
904
+
905
+ .docs-page .tiptap .it-doc-break {
906
+ text-align: center;
907
+ color: #9aa0a6;
908
+ font-size: 11px;
909
+ letter-spacing: 2px;
910
+ text-transform: uppercase;
911
+ padding: 8px 0;
912
+ border-top: 1px dashed #dadce0;
913
+ border-bottom: 1px dashed #dadce0;
914
+ margin: 16px 0;
915
+ user-select: none;
916
+ }
917
+
918
+ /* ─── Generic Block ───────────────────────────────────────── */
919
+
920
+ .docs-page .tiptap .it-doc-generic {
921
+ display: flex;
922
+ gap: 8px;
923
+ align-items: flex-start;
924
+ padding: 8px 12px;
925
+ margin: 6px 0;
926
+ border: 1px solid #dadce0;
927
+ border-radius: 8px;
928
+ font-size: 14px;
929
+ line-height: 1.6;
930
+ background: #fafafa;
931
+ }
932
+ .docs-page .tiptap .it-doc-generic-label {
933
+ font-size: 11px;
934
+ font-weight: 600;
935
+ font-family: "JetBrains Mono", monospace;
936
+ color: #6c3fc5;
937
+ background: rgba(108, 63, 197, 0.08);
938
+ border-radius: 4px;
939
+ padding: 2px 8px;
940
+ white-space: nowrap;
941
+ user-select: none;
942
+ flex-shrink: 0;
943
+ line-height: 1.6;
944
+ }
945
+
946
+ /* ─ Link block URL indicator ───────────────────────────────────── */
947
+ .docs-page .tiptap .it-doc-link-url {
948
+ font-size: 11px;
949
+ color: #9aa0a6;
950
+ font-family: "JetBrains Mono", monospace;
951
+ white-space: nowrap;
952
+ overflow: hidden;
953
+ text-overflow: ellipsis;
954
+ max-width: 280px;
955
+ flex-shrink: 1;
956
+ user-select: none;
957
+ margin-left: auto;
958
+ padding-left: 8px;
959
+ }
960
+ .docs-page .tiptap .it-doc-link-url::before {
961
+ content: "→ ";
962
+ }
963
+
964
+ /* ─── Comment ─────────────────────────────────────────────── */
965
+
966
+ .docs-page .tiptap .it-doc-comment {
967
+ color: #9aa0a6;
968
+ font-size: 13px;
969
+ font-style: italic;
970
+ border-left: 2px solid #dadce0;
971
+ padding-left: 12px;
972
+ margin: 4px 0;
973
+ }
974
+
975
+ /* ─── Inline marks (from StarterKit) ──────────────────────── */
976
+
977
+ .docs-page .tiptap strong {
978
+ font-weight: 700;
979
+ }
980
+ .docs-page .tiptap em {
981
+ font-style: italic;
982
+ }
983
+ .docs-page .tiptap s {
984
+ text-decoration: line-through;
985
+ }
986
+ .docs-page .tiptap code {
987
+ background: #f1f3f4;
988
+ padding: 2px 6px;
989
+ border-radius: 4px;
990
+ font-family: "JetBrains Mono", monospace;
991
+ font-size: 0.9em;
992
+ }
993
+
994
+ /* ─── Lists (from StarterKit) ─────────────────────────────── */
995
+
996
+ .docs-page .tiptap ul,
997
+ .docs-page .tiptap ol {
998
+ padding-left: 24px;
999
+ margin: 4px 0;
1000
+ }
1001
+ .docs-page .tiptap li {
1002
+ margin: 2px 0;
1003
+ }
1004
+
1005
+ /* ═══════════════════════════════════════════════════════════════
1006
+ Plain Writing Overrides (no fancy keyword boxes)
1007
+ ═══════════════════════════════════════════════════════════════ */
1008
+
1009
+ .docs-page .tiptap .it-doc-callout {
1010
+ display: block;
1011
+ margin: 8px 0;
1012
+ padding: 0;
1013
+ border: none;
1014
+ border-radius: 0;
1015
+ background: transparent;
1016
+ }
1017
+
1018
+ .docs-page .tiptap .it-doc-callout .it-doc-callout-icon {
1019
+ display: none;
1020
+ }
1021
+
1022
+ .docs-page .tiptap .it-doc-callout .it-doc-callout-text {
1023
+ display: inline;
1024
+ }
1025
+
1026
+ .docs-page .tiptap .it-doc-generic,
1027
+ .docs-page .tiptap .it-doc-generic[data-keyword] {
1028
+ display: block;
1029
+ margin: 8px 0;
1030
+ padding: 0;
1031
+ border: none;
1032
+ border-radius: 0;
1033
+ background: transparent;
1034
+ text-align: inherit;
1035
+ justify-content: initial;
1036
+ }
1037
+
1038
+ .docs-page .tiptap .it-doc-generic-label,
1039
+ .docs-page .tiptap .it-doc-link-url {
1040
+ display: none;
1041
+ }
1042
+
1043
+ .docs-page .tiptap .it-doc-inline-link,
1044
+ .docs-page .tiptap a {
1045
+ color: #2563eb;
1046
+ text-decoration: underline;
1047
+ text-underline-offset: 2px;
1048
+ }
1049
+
1050
+ .docs-page .tiptap .it-doc-inline-link:hover,
1051
+ .docs-page .tiptap a:hover {
1052
+ color: #1d4ed8;
1053
+ }
1054
+
1055
+ /* ═══════════════════════════════════════════════════════════════
1056
+ Ribbon — ONE Word-like toolbar with labeled groups
1057
+ (Edit | File | Text | Paragraph | Insert | Trust)
1058
+ ═══════════════════════════════════════════════════════════════ */
1059
+
1060
+ .docs-ribbon {
1061
+ align-items: stretch;
1062
+ gap: 0;
1063
+ padding: 6px 10px 3px;
1064
+ }
1065
+ .ribbon-group {
1066
+ display: flex;
1067
+ flex-direction: column;
1068
+ align-items: center;
1069
+ justify-content: space-between;
1070
+ padding: 0 2px;
1071
+ }
1072
+ .ribbon-group-row {
1073
+ display: flex;
1074
+ align-items: center;
1075
+ gap: 2px;
1076
+ }
1077
+ .ribbon-group-label {
1078
+ font-size: 9px;
1079
+ font-weight: 600;
1080
+ letter-spacing: 0.07em;
1081
+ text-transform: uppercase;
1082
+ color: #9aa0a6;
1083
+ margin-top: 2px;
1084
+ user-select: none;
1085
+ white-space: nowrap;
1086
+ }
1087
+ .ribbon-sep {
1088
+ width: 1px;
1089
+ align-self: stretch;
1090
+ background: #d8d2c4;
1091
+ margin: 2px 7px;
1092
+ flex-shrink: 0;
1093
+ }
1094
+ .ribbon-btn-text {
1095
+ font-size: 12px;
1096
+ font-weight: 500;
1097
+ }
1098
+ .ribbon-theme-select {
1099
+ height: 26px;
1100
+ max-width: 110px;
1101
+ margin-inline-start: 4px;
1102
+ padding: 0 4px;
1103
+ border: 1px solid #dadce0;
1104
+ border-radius: 4px;
1105
+ background: #fff;
1106
+ color: #3c4043;
1107
+ font-size: 12px;
1108
+ font-family: inherit;
1109
+ cursor: pointer;
1110
+ }
1111
+ .ribbon-theme-select:focus {
1112
+ outline: none;
1113
+ border-color: var(--accent, #2563eb);
1114
+ }
1115
+ /* The editable-formatting cluster (Text / Paragraph / Insert groups). */
1116
+ .ribbon-editing,
1117
+ .ribbon-locked {
1118
+ display: flex;
1119
+ align-items: stretch;
1120
+ }
1121
+ /* Sealed documents: formatting is read-only. */
1122
+ .ribbon-locked {
1123
+ opacity: 0.45;
1124
+ pointer-events: none;
1125
+ }
1126
+ .docs-tb-paragraph-select {
1127
+ width: 110px;
1128
+ min-width: 110px;
1129
+ }
1130
+ .docs-spacing-menu {
1131
+ min-width: 230px;
1132
+ }
1133
+
1134
+ /* ═══════════════════════════════════════════════════════════════
1135
+ Two-sided rows — core `end:` property (.it-split parity)
1136
+ Content at line start, end-value at line end; flex start/end so
1137
+ RTL documents mirror automatically, exactly like core's print CSS.
1138
+ ═══════════════════════════════════════════════════════════════ */
1139
+
1140
+ .docs-page .tiptap [data-it-end] {
1141
+ display: flex;
1142
+ justify-content: space-between;
1143
+ align-items: baseline;
1144
+ gap: 12px;
1145
+ }
1146
+ .docs-page .tiptap [data-it-end] > .it-split-main {
1147
+ min-width: 0;
1148
+ }
1149
+ .docs-page .tiptap [data-it-end]::after {
1150
+ content: attr(data-it-end);
1151
+ flex-shrink: 0;
1152
+ white-space: pre-wrap;
1153
+ }
1154
+
1155
+ /* ═══════════════════════════════════════════════════════════════
1156
+ Signature line — sign: blocks render like a signed paper document
1157
+ (script autograph over a rule, printed name / role / date below)
1158
+ ═══════════════════════════════════════════════════════════════ */
1159
+
1160
+ .docs-page .tiptap .it-doc-sign {
1161
+ display: inline-block;
1162
+ min-width: 300px;
1163
+ max-width: 420px;
1164
+ margin: 22px 0 8px;
1165
+ margin-inline-end: 28px;
1166
+ padding: 0;
1167
+ border: none;
1168
+ background: none;
1169
+ font-weight: 400;
1170
+ user-select: none;
1171
+ }
1172
+ .docs-page .tiptap .it-doc-sign__script {
1173
+ font-family: "Snell Roundhand", "Savoye LET", "Segoe Script",
1174
+ "Brush Script MT", cursive;
1175
+ font-size: 23px;
1176
+ line-height: 1.15;
1177
+ color: #1a2a52;
1178
+ padding: 0 6px 2px;
1179
+ min-height: 27px;
1180
+ }
1181
+ .docs-page .tiptap .it-doc-sign__rule {
1182
+ border-bottom: 1.5px solid #202124;
1183
+ }
1184
+ .docs-page .tiptap .it-doc-sign__row {
1185
+ display: flex;
1186
+ align-items: baseline;
1187
+ gap: 8px;
1188
+ margin-top: 5px;
1189
+ font-size: 0.85rem;
1190
+ }
1191
+ .docs-page .tiptap .it-doc-sign__name {
1192
+ font-weight: 600;
1193
+ color: #111;
1194
+ }
1195
+ .docs-page .tiptap .it-doc-sign__role {
1196
+ color: #555;
1197
+ }
1198
+ .docs-page .tiptap .it-doc-sign__role::before {
1199
+ content: "· ";
1200
+ color: #9aa0a6;
1201
+ }
1202
+ .docs-page .tiptap .it-doc-sign__date {
1203
+ margin-inline-start: auto;
1204
+ color: #777;
1205
+ font-size: 0.8rem;
1206
+ }
1207
+
1208
+ /* ═══════════════════════════════════════════════════════════════
1209
+ Document status banner (trust) + document properties strip
1210
+ ═══════════════════════════════════════════════════════════════ */
1211
+
1212
+ .docs-trust-banner {
1213
+ display: flex;
1214
+ align-items: center;
1215
+ gap: 8px;
1216
+ flex-shrink: 0;
1217
+ padding: 7px 14px;
1218
+ font-size: 12.5px;
1219
+ border-bottom: 1px solid transparent;
1220
+ }
1221
+ .docs-trust-banner__icon {
1222
+ line-height: 1;
1223
+ }
1224
+ .docs-trust-banner__title {
1225
+ font-weight: 700;
1226
+ font-size: 11px;
1227
+ letter-spacing: 0.05em;
1228
+ text-transform: uppercase;
1229
+ }
1230
+ .docs-trust-banner__text {
1231
+ opacity: 0.85;
1232
+ overflow: hidden;
1233
+ text-overflow: ellipsis;
1234
+ white-space: nowrap;
1235
+ }
1236
+ .docs-trust-banner__verify {
1237
+ margin-inline-start: auto;
1238
+ flex-shrink: 0;
1239
+ padding: 2px 9px;
1240
+ border-radius: 10px;
1241
+ font-size: 11.5px;
1242
+ font-weight: 600;
1243
+ }
1244
+ .docs-trust-banner--sealed {
1245
+ background: #fff8e7;
1246
+ border-color: #eedaa6;
1247
+ color: #7a5300;
1248
+ }
1249
+ .docs-trust-banner--signed {
1250
+ background: #f3f6ff;
1251
+ border-color: #d5def4;
1252
+ color: #2c3e6b;
1253
+ }
1254
+ .docs-trust-banner--approved {
1255
+ background: #f1f9f2;
1256
+ border-color: #cfe8d4;
1257
+ color: #1d6334;
1258
+ }
1259
+ .docs-trust-banner__verify--ok {
1260
+ background: rgba(22, 163, 74, 0.12);
1261
+ color: #15803d;
1262
+ }
1263
+ .docs-trust-banner__verify--bad {
1264
+ background: rgba(220, 38, 38, 0.12);
1265
+ color: #dc2626;
1266
+ }
1267
+
1268
+ .docs-props-bar {
1269
+ flex-shrink: 0;
1270
+ background: #fbfaf7;
1271
+ border-bottom: 1px solid #e9e4d8;
1272
+ font-size: 12px;
1273
+ }
1274
+ .docs-props-toggle {
1275
+ display: flex;
1276
+ align-items: center;
1277
+ gap: 6px;
1278
+ width: 100%;
1279
+ padding: 4px 14px;
1280
+ border: none;
1281
+ background: none;
1282
+ color: #5f6368;
1283
+ font-family: inherit;
1284
+ font-size: 11.5px;
1285
+ font-weight: 600;
1286
+ cursor: pointer;
1287
+ text-align: start;
1288
+ }
1289
+ .docs-props-toggle:hover {
1290
+ background: rgba(0, 0, 0, 0.03);
1291
+ }
1292
+ .docs-props-caret {
1293
+ font-size: 9px;
1294
+ width: 10px;
1295
+ }
1296
+ .docs-props-summary {
1297
+ margin-inline-start: 8px;
1298
+ font-weight: 400;
1299
+ color: #9aa0a6;
1300
+ overflow: hidden;
1301
+ text-overflow: ellipsis;
1302
+ white-space: nowrap;
1303
+ }
1304
+ .docs-props-chips {
1305
+ display: flex;
1306
+ flex-wrap: wrap;
1307
+ gap: 6px;
1308
+ padding: 2px 14px 9px;
1309
+ }
1310
+ .docs-props-chip {
1311
+ border: 1px solid #e3decf;
1312
+ background: #fff;
1313
+ border-radius: 6px;
1314
+ padding: 2px 8px;
1315
+ color: #4a5160;
1316
+ }
1317
+ .docs-props-chip b {
1318
+ font-weight: 600;
1319
+ font-size: 11px;
1320
+ color: #8a7f63;
1321
+ margin-inline-end: 4px;
1322
+ }
1323
+
1324
+ /* ── Bidi isolation (WhatsApp-style) ─────────────────────────────────────
1325
+ Mixed Arabic/English/number values resolve their own direction from their
1326
+ first strong character, so `10,200 QAR` and `2026-06-20` keep their internal
1327
+ order inside RTL lines — parity with core's dir="auto" rendered output. */
1328
+ .docs-page .tiptap .it-doc-table td,
1329
+ .docs-page .tiptap .it-doc-table th {
1330
+ unicode-bidi: plaintext;
1331
+ }
1332
+ .docs-page .tiptap .it-doc-task-meta span,
1333
+ .docs-page .tiptap .it-doc-metric__value,
1334
+ .docs-page .tiptap [data-it-end]::after,
1335
+ .docs-page .tiptap .it-split-end {
1336
+ unicode-bidi: plaintext;
1337
+ }
1338
+
1339
+ /* ─── Look refresh (folded from the app's 2026 UI refresh overrides) ──────── */
1340
+
1341
+ .docs-toolbar {
1342
+ background: linear-gradient(90deg, rgba(15, 118, 110, 0.07), rgba(183, 106, 31, 0.08));
1343
+ border-bottom: 1px solid rgba(216, 203, 181, 0.95);
1344
+ }
1345
+
1346
+ .docs-toolbar button.active,
1347
+ .docs-tb-btn.active {
1348
+ background: rgba(15, 118, 110, 0.16);
1349
+ color: #0f766e;
1350
+ }
1351
+
1352
+ /* ─── Mobile ──────────────────────────────────────────────── */
1353
+
1354
+ @media (max-width: 768px) {
1355
+ .docs-page {
1356
+ width: 100% !important;
1357
+ min-height: auto;
1358
+ padding: 24px;
1359
+ box-shadow: none;
1360
+ }
1361
+ .docs-canvas {
1362
+ padding: 0;
1363
+ }
1364
+ }