sid-ui 0.0.0-stage → 0.1.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.
Files changed (116) hide show
  1. package/README.md +54 -2
  2. package/package.json +51 -4
  3. package/src/brand/BrandFooter.tsx +45 -0
  4. package/src/brand/BrandHeading.tsx +24 -0
  5. package/src/brand/BrandLockup.tsx +47 -0
  6. package/src/brand/JoinedLogo.tsx +67 -0
  7. package/src/brand/JoinedMark.tsx +76 -0
  8. package/src/brand/geometry.ts +26 -0
  9. package/src/brand/index.ts +11 -0
  10. package/src/brand/name.ts +5 -0
  11. package/src/brand/paint.tsx +56 -0
  12. package/src/components/Action.tsx +44 -0
  13. package/src/components/AddressSelector.tsx +99 -0
  14. package/src/components/BarChart.tsx +132 -0
  15. package/src/components/Calendar.tsx +284 -0
  16. package/src/components/CalendarAgenda.tsx +87 -0
  17. package/src/components/CalendarMonth.tsx +223 -0
  18. package/src/components/CalendarSchedule.tsx +210 -0
  19. package/src/components/Card.tsx +80 -0
  20. package/src/components/Charts.tsx +64 -0
  21. package/src/components/Chat.tsx +35 -0
  22. package/src/components/CitySelector.tsx +81 -0
  23. package/src/components/Clock.tsx +196 -0
  24. package/src/components/CodeInput.tsx +183 -0
  25. package/src/components/Container.tsx +20 -0
  26. package/src/components/Content.tsx +50 -0
  27. package/src/components/Data.tsx +43 -0
  28. package/src/components/DataInput.tsx +107 -0
  29. package/src/components/DateField.tsx +162 -0
  30. package/src/components/DonutChart.tsx +123 -0
  31. package/src/components/Drawer.tsx +110 -0
  32. package/src/components/Feedback.tsx +37 -0
  33. package/src/components/FileUploader.tsx +377 -0
  34. package/src/components/FunnelChart.tsx +83 -0
  35. package/src/components/Glyph.tsx +330 -0
  36. package/src/components/GoogleSignIn.tsx +67 -0
  37. package/src/components/GridSystem.tsx +131 -0
  38. package/src/components/HeatmapCalendar.tsx +167 -0
  39. package/src/components/KanbanBoard.tsx +421 -0
  40. package/src/components/Kpi.tsx +61 -0
  41. package/src/components/LayoutPrimitives.tsx +86 -0
  42. package/src/components/Lists.tsx +19 -0
  43. package/src/components/LocationSelector.tsx +49 -0
  44. package/src/components/MessageList.tsx +80 -0
  45. package/src/components/Nav.tsx +69 -0
  46. package/src/components/Navigation.tsx +52 -0
  47. package/src/components/Notification.tsx +115 -0
  48. package/src/components/NotificationTrigger.tsx +248 -0
  49. package/src/components/Overlay.tsx +50 -0
  50. package/src/components/Page.tsx +143 -0
  51. package/src/components/PageTabs.tsx +28 -0
  52. package/src/components/PickerShell.tsx +138 -0
  53. package/src/components/PillNav.tsx +194 -0
  54. package/src/components/Primitives.tsx +30 -0
  55. package/src/components/Rating.tsx +78 -0
  56. package/src/components/Responsive.tsx +128 -0
  57. package/src/components/ResponsiveFrame.tsx +122 -0
  58. package/src/components/Segment.tsx +190 -0
  59. package/src/components/Sparkline.tsx +52 -0
  60. package/src/components/StateSelector.tsx +39 -0
  61. package/src/components/Sticky.tsx +95 -0
  62. package/src/components/Table.tsx +344 -0
  63. package/src/components/ThemeToggle.tsx +48 -0
  64. package/src/components/Tile.tsx +23 -0
  65. package/src/components/TimeColumns.tsx +155 -0
  66. package/src/components/TimeDial.tsx +260 -0
  67. package/src/components/TimeField.tsx +196 -0
  68. package/src/components/TimeInput.tsx +213 -0
  69. package/src/components/TimeSlots.tsx +83 -0
  70. package/src/components/Timeline.tsx +111 -0
  71. package/src/components/TokenDemo.tsx +378 -0
  72. package/src/components/Tree.tsx +283 -0
  73. package/src/components/TrendChart.tsx +211 -0
  74. package/src/components/breakpoints.ts +42 -0
  75. package/src/components/calendarTypes.ts +26 -0
  76. package/src/components/chartMath.ts +125 -0
  77. package/src/components/chartParts.tsx +116 -0
  78. package/src/components/codeInputRules.ts +58 -0
  79. package/src/components/date.ts +87 -0
  80. package/src/components/hooks.ts +53 -0
  81. package/src/components/index.ts +195 -0
  82. package/src/components/kanban.ts +78 -0
  83. package/src/components/motion.ts +78 -0
  84. package/src/components/places-search.tsx +73 -0
  85. package/src/components/places.ts +209 -0
  86. package/src/components/size.ts +3 -0
  87. package/src/components/time.ts +83 -0
  88. package/src/components/useFileDrop.ts +104 -0
  89. package/src/places/geoapify.ts +129 -0
  90. package/src/styles/astryx.css +5 -0
  91. package/src/styles/components/brand.css +98 -0
  92. package/src/styles/components/calendar.css +680 -0
  93. package/src/styles/components/charts.css +659 -0
  94. package/src/styles/components/code-input.css +233 -0
  95. package/src/styles/components/google.css +11 -0
  96. package/src/styles/components/message-list.css +153 -0
  97. package/src/styles/components/notification.css +350 -0
  98. package/src/styles/components/picker.css +114 -0
  99. package/src/styles/components/pill-nav.css +179 -0
  100. package/src/styles/components/responsive.css +419 -0
  101. package/src/styles/components/sticky.css +23 -0
  102. package/src/styles/components/table.css +267 -0
  103. package/src/styles/components/time.css +526 -0
  104. package/src/styles/components/timeline.css +426 -0
  105. package/src/styles/components/tree.css +269 -0
  106. package/src/styles/components.css +423 -0
  107. package/src/styles/joined.css +4 -0
  108. package/src/styles/theme.css +79 -0
  109. package/src/styles/tokens.css +338 -0
  110. package/src/theme/JoinedProvider.tsx +50 -0
  111. package/src/theme/index.ts +3 -0
  112. package/src/theme/joined.d.ts +11 -0
  113. package/src/theme/joined.js +569 -0
  114. package/src/theme/joined.theme.ts +74 -0
  115. package/src/theme/joined.variants.d.ts +16 -0
  116. package/src/theme/theme.css +786 -0
