@agent-native/core 0.175.2-nightly-20260826150235 → 0.175.3

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.
Files changed (64) hide show
  1. package/corpus/README.md +1 -1
  2. package/corpus/templates/clips/app/components/player/comments-panel.tsx +1 -1
  3. package/corpus/templates/clips/app/components/player/video-player.tsx +5 -3
  4. package/corpus/templates/clips/desktop/src/app.tsx +171 -51
  5. package/corpus/templates/clips/desktop/src/lib/pill-completion.ts +111 -0
  6. package/corpus/templates/clips/desktop/src/lib/pill-session.ts +34 -0
  7. package/corpus/templates/clips/desktop/src/lib/recorder.ts +181 -79
  8. package/corpus/templates/clips/desktop/src/lib/rewind-recording-start.ts +28 -4
  9. package/corpus/templates/clips/desktop/src/main.tsx +4 -4
  10. package/corpus/templates/clips/desktop/src/overlays/record-pill.tsx +1320 -0
  11. package/corpus/templates/clips/desktop/src/overlays/recording-pill.tsx +1 -1
  12. package/corpus/templates/clips/desktop/src/styles.css +20 -308
  13. package/corpus/templates/clips/desktop/src/tailwind.css +85 -0
  14. package/corpus/templates/clips/desktop/src-tauri/src/clips/mod.rs +153 -70
  15. package/corpus/templates/clips/desktop/src-tauri/src/lib.rs +15 -0
  16. package/corpus/templates/clips/desktop/src-tauri/src/native_screen/custom_capture.rs +25 -7
  17. package/corpus/templates/clips/desktop/src-tauri/src/native_screen/live_upload.rs +3 -3
  18. package/corpus/templates/clips/desktop/src-tauri/src/native_screen.rs +375 -24
  19. package/corpus/templates/clips/desktop/src-tauri/src/recording_indicator.rs +22 -30
  20. package/corpus/templates/clips/desktop/src-tauri/src/rewind_clip.rs +5 -0
  21. package/corpus/templates/clips/desktop/src-tauri/src/screen_memory.rs +134 -14
  22. package/corpus/templates/clips/desktop/src-tauri/src/tray.rs +233 -4
  23. package/corpus/templates/clips/desktop/src-tauri/src/util.rs +8 -5
  24. package/corpus/templates/design/.generated/bridge/editor-chrome.generated.ts +1 -1
  25. package/corpus/templates/design/.generated/bridge/embedded-wheel.generated.ts +3 -2
  26. package/corpus/templates/design/.generated/bridge/zoom.generated.ts +8 -2
  27. package/corpus/templates/design/app/components/design/DesignCanvas.tsx +46 -10
  28. package/corpus/templates/design/app/components/design/MultiScreenCanvas.tsx +89 -63
  29. package/corpus/templates/design/app/components/design/bridge/editor-chrome.bridge.ts +3 -1
  30. package/corpus/templates/design/app/components/design/bridge/embedded-wheel.bridge.ts +8 -2
  31. package/corpus/templates/design/app/components/design/bridge/zoom.bridge.ts +11 -2
  32. package/corpus/templates/design/app/components/design/multi-screen/types.ts +3 -4
  33. package/corpus/templates/design/app/components/design/multi-screen/zoom-gesture.ts +19 -63
  34. package/corpus/templates/design/app/pages/design-editor/overview-camera.ts +2 -1
  35. package/corpus/templates/design/shared/canvas-math.ts +11 -1
  36. package/corpus/templates/slides/app/components/editor/EditorSidebar.tsx +44 -18
  37. package/corpus/templates/slides/app/components/editor/SlideEditor.tsx +88 -23
  38. package/corpus/templates/slides/app/context/DeckContext.tsx +155 -86
  39. package/corpus/templates/slides/app/pages/DeckEditor.tsx +7 -5
  40. package/corpus/templates/slides/changelog/2026-08-26-thumbnail-arrow-keys-now-navigate-slides-after-selection.md +6 -0
  41. package/dist/client/hooks/index.d.ts +1 -0
  42. package/dist/client/hooks/index.js +1 -0
  43. package/dist/client/use-pinch-zoom.js +17 -4
  44. package/dist/client/zoom-gesture.d.ts +74 -0
  45. package/dist/client/zoom-gesture.js +100 -0
  46. package/dist/collab/routes.d.ts +1 -1
  47. package/dist/collab/struct-routes.d.ts +1 -1
  48. package/dist/observability/routes.d.ts +3 -3
  49. package/dist/provider-api/actions/custom-provider-registration.d.ts +12 -12
  50. package/dist/provider-api/actions/provider-api.d.ts +13 -13
  51. package/dist/server/agent-engine-api-key-route.d.ts +1 -1
  52. package/dist/server/builder-browser.d.ts +13 -13
  53. package/dist/server/builder-browser.js +46 -15
  54. package/dist/server/builder-oauth.d.ts +12 -0
  55. package/dist/server/builder-oauth.js +13 -2
  56. package/dist/server/core-routes-plugin.js +54 -19
  57. package/dist/server/realtime-token.d.ts +1 -1
  58. package/dist/server/transcribe-voice.d.ts +1 -1
  59. package/dist/vite/client.js +2 -0
  60. package/docs/content/template-chat-developers.mdx +100 -13
  61. package/docs/content/template-chat-first-edits.mdx +5 -5
  62. package/docs/content/template-chat.mdx +84 -36
  63. package/package.json +4 -3
  64. package/corpus/templates/clips/desktop/src/overlays/toolbar.tsx +0 -458
