@24vlh/vds 0.1.3 → 0.1.4

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.
@@ -0,0 +1,1228 @@
1
+ /************************************************************
2
+ * VLAH DESIGN SYSTEM (VDS) - Inbox List Component
3
+ *
4
+ * File: vds-inbox.css
5
+ *
6
+ * Responsibilities:
7
+ * - Row-based list pattern for inbox workflows:
8
+ * title, glance, badges, labels, status icons, actions
9
+ * - Responsive action reflow (right -> below on small screens)
10
+ * - Row variants: minimal / normal / rich / mega
11
+ * - Flag colors (5 options) for fast scanning
12
+ * - Expandable-row helpers (open state only; no JS)
13
+ * - Top navigation bar (search + tabs + optional left/right action slots)
14
+ * - Flat list variant (table-like separators) + rounded card variant
15
+ * - Action style variants (flat vs rich) using tokens only
16
+ ************************************************************/
17
+
18
+ /* ---------------------------------------------------------
19
+ 0. ROOT (tokens + component defaults)
20
+ --------------------------------------------------------- */
21
+
22
+ [data-vds-inbox],
23
+ .vds-inbox {
24
+ --inbox-row-radius: var(--radius-lg, var(--radius-md));
25
+ --inbox-row-border: var(--color-border-subtle);
26
+ --inbox-row-bg: var(--color-surface);
27
+ --inbox-row-bg-hover: var(--color-surface-subtle, var(--color-surface-hover));
28
+ --inbox-row-shadow: none;
29
+
30
+ --inbox-title-size: var(--text-sm);
31
+ --inbox-desc-size: var(--text-xs);
32
+
33
+ --inbox-icon-size: var(--icon-sm);
34
+ --inbox-icon-muted: var(--color-icon-muted, var(--color-text-soft));
35
+ --inbox-icon-strong: var(--color-icon-strong, var(--color-text));
36
+
37
+ --inbox-action-gap: var(--space-2);
38
+ --inbox-badge-gap: var(--space-2);
39
+
40
+ --inbox-row-pad-x: var(--space-4);
41
+ --inbox-row-pad-y: var(--space-4);
42
+
43
+ --inbox-actions-min-width: 0;
44
+ --inbox-actions-justify: flex-end; /* right rail on wide screens */
45
+
46
+ width: 100%;
47
+ }
48
+
49
+ /* Optional: make the whole surface slightly denser */
50
+
51
+ .vds-inbox--dense {
52
+ --inbox-row-pad-x: var(--space-3);
53
+ --inbox-row-pad-y: var(--space-3);
54
+ --inbox-title-size: var(--text-xs);
55
+ --inbox-desc-size: var(--text-xxs, var(--text-xs));
56
+ }
57
+
58
+ /* ---------------------------------------------------------
59
+ 1. TOP NAV (search + tabs + actions)
60
+ --------------------------------------------------------- */
61
+
62
+ .vds-inbox-nav {
63
+ display: flex;
64
+ flex-direction: column;
65
+ gap: var(--space-3);
66
+ margin-bottom: var(--space-4);
67
+ }
68
+
69
+ .vds-inbox-nav__bar {
70
+ display: flex;
71
+ align-items: center;
72
+ justify-content: space-between;
73
+ gap: var(--space-4);
74
+
75
+ padding: var(--space-3) var(--space-4);
76
+ border: 1px solid var(--color-border-subtle);
77
+ border-radius: var(--radius-lg);
78
+ background: var(--color-surface);
79
+ }
80
+
81
+ /* left / right rails */
82
+
83
+ .vds-inbox-nav__left,
84
+ .vds-inbox-nav__right {
85
+ display: inline-flex;
86
+ align-items: center;
87
+ gap: var(--space-2);
88
+ flex: 0 0 auto;
89
+ }
90
+
91
+ /* bottom rail (optional helper row under tabs/search) */
92
+
93
+ .vds-inbox-nav__bottom {
94
+ display: flex;
95
+ align-items: center;
96
+ justify-content: space-between;
97
+ gap: var(--space-3);
98
+ }
99
+
100
+ .vds-inbox-nav__bottom-left,
101
+ .vds-inbox-nav__bottom-right {
102
+ display: inline-flex;
103
+ align-items: center;
104
+ gap: var(--space-2);
105
+ }
106
+
107
+ .vds-inbox-nav__bottom-left:empty,
108
+ .vds-inbox-nav__bottom-right:empty {
109
+ display: none;
110
+ }
111
+
112
+ /* bottom alignment helpers */
113
+
114
+ .vds-inbox-nav__bottom--left {
115
+ justify-content: flex-start;
116
+ }
117
+
118
+ .vds-inbox-nav__bottom--center {
119
+ justify-content: center;
120
+ }
121
+
122
+ .vds-inbox-nav__bottom--right {
123
+ justify-content: flex-end;
124
+ }
125
+
126
+ .vds-inbox-nav__bottom--split {
127
+ justify-content: space-between;
128
+ }
129
+
130
+ /* Tabs */
131
+
132
+ .vds-inbox-tabs {
133
+ display: inline-flex;
134
+ align-items: center;
135
+ gap: var(--space-1);
136
+ padding: var(--space-1);
137
+ border-radius: var(--radius-lg);
138
+ border: 1px solid var(--color-border-subtle);
139
+ background: var(--color-surface-subtle);
140
+ flex: 1 1 auto;
141
+ min-width: 0;
142
+ justify-content: center;
143
+ }
144
+
145
+ .vds-inbox-tab {
146
+ -webkit-appearance: none;
147
+ -moz-appearance: none;
148
+ appearance: none;
149
+ border: 0;
150
+ background: transparent;
151
+ color: var(--color-text-muted);
152
+ font-weight: var(--font-weight-semibold);
153
+ font-size: var(--text-sm);
154
+ line-height: 1;
155
+
156
+ padding: var(--space-2) var(--space-3);
157
+ border-radius: var(--radius-md);
158
+
159
+ display: inline-flex;
160
+ align-items: center;
161
+ gap: var(--space-2);
162
+ cursor: pointer;
163
+ -webkit-user-select: none;
164
+ -moz-user-select: none;
165
+ user-select: none;
166
+ white-space: nowrap;
167
+ }
168
+
169
+ .vds-inbox-tab:hover {
170
+ background: var(--color-surface);
171
+ color: var(--color-text);
172
+ }
173
+
174
+ .vds-inbox-tab[aria-selected="true"],
175
+ .vds-inbox-tab.is-active {
176
+ background: var(--color-surface);
177
+ color: var(--color-text);
178
+ border: 1px solid var(--color-border-subtle);
179
+ }
180
+
181
+ .vds-inbox-tab:focus-visible {
182
+ outline: var(--focus-ring-width) solid var(--focus-ring-color);
183
+ outline-offset: var(--focus-ring-offset);
184
+ }
185
+
186
+ /* Optional tab badge */
187
+
188
+ .vds-inbox-tab__count {
189
+ display: inline-flex;
190
+ align-items: center;
191
+ justify-content: center;
192
+ min-width: 1.5rem;
193
+ height: 1.5rem;
194
+ padding: 0 var(--space-2);
195
+
196
+ border-radius: var(--radius-pill);
197
+ border: 1px solid var(--color-border-subtle);
198
+ background: var(--color-surface-subtle);
199
+ color: var(--color-text-muted);
200
+
201
+ font-size: var(--text-xs);
202
+ font-weight: var(--font-weight-semibold);
203
+ }
204
+
205
+ /* --- Search (icon -> expanding field) --- */
206
+
207
+ .vds-inbox-search {
208
+ display: inline-flex;
209
+ align-items: center;
210
+ gap: var(--space-2);
211
+ min-width: 0;
212
+ }
213
+
214
+ .vds-inbox-search__toggle {
215
+ display: inline-flex;
216
+ align-items: center;
217
+ justify-content: center;
218
+
219
+ width: 2.25rem;
220
+
221
+ width: var(--icon-container-md, 2.25rem);
222
+ height: 2.25rem;
223
+ height: var(--icon-container-md, 2.25rem);
224
+
225
+ border-radius: var(--radius-md);
226
+ border: 1px solid var(--color-border-subtle);
227
+ background: var(--color-surface);
228
+
229
+ color: var(--color-text);
230
+ transition: background-color var(--transition-fast), border-color var(--transition-fast);
231
+ }
232
+
233
+ .vds-inbox-search__toggle:hover {
234
+ background: var(--color-surface-subtle, var(--color-surface-hover));
235
+ border-color: var(--color-border-strong, var(--color-border-subtle));
236
+ }
237
+
238
+ .vds-inbox-search__toggle svg {
239
+ width: 1rem;
240
+ width: var(--icon-xs, 1rem);
241
+ height: 1rem;
242
+ height: var(--icon-xs, 1rem);
243
+ color: currentColor;
244
+ }
245
+
246
+ /* Field wrapper starts collapsed */
247
+
248
+ .vds-inbox-search__field {
249
+ display: inline-flex;
250
+ align-items: center;
251
+ gap: var(--space-2);
252
+
253
+ width: 0;
254
+ opacity: 0;
255
+ overflow: hidden;
256
+ pointer-events: none;
257
+
258
+ transition: width var(--transition-normal), opacity var(--transition-fast);
259
+ }
260
+
261
+ .vds-inbox-search__input {
262
+ width: 100%;
263
+ min-width: 10rem;
264
+ max-width: 32rem;
265
+
266
+ padding: var(--space-2) var(--space-3);
267
+ border-radius: var(--radius-md);
268
+ border: 1px solid var(--color-border-subtle);
269
+ background: var(--color-surface);
270
+ color: var(--color-text);
271
+
272
+ font-size: var(--text-sm);
273
+ line-height: var(--line-height-normal);
274
+ }
275
+
276
+ /* Open state: set on .vds-inbox-search or on toggle via aria-expanded */
277
+
278
+ .vds-inbox-search.is-open .vds-inbox-search__field,
279
+ .vds-inbox-search__toggle[aria-expanded="true"] + .vds-inbox-search__field {
280
+ width: min(36rem, 52vw);
281
+ opacity: 1;
282
+ pointer-events: auto;
283
+ }
284
+
285
+ /* Full-width search helper (mobile or on demand) */
286
+
287
+ .vds-inbox-search--full {
288
+ width: 100%;
289
+ }
290
+
291
+ .vds-inbox-search--full .vds-inbox-search__field {
292
+ width: 100%;
293
+ opacity: 1;
294
+ pointer-events: auto;
295
+ }
296
+
297
+ /* ---------------------------------------------------------
298
+ 2. LIST (rounded vs flat)
299
+ --------------------------------------------------------- */
300
+
301
+ .vds-inbox__list {
302
+ display: flex;
303
+ flex-direction: column;
304
+ gap: var(--space-2);
305
+ }
306
+
307
+ /* Flat list: separators + list border, no side borders on rows */
308
+
309
+ .vds-inbox--flat .vds-inbox__list {
310
+ gap: 0;
311
+ border-top: 1px solid var(--color-border-subtle);
312
+ border-bottom: 1px solid var(--color-border-subtle);
313
+ }
314
+
315
+ .vds-inbox--flat .vds-inbox-row {
316
+ border-left: 0;
317
+ border-right: 0;
318
+ border-top: 0;
319
+ border-radius: 0;
320
+ }
321
+
322
+ .vds-inbox--flat .vds-inbox-row + .vds-inbox-row {
323
+ border-top: 1px solid var(--color-border-subtle);
324
+ }
325
+
326
+ /* ---------------------------------------------------------
327
+ 3. ROW BASE
328
+ --------------------------------------------------------- */
329
+
330
+ .vds-inbox-row {
331
+ position: relative;
332
+ width: 100%;
333
+ background: var(--inbox-row-bg);
334
+ border: 1px solid var(--inbox-row-border);
335
+ border-radius: var(--inbox-row-radius);
336
+ box-shadow: var(--inbox-row-shadow);
337
+ overflow: clip;
338
+
339
+ transition: background-color var(--transition-fast), border-color var(--transition-fast), transform var(--transition-fast);
340
+ }
341
+
342
+ .vds-inbox-row:hover {
343
+ background: var(--inbox-row-bg-hover);
344
+ border-color: var(--color-border-strong, var(--color-border-subtle));
345
+ }
346
+
347
+ .vds-inbox-row:focus-visible {
348
+ outline: var(--focus-ring-width) solid var(--focus-ring-color);
349
+ outline-offset: var(--focus-ring-offset);
350
+ }
351
+
352
+ /* Recommended clickable wrapper: <button> or <a> */
353
+
354
+ .vds-inbox-row__main {
355
+ width: 100%;
356
+ border: 0;
357
+ background: transparent;
358
+ padding: 0;
359
+ text-align: left;
360
+ color: inherit;
361
+ display: grid;
362
+ grid-template-columns: 1fr;
363
+ grid-template-rows: auto auto;
364
+ }
365
+
366
+ /* Core grid: meta left + actions right */
367
+
368
+ .vds-inbox-row__inner {
369
+ display: grid;
370
+ grid-template-columns: 1fr auto;
371
+ grid-gap: var(--space-4);
372
+ gap: var(--space-4);
373
+ align-items: start;
374
+ padding: var(--inbox-row-pad-y) var(--inbox-row-pad-x);
375
+ grid-column: 1 / -1;
376
+ grid-row: 1;
377
+ }
378
+
379
+ /* ---------------------------------------------------------
380
+ ROW GRID REFACTOR: meta | actions, then data full-width
381
+ (glance + details + metafoot live under __data)
382
+ --------------------------------------------------------- */
383
+
384
+ /* Replace the simple 2-col grid with explicit areas */
385
+
386
+ .vds-inbox-row__inner {
387
+ grid-template-columns: 1fr auto; /* keep the intent:contentReference[oaicite:2]{index=2} */
388
+ grid-template-areas:
389
+ "badges badges"
390
+ "meta actions"
391
+ "data data";
392
+ }
393
+
394
+ /* Existing badges row is already full width:contentReference[oaicite:3]{index=3}.
395
+ We map it into the grid areas as well (harmless if not present). */
396
+
397
+ .vds-inbox-row__badges {
398
+ grid-area: badges;
399
+ }
400
+
401
+ .vds-inbox-row__meta {
402
+ grid-area: meta;
403
+ min-width: 0;
404
+ }
405
+
406
+ .vds-inbox-row__actions {
407
+ grid-area: actions;
408
+ }
409
+
410
+ /* NEW: one container for all “row data” blocks */
411
+
412
+ .vds-inbox-row__data {
413
+ grid-area: data;
414
+ min-width: 0;
415
+ display: flex;
416
+ flex-direction: column;
417
+ gap: var(--space-2);
418
+ }
419
+
420
+ /* Keep existing styling for these blocks; they now simply sit inside __data.
421
+ (These selectors already exist in your file.):contentReference[oaicite:4]{index=4}:contentReference[oaicite:5]{index=5}:contentReference[oaicite:6]{index=6} */
422
+
423
+ /* --- Mobile / narrow screens: actions must be last, full width, aligned right --- */
424
+
425
+ @media (max-width: 768px) {
426
+ .vds-inbox-row__inner {
427
+ grid-template-columns: 1fr;
428
+ grid-template-areas:
429
+ "badges"
430
+ "meta"
431
+ "data"
432
+ "actions";
433
+ }
434
+
435
+ /* Ensure actions take full width and stay right-aligned (your default is token-driven):contentReference[oaicite:7]{index=7} */
436
+ .vds-inbox-row__actions {
437
+ min-width: 0;
438
+ justify-content: flex-end;
439
+ padding-top: 0;
440
+ }
441
+ }
442
+
443
+ /* --- Actions “full row” helper should still work; now it just reinforces the layout --- */
444
+
445
+ .vds-inbox-row--actions-full .vds-inbox-row__actions {
446
+ grid-column: 1 / -1; /* already in file:contentReference[oaicite:8]{index=8} */
447
+ }
448
+
449
+ /* ---------------------------------------------------------
450
+ LABEL ALIGNMENT FIX
451
+ --------------------------------------------------------- */
452
+
453
+ /* The symptoms you described usually happen when labels are pushed right
454
+ (commonly via margin-left:auto or justify-content:flex-end).
455
+ Force labels to align left and wrap cleanly. */
456
+
457
+ .vds-inbox-row__labels {
458
+ justify-content: flex-start;
459
+ align-items: center;
460
+ text-align: left;
461
+ margin-left: 0;
462
+ }
463
+
464
+ /* If your title-line uses flex and previously relied on labels being “right side”,
465
+ keep that behaviour by controlling the title-line instead (recommended pattern):
466
+ - title grows
467
+ - labels sit after title but do NOT right-align internally
468
+ */
469
+
470
+ .vds-inbox-row__title {
471
+ min-width: 0;
472
+ flex: 1 1 auto;
473
+ }
474
+
475
+ /* ---------------------------------------------------------
476
+ 4. ROW VARIANTS (minimal / normal / rich / mega)
477
+ --------------------------------------------------------- */
478
+
479
+ /* Minimalistic: title + status + tiny actions (no extra vertical air) */
480
+
481
+ .vds-inbox-row--minimal .vds-inbox-row__inner {
482
+ gap: var(--space-3);
483
+ padding: var(--space-3) var(--space-3);
484
+ }
485
+
486
+ .vds-inbox-row--minimal {
487
+ --inbox-title-size: var(--text-xs);
488
+ --inbox-desc-size: var(--text-xxs, var(--text-xs));
489
+ }
490
+
491
+ /* Normal: default */
492
+
493
+ .vds-inbox-row--normal .vds-inbox-row__inner {
494
+ padding: var(--space-4) var(--space-4);
495
+ gap: var(--space-4);
496
+ }
497
+
498
+ /* Rich: more air + larger typography */
499
+
500
+ .vds-inbox-row--rich .vds-inbox-row__inner {
501
+ padding: var(--space-5) var(--space-5);
502
+ gap: var(--space-5);
503
+ }
504
+
505
+ .vds-inbox-row--rich {
506
+ --inbox-title-size: var(--text-md, var(--text-sm));
507
+ --inbox-desc-size: var(--text-sm);
508
+ }
509
+
510
+ /* Mega: “data-heavy” row */
511
+
512
+ .vds-inbox-row--mega .vds-inbox-row__inner {
513
+ padding: var(--space-6) var(--space-6);
514
+ gap: var(--space-6);
515
+ }
516
+
517
+ .vds-inbox-row--mega {
518
+ --inbox-title-size: var(--text-lg, var(--text-md, var(--text-sm)));
519
+ --inbox-desc-size: var(--text-sm);
520
+ }
521
+
522
+ /* ---------------------------------------------------------
523
+ 5. BADGES ROW (FULL WIDTH)
524
+ --------------------------------------------------------- */
525
+
526
+ .vds-inbox-row__badges {
527
+ grid-column: 1 / -1;
528
+ display: flex;
529
+ flex-wrap: wrap;
530
+ align-items: center;
531
+ gap: var(--inbox-badge-gap);
532
+ margin-bottom: var(--space-3);
533
+ }
534
+
535
+ .vds-inbox-badge {
536
+ display: inline-flex;
537
+ align-items: center;
538
+ gap: var(--space-1_5);
539
+ padding: var(--space-1) var(--space-2_5);
540
+
541
+ border-radius: var(--radius-pill);
542
+ border: 1px solid var(--color-border-subtle);
543
+
544
+ font-size: var(--text-xxs);
545
+ font-weight: var(--font-weight-semibold);
546
+ letter-spacing: 0.02em;
547
+ line-height: 1.1;
548
+
549
+ background: var(--color-surface-subtle);
550
+ color: var(--color-text);
551
+ white-space: nowrap;
552
+ }
553
+
554
+ .vds-inbox-badge svg {
555
+ width: var(--icon-xxs);
556
+ height: var(--icon-xxs);
557
+ color: currentColor;
558
+ }
559
+
560
+ .vds-inbox-badge--accent {
561
+ background: var(--color-accent-soft);
562
+ border-color: var(--color-accent);
563
+ color: var(--color-text);
564
+ }
565
+
566
+ .vds-inbox-badge--info {
567
+ background: var(--semantic-info-bg, var(--color-info-soft));
568
+ border-color: var(--semantic-info-border, var(--color-info));
569
+ color: var(--semantic-info-text, var(--color-text));
570
+ }
571
+
572
+ .vds-inbox-badge--success {
573
+ background: var(--semantic-success-bg, var(--color-success-soft));
574
+ border-color: var(--semantic-success-border, var(--color-success));
575
+ color: var(--semantic-success-text, var(--color-text));
576
+ }
577
+
578
+ .vds-inbox-badge--warning {
579
+ background: var(--semantic-warning-bg, var(--color-warning-soft));
580
+ border-color: var(--semantic-warning-border, var(--color-warning));
581
+ color: var(--semantic-warning-text, var(--color-text));
582
+ }
583
+
584
+ .vds-inbox-badge--danger {
585
+ background: var(--semantic-danger-bg, var(--color-danger-soft));
586
+ border-color: var(--semantic-danger-border, var(--color-danger));
587
+ color: var(--semantic-danger-text, var(--color-text));
588
+ }
589
+
590
+ /* ---------------------------------------------------------
591
+ 6. META AREA
592
+ --------------------------------------------------------- */
593
+
594
+ .vds-inbox-row__meta {
595
+ display: flex;
596
+ flex-direction: column;
597
+ gap: var(--space-2);
598
+ min-width: 0;
599
+ }
600
+
601
+ .vds-inbox-row__titleline {
602
+ display: flex;
603
+ align-items: center;
604
+ gap: var(--space-2);
605
+ min-width: 0;
606
+ }
607
+
608
+ /* Status icons cluster (bookmark/star/flag) */
609
+
610
+ .vds-inbox-row__status {
611
+ display: inline-flex;
612
+ align-items: center;
613
+ gap: var(--space-1_5);
614
+ flex: 0 0 auto;
615
+ }
616
+
617
+ .vds-inbox-row__status-icon {
618
+ width: var(--inbox-icon-size);
619
+ height: var(--inbox-icon-size);
620
+ display: inline-flex;
621
+ align-items: center;
622
+ justify-content: center;
623
+ color: var(--inbox-icon-muted);
624
+ }
625
+
626
+ .vds-inbox-row__status-icon svg {
627
+ width: 100%;
628
+ height: 100%;
629
+ }
630
+
631
+ /* state toggles (apply on row) */
632
+
633
+ .vds-inbox-row.is-bookmarked .vds-inbox-row__status-icon--bookmark,
634
+ .vds-inbox-row.is-starred .vds-inbox-row__status-icon--star {
635
+ color: var(--color-accent);
636
+ }
637
+
638
+ .vds-inbox-row.is-flagged .vds-inbox-row__status-icon--flag {
639
+ color: var(--color-danger-strong, var(--color-danger));
640
+ }
641
+
642
+ .vds-inbox-row__title {
643
+ font-size: var(--inbox-title-size);
644
+ font-weight: var(--font-weight-semibold);
645
+ line-height: var(--line-height-snug);
646
+ color: var(--color-text);
647
+ letter-spacing: 0;
648
+ letter-spacing: var(--letter-tight, 0);
649
+
650
+ overflow: hidden;
651
+ text-overflow: ellipsis;
652
+ white-space: nowrap;
653
+
654
+ flex: 1 1 auto; /* take leftover width, shrink when needed */
655
+ min-width: 16ch; /* hard floor so it never disappears */
656
+ max-width: 100%; /* prevents weird overflow interactions */
657
+ }
658
+
659
+ /* Inline labels next to title (wide); reflow rules below */
660
+
661
+ .vds-inbox-row__labels {
662
+ display: inline-flex;
663
+ align-items: center;
664
+ gap: var(--space-1_5);
665
+ flex: 0 0 auto;
666
+ min-width: 0;
667
+ }
668
+
669
+ .vds-inbox-label {
670
+ display: inline-flex;
671
+ align-items: center;
672
+ padding: 0 var(--space-2);
673
+ height: 1.4rem;
674
+
675
+ border-radius: var(--radius-pill);
676
+ border: 1px solid var(--color-border-subtle);
677
+
678
+ font-size: var(--text-xxs);
679
+ font-weight: var(--font-weight-semibold);
680
+ color: var(--color-text-muted);
681
+ background: transparent;
682
+ white-space: nowrap;
683
+ }
684
+
685
+ .vds-inbox-label--accent {
686
+ color: var(--color-text);
687
+ border-color: var(--color-accent);
688
+ background: var(--color-accent-soft);
689
+ }
690
+
691
+ .vds-inbox-label--muted {
692
+ color: var(--color-text-muted);
693
+ border-color: var(--color-border-subtle);
694
+ background: var(--color-surface-subtle);
695
+ }
696
+
697
+ /* Glance / description (clamped by default) */
698
+
699
+ .vds-inbox-row__glance {
700
+ font-size: var(--inbox-desc-size);
701
+ line-height: var(--line-height-relaxed);
702
+ color: var(--color-text-muted);
703
+ min-width: 0;
704
+
705
+ display: -webkit-box;
706
+ -webkit-box-orient: vertical;
707
+ -webkit-line-clamp: 2;
708
+ overflow: hidden;
709
+ }
710
+
711
+ /* Rich/mega can show more lines (still clamped unless row open) */
712
+
713
+ .vds-inbox-row--rich .vds-inbox-row__glance {
714
+ -webkit-line-clamp: 3;
715
+ }
716
+
717
+ .vds-inbox-row--mega .vds-inbox-row__glance {
718
+ -webkit-line-clamp: 4;
719
+ }
720
+
721
+ /* Optional metadata footer */
722
+
723
+ .vds-inbox-row__metafoot {
724
+ display: flex;
725
+ flex-wrap: wrap;
726
+ align-items: center;
727
+ gap: var(--space-2) var(--space-4);
728
+ font-size: var(--text-xxs, var(--text-xs));
729
+ color: var(--color-text-soft, var(--color-text-muted));
730
+ }
731
+
732
+ .vds-inbox-row__metafoot strong {
733
+ font-weight: var(--font-weight-semibold);
734
+ color: var(--color-text-muted);
735
+ }
736
+
737
+ /* Optional “detail chips row” (horizontal list of small metadata items) */
738
+
739
+ .vds-inbox-row__details {
740
+ display: flex;
741
+ flex-wrap: wrap;
742
+ gap: var(--space-2) var(--space-3);
743
+ font-size: var(--text-xs);
744
+ color: var(--color-text-muted);
745
+ }
746
+
747
+ .vds-inbox-row__details-item {
748
+ display: inline-flex;
749
+ align-items: center;
750
+ gap: var(--space-1_5);
751
+ padding: var(--space-1) var(--space-2);
752
+
753
+ border-radius: var(--radius-pill);
754
+ border: 1px solid var(--color-border-subtle);
755
+ background: var(--color-surface-subtle);
756
+
757
+ line-height: 1.1;
758
+ }
759
+
760
+ .vds-inbox-row__details-item svg {
761
+ width: var(--icon-xxs);
762
+ height: var(--icon-xxs);
763
+ color: currentColor;
764
+ }
765
+
766
+ /* ---------------------------------------------------------
767
+ 7. ACTIONS (right rail; can reflow below)
768
+ --------------------------------------------------------- */
769
+
770
+ .vds-inbox-row__actions {
771
+ display: flex;
772
+ align-items: flex-start;
773
+ justify-content: var(--inbox-actions-justify);
774
+ gap: var(--inbox-action-gap);
775
+ flex-wrap: wrap;
776
+ padding-top: var(--space-0_5);
777
+ min-width: var(--inbox-actions-min-width);
778
+ }
779
+
780
+ /* Force actions below even on wide screens */
781
+
782
+ .vds-inbox-row--actions-below .vds-inbox-row__inner {
783
+ grid-template-columns: 1fr;
784
+ grid-template-areas:
785
+ "badges"
786
+ "meta"
787
+ "data"
788
+ "actions";
789
+ }
790
+
791
+ .vds-inbox-row--actions-below .vds-inbox-row__actions {
792
+ justify-content: flex-start;
793
+ padding-top: 0;
794
+ }
795
+
796
+ /* Force actions to occupy a full row (even when grid is 2 cols) */
797
+
798
+ .vds-inbox-row--actions-full .vds-inbox-row__actions {
799
+ grid-column: 1 / -1;
800
+ justify-content: flex-start;
801
+ padding-top: 0;
802
+ }
803
+
804
+ /* Actions alignment helpers (useful on mobile / below layout) */
805
+
806
+ .vds-inbox-row__actions--left {
807
+ justify-content: flex-start;
808
+ }
809
+
810
+ .vds-inbox-row__actions--center {
811
+ justify-content: center;
812
+ }
813
+
814
+ .vds-inbox-row__actions--right {
815
+ justify-content: flex-end;
816
+ }
817
+
818
+ /* Action button */
819
+
820
+ .vds-inbox-action {
821
+ display: inline-flex;
822
+ align-items: center;
823
+ justify-content: center;
824
+ gap: var(--space-1_5);
825
+
826
+ padding: var(--space-1_5) var(--space-2_5);
827
+ border-radius: var(--radius-sm);
828
+ border: 1px solid var(--color-border-subtle);
829
+
830
+ font-size: var(--text-xs);
831
+ font-weight: var(--font-weight-semibold);
832
+
833
+ color: var(--color-text);
834
+ background: var(--color-surface);
835
+
836
+ transition: background-color var(--transition-fast), border-color var(--transition-fast), color var(--transition-fast), transform var(--transition-fast);
837
+ }
838
+
839
+ a.vds-inbox-action {
840
+ -webkit-text-decoration: none;
841
+ text-decoration: none;
842
+ }
843
+
844
+ .vds-inbox-action svg {
845
+ width: var(--icon-xxs);
846
+ height: var(--icon-xxs);
847
+ color: currentColor;
848
+ }
849
+
850
+ .vds-inbox-action:hover {
851
+ background: var(--color-surface-subtle, var(--color-surface-hover));
852
+ border-color: var(--color-border-strong, var(--color-border-subtle));
853
+ transform: translateY(-1px);
854
+ }
855
+
856
+ .vds-inbox-action:active {
857
+ transform: translateY(0);
858
+ }
859
+
860
+ .vds-inbox-action--danger {
861
+ color: var(--color-danger-strong, var(--color-danger));
862
+ border-color: var(--color-danger, var(--color-border-strong));
863
+ }
864
+
865
+ .vds-inbox-action--accent {
866
+ color: var(--color-text);
867
+ border-color: var(--color-accent);
868
+ background: var(--color-accent-soft);
869
+ }
870
+
871
+ /* icon-only action */
872
+
873
+ .vds-inbox-action--icon {
874
+ width: 2.25rem;
875
+ width: var(--icon-container-md, 2.25rem);
876
+ height: 2.25rem;
877
+ height: var(--icon-container-md, 2.25rem);
878
+ padding: 0;
879
+ }
880
+
881
+ /* “Flat” action style (no border, lighter affordance) */
882
+
883
+ .vds-inbox-action--flat {
884
+ border-color: transparent;
885
+ background: transparent;
886
+ color: var(--color-text-muted);
887
+ }
888
+
889
+ .vds-inbox-action--flat:hover {
890
+ background: var(--color-surface-subtle);
891
+ border-color: transparent;
892
+ color: var(--color-text);
893
+ transform: none;
894
+ }
895
+
896
+ /* Global switch: make all actions flat within an inbox */
897
+
898
+ .vds-inbox--actions-flat .vds-inbox-action {
899
+ border-color: transparent;
900
+ background: transparent;
901
+ color: var(--color-text-muted);
902
+ transform: none;
903
+ }
904
+
905
+ .vds-inbox--actions-flat .vds-inbox-action:hover {
906
+ background: var(--color-surface-subtle);
907
+ border-color: transparent;
908
+ color: var(--color-text);
909
+ }
910
+
911
+ /* ---------------------------------------------------------
912
+ 8. EXPANDED CONTENT (OPEN STATE HELPERS)
913
+ --------------------------------------------------------- */
914
+
915
+ .vds-inbox-row__expanded {
916
+ grid-column: 1 / -1;
917
+ grid-row: 2;
918
+ border-top: 1px solid var(--color-border-subtle);
919
+ padding: var(--space-4);
920
+ background: var(--color-bg-soft, var(--color-surface-subtle));
921
+ color: var(--color-text);
922
+ display: none;
923
+ }
924
+
925
+ .vds-inbox-row--open .vds-inbox-row__expanded {
926
+ display: block;
927
+ }
928
+
929
+ .vds-inbox-row--open .vds-inbox-row__glance {
930
+ -webkit-line-clamp: initial;
931
+ overflow: visible;
932
+ }
933
+
934
+ /* Expanded content can be made “flush” in flat list mode */
935
+
936
+ .vds-inbox--flat .vds-inbox-row__expanded {
937
+ background: var(--color-surface-subtle);
938
+ }
939
+
940
+ .vds-inbox-row__expanded.vds-is-hidden {
941
+ display: none !important;
942
+ }
943
+
944
+ .vds-inbox-row__expanded.vds-is-visible {
945
+ display: block !important;
946
+ }
947
+
948
+ /* ---------------------------------------------------------
949
+ 9. FLAGS (5 COLORS)
950
+ --------------------------------------------------------- */
951
+
952
+ .vds-inbox-row.is-flagged::before {
953
+ content: "";
954
+ position: absolute;
955
+ top: 0;
956
+ right: auto;
957
+ bottom: 0;
958
+ left: 0;
959
+ width: 6px;
960
+ background: var(--inbox-flag-color, var(--color-danger));
961
+ }
962
+
963
+ .vds-inbox-row--flag-1 { /* danger / red */
964
+ --inbox-flag-color: var(--color-danger);
965
+ --inbox-flag-surface: var(--semantic-danger-bg, var(--color-danger-soft));
966
+ }
967
+
968
+ .vds-icon-flag--1 {
969
+ color: var(--color-danger);
970
+ }
971
+
972
+ .vds-inbox-row--flag-2 { /* warning / amber */
973
+ --inbox-flag-color: var(--color-warning);
974
+ --inbox-flag-surface: var(--semantic-warning-bg, var(--color-warning-soft));
975
+ }
976
+
977
+ .vds-icon-flag--2 {
978
+ color: var(--color-warning);
979
+ }
980
+
981
+ .vds-inbox-row--flag-3 { /* info / blue */
982
+ --inbox-flag-color: var(--color-info);
983
+ --inbox-flag-surface: var(--semantic-info-bg, var(--color-info-soft));
984
+ }
985
+
986
+ .vds-icon-flag--3 {
987
+ color: var(--color-info);
988
+ }
989
+
990
+ .vds-inbox-row--flag-4 { /* success / green */
991
+ --inbox-flag-color: var(--color-success);
992
+ --inbox-flag-surface: var(--semantic-success-bg, var(--color-success-soft));
993
+ }
994
+
995
+ .vds-icon-flag--4 {
996
+ color: var(--color-success);
997
+ }
998
+
999
+ .vds-inbox-row--flag-5 { /* accent */
1000
+ --inbox-flag-color: var(--color-accent);
1001
+ --inbox-flag-surface: var(--color-accent-soft);
1002
+ }
1003
+
1004
+ .vds-icon-flag--5 {
1005
+ color: var(--color-accent);
1006
+ }
1007
+
1008
+ /* ---------------------------------------------------------
1009
+ 10. FILTER TEMPLATE (lightweight)
1010
+ --------------------------------------------------------- */
1011
+
1012
+ .vds-inbox-filter {
1013
+ display: flex;
1014
+ flex-wrap: wrap;
1015
+ align-items: center;
1016
+ gap: var(--space-2) var(--space-3);
1017
+
1018
+ padding: var(--space-3) var(--space-4);
1019
+ border: 1px solid var(--color-border-subtle);
1020
+ border-radius: var(--radius-lg);
1021
+ background: var(--color-surface);
1022
+ }
1023
+
1024
+ .vds-inbox-filter__group {
1025
+ display: inline-flex;
1026
+ align-items: center;
1027
+ gap: var(--space-2);
1028
+ min-width: 0;
1029
+ }
1030
+
1031
+ .vds-inbox-filter__label {
1032
+ font-size: var(--text-xs);
1033
+ font-weight: var(--font-weight-semibold);
1034
+ color: var(--color-text-muted);
1035
+ white-space: nowrap;
1036
+ }
1037
+
1038
+ .vds-inbox-filter__chip {
1039
+ display: inline-flex;
1040
+ align-items: center;
1041
+ gap: var(--space-1_5);
1042
+ padding: var(--space-1_5) var(--space-2_5);
1043
+
1044
+ border-radius: var(--radius-pill);
1045
+ border: 1px solid var(--color-border-subtle);
1046
+ background: var(--color-surface-subtle);
1047
+ color: var(--color-text);
1048
+
1049
+ font-size: var(--text-xs);
1050
+ font-weight: var(--font-weight-semibold);
1051
+ line-height: 1.1;
1052
+ white-space: nowrap;
1053
+ }
1054
+
1055
+ .vds-inbox-filter__chip--active {
1056
+ border-color: var(--color-accent);
1057
+ background: var(--color-accent-soft);
1058
+ }
1059
+
1060
+ .vds-inbox-filter__actions {
1061
+ margin-left: auto;
1062
+ display: inline-flex;
1063
+ align-items: center;
1064
+ gap: var(--space-2);
1065
+ }
1066
+
1067
+ /* ---------------------------------------------------------
1068
+ 11. BOTTOM CORNER ACTION BAR (one/two buttons)
1069
+ --------------------------------------------------------- */
1070
+
1071
+ .vds-inbox-cornerbar {
1072
+ position: fixed;
1073
+ top: auto;
1074
+ right: var(--space-6);
1075
+ bottom: var(--space-6);
1076
+ left: auto;
1077
+ z-index: 40;
1078
+
1079
+ display: inline-flex;
1080
+ align-items: center;
1081
+ gap: var(--space-2);
1082
+
1083
+ pointer-events: none; /* buttons re-enable */
1084
+ }
1085
+
1086
+ .vds-inbox-cornerbar--left {
1087
+ top: auto;
1088
+ right: auto;
1089
+ bottom: var(--space-6);
1090
+ left: var(--space-6);
1091
+ }
1092
+
1093
+ .vds-inbox-cornerbar__inner {
1094
+ pointer-events: auto;
1095
+ display: inline-flex;
1096
+ align-items: center;
1097
+ gap: var(--space-2);
1098
+
1099
+ padding: var(--space-2);
1100
+ border-radius: var(--radius-xl, var(--radius-lg));
1101
+ border: 1px solid var(--color-border-subtle);
1102
+ background: var(--color-surface);
1103
+ box-shadow: none;
1104
+ box-shadow: var(--shadow-md, none);
1105
+ }
1106
+
1107
+ /* ---------------------------------------------------------
1108
+ 12. RESPONSIVE
1109
+ --------------------------------------------------------- */
1110
+
1111
+ @media (max-width: 768px) {
1112
+ .vds-inbox-row__inner {
1113
+ grid-template-columns: 1fr;
1114
+ gap: var(--space-3);
1115
+ }
1116
+
1117
+ /* Actions move below by default */
1118
+ .vds-inbox-row__actions {
1119
+ justify-content: flex-start;
1120
+ padding-top: 0;
1121
+ }
1122
+
1123
+ /* Title wraps; labels become their own row on the left */
1124
+ .vds-inbox-row__titleline {
1125
+ flex-wrap: wrap;
1126
+ row-gap: var(--space-1_5);
1127
+ }
1128
+
1129
+ .vds-inbox-row__title {
1130
+ white-space: normal;
1131
+ overflow: visible;
1132
+ text-overflow: clip;
1133
+ flex-basis: 100%;
1134
+ }
1135
+
1136
+ .vds-inbox-row__labels {
1137
+ flex-basis: 100%;
1138
+ justify-content: flex-start;
1139
+ }
1140
+
1141
+ /* Nav bar: stack into multiple rows */
1142
+ .vds-inbox-nav__bar {
1143
+ flex-wrap: wrap;
1144
+ justify-content: center;
1145
+ gap: var(--space-3);
1146
+ }
1147
+
1148
+ .vds-inbox-tabs {
1149
+ order: 1;
1150
+ width: 100%;
1151
+ justify-content: center;
1152
+ }
1153
+
1154
+ .vds-inbox-nav__left {
1155
+ order: 0;
1156
+ }
1157
+
1158
+ .vds-inbox-nav__right {
1159
+ order: 2;
1160
+ }
1161
+
1162
+ .vds-inbox-nav__bottom {
1163
+ flex-direction: column;
1164
+ align-items: stretch;
1165
+ }
1166
+
1167
+ .vds-inbox-nav__bottom-left,
1168
+ .vds-inbox-nav__bottom-right {
1169
+ justify-content: flex-start;
1170
+ }
1171
+
1172
+ /* Search: expand wider on small screens */
1173
+ .vds-inbox-search.is-open .vds-inbox-search__field,
1174
+ .vds-inbox-search__toggle[aria-expanded="true"] + .vds-inbox-search__field {
1175
+ width: min(100%, 40rem);
1176
+ }
1177
+ }
1178
+
1179
+ /* ---------------------------------------------------------
1180
+ 13. RESPONSIVE VISIBILITY HELPERS (COMPONENT-LOCAL)
1181
+ (useful for hiding icons/actions/labels by breakpoint)
1182
+ --------------------------------------------------------- */
1183
+
1184
+ @media (max-width: 768px) {
1185
+ .vds-inbox__hide-sm {
1186
+ display: none !important;
1187
+ }
1188
+ }
1189
+
1190
+ @media (min-width: 769px) {
1191
+ .vds-inbox__show-sm {
1192
+ display: none !important;
1193
+ }
1194
+ }
1195
+
1196
+ @media (max-width: 1024px) {
1197
+ .vds-inbox__hide-md {
1198
+ display: none !important;
1199
+ }
1200
+ }
1201
+
1202
+ @media (min-width: 1025px) {
1203
+ .vds-inbox__show-md {
1204
+ display: none !important;
1205
+ }
1206
+ }
1207
+
1208
+ /* ---------------------------------------------------------
1209
+ 14. SMALL UTILITIES (COMPONENT-LOCAL)
1210
+ --------------------------------------------------------- */
1211
+
1212
+ .vds-inbox__truncate {
1213
+ overflow: hidden;
1214
+ text-overflow: ellipsis;
1215
+ white-space: nowrap;
1216
+ }
1217
+
1218
+ .vds-inbox__sr-only {
1219
+ position: absolute !important;
1220
+ width: 1px !important;
1221
+ height: 1px !important;
1222
+ padding: 0 !important;
1223
+ margin: -1px !important;
1224
+ overflow: hidden !important;
1225
+ clip: rect(0, 0, 0, 0) !important;
1226
+ white-space: nowrap !important;
1227
+ border: 0 !important;
1228
+ }
@@ -0,0 +1 @@
1
+ .vds-inbox,[data-vds-inbox]{--inbox-row-radius:var(--radius-lg,var(--radius-md));--inbox-row-border:var(--color-border-subtle);--inbox-row-bg:var(--color-surface);--inbox-row-bg-hover:var(--color-surface-subtle,var(--color-surface-hover));--inbox-row-shadow:none;--inbox-title-size:var(--text-sm);--inbox-desc-size:var(--text-xs);--inbox-icon-size:var(--icon-sm);--inbox-icon-muted:var(--color-icon-muted,var(--color-text-soft));--inbox-icon-strong:var(--color-icon-strong,var(--color-text));--inbox-action-gap:var(--space-2);--inbox-badge-gap:var(--space-2);--inbox-row-pad-x:var(--space-4);--inbox-row-pad-y:var(--space-4);--inbox-actions-min-width:0;--inbox-actions-justify:flex-end;width:100%}.vds-inbox--dense{--inbox-row-pad-x:var(--space-3);--inbox-row-pad-y:var(--space-3);--inbox-title-size:var(--text-xs);--inbox-desc-size:var(--text-xxs,var(--text-xs))}.vds-inbox-nav{display:flex;flex-direction:column;gap:var(--space-3);margin-bottom:var(--space-4)}.vds-inbox-nav__bar{align-items:center;background:var(--color-surface);border:1px solid var(--color-border-subtle);border-radius:var(--radius-lg);display:flex;gap:var(--space-4);justify-content:space-between;padding:var(--space-3) var(--space-4)}.vds-inbox-nav__left,.vds-inbox-nav__right{align-items:center;display:inline-flex;flex:0 0 auto;gap:var(--space-2)}.vds-inbox-nav__bottom{align-items:center;display:flex;gap:var(--space-3);justify-content:space-between}.vds-inbox-nav__bottom-left,.vds-inbox-nav__bottom-right{align-items:center;display:inline-flex;gap:var(--space-2)}.vds-inbox-nav__bottom-left:empty,.vds-inbox-nav__bottom-right:empty{display:none}.vds-inbox-nav__bottom--left{justify-content:flex-start}.vds-inbox-nav__bottom--center{justify-content:center}.vds-inbox-nav__bottom--right{justify-content:flex-end}.vds-inbox-nav__bottom--split{justify-content:space-between}.vds-inbox-tabs{background:var(--color-surface-subtle);border:1px solid var(--color-border-subtle);border-radius:var(--radius-lg);flex:1 1 auto;gap:var(--space-1);justify-content:center;min-width:0;padding:var(--space-1)}.vds-inbox-tab,.vds-inbox-tabs{align-items:center;display:inline-flex}.vds-inbox-tab{-webkit-appearance:none;-moz-appearance:none;appearance:none;background:transparent;border:0;border-radius:var(--radius-md);color:var(--color-text-muted);cursor:pointer;font-size:var(--text-sm);font-weight:var(--font-weight-semibold);gap:var(--space-2);line-height:1;padding:var(--space-2) var(--space-3);-webkit-user-select:none;-moz-user-select:none;user-select:none;white-space:nowrap}.vds-inbox-tab:hover{background:var(--color-surface);color:var(--color-text)}.vds-inbox-tab.is-active,.vds-inbox-tab[aria-selected=true]{background:var(--color-surface);border:1px solid var(--color-border-subtle);color:var(--color-text)}.vds-inbox-tab:focus-visible{outline:var(--focus-ring-width) solid var(--focus-ring-color);outline-offset:var(--focus-ring-offset)}.vds-inbox-tab__count{align-items:center;background:var(--color-surface-subtle);border:1px solid var(--color-border-subtle);border-radius:var(--radius-pill);color:var(--color-text-muted);display:inline-flex;font-size:var(--text-xs);font-weight:var(--font-weight-semibold);height:1.5rem;justify-content:center;min-width:1.5rem;padding:0 var(--space-2)}.vds-inbox-search{align-items:center;display:inline-flex;gap:var(--space-2);min-width:0}.vds-inbox-search__toggle{align-items:center;background:var(--color-surface);border:1px solid var(--color-border-subtle);border-radius:var(--radius-md);color:var(--color-text);display:inline-flex;height:2.25rem;height:var(--icon-container-md,2.25rem);justify-content:center;transition:background-color var(--transition-fast),border-color var(--transition-fast);width:2.25rem;width:var(--icon-container-md,2.25rem)}.vds-inbox-search__toggle:hover{background:var(--color-surface-subtle,var(--color-surface-hover));border-color:var(--color-border-strong,var(--color-border-subtle))}.vds-inbox-search__toggle svg{color:currentColor;height:1rem;height:var(--icon-xs,1rem);width:1rem;width:var(--icon-xs,1rem)}.vds-inbox-search__field{align-items:center;display:inline-flex;gap:var(--space-2);opacity:0;overflow:hidden;pointer-events:none;transition:width var(--transition-normal),opacity var(--transition-fast);width:0}.vds-inbox-search__input{background:var(--color-surface);border:1px solid var(--color-border-subtle);border-radius:var(--radius-md);color:var(--color-text);font-size:var(--text-sm);line-height:var(--line-height-normal);max-width:32rem;min-width:10rem;padding:var(--space-2) var(--space-3);width:100%}.vds-inbox-search.is-open .vds-inbox-search__field,.vds-inbox-search__toggle[aria-expanded=true]+.vds-inbox-search__field{opacity:1;pointer-events:auto;width:min(36rem,52vw)}.vds-inbox-search--full{width:100%}.vds-inbox-search--full .vds-inbox-search__field{opacity:1;pointer-events:auto;width:100%}.vds-inbox__list{display:flex;flex-direction:column;gap:var(--space-2)}.vds-inbox--flat .vds-inbox__list{border-bottom:1px solid var(--color-border-subtle);border-top:1px solid var(--color-border-subtle);gap:0}.vds-inbox--flat .vds-inbox-row{border-left:0;border-radius:0;border-right:0;border-top:0}.vds-inbox--flat .vds-inbox-row+.vds-inbox-row{border-top:1px solid var(--color-border-subtle)}.vds-inbox-row{background:var(--inbox-row-bg);border:1px solid var(--inbox-row-border);border-radius:var(--inbox-row-radius);box-shadow:var(--inbox-row-shadow);overflow:clip;position:relative;transition:background-color var(--transition-fast),border-color var(--transition-fast),transform var(--transition-fast);width:100%}.vds-inbox-row:hover{background:var(--inbox-row-bg-hover);border-color:var(--color-border-strong,var(--color-border-subtle))}.vds-inbox-row:focus-visible{outline:var(--focus-ring-width) solid var(--focus-ring-color);outline-offset:var(--focus-ring-offset)}.vds-inbox-row__main{background:transparent;border:0;color:inherit;display:grid;grid-template-columns:1fr;grid-template-rows:auto auto;padding:0;text-align:left;width:100%}.vds-inbox-row__inner{grid-gap:var(--space-4);align-items:start;display:grid;gap:var(--space-4);grid-column:1/-1;grid-row:1;grid-template-areas:"badges badges" "meta actions" "data data";grid-template-columns:1fr auto;padding:var(--inbox-row-pad-y) var(--inbox-row-pad-x)}.vds-inbox-row__badges{grid-area:badges}.vds-inbox-row__meta{grid-area:meta}.vds-inbox-row__actions{grid-area:actions}.vds-inbox-row__data{display:flex;flex-direction:column;gap:var(--space-2);grid-area:data;min-width:0}@media (max-width:768px){.vds-inbox-row__inner{grid-template-areas:"badges" "meta" "data" "actions";grid-template-columns:1fr}.vds-inbox-row__actions{justify-content:flex-end;min-width:0;padding-top:0}}.vds-inbox-row__labels{justify-content:flex-start;margin-left:0;text-align:left}.vds-inbox-row__title{min-width:0}.vds-inbox-row--minimal .vds-inbox-row__inner{gap:var(--space-3);padding:var(--space-3) var(--space-3)}.vds-inbox-row--minimal{--inbox-title-size:var(--text-xs);--inbox-desc-size:var(--text-xxs,var(--text-xs))}.vds-inbox-row--normal .vds-inbox-row__inner{gap:var(--space-4);padding:var(--space-4) var(--space-4)}.vds-inbox-row--rich .vds-inbox-row__inner{gap:var(--space-5);padding:var(--space-5) var(--space-5)}.vds-inbox-row--rich{--inbox-title-size:var(--text-md,var(--text-sm));--inbox-desc-size:var(--text-sm)}.vds-inbox-row--mega .vds-inbox-row__inner{gap:var(--space-6);padding:var(--space-6) var(--space-6)}.vds-inbox-row--mega{--inbox-title-size:var(--text-lg,var(--text-md,var(--text-sm)));--inbox-desc-size:var(--text-sm)}.vds-inbox-row__badges{align-items:center;display:flex;flex-wrap:wrap;gap:var(--inbox-badge-gap);grid-column:1/-1;margin-bottom:var(--space-3)}.vds-inbox-badge{align-items:center;background:var(--color-surface-subtle);border:1px solid var(--color-border-subtle);border-radius:var(--radius-pill);color:var(--color-text);display:inline-flex;font-size:var(--text-xxs);font-weight:var(--font-weight-semibold);gap:var(--space-1_5);letter-spacing:.02em;line-height:1.1;padding:var(--space-1) var(--space-2_5);white-space:nowrap}.vds-inbox-badge svg{color:currentColor;height:var(--icon-xxs);width:var(--icon-xxs)}.vds-inbox-badge--accent{background:var(--color-accent-soft);border-color:var(--color-accent);color:var(--color-text)}.vds-inbox-badge--info{background:var(--semantic-info-bg,var(--color-info-soft));border-color:var(--semantic-info-border,var(--color-info));color:var(--semantic-info-text,var(--color-text))}.vds-inbox-badge--success{background:var(--semantic-success-bg,var(--color-success-soft));border-color:var(--semantic-success-border,var(--color-success));color:var(--semantic-success-text,var(--color-text))}.vds-inbox-badge--warning{background:var(--semantic-warning-bg,var(--color-warning-soft));border-color:var(--semantic-warning-border,var(--color-warning));color:var(--semantic-warning-text,var(--color-text))}.vds-inbox-badge--danger{background:var(--semantic-danger-bg,var(--color-danger-soft));border-color:var(--semantic-danger-border,var(--color-danger));color:var(--semantic-danger-text,var(--color-text))}.vds-inbox-row__meta{display:flex;flex-direction:column;gap:var(--space-2);min-width:0}.vds-inbox-row__titleline{align-items:center;display:flex;gap:var(--space-2);min-width:0}.vds-inbox-row__status{align-items:center;display:inline-flex;flex:0 0 auto;gap:var(--space-1_5)}.vds-inbox-row__status-icon{align-items:center;color:var(--inbox-icon-muted);display:inline-flex;height:var(--inbox-icon-size);justify-content:center;width:var(--inbox-icon-size)}.vds-inbox-row__status-icon svg{height:100%;width:100%}.vds-inbox-row.is-bookmarked .vds-inbox-row__status-icon--bookmark,.vds-inbox-row.is-starred .vds-inbox-row__status-icon--star{color:var(--color-accent)}.vds-inbox-row.is-flagged .vds-inbox-row__status-icon--flag{color:var(--color-danger-strong,var(--color-danger))}.vds-inbox-row__title{color:var(--color-text);flex:1 1 auto;font-size:var(--inbox-title-size);font-weight:var(--font-weight-semibold);letter-spacing:0;letter-spacing:var(--letter-tight,0);line-height:var(--line-height-snug);max-width:100%;min-width:16ch;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.vds-inbox-row__labels{align-items:center;display:inline-flex;flex:0 0 auto;gap:var(--space-1_5);min-width:0}.vds-inbox-label{align-items:center;background:transparent;border:1px solid var(--color-border-subtle);border-radius:var(--radius-pill);color:var(--color-text-muted);display:inline-flex;font-size:var(--text-xxs);font-weight:var(--font-weight-semibold);height:1.4rem;padding:0 var(--space-2);white-space:nowrap}.vds-inbox-label--accent{background:var(--color-accent-soft);border-color:var(--color-accent);color:var(--color-text)}.vds-inbox-label--muted{background:var(--color-surface-subtle);border-color:var(--color-border-subtle);color:var(--color-text-muted)}.vds-inbox-row__glance{-webkit-box-orient:vertical;-webkit-line-clamp:2;color:var(--color-text-muted);display:-webkit-box;font-size:var(--inbox-desc-size);line-height:var(--line-height-relaxed);min-width:0;overflow:hidden}.vds-inbox-row--rich .vds-inbox-row__glance{-webkit-line-clamp:3}.vds-inbox-row--mega .vds-inbox-row__glance{-webkit-line-clamp:4}.vds-inbox-row__metafoot{align-items:center;color:var(--color-text-soft,var(--color-text-muted));display:flex;flex-wrap:wrap;font-size:var(--text-xxs,var(--text-xs));gap:var(--space-2) var(--space-4)}.vds-inbox-row__metafoot strong{color:var(--color-text-muted);font-weight:var(--font-weight-semibold)}.vds-inbox-row__details{color:var(--color-text-muted);display:flex;flex-wrap:wrap;font-size:var(--text-xs);gap:var(--space-2) var(--space-3)}.vds-inbox-row__details-item{align-items:center;background:var(--color-surface-subtle);border:1px solid var(--color-border-subtle);border-radius:var(--radius-pill);display:inline-flex;gap:var(--space-1_5);line-height:1.1;padding:var(--space-1) var(--space-2)}.vds-inbox-row__details-item svg{color:currentColor;height:var(--icon-xxs);width:var(--icon-xxs)}.vds-inbox-row__actions{align-items:flex-start;display:flex;flex-wrap:wrap;gap:var(--inbox-action-gap);justify-content:var(--inbox-actions-justify);min-width:var(--inbox-actions-min-width);padding-top:var(--space-0_5)}.vds-inbox-row--actions-below .vds-inbox-row__inner{grid-template-areas:"badges" "meta" "data" "actions";grid-template-columns:1fr}.vds-inbox-row--actions-below .vds-inbox-row__actions{justify-content:flex-start;padding-top:0}.vds-inbox-row--actions-full .vds-inbox-row__actions{grid-column:1/-1;justify-content:flex-start;padding-top:0}.vds-inbox-row__actions--left{justify-content:flex-start}.vds-inbox-row__actions--center{justify-content:center}.vds-inbox-row__actions--right{justify-content:flex-end}.vds-inbox-action{align-items:center;background:var(--color-surface);border:1px solid var(--color-border-subtle);border-radius:var(--radius-sm);color:var(--color-text);display:inline-flex;font-size:var(--text-xs);font-weight:var(--font-weight-semibold);gap:var(--space-1_5);justify-content:center;padding:var(--space-1_5) var(--space-2_5);transition:background-color var(--transition-fast),border-color var(--transition-fast),color var(--transition-fast),transform var(--transition-fast)}a.vds-inbox-action{-webkit-text-decoration:none;text-decoration:none}.vds-inbox-action svg{color:currentColor;height:var(--icon-xxs);width:var(--icon-xxs)}.vds-inbox-action:hover{background:var(--color-surface-subtle,var(--color-surface-hover));border-color:var(--color-border-strong,var(--color-border-subtle));transform:translateY(-1px)}.vds-inbox-action:active{transform:translateY(0)}.vds-inbox-action--danger{border-color:var(--color-danger,var(--color-border-strong));color:var(--color-danger-strong,var(--color-danger))}.vds-inbox-action--accent{background:var(--color-accent-soft);border-color:var(--color-accent);color:var(--color-text)}.vds-inbox-action--icon{height:2.25rem;height:var(--icon-container-md,2.25rem);padding:0;width:2.25rem;width:var(--icon-container-md,2.25rem)}.vds-inbox-action--flat{background:transparent;border-color:transparent;color:var(--color-text-muted)}.vds-inbox-action--flat:hover{background:var(--color-surface-subtle);border-color:transparent;color:var(--color-text);transform:none}.vds-inbox--actions-flat .vds-inbox-action{background:transparent;border-color:transparent;color:var(--color-text-muted);transform:none}.vds-inbox--actions-flat .vds-inbox-action:hover{background:var(--color-surface-subtle);border-color:transparent;color:var(--color-text)}.vds-inbox-row__expanded{background:var(--color-bg-soft,var(--color-surface-subtle));border-top:1px solid var(--color-border-subtle);color:var(--color-text);display:none;grid-column:1/-1;grid-row:2;padding:var(--space-4)}.vds-inbox-row--open .vds-inbox-row__expanded{display:block}.vds-inbox-row--open .vds-inbox-row__glance{-webkit-line-clamp:none;overflow:visible}.vds-inbox--flat .vds-inbox-row__expanded{background:var(--color-surface-subtle)}.vds-inbox-row__expanded.vds-is-hidden{display:none!important}.vds-inbox-row__expanded.vds-is-visible{display:block!important}.vds-inbox-row.is-flagged:before{background:var(--inbox-flag-color,var(--color-danger));bottom:0;content:"";left:0;position:absolute;right:auto;top:0;width:6px}.vds-inbox-row--flag-1{--inbox-flag-color:var(--color-danger);--inbox-flag-surface:var(--semantic-danger-bg,var(--color-danger-soft))}.vds-icon-flag--1{color:var(--color-danger)}.vds-inbox-row--flag-2{--inbox-flag-color:var(--color-warning);--inbox-flag-surface:var(--semantic-warning-bg,var(--color-warning-soft))}.vds-icon-flag--2{color:var(--color-warning)}.vds-inbox-row--flag-3{--inbox-flag-color:var(--color-info);--inbox-flag-surface:var(--semantic-info-bg,var(--color-info-soft))}.vds-icon-flag--3{color:var(--color-info)}.vds-inbox-row--flag-4{--inbox-flag-color:var(--color-success);--inbox-flag-surface:var(--semantic-success-bg,var(--color-success-soft))}.vds-icon-flag--4{color:var(--color-success)}.vds-inbox-row--flag-5{--inbox-flag-color:var(--color-accent);--inbox-flag-surface:var(--color-accent-soft)}.vds-icon-flag--5{color:var(--color-accent)}.vds-inbox-filter{align-items:center;background:var(--color-surface);border:1px solid var(--color-border-subtle);border-radius:var(--radius-lg);display:flex;flex-wrap:wrap;gap:var(--space-2) var(--space-3);padding:var(--space-3) var(--space-4)}.vds-inbox-filter__group{align-items:center;display:inline-flex;gap:var(--space-2);min-width:0}.vds-inbox-filter__label{color:var(--color-text-muted)}.vds-inbox-filter__chip,.vds-inbox-filter__label{font-size:var(--text-xs);font-weight:var(--font-weight-semibold);white-space:nowrap}.vds-inbox-filter__chip{align-items:center;background:var(--color-surface-subtle);border:1px solid var(--color-border-subtle);border-radius:var(--radius-pill);color:var(--color-text);display:inline-flex;gap:var(--space-1_5);line-height:1.1;padding:var(--space-1_5) var(--space-2_5)}.vds-inbox-filter__chip--active{background:var(--color-accent-soft);border-color:var(--color-accent)}.vds-inbox-filter__actions{margin-left:auto}.vds-inbox-cornerbar,.vds-inbox-filter__actions{align-items:center;display:inline-flex;gap:var(--space-2)}.vds-inbox-cornerbar{bottom:var(--space-6);left:auto;pointer-events:none;position:fixed;right:var(--space-6);top:auto;z-index:40}.vds-inbox-cornerbar--left{bottom:var(--space-6);left:var(--space-6);right:auto;top:auto}.vds-inbox-cornerbar__inner{align-items:center;background:var(--color-surface);border:1px solid var(--color-border-subtle);border-radius:var(--radius-xl,var(--radius-lg));box-shadow:none;box-shadow:var(--shadow-md,none);display:inline-flex;gap:var(--space-2);padding:var(--space-2);pointer-events:auto}@media (max-width:768px){.vds-inbox-row__inner{gap:var(--space-3);grid-template-columns:1fr}.vds-inbox-row__actions{justify-content:flex-start;padding-top:0}.vds-inbox-row__titleline{flex-wrap:wrap;row-gap:var(--space-1_5)}.vds-inbox-row__title{flex-basis:100%;overflow:visible;text-overflow:clip;white-space:normal}.vds-inbox-row__labels{flex-basis:100%;justify-content:flex-start}.vds-inbox-nav__bar{flex-wrap:wrap;gap:var(--space-3);justify-content:center}.vds-inbox-tabs{justify-content:center;order:1;width:100%}.vds-inbox-nav__left{order:0}.vds-inbox-nav__right{order:2}.vds-inbox-nav__bottom{align-items:stretch;flex-direction:column}.vds-inbox-nav__bottom-left,.vds-inbox-nav__bottom-right{justify-content:flex-start}.vds-inbox-search.is-open .vds-inbox-search__field,.vds-inbox-search__toggle[aria-expanded=true]+.vds-inbox-search__field{width:min(100%,40rem)}.vds-inbox__hide-sm{display:none!important}}@media (min-width:769px){.vds-inbox__show-sm{display:none!important}}@media (max-width:1024px){.vds-inbox__hide-md{display:none!important}}@media (min-width:1025px){.vds-inbox__show-md{display:none!important}}.vds-inbox__truncate{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.vds-inbox__sr-only{clip:rect(0,0,0,0)!important;border:0!important;height:1px!important;margin:-1px!important;overflow:hidden!important;padding:0!important;position:absolute!important;white-space:nowrap!important;width:1px!important}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@24vlh/vds",
3
- "version": "0.1.3",
3
+ "version": "0.1.4",
4
4
  "description": "VDS — Vlah Design System CSS Framework",
5
5
  "author": "@vlah.io",
6
6
  "license": "Apache-2.0",