@@ -0,0 +1,680 @@
1
+ /* Calendar — header, month grid, week/day schedule, agenda, month/year jump. */
2
+
3
+ .os-cal {
4
+ --os-cal-cell: 36px;
5
+ --os-cal-hour: 44px;
6
+ --os-cal-pad: var(--spacing-3);
7
+ --os-cal-weekno: 0px;
8
+ box-sizing: border-box;
9
+ display: flex;
10
+ flex-direction: column;
11
+ gap: var(--spacing-2);
12
+ width: calc(var(--os-cal-cell) * 7 + var(--os-cal-weekno) + var(--os-cal-pad) * 2);
13
+ padding: var(--os-cal-pad);
14
+ background: var(--color-background-surface);
15
+ border-radius: var(--radius-container);
16
+ box-shadow:
17
+ 0 0 0 1px var(--color-border),
18
+ var(--shadow-low, var(--elevation-1));
19
+ color: var(--color-text-primary);
20
+ font-size: var(--font-size-base);
21
+ }
22
+ .os-cal-sm {
23
+ --os-cal-cell: 32px;
24
+ --os-cal-hour: 36px;
25
+ --os-cal-pad: var(--spacing-2);
26
+ font-size: var(--font-size-sm);
27
+ }
28
+ .os-cal-lg {
29
+ --os-cal-cell: 44px;
30
+ --os-cal-hour: 52px;
31
+ --os-cal-pad: var(--spacing-4);
32
+ }
33
+ .os-cal:has(.os-cal-month-weeks) {
34
+ --os-cal-weekno: 28px;
35
+ }
36
+ .os-cal-wide {
37
+ width: 100%;
38
+ min-width: 0;
39
+ }
40
+ .os-cal-agenda-view {
41
+ width: 100%;
42
+ min-width: 0;
43
+ }
44
+ .os-picker-panel .os-cal {
45
+ padding: 0;
46
+ box-shadow: none;
47
+ background: transparent;
48
+ }
49
+
50
+ .os-cal-tone-accent {
51
+ --os-cal-tone: var(--color-accent);
52
+ --os-cal-soft: var(--color-accent-muted);
53
+ --os-cal-ink: var(--color-text-accent);
54
+ }
55
+ .os-cal-tone-success {
56
+ --os-cal-tone: var(--color-success);
57
+ --os-cal-soft: var(--color-success-muted);
58
+ --os-cal-ink: var(--color-success);
59
+ }
60
+ .os-cal-tone-warning {
61
+ --os-cal-tone: var(--color-warning);
62
+ --os-cal-soft: var(--color-warning-muted);
63
+ --os-cal-ink: var(--color-warning);
64
+ }
65
+ .os-cal-tone-danger {
66
+ --os-cal-tone: var(--color-error);
67
+ --os-cal-soft: var(--color-error-muted);
68
+ --os-cal-ink: var(--color-error);
69
+ }
70
+ .os-cal-tone-neutral {
71
+ --os-cal-tone: var(--color-icon-secondary);
72
+ --os-cal-soft: var(--color-neutral);
73
+ --os-cal-ink: var(--color-text-primary);
74
+ }
75
+
76
+ /* Header */
77
+ .os-cal-head {
78
+ display: flex;
79
+ align-items: center;
80
+ justify-content: space-between;
81
+ gap: var(--spacing-1);
82
+ min-width: 0;
83
+ }
84
+ .os-cal-wide .os-cal-head {
85
+ flex-wrap: wrap;
86
+ gap: var(--spacing-2);
87
+ }
88
+ .os-cal-title {
89
+ display: inline-flex;
90
+ align-items: center;
91
+ gap: var(--spacing-1-5, 6px);
92
+ min-width: 0;
93
+ margin-left: calc(var(--spacing-2) * -1 + var(--spacing-1));
94
+ padding: var(--spacing-1) var(--spacing-2);
95
+ white-space: nowrap;
96
+ border: 0;
97
+ border-radius: var(--radius-inner);
98
+ background: transparent;
99
+ color: var(--color-text-primary);
100
+ font: inherit;
101
+ font-weight: var(--font-weight-semibold, 600);
102
+ cursor: pointer;
103
+ transition: background-color var(--duration-fast) var(--ease-standard);
104
+ }
105
+ .os-cal-lg .os-cal-title,
106
+ .os-cal-wide .os-cal-title {
107
+ font-size: var(--font-size-lg);
108
+ }
109
+ .os-cal-title:hover {
110
+ background: var(--color-overlay-hover);
111
+ }
112
+ .os-cal-title:focus-visible {
113
+ outline: 2px solid var(--color-accent);
114
+ outline-offset: 1px;
115
+ }
116
+ .os-cal-year {
117
+ color: var(--color-text-secondary);
118
+ font-weight: var(--font-weight-normal, 400);
119
+ }
120
+ .os-cal-title-chevron {
121
+ width: 14px;
122
+ height: 14px;
123
+ color: var(--color-icon-secondary);
124
+ transition: transform var(--duration-fast) var(--ease-standard);
125
+ }
126
+ .os-cal-title[aria-expanded="true"] .os-cal-title-chevron {
127
+ transform: rotate(180deg);
128
+ }
129
+ .os-cal-actions {
130
+ display: flex;
131
+ flex: none;
132
+ align-items: center;
133
+ gap: 2px;
134
+ }
135
+
136
+ /* Month grid */
137
+ .os-cal-month {
138
+ display: flex;
139
+ flex-direction: column;
140
+ gap: 2px;
141
+ outline: none;
142
+ }
143
+ .os-cal-row {
144
+ display: grid;
145
+ grid-template-columns: repeat(7, minmax(0, 1fr));
146
+ }
147
+ .os-cal-month-weeks .os-cal-row {
148
+ grid-template-columns: var(--os-cal-weekno) repeat(7, minmax(0, 1fr));
149
+ }
150
+ .os-cal-dow {
151
+ height: 28px;
152
+ line-height: 28px;
153
+ text-align: center;
154
+ font-size: var(--font-size-sm);
155
+ font-weight: var(--font-weight-medium, 500);
156
+ color: var(--color-text-secondary);
157
+ }
158
+ .os-cal-weekno {
159
+ display: grid;
160
+ place-items: center;
161
+ font-size: var(--font-size-xs, 0.625rem);
162
+ color: var(--color-text-disabled);
163
+ font-variant-numeric: tabular-nums;
164
+ }
165
+ .os-cal-cell {
166
+ position: relative;
167
+ display: flex;
168
+ flex-direction: column;
169
+ align-items: center;
170
+ min-width: 0;
171
+ }
172
+ .os-cal-day {
173
+ position: relative;
174
+ z-index: 1;
175
+ display: grid;
176
+ place-items: center;
177
+ width: var(--os-cal-cell);
178
+ height: var(--os-cal-cell);
179
+ max-width: 100%;
180
+ padding: 0;
181
+ border: 0;
182
+ border-radius: var(--radius-full);
183
+ background: transparent;
184
+ color: var(--color-text-primary);
185
+ font: inherit;
186
+ font-variant-numeric: tabular-nums;
187
+ cursor: pointer;
188
+ transition:
189
+ background-color var(--duration-fast) var(--ease-standard),
190
+ color var(--duration-fast) var(--ease-standard);
191
+ }
192
+ .os-cal-day:hover {
193
+ background: var(--color-overlay-hover);
194
+ }
195
+ .os-cal-day:focus-visible {
196
+ outline: 2px solid var(--color-accent);
197
+ outline-offset: 1px;
198
+ }
199
+ .os-cal-day-outside {
200
+ color: var(--color-text-disabled);
201
+ }
202
+ .os-cal-day-today {
203
+ color: var(--color-text-accent);
204
+ font-weight: var(--font-weight-semibold, 600);
205
+ box-shadow: inset 0 0 0 1px var(--color-accent);
206
+ }
207
+ .os-cal-day-selected,
208
+ .os-cal-day-selected:hover {
209
+ background: var(--color-accent);
210
+ color: var(--color-on-accent);
211
+ font-weight: var(--font-weight-semibold, 600);
212
+ box-shadow: none;
213
+ }
214
+ .os-cal-day:disabled {
215
+ color: var(--color-text-disabled);
216
+ opacity: 0.6;
217
+ cursor: not-allowed;
218
+ background: transparent;
219
+ box-shadow: none;
220
+ }
221
+ .os-cal-dots {
222
+ position: absolute;
223
+ bottom: 15%;
224
+ left: 50%;
225
+ display: flex;
226
+ gap: 2px;
227
+ transform: translateX(-50%);
228
+ }
229
+ .os-cal-dot {
230
+ width: 4px;
231
+ height: 4px;
232
+ border-radius: var(--radius-full);
233
+ background: var(--os-cal-tone);
234
+ }
235
+ .os-cal-day-selected .os-cal-dot {
236
+ background: var(--color-on-accent);
237
+ }
238
+
239
+ /* Range band */
240
+ .os-cal-in-range::before,
241
+ .os-cal-range-start::before,
242
+ .os-cal-range-end::before {
243
+ content: "";
244
+ position: absolute;
245
+ top: 0;
246
+ left: 0;
247
+ right: 0;
248
+ height: var(--os-cal-cell);
249
+ background: var(--color-accent-muted);
250
+ }
251
+ .os-cal-range-start::before {
252
+ left: 50%;
253
+ }
254
+ .os-cal-range-end::before {
255
+ right: 50%;
256
+ }
257
+ .os-cal-row > .os-cal-in-range:first-child::before,
258
+ .os-cal-row > .os-cal-weekno + .os-cal-in-range::before {
259
+ border-radius: var(--radius-full) 0 0 var(--radius-full);
260
+ }
261
+ .os-cal-row > .os-cal-in-range:last-child::before {
262
+ border-radius: 0 var(--radius-full) var(--radius-full) 0;
263
+ }
264
+ .os-cal-in-range .os-cal-day {
265
+ color: var(--color-text-accent);
266
+ }
267
+ .os-cal-in-range .os-cal-day:hover {
268
+ background: var(--color-overlay-pressed);
269
+ }
270
+
271
+ /* Month with event chips */
272
+ .os-cal-month-chips {
273
+ gap: 0;
274
+ overflow: hidden;
275
+ border-radius: var(--radius-element);
276
+ box-shadow: 0 0 0 1px var(--color-border);
277
+ }
278
+ .os-cal-month-chips .os-cal-dows {
279
+ background: var(--color-background-muted);
280
+ }
281
+ .os-cal-month-chips .os-cal-dow {
282
+ text-align: left;
283
+ padding-left: var(--spacing-2);
284
+ }
285
+ .os-cal-month-chips .os-cal-row:not(.os-cal-dows) .os-cal-cell {
286
+ align-items: stretch;
287
+ gap: 2px;
288
+ min-height: calc(var(--os-cal-cell) * 2.4);
289
+ padding: var(--spacing-1);
290
+ border-top: 1px solid var(--color-border);
291
+ }
292
+ .os-cal-month-chips .os-cal-cell + .os-cal-cell {
293
+ border-left: 1px solid var(--color-border);
294
+ }
295
+ .os-cal-month-chips .os-cal-cell:has(.os-cal-day-outside) {
296
+ background: color-mix(in srgb, var(--color-background-muted) 55%, transparent);
297
+ }
298
+ .os-cal-month-chips .os-cal-day {
299
+ align-self: flex-start;
300
+ width: 26px;
301
+ height: 26px;
302
+ font-size: var(--font-size-sm);
303
+ }
304
+ .os-cal-chips {
305
+ display: flex;
306
+ flex-direction: column;
307
+ gap: 2px;
308
+ min-width: 0;
309
+ }
310
+ .os-cal-chip {
311
+ display: block;
312
+ padding: 1px var(--spacing-1-5, 6px);
313
+ border-radius: calc(var(--radius-inner) / 2);
314
+ background: var(--os-cal-soft);
315
+ color: var(--os-cal-ink);
316
+ font-size: var(--font-size-sm);
317
+ font-weight: var(--font-weight-medium, 500);
318
+ line-height: 18px;
319
+ white-space: nowrap;
320
+ overflow: hidden;
321
+ text-overflow: ellipsis;
322
+ }
323
+ .os-cal-chip-time {
324
+ margin-right: var(--spacing-1);
325
+ font-weight: var(--font-weight-normal, 400);
326
+ opacity: 0.75;
327
+ font-variant-numeric: tabular-nums;
328
+ }
329
+ .os-cal-more {
330
+ padding: 0 var(--spacing-1-5, 6px);
331
+ font-size: var(--font-size-sm);
332
+ color: var(--color-text-secondary);
333
+ }
334
+
335
+ /* Month / year jump */
336
+ .os-cal-jump {
337
+ display: flex;
338
+ flex-direction: column;
339
+ gap: var(--spacing-2);
340
+ min-height: calc(var(--os-cal-cell) * 6 + 28px);
341
+ }
342
+ .os-cal-jump-year {
343
+ display: flex;
344
+ align-items: center;
345
+ justify-content: space-between;
346
+ }
347
+ .os-cal-jump-label {
348
+ font-weight: var(--font-weight-semibold, 600);
349
+ font-variant-numeric: tabular-nums;
350
+ }
351
+ .os-cal-jump-months {
352
+ flex: 1;
353
+ display: grid;
354
+ grid-template-columns: repeat(3, minmax(0, 1fr));
355
+ gap: var(--spacing-2);
356
+ }
357
+ .os-cal-jump-month {
358
+ min-height: 36px;
359
+ border: 0;
360
+ border-radius: var(--radius-element);
361
+ background: transparent;
362
+ box-shadow: inset 0 0 0 1px var(--color-border);
363
+ color: var(--color-text-primary);
364
+ font: inherit;
365
+ cursor: pointer;
366
+ transition: background-color var(--duration-fast) var(--ease-standard);
367
+ }
368
+ .os-cal-jump-month:hover {
369
+ background: var(--color-overlay-hover);
370
+ }
371
+ .os-cal-jump-month[aria-pressed="true"] {
372
+ background: var(--color-accent);
373
+ color: var(--color-on-accent);
374
+ box-shadow: none;
375
+ }
376
+
377
+ /* Week / day schedule */
378
+ .os-cal-schedule {
379
+ --os-cal-gutter: 52px;
380
+ display: flex;
381
+ flex-direction: column;
382
+ overflow: hidden;
383
+ border-radius: var(--radius-element);
384
+ box-shadow: 0 0 0 1px var(--color-border);
385
+ }
386
+ .os-cal-sched-head,
387
+ .os-cal-allday,
388
+ .os-cal-sched-body {
389
+ display: grid;
390
+ grid-template-columns: var(--os-cal-gutter) repeat(var(--os-cal-days), minmax(0, 1fr));
391
+ }
392
+ .os-cal-sched-head {
393
+ border-bottom: 1px solid var(--color-border);
394
+ }
395
+ .os-cal-sched-day {
396
+ display: flex;
397
+ flex-direction: column;
398
+ align-items: center;
399
+ gap: 2px;
400
+ padding: var(--spacing-2) 0;
401
+ border: 0;
402
+ border-left: 1px solid var(--color-border);
403
+ background: transparent;
404
+ color: var(--color-text-secondary);
405
+ font: inherit;
406
+ cursor: pointer;
407
+ }
408
+ .os-cal-sched-dow {
409
+ font-size: var(--font-size-sm);
410
+ font-weight: var(--font-weight-medium, 500);
411
+ }
412
+ .os-cal-sched-num {
413
+ display: grid;
414
+ place-items: center;
415
+ width: 32px;
416
+ height: 32px;
417
+ border-radius: var(--radius-full);
418
+ color: var(--color-text-primary);
419
+ font-size: var(--font-size-lg);
420
+ font-weight: var(--font-weight-medium, 500);
421
+ font-variant-numeric: tabular-nums;
422
+ transition: background-color var(--duration-fast) var(--ease-standard);
423
+ }
424
+ .os-cal-sched-day:hover .os-cal-sched-num {
425
+ background: var(--color-overlay-hover);
426
+ }
427
+ .os-cal-sched-day:focus-visible {
428
+ outline: 2px solid var(--color-accent);
429
+ outline-offset: -2px;
430
+ }
431
+ .os-cal-sched-day-today :is(.os-cal-sched-dow, .os-cal-sched-num) {
432
+ color: var(--color-text-accent);
433
+ }
434
+ .os-cal-sched-day-selected .os-cal-sched-num,
435
+ .os-cal-sched-day-selected:hover .os-cal-sched-num {
436
+ background: var(--color-accent);
437
+ color: var(--color-on-accent);
438
+ }
439
+ .os-cal-schedule-day .os-cal-sched-day {
440
+ flex-direction: row;
441
+ justify-content: flex-start;
442
+ gap: var(--spacing-2);
443
+ padding-left: var(--spacing-3);
444
+ }
445
+
446
+ .os-cal-allday {
447
+ border-bottom: 1px solid var(--color-border);
448
+ }
449
+ .os-cal-allday-label {
450
+ display: grid;
451
+ place-items: center;
452
+ font-size: var(--font-size-xs, 0.625rem);
453
+ color: var(--color-text-secondary);
454
+ }
455
+ .os-cal-allday-cell {
456
+ display: flex;
457
+ flex-direction: column;
458
+ gap: 2px;
459
+ min-width: 0;
460
+ padding: var(--spacing-1);
461
+ border-left: 1px solid var(--color-border);
462
+ }
463
+
464
+ .os-cal-sched-body {
465
+ position: relative;
466
+ height: calc(var(--os-cal-hour) * var(--os-cal-span));
467
+ background-image: repeating-linear-gradient(
468
+ to bottom,
469
+ transparent 0,
470
+ transparent calc(var(--os-cal-hour) - 1px),
471
+ var(--color-border) calc(var(--os-cal-hour) - 1px),
472
+ var(--color-border) var(--os-cal-hour)
473
+ );
474
+ }
475
+ .os-cal-hours {
476
+ position: relative;
477
+ z-index: 1;
478
+ display: flex;
479
+ flex-direction: column;
480
+ background: var(--color-background-surface);
481
+ }
482
+ .os-cal-hour {
483
+ flex: none;
484
+ box-sizing: border-box;
485
+ height: var(--os-cal-hour);
486
+ padding-right: var(--spacing-2);
487
+ text-align: right;
488
+ font-size: var(--font-size-xs, 0.625rem);
489
+ color: var(--color-text-secondary);
490
+ font-variant-numeric: tabular-nums;
491
+ transform: translateY(-0.65em);
492
+ }
493
+ .os-cal-lane {
494
+ position: relative;
495
+ border-left: 1px solid var(--color-border);
496
+ }
497
+ .os-cal-lane-today {
498
+ background: color-mix(in srgb, var(--color-accent-muted) 40%, transparent);
499
+ }
500
+ .os-cal-event {
501
+ position: absolute;
502
+ top: calc(var(--os-cal-hour) * var(--os-cal-top) + 1px);
503
+ left: calc((100% - 6px) * var(--os-cal-col) / var(--os-cal-cols) + 3px);
504
+ width: calc((100% - 6px) / var(--os-cal-cols) - 2px);
505
+ height: calc(var(--os-cal-hour) * var(--os-cal-height) - 3px);
506
+ box-sizing: border-box;
507
+ display: flex;
508
+ flex-direction: column;
509
+ gap: 1px;
510
+ overflow: hidden;
511
+ padding: var(--spacing-1) var(--spacing-1-5, 6px) var(--spacing-1) var(--spacing-2);
512
+ border-radius: calc(var(--radius-inner) - 2px);
513
+ background: var(--os-cal-soft);
514
+ box-shadow: inset 3px 0 0 var(--os-cal-tone);
515
+ color: var(--os-cal-ink);
516
+ font-size: var(--font-size-sm);
517
+ line-height: 1.3;
518
+ transition: box-shadow var(--duration-fast) var(--ease-standard);
519
+ }
520
+ .os-cal-event:hover {
521
+ z-index: 2;
522
+ box-shadow:
523
+ inset 3px 0 0 var(--os-cal-tone),
524
+ var(--shadow-med, var(--elevation-2));
525
+ }
526
+ .os-cal-event-title {
527
+ font-weight: var(--font-weight-semibold, 600);
528
+ white-space: nowrap;
529
+ overflow: hidden;
530
+ text-overflow: ellipsis;
531
+ }
532
+ .os-cal-event-time {
533
+ opacity: 0.8;
534
+ white-space: nowrap;
535
+ overflow: hidden;
536
+ text-overflow: ellipsis;
537
+ font-variant-numeric: tabular-nums;
538
+ }
539
+ .os-cal-event-short {
540
+ flex-direction: row;
541
+ align-items: center;
542
+ gap: var(--spacing-1);
543
+ padding-top: 0;
544
+ padding-bottom: 0;
545
+ }
546
+ .os-cal-event-short .os-cal-event-title {
547
+ flex: none;
548
+ max-width: 100%;
549
+ }
550
+ .os-cal-event-short .os-cal-event-loc {
551
+ display: none;
552
+ }
553
+ .os-cal-now {
554
+ position: absolute;
555
+ z-index: 3;
556
+ left: 0;
557
+ right: 0;
558
+ top: calc(var(--os-cal-hour) * var(--os-cal-top) - 1px);
559
+ height: 2px;
560
+ background: var(--color-error);
561
+ pointer-events: none;
562
+ }
563
+ .os-cal-now::before {
564
+ content: "";
565
+ position: absolute;
566
+ left: -4px;
567
+ top: -3px;
568
+ width: 8px;
569
+ height: 8px;
570
+ border-radius: var(--radius-full);
571
+ background: var(--color-error);
572
+ }
573
+
574
+ /* Agenda */
575
+ .os-cal-agenda {
576
+ display: flex;
577
+ flex-direction: column;
578
+ }
579
+ .os-cal-agenda-day {
580
+ display: grid;
581
+ grid-template-columns: 56px minmax(0, 1fr);
582
+ gap: var(--spacing-3);
583
+ padding: var(--spacing-2) 0;
584
+ }
585
+ .os-cal-agenda-day + .os-cal-agenda-day {
586
+ border-top: 1px solid var(--color-border);
587
+ }
588
+ .os-cal-agenda-date {
589
+ display: flex;
590
+ flex-direction: column;
591
+ align-items: center;
592
+ height: fit-content;
593
+ padding: var(--spacing-1-5, 6px) 0;
594
+ border: 0;
595
+ border-radius: var(--radius-element);
596
+ background: transparent;
597
+ color: var(--color-text-primary);
598
+ font: inherit;
599
+ cursor: pointer;
600
+ }
601
+ .os-cal-agenda-date:hover {
602
+ background: var(--color-overlay-hover);
603
+ }
604
+ .os-cal-agenda-num {
605
+ font-size: var(--font-size-xl);
606
+ font-weight: var(--font-weight-medium, 500);
607
+ line-height: 1.15;
608
+ font-variant-numeric: tabular-nums;
609
+ }
610
+ .os-cal-agenda-dow {
611
+ font-size: var(--font-size-sm);
612
+ color: var(--color-text-secondary);
613
+ }
614
+ .os-cal-agenda-today :is(.os-cal-agenda-num, .os-cal-agenda-dow) {
615
+ color: var(--color-text-accent);
616
+ }
617
+ .os-cal-agenda-selected {
618
+ background: var(--color-accent-muted);
619
+ }
620
+ .os-cal-agenda-list {
621
+ list-style: none;
622
+ margin: 0;
623
+ padding: 0;
624
+ display: flex;
625
+ flex-direction: column;
626
+ gap: 2px;
627
+ }
628
+ .os-cal-agenda-item {
629
+ display: grid;
630
+ grid-template-columns: 3px 72px minmax(0, 1fr);
631
+ gap: var(--spacing-3);
632
+ padding: var(--spacing-2) var(--spacing-3) var(--spacing-2) var(--spacing-2);
633
+ border-radius: var(--radius-element);
634
+ transition: background-color var(--duration-fast) var(--ease-standard);
635
+ }
636
+ .os-cal-agenda-item:hover {
637
+ background: var(--color-overlay-hover);
638
+ }
639
+ .os-cal-agenda-bar {
640
+ border-radius: var(--radius-full);
641
+ background: var(--os-cal-tone);
642
+ }
643
+ .os-cal-agenda-time {
644
+ display: flex;
645
+ flex-direction: column;
646
+ font-size: var(--font-size-sm);
647
+ font-weight: var(--font-weight-medium, 500);
648
+ font-variant-numeric: tabular-nums;
649
+ }
650
+ .os-cal-agenda-end {
651
+ color: var(--color-text-secondary);
652
+ font-weight: var(--font-weight-normal, 400);
653
+ }
654
+ .os-cal-agenda-copy {
655
+ display: flex;
656
+ flex-direction: column;
657
+ min-width: 0;
658
+ }
659
+ .os-cal-agenda-title {
660
+ font-weight: var(--font-weight-medium, 500);
661
+ }
662
+ .os-cal-agenda-loc {
663
+ font-size: var(--font-size-sm);
664
+ color: var(--color-text-secondary);
665
+ }
666
+ .os-cal-agenda-empty {
667
+ margin: 0;
668
+ padding: var(--spacing-8) 0;
669
+ text-align: center;
670
+ color: var(--color-text-secondary);
671
+ }
672
+
673
+ .os-cal-footer {
674
+ padding-top: var(--spacing-2);
675
+ border-top: 1px solid var(--color-border);
676
+ }
677
+ .os-cal-footer .os-picker-footer {
678
+ padding-top: 0;
679
+ border-top: 0;
680
+ }