@lekoala/date-picker 0.1.0 → 0.2.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.
@@ -1,4 +1,4 @@
1
- /*** @lekoala/date-picker v0.1.0 - https://github.com/lekoala/date-picker ***/
1
+ /*** @lekoala/date-picker v0.2.0 - https://github.com/lekoala/date-picker ***/
2
2
  (() => {
3
3
  var __defProp = Object.defineProperty;
4
4
  var __getOwnPropNames = Object.getOwnPropertyNames;
@@ -156,10 +156,15 @@
156
156
  throw new TypeError(`Invalid civil date: ${value}`);
157
157
  return toUTCDate(parsed).getUTCDay();
158
158
  }
159
- function startOfWeek(value, firstDay = 1) {
159
+ function normalizeFirstDay(firstDay) {
160
+ if (firstDay === 7)
161
+ return 0;
160
162
  if (!Number.isInteger(firstDay) || firstDay < 0 || firstDay > 6)
161
- throw new RangeError("firstDay must be 0..6");
162
- const offset = (dayOfWeek(value) - firstDay + 7) % 7;
163
+ throw new RangeError("firstDay must be 0..6 (Sunday=0, 7 accepted as Sunday alias)");
164
+ return firstDay;
165
+ }
166
+ function startOfWeek(value, firstDay = 1) {
167
+ const offset = (dayOfWeek(value) - normalizeFirstDay(firstDay) + 7) % 7;
163
168
  return addDays(value, -offset);
164
169
  }
165
170
  function endOfWeek(value, firstDay = 1) {
@@ -210,7 +215,7 @@
210
215
  class CalendarModel {
211
216
  constructor(options = {}) {
212
217
  const today = todayISO();
213
- this.firstDay = options.firstDay ?? 1;
218
+ this.firstDay = normalizeFirstDay(options.firstDay ?? 1);
214
219
  this.value = options.value && isDate(options.value) ? options.value : "";
215
220
  this.focused = options.focused && isDate(options.focused) ? options.focused : this.value || today;
216
221
  this.display = options.display ? monthKey(options.display) : monthKey(this.focused);
@@ -382,6 +387,32 @@
382
387
  timeZone: "UTC"
383
388
  }).format(toIntlDate(`${value.slice(0, 7)}-15`));
384
389
  }
390
+ function monthYearOrder(locale = "") {
391
+ const resolved = resolveLocale(locale);
392
+ try {
393
+ const parts = new Intl.DateTimeFormat(resolved, {
394
+ calendar: "gregory",
395
+ year: "numeric",
396
+ month: "long",
397
+ timeZone: "UTC"
398
+ }).formatToParts(toIntlDate("2026-09-15"));
399
+ let monthIndex = -1;
400
+ let yearIndex = -1;
401
+ parts.forEach((part, index) => {
402
+ const type = part.type;
403
+ if (type === "month") {
404
+ if (monthIndex < 0)
405
+ monthIndex = index;
406
+ } else if (type === "year" || type === "relatedYear" || type === "yearName") {
407
+ if (yearIndex < 0)
408
+ yearIndex = index;
409
+ }
410
+ });
411
+ if (monthIndex >= 0 && yearIndex >= 0)
412
+ return yearIndex < monthIndex ? ["year", "month"] : ["month", "year"];
413
+ } catch {}
414
+ return ["month", "year"];
415
+ }
385
416
  function monthNames(locale = "", style = "long") {
386
417
  const resolved = resolveLocale(locale);
387
418
  const formatter = new Intl.DateTimeFormat(resolved, { calendar: "gregory", month: style, timeZone: "UTC" });
@@ -394,10 +425,11 @@
394
425
  weekday: style,
395
426
  timeZone: "UTC"
396
427
  });
428
+ const normalized = normalizeFirstDay(firstDay);
397
429
  const sunday = toIntlDate("2026-01-04");
398
430
  return Array.from({ length: 7 }, (_, index) => {
399
431
  const date = new Date(sunday);
400
- date.setUTCDate(sunday.getUTCDate() + (firstDay + index) % 7);
432
+ date.setUTCDate(sunday.getUTCDate() + (normalized + index) % 7);
401
433
  return formatter.format(date);
402
434
  });
403
435
  }
@@ -518,6 +550,8 @@
518
550
  }
519
551
  function parseFirstDay(value) {
520
552
  const parsed = Number(value);
553
+ if (parsed === 7)
554
+ return 0;
521
555
  return Number.isInteger(parsed) && parsed >= 0 && parsed <= 6 ? parsed : 1;
522
556
  }
523
557
  function yearOf(month) {
@@ -559,7 +593,8 @@
559
593
  "locale",
560
594
  "fixed-weeks",
561
595
  "show-week-numbers",
562
- "selection"
596
+ "selection",
597
+ "month-format"
563
598
  ];
564
599
  constructor() {
565
600
  super();
@@ -681,6 +716,15 @@
681
716
  set selection(value) {
682
717
  this.setAttribute("selection", value === "none" ? "none" : "single");
683
718
  }
719
+ get monthFormat() {
720
+ return this.getAttribute("month-format") === "short" ? "short" : "long";
721
+ }
722
+ set monthFormat(value) {
723
+ if (value === "short")
724
+ this.setAttribute("month-format", "short");
725
+ else
726
+ this.removeAttribute("month-format");
727
+ }
684
728
  get highlightedRange() {
685
729
  return { ...this._highlightedRange };
686
730
  }
@@ -1101,7 +1145,7 @@
1101
1145
  const display = this.display;
1102
1146
  const displayYear = yearOf(display);
1103
1147
  const displayMonth = Number(display.slice(5, 7));
1104
- const names = monthNames(locale, "long");
1148
+ const names = monthNames(locale, this.monthFormat);
1105
1149
  const weekdayShort = weekdayNames(locale, this.firstDay, "short");
1106
1150
  const weekdayLong = weekdayNames(locale, this.firstDay, "long");
1107
1151
  const weeks = this._weeks();
@@ -1146,18 +1190,22 @@
1146
1190
  }).join("");
1147
1191
  const focusedElement = document.activeElement;
1148
1192
  const focusKey = focusedElement instanceof HTMLElement && this.contains(focusedElement) ? this._focusTargetKey(focusedElement) : "";
1193
+ const yearFirst = monthYearOrder(locale)[0] === "year";
1194
+ this.toggleAttribute("data-year-first", yearFirst);
1195
+ const monthControl = `<label class="dp-visually-hidden" for="${this._id}-month">${escapeHtml(this._messages.month)}</label>
1196
+ <select id="${this._id}-month" class="dp-month-select" aria-label="${escapeHtml(this._messages.month)}">${monthOptions}</select>`;
1197
+ const yearControl = `<label class="dp-visually-hidden" for="${this._id}-year">${escapeHtml(this._messages.year)}</label>
1198
+ <input id="${this._id}-year" class="dp-year-input" type="number" inputmode="numeric" value="${displayYear}"${minYearAttr}${maxYearAttr} aria-label="${escapeHtml(this._messages.year)}">`;
1149
1199
  this._rendering = true;
