jekyll-obsidian-site 0.3.0 → 0.3.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (34) hide show
  1. checksums.yaml +4 -4
  2. data/website/_includes/website/action-icon.html +1 -0
  3. data/website/_includes/website/archive-export.html +1 -0
  4. data/website/_includes/website/archive-facets.html +15 -3
  5. data/website/_includes/website/archive-pagination.html +2 -1
  6. data/website/_includes/website/archive-timeline.html +3 -3
  7. data/website/_includes/website/back-to-top.html +3 -0
  8. data/website/_includes/website/system-page.html +3 -0
  9. data/website/_layouts/website-docs.html +2 -1
  10. data/website/_layouts/website-minimal.html +2 -1
  11. data/website/assets/archive-worker-2YFJRTHP.js +1 -0
  12. data/website/assets/chunks/chunk-7UNR26CO.js +12 -0
  13. data/website/assets/chunks/chunk-GFG7Q2HN.js +1 -0
  14. data/website/assets/{docs-PANVBLCJ.js → docs-E2KRT3NI.js} +1 -1
  15. data/website/assets/docs-YTJN5WJC.css +1 -0
  16. data/website/assets/{docs-navigation-BBZLZHQB.js → docs-navigation-PT5X44HW.js} +1 -1
  17. data/website/assets/manifest.json +24 -24
  18. data/website/assets/minimal-KTFDX3OT.css +1 -0
  19. data/website/assets/{minimal-YXGMMLS2.js → minimal-NEM6YCGV.js} +1 -1
  20. data/website/lib/jekyll_obsidian/built_in_themes.rb +18 -4
  21. data/website/lib/jekyll_obsidian/localized_compiler.rb +19 -25
  22. data/website/lib/jekyll_obsidian/paged_archive.rb +42 -5
  23. data/website/lib/jekyll_obsidian/tag_policy.rb +49 -0
  24. data/website/lib/jekyll_obsidian/value_objects.rb +1 -0
  25. data/website/lib/jekyll_obsidian/vault_compiler.rb +32 -5
  26. data/website/lib/jekyll_obsidian/version.rb +1 -1
  27. data/website/lib/jekyll_obsidian.rb +1 -0
  28. data/website/scripts/audit-site.rb +1 -1
  29. metadata +11 -9
  30. data/website/assets/archive-worker-WS545WIE.js +0 -1
  31. data/website/assets/chunks/chunk-JXSDAMOW.js +0 -1
  32. data/website/assets/chunks/chunk-R3AIO6OV.js +0 -12
  33. data/website/assets/docs-4DKXPRKN.css +0 -1
  34. data/website/assets/minimal-ERLB42UD.css +0 -1
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: f16353061e7c9dbc1bd8ccc320c4d41394ceaec57021ab1be99d0b4dd6ae9b95
4
- data.tar.gz: c2c4d7a212662548f7c107066f7208bde3981922b239149c51743c3235251ce4
3
+ metadata.gz: c11e15e11052a976f2df428f2e9aededf413b04913f74119971422b851e5f002
4
+ data.tar.gz: 7b3eb3de37c73c25bb4c9466a90a770794c0ec2d849a7e7290d85fe5cdfa39c7
5
5
  SHA512:
6
- metadata.gz: 7a0e7cda9f1a2a3cb4b6532c5b614a163067ca7bd5825413cfefea3477cc477f783ded6304c2d516e911d318ca8a9faa9711c821795ee5d0cb504d4736a29751
7
- data.tar.gz: 76ae44e9f496c8af5675e6c7c8dd4b2cb4fb3f21c2794798bbf325db906951c5df67c4e8ed6a6665585c17e24fc9fa9d8b11fbfd1f3d9f13e1b514134af68b43
6
+ metadata.gz: 78dd8b1ad15cd01084ad34c03e17b6938136a7a66151e2a017617bd0805848c594218c62e895cf68c798469349dc7b5242f61f32d1cd9141e8b88fc8571ce1e0
7
+ data.tar.gz: 42d8f4022ccfc4e3b3bbe2db55fd87271e802d5220f8017ec6fc5fdf44ae6c59a193f9ec4e8db2991a607d10fbdedd6cd96dbdf521331e1454de2a11184b3200
@@ -8,5 +8,6 @@
8
8
  {% when 'reading' %}<path d="M12 5c-3-2-7-2-10-1v15c3-1 7-1 10 1 3-2 7-2 10-1V4c-3-1-7-1-10 1Zm0 0v15"/><path class="site-action__reading-check" d="m15 11 2 2 3-4"/>
9
9
  {% when 'previous' %}<path d="m14 6-6 6 6 6"/>
10
10
  {% when 'next' %}<path d="m10 6 6 6-6 6"/>
11
+ {% when 'back-to-top' %}<path d="m6 15 6-6 6 6"/>
11
12
  {% endcase %}
12
13
  </svg>
@@ -9,6 +9,7 @@
9
9
  data-site="{{ site.title | escape }}"
10
10
  data-download="{{ ui.export_download | default: 'Download Markdown' | escape }}"
11
11
  data-all="{{ ui.all | default: 'All' | escape }}"
12
+ data-all-without-tabs="{{ ui.all_without_tab_sources | default: 'All (excluding tab sources)' | escape }}"
12
13
  data-sources="{{ ui.sources | default: 'Sources' | escape }}"
13
14
  data-topics="{{ ui.topics | default: 'Topics' | escape }}"
14
15
  data-dates="{{ ui.export_dates | default: 'Date range' | escape }}"
@@ -1,5 +1,8 @@
1
1
  {% assign archive = page.website.theme_data.archive %}
2
2
  {% for group in archive.facets %}
3
+ {% assign facet_name = group[0] %}
4
+ {% assign facet_prefix = archive.prefixes[facet_name] %}
5
+ {% assign facet_counts = archive.default_view.facets[facet_name] %}
3
6
  {% if group[1].size == 0 %}{% continue %}{% endif %}
4
7
  {% if page.website.theme_data.tab_id and group[0] == 'source' and group[1].size == 1 %}
5
8
  {% assign only_source = group[1] | first %}
@@ -8,9 +11,18 @@
8
11
  {% assign facet_label = group[0] %}
9
12
  {% if group[0] == 'source' %}{% assign facet_label = ui.sources | default: 'Sources' %}{% elsif group[0] == 'topic' %}{% assign facet_label = ui.topics | default: 'Topics' %}{% endif %}
10
13
  <nav class="tag-filter archive-facet" aria-label="{{ facet_label | escape }}">
11
- <h2 class="archive-facet-label">{{ facet_label | escape }}</h2>
12
- <ul class="tag-filter__list"><li><button class="tag-chip" type="button" data-archive-facet="{{ group[0] | escape }}" data-archive-value="" aria-pressed="true">{{ ui.all | default: 'All' | escape }} <span>{{ archive.total }}</span></button></li>
13
- {% for option in group[1] %}<li><button class="tag-chip" type="button" data-archive-facet="{{ group[0] | escape }}" data-archive-value="{{ option.id | escape }}" aria-pressed="false">{{ option.name | escape }} <span>{{ option.count }}</span></button></li>{% endfor %}</ul>
14
+ <div class="archive-facet-heading"><h2 class="archive-facet-label">{{ facet_label | escape }}</h2></div>
15
+ <ul class="tag-filter__list"><li><button class="tag-chip" type="button" data-archive-facet="{{ group[0] | escape }}" data-archive-value="" aria-pressed="true">{{ ui.all | default: 'All' | escape }} <span>{{ archive.default_view.total | default: archive.total }}</span></button></li>
16
+ {% for option in group[1] %}
17
+ {% comment %}Keep default visibility/counts aligned with src/frontend/archive-visibility.ts; hydration applies URL selections.{% endcomment %}
18
+ {% assign tag = facet_prefix | append: option.id %}
19
+ {% assign option_hidden = false %}
20
+ {% if archive.hidden_tags contains tag %}{% assign option_hidden = true %}{% endif %}
21
+ {% if group[0] == 'source' and archive.tab_sources contains option.id %}{% assign option_hidden = true %}{% endif %}
22
+ {% assign option_count = option.count %}
23
+ {% if archive.default_view %}{% assign option_count = facet_counts[option.id] | default: 0 %}{% endif %}
24
+ {% if option_count == 0 %}{% assign option_hidden = true %}{% endif %}
25
+ <li{% if option_hidden %} hidden{% endif %}><button class="tag-chip" type="button" data-archive-facet="{{ group[0] | escape }}" data-archive-value="{{ option.id | escape }}" aria-pressed="false">{{ option.name | escape }} <span>{{ option_count }}</span></button></li>{% endfor %}</ul>
14
26
  </nav>
15
27
  {% endfor %}
16
28
  <p class="filter-empty" data-archive-empty hidden>{{ ui.no_matching_entries | default: 'No entries match these filters.' | escape }} <button type="button" data-archive-clear>{{ ui.clear_filters | default: 'Clear filters' | escape }}</button></p>
@@ -1,9 +1,10 @@
1
+ {% assign archive_total = page.website.theme_data.archive.default_view.total | default: page.website.theme_data.archive.total %}
1
2
  <nav class="archive-pagination" aria-label="{{ ui.pagination | default: 'Pagination' | escape }}" data-archive-pagination data-page-label="{{ ui.page_label | escape }}" data-result-label="{{ ui.archive_results | escape }}" data-number-label="{{ ui.page_number | escape }}" data-jump-error="{{ ui.page_jump_error | escape }}">
2
3
  <span data-archive-page-status aria-live="polite" aria-atomic="true"></span>
3
4
  <div class="archive-pagination__navigation">
4
5
  <button type="button" data-archive-page="prev" aria-label="{{ ui.previous | default: 'Previous' | escape }}" title="{{ ui.previous | default: 'Previous' | escape }}" disabled>{% include website/action-icon.html name='previous' class='archive-pagination__arrow' %}<span>{{ ui.previous | default: 'Previous' | escape }}</span></button>
5
6
  <div class="archive-pagination__numbers" data-archive-page-numbers></div>
6
- <button type="button" data-archive-page="next" aria-label="{{ ui.next | default: 'Next' | escape }}" title="{{ ui.next | default: 'Next' | escape }}"{% if page.website.theme_data.archive.total <= page.website.theme_data.archive.page_size %} disabled{% endif %}>{% include website/action-icon.html name='next' class='archive-pagination__arrow' %}<span>{{ ui.next | default: 'Next' | escape }}</span></button>
7
+ <button type="button" data-archive-page="next" aria-label="{{ ui.next | default: 'Next' | escape }}" title="{{ ui.next | default: 'Next' | escape }}"{% if archive_total <= page.website.theme_data.archive.page_size %} disabled{% endif %}>{% include website/action-icon.html name='next' class='archive-pagination__arrow' %}<span>{{ ui.next | default: 'Next' | escape }}</span></button>
7
8
  </div>
8
9
  <form class="archive-pagination__jump" data-archive-page-jump hidden>
9
10
  <label><span class="visually-hidden">{{ ui.page_input | default: 'Page number' | escape }}</span><input type="number" inputmode="numeric" min="1" step="1" required disabled></label>
@@ -5,13 +5,13 @@
5
5
  <nav class="archive-timeline" data-timeline-nav aria-labelledby="archive-timeline-title"{% if page.website.theme_data.favorites %} hidden{% endif %}>
6
6
  <h2 class="relation-section__title" id="archive-timeline-title">{{ ui.chronology | default: 'Chronology' | escape }}</h2>
7
7
  {% for group in include.timeline %}
8
- <section class="archive-timeline__year{% if group.days %} archive-timeline__year--days{% endif %}">
8
+ <section class="archive-timeline__year{% if group.days %} archive-timeline__year--days{% endif %}"{% if group.count == 0 %} hidden{% endif %}>
9
9
  <h3><a href="{{ filter_url | escape }}?year={{ group.year | url_encode }}" data-year-filter-option data-filter-year="{{ group.year | escape }}"><span>{{ group.year | escape }}</span><span class="archive-timeline__count">{{ group.count }}</span></a></h3>
10
10
  <ul>
11
11
  {% if group.days %}
12
- {% for day in group.days %}<li><a href="{{ filter_url | escape }}?day={{ day.key | url_encode }}" data-day-filter-option data-filter-day="{{ day.key | escape }}"><span>{{ day.label | escape }}</span><span class="archive-timeline__count">{{ day.count }}</span></a></li>{% endfor %}
12
+ {% for day in group.days %}<li{% if day.count == 0 %} hidden{% endif %}><a href="{{ filter_url | escape }}?day={{ day.key | url_encode }}" data-day-filter-option data-filter-day="{{ day.key | escape }}"><span>{{ day.label | escape }}</span><span class="archive-timeline__count">{{ day.count }}</span></a></li>{% endfor %}
13
13
  {% else %}
14
- {% for month in group.months %}<li><a href="{{ filter_url | escape }}?month={{ month.key | url_encode }}" data-month-filter-option data-filter-month="{{ month.key | escape }}"><span>{{ month.label | escape }}</span><span class="archive-timeline__count">{{ month.count }}</span></a></li>{% endfor %}
14
+ {% for month in group.months %}<li{% if month.count == 0 %} hidden{% endif %}><a href="{{ filter_url | escape }}?month={{ month.key | url_encode }}" data-month-filter-option data-filter-month="{{ month.key | escape }}"><span>{{ month.label | escape }}</span><span class="archive-timeline__count">{{ month.count }}</span></a></li>{% endfor %}
15
15
  {% endif %}
16
16
  </ul>
17
17
  </section>
@@ -0,0 +1,3 @@
1
+ <button class="back-to-top" type="button" data-back-to-top hidden aria-label="{{ ui.back_to_top | default: 'Back to top' | escape }}" title="{{ ui.back_to_top | default: 'Back to top' | escape }}">
2
+ {% include website/action-icon.html name='back-to-top' %}
3
+ </button>
@@ -22,6 +22,9 @@
22
22
  {% include website/portfolio-grid.html index=true %}
23
23
  {% when 'blog-index' %}
24
24
  {% if page.website.theme_data.archive %}
25
+ {% if page.website.theme_data.archive.hidden_tags.size > 0 or page.website.theme_data.archive.tab_sources.size > 0 %}
26
+ <template data-archive-visibility-ui data-hidden-tags="{{ page.website.theme_data.archive.hidden_tags | jsonify | escape }}" data-show-topics="{{ ui.show_hidden_topics | default: 'Show hidden topics' | escape }}" data-hide-topics="{{ ui.hide_hidden_topics | default: 'Hide hidden topics' | escape }}" data-show-tags="{{ ui.show_hidden_tags | default: 'Show hidden tags' | escape }}" data-hide-tags="{{ ui.hide_hidden_tags | default: 'Hide hidden tags' | escape }}" data-include-tabs="{{ ui.include_tab_sources | default: 'Include tab sources' | escape }}" data-hide-tabs="{{ ui.hide_tab_sources | default: 'Hide tab sources' | escape }}"></template>
27
+ {% endif %}
25
28
  {% unless page.website.theme_data.tab_id and page.website.has_h1 %}<h1 class="{% if page.title == site.title or page.website.theme_data.favorites or page.website.theme_data.tab_id %}visually-hidden{% else %}archive-title{% endif %}">{{ page.title | escape }}</h1>{% endunless %}
26
29
  {% if page.website.theme_data.favorites %}
27
30
  <div data-favorites-facets></div>
@@ -4,10 +4,11 @@
4
4
  <body class="theme-docs">
5
5
  {% assign ui = page.website.i18n.messages %}
6
6
  <a class="skip-link" href="#main-content">{{ ui.skip_to_content | default: 'Skip to content' | escape }}</a>
7
+ {% include website/back-to-top.html %}
7
8
  {% include website/header.html theme='docs' %}
8
9
  <div class="docs-shell">
9
10
  <aside class="docs-sidebar"><nav class="docs-tree" aria-label="{{ ui.documentation | default: 'Documentation' | escape }}" data-docs-navigation>{% include website/docs-tree.html nodes=page.website.theme_data.docs_tree %}</nav></aside>
10
- <main class="docs-main" id="main-content" data-docs-main>
11
+ <main class="docs-main" id="main-content" tabindex="-1" data-docs-main>
11
12
  <article class="docs-article{% if page.website.cssclasses %} {{ page.website.cssclasses | join: ' ' }}{% endif %}">{% if page.website.i18n.fallback %}<aside class="translation-fallback" role="status">{{ ui.translation_missing | default: 'This page is not translated yet. The default-language version is shown.' | escape }}</aside>{% endif %}{% unless page.website.has_h1 %}{% include website/page-actions.html %}{% endunless %}{% include website/note-header.html %}{% include website/note-source.html %}{% include website/note-properties.html %}{% if page.website.has_h1 %}{% include website/page-actions.html %}{% endif %}<div class="note-content" lang="{{ page.website.i18n.content_lang | default: page.website.i18n.locale | default: site.lang | default: 'en' | escape }}" dir="{{ page.website.i18n.content_dir | default: page.website.i18n.dir | default: 'ltr' | escape }}" data-copy-code-label="{{ ui.copy_code | default: 'Copy code' | escape }}" data-copy-diagram-label="{{ ui.copy_diagram_source | default: 'Copy diagram source' | escape }}" data-expand-diagram-label="{{ ui.expand_diagram | default: 'Expand diagram' | escape }}" data-close-diagram-label="{{ ui.close_diagram | default: 'Close diagram' | escape }}" data-image-label="{{ ui.image | default: 'Image' | escape }}" data-expand-image-label="{{ ui.expand_image | default: 'Expand image' | escape }}" data-close-image-label="{{ ui.close_image | default: 'Close image' | escape }}" data-copy-formula-label="{{ ui.copy_formula_source | default: 'Copy formula source' | escape }}" data-copy-code-success="{{ ui.copied | default: 'Copied' | escape }}" data-copy-code-error="{{ ui.copy_code_failed | default: 'Copy failed' | escape }}">{% if page.website.kind == 'note' %}{{ content }}{% else %}{% include website/system-page.html %}{% endif %}</div>{% if page.website.kind == 'note' and page.website.theme_data.tab_id %}{% include website/tab-collection.html %}{% endif %}{% include website/source-actions.html %}{% include website/related-articles.html %}{% include website/comments.html %}</article>
12
13
  {% include website/docs-navigation.html %}
13
14
  </main>
@@ -21,10 +21,11 @@
21
21
  {% endif %}
22
22
 
23
23
  <a class="skip-link" href="#main-content">{{ ui.skip_to_content | default: 'Skip to content' | escape }}</a>
24
+ {% include website/back-to-top.html %}
24
25
  {% include website/header.html theme='minimal' %}
25
26
  {% include website/favorites-ui.html %}
26
27
 
27
- <main class="minimal-shell{% if page.website.archive_item %} minimal-shell--archive-item{% endif %}{% unless page.website.kind == 'note' %} minimal-shell--system{% endunless %}{% if is_authored_home %} minimal-shell--authored-home{% endif %}{% if is_docs_page %} minimal-shell--docs{% endif %}{% if page.website.kind == 'blog-index' %} minimal-shell--blog{% endif %}" id="main-content"{% if page.website.kind == 'blog-index' %} data-ledger-current-year="{{ page.website.theme_data.ledger_current_year }}"{% endif %}{% if page.website.kind == 'blog-index' %} data-ledger-group-by="{{ page.website.theme_data.ledger_group_by | default: 'year' | escape }}"{% endif %}{% if page.website.theme_data.favorites %} data-favorites-page data-sources-label="{{ ui.sources | escape }}" data-topics-label="{{ ui.topics | escape }}" data-all-label="{{ ui.all | escape }}"{% endif %}{% if page.website.kind == 'blog-index' %} data-filter-page{% if page.website.theme_data.archive %} data-paged-archive data-archive-url="{{ page.website.theme_data.archive.url | escape }}" data-archive-current-url="{{ page.website.theme_data.archive.current_url | escape }}" data-observed-label="{{ ui.first_observed | default: 'First observed' | escape }}"{% endif %}{% endif %}>
28
+ <main class="minimal-shell{% if page.website.archive_item %} minimal-shell--archive-item{% endif %}{% unless page.website.kind == 'note' %} minimal-shell--system{% endunless %}{% if is_authored_home %} minimal-shell--authored-home{% endif %}{% if is_docs_page %} minimal-shell--docs{% endif %}{% if page.website.kind == 'blog-index' %} minimal-shell--blog{% endif %}" id="main-content" tabindex="-1"{% if page.website.kind == 'blog-index' %} data-ledger-current-year="{{ page.website.theme_data.ledger_current_year }}"{% endif %}{% if page.website.kind == 'blog-index' %} data-ledger-group-by="{{ page.website.theme_data.ledger_group_by | default: 'year' | escape }}"{% endif %}{% if page.website.theme_data.favorites %} data-favorites-page data-sources-label="{{ ui.sources | escape }}" data-topics-label="{{ ui.topics | escape }}" data-all-label="{{ ui.all | escape }}"{% endif %}{% if page.website.kind == 'blog-index' %} data-filter-page{% if page.website.theme_data.archive %} data-paged-archive data-archive-url="{{ page.website.theme_data.archive.url | escape }}" data-archive-current-url="{{ page.website.theme_data.archive.current_url | escape }}" data-observed-label="{{ ui.first_observed | default: 'First observed' | escape }}"{% endif %}{% endif %}>
28
29
  {% if is_docs_page %}
29
30
  <aside class="minimal-docs-sidebar">
30
31
  <nav class="docs-tree" aria-label="{{ ui.documentation | default: 'Documentation' | escape }}" data-docs-navigation>
