@usevyre/react 1.1.0 → 1.2.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.
@@ -3013,3 +3013,851 @@
3013
3013
  width: 100%;
3014
3014
  max-width: 200px;
3015
3015
  }
3016
+
3017
+ /* ── ITEM ────────────────────────────────────────────────────── */
3018
+ .vyre-item {
3019
+ display: flex;
3020
+ align-items: center;
3021
+ gap: var(--vyre-spacing-4);
3022
+ width: 100%;
3023
+ background: var(--vyre-color-semantic-surface);
3024
+ border: 1px solid transparent;
3025
+ border-radius: var(--vyre-border-radius-lg);
3026
+ color: var(--vyre-color-semantic-text-primary);
3027
+ text-align: left;
3028
+ transition:
3029
+ background-color var(--vyre-transition-duration-fast) var(--vyre-transition-easing-out),
3030
+ border-color var(--vyre-transition-duration-fast) var(--vyre-transition-easing-out);
3031
+ }
3032
+
3033
+ /* Sizes */
3034
+ .vyre-item--sm { padding: var(--vyre-spacing-2) var(--vyre-spacing-3); gap: var(--vyre-spacing-3); }
3035
+ .vyre-item--md { padding: var(--vyre-spacing-3) var(--vyre-spacing-4); }
3036
+ .vyre-item--lg { padding: var(--vyre-spacing-4) var(--vyre-spacing-5); }
3037
+
3038
+ /* Variants */
3039
+ .vyre-item--default { /* base styles above */ }
3040
+ .vyre-item--outlined {
3041
+ border-color: var(--vyre-color-semantic-border-subtle);
3042
+ }
3043
+ .vyre-item--muted {
3044
+ background: var(--vyre-color-semantic-surface-raised);
3045
+ }
3046
+ .vyre-item--plain {
3047
+ background: transparent;
3048
+ border-color: transparent;
3049
+ }
3050
+
3051
+ /* Clickable */
3052
+ .vyre-item--clickable { cursor: pointer; }
3053
+ .vyre-item--clickable:hover {
3054
+ background: var(--vyre-color-semantic-surface-raised);
3055
+ }
3056
+ .vyre-item--clickable:focus-visible {
3057
+ outline: 2px solid var(--vyre-color-semantic-accent);
3058
+ outline-offset: -2px;
3059
+ }
3060
+
3061
+ /* Media slot (icon / avatar / thumbnail) */
3062
+ .vyre-item__media {
3063
+ display: flex;
3064
+ align-items: center;
3065
+ justify-content: center;
3066
+ flex-shrink: 0;
3067
+ color: var(--vyre-color-semantic-text-muted);
3068
+ }
3069
+ .vyre-item__media > svg { width: 20px; height: 20px; }
3070
+
3071
+ /* Content column */
3072
+ .vyre-item__content {
3073
+ display: flex;
3074
+ flex-direction: column;
3075
+ gap: var(--vyre-spacing-1);
3076
+ flex: 1 1 auto;
3077
+ min-width: 0;
3078
+ }
3079
+
3080
+ .vyre-item__title {
3081
+ font-size: var(--vyre-typography-font-size-sm);
3082
+ font-weight: var(--vyre-typography-font-weight-medium);
3083
+ line-height: var(--vyre-typography-line-height-snug);
3084
+ color: var(--vyre-color-semantic-text-primary);
3085
+ }
3086
+
3087
+ .vyre-item__description {
3088
+ margin: 0;
3089
+ font-size: var(--vyre-typography-font-size-sm);
3090
+ line-height: var(--vyre-typography-line-height-normal);
3091
+ color: var(--vyre-color-semantic-text-muted);
3092
+ }
3093
+
3094
+ .vyre-item--sm .vyre-item__title,
3095
+ .vyre-item--sm .vyre-item__description { font-size: var(--vyre-typography-font-size-xs); }
3096
+ .vyre-item--lg .vyre-item__title { font-size: var(--vyre-typography-font-size-md); }
3097
+
3098
+ /* Actions slot (pinned right) */
3099
+ .vyre-item__actions {
3100
+ display: flex;
3101
+ align-items: center;
3102
+ gap: var(--vyre-spacing-2);
3103
+ flex-shrink: 0;
3104
+ margin-left: auto;
3105
+ }
3106
+
3107
+ /* Group */
3108
+ .vyre-item-group {
3109
+ display: flex;
3110
+ flex-direction: column;
3111
+ }
3112
+ .vyre-item-group--separated .vyre-item:not(:last-child) {
3113
+ border-bottom: 1px solid var(--vyre-color-semantic-border-subtle);
3114
+ border-radius: 0;
3115
+ }
3116
+ .vyre-item-group--separated .vyre-item:first-child {
3117
+ border-top-left-radius: var(--vyre-border-radius-lg);
3118
+ border-top-right-radius: var(--vyre-border-radius-lg);
3119
+ }
3120
+ .vyre-item-group--separated .vyre-item:last-child {
3121
+ border-bottom-left-radius: var(--vyre-border-radius-lg);
3122
+ border-bottom-right-radius: var(--vyre-border-radius-lg);
3123
+ }
3124
+
3125
+ /* ── DATE RANGE PICKER ───────────────────────────────────────── */
3126
+ .vyre-date-range-picker {
3127
+ display: inline-block;
3128
+ }
3129
+
3130
+ .vyre-date-range-picker__popover {
3131
+ position: absolute;
3132
+ z-index: 1060;
3133
+ display: flex;
3134
+ align-items: stretch;
3135
+ background: var(--vyre-color-semantic-surface);
3136
+ border: 1px solid var(--vyre-color-semantic-border-subtle);
3137
+ border-radius: var(--vyre-border-radius-lg);
3138
+ box-shadow: var(--vyre-shadow-lg);
3139
+ overflow: hidden;
3140
+ animation: vyre-fade-in 120ms ease;
3141
+ }
3142
+
3143
+ .vyre-date-range-picker__presets {
3144
+ display: flex;
3145
+ flex-direction: column;
3146
+ gap: var(--vyre-spacing-1);
3147
+ padding: var(--vyre-spacing-3);
3148
+ border-right: 1px solid var(--vyre-color-semantic-border-subtle);
3149
+ min-width: 140px;
3150
+ }
3151
+
3152
+ .vyre-date-range-picker__preset {
3153
+ display: block;
3154
+ width: 100%;
3155
+ text-align: left;
3156
+ padding: var(--vyre-spacing-2) var(--vyre-spacing-3);
3157
+ background: none;
3158
+ border: none;
3159
+ border-radius: var(--vyre-border-radius-md);
3160
+ color: var(--vyre-color-semantic-text-secondary);
3161
+ font-size: var(--vyre-typography-font-size-sm);
3162
+ cursor: pointer;
3163
+ transition:
3164
+ background-color var(--vyre-transition-duration-fast) var(--vyre-transition-easing-out),
3165
+ color var(--vyre-transition-duration-fast) var(--vyre-transition-easing-out);
3166
+ }
3167
+ .vyre-date-range-picker__preset:hover {
3168
+ background: var(--vyre-color-semantic-surface-raised);
3169
+ color: var(--vyre-color-semantic-text-primary);
3170
+ }
3171
+ .vyre-date-range-picker__preset:focus-visible {
3172
+ outline: 2px solid var(--vyre-color-semantic-accent);
3173
+ outline-offset: -2px;
3174
+ }
3175
+
3176
+ .vyre-date-range-picker__calendars {
3177
+ display: flex;
3178
+ gap: var(--vyre-spacing-4);
3179
+ padding: var(--vyre-spacing-4);
3180
+ }
3181
+
3182
+ @media (max-width: 640px) {
3183
+ .vyre-date-range-picker__popover {
3184
+ flex-direction: column;
3185
+ }
3186
+ .vyre-date-range-picker__presets {
3187
+ flex-direction: row;
3188
+ flex-wrap: wrap;
3189
+ border-right: none;
3190
+ border-bottom: 1px solid var(--vyre-color-semantic-border-subtle);
3191
+ min-width: 0;
3192
+ }
3193
+ .vyre-date-range-picker__calendars {
3194
+ flex-direction: column;
3195
+ }
3196
+ }
3197
+
3198
+ /* ── KANBAN ──────────────────────────────────────────────────── */
3199
+ .vyre-kanban {
3200
+ display: flex;
3201
+ gap: var(--vyre-spacing-2);
3202
+ align-items: flex-start;
3203
+ overflow-x: auto;
3204
+ padding-bottom: var(--vyre-spacing-2);
3205
+ }
3206
+
3207
+ .vyre-kanban__column {
3208
+ display: flex;
3209
+ flex-direction: column;
3210
+ flex: 0 0 280px;
3211
+ max-height: 100%;
3212
+ background: var(--vyre-color-semantic-surface-raised);
3213
+ border: 1px solid var(--vyre-color-semantic-border-subtle);
3214
+ border-radius: var(--vyre-border-radius-lg);
3215
+ padding: var(--vyre-spacing-3);
3216
+ transition:
3217
+ border-color var(--vyre-transition-duration-fast) var(--vyre-transition-easing-out),
3218
+ background-color var(--vyre-transition-duration-fast) var(--vyre-transition-easing-out);
3219
+ }
3220
+ .vyre-kanban__column--over {
3221
+ border-color: var(--vyre-color-semantic-accent);
3222
+ background: var(--vyre-color-semantic-accent-subtle);
3223
+ }
3224
+
3225
+ .vyre-kanban__column-header {
3226
+ display: flex;
3227
+ align-items: center;
3228
+ justify-content: space-between;
3229
+ gap: var(--vyre-spacing-2);
3230
+ padding: var(--vyre-spacing-1) var(--vyre-spacing-2) var(--vyre-spacing-3);
3231
+ }
3232
+ .vyre-kanban__column-title {
3233
+ font-size: var(--vyre-typography-font-size-sm);
3234
+ font-weight: var(--vyre-typography-font-weight-semibold);
3235
+ color: var(--vyre-color-semantic-text-primary);
3236
+ }
3237
+ .vyre-kanban__column-count {
3238
+ display: inline-flex;
3239
+ align-items: center;
3240
+ justify-content: center;
3241
+ min-width: 20px;
3242
+ height: 20px;
3243
+ padding: 0 var(--vyre-spacing-2);
3244
+ font-size: var(--vyre-typography-font-size-xs);
3245
+ font-weight: var(--vyre-typography-font-weight-medium);
3246
+ color: var(--vyre-color-semantic-text-muted);
3247
+ background: var(--vyre-color-semantic-surface);
3248
+ border: 1px solid var(--vyre-color-semantic-border-subtle);
3249
+ border-radius: var(--vyre-border-radius-full);
3250
+ }
3251
+
3252
+ .vyre-kanban__cards {
3253
+ display: flex;
3254
+ flex-direction: column;
3255
+ gap: var(--vyre-spacing-2);
3256
+ min-height: var(--vyre-spacing-12);
3257
+ overflow-y: auto;
3258
+ }
3259
+
3260
+ /* Card is the visual shell (.vyre-card); these rules only add the
3261
+ drag affordances on top of it. */
3262
+ .vyre-kanban__card {
3263
+ cursor: grab;
3264
+ transition:
3265
+ opacity var(--vyre-transition-duration-fast) var(--vyre-transition-easing-out),
3266
+ box-shadow var(--vyre-transition-duration-fast) var(--vyre-transition-easing-out),
3267
+ border-color var(--vyre-transition-duration-fast) var(--vyre-transition-easing-out);
3268
+ }
3269
+ .vyre-kanban__card:hover {
3270
+ border-color: var(--vyre-color-semantic-border);
3271
+ box-shadow: var(--vyre-shadow-sm);
3272
+ }
3273
+ .vyre-kanban__card--dragging {
3274
+ opacity: 0.5;
3275
+ cursor: grabbing;
3276
+ }
3277
+ .vyre-kanban__card--clickable {
3278
+ cursor: pointer;
3279
+ }
3280
+ .vyre-kanban__card--clickable:active {
3281
+ cursor: grabbing;
3282
+ }
3283
+ .vyre-kanban__card--clickable:focus-visible {
3284
+ outline: 2px solid var(--vyre-color-semantic-accent);
3285
+ outline-offset: 2px;
3286
+ }
3287
+ .vyre-kanban__card .vyre-card__body {
3288
+ padding: var(--vyre-spacing-3);
3289
+ }
3290
+
3291
+ .vyre-kanban__card-title {
3292
+ font-size: var(--vyre-typography-font-size-sm);
3293
+ font-weight: var(--vyre-typography-font-weight-medium);
3294
+ line-height: var(--vyre-typography-line-height-snug);
3295
+ color: var(--vyre-color-semantic-text-primary);
3296
+ }
3297
+ .vyre-kanban__card-desc {
3298
+ margin-top: var(--vyre-spacing-1);
3299
+ font-size: var(--vyre-typography-font-size-xs);
3300
+ line-height: var(--vyre-typography-line-height-normal);
3301
+ color: var(--vyre-color-semantic-text-muted);
3302
+ }
3303
+
3304
+ .vyre-kanban__empty {
3305
+ display: flex;
3306
+ align-items: center;
3307
+ justify-content: center;
3308
+ padding: var(--vyre-spacing-6) var(--vyre-spacing-3);
3309
+ font-size: var(--vyre-typography-font-size-xs);
3310
+ color: var(--vyre-color-semantic-text-muted);
3311
+ border: 1px dashed var(--vyre-color-semantic-border-subtle);
3312
+ border-radius: var(--vyre-border-radius-md);
3313
+ }
3314
+
3315
+ /* Column tints (data-color) */
3316
+ .vyre-kanban__column[data-color="accent"] { background: var(--vyre-color-semantic-accent-subtle); border-color: var(--vyre-color-semantic-accent-subtle-border); }
3317
+ .vyre-kanban__column[data-color="teal"] { background: var(--vyre-color-semantic-teal-subtle); }
3318
+ .vyre-kanban__column[data-color="success"] { background: var(--vyre-color-semantic-success-subtle); border-color: var(--vyre-color-semantic-success-subtle-border); }
3319
+ .vyre-kanban__column[data-color="warning"] { background: var(--vyre-color-semantic-warning-subtle); border-color: var(--vyre-color-semantic-warning-subtle-border); }
3320
+ .vyre-kanban__column[data-color="danger"] { background: var(--vyre-color-semantic-danger-subtle); border-color: var(--vyre-color-semantic-danger-subtle-border); }
3321
+
3322
+ /* Card tints (data-color) — applied to the wrapping .vyre-card */
3323
+ .vyre-kanban__card[data-color="accent"] { background: var(--vyre-color-semantic-accent-subtle); border-color: var(--vyre-color-semantic-accent-subtle-border); }
3324
+ .vyre-kanban__card[data-color="teal"] { background: var(--vyre-color-semantic-teal-subtle); }
3325
+ .vyre-kanban__card[data-color="success"] { background: var(--vyre-color-semantic-success-subtle); border-color: var(--vyre-color-semantic-success-subtle-border); }
3326
+ .vyre-kanban__card[data-color="warning"] { background: var(--vyre-color-semantic-warning-subtle); border-color: var(--vyre-color-semantic-warning-subtle-border); }
3327
+ .vyre-kanban__card[data-color="danger"] { background: var(--vyre-color-semantic-danger-subtle); border-color: var(--vyre-color-semantic-danger-subtle-border); }
3328
+
3329
+ /* Drop placeholder shown at the target position while dragging */
3330
+ .vyre-kanban__placeholder {
3331
+ height: var(--vyre-spacing-10);
3332
+ border: 2px dashed var(--vyre-color-semantic-accent);
3333
+ border-radius: var(--vyre-border-radius-md);
3334
+ background: var(--vyre-color-semantic-accent-subtle);
3335
+ opacity: 0.7;
3336
+ }
3337
+
3338
+ /* ── CONVERSATION ────────────────────────────────────────────── */
3339
+ .vyre-conversation {
3340
+ display: flex;
3341
+ flex-direction: column;
3342
+ min-height: 0;
3343
+ background: var(--vyre-color-semantic-surface);
3344
+ border: 1px solid var(--vyre-color-semantic-border-subtle);
3345
+ border-radius: var(--vyre-border-radius-lg);
3346
+ overflow: hidden;
3347
+ }
3348
+
3349
+ .vyre-conversation__thread {
3350
+ display: flex;
3351
+ flex-direction: column;
3352
+ gap: var(--vyre-spacing-1);
3353
+ padding: var(--vyre-spacing-4);
3354
+ overflow-y: auto;
3355
+ flex: 1 1 auto;
3356
+ }
3357
+
3358
+ .vyre-conversation__day {
3359
+ display: flex;
3360
+ align-items: center;
3361
+ justify-content: center;
3362
+ margin: var(--vyre-spacing-3) 0;
3363
+ }
3364
+ .vyre-conversation__day span {
3365
+ font-size: var(--vyre-typography-font-size-xs);
3366
+ color: var(--vyre-color-semantic-text-muted);
3367
+ background: var(--vyre-color-semantic-surface-raised);
3368
+ border: 1px solid var(--vyre-color-semantic-border-subtle);
3369
+ padding: var(--vyre-spacing-1) var(--vyre-spacing-3);
3370
+ border-radius: var(--vyre-border-radius-full);
3371
+ }
3372
+
3373
+ .vyre-conversation__row {
3374
+ display: flex;
3375
+ align-items: flex-end;
3376
+ gap: var(--vyre-spacing-2);
3377
+ width: 100%;
3378
+ }
3379
+ .vyre-conversation__row--in { justify-content: flex-start; }
3380
+ .vyre-conversation__row--out { justify-content: flex-end; }
3381
+ .vyre-conversation__row--out .vyre-conversation__avatar { display: none; }
3382
+ .vyre-conversation__row--group-end { margin-bottom: var(--vyre-spacing-3); }
3383
+
3384
+ .vyre-conversation__avatar {
3385
+ width: 28px;
3386
+ flex-shrink: 0;
3387
+ }
3388
+
3389
+ .vyre-conversation__stack {
3390
+ display: flex;
3391
+ flex-direction: column;
3392
+ gap: var(--vyre-spacing-1);
3393
+ min-width: 0;
3394
+ max-width: 75%;
3395
+ }
3396
+ .vyre-conversation__row--out .vyre-conversation__stack { align-items: flex-end; }
3397
+
3398
+ .vyre-conversation__author {
3399
+ font-size: var(--vyre-typography-font-size-xs);
3400
+ font-weight: var(--vyre-typography-font-weight-medium);
3401
+ color: var(--vyre-color-semantic-text-secondary);
3402
+ padding: 0 var(--vyre-spacing-1);
3403
+ }
3404
+
3405
+ .vyre-conversation__bubble {
3406
+ padding: var(--vyre-spacing-2) var(--vyre-spacing-3);
3407
+ border-radius: var(--vyre-border-radius-lg);
3408
+ font-size: var(--vyre-typography-font-size-sm);
3409
+ line-height: var(--vyre-typography-line-height-normal);
3410
+ word-break: break-word;
3411
+ white-space: pre-wrap;
3412
+ }
3413
+ .vyre-conversation__row--in .vyre-conversation__bubble {
3414
+ background: var(--vyre-color-semantic-surface-raised);
3415
+ color: var(--vyre-color-semantic-text-primary);
3416
+ border-bottom-left-radius: var(--vyre-border-radius-sm);
3417
+ }
3418
+ .vyre-conversation__row--out .vyre-conversation__bubble {
3419
+ background: var(--vyre-color-semantic-accent);
3420
+ color: var(--vyre-color-semantic-accent-foreground);
3421
+ border-bottom-right-radius: var(--vyre-border-radius-sm);
3422
+ }
3423
+
3424
+ /* Attachments inside a bubble */
3425
+ .vyre-conversation__attachments {
3426
+ display: flex;
3427
+ flex-direction: column;
3428
+ gap: var(--vyre-spacing-2);
3429
+ }
3430
+ .vyre-conversation__attachments:not(:last-child) {
3431
+ margin-bottom: var(--vyre-spacing-2);
3432
+ }
3433
+ .vyre-conversation__att {
3434
+ display: block;
3435
+ max-width: 240px;
3436
+ }
3437
+ .vyre-conversation__att--image img {
3438
+ display: block;
3439
+ width: 100%;
3440
+ max-height: 220px;
3441
+ object-fit: cover;
3442
+ border-radius: var(--vyre-border-radius-md);
3443
+ }
3444
+ .vyre-conversation__att--audio,
3445
+ .vyre-conversation__att--video {
3446
+ width: 240px;
3447
+ max-width: 100%;
3448
+ }
3449
+ .vyre-conversation__att--video {
3450
+ border-radius: var(--vyre-border-radius-md);
3451
+ overflow: hidden;
3452
+ }
3453
+ .vyre-conversation__att--file {
3454
+ display: flex;
3455
+ align-items: center;
3456
+ gap: var(--vyre-spacing-2);
3457
+ padding: var(--vyre-spacing-2) var(--vyre-spacing-3);
3458
+ background: var(--vyre-color-semantic-surface);
3459
+ border: 1px solid var(--vyre-color-semantic-border-subtle);
3460
+ border-radius: var(--vyre-border-radius-md);
3461
+ text-decoration: none;
3462
+ color: inherit;
3463
+ transition: border-color var(--vyre-transition-duration-fast) var(--vyre-transition-easing-out);
3464
+ }
3465
+ .vyre-conversation__att--file:hover {
3466
+ border-color: var(--vyre-color-semantic-border);
3467
+ }
3468
+ .vyre-conversation__att-icon {
3469
+ display: flex;
3470
+ flex-shrink: 0;
3471
+ color: var(--vyre-color-semantic-text-muted);
3472
+ }
3473
+ .vyre-conversation__att-info {
3474
+ display: flex;
3475
+ flex-direction: column;
3476
+ min-width: 0;
3477
+ }
3478
+ .vyre-conversation__att-name {
3479
+ font-size: var(--vyre-typography-font-size-sm);
3480
+ font-weight: var(--vyre-typography-font-weight-medium);
3481
+ color: var(--vyre-color-semantic-text-primary);
3482
+ overflow: hidden;
3483
+ text-overflow: ellipsis;
3484
+ white-space: nowrap;
3485
+ }
3486
+ .vyre-conversation__att-size {
3487
+ font-size: var(--vyre-typography-font-size-xs);
3488
+ color: var(--vyre-color-semantic-text-muted);
3489
+ }
3490
+
3491
+ .vyre-conversation__meta {
3492
+ font-size: var(--vyre-typography-font-size-2xs);
3493
+ color: var(--vyre-color-semantic-text-muted);
3494
+ padding: 0 var(--vyre-spacing-1);
3495
+ }
3496
+ .vyre-conversation__status--read { color: var(--vyre-color-semantic-accent); }
3497
+
3498
+ .vyre-conversation__bubble--typing {
3499
+ display: inline-flex;
3500
+ align-items: center;
3501
+ gap: var(--vyre-spacing-1);
3502
+ }
3503
+ .vyre-conversation__dot {
3504
+ width: 6px;
3505
+ height: 6px;
3506
+ border-radius: var(--vyre-border-radius-full);
3507
+ background: var(--vyre-color-semantic-text-muted);
3508
+ animation: vyre-conversation-typing 1.2s infinite ease-in-out;
3509
+ }
3510
+ .vyre-conversation__dot:nth-child(2) { animation-delay: 0.15s; }
3511
+ .vyre-conversation__dot:nth-child(3) { animation-delay: 0.3s; }
3512
+ .vyre-conversation__typing-label {
3513
+ font-size: var(--vyre-typography-font-size-xs);
3514
+ color: var(--vyre-color-semantic-text-muted);
3515
+ margin-left: var(--vyre-spacing-1);
3516
+ }
3517
+ @keyframes vyre-conversation-typing {
3518
+ 0%, 60%, 100% { opacity: 0.3; transform: translateY(0); }
3519
+ 30% { opacity: 1; transform: translateY(-2px); }
3520
+ }
3521
+
3522
+ .vyre-conversation__composer {
3523
+ display: flex;
3524
+ flex-direction: column;
3525
+ gap: var(--vyre-spacing-2);
3526
+ padding: var(--vyre-spacing-3);
3527
+ border-top: 1px solid var(--vyre-color-semantic-border-subtle);
3528
+ background: var(--vyre-color-semantic-surface);
3529
+ }
3530
+ .vyre-conversation__composer-row {
3531
+ display: flex;
3532
+ align-items: center;
3533
+ gap: var(--vyre-spacing-2);
3534
+ }
3535
+ .vyre-conversation__file-input {
3536
+ display: none;
3537
+ }
3538
+ .vyre-conversation__attach {
3539
+ display: flex;
3540
+ align-items: center;
3541
+ justify-content: center;
3542
+ width: 36px;
3543
+ height: 36px;
3544
+ flex-shrink: 0;
3545
+ color: var(--vyre-color-semantic-text-muted);
3546
+ background: transparent;
3547
+ border: none;
3548
+ border-radius: var(--vyre-border-radius-full);
3549
+ cursor: pointer;
3550
+ transition:
3551
+ color var(--vyre-transition-duration-fast) var(--vyre-transition-easing-out),
3552
+ background-color var(--vyre-transition-duration-fast) var(--vyre-transition-easing-out);
3553
+ }
3554
+ .vyre-conversation__attach:hover {
3555
+ color: var(--vyre-color-semantic-text-primary);
3556
+ background: var(--vyre-color-semantic-surface-raised);
3557
+ }
3558
+ .vyre-conversation__attach:focus-visible {
3559
+ outline: 2px solid var(--vyre-color-semantic-accent);
3560
+ outline-offset: 2px;
3561
+ }
3562
+ .vyre-conversation__staged {
3563
+ display: flex;
3564
+ flex-wrap: wrap;
3565
+ gap: var(--vyre-spacing-2);
3566
+ }
3567
+ .vyre-conversation__chip {
3568
+ display: inline-flex;
3569
+ align-items: center;
3570
+ gap: var(--vyre-spacing-1);
3571
+ max-width: 200px;
3572
+ padding: var(--vyre-spacing-1) var(--vyre-spacing-2);
3573
+ font-size: var(--vyre-typography-font-size-xs);
3574
+ color: var(--vyre-color-semantic-text-secondary);
3575
+ background: var(--vyre-color-semantic-surface-raised);
3576
+ border: 1px solid var(--vyre-color-semantic-border-subtle);
3577
+ border-radius: var(--vyre-border-radius-full);
3578
+ }
3579
+ .vyre-conversation__chip-name {
3580
+ overflow: hidden;
3581
+ text-overflow: ellipsis;
3582
+ white-space: nowrap;
3583
+ }
3584
+ .vyre-conversation__chip-remove {
3585
+ display: flex;
3586
+ align-items: center;
3587
+ justify-content: center;
3588
+ flex-shrink: 0;
3589
+ padding: 2px;
3590
+ color: var(--vyre-color-semantic-text-muted);
3591
+ background: transparent;
3592
+ border: none;
3593
+ border-radius: var(--vyre-border-radius-full);
3594
+ cursor: pointer;
3595
+ }
3596
+ .vyre-conversation__chip-remove:hover {
3597
+ color: var(--vyre-color-semantic-danger);
3598
+ }
3599
+ .vyre-conversation__input {
3600
+ flex: 1 1 auto;
3601
+ min-width: 0;
3602
+ padding: var(--vyre-spacing-2) var(--vyre-spacing-3);
3603
+ font-size: var(--vyre-typography-font-size-sm);
3604
+ color: var(--vyre-color-semantic-text-primary);
3605
+ background: var(--vyre-color-semantic-surface-raised);
3606
+ border: 1px solid var(--vyre-color-semantic-border-subtle);
3607
+ border-radius: var(--vyre-border-radius-full);
3608
+ outline: none;
3609
+ transition: border-color var(--vyre-transition-duration-fast) var(--vyre-transition-easing-out);
3610
+ }
3611
+ .vyre-conversation__input:focus-visible {
3612
+ border-color: var(--vyre-color-semantic-accent);
3613
+ }
3614
+ .vyre-conversation__input::placeholder {
3615
+ color: var(--vyre-color-semantic-text-muted);
3616
+ }
3617
+ .vyre-conversation__send {
3618
+ display: flex;
3619
+ align-items: center;
3620
+ justify-content: center;
3621
+ width: 36px;
3622
+ height: 36px;
3623
+ flex-shrink: 0;
3624
+ color: var(--vyre-color-semantic-accent-foreground);
3625
+ background: var(--vyre-color-semantic-accent);
3626
+ border: none;
3627
+ border-radius: var(--vyre-border-radius-full);
3628
+ cursor: pointer;
3629
+ transition: background-color var(--vyre-transition-duration-fast) var(--vyre-transition-easing-out);
3630
+ }
3631
+ .vyre-conversation__send:hover:not(:disabled) {
3632
+ background: var(--vyre-color-semantic-accent-hover);
3633
+ }
3634
+ .vyre-conversation__send:disabled {
3635
+ opacity: 0.5;
3636
+ cursor: not-allowed;
3637
+ }
3638
+ .vyre-conversation__send:focus-visible {
3639
+ outline: 2px solid var(--vyre-color-semantic-accent);
3640
+ outline-offset: 2px;
3641
+ }
3642
+
3643
+ /* ── RADIO ───────────────────────────────────────────────────── */
3644
+ .vyre-radio-group {
3645
+ display: flex;
3646
+ gap: var(--vyre-spacing-3);
3647
+ }
3648
+ .vyre-radio-group--vertical { flex-direction: column; }
3649
+ .vyre-radio-group--horizontal { flex-direction: row; flex-wrap: wrap; }
3650
+
3651
+ .vyre-radio {
3652
+ display: inline-flex;
3653
+ align-items: flex-start;
3654
+ gap: var(--vyre-spacing-2);
3655
+ cursor: pointer;
3656
+ }
3657
+ .vyre-radio--disabled {
3658
+ cursor: not-allowed;
3659
+ opacity: 0.55;
3660
+ }
3661
+
3662
+ .vyre-radio__input {
3663
+ position: absolute;
3664
+ opacity: 0;
3665
+ width: 1px;
3666
+ height: 1px;
3667
+ margin: 0;
3668
+ pointer-events: none;
3669
+ }
3670
+
3671
+ .vyre-radio__control {
3672
+ flex-shrink: 0;
3673
+ display: flex;
3674
+ align-items: center;
3675
+ justify-content: center;
3676
+ border: 1.5px solid var(--vyre-color-semantic-border-strong);
3677
+ border-radius: var(--vyre-border-radius-full);
3678
+ background: var(--vyre-color-semantic-background);
3679
+ transition:
3680
+ border-color var(--vyre-transition-duration-fast) var(--vyre-transition-easing-out),
3681
+ background var(--vyre-transition-duration-fast) var(--vyre-transition-easing-out);
3682
+ }
3683
+ .vyre-radio--sm .vyre-radio__control { width: 1rem; height: 1rem; }
3684
+ .vyre-radio--md .vyre-radio__control { width: 1.125rem; height: 1.125rem; }
3685
+
3686
+ .vyre-radio__dot {
3687
+ width: 40%;
3688
+ height: 40%;
3689
+ border-radius: var(--vyre-border-radius-full);
3690
+ background: var(--vyre-color-semantic-accent-foreground);
3691
+ transform: scale(0);
3692
+ transition: transform var(--vyre-transition-duration-fast) var(--vyre-transition-easing-out);
3693
+ }
3694
+ .vyre-radio__input:checked ~ .vyre-radio__control {
3695
+ border-color: var(--vyre-color-semantic-accent);
3696
+ background: var(--vyre-color-semantic-accent);
3697
+ }
3698
+ .vyre-radio__input:checked ~ .vyre-radio__control .vyre-radio__dot {
3699
+ transform: scale(1);
3700
+ }
3701
+ .vyre-radio__input:focus-visible ~ .vyre-radio__control {
3702
+ outline: 2px solid var(--vyre-color-semantic-accent);
3703
+ outline-offset: 2px;
3704
+ }
3705
+
3706
+ .vyre-radio__content {
3707
+ display: flex;
3708
+ flex-direction: column;
3709
+ gap: calc(var(--vyre-spacing-1) / 2);
3710
+ line-height: var(--vyre-typography-line-height-snug);
3711
+ }
3712
+ .vyre-radio__label {
3713
+ font-size: var(--vyre-typography-font-size-sm);
3714
+ color: var(--vyre-color-semantic-text-primary);
3715
+ }
3716
+ .vyre-radio__description {
3717
+ font-size: var(--vyre-typography-font-size-xs);
3718
+ color: var(--vyre-color-semantic-text-muted);
3719
+ }
3720
+
3721
+ /* ── FIELD (composable parts) ────────────────────────────────── */
3722
+ .vyre-field__description {
3723
+ margin: 0;
3724
+ font-size: var(--vyre-typography-font-size-xs);
3725
+ color: var(--vyre-color-semantic-text-muted);
3726
+ line-height: var(--vyre-typography-line-height-normal);
3727
+ }
3728
+ .vyre-field__error {
3729
+ margin: 0;
3730
+ font-size: var(--vyre-typography-font-size-xs);
3731
+ color: var(--vyre-color-semantic-danger);
3732
+ line-height: var(--vyre-typography-line-height-normal);
3733
+ }
3734
+
3735
+ .vyre-field-group {
3736
+ display: flex;
3737
+ gap: var(--vyre-spacing-4);
3738
+ }
3739
+ .vyre-field-group--vertical { flex-direction: column; }
3740
+ .vyre-field-group--horizontal { flex-direction: row; flex-wrap: wrap; }
3741
+ .vyre-field-group--horizontal > * { flex: 1 1 0; min-width: 0; }
3742
+
3743
+ .vyre-field-set {
3744
+ display: flex;
3745
+ flex-direction: column;
3746
+ gap: var(--vyre-spacing-3);
3747
+ margin: 0;
3748
+ padding: var(--vyre-spacing-4);
3749
+ border: 1px solid var(--vyre-color-semantic-border-subtle);
3750
+ border-radius: var(--vyre-border-radius-lg);
3751
+ }
3752
+ .vyre-field-set__legend {
3753
+ padding: 0 var(--vyre-spacing-2);
3754
+ font-size: var(--vyre-typography-font-size-sm);
3755
+ font-weight: var(--vyre-typography-font-weight-semibold);
3756
+ color: var(--vyre-color-semantic-text-primary);
3757
+ }
3758
+
3759
+ /* ── RICH TEXT EDITOR ────────────────────────────────────────── */
3760
+ .vyre-rte {
3761
+ display: flex;
3762
+ flex-direction: column;
3763
+ background: var(--vyre-color-semantic-surface);
3764
+ border: 1px solid var(--vyre-color-semantic-border);
3765
+ border-radius: var(--vyre-border-radius-lg);
3766
+ overflow: hidden;
3767
+ }
3768
+ .vyre-rte--disabled { opacity: 0.6; }
3769
+
3770
+ .vyre-rte__toolbar {
3771
+ display: flex;
3772
+ flex-wrap: wrap;
3773
+ gap: var(--vyre-spacing-1);
3774
+ padding: var(--vyre-spacing-2);
3775
+ border-bottom: 1px solid var(--vyre-color-semantic-border-subtle);
3776
+ background: var(--vyre-color-semantic-surface-raised);
3777
+ }
3778
+ .vyre-rte__tool {
3779
+ display: inline-flex;
3780
+ align-items: center;
3781
+ justify-content: center;
3782
+ min-width: 1.75rem;
3783
+ height: 1.75rem;
3784
+ padding: 0 var(--vyre-spacing-2);
3785
+ font-size: var(--vyre-typography-font-size-xs);
3786
+ color: var(--vyre-color-semantic-text-secondary);
3787
+ background: transparent;
3788
+ border: 1px solid transparent;
3789
+ border-radius: var(--vyre-border-radius-sm);
3790
+ cursor: pointer;
3791
+ transition:
3792
+ background var(--vyre-transition-duration-fast) var(--vyre-transition-easing-out),
3793
+ color var(--vyre-transition-duration-fast) var(--vyre-transition-easing-out);
3794
+ }
3795
+ .vyre-rte__tool:hover:not(:disabled) {
3796
+ background: var(--vyre-color-semantic-surface);
3797
+ color: var(--vyre-color-semantic-text-primary);
3798
+ }
3799
+ .vyre-rte__tool:focus-visible {
3800
+ outline: 2px solid var(--vyre-color-semantic-accent);
3801
+ outline-offset: 1px;
3802
+ }
3803
+ .vyre-rte__tool:disabled { cursor: not-allowed; opacity: 0.5; }
3804
+
3805
+ .vyre-rte__content {
3806
+ padding: var(--vyre-spacing-4);
3807
+ font-size: var(--vyre-typography-font-size-sm);
3808
+ line-height: var(--vyre-typography-line-height-relaxed);
3809
+ color: var(--vyre-color-semantic-text-primary);
3810
+ outline: none;
3811
+ overflow-y: auto;
3812
+ }
3813
+ .vyre-rte__content:empty::before {
3814
+ content: attr(data-placeholder);
3815
+ color: var(--vyre-color-semantic-text-muted);
3816
+ pointer-events: none;
3817
+ }
3818
+ .vyre-rte__content:focus-visible {
3819
+ box-shadow: inset 0 0 0 2px var(--vyre-color-semantic-accent-subtle);
3820
+ }
3821
+ .vyre-rte__content > :first-child { margin-top: 0; }
3822
+ .vyre-rte__content > :last-child { margin-bottom: 0; }
3823
+ .vyre-rte__content h1 {
3824
+ font-size: var(--vyre-typography-font-size-2xl);
3825
+ font-weight: var(--vyre-typography-font-weight-bold);
3826
+ margin: var(--vyre-spacing-4) 0 var(--vyre-spacing-2);
3827
+ }
3828
+ .vyre-rte__content h2 {
3829
+ font-size: var(--vyre-typography-font-size-xl);
3830
+ font-weight: var(--vyre-typography-font-weight-semibold);
3831
+ margin: var(--vyre-spacing-4) 0 var(--vyre-spacing-2);
3832
+ }
3833
+ .vyre-rte__content h3 {
3834
+ font-size: var(--vyre-typography-font-size-lg);
3835
+ font-weight: var(--vyre-typography-font-weight-semibold);
3836
+ margin: var(--vyre-spacing-3) 0 var(--vyre-spacing-2);
3837
+ }
3838
+ .vyre-rte__content p { margin: 0 0 var(--vyre-spacing-2); }
3839
+ .vyre-rte__content ul,
3840
+ .vyre-rte__content ol {
3841
+ margin: 0 0 var(--vyre-spacing-2);
3842
+ padding-left: var(--vyre-spacing-6);
3843
+ }
3844
+ .vyre-rte__content li { margin-bottom: var(--vyre-spacing-1); }
3845
+ .vyre-rte__content a {
3846
+ color: var(--vyre-color-semantic-accent);
3847
+ text-decoration: underline;
3848
+ }
3849
+ .vyre-rte__content blockquote {
3850
+ margin: 0 0 var(--vyre-spacing-2);
3851
+ padding-left: var(--vyre-spacing-4);
3852
+ border-left: 3px solid var(--vyre-color-semantic-border-strong);
3853
+ color: var(--vyre-color-semantic-text-secondary);
3854
+ }
3855
+ .vyre-rte__content pre {
3856
+ margin: 0 0 var(--vyre-spacing-2);
3857
+ padding: var(--vyre-spacing-3);
3858
+ background: var(--vyre-color-semantic-surface-raised);
3859
+ border-radius: var(--vyre-border-radius-md);
3860
+ font-family: var(--vyre-typography-font-family-mono);
3861
+ font-size: var(--vyre-typography-font-size-xs);
3862
+ white-space: pre-wrap;
3863
+ }