@toheeb/base 2.0.1 → 3.0.0-alpha.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.
- package/README.md +81 -2
- package/dist/base.css +2 -0
- package/dist/base.js +117 -0
- package/dist/base.js.map +1 -0
- package/dist/base.umd.cjs +2 -0
- package/dist/base.umd.cjs.map +1 -0
- package/package.json +24 -7
- package/src/components/enclosure.js +76 -0
- package/src/components/tabs.js +76 -0
- package/{base.css → src/index.css} +275 -184
- package/src/index.js +32 -0
- package/src/utils/match-container.js +76 -0
- package/src/utils.js +2 -0
- package/vite.config.js +34 -0
- package/base-settings.js +0 -472
package/README.md
CHANGED
|
@@ -1,4 +1,83 @@
|
|
|
1
|
+
# Base
|
|
1
2
|
|
|
2
|
-
|
|
3
|
+
Base provides you with the following two files with many benefits.
|
|
4
|
+
|
|
5
|
+
## A classless stylesheet.
|
|
6
|
+
|
|
7
|
+
```html
|
|
8
|
+
<link rel="stylesheet" href="https://unpkg.com/@toheeb/base@3.0.0-alpha.0/base.css">
|
|
9
|
+
```
|
|
10
|
+
You can use this sheet as-is, and get a readable page your users can personalize.
|
|
11
|
+
|
|
12
|
+
You can also turn it to a reset stylesheet to power custom styles.
|
|
13
|
+
|
|
14
|
+
```css
|
|
15
|
+
:root {
|
|
16
|
+
|
|
17
|
+
/* remove line heights */
|
|
18
|
+
--line-lead: 0;
|
|
19
|
+
|
|
20
|
+
/* remove paragraph pads */
|
|
21
|
+
--lh-pad: 0;
|
|
22
|
+
|
|
23
|
+
/* remove lines */
|
|
24
|
+
--border-width: 0;
|
|
25
|
+
|
|
26
|
+
/* remove markers */
|
|
27
|
+
--content: none;
|
|
28
|
+
}
|
|
29
|
+
```
|
|
30
|
+
|
|
31
|
+
## A Content Script
|
|
32
|
+
|
|
33
|
+
This script helps you create richer content out-of-the box. Currently, you can do tabs, and enclosures.
|
|
34
|
+
|
|
35
|
+
Besides, it comes with utility methods like `matchContainer`. A method simulating matchMedia for containers. You'll need this because, per True Web Design, for fully-responsive designs, media queries can't help, but container query can.
|
|
36
|
+
|
|
37
|
+
In legacy browsers, you can load it as shown below.
|
|
38
|
+
|
|
39
|
+
```html
|
|
40
|
+
<head>
|
|
41
|
+
<script src="https://unpkg.com/@toheeb/base@3.0.0-alpha.0/dist/base.umd.js"></script>
|
|
42
|
+
|
|
43
|
+
<script>
|
|
44
|
+
|
|
45
|
+
// Initialize rich content methods
|
|
46
|
+
window.base.init_all();
|
|
47
|
+
|
|
48
|
+
// Use an utility (matchMedia)
|
|
49
|
+
window.base.utils.matchMedia(...);
|
|
50
|
+
|
|
51
|
+
</script>
|
|
52
|
+
</head>
|
|
53
|
+
```
|
|
54
|
+
|
|
55
|
+
In modern browsers, you can use the import syntax like below
|
|
56
|
+
|
|
57
|
+
```html
|
|
58
|
+
<head>
|
|
59
|
+
<script type='module'>
|
|
60
|
+
import { base } from 'https://unpkg.com/@toheeb/base@3.0.0-alpha.0/dist/base.js';
|
|
61
|
+
|
|
62
|
+
// Initialize rich content methods
|
|
63
|
+
base.init_all();
|
|
64
|
+
|
|
65
|
+
// Use an utility (matchMedia)
|
|
66
|
+
base.utils.matchMedia(...);
|
|
67
|
+
</script>
|
|
68
|
+
|
|
69
|
+
</head>
|
|
70
|
+
```
|
|
71
|
+
|
|
72
|
+
In Node.js, can do below
|
|
73
|
+
|
|
74
|
+
```js
|
|
75
|
+
import {base} from '@toheeb/base';
|
|
76
|
+
|
|
77
|
+
// Initialize rich content methods
|
|
78
|
+
base.init_all();
|
|
79
|
+
|
|
80
|
+
// Use an utility (matchMedia)
|
|
81
|
+
base.utils.matchMedia(...)
|
|
82
|
+
```
|
|
3
83
|
|
|
4
|
-
Visit www.toheeb.com/en/base-css/ for demonstration, installation, idea, and code.
|
package/dist/base.css
ADDED
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
html{--line-height:1.7;--content:initial;--line-length:36rem;--line-lead:calc((1lh - 1ex) * .5);--font-scale:1.2;--color-hue:120;--lh-pad:.25em;--border-width:1;--background-color:light-dark(oklch(.99 .0046 var(--color-hue)),oklch(.2 .02 var(--color-hue)));--foreground-color:light-dark(oklch(.2 .0246 var(--color-hue)),oklch(.8 .0046 var(--color-hue)));--border-color:light-dark(color-mix(in srgb, currentColor 10%, transparent 100%),color-mix(in srgb, currentColor 20%, transparent 100%));-webkit-text-size-adjust:100%;font-family:system-ui,sans-serif;font-size:1rem}*{box-sizing:border-box;color:inherit;font:inherit;margin:0;padding:0}hgroup>p:has(~:where(h1,h2,h3,h4,h5,h6)){font-size:calc(pow(var(--font-scale), -1) * 1em)}p,pre,dt,th,legend,summary,html{font-size:calc(pow(var(--font-scale), 0) * 1em)}hgroup>:where(h1,h2,h3,h4,h5,h6)~p{font-size:calc(pow(var(--font-scale), 1) * 1em)}h6{font-size:calc(pow(var(--font-scale), 2) * 1em)}h5{font-size:calc(pow(var(--font-scale), 3) * 1em)}h4{font-size:calc(pow(var(--font-scale), 4) * 1em)}h3{font-size:calc(pow(var(--font-scale), 5) * 1em)}h2{font-size:calc(pow(var(--font-scale), 6) * 1em)}h1{font-size:calc(pow(var(--font-scale), 7) * 1em)}body{min-height:100svh}h1{line-height:calc(1 + ((var(--line-height) - 1) / pow(var(--font-scale), 7)))}h2{line-height:calc(1 + ((var(--line-height) - 1) / pow(var(--font-scale), 6)))}h3{line-height:calc(1 + ((var(--line-height) - 1) / pow(var(--font-scale), 5)))}h4{line-height:calc(1 + ((var(--line-height) - 1) / pow(var(--font-scale), 4)))}h5{line-height:calc(1 + ((var(--line-height) - 1) / pow(var(--font-scale), 3)))}h6{line-height:calc(1 + ((var(--line-height) - 1) / pow(var(--font-scale), 2)))}hgroup>:where(h1,h2,h3,h4,h5,h6)~p{line-height:calc(1 + ((var(--line-height) - 1) / pow(var(--font-scale), 1)))}p,pre,dt,th,legend,summary,html{line-height:calc(1 + ((var(--line-height) - 1) / pow(var(--font-scale), 0)))}hgroup>p:has(~:where(h1,h2,h3,h4,h5,h6)){line-height:calc(1 + ((var(--line-height) - 1) / pow(var(--font-scale), -1)))}p,pre,span:where(:has(>[data-display=block]:only-child)){margin-block:var(--line-lead)}span:where(:first-child:has(>[data-display=block]:only-child)){margin-block-start:calc(2 * var(--line-lead))}span:where(:last-child:has(>[data-display=block]:only-child)){margin-block-end:calc(var(--line-lead) - var(--lh-pad))}:where(section,article):has(>hgroup>h6){padding-block-start:calc(2 * var(--line-lead))}:where(section,article):has(>hgroup>h5){padding-block-start:calc(3 * var(--line-lead))}:where(section,article):has(>hgroup>h4){padding-block-start:calc(4 * var(--line-lead))}:where(section,article):has(>hgroup>h3){padding-block-start:calc(5 * var(--line-lead))}:where(section,article):has(>hgroup>h2){padding-block-start:calc(6 * var(--line-lead))}:where(section,article):has(>hgroup>h1){padding-block-start:calc(7 * var(--line-lead))}main~*,main{width:100%;max-width:calc(1.5 * var(--line-length));border-inline:calc(var(--border-width) * 1px) solid var(--border-color);margin-inline:auto}:has(~main){width:100%;max-width:calc(1.5 * var(--line-length));border-inline:calc(var(--border-width) * 1px) solid var(--border-color);margin-inline:auto}section:has(>hgroup)>:not(:where(section:has(>hgroup),hgroup)){width:100%;max-width:calc((6 * var(--line-lead)) + var(--line-length));margin-inline:auto}p,pre,th,ol,ul,dl,menu,hgroup,figure,figure,address,details,fieldset,blockquote{width:100%;max-width:var(--line-length);margin-inline:auto}a:has(:where(p,pre)){width:100%;max-width:var(--line-length);margin-inline:auto}del:has(:where(p,pre)){width:100%;max-width:var(--line-length);margin-inline:auto}ins:has(:where(p,pre)){width:100%;max-width:var(--line-length);margin-inline:auto}map:has(:where(p,pre)){width:100%;max-width:var(--line-length);margin-inline:auto}object:has(:where(p,pre,h1,h2,h3,h4,h5,h6,summary,legend,dt,th))>div:only-child{width:100%;max-width:var(--line-length);margin-inline:auto}hr{width:100%;max-width:calc(.25 * var(--line-length));margin-inline:auto}td,th,caption,main~*,main{padding-inline:calc(3ch * var(--border-width) / var(--border-width))}:has(~main){padding-inline:calc(3ch * var(--border-width) / var(--border-width))}body,dialog{background-color:var(--background-color);color:var(--foreground-color)}p,pre,summary,legend,dt,th,h1,h2,h3,h4,h5,h6{padding-block-end:var(--lh-pad)}h1,h2,h3,h4,h5,h6,summary,legend,dt,th{text-wrap:balance;font-weight:700}hgroup p:has(~:where(h1,h2,h3,h4,h5,h6)){width:auto;margin:0 calc(3ch * var(--border-width) / var(--border-width)) 0 0;display:inline-block}main{counter-reset:h1}:where(main>section):has(h1){counter-reset:h2}:where(main>section:has(h1)):before{content:var(--content,counter(h1, decimal-leading-zero) "." / "");counter-increment:h1;background-color:var(--background-color);display:block}main>section>:where(section,article):has(>hgroup>h2){counter-reset:h3}:where(main>section>:where(section,article):has(>hgroup>h2)):before{content:var(--content,counter(h2, decimal-leading-zero) "." / "");counter-increment:h2;background-image:linear-gradient(90deg,currentColor 0 2ch,#0000 2ch 3ch);background-position:0 90%;background-size:3ch 1px;padding-inline-start:3ch}main>section>:where(section,article)>:where(section,article):has(>hgroup>h3){counter-reset:h4}:where(main>section>:where(section,article)>:where(section,article):has(>hgroup>h3)):before{content:var(--content,counter(h3, decimal-leading-zero) "." / "");counter-increment:h3;box-sizing:border-box;background-image:linear-gradient(90deg,currentColor 0 2ch,#0000 2ch 3ch),linear-gradient(90deg,currentColor 0 2ch,#0000 2ch 3ch);background-position:0 90%,3ch 90%;background-size:3ch 1px,3ch 1px;padding-inline-start:6ch}main>section>:where(section,article)>:where(section,article)>:where(section,article):has(>hgroup>h4){counter-reset:h5}:where(main>section>:where(section,article)>:where(section,article)>:where(section,article):has(>hgroup>h4)):before{content:var(--content,counter(h4, decimal-leading-zero) "." / "");counter-increment:h4;background-image:linear-gradient(90deg,currentColor 0 2ch,#0000 2ch 3ch),linear-gradient(90deg,currentColor 0 2ch,#0000 2ch 3ch),linear-gradient(90deg,currentColor 0 2ch,#0000 2ch 3ch);background-position:0 90%,3ch 90%,6ch 90%;background-size:3ch 1px,3ch 1px,3ch 1px;padding-inline-start:9ch}main>section>:where(section,article)>:where(section,article)>:where(section,article)>:where(section,article):has(>hgroup>h5){counter-reset:h6}:where(main>section>:where(section,article)>:where(section,article)>:where(section,article)>:where(section,article):has(>hgroup>h5)):before{content:var(--content,counter(h5, decimal-leading-zero) "." / "");counter-increment:h5;background-image:linear-gradient(90deg,currentColor 0 2ch,#0000 2ch 3ch),linear-gradient(90deg,currentColor 0 2ch,#0000 2ch 3ch),linear-gradient(90deg,currentColor 0 2ch,#0000 2ch 3ch),linear-gradient(90deg,currentColor 0 2ch,#0000 2ch 3ch);background-position:0 90%,3ch 90%,6ch 90%,9ch 90%;background-size:3ch 1px,3ch 1px,3ch 1px,3ch 1px;padding-inline-start:12ch}main>section>:where(section,article)>:where(section,article)>:where(section,article)>:where(section,article)>:where(section,article):has(>hgroup>h6){counter-reset:h7}:where(main>section>:where(section,article)>:where(section,article)>:where(section,article)>:where(section,article)>:where(section,article):has(>hgroup>h6)):before{content:var(--content,counter(h6, decimal-leading-zero) "." / "");counter-increment:h6;background-image:linear-gradient(90deg,currentColor 0 2ch,#0000 2ch 3ch),linear-gradient(90deg,currentColor 0 2ch,#0000 2ch 3ch),linear-gradient(90deg,currentColor 0 2ch,#0000 2ch 3ch),linear-gradient(90deg,currentColor 0 2ch,#0000 2ch 3ch),linear-gradient(90deg,currentColor 0 2ch,#0000 2ch 3ch);background-position:0 90%,3ch 90%,6ch 90%,9ch 90%,12ch 90%;background-size:3ch 1px,3ch 1px,3ch 1px,3ch 1px,3ch 1px;padding-inline-start:15ch}:where(section,article):before{z-index:1;background-repeat:no-repeat;font-family:monospace;font-size:.7em;display:block;position:sticky;top:0}*{scroll-margin-top:1lh}article:before{font-weight:700}legend{margin-inline:-.5ch 0;padding-inline:.5ch}summary{cursor:pointer}pre{font-family:monospace;overflow-x:auto}hr{border-block-end:calc(var(--border-width) * 2px);height:0;margin-block:calc(2 * var(--line-lead))}main~*,main{border-block-start:calc(1px * var(--border-width)) solid var(--border-color);padding-block:calc(1 * var(--line-lead) * var(--border-width) / var(--border-width))}:where(section,article):has(>hgroup)>*{border-block-start:calc(1px * var(--border-width)) solid var(--border-color);padding-block:calc(1 * var(--line-lead) * var(--border-width) / var(--border-width))}:has(~main){border-block-start:calc(1px * var(--border-width)) solid var(--border-color);padding-block:calc(1 * var(--line-lead) * var(--border-width) / var(--border-width))}:where(section,article):has(>hgroup){padding-block:0}:where(:has(~hgroup),hgroup,hgroup~*):first-child{border-block-start:none}main:not(:has(~*)){border-block-start:none}:not(main):has(~main):not(*+*){border-block-start:none}:where(nav,form,main,aside,header,footer,search,article,figure,address,blockquote,a:has(:where(p,pre))[href],del:has(:where(p,pre)),ins:has(:where(p,pre)),map:has(:where(p,pre))):before{content:var(--content,"");background-color:currentColor;width:1em;height:1em;margin-top:-1em;font-size:.7em;display:block;position:sticky;top:2.5em;transform:translate(-2em,.5em);-webkit-mask-size:cover;mask-size:cover;-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat}:where(:has(~main),main,main~*):before{top:1em}:where(:first-child:has(~main)):before{top:0}main:before{-webkit-mask-image:url(data:image/svg+xml,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%2224%22%20height%3D%2224%22%20viewBox%3D%220%200%2024%2024%22%20fill%3D%22none%22%20stroke%3D%22currentColor%22%20stroke-width%3D%221.5%22%20stroke-linecap%3D%22round%22%20stroke-linejoin%3D%22round%22%20class%3D%22icon%20icon-tabler%20icons-tabler-outline%20icon-tabler-square%22%3E%3Cpath%20stroke%3D%22none%22%20d%3D%22M0%200h24v24H0z%22%20fill%3D%22none%22%2F%3E%3Cpath%20d%3D%22M3%203m0%202a2%202%200%200%201%202%20-2h14a2%202%200%200%201%202%202v14a2%202%200%200%201%20-2%202h-14a2%202%200%200%201%20-2%20-2z%22%20%2F%3E%3C%2Fsvg%3E);mask-image:url(data:image/svg+xml,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%2224%22%20height%3D%2224%22%20viewBox%3D%220%200%2024%2024%22%20fill%3D%22none%22%20stroke%3D%22currentColor%22%20stroke-width%3D%221.5%22%20stroke-linecap%3D%22round%22%20stroke-linejoin%3D%22round%22%20class%3D%22icon%20icon-tabler%20icons-tabler-outline%20icon-tabler-square%22%3E%3Cpath%20stroke%3D%22none%22%20d%3D%22M0%200h24v24H0z%22%20fill%3D%22none%22%2F%3E%3Cpath%20d%3D%22M3%203m0%202a2%202%200%200%201%202%20-2h14a2%202%200%200%201%202%202v14a2%202%200%200%201%20-2%202h-14a2%202%200%200%201%20-2%20-2z%22%20%2F%3E%3C%2Fsvg%3E)}aside:before{-webkit-mask-image:url(data:image/svg+xml,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%2224%22%20height%3D%2224%22%20viewBox%3D%220%200%2024%2024%22%20fill%3D%22none%22%20stroke%3D%22currentColor%22%20stroke-width%3D%221.5%22%20stroke-linecap%3D%22round%22%20stroke-linejoin%3D%22round%22%20class%3D%22icon%20icon-tabler%20icons-tabler-outline%20icon-tabler-border-corner-square%22%3E%3Cpath%20stroke%3D%22none%22%20d%3D%22M0%200h24v24H0z%22%20fill%3D%22none%22%2F%3E%3Cpath%20d%3D%22M4%2020v-15a1%201%200%200%201%201%20-1h15%22%20%2F%3E%3C%2Fsvg%3E);mask-image:url(data:image/svg+xml,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%2224%22%20height%3D%2224%22%20viewBox%3D%220%200%2024%2024%22%20fill%3D%22none%22%20stroke%3D%22currentColor%22%20stroke-width%3D%221.5%22%20stroke-linecap%3D%22round%22%20stroke-linejoin%3D%22round%22%20class%3D%22icon%20icon-tabler%20icons-tabler-outline%20icon-tabler-border-corner-square%22%3E%3Cpath%20stroke%3D%22none%22%20d%3D%22M0%200h24v24H0z%22%20fill%3D%22none%22%2F%3E%3Cpath%20d%3D%22M4%2020v-15a1%201%200%200%201%201%20-1h15%22%20%2F%3E%3C%2Fsvg%3E)}header:before{-webkit-mask-image:url(data:image/svg+xml,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%2224%22%20height%3D%2224%22%20viewBox%3D%220%200%2024%2024%22%20fill%3D%22none%22%20stroke%3D%22currentColor%22%20stroke-width%3D%221.5%22%20stroke-linecap%3D%22round%22%20stroke-linejoin%3D%22round%22%20class%3D%22icon%20icon-tabler%20icons-tabler-outline%20icon-tabler-bell-ringing%22%3E%3Cpath%20stroke%3D%22none%22%20d%3D%22M0%200h24v24H0z%22%20fill%3D%22none%22%2F%3E%3Cpath%20d%3D%22M10%205a2%202%200%200%201%204%200a7%207%200%200%201%204%206v3a4%204%200%200%200%202%203h-16a4%204%200%200%200%202%20-3v-3a7%207%200%200%201%204%20-6%22%20%2F%3E%3Cpath%20d%3D%22M9%2017v1a3%203%200%200%200%206%200v-1%22%20%2F%3E%3Cpath%20d%3D%22M21%206.727a11.05%2011.05%200%200%200%20-2.794%20-3.727%22%20%2F%3E%3Cpath%20d%3D%22M3%206.727a11.05%2011.05%200%200%201%202.792%20-3.727%22%20%2F%3E%3C%2Fsvg%3E);mask-image:url(data:image/svg+xml,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%2224%22%20height%3D%2224%22%20viewBox%3D%220%200%2024%2024%22%20fill%3D%22none%22%20stroke%3D%22currentColor%22%20stroke-width%3D%221.5%22%20stroke-linecap%3D%22round%22%20stroke-linejoin%3D%22round%22%20class%3D%22icon%20icon-tabler%20icons-tabler-outline%20icon-tabler-bell-ringing%22%3E%3Cpath%20stroke%3D%22none%22%20d%3D%22M0%200h24v24H0z%22%20fill%3D%22none%22%2F%3E%3Cpath%20d%3D%22M10%205a2%202%200%200%201%204%200a7%207%200%200%201%204%206v3a4%204%200%200%200%202%203h-16a4%204%200%200%200%202%20-3v-3a7%207%200%200%201%204%20-6%22%20%2F%3E%3Cpath%20d%3D%22M9%2017v1a3%203%200%200%200%206%200v-1%22%20%2F%3E%3Cpath%20d%3D%22M21%206.727a11.05%2011.05%200%200%200%20-2.794%20-3.727%22%20%2F%3E%3Cpath%20d%3D%22M3%206.727a11.05%2011.05%200%200%201%202.792%20-3.727%22%20%2F%3E%3C%2Fsvg%3E)}footer:before{-webkit-mask-image:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyNCIgaGVpZ2h0PSIyNCIgdmlld0JveD0iMCAwIDI0IDI0IiBmaWxsPSJub25lIiBzdHJva2U9ImN1cnJlbnRDb2xvciIgc3Ryb2tlLXdpZHRoPSIxLjUiIHN0cm9rZS1saW5lY2FwPSJyb3VuZCIgc3Ryb2tlLWxpbmVqb2luPSJyb3VuZCIgY2xhc3M9Imljb24gaWNvbi10YWJsZXIgaWNvbnMtdGFibGVyLW91dGxpbmUgaWNvbi10YWJsZXItaW5mby10cmlhbmdsZSI+PHBhdGggc3Ryb2tlPSJub25lIiBkPSJNMCAwaDI0djI0SDB6IiBmaWxsPSJub25lIi8+PHBhdGggZD0iTTEwLjM2MyAzLjU5MWwtOC4xMDYgMTMuNTM0YTEuOTE0IDEuOTE0IDAgMCAwIDEuNjM2IDIuODcxaDE2LjIxNGExLjkxNCAxLjkxNCAwIDAgMCAxLjYzNiAtMi44N2wtOC4xMDYgLTEzLjUzNmExLjkxNCAxLjkxNCAwIDAgMCAtMy4yNzQgMHoiIC8+PHBhdGggZD0iTTEyIDloLjAxIiAvPjxwYXRoIGQ9Ik0xMSAxMmgxdjRoMSIgLz48L3N2Zz4=);mask-image:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyNCIgaGVpZ2h0PSIyNCIgdmlld0JveD0iMCAwIDI0IDI0IiBmaWxsPSJub25lIiBzdHJva2U9ImN1cnJlbnRDb2xvciIgc3Ryb2tlLXdpZHRoPSIxLjUiIHN0cm9rZS1saW5lY2FwPSJyb3VuZCIgc3Ryb2tlLWxpbmVqb2luPSJyb3VuZCIgY2xhc3M9Imljb24gaWNvbi10YWJsZXIgaWNvbnMtdGFibGVyLW91dGxpbmUgaWNvbi10YWJsZXItaW5mby10cmlhbmdsZSI+PHBhdGggc3Ryb2tlPSJub25lIiBkPSJNMCAwaDI0djI0SDB6IiBmaWxsPSJub25lIi8+PHBhdGggZD0iTTEwLjM2MyAzLjU5MWwtOC4xMDYgMTMuNTM0YTEuOTE0IDEuOTE0IDAgMCAwIDEuNjM2IDIuODcxaDE2LjIxNGExLjkxNCAxLjkxNCAwIDAgMCAxLjYzNiAtMi44N2wtOC4xMDYgLTEzLjUzNmExLjkxNCAxLjkxNCAwIDAgMCAtMy4yNzQgMHoiIC8+PHBhdGggZD0iTTEyIDloLjAxIiAvPjxwYXRoIGQ9Ik0xMSAxMmgxdjRoMSIgLz48L3N2Zz4=)}article:before{-webkit-mask-image:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyNCIgaGVpZ2h0PSIyNCIgdmlld0JveD0iMCAwIDI0IDI0IiBmaWxsPSJub25lIiBzdHJva2U9ImN1cnJlbnRDb2xvciIgc3Ryb2tlLXdpZHRoPSIxLjUiIHN0cm9rZS1saW5lY2FwPSJyb3VuZCIgc3Ryb2tlLWxpbmVqb2luPSJyb3VuZCIgY2xhc3M9Imljb24gaWNvbi10YWJsZXIgaWNvbnMtdGFibGVyLW91dGxpbmUgaWNvbi10YWJsZXItcGFnZS1icmVhayI+PHBhdGggZD0iTTAgMGgyNHYyNEgweiIgc3Ryb2tlPSJub25lIi8+PHBhdGggZD0iTTE0IDN2NGExIDEgMCAwIDAgMSAxaDRtMCAxMHYxYTIgMiAwIDAgMS0yIDJIN2EyIDIgMCAwIDEtMi0ydi0xbS0yLTRoM200LjUgMGgzbTQuNSAwaDMiLz48cGF0aCBkPSJNNSAxMFY1YTIgMiAwIDAgMSAyLTJoN2w1IDV2MiIvPjwvc3ZnPg==);mask-image:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyNCIgaGVpZ2h0PSIyNCIgdmlld0JveD0iMCAwIDI0IDI0IiBmaWxsPSJub25lIiBzdHJva2U9ImN1cnJlbnRDb2xvciIgc3Ryb2tlLXdpZHRoPSIxLjUiIHN0cm9rZS1saW5lY2FwPSJyb3VuZCIgc3Ryb2tlLWxpbmVqb2luPSJyb3VuZCIgY2xhc3M9Imljb24gaWNvbi10YWJsZXIgaWNvbnMtdGFibGVyLW91dGxpbmUgaWNvbi10YWJsZXItcGFnZS1icmVhayI+PHBhdGggZD0iTTAgMGgyNHYyNEgweiIgc3Ryb2tlPSJub25lIi8+PHBhdGggZD0iTTE0IDN2NGExIDEgMCAwIDAgMSAxaDRtMCAxMHYxYTIgMiAwIDAgMS0yIDJIN2EyIDIgMCAwIDEtMi0ydi0xbS0yLTRoM200LjUgMGgzbTQuNSAwaDMiLz48cGF0aCBkPSJNNSAxMFY1YTIgMiAwIDAgMSAyLTJoN2w1IDV2MiIvPjwvc3ZnPg==)}map:has(:where(p,pre)):before{-webkit-mask-image:url(data:image/svg+xml,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%2224%22%20height%3D%2224%22%20viewBox%3D%220%200%2024%2024%22%20fill%3D%22none%22%20stroke%3D%22currentColor%22%20stroke-width%3D%221.5%22%20stroke-linecap%3D%22round%22%20stroke-linejoin%3D%22round%22%20class%3D%22icon%20icon-tabler%20icons-tabler-outline%20icon-tabler-photo%22%3E%3Cpath%20stroke%3D%22none%22%20d%3D%22M0%200h24v24H0z%22%20fill%3D%22none%22%2F%3E%3Cpath%20d%3D%22M15%208h.01%22%20%2F%3E%3Cpath%20d%3D%22M3%206a3%203%200%200%201%203%20-3h12a3%203%200%200%201%203%203v12a3%203%200%200%201%20-3%203h-12a3%203%200%200%201%20-3%20-3v-12z%22%20%2F%3E%3Cpath%20d%3D%22M3%2016l5%20-5c.928%20-.893%202.072%20-.893%203%200l5%205%22%20%2F%3E%3Cpath%20d%3D%22M14%2014l1%20-1c.928%20-.893%202.072%20-.893%203%200l3%203%22%20%2F%3E%3C%2Fsvg%3E);mask-image:url(data:image/svg+xml,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%2224%22%20height%3D%2224%22%20viewBox%3D%220%200%2024%2024%22%20fill%3D%22none%22%20stroke%3D%22currentColor%22%20stroke-width%3D%221.5%22%20stroke-linecap%3D%22round%22%20stroke-linejoin%3D%22round%22%20class%3D%22icon%20icon-tabler%20icons-tabler-outline%20icon-tabler-photo%22%3E%3Cpath%20stroke%3D%22none%22%20d%3D%22M0%200h24v24H0z%22%20fill%3D%22none%22%2F%3E%3Cpath%20d%3D%22M15%208h.01%22%20%2F%3E%3Cpath%20d%3D%22M3%206a3%203%200%200%201%203%20-3h12a3%203%200%200%201%203%203v12a3%203%200%200%201%20-3%203h-12a3%203%200%200%201%20-3%20-3v-12z%22%20%2F%3E%3Cpath%20d%3D%22M3%2016l5%20-5c.928%20-.893%202.072%20-.893%203%200l5%205%22%20%2F%3E%3Cpath%20d%3D%22M14%2014l1%20-1c.928%20-.893%202.072%20-.893%203%200l3%203%22%20%2F%3E%3C%2Fsvg%3E)}del:has(:where(p,pre)):before{-webkit-mask-image:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyNCIgaGVpZ2h0PSIyNCIgdmlld0JveD0iMCAwIDI0IDI0IiBmaWxsPSJub25lIiBzdHJva2U9ImN1cnJlbnRDb2xvciIgc3Ryb2tlLXdpZHRoPSIxLjUiIHN0cm9rZS1saW5lY2FwPSJyb3VuZCIgc3Ryb2tlLWxpbmVqb2luPSJyb3VuZCIgY2xhc3M9Imljb24gaWNvbi10YWJsZXIgaWNvbnMtdGFibGVyLW91dGxpbmUgaWNvbi10YWJsZXItZmlsZS1taW51cyI+PHBhdGggc3Ryb2tlPSJub25lIiBkPSJNMCAwaDI0djI0SDB6IiBmaWxsPSJub25lIi8+PHBhdGggZD0iTTE0IDN2NGExIDEgMCAwIDAgMSAxaDQiIC8+PHBhdGggZD0iTTE3IDIxaC0xMGEyIDIgMCAwIDEgLTIgLTJ2LTE0YTIgMiAwIDAgMSAyIC0yaDdsNSA1djExYTIgMiAwIDAgMSAtMiAyeiIgLz48cGF0aCBkPSJNOSAxNGw2IDAiIC8+PC9zdmc+);mask-image:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyNCIgaGVpZ2h0PSIyNCIgdmlld0JveD0iMCAwIDI0IDI0IiBmaWxsPSJub25lIiBzdHJva2U9ImN1cnJlbnRDb2xvciIgc3Ryb2tlLXdpZHRoPSIxLjUiIHN0cm9rZS1saW5lY2FwPSJyb3VuZCIgc3Ryb2tlLWxpbmVqb2luPSJyb3VuZCIgY2xhc3M9Imljb24gaWNvbi10YWJsZXIgaWNvbnMtdGFibGVyLW91dGxpbmUgaWNvbi10YWJsZXItZmlsZS1taW51cyI+PHBhdGggc3Ryb2tlPSJub25lIiBkPSJNMCAwaDI0djI0SDB6IiBmaWxsPSJub25lIi8+PHBhdGggZD0iTTE0IDN2NGExIDEgMCAwIDAgMSAxaDQiIC8+PHBhdGggZD0iTTE3IDIxaC0xMGEyIDIgMCAwIDEgLTIgLTJ2LTE0YTIgMiAwIDAgMSAyIC0yaDdsNSA1djExYTIgMiAwIDAgMSAtMiAyeiIgLz48cGF0aCBkPSJNOSAxNGw2IDAiIC8+PC9zdmc+)}ins:has(:where(p,pre)):before{-webkit-mask-image:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyNCIgaGVpZ2h0PSIyNCIgdmlld0JveD0iMCAwIDI0IDI0IiBmaWxsPSJub25lIiBzdHJva2U9ImN1cnJlbnRDb2xvciIgc3Ryb2tlLXdpZHRoPSIxLjUiIHN0cm9rZS1saW5lY2FwPSJyb3VuZCIgc3Ryb2tlLWxpbmVqb2luPSJyb3VuZCIgY2xhc3M9Imljb24gaWNvbi10YWJsZXIgaWNvbnMtdGFibGVyLW91dGxpbmUgaWNvbi10YWJsZXItZmlsZS1wbHVzIj48cGF0aCBzdHJva2U9Im5vbmUiIGQ9Ik0wIDBoMjR2MjRIMHoiIGZpbGw9Im5vbmUiLz48cGF0aCBkPSJNMTQgM3Y0YTEgMSAwIDAgMCAxIDFoNCIgLz48cGF0aCBkPSJNMTcgMjFoLTEwYTIgMiAwIDAgMSAtMiAtMnYtMTRhMiAyIDAgMCAxIDIgLTJoN2w1IDV2MTFhMiAyIDAgMCAxIC0yIDJ6IiAvPjxwYXRoIGQ9Ik0xMiAxMWwwIDYiIC8+PHBhdGggZD0iTTkgMTRsNiAwIiAvPjwvc3ZnPg==);mask-image:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyNCIgaGVpZ2h0PSIyNCIgdmlld0JveD0iMCAwIDI0IDI0IiBmaWxsPSJub25lIiBzdHJva2U9ImN1cnJlbnRDb2xvciIgc3Ryb2tlLXdpZHRoPSIxLjUiIHN0cm9rZS1saW5lY2FwPSJyb3VuZCIgc3Ryb2tlLWxpbmVqb2luPSJyb3VuZCIgY2xhc3M9Imljb24gaWNvbi10YWJsZXIgaWNvbnMtdGFibGVyLW91dGxpbmUgaWNvbi10YWJsZXItZmlsZS1wbHVzIj48cGF0aCBzdHJva2U9Im5vbmUiIGQ9Ik0wIDBoMjR2MjRIMHoiIGZpbGw9Im5vbmUiLz48cGF0aCBkPSJNMTQgM3Y0YTEgMSAwIDAgMCAxIDFoNCIgLz48cGF0aCBkPSJNMTcgMjFoLTEwYTIgMiAwIDAgMSAtMiAtMnYtMTRhMiAyIDAgMCAxIDIgLTJoN2w1IDV2MTFhMiAyIDAgMCAxIC0yIDJ6IiAvPjxwYXRoIGQ9Ik0xMiAxMWwwIDYiIC8+PHBhdGggZD0iTTkgMTRsNiAwIiAvPjwvc3ZnPg==)}nav:before{-webkit-mask-image:url(data:image/svg+xml,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%2224%22%20height%3D%2224%22%20viewBox%3D%220%200%2024%2024%22%20fill%3D%22none%22%20stroke%3D%22currentColor%22%20stroke-width%3D%221.5%22%20stroke-linecap%3D%22round%22%20stroke-linejoin%3D%22round%22%20class%3D%22icon%20icon-tabler%20icons-tabler-outline%20icon-tabler-location%22%3E%3Cpath%20stroke%3D%22none%22%20d%3D%22M0%200h24v24H0z%22%20fill%3D%22none%22%2F%3E%3Cpath%20d%3D%22M21%203l-6.5%2018a.55%20.55%200%200%201%20-1%200l-3.5%20-7l-7%20-3.5a.55%20.55%200%200%201%200%20-1l18%20-6.5%22%20%2F%3E%3C%2Fsvg%3E);mask-image:url(data:image/svg+xml,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%2224%22%20height%3D%2224%22%20viewBox%3D%220%200%2024%2024%22%20fill%3D%22none%22%20stroke%3D%22currentColor%22%20stroke-width%3D%221.5%22%20stroke-linecap%3D%22round%22%20stroke-linejoin%3D%22round%22%20class%3D%22icon%20icon-tabler%20icons-tabler-outline%20icon-tabler-location%22%3E%3Cpath%20stroke%3D%22none%22%20d%3D%22M0%200h24v24H0z%22%20fill%3D%22none%22%2F%3E%3Cpath%20d%3D%22M21%203l-6.5%2018a.55%20.55%200%200%201%20-1%200l-3.5%20-7l-7%20-3.5a.55%20.55%200%200%201%200%20-1l18%20-6.5%22%20%2F%3E%3C%2Fsvg%3E)}address:before{-webkit-mask-image:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyNCIgaGVpZ2h0PSIyNCIgdmlld0JveD0iMCAwIDI0IDI0IiBmaWxsPSJub25lIiBzdHJva2U9ImN1cnJlbnRDb2xvciIgc3Ryb2tlLXdpZHRoPSIxLjUiIHN0cm9rZS1saW5lY2FwPSJyb3VuZCIgc3Ryb2tlLWxpbmVqb2luPSJyb3VuZCIgY2xhc3M9Imljb24gaWNvbi10YWJsZXIgaWNvbnMtdGFibGVyLW91dGxpbmUgaWNvbi10YWJsZXItYWRkcmVzcy1ib29rIj48cGF0aCBzdHJva2U9Im5vbmUiIGQ9Ik0wIDBoMjR2MjRIMHoiIGZpbGw9Im5vbmUiLz48cGF0aCBkPSJNMjAgNnYxMmEyIDIgMCAwIDEgLTIgMmgtMTBhMiAyIDAgMCAxIC0yIC0ydi0xMmEyIDIgMCAwIDEgMiAtMmgxMGEyIDIgMCAwIDEgMiAyeiIgLz48cGF0aCBkPSJNMTAgMTZoNiIgLz48cGF0aCBkPSJNMTMgMTFtLTIgMGEyIDIgMCAxIDAgNCAwYTIgMiAwIDEgMCAtNCAwIiAvPjxwYXRoIGQ9Ik00IDhoMyIgLz48cGF0aCBkPSJNNCAxMmgzIiAvPjxwYXRoIGQ9Ik00IDE2aDMiIC8+PC9zdmc+);mask-image:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyNCIgaGVpZ2h0PSIyNCIgdmlld0JveD0iMCAwIDI0IDI0IiBmaWxsPSJub25lIiBzdHJva2U9ImN1cnJlbnRDb2xvciIgc3Ryb2tlLXdpZHRoPSIxLjUiIHN0cm9rZS1saW5lY2FwPSJyb3VuZCIgc3Ryb2tlLWxpbmVqb2luPSJyb3VuZCIgY2xhc3M9Imljb24gaWNvbi10YWJsZXIgaWNvbnMtdGFibGVyLW91dGxpbmUgaWNvbi10YWJsZXItYWRkcmVzcy1ib29rIj48cGF0aCBzdHJva2U9Im5vbmUiIGQ9Ik0wIDBoMjR2MjRIMHoiIGZpbGw9Im5vbmUiLz48cGF0aCBkPSJNMjAgNnYxMmEyIDIgMCAwIDEgLTIgMmgtMTBhMiAyIDAgMCAxIC0yIC0ydi0xMmEyIDIgMCAwIDEgMiAtMmgxMGEyIDIgMCAwIDEgMiAyeiIgLz48cGF0aCBkPSJNMTAgMTZoNiIgLz48cGF0aCBkPSJNMTMgMTFtLTIgMGEyIDIgMCAxIDAgNCAwYTIgMiAwIDEgMCAtNCAwIiAvPjxwYXRoIGQ9Ik00IDhoMyIgLz48cGF0aCBkPSJNNCAxMmgzIiAvPjxwYXRoIGQ9Ik00IDE2aDMiIC8+PC9zdmc+)}figure:before{-webkit-mask-image:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyNCIgaGVpZ2h0PSIyNCIgdmlld0JveD0iMCAwIDI0IDI0IiBmaWxsPSJub25lIiBzdHJva2U9ImN1cnJlbnRDb2xvciIgc3Ryb2tlLXdpZHRoPSIxLjUiIHN0cm9rZS1saW5lY2FwPSJyb3VuZCIgc3Ryb2tlLWxpbmVqb2luPSJyb3VuZCIgY2xhc3M9Imljb24gaWNvbi10YWJsZXIgaWNvbnMtdGFibGVyLW91dGxpbmUgaWNvbi10YWJsZXItY2lyY2xlLWRvdHRlZC1sZXR0ZXItaSI+PHBhdGggc3Ryb2tlPSJub25lIiBkPSJNMCAwaDI0djI0SDB6IiBmaWxsPSJub25lIi8+PHBhdGggZD0iTTEyIDh2OCIgLz48cGF0aCBkPSJNNy41IDQuMjF2LjAxIiAvPjxwYXRoIGQ9Ik00LjIxIDcuNXYuMDEiIC8+PHBhdGggZD0iTTMgMTJ2LjAxIiAvPjxwYXRoIGQ9Ik00LjIxIDE2LjV2LjAxIiAvPjxwYXRoIGQ9Ik03LjUgMTkuNzl2LjAxIiAvPjxwYXRoIGQ9Ik0xMiAyMXYuMDEiIC8+PHBhdGggZD0iTTE2LjUgMTkuNzl2LjAxIiAvPjxwYXRoIGQ9Ik0xOS43OSAxNi41di4wMSIgLz48cGF0aCBkPSJNMjEgMTJ2LjAxIiAvPjxwYXRoIGQ9Ik0xOS43OSA3LjV2LjAxIiAvPjxwYXRoIGQ9Ik0xNi41IDQuMjF2LjAxIiAvPjxwYXRoIGQ9Ik0xMiAzdi4wMSIgLz48L3N2Zz4=);mask-image:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyNCIgaGVpZ2h0PSIyNCIgdmlld0JveD0iMCAwIDI0IDI0IiBmaWxsPSJub25lIiBzdHJva2U9ImN1cnJlbnRDb2xvciIgc3Ryb2tlLXdpZHRoPSIxLjUiIHN0cm9rZS1saW5lY2FwPSJyb3VuZCIgc3Ryb2tlLWxpbmVqb2luPSJyb3VuZCIgY2xhc3M9Imljb24gaWNvbi10YWJsZXIgaWNvbnMtdGFibGVyLW91dGxpbmUgaWNvbi10YWJsZXItY2lyY2xlLWRvdHRlZC1sZXR0ZXItaSI+PHBhdGggc3Ryb2tlPSJub25lIiBkPSJNMCAwaDI0djI0SDB6IiBmaWxsPSJub25lIi8+PHBhdGggZD0iTTEyIDh2OCIgLz48cGF0aCBkPSJNNy41IDQuMjF2LjAxIiAvPjxwYXRoIGQ9Ik00LjIxIDcuNXYuMDEiIC8+PHBhdGggZD0iTTMgMTJ2LjAxIiAvPjxwYXRoIGQ9Ik00LjIxIDE2LjV2LjAxIiAvPjxwYXRoIGQ9Ik03LjUgMTkuNzl2LjAxIiAvPjxwYXRoIGQ9Ik0xMiAyMXYuMDEiIC8+PHBhdGggZD0iTTE2LjUgMTkuNzl2LjAxIiAvPjxwYXRoIGQ9Ik0xOS43OSAxNi41di4wMSIgLz48cGF0aCBkPSJNMjEgMTJ2LjAxIiAvPjxwYXRoIGQ9Ik0xOS43OSA3LjV2LjAxIiAvPjxwYXRoIGQ9Ik0xNi41IDQuMjF2LjAxIiAvPjxwYXRoIGQ9Ik0xMiAzdi4wMSIgLz48L3N2Zz4=)}blockquote:before{-webkit-mask-image:url(data:image/svg+xml,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%2224%22%20height%3D%2224%22%20viewBox%3D%220%200%2024%2024%22%20fill%3D%22none%22%20stroke%3D%22currentColor%22%20stroke-width%3D%221.5%22%20stroke-linecap%3D%22round%22%20stroke-linejoin%3D%22round%22%20class%3D%22icon%20icon-tabler%20icons-tabler-outline%20icon-tabler-quotes%22%3E%3Cpath%20stroke%3D%22none%22%20d%3D%22M0%200h24v24H0z%22%20fill%3D%22none%22%2F%3E%3Cpath%20d%3D%22M4%2012c-1.333%20-1.854%20-1.333%20-4.146%200%20-6%22%20%2F%3E%3Cpath%20d%3D%22M8%2012c-1.333%20-1.854%20-1.333%20-4.146%200%20-6%22%20%2F%3E%3Cpath%20d%3D%22M16%2018c1.333%20-1.854%201.333%20-4.146%200%20-6%22%20%2F%3E%3Cpath%20d%3D%22M20%2018c1.333%20-1.854%201.333%20-4.146%200%20-6%22%20%2F%3E%3C%2Fsvg%3E);mask-image:url(data:image/svg+xml,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%2224%22%20height%3D%2224%22%20viewBox%3D%220%200%2024%2024%22%20fill%3D%22none%22%20stroke%3D%22currentColor%22%20stroke-width%3D%221.5%22%20stroke-linecap%3D%22round%22%20stroke-linejoin%3D%22round%22%20class%3D%22icon%20icon-tabler%20icons-tabler-outline%20icon-tabler-quotes%22%3E%3Cpath%20stroke%3D%22none%22%20d%3D%22M0%200h24v24H0z%22%20fill%3D%22none%22%2F%3E%3Cpath%20d%3D%22M4%2012c-1.333%20-1.854%20-1.333%20-4.146%200%20-6%22%20%2F%3E%3Cpath%20d%3D%22M8%2012c-1.333%20-1.854%20-1.333%20-4.146%200%20-6%22%20%2F%3E%3Cpath%20d%3D%22M16%2018c1.333%20-1.854%201.333%20-4.146%200%20-6%22%20%2F%3E%3Cpath%20d%3D%22M20%2018c1.333%20-1.854%201.333%20-4.146%200%20-6%22%20%2F%3E%3C%2Fsvg%3E)}a:has(:where(p,pre))[href]:before{-webkit-mask-image:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyNCIgaGVpZ2h0PSIyNCIgdmlld0JveD0iMCAwIDI0IDI0IiBmaWxsPSJub25lIiBzdHJva2U9ImN1cnJlbnRDb2xvciIgc3Ryb2tlLXdpZHRoPSIxLjUiIHN0cm9rZS1saW5lY2FwPSJyb3VuZCIgc3Ryb2tlLWxpbmVqb2luPSJyb3VuZCIgY2xhc3M9Imljb24gaWNvbi10YWJsZXIgaWNvbnMtdGFibGVyLW91dGxpbmUgaWNvbi10YWJsZXItbGluayI+PHBhdGggc3Ryb2tlPSJub25lIiBkPSJNMCAwaDI0djI0SDB6IiBmaWxsPSJub25lIi8+PHBhdGggZD0iTTkgMTVsNiAtNiIgLz48cGF0aCBkPSJNMTEgNmwuNDYzIC0uNTM2YTUgNSAwIDAgMSA3LjA3MSA3LjA3MmwtLjUzNCAuNDY0IiAvPjxwYXRoIGQ9Ik0xMyAxOGwtLjM5NyAuNTM0YTUuMDY4IDUuMDY4IDAgMCAxIC03LjEyNyAwYTQuOTcyIDQuOTcyIDAgMCAxIDAgLTcuMDcxbC41MjQgLS40NjMiIC8+PC9zdmc+);mask-image:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyNCIgaGVpZ2h0PSIyNCIgdmlld0JveD0iMCAwIDI0IDI0IiBmaWxsPSJub25lIiBzdHJva2U9ImN1cnJlbnRDb2xvciIgc3Ryb2tlLXdpZHRoPSIxLjUiIHN0cm9rZS1saW5lY2FwPSJyb3VuZCIgc3Ryb2tlLWxpbmVqb2luPSJyb3VuZCIgY2xhc3M9Imljb24gaWNvbi10YWJsZXIgaWNvbnMtdGFibGVyLW91dGxpbmUgaWNvbi10YWJsZXItbGluayI+PHBhdGggc3Ryb2tlPSJub25lIiBkPSJNMCAwaDI0djI0SDB6IiBmaWxsPSJub25lIi8+PHBhdGggZD0iTTkgMTVsNiAtNiIgLz48cGF0aCBkPSJNMTEgNmwuNDYzIC0uNTM2YTUgNSAwIDAgMSA3LjA3MSA3LjA3MmwtLjUzNCAuNDY0IiAvPjxwYXRoIGQ9Ik0xMyAxOGwtLjM5NyAuNTM0YTUuMDY4IDUuMDY4IDAgMCAxIC03LjEyNyAwYTQuOTcyIDQuOTcyIDAgMCAxIDAgLTcuMDcxbC41MjQgLS40NjMiIC8+PC9zdmc+)}search:before{-webkit-mask-image:url(data:image/svg+xml,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%2224%22%20height%3D%2224%22%20viewBox%3D%220%200%2024%2024%22%20fill%3D%22none%22%20stroke%3D%22currentColor%22%20stroke-width%3D%221.5%22%20stroke-linecap%3D%22round%22%20stroke-linejoin%3D%22round%22%20class%3D%22icon%20icon-tabler%20icons-tabler-outline%20icon-tabler-search%22%3E%3Cpath%20stroke%3D%22none%22%20d%3D%22M0%200h24v24H0z%22%20fill%3D%22none%22%2F%3E%3Cpath%20d%3D%22M10%2010m-7%200a7%207%200%201%200%2014%200a7%207%200%201%200%20-14%200%22%20%2F%3E%3Cpath%20d%3D%22M21%2021l-6%20-6%22%20%2F%3E%3C%2Fsvg%3E);mask-image:url(data:image/svg+xml,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%2224%22%20height%3D%2224%22%20viewBox%3D%220%200%2024%2024%22%20fill%3D%22none%22%20stroke%3D%22currentColor%22%20stroke-width%3D%221.5%22%20stroke-linecap%3D%22round%22%20stroke-linejoin%3D%22round%22%20class%3D%22icon%20icon-tabler%20icons-tabler-outline%20icon-tabler-search%22%3E%3Cpath%20stroke%3D%22none%22%20d%3D%22M0%200h24v24H0z%22%20fill%3D%22none%22%2F%3E%3Cpath%20d%3D%22M10%2010m-7%200a7%207%200%201%200%2014%200a7%207%200%201%200%20-14%200%22%20%2F%3E%3Cpath%20d%3D%22M21%2021l-6%20-6%22%20%2F%3E%3C%2Fsvg%3E)}form:before{-webkit-mask-image:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyNCIgaGVpZ2h0PSIyNCIgdmlld0JveD0iMCAwIDI0IDI0IiBmaWxsPSJub25lIiBzdHJva2U9ImN1cnJlbnRDb2xvciIgc3Ryb2tlLXdpZHRoPSIxLjUiIHN0cm9rZS1saW5lY2FwPSJyb3VuZCIgc3Ryb2tlLWxpbmVqb2luPSJyb3VuZCIgY2xhc3M9Imljb24gaWNvbi10YWJsZXIgaWNvbnMtdGFibGVyLW91dGxpbmUgaWNvbi10YWJsZXItY3JvcC0xNi05Ij48cGF0aCBzdHJva2U9Im5vbmUiIGQ9Ik0wIDBoMjR2MjRIMHoiIGZpbGw9Im5vbmUiLz48cGF0aCBkPSJNNCA4bTAgMmEyIDIgMCAwIDEgMiAtMmgxMmEyIDIgMCAwIDEgMiAydjRhMiAyIDAgMCAxIC0yIDJoLTEyYTIgMiAwIDAgMSAtMiAtMnoiIC8+PC9zdmc+);mask-image:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyNCIgaGVpZ2h0PSIyNCIgdmlld0JveD0iMCAwIDI0IDI0IiBmaWxsPSJub25lIiBzdHJva2U9ImN1cnJlbnRDb2xvciIgc3Ryb2tlLXdpZHRoPSIxLjUiIHN0cm9rZS1saW5lY2FwPSJyb3VuZCIgc3Ryb2tlLWxpbmVqb2luPSJyb3VuZCIgY2xhc3M9Imljb24gaWNvbi10YWJsZXIgaWNvbnMtdGFibGVyLW91dGxpbmUgaWNvbi10YWJsZXItY3JvcC0xNi05Ij48cGF0aCBzdHJva2U9Im5vbmUiIGQ9Ik0wIDBoMjR2MjRIMHoiIGZpbGw9Im5vbmUiLz48cGF0aCBkPSJNNCA4bTAgMmEyIDIgMCAwIDEgMiAtMmgxMmEyIDIgMCAwIDEgMiAydjRhMiAyIDAgMCAxIC0yIDJoLTEyYTIgMiAwIDAgMSAtMiAtMnoiIC8+PC9zdmc+)}:is(figure,dialog,address,details,fieldset,blockquote,a:has(:where(p,pre)),del:has(:where(p,pre)),ins:has(:where(p,pre)),map:has(:where(p,pre))){border:calc(1px * var(--border-width)) solid var(--border-color);padding-inline:calc(2 * var(--line-lead) * var(--border-width) / var(--border-width));margin-block:calc(2 * var(--line-lead));text-decoration:none;display:block}details{margin-block:var(--line-lead);border:0;padding-inline:0}dialog{margin:auto}dialog::backdrop{background-color:color-mix(in srgb, currentColor 20%, transparent 100%);-webkit-backdrop-filter:blur(1em);backdrop-filter:blur(1em)}:where(table,figure,address,details,fieldset,blockquote,a:has(:where(p,pre)),del:has(:where(p,pre)),ins:has(:where(p,pre)),map:has(:where(p,pre)))+:where(table,figure,address,details,blockquote,a:has(:where(p,pre)),del:has(:where(p,pre)),ins:has(:where(p,pre)),map:has(:where(p,pre))){margin-block-start:calc(3 * var(--line-lead))}:where(p,pre)+fieldset:has(>legend){margin-block-start:calc(1 * var(--line-lead))}dl{padding-block-start:var(--line-lead)}:where(figure,address,blockquote,a:has(:where(p,pre)),del:has(:where(p,pre)),ins:has(:where(p,pre)),map:has(:where(p,pre))):before{top:4em;transform:translate(-3.2em,1em)}figcaption:where(:first-child){border-block-end:calc(1px * var(--border-width)) solid var(--border-color)}figcaption:where(:last-child){border-block-start:calc(1px * var(--border-width)) solid var(--border-color)}dt:not(:last-of-type){background-image:linear-gradient(to right, var(--border-color) 0, var(--border-color) 2ch, transparent 2ch, transparent 3ch);background-position:0 100%;background-repeat:no-repeat;background-size:1ch 1px}dd{border-block-start:calc(1px * var(--border-width)) solid var(--border-color);margin-block-start:calc(1 * var(--line-lead) * var(--border-width) / var(--border-width))}table{border-collapse:collapse;width:100%;margin-block:calc(2 * var(--line-lead));display:block;overflow:auto}caption{border:calc(var(--border-width) * 2px) var(--border-color);text-align:start;display:block;position:sticky;left:0}thead{border-block-end:calc(var(--border-width) * 2px) solid var(--border-color)}tfoot{border-block-start:calc(var(--border-width) * 2px) solid var(--border-color)}th,td{border:calc(var(--border-width) * 1px) solid var(--border-color)}th{padding-block:calc(1 * var(--line-lead)) calc((1 * var(--line-lead)) + var(--lh-pad))}td{vertical-align:top}:is(ol,ul,dl,menu):after{content:var(--content,"");background-color:var(--border-color);width:1ch;height:.5px;display:block;position:relative;bottom:0;left:-1em}:is(ol,ul,dl,menu) :is(ol,ul,dl,menu){padding-inline:calc(3ch * var(--border-width) / var(--border-width))}ol{list-style-type:decimal-leading-zero}menu{list-style-type:square}ul{list-style-type:disc}dl>div{list-style-type:circle;display:list-item}::marker{content:var(--content);font-size:.75em}svg,img{vertical-align:middle}svg,math,canvas,img,video,audio,iframe,embed,object{max-width:100%}span:has(>:where([data-display=block]):only-child){max-width:calc(100% + var(--line-lead)*2);width:clamp(100%, var(--border-width) * 100vw, 100vw);translate:calc(var(--line-lead) * -1);display:block}[data-display=block]{max-width:100%;height:auto;display:block}meter,progress{vertical-align:middle;accent-color:currentColor}strong{font-weight:700}strong:after{content:var(--content,":")}mark{background-color:color-mix(in srgb, currentColor 5%, transparent 100%);padding:0 .4em .3em}ins:where(:not(:has(p,pre))),del:where(:not(:has(p,pre))){text-decoration-thickness:calc(.0625em * var(--border-width))}ins:where(:not(:has(p,pre))){text-underline-position:from-font}abbr[title]{text-underline-offset:2px;-webkit-text-decoration:underline dotted;text-decoration:underline dotted;text-decoration-thickness:1px}var{font-style:italic}sub,sup{vertical-align:baseline;font-size:.7em;line-height:1;position:relative}sub{bottom:-1ex}sup{top:-1.5ex}small:before{content:var(--content,"(")}small:after{content:var(--content,")")}:is(i,b,u,s,em,a:not(:has(p,pre))){text-decoration:none}:where(i,b,u,s,em,kbd,samp,cite,output,map:not(:has(p,pre)),a:not(:has(p,pre))[href]):after{content:var(--content,"");vertical-align:top;background-color:currentColor;width:.7em;height:.7em;display:inline-block;-webkit-mask-size:cover;mask-size:cover;-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat}kbd:after,samp:after,output:after{margin-inline:.5ch}i:after{-webkit-mask-image:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyNCIgaGVpZ2h0PSIyNCIgdmlld0JveD0iMCAwIDI0IDI0IiBmaWxsPSJub25lIiBzdHJva2U9ImN1cnJlbnRDb2xvciIgc3Ryb2tlLXdpZHRoPSIxLjUiIHN0cm9rZS1saW5lY2FwPSJyb3VuZCIgc3Ryb2tlLWxpbmVqb2luPSJyb3VuZCIgY2xhc3M9Imljb24gaWNvbi10YWJsZXIgaWNvbnMtdGFibGVyLW91dGxpbmUgaWNvbi10YWJsZXItcm91dGUtYWx0LWxlZnQiPjxwYXRoIGQ9Ik0wIDBoMjR2MjRIMHoiIHN0cm9rZT0ibm9uZSIvPjxwYXRoIGQ9Ik04IDNIM3Y1bTEzLTVoNXY1Ii8+PHBhdGggZD0ibTMgMyA3LjUzNiA3LjUzNkE1IDUgMCAwIDEgMTIgMTQuMDdWMjFtNi0xNC45OVY2bS0yIDIuMDJ2LS4wMU0xNCAxMHYuMDEiLz48L3N2Zz4=);mask-image:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyNCIgaGVpZ2h0PSIyNCIgdmlld0JveD0iMCAwIDI0IDI0IiBmaWxsPSJub25lIiBzdHJva2U9ImN1cnJlbnRDb2xvciIgc3Ryb2tlLXdpZHRoPSIxLjUiIHN0cm9rZS1saW5lY2FwPSJyb3VuZCIgc3Ryb2tlLWxpbmVqb2luPSJyb3VuZCIgY2xhc3M9Imljb24gaWNvbi10YWJsZXIgaWNvbnMtdGFibGVyLW91dGxpbmUgaWNvbi10YWJsZXItcm91dGUtYWx0LWxlZnQiPjxwYXRoIGQ9Ik0wIDBoMjR2MjRIMHoiIHN0cm9rZT0ibm9uZSIvPjxwYXRoIGQ9Ik04IDNIM3Y1bTEzLTVoNXY1Ii8+PHBhdGggZD0ibTMgMyA3LjUzNiA3LjUzNkE1IDUgMCAwIDEgMTIgMTQuMDdWMjFtNi0xNC45OVY2bS0yIDIuMDJ2LS4wMU0xNCAxMHYuMDEiLz48L3N2Zz4=)}b:after{-webkit-mask-image:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyNCIgaGVpZ2h0PSIyNCIgdmlld0JveD0iMCAwIDI0IDI0IiBmaWxsPSJub25lIiBzdHJva2U9ImN1cnJlbnRDb2xvciIgc3Ryb2tlLXdpZHRoPSIxLjUiIHN0cm9rZS1saW5lY2FwPSJyb3VuZCIgc3Ryb2tlLWxpbmVqb2luPSJyb3VuZCIgY2xhc3M9Imljb24gaWNvbi10YWJsZXIgaWNvbnMtdGFibGVyLW91dGxpbmUgaWNvbi10YWJsZXItYmVsbC1yaW5naW5nIj48cGF0aCBkPSJNMCAwaDI0djI0SDB6IiBzdHJva2U9Im5vbmUiLz48cGF0aCBkPSJNMTAgNWEyIDIgMCAwIDEgNCAwIDcgNyAwIDAgMSA0IDZ2M2E0IDQgMCAwIDAgMiAzSDRhNCA0IDAgMCAwIDItM3YtM2E3IDcgMCAwIDEgNC02TTkgMTd2MWEzIDMgMCAwIDAgNiAwdi0xbTYtMTAuMjczQTExLjA1IDExLjA1IDAgMCAwIDE4LjIwNiAzTTMgNi43MjdBMTEuMDUgMTEuMDUgMCAwIDEgNS43OTIgMyIvPjwvc3ZnPg==);mask-image:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyNCIgaGVpZ2h0PSIyNCIgdmlld0JveD0iMCAwIDI0IDI0IiBmaWxsPSJub25lIiBzdHJva2U9ImN1cnJlbnRDb2xvciIgc3Ryb2tlLXdpZHRoPSIxLjUiIHN0cm9rZS1saW5lY2FwPSJyb3VuZCIgc3Ryb2tlLWxpbmVqb2luPSJyb3VuZCIgY2xhc3M9Imljb24gaWNvbi10YWJsZXIgaWNvbnMtdGFibGVyLW91dGxpbmUgaWNvbi10YWJsZXItYmVsbC1yaW5naW5nIj48cGF0aCBkPSJNMCAwaDI0djI0SDB6IiBzdHJva2U9Im5vbmUiLz48cGF0aCBkPSJNMTAgNWEyIDIgMCAwIDEgNCAwIDcgNyAwIDAgMSA0IDZ2M2E0IDQgMCAwIDAgMiAzSDRhNCA0IDAgMCAwIDItM3YtM2E3IDcgMCAwIDEgNC02TTkgMTd2MWEzIDMgMCAwIDAgNiAwdi0xbTYtMTAuMjczQTExLjA1IDExLjA1IDAgMCAwIDE4LjIwNiAzTTMgNi43MjdBMTEuMDUgMTEuMDUgMCAwIDEgNS43OTIgMyIvPjwvc3ZnPg==)}u:after{-webkit-mask-image:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyNCIgaGVpZ2h0PSIyNCIgdmlld0JveD0iMCAwIDI0IDI0IiBmaWxsPSJub25lIiBzdHJva2U9ImN1cnJlbnRDb2xvciIgc3Ryb2tlLXdpZHRoPSIxLjUiIHN0cm9rZS1saW5lY2FwPSJyb3VuZCIgc3Ryb2tlLWxpbmVqb2luPSJyb3VuZCIgY2xhc3M9Imljb24gaWNvbi10YWJsZXIgaWNvbnMtdGFibGVyLW91dGxpbmUgaWNvbi10YWJsZXItdGlsZGUiPjxwYXRoIGQ9Ik0wIDBoMjR2MjRIMHoiIHN0cm9rZT0ibm9uZSIvPjxwYXRoIGQ9Ik00IDEyYzAtMS42NTcgMS41OTItMyAzLjU1Ni0zczMuMTEgMS41IDQuNDQ0IDNjMS4zMzMgMS41IDIuNDggMyA0LjQ0NCAzUzIwIDEzLjY1NyAyMCAxMiIvPjwvc3ZnPg==);mask-image:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyNCIgaGVpZ2h0PSIyNCIgdmlld0JveD0iMCAwIDI0IDI0IiBmaWxsPSJub25lIiBzdHJva2U9ImN1cnJlbnRDb2xvciIgc3Ryb2tlLXdpZHRoPSIxLjUiIHN0cm9rZS1saW5lY2FwPSJyb3VuZCIgc3Ryb2tlLWxpbmVqb2luPSJyb3VuZCIgY2xhc3M9Imljb24gaWNvbi10YWJsZXIgaWNvbnMtdGFibGVyLW91dGxpbmUgaWNvbi10YWJsZXItdGlsZGUiPjxwYXRoIGQ9Ik0wIDBoMjR2MjRIMHoiIHN0cm9rZT0ibm9uZSIvPjxwYXRoIGQ9Ik00IDEyYzAtMS42NTcgMS41OTItMyAzLjU1Ni0zczMuMTEgMS41IDQuNDQ0IDNjMS4zMzMgMS41IDIuNDggMyA0LjQ0NCAzUzIwIDEzLjY1NyAyMCAxMiIvPjwvc3ZnPg==)}s:after{-webkit-mask-image:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyNCIgaGVpZ2h0PSIyNCIgdmlld0JveD0iMCAwIDI0IDI0IiBmaWxsPSJub25lIiBzdHJva2U9ImN1cnJlbnRDb2xvciIgc3Ryb2tlLXdpZHRoPSIxLjUiIHN0cm9rZS1saW5lY2FwPSJyb3VuZCIgc3Ryb2tlLWxpbmVqb2luPSJyb3VuZCIgY2xhc3M9Imljb24gaWNvbi10YWJsZXIgaWNvbnMtdGFibGVyLW91dGxpbmUgaWNvbi10YWJsZXItY2FuY2VsIj48cGF0aCBkPSJNMCAwaDI0djI0SDB6IiBzdHJva2U9Im5vbmUiLz48cGF0aCBkPSJNMyAxMmE5IDkgMCAxIDAgMTggMCA5IDkgMCAxIDAtMTggMG0xNS4zNjQtNi4zNjRMNS42MzYgMTguMzY0Ii8+PC9zdmc+);mask-image:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyNCIgaGVpZ2h0PSIyNCIgdmlld0JveD0iMCAwIDI0IDI0IiBmaWxsPSJub25lIiBzdHJva2U9ImN1cnJlbnRDb2xvciIgc3Ryb2tlLXdpZHRoPSIxLjUiIHN0cm9rZS1saW5lY2FwPSJyb3VuZCIgc3Ryb2tlLWxpbmVqb2luPSJyb3VuZCIgY2xhc3M9Imljb24gaWNvbi10YWJsZXIgaWNvbnMtdGFibGVyLW91dGxpbmUgaWNvbi10YWJsZXItY2FuY2VsIj48cGF0aCBkPSJNMCAwaDI0djI0SDB6IiBzdHJva2U9Im5vbmUiLz48cGF0aCBkPSJNMyAxMmE5IDkgMCAxIDAgMTggMCA5IDkgMCAxIDAtMTggMG0xNS4zNjQtNi4zNjRMNS42MzYgMTguMzY0Ii8+PC9zdmc+)}em:after{margin-inline-start:-.2em;-webkit-mask-image:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyNCIgaGVpZ2h0PSIyNCIgdmlld0JveD0iMCAwIDI0IDI0IiBmaWxsPSJub25lIiBzdHJva2U9ImN1cnJlbnRDb2xvciIgc3Ryb2tlLXdpZHRoPSIxLjUiIHN0cm9rZS1saW5lY2FwPSJyb3VuZCIgc3Ryb2tlLWxpbmVqb2luPSJyb3VuZCIgY2xhc3M9Imljb24gaWNvbi10YWJsZXIgaWNvbnMtdGFibGVyLW91dGxpbmUgaWNvbi10YWJsZXItcXVlc3Rpb24tbWFyayI+PHBhdGggc3Ryb2tlPSJub25lIiBkPSJNMCAwaDI0djI0SDB6IiBmaWxsPSJub25lIi8+PHBhdGggZD0iTTggOGEzLjUgMyAwIDAgMSAzLjUgLTNoMWEzLjUgMyAwIDAgMSAzLjUgM2EzIDMgMCAwIDEgLTIgM2EzIDQgMCAwIDAgLTIgNCIgLz48cGF0aCBkPSJNMTIgMTlsMCAuMDEiIC8+PC9zdmc+);mask-image:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyNCIgaGVpZ2h0PSIyNCIgdmlld0JveD0iMCAwIDI0IDI0IiBmaWxsPSJub25lIiBzdHJva2U9ImN1cnJlbnRDb2xvciIgc3Ryb2tlLXdpZHRoPSIxLjUiIHN0cm9rZS1saW5lY2FwPSJyb3VuZCIgc3Ryb2tlLWxpbmVqb2luPSJyb3VuZCIgY2xhc3M9Imljb24gaWNvbi10YWJsZXIgaWNvbnMtdGFibGVyLW91dGxpbmUgaWNvbi10YWJsZXItcXVlc3Rpb24tbWFyayI+PHBhdGggc3Ryb2tlPSJub25lIiBkPSJNMCAwaDI0djI0SDB6IiBmaWxsPSJub25lIi8+PHBhdGggZD0iTTggOGEzLjUgMyAwIDAgMSAzLjUgLTNoMWEzLjUgMyAwIDAgMSAzLjUgM2EzIDMgMCAwIDEgLTIgM2EzIDQgMCAwIDAgLTIgNCIgLz48cGF0aCBkPSJNMTIgMTlsMCAuMDEiIC8+PC9zdmc+)}kbd:after{-webkit-mask-image:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyNCIgaGVpZ2h0PSIyNCIgdmlld0JveD0iMCAwIDI0IDI0IiBmaWxsPSJub25lIiBzdHJva2U9ImN1cnJlbnRDb2xvciIgc3Ryb2tlLXdpZHRoPSIxLjUiIHN0cm9rZS1saW5lY2FwPSJyb3VuZCIgc3Ryb2tlLWxpbmVqb2luPSJyb3VuZCIgY2xhc3M9Imljb24gaWNvbi10YWJsZXIgaWNvbnMtdGFibGVyLW91dGxpbmUgaWNvbi10YWJsZXIta2V5Ym9hcmQiPjxwYXRoIHN0cm9rZT0ibm9uZSIgZD0iTTAgMGgyNHYyNEgweiIgZmlsbD0ibm9uZSIvPjxwYXRoIGQ9Ik0yIDZtMCAyYTIgMiAwIDAgMSAyIC0yaDE2YTIgMiAwIDAgMSAyIDJ2OGEyIDIgMCAwIDEgLTIgMmgtMTZhMiAyIDAgMCAxIC0yIC0yeiIgLz48cGF0aCBkPSJNNiAxMGwwIC4wMSIgLz48cGF0aCBkPSJNMTAgMTBsMCAuMDEiIC8+PHBhdGggZD0iTTE0IDEwbDAgLjAxIiAvPjxwYXRoIGQ9Ik0xOCAxMGwwIC4wMSIgLz48cGF0aCBkPSJNNiAxNGwwIC4wMSIgLz48cGF0aCBkPSJNMTggMTRsMCAuMDEiIC8+PHBhdGggZD0iTTEwIDE0bDQgLjAxIiAvPjwvc3ZnPg==);mask-image:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyNCIgaGVpZ2h0PSIyNCIgdmlld0JveD0iMCAwIDI0IDI0IiBmaWxsPSJub25lIiBzdHJva2U9ImN1cnJlbnRDb2xvciIgc3Ryb2tlLXdpZHRoPSIxLjUiIHN0cm9rZS1saW5lY2FwPSJyb3VuZCIgc3Ryb2tlLWxpbmVqb2luPSJyb3VuZCIgY2xhc3M9Imljb24gaWNvbi10YWJsZXIgaWNvbnMtdGFibGVyLW91dGxpbmUgaWNvbi10YWJsZXIta2V5Ym9hcmQiPjxwYXRoIHN0cm9rZT0ibm9uZSIgZD0iTTAgMGgyNHYyNEgweiIgZmlsbD0ibm9uZSIvPjxwYXRoIGQ9Ik0yIDZtMCAyYTIgMiAwIDAgMSAyIC0yaDE2YTIgMiAwIDAgMSAyIDJ2OGEyIDIgMCAwIDEgLTIgMmgtMTZhMiAyIDAgMCAxIC0yIC0yeiIgLz48cGF0aCBkPSJNNiAxMGwwIC4wMSIgLz48cGF0aCBkPSJNMTAgMTBsMCAuMDEiIC8+PHBhdGggZD0iTTE0IDEwbDAgLjAxIiAvPjxwYXRoIGQ9Ik0xOCAxMGwwIC4wMSIgLz48cGF0aCBkPSJNNiAxNGwwIC4wMSIgLz48cGF0aCBkPSJNMTggMTRsMCAuMDEiIC8+PHBhdGggZD0iTTEwIDE0bDQgLjAxIiAvPjwvc3ZnPg==)}samp:after{-webkit-mask-image:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyNCIgaGVpZ2h0PSIyNCIgdmlld0JveD0iMCAwIDI0IDI0IiBmaWxsPSJub25lIiBzdHJva2U9ImN1cnJlbnRDb2xvciIgc3Ryb2tlLXdpZHRoPSIxLjUiIHN0cm9rZS1saW5lY2FwPSJyb3VuZCIgc3Ryb2tlLWxpbmVqb2luPSJyb3VuZCIgY2xhc3M9Imljb24gaWNvbi10YWJsZXIgaWNvbnMtdGFibGVyLW91dGxpbmUgaWNvbi10YWJsZXItbG9nb3V0Ij48cGF0aCBzdHJva2U9Im5vbmUiIGQ9Ik0wIDBoMjR2MjRIMHoiIGZpbGw9Im5vbmUiLz48cGF0aCBkPSJNMTQgOHYtMmEyIDIgMCAwIDAgLTIgLTJoLTdhMiAyIDAgMCAwIC0yIDJ2MTJhMiAyIDAgMCAwIDIgMmg3YTIgMiAwIDAgMCAyIC0ydi0yIiAvPjxwYXRoIGQ9Ik05IDEyaDEybC0zIC0zIiAvPjxwYXRoIGQ9Ik0xOCAxNWwzIC0zIiAvPjwvc3ZnPg==);mask-image:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyNCIgaGVpZ2h0PSIyNCIgdmlld0JveD0iMCAwIDI0IDI0IiBmaWxsPSJub25lIiBzdHJva2U9ImN1cnJlbnRDb2xvciIgc3Ryb2tlLXdpZHRoPSIxLjUiIHN0cm9rZS1saW5lY2FwPSJyb3VuZCIgc3Ryb2tlLWxpbmVqb2luPSJyb3VuZCIgY2xhc3M9Imljb24gaWNvbi10YWJsZXIgaWNvbnMtdGFibGVyLW91dGxpbmUgaWNvbi10YWJsZXItbG9nb3V0Ij48cGF0aCBzdHJva2U9Im5vbmUiIGQ9Ik0wIDBoMjR2MjRIMHoiIGZpbGw9Im5vbmUiLz48cGF0aCBkPSJNMTQgOHYtMmEyIDIgMCAwIDAgLTIgLTJoLTdhMiAyIDAgMCAwIC0yIDJ2MTJhMiAyIDAgMCAwIDIgMmg3YTIgMiAwIDAgMCAyIC0ydi0yIiAvPjxwYXRoIGQ9Ik05IDEyaDEybC0zIC0zIiAvPjxwYXRoIGQ9Ik0xOCAxNWwzIC0zIiAvPjwvc3ZnPg==)}output:after{-webkit-mask-image:url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMjQiIGhlaWdodD0iMjQiIHZpZXdCb3g9IjAgMCAyNCAyNCIgZmlsbD0ibm9uZSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj48ZyBjbGlwLXBhdGg9InVybCgjY2xpcDBfOF8yMCkiIHN0cm9rZT0iIzAwMCIgc3Ryb2tlLXdpZHRoPSIxLjUiIHN0cm9rZS1saW5lY2FwPSJyb3VuZCIgc3Ryb2tlLWxpbmVqb2luPSJyb3VuZCI+PHBhdGggZD0iTTE0IDhWNmEyIDIgMCAwIDAtMi0ySDVhMiAyIDAgMCAwLTIgMnYxMmEyIDIgMCAwIDAgMiAyaDdhMiAyIDAgMCAwIDItMnYtMm00LTcgMyAzaC02bTMgMyAzLTMiLz48L2c+PC9zdmc+);mask-image:url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMjQiIGhlaWdodD0iMjQiIHZpZXdCb3g9IjAgMCAyNCAyNCIgZmlsbD0ibm9uZSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj48ZyBjbGlwLXBhdGg9InVybCgjY2xpcDBfOF8yMCkiIHN0cm9rZT0iIzAwMCIgc3Ryb2tlLXdpZHRoPSIxLjUiIHN0cm9rZS1saW5lY2FwPSJyb3VuZCIgc3Ryb2tlLWxpbmVqb2luPSJyb3VuZCI+PHBhdGggZD0iTTE0IDhWNmEyIDIgMCAwIDAtMi0ySDVhMiAyIDAgMCAwLTIgMnYxMmEyIDIgMCAwIDAgMiAyaDdhMiAyIDAgMCAwIDItMnYtMm00LTcgMyAzaC02bTMgMyAzLTMiLz48L2c+PC9zdmc+)}cite:after{-webkit-mask-image:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyNCIgaGVpZ2h0PSIyNCIgdmlld0JveD0iMCAwIDI0IDI0IiBmaWxsPSJub25lIiBzdHJva2U9ImN1cnJlbnRDb2xvciIgc3Ryb2tlLXdpZHRoPSIxLjUiIHN0cm9rZS1saW5lY2FwPSJyb3VuZCIgc3Ryb2tlLWxpbmVqb2luPSJyb3VuZCIgY2xhc3M9Imljb24gaWNvbi10YWJsZXIgaWNvbnMtdGFibGVyLW91dGxpbmUgaWNvbi10YWJsZXItZmlsZSI+PHBhdGggc3Ryb2tlPSJub25lIiBkPSJNMCAwaDI0djI0SDB6IiBmaWxsPSJub25lIi8+PHBhdGggZD0iTTE0IDN2NGExIDEgMCAwIDAgMSAxaDQiIC8+PHBhdGggZD0iTTE3IDIxaC0xMGEyIDIgMCAwIDEgLTIgLTJ2LTE0YTIgMiAwIDAgMSAyIC0yaDdsNSA1djExYTIgMiAwIDAgMSAtMiAyIiAvPjwvc3ZnPg==);mask-image:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyNCIgaGVpZ2h0PSIyNCIgdmlld0JveD0iMCAwIDI0IDI0IiBmaWxsPSJub25lIiBzdHJva2U9ImN1cnJlbnRDb2xvciIgc3Ryb2tlLXdpZHRoPSIxLjUiIHN0cm9rZS1saW5lY2FwPSJyb3VuZCIgc3Ryb2tlLWxpbmVqb2luPSJyb3VuZCIgY2xhc3M9Imljb24gaWNvbi10YWJsZXIgaWNvbnMtdGFibGVyLW91dGxpbmUgaWNvbi10YWJsZXItZmlsZSI+PHBhdGggc3Ryb2tlPSJub25lIiBkPSJNMCAwaDI0djI0SDB6IiBmaWxsPSJub25lIi8+PHBhdGggZD0iTTE0IDN2NGExIDEgMCAwIDAgMSAxaDQiIC8+PHBhdGggZD0iTTE3IDIxaC0xMGEyIDIgMCAwIDEgLTIgLTJ2LTE0YTIgMiAwIDAgMSAyIC0yaDdsNSA1djExYTIgMiAwIDAgMSAtMiAyIiAvPjwvc3ZnPg==)}map:where(:not(:has(p,pre))):after{-webkit-mask-image:url(data:image/svg+xml,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%2224%22%20height%3D%2224%22%20viewBox%3D%220%200%2024%2024%22%20fill%3D%22none%22%20stroke%3D%22currentColor%22%20stroke-width%3D%221.5%22%20stroke-linecap%3D%22round%22%20stroke-linejoin%3D%22round%22%20class%3D%22icon%20icon-tabler%20icons-tabler-outline%20icon-tabler-photo%22%3E%3Cpath%20stroke%3D%22none%22%20d%3D%22M0%200h24v24H0z%22%20fill%3D%22none%22%2F%3E%3Cpath%20d%3D%22M15%208h.01%22%20%2F%3E%3Cpath%20d%3D%22M3%206a3%203%200%200%201%203%20-3h12a3%203%200%200%201%203%203v12a3%203%200%200%201%20-3%203h-12a3%203%200%200%201%20-3%20-3v-12z%22%20%2F%3E%3Cpath%20d%3D%22M3%2016l5%20-5c.928%20-.893%202.072%20-.893%203%200l5%205%22%20%2F%3E%3Cpath%20d%3D%22M14%2014l1%20-1c.928%20-.893%202.072%20-.893%203%200l3%203%22%20%2F%3E%3C%2Fsvg%3E);mask-image:url(data:image/svg+xml,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%2224%22%20height%3D%2224%22%20viewBox%3D%220%200%2024%2024%22%20fill%3D%22none%22%20stroke%3D%22currentColor%22%20stroke-width%3D%221.5%22%20stroke-linecap%3D%22round%22%20stroke-linejoin%3D%22round%22%20class%3D%22icon%20icon-tabler%20icons-tabler-outline%20icon-tabler-photo%22%3E%3Cpath%20stroke%3D%22none%22%20d%3D%22M0%200h24v24H0z%22%20fill%3D%22none%22%2F%3E%3Cpath%20d%3D%22M15%208h.01%22%20%2F%3E%3Cpath%20d%3D%22M3%206a3%203%200%200%201%203%20-3h12a3%203%200%200%201%203%203v12a3%203%200%200%201%20-3%203h-12a3%203%200%200%201%20-3%20-3v-12z%22%20%2F%3E%3Cpath%20d%3D%22M3%2016l5%20-5c.928%20-.893%202.072%20-.893%203%200l5%205%22%20%2F%3E%3Cpath%20d%3D%22M14%2014l1%20-1c.928%20-.893%202.072%20-.893%203%200l3%203%22%20%2F%3E%3C%2Fsvg%3E)}:where(a:not(:has(p,pre)))[href]:after{-webkit-mask-image:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyNCIgaGVpZ2h0PSIyNCIgdmlld0JveD0iMCAwIDI0IDI0IiBmaWxsPSJub25lIiBzdHJva2U9ImN1cnJlbnRDb2xvciIgc3Ryb2tlLXdpZHRoPSIxLjUiIHN0cm9rZS1saW5lY2FwPSJyb3VuZCIgc3Ryb2tlLWxpbmVqb2luPSJyb3VuZCIgY2xhc3M9Imljb24gaWNvbi10YWJsZXIgaWNvbnMtdGFibGVyLW91dGxpbmUgaWNvbi10YWJsZXItZXh0ZXJuYWwtbGluayI+PHBhdGggc3Ryb2tlPSJub25lIiBkPSJNMCAwaDI0djI0SDB6IiBmaWxsPSJub25lIi8+PHBhdGggZD0iTTEyIDZoLTZhMiAyIDAgMCAwIC0yIDJ2MTBhMiAyIDAgMCAwIDIgMmgxMGEyIDIgMCAwIDAgMiAtMnYtNiIgLz48cGF0aCBkPSJNMTEgMTNsOSAtOSIgLz48cGF0aCBkPSJNMTUgNGg1djUiIC8+PC9zdmc+);mask-image:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyNCIgaGVpZ2h0PSIyNCIgdmlld0JveD0iMCAwIDI0IDI0IiBmaWxsPSJub25lIiBzdHJva2U9ImN1cnJlbnRDb2xvciIgc3Ryb2tlLXdpZHRoPSIxLjUiIHN0cm9rZS1saW5lY2FwPSJyb3VuZCIgc3Ryb2tlLWxpbmVqb2luPSJyb3VuZCIgY2xhc3M9Imljb24gaWNvbi10YWJsZXIgaWNvbnMtdGFibGVyLW91dGxpbmUgaWNvbi10YWJsZXItZXh0ZXJuYWwtbGluayI+PHBhdGggc3Ryb2tlPSJub25lIiBkPSJNMCAwaDI0djI0SDB6IiBmaWxsPSJub25lIi8+PHBhdGggZD0iTTEyIDZoLTZhMiAyIDAgMCAwIC0yIDJ2MTBhMiAyIDAgMCAwIDIgMmgxMGEyIDIgMCAwIDAgMiAtMnYtNiIgLz48cGF0aCBkPSJNMTEgMTNsOSAtOSIgLz48cGF0aCBkPSJNMTUgNGg1djUiIC8+PC9zdmc+)}:where(a:not(:has(p,pre)))[href]:hover{cursor:pointer;text-decoration:underline;text-decoration-thickness:1px}[role=button],button,select,textarea,:where(input[type]){font:inherit;border:calc(1px * var(--border-width)) solid var(--border-color);padding:0 calc(.5em * var(--border-width)) var(--lh-pad);accent-color:currentColor;cursor:pointer;background-color:#0000}:is([role=button],button,select,textarea,:where(input[type]))[disabled]{opacity:.5}select{white-space:nowrap;padding-right:1.5em;position:relative;overflow:hidden}select:after{content:var(--content,"");background-color:var(--background-color);border-left:1px solid var(--border-color);width:1em;height:100%;display:block;position:absolute;top:0;right:0}select::picker-icon{z-index:10;padding-top:var(--lh-pad);transform-origin:50% 60%;position:absolute;right:.4em}[role=button]{--content:none}:where(input[type=text][list],input[type=search][list],input[type=tel][list],input[type=url][list],input[type=email][list]){background-image:linear-gradient(to right, transparent calc(100% - 1rem), var(--border-color) calc(100% - 1rem), var(--border-color) calc(100% - 1rem + 1px), transparent calc(100% - 1rem + 1px));padding-right:1em}:where(input[type=text][list],input[type=search][list],input[type=tel][list],input[type=url][list],input[type=email][list])::-webkit-calendar-picker-indicator{appearance:none;display:none!important}span:has(>:where(input[type=text][list],input[type=search][list],input[type=tel][list],input[type=url][list],input[type=email][list]):only-child):focus-within:after{content:var(--content,"");background-color:currentColor;width:.5em;height:.5em;position:absolute;top:calc(50% - .3125em);right:.3em;-webkit-mask-image:url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='%23000'><path d='M20.118 3h-16.225a2.914 2.914 0 0 0 -2.503 4.371l8.116 13.549a2.917 2.917 0 0 0 4.987 .005l8.11 -13.539a2.914 2.914 0 0 0 -2.486 -4.386z' /></svg>");mask-image:url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='%23000'><path d='M20.118 3h-16.225a2.914 2.914 0 0 0 -2.503 4.371l8.116 13.549a2.917 2.917 0 0 0 4.987 .005l8.11 -13.539a2.914 2.914 0 0 0 -2.486 -4.386z' /></svg>");-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat}span:has(>:where(textarea,input[type=radio],input[type=range],input[type=checkbox])){vertical-align:middle}select{appearance:base-select;border-radius:0;align-items:center}select::picker-icon{font-size:.7em;transition:rotate .4s}select:open::picker-icon{rotate:180deg}span:where(:has(>input:only-child)),span:where(:has(>select:only-child)){display:inline-flex;position:relative}span>:where(input[type=url]:only-child),span>:where(input[type=tel]:only-child),span>:where(input[type=text]:only-child),span>:where(input[type=email]:only-child),span>:where(input[type=number]:only-child),span>:where(input[type=search]:only-child),span>:where(input[type=password]:only-child){padding-inline-start:1.4em}:where(span:has(>:where(input[type=tel],input[type=url],input[type=text],input[type=email],input[type=number],input[type=search],input[type=password]):only-child)):before{content:var(--content,"");background-color:currentColor;width:1em;height:1em;margin-block:auto;font-size:.75em;display:block;position:absolute;top:0;bottom:0;left:.4em;-webkit-mask-size:cover;mask-size:cover;-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat}span:where(:has(input[type=search]:only-child)):before{-webkit-mask-image:url(data:image/svg+xml,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%2224%22%20height%3D%2224%22%20viewBox%3D%220%200%2024%2024%22%20fill%3D%22none%22%20stroke%3D%22currentColor%22%20stroke-width%3D%221.5%22%20stroke-linecap%3D%22round%22%20stroke-linejoin%3D%22round%22%20class%3D%22icon%20icon-tabler%20icons-tabler-outline%20icon-tabler-search%22%3E%3Cpath%20stroke%3D%22none%22%20d%3D%22M0%200h24v24H0z%22%20fill%3D%22none%22%2F%3E%3Cpath%20d%3D%22M10%2010m-7%200a7%207%200%201%200%2014%200a7%207%200%201%200%20-14%200%22%20%2F%3E%3Cpath%20d%3D%22M21%2021l-6%20-6%22%20%2F%3E%3C%2Fsvg%3E);mask-image:url(data:image/svg+xml,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%2224%22%20height%3D%2224%22%20viewBox%3D%220%200%2024%2024%22%20fill%3D%22none%22%20stroke%3D%22currentColor%22%20stroke-width%3D%221.5%22%20stroke-linecap%3D%22round%22%20stroke-linejoin%3D%22round%22%20class%3D%22icon%20icon-tabler%20icons-tabler-outline%20icon-tabler-search%22%3E%3Cpath%20stroke%3D%22none%22%20d%3D%22M0%200h24v24H0z%22%20fill%3D%22none%22%2F%3E%3Cpath%20d%3D%22M10%2010m-7%200a7%207%200%201%200%2014%200a7%207%200%201%200%20-14%200%22%20%2F%3E%3Cpath%20d%3D%22M21%2021l-6%20-6%22%20%2F%3E%3C%2Fsvg%3E)}span:where(:has(input[type=text]:only-child)):before{-webkit-mask-image:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyNCIgaGVpZ2h0PSIyNCIgdmlld0JveD0iMCAwIDI0IDI0IiBmaWxsPSJub25lIiBzdHJva2U9ImN1cnJlbnRDb2xvciIgc3Ryb2tlLXdpZHRoPSIxLjUiIHN0cm9rZS1saW5lY2FwPSJyb3VuZCIgc3Ryb2tlLWxpbmVqb2luPSJyb3VuZCIgY2xhc3M9Imljb24gaWNvbi10YWJsZXIgaWNvbnMtdGFibGVyLW91dGxpbmUgaWNvbi10YWJsZXItdGV4dC1pbmNyZWFzZSI+PHBhdGggZD0iTTAgMGgyNHYyNEgweiIgc3Ryb2tlPSJub25lIi8+PHBhdGggZD0iTTQgMTlWOC41YTMuNSAzLjUgMCAxIDEgNyAwVjE5bS03LTZoN203LTR2Nm0zLTNoLTYiLz48L3N2Zz4=);mask-image:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyNCIgaGVpZ2h0PSIyNCIgdmlld0JveD0iMCAwIDI0IDI0IiBmaWxsPSJub25lIiBzdHJva2U9ImN1cnJlbnRDb2xvciIgc3Ryb2tlLXdpZHRoPSIxLjUiIHN0cm9rZS1saW5lY2FwPSJyb3VuZCIgc3Ryb2tlLWxpbmVqb2luPSJyb3VuZCIgY2xhc3M9Imljb24gaWNvbi10YWJsZXIgaWNvbnMtdGFibGVyLW91dGxpbmUgaWNvbi10YWJsZXItdGV4dC1pbmNyZWFzZSI+PHBhdGggZD0iTTAgMGgyNHYyNEgweiIgc3Ryb2tlPSJub25lIi8+PHBhdGggZD0iTTQgMTlWOC41YTMuNSAzLjUgMCAxIDEgNyAwVjE5bS03LTZoN203LTR2Nm0zLTNoLTYiLz48L3N2Zz4=)}span:where(:has(input[type=tel]:only-child)):before{-webkit-mask-image:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyNCIgaGVpZ2h0PSIyNCIgdmlld0JveD0iMCAwIDI0IDI0IiBmaWxsPSJub25lIiBzdHJva2U9ImN1cnJlbnRDb2xvciIgc3Ryb2tlLXdpZHRoPSIxLjUiIHN0cm9rZS1saW5lY2FwPSJyb3VuZCIgc3Ryb2tlLWxpbmVqb2luPSJyb3VuZCIgY2xhc3M9Imljb24gaWNvbi10YWJsZXIgaWNvbnMtdGFibGVyLW91dGxpbmUgaWNvbi10YWJsZXItcGhvbmUiPjxwYXRoIGQ9Ik0wIDBoMjR2MjRIMHoiIHN0cm9rZT0ibm9uZSIvPjxwYXRoIGQ9Ik01IDRoNGwyIDUtMi41IDEuNWExMSAxMSAwIDAgMCA1IDVMMTUgMTNsNSAydjRhMiAyIDAgMCAxLTIgMkExNiAxNiAwIDAgMSAzIDZhMiAyIDAgMCAxIDItMiIvPjwvc3ZnPg==);mask-image:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyNCIgaGVpZ2h0PSIyNCIgdmlld0JveD0iMCAwIDI0IDI0IiBmaWxsPSJub25lIiBzdHJva2U9ImN1cnJlbnRDb2xvciIgc3Ryb2tlLXdpZHRoPSIxLjUiIHN0cm9rZS1saW5lY2FwPSJyb3VuZCIgc3Ryb2tlLWxpbmVqb2luPSJyb3VuZCIgY2xhc3M9Imljb24gaWNvbi10YWJsZXIgaWNvbnMtdGFibGVyLW91dGxpbmUgaWNvbi10YWJsZXItcGhvbmUiPjxwYXRoIGQ9Ik0wIDBoMjR2MjRIMHoiIHN0cm9rZT0ibm9uZSIvPjxwYXRoIGQ9Ik01IDRoNGwyIDUtMi41IDEuNWExMSAxMSAwIDAgMCA1IDVMMTUgMTNsNSAydjRhMiAyIDAgMCAxLTIgMkExNiAxNiAwIDAgMSAzIDZhMiAyIDAgMCAxIDItMiIvPjwvc3ZnPg==)}span:where(:has(input[type=email]:only-child)):before{-webkit-mask-image:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyNCIgaGVpZ2h0PSIyNCIgdmlld0JveD0iMCAwIDI0IDI0IiBmaWxsPSJub25lIiBzdHJva2U9ImN1cnJlbnRDb2xvciIgc3Ryb2tlLXdpZHRoPSIxLjUiIHN0cm9rZS1saW5lY2FwPSJyb3VuZCIgc3Ryb2tlLWxpbmVqb2luPSJyb3VuZCIgY2xhc3M9Imljb24gaWNvbi10YWJsZXIgaWNvbnMtdGFibGVyLW91dGxpbmUgaWNvbi10YWJsZXItYXQiPjxwYXRoIGQ9Ik0wIDBoMjR2MjRIMHoiIHN0cm9rZT0ibm9uZSIvPjxwYXRoIGQ9Ik04IDEyYTQgNCAwIDEgMCA4IDAgNCA0IDAgMSAwLTggMCIvPjxwYXRoIGQ9Ik0xNiAxMnYxLjVhMi41IDIuNSAwIDAgMCA1IDBWMTJhOSA5IDAgMSAwLTUuNSA4LjI4Ii8+PC9zdmc+);mask-image:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyNCIgaGVpZ2h0PSIyNCIgdmlld0JveD0iMCAwIDI0IDI0IiBmaWxsPSJub25lIiBzdHJva2U9ImN1cnJlbnRDb2xvciIgc3Ryb2tlLXdpZHRoPSIxLjUiIHN0cm9rZS1saW5lY2FwPSJyb3VuZCIgc3Ryb2tlLWxpbmVqb2luPSJyb3VuZCIgY2xhc3M9Imljb24gaWNvbi10YWJsZXIgaWNvbnMtdGFibGVyLW91dGxpbmUgaWNvbi10YWJsZXItYXQiPjxwYXRoIGQ9Ik0wIDBoMjR2MjRIMHoiIHN0cm9rZT0ibm9uZSIvPjxwYXRoIGQ9Ik04IDEyYTQgNCAwIDEgMCA4IDAgNCA0IDAgMSAwLTggMCIvPjxwYXRoIGQ9Ik0xNiAxMnYxLjVhMi41IDIuNSAwIDAgMCA1IDBWMTJhOSA5IDAgMSAwLTUuNSA4LjI4Ii8+PC9zdmc+)}span:where(:has(input[type=number]:only-child)):before{-webkit-mask-image:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyNCIgaGVpZ2h0PSIyNCIgdmlld0JveD0iMCAwIDI0IDI0IiBmaWxsPSJub25lIiBzdHJva2U9ImN1cnJlbnRDb2xvciIgc3Ryb2tlLXdpZHRoPSIxLjUiIHN0cm9rZS1saW5lY2FwPSJyb3VuZCIgc3Ryb2tlLWxpbmVqb2luPSJyb3VuZCIgY2xhc3M9Imljb24gaWNvbi10YWJsZXIgaWNvbnMtdGFibGVyLW91dGxpbmUgaWNvbi10YWJsZXItbnVtYmVyLTEyMyI+PHBhdGggZD0iTTAgMGgyNHYyNEgweiIgc3Ryb2tlPSJub25lIi8+PHBhdGggZD0ibTMgMTAgMi0ydjhtNC04aDNhMSAxIDAgMCAxIDEgMXYyYTEgMSAwIDAgMS0xIDFoLTJhMSAxIDAgMCAwLTEgMXYyYTEgMSAwIDAgMCAxIDFoM200LThoMi41QTEuNSAxLjUgMCAwIDEgMjEgOS41djFhMS41IDEuNSAwIDAgMS0xLjUgMS41SDE4aDEuNWExLjUgMS41IDAgMCAxIDEuNSAxLjV2MWExLjUgMS41IDAgMCAxLTEuNSAxLjVIMTciLz48L3N2Zz4=);mask-image:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyNCIgaGVpZ2h0PSIyNCIgdmlld0JveD0iMCAwIDI0IDI0IiBmaWxsPSJub25lIiBzdHJva2U9ImN1cnJlbnRDb2xvciIgc3Ryb2tlLXdpZHRoPSIxLjUiIHN0cm9rZS1saW5lY2FwPSJyb3VuZCIgc3Ryb2tlLWxpbmVqb2luPSJyb3VuZCIgY2xhc3M9Imljb24gaWNvbi10YWJsZXIgaWNvbnMtdGFibGVyLW91dGxpbmUgaWNvbi10YWJsZXItbnVtYmVyLTEyMyI+PHBhdGggZD0iTTAgMGgyNHYyNEgweiIgc3Ryb2tlPSJub25lIi8+PHBhdGggZD0ibTMgMTAgMi0ydjhtNC04aDNhMSAxIDAgMCAxIDEgMXYyYTEgMSAwIDAgMS0xIDFoLTJhMSAxIDAgMCAwLTEgMXYyYTEgMSAwIDAgMCAxIDFoM200LThoMi41QTEuNSAxLjUgMCAwIDEgMjEgOS41djFhMS41IDEuNSAwIDAgMS0xLjUgMS41SDE4aDEuNWExLjUgMS41IDAgMCAxIDEuNSAxLjV2MWExLjUgMS41IDAgMCAxLTEuNSAxLjVIMTciLz48L3N2Zz4=)}span:where(:has(input[type=password]:only-child)):before{-webkit-mask-image:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyNCIgaGVpZ2h0PSIyNCIgdmlld0JveD0iMCAwIDI0IDI0IiBmaWxsPSJub25lIiBzdHJva2U9ImN1cnJlbnRDb2xvciIgc3Ryb2tlLXdpZHRoPSIxLjUiIHN0cm9rZS1saW5lY2FwPSJyb3VuZCIgc3Ryb2tlLWxpbmVqb2luPSJyb3VuZCIgY2xhc3M9Imljb24gaWNvbi10YWJsZXIgaWNvbnMtdGFibGVyLW91dGxpbmUgaWNvbi10YWJsZXItcGFzc3dvcmQiPjxwYXRoIGQ9Ik0wIDBoMjR2MjRIMHoiIHN0cm9rZT0ibm9uZSIvPjxwYXRoIGQ9Ik0xMiAxMHY0bS0yLTEgNC0ybS00IDAgNCAybS05LTN2NG0tMi0xIDQtMm0tNCAwIDQgMm0xMi0zdjRtLTItMSA0LTJtLTQgMCA0IDIiLz48L3N2Zz4=);mask-image:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyNCIgaGVpZ2h0PSIyNCIgdmlld0JveD0iMCAwIDI0IDI0IiBmaWxsPSJub25lIiBzdHJva2U9ImN1cnJlbnRDb2xvciIgc3Ryb2tlLXdpZHRoPSIxLjUiIHN0cm9rZS1saW5lY2FwPSJyb3VuZCIgc3Ryb2tlLWxpbmVqb2luPSJyb3VuZCIgY2xhc3M9Imljb24gaWNvbi10YWJsZXIgaWNvbnMtdGFibGVyLW91dGxpbmUgaWNvbi10YWJsZXItcGFzc3dvcmQiPjxwYXRoIGQ9Ik0wIDBoMjR2MjRIMHoiIHN0cm9rZT0ibm9uZSIvPjxwYXRoIGQ9Ik0xMiAxMHY0bS0yLTEgNC0ybS00IDAgNCAybS05LTN2NG0tMi0xIDQtMm0tNCAwIDQgMm0xMi0zdjRtLTItMSA0LTJtLTQgMCA0IDIiLz48L3N2Zz4=)}span:where(:has(input[type=url]:only-child)):before{-webkit-mask-image:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyNCIgaGVpZ2h0PSIyNCIgdmlld0JveD0iMCAwIDI0IDI0IiBmaWxsPSJub25lIiBzdHJva2U9ImN1cnJlbnRDb2xvciIgc3Ryb2tlLXdpZHRoPSIxLjUiIHN0cm9rZS1saW5lY2FwPSJyb3VuZCIgc3Ryb2tlLWxpbmVqb2luPSJyb3VuZCIgY2xhc3M9Imljb24gaWNvbi10YWJsZXIgaWNvbnMtdGFibGVyLW91dGxpbmUgaWNvbi10YWJsZXItd29ybGQtd3d3Ij48cGF0aCBkPSJNMCAwaDI0djI0SDB6IiBzdHJva2U9Im5vbmUiLz48cGF0aCBkPSJNMTkuNSA3QTkgOSAwIDAgMCAxMiAzYTguOTkgOC45OSAwIDAgMC03LjQ4NCA0Ii8+PHBhdGggZD0iTTExLjUgM2ExNyAxNyAwIDAgMC0xLjgyNiA0TTEyLjUgM2ExNyAxNyAwIDAgMSAxLjgyOCA0TTE5LjUgMTdhOSA5IDAgMCAxLTcuNSA0IDguOTkgOC45OSAwIDAgMS03LjQ4NC00Ii8+PHBhdGggZD0iTTExLjUgMjFhMTcgMTcgMCAwIDEtMS44MjYtNG0yLjgyNiA0YTE3IDE3IDAgMCAwIDEuODI4LTRNMiAxMGwxIDQgMS41LTRMNiAxNGwxLTRtMTAgMCAxIDQgMS41LTQgMS41IDQgMS00TTkuNSAxMGwxIDQgMS41LTQgMS41IDQgMS00Ii8+PC9zdmc+);mask-image:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyNCIgaGVpZ2h0PSIyNCIgdmlld0JveD0iMCAwIDI0IDI0IiBmaWxsPSJub25lIiBzdHJva2U9ImN1cnJlbnRDb2xvciIgc3Ryb2tlLXdpZHRoPSIxLjUiIHN0cm9rZS1saW5lY2FwPSJyb3VuZCIgc3Ryb2tlLWxpbmVqb2luPSJyb3VuZCIgY2xhc3M9Imljb24gaWNvbi10YWJsZXIgaWNvbnMtdGFibGVyLW91dGxpbmUgaWNvbi10YWJsZXItd29ybGQtd3d3Ij48cGF0aCBkPSJNMCAwaDI0djI0SDB6IiBzdHJva2U9Im5vbmUiLz48cGF0aCBkPSJNMTkuNSA3QTkgOSAwIDAgMCAxMiAzYTguOTkgOC45OSAwIDAgMC03LjQ4NCA0Ii8+PHBhdGggZD0iTTExLjUgM2ExNyAxNyAwIDAgMC0xLjgyNiA0TTEyLjUgM2ExNyAxNyAwIDAgMSAxLjgyOCA0TTE5LjUgMTdhOSA5IDAgMCAxLTcuNSA0IDguOTkgOC45OSAwIDAgMS03LjQ4NC00Ii8+PHBhdGggZD0iTTExLjUgMjFhMTcgMTcgMCAwIDEtMS44MjYtNG0yLjgyNiA0YTE3IDE3IDAgMCAwIDEuODI4LTRNMiAxMGwxIDQgMS41LTRMNiAxNGwxLTRtMTAgMCAxIDQgMS41LTQgMS41IDQgMS00TTkuNSAxMGwxIDQgMS41LTQgMS41IDQgMS00Ii8+PC9zdmc+)}
|
|
2
|
+
/*$vite$:1*/
|
package/dist/base.js
ADDED
|
@@ -0,0 +1,117 @@
|
|
|
1
|
+
//#region \0rolldown/runtime.js
|
|
2
|
+
var e = Object.defineProperty, t = (t, n) => {
|
|
3
|
+
let r = {};
|
|
4
|
+
for (var i in t) e(r, i, {
|
|
5
|
+
get: t[i],
|
|
6
|
+
enumerable: !0
|
|
7
|
+
});
|
|
8
|
+
return n || e(r, Symbol.toStringTag, { value: "Module" }), r;
|
|
9
|
+
};
|
|
10
|
+
//#endregion
|
|
11
|
+
//#region src/components/tabs.js
|
|
12
|
+
function n(e) {
|
|
13
|
+
let t = Array.from(e.querySelectorAll("[role=\"tab\"]"));
|
|
14
|
+
t.forEach((e) => {
|
|
15
|
+
e.addEventListener("click", (n) => i(t, e)), e.addEventListener("keydown", (n) => {
|
|
16
|
+
[" ", "Enter"].includes(n.key) ? (n.preventDefault(), n.stopPropagation(), i(t, e)) : [
|
|
17
|
+
"ArrowRight",
|
|
18
|
+
"ArrowLeft",
|
|
19
|
+
"Home",
|
|
20
|
+
"End"
|
|
21
|
+
].includes(n.key) && r(n, t, e);
|
|
22
|
+
});
|
|
23
|
+
});
|
|
24
|
+
}
|
|
25
|
+
function r(e, t, n) {
|
|
26
|
+
let r = t.indexOf(n);
|
|
27
|
+
if (r === -1) return;
|
|
28
|
+
let i = 0;
|
|
29
|
+
switch (e.key) {
|
|
30
|
+
case "ArrowRight":
|
|
31
|
+
i = (r + 1) % t.length;
|
|
32
|
+
break;
|
|
33
|
+
case "ArrowLeft":
|
|
34
|
+
i = (r - 1 + t.length) % t.length;
|
|
35
|
+
break;
|
|
36
|
+
case "Home":
|
|
37
|
+
i = 0;
|
|
38
|
+
break;
|
|
39
|
+
case "End":
|
|
40
|
+
i = t.length - 1;
|
|
41
|
+
break;
|
|
42
|
+
default: return;
|
|
43
|
+
}
|
|
44
|
+
t[i].focus(), e.preventDefault(), e.stopPropagation();
|
|
45
|
+
}
|
|
46
|
+
function i(e, t) {
|
|
47
|
+
for (let n of e) n === t ? (n.setAttribute("aria-selected", !0), n.tabIndex = 0) : (n.setAttribute("aria-selected", !1), n.tabIndex = -1);
|
|
48
|
+
let n = document.getElementById(t.getAttribute("aria-controls")), r = n.parentNode.children;
|
|
49
|
+
for (let e of r) e.hidden = e !== n;
|
|
50
|
+
}
|
|
51
|
+
//#endregion
|
|
52
|
+
//#region src/utils/match-container.js
|
|
53
|
+
function a(e, t, n) {
|
|
54
|
+
let r = null, i = new ResizeObserver((e) => {
|
|
55
|
+
let i = t * parseFloat(window.getComputedStyle(document.documentElement).fontSize);
|
|
56
|
+
for (let t of e) {
|
|
57
|
+
let e = (t.contentBoxSize[0] ? t.contentBoxSize[0].inlineSize : t.contentRect.width) <= i;
|
|
58
|
+
e !== r && (r = e, n({
|
|
59
|
+
matches: e,
|
|
60
|
+
currentPixelThreshold: i
|
|
61
|
+
}));
|
|
62
|
+
}
|
|
63
|
+
});
|
|
64
|
+
return i.observe(e), () => i.unobserve(e);
|
|
65
|
+
}
|
|
66
|
+
//#endregion
|
|
67
|
+
//#region src/components/enclosure.js
|
|
68
|
+
function o(e) {
|
|
69
|
+
let t = document.body;
|
|
70
|
+
a(t, e.dataset.media, (t) => {
|
|
71
|
+
e.querySelectorAll("[data-is=\"base-enclosure-button\"]").forEach((e) => {
|
|
72
|
+
let n = e.dataset.for, r = document.getElementById(n);
|
|
73
|
+
if (!r) return;
|
|
74
|
+
let i = {
|
|
75
|
+
role: "button",
|
|
76
|
+
tabindex: 0,
|
|
77
|
+
"aria-controls": n,
|
|
78
|
+
"aria-expanded": e.dataset.expanded.trim().toLowerCase() === "true"
|
|
79
|
+
};
|
|
80
|
+
t.matches ? (r.hidden = !i["aria-expanded"], Object.keys(i).forEach((t) => {
|
|
81
|
+
e.setAttribute(t, i[t]);
|
|
82
|
+
}), e.addEventListener("click", s), e.addEventListener("keydown", s)) : (Object.keys(i).forEach((t) => {
|
|
83
|
+
e.removeAttribute(t);
|
|
84
|
+
}), e.removeEventListener("click", s), e.removeEventListener("keyboard", s), r.hidden = !1);
|
|
85
|
+
});
|
|
86
|
+
});
|
|
87
|
+
}
|
|
88
|
+
function s(e) {
|
|
89
|
+
if (e.type === "keydown" && ![" ", "Enter"].includes(e.key)) return;
|
|
90
|
+
e.key === " " && e.preventDefault();
|
|
91
|
+
let t = e.currentTarget, n = t.dataset.for, r = document.querySelector(`#${n}:not([hidden] *)`);
|
|
92
|
+
r && (t.getAttribute("aria-expanded") === "false" ? (r.hidden = !1, t.setAttribute("aria-expanded", !0)) : (r.hidden = !0, t.setAttribute("aria-expanded", !1)));
|
|
93
|
+
}
|
|
94
|
+
//#endregion
|
|
95
|
+
//#region src/utils.js
|
|
96
|
+
var c = /* @__PURE__ */ t({ matchContainer: () => a }), l = {
|
|
97
|
+
"data-base-tabs": n,
|
|
98
|
+
"data-base-enclosure": o
|
|
99
|
+
}, u = {
|
|
100
|
+
utils: c,
|
|
101
|
+
init_all(e = document) {
|
|
102
|
+
Object.entries(l).forEach(([t, n]) => {
|
|
103
|
+
e.querySelectorAll(`[${t}]`).forEach((e) => {
|
|
104
|
+
if (e.dataset.baseEnhanced !== "true") try {
|
|
105
|
+
n(e), e.dataset.baseEnhanced = "true";
|
|
106
|
+
} catch (e) {
|
|
107
|
+
console.error(e);
|
|
108
|
+
}
|
|
109
|
+
});
|
|
110
|
+
});
|
|
111
|
+
}
|
|
112
|
+
};
|
|
113
|
+
typeof window < "u" && (window.base = u);
|
|
114
|
+
//#endregion
|
|
115
|
+
export { u as base };
|
|
116
|
+
|
|
117
|
+
//# sourceMappingURL=base.js.map
|
package/dist/base.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"base.js","names":["utils"],"sources":["../src/components/tabs.js","../src/utils/match-container.js","../src/components/enclosure.js","../src/utils.js","../src/index.js"],"sourcesContent":["export function init_tabs(component) {\r\n\r\n const tab_list = Array.from(component.querySelectorAll('[role=\"tab\"]'));\r\n\r\n tab_list.forEach(tab => {\r\n tab.addEventListener(\"click\", e => show_panel_of(tab_list, tab));\r\n tab.addEventListener(\"keydown\", e => {\r\n const tab_nav_keys = [\"ArrowRight\", \"ArrowLeft\", \"Home\", \"End\"];\r\n const panel_show_keys = [\" \", \"Enter\"]; \r\n\r\n if (panel_show_keys.includes(e.key)) {\r\n e.preventDefault();\r\n e.stopPropagation();\r\n\r\n show_panel_of(tab_list, tab);\r\n } else if (tab_nav_keys.includes(e.key)) {\r\n navigate_tabs(e, tab_list, tab);\r\n }\r\n });\r\n });\r\n}\r\n\r\nfunction navigate_tabs(e, tab_list, tab) {\r\n const current_tab_index = tab_list.indexOf(tab);\r\n \r\n if (current_tab_index === -1) return;\r\n \r\n let new_tab_index = 0;\r\n\r\n switch (e.key) {\r\n case \"ArrowRight\":\r\n new_tab_index = (current_tab_index + 1) % tab_list.length;\r\n break;\r\n case \"ArrowLeft\":\r\n new_tab_index = (current_tab_index - 1 + tab_list.length) % tab_list.length;\r\n break;\r\n case \"Home\":\r\n new_tab_index = 0;\r\n break;\r\n case \"End\":\r\n new_tab_index = tab_list.length - 1;\r\n break;\r\n default:\r\n return;\r\n }\r\n\r\n tab_list[new_tab_index].focus();\r\n\r\n e.preventDefault();\r\n e.stopPropagation();\r\n}\r\n\r\nfunction show_panel_of(tab_list, tab) {\r\n\r\n for (const item of tab_list) {\r\n if (item === tab) {\r\n item.setAttribute(\"aria-selected\", true);\r\n item.tabIndex = 0;\r\n } else {\r\n item.setAttribute(\"aria-selected\", false);\r\n item.tabIndex = -1;\r\n }\r\n }\r\n\r\n const panel = document.getElementById(tab.getAttribute(\"aria-controls\"));\r\n const panel_list = panel.parentNode.children;\r\n\r\n for (const item of panel_list) {\r\n if (item === panel) {\r\n item.hidden = false;\r\n } else {\r\n item.hidden = true;\r\n }\r\n }\r\n\r\n} ","\r\n// export function matchContainer(component, query, callback) {\r\n// // query in rem for relativeness, but calculation in pixels for fine grain checks\r\n\r\n// let matching = null;\r\n// let matches = false;\r\n// const range_query = query.replace(/\\s+/g, '').match(/^([\\d.]+)rem<=(width)<=([\\d.]+)rem$/);\r\n// const single_query = query.replace(/\\s+/g, '').match(/^width(>=|<=)([\\d.]+)rem$/);\r\n// const root_font_size = parseFloat(window.getComputedStyle(document.documentElement).fontSize) || 16;\r\n\r\n// const observer = new ResizeObserver((entries) => {\r\n\r\n// for (let entry of entries) {\r\n// const current_width = entry.contentBoxSize[0]\r\n// ? entry.contentBoxSize[0].inlineSize\r\n// : entry.contentRect.width;\r\n\r\n// if (range_query) {\r\n// const min_width = parseFloat(range_query[1]) * root_font_size;\r\n// const max_width = parseFloat(range_query[3]) * root_font_size;\r\n\r\n// matches = current_width >= min_width && current_width <= max_width;\r\n\r\n// } else if (single_query) {\r\n// const operator = single_query[1];\r\n// const bound = parseFloat(single_query[2]) * root_font_size;\r\n\r\n// matches = operator === '>=' ? current_width >= bound : current_width <= bound;\r\n\r\n// } else {\r\n// console.warn(`invalid query syntaxL \"${query}\"`);\r\n// return;\r\n// }\r\n\r\n// if (matches !== matching) {\r\n// matching = matches;\r\n// callback({matches, current_width});\r\n// }\r\n// }\r\n// });\r\n\r\n// observer.observe(component);\r\n// return () => observer.unobserve(element);\r\n// }\r\n\r\nexport function matchContainer(element, remValue, callback) {\r\n let wasMatching = null;\r\n\r\n const observer = new ResizeObserver((entries) => {\r\n // 1. Query the live computed pixel size of 1rem from the html root element\r\n const rootFontSize = parseFloat(window.getComputedStyle(document.documentElement).fontSize);\r\n\r\n // 2. Convert your target rem value into a relative pixel threshold\r\n const pixelThreshold = remValue * rootFontSize;\r\n\r\n for (let entry of entries) {\r\n // 3. Read the current internal layout width of the container\r\n const currentWidth = entry.contentBoxSize[0] \r\n ? entry.contentBoxSize[0].inlineSize \r\n : entry.contentRect.width;\r\n\r\n // 4. Evaluate the match condition against the dynamic pixel line\r\n const matches = currentWidth <= pixelThreshold;\r\n\r\n // 5. Fire the callback only when the boolean state flips\r\n if (matches !== wasMatching) {\r\n wasMatching = matches;\r\n callback({ matches, currentPixelThreshold: pixelThreshold });\r\n }\r\n }\r\n });\r\n\r\n observer.observe(element);\r\n return () => observer.unobserve(element);\r\n\r\n}\r\n","import { matchContainer } from \"../utils/match-container.js\";\r\n\r\nexport function init_enclosure(component) {\r\n const container = document.body;\r\n \r\n matchContainer(container, component.dataset.media, e => {\r\n const alt_btn_list = component.querySelectorAll('[data-is=\"base-enclosure-button\"]');\r\n\r\n alt_btn_list.forEach(alt_btn => {\r\n const target_id = alt_btn.dataset.for;\r\n const target = document.getElementById(target_id);\r\n\r\n if (!target) return;\r\n \r\n const target_attrs = {\r\n \"role\": \"button\",\r\n \"tabindex\": 0,\r\n \"aria-controls\": target_id,\r\n \"aria-expanded\": alt_btn.dataset.expanded.trim().toLowerCase() === \"true\",\r\n }\r\n\r\n if (e.matches) {\r\n\r\n // set default state\r\n target.hidden = !target_attrs['aria-expanded'];\r\n\r\n // Add properties\r\n Object.keys(target_attrs).forEach(attr => {\r\n alt_btn.setAttribute(attr, target_attrs[attr]);\r\n });\r\n\r\n // Add listeners\r\n alt_btn.addEventListener(\"click\", toggle_enclosure);\r\n alt_btn.addEventListener(\"keydown\", toggle_enclosure);\r\n } else {\r\n\r\n // Remove button properties\r\n Object.keys(target_attrs).forEach(attr => {\r\n alt_btn.removeAttribute(attr);\r\n });\r\n\r\n // Remove listeners\r\n alt_btn.removeEventListener(\"click\", toggle_enclosure);\r\n alt_btn.removeEventListener(\"keyboard\", toggle_enclosure);\r\n\r\n // Expand target permanently\r\n target.hidden = false;\r\n }\r\n });\r\n })\r\n}\r\n\r\nfunction toggle_enclosure(e) {\r\n\r\n // if keydown event, allow only spacebar and enter key\r\n if (e.type === 'keydown' && ![' ', 'Enter'].includes(e.key)) return;\r\n\r\n // Stop spacebar scrolling\r\n if (e.key === ' ') e.preventDefault();\r\n\r\n const alt_btn = e.currentTarget;\r\n const target_id = alt_btn.dataset.for;\r\n const target = document.querySelector(`#${target_id}:not([hidden] *)`);\r\n\r\n if (!target) return;\r\n\r\n const is_expanded = alt_btn.getAttribute('aria-expanded') === 'false';\r\n\r\n if (is_expanded) {\r\n target.hidden = false;\r\n alt_btn.setAttribute(\"aria-expanded\", true);\r\n } else {\r\n target.hidden = true;\r\n alt_btn.setAttribute(\"aria-expanded\", false);\r\n }\r\n}","export { matchContainer } from './utils/match-container.js';\r\n\r\n","import './index.css';\r\nimport { init_tabs } from \"./components/tabs.js\";\r\nimport { init_enclosure } from \"./components/enclosure.js\";\r\nimport * as utils from './utils.js';\r\n\r\nconst COMPONENT_REGISTRY = {\r\n \"data-base-tabs\": init_tabs,\r\n 'data-base-enclosure': init_enclosure,\r\n}\r\n\r\nexport const base = {\r\n\r\n utils: utils,\r\n init_all(root = document) {\r\n Object.entries(COMPONENT_REGISTRY).forEach(([selector, init_function]) => {\r\n root.querySelectorAll(`[${selector}]`).forEach(el => {\r\n if (el.dataset.baseEnhanced === 'true') return;\r\n\r\n try {\r\n init_function(el);\r\n el.dataset.baseEnhanced = 'true';\r\n } catch (e) {\r\n console.error(e);\r\n }\r\n })\r\n })\r\n }\r\n};\r\n\r\nif (typeof window !== 'undefined') {\r\n window.base = base;\r\n}"],"mappings":"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"}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
(function(e,t){typeof exports==`object`&&typeof module<`u`?t(exports):typeof define==`function`&&define.amd?define([`exports`],t):(e=typeof globalThis<`u`?globalThis:e||self,t(e[`@toheeb/base`]={}))})(this,function(e){Object.defineProperty(e,Symbol.toStringTag,{value:`Module`});var t=Object.defineProperty,n=(e,n)=>{let r={};for(var i in e)t(r,i,{get:e[i],enumerable:!0});return n||t(r,Symbol.toStringTag,{value:`Module`}),r};function r(e){let t=Array.from(e.querySelectorAll(`[role="tab"]`));t.forEach(e=>{e.addEventListener(`click`,n=>a(t,e)),e.addEventListener(`keydown`,n=>{[` `,`Enter`].includes(n.key)?(n.preventDefault(),n.stopPropagation(),a(t,e)):[`ArrowRight`,`ArrowLeft`,`Home`,`End`].includes(n.key)&&i(n,t,e)})})}function i(e,t,n){let r=t.indexOf(n);if(r===-1)return;let i=0;switch(e.key){case`ArrowRight`:i=(r+1)%t.length;break;case`ArrowLeft`:i=(r-1+t.length)%t.length;break;case`Home`:i=0;break;case`End`:i=t.length-1;break;default:return}t[i].focus(),e.preventDefault(),e.stopPropagation()}function a(e,t){for(let n of e)n===t?(n.setAttribute(`aria-selected`,!0),n.tabIndex=0):(n.setAttribute(`aria-selected`,!1),n.tabIndex=-1);let n=document.getElementById(t.getAttribute(`aria-controls`)),r=n.parentNode.children;for(let e of r)e.hidden=e!==n}function o(e,t,n){let r=null,i=new ResizeObserver(e=>{let i=t*parseFloat(window.getComputedStyle(document.documentElement).fontSize);for(let t of e){let e=(t.contentBoxSize[0]?t.contentBoxSize[0].inlineSize:t.contentRect.width)<=i;e!==r&&(r=e,n({matches:e,currentPixelThreshold:i}))}});return i.observe(e),()=>i.unobserve(e)}function s(e){let t=document.body;o(t,e.dataset.media,t=>{e.querySelectorAll(`[data-is="base-enclosure-button"]`).forEach(e=>{let n=e.dataset.for,r=document.getElementById(n);if(!r)return;let i={role:`button`,tabindex:0,"aria-controls":n,"aria-expanded":e.dataset.expanded.trim().toLowerCase()===`true`};t.matches?(r.hidden=!i[`aria-expanded`],Object.keys(i).forEach(t=>{e.setAttribute(t,i[t])}),e.addEventListener(`click`,c),e.addEventListener(`keydown`,c)):(Object.keys(i).forEach(t=>{e.removeAttribute(t)}),e.removeEventListener(`click`,c),e.removeEventListener(`keyboard`,c),r.hidden=!1)})})}function c(e){if(e.type===`keydown`&&![` `,`Enter`].includes(e.key))return;e.key===` `&&e.preventDefault();let t=e.currentTarget,n=t.dataset.for,r=document.querySelector(`#${n}:not([hidden] *)`);r&&(t.getAttribute(`aria-expanded`)===`false`?(r.hidden=!1,t.setAttribute(`aria-expanded`,!0)):(r.hidden=!0,t.setAttribute(`aria-expanded`,!1)))}var l=n({matchContainer:()=>o}),u={"data-base-tabs":r,"data-base-enclosure":s},d={utils:l,init_all(e=document){Object.entries(u).forEach(([t,n])=>{e.querySelectorAll(`[${t}]`).forEach(e=>{if(e.dataset.baseEnhanced!==`true`)try{n(e),e.dataset.baseEnhanced=`true`}catch(e){console.error(e)}})})}};typeof window<`u`&&(window.base=d),e.base=d});
|
|
2
|
+
//# sourceMappingURL=base.umd.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"base.umd.cjs","names":["utils"],"sources":["../src/components/tabs.js","../src/utils/match-container.js","../src/components/enclosure.js","../src/utils.js","../src/index.js"],"sourcesContent":["export function init_tabs(component) {\r\n\r\n const tab_list = Array.from(component.querySelectorAll('[role=\"tab\"]'));\r\n\r\n tab_list.forEach(tab => {\r\n tab.addEventListener(\"click\", e => show_panel_of(tab_list, tab));\r\n tab.addEventListener(\"keydown\", e => {\r\n const tab_nav_keys = [\"ArrowRight\", \"ArrowLeft\", \"Home\", \"End\"];\r\n const panel_show_keys = [\" \", \"Enter\"]; \r\n\r\n if (panel_show_keys.includes(e.key)) {\r\n e.preventDefault();\r\n e.stopPropagation();\r\n\r\n show_panel_of(tab_list, tab);\r\n } else if (tab_nav_keys.includes(e.key)) {\r\n navigate_tabs(e, tab_list, tab);\r\n }\r\n });\r\n });\r\n}\r\n\r\nfunction navigate_tabs(e, tab_list, tab) {\r\n const current_tab_index = tab_list.indexOf(tab);\r\n \r\n if (current_tab_index === -1) return;\r\n \r\n let new_tab_index = 0;\r\n\r\n switch (e.key) {\r\n case \"ArrowRight\":\r\n new_tab_index = (current_tab_index + 1) % tab_list.length;\r\n break;\r\n case \"ArrowLeft\":\r\n new_tab_index = (current_tab_index - 1 + tab_list.length) % tab_list.length;\r\n break;\r\n case \"Home\":\r\n new_tab_index = 0;\r\n break;\r\n case \"End\":\r\n new_tab_index = tab_list.length - 1;\r\n break;\r\n default:\r\n return;\r\n }\r\n\r\n tab_list[new_tab_index].focus();\r\n\r\n e.preventDefault();\r\n e.stopPropagation();\r\n}\r\n\r\nfunction show_panel_of(tab_list, tab) {\r\n\r\n for (const item of tab_list) {\r\n if (item === tab) {\r\n item.setAttribute(\"aria-selected\", true);\r\n item.tabIndex = 0;\r\n } else {\r\n item.setAttribute(\"aria-selected\", false);\r\n item.tabIndex = -1;\r\n }\r\n }\r\n\r\n const panel = document.getElementById(tab.getAttribute(\"aria-controls\"));\r\n const panel_list = panel.parentNode.children;\r\n\r\n for (const item of panel_list) {\r\n if (item === panel) {\r\n item.hidden = false;\r\n } else {\r\n item.hidden = true;\r\n }\r\n }\r\n\r\n} ","\r\n// export function matchContainer(component, query, callback) {\r\n// // query in rem for relativeness, but calculation in pixels for fine grain checks\r\n\r\n// let matching = null;\r\n// let matches = false;\r\n// const range_query = query.replace(/\\s+/g, '').match(/^([\\d.]+)rem<=(width)<=([\\d.]+)rem$/);\r\n// const single_query = query.replace(/\\s+/g, '').match(/^width(>=|<=)([\\d.]+)rem$/);\r\n// const root_font_size = parseFloat(window.getComputedStyle(document.documentElement).fontSize) || 16;\r\n\r\n// const observer = new ResizeObserver((entries) => {\r\n\r\n// for (let entry of entries) {\r\n// const current_width = entry.contentBoxSize[0]\r\n// ? entry.contentBoxSize[0].inlineSize\r\n// : entry.contentRect.width;\r\n\r\n// if (range_query) {\r\n// const min_width = parseFloat(range_query[1]) * root_font_size;\r\n// const max_width = parseFloat(range_query[3]) * root_font_size;\r\n\r\n// matches = current_width >= min_width && current_width <= max_width;\r\n\r\n// } else if (single_query) {\r\n// const operator = single_query[1];\r\n// const bound = parseFloat(single_query[2]) * root_font_size;\r\n\r\n// matches = operator === '>=' ? current_width >= bound : current_width <= bound;\r\n\r\n// } else {\r\n// console.warn(`invalid query syntaxL \"${query}\"`);\r\n// return;\r\n// }\r\n\r\n// if (matches !== matching) {\r\n// matching = matches;\r\n// callback({matches, current_width});\r\n// }\r\n// }\r\n// });\r\n\r\n// observer.observe(component);\r\n// return () => observer.unobserve(element);\r\n// }\r\n\r\nexport function matchContainer(element, remValue, callback) {\r\n let wasMatching = null;\r\n\r\n const observer = new ResizeObserver((entries) => {\r\n // 1. Query the live computed pixel size of 1rem from the html root element\r\n const rootFontSize = parseFloat(window.getComputedStyle(document.documentElement).fontSize);\r\n\r\n // 2. Convert your target rem value into a relative pixel threshold\r\n const pixelThreshold = remValue * rootFontSize;\r\n\r\n for (let entry of entries) {\r\n // 3. Read the current internal layout width of the container\r\n const currentWidth = entry.contentBoxSize[0] \r\n ? entry.contentBoxSize[0].inlineSize \r\n : entry.contentRect.width;\r\n\r\n // 4. Evaluate the match condition against the dynamic pixel line\r\n const matches = currentWidth <= pixelThreshold;\r\n\r\n // 5. Fire the callback only when the boolean state flips\r\n if (matches !== wasMatching) {\r\n wasMatching = matches;\r\n callback({ matches, currentPixelThreshold: pixelThreshold });\r\n }\r\n }\r\n });\r\n\r\n observer.observe(element);\r\n return () => observer.unobserve(element);\r\n\r\n}\r\n","import { matchContainer } from \"../utils/match-container.js\";\r\n\r\nexport function init_enclosure(component) {\r\n const container = document.body;\r\n \r\n matchContainer(container, component.dataset.media, e => {\r\n const alt_btn_list = component.querySelectorAll('[data-is=\"base-enclosure-button\"]');\r\n\r\n alt_btn_list.forEach(alt_btn => {\r\n const target_id = alt_btn.dataset.for;\r\n const target = document.getElementById(target_id);\r\n\r\n if (!target) return;\r\n \r\n const target_attrs = {\r\n \"role\": \"button\",\r\n \"tabindex\": 0,\r\n \"aria-controls\": target_id,\r\n \"aria-expanded\": alt_btn.dataset.expanded.trim().toLowerCase() === \"true\",\r\n }\r\n\r\n if (e.matches) {\r\n\r\n // set default state\r\n target.hidden = !target_attrs['aria-expanded'];\r\n\r\n // Add properties\r\n Object.keys(target_attrs).forEach(attr => {\r\n alt_btn.setAttribute(attr, target_attrs[attr]);\r\n });\r\n\r\n // Add listeners\r\n alt_btn.addEventListener(\"click\", toggle_enclosure);\r\n alt_btn.addEventListener(\"keydown\", toggle_enclosure);\r\n } else {\r\n\r\n // Remove button properties\r\n Object.keys(target_attrs).forEach(attr => {\r\n alt_btn.removeAttribute(attr);\r\n });\r\n\r\n // Remove listeners\r\n alt_btn.removeEventListener(\"click\", toggle_enclosure);\r\n alt_btn.removeEventListener(\"keyboard\", toggle_enclosure);\r\n\r\n // Expand target permanently\r\n target.hidden = false;\r\n }\r\n });\r\n })\r\n}\r\n\r\nfunction toggle_enclosure(e) {\r\n\r\n // if keydown event, allow only spacebar and enter key\r\n if (e.type === 'keydown' && ![' ', 'Enter'].includes(e.key)) return;\r\n\r\n // Stop spacebar scrolling\r\n if (e.key === ' ') e.preventDefault();\r\n\r\n const alt_btn = e.currentTarget;\r\n const target_id = alt_btn.dataset.for;\r\n const target = document.querySelector(`#${target_id}:not([hidden] *)`);\r\n\r\n if (!target) return;\r\n\r\n const is_expanded = alt_btn.getAttribute('aria-expanded') === 'false';\r\n\r\n if (is_expanded) {\r\n target.hidden = false;\r\n alt_btn.setAttribute(\"aria-expanded\", true);\r\n } else {\r\n target.hidden = true;\r\n alt_btn.setAttribute(\"aria-expanded\", false);\r\n }\r\n}","export { matchContainer } from './utils/match-container.js';\r\n\r\n","import './index.css';\r\nimport { init_tabs } from \"./components/tabs.js\";\r\nimport { init_enclosure } from \"./components/enclosure.js\";\r\nimport * as utils from './utils.js';\r\n\r\nconst COMPONENT_REGISTRY = {\r\n \"data-base-tabs\": init_tabs,\r\n 'data-base-enclosure': init_enclosure,\r\n}\r\n\r\nexport const base = {\r\n\r\n utils: utils,\r\n init_all(root = document) {\r\n Object.entries(COMPONENT_REGISTRY).forEach(([selector, init_function]) => {\r\n root.querySelectorAll(`[${selector}]`).forEach(el => {\r\n if (el.dataset.baseEnhanced === 'true') return;\r\n\r\n try {\r\n init_function(el);\r\n el.dataset.baseEnhanced = 'true';\r\n } catch (e) {\r\n console.error(e);\r\n }\r\n })\r\n })\r\n }\r\n};\r\n\r\nif (typeof window !== 'undefined') {\r\n window.base = base;\r\n}"],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,12 +1,29 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@toheeb/base",
|
|
3
|
-
"version": "
|
|
4
|
-
"description": "The web's first multipurpose classless stylesheet, with the most semantic rules, for complete customization and personalization.",
|
|
5
|
-
"
|
|
3
|
+
"version": "3.0.0-alpha.1",
|
|
4
|
+
"description": "The web's first multipurpose classless stylesheet, with the most semantic rules, for complete customization and personalization of a webpage.",
|
|
5
|
+
"author": "Toheeb Ogunbiyi",
|
|
6
|
+
"type": "module",
|
|
7
|
+
"source": "src/index.js",
|
|
8
|
+
"main": "./dist/base.module.js",
|
|
9
|
+
"module": "./dist/base.module.js",
|
|
10
|
+
"exports": {
|
|
11
|
+
".": {
|
|
12
|
+
"import": "./dist/base.module.js"
|
|
13
|
+
},
|
|
14
|
+
"./css": "./dist/base.css"
|
|
15
|
+
},
|
|
16
|
+
"style": "./dist/base.css",
|
|
6
17
|
"scripts": {
|
|
7
|
-
"
|
|
18
|
+
"build": "vite build",
|
|
19
|
+
"watch": "vite build --watch"
|
|
8
20
|
},
|
|
9
|
-
"keywords": [
|
|
10
|
-
|
|
11
|
-
|
|
21
|
+
"keywords": [
|
|
22
|
+
"css",
|
|
23
|
+
"js"
|
|
24
|
+
],
|
|
25
|
+
"license": "See license in license.md",
|
|
26
|
+
"devDependencies": {
|
|
27
|
+
"vite": "^8.2.2"
|
|
28
|
+
}
|
|
12
29
|
}
|
|
@@ -0,0 +1,76 @@
|
|
|
1
|
+
import { matchContainer } from "../utils/match-container.js";
|
|
2
|
+
|
|
3
|
+
export function init_enclosure(component) {
|
|
4
|
+
const container = document.body;
|
|
5
|
+
|
|
6
|
+
matchContainer(container, component.dataset.media, e => {
|
|
7
|
+
const alt_btn_list = component.querySelectorAll('[data-is="base-enclosure-button"]');
|
|
8
|
+
|
|
9
|
+
alt_btn_list.forEach(alt_btn => {
|
|
10
|
+
const target_id = alt_btn.dataset.for;
|
|
11
|
+
const target = document.getElementById(target_id);
|
|
12
|
+
|
|
13
|
+
if (!target) return;
|
|
14
|
+
|
|
15
|
+
const target_attrs = {
|
|
16
|
+
"role": "button",
|
|
17
|
+
"tabindex": 0,
|
|
18
|
+
"aria-controls": target_id,
|
|
19
|
+
"aria-expanded": alt_btn.dataset.expanded.trim().toLowerCase() === "true",
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
if (e.matches) {
|
|
23
|
+
|
|
24
|
+
// set default state
|
|
25
|
+
target.hidden = !target_attrs['aria-expanded'];
|
|
26
|
+
|
|
27
|
+
// Add properties
|
|
28
|
+
Object.keys(target_attrs).forEach(attr => {
|
|
29
|
+
alt_btn.setAttribute(attr, target_attrs[attr]);
|
|
30
|
+
});
|
|
31
|
+
|
|
32
|
+
// Add listeners
|
|
33
|
+
alt_btn.addEventListener("click", toggle_enclosure);
|
|
34
|
+
alt_btn.addEventListener("keydown", toggle_enclosure);
|
|
35
|
+
} else {
|
|
36
|
+
|
|
37
|
+
// Remove button properties
|
|
38
|
+
Object.keys(target_attrs).forEach(attr => {
|
|
39
|
+
alt_btn.removeAttribute(attr);
|
|
40
|
+
});
|
|
41
|
+
|
|
42
|
+
// Remove listeners
|
|
43
|
+
alt_btn.removeEventListener("click", toggle_enclosure);
|
|
44
|
+
alt_btn.removeEventListener("keyboard", toggle_enclosure);
|
|
45
|
+
|
|
46
|
+
// Expand target permanently
|
|
47
|
+
target.hidden = false;
|
|
48
|
+
}
|
|
49
|
+
});
|
|
50
|
+
})
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
function toggle_enclosure(e) {
|
|
54
|
+
|
|
55
|
+
// if keydown event, allow only spacebar and enter key
|
|
56
|
+
if (e.type === 'keydown' && ![' ', 'Enter'].includes(e.key)) return;
|
|
57
|
+
|
|
58
|
+
// Stop spacebar scrolling
|
|
59
|
+
if (e.key === ' ') e.preventDefault();
|
|
60
|
+
|
|
61
|
+
const alt_btn = e.currentTarget;
|
|
62
|
+
const target_id = alt_btn.dataset.for;
|
|
63
|
+
const target = document.querySelector(`#${target_id}:not([hidden] *)`);
|
|
64
|
+
|
|
65
|
+
if (!target) return;
|
|
66
|
+
|
|
67
|
+
const is_expanded = alt_btn.getAttribute('aria-expanded') === 'false';
|
|
68
|
+
|
|
69
|
+
if (is_expanded) {
|
|
70
|
+
target.hidden = false;
|
|
71
|
+
alt_btn.setAttribute("aria-expanded", true);
|
|
72
|
+
} else {
|
|
73
|
+
target.hidden = true;
|
|
74
|
+
alt_btn.setAttribute("aria-expanded", false);
|
|
75
|
+
}
|
|
76
|
+
}
|
|
@@ -0,0 +1,76 @@
|
|
|
1
|
+
export function init_tabs(component) {
|
|
2
|
+
|
|
3
|
+
const tab_list = Array.from(component.querySelectorAll('[role="tab"]'));
|
|
4
|
+
|
|
5
|
+
tab_list.forEach(tab => {
|
|
6
|
+
tab.addEventListener("click", e => show_panel_of(tab_list, tab));
|
|
7
|
+
tab.addEventListener("keydown", e => {
|
|
8
|
+
const tab_nav_keys = ["ArrowRight", "ArrowLeft", "Home", "End"];
|
|
9
|
+
const panel_show_keys = [" ", "Enter"];
|
|
10
|
+
|
|
11
|
+
if (panel_show_keys.includes(e.key)) {
|
|
12
|
+
e.preventDefault();
|
|
13
|
+
e.stopPropagation();
|
|
14
|
+
|
|
15
|
+
show_panel_of(tab_list, tab);
|
|
16
|
+
} else if (tab_nav_keys.includes(e.key)) {
|
|
17
|
+
navigate_tabs(e, tab_list, tab);
|
|
18
|
+
}
|
|
19
|
+
});
|
|
20
|
+
});
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
function navigate_tabs(e, tab_list, tab) {
|
|
24
|
+
const current_tab_index = tab_list.indexOf(tab);
|
|
25
|
+
|
|
26
|
+
if (current_tab_index === -1) return;
|
|
27
|
+
|
|
28
|
+
let new_tab_index = 0;
|
|
29
|
+
|
|
30
|
+
switch (e.key) {
|
|
31
|
+
case "ArrowRight":
|
|
32
|
+
new_tab_index = (current_tab_index + 1) % tab_list.length;
|
|
33
|
+
break;
|
|
34
|
+
case "ArrowLeft":
|
|
35
|
+
new_tab_index = (current_tab_index - 1 + tab_list.length) % tab_list.length;
|
|
36
|
+
break;
|
|
37
|
+
case "Home":
|
|
38
|
+
new_tab_index = 0;
|
|
39
|
+
break;
|
|
40
|
+
case "End":
|
|
41
|
+
new_tab_index = tab_list.length - 1;
|
|
42
|
+
break;
|
|
43
|
+
default:
|
|
44
|
+
return;
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
tab_list[new_tab_index].focus();
|
|
48
|
+
|
|
49
|
+
e.preventDefault();
|
|
50
|
+
e.stopPropagation();
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
function show_panel_of(tab_list, tab) {
|
|
54
|
+
|
|
55
|
+
for (const item of tab_list) {
|
|
56
|
+
if (item === tab) {
|
|
57
|
+
item.setAttribute("aria-selected", true);
|
|
58
|
+
item.tabIndex = 0;
|
|
59
|
+
} else {
|
|
60
|
+
item.setAttribute("aria-selected", false);
|
|
61
|
+
item.tabIndex = -1;
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
|
|
65
|
+
const panel = document.getElementById(tab.getAttribute("aria-controls"));
|
|
66
|
+
const panel_list = panel.parentNode.children;
|
|
67
|
+
|
|
68
|
+
for (const item of panel_list) {
|
|
69
|
+
if (item === panel) {
|
|
70
|
+
item.hidden = false;
|
|
71
|
+
} else {
|
|
72
|
+
item.hidden = true;
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
|
|
76
|
+
}
|