@@ -40,7 +40,7 @@ interface PillContext {
40
40
  * and capture-excluded — see `recording_indicator.rs`. We only deal with
41
41
  * sizing the window when the user toggles the chevron.
42
42
  */
43
- export function RecordingPill() {
43
+ export function MeetingPill() {
44
44
  const [expanded, setExpanded] = useState(false);
45
45
  const [paused, setPaused] = useState(false);
46
46
  const [elapsed, setElapsed] = useState(0);
@@ -25,11 +25,10 @@
25
25
  --radius: 12px;
26
26
  --radius-sm: 8px;
27
27
  --radius-pill: 999px;
28
- /* Keep the side and bottom shadow clear of the transparent Tauri window.
29
- The top is intentionally tighter: the popover should feel attached to
30
- its menu-bar icon, where a clipped shadow is not visible anyway. */
31
- --popover-shadow-gutter: 24px;
32
- --popover-shadow-gutter-top: 6px;
28
+ /* Transparent apron reserved for CSS-painted shadows on the overlays that
29
+ still use them (bubble, countdown). The popover and other converted
30
+ windows are sized to their content exactly and use the native NSWindow
31
+ shadow instead. */
33
32
  --overlay-shadow-gutter: 18px;
34
33
 
35
34
  --shadow-sm: 0 1px 2px rgba(23, 23, 23, 0.06);
@@ -67,9 +66,9 @@
67
66
  }
68
67
 
69
68
  /* Tauri window is `transparent: true` + `decorations: false`, so the HTML
70
- paints the visible shape. A padded transparent outer, with a rounded
71
- inner panel that carries the actual background + shadow, gives us the
72
- round-cornered chromeless popover. */
69
+ paints the visible shape. The popover window is sized to the rounded panel
70
+ exactly; macOS derives a native shadow from the panel's alpha, giving us
71
+ the round-cornered chromeless popover with no transparent apron. */
73
72
  html,
74
73
  body {
75
74
  margin: 0;
@@ -116,10 +115,6 @@ body[data-clips-route]:not([data-clips-route="popover"]) #root {
116
115
  overflow: hidden;
117
116
  }
118
117
 
119
- body[data-clips-route="recording-pill"] #root {
120
- padding: var(--overlay-shadow-gutter);
121
- }
122
-
123
118
  /* ------------------------------------------------------------------------- */
124
119
  /* App shell */
125
120
  /* ------------------------------------------------------------------------- */
@@ -132,14 +127,12 @@ body[data-clips-route="recording-pill"] #root {
132
127
  gap: 14px;
133
128
  background: var(--bg);
134
129
  border: 1px solid var(--border);
130
+ /* The rounded corners shape the native NSWindow shadow — the window is
131
+ sized to this panel exactly, so a CSS box-shadow would just clip. */
135
132
  border-radius: 14px;
136
- /* Subtle drop shadow so the popover visually detaches from the menu bar. */
137
- box-shadow: var(--shadow-md);
138
133
  /* No fixed height — the Tauri window is resized to match the rendered
139
134
  content via resize_popover, so the shell just flows naturally. */
140
- max-height: calc(
141
- 100vh - var(--popover-shadow-gutter) - var(--popover-shadow-gutter)
142
- );
135
+ max-height: 100vh;
143
136
  overflow-y: auto;
144
137
  overflow-x: hidden;
145
138
  overscroll-behavior: contain;
@@ -3418,291 +3411,6 @@ body[data-clips-route="recording-pill"] #root {
3418
3411
  border-color: rgba(245, 158, 11, 0.35);
3419
3412
  }
