@nomideusz/svelte-calendar 1.2.0 → 1.4.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.
@@ -135,14 +135,15 @@ const hiddenDoneCount = $derived(showAllDone ? 0 : Math.max(0, dayCat.past.lengt
135
135
  <div class="ag-body" role="group" aria-label={L.todaysLineup}>
136
136
  <!-- ─── In-view date header (only when the chrome doesn't label the day) ─── -->
137
137
  {#if !hideDayHead}
138
- <div class="ag-day-head">
138
+ <div class="ag-day-head" class:ag-day-head--today={!equalDays && isToday}>
139
+ <span class="ag-day-head-num">{dayNum(dayMs)}</span>
139
140
  {#if !equalDays && isToday}
140
141
  <span class="ag-day-head-badge">{L.today}</span>
141
142
  {:else if !equalDays && isTomorrow}
142
143
  <span class="ag-day-head-badge ag-day-head-badge--muted">{L.tomorrow}</span>
143
144
  {/if}
144
145
  <span class="ag-day-head-name">{weekdayLong(dayMs, locale)}</span>
145
- <span class="ag-day-head-date">{monthLong(dayMs, locale)} {dayNum(dayMs)}</span>
146
+ <span class="ag-day-head-date">{monthLong(dayMs, locale)}</span>
146
147
  </div>
147
148
  {/if}
148
149
  {#if allDayBanner.length > 0}
@@ -183,7 +184,7 @@ const hiddenDoneCount = $derived(showAllDone ? 0 : Math.max(0, dayCat.past.lengt
183
184
  class:ag-compact-row--selected={selectedEventId === ev.id}
184
185
  class:ag-compact-row--cancelled={ev.status === 'cancelled'}
185
186
  class:ag-compact-row--tentative={ev.status === 'tentative'}
186
- style:--ev-color={ev.color || 'var(--dt-accent)'}
187
+ style:--ev-color={ev.color || 'var(--dt-event, var(--dt-accent))'}
187
188
  aria-label="{ev.title}{statusText(ev)}, {fmt(ev.start)}, {duration(ev)}"
188
189
  onclick={() => handleClick(ev)}
189
190
  onpointerenter={() => oneventhover?.(ev)}
@@ -220,7 +221,7 @@ const hiddenDoneCount = $derived(showAllDone ? 0 : Math.max(0, dayCat.past.lengt
220
221
  type="button"
221
222
  class="ag-q-now"
222
223
  class:ag-q-now--selected={selectedEventId === ev.id}
223
- style:--ev-color={ev.color || 'var(--dt-accent)'}
224
+ style:--ev-color={ev.color || 'var(--dt-event, var(--dt-accent))'}
224
225
  aria-label="{ev.title}, {L.happeningNow}, {L.percentComplete(Math.round(prog(ev) * 100))}"
225
226
  onclick={() => handleClick(ev)}
226
227
  onpointerenter={() => oneventhover?.(ev)}
@@ -251,7 +252,7 @@ const hiddenDoneCount = $derived(showAllDone ? 0 : Math.max(0, dayCat.past.lengt
251
252
  aria-label="{ev.title}, {L.completed}, {fmt(ev.start)}"
252
253
  onclick={() => handleClick(ev)}
253
254
  >
254
- <span class="ag-q-done-check">✓</span>
255
+ <span class="ag-q-done-check" aria-hidden="true">✓</span>
255
256
  <span class="ag-q-done-title">{ev.title}</span>
256
257
  </button>
257
258
  {/each}
@@ -278,7 +279,7 @@ const hiddenDoneCount = $derived(showAllDone ? 0 : Math.max(0, dayCat.past.lengt
278
279
  type="button"
279
280
  class="ag-compact-row ag-compact-row--queue"
280
281
  class:ag-compact-row--selected={selectedEventId === ev.id}
281
- style:--ev-color={ev.color || 'var(--dt-accent)'}
282
+ style:--ev-color={ev.color || 'var(--dt-event, var(--dt-accent))'}
282
283
  aria-label="{ev.title}{statusText(ev)}, {fmt(ev.start)}, {duration(ev)}"
283
284
  onclick={() => handleClick(ev)}
284
285
  onpointerenter={() => oneventhover?.(ev)}
@@ -299,7 +300,7 @@ const hiddenDoneCount = $derived(showAllDone ? 0 : Math.max(0, dayCat.past.lengt
299
300
  class="ag-card ag-card--q"
300
301
  class:ag-card--hero={i === 0}
301
302
  class:ag-card--selected={selectedEventId === ev.id}
302
- style:--ev-color={ev.color || 'var(--dt-accent)'}
303
+ style:--ev-color={ev.color || 'var(--dt-event, var(--dt-accent))'}
303
304
  aria-label="{ev.title}{statusText(ev)}, {fmt(ev.start)}, {duration(ev)}"
304
305
  onclick={() => handleClick(ev)}
305
306
  onpointerenter={() => oneventhover?.(ev)}
@@ -310,13 +311,13 @@ const hiddenDoneCount = $derived(showAllDone ? 0 : Math.max(0, dayCat.past.lengt
310
311
  <span class="ag-card-title">{ev.title}</span>
311
312
  <span class="ag-card-eta">{eta(ev.start.getTime())}</span>
312
313
  </div>
313
- {#if ev.subtitle}
314
- <span class="ag-card-sub">{ev.subtitle}</span>
315
- {/if}
316
314
  <div class="ag-card-meta">
317
315
  {fmt(ev.start)} – {fmt(ev.end)}
318
316
  <span class="ag-card-dur">{duration(ev)}</span>
319
317
  </div>
318
+ {#if ev.subtitle}
319
+ <span class="ag-card-sub">{ev.subtitle}</span>
320
+ {/if}
320
321
  {#if ev.tags?.length}
321
322
  <div class="ag-card-tags">
322
323
  {#each ev.tags as tag}
@@ -346,14 +347,15 @@ const hiddenDoneCount = $derived(showAllDone ? 0 : Math.max(0, dayCat.past.lengt
346
347
  type="button"
347
348
  class="ag-log-row"
348
349
  class:ag-log-row--selected={selectedEventId === ev.id}
349
- style:--ev-color={ev.color || 'var(--dt-accent)'}
350
+ class:ag-log-row--cancelled={ev.status === 'cancelled'}
351
+ style:--ev-color={ev.color || 'var(--dt-event, var(--dt-accent))'}
350
352
  aria-label="{ev.title}{statusText(ev)}, {fmt(ev.start)} – {fmt(ev.end)}"
351
353
  onclick={() => handleClick(ev)}
352
354
  onpointerenter={() => oneventhover?.(ev)}
353
355
  >
354
- <span class="ag-log-check">✓</span>
356
+ <span class="ag-log-check" aria-hidden="true">✓</span>
355
357
  <span class="ag-log-time">{fmt(ev.start)}</span>
356
- <span class="ag-log-dot" style:background={ev.color || 'var(--dt-accent)'}></span>
358
+ <span class="ag-log-dot" style:background={ev.color || 'var(--dt-event, var(--dt-accent))'}></span>
357
359
  <span class="ag-log-title">{ev.title}</span>
358
360
  <span class="ag-log-dur">{duration(ev)}</span>
359
361
  </button>
@@ -379,7 +381,7 @@ const hiddenDoneCount = $derived(showAllDone ? 0 : Math.max(0, dayCat.past.lengt
379
381
  class:ag-card--tentative={ev.status === 'tentative'}
380
382
  class:ag-card--full={ev.status === 'full'}
381
383
  class:ag-card--limited={ev.status === 'limited'}
382
- style:--ev-color={ev.color || 'var(--dt-accent)'}
384
+ style:--ev-color={ev.color || 'var(--dt-event, var(--dt-accent))'}
383
385
  aria-label="{ev.title}{statusText(ev)}, {fmt(ev.start)} – {fmt(ev.end)}, {duration(ev)}"
384
386
  onclick={() => handleClick(ev)}
385
387
  onpointerenter={() => oneventhover?.(ev)}
@@ -390,16 +392,16 @@ const hiddenDoneCount = $derived(showAllDone ? 0 : Math.max(0, dayCat.past.lengt
390
392
  <span class="ag-card-order">{i + 1}</span>
391
393
  <span class="ag-card-title">{ev.title}</span>
392
394
  </div>
395
+ <div class="ag-card-meta">
396
+ {fmt(ev.start)} – {fmt(ev.end)}
397
+ <span class="ag-card-dur">{duration(ev)}</span>
398
+ </div>
393
399
  {#if ev.subtitle}
394
400
  <span class="ag-card-sub">{ev.subtitle}</span>
395
401
  {/if}
396
402
  {#if ev.location}
397
403
  <span class="ag-card-loc">{ev.location}</span>
398
404
  {/if}
399
- <div class="ag-card-meta">
400
- {fmt(ev.start)} – {fmt(ev.end)}
401
- <span class="ag-card-dur">{duration(ev)}</span>
402
- </div>
403
405
  {#if ev.tags?.length}
404
406
  <div class="ag-card-tags">
405
407
  {#each ev.tags as tag}
@@ -429,7 +431,7 @@ const hiddenDoneCount = $derived(showAllDone ? 0 : Math.max(0, dayCat.past.lengt
429
431
  width: 100%;
430
432
  min-width: 0;
431
433
  box-sizing: border-box;
432
- color: var(--dt-text, rgba(0, 0, 0, 0.87));
434
+ color: var(--dt-text, rgba(15, 15, 15, 0.87));
433
435
  font-family: var(--dt-sans, system-ui, sans-serif);
434
436
  }
435
437
 
@@ -461,8 +463,8 @@ const hiddenDoneCount = $derived(showAllDone ? 0 : Math.max(0, dayCat.past.lengt
461
463
  135deg,
462
464
  transparent,
463
465
  transparent 6px,
464
- color-mix(in srgb, var(--dt-text, rgba(0, 0, 0, 0.87)) 4%, transparent) 6px,
465
- color-mix(in srgb, var(--dt-text, rgba(0, 0, 0, 0.87)) 4%, transparent) 12px
466
+ color-mix(in srgb, var(--dt-text, rgba(15, 15, 15, 0.87)) 4%, transparent) 6px,
467
+ color-mix(in srgb, var(--dt-text, rgba(15, 15, 15, 0.87)) 4%, transparent) 12px
466
468
  );
467
469
  }
468
470
 
@@ -489,27 +491,34 @@ const hiddenDoneCount = $derived(showAllDone ? 0 : Math.max(0, dayCat.past.lengt
489
491
  padding: 0 16px 6px;
490
492
  flex-shrink: 0;
491
493
  }
492
- .ag-day-head-badge {
493
- font-size: 10px;
494
- font-weight: 500;
494
+ /* The planner's header type: the day number is the typography (40/400,
495
+ narrowed), the weekday a tracked 12/500 label; today takes the accent. */
496
+ .ag-day-head-num {
497
+ font: 400 40px/1 var(--dt-sans, system-ui, sans-serif);
498
+ font-stretch: 90%;
499
+ letter-spacing: -0.02em;
500
+ font-variant-numeric: tabular-nums;
501
+ color: var(--dt-text, rgba(15, 15, 15, 0.87));
502
+ margin-inline-end: 4px;
503
+ }
504
+ .ag-day-head-badge,
505
+ .ag-day-head-name {
506
+ font: 500 12px/1 var(--dt-sans, system-ui, sans-serif);
495
507
  letter-spacing: 0.08em;
496
508
  text-transform: uppercase;
497
- color: var(--dt-accent, #2563eb);
509
+ color: var(--dt-text-2, rgba(15, 15, 15, 0.66));
498
510
  }
499
- .ag-day-head-badge--muted {
500
- color: var(--dt-text-2, rgba(0, 0, 0, 0.54));
511
+ .ag-day-head--today .ag-day-head-num,
512
+ .ag-day-head--today .ag-day-head-name,
513
+ .ag-day-head-badge {
514
+ color: var(--dt-accent, #1d4fd7);
501
515
  }
502
- .ag-day-head-name {
503
- font-size: 13px;
504
- font-weight: 600;
505
- line-height: 1.2;
516
+ .ag-day-head .ag-day-head-badge--muted {
517
+ color: var(--dt-text-2, rgba(15, 15, 15, 0.66));
506
518
  }
507
519
  .ag-day-head-date {
508
- font-size: 11px;
509
- font-family: var(--dt-sans, system-ui, sans-serif);
510
- font-variant-numeric: tabular-nums;
511
- color: var(--dt-text-3, rgba(0, 0, 0, 0.38));
512
- line-height: 1.2;
520
+ font: 400 12.5px/1 var(--dt-sans, system-ui, sans-serif);
521
+ color: var(--dt-text-2, rgba(15, 15, 15, 0.66));
513
522
  }
514
523
  .ag--auto .ag-body { overflow-y: visible; min-height: auto; }
515
524
  .ag-body::-webkit-scrollbar {
@@ -526,13 +535,13 @@ const hiddenDoneCount = $derived(showAllDone ? 0 : Math.max(0, dayCat.past.lengt
526
535
  align-items: center;
527
536
  gap: 8px;
528
537
  padding: 6px 16px;
529
- border-bottom: 1px solid var(--dt-border, rgba(0, 0, 0, 0.08));
538
+ border-bottom: 1px solid var(--dt-border, rgba(15, 15, 15, 0.08));
530
539
  }
531
540
  .ag-allday-label {
532
- font: 600 10px/1 var(--dt-sans, system-ui, sans-serif);
541
+ font: 500 12px/1 var(--dt-sans, system-ui, sans-serif);
533
542
  text-transform: uppercase;
534
- letter-spacing: 0.06em;
535
- color: var(--dt-text-2, rgba(0, 0, 0, 0.54));
543
+ letter-spacing: 0.08em;
544
+ color: var(--dt-text-2, rgba(15, 15, 15, 0.66));
536
545
  white-space: nowrap;
537
546
  flex-shrink: 0;
538
547
  }
@@ -546,7 +555,7 @@ const hiddenDoneCount = $derived(showAllDone ? 0 : Math.max(0, dayCat.past.lengt
546
555
  display: flex;
547
556
  align-items: center;
548
557
  gap: 5px;
549
- padding: 3px 10px;
558
+ padding: 4px 10px;
550
559
  border-radius: 0;
551
560
  border: none;
552
561
  background: var(--ev-color);
@@ -559,7 +568,7 @@ const hiddenDoneCount = $derived(showAllDone ? 0 : Math.max(0, dayCat.past.lengt
559
568
  }
560
569
  .ag-allday-chip:focus-visible {
561
570
  outline: none;
562
- box-shadow: inset 0 0 0 2px var(--dt-btn-text, #fff), 0 0 0 2px var(--dt-accent, #2563eb);
571
+ box-shadow: inset 0 0 0 2px var(--dt-btn-text, #fff), 0 0 0 2px var(--dt-accent, #1d4fd7);
563
572
  }
564
573
  .ag-allday-chip--selected {
565
574
  box-shadow: inset 0 0 0 2px var(--dt-btn-text, #fff);
@@ -568,7 +577,7 @@ const hiddenDoneCount = $derived(showAllDone ? 0 : Math.max(0, dayCat.past.lengt
568
577
  display: none;
569
578
  }
570
579
  .ag-allday-title {
571
- font: 500 0.75rem/1.2 var(--dt-sans, system-ui, sans-serif);
580
+ font: 500 13.5px/1.2 var(--dt-sans, system-ui, sans-serif);
572
581
  color: inherit;
573
582
  white-space: nowrap;
574
583
  }
@@ -583,7 +592,7 @@ const hiddenDoneCount = $derived(showAllDone ? 0 : Math.max(0, dayCat.past.lengt
583
592
  border-radius: 0;
584
593
  background: transparent;
585
594
  border: none;
586
- border-bottom: 1px solid var(--dt-border, rgba(0, 0, 0, 0.3));
595
+ border-bottom: 1px solid var(--dt-border, rgba(15, 15, 15, 0.3));
587
596
  overflow: hidden;
588
597
  cursor: pointer;
589
598
  transition: background 150ms, box-shadow 150ms;
@@ -599,18 +608,18 @@ const hiddenDoneCount = $derived(showAllDone ? 0 : Math.max(0, dayCat.past.lengt
599
608
  }
600
609
  .ag-card:hover,
601
610
  .ag-card:active {
602
- background: var(--dt-hover, rgba(0, 0, 0, 0.04));
611
+ background: var(--dt-hover, rgba(15, 15, 15, 0.04));
603
612
  }
604
613
  .ag-card:focus-visible {
605
614
  outline: none;
606
- box-shadow: 0 0 0 2px var(--dt-accent, #2563eb);
615
+ box-shadow: 0 0 0 2px var(--dt-accent, #1d4fd7);
607
616
  }
608
617
  .ag-card--selected {
609
618
  box-shadow: inset 0 0 0 1px var(--ev-color);
610
619
  }
611
620
  .ag-card--cancelled .ag-card-title {
612
621
  text-decoration: line-through;
613
- color: var(--dt-text-2, rgba(0, 0, 0, 0.54));
622
+ color: var(--dt-text-2, rgba(15, 15, 15, 0.54));
614
623
  }
615
624
  .ag-card--cancelled::before,
616
625
  .ag-card--full::before {
@@ -619,71 +628,58 @@ const hiddenDoneCount = $derived(showAllDone ? 0 : Math.max(0, dayCat.past.lengt
619
628
  .ag-card--tentative .ag-card-title,
620
629
  .ag-card--limited .ag-card-title,
621
630
  .ag-card--full .ag-card-title {
622
- color: var(--dt-text-2, rgba(0, 0, 0, 0.54));
631
+ color: var(--dt-text-2, rgba(15, 15, 15, 0.54));
623
632
  }
624
633
  .ag-card--tentative::before,
625
634
  .ag-card--limited::before {
626
635
  background: repeating-linear-gradient(180deg, var(--ev-color) 0 4px, transparent 4px 7px);
627
636
  }
637
+ /* Planner scale: title 15/500, time 14 tabular in ink, meta 12.5 in ink-2.
638
+ The body keeps a reading measure so meta never drifts across a wide row. */
628
639
  .ag-card-body {
629
640
  padding: 10px 12px 10px 15px;
630
641
  display: flex;
631
642
  flex-direction: column;
632
- gap: 4px;
643
+ gap: 3px;
633
644
  min-width: 0;
645
+ max-width: 44rem;
634
646
  flex: 1;
635
647
  }
636
648
  .ag-card-top {
637
649
  display: flex;
638
- justify-content: space-between;
639
- align-items: flex-start;
640
- gap: 8px;
650
+ align-items: baseline;
651
+ gap: 12px;
641
652
  min-width: 0;
642
653
  }
643
654
  .ag-card-title {
644
- font-size: 13px;
645
- font-weight: 500;
646
- color: var(--dt-text, rgba(0, 0, 0, 0.87));
647
- line-height: 1.3;
655
+ font: 500 15px/1.25 var(--dt-sans, system-ui, sans-serif);
656
+ color: var(--dt-text, rgba(15, 15, 15, 0.87));
648
657
  word-break: break-word;
649
- flex: 1;
650
658
  min-width: 0;
651
659
  }
652
660
  .ag-card-meta {
653
- font-size: 11px;
654
- color: var(--dt-text-2, rgba(0, 0, 0, 0.54));
655
- font-family: var(--dt-sans, system-ui, sans-serif);
661
+ font: 400 14px/1.2 var(--dt-sans, system-ui, sans-serif);
656
662
  font-variant-numeric: tabular-nums;
657
- line-height: 1;
663
+ color: var(--dt-text, rgba(15, 15, 15, 0.87));
658
664
  }
659
- .ag-card-dur {
660
- margin-left: 6px;
661
- color: var(--dt-text-3, rgba(0, 0, 0, 0.38));
662
- }
663
- .ag-card-sub {
664
- font-size: 11px;
665
- color: var(--dt-text-2, rgba(0, 0, 0, 0.54));
666
- line-height: 1;
665
+ .ag-card-dur,
666
+ .ag-card-eta,
667
+ .ag-card-sub,
668
+ .ag-card-loc,
669
+ .ag-card-tag {
670
+ font: 400 12.5px/1.2 var(--dt-sans, system-ui, sans-serif);
671
+ color: var(--dt-text-2, rgba(15, 15, 15, 0.66));
667
672
  }
668
- .ag-card-loc {
669
- font-size: 10px;
670
- color: var(--dt-text-3, rgba(0, 0, 0, 0.38));
671
- line-height: 1;
673
+ .ag-card-dur {
674
+ margin-left: 8px;
672
675
  }
673
676
  .ag-card-tags {
674
677
  display: flex;
675
- gap: 4px;
678
+ column-gap: 10px;
679
+ row-gap: 2px;
676
680
  flex-wrap: wrap;
677
681
  }
678
682
  .ag-card-tag {
679
- font: 500 10.5px / 1 var(--dt-sans, system-ui, sans-serif);
680
- text-transform: uppercase;
681
- letter-spacing: 0.04em;
682
- color: var(--dt-text-2, rgba(0, 0, 0, 0.54));
683
- background: transparent;
684
- border: 1px solid var(--dt-border-day, rgba(0, 0, 0, 0.6));
685
- padding: 2px 5px;
686
- border-radius: 0;
687
683
  white-space: nowrap;
688
684
  }
689
685
 
@@ -694,67 +690,39 @@ const hiddenDoneCount = $derived(showAllDone ? 0 : Math.max(0, dayCat.past.lengt
694
690
  .ag-compact-row--queue {
695
691
  margin: 0;
696
692
  }
697
-
698
- .ag-card--q .ag-card-body {
699
- gap: 3px;
700
- }
701
- .ag-card--q .ag-card-tags {
702
- margin-top: 2px;
703
- }
704
693
  .ag-card-eta {
705
- font-size: 11px;
706
- font-weight: 500;
707
- letter-spacing: 0.04em;
708
- color: var(--dt-text-2, rgba(0, 0, 0, 0.54));
709
694
  flex-shrink: 0;
710
695
  white-space: nowrap;
696
+ font-variant-numeric: tabular-nums;
711
697
  }
712
- .ag-card--hero .ag-card-title {
713
- font-size: 16px;
714
- font-weight: 500;
715
- }
698
+ /* The next one up: its countdown in ink. Size stays on the scale — the
699
+ happening-now item is the largest thing in the queue. */
716
700
  .ag-card--hero .ag-card-eta {
717
- font-size: 11px;
718
- color: var(--dt-text, rgba(0, 0, 0, 0.87));
719
- }
720
- .ag-card--hero .ag-card-body {
721
- padding: 14px 16px;
701
+ color: var(--dt-text, rgba(15, 15, 15, 0.87));
722
702
  }
723
703
 
724
704
  /* ── Plan card variant ── */
725
705
 
726
706
  .ag-card--plan .ag-card-body {
727
707
  padding: 12px 14px;
728
- gap: 3px;
729
- }
730
- .ag-card--plan .ag-card-top {
731
- align-items: baseline;
732
708
  }
733
709
  .ag-card-order {
734
- font-size: 10px;
735
- font-weight: 700;
736
- color: var(--dt-text-3, rgba(0, 0, 0, 0.38));
737
- font-family: var(--dt-sans, system-ui, sans-serif);
710
+ font: 400 14px/1.25 var(--dt-sans, system-ui, sans-serif);
738
711
  font-variant-numeric: tabular-nums;
712
+ color: var(--dt-text-2, rgba(15, 15, 15, 0.66));
713
+ min-width: 18px;
739
714
  flex-shrink: 0;
740
715
  }
741
- .ag-card--plan .ag-card-title {
742
- font-size: 14px;
743
- }
744
- .ag-card--first .ag-card-title {
745
- font-size: 16px;
746
- font-weight: 500;
716
+ .ag-card--plan .ag-card-top {
717
+ gap: 10px;
747
718
  }
748
719
  /* Everything under the title aligns past the order number — the
749
720
  subtitle, location, time and tags share one left edge. */
750
721
  .ag-card--plan .ag-card-sub,
751
722
  .ag-card--plan .ag-card-loc,
752
- .ag-card--plan .ag-card-meta {
753
- padding-left: 22px;
754
- }
723
+ .ag-card--plan .ag-card-meta,
755
724
  .ag-card--plan .ag-card-tags {
756
- padding-left: 22px;
757
- margin-top: 2px;
725
+ padding-left: 28px;
758
726
  }
759
727
 
760
728
  /* ═══ The Queue: 2-column grid ═══ */
@@ -766,8 +734,10 @@ const hiddenDoneCount = $derived(showAllDone ? 0 : Math.max(0, dayCat.past.lengt
766
734
  padding: 8px 0 10px;
767
735
  min-height: 0;
768
736
  }
769
- /* Mobile: stack queue columns vertically — "Up next" (hero) first,
770
- Now/Done status column second */
737
+ /* Mobile: one column in reading order — what's happening now first, then
738
+ "Up next", then the finished ones. The status column dissolves
739
+ (display: contents) so its Now and Done parts can sit either side of
740
+ the queue. */
771
741
  /* Horizontal swipes are ours (day navigation); the browser keeps
772
742
  vertical scrolling and pinch-zoom. */
773
743
  .ag--mobile,
@@ -777,114 +747,51 @@ const hiddenDoneCount = $derived(showAllDone ? 0 : Math.max(0, dayCat.past.lengt
777
747
  .ag--mobile .ag-q {
778
748
  grid-template-columns: 1fr;
779
749
  min-height: auto;
750
+ padding-inline: 16px;
780
751
  }
781
752
  .ag--mobile .ag-q-status {
782
- order: 2;
783
- border-right: none;
784
- border-top: 1px solid var(--dt-border, rgba(0, 0, 0, 0.08));
785
- padding-top: 10px;
786
- margin-top: 8px;
787
- overflow-y: visible;
753
+ display: contents;
788
754
  }
789
755
  .ag--mobile .ag-q-queue {
790
- order: 1;
756
+ order: 2;
791
757
  overflow-y: visible;
792
- padding-bottom: 16px;
758
+ padding: 12px 0 16px;
793
759
  }
794
- .ag--mobile .ag-card-meta {
795
- line-height: 1.3;
796
- padding-bottom: 1px;
760
+ .ag--mobile .ag-q-done-section {
761
+ order: 3;
797
762
  }
798
- /* Mobile: larger touch targets */
763
+ /* Mobile: larger touch targets; type is already on the planner scale. */
799
764
  .ag--mobile .ag-card-body {
800
765
  padding: 14px 16px;
801
766
  }
802
- .ag--mobile .ag-card-title {
803
- font-size: 15px;
804
- }
805
- .ag--mobile .ag-card--hero .ag-card-title {
806
- font-size: 18px;
807
- }
808
- .ag--mobile .ag-card--hero .ag-card-body {
809
- padding: 16px 18px;
810
- }
811
767
  .ag--mobile .ag-log-row {
812
768
  padding: 12px 0;
813
769
  }
814
- .ag--mobile .ag-card--plan .ag-card-body {
815
- padding: 14px 16px;
816
- }
817
- .ag--mobile .ag-card--plan .ag-card-title {
818
- font-size: 15px;
819
- }
820
- /* Mobile: Now/Done status subtree type scale */
821
- .ag--mobile .ag-q-label {
822
- font-size: 11px;
823
- }
824
- .ag--mobile .ag-q-clock {
825
- font-size: 12px;
826
- }
827
- .ag--mobile .ag-q-now-title {
828
- font-size: 16px;
829
- }
830
- .ag--mobile .ag-q-now-sub {
831
- font-size: 13px;
832
- }
833
- .ag--mobile .ag-q-now-time {
834
- font-size: 12px;
835
- }
836
- .ag--mobile .ag-q-free-label {
837
- font-size: 13px;
838
- }
839
- .ag--mobile .ag-q-done-title {
840
- font-size: 13px;
841
- }
842
- .ag--mobile .ag-q-done-check {
843
- font-size: 12px;
844
- }
845
- .ag--mobile .ag-card-eta {
846
- font-size: 12px;
847
- }
848
- .ag--mobile .ag-card-sub {
849
- font-size: 12px;
850
- }
851
- .ag--mobile .ag-card-loc {
852
- font-size: 12px;
853
- }
854
- .ag--mobile .ag-card-tag {
855
- font-size: 11px;
856
- }
857
- .ag--mobile .ag-log-time,
858
- .ag--mobile .ag-log-dur {
859
- font-size: 12px;
860
- }
861
- .ag--mobile .ag-log-title {
862
- font-size: 15px;
770
+ .ag--mobile .ag-q-done-item {
771
+ padding: 8px 0;
863
772
  }
773
+ /* Section labels set like the planner's weekday: 12/500, tracked, ink-2. */
864
774
  .ag-q-label {
865
- font-size: 10px;
866
- font-weight: 600;
867
- letter-spacing: 0.14em;
775
+ font: 500 12px/1.2 var(--dt-sans, system-ui, sans-serif);
776
+ letter-spacing: 0.08em;
868
777
  text-transform: uppercase;
869
- color: var(--dt-text-3, rgba(0, 0, 0, 0.38));
778
+ color: var(--dt-text-2, rgba(15, 15, 15, 0.66));
870
779
  margin-bottom: 8px;
871
780
  padding: 0 12px;
872
- font-family: var(--dt-sans, system-ui, sans-serif);
873
781
  }
874
782
  .ag-q-empty {
875
783
  display: flex;
876
784
  align-items: center;
877
785
  justify-content: center;
878
786
  flex: 1;
879
- font-size: 13px;
880
- font-weight: 300;
881
- color: var(--dt-text-3, rgba(0, 0, 0, 0.38));
787
+ font-size: 14px;
788
+ color: var(--dt-text-2, rgba(15, 15, 15, 0.66));
882
789
  }
883
790
 
884
791
  /* ── NOW column (includes Done above) ── */
885
792
  .ag-q-status {
886
793
  padding: 0 10px 0 14px;
887
- border-right: 1px solid var(--dt-border, rgba(0, 0, 0, 0.08));
794
+ border-right: 1px solid var(--dt-border, rgba(15, 15, 15, 0.08));
888
795
  display: flex;
889
796
  flex-direction: column;
890
797
  overflow-y: auto;
@@ -902,47 +809,49 @@ const hiddenDoneCount = $derived(showAllDone ? 0 : Math.max(0, dayCat.past.lengt
902
809
  background: none;
903
810
  font-family: var(--dt-sans, system-ui, sans-serif);
904
811
  font-variant-numeric: tabular-nums;
905
- font-size: 11px;
906
- color: var(--dt-text-3);
812
+ font-size: 12.5px;
813
+ color: var(--dt-text-2, rgba(15, 15, 15, 0.66));
907
814
  cursor: pointer;
908
815
  }
909
816
  .ag-q-done-toggle:hover,
910
817
  .ag-q-done-toggle:active {
911
- color: var(--dt-text);
912
- border-color: var(--dt-text-3);
818
+ color: var(--dt-text, rgba(15, 15, 15, 0.87));
819
+ border-color: var(--dt-border-day, rgba(15, 15, 15, 0.6));
913
820
  }
914
821
  .ag-q-done-toggle:focus-visible {
915
822
  outline: none;
916
- box-shadow: 0 0 0 2px var(--dt-accent, #2563eb);
823
+ box-shadow: 0 0 0 2px var(--dt-accent, #1d4fd7);
917
824
  }
918
825
  .ag-q-now-sub {
919
- font-size: 12px;
920
- color: var(--dt-text-2);
921
- margin-top: 1px;
826
+ font: 400 12.5px/1.2 var(--dt-sans, system-ui, sans-serif);
827
+ color: var(--dt-text-2, rgba(15, 15, 15, 0.66));
828
+ margin-bottom: 4px;
922
829
  }
923
830
  .ag-q-done-section {
924
831
  margin-top: 12px;
925
832
  padding-top: 10px;
926
- border-top: 1px solid var(--dt-border, rgba(0, 0, 0, 0.08));
833
+ border-top: 1px solid var(--dt-border, rgba(15, 15, 15, 0.08));
927
834
  }
928
835
  .ag-q-clock {
929
- font-size: 11px;
930
- font-weight: 600;
931
- font-family: var(--dt-sans, system-ui, sans-serif);
836
+ font: 500 12px/1.2 var(--dt-sans, system-ui, sans-serif);
837
+ letter-spacing: 0;
932
838
  font-variant-numeric: tabular-nums;
933
- color: var(--dt-accent, #2563eb);
839
+ color: var(--dt-accent, #1d4fd7);
934
840
  margin-left: 4px;
935
841
  }
842
+ /* The one happening now is the most prominent thing on the day: the
843
+ largest title in the view and the 12% accent wash the system reserves
844
+ for the current event. */
936
845
  .ag-q-now {
937
846
  position: relative;
938
847
  display: block;
939
848
  width: 100%;
940
- padding: 8px 10px 8px 13px;
849
+ padding: 12px 12px 12px 15px;
941
850
  margin-bottom: 8px;
942
851
  border-radius: 0;
943
- background: transparent;
852
+ background: var(--dt-accent-dim, color-mix(in srgb, var(--dt-accent, #1d4fd7) 12%, transparent));
944
853
  border: none;
945
- border-bottom: 1px solid var(--dt-border, rgba(0, 0, 0, 0.3));
854
+ border-bottom: 1px solid var(--dt-border, rgba(15, 15, 15, 0.3));
946
855
  cursor: pointer;
947
856
  transition: background 150ms, box-shadow 150ms;
948
857
  }
@@ -957,21 +866,23 @@ const hiddenDoneCount = $derived(showAllDone ? 0 : Math.max(0, dayCat.past.lengt
957
866
  }
958
867
  .ag-q-now:hover,
959
868
  .ag-q-now:active {
960
- background: var(--dt-hover, rgba(0, 0, 0, 0.04));
869
+ background:
870
+ linear-gradient(var(--dt-hover, rgba(15, 15, 15, 0.04)), var(--dt-hover, rgba(15, 15, 15, 0.04))),
871
+ var(--dt-accent-dim, color-mix(in srgb, var(--dt-accent, #1d4fd7) 12%, transparent));
961
872
  }
962
873
  .ag-q-now:focus-visible {
963
874
  outline: none;
964
- box-shadow: 0 0 0 2px var(--dt-accent, #2563eb);
875
+ box-shadow: 0 0 0 2px var(--dt-accent, #1d4fd7);
965
876
  }
966
877
  .ag-q-now--selected {
967
878
  box-shadow: inset 0 0 0 1px var(--ev-color, var(--dt-accent));
968
879
  }
969
880
  .ag-q-now-dot {
970
- width: 6px;
971
- height: 6px;
881
+ width: 8px;
882
+ height: 8px;
972
883
  border-radius: 50%;
973
- background: var(--ev-color, var(--dt-accent, #2563eb));
974
- margin-bottom: 6px;
884
+ background: var(--ev-color, var(--dt-accent, #1d4fd7));
885
+ margin-bottom: 8px;
975
886
  animation: ag-pulse 2.5s ease-in-out infinite;
976
887
  }
977
888
  @keyframes ag-pulse {
@@ -987,35 +898,32 @@ const hiddenDoneCount = $derived(showAllDone ? 0 : Math.max(0, dayCat.past.lengt
987
898
  }
988
899
  }
989
900
  .ag-q-now-title {
990
- font-size: 12px;
991
- font-weight: 500;
992
- line-height: 1.25;
993
- color: var(--dt-text, rgba(0, 0, 0, 0.87));
901
+ font: 500 20px/1.2 var(--dt-sans, system-ui, sans-serif);
902
+ color: var(--dt-text, rgba(15, 15, 15, 0.87));
994
903
  display: -webkit-box;
995
904
  -webkit-box-orient: vertical;
996
905
  -webkit-line-clamp: 2;
997
906
  line-clamp: 2;
998
907
  overflow: hidden;
999
908
  word-break: break-word;
1000
- margin-bottom: 3px;
909
+ margin-bottom: 4px;
1001
910
  }
1002
911
  .ag-q-now-time {
1003
- font-size: 11px;
1004
- font-family: var(--dt-sans, system-ui, sans-serif);
912
+ font: 400 14px/1.2 var(--dt-sans, system-ui, sans-serif);
1005
913
  font-variant-numeric: tabular-nums;
1006
- color: var(--dt-text-3, rgba(0, 0, 0, 0.38));
1007
- margin-bottom: 6px;
914
+ color: var(--dt-text, rgba(15, 15, 15, 0.87));
915
+ margin-bottom: 10px;
1008
916
  }
1009
917
  .ag-q-now-track {
1010
918
  height: 2px;
1011
- background: var(--dt-border, rgba(0, 0, 0, 0.08));
919
+ background: var(--dt-border, rgba(15, 15, 15, 0.08));
1012
920
  border-radius: 0;
1013
921
  overflow: hidden;
1014
922
  }
1015
923
  .ag-q-now-fill {
1016
924
  height: 100%;
1017
925
  width: 100%;
1018
- background: var(--ev-color, var(--dt-accent, #2563eb));
926
+ background: var(--ev-color, var(--dt-accent, #1d4fd7));
1019
927
  border-radius: 0;
1020
928
  transform-origin: left;
1021
929
  transition: transform 1s linear;
@@ -1025,9 +933,8 @@ const hiddenDoneCount = $derived(showAllDone ? 0 : Math.max(0, dayCat.past.lengt
1025
933
  margin-right: 10px;
1026
934
  }
1027
935
  .ag-q-free-label {
1028
- font-size: 12px;
1029
- font-weight: 300;
1030
- color: var(--dt-text-3, rgba(0, 0, 0, 0.38));
936
+ font: 400 15px/1.25 var(--dt-sans, system-ui, sans-serif);
937
+ color: var(--dt-text-2, rgba(15, 15, 15, 0.66));
1031
938
  margin-bottom: 2px;
1032
939
  }
1033
940
 
@@ -1047,36 +954,34 @@ const hiddenDoneCount = $derived(showAllDone ? 0 : Math.max(0, dayCat.past.lengt
1047
954
 
1048
955
  .ag-q-done-item {
1049
956
  display: flex;
1050
- align-items: center;
1051
- gap: 5px;
1052
- padding: 3px 0;
957
+ align-items: baseline;
958
+ gap: 8px;
959
+ padding: 4px 0;
1053
960
  width: 100%;
1054
961
  cursor: pointer;
1055
962
  }
1056
963
  .ag-q-done-item:hover .ag-q-done-title,
1057
964
  .ag-q-done-item:active .ag-q-done-title,
1058
965
  .ag-q-done-item--selected .ag-q-done-title {
1059
- color: var(--dt-text, rgba(0, 0, 0, 0.87));
966
+ color: var(--dt-text, rgba(15, 15, 15, 0.87));
1060
967
  }
1061
968
  .ag-q-done-item:focus-visible {
1062
969
  outline: none;
1063
- box-shadow: 0 0 0 2px var(--dt-accent, #2563eb);
970
+ box-shadow: 0 0 0 2px var(--dt-accent, #1d4fd7);
1064
971
  border-radius: 0;
1065
972
  }
1066
973
  .ag-q-done-check {
1067
- font-size: 11px;
1068
- color: var(--dt-success, rgba(22, 163, 74, 0.7));
974
+ font-size: 12.5px;
975
+ color: var(--dt-text-2, rgba(15, 15, 15, 0.66));
1069
976
  flex-shrink: 0;
1070
977
  }
978
+ /* Finished: quieter ink, no strike (strikethrough means cancelled). */
1071
979
  .ag-q-done-title {
1072
- font-size: 12px;
1073
- line-height: 1.2;
1074
- color: var(--dt-text-2, rgba(0, 0, 0, 0.54));
980
+ font: 500 15px/1.25 var(--dt-sans, system-ui, sans-serif);
981
+ color: var(--dt-text-2, rgba(15, 15, 15, 0.66));
1075
982
  white-space: nowrap;
1076
983
  overflow: hidden;
1077
984
  text-overflow: ellipsis;
1078
- text-decoration: line-through;
1079
- text-decoration-color: var(--dt-text-3, rgba(0, 0, 0, 0.38));
1080
985
  transition: color 150ms;
1081
986
  }
1082
987
 
@@ -1093,11 +998,11 @@ const hiddenDoneCount = $derived(showAllDone ? 0 : Math.max(0, dayCat.past.lengt
1093
998
  }
1094
999
  .ag-log-row {
1095
1000
  display: flex;
1096
- align-items: center;
1001
+ align-items: baseline;
1097
1002
  gap: 10px;
1098
1003
  padding: 8px 0;
1099
1004
  width: 100%;
1100
- border-bottom: 1px solid var(--dt-border, rgba(0, 0, 0, 0.08));
1005
+ border-bottom: 1px solid var(--dt-border, rgba(15, 15, 15, 0.08));
1101
1006
  cursor: pointer;
1102
1007
  }
1103
1008
  .ag-log-row:last-child {
@@ -1106,15 +1011,15 @@ const hiddenDoneCount = $derived(showAllDone ? 0 : Math.max(0, dayCat.past.lengt
1106
1011
  .ag-log-row:hover .ag-log-title,
1107
1012
  .ag-log-row:active .ag-log-title,
1108
1013
  .ag-log-row--selected .ag-log-title {
1109
- color: var(--dt-text, rgba(0, 0, 0, 0.87));
1014
+ color: var(--dt-text, rgba(15, 15, 15, 0.87));
1110
1015
  }
1111
1016
  .ag-log-row:hover,
1112
1017
  .ag-log-row:active {
1113
- background: var(--dt-hover, rgba(0, 0, 0, 0.04));
1018
+ background: var(--dt-hover, rgba(15, 15, 15, 0.04));
1114
1019
  }
1115
1020
  .ag-log-row:focus-visible {
1116
1021
  outline: none;
1117
- box-shadow: 0 0 0 2px var(--dt-accent, #2563eb);
1022
+ box-shadow: 0 0 0 2px var(--dt-accent, #1d4fd7);
1118
1023
  border-radius: 0;
1119
1024
  }
1120
1025
  .ag-log-row--selected {
@@ -1122,16 +1027,15 @@ const hiddenDoneCount = $derived(showAllDone ? 0 : Math.max(0, dayCat.past.lengt
1122
1027
  border-radius: 0;
1123
1028
  }
1124
1029
  .ag-log-check {
1125
- font-size: 10px;
1126
- color: var(--dt-success, rgba(22, 163, 74, 0.7));
1030
+ font-size: 12.5px;
1031
+ color: var(--dt-text-2, rgba(15, 15, 15, 0.66));
1127
1032
  flex-shrink: 0;
1128
1033
  }
1129
1034
  .ag-log-time {
1130
- font-size: 11px;
1131
- font-family: var(--dt-sans, system-ui, sans-serif);
1035
+ font: 400 14px/1.25 var(--dt-sans, system-ui, sans-serif);
1132
1036
  font-variant-numeric: tabular-nums;
1133
- color: var(--dt-text-3, rgba(0, 0, 0, 0.38));
1134
- width: 64px;
1037
+ color: var(--dt-text-2, rgba(15, 15, 15, 0.66));
1038
+ min-width: 4.6em;
1135
1039
  flex-shrink: 0;
1136
1040
  }
1137
1041
  /* The colour dot of a past row becomes its 3px start bar (dimmed: it is over). */
@@ -1142,25 +1046,26 @@ const hiddenDoneCount = $derived(showAllDone ? 0 : Math.max(0, dayCat.past.lengt
1142
1046
  flex-shrink: 0;
1143
1047
  opacity: 0.45;
1144
1048
  }
1049
+ /* A past day is over, not struck out: quieter ink, sized like the planner.
1050
+ Strikethrough is kept for cancelled events only. */
1145
1051
  .ag-log-title {
1146
- font-size: 13px;
1147
- font-weight: 500;
1148
- line-height: 1.2;
1149
- color: var(--dt-text-2, rgba(0, 0, 0, 0.54));
1150
- flex: 1;
1052
+ font: 500 15px/1.25 var(--dt-sans, system-ui, sans-serif);
1053
+ color: var(--dt-text-2, rgba(15, 15, 15, 0.66));
1054
+ flex: 0 1 auto;
1055
+ min-width: 0;
1151
1056
  white-space: nowrap;
1152
1057
  overflow: hidden;
1153
1058
  text-overflow: ellipsis;
1154
- text-decoration: line-through;
1155
- text-decoration-color: var(--dt-border, rgba(0, 0, 0, 0.08));
1156
1059
  transition: color 150ms;
1157
1060
  text-align: left;
1158
1061
  }
1062
+ .ag-log-row--cancelled .ag-log-title {
1063
+ text-decoration: line-through;
1064
+ }
1159
1065
  .ag-log-dur {
1160
- font-size: 11px;
1161
- font-family: var(--dt-sans, system-ui, sans-serif);
1066
+ font: 400 12.5px/1.25 var(--dt-sans, system-ui, sans-serif);
1162
1067
  font-variant-numeric: tabular-nums;
1163
- color: var(--dt-text-3, rgba(0, 0, 0, 0.38));
1068
+ color: var(--dt-text-2, rgba(15, 15, 15, 0.66));
1164
1069
  flex-shrink: 0;
1165
1070
  }
1166
1071
 
@@ -1177,9 +1082,9 @@ const hiddenDoneCount = $derived(showAllDone ? 0 : Math.max(0, dayCat.past.lengt
1177
1082
  position: relative;
1178
1083
  display: flex;
1179
1084
  align-items: baseline;
1180
- gap: 8px;
1181
- padding: 4px 0 4px 11px;
1182
- border-bottom: 1px solid var(--dt-border, rgba(0, 0, 0, 0.3));
1085
+ gap: 10px;
1086
+ padding: 5px 0 5px 11px;
1087
+ border-bottom: 1px solid var(--dt-border, rgba(15, 15, 15, 0.3));
1183
1088
  cursor: pointer;
1184
1089
  min-width: 0;
1185
1090
  width: 100%;
@@ -1200,32 +1105,33 @@ const hiddenDoneCount = $derived(showAllDone ? 0 : Math.max(0, dayCat.past.lengt
1200
1105
  .ag-compact-row:active .ag-compact-row-title { color: var(--dt-text); }
1201
1106
  .ag-compact-row:hover,
1202
1107
  .ag-compact-row:active {
1203
- background: var(--dt-hover, rgba(0, 0, 0, 0.04));
1108
+ background: var(--dt-hover, rgba(15, 15, 15, 0.04));
1204
1109
  }
1205
1110
  .ag-compact-row:focus-visible {
1206
1111
  outline: none;
1207
- box-shadow: 0 0 0 2px var(--dt-accent, #2563eb);
1112
+ box-shadow: 0 0 0 2px var(--dt-accent, #1d4fd7);
1208
1113
  }
1209
1114
  .ag-compact-row-time {
1210
- font-size: 11px;
1211
- font-family: var(--dt-sans, system-ui, sans-serif);
1115
+ font: 400 14px/1.3 var(--dt-sans, system-ui, sans-serif);
1212
1116
  font-variant-numeric: tabular-nums;
1213
- font-weight: 400;
1214
- color: var(--dt-text-2, rgba(0, 0, 0, 0.54));
1215
- min-width: 64px;
1117
+ color: var(--dt-text, rgba(15, 15, 15, 0.87));
1118
+ min-width: 4.6em;
1216
1119
  flex-shrink: 0;
1217
- line-height: 1.4;
1120
+ white-space: nowrap;
1218
1121
  }
1219
- /* Title + subtitle + tags cluster. One line while it fits; on mobile the
1220
- metadata wraps to a second line under the title instead of crushing it. */
1122
+ /* Title + subtitle + tags cluster, sized to its content so the meta and
1123
+ duration sit beside the title instead of across a wide row. One line
1124
+ while it fits; on mobile the metadata wraps to a second line under the
1125
+ title instead of crushing it. */
1221
1126
  .ag-compact-row-main {
1222
1127
  display: flex;
1223
1128
  align-items: baseline;
1224
- gap: 8px;
1225
- flex: 1;
1129
+ gap: 10px;
1130
+ flex: 0 1 auto;
1226
1131
  min-width: 0;
1227
1132
  }
1228
1133
  .ag--mobile .ag-compact-row-main {
1134
+ flex: 1;
1229
1135
  flex-wrap: wrap;
1230
1136
  row-gap: 2px;
1231
1137
  }
@@ -1240,49 +1146,37 @@ const hiddenDoneCount = $derived(showAllDone ? 0 : Math.max(0, dayCat.past.lengt
1240
1146
  max-width: 100%;
1241
1147
  }
1242
1148
  .ag-compact-row-title {
1243
- font-size: 12px;
1244
- font-weight: 500;
1245
- color: var(--dt-text, rgba(0, 0, 0, 0.87));
1246
- flex: 1;
1149
+ font: 500 15px/1.3 var(--dt-sans, system-ui, sans-serif);
1150
+ color: var(--dt-text, rgba(15, 15, 15, 0.87));
1151
+ flex: 0 1 auto;
1247
1152
  /* The title is the row's identity — never let subtitle/tags/duration
1248
- squeeze it out on narrow screens (flex: 1 alone resolves to 0px). */
1249
- min-width: 35%;
1153
+ squeeze it out on narrow screens (min-width: 0 resolves to 0px). */
1154
+ min-width: 6em;
1250
1155
  white-space: nowrap;
1251
1156
  overflow: hidden;
1252
1157
  text-overflow: ellipsis;
1253
1158
  transition: color 150ms;
1254
- line-height: 1.4;
1255
1159
  text-align: left;
1256
1160
  }
1161
+ .ag-compact-row-dur,
1162
+ .ag-compact-row-sub,
1163
+ .ag-compact-row-tag {
1164
+ font: 400 12.5px/1.3 var(--dt-sans, system-ui, sans-serif);
1165
+ color: var(--dt-text-2, rgba(15, 15, 15, 0.66));
1166
+ white-space: nowrap;
1167
+ }
1257
1168
  .ag-compact-row-dur {
1258
- font-size: 10px;
1259
- font-family: var(--dt-sans, system-ui, sans-serif);
1260
1169
  font-variant-numeric: tabular-nums;
1261
- color: var(--dt-text-3, rgba(0, 0, 0, 0.38));
1262
1170
  flex-shrink: 0;
1263
- line-height: 1.4;
1264
1171
  }
1265
1172
  .ag-compact-row-sub {
1266
- font-size: 10px;
1267
- color: var(--dt-text-3, rgba(0, 0, 0, 0.38));
1268
1173
  flex-shrink: 3;
1269
1174
  min-width: 0;
1270
1175
  max-width: 45%;
1271
- white-space: nowrap;
1272
1176
  overflow: hidden;
1273
1177
  text-overflow: ellipsis;
1274
- line-height: 1.4;
1275
1178
  }
1276
1179
  .ag-compact-row-tag {
1277
- font: 500 10.5px / 1 var(--dt-sans, system-ui, sans-serif);
1278
- text-transform: uppercase;
1279
- letter-spacing: 0.04em;
1280
- color: var(--dt-text-2, rgba(0, 0, 0, 0.54));
1281
- background: transparent;
1282
- border: 1px solid var(--dt-border-day, rgba(0, 0, 0, 0.6));
1283
- padding: 1px 4px;
1284
- border-radius: 0;
1285
- white-space: nowrap;
1286
1180
  flex-shrink: 1;
1287
1181
  min-width: 2.5em;
1288
1182
  overflow: hidden;
@@ -1290,26 +1184,16 @@ const hiddenDoneCount = $derived(showAllDone ? 0 : Math.max(0, dayCat.past.lengt
1290
1184
  }
1291
1185
  .ag-compact-row--cancelled .ag-compact-row-title {
1292
1186
  text-decoration: line-through;
1293
- color: var(--dt-text-2, rgba(0, 0, 0, 0.54));
1187
+ color: var(--dt-text-2, rgba(15, 15, 15, 0.54));
1294
1188
  }
1295
1189
  .ag-compact-row--cancelled::before { opacity: 0.45; }
1296
- .ag-compact-row--tentative .ag-compact-row-title { color: var(--dt-text-2, rgba(0, 0, 0, 0.54)); }
1190
+ .ag-compact-row--tentative .ag-compact-row-title { color: var(--dt-text-2, rgba(15, 15, 15, 0.54)); }
1297
1191
  .ag-compact-row--tentative::before {
1298
1192
  background: repeating-linear-gradient(180deg, var(--ev-color) 0 4px, transparent 4px 7px);
1299
1193
  }
1300
1194
  /* Mobile: larger touch targets for compact rows */
1301
- .ag--mobile .ag-compact-row { padding: 8px 0; }
1302
- .ag--mobile .ag-compact-row-title { font-size: 15px; }
1303
- .ag--mobile .ag-compact-row-time { font-size: 12px; }
1304
- .ag--mobile .ag-compact-row-dur { font-size: 12px; }
1305
- .ag--mobile .ag-compact-row-sub { font-size: 12px; }
1306
- .ag--mobile .ag-compact-row-tag { font-size: 11px; }
1195
+ .ag--mobile .ag-compact-row { padding: 8px 0 8px 11px; }
1307
1196
  .ag--mobile .ag-day-head { padding: 0 16px 8px; }
1308
- .ag--mobile .ag-day-head-name { font-size: 15px; }
1309
- .ag--mobile .ag-day-head-date { font-size: 12px; }
1310
- .ag--mobile .ag-day-head-badge { font-size: 11px; }
1311
- .ag--mobile .ag-allday-title { font-size: 0.85rem; }
1312
- .ag--mobile .ag-allday-label { font-size: 11px; }
1313
1197
 
1314
1198
  /* ═══ Future Day: "The Plan" ═══ */
1315
1199
  .ag-plan {