@zerohive/hive-viewer 1.0.1 → 2.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/styles.css CHANGED
@@ -1,17 +1,32 @@
1
1
  /* src/styles/hiveviewer.css */
2
2
 
3
3
  /* --- 1. Variables & Theme --- */
4
- .hv-root {
5
- --hv-bg: #f3f4f6; /* Canvas background (light gray) */
6
- --hv-paper-bg: #ffffff; /* Document page background */
7
- --hv-fg: #1f2937; /* Primary text color */
8
- --hv-muted: #6b7280; /* Secondary text color */
9
- --hv-border: #e5e7eb; /* Border color */
10
- --hv-primary: #4f46e5; /* Primary interactive color (Indigo) */
11
- --hv-primary-fg: #ffffff; /* Text on primary color */
12
- --hv-shadow: 0 4px 6px -1px rgba(0, 0, 0, 0.1), 0 2px 4px -1px rgba(0, 0, 0, 0.06);
13
- --hv-shadow-lg: 0 20px 25px -5px rgba(0, 0, 0, 0.1), 0 10px 10px -5px rgba(0, 0, 0, 0.04);
14
- --hv-radius: 8px;
4
+ .hv-root {
5
+ --hv-bg: #f3f4f6; /* Canvas background (light gray) */
6
+ --hv-paper-bg: #ffffff; /* Document page background */
7
+ --hv-fg: #1f2937; /* Primary text color */
8
+ --hv-muted: #6b7280; /* Secondary text color */
9
+ --hv-border: #e5e7eb; /* Border color */
10
+ --hv-primary: #4f46e5; /* Primary interactive color (Indigo) */
11
+ --hv-primary-fg: #ffffff; /* Text on primary color */
12
+ --hv-page-bg: #ffffff;
13
+ --hv-panel-subtle-bg: #eef2ff;
14
+ --hv-input-bg: #f8fafc;
15
+ --hv-input-fg: #1f2937;
16
+ --hv-input-border: #d1d5db;
17
+ --hv-thumb-preview-bg: #ffffff;
18
+ --hv-thumb-skeleton-bg: #e5e7eb;
19
+ --hv-thumb-skeleton-fg: #cbd5e1;
20
+ --hv-modal-bg: #ffffff;
21
+ --hv-modal-subtle-bg: #f8fafc;
22
+ --hv-sheet-scroll-bg: #f8fafc;
23
+ --hv-sheet-header-bg: #f1f5f9;
24
+ --hv-sheet-header-fg: #475569;
25
+ --hv-sheet-cell-bg: #ffffff;
26
+ --hv-sheet-cell-fg: #0f172a;
27
+ --hv-shadow: 0 4px 6px -1px rgba(0, 0, 0, 0.1), 0 2px 4px -1px rgba(0, 0, 0, 0.06);
28
+ --hv-shadow-lg: 0 20px 25px -5px rgba(0, 0, 0, 0.1), 0 10px 10px -5px rgba(0, 0, 0, 0.04);
29
+ --hv-radius: 8px;
15
30
 
16
31
  font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Helvetica, Arial, sans-serif;
17
32
  background: var(--hv-bg);
@@ -25,14 +40,29 @@
25
40
  }
26
41
 
27
42
  /* Dark Mode Override (applied via data-hv-theme="dark") */
28
- .hv-root[data-hv-theme="dark"] {
29
- --hv-bg: #111827;
30
- --hv-paper-bg: #1f2937; /* Darker paper for eye comfort, or keep white for fidelity */
31
- --hv-fg: #f9fafb;
32
- --hv-muted: #9ca3af;
33
- --hv-border: #374151;
34
- --hv-shadow: 0 4px 6px -1px rgba(0, 0, 0, 0.5);
35
- }
43
+ .hv-root[data-hv-theme="dark"] {
44
+ --hv-bg: #0f172a;
45
+ --hv-paper-bg: #111827;
46
+ --hv-fg: #f8fafc;
47
+ --hv-muted: #94a3b8;
48
+ --hv-border: #334155;
49
+ --hv-panel-subtle-bg: rgba(79, 70, 229, 0.14);
50
+ --hv-input-bg: #0f172a;
51
+ --hv-input-fg: #f8fafc;
52
+ --hv-input-border: #475569;
53
+ --hv-thumb-preview-bg: #111827;
54
+ --hv-thumb-skeleton-bg: #1e293b;
55
+ --hv-thumb-skeleton-fg: #475569;
56
+ --hv-modal-bg: #111827;
57
+ --hv-modal-subtle-bg: #0f172a;
58
+ --hv-sheet-scroll-bg: #0f172a;
59
+ --hv-sheet-header-bg: #1e293b;
60
+ --hv-sheet-header-fg: #cbd5e1;
61
+ --hv-sheet-cell-bg: #111827;
62
+ --hv-sheet-cell-fg: #f8fafc;
63
+ --hv-shadow: 0 4px 6px -1px rgba(0, 0, 0, 0.5);
64
+ --hv-shadow-lg: 0 20px 25px -5px rgba(0, 0, 0, 0.45), 0 10px 10px -5px rgba(0, 0, 0, 0.35);
65
+ }
36
66
 
37
67
  /* --- 2. Toolbar --- */
38
68
  .hv-toolbar {
@@ -69,10 +99,16 @@
69
99
  height: 36px;
70
100
  }
71
101
 
72
- .hv-btn:hover:not(:disabled) {
73
- background: var(--hv-bg);
74
- color: var(--hv-fg);
75
- }
102
+ .hv-btn:hover:not(:disabled) {
103
+ background: var(--hv-bg);
104
+ color: var(--hv-fg);
105
+ }
106
+
107
+ .hv-btn-active {
108
+ background: var(--hv-panel-subtle-bg);
109
+ color: var(--hv-primary);
110
+ border-color: rgba(79, 70, 229, 0.16);
111
+ }
76
112
 
77
113
  .hv-btn:disabled {
78
114
  opacity: 0.4;
@@ -85,18 +121,61 @@
85
121
  font-weight: 500;
86
122
  padding: 0 16px;
87
123
  }
88
- .hv-btn-primary:hover:not(:disabled) {
89
- background: #4338ca; /* Darker indigo */
90
- color: #fff;
91
- }
124
+ .hv-btn-primary:hover:not(:disabled) {
125
+ background: #4338ca; /* Darker indigo */
126
+ color: #fff;
127
+ }
128
+
129
+ .hv-btn-primary.hv-btn-active {
130
+ box-shadow: 0 0 0 2px rgba(129, 140, 248, 0.35);
131
+ }
92
132
 
93
133
  /* --- 3. Main Shell (Sidebar + Content) --- */
94
- .hv-shell {
95
- flex: 1;
96
- display: flex;
97
- overflow: hidden;
98
- position: relative;
99
- }
134
+ .hv-shell {
135
+ flex: 1;
136
+ display: flex;
137
+ overflow: hidden;
138
+ position: relative;
139
+ }
140
+
141
+ .hv-slot {
142
+ flex: 0 0 auto;
143
+ padding: 12px 16px;
144
+ background: var(--hv-paper-bg);
145
+ color: var(--hv-fg);
146
+ }
147
+
148
+ .hv-slot-header {
149
+ border-bottom: 1px solid var(--hv-border);
150
+ }
151
+
152
+ .hv-slot-footer {
153
+ border-top: 1px solid var(--hv-border);
154
+ }
155
+
156
+ .hv-export-slot-host {
157
+ position: fixed;
158
+ top: 0;
159
+ left: -200vw;
160
+ width: 960px;
161
+ opacity: 0;
162
+ pointer-events: none;
163
+ z-index: -1;
164
+ }
165
+
166
+ .hv-export-slot {
167
+ width: 100%;
168
+ box-sizing: border-box;
169
+ background: transparent;
170
+ }
171
+
172
+ .hv-export-slot-header {
173
+ margin-bottom: 12px;
174
+ }
175
+
176
+ .hv-export-slot-footer {
177
+ margin-top: 12px;
178
+ }
100
179
 
101
180
  /* --- 4. Sidebar / Thumbnails --- */
102
181
  .hv-sidebar {
@@ -115,50 +194,57 @@
115
194
  overflow: hidden;
116
195
  }
117
196
 
118
- .hv-thumb-list {
119
- flex: 1;
120
- overflow-y: auto;
121
- padding: 16px;
122
- display: flex;
123
- flex-direction: column;
124
- gap: 16px;
125
- }
126
-
127
- .hv-thumb-item {
128
- cursor: pointer;
129
- display: flex;
130
- flex-direction: column;
131
- align-items: center;
132
- gap: 8px;
133
- opacity: 0.7;
134
- transition: opacity 0.2s;
135
- }
197
+ .hv-thumb-list {
198
+ flex: 1;
199
+ overflow-y: auto;
200
+ padding: 16px;
201
+ position: relative;
202
+ }
203
+
204
+ .hv-thumb-viewport {
205
+ position: relative;
206
+ width: 100%;
207
+ }
208
+
209
+ .hv-thumb-item {
210
+ position: absolute;
211
+ left: 0;
212
+ right: 0;
213
+ cursor: pointer;
214
+ display: flex;
215
+ flex-direction: column;
216
+ align-items: center;
217
+ gap: 8px;
218
+ opacity: 0.7;
219
+ transition: opacity 0.2s;
220
+ padding-bottom: 16px;
221
+ }
136
222
 
137
223
  .hv-thumb-item:hover, .hv-thumb-item.active {
138
224
  opacity: 1;
139
225
  }
140
226
 
141
- .hv-thumb-preview {
142
- width: 100px;
143
- height: 140px; /* Approx A4 aspect */
144
- background: white;
145
- border: 1px solid var(--hv-border);
146
- box-shadow: var(--hv-shadow);
147
- border-radius: 4px;
148
- overflow: hidden;
149
- position: relative;
227
+ .hv-thumb-preview {
228
+ width: 100px;
229
+ height: 140px; /* Approx A4 aspect */
230
+ background: var(--hv-thumb-preview-bg);
231
+ border: 1px solid var(--hv-border);
232
+ box-shadow: var(--hv-shadow);
233
+ border-radius: 4px;
234
+ overflow: hidden;
235
+ position: relative;
150
236
  }
151
237
  .hv-thumb-item.active .hv-thumb-preview {
152
238
  outline: 2px solid var(--hv-primary);
153
239
  outline-offset: 2px;
154
240
  }
155
241
 
156
- .hv-thumb-img {
157
- width: 100%;
158
- height: 100%;
159
- object-fit: contain;
160
- background: #fff;
161
- }
242
+ .hv-thumb-img {
243
+ width: 100%;
244
+ height: 100%;
245
+ object-fit: contain;
246
+ background: var(--hv-thumb-preview-bg);
247
+ }
162
248
 
163
249
  .hv-thumb-label {
164
250
  font-size: 12px;
@@ -166,27 +252,43 @@
166
252
  }
167
253
 
168
254
  /* --- 5. Main Content Area (The "Desk") --- */
169
- .hv-main {
170
- flex: 1;
171
- background: var(--hv-bg);
172
- overflow: auto;
173
- padding: 32px;
174
- display: flex;
175
- flex-direction: column;
176
- align-items: center;
177
- /* Scroll behavior */
178
- scroll-behavior: smooth;
179
- }
255
+ .hv-main {
256
+ flex: 1;
257
+ background: var(--hv-bg);
258
+ overflow: auto;
259
+ padding: 32px;
260
+ display: flex;
261
+ flex-direction: column;
262
+ align-items: stretch;
263
+ /* Scroll behavior */
264
+ scroll-behavior: smooth;
265
+ }
266
+
267
+ .hv-main.hv-main-richtext-authoring {
268
+ padding: 0 0 32px;
269
+ }
270
+
271
+ .hv-zoom-shell {
272
+ display: flex;
273
+ justify-content: center;
274
+ align-items: flex-start;
275
+ margin: 0 auto;
276
+ }
277
+
278
+ .hv-zoom-stage {
279
+ flex: 0 0 auto;
280
+ will-change: transform;
281
+ }
180
282
 
181
283
  /* --- 6. The "Page" Concept (Critical for fidelity) --- */
182
284
  /* This class wraps PDF canvases, Docx HTML, and Images to look like paper */
183
- .hv-page-container {
184
- background: white;
185
- box-shadow: var(--hv-shadow-lg);
186
- margin-bottom: 24px;
187
- transition: transform 0.2s ease;
188
- position: relative;
189
- }
285
+ .hv-page-container {
286
+ background: var(--hv-page-bg);
287
+ box-shadow: var(--hv-shadow-lg);
288
+ margin-bottom: 24px;
289
+ transition: transform 0.2s ease;
290
+ position: relative;
291
+ }
190
292
 
191
293
  /* Center layout for single page */
192
294
  .hv-view-single .hv-page-container {
@@ -231,34 +333,606 @@
231
333
  }
232
334
 
233
335
  /* Error State */
234
- .hv-error-banner {
235
- margin: 32px auto;
236
- padding: 16px 24px;
237
- background: #fef2f2;
238
- border: 1px solid #fee2e2;
239
- border-radius: var(--hv-radius);
240
- color: #991b1b;
241
- text-align: center;
242
- max-width: 500px;
243
- }
336
+ .hv-error-banner {
337
+ margin: 32px auto;
338
+ padding: 16px 24px;
339
+ background: #fef2f2;
340
+ border: 1px solid #fee2e2;
341
+ border-radius: var(--hv-radius);
342
+ color: #991b1b;
343
+ text-align: center;
344
+ box-sizing: border-box;
345
+ width: min(100%, 560px);
346
+ min-width: min(100%, 280px);
347
+ max-width: 560px;
348
+ box-shadow: var(--hv-shadow);
349
+ }
350
+
351
+ .hv-error-banner strong,
352
+ .hv-error-banner p {
353
+ overflow-wrap: anywhere;
354
+ word-break: break-word;
355
+ }
356
+
357
+ .hv-error-banner p {
358
+ margin: 8px 0 0;
359
+ }
360
+
361
+ .hv-info-banner {
362
+ margin: 0 auto 24px;
363
+ padding: 16px 20px;
364
+ background: #eff6ff;
365
+ border: 1px solid #bfdbfe;
366
+ border-radius: var(--hv-radius);
367
+ color: #1d4ed8;
368
+ max-width: 720px;
369
+ box-shadow: var(--hv-shadow);
370
+ }
371
+
372
+ .hv-info-banner.warning {
373
+ background: #fffbeb;
374
+ border-color: #fcd34d;
375
+ color: #92400e;
376
+ }
377
+
378
+ .hv-info-banner p {
379
+ margin: 8px 0 0;
380
+ }
244
381
 
245
382
  /* DOCX Specifics to simulate Word */
246
- .hv-docx-content {
247
- /* Simulate A4 Page: 210mm x 297mm */
248
- width: 816px;
249
- min-height: 1056px;
250
- padding: 96px; /* 1 inch margins approx */
251
- background: white;
252
- color: black;
253
- font-family: "Calibri", "Times New Roman", serif;
254
- line-height: 1.5;
255
- outline: none;
256
- }
257
- /* Ensure images in DOCX don't overflow the page */
258
- .hv-docx-content img {
259
- max-width: 100%;
260
- height: auto;
261
- }
383
+ .hv-docx-content {
384
+ box-sizing: border-box;
385
+ width: 816px;
386
+ min-height: 1056px;
387
+ padding: 96px; /* 1 inch margins approx */
388
+ background: white;
389
+ color: black;
390
+ font-family: "Calibri", "Times New Roman", serif;
391
+ line-height: 1.5;
392
+ outline: none;
393
+ }
394
+ /* Ensure images in DOCX don't overflow the page */
395
+ .hv-docx-content img {
396
+ max-width: 100%;
397
+ height: auto;
398
+ border-radius: 8px;
399
+ }
400
+
401
+ .hv-docx-content figure {
402
+ margin: 28px 0;
403
+ display: flex;
404
+ flex-direction: column;
405
+ gap: 10px;
406
+ }
407
+
408
+ .hv-docx-content figure.hv-inline-image {
409
+ width: 100%;
410
+ --hv-image-scale: 1;
411
+ --hv-image-focus-x: 50%;
412
+ --hv-image-focus-y: 50%;
413
+ }
414
+
415
+ .hv-docx-content figure.hv-inline-image.size-sm {
416
+ max-width: 240px;
417
+ }
418
+
419
+ .hv-docx-content figure.hv-inline-image.size-md {
420
+ max-width: 420px;
421
+ }
422
+
423
+ .hv-docx-content figure.hv-inline-image.size-lg {
424
+ max-width: 560px;
425
+ }
426
+
427
+ .hv-docx-content figure.hv-inline-image.size-full {
428
+ max-width: 100%;
429
+ }
430
+
431
+ .hv-docx-content figure.hv-inline-image.align-left {
432
+ margin-left: 0;
433
+ margin-right: auto;
434
+ }
435
+
436
+ .hv-docx-content figure.hv-inline-image.align-center {
437
+ margin-left: auto;
438
+ margin-right: auto;
439
+ }
440
+
441
+ .hv-docx-content figure.hv-inline-image.align-right {
442
+ margin-left: auto;
443
+ margin-right: 0;
444
+ }
445
+
446
+ .hv-inline-image-frame {
447
+ width: 100%;
448
+ overflow: hidden;
449
+ border-radius: 12px;
450
+ background: #eef2f7;
451
+ }
452
+
453
+ .hv-inline-image-frame img {
454
+ display: block;
455
+ width: 100%;
456
+ object-position: var(--hv-image-focus-x) var(--hv-image-focus-y);
457
+ transform: scale(var(--hv-image-scale));
458
+ transform-origin: center center;
459
+ }
460
+
461
+ .hv-docx-content figure.hv-inline-image.crop-original .hv-inline-image-frame {
462
+ aspect-ratio: auto;
463
+ }
464
+
465
+ .hv-docx-content figure.hv-inline-image.crop-original .hv-inline-image-frame img {
466
+ height: auto;
467
+ object-fit: contain;
468
+ }
469
+
470
+ .hv-docx-content figure.hv-inline-image.crop-wide .hv-inline-image-frame {
471
+ aspect-ratio: 16 / 9;
472
+ }
473
+
474
+ .hv-docx-content figure.hv-inline-image.crop-square .hv-inline-image-frame {
475
+ aspect-ratio: 1 / 1;
476
+ }
477
+
478
+ .hv-docx-content figure.hv-inline-image.crop-portrait .hv-inline-image-frame {
479
+ aspect-ratio: 4 / 5;
480
+ }
481
+
482
+ .hv-docx-content figure.hv-inline-image.crop-wide img,
483
+ .hv-docx-content figure.hv-inline-image.crop-square img,
484
+ .hv-docx-content figure.hv-inline-image.crop-portrait img {
485
+ width: 100%;
486
+ height: 100%;
487
+ object-fit: cover;
488
+ }
489
+
490
+ .hv-docx-content figcaption {
491
+ font-size: 12px;
492
+ color: #64748b;
493
+ text-align: center;
494
+ }
495
+
496
+ .hv-docx-content a {
497
+ color: #2563eb;
498
+ text-decoration: underline;
499
+ }
500
+
501
+ .hv-docx-content blockquote {
502
+ margin: 24px 0;
503
+ padding: 12px 16px;
504
+ border-left: 4px solid #94a3b8;
505
+ background: #f8fafc;
506
+ color: #334155;
507
+ }
508
+
509
+ .hv-docx-content hr {
510
+ border: 0;
511
+ border-top: 1px solid #cbd5e1;
512
+ margin: 28px 0;
513
+ }
514
+
515
+ .hv-docx-content table {
516
+ width: 100%;
517
+ border-collapse: collapse;
518
+ margin: 24px 0;
519
+ }
520
+
521
+ .hv-plain-text-doc {
522
+ color: #0f172a;
523
+ font-family: "Georgia", "Times New Roman", serif;
524
+ }
525
+
526
+ .hv-plain-text-doc p,
527
+ .hv-plain-text-doc ul,
528
+ .hv-plain-text-doc ol {
529
+ margin: 0 0 18px;
530
+ line-height: 1.72;
531
+ font-size: 17px;
532
+ }
533
+
534
+ .hv-plain-text-doc ul,
535
+ .hv-plain-text-doc ol {
536
+ padding-left: 28px;
537
+ }
538
+
539
+ .hv-docx-content th,
540
+ .hv-docx-content td {
541
+ border: 1px solid #cbd5e1;
542
+ padding: 10px 12px;
543
+ vertical-align: top;
544
+ }
545
+
546
+ .hv-docx-content th {
547
+ background: #f8fafc;
548
+ font-weight: 700;
549
+ }
550
+
551
+ .hv-docx-measure-shell {
552
+ position: fixed;
553
+ top: 0;
554
+ left: -200vw;
555
+ width: 816px;
556
+ opacity: 0;
557
+ pointer-events: none;
558
+ z-index: -1;
559
+ }
560
+
561
+ .hv-docx-measure-content {
562
+ overflow: visible;
563
+ }
564
+
565
+ .hv-docx-page-surface {
566
+ width: 816px;
567
+ min-height: 1056px;
568
+ overflow: hidden;
569
+ }
570
+
571
+ .hv-richtext-authoring-shell {
572
+ width: 100%;
573
+ min-width: 100%;
574
+ display: flex;
575
+ flex-direction: column;
576
+ gap: 0;
577
+ }
578
+
579
+ .hv-richtext-authoring-top {
580
+ width: 100%;
581
+ box-sizing: border-box;
582
+ flex: 0 0 auto;
583
+ align-self: stretch;
584
+ margin: 0 0 24px;
585
+ background: var(--hv-paper-bg);
586
+ border-bottom: 1px solid var(--hv-border);
587
+ overflow: hidden;
588
+ }
589
+
590
+ .hv-docx-editor-stage {
591
+ position: relative;
592
+ }
593
+
594
+ .hv-docx-page-image {
595
+ display: block;
596
+ width: 100%;
597
+ height: auto;
598
+ }
599
+
600
+ .hv-richtext-toolbar {
601
+ display: flex;
602
+ flex-direction: column;
603
+ gap: 10px;
604
+ padding: 12px 24px;
605
+ border-bottom: none;
606
+ background: var(--hv-paper-bg);
607
+ }
608
+
609
+ .hv-richtext-file-input {
610
+ display: none;
611
+ }
612
+
613
+ .hv-richtext-toolbar-row {
614
+ display: flex;
615
+ flex-wrap: wrap;
616
+ gap: 0 12px;
617
+ align-items: flex-end;
618
+ }
619
+
620
+ .hv-richtext-toolbar-section {
621
+ display: flex;
622
+ flex-direction: column;
623
+ gap: 8px;
624
+ position: relative;
625
+ padding: 0 24px;
626
+ }
627
+
628
+ .hv-richtext-toolbar-section:first-child {
629
+ padding-left: 0;
630
+ }
631
+
632
+ .hv-richtext-toolbar-section:last-child {
633
+ padding-right: 0;
634
+ }
635
+
636
+ .hv-richtext-toolbar-section:not(:last-child)::after {
637
+ content: "";
638
+ position: absolute;
639
+ top: 2px;
640
+ right: 0;
641
+ bottom: 2px;
642
+ width: 1px;
643
+ background: var(--hv-border);
644
+ }
645
+
646
+ .hv-richtext-toolbar-section-toggle {
647
+ display: none;
648
+ }
649
+
650
+ .hv-richtext-toolbar-label {
651
+ font-size: 11px;
652
+ font-weight: 700;
653
+ letter-spacing: 0.08em;
654
+ text-transform: uppercase;
655
+ color: var(--hv-muted);
656
+ }
657
+
658
+ .hv-richtext-toolbar-subgroup {
659
+ display: flex;
660
+ flex-direction: column;
661
+ gap: 6px;
662
+ }
663
+
664
+ .hv-richtext-toolbar-sublabel {
665
+ font-size: 11px;
666
+ font-weight: 600;
667
+ color: var(--hv-muted);
668
+ }
669
+
670
+ .hv-richtext-button-group {
671
+ display: flex;
672
+ flex-wrap: wrap;
673
+ gap: 8px;
674
+ }
675
+
676
+ .hv-richtext-button-group .hv-btn {
677
+ min-width: auto;
678
+ height: 32px;
679
+ padding: 0 10px;
680
+ font-size: 12px;
681
+ }
682
+
683
+ .hv-richtext-context-panel {
684
+ display: flex;
685
+ flex-direction: column;
686
+ gap: 14px;
687
+ padding: 14px 0 4px;
688
+ border-top: 1px solid var(--hv-border);
689
+ }
690
+
691
+ .hv-richtext-context-panel-compact {
692
+ padding-top: 8px;
693
+ }
694
+
695
+ .hv-richtext-context-header strong {
696
+ display: block;
697
+ font-size: 14px;
698
+ color: var(--hv-fg);
699
+ }
700
+
701
+ .hv-richtext-context-header p {
702
+ margin: 6px 0 0;
703
+ font-size: 12px;
704
+ line-height: 1.5;
705
+ color: var(--hv-muted);
706
+ }
707
+
708
+ .hv-richtext-image-editor {
709
+ display: grid;
710
+ grid-template-columns: minmax(220px, 280px) minmax(0, 1fr);
711
+ gap: 16px;
712
+ align-items: start;
713
+ }
714
+
715
+ .hv-richtext-image-preview-card {
716
+ padding: 12px;
717
+ border: 1px solid var(--hv-border);
718
+ border-radius: 14px;
719
+ background: var(--hv-modal-subtle-bg);
720
+ }
721
+
722
+ .hv-richtext-image-preview {
723
+ position: relative;
724
+ width: 100%;
725
+ overflow: hidden;
726
+ border-radius: 12px;
727
+ background: #e2e8f0;
728
+ cursor: crosshair;
729
+ }
730
+
731
+ .hv-richtext-image-preview.crop-original {
732
+ aspect-ratio: 4 / 3;
733
+ }
734
+
735
+ .hv-richtext-image-preview.crop-wide {
736
+ aspect-ratio: 16 / 9;
737
+ }
738
+
739
+ .hv-richtext-image-preview.crop-square {
740
+ aspect-ratio: 1 / 1;
741
+ }
742
+
743
+ .hv-richtext-image-preview.crop-portrait {
744
+ aspect-ratio: 4 / 5;
745
+ }
746
+
747
+ .hv-richtext-image-preview img {
748
+ width: 100%;
749
+ height: 100%;
750
+ object-fit: cover;
751
+ pointer-events: none;
752
+ }
753
+
754
+ .hv-richtext-image-preview.crop-original img {
755
+ object-fit: contain;
756
+ background: #fff;
757
+ }
758
+
759
+ .hv-richtext-image-focus-point {
760
+ position: absolute;
761
+ width: 20px;
762
+ height: 20px;
763
+ border-radius: 999px;
764
+ border: 2px solid #fff;
765
+ background: var(--hv-primary);
766
+ box-shadow: 0 4px 12px rgba(15, 23, 42, 0.24);
767
+ transform: translate(-50%, -50%);
768
+ pointer-events: none;
769
+ }
770
+
771
+ .hv-richtext-image-controls {
772
+ display: flex;
773
+ flex-direction: column;
774
+ gap: 12px;
775
+ }
776
+
777
+ .hv-richtext-range-group {
778
+ display: flex;
779
+ flex-direction: column;
780
+ gap: 8px;
781
+ font-size: 12px;
782
+ color: var(--hv-muted);
783
+ }
784
+
785
+ .hv-richtext-focus-readout {
786
+ display: flex;
787
+ gap: 12px;
788
+ font-size: 12px;
789
+ color: var(--hv-muted);
790
+ }
791
+
792
+ .hv-richtext-select {
793
+ min-width: 150px;
794
+ border: 1px solid var(--hv-input-border);
795
+ border-radius: 10px;
796
+ padding: 8px 10px;
797
+ background: var(--hv-input-bg);
798
+ color: var(--hv-input-fg);
799
+ font-size: 12px;
800
+ outline: none;
801
+ }
802
+
803
+ .hv-richtext-select:focus {
804
+ border-color: var(--hv-primary);
805
+ box-shadow: 0 0 0 2px rgba(79, 70, 229, 0.16);
806
+ }
807
+
808
+ .hv-richtext-template-panel {
809
+ display: flex;
810
+ flex-direction: column;
811
+ gap: 10px;
812
+ flex: 0 0 auto;
813
+ padding: 10px 24px 14px;
814
+ border-top: 1px solid var(--hv-border);
815
+ background: var(--hv-paper-bg);
816
+ }
817
+
818
+ .hv-richtext-template-strip {
819
+ display: flex;
820
+ flex-wrap: wrap;
821
+ align-items: center;
822
+ gap: 8px;
823
+ justify-content: space-between;
824
+ }
825
+
826
+ .hv-richtext-template-label {
827
+ font-size: 11px;
828
+ font-weight: 700;
829
+ letter-spacing: 0.08em;
830
+ text-transform: uppercase;
831
+ color: var(--hv-muted);
832
+ }
833
+
834
+ .hv-richtext-template-grid {
835
+ display: flex;
836
+ flex-wrap: nowrap;
837
+ gap: 10px;
838
+ overflow-x: auto;
839
+ overflow-y: hidden;
840
+ padding-bottom: 4px;
841
+ scrollbar-width: thin;
842
+ }
843
+
844
+ .hv-richtext-template-toggle {
845
+ min-width: auto;
846
+ padding: 0 12px;
847
+ color: var(--hv-fg);
848
+ background: var(--hv-paper-bg);
849
+ border-color: var(--hv-border);
850
+ }
851
+
852
+ .hv-richtext-template-card {
853
+ display: flex;
854
+ flex: 0 0 220px;
855
+ flex-direction: column;
856
+ gap: 8px;
857
+ align-items: flex-start;
858
+ min-height: 104px;
859
+ padding: 14px;
860
+ border: 1px solid var(--hv-border);
861
+ border-radius: 12px;
862
+ background: var(--hv-paper-bg);
863
+ text-align: left;
864
+ cursor: pointer;
865
+ transition: border-color 0.2s ease, box-shadow 0.2s ease, transform 0.2s ease;
866
+ }
867
+
868
+ .hv-richtext-template-card:hover {
869
+ border-color: rgba(79, 70, 229, 0.35);
870
+ transform: translateY(-1px);
871
+ }
872
+
873
+ .hv-richtext-template-card.active {
874
+ border-color: rgba(79, 70, 229, 0.6);
875
+ box-shadow: 0 0 0 2px rgba(79, 70, 229, 0.12);
876
+ background: var(--hv-panel-subtle-bg);
877
+ }
878
+
879
+ .hv-richtext-template-title {
880
+ font-size: 14px;
881
+ font-weight: 700;
882
+ color: var(--hv-fg);
883
+ }
884
+
885
+ .hv-richtext-template-description {
886
+ font-size: 12px;
887
+ line-height: 1.45;
888
+ color: var(--hv-muted);
889
+ }
890
+
891
+ .hv-docx-preview-stage {
892
+ width: 100%;
893
+ }
894
+
895
+ .hv-docx-preview-shell {
896
+ position: fixed;
897
+ top: 0;
898
+ left: -200vw;
899
+ width: 1200px;
900
+ opacity: 0;
901
+ pointer-events: none;
902
+ z-index: -1;
903
+ overflow: visible;
904
+ }
905
+
906
+ .hv-docx-preview-host {
907
+ width: max-content;
908
+ }
909
+
910
+ .hv-docx-preview-host .hv-docx-page-wrapper {
911
+ display: flex;
912
+ flex-wrap: wrap;
913
+ justify-content: center;
914
+ gap: 24px;
915
+ width: 100%;
916
+ background: transparent !important;
917
+ padding: 0 !important;
918
+ }
919
+
920
+ .hv-docx-preview-host section.hv-docx-page {
921
+ position: relative;
922
+ margin: 0 !important;
923
+ box-shadow: var(--hv-shadow-lg);
924
+ background: #ffffff;
925
+ color: #000000;
926
+ }
927
+
928
+ .hv-docx-preview-host section.hv-docx-page img {
929
+ max-width: 100%;
930
+ height: auto;
931
+ }
932
+
933
+ .hv-docx-preview-host section.hv-docx-page .hv-signature-overlay {
934
+ z-index: 12;
935
+ }
262
936
 
263
937
  /* PPTX Slide Container */
264
938
  .hv-slide-container {
@@ -298,13 +972,913 @@
298
972
  backdrop-filter: blur(2px); /* Optional blur effect */
299
973
  }
300
974
 
301
- .hv-modal {
302
- background: #fff;
303
- border-radius: 12px;
304
- box-shadow: 0 20px 25px -5px rgba(0, 0, 0, 0.1), 0 10px 10px -5px rgba(0, 0, 0, 0.04);
305
- overflow: hidden;
306
- display: flex;
307
- flex-direction: column;
308
- max-height: 90vh;
309
- position: relative;
310
- }
975
+ .hv-modal {
976
+ background: var(--hv-modal-bg);
977
+ border-radius: 12px;
978
+ box-shadow: 0 20px 25px -5px rgba(0, 0, 0, 0.1), 0 10px 10px -5px rgba(0, 0, 0, 0.04);
979
+ overflow: hidden;
980
+ display: flex;
981
+ flex-direction: column;
982
+ max-height: 90vh;
983
+ position: relative;
984
+ }
985
+
986
+ .hv-signature-overlay {
987
+ position: absolute;
988
+ inset: 0;
989
+ pointer-events: none;
990
+ z-index: 8;
991
+ }
992
+
993
+ .hv-signature-overlay-capture {
994
+ position: absolute;
995
+ inset: 0;
996
+ pointer-events: auto;
997
+ cursor: crosshair;
998
+ background: rgba(79, 70, 229, 0.08);
999
+ outline: 2px dashed rgba(79, 70, 229, 0.3);
1000
+ outline-offset: -8px;
1001
+ }
1002
+
1003
+ .hv-signature-overlay-hint {
1004
+ position: absolute;
1005
+ top: 16px;
1006
+ right: 16px;
1007
+ max-width: 260px;
1008
+ padding: 10px 12px;
1009
+ border-radius: 999px;
1010
+ background: rgba(15, 23, 42, 0.82);
1011
+ color: #fff;
1012
+ font-size: 12px;
1013
+ font-weight: 600;
1014
+ box-shadow: var(--hv-shadow);
1015
+ }
1016
+
1017
+ .hv-signature-stamp {
1018
+ position: absolute;
1019
+ display: flex;
1020
+ flex-direction: column;
1021
+ justify-content: flex-start;
1022
+ gap: 6px;
1023
+ padding: 12px 14px 10px;
1024
+ border: 1px solid transparent;
1025
+ border-radius: 12px;
1026
+ background: transparent;
1027
+ box-shadow: none;
1028
+ pointer-events: auto;
1029
+ user-select: none;
1030
+ touch-action: none;
1031
+ cursor: pointer;
1032
+ }
1033
+
1034
+ .hv-signature-stamp.active {
1035
+ background: rgba(255, 255, 255, 0.92);
1036
+ border-color: rgba(79, 70, 229, 0.7);
1037
+ box-shadow: 0 0 0 3px rgba(79, 70, 229, 0.18), 0 14px 28px rgba(15, 23, 42, 0.2);
1038
+ cursor: move;
1039
+ }
1040
+
1041
+ .hv-signature-image {
1042
+ flex: 1 1 auto;
1043
+ min-height: 0;
1044
+ width: 100%;
1045
+ height: 100%;
1046
+ display: block;
1047
+ pointer-events: none;
1048
+ }
1049
+
1050
+ .hv-signature-image-wrap {
1051
+ flex: 1 1 auto;
1052
+ min-height: 0;
1053
+ display: flex;
1054
+ align-items: center;
1055
+ }
1056
+
1057
+ .hv-signature-ink {
1058
+ background: #111827;
1059
+ mask-position: center center;
1060
+ mask-repeat: no-repeat;
1061
+ mask-size: contain;
1062
+ -webkit-mask-position: center center;
1063
+ -webkit-mask-repeat: no-repeat;
1064
+ -webkit-mask-size: contain;
1065
+ }
1066
+
1067
+ .hv-signature-meta {
1068
+ display: flex;
1069
+ flex-direction: column;
1070
+ align-items: flex-start;
1071
+ gap: 3px;
1072
+ margin-top: auto;
1073
+ padding-top: 2px;
1074
+ border-top: none;
1075
+ font-size: 10px;
1076
+ color: #334155;
1077
+ pointer-events: none;
1078
+ }
1079
+
1080
+ .hv-signature-meta-name {
1081
+ min-width: 0;
1082
+ line-height: 1.2;
1083
+ font-size: 12px;
1084
+ font-weight: 700;
1085
+ white-space: normal;
1086
+ }
1087
+
1088
+ .hv-signature-meta-jobtitle {
1089
+ line-height: 1.2;
1090
+ font-size: 11px;
1091
+ font-weight: 700;
1092
+ }
1093
+
1094
+ .hv-signature-meta-date {
1095
+ line-height: 1.2;
1096
+ font-size: 10px;
1097
+ font-weight: 500;
1098
+ opacity: 0.9;
1099
+ }
1100
+
1101
+ .hv-signature-remove {
1102
+ position: absolute;
1103
+ top: -10px;
1104
+ right: -10px;
1105
+ width: 22px;
1106
+ height: 22px;
1107
+ border: none;
1108
+ border-radius: 999px;
1109
+ background: #ef4444;
1110
+ color: #fff;
1111
+ cursor: pointer;
1112
+ box-shadow: var(--hv-shadow);
1113
+ }
1114
+
1115
+ .hv-signature-resize {
1116
+ position: absolute;
1117
+ right: -5px;
1118
+ bottom: -5px;
1119
+ width: 14px;
1120
+ height: 14px;
1121
+ border-radius: 4px;
1122
+ background: var(--hv-primary);
1123
+ cursor: nwse-resize;
1124
+ }
1125
+
1126
+ .hv-signature-note-indicator {
1127
+ position: absolute;
1128
+ left: 10px;
1129
+ top: -10px;
1130
+ display: inline-flex;
1131
+ align-items: center;
1132
+ justify-content: center;
1133
+ min-width: 38px;
1134
+ height: 20px;
1135
+ padding: 0 8px;
1136
+ border-radius: 999px;
1137
+ background: #f59e0b;
1138
+ color: #fff;
1139
+ font-size: 10px;
1140
+ font-weight: 700;
1141
+ letter-spacing: 0.02em;
1142
+ box-shadow: var(--hv-shadow);
1143
+ }
1144
+
1145
+ .hv-signature-color-picker,
1146
+ .hv-signature-color-toolbar {
1147
+ display: flex;
1148
+ flex-direction: column;
1149
+ gap: 6px;
1150
+ align-items: flex-start;
1151
+ }
1152
+
1153
+ .hv-signature-color-picker-label,
1154
+ .hv-signature-color-toolbar-label {
1155
+ font-size: 11px;
1156
+ font-weight: 600;
1157
+ color: var(--hv-muted);
1158
+ }
1159
+
1160
+ .hv-signature-color-swatch-row {
1161
+ display: flex;
1162
+ align-items: center;
1163
+ gap: 8px;
1164
+ flex-wrap: wrap;
1165
+ }
1166
+
1167
+ .hv-signature-color-swatch {
1168
+ width: 18px;
1169
+ height: 18px;
1170
+ padding: 0;
1171
+ border: 2px solid rgba(148, 163, 184, 0.35);
1172
+ border-radius: 999px;
1173
+ cursor: pointer;
1174
+ box-shadow: inset 0 0 0 1px rgba(255, 255, 255, 0.25);
1175
+ }
1176
+
1177
+ .hv-signature-color-swatch.active {
1178
+ border-color: var(--hv-primary);
1179
+ box-shadow: 0 0 0 3px rgba(79, 70, 229, 0.18);
1180
+ }
1181
+
1182
+ .hv-annotation-chip {
1183
+ position: absolute;
1184
+ display: inline-flex;
1185
+ align-items: center;
1186
+ justify-content: center;
1187
+ width: 32px;
1188
+ height: 32px;
1189
+ border: none;
1190
+ border-radius: 999px;
1191
+ background: #f59e0b;
1192
+ color: #fff;
1193
+ box-shadow: var(--hv-shadow);
1194
+ pointer-events: auto;
1195
+ cursor: pointer;
1196
+ transform: translate(-10%, -10%);
1197
+ z-index: 1;
1198
+ }
1199
+
1200
+ .hv-annotation-chip:hover {
1201
+ filter: brightness(1.05);
1202
+ }
1203
+
1204
+ .hv-annotation-chip.linked {
1205
+ background: #d97706;
1206
+ }
1207
+
1208
+ .hv-annotation-chip.empty {
1209
+ background: #fbbf24;
1210
+ color: #78350f;
1211
+ }
1212
+
1213
+ .hv-annotation-card {
1214
+ position: absolute;
1215
+ display: flex;
1216
+ flex-direction: column;
1217
+ min-width: 120px;
1218
+ min-height: 80px;
1219
+ border: 1px solid rgba(217, 119, 6, 0.26);
1220
+ border-radius: 14px;
1221
+ background: rgba(255, 251, 235, 0.98);
1222
+ box-shadow: 0 14px 26px rgba(15, 23, 42, 0.12);
1223
+ pointer-events: auto;
1224
+ user-select: none;
1225
+ overflow: hidden;
1226
+ z-index: 2;
1227
+ }
1228
+
1229
+ .hv-annotation-card.active {
1230
+ border-color: rgba(217, 119, 6, 0.66);
1231
+ box-shadow: 0 0 0 3px rgba(251, 191, 36, 0.2), 0 18px 30px rgba(15, 23, 42, 0.18);
1232
+ }
1233
+
1234
+ .hv-annotation-card.linked {
1235
+ background: rgba(254, 249, 195, 0.98);
1236
+ }
1237
+
1238
+ .hv-annotation-header {
1239
+ display: flex;
1240
+ align-items: center;
1241
+ justify-content: space-between;
1242
+ gap: 10px;
1243
+ padding: 10px 12px 8px;
1244
+ background: rgba(245, 158, 11, 0.16);
1245
+ cursor: pointer;
1246
+ }
1247
+
1248
+ .hv-annotation-card.active .hv-annotation-header {
1249
+ cursor: move;
1250
+ }
1251
+
1252
+ .hv-annotation-header-copy {
1253
+ display: flex;
1254
+ align-items: center;
1255
+ gap: 8px;
1256
+ min-width: 0;
1257
+ }
1258
+
1259
+ .hv-annotation-title {
1260
+ font-size: 11px;
1261
+ font-weight: 800;
1262
+ text-transform: uppercase;
1263
+ letter-spacing: 0.08em;
1264
+ color: #92400e;
1265
+ }
1266
+
1267
+ .hv-annotation-badge {
1268
+ display: inline-flex;
1269
+ align-items: center;
1270
+ justify-content: center;
1271
+ height: 20px;
1272
+ padding: 0 8px;
1273
+ border-radius: 999px;
1274
+ background: rgba(217, 119, 6, 0.12);
1275
+ color: #b45309;
1276
+ font-size: 10px;
1277
+ font-weight: 700;
1278
+ }
1279
+
1280
+ .hv-annotation-remove {
1281
+ flex: 0 0 auto;
1282
+ width: 22px;
1283
+ height: 22px;
1284
+ border: none;
1285
+ border-radius: 999px;
1286
+ background: #ef4444;
1287
+ color: #fff;
1288
+ cursor: pointer;
1289
+ box-shadow: var(--hv-shadow);
1290
+ }
1291
+
1292
+ .hv-annotation-body {
1293
+ flex: 1;
1294
+ min-height: 0;
1295
+ padding: 10px 12px 12px;
1296
+ }
1297
+
1298
+ .hv-annotation-input,
1299
+ .hv-annotation-preview {
1300
+ width: 100%;
1301
+ height: 100%;
1302
+ border: none;
1303
+ background: transparent;
1304
+ color: #451a03;
1305
+ font-size: 13px;
1306
+ line-height: 1.45;
1307
+ }
1308
+
1309
+ .hv-annotation-input {
1310
+ resize: none;
1311
+ outline: none;
1312
+ font-family: inherit;
1313
+ }
1314
+
1315
+ .hv-annotation-preview {
1316
+ white-space: pre-wrap;
1317
+ overflow: hidden;
1318
+ }
1319
+
1320
+ .hv-annotation-preview.empty,
1321
+ .hv-annotation-input::placeholder {
1322
+ color: #b45309;
1323
+ }
1324
+
1325
+ .hv-annotation-resize {
1326
+ position: absolute;
1327
+ right: -5px;
1328
+ bottom: -5px;
1329
+ width: 14px;
1330
+ height: 14px;
1331
+ border-radius: 4px;
1332
+ background: #d97706;
1333
+ cursor: nwse-resize;
1334
+ }
1335
+
1336
+ .hv-signature-selection-card {
1337
+ display: flex;
1338
+ flex-direction: column;
1339
+ gap: 10px;
1340
+ padding: 14px;
1341
+ border: 1px solid rgba(79, 70, 229, 0.22);
1342
+ border-radius: 12px;
1343
+ background: rgba(79, 70, 229, 0.08);
1344
+ }
1345
+
1346
+ .hv-signature-selection-title {
1347
+ font-size: 12px;
1348
+ font-weight: 700;
1349
+ text-transform: uppercase;
1350
+ letter-spacing: 0.08em;
1351
+ color: var(--hv-primary);
1352
+ }
1353
+
1354
+ .hv-signature-selection-image {
1355
+ align-self: center;
1356
+ height: 48px;
1357
+ object-fit: contain;
1358
+ }
1359
+
1360
+ .hv-signature-selection-copy {
1361
+ font-size: 12px;
1362
+ color: var(--hv-fg);
1363
+ }
1364
+
1365
+ .hv-signature-empty {
1366
+ padding: 12px;
1367
+ border: 1px dashed var(--hv-border);
1368
+ border-radius: 12px;
1369
+ font-size: 12px;
1370
+ color: var(--hv-muted);
1371
+ text-align: center;
1372
+ }
1373
+
1374
+ .hv-signature-item {
1375
+ position: relative;
1376
+ align-items: stretch;
1377
+ width: 100%;
1378
+ }
1379
+
1380
+ .hv-signature-item-main {
1381
+ width: 100%;
1382
+ display: flex;
1383
+ align-items: flex-start;
1384
+ gap: 12px;
1385
+ border: 1px solid var(--hv-border);
1386
+ border-radius: 12px;
1387
+ background: var(--hv-paper-bg);
1388
+ padding: 12px;
1389
+ cursor: pointer;
1390
+ text-align: left;
1391
+ }
1392
+
1393
+ .hv-signature-item.active .hv-signature-item-main {
1394
+ border-color: rgba(79, 70, 229, 0.6);
1395
+ box-shadow: 0 0 0 2px rgba(79, 70, 229, 0.12);
1396
+ }
1397
+
1398
+ .hv-signature-item-stack {
1399
+ display: flex;
1400
+ flex-direction: column;
1401
+ align-items: flex-start;
1402
+ gap: 8px;
1403
+ min-width: 0;
1404
+ width: 100%;
1405
+ }
1406
+
1407
+ .hv-signature-item-image {
1408
+ height: 48px;
1409
+ max-width: 100%;
1410
+ object-fit: contain;
1411
+ }
1412
+
1413
+ .hv-signature-item-copy {
1414
+ display: flex;
1415
+ flex-direction: column;
1416
+ gap: 4px;
1417
+ font-size: 11px;
1418
+ color: var(--hv-muted);
1419
+ min-width: 0;
1420
+ width: 100%;
1421
+ }
1422
+
1423
+ .hv-signature-item-copy strong {
1424
+ color: var(--hv-fg);
1425
+ font-size: 12px;
1426
+ white-space: normal;
1427
+ word-break: break-word;
1428
+ }
1429
+
1430
+ .hv-signature-item-copy em {
1431
+ font-style: italic;
1432
+ }
1433
+
1434
+ .hv-signature-item-check {
1435
+ margin-left: auto;
1436
+ display: inline-flex;
1437
+ align-items: center;
1438
+ justify-content: center;
1439
+ width: 24px;
1440
+ height: 24px;
1441
+ border-radius: 999px;
1442
+ background: rgba(34, 197, 94, 0.12);
1443
+ color: #16a34a;
1444
+ }
1445
+
1446
+ .hv-image-surface {
1447
+ width: fit-content;
1448
+ max-width: min(100%, 1080px);
1449
+ padding: 20px;
1450
+ background: var(--hv-page-bg);
1451
+ }
1452
+
1453
+ .hv-image-renderer {
1454
+ display: block;
1455
+ max-width: min(100%, 1020px);
1456
+ height: auto;
1457
+ }
1458
+
1459
+ .hv-slide-surface {
1460
+ width: min(100%, 1080px);
1461
+ overflow: hidden;
1462
+ }
1463
+
1464
+ .hv-slide-stage {
1465
+ position: relative;
1466
+ width: 100%;
1467
+ height: 100%;
1468
+ overflow: hidden;
1469
+ }
1470
+
1471
+ .hv-slide-scene {
1472
+ position: absolute;
1473
+ inset: 0 auto auto 0;
1474
+ transform-origin: top left;
1475
+ }
1476
+
1477
+ .hv-slide-stage .hv-signature-stamp {
1478
+ padding: 6px 8px 4px;
1479
+ gap: 6px;
1480
+ }
1481
+
1482
+ .hv-slide-stage .hv-signature-meta {
1483
+ padding-top: 2px;
1484
+ border-top: none;
1485
+ font-size: 12px;
1486
+ gap: 3px;
1487
+ }
1488
+
1489
+ .hv-slide-stage .hv-signature-meta-name {
1490
+ font-weight: 700;
1491
+ }
1492
+
1493
+ .hv-slide-stage .hv-signature-meta-date {
1494
+ font-weight: 600;
1495
+ }
1496
+
1497
+ .hv-slide-element {
1498
+ position: absolute;
1499
+ box-sizing: border-box;
1500
+ overflow: hidden;
1501
+ }
1502
+
1503
+ .hv-slide-element.shape {
1504
+ padding: 8px 10px;
1505
+ border: 1px solid transparent;
1506
+ }
1507
+
1508
+ .hv-slide-textbox {
1509
+ width: 100%;
1510
+ height: 100%;
1511
+ padding: 10px 12px;
1512
+ overflow: hidden;
1513
+ word-break: break-word;
1514
+ }
1515
+
1516
+ .hv-slide-paragraph {
1517
+ display: block;
1518
+ margin: 0 0 10px;
1519
+ line-height: 1.34;
1520
+ white-space: normal;
1521
+ }
1522
+
1523
+ .hv-slide-paragraph.align-ctr {
1524
+ text-align: center;
1525
+ }
1526
+
1527
+ .hv-slide-paragraph.align-r {
1528
+ text-align: right;
1529
+ }
1530
+
1531
+ .hv-slide-paragraph.align-l {
1532
+ text-align: left;
1533
+ }
1534
+
1535
+ .hv-slide-bullet {
1536
+ display: inline-block;
1537
+ width: 1.1em;
1538
+ font-size: 0;
1539
+ vertical-align: top;
1540
+ }
1541
+
1542
+ .hv-slide-bullet::before {
1543
+ content: "\2022";
1544
+ font-size: 0.95rem;
1545
+ color: currentColor;
1546
+ }
1547
+
1548
+ .hv-slide-paragraph-copy {
1549
+ display: inline;
1550
+ white-space: pre-wrap;
1551
+ }
1552
+
1553
+ .hv-slide-image {
1554
+ width: 100%;
1555
+ height: 100%;
1556
+ object-fit: contain;
1557
+ }
1558
+
1559
+ .hv-slide-image-fallback {
1560
+ display: flex;
1561
+ width: 100%;
1562
+ height: 100%;
1563
+ align-items: center;
1564
+ justify-content: center;
1565
+ padding: 12px;
1566
+ background: linear-gradient(135deg, #f8fafc, #eef2ff);
1567
+ color: #64748b;
1568
+ font-size: 14px;
1569
+ text-align: center;
1570
+ }
1571
+
1572
+ .hv-sheet-container {
1573
+ width: min(100%, 1180px);
1574
+ padding: 0;
1575
+ overflow: hidden;
1576
+ }
1577
+
1578
+ .hv-sheet-tabs {
1579
+ display: flex;
1580
+ align-items: center;
1581
+ justify-content: space-between;
1582
+ gap: 12px;
1583
+ padding: 12px;
1584
+ overflow-x: auto;
1585
+ background: var(--hv-sheet-scroll-bg);
1586
+ border-bottom: 1px solid var(--hv-border);
1587
+ }
1588
+
1589
+ .hv-sheet-tab-list {
1590
+ display: flex;
1591
+ gap: 8px;
1592
+ overflow-x: auto;
1593
+ }
1594
+
1595
+ .hv-sheet-tab {
1596
+ flex: 0 0 auto;
1597
+ padding: 8px 14px;
1598
+ border: 1px solid transparent;
1599
+ border-radius: 999px;
1600
+ background: rgba(148, 163, 184, 0.14);
1601
+ color: var(--hv-fg);
1602
+ font-size: 12px;
1603
+ font-weight: 600;
1604
+ cursor: pointer;
1605
+ }
1606
+
1607
+ .hv-sheet-tab.active {
1608
+ background: rgba(37, 99, 235, 0.12);
1609
+ border-color: rgba(37, 99, 235, 0.2);
1610
+ color: #1d4ed8;
1611
+ }
1612
+
1613
+ .hv-sheet-actions {
1614
+ display: flex;
1615
+ flex: 0 0 auto;
1616
+ align-items: center;
1617
+ gap: 8px;
1618
+ }
1619
+
1620
+ .hv-sheet-actions .hv-btn {
1621
+ min-width: auto;
1622
+ padding: 0 12px;
1623
+ color: var(--hv-fg);
1624
+ background: var(--hv-paper-bg);
1625
+ border-color: var(--hv-border);
1626
+ }
1627
+
1628
+ .hv-sheet-formula-bar {
1629
+ display: flex;
1630
+ gap: 12px;
1631
+ align-items: center;
1632
+ padding: 10px 12px;
1633
+ border-bottom: 1px solid var(--hv-border);
1634
+ background: var(--hv-paper-bg);
1635
+ }
1636
+
1637
+ .hv-sheet-formula-cell {
1638
+ min-width: 64px;
1639
+ padding: 8px 10px;
1640
+ border-radius: 10px;
1641
+ background: var(--hv-sheet-header-bg);
1642
+ color: var(--hv-sheet-header-fg);
1643
+ font-size: 12px;
1644
+ font-weight: 700;
1645
+ text-align: center;
1646
+ }
1647
+
1648
+ .hv-sheet-formula-input {
1649
+ flex: 1;
1650
+ min-width: 0;
1651
+ border: 1px solid var(--hv-input-border);
1652
+ border-radius: 10px;
1653
+ padding: 10px 12px;
1654
+ outline: none;
1655
+ font-size: 13px;
1656
+ background: var(--hv-input-bg);
1657
+ color: var(--hv-input-fg);
1658
+ }
1659
+
1660
+ .hv-sheet-viewport-note {
1661
+ padding: 10px 12px;
1662
+ border-bottom: 1px solid var(--hv-border);
1663
+ background: rgba(148, 163, 184, 0.08);
1664
+ color: var(--hv-muted);
1665
+ font-size: 12px;
1666
+ }
1667
+
1668
+ .hv-sheet-scroll {
1669
+ overflow: auto;
1670
+ max-height: calc(100vh - 240px);
1671
+ background: var(--hv-sheet-scroll-bg);
1672
+ }
1673
+
1674
+ .hv-sheet-surface {
1675
+ position: relative;
1676
+ width: max-content;
1677
+ min-width: 100%;
1678
+ background: var(--hv-sheet-cell-bg);
1679
+ }
1680
+
1681
+ .hv-sheet-table {
1682
+ border-collapse: collapse;
1683
+ table-layout: fixed;
1684
+ }
1685
+
1686
+ .hv-sheet-corner,
1687
+ .hv-sheet-column-header,
1688
+ .hv-sheet-row-header {
1689
+ background: var(--hv-sheet-header-bg);
1690
+ color: var(--hv-sheet-header-fg);
1691
+ font-size: 11px;
1692
+ font-weight: 700;
1693
+ border: 1px solid var(--hv-border);
1694
+ }
1695
+
1696
+ .hv-sheet-corner {
1697
+ width: 48px;
1698
+ min-width: 48px;
1699
+ position: sticky;
1700
+ left: 0;
1701
+ top: 0;
1702
+ z-index: 30;
1703
+ }
1704
+
1705
+ .hv-sheet-column-header {
1706
+ position: sticky;
1707
+ top: 0;
1708
+ z-index: 20;
1709
+ padding: 8px 0;
1710
+ }
1711
+
1712
+ .hv-sheet-row-header {
1713
+ width: 48px;
1714
+ min-width: 48px;
1715
+ text-align: center;
1716
+ position: sticky;
1717
+ left: 0;
1718
+ z-index: 10;
1719
+ }
1720
+
1721
+ .hv-sheet-cell {
1722
+ border: 1px solid var(--hv-border);
1723
+ padding: 8px 10px;
1724
+ font-size: 13px;
1725
+ color: var(--hv-sheet-cell-fg);
1726
+ white-space: pre-wrap;
1727
+ vertical-align: top;
1728
+ outline: none;
1729
+ background: var(--hv-sheet-cell-bg);
1730
+ }
1731
+
1732
+ .hv-sheet-cell.active {
1733
+ box-shadow: inset 0 0 0 2px rgba(37, 99, 235, 0.45);
1734
+ background: rgba(239, 246, 255, 0.7);
1735
+ }
1736
+
1737
+ .hv-toolbar-page-group {
1738
+ display: flex;
1739
+ align-items: center;
1740
+ gap: 8px;
1741
+ color: var(--hv-fg);
1742
+ font-size: 14px;
1743
+ font-weight: 600;
1744
+ }
1745
+
1746
+ .hv-toolbar-page-input {
1747
+ width: 48px;
1748
+ text-align: center;
1749
+ border: 1px solid var(--hv-input-border);
1750
+ border-radius: 8px;
1751
+ padding: 6px 4px;
1752
+ background: var(--hv-input-bg);
1753
+ color: var(--hv-input-fg);
1754
+ outline: none;
1755
+ transition: border-color 0.2s ease, box-shadow 0.2s ease;
1756
+ }
1757
+
1758
+ .hv-toolbar-page-input:focus {
1759
+ border-color: var(--hv-primary);
1760
+ box-shadow: 0 0 0 2px rgba(79, 70, 229, 0.18);
1761
+ }
1762
+
1763
+ .hv-toolbar-page-sep {
1764
+ color: var(--hv-muted);
1765
+ }
1766
+
1767
+ .hv-btn-label {
1768
+ display: inline;
1769
+ }
1770
+
1771
+ .hv-thumb-skeleton {
1772
+ width: 100%;
1773
+ height: 100%;
1774
+ display: flex;
1775
+ align-items: center;
1776
+ justify-content: center;
1777
+ background: var(--hv-thumb-skeleton-bg);
1778
+ color: var(--hv-thumb-skeleton-fg);
1779
+ animation: hv-pulse 1.2s ease-in-out infinite;
1780
+ }
1781
+
1782
+ .hv-thumb-empty,
1783
+ .hv-empty-state,
1784
+ .hv-loading-copy {
1785
+ padding: 16px;
1786
+ text-align: center;
1787
+ color: var(--hv-muted);
1788
+ }
1789
+
1790
+ .hv-empty-state {
1791
+ font-size: 14px;
1792
+ }
1793
+
1794
+ .hv-thumb-empty {
1795
+ font-size: 12px;
1796
+ }
1797
+
1798
+ .hv-loading-copy {
1799
+ padding: 48px;
1800
+ font-size: 14px;
1801
+ }
1802
+
1803
+ @keyframes hv-pulse {
1804
+ 0%, 100% { opacity: 0.6; }
1805
+ 50% { opacity: 1; }
1806
+ }
1807
+
1808
+ @media (max-width: 640px) {
1809
+ .hv-richtext-authoring-top {
1810
+ margin: 0 0 16px;
1811
+ }
1812
+
1813
+ .hv-richtext-toolbar,
1814
+ .hv-richtext-template-panel {
1815
+ padding-left: 16px;
1816
+ padding-right: 16px;
1817
+ }
1818
+
1819
+ .hv-richtext-image-editor {
1820
+ grid-template-columns: 1fr;
1821
+ }
1822
+
1823
+ .hv-btn-label {
1824
+ display: none;
1825
+ }
1826
+ }
1827
+
1828
+ @media (max-width: 900px) {
1829
+ .hv-richtext-toolbar {
1830
+ gap: 12px;
1831
+ }
1832
+
1833
+ .hv-richtext-toolbar-row {
1834
+ flex-direction: column;
1835
+ align-items: stretch;
1836
+ gap: 10px;
1837
+ }
1838
+
1839
+ .hv-richtext-toolbar-section {
1840
+ padding: 12px;
1841
+ border: 1px solid var(--hv-border);
1842
+ border-radius: 14px;
1843
+ background: var(--hv-modal-subtle-bg);
1844
+ }
1845
+
1846
+ .hv-richtext-toolbar-section::after {
1847
+ display: none;
1848
+ }
1849
+
1850
+ .hv-richtext-toolbar-section-toggle {
1851
+ display: flex;
1852
+ align-items: center;
1853
+ justify-content: space-between;
1854
+ gap: 12px;
1855
+ width: 100%;
1856
+ padding: 0;
1857
+ border: none;
1858
+ background: transparent;
1859
+ color: var(--hv-fg);
1860
+ text-align: left;
1861
+ cursor: pointer;
1862
+ }
1863
+
1864
+ .hv-richtext-toolbar-section-toggle .hv-richtext-toolbar-label {
1865
+ color: var(--hv-fg);
1866
+ }
1867
+
1868
+ .hv-richtext-toolbar-toggle-copy {
1869
+ flex: 0 0 auto;
1870
+ font-size: 10px;
1871
+ font-weight: 800;
1872
+ letter-spacing: 0.08em;
1873
+ text-transform: uppercase;
1874
+ color: var(--hv-primary);
1875
+ }
1876
+
1877
+ .hv-richtext-toolbar-section-toggle.open .hv-richtext-toolbar-toggle-copy {
1878
+ color: var(--hv-muted);
1879
+ }
1880
+
1881
+ .hv-richtext-select {
1882
+ width: 100%;
1883
+ }
1884
+ }