barua-ui 0.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.
@@ -0,0 +1,525 @@
1
+ /* ==========================================================================
2
+ Barua UI — Productivity & App Chrome
3
+ Dashboard/Workspace shells, Command Center, Kanban, Task, Calendar View,
4
+ Gantt, Activity/Inspector/Properties panels, Master-Detail, Dock,
5
+ Status Bar. Interaction: drag & drop, selection.
6
+ ========================================================================== */
7
+
8
+ @layer components {
9
+ /* ---- App shells ------------------------------------------------------------
10
+ .b-workspace = topbar + sidebar + main (+ inspector)
11
+ ----------------------------------------------------------------------------- */
12
+ .b-workspace {
13
+ display: grid;
14
+ grid-template-rows: auto 1fr auto;
15
+ grid-template-columns: auto 1fr auto;
16
+ grid-template-areas:
17
+ "topbar topbar topbar"
18
+ "sidebar main inspector"
19
+ "statusbar statusbar statusbar";
20
+ height: 100dvh;
21
+ overflow: hidden;
22
+ }
23
+ .b-workspace > .b-topnav { grid-area: topbar; }
24
+ .b-workspace > .b-sidebar, .b-workspace > .b-rail { grid-area: sidebar; height: 100%; }
25
+ .b-workspace__main {
26
+ grid-area: main;
27
+ overflow: auto;
28
+ padding: var(--b-space-6);
29
+ }
30
+ .b-workspace > .b-inspector { grid-area: inspector; }
31
+ .b-workspace > .b-statusbar { grid-area: statusbar; }
32
+
33
+ /* Dashboard grid */
34
+ .b-dashboard {
35
+ display: grid;
36
+ gap: var(--b-space-4);
37
+ grid-template-columns: repeat(12, minmax(0, 1fr));
38
+ }
39
+ .b-dashboard > * { grid-column: span 12; }
40
+ @media (min-width: 768px) {
41
+ /* The full scale: a twelve-column grid that only answers to five of the
42
+ twelve is a trap — b-span-7 silently did nothing. */
43
+ .b-dashboard > .b-span-2 { grid-column: span 2; }
44
+ .b-dashboard > .b-span-3 { grid-column: span 3; }
45
+ .b-dashboard > .b-span-4 { grid-column: span 4; }
46
+ .b-dashboard > .b-span-5 { grid-column: span 5; }
47
+ .b-dashboard > .b-span-6 { grid-column: span 6; }
48
+ .b-dashboard > .b-span-7 { grid-column: span 7; }
49
+ .b-dashboard > .b-span-8 { grid-column: span 8; }
50
+ .b-dashboard > .b-span-9 { grid-column: span 9; }
51
+ .b-dashboard > .b-span-10 { grid-column: span 10; }
52
+ .b-dashboard > .b-span-11 { grid-column: span 11; }
53
+ .b-dashboard > .b-span-12 { grid-column: span 12; }
54
+ }
55
+
56
+ /* Command center hero (search-first) */
57
+ .b-command-center {
58
+ display: flex;
59
+ flex-direction: column;
60
+ align-items: center;
61
+ gap: var(--b-space-4);
62
+ padding: var(--b-space-16) var(--b-space-4);
63
+ text-align: center;
64
+ }
65
+ .b-command-center .b-input-group { width: min(34rem, 100%); }
66
+
67
+ /* ---- Kanban ------------------------------------------------------------------ */
68
+ .b-kanban {
69
+ display: flex;
70
+ gap: var(--b-space-4);
71
+ align-items: flex-start;
72
+ overflow-x: auto;
73
+ padding-block-end: var(--b-space-4);
74
+ }
75
+ .b-kanban-col {
76
+ flex: 0 0 17rem;
77
+ display: flex;
78
+ flex-direction: column;
79
+ gap: var(--b-space-2);
80
+ max-height: 100%;
81
+ padding: var(--b-space-3);
82
+ background: var(--b-fill-quaternary);
83
+ border: 1px solid var(--b-separator);
84
+ border-radius: var(--b-radius-xl);
85
+ }
86
+ .b-kanban-col__header {
87
+ display: flex;
88
+ align-items: center;
89
+ gap: var(--b-space-2);
90
+ padding-inline: var(--b-space-1);
91
+ font-size: var(--b-text-footnote);
92
+ font-weight: var(--b-weight-semibold);
93
+ }
94
+ .b-kanban-col__count {
95
+ color: var(--b-text-tertiary);
96
+ font-weight: var(--b-weight-regular);
97
+ }
98
+ .b-kanban-col__list {
99
+ display: flex;
100
+ flex-direction: column;
101
+ gap: var(--b-space-2);
102
+ min-height: 2rem;
103
+ overflow-y: auto;
104
+ }
105
+ .b-kanban-col.is-dropover {
106
+ background: var(--b-color-accent-soft);
107
+ border-color: var(--b-color-accent);
108
+ border-style: dashed;
109
+ }
110
+
111
+ /* ---- Task card / Task list ----------------------------------------------------- */
112
+ .b-task {
113
+ display: flex;
114
+ flex-direction: column;
115
+ gap: var(--b-space-2);
116
+ padding: var(--b-space-3);
117
+ background: var(--b-surface);
118
+ border: 1px solid var(--b-separator);
119
+ border-radius: var(--b-radius-lg);
120
+ box-shadow: var(--b-shadow-xs);
121
+ cursor: grab;
122
+ transition: box-shadow var(--b-duration-fast), translate var(--b-duration-fast) var(--b-ease-out);
123
+ }
124
+ .b-task:hover { box-shadow: var(--b-shadow-sm); translate: 0 -1px; }
125
+ .b-task.is-dragging { opacity: 0.55; rotate: 2deg; cursor: grabbing; }
126
+ .b-task__title { font-size: var(--b-text-footnote); font-weight: var(--b-weight-medium); }
127
+ .b-task__meta {
128
+ display: flex;
129
+ align-items: center;
130
+ gap: var(--b-space-2);
131
+ font-size: var(--b-text-caption);
132
+ color: var(--b-text-tertiary);
133
+ }
134
+ .b-task__meta .b-avatar { --b-avatar-size: 1.25rem; margin-inline-start: auto; }
135
+
136
+ .b-task-list { display: flex; flex-direction: column; }
137
+ .b-task-row {
138
+ display: flex;
139
+ align-items: center;
140
+ gap: var(--b-space-3);
141
+ padding: var(--b-space-2) var(--b-space-3);
142
+ border-radius: var(--b-radius-md);
143
+ font-size: var(--b-text-subheadline);
144
+ }
145
+ .b-task-row:hover { background: var(--b-fill-quaternary); }
146
+ .b-task-row.is-done .b-task-row__title {
147
+ color: var(--b-text-tertiary);
148
+ text-decoration: line-through;
149
+ }
150
+ .b-task-row__title { flex: 1; min-width: 0; }
151
+ .b-task-row__due {
152
+ font-size: var(--b-text-caption);
153
+ color: var(--b-text-tertiary);
154
+ font-variant-numeric: tabular-nums;
155
+ }
156
+ .b-task-row__due.is-overdue { color: var(--b-color-danger); font-weight: var(--b-weight-medium); }
157
+
158
+ /* ---- Calendar View (month grid) -------------------------------------------------- */
159
+ .b-calview {
160
+ display: grid;
161
+ grid-template-columns: repeat(7, 1fr);
162
+ background: var(--b-surface);
163
+ border: 1px solid var(--b-separator);
164
+ border-radius: var(--b-radius-xl);
165
+ overflow: hidden;
166
+ }
167
+ .b-calview__head {
168
+ padding: var(--b-space-2);
169
+ font-size: var(--b-text-caption);
170
+ font-weight: var(--b-weight-semibold);
171
+ text-transform: uppercase;
172
+ letter-spacing: var(--b-tracking-wide);
173
+ color: var(--b-text-tertiary);
174
+ text-align: center;
175
+ background: var(--b-fill-quaternary);
176
+ border-bottom: 1px solid var(--b-separator);
177
+ }
178
+ .b-calview__cell {
179
+ min-height: 6rem;
180
+ padding: var(--b-space-1);
181
+ border-bottom: 1px solid var(--b-separator);
182
+ border-inline-end: 1px solid var(--b-separator);
183
+ font-size: var(--b-text-caption);
184
+ }
185
+ .b-calview__cell:nth-child(7n) { border-inline-end: none; }
186
+ .b-calview__date {
187
+ display: inline-grid;
188
+ place-items: center;
189
+ width: 1.5rem; height: 1.5rem;
190
+ font-variant-numeric: tabular-nums;
191
+ border-radius: 50%;
192
+ color: var(--b-text-secondary);
193
+ }
194
+ .b-calview__cell.is-today .b-calview__date {
195
+ background: var(--b-color-accent);
196
+ color: var(--b-color-on-accent);
197
+ font-weight: var(--b-weight-semibold);
198
+ }
199
+ .b-calview__cell.is-other-month { background: var(--b-fill-quaternary); }
200
+ .b-calview__cell.is-other-month .b-calview__date { color: var(--b-text-quaternary); }
201
+ .b-event {
202
+ display: block;
203
+ margin-block-start: 2px;
204
+ padding: 0.1rem var(--b-space-1);
205
+ font-size: var(--b-text-caption2);
206
+ font-weight: var(--b-weight-medium);
207
+ color: var(--b-color-accent-text);
208
+ background: var(--b-color-accent-soft);
209
+ border-inline-start: 2px solid var(--b-color-accent);
210
+ border-radius: var(--b-radius-xs);
211
+ overflow: hidden;
212
+ text-overflow: ellipsis;
213
+ white-space: nowrap;
214
+ cursor: pointer;
215
+ }
216
+ .b-event--green { color: var(--b-color-success); background: var(--b-color-success-soft); border-color: var(--b-color-success); }
217
+ .b-event--orange { color: light-dark(#b46200, var(--b-color-warning)); background: var(--b-color-warning-soft); border-color: var(--b-color-warning); }
218
+ .b-event--purple { color: var(--b-color-purple); background: var(--b-color-purple-soft); border-color: var(--b-color-purple); }
219
+
220
+ /* ---- Gantt View --------------------------------------------------------------------- */
221
+ .b-gantt {
222
+ display: grid;
223
+ grid-template-columns: minmax(9rem, max-content) 1fr;
224
+ background: var(--b-surface);
225
+ border: 1px solid var(--b-separator);
226
+ border-radius: var(--b-radius-xl);
227
+ overflow: hidden;
228
+ font-size: var(--b-text-footnote);
229
+ }
230
+ .b-gantt__label {
231
+ padding: var(--b-space-2) var(--b-space-3);
232
+ border-bottom: 1px solid var(--b-separator);
233
+ border-inline-end: 1px solid var(--b-separator);
234
+ white-space: nowrap;
235
+ }
236
+ .b-gantt__row {
237
+ position: relative;
238
+ border-bottom: 1px solid var(--b-separator);
239
+ background:
240
+ repeating-linear-gradient(90deg,
241
+ transparent 0 calc(100% / var(--b-gantt-units, 12) - 1px),
242
+ var(--b-separator) calc(100% / var(--b-gantt-units, 12) - 1px)
243
+ calc(100% / var(--b-gantt-units, 12)));
244
+ }
245
+ .b-gantt__bar {
246
+ position: absolute;
247
+ top: 50%;
248
+ translate: 0 -50%;
249
+ inset-inline-start: var(--start, 0%);
250
+ width: var(--len, 20%);
251
+ height: 1.1rem;
252
+ background: var(--b-chart-color, var(--b-chart-1));
253
+ border-radius: var(--b-radius-full);
254
+ cursor: pointer;
255
+ transition: filter var(--b-duration-fast);
256
+ }
257
+ .b-gantt__bar:hover { filter: brightness(1.1); }
258
+ .b-gantt__bar > i {
259
+ position: absolute;
260
+ inset: 0;
261
+ width: var(--done, 0%);
262
+ background: rgba(255, 255, 255, 0.35);
263
+ border-radius: inherit;
264
+ }
265
+
266
+ /* ---- Panels: Activity / Inspector / Properties / Detail ------------------------------- */
267
+ .b-inspector {
268
+ display: flex;
269
+ flex-direction: column;
270
+ width: var(--b-inspector-w, 19rem);
271
+ background: var(--b-surface);
272
+ border-inline-start: 1px solid var(--b-separator);
273
+ overflow-y: auto;
274
+ }
275
+ .b-inspector__header {
276
+ display: flex;
277
+ align-items: center;
278
+ justify-content: space-between;
279
+ padding: var(--b-space-3) var(--b-space-4);
280
+ font-size: var(--b-text-footnote);
281
+ font-weight: var(--b-weight-semibold);
282
+ border-bottom: 1px solid var(--b-separator);
283
+ position: sticky;
284
+ top: 0;
285
+ background: inherit;
286
+ }
287
+ .b-inspector__section {
288
+ padding: var(--b-space-4);
289
+ border-bottom: 1px solid var(--b-separator);
290
+ }
291
+ .b-inspector__section > h6 { margin-block-end: var(--b-space-3); }
292
+
293
+ /* Properties rows (label: control) */
294
+ .b-props { display: flex; flex-direction: column; gap: var(--b-space-2); }
295
+ .b-props__row {
296
+ display: grid;
297
+ grid-template-columns: 6rem 1fr;
298
+ align-items: center;
299
+ gap: var(--b-space-2);
300
+ font-size: var(--b-text-footnote);
301
+ }
302
+ .b-props__key { color: var(--b-text-secondary); }
303
+ .b-props__row .b-input, .b-props__row .b-select { height: var(--b-control-h-sm); font-size: var(--b-text-footnote); }
304
+
305
+ /* ---- Master-Detail ---------------------------------------------------------------------- */
306
+ .b-master-detail {
307
+ display: grid;
308
+ grid-template-columns: minmax(15rem, 0.38fr) 1fr;
309
+ min-height: 24rem;
310
+ background: var(--b-surface);
311
+ border: 1px solid var(--b-separator);
312
+ border-radius: var(--b-radius-xl);
313
+ overflow: hidden;
314
+ }
315
+ .b-master-detail__list {
316
+ border-inline-end: 1px solid var(--b-separator);
317
+ overflow-y: auto;
318
+ }
319
+ .b-master-detail__detail { padding: var(--b-space-6); overflow-y: auto; }
320
+ @media (max-width: 767px) {
321
+ .b-master-detail { grid-template-columns: 1fr; }
322
+ .b-master-detail__list { border-inline-end: none; }
323
+ .b-master-detail.is-detail-open .b-master-detail__list { display: none; }
324
+ .b-master-detail:not(.is-detail-open) .b-master-detail__detail { display: none; }
325
+ }
326
+
327
+ /* ---- App grid (iOS home screen) ------------------------------------------
328
+ <ul class="b-app-grid"><li><a class="b-app-tile">…icon + label…</a></li>
329
+ ----------------------------------------------------------------------------- */
330
+ .b-app-grid {
331
+ display: grid;
332
+ grid-template-columns: repeat(auto-fill, minmax(5.25rem, 1fr));
333
+ gap: var(--b-space-5) var(--b-space-2);
334
+ list-style: none;
335
+ margin: 0;
336
+ padding: 0;
337
+ }
338
+ .b-app-tile {
339
+ display: flex;
340
+ flex-direction: column;
341
+ align-items: center;
342
+ gap: var(--b-space-2);
343
+ text-align: center;
344
+ color: var(--b-text);
345
+ cursor: pointer;
346
+ }
347
+ .b-app-tile:hover { text-decoration: none; }
348
+ .b-app-tile__icon {
349
+ display: grid;
350
+ place-items: center;
351
+ width: 3.75rem;
352
+ height: 3.75rem;
353
+ color: #fff;
354
+ background: var(--b-color-accent);
355
+ border-radius: 1.15rem;
356
+ box-shadow: var(--b-glass-edge), var(--b-shadow-sm);
357
+ transition: scale var(--b-duration-fast) var(--b-ease-bounce);
358
+ }
359
+ .b-app-tile:hover .b-app-tile__icon { scale: 1.06; }
360
+ .b-app-tile:active .b-app-tile__icon { scale: 0.94; }
361
+ .b-app-tile__label {
362
+ font-size: var(--b-text-caption);
363
+ font-weight: var(--b-weight-medium);
364
+ line-height: 1.25;
365
+ }
366
+ .b-app-tile__hint { font-size: var(--b-text-caption2); color: var(--b-text-tertiary); }
367
+ .b-app-tile.is-soon .b-app-tile__icon { opacity: 0.55; filter: saturate(0.6); }
368
+ .b-app-tile.is-soon .b-app-tile__label { color: var(--b-text-secondary); }
369
+
370
+ /* ---- Dock ---------------------------------------------------------------------------------- */
371
+ .b-dock {
372
+ position: fixed;
373
+ inset-inline: 0;
374
+ inset-block-end: var(--b-space-3);
375
+ display: flex;
376
+ justify-content: center;
377
+ z-index: var(--b-z-sticky);
378
+ pointer-events: none;
379
+ }
380
+ .b-dock__tray {
381
+ display: flex;
382
+ align-items: flex-end;
383
+ gap: var(--b-space-2);
384
+ max-width: calc(100vw - var(--b-space-3) * 2);
385
+ overflow-x: auto;
386
+ scrollbar-width: none;
387
+ padding: var(--b-space-2);
388
+ background: var(--b-material-thin-bg);
389
+ -webkit-backdrop-filter: var(--b-glass-heavy);
390
+ backdrop-filter: var(--b-glass-heavy);
391
+ border: 1px solid var(--b-hairline);
392
+ border-radius: var(--b-radius-xl);
393
+ box-shadow: var(--b-glass-edge), var(--b-elevation-3);
394
+ pointer-events: auto;
395
+ }
396
+ .b-dock__tray::-webkit-scrollbar { display: none; }
397
+ .b-dock__item {
398
+ flex: none;
399
+ display: grid;
400
+ place-items: center;
401
+ width: 2.75rem; height: 2.75rem;
402
+ font-size: 1.35rem;
403
+ background: none;
404
+ border: none;
405
+ border-radius: var(--b-radius-md);
406
+ cursor: pointer;
407
+ transition: scale var(--b-duration-fast) var(--b-ease-bounce),
408
+ translate var(--b-duration-fast) var(--b-ease-bounce);
409
+ }
410
+ .b-dock__item:hover { scale: 1.28; translate: 0 -6px; }
411
+ .b-dock__item.is-active { position: relative; }
412
+ .b-dock__item.is-active::after {
413
+ content: "";
414
+ position: absolute;
415
+ inset-block-end: -0.3rem;
416
+ width: 0.25rem; height: 0.25rem;
417
+ border-radius: 50%;
418
+ background: var(--b-text-secondary);
419
+ }
420
+
421
+
422
+ /* ---- Ornament (visionOS-style glass attachment) --------------------------
423
+ A floating glass control cluster attached to a panel's edge. Host gets
424
+ .b-ornament-host; the ornament hangs half-outside the edge it names.
425
+ ----------------------------------------------------------------------------- */
426
+ .b-ornament-host { position: relative; overflow: visible; }
427
+ .b-ornament {
428
+ position: absolute;
429
+ display: flex;
430
+ align-items: center;
431
+ gap: var(--b-space-1);
432
+ padding: var(--b-space-1);
433
+ background: var(--b-material-thin-bg);
434
+ -webkit-backdrop-filter: var(--b-glass-heavy);
435
+ backdrop-filter: var(--b-glass-heavy);
436
+ border: 1px solid var(--b-hairline);
437
+ border-radius: var(--b-radius-full);
438
+ box-shadow: var(--b-glass-edge), var(--b-shadow-md);
439
+ }
440
+ .b-ornament--bottom {
441
+ inset-inline-start: 50%;
442
+ inset-block-end: 0;
443
+ translate: -50% 50%;
444
+ }
445
+ .b-ornament--top {
446
+ inset-inline-start: 50%;
447
+ inset-block-start: 0;
448
+ translate: -50% -50%;
449
+ }
450
+ .b-ornament--start {
451
+ inset-block-start: 50%;
452
+ inset-inline-start: 0;
453
+ translate: -50% -50%;
454
+ flex-direction: column;
455
+ }
456
+ .b-ornament--end {
457
+ inset-block-start: 50%;
458
+ inset-inline-end: 0;
459
+ translate: 50% -50%;
460
+ flex-direction: column;
461
+ }
462
+
463
+ /* ---- Status Bar ------------------------------------------------------------------------------ */
464
+ .b-statusbar {
465
+ display: flex;
466
+ align-items: center;
467
+ gap: var(--b-space-4);
468
+ padding: var(--b-space-1) var(--b-space-3);
469
+ font-size: var(--b-text-caption);
470
+ color: var(--b-text-secondary);
471
+ background: var(--b-surface-2);
472
+ border-top: 1px solid var(--b-separator);
473
+ font-variant-numeric: tabular-nums;
474
+ }
475
+ .b-statusbar__item { display: inline-flex; align-items: center; gap: var(--b-space-1); }
476
+
477
+ /* ---- Drag & Drop / Selection ------------------------------------------------------------------ */
478
+ .b-dropzone {
479
+ border: 2px dashed transparent;
480
+ border-radius: var(--b-radius-lg);
481
+ transition: border-color var(--b-duration-fast), background var(--b-duration-fast);
482
+ }
483
+ .b-dropzone.is-dropover {
484
+ border-color: var(--b-color-accent);
485
+ background: var(--b-color-accent-soft);
486
+ }
487
+ .b-drag-handle {
488
+ color: var(--b-text-quaternary);
489
+ cursor: grab;
490
+ touch-action: none;
491
+ background: none;
492
+ border: none;
493
+ padding: var(--b-space-1);
494
+ border-radius: var(--b-radius-xs);
495
+ }
496
+ .b-drag-handle:hover { color: var(--b-text-secondary); background: var(--b-fill-quaternary); }
497
+ .b-drag-handle:active { cursor: grabbing; }
498
+ .b-drag-ghost { opacity: 0.5; }
499
+ .b-drop-indicator {
500
+ height: 2px;
501
+ margin-block: -1px;
502
+ background: var(--b-color-accent);
503
+ border-radius: var(--b-radius-full);
504
+ box-shadow: 0 0 0 2px var(--b-color-accent-soft);
505
+ }
506
+
507
+ .b-selectable { user-select: none; cursor: default; }
508
+ .b-selectable.is-selected {
509
+ background: var(--b-color-accent-soft);
510
+ box-shadow: inset 0 0 0 1.5px var(--b-color-accent);
511
+ border-radius: var(--b-radius-md);
512
+ }
513
+ .b-selection-rect {
514
+ position: fixed;
515
+ z-index: var(--b-z-overlay);
516
+ background: color-mix(in srgb, var(--b-color-accent) 12%, transparent);
517
+ border: 1px solid var(--b-color-accent);
518
+ pointer-events: none;
519
+ }
520
+ .b-selection-count {
521
+ font-size: var(--b-text-footnote);
522
+ font-weight: var(--b-weight-semibold);
523
+ color: var(--b-color-accent-text);
524
+ }
525
+ }