@softium/calendar 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.
@@ -0,0 +1,1347 @@
1
+ /**
2
+ * @softium/calendar — component styles.
3
+ *
4
+ * Token-driven (see @softium/styles): the whole calendar re-skins on theme with
5
+ * zero component churn. Ported from the calendary project's Tailwind styling into
6
+ * plain CSS on the shared --sft-* tokens.
7
+ */
8
+
9
+ :root {
10
+ --sft-cal-accent: var(--sft-color-accent);
11
+ --sft-cal-sun: var(--sft-color-danger);
12
+ --sft-cal-sat: #3b82f6;
13
+ --sft-cal-row-h: 40px;
14
+ --sft-cal-input-h: 36px;
15
+ /* one uniform height for every item inside a month cell: date head,
16
+ period bar, day chip, "+N more", "+ new event". Keep in sync with
17
+ EVENT_H in MonthView.tsx. */
18
+ --sft-cal-event-h: 22px;
19
+ }
20
+
21
+ [data-theme="dark"] {
22
+ --sft-cal-sat: #5b8bff;
23
+ }
24
+
25
+ .sft-cal {
26
+ display: flex;
27
+ flex-direction: column;
28
+ width: 100%;
29
+ height: 100%;
30
+ min-height: 0;
31
+ min-width: 0;
32
+ font-family: var(--sft-font-family);
33
+ font-size: var(--sft-font-size-md);
34
+ color: var(--sft-color-text);
35
+ }
36
+
37
+ /* ── toolbar ─────────────────────────────────────────────── */
38
+ .sft-cal__toolbar {
39
+ display: flex;
40
+ align-items: center;
41
+ justify-content: space-between;
42
+ gap: var(--sft-space-3);
43
+ flex-wrap: wrap;
44
+ flex: none;
45
+ margin-bottom: var(--sft-space-3);
46
+ }
47
+
48
+ .sft-cal__toolbar-left,
49
+ .sft-cal__toolbar-right {
50
+ display: flex;
51
+ align-items: center;
52
+ gap: var(--sft-space-3);
53
+ }
54
+
55
+ .sft-cal__title {
56
+ margin: 0;
57
+ font-size: 22px;
58
+ font-weight: var(--sft-font-weight-bold);
59
+ color: var(--sft-color-text);
60
+ white-space: nowrap;
61
+ }
62
+
63
+ .sft-cal__nav {
64
+ display: flex;
65
+ align-items: center;
66
+ gap: 2px;
67
+ }
68
+
69
+ .sft-cal__navbtn {
70
+ display: inline-flex;
71
+ align-items: center;
72
+ justify-content: center;
73
+ width: 32px;
74
+ height: 32px;
75
+ border: none;
76
+ border-radius: var(--sft-radius-md);
77
+ background: transparent;
78
+ color: var(--sft-color-text-secondary);
79
+ cursor: pointer;
80
+ transition: background var(--sft-duration-fast) var(--sft-ease);
81
+ }
82
+ .sft-cal__navbtn:hover {
83
+ background: var(--sft-color-bg-hover);
84
+ color: var(--sft-color-text);
85
+ }
86
+ .sft-cal__navbtn:disabled {
87
+ opacity: 0.4;
88
+ cursor: default;
89
+ }
90
+ .sft-cal__navbtn:disabled:hover {
91
+ background: transparent;
92
+ color: var(--sft-color-text-secondary);
93
+ }
94
+
95
+ .sft-cal__search {
96
+ display: flex;
97
+ align-items: center;
98
+ }
99
+ .sft-cal__searchbox {
100
+ position: relative;
101
+ display: flex;
102
+ align-items: center;
103
+ }
104
+ .sft-cal__searchicon {
105
+ position: absolute;
106
+ left: 10px;
107
+ color: var(--sft-color-text-muted);
108
+ pointer-events: none;
109
+ }
110
+ .sft-cal__searchinput {
111
+ height: 32px;
112
+ width: 190px;
113
+ border: 1px solid var(--sft-color-border);
114
+ border-radius: var(--sft-radius-md);
115
+ background: var(--sft-color-surface);
116
+ color: var(--sft-color-text);
117
+ font: inherit;
118
+ font-size: var(--sft-font-size-sm);
119
+ padding: 0 30px 0 30px;
120
+ outline: none;
121
+ }
122
+ .sft-cal__searchinput:focus {
123
+ border-color: var(--sft-cal-accent);
124
+ }
125
+ .sft-cal__searchclose {
126
+ position: absolute;
127
+ right: 6px;
128
+ display: inline-flex;
129
+ border: none;
130
+ background: transparent;
131
+ color: var(--sft-color-text-muted);
132
+ cursor: pointer;
133
+ }
134
+ .sft-cal__searchclose:hover {
135
+ color: var(--sft-color-text);
136
+ }
137
+
138
+ .sft-cal__view {
139
+ flex: 1;
140
+ min-height: 0;
141
+ display: flex;
142
+ flex-direction: column;
143
+ }
144
+
145
+ /* ── buttons ─────────────────────────────────────────────── */
146
+ .sft-cal-btn {
147
+ display: inline-flex;
148
+ align-items: center;
149
+ justify-content: center;
150
+ gap: var(--sft-space-1);
151
+ height: var(--sft-cal-input-h);
152
+ padding: 0 var(--sft-space-3);
153
+ border: 1px solid transparent;
154
+ border-radius: var(--sft-radius-md);
155
+ background: transparent;
156
+ color: var(--sft-color-text);
157
+ font: inherit;
158
+ font-size: var(--sft-font-size-sm);
159
+ font-weight: var(--sft-font-weight-medium);
160
+ cursor: pointer;
161
+ white-space: nowrap;
162
+ transition: background var(--sft-duration-fast) var(--sft-ease), border-color
163
+ var(--sft-duration-fast) var(--sft-ease), opacity var(--sft-duration-fast) var(--sft-ease);
164
+ }
165
+ .sft-cal-btn--sm {
166
+ height: 32px;
167
+ padding: 0 var(--sft-space-3);
168
+ }
169
+ .sft-cal-btn--block {
170
+ flex: 1;
171
+ }
172
+ .sft-cal-btn--icon {
173
+ width: var(--sft-cal-input-h);
174
+ padding: 0;
175
+ flex: none;
176
+ }
177
+ .sft-cal-btn:disabled {
178
+ opacity: 0.5;
179
+ cursor: default;
180
+ }
181
+ .sft-cal-btn--outline {
182
+ border-color: var(--sft-color-border);
183
+ background: var(--sft-color-surface);
184
+ color: var(--sft-color-text);
185
+ }
186
+ .sft-cal-btn--outline:not(:disabled):hover {
187
+ background: var(--sft-color-bg-hover);
188
+ }
189
+ .sft-cal-btn--primary {
190
+ background: var(--sft-cal-accent);
191
+ border-color: var(--sft-cal-accent);
192
+ color: var(--sft-color-text-on-accent);
193
+ }
194
+ .sft-cal-btn--primary:not(:disabled):hover {
195
+ background: var(--sft-color-accent-hover);
196
+ border-color: var(--sft-color-accent-hover);
197
+ }
198
+ .sft-cal-btn--danger {
199
+ background: var(--sft-color-danger);
200
+ border-color: var(--sft-color-danger);
201
+ color: #fff;
202
+ }
203
+ .sft-cal-btn--danger:not(:disabled):hover {
204
+ filter: brightness(0.94);
205
+ }
206
+
207
+ /* ── shared field bits ───────────────────────────────────── */
208
+ .sft-cal-label {
209
+ font-size: var(--sft-font-size-sm);
210
+ color: var(--sft-color-text-muted);
211
+ }
212
+ .sft-cal-field {
213
+ display: flex;
214
+ flex-direction: column;
215
+ gap: 6px;
216
+ }
217
+ .sft-cal-input {
218
+ height: var(--sft-cal-input-h);
219
+ box-sizing: border-box;
220
+ padding: 0 var(--sft-space-3);
221
+ border: 1px solid var(--sft-color-border);
222
+ border-radius: var(--sft-radius-md);
223
+ background: var(--sft-color-surface);
224
+ color: var(--sft-color-text);
225
+ font: inherit;
226
+ font-size: var(--sft-font-size-sm);
227
+ outline: none;
228
+ }
229
+ .sft-cal-input:focus {
230
+ border-color: var(--sft-cal-accent);
231
+ }
232
+ .sft-cal-input--static {
233
+ display: flex;
234
+ align-items: center;
235
+ background: var(--sft-color-bg-subtle);
236
+ color: var(--sft-color-text-muted);
237
+ }
238
+ .sft-cal-textarea {
239
+ width: 100%;
240
+ box-sizing: border-box;
241
+ resize: none;
242
+ padding: var(--sft-space-2) var(--sft-space-3);
243
+ border: 1px solid var(--sft-color-border);
244
+ border-radius: var(--sft-radius-md);
245
+ background: var(--sft-color-surface);
246
+ color: var(--sft-color-text);
247
+ font: inherit;
248
+ font-size: var(--sft-font-size-sm);
249
+ outline: none;
250
+ }
251
+ .sft-cal-textarea:focus {
252
+ border-color: var(--sft-cal-accent);
253
+ }
254
+
255
+ /* checkbox rendered as an iOS switch */
256
+ .sft-cal-switch {
257
+ appearance: none;
258
+ position: relative;
259
+ width: 34px;
260
+ height: 20px;
261
+ border-radius: var(--sft-radius-full);
262
+ background: var(--sft-color-border-strong);
263
+ cursor: pointer;
264
+ transition: background var(--sft-duration-fast) var(--sft-ease);
265
+ flex: none;
266
+ }
267
+ .sft-cal-switch::after {
268
+ content: "";
269
+ position: absolute;
270
+ top: 2px;
271
+ left: 2px;
272
+ width: 16px;
273
+ height: 16px;
274
+ border-radius: 50%;
275
+ background: #fff;
276
+ box-shadow: var(--sft-shadow-sm);
277
+ transition: transform var(--sft-duration-fast) var(--sft-ease);
278
+ }
279
+ .sft-cal-switch:checked {
280
+ background: var(--sft-cal-accent);
281
+ }
282
+ .sft-cal-switch:checked::after {
283
+ transform: translateX(14px);
284
+ }
285
+
286
+ /* day-of-week color helpers */
287
+ .sft-cal-sun {
288
+ color: var(--sft-cal-sun);
289
+ }
290
+ .sft-cal-sat {
291
+ color: var(--sft-cal-sat);
292
+ }
293
+
294
+ /* ── segmented tabs ──────────────────────────────────────── */
295
+ .sft-cal-seg {
296
+ display: inline-flex;
297
+ height: 36px;
298
+ padding: 4px;
299
+ border-radius: var(--sft-radius-md);
300
+ background: var(--sft-color-bg-subtle);
301
+ }
302
+ .sft-cal-seg--block {
303
+ display: flex;
304
+ width: 100%;
305
+ }
306
+ .sft-cal-seg__btn {
307
+ flex: 1;
308
+ border: none;
309
+ background: transparent;
310
+ color: var(--sft-color-text-secondary);
311
+ font: inherit;
312
+ font-size: var(--sft-font-size-md);
313
+ padding: 0 var(--sft-space-5);
314
+ border-radius: var(--sft-radius-sm);
315
+ cursor: pointer;
316
+ white-space: nowrap;
317
+ transition: color var(--sft-duration-fast) var(--sft-ease);
318
+ }
319
+ .sft-cal-seg--block .sft-cal-seg__btn {
320
+ padding: 0 var(--sft-space-2);
321
+ }
322
+ .sft-cal-seg__btn:hover {
323
+ color: var(--sft-color-text);
324
+ }
325
+ .sft-cal-seg__btn[data-active] {
326
+ background: var(--sft-color-surface);
327
+ color: var(--sft-cal-accent);
328
+ font-weight: var(--sft-font-weight-medium);
329
+ box-shadow: var(--sft-shadow-sm);
330
+ }
331
+
332
+ /* ── recurrence editor ───────────────────────────────────── */
333
+ .sft-cal-recur {
334
+ display: flex;
335
+ flex-direction: column;
336
+ gap: var(--sft-space-2);
337
+ }
338
+ .sft-cal-recur__block {
339
+ display: flex;
340
+ flex-direction: column;
341
+ gap: 6px;
342
+ }
343
+ .sft-cal-recur__weekdays {
344
+ display: grid;
345
+ grid-template-columns: repeat(7, 1fr);
346
+ gap: 4px;
347
+ }
348
+ .sft-cal-recur__weekday {
349
+ height: var(--sft-cal-row-h);
350
+ border: none;
351
+ border-radius: var(--sft-radius-md);
352
+ background: var(--sft-color-bg-subtle);
353
+ color: var(--sft-color-text-secondary);
354
+ font: inherit;
355
+ font-size: var(--sft-font-size-sm);
356
+ cursor: pointer;
357
+ transition: background var(--sft-duration-fast) var(--sft-ease);
358
+ }
359
+ .sft-cal-recur__weekday:hover {
360
+ background: var(--sft-color-bg-hover);
361
+ }
362
+ .sft-cal-recur__weekday[data-active] {
363
+ background: var(--sft-cal-accent);
364
+ color: var(--sft-color-text-on-accent);
365
+ }
366
+ .sft-cal-recur__end {
367
+ display: grid;
368
+ grid-template-columns: 1fr 1fr;
369
+ gap: var(--sft-space-2);
370
+ }
371
+ .sft-cal-recur__count {
372
+ display: flex;
373
+ align-items: center;
374
+ justify-content: flex-end;
375
+ gap: 6px;
376
+ }
377
+ .sft-cal-recur__count-input {
378
+ width: 80px;
379
+ }
380
+ .sft-cal-recur__count-unit {
381
+ font-size: var(--sft-font-size-sm);
382
+ color: var(--sft-color-text-muted);
383
+ }
384
+
385
+ /* ── category rows ───────────────────────────────────────── */
386
+ .sft-cal-catrow {
387
+ position: relative;
388
+ display: flex;
389
+ align-items: center;
390
+ gap: var(--sft-space-3);
391
+ height: var(--sft-cal-row-h);
392
+ padding: 0 var(--sft-space-3);
393
+ border-radius: var(--sft-radius-md);
394
+ cursor: grab;
395
+ }
396
+ .sft-cal-catrow:hover {
397
+ background: var(--sft-color-bg-subtle);
398
+ }
399
+ .sft-cal-catrow--editing {
400
+ border: 2px solid var(--sft-cal-accent);
401
+ cursor: default;
402
+ }
403
+ .sft-cal-catrow--editing:hover {
404
+ background: transparent;
405
+ }
406
+ .sft-cal-catrow__main {
407
+ display: flex;
408
+ align-items: center;
409
+ gap: var(--sft-space-3);
410
+ flex: 1;
411
+ min-width: 0;
412
+ border: none;
413
+ background: transparent;
414
+ color: inherit;
415
+ font: inherit;
416
+ text-align: left;
417
+ cursor: pointer;
418
+ padding: 0;
419
+ }
420
+ .sft-cal-catrow__dot {
421
+ display: inline-flex;
422
+ align-items: center;
423
+ justify-content: center;
424
+ width: 16px;
425
+ height: 16px;
426
+ flex: none;
427
+ border-radius: var(--sft-radius-sm);
428
+ border: 2px solid;
429
+ color: #fff;
430
+ background: transparent;
431
+ }
432
+ .sft-cal-catrow__dot:not([data-checked]) {
433
+ background: transparent !important;
434
+ }
435
+ .sft-cal-catrow__name {
436
+ font-size: var(--sft-font-size-md);
437
+ color: var(--sft-color-text);
438
+ overflow: hidden;
439
+ text-overflow: ellipsis;
440
+ white-space: nowrap;
441
+ }
442
+ .sft-cal-catrow__menu {
443
+ position: relative;
444
+ margin-left: auto;
445
+ }
446
+ .sft-cal-catrow__menu-trigger {
447
+ display: inline-flex;
448
+ padding: 4px;
449
+ border: none;
450
+ border-radius: var(--sft-radius-sm);
451
+ background: transparent;
452
+ color: var(--sft-color-text-muted);
453
+ cursor: pointer;
454
+ opacity: 0;
455
+ transition: opacity var(--sft-duration-fast) var(--sft-ease);
456
+ }
457
+ .sft-cal-catrow:hover .sft-cal-catrow__menu-trigger {
458
+ opacity: 1;
459
+ }
460
+ .sft-cal-catrow__menu-trigger:hover {
461
+ background: var(--sft-color-bg-hover);
462
+ }
463
+ .sft-cal-catrow__colorwrap {
464
+ position: relative;
465
+ flex: none;
466
+ }
467
+ .sft-cal-catrow__swatch {
468
+ width: 16px;
469
+ height: 16px;
470
+ border-radius: var(--sft-radius-sm);
471
+ border: 2px solid;
472
+ cursor: pointer;
473
+ transition: transform var(--sft-duration-fast) var(--sft-ease);
474
+ }
475
+ .sft-cal-catrow__swatch:hover {
476
+ transform: scale(1.1);
477
+ }
478
+ .sft-cal-catrow__name-input {
479
+ flex: 1;
480
+ min-width: 0;
481
+ height: 28px;
482
+ border: none;
483
+ background: transparent;
484
+ color: var(--sft-color-text);
485
+ font: inherit;
486
+ font-size: var(--sft-font-size-sm);
487
+ outline: none;
488
+ padding: 0;
489
+ }
490
+
491
+ /* color-swatch popover grid (5 columns) */
492
+ .sft-cal-colorgrid {
493
+ position: absolute;
494
+ top: calc(100% + 6px);
495
+ left: 0;
496
+ z-index: var(--sft-z-modal);
497
+ display: grid;
498
+ grid-template-columns: repeat(5, 1fr);
499
+ gap: var(--sft-space-2);
500
+ padding: var(--sft-space-2);
501
+ background: var(--sft-color-surface);
502
+ border: 1px solid var(--sft-color-border);
503
+ border-radius: var(--sft-radius-md);
504
+ box-shadow: var(--sft-shadow-overlay);
505
+ }
506
+ .sft-cal-colorgrid__swatch {
507
+ width: 28px;
508
+ height: 28px;
509
+ border: none;
510
+ border-radius: var(--sft-radius-md);
511
+ cursor: pointer;
512
+ transition: transform var(--sft-duration-fast) var(--sft-ease);
513
+ }
514
+ .sft-cal-colorgrid__swatch:hover {
515
+ transform: scale(1.1);
516
+ }
517
+ .sft-cal-colorgrid__swatch[data-active] {
518
+ outline: 2px solid var(--sft-cal-accent);
519
+ outline-offset: 2px;
520
+ }
521
+
522
+ /* row context menu */
523
+ .sft-cal-menu {
524
+ position: absolute;
525
+ top: calc(100% + 2px);
526
+ right: 0;
527
+ z-index: var(--sft-z-modal);
528
+ min-width: 120px;
529
+ padding: var(--sft-space-1);
530
+ background: var(--sft-color-surface);
531
+ border: 1px solid var(--sft-color-border);
532
+ border-radius: var(--sft-radius-md);
533
+ box-shadow: var(--sft-shadow-overlay);
534
+ }
535
+ .sft-cal-menu__item {
536
+ display: flex;
537
+ align-items: center;
538
+ gap: var(--sft-space-2);
539
+ width: 100%;
540
+ padding: var(--sft-space-2);
541
+ border: none;
542
+ border-radius: var(--sft-radius-sm);
543
+ background: transparent;
544
+ color: var(--sft-color-text);
545
+ font: inherit;
546
+ font-size: var(--sft-font-size-sm);
547
+ text-align: left;
548
+ cursor: pointer;
549
+ }
550
+ .sft-cal-menu__item:hover {
551
+ background: var(--sft-color-bg-hover);
552
+ }
553
+ .sft-cal-menu__item--danger {
554
+ color: var(--sft-color-danger);
555
+ }
556
+
557
+ /* ── overlay + modal ─────────────────────────────────────── */
558
+ .sft-cal-overlay {
559
+ position: fixed;
560
+ inset: 0;
561
+ z-index: var(--sft-z-modal);
562
+ display: flex;
563
+ align-items: center;
564
+ justify-content: center;
565
+ padding: var(--sft-space-4);
566
+ background: rgba(16, 24, 40, 0.28);
567
+ }
568
+ .sft-cal-modal {
569
+ width: 380px;
570
+ max-width: 100%;
571
+ max-height: 90vh;
572
+ overflow-y: auto;
573
+ box-sizing: border-box;
574
+ display: flex;
575
+ flex-direction: column;
576
+ gap: var(--sft-space-3);
577
+ padding: 20px;
578
+ background: var(--sft-color-surface);
579
+ border: 1px solid var(--sft-color-border);
580
+ border-radius: var(--sft-radius-lg);
581
+ box-shadow: var(--sft-shadow-overlay);
582
+ }
583
+ .sft-cal-modal__titlewrap {
584
+ position: relative;
585
+ display: flex;
586
+ align-items: center;
587
+ gap: var(--sft-space-3);
588
+ padding-bottom: var(--sft-space-2);
589
+ }
590
+ .sft-cal-modal__title {
591
+ flex: 1;
592
+ min-width: 0;
593
+ border: none;
594
+ background: transparent;
595
+ color: var(--sft-color-text);
596
+ font: inherit;
597
+ font-size: var(--sft-font-size-xl);
598
+ font-weight: var(--sft-font-weight-bold);
599
+ outline: none;
600
+ padding: 0;
601
+ }
602
+ .sft-cal-modal__title::placeholder {
603
+ color: var(--sft-color-text-muted);
604
+ opacity: 0.5;
605
+ }
606
+ .sft-cal-modal__close {
607
+ display: inline-flex;
608
+ align-items: center;
609
+ justify-content: center;
610
+ width: 30px;
611
+ height: 30px;
612
+ flex: none;
613
+ border: none;
614
+ border-radius: var(--sft-radius-md);
615
+ background: var(--sft-color-bg-subtle);
616
+ color: var(--sft-color-text-muted);
617
+ cursor: pointer;
618
+ }
619
+ .sft-cal-modal__close:hover {
620
+ background: var(--sft-color-bg-hover);
621
+ color: var(--sft-color-text);
622
+ }
623
+ .sft-cal-modal__underline {
624
+ position: absolute;
625
+ bottom: 0;
626
+ left: 0;
627
+ right: 0;
628
+ height: 1px;
629
+ background: var(--sft-color-border);
630
+ transition: background var(--sft-duration-base) var(--sft-ease);
631
+ }
632
+ .sft-cal-modal__underline[data-active] {
633
+ background: var(--sft-cal-accent);
634
+ }
635
+ .sft-cal-modal__repeat {
636
+ display: flex;
637
+ align-items: center;
638
+ justify-content: flex-end;
639
+ gap: 6px;
640
+ font-size: var(--sft-font-size-sm);
641
+ color: var(--sft-color-text-muted);
642
+ cursor: pointer;
643
+ }
644
+ .sft-cal-modal__grid2 {
645
+ display: grid;
646
+ grid-template-columns: 1fr 1fr;
647
+ gap: var(--sft-space-2);
648
+ }
649
+ .sft-cal-modal__category {
650
+ display: flex;
651
+ flex-direction: column;
652
+ gap: 6px;
653
+ }
654
+ .sft-cal-modal__cathead {
655
+ display: flex;
656
+ align-items: center;
657
+ justify-content: space-between;
658
+ }
659
+ .sft-cal-modal__catlist {
660
+ max-height: 240px;
661
+ overflow-y: auto;
662
+ }
663
+ .sft-cal-modal__ghostrow {
664
+ display: flex;
665
+ align-items: center;
666
+ gap: var(--sft-space-3);
667
+ width: 100%;
668
+ height: var(--sft-cal-row-h);
669
+ padding: 0 var(--sft-space-3);
670
+ border: none;
671
+ border-radius: var(--sft-radius-md);
672
+ background: transparent;
673
+ color: var(--sft-color-text-muted);
674
+ font: inherit;
675
+ font-size: var(--sft-font-size-sm);
676
+ text-align: left;
677
+ cursor: pointer;
678
+ transition: background var(--sft-duration-fast) var(--sft-ease), color var(--sft-duration-fast)
679
+ var(--sft-ease);
680
+ }
681
+ .sft-cal-modal__ghostrow:hover {
682
+ background: var(--sft-color-bg-subtle);
683
+ color: var(--sft-cal-accent);
684
+ }
685
+ .sft-cal-modal__collapse {
686
+ display: inline-flex;
687
+ align-items: center;
688
+ gap: 4px;
689
+ border: none;
690
+ background: transparent;
691
+ color: var(--sft-color-text-muted);
692
+ font: inherit;
693
+ font-size: var(--sft-font-size-sm);
694
+ cursor: pointer;
695
+ }
696
+ .sft-cal-modal__collapse:hover {
697
+ color: var(--sft-cal-accent);
698
+ }
699
+ .sft-cal-modal__divider {
700
+ border-top: 1px dashed var(--sft-color-border);
701
+ margin: var(--sft-space-1) 0;
702
+ }
703
+ .sft-cal-modal__actions {
704
+ display: flex;
705
+ gap: var(--sft-space-2);
706
+ }
707
+
708
+ /* ── confirm / delete-scope dialog ───────────────────────── */
709
+ .sft-cal-confirm {
710
+ width: 320px;
711
+ max-width: 100%;
712
+ box-sizing: border-box;
713
+ padding: 20px;
714
+ background: var(--sft-color-surface);
715
+ border: 1px solid var(--sft-color-border);
716
+ border-radius: var(--sft-radius-lg);
717
+ box-shadow: var(--sft-shadow-overlay);
718
+ }
719
+ .sft-cal-confirm__title {
720
+ font-size: var(--sft-font-size-lg);
721
+ font-weight: var(--sft-font-weight-bold);
722
+ text-align: center;
723
+ margin-bottom: var(--sft-space-2);
724
+ }
725
+ .sft-cal-confirm__options {
726
+ display: flex;
727
+ flex-direction: column;
728
+ gap: 6px;
729
+ padding: var(--sft-space-2) 0;
730
+ }
731
+ .sft-cal-confirm__actions {
732
+ display: flex;
733
+ gap: var(--sft-space-2);
734
+ padding-top: var(--sft-space-2);
735
+ }
736
+ .sft-cal-delopt {
737
+ display: flex;
738
+ align-items: center;
739
+ gap: var(--sft-space-2);
740
+ width: 100%;
741
+ padding: 10px var(--sft-space-3);
742
+ border: 1px solid transparent;
743
+ border-radius: var(--sft-radius-md);
744
+ background: transparent;
745
+ color: var(--sft-color-text);
746
+ font: inherit;
747
+ font-size: var(--sft-font-size-sm);
748
+ text-align: left;
749
+ cursor: pointer;
750
+ }
751
+ .sft-cal-delopt:hover {
752
+ background: var(--sft-color-bg-subtle);
753
+ }
754
+ .sft-cal-delopt[data-active] {
755
+ background: color-mix(in srgb, var(--sft-color-danger) 10%, var(--sft-color-surface));
756
+ border-color: color-mix(in srgb, var(--sft-color-danger) 30%, transparent);
757
+ color: var(--sft-color-danger);
758
+ }
759
+ .sft-cal-delopt__radio {
760
+ width: 16px;
761
+ height: 16px;
762
+ flex: none;
763
+ border-radius: 50%;
764
+ border: 2px solid var(--sft-color-border-strong);
765
+ position: relative;
766
+ }
767
+ .sft-cal-delopt[data-active] .sft-cal-delopt__radio {
768
+ border-color: var(--sft-color-danger);
769
+ }
770
+ .sft-cal-delopt[data-active] .sft-cal-delopt__radio::after {
771
+ content: "";
772
+ position: absolute;
773
+ inset: 3px;
774
+ border-radius: 50%;
775
+ background: var(--sft-color-danger);
776
+ }
777
+ /* non-destructive variant (e.g. the recurring-event move scope picker) —
778
+ same shape, primary accent color instead of danger red */
779
+ .sft-cal-delopt--accent[data-active] {
780
+ background: color-mix(in srgb, var(--sft-cal-accent) 10%, var(--sft-color-surface));
781
+ border-color: color-mix(in srgb, var(--sft-cal-accent) 30%, transparent);
782
+ color: var(--sft-cal-accent);
783
+ }
784
+ .sft-cal-delopt--accent[data-active] .sft-cal-delopt__radio {
785
+ border-color: var(--sft-cal-accent);
786
+ }
787
+ .sft-cal-delopt--accent[data-active] .sft-cal-delopt__radio::after {
788
+ background: var(--sft-cal-accent);
789
+ }
790
+
791
+ /* ── category filter (header popover) ────────────────────── */
792
+ .sft-cal-catfilter {
793
+ position: relative;
794
+ }
795
+ .sft-cal-catfilter__trigger {
796
+ display: inline-flex;
797
+ align-items: center;
798
+ justify-content: space-between;
799
+ gap: var(--sft-space-2);
800
+ width: 220px;
801
+ height: 36px;
802
+ padding: 0 var(--sft-space-4);
803
+ border: 1px solid var(--sft-color-border);
804
+ border-radius: var(--sft-radius-md);
805
+ background: var(--sft-color-surface);
806
+ color: var(--sft-color-text);
807
+ font: inherit;
808
+ font-size: var(--sft-font-size-sm);
809
+ font-weight: var(--sft-font-weight-medium);
810
+ cursor: pointer;
811
+ }
812
+ .sft-cal-catfilter__trigger:hover {
813
+ background: var(--sft-color-bg-hover);
814
+ }
815
+ .sft-cal-catfilter__popover {
816
+ position: absolute;
817
+ top: calc(100% + 4px);
818
+ right: 0;
819
+ z-index: var(--sft-z-modal);
820
+ width: 240px;
821
+ padding: var(--sft-space-1);
822
+ background: var(--sft-color-surface);
823
+ border: 1px solid var(--sft-color-border);
824
+ border-radius: var(--sft-radius-md);
825
+ box-shadow: var(--sft-shadow-overlay);
826
+ }
827
+ .sft-cal-catfilter__list {
828
+ max-height: 320px;
829
+ overflow-y: auto;
830
+ }
831
+
832
+ /* ── month view ──────────────────────────────────────────── */
833
+ .sft-cal-month {
834
+ flex: 1;
835
+ min-height: 0;
836
+ display: flex;
837
+ flex-direction: column;
838
+ border: 1px solid var(--sft-color-border);
839
+ border-radius: var(--sft-radius-sm);
840
+ overflow: hidden;
841
+ }
842
+ .sft-cal-month__weekdays {
843
+ display: grid;
844
+ grid-template-columns: repeat(7, 1fr);
845
+ border-bottom: 1px solid var(--sft-color-border);
846
+ background: var(--sft-color-bg-subtle);
847
+ flex: none;
848
+ }
849
+ .sft-cal-month__weekday {
850
+ padding: 2px 12px;
851
+ text-align: right;
852
+ font-size: var(--sft-font-size-sm);
853
+ font-weight: var(--sft-font-weight-medium);
854
+ color: var(--sft-color-text-secondary);
855
+ border-right: 1px solid var(--sft-color-border);
856
+ }
857
+ .sft-cal-month__weekday:last-child {
858
+ border-right: none;
859
+ }
860
+ .sft-cal-month__grid {
861
+ display: grid;
862
+ grid-template-columns: repeat(7, 1fr);
863
+ flex: 1;
864
+ min-height: 0;
865
+ overflow: auto;
866
+ }
867
+ .sft-cal-month__cell {
868
+ position: relative;
869
+ display: flex;
870
+ flex-direction: column;
871
+ min-height: 100px;
872
+ user-select: none;
873
+ background: var(--sft-color-bg);
874
+ border-right: 1px solid var(--sft-color-border);
875
+ border-bottom: 1px solid var(--sft-color-border);
876
+ }
877
+ .sft-cal-month__cell[data-lastcol] {
878
+ border-right: none;
879
+ }
880
+ .sft-cal-month__cell[data-lastrow] {
881
+ border-bottom: none;
882
+ }
883
+ .sft-cal-month__cell[data-weekend] {
884
+ background: var(--sft-color-bg-subtle);
885
+ }
886
+ /* drag-to-move target day highlight — a plain outline, not a fill, so it
887
+ never competes with the uniform-height item backgrounds inside the cell */
888
+ .sft-cal-month__cell[data-movetarget] {
889
+ box-shadow: inset 0 0 0 2px var(--sft-cal-accent);
890
+ }
891
+ .sft-cal-month__cell:focus-visible {
892
+ outline: 2px solid var(--sft-cal-accent);
893
+ outline-offset: -2px;
894
+ }
895
+ .sft-cal-month__cellhead {
896
+ display: flex;
897
+ justify-content: flex-end;
898
+ align-items: center;
899
+ gap: 4px;
900
+ flex: none;
901
+ height: var(--sft-cal-event-h);
902
+ margin: 2px 4px 1px 4px;
903
+ }
904
+ .sft-cal-month__holiday {
905
+ flex: 1;
906
+ min-width: 0;
907
+ overflow: hidden;
908
+ text-overflow: ellipsis;
909
+ white-space: nowrap;
910
+ font-size: var(--sft-font-size-sm);
911
+ color: var(--sft-cal-sun);
912
+ }
913
+ .sft-cal-month__num {
914
+ display: inline-flex;
915
+ align-items: center;
916
+ justify-content: center;
917
+ width: 20px;
918
+ height: 20px;
919
+ font-size: var(--sft-font-size-md);
920
+ color: var(--sft-color-text);
921
+ }
922
+ .sft-cal-month__num--dim {
923
+ color: var(--sft-color-text-muted);
924
+ opacity: 0.6;
925
+ }
926
+ .sft-cal-month__num--today {
927
+ background: var(--sft-cal-accent);
928
+ color: var(--sft-color-text-on-accent);
929
+ border-radius: 50%;
930
+ }
931
+ .sft-cal-month__events {
932
+ flex: 1;
933
+ position: relative;
934
+ overflow: hidden;
935
+ }
936
+ .sft-cal-month__bar {
937
+ position: absolute;
938
+ left: 0;
939
+ right: 0;
940
+ height: var(--sft-cal-event-h);
941
+ display: flex;
942
+ align-items: center;
943
+ gap: 4px;
944
+ cursor: pointer;
945
+ overflow: hidden;
946
+ transition: opacity var(--sft-duration-fast) var(--sft-ease);
947
+ }
948
+ .sft-cal-month__bar:hover {
949
+ opacity: 0.9;
950
+ }
951
+ .sft-cal-month__bar[data-movable]:active,
952
+ .sft-cal-month__chip[data-movable]:active {
953
+ cursor: grabbing;
954
+ }
955
+ .sft-cal-month__bar:focus-visible,
956
+ .sft-cal-month__chip:focus-visible {
957
+ outline: 2px solid var(--sft-cal-accent);
958
+ outline-offset: -2px;
959
+ }
960
+ /* left/right edges of a period bar's start/end day segment — drag to resize
961
+ the date range, widened past the visual edge for an easier grab */
962
+ .sft-cal-month__bar-resize {
963
+ position: absolute;
964
+ top: 0;
965
+ bottom: 0;
966
+ width: 7px;
967
+ cursor: col-resize;
968
+ }
969
+ .sft-cal-month__bar-resize--left {
970
+ left: -3px;
971
+ }
972
+ .sft-cal-month__bar-resize--right {
973
+ right: -3px;
974
+ }
975
+ .sft-cal-month__bar-title {
976
+ display: flex;
977
+ align-items: center;
978
+ gap: 4px;
979
+ flex: 1;
980
+ min-width: 0;
981
+ font-size: var(--sft-font-size-md);
982
+ overflow: hidden;
983
+ text-overflow: ellipsis;
984
+ white-space: nowrap;
985
+ }
986
+ .sft-cal-month__chip {
987
+ position: relative;
988
+ display: flex;
989
+ align-items: center;
990
+ gap: 4px;
991
+ height: var(--sft-cal-event-h);
992
+ flex: none;
993
+ padding: 0 8px 0 4px;
994
+ border-radius: var(--sft-radius-sm);
995
+ cursor: pointer;
996
+ }
997
+ .sft-cal-month__chip:hover {
998
+ background: var(--sft-color-bg-hover);
999
+ }
1000
+ .sft-cal-month__chip--preview {
1001
+ opacity: 0.5;
1002
+ }
1003
+ .sft-cal-month__chip-bar {
1004
+ width: 4px;
1005
+ height: 14px;
1006
+ flex: none;
1007
+ border-radius: var(--sft-radius-full);
1008
+ }
1009
+ .sft-cal-month__chip-title {
1010
+ flex: 1;
1011
+ min-width: 0;
1012
+ font-size: var(--sft-font-size-md);
1013
+ color: var(--sft-color-text);
1014
+ overflow: hidden;
1015
+ text-overflow: ellipsis;
1016
+ white-space: nowrap;
1017
+ }
1018
+ .sft-cal-month__chip-icon {
1019
+ color: var(--sft-color-text-muted);
1020
+ flex: none;
1021
+ }
1022
+ .sft-cal-month__chip-time {
1023
+ font-size: var(--sft-font-size-sm);
1024
+ color: var(--sft-color-text-muted);
1025
+ flex: none;
1026
+ }
1027
+ .sft-cal-month__more {
1028
+ display: flex;
1029
+ align-items: center;
1030
+ flex: none;
1031
+ height: var(--sft-cal-event-h);
1032
+ padding: 0 4px;
1033
+ border: none;
1034
+ border-radius: var(--sft-radius-sm);
1035
+ background: transparent;
1036
+ color: var(--sft-cal-accent);
1037
+ font: inherit;
1038
+ font-size: var(--sft-font-size-md);
1039
+ font-weight: var(--sft-font-weight-medium);
1040
+ text-align: left;
1041
+ cursor: pointer;
1042
+ }
1043
+ .sft-cal-month__more:hover {
1044
+ background: var(--sft-color-bg-hover);
1045
+ }
1046
+
1047
+ /* drag-to-create preview: mirrors the "+ new event" add button, spanning the
1048
+ dragged days as one growing bar */
1049
+ .sft-cal-month__bar--drag {
1050
+ background: var(--sft-color-bg-subtle);
1051
+ color: var(--sft-color-text-muted);
1052
+ box-shadow: inset 0 0 0 1px var(--sft-color-border);
1053
+ pointer-events: none;
1054
+ }
1055
+ .sft-cal-month__add {
1056
+ display: flex;
1057
+ align-items: center;
1058
+ gap: 4px;
1059
+ height: var(--sft-cal-event-h);
1060
+ margin: 1px 4px 0 4px;
1061
+ padding: 0 8px;
1062
+ border: none;
1063
+ border-radius: var(--sft-radius-sm);
1064
+ background: var(--sft-color-bg-subtle);
1065
+ color: var(--sft-color-text-muted);
1066
+ font: inherit;
1067
+ font-size: var(--sft-font-size-md);
1068
+ font-weight: var(--sft-font-weight-medium);
1069
+ cursor: pointer;
1070
+ opacity: 0;
1071
+ transition: opacity var(--sft-duration-fast) var(--sft-ease);
1072
+ }
1073
+ .sft-cal-month__cell:hover .sft-cal-month__add {
1074
+ opacity: 1;
1075
+ }
1076
+
1077
+ /* ── time grid (week / day) ──────────────────────────────── */
1078
+ .sft-cal-timegrid {
1079
+ display: grid;
1080
+ flex: 1;
1081
+ min-height: 0;
1082
+ border: 1px solid var(--sft-color-border);
1083
+ border-radius: var(--sft-radius-sm);
1084
+ overflow: hidden;
1085
+ grid-template-rows: auto 1fr;
1086
+ }
1087
+ .sft-cal-timegrid--week {
1088
+ grid-template-columns: 64px repeat(7, 1fr);
1089
+ }
1090
+ .sft-cal-timegrid--day {
1091
+ grid-template-columns: 64px 1fr;
1092
+ }
1093
+ .sft-cal-timegrid__corner {
1094
+ border-bottom: 1px solid var(--sft-color-border);
1095
+ border-right: 1px solid var(--sft-color-border);
1096
+ background: var(--sft-color-bg-subtle);
1097
+ }
1098
+ .sft-cal-timegrid__colhead {
1099
+ padding: 2px 8px;
1100
+ text-align: center;
1101
+ background: var(--sft-color-bg-subtle);
1102
+ border-bottom: 1px solid var(--sft-color-border);
1103
+ border-right: 1px solid var(--sft-color-border);
1104
+ }
1105
+ .sft-cal-timegrid__colhead:last-child {
1106
+ border-right: none;
1107
+ }
1108
+ /* cross-day drag target — a plain outline, matching the month view's
1109
+ [data-movetarget] cell highlight */
1110
+ .sft-cal-timegrid__colhead[data-movetarget] {
1111
+ box-shadow: inset 0 0 0 2px var(--sft-cal-accent);
1112
+ }
1113
+ .sft-cal-timegrid__daylabel {
1114
+ font-size: var(--sft-font-size-md);
1115
+ color: var(--sft-color-text-secondary);
1116
+ }
1117
+ .sft-cal-timegrid__daylabel[data-today] {
1118
+ color: var(--sft-cal-accent);
1119
+ font-weight: var(--sft-font-weight-medium);
1120
+ }
1121
+ .sft-cal-timegrid__hours {
1122
+ position: relative;
1123
+ border-right: 1px solid var(--sft-color-border);
1124
+ background: var(--sft-color-bg-subtle);
1125
+ overflow: hidden;
1126
+ }
1127
+ .sft-cal-timegrid__hour {
1128
+ height: calc(100% / 24);
1129
+ padding: 2px 8px;
1130
+ box-sizing: border-box;
1131
+ border-bottom: 1px solid var(--sft-color-border);
1132
+ }
1133
+ .sft-cal-timegrid__hour:last-child {
1134
+ border-bottom: none;
1135
+ }
1136
+ .sft-cal-timegrid__hourlabel {
1137
+ font-size: var(--sft-font-size-xs);
1138
+ color: var(--sft-color-text-muted);
1139
+ }
1140
+ .sft-cal-timegrid__col {
1141
+ position: relative;
1142
+ border-right: 1px solid var(--sft-color-border);
1143
+ overflow: hidden;
1144
+ }
1145
+ .sft-cal-timegrid__col:last-child {
1146
+ border-right: none;
1147
+ }
1148
+ .sft-cal-timegrid__slot {
1149
+ display: block;
1150
+ width: 100%;
1151
+ height: calc(100% / 24);
1152
+ border: none;
1153
+ border-bottom: 1px solid var(--sft-color-border);
1154
+ background: transparent;
1155
+ cursor: pointer;
1156
+ padding: 0;
1157
+ }
1158
+ .sft-cal-timegrid__slot:hover {
1159
+ background: var(--sft-color-bg-subtle);
1160
+ }
1161
+ .sft-cal-timeevent {
1162
+ position: absolute;
1163
+ border-radius: 4px;
1164
+ padding: 2px 6px;
1165
+ box-sizing: border-box;
1166
+ min-height: 20px;
1167
+ overflow: hidden;
1168
+ cursor: pointer;
1169
+ display: flex;
1170
+ align-items: center;
1171
+ transition: opacity var(--sft-duration-fast) var(--sft-ease);
1172
+ }
1173
+ .sft-cal-timeevent:hover {
1174
+ opacity: 0.85;
1175
+ }
1176
+ .sft-cal-timeevent[data-editing] {
1177
+ opacity: 0.5;
1178
+ }
1179
+ .sft-cal-timeevent:focus-visible {
1180
+ outline: 2px solid var(--sft-cal-accent);
1181
+ outline-offset: 1px;
1182
+ }
1183
+ .sft-cal-timeevent__label {
1184
+ display: flex;
1185
+ align-items: center;
1186
+ gap: 6px;
1187
+ min-width: 0;
1188
+ font-size: var(--sft-font-size-md);
1189
+ font-weight: var(--sft-font-weight-medium);
1190
+ }
1191
+ .sft-cal-timeevent__title {
1192
+ overflow: hidden;
1193
+ text-overflow: ellipsis;
1194
+ white-space: nowrap;
1195
+ }
1196
+ .sft-cal-timeevent[data-movable] {
1197
+ cursor: grab;
1198
+ /* week/day move+resize track via column geometry (works under touch); claim
1199
+ the drag gesture on the chip so a touch on it drags instead of scrolling */
1200
+ touch-action: none;
1201
+ }
1202
+ .sft-cal-timeevent[data-movable]:active {
1203
+ cursor: grabbing;
1204
+ }
1205
+ /* top/bottom resize handles — thin strips that widen the hit target past the
1206
+ 1-2px visual edge, shown only on non-recurring (movable) events */
1207
+ .sft-cal-timeevent__resize {
1208
+ position: absolute;
1209
+ left: 0;
1210
+ right: 0;
1211
+ height: 6px;
1212
+ cursor: row-resize;
1213
+ touch-action: none;
1214
+ }
1215
+ .sft-cal-timeevent__resize--top {
1216
+ top: -3px;
1217
+ }
1218
+ .sft-cal-timeevent__resize--bottom {
1219
+ bottom: -3px;
1220
+ }
1221
+ /* coarse pointers (touch/pen) need bigger targets than the 6px resize strips */
1222
+ @media (pointer: coarse) {
1223
+ .sft-cal-timeevent__resize {
1224
+ height: 14px;
1225
+ }
1226
+ .sft-cal-timeevent__resize--top {
1227
+ top: -7px;
1228
+ }
1229
+ .sft-cal-timeevent__resize--bottom {
1230
+ bottom: -7px;
1231
+ }
1232
+ }
1233
+ /* drag-to-create draft bar: mirrors the month view's "+ new event" ghost —
1234
+ plain outline, not a category color, since no category is chosen yet */
1235
+ .sft-cal-timeevent--draft {
1236
+ background: var(--sft-color-bg-subtle);
1237
+ color: var(--sft-color-text-muted);
1238
+ box-shadow: inset 0 0 0 1px var(--sft-color-border);
1239
+ pointer-events: none;
1240
+ }
1241
+ .sft-cal-timeevent--draft .sft-cal-timeevent__title {
1242
+ color: var(--sft-color-text-muted);
1243
+ }
1244
+
1245
+ /* ── year view ───────────────────────────────────────────── */
1246
+ .sft-cal-year {
1247
+ flex: 1;
1248
+ min-height: 0;
1249
+ overflow: auto;
1250
+ }
1251
+ .sft-cal-year__grid {
1252
+ display: grid;
1253
+ grid-template-columns: repeat(4, 1fr);
1254
+ gap: var(--sft-space-2);
1255
+ }
1256
+ .sft-cal-year__cell {
1257
+ border: 1px solid var(--sft-color-border);
1258
+ border-radius: var(--sft-radius-sm);
1259
+ padding: var(--sft-space-2) var(--sft-space-3);
1260
+ }
1261
+ .sft-cal-mini {
1262
+ display: flex;
1263
+ flex-direction: column;
1264
+ gap: 4px;
1265
+ }
1266
+ .sft-cal-mini__head {
1267
+ display: flex;
1268
+ align-items: center;
1269
+ justify-content: space-between;
1270
+ padding: 0 var(--sft-space-2);
1271
+ }
1272
+ .sft-cal-mini__title {
1273
+ margin: 0;
1274
+ font-size: var(--sft-font-size-lg);
1275
+ font-weight: var(--sft-font-weight-bold);
1276
+ }
1277
+ .sft-cal-mini__count {
1278
+ font-size: var(--sft-font-size-xs);
1279
+ color: var(--sft-color-text-muted);
1280
+ }
1281
+ .sft-cal-mini__weekdays,
1282
+ .sft-cal-mini__grid {
1283
+ display: grid;
1284
+ grid-template-columns: repeat(7, 1fr);
1285
+ gap: 1px;
1286
+ }
1287
+ .sft-cal-mini__weekday {
1288
+ height: 20px;
1289
+ display: flex;
1290
+ align-items: center;
1291
+ justify-content: center;
1292
+ font-size: var(--sft-font-size-xs);
1293
+ font-weight: var(--sft-font-weight-medium);
1294
+ color: var(--sft-color-text-muted);
1295
+ }
1296
+ .sft-cal-mini__day {
1297
+ position: relative;
1298
+ height: 34px;
1299
+ display: flex;
1300
+ flex-direction: column;
1301
+ align-items: center;
1302
+ padding-top: 2px;
1303
+ border: none;
1304
+ border-radius: var(--sft-radius-sm);
1305
+ background: transparent;
1306
+ color: var(--sft-color-text);
1307
+ font: inherit;
1308
+ font-size: var(--sft-font-size-sm);
1309
+ cursor: pointer;
1310
+ }
1311
+ .sft-cal-mini__day:hover:not([data-empty]) {
1312
+ background: var(--sft-color-bg-subtle);
1313
+ }
1314
+ .sft-cal-mini__day[data-empty] {
1315
+ visibility: hidden;
1316
+ cursor: default;
1317
+ }
1318
+ .sft-cal-mini__day[data-today] {
1319
+ background: color-mix(in srgb, var(--sft-cal-accent) 16%, transparent);
1320
+ color: var(--sft-cal-accent);
1321
+ font-weight: var(--sft-font-weight-medium);
1322
+ }
1323
+ .sft-cal-mini__dots {
1324
+ display: flex;
1325
+ gap: 2px;
1326
+ margin-top: 2px;
1327
+ }
1328
+ .sft-cal-mini__dot {
1329
+ width: 4px;
1330
+ height: 4px;
1331
+ border-radius: 50%;
1332
+ }
1333
+
1334
+ /* ── responsive ──────────────────────────────────────────── */
1335
+ @media (max-width: 900px) {
1336
+ .sft-cal-year__grid {
1337
+ grid-template-columns: repeat(3, 1fr);
1338
+ }
1339
+ }
1340
+ @media (max-width: 640px) {
1341
+ .sft-cal-year__grid {
1342
+ grid-template-columns: repeat(2, 1fr);
1343
+ }
1344
+ .sft-cal-catfilter__trigger {
1345
+ width: 160px;
1346
+ }
1347
+ }