@nomideusz/svelte-calendar 1.3.0 → 1.4.1

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.
@@ -9,8 +9,8 @@
9
9
  * Answers: "What's coming up and when do I need to be ready?"
10
10
  */
11
11
  import { createClock } from "../../core/clock.svelte.js";
12
- import { sod, addDaysMs, startOfWeek, dayNum, isAllDay, isMultiDay, segmentForDay } from "../../core/time.js";
13
- import { weekdayLong, monthLong } from "../../core/locale.js";
12
+ import { sod, addDaysMs, startOfWeek, isAllDay, isMultiDay, segmentForDay } from "../../core/time.js";
13
+ import { weekdayLong, monthLong, fmtDayNum } from "../../core/locale.js";
14
14
  import { useCalendarContext } from "../shared/context.svelte.js";
15
15
  import EventContent from "../shared/EventContent.svelte";
16
16
  import { fmtTime, duration, timeUntilMs, progress, groupIntoSlots } from "../shared/format.js";
@@ -165,9 +165,10 @@ const weekDays = $derived.by(() => {
165
165
  ms,
166
166
  dayName: weekdayLong(ms, locale),
167
167
  month: monthLong(ms, locale),
168
- num: dayNum(ms),
168
+ num: fmtDayNum(ms, locale),
169
169
  tier,
170
- isToday: ms === todayMs,
170
+ // A dateless weekly template (showDates=false) has no today to mark.
171
+ isToday: showDates && ms === todayMs,
171
172
  events: dayEvts,
172
173
  allDayEvents: allDayEvts,
173
174
  timedEvents: timedEvts,
@@ -199,7 +200,7 @@ const weekDays = $derived.by(() => {
199
200
  class:ag-card--tentative={ev.status === 'tentative'}
200
201
  class:ag-card--full={ev.status === 'full'}
201
202
  class:ag-card--limited={ev.status === 'limited'}
202
- style:--ev-color={ev.color || 'var(--dt-accent)'}
203
+ style:--ev-color={ev.color || 'var(--dt-event, var(--dt-accent))'}
203
204
  aria-label="{ev.title}{statusText(ev)}, {fmt(ev.start)} – {fmt(ev.end)}, {duration(ev)}"
204
205
  class:ag-card--drag={dragId === String(ev.id)}
205
206
  draggable={canDrag(ev)}
@@ -256,7 +257,7 @@ const weekDays = $derived.by(() => {
256
257
  class:ag-compact--tentative={ev.status === 'tentative'}
257
258
  class:ag-compact--full={ev.status === 'full'}
258
259
  class:ag-compact--limited={ev.status === 'limited'}
259
- style:--ev-color={ev.color || 'var(--dt-accent)'}
260
+ style:--ev-color={ev.color || 'var(--dt-event, var(--dt-accent))'}
260
261
  aria-label="{ev.title}{statusText(ev)}{done ? `, ${L.completed}` : ''}, {fmt(ev.start)}, {duration(ev)}"
261
262
  onclick={() => handleClick(ev)}
262
263
  onpointerenter={() => oneventhover?.(ev)}
@@ -387,7 +388,7 @@ const weekDays = $derived.by(() => {
387
388
  {#if showDates}<span class="ag-wday-num">{day.num}</span>{/if}
388
389
  {#if day.isToday}
389
390
  <span class="ag-wday-badge">{L.today}</span>
390
- {:else if day.tier === 'tomorrow'}
391
+ {:else if showDates && day.tier === 'tomorrow'}
391
392
  <span class="ag-wday-badge ag-wday-badge--muted">{L.tomorrow}</span>
392
393
  {/if}
393
394
  <span class="ag-wday-name">{day.dayName}</span>
@@ -529,7 +530,7 @@ const weekDays = $derived.by(() => {
529
530
  width: 100%;
530
531
  min-width: 0;
531
532
  box-sizing: border-box;
532
- color: var(--dt-text, rgba(0, 0, 0, 0.87));
533
+ color: var(--dt-text, rgba(15, 15, 15, 0.87));
533
534
  font-family: var(--dt-sans, system-ui, sans-serif);
534
535
  }
535
536
  .ag--auto {
@@ -606,7 +607,7 @@ const weekDays = $derived.by(() => {
606
607
  }
607
608
  .ag-allday-chip:focus-visible {
608
609
  outline: none;
609
- box-shadow: inset 0 0 0 2px var(--dt-btn-text, #fff), 0 0 0 2px var(--dt-accent, #2563eb);
610
+ box-shadow: inset 0 0 0 2px var(--dt-btn-text, #fff), 0 0 0 2px var(--dt-accent, #1d4fd7);
610
611
  }
611
612
  .ag-allday-chip--selected {
612
613
  box-shadow: inset 0 0 0 2px var(--dt-btn-text, #fff);
@@ -639,7 +640,7 @@ const weekDays = $derived.by(() => {
639
640
  border-radius: 0;
640
641
  background: transparent;
641
642
  border: none;
642
- border-bottom: 1px solid var(--dt-border, rgba(0, 0, 0, 0.3));
643
+ border-bottom: 1px solid var(--dt-border, rgba(15, 15, 15, 0.3));
643
644
  overflow: hidden;
644
645
  cursor: pointer;
645
646
  transition: background 150ms, box-shadow 150ms;
@@ -655,18 +656,18 @@ const weekDays = $derived.by(() => {
655
656
  }
656
657
  .ag-card:hover,
657
658
  .ag-card:active {
658
- background: var(--dt-hover, rgba(0, 0, 0, 0.04));
659
+ background: var(--dt-hover, rgba(15, 15, 15, 0.04));
659
660
  }
660
661
  .ag-card:focus-visible {
661
662
  outline: none;
662
- box-shadow: 0 0 0 2px var(--dt-accent, #2563eb);
663
+ box-shadow: 0 0 0 2px var(--dt-accent, #1d4fd7);
663
664
  }
664
665
  .ag-card--selected {
665
666
  box-shadow: inset 0 0 0 1px var(--ev-color);
666
667
  }
667
668
  .ag-card--cancelled .ag-card-title {
668
669
  text-decoration: line-through;
669
- color: var(--dt-text-2, rgba(0, 0, 0, 0.54));
670
+ color: var(--dt-text-2, rgba(15, 15, 15, 0.54));
670
671
  }
671
672
  .ag-card--cancelled::before,
672
673
  .ag-card--full::before {
@@ -675,7 +676,7 @@ const weekDays = $derived.by(() => {
675
676
  .ag-card--tentative .ag-card-title,
676
677
  .ag-card--limited .ag-card-title,
677
678
  .ag-card--full .ag-card-title {
678
- color: var(--dt-text-2, rgba(0, 0, 0, 0.54));
679
+ color: var(--dt-text-2, rgba(15, 15, 15, 0.54));
679
680
  }
680
681
  .ag-card--tentative::before,
681
682
  .ag-card--limited::before {
@@ -694,7 +695,7 @@ const weekDays = $derived.by(() => {
694
695
  }
695
696
  .ag-card-title {
696
697
  font: 500 15px/1.25 var(--dt-sans, system-ui, sans-serif);
697
- color: var(--dt-text, rgba(0, 0, 0, 0.87));
698
+ color: var(--dt-text, rgba(15, 15, 15, 0.87));
698
699
  word-break: break-word;
699
700
  flex: 1;
700
701
  min-width: 0;
@@ -712,7 +713,7 @@ const weekDays = $derived.by(() => {
712
713
  row-gap: 2px;
713
714
  font: 400 14px/1.2 var(--dt-sans, system-ui, sans-serif);
714
715
  font-variant-numeric: tabular-nums;
715
- color: var(--dt-text, rgba(0, 0, 0, 0.87));
716
+ color: var(--dt-text, rgba(15, 15, 15, 0.87));
716
717
  }
717
718
  .ag-card-dur,
718
719
  .ag-card-eta,
@@ -720,7 +721,7 @@ const weekDays = $derived.by(() => {
720
721
  .ag-card-loc,
721
722
  .ag-card-tag {
722
723
  font: 400 12.5px/1.2 var(--dt-sans, system-ui, sans-serif);
723
- color: var(--dt-text-2, rgba(0, 0, 0, 0.66));
724
+ color: var(--dt-text-2, rgba(15, 15, 15, 0.66));
724
725
  }
725
726
  .ag-card-tags {
726
727
  display: flex;
@@ -733,7 +734,7 @@ const weekDays = $derived.by(() => {
733
734
  }
734
735
  .ag-card-progress {
735
736
  height: 3px;
736
- background: var(--dt-border, rgba(0, 0, 0, 0.08));
737
+ background: var(--dt-border, rgba(15, 15, 15, 0.08));
737
738
  border-radius: 0;
738
739
  overflow: hidden;
739
740
  margin-top: 2px;
@@ -754,17 +755,17 @@ const weekDays = $derived.by(() => {
754
755
 
755
756
  /* ═══ Week day groups ═══ */
756
757
  .ag-wday {
757
- border-bottom: 1px solid var(--dt-border, rgba(0, 0, 0, 0.08));
758
+ border-bottom: 1px solid var(--dt-border, rgba(15, 15, 15, 0.08));
758
759
  }
759
760
  .ag-wday:last-child {
760
761
  border-bottom: none;
761
762
  }
762
763
  .ag-wday--today {
763
- background: color-mix(in srgb, var(--dt-accent, #2563eb) 2%, transparent);
764
+ background: color-mix(in srgb, var(--dt-accent, #1d4fd7) 2%, transparent);
764
765
  }
765
766
  /* Past days: quieter ink from the text tokens, no subtree opacity */
766
767
  .ag-wday--past .ag-wday-num {
767
- color: var(--dt-text-2, rgba(0, 0, 0, 0.66));
768
+ color: var(--dt-text-2, rgba(15, 15, 15, 0.66));
768
769
  }
769
770
  .ag-wday--past .ag-wday-head {
770
771
  padding: 8px 20px 2px;
@@ -780,8 +781,8 @@ const weekDays = $derived.by(() => {
780
781
  135deg,
781
782
  transparent,
782
783
  transparent 4px,
783
- color-mix(in srgb, var(--dt-text, rgba(0, 0, 0, 0.87)) 8%, transparent) 4px,
784
- color-mix(in srgb, var(--dt-text, rgba(0, 0, 0, 0.87)) 8%, transparent) 8px
784
+ color-mix(in srgb, var(--dt-text, rgba(15, 15, 15, 0.87)) 8%, transparent) 4px,
785
+ color-mix(in srgb, var(--dt-text, rgba(15, 15, 15, 0.87)) 8%, transparent) 8px
785
786
  );
786
787
  pointer-events: none;
787
788
  }
@@ -795,9 +796,9 @@ const weekDays = $derived.by(() => {
795
796
  }
796
797
  .ag-wday-head--click:focus-visible,
797
798
  .ag-wday-empty--click:focus-visible {
798
- outline: 2px solid var(--dt-accent, #2563eb);
799
+ outline: 2px solid var(--dt-text, #0f0f0f);
799
800
  outline-offset: -2px;
800
- border-radius: 4px;
801
+ border-radius: 0;
801
802
  }
802
803
  .ag-wday-head {
803
804
  display: flex;
@@ -806,7 +807,7 @@ const weekDays = $derived.by(() => {
806
807
  padding: 8px 20px;
807
808
  position: sticky;
808
809
  top: 0;
809
- background: var(--dt-bg, #fff);
810
+ background: var(--dt-bg, #efebe9);
810
811
  z-index: 1;
811
812
  /* Own compositor layer: without it, fast (async) scrolling repaints
812
813
  the pinned header a frame late and a gap flashes above it. */
@@ -825,7 +826,7 @@ const weekDays = $derived.by(() => {
825
826
  font-stretch: 90%;
826
827
  letter-spacing: -0.02em;
827
828
  font-variant-numeric: tabular-nums;
828
- color: var(--dt-text, rgba(0, 0, 0, 0.87));
829
+ color: var(--dt-text, rgba(15, 15, 15, 0.87));
829
830
  margin-inline-end: 4px;
830
831
  }
831
832
  .ag-wday-badge,
@@ -833,25 +834,25 @@ const weekDays = $derived.by(() => {
833
834
  font: 500 12px/1 var(--dt-sans, system-ui, sans-serif);
834
835
  letter-spacing: 0.08em;
835
836
  text-transform: uppercase;
836
- color: var(--dt-text-2, rgba(0, 0, 0, 0.66));
837
+ color: var(--dt-text-2, rgba(15, 15, 15, 0.66));
837
838
  }
838
839
  .ag-wday--today .ag-wday-num,
839
840
  .ag-wday--today .ag-wday-name,
840
841
  .ag-wday-badge {
841
- color: var(--dt-accent, #2563eb);
842
+ color: var(--dt-accent, #1d4fd7);
842
843
  }
843
844
  .ag-wday .ag-wday-badge--muted {
844
- color: var(--dt-text-2, rgba(0, 0, 0, 0.66));
845
+ color: var(--dt-text-2, rgba(15, 15, 15, 0.66));
845
846
  }
846
847
  .ag-wday-date {
847
848
  font: 400 12.5px/1 var(--dt-sans, system-ui, sans-serif);
848
- color: var(--dt-text-2, rgba(0, 0, 0, 0.66));
849
+ color: var(--dt-text-2, rgba(15, 15, 15, 0.66));
849
850
  }
850
851
 
851
852
  .ag-wday-empty {
852
853
  padding: 2px 20px 8px;
853
854
  font-size: 12.5px;
854
- color: var(--dt-text-2, rgba(0, 0, 0, 0.66));
855
+ color: var(--dt-text-2, rgba(15, 15, 15, 0.66));
855
856
  }
856
857
 
857
858
  /* Expanded day */
@@ -871,7 +872,7 @@ const weekDays = $derived.by(() => {
871
872
  font: 500 12px/1.2 var(--dt-sans, system-ui, sans-serif);
872
873
  letter-spacing: 0.08em;
873
874
  text-transform: uppercase;
874
- color: var(--dt-accent, #2563eb);
875
+ color: var(--dt-accent, #1d4fd7);
875
876
  }
876
877
  .ag-wslot-cards {
877
878
  display: flex;
@@ -885,7 +886,7 @@ const weekDays = $derived.by(() => {
885
886
  }
886
887
  .ag-wday-past-line {
887
888
  font-size: 12.5px;
888
- color: var(--dt-text-2, rgba(0, 0, 0, 0.66));
889
+ color: var(--dt-text-2, rgba(15, 15, 15, 0.66));
889
890
  padding: 6px 0 0;
890
891
  }
891
892
  .ag-wday-past-line--summary {
@@ -903,12 +904,12 @@ const weekDays = $derived.by(() => {
903
904
  }
904
905
  .ag-past-toggle:hover,
905
906
  .ag-past-toggle:active {
906
- color: var(--dt-text, rgba(0, 0, 0, 0.87));
907
+ color: var(--dt-text, rgba(15, 15, 15, 0.87));
907
908
  }
908
909
  .ag-past-toggle:focus-visible {
909
910
  outline: none;
910
- box-shadow: 0 0 0 2px var(--dt-accent, #2563eb);
911
- border-radius: 4px;
911
+ box-shadow: 0 0 0 2px var(--dt-text, #0f0f0f);
912
+ border-radius: 0;
912
913
  }
913
914
  .ag-past-chevron {
914
915
  transition: transform 120ms;
@@ -923,7 +924,7 @@ const weekDays = $derived.by(() => {
923
924
  is kept for cancelled only, so "done" and "called off" never read alike. */
924
925
  .ag-compact--done .ag-compact-title,
925
926
  .ag-compact--done .ag-compact-time {
926
- color: var(--dt-text-2, rgba(0, 0, 0, 0.66));
927
+ color: var(--dt-text-2, rgba(15, 15, 15, 0.66));
927
928
  }
928
929
  .ag-compact--done::before {
929
930
  opacity: 0.45;
@@ -940,7 +941,7 @@ const weekDays = $derived.by(() => {
940
941
  align-items: baseline;
941
942
  gap: 10px;
942
943
  padding: 5px 0 5px 11px;
943
- border-bottom: 1px solid var(--dt-border, rgba(0, 0, 0, 0.3));
944
+ border-bottom: 1px solid var(--dt-border, rgba(15, 15, 15, 0.3));
944
945
  cursor: pointer;
945
946
  min-width: 0;
946
947
  width: 100%;
@@ -963,16 +964,16 @@ const weekDays = $derived.by(() => {
963
964
  }
964
965
  .ag-compact:hover,
965
966
  .ag-compact:active {
966
- background: var(--dt-hover, rgba(0, 0, 0, 0.04));
967
+ background: var(--dt-hover, rgba(15, 15, 15, 0.04));
967
968
  }
968
969
  .ag-compact:focus-visible {
969
970
  outline: none;
970
- box-shadow: 0 0 0 2px var(--dt-accent, #2563eb);
971
+ box-shadow: 0 0 0 2px var(--dt-accent, #1d4fd7);
971
972
  }
972
973
  .ag-compact-time {
973
974
  font: 400 14px/1.3 var(--dt-sans, system-ui, sans-serif);
974
975
  font-variant-numeric: tabular-nums;
975
- color: var(--dt-text, rgba(0, 0, 0, 0.87));
976
+ color: var(--dt-text, rgba(15, 15, 15, 0.87));
976
977
  min-width: 4.4em;
977
978
  flex-shrink: 0;
978
979
  white-space: nowrap;
@@ -1007,7 +1008,7 @@ const weekDays = $derived.by(() => {
1007
1008
  }
1008
1009
  .ag-compact-title {
1009
1010
  font: 500 15px/1.3 var(--dt-sans, system-ui, sans-serif);
1010
- color: var(--dt-text, rgba(0, 0, 0, 0.87));
1011
+ color: var(--dt-text, rgba(15, 15, 15, 0.87));
1011
1012
  flex: 0 1 auto;
1012
1013
  /* The title is the row's identity — never let subtitle/tags/duration
1013
1014
  squeeze it out on narrow screens (min-width: 0 resolves to 0px). */
@@ -1022,7 +1023,7 @@ const weekDays = $derived.by(() => {
1022
1023
  .ag-compact-loc,
1023
1024
  .ag-compact-tag {
1024
1025
  font: 400 12.5px/1.3 var(--dt-sans, system-ui, sans-serif);
1025
- color: var(--dt-text-2, rgba(0, 0, 0, 0.66));
1026
+ color: var(--dt-text-2, rgba(15, 15, 15, 0.66));
1026
1027
  white-space: nowrap;
1027
1028
  }
1028
1029
  .ag-compact-dur {
@@ -1045,7 +1046,7 @@ const weekDays = $derived.by(() => {
1045
1046
  }
1046
1047
  .ag-compact--cancelled .ag-compact-title {
1047
1048
  text-decoration: line-through;
1048
- color: var(--dt-text-2, rgba(0, 0, 0, 0.54));
1049
+ color: var(--dt-text-2, rgba(15, 15, 15, 0.54));
1049
1050
  }
1050
1051
  .ag-compact--cancelled::before,
1051
1052
  .ag-compact--full::before {
@@ -1054,7 +1055,7 @@ const weekDays = $derived.by(() => {
1054
1055
  .ag-compact--tentative .ag-compact-title,
1055
1056
  .ag-compact--limited .ag-compact-title,
1056
1057
  .ag-compact--full .ag-compact-title {
1057
- color: var(--dt-text-2, rgba(0, 0, 0, 0.54));
1058
+ color: var(--dt-text-2, rgba(15, 15, 15, 0.54));
1058
1059
  }
1059
1060
  .ag-compact--tentative::before,
1060
1061
  .ag-compact--limited::before {
@@ -1069,18 +1070,18 @@ const weekDays = $derived.by(() => {
1069
1070
  }
1070
1071
  .ag-compact-more {
1071
1072
  font-size: 12.5px;
1072
- color: var(--dt-text-2, rgba(0, 0, 0, 0.66));
1073
+ color: var(--dt-text-2, rgba(15, 15, 15, 0.66));
1073
1074
  padding: 4px 0 0 11px;
1074
1075
  cursor: pointer;
1075
1076
  display: block;
1076
1077
  }
1077
1078
  .ag-compact-more:hover,
1078
1079
  .ag-compact-more:active {
1079
- color: var(--dt-text, rgba(0, 0, 0, 0.87));
1080
+ color: var(--dt-text, rgba(15, 15, 15, 0.87));
1080
1081
  }
1081
1082
  .ag-compact-more:focus-visible {
1082
1083
  outline: none;
1083
- box-shadow: 0 0 0 2px var(--dt-accent, #2563eb);
1084
+ box-shadow: 0 0 0 2px var(--dt-text, #0f0f0f);
1084
1085
  border-radius: 0;
1085
1086
  }
1086
1087
 
@@ -1089,8 +1090,8 @@ const weekDays = $derived.by(() => {
1089
1090
  opacity: 0.4;
1090
1091
  }
1091
1092
  .ag-wday--drop {
1092
- background: var(--dt-hover, rgba(0, 0, 0, 0.04));
1093
- box-shadow: inset 0 0 0 1px var(--dt-accent, #2563eb);
1093
+ background: var(--dt-hover, rgba(15, 15, 15, 0.04));
1094
+ box-shadow: inset 0 0 0 1px var(--dt-accent, #1d4fd7);
1094
1095
  }
1095
1096
 
1096
1097
  /* ═══ Timetable columns (desktop) ═══ */
@@ -1101,7 +1102,7 @@ const weekDays = $derived.by(() => {
1101
1102
  /* Columns stretch to the tallest day, so the separator runs full height */
1102
1103
  .ag--cols .ag-wday {
1103
1104
  border-bottom: none;
1104
- border-inline-start: 1px solid var(--dt-border, rgba(0, 0, 0, 0.08));
1105
+ border-inline-start: 1px solid var(--dt-border, rgba(15, 15, 15, 0.08));
1105
1106
  min-width: 0;
1106
1107
  }
1107
1108
  .ag--cols .ag-wday:first-child {
@@ -581,7 +581,7 @@ $effect(() => {
581
581
  style:height="{p.height}px"
582
582
  style:left={p.left}
583
583
  style:width={p.width}
584
- style:--ev-color={p.ev.color ?? 'var(--dt-accent)'}
584
+ style:--ev-color={p.ev.color ?? 'var(--dt-event, var(--dt-accent))'}
585
585
  onclick={(e) => { e.stopPropagation(); if (suppressEventClick) { suppressEventClick = false; return; } oneventclick?.(p.ev); }}
586
586
  onpointerenter={() => oneventhover?.(p.ev)}
587
587
  aria-label="{p.ev.title}{statusText(p.ev)}, {fmtTime(p.ev.start, locale)} – {fmtTime(p.ev.end, locale)}{p.isCurrent ? `, ${L.inProgress}` : ''}{p.isNext ? `, ${L.upNext}` : ''}"
@@ -671,7 +671,7 @@ $effect(() => {
671
671
  user-select: none;
672
672
  font-variant-numeric: tabular-nums;
673
673
  overflow: hidden;
674
- background: var(--dt-bg, #fff);
674
+ background: var(--dt-bg, #efebe9);
675
675
  -webkit-tap-highlight-color: transparent;
676
676
  touch-action: pan-y pinch-zoom;
677
677
  }
@@ -699,7 +699,7 @@ $effect(() => {
699
699
  padding: 4px 8px;
700
700
  overflow-x: auto;
701
701
  scrollbar-width: none;
702
- border-bottom: 1px solid var(--dt-border, rgba(0, 0, 0, 0.08));
702
+ border-bottom: 1px solid var(--dt-border, rgba(15, 15, 15, 0.08));
703
703
  flex-shrink: 0;
704
704
  align-items: center;
705
705
  }
@@ -745,7 +745,7 @@ $effect(() => {
745
745
  }
746
746
  .mb-allday-chip:focus-visible {
747
747
  outline: none;
748
- box-shadow: inset 0 0 0 2px var(--dt-btn-text, #fff), 0 0 0 2px var(--dt-accent, #2563eb);
748
+ box-shadow: inset 0 0 0 2px var(--dt-btn-text, #fff), 0 0 0 2px var(--dt-accent, #1d4fd7);
749
749
  }
750
750
 
751
751
  /* The band is the colour; no dot. */
@@ -771,7 +771,7 @@ $effect(() => {
771
771
 
772
772
  .mb-allday-more {
773
773
  font: 400 12.5px/1 var(--dt-sans, system-ui, sans-serif);
774
- color: var(--dt-text-2, rgba(0, 0, 0, 0.54));
774
+ color: var(--dt-text-2, rgba(15, 15, 15, 0.54));
775
775
  white-space: nowrap;
776
776
  flex-shrink: 0;
777
777
  padding: 0 6px;
@@ -793,7 +793,7 @@ $effect(() => {
793
793
  }
794
794
  .mb-allday-more:focus-visible {
795
795
  outline: none;
796
- box-shadow: 0 0 0 2px var(--dt-accent, #2563eb);
796
+ box-shadow: 0 0 0 2px var(--dt-text, #0f0f0f);
797
797
  }
798
798
 
799
799
  /* ─── Grid ───────────────────────────────────────── */
@@ -804,14 +804,14 @@ $effect(() => {
804
804
  overscroll-behavior: contain;
805
805
  -webkit-overflow-scrolling: touch;
806
806
  scrollbar-width: thin;
807
- scrollbar-color: var(--dt-scrollbar, rgba(0, 0, 0, 0.1)) transparent;
807
+ scrollbar-color: var(--dt-scrollbar, rgba(15, 15, 15, 0.1)) transparent;
808
808
  position: relative;
809
809
  padding-top: 8px;
810
810
  }
811
811
  .mb--auto .mb-grid { overflow-y: visible; }
812
812
  .mb-grid:focus-visible {
813
813
  outline: none;
814
- box-shadow: inset 0 0 0 2px var(--dt-accent, #2563eb);
814
+ box-shadow: inset 0 0 0 2px var(--dt-text, #0f0f0f);
815
815
  }
816
816
 
817
817
  .mb-grid-inner {
@@ -831,7 +831,7 @@ $effect(() => {
831
831
  }
832
832
  .mb-empty-text {
833
833
  font: 500 13px/1.4 var(--dt-sans, system-ui, sans-serif);
834
- color: var(--dt-text-2, rgba(0, 0, 0, 0.54));
834
+ color: var(--dt-text-2, rgba(15, 15, 15, 0.54));
835
835
  }
836
836
 
837
837
  /* ─── Hour row ───────────────────────────────────── */
@@ -852,7 +852,7 @@ $effect(() => {
852
852
  vertical-align: top;
853
853
  margin-left: 1px;
854
854
  letter-spacing: 0;
855
- color: var(--dt-text-2, rgba(0, 0, 0, 0.54));
855
+ color: var(--dt-text-2, rgba(15, 15, 15, 0.54));
856
856
  }
857
857
  .mb-hour-label {
858
858
  width: 40px;
@@ -864,7 +864,7 @@ $effect(() => {
864
864
  font-stretch: 90%;
865
865
  font-variant-numeric: tabular-nums;
866
866
  letter-spacing: -0.02em;
867
- color: var(--dt-text, rgba(0, 0, 0, 0.87));
867
+ color: var(--dt-text, rgba(15, 15, 15, 0.87));
868
868
  text-align: right;
869
869
  padding-right: 8px;
870
870
  padding-top: 0;
@@ -875,14 +875,14 @@ $effect(() => {
875
875
  .mb-hour-line {
876
876
  flex: 1;
877
877
  height: 1px;
878
- background: var(--dt-border, rgba(0, 0, 0, 0.08));
878
+ background: var(--dt-border, rgba(15, 15, 15, 0.08));
879
879
  }
880
880
 
881
881
  .mb-hour--blocked {
882
882
  background: repeating-linear-gradient(
883
883
  -45deg,
884
- color-mix(in srgb, var(--dt-text, rgba(0, 0, 0, 0.87)) 3%, transparent),
885
- color-mix(in srgb, var(--dt-text, rgba(0, 0, 0, 0.87)) 3%, transparent) 4px,
884
+ color-mix(in srgb, var(--dt-text, rgba(15, 15, 15, 0.87)) 3%, transparent),
885
+ color-mix(in srgb, var(--dt-text, rgba(15, 15, 15, 0.87)) 3%, transparent) 4px,
886
886
  transparent 4px,
887
887
  transparent 8px
888
888
  );
@@ -894,7 +894,7 @@ $effect(() => {
894
894
  top: 50%;
895
895
  transform: translateY(-50%);
896
896
  font: 500 11px/1 var(--dt-sans, system-ui, sans-serif);
897
- color: var(--dt-text-2, rgba(0, 0, 0, 0.54));
897
+ color: var(--dt-text-2, rgba(15, 15, 15, 0.54));
898
898
  text-transform: uppercase;
899
899
  letter-spacing: 0.04em;
900
900
  }
@@ -932,13 +932,13 @@ $effect(() => {
932
932
  height: 8px;
933
933
  margin-top: -4px;
934
934
  border-radius: 50%;
935
- background: var(--dt-accent, #2563eb);
935
+ background: var(--dt-accent, #1d4fd7);
936
936
  }
937
937
  .mb-now-label span {
938
938
  display: inline-block;
939
939
  padding: 2px 3px;
940
940
  border-radius: 0;
941
- background: var(--dt-accent, #2563eb);
941
+ background: var(--dt-accent, #1d4fd7);
942
942
  font: 500 11px/1.2 var(--dt-sans, system-ui, sans-serif);
943
943
  font-variant-numeric: tabular-nums;
944
944
  color: var(--dt-btn-text, #ffffff);
@@ -947,7 +947,7 @@ $effect(() => {
947
947
  .mb-now-line {
948
948
  flex: 1;
949
949
  height: 0;
950
- border-top: 2px solid var(--dt-accent, #2563eb);
950
+ border-top: 2px solid var(--dt-accent, #1d4fd7);
951
951
  box-shadow: none;
952
952
  position: relative;
953
953
  z-index: 4;
@@ -961,7 +961,7 @@ $effect(() => {
961
961
  cursor: pointer;
962
962
  background: transparent;
963
963
  border: none;
964
- border-bottom: 1px solid var(--dt-border, rgba(0, 0, 0, 0.3));
964
+ border-bottom: 1px solid var(--dt-border, rgba(15, 15, 15, 0.3));
965
965
  box-sizing: border-box;
966
966
  display: flex;
967
967
  align-items: stretch;
@@ -974,7 +974,7 @@ $effect(() => {
974
974
  }
975
975
  .mb-event:hover,
976
976
  .mb-event:active {
977
- background: var(--dt-hover, rgba(0, 0, 0, 0.04));
977
+ background: var(--dt-hover, rgba(15, 15, 15, 0.04));
978
978
  }
979
979
  /* Short blocks keep their duration-proportional height, but get a 44px
980
980
  transparent hit-slop so taps still land. */
@@ -1001,29 +1001,29 @@ $effect(() => {
1001
1001
  laid over the paper, opaque, so the line runs beneath its text. */
1002
1002
  .mb-event.mb-event--current {
1003
1003
  background:
1004
- linear-gradient(var(--dt-accent-dim, rgba(37, 99, 235, 0.12)), var(--dt-accent-dim, rgba(37, 99, 235, 0.12))),
1004
+ linear-gradient(var(--dt-accent-dim, rgba(29, 79, 215, 0.12)), var(--dt-accent-dim, rgba(29, 79, 215, 0.12))),
1005
1005
  var(--dt-paper, none),
1006
- var(--dt-bg, #ffffff);
1006
+ var(--dt-bg, #efebe9);
1007
1007
  }
1008
1008
  .mb-event.mb-event--current:hover,
1009
1009
  .mb-event.mb-event--current:active {
1010
1010
  background:
1011
- linear-gradient(var(--dt-hover, rgba(0, 0, 0, 0.04)), var(--dt-hover, rgba(0, 0, 0, 0.04))),
1011
+ linear-gradient(var(--dt-hover, rgba(15, 15, 15, 0.04)), var(--dt-hover, rgba(15, 15, 15, 0.04))),
1012
1012
  var(--dt-paper, none),
1013
- var(--dt-bg, #ffffff);
1013
+ var(--dt-bg, #efebe9);
1014
1014
  }
1015
1015
  /* Printed states: a cancelled class is struck through; a tentative or
1016
1016
  limited one is set in grey with a dashed bar — never a bare opacity. */
1017
1017
  .mb-event--cancelled .mb-ev-title {
1018
1018
  text-decoration: line-through;
1019
- color: var(--dt-text-2, rgba(0, 0, 0, 0.54));
1019
+ color: var(--dt-text-2, rgba(15, 15, 15, 0.54));
1020
1020
  }
1021
1021
  .mb-event--cancelled .mb-ev-stripe {
1022
1022
  opacity: 0.45; /* decorative bar only */
1023
1023
  }
1024
1024
  .mb-event--tentative .mb-ev-title,
1025
1025
  .mb-event--full .mb-ev-title {
1026
- color: var(--dt-text-2, rgba(0, 0, 0, 0.54));
1026
+ color: var(--dt-text-2, rgba(15, 15, 15, 0.54));
1027
1027
  }
1028
1028
  .mb-event--tentative .mb-ev-stripe,
1029
1029
  .mb-event--limited .mb-ev-stripe {
@@ -1103,8 +1103,8 @@ $effect(() => {
1103
1103
  right: 4px;
1104
1104
  z-index: 40;
1105
1105
  border-radius: 0;
1106
- background: color-mix(in srgb, var(--dt-accent, #2563eb) 12%, transparent);
1107
- border: 1px dashed color-mix(in srgb, var(--dt-accent, #2563eb) 55%, transparent);
1106
+ background: color-mix(in srgb, var(--dt-accent, #1d4fd7) 12%, transparent);
1107
+ border: 1px dashed color-mix(in srgb, var(--dt-accent, #1d4fd7) 55%, transparent);
1108
1108
  display: flex;
1109
1109
  align-items: flex-start;
1110
1110
  overflow: hidden;
@@ -1113,7 +1113,7 @@ $effect(() => {
1113
1113
  .mb-create-ghost-time {
1114
1114
  font: 500 11px/1 var(--dt-sans, system-ui, sans-serif);
1115
1115
  font-variant-numeric: tabular-nums;
1116
- color: var(--dt-accent, #2563eb);
1116
+ color: var(--dt-accent, #1d4fd7);
1117
1117
  padding: 4px 8px;
1118
1118
  white-space: nowrap;
1119
1119
  }
@@ -1137,7 +1137,7 @@ $effect(() => {
1137
1137
 
1138
1138
  .mb-ev-title {
1139
1139
  font: 500 15px/1.25 var(--dt-sans, system-ui, sans-serif);
1140
- color: var(--dt-text, rgba(0, 0, 0, 0.87));
1140
+ color: var(--dt-text, rgba(15, 15, 15, 0.87));
1141
1141
  white-space: nowrap;
1142
1142
  overflow: hidden;
1143
1143
  text-overflow: ellipsis;
@@ -1146,12 +1146,12 @@ $effect(() => {
1146
1146
  .mb-ev-time {
1147
1147
  font: 400 14px/1 var(--dt-sans, system-ui, sans-serif);
1148
1148
  font-variant-numeric: tabular-nums;
1149
- color: var(--dt-text, rgba(0, 0, 0, 0.87));
1149
+ color: var(--dt-text, rgba(15, 15, 15, 0.87));
1150
1150
  }
1151
1151
 
1152
1152
  .mb-ev-sub {
1153
1153
  font: 400 12.5px/1.1 var(--dt-sans, system-ui, sans-serif);
1154
- color: var(--dt-text-2, rgba(0, 0, 0, 0.54));
1154
+ color: var(--dt-text-2, rgba(15, 15, 15, 0.54));
1155
1155
  white-space: nowrap;
1156
1156
  overflow: hidden;
1157
1157
  text-overflow: ellipsis;
@@ -1159,7 +1159,7 @@ $effect(() => {
1159
1159
 
1160
1160
  .mb-ev-loc {
1161
1161
  font: 400 12.5px/1 var(--dt-sans, system-ui, sans-serif);
1162
- color: var(--dt-text-2, rgba(0, 0, 0, 0.54));
1162
+ color: var(--dt-text-2, rgba(15, 15, 15, 0.54));
1163
1163
  white-space: nowrap;
1164
1164
  overflow: hidden;
1165
1165
  text-overflow: ellipsis;
@@ -1213,6 +1213,6 @@ $effect(() => {
1213
1213
  /* ─── Focus ──────────────────────────────────────── */
1214
1214
  .mb-event:focus-visible {
1215
1215
  outline: none;
1216
- box-shadow: 0 0 0 2px var(--dt-accent, #2563eb);
1216
+ box-shadow: 0 0 0 2px var(--dt-accent, #1d4fd7);
1217
1217
  }
1218
1218
  </style>