@lumen-stack/react 0.12.4 → 0.13.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/index.cjs +4 -4
- package/dist/index.cjs.map +1 -1
- package/dist/index.js +4 -4
- package/dist/index.js.map +1 -1
- package/dist/styles.css +619 -36
- package/package.json +1 -1
package/dist/styles.css
CHANGED
|
@@ -209,7 +209,9 @@
|
|
|
209
209
|
display: inline-flex;
|
|
210
210
|
align-items: center;
|
|
211
211
|
justify-content: center;
|
|
212
|
-
gap
|
|
212
|
+
/* 0 at rest so the collapsed label adds no gap that would shove the grip
|
|
213
|
+
off-centre; restored to 6px only once the label is revealed (below). */
|
|
214
|
+
gap: 0;
|
|
213
215
|
background: var(--lumen-accent);
|
|
214
216
|
color: var(--lumen-accent-fg);
|
|
215
217
|
border: 0;
|
|
@@ -217,17 +219,23 @@
|
|
|
217
219
|
font: inherit;
|
|
218
220
|
font-size: var(--lumen-fs-13);
|
|
219
221
|
font-weight: 500;
|
|
220
|
-
|
|
222
|
+
/* A soft ambient shadow to ground the tab + a faint brand glow to lift it.
|
|
223
|
+
The glow tracks --lumen-accent (color-mix) so it follows a host's custom
|
|
224
|
+
accent. Near-symmetric so it reads on every edge. */
|
|
225
|
+
box-shadow:
|
|
226
|
+
0 2px 10px rgb(0 0 0 / 0.30),
|
|
227
|
+
0 0 18px color-mix(in oklab, var(--lumen-accent) 32%, transparent);
|
|
221
228
|
transition:
|
|
222
229
|
transform var(--lumen-dur) var(--lumen-ease),
|
|
223
230
|
padding var(--lumen-dur) var(--lumen-ease),
|
|
231
|
+
box-shadow var(--lumen-dur) var(--lumen-ease),
|
|
224
232
|
opacity var(--lumen-dur-fast) ease;
|
|
225
233
|
user-select: none;
|
|
226
234
|
-webkit-tap-highlight-color: transparent;
|
|
227
235
|
}
|
|
228
236
|
.lumen-notch-handle {
|
|
229
237
|
display: block;
|
|
230
|
-
background: rgb(255 255 255 / 0.
|
|
238
|
+
background: rgb(255 255 255 / 0.7);
|
|
231
239
|
border-radius: 999px;
|
|
232
240
|
}
|
|
233
241
|
.lumen-notch-label {
|
|
@@ -235,56 +243,77 @@
|
|
|
235
243
|
align-items: center;
|
|
236
244
|
gap: 6px;
|
|
237
245
|
white-space: nowrap;
|
|
246
|
+
/* Collapse on BOTH axes at rest so the resting tab is symmetric and the grip
|
|
247
|
+
sits dead-centre. max-width alone hid the text but the label's main-axis
|
|
248
|
+
size still inflated the tab — its line-box height on top/bottom, its
|
|
249
|
+
vertical-text length on left/right — centering the grip in a secretly-tall
|
|
250
|
+
tab (and on the column edges, pushing it to the top). The min-*: 0 is
|
|
251
|
+
required: a flex item's automatic minimum size otherwise refuses to shrink
|
|
252
|
+
below its content, so max-*: 0 would have no effect. */
|
|
253
|
+
min-width: 0;
|
|
254
|
+
min-height: 0;
|
|
238
255
|
max-width: 0;
|
|
256
|
+
max-height: 0;
|
|
239
257
|
overflow: hidden;
|
|
240
258
|
opacity: 0;
|
|
241
259
|
transition:
|
|
242
260
|
max-width var(--lumen-dur) var(--lumen-ease),
|
|
261
|
+
max-height var(--lumen-dur) var(--lumen-ease),
|
|
243
262
|
opacity var(--lumen-dur-fast) ease;
|
|
244
263
|
}
|
|
245
264
|
.lumen-notch-expanded .lumen-notch-label,
|
|
246
265
|
.lumen-notch:hover .lumen-notch-label,
|
|
247
266
|
.lumen-notch:focus-visible .lumen-notch-label {
|
|
248
267
|
max-width: 12rem;
|
|
268
|
+
max-height: 12rem;
|
|
249
269
|
opacity: 1;
|
|
250
270
|
}
|
|
271
|
+
/* On reveal: restore the handle↔label gap and lift the glow a touch. */
|
|
272
|
+
.lumen-notch-expanded,
|
|
273
|
+
.lumen-notch:hover,
|
|
274
|
+
.lumen-notch:focus-visible {
|
|
275
|
+
gap: 6px;
|
|
276
|
+
box-shadow:
|
|
277
|
+
0 3px 14px rgb(0 0 0 / 0.34),
|
|
278
|
+
0 0 26px color-mix(in oklab, var(--lumen-accent) 52%, transparent);
|
|
279
|
+
}
|
|
251
280
|
.lumen-notch-top {
|
|
252
281
|
top: 0;
|
|
253
282
|
left: 50%;
|
|
254
|
-
transform: translate(-50%,
|
|
255
|
-
padding:
|
|
283
|
+
transform: translate(-50%, 0);
|
|
284
|
+
padding: 6px 14px;
|
|
256
285
|
border-radius: 0 0 999px 999px;
|
|
257
286
|
}
|
|
258
|
-
.lumen-notch-top .lumen-notch-handle { width:
|
|
287
|
+
.lumen-notch-top .lumen-notch-handle { width: 28px; height: 3px; }
|
|
259
288
|
.lumen-notch-top.lumen-notch-expanded,
|
|
260
289
|
.lumen-notch-top:hover,
|
|
261
290
|
.lumen-notch-top:focus-visible {
|
|
262
291
|
transform: translate(-50%, 0);
|
|
263
|
-
padding:
|
|
292
|
+
padding: 8px 16px;
|
|
264
293
|
}
|
|
265
294
|
.lumen-notch-bottom {
|
|
266
295
|
bottom: 0;
|
|
267
296
|
left: 50%;
|
|
268
|
-
transform: translate(-50%,
|
|
269
|
-
padding:
|
|
297
|
+
transform: translate(-50%, 0);
|
|
298
|
+
padding: 6px 14px;
|
|
270
299
|
border-radius: 999px 999px 0 0;
|
|
271
300
|
}
|
|
272
|
-
.lumen-notch-bottom .lumen-notch-handle { width:
|
|
301
|
+
.lumen-notch-bottom .lumen-notch-handle { width: 28px; height: 3px; }
|
|
273
302
|
.lumen-notch-bottom.lumen-notch-expanded,
|
|
274
303
|
.lumen-notch-bottom:hover,
|
|
275
304
|
.lumen-notch-bottom:focus-visible {
|
|
276
305
|
transform: translate(-50%, 0);
|
|
277
|
-
padding:
|
|
306
|
+
padding: 8px 16px;
|
|
278
307
|
}
|
|
279
308
|
.lumen-notch-right {
|
|
280
309
|
right: 0;
|
|
281
310
|
top: 50%;
|
|
282
|
-
transform: translate(
|
|
283
|
-
padding: 14px
|
|
311
|
+
transform: translate(0, -50%);
|
|
312
|
+
padding: 14px 6px;
|
|
284
313
|
border-radius: 999px 0 0 999px;
|
|
285
314
|
flex-direction: column;
|
|
286
315
|
}
|
|
287
|
-
.lumen-notch-right .lumen-notch-handle { width:
|
|
316
|
+
.lumen-notch-right .lumen-notch-handle { width: 3px; height: 28px; }
|
|
288
317
|
.lumen-notch-right .lumen-notch-label {
|
|
289
318
|
writing-mode: vertical-rl;
|
|
290
319
|
transform: rotate(180deg);
|
|
@@ -293,23 +322,23 @@
|
|
|
293
322
|
.lumen-notch-right:hover,
|
|
294
323
|
.lumen-notch-right:focus-visible {
|
|
295
324
|
transform: translate(0, -50%);
|
|
296
|
-
padding: 16px
|
|
325
|
+
padding: 16px 8px;
|
|
297
326
|
}
|
|
298
327
|
.lumen-notch-left {
|
|
299
328
|
left: 0;
|
|
300
329
|
top: 50%;
|
|
301
|
-
transform: translate(
|
|
302
|
-
padding: 14px
|
|
330
|
+
transform: translate(0, -50%);
|
|
331
|
+
padding: 14px 6px;
|
|
303
332
|
border-radius: 0 999px 999px 0;
|
|
304
333
|
flex-direction: column;
|
|
305
334
|
}
|
|
306
|
-
.lumen-notch-left .lumen-notch-handle { width:
|
|
335
|
+
.lumen-notch-left .lumen-notch-handle { width: 3px; height: 28px; }
|
|
307
336
|
.lumen-notch-left .lumen-notch-label { writing-mode: vertical-rl; }
|
|
308
337
|
.lumen-notch-left.lumen-notch-expanded,
|
|
309
338
|
.lumen-notch-left:hover,
|
|
310
339
|
.lumen-notch-left:focus-visible {
|
|
311
340
|
transform: translate(0, -50%);
|
|
312
|
-
padding: 16px
|
|
341
|
+
padding: 16px 8px;
|
|
313
342
|
}
|
|
314
343
|
|
|
315
344
|
/* ─── Modal shell ────────────────────────────────────────────────── */
|
|
@@ -394,8 +423,8 @@
|
|
|
394
423
|
}
|
|
395
424
|
.lumen-modal-grabber::before {
|
|
396
425
|
content: "";
|
|
397
|
-
width:
|
|
398
|
-
height:
|
|
426
|
+
width: 32px;
|
|
427
|
+
height: 3px;
|
|
399
428
|
border-radius: 999px;
|
|
400
429
|
background: var(--lumen-border-strong);
|
|
401
430
|
}
|
|
@@ -503,9 +532,12 @@
|
|
|
503
532
|
display: flex;
|
|
504
533
|
align-items: center;
|
|
505
534
|
gap: 8px;
|
|
506
|
-
|
|
507
|
-
|
|
508
|
-
|
|
535
|
+
margin: 12px 16px 0;
|
|
536
|
+
padding: 7px 10px;
|
|
537
|
+
border-radius: var(--lumen-r-lg);
|
|
538
|
+
border: 0.5px solid var(--lumen-border);
|
|
539
|
+
background: var(--lumen-bg-elev);
|
|
540
|
+
box-shadow: var(--lumen-shadow-sm);
|
|
509
541
|
flex-wrap: wrap;
|
|
510
542
|
flex-shrink: 0;
|
|
511
543
|
}
|
|
@@ -605,12 +637,7 @@
|
|
|
605
637
|
position: relative;
|
|
606
638
|
display: grid;
|
|
607
639
|
place-items: center;
|
|
608
|
-
background:
|
|
609
|
-
linear-gradient(45deg, var(--lumen-bg-elev) 25%, transparent 25%) -8px 0 / 16px 16px,
|
|
610
|
-
linear-gradient(-45deg, var(--lumen-bg-elev) 25%, transparent 25%) -8px 0 / 16px 16px,
|
|
611
|
-
linear-gradient(45deg, transparent 75%, var(--lumen-bg-elev) 75%) 0 8px / 16px 16px,
|
|
612
|
-
linear-gradient(-45deg, transparent 75%, var(--lumen-bg-elev) 75%) 0 8px / 16px 16px,
|
|
613
|
-
var(--lumen-bg);
|
|
640
|
+
background: transparent;
|
|
614
641
|
padding: 12px 16px;
|
|
615
642
|
flex-shrink: 0;
|
|
616
643
|
}
|
|
@@ -618,27 +645,28 @@
|
|
|
618
645
|
position: relative;
|
|
619
646
|
display: inline-block;
|
|
620
647
|
max-width: 100%;
|
|
621
|
-
max-height:
|
|
622
|
-
border-radius: var(--lumen-r-
|
|
648
|
+
max-height: 54dvh;
|
|
649
|
+
border-radius: var(--lumen-r-lg);
|
|
623
650
|
overflow: hidden;
|
|
624
|
-
box-shadow:
|
|
651
|
+
box-shadow: 0 1px 3px rgb(0 0 0 / 0.14), 0 18px 44px -12px rgb(0 0 0 / 0.4),
|
|
652
|
+
0 0 0 0.5px var(--lumen-border);
|
|
625
653
|
line-height: 0;
|
|
626
654
|
}
|
|
627
655
|
@media (min-width: 640px) {
|
|
628
|
-
.lumen-annotate-frame { max-height:
|
|
656
|
+
.lumen-annotate-frame { max-height: 60dvh; }
|
|
629
657
|
}
|
|
630
658
|
.lumen-annotate-frame canvas {
|
|
631
659
|
display: block;
|
|
632
660
|
/* Base canvas dictates the rendered box; constrain by both axes so
|
|
633
661
|
* tall screenshots scale down preserving aspect without nested scroll. */
|
|
634
662
|
max-width: 100%;
|
|
635
|
-
max-height:
|
|
663
|
+
max-height: 54dvh;
|
|
636
664
|
width: auto;
|
|
637
665
|
height: auto;
|
|
638
666
|
object-fit: contain;
|
|
639
667
|
}
|
|
640
668
|
@media (min-width: 640px) {
|
|
641
|
-
.lumen-annotate-frame canvas { max-height:
|
|
669
|
+
.lumen-annotate-frame canvas { max-height: 60dvh; }
|
|
642
670
|
}
|
|
643
671
|
.lumen-annotate-overlay {
|
|
644
672
|
/* Absolute over the base canvas instead of CSS-grid stacking. iOS
|
|
@@ -658,6 +686,561 @@
|
|
|
658
686
|
cursor: copy;
|
|
659
687
|
}
|
|
660
688
|
|
|
689
|
+
/* ─── Stage 2a: fullscreen markup capture surface ────────────────────
|
|
690
|
+
When a capture is ready, the modal goes fullscreen: the screenshot sits
|
|
691
|
+
large in a dark surround (the frame still wraps the canvas so the
|
|
692
|
+
annotation overlay stays pixel-aligned) and the chrome floats over it. */
|
|
693
|
+
.lumen-modal[data-lumen-fs="true"] {
|
|
694
|
+
position: fixed;
|
|
695
|
+
inset: 0;
|
|
696
|
+
width: 100%;
|
|
697
|
+
height: 100%;
|
|
698
|
+
max-width: none;
|
|
699
|
+
max-height: none;
|
|
700
|
+
border-radius: 0;
|
|
701
|
+
}
|
|
702
|
+
/* Desktop: the fullscreen markup is a mobile pattern — center it as a phone-like
|
|
703
|
+
column over the dimmed backdrop instead of stretching edge-to-edge. */
|
|
704
|
+
@media (min-width: 640px) {
|
|
705
|
+
.lumen-modal[data-lumen-fs="true"] {
|
|
706
|
+
inset: auto;
|
|
707
|
+
top: 50%;
|
|
708
|
+
left: 50%;
|
|
709
|
+
transform: translate(-50%, -50%);
|
|
710
|
+
width: min(820px, 92vw);
|
|
711
|
+
height: 88vh;
|
|
712
|
+
max-height: 940px;
|
|
713
|
+
border-radius: 24px;
|
|
714
|
+
overflow: hidden;
|
|
715
|
+
box-shadow: var(--lumen-shadow-lg);
|
|
716
|
+
}
|
|
717
|
+
}
|
|
718
|
+
.lumen-modal[data-lumen-fs="true"] .lumen-modal-grabber,
|
|
719
|
+
.lumen-modal[data-lumen-fs="true"] .lumen-modal-header,
|
|
720
|
+
.lumen-modal[data-lumen-fs="true"] .lumen-stepper,
|
|
721
|
+
.lumen-modal[data-lumen-fs="true"] .lumen-cap-note,
|
|
722
|
+
.lumen-modal[data-lumen-fs="true"] .lumen-modal-footer {
|
|
723
|
+
display: none;
|
|
724
|
+
}
|
|
725
|
+
.lumen-modal[data-lumen-fs="true"] .lumen-modal-body {
|
|
726
|
+
padding: 0;
|
|
727
|
+
position: relative;
|
|
728
|
+
overflow: hidden;
|
|
729
|
+
/* soft surround behind the pre-capture states (record/upload/capturing),
|
|
730
|
+
matching the annotate surround so there's no jump to the markup view */
|
|
731
|
+
background: color-mix(in srgb, var(--lumen-fg) 8%, var(--lumen-bg));
|
|
732
|
+
}
|
|
733
|
+
.lumen-modal[data-lumen-fs="true"] .lumen-pane { position: absolute; inset: 0; }
|
|
734
|
+
/* record prompt / upload picker / "capturing…" centered on the surround */
|
|
735
|
+
.lumen-fs-center {
|
|
736
|
+
position: absolute;
|
|
737
|
+
inset: calc(env(safe-area-inset-top, 0px) + 116px) 20px 24px;
|
|
738
|
+
display: flex;
|
|
739
|
+
flex-direction: column;
|
|
740
|
+
align-items: center;
|
|
741
|
+
justify-content: center;
|
|
742
|
+
gap: 14px;
|
|
743
|
+
text-align: center;
|
|
744
|
+
}
|
|
745
|
+
.lumen-fs-center .lumen-manual-drop,
|
|
746
|
+
.lumen-fs-center .lumen-record-prompt { width: 100%; max-width: 360px; }
|
|
747
|
+
/* method picker (fallback when auto-capture is unavailable) on the surround */
|
|
748
|
+
.lumen-fs-picker { gap: 18px; }
|
|
749
|
+
.lumen-fs-picker-head { display: flex; flex-direction: column; gap: 5px; }
|
|
750
|
+
.lumen-fs-picker-title { font: 700 18px/1.25 var(--lumen-font-ui); color: var(--lumen-fg); }
|
|
751
|
+
.lumen-fs-picker-sub { font: 400 13.5px/1.4 var(--lumen-font-ui); color: var(--lumen-fg-muted); }
|
|
752
|
+
.lumen-fs-picker .lumen-method { width: 100%; max-width: 360px; padding: 0; }
|
|
753
|
+
.lumen-modal[data-lumen-fs="true"] .lumen-annotate {
|
|
754
|
+
position: absolute;
|
|
755
|
+
inset: 0;
|
|
756
|
+
padding: calc(env(safe-area-inset-top, 0px) + 126px) 14px 192px;
|
|
757
|
+
/* Theme-aware soft surround (harmonizes with the sheet — no harsh black):
|
|
758
|
+
light → soft grey, dark → slightly lifted dark. */
|
|
759
|
+
background: color-mix(in srgb, var(--lumen-fg) 8%, var(--lumen-bg));
|
|
760
|
+
place-items: center;
|
|
761
|
+
}
|
|
762
|
+
.lumen-modal[data-lumen-fs="true"] .lumen-annotate-frame {
|
|
763
|
+
max-width: 100%;
|
|
764
|
+
max-height: 100%;
|
|
765
|
+
border-radius: var(--lumen-r-lg);
|
|
766
|
+
box-shadow: 0 10px 36px -10px rgb(0 0 0 / 0.22), 0 0 0 0.5px rgb(0 0 0 / 0.07);
|
|
767
|
+
}
|
|
768
|
+
.lumen-modal[data-lumen-fs="true"] .lumen-annotate-frame canvas {
|
|
769
|
+
max-height: calc(100dvh - 210px);
|
|
770
|
+
}
|
|
771
|
+
/* floating top chrome: ✕ · method switch · Recapture (replaces the old
|
|
772
|
+
method-switch + cap-actions in the fullscreen capture surface) */
|
|
773
|
+
.lumen-modal[data-lumen-fs="true"] .lumen-cap-actions { display: none; }
|
|
774
|
+
.lumen-fs-top {
|
|
775
|
+
position: absolute;
|
|
776
|
+
top: 0;
|
|
777
|
+
left: 0;
|
|
778
|
+
right: 0;
|
|
779
|
+
z-index: 6;
|
|
780
|
+
display: flex;
|
|
781
|
+
flex-direction: column;
|
|
782
|
+
gap: 10px;
|
|
783
|
+
padding: calc(env(safe-area-inset-top, 0px) + 18px) 12px 14px;
|
|
784
|
+
background: transparent;
|
|
785
|
+
}
|
|
786
|
+
.lumen-fs-toprow { display: flex; align-items: center; gap: 8px; }
|
|
787
|
+
.lumen-fs-row-corners { justify-content: space-between; }
|
|
788
|
+
.lumen-fs-row-pill { justify-content: center; }
|
|
789
|
+
.lumen-fs-pill {
|
|
790
|
+
display: inline-flex;
|
|
791
|
+
align-items: center;
|
|
792
|
+
gap: 2px;
|
|
793
|
+
padding: 4px;
|
|
794
|
+
border-radius: 19px;
|
|
795
|
+
background: rgb(20 20 24 / 0.66);
|
|
796
|
+
backdrop-filter: blur(18px) saturate(150%);
|
|
797
|
+
-webkit-backdrop-filter: blur(18px) saturate(150%);
|
|
798
|
+
}
|
|
799
|
+
.lumen-fs-pill-btn {
|
|
800
|
+
width: 38px;
|
|
801
|
+
height: 30px;
|
|
802
|
+
border: 0;
|
|
803
|
+
background: transparent;
|
|
804
|
+
color: rgb(255 255 255 / 0.6);
|
|
805
|
+
border-radius: 15px;
|
|
806
|
+
display: grid;
|
|
807
|
+
place-items: center;
|
|
808
|
+
cursor: pointer;
|
|
809
|
+
}
|
|
810
|
+
.lumen-fs-pill-btn svg { width: 16px; height: 16px; }
|
|
811
|
+
.lumen-fs-pill-btn[aria-pressed="true"] { background: rgb(255 255 255 / 0.2); color: #fff; }
|
|
812
|
+
.lumen-fs-pill-btn.lumen-fs-pentog[data-on="true"] { background: var(--lumen-accent); color: #fff; }
|
|
813
|
+
.lumen-fs-pill-sep { width: 0.5px; height: 20px; background: rgb(255 255 255 / 0.22); margin: 0 3px; }
|
|
814
|
+
/* annotation colour: single swatch button → popover (declutters the palette) */
|
|
815
|
+
.lumen-fs-color { position: relative; display: inline-flex; align-items: center; }
|
|
816
|
+
.lumen-fs-color-btn {
|
|
817
|
+
width: 24px;
|
|
818
|
+
height: 24px;
|
|
819
|
+
border-radius: 50%;
|
|
820
|
+
border: 2px solid rgb(255 255 255 / 0.55);
|
|
821
|
+
padding: 0;
|
|
822
|
+
cursor: pointer;
|
|
823
|
+
background-clip: padding-box;
|
|
824
|
+
}
|
|
825
|
+
.lumen-fs-color-overlay { position: fixed; inset: 0; z-index: 7; }
|
|
826
|
+
.lumen-fs-color-pop {
|
|
827
|
+
position: absolute;
|
|
828
|
+
bottom: 42px;
|
|
829
|
+
left: 50%;
|
|
830
|
+
transform: translateX(-50%);
|
|
831
|
+
z-index: 8;
|
|
832
|
+
display: flex;
|
|
833
|
+
gap: 9px;
|
|
834
|
+
padding: 9px 11px;
|
|
835
|
+
border-radius: 14px;
|
|
836
|
+
background: rgb(26 26 30 / 0.98);
|
|
837
|
+
backdrop-filter: blur(20px) saturate(160%);
|
|
838
|
+
-webkit-backdrop-filter: blur(20px) saturate(160%);
|
|
839
|
+
border: 0.5px solid rgb(255 255 255 / 0.16);
|
|
840
|
+
box-shadow: 0 16px 40px rgb(0 0 0 / 0.5);
|
|
841
|
+
}
|
|
842
|
+
.lumen-fs-color-pop .lumen-swatch {
|
|
843
|
+
width: 26px;
|
|
844
|
+
height: 26px;
|
|
845
|
+
border-color: rgb(255 255 255 / 0.25);
|
|
846
|
+
}
|
|
847
|
+
.lumen-fs-color-pop .lumen-swatch[aria-pressed="true"] {
|
|
848
|
+
box-shadow: 0 0 0 2px rgb(26 26 30), 0 0 0 4px #fff;
|
|
849
|
+
}
|
|
850
|
+
.lumen-fs-recap { position: relative; }
|
|
851
|
+
.lumen-fs-recap-overlay { position: fixed; inset: 0; z-index: 7; }
|
|
852
|
+
.lumen-fs-recap-menu {
|
|
853
|
+
position: absolute;
|
|
854
|
+
right: 0;
|
|
855
|
+
top: 46px;
|
|
856
|
+
width: 252px;
|
|
857
|
+
z-index: 8;
|
|
858
|
+
padding: 6px;
|
|
859
|
+
border-radius: 14px;
|
|
860
|
+
background: rgb(26 26 30 / 0.98);
|
|
861
|
+
backdrop-filter: blur(20px) saturate(160%);
|
|
862
|
+
-webkit-backdrop-filter: blur(20px) saturate(160%);
|
|
863
|
+
border: 0.5px solid rgb(255 255 255 / 0.16);
|
|
864
|
+
box-shadow: 0 18px 44px rgb(0 0 0 / 0.5);
|
|
865
|
+
}
|
|
866
|
+
.lumen-fs-recap-menu button {
|
|
867
|
+
display: flex;
|
|
868
|
+
align-items: flex-start;
|
|
869
|
+
gap: 11px;
|
|
870
|
+
width: 100%;
|
|
871
|
+
padding: 9px 10px;
|
|
872
|
+
border: 0;
|
|
873
|
+
background: transparent;
|
|
874
|
+
border-radius: 9px;
|
|
875
|
+
cursor: pointer;
|
|
876
|
+
text-align: left;
|
|
877
|
+
}
|
|
878
|
+
.lumen-fs-recap-menu button:active { background: rgb(255 255 255 / 0.08); }
|
|
879
|
+
.lumen-fs-mi-ic {
|
|
880
|
+
width: 30px;
|
|
881
|
+
height: 30px;
|
|
882
|
+
flex: none;
|
|
883
|
+
border-radius: 8px;
|
|
884
|
+
background: rgb(255 255 255 / 0.1);
|
|
885
|
+
color: #fff;
|
|
886
|
+
display: grid;
|
|
887
|
+
place-items: center;
|
|
888
|
+
}
|
|
889
|
+
.lumen-fs-mi-ic svg { width: 16px; height: 16px; }
|
|
890
|
+
.lumen-fs-recap-menu b {
|
|
891
|
+
display: block;
|
|
892
|
+
font: 600 13px/1.2 var(--lumen-font-ui);
|
|
893
|
+
color: #fff;
|
|
894
|
+
}
|
|
895
|
+
.lumen-fs-recap-menu small {
|
|
896
|
+
display: block;
|
|
897
|
+
font: 400 11px/1.3 var(--lumen-font-ui);
|
|
898
|
+
color: rgb(255 255 255 / 0.55);
|
|
899
|
+
margin-top: 2px;
|
|
900
|
+
}
|
|
901
|
+
.lumen-fs-chip {
|
|
902
|
+
height: 38px;
|
|
903
|
+
padding: 0 14px;
|
|
904
|
+
border: 0;
|
|
905
|
+
border-radius: 19px;
|
|
906
|
+
background: rgb(20 20 24 / 0.66);
|
|
907
|
+
color: #fff;
|
|
908
|
+
backdrop-filter: blur(18px) saturate(150%);
|
|
909
|
+
-webkit-backdrop-filter: blur(18px) saturate(150%);
|
|
910
|
+
display: inline-flex;
|
|
911
|
+
align-items: center;
|
|
912
|
+
gap: 6px;
|
|
913
|
+
font: 600 14px/1 var(--lumen-font-ui);
|
|
914
|
+
cursor: pointer;
|
|
915
|
+
}
|
|
916
|
+
.lumen-fs-chip svg { width: 15px; height: 15px; }
|
|
917
|
+
.lumen-fs-x { width: 38px; padding: 0; justify-content: center; font-size: 15px; }
|
|
918
|
+
.lumen-fs-mswitch {
|
|
919
|
+
display: inline-flex;
|
|
920
|
+
gap: 2px;
|
|
921
|
+
padding: 4px;
|
|
922
|
+
border-radius: 19px;
|
|
923
|
+
background: rgb(20 20 24 / 0.66);
|
|
924
|
+
backdrop-filter: blur(18px) saturate(150%);
|
|
925
|
+
-webkit-backdrop-filter: blur(18px) saturate(150%);
|
|
926
|
+
}
|
|
927
|
+
.lumen-fs-mswitch button {
|
|
928
|
+
width: 38px;
|
|
929
|
+
height: 30px;
|
|
930
|
+
border: 0;
|
|
931
|
+
background: transparent;
|
|
932
|
+
color: rgb(255 255 255 / 0.6);
|
|
933
|
+
border-radius: 15px;
|
|
934
|
+
display: grid;
|
|
935
|
+
place-items: center;
|
|
936
|
+
cursor: pointer;
|
|
937
|
+
}
|
|
938
|
+
.lumen-fs-mswitch button[aria-pressed="true"] { background: rgb(255 255 255 / 0.2); color: #fff; }
|
|
939
|
+
.lumen-fs-mswitch svg { width: 16px; height: 16px; }
|
|
940
|
+
/* floating glass tool palette */
|
|
941
|
+
.lumen-modal[data-lumen-fs="true"] .lumen-toolbar {
|
|
942
|
+
position: absolute;
|
|
943
|
+
left: 50%;
|
|
944
|
+
bottom: 168px;
|
|
945
|
+
transform: translateX(-50%);
|
|
946
|
+
z-index: 7;
|
|
947
|
+
margin: 0;
|
|
948
|
+
width: auto;
|
|
949
|
+
max-width: calc(100% - 20px);
|
|
950
|
+
justify-content: center;
|
|
951
|
+
flex-wrap: nowrap;
|
|
952
|
+
gap: 6px;
|
|
953
|
+
padding: 7px 9px;
|
|
954
|
+
background: rgb(20 20 24 / 0.82);
|
|
955
|
+
backdrop-filter: blur(22px) saturate(160%);
|
|
956
|
+
-webkit-backdrop-filter: blur(22px) saturate(160%);
|
|
957
|
+
border: 0;
|
|
958
|
+
box-shadow: 0 12px 32px rgb(0 0 0 / 0.45);
|
|
959
|
+
}
|
|
960
|
+
/* one-row palette: 4 colors, tight groups */
|
|
961
|
+
.lumen-modal[data-lumen-fs="true"] .lumen-swatch:nth-child(n+5) { display: none; }
|
|
962
|
+
.lumen-modal[data-lumen-fs="true"] .lumen-swatches { gap: 5px; }
|
|
963
|
+
.lumen-modal[data-lumen-fs="true"] .lumen-segmented { gap: 1px; padding: 0; background: transparent; }
|
|
964
|
+
.lumen-modal[data-lumen-fs="true"] .lumen-segmented,
|
|
965
|
+
.lumen-modal[data-lumen-fs="true"] .lumen-stroke-sizes { background: rgb(255 255 255 / 0.1); border: 0; }
|
|
966
|
+
.lumen-modal[data-lumen-fs="true"] .lumen-tool { color: rgb(255 255 255 / 0.7); padding: 7px; }
|
|
967
|
+
.lumen-modal[data-lumen-fs="true"] .lumen-tool svg { width: 18px; height: 18px; display: block; }
|
|
968
|
+
.lumen-modal[data-lumen-fs="true"] .lumen-tool[disabled] { opacity: 0.4; }
|
|
969
|
+
/* top-left group: ✕ + pen-toggle (show/hide tools) */
|
|
970
|
+
.lumen-fs-topl { display: flex; align-items: center; gap: 8px; }
|
|
971
|
+
.lumen-fs-pentog { width: 38px; padding: 0; justify-content: center; }
|
|
972
|
+
.lumen-fs-pentog[data-on="true"] { background: var(--lumen-accent); color: #fff; }
|
|
973
|
+
.lumen-fs-pentog svg { width: 17px; height: 17px; }
|
|
974
|
+
/* bottom compose: description + voice + Next (replaces the footer in fullscreen) */
|
|
975
|
+
.lumen-fs-compose {
|
|
976
|
+
position: absolute;
|
|
977
|
+
left: 0;
|
|
978
|
+
right: 0;
|
|
979
|
+
bottom: 0;
|
|
980
|
+
z-index: 6;
|
|
981
|
+
background: var(--lumen-bg);
|
|
982
|
+
border-radius: var(--lumen-r-lg) var(--lumen-r-lg) 0 0;
|
|
983
|
+
box-shadow: 0 -0.5px 0 var(--lumen-border), 0 -16px 40px rgb(0 0 0 / 0.4);
|
|
984
|
+
padding: 12px 16px calc(16px + var(--lumen-keyboard-inset, 0px));
|
|
985
|
+
display: flex;
|
|
986
|
+
flex-direction: column;
|
|
987
|
+
gap: 10px;
|
|
988
|
+
}
|
|
989
|
+
.lumen-fs-desc { width: 100%; }
|
|
990
|
+
.lumen-fs-next { height: 48px; }
|
|
991
|
+
.lumen-fs-compose .lumen-voice-capture { margin: 0; padding: 0; }
|
|
992
|
+
/* grabber to minimize the sheet */
|
|
993
|
+
.lumen-fs-grab {
|
|
994
|
+
display: block;
|
|
995
|
+
width: 100%;
|
|
996
|
+
height: 16px;
|
|
997
|
+
padding: 0;
|
|
998
|
+
border: 0;
|
|
999
|
+
background: transparent;
|
|
1000
|
+
cursor: pointer;
|
|
1001
|
+
position: relative;
|
|
1002
|
+
flex: none;
|
|
1003
|
+
margin-top: -4px;
|
|
1004
|
+
}
|
|
1005
|
+
.lumen-fs-grab::before {
|
|
1006
|
+
content: "";
|
|
1007
|
+
position: absolute;
|
|
1008
|
+
top: 4px;
|
|
1009
|
+
left: 50%;
|
|
1010
|
+
transform: translateX(-50%);
|
|
1011
|
+
width: 36px;
|
|
1012
|
+
height: 5px;
|
|
1013
|
+
border-radius: 3px;
|
|
1014
|
+
background: var(--lumen-border-strong);
|
|
1015
|
+
}
|
|
1016
|
+
/* compact voice: mic lives in the field; hide the big idle button + hint */
|
|
1017
|
+
.lumen-fs-field { position: relative; }
|
|
1018
|
+
.lumen-fs-field .lumen-fs-desc { padding-right: 46px; }
|
|
1019
|
+
.lumen-fs-mic {
|
|
1020
|
+
position: absolute;
|
|
1021
|
+
right: 6px;
|
|
1022
|
+
top: 50%;
|
|
1023
|
+
transform: translateY(-50%);
|
|
1024
|
+
width: 34px;
|
|
1025
|
+
height: 34px;
|
|
1026
|
+
border: 0;
|
|
1027
|
+
border-radius: 50%;
|
|
1028
|
+
display: grid;
|
|
1029
|
+
place-items: center;
|
|
1030
|
+
color: var(--lumen-accent);
|
|
1031
|
+
background: color-mix(in srgb, var(--lumen-accent) 14%, transparent);
|
|
1032
|
+
cursor: pointer;
|
|
1033
|
+
}
|
|
1034
|
+
.lumen-fs-mic svg { width: 17px; height: 17px; }
|
|
1035
|
+
.lumen-fs-compose .lumen-voice-capture-btn,
|
|
1036
|
+
.lumen-fs-compose .lumen-voice-capture-hint { display: none; }
|
|
1037
|
+
/* collapse the sheet down to reveal the full capture */
|
|
1038
|
+
.lumen-fs-compose { transition: transform 0.32s var(--lumen-ease); }
|
|
1039
|
+
.lumen-modal[data-lumen-sheet="down"] .lumen-fs-compose {
|
|
1040
|
+
transform: translateY(calc(100% - 26px));
|
|
1041
|
+
}
|
|
1042
|
+
/* Minimizing the sheet must NOT hide the tool palette — only the pen-toggle
|
|
1043
|
+
(toolsHidden) controls that. */
|
|
1044
|
+
.lumen-modal[data-lumen-fs="true"] .lumen-tool[aria-pressed="true"] {
|
|
1045
|
+
background: var(--lumen-accent);
|
|
1046
|
+
color: #fff;
|
|
1047
|
+
box-shadow: none;
|
|
1048
|
+
}
|
|
1049
|
+
.lumen-modal[data-lumen-fs="true"] .lumen-toolbar .lumen-btn-ghost { color: rgb(255 255 255 / 0.85); }
|
|
1050
|
+
.lumen-modal[data-lumen-fs="true"] .lumen-toolbar-sep { background: rgb(255 255 255 / 0.2); }
|
|
1051
|
+
.lumen-modal[data-lumen-fs="true"] .lumen-stroke-size-dot { background: #fff; }
|
|
1052
|
+
/* footer = bottom action bar over the screen */
|
|
1053
|
+
.lumen-modal[data-lumen-fs="true"] .lumen-modal-footer {
|
|
1054
|
+
position: absolute;
|
|
1055
|
+
left: 0;
|
|
1056
|
+
right: 0;
|
|
1057
|
+
bottom: 0;
|
|
1058
|
+
z-index: 5;
|
|
1059
|
+
}
|
|
1060
|
+
|
|
1061
|
+
/* ─── Review & send detent (step 2) — a taller sheet that rises over the
|
|
1062
|
+
dimmed, annotated capture; editable priority/platform/description → Send ── */
|
|
1063
|
+
.lumen-rv-pane { position: absolute; inset: 0; overflow: hidden; pointer-events: none; }
|
|
1064
|
+
.lumen-rv-pane > .lumen-rv { pointer-events: auto; }
|
|
1065
|
+
/* On the review step the shared AnnotationLayer is still mounted behind the
|
|
1066
|
+
panel — anchor it to the top so it peeks above the sheet, and freeze it
|
|
1067
|
+
(no accidental drawing while reviewing). */
|
|
1068
|
+
.lumen-modal[data-lumen-review="true"] .lumen-annotate {
|
|
1069
|
+
padding: calc(env(safe-area-inset-top, 0px) + 22px) 14px 0;
|
|
1070
|
+
align-items: start;
|
|
1071
|
+
pointer-events: none;
|
|
1072
|
+
}
|
|
1073
|
+
.lumen-rv-scrim { position: absolute; inset: 0; background: rgb(8 10 18 / 0.5); }
|
|
1074
|
+
.lumen-rv {
|
|
1075
|
+
position: absolute;
|
|
1076
|
+
left: 0;
|
|
1077
|
+
right: 0;
|
|
1078
|
+
bottom: 0;
|
|
1079
|
+
z-index: 6;
|
|
1080
|
+
max-height: 80%;
|
|
1081
|
+
display: flex;
|
|
1082
|
+
flex-direction: column;
|
|
1083
|
+
background: var(--lumen-bg);
|
|
1084
|
+
border-radius: var(--lumen-r-lg) var(--lumen-r-lg) 0 0;
|
|
1085
|
+
box-shadow: 0 -0.5px 0 var(--lumen-border), 0 -16px 50px rgb(0 0 0 / 0.45);
|
|
1086
|
+
padding: 4px 16px calc(16px + var(--lumen-keyboard-inset, 0px));
|
|
1087
|
+
animation: lumen-rv-rise 0.34s var(--lumen-ease);
|
|
1088
|
+
}
|
|
1089
|
+
@keyframes lumen-rv-rise {
|
|
1090
|
+
from { transform: translateY(18px); opacity: 0; }
|
|
1091
|
+
to { transform: translateY(0); opacity: 1; }
|
|
1092
|
+
}
|
|
1093
|
+
.lumen-rv-head {
|
|
1094
|
+
flex: none;
|
|
1095
|
+
display: flex;
|
|
1096
|
+
align-items: center;
|
|
1097
|
+
justify-content: space-between;
|
|
1098
|
+
height: 46px;
|
|
1099
|
+
}
|
|
1100
|
+
.lumen-rv-back {
|
|
1101
|
+
display: inline-flex;
|
|
1102
|
+
align-items: center;
|
|
1103
|
+
gap: 1px;
|
|
1104
|
+
border: 0;
|
|
1105
|
+
background: transparent;
|
|
1106
|
+
cursor: pointer;
|
|
1107
|
+
color: var(--lumen-accent);
|
|
1108
|
+
font: 600 14px/1 var(--lumen-font-ui);
|
|
1109
|
+
padding: 6px 4px 6px 0;
|
|
1110
|
+
}
|
|
1111
|
+
.lumen-rv-back svg { width: 18px; height: 18px; }
|
|
1112
|
+
.lumen-rv-title { font: 600 15px/1 var(--lumen-font-ui); color: var(--lumen-fg); }
|
|
1113
|
+
.lumen-rv-spacer { width: 52px; }
|
|
1114
|
+
.lumen-rv-rows {
|
|
1115
|
+
flex: 1;
|
|
1116
|
+
min-height: 0;
|
|
1117
|
+
overflow-y: auto;
|
|
1118
|
+
-webkit-overflow-scrolling: touch;
|
|
1119
|
+
}
|
|
1120
|
+
.lumen-rv-set {
|
|
1121
|
+
display: flex;
|
|
1122
|
+
flex-direction: column;
|
|
1123
|
+
gap: 9px;
|
|
1124
|
+
padding: 12px 0;
|
|
1125
|
+
border-top: 0.5px solid var(--lumen-border);
|
|
1126
|
+
}
|
|
1127
|
+
.lumen-rv-set:first-child { border-top: 0; padding-top: 4px; }
|
|
1128
|
+
.lumen-rv-k {
|
|
1129
|
+
color: var(--lumen-fg-muted);
|
|
1130
|
+
font: 600 12.5px/1.3 var(--lumen-font-ui);
|
|
1131
|
+
}
|
|
1132
|
+
.lumen-rv-muted { color: var(--lumen-fg-muted); font-weight: 400; }
|
|
1133
|
+
.lumen-rv-desc {
|
|
1134
|
+
width: 100%;
|
|
1135
|
+
min-height: 52px;
|
|
1136
|
+
resize: none;
|
|
1137
|
+
font: 400 15px/1.4 var(--lumen-font-ui);
|
|
1138
|
+
}
|
|
1139
|
+
.lumen-rv-chips, .lumen-rv-prio { display: flex; gap: 7px; flex-wrap: wrap; }
|
|
1140
|
+
.lumen-rv-chip,
|
|
1141
|
+
.lumen-rv-prio-opt {
|
|
1142
|
+
display: inline-flex;
|
|
1143
|
+
align-items: center;
|
|
1144
|
+
gap: 7px;
|
|
1145
|
+
height: 34px;
|
|
1146
|
+
padding: 0 13px;
|
|
1147
|
+
border-radius: 9px;
|
|
1148
|
+
border: 1px solid var(--lumen-border);
|
|
1149
|
+
background: transparent;
|
|
1150
|
+
color: var(--lumen-fg);
|
|
1151
|
+
font: 600 13px/1 var(--lumen-font-ui);
|
|
1152
|
+
cursor: pointer;
|
|
1153
|
+
}
|
|
1154
|
+
.lumen-rv-chip[aria-pressed="true"],
|
|
1155
|
+
.lumen-rv-prio-opt[aria-pressed="true"] {
|
|
1156
|
+
border-color: var(--lumen-accent);
|
|
1157
|
+
background: color-mix(in srgb, var(--lumen-accent) 10%, transparent);
|
|
1158
|
+
color: var(--lumen-accent);
|
|
1159
|
+
}
|
|
1160
|
+
/* Linear-style priority glyphs */
|
|
1161
|
+
.lumen-pri-ic {
|
|
1162
|
+
display: inline-flex;
|
|
1163
|
+
align-items: flex-end;
|
|
1164
|
+
gap: 2px;
|
|
1165
|
+
height: 12px;
|
|
1166
|
+
color: var(--lumen-fg-muted);
|
|
1167
|
+
}
|
|
1168
|
+
.lumen-rv-prio-opt[aria-pressed="true"] .lumen-pri-ic { color: var(--lumen-accent); }
|
|
1169
|
+
.lumen-pri-bars i { width: 3px; border-radius: 1px; background: currentColor; opacity: 0.3; }
|
|
1170
|
+
.lumen-pri-bars i:nth-child(1) { height: 5px; }
|
|
1171
|
+
.lumen-pri-bars i:nth-child(2) { height: 8px; }
|
|
1172
|
+
.lumen-pri-bars i:nth-child(3) { height: 12px; }
|
|
1173
|
+
.lumen-pri-bars[data-level="1"] i:nth-child(1),
|
|
1174
|
+
.lumen-pri-bars[data-level="2"] i:nth-child(1),
|
|
1175
|
+
.lumen-pri-bars[data-level="2"] i:nth-child(2),
|
|
1176
|
+
.lumen-pri-bars[data-level="3"] i { opacity: 1; }
|
|
1177
|
+
.lumen-pri-urgent {
|
|
1178
|
+
width: 14px;
|
|
1179
|
+
height: 14px;
|
|
1180
|
+
border-radius: 4px;
|
|
1181
|
+
background: #f2994a;
|
|
1182
|
+
color: #fff;
|
|
1183
|
+
align-items: center;
|
|
1184
|
+
justify-content: center;
|
|
1185
|
+
font: 800 10px/1 var(--lumen-font-ui);
|
|
1186
|
+
}
|
|
1187
|
+
.lumen-rv-row {
|
|
1188
|
+
display: flex;
|
|
1189
|
+
align-items: center;
|
|
1190
|
+
justify-content: space-between;
|
|
1191
|
+
gap: 12px;
|
|
1192
|
+
padding: 11px 0;
|
|
1193
|
+
border-top: 0.5px solid var(--lumen-border);
|
|
1194
|
+
font: 400 13px/1.3 var(--lumen-font-ui);
|
|
1195
|
+
}
|
|
1196
|
+
.lumen-rv-rk { color: var(--lumen-fg-muted); font-weight: 600; }
|
|
1197
|
+
.lumen-rv-rv {
|
|
1198
|
+
color: var(--lumen-fg);
|
|
1199
|
+
display: inline-flex;
|
|
1200
|
+
align-items: center;
|
|
1201
|
+
gap: 8px;
|
|
1202
|
+
}
|
|
1203
|
+
.lumen-rv-rows .lumen-label { padding: 12px 0 0; border-top: 0.5px solid var(--lumen-border); }
|
|
1204
|
+
/* voice control reads as a neat bordered pill in the review (no oversized icon
|
|
1205
|
+
/ no text wrap) — matching the dashed "Attach a video" affordance */
|
|
1206
|
+
.lumen-rv-rows .lumen-audio-row .lumen-btn-ghost {
|
|
1207
|
+
display: inline-flex;
|
|
1208
|
+
align-items: center;
|
|
1209
|
+
gap: 7px;
|
|
1210
|
+
white-space: nowrap;
|
|
1211
|
+
height: 36px;
|
|
1212
|
+
padding: 0 14px;
|
|
1213
|
+
border: 1px solid var(--lumen-border);
|
|
1214
|
+
border-radius: 10px;
|
|
1215
|
+
}
|
|
1216
|
+
.lumen-rv-rows .lumen-audio-row .lumen-btn-ghost svg { width: 17px; height: 17px; flex: none; }
|
|
1217
|
+
.lumen-rv-attachrow { padding: 12px 0 2px; }
|
|
1218
|
+
.lumen-rv-attach {
|
|
1219
|
+
display: inline-flex;
|
|
1220
|
+
align-items: center;
|
|
1221
|
+
gap: 7px;
|
|
1222
|
+
height: 36px;
|
|
1223
|
+
padding: 0 13px;
|
|
1224
|
+
border-radius: 10px;
|
|
1225
|
+
border: 1px dashed color-mix(in srgb, var(--lumen-fg) 28%, transparent);
|
|
1226
|
+
background: transparent;
|
|
1227
|
+
color: var(--lumen-fg-muted);
|
|
1228
|
+
font: 600 13px/1 var(--lumen-font-ui);
|
|
1229
|
+
cursor: pointer;
|
|
1230
|
+
}
|
|
1231
|
+
.lumen-rv-attach svg { width: 15px; height: 15px; }
|
|
1232
|
+
.lumen-rv-attach input { display: none; }
|
|
1233
|
+
.lumen-rv-send {
|
|
1234
|
+
flex: none;
|
|
1235
|
+
height: 50px;
|
|
1236
|
+
margin-top: 12px;
|
|
1237
|
+
display: inline-flex;
|
|
1238
|
+
align-items: center;
|
|
1239
|
+
justify-content: center;
|
|
1240
|
+
gap: 9px;
|
|
1241
|
+
}
|
|
1242
|
+
.lumen-rv-send svg { width: 18px; height: 18px; }
|
|
1243
|
+
|
|
661
1244
|
/* ─── Comment / speech-bubble annotations (inline-editable, Figma-style) ── */
|
|
662
1245
|
.lumen-bubble-layer {
|
|
663
1246
|
position: absolute;
|