3420
3413
 
3421
- /* ------------------------------------------------------------------------- */
3422
- /* Vertical Loom-style recording pill */
3423
- /* ------------------------------------------------------------------------- */
3424
-
3425
- .toolbar-v {
3426
- position: fixed;
3427
- left: var(--overlay-shadow-gutter);
3428
- top: var(--overlay-shadow-gutter);
3429
- width: 72px;
3430
- height: 150px;
3431
- display: flex;
3432
- flex-direction: column;
3433
- align-items: center;
3434
- /* Pin content to the top in BOTH states. The primary controls are
3435
- centered inside their own fixed-height zone (.toolbar-v-primary), so
3436
- the collapsed→expanded growth only adds room BELOW them. Without this,
3437
- flipping justify-content center→flex-start on hover yanked the Stop
3438
- button up toward the bar's top edge. */
3439
- justify-content: flex-start;
3440
- /* Equal inset on all four sides from the pill edge to the buttons. */
3441
- padding: 10px;
3442
- overflow: hidden;
3443
- border-radius: 24px;
3444
- background: rgba(20, 22, 28, 0.94);
3445
- backdrop-filter: blur(20px);
3446
- -webkit-backdrop-filter: blur(20px);
3447
- border: 1px solid rgba(255, 255, 255, 0.06);
3448
- user-select: none;
3449
- -webkit-user-select: none;
3450
- cursor: grab;
3451
- transition: border-radius 170ms cubic-bezier(0.2, 0.8, 0.2, 1);
3452
- }
3453
-
3454
- .toolbar-v:hover,
3455
- .toolbar-v:focus-within {
3456
- /* Matches TOOLBAR_EXPANDED_HEIGHT in toolbar.tsx — the fixed 130px primary
3457
- zone + 88px hover actions (+2 margin) + 20px vertical padding. */
3458
- height: 240px;
3459
- border-radius: 26px;
3460
- }
3461
-
3462
- .toolbar-v:active {
3463
- cursor: grabbing;
3464
- }
3465
-
3466
- /* Fixed-height home for Stop / time / Pause. Its height equals the collapsed
3467
- pill's content box (150px − 20px vertical padding = 130px), so the trio is
3468
- centered exactly as before when collapsed and never shifts when the pill
3469
- grows on hover — the extra height flows into .toolbar-v-hover-actions below. */
3470
- .toolbar-v-primary {
3471
- flex: 0 0 130px;
3472
- display: flex;
3473
- flex-direction: column;
3474
- align-items: center;
3475
- justify-content: center;
3476
- gap: 10px;
3477
- }
3478
-
3479
- .toolbar-v-stop {
3480
- width: 30px;
3481
- height: 30px;
3482
- min-width: 30px;
3483
- min-height: 30px;
3484
- flex: 0 0 30px;
3485
- aspect-ratio: 1 / 1;
3486
- border-radius: 50%;
3487
- border: none;
3488
- /* orange-500 — a touch softer than the red-orange we had before. */
3489
- background: #f97316;
3490
- color: white;
3491
- cursor: pointer;
3492
- display: inline-flex;
3493
- align-items: center;
3494
- justify-content: center;
3495
- padding: 0;
3496
- }
3497
-
3498
- .toolbar-v-stop:hover {
3499
- background: #ea580c;
3500
- }
3501
-
3502
- .toolbar-v-stop:active {
3503
- transform: scale(0.94);
3504
- }
3505
-
3506
- .toolbar-v-stop-square {
3507
- width: 14px;
3508
- height: 14px;
3509
- background: currentColor;
3510
- border-radius: 2px;
3511
- display: inline-block;
3512
- }
3513
-
3514
- .toolbar-v-spinner {
3515
- animation: toolbar-v-spin 0.8s linear infinite;
3516
- }
3517
-
3518
- @keyframes toolbar-v-spin {
3519
- to {
3520
- transform: rotate(360deg);
3521
- }
3522
- }
3523
-
3524
- .toolbar-v-time {
3525
- flex: 0 0 auto;
3526
- appearance: none;
3527
- padding: 2px 4px;
3528
- border: 0;
3529
- border-radius: 6px;
3530
- background: transparent;
3531
- font-variant-numeric: tabular-nums;
3532
- font-size: 14px;
3533
- font-weight: 600;
3534
- color: white;
3535
- letter-spacing: 0.3px;
3536
- cursor: pointer;
3537
- }
3538
-
3539
- .toolbar-v-time:hover,
3540
- .toolbar-v-time:focus-visible {
3541
- background: rgba(255, 255, 255, 0.1);
3542
- outline: none;
3543
- }
3544
-
3545
- .toolbar-v-time-preparing {
3546
- font-size: 9px;
3547
- letter-spacing: 0;
3548
- }
3549
-
3550
- .toolbar-v-pause {
3551
- width: 30px;
3552
- height: 30px;
3553
- min-width: 30px;
3554
- min-height: 30px;
3555
- flex: 0 0 30px;
3556
- aspect-ratio: 1 / 1;
3557
- border-radius: 50%;
3558
- background: rgba(255, 255, 255, 0.08);
3559
- color: rgba(255, 255, 255, 0.9);
3560
- border: none;
3561
- cursor: pointer;
3562
- display: inline-flex;
3563
- align-items: center;
3564
- justify-content: center;
3565
- padding: 0;
3566
- }
3567
-
3568
- .toolbar-v-pause:hover {
3569
- background: rgba(255, 255, 255, 0.1);
3570
- color: white;
3571
- }
3572
-
3573
- .toolbar-v-hover-actions {
3574
- display: flex;
3575
- flex-direction: column;
3576
- align-items: center;
3577
- gap: 8px;
3578
- height: 0;
3579
- margin-top: 0;
3580
- overflow: hidden;
3581
- opacity: 0;
3582
- transform: translateY(-6px);
3583
- pointer-events: none;
3584
- visibility: hidden;
3585
- transition:
3586
- opacity 130ms ease-out,
3587
- transform 170ms cubic-bezier(0.2, 0.8, 0.2, 1);
3588
- }
3589
-
3590
- .toolbar-v:hover .toolbar-v-hover-actions,
3591
- .toolbar-v:focus-within .toolbar-v-hover-actions {
3592
- height: 88px;
3593
- margin-top: 2px;
3594
- opacity: 1;
3595
- transform: translateY(0);
3596
- pointer-events: auto;
3597
- visibility: visible;
3598
- }
3599
-
3600
- .toolbar-v-action {
3601
- width: 40px;
3602
- height: 40px;
3603
- min-width: 40px;
3604
- min-height: 40px;
3605
- flex: 0 0 40px;
3606
- aspect-ratio: 1 / 1;
3607
- border-radius: 999px;
3608
- border: none;
3609
- background: transparent;
3610
- color: rgba(255, 255, 255, 0.95);
3611
- cursor: pointer;
3612
- display: inline-flex;
3613
- align-items: center;
3614
- justify-content: center;
3615
- padding: 0;
3616
- transition:
3617
- background-color 120ms ease-out,
3618
- color 120ms ease-out,
3619
- transform 120ms ease-out;
3620
- }
3621
-
3622
- .toolbar-v-action:hover {
3623
- background: rgba(255, 255, 255, 0.12);
3624
- color: white;
3625
- }
3626
-
3627
- .toolbar-v-action:active {
3628
- transform: scale(0.94);
3629
- }
3630
-
3631
- .toolbar-v-action-danger:hover {
3632
- background: rgba(255, 255, 255, 0.14);
3633
- }
3634
-
3635
- .toolbar-v-paused {
3636
- border-color: rgba(245, 158, 11, 0.35);
3637
- }
3638
-
3639
- /* Pre-record state: the toolbar is visible during the bubble session so the
3640
- user can drag + position it before hitting Start. Buttons are disabled
3641
- (no recorder to drive yet). Greyed out + not-allowed cursor makes the
3642
- "not yet" affordance obvious. */
3643
- .toolbar-v-disabled .toolbar-v-stop,
3644
- .toolbar-v-disabled .toolbar-v-pause,
3645
- .toolbar-v-disabled .toolbar-v-action {
3646
- background: rgba(255, 255, 255, 0.06);
3647
- color: rgba(255, 255, 255, 0.35);
3648
- cursor: not-allowed;
3649
- pointer-events: auto;
3650
- }
3651
- .toolbar-v-disabled .toolbar-v-stop:hover,
3652
- .toolbar-v-disabled .toolbar-v-pause:hover,
3653
- .toolbar-v-disabled .toolbar-v-action:hover {
3654
- background: rgba(255, 255, 255, 0.06);
3655
- color: rgba(255, 255, 255, 0.35);
3656
- }
3657
- .toolbar-v-stop:disabled,
3658
- .toolbar-v-pause:disabled,
3659
- .toolbar-v-action:disabled {
3660
- cursor: not-allowed;
3661
- }
3662
-
3663
- .toolbar-v-disk-indicator {
3664
- display: flex;
3665
- align-items: center;
3666
- justify-content: center;
3667
- color: #f59e0b;
3668
- opacity: 0.9;
3669
- flex-shrink: 0;
3670
- }
3671
-
3672
- .toolbar-v-disk-indicator-critical {
3673
- color: #ef4444;
3674
- animation: toolbar-v-disk-pulse 1.4s ease-in-out infinite;
3675
- }
3676
-
3677
- @keyframes toolbar-v-disk-pulse {
3678
- 0%,
3679
- 100% {
3680
- opacity: 0.7;
3681
- }
3682
- 50% {
3683
- opacity: 1;
3684
- }
3685
- }
3686
-
3687
- .toolbar-v-disk-warning {
3688
- border-color: rgba(245, 158, 11, 0.45);
3689
- }
3690
-
3691
- .toolbar-v-disk-critical {
3692
- border-color: rgba(239, 68, 68, 0.5);
3693
- }
3694
-
3695
- @media (prefers-reduced-motion: reduce) {
3696
- .toolbar-v,
3697
- .toolbar-v-hover-actions,
3698
- .toolbar-v-action {
3699
- transition: none;
3700
- }
3701
- .toolbar-v-disk-indicator-critical {
3702
- animation: none;
3703
- }
3704
- }
3705
-
3706
3414
  /* ------------------------------------------------------------------------- */