1150
1200
  this.innerHTML = `
1151
1201
  <div class="dp-calendar-shell">
1152
1202
  <div class="dp-calendar-header">
1153
- <label class="dp-visually-hidden" for="${this._id}-month">${escapeHtml(this._messages.month)}</label>
1154
- <select id="${this._id}-month" class="dp-month-select" aria-label="${escapeHtml(this._messages.month)}">${monthOptions}</select>
1155
- <label class="dp-visually-hidden" for="${this._id}-year">${escapeHtml(this._messages.year)}</label>
1156
- <input id="${this._id}-year" class="dp-year-input" type="number" inputmode="numeric" value="${displayYear}"${minYearAttr}${maxYearAttr} aria-label="${escapeHtml(this._messages.year)}">
1203
+ ${yearFirst ? yearControl : monthControl}
1204
+ ${yearFirst ? monthControl : yearControl}
1157
1205
  <button type="button" class="dp-nav dp-prev" data-calendar-action="previous" aria-label="${escapeHtml(this._messages.previousMonth)}"${prevDisabled ? " disabled" : ""}><svg aria-hidden="true" viewBox="0 0 16 16" fill="none" stroke="currentColor" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"><path d="m10 4-4 4 4 4"/></svg></button>
1158
1206
  <button type="button" class="dp-nav dp-next" data-calendar-action="next" aria-label="${escapeHtml(this._messages.nextMonth)}"${nextDisabled ? " disabled" : ""}><svg aria-hidden="true" viewBox="0 0 16 16" fill="none" stroke="currentColor" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"><path d="m6 4 4 4-4 4"/></svg></button>
1159
1207
  </div>
1160
- <h2 id="${headingId}" class="dp-calendar-heading" aria-live="polite">${escapeHtml(formatMonthYear(`${display}-15`, locale))}</h2>
1208
+ <h2 id="${headingId}" class="dp-calendar-heading dp-visually-hidden" aria-live="polite">${escapeHtml(formatMonthYear(`${display}-15`, locale))}</h2>
1161
1209
  <table id="${gridId}" class="dp-grid" role="grid" aria-labelledby="${headingId}">
1162
1210
  <thead><tr>${weekHeader}${dayHeaders}</tr></thead>
1163
1211
  <tbody>${rows}</tbody>
@@ -1166,7 +1214,11 @@
1166
1214
  this._rendering = false;
1167
1215
  if (focusKey) {
1168
1216
  queueMicrotask(() => {
1169
- const target = this.querySelector(focusKey);
1217
+ let selector = focusKey;
1218
+ if (selector.startsWith(".dp-day[data-date=")) {
1219
+ selector = `.dp-day[data-date="${CSS.escape(this._model.focused)}"]`;
1220
+ }
1221
+ const target = this.querySelector(selector);
1170
1222
  if (target instanceof HTMLElement)
1171
1223
  target.focus();
1172
1224
  });
@@ -1689,11 +1741,40 @@
1689
1741
  }
1690
1742
  }
1691
1743
 
1744
+ // src/time.js
1745
+ var TIME_RE = /^(\d{2}):(\d{2})(?::(\d{2})(?:\.(\d{1,3}))?)?$/;
1746
+ function parseTimeParts(value) {
1747
+ const match = TIME_RE.exec(String(value || ""));
1748
+ if (!match)
1749
+ return null;
1750
+ const hour = Number(match[1]);
1751
+ const minute = Number(match[2]);
1752
+ const second = match[3] === undefined ? 0 : Number(match[3]);
1753
+ const millisecond = match[4] === undefined ? 0 : Number(match[4].padEnd(3, "0"));
1754
+ if (hour > 23 || minute > 59 || second > 59 || millisecond > 999)
1755
+ return null;
1756
+ return { hour, minute, second, millisecond };
1757
+ }
1758
+ function isTime(value) {
1759
+ return parseTimeParts(value) !== null;
1760
+ }
1761
+ function toMillis(parts) {
1762
+ return ((parts.hour * 60 + parts.minute) * 60 + parts.second) * 1000 + parts.millisecond;
1763
+ }
1764
+ function compareTimes(a, b) {
1765
+ const left = parseTimeParts(a);
1766
+ const right = parseTimeParts(b);
1767
+ if (!left || !right)
1768
+ throw new TypeError("compareTimes() expects HH:MM values");
1769
+ const diff = toMillis(left) - toMillis(right);
1770
+ return diff === 0 ? 0 : diff < 0 ? -1 : 1;
1771
+ }
1772
+
1692
1773
  // src/date-picker.js
1693
1774
  var uid2 = 0;
1694
1775
 
1695
1776
  class DatePickerElement extends HTMLElement {
1696
- static observedAttributes = ["value", "locale", "min", "max", "open-on-focus"];
1777
+ static observedAttributes = ["value", "locale", "min", "max", "open-on-focus", "month-format"];
1697
1778
  constructor() {
1698
1779
  super();
1699
1780
  this._id = `date-picker-${++uid2}`;
@@ -1705,6 +1786,8 @@
1705
1786
  this._fields = null;
1706
1787
  this._range = null;
1707
1788
  this._orderTags = new Set;
1789
+ this._timeFields = [null, null];
1790
+ this._timeOrderOwned = new Set;
1708
1791
  this._lastFocusEndpoint = "";
1709
1792
  this._rangeCommitId = 0;
1710
1793
  this._pendingIntents = new Map;
@@ -1738,13 +1821,14 @@
1738
1821
  this._connectSingle();
1739
1822
  }
1740
1823
  _connectSingle() {
1741
- const input = this.querySelector(":scope > input:not([type=hidden])");
1824
+ const input = this.querySelector(":scope > input:not([type=hidden]):not([type=time]):not([data-time-start]):not([data-time-end])");
1742
1825
  if (!(input instanceof HTMLInputElement)) {
1743
1826
  console.warn("<date-picker> expects a direct child text input");
1744
1827
  return;
1745
1828
  }
1746
1829
  this._connected = true;
1747
1830
  this._input = input;
1831
+ this._discoverTimeFields();
1748
1832
  this._field = new DateFieldController(input, { messages: this._messages, locale: this.locale });
1749
1833
  this._field.onAttributesChanged = () => this._syncInputState();
1750
1834
  this._field.confirm = (date) => this._confirmDate(date);
@@ -1767,7 +1851,31 @@
1767
1851
  input.defaultValue = input.value;
1768
1852
  }
1769
1853
  }
1854
+ _discoverTimeFields() {
1855
+ this._timeFields = [null, null];
1856
+ const markers = ["data-time-start", "data-time-end"];
1857
+ for (const [index, marker] of markers.entries()) {
1858
+ const matches = this.querySelectorAll(`:scope > input[${marker}]`);
1859
+ if (matches.length > 1) {
1860
+ console.warn(`<date-picker> expects at most one direct child input[${marker}]; ignoring extras`);
1861
+ }
1862
+ const candidate = matches[0];
1863
+ if (candidate == null)
1864
+ continue;
1865
+ if (!(candidate instanceof HTMLInputElement) || candidate.type !== "time") {
1866
+ console.warn(`<date-picker> input[${marker}] must be an <input type="time">; ignoring it`);
1867
+ continue;
1868
+ }
1869
+ this._timeFields[index] = candidate;
1870
+ }
1871
+ if (this.querySelector(":scope > input[type=time]:not([data-time-start]):not([data-time-end])")) {
1872
+ console.warn("<date-picker> time inputs need [data-time-start] or [data-time-end]; ignoring it");
1873
+ }
1874
+ }
1770
1875
  _connectRange() {
1876
+ if (this.querySelector(":scope > input[data-time-start], :scope > input[data-time-end]")) {
1877
+ console.warn("<date-picker range> time companions are not supported yet; leaving them native");
1878
+ }
1771
1879
  const startInput = this.querySelector(":scope > input[data-range-start]");
1772
1880
  const endInput = this.querySelector(":scope > input[data-range-end]");
1773
1881
  if (!(startInput instanceof HTMLInputElement) || !(endInput instanceof HTMLInputElement)) {
@@ -1819,6 +1927,8 @@
1819
1927
  this.hide(false);
1820
1928
  this._controller?.abort();
1821
1929
  this._controller = null;
1930
+ this._clearTimeOrderValidity();
1931
+ this._timeFields = [null, null];
1822
1932
  if (this._rangeMode()) {
1823
1933
  for (const field of this._fields || [])
1824
1934
  this._teardownField(field);
@@ -1903,6 +2013,15 @@
1903
2013
  else
1904
2014
  this.removeAttribute("locale");
1905
2015
  }
2016
+ get monthFormat() {
2017
+ return this.getAttribute("month-format") === "short" ? "short" : "long";
2018
+ }
2019
+ set monthFormat(value) {
2020
+ if (value === "short")
2021
+ this.setAttribute("month-format", "short");
2022
+ else
2023
+ this.removeAttribute("month-format");
2024
+ }
1906
2025
  get min() {
1907
2026
  const value = this.getAttribute("min") || "";
1908
2027
  return isDate(value) ? value : "";
@@ -2099,6 +2218,13 @@
2099
2218
  input.addEventListener("keydown", (event) => {
2100
2219
  this._onFieldKeyDown("", event);
2101
2220
  }, { signal });
2221
+ for (const [index, timeInput] of this._timeFields.entries()) {
2222
+ if (!timeInput)
2223
+ continue;
2224
+ const endpoint = index === 1 ? "end" : "start";
2225
+ timeInput.addEventListener("input", () => this._revalidateTimeOrder(endpoint), { signal });
2226
+ timeInput.addEventListener("change", () => this._revalidateTimeOrder(endpoint), { signal });
2227
+ }
2102
2228
  button.addEventListener("click", (event) => {
2103
2229
  if (this._open) {
2104
2230
  if (event.detail === 0) {
@@ -2291,6 +2417,7 @@
2291
2417
  calendar.locale = this.locale;
2292
2418
  calendar.min = this.min;
2293
2419
  calendar.max = this.max;
2420
+ calendar.monthFormat = this.monthFormat;
2294
2421
  calendar.messages = this._messages;
2295
2422
  calendar.source = this._source;
2296
2423
  calendar.dateState = this._dateState;
@@ -2516,6 +2643,33 @@
2516
2643
  }
2517
2644
  }
2518
2645
  }
2646
+ _revalidateTimeOrder(which) {
2647
+ const [startInput, endInput] = this._timeFields;
2648
+ const bounds = ["start", "end"];
2649
+ const inputs = [startInput, endInput];
2650
+ const startValue = startInput && !startInput.disabled ? startInput.value.trim() : "";
2651
+ const endValue = endInput && !endInput.disabled ? endInput.value.trim() : "";
2652
+ const inverted = Boolean(startInput && endInput && startValue && endValue) && isTime(startValue) && isTime(endValue) && compareTimes(endValue, startValue) < 0;
2653
+ for (const [index, bound] of bounds.entries()) {
2654
+ const input = inputs[index];
2655
+ if (!input)
2656
+ continue;
2657
+ const message = bound === "end" ? this._messages.rangeOrderEnd : this._messages.rangeOrderStart;
2658
+ const shouldHaveOrder = inverted && bound === which;
2659
+ if (shouldHaveOrder) {
2660
+ input.setCustomValidity(message);
2661
+ this._timeOrderOwned.add(input);
2662
+ } else if (this._timeOrderOwned.has(input)) {
2663
+ input.setCustomValidity("");
2664
+ this._timeOrderOwned.delete(input);
2665
+ }
2666
+ }
2667
+ }
2668
+ _clearTimeOrderValidity() {
2669
+ for (const input of this._timeOrderOwned)
2670
+ input.setCustomValidity("");
2671
+ this._timeOrderOwned.clear();
2672
+ }
2519
2673
  _restoreDefault() {
2520
2674
  const field = this._field;
2521
2675
  if (!field)
@@ -2600,10 +2754,13 @@
2600
2754
  return true;
2601
2755
  if (!input.value.trim()) {
2602
2756
  input.setCustomValidity("");
2603
- return input.checkValidity();
2757
+ } else {
2758
+ await this._commitText(false, { force: true });
2604
2759
  }
2605
- await this._commitText(false, { force: true });
2606
- return input.checkValidity();
2760
+ this._revalidateTimeOrder("start");
2761
+ this._revalidateTimeOrder("end");
2762
+ const timesValid = this._timeFields.every((timeInput) => timeInput?.checkValidity() ?? true);
2763
+ return input.checkValidity() && timesValid;
2607
2764
  }
2608
2765
  show(options = {}) {
2609
2766
  const panel = this._panel;
@@ -1 +1 @@
1
- :where(date-calendar,date-picker){--dp-bg:Canvas;--dp-fg:CanvasText;--dp-muted:color-mix(in srgb,CanvasText 58%,Canvas);--dp-border:color-mix(in srgb,CanvasText 22%,Canvas);--dp-hover:color-mix(in srgb,CanvasText 7%,Canvas);--dp-accent:Highlight;--dp-accent-fg:HighlightText;--dp-radius:.5rem;--dp-day-size:2.75rem;--dp-gap:.25rem;color:var(--dp-fg);font:inherit}.dp-visually-hidden{position:absolute!important;overflow:hidden!important;clip:rect(0 0 0 0)!important;white-space:nowrap!important;border:0!important;block-size:1px!important;inline-size:1px!important;margin:-1px!important;padding:0!important}date-calendar{display:block;inline-size:max-content;max-inline-size:100%}.dp-calendar-shell{inline-size:max-content;max-inline-size:100%}.dp-calendar-header{display:grid;grid-template-columns:minmax(0,1fr)auto auto auto;align-items: center;gap:var(--dp-gap);margin-block-end:.4rem}.dp-calendar-header .dp-prev{margin-inline-start:calc(var(--dp-gap)*2.5)}.dp-calendar-header :where(button,select,input){border:1px solid var(--dp-border);border-radius:calc(var(--dp-radius)*.75);background:var(--dp-bg);color:var(--dp-fg);font:inherit;min-block-size:2.25rem}.dp-calendar-header select,.dp-calendar-header input{min-inline-size:0;padding-inline-start:.45rem;padding-inline-end:.45rem}.dp-month-select{inline-size:100%}.dp-year-input{inline-size:5.5rem}.dp-nav{display:grid;cursor:pointer;place-items: center;inline-size:2.25rem;padding:0;font-size:1.35rem;line-height:1}.dp-nav svg{display:block;pointer-events:none;block-size:1rem;inline-size:1rem}.dp-picker-button:disabled{cursor:not-allowed;opacity:.45}.dp-calendar-header :where(button,select,input):disabled{cursor:not-allowed;opacity:.45}.dp-nav:hover:not(:disabled),.dp-day:hover:not([data-disabled=true]):not([data-selected=true]):not([data-range-start=true]):not([data-range-end=true]){background:var(--dp-hover)}.dp-calendar-heading{text-align:center;margin:0 0 .35rem;font-size:.875rem;font-weight:600}.dp-grid{border-collapse:separate;border-spacing:0 .25rem;table-layout:fixed}.dp-grid :where(th,td){box-sizing:border-box;inline-size:var(--dp-day-size);block-size:var(--dp-day-size);text-align:center;padding:0}.dp-grid thead th{color:var(--dp-muted);block-size:1.6rem;font-size:.72rem;font-weight:600}.dp-day{position:relative;border-radius:calc(var(--dp-radius)*.75);cursor:pointer;outline:none;vertical-align:middle;border:1px solid #0000;font-size:.875rem}.dp-day:focus-visible{outline:2px solid var(--dp-accent);outline-offset:1px;z-index:1}.dp-day[data-selected=true]{background:var(--dp-accent);color:var(--dp-accent-fg)}.dp-day[data-today=true]:not([data-selected=true]){border-color:var(--dp-accent)}.dp-day[data-outside-month=true]{color:var(--dp-muted)}.dp-day[data-disabled=true]{cursor:not-allowed;opacity:.42}.dp-day[data-range-start=true],.dp-day[data-range-end=true]{background:var(--dp-accent);color:var(--dp-accent-fg)}.dp-day[data-in-range=true]{background:color-mix(in srgb,var(--dp-accent)18%,var(--dp-bg));border-radius:0}.dp-day[data-range-start=true]:has(+[data-in-range=true],+[data-range-end=true]):not(:-webkit-any(:lang(ae),:lang(ar),:lang(arc),:lang(bcc),:lang(bqi),:lang(ckb),:lang(dv),:lang(fa),:lang(glk),:lang(he),:lang(ku),:lang(mzn),:lang(nqo),:lang(pnb),:lang(ps),:lang(sd),:lang(ug),:lang(ur),:lang(yi))){border-top-right-radius:0;border-bottom-right-radius:0}.dp-day[data-range-start=true]:has(+[data-in-range=true],+[data-range-end=true]):not(:-moz-any(:lang(ae),:lang(ar),:lang(arc),:lang(bcc),:lang(bqi),:lang(ckb),:lang(dv),:lang(fa),:lang(glk),:lang(he),:lang(ku),:lang(mzn),:lang(nqo),:lang(pnb),:lang(ps),:lang(sd),:lang(ug),:lang(ur),:lang(yi))){border-top-right-radius:0;border-bottom-right-radius:0}.dp-day[data-range-start=true]:has(+[data-in-range=true],+[data-range-end=true]):not(:is(:lang(ae),:lang(ar),:lang(arc),:lang(bcc),:lang(bqi),:lang(ckb),:lang(dv),:lang(fa),:lang(glk),:lang(he),:lang(ku),:lang(mzn),:lang(nqo),:lang(pnb),:lang(ps),:lang(sd),:lang(ug),:lang(ur),:lang(yi))){border-top-right-radius:0;border-bottom-right-radius:0}.dp-day[data-range-start=true]:has(+[data-in-range=true],+[data-range-end=true]):-webkit-any(:lang(ae),:lang(ar),:lang(arc),:lang(bcc),:lang(bqi),:lang(ckb),:lang(dv),:lang(fa),:lang(glk),:lang(he),:lang(ku),:lang(mzn),:lang(nqo),:lang(pnb),:lang(ps),:lang(sd),:lang(ug),:lang(ur),:lang(yi)){border-top-left-radius:0;border-bottom-left-radius:0}.dp-day[data-range-start=true]:has(+[data-in-range=true],+[data-range-end=true]):-moz-any(:lang(ae),:lang(ar),:lang(arc),:lang(bcc),:lang(bqi),:lang(ckb),:lang(dv),:lang(fa),:lang(glk),:lang(he),:lang(ku),:lang(mzn),:lang(nqo),:lang(pnb),:lang(ps),:lang(sd),:lang(ug),:lang(ur),:lang(yi)){border-top-left-radius:0;border-bottom-left-radius:0}.dp-day[data-range-start=true]:has(+[data-in-range=true],+[data-range-end=true]):is(:lang(ae),:lang(ar),:lang(arc),:lang(bcc),:lang(bqi),:lang(ckb),:lang(dv),:lang(fa),:lang(glk),:lang(he),:lang(ku),:lang(mzn),:lang(nqo),:lang(pnb),:lang(ps),:lang(sd),:lang(ug),:lang(ur),:lang(yi)){border-top-left-radius:0;border-bottom-left-radius:0}.dp-day:-webkit-any([data-in-range=true],[data-range-start=true])+.dp-day[data-range-end=true]:not(:-webkit-any(:lang(ae),:lang(ar),:lang(arc),:lang(bcc),:lang(bqi),:lang(ckb),:lang(dv),:lang(fa),:lang(glk),:lang(he),:lang(ku),:lang(mzn),:lang(nqo),:lang(pnb),:lang(ps),:lang(sd),:lang(ug),:lang(ur),:lang(yi))){border-top-left-radius:0;border-bottom-left-radius:0}.dp-day:-moz-any([data-in-range=true],[data-range-start=true])+.dp-day[data-range-end=true]:not(:-moz-any(:lang(ae),:lang(ar),:lang(arc),:lang(bcc),:lang(bqi),:lang(ckb),:lang(dv),:lang(fa),:lang(glk),:lang(he),:lang(ku),:lang(mzn),:lang(nqo),:lang(pnb),:lang(ps),:lang(sd),:lang(ug),:lang(ur),:lang(yi))){border-top-left-radius:0;border-bottom-left-radius:0}.dp-day:is([data-in-range=true],[data-range-start=true])+.dp-day[data-range-end=true]:not(:is(:lang(ae),:lang(ar),:lang(arc),:lang(bcc),:lang(bqi),:lang(ckb),:lang(dv),:lang(fa),:lang(glk),:lang(he),:lang(ku),:lang(mzn),:lang(nqo),:lang(pnb),:lang(ps),:lang(sd),:lang(ug),:lang(ur),:lang(yi))){border-top-left-radius:0;border-bottom-left-radius:0}.dp-day:-webkit-any([data-in-range=true],[data-range-start=true])+.dp-day[data-range-end=true]:-webkit-any(:lang(ae),:lang(ar),:lang(arc),:lang(bcc),:lang(bqi),:lang(ckb),:lang(dv),:lang(fa),:lang(glk),:lang(he),:lang(ku),:lang(mzn),:lang(nqo),:lang(pnb),:lang(ps),:lang(sd),:lang(ug),:lang(ur),:lang(yi)){border-top-right-radius:0;border-bottom-right-radius:0}.dp-day:-moz-any([data-in-range=true],[data-range-start=true])+.dp-day[data-range-end=true]:-moz-any(:lang(ae),:lang(ar),:lang(arc),:lang(bcc),:lang(bqi),:lang(ckb),:lang(dv),:lang(fa),:lang(glk),:lang(he),:lang(ku),:lang(mzn),:lang(nqo),:lang(pnb),:lang(ps),:lang(sd),:lang(ug),:lang(ur),:lang(yi)){border-top-right-radius:0;border-bottom-right-radius:0}.dp-day:is([data-in-range=true],[data-range-start=true])+.dp-day[data-range-end=true]:is(:lang(ae),:lang(ar),:lang(arc),:lang(bcc),:lang(bqi),:lang(ckb),:lang(dv),:lang(fa),:lang(glk),:lang(he),:lang(ku),:lang(mzn),:lang(nqo),:lang(pnb),:lang(ps),:lang(sd),:lang(ug),:lang(ur),:lang(yi)){border-top-right-radius:0;border-bottom-right-radius:0}.dp-day[data-in-range=true]:first-of-type:not(:-webkit-any(:lang(ae),:lang(ar),:lang(arc),:lang(bcc),:lang(bqi),:lang(ckb),:lang(dv),:lang(fa),:lang(glk),:lang(he),:lang(ku),:lang(mzn),:lang(nqo),:lang(pnb),:lang(ps),:lang(sd),:lang(ug),:lang(ur),:lang(yi))){border-top-left-radius:var(--dp-radius);border-bottom-left-radius:var(--dp-radius)}.dp-day[data-in-range=true]:first-of-type:not(:-moz-any(:lang(ae),:lang(ar),:lang(arc),:lang(bcc),:lang(bqi),:lang(ckb),:lang(dv),:lang(fa),:lang(glk),:lang(he),:lang(ku),:lang(mzn),:lang(nqo),:lang(pnb),:lang(ps),:lang(sd),:lang(ug),:lang(ur),:lang(yi))){border-top-left-radius:var(--dp-radius);border-bottom-left-radius:var(--dp-radius)}.dp-day[data-in-range=true]:first-of-type:not(:is(:lang(ae),:lang(ar),:lang(arc),:lang(bcc),:lang(bqi),:lang(ckb),:lang(dv),:lang(fa),:lang(glk),:lang(he),:lang(ku),:lang(mzn),:lang(nqo),:lang(pnb),:lang(ps),:lang(sd),:lang(ug),:lang(ur),:lang(yi))){border-top-left-radius:var(--dp-radius);border-bottom-left-radius:var(--dp-radius)}.dp-day[data-in-range=true]:first-of-type:-webkit-any(:lang(ae),:lang(ar),:lang(arc),:lang(bcc),:lang(bqi),:lang(ckb),:lang(dv),:lang(fa),:lang(glk),:lang(he),:lang(ku),:lang(mzn),:lang(nqo),:lang(pnb),:lang(ps),:lang(sd),:lang(ug),:lang(ur),:lang(yi)){border-top-right-radius:var(--dp-radius);border-bottom-right-radius:var(--dp-radius)}.dp-day[data-in-range=true]:first-of-type:-moz-any(:lang(ae),:lang(ar),:lang(arc),:lang(bcc),:lang(bqi),:lang(ckb),:lang(dv),:lang(fa),:lang(glk),:lang(he),:lang(ku),:lang(mzn),:lang(nqo),:lang(pnb),:lang(ps),:lang(sd),:lang(ug),:lang(ur),:lang(yi)){border-top-right-radius:var(--dp-radius);border-bottom-right-radius:var(--dp-radius)}.dp-day[data-in-range=true]:first-of-type:is(:lang(ae),:lang(ar),:lang(arc),:lang(bcc),:lang(bqi),:lang(ckb),:lang(dv),:lang(fa),:lang(glk),:lang(he),:lang(ku),:lang(mzn),:lang(nqo),:lang(pnb),:lang(ps),:lang(sd),:lang(ug),:lang(ur),:lang(yi)){border-top-right-radius:var(--dp-radius);border-bottom-right-radius:var(--dp-radius)}.dp-day[data-in-range=true]:last-of-type:not(:-webkit-any(:lang(ae),:lang(ar),:lang(arc),:lang(bcc),:lang(bqi),:lang(ckb),:lang(dv),:lang(fa),:lang(glk),:lang(he),:lang(ku),:lang(mzn),:lang(nqo),:lang(pnb),:lang(ps),:lang(sd),:lang(ug),:lang(ur),:lang(yi))){border-top-right-radius:var(--dp-radius);border-bottom-right-radius:var(--dp-radius)}.dp-day[data-in-range=true]:last-of-type:not(:-moz-any(:lang(ae),:lang(ar),:lang(arc),:lang(bcc),:lang(bqi),:lang(ckb),:lang(dv),:lang(fa),:lang(glk),:lang(he),:lang(ku),:lang(mzn),:lang(nqo),:lang(pnb),:lang(ps),:lang(sd),:lang(ug),:lang(ur),:lang(yi))){border-top-right-radius:var(--dp-radius);border-bottom-right-radius:var(--dp-radius)}.dp-day[data-in-range=true]:last-of-type:not(:is(:lang(ae),:lang(ar),:lang(arc),:lang(bcc),:lang(bqi),:lang(ckb),:lang(dv),:lang(fa),:lang(glk),:lang(he),:lang(ku),:lang(mzn),:lang(nqo),:lang(pnb),:lang(ps),:lang(sd),:lang(ug),:lang(ur),:lang(yi))){border-top-right-radius:var(--dp-radius);border-bottom-right-radius:var(--dp-radius)}.dp-day[data-in-range=true]:last-of-type:-webkit-any(:lang(ae),:lang(ar),:lang(arc),:lang(bcc),:lang(bqi),:lang(ckb),:lang(dv),:lang(fa),:lang(glk),:lang(he),:lang(ku),:lang(mzn),:lang(nqo),:lang(pnb),:lang(ps),:lang(sd),:lang(ug),:lang(ur),:lang(yi)){border-top-left-radius:var(--dp-radius);border-bottom-left-radius:var(--dp-radius)}.dp-day[data-in-range=true]:last-of-type:-moz-any(:lang(ae),:lang(ar),:lang(arc),:lang(bcc),:lang(bqi),:lang(ckb),:lang(dv),:lang(fa),:lang(glk),:lang(he),:lang(ku),:lang(mzn),:lang(nqo),:lang(pnb),:lang(ps),:lang(sd),:lang(ug),:lang(ur),:lang(yi)){border-top-left-radius:var(--dp-radius);border-bottom-left-radius:var(--dp-radius)}.dp-day[data-in-range=true]:last-of-type:is(:lang(ae),:lang(ar),:lang(arc),:lang(bcc),:lang(bqi),:lang(ckb),:lang(dv),:lang(fa),:lang(glk),:lang(he),:lang(ku),:lang(mzn),:lang(nqo),:lang(pnb),:lang(ps),:lang(sd),:lang(ug),:lang(ur),:lang(yi)){border-top-left-radius:var(--dp-radius);border-bottom-left-radius:var(--dp-radius)}.dp-day-number{display:block;font-variant-numeric:tabular-nums}.dp-day-extra{position:absolute;display:flex;pointer-events:none;justify-content:center;gap:2px;min-block-size:.35rem;font-size:.55rem;line-height:1;bottom:1px;left:2px;right:2px}.dp-week-number,.dp-week-heading{color:var(--dp-muted);font-size:.65rem;font-weight:500;inline-size:1.6rem!important}date-picker{position:relative;display:inline-grid;grid-template-columns:minmax(0,1fr)auto;align-items:stretch;max-inline-size:100%}date-picker>input:not([type=hidden]){grid-column:1;min-inline-size:0}date-picker[range]>input:not([type=hidden]){grid-column:1}date-picker[range]>input[data-range-start]{grid-row:1}date-picker[range]>input[data-range-end]{grid-row:2}.dp-picker-button{grid-column:2;border:1px solid var(--dp-border);background:var(--dp-bg);color:var(--dp-fg);font:inherit;cursor:pointer;border-inline-start:0;min-inline-size:2.5rem}.dp-picker-button:not(:-webkit-any(:lang(ae),:lang(ar),:lang(arc),:lang(bcc),:lang(bqi),:lang(ckb),:lang(dv),:lang(fa),:lang(glk),:lang(he),:lang(ku),:lang(mzn),:lang(nqo),:lang(pnb),:lang(ps),:lang(sd),:lang(ug),:lang(ur),:lang(yi))){border-top-left-radius:0;border-top-right-radius:var(--dp-radius);border-bottom-right-radius:var(--dp-radius);border-bottom-left-radius:0}.dp-picker-button:not(:-moz-any(:lang(ae),:lang(ar),:lang(arc),:lang(bcc),:lang(bqi),:lang(ckb),:lang(dv),:lang(fa),:lang(glk),:lang(he),:lang(ku),:lang(mzn),:lang(nqo),:lang(pnb),:lang(ps),:lang(sd),:lang(ug),:lang(ur),:lang(yi))){border-top-left-radius:0;border-top-right-radius:var(--dp-radius);border-bottom-right-radius:var(--dp-radius);border-bottom-left-radius:0}.dp-picker-button:not(:is(:lang(ae),:lang(ar),:lang(arc),:lang(bcc),:lang(bqi),:lang(ckb),:lang(dv),:lang(fa),:lang(glk),:lang(he),:lang(ku),:lang(mzn),:lang(nqo),:lang(pnb),:lang(ps),:lang(sd),:lang(ug),:lang(ur),:lang(yi))){border-top-left-radius:0;border-top-right-radius:var(--dp-radius);border-bottom-right-radius:var(--dp-radius);border-bottom-left-radius:0}.dp-picker-button:-webkit-any(:lang(ae),:lang(ar),:lang(arc),:lang(bcc),:lang(bqi),:lang(ckb),:lang(dv),:lang(fa),:lang(glk),:lang(he),:lang(ku),:lang(mzn),:lang(nqo),:lang(pnb),:lang(ps),:lang(sd),:lang(ug),:lang(ur),:lang(yi)){border-top-right-radius:0;border-top-left-radius:var(--dp-radius);border-bottom-left-radius:var(--dp-radius);border-bottom-right-radius:0}.dp-picker-button:-moz-any(:lang(ae),:lang(ar),:lang(arc),:lang(bcc),:lang(bqi),:lang(ckb),:lang(dv),:lang(fa),:lang(glk),:lang(he),:lang(ku),:lang(mzn),:lang(nqo),:lang(pnb),:lang(ps),:lang(sd),:lang(ug),:lang(ur),:lang(yi)){border-top-right-radius:0;border-top-left-radius:var(--dp-radius);border-bottom-left-radius:var(--dp-radius);border-bottom-right-radius:0}.dp-picker-button:is(:lang(ae),:lang(ar),:lang(arc),:lang(bcc),:lang(bqi),:lang(ckb),:lang(dv),:lang(fa),:lang(glk),:lang(he),:lang(ku),:lang(mzn),:lang(nqo),:lang(pnb),:lang(ps),:lang(sd),:lang(ug),:lang(ur),:lang(yi)){border-top-right-radius:0;border-top-left-radius:var(--dp-radius);border-bottom-left-radius:var(--dp-radius);border-bottom-right-radius:0}date-picker[range]>.dp-picker-button{grid-row:1/span 2}.dp-picker-panel[popover]{position:fixed;border:1px solid var(--dp-border);border-radius:var(--dp-radius);background:var(--dp-bg);color:var(--dp-fg);max-block-size:var(--available-height,90svh);overflow:auto;max-inline-size:calc(100vi - 1rem);margin:0;padding:.65rem;inset:auto;box-shadow:0 .5rem 1.5rem #00000029}.dp-picker-panel:not(:popover-open){display:none}@media (forced-colors:active){.dp-day[data-selected=true],.dp-day[data-range-start=true],.dp-day[data-range-end=true]{color:canvastext;background-color:canvas;border:2px solid highlight;font-weight:700}.dp-day[data-in-range=true]{color:canvastext}.dp-day[data-in-range=true]:after{content:"";position:absolute;background-color:highlight;block-size:1px;bottom:4px;left:3px;right:3px}.dp-day[data-selected=true]:before{content:"";position:absolute;border-radius:calc(var(--dp-radius)*.5);pointer-events:none;border:1px solid canvastext;inset:3px}.dp-day[data-today=true]{border-color:highlight}.dp-day-extra{color:canvastext;forced-color-adjust:none}.dp-day[data-disabled=true],.dp-picker-button:disabled{opacity:1;color:graytext}.dp-calendar-header :where(button,select,input):disabled{opacity:1;color:graytext}}
1
+ :where(date-calendar,date-picker){--dp-bg:Canvas;--dp-fg:CanvasText;--dp-muted:color-mix(in srgb,CanvasText 58%,Canvas);--dp-border:color-mix(in srgb,CanvasText 22%,Canvas);--dp-hover:color-mix(in srgb,CanvasText 7%,Canvas);--dp-accent:Highlight;--dp-accent-fg:HighlightText;--dp-radius:.5rem;--dp-day-size:2.75rem;--dp-gap:.25rem;--dp-header-control-size:2.25rem;--dp-header-block-gap:.4rem;--dp-nav-gap:calc(var(--dp-gap)*2.5);--dp-year-inline-size:5.5rem;--dp-day-radius:calc(var(--dp-radius)*.75);color:var(--dp-fg);font:inherit}.dp-visually-hidden{position:absolute!important;overflow:hidden!important;clip:rect(0 0 0 0)!important;white-space:nowrap!important;border:0!important;block-size:1px!important;inline-size:1px!important;margin:-1px!important;padding:0!important}date-calendar{display:block;inline-size:max-content;max-inline-size:100%}.dp-calendar-shell{inline-size:max-content;max-inline-size:100%}.dp-calendar-header{display:grid;grid-template-columns:minmax(0,1fr)auto auto auto;align-items:stretch;gap:var(--dp-gap);margin-block-end:var(--dp-header-block-gap)}date-calendar[data-year-first] .dp-calendar-header{grid-template-columns:auto minmax(0,1fr)auto auto}.dp-calendar-header .dp-prev{margin-inline-start:var(--dp-nav-gap)}.dp-calendar-header :where(button,select,input){min-block-size:var(--dp-header-control-size);box-sizing:border-box;border:1px solid var(--dp-border);border-radius:calc(var(--dp-radius)*.75);background:var(--dp-bg);color:var(--dp-fg);font:inherit;padding-block-start:.15rem;padding-block-end:.15rem;line-height:1.2}.dp-calendar-header select{padding-block-start:0;padding-block-end:0}.dp-calendar-header select,.dp-calendar-header input{min-inline-size:0;padding-inline-start:.45rem;padding-inline-end:.45rem}.dp-month-select{overflow:hidden;text-overflow:ellipsis;inline-size:100%}.dp-year-input{inline-size:var(--dp-year-inline-size)}.dp-nav{display:grid;inline-size:var(--dp-header-control-size);cursor:pointer;place-items: center;padding:0;font-size:1.35rem;line-height:1}.dp-nav svg{display:block;pointer-events:none;block-size:1rem;inline-size:1rem}[dir=rtl] .dp-nav svg,html[dir=rtl] .dp-nav svg{transform:scaleX(-1)}.dp-picker-button:disabled{cursor:not-allowed;opacity:.45}.dp-calendar-header :where(button,select,input):disabled{cursor:not-allowed;opacity:.45}.dp-nav:hover:not(:disabled),.dp-day:hover:not([data-disabled=true]):not([data-selected=true]):not([data-range-start=true]):not([data-range-end=true]){background:var(--dp-hover)}.dp-grid{border-collapse:separate;border-spacing:0 .25rem;table-layout:fixed}.dp-grid :where(th,td){box-sizing:border-box;inline-size:var(--dp-day-size);block-size:var(--dp-day-size);text-align:center;padding:0}.dp-grid thead th{color:var(--dp-muted);block-size:1.6rem;font-size:.72rem;font-weight:600}.dp-day{position:relative;border-radius:var(--dp-day-radius);cursor:pointer;outline:none;vertical-align:middle;border:1px solid #0000;font-size:.875rem}.dp-day:focus-visible{outline:2px solid var(--dp-accent);outline-offset:2px;box-shadow:0 0 0 2px var(--dp-bg);z-index:1}.dp-day[data-outside-month=true]{color:var(--dp-muted)}.dp-day[data-selected=true]{background:var(--dp-accent);color:var(--dp-accent-fg)}.dp-day[data-today=true]:not([data-selected=true]){border-color:var(--dp-accent)}.dp-day[data-disabled=true]{cursor:not-allowed;opacity:.42}.dp-day[data-range-start=true],.dp-day[data-range-end=true]{background:var(--dp-accent);color:var(--dp-accent-fg)}.dp-day[data-in-range=true]{background:color-mix(in srgb,var(--dp-accent)18%,var(--dp-bg));border-radius:0}.dp-day[data-range-start=true]:has(+[data-in-range=true],+[data-range-end=true]):not(:-webkit-any(:lang(ae),:lang(ar),:lang(arc),:lang(bcc),:lang(bqi),:lang(ckb),:lang(dv),:lang(fa),:lang(glk),:lang(he),:lang(ku),:lang(mzn),:lang(nqo),:lang(pnb),:lang(ps),:lang(sd),:lang(ug),:lang(ur),:lang(yi))){border-top-right-radius:0;border-bottom-right-radius:0}.dp-day[data-range-start=true]:has(+[data-in-range=true],+[data-range-end=true]):not(:-moz-any(:lang(ae),:lang(ar),:lang(arc),:lang(bcc),:lang(bqi),:lang(ckb),:lang(dv),:lang(fa),:lang(glk),:lang(he),:lang(ku),:lang(mzn),:lang(nqo),:lang(pnb),:lang(ps),:lang(sd),:lang(ug),:lang(ur),:lang(yi))){border-top-right-radius:0;border-bottom-right-radius:0}.dp-day[data-range-start=true]:has(+[data-in-range=true],+[data-range-end=true]):not(:is(:lang(ae),:lang(ar),:lang(arc),:lang(bcc),:lang(bqi),:lang(ckb),:lang(dv),:lang(fa),:lang(glk),:lang(he),:lang(ku),:lang(mzn),:lang(nqo),:lang(pnb),:lang(ps),:lang(sd),:lang(ug),:lang(ur),:lang(yi))){border-top-right-radius:0;border-bottom-right-radius:0}.dp-day[data-range-start=true]:has(+[data-in-range=true],+[data-range-end=true]):-webkit-any(:lang(ae),:lang(ar),:lang(arc),:lang(bcc),:lang(bqi),:lang(ckb),:lang(dv),:lang(fa),:lang(glk),:lang(he),:lang(ku),:lang(mzn),:lang(nqo),:lang(pnb),:lang(ps),:lang(sd),:lang(ug),:lang(ur),:lang(yi)){border-top-left-radius:0;border-bottom-left-radius:0}.dp-day[data-range-start=true]:has(+[data-in-range=true],+[data-range-end=true]):-moz-any(:lang(ae),:lang(ar),:lang(arc),:lang(bcc),:lang(bqi),:lang(ckb),:lang(dv),:lang(fa),:lang(glk),:lang(he),:lang(ku),:lang(mzn),:lang(nqo),:lang(pnb),:lang(ps),:lang(sd),:lang(ug),:lang(ur),:lang(yi)){border-top-left-radius:0;border-bottom-left-radius:0}.dp-day[data-range-start=true]:has(+[data-in-range=true],+[data-range-end=true]):is(:lang(ae),:lang(ar),:lang(arc),:lang(bcc),:lang(bqi),:lang(ckb),:lang(dv),:lang(fa),:lang(glk),:lang(he),:lang(ku),:lang(mzn),:lang(nqo),:lang(pnb),:lang(ps),:lang(sd),:lang(ug),:lang(ur),:lang(yi)){border-top-left-radius:0;border-bottom-left-radius:0}.dp-day:-webkit-any([data-in-range=true],[data-range-start=true])+.dp-day[data-range-end=true]:not(:-webkit-any(:lang(ae),:lang(ar),:lang(arc),:lang(bcc),:lang(bqi),:lang(ckb),:lang(dv),:lang(fa),:lang(glk),:lang(he),:lang(ku),:lang(mzn),:lang(nqo),:lang(pnb),:lang(ps),:lang(sd),:lang(ug),:lang(ur),:lang(yi))){border-top-left-radius:0;border-bottom-left-radius:0}.dp-day:-moz-any([data-in-range=true],[data-range-start=true])+.dp-day[data-range-end=true]:not(:-moz-any(:lang(ae),:lang(ar),:lang(arc),:lang(bcc),:lang(bqi),:lang(ckb),:lang(dv),:lang(fa),:lang(glk),:lang(he),:lang(ku),:lang(mzn),:lang(nqo),:lang(pnb),:lang(ps),:lang(sd),:lang(ug),:lang(ur),:lang(yi))){border-top-left-radius:0;border-bottom-left-radius:0}.dp-day:is([data-in-range=true],[data-range-start=true])+.dp-day[data-range-end=true]:not(:is(:lang(ae),:lang(ar),:lang(arc),:lang(bcc),:lang(bqi),:lang(ckb),:lang(dv),:lang(fa),:lang(glk),:lang(he),:lang(ku),:lang(mzn),:lang(nqo),:lang(pnb),:lang(ps),:lang(sd),:lang(ug),:lang(ur),:lang(yi))){border-top-left-radius:0;border-bottom-left-radius:0}.dp-day:-webkit-any([data-in-range=true],[data-range-start=true])+.dp-day[data-range-end=true]:-webkit-any(:lang(ae),:lang(ar),:lang(arc),:lang(bcc),:lang(bqi),:lang(ckb),:lang(dv),:lang(fa),:lang(glk),:lang(he),:lang(ku),:lang(mzn),:lang(nqo),:lang(pnb),:lang(ps),:lang(sd),:lang(ug),:lang(ur),:lang(yi)){border-top-right-radius:0;border-bottom-right-radius:0}.dp-day:-moz-any([data-in-range=true],[data-range-start=true])+.dp-day[data-range-end=true]:-moz-any(:lang(ae),:lang(ar),:lang(arc),:lang(bcc),:lang(bqi),:lang(ckb),:lang(dv),:lang(fa),:lang(glk),:lang(he),:lang(ku),:lang(mzn),:lang(nqo),:lang(pnb),:lang(ps),:lang(sd),:lang(ug),:lang(ur),:lang(yi)){border-top-right-radius:0;border-bottom-right-radius:0}.dp-day:is([data-in-range=true],[data-range-start=true])+.dp-day[data-range-end=true]:is(:lang(ae),:lang(ar),:lang(arc),:lang(bcc),:lang(bqi),:lang(ckb),:lang(dv),:lang(fa),:lang(glk),:lang(he),:lang(ku),:lang(mzn),:lang(nqo),:lang(pnb),:lang(ps),:lang(sd),:lang(ug),:lang(ur),:lang(yi)){border-top-right-radius:0;border-bottom-right-radius:0}.dp-day[data-in-range=true]:first-of-type:not(:-webkit-any(:lang(ae),:lang(ar),:lang(arc),:lang(bcc),:lang(bqi),:lang(ckb),:lang(dv),:lang(fa),:lang(glk),:lang(he),:lang(ku),:lang(mzn),:lang(nqo),:lang(pnb),:lang(ps),:lang(sd),:lang(ug),:lang(ur),:lang(yi))){border-top-left-radius:var(--dp-radius);border-bottom-left-radius:var(--dp-radius)}.dp-day[data-in-range=true]:first-of-type:not(:-moz-any(:lang(ae),:lang(ar),:lang(arc),:lang(bcc),:lang(bqi),:lang(ckb),:lang(dv),:lang(fa),:lang(glk),:lang(he),:lang(ku),:lang(mzn),:lang(nqo),:lang(pnb),:lang(ps),:lang(sd),:lang(ug),:lang(ur),:lang(yi))){border-top-left-radius:var(--dp-radius);border-bottom-left-radius:var(--dp-radius)}.dp-day[data-in-range=true]:first-of-type:not(:is(:lang(ae),:lang(ar),:lang(arc),:lang(bcc),:lang(bqi),:lang(ckb),:lang(dv),:lang(fa),:lang(glk),:lang(he),:lang(ku),:lang(mzn),:lang(nqo),:lang(pnb),:lang(ps),:lang(sd),:lang(ug),:lang(ur),:lang(yi))){border-top-left-radius:var(--dp-radius);border-bottom-left-radius:var(--dp-radius)}.dp-day[data-in-range=true]:first-of-type:-webkit-any(:lang(ae),:lang(ar),:lang(arc),:lang(bcc),:lang(bqi),:lang(ckb),:lang(dv),:lang(fa),:lang(glk),:lang(he),:lang(ku),:lang(mzn),:lang(nqo),:lang(pnb),:lang(ps),:lang(sd),:lang(ug),:lang(ur),:lang(yi)){border-top-right-radius:var(--dp-radius);border-bottom-right-radius:var(--dp-radius)}.dp-day[data-in-range=true]:first-of-type:-moz-any(:lang(ae),:lang(ar),:lang(arc),:lang(bcc),:lang(bqi),:lang(ckb),:lang(dv),:lang(fa),:lang(glk),:lang(he),:lang(ku),:lang(mzn),:lang(nqo),:lang(pnb),:lang(ps),:lang(sd),:lang(ug),:lang(ur),:lang(yi)){border-top-right-radius:var(--dp-radius);border-bottom-right-radius:var(--dp-radius)}.dp-day[data-in-range=true]:first-of-type:is(:lang(ae),:lang(ar),:lang(arc),:lang(bcc),:lang(bqi),:lang(ckb),:lang(dv),:lang(fa),:lang(glk),:lang(he),:lang(ku),:lang(mzn),:lang(nqo),:lang(pnb),:lang(ps),:lang(sd),:lang(ug),:lang(ur),:lang(yi)){border-top-right-radius:var(--dp-radius);border-bottom-right-radius:var(--dp-radius)}.dp-day[data-in-range=true]:last-of-type:not(:-webkit-any(:lang(ae),:lang(ar),:lang(arc),:lang(bcc),:lang(bqi),:lang(ckb),:lang(dv),:lang(fa),:lang(glk),:lang(he),:lang(ku),:lang(mzn),:lang(nqo),:lang(pnb),:lang(ps),:lang(sd),:lang(ug),:lang(ur),:lang(yi))){border-top-right-radius:var(--dp-radius);border-bottom-right-radius:var(--dp-radius)}.dp-day[data-in-range=true]:last-of-type:not(:-moz-any(:lang(ae),:lang(ar),:lang(arc),:lang(bcc),:lang(bqi),:lang(ckb),:lang(dv),:lang(fa),:lang(glk),:lang(he),:lang(ku),:lang(mzn),:lang(nqo),:lang(pnb),:lang(ps),:lang(sd),:lang(ug),:lang(ur),:lang(yi))){border-top-right-radius:var(--dp-radius);border-bottom-right-radius:var(--dp-radius)}.dp-day[data-in-range=true]:last-of-type:not(:is(:lang(ae),:lang(ar),:lang(arc),:lang(bcc),:lang(bqi),:lang(ckb),:lang(dv),:lang(fa),:lang(glk),:lang(he),:lang(ku),:lang(mzn),:lang(nqo),:lang(pnb),:lang(ps),:lang(sd),:lang(ug),:lang(ur),:lang(yi))){border-top-right-radius:var(--dp-radius);border-bottom-right-radius:var(--dp-radius)}.dp-day[data-in-range=true]:last-of-type:-webkit-any(:lang(ae),:lang(ar),:lang(arc),:lang(bcc),:lang(bqi),:lang(ckb),:lang(dv),:lang(fa),:lang(glk),:lang(he),:lang(ku),:lang(mzn),:lang(nqo),:lang(pnb),:lang(ps),:lang(sd),:lang(ug),:lang(ur),:lang(yi)){border-top-left-radius:var(--dp-radius);border-bottom-left-radius:var(--dp-radius)}.dp-day[data-in-range=true]:last-of-type:-moz-any(:lang(ae),:lang(ar),:lang(arc),:lang(bcc),:lang(bqi),:lang(ckb),:lang(dv),:lang(fa),:lang(glk),:lang(he),:lang(ku),:lang(mzn),:lang(nqo),:lang(pnb),:lang(ps),:lang(sd),:lang(ug),:lang(ur),:lang(yi)){border-top-left-radius:var(--dp-radius);border-bottom-left-radius:var(--dp-radius)}.dp-day[data-in-range=true]:last-of-type:is(:lang(ae),:lang(ar),:lang(arc),:lang(bcc),:lang(bqi),:lang(ckb),:lang(dv),:lang(fa),:lang(glk),:lang(he),:lang(ku),:lang(mzn),:lang(nqo),:lang(pnb),:lang(ps),:lang(sd),:lang(ug),:lang(ur),:lang(yi)){border-top-left-radius:var(--dp-radius);border-bottom-left-radius:var(--dp-radius)}.dp-day-number{display:block;font-variant-numeric:tabular-nums}.dp-day[data-disabled=true]:focus-visible{opacity:1}.dp-day[data-disabled=true]:focus-visible .dp-day-number{color:var(--dp-muted)}.dp-day-extra{position:absolute;display:flex;pointer-events:none;justify-content:center;gap:2px;min-block-size:.35rem;font-size:.55rem;line-height:1;bottom:1px;left:2px;right:2px}.dp-week-number,.dp-week-heading{color:var(--dp-muted);font-size:.65rem;font-weight:500;inline-size:1.6rem!important}date-picker{position:relative;display:inline-grid;grid-template-columns:minmax(0,1fr)auto;align-items:stretch;max-inline-size:100%}date-picker>input:not([type=hidden]){grid-column:1;min-inline-size:0}date-picker:has(>[data-time-start],>[data-time-end]){grid-template-columns:minmax(0,1fr)auto minmax(0,1fr)}date-picker:has(>[data-time-start]):has(>[data-time-end]){grid-template-columns:minmax(0,1fr)auto minmax(0,1fr)minmax(0,1fr)}date-picker>input[data-time-start]{grid-column:3;grid-row:1;inline-size:100%;min-inline-size:0;margin-inline-start:var(--dp-gap)}date-picker>input[data-time-end]{grid-column:4;grid-row:1;inline-size:100%;min-inline-size:0}date-picker:has(>[data-time-start]):has(>[data-time-end])>input[data-time-start]:not(:-webkit-any(:lang(ae),:lang(ar),:lang(arc),:lang(bcc),:lang(bqi),:lang(ckb),:lang(dv),:lang(fa),:lang(glk),:lang(he),:lang(ku),:lang(mzn),:lang(nqo),:lang(pnb),:lang(ps),:lang(sd),:lang(ug),:lang(ur),:lang(yi))){border-top-right-radius:0;border-bottom-right-radius:0}date-picker:has(>[data-time-start]):has(>[data-time-end])>input[data-time-start]:not(:-moz-any(:lang(ae),:lang(ar),:lang(arc),:lang(bcc),:lang(bqi),:lang(ckb),:lang(dv),:lang(fa),:lang(glk),:lang(he),:lang(ku),:lang(mzn),:lang(nqo),:lang(pnb),:lang(ps),:lang(sd),:lang(ug),:lang(ur),:lang(yi))){border-top-right-radius:0;border-bottom-right-radius:0}date-picker:has(>[data-time-start]):has(>[data-time-end])>input[data-time-start]:not(:is(:lang(ae),:lang(ar),:lang(arc),:lang(bcc),:lang(bqi),:lang(ckb),:lang(dv),:lang(fa),:lang(glk),:lang(he),:lang(ku),:lang(mzn),:lang(nqo),:lang(pnb),:lang(ps),:lang(sd),:lang(ug),:lang(ur),:lang(yi))){border-top-right-radius:0;border-bottom-right-radius:0}date-picker:has(>[data-time-start]):has(>[data-time-end])>input[data-time-start]:-webkit-any(:lang(ae),:lang(ar),:lang(arc),:lang(bcc),:lang(bqi),:lang(ckb),:lang(dv),:lang(fa),:lang(glk),:lang(he),:lang(ku),:lang(mzn),:lang(nqo),:lang(pnb),:lang(ps),:lang(sd),:lang(ug),:lang(ur),:lang(yi)){border-top-left-radius:0;border-bottom-left-radius:0}date-picker:has(>[data-time-start]):has(>[data-time-end])>input[data-time-start]:-moz-any(:lang(ae),:lang(ar),:lang(arc),:lang(bcc),:lang(bqi),:lang(ckb),:lang(dv),:lang(fa),:lang(glk),:lang(he),:lang(ku),:lang(mzn),:lang(nqo),:lang(pnb),:lang(ps),:lang(sd),:lang(ug),:lang(ur),:lang(yi)){border-top-left-radius:0;border-bottom-left-radius:0}date-picker:has(>[data-time-start]):has(>[data-time-end])>input[data-time-start]:is(:lang(ae),:lang(ar),:lang(arc),:lang(bcc),:lang(bqi),:lang(ckb),:lang(dv),:lang(fa),:lang(glk),:lang(he),:lang(ku),:lang(mzn),:lang(nqo),:lang(pnb),:lang(ps),:lang(sd),:lang(ug),:lang(ur),:lang(yi)){border-top-left-radius:0;border-bottom-left-radius:0}date-picker:has(>[data-time-start]):has(>[data-time-end])>input[data-time-end]:not(:-webkit-any(:lang(ae),:lang(ar),:lang(arc),:lang(bcc),:lang(bqi),:lang(ckb),:lang(dv),:lang(fa),:lang(glk),:lang(he),:lang(ku),:lang(mzn),:lang(nqo),:lang(pnb),:lang(ps),:lang(sd),:lang(ug),:lang(ur),:lang(yi))){border-top-left-radius:0;border-bottom-left-radius:0}date-picker:has(>[data-time-start]):has(>[data-time-end])>input[data-time-end]:not(:-moz-any(:lang(ae),:lang(ar),:lang(arc),:lang(bcc),:lang(bqi),:lang(ckb),:lang(dv),:lang(fa),:lang(glk),:lang(he),:lang(ku),:lang(mzn),:lang(nqo),:lang(pnb),:lang(ps),:lang(sd),:lang(ug),:lang(ur),:lang(yi))){border-top-left-radius:0;border-bottom-left-radius:0}date-picker:has(>[data-time-start]):has(>[data-time-end])>input[data-time-end]:not(:is(:lang(ae),:lang(ar),:lang(arc),:lang(bcc),:lang(bqi),:lang(ckb),:lang(dv),:lang(fa),:lang(glk),:lang(he),:lang(ku),:lang(mzn),:lang(nqo),:lang(pnb),:lang(ps),:lang(sd),:lang(ug),:lang(ur),:lang(yi))){border-top-left-radius:0;border-bottom-left-radius:0}date-picker:has(>[data-time-start]):has(>[data-time-end])>input[data-time-end]:-webkit-any(:lang(ae),:lang(ar),:lang(arc),:lang(bcc),:lang(bqi),:lang(ckb),:lang(dv),:lang(fa),:lang(glk),:lang(he),:lang(ku),:lang(mzn),:lang(nqo),:lang(pnb),:lang(ps),:lang(sd),:lang(ug),:lang(ur),:lang(yi)){border-top-right-radius:0;border-bottom-right-radius:0}date-picker:has(>[data-time-start]):has(>[data-time-end])>input[data-time-end]:-moz-any(:lang(ae),:lang(ar),:lang(arc),:lang(bcc),:lang(bqi),:lang(ckb),:lang(dv),:lang(fa),:lang(glk),:lang(he),:lang(ku),:lang(mzn),:lang(nqo),:lang(pnb),:lang(ps),:lang(sd),:lang(ug),:lang(ur),:lang(yi)){border-top-right-radius:0;border-bottom-right-radius:0}date-picker:has(>[data-time-start]):has(>[data-time-end])>input[data-time-end]:is(:lang(ae),:lang(ar),:lang(arc),:lang(bcc),:lang(bqi),:lang(ckb),:lang(dv),:lang(fa),:lang(glk),:lang(he),:lang(ku),:lang(mzn),:lang(nqo),:lang(pnb),:lang(ps),:lang(sd),:lang(ug),:lang(ur),:lang(yi)){border-top-right-radius:0;border-bottom-right-radius:0}date-picker[range]>input:not([type=hidden]){grid-column:1}date-picker[range]>input[data-range-start]{grid-row:1}date-picker[range]>input[data-range-start]:not(:-webkit-any(:lang(ae),:lang(ar),:lang(arc),:lang(bcc),:lang(bqi),:lang(ckb),:lang(dv),:lang(fa),:lang(glk),:lang(he),:lang(ku),:lang(mzn),:lang(nqo),:lang(pnb),:lang(ps),:lang(sd),:lang(ug),:lang(ur),:lang(yi))){border-bottom-left-radius:0}date-picker[range]>input[data-range-start]:not(:-moz-any(:lang(ae),:lang(ar),:lang(arc),:lang(bcc),:lang(bqi),:lang(ckb),:lang(dv),:lang(fa),:lang(glk),:lang(he),:lang(ku),:lang(mzn),:lang(nqo),:lang(pnb),:lang(ps),:lang(sd),:lang(ug),:lang(ur),:lang(yi))){border-bottom-left-radius:0}date-picker[range]>input[data-range-start]:not(:is(:lang(ae),:lang(ar),:lang(arc),:lang(bcc),:lang(bqi),:lang(ckb),:lang(dv),:lang(fa),:lang(glk),:lang(he),:lang(ku),:lang(mzn),:lang(nqo),:lang(pnb),:lang(ps),:lang(sd),:lang(ug),:lang(ur),:lang(yi))){border-bottom-left-radius:0}date-picker[range]>input[data-range-start]:-webkit-any(:lang(ae),:lang(ar),:lang(arc),:lang(bcc),:lang(bqi),:lang(ckb),:lang(dv),:lang(fa),:lang(glk),:lang(he),:lang(ku),:lang(mzn),:lang(nqo),:lang(pnb),:lang(ps),:lang(sd),:lang(ug),:lang(ur),:lang(yi)){border-bottom-right-radius:0}date-picker[range]>input[data-range-start]:-moz-any(:lang(ae),:lang(ar),:lang(arc),:lang(bcc),:lang(bqi),:lang(ckb),:lang(dv),:lang(fa),:lang(glk),:lang(he),:lang(ku),:lang(mzn),:lang(nqo),:lang(pnb),:lang(ps),:lang(sd),:lang(ug),:lang(ur),:lang(yi)){border-bottom-right-radius:0}date-picker[range]>input[data-range-start]:is(:lang(ae),:lang(ar),:lang(arc),:lang(bcc),:lang(bqi),:lang(ckb),:lang(dv),:lang(fa),:lang(glk),:lang(he),:lang(ku),:lang(mzn),:lang(nqo),:lang(pnb),:lang(ps),:lang(sd),:lang(ug),:lang(ur),:lang(yi)){border-bottom-right-radius:0}date-picker[range]>input[data-range-end]{grid-row:2}date-picker[range]>input[data-range-end]:not(:-webkit-any(:lang(ae),:lang(ar),:lang(arc),:lang(bcc),:lang(bqi),:lang(ckb),:lang(dv),:lang(fa),:lang(glk),:lang(he),:lang(ku),:lang(mzn),:lang(nqo),:lang(pnb),:lang(ps),:lang(sd),:lang(ug),:lang(ur),:lang(yi))){border-top-left-radius:0}date-picker[range]>input[data-range-end]:not(:-moz-any(:lang(ae),:lang(ar),:lang(arc),:lang(bcc),:lang(bqi),:lang(ckb),:lang(dv),:lang(fa),:lang(glk),:lang(he),:lang(ku),:lang(mzn),:lang(nqo),:lang(pnb),:lang(ps),:lang(sd),:lang(ug),:lang(ur),:lang(yi))){border-top-left-radius:0}date-picker[range]>input[data-range-end]:not(:is(:lang(ae),:lang(ar),:lang(arc),:lang(bcc),:lang(bqi),:lang(ckb),:lang(dv),:lang(fa),:lang(glk),:lang(he),:lang(ku),:lang(mzn),:lang(nqo),:lang(pnb),:lang(ps),:lang(sd),:lang(ug),:lang(ur),:lang(yi))){border-top-left-radius:0}date-picker[range]>input[data-range-end]:-webkit-any(:lang(ae),:lang(ar),:lang(arc),:lang(bcc),:lang(bqi),:lang(ckb),:lang(dv),:lang(fa),:lang(glk),:lang(he),:lang(ku),:lang(mzn),:lang(nqo),:lang(pnb),:lang(ps),:lang(sd),:lang(ug),:lang(ur),:lang(yi)){border-top-right-radius:0}date-picker[range]>input[data-range-end]:-moz-any(:lang(ae),:lang(ar),:lang(arc),:lang(bcc),:lang(bqi),:lang(ckb),:lang(dv),:lang(fa),:lang(glk),:lang(he),:lang(ku),:lang(mzn),:lang(nqo),:lang(pnb),:lang(ps),:lang(sd),:lang(ug),:lang(ur),:lang(yi)){border-top-right-radius:0}date-picker[range]>input[data-range-end]:is(:lang(ae),:lang(ar),:lang(arc),:lang(bcc),:lang(bqi),:lang(ckb),:lang(dv),:lang(fa),:lang(glk),:lang(he),:lang(ku),:lang(mzn),:lang(nqo),:lang(pnb),:lang(ps),:lang(sd),:lang(ug),:lang(ur),:lang(yi)){border-top-right-radius:0}.dp-picker-button{grid-column:2;border:1px solid var(--dp-border);background:var(--dp-bg);color:var(--dp-fg);font:inherit;cursor:pointer;border-inline-start:0;min-inline-size:2.5rem}.dp-picker-button:not(:-webkit-any(:lang(ae),:lang(ar),:lang(arc),:lang(bcc),:lang(bqi),:lang(ckb),:lang(dv),:lang(fa),:lang(glk),:lang(he),:lang(ku),:lang(mzn),:lang(nqo),:lang(pnb),:lang(ps),:lang(sd),:lang(ug),:lang(ur),:lang(yi))){border-top-left-radius:0;border-top-right-radius:var(--dp-radius);border-bottom-right-radius:var(--dp-radius);border-bottom-left-radius:0}.dp-picker-button:not(:-moz-any(:lang(ae),:lang(ar),:lang(arc),:lang(bcc),:lang(bqi),:lang(ckb),:lang(dv),:lang(fa),:lang(glk),:lang(he),:lang(ku),:lang(mzn),:lang(nqo),:lang(pnb),:lang(ps),:lang(sd),:lang(ug),:lang(ur),:lang(yi))){border-top-left-radius:0;border-top-right-radius:var(--dp-radius);border-bottom-right-radius:var(--dp-radius);border-bottom-left-radius:0}.dp-picker-button:not(:is(:lang(ae),:lang(ar),:lang(arc),:lang(bcc),:lang(bqi),:lang(ckb),:lang(dv),:lang(fa),:lang(glk),:lang(he),:lang(ku),:lang(mzn),:lang(nqo),:lang(pnb),:lang(ps),:lang(sd),:lang(ug),:lang(ur),:lang(yi))){border-top-left-radius:0;border-top-right-radius:var(--dp-radius);border-bottom-right-radius:var(--dp-radius);border-bottom-left-radius:0}.dp-picker-button:-webkit-any(:lang(ae),:lang(ar),:lang(arc),:lang(bcc),:lang(bqi),:lang(ckb),:lang(dv),:lang(fa),:lang(glk),:lang(he),:lang(ku),:lang(mzn),:lang(nqo),:lang(pnb),:lang(ps),:lang(sd),:lang(ug),:lang(ur),:lang(yi)){border-top-right-radius:0;border-top-left-radius:var(--dp-radius);border-bottom-left-radius:var(--dp-radius);border-bottom-right-radius:0}.dp-picker-button:-moz-any(:lang(ae),:lang(ar),:lang(arc),:lang(bcc),:lang(bqi),:lang(ckb),:lang(dv),:lang(fa),:lang(glk),:lang(he),:lang(ku),:lang(mzn),:lang(nqo),:lang(pnb),:lang(ps),:lang(sd),:lang(ug),:lang(ur),:lang(yi)){border-top-right-radius:0;border-top-left-radius:var(--dp-radius);border-bottom-left-radius:var(--dp-radius);border-bottom-right-radius:0}.dp-picker-button:is(:lang(ae),:lang(ar),:lang(arc),:lang(bcc),:lang(bqi),:lang(ckb),:lang(dv),:lang(fa),:lang(glk),:lang(he),:lang(ku),:lang(mzn),:lang(nqo),:lang(pnb),:lang(ps),:lang(sd),:lang(ug),:lang(ur),:lang(yi)){border-top-right-radius:0;border-top-left-radius:var(--dp-radius);border-bottom-left-radius:var(--dp-radius);border-bottom-right-radius:0}date-picker[range]>.dp-picker-button{grid-row:1/span 2}.dp-picker-panel[popover]{position:fixed;border:1px solid var(--dp-border);border-radius:var(--dp-radius);background:var(--dp-bg);color:var(--dp-fg);max-block-size:var(--available-height,90svh);overflow:auto;max-inline-size:calc(100vi - 1rem);margin:0;padding:.65rem;inset:auto;box-shadow:0 .5rem 1.5rem #00000029}.dp-picker-panel:not(:popover-open){display:none}@media (forced-colors:active){.dp-day[data-selected=true],.dp-day[data-range-start=true],.dp-day[data-range-end=true]{color:canvastext;background-color:canvas;border:2px solid highlight;font-weight:700}.dp-day[data-in-range=true]{color:canvastext}.dp-day[data-in-range=true]:after{content:"";position:absolute;background-color:highlight;block-size:1px;bottom:4px;left:3px;right:3px}.dp-day[data-selected=true]:before{content:"";position:absolute;border-radius:calc(var(--dp-radius)*.5);pointer-events:none;border:1px solid canvastext;inset:3px}.dp-day[data-today=true]{border-color:highlight}.dp-day-extra{color:canvastext;forced-color-adjust:none}.dp-day[data-disabled=true],.dp-picker-button:disabled{opacity:1;color:graytext}.dp-calendar-header :where(button,select,input):disabled{opacity:1;color:graytext}}