@reservi/theme 1.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.
@@ -0,0 +1,905 @@
1
+ /**
2
+ * Estilos base de los componentes de Reservi Calendar. Todo usa design tokens
3
+ * (--*-rsv-*) con fallback, de modo que retematizar = sobreescribir tokens.
4
+ * Seleccionamos por [data-rsv] para no depender de clases concretas.
5
+ */
6
+
7
+ [data-rsv="root"] {
8
+ font-family: var(--font-rsv-sans, system-ui, sans-serif);
9
+ font-size: var(--text-rsv-base, 0.875rem);
10
+ color: var(--color-rsv-text, #1a1a1a);
11
+ background: var(--color-rsv-bg, #fff);
12
+ border: 1px solid var(--color-rsv-border, #e5e5e5);
13
+ border-radius: var(--radius-rsv, 0.5rem);
14
+ overflow: hidden;
15
+ display: flex;
16
+ flex-direction: column;
17
+ }
18
+
19
+ /* Toolbar */
20
+ [data-rsv="toolbar-wrap"] {
21
+ display: flex;
22
+ flex-direction: column;
23
+ border-bottom: 1px solid var(--color-rsv-border, #e5e5e5);
24
+ }
25
+ [data-rsv="toolbar"] {
26
+ display: flex;
27
+ align-items: center;
28
+ justify-content: space-between;
29
+ gap: 0.5rem;
30
+ padding: 0.625rem 0.75rem;
31
+ }
32
+ [data-rsv="toolbar-section"] {
33
+ display: flex;
34
+ align-items: center;
35
+ gap: 0.375rem;
36
+ }
37
+ /* La zona de navegación se centra; el slot de inicio y el de fin la flanquean. */
38
+ [data-rsv="toolbar-section"][data-rsv-area="nav"] {
39
+ gap: 0.25rem;
40
+ }
41
+ /* El título es el disparador del datepicker. */
42
+ [data-rsv="datepicker-anchor"] {
43
+ position: relative;
44
+ display: inline-flex;
45
+ }
46
+ [data-rsv="title"] {
47
+ appearance: none;
48
+ display: inline-flex;
49
+ align-items: center;
50
+ justify-content: center;
51
+ gap: 0.375rem;
52
+ border: none;
53
+ background: transparent;
54
+ color: inherit;
55
+ font: inherit;
56
+ font-weight: 600;
57
+ text-transform: capitalize;
58
+ margin: 0 0.25rem;
59
+ min-width: 7rem;
60
+ padding: 0.3rem 0.5rem;
61
+ border-radius: calc(var(--radius-rsv, 0.5rem) - 0.25rem);
62
+ cursor: pointer;
63
+ transition: background 0.15s var(--ease-rsv, ease);
64
+ }
65
+ [data-rsv="title"]:hover {
66
+ background: var(--color-rsv-surface, #f3f4f6);
67
+ }
68
+ [data-rsv="title"]:focus-visible {
69
+ outline: 2px solid var(--color-rsv-primary, #4f46e5);
70
+ outline-offset: 2px;
71
+ }
72
+ [data-rsv="title-icon"] {
73
+ flex: none;
74
+ opacity: 0.75;
75
+ }
76
+
77
+ /* Datepicker (rejilla mes/año) */
78
+ [data-rsv="datepicker"] {
79
+ position: absolute;
80
+ top: calc(100% + 0.375rem);
81
+ left: 50%;
82
+ transform: translateX(-50%);
83
+ z-index: 50;
84
+ min-width: 15rem;
85
+ padding: 0.625rem;
86
+ background: var(--color-rsv-bg, #fff);
87
+ border: 1px solid var(--color-rsv-border, #e5e5e5);
88
+ border-radius: var(--radius-rsv, 0.5rem);
89
+ box-shadow: var(--shadow-rsv, 0 12px 32px rgba(0, 0, 0, 0.18));
90
+ }
91
+ [data-rsv="dp-head"] {
92
+ display: flex;
93
+ align-items: center;
94
+ justify-content: space-between;
95
+ margin-bottom: 0.5rem;
96
+ padding: 0 0.25rem;
97
+ }
98
+ [data-rsv="dp-label"] {
99
+ font-weight: 700;
100
+ text-transform: capitalize;
101
+ }
102
+ [data-rsv="dp-nav"] {
103
+ appearance: none;
104
+ border: none;
105
+ background: transparent;
106
+ color: inherit;
107
+ font: inherit;
108
+ width: 1.75rem;
109
+ height: 1.75rem;
110
+ border-radius: calc(var(--radius-rsv, 0.5rem) - 0.25rem);
111
+ cursor: pointer;
112
+ transition: background 0.15s var(--ease-rsv, ease);
113
+ }
114
+ [data-rsv="dp-nav"]:hover {
115
+ background: var(--color-rsv-surface, #f3f4f6);
116
+ }
117
+ [data-rsv="dp-grid"] {
118
+ display: grid;
119
+ grid-template-columns: repeat(4, 1fr);
120
+ gap: 0.25rem;
121
+ }
122
+ [data-rsv="dp-month"] {
123
+ appearance: none;
124
+ border: none;
125
+ background: transparent;
126
+ color: inherit;
127
+ font: inherit;
128
+ text-transform: capitalize;
129
+ padding: 0.45rem 0.25rem;
130
+ border-radius: calc(var(--radius-rsv, 0.5rem) - 0.25rem);
131
+ cursor: pointer;
132
+ transition:
133
+ background 0.12s var(--ease-rsv, ease),
134
+ color 0.12s var(--ease-rsv, ease);
135
+ }
136
+ [data-rsv="dp-month"]:hover {
137
+ background: var(--color-rsv-surface, #f3f4f6);
138
+ }
139
+ [data-rsv="dp-month"][data-active="true"] {
140
+ background: var(--color-rsv-primary, #4f46e5);
141
+ color: var(--color-rsv-primary-fg, #fff);
142
+ font-weight: 600;
143
+ }
144
+ /* "Hoy" sin estar seleccionado: solo un anillo. */
145
+ [data-rsv="dp-month"][data-today="true"]:not([data-active="true"]),
146
+ [data-rsv="dp-day"][data-today="true"]:not([data-active="true"]) {
147
+ box-shadow: inset 0 0 0 1.5px var(--color-rsv-primary, #4f46e5);
148
+ }
149
+
150
+ /* Rejilla de días (modo DÍA) */
151
+ [data-rsv="dp-days"] {
152
+ display: grid;
153
+ grid-template-columns: repeat(7, 1fr);
154
+ gap: 0.125rem;
155
+ }
156
+ [data-rsv="dp-dow"] {
157
+ display: flex;
158
+ align-items: center;
159
+ justify-content: center;
160
+ padding: 0.25rem 0;
161
+ font-size: 0.75rem;
162
+ font-weight: 600;
163
+ text-transform: capitalize;
164
+ color: var(--color-rsv-text-muted, #6b7280);
165
+ }
166
+ [data-rsv="dp-day"] {
167
+ appearance: none;
168
+ border: none;
169
+ background: transparent;
170
+ color: inherit;
171
+ font: inherit;
172
+ aspect-ratio: 1;
173
+ border-radius: 999px;
174
+ cursor: pointer;
175
+ transition:
176
+ background 0.12s var(--ease-rsv, ease),
177
+ color 0.12s var(--ease-rsv, ease);
178
+ }
179
+ [data-rsv="dp-day"]:hover {
180
+ background: var(--color-rsv-surface, #f3f4f6);
181
+ }
182
+ [data-rsv="dp-day"][data-other="true"] {
183
+ color: var(--color-rsv-text-muted, #9ca3af);
184
+ opacity: 0.6;
185
+ }
186
+ [data-rsv="dp-day"][data-active="true"] {
187
+ background: var(--color-rsv-primary, #4f46e5);
188
+ color: var(--color-rsv-primary-fg, #fff);
189
+ font-weight: 600;
190
+ opacity: 1;
191
+ }
192
+ [data-rsv="dp-nav"]:focus-visible,
193
+ [data-rsv="dp-month"]:focus-visible,
194
+ [data-rsv="dp-day"]:focus-visible {
195
+ outline: 2px solid var(--color-rsv-primary, #4f46e5);
196
+ outline-offset: -2px;
197
+ }
198
+ [data-rsv="button"] {
199
+ appearance: none;
200
+ display: inline-flex;
201
+ align-items: center;
202
+ gap: 0.3rem;
203
+ border: 1px solid var(--color-rsv-border, #e5e5e5);
204
+ background: var(--color-rsv-surface, #fafafa);
205
+ color: inherit;
206
+ border-radius: calc(var(--radius-rsv, 0.5rem) - 0.25rem);
207
+ padding: 0.3rem 0.6rem;
208
+ font: inherit;
209
+ cursor: pointer;
210
+ transition: background 0.15s var(--ease-rsv, ease);
211
+ }
212
+ [data-rsv="button"]:hover {
213
+ background: var(--color-rsv-border, #eee);
214
+ }
215
+ [data-rsv="button"][data-active="true"] {
216
+ background: var(--color-rsv-primary, #4f46e5);
217
+ color: var(--color-rsv-primary-fg, #fff);
218
+ border-color: transparent;
219
+ }
220
+ /* Botón "Añadir" (variante primaria, vía onAddClick). */
221
+ [data-rsv="button"][data-rsv-variant="primary"] {
222
+ background: var(--color-rsv-primary, #4f46e5);
223
+ color: var(--color-rsv-primary-fg, #fff);
224
+ border-color: transparent;
225
+ font-weight: 500;
226
+ }
227
+ [data-rsv="button"][data-rsv-variant="primary"]:hover {
228
+ background: var(--color-rsv-primary-hover, var(--color-rsv-primary, #4338ca));
229
+ filter: brightness(0.95);
230
+ }
231
+ [data-rsv="add-icon"] {
232
+ font-size: 1.05em;
233
+ line-height: 1;
234
+ }
235
+ [data-rsv="button"]:focus-visible {
236
+ outline: 2px solid var(--color-rsv-primary, #4f46e5);
237
+ outline-offset: 2px;
238
+ }
239
+
240
+ /* Fila de pestañas de vista */
241
+ [data-rsv="toolbar-views"] {
242
+ display: flex;
243
+ align-items: stretch;
244
+ gap: 0.25rem;
245
+ padding: 0.25rem 0.5rem 0.5rem;
246
+ flex-wrap: wrap;
247
+ }
248
+ [data-rsv="view-tab"] {
249
+ appearance: none;
250
+ flex: 1 1 0;
251
+ border: none;
252
+ background: transparent;
253
+ color: var(--color-rsv-text-muted, #6b7280);
254
+ border-radius: calc(var(--radius-rsv, 0.5rem) - 0.25rem);
255
+ padding: 0.5rem 0.75rem;
256
+ font: inherit;
257
+ font-weight: 500;
258
+ cursor: pointer;
259
+ white-space: nowrap;
260
+ transition:
261
+ background 0.15s var(--ease-rsv, ease),
262
+ color 0.15s var(--ease-rsv, ease);
263
+ }
264
+ [data-rsv="view-tab"]:hover {
265
+ background: var(--color-rsv-surface, #f3f4f6);
266
+ color: var(--color-rsv-text, #1a1a1a);
267
+ }
268
+ [data-rsv="view-tab"][data-active="true"] {
269
+ background: var(--color-rsv-primary, #4f46e5);
270
+ color: var(--color-rsv-primary-fg, #fff);
271
+ }
272
+ [data-rsv="view-tab"]:focus-visible {
273
+ outline: 2px solid var(--color-rsv-primary, #4f46e5);
274
+ outline-offset: -2px;
275
+ }
276
+
277
+ /* DayGrid */
278
+ [data-rsv="daygrid"] {
279
+ display: flex;
280
+ flex-direction: column;
281
+ }
282
+ [data-rsv="daygrid-header"],
283
+ [data-rsv="daygrid-week"] {
284
+ display: grid;
285
+ grid-template-columns: repeat(var(--rsv-cols, 7), minmax(0, 1fr));
286
+ }
287
+ /* Columna de número de semana (cuando weekNumbers está activo). */
288
+ [data-rsv="daygrid"][data-weeknumbers="true"] [data-rsv="daygrid-header"],
289
+ [data-rsv="daygrid"][data-weeknumbers="true"] [data-rsv="daygrid-week"] {
290
+ grid-template-columns: var(--rsv-weeknum-width, 2.25rem) repeat(var(--rsv-cols, 7), minmax(0, 1fr));
291
+ }
292
+ [data-rsv="daygrid-weeknum-header"],
293
+ [data-rsv="daygrid-weeknum"] {
294
+ display: flex;
295
+ align-items: center;
296
+ justify-content: center;
297
+ font-size: var(--text-rsv-xs, 0.75rem);
298
+ color: var(--color-rsv-muted, #777);
299
+ background: var(--color-rsv-surface, #fafafa);
300
+ border-right: 1px solid var(--color-rsv-border, #eee);
301
+ font-variant-numeric: tabular-nums;
302
+ }
303
+ [data-rsv="daygrid-weeknum"] {
304
+ align-items: flex-start;
305
+ padding-top: 0.3rem;
306
+ }
307
+ [data-rsv="daygrid-header"] {
308
+ border-bottom: 1px solid var(--color-rsv-border, #e5e5e5);
309
+ }
310
+ [data-rsv="daygrid-dow"] {
311
+ padding: 0.4rem 0.5rem;
312
+ font-size: var(--text-rsv-sm, 0.8125rem);
313
+ color: var(--color-rsv-muted, #777);
314
+ text-align: center;
315
+ text-transform: capitalize;
316
+ }
317
+ [data-rsv="day"] {
318
+ min-height: 5.5rem;
319
+ padding: 0.25rem;
320
+ border-right: 1px solid var(--color-rsv-border, #eee);
321
+ border-bottom: 1px solid var(--color-rsv-border, #eee);
322
+ display: flex;
323
+ flex-direction: column;
324
+ gap: var(--spacing-rsv-gutter, 0.25rem);
325
+ }
326
+ [data-rsv="daygrid-week"] [data-rsv="day"]:last-child {
327
+ border-right: none;
328
+ }
329
+ [data-rsv="day"][data-other="true"] {
330
+ background: var(--color-rsv-nonbusiness, #f7f7f7);
331
+ color: var(--color-rsv-muted, #999);
332
+ }
333
+ [data-rsv="day"][data-today="true"] {
334
+ background: var(--color-rsv-today, #eef);
335
+ }
336
+ [data-rsv="day"][data-business="false"] {
337
+ background: var(--color-rsv-nonbusiness, #f7f7f7);
338
+ }
339
+ [data-rsv="day"][data-selected="true"] {
340
+ outline: 2px solid var(--color-rsv-primary, #4f46e5);
341
+ outline-offset: -2px;
342
+ background: var(--color-rsv-selection, #e8e8ff);
343
+ }
344
+ [data-rsv="event"]:focus-visible {
345
+ outline: 2px solid var(--color-rsv-primary, #4f46e5);
346
+ outline-offset: 1px;
347
+ }
348
+ [data-rsv="day-number"] {
349
+ align-self: flex-end;
350
+ font-size: var(--text-rsv-sm, 0.8125rem);
351
+ font-variant-numeric: tabular-nums;
352
+ padding: 0.1rem 0.25rem;
353
+ }
354
+ [data-rsv="day"][data-today="true"] [data-rsv="day-number"] {
355
+ background: var(--color-rsv-primary, #4f46e5);
356
+ color: var(--color-rsv-primary-fg, #fff);
357
+ border-radius: 999px;
358
+ min-width: 1.5rem;
359
+ text-align: center;
360
+ }
361
+
362
+ /* Eventos */
363
+ [data-rsv="event"] {
364
+ display: flex;
365
+ align-items: center;
366
+ gap: 0.3rem;
367
+ font-size: var(--text-rsv-xs, 0.75rem);
368
+ line-height: 1.3;
369
+ padding: 0.1rem 0.35rem;
370
+ border-radius: var(--radius-rsv-event, 0.375rem);
371
+ background: var(--rsv-event-bg, var(--color-rsv-event-1));
372
+ color: var(--rsv-event-fg, var(--color-rsv-event-fg, #fff));
373
+ cursor: pointer;
374
+ overflow: hidden;
375
+ white-space: nowrap;
376
+ text-overflow: ellipsis;
377
+ }
378
+ [data-rsv="daygrid"] [data-rsv="event"][data-editable="true"] {
379
+ cursor: grab;
380
+ touch-action: none;
381
+ }
382
+ [data-rsv="event"][data-all-day="false"] {
383
+ background: transparent;
384
+ color: var(--color-rsv-text, #1a1a1a);
385
+ }
386
+ [data-rsv="event"][data-all-day="false"]::before {
387
+ content: "";
388
+ width: 0.5rem;
389
+ height: 0.5rem;
390
+ border-radius: 999px;
391
+ background: var(--rsv-event-bg, var(--color-rsv-event-1));
392
+ flex: none;
393
+ }
394
+ [data-rsv="more-anchor"] {
395
+ position: relative;
396
+ }
397
+ [data-rsv="more-link"] {
398
+ appearance: none;
399
+ border: none;
400
+ background: transparent;
401
+ font: inherit;
402
+ text-align: start;
403
+ width: 100%;
404
+ font-size: var(--text-rsv-xs, 0.75rem);
405
+ color: var(--color-rsv-muted, #777);
406
+ cursor: pointer;
407
+ padding: 0.05rem 0.35rem;
408
+ border-radius: calc(var(--radius-rsv, 0.5rem) - 0.3rem);
409
+ }
410
+ [data-rsv="more-link"]:hover {
411
+ color: var(--color-rsv-primary, #4f46e5);
412
+ background: var(--color-rsv-surface, #f3f4f6);
413
+ }
414
+ [data-rsv="more-link"]:focus-visible {
415
+ outline: 2px solid var(--color-rsv-primary, #4f46e5);
416
+ outline-offset: -2px;
417
+ }
418
+
419
+ /* Popover "+N more" */
420
+ [data-rsv="more-popover"] {
421
+ position: absolute;
422
+ top: 0;
423
+ left: 0;
424
+ z-index: 60;
425
+ min-width: 12rem;
426
+ max-width: min(18rem, calc(100vw - 1.5rem));
427
+ background: var(--color-rsv-bg, #fff);
428
+ border: 1px solid var(--color-rsv-border, #e5e5e5);
429
+ border-radius: var(--radius-rsv, 0.5rem);
430
+ box-shadow: var(--shadow-rsv, 0 12px 32px rgba(0, 0, 0, 0.18));
431
+ overflow: hidden;
432
+ }
433
+ [data-rsv="more-popover-header"] {
434
+ display: flex;
435
+ align-items: center;
436
+ justify-content: space-between;
437
+ gap: 0.5rem;
438
+ padding: 0.4rem 0.6rem;
439
+ border-bottom: 1px solid var(--color-rsv-border, #e5e5e5);
440
+ background: var(--color-rsv-surface, #fafafa);
441
+ }
442
+ [data-rsv="more-popover-title"] {
443
+ font-weight: 600;
444
+ font-size: var(--text-rsv-sm, 0.8125rem);
445
+ text-transform: capitalize;
446
+ }
447
+ [data-rsv="more-popover-close"] {
448
+ appearance: none;
449
+ border: none;
450
+ background: transparent;
451
+ color: var(--color-rsv-muted, #777);
452
+ font: inherit;
453
+ cursor: pointer;
454
+ line-height: 1;
455
+ padding: 0.15rem 0.3rem;
456
+ border-radius: calc(var(--radius-rsv, 0.5rem) - 0.3rem);
457
+ }
458
+ [data-rsv="more-popover-close"]:hover {
459
+ background: var(--color-rsv-border, #eee);
460
+ color: var(--color-rsv-text, #1a1a1a);
461
+ }
462
+ [data-rsv="more-popover-body"] {
463
+ display: flex;
464
+ flex-direction: column;
465
+ gap: var(--spacing-rsv-gutter, 0.25rem);
466
+ padding: 0.4rem;
467
+ max-height: 16rem;
468
+ overflow-y: auto;
469
+ }
470
+
471
+ /* TimeGrid */
472
+ [data-rsv="timegrid"] {
473
+ display: flex;
474
+ flex-direction: column;
475
+ --rsv-tg-axis-width: 3.5rem;
476
+ }
477
+ [data-rsv="tg-header"],
478
+ [data-rsv="tg-allday"] {
479
+ display: grid;
480
+ grid-template-columns: var(--rsv-tg-axis-width) repeat(var(--rsv-tg-days, 7), minmax(0, 1fr));
481
+ border-bottom: 1px solid var(--color-rsv-border, #e5e5e5);
482
+ }
483
+ [data-rsv="tg-col-header"] {
484
+ padding: 0.4rem 0.5rem;
485
+ text-align: center;
486
+ font-size: var(--text-rsv-sm, 0.8125rem);
487
+ color: var(--color-rsv-muted, #777);
488
+ text-transform: capitalize;
489
+ border-left: 1px solid var(--color-rsv-border, #eee);
490
+ }
491
+ [data-rsv="tg-col-header"][data-today="true"] {
492
+ color: var(--color-rsv-primary, #4f46e5);
493
+ font-weight: 600;
494
+ }
495
+ [data-rsv="tg-axis-label"],
496
+ [data-rsv="tg-allday-cell"] {
497
+ padding: 0.25rem 0.4rem;
498
+ font-size: var(--text-rsv-xs, 0.75rem);
499
+ border-left: 1px solid var(--color-rsv-border, #eee);
500
+ min-height: 1.5rem;
501
+ }
502
+ [data-rsv="tg-axis-label"] {
503
+ color: var(--color-rsv-muted, #777);
504
+ border-left: none;
505
+ text-align: right;
506
+ }
507
+ [data-rsv="tg-body"] {
508
+ display: grid;
509
+ grid-template-columns: var(--rsv-tg-axis-width) repeat(var(--rsv-tg-days, 7), minmax(0, 1fr));
510
+ overflow: auto;
511
+ }
512
+ [data-rsv="tg-axis"] {
513
+ display: flex;
514
+ flex-direction: column;
515
+ }
516
+ [data-rsv="tg-slot"] {
517
+ height: var(--spacing-rsv-slot, 2.5rem);
518
+ position: relative;
519
+ border-top: 1px solid transparent;
520
+ }
521
+ [data-rsv="tg-slot"][data-major="true"] {
522
+ border-top: 1px solid var(--color-rsv-border, #eee);
523
+ }
524
+ [data-rsv="tg-slot-label"] {
525
+ position: absolute;
526
+ top: -0.6em;
527
+ right: 0.35rem;
528
+ font-size: var(--text-rsv-xs, 0.75rem);
529
+ color: var(--color-rsv-muted, #777);
530
+ background: var(--color-rsv-bg, #fff);
531
+ }
532
+ [data-rsv="tg-col"] {
533
+ position: relative;
534
+ border-left: 1px solid var(--color-rsv-border, #eee);
535
+ background-image: repeating-linear-gradient(
536
+ var(--color-rsv-bg, #fff) 0,
537
+ var(--color-rsv-bg, #fff) calc(var(--spacing-rsv-slot, 2.5rem) - 1px),
538
+ var(--color-rsv-border, #eee) calc(var(--spacing-rsv-slot, 2.5rem) - 1px),
539
+ var(--color-rsv-border, #eee) var(--spacing-rsv-slot, 2.5rem)
540
+ );
541
+ }
542
+ [data-rsv="tg-col"][data-today="true"] {
543
+ background-color: var(--color-rsv-today, #eef);
544
+ }
545
+ [data-rsv="tg-col"] [data-rsv="event"] {
546
+ position: absolute;
547
+ background: var(--rsv-event-bg, var(--color-rsv-event-1));
548
+ color: var(--rsv-event-fg, #fff);
549
+ border-radius: var(--radius-rsv-event, 0.375rem);
550
+ padding: 0.1rem 0.3rem;
551
+ font-size: var(--text-rsv-xs, 0.75rem);
552
+ overflow: hidden;
553
+ box-sizing: border-box;
554
+ border: 1px solid color-mix(in oklch, var(--rsv-event-bg) 80%, black);
555
+ }
556
+ [data-rsv="tg-nonbusiness"] {
557
+ position: absolute;
558
+ left: 0;
559
+ right: 0;
560
+ background: var(--color-rsv-nonbusiness, #f4f4f5);
561
+ opacity: 0.6;
562
+ pointer-events: none;
563
+ }
564
+ [data-rsv="resize-handle"] {
565
+ position: absolute;
566
+ left: 0;
567
+ right: 0;
568
+ bottom: 0;
569
+ height: 6px;
570
+ cursor: ns-resize;
571
+ z-index: 1;
572
+ }
573
+ [data-rsv="resize-handle"][data-edge="start"] {
574
+ top: 0;
575
+ bottom: auto;
576
+ }
577
+ [data-rsv="now-indicator"] {
578
+ position: absolute;
579
+ left: 0;
580
+ right: 0;
581
+ height: 0;
582
+ border-top: 2px solid var(--color-rsv-now, #e11);
583
+ z-index: 5;
584
+ }
585
+ [data-rsv="now-indicator"]::before {
586
+ content: "";
587
+ position: absolute;
588
+ left: -4px;
589
+ top: -4px;
590
+ width: 8px;
591
+ height: 8px;
592
+ border-radius: 999px;
593
+ background: var(--color-rsv-now, #e11);
594
+ }
595
+
596
+ /* List */
597
+ [data-rsv="list"] {
598
+ display: flex;
599
+ flex-direction: column;
600
+ }
601
+ [data-rsv="list-day-header"] {
602
+ position: sticky;
603
+ top: 0;
604
+ padding: 0.4rem 0.75rem;
605
+ background: var(--color-rsv-surface, #fafafa);
606
+ border-bottom: 1px solid var(--color-rsv-border, #e5e5e5);
607
+ font-size: var(--text-rsv-sm, 0.8125rem);
608
+ font-weight: 600;
609
+ text-transform: capitalize;
610
+ color: var(--color-rsv-muted, #555);
611
+ }
612
+ [data-rsv="list-day"][data-today="true"] [data-rsv="list-day-header"] {
613
+ color: var(--color-rsv-primary, #4f46e5);
614
+ }
615
+ [data-rsv="list-item"] {
616
+ display: flex;
617
+ align-items: center;
618
+ gap: 0.6rem;
619
+ padding: 0.5rem 0.75rem;
620
+ border-bottom: 1px solid var(--color-rsv-border, #eee);
621
+ cursor: pointer;
622
+ }
623
+ [data-rsv="list-item"]:hover {
624
+ background: var(--color-rsv-surface, #fafafa);
625
+ }
626
+ [data-rsv="list-item"]:focus-visible {
627
+ outline: 2px solid var(--color-rsv-primary, #4f46e5);
628
+ outline-offset: -2px;
629
+ }
630
+ [data-rsv="list-item-time"] {
631
+ flex: none;
632
+ width: 5rem;
633
+ font-size: var(--text-rsv-sm, 0.8125rem);
634
+ color: var(--color-rsv-muted, #777);
635
+ font-variant-numeric: tabular-nums;
636
+ }
637
+ [data-rsv="list-item-dot"] {
638
+ flex: none;
639
+ width: 0.6rem;
640
+ height: 0.6rem;
641
+ border-radius: 999px;
642
+ background: var(--rsv-event-bg, var(--color-rsv-event-1));
643
+ }
644
+ [data-rsv="list-empty"] {
645
+ padding: 2rem;
646
+ text-align: center;
647
+ color: var(--color-rsv-muted, #999);
648
+ }
649
+
650
+ /* MultiMonth (vista de año) */
651
+ [data-rsv="multimonth"] {
652
+ display: grid;
653
+ grid-template-columns: repeat(auto-fill, minmax(16rem, 1fr));
654
+ gap: 1rem;
655
+ padding: 1rem;
656
+ overflow: auto;
657
+ }
658
+ [data-rsv="mm-month"] {
659
+ border: 1px solid var(--color-rsv-border, #e5e5e5);
660
+ border-radius: var(--radius-rsv, 0.5rem);
661
+ overflow: hidden;
662
+ }
663
+ [data-rsv="mm-title"] {
664
+ padding: 0.4rem 0.6rem;
665
+ font-weight: 600;
666
+ text-transform: capitalize;
667
+ background: var(--color-rsv-surface, #fafafa);
668
+ border-bottom: 1px solid var(--color-rsv-border, #e5e5e5);
669
+ }
670
+ [data-rsv="mm-month"] [data-rsv="day"] {
671
+ min-height: 2.2rem;
672
+ }
673
+ [data-rsv="mm-month"] [data-rsv="event"] {
674
+ display: none; /* en vista compacta solo se marcan los días con eventos */
675
+ }
676
+ [data-rsv="mm-month"] [data-rsv="day"]:has([data-rsv="event"]) [data-rsv="day-number"] {
677
+ font-weight: 700;
678
+ color: var(--color-rsv-primary, #fff);
679
+ }
680
+
681
+ /* Timeline */
682
+ [data-rsv="timeline"] {
683
+ overflow: auto;
684
+ }
685
+ [data-rsv="tl-axis"] {
686
+ position: relative;
687
+ height: 1.6rem;
688
+ border-bottom: 1px solid var(--color-rsv-border, #e5e5e5);
689
+ }
690
+ [data-rsv="tl-slot"] {
691
+ position: absolute;
692
+ top: 0;
693
+ transform: translateX(-50%);
694
+ font-size: var(--text-rsv-xs, 0.75rem);
695
+ color: var(--color-rsv-muted, #777);
696
+ padding: 0.2rem 0;
697
+ border-inline-start: 1px solid var(--color-rsv-border, #eee);
698
+ padding-inline-start: 0.25rem;
699
+ }
700
+ [data-rsv="tl-body"] {
701
+ position: relative;
702
+ background-image: repeating-linear-gradient(
703
+ to right,
704
+ transparent 0,
705
+ transparent calc(100% / 24 - 1px),
706
+ var(--color-rsv-border, #f0f0f0) calc(100% / 24 - 1px),
707
+ var(--color-rsv-border, #f0f0f0) calc(100% / 24)
708
+ );
709
+ }
710
+ [data-rsv="timeline"] [data-rsv="event"],
711
+ [data-rsv="resource-lane"] [data-rsv="event"] {
712
+ position: absolute;
713
+ display: flex;
714
+ align-items: center;
715
+ padding: 0 0.35rem;
716
+ font-size: var(--text-rsv-xs, 0.75rem);
717
+ border-radius: var(--radius-rsv-event, 0.375rem);
718
+ background: var(--rsv-event-bg, var(--color-rsv-event-1));
719
+ color: var(--rsv-event-fg, #fff);
720
+ overflow: hidden;
721
+ white-space: nowrap;
722
+ cursor: pointer;
723
+ box-sizing: border-box;
724
+ }
725
+
726
+ /* Resource timeline (Scheduler) */
727
+ [data-rsv="resource-timeline"] {
728
+ --rsv-resource-area-width: 12rem;
729
+ display: flex;
730
+ flex-direction: column;
731
+ overflow: auto;
732
+ }
733
+ [data-rsv="rt-header"],
734
+ [data-rsv="resource-row"] {
735
+ display: grid;
736
+ grid-template-columns: var(--rsv-resource-area-width) 1fr;
737
+ }
738
+ [data-rsv="rt-header"] {
739
+ border-bottom: 1px solid var(--color-rsv-border, #e5e5e5);
740
+ position: sticky;
741
+ top: 0;
742
+ background: var(--color-rsv-bg, #fff);
743
+ z-index: 2;
744
+ }
745
+ [data-rsv="resource-area-header"] {
746
+ padding: 0.3rem 0.5rem;
747
+ font-weight: 600;
748
+ font-size: var(--text-rsv-sm, 0.8125rem);
749
+ border-inline-end: 1px solid var(--color-rsv-border, #e5e5e5);
750
+ }
751
+ [data-rsv="resource-label"] {
752
+ display: flex;
753
+ align-items: center;
754
+ gap: 0.3rem;
755
+ padding: 0.3rem 0.5rem;
756
+ border-inline-end: 1px solid var(--color-rsv-border, #e5e5e5);
757
+ border-bottom: 1px solid var(--color-rsv-border, #eee);
758
+ font-size: var(--text-rsv-sm, 0.8125rem);
759
+ }
760
+ [data-rsv="resource-toggle"] {
761
+ appearance: none;
762
+ border: none;
763
+ background: none;
764
+ cursor: pointer;
765
+ color: var(--color-rsv-muted, #777);
766
+ font-size: 0.7rem;
767
+ padding: 0 0.2rem;
768
+ }
769
+ [data-rsv="resource-lane"] {
770
+ position: relative;
771
+ border-bottom: 1px solid var(--color-rsv-border, #eee);
772
+ }
773
+
774
+ /* Resource day-grid (recursos como columnas) */
775
+ [data-rsv="resource-daygrid"] {
776
+ display: flex;
777
+ flex-direction: column;
778
+ overflow: auto;
779
+ }
780
+ [data-rsv="rdg-header"],
781
+ [data-rsv="rdg-body"] {
782
+ display: grid;
783
+ grid-template-columns: repeat(var(--rsv-rdg-cols, 1), minmax(0, 1fr));
784
+ }
785
+ [data-rsv="rdg-header"] {
786
+ border-bottom: 1px solid var(--color-rsv-border, #e5e5e5);
787
+ }
788
+ [data-rsv="rdg-col-header"] {
789
+ padding: 0.4rem 0.5rem;
790
+ text-align: center;
791
+ font-size: var(--text-rsv-sm, 0.8125rem);
792
+ font-weight: 600;
793
+ border-inline-start: 1px solid var(--color-rsv-border, #eee);
794
+ }
795
+ [data-rsv="rdg-col"] {
796
+ min-height: 6rem;
797
+ padding: 0.25rem;
798
+ display: flex;
799
+ flex-direction: column;
800
+ gap: var(--spacing-rsv-gutter, 0.25rem);
801
+ border-inline-start: 1px solid var(--color-rsv-border, #eee);
802
+ }
803
+ [data-rsv="rdg-col"] [data-rsv="event"] {
804
+ background: var(--rsv-event-bg, var(--color-rsv-event-1));
805
+ color: var(--rsv-event-fg, #fff);
806
+ border-radius: var(--radius-rsv-event, 0.375rem);
807
+ padding: 0.1rem 0.35rem;
808
+ font-size: var(--text-rsv-xs, 0.75rem);
809
+ cursor: pointer;
810
+ }
811
+
812
+ /* Eventos de fondo (display: background) */
813
+ [data-rsv="event"][data-display="background"] {
814
+ opacity: 0.25;
815
+ border: none;
816
+ box-shadow: none;
817
+ pointer-events: none;
818
+ }
819
+ [data-rsv="event"][data-display="background"]::before {
820
+ display: none;
821
+ }
822
+
823
+ /* Nav links (números y cabeceras de día clicables) */
824
+ [data-nav-link="true"] {
825
+ cursor: pointer;
826
+ }
827
+ [data-nav-link="true"]:hover {
828
+ color: var(--color-rsv-primary, #4f46e5);
829
+ text-decoration: underline;
830
+ }
831
+
832
+ /* RTL */
833
+ [data-rsv="root"][dir="rtl"] {
834
+ direction: rtl;
835
+ }
836
+
837
+ @media (prefers-reduced-motion: reduce) {
838
+ [data-rsv="button"] {
839
+ transition: none;
840
+ }
841
+ }
842
+
843
+ /* ───────────────────────── Responsive ───────────────────────── */
844
+
845
+ /* Tablet (≤768px): la toolbar se reparte en filas; la navegación baja a su
846
+ propia línea centrada, dejando arriba el slot de inicio y el botón Añadir. */
847
+ @media (max-width: 768px) {
848
+ [data-rsv="toolbar"] {
849
+ flex-wrap: wrap;
850
+ row-gap: 0.5rem;
851
+ }
852
+ [data-rsv="toolbar-section"][data-rsv-area="start"] {
853
+ order: 1;
854
+ }
855
+ [data-rsv="toolbar-section"][data-rsv-area="end"] {
856
+ order: 2;
857
+ margin-inline-start: auto;
858
+ }
859
+ [data-rsv="toolbar-section"][data-rsv-area="nav"] {
860
+ order: 3;
861
+ flex: 1 1 100%;
862
+ justify-content: center;
863
+ }
864
+ }
865
+
866
+ /* Móvil (≤640px): pestañas de vista en scroll horizontal (no en varias filas),
867
+ título flexible y datepicker que nunca desborda la pantalla. */
868
+ @media (max-width: 640px) {
869
+ [data-rsv="toolbar"] {
870
+ padding: 0.5rem;
871
+ }
872
+ [data-rsv="title"] {
873
+ min-width: 0;
874
+ }
875
+ [data-rsv="toolbar-views"] {
876
+ flex-wrap: nowrap;
877
+ overflow-x: auto;
878
+ scrollbar-width: thin;
879
+ -webkit-overflow-scrolling: touch;
880
+ }
881
+ [data-rsv="view-tab"] {
882
+ flex: 0 0 auto;
883
+ }
884
+ [data-rsv="datepicker"] {
885
+ min-width: min(15rem, calc(100vw - 1.5rem));
886
+ max-width: calc(100vw - 1.5rem);
887
+ }
888
+ [data-rsv="day"] {
889
+ min-height: 4rem;
890
+ }
891
+ [data-rsv="event"] {
892
+ font-size: 0.7rem;
893
+ }
894
+ }
895
+
896
+ /* Móvil pequeño (≤420px): controles de navegación y rejilla del datepicker
897
+ un punto más compactos. */
898
+ @media (max-width: 420px) {
899
+ [data-rsv="toolbar-section"][data-rsv-area="nav"] [data-rsv="button"] {
900
+ padding: 0.3rem 0.45rem;
901
+ }
902
+ [data-rsv="day"] {
903
+ min-height: 3.25rem;
904
+ }
905
+ }