3707
3415
  /* Overlay: camera bubble */
3708
3416
  /* ------------------------------------------------------------------------- */
@@ -4498,10 +4206,12 @@ body[data-clips-route="recording-pill"] #root {
4498
4206
 
4499
4207
  /* Wispr Flow-style dictation pill: small capsule anchored to the bottom
4500
4208
  of its (transparent) overlay window. The window itself is positioned
4501
- bottom-center on the primary display by show_flow_bar in Rust. */
4209
+ bottom-center on the primary display by show_flow_bar in Rust, sized to
4210
+ the content exactly — elevation is the native NSWindow shadow, so there
4211
+ is no transparent shadow-gutter apron here. */
4502
4212
  .flow-bar-root {
4503
4213
  position: fixed;
4504
- inset: var(--overlay-shadow-gutter);
4214
+ inset: 0;
4505
4215
  display: flex;
4506
4216
  flex-direction: column;
4507
4217
  align-items: center;
@@ -4930,10 +4640,12 @@ body[data-clips-route="recording-pill"] #root {
4930
4640
  /* Overlay: recording pill */
4931
4641
  /* ------------------------------------------------------------------------- */
4932
4642
 
4933
- /* Fills the window minus the shadow gutter `#root` already pads out. The
4934
- collapsed capsule centers here rather than hugging a corner: hover is polled
4935
- against the window frame, so slack between frame and capsule would light the
4936
- pill up while the cursor is nowhere near it. */
4643
+ /* Fills the window, which Rust sizes to the visible capsule exactly —
4644
+ elevation is the native NSWindow shadow (see recording_indicator.rs), so
4645
+ there is no transparent shadow-gutter apron here. The collapsed capsule
4646
+ centers rather than hugging a corner: hover is polled against the window
4647
+ frame, so slack between frame and capsule would light the pill up while
4648
+ the cursor is nowhere near it. */
4937
4649
  .pill-outer {
4938
4650
  display: flex;
4939
4651
  height: 100%;
@@ -280,3 +280,88 @@
280
280
  --radius-md: calc(var(--radius) - 2px);
281
281
  --radius-sm: calc(var(--radius) - 4px);
282
282
  }
283
+
284
+ /* Recording pill (overlays/record-pill.tsx). The pill is floating capture
285
+ chrome that renders over arbitrary screen content, so its palette is
286
+ theme-invariant by design — these values are contractual from the tray
287
+ redesign spec, not theme tokens. */
288
+ .record-pill-scope {
289
+ /* guard:allow-raw-color — theme-invariant capture chrome, spec-contractual palette */
290
+ --pill-chrome: #1e1e1e;
291
+ /* guard:allow-raw-color — theme-invariant capture chrome, spec-contractual palette */
292
+ --pill-control: rgba(255, 255, 255, 0.1);
293
+ /* guard:allow-raw-color — theme-invariant capture chrome, spec-contractual palette */
294
+ --pill-rec: #e0473f;
295
+ /* guard:allow-raw-color — theme-invariant capture chrome, spec-contractual palette */
296
+ --pill-meter: #97c459;
297
+ /* guard:allow-raw-color — theme-invariant capture chrome, spec-contractual palette */
298
+ --pill-card-surface: rgba(252, 252, 252, 0.98);
299
+ /* guard:allow-raw-color — theme-invariant capture chrome, spec-contractual palette */
300
+ --pill-card-ink: #1c1c1e;
301
+ /* guard:allow-raw-color — theme-invariant capture chrome, spec-contractual palette */
302
+ --pill-card-ink-2: #6b6b70;
303
+ /* guard:allow-raw-color — theme-invariant capture chrome, spec-contractual palette */
304
+ --pill-card-ink-3: #a3a3a8;
305
+ /* guard:allow-raw-color — theme-invariant capture chrome, spec-contractual palette */
306
+ --pill-card-badge: #3e9b4f;
307
+ /* guard:allow-raw-color — theme-invariant capture chrome, spec-contractual palette */
308
+ --pill-card-badge-bg: #e9f4ea;
309
+ /* guard:allow-raw-color — theme-invariant capture chrome, spec-contractual palette */
310
+ --pill-card-badge-warn: #a9701a;
311
+ /* guard:allow-raw-color — theme-invariant capture chrome, spec-contractual palette */
312
+ --pill-card-badge-warn-bg: #f8efdd;
313
+ /* guard:allow-raw-color — theme-invariant capture chrome, spec-contractual palette */
314
+ --pill-on-chrome: #ffffff;
315
+ /* guard:allow-raw-color — theme-invariant capture chrome, spec-contractual palette */
316
+ --pill-soft: rgba(255, 255, 255, 0.15);
317
+ /* guard:allow-raw-color — theme-invariant capture chrome, spec-contractual palette */
318
+ --pill-q-ink: rgba(255, 255, 255, 0.82);
319
+ /* guard:allow-raw-color — theme-invariant capture chrome, spec-contractual palette */
320
+ --pill-ghost-ink: rgba(255, 255, 255, 0.72);
321
+ /* guard:allow-raw-color — theme-invariant capture chrome, spec-contractual palette */
322
+ --pill-card-border: rgba(0, 0, 0, 0.15);
323
+ /* guard:allow-raw-color — theme-invariant capture chrome, spec-contractual palette */
324
+ --pill-card-border-strong: rgba(0, 0, 0, 0.2);
325
+ /* guard:allow-raw-color — theme-invariant capture chrome, spec-contractual palette */
326
+ --pill-card-well: rgba(0, 0, 0, 0.05);
327
+ --pill-ease: cubic-bezier(0.3, 0, 0, 1);
328
+ }
329
+
330
+ .record-pill-mono {
331
+ font-family: ui-monospace, "SF Mono", Menlo, monospace;
332
+ }
333
+
334
+ /* Collapsible pill segment: measured at natural width and animated between 0
335
+ and exact pixels (never max-width — a guessed value wastes the easing tail
336
+ and lands segments out of sync). Content is right-anchored so it slides as
337
+ a solid block instead of being wiped by the clip edge. */
338
+ .record-pill-seg {
339
+ display: flex;
340
+ align-items: center;
341
+ justify-content: flex-end;
342
+ overflow: hidden;
343
+ flex: none;
344
+ width: 0;
345
+ opacity: 0;
346
+ }
347
+
348
+ .record-pill-card-in {
349
+ animation: record-pill-card-in 220ms var(--pill-ease);
350
+ }
351
+
352
+ @keyframes record-pill-card-in {
353
+ from {
354
+ opacity: 0;
355
+ transform: translateY(6px) scale(0.98);
356
+ }
357
+ to {
358
+ opacity: 1;
359
+ transform: none;
360
+ }
361
+ }
362
+
363
+ @media (prefers-reduced-motion: reduce) {
364
+ .record-pill-card-in {
365
+ animation: none;
366
+ }
367
+ }