@@ -0,0 +1 @@
1
+ import{d as o}from"./chunks/chunk-GFG7Q2HN.js";import"./chunks/chunk-PHKIAKHS.js";var e=new Map,a;globalThis.addEventListener("message",c=>{let{id:d,generation:n,total:u,size:l,query:i,bitmaps:m,mode:g,limit:p}=c.data;a!==n&&(e.clear(),a=n);for(let[t,r]of Object.entries(m))e.set(t,r);let s=Object.create(null);for(let t of[...i.groups.flat(),...i.excluded||[]]){let r=e.get(t);r&&(s[t]=r,e.delete(t),e.set(t,r))}for(;e.size>20;)e.delete(e.keys().next().value);globalThis.postMessage({id:d,...o(u,l,i,s,g,p)})});
@@ -0,0 +1,12 @@
1
+ import{a as se,b as ye,c as et,h as st,i as lt}from"./chunk-OEBMYWCF.js";import{a as ot,c as at}from"./chunk-GMBKQ7NZ.js";import{a as Oe,b as rt,c as we,d as nt,e as it,f as re}from"./chunk-GFG7Q2HN.js";import{a as be,c as Ze}from"./chunk-MGH5TWGB.js";import{a as qe,b as tt}from"./chunk-D6FURU6X.js";function ct(){let e=Array.from(document.querySelectorAll("[data-outline-link][href^='#'], [data-outline] a[href^='#']"));if(e.length===0||!("IntersectionObserver"in window))return()=>{};let t=new Map;for(let i of e){let l=i.hash.slice(1);if(!l)continue;let s=document.getElementById(decodeURIComponent(l));s&&t.set(s,i)}if(t.size===0)return()=>{};let r=null,n=i=>{r!==i&&(r?.removeAttribute("aria-current"),i.setAttribute("aria-current","location"),r=i)},a=new IntersectionObserver(i=>{let s=i.filter(m=>m.isIntersecting).sort((m,c)=>m.boundingClientRect.top-c.boundingClientRect.top)[0];if(s){let m=t.get(s.target);m&&n(m)}},{rootMargin:"-12% 0px -72% 0px",threshold:[0,1]});for(let i of t.keys())a.observe(i);let o=t.values().next().value;return o&&n(o),()=>a.disconnect()}function dt(){for(let e of document.querySelectorAll("[data-language-switcher]")){let t=e.querySelector("summary"),r=e.querySelector(".language-switcher__panel"),n=!1,a=()=>{e.open=!1,n=!1},o=()=>{if(!r||!e.open)return;let i=e.getBoundingClientRect(),l=getComputedStyle(e).direction==="rtl"?document.documentElement.clientWidth-i.left:i.right;r.style.setProperty("--language-panel-available",`${Math.max(0,l-16)}px`)};e.addEventListener("toggle",o),window.addEventListener("resize",o),e.addEventListener("pointerenter",i=>{i.pointerType!=="mouse"||!window.matchMedia("(any-hover: hover)").matches||e.open||(n=!0,e.open=!0)}),e.addEventListener("pointerleave",i=>{i.pointerType==="mouse"&&n&&!r?.contains(document.activeElement)&&a()}),e.addEventListener("focusout",i=>{n&&!e.matches(":hover")&&!(i.relatedTarget instanceof Node&&e.contains(i.relatedTarget))&&a()}),e.addEventListener("click",i=>{let l=i.target;if(!(l instanceof Element)||(n&&i.detail>0&&l.closest("summary")===t&&i.preventDefault(),!document.querySelector("[data-paged-archive]")))return;let s=l.closest("a[href]");if(s){let m=new URL(s.href);m.search=window.location.search,s.href=m.href}}),e.addEventListener("keydown",i=>{i.key!=="Escape"||!e.open||(i.preventDefault(),a(),t?.focus())}),document.addEventListener("click",i=>{!e.open||!(i.target instanceof Node)||e.contains(i.target)||a()})}}function mt(){let e=[...document.querySelectorAll("[data-recommendations]")],t,r=()=>{clearTimeout(t);let n=Date.now(),a=1/0;for(let o of e){for(let i of o.querySelectorAll("[data-recommendation-expires-at]")){let l=Date.parse(i.dataset.recommendationExpiresAt??"");!Number.isFinite(l)||l<=n?i.remove():a=Math.min(a,l)}o.hidden=!o.querySelector("[data-recommendation-expires-at]")}Number.isFinite(a)&&(t=setTimeout(r,Math.min(a-n,2147483647)))};return r(),document.addEventListener("visibilitychange",r),window.addEventListener("pageshow",r),()=>{clearTimeout(t),document.removeEventListener("visibilitychange",r),window.removeEventListener("pageshow",r)}}var Re="https://giscus.app",lr=`${Re}/client.js`;function cr(e){let t={repository:e.dataset.websiteCommentsRepository||"",repositoryId:e.dataset.websiteCommentsRepositoryId||"",category:e.dataset.websiteCommentsCategory||"",categoryId:e.dataset.websiteCommentsCategoryId||"",term:e.dataset.websiteCommentsTerm||"",language:e.dataset.websiteCommentsLanguage||"en"};return Object.values(t).every(Boolean)?t:null}function ut(e){let t=e.documentElement.dataset.colorScheme;return t==="light"||t==="dark"?t:ye()}function dr(e){if(!e||typeof e!="object"||!("giscus"in e))return{found:!1,message:null};let t=e.giscus;if(!t||typeof t!="object"||!("error"in t))return{found:!1,message:null};let r=t.error;return{found:!0,message:typeof r=="string"?r:null}}function pt(e,t){e.querySelector("iframe.giscus-frame")?.contentWindow?.postMessage({giscus:{setConfig:{theme:t}}},Re)}function mr(e,t){if(e.dataset.websiteCommentsInitialised==="true")return()=>{};e.dataset.websiteCommentsInitialised="true";let r=e.querySelector("[data-website-comments-status]"),n=e.querySelector("[data-website-comments-container]"),a=cr(e),o=e.dataset.websiteCommentsUnavailable||"Comments could not be loaded. You can continue the conversation on GitHub.",i=()=>{e.dataset.websiteCommentsState="unavailable",r&&(r.hidden=!1,r.textContent=o)};if(!n||!a)return i(),()=>{};e.dataset.websiteCommentsState="loading";let l=new MutationObserver(()=>{n.querySelector("iframe.giscus-frame")&&(pt(e,ut(t)),e.dataset.websiteCommentsState="ready",r&&(r.hidden=!0),l.disconnect())});l.observe(n,{childList:!0,subtree:!0});let s=t.createElement("script");s.src=lr,s.async=!0,s.crossOrigin="anonymous",s.dataset.repo=a.repository,s.dataset.repoId=a.repositoryId,s.dataset.category=a.category,s.dataset.categoryId=a.categoryId,s.dataset.mapping="specific",s.dataset.term=a.term,s.dataset.strict="1",s.dataset.reactionsEnabled="1",s.dataset.emitMetadata="0",s.dataset.inputPosition="top",s.dataset.theme=ut(t),s.dataset.lang=a.language,s.dataset.loading="lazy",s.dataset.websiteCommentsClient="",s.addEventListener("error",i,{once:!0});let m=t.defaultView,c=d=>{if(d.origin!==Re)return;let p=dr(d.data);p.found&&!p.message?.includes("Discussion not found")&&i()},u=d=>{let p=d.detail?.scheme;(p==="light"||p==="dark")&&(s.dataset.theme=p,pt(e,p))};return m?.addEventListener("message",c),t.addEventListener(se,u),n.append(s),()=>{l.disconnect(),m?.removeEventListener("message",c),t.removeEventListener(se,u)}}function ft(e=document){let t=Array.from(e.querySelectorAll("[data-website-comments-load]")).map(r=>mr(r,e));return()=>t.forEach(r=>r())}function vt(e,t,r,n){return t.getAll(r).includes(n)||!e.default_view||t.get("include_tabs")==="1"?!0:!!e.default_view.facets[r]?.[n]}function ur(e,t){if(e.default_view&&t.get("include_tabs")!=="1")return e.default_view;let r=n=>Object.fromEntries(Object.entries(n).map(([a,[o,i]])=>[a,i-o]));return{total:e.total,facets:Object.fromEntries(Object.entries(e.facets).map(([n,a])=>[n,Object.fromEntries(a.map(o=>[o.id,o.count]))])),years:r(e.years),months:r(e.months),days:r(e.days)}}function xe(e,t,r,n){return!n||t.getAll(r).includes(n)?!0:!vt(e,t,r,n)||r==="source"&&e.tab_sources?.includes(n)&&t.get("include_tabs")!=="1"?!1:t.getAll("show_hidden").includes(r)||!e.hidden_tags?.includes(e.prefixes[r]+n)}function _e(e,t,r,n){if(t==="show_hidden"){let o=new Set(e.getAll(t));o.has(n)?o.delete(n):o.add(n),e.delete(t),[...o].sort().forEach(i=>e.append(t,i));return}let a=re(r,e.toString()).parameters.get(t)==="1";if(a?e.delete(t):e.set(t,"1"),t==="include_tabs"&&(e.delete("page"),a)){let o=[...new Set(e.getAll("source").map(i=>we(i,r.prefixes.source||"source/",r.aliases)))].filter(i=>!r.tab_sources?.includes(i));e.delete("source"),o.forEach(i=>e.append("source",i))}}function ue(){return document.querySelector("[data-archive-visibility-ui]")?.dataset||{}}function Fe(e,t,r,n={},a){let o=e.facets[r]?.some(s=>e.hidden_tags?.includes(e.prefixes[r]+s.id)&&vt(e,t,r,s.id));return[...r==="source"&&e.facets[r]?.some(s=>e.tab_sources?.includes(s.id))?["include_tabs"]:[],...o?["show_hidden"]:[]].map(s=>{let m=s==="show_hidden"?t.getAll(s).includes(r):t.get(s)==="1",c=document.createElement("button");return c.type="button",c.className="archive-visibility",c.dataset.archiveVisibility=s,c.dataset.archiveVisibilityFacet=r,c.setAttribute("aria-expanded",String(m)),a&&c.setAttribute("aria-controls",a),c.textContent=s==="include_tabs"?m?n.hideTabs||"Hide tab sources":n.includeTabs||"Include tab sources":r==="topic"?m?n.hideTopics||"Hide hidden topics":n.showTopics||"Show hidden topics":m?n.hideTags||"Hide hidden tags":n.showTags||"Show hidden tags",c})}var gt=new WeakMap;function Pe(e,t){e&&e.textContent!==t&&(e.textContent=t)}function ht(e,t){e.hidden!==t&&(e.hidden=t)}function bt(e,t,r){let n=gt.get(e),a=!!(t.hidden_tags?.length||t.tab_sources?.length);if(!a&&!n?.governed)return;let o=r.get("include_tabs")==="1",i=JSON.stringify([r.getAll("show_hidden"),Object.keys(t.facets).map(c=>r.getAll(c))]);if(n?.data===t&&n.scope===o&&n.selection===i)return;let s=n?.data!==t||n.scope!==o?ur(t,r):void 0,m=ue();for(let c of e.querySelectorAll(".archive-facet")){let u=c.querySelector(".archive-facet-heading"),d=c.querySelector("[data-archive-facet]")?.dataset.archiveFacet;if(!d)continue;let p=c.querySelector("ul");p.id||(p.id=`archive-options-${d}`);let g=new Map([...u.querySelectorAll("[data-archive-visibility]")].map(b=>[b.dataset.archiveVisibility,b]));for(let b of Fe(t,r,d,m,p.id)){let C=g.get(b.dataset.archiveVisibility);if(C){Pe(C,b.textContent);for(let z of["aria-expanded","aria-controls"])C.getAttribute(z)!==b.getAttribute(z)&&C.setAttribute(z,b.getAttribute(z));g.delete(b.dataset.archiveVisibility)}else u.append(b)}g.forEach(b=>b.remove());for(let b of c.querySelectorAll("[data-archive-facet]")){let C=b.dataset.archiveValue,z=b.querySelector("span");ht(b.closest("li"),!xe(t,r,d,C)),s&&Pe(z,String(C?s.facets[d]?.[C]||0:s.total))}}if(s)for(let c of["year","month","day"]){let u=s[`${c}s`];for(let d of document.querySelectorAll(`[data-timeline-nav] [data-${c}-filter-option]`)){let p=u[d.getAttribute(`data-filter-${c}`)]||0,g=d.querySelector(".archive-timeline__count");Pe(g,String(p));let b=d.closest(c==="year"?"section":"li");b&&ht(b,p===0)}}gt.set(e,{data:t,selection:i,scope:o,governed:a})}var le=class extends Error{constructor(){super("Export body size limit exceeded")}},ce=class{constructor(t=67108864){this.limit=t}limit;used=0;reserve(t){if(this.used+t>this.limit)throw new le;this.used+=t}release(t){this.used-=t}};function V(e){if(!e||typeof e!="object"||Array.isArray(e))throw new Error("Invalid archive data");return e}function W(e,t=!1){let r=new URL(e,window.location.href);if(!/^https?:$/.test(r.protocol)||r.username||r.password||!t&&r.origin!==location.origin)throw new Error("Invalid archive URL");return r}async function de(e,t,r){let n=0;await Promise.all(Array.from({length:Math.min(4,e.length)},async()=>{for(;n<e.length;)r.throwIfAborted(),await t(e[n++])}))}function wt(e){let t=W(e),r=new AbortController,n=new AbortController,a,o=new Map,i=new Map,l=new Map,s=new Map,m,c,u=0,d=0,p,g=[],b=new Map;function C(E,v){if(a===E){a=void 0,E.terminate(),s.clear(),m=void 0;for(let T of b.values())T.reject(v)}}function z(){if(!a){s.clear(),m=void 0;let E=new Worker(tt("archive-worker"),{type:"module"});E.onmessage=v=>{a===E&&b.get(v.data.id)?.resolve(v.data)},E.onerror=()=>C(E,new Error("Archive worker failed")),E.onmessageerror=()=>C(E,new Error("Invalid archive worker response")),a=E}return a}function L(E){return AbortSignal.any([r.signal,n.signal,...E?[E]:[]])}function N(E,v,T){v.throwIfAborted();let k=i.get(E);if(!k){let y=new AbortController,x={controller:y,users:0,settled:!1,promise:T(L(y.signal)).finally(()=>{x.settled=!0,i.get(E)===x&&i.delete(E)})};i.set(E,x),k=x}let w=k;return w.users++,new Promise((y,x)=>{let f=!1,h=()=>{f||(f=!0,v.removeEventListener("abort",_),--w.users===0&&!w.settled&&(i.get(E)===w&&i.delete(E),w.controller.abort()))},_=()=>{h(),x(v.reason)};v.addEventListener("abort",_,{once:!0}),w.promise.then(A=>{f||(h(),y(A))},A=>{f||(h(),x(A))})})}async function S(E,v){v.throwIfAborted(),d<4?d++:await new Promise((T,k)=>{let w={start(){v.removeEventListener("abort",w.cancel),T()},cancel(){let y=g.indexOf(w);y>=0&&g.splice(y,1),k(v.reason)}};g.push(w),v.addEventListener("abort",w.cancel,{once:!0})});try{return v.throwIfAborted(),await E()}finally{let T=g.shift();T?T.start():d--}}async function M(E,v,T=!1){if(v.throwIfAborted(),o.has(E)){let w=o.get(E);return o.delete(E),o.set(E,w),w}let k=new URL(E,t);if(k.origin!==t.origin||!k.pathname.startsWith(t.pathname.slice(0,t.pathname.lastIndexOf("/")+1)))throw new Error("Invalid archive resource path");return N(k.href,v,w=>S(async()=>{if(o.has(E))return o.get(E);let y=await fetch(k,{signal:AbortSignal.any([w,AbortSignal.timeout(15e3)]),cache:T?"no-cache":"default"});if(!y.ok||new URL(y.url||k.href).origin!==t.origin)throw new Error("Archive load failed");let x=await y.json();if(w.throwIfAborted(),E==="manifest.json"){let f=q(x);return c?.generation!==f.generation&&(o.clear(),l.clear(),p=void 0),c=f}else{if(V(x).generation!==c?.generation)throw new Error("Archive generation differs");for(o.set(E,x);o.size>20;)o.delete(o.keys().next().value)}return x},w))}function q(E){let v=V(E);if(v.version!==1||!Number.isSafeInteger(v.total)||Number(v.total)<0||!Number.isSafeInteger(v.page_size)||Number(v.page_size)<1||Number(v.page_size)>100||!Number.isSafeInteger(v.export_max_days)||Number(v.export_max_days)<1||typeof v.generation!="string"||!/^[a-f0-9]{64}$/.test(v.generation)||!Array.isArray(v.chunks))throw new Error("Invalid archive manifest");for(let k of["facets","prefixes","labels","aliases","years","months","days"])V(v[k]);for(let k of["hidden_tags","tab_sources"]){let w=v[k];if(w!==void 0&&(!Array.isArray(w)||w.some(y=>typeof y!="string"||!y)||new Set(w).size!==w.length))throw new Error("Invalid archive visibility policy")}if(v.default_view!==void 0){let k=V(v.default_view),w=x=>Number.isSafeInteger(x)&&Number(x)>=0&&Number(x)<=Number(v.total);if(!w(k.total))throw new Error("Invalid archive view count");let y=[...Object.values(V(k.facets)),k.years,k.months,k.days];for(let x of y)if(!Object.values(V(x)).every(w))throw new Error("Invalid archive view counts")}if((v.excluded_posting!==void 0||Array.isArray(v.tab_sources)&&v.tab_sources.length)&&(typeof v.excluded_posting!="string"||!v.excluded_posting))throw new Error("Invalid archive exclusion posting");let T=Array.isArray(v.tab_sources)&&v.tab_sources.length>0;if(T!==(v.default_view!==void 0)||T!==(v.excluded_posting!==void 0)||T&&(typeof V(v.prefixes).source!="string"||!Array.isArray(V(v.facets).source)))throw new Error("Invalid archive visibility scope");if(v.identities!==void 0&&typeof v.identities!="string")throw new Error("Invalid archive identities path");if(v.ledger_group_by!==void 0&&v.ledger_group_by!=="year"&&v.ledger_group_by!=="day")throw new Error("Invalid ledger grouping");for(let[k,w]of Object.entries(V(v.prefixes))){if(!/^[a-z][a-z0-9_-]*$/.test(k)||typeof w!="string"||!Array.isArray(V(v.facets)[k]))throw new Error("Invalid archive facet");for(let y of V(v.facets)[k]){let x=V(y);if(typeof x.id!="string"||typeof x.name!="string"||x.posting!==void 0&&typeof x.posting!="string")throw new Error("Invalid archive option")}}if(v.chunks.length!==Math.ceil(Number(v.total)/Number(v.page_size)))throw new Error("Invalid archive chunk count");for(let k of[v.years,v.months,v.days])for(let w of Object.values(V(k)))if(!Array.isArray(w)||w.length!==2||!w.every(Number.isSafeInteger)||w[0]<0||w[1]>Number(v.total)||w[0]>w[1])throw new Error("Invalid chronology bounds");return v}async function H(E){let v=L(E);return v.throwIfAborted(),c||await M("manifest.json",v)}async function O(E,v){let T=W(E);v?.throwIfAborted(),r.signal.throwIfAborted(),T.href!==t.href&&(n.abort(new Error("Archive generation changed")),n=new AbortController,t=T,c=void 0,o.clear(),l.clear(),p=void 0);let k=L(v);return await M("manifest.json",k,!0)}async function R(E,v){let T=L(v),k=W(E),w=await N("current:"+k.href,T,y=>S(async()=>{let x=await fetch(k,{signal:AbortSignal.any([y,AbortSignal.timeout(15e3)]),cache:"no-cache",headers:{Accept:"application/json"}});if(!x.ok||W(x.url||k.href).origin!==k.origin)throw new Error("Current archive could not be loaded");let f=V(await x.json());if(y.throwIfAborted(),f.version!==1||typeof f.url!="string")throw new Error("Invalid current archive descriptor");let h=W(f.url);if(!h.pathname.endsWith("/manifest.json"))throw new Error("Invalid current archive manifest path");return h.href},y));return T.throwIfAborted(),c&&w===t.href?c:O(w,v)}async function U(E,v,T,k){let w=L(T),y=await H(w),x=Object.create(null);await de(E.keys,async _=>{let A=_.indexOf("/"),I=_.slice(0,A),D=_.slice(A+1),$=y.facets[I]?.find(F=>F.id===D);if(!$&&_!==Oe)return;let P=_===Oe?y.excluded_posting:$?.posting;if(!P)throw new Error("Archive does not provide remote filter postings");if(!l.has(_)){let F=V(await M(P,w));if(F.total!==y.total||typeof F.bitmap!="string")throw new Error("Invalid posting");l.has(_)||l.set(_,it(F.bitmap,y.total))}let B=l.get(_);for(l.delete(_),l.set(_,B);l.size>20;)l.delete(l.keys().next().value);x[_]=B},w),w.throwIfAborted();let f=++u,h=z();return new Promise((_,A)=>{let I=()=>{clearTimeout($),b.delete(f),w.removeEventListener("abort",D)},D=()=>{I(),A(w.reason)},$=setTimeout(()=>C(h,new Error("Archive query timed out")),15e3);b.set(f,{resolve(P){I(),_(P)},reject(P){I(),A(P)}}),w.addEventListener("abort",D,{once:!0});try{m!==y.generation&&(s.clear(),m=y.generation);let P=Object.fromEntries(Object.entries(x).filter(([F,G])=>s.get(F)!==G)),B={id:f,generation:y.generation,total:y.total,size:y.page_size,query:E.query,bitmaps:P,mode:v,limit:k};h.postMessage(B);for(let F of[...E.query.groups.flat(),...E.query.excluded||[]]){let G=x[F];G&&(s.delete(F),s.set(F,G))}for(;s.size>20;)s.delete(s.keys().next().value)}catch(P){C(h,P)}})}async function X(E,v){let T=L(v),k=await H(T),w=new Map;return await de([...new Set(E.map(y=>Math.floor(y/k.page_size)))],async y=>{let x=k.chunks[y];if(!x)throw new Error("Missing archive chunk");let f=V(await M(x,T));if(f.start!==y*k.page_size||!Array.isArray(f.cards)||f.cards.length!==Math.min(k.page_size,k.total-y*k.page_size))throw new Error("Invalid card chunk");for(let h of f.cards){let _=V(h);if(typeof _.id!="string"||typeof _.title!="string"||typeof _.url!="string"||typeof _.markdown_url!="string"||typeof _.year!="string")throw new Error("Invalid card");V(_.facets)}w.set(y,f.cards)},T),E.map(y=>{let x=w.get(Math.floor(y/k.page_size))?.[y%k.page_size];if(!x)throw new Error("Missing archive card");return x})}async function Y(E,v){let T=L(v),k=await H(T);if(!k.identities)throw new Error("Missing archive identities");if(!p){let f=V(await M(k.identities,T));if(!Array.isArray(f.ids)||f.ids.length!==k.total||!f.ids.every(_=>typeof _=="string"))throw new Error("Invalid archive identities");let h=new Map(f.ids.map((_,A)=>[_,A]));if(h.size!==k.total)throw new Error("Duplicate archive identity");p=h}let w=E.filter(f=>p.has(f)),y=w.map(f=>p.get(f)),x=await X(y,T);if(x.some((f,h)=>f.id!==w[h]))throw new Error("Archive identity differs from card");return new Map(x.map(f=>[f.id,f]))}async function oe(E,v,T=new ce){let k=L(v),w=W(E.markdown_url);return S(async()=>{let y=await fetch(w,{signal:AbortSignal.any([k,AbortSignal.timeout(15e3)]),headers:{Accept:"text/markdown, text/plain"}});k.throwIfAborted();let x=y.headers.get("content-type")?.split(";")[0]?.trim().toLowerCase();if(!y.ok||new URL(y.url||w.href).origin!==location.origin||x&&!["text/markdown","text/plain","application/octet-stream"].includes(x))throw new Error("Markdown load failed");let f=y.body?.getReader();if(!f)return"";let h=new TextDecoder,_=[],A=0;try{for(;;){let{done:$,value:P}=await f.read();if(k.throwIfAborted(),$)break;T.reserve(P.byteLength),A+=P.byteLength,_.push(h.decode(P,{stream:!0}))}_.push(h.decode());let I=_.join(""),D=I.replace(/^(?:\s|<!--[\s\S]*?-->)+/,"");if(/^(?:<!doctype\s+html\b|<html\b|<head\b|<body\b|<\?xml\b|<Error\b)/i.test(D))throw new Error("Markdown load failed");return I}catch(I){throw T.release(A),I}finally{await f.cancel().catch(()=>{}),f.releaseLock()}},k)}async function ae(E,v,T=!1){let k=L(v),w=W(E);return S(async()=>{let y=await fetch(w,{signal:AbortSignal.any([k,AbortSignal.timeout(15e3)]),headers:{Accept:"text/html"},cache:T?"no-cache":"default"});k.throwIfAborted();let x=W(y.url||w.href).href;if(!y.ok||!y.headers.get("content-type")?.includes("text/html"))throw new Error("Article load failed");let f=await y.text();return k.throwIfAborted(),{html:f,url:x}},k)}return{manifest:H,revalidate:O,revalidateCurrent:R,select:U,cards:X,lookup:Y,markdown:oe,article:ae,dispose(){r.abort(),a?.terminate(),a=void 0,o.clear(),l.clear(),s.clear(),m=void 0,p=void 0}}}var _t=864e5;function ke(e){if(!/^\d{4}-\d{2}-\d{2}$/.test(e))return;let t=Date.parse(e+"T00:00:00Z");if(!(!Number.isFinite(t)||new Date(t).toISOString().slice(0,10)!==e))return t/_t}function je(e,t,r){if(!e||!t)return"required";let n=ke(e),a=ke(t);return n===void 0||a===void 0?"invalid":n>a?"order":a-n+1>r?"limit":null}function De(e,t,r){let n=new URLSearchParams(t).get("day");if(n&&ke(n)!==void 0)return[n,n];let a=r[0],o=a===void 0?void 0:Object.keys(e.days).find(l=>a>=e.days[l][0]&&a<e.days[l][1]);return o?[new Date((ke(o)-e.export_max_days+1)*_t).toISOString().slice(0,10),o]:["",""]}function kt(e,t,r,n){if(je(r,n,e.export_max_days))throw new Error("Invalid export date range");let a=new URLSearchParams(t);for(let l of["day","month","year","page"])a.delete(l);let o=re(e,a.toString()),i=Object.entries(e.days).filter(([l])=>l>=r&&l<=n).map(([,l])=>l);return o.query.range=i.length?[Math.min(...i.map(l=>l[0])),Math.max(...i.map(l=>l[1]))]:[0,0],o}function xt(e){return e.replace(/[\r\n]+/g," ").replace(/[\\`*_[\]{}<>#!|~]/g,"\\$&")}function Et(e,t,r,n){let a=c=>c==="source"?n.source:c==="topic"?n.topic:c,o=(c,u)=>u.map(d=>xt(t.labels[t.prefixes[c]+d]||d)).join(", "),i=c=>`<${W(c,!0).href.replace(/</g,"%3C").replace(/>/g,"%3E")}>`,l=c=>{let u=e.filters.getAll(c);return c==="source"&&!u.length&&t.tab_sources?.length&&e.filters.get("include_tabs")!=="1"?n.allWithoutTabs:o(c,u)||n.all},m=[["# "+xt(e.site),`${n.dates}: ${e.start} \u2014 ${e.end}`,...Object.keys(t.prefixes).map(c=>`${a(c)}: ${l(c)}`),`${n.entries}: ${e.cards.length}`].join(`
2
+
3
+ `)];for(let c of e.cards){let u=r.get(c.id);if(u===void 0)throw new Error("Incomplete export");let d=[`${n.date}: ${c.display_date||""}`,...Object.entries(c.facets).map(([p,g])=>`${a(p)}: ${o(p,g)}`),...c.source_url?[`${n.original}: ${i(c.source_url)}`]:[],`${n.article}: ${i(c.url)}`].join(`
4
+ `);m.push(`
5
+
6
+ ---
7
+
8
+ `,d,`
9
+
10
+ `,u.replace(/\r\n?/g,`
11
+ `).trimEnd())}return m.push(`
12
+ `),m}function At(e){let t=e.site.toLowerCase().replace(/[^\p{L}\p{N}_-]+/gu,"-").replace(/^-+|-+$/g,"")||"archive",r=e.locale.replace(/[^a-zA-Z0-9-]/g,"")||"en";return`${t}-${r}-${e.start}_${e.end}.md`}function Lt(e){let t=document.querySelector("[data-archive-export-open]"),r=document.querySelector('[data-dialog="export"]');if(!t||!r)return()=>{};let n=r.querySelector("[data-export-start]"),a=r.querySelector("[data-export-end]"),o=r.querySelector("[data-export-fields]"),i=r.querySelector("[data-export-facets]"),l=r.querySelector("[data-export-status]"),s=r.querySelector("[data-export-download]"),m=r.querySelector("[data-export-retry]"),c=r.querySelector("[data-export-cancel]"),u=r.querySelector("[data-export-progress]"),d=f=>r.dataset[f]||"",p,g=new URLSearchParams,b=[],C=new AbortController,z=new AbortController,L,N,S=!1,M=(f,h)=>d(f).replace("{count}",String(h));function q(f){N=f,m.hidden=!f}function H(){L?.controller.abort(),L=void 0,q(),o.disabled=!1,c.hidden=!0,u.hidden=!0}function O(){i.replaceChildren();let f=ue();for(let[h,_]of Object.entries(p.facets)){let A=document.createElement("fieldset"),I=document.createElement("legend");A.dataset.exportFacetGroup=h,I.textContent=h==="source"?d("sources"):h==="topic"?d("topics"):h,A.append(I);let D=document.createElement("div");D.className="archive-export__choices",D.id=`export-options-${h}`,A.append(...Fe(p,g,h,f,D.id));let $=g.getAll(h),P=[..._,...$.filter(F=>!_.some(G=>G.id===F)).map(F=>({id:F,name:F}))],B=document.createElement("button");B.type="button",B.textContent=d("all"),B.className="tag-chip",B.dataset.exportAll=h,B.setAttribute("aria-label",`${I.textContent}: ${d("all")}`),B.setAttribute("aria-pressed",String($.length===0)),D.append(B);for(let F of P){if(!xe(p,g,h,F.id))continue;let G=document.createElement("label");G.className="archive-export__choice";let J=document.createElement("input");J.type="checkbox",J.dataset.exportFacet=h,J.value=F.id,J.checked=$.includes(F.id);let Qe=document.createElement("span");Qe.textContent=F.name,G.append(J,Qe),D.append(G)}A.append(D),i.append(A)}}async function R(f){let h=await e.manifest(f);return f.throwIfAborted(),h.generation===p?.generation?!0:(await X(),!S&&r.open&&(l.textContent=`${d("updated")} ${l.textContent}`),!1)}async function U(f=!1){z.abort(),z=new AbortController;let h=AbortSignal.any([C.signal,z.signal]);if(b=[],s.disabled=!0,H(),!p)return;let _=je(n.value,a.value,p.export_max_days);if(_){l.textContent=d(_).replace("{days}",String(p.export_max_days));return}if(l.textContent=d("calculating"),f&&await new Promise(A=>{let I=()=>{clearTimeout(D),h.removeEventListener("abort",I),A()},D=setTimeout(I,180);h.addEventListener("abort",I,{once:!0})}),!h.aborted)try{if(!await R(h))return;let A=await e.select(kt(p,g,n.value,a.value),"all",h,5e3);if(h.aborted||S)return;if(A.count>5e3){l.textContent=M("tooMany",A.count).replace("{limit}",String(5e3));return}b=A.ordinals,l.textContent=A.count?M("matches",A.count):d("empty"),s.disabled=A.count===0}catch{h.aborted||(l.textContent=d("unavailable"),q(()=>{U()}))}}async function X(){C.abort(),z.abort(),C=new AbortController;let f=C.signal,h=location.search;p=void 0,b=[],H(),i.replaceChildren(),n.value=a.value="",s.disabled=!0,o.disabled=!0,l.textContent=d("calculating"),be("export");let _=document.activeElement;try{let A=await e.manifest(f);if(f.aborted)return;p=A;let I=re(p,h);if(g=new URLSearchParams(I.parameters),[n.value,a.value]=De(p,h,[]),!n.value){let D=await e.select(I,"first",f);if(f.aborted)return;[n.value,a.value]=De(p,h,D.ordinals)}for(let D of["day","month","year","page"])g.delete(D);O(),o.disabled=!1,document.activeElement===_&&n.focus(),r.querySelector("[data-export-limit]").textContent=d("limitHint").replace("{days}",String(p.export_max_days)),await U()}catch{f.aborted||(l.textContent=d("unavailable"),q(()=>{X()}))}}async function Y(){if(!p||!b.length||L?.status==="running")return;z.abort();let f=new AbortController;L??={snapshot:{site:d("site"),locale:document.documentElement.lang,start:n.value,end:a.value,filters:new URLSearchParams(g),cards:[]},ordinals:[...b],bodies:new Map,budget:new ce,controller:f,status:"running"};let h=L;h.controller=f,h.status="running";let _=AbortSignal.any([C.signal,h.controller.signal]),{snapshot:A,bodies:I}=h;s.disabled=!0,o.disabled=!0,q(),c.hidden=!1,u.hidden=!1,u.max=h.ordinals.length;let D=()=>{u.value=I.size,l.textContent=d("progress").replace("{done}",String(I.size)).replace("{count}",String(h.ordinals.length))};D();try{if(!await R(_))return;A.cards.length||(u.removeAttribute("value"),l.textContent=d("loadingCards"),A.cards=await e.cards(h.ordinals,_),_.throwIfAborted(),D());let $=0;if(await de(A.cards.filter(G=>!I.has(G.id)),async G=>{try{let J=await e.markdown(G,_,h.budget);_.throwIfAborted(),I.set(G.id,J),D()}catch(J){if(_.aborted||J instanceof le)throw J;$++}},_),_.throwIfAborted(),$){h.status="failed",l.textContent=M("failed",$),q(()=>{Y()});return}let P=Et(A,p,I,{dates:d("dates"),source:d("sources"),topic:d("topics"),all:d("all"),allWithoutTabs:d("allWithoutTabs"),entries:d("entries"),date:d("date"),original:d("original"),article:d("article")}),B=URL.createObjectURL(new Blob(P,{type:"text/markdown;charset=utf-8"})),F=document.createElement("a");F.href=B,F.download=At(A),document.body.append(F),F.click(),F.remove(),setTimeout(()=>URL.revokeObjectURL(B),1e3),l.textContent=M("complete",A.cards.length),h.status="complete"}catch($){$ instanceof le&&!_.aborted?(h.status="limited",h.controller.abort(),I.clear(),l.textContent=d("tooLarge")):_.aborted||(h.status="failed",l.textContent=d("unavailable"),q(()=>{Y()}))}finally{L===h&&(o.disabled=!1,c.hidden=!0,u.hidden=!0,s.disabled=h.status!=="complete")}}function oe(f){if(!(L?.status==="running"||!p)){for(let h of Object.keys(p.facets))g.delete(h);for(let h of i.querySelectorAll("input:checked"))g.append(h.dataset.exportFacet,h.value);g=re(p,g.toString()).parameters;for(let h of i.querySelectorAll("[data-export-all]"))h.setAttribute("aria-pressed",String(!g.has(h.dataset.exportAll)));for(let h of i.querySelectorAll("[data-export-facet]")){let _=h.closest("label");if(_.hidden=!xe(p,g,h.dataset.exportFacet,h.value),_.hidden&&document.activeElement===h){let A=h.dataset.exportFacet==="source"&&p.tab_sources?.includes(h.value)&&g.get("include_tabs")!=="1"?"include_tabs":"show_hidden",I=h.closest("fieldset");(I?.querySelector(`[data-archive-visibility="${A}"]`)||I?.querySelector("[data-export-all]"))?.focus()}}U(f?.target===n||f?.target===a)}}function ae(f){if(!(f.target instanceof Element))return;let h=f.target.closest("[data-archive-visibility]");if(h&&p&&L?.status!=="running"){let A=h.dataset.archiveVisibility,I=h.closest("[data-export-facet-group]").dataset.exportFacetGroup;_e(g,A,p,I),O(),i.querySelector(`[data-export-facet-group="${I}"] [data-archive-visibility="${A}"]`)?.focus(),A==="include_tabs"&&U();return}let _=f.target.closest("[data-export-all]");if(!(!_||L?.status==="running")){for(let A of i.querySelectorAll("input"))A.dataset.exportFacet===_.dataset.exportAll&&(A.checked=!1);oe()}}function E(){H(),s.disabled=!b.length,l.textContent=d("cancelled")}function v(){C.abort(),z.abort(),H()}function T(){v(),S||t.focus()}function k(f){(f.target===r||f.target instanceof Element&&f.target.closest("[data-dialog-close]"))&&v()}function w(){N?.()}let y=()=>{X()},x=()=>{Y()};return t.hidden=!1,t.addEventListener("click",y),r.addEventListener("close",T),r.addEventListener("cancel",v),r.addEventListener("click",k),o.addEventListener("input",oe),i.addEventListener("click",ae),s.addEventListener("click",x),m.addEventListener("click",w),c.addEventListener("click",E),()=>{S=!0,T(),r.open&&r.close(),t.removeEventListener("click",y),r.removeEventListener("close",T),o.removeEventListener("input",oe),i.removeEventListener("click",ae),r.removeEventListener("cancel",v),r.removeEventListener("click",k),s.removeEventListener("click",x),m.removeEventListener("click",w),c.removeEventListener("click",E)}}var pr=new Set("A ABBR B BLOCKQUOTE BR CODE DD DEL DETAILS DIV DL DT EM FIGCAPTION FIGURE H1 H2 H3 H4 H5 H6 HR I IMG KBD LI MARK OL P PRE S SECTION SMALL SPAN STRONG SUB SUMMARY SUP TABLE TBODY TD TFOOT TH THEAD TR UL".split(" ")),fr=new Set("SCRIPT STYLE IFRAME OBJECT EMBED FORM INPUT BUTTON SELECT TEXTAREA TEMPLATE NOSCRIPT SVG MATH".split(" "));function gr(e,t,r){let n=new URL(t),a=n.origin+n.pathname+n.search,o=document.createElement("template");o.innerHTML=e;let i=o.content.querySelector(".note-content");if(!i)throw new Error("Article body is missing");let l=new Map(Array.from(i.querySelectorAll("[id]"),(c,u)=>[c.id,`${r}-${u}`]));function s(c){if(c.nodeType===Node.TEXT_NODE)return document.createTextNode(c.textContent||"");if(!(c instanceof Element)||fr.has(c.tagName))return null;let u=document.createDocumentFragment();for(let g of c.childNodes){let b=s(g);b&&u.append(b)}if(!pr.has(c.tagName))return u;let d=document.createElement(c.tagName.toLowerCase());c.id&&(d.id=l.get(c.id));for(let g of["title","lang","dir","alt","colspan","rowspan","scope","start"]){let b=c.getAttribute(g);b!==null&&d.setAttribute(g,b)}c.tagName==="CODE"&&(d.className=[...c.classList].filter(g=>/^language-[\w+-]+$/.test(g)).join(" "));let p=c.tagName==="A"?"href":c.tagName==="IMG"?"src":null;if(p){let g=c.getAttribute(p);if(g)try{let b=new URL(g,n);if(/^https?:$/.test(b.protocol)||p==="href"&&b.protocol==="mailto:"){let C;try{C=l.get(decodeURIComponent(b.hash.slice(1)))}catch{}d.setAttribute(p,C&&b.origin+b.pathname+b.search===a?`#${C}`:b.href)}}catch{}}return c.tagName==="A"&&d.setAttribute("rel","noopener noreferrer"),c.tagName==="IMG"&&(d.setAttribute("loading","lazy"),!d.hasAttribute("src"))?null:(d.append(u),d)}let m=document.createDocumentFragment();for(let c of i.childNodes){let u=s(c);u&&m.append(u)}return m}function St(e,t){let r=document.querySelector("[data-archive-reading-toggle]");if(!r)return{refresh(){},dispose(){}};let n=!1,a=!1,o=new AbortController,i=0,l,s=new WeakMap,m=new Map,c=0;try{n=localStorage.getItem("website-archive-reading")==="true"}catch{}r.hidden=!1;function u(){r.setAttribute("aria-checked",String(n)),r.title=n?r.dataset.enabled||"Read in full: on":r.dataset.disabled||"Read in full: off"}function d(S){let M=S.cloneNode(!0),q=new Map,H=`archive-article-${++i}`;for(let[O,R]of[...M.querySelectorAll("[id]")].entries()){let U=`${H}-${O}`;q.set(R.id,U),R.id=U}for(let O of M.querySelectorAll('a[href^="#"]')){let R=q.get(O.getAttribute("href").slice(1));R&&O.setAttribute("href","#"+R)}return M}async function p(S,M){let q=S.querySelector("a.blog-ledger__main"),H=S.querySelector(".blog-ledger__content");if(!q||!H||!g(S)||S.dataset.readingLoaded||s.get(S)===M)return;s.set(S,M);let O=H.querySelector(".archive-reading__body");O||(O=document.createElement("div"),O.className="archive-reading__body note-content",H.append(O)),O.textContent=r.dataset.loading||"Loading article\u2026",O.setAttribute("aria-busy","true");try{let R=m.get(q.href);if(R)m.delete(q.href),m.set(q.href,R);else{let U=await t.article(q.href,M);for(M.throwIfAborted(),R={body:gr(U.html,U.url,"archive-template"),weight:U.html.length*2},m.set(q.href,R),c+=R.weight;m.size>100||c>4*1024*1024;){let X=m.keys().next().value;c-=m.get(X).weight,m.delete(X)}}M.throwIfAborted(),O.replaceChildren(d(R.body)),S.dataset.readingLoaded="true"}catch{if(M.aborted)return;let R=document.createElement("p");R.textContent=r.dataset.unavailable||"Article could not be loaded.";let U=document.createElement("button");U.type="button",U.dataset.readingRetry="",U.textContent=r.dataset.retry||"Retry",O.replaceChildren(R,U)}finally{s.get(S)===M&&s.delete(S),M.aborted||O.removeAttribute("aria-busy")}}function g(S){return!S.closest("[hidden], details[data-ledger-day]:not([open])")}function b(S=e){if(!n||a)return;let M=o.signal,q=Array.from(S.querySelectorAll("[data-filter-item]"));if(l)for(let H of q)g(H)?!H.dataset.readingLoaded&&s.get(H)!==M&&l.observe(H):l.unobserve(H);else de(q.filter(g),H=>p(H,M),M).catch(()=>{})}function C(){if(l?.disconnect(),l=void 0,o.abort(),o=new AbortController,e.classList.toggle("archive-reading",n),u(),!n||a)return;let S=o.signal;typeof IntersectionObserver=="function"&&(l=new IntersectionObserver((M,q)=>{if(!S.aborted)for(let H of M)H.isIntersecting&&g(H.target)&&(q.unobserve(H.target),p(H.target,S))},{rootMargin:"400px 0px"})),b()}function z(){n=!n;try{localStorage.setItem("website-archive-reading",String(n))}catch{}C()}function L(S){if(!n||a||!(S.target instanceof Element)||!S.target.closest("[data-reading-retry]"))return;let M=S.target.closest("[data-filter-item]");M&&p(M,o.signal)}r.addEventListener("click",z),e.addEventListener("click",L);let N=S=>{S.target instanceof HTMLDetailsElement&&S.target.hasAttribute("data-ledger-day")&&b(S.target)};return e.addEventListener("toggle",N,!0),u(),{refresh:C,dispose(){a=!0,l?.disconnect(),o.abort(),m.clear(),c=0,r.removeEventListener("click",z),e.removeEventListener("click",L),e.removeEventListener("toggle",N,!0)}}}function Ee(e,t){return Object.hasOwn(e,t)?e[t]:t+"/"}function pe(e,t,r,n){let a=n?Ee(n.prefixes,t)+r:"";return(n&&Object.hasOwn(n.labels,a)?n.labels[a]:void 0)||e.favorite_labels?.[t+"/"+r]||r}function Ae(e,t){return Object.fromEntries(Object.entries(e.facets).flatMap(([r,n])=>n.map(a=>[r+"/"+a,pe(e,r,a,t)])))}var ie="website:favorites-change",ge="website:favorites-recovery-change",K,ne=class extends Error{constructor(r){super(r);this.code=r}code};function Q(){let e=document.querySelector('meta[name="website:favorites-scope"]')?.content;if(e===void 0)throw new Error("Missing favorites scope");return`website:favorites:v1:${e||"/"}`}function me(e){if(!e||typeof e!="object")throw new Error("Invalid favorite");let t=e;if(typeof t.id!="string"||!t.id||typeof t.title!="string"||typeof t.url!="string"||typeof t.markdown_url!="string"||!t.facets||typeof t.facets!="object"||Array.isArray(t.facets))throw new Error("Invalid favorite");W(t.url),W(t.markdown_url),t.source_url&&W(t.source_url,!0);for(let r of Object.values(t.facets))if(!Array.isArray(r)||!r.every(n=>typeof n=="string"))throw new Error("Invalid favorite facets");if(t.display_date!==null&&(typeof t.display_date!="string"||!/^\d{4}-\d{2}-\d{2}$/.test(t.display_date)))throw new Error("Invalid favorite date");if(t.display_date!==null){let r=new Date(t.display_date+"T00:00:00Z");if(!Number.isFinite(r.getTime())||r.toISOString().slice(0,10)!==t.display_date)throw new Error("Invalid favorite date")}if(t.published_at!==null&&(typeof t.published_at!="string"||!Number.isFinite(Date.parse(t.published_at))))throw new Error("Invalid favorite date");if(t.summary!=null&&typeof t.summary!="string")throw new Error("Invalid favorite summary");if(t.favorite_labels&&!Object.values(t.favorite_labels).every(r=>typeof r=="string"))throw new Error("Invalid favorite labels");return{id:t.id,title:t.title,url:t.url,markdown_url:t.markdown_url,published_at:t.published_at,display_date:t.display_date,year:t.display_date?.slice(0,4)||"Undated",month:t.display_date?.slice(0,7)||null,facets:structuredClone(t.facets),summary:t.summary??null,source_url:t.source_url??null,date_basis:t.date_basis??null,favorite_labels:{...t.favorite_labels}}}function Z(){let e=Q(),t=localStorage.getItem(e);if(K?.key!==e||K.raw!==t){let r=Mt(t);K={key:e,raw:t,entries:Ct(r.entries),damaged:r.damaged}}return{entries:K.entries,revision:t}}function Ct(e){for(let r of e.values())if(!Object.isFrozen(r)){for(let n of Object.values(r.snapshots)){for(let a of Object.values(n.facets))Object.freeze(a);Object.freeze(n.facets),Object.freeze(n.favorite_labels),Object.freeze(n)}Object.freeze(r.snapshots),Object.freeze(r)}let t={get size(){return e.size},get:e.get.bind(e),has:e.has.bind(e),keys:e.keys.bind(e),values:e.values.bind(e),entries:e.entries.bind(e),[Symbol.iterator]:e[Symbol.iterator].bind(e),forEach(r,n){e.forEach((a,o)=>r.call(n,a,o,t))}};return Object.freeze(t)}function Mt(e){let t=new Map;if(!e)return{entries:t,damaged:!1};let r;try{if(r=JSON.parse(e),r?.version!==1||!Array.isArray(r.entries))throw new Error}catch{throw new ne("unreadable")}let n=!1;for(let a of r.entries)try{let o=a;if(!o||typeof o.id!="string"||typeof o.saved_at!="string"||!Number.isFinite(Date.parse(o.saved_at))||!o.snapshots||typeof o.snapshots!="object")throw new Error("Invalid favorite entry");let i=Object.create(null);for(let[l,s]of Object.entries(o.snapshots))try{let m=me(s);if(!/^[a-z0-9-]+$/i.test(l)||m.id!==o.id)throw new Error("Invalid favorite snapshot");i[l]=m}catch{n=!0}if(!Object.keys(i).length||t.has(o.id))throw new Error("Invalid favorite identity");t.set(o.id,{id:o.id,saved_at:o.saved_at,snapshots:i})}catch{n=!0}return{entries:t,damaged:n}}function zt(){return K?.key===Q()?K.damaged:!1}function hr(e){let t=Q(),r=JSON.stringify({version:1,entries:[...e.values()]});if(K?.key===t&&K.damaged&&K.raw){let n=Le();if(n.some(a=>a.raw!==K.raw))throw new ne("recovery_required");n.length||(localStorage.setItem(`${t}:recovery:current`,K.raw),window.dispatchEvent(new Event(ge)))}localStorage.setItem(t,r),K={key:t,raw:r,entries:Ct(e),damaged:!1}}function Le(){return Ue().sort().flatMap(e=>{let t=localStorage.getItem(e);return t===null?[]:[{key:e,raw:t}]})}function Ue(){let e=Q()+":recovery:",t=[];for(let r=0;r<localStorage.length;r++){let n=localStorage.key(r);n?.startsWith(e)&&t.push(n)}return t}function Tt(){return Ue().length>0}async function Ht(){if(!navigator.locks)throw new ne("unsupported");await navigator.locks.request(Q(),()=>{for(let e of Ue())localStorage.removeItem(e)}),window.dispatchEvent(new Event(ge))}async function It(){await Be(e=>{let t=!1;for(let r of Le()){let n;try{n=Mt(r.raw).entries}catch{continue}for(let[a,o]of n){let i=e.get(a);if(!i)e.set(a,o),t=!0;else{let l=Object.fromEntries(Object.entries(o.snapshots).filter(([s])=>!Object.hasOwn(i.snapshots,s)));Object.keys(l).length&&(e.set(a,{...i,snapshots:{...l,...i.snapshots}}),t=!0)}}}return t}),window.dispatchEvent(new Event(ie))}async function Be(e){if(!navigator.locks)throw new ne("unsupported");return navigator.locks.request(Q(),()=>{let t=Z(),r=new Map(t.entries);return e(r)?(hr(r),{entries:K.entries,revision:K.raw}):t})}function $e(e,t){let r=me(e);return r.favorite_labels=Ae(e,t),r}async function qt(e,t=document.documentElement.lang||"en",r){let n=me(e);await Be(a=>{if(r??!a.has(e.id)){let o=a.get(e.id);if(fe(o?.snapshots[t],n))return!1;a.set(e.id,{id:e.id,saved_at:o?.saved_at||new Date().toISOString(),snapshots:{...o?.snapshots,[t]:n}})}else return a.delete(e.id);return!0}),window.dispatchEvent(new Event(ie))}function fe(e,t){if(e===t)return!0;if(!e||!t||["id","title","url","markdown_url","published_at","display_date","year","month","summary","source_url","date_basis"].some(i=>e[i]!==t[i]))return!1;let n=Object.keys(e.facets);if(n.length!==Object.keys(t.facets).length||n.some(i=>!Object.hasOwn(t.facets,i)||e.facets[i].length!==t.facets[i].length||e.facets[i].some((l,s)=>l!==t.facets[i][s])))return!1;let a=e.favorite_labels||{},o=t.favorite_labels||{};return Object.keys(a).length===Object.keys(o).length&&Object.keys(a).every(i=>Object.hasOwn(o,i)&&a[i]===o[i])}async function Ot(e,t=document.documentElement.lang||"en",r){return e.length?Be(n=>{let a=!1;for(let o of e){let i=n.get(o.id);if(!i||r&&!fe(i.snapshots[t],r.get(o.id)?.snapshots[t]))continue;let l=me(o);fe(i.snapshots[t],l)||(n.set(o.id,{...i,snapshots:{...i.snapshots,[t]:l}}),a=!0)}return a}):Z()}var Ve=new WeakMap,Se=new WeakSet;function Rt(e){let t=e.dataset.favoriteCard||"",r=Ve.get(e);if(r?.raw===t)return r.card;let n=me(JSON.parse(t));if(n.id!==e.dataset.favoriteId)throw new Error("Invalid favorite button");return Ve.set(e,{raw:t,card:n}),n}function te(){return document.querySelector("[data-favorites-ui]")?.dataset||{}}function ee(e){let t=document.querySelector("[data-favorite-status]"),r=te(),n=e instanceof ne?e.code:e instanceof Error?e.name:"",a={damaged:r.damaged||"Some saved data is damaged. Healthy favorites are shown; original data is backed up before repair.",unreadable:r.unreadable||"Could not read favorites. The stored data is damaged; original data has been kept.",recovery_required:r.recoveryRequired||"A recovery copy is already saved. Download and clear it before repairing more data.",unsupported:r.unsupported||"Could not save favorites. Use a current browser over HTTPS or localhost.",QuotaExceededError:r.quota||"Could not save favorites. Browser storage is full; free some space and retry.",SecurityError:r.blocked||"Could not save favorites. Allow browser storage and retry."};t&&(t.textContent=a[n]||r.error||"Could not save favorites. Allow browser storage or free some space, then retry.")}function Pt(e){let t=document.createElement("button");return t.type="button",t.className="favorite-button",t.setAttribute("aria-pressed","false"),t.dataset.favoriteToggle="",t.dataset.favoriteId=e.id,Ve.set(t,{raw:"",card:e}),t.innerHTML='<svg viewBox="0 0 20 20" aria-hidden="true"><path d="M5 3h10v14l-5-3-5 3z"></path></svg><span data-favorite-label></span>',t}function Ce(e){if(!document.querySelector("[data-favorites-ui]"))return;let t;try{t=e||new Set(Z().entries.keys())}catch(n){ee(n);for(let a of document.querySelectorAll("[data-favorite-toggle]"))a.hidden=!1,a.disabled=Se.has(a);return}let r=te();for(let n of document.querySelectorAll("[data-favorite-toggle]"))try{let a=t.has(n.dataset.favoriteId),o=Rt(n);n.disabled=Se.has(n),n.hidden=!1,n.setAttribute("aria-pressed",String(a)),n.setAttribute("aria-label",`${a?r.remove||"Remove favorite":r.save||"Save"}: ${o.title}`);let i=n.querySelector("[data-favorite-label]");i&&(i.textContent=a?r.saved||"Saved":r.save||"Save")}catch(a){n.hidden=!1,n.disabled=!0,ee(a)}zt()&&!document.querySelector("[data-favorite-status]")?.textContent&&ee(new ne("damaged"))}function Ft(){if(!document.querySelector("[data-favorites-ui]"))return()=>{};let e=document.querySelector("[data-favorites-recovery]"),t=()=>{if(e)try{e.hidden=!Tt()}catch(o){ee(o)}},r=()=>{document.querySelector("[data-favorites-page]")||Ce(),t()},n=async o=>{let i=o.target instanceof Element?o.target.closest("[data-favorite-recovery]"):null;if(i&&!i.disabled){i.disabled=!0;try{if(i.dataset.favoriteRecovery==="download"){let m=URL.createObjectURL(new Blob([JSON.stringify({version:1,scope:Q(),copies:Le()},null,2)],{type:"application/json"})),c=document.createElement("a");c.href=m,c.download="favorites-recovery.json",c.click(),setTimeout(()=>URL.revokeObjectURL(m),1e3)}else i.dataset.favoriteRecovery==="restore"?await It():await Ht();let s=document.querySelector("[data-favorite-status]");s&&i.dataset.favoriteRecovery!=="download"&&(s.textContent=i.dataset.favoriteRecovery==="restore"?te().recoveryRestored||"Available favorites restored. Original recovery copies are kept.":te().recoveryCleared||"Recovery copies cleared. Current favorites are kept.")}catch(s){ee(s)}finally{i.disabled=!1,t()}return}let l=o.target instanceof Element?o.target.closest("[data-favorite-toggle]"):null;if(!(!l||l.disabled)){Se.add(l),l.disabled=!0;try{let s=Rt(l);await qt(s,document.documentElement.lang||"en",l.getAttribute("aria-pressed")!=="true");let m=document.querySelector("[data-favorite-status]");m&&(m.textContent="")}catch(s){ee(s)}finally{Se.delete(l),l.disabled=!1}}},a=o=>{(o.key===null||o.key===Q())&&window.dispatchEvent(new Event(ie)),(o.key===null||o.key?.startsWith(Q()+":recovery:"))&&t()};return Ce(),t(),document.addEventListener("click",n),window.addEventListener(ie,r),window.addEventListener(ge,t),window.addEventListener("storage",a),window.addEventListener("pageshow",r),()=>{document.removeEventListener("click",n),window.removeEventListener(ie,r),window.removeEventListener(ge,t),window.removeEventListener("storage",a),window.removeEventListener("pageshow",r)}}var jt=new WeakMap;function Dt(e){let t=jt.get(e);if(!t){let r=e.querySelector("[data-ledger-day-ui]").dataset;t={year:e.dataset.ledgerCurrentYear,date:r.date,dateYear:r.dateYear,months:r.months.split("|"),weekdays:r.weekdays.split("|"),entry:r.entry,entries:r.entries,undated:r.undated},jt.set(e,t)}return t}function vr(e,t){return(t===1?e.entry:e.entries).replaceAll("{count}",String(t))}function Nt(e){if(!/^\d{4}-\d{2}-\d{2}$/.test(e))return;let t=new Date(`${e}T00:00:00Z`);if(!(!Number.isFinite(t.valueOf())||t.toISOString().slice(0,10)!==e))return{year:e.slice(0,4),month:t.getUTCMonth(),day:t.getUTCDate(),weekday:t.getUTCDay()}}function br(e,t){let r=Dt(e),n=Nt(t),a=n?.year===r.year?r.date:r.dateYear,o=n&&{month:r.months[n.month],day:String(n.day),year:n.year};return{date:o?a.replace(/\{(month|day|year)\}/g,(i,l)=>o[l]):r.undated,weekday:n?r.weekdays[n.weekday]:"",dated:!!n}}function Ut(e,t){let r=document.createElement("details");r.className="archive-day",r.dataset.ledgerDay=t;let n=document.createElement("summary"),a=document.createElement("h2"),o=br(e,t),i=document.createElement(o.dated?"time":"span");i.textContent=o.date,i instanceof HTMLTimeElement&&(i.dateTime=t),a.append(i);let l=document.createElement("span");l.className="archive-day__arrow",l.setAttribute("aria-hidden","true");let s=document.createElement("span");if(s.className="archive-day__meta",o.weekday){let c=document.createElement("span");c.textContent=o.weekday,s.append(c," \xB7 ")}let m=document.createElement("span");return m.dataset.ledgerDayCount="",s.append(m),n.append(a,l,s),r.append(n),r}function Me(e){let t=new Map,r=new WeakMap,n=()=>Array.from(e.querySelectorAll("details[data-ledger-day]"));for(let l of n())r.set(l,l.hasAttribute("data-ledger-default-open")?l.dataset.ledgerDefaultOpen==="true":l.open);function a(l=n()){for(let s of l){let m=r.get(s);m!==void 0&&m!==s.open&&t.set(s.dataset.ledgerDay,s.open),r.set(s,s.open)}}function o(){let l=n();a(l);let s=l.filter(c=>!c.closest("[data-filter-group][hidden]")),m;for(let c of s){let u=c.dataset.ledgerDay;Nt(u)&&(!m||u>m)&&(m=u)}m||=s[0]?.dataset.ledgerDay;for(let c of s){let u=c.dataset.ledgerDay,d=t.get(u)??u===m;r.set(c,d),c.open!==d&&(c.open=d);let p=c.querySelector("[data-ledger-day-count]");p&&(p.textContent=vr(Dt(e),c.querySelectorAll("[data-filter-item]:not([hidden])").length))}}let i=l=>{l.target instanceof HTMLDetailsElement&&l.target.hasAttribute("data-ledger-day")&&a([l.target])};return e.addEventListener("toggle",i,!0),o(),{replace(l){a(),l(),o()},refresh:o,dispose(){e.removeEventListener("toggle",i,!0),t.clear()}}}function j(e,t,r){let n=document.createElement(e);return n.textContent=t,r&&(n.className=r),n}function Bt(e,t,r,n){let a=r.ledger_group_by||e.dataset.ledgerGroupBy||"year";e.dataset.ledgerGroupBy=a;let o=document.createDocumentFragment(),i=a==="day",l=te(),s=!!document.querySelector("[data-favorites-ui]"),m,c;for(let u of t){let d=(i?u.display_date:u.year)||l.undated||"Undated";if(d!==m){m=d;let L=document.createElement("section");L.dataset.filterGroup="";let N=u.display_date||"Undated",S=i?Ut(e,N):L;i||L.append(j("h2",m));let M=j("section","","blog-ledger");c=document.createElement("ol"),M.append(c),S.append(M),i&&L.append(S),o.append(L)}let p=document.createElement("li");if(p.dataset.filterItem="",!i){let L=j("div","","blog-ledger__meta"),N=j("time",u.display_date||"");N.dateTime=u.published_at||"",L.append(N),p.append(L)}let g=j("div","","blog-ledger__content"),b=u.unavailable?j("div","","blog-ledger__main"):j("a","","blog-ledger__main");if(b instanceof HTMLAnchorElement&&(b.href=W(u.url).href),b.append(j("strong",u.title)),u.snapshot_locale&&(b.lang=u.snapshot_locale),u.summary&&b.append(j("span",u.summary,"blog-ledger__description")),s){let L=j("div","","blog-ledger__heading");L.append(b,Pt({...u,favorite_labels:Ae(u,r)})),g.append(L)}else g.append(b);let C=j("footer","","archive-card-footer"),z=j("ul","","blog-ledger__topics");for(let[L,N]of Object.entries(u.facets))for(let S of N){let M=pe(u,L,S,r),q=j("a",M);q.dataset.archiveFacet=L,q.dataset.archiveValue=S;let H=new URL(window.location.href),O=new Set(H.searchParams.getAll(L));O.has(S)?O.delete(S):O.add(S),H.searchParams.delete("page"),H.searchParams.delete(L),[...O].sort().forEach(U=>H.searchParams.append(L,U)),q.href=H.pathname+H.search;let R=document.createElement("li");R.append(q),z.append(R)}if(C.append(z),u.source_url){let L=j("a",u.source_url,"archive-source-url");L.href=W(u.source_url,!0).href,L.rel="noopener noreferrer",C.append(L)}u.date_basis==="observed"&&C.append(j("small",e.dataset.observedLabel||"First observed")),u.unavailable&&(p.dataset.favoriteUnavailable="",C.append(j("small",l.removed||"This article is no longer published. Your saved summary and original link are kept."))),g.append(C),p.append(g),c.append(p)}e.querySelector("[data-filter-list]").replaceChildren(o),Ce(n)}function yr(){try{let e=JSON.parse(ue().hiddenTags||"[]");return Array.isArray(e)&&e.every(t=>typeof t=="string"&&t.length>0)?e:[]}catch{return[]}}function wr(e,t){let r=Object.create(null),n=Object.assign(Object.create(null),t?.prefixes||{source:"source/",topic:"topics/"}),a={...t?.labels},o={},i={},l={},s=new Map;for(let m of Object.keys(t?.prefixes||{source:"source/",topic:"topics/"}))r[m]=[];e.forEach((m,c)=>{for(let[u,d]of Object.entries(m.facets)){Object.hasOwn(n,u)||(n[u]=Ee(n,u)),r[u]||=[];for(let p of d){let g=n[u]+p;a[g]||=pe(m,u,p,t);let b=s.get(u);b||(b=new Map,s.set(u,b));let C=b.get(p);C||(C={id:p,name:a[g],count:0},b.set(p,C),r[u].push(C)),C.count++}}for(let[u,d]of[[o,m.year],[i,m.month],[l,m.display_date]])d&&(u[d]||=[c,c],u[d][1]=c+1)});for(let m of Object.values(r))m.sort((c,u)=>u.count-c.count||c.id.localeCompare(u.id));return{total:e.length,page_size:50,hidden_tags:t?.hidden_tags||yr(),facets:r,prefixes:n,labels:a,aliases:t?.aliases||{},years:o,months:i,days:l,ledger_group_by:"day"}}function Ge(e,t){return Object.hasOwn(e.snapshots,t)?t:Object.keys(e.snapshots)[0]}function Ye(e,t){let r=Ge(e,t);return{...e.snapshots[r],snapshot_locale:r}}function xr(e,t){return t&&Object.keys(t.aliases).length&&(e=e.map(r=>({...r,facets:Object.fromEntries(Object.entries(r.facets).map(([n,a])=>[n,[...new Set(a.map(o=>we(o,Ee(t.prefixes,n),t.aliases)))]]))}))),e.sort((r,n)=>(r.display_date||"")>(n.display_date||"")?-1:(r.display_date||"")<(n.display_date||"")?1:r.id<n.id?-1:r.id>n.id?1:0)}function We(e,t){return new Map([...e].map(([r,n])=>[r,n.snapshots[Ge(n,t)]]))}function Vt(e,t,r,n,a,o){let i=new Map(e.map(m=>[m.id,m])),l=We(t.entries,o),s=xr([...r.entries.values()].map(m=>{let c=i.get(m.id),u=m.snapshots[Ge(m,o)];return c&&fe(u,l.get(m.id))?c:{...Ye(m,o),unavailable:!!c?.unavailable}}),n);return{cards:s,manifest:wr(s,n),refreshFailed:a&&s.length>0,sourceManifest:n,snapshots:We(r.entries,o),revision:r.revision}}async function Wt(e,t,r){try{return e.length?await Ot(e,r,t.entries):Z()}catch(n){ee(n);try{return Z()}catch{return t}}}async function _r(e,t,r){let n=document.documentElement.lang||"en";try{r||=Z()}catch(s){throw ee(s),s}let a=r,o=[...r.entries.values()].map(s=>Ye(s,n)),i,l=!1;try{i=await e.manifest(t);let s=o.length?await e.lookup(o.map(m=>m.id),t):new Map;t.throwIfAborted(),o=o.map(m=>s.has(m.id)?{...$e(s.get(m.id),i),snapshot_locale:n}:{...m,unavailable:!0}),a=await Wt(o.filter(m=>!m.unavailable),r,n)}catch{t.throwIfAborted(),l=!0}return Vt(o,r,a,i,l,n)}async function kr(e,t,r,n=Z()){let a=document.documentElement.lang||"en",o=We(n.entries,a),i=new Map(e.cards.map(u=>[u.id,u])),l=[],s=n,m=[...n.entries.values()].map(u=>{let d=i.get(u.id);return d&&o.get(u.id)===e.snapshots.get(u.id)?d:(d||l.push(u.id),{...!Object.hasOwn(u.snapshots,a)&&d?.snapshot_locale===a?d:Ye(u,a),unavailable:!!d?.unavailable})}),c=e.refreshFailed;if(l.length)try{let u=await t.lookup(l,r);r.throwIfAborted();let d=[...u.values()].map(g=>$e(g,e.sourceManifest)),p=new Map(d.map(g=>[g.id,g]));m=m.map(g=>p.has(g.id)?{...p.get(g.id),snapshot_locale:a}:g),s=await Wt(d,n,a)}catch{r.throwIfAborted(),c=!0}return Vt(m,n,s,e.sourceManifest,c,a)}async function Gt(e,t,r){let n;try{n=Z()}catch(a){throw ee(a),a}return r?r.revision===n.revision?r:kr(r,e,t,n):_r(e,t,n)}var $t=new WeakMap;function Yt(e,t,r){let n=$t.get(e);n||(n=new Map,$t.set(e,n));let a=new Set(r.keys.filter(i=>!n.has(i)));for(let i of a)n.set(i,new Uint8Array(Math.ceil(e.length/8)));a.size&&e.forEach((i,l)=>{for(let[s,m]of Object.entries(i.facets))for(let c of m){let u=s+"/"+c;a.has(u)&&(n.get(u)[l>>3]|=1<<(l&7))}});let o=Object.fromEntries(r.keys.map(i=>[i,n.get(i)]));for(;n.size>20;)n.delete(n.keys().next().value);return nt(e.length,t.page_size,r.query,o)}function Kt(e,t){let r=e.querySelector("[data-favorites-facets]"),n=new Map([["source",e.dataset.sourcesLabel||"Sources"],["topic",e.dataset.topicsLabel||"Topics"]]);r.replaceChildren();for(let[o,i]of Object.entries(t.facets)){let l=j("nav","","tag-filter archive-facet"),s=j("h2",n.get(o)||o,"archive-facet-label"),m=j("ul","","tag-filter__list");l.setAttribute("aria-label",s.textContent);for(let u of[{id:"",name:e.dataset.allLabel||"All",count:t.total},...i]){let d=j("button","","tag-chip");d.type="button",d.dataset.archiveFacet=o,d.dataset.archiveValue=u.id,d.append(document.createTextNode(u.name+" "),j("span",String(u.count)));let p=document.createElement("li");p.append(d),m.append(p)}let c=j("div","","archive-facet-heading");c.append(s),l.append(c,m),r.append(l)}for(let o of document.querySelectorAll("[data-timeline-nav]")){let i=o.querySelector("h2");o.replaceChildren(),i&&o.append(i);for(let l of Object.keys(t.years).filter(s=>s!=="Undated").sort().reverse()){let s=j("section","","archive-timeline__year archive-timeline__year--days"),m=j("h3",""),c=j("ul",""),u=(p,g,b,C)=>{let z=j("a","");return z.href=`${location.pathname}?${p}=${encodeURIComponent(g)}`,z.setAttribute(`data-${p}-filter-option`,""),z.setAttribute(`data-filter-${p}`,g),z.append(j("span",b),j("span",String(C),"archive-timeline__count")),z},d=t.years[l];m.append(u("year",l,l,d[1]-d[0]));for(let p of Object.keys(t.days).filter(g=>g.startsWith(l)).sort().reverse()){let g=t.days[p],b=document.createElement("li");b.append(u("day",p,p.slice(5),g[1]-g[0])),c.append(b)}s.append(m,c),o.append(s)}o.hidden=!Object.keys(t.days).length}for(let o of document.querySelectorAll('[data-dialog-open="context"]'))o.hidden=!Object.keys(t.days).length;let a=e.querySelector("[data-archive-empty]");t.total||a.replaceChildren(document.createTextNode(te().empty||"No favorites yet. Save an entry to find it here."))}function Er(e,t){let r=Math.min(5,t),n=Math.max(1,Math.min(e-2,t-r+1));return Array.from({length:r},(a,o)=>n+o)}function Xt(e,t,r,n){let a=e.dataset.pageLabel||"Page {page} of {pages}",o=e.dataset.resultLabel||"{count} entries";e.querySelector("[data-archive-page-status]").textContent=`${o.replace("{count}",String(n))} \xB7 ${a.replace("{page}",String(t)).replace("{pages}",String(r))}`,e.querySelector("[data-archive-page=prev]").disabled=t<=1,e.querySelector("[data-archive-page=next]").disabled=t>=r;let i=e.querySelector("[data-archive-page-numbers]");i.replaceChildren(),i.hidden=r<=1;for(let m of Er(t,r)){let c=document.createElement("a"),u=new URL(location.href);m===1?u.searchParams.delete("page"):u.searchParams.set("page",String(m)),c.href=u.pathname+u.search,c.dataset.archivePage=String(m),c.textContent=String(m),c.setAttribute("aria-label",(e.dataset.numberLabel||"Page {page}").replace("{page}",String(m))),m===t&&c.setAttribute("aria-current","page"),i.append(c)}let l=e.querySelector("[data-archive-page-jump]"),s=l.querySelector("input");(document.activeElement!==s||e.dataset.currentPage!==String(t))&&(s.value=String(t)),e.dataset.currentPage=String(t),s.max=String(r),s.disabled=n===0,document.activeElement!==s&&s.setCustomValidity(""),l.hidden=r<=1}function Jt(e){let t=wt(e.dataset.archiveUrl),r=e.hasAttribute("data-favorites-page"),n=e.querySelector("[data-archive-status]"),a=e.querySelector("[data-archive-retry]"),o=e.querySelector("[data-archive-empty]"),i=[...o.childNodes].map(w=>w.cloneNode(!0)),l=e.querySelector("[data-archive-pagination]"),s=l.querySelector("[data-archive-page=prev]"),m=l.querySelector("[data-archive-page=next]"),c=new AbortController,u=Me(e),d=St(e,t),p=r?()=>{}:Lt(t),g=0,b=!0,C,z,L,N=!0,S,M=async()=>{throw new Error("Current deployment could not be verified")},q={manifest:M,lookup:M},H,O={ordinals:[],count:0,page:1,pages:1};async function R(w=!1){let y=window.location.search;if(C===y)return;C=y;let x=++g;n.textContent=n.dataset.loading||"Loading\u2026",a.hidden=!0,e.setAttribute("aria-busy","true"),s.disabled=!0,m.disabled=!0;try{if(w&&!S&&(z=void 0,N=!1,S=t.revalidateCurrent(e.dataset.archiveCurrentUrl,c.signal).then(()=>{N=!0}).catch(()=>{c.signal.throwIfAborted()}).finally(()=>{S=void 0})),await S,!b||x!==g)return;let f;r&&(f=await Gt(N?t:q,c.signal,z));let h=f?.manifest||await t.manifest(c.signal);if(!b||x!==g)return;f&&(z=f);let _=re(h,window.location.search),A=f?Yt(f.cards,h,_):await t.select(_,"page",c.signal);if(!b||x!==g)return;let I=f?A.ordinals.map(P=>f.cards[P]):await t.cards(A.ordinals,c.signal);if(!b||x!==g)return;f&&L!==h&&(o.replaceChildren(...i.map(P=>P.cloneNode(!0))),Kt(e,h),L=h),u.replace(()=>Bt(e,I,h,f?new Set(f.snapshots.keys()):void 0)),d.refresh(),O=A,H=h,bt(e,h,_.parameters),A.page>1?_.parameters.set("page",String(A.page)):_.parameters.delete("page");let D=_.parameters.toString();history.replaceState(null,"",window.location.pathname+(D?`?${D}`:""));for(let P of e.querySelectorAll("button[data-archive-facet]")){let B=P.dataset.archiveFacet,F=P.dataset.archiveValue;P.setAttribute("aria-pressed",String(F?_.parameters.getAll(B).includes(F):!_.parameters.getAll(B).length))}for(let P of["year","month","day"])for(let B of document.querySelectorAll(`[data-timeline-nav] [data-${P}-filter-option]`))_.parameters.get(P)===B.getAttribute(`data-filter-${P}`)?B.setAttribute("aria-current","page"):B.removeAttribute("aria-current");Xt(l,A.page,A.pages,A.count);let $=f?f.refreshFailed:!N;o.hidden=A.count!==0,n.textContent=$?f?te().refreshError||"Could not refresh articles. Your saved summaries are shown. Retry to continue.":n.dataset.refreshError||"Could not check for updates. Previously loaded entries remain available. Retry to check again.":"",a.hidden=!$,e.removeAttribute("aria-busy")}catch{b&&x===g&&(n.textContent=n.dataset.unavailable||"Entries could not be loaded.",a.hidden=!1,e.removeAttribute("aria-busy"),d.refresh())}finally{x===g&&(C=void 0)}}function U(w){if(!(w.target instanceof Element)||w.button!==0||w.metaKey||w.ctrlKey||w.shiftKey||w.altKey)return;let y=w.target.closest("[data-archive-visibility], [data-archive-facet], [data-year-filter-option], [data-month-filter-option], [data-day-filter-option], [data-archive-page], [data-archive-clear], [data-archive-retry]");if(!y||!e.contains(y)&&!y.closest("[data-timeline-nav]"))return;if(w.preventDefault(),y.hasAttribute("data-archive-retry")){R(!0);return}if(e.hasAttribute("aria-busy")&&y.hasAttribute("data-archive-page"))return;let x=new URL(window.location.href);if(y.dataset.archiveVisibility){if(!H)return;_e(x.searchParams,y.dataset.archiveVisibility,H,y.dataset.archiveVisibilityFacet)}else if(y.hasAttribute("data-archive-clear"))x.search="";else if(y.dataset.archivePage){let f=y.dataset.archivePage,h=f==="next"?O.page+1:f==="prev"?O.page-1:Number(f);if(!Number.isSafeInteger(h))return;x.searchParams.set("page",String(Math.max(1,Math.min(O.pages,h))))}else if(x.searchParams.delete("page"),y.dataset.archiveFacet){let f=y.dataset.archiveFacet,h=y.dataset.archiveValue||"",_=new Set(x.searchParams.getAll(f));h?_.has(h)?_.delete(h):_.add(h):_.clear(),x.searchParams.delete(f),[..._].sort().forEach(A=>x.searchParams.append(f,A))}else{let f=y.hasAttribute("data-year-filter-option")?"year":y.hasAttribute("data-month-filter-option")?"month":"day",h=y.getAttribute(`data-filter-${f}`);for(let _ of["year","month","day"])_!==f&&x.searchParams.delete(_);x.searchParams.get(f)===h?x.searchParams.delete(f):x.searchParams.set(f,h)}x.search!==window.location.search&&history.pushState(null,"",x.pathname+x.search),R()}let X=l.querySelector("[data-archive-page-jump]"),Y=X.querySelector("input"),oe=()=>{Y.setCustomValidity("")},ae=()=>{Y.setCustomValidity((l.dataset.jumpError||"Enter a whole number from 1 to {pages}.").replace("{pages}",String(O.pages)))};function E(w){if(w.preventDefault(),e.hasAttribute("aria-busy"))return;let y=rt(Y.value);if(y===void 0||y>O.pages){ae(),Y.reportValidity();return}let x=new URL(location.href);y===1?x.searchParams.delete("page"):x.searchParams.set("page",String(y)),x.search!==location.search&&history.pushState(null,"",x.pathname+x.search),R()}let v=()=>{r&&(C=void 0,R())},T=()=>{R()},k=w=>{w.persisted&&(C=void 0,R(!0))};return window.addEventListener(ie,v),X.addEventListener("submit",E),Y.addEventListener("input",oe),Y.addEventListener("invalid",ae),document.addEventListener("click",U),window.addEventListener("popstate",T),window.addEventListener("pageshow",k),R(),()=>{b=!1,c.abort(),u.dispose(),d.dispose(),p(),t.dispose(),X.removeEventListener("submit",E),Y.removeEventListener("input",oe),Y.removeEventListener("invalid",ae),window.removeEventListener(ie,v),document.removeEventListener("click",U),window.removeEventListener("popstate",T),window.removeEventListener("pageshow",k)}}function ze(e,t,r,n){let a=e.get(t)??"";return r.some(o=>o.dataset[n]===a)?a:""}function Qt(e){let t=new URLSearchParams(window.location.search),r=Array.from(document.querySelectorAll("[data-topic-filter-nav] [data-topic-filter-option]")),n=Array.from(document.querySelectorAll("[data-year-filter-option]")),a=Array.from(document.querySelectorAll("[data-month-filter-option]")),o=Array.from(document.querySelectorAll("[data-day-filter-option]")),i=ze(t,"topic",r,"topicAnchor"),l=ze(t,"day",o,"filterDay"),s=l?"":ze(t,"month",a,"filterMonth"),m=l||s?"":ze(t,"year",n,"filterYear");for(let d of r)d.dataset.topicAnchor===i?d.setAttribute("aria-current","page"):d.removeAttribute("aria-current");for(let d of n)m&&d.dataset.filterYear===m?d.setAttribute("aria-current","page"):d.removeAttribute("aria-current");for(let d of a)s&&d.dataset.filterMonth===s?d.setAttribute("aria-current","page"):d.removeAttribute("aria-current");for(let d of o)l&&d.dataset.filterDay===l?d.setAttribute("aria-current","page"):d.removeAttribute("aria-current");let c=Array.from(e.querySelectorAll("[data-filter-item]"));for(let d of c){let p=(d.dataset.topicAnchors??"").split(/\s+/).filter(Boolean),g=d.dataset.filterMonth??"";d.hidden=!!(i&&!p.includes(i)||m&&!g.startsWith(`${m}-`)||s&&g!==s||l&&d.dataset.filterDay!==l)}for(let d of e.querySelectorAll("[data-filter-group]"))d.hidden=!d.querySelector("[data-filter-item]:not([hidden])");let u=e.querySelector("[data-filter-empty]");u&&(u.hidden=c.some(d=>!d.hidden))}function Zt(){let t=Array.from(document.querySelectorAll("[data-paged-archive]")).map(Jt),r=Array.from(document.querySelectorAll("[data-filter-page]:not([data-paged-archive])"));if(r.length===0)return()=>t.forEach(i=>i());let n=r.map(i=>(Qt(i),Me(i))),a=()=>r.forEach((i,l)=>{Qt(i),n[l].refresh()}),o=i=>{let l=i.target;if(!(l instanceof Element))return;let s=l.closest("a[data-topic-filter-option], a[data-year-filter-option], a[data-month-filter-option], a[data-day-filter-option]");if(!s)return;let m=new URL(s.href,window.location.href);if(m.origin!==window.location.origin||m.pathname!==window.location.pathname)return;i.preventDefault();let c=new URL(window.location.href);if(c.pathname=m.pathname,s.hasAttribute("data-topic-filter-option")){let u=s.dataset.topicAnchor??"";u?c.searchParams.set("topic",u):c.searchParams.delete("topic")}else{let u=s.hasAttribute("data-year-filter-option")?"year":s.hasAttribute("data-month-filter-option")?"month":"day",d=s.getAttribute(`data-filter-${u}`)??"";s.getAttribute("aria-current")==="page"?c.searchParams.delete(u):c.searchParams.set(u,d);for(let p of["year","month","day"])p!==u&&c.searchParams.delete(p)}window.history.pushState(null,"",`${c.pathname}${c.search}`),a()};return document.addEventListener("click",o),window.addEventListener("popstate",a),window.addEventListener("pageshow",a),()=>{n.forEach(i=>i.dispose()),t.forEach(i=>i()),document.removeEventListener("click",o),window.removeEventListener("popstate",a),window.removeEventListener("pageshow",a)}}var Te=Symbol.for("jekyll-obsidian.priority-navigation-controller");function er(){let e=document;e[Te]?.();let t=document.querySelector("[data-priority-navigation]"),r=t?.querySelector("[data-priority-navigation-list]"),n=t?.querySelector("[data-priority-navigation-more]"),a=t?.querySelector("[data-priority-navigation-overflow]");if(!t||!r||!n||!a||typeof ResizeObserver>"u")return;let o=[...r.querySelectorAll(":scope > [data-priority-navigation-item]")],i=0,l=()=>{r.append(...o),n.hidden=!0,n.open=!1,delete n.dataset.hasCurrent},s=()=>{if(l(),window.matchMedia("(max-width: 880px)").matches||o.length<2)return;let p=t.clientWidth;if(!(r.scrollWidth<=p)){for(n.hidden=!1;r.children.length>1&&r.scrollWidth+n.offsetWidth+6>p;){let g=r.lastElementChild;if(!g)break;a.prepend(g)}a.querySelector('[aria-current="page"]')&&(n.dataset.hasCurrent="true")}},m=()=>{window.cancelAnimationFrame(i),i=window.requestAnimationFrame(s)},c=new ResizeObserver(m);c.observe(t),document.fonts?.ready.then(m).catch(()=>{}),m();let u=p=>{let g=p.target;n.open&&g instanceof Node&&!n.contains(g)&&(n.open=!1)};document.addEventListener("click",u);let d=()=>{c.disconnect(),window.cancelAnimationFrame(i),document.removeEventListener("click",u),l(),delete t.dataset.priorityNavigationReady,e[Te]===d&&delete e[Te]};t.dataset.priorityNavigationReady="true",e[Te]=d}var Ar=2e3;function tr(){let e=document.querySelector("[data-page-actions]");if(!e)return()=>{};let t=e.dataset.markdownUrl,r=e.querySelector("[data-copy-page-status]"),n=e.querySelector("[data-copy-page-error]"),a=e.querySelector("[data-page-actions-menu]"),o=[...e.querySelectorAll("[data-copy-page-label]")],i=o.map(g=>g.textContent||"Copy page"),l,s,m=!1,c=()=>{o.forEach((g,b)=>{g.textContent=i[b]||"Copy page"}),l=void 0},u=async g=>{let b=g.target,C=b instanceof Element?b.closest("[data-copy-page]"):null;if(!C||!e.contains(C)||!t)return;g.preventDefault(),s?.abort();let z=new AbortController;s=z,window.clearTimeout(l),r&&(r.textContent=""),n&&(n.hidden=!0,n.textContent="");try{let L=new URL(t,window.location.href);if(L.origin!==window.location.origin)throw new TypeError("Markdown URL must be same-origin");let N=await fetch(L,{credentials:"same-origin",headers:{Accept:"text/markdown"},signal:z.signal});if(!N.ok)throw new Error(`Markdown resource returned HTTP ${N.status}`);let S=await N.text();if(m||z.signal.aborted||s!==z||(await ot(S,z.signal),m||z.signal.aborted||s!==z))return;let M=e.dataset.copySuccess||"Copied";o.forEach(q=>{q.textContent=M}),r&&(r.textContent=M),a?.removeAttribute("open")}catch{if(m||z.signal.aborted||s!==z)return;let L=e.dataset.copyError||"Copy failed. Open View as Markdown and copy the text.";r&&(r.textContent=L),n&&(n.textContent=L,n.hidden=!1),a&&(a.open=!0)}finally{s===z&&(s=void 0,m||(l=window.setTimeout(c,Ar)))}},d=g=>{!a?.open||g.target instanceof Node&&a.contains(g.target)||a.removeAttribute("open")},p=g=>{g.key!=="Escape"||!a?.open||(a.removeAttribute("open"),a.querySelector("summary")?.focus())};return e.addEventListener("click",u),document.addEventListener("click",d),document.addEventListener("keydown",p),()=>{m=!0,s?.abort(),s=void 0,window.clearTimeout(l),e.removeEventListener("click",u),document.removeEventListener("click",d),document.removeEventListener("keydown",p)}}async function Lr(e){if(!e.ok||e.headers.get("content-type")?.split(";")[0]?.trim().toLowerCase()!=="application/pdf"||!e.body)throw new Error("Invalid PDF response");if(Number(e.headers.get("content-length"))>20971520)throw new Error("PDF too large");let r=e.body.getReader(),n=[],a=0;try{for(;;){let{value:i,done:l}=await r.read();if(l)break;if(a+=i.byteLength,a>20971520)throw new Error("PDF too large");n.push(new Uint8Array(i))}}catch(i){throw await r.cancel(),i}finally{r.releaseLock()}let o=new Blob(n,{type:"application/pdf"});if(await o.slice(0,5).text()!=="%PDF-")throw new Error("Invalid PDF signature");return o}function rr(){let e=[...document.querySelectorAll("[data-website-pdf-source]")],t,r=()=>{if(!t)return;t.controller.abort(),t.url&&URL.revokeObjectURL(t.url),t.card.querySelector("iframe")?.remove();let a=t.card.querySelector("[data-pdf-preview]");a.textContent=t.card.dataset.pdfPreview||"Preview PDF",a.setAttribute("aria-expanded","false"),t.card.querySelector("[data-pdf-status]").textContent="",t=void 0},n=async a=>{let o=a.target instanceof Element?a.target.closest("[data-pdf-preview]"):null,i=o?.closest("[data-website-pdf-source]");if(!o||!i)return;let l=t?.card===i;if(r(),l)return;let s=new AbortController,m={card:i,controller:s,url:void 0};t=m,o.textContent=i.dataset.pdfClose||"Close preview",o.setAttribute("aria-expanded","true");let c=i.querySelector("[data-pdf-status]");c.textContent=i.dataset.pdfLoading||"Loading PDF\u2026";let u=setTimeout(()=>s.abort(),3e4);try{let d=new URL(i.dataset.websitePdfSource,location.href),p=await fetch(d,{credentials:"omit",signal:s.signal}),g=await Lr(p);s.signal.throwIfAborted(),m.url=URL.createObjectURL(g);let b=document.createElement("iframe");b.className="website-external-pdf__viewport",b.src=m.url+d.hash,b.title=i.querySelector("a").textContent||"PDF",b.height=i.dataset.pdfHeight||"640",i.append(b),c.textContent=""}catch{if(t!==m)return;r(),c.textContent=i.dataset.pdfError||"Preview unavailable. Open the PDF using its link."}finally{clearTimeout(u)}};for(let a of e)a.querySelector("[data-pdf-preview]").hidden=!navigator.pdfViewerEnabled;return document.addEventListener("click",n),window.addEventListener("pagehide",r),()=>{r(),document.removeEventListener("click",n),window.removeEventListener("pagehide",r)}}var Sr="https://platform.twitter.com",Cr=`${Sr}/widgets.js`,he=null;function Mr(e){let t=e.documentElement.dataset.colorScheme;return t==="light"||t==="dark"?t:ye()}function zr(e){let t=e.defaultView;return t?.twttr?.widgets?Promise.resolve(t.twttr):he||(he=new Promise((r,n)=>{let a=e.querySelector("script[data-website-x-widgets]"),o=a||e.createElement("script"),i=s=>{o.remove(),n(new Error(s))},l=()=>{let s=t?.twttr;s?.widgets?r(s):i("X widgets did not initialise")};o.addEventListener("load",l,{once:!0}),o.addEventListener("error",()=>i("X widgets could not be loaded"),{once:!0}),a||(o.src=Cr,o.async=!0,o.dataset.websiteXWidgets="",e.head.append(o))}).catch(r=>{throw he=null,r}),he)}function Tr(e,t){if(e.dataset.websiteTweetInitialised==="true")return()=>{};e.dataset.websiteTweetInitialised="true";let r=e.dataset.websiteTweet||"",n=e.querySelector("[data-website-tweet-mount]"),a=e.querySelector("[data-website-tweet-fallback]");if(!r||!/^\d+$/.test(r)||!n||!a)return e.dataset.websiteTweetState="unavailable",()=>{};let o=!1,i=!1,l=!1,s=!1,m=async(p=!1)=>{if(!o){if(i){l||=p;return}i=!0,e.dataset.websiteTweetState="loading";try{let g=await zr(t);if(o)return;p&&n.replaceChildren();let b=await g.widgets.createTweet(r,n,{dnt:!0,theme:Mr(t)});if(o||!b)throw new Error("X post is unavailable");s=!0,a.hidden=!0,e.dataset.websiteTweetState="ready"}catch{o||(a.hidden=!1,e.dataset.websiteTweetState="unavailable")}finally{i=!1,l&&!o&&(l=!1,m(!0))}}},c=()=>{i?l=!0:s&&m(!0)};t.addEventListener(se,c);let u=null,d=t.defaultView;return d&&"IntersectionObserver"in d?(u=new d.IntersectionObserver(p=>{p.some(g=>g.isIntersecting)&&(u?.disconnect(),m())},{rootMargin:"400px 0px"}),u.observe(e)):m(),()=>{o=!0,u?.disconnect(),t.removeEventListener(se,c)}}function nr(e=document){let t=Array.from(e.querySelectorAll("[data-website-tweet]")).map(r=>Tr(r,e));return()=>t.forEach(r=>r())}var Hr='meta[name="website:analytics"]',Ir="script[data-website-analytics]";function qr(e){let t=e.querySelector(Hr),r=t?.dataset.provider,n=t?.content||"";return r!=="cloudflare"&&r!=="google"||!n||n!==n.trim()||n.length>256?null:{provider:r,identifier:n}}function Or(e,t){let r=e.createElement("script");r.defer=!0,r.src="https://static.cloudflareinsights.com/beacon.min.js",r.dataset.cfBeacon=JSON.stringify({token:t}),r.dataset.websiteAnalytics="cloudflare",e.head.append(r)}function Rr(e,t){let r=e.defaultView;if(!r)return;let n=e.createElement("script");n.async=!0,n.src=`https://www.googletagmanager.com/gtag/js?id=${encodeURIComponent(t)}`,n.dataset.websiteAnalytics="google",e.head.append(n);let a=r.dataLayer||=[],o=r.gtag||=function(...i){a.push(arguments)};o("js",new Date),o("config",t)}function ir(e=document){let t=qr(e);if(!(!t||e.querySelector(Ir)))try{t.provider==="cloudflare"?Or(e,t.identifier):Rr(e,t.identifier)}catch{}}var He=Symbol.for("jekyll-obsidian.scrollbar-controller"),Ke="data-scrollbar-active",Pr=1200;function or(e=document){let t=e;t[He]?.();let r=e.defaultView;if(!r)return()=>{};let n=e.documentElement,a=n.hasAttribute("data-auto-hide-root-scrollbar")?n:null,o=Array.from(e.querySelectorAll("[data-auto-hide-scrollbar]")),i=new Map,l=d=>{let p=i.get(d);p!==void 0&&r.clearTimeout(p),d.setAttribute(Ke,"true"),i.set(d,r.setTimeout(()=>{d.removeAttribute(Ke),i.delete(d)},Pr))},s=()=>{a&&l(a)},m=d=>{d.clientX>=r.innerWidth-18&&s()},c=o.map(d=>{let p=()=>l(d);return d.addEventListener("pointermove",p,{passive:!0}),d.addEventListener("focusin",p),d.addEventListener("scroll",p,{passive:!0}),l(d),()=>{d.removeEventListener("pointermove",p),d.removeEventListener("focusin",p),d.removeEventListener("scroll",p)}});a&&(r.addEventListener("scroll",s,{passive:!0}),e.addEventListener("pointermove",m,{passive:!0}),s());let u=()=>{a&&(r.removeEventListener("scroll",s),e.removeEventListener("pointermove",m)),c.forEach(d=>d());for(let[d,p]of i)r.clearTimeout(p),d.removeAttribute(Ke);i.clear(),t[He]===u&&delete t[He]};return t[He]=u,u}var Ie=new WeakMap;function ar(){let e=document;Ie.get(e)?.();let t=e.defaultView,r=e.querySelector("[data-back-to-top]");if(!t||!r)return()=>{};let n,a=()=>{n=void 0;let s=t.scrollY<=t.innerHeight;r.hidden!==s&&(r.hidden=s)},o=()=>{n??=t.requestAnimationFrame(a)},i=()=>{e.getElementById("main-content")?.focus({preventScroll:!0}),t.scrollTo({top:0,left:0,behavior:t.matchMedia("(prefers-reduced-motion: reduce)").matches?"instant":"smooth"})};t.addEventListener("scroll",o,{passive:!0}),t.addEventListener("resize",o),t.addEventListener("pageshow",o),r.addEventListener("click",i),a();let l=()=>{t.removeEventListener("scroll",o),t.removeEventListener("resize",o),t.removeEventListener("pageshow",o),r.removeEventListener("click",i),n!==void 0&&t.cancelAnimationFrame(n),r.hidden=!0,Ie.get(e)===l&&Ie.delete(e)};return Ie.set(e,l),l}var Fr="website:docs-page-change",ve=0,Xe=()=>{},Je=null;function sr(){let e=++ve;Xe();let t=[];Xe=()=>{let r=[];for(let n of t.splice(0).reverse())try{n()}catch(a){r.push(a)}if(r.length)throw new AggregateError(r,"Page feature cleanup failed")};try{Ze(),t.push(ct()),t.push(mt()),t.push(ft()),t.push(Zt()),t.push(tr()),t.push(ar()),t.push(Ft()),t.push(rr()),t.push(at()),t.push(st()),lt(),t.push(nr())}catch(r){try{Xe()}catch(n){throw new AggregateError([r,n],"Page feature initialization failed")}throw r}qe("preview")&&import("../previews-MG7MTTYB.js").then(({initialisePreviews:r})=>{e===ve&&r()}).catch(()=>{document.documentElement.dataset.previewError="true"}),document.querySelector("pre code.language-mermaid, [data-website-mermaid]")&&import("../mermaid-DLWPGV5J.js").then(({renderMermaid:r})=>{e===ve&&r()}).catch(()=>{document.documentElement.dataset.mermaidError="true"}),document.querySelector("[data-math], [data-math-style], .math-inline, .math-display")&&import("../math-OBBMUDQO.js").then(({renderMath:r})=>{e===ve&&r()}).catch(()=>{document.documentElement.dataset.mathError="true"}),document.querySelector("[data-local-graph-section]")&&(Je??=import("../graph-F3JLZWW5.js")),Je&&Je.then(({initialiseGraphs:r})=>{e===ve&&r()}).catch(()=>{document.documentElement.dataset.graphError="true"})}function ki(){if(document.documentElement.classList.remove("no-js"),document.documentElement.classList.add("js"),et(),dt(),er(),ir(),or(),sr(),document.addEventListener(Fr,sr),document.querySelector("[data-docs-navigation]")&&import("../docs-navigation-PT5X44HW.js").then(({initialiseDocsNavigation:e})=>e()).catch(()=>{document.documentElement.dataset.docsNavigationError="true"}),qe("search")){let e=null,t=async()=>{let r=be("search");if(!r)return;e??=import("../search-7PCXY7J6.js");let n=r.querySelector("[data-search-status]");try{await(await e).activateSearch(r)}catch{n&&(n.textContent=r.dataset.searchUnavailable||"Search could not be loaded. Reload the page and try again.")}};document.addEventListener("click",r=>{let n=r.target;!(n instanceof Element)||!n.closest("[data-search-open]")||(r.preventDefault(),t())}),document.addEventListener("keydown",r=>{(r.metaKey||r.ctrlKey)&&r.key.toLocaleLowerCase("und")==="k"&&(r.preventDefault(),t())})}}export{ki as a};
@@ -0,0 +1 @@
1
+ var w="$tab_sources";function S(e){let r=/^\d+$/.test(e)?Number(e):NaN;return Number.isSafeInteger(r)&&r>0?r:void 0}function M(e,r,t){let n=r+e,o=Object.hasOwn(t,n)?t[n]:void 0;return o?.startsWith(r)?o.slice(r.length):e}function C(e,r,t,n,o="page",p=1/0){let b=i=>{if(!i.length)return null;let c,v=!0;for(let R of i){let _=Object.hasOwn(n,R)?n[R]:void 0;if(_)if(!c)c=_;else{v&&(c=c.slice(),v=!1);for(let y=0;y<c.length;y++)c[y]=c[y]|_[y]}}return c||new Uint8Array(0)},f=t.groups.map(b),a=0,u=b(t.excluded||[]),l=i=>!(u&&u[i>>3]&1<<(i&7))&&f.every(c=>!c||!!(c[i>>3]&1<<(i&7))),[d,m]=t.range,s=[],h=Math.max(1,t.page),A=(h-1)*r,g=o==="page"&&h>1?new Array(r):void 0;for(let i=d;i<m;i++)if(l(i)){if(o==="first")return{ordinals:[i],count:1,page:1,pages:1};(o==="all"&&s.length<p||o==="page"&&a>=A&&s.length<r)&&s.push(i),g&&(g[a%r]=i),a++}if(o!=="page")return{ordinals:s,count:a,page:1,pages:1};let x=Math.max(1,Math.ceil(a/r)),O=Math.min(x,h);return{ordinals:h>x?g.slice(0,a-(x-1)*r):s,count:a,page:O,pages:x}}function I(e,r){let t=Uint8Array.from(atob(e),n=>n.charCodeAt(0));if(t.length!==Math.ceil(r/8))throw new Error("Invalid archive bitmap length");return t}function U(e,r){let t=new URLSearchParams(r),n=new URLSearchParams,o=[],p=[];for(let[s,h]of Object.entries(e.prefixes)){let A=[...new Set(t.getAll(s).filter(Boolean).map(g=>M(g,h,e.aliases)))].sort();o.push(A.map(g=>`${s}/${g}`));for(let g of A)n.append(s,g),p.push(`${s}/${g}`)}let b=t.get("include_tabs")==="1"||n.getAll("source").some(s=>e.tab_sources?.includes(s));b&&n.set("include_tabs","1");for(let s of[...new Set(t.getAll("show_hidden"))].sort())Object.hasOwn(e.prefixes,s)&&n.append("show_hidden",s);let f=!b&&e.tab_sources?.length?[w]:[];p.push(...f);let a=[0,e.total],u=t.get("day"),l=t.get("month"),d=t.get("year");u?(n.set("day",u),a=Object.hasOwn(e.days,u)?e.days[u]:[0,0]):l?(n.set("month",l),a=Object.hasOwn(e.months,l)?e.months[l]:[0,0]):d&&(n.set("year",d),a=Object.hasOwn(e.years,d)?e.years[d]:[0,0]);let m=S(t.get("page")||"1")||1;return m>1&&n.set("page",String(m)),{parameters:n,query:{groups:o,range:a,page:m,...f.length?{excluded:f}:{}},keys:p}}export{w as a,S as b,M as c,C as d,I as e,U as f};
@@ -1 +1 @@
1
- import{a as e}from"./chunks/chunk-R3AIO6OV.js";import"./chunks/chunk-OEBMYWCF.js";import"./chunks/chunk-GMBKQ7NZ.js";import"./chunks/chunk-JXSDAMOW.js";import"./chunks/chunk-MGH5TWGB.js";import"./chunks/chunk-D6FURU6X.js";import"./chunks/chunk-PHKIAKHS.js";e();
1
+ import{a as e}from"./chunks/chunk-7UNR26CO.js";import"./chunks/chunk-OEBMYWCF.js";import"./chunks/chunk-GMBKQ7NZ.js";import"./chunks/chunk-GFG7Q2HN.js";import"./chunks/chunk-MGH5TWGB.js";import"./chunks/chunk-D6FURU6X.js";import"./chunks/chunk-PHKIAKHS.js";e();
@@ -0,0 +1 @@
1
+ @layer reset,tokens,base,composition,content,components,utilities;@layer reset{[hidden]:not([hidden=until-found]){display:none!important}*,*:before,*:after{box-sizing:border-box}html{-webkit-text-size-adjust:100%;font-size:106.25%;text-size-adjust:100%;scroll-behavior:smooth}body,h1,h2,h3,h4,p,figure,blockquote,dl,dd{margin:0}img,picture,video,canvas,svg{display:block;max-inline-size:100%}button,input,textarea,select{font:inherit}}@layer tokens{:root{color-scheme:light;--frost: #f8f6ef;--surface: #fffdf7;--ink: #24231f;--graphite: #65625b;--violet: #236f86;--teal: #a64f2d;--violet-soft: #e8e8e3;--teal-soft: #f3e4da;--line: #e1ddd3;--line-strong: #c9c3b7;--code-surface: #ffffff;--shadow: 0 20px 64px rgb(44 39 29 / 8%);--overlay: rgb(24 27 39 / 44%);--danger: #a83d56;--focus-ring: 0 0 0 3px rgb(35 111 134 / 25%);--article-width: 760px;--rail-width: 288px;--page-gutter: clamp(1rem, 3vw, 2.5rem);--font-system: -apple-system, BlinkMacSystemFont, "Segoe UI", Helvetica, Arial, "Noto Sans CJK SC", "Source Han Sans SC", sans-serif;--font-mono: ui-monospace, "SFMono-Regular", Menlo, Consolas, "Liberation Mono", monospace;--font-article: var(--font-system);--font-ui: var(--font-system);--page-action-size: 2.55rem;--page-action-menu-size: 2.15rem;--page-actions-gap: 1rem;--page-action-favorite-clearance: 4.25rem;--back-to-top-size: max(44px, 2.75rem)}:root[data-color-scheme=dark]{color-scheme:dark;--frost: #111113;--surface: #1b1b1f;--ink: #ededf0;--graphite: #a7a7ae;--violet: #78b7ff;--teal: #e59a73;--violet-soft: #1d2a38;--teal-soft: #3b2922;--line: #303036;--line-strong: #46464d;--code-surface: #151518;--shadow: 0 20px 70px rgb(0 0 0 / 26%);--overlay: rgb(4 5 10 / 68%);--danger: #ff93a8;--focus-ring: 0 0 0 3px rgb(120 183 255 / 28%)}@media(prefers-color-scheme:dark){:root:not([data-color-scheme=light]){color-scheme:dark;--frost: #111113;--surface: #1b1b1f;--ink: #ededf0;--graphite: #a7a7ae;--violet: #78b7ff;--teal: #e59a73;--violet-soft: #1d2a38;--teal-soft: #3b2922;--line: #303036;--line-strong: #46464d;--code-surface: #151518;--shadow: 0 20px 70px rgb(0 0 0 / 26%);--overlay: rgb(4 5 10 / 68%);--danger: #ff93a8;--focus-ring: 0 0 0 3px rgb(120 183 255 / 28%)}}}@layer base{body{display:flex;flex-direction:column;min-block-size:100vh;background:var(--frost);color:var(--ink);font-family:var(--font-ui);line-height:1.55;text-rendering:optimizeLegibility}::selection{background:color-mix(in srgb,var(--violet) 28%,transparent);color:var(--ink)}a{color:inherit;text-underline-offset:.2em}button,a,input,summary,[tabindex]:not([tabindex="-1"]){outline:0}:focus-visible{border-radius:.2rem;box-shadow:var(--focus-ring)}#main-content:focus-visible{outline:0}button{border:0;color:inherit}code,kbd,pre{font-family:var(--font-mono)}}@layer composition{.skip-link{position:fixed;z-index:100;inset-block-start:.75rem;inset-inline-start:.75rem;translate:0 -180%;padding:.65rem .9rem;border:1px solid var(--violet);border-radius:.35rem;background:var(--surface);font-size:.82rem;font-weight:650}.skip-link:focus{translate:0}.site-header{position:relative;z-index:10;border-block-end:1px solid var(--line);background:color-mix(in srgb,var(--frost) 92%,transparent)}.site-header__inner{display:flex;align-items:center;justify-content:space-between;inline-size:min(100%,calc(var(--article-width) + var(--rail-width) + 3.5rem));min-block-size:4.25rem;margin-inline:auto;padding-inline:var(--page-gutter);gap:1.2rem}.site-mark{display:inline-flex;min-inline-size:0;align-items:baseline;gap:.6rem;text-decoration:none}.site-mark__glyph{flex:none;color:var(--violet);font-family:var(--font-article);font-size:1.8rem;font-style:italic;font-weight:620;line-height:1}.site-mark__name{min-inline-size:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;font-size:.86rem;font-weight:700;letter-spacing:.08em;text-transform:uppercase}.site-actions,.site-navigation,.site-navigation__list{display:flex;align-items:center;gap:.35rem}.site-navigation{flex:1 1 auto;justify-content:center;min-inline-size:0}.site-navigation__list,.site-navigation__overflow{margin:0;padding:0;list-style:none}.site-navigation__list,.site-actions{flex:none}.site-navigation__more{position:relative;flex:none}.site-navigation__more>summary{list-style:none}.site-navigation__more>summary::-webkit-details-marker{display:none}.site-navigation a,.site-navigation__more>summary,.site-action{display:inline-flex;align-items:center;min-block-size:2.3rem;padding-inline:.72rem;border:1px solid transparent;border-radius:.35rem;background:transparent;color:var(--ink);cursor:pointer;font-size:.76rem;font-weight:620;letter-spacing:.04em;text-decoration:none;column-gap:.55rem}.site-navigation a:hover,.site-navigation__more>summary:hover,.site-action:hover{border-color:var(--line);background:var(--surface);color:var(--ink)}.site-navigation a[aria-current=page],.site-navigation__more[data-has-current=true]>summary{color:var(--ink);font-weight:720}.site-navigation__overflow{position:absolute;z-index:30;inset-block-start:calc(100% + .45rem);inset-inline-end:0;display:grid;min-inline-size:10.5rem;padding:.35rem;border:1px solid var(--line);border-radius:.42rem;background:var(--surface);box-shadow:var(--shadow)}.site-navigation__more:not([open])>.site-navigation__overflow{display:none}.site-navigation__overflow a{display:flex;inline-size:100%}.site-actions [data-search-open]{border-color:var(--line-strong);background:color-mix(in srgb,var(--surface) 72%,transparent)}.site-actions .site-action{justify-content:center;flex:none;inline-size:2.5rem;block-size:2.5rem;padding:0}.site-action__icon{inline-size:1.15rem;block-size:1.15rem;flex:none}.site-actions .archive-reading-switch[aria-checked=true]{color:var(--teal);background:color-mix(in srgb,var(--teal) 12%,transparent);border-color:var(--teal)}.site-action__reading-check{display:none}[aria-checked=true] .site-action__reading-check{display:block}.site-action__sun{display:none}[data-color-scheme=dark] .site-action__sun{display:block}[data-color-scheme=dark] .site-action__moon{display:none}.site-action--github{justify-content:center;inline-size:2.3rem;padding-inline:0;color:var(--graphite)}.site-action--github svg{inline-size:1.15rem;block-size:1.15rem;fill:currentColor}.language-switcher{position:relative}.language-switcher>summary{list-style:none}.language-switcher>summary::-webkit-details-marker{display:none}.language-switcher__panel{position:absolute;z-index:30;inset-block-start:calc(100% + .45rem);inset-inline-end:0;inline-size:max-content;max-inline-size:min(16rem,var(--language-panel-available, calc(100vw - 2rem) ));padding:.38rem;border:1px solid var(--line);border-radius:.42rem;background:var(--surface);box-shadow:var(--shadow)}.language-switcher__panel ul{display:grid;padding:0;margin:0;gap:.15rem;list-style:none}.language-switcher__panel:before{content:"";position:absolute;inset-inline:0;inset-block-end:100%;block-size:.5rem}.language-switcher__panel a{display:block;padding:.58rem .65rem;border-radius:.3rem;color:var(--ink);font-size:.76rem;text-decoration:none;overflow-wrap:anywhere}.language-switcher__panel a:hover,.language-switcher__panel a[aria-current=page]{background:var(--violet-soft);color:var(--ink)}.translation-fallback{position:fixed;z-index:40;inset-inline:1rem;inset-block-end:calc(1rem + env(safe-area-inset-bottom,0px));inline-size:fit-content;max-inline-size:min(32rem,calc(100% - 2rem));padding:.8rem 1rem;border-inline-start:3px solid var(--violet);border-radius:.25rem;margin-inline:auto;background:color-mix(in srgb,var(--violet) 8%,var(--surface));box-shadow:var(--shadow);color:var(--ink);font-family:var(--font-ui);font-size:.78rem;pointer-events:none;animation:translation-fallback-notice 5s ease-in forwards}@keyframes translation-fallback-notice{0%,90%{visibility:visible;opacity:1;transform:translateY(0)}to{visibility:hidden;opacity:0;transform:translateY(.4rem)}}.site-footer{margin-block-start:auto;border-block-start:1px solid var(--line);color:var(--graphite)}.site-footer__inner{display:flex;align-items:center;justify-content:center;inline-size:min(100%,calc(var(--article-width) + var(--rail-width) + 3.5rem));margin-inline:auto;padding:.85rem var(--page-gutter);gap:.35rem;font-size:.74rem;text-align:center}.site-footer__github{display:inline-flex;align-items:center;flex:none;gap:.3rem;color:inherit;text-decoration:none}.site-footer__github:hover{color:var(--ink)}.site-footer__github svg{inline-size:.95rem;block-size:.95rem;fill:currentColor}.mobile-toolbar{display:none}.back-to-top{position:fixed;z-index:40;right:calc(1rem + env(safe-area-inset-right,0px));bottom:calc(1rem + env(safe-area-inset-bottom,0px));display:grid;place-items:center;inline-size:var(--back-to-top-size);block-size:var(--back-to-top-size);padding:0;border:1px solid var(--line-strong);border-radius:50%;background:var(--surface);color:var(--ink);box-shadow:0 4px 16px #10121f29;cursor:pointer}.back-to-top:hover{background:var(--frost)}.back-to-top:focus-visible{outline:2px solid var(--ink);outline-offset:3px}}@layer content{body.theme-minimal{--website-reading-margin-inline: 0 auto}body.theme-docs{--website-reading-margin-inline: auto}:is(.minimal-entry,.docs-article)>:where(.note-header,.note-source-url,.note-properties,.source-actions,.tab-collection,.related-articles,.website-comments),:is(.minimal-entry,.docs-article)>.note-content>:where(h1,h2,h3,h4,p,ul,ol,dl,blockquote,pre,table,.highlighter-rouge,.code-block-copy,.callout,.mermaid-diagram,.footnotes){inline-size:min(100%,var(--reading-width));margin-inline:var(--website-reading-margin-inline)}.note-header{margin-block-end:2.5rem;padding-block-end:0;border-block-end:0}.note-meta{color:var(--graphite);font-family:var(--font-ui);font-size:.67rem;font-weight:670;letter-spacing:.11em;text-transform:uppercase}.note-title,.note-content h1,.note-content h2,.note-content h3,.note-content h4{color:var(--ink);font-family:var(--font-article);text-wrap:balance}.note-title{max-inline-size:20ch;font-size:clamp(2rem,4vw,3.1rem);font-weight:650;letter-spacing:-.025em;line-height:1.08}.note-description,.note-subtitle{inline-size:100%;max-inline-size:none;margin-block-start:0;color:var(--ink);font-family:var(--font-article);font-size:1.08rem;font-style:normal;line-height:1.6}.note-byline{max-inline-size:49ch;color:var(--graphite);font-family:var(--font-ui);font-size:.78rem;line-height:1.5}.note-title+.note-byline{margin-block-start:.8rem}.note-byline+.note-description,.note-byline+.note-subtitle{margin-block-start:1rem}.note-title+.note-description,.note-title+.note-subtitle{margin-block-start:1.25rem}.note-meta{display:flex;flex-wrap:wrap;margin-block-start:1.65rem;gap:.55rem 1rem}.note-tags{display:flex;flex-wrap:wrap;gap:.5rem;padding:0;margin-block:1rem 0;list-style:none;font-family:var(--font-ui);font-size:.8rem}.note-source-url{margin-block:0 1.75rem;font-size:.85rem}.note-properties{margin-block:0 2rem;font-family:var(--font-ui);font-size:.85rem;line-height:1.6}.note-properties__row{display:grid;grid-template-columns:minmax(0,12rem) minmax(0,1fr);gap:.25rem 1rem;padding-block:.35rem;overflow-wrap:anywhere}.note-properties dt{color:var(--graphite);font-weight:500}.note-properties dd{min-inline-size:0;margin:0}.note-properties ul{margin:0;padding-inline-start:1.25rem}.note-property-value--number,.note-property-value--boolean,.note-property-value--null,.note-property-value--empty_string,.note-property-value--empty_list{font-family:var(--font-mono)}.note-property-value--text{white-space:pre-wrap}@media(max-width:520px){.note-properties__row{grid-template-columns:minmax(0,1fr)}}.note-meta__topics{display:flex;flex:1 1 18rem;flex-wrap:wrap;min-inline-size:0;max-inline-size:100%;gap:.4rem}.note-content{color:var(--ink);font-family:var(--font-article);font-size:clamp(1rem,1.2vw,1.08rem);line-height:1.7;overflow-wrap:anywhere}.note-content>*+*{margin-block-start:1.35em}.note-content h1,.note-content h2,.note-content h3,.note-content h4{position:relative;scroll-margin-block-start:2rem}.note-content h1{font-size:clamp(2rem,4vw,2.8rem);font-weight:650;letter-spacing:-.025em;line-height:1.14}.note-content h2{margin-block-start:2.65em;padding-block-start:0;font-size:clamp(1.5rem,2.5vw,1.9rem);font-weight:650;letter-spacing:-.015em;line-height:1.18}.note-content h2:before{content:none}.note-content h3{margin-block-start:2.15em;font-size:1.32rem;font-weight:650;line-height:1.3}.note-content h4{font-size:1.08rem;font-weight:700;letter-spacing:.015em}.note-content strong{font-weight:720}.note-content em{font-style:italic}.note-content a:not(.tag-chip):not(.website-embed__source){color:color-mix(in srgb,var(--violet) 88%,var(--ink));text-decoration-color:color-mix(in srgb,var(--violet) 44%,transparent);text-decoration-thickness:.08em}.note-content a:hover{text-decoration-color:currentColor}.note-content ul,.note-content ol{padding-inline-start:1.35em}.note-content li+li{margin-block-start:.36em}.note-content li::marker{color:var(--teal);font-family:var(--font-ui);font-size:.8em;font-weight:750}.note-content blockquote{padding:.1rem 0 .1rem 1.25rem;border-inline-start:2px solid var(--teal);color:var(--ink);font-style:italic}.note-content hr{inline-size:38%;margin:3.5rem auto;border:0;border-block-start:1px solid var(--line-strong)}.note-content mark{margin-inline:-.08em;padding-inline:.08em;background:linear-gradient(transparent 40%,color-mix(in srgb,var(--teal) 25%,transparent) 40%,color-mix(in srgb,var(--teal) 25%,transparent) 92%,transparent 92%);color:inherit}.note-content code,.note-content kbd,.note-content pre{font-family:var(--font-mono)}.note-content :not(pre)>code{padding:.14em .32em;border:1px solid var(--line);border-radius:.25rem;background:var(--code-surface);font-size:.84em}.note-content pre{max-inline-size:100%;padding:1.25rem 1.35rem;border:1px solid var(--line);border-radius:.4rem;background:var(--code-surface);font-size:.82rem;line-height:1.65;overflow:auto}.note-content table{display:block;inline-size:max-content;max-inline-size:100%;border-collapse:collapse;font-family:var(--font-ui);font-size:.82rem;overflow-x:auto}.note-content th,.note-content td{padding:.6rem .75rem;border-block-end:1px solid var(--line);text-align:start;vertical-align:top}.note-content th{color:var(--ink);font-size:.7rem;letter-spacing:.06em;text-transform:uppercase}.note-content img,.note-content video,.note-content object,.note-content iframe{inline-size:auto;max-inline-size:100%;border-radius:.35rem}.note-content img[data-image-expand]{cursor:zoom-in}.note-content img[data-image-expand]:focus-visible{outline:2px solid var(--ink);outline-offset:.2rem}.note-content .website-external-audio,.note-content .website-external-video,.note-content .website-external-player{display:block;inline-size:100%}.note-content .website-external-player{min-block-size:200px;aspect-ratio:16 / 9;border:0}.note-content .website-external-pdf,.note-content .website-external-frame,.note-content .website-tweet{inline-size:100%;margin-block:1.6rem}.note-content .website-external-pdf__viewport,.note-content .website-external-frame__viewport{display:block;inline-size:100%;min-block-size:18rem;border:1px solid var(--line);background:var(--surface)}.note-content .website-external-pdf__fallback,.note-content .website-external-frame__fallback,.note-content .website-tweet__fallback{color:var(--ink);font-family:var(--font-ui);font-size:.74rem}.note-content .website-external-pdf__viewport{min-block-size:0;margin-block-start:.75rem}.note-content .website-external-pdf{padding:.8rem;border:1px solid var(--line);border-radius:.4rem}.note-content [data-pdf-preview]{margin-inline-start:1rem}.note-content [data-pdf-status]{display:block;margin-block-start:.5rem;font-size:.8rem}.favorites-recovery{margin-block:.5rem 1rem;font-size:.85rem}.favorites-recovery__actions{display:flex;flex-wrap:wrap;gap:.5rem;margin-block-start:.5rem}.note-content .website-tweet{max-inline-size:34rem}.website-tweet[data-website-tweet-state=loading] .website-tweet__mount{min-block-size:8rem}.website-tweet__mount{inline-size:100%}.note-content figure{display:grid;justify-items:start;gap:.65rem}.note-content figcaption{color:var(--graphite);font-family:var(--font-ui);font-size:.72rem;line-height:1.45}.note-content input[type=checkbox]{inline-size:1em;block-size:1em;margin:0 .42em 0 -1.22em;accent-color:var(--teal)}.footnotes{margin-block-start:4rem;padding-block-start:1.4rem;border-block-start:1px solid var(--line);color:var(--ink);font-size:.86em}}@layer components{:is(.minimal-reading-column,.docs-main)>.sequence-navigation{inline-size:min(100%,var(--reading-width));margin-inline:var(--website-reading-margin-inline)}.sequence-navigation>a[rel=next]:first-child{grid-column:2}.code-block-copy{position:relative;max-inline-size:100%}.code-block-copy>pre{inline-size:100%;margin:0;padding-inline-end:4rem}.source-copy__button{position:absolute;z-index:1;inset-block-start:.55rem;inset-inline-end:.55rem;display:grid;inline-size:2rem;block-size:2rem;padding:0;border:0;border-radius:.3rem;background:color-mix(in srgb,var(--code-surface) 94%,transparent);color:var(--ink);box-shadow:0 1px 4px #181b2712;cursor:pointer;place-items:center}.source-copy__button:hover,.source-copy__button:focus-visible{background:var(--surface);color:var(--ink)}.source-copy__button:focus-visible{box-shadow:var(--focus-ring)}.source-copy__button[data-copy-state=success]{background:var(--teal-soft);color:var(--teal)}.source-copy__button[data-copy-state=error]{color:var(--danger)}.source-copy__icon{inline-size:.9rem;block-size:.9rem;fill:none;stroke:currentColor;stroke-linecap:round;stroke-linejoin:round;stroke-width:1.45}.media-image__expand{position:static;display:inline-grid;margin-inline-start:.4rem;vertical-align:middle}.theme-docs :is(.related-articles,.tab-collection){margin-block-start:clamp(3rem,7vw,5rem)}.theme-docs :is(.related-articles,.tab-collection) .minimal-section-heading{padding-block-end:.8rem;border-block-end:1px solid var(--line-strong)}.theme-docs :is(.related-articles,.tab-collection) .minimal-section-heading h2{margin:0;font-family:var(--font-article);font-size:clamp(1.35rem,2.7vw,1.75rem)}.theme-docs :is(.related-articles,.tab-collection) .minimal-recent__grid{display:grid;grid-template-columns:minmax(0,1fr)}.theme-docs :is(.related-articles,.tab-collection) .minimal-post-card{position:relative;min-inline-size:0;padding-block:clamp(1.5rem,3vw,2rem);border-block-end:1px solid var(--line)}.theme-docs :is(.related-articles,.tab-collection) .minimal-post-card:has(:is(h2,h3) a:focus-visible){border-radius:.2rem;box-shadow:var(--focus-ring)}.theme-docs :is(.related-articles,.tab-collection) .minimal-post-card--with-image{display:grid;grid-template-columns:minmax(10rem,14rem) minmax(0,1fr);align-items:center;gap:clamp(1.25rem,3vw,2rem)}.theme-docs :is(.related-articles,.tab-collection) .minimal-post-card__media{display:block;aspect-ratio:16 / 9;overflow:hidden;background:var(--surface)}.theme-docs :is(.related-articles,.tab-collection) .minimal-post-card__media img{inline-size:100%;block-size:100%;object-fit:cover}.theme-docs :is(.related-articles,.tab-collection) .minimal-post-card :is(h2,h3){position:static;margin:0;font-family:var(--font-article);font-size:clamp(1.15rem,2.2vw,1.42rem);line-height:1.28;overflow-wrap:anywhere}.theme-docs :is(.related-articles,.tab-collection) .minimal-post-card :is(h2,h3) a{color:var(--ink);text-decoration:none}.theme-docs :is(.related-articles,.tab-collection) .minimal-post-card :is(h2,h3) a:after{position:absolute;inset:0;content:""}.theme-docs :is(.related-articles,.tab-collection) .minimal-post-card :is(h2,h3) a:focus-visible{box-shadow:none}.theme-docs :is(.related-articles,.tab-collection) .minimal-post-card__subtitle,.theme-docs :is(.related-articles,.tab-collection) .minimal-post-card__excerpt{margin:.6rem 0 0;color:var(--ink);font-size:.9rem;line-height:1.62}.theme-docs :is(.related-articles,.tab-collection) .minimal-post-card footer{margin-block-start:.75rem;color:var(--graphite);font-size:.7rem;font-variant-numeric:tabular-nums}.theme-docs :is(.related-articles,.tab-collection) .minimal-post-card footer a{position:relative;z-index:1;color:inherit;text-underline-offset:.15em}.website-comments{margin-block-start:clamp(3.5rem,8vw,6rem);padding-block-start:1.4rem;border-block-start:2px solid var(--ink)}.website-comments__header{padding-block-end:.85rem;border-block-end:1px solid var(--line)}.website-comments__header h2{margin:0;font-family:var(--font-article);font-size:clamp(1.4rem,2.5vw,1.75rem);font-weight:650;letter-spacing:-.015em}.website-comments__status,.website-comments__fallback{color:var(--graphite);font-family:var(--font-ui)}.website-comments__status,.website-comments__fallback{margin-block:1rem 0;font-size:.8rem;line-height:1.6}.website-comments__embed{min-inline-size:0;margin-block-start:1rem}.website-comments__embed .giscus-frame{inline-size:100%}.relation-section{position:relative;padding:.85rem .2rem 0 1rem;border-block-start:1px solid var(--line-strong)}.relation-section__title{margin-block-end:.7rem;color:var(--ink);font-size:.65rem;font-weight:720;letter-spacing:.1em;text-transform:uppercase}.relation-disclosure>summary{cursor:pointer}.relation-disclosure>summary .relation-section__title{display:inline;margin:0}.relation-disclosure>summary::marker{color:var(--graphite);font-size:.7em}.relation-disclosure>.relation-list{margin-block-start:.7rem}.context-tag-list,.tag-filter__list{display:flex;flex-wrap:wrap;margin:0;padding:0;gap:.42rem;list-style:none}.tag-filter__list li+li{margin-block-start:0}.context-tag-list a,.tag-filter__list a{display:inline-flex;align-items:center;min-block-size:1.75rem;padding:.22rem .28rem .22rem .58rem;border:1px solid var(--line-strong);border-radius:100vmax;gap:.38rem;background:transparent;color:var(--ink);font-size:.72rem;font-weight:640;line-height:1;text-decoration:none}.context-tag-list a:hover,.tag-filter__list a:hover{border-color:color-mix(in srgb,var(--graphite) 72%,var(--line));background:transparent;color:var(--ink)}.tag-filter__list a[aria-current=page]{border-color:color-mix(in srgb,var(--graphite) 72%,var(--line));background:color-mix(in srgb,var(--line-strong) 28%,transparent);color:var(--ink)}.context-tag__count{min-inline-size:1rem;padding-inline-start:.38rem;border-inline-start:1px solid var(--line);background:transparent;color:var(--graphite);font-size:.62rem;font-variant-numeric:tabular-nums}.tag-filter{margin-block-start:1.5rem}.archive-facet-heading{display:flex;flex-direction:column;align-items:flex-start;flex:0 0 7.5rem;gap:.125rem}.archive-visibility{font:inherit;font-size:.72rem;line-height:1.3;color:var(--graphite);background:transparent;border:0;padding:.25rem 0;min-height:44px;text-align:start;cursor:pointer;text-decoration:underline;text-underline-offset:.2em}.archive-visibility:hover{color:var(--ink)}@media(max-width:880px){.archive-facet-heading{flex-basis:100%}}.tag-filter__list a{min-block-size:2rem;padding:.3rem .42rem .3rem .72rem;font-size:.74rem}.filter-empty{margin-block-start:1.5rem;color:var(--graphite);font-size:.86rem}.archive-timeline{display:grid;gap:1.25rem}.archive-timeline>.relation-section__title{margin:0}.archive-timeline__year{display:grid;gap:.5rem}.archive-timeline__year h3{margin:0;font-family:var(--font-article);font-size:1rem;font-weight:650;letter-spacing:-.01em}.archive-timeline__year ul{display:grid;grid-template-columns:repeat(6,minmax(0,1fr));margin:0;padding:0;gap:.35rem .25rem;list-style:none}.archive-timeline__year li{position:relative;min-inline-size:0}.archive-timeline__year li:not(:nth-child(6n+1)):before{position:absolute;inset-block:.5rem;inset-inline-start:-.125rem;border-inline-start:1px solid var(--line-strong);content:"";pointer-events:none}.archive-timeline__year a{display:flex;align-items:center;justify-content:space-between;min-block-size:2rem;padding:.35rem .5rem;border-radius:.3rem;color:var(--ink);font-size:.75rem;font-variant-numeric:tabular-nums;text-decoration:none}.archive-timeline__year a:hover,.archive-timeline__year a[aria-current=page]{background:color-mix(in srgb,var(--line) 48%,transparent);color:var(--ink)}.archive-timeline__year h3 a{color:var(--ink);font-family:inherit;font-size:inherit;font-weight:inherit}.archive-timeline__year li a{min-inline-size:0;padding:.28rem .2rem;border:0;border-radius:0;font-size:.72rem}.archive-timeline__year li a>span:first-child{color:var(--ink);font-weight:640}.archive-timeline__year li .archive-timeline__count{min-inline-size:0;padding-inline-start:.1rem;border-inline-start:0;font-size:.62rem}.archive-timeline__year--days ul{grid-template-columns:1fr}.archive-timeline__year--days li:before{display:none}.archive-timeline__count{min-inline-size:1.5rem;color:var(--graphite);text-align:end}.website-index-list{margin-block-start:2.5rem;padding:0;border-block-start:1px solid var(--line);list-style:none}.website-index-list li,.website-index-list li+li{margin:0;border-block-end:1px solid var(--line)}.website-index-list a{display:block;padding:.72rem .2rem;color:var(--ink);font-weight:580;text-decoration:none}.website-index-list a:hover{color:var(--violet)}.docs-tree--dialog{margin-block-start:1.5rem;padding-block-start:1.25rem;border-block-start:1px solid var(--line)}.relation-list,.outline-list,.tag-list{display:grid;margin:0;padding:0;gap:.32rem;list-style:none}.relation-list a,.outline-list a{position:relative;display:block;padding:.24rem .35rem;border-radius:.25rem;color:var(--ink);font-size:.77rem;line-height:1.38;text-decoration:none}.relation-list a:hover,.outline-list a:hover,.outline-list a[aria-current=location]{background:var(--surface);color:var(--ink)}.outline-list a[aria-current=location]:before{position:absolute;inset-block:.42rem;inset-inline-start:-.7rem;inline-size:2px;background:var(--violet);content:""}.outline-list .outline-list{padding-inline-start:.65rem}.relation-empty{color:var(--graphite);font-family:var(--font-article);font-size:.78rem;font-style:italic}.tag-chip{display:inline-flex;align-items:center;min-block-size:1.7rem;padding-inline:.58rem;border:1px solid var(--line-strong);border-radius:100vmax;background:transparent;color:var(--ink);font-family:var(--font-ui);font-size:.72rem;font-weight:640;line-height:1;text-decoration:none;white-space:nowrap}.tab-collection__topics{display:flex;flex-wrap:wrap;margin:.8rem 0 0;padding:0;list-style:none;gap:.4rem}.tab-collection__topics li,.tab-collection__topics .tag-chip{position:relative;z-index:1}.tag-chip[href]:hover{border-color:color-mix(in srgb,var(--graphite) 72%,var(--line));color:var(--ink)}.callout{--callout-accent: var(--violet);margin-block:1.7rem;padding:0;border:1px solid color-mix(in srgb,var(--callout-accent) 30%,var(--line));border-inline-start:3px solid var(--callout-accent);border-radius:.35rem;background:color-mix(in srgb,var(--callout-accent) 7%,var(--surface));color:var(--ink);font-style:normal}.callout[data-callout=tip],.callout[data-callout=success]{--callout-accent: var(--teal)}.callout[data-callout=warning],.callout[data-callout=danger],.callout[data-callout=failure]{--callout-accent: var(--danger)}.callout__title,.callout>summary{padding:.72rem .9rem;color:color-mix(in srgb,var(--callout-accent) 84%,var(--ink));font-family:var(--font-ui);font-size:.74rem;font-weight:720;letter-spacing:.025em}.callout>summary{cursor:pointer}.callout__content{padding:0 .95rem .9rem}.website-embed{position:relative;margin-block:2rem;padding:1.2rem 1.25rem 1.35rem;border:1px solid var(--line);border-inline-start:3px double var(--violet);border-radius:.35rem;background:color-mix(in srgb,var(--frost) 55%,var(--surface))}.website-embed:before{position:absolute;inset-block-start:.7rem;inset-inline-end:.8rem;color:var(--violet);content:"\21b3";font-family:var(--font-ui);font-size:.9rem}.website-embed__source{display:inline-block;margin-block-end:.85rem;color:var(--graphite);font-family:var(--font-ui);font-size:.66rem;font-weight:670;letter-spacing:.07em;text-decoration:none;text-transform:uppercase}.website-embed__content>:first-child{margin-block-start:0}.website-embed__content>:last-child{margin-block-end:0}.website-unresolved{border-block-end:1px dashed var(--danger);color:var(--danger);cursor:help}.attachment-card{display:grid;grid-template-columns:auto minmax(0,1fr) auto;align-items:center;padding:.85rem 1rem;border:1px solid var(--line);border-radius:.35rem;background:var(--frost);gap:.85rem;color:inherit;font-family:var(--font-ui);text-decoration:none}.attachment-card__type{color:var(--violet);font-size:.66rem;font-weight:760;letter-spacing:.08em}.note-preview{position:fixed;z-index:80;display:grid;grid-template-rows:auto minmax(0,1fr);inline-size:min(420px,calc(100vw - 24px));max-block-size:min(560px,calc(100vh - 24px));border:1px solid var(--line-strong);border-radius:.55rem;background:var(--surface);box-shadow:0 18px 54px #191c2c33;overflow:hidden;pointer-events:auto}.note-preview__header{padding:.9rem 1rem .85rem;border-block-end:1px solid var(--line)}.note-preview__eyebrow{margin-block-end:.35rem;color:var(--teal);font-size:.62rem;font-weight:700;letter-spacing:.07em;text-transform:uppercase}.note-preview__title{display:block;margin:0;font-family:var(--font-article);font-size:1.05rem;line-height:1.3}.note-preview__title-link{color:inherit;text-decoration-color:transparent;text-decoration-thickness:.08em;text-underline-offset:.18em}.note-preview__title-link:hover{color:var(--violet);text-decoration-color:currentColor}.note-preview__description{margin-block-start:.45rem;color:var(--ink);font-family:var(--font-article);font-size:.76rem;line-height:1.55}.note-preview__body{min-block-size:4rem;max-block-size:min(240px,calc(100vh - 170px));padding:.85rem 1rem 1rem;color:var(--ink);font-family:var(--font-article);font-size:.78rem;line-height:1.58;overflow:auto;overscroll-behavior:contain;scrollbar-width:thin}.note-preview__body:focus-visible{outline:2px solid var(--violet);outline-offset:-3px}.note-preview__body>:first-child{margin-block-start:0}.note-preview__body>:last-child{margin-block-end:0}.note-preview__body p,.note-preview__body ul,.note-preview__body ol,.note-preview__body blockquote,.note-preview__body pre,.note-preview__body table{margin-block:.7rem}.note-preview__body h1,.note-preview__body h2,.note-preview__body h3,.note-preview__body h4,.note-preview__body h5,.note-preview__body h6{margin-block:1rem .4rem;color:var(--ink);font-family:var(--font-article);font-size:.92rem;line-height:1.35}.note-preview__body pre,.note-preview__body table{max-inline-size:100%;overflow:auto}.note-preview__body pre{padding:.65rem;border-radius:.3rem;background:var(--code-surface);font-family:var(--font-ui);font-size:.68rem}.note-preview__body table{border-collapse:collapse;font-family:var(--font-ui)}.note-preview__body th,.note-preview__body td{padding:.35rem .45rem;border:1px solid var(--line);text-align:start}.website-dialog{inline-size:min(680px,calc(100vw - 2rem));max-block-size:min(760px,calc(100vh - 2rem));padding:0;border:1px solid var(--line-strong);border-radius:.55rem;background:var(--surface);color:var(--ink);box-shadow:0 28px 90px #0b0d1857}.website-dialog::backdrop{background:var(--overlay);backdrop-filter:blur(5px)}.website-dialog__sheet{display:grid;max-block-size:inherit;grid-template-rows:auto minmax(0,1fr)}.website-dialog__header{display:flex;align-items:center;justify-content:space-between;padding:.85rem 1rem;border-block-end:1px solid var(--line);gap:1rem}.website-dialog__title{font-size:.7rem;font-weight:720;letter-spacing:.09em;text-transform:uppercase}.website-dialog__close{display:grid;inline-size:2rem;block-size:2rem;border-radius:50%;background:var(--frost);color:var(--ink);cursor:pointer;place-items:center}.website-dialog__body{padding:1rem;overflow:auto}.website-dialog--graph{inline-size:min(1440px,calc(100vw - 3rem));max-block-size:calc(100vh - 3rem)}.website-dialog--graph .website-dialog__sheet{block-size:min(900px,calc(100vh - 3rem))}.website-dialog--graph .website-dialog__body{display:grid;min-block-size:0;padding:.75rem;overflow:hidden}.website-dialog--graph .graph-view{block-size:100%;min-block-size:0}.website-dialog--media{inline-size:min(1200px,calc(100vw - 3rem));max-block-size:calc(100vh - 3rem)}.website-dialog--media .website-dialog__sheet{block-size:min(900px,calc(100vh - 3rem))}.media-dialog__controls{display:flex;align-items:center;min-inline-size:0;gap:.3rem}.media-dialog__controls button{display:grid;flex:none;inline-size:2.5rem;block-size:2.5rem;border:1px solid transparent;border-radius:.3rem;background:var(--frost);color:var(--ink);cursor:pointer;font-family:var(--font-ui);font-size:1rem;place-items:center}.media-dialog__controls button:hover,.media-dialog__controls button:focus-visible{border-color:var(--line-strong);background:var(--surface)}.media-dialog__controls button:disabled{cursor:default;opacity:.45}.media-dialog__controls output{min-inline-size:6.5rem;color:var(--ink);font-family:var(--font-ui);font-size:.7rem;font-weight:650;text-align:center}.media-dialog__body{display:grid;min-block-size:0;padding:0;overflow:hidden}.media-dialog__viewport{min-inline-size:0;min-block-size:0;overflow:auto;overscroll-behavior:contain}.media-dialog__viewport[data-media-pannable]{cursor:grab}.media-dialog__viewport[data-media-panning],.media-dialog__viewport[data-media-panning] *{cursor:grabbing;user-select:none}.media-dialog__canvas{box-sizing:border-box;display:grid;min-block-size:100%;margin-inline:auto;padding:1rem;place-items:center}.media-dialog__canvas>:is(svg,img,picture),.media-dialog__canvas>picture>img{display:block;position:static!important;inset:auto!important;float:none!important;margin:0!important;transform:none!important;min-inline-size:0!important;inline-size:100%!important;max-inline-size:none!important;min-block-size:0!important;block-size:auto!important;max-block-size:none!important}.search-box{display:grid;grid-template-columns:auto minmax(0,1fr) auto;align-items:center;padding:.15rem .8rem;border:1px solid var(--line-strong);border-radius:.38rem;background:var(--frost);gap:.65rem}.search-box input{min-inline-size:0;block-size:3rem;border:0;outline:0;background:transparent;color:var(--ink)}.search-box input:focus-visible{border-radius:0;box-shadow:none}.search-box kbd{color:var(--graphite);font-family:var(--font-mono);font-size:.65rem}.search-navigation{margin:.75rem .1rem 0}.search-navigation__list{display:flex;flex-wrap:wrap;margin:0;padding:0;column-gap:1rem;row-gap:.35rem;list-style:none}.search-navigation a{color:var(--ink);font-size:.72rem;text-decoration:none}.search-navigation a:hover,.search-navigation a:focus-visible,.search-navigation a[aria-current=page]{color:var(--ink);text-decoration:underline;text-underline-offset:.2em}.search-status{min-block-size:1.2rem;margin:.75rem .1rem .35rem;color:var(--graphite);font-size:.7rem}.search-results{display:grid;margin:0;padding:0;gap:.25rem;list-style:none}.search-result__link{display:grid;padding:.7rem .75rem;border:1px solid transparent;border-radius:.32rem;gap:.15rem;text-decoration:none}.search-result__link:hover,.search-result__link:focus-visible{border-color:var(--line);background:var(--frost)}.search-result__link strong{font-family:var(--font-article);font-size:.95rem}.search-result__meta{color:var(--graphite);font-size:.66rem}.mermaid-diagram{position:relative;padding:1rem;padding-inline-end:5.4rem;border:1px solid var(--line);border-radius:.4rem;background:var(--frost);overflow-x:auto}.mermaid-diagram>svg{cursor:zoom-in}.mermaid-diagram>.mermaid-diagram__expand{inset-inline-end:2.85rem}[data-math-rendered]{max-inline-size:100%;overflow-x:auto}[data-math-rendered][data-source-copy]{position:relative}:is([data-math-style=display],[data-math=display],.math-display)[data-source-copy]{display:block;padding-inline-end:2.6rem}:is([data-math-style=inline],[data-math=inline],.math-inline)[data-source-copy]{display:inline-flex;align-items:center;gap:.1rem;overflow:visible;vertical-align:middle}:is([data-math-style=inline],[data-math=inline],.math-inline)>.source-copy__button{position:static;flex:none;inline-size:1.5rem;block-size:1.5rem;background:transparent;box-shadow:none}:is([data-math-style=inline],[data-math=inline],.math-inline)>.source-copy__button:focus-visible{box-shadow:var(--focus-ring)}[data-math-rendered] mjx-container{color:var(--ink)}.local-graph{display:grid;min-inline-size:0;gap:.55rem}.local-graph__header{display:flex;align-items:center;justify-content:space-between;gap:.5rem}.local-graph__actions{display:flex;gap:.15rem}.local-graph__actions button{display:grid;inline-size:1.75rem;block-size:1.75rem;padding:.28rem;border:1px solid transparent;border-radius:.3rem;background:transparent;color:var(--ink);cursor:pointer;place-items:center}.local-graph__actions button:hover,.local-graph__actions button:focus-visible{border-color:var(--line-strong);background:var(--frost);color:var(--ink)}.local-graph__actions svg{inline-size:1rem;block-size:1rem;fill:none;stroke:currentcolor;stroke-linecap:round;stroke-linejoin:round;stroke-width:1.4}.local-graph__actions circle{fill:currentcolor;stroke:none}.graph-view{position:relative;min-inline-size:0}.graph-canvas{block-size:100%;min-block-size:0;border:1px solid var(--line);border-radius:.5rem;background:var(--surface);overflow:hidden;touch-action:none}.graph-view--compact{display:grid;block-size:220px;border:1px solid var(--line);border-radius:.5rem;background:var(--surface);grid-template-rows:minmax(0,1fr) auto;overflow:hidden}.graph-view--compact .graph-canvas{border:0;border-radius:0}.graph-view--expanded,.graph-view--global{block-size:100%;min-block-size:480px}.graph-canvas svg{inline-size:100%;block-size:100%;cursor:grab}.graph-canvas svg:active{cursor:grabbing}.graph-edge{stroke:color-mix(in srgb,var(--graphite) 52%,transparent)}.graph-edge--embed{stroke:var(--teal);stroke-dasharray:4 4}.graph-node{cursor:pointer;outline:none;transition:opacity .14s ease}.graph-node circle{fill:var(--violet-soft);stroke:none}.graph-node:hover circle,.graph-node:focus-visible circle{fill:var(--violet)}.graph-node:focus-visible circle{filter:drop-shadow(0 0 3px var(--violet))}.graph-node--current text{font-weight:720}.graph-node--dimmed,.graph-edge--dimmed{opacity:.14}.graph-node text{fill:var(--ink);font-family:var(--font-ui);font-size:10px;paint-order:stroke;stroke:var(--surface);stroke-width:3px;stroke-linejoin:round}.graph-status{position:absolute;z-index:1;inset-block-end:.35rem;inset-inline-end:.55rem;margin:0;color:var(--graphite);font-size:.58rem;pointer-events:none}.graph-view--compact .graph-status{position:static;min-inline-size:0;padding:.1rem .55rem .35rem;justify-self:end}.graph-view[data-graph-bounded-fallback=true]{display:grid;place-items:center}.graph-view[data-graph-bounded-fallback=true] .graph-status{position:static;max-inline-size:36rem;padding:1rem;font-size:.82rem;line-height:1.55;text-align:center}.local-graph__fallback{margin-block-start:.35rem;border-block-start:1px solid var(--line);padding-block-start:.65rem}.source-actions{display:flex;flex-wrap:wrap;margin-block-start:1.5rem;padding-block-start:.5rem;border-block-start:1px solid var(--line);gap:.45rem}.source-actions a{display:inline-flex;align-items:center;min-block-size:1.75rem;padding:.2rem 0;border:0;color:var(--ink);font-family:var(--font-ui);font-size:.68rem;font-weight:620;text-decoration:none;column-gap:.32rem}.source-actions a:hover{color:var(--ink);text-decoration:underline}.source-actions__icon{inline-size:.84rem;block-size:.84rem;fill:none;stroke:currentColor;stroke-linecap:round;stroke-linejoin:round;stroke-width:1.45}.source-actions .source-actions__repository{inline-size:44px;min-inline-size:44px;block-size:44px;min-block-size:44px;justify-content:center;margin-block:-.35rem;margin-inline-start:auto;padding:0}.source-actions__github-icon{inline-size:.95rem;block-size:.95rem;fill:currentColor}.page-actions{position:relative;z-index:4;float:inline-end;margin-block-end:1rem;margin-inline-start:1rem;color:var(--ink);font-family:var(--font-ui)}.page-actions__split{display:flex;border:1px solid var(--line-strong);border-radius:.55rem;background:color-mix(in srgb,var(--surface) 92%,transparent);box-shadow:0 8px 24px #1817130f}.page-actions button,.page-actions summary,.page-actions a{color:inherit}.page-actions__primary,.page-actions__menu>summary{display:inline-flex;align-items:center;min-block-size:var(--page-action-size);background:transparent;cursor:pointer}.page-actions__primary{justify-content:center;inline-size:var(--page-action-size);padding-inline:0;font-size:.78rem;font-weight:650}.page-actions__primary:disabled,.page-actions__item:disabled{cursor:wait;opacity:.62}.page-actions__icon,.page-actions svg{inline-size:1rem;block-size:1rem;fill:none;stroke:currentColor;stroke-linecap:round;stroke-linejoin:round;stroke-width:1.35}.page-actions__menu{position:relative;border-inline-start:1px solid var(--line)}.page-actions__menu>summary{justify-content:center;inline-size:var(--page-action-menu-size);border-radius:0 .5rem .5rem 0;list-style:none}.page-actions__menu>summary::-webkit-details-marker{display:none}.page-actions__menu>summary svg{inline-size:.85rem;transition:rotate .14s ease}.page-actions__menu[open]>summary svg{rotate:180deg}.page-actions__primary:hover,.page-actions__menu>summary:hover{background:var(--frost)}.page-actions__panel{position:absolute;z-index:20;inset-block-start:calc(100% + .48rem);inset-inline-end:-1px;display:grid;inline-size:min(19rem,calc(100vw - 2rem));padding:.4rem;border:1px solid var(--line-strong);border-radius:.65rem;background:var(--surface);box-shadow:var(--shadow);gap:.15rem}.page-actions__menu:not([open])>.page-actions__panel{display:none}.page-actions__item{display:grid;grid-template-columns:2rem minmax(0,1fr);align-items:center;inline-size:100%;padding:.58rem;border-radius:.42rem;background:transparent;cursor:pointer;text-align:start;text-decoration:none;gap:.65rem}.page-actions__item:hover{background:var(--frost)}.page-actions__item-icon{display:grid;inline-size:2rem;block-size:2rem;border:1px solid var(--line);border-radius:.42rem;color:var(--ink);place-items:center}.page-actions__item strong,.page-actions__item small{display:block}.page-actions__item strong{color:var(--ink);font-size:.84rem;font-weight:650}.page-actions__item small{margin-block-start:.08rem;color:var(--ink);font-size:.72rem;line-height:1.35}.page-actions__error{margin:.25rem .58rem .4rem;padding-block-start:.55rem;border-block-start:1px solid var(--line);color:var(--danger);font-size:.72rem;line-height:1.4}}@layer utilities{.visually-hidden{position:absolute!important;inline-size:1px!important;block-size:1px!important;padding:0!important;border:0!important;margin:-1px!important;clip-path:inset(50%)!important;overflow:hidden!important;white-space:nowrap!important}.no-js [data-search-open],.no-js [data-color-scheme-toggle],.no-js .mobile-toolbar{display:none!important}.no-js .local-graph__actions,.no-js .graph-view,.no-js [data-copy-page],.only-no-js{display:none}.no-js .only-no-js{display:revert}.no-js .site-navigation__list{flex:1 1 auto;flex-wrap:wrap;justify-content:center}}@media(max-width:880px){.back-to-top{bottom:calc(5rem + env(safe-area-inset-bottom,0px))}.translation-fallback{inset-block-end:calc(max(.7rem,env(safe-area-inset-bottom)) + 4rem)}body:has(.back-to-top:not([hidden])) .translation-fallback{inset-inline:auto;left:calc(1rem + env(safe-area-inset-left,0px));right:calc(1rem + env(safe-area-inset-right,0px) + var(--back-to-top-size) + .75rem);max-inline-size:min(32rem,calc(100% - 2rem - env(safe-area-inset-left,0px) - env(safe-area-inset-right,0px) - var(--back-to-top-size) - .75rem))}.site-header__inner{min-block-size:3.6rem;gap:.4rem}.site-actions{gap:.1rem}.site-navigation,.site-actions [data-dialog-open=browse],.site-actions [data-dialog-open=context]{display:none}.no-js .site-navigation{display:flex;max-inline-size:58vw;overflow-x:auto}.mobile-toolbar{position:fixed;z-index:40;inset-block-end:max(.7rem,env(safe-area-inset-bottom));inset-inline-start:50%;translate:-50% 0;display:grid;grid-auto-columns:minmax(0,1fr);grid-auto-flow:column;inline-size:min(360px,calc(100vw - 1.5rem));padding:.35rem;border:1px solid var(--line-strong);border-radius:.65rem;background:color-mix(in srgb,var(--surface) 92%,transparent);box-shadow:0 16px 50px #10121f3d;backdrop-filter:blur(14px)}.mobile-toolbar button{display:grid;min-block-size:2.8rem;border-radius:.35rem;background:transparent;color:var(--ink);cursor:pointer;font-size:.66rem;font-weight:650;place-items:center}.mobile-toolbar button:hover{background:var(--frost);color:var(--ink)}.website-dialog{inline-size:100%;max-inline-size:none;max-block-size:min(82vh,760px);margin:auto 0 0;border-width:1px 0 0;border-radius:.8rem .8rem 0 0}.website-dialog--graph,.website-dialog--media{inline-size:calc(100% - 1rem);max-block-size:calc(100vh - 1rem);margin:auto;border:1px solid var(--line-strong);border-radius:.7rem}.website-dialog--graph .website-dialog__sheet,.website-dialog--media .website-dialog__sheet{block-size:calc(100vh - 1rem);grid-template-rows:auto minmax(0,1fr)}.website-dialog--graph .website-dialog__sheet:before,.website-dialog--media .website-dialog__sheet:before{display:none}.website-dialog--media .website-dialog__header{padding-inline:.65rem;gap:.5rem}.website-dialog--media .website-dialog__title{position:absolute;inline-size:1px;block-size:1px;margin:-1px;padding:0;border:0;clip-path:inset(50%);overflow:hidden;white-space:nowrap}.media-dialog__controls{gap:.15rem}.media-dialog__controls output{min-inline-size:4.75rem}.graph-view--expanded,.graph-view--global{min-block-size:0}.website-dialog__sheet:before{justify-self:center;inline-size:2.8rem;block-size:.22rem;margin-block:.55rem .1rem;border-radius:100vmax;background:var(--line-strong);content:""}.website-dialog__sheet{grid-template-rows:auto auto minmax(0,1fr)}.js .website-dialog [data-dialog-movable]{position:static;display:block;max-block-size:none;margin:0;padding:0;border:0;overflow:visible}.site-footer{margin-block-end:5.5rem}}@media(max-width:520px){.theme-docs :is(.related-articles,.tab-collection) .minimal-post-card--with-image{grid-template-columns:minmax(0,1fr)}.site-actions .site-action{inline-size:2.3rem;block-size:2.3rem}.note-title{font-size:clamp(2.2rem,13vw,3.25rem)}.note-content{font-size:1rem;line-height:1.72}.page-actions{float:none;display:flex;justify-content:flex-end;margin-block-end:1.5rem;margin-inline-start:0}}@media(prefers-reduced-motion:reduce){html{scroll-behavior:auto!important}.graph-node,.page-actions__menu>summary svg,.mermaid-diagram *,.mermaid-diagram *:before,.mermaid-diagram *:after{transition-duration:.01ms!important;animation-duration:.01ms!important;animation-iteration-count:1!important}.translation-fallback{animation-timing-function:steps(1,end)}}@media(forced-colors:active){#main-content:focus-visible,.back-to-top:focus-visible{outline:2px solid ButtonText;outline-offset:3px;box-shadow:none}.note-content img[data-image-expand]:focus-visible{outline-color:ButtonText}.source-copy__button:focus-visible{outline:2px solid ButtonText;outline-offset:2px;box-shadow:none}[data-month-filter-option][aria-current=page]{outline:2px solid Highlight;outline-offset:-2px}}@layer components{.archive-export .website-dialog__sheet{display:flex;flex-direction:column;max-block-size:inherit}.archive-export .website-dialog__sheet:before{align-self:center;flex-shrink:0}.archive-export .website-dialog__header{flex:none}.archive-export .website-dialog__body{min-block-size:0;overflow-y:auto}.archive-export__intro{margin:0 0 1.25rem;color:var(--graphite);font-size:.9rem}.archive-export__fields,.archive-export__facets fieldset{min-inline-size:0;border:0;padding:0;margin:0}.archive-export__dates{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:1rem}.archive-export__dates label{display:grid;gap:.5rem;font-size:.85rem;font-weight:600}.archive-export__dates input{min-inline-size:0;inline-size:100%;padding:.65rem;border:1px solid var(--line);border-radius:.3rem;background:var(--surface);color:var(--ink);font:inherit;font-variant-numeric:tabular-nums}.archive-export__hint{font-size:.75rem;color:var(--graphite);margin:.65rem 0 1.4rem}.archive-export__facets{display:grid;gap:1.25rem}.archive-export__facets legend{margin-block-end:.65rem;font-size:.85rem;font-weight:600}.archive-export__choices{display:flex;flex-wrap:wrap;align-items:center;gap:.5rem}.archive-export__choice{position:relative;display:inline-flex;align-items:center;cursor:pointer}.archive-export__choice input{position:absolute;opacity:0;inline-size:1px;block-size:1px}.archive-export__choice span{padding:.4rem .65rem;border:1px solid var(--line);border-radius:.3rem;font-size:.78rem}.archive-export__choice input:checked+span,.archive-export__choices [aria-pressed=true]{border-color:var(--teal);color:var(--ink);background:color-mix(in srgb,var(--teal) 12%,transparent)}.archive-export__choice input:focus-visible+span{outline:2px solid var(--teal);outline-offset:2px}.archive-export__fields:disabled{opacity:.6}.archive-export__footer{flex:none;padding:1rem 1.4rem;border-block-start:1px solid var(--line);display:grid;gap:.75rem}.archive-export__footer p{margin:0;font-size:.85rem;font-variant-numeric:tabular-nums}.archive-export__footer progress{inline-size:100%;accent-color:var(--teal)}.archive-export__actions{display:flex;flex-wrap:wrap;justify-content:flex-end;gap:.6rem}.archive-export__actions button{cursor:pointer;border:1px solid var(--line);border-radius:.3rem;padding:.6rem .9rem;font-size:.85rem}.archive-export__actions [data-export-download]{background:var(--ink);color:var(--surface);border-color:var(--ink)}.archive-export__actions button:disabled{opacity:.4;cursor:default}@media(max-width:420px){.archive-export__dates{grid-template-columns:1fr;gap:.75rem}}}@media print{:root{color-scheme:light;--frost: #ffffff;--surface: #ffffff;--ink: #111111;--graphite: #4a4a4a;--line: #d0d0d0}.site-header,.minimal-docs-sidebar,.minimal-context,.mobile-toolbar,.back-to-top,.site-footer,.source-actions,.page-actions,.source-copy__button,.website-comments,.website-dialog,.website-external-pdf__viewport,.website-external-frame__viewport,.website-tweet__mount{display:none!important}.translation-fallback{position:static;max-inline-size:none;margin-block-end:1.5rem;box-shadow:none;animation:none}.minimal-shell,.minimal-shell--docs,.minimal-shell--docs:has(>.minimal-context){display:block;inline-size:auto;padding:0}.note-content a{color:inherit}.code-block-copy>pre{padding-inline-end:1.35rem}.mermaid-diagram{padding-inline-end:1rem}:is([data-math-style=display],[data-math=display],.math-display)[data-source-copy]{padding-inline-end:0}:is([data-math-style=inline],[data-math=inline],.math-inline)[data-source-copy]{display:inline;vertical-align:baseline}}@layer tokens{.theme-docs{--violet: #236f86;--teal: #a64f2d;--violet-soft: #e8e8e3;--teal-soft: #f3e4da;--focus-ring: 0 0 0 3px rgb(35 111 134 / 25%);--article-width: 760px;--reading-width: 632px;--rail-width: 220px}:root[data-color-scheme=dark] .theme-docs{--violet: #78b7ff;--teal: #e59a73;--violet-soft: #1d2a38;--teal-soft: #3b2922;--focus-ring: 0 0 0 3px rgb(120 183 255 / 28%)}@media(prefers-color-scheme:dark){:root:not([data-color-scheme=light]) .theme-docs{--violet: #78b7ff;--teal: #e59a73;--violet-soft: #1d2a38;--teal-soft: #3b2922;--focus-ring: 0 0 0 3px rgb(120 183 255 / 28%)}}}@layer composition{.theme-docs .site-header{position:sticky;inset-block-start:0;background:color-mix(in srgb,var(--surface) 94%,transparent);backdrop-filter:blur(12px)}.theme-docs .site-header__inner,.theme-docs .site-footer__inner{inline-size:min(100%,1640px)}.theme-docs .site-mark__glyph{color:var(--teal);font-family:var(--font-ui);font-style:normal}.docs-shell{display:grid;grid-template-columns:244px minmax(0,1fr) var(--rail-width);justify-content:center;inline-size:min(100%,1640px);min-block-size:72vh;margin-inline:auto;padding:2rem var(--page-gutter) 7rem;gap:clamp(1.5rem,3vw,3.25rem)}.docs-sidebar,.docs-context{position:sticky;inset-block-start:6.4rem;align-self:start;max-block-size:calc(100vh - 8rem);overflow:auto;scrollbar-width:thin}.docs-sidebar{position:sticky;padding:.4rem 0 1.5rem}.docs-sidebar:before{content:none}.docs-main{min-inline-size:0}.docs-article{padding:clamp(2rem,5vw,4rem);border:0;background:transparent}.docs-context{padding-block-start:.75rem}}@layer content{.theme-docs .note-title{max-inline-size:20ch;font-family:var(--font-ui);font-size:clamp(2rem,4vw,3.1rem);font-weight:650;letter-spacing:-.025em;line-height:1.08}.theme-docs .note-description,.theme-docs .note-subtitle,.theme-docs .note-content{font-family:var(--font-ui)}.theme-docs .note-content{font-size:clamp(1rem,1.2vw,1.08rem);line-height:1.7}.docs-article>.page-actions{margin-inline-end:max(0px,calc((100% - var(--reading-width)) / 2))}.theme-docs .note-content h1,.theme-docs .note-content h2,.theme-docs .note-content h3,.theme-docs .note-content h4{font-family:var(--font-ui)}.theme-docs .note-content h2{padding-block-start:0;border-block-start:0;font-size:clamp(1.5rem,2.5vw,1.9rem);font-weight:650;letter-spacing:-.015em}.theme-docs .note-content h2:before{content:none}.theme-docs .note-header{margin-block-end:2.5rem;padding-block-end:0;border-block-end:0}.theme-docs .note-description,.theme-docs .note-subtitle{margin-block-start:0;font-style:normal}.theme-docs .note-meta{margin-block-start:1rem}}@layer components{.docs-tree__list{display:grid;margin:0;padding:0;gap:.2rem;list-style:none}.docs-tree__list .docs-tree__list{margin:.2rem 0 .45rem .72rem;padding-inline-start:.65rem;border-inline-start:1px solid var(--line)}.docs-tree__item>a,.docs-tree__item>span{display:block;padding:.38rem .55rem;border-radius:.22rem;color:var(--ink);font-size:.76rem;line-height:1.35;text-decoration:none}.docs-tree__item>a:hover,.docs-tree__item>a[aria-current=page]{background:var(--violet-soft);color:var(--ink)}.docs-tree__item>a[aria-current=page]{font-weight:700}.theme-docs .sequence-navigation{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));margin-block-start:1rem;border:1px solid var(--line);background:var(--surface)}.theme-docs .sequence-navigation a{display:grid;min-block-size:5.2rem;align-content:center;padding:.9rem 1.1rem;gap:.22rem;text-decoration:none}.theme-docs .sequence-navigation a+a{border-inline-start:1px solid var(--line);text-align:end}.theme-docs .sequence-navigation span{color:var(--teal);font-size:.62rem;font-weight:720;letter-spacing:.09em;text-transform:uppercase}.theme-docs .sequence-navigation strong{color:var(--ink);font-size:.82rem}}@media(max-width:1100px){.docs-shell{grid-template-columns:220px minmax(0,var(--article-width))}.docs-context{position:static;grid-column:2;display:grid;max-block-size:none;padding-block-start:1.5rem;border-block-start:1px solid var(--line);overflow:visible}}@media(max-width:880px){.docs-shell{display:block;padding:1rem 0 6rem}.docs-sidebar,.docs-context{display:none}.docs-article{padding:2.2rem max(1.25rem,5vw) 4rem;border-inline:0}.no-js .docs-sidebar,.no-js .docs-context{position:static;display:block;max-block-size:none;margin:1rem max(1.25rem,5vw);overflow:visible}}
@@ -1 +1 @@
1
- import{b as y}from"./chunks/chunk-MGH5TWGB.js";import"./chunks/chunk-PHKIAKHS.js";var S="website:docs-page-change",m=Symbol.for("jekyll-obsidian.docs-navigation-controller"),E="[data-page-head]",L="meta[data-page-csp]";function h(e,t){return e.origin===t.origin&&e.pathname===t.pathname&&e.search===t.search}function b(e){for(let n of document.querySelectorAll("[data-docs-navigation]"))for(let o of n.querySelectorAll("a[href]")){let r=new URL(o.href,e);h(r,e)?o.setAttribute("aria-current","page"):o.removeAttribute("aria-current")}let t=document.querySelector("[data-docs-navigation]");t&&(t.dataset.docsNavigationReady="true")}function p(e){if(!e.hash){window.scrollTo({top:0,left:0,behavior:"instant"});return}let t;try{t=decodeURIComponent(e.hash.slice(1))}catch{return}document.getElementById(t)?.scrollIntoView({block:"start",behavior:"instant"})}function T(e){if(e.defaultPrevented||e.button!==0||e.metaKey||e.ctrlKey||e.shiftKey||e.altKey)return null;let t=e.target;if(!(t instanceof Element))return null;let n=t.closest(".docs-sidebar a[href], .minimal-docs-sidebar a[href], .docs-tree--dialog a[href]");if(!n||n.target||n.hasAttribute("download"))return null;let o=new URL(n.href,window.location.href);if(o.origin!==window.location.origin||!/^https?:$/.test(o.protocol))return null;let r=new URL(window.location.href);return h(o,r)&&o.hash?null:n}function f(e){return document.importNode(e,!0)}function g(e,t,n){let o=document.querySelector(e),r=t.querySelector(e);if(o&&r){let a=f(r);return o.replaceWith(a),a}if(o&&o.remove(),r&&n){let a=f(r);return n.after(a),a}return null}function q(e){let t=[...document.head.querySelectorAll(E)],n=[...e.head.querySelectorAll(E)].map(r=>f(r)),o=document.head.querySelector('meta[name="color-scheme"]');t.forEach(r=>r.remove()),o?.parentNode?o.after(...n):document.head.append(...n)}function A(e){let t=document.querySelector("[data-language-switcher]"),n=e.querySelector("[data-language-switcher]");if(!t||!n)return;let o=t.querySelector("summary"),r=n.querySelector("summary"),a=t.querySelector(".language-switcher__panel"),s=n.querySelector(".language-switcher__panel");o&&r&&o.setAttribute("aria-label",r.getAttribute("aria-label")||"Language"),a&&s&&a.replaceChildren(...[...s.childNodes].map(u=>document.importNode(u,!0)))}function M(e){let t=document.head.querySelector(L)?.content,n=e.head.querySelector(L)?.content;return!!(t&&t===n)}function D(e,t,n){if(!M(e))throw new TypeError("Destination requires a different Content Security Policy");let o=document.querySelector("[data-docs-main]"),r=e.querySelector("[data-docs-main]"),a=[...document.body.classList].find(u=>u.startsWith("theme-"));if(!o||!r||!a||!e.body.classList.contains(a))throw new TypeError("Destination is not a documentation page in the current theme");for(let u of["browse","context","graph-global","graph-local","media"])y(u);q(e),A(e),document.documentElement.lang=e.documentElement.lang,document.documentElement.dir=e.documentElement.dir;let s=f(r);o.replaceWith(s),g("[data-page-context]",e,s),g(".mobile-toolbar",e),g("[data-page-dialogs]",e),n&&history.pushState({websiteDocs:!0},"",t),b(t),p(t),document.dispatchEvent(new CustomEvent(S,{detail:{url:t.href}}))}function C(){let e=document;if(e[m]?.(),!document.querySelector("[data-docs-navigation]"))return;let n=null,o=0,r=new URL(window.location.href),a=async(i,d)=>{let l=++o;n?.abort(),n=new AbortController,document.querySelector("[data-docs-main]")?.setAttribute("aria-busy","true");try{let c=await fetch(i,{credentials:"same-origin",headers:{Accept:"text/html"},signal:n.signal});if(!c.ok||!c.headers.get("content-type")?.includes("text/html"))throw new Error(`Documentation page returned HTTP ${c.status}`);let v=new DOMParser().parseFromString(await c.text(),"text/html");if(l!==o)return;D(v,i,d),r=new URL(i.href)}catch(c){if(c instanceof DOMException&&c.name==="AbortError")return;window.location.assign(i.href)}finally{l===o&&(n=null,document.querySelector("[data-docs-main]")?.removeAttribute("aria-busy"))}},s=i=>{let d=T(i);if(!d)return;i.preventDefault();let l=new URL(d.href,window.location.href),c=new URL(window.location.href);if(h(l,c)){l.href!==c.href&&history.pushState({websiteDocs:!0},"",l),r=new URL(l.href),p(l);return}a(l,!0)},u=()=>{let i=new URL(window.location.href);if(h(i,r)){p(i);return}a(i,!1)},w=()=>{n?.abort(),document.removeEventListener("click",s),window.removeEventListener("popstate",u),e[m]===w&&delete e[m]};b(new URL(window.location.href)),document.addEventListener("click",s),window.addEventListener("popstate",u),e[m]=w}export{S as DOCS_PAGE_CHANGE_EVENT,C as initialiseDocsNavigation,M as sameContentSecurityPolicy};
1
+ import{b as y}from"./chunks/chunk-MGH5TWGB.js";import"./chunks/chunk-PHKIAKHS.js";var S="website:docs-page-change",m=Symbol.for("jekyll-obsidian.docs-navigation-controller"),E="[data-page-head]",L="meta[data-page-csp]";function f(e,t){return e.origin===t.origin&&e.pathname===t.pathname&&e.search===t.search}function b(e){for(let n of document.querySelectorAll("[data-docs-navigation]"))for(let o of n.querySelectorAll("a[href]")){let r=new URL(o.href,e);f(r,e)?o.setAttribute("aria-current","page"):o.removeAttribute("aria-current")}let t=document.querySelector("[data-docs-navigation]");t&&(t.dataset.docsNavigationReady="true")}function p(e){if(!e.hash){window.scrollTo({top:0,left:0,behavior:"instant"});return}let t;try{t=decodeURIComponent(e.hash.slice(1))}catch{return}document.getElementById(t)?.scrollIntoView({block:"start",behavior:"instant"})}function T(e){if(e.defaultPrevented||e.button!==0||e.metaKey||e.ctrlKey||e.shiftKey||e.altKey)return null;let t=e.target;if(!(t instanceof Element))return null;let n=t.closest(".docs-sidebar a[href], .minimal-docs-sidebar a[href], .docs-tree--dialog a[href]");if(!n||n.target||n.hasAttribute("download"))return null;let o=new URL(n.href,window.location.href);if(o.origin!==window.location.origin||!/^https?:$/.test(o.protocol))return null;let r=new URL(window.location.href);return f(o,r)&&o.hash?null:n}function g(e){return document.importNode(e,!0)}function h(e,t,n){let o=document.querySelector(e),r=t.querySelector(e);if(o&&r){let a=g(r);return o.replaceWith(a),a}if(o&&o.remove(),r&&n){let a=g(r);return n.after(a),a}return null}function q(e){let t=[...document.head.querySelectorAll(E)],n=[...e.head.querySelectorAll(E)].map(r=>g(r)),o=document.head.querySelector('meta[name="color-scheme"]');t.forEach(r=>r.remove()),o?.parentNode?o.after(...n):document.head.append(...n)}function A(e){let t=document.querySelector("[data-language-switcher]"),n=e.querySelector("[data-language-switcher]");if(!t||!n)return;let o=t.querySelector("summary"),r=n.querySelector("summary"),a=t.querySelector(".language-switcher__panel"),s=n.querySelector(".language-switcher__panel");o&&r&&o.setAttribute("aria-label",r.getAttribute("aria-label")||"Language"),a&&s&&a.replaceChildren(...[...s.childNodes].map(u=>document.importNode(u,!0)))}function M(e){let t=document.head.querySelector(L)?.content,n=e.head.querySelector(L)?.content;return!!(t&&t===n)}function D(e,t,n){if(!M(e))throw new TypeError("Destination requires a different Content Security Policy");let o=document.querySelector("[data-docs-main]"),r=e.querySelector("[data-docs-main]"),a=[...document.body.classList].find(u=>u.startsWith("theme-"));if(!o||!r||!a||!e.body.classList.contains(a))throw new TypeError("Destination is not a documentation page in the current theme");for(let u of["browse","context","graph-global","graph-local","media"])y(u);q(e),A(e),document.documentElement.lang=e.documentElement.lang,document.documentElement.dir=e.documentElement.dir;let s=g(r);o.replaceWith(s),h("[data-page-context]",e,s),h(".mobile-toolbar",e),h("[data-back-to-top]",e),h("[data-page-dialogs]",e),n&&history.pushState({websiteDocs:!0},"",t),b(t),p(t),document.dispatchEvent(new CustomEvent(S,{detail:{url:t.href}}))}function C(){let e=document;if(e[m]?.(),!document.querySelector("[data-docs-navigation]"))return;let n=null,o=0,r=new URL(window.location.href),a=async(i,d)=>{let l=++o;n?.abort(),n=new AbortController,document.querySelector("[data-docs-main]")?.setAttribute("aria-busy","true");try{let c=await fetch(i,{credentials:"same-origin",headers:{Accept:"text/html"},signal:n.signal});if(!c.ok||!c.headers.get("content-type")?.includes("text/html"))throw new Error(`Documentation page returned HTTP ${c.status}`);let v=new DOMParser().parseFromString(await c.text(),"text/html");if(l!==o)return;D(v,i,d),r=new URL(i.href)}catch(c){if(c instanceof DOMException&&c.name==="AbortError")return;window.location.assign(i.href)}finally{l===o&&(n=null,document.querySelector("[data-docs-main]")?.removeAttribute("aria-busy"))}},s=i=>{let d=T(i);if(!d)return;i.preventDefault();let l=new URL(d.href,window.location.href),c=new URL(window.location.href);if(f(l,c)){l.href!==c.href&&history.pushState({websiteDocs:!0},"",l),r=new URL(l.href),p(l);return}a(l,!0)},u=()=>{let i=new URL(window.location.href);if(f(i,r)){p(i);return}a(i,!1)},w=()=>{n?.abort(),document.removeEventListener("click",s),window.removeEventListener("popstate",u),e[m]===w&&delete e[m]};b(new URL(window.location.href)),document.addEventListener("click",s),window.addEventListener("popstate",u),e[m]=w}export{S as DOCS_PAGE_CHANGE_EVENT,C as initialiseDocsNavigation,M as sameContentSecurityPolicy};