@nomideusz/svelte-calendar 0.11.0 → 0.13.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.
- package/README.md +2 -16
- package/dist/calendar/Calendar.svelte +4 -0
- package/dist/calendar/Calendar.svelte.d.ts +8 -0
- package/dist/core/index.d.ts +0 -2
- package/dist/core/index.js +0 -2
- package/dist/engine/view-state.svelte.d.ts +5 -4
- package/dist/headless/create-range-agenda.svelte.d.ts +62 -0
- package/dist/headless/create-range-agenda.svelte.js +110 -0
- package/dist/headless/index.d.ts +2 -0
- package/dist/headless/index.js +1 -0
- package/dist/index.d.ts +6 -6
- package/dist/index.js +2 -2
- package/dist/theme/auto.js +56 -21
- package/dist/theme/presets.d.ts +6 -5
- package/dist/theme/presets.js +2 -3
- package/dist/views/agenda/AgendaDay.svelte +15 -30
- package/dist/views/agenda/AgendaWeek.svelte +68 -30
- package/dist/views/planner/Planner.svelte +3 -7
- package/dist/views/planner/PlannerWeek.svelte +16 -7
- package/dist/views/planner/PlannerWeek.svelte.d.ts +2 -0
- package/dist/views/shared/context.svelte.d.ts +1 -0
- package/dist/views/shared/context.svelte.js +1 -0
- package/package.json +1 -8
- package/widget/widget.js +634 -1726
- package/dist/core/measure.d.ts +0 -104
- package/dist/core/measure.js +0 -195
- package/dist/views/planner/PlannerDay.svelte +0 -1279
- package/dist/views/planner/PlannerDay.svelte.d.ts +0 -30
package/widget/widget.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
globalThis.__DAY_CALENDAR_CSS__ = ":host{display:block}\n\t/* ─── Container ──────────────────────────────────── */\n\t.fs.svelte-mrwdy7 {\n\t\tposition: relative;\n\t\toverflow: hidden;\n\t\tuser-select: none;\n\t\tfont-variant-numeric: tabular-nums;\n\t\t/* The track is px-sized from the container width; never let it feed\n\t\t back into our own intrinsic size (host flex/grid min-width:auto\n\t\t would otherwise loop container → hourWidth → track → container). */\n\t\tcontain: inline-size;\n\t}\n\t.fs--auto.svelte-mrwdy7 { overflow: visible; }\n\n\t/* ─── Horizontal scroll ──────────────────────────── */\n\t.fs-scroll.svelte-mrwdy7 {\n\t\twidth: 100%;\n\t\theight: 100%;\n\t\toverflow-x: auto;\n\t\toverflow-y: hidden;\n\t\ttouch-action: pan-x;\n\t\tcursor: default;\n\t\tscrollbar-width: thin;\n\t\tscrollbar-color: var(--dt-scrollbar, rgba(0, 0, 0, 0.1)) transparent;\n\t}\n\t/* Auto height grows vertically, but horizontal containment must stay —\n\t overflow: visible here painted the whole track outside the calendar. */\n\t.fs--auto.svelte-mrwdy7 .fs-scroll:where(.svelte-mrwdy7) { height: auto; overflow-x: auto; overflow-y: hidden; }\n\t.fs-scroll.svelte-mrwdy7::-webkit-scrollbar { height: 5px; }\n\t.fs-scroll.svelte-mrwdy7::-webkit-scrollbar-thumb {\n\t\tbackground: var(--dt-scrollbar, rgba(0, 0, 0, 0.1));\n\t\tborder-radius: 4px;\n\t}\n\t.fs-scroll.svelte-mrwdy7::-webkit-scrollbar-track { background: transparent; }\n\t.fs-readonly.svelte-mrwdy7 { cursor: grab; }\n\t.fs-grabbing.svelte-mrwdy7 { cursor: grabbing; }\n\n\t.fs-track.svelte-mrwdy7 {\n\t\tposition: relative;\n\t\theight: 100%;\n\t}\n\n\t/* ─── Day block ──────────────────────────────────── */\n\t.fs-day.svelte-mrwdy7 {\n\t\tposition: absolute;\n\t\ttop: 0;\n\t\theight: 100%;\n\t\tborder-left: 1px solid var(--dt-border-day, rgba(0, 0, 0, 0.14));\n\t\tbox-sizing: border-box;\n\t}\n\t.fs-today.svelte-mrwdy7 { background: var(--dt-today-bg, color-mix(in srgb, var(--dt-accent, #2563eb) 8%, transparent)); }\n\t/* Past days: dim via a background wash instead of a subtree opacity so\n\t event text keeps full contrast. */\n\t.fs-past.svelte-mrwdy7 { background: color-mix(in srgb, var(--dt-text, rgba(0, 0, 0, 0.87)) 3%, transparent); }\n\n\t/* ─── Disabled day ───────────────────────────────── */\n\t.fs-disabled.svelte-mrwdy7 {\n\t\topacity: 0.35;\n\t\tbackground: repeating-linear-gradient(\n\t\t\t45deg,\n\t\t\ttransparent,\n\t\t\ttransparent 6px,\n\t\t\tvar(--dt-border, rgba(0, 0, 0, 0.08)) 6px,\n\t\t\tvar(--dt-border, rgba(0, 0, 0, 0.08)) 7px\n\t\t) !important;\n\t}\n\n\t/* ─── Blocked slot overlay ───────────────────────── */\n\t.fs-blocked.svelte-mrwdy7 {\n\t\tposition: absolute;\n\t\ttop: 18px;\n\t\tbottom: 0;\n\t\tz-index: 3;\n\t\tbackground: repeating-linear-gradient(\n\t\t\t-45deg,\n\t\t\tcolor-mix(in srgb, var(--dt-text, rgba(0, 0, 0, 0.87)) 4%, transparent),\n\t\t\tcolor-mix(in srgb, var(--dt-text, rgba(0, 0, 0, 0.87)) 4%, transparent) 4px,\n\t\t\ttransparent 4px,\n\t\t\ttransparent 8px\n\t\t);\n\t\tborder-radius: 4px;\n\t\tpointer-events: none;\n\t\tdisplay: flex;\n\t\talign-items: flex-end;\n\t\tjustify-content: center;\n\t\tpadding-bottom: 6px;\n\t}\n\n\t.fs-blocked-label.svelte-mrwdy7 {\n\t\tfont: 500 9px/1 var(--dt-sans, system-ui, sans-serif);\n\t\tcolor: var(--dt-text-3, rgba(0, 0, 0, 0.38));\n\t\ttext-transform: uppercase;\n\t\tletter-spacing: 0.04em;\n\t\twhite-space: nowrap;\n\t}\n\n\t/* ─── Custom day header ──────────────────────────── */\n\t.fs-day-header-custom.svelte-mrwdy7 {\n\t\tposition: absolute;\n\t\ttop: 16px;\n\t\tleft: 50%;\n\t\ttransform: translateX(-50%);\n\t\tz-index: 4;\n\t\tpointer-events: auto;\n\t\twhite-space: nowrap;\n\t}\n\n\t/* ─── Hour ticks ─────────────────────────────────── */\n\t.fs-tick.svelte-mrwdy7 {\n\t\tposition: absolute;\n\t\ttop: 0;\n\t\tbottom: 0;\n\t\twidth: 0;\n\t}\n\t.fs-tick.svelte-mrwdy7::before {\n\t\tcontent: '';\n\t\tposition: absolute;\n\t\ttop: 18px;\n\t\tbottom: 0;\n\t\twidth: 1px;\n\t\tbackground: var(--dt-border, rgba(0, 0, 0, 0.08));\n\t}\n\t.fs-tick-lb.svelte-mrwdy7 {\n\t\tposition: absolute;\n\t\ttop: 2px;\n\t\tleft: 5px;\n\t\tfont: 500 10px/1 var(--dt-mono, ui-monospace, monospace);\n\t\tcolor: var(--dt-text-3, rgba(0, 0, 0, 0.38));\n\t\twhite-space: nowrap;\n\t\tpointer-events: none;\n\t}\n\t/* Half-hour guide: full-height line at low opacity through the event area */\n\t.fs-tick--half.svelte-mrwdy7::before {\n\t\ttop: 18px;\n\t\tbottom: 0;\n\t\topacity: 0.35;\n\t}\n\n\t/* ─── Now-line ────────────────────────────────────── */\n\t.fs-now.svelte-mrwdy7 {\n\t\tposition: absolute;\n\t\ttop: 0;\n\t\tbottom: 0;\n\t\tz-index: 10;\n\t\tpointer-events: none;\n\t\ttransform: translateX(-1px);\n\t}\n\t.fs-now-line.svelte-mrwdy7 {\n\t\tposition: absolute;\n\t\ttop: 0;\n\t\tbottom: 0;\n\t\tleft: 0;\n\t\twidth: 2px;\n\t\tbackground: var(--dt-accent, #2563eb);\n\t\tbox-shadow: 0 0 8px var(--dt-glow, rgba(37, 99, 235, 0.25));\n\t}\n\t.fs-now-tag.svelte-mrwdy7 {\n\t\tposition: absolute;\n\t\t/* Below the hour-label row (labels sit at top: 2px) so the tag never\n\t\t collides with an hour label near hour boundaries. */\n\t\ttop: 20px;\n\t\tleft: 8px;\n\t\tfont: 700 11px/1 var(--dt-mono, ui-monospace, monospace);\n\t\tcolor: var(--dt-accent, #2563eb);\n\t\tbackground: color-mix(in srgb, var(--dt-bg, #ffffff) 92%, var(--dt-accent, #2563eb));\n\t\tborder: 1px solid var(--dt-accent-dim, rgba(37, 99, 235, 0.12));\n\t\tpadding: 3px 6px;\n\t\tborder-radius: 4px;\n\t\twhite-space: nowrap;\n\t\tz-index: 1;\n\t}\n\t/* ─── All-day strip ─────────────────────────────── */\n\t/* The container is a full-width overlay — let clicks pass through it and\n\t only the chips themselves capture pointer events. */\n\t.fs-allday.svelte-mrwdy7 {\n\t\tposition: absolute;\n\t\tleft: 0;\n\t\tright: 0;\n\t\tdisplay: flex;\n\t\tgap: 6px;\n\t\tpadding: 0 8px;\n\t\tz-index: 7;\n\t\toverflow-x: auto;\n\t\tscrollbar-width: none;\n\t\tpointer-events: none;\n\t}\n\t.fs-allday.svelte-mrwdy7::-webkit-scrollbar { display: none; }\n\n\t.fs-ad.svelte-mrwdy7 {\n\t\tdisplay: flex;\n\t\talign-items: center;\n\t\tgap: 4px;\n\t\tpadding: 2px 8px;\n\t\tborder-radius: 4px;\n\t\tbackground: color-mix(in srgb, var(--ev-color) 18%, var(--dt-surface, var(--dt-bg, #ffffff)));\n\t\tborder-left: 3px solid var(--ev-color);\n\t\twhite-space: nowrap;\n\t\tflex-shrink: 0;\n\t\tmin-width: 0;\n\t\tmax-width: 320px;\n\t\tcursor: pointer;\n\t\ttransition: background 0.15s;\n\t\tpointer-events: auto;\n\t}\n\t.fs-ad.svelte-mrwdy7:hover {\n\t\tbackground: color-mix(in srgb, var(--ev-color) 28%, var(--dt-surface, var(--dt-bg, #ffffff)));\n\t}\n\t.fs-ad.svelte-mrwdy7:focus-visible {\n\t\toutline: none;\n\t\tbox-shadow: 0 0 0 2px var(--dt-accent, #2563eb);\n\t}\n\t.fs-ad--selected.svelte-mrwdy7 {\n\t\tbackground: color-mix(in srgb, var(--ev-color) 30%, var(--dt-surface, var(--dt-bg, #ffffff)));\n\t\tborder-left-width: 4px;\n\t}\n\n\t.fs-ad-dot.svelte-mrwdy7 {\n\t\twidth: 6px;\n\t\theight: 6px;\n\t\tborder-radius: 50%;\n\t\tbackground: var(--ev-color);\n\t\tflex-shrink: 0;\n\t}\n\n\t.fs-ad-title.svelte-mrwdy7 {\n\t\tfont-size: 0.7rem;\n\t\tfont-weight: 500;\n\t\tcolor: var(--dt-text, rgba(0, 0, 0, 0.87));\n\t\tflex: 0 1 auto;\n\t\tmin-width: 0;\n\t\toverflow: hidden;\n\t\ttext-overflow: ellipsis;\n\t}\n\n\t.fs-ad-span.svelte-mrwdy7 {\n\t\tfont-size: 0.6rem;\n\t\tcolor: var(--dt-text-2, rgba(0, 0, 0, 0.54));\n\t\tflex-shrink: 0;\n\t}\n\n\t/* ─── Events ─────────────────────────────────────── */\n\t.fs-event.svelte-mrwdy7 {\n\t\tposition: absolute;\n\t\tz-index: 6;\n\t\tborder-radius: 6px;\n\t\t/* Editable events are grabbable; touch drags move the event instead of\n\t\t scrolling the strip. */\n\t\tcursor: grab;\n\t\ttouch-action: none;\n\t\tbackground: color-mix(in srgb, var(--ev-color) 22%, var(--dt-surface, var(--dt-bg, #ffffff)));\n\t\tborder: 1px solid color-mix(in srgb, var(--ev-color) 40%, transparent);\n\t\t/* Solid stripe at the start edge — matches the week view, keeps the\n\t\t pure tour color visible while the body stays a readable tint. */\n\t\tborder-left: 3px solid var(--ev-color);\n\t\toverflow: hidden;\n\t\tdisplay: flex;\n\t\talign-items: center;\n\t\tjustify-content: center;\n\t\t/* top/height only: lane reflow animates on drop; left/width stay instant so\n\t\t mount-time width measurement and infinite-scroll rebases don't slide cards */\n\t\ttransition: box-shadow 120ms, background 120ms,\n\t\t\ttop 180ms cubic-bezier(0.2, 0.8, 0.2, 1), height 180ms cubic-bezier(0.2, 0.8, 0.2, 1);\n\t}\n\t.fs-event.svelte-mrwdy7:hover {\n\t\tbackground: color-mix(in srgb, var(--ev-color) 32%, var(--dt-surface, var(--dt-bg, #ffffff)));\n\t\tbox-shadow: 0 2px 12px color-mix(in srgb, var(--ev-color) 25%, transparent);\n\t}\n\t.fs-event--selected.svelte-mrwdy7 {\n\t\tbox-shadow: 0 0 0 2px var(--ev-color), 0 2px 14px color-mix(in srgb, var(--ev-color) 35%, transparent);\n\t}\n\t.fs-event--current.svelte-mrwdy7 {\n\t\tbackground: color-mix(in srgb, var(--ev-color) 22%, var(--dt-surface, var(--dt-bg, #ffffff)));\n\t\tbox-shadow: inset 0 0 0 1px color-mix(in srgb, var(--ev-color) 20%, transparent);\n\t}\n\t.fs-event--next.svelte-mrwdy7 {\n\t\tborder-color: color-mix(in srgb, var(--ev-color) 75%, transparent);\n\t}\n\t.fs-event--dragging.svelte-mrwdy7 {\n\t\topacity: 0.85;\n\t\tz-index: 50;\n\t\tbox-shadow: 0 4px 24px rgba(0, 0, 0, 0.35);\n\t\tcursor: grabbing;\n\t\t/* fast ease toward the snapped cursor position */\n\t\ttransition: left 80ms ease-out, width 80ms ease-out;\n\t}\n\t.fs-event--resizing.svelte-mrwdy7 {\n\t\tcursor: ew-resize;\n\t}\n\n\t/* ─── Resize handles ─────────────────────────────── */\n\t.fs-ev-handle.svelte-mrwdy7 {\n\t\tposition: absolute;\n\t\ttop: 0;\n\t\tbottom: 0;\n\t\twidth: 6px;\n\t\tz-index: 2;\n\t\tcursor: ew-resize;\n\t\ttouch-action: none;\n\t}\n\t/* Hit-slop: ~20px effective grab zone while the visual stays 6px */\n\t.fs-ev-handle.svelte-mrwdy7::before {\n\t\tcontent: '';\n\t\tposition: absolute;\n\t\ttop: 0;\n\t\tbottom: 0;\n\t\tleft: -7px;\n\t\tright: -7px;\n\t}\n\t.fs-ev-handle--start.svelte-mrwdy7 { left: 0; }\n\t.fs-ev-handle--end.svelte-mrwdy7 { right: 0; }\n\t.fs-ev-handle.svelte-mrwdy7::after {\n\t\tcontent: '';\n\t\tposition: absolute;\n\t\ttop: 20%;\n\t\tbottom: 20%;\n\t\tleft: 2px;\n\t\twidth: 2px;\n\t\tborder-radius: 2px;\n\t\tbackground: var(--ev-color);\n\t\topacity: 0;\n\t\ttransition: opacity 120ms;\n\t}\n\t.fs-event.svelte-mrwdy7:hover .fs-ev-handle:where(.svelte-mrwdy7)::after,\n\t.fs-event.svelte-mrwdy7:focus-within .fs-ev-handle:where(.svelte-mrwdy7)::after { opacity: 0.55; }\n\t/* Coarse pointers can't hover — show the grips persistently */\n\t@media (hover: none) {\n\t\t.fs-ev-handle.svelte-mrwdy7::after { opacity: 0.55; }\n\t}\n\n\t/* ─── Drag-to-create ghost ───────────────────────── */\n\t.fs-create-ghost.svelte-mrwdy7 {\n\t\tposition: absolute;\n\t\tz-index: 40;\n\t\tborder-radius: 6px;\n\t\tbackground: color-mix(in srgb, var(--dt-accent, #2563eb) 14%, transparent);\n\t\tborder: 1px dashed color-mix(in srgb, var(--dt-accent, #2563eb) 60%, transparent);\n\t\tdisplay: flex;\n\t\talign-items: flex-start;\n\t\tjustify-content: center;\n\t\toverflow: hidden;\n\t\tpointer-events: none;\n\t}\n\t.fs-create-ghost-time.svelte-mrwdy7 {\n\t\tfont: 600 10px/1 var(--dt-mono, ui-monospace, monospace);\n\t\tcolor: var(--dt-accent, #2563eb);\n\t\tpadding: 6px 4px;\n\t\twhite-space: nowrap;\n\t}\n\n\t@media (prefers-reduced-motion: reduce) {\n\t\t.fs-event.svelte-mrwdy7,\n\t\t.fs-event--dragging.svelte-mrwdy7 {\n\t\t\ttransition: box-shadow 120ms, background 120ms;\n\t\t}\n\t\t.fs-create-ghost.svelte-mrwdy7,\n\t\t.fs-ad.svelte-mrwdy7,\n\t\t.fs-ev-handle.svelte-mrwdy7::after {\n\t\t\ttransition: none;\n\t\t}\n\t}\n\t/* Cancelled: strikethrough + secondary text, not a subtree opacity dim */\n\t.fs-event--cancelled.svelte-mrwdy7 .fs-ev-title:where(.svelte-mrwdy7) {\n\t\ttext-decoration: line-through;\n\t\tcolor: var(--dt-text-2, rgba(0, 0, 0, 0.54));\n\t}\n\t.fs-event--tentative.svelte-mrwdy7 {\n\t\topacity: 0.65;\n\t\tborder: 1px dashed color-mix(in srgb, var(--ev-color) 40%, transparent);\n\t}\n\t.fs-event--full.svelte-mrwdy7 {\n\t\topacity: 0.55;\n\t}\n\t.fs-event--limited.svelte-mrwdy7 {\n\t\topacity: 0.65;\n\t\tborder: 1px dashed color-mix(in srgb, var(--ev-color) 40%, transparent);\n\t}\n\t.fs-event--readonly.svelte-mrwdy7,\n\t.fs-readonly.svelte-mrwdy7 .fs-event:where(.svelte-mrwdy7) {\n\t\tcursor: default;\n\t}\n\n\t/* Event inner — vertical text along lane height (day filmstrip) */\n\t.fs-ev-inner.svelte-mrwdy7 {\n\t\twriting-mode: vertical-rl;\n\t\ttext-orientation: mixed;\n\t\ttransform: rotate(180deg);\n\t\tdisplay: flex;\n\t\tflex-direction: row;\n\t\talign-items: center;\n\t\tjustify-content: center;\n\t\tgap: 6px;\n\t\theight: 100%;\n\t\tmax-width: 100%;\n\t\toverflow: hidden;\n\t\tbox-sizing: border-box;\n\t\tpadding: 8px 4px;\n\t}\n\t.fs-ev-live.svelte-mrwdy7 {\n\t\tflex-shrink: 0;\n\t\twidth: 7px;\n\t\theight: 7px;\n\t\tborder-radius: 50%;\n\t\tbackground: var(--ev-color);\n\t}\n\t.fs-ev-next-badge.svelte-mrwdy7 {\n\t\tflex-shrink: 0;\n\t\tfont: 600 8px/1 var(--dt-sans, system-ui, sans-serif);\n\t\ttext-transform: uppercase;\n\t\tletter-spacing: 0.06em;\n\t\tcolor: var(--ev-color, var(--dt-accent));\n\t\tbackground: color-mix(in srgb, var(--ev-color, var(--dt-accent)) 15%, transparent);\n\t\tpadding: 2px 5px;\n\t\tborder-radius: 3px;\n\t\twhite-space: nowrap;\n\t}\n\t.fs-ev-title.svelte-mrwdy7 {\n\t\tfont: 600 13px/1.15 var(--dt-sans, system-ui, sans-serif);\n\t\tcolor: var(--dt-text, rgba(0, 0, 0, 0.87));\n\t\toverflow: hidden;\n\t\ttext-overflow: ellipsis;\n\t\t/* In vertical writing mode line boxes stack as columns — allow a\n\t\t second column before truncating so overlapping (short) cards keep\n\t\t readable names. Full name is in the title tooltip. */\n\t\tdisplay: -webkit-box;\n\t\t-webkit-box-orient: vertical;\n\t\t-webkit-line-clamp: 2;\n\t\tline-clamp: 2;\n\t\twhite-space: normal;\n\t\tmax-height: 100%;\n\t\tflex-shrink: 0;\n\t}\n\t.fs-ev-time.svelte-mrwdy7 {\n\t\tfont: 400 10px/1 var(--dt-mono, ui-monospace, monospace);\n\t\tcolor: var(--dt-text-2, rgba(0, 0, 0, 0.54));\n\t\twhite-space: nowrap;\n\t\tflex-shrink: 0;\n\t}\n\t.fs-ev-sub.svelte-mrwdy7 {\n\t\tfont: 400 11px/1 var(--dt-sans, system-ui, sans-serif);\n\t\tcolor: var(--dt-text-2, rgba(0, 0, 0, 0.54));\n\t\twhite-space: nowrap;\n\t\toverflow: hidden;\n\t\ttext-overflow: ellipsis;\n\t\tmax-height: 100%;\n\t\tflex-shrink: 0;\n\t}\n\t.fs-ev-loc.svelte-mrwdy7 {\n\t\tfont: 400 10px/1 var(--dt-sans, system-ui, sans-serif);\n\t\tcolor: var(--dt-text-2, rgba(0, 0, 0, 0.54));\n\t\twhite-space: nowrap;\n\t\toverflow: hidden;\n\t\ttext-overflow: ellipsis;\n\t\tmax-height: 100%;\n\t\tflex-shrink: 0;\n\t}\n\t.fs-ev-tags.svelte-mrwdy7 {\n\t\tdisplay: flex;\n\t\tflex-direction: row;\n\t\tgap: 4px;\n\t\tflex-shrink: 0;\n\t}\n\t.fs-ev-tag.svelte-mrwdy7 {\n\t\tfont: 500 8px/1 var(--dt-sans, system-ui, sans-serif);\n\t\tcolor: var(--ev-color, var(--dt-accent));\n\t\tbackground: color-mix(in srgb, var(--ev-color, var(--dt-accent)) 18%, transparent);\n\t\tpadding: 1px 4px;\n\t\tborder-radius: 3px;\n\t\twhite-space: nowrap;\n\t}\n\n\t/* ─── Focus-visible ──────────────────────────────── */\n\t/* box-shadow instead of outline: outlines get clipped by the\n\t overflow: hidden scroll container. */\n\t.fs-event.svelte-mrwdy7:focus-visible {\n\t\toutline: none;\n\t\tbox-shadow: 0 0 0 2px var(--dt-accent, #2563eb);\n\t}\n\n\t/* ─── Container ──────────────────────────────────── */\n\t.tw.svelte-j4rvbp {\n\t\tposition: relative;\n\t\tdisplay: flex;\n\t\tflex-direction: column;\n\t\toverflow: hidden;\n\t\tuser-select: none;\n\t\tfont-variant-numeric: tabular-nums;\n\t\tbackground: var(--dt-bg, #ffffff);\n\t\t-webkit-tap-highlight-color: transparent;\n\t}\n\t.tw--auto.svelte-j4rvbp { overflow: visible; }\n\n\t/* ─── Scroll container ───────────────────────────── */\n\t.tw-scroll.svelte-j4rvbp {\n\t\tflex: 1;\n\t\tmin-height: 0;\n\t\toverflow-y: auto;\n\t\toverflow-x: auto;\n\t\toverscroll-behavior: contain;\n\t\tscrollbar-width: thin;\n\t\tscrollbar-color: var(--dt-scrollbar, rgba(0, 0, 0, 0.1)) transparent;\n\t}\n\t.tw--auto.svelte-j4rvbp .tw-scroll:where(.svelte-j4rvbp) { overflow-y: visible; }\n\t.tw-scroll.svelte-j4rvbp::-webkit-scrollbar { width: 5px; height: 5px; }\n\t.tw-scroll.svelte-j4rvbp::-webkit-scrollbar-thumb {\n\t\tbackground: var(--dt-scrollbar, rgba(0, 0, 0, 0.1));\n\t\tborder-radius: 4px;\n\t}\n\t.tw-scroll.svelte-j4rvbp::-webkit-scrollbar-track { background: transparent; }\n\n\t.tw-inner.svelte-j4rvbp {\n\t\tdisplay: flex;\n\t\tflex-direction: column;\n\t\twidth: 100%;\n\t}\n\n\t/* ─── Sticky top (header + all-day) ──────────────── */\n\t.tw-top.svelte-j4rvbp {\n\t\tposition: sticky;\n\t\ttop: 0;\n\t\tz-index: 30;\n\t\tbackground: var(--dt-bg, #ffffff);\n\t\tborder-bottom: 1px solid var(--dt-border, rgba(0, 0, 0, 0.08));\n\t}\n\n\t/* ─── Day header row ─────────────────────────────── */\n\t.tw-head.svelte-j4rvbp {\n\t\tdisplay: flex;\n\t}\n\n\t.tw-corner.svelte-j4rvbp {\n\t\tflex-shrink: 0;\n\t\tposition: sticky;\n\t\tleft: 0;\n\t\tz-index: 2;\n\t\tbackground: var(--dt-bg, #ffffff);\n\t}\n\n\t.tw-hd.svelte-j4rvbp {\n\t\tflex: 1 1 0;\n\t\tmin-width: 110px;\n\t\tdisplay: flex;\n\t\tflex-direction: column;\n\t\talign-items: center;\n\t\tgap: 2px;\n\t\tpadding: 8px 4px 6px;\n\t\tborder-left: 1px solid var(--dt-border, rgba(0, 0, 0, 0.08));\n\t}\n\n\t.tw-hd-wd.svelte-j4rvbp {\n\t\tfont: 500 10px/1 var(--dt-sans, system-ui, sans-serif);\n\t\tletter-spacing: 0.06em;\n\t\ttext-transform: uppercase;\n\t\tcolor: var(--dt-text-3, rgba(0, 0, 0, 0.38));\n\t}\n\t.tw-hd--today.svelte-j4rvbp .tw-hd-wd:where(.svelte-j4rvbp) {\n\t\tcolor: var(--dt-accent, #2563eb);\n\t\tfont-weight: 600;\n\t}\n\n\t.tw-hd-num.svelte-j4rvbp {\n\t\tdisplay: inline-flex;\n\t\talign-items: center;\n\t\tjustify-content: center;\n\t\tmin-width: 26px;\n\t\theight: 26px;\n\t\tborder-radius: 50%;\n\t\tfont: 600 14px/1 var(--dt-sans, system-ui, sans-serif);\n\t\tcolor: var(--dt-text, rgba(0, 0, 0, 0.87));\n\t}\n\t.tw-hd-num--today.svelte-j4rvbp {\n\t\tbackground: var(--dt-accent, #2563eb);\n\t\tcolor: var(--dt-accent-fg, #ffffff);\n\t\tfont-weight: 700;\n\t}\n\n\t.tw-hd-custom.svelte-j4rvbp {\n\t\tmax-width: 100%;\n\t\toverflow: hidden;\n\t}\n\n\t/* ─── All-day strip ──────────────────────────────── */\n\t.tw-allday.svelte-j4rvbp {\n\t\tdisplay: flex;\n\t\tborder-top: 1px solid var(--dt-border, rgba(0, 0, 0, 0.08));\n\t}\n\n\t.tw-ad-gutter.svelte-j4rvbp {\n\t\tflex-shrink: 0;\n\t\tposition: sticky;\n\t\tleft: 0;\n\t\tz-index: 2;\n\t\tbackground: var(--dt-bg, #ffffff);\n\t\tdisplay: flex;\n\t\talign-items: flex-start;\n\t\tjustify-content: flex-end;\n\t\tpadding: 4px 6px 4px 0;\n\t}\n\t.tw-ad-gutter-lb.svelte-j4rvbp {\n\t\tfont: 500 10px/1.2 var(--dt-sans, system-ui, sans-serif);\n\t\tcolor: var(--dt-text-3, rgba(0, 0, 0, 0.38));\n\t\ttext-align: right;\n\t}\n\n\t.tw-ad-cell.svelte-j4rvbp {\n\t\tflex: 1 1 0;\n\t\tmin-width: 110px;\n\t\tdisplay: flex;\n\t\tflex-direction: column;\n\t\tgap: 2px;\n\t\tpadding: 3px 3px 4px;\n\t\tborder-left: 1px solid var(--dt-border, rgba(0, 0, 0, 0.08));\n\t}\n\t.tw-ad-cell--today.svelte-j4rvbp { background: var(--dt-today-bg, rgba(37, 99, 235, 0.04)); }\n\n\t.tw-ad.svelte-j4rvbp {\n\t\tappearance: none;\n\t\tdisplay: flex;\n\t\talign-items: center;\n\t\tgap: 3px;\n\t\tpadding: 2px 6px;\n\t\tmin-height: 18px;\n\t\tborder: none;\n\t\tborder-radius: 3px;\n\t\tbackground: color-mix(in srgb, var(--ev-color) 22%, var(--dt-surface, var(--dt-bg, #ffffff)));\n\t\tborder-left: 2.5px solid var(--ev-color);\n\t\tcursor: pointer;\n\t\toverflow: hidden;\n\t\ttext-align: left;\n\t\ttransition: background 0.12s;\n\t\t-webkit-tap-highlight-color: transparent;\n\t}\n\t.tw-ad.svelte-j4rvbp:hover {\n\t\tbackground: color-mix(in srgb, var(--ev-color) 32%, var(--dt-surface, var(--dt-bg, #ffffff)));\n\t}\n\t.tw-ad--mid.svelte-j4rvbp,\n\t.tw-ad--end.svelte-j4rvbp:not(.tw-ad--start) {\n\t\tborder-left: 1px dashed color-mix(in srgb, var(--ev-color) 40%, transparent);\n\t\tborder-radius: 0 3px 3px 0;\n\t}\n\t.tw-ad--selected.svelte-j4rvbp {\n\t\tbox-shadow: 0 0 0 1.5px var(--ev-color);\n\t}\n\t.tw-ad--cancelled.svelte-j4rvbp .tw-ad-title:where(.svelte-j4rvbp) {\n\t\ttext-decoration: line-through;\n\t\tcolor: var(--dt-text-2, rgba(0, 0, 0, 0.54));\n\t}\n\t.tw-ad.svelte-j4rvbp:focus-visible {\n\t\toutline: none;\n\t\tbox-shadow: 0 0 0 2px var(--dt-accent, #2563eb);\n\t}\n\n\t.tw-ad-title.svelte-j4rvbp {\n\t\tfont: 500 11px/1.2 var(--dt-sans, system-ui, sans-serif);\n\t\tcolor: var(--dt-text, rgba(0, 0, 0, 0.87));\n\t\twhite-space: nowrap;\n\t\toverflow: hidden;\n\t\ttext-overflow: ellipsis;\n\t\tflex: 1;\n\t\tmin-width: 0;\n\t}\n\t.tw-ad-span.svelte-j4rvbp {\n\t\tfont: 400 10px/1 var(--dt-sans, system-ui, sans-serif);\n\t\tcolor: var(--dt-text-2, rgba(0, 0, 0, 0.54));\n\t\tflex-shrink: 0;\n\t}\n\t.tw-ad-cont.svelte-j4rvbp,\n\t.tw-ad-arrow.svelte-j4rvbp {\n\t\tfont-size: 10px;\n\t\tcolor: var(--ev-color);\n\t\tflex-shrink: 0;\n\t\tline-height: 1;\n\t}\n\t.tw-ad-arrow.svelte-j4rvbp { margin-left: auto; }\n\n\t.tw-ad-more.svelte-j4rvbp {\n\t\tappearance: none;\n\t\tbackground: none;\n\t\tborder: none;\n\t\tborder-radius: 3px;\n\t\ttext-align: left;\n\t\talign-self: flex-start;\n\t\tfont: 500 10px/1 var(--dt-sans, system-ui, sans-serif);\n\t\tcolor: var(--dt-text-2, rgba(0, 0, 0, 0.54));\n\t\tpadding: 2px 6px;\n\t\tcursor: pointer;\n\t\t-webkit-tap-highlight-color: transparent;\n\t}\n\t.tw-ad-more.svelte-j4rvbp:hover { color: var(--dt-text, rgba(0, 0, 0, 0.87)); }\n\t.tw-ad-more.svelte-j4rvbp:focus-visible {\n\t\toutline: none;\n\t\tbox-shadow: 0 0 0 2px var(--dt-accent, #2563eb);\n\t}\n\n\t/* ─── Grid body ──────────────────────────────────── */\n\t.tw-body.svelte-j4rvbp {\n\t\tdisplay: flex;\n\t\tposition: relative;\n\t}\n\n\t/* ─── Time gutter ────────────────────────────────── */\n\t.tw-gutter.svelte-j4rvbp {\n\t\tflex-shrink: 0;\n\t\tposition: sticky;\n\t\tleft: 0;\n\t\tz-index: 20;\n\t\tbackground: var(--dt-bg, #ffffff);\n\t\tborder-right: 1px solid var(--dt-border, rgba(0, 0, 0, 0.08));\n\t}\n\n\t.tw-gutter-lb.svelte-j4rvbp {\n\t\tposition: absolute;\n\t\tright: 6px;\n\t\ttransform: translateY(-50%);\n\t\tfont: 500 11px/1 var(--dt-mono, ui-monospace, monospace);\n\t\tcolor: var(--dt-text-3, rgba(0, 0, 0, 0.38));\n\t\twhite-space: nowrap;\n\t}\n\n\t.tw-gutter-now.svelte-j4rvbp {\n\t\tposition: absolute;\n\t\tright: -3px;\n\t\twidth: 6px;\n\t\theight: 6px;\n\t\tborder-radius: 50%;\n\t\tbackground: var(--dt-accent, #2563eb);\n\t\ttransform: translateY(-50%);\n\t\tz-index: 2;\n\t}\n\n\t/* ─── Columns wrapper ────────────────────────────── */\n\t.tw-cols.svelte-j4rvbp {\n\t\tflex: 1;\n\t\tdisplay: flex;\n\t\tposition: relative;\n\t\tmin-width: 0;\n\t}\n\n\t/* ─── Guide lines ────────────────────────────────── */\n\t.tw-lines.svelte-j4rvbp {\n\t\tposition: absolute;\n\t\tinset: 0;\n\t\tpointer-events: none;\n\t\t/* Above the columns' background washes, below blocked/events/now */\n\t\tz-index: 1;\n\t}\n\t.tw-line.svelte-j4rvbp {\n\t\tposition: absolute;\n\t\tleft: 0;\n\t\tright: 0;\n\t\theight: 1px;\n\t\tbackground: var(--dt-border, rgba(0, 0, 0, 0.08));\n\t}\n\t.tw-line--half.svelte-j4rvbp { opacity: 0.4; }\n\n\t/* ─── Day column ─────────────────────────────────── */\n\t.tw-col.svelte-j4rvbp {\n\t\tflex: 1 1 0;\n\t\tmin-width: 110px;\n\t\tposition: relative;\n\t\tborder-left: 1px solid var(--dt-border, rgba(0, 0, 0, 0.08));\n\t\tbox-sizing: border-box;\n\t}\n\t/* The gutter's right border already bounds the first column */\n\t.tw-lines.svelte-j4rvbp + .tw-col:where(.svelte-j4rvbp) { border-left: none; }\n\n\t.tw-col--today.svelte-j4rvbp { background: var(--dt-today-bg, rgba(37, 99, 235, 0.04)); }\n\t/* Dim past days with a wash, never a subtree opacity (event contrast) */\n\t.tw-col--past.svelte-j4rvbp {\n\t\tbackground: color-mix(in srgb, var(--dt-text, rgba(0, 0, 0, 0.87)) 2.5%, transparent);\n\t}\n\t.tw-col--weekend.svelte-j4rvbp:not(.tw-col--today):not(.tw-col--past) {\n\t\tbackground: var(--dt-weekend-bg, rgba(0, 0, 0, 0.012));\n\t}\n\t.tw-col--disabled.svelte-j4rvbp {\n\t\tbackground: repeating-linear-gradient(\n\t\t\t45deg,\n\t\t\ttransparent,\n\t\t\ttransparent 6px,\n\t\t\tvar(--dt-border, rgba(0, 0, 0, 0.08)) 6px,\n\t\t\tvar(--dt-border, rgba(0, 0, 0, 0.08)) 7px\n\t\t) !important;\n\t}\n\n\t/* ─── Blocked slot overlay ───────────────────────── */\n\t.tw-blocked.svelte-j4rvbp {\n\t\tposition: absolute;\n\t\tleft: 0;\n\t\tright: 0;\n\t\tz-index: 2;\n\t\tbackground: repeating-linear-gradient(\n\t\t\t-45deg,\n\t\t\tcolor-mix(in srgb, var(--dt-text, rgba(0, 0, 0, 0.87)) 4%, transparent),\n\t\t\tcolor-mix(in srgb, var(--dt-text, rgba(0, 0, 0, 0.87)) 4%, transparent) 4px,\n\t\t\ttransparent 4px,\n\t\t\ttransparent 8px\n\t\t);\n\t\tpointer-events: none;\n\t\tdisplay: flex;\n\t\talign-items: flex-start;\n\t\tjustify-content: center;\n\t\toverflow: hidden;\n\t}\n\t.tw-blocked-lb.svelte-j4rvbp {\n\t\tfont: 500 10px/1 var(--dt-sans, system-ui, sans-serif);\n\t\tcolor: var(--dt-text-3, rgba(0, 0, 0, 0.38));\n\t\ttext-transform: uppercase;\n\t\tletter-spacing: 0.04em;\n\t\twhite-space: nowrap;\n\t\tpadding-top: 4px;\n\t}\n\n\t/* ─── Now line ───────────────────────────────────── */\n\t.tw-now.svelte-j4rvbp {\n\t\tposition: absolute;\n\t\tleft: 0;\n\t\tright: 0;\n\t\theight: 2px;\n\t\tbackground: var(--dt-accent, #2563eb);\n\t\tbox-shadow: 0 0 6px var(--dt-glow, rgba(37, 99, 235, 0.25));\n\t\tz-index: 12;\n\t\tpointer-events: none;\n\t\ttransform: translateY(-1px);\n\t}\n\t.tw-now-dot.svelte-j4rvbp {\n\t\tposition: absolute;\n\t\tleft: -4px;\n\t\ttop: -3px;\n\t\twidth: 8px;\n\t\theight: 8px;\n\t\tborder-radius: 50%;\n\t\tbackground: var(--dt-accent, #2563eb);\n\t}\n\n\t/* ─── Events ─────────────────────────────────────── */\n\t.tw-ev.svelte-j4rvbp {\n\t\tposition: absolute;\n\t\tz-index: 6;\n\t\tborder-radius: 5px;\n\t\tbackground: color-mix(in srgb, var(--ev-color) 14%, var(--dt-surface, var(--dt-bg, #ffffff)));\n\t\tdisplay: flex;\n\t\talign-items: stretch;\n\t\toverflow: hidden;\n\t\tcursor: grab;\n\t\t/* Pointer drags move the event, never scroll the grid */\n\t\ttouch-action: none;\n\t\ttransition: box-shadow 120ms, background 120ms;\n\t\tbox-sizing: border-box;\n\t\tmin-height: 24px;\n\t\t-webkit-tap-highlight-color: transparent;\n\t}\n\t.tw-ev.svelte-j4rvbp:hover {\n\t\tbackground: color-mix(in srgb, var(--ev-color) 24%, var(--dt-surface, var(--dt-bg, #ffffff)));\n\t\tz-index: 8;\n\t}\n\t/* Short blocks keep duration-proportional height, but get a 44px\n\t transparent hit-slop so clicks/taps still land. */\n\t.tw-ev--short.svelte-j4rvbp { overflow: visible; }\n\t.tw-ev--short.svelte-j4rvbp::after {\n\t\tcontent: '';\n\t\tposition: absolute;\n\t\tleft: 0;\n\t\tright: 0;\n\t\ttop: 50%;\n\t\ttransform: translateY(-50%);\n\t\theight: 44px;\n\t}\n\t.tw-ev--selected.svelte-j4rvbp {\n\t\tbox-shadow: 0 0 0 2px var(--ev-color),\n\t\t\t0 2px 12px color-mix(in srgb, var(--ev-color) 25%, transparent);\n\t\tz-index: 9;\n\t}\n\t.tw-ev--current.svelte-j4rvbp {\n\t\tbackground: color-mix(in srgb, var(--ev-color) 22%, var(--dt-surface, var(--dt-bg, #ffffff)));\n\t}\n\t.tw-ev--resizing.svelte-j4rvbp {\n\t\tz-index: 50;\n\t\tbox-shadow: 0 4px 20px rgba(0, 0, 0, 0.25);\n\t\tcursor: ns-resize;\n\t}\n\t/* Status treatments: token-level dims + a non-opacity signal\n\t (strikethrough / border style) — consistent with the other views. */\n\t.tw-ev--cancelled.svelte-j4rvbp {\n\t\tbackground: color-mix(in srgb, var(--ev-color) 5%, var(--dt-surface, var(--dt-bg, #ffffff)));\n\t}\n\t.tw-ev--cancelled.svelte-j4rvbp .tw-ev-title:where(.svelte-j4rvbp) {\n\t\ttext-decoration: line-through;\n\t\tcolor: var(--dt-text-2, rgba(0, 0, 0, 0.54));\n\t}\n\t.tw-ev--cancelled.svelte-j4rvbp .tw-ev-stripe:where(.svelte-j4rvbp) { opacity: 0.45; /* decorative bar only */ }\n\t.tw-ev--tentative.svelte-j4rvbp {\n\t\tbackground: color-mix(in srgb, var(--ev-color) 6%, var(--dt-surface, var(--dt-bg, #ffffff)));\n\t\tborder: 1px dashed color-mix(in srgb, var(--ev-color) 45%, transparent);\n\t}\n\t.tw-ev--full.svelte-j4rvbp {\n\t\tbackground: color-mix(in srgb, var(--ev-color) 6%, var(--dt-surface, var(--dt-bg, #ffffff)));\n\t\tborder: 1px solid color-mix(in srgb, var(--ev-color) 30%, transparent);\n\t}\n\t.tw-ev--full.svelte-j4rvbp .tw-ev-title:where(.svelte-j4rvbp) { color: var(--dt-text-2, rgba(0, 0, 0, 0.54)); }\n\t.tw-ev--limited.svelte-j4rvbp {\n\t\tbackground: color-mix(in srgb, var(--ev-color) 8%, var(--dt-surface, var(--dt-bg, #ffffff)));\n\t\tborder: 1px dashed color-mix(in srgb, var(--ev-color) 45%, transparent);\n\t}\n\t.tw-ev--readonly.svelte-j4rvbp { cursor: default; }\n\n\t.tw-ev-stripe.svelte-j4rvbp {\n\t\twidth: 3px;\n\t\tbackground: var(--ev-color);\n\t\tflex-shrink: 0;\n\t\tborder-radius: 5px 0 0 5px;\n\t}\n\n\t.tw-ev-body.svelte-j4rvbp {\n\t\tflex: 1;\n\t\tmin-width: 0;\n\t\tpadding: 3px 6px;\n\t\tdisplay: flex;\n\t\tflex-direction: column;\n\t\tgap: 1px;\n\t\toverflow: hidden;\n\t}\n\t/* Compact (< ~35min at default zoom): single inline line \"9:00 Title\" */\n\t.tw-ev--compact.svelte-j4rvbp .tw-ev-body:where(.svelte-j4rvbp) {\n\t\tflex-direction: row;\n\t\talign-items: center;\n\t\tgap: 4px;\n\t\tpadding-top: 1px;\n\t\tpadding-bottom: 1px;\n\t}\n\n\t.tw-ev-time.svelte-j4rvbp {\n\t\tfont: 400 11px/1.1 var(--dt-mono, ui-monospace, monospace);\n\t\tcolor: var(--dt-text-2, rgba(0, 0, 0, 0.54));\n\t\twhite-space: nowrap;\n\t\tflex-shrink: 0;\n\t}\n\t.tw-ev--compact.svelte-j4rvbp .tw-ev-time:where(.svelte-j4rvbp) { order: 0; }\n\n\t.tw-ev-title.svelte-j4rvbp {\n\t\tfont: 600 12px/1.2 var(--dt-sans, system-ui, sans-serif);\n\t\tcolor: var(--dt-text, rgba(0, 0, 0, 0.87));\n\t\twhite-space: nowrap;\n\t\toverflow: hidden;\n\t\ttext-overflow: ellipsis;\n\t}\n\n\t.tw-ev-loc.svelte-j4rvbp {\n\t\tfont: 400 10px/1.2 var(--dt-sans, system-ui, sans-serif);\n\t\tcolor: var(--dt-text-2, rgba(0, 0, 0, 0.54));\n\t\twhite-space: nowrap;\n\t\toverflow: hidden;\n\t\ttext-overflow: ellipsis;\n\t}\n\n\t.tw-ev-live.svelte-j4rvbp {\n\t\tposition: absolute;\n\t\ttop: 4px;\n\t\tright: 4px;\n\t\twidth: 6px;\n\t\theight: 6px;\n\t\tborder-radius: 50%;\n\t\tbackground: var(--ev-color, var(--dt-accent));\n\t\tanimation: svelte-j4rvbp-tw-pulse 2s ease-in-out infinite;\n\t}\n\t@keyframes svelte-j4rvbp-tw-pulse {\n\t\t0%, 100% { opacity: 1; }\n\t\t50% { opacity: 0.4; }\n\t}\n\n\t/* ─── Resize handles ─────────────────────────────── */\n\t.tw-ev-handle.svelte-j4rvbp {\n\t\tposition: absolute;\n\t\tleft: 0;\n\t\tright: 0;\n\t\theight: 8px;\n\t\tz-index: 2;\n\t\tcursor: ns-resize;\n\t\ttouch-action: none;\n\t}\n\t.tw-ev-handle--start.svelte-j4rvbp { top: 0; }\n\t.tw-ev-handle--end.svelte-j4rvbp { bottom: 0; }\n\t/* Hit-slop: ≥20px effective, extending inward so overflow clipping\n\t can't cut it off. */\n\t.tw-ev-handle.svelte-j4rvbp::before {\n\t\tcontent: '';\n\t\tposition: absolute;\n\t\tleft: 0;\n\t\tright: 0;\n\t\theight: 20px;\n\t}\n\t.tw-ev-handle--start.svelte-j4rvbp::before { top: 0; }\n\t.tw-ev-handle--end.svelte-j4rvbp::before { bottom: 0; }\n\t/* Short events: shrink the slop so a move-grab area survives */\n\t.tw-ev--short.svelte-j4rvbp .tw-ev-handle:where(.svelte-j4rvbp)::before { height: 12px; }\n\t.tw-ev-handle.svelte-j4rvbp::after {\n\t\tcontent: '';\n\t\tposition: absolute;\n\t\tleft: 50%;\n\t\ttransform: translateX(-50%);\n\t\twidth: 20px;\n\t\theight: 3px;\n\t\tborder-radius: 2px;\n\t\tbackground: var(--ev-color);\n\t\topacity: 0;\n\t\ttransition: opacity 120ms;\n\t}\n\t.tw-ev-handle--start.svelte-j4rvbp::after { top: 1px; }\n\t.tw-ev-handle--end.svelte-j4rvbp::after { bottom: 1px; }\n\t.tw-ev.svelte-j4rvbp:hover .tw-ev-handle:where(.svelte-j4rvbp)::after,\n\t.tw-ev.svelte-j4rvbp:focus-within .tw-ev-handle:where(.svelte-j4rvbp)::after,\n\t.tw-ev.svelte-j4rvbp:focus-visible .tw-ev-handle:where(.svelte-j4rvbp)::after,\n\t.tw-ev--resizing.svelte-j4rvbp .tw-ev-handle:where(.svelte-j4rvbp)::after,\n\t.tw-ev--selected.svelte-j4rvbp .tw-ev-handle:where(.svelte-j4rvbp)::after { opacity: 0.55; }\n\t/* Coarse pointers can't hover — show the grips persistently */\n\t@media (hover: none) {\n\t\t.tw-ev-handle.svelte-j4rvbp::after { opacity: 0.55; }\n\t}\n\n\t/* ─── Move / create ghost ────────────────────────── */\n\t.tw-ghost.svelte-j4rvbp {\n\t\tposition: absolute;\n\t\tleft: 1px;\n\t\tright: 3px;\n\t\tz-index: 40;\n\t\tborder-radius: 5px;\n\t\tbackground: color-mix(in srgb, var(--ev-color) 22%, var(--dt-surface, var(--dt-bg, #ffffff)));\n\t\toutline: 1px solid color-mix(in srgb, var(--ev-color) 45%, transparent);\n\t\tbox-shadow: 0 6px 18px color-mix(in srgb, var(--ev-color) 24%, rgba(0, 0, 0, 0.22));\n\t\tdisplay: flex;\n\t\tflex-direction: column;\n\t\tgap: 1px;\n\t\tpadding: 3px 6px;\n\t\toverflow: hidden;\n\t\tpointer-events: none;\n\t\tcursor: grabbing;\n\t\tbox-sizing: border-box;\n\t}\n\t.tw-ghost--create.svelte-j4rvbp {\n\t\tbackground: color-mix(in srgb, var(--ev-color) 12%, transparent);\n\t\toutline: 1px dashed color-mix(in srgb, var(--ev-color) 60%, transparent);\n\t\tbox-shadow: none;\n\t}\n\t.tw-ghost-time.svelte-j4rvbp {\n\t\tfont: 600 11px/1.1 var(--dt-mono, ui-monospace, monospace);\n\t\tcolor: var(--ev-color, var(--dt-accent, #2563eb));\n\t\twhite-space: nowrap;\n\t}\n\t.tw-ghost-title.svelte-j4rvbp {\n\t\tfont: 600 12px/1.2 var(--dt-sans, system-ui, sans-serif);\n\t\tcolor: var(--dt-text, rgba(0, 0, 0, 0.87));\n\t\twhite-space: nowrap;\n\t\toverflow: hidden;\n\t\ttext-overflow: ellipsis;\n\t}\n\n\t/* ─── Empty overlay ──────────────────────────────── */\n\t.tw-empty.svelte-j4rvbp {\n\t\tposition: absolute;\n\t\tinset: 0;\n\t\tdisplay: flex;\n\t\talign-items: center;\n\t\tjustify-content: center;\n\t\tpointer-events: none;\n\t\tz-index: 4;\n\t}\n\n\t/* ─── Focus-visible ──────────────────────────────── */\n\t/* box-shadow instead of outline: outlines get clipped by the\n\t overflow: hidden scroll container. */\n\t.tw-ev.svelte-j4rvbp:focus-visible {\n\t\toutline: none;\n\t\tbox-shadow: 0 0 0 2px var(--dt-accent, #2563eb);\n\t\tz-index: 9;\n\t}\n\n\t/* ─── Reduced motion ─────────────────────────────── */\n\t@media (prefers-reduced-motion: reduce) {\n\t\t.tw-ev.svelte-j4rvbp,\n\t\t.tw-ad.svelte-j4rvbp,\n\t\t.tw-ev-handle.svelte-j4rvbp::after {\n\t\t\ttransition: none;\n\t\t}\n\t\t.tw-ev-live.svelte-j4rvbp { animation: none; }\n\t}\n\n\t/* ═══ Container ═══ */\n\t.ag.svelte-n8lbn1 {\n\t\tposition: relative;\n\t\toverflow: hidden;\n\t\tdisplay: flex;\n\t\tflex-direction: column;\n\t\theight: 100%;\n\t\twidth: 100%;\n\t\tmin-width: 0;\n\t\tbox-sizing: border-box;\n\t\tcolor: var(--dt-text, rgba(0, 0, 0, 0.87));\n\t\tfont-family: var(--dt-sans, system-ui, sans-serif);\n\t}\n\n\t.ag--auto.svelte-n8lbn1 { height: auto; overflow: visible; }\n\n\t/* Button UA reset for interactive cards/rows (real <button>s for a11y).\n\t Placed first so later component rules override it.\n\t user-select is scoped here (not on .ag) so event text stays copyable. */\n\t.ag-card.svelte-n8lbn1,\n\t.ag-allday-chip.svelte-n8lbn1,\n\t.ag-compact-row.svelte-n8lbn1,\n\t.ag-q-now.svelte-n8lbn1,\n\t.ag-q-done-item.svelte-n8lbn1,\n\t.ag-log-row.svelte-n8lbn1,\n\t.ag-q-done-toggle.svelte-n8lbn1 {\n\t\tfont: inherit;\n\t\tcolor: inherit;\n\t\ttext-align: left;\n\t\tbackground: none;\n\t\tborder: none;\n\t\tpadding: 0;\n\t\tmargin: 0;\n\t\tbox-sizing: border-box;\n\t\tuser-select: none;\n\t}\n\n\t.ag--disabled.svelte-n8lbn1 {\n\t\tbackground-image: repeating-linear-gradient(\n\t\t\t135deg,\n\t\t\ttransparent,\n\t\t\ttransparent 6px,\n\t\t\tcolor-mix(in srgb, var(--dt-text, rgba(0, 0, 0, 0.87)) 4%, transparent) 6px,\n\t\t\tcolor-mix(in srgb, var(--dt-text, rgba(0, 0, 0, 0.87)) 4%, transparent) 12px\n\t\t);\n\t}\n\n\t/* ═══ Body ═══ */\n\t.ag-body.svelte-n8lbn1 {\n\t\tflex: 1;\n\t\tmin-height: 0;\n\t\tmin-width: 0;\n\t\tdisplay: flex;\n\t\tflex-direction: column;\n\t\toverflow-y: auto;\n\t\toverflow-x: hidden;\n\t\toverscroll-behavior: contain;\n\t\tpadding-top: 8px;\n\t\tscrollbar-width: thin;\n\t\tscrollbar-color: var(--dt-border) transparent;\n\t}\n\n\t/* ═══ In-view date header ═══ */\n\t.ag-day-head.svelte-n8lbn1 {\n\t\tdisplay: flex;\n\t\talign-items: baseline;\n\t\tgap: 8px;\n\t\tpadding: 0 16px 6px;\n\t\tflex-shrink: 0;\n\t}\n\t.ag-day-head-badge.svelte-n8lbn1 {\n\t\tfont-size: 10px;\n\t\tfont-weight: 600;\n\t\tletter-spacing: 0.08em;\n\t\ttext-transform: uppercase;\n\t\tcolor: var(--dt-accent, #2563eb);\n\t\tbackground: color-mix(in srgb, var(--dt-accent, #2563eb) 12%, transparent);\n\t\tpadding: 2px 7px;\n\t\tborder-radius: 3px;\n\t}\n\t.ag-day-head-badge--muted.svelte-n8lbn1 {\n\t\tcolor: var(--dt-text-2, rgba(0, 0, 0, 0.54));\n\t\tbackground: color-mix(in srgb, var(--dt-text-2, rgba(0, 0, 0, 0.54)) 10%, transparent);\n\t}\n\t.ag-day-head-name.svelte-n8lbn1 {\n\t\tfont-size: 13px;\n\t\tfont-weight: 600;\n\t\tline-height: 1.2;\n\t}\n\t.ag-day-head-date.svelte-n8lbn1 {\n\t\tfont-size: 11px;\n\t\tfont-family: var(--dt-mono, monospace);\n\t\tcolor: var(--dt-text-3, rgba(0, 0, 0, 0.38));\n\t\tline-height: 1.2;\n\t}\n\t.ag--auto.svelte-n8lbn1 .ag-body:where(.svelte-n8lbn1) { overflow-y: visible; min-height: auto; }\n\t.ag-body.svelte-n8lbn1::-webkit-scrollbar {\n\t\twidth: 4px;\n\t}\n\t.ag-body.svelte-n8lbn1::-webkit-scrollbar-thumb {\n\t\tbackground: var(--dt-border);\n\t\tborder-radius: 2px;\n\t}\n\n\t/* ═══ All-day strip ═══ */\n\t.ag-allday.svelte-n8lbn1 {\n\t\tdisplay: flex;\n\t\talign-items: center;\n\t\tgap: 8px;\n\t\tpadding: 6px 16px;\n\t\tborder-bottom: 1px solid var(--dt-border, rgba(0, 0, 0, 0.08));\n\t}\n\t.ag-allday-label.svelte-n8lbn1 {\n\t\tfont: 600 10px/1 var(--dt-sans, system-ui, sans-serif);\n\t\ttext-transform: uppercase;\n\t\tletter-spacing: 0.06em;\n\t\tcolor: var(--dt-text-2, rgba(0, 0, 0, 0.54));\n\t\twhite-space: nowrap;\n\t\tflex-shrink: 0;\n\t}\n\t.ag-allday-items.svelte-n8lbn1 {\n\t\tdisplay: flex;\n\t\tflex-wrap: wrap;\n\t\tgap: 6px;\n\t}\n\t.ag-allday-chip.svelte-n8lbn1 {\n\t\tdisplay: flex;\n\t\talign-items: center;\n\t\tgap: 5px;\n\t\tpadding: 3px 10px;\n\t\tborder-radius: 6px;\n\t\tbackground: color-mix(in srgb, var(--ev-color) 12%, var(--dt-surface, var(--dt-bg, #ffffff)));\n\t\tborder: 1px solid color-mix(in srgb, var(--ev-color) 20%, transparent);\n\t\tcursor: pointer;\n\t\ttransition: background 0.15s, border-color 0.15s;\n\t}\n\t.ag-allday-chip.svelte-n8lbn1:hover,\n\t.ag-allday-chip.svelte-n8lbn1:active {\n\t\tbackground: color-mix(in srgb, var(--ev-color) 22%, var(--dt-surface, var(--dt-bg, #ffffff)));\n\t\tborder-color: color-mix(in srgb, var(--ev-color) 35%, transparent);\n\t}\n\t.ag-allday-chip.svelte-n8lbn1:focus-visible {\n\t\toutline: none;\n\t\tbox-shadow: 0 0 0 2px var(--dt-accent, #2563eb);\n\t}\n\t.ag-allday-chip--selected.svelte-n8lbn1 {\n\t\tborder-color: var(--ev-color);\n\t\tbackground: color-mix(in srgb, var(--ev-color) 18%, var(--dt-surface, var(--dt-bg, #ffffff)));\n\t}\n\t.ag-allday-dot.svelte-n8lbn1 {\n\t\twidth: 6px;\n\t\theight: 6px;\n\t\tborder-radius: 50%;\n\t\tbackground: var(--ev-color);\n\t\tflex-shrink: 0;\n\t}\n\t.ag-allday-title.svelte-n8lbn1 {\n\t\tfont: 500 0.75rem/1.2 var(--dt-sans, system-ui, sans-serif);\n\t\tcolor: var(--dt-text, rgba(0, 0, 0, 0.87));\n\t\twhite-space: nowrap;\n\t}\n\n\t/* ═══ Shared: event card ═══ */\n\t.ag-card.svelte-n8lbn1 {\n\t\tdisplay: flex;\n\t\talign-items: stretch;\n\t\tborder-radius: 10px;\n\t\tbackground: color-mix(in srgb, var(--ev-color) 15%, var(--dt-surface, var(--dt-bg, #ffffff)));\n\t\tborder: 1px solid color-mix(in srgb, var(--ev-color) 10%, var(--dt-border, rgba(0, 0, 0, 0.08)));\n\t\toverflow: hidden;\n\t\tcursor: pointer;\n\t\ttransition: background 150ms, border-color 150ms;\n\t}\n\t.ag-card.svelte-n8lbn1:hover,\n\t.ag-card.svelte-n8lbn1:active {\n\t\tbackground: color-mix(in srgb, var(--ev-color) 25%, var(--dt-surface, var(--dt-bg, #ffffff)));\n\t\tborder-color: color-mix(in srgb, var(--ev-color) 40%, transparent);\n\t}\n\t.ag-card.svelte-n8lbn1:focus-visible {\n\t\toutline: none;\n\t\tbox-shadow: 0 0 0 2px var(--dt-accent, #2563eb);\n\t}\n\t.ag-card--selected.svelte-n8lbn1 {\n\t\tborder-color: var(--ev-color);\n\t\tbackground: color-mix(in srgb, var(--ev-color) 22%, var(--dt-surface, var(--dt-bg, #ffffff)));\n\t}\n\t.ag-card--cancelled.svelte-n8lbn1 {\n\t\topacity: 0.5;\n\t}\n\t.ag-card--cancelled.svelte-n8lbn1 .ag-card-title:where(.svelte-n8lbn1) {\n\t\ttext-decoration: line-through;\n\t}\n\t.ag-card--tentative.svelte-n8lbn1 {\n\t\topacity: 0.65;\n\t\tborder-style: dashed;\n\t}\n\t.ag-card--full.svelte-n8lbn1 {\n\t\topacity: 0.55;\n\t}\n\t.ag-card--limited.svelte-n8lbn1 {\n\t\topacity: 0.65;\n\t\tborder-style: dashed;\n\t}\n\t.ag-card-body.svelte-n8lbn1 {\n\t\tpadding: 10px 12px;\n\t\tdisplay: flex;\n\t\tflex-direction: column;\n\t\tgap: 4px;\n\t\tmin-width: 0;\n\t\tflex: 1;\n\t}\n\t.ag-card-top.svelte-n8lbn1 {\n\t\tdisplay: flex;\n\t\tjustify-content: space-between;\n\t\talign-items: flex-start;\n\t\tgap: 8px;\n\t\tmin-width: 0;\n\t}\n\t.ag-card-title.svelte-n8lbn1 {\n\t\tfont-size: 13px;\n\t\tfont-weight: 600;\n\t\tline-height: 1.3;\n\t\tword-break: break-word;\n\t\tflex: 1;\n\t\tmin-width: 0;\n\t}\n\t.ag-card-meta.svelte-n8lbn1 {\n\t\tfont-size: 11px;\n\t\tcolor: var(--dt-text-2, rgba(0, 0, 0, 0.54));\n\t\tfont-family: var(--dt-mono, monospace);\n\t\tline-height: 1;\n\t}\n\t.ag-card-dur.svelte-n8lbn1 {\n\t\tmargin-left: 6px;\n\t\tcolor: var(--dt-text-3, rgba(0, 0, 0, 0.38));\n\t}\n\t.ag-card-sub.svelte-n8lbn1 {\n\t\tfont-size: 11px;\n\t\tcolor: var(--dt-text-2, rgba(0, 0, 0, 0.54));\n\t\tline-height: 1;\n\t}\n\t.ag-card-loc.svelte-n8lbn1 {\n\t\tfont-size: 10px;\n\t\tcolor: var(--dt-text-3, rgba(0, 0, 0, 0.38));\n\t\tline-height: 1;\n\t}\n\t.ag-card-tags.svelte-n8lbn1 {\n\t\tdisplay: flex;\n\t\tgap: 4px;\n\t\tflex-wrap: wrap;\n\t}\n\t.ag-card-tag.svelte-n8lbn1 {\n\t\tfont: 500 10px / 1 var(--dt-sans, system-ui, sans-serif);\n\t\tcolor: var(--ev-color, var(--dt-accent));\n\t\tbackground: color-mix(in srgb, var(--ev-color, var(--dt-accent)) 15%, transparent);\n\t\tpadding: 2px 5px;\n\t\tborder-radius: 3px;\n\t\twhite-space: nowrap;\n\t}\n\n\t/* ── Queue card variant ── */\n\t.ag-card--q.svelte-n8lbn1 {\n\t\ttransition: border-color 150ms, transform 100ms;\n\t}\n\t.ag-compact-row--queue.svelte-n8lbn1 {\n\t\tmargin: 0;\n\t}\n\n\t.ag-card--q.svelte-n8lbn1 .ag-card-body:where(.svelte-n8lbn1) {\n\t\tgap: 3px;\n\t}\n\t.ag-card--q.svelte-n8lbn1 .ag-card-tags:where(.svelte-n8lbn1) {\n\t\tmargin-top: 2px;\n\t}\n\t.ag-card-eta.svelte-n8lbn1 {\n\t\tfont-size: 11px;\n\t\tfont-weight: 600;\n\t\tletter-spacing: 0.04em;\n\t\tcolor: var(--dt-accent, #2563eb);\n\t\tflex-shrink: 0;\n\t\twhite-space: nowrap;\n\t}\n\t.ag-card--hero.svelte-n8lbn1 {\n\t\tbackground: color-mix(in srgb, var(--ev-color) 22%, var(--dt-surface, var(--dt-bg, #ffffff)));\n\t\tborder-color: color-mix(in srgb, var(--ev-color) 30%, transparent);\n\t}\n\t.ag-card--hero.svelte-n8lbn1 .ag-card-title:where(.svelte-n8lbn1) {\n\t\tfont-size: 16px;\n\t\tfont-weight: 700;\n\t}\n\t.ag-card--hero.svelte-n8lbn1 .ag-card-eta:where(.svelte-n8lbn1) {\n\t\tfont-size: 11px;\n\t\tbackground: color-mix(in srgb, var(--dt-accent, #2563eb) 18%, transparent);\n\t\tpadding: 2px 7px;\n\t\tborder-radius: 4px;\n\t}\n\t.ag-card--hero.svelte-n8lbn1 .ag-card-body:where(.svelte-n8lbn1) {\n\t\tpadding: 14px 16px;\n\t}\n\n\t/* ── Plan card variant ── */\n\n\t.ag-card--plan.svelte-n8lbn1 .ag-card-body:where(.svelte-n8lbn1) {\n\t\tpadding: 12px 14px;\n\t\tgap: 3px;\n\t}\n\t.ag-card--plan.svelte-n8lbn1 .ag-card-top:where(.svelte-n8lbn1) {\n\t\talign-items: baseline;\n\t}\n\t.ag-card-order.svelte-n8lbn1 {\n\t\tfont-size: 10px;\n\t\tfont-weight: 700;\n\t\tcolor: var(--dt-text-3, rgba(0, 0, 0, 0.38));\n\t\tfont-family: var(--dt-mono, monospace);\n\t\tflex-shrink: 0;\n\t}\n\t.ag-card--plan.svelte-n8lbn1 .ag-card-title:where(.svelte-n8lbn1) {\n\t\tfont-size: 14px;\n\t}\n\t.ag-card--first.svelte-n8lbn1 {\n\t\tbackground: color-mix(in srgb, var(--ev-color) 20%, var(--dt-surface, var(--dt-bg, #ffffff)));\n\t\tborder-color: color-mix(in srgb, var(--ev-color) 25%, transparent);\n\t}\n\t.ag-card--first.svelte-n8lbn1 .ag-card-title:where(.svelte-n8lbn1) {\n\t\tfont-size: 16px;\n\t\tfont-weight: 700;\n\t}\n\t/* Everything under the title aligns past the order number — the\n\t subtitle, location, time and tags share one left edge. */\n\t.ag-card--plan.svelte-n8lbn1 .ag-card-sub:where(.svelte-n8lbn1),\n\t.ag-card--plan.svelte-n8lbn1 .ag-card-loc:where(.svelte-n8lbn1),\n\t.ag-card--plan.svelte-n8lbn1 .ag-card-meta:where(.svelte-n8lbn1) {\n\t\tpadding-left: 22px;\n\t}\n\t.ag-card--plan.svelte-n8lbn1 .ag-card-tags:where(.svelte-n8lbn1) {\n\t\tpadding-left: 22px;\n\t\tmargin-top: 2px;\n\t}\n\n\t/* ═══ The Queue: 2-column grid ═══ */\n\t.ag-q.svelte-n8lbn1 {\n\t\tdisplay: grid;\n\t\tgrid-template-columns: 1fr 1.8fr;\n\t\tgap: 0;\n\t\tflex: 1;\n\t\tpadding: 8px 0 10px;\n\t\tmin-height: 0;\n\t}\n\t/* Mobile: stack queue columns vertically — \"Up next\" (hero) first,\n\t Now/Done status column second */\n\t.ag--mobile.svelte-n8lbn1 .ag-q:where(.svelte-n8lbn1) {\n\t\tgrid-template-columns: 1fr;\n\t\tmin-height: auto;\n\t}\n\t.ag--mobile.svelte-n8lbn1 .ag-q-status:where(.svelte-n8lbn1) {\n\t\torder: 2;\n\t\tborder-right: none;\n\t\tborder-top: 1px solid var(--dt-border, rgba(0, 0, 0, 0.08));\n\t\tpadding-top: 10px;\n\t\tmargin-top: 8px;\n\t\toverflow-y: visible;\n\t}\n\t.ag--mobile.svelte-n8lbn1 .ag-q-queue:where(.svelte-n8lbn1) {\n\t\torder: 1;\n\t\toverflow-y: visible;\n\t\tpadding-bottom: 16px;\n\t}\n\t.ag--mobile.svelte-n8lbn1 .ag-card-meta:where(.svelte-n8lbn1) {\n\t\tline-height: 1.3;\n\t\tpadding-bottom: 1px;\n\t}\n\t/* Mobile: larger touch targets */\n\t.ag--mobile.svelte-n8lbn1 .ag-card-body:where(.svelte-n8lbn1) {\n\t\tpadding: 14px 16px;\n\t}\n\t.ag--mobile.svelte-n8lbn1 .ag-card-title:where(.svelte-n8lbn1) {\n\t\tfont-size: 15px;\n\t}\n\t.ag--mobile.svelte-n8lbn1 .ag-card--hero:where(.svelte-n8lbn1) .ag-card-title:where(.svelte-n8lbn1) {\n\t\tfont-size: 18px;\n\t}\n\t.ag--mobile.svelte-n8lbn1 .ag-card--hero:where(.svelte-n8lbn1) .ag-card-body:where(.svelte-n8lbn1) {\n\t\tpadding: 16px 18px;\n\t}\n\t.ag--mobile.svelte-n8lbn1 .ag-log-row:where(.svelte-n8lbn1) {\n\t\tpadding: 12px 0;\n\t}\n\t.ag--mobile.svelte-n8lbn1 .ag-card--plan:where(.svelte-n8lbn1) .ag-card-body:where(.svelte-n8lbn1) {\n\t\tpadding: 14px 16px;\n\t}\n\t.ag--mobile.svelte-n8lbn1 .ag-card--plan:where(.svelte-n8lbn1) .ag-card-title:where(.svelte-n8lbn1) {\n\t\tfont-size: 15px;\n\t}\n\t/* Mobile: Now/Done status subtree type scale */\n\t.ag--mobile.svelte-n8lbn1 .ag-q-label:where(.svelte-n8lbn1) {\n\t\tfont-size: 11px;\n\t}\n\t.ag--mobile.svelte-n8lbn1 .ag-q-clock:where(.svelte-n8lbn1) {\n\t\tfont-size: 12px;\n\t}\n\t.ag--mobile.svelte-n8lbn1 .ag-q-now-title:where(.svelte-n8lbn1) {\n\t\tfont-size: 16px;\n\t}\n\t.ag--mobile.svelte-n8lbn1 .ag-q-now-sub:where(.svelte-n8lbn1) {\n\t\tfont-size: 13px;\n\t}\n\t.ag--mobile.svelte-n8lbn1 .ag-q-now-time:where(.svelte-n8lbn1) {\n\t\tfont-size: 12px;\n\t}\n\t.ag--mobile.svelte-n8lbn1 .ag-q-free-label:where(.svelte-n8lbn1) {\n\t\tfont-size: 13px;\n\t}\n\t.ag--mobile.svelte-n8lbn1 .ag-q-done-title:where(.svelte-n8lbn1) {\n\t\tfont-size: 13px;\n\t}\n\t.ag--mobile.svelte-n8lbn1 .ag-q-done-check:where(.svelte-n8lbn1) {\n\t\tfont-size: 12px;\n\t}\n\t.ag--mobile.svelte-n8lbn1 .ag-card-eta:where(.svelte-n8lbn1) {\n\t\tfont-size: 12px;\n\t}\n\t.ag--mobile.svelte-n8lbn1 .ag-card-sub:where(.svelte-n8lbn1) {\n\t\tfont-size: 12px;\n\t}\n\t.ag--mobile.svelte-n8lbn1 .ag-card-loc:where(.svelte-n8lbn1) {\n\t\tfont-size: 12px;\n\t}\n\t.ag--mobile.svelte-n8lbn1 .ag-card-tag:where(.svelte-n8lbn1) {\n\t\tfont-size: 11px;\n\t}\n\t.ag--mobile.svelte-n8lbn1 .ag-log-time:where(.svelte-n8lbn1),\n\t.ag--mobile.svelte-n8lbn1 .ag-log-dur:where(.svelte-n8lbn1) {\n\t\tfont-size: 12px;\n\t}\n\t.ag--mobile.svelte-n8lbn1 .ag-log-title:where(.svelte-n8lbn1) {\n\t\tfont-size: 15px;\n\t}\n\t.ag-q-label.svelte-n8lbn1 {\n\t\tfont-size: 10px;\n\t\tfont-weight: 600;\n\t\tletter-spacing: 0.14em;\n\t\ttext-transform: uppercase;\n\t\tcolor: var(--dt-text-3, rgba(0, 0, 0, 0.38));\n\t\tmargin-bottom: 8px;\n\t\tpadding: 0 12px;\n\t\tfont-family: var(--dt-sans, system-ui, sans-serif);\n\t}\n\t.ag-q-empty.svelte-n8lbn1 {\n\t\tdisplay: flex;\n\t\talign-items: center;\n\t\tjustify-content: center;\n\t\tflex: 1;\n\t\tfont-size: 13px;\n\t\tfont-weight: 300;\n\t\tcolor: var(--dt-text-3, rgba(0, 0, 0, 0.38));\n\t}\n\n\t/* ── NOW column (includes Done above) ── */\n\t.ag-q-status.svelte-n8lbn1 {\n\t\tpadding: 0 10px 0 14px;\n\t\tborder-right: 1px solid var(--dt-border, rgba(0, 0, 0, 0.08));\n\t\tdisplay: flex;\n\t\tflex-direction: column;\n\t\toverflow-y: auto;\n\t\tscrollbar-width: none;\n\t}\n\t.ag-q-status.svelte-n8lbn1::-webkit-scrollbar {\n\t\tdisplay: none;\n\t}\n\t.ag-q-done-toggle.svelte-n8lbn1 {\n\t\talign-self: flex-start;\n\t\tmargin-top: 2px;\n\t\tpadding: 3px 8px;\n\t\tborder: 1px solid var(--dt-border);\n\t\tborder-radius: 999px;\n\t\tbackground: none;\n\t\tfont-family: var(--dt-mono);\n\t\tfont-size: 11px;\n\t\tcolor: var(--dt-text-3);\n\t\tcursor: pointer;\n\t}\n\t.ag-q-done-toggle.svelte-n8lbn1:hover,\n\t.ag-q-done-toggle.svelte-n8lbn1:active {\n\t\tcolor: var(--dt-text);\n\t\tborder-color: var(--dt-text-3);\n\t}\n\t.ag-q-done-toggle.svelte-n8lbn1:focus-visible {\n\t\toutline: none;\n\t\tbox-shadow: 0 0 0 2px var(--dt-accent, #2563eb);\n\t}\n\t.ag-q-now-sub.svelte-n8lbn1 {\n\t\tfont-size: 12px;\n\t\tcolor: var(--dt-text-2);\n\t\tmargin-top: 1px;\n\t}\n\t.ag-q-done-section.svelte-n8lbn1 {\n\t\tmargin-top: 12px;\n\t\tpadding-top: 10px;\n\t\tborder-top: 1px solid var(--dt-border, rgba(0, 0, 0, 0.08));\n\t}\n\t.ag-q-clock.svelte-n8lbn1 {\n\t\tfont-size: 11px;\n\t\tfont-weight: 600;\n\t\tfont-family: var(--dt-mono, monospace);\n\t\tcolor: var(--dt-accent, #2563eb);\n\t\tmargin-left: 4px;\n\t}\n\t.ag-q-now.svelte-n8lbn1 {\n\t\tdisplay: block;\n\t\twidth: 100%;\n\t\tpadding: 8px 10px;\n\t\tmargin-bottom: 8px;\n\t\tborder-radius: 8px;\n\t\tbackground: color-mix(in srgb, var(--ev-color, var(--dt-accent)) 15%, var(--dt-surface, var(--dt-bg, #ffffff)));\n\t\tborder: 1px solid color-mix(in srgb, var(--ev-color, var(--dt-accent)) 15%, transparent);\n\t\tcursor: pointer;\n\t\ttransition: background 150ms, border-color 150ms;\n\t}\n\t.ag-q-now.svelte-n8lbn1:hover,\n\t.ag-q-now.svelte-n8lbn1:active {\n\t\tbackground: color-mix(in srgb, var(--ev-color, var(--dt-accent)) 25%, var(--dt-surface, var(--dt-bg, #ffffff)));\n\t\tborder-color: color-mix(in srgb, var(--ev-color, var(--dt-accent)) 35%, transparent);\n\t}\n\t.ag-q-now.svelte-n8lbn1:focus-visible {\n\t\toutline: none;\n\t\tbox-shadow: 0 0 0 2px var(--dt-accent, #2563eb);\n\t}\n\t.ag-q-now--selected.svelte-n8lbn1 {\n\t\tborder-color: var(--ev-color, var(--dt-accent));\n\t}\n\t.ag-q-now-dot.svelte-n8lbn1 {\n\t\twidth: 6px;\n\t\theight: 6px;\n\t\tborder-radius: 50%;\n\t\tbackground: var(--ev-color, var(--dt-accent, #2563eb));\n\t\tmargin-bottom: 6px;\n\t\tanimation: svelte-n8lbn1-ag-pulse 2.5s ease-in-out infinite;\n\t}\n\t@keyframes svelte-n8lbn1-ag-pulse {\n\t\t0%, 100% { opacity: 1; }\n\t\t50% { opacity: 0.4; }\n\t}\n\t@media (prefers-reduced-motion: reduce) {\n\t\t.ag-q-now-dot.svelte-n8lbn1 {\n\t\t\tanimation: none;\n\t\t}\n\t\t.ag-q-now-fill.svelte-n8lbn1 {\n\t\t\ttransition: none;\n\t\t}\n\t}\n\t.ag-q-now-title.svelte-n8lbn1 {\n\t\tfont-size: 12px;\n\t\tfont-weight: 600;\n\t\tline-height: 1.25;\n\t\tcolor: var(--dt-text, rgba(0, 0, 0, 0.87));\n\t\tdisplay: -webkit-box;\n\t\t-webkit-box-orient: vertical;\n\t\t-webkit-line-clamp: 2;\n\t\tline-clamp: 2;\n\t\toverflow: hidden;\n\t\tword-break: break-word;\n\t\tmargin-bottom: 3px;\n\t}\n\t.ag-q-now-time.svelte-n8lbn1 {\n\t\tfont-size: 11px;\n\t\tfont-family: var(--dt-mono, monospace);\n\t\tcolor: var(--dt-text-3, rgba(0, 0, 0, 0.38));\n\t\tmargin-bottom: 6px;\n\t}\n\t.ag-q-now-track.svelte-n8lbn1 {\n\t\theight: 2px;\n\t\tbackground: var(--dt-border, rgba(0, 0, 0, 0.08));\n\t\tborder-radius: 1px;\n\t\toverflow: hidden;\n\t}\n\t.ag-q-now-fill.svelte-n8lbn1 {\n\t\theight: 100%;\n\t\twidth: 100%;\n\t\tbackground: var(--ev-color, var(--dt-accent, #2563eb));\n\t\tborder-radius: 1px;\n\t\ttransform-origin: left;\n\t\ttransition: transform 1s linear;\n\t}\n\t.ag-q-free.svelte-n8lbn1 {\n\t\tpadding: 8px 10px;\n\t\tmargin-right: 10px;\n\t}\n\t.ag-q-free-label.svelte-n8lbn1 {\n\t\tfont-size: 12px;\n\t\tfont-weight: 300;\n\t\tcolor: var(--dt-text-3, rgba(0, 0, 0, 0.38));\n\t\tmargin-bottom: 2px;\n\t}\n\n\t/* ── NEXT: hero center column ── */\n\t.ag-q-queue.svelte-n8lbn1 {\n\t\tpadding: 0 16px;\n\t\toverflow-y: auto;\n\t\tscrollbar-width: none;\n\t\tdisplay: flex;\n\t\tflex-direction: column;\n\t\tgap: 8px;\n\t}\n\t.ag-q-queue.svelte-n8lbn1::-webkit-scrollbar {\n\t\tdisplay: none;\n\t}\n\n\n\t.ag-q-done-item.svelte-n8lbn1 {\n\t\tdisplay: flex;\n\t\talign-items: center;\n\t\tgap: 5px;\n\t\tpadding: 3px 0;\n\t\twidth: 100%;\n\t\tcursor: pointer;\n\t}\n\t.ag-q-done-item.svelte-n8lbn1:hover .ag-q-done-title:where(.svelte-n8lbn1),\n\t.ag-q-done-item.svelte-n8lbn1:active .ag-q-done-title:where(.svelte-n8lbn1),\n\t.ag-q-done-item--selected.svelte-n8lbn1 .ag-q-done-title:where(.svelte-n8lbn1) {\n\t\tcolor: var(--dt-text, rgba(0, 0, 0, 0.87));\n\t}\n\t.ag-q-done-item.svelte-n8lbn1:focus-visible {\n\t\toutline: none;\n\t\tbox-shadow: 0 0 0 2px var(--dt-accent, #2563eb);\n\t\tborder-radius: 4px;\n\t}\n\t.ag-q-done-check.svelte-n8lbn1 {\n\t\tfont-size: 11px;\n\t\tcolor: var(--dt-success, rgba(22, 163, 74, 0.7));\n\t\tflex-shrink: 0;\n\t}\n\t.ag-q-done-title.svelte-n8lbn1 {\n\t\tfont-size: 12px;\n\t\tline-height: 1.2;\n\t\tcolor: var(--dt-text-2, rgba(0, 0, 0, 0.54));\n\t\twhite-space: nowrap;\n\t\toverflow: hidden;\n\t\ttext-overflow: ellipsis;\n\t\ttext-decoration: line-through;\n\t\ttext-decoration-color: var(--dt-text-3, rgba(0, 0, 0, 0.38));\n\t\ttransition: color 150ms;\n\t}\n\n\t/* ═══ Past Day: \"The Log\" ═══\n\t Dim comes from text tokens only (single layer) — no subtree opacity. */\n\t.ag-log.svelte-n8lbn1 {\n\t\tflex: 1;\n\t\tpadding: 8px 20px 12px;\n\t\toverflow-y: auto;\n\t\tscrollbar-width: none;\n\t}\n\t.ag-log.svelte-n8lbn1::-webkit-scrollbar {\n\t\tdisplay: none;\n\t}\n\t.ag-log-row.svelte-n8lbn1 {\n\t\tdisplay: flex;\n\t\talign-items: center;\n\t\tgap: 10px;\n\t\tpadding: 8px 0;\n\t\twidth: 100%;\n\t\tborder-bottom: 1px solid var(--dt-border, rgba(0, 0, 0, 0.08));\n\t\tcursor: pointer;\n\t}\n\t.ag-log-row.svelte-n8lbn1:last-child {\n\t\tborder-bottom: none;\n\t}\n\t.ag-log-row.svelte-n8lbn1:hover .ag-log-title:where(.svelte-n8lbn1),\n\t.ag-log-row.svelte-n8lbn1:active .ag-log-title:where(.svelte-n8lbn1),\n\t.ag-log-row--selected.svelte-n8lbn1 .ag-log-title:where(.svelte-n8lbn1) {\n\t\tcolor: var(--dt-text, rgba(0, 0, 0, 0.87));\n\t}\n\t.ag-log-row.svelte-n8lbn1:focus-visible {\n\t\toutline: none;\n\t\tbox-shadow: 0 0 0 2px var(--dt-accent, #2563eb);\n\t\tborder-radius: 6px;\n\t}\n\t.ag-log-row--selected.svelte-n8lbn1 {\n\t\tbackground: color-mix(in srgb, var(--ev-color) 6%, transparent);\n\t\tborder-radius: 6px;\n\t\tpadding-left: 8px;\n\t\tpadding-right: 8px;\n\t\tmargin-left: -8px;\n\t\tmargin-right: -8px;\n\t\twidth: calc(100% + 16px);\n\t}\n\t.ag-log-check.svelte-n8lbn1 {\n\t\tfont-size: 10px;\n\t\tcolor: var(--dt-success, rgba(22, 163, 74, 0.7));\n\t\tflex-shrink: 0;\n\t}\n\t.ag-log-time.svelte-n8lbn1 {\n\t\tfont-size: 11px;\n\t\tfont-family: var(--dt-mono, monospace);\n\t\tcolor: var(--dt-text-3, rgba(0, 0, 0, 0.38));\n\t\twidth: 64px;\n\t\tflex-shrink: 0;\n\t}\n\t.ag-log-dot.svelte-n8lbn1 {\n\t\twidth: 5px;\n\t\theight: 5px;\n\t\tborder-radius: 50%;\n\t\tflex-shrink: 0;\n\t\topacity: 0.6;\n\t}\n\t.ag-log-title.svelte-n8lbn1 {\n\t\tfont-size: 13px;\n\t\tfont-weight: 500;\n\t\tline-height: 1.2;\n\t\tcolor: var(--dt-text-2, rgba(0, 0, 0, 0.54));\n\t\tflex: 1;\n\t\twhite-space: nowrap;\n\t\toverflow: hidden;\n\t\ttext-overflow: ellipsis;\n\t\ttext-decoration: line-through;\n\t\ttext-decoration-color: var(--dt-border, rgba(0, 0, 0, 0.08));\n\t\ttransition: color 150ms;\n\t\ttext-align: left;\n\t}\n\t.ag-log-dur.svelte-n8lbn1 {\n\t\tfont-size: 11px;\n\t\tfont-family: var(--dt-mono, monospace);\n\t\tcolor: var(--dt-text-3, rgba(0, 0, 0, 0.38));\n\t\tflex-shrink: 0;\n\t}\n\n\t/* ═══ Compact Day ═══ */\n\t.ag-compact-list.svelte-n8lbn1 {\n\t\tflex: 1;\n\t\tpadding: 8px 20px 12px;\n\t\toverflow-y: auto;\n\t\tscrollbar-width: none;\n\t}\n\t.ag-compact-list.svelte-n8lbn1::-webkit-scrollbar { display: none; }\n\t.ag-compact-row.svelte-n8lbn1 {\n\t\tdisplay: flex;\n\t\talign-items: baseline;\n\t\tgap: 8px;\n\t\tpadding: 4px 0;\n\t\tcursor: pointer;\n\t\tmin-width: 0;\n\t\twidth: 100%;\n\t}\n\t.ag-compact-row--selected.svelte-n8lbn1 {\n\t\tbackground: color-mix(in srgb, var(--ev-color) 10%, transparent);\n\t\tborder-radius: 4px;\n\t\t/* Highlight gutter comes from negative margins so the row's content\n\t\t stays aligned with its unselected siblings (no tap-shift). */\n\t\tpadding-left: 6px;\n\t\tpadding-right: 6px;\n\t\tmargin-left: -6px;\n\t\tmargin-right: -6px;\n\t\twidth: calc(100% + 12px);\n\t}\n\t.ag-compact-row.svelte-n8lbn1:hover .ag-compact-row-title:where(.svelte-n8lbn1),\n\t.ag-compact-row.svelte-n8lbn1:active .ag-compact-row-title:where(.svelte-n8lbn1) { color: var(--dt-text); }\n\t.ag-compact-row.svelte-n8lbn1:active {\n\t\tbackground: color-mix(in srgb, var(--ev-color) 8%, transparent);\n\t\tborder-radius: 4px;\n\t}\n\t.ag-compact-row.svelte-n8lbn1:focus-visible {\n\t\toutline: none;\n\t\tbox-shadow: 0 0 0 2px var(--dt-accent, #2563eb);\n\t\tborder-radius: 4px;\n\t}\n\t.ag-compact-row-dot.svelte-n8lbn1 {\n\t\twidth: 5px;\n\t\theight: 5px;\n\t\tborder-radius: 50%;\n\t\tbackground: var(--ev-color, var(--dt-accent));\n\t\tflex-shrink: 0;\n\t\talign-self: center;\n\t}\n\t.ag-compact-row-time.svelte-n8lbn1 {\n\t\tfont-size: 11px;\n\t\tfont-family: var(--dt-mono, monospace);\n\t\tcolor: var(--dt-text-2, rgba(0, 0, 0, 0.54));\n\t\tmin-width: 64px;\n\t\tflex-shrink: 0;\n\t\tline-height: 1.4;\n\t}\n\t/* Title + subtitle + tags cluster. One line while it fits; on mobile the\n\t metadata wraps to a second line under the title instead of crushing it. */\n\t.ag-compact-row-main.svelte-n8lbn1 {\n\t\tdisplay: flex;\n\t\talign-items: baseline;\n\t\tgap: 8px;\n\t\tflex: 1;\n\t\tmin-width: 0;\n\t}\n\t.ag--mobile.svelte-n8lbn1 .ag-compact-row-main:where(.svelte-n8lbn1) {\n\t\tflex-wrap: wrap;\n\t\trow-gap: 2px;\n\t}\n\t/* Mobile: size the title by its content when deciding line breaks — a long\n\t title claims the first line whole (ellipsizing only against the full row)\n\t and pushes subtitle/tags down instead of truncating at 35%. */\n\t.ag--mobile.svelte-n8lbn1 .ag-compact-row-title:where(.svelte-n8lbn1) {\n\t\tflex-basis: auto;\n\t}\n\t/* On its own wrapped line the subtitle gets the full width */\n\t.ag--mobile.svelte-n8lbn1 .ag-compact-row-sub:where(.svelte-n8lbn1) {\n\t\tmax-width: 100%;\n\t}\n\t/* Wrapped rows are two lines tall — center-aligning the dot floats it\n\t between lines; pin it optically to the first (title) line instead. */\n\t.ag--mobile.svelte-n8lbn1 .ag-compact-row-dot:where(.svelte-n8lbn1) {\n\t\talign-self: flex-start;\n\t\tmargin-top: 8px;\n\t}\n\t.ag-compact-row-title.svelte-n8lbn1 {\n\t\tfont-size: 12px;\n\t\tfont-weight: 500;\n\t\tcolor: color-mix(in srgb, var(--dt-text, rgba(0, 0, 0, 0.87)) 82%, transparent);\n\t\tflex: 1;\n\t\t/* The title is the row's identity — never let subtitle/tags/duration\n\t\t squeeze it out on narrow screens (flex: 1 alone resolves to 0px). */\n\t\tmin-width: 35%;\n\t\twhite-space: nowrap;\n\t\toverflow: hidden;\n\t\ttext-overflow: ellipsis;\n\t\ttransition: color 150ms;\n\t\tline-height: 1.4;\n\t\ttext-align: left;\n\t}\n\t.ag-compact-row-dur.svelte-n8lbn1 {\n\t\tfont-size: 10px;\n\t\tfont-family: var(--dt-mono, monospace);\n\t\tcolor: var(--dt-text-3, rgba(0, 0, 0, 0.38));\n\t\tflex-shrink: 0;\n\t\tline-height: 1.4;\n\t}\n\t.ag-compact-row-sub.svelte-n8lbn1 {\n\t\tfont-size: 10px;\n\t\tcolor: var(--dt-text-3, rgba(0, 0, 0, 0.38));\n\t\tflex-shrink: 3;\n\t\tmin-width: 0;\n\t\tmax-width: 45%;\n\t\twhite-space: nowrap;\n\t\toverflow: hidden;\n\t\ttext-overflow: ellipsis;\n\t\tline-height: 1.4;\n\t}\n\t.ag-compact-row-tag.svelte-n8lbn1 {\n\t\tfont: 500 10px / 1 var(--dt-sans, system-ui, sans-serif);\n\t\tcolor: var(--ev-color, var(--dt-accent));\n\t\tbackground: color-mix(in srgb, var(--ev-color, var(--dt-accent)) 12%, transparent);\n\t\tpadding: 1px 4px;\n\t\tborder-radius: 3px;\n\t\twhite-space: nowrap;\n\t\tflex-shrink: 1;\n\t\tmin-width: 2.5em;\n\t\toverflow: hidden;\n\t\ttext-overflow: ellipsis;\n\t}\n\t.ag-compact-row--cancelled.svelte-n8lbn1 { opacity: 0.5; }\n\t.ag-compact-row--cancelled.svelte-n8lbn1 .ag-compact-row-title:where(.svelte-n8lbn1) { text-decoration: line-through; }\n\t.ag-compact-row--tentative.svelte-n8lbn1 { opacity: 0.65; }\n\t/* Mobile: larger touch targets for compact rows */\n\t.ag--mobile.svelte-n8lbn1 .ag-compact-row:where(.svelte-n8lbn1) { padding: 8px 0; }\n\t.ag--mobile.svelte-n8lbn1 .ag-compact-row-title:where(.svelte-n8lbn1) { font-size: 15px; }\n\t.ag--mobile.svelte-n8lbn1 .ag-compact-row-time:where(.svelte-n8lbn1) { font-size: 12px; }\n\t.ag--mobile.svelte-n8lbn1 .ag-compact-row-dur:where(.svelte-n8lbn1) { font-size: 12px; }\n\t.ag--mobile.svelte-n8lbn1 .ag-compact-row-sub:where(.svelte-n8lbn1) { font-size: 12px; }\n\t.ag--mobile.svelte-n8lbn1 .ag-compact-row-tag:where(.svelte-n8lbn1) { font-size: 11px; }\n\t.ag--mobile.svelte-n8lbn1 .ag-day-head:where(.svelte-n8lbn1) { padding: 0 16px 8px; }\n\t.ag--mobile.svelte-n8lbn1 .ag-day-head-name:where(.svelte-n8lbn1) { font-size: 15px; }\n\t.ag--mobile.svelte-n8lbn1 .ag-day-head-date:where(.svelte-n8lbn1) { font-size: 12px; }\n\t.ag--mobile.svelte-n8lbn1 .ag-day-head-badge:where(.svelte-n8lbn1) { font-size: 11px; }\n\t.ag--mobile.svelte-n8lbn1 .ag-allday-title:where(.svelte-n8lbn1) { font-size: 0.85rem; }\n\t.ag--mobile.svelte-n8lbn1 .ag-allday-label:where(.svelte-n8lbn1) { font-size: 11px; }\n\n\t/* ═══ Future Day: \"The Plan\" ═══ */\n\t.ag-plan.svelte-n8lbn1 {\n\t\tflex: 1;\n\t\tpadding: 8px 20px 12px;\n\t\toverflow-y: auto;\n\t\tscrollbar-width: none;\n\t\tdisplay: flex;\n\t\tflex-direction: column;\n\t\tgap: 6px;\n\t}\n\t.ag-plan.svelte-n8lbn1::-webkit-scrollbar {\n\t\tdisplay: none;\n\t}\n\n\t/* ═══ Container ═══ */\n\t.ag.svelte-uhwfyj {\n\t\tposition: relative;\n\t\toverflow: hidden;\n\t\tuser-select: none;\n\t\tdisplay: flex;\n\t\tflex-direction: column;\n\t\theight: 100%;\n\t\twidth: 100%;\n\t\tmin-width: 0;\n\t\tbox-sizing: border-box;\n\t\tcolor: var(--dt-text, rgba(0, 0, 0, 0.87));\n\t\tfont-family: var(--dt-sans, system-ui, sans-serif);\n\t}\n\t.ag--auto.svelte-uhwfyj {\n\t\theight: auto;\n\t\toverflow: visible;\n\t}\n\n\t/* Button UA reset for interactive cards/rows (real <button>s for a11y).\n\t Placed first so later component rules override it. */\n\t.ag-card.svelte-uhwfyj,\n\t.ag-allday-chip.svelte-uhwfyj,\n\t.ag-compact.svelte-uhwfyj,\n\t.ag-compact-more.svelte-uhwfyj,\n\t.ag-past-toggle.svelte-uhwfyj {\n\t\tfont: inherit;\n\t\tcolor: inherit;\n\t\ttext-align: left;\n\t\tbackground: none;\n\t\tborder: none;\n\t\tpadding: 0;\n\t\tmargin: 0;\n\t\tbox-sizing: border-box;\n\t}\n\n\t/* ═══ Body ═══ */\n\t.ag-body.svelte-uhwfyj {\n\t\tflex: 1;\n\t\tmin-width: 0;\n\t\toverflow-y: auto;\n\t\toverflow-x: hidden;\n\t\tbox-sizing: border-box;\n\t\t/* No padding-top here: the sticky day headers pin at the scrollport\n\t\t edge, and container padding would leave a see-through band above\n\t\t them where scrolled cards bleed out. */\n\t\tscrollbar-width: thin;\n\t\tscrollbar-color: var(--dt-border) transparent;\n\t}\n\t.ag-wday.svelte-uhwfyj:first-child .ag-wday-head:where(.svelte-uhwfyj) {\n\t\tpadding-top: 12px;\n\t}\n\t.ag--auto.svelte-uhwfyj .ag-body:where(.svelte-uhwfyj) {\n\t\toverflow-y: visible;\n\t}\n\t.ag-body.svelte-uhwfyj::-webkit-scrollbar {\n\t\twidth: 4px;\n\t}\n\t.ag-body.svelte-uhwfyj::-webkit-scrollbar-thumb {\n\t\tbackground: var(--dt-border);\n\t\tborder-radius: 2px;\n\t}\n\n\t/* ═══ All-day chips ═══ */\n\t.ag-allday.svelte-uhwfyj {\n\t\tdisplay: flex;\n\t\tflex-wrap: wrap;\n\t\tgap: 4px;\n\t\tpadding: 4px 14px 6px;\n\t}\n\t.ag-allday-chip.svelte-uhwfyj {\n\t\tdisplay: flex;\n\t\talign-items: center;\n\t\tgap: 4px;\n\t\tpadding: 2px 8px;\n\t\tborder-radius: 5px;\n\t\tbackground: color-mix(in srgb, var(--ev-color) 12%, var(--dt-surface, var(--dt-bg, #ffffff)));\n\t\tborder: 1px solid color-mix(in srgb, var(--ev-color) 18%, transparent);\n\t\tcursor: pointer;\n\t\ttransition: background 0.15s, border-color 0.15s;\n\t}\n\t.ag-allday-chip.svelte-uhwfyj:hover,\n\t.ag-allday-chip.svelte-uhwfyj:active {\n\t\tbackground: color-mix(in srgb, var(--ev-color) 22%, var(--dt-surface, var(--dt-bg, #ffffff)));\n\t\tborder-color: color-mix(in srgb, var(--ev-color) 30%, transparent);\n\t}\n\t.ag-allday-chip.svelte-uhwfyj:focus-visible {\n\t\toutline: none;\n\t\tbox-shadow: 0 0 0 2px var(--dt-accent, #2563eb);\n\t}\n\t.ag-allday-chip--selected.svelte-uhwfyj {\n\t\tborder-color: var(--ev-color);\n\t\tbackground: color-mix(in srgb, var(--ev-color) 18%, var(--dt-surface, var(--dt-bg, #ffffff)));\n\t}\n\t.ag-allday-dot.svelte-uhwfyj {\n\t\twidth: 5px;\n\t\theight: 5px;\n\t\tborder-radius: 50%;\n\t\tbackground: var(--ev-color);\n\t\tflex-shrink: 0;\n\t}\n\t.ag-allday-title.svelte-uhwfyj {\n\t\tfont: 500 0.7rem/1.2 var(--dt-sans, system-ui, sans-serif);\n\t\tcolor: var(--dt-text, rgba(0, 0, 0, 0.87));\n\t\twhite-space: nowrap;\n\t}\n\t.ag-allday-span.svelte-uhwfyj {\n\t\tfont: 500 10px/1.2 var(--dt-mono, monospace);\n\t\tcolor: var(--dt-text-2, rgba(0, 0, 0, 0.54));\n\t\twhite-space: nowrap;\n\t}\n\n\t/* ═══ Shared: event card ═══ */\n\t.ag-card.svelte-uhwfyj {\n\t\tdisplay: flex;\n\t\talign-items: stretch;\n\t\tborder-radius: 6px;\n\t\tbackground: color-mix(in srgb, var(--ev-color) 12%, var(--dt-surface, var(--dt-bg, #ffffff)));\n\t\tborder: 1px solid color-mix(in srgb, var(--ev-color) 8%, var(--dt-border, rgba(0, 0, 0, 0.08)));\n\t\toverflow: hidden;\n\t\tcursor: pointer;\n\t\ttransition: background 150ms, border-color 150ms;\n\t}\n\t.ag-card.svelte-uhwfyj:hover,\n\t.ag-card.svelte-uhwfyj:active {\n\t\tbackground: color-mix(in srgb, var(--ev-color) 20%, var(--dt-surface, var(--dt-bg, #ffffff)));\n\t\tborder-color: color-mix(in srgb, var(--ev-color) 30%, transparent);\n\t}\n\t.ag-card.svelte-uhwfyj:focus-visible {\n\t\toutline: none;\n\t\tbox-shadow: 0 0 0 2px var(--dt-accent, #2563eb);\n\t}\n\t.ag-card--selected.svelte-uhwfyj {\n\t\tborder-color: var(--ev-color);\n\t\tbackground: color-mix(in srgb, var(--ev-color) 20%, var(--dt-surface, var(--dt-bg, #ffffff)));\n\t}\n\t.ag-card--cancelled.svelte-uhwfyj {\n\t\topacity: 0.5;\n\t}\n\t.ag-card--cancelled.svelte-uhwfyj .ag-card-title:where(.svelte-uhwfyj) {\n\t\ttext-decoration: line-through;\n\t}\n\t.ag-card--tentative.svelte-uhwfyj {\n\t\topacity: 0.65;\n\t\tborder-style: dashed;\n\t}\n\t.ag-card--full.svelte-uhwfyj {\n\t\topacity: 0.55;\n\t}\n\t.ag-card--limited.svelte-uhwfyj {\n\t\topacity: 0.65;\n\t\tborder-style: dashed;\n\t}\n\t.ag-card-body.svelte-uhwfyj {\n\t\tpadding: 7px 10px;\n\t\tdisplay: flex;\n\t\tflex-direction: column;\n\t\tgap: 2px;\n\t\tmin-width: 0;\n\t\tflex: 1;\n\t}\n\t.ag-card-title.svelte-uhwfyj {\n\t\tfont-size: 13px;\n\t\tfont-weight: 600;\n\t\tline-height: 1.3;\n\t\tword-break: break-word;\n\t\tflex: 1;\n\t\tmin-width: 0;\n\t\tdisplay: -webkit-box;\n\t\t-webkit-box-orient: vertical;\n\t\t-webkit-line-clamp: 2;\n\t\tline-clamp: 2;\n\t\toverflow: hidden;\n\t}\n\t.ag-card-meta.svelte-uhwfyj {\n\t\tdisplay: flex;\n\t\talign-items: center;\n\t\tfont-size: 11px;\n\t\tcolor: var(--dt-text-2, rgba(0, 0, 0, 0.54));\n\t\tfont-family: var(--dt-mono, monospace);\n\t\tline-height: 1;\n\t}\n\t.ag-card-dur.svelte-uhwfyj {\n\t\tmargin-left: 6px;\n\t\tcolor: var(--dt-text-3, rgba(0, 0, 0, 0.38));\n\t}\n\t.ag-card-eta.svelte-uhwfyj {\n\t\tmargin-left: auto;\n\t\tfont-size: 11px;\n\t\tfont-weight: 600;\n\t\tcolor: color-mix(in srgb, var(--dt-text, rgba(0, 0, 0, 0.87)) 60%, var(--ev-color));\n\t\tletter-spacing: 0.02em;\n\t}\n\t.ag-card-sub.svelte-uhwfyj {\n\t\tfont-size: 11px;\n\t\tcolor: var(--dt-text-2, rgba(0, 0, 0, 0.54));\n\t\tline-height: 1;\n\t}\n\t.ag-card-loc.svelte-uhwfyj {\n\t\tfont-size: 10px;\n\t\tcolor: var(--dt-text-3, rgba(0, 0, 0, 0.38));\n\t\tline-height: 1;\n\t}\n\t.ag-card-tags.svelte-uhwfyj {\n\t\tdisplay: flex;\n\t\tgap: 4px;\n\t\tflex-wrap: wrap;\n\t}\n\t.ag-card-tag.svelte-uhwfyj {\n\t\tfont: 500 10px / 1 var(--dt-sans, system-ui, sans-serif);\n\t\tcolor: var(--ev-color, var(--dt-accent));\n\t\tbackground: color-mix(in srgb, var(--ev-color, var(--dt-accent)) 15%, transparent);\n\t\tpadding: 2px 5px;\n\t\tborder-radius: 3px;\n\t\twhite-space: nowrap;\n\t}\n\t.ag-card-progress.svelte-uhwfyj {\n\t\theight: 3px;\n\t\tbackground: var(--dt-border, rgba(0, 0, 0, 0.08));\n\t\tborder-radius: 2px;\n\t\toverflow: hidden;\n\t\tmargin-top: 2px;\n\t}\n\t.ag-card-progress-fill.svelte-uhwfyj {\n\t\theight: 100%;\n\t\twidth: 100%;\n\t\tbackground: var(--ev-color, var(--dt-accent));\n\t\tborder-radius: 2px;\n\t\ttransform-origin: left;\n\t\ttransition: transform 1s linear;\n\t}\n\t@media (prefers-reduced-motion: reduce) {\n\t\t.ag-card-progress-fill.svelte-uhwfyj {\n\t\t\ttransition: none;\n\t\t}\n\t}\n\n\t/* ═══ Week day groups ═══ */\n\t.ag-wday.svelte-uhwfyj {\n\t\tborder-bottom: 1px solid var(--dt-border, rgba(0, 0, 0, 0.08));\n\t}\n\t.ag-wday.svelte-uhwfyj:last-child {\n\t\tborder-bottom: none;\n\t}\n\t.ag-wday--today.svelte-uhwfyj {\n\t\tbackground: color-mix(in srgb, var(--dt-accent, #2563eb) 2%, transparent);\n\t}\n\t.ag-wday--tomorrow.svelte-uhwfyj .ag-card:where(.svelte-uhwfyj) {\n\t\topacity: 0.82;\n\t}\n\t/* Past days: token-based text dim instead of subtree opacity (readability) */\n\t.ag-wday--past.svelte-uhwfyj .ag-wday-name:where(.svelte-uhwfyj) {\n\t\tcolor: var(--dt-text-2, rgba(0, 0, 0, 0.54));\n\t\tfont-weight: 500;\n\t}\n\t.ag-wday--past.svelte-uhwfyj .ag-wday-head:where(.svelte-uhwfyj) {\n\t\tpadding: 8px 20px 2px;\n\t}\n\t.ag-wday--disabled.svelte-uhwfyj {\n\t\tposition: relative;\n\t}\n\t.ag-wday--disabled.svelte-uhwfyj::after {\n\t\tcontent: '';\n\t\tposition: absolute;\n\t\tinset: 0;\n\t\tbackground: repeating-linear-gradient(\n\t\t\t135deg,\n\t\t\ttransparent,\n\t\t\ttransparent 4px,\n\t\t\tcolor-mix(in srgb, var(--dt-text, rgba(0, 0, 0, 0.87)) 8%, transparent) 4px,\n\t\t\tcolor-mix(in srgb, var(--dt-text, rgba(0, 0, 0, 0.87)) 8%, transparent) 8px\n\t\t);\n\t\tpointer-events: none;\n\t}\n\t.ag-wday-custom-header.svelte-uhwfyj {\n\t\tpadding: 2px 0 4px;\n\t}\n\n\t.ag-wday-head.svelte-uhwfyj {\n\t\tdisplay: flex;\n\t\tjustify-content: space-between;\n\t\talign-items: center;\n\t\tpadding: 8px 20px;\n\t\tposition: sticky;\n\t\ttop: 0;\n\t\tbackground: var(--dt-bg, #fff);\n\t\tz-index: 1;\n\t\t/* Own compositor layer: without it, fast (async) scrolling repaints\n\t\t the pinned header a frame late and a gap flashes above it. */\n\t\ttransform: translateZ(0);\n\t\twill-change: transform;\n\t}\n\t.ag-wday-head-left.svelte-uhwfyj {\n\t\tdisplay: flex;\n\t\talign-items: baseline;\n\t\tgap: 8px;\n\t}\n\t.ag-wday-badge.svelte-uhwfyj {\n\t\tfont-size: 10px;\n\t\tfont-weight: 600;\n\t\tletter-spacing: 0.08em;\n\t\ttext-transform: uppercase;\n\t\tcolor: var(--dt-accent, #2563eb);\n\t\tbackground: color-mix(in srgb, var(--dt-accent, #2563eb) 12%, transparent);\n\t\tpadding: 2px 7px;\n\t\tborder-radius: 3px;\n\t}\n\t.ag-wday-badge--muted.svelte-uhwfyj {\n\t\tcolor: var(--dt-text-2, rgba(0, 0, 0, 0.54));\n\t\tbackground: color-mix(\n\t\t\tin srgb,\n\t\t\tvar(--dt-text-2, rgba(0, 0, 0, 0.54)) 10%,\n\t\t\ttransparent\n\t\t);\n\t}\n\t.ag-wday-name.svelte-uhwfyj {\n\t\tfont-size: 13px;\n\t\tfont-weight: 600;\n\t\tline-height: 1.2;\n\t}\n\t.ag-wday-date.svelte-uhwfyj {\n\t\tfont-size: 11px;\n\t\tfont-family: var(--dt-mono, monospace);\n\t\tcolor: var(--dt-text-3, rgba(0, 0, 0, 0.38));\n\t\tline-height: 1.2;\n\t}\n\n\t.ag-wday-empty.svelte-uhwfyj {\n\t\tpadding: 2px 20px 6px;\n\t\tfont-size: 11px;\n\t\tcolor: var(--dt-text-3, rgba(0, 0, 0, 0.38));\n\t\tfont-style: italic;\n\t}\n\n\t/* Expanded day */\n\t.ag-wday-expanded.svelte-uhwfyj {\n\t\tpadding: 0 20px 10px;\n\t}\n\t.ag-wslot.svelte-uhwfyj {\n\t\tmargin-bottom: 4px;\n\t}\n\t.ag-wslot-header.svelte-uhwfyj {\n\t\tdisplay: flex;\n\t\talign-items: baseline;\n\t\tgap: 8px;\n\t\tpadding: 2px 0;\n\t}\n\t.ag-wslot-now.svelte-uhwfyj {\n\t\tfont-size: 10px;\n\t\tfont-weight: 700;\n\t\tletter-spacing: 0.08em;\n\t\ttext-transform: uppercase;\n\t\tcolor: var(--dt-accent, #2563eb);\n\t}\n\t.ag-wslot-cards.svelte-uhwfyj {\n\t\tdisplay: flex;\n\t\tflex-direction: column;\n\t\tgap: 4px;\n\t}\n\t.ag-wslot-cards--multi.svelte-uhwfyj {\n\t\tdisplay: grid;\n\t\tgrid-template-columns: repeat(auto-fit, minmax(140px, 1fr));\n\t\tgap: 4px;\n\t}\n\t.ag-wday-past-line.svelte-uhwfyj {\n\t\tfont-size: 11px;\n\t\tcolor: var(--dt-text-3, rgba(0, 0, 0, 0.38));\n\t\tpadding: 6px 0 0;\n\t}\n\t.ag-wday-past-line--summary.svelte-uhwfyj {\n\t\tpadding: 0 20px 8px;\n\t}\n\t/* \"✓ N completed\" is a disclosure — tap to reveal the finished events */\n\t.ag-past-toggle.svelte-uhwfyj {\n\t\tdisplay: inline-flex;\n\t\talign-items: center;\n\t\tgap: 5px;\n\t\tcursor: pointer;\n\t\tmin-height: 32px;\n\t\ttransition: color 150ms;\n\t\t-webkit-tap-highlight-color: transparent;\n\t}\n\t.ag-past-toggle.svelte-uhwfyj:hover,\n\t.ag-past-toggle.svelte-uhwfyj:active {\n\t\tcolor: var(--dt-text-2, rgba(0, 0, 0, 0.54));\n\t}\n\t.ag-past-toggle.svelte-uhwfyj:focus-visible {\n\t\toutline: none;\n\t\tbox-shadow: 0 0 0 2px var(--dt-accent, #2563eb);\n\t\tborder-radius: 4px;\n\t}\n\t.ag-past-chevron.svelte-uhwfyj {\n\t\ttransition: transform 120ms;\n\t}\n\t.ag-past-chevron--open.svelte-uhwfyj {\n\t\ttransform: rotate(180deg);\n\t}\n\t@media (prefers-reduced-motion: reduce) {\n\t\t.ag-past-chevron.svelte-uhwfyj { transition: none; }\n\t}\n\t/* Revealed completed events: dim + strike, single token layer */\n\t.ag-compact--done.svelte-uhwfyj .ag-compact-title:where(.svelte-uhwfyj) {\n\t\ttext-decoration: line-through;\n\t\ttext-decoration-color: var(--dt-text-3, rgba(0, 0, 0, 0.38));\n\t}\n\t.ag-compact--done.svelte-uhwfyj .ag-compact-dot:where(.svelte-uhwfyj) {\n\t\topacity: 0.5;\n\t}\n\n\t/* Compact day events */\n\t.ag-wday-compact.svelte-uhwfyj {\n\t\tpadding: 0 20px 8px;\n\t}\n\t.ag-compact.svelte-uhwfyj {\n\t\tdisplay: flex;\n\t\talign-items: baseline;\n\t\tgap: 6px;\n\t\tpadding: 3px 0;\n\t\tcursor: pointer;\n\t\tmin-width: 0;\n\t\twidth: 100%;\n\t}\n\t.ag-compact--selected.svelte-uhwfyj {\n\t\tbackground: color-mix(in srgb, var(--ev-color) 10%, transparent);\n\t\tborder-radius: 4px;\n\t\t/* Highlight gutter comes from negative margins so the row's content\n\t\t stays aligned with its unselected siblings (no tap-shift). */\n\t\tpadding-left: 6px;\n\t\tpadding-right: 6px;\n\t\tmargin-left: -6px;\n\t\tmargin-right: -6px;\n\t\twidth: calc(100% + 12px);\n\t}\n\t.ag-compact.svelte-uhwfyj:hover .ag-compact-title:where(.svelte-uhwfyj),\n\t.ag-compact.svelte-uhwfyj:active .ag-compact-title:where(.svelte-uhwfyj) {\n\t\tcolor: var(--dt-text);\n\t}\n\t.ag-compact.svelte-uhwfyj:active {\n\t\tbackground: color-mix(in srgb, var(--ev-color) 8%, transparent);\n\t\tborder-radius: 4px;\n\t}\n\t.ag-compact.svelte-uhwfyj:focus-visible {\n\t\toutline: none;\n\t\tbox-shadow: 0 0 0 2px var(--dt-accent, #2563eb);\n\t\tborder-radius: 4px;\n\t}\n\t.ag-compact-dot.svelte-uhwfyj {\n\t\twidth: 5px;\n\t\theight: 5px;\n\t\tborder-radius: 50%;\n\t\tbackground: var(--ev-color, var(--dt-accent));\n\t\tflex-shrink: 0;\n\t\talign-self: center;\n\t}\n\t.ag-compact-time.svelte-uhwfyj {\n\t\tfont-size: 11px;\n\t\tfont-family: var(--dt-mono, monospace);\n\t\tcolor: var(--dt-text-2, rgba(0, 0, 0, 0.54));\n\t\tmin-width: 40px;\n\t\tflex-shrink: 0;\n\t\twhite-space: nowrap;\n\t\tline-height: 1.4;\n\t}\n\t/* Title + location + subtitle + tags cluster. One line while it fits; on\n\t mobile the metadata wraps to a second line instead of crushing the title. */\n\t.ag-compact-main.svelte-uhwfyj {\n\t\tdisplay: flex;\n\t\talign-items: baseline;\n\t\tgap: 6px;\n\t\tflex: 1;\n\t\tmin-width: 0;\n\t}\n\t.ag--mobile.svelte-uhwfyj .ag-compact-main:where(.svelte-uhwfyj) {\n\t\tflex-wrap: wrap;\n\t\trow-gap: 2px;\n\t}\n\t/* Mobile: size the title by its content when deciding line breaks — a long\n\t title claims the first line whole (ellipsizing only against the full row)\n\t and pushes location/subtitle/tags down instead of truncating at 35%. */\n\t.ag--mobile.svelte-uhwfyj .ag-compact-title:where(.svelte-uhwfyj) {\n\t\tflex-basis: auto;\n\t}\n\t/* On their own wrapped line the metadata gets the full width — the tight\n\t desktop caps would truncate it beside empty space. */\n\t.ag--mobile.svelte-uhwfyj .ag-compact-loc:where(.svelte-uhwfyj),\n\t.ag--mobile.svelte-uhwfyj .ag-compact-sub:where(.svelte-uhwfyj) {\n\t\tmax-width: 100%;\n\t}\n\t/* Wrapped rows are two/three lines tall — center-aligning the dot floats\n\t it between lines; pin it optically to the first (title) line instead. */\n\t.ag--mobile.svelte-uhwfyj .ag-compact-dot:where(.svelte-uhwfyj) {\n\t\talign-self: flex-start;\n\t\tmargin-top: 8px;\n\t}\n\t.ag-compact-title.svelte-uhwfyj {\n\t\tfont-size: 12px;\n\t\tfont-weight: 500;\n\t\tcolor: var(--dt-text-2, rgba(0, 0, 0, 0.54));\n\t\tflex: 1;\n\t\t/* The title is the row's identity — never let subtitle/tags/duration\n\t\t squeeze it out on narrow screens (min-width: 0 resolves to 0px). */\n\t\tmin-width: 35%;\n\t\twhite-space: nowrap;\n\t\toverflow: hidden;\n\t\ttext-overflow: ellipsis;\n\t\ttransition: color 150ms;\n\t\tline-height: 1.4;\n\t}\n\t.ag-compact-dur.svelte-uhwfyj {\n\t\tfont-size: 10px;\n\t\tfont-family: var(--dt-mono, monospace);\n\t\tcolor: var(--dt-text-3, rgba(0, 0, 0, 0.38));\n\t\tflex-shrink: 0;\n\t\twhite-space: nowrap;\n\t\tline-height: 1.4;\n\t}\n\t.ag-compact-sub.svelte-uhwfyj {\n\t\tfont-size: 10px;\n\t\tcolor: var(--dt-text-3, rgba(0, 0, 0, 0.38));\n\t\tflex-shrink: 3;\n\t\tmin-width: 0;\n\t\twhite-space: nowrap;\n\t\toverflow: hidden;\n\t\ttext-overflow: ellipsis;\n\t\tmax-width: 120px;\n\t\tline-height: 1.4;\n\t}\n\t.ag-compact-loc.svelte-uhwfyj {\n\t\tfont-size: 10px;\n\t\tcolor: var(--dt-text-3, rgba(0, 0, 0, 0.38));\n\t\tflex-shrink: 3;\n\t\tmin-width: 0;\n\t\twhite-space: nowrap;\n\t\toverflow: hidden;\n\t\ttext-overflow: ellipsis;\n\t\tmax-width: 100px;\n\t}\n\t.ag-compact--cancelled.svelte-uhwfyj {\n\t\topacity: 0.5;\n\t}\n\t.ag-compact--cancelled.svelte-uhwfyj .ag-compact-title:where(.svelte-uhwfyj) {\n\t\ttext-decoration: line-through;\n\t}\n\t.ag-compact--tentative.svelte-uhwfyj {\n\t\topacity: 0.65;\n\t}\n\t.ag-compact--full.svelte-uhwfyj {\n\t\topacity: 0.55;\n\t}\n\t.ag-compact--limited.svelte-uhwfyj {\n\t\topacity: 0.65;\n\t}\n\t.ag-compact-tag.svelte-uhwfyj {\n\t\tfont: 500 10px / 1 var(--dt-sans, system-ui, sans-serif);\n\t\tcolor: var(--ev-color, var(--dt-accent));\n\t\tbackground: color-mix(in srgb, var(--ev-color, var(--dt-accent)) 12%, transparent);\n\t\tpadding: 1px 4px;\n\t\tborder-radius: 3px;\n\t\twhite-space: nowrap;\n\t\tflex-shrink: 1;\n\t\tmin-width: 2.5em;\n\t\tmax-width: 80px;\n\t\toverflow: hidden;\n\t\ttext-overflow: ellipsis;\n\t}\n\t.ag-compact-more.svelte-uhwfyj {\n\t\tfont-size: 11px;\n\t\tcolor: color-mix(in srgb, var(--dt-text, rgba(0, 0, 0, 0.87)) 72%, transparent);\n\t\tpadding: 2px 0 0 13px;\n\t\tcursor: pointer;\n\t\tdisplay: block;\n\t}\n\t.ag-compact-more.svelte-uhwfyj:hover,\n\t.ag-compact-more.svelte-uhwfyj:active {\n\t\tcolor: var(--dt-text, rgba(0, 0, 0, 0.87));\n\t}\n\t.ag-compact-more.svelte-uhwfyj:focus-visible {\n\t\toutline: none;\n\t\tbox-shadow: 0 0 0 2px var(--dt-accent, #2563eb);\n\t\tborder-radius: 4px;\n\t}\n\n\t/* ═══ Mobile adaptations ═══ */\n\t.ag--mobile.svelte-uhwfyj .ag-wday-head:where(.svelte-uhwfyj) {\n\t\tpadding: 12px 16px;\n\t}\n\t.ag--mobile.svelte-uhwfyj .ag-wday-expanded:where(.svelte-uhwfyj) {\n\t\tpadding: 0 16px 12px;\n\t}\n\t.ag--mobile.svelte-uhwfyj .ag-wday-compact:where(.svelte-uhwfyj) {\n\t\tpadding: 0 16px 12px;\n\t}\n\t.ag--mobile.svelte-uhwfyj .ag-card-body:where(.svelte-uhwfyj) {\n\t\tpadding: 12px 14px;\n\t}\n\t.ag--mobile.svelte-uhwfyj .ag-card-title:where(.svelte-uhwfyj) {\n\t\tfont-size: 15px;\n\t}\n\t.ag--mobile.svelte-uhwfyj .ag-card-meta:where(.svelte-uhwfyj) {\n\t\tfont-size: 12px;\n\t}\n\t.ag--mobile.svelte-uhwfyj .ag-card-sub:where(.svelte-uhwfyj) {\n\t\tfont-size: 12px;\n\t}\n\t.ag--mobile.svelte-uhwfyj .ag-card-loc:where(.svelte-uhwfyj) {\n\t\tfont-size: 12px;\n\t}\n\t.ag--mobile.svelte-uhwfyj .ag-card-eta:where(.svelte-uhwfyj) {\n\t\tfont-size: 12px;\n\t}\n\t.ag--mobile.svelte-uhwfyj .ag-card-tag:where(.svelte-uhwfyj) {\n\t\tfont-size: 11px;\n\t}\n\t.ag--mobile.svelte-uhwfyj .ag-compact:where(.svelte-uhwfyj) {\n\t\tpadding: 8px 0;\n\t}\n\t.ag--mobile.svelte-uhwfyj .ag-compact-title:where(.svelte-uhwfyj) {\n\t\tfont-size: 15px;\n\t}\n\t.ag--mobile.svelte-uhwfyj .ag-compact-time:where(.svelte-uhwfyj) {\n\t\tfont-size: 12px;\n\t}\n\t.ag--mobile.svelte-uhwfyj .ag-compact-dur:where(.svelte-uhwfyj) {\n\t\tfont-size: 12px;\n\t}\n\t.ag--mobile.svelte-uhwfyj .ag-compact-sub:where(.svelte-uhwfyj) {\n\t\tfont-size: 12px;\n\t}\n\t.ag--mobile.svelte-uhwfyj .ag-compact-loc:where(.svelte-uhwfyj) {\n\t\tfont-size: 11px;\n\t}\n\t.ag--mobile.svelte-uhwfyj .ag-compact-tag:where(.svelte-uhwfyj) {\n\t\tfont-size: 11px;\n\t}\n\t.ag--mobile.svelte-uhwfyj .ag-compact-more:where(.svelte-uhwfyj) {\n\t\tfont-size: 12px;\n\t\tpadding-top: 6px;\n\t}\n\t.ag--mobile.svelte-uhwfyj .ag-allday-span:where(.svelte-uhwfyj) {\n\t\tfont-size: 11px;\n\t}\n\t.ag--mobile.svelte-uhwfyj .ag-wday-badge:where(.svelte-uhwfyj) {\n\t\tfont-size: 11px;\n\t}\n\t.ag--mobile.svelte-uhwfyj .ag-wslot-now:where(.svelte-uhwfyj) {\n\t\tfont-size: 11px;\n\t}\n\t.ag--mobile.svelte-uhwfyj .ag-wday-empty:where(.svelte-uhwfyj) {\n\t\tfont-size: 12px;\n\t}\n\t.ag--mobile.svelte-uhwfyj .ag-wday-past-line:where(.svelte-uhwfyj) {\n\t\tfont-size: 12px;\n\t}\n\t.ag--mobile.svelte-uhwfyj .ag-wslot-cards--multi:where(.svelte-uhwfyj) {\n\t\tgrid-template-columns: 1fr;\n\t}\n\n\t/* ─── Container ──────────────────────────────────── */\n\t.mb.svelte-zbkzcp {\n\t\tposition: relative;\n\t\tdisplay: flex;\n\t\tflex-direction: column;\n\t\tuser-select: none;\n\t\tfont-variant-numeric: tabular-nums;\n\t\toverflow: hidden;\n\t\tbackground: var(--dt-bg, #fff);\n\t\t-webkit-tap-highlight-color: transparent;\n\t\ttouch-action: pan-y;\n\t}\n\t.mb--auto.svelte-zbkzcp { overflow: visible; }\n\n\t/* ─── Swipe wrapper (follows the finger) ─────────── */\n\t.mb-swipe.svelte-zbkzcp {\n\t\tflex: 1;\n\t\tmin-height: 0;\n\t\tdisplay: flex;\n\t\tflex-direction: column;\n\t\tposition: relative;\n\t}\n\t.mb-swipe--animate.svelte-zbkzcp {\n\t\ttransition: transform 180ms ease;\n\t}\n\t@media (prefers-reduced-motion: reduce) {\n\t\t.mb-swipe--animate.svelte-zbkzcp { transition: none; }\n\t}\n\n\t/* ─── All-day bar ────────────────────────────────── */\n\t.mb-allday.svelte-zbkzcp {\n\t\tdisplay: flex;\n\t\tgap: 4px;\n\t\tpadding: 4px 8px;\n\t\toverflow-x: auto;\n\t\tscrollbar-width: none;\n\t\tborder-bottom: 1px solid var(--dt-border, rgba(0, 0, 0, 0.08));\n\t\tflex-shrink: 0;\n\t\talign-items: center;\n\t}\n\t.mb-allday.svelte-zbkzcp::-webkit-scrollbar { display: none; }\n\t.mb-allday--expanded.svelte-zbkzcp {\n\t\tflex-wrap: wrap;\n\t\toverflow-x: visible;\n\t}\n\n\t.mb-allday-chip.svelte-zbkzcp {\n\t\tdisplay: flex;\n\t\talign-items: center;\n\t\tgap: 4px;\n\t\tpadding: 4px 8px;\n\t\tmin-height: 32px;\n\t\tborder-radius: 5px;\n\t\tbackground: color-mix(in srgb, var(--ev-color) 12%, var(--dt-surface, #f9fafb));\n\t\tborder: none;\n\t\tcursor: pointer;\n\t\tflex-shrink: 0;\n\t\ttransition: background 120ms;\n\t\t-webkit-tap-highlight-color: transparent;\n\t\tmax-width: 160px;\n\t\tposition: relative;\n\t}\n\t/* Hit-slop: 44px effective touch target */\n\t.mb-allday-chip.svelte-zbkzcp::before {\n\t\tcontent: '';\n\t\tposition: absolute;\n\t\tleft: 0;\n\t\tright: 0;\n\t\ttop: 50%;\n\t\ttransform: translateY(-50%);\n\t\theight: 44px;\n\t}\n\t.mb-allday-chip.svelte-zbkzcp:active {\n\t\tbackground: color-mix(in srgb, var(--ev-color) 22%, var(--dt-surface, #f9fafb));\n\t}\n\t.mb-allday-chip--selected.svelte-zbkzcp {\n\t\tbox-shadow: 0 0 0 1.5px var(--ev-color);\n\t}\n\t.mb-allday-chip.svelte-zbkzcp:focus-visible {\n\t\toutline: none;\n\t\tbox-shadow: 0 0 0 2px var(--dt-accent, #2563eb);\n\t}\n\n\t.mb-allday-dot.svelte-zbkzcp {\n\t\twidth: 6px;\n\t\theight: 6px;\n\t\tborder-radius: 50%;\n\t\tbackground: var(--ev-color);\n\t\tflex-shrink: 0;\n\t}\n\n\t.mb-allday-title.svelte-zbkzcp {\n\t\tfont: 500 12px/1 var(--dt-sans, system-ui, sans-serif);\n\t\tcolor: var(--dt-text, rgba(0, 0, 0, 0.87));\n\t\twhite-space: nowrap;\n\t\tmax-width: 100px;\n\t\toverflow: hidden;\n\t\ttext-overflow: ellipsis;\n\t}\n\n\t.mb-allday-span.svelte-zbkzcp {\n\t\tfont: 400 11px/1 var(--dt-sans, system-ui, sans-serif);\n\t\tcolor: var(--dt-text-2, rgba(0, 0, 0, 0.54));\n\t}\n\n\t.mb-allday-more.svelte-zbkzcp {\n\t\tfont: 500 12px/1 var(--dt-sans, system-ui, sans-serif);\n\t\tcolor: var(--dt-text-2, rgba(0, 0, 0, 0.54));\n\t\twhite-space: nowrap;\n\t\tflex-shrink: 0;\n\t\tpadding: 0 6px;\n\t\tmin-height: 32px;\n\t\tborder: none;\n\t\tbackground: transparent;\n\t\tcursor: pointer;\n\t\tposition: relative;\n\t\t-webkit-tap-highlight-color: transparent;\n\t}\n\t.mb-allday-more.svelte-zbkzcp::before {\n\t\tcontent: '';\n\t\tposition: absolute;\n\t\tleft: 0;\n\t\tright: 0;\n\t\ttop: 50%;\n\t\ttransform: translateY(-50%);\n\t\theight: 44px;\n\t}\n\t.mb-allday-more.svelte-zbkzcp:focus-visible {\n\t\toutline: none;\n\t\tbox-shadow: 0 0 0 2px var(--dt-accent, #2563eb);\n\t}\n\n\t/* ─── Grid ───────────────────────────────────────── */\n\t.mb-grid.svelte-zbkzcp {\n\t\tflex: 1;\n\t\toverflow-y: auto;\n\t\toverflow-x: hidden;\n\t\toverscroll-behavior: contain;\n\t\t-webkit-overflow-scrolling: touch;\n\t\tscrollbar-width: thin;\n\t\tscrollbar-color: var(--dt-scrollbar, rgba(0, 0, 0, 0.1)) transparent;\n\t\tposition: relative;\n\t\tpadding-top: 8px;\n\t}\n\t.mb--auto.svelte-zbkzcp .mb-grid:where(.svelte-zbkzcp) { overflow-y: visible; }\n\t.mb-grid.svelte-zbkzcp:focus-visible {\n\t\toutline: none;\n\t\tbox-shadow: inset 0 0 0 2px var(--dt-accent, #2563eb);\n\t}\n\n\t.mb-grid-inner.svelte-zbkzcp {\n\t\tposition: relative;\n\t\tmin-width: 100%;\n\t}\n\n\t/* ─── Empty state ────────────────────────────────── */\n\t.mb-empty.svelte-zbkzcp {\n\t\tposition: absolute;\n\t\tinset: 0;\n\t\tdisplay: flex;\n\t\talign-items: center;\n\t\tjustify-content: center;\n\t\tpointer-events: none;\n\t\tz-index: 4;\n\t}\n\t.mb-empty-text.svelte-zbkzcp {\n\t\tfont: 500 13px/1.4 var(--dt-sans, system-ui, sans-serif);\n\t\tcolor: var(--dt-text-2, rgba(0, 0, 0, 0.54));\n\t}\n\n\t/* ─── Hour row ───────────────────────────────────── */\n\t.mb-hour.svelte-zbkzcp {\n\t\tposition: absolute;\n\t\tleft: 0;\n\t\tright: 0;\n\t\tdisplay: flex;\n\t\talign-items: flex-start;\n\t}\n\n\t.mb-hour-label.svelte-zbkzcp {\n\t\twidth: 40px;\n\t\t/* border-box keeps the label inside the 40px gutter that events\n\t\t start at — content-box pushed digits flush under the event edge */\n\t\tbox-sizing: border-box;\n\t\tflex-shrink: 0;\n\t\tfont: 500 11px/1 var(--dt-mono, ui-monospace, monospace);\n\t\tcolor: var(--dt-text-3, rgba(0, 0, 0, 0.38));\n\t\ttext-align: right;\n\t\tpadding-right: 8px;\n\t\tpadding-top: 0;\n\t\tposition: relative;\n\t\ttop: -6px;\n\t}\n\n\t.mb-hour-line.svelte-zbkzcp {\n\t\tflex: 1;\n\t\theight: 1px;\n\t\tbackground: var(--dt-border, rgba(0, 0, 0, 0.08));\n\t}\n\n\t.mb-hour--blocked.svelte-zbkzcp {\n\t\tbackground: repeating-linear-gradient(\n\t\t\t-45deg,\n\t\t\tcolor-mix(in srgb, var(--dt-text, rgba(0, 0, 0, 0.87)) 3%, transparent),\n\t\t\tcolor-mix(in srgb, var(--dt-text, rgba(0, 0, 0, 0.87)) 3%, transparent) 4px,\n\t\t\ttransparent 4px,\n\t\t\ttransparent 8px\n\t\t);\n\t}\n\n\t.mb-blocked-label.svelte-zbkzcp {\n\t\tposition: absolute;\n\t\tleft: 44px;\n\t\ttop: 50%;\n\t\ttransform: translateY(-50%);\n\t\tfont: 500 10px/1 var(--dt-sans, system-ui, sans-serif);\n\t\tcolor: var(--dt-text-2, rgba(0, 0, 0, 0.54));\n\t\ttext-transform: uppercase;\n\t\tletter-spacing: 0.04em;\n\t}\n\n\t/* ─── Now line ───────────────────────────────────── */\n\t.mb-now.svelte-zbkzcp {\n\t\tposition: absolute;\n\t\tleft: 0;\n\t\tright: 0;\n\t\tz-index: 10;\n\t\tdisplay: flex;\n\t\talign-items: center;\n\t\tpointer-events: none;\n\t}\n\n\t.mb-now-label.svelte-zbkzcp {\n\t\twidth: 40px;\n\t\tbox-sizing: border-box;\n\t\tflex-shrink: 0;\n\t\ttext-align: right;\n\t\tpadding-right: 6px;\n\t\tfont: 700 10px/1 var(--dt-mono, ui-monospace, monospace);\n\t\tcolor: var(--dt-accent, #2563eb);\n\t}\n\n\t.mb-now-line.svelte-zbkzcp {\n\t\tflex: 1;\n\t\theight: 2px;\n\t\tbackground: var(--dt-accent, #2563eb);\n\t\tbox-shadow: 0 0 6px var(--dt-glow, rgba(37, 99, 235, 0.25));\n\t\tposition: relative;\n\t}\n\n\t.mb-now-line.svelte-zbkzcp::before {\n\t\tcontent: '';\n\t\tposition: absolute;\n\t\tleft: -4px;\n\t\ttop: -4px;\n\t\twidth: 10px;\n\t\theight: 10px;\n\t\tborder-radius: 50%;\n\t\tbackground: var(--dt-accent, #2563eb);\n\t}\n\n\t/* ─── Events ─────────────────────────────────────── */\n\t.mb-event.svelte-zbkzcp {\n\t\tposition: absolute;\n\t\tz-index: 5;\n\t\tborder-radius: 8px;\n\t\tcursor: pointer;\n\t\tbackground: color-mix(in srgb, var(--ev-color) 12%, var(--dt-surface, #f9fafb));\n\t\tborder: none;\n\t\tdisplay: flex;\n\t\talign-items: stretch;\n\t\toverflow: hidden;\n\t\ttransition: box-shadow 120ms, background 120ms;\n\t\ttext-align: left;\n\t\tpadding: 0;\n\t\t-webkit-tap-highlight-color: transparent;\n\t\tmin-height: 24px;\n\t}\n\t.mb-event.svelte-zbkzcp:active {\n\t\tbackground: color-mix(in srgb, var(--ev-color) 20%, var(--dt-surface, #f9fafb));\n\t}\n\t/* Short blocks keep their duration-proportional height, but get a 44px\n\t transparent hit-slop so taps still land. */\n\t.mb-event--short.svelte-zbkzcp {\n\t\toverflow: visible;\n\t}\n\t.mb-event--short.svelte-zbkzcp::after {\n\t\tcontent: '';\n\t\tposition: absolute;\n\t\tleft: 0;\n\t\tright: 0;\n\t\ttop: 50%;\n\t\ttransform: translateY(-50%);\n\t\theight: 44px;\n\t}\n\t.mb-event--short.svelte-zbkzcp .mb-ev-body:where(.svelte-zbkzcp) {\n\t\tpadding-top: 2px;\n\t\tpadding-bottom: 2px;\n\t}\n\t.mb-event--selected.svelte-zbkzcp {\n\t\tbox-shadow: 0 0 0 2px var(--ev-color),\n\t\t\t0 2px 12px color-mix(in srgb, var(--ev-color) 25%, transparent);\n\t}\n\t.mb-event--current.svelte-zbkzcp {\n\t\tbackground: color-mix(in srgb, var(--ev-color) 18%, var(--dt-surface, #f9fafb));\n\t}\n\t.mb-event--next.svelte-zbkzcp {\n\t\tbackground: color-mix(in srgb, var(--ev-color) 8%, var(--dt-surface, #f9fafb));\n\t\tborder: 1px dashed color-mix(in srgb, var(--ev-color) 35%, transparent);\n\t}\n\t/* Status treatments: token-level dims + a non-opacity signal\n\t (strikethrough / border style) — never a bare opacity on the block. */\n\t.mb-event--cancelled.svelte-zbkzcp {\n\t\tbackground: color-mix(in srgb, var(--ev-color) 5%, var(--dt-surface, #f9fafb));\n\t}\n\t.mb-event--cancelled.svelte-zbkzcp .mb-ev-title:where(.svelte-zbkzcp) {\n\t\ttext-decoration: line-through;\n\t\tcolor: var(--dt-text-2, rgba(0, 0, 0, 0.54));\n\t}\n\t.mb-event--cancelled.svelte-zbkzcp .mb-ev-stripe:where(.svelte-zbkzcp) {\n\t\topacity: 0.45; /* decorative bar only */\n\t}\n\t.mb-event--tentative.svelte-zbkzcp {\n\t\tbackground: color-mix(in srgb, var(--ev-color) 6%, var(--dt-surface, #f9fafb));\n\t\tborder: 1px dashed color-mix(in srgb, var(--ev-color) 45%, transparent);\n\t}\n\t.mb-event--full.svelte-zbkzcp {\n\t\tbackground: color-mix(in srgb, var(--ev-color) 6%, var(--dt-surface, #f9fafb));\n\t\tborder: 1px solid color-mix(in srgb, var(--ev-color) 30%, transparent);\n\t}\n\t.mb-event--full.svelte-zbkzcp .mb-ev-title:where(.svelte-zbkzcp) {\n\t\tcolor: var(--dt-text-2, rgba(0, 0, 0, 0.54));\n\t}\n\t.mb-event--limited.svelte-zbkzcp {\n\t\tbackground: color-mix(in srgb, var(--ev-color) 8%, var(--dt-surface, #f9fafb));\n\t\tborder: 1px dashed color-mix(in srgb, var(--ev-color) 45%, transparent);\n\t}\n\t.mb-event--resizing.svelte-zbkzcp {\n\t\tz-index: 50;\n\t\tbox-shadow: 0 4px 20px rgba(0, 0, 0, 0.25);\n\t\tcursor: ns-resize;\n\t}\n\n\t/* ─── Resize handles ─────────────────────────────── */\n\t.mb-ev-handle.svelte-zbkzcp {\n\t\tposition: absolute;\n\t\tleft: 0;\n\t\tright: 0;\n\t\theight: 10px;\n\t\tz-index: 2;\n\t\tcursor: ns-resize;\n\t\ttouch-action: none;\n\t}\n\t.mb-ev-handle--start.svelte-zbkzcp { top: 0; }\n\t.mb-ev-handle--end.svelte-zbkzcp { bottom: 0; }\n\t/* Hit-slop: ≥24px effective, extending inward so the block's\n\t overflow clipping can't cut it off. */\n\t.mb-ev-handle.svelte-zbkzcp::before {\n\t\tcontent: '';\n\t\tposition: absolute;\n\t\tleft: 0;\n\t\tright: 0;\n\t\theight: 24px;\n\t}\n\t.mb-ev-handle--start.svelte-zbkzcp::before { top: 0; }\n\t.mb-ev-handle--end.svelte-zbkzcp::before { bottom: 0; }\n\t.mb-ev-handle.svelte-zbkzcp::after {\n\t\tcontent: '';\n\t\tposition: absolute;\n\t\tleft: 50%;\n\t\ttransform: translateX(-50%);\n\t\twidth: 24px;\n\t\theight: 3px;\n\t\tborder-radius: 2px;\n\t\tbackground: var(--ev-color);\n\t\topacity: 0;\n\t\ttransition: opacity 120ms;\n\t}\n\t.mb-ev-handle--start.svelte-zbkzcp::after { top: 2px; }\n\t.mb-ev-handle--end.svelte-zbkzcp::after { bottom: 2px; }\n\t.mb-event.svelte-zbkzcp:hover .mb-ev-handle:where(.svelte-zbkzcp)::after,\n\t.mb-event.svelte-zbkzcp:focus-within .mb-ev-handle:where(.svelte-zbkzcp)::after,\n\t.mb-event--resizing.svelte-zbkzcp .mb-ev-handle:where(.svelte-zbkzcp)::after,\n\t.mb-event--selected.svelte-zbkzcp .mb-ev-handle:where(.svelte-zbkzcp)::after { opacity: 0.55; }\n\t/* Touch devices have no hover — show the handles persistently. */\n\t@media (hover: none) {\n\t\t.mb-ev-handle.svelte-zbkzcp::after { opacity: 0.55; }\n\t}\n\n\t/* ─── Drag-to-create ghost ───────────────────────── */\n\t.mb-create-ghost.svelte-zbkzcp {\n\t\tposition: absolute;\n\t\tleft: 40px;\n\t\tright: 4px;\n\t\tz-index: 40;\n\t\tborder-radius: 8px;\n\t\tbackground: color-mix(in srgb, var(--dt-accent, #2563eb) 12%, transparent);\n\t\tborder: 1px dashed color-mix(in srgb, var(--dt-accent, #2563eb) 55%, transparent);\n\t\tdisplay: flex;\n\t\talign-items: flex-start;\n\t\toverflow: hidden;\n\t\tpointer-events: none;\n\t}\n\t.mb-create-ghost-time.svelte-zbkzcp {\n\t\tfont: 600 11px/1 var(--dt-mono, ui-monospace, monospace);\n\t\tcolor: var(--dt-accent, #2563eb);\n\t\tpadding: 4px 8px;\n\t\twhite-space: nowrap;\n\t}\n\n\t.mb-ev-stripe.svelte-zbkzcp {\n\t\twidth: 4px;\n\t\tbackground: var(--ev-color);\n\t\tflex-shrink: 0;\n\t\tborder-radius: 8px 0 0 8px;\n\t}\n\n\t.mb-ev-body.svelte-zbkzcp {\n\t\tflex: 1;\n\t\tmin-width: 0;\n\t\tpadding: 4px 8px;\n\t\tdisplay: flex;\n\t\tflex-direction: column;\n\t\tgap: 1px;\n\t\tjustify-content: center;\n\t}\n\n\t.mb-ev-title.svelte-zbkzcp {\n\t\tfont: 600 15px/1.2 var(--dt-sans, system-ui, sans-serif);\n\t\tcolor: var(--dt-text, rgba(0, 0, 0, 0.87));\n\t\twhite-space: nowrap;\n\t\toverflow: hidden;\n\t\ttext-overflow: ellipsis;\n\t}\n\n\t.mb-ev-time.svelte-zbkzcp {\n\t\tfont: 400 12px/1 var(--dt-mono, ui-monospace, monospace);\n\t\tcolor: var(--dt-text-2, rgba(0, 0, 0, 0.54));\n\t}\n\n\t.mb-ev-sub.svelte-zbkzcp {\n\t\tfont: 400 12px/1.1 var(--dt-sans, system-ui, sans-serif);\n\t\tcolor: var(--dt-text-2, rgba(0, 0, 0, 0.54));\n\t\twhite-space: nowrap;\n\t\toverflow: hidden;\n\t\ttext-overflow: ellipsis;\n\t}\n\n\t.mb-ev-loc.svelte-zbkzcp {\n\t\tfont: 400 11px/1 var(--dt-sans, system-ui, sans-serif);\n\t\tcolor: var(--dt-text-2, rgba(0, 0, 0, 0.54));\n\t\twhite-space: nowrap;\n\t\toverflow: hidden;\n\t\ttext-overflow: ellipsis;\n\t}\n\n\t.mb-ev-tags.svelte-zbkzcp {\n\t\tdisplay: flex;\n\t\tgap: 4px;\n\t\tmargin-top: 2px;\n\t}\n\n\t.mb-ev-tag.svelte-zbkzcp {\n\t\tfont: 500 11px/1 var(--dt-sans, system-ui, sans-serif);\n\t\tcolor: var(--ev-color, var(--dt-accent));\n\t\tbackground: color-mix(in srgb, var(--ev-color, var(--dt-accent)) 15%, transparent);\n\t\tpadding: 2px 5px;\n\t\tborder-radius: 3px;\n\t\twhite-space: nowrap;\n\t}\n\n\t.mb-ev-live.svelte-zbkzcp {\n\t\tposition: absolute;\n\t\ttop: 6px;\n\t\tright: 6px;\n\t\twidth: 7px;\n\t\theight: 7px;\n\t\tborder-radius: 50%;\n\t\tbackground: var(--ev-color, var(--dt-accent));\n\t\tanimation: svelte-zbkzcp-mb-pulse 2s ease-in-out infinite;\n\t}\n\t@media (prefers-reduced-motion: reduce) {\n\t\t.mb-ev-live.svelte-zbkzcp { animation: none; }\n\t}\n\t.mb-ev-next-badge.svelte-zbkzcp {\n\t\tposition: absolute;\n\t\ttop: 4px;\n\t\tright: 4px;\n\t\tfont: 600 10px/1 var(--dt-sans, system-ui, sans-serif);\n\t\ttext-transform: uppercase;\n\t\tletter-spacing: 0.06em;\n\t\tcolor: var(--ev-color, var(--dt-accent));\n\t\tbackground: color-mix(in srgb, var(--ev-color, var(--dt-accent)) 15%, transparent);\n\t\tpadding: 2px 5px;\n\t\tborder-radius: 3px;\n\t\twhite-space: nowrap;\n\t}\n\n\t@keyframes svelte-zbkzcp-mb-pulse {\n\t\t0%, 100% { opacity: 1; }\n\t\t50% { opacity: 0.4; }\n\t}\n\n\t/* ─── Focus ──────────────────────────────────────── */\n\t.mb-event.svelte-zbkzcp:focus-visible {\n\t\toutline: none;\n\t\tbox-shadow: 0 0 0 2px var(--dt-accent, #2563eb);\n\t}\n\n\t/* ─── Container ──────────────────────────────────── */\n\t.mw.svelte-1d18hkf {\n\t\tposition: relative;\n\t\tdisplay: flex;\n\t\tflex-direction: column;\n\t\tuser-select: none;\n\t\tfont-variant-numeric: tabular-nums;\n\t\toverflow: hidden;\n\t\tbackground: var(--dt-bg, #fff);\n\t\t-webkit-tap-highlight-color: transparent;\n\t\ttouch-action: pan-y;\n\t}\n\t.mw--auto.svelte-1d18hkf { overflow: visible; }\n\n\t/* ─── Scrollable day list ────────────────────────── */\n\t.mw-list.svelte-1d18hkf {\n\t\tflex: 1;\n\t\toverflow-y: auto;\n\t\toverflow-x: hidden;\n\t\toverscroll-behavior: contain;\n\t\t-webkit-overflow-scrolling: touch;\n\t\tscrollbar-width: thin;\n\t\tscrollbar-color: var(--dt-scrollbar, rgba(0, 0, 0, 0.1)) transparent;\n\t}\n\t.mw--auto.svelte-1d18hkf .mw-list:where(.svelte-1d18hkf) { overflow-y: visible; }\n\t.mw-list--animate.svelte-1d18hkf {\n\t\ttransition: transform 180ms ease;\n\t}\n\t@media (prefers-reduced-motion: reduce) {\n\t\t.mw-list--animate.svelte-1d18hkf { transition: none; }\n\t}\n\n\t/* ─── Day row ────────────────────────────────────── */\n\t.mw-row.svelte-1d18hkf {\n\t\tdisplay: flex;\n\t\talign-items: center;\n\t\tgap: 12px;\n\t\tposition: relative;\n\t\t/* border-box: width 100% + padding otherwise overflows the list by\n\t\t 24px, which iOS turns into a horizontal pan that clips the date\n\t\t column off the left edge */\n\t\tbox-sizing: border-box;\n\t\tpadding: 10px 12px;\n\t\tbackground: transparent;\n\t\ttransition: background 120ms;\n\t\ttext-align: left;\n\t\twidth: 100%;\n\t\t-webkit-tap-highlight-color: transparent;\n\t\tborder-bottom: 1px solid var(--dt-border, rgba(0, 0, 0, 0.08));\n\t\tmin-height: 56px;\n\t}\n\t.mw-row.svelte-1d18hkf:last-child {\n\t\tborder-bottom: none;\n\t}\n\t.mw-row.svelte-1d18hkf:has(.mw-row-target:where(.svelte-1d18hkf):active) {\n\t\tbackground: color-mix(in srgb, var(--dt-accent, #2563eb) 6%, transparent);\n\t}\n\t.mw-row--today.svelte-1d18hkf {\n\t\tbackground: color-mix(in srgb, var(--dt-accent, #2563eb) 4%, transparent);\n\t}\n\t/* Token-based dim (not subtree opacity) so past rows stay legible/tappable */\n\t.mw-row--past.svelte-1d18hkf {\n\t\tbackground: color-mix(in srgb, var(--dt-text, rgba(0, 0, 0, 0.87)) 3%, transparent);\n\t}\n\t.mw-row--past.svelte-1d18hkf .mw-ev-title,\n\t.mw-row--past.svelte-1d18hkf .mw-day-num:where(.svelte-1d18hkf) {\n\t\tcolor: var(--dt-text-2, rgba(0, 0, 0, 0.54));\n\t}\n\t.mw-row--disabled.svelte-1d18hkf {\n\t\tbackground-image: repeating-linear-gradient(\n\t\t\t135deg,\n\t\t\ttransparent,\n\t\t\ttransparent 6px,\n\t\t\tcolor-mix(in srgb, var(--dt-text, rgba(0, 0, 0, 0.87)) 4%, transparent) 6px,\n\t\t\tcolor-mix(in srgb, var(--dt-text, rgba(0, 0, 0, 0.87)) 4%, transparent) 12px\n\t\t);\n\t}\n\t.mw-row-target.svelte-1d18hkf {\n\t\tposition: absolute;\n\t\tinset: 0;\n\t\tz-index: 0;\n\t\tborder: none;\n\t\tbackground: transparent;\n\t\tcursor: pointer;\n\t\tpadding: 0;\n\t\t-webkit-tap-highlight-color: transparent;\n\t}\n\t.mw-row-target.svelte-1d18hkf:disabled {\n\t\tcursor: default;\n\t}\n\t.mw-row-target.svelte-1d18hkf:focus-visible {\n\t\toutline: none;\n\t\tbox-shadow: inset 0 0 0 2px var(--dt-accent, #2563eb);\n\t}\n\n\t/* ─── Date column ────────────────────────────────── */\n\t.mw-date.svelte-1d18hkf {\n\t\tdisplay: flex;\n\t\tflex-direction: column;\n\t\talign-items: center;\n\t\twidth: 40px;\n\t\tflex-shrink: 0;\n\t\tgap: 2px;\n\t\tposition: relative;\n\t\tz-index: 1;\n\t\tpointer-events: none;\n\t}\n\n\t.mw-day-name.svelte-1d18hkf {\n\t\tfont: 600 11px/1 var(--dt-sans, system-ui, sans-serif);\n\t\tletter-spacing: 0.06em;\n\t\ttext-transform: uppercase;\n\t\tcolor: var(--dt-text-2, rgba(0, 0, 0, 0.54));\n\t}\n\t.mw-day-name--today.svelte-1d18hkf {\n\t\tcolor: var(--dt-accent, #2563eb);\n\t}\n\n\t.mw-day-num.svelte-1d18hkf {\n\t\tfont: 700 18px/1 var(--dt-sans, system-ui, sans-serif);\n\t\tcolor: var(--dt-text, rgba(0, 0, 0, 0.87));\n\t}\n\t.mw-day-num--today.svelte-1d18hkf {\n\t\tbackground: var(--dt-accent, #2563eb);\n\t\tcolor: var(--dt-btn-text, #fff);\n\t\twidth: 30px;\n\t\theight: 30px;\n\t\tdisplay: inline-flex;\n\t\talign-items: center;\n\t\tjustify-content: center;\n\t\tborder-radius: 50%;\n\t\tfont-size: 15px;\n\t}\n\n\t/* ─── Events column ──────────────────────────────── */\n\t/* pointer-events pass through to the full-row target underneath;\n\t only the chips (and \"+N more\") re-capture them. */\n\t.mw-events.svelte-1d18hkf {\n\t\tflex: 1;\n\t\tmin-width: 0;\n\t\tdisplay: flex;\n\t\tflex-direction: column;\n\t\tgap: 4px;\n\t\tposition: relative;\n\t\tz-index: 2;\n\t\tpointer-events: none;\n\t}\n\n\t.mw-empty.svelte-1d18hkf {\n\t\tfont: 400 13px/1 var(--dt-sans, system-ui, sans-serif);\n\t\tcolor: var(--dt-text-2, rgba(0, 0, 0, 0.54));\n\t}\n\n\t/* ─── Event chip ─────────────────────────────────── */\n\t.mw-ev.svelte-1d18hkf {\n\t\tdisplay: flex;\n\t\talign-items: center;\n\t\tgap: 0;\n\t\tmin-height: 44px;\n\t\tborder-radius: 6px;\n\t\tbackground: color-mix(in srgb, var(--ev-color) 10%, var(--dt-surface, #f9fafb));\n\t\toverflow: hidden;\n\t\tcursor: pointer;\n\t\ttransition: background 120ms;\n\t\t-webkit-tap-highlight-color: transparent;\n\t\tborder: none;\n\t\ttext-align: left;\n\t\tpadding: 0;\n\t\tpointer-events: auto;\n\t}\n\t.mw-ev.svelte-1d18hkf:active {\n\t\tbackground: color-mix(in srgb, var(--ev-color) 20%, var(--dt-surface, #f9fafb));\n\t}\n\t.mw-ev--selected.svelte-1d18hkf {\n\t\tbox-shadow: 0 0 0 1.5px var(--ev-color);\n\t}\n\t.mw-ev--current.svelte-1d18hkf {\n\t\tbackground: color-mix(in srgb, var(--ev-color) 16%, var(--dt-surface, #f9fafb));\n\t}\n\t.mw-ev--allday.svelte-1d18hkf {\n\t\tbackground: color-mix(in srgb, var(--ev-color) 14%, var(--dt-surface, #f9fafb));\n\t}\n\t/* Status treatments: token-level dims + a non-opacity signal\n\t (strikethrough / border style) — never a bare opacity on the chip. */\n\t.mw-ev--cancelled.svelte-1d18hkf {\n\t\tbackground: color-mix(in srgb, var(--ev-color) 5%, var(--dt-surface, #f9fafb));\n\t}\n\t.mw-ev--cancelled.svelte-1d18hkf .mw-ev-title:where(.svelte-1d18hkf) {\n\t\ttext-decoration: line-through;\n\t\tcolor: var(--dt-text-2, rgba(0, 0, 0, 0.54));\n\t}\n\t.mw-ev--cancelled.svelte-1d18hkf .mw-ev-stripe:where(.svelte-1d18hkf) {\n\t\topacity: 0.45; /* decorative bar only */\n\t}\n\t.mw-ev--tentative.svelte-1d18hkf {\n\t\tbackground: color-mix(in srgb, var(--ev-color) 6%, var(--dt-surface, #f9fafb));\n\t\tborder: 1px dashed color-mix(in srgb, var(--ev-color) 45%, transparent);\n\t}\n\t.mw-ev--full.svelte-1d18hkf {\n\t\tbackground: color-mix(in srgb, var(--ev-color) 6%, var(--dt-surface, #f9fafb));\n\t\tborder: 1px solid color-mix(in srgb, var(--ev-color) 30%, transparent);\n\t}\n\t.mw-ev--full.svelte-1d18hkf .mw-ev-title:where(.svelte-1d18hkf) {\n\t\tcolor: var(--dt-text-2, rgba(0, 0, 0, 0.54));\n\t}\n\t.mw-ev--limited.svelte-1d18hkf {\n\t\tbackground: color-mix(in srgb, var(--ev-color) 8%, var(--dt-surface, #f9fafb));\n\t\tborder: 1px dashed color-mix(in srgb, var(--ev-color) 45%, transparent);\n\t}\n\n\t.mw-ev-stripe.svelte-1d18hkf {\n\t\twidth: 3px;\n\t\talign-self: stretch;\n\t\tbackground: var(--ev-color, var(--dt-accent));\n\t\tflex-shrink: 0;\n\t\tborder-radius: 6px 0 0 6px;\n\t}\n\n\t.mw-ev-body.svelte-1d18hkf {\n\t\tflex: 1;\n\t\tmin-width: 0;\n\t\tpadding: 5px 8px;\n\t\tdisplay: flex;\n\t\talign-items: baseline;\n\t\tgap: 6px;\n\t}\n\n\t.mw-ev-title.svelte-1d18hkf {\n\t\tfont: 500 15px/1.2 var(--dt-sans, system-ui, sans-serif);\n\t\tcolor: var(--dt-text, rgba(0, 0, 0, 0.87));\n\t\twhite-space: nowrap;\n\t\toverflow: hidden;\n\t\ttext-overflow: ellipsis;\n\t\tflex: 1;\n\t\tmin-width: 0;\n\t}\n\n\t.mw-ev-time.svelte-1d18hkf {\n\t\tfont: 400 12px/1 var(--dt-mono, ui-monospace, monospace);\n\t\tcolor: var(--dt-text-2, rgba(0, 0, 0, 0.54));\n\t\twhite-space: nowrap;\n\t\tflex-shrink: 0;\n\t}\n\n\t.mw-ev-more.svelte-1d18hkf {\n\t\tfont: 500 12px/1 var(--dt-sans, system-ui, sans-serif);\n\t\tcolor: var(--dt-text-2, rgba(0, 0, 0, 0.54));\n\t\tpadding: 2px 4px;\n\t\tmin-height: 32px;\n\t\tborder: none;\n\t\tbackground: transparent;\n\t\tcursor: pointer;\n\t\ttext-align: left;\n\t\talign-self: flex-start;\n\t\tposition: relative;\n\t\tpointer-events: auto;\n\t\t-webkit-tap-highlight-color: transparent;\n\t}\n\t/* Hit-slop: 44px effective touch target */\n\t.mw-ev-more.svelte-1d18hkf::before {\n\t\tcontent: '';\n\t\tposition: absolute;\n\t\tleft: 0;\n\t\tright: 0;\n\t\ttop: 50%;\n\t\ttransform: translateY(-50%);\n\t\theight: 44px;\n\t}\n\t.mw-ev-more.svelte-1d18hkf:focus-visible {\n\t\toutline: none;\n\t\tbox-shadow: 0 0 0 2px var(--dt-accent, #2563eb);\n\t}\n\n\t/* ─── Chevron ────────────────────────────────────── */\n\t.mw-chevron.svelte-1d18hkf {\n\t\tflex-shrink: 0;\n\t\tcolor: var(--dt-text-3, rgba(0, 0, 0, 0.38));\n\t\tposition: relative;\n\t\tz-index: 1;\n\t\tpointer-events: none;\n\t}\n\n\t/* ─── Focus ──────────────────────────────────────── */\n\t.mw-ev.svelte-1d18hkf:focus-visible {\n\t\toutline: none;\n\t\tbox-shadow: 0 0 0 2px var(--dt-accent, #2563eb);\n\t}\n\n\t.mg.svelte-pvjuld {\n\t\tdisplay: flex;\n\t\tflex-direction: column;\n\t\tbackground: var(--dt-bg);\n\t\tcolor: var(--dt-text);\n\t\tfont-family: var(--dt-sans);\n\t\toverflow: hidden;\n\t\tcontainer-type: inline-size;\n\t}\n\t.mg--auto.svelte-pvjuld {\n\t\theight: auto;\n\t}\n\n\t.mg-head.svelte-pvjuld {\n\t\tdisplay: grid;\n\t\tgrid-template-columns: repeat(7, 1fr);\n\t\tborder-bottom: 1px solid var(--dt-border);\n\t\tflex: none;\n\t}\n\t.mg-head-cell.svelte-pvjuld {\n\t\tpadding: 6px 8px;\n\t\tfont-family: var(--dt-mono);\n\t\tfont-size: 11px;\n\t\tfont-weight: 600;\n\t\ttext-transform: uppercase;\n\t\tletter-spacing: 0.06em;\n\t\tcolor: var(--dt-text-3);\n\t}\n\n\t.mg-body.svelte-pvjuld {\n\t\tflex: 1;\n\t\tdisplay: grid;\n\t\tgrid-template-columns: repeat(7, 1fr);\n\t\t/* 56px floor + scroll backstop: a 6-row month compresses instead of clipping its last week */\n\t\tgrid-template-rows: repeat(var(--mg-rows, 5), minmax(56px, 1fr));\n\t\tmin-height: 0;\n\t\toverflow-y: auto;\n\t}\n\t.mg--auto.svelte-pvjuld .mg-body:where(.svelte-pvjuld) {\n\t\tgrid-template-rows: repeat(var(--mg-rows, 5), minmax(88px, auto));\n\t}\n\t.mg-row.svelte-pvjuld {\n\t\tdisplay: contents;\n\t}\n\n\t.mg-cell.svelte-pvjuld {\n\t\tdisplay: flex;\n\t\tflex-direction: column;\n\t\tgap: 3px;\n\t\tpadding: 6px;\n\t\tborder-right: 1px solid var(--dt-border-day);\n\t\tborder-bottom: 1px solid var(--dt-border-day);\n\t\tmin-width: 0;\n\t\toverflow: hidden;\n\t\ttext-align: left;\n\t}\n\t.mg-cell.svelte-pvjuld:nth-child(7n) {\n\t\tborder-right: none;\n\t}\n\t.mg-cell--weekend.svelte-pvjuld {\n\t\tbackground: var(--dt-weekend-bg, rgba(0, 0, 0, 0.02));\n\t}\n\t/* Dim only the day number for adjacent-month cells — their events stay legible */\n\t.mg-cell--out.svelte-pvjuld {\n\t\tbackground: var(--dt-surface, transparent);\n\t}\n\t.mg-cell--out.svelte-pvjuld .mg-daynum:where(.svelte-pvjuld) {\n\t\tcolor: var(--dt-text-3);\n\t}\n\t.mg-cell--today.svelte-pvjuld {\n\t\tbackground: var(--dt-today-bg);\n\t}\n\t.mg-cell--expanded.svelte-pvjuld .mg-chips:where(.svelte-pvjuld) {\n\t\toverflow-y: auto;\n\t}\n\t.mg-cell--disabled.svelte-pvjuld {\n\t\topacity: 0.35;\n\t\tpointer-events: none;\n\t}\n\t.mg-cell--clickable.svelte-pvjuld {\n\t\tcursor: pointer;\n\t}\n\t.mg-cell--clickable.svelte-pvjuld:hover {\n\t\tbackground: var(--dt-hover, rgba(0, 0, 0, 0.04));\n\t}\n\t.mg-cell.svelte-pvjuld:focus-visible {\n\t\toutline: 2px solid var(--dt-accent, #2563eb);\n\t\toutline-offset: -2px;\n\t}\n\n\t.mg-daynum.svelte-pvjuld {\n\t\tflex: none;\n\t\tfont-family: var(--dt-mono);\n\t\tfont-size: 12px;\n\t\tfont-weight: 600;\n\t\tcolor: var(--dt-text-2);\n\t\twidth: 22px;\n\t\theight: 22px;\n\t\tdisplay: inline-flex;\n\t\talign-items: center;\n\t\tjustify-content: center;\n\t\tborder-radius: 999px;\n\t}\n\t.mg-daynum--today.svelte-pvjuld {\n\t\tbackground: var(--dt-accent);\n\t\tcolor: var(--dt-btn-text);\n\t}\n\n\t.mg-chips.svelte-pvjuld {\n\t\tdisplay: flex;\n\t\tflex-direction: column;\n\t\tgap: 2px;\n\t\tmin-height: 0;\n\t\toverflow: hidden;\n\t}\n\t.mg-chip.svelte-pvjuld {\n\t\tdisplay: flex;\n\t\talign-items: center;\n\t\tgap: 5px;\n\t\tborder: none;\n\t\tbackground: none;\n\t\tpadding: 2px 4px;\n\t\tborder-radius: 5px;\n\t\tfont-family: var(--dt-sans);\n\t\tfont-size: 12px;\n\t\tline-height: 1.3;\n\t\tcolor: var(--dt-text);\n\t\tcursor: pointer;\n\t\tmin-width: 0;\n\t\ttext-align: left;\n\t}\n\t.mg-chip.svelte-pvjuld:hover {\n\t\tbackground: var(--dt-hover, rgba(0, 0, 0, 0.04));\n\t}\n\t.mg-chip.svelte-pvjuld:focus-visible {\n\t\tbox-shadow: 0 0 0 2px var(--dt-accent, #2563eb);\n\t\toutline: none;\n\t}\n\t.mg-chip--selected.svelte-pvjuld {\n\t\tbackground: var(--dt-accent-dim);\n\t}\n\t.mg-chip--cancelled.svelte-pvjuld {\n\t\ttext-decoration: line-through;\n\t}\n\t.mg-chip--cancelled.svelte-pvjuld .mg-chip-title:where(.svelte-pvjuld) {\n\t\tcolor: var(--dt-text-2);\n\t}\n\t.mg-chip--cancelled.svelte-pvjuld .mg-chip-dot:where(.svelte-pvjuld) {\n\t\topacity: 0.5;\n\t}\n\t.mg-chip-dot.svelte-pvjuld {\n\t\tflex: none;\n\t\twidth: 7px;\n\t\theight: 7px;\n\t\tborder-radius: 999px;\n\t\tbackground: var(--mg-chip-color);\n\t}\n\t.mg-chip-time.svelte-pvjuld {\n\t\tflex: none;\n\t\tfont-family: var(--dt-mono);\n\t\tfont-size: 11px;\n\t\tcolor: var(--dt-text-2);\n\t}\n\t.mg-chip-title.svelte-pvjuld {\n\t\toverflow: hidden;\n\t\ttext-overflow: ellipsis;\n\t\twhite-space: nowrap;\n\t}\n\t.mg-more.svelte-pvjuld {\n\t\talign-self: flex-start;\n\t\tborder: none;\n\t\tbackground: none;\n\t\tpadding: 1px 4px;\n\t\tborder-radius: 5px;\n\t\tfont-family: var(--dt-mono);\n\t\tfont-size: 11px;\n\t\tcolor: var(--dt-text-2);\n\t\tcursor: pointer;\n\t}\n\t.mg-more.svelte-pvjuld:hover {\n\t\tbackground: var(--dt-hover, rgba(0, 0, 0, 0.04));\n\t\tcolor: var(--dt-text);\n\t}\n\t.mg-more.svelte-pvjuld:focus-visible {\n\t\tbox-shadow: 0 0 0 2px var(--dt-accent, #2563eb);\n\t\toutline: none;\n\t}\n\n\t/* Container-based (the calendar adapts to its box, not the viewport) */\n\t@container (max-width: 640px) {\n\t\t.mg-chip-time.svelte-pvjuld {\n\t\t\tdisplay: none;\n\t\t}\n\t}\n\n\t@media (hover: none) {\n\t\t.mg-chip.svelte-pvjuld,\n\t\t.mg-more.svelte-pvjuld {\n\t\t\tmin-height: 30px;\n\t\t}\n\t}\n\n\t/* ── Dots mode (mobile) ─────────────────────────────\n\t Cells are too narrow for text chips, so events render as colored\n\t dots in a wrapping row. The cell itself stays the tap target\n\t (day drill-down); dots keep their title/aria-label for a11y. */\n\t.mg--dots.svelte-pvjuld .mg-chips:where(.svelte-pvjuld) {\n\t\tflex-direction: row;\n\t\tflex-wrap: wrap;\n\t\talign-items: center;\n\t\tgap: 3px;\n\t}\n\t.mg--dots.svelte-pvjuld .mg-chip:where(.svelte-pvjuld) {\n\t\tpadding: 3px;\n\t\tmin-height: 0;\n\t}\n\t.mg--dots.svelte-pvjuld .mg-chip-title:where(.svelte-pvjuld),\n\t.mg--dots.svelte-pvjuld .mg-chip-time:where(.svelte-pvjuld) {\n\t\tdisplay: none;\n\t}\n\t.mg--dots.svelte-pvjuld .mg-chip-dot:where(.svelte-pvjuld) {\n\t\twidth: 8px;\n\t\theight: 8px;\n\t}\n\t.mg--dots.svelte-pvjuld .mg-more:where(.svelte-pvjuld) {\n\t\tpadding: 0 3px;\n\t\tmin-height: 0;\n\t\talign-self: center;\n\t\tfont-size: 10px;\n\t}\n\n\t.cal.svelte-1b53e7w {\n\t\tposition: relative;\n\t\twidth: 100%;\n\t\tmin-width: 0;\n\t\theight: var(--cal-h, 600px);\n\t\tbackground: var(--dt-bg, inherit);\n\t\tborder-radius: var(--cal-r, 12px);\n\t\toverflow: clip;\n\t\tdisplay: flex;\n\t\tflex-direction: column;\n\t\tborder: 1px solid var(--dt-border, rgba(0, 0, 0, 0.08));\n\t\tbox-sizing: border-box;\n\t}\n\t.cal--auto.svelte-1b53e7w {\n\t\theight: auto;\n\t\toverflow: visible;\n\t}\n\n\n\t/* ── Desktop header ── */\n\t.cal-hd.svelte-1b53e7w {\n\t\tdisplay: flex;\n\t\tflex-wrap: wrap;\n\t\talign-items: center;\n\t\tgap: 8px;\n\t\tpadding: 8px 12px;\n\t\tmin-height: 48px;\n\t\tbox-sizing: border-box;\n\t\tborder-bottom: 1px solid var(--dt-border, rgba(0, 0, 0, 0.08));\n\t\tflex-shrink: 0;\n\t}\n\n\t.cal-hd-side.svelte-1b53e7w {\n\t\tdisplay: flex;\n\t\talign-items: center;\n\t\tgap: 4px;\n\t\tflex: 1;\n\t\tmin-width: 0;\n\t}\n\n\t.cal-hd-side--end.svelte-1b53e7w {\n\t\tjustify-content: flex-end;\n\t}\n\n\t.cal-hd-title.svelte-1b53e7w {\n\t\tfont: 600 14px/1.2 var(--dt-sans, system-ui, sans-serif);\n\t\tcolor: var(--dt-text, rgba(0, 0, 0, 0.87));\n\t\twhite-space: nowrap;\n\t\toverflow: hidden;\n\t\ttext-overflow: ellipsis;\n\t}\n\n\t.cal-hd-btn.svelte-1b53e7w {\n\t\tdisplay: flex;\n\t\talign-items: center;\n\t\tjustify-content: center;\n\t\twidth: 28px;\n\t\theight: 28px;\n\t\tborder: none;\n\t\tbackground: transparent;\n\t\tcolor: var(--dt-text-2, rgba(0, 0, 0, 0.54));\n\t\tborder-radius: 6px;\n\t\tcursor: pointer;\n\t\ttransition: background 120ms, color 120ms;\n\t}\n\n\t.cal-hd-btn.svelte-1b53e7w:hover {\n\t\tcolor: var(--dt-text, rgba(0, 0, 0, 0.87));\n\t\tbackground: color-mix(in srgb, var(--dt-text, rgba(0, 0, 0, 0.87)) 8%, transparent);\n\t}\n\n\t.cal-hd-btn.svelte-1b53e7w:focus-visible,\n\t.cal-hd-today.svelte-1b53e7w:focus-visible,\n\t.cal-pill.svelte-1b53e7w:focus-visible {\n\t\toutline: 2px solid color-mix(in srgb, var(--dt-accent, #2563eb) 55%, transparent);\n\t\toutline-offset: 2px;\n\t}\n\n\t.cal-hd-today.svelte-1b53e7w {\n\t\tfont: 500 12px/1 var(--dt-sans, system-ui, sans-serif);\n\t\tcolor: var(--dt-text-2, rgba(0, 0, 0, 0.54));\n\t\tbackground: transparent;\n\t\tborder: 1px solid var(--dt-border, rgba(0, 0, 0, 0.08));\n\t\tpadding: 6px 10px;\n\t\tborder-radius: 6px;\n\t\tcursor: pointer;\n\t\twhite-space: nowrap;\n\t\tmargin-right: 2px;\n\t\ttransition: background 120ms, color 120ms, border-color 120ms;\n\t}\n\n\t.cal-hd-today.svelte-1b53e7w:hover:not(:disabled) {\n\t\tcolor: var(--dt-text, rgba(0, 0, 0, 0.87));\n\t\tborder-color: var(--dt-text-2, rgba(0, 0, 0, 0.54));\n\t}\n\t.cal-hd-today.svelte-1b53e7w:disabled {\n\t\topacity: 0.45;\n\t\tcursor: default;\n\t}\n\n\t.cal-pills.svelte-1b53e7w {\n\t\tdisplay: flex;\n\t\tgap: 2px;\n\t\tbackground: color-mix(in srgb, var(--dt-surface, var(--dt-bg, #ffffff)) 85%, transparent);\n\t\tborder-radius: 8px;\n\t\tpadding: 2px;\n\t\tborder: 1px solid var(--dt-border, rgba(0, 0, 0, 0.08));\n\t\tflex-shrink: 0;\n\t}\n\n\t.cal-pill.svelte-1b53e7w {\n\t\tborder: none;\n\t\tbackground: transparent;\n\t\tcolor: var(--dt-text-2, rgba(0, 0, 0, 0.54));\n\t\tcursor: pointer;\n\t\tfont: 500 12px/1 var(--dt-sans, system-ui, sans-serif);\n\t\tpadding: 5px 12px;\n\t\tborder-radius: 6px;\n\t\ttransition: background 100ms, color 100ms;\n\t}\n\n\t/* :not(--active) — the hover rule otherwise outranks the active color,\n\t and iOS keeps :hover stuck after a tap (dark text on the accent). */\n\t.cal-pill.svelte-1b53e7w:hover:not(.cal-pill--active) {\n\t\tcolor: var(--dt-text, rgba(0, 0, 0, 0.87));\n\t}\n\n\t.cal-pill--active.svelte-1b53e7w {\n\t\tbackground: var(--dt-accent, #2563eb);\n\t\tcolor: var(--dt-btn-text, #fff);\n\t}\n\n\t.cal-body.svelte-1b53e7w {\n\t\tflex: 1;\n\t\tmin-height: 0;\n\t\tposition: relative;\n\t\toverflow: hidden;\n\t}\n\t.cal--auto.svelte-1b53e7w .cal-body:where(.svelte-1b53e7w) {\n\t\toverflow: visible;\n\t}\n\n\t.cal-empty.svelte-1b53e7w {\n\t\tdisplay: flex;\n\t\talign-items: center;\n\t\tjustify-content: center;\n\t\theight: 100%;\n\t\tfont: 400 13px / 1 var(--dt-sans, system-ui, sans-serif);\n\t\tcolor: var(--dt-text-3, rgba(0, 0, 0, 0.38));\n\t}\n\n\t.cal-loading.svelte-1b53e7w {\n\t\tposition: absolute;\n\t\ttop: 0;\n\t\tleft: 0;\n\t\tright: 0;\n\t\theight: 2px;\n\t\tbackground: linear-gradient(\n\t\t\t90deg,\n\t\t\ttransparent 0%,\n\t\t\tvar(--dt-accent, #2563eb) 50%,\n\t\t\ttransparent 100%\n\t\t);\n\t\tanimation: svelte-1b53e7w-cal-slide 1.2s ease-in-out infinite;\n\t}\n\n\t@keyframes svelte-1b53e7w-cal-slide {\n\t\t0% { transform: translateX(-100%); }\n\t\t100% { transform: translateX(100%); }\n\t}\n\n\t@media (prefers-reduced-motion: reduce) {\n\t\t.cal-loading.svelte-1b53e7w {\n\t\t\tanimation: none;\n\t\t\tbackground: var(--dt-accent-dim, rgba(37, 99, 235, 0.12));\n\t\t}\n\t}\n\n\t/* ── Mobile header (flow layout) ── */\n\t.cal-m-hd.svelte-1b53e7w {\n\t\tdisplay: flex;\n\t\talign-items: center;\n\t\tgap: 4px;\n\t\tpadding: 8px 8px 6px;\n\t\tborder-bottom: 1px solid var(--dt-border, rgba(0, 0, 0, 0.08));\n\t\tflex-shrink: 0;\n\t\tmin-height: 44px;\n\t}\n\n\t/* Narrow containers: the date label moves to its own row (.cal-m-titlebar),\n\t so the controls row spreads pills and nav to the edges. */\n\t.cal-m-hd--stack.svelte-1b53e7w {\n\t\tjustify-content: space-between;\n\t}\n\t.cal-m-hd--titled.svelte-1b53e7w {\n\t\tborder-bottom: none;\n\t\tpadding-bottom: 2px;\n\t}\n\t.cal-m-titlebar.svelte-1b53e7w {\n\t\tdisplay: flex;\n\t\tjustify-content: center;\n\t\tpadding: 0 8px 8px;\n\t\tborder-bottom: 1px solid var(--dt-border, rgba(0, 0, 0, 0.08));\n\t\tflex-shrink: 0;\n\t}\n\t.cal-m-titlebar.svelte-1b53e7w .cal-m-title:where(.svelte-1b53e7w) {\n\t\tflex: 0 1 auto;\n\t}\n\n\t.cal-m-left.svelte-1b53e7w,\n\t.cal-m-right.svelte-1b53e7w {\n\t\tdisplay: flex;\n\t\talign-items: center;\n\t\tgap: 2px;\n\t\tflex-shrink: 0;\n\t}\n\n\t.cal-m-right.svelte-1b53e7w {\n\t\tjustify-content: flex-end;\n\t}\n\n\t.cal-m-nav.svelte-1b53e7w {\n\t\tdisplay: flex;\n\t\talign-items: center;\n\t\tjustify-content: center;\n\t\twidth: 40px;\n\t\theight: 40px;\n\t\tborder: none;\n\t\tbackground: transparent;\n\t\tcolor: var(--dt-text-2, rgba(0, 0, 0, 0.54));\n\t\tborder-radius: 50%;\n\t\tcursor: pointer;\n\t\ttransition: background 120ms, color 120ms;\n\t\t-webkit-tap-highlight-color: transparent;\n\t\tflex-shrink: 0;\n\t}\n\t.cal-m-nav.svelte-1b53e7w:hover {\n\t\tcolor: var(--dt-text, rgba(0, 0, 0, 0.87));\n\t\tbackground: color-mix(in srgb, var(--dt-text, rgba(0, 0, 0, 0.87)) 8%, transparent);\n\t}\n\t.cal-m-nav.svelte-1b53e7w:active {\n\t\tbackground: var(--dt-accent-dim, rgba(37, 99, 235, 0.12));\n\t}\n\t.cal-m-nav.svelte-1b53e7w:focus-visible {\n\t\toutline: 2px solid color-mix(in srgb, var(--dt-accent, #2563eb) 55%, transparent);\n\t\toutline-offset: 2px;\n\t}\n\n\t.cal-m-pills.svelte-1b53e7w {\n\t\tdisplay: flex;\n\t\tgap: 2px;\n\t\tbackground: color-mix(in srgb, var(--dt-surface, var(--dt-bg, #ffffff)) 85%, transparent);\n\t\tborder-radius: 8px;\n\t\tpadding: 2px;\n\t\tborder: 1px solid var(--dt-border, rgba(0, 0, 0, 0.08));\n\t\tflex-shrink: 0;\n\t}\n\t.cal-m-pill.svelte-1b53e7w {\n\t\tborder: none;\n\t\tbackground: transparent;\n\t\tcolor: var(--dt-text-2, rgba(0, 0, 0, 0.54));\n\t\tcursor: pointer;\n\t\tfont: 600 12px / 1 var(--dt-sans, system-ui, sans-serif);\n\t\tpadding: 9px 12px;\n\t\tborder-radius: 6px;\n\t\tletter-spacing: 0.04em;\n\t\ttext-transform: uppercase;\n\t\ttransition: background 100ms, color 100ms;\n\t\t-webkit-tap-highlight-color: transparent;\n\t}\n\t.cal-m-pill.svelte-1b53e7w:hover:not(.cal-m-pill--active) {\n\t\tcolor: var(--dt-text, rgba(0, 0, 0, 0.87));\n\t}\n\t.cal-m-pill--active.svelte-1b53e7w {\n\t\tbackground: var(--dt-accent, #2563eb);\n\t\tcolor: var(--dt-btn-text, #fff);\n\t}\n\n\t.cal-m-title.svelte-1b53e7w {\n\t\tflex: 1;\n\t\ttext-align: center;\n\t\tfont: 600 14px / 1.2 var(--dt-sans, system-ui, sans-serif);\n\t\tcolor: var(--dt-text, rgba(0, 0, 0, 0.87));\n\t\twhite-space: nowrap;\n\t\toverflow: hidden;\n\t\ttext-overflow: ellipsis;\n\t\tmin-width: 0;\n\t}\n\n\t.cal-m-today.svelte-1b53e7w {\n\t\tfont: 600 12px / 1 var(--dt-sans, system-ui, sans-serif);\n\t\tcolor: var(--dt-accent, #2563eb);\n\t\tbackground: color-mix(in srgb, var(--dt-accent, #2563eb) 10%, transparent);\n\t\tborder: none;\n\t\tmin-height: 40px;\n\t\tpadding: 5px 12px;\n\t\tborder-radius: 6px;\n\t\tcursor: pointer;\n\t\twhite-space: nowrap;\n\t\tletter-spacing: 0.04em;\n\t\ttext-transform: uppercase;\n\t\ttransition: background 120ms, color 120ms;\n\t\t-webkit-tap-highlight-color: transparent;\n\t\tflex-shrink: 0;\n\t}\n\t.cal-m-today.svelte-1b53e7w:hover:not(:disabled) {\n\t\tbackground: color-mix(in srgb, var(--dt-accent, #2563eb) 18%, transparent);\n\t}\n\t.cal-m-today.svelte-1b53e7w:active:not(:disabled) {\n\t\tbackground: color-mix(in srgb, var(--dt-accent, #2563eb) 25%, transparent);\n\t}\n\t.cal-m-today.svelte-1b53e7w:disabled {\n\t\topacity: 0.45;\n\t\tcursor: default;\n\t}\n\t.cal-m-today.svelte-1b53e7w:focus-visible {\n\t\toutline: 2px solid color-mix(in srgb, var(--dt-accent, #2563eb) 55%, transparent);\n\t\toutline-offset: 2px;\n\t}\n";
|
|
1
|
+
globalThis.__DAY_CALENDAR_CSS__ = ":host{display:block}\n\t/* ─── Container ──────────────────────────────────── */\n\t.tw.svelte-j4rvbp {\n\t\tposition: relative;\n\t\tdisplay: flex;\n\t\tflex-direction: column;\n\t\toverflow: hidden;\n\t\tuser-select: none;\n\t\tfont-variant-numeric: tabular-nums;\n\t\tbackground: var(--dt-bg, #ffffff);\n\t\t-webkit-tap-highlight-color: transparent;\n\t}\n\t.tw--auto.svelte-j4rvbp { overflow: visible; }\n\n\t/* ─── Scroll container ───────────────────────────── */\n\t.tw-scroll.svelte-j4rvbp {\n\t\tflex: 1;\n\t\tmin-height: 0;\n\t\toverflow-y: auto;\n\t\toverflow-x: auto;\n\t\toverscroll-behavior: contain;\n\t\tscrollbar-width: thin;\n\t\tscrollbar-color: var(--dt-scrollbar, rgba(0, 0, 0, 0.1)) transparent;\n\t}\n\t.tw--auto.svelte-j4rvbp .tw-scroll:where(.svelte-j4rvbp) { overflow-y: visible; }\n\t.tw-scroll.svelte-j4rvbp::-webkit-scrollbar { width: 5px; height: 5px; }\n\t.tw-scroll.svelte-j4rvbp::-webkit-scrollbar-thumb {\n\t\tbackground: var(--dt-scrollbar, rgba(0, 0, 0, 0.1));\n\t\tborder-radius: 4px;\n\t}\n\t.tw-scroll.svelte-j4rvbp::-webkit-scrollbar-track { background: transparent; }\n\n\t.tw-inner.svelte-j4rvbp {\n\t\tdisplay: flex;\n\t\tflex-direction: column;\n\t\twidth: 100%;\n\t}\n\n\t/* ─── Sticky top (header + all-day) ──────────────── */\n\t.tw-top.svelte-j4rvbp {\n\t\tposition: sticky;\n\t\ttop: 0;\n\t\tz-index: 30;\n\t\tbackground: var(--dt-bg, #ffffff);\n\t\tborder-bottom: 1px solid var(--dt-border, rgba(0, 0, 0, 0.08));\n\t}\n\n\t/* ─── Day header row ─────────────────────────────── */\n\t.tw-head.svelte-j4rvbp {\n\t\tdisplay: flex;\n\t}\n\n\t.tw-corner.svelte-j4rvbp {\n\t\tflex-shrink: 0;\n\t\tposition: sticky;\n\t\tleft: 0;\n\t\tz-index: 2;\n\t\tbackground: var(--dt-bg, #ffffff);\n\t}\n\n\t.tw-hd.svelte-j4rvbp {\n\t\tflex: 1 1 0;\n\t\tmin-width: 110px;\n\t\tdisplay: flex;\n\t\tflex-direction: column;\n\t\talign-items: center;\n\t\tgap: 2px;\n\t\tpadding: 8px 4px 6px;\n\t\tborder-left: 1px solid var(--dt-border, rgba(0, 0, 0, 0.08));\n\t}\n\n\t.tw-hd-wd.svelte-j4rvbp {\n\t\tfont: 500 10px/1 var(--dt-sans, system-ui, sans-serif);\n\t\tletter-spacing: 0.06em;\n\t\ttext-transform: uppercase;\n\t\tcolor: var(--dt-text-3, rgba(0, 0, 0, 0.38));\n\t}\n\t.tw-hd--today.svelte-j4rvbp .tw-hd-wd:where(.svelte-j4rvbp) {\n\t\tcolor: var(--dt-accent, #2563eb);\n\t\tfont-weight: 600;\n\t}\n\n\t.tw-hd-num.svelte-j4rvbp {\n\t\tdisplay: inline-flex;\n\t\talign-items: center;\n\t\tjustify-content: center;\n\t\tmin-width: 26px;\n\t\theight: 26px;\n\t\tborder-radius: 50%;\n\t\tfont: 600 14px/1 var(--dt-sans, system-ui, sans-serif);\n\t\tcolor: var(--dt-text, rgba(0, 0, 0, 0.87));\n\t}\n\t.tw-hd-num--today.svelte-j4rvbp {\n\t\tbackground: var(--dt-accent, #2563eb);\n\t\tcolor: var(--dt-accent-fg, #ffffff);\n\t\tfont-weight: 700;\n\t}\n\n\t.tw-hd-custom.svelte-j4rvbp {\n\t\tmax-width: 100%;\n\t\toverflow: hidden;\n\t}\n\n\t/* ─── All-day strip ──────────────────────────────── */\n\t.tw-allday.svelte-j4rvbp {\n\t\tdisplay: flex;\n\t\tborder-top: 1px solid var(--dt-border, rgba(0, 0, 0, 0.08));\n\t}\n\n\t.tw-ad-gutter.svelte-j4rvbp {\n\t\tflex-shrink: 0;\n\t\tposition: sticky;\n\t\tleft: 0;\n\t\tz-index: 2;\n\t\tbackground: var(--dt-bg, #ffffff);\n\t\tdisplay: flex;\n\t\talign-items: flex-start;\n\t\tjustify-content: flex-end;\n\t\tpadding: 4px 6px 4px 0;\n\t}\n\t.tw-ad-gutter-lb.svelte-j4rvbp {\n\t\tfont: 500 10px/1.2 var(--dt-sans, system-ui, sans-serif);\n\t\tcolor: var(--dt-text-3, rgba(0, 0, 0, 0.38));\n\t\ttext-align: right;\n\t}\n\n\t.tw-ad-cell.svelte-j4rvbp {\n\t\tflex: 1 1 0;\n\t\tmin-width: 110px;\n\t\tdisplay: flex;\n\t\tflex-direction: column;\n\t\tgap: 2px;\n\t\tpadding: 3px 3px 4px;\n\t\tborder-left: 1px solid var(--dt-border, rgba(0, 0, 0, 0.08));\n\t}\n\t.tw-ad-cell--today.svelte-j4rvbp { background: var(--dt-today-bg, rgba(37, 99, 235, 0.04)); }\n\n\t.tw-ad.svelte-j4rvbp {\n\t\tappearance: none;\n\t\tdisplay: flex;\n\t\talign-items: center;\n\t\tgap: 3px;\n\t\tpadding: 2px 6px;\n\t\tmin-height: 18px;\n\t\tborder: none;\n\t\tborder-radius: 3px;\n\t\tbackground: color-mix(in srgb, var(--ev-color) 22%, var(--dt-surface, var(--dt-bg, #ffffff)));\n\t\tborder-left: 2.5px solid var(--ev-color);\n\t\tcursor: pointer;\n\t\toverflow: hidden;\n\t\ttext-align: left;\n\t\ttransition: background 0.12s;\n\t\t-webkit-tap-highlight-color: transparent;\n\t}\n\t.tw-ad.svelte-j4rvbp:hover {\n\t\tbackground: color-mix(in srgb, var(--ev-color) 32%, var(--dt-surface, var(--dt-bg, #ffffff)));\n\t}\n\t.tw-ad--mid.svelte-j4rvbp,\n\t.tw-ad--end.svelte-j4rvbp:not(.tw-ad--start) {\n\t\tborder-left: 1px dashed color-mix(in srgb, var(--ev-color) 40%, transparent);\n\t\tborder-radius: 0 3px 3px 0;\n\t}\n\t.tw-ad--selected.svelte-j4rvbp {\n\t\tbox-shadow: 0 0 0 1.5px var(--ev-color);\n\t}\n\t.tw-ad--cancelled.svelte-j4rvbp .tw-ad-title:where(.svelte-j4rvbp) {\n\t\ttext-decoration: line-through;\n\t\tcolor: var(--dt-text-2, rgba(0, 0, 0, 0.54));\n\t}\n\t.tw-ad.svelte-j4rvbp:focus-visible {\n\t\toutline: none;\n\t\tbox-shadow: 0 0 0 2px var(--dt-accent, #2563eb);\n\t}\n\n\t.tw-ad-title.svelte-j4rvbp {\n\t\tfont: 500 11px/1.2 var(--dt-sans, system-ui, sans-serif);\n\t\tcolor: var(--dt-text, rgba(0, 0, 0, 0.87));\n\t\twhite-space: nowrap;\n\t\toverflow: hidden;\n\t\ttext-overflow: ellipsis;\n\t\tflex: 1;\n\t\tmin-width: 0;\n\t}\n\t.tw-ad-span.svelte-j4rvbp {\n\t\tfont: 400 10px/1 var(--dt-sans, system-ui, sans-serif);\n\t\tcolor: var(--dt-text-2, rgba(0, 0, 0, 0.54));\n\t\tflex-shrink: 0;\n\t}\n\t.tw-ad-cont.svelte-j4rvbp,\n\t.tw-ad-arrow.svelte-j4rvbp {\n\t\tfont-size: 10px;\n\t\tcolor: var(--ev-color);\n\t\tflex-shrink: 0;\n\t\tline-height: 1;\n\t}\n\t.tw-ad-arrow.svelte-j4rvbp { margin-left: auto; }\n\n\t.tw-ad-more.svelte-j4rvbp {\n\t\tappearance: none;\n\t\tbackground: none;\n\t\tborder: none;\n\t\tborder-radius: 3px;\n\t\ttext-align: left;\n\t\talign-self: flex-start;\n\t\tfont: 500 10px/1 var(--dt-sans, system-ui, sans-serif);\n\t\tcolor: var(--dt-text-2, rgba(0, 0, 0, 0.54));\n\t\tpadding: 2px 6px;\n\t\tcursor: pointer;\n\t\t-webkit-tap-highlight-color: transparent;\n\t}\n\t.tw-ad-more.svelte-j4rvbp:hover { color: var(--dt-text, rgba(0, 0, 0, 0.87)); }\n\t.tw-ad-more.svelte-j4rvbp:focus-visible {\n\t\toutline: none;\n\t\tbox-shadow: 0 0 0 2px var(--dt-accent, #2563eb);\n\t}\n\n\t/* ─── Grid body ──────────────────────────────────── */\n\t.tw-body.svelte-j4rvbp {\n\t\tdisplay: flex;\n\t\tposition: relative;\n\t}\n\n\t/* ─── Time gutter ────────────────────────────────── */\n\t.tw-gutter.svelte-j4rvbp {\n\t\tflex-shrink: 0;\n\t\tposition: sticky;\n\t\tleft: 0;\n\t\tz-index: 20;\n\t\tbackground: var(--dt-bg, #ffffff);\n\t\tborder-right: 1px solid var(--dt-border, rgba(0, 0, 0, 0.08));\n\t}\n\n\t.tw-gutter-lb.svelte-j4rvbp {\n\t\tposition: absolute;\n\t\tright: 6px;\n\t\ttransform: translateY(-50%);\n\t\tfont: 500 11px/1 var(--dt-mono, ui-monospace, monospace);\n\t\tcolor: var(--dt-text-3, rgba(0, 0, 0, 0.38));\n\t\twhite-space: nowrap;\n\t}\n\n\t.tw-gutter-now.svelte-j4rvbp {\n\t\tposition: absolute;\n\t\tright: -3px;\n\t\twidth: 6px;\n\t\theight: 6px;\n\t\tborder-radius: 50%;\n\t\tbackground: var(--dt-accent, #2563eb);\n\t\ttransform: translateY(-50%);\n\t\tz-index: 2;\n\t}\n\n\t/* ─── Columns wrapper ────────────────────────────── */\n\t.tw-cols.svelte-j4rvbp {\n\t\tflex: 1;\n\t\tdisplay: flex;\n\t\tposition: relative;\n\t\tmin-width: 0;\n\t}\n\n\t/* ─── Guide lines ────────────────────────────────── */\n\t.tw-lines.svelte-j4rvbp {\n\t\tposition: absolute;\n\t\tinset: 0;\n\t\tpointer-events: none;\n\t\t/* Above the columns' background washes, below blocked/events/now */\n\t\tz-index: 1;\n\t}\n\t.tw-line.svelte-j4rvbp {\n\t\tposition: absolute;\n\t\tleft: 0;\n\t\tright: 0;\n\t\theight: 1px;\n\t\tbackground: var(--dt-border, rgba(0, 0, 0, 0.08));\n\t}\n\t.tw-line--half.svelte-j4rvbp { opacity: 0.4; }\n\n\t/* ─── Day column ─────────────────────────────────── */\n\t.tw-col.svelte-j4rvbp {\n\t\tflex: 1 1 0;\n\t\tmin-width: 110px;\n\t\tposition: relative;\n\t\tborder-left: 1px solid var(--dt-border, rgba(0, 0, 0, 0.08));\n\t\tbox-sizing: border-box;\n\t}\n\t/* The gutter's right border already bounds the first column */\n\t.tw-lines.svelte-j4rvbp + .tw-col:where(.svelte-j4rvbp) { border-left: none; }\n\n\t.tw-col--today.svelte-j4rvbp { background: var(--dt-today-bg, rgba(37, 99, 235, 0.04)); }\n\t/* Dim past days with a wash, never a subtree opacity (event contrast) */\n\t.tw-col--past.svelte-j4rvbp {\n\t\tbackground: color-mix(in srgb, var(--dt-text, rgba(0, 0, 0, 0.87)) 2.5%, transparent);\n\t}\n\t.tw-col--weekend.svelte-j4rvbp:not(.tw-col--today):not(.tw-col--past) {\n\t\tbackground: var(--dt-weekend-bg, rgba(0, 0, 0, 0.012));\n\t}\n\t.tw-col--disabled.svelte-j4rvbp {\n\t\tbackground: repeating-linear-gradient(\n\t\t\t45deg,\n\t\t\ttransparent,\n\t\t\ttransparent 6px,\n\t\t\tvar(--dt-border, rgba(0, 0, 0, 0.08)) 6px,\n\t\t\tvar(--dt-border, rgba(0, 0, 0, 0.08)) 7px\n\t\t) !important;\n\t}\n\n\t/* ─── Blocked slot overlay ───────────────────────── */\n\t.tw-blocked.svelte-j4rvbp {\n\t\tposition: absolute;\n\t\tleft: 0;\n\t\tright: 0;\n\t\tz-index: 2;\n\t\tbackground: repeating-linear-gradient(\n\t\t\t-45deg,\n\t\t\tcolor-mix(in srgb, var(--dt-text, rgba(0, 0, 0, 0.87)) 4%, transparent),\n\t\t\tcolor-mix(in srgb, var(--dt-text, rgba(0, 0, 0, 0.87)) 4%, transparent) 4px,\n\t\t\ttransparent 4px,\n\t\t\ttransparent 8px\n\t\t);\n\t\tpointer-events: none;\n\t\tdisplay: flex;\n\t\talign-items: flex-start;\n\t\tjustify-content: center;\n\t\toverflow: hidden;\n\t}\n\t.tw-blocked-lb.svelte-j4rvbp {\n\t\tfont: 500 10px/1 var(--dt-sans, system-ui, sans-serif);\n\t\tcolor: var(--dt-text-3, rgba(0, 0, 0, 0.38));\n\t\ttext-transform: uppercase;\n\t\tletter-spacing: 0.04em;\n\t\twhite-space: nowrap;\n\t\tpadding-top: 4px;\n\t}\n\n\t/* ─── Now line ───────────────────────────────────── */\n\t.tw-now.svelte-j4rvbp {\n\t\tposition: absolute;\n\t\tleft: 0;\n\t\tright: 0;\n\t\theight: 2px;\n\t\tbackground: var(--dt-accent, #2563eb);\n\t\tbox-shadow: 0 0 6px var(--dt-glow, rgba(37, 99, 235, 0.25));\n\t\tz-index: 12;\n\t\tpointer-events: none;\n\t\ttransform: translateY(-1px);\n\t}\n\t.tw-now-dot.svelte-j4rvbp {\n\t\tposition: absolute;\n\t\tleft: -4px;\n\t\ttop: -3px;\n\t\twidth: 8px;\n\t\theight: 8px;\n\t\tborder-radius: 50%;\n\t\tbackground: var(--dt-accent, #2563eb);\n\t}\n\n\t/* ─── Events ─────────────────────────────────────── */\n\t.tw-ev.svelte-j4rvbp {\n\t\tposition: absolute;\n\t\tz-index: 6;\n\t\tborder-radius: 5px;\n\t\tbackground: color-mix(in srgb, var(--ev-color) 14%, var(--dt-surface, var(--dt-bg, #ffffff)));\n\t\tdisplay: flex;\n\t\talign-items: stretch;\n\t\toverflow: hidden;\n\t\tcursor: grab;\n\t\t/* Pointer drags move the event, never scroll the grid */\n\t\ttouch-action: none;\n\t\ttransition: box-shadow 120ms, background 120ms;\n\t\tbox-sizing: border-box;\n\t\tmin-height: 24px;\n\t\t-webkit-tap-highlight-color: transparent;\n\t}\n\t.tw-ev.svelte-j4rvbp:hover {\n\t\tbackground: color-mix(in srgb, var(--ev-color) 24%, var(--dt-surface, var(--dt-bg, #ffffff)));\n\t\tz-index: 8;\n\t}\n\t/* Short blocks keep duration-proportional height, but get a 44px\n\t transparent hit-slop so clicks/taps still land. */\n\t.tw-ev--short.svelte-j4rvbp { overflow: visible; }\n\t.tw-ev--short.svelte-j4rvbp::after {\n\t\tcontent: '';\n\t\tposition: absolute;\n\t\tleft: 0;\n\t\tright: 0;\n\t\ttop: 50%;\n\t\ttransform: translateY(-50%);\n\t\theight: 44px;\n\t}\n\t.tw-ev--selected.svelte-j4rvbp {\n\t\tbox-shadow: 0 0 0 2px var(--ev-color),\n\t\t\t0 2px 12px color-mix(in srgb, var(--ev-color) 25%, transparent);\n\t\tz-index: 9;\n\t}\n\t.tw-ev--current.svelte-j4rvbp {\n\t\tbackground: color-mix(in srgb, var(--ev-color) 22%, var(--dt-surface, var(--dt-bg, #ffffff)));\n\t}\n\t.tw-ev--resizing.svelte-j4rvbp {\n\t\tz-index: 50;\n\t\tbox-shadow: 0 4px 20px rgba(0, 0, 0, 0.25);\n\t\tcursor: ns-resize;\n\t}\n\t/* Status treatments: token-level dims + a non-opacity signal\n\t (strikethrough / border style) — consistent with the other views. */\n\t.tw-ev--cancelled.svelte-j4rvbp {\n\t\tbackground: color-mix(in srgb, var(--ev-color) 5%, var(--dt-surface, var(--dt-bg, #ffffff)));\n\t}\n\t.tw-ev--cancelled.svelte-j4rvbp .tw-ev-title:where(.svelte-j4rvbp) {\n\t\ttext-decoration: line-through;\n\t\tcolor: var(--dt-text-2, rgba(0, 0, 0, 0.54));\n\t}\n\t.tw-ev--cancelled.svelte-j4rvbp .tw-ev-stripe:where(.svelte-j4rvbp) { opacity: 0.45; /* decorative bar only */ }\n\t.tw-ev--tentative.svelte-j4rvbp {\n\t\tbackground: color-mix(in srgb, var(--ev-color) 6%, var(--dt-surface, var(--dt-bg, #ffffff)));\n\t\tborder: 1px dashed color-mix(in srgb, var(--ev-color) 45%, transparent);\n\t}\n\t.tw-ev--full.svelte-j4rvbp {\n\t\tbackground: color-mix(in srgb, var(--ev-color) 6%, var(--dt-surface, var(--dt-bg, #ffffff)));\n\t\tborder: 1px solid color-mix(in srgb, var(--ev-color) 30%, transparent);\n\t}\n\t.tw-ev--full.svelte-j4rvbp .tw-ev-title:where(.svelte-j4rvbp) { color: var(--dt-text-2, rgba(0, 0, 0, 0.54)); }\n\t.tw-ev--limited.svelte-j4rvbp {\n\t\tbackground: color-mix(in srgb, var(--ev-color) 8%, var(--dt-surface, var(--dt-bg, #ffffff)));\n\t\tborder: 1px dashed color-mix(in srgb, var(--ev-color) 45%, transparent);\n\t}\n\t.tw-ev--readonly.svelte-j4rvbp { cursor: default; }\n\n\t.tw-ev-stripe.svelte-j4rvbp {\n\t\twidth: 3px;\n\t\tbackground: var(--ev-color);\n\t\tflex-shrink: 0;\n\t\tborder-radius: 5px 0 0 5px;\n\t}\n\n\t.tw-ev-body.svelte-j4rvbp {\n\t\tflex: 1;\n\t\tmin-width: 0;\n\t\tpadding: 3px 6px;\n\t\tdisplay: flex;\n\t\tflex-direction: column;\n\t\tgap: 1px;\n\t\toverflow: hidden;\n\t}\n\t/* Compact (< ~35min at default zoom): single inline line \"9:00 Title\" */\n\t.tw-ev--compact.svelte-j4rvbp .tw-ev-body:where(.svelte-j4rvbp) {\n\t\tflex-direction: row;\n\t\talign-items: center;\n\t\tgap: 4px;\n\t\tpadding-top: 1px;\n\t\tpadding-bottom: 1px;\n\t}\n\n\t.tw-ev-time.svelte-j4rvbp {\n\t\tfont: 400 11px/1.1 var(--dt-mono, ui-monospace, monospace);\n\t\tcolor: var(--dt-text-2, rgba(0, 0, 0, 0.54));\n\t\twhite-space: nowrap;\n\t\tflex-shrink: 0;\n\t}\n\t.tw-ev--compact.svelte-j4rvbp .tw-ev-time:where(.svelte-j4rvbp) { order: 0; }\n\n\t.tw-ev-title.svelte-j4rvbp {\n\t\tfont: 600 12px/1.2 var(--dt-sans, system-ui, sans-serif);\n\t\tcolor: var(--dt-text, rgba(0, 0, 0, 0.87));\n\t\twhite-space: nowrap;\n\t\toverflow: hidden;\n\t\ttext-overflow: ellipsis;\n\t}\n\n\t.tw-ev-loc.svelte-j4rvbp {\n\t\tfont: 400 10px/1.2 var(--dt-sans, system-ui, sans-serif);\n\t\tcolor: var(--dt-text-2, rgba(0, 0, 0, 0.54));\n\t\twhite-space: nowrap;\n\t\toverflow: hidden;\n\t\ttext-overflow: ellipsis;\n\t}\n\n\t.tw-ev-live.svelte-j4rvbp {\n\t\tposition: absolute;\n\t\ttop: 4px;\n\t\tright: 4px;\n\t\twidth: 6px;\n\t\theight: 6px;\n\t\tborder-radius: 50%;\n\t\tbackground: var(--ev-color, var(--dt-accent));\n\t\tanimation: svelte-j4rvbp-tw-pulse 2s ease-in-out infinite;\n\t}\n\t@keyframes svelte-j4rvbp-tw-pulse {\n\t\t0%, 100% { opacity: 1; }\n\t\t50% { opacity: 0.4; }\n\t}\n\n\t/* ─── Resize handles ─────────────────────────────── */\n\t.tw-ev-handle.svelte-j4rvbp {\n\t\tposition: absolute;\n\t\tleft: 0;\n\t\tright: 0;\n\t\theight: 8px;\n\t\tz-index: 2;\n\t\tcursor: ns-resize;\n\t\ttouch-action: none;\n\t}\n\t.tw-ev-handle--start.svelte-j4rvbp { top: 0; }\n\t.tw-ev-handle--end.svelte-j4rvbp { bottom: 0; }\n\t/* Hit-slop: ≥20px effective, extending inward so overflow clipping\n\t can't cut it off. */\n\t.tw-ev-handle.svelte-j4rvbp::before {\n\t\tcontent: '';\n\t\tposition: absolute;\n\t\tleft: 0;\n\t\tright: 0;\n\t\theight: 20px;\n\t}\n\t.tw-ev-handle--start.svelte-j4rvbp::before { top: 0; }\n\t.tw-ev-handle--end.svelte-j4rvbp::before { bottom: 0; }\n\t/* Short events: shrink the slop so a move-grab area survives */\n\t.tw-ev--short.svelte-j4rvbp .tw-ev-handle:where(.svelte-j4rvbp)::before { height: 12px; }\n\t.tw-ev-handle.svelte-j4rvbp::after {\n\t\tcontent: '';\n\t\tposition: absolute;\n\t\tleft: 50%;\n\t\ttransform: translateX(-50%);\n\t\twidth: 20px;\n\t\theight: 3px;\n\t\tborder-radius: 2px;\n\t\tbackground: var(--ev-color);\n\t\topacity: 0;\n\t\ttransition: opacity 120ms;\n\t}\n\t.tw-ev-handle--start.svelte-j4rvbp::after { top: 1px; }\n\t.tw-ev-handle--end.svelte-j4rvbp::after { bottom: 1px; }\n\t.tw-ev.svelte-j4rvbp:hover .tw-ev-handle:where(.svelte-j4rvbp)::after,\n\t.tw-ev.svelte-j4rvbp:focus-within .tw-ev-handle:where(.svelte-j4rvbp)::after,\n\t.tw-ev.svelte-j4rvbp:focus-visible .tw-ev-handle:where(.svelte-j4rvbp)::after,\n\t.tw-ev--resizing.svelte-j4rvbp .tw-ev-handle:where(.svelte-j4rvbp)::after,\n\t.tw-ev--selected.svelte-j4rvbp .tw-ev-handle:where(.svelte-j4rvbp)::after { opacity: 0.55; }\n\t/* Coarse pointers can't hover — show the grips persistently */\n\t@media (hover: none) {\n\t\t.tw-ev-handle.svelte-j4rvbp::after { opacity: 0.55; }\n\t}\n\n\t/* ─── Move / create ghost ────────────────────────── */\n\t.tw-ghost.svelte-j4rvbp {\n\t\tposition: absolute;\n\t\tleft: 1px;\n\t\tright: 3px;\n\t\tz-index: 40;\n\t\tborder-radius: 5px;\n\t\tbackground: color-mix(in srgb, var(--ev-color) 22%, var(--dt-surface, var(--dt-bg, #ffffff)));\n\t\toutline: 1px solid color-mix(in srgb, var(--ev-color) 45%, transparent);\n\t\tbox-shadow: 0 6px 18px color-mix(in srgb, var(--ev-color) 24%, rgba(0, 0, 0, 0.22));\n\t\tdisplay: flex;\n\t\tflex-direction: column;\n\t\tgap: 1px;\n\t\tpadding: 3px 6px;\n\t\toverflow: hidden;\n\t\tpointer-events: none;\n\t\tcursor: grabbing;\n\t\tbox-sizing: border-box;\n\t}\n\t.tw-ghost--create.svelte-j4rvbp {\n\t\tbackground: color-mix(in srgb, var(--ev-color) 12%, transparent);\n\t\toutline: 1px dashed color-mix(in srgb, var(--ev-color) 60%, transparent);\n\t\tbox-shadow: none;\n\t}\n\t.tw-ghost-time.svelte-j4rvbp {\n\t\tfont: 600 11px/1.1 var(--dt-mono, ui-monospace, monospace);\n\t\tcolor: var(--ev-color, var(--dt-accent, #2563eb));\n\t\twhite-space: nowrap;\n\t}\n\t.tw-ghost-title.svelte-j4rvbp {\n\t\tfont: 600 12px/1.2 var(--dt-sans, system-ui, sans-serif);\n\t\tcolor: var(--dt-text, rgba(0, 0, 0, 0.87));\n\t\twhite-space: nowrap;\n\t\toverflow: hidden;\n\t\ttext-overflow: ellipsis;\n\t}\n\n\t/* ─── Empty overlay ──────────────────────────────── */\n\t.tw-empty.svelte-j4rvbp {\n\t\tposition: absolute;\n\t\tinset: 0;\n\t\tdisplay: flex;\n\t\talign-items: center;\n\t\tjustify-content: center;\n\t\tpointer-events: none;\n\t\tz-index: 4;\n\t}\n\n\t/* ─── Focus-visible ──────────────────────────────── */\n\t/* box-shadow instead of outline: outlines get clipped by the\n\t overflow: hidden scroll container. */\n\t.tw-ev.svelte-j4rvbp:focus-visible {\n\t\toutline: none;\n\t\tbox-shadow: 0 0 0 2px var(--dt-accent, #2563eb);\n\t\tz-index: 9;\n\t}\n\n\t/* ─── Reduced motion ─────────────────────────────── */\n\t@media (prefers-reduced-motion: reduce) {\n\t\t.tw-ev.svelte-j4rvbp,\n\t\t.tw-ad.svelte-j4rvbp,\n\t\t.tw-ev-handle.svelte-j4rvbp::after {\n\t\t\ttransition: none;\n\t\t}\n\t\t.tw-ev-live.svelte-j4rvbp { animation: none; }\n\t}\n\n\t/* ═══ Container ═══ */\n\t.ag.svelte-n8lbn1 {\n\t\tposition: relative;\n\t\toverflow: hidden;\n\t\tdisplay: flex;\n\t\tflex-direction: column;\n\t\theight: 100%;\n\t\twidth: 100%;\n\t\tmin-width: 0;\n\t\tbox-sizing: border-box;\n\t\tcolor: var(--dt-text, rgba(0, 0, 0, 0.87));\n\t\tfont-family: var(--dt-sans, system-ui, sans-serif);\n\t}\n\n\t.ag--auto.svelte-n8lbn1 { height: auto; overflow: visible; }\n\n\t/* Button UA reset for interactive cards/rows (real <button>s for a11y).\n\t Placed first so later component rules override it.\n\t user-select is scoped here (not on .ag) so event text stays copyable. */\n\t.ag-card.svelte-n8lbn1,\n\t.ag-allday-chip.svelte-n8lbn1,\n\t.ag-compact-row.svelte-n8lbn1,\n\t.ag-q-now.svelte-n8lbn1,\n\t.ag-q-done-item.svelte-n8lbn1,\n\t.ag-log-row.svelte-n8lbn1,\n\t.ag-q-done-toggle.svelte-n8lbn1 {\n\t\tfont: inherit;\n\t\tcolor: inherit;\n\t\ttext-align: left;\n\t\tbackground: none;\n\t\tborder: none;\n\t\tpadding: 0;\n\t\tmargin: 0;\n\t\tbox-sizing: border-box;\n\t\tuser-select: none;\n\t}\n\n\t.ag--disabled.svelte-n8lbn1 {\n\t\tbackground-image: repeating-linear-gradient(\n\t\t\t135deg,\n\t\t\ttransparent,\n\t\t\ttransparent 6px,\n\t\t\tcolor-mix(in srgb, var(--dt-text, rgba(0, 0, 0, 0.87)) 4%, transparent) 6px,\n\t\t\tcolor-mix(in srgb, var(--dt-text, rgba(0, 0, 0, 0.87)) 4%, transparent) 12px\n\t\t);\n\t}\n\n\t/* ═══ Body ═══ */\n\t.ag-body.svelte-n8lbn1 {\n\t\tflex: 1;\n\t\tmin-height: 0;\n\t\tmin-width: 0;\n\t\tdisplay: flex;\n\t\tflex-direction: column;\n\t\toverflow-y: auto;\n\t\toverflow-x: hidden;\n\t\toverscroll-behavior: contain;\n\t\tpadding-top: 8px;\n\t\tscrollbar-width: thin;\n\t\tscrollbar-color: var(--dt-border) transparent;\n\t}\n\n\t/* ═══ In-view date header ═══ */\n\t.ag-day-head.svelte-n8lbn1 {\n\t\tdisplay: flex;\n\t\talign-items: baseline;\n\t\tgap: 8px;\n\t\tpadding: 0 16px 6px;\n\t\tflex-shrink: 0;\n\t}\n\t.ag-day-head-badge.svelte-n8lbn1 {\n\t\tfont-size: 10px;\n\t\tfont-weight: 600;\n\t\tletter-spacing: 0.08em;\n\t\ttext-transform: uppercase;\n\t\tcolor: var(--dt-accent, #2563eb);\n\t\tbackground: color-mix(in srgb, var(--dt-accent, #2563eb) 12%, transparent);\n\t\tpadding: 2px 7px;\n\t\tborder-radius: 3px;\n\t}\n\t.ag-day-head-badge--muted.svelte-n8lbn1 {\n\t\tcolor: var(--dt-text-2, rgba(0, 0, 0, 0.54));\n\t\tbackground: color-mix(in srgb, var(--dt-text-2, rgba(0, 0, 0, 0.54)) 10%, transparent);\n\t}\n\t.ag-day-head-name.svelte-n8lbn1 {\n\t\tfont-size: 13px;\n\t\tfont-weight: 600;\n\t\tline-height: 1.2;\n\t}\n\t.ag-day-head-date.svelte-n8lbn1 {\n\t\tfont-size: 11px;\n\t\tfont-family: var(--dt-mono, monospace);\n\t\tcolor: var(--dt-text-3, rgba(0, 0, 0, 0.38));\n\t\tline-height: 1.2;\n\t}\n\t.ag--auto.svelte-n8lbn1 .ag-body:where(.svelte-n8lbn1) { overflow-y: visible; min-height: auto; }\n\t.ag-body.svelte-n8lbn1::-webkit-scrollbar {\n\t\twidth: 4px;\n\t}\n\t.ag-body.svelte-n8lbn1::-webkit-scrollbar-thumb {\n\t\tbackground: var(--dt-border);\n\t\tborder-radius: 2px;\n\t}\n\n\t/* ═══ All-day strip ═══ */\n\t.ag-allday.svelte-n8lbn1 {\n\t\tdisplay: flex;\n\t\talign-items: center;\n\t\tgap: 8px;\n\t\tpadding: 6px 16px;\n\t\tborder-bottom: 1px solid var(--dt-border, rgba(0, 0, 0, 0.08));\n\t}\n\t.ag-allday-label.svelte-n8lbn1 {\n\t\tfont: 600 10px/1 var(--dt-sans, system-ui, sans-serif);\n\t\ttext-transform: uppercase;\n\t\tletter-spacing: 0.06em;\n\t\tcolor: var(--dt-text-2, rgba(0, 0, 0, 0.54));\n\t\twhite-space: nowrap;\n\t\tflex-shrink: 0;\n\t}\n\t.ag-allday-items.svelte-n8lbn1 {\n\t\tdisplay: flex;\n\t\tflex-wrap: wrap;\n\t\tgap: 6px;\n\t}\n\t.ag-allday-chip.svelte-n8lbn1 {\n\t\tdisplay: flex;\n\t\talign-items: center;\n\t\tgap: 5px;\n\t\tpadding: 3px 10px;\n\t\tborder-radius: 6px;\n\t\tbackground: color-mix(in srgb, var(--ev-color) 12%, var(--dt-surface, var(--dt-bg, #ffffff)));\n\t\tborder: 1px solid color-mix(in srgb, var(--ev-color) 20%, transparent);\n\t\tcursor: pointer;\n\t\ttransition: background 0.15s, border-color 0.15s;\n\t}\n\t.ag-allday-chip.svelte-n8lbn1:hover,\n\t.ag-allday-chip.svelte-n8lbn1:active {\n\t\tbackground: color-mix(in srgb, var(--ev-color) 22%, var(--dt-surface, var(--dt-bg, #ffffff)));\n\t\tborder-color: color-mix(in srgb, var(--ev-color) 35%, transparent);\n\t}\n\t.ag-allday-chip.svelte-n8lbn1:focus-visible {\n\t\toutline: none;\n\t\tbox-shadow: 0 0 0 2px var(--dt-accent, #2563eb);\n\t}\n\t.ag-allday-chip--selected.svelte-n8lbn1 {\n\t\tborder-color: var(--ev-color);\n\t\tbackground: color-mix(in srgb, var(--ev-color) 18%, var(--dt-surface, var(--dt-bg, #ffffff)));\n\t}\n\t.ag-allday-dot.svelte-n8lbn1 {\n\t\twidth: 6px;\n\t\theight: 6px;\n\t\tborder-radius: 50%;\n\t\tbackground: var(--ev-color);\n\t\tflex-shrink: 0;\n\t}\n\t.ag-allday-title.svelte-n8lbn1 {\n\t\tfont: 500 0.75rem/1.2 var(--dt-sans, system-ui, sans-serif);\n\t\tcolor: var(--dt-text, rgba(0, 0, 0, 0.87));\n\t\twhite-space: nowrap;\n\t}\n\n\t/* ═══ Shared: event card ═══ */\n\t.ag-card.svelte-n8lbn1 {\n\t\tdisplay: flex;\n\t\talign-items: stretch;\n\t\tborder-radius: 10px;\n\t\tbackground: color-mix(in srgb, var(--ev-color) 15%, var(--dt-surface, var(--dt-bg, #ffffff)));\n\t\tborder: 1px solid color-mix(in srgb, var(--ev-color) 10%, var(--dt-border, rgba(0, 0, 0, 0.08)));\n\t\toverflow: hidden;\n\t\tcursor: pointer;\n\t\ttransition: background 150ms, border-color 150ms;\n\t}\n\t.ag-card.svelte-n8lbn1:hover,\n\t.ag-card.svelte-n8lbn1:active {\n\t\tbackground: color-mix(in srgb, var(--ev-color) 25%, var(--dt-surface, var(--dt-bg, #ffffff)));\n\t\tborder-color: color-mix(in srgb, var(--ev-color) 40%, transparent);\n\t}\n\t.ag-card.svelte-n8lbn1:focus-visible {\n\t\toutline: none;\n\t\tbox-shadow: 0 0 0 2px var(--dt-accent, #2563eb);\n\t}\n\t.ag-card--selected.svelte-n8lbn1 {\n\t\tborder-color: var(--ev-color);\n\t\tbackground: color-mix(in srgb, var(--ev-color) 22%, var(--dt-surface, var(--dt-bg, #ffffff)));\n\t}\n\t.ag-card--cancelled.svelte-n8lbn1 {\n\t\topacity: 0.5;\n\t}\n\t.ag-card--cancelled.svelte-n8lbn1 .ag-card-title:where(.svelte-n8lbn1) {\n\t\ttext-decoration: line-through;\n\t}\n\t.ag-card--tentative.svelte-n8lbn1 {\n\t\topacity: 0.65;\n\t\tborder-style: dashed;\n\t}\n\t.ag-card--full.svelte-n8lbn1 {\n\t\topacity: 0.55;\n\t}\n\t.ag-card--limited.svelte-n8lbn1 {\n\t\topacity: 0.65;\n\t\tborder-style: dashed;\n\t}\n\t.ag-card-body.svelte-n8lbn1 {\n\t\tpadding: 10px 12px;\n\t\tdisplay: flex;\n\t\tflex-direction: column;\n\t\tgap: 4px;\n\t\tmin-width: 0;\n\t\tflex: 1;\n\t}\n\t.ag-card-top.svelte-n8lbn1 {\n\t\tdisplay: flex;\n\t\tjustify-content: space-between;\n\t\talign-items: flex-start;\n\t\tgap: 8px;\n\t\tmin-width: 0;\n\t}\n\t.ag-card-title.svelte-n8lbn1 {\n\t\tfont-size: 13px;\n\t\tfont-weight: 600;\n\t\tline-height: 1.3;\n\t\tword-break: break-word;\n\t\tflex: 1;\n\t\tmin-width: 0;\n\t}\n\t.ag-card-meta.svelte-n8lbn1 {\n\t\tfont-size: 11px;\n\t\tcolor: var(--dt-text-2, rgba(0, 0, 0, 0.54));\n\t\tfont-family: var(--dt-mono, monospace);\n\t\tline-height: 1;\n\t}\n\t.ag-card-dur.svelte-n8lbn1 {\n\t\tmargin-left: 6px;\n\t\tcolor: var(--dt-text-3, rgba(0, 0, 0, 0.38));\n\t}\n\t.ag-card-sub.svelte-n8lbn1 {\n\t\tfont-size: 11px;\n\t\tcolor: var(--dt-text-2, rgba(0, 0, 0, 0.54));\n\t\tline-height: 1;\n\t}\n\t.ag-card-loc.svelte-n8lbn1 {\n\t\tfont-size: 10px;\n\t\tcolor: var(--dt-text-3, rgba(0, 0, 0, 0.38));\n\t\tline-height: 1;\n\t}\n\t.ag-card-tags.svelte-n8lbn1 {\n\t\tdisplay: flex;\n\t\tgap: 4px;\n\t\tflex-wrap: wrap;\n\t}\n\t.ag-card-tag.svelte-n8lbn1 {\n\t\tfont: 500 10px / 1 var(--dt-sans, system-ui, sans-serif);\n\t\tcolor: var(--ev-color, var(--dt-accent));\n\t\tbackground: color-mix(in srgb, var(--ev-color, var(--dt-accent)) 15%, transparent);\n\t\tpadding: 2px 5px;\n\t\tborder-radius: 3px;\n\t\twhite-space: nowrap;\n\t}\n\n\t/* ── Queue card variant ── */\n\t.ag-card--q.svelte-n8lbn1 {\n\t\ttransition: border-color 150ms, transform 100ms;\n\t}\n\t.ag-compact-row--queue.svelte-n8lbn1 {\n\t\tmargin: 0;\n\t}\n\n\t.ag-card--q.svelte-n8lbn1 .ag-card-body:where(.svelte-n8lbn1) {\n\t\tgap: 3px;\n\t}\n\t.ag-card--q.svelte-n8lbn1 .ag-card-tags:where(.svelte-n8lbn1) {\n\t\tmargin-top: 2px;\n\t}\n\t.ag-card-eta.svelte-n8lbn1 {\n\t\tfont-size: 11px;\n\t\tfont-weight: 600;\n\t\tletter-spacing: 0.04em;\n\t\tcolor: var(--dt-accent, #2563eb);\n\t\tflex-shrink: 0;\n\t\twhite-space: nowrap;\n\t}\n\t.ag-card--hero.svelte-n8lbn1 {\n\t\tbackground: color-mix(in srgb, var(--ev-color) 22%, var(--dt-surface, var(--dt-bg, #ffffff)));\n\t\tborder-color: color-mix(in srgb, var(--ev-color) 30%, transparent);\n\t}\n\t.ag-card--hero.svelte-n8lbn1 .ag-card-title:where(.svelte-n8lbn1) {\n\t\tfont-size: 16px;\n\t\tfont-weight: 700;\n\t}\n\t.ag-card--hero.svelte-n8lbn1 .ag-card-eta:where(.svelte-n8lbn1) {\n\t\tfont-size: 11px;\n\t\tbackground: color-mix(in srgb, var(--dt-accent, #2563eb) 18%, transparent);\n\t\tpadding: 2px 7px;\n\t\tborder-radius: 4px;\n\t}\n\t.ag-card--hero.svelte-n8lbn1 .ag-card-body:where(.svelte-n8lbn1) {\n\t\tpadding: 14px 16px;\n\t}\n\n\t/* ── Plan card variant ── */\n\n\t.ag-card--plan.svelte-n8lbn1 .ag-card-body:where(.svelte-n8lbn1) {\n\t\tpadding: 12px 14px;\n\t\tgap: 3px;\n\t}\n\t.ag-card--plan.svelte-n8lbn1 .ag-card-top:where(.svelte-n8lbn1) {\n\t\talign-items: baseline;\n\t}\n\t.ag-card-order.svelte-n8lbn1 {\n\t\tfont-size: 10px;\n\t\tfont-weight: 700;\n\t\tcolor: var(--dt-text-3, rgba(0, 0, 0, 0.38));\n\t\tfont-family: var(--dt-mono, monospace);\n\t\tflex-shrink: 0;\n\t}\n\t.ag-card--plan.svelte-n8lbn1 .ag-card-title:where(.svelte-n8lbn1) {\n\t\tfont-size: 14px;\n\t}\n\t.ag-card--first.svelte-n8lbn1 {\n\t\tbackground: color-mix(in srgb, var(--ev-color) 20%, var(--dt-surface, var(--dt-bg, #ffffff)));\n\t\tborder-color: color-mix(in srgb, var(--ev-color) 25%, transparent);\n\t}\n\t.ag-card--first.svelte-n8lbn1 .ag-card-title:where(.svelte-n8lbn1) {\n\t\tfont-size: 16px;\n\t\tfont-weight: 700;\n\t}\n\t/* Everything under the title aligns past the order number — the\n\t subtitle, location, time and tags share one left edge. */\n\t.ag-card--plan.svelte-n8lbn1 .ag-card-sub:where(.svelte-n8lbn1),\n\t.ag-card--plan.svelte-n8lbn1 .ag-card-loc:where(.svelte-n8lbn1),\n\t.ag-card--plan.svelte-n8lbn1 .ag-card-meta:where(.svelte-n8lbn1) {\n\t\tpadding-left: 22px;\n\t}\n\t.ag-card--plan.svelte-n8lbn1 .ag-card-tags:where(.svelte-n8lbn1) {\n\t\tpadding-left: 22px;\n\t\tmargin-top: 2px;\n\t}\n\n\t/* ═══ The Queue: 2-column grid ═══ */\n\t.ag-q.svelte-n8lbn1 {\n\t\tdisplay: grid;\n\t\tgrid-template-columns: 1fr 1.8fr;\n\t\tgap: 0;\n\t\tflex: 1;\n\t\tpadding: 8px 0 10px;\n\t\tmin-height: 0;\n\t}\n\t/* Mobile: stack queue columns vertically — \"Up next\" (hero) first,\n\t Now/Done status column second */\n\t.ag--mobile.svelte-n8lbn1 .ag-q:where(.svelte-n8lbn1) {\n\t\tgrid-template-columns: 1fr;\n\t\tmin-height: auto;\n\t}\n\t.ag--mobile.svelte-n8lbn1 .ag-q-status:where(.svelte-n8lbn1) {\n\t\torder: 2;\n\t\tborder-right: none;\n\t\tborder-top: 1px solid var(--dt-border, rgba(0, 0, 0, 0.08));\n\t\tpadding-top: 10px;\n\t\tmargin-top: 8px;\n\t\toverflow-y: visible;\n\t}\n\t.ag--mobile.svelte-n8lbn1 .ag-q-queue:where(.svelte-n8lbn1) {\n\t\torder: 1;\n\t\toverflow-y: visible;\n\t\tpadding-bottom: 16px;\n\t}\n\t.ag--mobile.svelte-n8lbn1 .ag-card-meta:where(.svelte-n8lbn1) {\n\t\tline-height: 1.3;\n\t\tpadding-bottom: 1px;\n\t}\n\t/* Mobile: larger touch targets */\n\t.ag--mobile.svelte-n8lbn1 .ag-card-body:where(.svelte-n8lbn1) {\n\t\tpadding: 14px 16px;\n\t}\n\t.ag--mobile.svelte-n8lbn1 .ag-card-title:where(.svelte-n8lbn1) {\n\t\tfont-size: 15px;\n\t}\n\t.ag--mobile.svelte-n8lbn1 .ag-card--hero:where(.svelte-n8lbn1) .ag-card-title:where(.svelte-n8lbn1) {\n\t\tfont-size: 18px;\n\t}\n\t.ag--mobile.svelte-n8lbn1 .ag-card--hero:where(.svelte-n8lbn1) .ag-card-body:where(.svelte-n8lbn1) {\n\t\tpadding: 16px 18px;\n\t}\n\t.ag--mobile.svelte-n8lbn1 .ag-log-row:where(.svelte-n8lbn1) {\n\t\tpadding: 12px 0;\n\t}\n\t.ag--mobile.svelte-n8lbn1 .ag-card--plan:where(.svelte-n8lbn1) .ag-card-body:where(.svelte-n8lbn1) {\n\t\tpadding: 14px 16px;\n\t}\n\t.ag--mobile.svelte-n8lbn1 .ag-card--plan:where(.svelte-n8lbn1) .ag-card-title:where(.svelte-n8lbn1) {\n\t\tfont-size: 15px;\n\t}\n\t/* Mobile: Now/Done status subtree type scale */\n\t.ag--mobile.svelte-n8lbn1 .ag-q-label:where(.svelte-n8lbn1) {\n\t\tfont-size: 11px;\n\t}\n\t.ag--mobile.svelte-n8lbn1 .ag-q-clock:where(.svelte-n8lbn1) {\n\t\tfont-size: 12px;\n\t}\n\t.ag--mobile.svelte-n8lbn1 .ag-q-now-title:where(.svelte-n8lbn1) {\n\t\tfont-size: 16px;\n\t}\n\t.ag--mobile.svelte-n8lbn1 .ag-q-now-sub:where(.svelte-n8lbn1) {\n\t\tfont-size: 13px;\n\t}\n\t.ag--mobile.svelte-n8lbn1 .ag-q-now-time:where(.svelte-n8lbn1) {\n\t\tfont-size: 12px;\n\t}\n\t.ag--mobile.svelte-n8lbn1 .ag-q-free-label:where(.svelte-n8lbn1) {\n\t\tfont-size: 13px;\n\t}\n\t.ag--mobile.svelte-n8lbn1 .ag-q-done-title:where(.svelte-n8lbn1) {\n\t\tfont-size: 13px;\n\t}\n\t.ag--mobile.svelte-n8lbn1 .ag-q-done-check:where(.svelte-n8lbn1) {\n\t\tfont-size: 12px;\n\t}\n\t.ag--mobile.svelte-n8lbn1 .ag-card-eta:where(.svelte-n8lbn1) {\n\t\tfont-size: 12px;\n\t}\n\t.ag--mobile.svelte-n8lbn1 .ag-card-sub:where(.svelte-n8lbn1) {\n\t\tfont-size: 12px;\n\t}\n\t.ag--mobile.svelte-n8lbn1 .ag-card-loc:where(.svelte-n8lbn1) {\n\t\tfont-size: 12px;\n\t}\n\t.ag--mobile.svelte-n8lbn1 .ag-card-tag:where(.svelte-n8lbn1) {\n\t\tfont-size: 11px;\n\t}\n\t.ag--mobile.svelte-n8lbn1 .ag-log-time:where(.svelte-n8lbn1),\n\t.ag--mobile.svelte-n8lbn1 .ag-log-dur:where(.svelte-n8lbn1) {\n\t\tfont-size: 12px;\n\t}\n\t.ag--mobile.svelte-n8lbn1 .ag-log-title:where(.svelte-n8lbn1) {\n\t\tfont-size: 15px;\n\t}\n\t.ag-q-label.svelte-n8lbn1 {\n\t\tfont-size: 10px;\n\t\tfont-weight: 600;\n\t\tletter-spacing: 0.14em;\n\t\ttext-transform: uppercase;\n\t\tcolor: var(--dt-text-3, rgba(0, 0, 0, 0.38));\n\t\tmargin-bottom: 8px;\n\t\tpadding: 0 12px;\n\t\tfont-family: var(--dt-sans, system-ui, sans-serif);\n\t}\n\t.ag-q-empty.svelte-n8lbn1 {\n\t\tdisplay: flex;\n\t\talign-items: center;\n\t\tjustify-content: center;\n\t\tflex: 1;\n\t\tfont-size: 13px;\n\t\tfont-weight: 300;\n\t\tcolor: var(--dt-text-3, rgba(0, 0, 0, 0.38));\n\t}\n\n\t/* ── NOW column (includes Done above) ── */\n\t.ag-q-status.svelte-n8lbn1 {\n\t\tpadding: 0 10px 0 14px;\n\t\tborder-right: 1px solid var(--dt-border, rgba(0, 0, 0, 0.08));\n\t\tdisplay: flex;\n\t\tflex-direction: column;\n\t\toverflow-y: auto;\n\t\tscrollbar-width: none;\n\t}\n\t.ag-q-status.svelte-n8lbn1::-webkit-scrollbar {\n\t\tdisplay: none;\n\t}\n\t.ag-q-done-toggle.svelte-n8lbn1 {\n\t\talign-self: flex-start;\n\t\tmargin-top: 2px;\n\t\tpadding: 3px 8px;\n\t\tborder: 1px solid var(--dt-border);\n\t\tborder-radius: 999px;\n\t\tbackground: none;\n\t\tfont-family: var(--dt-mono);\n\t\tfont-size: 11px;\n\t\tcolor: var(--dt-text-3);\n\t\tcursor: pointer;\n\t}\n\t.ag-q-done-toggle.svelte-n8lbn1:hover,\n\t.ag-q-done-toggle.svelte-n8lbn1:active {\n\t\tcolor: var(--dt-text);\n\t\tborder-color: var(--dt-text-3);\n\t}\n\t.ag-q-done-toggle.svelte-n8lbn1:focus-visible {\n\t\toutline: none;\n\t\tbox-shadow: 0 0 0 2px var(--dt-accent, #2563eb);\n\t}\n\t.ag-q-now-sub.svelte-n8lbn1 {\n\t\tfont-size: 12px;\n\t\tcolor: var(--dt-text-2);\n\t\tmargin-top: 1px;\n\t}\n\t.ag-q-done-section.svelte-n8lbn1 {\n\t\tmargin-top: 12px;\n\t\tpadding-top: 10px;\n\t\tborder-top: 1px solid var(--dt-border, rgba(0, 0, 0, 0.08));\n\t}\n\t.ag-q-clock.svelte-n8lbn1 {\n\t\tfont-size: 11px;\n\t\tfont-weight: 600;\n\t\tfont-family: var(--dt-mono, monospace);\n\t\tcolor: var(--dt-accent, #2563eb);\n\t\tmargin-left: 4px;\n\t}\n\t.ag-q-now.svelte-n8lbn1 {\n\t\tdisplay: block;\n\t\twidth: 100%;\n\t\tpadding: 8px 10px;\n\t\tmargin-bottom: 8px;\n\t\tborder-radius: 8px;\n\t\tbackground: color-mix(in srgb, var(--ev-color, var(--dt-accent)) 15%, var(--dt-surface, var(--dt-bg, #ffffff)));\n\t\tborder: 1px solid color-mix(in srgb, var(--ev-color, var(--dt-accent)) 15%, transparent);\n\t\tcursor: pointer;\n\t\ttransition: background 150ms, border-color 150ms;\n\t}\n\t.ag-q-now.svelte-n8lbn1:hover,\n\t.ag-q-now.svelte-n8lbn1:active {\n\t\tbackground: color-mix(in srgb, var(--ev-color, var(--dt-accent)) 25%, var(--dt-surface, var(--dt-bg, #ffffff)));\n\t\tborder-color: color-mix(in srgb, var(--ev-color, var(--dt-accent)) 35%, transparent);\n\t}\n\t.ag-q-now.svelte-n8lbn1:focus-visible {\n\t\toutline: none;\n\t\tbox-shadow: 0 0 0 2px var(--dt-accent, #2563eb);\n\t}\n\t.ag-q-now--selected.svelte-n8lbn1 {\n\t\tborder-color: var(--ev-color, var(--dt-accent));\n\t}\n\t.ag-q-now-dot.svelte-n8lbn1 {\n\t\twidth: 6px;\n\t\theight: 6px;\n\t\tborder-radius: 50%;\n\t\tbackground: var(--ev-color, var(--dt-accent, #2563eb));\n\t\tmargin-bottom: 6px;\n\t\tanimation: svelte-n8lbn1-ag-pulse 2.5s ease-in-out infinite;\n\t}\n\t@keyframes svelte-n8lbn1-ag-pulse {\n\t\t0%, 100% { opacity: 1; }\n\t\t50% { opacity: 0.4; }\n\t}\n\t@media (prefers-reduced-motion: reduce) {\n\t\t.ag-q-now-dot.svelte-n8lbn1 {\n\t\t\tanimation: none;\n\t\t}\n\t\t.ag-q-now-fill.svelte-n8lbn1 {\n\t\t\ttransition: none;\n\t\t}\n\t}\n\t.ag-q-now-title.svelte-n8lbn1 {\n\t\tfont-size: 12px;\n\t\tfont-weight: 600;\n\t\tline-height: 1.25;\n\t\tcolor: var(--dt-text, rgba(0, 0, 0, 0.87));\n\t\tdisplay: -webkit-box;\n\t\t-webkit-box-orient: vertical;\n\t\t-webkit-line-clamp: 2;\n\t\tline-clamp: 2;\n\t\toverflow: hidden;\n\t\tword-break: break-word;\n\t\tmargin-bottom: 3px;\n\t}\n\t.ag-q-now-time.svelte-n8lbn1 {\n\t\tfont-size: 11px;\n\t\tfont-family: var(--dt-mono, monospace);\n\t\tcolor: var(--dt-text-3, rgba(0, 0, 0, 0.38));\n\t\tmargin-bottom: 6px;\n\t}\n\t.ag-q-now-track.svelte-n8lbn1 {\n\t\theight: 2px;\n\t\tbackground: var(--dt-border, rgba(0, 0, 0, 0.08));\n\t\tborder-radius: 1px;\n\t\toverflow: hidden;\n\t}\n\t.ag-q-now-fill.svelte-n8lbn1 {\n\t\theight: 100%;\n\t\twidth: 100%;\n\t\tbackground: var(--ev-color, var(--dt-accent, #2563eb));\n\t\tborder-radius: 1px;\n\t\ttransform-origin: left;\n\t\ttransition: transform 1s linear;\n\t}\n\t.ag-q-free.svelte-n8lbn1 {\n\t\tpadding: 8px 10px;\n\t\tmargin-right: 10px;\n\t}\n\t.ag-q-free-label.svelte-n8lbn1 {\n\t\tfont-size: 12px;\n\t\tfont-weight: 300;\n\t\tcolor: var(--dt-text-3, rgba(0, 0, 0, 0.38));\n\t\tmargin-bottom: 2px;\n\t}\n\n\t/* ── NEXT: hero center column ── */\n\t.ag-q-queue.svelte-n8lbn1 {\n\t\tpadding: 0 16px;\n\t\toverflow-y: auto;\n\t\tscrollbar-width: none;\n\t\tdisplay: flex;\n\t\tflex-direction: column;\n\t\tgap: 8px;\n\t}\n\t.ag-q-queue.svelte-n8lbn1::-webkit-scrollbar {\n\t\tdisplay: none;\n\t}\n\n\n\t.ag-q-done-item.svelte-n8lbn1 {\n\t\tdisplay: flex;\n\t\talign-items: center;\n\t\tgap: 5px;\n\t\tpadding: 3px 0;\n\t\twidth: 100%;\n\t\tcursor: pointer;\n\t}\n\t.ag-q-done-item.svelte-n8lbn1:hover .ag-q-done-title:where(.svelte-n8lbn1),\n\t.ag-q-done-item.svelte-n8lbn1:active .ag-q-done-title:where(.svelte-n8lbn1),\n\t.ag-q-done-item--selected.svelte-n8lbn1 .ag-q-done-title:where(.svelte-n8lbn1) {\n\t\tcolor: var(--dt-text, rgba(0, 0, 0, 0.87));\n\t}\n\t.ag-q-done-item.svelte-n8lbn1:focus-visible {\n\t\toutline: none;\n\t\tbox-shadow: 0 0 0 2px var(--dt-accent, #2563eb);\n\t\tborder-radius: 4px;\n\t}\n\t.ag-q-done-check.svelte-n8lbn1 {\n\t\tfont-size: 11px;\n\t\tcolor: var(--dt-success, rgba(22, 163, 74, 0.7));\n\t\tflex-shrink: 0;\n\t}\n\t.ag-q-done-title.svelte-n8lbn1 {\n\t\tfont-size: 12px;\n\t\tline-height: 1.2;\n\t\tcolor: var(--dt-text-2, rgba(0, 0, 0, 0.54));\n\t\twhite-space: nowrap;\n\t\toverflow: hidden;\n\t\ttext-overflow: ellipsis;\n\t\ttext-decoration: line-through;\n\t\ttext-decoration-color: var(--dt-text-3, rgba(0, 0, 0, 0.38));\n\t\ttransition: color 150ms;\n\t}\n\n\t/* ═══ Past Day: \"The Log\" ═══\n\t Dim comes from text tokens only (single layer) — no subtree opacity. */\n\t.ag-log.svelte-n8lbn1 {\n\t\tflex: 1;\n\t\tpadding: 8px 20px 12px;\n\t\toverflow-y: auto;\n\t\tscrollbar-width: none;\n\t}\n\t.ag-log.svelte-n8lbn1::-webkit-scrollbar {\n\t\tdisplay: none;\n\t}\n\t.ag-log-row.svelte-n8lbn1 {\n\t\tdisplay: flex;\n\t\talign-items: center;\n\t\tgap: 10px;\n\t\tpadding: 8px 0;\n\t\twidth: 100%;\n\t\tborder-bottom: 1px solid var(--dt-border, rgba(0, 0, 0, 0.08));\n\t\tcursor: pointer;\n\t}\n\t.ag-log-row.svelte-n8lbn1:last-child {\n\t\tborder-bottom: none;\n\t}\n\t.ag-log-row.svelte-n8lbn1:hover .ag-log-title:where(.svelte-n8lbn1),\n\t.ag-log-row.svelte-n8lbn1:active .ag-log-title:where(.svelte-n8lbn1),\n\t.ag-log-row--selected.svelte-n8lbn1 .ag-log-title:where(.svelte-n8lbn1) {\n\t\tcolor: var(--dt-text, rgba(0, 0, 0, 0.87));\n\t}\n\t.ag-log-row.svelte-n8lbn1:focus-visible {\n\t\toutline: none;\n\t\tbox-shadow: 0 0 0 2px var(--dt-accent, #2563eb);\n\t\tborder-radius: 6px;\n\t}\n\t.ag-log-row--selected.svelte-n8lbn1 {\n\t\tbackground: color-mix(in srgb, var(--ev-color) 6%, transparent);\n\t\tborder-radius: 6px;\n\t\tbox-shadow: 0 0 0 8px color-mix(in srgb, var(--ev-color) 6%, transparent);\n\t}\n\t.ag-log-check.svelte-n8lbn1 {\n\t\tfont-size: 10px;\n\t\tcolor: var(--dt-success, rgba(22, 163, 74, 0.7));\n\t\tflex-shrink: 0;\n\t}\n\t.ag-log-time.svelte-n8lbn1 {\n\t\tfont-size: 11px;\n\t\tfont-family: var(--dt-mono, monospace);\n\t\tcolor: var(--dt-text-3, rgba(0, 0, 0, 0.38));\n\t\twidth: 64px;\n\t\tflex-shrink: 0;\n\t}\n\t.ag-log-dot.svelte-n8lbn1 {\n\t\twidth: 5px;\n\t\theight: 5px;\n\t\tborder-radius: 50%;\n\t\tflex-shrink: 0;\n\t\topacity: 0.6;\n\t}\n\t.ag-log-title.svelte-n8lbn1 {\n\t\tfont-size: 13px;\n\t\tfont-weight: 500;\n\t\tline-height: 1.2;\n\t\tcolor: var(--dt-text-2, rgba(0, 0, 0, 0.54));\n\t\tflex: 1;\n\t\twhite-space: nowrap;\n\t\toverflow: hidden;\n\t\ttext-overflow: ellipsis;\n\t\ttext-decoration: line-through;\n\t\ttext-decoration-color: var(--dt-border, rgba(0, 0, 0, 0.08));\n\t\ttransition: color 150ms;\n\t\ttext-align: left;\n\t}\n\t.ag-log-dur.svelte-n8lbn1 {\n\t\tfont-size: 11px;\n\t\tfont-family: var(--dt-mono, monospace);\n\t\tcolor: var(--dt-text-3, rgba(0, 0, 0, 0.38));\n\t\tflex-shrink: 0;\n\t}\n\n\t/* ═══ Compact Day ═══ */\n\t.ag-compact-list.svelte-n8lbn1 {\n\t\tflex: 1;\n\t\tpadding: 8px 20px 12px;\n\t\toverflow-y: auto;\n\t\tscrollbar-width: none;\n\t}\n\t.ag-compact-list.svelte-n8lbn1::-webkit-scrollbar { display: none; }\n\t.ag-compact-row.svelte-n8lbn1 {\n\t\tdisplay: flex;\n\t\talign-items: baseline;\n\t\tgap: 8px;\n\t\tpadding: 4px 0;\n\t\tcursor: pointer;\n\t\tmin-width: 0;\n\t\twidth: 100%;\n\t}\n\t.ag-compact-row--selected.svelte-n8lbn1 {\n\t\tbackground: color-mix(in srgb, var(--ev-color) 10%, transparent);\n\t\tborder-radius: 4px;\n\t\t/* The highlight bleeds into the gutter via a spread shadow — zero\n\t\t layout impact, so nothing shifts or clips even when the host\n\t\t reduces the gutters below the bleed width. */\n\t\tbox-shadow: 0 0 0 6px color-mix(in srgb, var(--ev-color) 10%, transparent);\n\t}\n\t.ag-compact-row.svelte-n8lbn1:hover .ag-compact-row-title:where(.svelte-n8lbn1),\n\t.ag-compact-row.svelte-n8lbn1:active .ag-compact-row-title:where(.svelte-n8lbn1) { color: var(--dt-text); }\n\t.ag-compact-row.svelte-n8lbn1:active {\n\t\tbackground: color-mix(in srgb, var(--ev-color) 8%, transparent);\n\t\tborder-radius: 4px;\n\t}\n\t.ag-compact-row.svelte-n8lbn1:focus-visible {\n\t\toutline: none;\n\t\tbox-shadow: 0 0 0 2px var(--dt-accent, #2563eb);\n\t\tborder-radius: 4px;\n\t}\n\t/* The time label doubles as the class-color signal (replaces the old\n\t dot): the event color mixed toward the text color, so it stays\n\t legible on any palette and costs zero horizontal space. */\n\t.ag-compact-row-time.svelte-n8lbn1 {\n\t\tfont-size: 11px;\n\t\tfont-family: var(--dt-mono, monospace);\n\t\tfont-weight: 500;\n\t\tcolor: color-mix(in srgb, var(--ev-color, var(--dt-accent)) 60%, var(--dt-text, rgba(0, 0, 0, 0.87)));\n\t\tmin-width: 64px;\n\t\tflex-shrink: 0;\n\t\tline-height: 1.4;\n\t}\n\t/* Title + subtitle + tags cluster. One line while it fits; on mobile the\n\t metadata wraps to a second line under the title instead of crushing it. */\n\t.ag-compact-row-main.svelte-n8lbn1 {\n\t\tdisplay: flex;\n\t\talign-items: baseline;\n\t\tgap: 8px;\n\t\tflex: 1;\n\t\tmin-width: 0;\n\t}\n\t.ag--mobile.svelte-n8lbn1 .ag-compact-row-main:where(.svelte-n8lbn1) {\n\t\tflex-wrap: wrap;\n\t\trow-gap: 2px;\n\t}\n\t/* Mobile: size the title by its content when deciding line breaks — a long\n\t title claims the first line whole (ellipsizing only against the full row)\n\t and pushes subtitle/tags down instead of truncating at 35%. */\n\t.ag--mobile.svelte-n8lbn1 .ag-compact-row-title:where(.svelte-n8lbn1) {\n\t\tflex-basis: auto;\n\t}\n\t/* On its own wrapped line the subtitle gets the full width */\n\t.ag--mobile.svelte-n8lbn1 .ag-compact-row-sub:where(.svelte-n8lbn1) {\n\t\tmax-width: 100%;\n\t}\n\t.ag-compact-row-title.svelte-n8lbn1 {\n\t\tfont-size: 12px;\n\t\tfont-weight: 500;\n\t\tcolor: color-mix(in srgb, var(--dt-text, rgba(0, 0, 0, 0.87)) 82%, transparent);\n\t\tflex: 1;\n\t\t/* The title is the row's identity — never let subtitle/tags/duration\n\t\t squeeze it out on narrow screens (flex: 1 alone resolves to 0px). */\n\t\tmin-width: 35%;\n\t\twhite-space: nowrap;\n\t\toverflow: hidden;\n\t\ttext-overflow: ellipsis;\n\t\ttransition: color 150ms;\n\t\tline-height: 1.4;\n\t\ttext-align: left;\n\t}\n\t.ag-compact-row-dur.svelte-n8lbn1 {\n\t\tfont-size: 10px;\n\t\tfont-family: var(--dt-mono, monospace);\n\t\tcolor: var(--dt-text-3, rgba(0, 0, 0, 0.38));\n\t\tflex-shrink: 0;\n\t\tline-height: 1.4;\n\t}\n\t.ag-compact-row-sub.svelte-n8lbn1 {\n\t\tfont-size: 10px;\n\t\tcolor: var(--dt-text-3, rgba(0, 0, 0, 0.38));\n\t\tflex-shrink: 3;\n\t\tmin-width: 0;\n\t\tmax-width: 45%;\n\t\twhite-space: nowrap;\n\t\toverflow: hidden;\n\t\ttext-overflow: ellipsis;\n\t\tline-height: 1.4;\n\t}\n\t.ag-compact-row-tag.svelte-n8lbn1 {\n\t\tfont: 500 10px / 1 var(--dt-sans, system-ui, sans-serif);\n\t\tcolor: var(--ev-color, var(--dt-accent));\n\t\tbackground: color-mix(in srgb, var(--ev-color, var(--dt-accent)) 12%, transparent);\n\t\tpadding: 1px 4px;\n\t\tborder-radius: 3px;\n\t\twhite-space: nowrap;\n\t\tflex-shrink: 1;\n\t\tmin-width: 2.5em;\n\t\toverflow: hidden;\n\t\ttext-overflow: ellipsis;\n\t}\n\t.ag-compact-row--cancelled.svelte-n8lbn1 { opacity: 0.5; }\n\t.ag-compact-row--cancelled.svelte-n8lbn1 .ag-compact-row-title:where(.svelte-n8lbn1) { text-decoration: line-through; }\n\t.ag-compact-row--tentative.svelte-n8lbn1 { opacity: 0.65; }\n\t/* Mobile: larger touch targets for compact rows */\n\t.ag--mobile.svelte-n8lbn1 .ag-compact-row:where(.svelte-n8lbn1) { padding: 8px 0; }\n\t.ag--mobile.svelte-n8lbn1 .ag-compact-row-title:where(.svelte-n8lbn1) { font-size: 15px; }\n\t.ag--mobile.svelte-n8lbn1 .ag-compact-row-time:where(.svelte-n8lbn1) { font-size: 12px; }\n\t.ag--mobile.svelte-n8lbn1 .ag-compact-row-dur:where(.svelte-n8lbn1) { font-size: 12px; }\n\t.ag--mobile.svelte-n8lbn1 .ag-compact-row-sub:where(.svelte-n8lbn1) { font-size: 12px; }\n\t.ag--mobile.svelte-n8lbn1 .ag-compact-row-tag:where(.svelte-n8lbn1) { font-size: 11px; }\n\t.ag--mobile.svelte-n8lbn1 .ag-day-head:where(.svelte-n8lbn1) { padding: 0 16px 8px; }\n\t.ag--mobile.svelte-n8lbn1 .ag-day-head-name:where(.svelte-n8lbn1) { font-size: 15px; }\n\t.ag--mobile.svelte-n8lbn1 .ag-day-head-date:where(.svelte-n8lbn1) { font-size: 12px; }\n\t.ag--mobile.svelte-n8lbn1 .ag-day-head-badge:where(.svelte-n8lbn1) { font-size: 11px; }\n\t.ag--mobile.svelte-n8lbn1 .ag-allday-title:where(.svelte-n8lbn1) { font-size: 0.85rem; }\n\t.ag--mobile.svelte-n8lbn1 .ag-allday-label:where(.svelte-n8lbn1) { font-size: 11px; }\n\n\t/* ═══ Future Day: \"The Plan\" ═══ */\n\t.ag-plan.svelte-n8lbn1 {\n\t\tflex: 1;\n\t\tpadding: 8px 20px 12px;\n\t\toverflow-y: auto;\n\t\tscrollbar-width: none;\n\t\tdisplay: flex;\n\t\tflex-direction: column;\n\t\tgap: 6px;\n\t}\n\t.ag-plan.svelte-n8lbn1::-webkit-scrollbar {\n\t\tdisplay: none;\n\t}\n\n\t/* ═══ Container ═══ */\n\t.ag.svelte-uhwfyj {\n\t\tposition: relative;\n\t\toverflow: hidden;\n\t\tuser-select: none;\n\t\tdisplay: flex;\n\t\tflex-direction: column;\n\t\theight: 100%;\n\t\twidth: 100%;\n\t\tmin-width: 0;\n\t\tbox-sizing: border-box;\n\t\tcolor: var(--dt-text, rgba(0, 0, 0, 0.87));\n\t\tfont-family: var(--dt-sans, system-ui, sans-serif);\n\t}\n\t.ag--auto.svelte-uhwfyj {\n\t\theight: auto;\n\t\toverflow: visible;\n\t}\n\n\t/* Button UA reset for interactive cards/rows (real <button>s for a11y).\n\t Placed first so later component rules override it. */\n\t.ag-card.svelte-uhwfyj,\n\t.ag-allday-chip.svelte-uhwfyj,\n\t.ag-compact.svelte-uhwfyj,\n\t.ag-compact-more.svelte-uhwfyj,\n\t.ag-past-toggle.svelte-uhwfyj {\n\t\tfont: inherit;\n\t\tcolor: inherit;\n\t\ttext-align: left;\n\t\tbackground: none;\n\t\tborder: none;\n\t\tpadding: 0;\n\t\tmargin: 0;\n\t\tbox-sizing: border-box;\n\t}\n\n\t/* ═══ Body ═══ */\n\t.ag-body.svelte-uhwfyj {\n\t\tflex: 1;\n\t\tmin-width: 0;\n\t\toverflow-y: auto;\n\t\toverflow-x: hidden;\n\t\tbox-sizing: border-box;\n\t\t/* No padding-top here: the sticky day headers pin at the scrollport\n\t\t edge, and container padding would leave a see-through band above\n\t\t them where scrolled cards bleed out. */\n\t\tscrollbar-width: thin;\n\t\tscrollbar-color: var(--dt-border) transparent;\n\t}\n\t.ag-wday.svelte-uhwfyj:first-child .ag-wday-head:where(.svelte-uhwfyj) {\n\t\tpadding-top: 12px;\n\t}\n\t.ag--auto.svelte-uhwfyj .ag-body:where(.svelte-uhwfyj) {\n\t\toverflow-y: visible;\n\t}\n\t.ag-body.svelte-uhwfyj::-webkit-scrollbar {\n\t\twidth: 4px;\n\t}\n\t.ag-body.svelte-uhwfyj::-webkit-scrollbar-thumb {\n\t\tbackground: var(--dt-border);\n\t\tborder-radius: 2px;\n\t}\n\n\t/* ═══ All-day chips ═══ */\n\t.ag-allday.svelte-uhwfyj {\n\t\tdisplay: flex;\n\t\tflex-wrap: wrap;\n\t\tgap: 4px;\n\t\tpadding: 4px 14px 6px;\n\t}\n\t.ag-allday-chip.svelte-uhwfyj {\n\t\tdisplay: flex;\n\t\talign-items: center;\n\t\tgap: 4px;\n\t\tpadding: 2px 8px;\n\t\tborder-radius: 5px;\n\t\tbackground: color-mix(in srgb, var(--ev-color) 12%, var(--dt-surface, var(--dt-bg, #ffffff)));\n\t\tborder: 1px solid color-mix(in srgb, var(--ev-color) 18%, transparent);\n\t\tcursor: pointer;\n\t\ttransition: background 0.15s, border-color 0.15s;\n\t}\n\t.ag-allday-chip.svelte-uhwfyj:hover,\n\t.ag-allday-chip.svelte-uhwfyj:active {\n\t\tbackground: color-mix(in srgb, var(--ev-color) 22%, var(--dt-surface, var(--dt-bg, #ffffff)));\n\t\tborder-color: color-mix(in srgb, var(--ev-color) 30%, transparent);\n\t}\n\t.ag-allday-chip.svelte-uhwfyj:focus-visible {\n\t\toutline: none;\n\t\tbox-shadow: 0 0 0 2px var(--dt-accent, #2563eb);\n\t}\n\t.ag-allday-chip--selected.svelte-uhwfyj {\n\t\tborder-color: var(--ev-color);\n\t\tbackground: color-mix(in srgb, var(--ev-color) 18%, var(--dt-surface, var(--dt-bg, #ffffff)));\n\t}\n\t.ag-allday-dot.svelte-uhwfyj {\n\t\twidth: 5px;\n\t\theight: 5px;\n\t\tborder-radius: 50%;\n\t\tbackground: var(--ev-color);\n\t\tflex-shrink: 0;\n\t}\n\t.ag-allday-title.svelte-uhwfyj {\n\t\tfont: 500 0.7rem/1.2 var(--dt-sans, system-ui, sans-serif);\n\t\tcolor: var(--dt-text, rgba(0, 0, 0, 0.87));\n\t\twhite-space: nowrap;\n\t}\n\t.ag-allday-span.svelte-uhwfyj {\n\t\tfont: 500 10px/1.2 var(--dt-mono, monospace);\n\t\tcolor: var(--dt-text-2, rgba(0, 0, 0, 0.54));\n\t\twhite-space: nowrap;\n\t}\n\n\t/* ═══ Shared: event card ═══ */\n\t.ag-card.svelte-uhwfyj {\n\t\tdisplay: flex;\n\t\talign-items: stretch;\n\t\tborder-radius: 6px;\n\t\tbackground: color-mix(in srgb, var(--ev-color) 12%, var(--dt-surface, var(--dt-bg, #ffffff)));\n\t\tborder: 1px solid color-mix(in srgb, var(--ev-color) 8%, var(--dt-border, rgba(0, 0, 0, 0.08)));\n\t\toverflow: hidden;\n\t\tcursor: pointer;\n\t\ttransition: background 150ms, border-color 150ms;\n\t}\n\t.ag-card.svelte-uhwfyj:hover,\n\t.ag-card.svelte-uhwfyj:active {\n\t\tbackground: color-mix(in srgb, var(--ev-color) 20%, var(--dt-surface, var(--dt-bg, #ffffff)));\n\t\tborder-color: color-mix(in srgb, var(--ev-color) 30%, transparent);\n\t}\n\t.ag-card.svelte-uhwfyj:focus-visible {\n\t\toutline: none;\n\t\tbox-shadow: 0 0 0 2px var(--dt-accent, #2563eb);\n\t}\n\t.ag-card--selected.svelte-uhwfyj {\n\t\tborder-color: var(--ev-color);\n\t\tbackground: color-mix(in srgb, var(--ev-color) 20%, var(--dt-surface, var(--dt-bg, #ffffff)));\n\t}\n\t.ag-card--cancelled.svelte-uhwfyj {\n\t\topacity: 0.5;\n\t}\n\t.ag-card--cancelled.svelte-uhwfyj .ag-card-title:where(.svelte-uhwfyj) {\n\t\ttext-decoration: line-through;\n\t}\n\t.ag-card--tentative.svelte-uhwfyj {\n\t\topacity: 0.65;\n\t\tborder-style: dashed;\n\t}\n\t.ag-card--full.svelte-uhwfyj {\n\t\topacity: 0.55;\n\t}\n\t.ag-card--limited.svelte-uhwfyj {\n\t\topacity: 0.65;\n\t\tborder-style: dashed;\n\t}\n\t.ag-card-body.svelte-uhwfyj {\n\t\tpadding: 7px 10px;\n\t\tdisplay: flex;\n\t\tflex-direction: column;\n\t\tgap: 2px;\n\t\tmin-width: 0;\n\t\tflex: 1;\n\t}\n\t.ag-card-title.svelte-uhwfyj {\n\t\tfont-size: 13px;\n\t\tfont-weight: 600;\n\t\tline-height: 1.3;\n\t\tword-break: break-word;\n\t\tflex: 1;\n\t\tmin-width: 0;\n\t\tdisplay: -webkit-box;\n\t\t-webkit-box-orient: vertical;\n\t\t-webkit-line-clamp: 2;\n\t\tline-clamp: 2;\n\t\toverflow: hidden;\n\t}\n\t.ag-card-meta.svelte-uhwfyj {\n\t\tdisplay: flex;\n\t\talign-items: center;\n\t\tfont-size: 11px;\n\t\tcolor: var(--dt-text-2, rgba(0, 0, 0, 0.54));\n\t\tfont-family: var(--dt-mono, monospace);\n\t\tline-height: 1;\n\t}\n\t.ag-card-dur.svelte-uhwfyj {\n\t\tmargin-left: 6px;\n\t\tcolor: var(--dt-text-3, rgba(0, 0, 0, 0.38));\n\t}\n\t.ag-card-eta.svelte-uhwfyj {\n\t\tmargin-left: auto;\n\t\tfont-size: 11px;\n\t\tfont-weight: 600;\n\t\tcolor: color-mix(in srgb, var(--dt-text, rgba(0, 0, 0, 0.87)) 60%, var(--ev-color));\n\t\tletter-spacing: 0.02em;\n\t}\n\t.ag-card-sub.svelte-uhwfyj {\n\t\tfont-size: 11px;\n\t\tcolor: var(--dt-text-2, rgba(0, 0, 0, 0.54));\n\t\tline-height: 1;\n\t}\n\t.ag-card-loc.svelte-uhwfyj {\n\t\tfont-size: 10px;\n\t\tcolor: var(--dt-text-3, rgba(0, 0, 0, 0.38));\n\t\tline-height: 1;\n\t}\n\t.ag-card-tags.svelte-uhwfyj {\n\t\tdisplay: flex;\n\t\tgap: 4px;\n\t\tflex-wrap: wrap;\n\t}\n\t.ag-card-tag.svelte-uhwfyj {\n\t\tfont: 500 10px / 1 var(--dt-sans, system-ui, sans-serif);\n\t\tcolor: var(--ev-color, var(--dt-accent));\n\t\tbackground: color-mix(in srgb, var(--ev-color, var(--dt-accent)) 15%, transparent);\n\t\tpadding: 2px 5px;\n\t\tborder-radius: 3px;\n\t\twhite-space: nowrap;\n\t}\n\t.ag-card-progress.svelte-uhwfyj {\n\t\theight: 3px;\n\t\tbackground: var(--dt-border, rgba(0, 0, 0, 0.08));\n\t\tborder-radius: 2px;\n\t\toverflow: hidden;\n\t\tmargin-top: 2px;\n\t}\n\t.ag-card-progress-fill.svelte-uhwfyj {\n\t\theight: 100%;\n\t\twidth: 100%;\n\t\tbackground: var(--ev-color, var(--dt-accent));\n\t\tborder-radius: 2px;\n\t\ttransform-origin: left;\n\t\ttransition: transform 1s linear;\n\t}\n\t@media (prefers-reduced-motion: reduce) {\n\t\t.ag-card-progress-fill.svelte-uhwfyj {\n\t\t\ttransition: none;\n\t\t}\n\t}\n\n\t/* ═══ Week day groups ═══ */\n\t.ag-wday.svelte-uhwfyj {\n\t\tborder-bottom: 1px solid var(--dt-border, rgba(0, 0, 0, 0.08));\n\t}\n\t.ag-wday.svelte-uhwfyj:last-child {\n\t\tborder-bottom: none;\n\t}\n\t.ag-wday--today.svelte-uhwfyj {\n\t\tbackground: color-mix(in srgb, var(--dt-accent, #2563eb) 2%, transparent);\n\t}\n\t.ag-wday--tomorrow.svelte-uhwfyj .ag-card:where(.svelte-uhwfyj) {\n\t\topacity: 0.82;\n\t}\n\t/* Past days: token-based text dim instead of subtree opacity (readability) */\n\t.ag-wday--past.svelte-uhwfyj .ag-wday-name:where(.svelte-uhwfyj) {\n\t\tcolor: var(--dt-text-2, rgba(0, 0, 0, 0.54));\n\t\tfont-weight: 500;\n\t}\n\t.ag-wday--past.svelte-uhwfyj .ag-wday-head:where(.svelte-uhwfyj) {\n\t\tpadding: 8px 20px 2px;\n\t}\n\t.ag-wday--disabled.svelte-uhwfyj {\n\t\tposition: relative;\n\t}\n\t.ag-wday--disabled.svelte-uhwfyj::after {\n\t\tcontent: '';\n\t\tposition: absolute;\n\t\tinset: 0;\n\t\tbackground: repeating-linear-gradient(\n\t\t\t135deg,\n\t\t\ttransparent,\n\t\t\ttransparent 4px,\n\t\t\tcolor-mix(in srgb, var(--dt-text, rgba(0, 0, 0, 0.87)) 8%, transparent) 4px,\n\t\t\tcolor-mix(in srgb, var(--dt-text, rgba(0, 0, 0, 0.87)) 8%, transparent) 8px\n\t\t);\n\t\tpointer-events: none;\n\t}\n\t.ag-wday-custom-header.svelte-uhwfyj {\n\t\tpadding: 2px 0 4px;\n\t}\n\n\t.ag-wday-head.svelte-uhwfyj {\n\t\tdisplay: flex;\n\t\tjustify-content: space-between;\n\t\talign-items: center;\n\t\tpadding: 8px 20px;\n\t\tposition: sticky;\n\t\ttop: 0;\n\t\tbackground: var(--dt-bg, #fff);\n\t\tz-index: 1;\n\t\t/* Own compositor layer: without it, fast (async) scrolling repaints\n\t\t the pinned header a frame late and a gap flashes above it. */\n\t\ttransform: translateZ(0);\n\t\twill-change: transform;\n\t}\n\t.ag-wday-head-left.svelte-uhwfyj {\n\t\tdisplay: flex;\n\t\talign-items: baseline;\n\t\tgap: 8px;\n\t}\n\t.ag-wday-badge.svelte-uhwfyj {\n\t\tfont-size: 10px;\n\t\tfont-weight: 600;\n\t\tletter-spacing: 0.08em;\n\t\ttext-transform: uppercase;\n\t\tcolor: var(--dt-accent, #2563eb);\n\t\tbackground: color-mix(in srgb, var(--dt-accent, #2563eb) 12%, transparent);\n\t\tpadding: 2px 7px;\n\t\tborder-radius: 3px;\n\t}\n\t.ag-wday-badge--muted.svelte-uhwfyj {\n\t\tcolor: var(--dt-text-2, rgba(0, 0, 0, 0.54));\n\t\tbackground: color-mix(\n\t\t\tin srgb,\n\t\t\tvar(--dt-text-2, rgba(0, 0, 0, 0.54)) 10%,\n\t\t\ttransparent\n\t\t);\n\t}\n\t.ag-wday-name.svelte-uhwfyj {\n\t\tfont-size: 13px;\n\t\tfont-weight: 600;\n\t\tline-height: 1.2;\n\t}\n\t.ag-wday-date.svelte-uhwfyj {\n\t\tfont-size: 11px;\n\t\tfont-family: var(--dt-mono, monospace);\n\t\tcolor: var(--dt-text-3, rgba(0, 0, 0, 0.38));\n\t\tline-height: 1.2;\n\t}\n\n\t.ag-wday-empty.svelte-uhwfyj {\n\t\tpadding: 2px 20px 6px;\n\t\tfont-size: 11px;\n\t\tcolor: var(--dt-text-3, rgba(0, 0, 0, 0.38));\n\t\tfont-style: italic;\n\t}\n\n\t/* Expanded day */\n\t.ag-wday-expanded.svelte-uhwfyj {\n\t\tpadding: 0 20px 10px;\n\t}\n\t.ag-wslot.svelte-uhwfyj {\n\t\tmargin-bottom: 4px;\n\t}\n\t.ag-wslot-header.svelte-uhwfyj {\n\t\tdisplay: flex;\n\t\talign-items: baseline;\n\t\tgap: 8px;\n\t\tpadding: 2px 0;\n\t}\n\t.ag-wslot-now.svelte-uhwfyj {\n\t\tfont-size: 10px;\n\t\tfont-weight: 700;\n\t\tletter-spacing: 0.08em;\n\t\ttext-transform: uppercase;\n\t\tcolor: var(--dt-accent, #2563eb);\n\t}\n\t.ag-wslot-cards.svelte-uhwfyj {\n\t\tdisplay: flex;\n\t\tflex-direction: column;\n\t\tgap: 4px;\n\t}\n\t.ag-wslot-cards--multi.svelte-uhwfyj {\n\t\tdisplay: grid;\n\t\tgrid-template-columns: repeat(auto-fit, minmax(140px, 1fr));\n\t\tgap: 4px;\n\t}\n\t.ag-wday-past-line.svelte-uhwfyj {\n\t\tfont-size: 11px;\n\t\tcolor: var(--dt-text-3, rgba(0, 0, 0, 0.38));\n\t\tpadding: 6px 0 0;\n\t}\n\t.ag-wday-past-line--summary.svelte-uhwfyj {\n\t\tpadding: 0 20px 8px;\n\t}\n\t/* \"✓ N completed\" is a disclosure — tap to reveal the finished events */\n\t.ag-past-toggle.svelte-uhwfyj {\n\t\tdisplay: inline-flex;\n\t\talign-items: center;\n\t\tgap: 5px;\n\t\tcursor: pointer;\n\t\tmin-height: 32px;\n\t\ttransition: color 150ms;\n\t\t-webkit-tap-highlight-color: transparent;\n\t}\n\t.ag-past-toggle.svelte-uhwfyj:hover,\n\t.ag-past-toggle.svelte-uhwfyj:active {\n\t\tcolor: var(--dt-text-2, rgba(0, 0, 0, 0.54));\n\t}\n\t.ag-past-toggle.svelte-uhwfyj:focus-visible {\n\t\toutline: none;\n\t\tbox-shadow: 0 0 0 2px var(--dt-accent, #2563eb);\n\t\tborder-radius: 4px;\n\t}\n\t.ag-past-chevron.svelte-uhwfyj {\n\t\ttransition: transform 120ms;\n\t}\n\t.ag-past-chevron--open.svelte-uhwfyj {\n\t\ttransform: rotate(180deg);\n\t}\n\t@media (prefers-reduced-motion: reduce) {\n\t\t.ag-past-chevron.svelte-uhwfyj { transition: none; }\n\t}\n\t/* Revealed completed events: dim + strike, single token layer */\n\t.ag-compact--done.svelte-uhwfyj .ag-compact-title:where(.svelte-uhwfyj) {\n\t\ttext-decoration: line-through;\n\t\ttext-decoration-color: var(--dt-text-3, rgba(0, 0, 0, 0.38));\n\t}\n\t.ag-compact--done.svelte-uhwfyj .ag-compact-time:where(.svelte-uhwfyj) {\n\t\tcolor: var(--dt-text-3, rgba(0, 0, 0, 0.38));\n\t\tfont-weight: 400;\n\t}\n\n\t/* Compact day events */\n\t.ag-wday-compact.svelte-uhwfyj {\n\t\tpadding: 0 20px 8px;\n\t}\n\t.ag-compact.svelte-uhwfyj {\n\t\tdisplay: flex;\n\t\talign-items: baseline;\n\t\tgap: 6px;\n\t\tpadding: 3px 0;\n\t\tcursor: pointer;\n\t\tmin-width: 0;\n\t\twidth: 100%;\n\t}\n\t.ag-compact--selected.svelte-uhwfyj {\n\t\tbackground: color-mix(in srgb, var(--ev-color) 10%, transparent);\n\t\tborder-radius: 4px;\n\t\t/* The highlight bleeds into the gutter via a spread shadow — zero\n\t\t layout impact, so nothing shifts or clips even when the host\n\t\t reduces the gutters below the bleed width. */\n\t\tbox-shadow: 0 0 0 6px color-mix(in srgb, var(--ev-color) 10%, transparent);\n\t}\n\t.ag-compact.svelte-uhwfyj:hover .ag-compact-title:where(.svelte-uhwfyj),\n\t.ag-compact.svelte-uhwfyj:active .ag-compact-title:where(.svelte-uhwfyj) {\n\t\tcolor: var(--dt-text);\n\t}\n\t.ag-compact.svelte-uhwfyj:active {\n\t\tbackground: color-mix(in srgb, var(--ev-color) 8%, transparent);\n\t\tborder-radius: 4px;\n\t}\n\t.ag-compact.svelte-uhwfyj:focus-visible {\n\t\toutline: none;\n\t\tbox-shadow: 0 0 0 2px var(--dt-accent, #2563eb);\n\t\tborder-radius: 4px;\n\t}\n\t/* The time label doubles as the class-color signal (replaces the old\n\t dot): the event color mixed toward the text color, so it stays\n\t legible on any palette and costs zero horizontal space. */\n\t.ag-compact-time.svelte-uhwfyj {\n\t\tfont-size: 11px;\n\t\tfont-family: var(--dt-mono, monospace);\n\t\tfont-weight: 500;\n\t\tcolor: color-mix(in srgb, var(--ev-color, var(--dt-accent)) 60%, var(--dt-text, rgba(0, 0, 0, 0.87)));\n\t\tmin-width: 40px;\n\t\tflex-shrink: 0;\n\t\twhite-space: nowrap;\n\t\tline-height: 1.4;\n\t}\n\t/* Title + location + subtitle + tags cluster. One line while it fits; on\n\t mobile the metadata wraps to a second line instead of crushing the title. */\n\t.ag-compact-main.svelte-uhwfyj {\n\t\tdisplay: flex;\n\t\talign-items: baseline;\n\t\tgap: 6px;\n\t\tflex: 1;\n\t\tmin-width: 0;\n\t}\n\t.ag--mobile.svelte-uhwfyj .ag-compact-main:where(.svelte-uhwfyj) {\n\t\tflex-wrap: wrap;\n\t\trow-gap: 2px;\n\t}\n\t/* Mobile: size the title by its content when deciding line breaks — a long\n\t title claims the first line whole (ellipsizing only against the full row)\n\t and pushes location/subtitle/tags down instead of truncating at 35%. */\n\t.ag--mobile.svelte-uhwfyj .ag-compact-title:where(.svelte-uhwfyj) {\n\t\tflex-basis: auto;\n\t}\n\t/* On their own wrapped line the metadata gets the full width — the tight\n\t desktop caps would truncate it beside empty space. */\n\t.ag--mobile.svelte-uhwfyj .ag-compact-loc:where(.svelte-uhwfyj),\n\t.ag--mobile.svelte-uhwfyj .ag-compact-sub:where(.svelte-uhwfyj) {\n\t\tmax-width: 100%;\n\t}\n\t.ag-compact-title.svelte-uhwfyj {\n\t\tfont-size: 12px;\n\t\tfont-weight: 500;\n\t\tcolor: var(--dt-text-2, rgba(0, 0, 0, 0.54));\n\t\tflex: 1;\n\t\t/* The title is the row's identity — never let subtitle/tags/duration\n\t\t squeeze it out on narrow screens (min-width: 0 resolves to 0px). */\n\t\tmin-width: 35%;\n\t\twhite-space: nowrap;\n\t\toverflow: hidden;\n\t\ttext-overflow: ellipsis;\n\t\ttransition: color 150ms;\n\t\tline-height: 1.4;\n\t}\n\t.ag-compact-dur.svelte-uhwfyj {\n\t\tfont-size: 10px;\n\t\tfont-family: var(--dt-mono, monospace);\n\t\tcolor: var(--dt-text-3, rgba(0, 0, 0, 0.38));\n\t\tflex-shrink: 0;\n\t\twhite-space: nowrap;\n\t\tline-height: 1.4;\n\t}\n\t.ag-compact-sub.svelte-uhwfyj {\n\t\tfont-size: 10px;\n\t\tcolor: var(--dt-text-3, rgba(0, 0, 0, 0.38));\n\t\tflex-shrink: 3;\n\t\tmin-width: 0;\n\t\twhite-space: nowrap;\n\t\toverflow: hidden;\n\t\ttext-overflow: ellipsis;\n\t\tmax-width: 120px;\n\t\tline-height: 1.4;\n\t}\n\t.ag-compact-loc.svelte-uhwfyj {\n\t\tfont-size: 10px;\n\t\tcolor: var(--dt-text-3, rgba(0, 0, 0, 0.38));\n\t\tflex-shrink: 3;\n\t\tmin-width: 0;\n\t\twhite-space: nowrap;\n\t\toverflow: hidden;\n\t\ttext-overflow: ellipsis;\n\t\tmax-width: 100px;\n\t}\n\t.ag-compact--cancelled.svelte-uhwfyj {\n\t\topacity: 0.5;\n\t}\n\t.ag-compact--cancelled.svelte-uhwfyj .ag-compact-title:where(.svelte-uhwfyj) {\n\t\ttext-decoration: line-through;\n\t}\n\t.ag-compact--tentative.svelte-uhwfyj {\n\t\topacity: 0.65;\n\t}\n\t.ag-compact--full.svelte-uhwfyj {\n\t\topacity: 0.55;\n\t}\n\t.ag-compact--limited.svelte-uhwfyj {\n\t\topacity: 0.65;\n\t}\n\t.ag-compact-tag.svelte-uhwfyj {\n\t\tfont: 500 10px / 1 var(--dt-sans, system-ui, sans-serif);\n\t\tcolor: var(--ev-color, var(--dt-accent));\n\t\tbackground: color-mix(in srgb, var(--ev-color, var(--dt-accent)) 12%, transparent);\n\t\tpadding: 1px 4px;\n\t\tborder-radius: 3px;\n\t\twhite-space: nowrap;\n\t\tflex-shrink: 1;\n\t\tmin-width: 2.5em;\n\t\tmax-width: 80px;\n\t\toverflow: hidden;\n\t\ttext-overflow: ellipsis;\n\t}\n\t.ag-compact-more.svelte-uhwfyj {\n\t\tfont-size: 11px;\n\t\tcolor: color-mix(in srgb, var(--dt-text, rgba(0, 0, 0, 0.87)) 72%, transparent);\n\t\tpadding: 2px 0 0 13px;\n\t\tcursor: pointer;\n\t\tdisplay: block;\n\t}\n\t.ag-compact-more.svelte-uhwfyj:hover,\n\t.ag-compact-more.svelte-uhwfyj:active {\n\t\tcolor: var(--dt-text, rgba(0, 0, 0, 0.87));\n\t}\n\t.ag-compact-more.svelte-uhwfyj:focus-visible {\n\t\toutline: none;\n\t\tbox-shadow: 0 0 0 2px var(--dt-accent, #2563eb);\n\t\tborder-radius: 4px;\n\t}\n\n\t/* ═══ Timetable columns (desktop) ═══ */\n\t.ag--cols.svelte-uhwfyj .ag-body:where(.svelte-uhwfyj) {\n\t\tdisplay: grid;\n\t\tgrid-template-columns: repeat(var(--ag-cols, 7), minmax(0, 1fr));\n\t}\n\t/* Columns stretch to the tallest day, so the separator runs full height */\n\t.ag--cols.svelte-uhwfyj .ag-wday:where(.svelte-uhwfyj) {\n\t\tborder-bottom: none;\n\t\tborder-inline-start: 1px solid var(--dt-border, rgba(0, 0, 0, 0.08));\n\t\tmin-width: 0;\n\t}\n\t.ag--cols.svelte-uhwfyj .ag-wday:where(.svelte-uhwfyj):first-child {\n\t\tborder-inline-start: none;\n\t}\n\t/* Uniform head padding — the :first-child top bump would misalign columns.\n\t Also overrides the past-day head variant (extra class = higher specificity). */\n\t.ag--cols.svelte-uhwfyj .ag-wday:where(.svelte-uhwfyj) .ag-wday-head:where(.svelte-uhwfyj) {\n\t\tpadding: 12px 10px 8px;\n\t}\n\t/* Badge + name + date won't fit one line in a ~160px column */\n\t.ag--cols.svelte-uhwfyj .ag-wday-head-left:where(.svelte-uhwfyj) {\n\t\tflex-wrap: wrap;\n\t\trow-gap: 2px;\n\t}\n\t.ag--cols.svelte-uhwfyj .ag-wday-expanded:where(.svelte-uhwfyj),\n\t.ag--cols.svelte-uhwfyj .ag-wday-compact:where(.svelte-uhwfyj),\n\t.ag--cols.svelte-uhwfyj .ag-wday-empty:where(.svelte-uhwfyj),\n\t.ag--cols.svelte-uhwfyj .ag-wday-past-line--summary:where(.svelte-uhwfyj) {\n\t\tpadding-left: 10px;\n\t\tpadding-right: 10px;\n\t}\n\t.ag--cols.svelte-uhwfyj .ag-allday:where(.svelte-uhwfyj) {\n\t\tpadding-left: 10px;\n\t\tpadding-right: 10px;\n\t}\n\t/* Narrow cards: long titles get a third line, meta wraps instead of clipping */\n\t.ag--cols.svelte-uhwfyj .ag-card-title:where(.svelte-uhwfyj) {\n\t\t-webkit-line-clamp: 3;\n\t\tline-clamp: 3;\n\t}\n\t.ag--cols.svelte-uhwfyj .ag-card-meta:where(.svelte-uhwfyj) {\n\t\tflex-wrap: wrap;\n\t\trow-gap: 3px;\n\t}\n\n\t/* ═══ Mobile adaptations ═══ */\n\t.ag--mobile.svelte-uhwfyj .ag-wday-head:where(.svelte-uhwfyj) {\n\t\tpadding: 12px 16px;\n\t}\n\t.ag--mobile.svelte-uhwfyj .ag-wday-expanded:where(.svelte-uhwfyj) {\n\t\tpadding: 0 16px 12px;\n\t}\n\t.ag--mobile.svelte-uhwfyj .ag-wday-compact:where(.svelte-uhwfyj) {\n\t\tpadding: 0 16px 12px;\n\t}\n\t.ag--mobile.svelte-uhwfyj .ag-card-body:where(.svelte-uhwfyj) {\n\t\tpadding: 12px 14px;\n\t}\n\t.ag--mobile.svelte-uhwfyj .ag-card-title:where(.svelte-uhwfyj) {\n\t\tfont-size: 15px;\n\t}\n\t.ag--mobile.svelte-uhwfyj .ag-card-meta:where(.svelte-uhwfyj) {\n\t\tfont-size: 12px;\n\t}\n\t.ag--mobile.svelte-uhwfyj .ag-card-sub:where(.svelte-uhwfyj) {\n\t\tfont-size: 12px;\n\t}\n\t.ag--mobile.svelte-uhwfyj .ag-card-loc:where(.svelte-uhwfyj) {\n\t\tfont-size: 12px;\n\t}\n\t.ag--mobile.svelte-uhwfyj .ag-card-eta:where(.svelte-uhwfyj) {\n\t\tfont-size: 12px;\n\t}\n\t.ag--mobile.svelte-uhwfyj .ag-card-tag:where(.svelte-uhwfyj) {\n\t\tfont-size: 11px;\n\t}\n\t.ag--mobile.svelte-uhwfyj .ag-compact:where(.svelte-uhwfyj) {\n\t\tpadding: 8px 0;\n\t}\n\t.ag--mobile.svelte-uhwfyj .ag-compact-title:where(.svelte-uhwfyj) {\n\t\tfont-size: 15px;\n\t}\n\t.ag--mobile.svelte-uhwfyj .ag-compact-time:where(.svelte-uhwfyj) {\n\t\tfont-size: 12px;\n\t}\n\t.ag--mobile.svelte-uhwfyj .ag-compact-dur:where(.svelte-uhwfyj) {\n\t\tfont-size: 12px;\n\t}\n\t.ag--mobile.svelte-uhwfyj .ag-compact-sub:where(.svelte-uhwfyj) {\n\t\tfont-size: 12px;\n\t}\n\t.ag--mobile.svelte-uhwfyj .ag-compact-loc:where(.svelte-uhwfyj) {\n\t\tfont-size: 11px;\n\t}\n\t.ag--mobile.svelte-uhwfyj .ag-compact-tag:where(.svelte-uhwfyj) {\n\t\tfont-size: 11px;\n\t}\n\t.ag--mobile.svelte-uhwfyj .ag-compact-more:where(.svelte-uhwfyj) {\n\t\tfont-size: 12px;\n\t\tpadding-top: 6px;\n\t}\n\t.ag--mobile.svelte-uhwfyj .ag-allday-span:where(.svelte-uhwfyj) {\n\t\tfont-size: 11px;\n\t}\n\t.ag--mobile.svelte-uhwfyj .ag-wday-badge:where(.svelte-uhwfyj) {\n\t\tfont-size: 11px;\n\t}\n\t.ag--mobile.svelte-uhwfyj .ag-wslot-now:where(.svelte-uhwfyj) {\n\t\tfont-size: 11px;\n\t}\n\t.ag--mobile.svelte-uhwfyj .ag-wday-empty:where(.svelte-uhwfyj) {\n\t\tfont-size: 12px;\n\t}\n\t.ag--mobile.svelte-uhwfyj .ag-wday-past-line:where(.svelte-uhwfyj) {\n\t\tfont-size: 12px;\n\t}\n\t.ag--mobile.svelte-uhwfyj .ag-wslot-cards--multi:where(.svelte-uhwfyj) {\n\t\tgrid-template-columns: 1fr;\n\t}\n\n\t/* ─── Container ──────────────────────────────────── */\n\t.mb.svelte-zbkzcp {\n\t\tposition: relative;\n\t\tdisplay: flex;\n\t\tflex-direction: column;\n\t\tuser-select: none;\n\t\tfont-variant-numeric: tabular-nums;\n\t\toverflow: hidden;\n\t\tbackground: var(--dt-bg, #fff);\n\t\t-webkit-tap-highlight-color: transparent;\n\t\ttouch-action: pan-y;\n\t}\n\t.mb--auto.svelte-zbkzcp { overflow: visible; }\n\n\t/* ─── Swipe wrapper (follows the finger) ─────────── */\n\t.mb-swipe.svelte-zbkzcp {\n\t\tflex: 1;\n\t\tmin-height: 0;\n\t\tdisplay: flex;\n\t\tflex-direction: column;\n\t\tposition: relative;\n\t}\n\t.mb-swipe--animate.svelte-zbkzcp {\n\t\ttransition: transform 180ms ease;\n\t}\n\t@media (prefers-reduced-motion: reduce) {\n\t\t.mb-swipe--animate.svelte-zbkzcp { transition: none; }\n\t}\n\n\t/* ─── All-day bar ────────────────────────────────── */\n\t.mb-allday.svelte-zbkzcp {\n\t\tdisplay: flex;\n\t\tgap: 4px;\n\t\tpadding: 4px 8px;\n\t\toverflow-x: auto;\n\t\tscrollbar-width: none;\n\t\tborder-bottom: 1px solid var(--dt-border, rgba(0, 0, 0, 0.08));\n\t\tflex-shrink: 0;\n\t\talign-items: center;\n\t}\n\t.mb-allday.svelte-zbkzcp::-webkit-scrollbar { display: none; }\n\t.mb-allday--expanded.svelte-zbkzcp {\n\t\tflex-wrap: wrap;\n\t\toverflow-x: visible;\n\t}\n\n\t.mb-allday-chip.svelte-zbkzcp {\n\t\tdisplay: flex;\n\t\talign-items: center;\n\t\tgap: 4px;\n\t\tpadding: 4px 8px;\n\t\tmin-height: 32px;\n\t\tborder-radius: 5px;\n\t\tbackground: color-mix(in srgb, var(--ev-color) 12%, var(--dt-surface, #f9fafb));\n\t\tborder: none;\n\t\tcursor: pointer;\n\t\tflex-shrink: 0;\n\t\ttransition: background 120ms;\n\t\t-webkit-tap-highlight-color: transparent;\n\t\tmax-width: 160px;\n\t\tposition: relative;\n\t}\n\t/* Hit-slop: 44px effective touch target */\n\t.mb-allday-chip.svelte-zbkzcp::before {\n\t\tcontent: '';\n\t\tposition: absolute;\n\t\tleft: 0;\n\t\tright: 0;\n\t\ttop: 50%;\n\t\ttransform: translateY(-50%);\n\t\theight: 44px;\n\t}\n\t.mb-allday-chip.svelte-zbkzcp:active {\n\t\tbackground: color-mix(in srgb, var(--ev-color) 22%, var(--dt-surface, #f9fafb));\n\t}\n\t.mb-allday-chip--selected.svelte-zbkzcp {\n\t\tbox-shadow: 0 0 0 1.5px var(--ev-color);\n\t}\n\t.mb-allday-chip.svelte-zbkzcp:focus-visible {\n\t\toutline: none;\n\t\tbox-shadow: 0 0 0 2px var(--dt-accent, #2563eb);\n\t}\n\n\t.mb-allday-dot.svelte-zbkzcp {\n\t\twidth: 6px;\n\t\theight: 6px;\n\t\tborder-radius: 50%;\n\t\tbackground: var(--ev-color);\n\t\tflex-shrink: 0;\n\t}\n\n\t.mb-allday-title.svelte-zbkzcp {\n\t\tfont: 500 12px/1 var(--dt-sans, system-ui, sans-serif);\n\t\tcolor: var(--dt-text, rgba(0, 0, 0, 0.87));\n\t\twhite-space: nowrap;\n\t\tmax-width: 100px;\n\t\toverflow: hidden;\n\t\ttext-overflow: ellipsis;\n\t}\n\n\t.mb-allday-span.svelte-zbkzcp {\n\t\tfont: 400 11px/1 var(--dt-sans, system-ui, sans-serif);\n\t\tcolor: var(--dt-text-2, rgba(0, 0, 0, 0.54));\n\t}\n\n\t.mb-allday-more.svelte-zbkzcp {\n\t\tfont: 500 12px/1 var(--dt-sans, system-ui, sans-serif);\n\t\tcolor: var(--dt-text-2, rgba(0, 0, 0, 0.54));\n\t\twhite-space: nowrap;\n\t\tflex-shrink: 0;\n\t\tpadding: 0 6px;\n\t\tmin-height: 32px;\n\t\tborder: none;\n\t\tbackground: transparent;\n\t\tcursor: pointer;\n\t\tposition: relative;\n\t\t-webkit-tap-highlight-color: transparent;\n\t}\n\t.mb-allday-more.svelte-zbkzcp::before {\n\t\tcontent: '';\n\t\tposition: absolute;\n\t\tleft: 0;\n\t\tright: 0;\n\t\ttop: 50%;\n\t\ttransform: translateY(-50%);\n\t\theight: 44px;\n\t}\n\t.mb-allday-more.svelte-zbkzcp:focus-visible {\n\t\toutline: none;\n\t\tbox-shadow: 0 0 0 2px var(--dt-accent, #2563eb);\n\t}\n\n\t/* ─── Grid ───────────────────────────────────────── */\n\t.mb-grid.svelte-zbkzcp {\n\t\tflex: 1;\n\t\toverflow-y: auto;\n\t\toverflow-x: hidden;\n\t\toverscroll-behavior: contain;\n\t\t-webkit-overflow-scrolling: touch;\n\t\tscrollbar-width: thin;\n\t\tscrollbar-color: var(--dt-scrollbar, rgba(0, 0, 0, 0.1)) transparent;\n\t\tposition: relative;\n\t\tpadding-top: 8px;\n\t}\n\t.mb--auto.svelte-zbkzcp .mb-grid:where(.svelte-zbkzcp) { overflow-y: visible; }\n\t.mb-grid.svelte-zbkzcp:focus-visible {\n\t\toutline: none;\n\t\tbox-shadow: inset 0 0 0 2px var(--dt-accent, #2563eb);\n\t}\n\n\t.mb-grid-inner.svelte-zbkzcp {\n\t\tposition: relative;\n\t\tmin-width: 100%;\n\t}\n\n\t/* ─── Empty state ────────────────────────────────── */\n\t.mb-empty.svelte-zbkzcp {\n\t\tposition: absolute;\n\t\tinset: 0;\n\t\tdisplay: flex;\n\t\talign-items: center;\n\t\tjustify-content: center;\n\t\tpointer-events: none;\n\t\tz-index: 4;\n\t}\n\t.mb-empty-text.svelte-zbkzcp {\n\t\tfont: 500 13px/1.4 var(--dt-sans, system-ui, sans-serif);\n\t\tcolor: var(--dt-text-2, rgba(0, 0, 0, 0.54));\n\t}\n\n\t/* ─── Hour row ───────────────────────────────────── */\n\t.mb-hour.svelte-zbkzcp {\n\t\tposition: absolute;\n\t\tleft: 0;\n\t\tright: 0;\n\t\tdisplay: flex;\n\t\talign-items: flex-start;\n\t}\n\n\t.mb-hour-label.svelte-zbkzcp {\n\t\twidth: 40px;\n\t\t/* border-box keeps the label inside the 40px gutter that events\n\t\t start at — content-box pushed digits flush under the event edge */\n\t\tbox-sizing: border-box;\n\t\tflex-shrink: 0;\n\t\tfont: 500 11px/1 var(--dt-mono, ui-monospace, monospace);\n\t\tcolor: var(--dt-text-3, rgba(0, 0, 0, 0.38));\n\t\ttext-align: right;\n\t\tpadding-right: 8px;\n\t\tpadding-top: 0;\n\t\tposition: relative;\n\t\ttop: -6px;\n\t}\n\n\t.mb-hour-line.svelte-zbkzcp {\n\t\tflex: 1;\n\t\theight: 1px;\n\t\tbackground: var(--dt-border, rgba(0, 0, 0, 0.08));\n\t}\n\n\t.mb-hour--blocked.svelte-zbkzcp {\n\t\tbackground: repeating-linear-gradient(\n\t\t\t-45deg,\n\t\t\tcolor-mix(in srgb, var(--dt-text, rgba(0, 0, 0, 0.87)) 3%, transparent),\n\t\t\tcolor-mix(in srgb, var(--dt-text, rgba(0, 0, 0, 0.87)) 3%, transparent) 4px,\n\t\t\ttransparent 4px,\n\t\t\ttransparent 8px\n\t\t);\n\t}\n\n\t.mb-blocked-label.svelte-zbkzcp {\n\t\tposition: absolute;\n\t\tleft: 44px;\n\t\ttop: 50%;\n\t\ttransform: translateY(-50%);\n\t\tfont: 500 10px/1 var(--dt-sans, system-ui, sans-serif);\n\t\tcolor: var(--dt-text-2, rgba(0, 0, 0, 0.54));\n\t\ttext-transform: uppercase;\n\t\tletter-spacing: 0.04em;\n\t}\n\n\t/* ─── Now line ───────────────────────────────────── */\n\t.mb-now.svelte-zbkzcp {\n\t\tposition: absolute;\n\t\tleft: 0;\n\t\tright: 0;\n\t\tz-index: 10;\n\t\tdisplay: flex;\n\t\talign-items: center;\n\t\tpointer-events: none;\n\t}\n\n\t.mb-now-label.svelte-zbkzcp {\n\t\twidth: 40px;\n\t\tbox-sizing: border-box;\n\t\tflex-shrink: 0;\n\t\ttext-align: right;\n\t\tpadding-right: 6px;\n\t\tfont: 700 10px/1 var(--dt-mono, ui-monospace, monospace);\n\t\tcolor: var(--dt-accent, #2563eb);\n\t}\n\n\t.mb-now-line.svelte-zbkzcp {\n\t\tflex: 1;\n\t\theight: 2px;\n\t\tbackground: var(--dt-accent, #2563eb);\n\t\tbox-shadow: 0 0 6px var(--dt-glow, rgba(37, 99, 235, 0.25));\n\t\tposition: relative;\n\t}\n\n\t.mb-now-line.svelte-zbkzcp::before {\n\t\tcontent: '';\n\t\tposition: absolute;\n\t\tleft: -4px;\n\t\ttop: -4px;\n\t\twidth: 10px;\n\t\theight: 10px;\n\t\tborder-radius: 50%;\n\t\tbackground: var(--dt-accent, #2563eb);\n\t}\n\n\t/* ─── Events ─────────────────────────────────────── */\n\t.mb-event.svelte-zbkzcp {\n\t\tposition: absolute;\n\t\tz-index: 5;\n\t\tborder-radius: 8px;\n\t\tcursor: pointer;\n\t\tbackground: color-mix(in srgb, var(--ev-color) 12%, var(--dt-surface, #f9fafb));\n\t\tborder: none;\n\t\tdisplay: flex;\n\t\talign-items: stretch;\n\t\toverflow: hidden;\n\t\ttransition: box-shadow 120ms, background 120ms;\n\t\ttext-align: left;\n\t\tpadding: 0;\n\t\t-webkit-tap-highlight-color: transparent;\n\t\tmin-height: 24px;\n\t}\n\t.mb-event.svelte-zbkzcp:active {\n\t\tbackground: color-mix(in srgb, var(--ev-color) 20%, var(--dt-surface, #f9fafb));\n\t}\n\t/* Short blocks keep their duration-proportional height, but get a 44px\n\t transparent hit-slop so taps still land. */\n\t.mb-event--short.svelte-zbkzcp {\n\t\toverflow: visible;\n\t}\n\t.mb-event--short.svelte-zbkzcp::after {\n\t\tcontent: '';\n\t\tposition: absolute;\n\t\tleft: 0;\n\t\tright: 0;\n\t\ttop: 50%;\n\t\ttransform: translateY(-50%);\n\t\theight: 44px;\n\t}\n\t.mb-event--short.svelte-zbkzcp .mb-ev-body:where(.svelte-zbkzcp) {\n\t\tpadding-top: 2px;\n\t\tpadding-bottom: 2px;\n\t}\n\t.mb-event--selected.svelte-zbkzcp {\n\t\tbox-shadow: 0 0 0 2px var(--ev-color),\n\t\t\t0 2px 12px color-mix(in srgb, var(--ev-color) 25%, transparent);\n\t}\n\t.mb-event--current.svelte-zbkzcp {\n\t\tbackground: color-mix(in srgb, var(--ev-color) 18%, var(--dt-surface, #f9fafb));\n\t}\n\t.mb-event--next.svelte-zbkzcp {\n\t\tbackground: color-mix(in srgb, var(--ev-color) 8%, var(--dt-surface, #f9fafb));\n\t\tborder: 1px dashed color-mix(in srgb, var(--ev-color) 35%, transparent);\n\t}\n\t/* Status treatments: token-level dims + a non-opacity signal\n\t (strikethrough / border style) — never a bare opacity on the block. */\n\t.mb-event--cancelled.svelte-zbkzcp {\n\t\tbackground: color-mix(in srgb, var(--ev-color) 5%, var(--dt-surface, #f9fafb));\n\t}\n\t.mb-event--cancelled.svelte-zbkzcp .mb-ev-title:where(.svelte-zbkzcp) {\n\t\ttext-decoration: line-through;\n\t\tcolor: var(--dt-text-2, rgba(0, 0, 0, 0.54));\n\t}\n\t.mb-event--cancelled.svelte-zbkzcp .mb-ev-stripe:where(.svelte-zbkzcp) {\n\t\topacity: 0.45; /* decorative bar only */\n\t}\n\t.mb-event--tentative.svelte-zbkzcp {\n\t\tbackground: color-mix(in srgb, var(--ev-color) 6%, var(--dt-surface, #f9fafb));\n\t\tborder: 1px dashed color-mix(in srgb, var(--ev-color) 45%, transparent);\n\t}\n\t.mb-event--full.svelte-zbkzcp {\n\t\tbackground: color-mix(in srgb, var(--ev-color) 6%, var(--dt-surface, #f9fafb));\n\t\tborder: 1px solid color-mix(in srgb, var(--ev-color) 30%, transparent);\n\t}\n\t.mb-event--full.svelte-zbkzcp .mb-ev-title:where(.svelte-zbkzcp) {\n\t\tcolor: var(--dt-text-2, rgba(0, 0, 0, 0.54));\n\t}\n\t.mb-event--limited.svelte-zbkzcp {\n\t\tbackground: color-mix(in srgb, var(--ev-color) 8%, var(--dt-surface, #f9fafb));\n\t\tborder: 1px dashed color-mix(in srgb, var(--ev-color) 45%, transparent);\n\t}\n\t.mb-event--resizing.svelte-zbkzcp {\n\t\tz-index: 50;\n\t\tbox-shadow: 0 4px 20px rgba(0, 0, 0, 0.25);\n\t\tcursor: ns-resize;\n\t}\n\n\t/* ─── Resize handles ─────────────────────────────── */\n\t.mb-ev-handle.svelte-zbkzcp {\n\t\tposition: absolute;\n\t\tleft: 0;\n\t\tright: 0;\n\t\theight: 10px;\n\t\tz-index: 2;\n\t\tcursor: ns-resize;\n\t\ttouch-action: none;\n\t}\n\t.mb-ev-handle--start.svelte-zbkzcp { top: 0; }\n\t.mb-ev-handle--end.svelte-zbkzcp { bottom: 0; }\n\t/* Hit-slop: ≥24px effective, extending inward so the block's\n\t overflow clipping can't cut it off. */\n\t.mb-ev-handle.svelte-zbkzcp::before {\n\t\tcontent: '';\n\t\tposition: absolute;\n\t\tleft: 0;\n\t\tright: 0;\n\t\theight: 24px;\n\t}\n\t.mb-ev-handle--start.svelte-zbkzcp::before { top: 0; }\n\t.mb-ev-handle--end.svelte-zbkzcp::before { bottom: 0; }\n\t.mb-ev-handle.svelte-zbkzcp::after {\n\t\tcontent: '';\n\t\tposition: absolute;\n\t\tleft: 50%;\n\t\ttransform: translateX(-50%);\n\t\twidth: 24px;\n\t\theight: 3px;\n\t\tborder-radius: 2px;\n\t\tbackground: var(--ev-color);\n\t\topacity: 0;\n\t\ttransition: opacity 120ms;\n\t}\n\t.mb-ev-handle--start.svelte-zbkzcp::after { top: 2px; }\n\t.mb-ev-handle--end.svelte-zbkzcp::after { bottom: 2px; }\n\t.mb-event.svelte-zbkzcp:hover .mb-ev-handle:where(.svelte-zbkzcp)::after,\n\t.mb-event.svelte-zbkzcp:focus-within .mb-ev-handle:where(.svelte-zbkzcp)::after,\n\t.mb-event--resizing.svelte-zbkzcp .mb-ev-handle:where(.svelte-zbkzcp)::after,\n\t.mb-event--selected.svelte-zbkzcp .mb-ev-handle:where(.svelte-zbkzcp)::after { opacity: 0.55; }\n\t/* Touch devices have no hover — show the handles persistently. */\n\t@media (hover: none) {\n\t\t.mb-ev-handle.svelte-zbkzcp::after { opacity: 0.55; }\n\t}\n\n\t/* ─── Drag-to-create ghost ───────────────────────── */\n\t.mb-create-ghost.svelte-zbkzcp {\n\t\tposition: absolute;\n\t\tleft: 40px;\n\t\tright: 4px;\n\t\tz-index: 40;\n\t\tborder-radius: 8px;\n\t\tbackground: color-mix(in srgb, var(--dt-accent, #2563eb) 12%, transparent);\n\t\tborder: 1px dashed color-mix(in srgb, var(--dt-accent, #2563eb) 55%, transparent);\n\t\tdisplay: flex;\n\t\talign-items: flex-start;\n\t\toverflow: hidden;\n\t\tpointer-events: none;\n\t}\n\t.mb-create-ghost-time.svelte-zbkzcp {\n\t\tfont: 600 11px/1 var(--dt-mono, ui-monospace, monospace);\n\t\tcolor: var(--dt-accent, #2563eb);\n\t\tpadding: 4px 8px;\n\t\twhite-space: nowrap;\n\t}\n\n\t.mb-ev-stripe.svelte-zbkzcp {\n\t\twidth: 4px;\n\t\tbackground: var(--ev-color);\n\t\tflex-shrink: 0;\n\t\tborder-radius: 8px 0 0 8px;\n\t}\n\n\t.mb-ev-body.svelte-zbkzcp {\n\t\tflex: 1;\n\t\tmin-width: 0;\n\t\tpadding: 4px 8px;\n\t\tdisplay: flex;\n\t\tflex-direction: column;\n\t\tgap: 1px;\n\t\tjustify-content: center;\n\t}\n\n\t.mb-ev-title.svelte-zbkzcp {\n\t\tfont: 600 15px/1.2 var(--dt-sans, system-ui, sans-serif);\n\t\tcolor: var(--dt-text, rgba(0, 0, 0, 0.87));\n\t\twhite-space: nowrap;\n\t\toverflow: hidden;\n\t\ttext-overflow: ellipsis;\n\t}\n\n\t.mb-ev-time.svelte-zbkzcp {\n\t\tfont: 400 12px/1 var(--dt-mono, ui-monospace, monospace);\n\t\tcolor: var(--dt-text-2, rgba(0, 0, 0, 0.54));\n\t}\n\n\t.mb-ev-sub.svelte-zbkzcp {\n\t\tfont: 400 12px/1.1 var(--dt-sans, system-ui, sans-serif);\n\t\tcolor: var(--dt-text-2, rgba(0, 0, 0, 0.54));\n\t\twhite-space: nowrap;\n\t\toverflow: hidden;\n\t\ttext-overflow: ellipsis;\n\t}\n\n\t.mb-ev-loc.svelte-zbkzcp {\n\t\tfont: 400 11px/1 var(--dt-sans, system-ui, sans-serif);\n\t\tcolor: var(--dt-text-2, rgba(0, 0, 0, 0.54));\n\t\twhite-space: nowrap;\n\t\toverflow: hidden;\n\t\ttext-overflow: ellipsis;\n\t}\n\n\t.mb-ev-tags.svelte-zbkzcp {\n\t\tdisplay: flex;\n\t\tgap: 4px;\n\t\tmargin-top: 2px;\n\t}\n\n\t.mb-ev-tag.svelte-zbkzcp {\n\t\tfont: 500 11px/1 var(--dt-sans, system-ui, sans-serif);\n\t\tcolor: var(--ev-color, var(--dt-accent));\n\t\tbackground: color-mix(in srgb, var(--ev-color, var(--dt-accent)) 15%, transparent);\n\t\tpadding: 2px 5px;\n\t\tborder-radius: 3px;\n\t\twhite-space: nowrap;\n\t}\n\n\t.mb-ev-live.svelte-zbkzcp {\n\t\tposition: absolute;\n\t\ttop: 6px;\n\t\tright: 6px;\n\t\twidth: 7px;\n\t\theight: 7px;\n\t\tborder-radius: 50%;\n\t\tbackground: var(--ev-color, var(--dt-accent));\n\t\tanimation: svelte-zbkzcp-mb-pulse 2s ease-in-out infinite;\n\t}\n\t@media (prefers-reduced-motion: reduce) {\n\t\t.mb-ev-live.svelte-zbkzcp { animation: none; }\n\t}\n\t.mb-ev-next-badge.svelte-zbkzcp {\n\t\tposition: absolute;\n\t\ttop: 4px;\n\t\tright: 4px;\n\t\tfont: 600 10px/1 var(--dt-sans, system-ui, sans-serif);\n\t\ttext-transform: uppercase;\n\t\tletter-spacing: 0.06em;\n\t\tcolor: var(--ev-color, var(--dt-accent));\n\t\tbackground: color-mix(in srgb, var(--ev-color, var(--dt-accent)) 15%, transparent);\n\t\tpadding: 2px 5px;\n\t\tborder-radius: 3px;\n\t\twhite-space: nowrap;\n\t}\n\n\t@keyframes svelte-zbkzcp-mb-pulse {\n\t\t0%, 100% { opacity: 1; }\n\t\t50% { opacity: 0.4; }\n\t}\n\n\t/* ─── Focus ──────────────────────────────────────── */\n\t.mb-event.svelte-zbkzcp:focus-visible {\n\t\toutline: none;\n\t\tbox-shadow: 0 0 0 2px var(--dt-accent, #2563eb);\n\t}\n\n\t/* ─── Container ──────────────────────────────────── */\n\t.mw.svelte-1d18hkf {\n\t\tposition: relative;\n\t\tdisplay: flex;\n\t\tflex-direction: column;\n\t\tuser-select: none;\n\t\tfont-variant-numeric: tabular-nums;\n\t\toverflow: hidden;\n\t\tbackground: var(--dt-bg, #fff);\n\t\t-webkit-tap-highlight-color: transparent;\n\t\ttouch-action: pan-y;\n\t}\n\t.mw--auto.svelte-1d18hkf { overflow: visible; }\n\n\t/* ─── Scrollable day list ────────────────────────── */\n\t.mw-list.svelte-1d18hkf {\n\t\tflex: 1;\n\t\toverflow-y: auto;\n\t\toverflow-x: hidden;\n\t\toverscroll-behavior: contain;\n\t\t-webkit-overflow-scrolling: touch;\n\t\tscrollbar-width: thin;\n\t\tscrollbar-color: var(--dt-scrollbar, rgba(0, 0, 0, 0.1)) transparent;\n\t}\n\t.mw--auto.svelte-1d18hkf .mw-list:where(.svelte-1d18hkf) { overflow-y: visible; }\n\t.mw-list--animate.svelte-1d18hkf {\n\t\ttransition: transform 180ms ease;\n\t}\n\t@media (prefers-reduced-motion: reduce) {\n\t\t.mw-list--animate.svelte-1d18hkf { transition: none; }\n\t}\n\n\t/* ─── Day row ────────────────────────────────────── */\n\t.mw-row.svelte-1d18hkf {\n\t\tdisplay: flex;\n\t\talign-items: center;\n\t\tgap: 12px;\n\t\tposition: relative;\n\t\t/* border-box: width 100% + padding otherwise overflows the list by\n\t\t 24px, which iOS turns into a horizontal pan that clips the date\n\t\t column off the left edge */\n\t\tbox-sizing: border-box;\n\t\tpadding: 10px 12px;\n\t\tbackground: transparent;\n\t\ttransition: background 120ms;\n\t\ttext-align: left;\n\t\twidth: 100%;\n\t\t-webkit-tap-highlight-color: transparent;\n\t\tborder-bottom: 1px solid var(--dt-border, rgba(0, 0, 0, 0.08));\n\t\tmin-height: 56px;\n\t}\n\t.mw-row.svelte-1d18hkf:last-child {\n\t\tborder-bottom: none;\n\t}\n\t.mw-row.svelte-1d18hkf:has(.mw-row-target:where(.svelte-1d18hkf):active) {\n\t\tbackground: color-mix(in srgb, var(--dt-accent, #2563eb) 6%, transparent);\n\t}\n\t.mw-row--today.svelte-1d18hkf {\n\t\tbackground: color-mix(in srgb, var(--dt-accent, #2563eb) 4%, transparent);\n\t}\n\t/* Token-based dim (not subtree opacity) so past rows stay legible/tappable */\n\t.mw-row--past.svelte-1d18hkf {\n\t\tbackground: color-mix(in srgb, var(--dt-text, rgba(0, 0, 0, 0.87)) 3%, transparent);\n\t}\n\t.mw-row--past.svelte-1d18hkf .mw-ev-title,\n\t.mw-row--past.svelte-1d18hkf .mw-day-num:where(.svelte-1d18hkf) {\n\t\tcolor: var(--dt-text-2, rgba(0, 0, 0, 0.54));\n\t}\n\t.mw-row--disabled.svelte-1d18hkf {\n\t\tbackground-image: repeating-linear-gradient(\n\t\t\t135deg,\n\t\t\ttransparent,\n\t\t\ttransparent 6px,\n\t\t\tcolor-mix(in srgb, var(--dt-text, rgba(0, 0, 0, 0.87)) 4%, transparent) 6px,\n\t\t\tcolor-mix(in srgb, var(--dt-text, rgba(0, 0, 0, 0.87)) 4%, transparent) 12px\n\t\t);\n\t}\n\t.mw-row-target.svelte-1d18hkf {\n\t\tposition: absolute;\n\t\tinset: 0;\n\t\tz-index: 0;\n\t\tborder: none;\n\t\tbackground: transparent;\n\t\tcursor: pointer;\n\t\tpadding: 0;\n\t\t-webkit-tap-highlight-color: transparent;\n\t}\n\t.mw-row-target.svelte-1d18hkf:disabled {\n\t\tcursor: default;\n\t}\n\t.mw-row-target.svelte-1d18hkf:focus-visible {\n\t\toutline: none;\n\t\tbox-shadow: inset 0 0 0 2px var(--dt-accent, #2563eb);\n\t}\n\n\t/* ─── Date column ────────────────────────────────── */\n\t.mw-date.svelte-1d18hkf {\n\t\tdisplay: flex;\n\t\tflex-direction: column;\n\t\talign-items: center;\n\t\twidth: 40px;\n\t\tflex-shrink: 0;\n\t\tgap: 2px;\n\t\tposition: relative;\n\t\tz-index: 1;\n\t\tpointer-events: none;\n\t}\n\n\t.mw-day-name.svelte-1d18hkf {\n\t\tfont: 600 11px/1 var(--dt-sans, system-ui, sans-serif);\n\t\tletter-spacing: 0.06em;\n\t\ttext-transform: uppercase;\n\t\tcolor: var(--dt-text-2, rgba(0, 0, 0, 0.54));\n\t}\n\t.mw-day-name--today.svelte-1d18hkf {\n\t\tcolor: var(--dt-accent, #2563eb);\n\t}\n\n\t.mw-day-num.svelte-1d18hkf {\n\t\tfont: 700 18px/1 var(--dt-sans, system-ui, sans-serif);\n\t\tcolor: var(--dt-text, rgba(0, 0, 0, 0.87));\n\t}\n\t.mw-day-num--today.svelte-1d18hkf {\n\t\tbackground: var(--dt-accent, #2563eb);\n\t\tcolor: var(--dt-btn-text, #fff);\n\t\twidth: 30px;\n\t\theight: 30px;\n\t\tdisplay: inline-flex;\n\t\talign-items: center;\n\t\tjustify-content: center;\n\t\tborder-radius: 50%;\n\t\tfont-size: 15px;\n\t}\n\n\t/* ─── Events column ──────────────────────────────── */\n\t/* pointer-events pass through to the full-row target underneath;\n\t only the chips (and \"+N more\") re-capture them. */\n\t.mw-events.svelte-1d18hkf {\n\t\tflex: 1;\n\t\tmin-width: 0;\n\t\tdisplay: flex;\n\t\tflex-direction: column;\n\t\tgap: 4px;\n\t\tposition: relative;\n\t\tz-index: 2;\n\t\tpointer-events: none;\n\t}\n\n\t.mw-empty.svelte-1d18hkf {\n\t\tfont: 400 13px/1 var(--dt-sans, system-ui, sans-serif);\n\t\tcolor: var(--dt-text-2, rgba(0, 0, 0, 0.54));\n\t}\n\n\t/* ─── Event chip ─────────────────────────────────── */\n\t.mw-ev.svelte-1d18hkf {\n\t\tdisplay: flex;\n\t\talign-items: center;\n\t\tgap: 0;\n\t\tmin-height: 44px;\n\t\tborder-radius: 6px;\n\t\tbackground: color-mix(in srgb, var(--ev-color) 10%, var(--dt-surface, #f9fafb));\n\t\toverflow: hidden;\n\t\tcursor: pointer;\n\t\ttransition: background 120ms;\n\t\t-webkit-tap-highlight-color: transparent;\n\t\tborder: none;\n\t\ttext-align: left;\n\t\tpadding: 0;\n\t\tpointer-events: auto;\n\t}\n\t.mw-ev.svelte-1d18hkf:active {\n\t\tbackground: color-mix(in srgb, var(--ev-color) 20%, var(--dt-surface, #f9fafb));\n\t}\n\t.mw-ev--selected.svelte-1d18hkf {\n\t\tbox-shadow: 0 0 0 1.5px var(--ev-color);\n\t}\n\t.mw-ev--current.svelte-1d18hkf {\n\t\tbackground: color-mix(in srgb, var(--ev-color) 16%, var(--dt-surface, #f9fafb));\n\t}\n\t.mw-ev--allday.svelte-1d18hkf {\n\t\tbackground: color-mix(in srgb, var(--ev-color) 14%, var(--dt-surface, #f9fafb));\n\t}\n\t/* Status treatments: token-level dims + a non-opacity signal\n\t (strikethrough / border style) — never a bare opacity on the chip. */\n\t.mw-ev--cancelled.svelte-1d18hkf {\n\t\tbackground: color-mix(in srgb, var(--ev-color) 5%, var(--dt-surface, #f9fafb));\n\t}\n\t.mw-ev--cancelled.svelte-1d18hkf .mw-ev-title:where(.svelte-1d18hkf) {\n\t\ttext-decoration: line-through;\n\t\tcolor: var(--dt-text-2, rgba(0, 0, 0, 0.54));\n\t}\n\t.mw-ev--cancelled.svelte-1d18hkf .mw-ev-stripe:where(.svelte-1d18hkf) {\n\t\topacity: 0.45; /* decorative bar only */\n\t}\n\t.mw-ev--tentative.svelte-1d18hkf {\n\t\tbackground: color-mix(in srgb, var(--ev-color) 6%, var(--dt-surface, #f9fafb));\n\t\tborder: 1px dashed color-mix(in srgb, var(--ev-color) 45%, transparent);\n\t}\n\t.mw-ev--full.svelte-1d18hkf {\n\t\tbackground: color-mix(in srgb, var(--ev-color) 6%, var(--dt-surface, #f9fafb));\n\t\tborder: 1px solid color-mix(in srgb, var(--ev-color) 30%, transparent);\n\t}\n\t.mw-ev--full.svelte-1d18hkf .mw-ev-title:where(.svelte-1d18hkf) {\n\t\tcolor: var(--dt-text-2, rgba(0, 0, 0, 0.54));\n\t}\n\t.mw-ev--limited.svelte-1d18hkf {\n\t\tbackground: color-mix(in srgb, var(--ev-color) 8%, var(--dt-surface, #f9fafb));\n\t\tborder: 1px dashed color-mix(in srgb, var(--ev-color) 45%, transparent);\n\t}\n\n\t.mw-ev-stripe.svelte-1d18hkf {\n\t\twidth: 3px;\n\t\talign-self: stretch;\n\t\tbackground: var(--ev-color, var(--dt-accent));\n\t\tflex-shrink: 0;\n\t\tborder-radius: 6px 0 0 6px;\n\t}\n\n\t.mw-ev-body.svelte-1d18hkf {\n\t\tflex: 1;\n\t\tmin-width: 0;\n\t\tpadding: 5px 8px;\n\t\tdisplay: flex;\n\t\talign-items: baseline;\n\t\tgap: 6px;\n\t}\n\n\t.mw-ev-title.svelte-1d18hkf {\n\t\tfont: 500 15px/1.2 var(--dt-sans, system-ui, sans-serif);\n\t\tcolor: var(--dt-text, rgba(0, 0, 0, 0.87));\n\t\twhite-space: nowrap;\n\t\toverflow: hidden;\n\t\ttext-overflow: ellipsis;\n\t\tflex: 1;\n\t\tmin-width: 0;\n\t}\n\n\t.mw-ev-time.svelte-1d18hkf {\n\t\tfont: 400 12px/1 var(--dt-mono, ui-monospace, monospace);\n\t\tcolor: var(--dt-text-2, rgba(0, 0, 0, 0.54));\n\t\twhite-space: nowrap;\n\t\tflex-shrink: 0;\n\t}\n\n\t.mw-ev-more.svelte-1d18hkf {\n\t\tfont: 500 12px/1 var(--dt-sans, system-ui, sans-serif);\n\t\tcolor: var(--dt-text-2, rgba(0, 0, 0, 0.54));\n\t\tpadding: 2px 4px;\n\t\tmin-height: 32px;\n\t\tborder: none;\n\t\tbackground: transparent;\n\t\tcursor: pointer;\n\t\ttext-align: left;\n\t\talign-self: flex-start;\n\t\tposition: relative;\n\t\tpointer-events: auto;\n\t\t-webkit-tap-highlight-color: transparent;\n\t}\n\t/* Hit-slop: 44px effective touch target */\n\t.mw-ev-more.svelte-1d18hkf::before {\n\t\tcontent: '';\n\t\tposition: absolute;\n\t\tleft: 0;\n\t\tright: 0;\n\t\ttop: 50%;\n\t\ttransform: translateY(-50%);\n\t\theight: 44px;\n\t}\n\t.mw-ev-more.svelte-1d18hkf:focus-visible {\n\t\toutline: none;\n\t\tbox-shadow: 0 0 0 2px var(--dt-accent, #2563eb);\n\t}\n\n\t/* ─── Chevron ────────────────────────────────────── */\n\t.mw-chevron.svelte-1d18hkf {\n\t\tflex-shrink: 0;\n\t\tcolor: var(--dt-text-3, rgba(0, 0, 0, 0.38));\n\t\tposition: relative;\n\t\tz-index: 1;\n\t\tpointer-events: none;\n\t}\n\n\t/* ─── Focus ──────────────────────────────────────── */\n\t.mw-ev.svelte-1d18hkf:focus-visible {\n\t\toutline: none;\n\t\tbox-shadow: 0 0 0 2px var(--dt-accent, #2563eb);\n\t}\n\n\t.mg.svelte-pvjuld {\n\t\tdisplay: flex;\n\t\tflex-direction: column;\n\t\tbackground: var(--dt-bg);\n\t\tcolor: var(--dt-text);\n\t\tfont-family: var(--dt-sans);\n\t\toverflow: hidden;\n\t\tcontainer-type: inline-size;\n\t}\n\t.mg--auto.svelte-pvjuld {\n\t\theight: auto;\n\t}\n\n\t.mg-head.svelte-pvjuld {\n\t\tdisplay: grid;\n\t\tgrid-template-columns: repeat(7, 1fr);\n\t\tborder-bottom: 1px solid var(--dt-border);\n\t\tflex: none;\n\t}\n\t.mg-head-cell.svelte-pvjuld {\n\t\tpadding: 6px 8px;\n\t\tfont-family: var(--dt-mono);\n\t\tfont-size: 11px;\n\t\tfont-weight: 600;\n\t\ttext-transform: uppercase;\n\t\tletter-spacing: 0.06em;\n\t\tcolor: var(--dt-text-3);\n\t}\n\n\t.mg-body.svelte-pvjuld {\n\t\tflex: 1;\n\t\tdisplay: grid;\n\t\tgrid-template-columns: repeat(7, 1fr);\n\t\t/* 56px floor + scroll backstop: a 6-row month compresses instead of clipping its last week */\n\t\tgrid-template-rows: repeat(var(--mg-rows, 5), minmax(56px, 1fr));\n\t\tmin-height: 0;\n\t\toverflow-y: auto;\n\t}\n\t.mg--auto.svelte-pvjuld .mg-body:where(.svelte-pvjuld) {\n\t\tgrid-template-rows: repeat(var(--mg-rows, 5), minmax(88px, auto));\n\t}\n\t.mg-row.svelte-pvjuld {\n\t\tdisplay: contents;\n\t}\n\n\t.mg-cell.svelte-pvjuld {\n\t\tdisplay: flex;\n\t\tflex-direction: column;\n\t\tgap: 3px;\n\t\tpadding: 6px;\n\t\tborder-right: 1px solid var(--dt-border-day);\n\t\tborder-bottom: 1px solid var(--dt-border-day);\n\t\tmin-width: 0;\n\t\toverflow: hidden;\n\t\ttext-align: left;\n\t}\n\t.mg-cell.svelte-pvjuld:nth-child(7n) {\n\t\tborder-right: none;\n\t}\n\t.mg-cell--weekend.svelte-pvjuld {\n\t\tbackground: var(--dt-weekend-bg, rgba(0, 0, 0, 0.02));\n\t}\n\t/* Dim only the day number for adjacent-month cells — their events stay legible */\n\t.mg-cell--out.svelte-pvjuld {\n\t\tbackground: var(--dt-surface, transparent);\n\t}\n\t.mg-cell--out.svelte-pvjuld .mg-daynum:where(.svelte-pvjuld) {\n\t\tcolor: var(--dt-text-3);\n\t}\n\t.mg-cell--today.svelte-pvjuld {\n\t\tbackground: var(--dt-today-bg);\n\t}\n\t.mg-cell--expanded.svelte-pvjuld .mg-chips:where(.svelte-pvjuld) {\n\t\toverflow-y: auto;\n\t}\n\t.mg-cell--disabled.svelte-pvjuld {\n\t\topacity: 0.35;\n\t\tpointer-events: none;\n\t}\n\t.mg-cell--clickable.svelte-pvjuld {\n\t\tcursor: pointer;\n\t}\n\t.mg-cell--clickable.svelte-pvjuld:hover {\n\t\tbackground: var(--dt-hover, rgba(0, 0, 0, 0.04));\n\t}\n\t.mg-cell.svelte-pvjuld:focus-visible {\n\t\toutline: 2px solid var(--dt-accent, #2563eb);\n\t\toutline-offset: -2px;\n\t}\n\n\t.mg-daynum.svelte-pvjuld {\n\t\tflex: none;\n\t\tfont-family: var(--dt-mono);\n\t\tfont-size: 12px;\n\t\tfont-weight: 600;\n\t\tcolor: var(--dt-text-2);\n\t\twidth: 22px;\n\t\theight: 22px;\n\t\tdisplay: inline-flex;\n\t\talign-items: center;\n\t\tjustify-content: center;\n\t\tborder-radius: 999px;\n\t}\n\t.mg-daynum--today.svelte-pvjuld {\n\t\tbackground: var(--dt-accent);\n\t\tcolor: var(--dt-btn-text);\n\t}\n\n\t.mg-chips.svelte-pvjuld {\n\t\tdisplay: flex;\n\t\tflex-direction: column;\n\t\tgap: 2px;\n\t\tmin-height: 0;\n\t\toverflow: hidden;\n\t}\n\t.mg-chip.svelte-pvjuld {\n\t\tdisplay: flex;\n\t\talign-items: center;\n\t\tgap: 5px;\n\t\tborder: none;\n\t\tbackground: none;\n\t\tpadding: 2px 4px;\n\t\tborder-radius: 5px;\n\t\tfont-family: var(--dt-sans);\n\t\tfont-size: 12px;\n\t\tline-height: 1.3;\n\t\tcolor: var(--dt-text);\n\t\tcursor: pointer;\n\t\tmin-width: 0;\n\t\ttext-align: left;\n\t}\n\t.mg-chip.svelte-pvjuld:hover {\n\t\tbackground: var(--dt-hover, rgba(0, 0, 0, 0.04));\n\t}\n\t.mg-chip.svelte-pvjuld:focus-visible {\n\t\tbox-shadow: 0 0 0 2px var(--dt-accent, #2563eb);\n\t\toutline: none;\n\t}\n\t.mg-chip--selected.svelte-pvjuld {\n\t\tbackground: var(--dt-accent-dim);\n\t}\n\t.mg-chip--cancelled.svelte-pvjuld {\n\t\ttext-decoration: line-through;\n\t}\n\t.mg-chip--cancelled.svelte-pvjuld .mg-chip-title:where(.svelte-pvjuld) {\n\t\tcolor: var(--dt-text-2);\n\t}\n\t.mg-chip--cancelled.svelte-pvjuld .mg-chip-dot:where(.svelte-pvjuld) {\n\t\topacity: 0.5;\n\t}\n\t.mg-chip-dot.svelte-pvjuld {\n\t\tflex: none;\n\t\twidth: 7px;\n\t\theight: 7px;\n\t\tborder-radius: 999px;\n\t\tbackground: var(--mg-chip-color);\n\t}\n\t.mg-chip-time.svelte-pvjuld {\n\t\tflex: none;\n\t\tfont-family: var(--dt-mono);\n\t\tfont-size: 11px;\n\t\tcolor: var(--dt-text-2);\n\t}\n\t.mg-chip-title.svelte-pvjuld {\n\t\toverflow: hidden;\n\t\ttext-overflow: ellipsis;\n\t\twhite-space: nowrap;\n\t}\n\t.mg-more.svelte-pvjuld {\n\t\talign-self: flex-start;\n\t\tborder: none;\n\t\tbackground: none;\n\t\tpadding: 1px 4px;\n\t\tborder-radius: 5px;\n\t\tfont-family: var(--dt-mono);\n\t\tfont-size: 11px;\n\t\tcolor: var(--dt-text-2);\n\t\tcursor: pointer;\n\t}\n\t.mg-more.svelte-pvjuld:hover {\n\t\tbackground: var(--dt-hover, rgba(0, 0, 0, 0.04));\n\t\tcolor: var(--dt-text);\n\t}\n\t.mg-more.svelte-pvjuld:focus-visible {\n\t\tbox-shadow: 0 0 0 2px var(--dt-accent, #2563eb);\n\t\toutline: none;\n\t}\n\n\t/* Container-based (the calendar adapts to its box, not the viewport) */\n\t@container (max-width: 640px) {\n\t\t.mg-chip-time.svelte-pvjuld {\n\t\t\tdisplay: none;\n\t\t}\n\t}\n\n\t@media (hover: none) {\n\t\t.mg-chip.svelte-pvjuld,\n\t\t.mg-more.svelte-pvjuld {\n\t\t\tmin-height: 30px;\n\t\t}\n\t}\n\n\t/* ── Dots mode (mobile) ─────────────────────────────\n\t Cells are too narrow for text chips, so events render as colored\n\t dots in a wrapping row. The cell itself stays the tap target\n\t (day drill-down); dots keep their title/aria-label for a11y. */\n\t.mg--dots.svelte-pvjuld .mg-chips:where(.svelte-pvjuld) {\n\t\tflex-direction: row;\n\t\tflex-wrap: wrap;\n\t\talign-items: center;\n\t\tgap: 3px;\n\t}\n\t.mg--dots.svelte-pvjuld .mg-chip:where(.svelte-pvjuld) {\n\t\tpadding: 3px;\n\t\tmin-height: 0;\n\t}\n\t.mg--dots.svelte-pvjuld .mg-chip-title:where(.svelte-pvjuld),\n\t.mg--dots.svelte-pvjuld .mg-chip-time:where(.svelte-pvjuld) {\n\t\tdisplay: none;\n\t}\n\t.mg--dots.svelte-pvjuld .mg-chip-dot:where(.svelte-pvjuld) {\n\t\twidth: 8px;\n\t\theight: 8px;\n\t}\n\t.mg--dots.svelte-pvjuld .mg-more:where(.svelte-pvjuld) {\n\t\tpadding: 0 3px;\n\t\tmin-height: 0;\n\t\talign-self: center;\n\t\tfont-size: 10px;\n\t}\n\n\t.cal.svelte-1b53e7w {\n\t\tposition: relative;\n\t\twidth: 100%;\n\t\tmin-width: 0;\n\t\theight: var(--cal-h, 600px);\n\t\tbackground: var(--dt-bg, inherit);\n\t\tborder-radius: var(--cal-r, 12px);\n\t\toverflow: clip;\n\t\tdisplay: flex;\n\t\tflex-direction: column;\n\t\tborder: 1px solid var(--dt-border, rgba(0, 0, 0, 0.08));\n\t\tbox-sizing: border-box;\n\t}\n\t.cal--auto.svelte-1b53e7w {\n\t\theight: auto;\n\t\toverflow: visible;\n\t}\n\n\n\t/* ── Desktop header ── */\n\t.cal-hd.svelte-1b53e7w {\n\t\tdisplay: flex;\n\t\tflex-wrap: wrap;\n\t\talign-items: center;\n\t\tgap: 8px;\n\t\tpadding: 8px 12px;\n\t\tmin-height: 48px;\n\t\tbox-sizing: border-box;\n\t\tborder-bottom: 1px solid var(--dt-border, rgba(0, 0, 0, 0.08));\n\t\tflex-shrink: 0;\n\t}\n\n\t.cal-hd-side.svelte-1b53e7w {\n\t\tdisplay: flex;\n\t\talign-items: center;\n\t\tgap: 4px;\n\t\tflex: 1;\n\t\tmin-width: 0;\n\t}\n\n\t.cal-hd-side--end.svelte-1b53e7w {\n\t\tjustify-content: flex-end;\n\t}\n\n\t.cal-hd-title.svelte-1b53e7w {\n\t\tfont: 600 14px/1.2 var(--dt-sans, system-ui, sans-serif);\n\t\tcolor: var(--dt-text, rgba(0, 0, 0, 0.87));\n\t\twhite-space: nowrap;\n\t\toverflow: hidden;\n\t\ttext-overflow: ellipsis;\n\t}\n\n\t.cal-hd-btn.svelte-1b53e7w {\n\t\tdisplay: flex;\n\t\talign-items: center;\n\t\tjustify-content: center;\n\t\twidth: 28px;\n\t\theight: 28px;\n\t\tborder: none;\n\t\tbackground: transparent;\n\t\tcolor: var(--dt-text-2, rgba(0, 0, 0, 0.54));\n\t\tborder-radius: 6px;\n\t\tcursor: pointer;\n\t\ttransition: background 120ms, color 120ms;\n\t}\n\n\t.cal-hd-btn.svelte-1b53e7w:hover {\n\t\tcolor: var(--dt-text, rgba(0, 0, 0, 0.87));\n\t\tbackground: color-mix(in srgb, var(--dt-text, rgba(0, 0, 0, 0.87)) 8%, transparent);\n\t}\n\n\t.cal-hd-btn.svelte-1b53e7w:focus-visible,\n\t.cal-hd-today.svelte-1b53e7w:focus-visible,\n\t.cal-pill.svelte-1b53e7w:focus-visible {\n\t\toutline: 2px solid color-mix(in srgb, var(--dt-accent, #2563eb) 55%, transparent);\n\t\toutline-offset: 2px;\n\t}\n\n\t.cal-hd-today.svelte-1b53e7w {\n\t\tfont: 500 12px/1 var(--dt-sans, system-ui, sans-serif);\n\t\tcolor: var(--dt-text-2, rgba(0, 0, 0, 0.54));\n\t\tbackground: transparent;\n\t\tborder: 1px solid var(--dt-border, rgba(0, 0, 0, 0.08));\n\t\tpadding: 6px 10px;\n\t\tborder-radius: 6px;\n\t\tcursor: pointer;\n\t\twhite-space: nowrap;\n\t\tmargin-right: 2px;\n\t\ttransition: background 120ms, color 120ms, border-color 120ms;\n\t}\n\n\t.cal-hd-today.svelte-1b53e7w:hover:not(:disabled) {\n\t\tcolor: var(--dt-text, rgba(0, 0, 0, 0.87));\n\t\tborder-color: var(--dt-text-2, rgba(0, 0, 0, 0.54));\n\t}\n\t.cal-hd-today.svelte-1b53e7w:disabled {\n\t\topacity: 0.45;\n\t\tcursor: default;\n\t}\n\n\t.cal-pills.svelte-1b53e7w {\n\t\tdisplay: flex;\n\t\tgap: 2px;\n\t\tbackground: color-mix(in srgb, var(--dt-surface, var(--dt-bg, #ffffff)) 85%, transparent);\n\t\tborder-radius: 8px;\n\t\tpadding: 2px;\n\t\tborder: 1px solid var(--dt-border, rgba(0, 0, 0, 0.08));\n\t\tflex-shrink: 0;\n\t}\n\n\t.cal-pill.svelte-1b53e7w {\n\t\tborder: none;\n\t\tbackground: transparent;\n\t\tcolor: var(--dt-text-2, rgba(0, 0, 0, 0.54));\n\t\tcursor: pointer;\n\t\tfont: 500 12px/1 var(--dt-sans, system-ui, sans-serif);\n\t\tpadding: 5px 12px;\n\t\tborder-radius: 6px;\n\t\ttransition: background 100ms, color 100ms;\n\t}\n\n\t/* :not(--active) — the hover rule otherwise outranks the active color,\n\t and iOS keeps :hover stuck after a tap (dark text on the accent). */\n\t.cal-pill.svelte-1b53e7w:hover:not(.cal-pill--active) {\n\t\tcolor: var(--dt-text, rgba(0, 0, 0, 0.87));\n\t}\n\n\t.cal-pill--active.svelte-1b53e7w {\n\t\tbackground: var(--dt-accent, #2563eb);\n\t\tcolor: var(--dt-btn-text, #fff);\n\t}\n\n\t.cal-body.svelte-1b53e7w {\n\t\tflex: 1;\n\t\tmin-height: 0;\n\t\tposition: relative;\n\t\toverflow: hidden;\n\t}\n\t.cal--auto.svelte-1b53e7w .cal-body:where(.svelte-1b53e7w) {\n\t\toverflow: visible;\n\t}\n\n\t.cal-empty.svelte-1b53e7w {\n\t\tdisplay: flex;\n\t\talign-items: center;\n\t\tjustify-content: center;\n\t\theight: 100%;\n\t\tfont: 400 13px / 1 var(--dt-sans, system-ui, sans-serif);\n\t\tcolor: var(--dt-text-3, rgba(0, 0, 0, 0.38));\n\t}\n\n\t.cal-loading.svelte-1b53e7w {\n\t\tposition: absolute;\n\t\ttop: 0;\n\t\tleft: 0;\n\t\tright: 0;\n\t\theight: 2px;\n\t\tbackground: linear-gradient(\n\t\t\t90deg,\n\t\t\ttransparent 0%,\n\t\t\tvar(--dt-accent, #2563eb) 50%,\n\t\t\ttransparent 100%\n\t\t);\n\t\tanimation: svelte-1b53e7w-cal-slide 1.2s ease-in-out infinite;\n\t}\n\n\t@keyframes svelte-1b53e7w-cal-slide {\n\t\t0% { transform: translateX(-100%); }\n\t\t100% { transform: translateX(100%); }\n\t}\n\n\t@media (prefers-reduced-motion: reduce) {\n\t\t.cal-loading.svelte-1b53e7w {\n\t\t\tanimation: none;\n\t\t\tbackground: var(--dt-accent-dim, rgba(37, 99, 235, 0.12));\n\t\t}\n\t}\n\n\t/* ── Mobile header (flow layout) ── */\n\t.cal-m-hd.svelte-1b53e7w {\n\t\tdisplay: flex;\n\t\talign-items: center;\n\t\tgap: 4px;\n\t\tpadding: 8px 8px 6px;\n\t\tborder-bottom: 1px solid var(--dt-border, rgba(0, 0, 0, 0.08));\n\t\tflex-shrink: 0;\n\t\tmin-height: 44px;\n\t}\n\n\t/* Narrow containers: the date label moves to its own row (.cal-m-titlebar),\n\t so the controls row spreads pills and nav to the edges. */\n\t.cal-m-hd--stack.svelte-1b53e7w {\n\t\tjustify-content: space-between;\n\t}\n\t.cal-m-hd--titled.svelte-1b53e7w {\n\t\tborder-bottom: none;\n\t\tpadding-bottom: 2px;\n\t}\n\t.cal-m-titlebar.svelte-1b53e7w {\n\t\tdisplay: flex;\n\t\tjustify-content: center;\n\t\tpadding: 0 8px 8px;\n\t\tborder-bottom: 1px solid var(--dt-border, rgba(0, 0, 0, 0.08));\n\t\tflex-shrink: 0;\n\t}\n\t.cal-m-titlebar.svelte-1b53e7w .cal-m-title:where(.svelte-1b53e7w) {\n\t\tflex: 0 1 auto;\n\t}\n\n\t.cal-m-left.svelte-1b53e7w,\n\t.cal-m-right.svelte-1b53e7w {\n\t\tdisplay: flex;\n\t\talign-items: center;\n\t\tgap: 2px;\n\t\tflex-shrink: 0;\n\t}\n\n\t.cal-m-right.svelte-1b53e7w {\n\t\tjustify-content: flex-end;\n\t}\n\n\t.cal-m-nav.svelte-1b53e7w {\n\t\tdisplay: flex;\n\t\talign-items: center;\n\t\tjustify-content: center;\n\t\twidth: 40px;\n\t\theight: 40px;\n\t\tborder: none;\n\t\tbackground: transparent;\n\t\tcolor: var(--dt-text-2, rgba(0, 0, 0, 0.54));\n\t\tborder-radius: 50%;\n\t\tcursor: pointer;\n\t\ttransition: background 120ms, color 120ms;\n\t\t-webkit-tap-highlight-color: transparent;\n\t\tflex-shrink: 0;\n\t}\n\t.cal-m-nav.svelte-1b53e7w:hover {\n\t\tcolor: var(--dt-text, rgba(0, 0, 0, 0.87));\n\t\tbackground: color-mix(in srgb, var(--dt-text, rgba(0, 0, 0, 0.87)) 8%, transparent);\n\t}\n\t.cal-m-nav.svelte-1b53e7w:active {\n\t\tbackground: var(--dt-accent-dim, rgba(37, 99, 235, 0.12));\n\t}\n\t.cal-m-nav.svelte-1b53e7w:focus-visible {\n\t\toutline: 2px solid color-mix(in srgb, var(--dt-accent, #2563eb) 55%, transparent);\n\t\toutline-offset: 2px;\n\t}\n\n\t.cal-m-pills.svelte-1b53e7w {\n\t\tdisplay: flex;\n\t\tgap: 2px;\n\t\tbackground: color-mix(in srgb, var(--dt-surface, var(--dt-bg, #ffffff)) 85%, transparent);\n\t\tborder-radius: 8px;\n\t\tpadding: 2px;\n\t\tborder: 1px solid var(--dt-border, rgba(0, 0, 0, 0.08));\n\t\tflex-shrink: 0;\n\t}\n\t.cal-m-pill.svelte-1b53e7w {\n\t\tborder: none;\n\t\tbackground: transparent;\n\t\tcolor: var(--dt-text-2, rgba(0, 0, 0, 0.54));\n\t\tcursor: pointer;\n\t\tfont: 600 12px / 1 var(--dt-sans, system-ui, sans-serif);\n\t\tpadding: 9px 12px;\n\t\tborder-radius: 6px;\n\t\tletter-spacing: 0.04em;\n\t\ttext-transform: uppercase;\n\t\ttransition: background 100ms, color 100ms;\n\t\t-webkit-tap-highlight-color: transparent;\n\t}\n\t.cal-m-pill.svelte-1b53e7w:hover:not(.cal-m-pill--active) {\n\t\tcolor: var(--dt-text, rgba(0, 0, 0, 0.87));\n\t}\n\t.cal-m-pill--active.svelte-1b53e7w {\n\t\tbackground: var(--dt-accent, #2563eb);\n\t\tcolor: var(--dt-btn-text, #fff);\n\t}\n\n\t.cal-m-title.svelte-1b53e7w {\n\t\tflex: 1;\n\t\ttext-align: center;\n\t\tfont: 600 14px / 1.2 var(--dt-sans, system-ui, sans-serif);\n\t\tcolor: var(--dt-text, rgba(0, 0, 0, 0.87));\n\t\twhite-space: nowrap;\n\t\toverflow: hidden;\n\t\ttext-overflow: ellipsis;\n\t\tmin-width: 0;\n\t}\n\n\t.cal-m-today.svelte-1b53e7w {\n\t\tfont: 600 12px / 1 var(--dt-sans, system-ui, sans-serif);\n\t\tcolor: var(--dt-accent, #2563eb);\n\t\tbackground: color-mix(in srgb, var(--dt-accent, #2563eb) 10%, transparent);\n\t\tborder: none;\n\t\tmin-height: 40px;\n\t\tpadding: 5px 12px;\n\t\tborder-radius: 6px;\n\t\tcursor: pointer;\n\t\twhite-space: nowrap;\n\t\tletter-spacing: 0.04em;\n\t\ttext-transform: uppercase;\n\t\ttransition: background 120ms, color 120ms;\n\t\t-webkit-tap-highlight-color: transparent;\n\t\tflex-shrink: 0;\n\t}\n\t.cal-m-today.svelte-1b53e7w:hover:not(:disabled) {\n\t\tbackground: color-mix(in srgb, var(--dt-accent, #2563eb) 18%, transparent);\n\t}\n\t.cal-m-today.svelte-1b53e7w:active:not(:disabled) {\n\t\tbackground: color-mix(in srgb, var(--dt-accent, #2563eb) 25%, transparent);\n\t}\n\t.cal-m-today.svelte-1b53e7w:disabled {\n\t\topacity: 0.45;\n\t\tcursor: default;\n\t}\n\t.cal-m-today.svelte-1b53e7w:focus-visible {\n\t\toutline: 2px solid color-mix(in srgb, var(--dt-accent, #2563eb) 55%, transparent);\n\t\toutline-offset: 2px;\n\t}\n";
|
|
2
2
|
(function() {
|
|
3
3
|
"use strict";
|
|
4
4
|
const DERIVED = 1 << 1;
|
|
@@ -2648,10 +2648,6 @@ globalThis.__DAY_CALENDAR_CSS__ = ":host{display:block}\n\t/* ─── Containe
|
|
|
2648
2648
|
active_effect = previous_effect;
|
|
2649
2649
|
}
|
|
2650
2650
|
}
|
|
2651
|
-
async function tick() {
|
|
2652
|
-
await Promise.resolve();
|
|
2653
|
-
flushSync();
|
|
2654
|
-
}
|
|
2655
2651
|
function get(signal) {
|
|
2656
2652
|
var flags2 = signal.f;
|
|
2657
2653
|
var is_derived = (flags2 & DERIVED) !== 0;
|
|
@@ -5499,7 +5495,6 @@ globalThis.__DAY_CALENDAR_CSS__ = ":host{display:block}\n\t/* ─── Containe
|
|
|
5499
5495
|
--dt-success: rgba(22, 163, 74, 0.7);
|
|
5500
5496
|
--dt-weekend-bg: rgba(0, 0, 0, 0.02);
|
|
5501
5497
|
--dt-hover: rgba(0, 0, 0, 0.04);
|
|
5502
|
-
--dt-sans: inherit;
|
|
5503
5498
|
--dt-mono: ui-monospace, 'SFMono-Regular', monospace;
|
|
5504
5499
|
`;
|
|
5505
5500
|
const midnight = `
|
|
@@ -5520,7 +5515,6 @@ globalThis.__DAY_CALENDAR_CSS__ = ":host{display:block}\n\t/* ─── Containe
|
|
|
5520
5515
|
--dt-success: rgba(74, 222, 128, 0.7);
|
|
5521
5516
|
--dt-weekend-bg: rgba(148, 163, 184, 0.03);
|
|
5522
5517
|
--dt-hover: rgba(148, 163, 184, 0.06);
|
|
5523
|
-
--dt-sans: inherit;
|
|
5524
5518
|
--dt-mono: ui-monospace, 'SFMono-Regular', monospace;
|
|
5525
5519
|
`;
|
|
5526
5520
|
const presets = { auto, neutral, midnight };
|
|
@@ -5746,6 +5740,45 @@ globalThis.__DAY_CALENDAR_CSS__ = ":host{display:block}\n\t/* ─── Containe
|
|
|
5746
5740
|
}
|
|
5747
5741
|
return null;
|
|
5748
5742
|
}
|
|
5743
|
+
const MONO_VAR_CANDIDATES = [
|
|
5744
|
+
"--font-mono",
|
|
5745
|
+
// Tailwind v4 theme tokens, common convention
|
|
5746
|
+
"--font-family-mono",
|
|
5747
|
+
"--font-monospace",
|
|
5748
|
+
"--mono-font",
|
|
5749
|
+
"--code-font"
|
|
5750
|
+
];
|
|
5751
|
+
const MONO_FALLBACK = "ui-monospace, 'SFMono-Regular', monospace";
|
|
5752
|
+
function probeFonts(host) {
|
|
5753
|
+
let sans = "system-ui, sans-serif";
|
|
5754
|
+
try {
|
|
5755
|
+
const f = getComputedStyle(host).fontFamily;
|
|
5756
|
+
if (f) sans = f;
|
|
5757
|
+
} catch {
|
|
5758
|
+
}
|
|
5759
|
+
let mono = "";
|
|
5760
|
+
try {
|
|
5761
|
+
const rootCs = getComputedStyle(document.documentElement);
|
|
5762
|
+
for (const name of MONO_VAR_CANDIDATES) {
|
|
5763
|
+
const val = rootCs.getPropertyValue(name).trim();
|
|
5764
|
+
if (val) {
|
|
5765
|
+
mono = val;
|
|
5766
|
+
break;
|
|
5767
|
+
}
|
|
5768
|
+
}
|
|
5769
|
+
} catch {
|
|
5770
|
+
}
|
|
5771
|
+
if (!mono) {
|
|
5772
|
+
const code = document.querySelector("pre, code, kbd, samp");
|
|
5773
|
+
if (code) {
|
|
5774
|
+
try {
|
|
5775
|
+
mono = getComputedStyle(code).fontFamily || "";
|
|
5776
|
+
} catch {
|
|
5777
|
+
}
|
|
5778
|
+
}
|
|
5779
|
+
}
|
|
5780
|
+
return { sans, mono: mono || MONO_FALLBACK };
|
|
5781
|
+
}
|
|
5749
5782
|
const BG_VAR_CANDIDATES = [
|
|
5750
5783
|
"--bg",
|
|
5751
5784
|
"--background",
|
|
@@ -5814,7 +5847,7 @@ globalThis.__DAY_CALENDAR_CSS__ = ":host{display:block}\n\t/* ─── Containe
|
|
|
5814
5847
|
accent = probeAccent(htmlRoot) ?? (isDark ? [239, 68, 68] : [37, 99, 235]);
|
|
5815
5848
|
}
|
|
5816
5849
|
const [aH, aS, aL] = rgbToHsl(...accent);
|
|
5817
|
-
const fonts = options.font ? { sans: options.font, mono:
|
|
5850
|
+
const fonts = options.font ? { sans: options.font, mono: MONO_FALLBACK } : probeFonts(host);
|
|
5818
5851
|
const probedText = probeTextColor(host, bg);
|
|
5819
5852
|
const textBase = probedText ?? (isDark ? [226, 232, 240] : [30, 30, 46]);
|
|
5820
5853
|
const calBg = isDark ? mix(bg, [255, 255, 255], 0.02) : mix(bg, [0, 0, 0], 5e-3);
|
|
@@ -5884,10 +5917,16 @@ globalThis.__DAY_CALENDAR_CSS__ = ":host{display:block}\n\t/* ─── Containe
|
|
|
5884
5917
|
attributes: true,
|
|
5885
5918
|
attributeFilter: ["class", "style", "data-theme", "data-mode", "color-scheme"]
|
|
5886
5919
|
});
|
|
5920
|
+
if (document.readyState !== "complete") {
|
|
5921
|
+
window.addEventListener("load", scheduleUpdate, { once: true });
|
|
5922
|
+
}
|
|
5923
|
+
document.fonts?.ready?.then(scheduleUpdate).catch(() => {
|
|
5924
|
+
});
|
|
5887
5925
|
update();
|
|
5888
5926
|
return () => {
|
|
5889
5927
|
cancelAnimationFrame(rafId);
|
|
5890
5928
|
mql?.removeEventListener("change", onScheme);
|
|
5929
|
+
window.removeEventListener("load", scheduleUpdate);
|
|
5891
5930
|
observer.disconnect();
|
|
5892
5931
|
};
|
|
5893
5932
|
}
|
|
@@ -5931,6 +5970,9 @@ globalThis.__DAY_CALENDAR_CSS__ = ":host{display:block}\n\t/* ─── Containe
|
|
|
5931
5970
|
get compact() {
|
|
5932
5971
|
return raw?.compact ?? false;
|
|
5933
5972
|
},
|
|
5973
|
+
get columns() {
|
|
5974
|
+
return raw?.columns ?? false;
|
|
5975
|
+
},
|
|
5934
5976
|
get readOnly() {
|
|
5935
5977
|
return raw?.readOnly ?? false;
|
|
5936
5978
|
},
|
|
@@ -6499,1263 +6541,84 @@ globalThis.__DAY_CALENDAR_CSS__ = ":host{display:block}\n\t/* ─── Containe
|
|
|
6499
6541
|
function fromZonedTime(date, timezone) {
|
|
6500
6542
|
return fromZonedTime$1(date, timezone);
|
|
6501
6543
|
}
|
|
6502
|
-
function wrapAdapterWithTimezone(adapter, timezone) {
|
|
6503
|
-
const zoneEvent = (ev) => ({
|
|
6504
|
-
...ev,
|
|
6505
|
-
start: toZonedTime(ev.start, timezone),
|
|
6506
|
-
end: toZonedTime(ev.end, timezone)
|
|
6507
|
-
});
|
|
6508
|
-
const unzonePartial = (obj) => ({
|
|
6509
|
-
...obj,
|
|
6510
|
-
...obj.start instanceof Date ? { start: fromZonedTime(obj.start, timezone) } : {},
|
|
6511
|
-
...obj.end instanceof Date ? { end: fromZonedTime(obj.end, timezone) } : {}
|
|
6512
|
-
});
|
|
6513
|
-
const wrapped = {
|
|
6514
|
-
async fetchEvents(range) {
|
|
6515
|
-
const events = await adapter.fetchEvents({
|
|
6516
|
-
start: fromZonedTime(range.start, timezone),
|
|
6517
|
-
end: fromZonedTime(range.end, timezone)
|
|
6518
|
-
});
|
|
6519
|
-
return events.map(zoneEvent);
|
|
6520
|
-
}
|
|
6521
|
-
};
|
|
6522
|
-
if (adapter.createEvent) {
|
|
6523
|
-
wrapped.createEvent = async (event2) => zoneEvent(await adapter.createEvent(unzonePartial(event2)));
|
|
6524
|
-
}
|
|
6525
|
-
if (adapter.updateEvent) {
|
|
6526
|
-
wrapped.updateEvent = async (id, patch) => zoneEvent(await adapter.updateEvent(id, unzonePartial(patch)));
|
|
6527
|
-
}
|
|
6528
|
-
if (adapter.deleteEvent) {
|
|
6529
|
-
wrapped.deleteEvent = (id) => adapter.deleteEvent(id);
|
|
6530
|
-
}
|
|
6531
|
-
return wrapped;
|
|
6532
|
-
}
|
|
6533
|
-
function createClock(timezone) {
|
|
6534
|
-
const now = () => timezone ? toZonedTime(Date.now(), timezone).getTime() : Date.now();
|
|
6535
|
-
let tick2 = /* @__PURE__ */ state(proxy(now()));
|
|
6536
|
-
let today = /* @__PURE__ */ state(proxy(sod(get(tick2))));
|
|
6537
|
-
let intervalId = null;
|
|
6538
|
-
function start() {
|
|
6539
|
-
intervalId = setInterval(
|
|
6540
|
-
() => {
|
|
6541
|
-
set(tick2, now(), true);
|
|
6542
|
-
const sd = sod(get(tick2));
|
|
6543
|
-
if (sd !== get(today)) set(today, sd, true);
|
|
6544
|
-
},
|
|
6545
|
-
1e3
|
|
6546
|
-
);
|
|
6547
|
-
}
|
|
6548
|
-
function destroy() {
|
|
6549
|
-
if (intervalId !== null) {
|
|
6550
|
-
clearInterval(intervalId);
|
|
6551
|
-
intervalId = null;
|
|
6552
|
-
}
|
|
6553
|
-
}
|
|
6554
|
-
try {
|
|
6555
|
-
onMount(() => {
|
|
6556
|
-
start();
|
|
6557
|
-
return destroy;
|
|
6558
|
-
});
|
|
6559
|
-
} catch {
|
|
6560
|
-
}
|
|
6561
|
-
return {
|
|
6562
|
-
get tick() {
|
|
6563
|
-
return get(tick2);
|
|
6564
|
-
},
|
|
6565
|
-
get today() {
|
|
6566
|
-
return get(today);
|
|
6567
|
-
},
|
|
6568
|
-
get hm() {
|
|
6569
|
-
return fmtHM(get(tick2));
|
|
6570
|
-
},
|
|
6571
|
-
get s() {
|
|
6572
|
-
return fmtS(get(tick2));
|
|
6573
|
-
},
|
|
6574
|
-
get fractionalHour() {
|
|
6575
|
-
return fractionalHour(get(tick2));
|
|
6576
|
-
},
|
|
6577
|
-
destroy
|
|
6578
|
-
};
|
|
6579
|
-
}
|
|
6580
|
-
const DEFAULTS = {
|
|
6581
|
-
titleFont: "500 12px system-ui, sans-serif",
|
|
6582
|
-
secondaryFont: "400 10px system-ui, sans-serif",
|
|
6583
|
-
tagFont: "500 8px system-ui, sans-serif",
|
|
6584
|
-
titleLineHeight: 16,
|
|
6585
|
-
secondaryLineHeight: 13,
|
|
6586
|
-
contentGap: 3
|
|
6587
|
-
};
|
|
6588
|
-
function createTextMeasure(opts = {}) {
|
|
6589
|
-
const config = { ...DEFAULTS, ...opts };
|
|
6590
|
-
let pretext = null;
|
|
6591
|
-
let loadAttempted = false;
|
|
6592
|
-
let pretextAvailable = false;
|
|
6593
|
-
const cache = /* @__PURE__ */ new Map();
|
|
6594
|
-
function tryLoadPretext() {
|
|
6595
|
-
if (loadAttempted) return pretextAvailable;
|
|
6596
|
-
loadAttempted = true;
|
|
6597
|
-
try {
|
|
6598
|
-
const mod = globalThis.__pretextModule;
|
|
6599
|
-
if (mod) {
|
|
6600
|
-
pretext = mod;
|
|
6601
|
-
pretextAvailable = true;
|
|
6602
|
-
}
|
|
6603
|
-
} catch {
|
|
6604
|
-
}
|
|
6605
|
-
return pretextAvailable;
|
|
6606
|
-
}
|
|
6607
|
-
function getPrepared(text2, font) {
|
|
6608
|
-
const key = `${font}\0${text2}`;
|
|
6609
|
-
let prepared = cache.get(key);
|
|
6610
|
-
if (!prepared) {
|
|
6611
|
-
prepared = pretext.prepare(text2, font);
|
|
6612
|
-
cache.set(key, prepared);
|
|
6613
|
-
}
|
|
6614
|
-
return prepared;
|
|
6615
|
-
}
|
|
6616
|
-
function heuristicMeasure(text2, maxWidth, lineHeight, font) {
|
|
6617
|
-
const sizeMatch = font.match(/(\d+)px/);
|
|
6618
|
-
const fontSize = sizeMatch ? parseInt(sizeMatch[1]) : 12;
|
|
6619
|
-
const avgCharWidth = fontSize * 0.55;
|
|
6620
|
-
const charsPerLine = Math.max(1, Math.floor(maxWidth / avgCharWidth));
|
|
6621
|
-
const lineCount = Math.max(1, Math.ceil(text2.length / charsPerLine));
|
|
6622
|
-
return { height: lineCount * lineHeight, lineCount };
|
|
6623
|
-
}
|
|
6624
|
-
function measureOne(text2, maxWidth, lineHeight, font) {
|
|
6625
|
-
if (!text2) return { height: 0, lineCount: 0 };
|
|
6626
|
-
if (pretextAvailable && pretext) {
|
|
6627
|
-
const prepared = getPrepared(text2, font);
|
|
6628
|
-
return pretext.layout(prepared, maxWidth, lineHeight);
|
|
6629
|
-
}
|
|
6630
|
-
return heuristicMeasure(text2, maxWidth, lineHeight, font);
|
|
6631
|
-
}
|
|
6632
|
-
return {
|
|
6633
|
-
get available() {
|
|
6634
|
-
tryLoadPretext();
|
|
6635
|
-
return pretextAvailable;
|
|
6636
|
-
},
|
|
6637
|
-
measure(text2, maxWidth, lineHeight) {
|
|
6638
|
-
tryLoadPretext();
|
|
6639
|
-
return measureOne(text2, maxWidth, lineHeight, config.titleFont);
|
|
6640
|
-
},
|
|
6641
|
-
fits(text2, maxWidth, lineHeight) {
|
|
6642
|
-
tryLoadPretext();
|
|
6643
|
-
const { lineCount } = measureOne(text2, maxWidth, lineHeight, config.titleFont);
|
|
6644
|
-
return lineCount <= 1;
|
|
6645
|
-
},
|
|
6646
|
-
measureStack(items, maxWidth, gap = config.contentGap) {
|
|
6647
|
-
tryLoadPretext();
|
|
6648
|
-
const breakdown = [];
|
|
6649
|
-
let totalHeight = 0;
|
|
6650
|
-
for (const item of items) {
|
|
6651
|
-
if (!item.text) {
|
|
6652
|
-
breakdown.push({ height: 0, lineCount: 0 });
|
|
6653
|
-
continue;
|
|
6654
|
-
}
|
|
6655
|
-
const font = item.font ?? config.secondaryFont;
|
|
6656
|
-
const lh = item.lineHeight ?? config.secondaryLineHeight;
|
|
6657
|
-
const result = measureOne(item.text, maxWidth, lh, font);
|
|
6658
|
-
breakdown.push(result);
|
|
6659
|
-
if (result.height > 0) {
|
|
6660
|
-
totalHeight += (totalHeight > 0 ? gap : 0) + result.height;
|
|
6661
|
-
}
|
|
6662
|
-
}
|
|
6663
|
-
return { height: totalHeight, breakdown };
|
|
6664
|
-
},
|
|
6665
|
-
fitContent(opts2) {
|
|
6666
|
-
tryLoadPretext();
|
|
6667
|
-
const { title, subtitle, location, time, tags, maxWidth, maxHeight } = opts2;
|
|
6668
|
-
const gap = config.contentGap;
|
|
6669
|
-
const titleResult = measureOne(title, maxWidth, config.titleLineHeight, config.titleFont);
|
|
6670
|
-
let used = titleResult.height;
|
|
6671
|
-
const result = {
|
|
6672
|
-
title: true,
|
|
6673
|
-
titleLines: titleResult.lineCount,
|
|
6674
|
-
subtitle: false,
|
|
6675
|
-
location: false,
|
|
6676
|
-
time: false,
|
|
6677
|
-
tags: false,
|
|
6678
|
-
totalHeight: used
|
|
6679
|
-
};
|
|
6680
|
-
if (time) {
|
|
6681
|
-
const h = measureOne(time, maxWidth, config.secondaryLineHeight, config.secondaryFont);
|
|
6682
|
-
if (used + gap + h.height <= maxHeight) {
|
|
6683
|
-
result.time = true;
|
|
6684
|
-
used += gap + h.height;
|
|
6685
|
-
}
|
|
6686
|
-
}
|
|
6687
|
-
if (subtitle) {
|
|
6688
|
-
const h = measureOne(subtitle, maxWidth, config.secondaryLineHeight, config.secondaryFont);
|
|
6689
|
-
if (used + gap + h.height <= maxHeight) {
|
|
6690
|
-
result.subtitle = true;
|
|
6691
|
-
used += gap + h.height;
|
|
6692
|
-
}
|
|
6693
|
-
}
|
|
6694
|
-
if (location) {
|
|
6695
|
-
const h = measureOne(location, maxWidth, config.secondaryLineHeight, config.secondaryFont);
|
|
6696
|
-
if (used + gap + h.height <= maxHeight) {
|
|
6697
|
-
result.location = true;
|
|
6698
|
-
used += gap + h.height;
|
|
6699
|
-
}
|
|
6700
|
-
}
|
|
6701
|
-
if (tags?.length) {
|
|
6702
|
-
const tagText = tags.join(" ");
|
|
6703
|
-
const h = measureOne(tagText, maxWidth, config.secondaryLineHeight, config.tagFont);
|
|
6704
|
-
if (used + gap + h.height <= maxHeight) {
|
|
6705
|
-
result.tags = true;
|
|
6706
|
-
used += gap + h.height;
|
|
6707
|
-
}
|
|
6708
|
-
}
|
|
6709
|
-
result.totalHeight = used;
|
|
6710
|
-
return result;
|
|
6711
|
-
},
|
|
6712
|
-
clear() {
|
|
6713
|
-
cache.clear();
|
|
6714
|
-
if (pretextAvailable && pretext) {
|
|
6715
|
-
pretext.clearCache();
|
|
6716
|
-
}
|
|
6717
|
-
}
|
|
6718
|
-
};
|
|
6719
|
-
}
|
|
6720
|
-
var root_1$7 = /* @__PURE__ */ from_html(`<div class="fs-tick svelte-mrwdy7"><span class="fs-tick-lb svelte-mrwdy7"> </span></div> <div class="fs-tick fs-tick--half svelte-mrwdy7"></div>`, 1);
|
|
6721
|
-
var root_2$7 = /* @__PURE__ */ from_html(`<span class="fs-blocked-label svelte-mrwdy7"> </span>`);
|
|
6722
|
-
var root_3$7 = /* @__PURE__ */ from_html(`<div class="fs-blocked svelte-mrwdy7"><!></div>`);
|
|
6723
|
-
var root_4$7 = /* @__PURE__ */ from_html(`<div class="fs-day-header-custom svelte-mrwdy7"><!></div>`);
|
|
6724
|
-
var root_5$7 = /* @__PURE__ */ from_html(`<div><!> <!> <!></div>`);
|
|
6725
|
-
var root_6$7 = /* @__PURE__ */ from_html(`<div class="fs-now svelte-mrwdy7"><span class="fs-now-tag svelte-mrwdy7"> </span> <div class="fs-now-line svelte-mrwdy7"></div></div>`);
|
|
6726
|
-
var root_7$7 = /* @__PURE__ */ from_html(`<span class="fs-ev-live svelte-mrwdy7" aria-hidden="true"></span>`);
|
|
6727
|
-
var root_8$7 = /* @__PURE__ */ from_html(`<span class="fs-ev-next-badge svelte-mrwdy7" aria-hidden="true"> </span>`);
|
|
6728
|
-
var root_9$5 = /* @__PURE__ */ from_html(`<span class="fs-ev-time svelte-mrwdy7"> </span>`);
|
|
6729
|
-
var root_10$5 = /* @__PURE__ */ from_html(`<span class="fs-ev-sub svelte-mrwdy7"> </span>`);
|
|
6730
|
-
var root_11$5 = /* @__PURE__ */ from_html(`<span class="fs-ev-loc svelte-mrwdy7"> </span>`);
|
|
6731
|
-
var root_12$5 = /* @__PURE__ */ from_html(`<span class="fs-ev-tag svelte-mrwdy7"> </span>`);
|
|
6732
|
-
var root_13$4 = /* @__PURE__ */ from_html(`<span class="fs-ev-tags svelte-mrwdy7"></span>`);
|
|
6733
|
-
var root_14$4 = /* @__PURE__ */ from_html(`<!> <span class="fs-ev-title svelte-mrwdy7"> </span> <!> <!> <!>`, 1);
|
|
6734
|
-
var root_15$4 = /* @__PURE__ */ from_html(`<div class="fs-ev-handle fs-ev-handle--start svelte-mrwdy7" aria-hidden="true"></div> <div class="fs-ev-handle fs-ev-handle--end svelte-mrwdy7" aria-hidden="true"></div>`, 1);
|
|
6735
|
-
var root_16$4 = /* @__PURE__ */ from_html(`<div role="button" tabindex="0"><div class="fs-ev-inner svelte-mrwdy7"><!> <!></div> <!></div>`);
|
|
6736
|
-
var root_17$4 = /* @__PURE__ */ from_html(`<div class="fs-create-ghost svelte-mrwdy7" aria-hidden="true"><span class="fs-create-ghost-time svelte-mrwdy7"> </span></div>`);
|
|
6737
|
-
var root_18$4 = /* @__PURE__ */ from_html(`<span class="fs-ad-span svelte-mrwdy7"> </span>`);
|
|
6738
|
-
var root_19$4 = /* @__PURE__ */ from_html(`<div role="button" tabindex="0"><span class="fs-ad-dot svelte-mrwdy7" aria-hidden="true"></span> <span class="fs-ad-title svelte-mrwdy7"> </span> <!></div>`);
|
|
6739
|
-
var root_20$4 = /* @__PURE__ */ from_html(`<div class="fs-allday svelte-mrwdy7"></div>`);
|
|
6740
|
-
var root_21$4 = /* @__PURE__ */ from_html(`<div role="region"><div role="region"><div class="fs-track svelte-mrwdy7" role="presentation"><!> <!> <!> <!></div></div> <!></div>`);
|
|
6741
|
-
function PlannerDay($$anchor, $$props) {
|
|
6742
|
-
push($$props, true);
|
|
6743
|
-
let height = prop($$props, "height", 3, 520), events = prop($$props, "events", 19, () => []), style = prop($$props, "style", 3, ""), selectedEventId = prop($$props, "selectedEventId", 3, null), readOnly = prop($$props, "readOnly", 3, false);
|
|
6744
|
-
const ctx = useCalendarContext();
|
|
6745
|
-
const L = /* @__PURE__ */ user_derived(() => ctx.labels);
|
|
6746
|
-
const clock = createClock(ctx.timezone);
|
|
6747
|
-
const drag = /* @__PURE__ */ user_derived(() => ctx.drag);
|
|
6748
|
-
const commitDragCtx = /* @__PURE__ */ user_derived(() => ctx.commitDrag);
|
|
6749
|
-
const viewState = /* @__PURE__ */ user_derived(() => ctx.viewState);
|
|
6750
|
-
const loadRangeCtx = /* @__PURE__ */ user_derived(() => ctx.loadRange);
|
|
6751
|
-
const blockedSlots = /* @__PURE__ */ user_derived(() => ctx.blockedSlots);
|
|
6752
|
-
const dayHeaderSnippet = /* @__PURE__ */ user_derived(() => ctx.dayHeaderSnippet);
|
|
6753
|
-
const minDuration = /* @__PURE__ */ user_derived(() => ctx.minDuration);
|
|
6754
|
-
const autoHeight = /* @__PURE__ */ user_derived(() => ctx.autoHeight);
|
|
6755
|
-
const oneventhover = /* @__PURE__ */ user_derived(() => ctx.oneventhover);
|
|
6756
|
-
const disabledSet = /* @__PURE__ */ user_derived(() => ctx.disabledSet);
|
|
6757
|
-
const SNAP_MS = /* @__PURE__ */ user_derived(() => ctx.snapInterval * 6e4);
|
|
6758
|
-
let following = /* @__PURE__ */ state(true);
|
|
6759
|
-
let scrollDragging = /* @__PURE__ */ state(false);
|
|
6760
|
-
let wasDragging = false;
|
|
6761
|
-
let el;
|
|
6762
|
-
let containerW = /* @__PURE__ */ state(0);
|
|
6763
|
-
let containerH = /* @__PURE__ */ state(520);
|
|
6764
|
-
let dragStartX = 0;
|
|
6765
|
-
let dragScrollStart = 0;
|
|
6766
|
-
let rafId = 0;
|
|
6767
|
-
const BUFFER_DAYS = 7;
|
|
6768
|
-
const EDGE_DAYS = 2;
|
|
6769
|
-
const SHIFT_DAYS = 5;
|
|
6770
|
-
const _initMs = untrack(() => sod($$props.focusDate?.getTime() ?? Date.now()));
|
|
6771
|
-
let internalCenterMs = /* @__PURE__ */ state(proxy(_initMs));
|
|
6772
|
-
let lastExternalMs = _initMs;
|
|
6773
|
-
let rebasing = false;
|
|
6774
|
-
let visibleDayMs = /* @__PURE__ */ state(proxy(_initMs));
|
|
6775
|
-
const startHour = /* @__PURE__ */ user_derived(() => $$props.visibleHours?.[0] ?? 0);
|
|
6776
|
-
const endHour = /* @__PURE__ */ user_derived(() => $$props.visibleHours?.[1] ?? 24);
|
|
6777
|
-
const hourCount = /* @__PURE__ */ user_derived(() => Math.max(1, get(endHour) - get(startHour)));
|
|
6778
|
-
const DAY_GAP = 2;
|
|
6779
|
-
const count = 1 + 2 * BUFFER_DAYS;
|
|
6780
|
-
const origin = /* @__PURE__ */ user_derived(() => get(internalCenterMs) - BUFFER_DAYS * DAY_MS);
|
|
6781
|
-
user_effect(() => {
|
|
6782
|
-
if (!get(loadRangeCtx)) return;
|
|
6783
|
-
const rangeStart = new Date(get(internalCenterMs) - BUFFER_DAYS * DAY_MS);
|
|
6784
|
-
const rangeEnd = new Date(get(internalCenterMs) + (BUFFER_DAYS + 1) * DAY_MS);
|
|
6785
|
-
get(loadRangeCtx).set({ start: rangeStart, end: rangeEnd });
|
|
6786
|
-
return () => get(loadRangeCtx).set(null);
|
|
6787
|
-
});
|
|
6788
|
-
const MIN_HOUR_W = 60;
|
|
6789
|
-
const hourWidth = /* @__PURE__ */ user_derived(() => get(containerW) > 0 ? Math.max(MIN_HOUR_W, get(containerW) / get(hourCount)) : 110);
|
|
6790
|
-
const dayWidth = /* @__PURE__ */ user_derived(() => get(hourCount) * get(hourWidth));
|
|
6791
|
-
const totalWidth = /* @__PURE__ */ user_derived(() => count * (get(dayWidth) + DAY_GAP));
|
|
6792
|
-
const days = /* @__PURE__ */ user_derived(() => {
|
|
6793
|
-
const result = [];
|
|
6794
|
-
for (let i = 0; i < count; i++) {
|
|
6795
|
-
const ms = get(origin) + i * DAY_MS;
|
|
6796
|
-
result.push({
|
|
6797
|
-
ms,
|
|
6798
|
-
today: ms === clock.today,
|
|
6799
|
-
past: ms < clock.today,
|
|
6800
|
-
x: i * (get(dayWidth) + DAY_GAP)
|
|
6801
|
-
});
|
|
6802
|
-
}
|
|
6803
|
-
return result;
|
|
6804
|
-
});
|
|
6805
|
-
function timeToPx(ms) {
|
|
6806
|
-
const elapsed = ms - get(origin);
|
|
6807
|
-
const dayIndex = Math.floor(elapsed / DAY_MS);
|
|
6808
|
-
const hourInDay = (elapsed - dayIndex * DAY_MS) / HOUR_MS;
|
|
6809
|
-
const clamped = Math.min(Math.max(hourInDay, get(startHour)), get(endHour));
|
|
6810
|
-
return dayIndex * (get(dayWidth) + DAY_GAP) + (clamped - get(startHour)) * get(hourWidth);
|
|
6811
|
-
}
|
|
6812
|
-
function pxToTime(px) {
|
|
6813
|
-
const dayStride = get(dayWidth) + DAY_GAP;
|
|
6814
|
-
const dayIndex = Math.max(0, Math.min(count - 1, Math.floor(px / dayStride)));
|
|
6815
|
-
const localPx = px - dayIndex * dayStride;
|
|
6816
|
-
const hour = get(startHour) + localPx / get(hourWidth);
|
|
6817
|
-
return get(origin) + dayIndex * DAY_MS + hour * HOUR_MS;
|
|
6818
|
-
}
|
|
6819
|
-
const nowPx = /* @__PURE__ */ user_derived(() => timeToPx(clock.tick));
|
|
6820
|
-
const nowHour = /* @__PURE__ */ user_derived(() => (clock.tick - clock.today) / HOUR_MS);
|
|
6821
|
-
const nowInBand = /* @__PURE__ */ user_derived(() => get(nowHour) >= get(startHour) && get(nowHour) < get(endHour));
|
|
6822
|
-
const timedEvents = /* @__PURE__ */ user_derived(() => events().filter((ev) => !isAllDay(ev) && !isMultiDay(ev)));
|
|
6823
|
-
const allDayEvents = /* @__PURE__ */ user_derived(() => {
|
|
6824
|
-
const segs = [];
|
|
6825
|
-
for (const ev of events()) {
|
|
6826
|
-
if (!isAllDay(ev) && !isMultiDay(ev)) continue;
|
|
6827
|
-
const seg = segmentForDay(ev, get(visibleDayMs));
|
|
6828
|
-
if (seg) segs.push(seg);
|
|
6829
|
-
}
|
|
6830
|
-
return segs;
|
|
6831
|
-
});
|
|
6832
|
-
const CONTENT_TOP = 56;
|
|
6833
|
-
const ALLDAY_H = 24;
|
|
6834
|
-
const contentTop = /* @__PURE__ */ user_derived(() => CONTENT_TOP + (get(allDayEvents).length > 0 ? ALLDAY_H + 4 : 0));
|
|
6835
|
-
const EVENT_GAP = 5;
|
|
6836
|
-
const MIN_EVENT_H = 32;
|
|
6837
|
-
const measure = createTextMeasure({
|
|
6838
|
-
titleFont: "600 13px system-ui, sans-serif",
|
|
6839
|
-
secondaryFont: "400 10px system-ui, sans-serif",
|
|
6840
|
-
tagFont: "500 8px system-ui, sans-serif",
|
|
6841
|
-
titleLineHeight: 16,
|
|
6842
|
-
secondaryLineHeight: 13,
|
|
6843
|
-
contentGap: 6
|
|
6844
|
-
});
|
|
6845
|
-
const nowInfo = /* @__PURE__ */ user_derived(() => {
|
|
6846
|
-
const now = clock.tick;
|
|
6847
|
-
const current = /* @__PURE__ */ new Set();
|
|
6848
|
-
const todayStart = clock.today;
|
|
6849
|
-
const todayEnd = todayStart + DAY_MS;
|
|
6850
|
-
let nextId = null;
|
|
6851
|
-
let nextStart = Infinity;
|
|
6852
|
-
for (const ev of get(timedEvents)) {
|
|
6853
|
-
const s = ev.start.getTime();
|
|
6854
|
-
const e = ev.end.getTime();
|
|
6855
|
-
if (s <= now && e > now) current.add(ev.id);
|
|
6856
|
-
else if (s >= todayStart && s < todayEnd && s > now && s < nextStart) {
|
|
6857
|
-
nextStart = s;
|
|
6858
|
-
nextId = ev.id;
|
|
6859
|
-
}
|
|
6860
|
-
}
|
|
6861
|
-
return { current, nextId };
|
|
6862
|
-
});
|
|
6863
|
-
const positionedEvents = /* @__PURE__ */ user_derived(() => {
|
|
6864
|
-
const dragP = get(drag)?.active && (get(drag).mode === "move" || get(drag).mode === "resize-start" || get(drag).mode === "resize-end") ? get(drag).payload : null;
|
|
6865
|
-
const staticEvents = [];
|
|
6866
|
-
let draggedEv = null;
|
|
6867
|
-
for (const ev of get(timedEvents)) {
|
|
6868
|
-
if (dragP?.eventId === ev.id) draggedEv = ev;
|
|
6869
|
-
else staticEvents.push(ev);
|
|
6870
|
-
}
|
|
6871
|
-
const sorted = [...staticEvents].sort((a, b) => a.start.getTime() - b.start.getTime());
|
|
6872
|
-
const infos = sorted.map((ev) => {
|
|
6873
|
-
const s = ev.start.getTime();
|
|
6874
|
-
const e = ev.end.getTime();
|
|
6875
|
-
const x = timeToPx(s);
|
|
6876
|
-
const xEnd = timeToPx(e);
|
|
6877
|
-
return {
|
|
6878
|
-
ev,
|
|
6879
|
-
x,
|
|
6880
|
-
width: Math.max(xEnd - x, 28),
|
|
6881
|
-
row: 0,
|
|
6882
|
-
groupMaxRow: 1,
|
|
6883
|
-
isDragged: false,
|
|
6884
|
-
startMs: s,
|
|
6885
|
-
endMs: e,
|
|
6886
|
-
clippedWidth: xEnd - x
|
|
6887
|
-
};
|
|
6888
|
-
}).filter((info) => info.clippedWidth > 0);
|
|
6889
|
-
const par = infos.map((_, i) => i);
|
|
6890
|
-
function find(i) {
|
|
6891
|
-
while (par[i] !== i) {
|
|
6892
|
-
par[i] = par[par[i]];
|
|
6893
|
-
i = par[i];
|
|
6894
|
-
}
|
|
6895
|
-
return i;
|
|
6896
|
-
}
|
|
6897
|
-
for (let i = 0; i < infos.length; i++) {
|
|
6898
|
-
for (let j = i + 1; j < infos.length; j++) {
|
|
6899
|
-
if (infos[j].startMs < infos[i].endMs) par[find(i)] = find(j);
|
|
6900
|
-
else break;
|
|
6901
|
-
}
|
|
6902
|
-
}
|
|
6903
|
-
const groups = /* @__PURE__ */ new Map();
|
|
6904
|
-
for (let i = 0; i < infos.length; i++) {
|
|
6905
|
-
const root2 = find(i);
|
|
6906
|
-
if (!groups.has(root2)) groups.set(root2, []);
|
|
6907
|
-
groups.get(root2).push(i);
|
|
6908
|
-
}
|
|
6909
|
-
for (const [, indices] of groups) {
|
|
6910
|
-
const rows = [];
|
|
6911
|
-
for (const idx of indices) {
|
|
6912
|
-
const inf = infos[idx];
|
|
6913
|
-
let row = 0;
|
|
6914
|
-
for (let r = 0; r < rows.length; r++) {
|
|
6915
|
-
if (rows[r] <= inf.startMs) {
|
|
6916
|
-
row = r;
|
|
6917
|
-
rows[r] = inf.endMs;
|
|
6918
|
-
break;
|
|
6919
|
-
}
|
|
6920
|
-
row = r + 1;
|
|
6921
|
-
}
|
|
6922
|
-
if (row >= rows.length) rows.push(inf.endMs);
|
|
6923
|
-
infos[idx].row = row;
|
|
6924
|
-
}
|
|
6925
|
-
for (const idx of indices) infos[idx].groupMaxRow = rows.length;
|
|
6926
|
-
}
|
|
6927
|
-
const availH = get(containerH) - get(contentTop) - 8;
|
|
6928
|
-
const result = infos.map(({ startMs: _s, endMs: _e, clippedWidth: _c, ...info }) => {
|
|
6929
|
-
const laneH = Math.max(MIN_EVENT_H, availH / info.groupMaxRow - EVENT_GAP);
|
|
6930
|
-
const topPx = get(contentTop) + info.row * (availH / info.groupMaxRow);
|
|
6931
|
-
const fit = measure.fitContent({
|
|
6932
|
-
title: info.ev.title,
|
|
6933
|
-
subtitle: info.ev.subtitle,
|
|
6934
|
-
location: info.ev.location,
|
|
6935
|
-
time: `${fmtTime$1(info.ev.start, $$props.locale)} – ${fmtTime$1(info.ev.end, $$props.locale)}`,
|
|
6936
|
-
tags: info.ev.tags,
|
|
6937
|
-
maxWidth: laneH - 16,
|
|
6938
|
-
maxHeight: info.width - 16
|
|
6939
|
-
});
|
|
6940
|
-
return { ...info, topPx, heightPx: laneH, fit };
|
|
6941
|
-
});
|
|
6942
|
-
if (draggedEv && dragP) {
|
|
6943
|
-
const x = timeToPx(dragP.start.getTime());
|
|
6944
|
-
const xEnd = timeToPx(dragP.end.getTime());
|
|
6945
|
-
const dragH = Math.max(MIN_EVENT_H, availH - EVENT_GAP);
|
|
6946
|
-
const dragW = Math.max(xEnd - x, 28);
|
|
6947
|
-
result.push({
|
|
6948
|
-
ev: draggedEv,
|
|
6949
|
-
x,
|
|
6950
|
-
width: dragW,
|
|
6951
|
-
row: 0,
|
|
6952
|
-
groupMaxRow: 1,
|
|
6953
|
-
topPx: get(contentTop),
|
|
6954
|
-
heightPx: dragH,
|
|
6955
|
-
isDragged: true,
|
|
6956
|
-
fit: measure.fitContent({
|
|
6957
|
-
title: draggedEv.title,
|
|
6958
|
-
subtitle: draggedEv.subtitle,
|
|
6959
|
-
location: draggedEv.location,
|
|
6960
|
-
tags: draggedEv.tags,
|
|
6961
|
-
maxWidth: dragH - 16,
|
|
6962
|
-
maxHeight: dragW - 16
|
|
6963
|
-
})
|
|
6964
|
-
});
|
|
6965
|
-
}
|
|
6966
|
-
return result;
|
|
6967
|
-
});
|
|
6968
|
-
user_effect(() => {
|
|
6969
|
-
const ext = $$props.focusDate ? sod($$props.focusDate.getTime()) : clock.today;
|
|
6970
|
-
if (ext !== lastExternalMs && !rebasing) {
|
|
6971
|
-
lastExternalMs = ext;
|
|
6972
|
-
set(internalCenterMs, ext, true);
|
|
6973
|
-
set(visibleDayMs, ext, true);
|
|
6974
|
-
set(following, ext === clock.today);
|
|
6975
|
-
tick().then(() => {
|
|
6976
|
-
if (el) {
|
|
6977
|
-
const focusX = BUFFER_DAYS * (get(dayWidth) + DAY_GAP);
|
|
6978
|
-
el.scrollLeft = focusX + get(dayWidth) / 2 - el.clientWidth / 2;
|
|
6979
|
-
}
|
|
6980
|
-
});
|
|
6981
|
-
}
|
|
6982
|
-
});
|
|
6983
|
-
function checkEdges() {
|
|
6984
|
-
if (!el || !get(viewState) || rebasing) return;
|
|
6985
|
-
const stride = get(dayWidth) + DAY_GAP;
|
|
6986
|
-
const threshold = stride * EDGE_DAYS;
|
|
6987
|
-
const maxScroll = el.scrollWidth - el.clientWidth;
|
|
6988
|
-
if (el.scrollLeft < threshold) {
|
|
6989
|
-
rebase(-1);
|
|
6990
|
-
} else if (maxScroll > 0 && maxScroll - el.scrollLeft < threshold) {
|
|
6991
|
-
rebase(1);
|
|
6992
|
-
}
|
|
6993
|
-
}
|
|
6994
|
-
function rebase(direction) {
|
|
6995
|
-
if (rebasing) return;
|
|
6996
|
-
rebasing = true;
|
|
6997
|
-
const shift = SHIFT_DAYS * direction;
|
|
6998
|
-
const stride = get(dayWidth) + DAY_GAP;
|
|
6999
|
-
const adj = -shift * stride;
|
|
7000
|
-
if (el) el.scrollLeft += adj;
|
|
7001
|
-
dragScrollStart += adj;
|
|
7002
|
-
set(internalCenterMs, get(internalCenterMs) + shift * DAY_MS);
|
|
7003
|
-
lastExternalMs = get(internalCenterMs);
|
|
7004
|
-
get(viewState)?.setFocusDate(new Date(get(internalCenterMs)));
|
|
7005
|
-
tick().then(() => {
|
|
7006
|
-
rebasing = false;
|
|
7007
|
-
});
|
|
7008
|
-
}
|
|
7009
|
-
function syncFocusFromScroll() {
|
|
7010
|
-
if (!el || !get(viewState) || get(following) || rebasing) return;
|
|
7011
|
-
const centerX = el.scrollLeft + el.clientWidth / 2;
|
|
7012
|
-
const centerDayMs = sod(pxToTime(centerX));
|
|
7013
|
-
set(visibleDayMs, centerDayMs, true);
|
|
7014
|
-
if (centerDayMs !== lastExternalMs) {
|
|
7015
|
-
lastExternalMs = centerDayMs;
|
|
7016
|
-
get(viewState).setFocusDate(new Date(centerDayMs));
|
|
7017
|
-
}
|
|
7018
|
-
}
|
|
7019
|
-
let scrollRaf = 0;
|
|
7020
|
-
function handleScroll() {
|
|
7021
|
-
if (get(following) || rebasing || scrollRaf) return;
|
|
7022
|
-
scrollRaf = requestAnimationFrame(() => {
|
|
7023
|
-
scrollRaf = 0;
|
|
7024
|
-
if (!el || get(following) || rebasing) return;
|
|
7025
|
-
checkEdges();
|
|
7026
|
-
syncFocusFromScroll();
|
|
7027
|
-
});
|
|
7028
|
-
}
|
|
7029
|
-
user_effect(() => {
|
|
7030
|
-
if (!get(following)) return;
|
|
7031
|
-
function frame() {
|
|
7032
|
-
if (el && !get(scrollDragging)) {
|
|
7033
|
-
if (get(internalCenterMs) !== clock.today) {
|
|
7034
|
-
set(internalCenterMs, clock.today, true);
|
|
7035
|
-
lastExternalMs = clock.today;
|
|
7036
|
-
get(viewState)?.goToday();
|
|
7037
|
-
}
|
|
7038
|
-
set(visibleDayMs, clock.today, true);
|
|
7039
|
-
const todayD = get(days).find((d) => d.today);
|
|
7040
|
-
if (todayD) {
|
|
7041
|
-
el.scrollLeft = todayD.x + get(dayWidth) / 2 - el.clientWidth / 2;
|
|
7042
|
-
}
|
|
7043
|
-
}
|
|
7044
|
-
rafId = requestAnimationFrame(frame);
|
|
7045
|
-
}
|
|
7046
|
-
rafId = requestAnimationFrame(frame);
|
|
7047
|
-
return () => cancelAnimationFrame(rafId);
|
|
7048
|
-
});
|
|
7049
|
-
onMount(() => {
|
|
7050
|
-
const ro = new ResizeObserver((entries) => {
|
|
7051
|
-
for (const entry of entries) {
|
|
7052
|
-
set(containerW, entry.contentRect.width, true);
|
|
7053
|
-
set(containerH, entry.contentRect.height, true);
|
|
7054
|
-
}
|
|
7055
|
-
});
|
|
7056
|
-
ro.observe(el);
|
|
7057
|
-
return () => {
|
|
7058
|
-
cancelAnimationFrame(scrollRaf);
|
|
7059
|
-
ro.disconnect();
|
|
7060
|
-
};
|
|
7061
|
-
});
|
|
7062
|
-
const SCROLL_THRESHOLD = 3;
|
|
7063
|
-
function onPointerDown(e) {
|
|
7064
|
-
if (e.button !== 0) return;
|
|
7065
|
-
if (e.target.closest(".fs-event")) return;
|
|
7066
|
-
if (readOnly()) {
|
|
7067
|
-
dragStartX = e.clientX;
|
|
7068
|
-
dragScrollStart = el.scrollLeft;
|
|
7069
|
-
window.addEventListener("pointermove", onScrollMove);
|
|
7070
|
-
window.addEventListener("pointerup", onScrollUp, { once: true });
|
|
7071
|
-
window.addEventListener("pointercancel", onScrollUp, { once: true });
|
|
7072
|
-
return;
|
|
7073
|
-
}
|
|
7074
|
-
onCreatePointerDown(e);
|
|
7075
|
-
}
|
|
7076
|
-
function onScrollMove(e) {
|
|
7077
|
-
const dx = e.clientX - dragStartX;
|
|
7078
|
-
if (!get(scrollDragging) && Math.abs(dx) >= SCROLL_THRESHOLD) {
|
|
7079
|
-
set(scrollDragging, true);
|
|
7080
|
-
wasDragging = true;
|
|
7081
|
-
set(following, false);
|
|
7082
|
-
}
|
|
7083
|
-
if (get(scrollDragging)) el.scrollLeft = dragScrollStart - dx;
|
|
7084
|
-
}
|
|
7085
|
-
function onScrollUp() {
|
|
7086
|
-
window.removeEventListener("pointermove", onScrollMove);
|
|
7087
|
-
window.removeEventListener("pointerup", onScrollUp);
|
|
7088
|
-
window.removeEventListener("pointercancel", onScrollUp);
|
|
7089
|
-
set(scrollDragging, false);
|
|
7090
|
-
}
|
|
7091
|
-
function isBlockedAt(dayMs, hour) {
|
|
7092
|
-
if (!get(blockedSlots)?.length) return false;
|
|
7093
|
-
const jsDay = new Date(dayMs).getDay();
|
|
7094
|
-
const isoDay = jsDay === 0 ? 7 : jsDay;
|
|
7095
|
-
return get(blockedSlots).some((slot) => {
|
|
7096
|
-
if (slot.day && slot.day !== isoDay) return false;
|
|
7097
|
-
return hour >= slot.start && hour < slot.end;
|
|
7098
|
-
});
|
|
7099
|
-
}
|
|
7100
|
-
function handleTrackClick(e) {
|
|
7101
|
-
if (wasDragging) {
|
|
7102
|
-
wasDragging = false;
|
|
7103
|
-
return;
|
|
7104
|
-
}
|
|
7105
|
-
if (!$$props.oneventcreate || readOnly()) return;
|
|
7106
|
-
if (e.target.closest(".fs-event")) return;
|
|
7107
|
-
const rect = e.currentTarget.getBoundingClientRect();
|
|
7108
|
-
const clickX = e.clientX - rect.left + el.scrollLeft;
|
|
7109
|
-
for (const d of get(days)) {
|
|
7110
|
-
if (clickX >= d.x && clickX < d.x + get(dayWidth)) {
|
|
7111
|
-
if (get(disabledSet).has(d.ms)) return;
|
|
7112
|
-
const frac = (clickX - d.x) / get(dayWidth);
|
|
7113
|
-
const clickHour = get(startHour) + frac * get(hourCount);
|
|
7114
|
-
if (isBlockedAt(d.ms, clickHour)) return;
|
|
7115
|
-
const hour = Math.floor(clickHour);
|
|
7116
|
-
const durMin = get(minDuration) ? Math.max(60, get(minDuration)) : 60;
|
|
7117
|
-
const start = new Date(d.ms + hour * HOUR_MS);
|
|
7118
|
-
const end = new Date(start.getTime() + durMin * 6e4);
|
|
7119
|
-
$$props.oneventcreate({ start, end });
|
|
7120
|
-
return;
|
|
7121
|
-
}
|
|
7122
|
-
}
|
|
7123
|
-
}
|
|
7124
|
-
const CREATE_THRESHOLD = 4;
|
|
7125
|
-
let createStartX = 0;
|
|
7126
|
-
let createAnchorMs = 0;
|
|
7127
|
-
let createStarted = false;
|
|
7128
|
-
function trackX(e) {
|
|
7129
|
-
return e.clientX - el.getBoundingClientRect().left + el.scrollLeft;
|
|
7130
|
-
}
|
|
7131
|
-
function onCreatePointerDown(e) {
|
|
7132
|
-
if (!get(drag) || !$$props.oneventcreate) return;
|
|
7133
|
-
createStartX = e.clientX;
|
|
7134
|
-
createAnchorMs = pxToTime(trackX(e));
|
|
7135
|
-
createStarted = false;
|
|
7136
|
-
window.addEventListener("pointermove", onCreateMove);
|
|
7137
|
-
window.addEventListener("pointerup", onCreateUp, { once: true });
|
|
7138
|
-
window.addEventListener("pointercancel", onCreateCancel, { once: true });
|
|
7139
|
-
}
|
|
7140
|
-
function onCreateMove(e) {
|
|
7141
|
-
if (!get(drag)) return;
|
|
7142
|
-
if (!createStarted) {
|
|
7143
|
-
if (Math.abs(e.clientX - createStartX) < CREATE_THRESHOLD) return;
|
|
7144
|
-
if (get(disabledSet).has(sod(createAnchorMs))) return;
|
|
7145
|
-
createStarted = true;
|
|
7146
|
-
wasDragging = true;
|
|
7147
|
-
createAnchorMs = Math.floor(createAnchorMs / get(SNAP_MS)) * get(SNAP_MS);
|
|
7148
|
-
get(drag).beginCreate(new Date(createAnchorMs), new Date(createAnchorMs + get(SNAP_MS)));
|
|
7149
|
-
}
|
|
7150
|
-
const snapped = Math.round(pxToTime(trackX(e)) / get(SNAP_MS)) * get(SNAP_MS);
|
|
7151
|
-
get(drag).updatePointer(new Date(Math.min(createAnchorMs, snapped)), new Date(Math.max(createAnchorMs + get(SNAP_MS), snapped)));
|
|
7152
|
-
}
|
|
7153
|
-
function cleanupCreateDrag() {
|
|
7154
|
-
window.removeEventListener("pointermove", onCreateMove);
|
|
7155
|
-
window.removeEventListener("pointerup", onCreateUp);
|
|
7156
|
-
window.removeEventListener("pointercancel", onCreateCancel);
|
|
7157
|
-
createStarted = false;
|
|
7158
|
-
}
|
|
7159
|
-
function onCreateUp() {
|
|
7160
|
-
if (get(drag) && createStarted) {
|
|
7161
|
-
get(commitDragCtx)?.();
|
|
7162
|
-
setTimeout(
|
|
7163
|
-
() => {
|
|
7164
|
-
wasDragging = false;
|
|
7165
|
-
},
|
|
7166
|
-
0
|
|
7167
|
-
);
|
|
7168
|
-
}
|
|
7169
|
-
cleanupCreateDrag();
|
|
7170
|
-
}
|
|
7171
|
-
function onCreateCancel() {
|
|
7172
|
-
if (get(drag) && createStarted) {
|
|
7173
|
-
get(drag).cancel();
|
|
7174
|
-
setTimeout(
|
|
7175
|
-
() => {
|
|
7176
|
-
wasDragging = false;
|
|
7177
|
-
},
|
|
7178
|
-
0
|
|
7179
|
-
);
|
|
7180
|
-
}
|
|
7181
|
-
cleanupCreateDrag();
|
|
7182
|
-
}
|
|
7183
|
-
const DRAG_THRESHOLD = 5;
|
|
7184
|
-
let evDragStartX = 0;
|
|
7185
|
-
let evDragOriginPx = 0;
|
|
7186
|
-
let evDragStarted = false;
|
|
7187
|
-
let evDragging = /* @__PURE__ */ state(false);
|
|
7188
|
-
let evDragId = /* @__PURE__ */ state(null);
|
|
7189
|
-
let evDragEvent = null;
|
|
7190
|
-
function onEventPointerDown(e, ev) {
|
|
7191
|
-
if (e.button !== 0 || !get(drag) || readOnly() || ev.data?.readOnly) return;
|
|
7192
|
-
e.stopPropagation();
|
|
7193
|
-
evDragStartX = e.clientX;
|
|
7194
|
-
evDragOriginPx = timeToPx(ev.start.getTime());
|
|
7195
|
-
evDragStarted = false;
|
|
7196
|
-
set(evDragId, ev.id, true);
|
|
7197
|
-
evDragEvent = ev;
|
|
7198
|
-
window.addEventListener("pointermove", onEvMove);
|
|
7199
|
-
window.addEventListener("pointerup", onEvUp, { once: true });
|
|
7200
|
-
window.addEventListener("pointercancel", onEvCancel, { once: true });
|
|
7201
|
-
}
|
|
7202
|
-
function onEvMove(e) {
|
|
7203
|
-
const ev = evDragEvent;
|
|
7204
|
-
if (!get(drag) || !ev || get(evDragId) !== ev.id) return;
|
|
7205
|
-
const dx = e.clientX - evDragStartX;
|
|
7206
|
-
if (!evDragStarted && Math.abs(dx) < DRAG_THRESHOLD) return;
|
|
7207
|
-
if (!evDragStarted) {
|
|
7208
|
-
evDragStarted = true;
|
|
7209
|
-
set(evDragging, true);
|
|
7210
|
-
get(drag).beginMove(ev.id, ev.start, ev.end);
|
|
7211
|
-
}
|
|
7212
|
-
const duration2 = ev.end.getTime() - ev.start.getTime();
|
|
7213
|
-
const raw = pxToTime(evDragOriginPx + dx);
|
|
7214
|
-
const snapped = Math.round(raw / get(SNAP_MS)) * get(SNAP_MS);
|
|
7215
|
-
get(drag).updatePointer(new Date(snapped), new Date(snapped + duration2));
|
|
7216
|
-
}
|
|
7217
|
-
function cleanupEvDrag() {
|
|
7218
|
-
window.removeEventListener("pointermove", onEvMove);
|
|
7219
|
-
window.removeEventListener("pointerup", onEvUp);
|
|
7220
|
-
window.removeEventListener("pointercancel", onEvCancel);
|
|
7221
|
-
evDragStarted = false;
|
|
7222
|
-
set(evDragging, false);
|
|
7223
|
-
set(evDragId, null);
|
|
7224
|
-
evDragEvent = null;
|
|
7225
|
-
}
|
|
7226
|
-
function onEvUp() {
|
|
7227
|
-
if (!get(drag)) {
|
|
7228
|
-
cleanupEvDrag();
|
|
7229
|
-
return;
|
|
7230
|
-
}
|
|
7231
|
-
if (!evDragStarted && evDragEvent) $$props.oneventclick?.(evDragEvent);
|
|
7232
|
-
else if (evDragStarted) get(commitDragCtx)?.();
|
|
7233
|
-
cleanupEvDrag();
|
|
7234
|
-
}
|
|
7235
|
-
function onEvCancel() {
|
|
7236
|
-
if (get(drag) && evDragStarted) get(drag).cancel();
|
|
7237
|
-
cleanupEvDrag();
|
|
7238
|
-
}
|
|
7239
|
-
let rsStartX = 0;
|
|
7240
|
-
let rsStarted = false;
|
|
7241
|
-
let rsEdge = "end";
|
|
7242
|
-
let rsEvent = null;
|
|
7243
|
-
function onResizePointerDown(e, ev, edge) {
|
|
7244
|
-
if (e.button !== 0 || !get(drag) || readOnly() || ev.data?.readOnly) return;
|
|
7245
|
-
e.stopPropagation();
|
|
7246
|
-
rsStartX = e.clientX;
|
|
7247
|
-
rsStarted = false;
|
|
7248
|
-
rsEdge = edge;
|
|
7249
|
-
rsEvent = ev;
|
|
7250
|
-
window.addEventListener("pointermove", onResizeMove);
|
|
7251
|
-
window.addEventListener("pointerup", onResizeUp, { once: true });
|
|
7252
|
-
window.addEventListener("pointercancel", onResizeCancel, { once: true });
|
|
7253
|
-
}
|
|
7254
|
-
function onResizeMove(e) {
|
|
7255
|
-
const ev = rsEvent;
|
|
7256
|
-
if (!get(drag) || !ev) return;
|
|
7257
|
-
if (!rsStarted) {
|
|
7258
|
-
if (Math.abs(e.clientX - rsStartX) < CREATE_THRESHOLD) return;
|
|
7259
|
-
rsStarted = true;
|
|
7260
|
-
get(drag).beginResize(ev.id, rsEdge, ev.start, ev.end);
|
|
7261
|
-
}
|
|
7262
|
-
const snapped = Math.round(pxToTime(trackX(e)) / get(SNAP_MS)) * get(SNAP_MS);
|
|
7263
|
-
if (rsEdge === "end") {
|
|
7264
|
-
const end = Math.max(snapped, ev.start.getTime() + get(SNAP_MS));
|
|
7265
|
-
get(drag).updatePointer(ev.start, new Date(end));
|
|
7266
|
-
} else {
|
|
7267
|
-
const start = Math.min(snapped, ev.end.getTime() - get(SNAP_MS));
|
|
7268
|
-
get(drag).updatePointer(new Date(start), ev.end);
|
|
7269
|
-
}
|
|
7270
|
-
}
|
|
7271
|
-
function cleanupResize() {
|
|
7272
|
-
window.removeEventListener("pointermove", onResizeMove);
|
|
7273
|
-
window.removeEventListener("pointerup", onResizeUp);
|
|
7274
|
-
window.removeEventListener("pointercancel", onResizeCancel);
|
|
7275
|
-
rsStarted = false;
|
|
7276
|
-
rsEvent = null;
|
|
7277
|
-
}
|
|
7278
|
-
function onResizeUp() {
|
|
7279
|
-
if (get(drag) && rsStarted) {
|
|
7280
|
-
wasDragging = true;
|
|
7281
|
-
get(commitDragCtx)?.();
|
|
7282
|
-
setTimeout(
|
|
7283
|
-
() => {
|
|
7284
|
-
wasDragging = false;
|
|
7285
|
-
},
|
|
7286
|
-
0
|
|
7287
|
-
);
|
|
7288
|
-
} else if (rsEvent && !rsStarted) {
|
|
7289
|
-
$$props.oneventclick?.(rsEvent);
|
|
7290
|
-
}
|
|
7291
|
-
cleanupResize();
|
|
7292
|
-
}
|
|
7293
|
-
function onResizeCancel() {
|
|
7294
|
-
if (get(drag) && rsStarted) get(drag).cancel();
|
|
7295
|
-
cleanupResize();
|
|
7296
|
-
}
|
|
7297
|
-
function onWindowKeydown(e) {
|
|
7298
|
-
if (e.key !== "Escape" || !get(drag)?.active) return;
|
|
7299
|
-
get(drag).cancel();
|
|
7300
|
-
cleanupCreateDrag();
|
|
7301
|
-
cleanupEvDrag();
|
|
7302
|
-
cleanupResize();
|
|
7303
|
-
wasDragging = true;
|
|
7304
|
-
window.addEventListener(
|
|
7305
|
-
"pointerup",
|
|
7306
|
-
() => setTimeout(
|
|
7307
|
-
() => {
|
|
7308
|
-
wasDragging = false;
|
|
7309
|
-
},
|
|
7310
|
-
0
|
|
7311
|
-
),
|
|
7312
|
-
{ once: true }
|
|
7313
|
-
);
|
|
7314
|
-
}
|
|
7315
|
-
var div = root_21$4();
|
|
7316
|
-
event("keydown", $window, onWindowKeydown);
|
|
7317
|
-
let classes;
|
|
7318
|
-
let styles;
|
|
7319
|
-
var div_1 = child(div);
|
|
7320
|
-
let classes_1;
|
|
7321
|
-
var div_2 = child(div_1);
|
|
7322
|
-
let styles_1;
|
|
7323
|
-
var node = child(div_2);
|
|
7324
|
-
each(node, 17, () => get(days), (d) => d.ms, ($$anchor2, d) => {
|
|
7325
|
-
var div_3 = root_5$7();
|
|
7326
|
-
let classes_2;
|
|
7327
|
-
let styles_2;
|
|
7328
|
-
var node_1 = child(div_3);
|
|
7329
|
-
each(node_1, 17, () => ({ length: get(hourCount) }), index, ($$anchor3, _, h) => {
|
|
7330
|
-
const hour = /* @__PURE__ */ user_derived(() => get(startHour) + h);
|
|
7331
|
-
const x = /* @__PURE__ */ user_derived(() => h * get(hourWidth));
|
|
7332
|
-
var fragment = root_1$7();
|
|
7333
|
-
var div_4 = first_child(fragment);
|
|
7334
|
-
let styles_3;
|
|
7335
|
-
var span = child(div_4);
|
|
7336
|
-
var text2 = child(span, true);
|
|
7337
|
-
reset(span);
|
|
7338
|
-
reset(div_4);
|
|
7339
|
-
var div_5 = sibling(div_4, 2);
|
|
7340
|
-
let styles_4;
|
|
7341
|
-
template_effect(
|
|
7342
|
-
($0) => {
|
|
7343
|
-
styles_3 = set_style(div_4, "", styles_3, { left: `${get(x) ?? ""}px` });
|
|
7344
|
-
set_text(text2, $0);
|
|
7345
|
-
styles_4 = set_style(div_5, "", styles_4, { left: `${get(x) + get(hourWidth) * 0.5}px` });
|
|
7346
|
-
},
|
|
7347
|
-
[() => fmtH(get(hour), $$props.locale)]
|
|
7348
|
-
);
|
|
7349
|
-
append($$anchor3, fragment);
|
|
7350
|
-
});
|
|
7351
|
-
var node_2 = sibling(node_1, 2);
|
|
7352
|
-
{
|
|
7353
|
-
var consequent_3 = ($$anchor3) => {
|
|
7354
|
-
const jsDay = /* @__PURE__ */ user_derived(() => new Date(get(d).ms).getDay());
|
|
7355
|
-
const isoDay = /* @__PURE__ */ user_derived(() => get(jsDay) === 0 ? 7 : get(jsDay));
|
|
7356
|
-
var fragment_1 = comment();
|
|
7357
|
-
var node_3 = first_child(fragment_1);
|
|
7358
|
-
each(node_3, 17, () => get(blockedSlots), index, ($$anchor4, slot) => {
|
|
7359
|
-
var fragment_2 = comment();
|
|
7360
|
-
var node_4 = first_child(fragment_2);
|
|
7361
|
-
{
|
|
7362
|
-
var consequent_2 = ($$anchor5) => {
|
|
7363
|
-
const s = /* @__PURE__ */ user_derived(() => Math.max(get(slot).start, get(startHour)));
|
|
7364
|
-
const e = /* @__PURE__ */ user_derived(() => Math.min(get(slot).end, get(endHour)));
|
|
7365
|
-
var fragment_3 = comment();
|
|
7366
|
-
var node_5 = first_child(fragment_3);
|
|
7367
|
-
{
|
|
7368
|
-
var consequent_1 = ($$anchor6) => {
|
|
7369
|
-
var div_6 = root_3$7();
|
|
7370
|
-
let styles_5;
|
|
7371
|
-
var node_6 = child(div_6);
|
|
7372
|
-
{
|
|
7373
|
-
var consequent = ($$anchor7) => {
|
|
7374
|
-
var span_1 = root_2$7();
|
|
7375
|
-
var text_1 = child(span_1, true);
|
|
7376
|
-
reset(span_1);
|
|
7377
|
-
template_effect(() => set_text(text_1, get(slot).label));
|
|
7378
|
-
append($$anchor7, span_1);
|
|
7379
|
-
};
|
|
7380
|
-
if_block(node_6, ($$render) => {
|
|
7381
|
-
if (get(slot).label) $$render(consequent);
|
|
7382
|
-
});
|
|
7383
|
-
}
|
|
7384
|
-
reset(div_6);
|
|
7385
|
-
template_effect(() => {
|
|
7386
|
-
set_attribute(div_6, "aria-label", get(slot).label || "Unavailable");
|
|
7387
|
-
styles_5 = set_style(div_6, "", styles_5, {
|
|
7388
|
-
left: `${(get(s) - get(startHour)) * get(hourWidth)}px`,
|
|
7389
|
-
width: `${(get(e) - get(s)) * get(hourWidth)}px`
|
|
7390
|
-
});
|
|
7391
|
-
});
|
|
7392
|
-
append($$anchor6, div_6);
|
|
7393
|
-
};
|
|
7394
|
-
if_block(node_5, ($$render) => {
|
|
7395
|
-
if (get(e) > get(s)) $$render(consequent_1);
|
|
7396
|
-
});
|
|
7397
|
-
}
|
|
7398
|
-
append($$anchor5, fragment_3);
|
|
7399
|
-
};
|
|
7400
|
-
if_block(node_4, ($$render) => {
|
|
7401
|
-
if (!get(slot).day || get(slot).day === get(isoDay)) $$render(consequent_2);
|
|
7402
|
-
});
|
|
7403
|
-
}
|
|
7404
|
-
append($$anchor4, fragment_2);
|
|
7405
|
-
});
|
|
7406
|
-
append($$anchor3, fragment_1);
|
|
7407
|
-
};
|
|
7408
|
-
if_block(node_2, ($$render) => {
|
|
7409
|
-
if (get(blockedSlots)?.length) $$render(consequent_3);
|
|
7410
|
-
});
|
|
7411
|
-
}
|
|
7412
|
-
var node_7 = sibling(node_2, 2);
|
|
7413
|
-
{
|
|
7414
|
-
var consequent_4 = ($$anchor3) => {
|
|
7415
|
-
var div_7 = root_4$7();
|
|
7416
|
-
var node_8 = child(div_7);
|
|
7417
|
-
{
|
|
7418
|
-
let $0 = /* @__PURE__ */ user_derived(() => ({
|
|
7419
|
-
date: new Date(get(d).ms),
|
|
7420
|
-
isToday: get(d).today,
|
|
7421
|
-
dayName: weekdayShort(get(d).ms, $$props.locale)
|
|
7422
|
-
}));
|
|
7423
|
-
snippet(node_8, () => get(dayHeaderSnippet), () => get($0));
|
|
7424
|
-
}
|
|
7425
|
-
reset(div_7);
|
|
7426
|
-
append($$anchor3, div_7);
|
|
7427
|
-
};
|
|
7428
|
-
if_block(node_7, ($$render) => {
|
|
7429
|
-
if (get(dayHeaderSnippet)) $$render(consequent_4);
|
|
7430
|
-
});
|
|
7431
|
-
}
|
|
7432
|
-
reset(div_3);
|
|
7433
|
-
template_effect(
|
|
7434
|
-
($0) => {
|
|
7435
|
-
classes_2 = set_class(div_3, 1, "fs-day svelte-mrwdy7", null, classes_2, $0);
|
|
7436
|
-
styles_2 = set_style(div_3, "", styles_2, {
|
|
7437
|
-
left: `${get(d).x ?? ""}px`,
|
|
7438
|
-
width: `${get(dayWidth) ?? ""}px`
|
|
7439
|
-
});
|
|
7440
|
-
},
|
|
7441
|
-
[
|
|
7442
|
-
() => ({
|
|
7443
|
-
"fs-today": get(d).today,
|
|
7444
|
-
"fs-past": get(d).past,
|
|
7445
|
-
"fs-disabled": get(disabledSet).has(get(d).ms)
|
|
7446
|
-
})
|
|
7447
|
-
]
|
|
7448
|
-
);
|
|
7449
|
-
append($$anchor2, div_3);
|
|
7450
|
-
});
|
|
7451
|
-
var node_9 = sibling(node, 2);
|
|
7452
|
-
{
|
|
7453
|
-
var consequent_5 = ($$anchor2) => {
|
|
7454
|
-
var div_8 = root_6$7();
|
|
7455
|
-
let styles_6;
|
|
7456
|
-
var span_2 = child(div_8);
|
|
7457
|
-
var text_2 = child(span_2, true);
|
|
7458
|
-
reset(span_2);
|
|
7459
|
-
next(2);
|
|
7460
|
-
reset(div_8);
|
|
7461
|
-
template_effect(() => {
|
|
7462
|
-
styles_6 = set_style(div_8, "", styles_6, { left: `${get(nowPx) ?? ""}px` });
|
|
7463
|
-
set_text(text_2, clock.hm);
|
|
7464
|
-
});
|
|
7465
|
-
append($$anchor2, div_8);
|
|
7466
|
-
};
|
|
7467
|
-
if_block(node_9, ($$render) => {
|
|
7468
|
-
if (get(nowInBand)) $$render(consequent_5);
|
|
7469
|
-
});
|
|
7470
|
-
}
|
|
7471
|
-
var node_10 = sibling(node_9, 2);
|
|
7472
|
-
each(node_10, 17, () => get(positionedEvents), (p) => p.ev.id, ($$anchor2, p) => {
|
|
7473
|
-
const isCurrent = /* @__PURE__ */ user_derived(() => get(nowInfo).current.has(get(p).ev.id));
|
|
7474
|
-
const isNext = /* @__PURE__ */ user_derived(() => !get(p).isDragged && get(p).ev.id === get(nowInfo).nextId);
|
|
7475
|
-
var div_9 = root_16$4();
|
|
7476
|
-
let classes_3;
|
|
7477
|
-
let styles_7;
|
|
7478
|
-
var div_10 = child(div_9);
|
|
7479
|
-
var node_11 = child(div_10);
|
|
7480
|
-
{
|
|
7481
|
-
var consequent_6 = ($$anchor3) => {
|
|
7482
|
-
var span_3 = root_7$7();
|
|
7483
|
-
append($$anchor3, span_3);
|
|
7484
|
-
};
|
|
7485
|
-
var consequent_7 = ($$anchor3) => {
|
|
7486
|
-
var span_4 = root_8$7();
|
|
7487
|
-
var text_3 = child(span_4, true);
|
|
7488
|
-
reset(span_4);
|
|
7489
|
-
template_effect(() => set_text(text_3, get(L).upNext));
|
|
7490
|
-
append($$anchor3, span_4);
|
|
7491
|
-
};
|
|
7492
|
-
if_block(node_11, ($$render) => {
|
|
7493
|
-
if (get(isCurrent)) $$render(consequent_6);
|
|
7494
|
-
else if (get(isNext)) $$render(consequent_7, 1);
|
|
7495
|
-
});
|
|
7496
|
-
}
|
|
7497
|
-
var node_12 = sibling(node_11, 2);
|
|
7498
|
-
EventContent(node_12, {
|
|
7499
|
-
get event() {
|
|
7500
|
-
return get(p).ev;
|
|
7501
|
-
},
|
|
7502
|
-
children: ($$anchor3, $$slotProps) => {
|
|
7503
|
-
var fragment_4 = root_14$4();
|
|
7504
|
-
var node_13 = first_child(fragment_4);
|
|
7505
|
-
{
|
|
7506
|
-
var consequent_8 = ($$anchor4) => {
|
|
7507
|
-
var span_5 = root_9$5();
|
|
7508
|
-
var text_4 = child(span_5);
|
|
7509
|
-
reset(span_5);
|
|
7510
|
-
template_effect(($0, $1) => set_text(text_4, `${$0 ?? ""} – ${$1 ?? ""}`), [
|
|
7511
|
-
() => fmtTime$1(get(p).ev.start, $$props.locale),
|
|
7512
|
-
() => fmtTime$1(get(p).ev.end, $$props.locale)
|
|
7513
|
-
]);
|
|
7514
|
-
append($$anchor4, span_5);
|
|
7515
|
-
};
|
|
7516
|
-
if_block(node_13, ($$render) => {
|
|
7517
|
-
if (get(p).fit.time) $$render(consequent_8);
|
|
7518
|
-
});
|
|
7519
|
-
}
|
|
7520
|
-
var span_6 = sibling(node_13, 2);
|
|
7521
|
-
var text_5 = child(span_6, true);
|
|
7522
|
-
reset(span_6);
|
|
7523
|
-
var node_14 = sibling(span_6, 2);
|
|
7524
|
-
{
|
|
7525
|
-
var consequent_9 = ($$anchor4) => {
|
|
7526
|
-
var span_7 = root_10$5();
|
|
7527
|
-
var text_6 = child(span_7, true);
|
|
7528
|
-
reset(span_7);
|
|
7529
|
-
template_effect(() => set_text(text_6, get(p).ev.subtitle));
|
|
7530
|
-
append($$anchor4, span_7);
|
|
7531
|
-
};
|
|
7532
|
-
if_block(node_14, ($$render) => {
|
|
7533
|
-
if (get(p).ev.subtitle && get(p).fit.subtitle) $$render(consequent_9);
|
|
7534
|
-
});
|
|
7535
|
-
}
|
|
7536
|
-
var node_15 = sibling(node_14, 2);
|
|
7537
|
-
{
|
|
7538
|
-
var consequent_10 = ($$anchor4) => {
|
|
7539
|
-
var span_8 = root_11$5();
|
|
7540
|
-
var text_7 = child(span_8, true);
|
|
7541
|
-
reset(span_8);
|
|
7542
|
-
template_effect(() => set_text(text_7, get(p).ev.location));
|
|
7543
|
-
append($$anchor4, span_8);
|
|
7544
|
-
};
|
|
7545
|
-
if_block(node_15, ($$render) => {
|
|
7546
|
-
if (get(p).ev.location && get(p).fit.location) $$render(consequent_10);
|
|
7547
|
-
});
|
|
7548
|
-
}
|
|
7549
|
-
var node_16 = sibling(node_15, 2);
|
|
7550
|
-
{
|
|
7551
|
-
var consequent_11 = ($$anchor4) => {
|
|
7552
|
-
var span_9 = root_13$4();
|
|
7553
|
-
each(span_9, 21, () => get(p).ev.tags, index, ($$anchor5, tag) => {
|
|
7554
|
-
var span_10 = root_12$5();
|
|
7555
|
-
var text_8 = child(span_10, true);
|
|
7556
|
-
reset(span_10);
|
|
7557
|
-
template_effect(() => set_text(text_8, get(tag)));
|
|
7558
|
-
append($$anchor5, span_10);
|
|
7559
|
-
});
|
|
7560
|
-
reset(span_9);
|
|
7561
|
-
append($$anchor4, span_9);
|
|
7562
|
-
};
|
|
7563
|
-
if_block(node_16, ($$render) => {
|
|
7564
|
-
if (get(p).ev.tags?.length && get(p).fit.tags) $$render(consequent_11);
|
|
7565
|
-
});
|
|
7566
|
-
}
|
|
7567
|
-
template_effect(() => set_text(text_5, get(p).ev.title));
|
|
7568
|
-
append($$anchor3, fragment_4);
|
|
7569
|
-
},
|
|
7570
|
-
$$slots: { default: true }
|
|
7571
|
-
});
|
|
7572
|
-
reset(div_10);
|
|
7573
|
-
var node_17 = sibling(div_10, 2);
|
|
7574
|
-
{
|
|
7575
|
-
var consequent_12 = ($$anchor3) => {
|
|
7576
|
-
var fragment_5 = root_15$4();
|
|
7577
|
-
var div_11 = first_child(fragment_5);
|
|
7578
|
-
var div_12 = sibling(div_11, 2);
|
|
7579
|
-
delegated("pointerdown", div_11, (e) => onResizePointerDown(e, get(p).ev, "start"));
|
|
7580
|
-
delegated("pointerdown", div_12, (e) => onResizePointerDown(e, get(p).ev, "end"));
|
|
7581
|
-
append($$anchor3, fragment_5);
|
|
7582
|
-
};
|
|
7583
|
-
if_block(node_17, ($$render) => {
|
|
7584
|
-
if (!readOnly() && !get(p).ev.data?.readOnly && !get(p).isDragged) $$render(consequent_12);
|
|
7585
|
-
});
|
|
7586
|
-
}
|
|
7587
|
-
reset(div_9);
|
|
7588
|
-
template_effect(
|
|
7589
|
-
($0, $1, $2) => {
|
|
7590
|
-
classes_3 = set_class(div_9, 1, "fs-event svelte-mrwdy7", null, classes_3, {
|
|
7591
|
-
"fs-event--selected": selectedEventId() === get(p).ev.id,
|
|
7592
|
-
"fs-event--current": get(isCurrent),
|
|
7593
|
-
"fs-event--next": get(isNext),
|
|
7594
|
-
"fs-event--dragging": get(p).isDragged,
|
|
7595
|
-
"fs-event--resizing": get(p).isDragged && get(drag)?.mode !== "move",
|
|
7596
|
-
"fs-event--readonly": get(p).ev.data?.readOnly,
|
|
7597
|
-
"fs-event--cancelled": get(p).ev.status === "cancelled",
|
|
7598
|
-
"fs-event--tentative": get(p).ev.status === "tentative",
|
|
7599
|
-
"fs-event--full": get(p).ev.status === "full",
|
|
7600
|
-
"fs-event--limited": get(p).ev.status === "limited"
|
|
7601
|
-
});
|
|
7602
|
-
set_attribute(div_9, "title", get(p).ev.title);
|
|
7603
|
-
set_attribute(div_9, "aria-label", `${get(p).ev.title ?? ""}, ${$0 ?? ""} – ${$1 ?? ""}, ${$2 ?? ""}${get(p).ev.status === "cancelled" ? " (cancelled)" : ""}${get(p).ev.status === "tentative" ? " (tentative)" : ""}${get(p).ev.status === "full" ? " (full)" : ""}${get(p).ev.status === "limited" ? " (limited)" : ""}${get(isCurrent) ? ` (${get(L).inProgress})` : ""}${get(isNext) ? ` (${get(L).upNext})` : ""}`);
|
|
7604
|
-
styles_7 = set_style(div_9, "", styles_7, {
|
|
7605
|
-
left: `${get(p).x ?? ""}px`,
|
|
7606
|
-
width: `${get(p).width ?? ""}px`,
|
|
7607
|
-
top: `${get(p).topPx ?? ""}px`,
|
|
7608
|
-
height: `${get(p).heightPx ?? ""}px`,
|
|
7609
|
-
"--ev-color": get(p).ev.color ?? "var(--dt-accent)"
|
|
7610
|
-
});
|
|
7611
|
-
},
|
|
7612
|
-
[
|
|
7613
|
-
() => fmtTime$1(get(p).ev.start, $$props.locale),
|
|
7614
|
-
() => fmtTime$1(get(p).ev.end, $$props.locale),
|
|
7615
|
-
() => fmtDuration(get(p).ev.start, get(p).ev.end)
|
|
7616
|
-
]
|
|
7617
|
-
);
|
|
7618
|
-
delegated("pointerdown", div_9, (e) => onEventPointerDown(e, get(p).ev));
|
|
7619
|
-
event("pointerenter", div_9, () => get(oneventhover)?.(get(p).ev));
|
|
7620
|
-
delegated("keydown", div_9, (e) => {
|
|
7621
|
-
if (e.key === "Enter" || e.key === " ") {
|
|
7622
|
-
e.preventDefault();
|
|
7623
|
-
$$props.oneventclick?.(get(p).ev);
|
|
7624
|
-
}
|
|
7625
|
-
});
|
|
7626
|
-
append($$anchor2, div_9);
|
|
7627
|
-
});
|
|
7628
|
-
var node_18 = sibling(node_10, 2);
|
|
7629
|
-
{
|
|
7630
|
-
var consequent_13 = ($$anchor2) => {
|
|
7631
|
-
const gx = /* @__PURE__ */ user_derived(() => timeToPx(get(drag).payload.start.getTime()));
|
|
7632
|
-
const gw = /* @__PURE__ */ user_derived(() => Math.max(timeToPx(get(drag).payload.end.getTime()) - get(gx), 8));
|
|
7633
|
-
const gh = /* @__PURE__ */ user_derived(() => Math.max(MIN_EVENT_H, get(containerH) - get(contentTop) - 8 - EVENT_GAP));
|
|
7634
|
-
var div_13 = root_17$4();
|
|
7635
|
-
let styles_8;
|
|
7636
|
-
var span_11 = child(div_13);
|
|
7637
|
-
var text_9 = child(span_11);
|
|
7638
|
-
reset(span_11);
|
|
7639
|
-
reset(div_13);
|
|
7640
|
-
template_effect(
|
|
7641
|
-
($0, $1) => {
|
|
7642
|
-
styles_8 = set_style(div_13, "", styles_8, {
|
|
7643
|
-
left: `${get(gx) ?? ""}px`,
|
|
7644
|
-
width: `${get(gw) ?? ""}px`,
|
|
7645
|
-
top: `${get(contentTop) ?? ""}px`,
|
|
7646
|
-
height: `${get(gh) ?? ""}px`
|
|
7647
|
-
});
|
|
7648
|
-
set_text(text_9, `${$0 ?? ""} – ${$1 ?? ""}`);
|
|
7649
|
-
},
|
|
7650
|
-
[
|
|
7651
|
-
() => fmtTime$1(get(drag).payload.start, $$props.locale),
|
|
7652
|
-
() => fmtTime$1(get(drag).payload.end, $$props.locale)
|
|
7653
|
-
]
|
|
7654
|
-
);
|
|
7655
|
-
append($$anchor2, div_13);
|
|
7656
|
-
};
|
|
7657
|
-
if_block(node_18, ($$render) => {
|
|
7658
|
-
if (!readOnly() && get(drag)?.active && get(drag).mode === "create" && get(drag).payload) $$render(consequent_13);
|
|
7659
|
-
});
|
|
7660
|
-
}
|
|
7661
|
-
reset(div_2);
|
|
7662
|
-
reset(div_1);
|
|
7663
|
-
bind_this(div_1, ($$value) => el = $$value, () => el);
|
|
7664
|
-
var node_19 = sibling(div_1, 2);
|
|
7665
|
-
{
|
|
7666
|
-
var consequent_15 = ($$anchor2) => {
|
|
7667
|
-
var div_14 = root_20$4();
|
|
7668
|
-
set_style(div_14, "", {}, { top: "56px" });
|
|
7669
|
-
each(div_14, 21, () => get(allDayEvents), (seg) => seg.ev.id, ($$anchor3, seg) => {
|
|
7670
|
-
var div_15 = root_19$4();
|
|
7671
|
-
let classes_4;
|
|
7672
|
-
let styles_9;
|
|
7673
|
-
var span_12 = sibling(child(div_15), 2);
|
|
7674
|
-
var text_10 = child(span_12, true);
|
|
7675
|
-
reset(span_12);
|
|
7676
|
-
var node_20 = sibling(span_12, 2);
|
|
7677
|
-
{
|
|
7678
|
-
var consequent_14 = ($$anchor4) => {
|
|
7679
|
-
var span_13 = root_18$4();
|
|
7680
|
-
var text_11 = child(span_13);
|
|
7681
|
-
reset(span_13);
|
|
7682
|
-
template_effect(() => set_text(text_11, `${get(L).day ?? ""} ${get(seg).dayIndex ?? ""}/${get(seg).totalDays ?? ""}`));
|
|
7683
|
-
append($$anchor4, span_13);
|
|
7684
|
-
};
|
|
7685
|
-
var alternate = ($$anchor4) => {
|
|
7686
|
-
var span_14 = root_18$4();
|
|
7687
|
-
var text_12 = child(span_14, true);
|
|
7688
|
-
reset(span_14);
|
|
7689
|
-
template_effect(() => set_text(text_12, get(L).allDay));
|
|
7690
|
-
append($$anchor4, span_14);
|
|
7691
|
-
};
|
|
7692
|
-
if_block(node_20, ($$render) => {
|
|
7693
|
-
if (get(seg).totalDays > 1) $$render(consequent_14);
|
|
7694
|
-
else $$render(alternate, -1);
|
|
7695
|
-
});
|
|
7696
|
-
}
|
|
7697
|
-
reset(div_15);
|
|
7698
|
-
template_effect(
|
|
7699
|
-
($0) => {
|
|
7700
|
-
classes_4 = set_class(div_15, 1, "fs-ad svelte-mrwdy7", null, classes_4, {
|
|
7701
|
-
"fs-ad--start": get(seg).isStart,
|
|
7702
|
-
"fs-ad--selected": selectedEventId() === get(seg).ev.id
|
|
7703
|
-
});
|
|
7704
|
-
set_attribute(div_15, "aria-label", `${get(seg).ev.title ?? ""}${$0 ?? ""}`);
|
|
7705
|
-
styles_9 = set_style(div_15, "", styles_9, { "--ev-color": get(seg).ev.color ?? "var(--dt-accent)" });
|
|
7706
|
-
set_text(text_10, get(seg).ev.title);
|
|
7707
|
-
},
|
|
7708
|
-
[
|
|
7709
|
-
() => get(seg).totalDays > 1 ? `, ${get(L).dayNOfTotal(get(seg).dayIndex, get(seg).totalDays)}` : `, ${get(L).allDay}`
|
|
7710
|
-
]
|
|
7711
|
-
);
|
|
7712
|
-
delegated("click", div_15, () => $$props.oneventclick?.(get(seg).ev));
|
|
7713
|
-
delegated("keydown", div_15, (e) => {
|
|
7714
|
-
if (e.key === "Enter" || e.key === " ") {
|
|
7715
|
-
e.preventDefault();
|
|
7716
|
-
$$props.oneventclick?.(get(seg).ev);
|
|
7717
|
-
}
|
|
7718
|
-
});
|
|
7719
|
-
append($$anchor3, div_15);
|
|
6544
|
+
function wrapAdapterWithTimezone(adapter, timezone) {
|
|
6545
|
+
const zoneEvent = (ev) => ({
|
|
6546
|
+
...ev,
|
|
6547
|
+
start: toZonedTime(ev.start, timezone),
|
|
6548
|
+
end: toZonedTime(ev.end, timezone)
|
|
6549
|
+
});
|
|
6550
|
+
const unzonePartial = (obj) => ({
|
|
6551
|
+
...obj,
|
|
6552
|
+
...obj.start instanceof Date ? { start: fromZonedTime(obj.start, timezone) } : {},
|
|
6553
|
+
...obj.end instanceof Date ? { end: fromZonedTime(obj.end, timezone) } : {}
|
|
6554
|
+
});
|
|
6555
|
+
const wrapped = {
|
|
6556
|
+
async fetchEvents(range) {
|
|
6557
|
+
const events = await adapter.fetchEvents({
|
|
6558
|
+
start: fromZonedTime(range.start, timezone),
|
|
6559
|
+
end: fromZonedTime(range.end, timezone)
|
|
7720
6560
|
});
|
|
7721
|
-
|
|
7722
|
-
|
|
7723
|
-
|
|
7724
|
-
|
|
7725
|
-
|
|
7726
|
-
});
|
|
6561
|
+
return events.map(zoneEvent);
|
|
6562
|
+
}
|
|
6563
|
+
};
|
|
6564
|
+
if (adapter.createEvent) {
|
|
6565
|
+
wrapped.createEvent = async (event2) => zoneEvent(await adapter.createEvent(unzonePartial(event2)));
|
|
7727
6566
|
}
|
|
7728
|
-
|
|
7729
|
-
|
|
7730
|
-
|
|
7731
|
-
|
|
7732
|
-
|
|
7733
|
-
|
|
7734
|
-
|
|
7735
|
-
|
|
7736
|
-
|
|
7737
|
-
|
|
6567
|
+
if (adapter.updateEvent) {
|
|
6568
|
+
wrapped.updateEvent = async (id, patch) => zoneEvent(await adapter.updateEvent(id, unzonePartial(patch)));
|
|
6569
|
+
}
|
|
6570
|
+
if (adapter.deleteEvent) {
|
|
6571
|
+
wrapped.deleteEvent = (id) => adapter.deleteEvent(id);
|
|
6572
|
+
}
|
|
6573
|
+
return wrapped;
|
|
6574
|
+
}
|
|
6575
|
+
function createClock(timezone) {
|
|
6576
|
+
const now = () => timezone ? toZonedTime(Date.now(), timezone).getTime() : Date.now();
|
|
6577
|
+
let tick = /* @__PURE__ */ state(proxy(now()));
|
|
6578
|
+
let today = /* @__PURE__ */ state(proxy(sod(get(tick))));
|
|
6579
|
+
let intervalId = null;
|
|
6580
|
+
function start() {
|
|
6581
|
+
intervalId = setInterval(
|
|
6582
|
+
() => {
|
|
6583
|
+
set(tick, now(), true);
|
|
6584
|
+
const sd = sod(get(tick));
|
|
6585
|
+
if (sd !== get(today)) set(today, sd, true);
|
|
6586
|
+
},
|
|
6587
|
+
1e3
|
|
6588
|
+
);
|
|
6589
|
+
}
|
|
6590
|
+
function destroy() {
|
|
6591
|
+
if (intervalId !== null) {
|
|
6592
|
+
clearInterval(intervalId);
|
|
6593
|
+
intervalId = null;
|
|
6594
|
+
}
|
|
6595
|
+
}
|
|
6596
|
+
try {
|
|
6597
|
+
onMount(() => {
|
|
6598
|
+
start();
|
|
6599
|
+
return destroy;
|
|
7738
6600
|
});
|
|
7739
|
-
|
|
7740
|
-
|
|
7741
|
-
|
|
7742
|
-
|
|
7743
|
-
|
|
7744
|
-
|
|
7745
|
-
|
|
7746
|
-
|
|
7747
|
-
|
|
7748
|
-
|
|
7749
|
-
|
|
7750
|
-
|
|
7751
|
-
|
|
7752
|
-
|
|
7753
|
-
|
|
7754
|
-
|
|
7755
|
-
|
|
7756
|
-
|
|
6601
|
+
} catch {
|
|
6602
|
+
}
|
|
6603
|
+
return {
|
|
6604
|
+
get tick() {
|
|
6605
|
+
return get(tick);
|
|
6606
|
+
},
|
|
6607
|
+
get today() {
|
|
6608
|
+
return get(today);
|
|
6609
|
+
},
|
|
6610
|
+
get hm() {
|
|
6611
|
+
return fmtHM(get(tick));
|
|
6612
|
+
},
|
|
6613
|
+
get s() {
|
|
6614
|
+
return fmtS(get(tick));
|
|
6615
|
+
},
|
|
6616
|
+
get fractionalHour() {
|
|
6617
|
+
return fractionalHour(get(tick));
|
|
6618
|
+
},
|
|
6619
|
+
destroy
|
|
6620
|
+
};
|
|
7757
6621
|
}
|
|
7758
|
-
delegate(["pointerdown", "click", "keydown"]);
|
|
7759
6622
|
var root_1$6 = /* @__PURE__ */ from_html(`<span class="tw-ad-cont svelte-j4rvbp" aria-hidden="true">◂</span>`);
|
|
7760
6623
|
var root_2$6 = /* @__PURE__ */ from_html(`<span class="tw-ad-span svelte-j4rvbp" aria-hidden="true"> </span>`);
|
|
7761
6624
|
var root_3$6 = /* @__PURE__ */ from_html(`<span class="tw-ad-arrow svelte-j4rvbp" aria-hidden="true">▸</span>`);
|
|
@@ -7763,26 +6626,28 @@ globalThis.__DAY_CALENDAR_CSS__ = ":host{display:block}\n\t/* ─── Containe
|
|
|
7763
6626
|
var root_5$6 = /* @__PURE__ */ from_html(`<span> </span>`);
|
|
7764
6627
|
var root_6$6 = /* @__PURE__ */ from_html(`<div class="tw-hd-custom svelte-j4rvbp"><!></div>`);
|
|
7765
6628
|
var root_7$6 = /* @__PURE__ */ from_html(`<div><span class="tw-hd-wd svelte-j4rvbp"> </span> <!> <!></div>`);
|
|
7766
|
-
var root_8$6 = /* @__PURE__ */ from_html(`<
|
|
7767
|
-
var root_9$4 = /* @__PURE__ */ from_html(`<
|
|
7768
|
-
var root_10$4 = /* @__PURE__ */ from_html(`<div
|
|
7769
|
-
var root_11$4 = /* @__PURE__ */ from_html(`<span class="tw-gutter-lb svelte-j4rvbp"> </span>`);
|
|
7770
|
-
var root_12$4 = /* @__PURE__ */ from_html(`<
|
|
7771
|
-
var root_13$3 = /* @__PURE__ */ from_html(`<
|
|
7772
|
-
var root_14$3 = /* @__PURE__ */ from_html(`<span class="tw-
|
|
7773
|
-
var root_15$3 = /* @__PURE__ */ from_html(`<div class="tw-
|
|
7774
|
-
var root_16$3 = /* @__PURE__ */ from_html(`<span class="tw-
|
|
7775
|
-
var root_17$3 = /* @__PURE__ */ from_html(`<
|
|
7776
|
-
var root_18$3 = /* @__PURE__ */ from_html(`<span class="tw-ev-
|
|
7777
|
-
var root_19$3 = /* @__PURE__ */ from_html(`<span class="tw-ev-
|
|
7778
|
-
var root_20$3 = /* @__PURE__ */ from_html(`<
|
|
7779
|
-
var root_21$3 = /* @__PURE__ */ from_html(`<span class="tw-
|
|
7780
|
-
var root_22$2 = /* @__PURE__ */ from_html(`<
|
|
7781
|
-
var root_23$2 = /* @__PURE__ */ from_html(`<
|
|
7782
|
-
var root_24$2 = /* @__PURE__ */ from_html(`<
|
|
7783
|
-
var root_25$2 = /* @__PURE__ */ from_html(`<div
|
|
7784
|
-
var root_26$2 = /* @__PURE__ */ from_html(`<div class="tw-
|
|
7785
|
-
var root_27$2 = /* @__PURE__ */ from_html(`<div
|
|
6629
|
+
var root_8$6 = /* @__PURE__ */ from_html(`<div class="tw-head svelte-j4rvbp"><div class="tw-corner svelte-j4rvbp" aria-hidden="true"></div> <!></div>`);
|
|
6630
|
+
var root_9$4 = /* @__PURE__ */ from_html(`<button type="button" class="tw-ad-more svelte-j4rvbp"> </button>`);
|
|
6631
|
+
var root_10$4 = /* @__PURE__ */ from_html(`<div><!> <!></div>`);
|
|
6632
|
+
var root_11$4 = /* @__PURE__ */ from_html(`<div class="tw-allday svelte-j4rvbp"><div class="tw-ad-gutter svelte-j4rvbp"><span class="tw-ad-gutter-lb svelte-j4rvbp"> </span></div> <!></div>`);
|
|
6633
|
+
var root_12$4 = /* @__PURE__ */ from_html(`<div class="tw-top svelte-j4rvbp"><!> <!></div>`);
|
|
6634
|
+
var root_13$3 = /* @__PURE__ */ from_html(`<span class="tw-gutter-lb svelte-j4rvbp"> </span>`);
|
|
6635
|
+
var root_14$3 = /* @__PURE__ */ from_html(`<span class="tw-gutter-now svelte-j4rvbp"></span>`);
|
|
6636
|
+
var root_15$3 = /* @__PURE__ */ from_html(`<div class="tw-line svelte-j4rvbp"></div> <div class="tw-line tw-line--half svelte-j4rvbp"></div>`, 1);
|
|
6637
|
+
var root_16$3 = /* @__PURE__ */ from_html(`<span class="tw-blocked-lb svelte-j4rvbp"> </span>`);
|
|
6638
|
+
var root_17$3 = /* @__PURE__ */ from_html(`<div class="tw-blocked svelte-j4rvbp"><!></div>`);
|
|
6639
|
+
var root_18$3 = /* @__PURE__ */ from_html(`<span class="tw-ev-loc svelte-j4rvbp"> </span>`);
|
|
6640
|
+
var root_19$3 = /* @__PURE__ */ from_html(`<span class="tw-ev-time svelte-j4rvbp"> </span> <span class="tw-ev-title svelte-j4rvbp"> </span> <!>`, 1);
|
|
6641
|
+
var root_20$3 = /* @__PURE__ */ from_html(`<span class="tw-ev-live svelte-j4rvbp" aria-hidden="true"></span>`);
|
|
6642
|
+
var root_21$3 = /* @__PURE__ */ from_html(`<span class="tw-ev-handle tw-ev-handle--start svelte-j4rvbp" aria-hidden="true"></span> <span class="tw-ev-handle tw-ev-handle--end svelte-j4rvbp" aria-hidden="true"></span>`, 1);
|
|
6643
|
+
var root_22$2 = /* @__PURE__ */ from_html(`<div role="button" tabindex="0"><div class="tw-ev-stripe svelte-j4rvbp" aria-hidden="true"></div> <div class="tw-ev-body svelte-j4rvbp"><!></div> <!> <!></div>`);
|
|
6644
|
+
var root_23$2 = /* @__PURE__ */ from_html(`<span class="tw-ghost-title svelte-j4rvbp"> </span>`);
|
|
6645
|
+
var root_24$2 = /* @__PURE__ */ from_html(`<span class="tw-ghost-time svelte-j4rvbp"> </span> <!>`, 1);
|
|
6646
|
+
var root_25$2 = /* @__PURE__ */ from_html(`<div aria-hidden="true"><!></div>`);
|
|
6647
|
+
var root_26$2 = /* @__PURE__ */ from_html(`<div class="tw-now svelte-j4rvbp"><span class="tw-now-dot svelte-j4rvbp" aria-hidden="true"></span></div>`);
|
|
6648
|
+
var root_27$2 = /* @__PURE__ */ from_html(`<div><!> <!> <!> <!></div>`);
|
|
6649
|
+
var root_28$2 = /* @__PURE__ */ from_html(`<div class="tw-empty svelte-j4rvbp"><!></div>`);
|
|
6650
|
+
var root_29$2 = /* @__PURE__ */ from_html(`<div role="region"><div class="tw-scroll svelte-j4rvbp"><div class="tw-inner svelte-j4rvbp"><!> <div class="tw-body svelte-j4rvbp"><div class="tw-gutter svelte-j4rvbp" aria-hidden="true"><!> <!></div> <div class="tw-cols svelte-j4rvbp" role="presentation"><div class="tw-lines svelte-j4rvbp" aria-hidden="true"></div> <!></div></div></div></div> <!></div>`);
|
|
7786
6651
|
function PlannerWeek($$anchor, $$props) {
|
|
7787
6652
|
push($$props, true);
|
|
7788
6653
|
const allDayChip = ($$anchor2, seg = noop) => {
|
|
@@ -7848,7 +6713,7 @@ globalThis.__DAY_CALENDAR_CSS__ = ":host{display:block}\n\t/* ─── Containe
|
|
|
7848
6713
|
event("pointerenter", button, () => get(oneventhover)?.(seg().ev));
|
|
7849
6714
|
append($$anchor2, button);
|
|
7850
6715
|
};
|
|
7851
|
-
let mondayStart = prop($$props, "mondayStart", 3, true), height = prop($$props, "height", 3, 520), events = prop($$props, "events", 19, () => []), style = prop($$props, "style", 3, ""), selectedEventId = prop($$props, "selectedEventId", 3, null), readOnly = prop($$props, "readOnly", 3, false);
|
|
6716
|
+
let mode = prop($$props, "mode", 3, "week"), mondayStart = prop($$props, "mondayStart", 3, true), height = prop($$props, "height", 3, 520), events = prop($$props, "events", 19, () => []), style = prop($$props, "style", 3, ""), selectedEventId = prop($$props, "selectedEventId", 3, null), readOnly = prop($$props, "readOnly", 3, false);
|
|
7852
6717
|
const ctx = useCalendarContext();
|
|
7853
6718
|
const L = /* @__PURE__ */ user_derived(() => ctx.labels);
|
|
7854
6719
|
const clock = createClock(ctx.timezone);
|
|
@@ -7877,7 +6742,9 @@ globalThis.__DAY_CALENDAR_CSS__ = ":host{display:block}\n\t/* ─── Containe
|
|
|
7877
6742
|
let scrollEl;
|
|
7878
6743
|
let colsEl;
|
|
7879
6744
|
const todayMs = /* @__PURE__ */ user_derived(() => clock.today);
|
|
7880
|
-
const
|
|
6745
|
+
const singleDay = /* @__PURE__ */ user_derived(() => mode() === "day" || get(viewState)?.mode === "day");
|
|
6746
|
+
const customDays = /* @__PURE__ */ user_derived(() => get(singleDay) ? 1 : get(viewState)?.dayCount ?? 7);
|
|
6747
|
+
const hideDayHead = /* @__PURE__ */ user_derived(() => get(singleDay) && get(showDates) && !!get(viewState) && !get(dayHeaderSnippet));
|
|
7881
6748
|
const weekStartMs = /* @__PURE__ */ user_derived(() => {
|
|
7882
6749
|
const r = get(viewState)?.range;
|
|
7883
6750
|
if (r) return sod(r.start.getTime());
|
|
@@ -8079,8 +6946,8 @@ globalThis.__DAY_CALENDAR_CSS__ = ":host{display:block}\n\t/* ─── Containe
|
|
|
8079
6946
|
}
|
|
8080
6947
|
function ghostForDay(dayMs) {
|
|
8081
6948
|
if (!get(drag)?.active || !get(drag).payload) return null;
|
|
8082
|
-
const
|
|
8083
|
-
if (
|
|
6949
|
+
const mode2 = get(drag).mode;
|
|
6950
|
+
if (mode2 !== "move" && mode2 !== "create") return null;
|
|
8084
6951
|
const s = get(drag).payload.start.getTime();
|
|
8085
6952
|
const e = get(drag).payload.end.getTime();
|
|
8086
6953
|
const bandS = dayMs + get(startHour) * HOUR_MS;
|
|
@@ -8093,7 +6960,7 @@ globalThis.__DAY_CALENDAR_CSS__ = ":host{display:block}\n\t/* ─── Containe
|
|
|
8093
6960
|
height: Math.max(12, (ce - cs) / HOUR_MS * HOUR_H),
|
|
8094
6961
|
start: get(drag).payload.start,
|
|
8095
6962
|
end: get(drag).payload.end,
|
|
8096
|
-
create:
|
|
6963
|
+
create: mode2 === "create",
|
|
8097
6964
|
// Only the segment containing the start shows the readout
|
|
8098
6965
|
showTime: cs === Math.max(s, dayMs)
|
|
8099
6966
|
};
|
|
@@ -8357,171 +7224,191 @@ globalThis.__DAY_CALENDAR_CSS__ = ":host{display:block}\n\t/* ─── Containe
|
|
|
8357
7224
|
{ once: true }
|
|
8358
7225
|
);
|
|
8359
7226
|
}
|
|
8360
|
-
var div =
|
|
7227
|
+
var div = root_29$2();
|
|
8361
7228
|
event("keydown", $window, onWindowKeydown);
|
|
8362
7229
|
let classes_1;
|
|
8363
7230
|
let styles_1;
|
|
8364
7231
|
var div_1 = child(div);
|
|
8365
7232
|
var div_2 = child(div_1);
|
|
8366
7233
|
let styles_2;
|
|
8367
|
-
var
|
|
8368
|
-
var div_4 = child(div_3);
|
|
8369
|
-
var div_5 = child(div_4);
|
|
8370
|
-
set_style(div_5, "", {}, { width: "48px" });
|
|
8371
|
-
var node_3 = sibling(div_5, 2);
|
|
8372
|
-
each(node_3, 17, () => get(dayCols), (day) => day.ms, ($$anchor2, day) => {
|
|
8373
|
-
var div_6 = root_7$6();
|
|
8374
|
-
let classes_2;
|
|
8375
|
-
var span_4 = child(div_6);
|
|
8376
|
-
var text_2 = child(span_4, true);
|
|
8377
|
-
reset(span_4);
|
|
8378
|
-
var node_4 = sibling(span_4, 2);
|
|
8379
|
-
{
|
|
8380
|
-
var consequent_3 = ($$anchor3) => {
|
|
8381
|
-
var span_5 = root_5$6();
|
|
8382
|
-
let classes_3;
|
|
8383
|
-
var text_3 = child(span_5, true);
|
|
8384
|
-
reset(span_5);
|
|
8385
|
-
template_effect(() => {
|
|
8386
|
-
classes_3 = set_class(span_5, 1, "tw-hd-num svelte-j4rvbp", null, classes_3, { "tw-hd-num--today": get(day).isToday });
|
|
8387
|
-
set_text(text_3, get(day).dayNum);
|
|
8388
|
-
});
|
|
8389
|
-
append($$anchor3, span_5);
|
|
8390
|
-
};
|
|
8391
|
-
if_block(node_4, ($$render) => {
|
|
8392
|
-
if (get(showDates)) $$render(consequent_3);
|
|
8393
|
-
});
|
|
8394
|
-
}
|
|
8395
|
-
var node_5 = sibling(node_4, 2);
|
|
8396
|
-
{
|
|
8397
|
-
var consequent_4 = ($$anchor3) => {
|
|
8398
|
-
var div_7 = root_6$6();
|
|
8399
|
-
var node_6 = child(div_7);
|
|
8400
|
-
{
|
|
8401
|
-
let $0 = /* @__PURE__ */ user_derived(() => ({
|
|
8402
|
-
date: new Date(get(day).ms),
|
|
8403
|
-
isToday: get(day).isToday,
|
|
8404
|
-
dayName: weekdayShort(get(day).ms, $$props.locale)
|
|
8405
|
-
}));
|
|
8406
|
-
snippet(node_6, () => get(dayHeaderSnippet), () => get($0));
|
|
8407
|
-
}
|
|
8408
|
-
reset(div_7);
|
|
8409
|
-
append($$anchor3, div_7);
|
|
8410
|
-
};
|
|
8411
|
-
if_block(node_5, ($$render) => {
|
|
8412
|
-
if (get(dayHeaderSnippet)) $$render(consequent_4);
|
|
8413
|
-
});
|
|
8414
|
-
}
|
|
8415
|
-
reset(div_6);
|
|
8416
|
-
template_effect(
|
|
8417
|
-
($0) => {
|
|
8418
|
-
classes_2 = set_class(div_6, 1, "tw-hd svelte-j4rvbp", null, classes_2, { "tw-hd--today": get(day).isToday });
|
|
8419
|
-
set_attribute(div_6, "aria-current", get(day).isToday ? "date" : void 0);
|
|
8420
|
-
set_text(text_2, $0);
|
|
8421
|
-
},
|
|
8422
|
-
[() => weekdayShort(get(day).ms, $$props.locale)]
|
|
8423
|
-
);
|
|
8424
|
-
append($$anchor2, div_6);
|
|
8425
|
-
});
|
|
8426
|
-
reset(div_4);
|
|
8427
|
-
var node_7 = sibling(div_4, 2);
|
|
7234
|
+
var node_3 = child(div_2);
|
|
8428
7235
|
{
|
|
8429
|
-
var
|
|
8430
|
-
var
|
|
8431
|
-
var
|
|
8432
|
-
|
|
8433
|
-
|
|
8434
|
-
|
|
8435
|
-
|
|
8436
|
-
|
|
8437
|
-
|
|
8438
|
-
|
|
8439
|
-
|
|
8440
|
-
|
|
8441
|
-
|
|
8442
|
-
|
|
8443
|
-
|
|
8444
|
-
|
|
8445
|
-
|
|
8446
|
-
|
|
8447
|
-
|
|
8448
|
-
|
|
8449
|
-
|
|
8450
|
-
|
|
8451
|
-
|
|
8452
|
-
|
|
8453
|
-
|
|
7236
|
+
var consequent_8 = ($$anchor2) => {
|
|
7237
|
+
var div_3 = root_12$4();
|
|
7238
|
+
var node_4 = child(div_3);
|
|
7239
|
+
{
|
|
7240
|
+
var consequent_5 = ($$anchor3) => {
|
|
7241
|
+
var div_4 = root_8$6();
|
|
7242
|
+
var div_5 = child(div_4);
|
|
7243
|
+
set_style(div_5, "", {}, { width: "48px" });
|
|
7244
|
+
var node_5 = sibling(div_5, 2);
|
|
7245
|
+
each(node_5, 17, () => get(dayCols), (day) => day.ms, ($$anchor4, day) => {
|
|
7246
|
+
var div_6 = root_7$6();
|
|
7247
|
+
let classes_2;
|
|
7248
|
+
var span_4 = child(div_6);
|
|
7249
|
+
var text_2 = child(span_4, true);
|
|
7250
|
+
reset(span_4);
|
|
7251
|
+
var node_6 = sibling(span_4, 2);
|
|
7252
|
+
{
|
|
7253
|
+
var consequent_3 = ($$anchor5) => {
|
|
7254
|
+
var span_5 = root_5$6();
|
|
7255
|
+
let classes_3;
|
|
7256
|
+
var text_3 = child(span_5, true);
|
|
7257
|
+
reset(span_5);
|
|
7258
|
+
template_effect(() => {
|
|
7259
|
+
classes_3 = set_class(span_5, 1, "tw-hd-num svelte-j4rvbp", null, classes_3, { "tw-hd-num--today": get(day).isToday });
|
|
7260
|
+
set_text(text_3, get(day).dayNum);
|
|
7261
|
+
});
|
|
7262
|
+
append($$anchor5, span_5);
|
|
7263
|
+
};
|
|
7264
|
+
if_block(node_6, ($$render) => {
|
|
7265
|
+
if (get(showDates)) $$render(consequent_3);
|
|
7266
|
+
});
|
|
7267
|
+
}
|
|
7268
|
+
var node_7 = sibling(node_6, 2);
|
|
7269
|
+
{
|
|
7270
|
+
var consequent_4 = ($$anchor5) => {
|
|
7271
|
+
var div_7 = root_6$6();
|
|
7272
|
+
var node_8 = child(div_7);
|
|
7273
|
+
{
|
|
7274
|
+
let $0 = /* @__PURE__ */ user_derived(() => ({
|
|
7275
|
+
date: new Date(get(day).ms),
|
|
7276
|
+
isToday: get(day).isToday,
|
|
7277
|
+
dayName: weekdayShort(get(day).ms, $$props.locale)
|
|
7278
|
+
}));
|
|
7279
|
+
snippet(node_8, () => get(dayHeaderSnippet), () => get($0));
|
|
7280
|
+
}
|
|
7281
|
+
reset(div_7);
|
|
7282
|
+
append($$anchor5, div_7);
|
|
7283
|
+
};
|
|
7284
|
+
if_block(node_7, ($$render) => {
|
|
7285
|
+
if (get(dayHeaderSnippet)) $$render(consequent_4);
|
|
7286
|
+
});
|
|
7287
|
+
}
|
|
7288
|
+
reset(div_6);
|
|
8454
7289
|
template_effect(
|
|
8455
7290
|
($0) => {
|
|
8456
|
-
|
|
8457
|
-
|
|
7291
|
+
classes_2 = set_class(div_6, 1, "tw-hd svelte-j4rvbp", null, classes_2, { "tw-hd--today": get(day).isToday });
|
|
7292
|
+
set_attribute(div_6, "aria-current", get(day).isToday ? "date" : void 0);
|
|
7293
|
+
set_text(text_2, $0);
|
|
8458
7294
|
},
|
|
8459
7295
|
[
|
|
8460
|
-
() => get(
|
|
7296
|
+
() => get(singleDay) ? weekdayLong(get(day).ms, $$props.locale) : weekdayShort(get(day).ms, $$props.locale)
|
|
8461
7297
|
]
|
|
8462
7298
|
);
|
|
8463
|
-
|
|
8464
|
-
|
|
7299
|
+
append($$anchor4, div_6);
|
|
7300
|
+
});
|
|
7301
|
+
reset(div_4);
|
|
7302
|
+
append($$anchor3, div_4);
|
|
7303
|
+
};
|
|
7304
|
+
if_block(node_4, ($$render) => {
|
|
7305
|
+
if (!get(hideDayHead)) $$render(consequent_5);
|
|
7306
|
+
});
|
|
7307
|
+
}
|
|
7308
|
+
var node_9 = sibling(node_4, 2);
|
|
7309
|
+
{
|
|
7310
|
+
var consequent_7 = ($$anchor3) => {
|
|
7311
|
+
var div_8 = root_11$4();
|
|
7312
|
+
var div_9 = child(div_8);
|
|
7313
|
+
set_style(div_9, "", {}, { width: "48px" });
|
|
7314
|
+
var span_6 = child(div_9);
|
|
7315
|
+
var text_4 = child(span_6, true);
|
|
7316
|
+
reset(span_6);
|
|
7317
|
+
reset(div_9);
|
|
7318
|
+
var node_10 = sibling(div_9, 2);
|
|
7319
|
+
each(node_10, 17, () => get(dayCols), (day) => day.ms, ($$anchor4, day) => {
|
|
7320
|
+
const segs = /* @__PURE__ */ user_derived(() => get(allDayByDay).get(get(day).ms) ?? []);
|
|
7321
|
+
const isExpanded = /* @__PURE__ */ user_derived(() => adExpanded[get(day).ms] ?? false);
|
|
7322
|
+
const shown = /* @__PURE__ */ user_derived(() => get(isExpanded) ? get(segs) : get(segs).slice(0, ALLDAY_MAX));
|
|
7323
|
+
var div_10 = root_10$4();
|
|
7324
|
+
let classes_4;
|
|
7325
|
+
var node_11 = child(div_10);
|
|
7326
|
+
each(node_11, 17, () => get(shown), (seg) => seg.ev.id, ($$anchor5, seg) => {
|
|
7327
|
+
allDayChip($$anchor5, () => get(seg));
|
|
8465
7328
|
});
|
|
8466
|
-
|
|
8467
|
-
|
|
8468
|
-
|
|
8469
|
-
|
|
7329
|
+
var node_12 = sibling(node_11, 2);
|
|
7330
|
+
{
|
|
7331
|
+
var consequent_6 = ($$anchor5) => {
|
|
7332
|
+
var button_1 = root_9$4();
|
|
7333
|
+
var text_5 = child(button_1, true);
|
|
7334
|
+
reset(button_1);
|
|
7335
|
+
template_effect(
|
|
7336
|
+
($0) => {
|
|
7337
|
+
set_attribute(button_1, "aria-expanded", get(isExpanded));
|
|
7338
|
+
set_text(text_5, $0);
|
|
7339
|
+
},
|
|
7340
|
+
[
|
|
7341
|
+
() => get(isExpanded) ? get(L).showLess : get(L).nMore(get(segs).length - ALLDAY_MAX)
|
|
7342
|
+
]
|
|
7343
|
+
);
|
|
7344
|
+
delegated("click", button_1, () => {
|
|
7345
|
+
adExpanded[get(day).ms] = !get(isExpanded);
|
|
7346
|
+
});
|
|
7347
|
+
append($$anchor5, button_1);
|
|
7348
|
+
};
|
|
7349
|
+
if_block(node_12, ($$render) => {
|
|
7350
|
+
if (get(segs).length > ALLDAY_MAX) $$render(consequent_6);
|
|
7351
|
+
});
|
|
7352
|
+
}
|
|
7353
|
+
reset(div_10);
|
|
7354
|
+
template_effect(() => classes_4 = set_class(div_10, 1, "tw-ad-cell svelte-j4rvbp", null, classes_4, { "tw-ad-cell--today": get(day).isToday }));
|
|
7355
|
+
append($$anchor4, div_10);
|
|
8470
7356
|
});
|
|
8471
|
-
|
|
8472
|
-
|
|
8473
|
-
|
|
8474
|
-
|
|
8475
|
-
|
|
8476
|
-
|
|
8477
|
-
|
|
8478
|
-
|
|
7357
|
+
reset(div_8);
|
|
7358
|
+
template_effect(() => set_text(text_4, get(L).allDay));
|
|
7359
|
+
append($$anchor3, div_8);
|
|
7360
|
+
};
|
|
7361
|
+
if_block(node_9, ($$render) => {
|
|
7362
|
+
if (get(hasAllDayRow)) $$render(consequent_7);
|
|
7363
|
+
});
|
|
7364
|
+
}
|
|
7365
|
+
reset(div_3);
|
|
7366
|
+
append($$anchor2, div_3);
|
|
8479
7367
|
};
|
|
8480
|
-
if_block(
|
|
8481
|
-
if (get(hasAllDayRow)) $$render(
|
|
7368
|
+
if_block(node_3, ($$render) => {
|
|
7369
|
+
if (!get(hideDayHead) || get(hasAllDayRow)) $$render(consequent_8);
|
|
8482
7370
|
});
|
|
8483
7371
|
}
|
|
8484
|
-
|
|
8485
|
-
var div_11 = sibling(div_3, 2);
|
|
7372
|
+
var div_11 = sibling(node_3, 2);
|
|
8486
7373
|
let styles_3;
|
|
8487
7374
|
var div_12 = child(div_11);
|
|
8488
7375
|
set_style(div_12, "", {}, { width: "48px" });
|
|
8489
|
-
var
|
|
8490
|
-
each(
|
|
7376
|
+
var node_13 = child(div_12);
|
|
7377
|
+
each(node_13, 17, () => ({ length: get(hourCount) }), index, ($$anchor2, _, i) => {
|
|
8491
7378
|
var fragment_1 = comment();
|
|
8492
|
-
var
|
|
7379
|
+
var node_14 = first_child(fragment_1);
|
|
8493
7380
|
{
|
|
8494
|
-
var
|
|
8495
|
-
var span_7 =
|
|
7381
|
+
var consequent_9 = ($$anchor3) => {
|
|
7382
|
+
var span_7 = root_13$3();
|
|
8496
7383
|
set_style(span_7, "", {}, { top: `${i * HOUR_H}px` });
|
|
8497
7384
|
var text_6 = child(span_7, true);
|
|
8498
7385
|
reset(span_7);
|
|
8499
7386
|
template_effect(($0) => set_text(text_6, $0), [() => fmtH(get(startHour) + i, $$props.locale)]);
|
|
8500
7387
|
append($$anchor3, span_7);
|
|
8501
7388
|
};
|
|
8502
|
-
if_block(
|
|
8503
|
-
if (i > 0) $$render(
|
|
7389
|
+
if_block(node_14, ($$render) => {
|
|
7390
|
+
if (i > 0) $$render(consequent_9);
|
|
8504
7391
|
});
|
|
8505
7392
|
}
|
|
8506
7393
|
append($$anchor2, fragment_1);
|
|
8507
7394
|
});
|
|
8508
|
-
var
|
|
7395
|
+
var node_15 = sibling(node_13, 2);
|
|
8509
7396
|
{
|
|
8510
|
-
var
|
|
8511
|
-
var span_8 =
|
|
7397
|
+
var consequent_10 = ($$anchor2) => {
|
|
7398
|
+
var span_8 = root_14$3();
|
|
8512
7399
|
let styles_4;
|
|
8513
7400
|
template_effect(() => styles_4 = set_style(span_8, "", styles_4, { top: `${get(nowY) ?? ""}px` }));
|
|
8514
7401
|
append($$anchor2, span_8);
|
|
8515
7402
|
};
|
|
8516
|
-
if_block(
|
|
8517
|
-
if (get(nowY) !== null && get(weekHasToday)) $$render(
|
|
7403
|
+
if_block(node_15, ($$render) => {
|
|
7404
|
+
if (get(nowY) !== null && get(weekHasToday)) $$render(consequent_10);
|
|
8518
7405
|
});
|
|
8519
7406
|
}
|
|
8520
7407
|
reset(div_12);
|
|
8521
7408
|
var div_13 = sibling(div_12, 2);
|
|
8522
7409
|
var div_14 = child(div_13);
|
|
8523
7410
|
each(div_14, 21, () => ({ length: get(hourCount) }), index, ($$anchor2, _, i) => {
|
|
8524
|
-
var fragment_2 =
|
|
7411
|
+
var fragment_2 = root_15$3();
|
|
8525
7412
|
var div_15 = first_child(fragment_2);
|
|
8526
7413
|
set_style(div_15, "", {}, { top: `${i * HOUR_H}px` });
|
|
8527
7414
|
var div_16 = sibling(div_15, 2);
|
|
@@ -8529,42 +7416,42 @@ globalThis.__DAY_CALENDAR_CSS__ = ":host{display:block}\n\t/* ─── Containe
|
|
|
8529
7416
|
append($$anchor2, fragment_2);
|
|
8530
7417
|
});
|
|
8531
7418
|
reset(div_14);
|
|
8532
|
-
var
|
|
8533
|
-
each(
|
|
7419
|
+
var node_16 = sibling(div_14, 2);
|
|
7420
|
+
each(node_16, 17, () => get(dayCols), (day) => day.ms, ($$anchor2, day) => {
|
|
8534
7421
|
const positioned = /* @__PURE__ */ user_derived(() => get(layoutByDay).get(get(day).ms) ?? []);
|
|
8535
7422
|
const ghost = /* @__PURE__ */ user_derived(() => ghostForDay(get(day).ms));
|
|
8536
|
-
var div_17 =
|
|
7423
|
+
var div_17 = root_27$2();
|
|
8537
7424
|
let classes_5;
|
|
8538
|
-
var
|
|
7425
|
+
var node_17 = child(div_17);
|
|
8539
7426
|
{
|
|
8540
|
-
var
|
|
7427
|
+
var consequent_14 = ($$anchor3) => {
|
|
8541
7428
|
var fragment_3 = comment();
|
|
8542
|
-
var
|
|
8543
|
-
each(
|
|
7429
|
+
var node_18 = first_child(fragment_3);
|
|
7430
|
+
each(node_18, 17, () => get(blockedSlots), index, ($$anchor4, slot) => {
|
|
8544
7431
|
var fragment_4 = comment();
|
|
8545
|
-
var
|
|
7432
|
+
var node_19 = first_child(fragment_4);
|
|
8546
7433
|
{
|
|
8547
|
-
var
|
|
7434
|
+
var consequent_13 = ($$anchor5) => {
|
|
8548
7435
|
const s = /* @__PURE__ */ user_derived(() => Math.max(get(slot).start, get(startHour)));
|
|
8549
7436
|
const e = /* @__PURE__ */ user_derived(() => Math.min(get(slot).end, get(endHour)));
|
|
8550
7437
|
var fragment_5 = comment();
|
|
8551
|
-
var
|
|
7438
|
+
var node_20 = first_child(fragment_5);
|
|
8552
7439
|
{
|
|
8553
|
-
var
|
|
7440
|
+
var consequent_12 = ($$anchor6) => {
|
|
8554
7441
|
const range = /* @__PURE__ */ user_derived(() => blockedRangeLabel(get(day).ms, get(slot).start, get(slot).end));
|
|
8555
|
-
var div_18 =
|
|
7442
|
+
var div_18 = root_17$3();
|
|
8556
7443
|
let styles_5;
|
|
8557
|
-
var
|
|
7444
|
+
var node_21 = child(div_18);
|
|
8558
7445
|
{
|
|
8559
|
-
var
|
|
8560
|
-
var span_9 =
|
|
7446
|
+
var consequent_11 = ($$anchor7) => {
|
|
7447
|
+
var span_9 = root_16$3();
|
|
8561
7448
|
var text_7 = child(span_9, true);
|
|
8562
7449
|
reset(span_9);
|
|
8563
7450
|
template_effect(() => set_text(text_7, get(slot).label));
|
|
8564
7451
|
append($$anchor7, span_9);
|
|
8565
7452
|
};
|
|
8566
|
-
if_block(
|
|
8567
|
-
if (get(slot).label) $$render(
|
|
7453
|
+
if_block(node_21, ($$render) => {
|
|
7454
|
+
if (get(slot).label) $$render(consequent_11);
|
|
8568
7455
|
});
|
|
8569
7456
|
}
|
|
8570
7457
|
reset(div_18);
|
|
@@ -8578,55 +7465,55 @@ globalThis.__DAY_CALENDAR_CSS__ = ":host{display:block}\n\t/* ─── Containe
|
|
|
8578
7465
|
});
|
|
8579
7466
|
append($$anchor6, div_18);
|
|
8580
7467
|
};
|
|
8581
|
-
if_block(
|
|
8582
|
-
if (get(e) > get(s)) $$render(
|
|
7468
|
+
if_block(node_20, ($$render) => {
|
|
7469
|
+
if (get(e) > get(s)) $$render(consequent_12);
|
|
8583
7470
|
});
|
|
8584
7471
|
}
|
|
8585
7472
|
append($$anchor5, fragment_5);
|
|
8586
7473
|
};
|
|
8587
|
-
if_block(
|
|
8588
|
-
if (!get(slot).day || get(slot).day === get(day).isoDay) $$render(
|
|
7474
|
+
if_block(node_19, ($$render) => {
|
|
7475
|
+
if (!get(slot).day || get(slot).day === get(day).isoDay) $$render(consequent_13);
|
|
8589
7476
|
});
|
|
8590
7477
|
}
|
|
8591
7478
|
append($$anchor4, fragment_4);
|
|
8592
7479
|
});
|
|
8593
7480
|
append($$anchor3, fragment_3);
|
|
8594
7481
|
};
|
|
8595
|
-
if_block(
|
|
8596
|
-
if (get(blockedSlots)?.length) $$render(
|
|
7482
|
+
if_block(node_17, ($$render) => {
|
|
7483
|
+
if (get(blockedSlots)?.length) $$render(consequent_14);
|
|
8597
7484
|
});
|
|
8598
7485
|
}
|
|
8599
|
-
var
|
|
8600
|
-
each(
|
|
7486
|
+
var node_22 = sibling(node_17, 2);
|
|
7487
|
+
each(node_22, 17, () => get(positioned), (p) => p.ev.id, ($$anchor3, p) => {
|
|
8601
7488
|
const isCurrent = /* @__PURE__ */ user_derived(() => get(nowIds).has(get(p).ev.id));
|
|
8602
|
-
var div_19 =
|
|
7489
|
+
var div_19 = root_22$2();
|
|
8603
7490
|
let classes_6;
|
|
8604
7491
|
let styles_6;
|
|
8605
7492
|
var div_20 = sibling(child(div_19), 2);
|
|
8606
|
-
var
|
|
8607
|
-
EventContent(
|
|
7493
|
+
var node_23 = child(div_20);
|
|
7494
|
+
EventContent(node_23, {
|
|
8608
7495
|
get event() {
|
|
8609
7496
|
return get(p).ev;
|
|
8610
7497
|
},
|
|
8611
7498
|
children: ($$anchor4, $$slotProps) => {
|
|
8612
|
-
var fragment_6 =
|
|
7499
|
+
var fragment_6 = root_19$3();
|
|
8613
7500
|
var span_10 = first_child(fragment_6);
|
|
8614
7501
|
var text_8 = child(span_10);
|
|
8615
7502
|
reset(span_10);
|
|
8616
7503
|
var span_11 = sibling(span_10, 2);
|
|
8617
7504
|
var text_9 = child(span_11, true);
|
|
8618
7505
|
reset(span_11);
|
|
8619
|
-
var
|
|
7506
|
+
var node_24 = sibling(span_11, 2);
|
|
8620
7507
|
{
|
|
8621
|
-
var
|
|
8622
|
-
var span_12 =
|
|
7508
|
+
var consequent_15 = ($$anchor5) => {
|
|
7509
|
+
var span_12 = root_18$3();
|
|
8623
7510
|
var text_10 = child(span_12, true);
|
|
8624
7511
|
reset(span_12);
|
|
8625
7512
|
template_effect(() => set_text(text_10, get(p).ev.location));
|
|
8626
7513
|
append($$anchor5, span_12);
|
|
8627
7514
|
};
|
|
8628
|
-
if_block(
|
|
8629
|
-
if (get(p).ev.location && get(p).height > 56) $$render(
|
|
7515
|
+
if_block(node_24, ($$render) => {
|
|
7516
|
+
if (get(p).ev.location && get(p).height > 56) $$render(consequent_15);
|
|
8630
7517
|
});
|
|
8631
7518
|
}
|
|
8632
7519
|
template_effect(
|
|
@@ -8644,28 +7531,28 @@ globalThis.__DAY_CALENDAR_CSS__ = ":host{display:block}\n\t/* ─── Containe
|
|
|
8644
7531
|
$$slots: { default: true }
|
|
8645
7532
|
});
|
|
8646
7533
|
reset(div_20);
|
|
8647
|
-
var
|
|
7534
|
+
var node_25 = sibling(div_20, 2);
|
|
8648
7535
|
{
|
|
8649
|
-
var
|
|
8650
|
-
var span_13 =
|
|
7536
|
+
var consequent_16 = ($$anchor4) => {
|
|
7537
|
+
var span_13 = root_20$3();
|
|
8651
7538
|
append($$anchor4, span_13);
|
|
8652
7539
|
};
|
|
8653
|
-
if_block(
|
|
8654
|
-
if (get(isCurrent)) $$render(
|
|
7540
|
+
if_block(node_25, ($$render) => {
|
|
7541
|
+
if (get(isCurrent)) $$render(consequent_16);
|
|
8655
7542
|
});
|
|
8656
7543
|
}
|
|
8657
|
-
var
|
|
7544
|
+
var node_26 = sibling(node_25, 2);
|
|
8658
7545
|
{
|
|
8659
|
-
var
|
|
8660
|
-
var fragment_7 =
|
|
7546
|
+
var consequent_17 = ($$anchor4) => {
|
|
7547
|
+
var fragment_7 = root_21$3();
|
|
8661
7548
|
var span_14 = first_child(fragment_7);
|
|
8662
7549
|
var span_15 = sibling(span_14, 2);
|
|
8663
7550
|
delegated("pointerdown", span_14, (e) => onResizePointerDown(e, get(p).ev, "start"));
|
|
8664
7551
|
delegated("pointerdown", span_15, (e) => onResizePointerDown(e, get(p).ev, "end"));
|
|
8665
7552
|
append($$anchor4, fragment_7);
|
|
8666
7553
|
};
|
|
8667
|
-
if_block(
|
|
8668
|
-
if (!readOnly() && !get(p).ev.data?.readOnly) $$render(
|
|
7554
|
+
if_block(node_26, ($$render) => {
|
|
7555
|
+
if (!readOnly() && !get(p).ev.data?.readOnly) $$render(consequent_17);
|
|
8669
7556
|
});
|
|
8670
7557
|
}
|
|
8671
7558
|
reset(div_19);
|
|
@@ -8711,30 +7598,30 @@ globalThis.__DAY_CALENDAR_CSS__ = ":host{display:block}\n\t/* ─── Containe
|
|
|
8711
7598
|
});
|
|
8712
7599
|
append($$anchor3, div_19);
|
|
8713
7600
|
});
|
|
8714
|
-
var
|
|
7601
|
+
var node_27 = sibling(node_22, 2);
|
|
8715
7602
|
{
|
|
8716
|
-
var
|
|
8717
|
-
var div_21 =
|
|
7603
|
+
var consequent_20 = ($$anchor3) => {
|
|
7604
|
+
var div_21 = root_25$2();
|
|
8718
7605
|
let classes_7;
|
|
8719
7606
|
let styles_7;
|
|
8720
|
-
var
|
|
7607
|
+
var node_28 = child(div_21);
|
|
8721
7608
|
{
|
|
8722
|
-
var
|
|
8723
|
-
var fragment_8 =
|
|
7609
|
+
var consequent_19 = ($$anchor4) => {
|
|
7610
|
+
var fragment_8 = root_24$2();
|
|
8724
7611
|
var span_16 = first_child(fragment_8);
|
|
8725
7612
|
var text_11 = child(span_16);
|
|
8726
7613
|
reset(span_16);
|
|
8727
|
-
var
|
|
7614
|
+
var node_29 = sibling(span_16, 2);
|
|
8728
7615
|
{
|
|
8729
|
-
var
|
|
8730
|
-
var span_17 =
|
|
7616
|
+
var consequent_18 = ($$anchor5) => {
|
|
7617
|
+
var span_17 = root_23$2();
|
|
8731
7618
|
var text_12 = child(span_17, true);
|
|
8732
7619
|
reset(span_17);
|
|
8733
7620
|
template_effect(() => set_text(text_12, get(movingEvent).title));
|
|
8734
7621
|
append($$anchor5, span_17);
|
|
8735
7622
|
};
|
|
8736
|
-
if_block(
|
|
8737
|
-
if (!get(ghost).create && get(movingEvent)) $$render(
|
|
7623
|
+
if_block(node_29, ($$render) => {
|
|
7624
|
+
if (!get(ghost).create && get(movingEvent)) $$render(consequent_18);
|
|
8738
7625
|
});
|
|
8739
7626
|
}
|
|
8740
7627
|
template_effect(($0, $1) => set_text(text_11, `${$0 ?? ""} – ${$1 ?? ""}`), [
|
|
@@ -8743,8 +7630,8 @@ globalThis.__DAY_CALENDAR_CSS__ = ":host{display:block}\n\t/* ─── Containe
|
|
|
8743
7630
|
]);
|
|
8744
7631
|
append($$anchor4, fragment_8);
|
|
8745
7632
|
};
|
|
8746
|
-
if_block(
|
|
8747
|
-
if (get(ghost).showTime) $$render(
|
|
7633
|
+
if_block(node_28, ($$render) => {
|
|
7634
|
+
if (get(ghost).showTime) $$render(consequent_19);
|
|
8748
7635
|
});
|
|
8749
7636
|
}
|
|
8750
7637
|
reset(div_21);
|
|
@@ -8758,14 +7645,14 @@ globalThis.__DAY_CALENDAR_CSS__ = ":host{display:block}\n\t/* ─── Containe
|
|
|
8758
7645
|
});
|
|
8759
7646
|
append($$anchor3, div_21);
|
|
8760
7647
|
};
|
|
8761
|
-
if_block(
|
|
8762
|
-
if (get(ghost)) $$render(
|
|
7648
|
+
if_block(node_27, ($$render) => {
|
|
7649
|
+
if (get(ghost)) $$render(consequent_20);
|
|
8763
7650
|
});
|
|
8764
7651
|
}
|
|
8765
|
-
var
|
|
7652
|
+
var node_30 = sibling(node_27, 2);
|
|
8766
7653
|
{
|
|
8767
|
-
var
|
|
8768
|
-
var div_22 =
|
|
7654
|
+
var consequent_21 = ($$anchor3) => {
|
|
7655
|
+
var div_22 = root_26$2();
|
|
8769
7656
|
let styles_8;
|
|
8770
7657
|
template_effect(() => {
|
|
8771
7658
|
set_attribute(div_22, "aria-label", get(L).currentTime);
|
|
@@ -8773,8 +7660,8 @@ globalThis.__DAY_CALENDAR_CSS__ = ":host{display:block}\n\t/* ─── Containe
|
|
|
8773
7660
|
});
|
|
8774
7661
|
append($$anchor3, div_22);
|
|
8775
7662
|
};
|
|
8776
|
-
if_block(
|
|
8777
|
-
if (get(day).isToday && get(nowY) !== null) $$render(
|
|
7663
|
+
if_block(node_30, ($$render) => {
|
|
7664
|
+
if (get(day).isToday && get(nowY) !== null) $$render(consequent_21);
|
|
8778
7665
|
});
|
|
8779
7666
|
}
|
|
8780
7667
|
reset(div_17);
|
|
@@ -8795,17 +7682,17 @@ globalThis.__DAY_CALENDAR_CSS__ = ":host{display:block}\n\t/* ─── Containe
|
|
|
8795
7682
|
reset(div_2);
|
|
8796
7683
|
reset(div_1);
|
|
8797
7684
|
bind_this(div_1, ($$value) => scrollEl = $$value, () => scrollEl);
|
|
8798
|
-
var
|
|
7685
|
+
var node_31 = sibling(div_1, 2);
|
|
8799
7686
|
{
|
|
8800
|
-
var
|
|
8801
|
-
var div_23 =
|
|
8802
|
-
var
|
|
8803
|
-
snippet(
|
|
7687
|
+
var consequent_22 = ($$anchor2) => {
|
|
7688
|
+
var div_23 = root_28$2();
|
|
7689
|
+
var node_32 = child(div_23);
|
|
7690
|
+
snippet(node_32, () => ctx.emptySnippet);
|
|
8804
7691
|
reset(div_23);
|
|
8805
7692
|
append($$anchor2, div_23);
|
|
8806
7693
|
};
|
|
8807
|
-
if_block(
|
|
8808
|
-
if (get(weekIsEmpty) && ctx.emptySnippet) $$render(
|
|
7694
|
+
if_block(node_31, ($$render) => {
|
|
7695
|
+
if (get(weekIsEmpty) && ctx.emptySnippet) $$render(consequent_22);
|
|
8809
7696
|
});
|
|
8810
7697
|
}
|
|
8811
7698
|
reset(div);
|
|
@@ -8828,21 +7715,14 @@ globalThis.__DAY_CALENDAR_CSS__ = ":host{display:block}\n\t/* ─── Containe
|
|
|
8828
7715
|
var rest_excludes$2 = /* @__PURE__ */ new Set(["$$slots", "$$events", "$$legacy", "mode"]);
|
|
8829
7716
|
function Planner($$anchor, $$props) {
|
|
8830
7717
|
let mode = prop($$props, "mode", 3, "week"), rest = /* @__PURE__ */ rest_props($$props, rest_excludes$2);
|
|
8831
|
-
|
|
8832
|
-
|
|
8833
|
-
|
|
8834
|
-
|
|
8835
|
-
|
|
8836
|
-
}
|
|
8837
|
-
|
|
8838
|
-
|
|
8839
|
-
};
|
|
8840
|
-
if_block(node, ($$render) => {
|
|
8841
|
-
if (mode() === "day") $$render(consequent);
|
|
8842
|
-
else $$render(alternate, -1);
|
|
8843
|
-
});
|
|
8844
|
-
}
|
|
8845
|
-
append($$anchor, fragment);
|
|
7718
|
+
PlannerWeek($$anchor, spread_props(
|
|
7719
|
+
{
|
|
7720
|
+
get mode() {
|
|
7721
|
+
return mode();
|
|
7722
|
+
}
|
|
7723
|
+
},
|
|
7724
|
+
() => rest
|
|
7725
|
+
));
|
|
8846
7726
|
}
|
|
8847
7727
|
function fmtTime(d, locale) {
|
|
8848
7728
|
return fmtTime$1(d, locale);
|
|
@@ -8888,33 +7768,34 @@ globalThis.__DAY_CALENDAR_CSS__ = ":host{display:block}\n\t/* ─── Containe
|
|
|
8888
7768
|
}
|
|
8889
7769
|
var root$4 = /* @__PURE__ */ from_html(`<span class="ag-day-head-badge svelte-n8lbn1"> </span>`);
|
|
8890
7770
|
var root_1$5 = /* @__PURE__ */ from_html(`<span class="ag-day-head-badge ag-day-head-badge--muted svelte-n8lbn1"> </span>`);
|
|
8891
|
-
var root_2$5 = /* @__PURE__ */ from_html(`<
|
|
8892
|
-
var root_3$5 = /* @__PURE__ */ from_html(`<
|
|
8893
|
-
var root_4$5 = /* @__PURE__ */ from_html(`<div class="ag-
|
|
8894
|
-
var root_5$5 = /* @__PURE__ */ from_html(`<
|
|
8895
|
-
var root_6$5 = /* @__PURE__ */ from_html(`<span class="ag-compact-row-
|
|
8896
|
-
var root_7$5 = /* @__PURE__ */ from_html(`<span class="ag-compact-row-
|
|
8897
|
-
var root_8$5 = /* @__PURE__ */ from_html(`<
|
|
8898
|
-
var root_9$3 = /* @__PURE__ */ from_html(`<
|
|
8899
|
-
var root_10$3 = /* @__PURE__ */ from_html(`<div class="ag-
|
|
8900
|
-
var root_11$3 = /* @__PURE__ */ from_html(`<
|
|
8901
|
-
var root_12$3 = /* @__PURE__ */ from_html(`<div class="ag-q-
|
|
8902
|
-
var root_13$2 = /* @__PURE__ */ from_html(`<
|
|
8903
|
-
var root_14$2 = /* @__PURE__ */ from_html(`<button type="button" class="ag-q-done-
|
|
8904
|
-
var root_15$2 = /* @__PURE__ */ from_html(`<
|
|
8905
|
-
var root_16$2 = /* @__PURE__ */ from_html(`<
|
|
8906
|
-
var root_17$2 = /* @__PURE__ */ from_html(`<span class="ag-
|
|
8907
|
-
var root_18$2 = /* @__PURE__ */ from_html(`<span class="ag-card-
|
|
8908
|
-
var root_19$2 = /* @__PURE__ */ from_html(`<
|
|
8909
|
-
var root_20$2 = /* @__PURE__ */ from_html(`<div class="ag-card-
|
|
8910
|
-
var root_21$2 = /* @__PURE__ */ from_html(`<
|
|
8911
|
-
var root_22$1 = /* @__PURE__ */ from_html(`<
|
|
8912
|
-
var root_23$1 = /* @__PURE__ */ from_html(`<
|
|
8913
|
-
var root_24$1 = /* @__PURE__ */ from_html(`<
|
|
8914
|
-
var root_25$1 = /* @__PURE__ */ from_html(`<
|
|
8915
|
-
var root_26$1 = /* @__PURE__ */ from_html(`<
|
|
8916
|
-
var root_27$1 = /* @__PURE__ */ from_html(`<div class="ag-
|
|
8917
|
-
var root_28$1 = /* @__PURE__ */ from_html(`<div
|
|
7771
|
+
var root_2$5 = /* @__PURE__ */ from_html(`<div class="ag-day-head svelte-n8lbn1"><!> <span class="ag-day-head-name svelte-n8lbn1"> </span> <span class="ag-day-head-date svelte-n8lbn1"> </span></div>`);
|
|
7772
|
+
var root_3$5 = /* @__PURE__ */ from_html(`<button type="button"><span class="ag-allday-dot svelte-n8lbn1"></span> <span class="ag-allday-title svelte-n8lbn1"> </span></button>`);
|
|
7773
|
+
var root_4$5 = /* @__PURE__ */ from_html(`<div class="ag-allday svelte-n8lbn1"><div class="ag-allday-label svelte-n8lbn1"> </div> <div class="ag-allday-items svelte-n8lbn1"></div></div>`);
|
|
7774
|
+
var root_5$5 = /* @__PURE__ */ from_html(`<div class="ag-q-empty svelte-n8lbn1"><!></div>`);
|
|
7775
|
+
var root_6$5 = /* @__PURE__ */ from_html(`<span class="ag-compact-row-sub svelte-n8lbn1"> </span>`);
|
|
7776
|
+
var root_7$5 = /* @__PURE__ */ from_html(`<span class="ag-compact-row-tag svelte-n8lbn1"> </span>`);
|
|
7777
|
+
var root_8$5 = /* @__PURE__ */ from_html(`<span class="ag-compact-row-time svelte-n8lbn1"> </span> <div class="ag-compact-row-main svelte-n8lbn1"><span class="ag-compact-row-title svelte-n8lbn1"> </span> <!> <!></div> <span class="ag-compact-row-dur svelte-n8lbn1"> </span>`, 1);
|
|
7778
|
+
var root_9$3 = /* @__PURE__ */ from_html(`<button type="button"><!></button>`);
|
|
7779
|
+
var root_10$3 = /* @__PURE__ */ from_html(`<div class="ag-compact-list svelte-n8lbn1"><!></div>`);
|
|
7780
|
+
var root_11$3 = /* @__PURE__ */ from_html(`<div class="ag-q-now-sub svelte-n8lbn1"> </div>`);
|
|
7781
|
+
var root_12$3 = /* @__PURE__ */ from_html(`<button type="button"><div class="ag-q-now-dot svelte-n8lbn1"></div> <div class="ag-q-now-title svelte-n8lbn1"> </div> <!> <div class="ag-q-now-time svelte-n8lbn1"> </div> <div class="ag-q-now-track svelte-n8lbn1"><div class="ag-q-now-fill svelte-n8lbn1"></div></div></button>`);
|
|
7782
|
+
var root_13$2 = /* @__PURE__ */ from_html(`<div class="ag-q-free svelte-n8lbn1"><div class="ag-q-free-label svelte-n8lbn1"> </div></div>`);
|
|
7783
|
+
var root_14$2 = /* @__PURE__ */ from_html(`<button type="button"><span class="ag-q-done-check svelte-n8lbn1">✓</span> <span class="ag-q-done-title svelte-n8lbn1"> </span></button>`);
|
|
7784
|
+
var root_15$2 = /* @__PURE__ */ from_html(`<button type="button" class="ag-q-done-toggle svelte-n8lbn1"> </button>`);
|
|
7785
|
+
var root_16$2 = /* @__PURE__ */ from_html(`<div class="ag-q-done-section svelte-n8lbn1"><div class="ag-q-label svelte-n8lbn1"> </div> <!> <!></div>`);
|
|
7786
|
+
var root_17$2 = /* @__PURE__ */ from_html(`<span class="ag-compact-row-time svelte-n8lbn1"> </span> <div class="ag-compact-row-main svelte-n8lbn1"><span class="ag-compact-row-title svelte-n8lbn1"> </span> <!></div>`, 1);
|
|
7787
|
+
var root_18$2 = /* @__PURE__ */ from_html(`<span class="ag-card-sub svelte-n8lbn1"> </span>`);
|
|
7788
|
+
var root_19$2 = /* @__PURE__ */ from_html(`<span class="ag-card-tag svelte-n8lbn1"> </span>`);
|
|
7789
|
+
var root_20$2 = /* @__PURE__ */ from_html(`<div class="ag-card-tags svelte-n8lbn1"></div>`);
|
|
7790
|
+
var root_21$2 = /* @__PURE__ */ from_html(`<div class="ag-card-top svelte-n8lbn1"><span class="ag-card-title svelte-n8lbn1"> </span> <span class="ag-card-eta svelte-n8lbn1"> </span></div> <!> <div class="ag-card-meta svelte-n8lbn1"> <span class="ag-card-dur svelte-n8lbn1"> </span></div> <!>`, 1);
|
|
7791
|
+
var root_22$1 = /* @__PURE__ */ from_html(`<button type="button"><div class="ag-card-body svelte-n8lbn1"><!></div></button>`);
|
|
7792
|
+
var root_23$1 = /* @__PURE__ */ from_html(`<div class="ag-q svelte-n8lbn1"><div class="ag-q-status svelte-n8lbn1"><div class="ag-q-label svelte-n8lbn1"> <span class="ag-q-clock svelte-n8lbn1"> </span></div> <!> <!></div> <div class="ag-q-queue svelte-n8lbn1"><div class="ag-q-label svelte-n8lbn1"> </div> <!></div></div>`);
|
|
7793
|
+
var root_24$1 = /* @__PURE__ */ from_html(`<button type="button"><span class="ag-log-check svelte-n8lbn1">✓</span> <span class="ag-log-time svelte-n8lbn1"> </span> <span class="ag-log-dot svelte-n8lbn1"></span> <span class="ag-log-title svelte-n8lbn1"> </span> <span class="ag-log-dur svelte-n8lbn1"> </span></button>`);
|
|
7794
|
+
var root_25$1 = /* @__PURE__ */ from_html(`<div class="ag-log svelte-n8lbn1"><!></div>`);
|
|
7795
|
+
var root_26$1 = /* @__PURE__ */ from_html(`<span class="ag-card-loc svelte-n8lbn1"> </span>`);
|
|
7796
|
+
var root_27$1 = /* @__PURE__ */ from_html(`<div class="ag-card-top svelte-n8lbn1"><span class="ag-card-order svelte-n8lbn1"> </span> <span class="ag-card-title svelte-n8lbn1"> </span></div> <!> <!> <div class="ag-card-meta svelte-n8lbn1"> <span class="ag-card-dur svelte-n8lbn1"> </span></div> <!>`, 1);
|
|
7797
|
+
var root_28$1 = /* @__PURE__ */ from_html(`<div class="ag-plan svelte-n8lbn1"><!></div>`);
|
|
7798
|
+
var root_29$1 = /* @__PURE__ */ from_html(`<div><div class="ag-body svelte-n8lbn1" role="group"><!> <!> <!></div></div>`);
|
|
8918
7799
|
function AgendaDay($$anchor, $$props) {
|
|
8919
7800
|
push($$props, true);
|
|
8920
7801
|
const ctx = useCalendarContext();
|
|
@@ -8924,6 +7805,8 @@ globalThis.__DAY_CALENDAR_CSS__ = ":host{display:block}\n\t/* ─── Containe
|
|
|
8924
7805
|
const clock = createClock(ctx.timezone);
|
|
8925
7806
|
const viewState = /* @__PURE__ */ user_derived(() => ctx.viewState);
|
|
8926
7807
|
const equalDays = /* @__PURE__ */ user_derived(() => ctx.equalDays);
|
|
7808
|
+
const showDates = /* @__PURE__ */ user_derived(() => ctx.showDates);
|
|
7809
|
+
const hideDayHead = /* @__PURE__ */ user_derived(() => get(showDates) && !!get(viewState));
|
|
8927
7810
|
const isMobile = /* @__PURE__ */ user_derived(() => ctx.isMobile);
|
|
8928
7811
|
const autoHeight = /* @__PURE__ */ user_derived(() => ctx.autoHeight);
|
|
8929
7812
|
const compact = /* @__PURE__ */ user_derived(() => ctx.compact);
|
|
@@ -8999,49 +7882,69 @@ globalThis.__DAY_CALENDAR_CSS__ = ":host{display:block}\n\t/* ─── Containe
|
|
|
8999
7882
|
let showAllDone = /* @__PURE__ */ state(false);
|
|
9000
7883
|
const visibleDone = /* @__PURE__ */ user_derived(() => get(showAllDone) ? get(dayCat).past : get(dayCat).past.slice(-DONE_VISIBLE));
|
|
9001
7884
|
const hiddenDoneCount = /* @__PURE__ */ user_derived(() => get(showAllDone) ? 0 : Math.max(0, get(dayCat).past.length - DONE_VISIBLE));
|
|
9002
|
-
var div =
|
|
7885
|
+
var div = root_29$1();
|
|
9003
7886
|
let classes;
|
|
9004
7887
|
let styles;
|
|
9005
7888
|
var div_1 = child(div);
|
|
9006
|
-
var
|
|
9007
|
-
var node = child(div_2);
|
|
7889
|
+
var node = child(div_1);
|
|
9008
7890
|
{
|
|
9009
|
-
var
|
|
9010
|
-
var
|
|
9011
|
-
var
|
|
9012
|
-
|
|
9013
|
-
|
|
9014
|
-
|
|
9015
|
-
|
|
9016
|
-
|
|
9017
|
-
|
|
9018
|
-
|
|
9019
|
-
|
|
9020
|
-
|
|
9021
|
-
|
|
7891
|
+
var consequent_2 = ($$anchor2) => {
|
|
7892
|
+
var div_2 = root_2$5();
|
|
7893
|
+
var node_1 = child(div_2);
|
|
7894
|
+
{
|
|
7895
|
+
var consequent = ($$anchor3) => {
|
|
7896
|
+
var span = root$4();
|
|
7897
|
+
var text2 = child(span, true);
|
|
7898
|
+
reset(span);
|
|
7899
|
+
template_effect(() => set_text(text2, get(L).today));
|
|
7900
|
+
append($$anchor3, span);
|
|
7901
|
+
};
|
|
7902
|
+
var consequent_1 = ($$anchor3) => {
|
|
7903
|
+
var span_1 = root_1$5();
|
|
7904
|
+
var text_1 = child(span_1, true);
|
|
7905
|
+
reset(span_1);
|
|
7906
|
+
template_effect(() => set_text(text_1, get(L).tomorrow));
|
|
7907
|
+
append($$anchor3, span_1);
|
|
7908
|
+
};
|
|
7909
|
+
if_block(node_1, ($$render) => {
|
|
7910
|
+
if (!get(equalDays) && get(isToday)) $$render(consequent);
|
|
7911
|
+
else if (!get(equalDays) && get(isTomorrow)) $$render(consequent_1, 1);
|
|
7912
|
+
});
|
|
7913
|
+
}
|
|
7914
|
+
var span_2 = sibling(node_1, 2);
|
|
7915
|
+
var text_2 = child(span_2, true);
|
|
7916
|
+
reset(span_2);
|
|
7917
|
+
var span_3 = sibling(span_2, 2);
|
|
7918
|
+
var text_3 = child(span_3);
|
|
7919
|
+
reset(span_3);
|
|
7920
|
+
reset(div_2);
|
|
7921
|
+
template_effect(
|
|
7922
|
+
($0, $1, $2) => {
|
|
7923
|
+
set_text(text_2, $0);
|
|
7924
|
+
set_text(text_3, `${$1 ?? ""} ${$2 ?? ""}`);
|
|
7925
|
+
},
|
|
7926
|
+
[
|
|
7927
|
+
() => weekdayLong(get(dayMs), $$props.locale),
|
|
7928
|
+
() => monthLong(get(dayMs), $$props.locale),
|
|
7929
|
+
() => dayNum(get(dayMs))
|
|
7930
|
+
]
|
|
7931
|
+
);
|
|
7932
|
+
append($$anchor2, div_2);
|
|
9022
7933
|
};
|
|
9023
7934
|
if_block(node, ($$render) => {
|
|
9024
|
-
if (!get(
|
|
9025
|
-
else if (!get(equalDays) && get(isTomorrow)) $$render(consequent_1, 1);
|
|
7935
|
+
if (!get(hideDayHead)) $$render(consequent_2);
|
|
9026
7936
|
});
|
|
9027
7937
|
}
|
|
9028
|
-
var
|
|
9029
|
-
var text_2 = child(span_2, true);
|
|
9030
|
-
reset(span_2);
|
|
9031
|
-
var span_3 = sibling(span_2, 2);
|
|
9032
|
-
var text_3 = child(span_3);
|
|
9033
|
-
reset(span_3);
|
|
9034
|
-
reset(div_2);
|
|
9035
|
-
var node_1 = sibling(div_2, 2);
|
|
7938
|
+
var node_2 = sibling(node, 2);
|
|
9036
7939
|
{
|
|
9037
|
-
var
|
|
9038
|
-
var div_3 =
|
|
7940
|
+
var consequent_3 = ($$anchor2) => {
|
|
7941
|
+
var div_3 = root_4$5();
|
|
9039
7942
|
var div_4 = child(div_3);
|
|
9040
7943
|
var text_4 = child(div_4, true);
|
|
9041
7944
|
reset(div_4);
|
|
9042
7945
|
var div_5 = sibling(div_4, 2);
|
|
9043
7946
|
each(div_5, 21, () => get(allDayBanner), (ev) => ev.id, ($$anchor3, ev) => {
|
|
9044
|
-
var button =
|
|
7947
|
+
var button = root_3$5();
|
|
9045
7948
|
let classes_1;
|
|
9046
7949
|
let styles_1;
|
|
9047
7950
|
var span_4 = sibling(child(button), 2);
|
|
@@ -9065,24 +7968,24 @@ globalThis.__DAY_CALENDAR_CSS__ = ":host{display:block}\n\t/* ─── Containe
|
|
|
9065
7968
|
template_effect(() => set_text(text_4, get(L).allDay));
|
|
9066
7969
|
append($$anchor2, div_3);
|
|
9067
7970
|
};
|
|
9068
|
-
if_block(
|
|
9069
|
-
if (get(allDayBanner).length > 0) $$render(
|
|
7971
|
+
if_block(node_2, ($$render) => {
|
|
7972
|
+
if (get(allDayBanner).length > 0) $$render(consequent_3);
|
|
9070
7973
|
});
|
|
9071
7974
|
}
|
|
9072
|
-
var
|
|
7975
|
+
var node_3 = sibling(node_2, 2);
|
|
9073
7976
|
{
|
|
9074
|
-
var
|
|
9075
|
-
var div_6 =
|
|
9076
|
-
var
|
|
7977
|
+
var consequent_8 = ($$anchor2) => {
|
|
7978
|
+
var div_6 = root_10$3();
|
|
7979
|
+
var node_4 = child(div_6);
|
|
9077
7980
|
{
|
|
9078
|
-
var
|
|
9079
|
-
var div_7 =
|
|
9080
|
-
var
|
|
7981
|
+
var consequent_5 = ($$anchor3) => {
|
|
7982
|
+
var div_7 = root_5$5();
|
|
7983
|
+
var node_5 = child(div_7);
|
|
9081
7984
|
{
|
|
9082
|
-
var
|
|
7985
|
+
var consequent_4 = ($$anchor4) => {
|
|
9083
7986
|
var fragment = comment();
|
|
9084
|
-
var
|
|
9085
|
-
snippet(
|
|
7987
|
+
var node_6 = first_child(fragment);
|
|
7988
|
+
snippet(node_6, () => get(emptySnippet));
|
|
9086
7989
|
append($$anchor4, fragment);
|
|
9087
7990
|
};
|
|
9088
7991
|
var alternate = ($$anchor4) => {
|
|
@@ -9090,8 +7993,8 @@ globalThis.__DAY_CALENDAR_CSS__ = ":host{display:block}\n\t/* ─── Containe
|
|
|
9090
7993
|
template_effect(() => set_text(text_6, get(L).nothingScheduledYet));
|
|
9091
7994
|
append($$anchor4, text_6);
|
|
9092
7995
|
};
|
|
9093
|
-
if_block(
|
|
9094
|
-
if (get(emptySnippet)) $$render(
|
|
7996
|
+
if_block(node_5, ($$render) => {
|
|
7997
|
+
if (get(emptySnippet)) $$render(consequent_4);
|
|
9095
7998
|
else $$render(alternate, -1);
|
|
9096
7999
|
});
|
|
9097
8000
|
}
|
|
@@ -9100,45 +8003,45 @@ globalThis.__DAY_CALENDAR_CSS__ = ":host{display:block}\n\t/* ─── Containe
|
|
|
9100
8003
|
};
|
|
9101
8004
|
var alternate_1 = ($$anchor3) => {
|
|
9102
8005
|
var fragment_2 = comment();
|
|
9103
|
-
var
|
|
9104
|
-
each(
|
|
9105
|
-
var button_1 =
|
|
8006
|
+
var node_7 = first_child(fragment_2);
|
|
8007
|
+
each(node_7, 17, () => get(timedDayEvents), (ev) => ev.id, ($$anchor4, ev) => {
|
|
8008
|
+
var button_1 = root_9$3();
|
|
9106
8009
|
let classes_2;
|
|
9107
8010
|
let styles_2;
|
|
9108
|
-
var
|
|
9109
|
-
EventContent(
|
|
8011
|
+
var node_8 = child(button_1);
|
|
8012
|
+
EventContent(node_8, {
|
|
9110
8013
|
get event() {
|
|
9111
8014
|
return get(ev);
|
|
9112
8015
|
},
|
|
9113
8016
|
children: ($$anchor5, $$slotProps) => {
|
|
9114
|
-
var fragment_3 =
|
|
9115
|
-
var span_5 =
|
|
8017
|
+
var fragment_3 = root_8$5();
|
|
8018
|
+
var span_5 = first_child(fragment_3);
|
|
9116
8019
|
var text_7 = child(span_5, true);
|
|
9117
8020
|
reset(span_5);
|
|
9118
8021
|
var div_8 = sibling(span_5, 2);
|
|
9119
8022
|
var span_6 = child(div_8);
|
|
9120
8023
|
var text_8 = child(span_6, true);
|
|
9121
8024
|
reset(span_6);
|
|
9122
|
-
var
|
|
8025
|
+
var node_9 = sibling(span_6, 2);
|
|
9123
8026
|
{
|
|
9124
|
-
var
|
|
9125
|
-
var span_7 =
|
|
8027
|
+
var consequent_6 = ($$anchor6) => {
|
|
8028
|
+
var span_7 = root_6$5();
|
|
9126
8029
|
var text_9 = child(span_7, true);
|
|
9127
8030
|
reset(span_7);
|
|
9128
8031
|
template_effect(() => set_text(text_9, get(ev).subtitle));
|
|
9129
8032
|
append($$anchor6, span_7);
|
|
9130
8033
|
};
|
|
9131
|
-
if_block(
|
|
9132
|
-
if (get(ev).subtitle) $$render(
|
|
8034
|
+
if_block(node_9, ($$render) => {
|
|
8035
|
+
if (get(ev).subtitle) $$render(consequent_6);
|
|
9133
8036
|
});
|
|
9134
8037
|
}
|
|
9135
|
-
var
|
|
8038
|
+
var node_10 = sibling(node_9, 2);
|
|
9136
8039
|
{
|
|
9137
|
-
var
|
|
8040
|
+
var consequent_7 = ($$anchor6) => {
|
|
9138
8041
|
var fragment_4 = comment();
|
|
9139
|
-
var
|
|
9140
|
-
each(
|
|
9141
|
-
var span_8 =
|
|
8042
|
+
var node_11 = first_child(fragment_4);
|
|
8043
|
+
each(node_11, 17, () => get(ev).tags, index, ($$anchor7, tag) => {
|
|
8044
|
+
var span_8 = root_7$5();
|
|
9142
8045
|
var text_10 = child(span_8, true);
|
|
9143
8046
|
reset(span_8);
|
|
9144
8047
|
template_effect(() => set_text(text_10, get(tag)));
|
|
@@ -9146,8 +8049,8 @@ globalThis.__DAY_CALENDAR_CSS__ = ":host{display:block}\n\t/* ─── Containe
|
|
|
9146
8049
|
});
|
|
9147
8050
|
append($$anchor6, fragment_4);
|
|
9148
8051
|
};
|
|
9149
|
-
if_block(
|
|
9150
|
-
if (get(ev).tags?.length) $$render(
|
|
8052
|
+
if_block(node_10, ($$render) => {
|
|
8053
|
+
if (get(ev).tags?.length) $$render(consequent_7);
|
|
9151
8054
|
});
|
|
9152
8055
|
}
|
|
9153
8056
|
reset(div_8);
|
|
@@ -9185,16 +8088,16 @@ globalThis.__DAY_CALENDAR_CSS__ = ":host{display:block}\n\t/* ─── Containe
|
|
|
9185
8088
|
});
|
|
9186
8089
|
append($$anchor3, fragment_2);
|
|
9187
8090
|
};
|
|
9188
|
-
if_block(
|
|
9189
|
-
if (get(timedDayEvents).length === 0 && get(allDayBanner).length === 0) $$render(
|
|
8091
|
+
if_block(node_4, ($$render) => {
|
|
8092
|
+
if (get(timedDayEvents).length === 0 && get(allDayBanner).length === 0) $$render(consequent_5);
|
|
9190
8093
|
else $$render(alternate_1, -1);
|
|
9191
8094
|
});
|
|
9192
8095
|
}
|
|
9193
8096
|
reset(div_6);
|
|
9194
8097
|
append($$anchor2, div_6);
|
|
9195
8098
|
};
|
|
9196
|
-
var
|
|
9197
|
-
var div_9 =
|
|
8099
|
+
var consequent_19 = ($$anchor2) => {
|
|
8100
|
+
var div_9 = root_23$1();
|
|
9198
8101
|
var div_10 = child(div_9);
|
|
9199
8102
|
var div_11 = child(div_10);
|
|
9200
8103
|
var text_12 = child(div_11);
|
|
@@ -9202,32 +8105,32 @@ globalThis.__DAY_CALENDAR_CSS__ = ":host{display:block}\n\t/* ─── Containe
|
|
|
9202
8105
|
var text_13 = child(span_10, true);
|
|
9203
8106
|
reset(span_10);
|
|
9204
8107
|
reset(div_11);
|
|
9205
|
-
var
|
|
8108
|
+
var node_12 = sibling(div_11, 2);
|
|
9206
8109
|
{
|
|
9207
|
-
var
|
|
8110
|
+
var consequent_10 = ($$anchor3) => {
|
|
9208
8111
|
var fragment_5 = comment();
|
|
9209
|
-
var
|
|
9210
|
-
each(
|
|
9211
|
-
var button_2 =
|
|
8112
|
+
var node_13 = first_child(fragment_5);
|
|
8113
|
+
each(node_13, 17, () => get(dayCat).current, (ev) => ev.id, ($$anchor4, ev) => {
|
|
8114
|
+
var button_2 = root_12$3();
|
|
9212
8115
|
let classes_3;
|
|
9213
8116
|
let styles_3;
|
|
9214
8117
|
var div_12 = sibling(child(button_2), 2);
|
|
9215
8118
|
var text_14 = child(div_12, true);
|
|
9216
8119
|
reset(div_12);
|
|
9217
|
-
var
|
|
8120
|
+
var node_14 = sibling(div_12, 2);
|
|
9218
8121
|
{
|
|
9219
|
-
var
|
|
9220
|
-
var div_13 =
|
|
8122
|
+
var consequent_9 = ($$anchor5) => {
|
|
8123
|
+
var div_13 = root_11$3();
|
|
9221
8124
|
var text_15 = child(div_13, true);
|
|
9222
8125
|
reset(div_13);
|
|
9223
8126
|
template_effect(() => set_text(text_15, get(ev).subtitle));
|
|
9224
8127
|
append($$anchor5, div_13);
|
|
9225
8128
|
};
|
|
9226
|
-
if_block(
|
|
9227
|
-
if (get(ev).subtitle) $$render(
|
|
8129
|
+
if_block(node_14, ($$render) => {
|
|
8130
|
+
if (get(ev).subtitle) $$render(consequent_9);
|
|
9228
8131
|
});
|
|
9229
8132
|
}
|
|
9230
|
-
var div_14 = sibling(
|
|
8133
|
+
var div_14 = sibling(node_14, 2);
|
|
9231
8134
|
var text_16 = child(div_14);
|
|
9232
8135
|
reset(div_14);
|
|
9233
8136
|
var div_15 = sibling(div_14, 2);
|
|
@@ -9257,7 +8160,7 @@ globalThis.__DAY_CALENDAR_CSS__ = ":host{display:block}\n\t/* ─── Containe
|
|
|
9257
8160
|
append($$anchor3, fragment_5);
|
|
9258
8161
|
};
|
|
9259
8162
|
var alternate_2 = ($$anchor3) => {
|
|
9260
|
-
var div_17 =
|
|
8163
|
+
var div_17 = root_13$2();
|
|
9261
8164
|
var div_18 = child(div_17);
|
|
9262
8165
|
var text_17 = child(div_18, true);
|
|
9263
8166
|
reset(div_18);
|
|
@@ -9265,21 +8168,21 @@ globalThis.__DAY_CALENDAR_CSS__ = ":host{display:block}\n\t/* ─── Containe
|
|
|
9265
8168
|
template_effect(() => set_text(text_17, get(L).free));
|
|
9266
8169
|
append($$anchor3, div_17);
|
|
9267
8170
|
};
|
|
9268
|
-
if_block(
|
|
9269
|
-
if (get(dayCat).current.length > 0) $$render(
|
|
8171
|
+
if_block(node_12, ($$render) => {
|
|
8172
|
+
if (get(dayCat).current.length > 0) $$render(consequent_10);
|
|
9270
8173
|
else $$render(alternate_2, -1);
|
|
9271
8174
|
});
|
|
9272
8175
|
}
|
|
9273
|
-
var
|
|
8176
|
+
var node_15 = sibling(node_12, 2);
|
|
9274
8177
|
{
|
|
9275
|
-
var
|
|
9276
|
-
var div_19 =
|
|
8178
|
+
var consequent_12 = ($$anchor3) => {
|
|
8179
|
+
var div_19 = root_16$2();
|
|
9277
8180
|
var div_20 = child(div_19);
|
|
9278
8181
|
var text_18 = child(div_20, true);
|
|
9279
8182
|
reset(div_20);
|
|
9280
|
-
var
|
|
9281
|
-
each(
|
|
9282
|
-
var button_3 =
|
|
8183
|
+
var node_16 = sibling(div_20, 2);
|
|
8184
|
+
each(node_16, 17, () => get(visibleDone), (ev) => ev.id, ($$anchor4, ev) => {
|
|
8185
|
+
var button_3 = root_14$2();
|
|
9283
8186
|
let classes_4;
|
|
9284
8187
|
var span_11 = sibling(child(button_3), 2);
|
|
9285
8188
|
var text_19 = child(span_11, true);
|
|
@@ -9298,10 +8201,10 @@ globalThis.__DAY_CALENDAR_CSS__ = ":host{display:block}\n\t/* ─── Containe
|
|
|
9298
8201
|
delegated("click", button_3, () => handleClick(get(ev)));
|
|
9299
8202
|
append($$anchor4, button_3);
|
|
9300
8203
|
});
|
|
9301
|
-
var
|
|
8204
|
+
var node_17 = sibling(node_16, 2);
|
|
9302
8205
|
{
|
|
9303
|
-
var
|
|
9304
|
-
var button_4 =
|
|
8206
|
+
var consequent_11 = ($$anchor4) => {
|
|
8207
|
+
var button_4 = root_15$2();
|
|
9305
8208
|
var text_20 = child(button_4, true);
|
|
9306
8209
|
reset(button_4);
|
|
9307
8210
|
template_effect(($0) => set_text(text_20, $0), [
|
|
@@ -9310,16 +8213,16 @@ globalThis.__DAY_CALENDAR_CSS__ = ":host{display:block}\n\t/* ─── Containe
|
|
|
9310
8213
|
delegated("click", button_4, () => set(showAllDone, !get(showAllDone)));
|
|
9311
8214
|
append($$anchor4, button_4);
|
|
9312
8215
|
};
|
|
9313
|
-
if_block(
|
|
9314
|
-
if (get(hiddenDoneCount) > 0) $$render(
|
|
8216
|
+
if_block(node_17, ($$render) => {
|
|
8217
|
+
if (get(hiddenDoneCount) > 0) $$render(consequent_11);
|
|
9315
8218
|
});
|
|
9316
8219
|
}
|
|
9317
8220
|
reset(div_19);
|
|
9318
8221
|
template_effect(() => set_text(text_18, get(L).done));
|
|
9319
8222
|
append($$anchor3, div_19);
|
|
9320
8223
|
};
|
|
9321
|
-
if_block(
|
|
9322
|
-
if (get(dayCat).past.length > 0) $$render(
|
|
8224
|
+
if_block(node_15, ($$render) => {
|
|
8225
|
+
if (get(dayCat).past.length > 0) $$render(consequent_12);
|
|
9323
8226
|
});
|
|
9324
8227
|
}
|
|
9325
8228
|
reset(div_10);
|
|
@@ -9327,16 +8230,16 @@ globalThis.__DAY_CALENDAR_CSS__ = ":host{display:block}\n\t/* ─── Containe
|
|
|
9327
8230
|
var div_22 = child(div_21);
|
|
9328
8231
|
var text_21 = child(div_22, true);
|
|
9329
8232
|
reset(div_22);
|
|
9330
|
-
var
|
|
8233
|
+
var node_18 = sibling(div_22, 2);
|
|
9331
8234
|
{
|
|
9332
|
-
var
|
|
9333
|
-
var div_23 =
|
|
9334
|
-
var
|
|
8235
|
+
var consequent_14 = ($$anchor3) => {
|
|
8236
|
+
var div_23 = root_5$5();
|
|
8237
|
+
var node_19 = child(div_23);
|
|
9335
8238
|
{
|
|
9336
|
-
var
|
|
8239
|
+
var consequent_13 = ($$anchor4) => {
|
|
9337
8240
|
var fragment_6 = comment();
|
|
9338
|
-
var
|
|
9339
|
-
snippet(
|
|
8241
|
+
var node_20 = first_child(fragment_6);
|
|
8242
|
+
snippet(node_20, () => get(emptySnippet));
|
|
9340
8243
|
append($$anchor4, fragment_6);
|
|
9341
8244
|
};
|
|
9342
8245
|
var alternate_3 = ($$anchor4) => {
|
|
@@ -9344,8 +8247,8 @@ globalThis.__DAY_CALENDAR_CSS__ = ":host{display:block}\n\t/* ─── Containe
|
|
|
9344
8247
|
template_effect(() => set_text(text_22, get(dayCat).past.length > 0 ? get(L).allDoneForToday : get(L).nothingScheduled));
|
|
9345
8248
|
append($$anchor4, text_22);
|
|
9346
8249
|
};
|
|
9347
|
-
if_block(
|
|
9348
|
-
if (get(emptySnippet)) $$render(
|
|
8250
|
+
if_block(node_19, ($$render) => {
|
|
8251
|
+
if (get(emptySnippet)) $$render(consequent_13);
|
|
9349
8252
|
else $$render(alternate_3, -1);
|
|
9350
8253
|
});
|
|
9351
8254
|
}
|
|
@@ -9354,40 +8257,40 @@ globalThis.__DAY_CALENDAR_CSS__ = ":host{display:block}\n\t/* ─── Containe
|
|
|
9354
8257
|
};
|
|
9355
8258
|
var alternate_5 = ($$anchor3) => {
|
|
9356
8259
|
var fragment_8 = comment();
|
|
9357
|
-
var
|
|
9358
|
-
each(
|
|
8260
|
+
var node_21 = first_child(fragment_8);
|
|
8261
|
+
each(node_21, 19, () => get(upcomingNext), (ev) => ev.id, ($$anchor4, ev, i) => {
|
|
9359
8262
|
var fragment_9 = comment();
|
|
9360
|
-
var
|
|
8263
|
+
var node_22 = first_child(fragment_9);
|
|
9361
8264
|
{
|
|
9362
|
-
var
|
|
9363
|
-
var button_5 =
|
|
8265
|
+
var consequent_16 = ($$anchor5) => {
|
|
8266
|
+
var button_5 = root_9$3();
|
|
9364
8267
|
let classes_5;
|
|
9365
8268
|
let styles_5;
|
|
9366
|
-
var
|
|
9367
|
-
EventContent(
|
|
8269
|
+
var node_23 = child(button_5);
|
|
8270
|
+
EventContent(node_23, {
|
|
9368
8271
|
get event() {
|
|
9369
8272
|
return get(ev);
|
|
9370
8273
|
},
|
|
9371
8274
|
children: ($$anchor6, $$slotProps) => {
|
|
9372
|
-
var fragment_10 =
|
|
9373
|
-
var span_12 =
|
|
8275
|
+
var fragment_10 = root_17$2();
|
|
8276
|
+
var span_12 = first_child(fragment_10);
|
|
9374
8277
|
var text_23 = child(span_12, true);
|
|
9375
8278
|
reset(span_12);
|
|
9376
8279
|
var div_24 = sibling(span_12, 2);
|
|
9377
8280
|
var span_13 = child(div_24);
|
|
9378
8281
|
var text_24 = child(span_13, true);
|
|
9379
8282
|
reset(span_13);
|
|
9380
|
-
var
|
|
8283
|
+
var node_24 = sibling(span_13, 2);
|
|
9381
8284
|
{
|
|
9382
|
-
var
|
|
9383
|
-
var span_14 =
|
|
8285
|
+
var consequent_15 = ($$anchor7) => {
|
|
8286
|
+
var span_14 = root_6$5();
|
|
9384
8287
|
var text_25 = child(span_14, true);
|
|
9385
8288
|
reset(span_14);
|
|
9386
8289
|
template_effect(() => set_text(text_25, get(ev).subtitle));
|
|
9387
8290
|
append($$anchor7, span_14);
|
|
9388
8291
|
};
|
|
9389
|
-
if_block(
|
|
9390
|
-
if (get(ev).subtitle) $$render(
|
|
8292
|
+
if_block(node_24, ($$render) => {
|
|
8293
|
+
if (get(ev).subtitle) $$render(consequent_15);
|
|
9391
8294
|
});
|
|
9392
8295
|
}
|
|
9393
8296
|
reset(div_24);
|
|
@@ -9418,17 +8321,17 @@ globalThis.__DAY_CALENDAR_CSS__ = ":host{display:block}\n\t/* ─── Containe
|
|
|
9418
8321
|
append($$anchor5, button_5);
|
|
9419
8322
|
};
|
|
9420
8323
|
var alternate_4 = ($$anchor5) => {
|
|
9421
|
-
var button_6 =
|
|
8324
|
+
var button_6 = root_22$1();
|
|
9422
8325
|
let classes_6;
|
|
9423
8326
|
let styles_6;
|
|
9424
8327
|
var div_25 = child(button_6);
|
|
9425
|
-
var
|
|
9426
|
-
EventContent(
|
|
8328
|
+
var node_25 = child(div_25);
|
|
8329
|
+
EventContent(node_25, {
|
|
9427
8330
|
get event() {
|
|
9428
8331
|
return get(ev);
|
|
9429
8332
|
},
|
|
9430
8333
|
children: ($$anchor6, $$slotProps) => {
|
|
9431
|
-
var fragment_11 =
|
|
8334
|
+
var fragment_11 = root_21$2();
|
|
9432
8335
|
var div_26 = first_child(fragment_11);
|
|
9433
8336
|
var span_15 = child(div_26);
|
|
9434
8337
|
var text_26 = child(span_15, true);
|
|
@@ -9437,31 +8340,31 @@ globalThis.__DAY_CALENDAR_CSS__ = ":host{display:block}\n\t/* ─── Containe
|
|
|
9437
8340
|
var text_27 = child(span_16, true);
|
|
9438
8341
|
reset(span_16);
|
|
9439
8342
|
reset(div_26);
|
|
9440
|
-
var
|
|
8343
|
+
var node_26 = sibling(div_26, 2);
|
|
9441
8344
|
{
|
|
9442
|
-
var
|
|
9443
|
-
var span_17 =
|
|
8345
|
+
var consequent_17 = ($$anchor7) => {
|
|
8346
|
+
var span_17 = root_18$2();
|
|
9444
8347
|
var text_28 = child(span_17, true);
|
|
9445
8348
|
reset(span_17);
|
|
9446
8349
|
template_effect(() => set_text(text_28, get(ev).subtitle));
|
|
9447
8350
|
append($$anchor7, span_17);
|
|
9448
8351
|
};
|
|
9449
|
-
if_block(
|
|
9450
|
-
if (get(ev).subtitle) $$render(
|
|
8352
|
+
if_block(node_26, ($$render) => {
|
|
8353
|
+
if (get(ev).subtitle) $$render(consequent_17);
|
|
9451
8354
|
});
|
|
9452
8355
|
}
|
|
9453
|
-
var div_27 = sibling(
|
|
8356
|
+
var div_27 = sibling(node_26, 2);
|
|
9454
8357
|
var text_29 = child(div_27);
|
|
9455
8358
|
var span_18 = sibling(text_29);
|
|
9456
8359
|
var text_30 = child(span_18, true);
|
|
9457
8360
|
reset(span_18);
|
|
9458
8361
|
reset(div_27);
|
|
9459
|
-
var
|
|
8362
|
+
var node_27 = sibling(div_27, 2);
|
|
9460
8363
|
{
|
|
9461
|
-
var
|
|
9462
|
-
var div_28 =
|
|
8364
|
+
var consequent_18 = ($$anchor7) => {
|
|
8365
|
+
var div_28 = root_20$2();
|
|
9463
8366
|
each(div_28, 21, () => get(ev).tags, index, ($$anchor8, tag) => {
|
|
9464
|
-
var span_19 =
|
|
8367
|
+
var span_19 = root_19$2();
|
|
9465
8368
|
var text_31 = child(span_19, true);
|
|
9466
8369
|
reset(span_19);
|
|
9467
8370
|
template_effect(() => set_text(text_31, get(tag)));
|
|
@@ -9470,8 +8373,8 @@ globalThis.__DAY_CALENDAR_CSS__ = ":host{display:block}\n\t/* ─── Containe
|
|
|
9470
8373
|
reset(div_28);
|
|
9471
8374
|
append($$anchor7, div_28);
|
|
9472
8375
|
};
|
|
9473
|
-
if_block(
|
|
9474
|
-
if (get(ev).tags?.length) $$render(
|
|
8376
|
+
if_block(node_27, ($$render) => {
|
|
8377
|
+
if (get(ev).tags?.length) $$render(consequent_18);
|
|
9475
8378
|
});
|
|
9476
8379
|
}
|
|
9477
8380
|
template_effect(
|
|
@@ -9509,8 +8412,8 @@ globalThis.__DAY_CALENDAR_CSS__ = ":host{display:block}\n\t/* ─── Containe
|
|
|
9509
8412
|
event("pointerenter", button_6, () => get(oneventhover)?.(get(ev)));
|
|
9510
8413
|
append($$anchor5, button_6);
|
|
9511
8414
|
};
|
|
9512
|
-
if_block(
|
|
9513
|
-
if (get(i) >= UPCOMING_CARDS) $$render(
|
|
8415
|
+
if_block(node_22, ($$render) => {
|
|
8416
|
+
if (get(i) >= UPCOMING_CARDS) $$render(consequent_16);
|
|
9514
8417
|
else $$render(alternate_4, -1);
|
|
9515
8418
|
});
|
|
9516
8419
|
}
|
|
@@ -9518,8 +8421,8 @@ globalThis.__DAY_CALENDAR_CSS__ = ":host{display:block}\n\t/* ─── Containe
|
|
|
9518
8421
|
});
|
|
9519
8422
|
append($$anchor3, fragment_8);
|
|
9520
8423
|
};
|
|
9521
|
-
if_block(
|
|
9522
|
-
if (get(upcomingNext).length === 0) $$render(
|
|
8424
|
+
if_block(node_18, ($$render) => {
|
|
8425
|
+
if (get(upcomingNext).length === 0) $$render(consequent_14);
|
|
9523
8426
|
else $$render(alternate_5, -1);
|
|
9524
8427
|
});
|
|
9525
8428
|
}
|
|
@@ -9532,18 +8435,18 @@ globalThis.__DAY_CALENDAR_CSS__ = ":host{display:block}\n\t/* ─── Containe
|
|
|
9532
8435
|
});
|
|
9533
8436
|
append($$anchor2, div_9);
|
|
9534
8437
|
};
|
|
9535
|
-
var
|
|
9536
|
-
var div_29 =
|
|
9537
|
-
var
|
|
8438
|
+
var consequent_22 = ($$anchor2) => {
|
|
8439
|
+
var div_29 = root_25$1();
|
|
8440
|
+
var node_28 = child(div_29);
|
|
9538
8441
|
{
|
|
9539
|
-
var
|
|
9540
|
-
var div_30 =
|
|
9541
|
-
var
|
|
8442
|
+
var consequent_21 = ($$anchor3) => {
|
|
8443
|
+
var div_30 = root_5$5();
|
|
8444
|
+
var node_29 = child(div_30);
|
|
9542
8445
|
{
|
|
9543
|
-
var
|
|
8446
|
+
var consequent_20 = ($$anchor4) => {
|
|
9544
8447
|
var fragment_12 = comment();
|
|
9545
|
-
var
|
|
9546
|
-
snippet(
|
|
8448
|
+
var node_30 = first_child(fragment_12);
|
|
8449
|
+
snippet(node_30, () => get(emptySnippet));
|
|
9547
8450
|
append($$anchor4, fragment_12);
|
|
9548
8451
|
};
|
|
9549
8452
|
var alternate_6 = ($$anchor4) => {
|
|
@@ -9551,8 +8454,8 @@ globalThis.__DAY_CALENDAR_CSS__ = ":host{display:block}\n\t/* ─── Containe
|
|
|
9551
8454
|
template_effect(() => set_text(text_32, get(L).nothingWasScheduled));
|
|
9552
8455
|
append($$anchor4, text_32);
|
|
9553
8456
|
};
|
|
9554
|
-
if_block(
|
|
9555
|
-
if (get(emptySnippet)) $$render(
|
|
8457
|
+
if_block(node_29, ($$render) => {
|
|
8458
|
+
if (get(emptySnippet)) $$render(consequent_20);
|
|
9556
8459
|
else $$render(alternate_6, -1);
|
|
9557
8460
|
});
|
|
9558
8461
|
}
|
|
@@ -9561,9 +8464,9 @@ globalThis.__DAY_CALENDAR_CSS__ = ":host{display:block}\n\t/* ─── Containe
|
|
|
9561
8464
|
};
|
|
9562
8465
|
var alternate_7 = ($$anchor3) => {
|
|
9563
8466
|
var fragment_14 = comment();
|
|
9564
|
-
var
|
|
9565
|
-
each(
|
|
9566
|
-
var button_7 =
|
|
8467
|
+
var node_31 = first_child(fragment_14);
|
|
8468
|
+
each(node_31, 17, () => get(timedDayEvents), (ev) => ev.id, ($$anchor4, ev) => {
|
|
8469
|
+
var button_7 = root_24$1();
|
|
9567
8470
|
let classes_7;
|
|
9568
8471
|
let styles_7;
|
|
9569
8472
|
var span_20 = sibling(child(button_7), 2);
|
|
@@ -9601,8 +8504,8 @@ globalThis.__DAY_CALENDAR_CSS__ = ":host{display:block}\n\t/* ─── Containe
|
|
|
9601
8504
|
});
|
|
9602
8505
|
append($$anchor3, fragment_14);
|
|
9603
8506
|
};
|
|
9604
|
-
if_block(
|
|
9605
|
-
if (get(timedDayEvents).length === 0 && get(allDayBanner).length === 0) $$render(
|
|
8507
|
+
if_block(node_28, ($$render) => {
|
|
8508
|
+
if (get(timedDayEvents).length === 0 && get(allDayBanner).length === 0) $$render(consequent_21);
|
|
9606
8509
|
else $$render(alternate_7, -1);
|
|
9607
8510
|
});
|
|
9608
8511
|
}
|
|
@@ -9610,17 +8513,17 @@ globalThis.__DAY_CALENDAR_CSS__ = ":host{display:block}\n\t/* ─── Containe
|
|
|
9610
8513
|
append($$anchor2, div_29);
|
|
9611
8514
|
};
|
|
9612
8515
|
var alternate_10 = ($$anchor2) => {
|
|
9613
|
-
var div_31 =
|
|
9614
|
-
var
|
|
8516
|
+
var div_31 = root_28$1();
|
|
8517
|
+
var node_32 = child(div_31);
|
|
9615
8518
|
{
|
|
9616
|
-
var
|
|
9617
|
-
var div_32 =
|
|
9618
|
-
var
|
|
8519
|
+
var consequent_24 = ($$anchor3) => {
|
|
8520
|
+
var div_32 = root_5$5();
|
|
8521
|
+
var node_33 = child(div_32);
|
|
9619
8522
|
{
|
|
9620
|
-
var
|
|
8523
|
+
var consequent_23 = ($$anchor4) => {
|
|
9621
8524
|
var fragment_15 = comment();
|
|
9622
|
-
var
|
|
9623
|
-
snippet(
|
|
8525
|
+
var node_34 = first_child(fragment_15);
|
|
8526
|
+
snippet(node_34, () => get(emptySnippet));
|
|
9624
8527
|
append($$anchor4, fragment_15);
|
|
9625
8528
|
};
|
|
9626
8529
|
var alternate_8 = ($$anchor4) => {
|
|
@@ -9628,8 +8531,8 @@ globalThis.__DAY_CALENDAR_CSS__ = ":host{display:block}\n\t/* ─── Containe
|
|
|
9628
8531
|
template_effect(() => set_text(text_36, get(L).nothingScheduledYet));
|
|
9629
8532
|
append($$anchor4, text_36);
|
|
9630
8533
|
};
|
|
9631
|
-
if_block(
|
|
9632
|
-
if (get(emptySnippet)) $$render(
|
|
8534
|
+
if_block(node_33, ($$render) => {
|
|
8535
|
+
if (get(emptySnippet)) $$render(consequent_23);
|
|
9633
8536
|
else $$render(alternate_8, -1);
|
|
9634
8537
|
});
|
|
9635
8538
|
}
|
|
@@ -9638,19 +8541,19 @@ globalThis.__DAY_CALENDAR_CSS__ = ":host{display:block}\n\t/* ─── Containe
|
|
|
9638
8541
|
};
|
|
9639
8542
|
var alternate_9 = ($$anchor3) => {
|
|
9640
8543
|
var fragment_17 = comment();
|
|
9641
|
-
var
|
|
9642
|
-
each(
|
|
9643
|
-
var button_8 =
|
|
8544
|
+
var node_35 = first_child(fragment_17);
|
|
8545
|
+
each(node_35, 19, () => get(timedDayEvents), (ev) => ev.id, ($$anchor4, ev, i) => {
|
|
8546
|
+
var button_8 = root_22$1();
|
|
9644
8547
|
let classes_8;
|
|
9645
8548
|
let styles_9;
|
|
9646
8549
|
var div_33 = child(button_8);
|
|
9647
|
-
var
|
|
9648
|
-
EventContent(
|
|
8550
|
+
var node_36 = child(div_33);
|
|
8551
|
+
EventContent(node_36, {
|
|
9649
8552
|
get event() {
|
|
9650
8553
|
return get(ev);
|
|
9651
8554
|
},
|
|
9652
8555
|
children: ($$anchor5, $$slotProps) => {
|
|
9653
|
-
var fragment_18 =
|
|
8556
|
+
var fragment_18 = root_27$1();
|
|
9654
8557
|
var div_34 = first_child(fragment_18);
|
|
9655
8558
|
var span_24 = child(div_34);
|
|
9656
8559
|
var text_37 = child(span_24, true);
|
|
@@ -9659,44 +8562,44 @@ globalThis.__DAY_CALENDAR_CSS__ = ":host{display:block}\n\t/* ─── Containe
|
|
|
9659
8562
|
var text_38 = child(span_25, true);
|
|
9660
8563
|
reset(span_25);
|
|
9661
8564
|
reset(div_34);
|
|
9662
|
-
var
|
|
8565
|
+
var node_37 = sibling(div_34, 2);
|
|
9663
8566
|
{
|
|
9664
|
-
var
|
|
9665
|
-
var span_26 =
|
|
8567
|
+
var consequent_25 = ($$anchor6) => {
|
|
8568
|
+
var span_26 = root_18$2();
|
|
9666
8569
|
var text_39 = child(span_26, true);
|
|
9667
8570
|
reset(span_26);
|
|
9668
8571
|
template_effect(() => set_text(text_39, get(ev).subtitle));
|
|
9669
8572
|
append($$anchor6, span_26);
|
|
9670
8573
|
};
|
|
9671
|
-
if_block(
|
|
9672
|
-
if (get(ev).subtitle) $$render(
|
|
8574
|
+
if_block(node_37, ($$render) => {
|
|
8575
|
+
if (get(ev).subtitle) $$render(consequent_25);
|
|
9673
8576
|
});
|
|
9674
8577
|
}
|
|
9675
|
-
var
|
|
8578
|
+
var node_38 = sibling(node_37, 2);
|
|
9676
8579
|
{
|
|
9677
|
-
var
|
|
9678
|
-
var span_27 =
|
|
8580
|
+
var consequent_26 = ($$anchor6) => {
|
|
8581
|
+
var span_27 = root_26$1();
|
|
9679
8582
|
var text_40 = child(span_27, true);
|
|
9680
8583
|
reset(span_27);
|
|
9681
8584
|
template_effect(() => set_text(text_40, get(ev).location));
|
|
9682
8585
|
append($$anchor6, span_27);
|
|
9683
8586
|
};
|
|
9684
|
-
if_block(
|
|
9685
|
-
if (get(ev).location) $$render(
|
|
8587
|
+
if_block(node_38, ($$render) => {
|
|
8588
|
+
if (get(ev).location) $$render(consequent_26);
|
|
9686
8589
|
});
|
|
9687
8590
|
}
|
|
9688
|
-
var div_35 = sibling(
|
|
8591
|
+
var div_35 = sibling(node_38, 2);
|
|
9689
8592
|
var text_41 = child(div_35);
|
|
9690
8593
|
var span_28 = sibling(text_41);
|
|
9691
8594
|
var text_42 = child(span_28, true);
|
|
9692
8595
|
reset(span_28);
|
|
9693
8596
|
reset(div_35);
|
|
9694
|
-
var
|
|
8597
|
+
var node_39 = sibling(div_35, 2);
|
|
9695
8598
|
{
|
|
9696
|
-
var
|
|
9697
|
-
var div_36 =
|
|
8599
|
+
var consequent_27 = ($$anchor6) => {
|
|
8600
|
+
var div_36 = root_20$2();
|
|
9698
8601
|
each(div_36, 21, () => get(ev).tags, index, ($$anchor7, tag) => {
|
|
9699
|
-
var span_29 =
|
|
8602
|
+
var span_29 = root_19$2();
|
|
9700
8603
|
var text_43 = child(span_29, true);
|
|
9701
8604
|
reset(span_29);
|
|
9702
8605
|
template_effect(() => set_text(text_43, get(tag)));
|
|
@@ -9705,8 +8608,8 @@ globalThis.__DAY_CALENDAR_CSS__ = ":host{display:block}\n\t/* ─── Containe
|
|
|
9705
8608
|
reset(div_36);
|
|
9706
8609
|
append($$anchor6, div_36);
|
|
9707
8610
|
};
|
|
9708
|
-
if_block(
|
|
9709
|
-
if (get(ev).tags?.length) $$render(
|
|
8611
|
+
if_block(node_39, ($$render) => {
|
|
8612
|
+
if (get(ev).tags?.length) $$render(consequent_27);
|
|
9710
8613
|
});
|
|
9711
8614
|
}
|
|
9712
8615
|
template_effect(
|
|
@@ -9753,40 +8656,35 @@ globalThis.__DAY_CALENDAR_CSS__ = ":host{display:block}\n\t/* ─── Containe
|
|
|
9753
8656
|
});
|
|
9754
8657
|
append($$anchor3, fragment_17);
|
|
9755
8658
|
};
|
|
9756
|
-
if_block(
|
|
9757
|
-
if (get(timedDayEvents).length === 0 && get(allDayBanner).length === 0) $$render(
|
|
8659
|
+
if_block(node_32, ($$render) => {
|
|
8660
|
+
if (get(timedDayEvents).length === 0 && get(allDayBanner).length === 0) $$render(consequent_24);
|
|
9758
8661
|
else $$render(alternate_9, -1);
|
|
9759
8662
|
});
|
|
9760
8663
|
}
|
|
9761
8664
|
reset(div_31);
|
|
9762
8665
|
append($$anchor2, div_31);
|
|
9763
8666
|
};
|
|
9764
|
-
if_block(
|
|
9765
|
-
if (get(compact)) $$render(
|
|
9766
|
-
else if (get(isToday)) $$render(
|
|
9767
|
-
else if (get(isPastDay)) $$render(
|
|
8667
|
+
if_block(node_3, ($$render) => {
|
|
8668
|
+
if (get(compact)) $$render(consequent_8);
|
|
8669
|
+
else if (get(isToday)) $$render(consequent_19, 1);
|
|
8670
|
+
else if (get(isPastDay)) $$render(consequent_22, 2);
|
|
9768
8671
|
else $$render(alternate_10, -1);
|
|
9769
8672
|
});
|
|
9770
8673
|
}
|
|
9771
8674
|
reset(div_1);
|
|
9772
8675
|
reset(div);
|
|
9773
8676
|
template_effect(
|
|
9774
|
-
($0
|
|
8677
|
+
($0) => {
|
|
9775
8678
|
classes = set_class(div, 1, "ag ag--day svelte-n8lbn1", null, classes, $0);
|
|
9776
8679
|
styles = set_style(div, style() || void 0, styles, { height: $$props.height ? `${$$props.height}px` : void 0 });
|
|
9777
8680
|
set_attribute(div_1, "aria-label", get(L).todaysLineup);
|
|
9778
|
-
set_text(text_2, $1);
|
|
9779
|
-
set_text(text_3, `${$2 ?? ""} ${$3 ?? ""}`);
|
|
9780
8681
|
},
|
|
9781
8682
|
[
|
|
9782
8683
|
() => ({
|
|
9783
8684
|
"ag--disabled": get(disabledSet).has(get(dayMs)),
|
|
9784
8685
|
"ag--mobile": get(isMobile),
|
|
9785
8686
|
"ag--auto": get(autoHeight)
|
|
9786
|
-
})
|
|
9787
|
-
() => weekdayLong(get(dayMs), $$props.locale),
|
|
9788
|
-
() => monthLong(get(dayMs), $$props.locale),
|
|
9789
|
-
() => dayNum(get(dayMs))
|
|
8687
|
+
})
|
|
9790
8688
|
]
|
|
9791
8689
|
);
|
|
9792
8690
|
delegated("pointerdown", div, onPointerDown);
|
|
@@ -9807,7 +8705,7 @@ globalThis.__DAY_CALENDAR_CSS__ = ":host{display:block}\n\t/* ─── Containe
|
|
|
9807
8705
|
var root_8$4 = /* @__PURE__ */ from_html(`<span class="ag-compact-loc svelte-uhwfyj"> </span>`);
|
|
9808
8706
|
var root_9$2 = /* @__PURE__ */ from_html(`<span class="ag-compact-sub svelte-uhwfyj"> </span>`);
|
|
9809
8707
|
var root_10$2 = /* @__PURE__ */ from_html(`<span class="ag-compact-tag svelte-uhwfyj"> </span>`);
|
|
9810
|
-
var root_11$2 = /* @__PURE__ */ from_html(`<span class="ag-compact-
|
|
8708
|
+
var root_11$2 = /* @__PURE__ */ from_html(`<span class="ag-compact-time svelte-uhwfyj"> </span> <div class="ag-compact-main svelte-uhwfyj"><span class="ag-compact-title svelte-uhwfyj"> </span> <!> <!> <!></div> <span class="ag-compact-dur svelte-uhwfyj"> </span>`, 1);
|
|
9811
8709
|
var root_12$2 = /* @__PURE__ */ from_html(`<button type="button"><!></button>`);
|
|
9812
8710
|
var root_13$1 = /* @__PURE__ */ from_html(`<button type="button"> <svg viewBox="0 0 16 16" fill="none" stroke="currentColor" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round" width="12" height="12" aria-hidden="true"><path d="M4 6l4 4 4-4"></path></svg></button>`);
|
|
9813
8711
|
var root_14$1 = /* @__PURE__ */ from_html(`<span class="ag-wday-date svelte-uhwfyj"> </span>`);
|
|
@@ -9986,7 +8884,7 @@ globalThis.__DAY_CALENDAR_CSS__ = ":host{display:block}\n\t/* ─── Containe
|
|
|
9986
8884
|
},
|
|
9987
8885
|
children: ($$anchor3, $$slotProps) => {
|
|
9988
8886
|
var fragment_3 = root_11$2();
|
|
9989
|
-
var span_7 =
|
|
8887
|
+
var span_7 = first_child(fragment_3);
|
|
9990
8888
|
var text_8 = child(span_7, true);
|
|
9991
8889
|
reset(span_7);
|
|
9992
8890
|
var div_4 = sibling(span_7, 2);
|
|
@@ -10104,6 +9002,7 @@ globalThis.__DAY_CALENDAR_CSS__ = ":host{display:block}\n\t/* ─── Containe
|
|
|
10104
9002
|
const isMobile = /* @__PURE__ */ user_derived(() => ctx.isMobile);
|
|
10105
9003
|
const autoHeight = /* @__PURE__ */ user_derived(() => ctx.autoHeight);
|
|
10106
9004
|
const compact = /* @__PURE__ */ user_derived(() => ctx.compact);
|
|
9005
|
+
const cols = /* @__PURE__ */ user_derived(() => ctx.columns && !get(isMobile));
|
|
10107
9006
|
const dayHeaderSnippet = /* @__PURE__ */ user_derived(() => ctx.dayHeaderSnippet);
|
|
10108
9007
|
const oneventhover = /* @__PURE__ */ user_derived(() => ctx.oneventhover);
|
|
10109
9008
|
const disabledSet = /* @__PURE__ */ user_derived(() => ctx.disabledSet);
|
|
@@ -10221,6 +9120,7 @@ globalThis.__DAY_CALENDAR_CSS__ = ":host{display:block}\n\t/* ─── Containe
|
|
|
10221
9120
|
let classes_4;
|
|
10222
9121
|
let styles_3;
|
|
10223
9122
|
var div_6 = child(div_5);
|
|
9123
|
+
let styles_4;
|
|
10224
9124
|
each(div_6, 21, () => get(weekDays), (day) => day.ms, ($$anchor2, day) => {
|
|
10225
9125
|
const expanded = /* @__PURE__ */ user_derived(() => get(day).tier === "today" || get(day).tier === "tomorrow");
|
|
10226
9126
|
var fragment_5 = comment();
|
|
@@ -10383,7 +9283,7 @@ globalThis.__DAY_CALENDAR_CSS__ = ":host{display:block}\n\t/* ─── Containe
|
|
|
10383
9283
|
const isCont = /* @__PURE__ */ user_derived(() => get(seg) !== null && get(seg).totalDays > 1);
|
|
10384
9284
|
var button_3 = root_23();
|
|
10385
9285
|
let classes_7;
|
|
10386
|
-
let
|
|
9286
|
+
let styles_5;
|
|
10387
9287
|
var span_19 = sibling(child(button_3), 2);
|
|
10388
9288
|
var text_22 = child(span_19, true);
|
|
10389
9289
|
reset(span_19);
|
|
@@ -10407,7 +9307,7 @@ globalThis.__DAY_CALENDAR_CSS__ = ":host{display:block}\n\t/* ─── Containe
|
|
|
10407
9307
|
"ag-allday-chip--selected": selectedEventId() === get(ev).id
|
|
10408
9308
|
});
|
|
10409
9309
|
set_attribute(button_3, "aria-label", `${get(ev).title ?? ""}, ${$0 ?? ""}`);
|
|
10410
|
-
|
|
9310
|
+
styles_5 = set_style(button_3, "", styles_5, { "--ev-color": get(ev).color || "var(--dt-accent)" });
|
|
10411
9311
|
set_text(text_22, get(ev).title);
|
|
10412
9312
|
},
|
|
10413
9313
|
[
|
|
@@ -10571,8 +9471,8 @@ globalThis.__DAY_CALENDAR_CSS__ = ":host{display:block}\n\t/* ─── Containe
|
|
|
10571
9471
|
};
|
|
10572
9472
|
if_block(node_25, ($$render) => {
|
|
10573
9473
|
if (get(day).events.length === 0) $$render(consequent_21);
|
|
10574
|
-
else if (get(compact)) $$render(consequent_22, 1);
|
|
10575
|
-
else if (get(equalDays)) $$render(consequent_23, 2);
|
|
9474
|
+
else if (get(compact) && !get(cols)) $$render(consequent_22, 1);
|
|
9475
|
+
else if (get(equalDays) || get(cols) && !get(expanded)) $$render(consequent_23, 2);
|
|
10576
9476
|
else if (get(expanded)) $$render(consequent_27, 3);
|
|
10577
9477
|
else $$render(alternate_1, -1);
|
|
10578
9478
|
});
|
|
@@ -10604,9 +9504,14 @@ globalThis.__DAY_CALENDAR_CSS__ = ":host{display:block}\n\t/* ─── Containe
|
|
|
10604
9504
|
reset(div_6);
|
|
10605
9505
|
reset(div_5);
|
|
10606
9506
|
template_effect(() => {
|
|
10607
|
-
classes_4 = set_class(div_5, 1, "ag ag--week svelte-uhwfyj", null, classes_4, {
|
|
9507
|
+
classes_4 = set_class(div_5, 1, "ag ag--week svelte-uhwfyj", null, classes_4, {
|
|
9508
|
+
"ag--mobile": get(isMobile),
|
|
9509
|
+
"ag--auto": get(autoHeight),
|
|
9510
|
+
"ag--cols": get(cols)
|
|
9511
|
+
});
|
|
10608
9512
|
styles_3 = set_style(div_5, style() || void 0, styles_3, { height: $$props.height ? `${$$props.height}px` : void 0 });
|
|
10609
9513
|
set_attribute(div_6, "aria-label", get(L).weekAhead);
|
|
9514
|
+
styles_4 = set_style(div_6, "", styles_4, { "--ag-cols": get(weekDays).length });
|
|
10610
9515
|
});
|
|
10611
9516
|
delegated("pointerdown", div_5, onPointerDown);
|
|
10612
9517
|
delegated("pointerup", div_5, onPointerUp);
|
|
@@ -12231,7 +11136,7 @@ globalThis.__DAY_CALENDAR_CSS__ = ":host{display:block}\n\t/* ─── Containe
|
|
|
12231
11136
|
component: MonthGrid
|
|
12232
11137
|
}
|
|
12233
11138
|
];
|
|
12234
|
-
let views = prop($$props, "views", 3, DEFAULT_VIEWS), theme = prop($$props, "theme", 3, auto), mondayStart = prop($$props, "mondayStart", 3, true), heightProp = prop($$props, "height", 3, 600), borderRadius = prop($$props, "borderRadius", 3, 12), readOnly = prop($$props, "readOnly", 3, false), snapInterval = prop($$props, "snapInterval", 3, 15), showModePills = prop($$props, "showModePills", 3, true), showNavigation = prop($$props, "showNavigation", 3, true), equalDays = prop($$props, "equalDays", 3, false), showDates = prop($$props, "showDates", 3, true), compact = prop($$props, "compact", 3, false), mobileProp = prop($$props, "mobile", 3, "auto");
|
|
11139
|
+
let views = prop($$props, "views", 3, DEFAULT_VIEWS), theme = prop($$props, "theme", 3, auto), mondayStart = prop($$props, "mondayStart", 3, true), heightProp = prop($$props, "height", 3, 600), borderRadius = prop($$props, "borderRadius", 3, 12), readOnly = prop($$props, "readOnly", 3, false), snapInterval = prop($$props, "snapInterval", 3, 15), showModePills = prop($$props, "showModePills", 3, true), showNavigation = prop($$props, "showNavigation", 3, true), equalDays = prop($$props, "equalDays", 3, false), showDates = prop($$props, "showDates", 3, true), compact = prop($$props, "compact", 3, false), columns = prop($$props, "columns", 3, false), mobileProp = prop($$props, "mobile", 3, "auto");
|
|
12235
11140
|
const unzone = (d) => $$props.timezone ? fromZonedTime(d, $$props.timezone) : d;
|
|
12236
11141
|
const effectiveCreate = /* @__PURE__ */ user_derived(() => readOnly() || !$$props.oneventcreate ? void 0 : (range) => $$props.oneventcreate({ start: unzone(range.start), end: unzone(range.end) }));
|
|
12237
11142
|
const effectiveMove = /* @__PURE__ */ user_derived(() => readOnly() || !$$props.oneventmove ? void 0 : (ev, start, end) => $$props.oneventmove(ev, unzone(start), unzone(end)));
|
|
@@ -12433,6 +11338,9 @@ globalThis.__DAY_CALENDAR_CSS__ = ":host{display:block}\n\t/* ─── Containe
|
|
|
12433
11338
|
get compact() {
|
|
12434
11339
|
return compact();
|
|
12435
11340
|
},
|
|
11341
|
+
get columns() {
|
|
11342
|
+
return columns();
|
|
11343
|
+
},
|
|
12436
11344
|
get labels() {
|
|
12437
11345
|
return get(mergedLabels);
|
|
12438
11346
|
},
|