diff --git a/.gitmodules b/.gitmodules index 41cc572..f208aff 100644 --- a/.gitmodules +++ b/.gitmodules @@ -1,3 +1,6 @@ [submodule "themes/hugo-profile"] path = themes/hugo-profile url = https://github.com/gurusabarish/hugo-profile.git +[submodule "themes/blowfish"] + path = themes/blowfish + url = https://github.com/nunocoracao/blowfish.git diff --git a/content/_index.md b/content/_index.md new file mode 100644 index 0000000..1cca827 --- /dev/null +++ b/content/_index.md @@ -0,0 +1,17 @@ +--- +title: "Hi, I'm Ash Marlow" +description: "Software Engineer specializing in hardware, security, and automation." +type: "background" +--- + +I am a **Software Engineer** specializing in the intersection of hardware, security, and automation. My career has evolved from architecting firmware for IoT appliances at Panasonic to securing high-stakes MoD systems with Tanium at Pointwire. Currently, I’m at Nextbase, where I test firmware and cloud systems by building automation frameworks and hardware-in-the-loop (HIL) test environments. + +When I’m not writing scripts or managing my Proxmox server, you’ll usually find me tinkering with my **HomeLab** setup, playing the piano, or heading out on a day trip with my dog. + +### Tech Stack & Arsenal + +{{< icon "github" >}} +{{< icon "docker" >}} +{{< badge icon="raspberrypi" >}}Raspberry Pi HIL{{< /badge >}} +{{< badge icon="cpu" >}}STM32 / ESP32{{< /badge >}} +{{< badge icon="tanium" >}}Tanium Cloud{{< /badge >}} \ No newline at end of file diff --git a/content/about/index.md b/content/about/index.md new file mode 100644 index 0000000..cbb679b --- /dev/null +++ b/content/about/index.md @@ -0,0 +1,39 @@ +--- +title: "Curriculum Vitae" +description: "My professional experience and education." +layout: "simple" +--- + +## Professional Experience + +{{< timeline >}} + +{{< timelineItem icon="briefcase" header="Nextbase" badge="June 2025 - Present" subheader="Software QA Specialist" >}} +Currently driving software quality by bridging the gap between firmware development and automated validation. +* **Automated Testing:** Developed Raspberry Pi-based automation scripts to replace manual verification of dashcam hardware. +* **Stability Lead:** Specialized in long-duration stability and stress testing. +* **OTA Specialist:** Engineered test cases for Over-The-Air firmware updates. +{{< /timelineItem >}} + +{{< timelineItem icon="shield" header="Pointwire" badge="June 2024 - June 2025" subheader="Technical Consultant" >}} +Specialized in enterprise endpoint security and infrastructure management. +* **Tanium SME:** Certified Operator, Administrator, and Cloud Specialist. +* **Government & Defence:** Maintained SC Clearance to deliver secure deployments on MoD systems. +* **Virtualization:** Engineered a Proxmox-based lab environment to simulate customer networks. +{{< /timelineItem >}} + +{{< timelineItem icon="code" header="Panasonic" badge="April 2023 - June 2024" subheader="Embedded Software Engineer" >}} +Developed firmware for high-end, IoT-enabled smart home appliances. +* **Model-Based Development:** Leveraged Simulink & Embedded Coder for STM32 microcontrollers. +* **Test Automation:** Developed a Python-based automation framework. +{{< /timelineItem >}} + +{{< /timeline >}} + +--- + +## Education & Credentials + +* **ISTQB Certified Tester (Foundation)** - *2026* +* **Tanium Certified Cloud Deployment Specialist** - *2024* +* **BSc Physics** - University of Bristol *(2018 - 2022)* \ No newline at end of file diff --git a/content/blogs/hello-world.md b/content/blog/hello-world.md similarity index 100% rename from content/blogs/hello-world.md rename to content/blog/hello-world.md diff --git a/content/blogs/retro-handhelds/Gameboy After.jpg b/content/blog/retro-handhelds/Gameboy After.jpg similarity index 100% rename from content/blogs/retro-handhelds/Gameboy After.jpg rename to content/blog/retro-handhelds/Gameboy After.jpg diff --git a/content/blogs/retro-handhelds/Gameboy Before.jpg b/content/blog/retro-handhelds/Gameboy Before.jpg similarity index 100% rename from content/blogs/retro-handhelds/Gameboy Before.jpg rename to content/blog/retro-handhelds/Gameboy Before.jpg diff --git a/content/blogs/retro-handhelds/Handheld Collection.jpg b/content/blog/retro-handhelds/Handheld Collection.jpg similarity index 100% rename from content/blogs/retro-handhelds/Handheld Collection.jpg rename to content/blog/retro-handhelds/Handheld Collection.jpg diff --git a/content/blogs/retro-handhelds/Miyoo Mini V4.jpg b/content/blog/retro-handhelds/Miyoo Mini V4.jpg similarity index 100% rename from content/blogs/retro-handhelds/Miyoo Mini V4.jpg rename to content/blog/retro-handhelds/Miyoo Mini V4.jpg diff --git a/content/blogs/retro-handhelds/MiyooMiniPlus.jpg b/content/blog/retro-handhelds/MiyooMiniPlus.jpg similarity index 100% rename from content/blogs/retro-handhelds/MiyooMiniPlus.jpg rename to content/blog/retro-handhelds/MiyooMiniPlus.jpg diff --git a/content/blogs/retro-handhelds/RG35XXSP.jpg b/content/blog/retro-handhelds/RG35XXSP.jpg similarity index 100% rename from content/blogs/retro-handhelds/RG35XXSP.jpg rename to content/blog/retro-handhelds/RG35XXSP.jpg diff --git a/content/blogs/retro-handhelds/RetroGaming.jpg b/content/blog/retro-handhelds/RetroGaming.jpg similarity index 100% rename from content/blogs/retro-handhelds/RetroGaming.jpg rename to content/blog/retro-handhelds/RetroGaming.jpg diff --git a/content/blogs/retro-handhelds/Retroid3.jpg b/content/blog/retro-handhelds/Retroid3.jpg similarity index 100% rename from content/blogs/retro-handhelds/Retroid3.jpg rename to content/blog/retro-handhelds/Retroid3.jpg diff --git a/content/blogs/retro-handhelds/V90.jpg b/content/blog/retro-handhelds/V90.jpg similarity index 100% rename from content/blogs/retro-handhelds/V90.jpg rename to content/blog/retro-handhelds/V90.jpg diff --git a/content/blogs/retro-handhelds/featured.gif b/content/blog/retro-handhelds/featured.gif similarity index 100% rename from content/blogs/retro-handhelds/featured.gif rename to content/blog/retro-handhelds/featured.gif diff --git a/content/blogs/retro-handhelds/index.md b/content/blog/retro-handhelds/index.md similarity index 98% rename from content/blogs/retro-handhelds/index.md rename to content/blog/retro-handhelds/index.md index 036a6df..a067f27 100644 --- a/content/blogs/retro-handhelds/index.md +++ b/content/blog/retro-handhelds/index.md @@ -2,7 +2,7 @@ date: '2026-03-13T22:44:48Z' draft: false title: Retro Handhelds -image: /blogs/retro-handhelds/featured.gif +image: /blog/retro-handhelds/featured.gif summary: "Retro handheld collection" tags: ["Games"] --- diff --git a/hugo.yaml b/hugo.yaml index fee1763..845c006 100644 --- a/hugo.yaml +++ b/hugo.yaml @@ -1,203 +1,44 @@ baseURL: "https://me.marlow.boats" -languageCode: "en-us" +languageCode: "en-gb" title: "Ash Marlow" -theme: hugo-profile -outputs: - home: - - "HTML" - - "RSS" - - "JSON" - page: - - "HTML" - - "RSS" +theme: "blowfish" -pagination: - pagerSize: 3 +outputs: + home: ["HTML", "RSS", "JSON"] + page: ["HTML", "RSS"] markup: - goldmark: - renderer: - unsafe: true - -Menus: - main: - - identifier: blog - name: Blog - title: Blog posts - url: /blogs - weight: 1 - - identifier: projects - name: Projects - title: Projects - url: /projects - weight: 2 + goldmark: + renderer: + unsafe: true params: - title: "Ash Marlow" - description: My CV, Blog and Projects - favicon: "/img/AM.ico" - animate: true - theme: - defaultTheme: "dark" - font: - fontSize: 1rem # default: 1rem - fontWeight: 400 # default: 400 - lineHeight: 1.5 # default: 1.5 - textAlign: left # default: left - navbar: - align: ms-auto # Left: ms-auto | center: mx-auto | right: me-auto | Default: ms-auto - # brandLogo: "/logo.png" # Logo for the brand | default is the favicon variable - # showBrandLogo: false # Show brand logo in nav bar | default is true - disableSearch: true - # searchPlaceholder: "Search" - stickyNavBar: - enable : true - showOnScrollUp : true - enableSeparator: false - menus: - disableAbout: false - disableExperience: false - disableEducation: false - disableProjects: false - disableAchievements: false - disableContact: false + color: "slate" + defaultAppearance: "dark" + header: + layout: "basic" + footer: + showCopyright: true + homepage: + layout: "background" + showRecent: true +menus: + main: + - identifier: about + name: CV & About + url: /about/ + weight: 1 + - identifier: blog + name: Blog + url: /blog/ + weight: 2 + - identifier: projects + name: Projects + url: /projects/ + weight: 3 - about: - enable: true - title: "About me" - image: "/img/me.jpg" - content: |- - I am a **Software Engineer** specializing in the intersection of hardware, security, and automation. My career has evolved from architecting firmware for IoT appliances at Panasonic to securing high-stakes MoD systems with Tanium at Pointwire. Currently, I’m at Nextbase, where I test firmware and cloud systems by building automation frameworks and hardware-in-the-loop (HIL) test environments. - - I’m a firm believer that if a task is worth doing twice, it’s worth automating once. Whether it's hunting down safety-critical bugs in microcontrollers or optimizing OTA update stability, I enjoy the challenge of making complex systems "bulletproof." - - When I’m not writing scripts or managing my Proxmox server, you’ll usually find me tinkering with my **HomeLab** setup, playing the piano, or heading out on a day trip with my dog. - skills: - enable: true - title: "Tech stack & tools I'm currently leaning into:" - items: - - "Python (Automation)" - - "Tanium (Certified Admin/Cloud)" - - "Linux & Docker" - - "Embedded (STM32 / ESP32)" - - "Proxmox Virtualization" - - "HIL Testing & Raspberry Pi" - - experience: - enable: true - items: - - company: "Nextbase" - companyUrl: "https://nextbase.co.uk/" - jobs: - - name: "Software QA Specialist" - date: "June 2025 - present" - content: | - Currently driving software quality at Nextbase by bridging the gap between firmware development and automated validation. - - * **Automated Testing:** Developed Raspberry Pi-based automation scripts to replace manual verification of dashcam hardware. - * **Stability Lead:** Specialized in long-duration stability and stress testing to ensure device reliability in extreme conditions. - * **OTA Specialist:** Engineered test cases for Over-The-Air firmware updates, ensuring 100% success rates for end-user deployments. - * **In-house Tooling:** Authored custom scripts for internal testing tools to accelerate the QA feedback loop. - info: - content: Working as a Test Engineer - featuredItems: - customIcons: - - icon: /img/work/nb.jpeg - url: "https://nextbase.co.uk/" - tooltip: Nextbase - - company: "Pointwire" - companyUrl: "https://pointwire.com/" - jobs: - - name: "Technical Consultant" - date: "June 2024 - June 2025" - content: | - Specialized in enterprise endpoint security and infrastructure management, focusing on the deployment and optimization of the Tanium ecosystem for high-security clients. - - * **Tanium SME:** Certified Operator, Administrator, and Cloud Specialist; led end-to-end deployments to improve global endpoint visibility and security posture. - * **Government & Defence:** Maintained SC Clearance to deliver secure deployments on MoD systems, adhering to strict MoD security protocols. - * **Virtualization & Testing:** Engineered a Proxmox-based lab environment to simulate customer networks, enabling risk-free validation of Tanium configurations and software updates. - * **Custom Integration:** Developed a bespoke web application to interface with partner APIs, streamlining data flow between security platforms. - * **Infrastructure & Networking:** Configured Windows Server environments, LDAP integrations, and complex VLAN architectures for secure system provisioning. - * **Multi-Tool Proficiency:** Managed deployments of Deep Instinct (EPP) and Corelight (NDR) to provide layered defense-in-depth for clients. - info: - content: Cyber Security - featuredItems: - customIcons: - - icon: /img/work/pointwire.png - url: "https://pointwire.com/" - tooltip: Example tooltip content - - company: "Panasonic" - companyUrl: "https://www.pmuk.co.uk/" - jobs: - - name: "Embedded Software Engineer" - date: "April 2023 - June 2024" - content: | - Developed firmware for high-end, IoT-enabled smart home appliances, focusing on model-based design and automated endurance validation. - - * **Model-Based Development:** Leveraged **Simulink & Embedded Coder** to architect and generate production C code for **STM32** microcontrollers. - * **IoT Innovation:** Co-led the software development for next-generation smart microwave ovens, integrating complex user functions with hardware constraints. - * **Safety-Critical Testing:** Executed rigorous Unit Testing in Simulink and long-term endurance cycles, identifying a critical edge-case bug that prevented potential hardware failure. - * **Test Automation:** Developed a Python-based automation framework to control appliance functions remotely, streamlining the verification of firmware builds. - info: - content: Software Engineer - featuredItems: - customIcons: - - icon: /img/work/panasonic.jpg - url: "https://www.pmuk.co.uk/" - tooltip: Example tooltip content - - education: - enable: true - title: "Credentials & Education" - index: false - items: - - title: "BSc Physics" - school: - name: "University of Bristol" - url: "https://www.bristol.ac.uk/" - date: "2018 - 2022" - content: |- - Final year project on developing Dye Sensitised Solar cells. Developed a strong mathematical foundation and analytical approach to complex problem-solving. - * **Advanced Computational Physics** - * **Environmental Physics** - * **Material Physics** - - - title: "Tanium Certified" - school: - name: "Tanium" - url: "https://www.tanium.com/" - date: "2024" - content: |- - Successfully completed the professional certification track for Endpoint Management, specializing in Cloud architecture and security operations. - * **Tanium Certified Operator** - * **Tanium Certified Administrator** - * **Tanium Certified Cloud Deployment Specialist** - - - title: "ISTQB Certified Tester (Foundation)" - school: - name: "ISTQB" - url: "https://www.istqb.org/" - date: "Expected 2026" - content: |- - Currently undertaking global certification in software testing principles and quality assurance methodologies. - - - title: "NVQ Level 3 - Equipment Maintenance Engineering" - school: - name: "British Army (REME)" - url: "https://www.army.mod.uk/" - date: "2011 - 2021" - content: |- - Served as a Class 1 Vehicle Mechanic. Specialized in fleet diagnostics and safety-critical maintenance. Also served as a Parachute Instructor, managing student safety and high-stakes risk mitigation for 900+ jumps. - contact: - enable: true - # title: "Custom Name" - content: My inbox is always open. Whether you have a question or just want to say hi, I’ll try my best to get back to you! - btnName: Mail me - btnLink: mailto:ash@ash-marlow.co.uk - # formspree: - # enable: true # `contact.email` value will be ignored - # formId: abcdefgh # Take it from your form's endpoint, like 'https://formspree.io/f/abcdefgh' - # emailCaption: "Enter your email address" - # messageCaption: "Enter your message here" - # messageRows: 5 \ No newline at end of file +author: + name: Your Name + avatar: "static/img/me.jpg" # Make sure this path is exact + bio: "Tech enthusiast and Docker lover." \ No newline at end of file diff --git a/public/404.html b/public/404.html new file mode 100644 index 0000000..7ec3d97 --- /dev/null +++ b/public/404.html @@ -0,0 +1,606 @@ + + + + + + + + + + + + + 404 Page not found · Ash Marlow + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + Skip to main content + +
+ + + + + + + + + +
+
+ +

Page Not Found 😕

+

+ Error 404 +

+
+

It seems that the page you've requested does not exist.

+
+ + + + + + + + + + + + + +
+ + +
+ + + diff --git a/public/about/index.html b/public/about/index.html new file mode 100644 index 0000000..d028cc8 --- /dev/null +++ b/public/about/index.html @@ -0,0 +1,802 @@ + + + + + + + + + + + + + Curriculum Vitae · Ash Marlow + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + Skip to main content + +
+ + + + + + + + + +
+
+ +
+
+ +

+ Curriculum Vitae +

+
+
+ +

Professional Experience +
+ + + # + + +

+
    + + + + + + +
  1. +
    +
    + +
    +
    +
    + +

    Nextbase

    + + +

    + + + June 2025 - Present + + + +

    + +
    + +

    + Software QA Specialist +

    + +
    + +Currently driving software quality by bridging the gap between firmware development and automated validation. +* **Automated Testing:** Developed Raspberry Pi-based automation scripts to replace manual verification of dashcam hardware. +* **Stability Lead:** Specialized in long-duration stability and stress testing. +* **OTA Specialist:** Engineered test cases for Over-The-Air firmware updates. + +
    +
    +
    +
  2. + + + + + + +
  3. +
    +
    + + +
    +
    +
    + +

    Pointwire

    + + +

    + + + June 2024 - June 2025 + + + +

    + +
    + +

    + Technical Consultant +

    + +
    + +Specialized in enterprise endpoint security and infrastructure management. +* **Tanium SME:** Certified Operator, Administrator, and Cloud Specialist. +* **Government & Defence:** Maintained SC Clearance to deliver secure deployments on MoD systems. +* **Virtualization:** Engineered a Proxmox-based lab environment to simulate customer networks. + +
    +
    +
    +
  4. + + + + + + +
  5. +
    +
    + + +
    +
    +
    + +

    Panasonic

    + + +

    + + + April 2023 - June 2024 + + + +

    + +
    + +

    + Embedded Software Engineer +

    + +
    + +Developed firmware for high-end, IoT-enabled smart home appliances. +* **Model-Based Development:** Leveraged Simulink & Embedded Coder for STM32 microcontrollers. +* **Test Automation:** Developed a Python-based automation framework. + +
    +
    +
    +
  6. + +
+ +
+ +

Education & Credentials +
+ + + # + + +

+
    +
  • ISTQB Certified Tester (Foundation) - 2026
  • +
  • Tanium Certified Cloud Deployment Specialist - 2024
  • +
  • BSc Physics - University of Bristol (2018 - 2022)
  • +
+ +
+
+ + +
+
+ + + + + + + + + + + + + +
+ + +
+ + + diff --git a/public/about/index.xml b/public/about/index.xml new file mode 100644 index 0000000..c31a467 --- /dev/null +++ b/public/about/index.xml @@ -0,0 +1,13 @@ + + + + Curriculum Vitae on Ash Marlow + http://localhost:1313/about/ + Recent content in Curriculum Vitae on Ash Marlow + Hugo -- gohugo.io + en-gb + © 2026 + + + + diff --git a/public/android-chrome-192x192.png b/public/android-chrome-192x192.png new file mode 100644 index 0000000..b63c037 Binary files /dev/null and b/public/android-chrome-192x192.png differ diff --git a/public/android-chrome-512x512.png b/public/android-chrome-512x512.png new file mode 100644 index 0000000..da0f767 Binary files /dev/null and b/public/android-chrome-512x512.png differ diff --git a/public/apple-touch-icon.png b/public/apple-touch-icon.png new file mode 100644 index 0000000..a011953 Binary files /dev/null and b/public/apple-touch-icon.png differ diff --git a/public/blog/hello-world/index.html b/public/blog/hello-world/index.html new file mode 100644 index 0000000..518d873 --- /dev/null +++ b/public/blog/hello-world/index.html @@ -0,0 +1,801 @@ + + + + + + + + + + + + + hello world · Ash Marlow + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + Skip to main content + +
+ + + + + + + + + +
+
+ + +
+ + + + +
+ +

+ hello world +

+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + ·12 words·1 min + + + + +
+ + + + + + + + + + + +
+ + + + + + + + + + + + + + +
+ +
+ + +
+
+
+
+ + + + + + +
+ + + +
+ + +
+ + + + + + + +
+ + +
+

Testing 123

+ +

A nice test header +
+ + + # + + +

+

Does this webhook work?

+

WELL!?

+ + + + +
+ + + + + + + +
+
+ + + +
+ + + + + + + + + + + + + +
+ + +
+ + + diff --git a/public/blog/hello-world/index.xml b/public/blog/hello-world/index.xml new file mode 100644 index 0000000..0aff412 --- /dev/null +++ b/public/blog/hello-world/index.xml @@ -0,0 +1,13 @@ + + + + hello world on Ash Marlow + http://localhost:1313/blog/hello-world/ + Recent content in hello world on Ash Marlow + Hugo -- gohugo.io + en-gb + © 2026 + + + + diff --git a/public/blog/index.html b/public/blog/index.html new file mode 100644 index 0000000..517a6d7 --- /dev/null +++ b/public/blog/index.html @@ -0,0 +1,968 @@ + + + + + + + + + + + + + Blogs · Ash Marlow + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + Skip to main content + +
+ + + + + + + + + +
+
+ + + + + + + + + +
+ +

Blogs

+
+ + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ + +
+
+ + + + +
+ +
+ +
+
+ + + + + + + + + + +
+ + + +

+ 2026 +

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ +
+ +
+
+ +

+ Retro Handhelds + +

+
+ + +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + ·677 words·4 mins + + + + +
+ + + + + + + + + + + +
+ +
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+
+ +

+ hello world + +

+
+ + +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + ·12 words·1 min + + + + +
+ + + + + + + + + + + +
+ +
+
+
+ + + + +
+ + + + + + + + + + + + + + + + + + +
+ + +
+ + + diff --git a/public/blog/index.xml b/public/blog/index.xml new file mode 100644 index 0000000..8e0401a --- /dev/null +++ b/public/blog/index.xml @@ -0,0 +1,33 @@ + + + + Blogs on Ash Marlow + http://localhost:1313/blog/ + Recent content in Blogs on Ash Marlow + Hugo -- gohugo.io + en-gb + © 2026 + Fri, 13 Mar 2026 22:44:48 +0000 + + + Retro Handhelds + http://localhost:1313/blog/retro-handhelds/ + Fri, 13 Mar 2026 22:44:48 +0000 + + http://localhost:1313/blog/retro-handhelds/ + Retro handheld collection + + + + + hello world + http://localhost:1313/blog/hello-world/ + Thu, 19 Feb 2026 00:00:00 +0000 + + http://localhost:1313/blog/hello-world/ + Welcome to my world.&quot; + + + + + diff --git a/public/blog/page/1/index.html b/public/blog/page/1/index.html new file mode 100644 index 0000000..393b079 --- /dev/null +++ b/public/blog/page/1/index.html @@ -0,0 +1,9 @@ + + + + http://localhost:1313/blog/ + + + + + diff --git a/public/blog/retro-handhelds/Gameboy After.jpg b/public/blog/retro-handhelds/Gameboy After.jpg new file mode 100644 index 0000000..c399c17 Binary files /dev/null and b/public/blog/retro-handhelds/Gameboy After.jpg differ diff --git a/public/blog/retro-handhelds/Gameboy Before.jpg b/public/blog/retro-handhelds/Gameboy Before.jpg new file mode 100644 index 0000000..ba4aa1d Binary files /dev/null and b/public/blog/retro-handhelds/Gameboy Before.jpg differ diff --git a/public/blog/retro-handhelds/Handheld Collection.jpg b/public/blog/retro-handhelds/Handheld Collection.jpg new file mode 100644 index 0000000..ac5b097 Binary files /dev/null and b/public/blog/retro-handhelds/Handheld Collection.jpg differ diff --git a/public/blog/retro-handhelds/Miyoo Mini V4.jpg b/public/blog/retro-handhelds/Miyoo Mini V4.jpg new file mode 100644 index 0000000..377f75b Binary files /dev/null and b/public/blog/retro-handhelds/Miyoo Mini V4.jpg differ diff --git a/public/blog/retro-handhelds/MiyooMiniPlus.jpg b/public/blog/retro-handhelds/MiyooMiniPlus.jpg new file mode 100644 index 0000000..11b6c94 Binary files /dev/null and b/public/blog/retro-handhelds/MiyooMiniPlus.jpg differ diff --git a/public/blog/retro-handhelds/RG35XXSP.jpg b/public/blog/retro-handhelds/RG35XXSP.jpg new file mode 100644 index 0000000..559e030 Binary files /dev/null and b/public/blog/retro-handhelds/RG35XXSP.jpg differ diff --git a/public/blog/retro-handhelds/RetroGaming.jpg b/public/blog/retro-handhelds/RetroGaming.jpg new file mode 100644 index 0000000..826bcbb Binary files /dev/null and b/public/blog/retro-handhelds/RetroGaming.jpg differ diff --git a/public/blog/retro-handhelds/Retroid3.jpg b/public/blog/retro-handhelds/Retroid3.jpg new file mode 100644 index 0000000..79affe5 Binary files /dev/null and b/public/blog/retro-handhelds/Retroid3.jpg differ diff --git a/public/blog/retro-handhelds/V90.jpg b/public/blog/retro-handhelds/V90.jpg new file mode 100644 index 0000000..4203a32 Binary files /dev/null and b/public/blog/retro-handhelds/V90.jpg differ diff --git a/public/blog/retro-handhelds/featured.gif b/public/blog/retro-handhelds/featured.gif new file mode 100644 index 0000000..5e410fe Binary files /dev/null and b/public/blog/retro-handhelds/featured.gif differ diff --git a/public/blog/retro-handhelds/featured_hu_9a1528ea52fa35df.gif b/public/blog/retro-handhelds/featured_hu_9a1528ea52fa35df.gif new file mode 100644 index 0000000..72e93c1 Binary files /dev/null and b/public/blog/retro-handhelds/featured_hu_9a1528ea52fa35df.gif differ diff --git a/public/blog/retro-handhelds/index.html b/public/blog/retro-handhelds/index.html new file mode 100644 index 0000000..0a9dcaf --- /dev/null +++ b/public/blog/retro-handhelds/index.html @@ -0,0 +1,928 @@ + + + + + + + + + + + + + Retro Handhelds · Ash Marlow + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + Skip to main content + +
+ + + + + + + + + +
+
+ + +
+ + + + +
+ +

+ Retro Handhelds +

+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + ·677 words·4 mins + + + + +
+ + + + + + + + + + + +
+ + + + + + + + + + + + + + +
+ +
+ + +
+
+
+
+ + + + + + +
+ + + +
+ + +
+ + + + + + + +
+ + +
+

My biggest pass time outside of computing is retro game emulation. Most commonly in the form of dedicated emulation handhelds but also diving into console modding and Linux gaming.

+ +

Handheld Emulators +
+ + + # + + +

+

P### owkiddy V90

+

Powkiddy V90
+

+

A clamshell device with a custom firmware that provides a basic but functional UI. +It’s limited chipset only really allows for emulating upto the 16 bit era with a few Playstation 1 games just about playable. +The screen leaves a lot to be desired by modern standards but when I first got this handheld I absolutely loved it. +It’s low price and clamshell design make it a great device to throw in a bag without much thought or worry. +The buttons are great and it made a great first handheld. +Powkiddy is believed to be working on a V2 which I am very excited to see.

+ +

Miyoo Mini + +
+ + + # + + +

+

Miyoo Mini Plus
+

+

This is an absolutely amazing device that I still regularly play today. +The screen is a bright 480p display, the controls are soft but precise and while small it’s surprisingly comfortable to hold (ignoring use of the triggers). +The real brilliance behind this device is the open source Onion OS. +Adding features such as game switcher, auto save and loading states, custom themes and even a custom boot logo, alongside a £50 price tag makes the Miyoo Mini + a very easy recommendation.

+ +

Retroid Pocket 3+ +
+ + + # + + +

+

Retroid Pocket 3+
+

+

This is the console that convinced me to start spending a bit of money on these devices. +At £120 and promising the ability to emulate GameCube and PlayStation 2 I was sold. +At the time of buying this device I was very impressed with the 720p display and the ability to play the sixth generation consoles (with a lot of tweaks and hacks) but sadly it hasn’t aged that well as there are now much better options. +The one way that is handheld has improved is the software. +As my first android device I wasn’t a big fan of the need to occasionally use the touchscreen for system navigation and the need for a frontend app to tie all the emulators together neatly. +The options for frontend apps was very limited back then but now that ES-DE has launched on android it’s a much nicer experience.

+ +

Anbernic RG35XXSP +
+ + + # + + +

+

RG35XXSP
+

+

A direct clone of the Gameboy advance SP, but with the power to emulate upto Dreamcast and Nintendo 64. +This is unfortunately the only handheld I have ever sold. +This is an incredibly popular device so I am certainly in the minority but I just couldn’t get over the clicky buttons, early software and poor build quality.

+ +

Miyoo Mini V4 +
+ + + # + + +

+

![Miyoo Mini V4](./Miyoo Mini V4.jpg)

+

The Miyoo mini is the first handheld I really wanted but due to pricing, high demand and stock shortages it took me a long time to get hold of it. +It really does not disappoint. Technically its a worse version of the Miyoo mini +. +Its smaller and lacks WIFI but that small, super pocketable size gives it a huge amount of charm. +If you are looking for something that can play upto Playstation 1 games, and you can take anywhere in your pocket then this is the device to get.

+ +

Console Modding +
+ + + # + + +

+ +

Gameboy +
+ + + # + + +

+

![Gameboy Before](./Gameboy Before.jpg)

+

I purchased this original Gameboy from Facebook Marketplace. +Like a lot of old plastic grey electronics it has horrible yellowing, so I tool this opportunity to clean it up. +The Gameboy was stripped down, rubber and plastic components washed and yhe main board was cleaned. +The shell was coated in Hydrogen Peroxide and left outside on a sunny day.

+

![Gameboy After](./Gameboy After.jpg)

+

The console was then reassembled and a new screen lens applied to have it looking good as new. +As much as I appreciate an original Gameboy, its not really something I would want to play in the modern day. +The four AA batteries to power it, the contrast wheel and the fact that my nostalgia really starts at Gameboy color, means its more of a show piece for me.

+ + + + +
+ + + + + + + +
+
+ + + +
+ + + + + + + + + + + + + +
+ + +
+ + + diff --git a/public/blog/retro-handhelds/index.xml b/public/blog/retro-handhelds/index.xml new file mode 100644 index 0000000..4acc862 --- /dev/null +++ b/public/blog/retro-handhelds/index.xml @@ -0,0 +1,13 @@ + + + + Retro Handhelds on Ash Marlow + http://localhost:1313/blog/retro-handhelds/ + Recent content in Retro Handhelds on Ash Marlow + Hugo -- gohugo.io + en-gb + © 2026 + + + + diff --git a/public/categories/index.html b/public/categories/index.html new file mode 100644 index 0000000..911d832 --- /dev/null +++ b/public/categories/index.html @@ -0,0 +1,646 @@ + + + + + + + + + + + + + Categories · Ash Marlow + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + Skip to main content + +
+ + + + + + + + + +
+
+ + + +
+ +

Categories

+
+ + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ + +
+
+ + + + +
+ +
+ + + + + + + + + + + + + + +
+ + +
+ + + diff --git a/public/categories/index.xml b/public/categories/index.xml new file mode 100644 index 0000000..989e8ed --- /dev/null +++ b/public/categories/index.xml @@ -0,0 +1,13 @@ + + + + Categories on Ash Marlow + http://localhost:1313/categories/ + Recent content in Categories on Ash Marlow + Hugo -- gohugo.io + en-gb + © 2026 + + + + diff --git a/public/css/components/carousel.8e65f2c27285218feed8ca2a6e12a80ec2fb4be8f774b7c74d9642f1bc528a3352288a700a64a0e1e3c38a40b74c978b5dbbeb38346202b5f7613d8fc023e3c9.css b/public/css/components/carousel.8e65f2c27285218feed8ca2a6e12a80ec2fb4be8f774b7c74d9642f1bc528a3352288a700a64a0e1e3c38a40b74c978b5dbbeb38346202b5f7613d8fc023e3c9.css new file mode 100644 index 0000000..9a799e0 --- /dev/null +++ b/public/css/components/carousel.8e65f2c27285218feed8ca2a6e12a80ec2fb4be8f774b7c74d9642f1bc528a3352288a700a64a0e1e3c38a40b74c978b5dbbeb38346202b5f7613d8fc023e3c9.css @@ -0,0 +1,65 @@ +/* Carousel Specific Styles */ +.ratio-16-9 { + padding-top: 56.25%; +} +.ratio-21-9 { + padding-top: 42.85%; +} +.ratio-32-9 { + padding-top: 28.125%; +} +@media (width >= 640px) { + .sm\:ratio-16-9 { + padding-top: 56.25%; + } + .sm\:ratio-21-9 { + padding-top: 42.85%; + } + .sm\:ratio-32-9 { + padding-top: 28.125%; + } +} +@media (width >= 853px) { + .md\:ratio-16-9 { + padding-top: 56.25%; + } + .md\:ratio-21-9 { + padding-top: 42.85%; + } + .md\:ratio-32-9 { + padding-top: 28.125%; + } +} +@media (width >= 1024px) { + .lg\:ratio-16-9 { + padding-top: 56.25%; + } + .lg\:ratio-21-9 { + padding-top: 42.85%; + } + .lg\:ratio-32-9 { + padding-top: 28.125%; + } +} +@media (width >= 1280px) { + .xl\:ratio-16-9 { + padding-top: 56.25%; + } + .xl\:ratio-21-9 { + padding-top: 42.85%; + } + .xl\:ratio-32-9 { + padding-top: 28.125%; + } +} +@media (width >= 1536px) { + .\32xl\:ratio-16-9 { + padding-top: 56.25%; + } + .\32xl\:ratio-21-9 { + padding-top: 42.85%; + } + .\32xl\:ratio-32-9 { + padding-top: 28.125%; + } +} diff --git a/public/css/main.bundle.min.9ee99083dcf0aebbaecc330e6a5dd2e77523fab6b2c18310c1bb2234a165f95d3e2c6af1133b81a48d3c11370060decfc0b06aee9c3445603fe6632abc319ee0.css b/public/css/main.bundle.min.9ee99083dcf0aebbaecc330e6a5dd2e77523fab6b2c18310c1bb2234a165f95d3e2c6af1133b81a48d3c11370060decfc0b06aee9c3445603fe6632abc319ee0.css new file mode 100644 index 0000000..8d11c20 --- /dev/null +++ b/public/css/main.bundle.min.9ee99083dcf0aebbaecc330e6a5dd2e77523fab6b2c18310c1bb2234a165f95d3e2c6af1133b81a48d3c11370060decfc0b06aee9c3445603fe6632abc319ee0.css @@ -0,0 +1,178 @@ +:root{--color-neutral:255, 255, 255;--color-neutral-50:248, 250, 252;--color-neutral-100:241, 245, 249;--color-neutral-200:226, 232, 240;--color-neutral-300:203, 213, 225;--color-neutral-400:148, 163, 184;--color-neutral-500:100, 116, 139;--color-neutral-600:71, 85, 105;--color-neutral-700:51, 65, 85;--color-neutral-800:30, 41, 59;--color-neutral-900:15, 23, 42;--color-primary-50:239, 246, 255;--color-primary-100:219, 234, 254;--color-primary-200:191, 219, 254;--color-primary-300:147, 197, 253;--color-primary-400:96, 165, 250;--color-primary-500:59, 130, 246;--color-primary-600:37, 99, 235;--color-primary-700:29, 78, 216;--color-primary-800:30, 64, 175;--color-primary-900:30, 58, 138;--color-secondary-50:236, 254, 255;--color-secondary-100:207, 250, 254;--color-secondary-200:165, 243, 252;--color-secondary-300:103, 232, 249;--color-secondary-400:34, 211, 238;--color-secondary-500:6, 182, 212;--color-secondary-600:8, 145, 178;--color-secondary-700:14, 116, 144;--color-secondary-800:21, 94, 117;--color-secondary-900:22, 78, 99}/*!tailwindcss v4.2.1 | MIT License | https://tailwindcss.com*//*!Blowfish | MIT License | https://github.com/nunocoracao/blowfish*/@layer properties;@layer theme,base,components,utilities;@layer theme{:root,:host{--font-sans:ui-sans-serif, system-ui, sans-serif, "Apple Color Emoji", + "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji";--font-mono:ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", + "Courier New", monospace;--spacing:0.25rem;--container-2xs:18rem;--container-md:28rem;--container-xl:36rem;--container-3xl:48rem;--container-7xl:80rem;--text-xs:0.75rem;--text-xs--line-height:calc(1 / 0.75);--text-sm:0.875rem;--text-sm--line-height:calc(1.25 / 0.875);--text-base:1rem;--text-base--line-height:calc(1.5 / 1);--text-lg:1.125rem;--text-lg--line-height:calc(1.75 / 1.125);--text-xl:1.25rem;--text-xl--line-height:calc(1.75 / 1.25);--text-2xl:1.5rem;--text-2xl--line-height:calc(2 / 1.5);--text-3xl:1.875rem;--text-3xl--line-height:calc(2.25 / 1.875);--text-4xl:2.25rem;--text-4xl--line-height:calc(2.5 / 2.25);--font-weight-light:300;--font-weight-normal:400;--font-weight-medium:500;--font-weight-semibold:600;--font-weight-bold:700;--font-weight-extrabold:800;--tracking-tight:-0.025em;--tracking-normal:0em;--leading-snug:1.375;--leading-relaxed:1.625;--radius-md:0.375rem;--radius-lg:0.5rem;--radius-xl:0.75rem;--radius-2xl:1rem;--ease-in:cubic-bezier(0.4, 0, 1, 1);--ease-out:cubic-bezier(0, 0, 0.2, 1);--ease-in-out:cubic-bezier(0.4, 0, 0.2, 1);--animate-pulse:pulse 2s cubic-bezier(0.4, 0, 0.6, 1) infinite;--blur-sm:8px;--blur-xl:24px;--blur-2xl:40px;--aspect-video:16 / 9;--default-transition-duration:150ms;--default-transition-timing-function:cubic-bezier(0.4, 0, 0.2, 1);--default-font-family:var(--font-sans);--default-mono-font-family:var(--font-mono)}}@layer base{*,::after,::before,::backdrop,::file-selector-button{box-sizing:border-box;margin:0;padding:0;border:0 solid}html,:host{line-height:1.5;-webkit-text-size-adjust:100%;tab-size:4;font-family:var(--default-font-family,ui-sans-serif,system-ui,sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol","Noto Color Emoji");font-feature-settings:var(--default-font-feature-settings,normal);font-variation-settings:var(--default-font-variation-settings,normal);-webkit-tap-highlight-color:transparent}hr{height:0;color:inherit;border-top-width:1px}abbr:where([title]){-webkit-text-decoration:underline dotted;text-decoration:underline dotted}h1,h2,h3,h4,h5,h6{font-size:inherit;font-weight:inherit}a{color:inherit;-webkit-text-decoration:inherit;text-decoration:inherit}b,strong{font-weight:bolder}code,kbd,samp,pre{font-family:var(--default-mono-font-family,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,"Liberation Mono","Courier New",monospace);font-feature-settings:var(--default-mono-font-feature-settings,normal);font-variation-settings:var(--default-mono-font-variation-settings,normal);font-size:1em}small{font-size:80%}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}sub{bottom:-.25em}sup{top:-.5em}table{text-indent:0;border-color:inherit;border-collapse:collapse}:-moz-focusring{outline:auto}progress{vertical-align:baseline}summary{display:list-item}ol,ul,menu{list-style:none}img,svg,video,canvas,audio,iframe,embed,object{display:block;vertical-align:middle}img,video{max-width:100%;height:auto}button,input,select,optgroup,textarea,::file-selector-button{font:inherit;font-feature-settings:inherit;font-variation-settings:inherit;letter-spacing:inherit;color:inherit;border-radius:0;background-color:initial;opacity:1}:where(select:is([multiple],[size])) optgroup{font-weight:bolder}:where(select:is([multiple],[size])) optgroup option{padding-inline-start:20px}::file-selector-button{margin-inline-end:4px}::placeholder{opacity:1}@supports(not (-webkit-appearance:-apple-pay-button)) or (contain-intrinsic-size:1px){::placeholder{color:currentcolor;@supports(color:color-mix(in lab,red,red)){color: color-mix(in oklab,currentcolor 50%,transparent);}}}textarea{resize:vertical}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-date-and-time-value{min-height:1lh;text-align:inherit}::-webkit-datetime-edit{display:inline-flex}::-webkit-datetime-edit-fields-wrapper{padding:0}::-webkit-datetime-edit,::-webkit-datetime-edit-year-field,::-webkit-datetime-edit-month-field,::-webkit-datetime-edit-day-field,::-webkit-datetime-edit-hour-field,::-webkit-datetime-edit-minute-field,::-webkit-datetime-edit-second-field,::-webkit-datetime-edit-millisecond-field,::-webkit-datetime-edit-meridiem-field{padding-block:0}::-webkit-calendar-picker-indicator{line-height:1}:-moz-ui-invalid{box-shadow:none}button,input:where([type=button],[type=reset],[type=submit]),::file-selector-button{appearance:button}::-webkit-inner-spin-button,::-webkit-outer-spin-button{height:auto}[hidden]:where(:not([hidden=until-found])){display:none!important}}@layer utilities{.pointer-events-auto{pointer-events:auto}.pointer-events-none{pointer-events:none}.\!visible{visibility:visible!important}.collapse{visibility:collapse}.invisible{visibility:hidden}.visible{visibility:visible}.sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip-path:inset(50%);white-space:nowrap;border-width:0}.\!absolute{position:absolute!important}.absolute{position:absolute}.fixed{position:fixed}.relative{position:relative}.static{position:static}.sticky{position:sticky}.inset-0{inset:calc(var(--spacing) * 0)}.inset-x-0{inset-inline:calc(var(--spacing) * 0)}.-start-6{inset-inline-start:calc(var(--spacing) * -6)}.start{inset-inline-start:var(--spacing)}.start-\[calc\(max\(-50vw\,-800px\)\+50\%\)\]{inset-inline-start:calc(max(-50vw,-800px) + 50%)}.end{inset-inline-end:var(--spacing)}.end-6{inset-inline-end:calc(var(--spacing) * 6)}.end-8{inset-inline-end:calc(var(--spacing) * 8)}.top-0{top:calc(var(--spacing) * 0)}.top-1\/2{top:calc(1/2 * 100%)}.top-5{top:calc(var(--spacing) * 5)}.top-20{top:calc(var(--spacing) * 20)}.top-full{top:100%}.right-0{right:calc(var(--spacing) * 0)}.bottom-0{bottom:calc(var(--spacing) * 0)}.bottom-6{bottom:calc(var(--spacing) * 6)}.bottom-24{bottom:calc(var(--spacing) * 24)}.left-0{left:calc(var(--spacing) * 0)}.left-1\/2{left:calc(1/2 * 100%)}.-z-10{z-index:calc(10 * -1)}.z-2{z-index:2}.z-10{z-index:10}.z-50{z-index:50}.z-80{z-index:80}.z-100{z-index:100}.z-500{z-index:500}.z-\[1\]{z-index:1}.z-\[999\]{z-index:999}.z-\[1040\]{z-index:1040}.z-\[1070\]{z-index:1070}.z-\[1080\]{z-index:1080}.order-first{order:-9999}.float-left{float:left}.container{width:100%;@media(width >= 640px){max-width: 640px;}@media(width >= 853px){max-width: 853px;}@media(width >= 1024px){max-width: 1024px;}@media(width >= 1280px){max-width: 1280px;}@media(width >= 1536px){max-width: 1536px;}}.\!-m-px{margin:-1px!important}.m-0{margin:calc(var(--spacing) * 0)}.m-1{margin:calc(var(--spacing) * 1)}.m-2{margin:calc(var(--spacing) * 2)}.m-300{margin:calc(var(--spacing) * 300)}.m-auto{margin:auto}.-mx-2{margin-inline:calc(var(--spacing) * -2)}.mx-1{margin-inline:calc(var(--spacing) * 1)}.mx-\[3px\]{margin-inline:3px}.mx-\[15\%\]{margin-inline:15%}.mx-auto{margin-inline:auto}.my-0{margin-block:calc(var(--spacing) * 0)}.my-3{margin-block:calc(var(--spacing) * 3)}.-ms-5{margin-inline-start:calc(var(--spacing) * -5)}.ms-0{margin-inline-start:calc(var(--spacing) * 0)}.ms-2{margin-inline-start:calc(var(--spacing) * 2)}.ms-6{margin-inline-start:calc(var(--spacing) * 6)}.ms-7{margin-inline-start:calc(var(--spacing) * 7)}.ms-auto{margin-inline-start:auto}.-me-48{margin-inline-end:calc(var(--spacing) * -48)}.me-1{margin-inline-end:calc(var(--spacing) * 1)}.me-2{margin-inline-end:calc(var(--spacing) * 2)}.me-4{margin-inline-end:calc(var(--spacing) * 4)}.me-6{margin-inline-end:calc(var(--spacing) * 6)}.prose{color:var(--tw-prose-body);max-width:65ch; :where(p):not(:where([class~="not-prose"],[class~="not-prose"] *)) { margin-top: 1.25em; margin-bottom: 1.25em; } :where([class~="lead"]):not(:where([class~="not-prose"],[class~="not-prose"] *)) { color: var(--tw-prose-lead); font-size: 1.25em; line-height: 1.6; margin-top: 1.2em; margin-bottom: 1.2em; } :where(a):not(:where([class~="not-prose"],[class~="not-prose"] *)) { color: var(--tw-prose-links); text-decoration: none; font-weight: 500; text-decoration-color: rgba(var(--color-primary-300), 1); &:hover { color: rgba(var(--color-primary-600), 1); text-decoration: none; border-radius: 0.09rem; } } :where(strong):not(:where([class~="not-prose"],[class~="not-prose"] *)) { color: var(--tw-prose-bold); font-weight: 600; } :where(a strong):not(:where([class~="not-prose"],[class~="not-prose"] *)) { color: inherit; } :where(blockquote strong):not(:where([class~="not-prose"],[class~="not-prose"] *)) { color: inherit; } :where(thead th strong):not(:where([class~="not-prose"],[class~="not-prose"] *)) { color: inherit; } :where(ol):not(:where([class~="not-prose"],[class~="not-prose"] *)) { list-style-type: decimal; margin-top: 1.25em; margin-bottom: 1.25em; padding-inline-start: 1.625em; } :where(ol[type="A"]):not(:where([class~="not-prose"],[class~="not-prose"] *)) { list-style-type: upper-alpha; } :where(ol[type="a"]):not(:where([class~="not-prose"],[class~="not-prose"] *)) { list-style-type: lower-alpha; } :where(ol[type="A" s]):not(:where([class~="not-prose"],[class~="not-prose"] *)) { list-style-type: upper-alpha; } :where(ol[type="a" s]):not(:where([class~="not-prose"],[class~="not-prose"] *)) { list-style-type: lower-alpha; } :where(ol[type="I"]):not(:where([class~="not-prose"],[class~="not-prose"] *)) { list-style-type: upper-roman; } :where(ol[type="i"]):not(:where([class~="not-prose"],[class~="not-prose"] *)) { list-style-type: lower-roman; } :where(ol[type="I" s]):not(:where([class~="not-prose"],[class~="not-prose"] *)) { list-style-type: upper-roman; } :where(ol[type="i" s]):not(:where([class~="not-prose"],[class~="not-prose"] *)) { list-style-type: lower-roman; } :where(ol[type="1"]):not(:where([class~="not-prose"],[class~="not-prose"] *)) { list-style-type: decimal; } :where(ul):not(:where([class~="not-prose"],[class~="not-prose"] *)) { list-style-type: disc; margin-top: 1.25em; margin-bottom: 1.25em; padding-inline-start: 1.625em; } :where(ol > li):not(:where([class~="not-prose"],[class~="not-prose"] *))::marker { font-weight: 400; color: var(--tw-prose-counters); } :where(ul > li):not(:where([class~="not-prose"],[class~="not-prose"] *))::marker { color: var(--tw-prose-bullets); } :where(dt):not(:where([class~="not-prose"],[class~="not-prose"] *)) { color: var(--tw-prose-headings); font-weight: 600; margin-top: 1.25em; } :where(hr):not(:where([class~="not-prose"],[class~="not-prose"] *)) { border-color: var(--tw-prose-hr); border-top-width: 1px; margin-top: 3em; margin-bottom: 3em; border: 0.8px solid rgba(var(--color-neutral-300), 1); } :where(blockquote):not(:where([class~="not-prose"],[class~="not-prose"] *)) { font-weight: 500; font-style: italic; color: var(--tw-prose-quotes); border-inline-start-width: 0.25rem; border-inline-start-color: var(--tw-prose-quote-borders); quotes: "\201C""\201D""\2018""\2019"; margin-top: 1.6em; margin-bottom: 1.6em; padding-inline-start: 1em; } :where(blockquote p:first-of-type):not(:where([class~="not-prose"],[class~="not-prose"] *))::before { content: open-quote; } :where(blockquote p:last-of-type):not(:where([class~="not-prose"],[class~="not-prose"] *))::after { content: close-quote; } :where(h1):not(:where([class~="not-prose"],[class~="not-prose"] *)) { color: var(--tw-prose-headings); font-weight: 800; font-size: 2.25em; margin-top: 0; margin-bottom: 0.8888889em; line-height: 1.1111111; } :where(h1 strong):not(:where([class~="not-prose"],[class~="not-prose"] *)) { font-weight: 900; color: inherit; } :where(h2):not(:where([class~="not-prose"],[class~="not-prose"] *)) { color: var(--tw-prose-headings); font-weight: 700; font-size: 1.5em; margin-top: 2em; margin-bottom: 1em; line-height: 1.3333333; } :where(h2 strong):not(:where([class~="not-prose"],[class~="not-prose"] *)) { font-weight: 800; color: inherit; } :where(h3):not(:where([class~="not-prose"],[class~="not-prose"] *)) { color: var(--tw-prose-headings); font-weight: 600; font-size: 1.25em; margin-top: 1.6em; margin-bottom: 0.6em; line-height: 1.6; } :where(h3 strong):not(:where([class~="not-prose"],[class~="not-prose"] *)) { font-weight: 700; color: inherit; } :where(h4):not(:where([class~="not-prose"],[class~="not-prose"] *)) { color: var(--tw-prose-headings); font-weight: 600; margin-top: 1.5em; margin-bottom: 0.5em; line-height: 1.5; } :where(h4 strong):not(:where([class~="not-prose"],[class~="not-prose"] *)) { font-weight: 700; color: inherit; } :where(img):not(:where([class~="not-prose"],[class~="not-prose"] *)) { margin-top: 2em; margin-bottom: 2em; } :where(picture):not(:where([class~="not-prose"],[class~="not-prose"] *)) { display: block; margin-top: 2em; margin-bottom: 2em; } :where(video):not(:where([class~="not-prose"],[class~="not-prose"] *)) { margin-top: 2em; margin-bottom: 2em; } :where(kbd):not(:where([class~="not-prose"],[class~="not-prose"] *)) { font-weight: 600; font-family: inherit; color: var(--tw-prose-kbd); box-shadow: 0 0 0 1px var(--tw-prose-kbd-shadows), 0 3px 0 var(--tw-prose-kbd-shadows); font-size: 0.9rem; border-radius: 0.25rem; padding-top: 0.1875em; padding-inline-end: 0.375em; padding-bottom: 0.1875em; padding-inline-start: 0.375em; background-color: rgba(var(--color-neutral-200), 1); padding: 0.1rem 0.4rem; } :where(code):not(:where([class~="not-prose"],[class~="not-prose"] *)) { color: var(--tw-prose-code); font-weight: 600; font-size: 0.875em; padding-top: 3px; padding-bottom: 3px; padding-left: 5px; padding-right: 5px; border-radius: 0.25rem; } :where(code):not(:where([class~="not-prose"],[class~="not-prose"] *))::before { content: "`"; display: none; } :where(code):not(:where([class~="not-prose"],[class~="not-prose"] *))::after { content: "`"; display: none; } :where(a code):not(:where([class~="not-prose"],[class~="not-prose"] *)) { color: var(--tw-prose-code); } :where(h1 code):not(:where([class~="not-prose"],[class~="not-prose"] *)) { color: inherit; } :where(h2 code):not(:where([class~="not-prose"],[class~="not-prose"] *)) { color: inherit; font-size: 0.875em; } :where(h3 code):not(:where([class~="not-prose"],[class~="not-prose"] *)) { color: inherit; font-size: 0.9em; } :where(h4 code):not(:where([class~="not-prose"],[class~="not-prose"] *)) { color: inherit; } :where(blockquote code):not(:where([class~="not-prose"],[class~="not-prose"] *)) { color: inherit; } :where(thead th code):not(:where([class~="not-prose"],[class~="not-prose"] *)) { color: inherit; } :where(pre):not(:where([class~="not-prose"],[class~="not-prose"] *)) { color: var(--tw-prose-pre-code); background-color: var(--tw-prose-pre-bg); overflow-x: auto; font-weight: 400; font-size: 0.875em; line-height: 1.7142857; margin-top: 1.7142857em; margin-bottom: 1.7142857em; border-radius: 0.375rem; padding-top: 0.8571429em; padding-inline-end: 1.1428571em; padding-bottom: 0.8571429em; padding-inline-start: 1.1428571em; } :where(pre code):not(:where([class~="not-prose"],[class~="not-prose"] *)) { background-color: transparent; border-width: 0; border-radius: 0; padding: 0; font-weight: inherit; color: inherit; font-size: inherit; font-family: inherit; line-height: inherit; } :where(pre code):not(:where([class~="not-prose"],[class~="not-prose"] *))::before { content: none; } :where(pre code):not(:where([class~="not-prose"],[class~="not-prose"] *))::after { content: none; } :where(table):not(:where([class~="not-prose"],[class~="not-prose"] *)) { width: 100%; table-layout: auto; margin-top: 2em; margin-bottom: 2em; font-size: 0.875em; line-height: 1.7142857; } :where(thead):not(:where([class~="not-prose"],[class~="not-prose"] *)) { border-bottom-width: 1px; border-bottom-color: var(--tw-prose-th-borders); } :where(thead th):not(:where([class~="not-prose"],[class~="not-prose"] *)) { color: var(--tw-prose-headings); font-weight: 600; vertical-align: bottom; padding-inline-end: 0.5714286em; padding-bottom: 0.5714286em; padding-inline-start: 0.5714286em; } :where(tbody tr):not(:where([class~="not-prose"],[class~="not-prose"] *)) { border-bottom-width: 1px; border-bottom-color: var(--tw-prose-td-borders); } :where(tbody tr:last-child):not(:where([class~="not-prose"],[class~="not-prose"] *)) { border-bottom-width: 0; } :where(tbody td):not(:where([class~="not-prose"],[class~="not-prose"] *)) { vertical-align: baseline; } :where(tfoot):not(:where([class~="not-prose"],[class~="not-prose"] *)) { border-top-width: 1px; border-top-color: var(--tw-prose-th-borders); } :where(tfoot td):not(:where([class~="not-prose"],[class~="not-prose"] *)) { vertical-align: top; } :where(th, td):not(:where([class~="not-prose"],[class~="not-prose"] *)) { text-align: start; } :where(figure > *):not(:where([class~="not-prose"],[class~="not-prose"] *)) { margin-top: 0; margin-bottom: 0; } :where(figcaption):not(:where([class~="not-prose"],[class~="not-prose"] *)) { color: var(--tw-prose-captions); font-size: 0.875em; line-height: 1.4285714; margin-top: 0.8571429em; } --tw-prose-body: rgba(var(--color-neutral-700), 1);--tw-prose-headings:rgba(var(--color-neutral-800), 1);--tw-prose-lead:rgba(var(--color-neutral-500), 1);--tw-prose-links:rgba(var(--color-primary-600), 1);--tw-prose-bold:inherit;--tw-prose-counters:rgba(var(--color-neutral-800), 1);--tw-prose-bullets:rgba(var(--color-neutral-500), 1);--tw-prose-hr:oklch(92.8% 0.006 264.531);--tw-prose-quotes:rgba(var(--color-neutral-700), 1);--tw-prose-quote-borders:rgba(var(--color-primary-500), 1);--tw-prose-captions:rgba(var(--color-neutral-500), 1);--tw-prose-kbd:oklch(21% 0.034 264.665);--tw-prose-kbd-shadows:color-mix(in oklab, oklch(21% 0.034 264.665) 10%, transparent);--tw-prose-code:rgba(var(--color-secondary-700), 1);--tw-prose-pre-code:rgba(var(--color-neutral-700), 1);--tw-prose-pre-bg:rgba(var(--color-neutral-50), 1);--tw-prose-th-borders:rgba(var(--color-neutral-500), 1);--tw-prose-td-borders:rgba(var(--color-neutral-300), 1);--tw-prose-invert-body:rgba(var(--color-neutral-300), 1);--tw-prose-invert-headings:rgba(var(--color-neutral-50), 1);--tw-prose-invert-lead:rgba(var(--color-neutral-500), 1);--tw-prose-invert-links:rgba(var(--color-primary-400), 1);--tw-prose-invert-bold:rgba(var(--color-neutral), 1);--tw-prose-invert-counters:rgba(var(--color-neutral-400), 1);--tw-prose-invert-bullets:rgba(var(--color-neutral-600), 1);--tw-prose-invert-hr:oklch(37.3% 0.034 259.733);--tw-prose-invert-quotes:rgba(var(--color-neutral-200), 1);--tw-prose-invert-quote-borders:rgba(var(--color-primary-600), 1);--tw-prose-invert-captions:rgba(var(--color-neutral-400), 1);--tw-prose-invert-kbd:#fff;--tw-prose-invert-kbd-shadows:rgb(255 255 255 / 10%);--tw-prose-invert-code:rgba(var(--color-secondary-400), 1);--tw-prose-invert-pre-code:rgba(var(--color-neutral-200), 1);--tw-prose-invert-pre-bg:rgba(var(--color-neutral-700), 1);--tw-prose-invert-th-borders:rgba(var(--color-neutral-500), 1);--tw-prose-invert-td-borders:rgba(var(--color-neutral-700), 1);font-size:1rem;line-height:1.75; :where(picture > img):not(:where([class~="not-prose"],[class~="not-prose"] *)) { margin-top: 0; margin-bottom: 0; } :where(li):not(:where([class~="not-prose"],[class~="not-prose"] *)) { margin-top: 0.5em; margin-bottom: 0.5em; } :where(ol > li):not(:where([class~="not-prose"],[class~="not-prose"] *)) { padding-inline-start: 0.375em; } :where(ul > li):not(:where([class~="not-prose"],[class~="not-prose"] *)) { padding-inline-start: 0.375em; } :where(.prose > ul > li p):not(:where([class~="not-prose"],[class~="not-prose"] *)) { margin-top: 0.75em; margin-bottom: 0.75em; } :where(.prose > ul > li > p:first-child):not(:where([class~="not-prose"],[class~="not-prose"] *)) { margin-top: 1.25em; } :where(.prose > ul > li > p:last-child):not(:where([class~="not-prose"],[class~="not-prose"] *)) { margin-bottom: 1.25em; } :where(.prose > ol > li > p:first-child):not(:where([class~="not-prose"],[class~="not-prose"] *)) { margin-top: 1.25em; } :where(.prose > ol > li > p:last-child):not(:where([class~="not-prose"],[class~="not-prose"] *)) { margin-bottom: 1.25em; } :where(ul ul, ul ol, ol ul, ol ol):not(:where([class~="not-prose"],[class~="not-prose"] *)) { margin-top: 0.75em; margin-bottom: 0.75em; } :where(dl):not(:where([class~="not-prose"],[class~="not-prose"] *)) { margin-top: 1.25em; margin-bottom: 1.25em; } :where(dd):not(:where([class~="not-prose"],[class~="not-prose"] *)) { margin-top: 0.5em; padding-inline-start: 1.625em; } :where(hr + *):not(:where([class~="not-prose"],[class~="not-prose"] *)) { margin-top: 0; } :where(h2 + *):not(:where([class~="not-prose"],[class~="not-prose"] *)) { margin-top: 0; } :where(h3 + *):not(:where([class~="not-prose"],[class~="not-prose"] *)) { margin-top: 0; } :where(h4 + *):not(:where([class~="not-prose"],[class~="not-prose"] *)) { margin-top: 0; } :where(thead th:first-child):not(:where([class~="not-prose"],[class~="not-prose"] *)) { padding-inline-start: 0; } :where(thead th:last-child):not(:where([class~="not-prose"],[class~="not-prose"] *)) { padding-inline-end: 0; } :where(tbody td, tfoot td):not(:where([class~="not-prose"],[class~="not-prose"] *)) { padding-top: 0.5714286em; padding-inline-end: 0.5714286em; padding-bottom: 0.5714286em; padding-inline-start: 0.5714286em; } :where(tbody td:first-child, tfoot td:first-child):not(:where([class~="not-prose"],[class~="not-prose"] *)) { padding-inline-start: 0; } :where(tbody td:last-child, tfoot td:last-child):not(:where([class~="not-prose"],[class~="not-prose"] *)) { padding-inline-end: 0; } :where(figure):not(:where([class~="not-prose"],[class~="not-prose"] *)) { margin-top: 2em; margin-bottom: 2em; } :where(.prose > :first-child):not(:where([class~="not-prose"],[class~="not-prose"] *)) { margin-top: 0; } :where(.prose > :last-child):not(:where([class~="not-prose"],[class~="not-prose"] *)) { margin-bottom: 0; } :where(mark):not(:where([class~="not-prose"],[class~="not-prose"] *)) { color: rgba(var(--color-neutral-800), 1); background-color: rgba(var(--color-primary-600), 1); padding: 0.1rem 0.2rem; border-radius: 0.25rem; } :where(p):not(:where([class~="not-prose"],[class~="not-prose"] *))::before { display: none; } :where(p):not(:where([class~="not-prose"],[class~="not-prose"] *))::after { display: none; } :where(a.active):not(:where([class~="not-prose"],[class~="not-prose"] *)) { text-decoration-color: rgba(var(--color-primary-600), 1); } :where(p.active):not(:where([class~="not-prose"],[class~="not-prose"] *)) { text-decoration-color: rgba(var(--color-primary-600), 1); }}.\!mt-0{margin-top:calc(var(--spacing) * 0)!important}.-mt-\[2px\]{margin-top:calc(2px * -1)}.-mt-\[15px\]{margin-top:calc(15px * -1)}.mt-0{margin-top:calc(var(--spacing) * 0)}.mt-1{margin-top:calc(var(--spacing) * 1)}.mt-2{margin-top:calc(var(--spacing) * 2)}.mt-3{margin-top:calc(var(--spacing) * 3)}.mt-4{margin-top:calc(var(--spacing) * 4)}.mt-5{margin-top:calc(var(--spacing) * 5)}.mt-6{margin-top:calc(var(--spacing) * 6)}.mt-8{margin-top:calc(var(--spacing) * 8)}.mt-10{margin-top:calc(var(--spacing) * 10)}.mt-12{margin-top:calc(var(--spacing) * 12)}.mt-16{margin-top:calc(var(--spacing) * 16)}.mt-20{margin-top:calc(var(--spacing) * 20)}.mt-\[0\.5rem\]{margin-top:.5rem}.-mr-\[100\%\]{margin-right:calc(100% * -1)}.mr-0{margin-right:calc(var(--spacing) * 0)}.mr-1{margin-right:calc(var(--spacing) * 1)}.mr-2{margin-right:calc(var(--spacing) * 2)}.mr-3{margin-right:calc(var(--spacing) * 3)}.mr-5{margin-right:calc(var(--spacing) * 5)}.\!mb-0{margin-bottom:calc(var(--spacing) * 0)!important}.\!mb-9{margin-bottom:calc(var(--spacing) * 9)!important}.-mb-1{margin-bottom:calc(var(--spacing) * -1)}.mb-0{margin-bottom:calc(var(--spacing) * 0)}.mb-1{margin-bottom:calc(var(--spacing) * 1)}.mb-2{margin-bottom:calc(var(--spacing) * 2)}.mb-3{margin-bottom:calc(var(--spacing) * 3)}.mb-5{margin-bottom:calc(var(--spacing) * 5)}.mb-6{margin-bottom:calc(var(--spacing) * 6)}.mb-8{margin-bottom:calc(var(--spacing) * 8)}.mb-10{margin-bottom:calc(var(--spacing) * 10)}.mb-12{margin-bottom:calc(var(--spacing) * 12)}.mb-16{margin-bottom:calc(var(--spacing) * 16)}.mb-20{margin-bottom:calc(var(--spacing) * 20)}.mb-\[2px\]{margin-bottom:2px}.ml-0{margin-left:calc(var(--spacing) * 0)}.ml-2{margin-left:calc(var(--spacing) * 2)}.box-border{box-sizing:border-box}.box-content{box-sizing:content-box}.scrollbar{&::-webkit-scrollbar-track { background-color:var(--scrollbar-track); border-radius:var(--scrollbar-track-radius); } &::-webkit-scrollbar-thumb { background-color:var(--scrollbar-thumb); border-radius:var(--scrollbar-thumb-radius); } &::-webkit-scrollbar-corner { background-color:var(--scrollbar-corner); border-radius:var(--scrollbar-corner-radius); } @supports (-moz-appearance:none) { scrollbar-width:auto; scrollbar-color:var(--scrollbar-thumb,initial) var(--scrollbar-track,initial); } &::-webkit-scrollbar { display:block; width:var(--scrollbar-width,16px); height:var(--scrollbar-height,16px); }}.line-clamp-3{overflow:hidden;display:-webkit-box;-webkit-box-orient:vertical;-webkit-line-clamp:3}.line-clamp-5{overflow:hidden;display:-webkit-box;-webkit-box-orient:vertical;-webkit-line-clamp:5}.\!block{display:block!important}.block{display:block}.contents{display:contents}.flex{display:flex}.grid{display:grid}.hidden{display:none}.inline{display:inline}.inline-block{display:inline-block}.inline-flex{display:inline-flex}.table{display:table}.table-cell{display:table-cell}.aspect-\[4\/3\]{aspect-ratio:4/3}.aspect-auto{aspect-ratio:auto}.aspect-square{aspect-ratio:1/1}.aspect-video{aspect-ratio:var(--aspect-video)}.size-1{width:calc(var(--spacing) * 1);height:calc(var(--spacing) * 1)}.\!h-px{height:1px!important}.h-0{height:calc(var(--spacing) * 0)}.h-1\/2{height:calc(1/2 * 100%)}.h-3{height:calc(var(--spacing) * 3)}.h-4{height:calc(var(--spacing) * 4)}.h-5{height:calc(var(--spacing) * 5)}.h-6{height:calc(var(--spacing) * 6)}.h-8{height:calc(var(--spacing) * 8)}.h-10{height:calc(var(--spacing) * 10)}.h-12{height:calc(var(--spacing) * 12)}.h-14{height:calc(var(--spacing) * 14)}.h-16{height:calc(var(--spacing) * 16)}.h-24{height:calc(var(--spacing) * 24)}.h-36{height:calc(var(--spacing) * 36)}.h-40{height:calc(var(--spacing) * 40)}.h-48{height:calc(var(--spacing) * 48)}.h-84{height:calc(var(--spacing) * 84)}.h-\[3px\]{height:3px}.h-\[150px\]{height:150px}.h-\[800px\]{height:800px}.h-\[1000px\]{height:1e3px}.h-auto{height:auto}.h-full{height:100%}.h-screen{height:100vh}.max-h-3{max-height:calc(var(--spacing) * 3)}.max-h-20{max-height:calc(var(--spacing) * 20)}.min-h-0{min-height:calc(var(--spacing) * 0)}.min-h-\[130px\]{min-height:130px}.min-h-\[148px\]{min-height:148px}.min-h-full{min-height:100%}.\!w-px{width:1px!important}.w-0{width:calc(var(--spacing) * 0)}.w-2{width:calc(var(--spacing) * 2)}.w-3{width:calc(var(--spacing) * 3)}.w-4{width:calc(var(--spacing) * 4)}.w-5{width:calc(var(--spacing) * 5)}.w-6{width:calc(var(--spacing) * 6)}.w-8{width:calc(var(--spacing) * 8)}.w-10{width:calc(var(--spacing) * 10)}.w-12{width:calc(var(--spacing) * 12)}.w-16{width:calc(var(--spacing) * 16)}.w-24{width:calc(var(--spacing) * 24)}.w-36{width:calc(var(--spacing) * 36)}.w-80{width:calc(var(--spacing) * 80)}.w-\[15\%\]{width:15%}.w-\[30px\]{width:30px}.w-auto{width:auto}.w-full{width:100%}.w-max{width:max-content}.w-screen{width:100vw}.max-w-3xl{max-width:var(--container-3xl)}.max-w-7xl{max-width:var(--container-7xl)}.max-w-20{max-width:calc(var(--spacing) * 20)}.max-w-48{max-width:calc(var(--spacing) * 48)}.max-w-\[200px\]{max-width:200px}.max-w-\[267px\]{max-width:267px}.max-w-\[1600px\]{max-width:1600px}.max-w-\[calc\(100\%-1rem\)\]{max-width:calc(100% - 1rem)}.max-w-fit{max-width:fit-content}.max-w-full{max-width:100%}.max-w-md{max-width:var(--container-md)}.max-w-prose{max-width:65ch}.max-w-xl{max-width:var(--container-xl)}.min-w-0{min-width:calc(var(--spacing) * 0)}.min-w-\[1\.8rem\]{min-width:1.8rem}.min-w-\[30px\]{min-width:30px}.min-w-\[220px\]{min-width:220px}.min-w-full{min-width:100%}.flex-1{flex:1}.flex-auto{flex:auto}.flex-initial{flex:0 auto}.flex-none{flex:none}.shrink{flex-shrink:1}.shrink-0{flex-shrink:0}.grow{flex-grow:1}.grow-0{flex-grow:0}.basis-auto{flex-basis:auto}.-translate-x-1\/2{--tw-translate-x:calc(calc(1 / 2 * 100%) * -1);translate:var(--tw-translate-x)var(--tw-translate-y)}.-translate-x-full{--tw-translate-x:-100%;translate:var(--tw-translate-x)var(--tw-translate-y)}.translate-x-full{--tw-translate-x:100%;translate:var(--tw-translate-x)var(--tw-translate-y)}.-translate-y-1\/2{--tw-translate-y:calc(calc(1 / 2 * 100%) * -1);translate:var(--tw-translate-x)var(--tw-translate-y)}.-translate-y-8{--tw-translate-y:calc(var(--spacing) * -8);translate:var(--tw-translate-x)var(--tw-translate-y)}.translate-y-0{--tw-translate-y:calc(var(--spacing) * 0);translate:var(--tw-translate-x)var(--tw-translate-y)}.translate-y-4{--tw-translate-y:calc(var(--spacing) * 4);translate:var(--tw-translate-x)var(--tw-translate-y)}.scale-0{--tw-scale-x:0%;--tw-scale-y:0%;--tw-scale-z:0%;scale:var(--tw-scale-x)var(--tw-scale-y)}.scale-100{--tw-scale-x:100%;--tw-scale-y:100%;--tw-scale-z:100%;scale:var(--tw-scale-x)var(--tw-scale-y)}.scale-\[1\.02\]{scale:1.02}.-rotate-90{rotate:calc(90deg * -1)}.transform{transform:var(--tw-rotate-x,)var(--tw-rotate-y,)var(--tw-rotate-z,)var(--tw-skew-x,)var(--tw-skew-y,)}.transform\!{transform:var(--tw-rotate-x,)var(--tw-rotate-y,)var(--tw-rotate-z,)var(--tw-skew-x,)var(--tw-skew-y,)!important}.transform-none{transform:none}.animate-pulse{animation:var(--animate-pulse)}.cursor-default{cursor:default}.cursor-pointer{cursor:pointer}.touch-pan-y{--tw-pan-y:pan-y;touch-action:var(--tw-pan-x,)var(--tw-pan-y,)var(--tw-pinch-zoom,)}.touch-none{touch-action:none}.resize{resize:both}.list-none{list-style-type:none}.appearance-none{appearance:none}.grid-rows-\[0fr\]{grid-template-rows:0fr}.flex-col{flex-direction:column}.flex-row{flex-direction:row}.flex-wrap{flex-wrap:wrap}.items-center{align-items:center}.items-end{align-items:flex-end}.justify-between{justify-content:space-between}.justify-center{justify-content:center}.gap-1{gap:calc(var(--spacing) * 1)}.gap-2{gap:calc(var(--spacing) * 2)}.gap-3{gap:calc(var(--spacing) * 3)}.gap-4{gap:calc(var(--spacing) * 4)}.space-y-2{ :where(& > :not(:last-child)) { --tw-space-y-reverse: 0; margin-block-start: calc(calc(var(--spacing) * 2) * var(--tw-space-y-reverse)); margin-block-end: calc(calc(var(--spacing) * 2) * calc(1 - var(--tw-space-y-reverse))); }}.space-y-3{ :where(& > :not(:last-child)) { --tw-space-y-reverse: 0; margin-block-start: calc(calc(var(--spacing) * 3) * var(--tw-space-y-reverse)); margin-block-end: calc(calc(var(--spacing) * 3) * calc(1 - var(--tw-space-y-reverse))); }}.space-y-5{ :where(& > :not(:last-child)) { --tw-space-y-reverse: 0; margin-block-start: calc(calc(var(--spacing) * 5) * var(--tw-space-y-reverse)); margin-block-end: calc(calc(var(--spacing) * 5) * calc(1 - var(--tw-space-y-reverse))); }}.space-y-6{ :where(& > :not(:last-child)) { --tw-space-y-reverse: 0; margin-block-start: calc(calc(var(--spacing) * 6) * var(--tw-space-y-reverse)); margin-block-end: calc(calc(var(--spacing) * 6) * calc(1 - var(--tw-space-y-reverse))); }}.space-y-10{ :where(& > :not(:last-child)) { --tw-space-y-reverse: 0; margin-block-start: calc(calc(var(--spacing) * 10) * var(--tw-space-y-reverse)); margin-block-end: calc(calc(var(--spacing) * 10) * calc(1 - var(--tw-space-y-reverse))); }}.gap-x-5{column-gap:calc(var(--spacing) * 5)}.gap-x-6{column-gap:calc(var(--spacing) * 6)}.space-x-2{ :where(& > :not(:last-child)) { --tw-space-x-reverse: 0; margin-inline-start: calc(calc(var(--spacing) * 2) * var(--tw-space-x-reverse)); margin-inline-end: calc(calc(var(--spacing) * 2) * calc(1 - var(--tw-space-x-reverse))); }}.space-x-3{ :where(& > :not(:last-child)) { --tw-space-x-reverse: 0; margin-inline-start: calc(calc(var(--spacing) * 3) * var(--tw-space-x-reverse)); margin-inline-end: calc(calc(var(--spacing) * 3) * calc(1 - var(--tw-space-x-reverse))); }}.space-x-5{ :where(& > :not(:last-child)) { --tw-space-x-reverse: 0; margin-inline-start: calc(calc(var(--spacing) * 5) * var(--tw-space-x-reverse)); margin-inline-end: calc(calc(var(--spacing) * 5) * calc(1 - var(--tw-space-x-reverse))); }}.place-self-center{place-self:center}.self-center{align-self:center}.truncate{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.\!overflow-hidden{overflow:hidden!important}.overflow-auto{overflow:auto}.overflow-hidden{overflow:hidden}.overflow-visible{overflow:visible}.overflow-x-auto{overflow-x:auto}.overflow-y-auto{overflow-y:auto}.overscroll-contain{overscroll-behavior:contain}.scroll-smooth{scroll-behavior:smooth}.\!rounded-md{border-radius:var(--radius-md)!important}.rounded{border-radius:.25rem}.rounded-2xl{border-radius:var(--radius-2xl)}.rounded-\[50\%\]{border-radius:50%}.rounded-full{border-radius:calc(infinity * 1px)}.rounded-lg{border-radius:var(--radius-lg)}.rounded-md{border-radius:var(--radius-md)}.rounded-xl{border-radius:var(--radius-xl)}.rounded-s-\[0\.25rem\]{border-start-start-radius:.25rem;border-end-start-radius:.25rem}.rounded-e-\[0\.25rem\]{border-start-end-radius:.25rem;border-end-end-radius:.25rem}.rounded-t-lg{border-top-left-radius:var(--radius-lg);border-top-right-radius:var(--radius-lg)}.rounded-t-md{border-top-left-radius:var(--radius-md);border-top-right-radius:var(--radius-md)}.rounded-b-lg{border-bottom-right-radius:var(--radius-lg);border-bottom-left-radius:var(--radius-lg)}.\!border-0{border-style:var(--tw-border-style)!important;border-width:0!important}.border{border-style:var(--tw-border-style);border-width:1px}.border-0{border-style:var(--tw-border-style);border-width:0}.border-2{border-style:var(--tw-border-style);border-width:2px}.border-y-\[10px\]{border-block-style:var(--tw-border-style);border-block-width:10px}.border-s-0{border-inline-start-style:var(--tw-border-style);border-inline-start-width:0}.border-s-1{border-inline-start-style:var(--tw-border-style);border-inline-start-width:1px}.border-s-2{border-inline-start-style:var(--tw-border-style);border-inline-start-width:2px}.border-s-\[0\.125rem\]{border-inline-start-style:var(--tw-border-style);border-inline-start-width:.125rem}.border-e-0{border-inline-end-style:var(--tw-border-style);border-inline-end-width:0}.border-t{border-top-style:var(--tw-border-style);border-top-width:1px}.border-b-2{border-bottom-style:var(--tw-border-style);border-bottom-width:2px}.border-l-4{border-left-style:var(--tw-border-style);border-left-width:4px}.border-dotted{--tw-border-style:dotted;border-style:dotted}.border-none{--tw-border-style:none;border-style:none}.border-solid{--tw-border-style:solid;border-style:solid}.border-neutral-100{border-color:rgba(var(--color-neutral-100),1)}.border-neutral-200{border-color:rgba(var(--color-neutral-200),1)}.border-neutral-300{border-color:rgba(var(--color-neutral-300),1)}.border-primary-400{border-color:rgba(var(--color-primary-400),1)}.border-primary-500{border-color:rgba(var(--color-primary-500),1)}.border-secondary-500{border-color:rgba(var(--color-secondary-500),1)}.border-transparent{border-color:transparent}.prose-invert{--tw-prose-body:var(--tw-prose-invert-body);--tw-prose-headings:var(--tw-prose-invert-headings);--tw-prose-lead:var(--tw-prose-invert-lead);--tw-prose-links:var(--tw-prose-invert-links);--tw-prose-bold:var(--tw-prose-invert-bold);--tw-prose-counters:var(--tw-prose-invert-counters);--tw-prose-bullets:var(--tw-prose-invert-bullets);--tw-prose-hr:var(--tw-prose-invert-hr);--tw-prose-quotes:var(--tw-prose-invert-quotes);--tw-prose-quote-borders:var(--tw-prose-invert-quote-borders);--tw-prose-captions:var(--tw-prose-invert-captions);--tw-prose-kbd:var(--tw-prose-invert-kbd);--tw-prose-kbd-shadows:var(--tw-prose-invert-kbd-shadows);--tw-prose-code:var(--tw-prose-invert-code);--tw-prose-pre-code:var(--tw-prose-invert-pre-code);--tw-prose-pre-bg:var(--tw-prose-invert-pre-bg);--tw-prose-th-borders:var(--tw-prose-invert-th-borders);--tw-prose-td-borders:var(--tw-prose-invert-td-borders); :where(a):not(:where([class~="not-prose"],[class~="not-prose"] *)) { text-decoration-color: rgba(var(--color-neutral-600), 1); &:hover { color: rgba(var(--color-primary-400), 1); } } :where(kbd):not(:where([class~="not-prose"],[class~="not-prose"] *)) { color: rgba(var(--color-neutral-200), 1); background-color: rgba(var(--color-neutral-700), 1); } :where(mark):not(:where([class~="not-prose"],[class~="not-prose"] *)) { background-color: rgba(var(--color-primary-400), 1); } :where(code:not(pre code)):not(:where([class~="not-prose"],[class~="not-prose"] *)) { background-color: color-mix(in oklab, oklch(21% 0.006 285.885) 70%, transparent); } :where(a.active):not(:where([class~="not-prose"],[class~="not-prose"] *)) { text-decoration-color: rgba(var(--color-primary-400), 1); } :where(p.active):not(:where([class~="not-prose"],[class~="not-prose"] *)) { text-decoration-color: rgba(var(--color-primary-400), 1); } :where(hr):not(:where([class~="not-prose"],[class~="not-prose"] *)) { border: 0.8px solid rgba(var(--color-neutral-500), 1); }}.bg-\[\#6d6d6d\]{background-color:#6d6d6d}.bg-black{background-color:#000}.bg-neutral{background-color:rgba(var(--color-neutral),1)}.bg-neutral-50{background-color:rgba(var(--color-neutral-50),1)}.bg-neutral-50\/97{background-color:color-mix(in srgb,rgba(rgba(var(--color-neutral-50),1),1) 97%,transparent);@supports(color:color-mix(in lab,red,red)){background-color: color-mix(in oklab,rgba(var(--color-neutral-50),1) 97%,transparent);}}.bg-neutral-100{background-color:rgba(var(--color-neutral-100),1)}.bg-neutral-100\/75{background-color:color-mix(in srgb,rgba(rgba(var(--color-neutral-100),1),1) 75%,transparent);@supports(color:color-mix(in lab,red,red)){background-color: color-mix(in oklab,rgba(var(--color-neutral-100),1) 75%,transparent);}}.bg-neutral-300{background-color:rgba(var(--color-neutral-300),1)}.bg-neutral-500\/50{background-color:color-mix(in srgb,rgba(rgba(var(--color-neutral-500),1),1) 50%,transparent);@supports(color:color-mix(in lab,red,red)){background-color: color-mix(in oklab,rgba(var(--color-neutral-500),1) 50%,transparent);}}.bg-neutral-900{background-color:rgba(var(--color-neutral-900),1)}.bg-neutral\/25{background-color:color-mix(in srgb,rgba(rgba(var(--color-neutral),1),1) 25%,transparent);@supports(color:color-mix(in lab,red,red)){background-color: color-mix(in oklab,rgba(var(--color-neutral),1) 25%,transparent);}}.bg-neutral\/50{background-color:color-mix(in srgb,rgba(rgba(var(--color-neutral),1),1) 50%,transparent);@supports(color:color-mix(in lab,red,red)){background-color: color-mix(in oklab,rgba(var(--color-neutral),1) 50%,transparent);}}.bg-primary-100{background-color:rgba(var(--color-primary-100),1)}.bg-primary-200{background-color:rgba(var(--color-primary-200),1)}.bg-primary-200\/80{background-color:color-mix(in srgb,rgba(rgba(var(--color-primary-200),1),1) 80%,transparent);@supports(color:color-mix(in lab,red,red)){background-color: color-mix(in oklab,rgba(var(--color-primary-200),1) 80%,transparent);}}.bg-primary-500{background-color:rgba(var(--color-primary-500),1)}.bg-primary-600{background-color:rgba(var(--color-primary-600),1)}.bg-transparent{background-color:initial}.bg-white{background-color:#fff}.bg-linear-60{--tw-gradient-position:60deg;@supports(background-image:linear-gradient(in lab,red,red)){--tw-gradient-position: 60deg in oklab;}background-image:linear-gradient(var(--tw-gradient-stops))}.bg-gradient-to-b{--tw-gradient-position:to bottom in oklab;background-image:linear-gradient(var(--tw-gradient-stops))}.bg-gradient-to-r{--tw-gradient-position:to right in oklab;background-image:linear-gradient(var(--tw-gradient-stops))}.bg-gradient-to-t{--tw-gradient-position:to top in oklab;background-image:linear-gradient(var(--tw-gradient-stops))}.bg-none{background-image:none}.from-neutral{--tw-gradient-from:rgba(var(--color-neutral), 1);--tw-gradient-stops:var(--tw-gradient-via-stops, var(--tw-gradient-position), var(--tw-gradient-from) var(--tw-gradient-from-position), var(--tw-gradient-to) var(--tw-gradient-to-position))}.from-primary-500{--tw-gradient-from:rgba(var(--color-primary-500), 1);--tw-gradient-stops:var(--tw-gradient-via-stops, var(--tw-gradient-position), var(--tw-gradient-from) var(--tw-gradient-from-position), var(--tw-gradient-to) var(--tw-gradient-to-position))}.from-60\%{--tw-gradient-from-position:60%}.to-neutral{--tw-gradient-to:rgba(var(--color-neutral), 1);--tw-gradient-stops:var(--tw-gradient-via-stops, var(--tw-gradient-position), var(--tw-gradient-from) var(--tw-gradient-from-position), var(--tw-gradient-to) var(--tw-gradient-to-position))}.to-neutral-100{--tw-gradient-to:rgba(var(--color-neutral-100), 1);--tw-gradient-stops:var(--tw-gradient-via-stops, var(--tw-gradient-position), var(--tw-gradient-from) var(--tw-gradient-from-position), var(--tw-gradient-to) var(--tw-gradient-to-position))}.to-secondary-600{--tw-gradient-to:rgba(var(--color-secondary-600), 1);--tw-gradient-stops:var(--tw-gradient-via-stops, var(--tw-gradient-position), var(--tw-gradient-from) var(--tw-gradient-from-position), var(--tw-gradient-to) var(--tw-gradient-to-position))}.to-transparent{--tw-gradient-to:transparent;--tw-gradient-stops:var(--tw-gradient-via-stops, var(--tw-gradient-position), var(--tw-gradient-from) var(--tw-gradient-from-position), var(--tw-gradient-to) var(--tw-gradient-to-position))}.bg-clip-padding{background-clip:padding-box}.object-contain{object-fit:contain}.object-cover{object-fit:cover}.object-fill{object-fit:fill}.object-scale-down{object-fit:scale-down}.object-left{object-position:left}.\!p-0{padding:calc(var(--spacing) * 0)!important}.p-0{padding:calc(var(--spacing) * 0)}.p-1{padding:calc(var(--spacing) * 1)}.p-1\.5{padding:calc(var(--spacing) * 1.5)}.p-2{padding:calc(var(--spacing) * 2)}.p-4{padding:calc(var(--spacing) * 4)}.p-5{padding:calc(var(--spacing) * 5)}.p-6{padding:calc(var(--spacing) * 6)}.px-0{padding-inline:calc(var(--spacing) * 0)}.px-1{padding-inline:calc(var(--spacing) * 1)}.px-1\.5{padding-inline:calc(var(--spacing) * 1.5)}.px-2{padding-inline:calc(var(--spacing) * 2)}.px-3{padding-inline:calc(var(--spacing) * 3)}.px-4{padding-inline:calc(var(--spacing) * 4)}.px-6{padding-inline:calc(var(--spacing) * 6)}.px-\[0\.4rem\]{padding-inline:.4rem}.px-\[30px\]{padding-inline:30px}.py-1{padding-block:calc(var(--spacing) * 1)}.py-1\.5{padding-block:calc(var(--spacing) * 1.5)}.py-2{padding-block:calc(var(--spacing) * 2)}.py-3{padding-block:calc(var(--spacing) * 3)}.py-4{padding-block:calc(var(--spacing) * 4)}.py-6{padding-block:calc(var(--spacing) * 6)}.py-8{padding-block:calc(var(--spacing) * 8)}.py-10{padding-block:calc(var(--spacing) * 10)}.py-16{padding-block:calc(var(--spacing) * 16)}.py-20{padding-block:calc(var(--spacing) * 20)}.py-\[0\.4rem\]{padding-block:.4rem}.py-\[1px\]{padding-block:1px}.ps-2{padding-inline-start:calc(var(--spacing) * 2)}.ps-5{padding-inline-start:calc(var(--spacing) * 5)}.pe-2{padding-inline-end:calc(var(--spacing) * 2)}.pe-3{padding-inline-end:calc(var(--spacing) * 3)}.pt-2{padding-top:calc(var(--spacing) * 2)}.pt-3{padding-top:calc(var(--spacing) * 3)}.pt-4{padding-top:calc(var(--spacing) * 4)}.pt-8{padding-top:calc(var(--spacing) * 8)}.pt-16{padding-top:calc(var(--spacing) * 16)}.pr-8{padding-right:calc(var(--spacing) * 8)}.pb-2{padding-bottom:calc(var(--spacing) * 2)}.pb-3{padding-bottom:calc(var(--spacing) * 3)}.pb-4{padding-bottom:calc(var(--spacing) * 4)}.pb-6{padding-bottom:calc(var(--spacing) * 6)}.pb-32{padding-bottom:calc(var(--spacing) * 32)}.pl-0{padding-left:calc(var(--spacing) * 0)}.text-center{text-align:center}.text-end{text-align:end}.text-left{text-align:left}.text-right{text-align:right}.text-start{text-align:start}.-indent-\[999px\]{text-indent:calc(999px * -1)}.align-bottom{vertical-align:bottom}.align-middle{vertical-align:middle}.align-text-bottom{vertical-align:text-bottom}.align-top{vertical-align:top}.text-2xl{font-size:var(--text-2xl);line-height:var(--tw-leading,var(--text-2xl--line-height))}.text-3xl{font-size:var(--text-3xl);line-height:var(--tw-leading,var(--text-3xl--line-height))}.text-4xl{font-size:var(--text-4xl);line-height:var(--tw-leading,var(--text-4xl--line-height))}.text-base{font-size:var(--text-base);line-height:var(--tw-leading,var(--text-base--line-height))}.text-lg{font-size:var(--text-lg);line-height:var(--tw-leading,var(--text-lg--line-height))}.text-sm{font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height))}.text-xl{font-size:var(--text-xl);line-height:var(--tw-leading,var(--text-xl--line-height))}.text-xs{font-size:var(--text-xs);line-height:var(--tw-leading,var(--text-xs--line-height))}.text-\[0\.6rem\]{font-size:.6rem}.leading-3{--tw-leading:calc(var(--spacing) * 3);line-height:calc(var(--spacing) * 3)}.leading-6{--tw-leading:calc(var(--spacing) * 6);line-height:calc(var(--spacing) * 6)}.leading-7{--tw-leading:calc(var(--spacing) * 7);line-height:calc(var(--spacing) * 7)}.leading-\[1\.6\]{--tw-leading:1.6;line-height:1.6}.leading-relaxed{--tw-leading:var(--leading-relaxed);line-height:var(--leading-relaxed)}.font-bold{--tw-font-weight:var(--font-weight-bold);font-weight:var(--font-weight-bold)}.font-extrabold{--tw-font-weight:var(--font-weight-extrabold);font-weight:var(--font-weight-extrabold)}.font-light{--tw-font-weight:var(--font-weight-light);font-weight:var(--font-weight-light)}.font-medium{--tw-font-weight:var(--font-weight-medium);font-weight:var(--font-weight-medium)}.font-normal{--tw-font-weight:var(--font-weight-normal);font-weight:var(--font-weight-normal)}.font-semibold{--tw-font-weight:var(--font-weight-semibold);font-weight:var(--font-weight-semibold)}.tracking-normal{--tw-tracking:var(--tracking-normal);letter-spacing:var(--tracking-normal)}.tracking-tight{--tw-tracking:var(--tracking-tight);letter-spacing:var(--tracking-tight)}.text-wrap{text-wrap:wrap}.break-normal{overflow-wrap:normal;word-break:normal}.break-words{overflow-wrap:break-word}.\!whitespace-nowrap{white-space:nowrap!important}.whitespace-normal{white-space:normal}.\!text-neutral{color:rgba(var(--color-neutral),1)!important}.text-inherit{color:inherit}.text-neutral-50{color:rgba(var(--color-neutral-50),1)}.text-neutral-200{color:rgba(var(--color-neutral-200),1)}.text-neutral-300{color:rgba(var(--color-neutral-300),1)}.text-neutral-400{color:rgba(var(--color-neutral-400),1)}.text-neutral-500{color:rgba(var(--color-neutral-500),1)}.text-neutral-600{color:rgba(var(--color-neutral-600),1)}.text-neutral-700{color:rgba(var(--color-neutral-700),1)}.text-neutral-800{color:rgba(var(--color-neutral-800),1)}.text-neutral-900{color:rgba(var(--color-neutral-900),1)}.text-primary-100{color:rgba(var(--color-primary-100),1)}.text-primary-300{color:rgba(var(--color-primary-300),1)}.text-primary-400{color:rgba(var(--color-primary-400),1)}.text-primary-500{color:rgba(var(--color-primary-500),1)}.text-primary-600{color:rgba(var(--color-primary-600),1)}.text-primary-700{color:rgba(var(--color-primary-700),1)}.text-primary-800{color:rgba(var(--color-primary-800),1)}.text-transparent{color:transparent}.text-white{color:#fff}.capitalize{text-transform:capitalize}.lowercase{text-transform:lowercase}.normal-case{text-transform:none}.uppercase{text-transform:uppercase}.italic{font-style:italic}.not-italic{font-style:normal}.ordinal{--tw-ordinal:ordinal;font-variant-numeric:var(--tw-ordinal,)var(--tw-slashed-zero,)var(--tw-numeric-figure,)var(--tw-numeric-spacing,)var(--tw-numeric-fraction,)}.\!no-underline{text-decoration-line:none!important}.line-through{text-decoration-line:line-through}.no-underline{text-decoration-line:none}.overline{text-decoration-line:overline}.underline{text-decoration-line:underline}.decoration-neutral-300{text-decoration-color:rgba(var(--color-neutral-300),1)}.decoration-primary-500{text-decoration-color:rgba(var(--color-primary-500),1)}.underline-offset-auto{text-underline-offset:auto}.\!opacity-0{opacity:0%!important}.\!opacity-100{opacity:100%!important}.opacity-0{opacity:0%}.opacity-30{opacity:30%}.opacity-50{opacity:50%}.opacity-60{opacity:60%}.opacity-65{opacity:65%}.opacity-100{opacity:100%}.mix-blend-multiply{mix-blend-mode:multiply}.mix-blend-normal{mix-blend-mode:normal}.shadow{--tw-shadow:0 1px 3px 0 var(--tw-shadow-color, rgb(0 0 0 / 0.1)), 0 1px 2px -1px var(--tw-shadow-color, rgb(0 0 0 / 0.1));box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.shadow-2xl{--tw-shadow:0 25px 50px -12px var(--tw-shadow-color, rgb(0 0 0 / 0.25));box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.shadow-lg{--tw-shadow:0 10px 15px -3px var(--tw-shadow-color, rgb(0 0 0 / 0.1)), 0 4px 6px -4px var(--tw-shadow-color, rgb(0 0 0 / 0.1));box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.shadow-md{--tw-shadow:0 4px 6px -1px var(--tw-shadow-color, rgb(0 0 0 / 0.1)), 0 2px 4px -2px var(--tw-shadow-color, rgb(0 0 0 / 0.1));box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.shadow-sm{--tw-shadow:0 1px 3px 0 var(--tw-shadow-color, rgb(0 0 0 / 0.1)), 0 1px 2px -1px var(--tw-shadow-color, rgb(0 0 0 / 0.1));box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.shadow-xl{--tw-shadow:0 20px 25px -5px var(--tw-shadow-color, rgb(0 0 0 / 0.1)), 0 8px 10px -6px var(--tw-shadow-color, rgb(0 0 0 / 0.1));box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.ring-2{--tw-ring-shadow:var(--tw-ring-inset,) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color, currentcolor);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.ring-primary-500{--tw-ring-color:rgba(var(--color-primary-500), 1)}.outline{outline-style:var(--tw-outline-style);outline-width:1px}.blur{--tw-blur:blur(8px);filter:var(--tw-blur,)var(--tw-brightness,)var(--tw-contrast,)var(--tw-grayscale,)var(--tw-hue-rotate,)var(--tw-invert,)var(--tw-saturate,)var(--tw-sepia,)var(--tw-drop-shadow,)}.blur\!{--tw-blur:blur(8px) !important;filter:var(--tw-blur,)var(--tw-brightness,)var(--tw-contrast,)var(--tw-grayscale,)var(--tw-hue-rotate,)var(--tw-invert,)var(--tw-saturate,)var(--tw-sepia,)var(--tw-drop-shadow,)!important}.invert{--tw-invert:invert(100%);filter:var(--tw-blur,)var(--tw-brightness,)var(--tw-contrast,)var(--tw-grayscale,)var(--tw-hue-rotate,)var(--tw-invert,)var(--tw-saturate,)var(--tw-sepia,)var(--tw-drop-shadow,)}.filter{filter:var(--tw-blur,)var(--tw-brightness,)var(--tw-contrast,)var(--tw-grayscale,)var(--tw-hue-rotate,)var(--tw-invert,)var(--tw-saturate,)var(--tw-sepia,)var(--tw-drop-shadow,)}.filter\!{filter:var(--tw-blur,)var(--tw-brightness,)var(--tw-contrast,)var(--tw-grayscale,)var(--tw-hue-rotate,)var(--tw-invert,)var(--tw-saturate,)var(--tw-sepia,)var(--tw-drop-shadow,)!important}.backdrop-blur{--tw-backdrop-blur:blur(8px);-webkit-backdrop-filter:var(--tw-backdrop-blur,)var(--tw-backdrop-brightness,)var(--tw-backdrop-contrast,)var(--tw-backdrop-grayscale,)var(--tw-backdrop-hue-rotate,)var(--tw-backdrop-invert,)var(--tw-backdrop-opacity,)var(--tw-backdrop-saturate,)var(--tw-backdrop-sepia,);backdrop-filter:var(--tw-backdrop-blur,)var(--tw-backdrop-brightness,)var(--tw-backdrop-contrast,)var(--tw-backdrop-grayscale,)var(--tw-backdrop-hue-rotate,)var(--tw-backdrop-invert,)var(--tw-backdrop-opacity,)var(--tw-backdrop-saturate,)var(--tw-backdrop-sepia,)}.backdrop-blur-2xl{--tw-backdrop-blur:blur(var(--blur-2xl));-webkit-backdrop-filter:var(--tw-backdrop-blur,)var(--tw-backdrop-brightness,)var(--tw-backdrop-contrast,)var(--tw-backdrop-grayscale,)var(--tw-backdrop-hue-rotate,)var(--tw-backdrop-invert,)var(--tw-backdrop-opacity,)var(--tw-backdrop-saturate,)var(--tw-backdrop-sepia,);backdrop-filter:var(--tw-backdrop-blur,)var(--tw-backdrop-brightness,)var(--tw-backdrop-contrast,)var(--tw-backdrop-grayscale,)var(--tw-backdrop-hue-rotate,)var(--tw-backdrop-invert,)var(--tw-backdrop-opacity,)var(--tw-backdrop-saturate,)var(--tw-backdrop-sepia,)}.backdrop-blur-sm{--tw-backdrop-blur:blur(var(--blur-sm));-webkit-backdrop-filter:var(--tw-backdrop-blur,)var(--tw-backdrop-brightness,)var(--tw-backdrop-contrast,)var(--tw-backdrop-grayscale,)var(--tw-backdrop-hue-rotate,)var(--tw-backdrop-invert,)var(--tw-backdrop-opacity,)var(--tw-backdrop-saturate,)var(--tw-backdrop-sepia,);backdrop-filter:var(--tw-backdrop-blur,)var(--tw-backdrop-brightness,)var(--tw-backdrop-contrast,)var(--tw-backdrop-grayscale,)var(--tw-backdrop-hue-rotate,)var(--tw-backdrop-invert,)var(--tw-backdrop-opacity,)var(--tw-backdrop-saturate,)var(--tw-backdrop-sepia,)}.backdrop-blur-xl{--tw-backdrop-blur:blur(var(--blur-xl));-webkit-backdrop-filter:var(--tw-backdrop-blur,)var(--tw-backdrop-brightness,)var(--tw-backdrop-contrast,)var(--tw-backdrop-grayscale,)var(--tw-backdrop-hue-rotate,)var(--tw-backdrop-invert,)var(--tw-backdrop-opacity,)var(--tw-backdrop-saturate,)var(--tw-backdrop-sepia,);backdrop-filter:var(--tw-backdrop-blur,)var(--tw-backdrop-brightness,)var(--tw-backdrop-contrast,)var(--tw-backdrop-grayscale,)var(--tw-backdrop-hue-rotate,)var(--tw-backdrop-invert,)var(--tw-backdrop-opacity,)var(--tw-backdrop-saturate,)var(--tw-backdrop-sepia,)}.backdrop-brightness-112{--tw-backdrop-brightness:brightness(112%);-webkit-backdrop-filter:var(--tw-backdrop-blur,)var(--tw-backdrop-brightness,)var(--tw-backdrop-contrast,)var(--tw-backdrop-grayscale,)var(--tw-backdrop-hue-rotate,)var(--tw-backdrop-invert,)var(--tw-backdrop-opacity,)var(--tw-backdrop-saturate,)var(--tw-backdrop-sepia,);backdrop-filter:var(--tw-backdrop-blur,)var(--tw-backdrop-brightness,)var(--tw-backdrop-contrast,)var(--tw-backdrop-grayscale,)var(--tw-backdrop-hue-rotate,)var(--tw-backdrop-invert,)var(--tw-backdrop-opacity,)var(--tw-backdrop-saturate,)var(--tw-backdrop-sepia,)}.backdrop-saturate-220{--tw-backdrop-saturate:saturate(220%);-webkit-backdrop-filter:var(--tw-backdrop-blur,)var(--tw-backdrop-brightness,)var(--tw-backdrop-contrast,)var(--tw-backdrop-grayscale,)var(--tw-backdrop-hue-rotate,)var(--tw-backdrop-invert,)var(--tw-backdrop-opacity,)var(--tw-backdrop-saturate,)var(--tw-backdrop-sepia,);backdrop-filter:var(--tw-backdrop-blur,)var(--tw-backdrop-brightness,)var(--tw-backdrop-contrast,)var(--tw-backdrop-grayscale,)var(--tw-backdrop-hue-rotate,)var(--tw-backdrop-invert,)var(--tw-backdrop-opacity,)var(--tw-backdrop-saturate,)var(--tw-backdrop-sepia,)}.transition{transition-property:color,background-color,border-color,outline-color,text-decoration-color,fill,stroke,--tw-gradient-from,--tw-gradient-via,--tw-gradient-to,opacity,box-shadow,transform,translate,scale,rotate,filter,-webkit-backdrop-filter,backdrop-filter,display,content-visibility,overlay,pointer-events;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-\[grid-template-rows\]{transition-property:grid-template-rows;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-\[height\]{transition-property:height;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-\[opacity\,visibility\]{transition-property:opacity,visibility;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-\[transform\,_opacity\]{transition-property:transform,opacity;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-\[width\]{transition-property:width;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-all{transition-property:all;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-colors{transition-property:color,background-color,border-color,outline-color,text-decoration-color,fill,stroke,--tw-gradient-from,--tw-gradient-via,--tw-gradient-to;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-opacity{transition-property:opacity;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-transform{transition-property:transform,translate,scale,rotate;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.duration-150{--tw-duration:150ms;transition-duration:150ms}.duration-200{--tw-duration:200ms;transition-duration:200ms}.duration-300{--tw-duration:300ms;transition-duration:300ms}.duration-\[350ms\]{--tw-duration:350ms;transition-duration:350ms}.duration-\[600ms\]{--tw-duration:600ms;transition-duration:600ms}.ease-\[cubic-bezier\(0\,0\,0\.15\,1\)\,_cubic-bezier\(0\,0\,0\.15\,1\)\]{--tw-ease:cubic-bezier(0,0,0.15,1), cubic-bezier(0,0,0.15,1);transition-timing-function:cubic-bezier(0,0,.15,1),cubic-bezier(0,0,.15,1)}.ease-\[cubic-bezier\(0\.25\,0\.1\,0\.25\,1\.0\)\]{--tw-ease:cubic-bezier(0.25,0.1,0.25,1.0);transition-timing-function:cubic-bezier(.25,.1,.25,1)}.ease-in{--tw-ease:var(--ease-in);transition-timing-function:var(--ease-in)}.ease-in-out{--tw-ease:var(--ease-in-out);transition-timing-function:var(--ease-in-out)}.ease-linear{--tw-ease:linear;transition-timing-function:linear}.ease-out{--tw-ease:var(--ease-out);transition-timing-function:var(--ease-out)}.select-none{-webkit-user-select:none;user-select:none}.\!\[clip\:rect\(0\,0\,0\,0\)\]{clip:rect(0,0,0,0)!important}.group-open\:rotate-0{&:is(:where(.group):is([open],:popover-open,:open) *) { rotate:0deg; }}.group-focus-within\:visible{&:is(:where(.group):focus-within *) { visibility:visible; }}.group-focus-within\:opacity-100{&:is(:where(.group):focus-within *) { opacity:100%; }}.group-hover\:visible{&:is(:where(.group):hover *) { @media (hover:hover) { visibility:visible; } }}.group-hover\:scale-110{&:is(:where(.group):hover *) { @media (hover:hover) { --tw-scale-x:110%; --tw-scale-y:110%; --tw-scale-z:110%; scale:var(--tw-scale-x) var(--tw-scale-y); } }}.group-hover\:text-primary-500{&:is(:where(.group):hover *) { @media (hover:hover) { color:rgba(var(--color-primary-500),1); } }}.group-hover\:opacity-100{&:is(:where(.group):hover *) { @media (hover:hover) { opacity:100%; } }}.group-hover\:ring-2{&:is(:where(.group):hover *) { @media (hover:hover) { --tw-ring-shadow:var(--tw-ring-inset,) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color,currentcolor); box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow); } }}.group-hover\:ring-primary-500{&:is(:where(.group):hover *) { @media (hover:hover) { --tw-ring-color:rgba(var(--color-primary-500),1); } }}.group-data-\[twe-input-focused\]\:border-x-0{&:is(:where(.group)[data-twe-input-focused] *) { border-inline-style:var(--tw-border-style); border-inline-width:0px; }}.group-data-\[twe-input-focused\]\:border-s-0{&:is(:where(.group)[data-twe-input-focused] *) { border-inline-start-style:var(--tw-border-style); border-inline-start-width:0px; }}.group-data-\[twe-input-focused\]\:border-e-0{&:is(:where(.group)[data-twe-input-focused] *) { border-inline-end-style:var(--tw-border-style); border-inline-end-width:0px; }}.group-data-\[twe-input-focused\]\:border-t{&:is(:where(.group)[data-twe-input-focused] *) { border-top-style:var(--tw-border-style); border-top-width:1px; }}.group-data-\[twe-input-focused\]\:border-solid{&:is(:where(.group)[data-twe-input-focused] *) { --tw-border-style:solid; border-style:solid; }}.group-data-\[twe-input-focused\]\:border-white{&:is(:where(.group)[data-twe-input-focused] *) { border-color:#fff; }}.group-data-\[twe-input-focused\]\:border-t-transparent{&:is(:where(.group)[data-twe-input-focused] *) { border-top-color:transparent; }}.group-data-\[twe-input-focused\]\:shadow-white{&:is(:where(.group)[data-twe-input-focused] *) { --tw-shadow-color:#fff; @supports (color:color-mix(in lab,red,red)) { --tw-shadow-color:color-mix(in oklab,#fff var(--tw-shadow-alpha),transparent); } }}.group-data-\[twe-input-state-active\]\:border-x-0{&:is(:where(.group)[data-twe-input-state-active] *) { border-inline-style:var(--tw-border-style); border-inline-width:0px; }}.group-data-\[twe-input-state-active\]\:border-s-0{&:is(:where(.group)[data-twe-input-state-active] *) { border-inline-start-style:var(--tw-border-style); border-inline-start-width:0px; }}.group-data-\[twe-input-state-active\]\:border-e-0{&:is(:where(.group)[data-twe-input-state-active] *) { border-inline-end-style:var(--tw-border-style); border-inline-end-width:0px; }}.group-data-\[twe-input-state-active\]\:border-t{&:is(:where(.group)[data-twe-input-state-active] *) { border-top-style:var(--tw-border-style); border-top-width:1px; }}.group-data-\[twe-input-state-active\]\:border-solid{&:is(:where(.group)[data-twe-input-state-active] *) { --tw-border-style:solid; border-style:solid; }}.group-data-\[twe-input-state-active\]\:border-t-transparent{&:is(:where(.group)[data-twe-input-state-active] *) { border-top-color:transparent; }}.peer-checked\:visible{&:is(:where(.peer):checked ~ *) { visibility:visible; }}.peer-checked\:opacity-100{&:is(:where(.peer):checked ~ *) { opacity:100%; }}.peer-checked\/full\:grid-rows-\[1fr\]{&:is(:where(.peer\/full):checked ~ *) { grid-template-rows:1fr; }}.before\:absolute{&::before { content:var(--tw-content); position:absolute; }}.before\:inset-0{&::before { content:var(--tw-content); inset:calc(var(--spacing) * 0); }}.after\:clear-both{&::after { content:var(--tw-content); clear:both; }}.after\:block{&::after { content:var(--tw-content); display:block; }}.after\:content-\[\'\'\]{&::after { --tw-content:''; content:var(--tw-content); }}.first\:mt-8{&:first-child { margin-top:calc(var(--spacing) * 8); }}.empty\:hidden{&:empty { display:none; }}.hover\:border-transparent{&:hover { @media (hover:hover) { border-color:transparent; } }}.hover\:\!bg-primary-500{&:hover { @media (hover:hover) { background-color:rgba(var(--color-primary-500),1)!important; } }}.hover\:bg-neutral-200{&:hover { @media (hover:hover) { background-color:rgba(var(--color-neutral-200),1); } }}.hover\:bg-primary-100{&:hover { @media (hover:hover) { background-color:rgba(var(--color-primary-100),1); } }}.hover\:bg-primary-500{&:hover { @media (hover:hover) { background-color:rgba(var(--color-primary-500),1); } }}.hover\:bg-primary-600{&:hover { @media (hover:hover) { background-color:rgba(var(--color-primary-600),1); } }}.hover\:text-neutral{&:hover { @media (hover:hover) { color:rgba(var(--color-neutral),1); } }}.hover\:text-neutral-700{&:hover { @media (hover:hover) { color:rgba(var(--color-neutral-700),1); } }}.hover\:text-primary-400{&:hover { @media (hover:hover) { color:rgba(var(--color-primary-400),1); } }}.hover\:text-primary-500{&:hover { @media (hover:hover) { color:rgba(var(--color-primary-500),1); } }}.hover\:text-primary-600{&:hover { @media (hover:hover) { color:rgba(var(--color-primary-600),1); } }}.hover\:text-primary-700{&:hover { @media (hover:hover) { color:rgba(var(--color-primary-700),1); } }}.hover\:no-underline{&:hover { @media (hover:hover) { text-decoration-line:none; } }}.hover\:underline{&:hover { @media (hover:hover) { text-decoration-line:underline; } }}.hover\:decoration-primary-400{&:hover { @media (hover:hover) { text-decoration-color:rgba(var(--color-primary-400),1); } }}.hover\:decoration-2{&:hover { @media (hover:hover) { text-decoration-thickness:2px; } }}.hover\:underline-offset-2{&:hover { @media (hover:hover) { text-underline-offset:2px; } }}.hover\:opacity-90{&:hover { @media (hover:hover) { opacity:90%; } }}.hover\:outline-none{&:hover { @media (hover:hover) { --tw-outline-style:none; outline-style:none; } }}.focus\:translate-y-0{&:focus { --tw-translate-y:calc(var(--spacing) * 0); translate:var(--tw-translate-x) var(--tw-translate-y); }}.focus\:border-primary-500{&:focus { border-color:rgba(var(--color-primary-500),1); }}.focus\:bg-primary-100{&:focus { background-color:rgba(var(--color-primary-100),1); }}.focus\:no-underline{&:focus { text-decoration-line:none; }}.focus\:opacity-90{&:focus { opacity:90%; }}.focus\:ring-primary-500{&:focus { --tw-ring-color:rgba(var(--color-primary-500),1); }}.focus\:outline-2{&:focus { outline-style:var(--tw-outline-style); outline-width:2px; }}.focus\:outline-transparent{&:focus { outline-color:transparent; }}.focus\:outline-dotted{&:focus { --tw-outline-style:dotted; outline-style:dotted; }}.focus\:outline-none{&:focus { --tw-outline-style:none; outline-style:none; }}.data-\[popper-reference-hidden\]\:hidden{&[data-popper-reference-hidden] { display: none; }}.data-\[twe-carousel-fade\]\:z-0{&[data-twe-carousel-fade] { z-index: 0; }}.data-\[twe-carousel-fade\]\:z-\[1\]{&[data-twe-carousel-fade] { z-index: 1; }}.data-\[twe-carousel-fade\]\:opacity-0{&[data-twe-carousel-fade] { opacity: 0%; }}.data-\[twe-carousel-fade\]\:opacity-100{&[data-twe-carousel-fade] { opacity: 100%; }}.data-\[twe-carousel-fade\]\:delay-600{&[data-twe-carousel-fade] { transition-delay: 600ms; }}.data-\[twe-carousel-fade\]\:duration-\[600ms\]{&[data-twe-carousel-fade] { --tw-duration: 600ms; transition-duration: 600ms; }}.motion-reduce\:transition-none{@media(prefers-reduced-motion:reduce){transition-property: none;}}.sm\:me-7{@media(width >= 640px){margin-inline-end: calc(var(--spacing) * 7);}}.sm\:mt-16{@media(width >= 640px){margin-top: calc(var(--spacing) * 16);}}.sm\:mb-0{@media(width >= 640px){margin-bottom: calc(var(--spacing) * 0);}}.sm\:w-1\/2{@media(width >= 640px){width: calc(1 / 2 * 100%);}}.sm\:grid-cols-2{@media(width >= 640px){grid-template-columns: repeat(2,minmax(0,1fr));}}.sm\:flex-row{@media(width >= 640px){flex-direction: row;}}.sm\:overflow-hidden{@media(width >= 640px){overflow: hidden;}}.sm\:p-6{@media(width >= 640px){padding: calc(var(--spacing) * 6);}}.sm\:px-6{@media(width >= 640px){padding-inline: calc(var(--spacing) * 6);}}.sm\:px-14{@media(width >= 640px){padding-inline: calc(var(--spacing) * 14);}}.sm\:py-24{@media(width >= 640px){padding-block: calc(var(--spacing) * 24);}}.sm\:text-lg{@media(width >= 640px){font-size: var(--text-lg); line-height: var(--tw-leading,var(--text-lg--line-height));}}.sm\:last\:me-0{@media(width >= 640px){&:last-child{margin-inline-end:calc(var(--spacing) * 0)}}}.md\:-me-16{@media(width >= 853px){margin-inline-end: calc(var(--spacing) * -16);}}.md\:mt-0{@media(width >= 853px){margin-top: calc(var(--spacing) * 0);}}.md\:mr-7{@media(width >= 853px){margin-right: calc(var(--spacing) * 7);}}.md\:flex{@media(width >= 853px){display: flex;}}.md\:hidden{@media(width >= 853px){display: none;}}.md\:h-56{@media(width >= 853px){height: calc(var(--spacing) * 56);}}.md\:h-\[200px\]{@media(width >= 853px){height: 200px;}}.md\:w-1\/3{@media(width >= 853px){width: calc(1 / 3 * 100%);}}.md\:w-auto{@media(width >= 853px){width: auto;}}.md\:grid-cols-3{@media(width >= 853px){grid-template-columns: repeat(3,minmax(0,1fr));}}.md\:flex-row{@media(width >= 853px){flex-direction: row;}}.md\:justify-start{@media(width >= 853px){justify-content: flex-start;}}.md\:p-\[10vh\]{@media(width >= 853px){padding: 10vh;}}.md\:px-24{@media(width >= 853px){padding-inline: calc(var(--spacing) * 24);}}.lg\:absolute{@media(width >= 1024px){position: absolute;}}.lg\:relative{@media(width >= 1024px){position: relative;}}.lg\:sticky{@media(width >= 1024px){position: sticky;}}.lg\:top-10{@media(width >= 1024px){top: calc(var(--spacing) * 10);}}.lg\:top-\[140px\]{@media(width >= 1024px){top: 140px;}}.lg\:order-last{@media(width >= 1024px){order: 9999;}}.lg\:m-0{@media(width >= 1024px){margin: calc(var(--spacing) * 0);}}.lg\:mx-0{@media(width >= 1024px){margin-inline: calc(var(--spacing) * 0);}}.lg\:mx-auto{@media(width >= 1024px){margin-inline: auto;}}.lg\:ms-auto{@media(width >= 1024px){margin-inline-start: auto;}}.lg\:mt-0{@media(width >= 1024px){margin-top: calc(var(--spacing) * 0);}}.lg\:block{@media(width >= 1024px){display: block;}}.lg\:grid{@media(width >= 1024px){display: grid;}}.lg\:hidden{@media(width >= 1024px){display: none;}}.lg\:h-72{@media(width >= 1024px){height: calc(var(--spacing) * 72);}}.lg\:h-full{@media(width >= 1024px){height: 100%;}}.lg\:w-1\/4{@media(width >= 1024px){width: calc(1 / 4 * 100%);}}.lg\:w-auto{@media(width >= 1024px){width: auto;}}.lg\:max-w-2xs{@media(width >= 1024px){max-width: var(--container-2xs);}}.lg\:max-w-7xl{@media(width >= 1024px){max-width: var(--container-7xl);}}.lg\:max-w-none{@media(width >= 1024px){max-width: none;}}.lg\:grid-flow-col-dense{@media(width >= 1024px){grid-auto-flow: column dense;}}.lg\:grid-cols-2{@media(width >= 1024px){grid-template-columns: repeat(2,minmax(0,1fr));}}.lg\:flex-row{@media(width >= 1024px){flex-direction: row;}}.lg\:gap-24{@media(width >= 1024px){gap: calc(var(--spacing) * 24);}}.lg\:p-\[12vh\]{@media(width >= 1024px){padding: 12vh;}}.lg\:px-0{@media(width >= 1024px){padding-inline: calc(var(--spacing) * 0);}}.lg\:px-8{@media(width >= 1024px){padding-inline: calc(var(--spacing) * 8);}}.lg\:px-32{@media(width >= 1024px){padding-inline: calc(var(--spacing) * 32);}}.lg\:py-16{@media(width >= 1024px){padding-block: calc(var(--spacing) * 16);}}.lg\:py-32{@media(width >= 1024px){padding-block: calc(var(--spacing) * 32);}}.lg\:ps-8{@media(width >= 1024px){padding-inline-start: calc(var(--spacing) * 8);}}.xl\:w-1\/4{@media(width >= 1280px){width: calc(1 / 4 * 100%);}}.xl\:grid-cols-4{@media(width >= 1280px){grid-template-columns: repeat(4,minmax(0,1fr));}}.\32 xl\:grid-cols-5{@media(width >= 1536px){grid-template-columns: repeat(5,minmax(0,1fr));}}.ltr\:-ml-12{&:where(:dir(ltr),[dir="ltr"],[dir="ltr"] *) { margin-left:calc(var(--spacing) * -12); }}.ltr\:block{&:where(:dir(ltr),[dir="ltr"],[dir="ltr"] *) { display:block; }}.ltr\:hidden{&:where(:dir(ltr),[dir="ltr"],[dir="ltr"] *) { display:none; }}.rtl\:-mr-\[79px\]{&:where(:dir(rtl),[dir="rtl"],[dir="rtl"] *) { margin-right:calc(79px * -1); }}.rtl\:block{&:where(:dir(rtl),[dir="rtl"],[dir="rtl"] *) { display:block; }}.rtl\:hidden{&:where(:dir(rtl),[dir="rtl"],[dir="rtl"] *) { display:none; }}.rtl\:rotate-180{&:where(:dir(rtl),[dir="rtl"],[dir="rtl"] *) { rotate:180deg; }}.dark\:block{&:is(.dark *) { display:block; }}.dark\:flex{&:is(.dark *) { display:flex; }}.dark\:hidden{&:is(.dark *) { display:none; }}.dark\:border-neutral-400{&:is(.dark *) { border-color:rgba(var(--color-neutral-400),1); }}.dark\:border-neutral-600{&:is(.dark *) { border-color:rgba(var(--color-neutral-600),1); }}.dark\:border-neutral-700{&:is(.dark *) { border-color:rgba(var(--color-neutral-700),1); }}.dark\:border-primary-300{&:is(.dark *) { border-color:rgba(var(--color-primary-300),1); }}.dark\:border-primary-600{&:is(.dark *) { border-color:rgba(var(--color-primary-600),1); }}.dark\:border-white\/10{&:is(.dark *) { border-color:color-mix(in oklab,#fff 10%,transparent); }}.dark\:prose-invert{&:is(.dark *) { --tw-prose-body:var(--tw-prose-invert-body); --tw-prose-headings:var(--tw-prose-invert-headings); --tw-prose-lead:var(--tw-prose-invert-lead); --tw-prose-links:var(--tw-prose-invert-links); --tw-prose-bold:var(--tw-prose-invert-bold); --tw-prose-counters:var(--tw-prose-invert-counters); --tw-prose-bullets:var(--tw-prose-invert-bullets); --tw-prose-hr:var(--tw-prose-invert-hr); --tw-prose-quotes:var(--tw-prose-invert-quotes); --tw-prose-quote-borders:var(--tw-prose-invert-quote-borders); --tw-prose-captions:var(--tw-prose-invert-captions); --tw-prose-kbd:var(--tw-prose-invert-kbd); --tw-prose-kbd-shadows:var(--tw-prose-invert-kbd-shadows); --tw-prose-code:var(--tw-prose-invert-code); --tw-prose-pre-code:var(--tw-prose-invert-pre-code); --tw-prose-pre-bg:var(--tw-prose-invert-pre-bg); --tw-prose-th-borders:var(--tw-prose-invert-th-borders); --tw-prose-td-borders:var(--tw-prose-invert-td-borders);:where(a):not(:where([class~="not-prose"],[class~="not-prose"] *)) { text-decoration-color:rgba(var(--color-neutral-600),1); &:hover { color:rgba(var(--color-primary-400),1); } }:where(kbd):not(:where([class~="not-prose"],[class~="not-prose"] *)) { color:rgba(var(--color-neutral-200),1); background-color:rgba(var(--color-neutral-700),1); }:where(mark):not(:where([class~="not-prose"],[class~="not-prose"] *)) { background-color:rgba(var(--color-primary-400),1); }:where(code:not(pre code)):not(:where([class~="not-prose"],[class~="not-prose"] *)) { background-color:color-mix(in oklab,oklch(21% 0.006 285.885) 70%,transparent); }:where(a.active):not(:where([class~="not-prose"],[class~="not-prose"] *)) { text-decoration-color:rgba(var(--color-primary-400),1); }:where(p.active):not(:where([class~="not-prose"],[class~="not-prose"] *)) { text-decoration-color:rgba(var(--color-primary-400),1); }:where(hr):not(:where([class~="not-prose"],[class~="not-prose"] *)) { border:0.8px solid rgba(var(--color-neutral-500),1); } }}.dark\:bg-neutral-100{&:is(.dark *) { background-color:rgba(var(--color-neutral-100),1); }}.dark\:bg-neutral-400{&:is(.dark *) { background-color:rgba(var(--color-neutral-400),1); }}.dark\:bg-neutral-600{&:is(.dark *) { background-color:rgba(var(--color-neutral-600),1); }}.dark\:bg-neutral-700{&:is(.dark *) { background-color:rgba(var(--color-neutral-700),1); }}.dark\:bg-neutral-800{&:is(.dark *) { background-color:rgba(var(--color-neutral-800),1); }}.dark\:bg-neutral-800\/25{&:is(.dark *) { background-color:color-mix(in srgb,rgba(rgba(var(--color-neutral-800),1),1) 25%,transparent); @supports (color:color-mix(in lab,red,red)) { background-color:color-mix(in oklab,rgba(var(--color-neutral-800),1) 25%,transparent); } }}.dark\:bg-neutral-800\/50{&:is(.dark *) { background-color:color-mix(in srgb,rgba(rgba(var(--color-neutral-800),1),1) 50%,transparent); @supports (color:color-mix(in lab,red,red)) { background-color:color-mix(in oklab,rgba(var(--color-neutral-800),1) 50%,transparent); } }}.dark\:bg-neutral-800\/60{&:is(.dark *) { background-color:color-mix(in srgb,rgba(rgba(var(--color-neutral-800),1),1) 60%,transparent); @supports (color:color-mix(in lab,red,red)) { background-color:color-mix(in oklab,rgba(var(--color-neutral-800),1) 60%,transparent); } }}.dark\:bg-neutral-900{&:is(.dark *) { background-color:rgba(var(--color-neutral-900),1); }}.dark\:bg-neutral-900\/50{&:is(.dark *) { background-color:color-mix(in srgb,rgba(rgba(var(--color-neutral-900),1),1) 50%,transparent); @supports (color:color-mix(in lab,red,red)) { background-color:color-mix(in oklab,rgba(var(--color-neutral-900),1) 50%,transparent); } }}.dark\:bg-neutral-900\/99{&:is(.dark *) { background-color:color-mix(in srgb,rgba(rgba(var(--color-neutral-900),1),1) 99%,transparent); @supports (color:color-mix(in lab,red,red)) { background-color:color-mix(in oklab,rgba(var(--color-neutral-900),1) 99%,transparent); } }}.dark\:bg-primary-300{&:is(.dark *) { background-color:rgba(var(--color-primary-300),1); }}.dark\:bg-primary-400{&:is(.dark *) { background-color:rgba(var(--color-primary-400),1); }}.dark\:bg-primary-800{&:is(.dark *) { background-color:rgba(var(--color-primary-800),1); }}.dark\:bg-primary-800\/30{&:is(.dark *) { background-color:color-mix(in srgb,rgba(rgba(var(--color-primary-800),1),1) 30%,transparent); @supports (color:color-mix(in lab,red,red)) { background-color:color-mix(in oklab,rgba(var(--color-primary-800),1) 30%,transparent); } }}.dark\:bg-primary-900{&:is(.dark *) { background-color:rgba(var(--color-primary-900),1); }}.dark\:from-neutral-800{&:is(.dark *) { --tw-gradient-from:rgba(var(--color-neutral-800),1); --tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position),var(--tw-gradient-from) var(--tw-gradient-from-position),var(--tw-gradient-to) var(--tw-gradient-to-position)); }}.dark\:from-primary-600{&:is(.dark *) { --tw-gradient-from:rgba(var(--color-primary-600),1); --tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position),var(--tw-gradient-from) var(--tw-gradient-from-position),var(--tw-gradient-to) var(--tw-gradient-to-position)); }}.dark\:to-neutral-800{&:is(.dark *) { --tw-gradient-to:rgba(var(--color-neutral-800),1); --tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position),var(--tw-gradient-from) var(--tw-gradient-from-position),var(--tw-gradient-to) var(--tw-gradient-to-position)); }}.dark\:to-secondary-800{&:is(.dark *) { --tw-gradient-to:rgba(var(--color-secondary-800),1); --tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position),var(--tw-gradient-from) var(--tw-gradient-from-position),var(--tw-gradient-to) var(--tw-gradient-to-position)); }}.dark\:text-neutral{&:is(.dark *) { color:rgba(var(--color-neutral),1); }}.dark\:text-neutral-100{&:is(.dark *) { color:rgba(var(--color-neutral-100),1); }}.dark\:text-neutral-200{&:is(.dark *) { color:rgba(var(--color-neutral-200),1); }}.dark\:text-neutral-300{&:is(.dark *) { color:rgba(var(--color-neutral-300),1); }}.dark\:text-neutral-400{&:is(.dark *) { color:rgba(var(--color-neutral-400),1); }}.dark\:text-neutral-500{&:is(.dark *) { color:rgba(var(--color-neutral-500),1); }}.dark\:text-neutral-700{&:is(.dark *) { color:rgba(var(--color-neutral-700),1); }}.dark\:text-neutral-800{&:is(.dark *) { color:rgba(var(--color-neutral-800),1); }}.dark\:text-neutral-900{&:is(.dark *) { color:rgba(var(--color-neutral-900),1); }}.dark\:text-primary-200{&:is(.dark *) { color:rgba(var(--color-primary-200),1); }}.dark\:text-primary-400{&:is(.dark *) { color:rgba(var(--color-primary-400),1); }}.dark\:text-white{&:is(.dark *) { color:#fff; }}.dark\:opacity-60{&:is(.dark *) { opacity:60%; }}.dark\:backdrop-brightness-95{&:is(.dark *) { --tw-backdrop-brightness:brightness(95%); -webkit-backdrop-filter:var(--tw-backdrop-blur,) var(--tw-backdrop-brightness,) var(--tw-backdrop-contrast,) var(--tw-backdrop-grayscale,) var(--tw-backdrop-hue-rotate,) var(--tw-backdrop-invert,) var(--tw-backdrop-opacity,) var(--tw-backdrop-saturate,) var(--tw-backdrop-sepia,); backdrop-filter:var(--tw-backdrop-blur,) var(--tw-backdrop-brightness,) var(--tw-backdrop-contrast,) var(--tw-backdrop-grayscale,) var(--tw-backdrop-hue-rotate,) var(--tw-backdrop-invert,) var(--tw-backdrop-opacity,) var(--tw-backdrop-saturate,) var(--tw-backdrop-sepia,); }}.dark\:backdrop-saturate-180{&:is(.dark *) { --tw-backdrop-saturate:saturate(180%); -webkit-backdrop-filter:var(--tw-backdrop-blur,) var(--tw-backdrop-brightness,) var(--tw-backdrop-contrast,) var(--tw-backdrop-grayscale,) var(--tw-backdrop-hue-rotate,) var(--tw-backdrop-invert,) var(--tw-backdrop-opacity,) var(--tw-backdrop-saturate,) var(--tw-backdrop-sepia,); backdrop-filter:var(--tw-backdrop-blur,) var(--tw-backdrop-brightness,) var(--tw-backdrop-contrast,) var(--tw-backdrop-grayscale,) var(--tw-backdrop-hue-rotate,) var(--tw-backdrop-invert,) var(--tw-backdrop-opacity,) var(--tw-backdrop-saturate,) var(--tw-backdrop-sepia,); }}.dark\:hover\:\!bg-primary-700{&:is(.dark *) { &:hover { @media (hover:hover) { background-color:rgba(var(--color-primary-700),1)!important; } } }}.dark\:hover\:bg-neutral-700{&:is(.dark *) { &:hover { @media (hover:hover) { background-color:rgba(var(--color-neutral-700),1); } } }}.dark\:hover\:bg-primary-400{&:is(.dark *) { &:hover { @media (hover:hover) { background-color:rgba(var(--color-primary-400),1); } } }}.dark\:hover\:bg-primary-900{&:is(.dark *) { &:hover { @media (hover:hover) { background-color:rgba(var(--color-primary-900),1); } } }}.dark\:hover\:text-neutral-200{&:is(.dark *) { &:hover { @media (hover:hover) { color:rgba(var(--color-neutral-200),1); } } }}.dark\:hover\:text-neutral-800{&:is(.dark *) { &:hover { @media (hover:hover) { color:rgba(var(--color-neutral-800),1); } } }}.dark\:hover\:text-primary-400{&:is(.dark *) { &:hover { @media (hover:hover) { color:rgba(var(--color-primary-400),1); } } }}.dark\:focus\:bg-primary-900{&:is(.dark *) { &:focus { background-color:rgba(var(--color-primary-900),1); } }}.print\:hidden{@media print{display: none;}}.\[\&_\.translation_\.menuhide_span\]\:text-sm\!{& .translation .menuhide span { font-size: var(--text-sm) !important; line-height: var(--tw-leading, var(--text-sm--line-height)) !important; }}.\[\&_\.translation_button_\.icon\]\:text-4xl\!{& .translation button .icon { font-size: var(--text-4xl) !important; line-height: var(--tw-leading, var(--text-4xl--line-height)) !important; }}.\[\&_\.translation_button_span\]\:text-base\!{& .translation button span { font-size: var(--text-base) !important; line-height: var(--tw-leading, var(--text-base--line-height)) !important; }}.\[\&_span\]\:text-2xl{& span { font-size: var(--text-2xl); line-height: var(--tw-leading, var(--text-2xl--line-height)); }}}@layer utilities{.highlight-wrapper{position:relative;z-index:0;display:block;overflow:hidden;border-radius:var(--radius-md);--tw-shadow:0 1px 3px 0 var(--tw-shadow-color, rgb(0 0 0 / 0.1)), 0 1px 2px -1px var(--tw-shadow-color, rgb(0 0 0 / 0.1));box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow);margin-top:1.7142857em;margin-bottom:1.7142857em}.highlight-wrapper pre,.highlight-wrapper table,.highlight-wrapper div{margin-top:0;margin-bottom:0}.highlight-wrapper:has(.codeblock-title) pre{border-radius:0}.codeblock-title{border-bottom-style:var(--tw-border-style);border-bottom-width:1px;border-color:rgba(var(--color-neutral-200),1);padding-inline:calc(var(--spacing) * 4);padding-block:calc(var(--spacing) * 2);&:is(.dark *) { border-color:rgba(var(--color-neutral-800),1); } background-color:#fff;&:is(.dark *) { background-color:#0d1117; }}.chroma .lntd,.chroma .lntd pre{margin:calc(var(--spacing) * 0);--tw-border-style:none;border-style:none;padding:calc(var(--spacing) * 0);vertical-align:top}.chroma .lntable{display:block;width:auto;overflow:hidden;padding-inline:calc(var(--spacing) * 4);padding-block:calc(var(--spacing) * 3);font-size:var(--text-base);line-height:var(--tw-leading,var(--text-base--line-height));border-spacing:0}.chroma .hl{margin-inline:calc(var(--spacing) * -4);display:block;width:auto;padding-inline:calc(var(--spacing) * 4)}.chroma .lntd .hl{margin:calc(var(--spacing) * 0);padding:calc(var(--spacing) * 0)}.chroma:not(:is(table *))>code{display:block;min-width:max-content}html:not(.dark){.bg { background-color: #fff; } .chroma { background-color: #fff; } .chroma .err { color: #f6f8fa; background-color: #82071e; } .chroma .lnlinks { outline: none; text-decoration: none; color: inherit; } .chroma .lntd { vertical-align: top; padding: 0; margin: 0; border: 0; } .chroma .lntable { border-spacing: 0; } .chroma .hl { background-color: #e5e5e5; } .chroma .lnt { white-space: pre; -webkit-user-select: none; user-select: none; margin-right: 0.4em; padding: 0 0.4em 0 0.4em; color: #7f7f7f; } .chroma .ln { white-space: pre; -webkit-user-select: none; user-select: none; margin-right: 0.4em; padding: 0 0.4em 0 0.4em; color: #7f7f7f; } .chroma .line { display: flex; } .chroma .k { color: #cf222e; } .chroma .kc { color: #cf222e; } .chroma .kd { color: #cf222e; } .chroma .kn { color: #cf222e; } .chroma .kp { color: #cf222e; } .chroma .kr { color: #cf222e; } .chroma .kt { color: #cf222e; } .chroma .na { color: #1f2328; } .chroma .nc { color: #1f2328; } .chroma .no { color: #0550ae; } .chroma .nd { color: #0550ae; } .chroma .ni { color: #6639ba; } .chroma .nl { color: #900; font-weight: bold; } .chroma .nn { color: #24292e; } .chroma .nx { color: #1f2328; } .chroma .nt { color: #0550ae; } .chroma .nb { color: #6639ba; } .chroma .bp { color: #6a737d; } .chroma .nv { color: #953800; } .chroma .vc { color: #953800; } .chroma .vg { color: #953800; } .chroma .vi { color: #953800; } .chroma .vm { color: #953800; } .chroma .nf { color: #6639ba; } .chroma .fm { color: #6639ba; } .chroma .s { color: #0a3069; } .chroma .sa { color: #0a3069; } .chroma .sb { color: #0a3069; } .chroma .sc { color: #0a3069; } .chroma .dl { color: #0a3069; } .chroma .sd { color: #0a3069; } .chroma .s2 { color: #0a3069; } .chroma .se { color: #0a3069; } .chroma .sh { color: #0a3069; } .chroma .si { color: #0a3069; } .chroma .sx { color: #0a3069; } .chroma .sr { color: #0a3069; } .chroma .s1 { color: #0a3069; } .chroma .ss { color: #032f62; } .chroma .m { color: #0550ae; } .chroma .mb { color: #0550ae; } .chroma .mf { color: #0550ae; } .chroma .mh { color: #0550ae; } .chroma .mi { color: #0550ae; } .chroma .il { color: #0550ae; } .chroma .mo { color: #0550ae; } .chroma .o { color: #0550ae; } .chroma .ow { color: #0550ae; } .chroma .p { color: #1f2328; } .chroma .c { color: #57606a; } .chroma .ch { color: #57606a; } .chroma .cm { color: #57606a; } .chroma .c1 { color: #57606a; } .chroma .cs { color: #57606a; } .chroma .cp { color: #57606a; } .chroma .cpf { color: #57606a; } .chroma .gd { color: #82071e; background-color: #ffebe9; } .chroma .ge { color: #1f2328; } .chroma .gi { color: #116329; background-color: #dafbe1; } .chroma .go { color: #1f2328; } .chroma .gl { text-decoration: underline; } .chroma .w { color: #fff; }}html.dark{.bg { color: #e6edf3; background-color: #0d1117; } .chroma { color: #e6edf3; background-color: #0d1117; } .chroma .err { color: #f85149; } .chroma .lnlinks { outline: none; text-decoration: none; color: inherit; } .chroma .lntd { vertical-align: top; padding: 0; margin: 0; border: 0; } .chroma .lntable { border-spacing: 0; } .chroma .hl { background-color: #333; } .chroma .lnt { white-space: pre; -webkit-user-select: none; user-select: none; margin-right: 0.4em; padding: 0 0.4em 0 0.4em; color: #737679; } .chroma .ln { white-space: pre; -webkit-user-select: none; user-select: none; margin-right: 0.4em; padding: 0 0.4em 0 0.4em; color: #6e7681; } .chroma .line { display: flex; } .chroma .k { color: #ff7b72; } .chroma .kc { color: #79c0ff; } .chroma .kd { color: #ff7b72; } .chroma .kn { color: #ff7b72; } .chroma .kp { color: #79c0ff; } .chroma .kr { color: #ff7b72; } .chroma .kt { color: #ff7b72; } .chroma .nc { color: #f0883e; font-weight: bold; } .chroma .no { color: #79c0ff; font-weight: bold; } .chroma .nd { color: #d2a8ff; font-weight: bold; } .chroma .ni { color: #ffa657; } .chroma .ne { color: #f0883e; font-weight: bold; } .chroma .nl { color: #79c0ff; font-weight: bold; } .chroma .nn { color: #ff7b72; } .chroma .py { color: #79c0ff; } .chroma .nt { color: #7ee787; } .chroma .nv { color: #79c0ff; } .chroma .vc { color: #79c0ff; } .chroma .vg { color: #79c0ff; } .chroma .vi { color: #79c0ff; } .chroma .vm { color: #79c0ff; } .chroma .nf { color: #d2a8ff; font-weight: bold; } .chroma .fm { color: #d2a8ff; font-weight: bold; } .chroma .l { color: #a5d6ff; } .chroma .ld { color: #79c0ff; } .chroma .s { color: #a5d6ff; } .chroma .sa { color: #79c0ff; } .chroma .sb { color: #a5d6ff; } .chroma .sc { color: #a5d6ff; } .chroma .dl { color: #79c0ff; } .chroma .sd { color: #a5d6ff; } .chroma .s2 { color: #a5d6ff; } .chroma .se { color: #79c0ff; } .chroma .sh { color: #79c0ff; } .chroma .si { color: #a5d6ff; } .chroma .sx { color: #a5d6ff; } .chroma .sr { color: #79c0ff; } .chroma .s1 { color: #a5d6ff; } .chroma .ss { color: #a5d6ff; } .chroma .m { color: #a5d6ff; } .chroma .mb { color: #a5d6ff; } .chroma .mf { color: #a5d6ff; } .chroma .mh { color: #a5d6ff; } .chroma .mi { color: #a5d6ff; } .chroma .il { color: #a5d6ff; } .chroma .mo { color: #a5d6ff; } .chroma .o { color: #ff7b72; font-weight: bold; } .chroma .ow { color: #ff7b72; font-weight: bold; } .chroma .c { color: #8b949e; font-style: italic; } .chroma .ch { color: #8b949e; font-style: italic; } .chroma .cm { color: #8b949e; font-style: italic; } .chroma .c1 { color: #8b949e; font-style: italic; } .chroma .cs { color: #8b949e; font-weight: bold; font-style: italic; } .chroma .cp { color: #8b949e; font-weight: bold; font-style: italic; } .chroma .cpf { color: #8b949e; font-weight: bold; font-style: italic; } .chroma .gd { color: #ffa198; background-color: #490202; } .chroma .ge { font-style: italic; } .chroma .gr { color: #ffa198; } .chroma .gh { color: #79c0ff; font-weight: bold; } .chroma .gi { color: #56d364; background-color: #0f5323; } .chroma .go { color: #8b949e; } .chroma .gp { color: #8b949e; } .chroma .gs { font-weight: bold; } .chroma .gu { color: #79c0ff; } .chroma .gt { color: #ff7b72; } .chroma .gl { text-decoration: underline; } .chroma .w { color: #6e7681; }}}@layer utilities{.tab__button.tab--active{border-bottom:2px solid rgb(var(--color-primary-500))}.tab__panel{display:none}.tab__panel.tab--active{display:block}}#zen-mode-button{cursor:pointer}.zen-mode{position:relative}body.zen-mode-enable{ #bmc-wbtn, .author { display: none !important; }}.gist-container .gist{h1 { margin-bottom: calc(var(--spacing) * 4); } .gist-file { border: 1px solid rgb(var(--color-neutral-300)); border-radius: 8px; overflow: hidden; } .gist-meta { background-color: white; color: rgb(var(--color-neutral-600)); border-radius: 0 0 8px 8px; } .gist-meta a { color: rgb(var(--color-primary-600)); } .highlight tr { border-bottom: none; } .gist-file .file { margin-top: 0; margin-bottom: 0; } .dark & { .gist-file { border-color: rgb(var(--color-neutral-800)); } .gist-data { background-color: rgb(var(--color-neutral-900)); border-bottom: 1px solid rgb(var(--color-neutral-800)); } .gist-meta { background-color: rgb(26, 26, 26); color: rgb(var(--color-neutral-400)); } .gist-meta a { color: rgb(var(--color-primary-400)); } .blob-wrapper { filter: invert(0.9) hue-rotate(180deg); background-color: #fff; } .gist-data { background: rgb(26, 26, 26); color: rgb(var(--color-neutral-100)); } }}.a11y-panel-enter-active{animation:slideInFromTop .3s cubic-bezier(.4,0,.2,1)forwards}.a11y-panel-leave-active{animation:slideOutToTop .3s cubic-bezier(.4,0,.2,1)forwards}.ios-toggle{position:relative;width:42px;height:24px;background:#e5e5e5;border-radius:12px;cursor:pointer;transition:background-color .3s ease;pointer-events:auto}.ios-toggle input{position:absolute;top:0;left:0;width:100%;height:100%;opacity:0;cursor:pointer;z-index:1}.ios-toggle::after{content:"";position:absolute;top:2px;left:2px;width:20px;height:20px;background:#fff;border-radius:50%;transition:transform .3s ease,background-color .3s ease;box-shadow:0 1px 3px rgba(0,0,0,.2);z-index:0}.ios-toggle input:checked+.toggle-track::after{transform:translateX(18px)}.ios-toggle input:checked+.toggle-track{background:rgba(var(--color-primary-500),1)}.ios-toggle input:checked~.ios-toggle-ball{transform:translateX(18px)}.ios-toggle.is-checked{background:rgba(var(--color-primary-500),1)}.ios-toggle:has(input:checked){background:rgba(var(--color-primary-500),1)}.ios-toggle:has(input:checked)::after{transform:translateX(18px)}.dark .ios-toggle{background:#404040}.dark .ios-toggle::after{background:#f5f5f5}@layer components{:root{--adm-note-border:oklch(68.5% 0.169 237.323);--adm-note-bg:oklch(97.7% 0.013 236.62);--adm-note-text:oklch(39.1% 0.09 240.876);--adm-tip-border:oklch(69.6% 0.17 162.48);--adm-tip-bg:oklch(97.9% 0.021 166.113);--adm-tip-text:oklch(37.8% 0.077 168.94);--adm-important-border:oklch(62.7% 0.265 303.9);--adm-important-bg:oklch(97.7% 0.014 308.299);--adm-important-text:oklch(38.1% 0.176 304.987);--adm-warning-border:oklch(70.5% 0.213 47.604);--adm-warning-bg:oklch(98% 0.016 73.684);--adm-warning-text:oklch(40.8% 0.123 38.172);--adm-caution-border:oklch(63.7% 0.237 25.331);--adm-caution-bg:oklch(97.1% 0.013 17.38);--adm-caution-text:oklch(39.6% 0.141 25.723);--adm-abstract-border:oklch(71.5% 0.143 215.221);--adm-abstract-bg:oklch(98.4% 0.019 200.873);--adm-abstract-text:oklch(39.8% 0.07 227.392);--adm-bug-border:oklch(64.5% 0.246 16.439);--adm-bug-bg:oklch(96.9% 0.015 12.422);--adm-bug-text:oklch(41% 0.159 10.272);--adm-danger-border:oklch(63.7% 0.237 25.331);--adm-danger-bg:oklch(97.1% 0.013 17.38);--adm-danger-text:oklch(39.6% 0.141 25.723);--adm-example-border:oklch(55.8% 0.288 302.321);--adm-example-bg:oklch(97.7% 0.014 308.299);--adm-example-text:oklch(38.1% 0.176 304.987);--adm-failure-border:oklch(65.6% 0.241 354.308);--adm-failure-bg:oklch(97.1% 0.014 343.198);--adm-failure-text:oklch(40.8% 0.153 2.432);--adm-info-border:oklch(62.3% 0.214 259.815);--adm-info-bg:oklch(97% 0.014 254.604);--adm-info-text:oklch(37.9% 0.146 265.522);--adm-question-border:oklch(76.9% 0.188 70.08);--adm-question-bg:oklch(98.7% 0.022 95.277);--adm-question-text:oklch(41.4% 0.112 45.904);--adm-quote-border:oklch(55.1% 0.027 264.364);--adm-quote-bg:oklch(98.5% 0.002 247.839);--adm-quote-text:oklch(27.8% 0.033 256.848);--adm-success-border:oklch(69.6% 0.17 162.48);--adm-success-bg:oklch(97.9% 0.021 166.113);--adm-success-text:oklch(37.8% 0.077 168.94);--adm-todo-border:oklch(68.5% 0.169 237.323);--adm-todo-bg:oklch(97.7% 0.013 236.62);--adm-todo-text:oklch(44.3% 0.11 240.79)}html.dark{--adm-note-bg:color-mix(in srgb, oklch(44.3% 0.11 240.79), #0f0f0f 50%);--adm-note-text:oklch(95.1% 0.026 236.824);--adm-tip-bg:color-mix(in srgb, oklch(43.2% 0.095 166.913), #0f0f0f 50%);--adm-tip-text:oklch(95% 0.052 163.051);--adm-important-bg:color-mix(in srgb, oklch(43.8% 0.218 303.724), #0f0f0f 50%);--adm-important-text:oklch(94.6% 0.033 307.174);--adm-warning-bg:color-mix(in srgb, oklch(47% 0.157 37.304), #0f0f0f 45%);--adm-warning-text:oklch(95.4% 0.038 75.164);--adm-caution-bg:color-mix(in srgb, oklch(44.4% 0.177 26.899), #0f0f0f 45%);--adm-caution-text:oklch(93.6% 0.032 17.717);--adm-abstract-bg:color-mix(in srgb, oklch(45% 0.085 224.283), #0f0f0f 50%);--adm-abstract-text:oklch(95.6% 0.045 203.388);--adm-bug-bg:color-mix(in srgb, oklch(45.5% 0.188 13.697), #0f0f0f 50%);--adm-bug-text:oklch(94.1% 0.03 12.58);--adm-danger-bg:color-mix(in srgb, oklch(44.4% 0.177 26.899), #0f0f0f 45%);--adm-danger-text:oklch(93.6% 0.032 17.717);--adm-example-bg:color-mix(in srgb, oklch(43.8% 0.218 303.724), #0f0f0f 50%);--adm-example-text:oklch(94.6% 0.033 307.174);--adm-failure-bg:color-mix(in srgb, oklch(45.9% 0.187 3.815), #0f0f0f 50%);--adm-failure-text:oklch(94.8% 0.028 342.258);--adm-info-bg:color-mix(in srgb, oklch(42.4% 0.199 265.638), #0f0f0f 50%);--adm-info-text:oklch(93.2% 0.032 255.585);--adm-question-bg:color-mix(in srgb, oklch(47.3% 0.137 46.201), #0f0f0f 50%);--adm-question-text:oklch(96.2% 0.059 95.617);--adm-quote-bg:color-mix(in srgb, oklch(27.8% 0.033 256.848), #0f0f0f 50%);--adm-quote-text:oklch(96.7% 0.003 264.542);--adm-success-bg:color-mix(in srgb, oklch(43.2% 0.095 166.913), #0f0f0f 50%);--adm-success-text:oklch(95% 0.052 163.051);--adm-todo-bg:color-mix(in srgb, oklch(44.3% 0.11 240.79), #0f0f0f 50%);--adm-todo-text:oklch(95.1% 0.026 236.824)}.admonition-content>:first-child{margin-top:0!important}.admonition-content>:last-child{margin-bottom:0!important}.admonition-content pre{margin-block:0!important}.admonition[data-type=note]{border-color:var(--adm-note-border);background-color:var(--adm-note-bg);color:var(--adm-note-text)}.admonition[data-type=tip]{border-color:var(--adm-tip-border);background-color:var(--adm-tip-bg);color:var(--adm-tip-text)}.admonition[data-type=important]{border-color:var(--adm-important-border);background-color:var(--adm-important-bg);color:var(--adm-important-text)}.admonition[data-type=warning]{border-color:var(--adm-warning-border);background-color:var(--adm-warning-bg);color:var(--adm-warning-text)}.admonition[data-type=caution]{border-color:var(--adm-caution-border);background-color:var(--adm-caution-bg);color:var(--adm-caution-text)}.admonition[data-type=abstract]{border-color:var(--adm-abstract-border);background-color:var(--adm-abstract-bg);color:var(--adm-abstract-text)}.admonition[data-type=bug]{border-color:var(--adm-bug-border);background-color:var(--adm-bug-bg);color:var(--adm-bug-text)}.admonition[data-type=danger]{border-color:var(--adm-danger-border);background-color:var(--adm-danger-bg);color:var(--adm-danger-text)}.admonition[data-type=example]{border-color:var(--adm-example-border);background-color:var(--adm-example-bg);color:var(--adm-example-text)}.admonition[data-type=failure]{border-color:var(--adm-failure-border);background-color:var(--adm-failure-bg);color:var(--adm-failure-text)}.admonition[data-type=info]{border-color:var(--adm-info-border);background-color:var(--adm-info-bg);color:var(--adm-info-text)}.admonition[data-type=question]{border-color:var(--adm-question-border);background-color:var(--adm-question-bg);color:var(--adm-question-text)}.admonition[data-type=quote]{border-color:var(--adm-quote-border);background-color:var(--adm-quote-bg);color:var(--adm-quote-text)}.admonition[data-type=success]{border-color:var(--adm-success-border);background-color:var(--adm-success-bg);color:var(--adm-success-text)}.admonition[data-type=todo]{border-color:var(--adm-todo-border);background-color:var(--adm-todo-bg);color:var(--adm-todo-text)}}html:not(.dark){color-scheme:light}html.dark{color-scheme:dark}body a,body button{transition-property:color,background-color,border-color,outline-color,text-decoration-color,fill,stroke,--tw-gradient-from,--tw-gradient-via,--tw-gradient-to;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}button,[role=button]{cursor:pointer}.icon svg{height:1em;width:1em}.logo svg{height:5rem;width:5rem}#search-query::-webkit-search-cancel-button,#search-query::-webkit-search-decoration,#search-query::-webkit-search-results-button,#search-query::-webkit-search-results-decoration{display:none}.prose blockquote{&:where(:dir(rtl),[dir="rtl"],[dir="rtl"] *) { border-right-style:var(--tw-border-style); border-right-width:4px; } &:where(:dir(rtl),[dir="rtl"],[dir="rtl"] *) { border-left-style:var(--tw-border-style); border-left-width:0px; } &:where(:dir(rtl),[dir="rtl"],[dir="rtl"] *) { padding-right:calc(var(--spacing) * 4); }}.prose ul>li,.prose ol>li{&:where(:dir(rtl),[dir="rtl"],[dir="rtl"] *) { margin-right:calc(var(--spacing) * 7); } &:where(:dir(rtl),[dir="rtl"],[dir="rtl"] *) { padding-right:calc(var(--spacing) * 2); } &:where(:dir(rtl),[dir="rtl"],[dir="rtl"] *) { padding-left:calc(var(--spacing) * 0); }}.prose ol>li:before,.prose ul>li:before{&:where(:dir(rtl),[dir="rtl"],[dir="rtl"] *) { right:calc(var(--spacing) * 1); } &:where(:dir(rtl),[dir="rtl"],[dir="rtl"] *) { left:auto; }}.prose thead td:first-child,.prose thead th:first-child{&:where(:dir(rtl),[dir="rtl"],[dir="rtl"] *) { padding-right:calc(var(--spacing) * 0); }}.prose thead td:last-child,.prose thead th:last-child{&:where(:dir(rtl),[dir="rtl"],[dir="rtl"] *) { padding-left:calc(var(--spacing) * 0); }}.prose div.min-w-0.max-w-prose>*:first-child{margin-top:calc(var(--spacing) * 3)}#TOCView{max-height:calc(100vh - 150px);min-height:0;overflow-x:hidden}.toc ul,.toc li{list-style-type:none;padding-inline:calc(var(--spacing) * 0);--tw-leading:var(--leading-snug);line-height:var(--leading-snug)}.toc ul ul{&:where(:dir(ltr),[dir="ltr"],[dir="ltr"] *) { padding-left:calc(var(--spacing) * 4); } &:where(:dir(rtl),[dir="rtl"],[dir="rtl"] *) { padding-right:calc(var(--spacing) * 4); }}.toc a{--tw-font-weight:var(--font-weight-normal);font-weight:var(--font-weight-normal);color:rgba(var(--color-neutral-700),1);&:is(.dark *) { color:rgba(var(--color-neutral-300),1); }}.toc ul>li{&:where(:dir(rtl),[dir="rtl"],[dir="rtl"] *) { margin-right:calc(var(--spacing) * 0); }}.highlight{position:relative;z-index:0}.highlight-wrapper:hover>.copy-button{visibility:visible}.copy-button{visibility:hidden;position:absolute;top:calc(var(--spacing) * 0);right:calc(var(--spacing) * 0);z-index:10;width:calc(var(--spacing) * 20);cursor:pointer;text-overflow:ellipsis;overflow:hidden;border-top-right-radius:var(--radius-md);border-bottom-left-radius:var(--radius-md);background-color:rgba(var(--color-neutral-200),1);padding-block:calc(var(--spacing) * 1);font-family:var(--font-mono);font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height));white-space:nowrap;color:rgba(var(--color-neutral-700),1);opacity:90%;&:is(.dark *) { background-color:rgba(var(--color-neutral-600),1); } &:is(.dark *) { color:rgba(var(--color-neutral-200),1); }}.copy-button:hover,.copy-button:focus,.copy-button:active,.copy-button:active:hover{background-color:rgba(var(--color-primary-100),1);&:is(.dark *) { background-color:rgba(var(--color-primary-600),1); }}.copy-textarea{position:absolute;z-index:calc(10 * -1);opacity:5%}.katex-display{overflow:auto hidden}.katex-display{padding:1em;width:calc(100% - 1em)}table{display:block;overflow:auto}code{word-wrap:break-word;overflow-wrap:break-word}a{word-break:break-word;word-wrap:break-word;overflow-wrap:break-word}.prose-invert .highlight pre>code{background-color:unset}pre{text-align:left}.single_hero_round{max-height:50vh;object-fit:cover}.single_hero_background{width:calc(100% + 1px);z-index:-10}.hero_gradient{width:100%;height:100%}.thumbnail_card{min-width:300px;height:200px}.thumbnail_card_related{height:150px}.thumbnail{width:300px;min-height:180px}@media(width < 853px){.thumbnail{width:100%}}.thumbnail-shadow{box-shadow:5px 5px 20px 1px rgba(0,0,0,.3)}@media(width < 853px){.width-patch{width:80vw}}@media(width >= 853px){.width-patch{width:65ch}}.anchor{display:block;position:relative;top:-150px;height:0;visibility:hidden}[id^=fn],[id^=fnref]{scroll-margin-top:145px}#main-content{scroll-margin-top:-125px}@media(width >= 640px){.article{flex-wrap:wrap}}@media(width >= 853px){.article{flex-wrap:nowrap}}.medium-zoom-image--opened{z-index:100}@layer utilities{.bf-border-color{border-color:rgba(var(--color-neutral-300),1);&:is(.dark *) { border-color:rgba(var(--color-neutral-700),1); }}.bf-border-color-hover{&:hover { @media (hover:hover) { border-color:rgba(var(--color-primary-600),1); } } &:is(.dark *) { &:hover { @media (hover:hover) { border-color:rgba(var(--color-primary-400),1); } } }}.bf-icon-color-hover{&:hover { @media (hover:hover) { color:rgba(var(--color-primary-600),1); } } &:is(.dark *) { &:hover { @media (hover:hover) { color:rgba(var(--color-primary-400),1); } } }}.bf-scrollbar{&::-webkit-scrollbar-track { background-color:var(--scrollbar-track); border-radius:var(--scrollbar-track-radius); } &::-webkit-scrollbar-thumb { background-color:var(--scrollbar-thumb); border-radius:var(--scrollbar-thumb-radius); } &::-webkit-scrollbar-corner { background-color:var(--scrollbar-corner); border-radius:var(--scrollbar-corner-radius); } @supports (-moz-appearance:none) { scrollbar-width:thin; scrollbar-color:var(--scrollbar-thumb,initial) var(--scrollbar-track,initial); } &::-webkit-scrollbar { display:block; width:8px; height:8px; } --scrollbar-thumb:oklch(70.8% 0 0);--scrollbar-track:oklch(92.2% 0 0);&:is(.dark *) { --scrollbar-thumb:oklch(43.9% 0 0); } &:is(.dark *) { --scrollbar-track:oklch(26.9% 0 0); }}}body:has(#mobile-menu-toggle:checked){overflow:hidden}@media(min-width:853px){body:has(#mobile-menu-toggle:checked){overflow:visible}}#bmc-wbtn{z-index:50!important}.nested-menu{position:relative}.menuhide{position:absolute;z-index:1000;white-space:nowrap;opacity:0;visibility:hidden;transition:visibility .3s,opacity .3s ease-in-out}.nested-menu:hover .menuhide,.nested-menu:focus-within .menuhide{opacity:1;visibility:visible}.active{text-decoration-line:underline;text-decoration-thickness:3px;text-underline-offset:4px}@layer base{input:where([type=text]),input:where(:not([type])),input:where([type=email]),input:where([type=url]),input:where([type=password]),input:where([type=number]),input:where([type=date]),input:where([type=datetime-local]),input:where([type=month]),input:where([type=search]),input:where([type=tel]),input:where([type=time]),input:where([type=week]),select:where([multiple]),textarea,select{appearance:none;background-color:#fff;border-color:oklch(55.1% .027 264.364);border-width:1px;border-radius:0;padding-top:.5rem;padding-right:.75rem;padding-bottom:.5rem;padding-left:.75rem;font-size:1rem;line-height:1.5rem;--tw-shadow:0 0 #0000;&:focus { outline:2px solid transparent; outline-offset:2px; --tw-ring-inset:var(--tw-empty,); --tw-ring-offset-width:0px; --tw-ring-offset-color:#fff; --tw-ring-color:oklch(54.6% 0.245 262.881); --tw-ring-offset-shadow:var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color); --tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(1px + var(--tw-ring-offset-width)) var(--tw-ring-color); box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow); border-color:oklch(54.6% 0.245 262.881); }}input::placeholder,textarea::placeholder{color:oklch(55.1% .027 264.364);opacity:1}::-webkit-datetime-edit-fields-wrapper{padding:0}::-webkit-date-and-time-value{min-height:1.5em}::-webkit-date-and-time-value{text-align:inherit}::-webkit-datetime-edit{display:inline-flex}::-webkit-datetime-edit,::-webkit-datetime-edit-year-field,::-webkit-datetime-edit-month-field,::-webkit-datetime-edit-day-field,::-webkit-datetime-edit-hour-field,::-webkit-datetime-edit-minute-field,::-webkit-datetime-edit-second-field,::-webkit-datetime-edit-millisecond-field,::-webkit-datetime-edit-meridiem-field{padding-top:0;padding-bottom:0}select{background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' fill='none' viewBox='0 0 20 20'%3e%3cpath stroke='oklch(55.1%25 0.027 264.364)' stroke-linecap='round' stroke-linejoin='round' stroke-width='1.5' d='M6 8l4 4 4-4'/%3e%3c/svg%3e");background-position:right .5rem center;background-repeat:no-repeat;background-size:1.5em 1.5em;padding-right:2.5rem;print-color-adjust:exact}select:where([multiple]),select:where([size]:not([size="1"])){background-image:initial;background-position:initial;background-repeat:unset;background-size:initial;padding-right:.75rem;print-color-adjust:unset}input:where([type=checkbox]),input:where([type=radio]){appearance:none;padding:0;print-color-adjust:exact;display:inline-block;vertical-align:middle;background-origin:border-box;user-select:none;flex-shrink:0;height:1rem;width:1rem;color:oklch(54.6% .245 262.881);background-color:#fff;border-color:oklch(55.1% .027 264.364);border-width:1px;--tw-shadow:0 0 #0000}input:where([type=checkbox]){border-radius:0}input:where([type=radio]){border-radius:100%}input:where([type=checkbox]):focus,input:where([type=radio]):focus{outline:2px solid transparent;outline-offset:2px;--tw-ring-inset:var(--tw-empty,/*!*/ /*!*/);--tw-ring-offset-width:2px;--tw-ring-offset-color:#fff;--tw-ring-color:oklch(54.6% 0.245 262.881);--tw-ring-offset-shadow:var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}input:where([type=checkbox]):checked,input:where([type=radio]):checked{border-color:transparent;background-color:currentColor;background-size:100% 100%;background-position:50%;background-repeat:no-repeat}input:where([type=checkbox]):checked{background-image:url("data:image/svg+xml,%3csvg viewBox='0 0 16 16' fill='white' xmlns='http://www.w3.org/2000/svg'%3e%3cpath d='M12.207 4.793a1 1 0 010 1.414l-5 5a1 1 0 01-1.414 0l-2-2a1 1 0 011.414-1.414L6.5 9.086l4.293-4.293a1 1 0 011.414 0z'/%3e%3c/svg%3e");@media(forced-colors:active){appearance: auto;}}input:where([type=radio]):checked{background-image:url("data:image/svg+xml,%3csvg viewBox='0 0 16 16' fill='white' xmlns='http://www.w3.org/2000/svg'%3e%3ccircle cx='8' cy='8' r='3'/%3e%3c/svg%3e");@media(forced-colors:active){appearance: auto;}}input:where([type=checkbox]):checked:hover,input:where([type=checkbox]):checked:focus,input:where([type=radio]):checked:hover,input:where([type=radio]):checked:focus{border-color:transparent;background-color:currentColor}input:where([type=checkbox]):indeterminate{background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' fill='none' viewBox='0 0 16 16'%3e%3cpath stroke='white' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' d='M4 8h8'/%3e%3c/svg%3e");border-color:transparent;background-color:currentColor;background-size:100% 100%;background-position:50%;background-repeat:no-repeat;@media(forced-colors:active){appearance: auto;}}input:where([type=checkbox]):indeterminate:hover,input:where([type=checkbox]):indeterminate:focus{border-color:transparent;background-color:currentColor}input:where([type=file]){background:unset;border-color:inherit;border-width:0;border-radius:0;padding:0;font-size:unset;line-height:inherit}input:where([type=file]):focus{outline:1px solid ButtonText;outline:1px auto -webkit-focus-ring-color}}@layer base{*{@supports(-moz-appearance:none){scrollbar-color: initial; scrollbar-width: initial;}}}@property --tw-translate-x{syntax: "*"; + inherits: false; + initial-value: 0; +}@property --tw-translate-y{syntax: "*"; + inherits: false; + initial-value: 0; +}@property --tw-translate-z{syntax: "*"; + inherits: false; + initial-value: 0; +}@property --tw-scale-x{syntax: "*"; + inherits: false; + initial-value: 1; +}@property --tw-scale-y{syntax: "*"; + inherits: false; + initial-value: 1; +}@property --tw-scale-z{syntax: "*"; + inherits: false; + initial-value: 1; +}@property --tw-rotate-x{syntax: "*"; + inherits: false; +}@property --tw-rotate-y{syntax: "*"; + inherits: false; +}@property --tw-rotate-z{syntax: "*"; + inherits: false; +}@property --tw-skew-x{syntax: "*"; + inherits: false; +}@property --tw-skew-y{syntax: "*"; + inherits: false; +}@property --tw-pan-x{syntax: "*"; + inherits: false; +}@property --tw-pan-y{syntax: "*"; + inherits: false; +}@property --tw-pinch-zoom{syntax: "*"; + inherits: false; +}@property --tw-space-y-reverse{syntax: "*"; + inherits: false; + initial-value: 0; +}@property --tw-space-x-reverse{syntax: "*"; + inherits: false; + initial-value: 0; +}@property --tw-border-style{syntax: "*"; + inherits: false; + initial-value: solid; +}@property --tw-gradient-position{syntax: "*"; + inherits: false; +}@property --tw-gradient-from{syntax: ""; + inherits: false; + initial-value: #0000; +}@property --tw-gradient-via{syntax: ""; + inherits: false; + initial-value: #0000; +}@property --tw-gradient-to{syntax: ""; + inherits: false; + initial-value: #0000; +}@property --tw-gradient-stops{syntax: "*"; + inherits: false; +}@property --tw-gradient-via-stops{syntax: "*"; + inherits: false; +}@property --tw-gradient-from-position{syntax: ""; + inherits: false; + initial-value: 0%; +}@property --tw-gradient-via-position{syntax: ""; + inherits: false; + initial-value: 50%; +}@property --tw-gradient-to-position{syntax: ""; + inherits: false; + initial-value: 100%; +}@property --tw-leading{syntax: "*"; + inherits: false; +}@property --tw-font-weight{syntax: "*"; + inherits: false; +}@property --tw-tracking{syntax: "*"; + inherits: false; +}@property --tw-ordinal{syntax: "*"; + inherits: false; +}@property --tw-slashed-zero{syntax: "*"; + inherits: false; +}@property --tw-numeric-figure{syntax: "*"; + inherits: false; +}@property --tw-numeric-spacing{syntax: "*"; + inherits: false; +}@property --tw-numeric-fraction{syntax: "*"; + inherits: false; +}@property --tw-shadow{syntax: "*"; + inherits: false; + initial-value: 0 0 #0000; +}@property --tw-shadow-color{syntax: "*"; + inherits: false; +}@property --tw-shadow-alpha{syntax: ""; + inherits: false; + initial-value: 100%; +}@property --tw-inset-shadow{syntax: "*"; + inherits: false; + initial-value: 0 0 #0000; +}@property --tw-inset-shadow-color{syntax: "*"; + inherits: false; +}@property --tw-inset-shadow-alpha{syntax: ""; + inherits: false; + initial-value: 100%; +}@property --tw-ring-color{syntax: "*"; + inherits: false; +}@property --tw-ring-shadow{syntax: "*"; + inherits: false; + initial-value: 0 0 #0000; +}@property --tw-inset-ring-color{syntax: "*"; + inherits: false; +}@property --tw-inset-ring-shadow{syntax: "*"; + inherits: false; + initial-value: 0 0 #0000; +}@property --tw-ring-inset{syntax: "*"; + inherits: false; +}@property --tw-ring-offset-width{syntax: ""; + inherits: false; + initial-value: 0px; +}@property --tw-ring-offset-color{syntax: "*"; + inherits: false; + initial-value: #fff; +}@property --tw-ring-offset-shadow{syntax: "*"; + inherits: false; + initial-value: 0 0 #0000; +}@property --tw-outline-style{syntax: "*"; + inherits: false; + initial-value: solid; +}@property --tw-blur{syntax: "*"; + inherits: false; +}@property --tw-brightness{syntax: "*"; + inherits: false; +}@property --tw-contrast{syntax: "*"; + inherits: false; +}@property --tw-grayscale{syntax: "*"; + inherits: false; +}@property --tw-hue-rotate{syntax: "*"; + inherits: false; +}@property --tw-invert{syntax: "*"; + inherits: false; +}@property --tw-opacity{syntax: "*"; + inherits: false; +}@property --tw-saturate{syntax: "*"; + inherits: false; +}@property --tw-sepia{syntax: "*"; + inherits: false; +}@property --tw-drop-shadow{syntax: "*"; + inherits: false; +}@property --tw-drop-shadow-color{syntax: "*"; + inherits: false; +}@property --tw-drop-shadow-alpha{syntax: ""; + inherits: false; + initial-value: 100%; +}@property --tw-drop-shadow-size{syntax: "*"; + inherits: false; +}@property --tw-backdrop-blur{syntax: "*"; + inherits: false; +}@property --tw-backdrop-brightness{syntax: "*"; + inherits: false; +}@property --tw-backdrop-contrast{syntax: "*"; + inherits: false; +}@property --tw-backdrop-grayscale{syntax: "*"; + inherits: false; +}@property --tw-backdrop-hue-rotate{syntax: "*"; + inherits: false; +}@property --tw-backdrop-invert{syntax: "*"; + inherits: false; +}@property --tw-backdrop-opacity{syntax: "*"; + inherits: false; +}@property --tw-backdrop-saturate{syntax: "*"; + inherits: false; +}@property --tw-backdrop-sepia{syntax: "*"; + inherits: false; +}@property --tw-duration{syntax: "*"; + inherits: false; +}@property --tw-ease{syntax: "*"; + inherits: false; +}@property --tw-content{syntax: "*"; + initial-value: ""; + inherits: false; +}@keyframes pulse{50%{opacity:.5}}@layer properties{@supports((-webkit-hyphens:none) and (not (margin-trim:inline))) or ((-moz-orient:inline) and (not (color:rgb(from red r g b)))){*,::before,::after,::backdrop{--tw-translate-x:0;--tw-translate-y:0;--tw-translate-z:0;--tw-scale-x:1;--tw-scale-y:1;--tw-scale-z:1;--tw-rotate-x:initial;--tw-rotate-y:initial;--tw-rotate-z:initial;--tw-skew-x:initial;--tw-skew-y:initial;--tw-pan-x:initial;--tw-pan-y:initial;--tw-pinch-zoom:initial;--tw-space-y-reverse:0;--tw-space-x-reverse:0;--tw-border-style:solid;--tw-gradient-position:initial;--tw-gradient-from:#0000;--tw-gradient-via:#0000;--tw-gradient-to:#0000;--tw-gradient-stops:initial;--tw-gradient-via-stops:initial;--tw-gradient-from-position:0%;--tw-gradient-via-position:50%;--tw-gradient-to-position:100%;--tw-leading:initial;--tw-font-weight:initial;--tw-tracking:initial;--tw-ordinal:initial;--tw-slashed-zero:initial;--tw-numeric-figure:initial;--tw-numeric-spacing:initial;--tw-numeric-fraction:initial;--tw-shadow:0 0 #0000;--tw-shadow-color:initial;--tw-shadow-alpha:100%;--tw-inset-shadow:0 0 #0000;--tw-inset-shadow-color:initial;--tw-inset-shadow-alpha:100%;--tw-ring-color:initial;--tw-ring-shadow:0 0 #0000;--tw-inset-ring-color:initial;--tw-inset-ring-shadow:0 0 #0000;--tw-ring-inset:initial;--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-offset-shadow:0 0 #0000;--tw-outline-style:solid;--tw-blur:initial;--tw-brightness:initial;--tw-contrast:initial;--tw-grayscale:initial;--tw-hue-rotate:initial;--tw-invert:initial;--tw-opacity:initial;--tw-saturate:initial;--tw-sepia:initial;--tw-drop-shadow:initial;--tw-drop-shadow-color:initial;--tw-drop-shadow-alpha:100%;--tw-drop-shadow-size:initial;--tw-backdrop-blur:initial;--tw-backdrop-brightness:initial;--tw-backdrop-contrast:initial;--tw-backdrop-grayscale:initial;--tw-backdrop-hue-rotate:initial;--tw-backdrop-invert:initial;--tw-backdrop-opacity:initial;--tw-backdrop-saturate:initial;--tw-backdrop-sepia:initial;--tw-duration:initial;--tw-ease:initial;--tw-content:""}}}.medium-zoom-overlay{position:fixed;top:0;right:0;bottom:0;left:0;opacity:0;transition:opacity .3s;will-change:opacity}.medium-zoom--opened .medium-zoom-overlay{cursor:pointer;cursor:zoom-out;opacity:1}.medium-zoom-image{cursor:pointer;cursor:zoom-in;transition:transform .3s cubic-bezier(.2,0,.2,1)!important}.medium-zoom-image--hidden{visibility:hidden}.medium-zoom-image--opened{position:relative;cursor:pointer;cursor:zoom-out;will-change:transform} \ No newline at end of file diff --git a/public/cv.pdf b/public/cv.pdf new file mode 100644 index 0000000..fae3e17 Binary files /dev/null and b/public/cv.pdf differ diff --git a/public/favicon-16x16.png b/public/favicon-16x16.png new file mode 100644 index 0000000..28b8251 Binary files /dev/null and b/public/favicon-16x16.png differ diff --git a/public/favicon-32x32.png b/public/favicon-32x32.png new file mode 100644 index 0000000..6af3cc0 Binary files /dev/null and b/public/favicon-32x32.png differ diff --git a/public/favicon.ico b/public/favicon.ico new file mode 100644 index 0000000..db84c1b Binary files /dev/null and b/public/favicon.ico differ diff --git a/public/img/AM.ico b/public/img/AM.ico new file mode 100644 index 0000000..4cd20a1 Binary files /dev/null and b/public/img/AM.ico differ diff --git a/public/img/me.jpg b/public/img/me.jpg new file mode 100644 index 0000000..fe9fc3e Binary files /dev/null and b/public/img/me.jpg differ diff --git a/public/img/work/nb.jpeg b/public/img/work/nb.jpeg new file mode 100644 index 0000000..50f6ec0 Binary files /dev/null and b/public/img/work/nb.jpeg differ diff --git a/public/img/work/panasonic.jpg b/public/img/work/panasonic.jpg new file mode 100644 index 0000000..d93b556 Binary files /dev/null and b/public/img/work/panasonic.jpg differ diff --git a/public/img/work/pointwire.png b/public/img/work/pointwire.png new file mode 100644 index 0000000..7c71bc0 Binary files /dev/null and b/public/img/work/pointwire.png differ diff --git a/public/index.html b/public/index.html new file mode 100644 index 0000000..6e86cc0 --- /dev/null +++ b/public/index.html @@ -0,0 +1,1142 @@ + + + + + + + + + + + + + + Ash Marlow + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + + +
+
+
+
+
+
+ + + + + +
+
+ +

+ Ash Marlow +

+ +
+ +
+

I am a Software Engineer specializing in the intersection of hardware, security, and automation. My career has evolved from architecting firmware for IoT appliances at Panasonic to securing high-stakes MoD systems with Tanium at Pointwire. Currently, I’m at Nextbase, where I test firmware and cloud systems by building automation frameworks and hardware-in-the-loop (HIL) test environments.

+

When I’m not writing scripts or managing my Proxmox server, you’ll usually find me tinkering with my HomeLab setup, playing the piano, or heading out on a day trip with my dog.

+ +

Tech Stack & Arsenal +
+ + + # + + +

+

+ + + + Raspberry Pi HIL + + + + + + + STM32 / ESP32 + + + + + + + Tanium Cloud + + + +

+
+
+
+
+
+
+
+ + + + + + +

Recent

+ + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ +
+ +
+
+ +

+ Solar Cells + +

+
+ + +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + ·437 words·3 mins + + + + +
+ + + + + + + + + + + +
+ +
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ +
+ +
+
+ +

+ Garmin Eink + +

+
+ + +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + ·482 words·3 mins + + + + +
+ + + + + + + + + + + +
+ +
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ +
+ +
+
+ +

+ Smart Train + +

+
+ + +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + ·86 words·1 min + + + + +
+ + + + + + + + + + + +
+ +
+
+
+ + +
+ + + + + + +
+ + + + + + + + + + + + + + + + +
+ + + + +
+ + +

+ © + 2026 + +

+ + + + +

+ + + Powered by Hugo & Blowfish +

+ +
+ + + + + +
+ + +
+ + + diff --git a/public/index.json b/public/index.json new file mode 100644 index 0000000..eedd93e --- /dev/null +++ b/public/index.json @@ -0,0 +1,2 @@ + +[{"content":"","date":"March 13, 2026","externalUrl":null,"permalink":"/blog/","section":"Blogs","summary":"","title":"Blogs","type":"blog"},{"content":"","date":"March 13, 2026","externalUrl":null,"permalink":"/tags/games/","section":"Tags","summary":"","title":"Games","type":"tags"},{"content":"I am a Software Engineer specializing in the intersection of hardware, security, and automation. My career has evolved from architecting firmware for IoT appliances at Panasonic to securing high-stakes MoD systems with Tanium at Pointwire. Currently, I’m at Nextbase, where I test firmware and cloud systems by building automation frameworks and hardware-in-the-loop (HIL) test environments.\nWhen I’m not writing scripts or managing my Proxmox server, you’ll usually find me tinkering with my HomeLab setup, playing the piano, or heading out on a day trip with my dog.\nTech Stack \u0026amp; Arsenal # Raspberry Pi HIL STM32 / ESP32 Tanium Cloud ","date":"March 13, 2026","externalUrl":null,"permalink":"/","section":"Hi, I'm Ash Marlow","summary":"I am a Software Engineer specializing in the intersection of hardware, security, and automation. My career has evolved from architecting firmware for IoT appliances at Panasonic to securing high-stakes MoD systems with Tanium at Pointwire. Currently, I’m at Nextbase, where I test firmware and cloud systems by building automation frameworks and hardware-in-the-loop (HIL) test environments.\nWhen I’m not writing scripts or managing my Proxmox server, you’ll usually find me tinkering with my HomeLab setup, playing the piano, or heading out on a day trip with my dog.\n","title":"Hi, I'm Ash Marlow","type":"background"},{"content":"My biggest pass time outside of computing is retro game emulation. Most commonly in the form of dedicated emulation handhelds but also diving into console modding and Linux gaming.\nHandheld Emulators # P### owkiddy V90\nA clamshell device with a custom firmware that provides a basic but functional UI. It\u0026rsquo;s limited chipset only really allows for emulating upto the 16 bit era with a few Playstation 1 games just about playable. The screen leaves a lot to be desired by modern standards but when I first got this handheld I absolutely loved it. It\u0026rsquo;s low price and clamshell design make it a great device to throw in a bag without much thought or worry. The buttons are great and it made a great first handheld. Powkiddy is believed to be working on a V2 which I am very excited to see.\nMiyoo Mini + # This is an absolutely amazing device that I still regularly play today. The screen is a bright 480p display, the controls are soft but precise and while small it\u0026rsquo;s surprisingly comfortable to hold (ignoring use of the triggers). The real brilliance behind this device is the open source Onion OS. Adding features such as game switcher, auto save and loading states, custom themes and even a custom boot logo, alongside a £50 price tag makes the Miyoo Mini + a very easy recommendation.\nRetroid Pocket 3+ # This is the console that convinced me to start spending a bit of money on these devices. At £120 and promising the ability to emulate GameCube and PlayStation 2 I was sold. At the time of buying this device I was very impressed with the 720p display and the ability to play the sixth generation consoles (with a lot of tweaks and hacks) but sadly it hasn\u0026rsquo;t aged that well as there are now much better options. The one way that is handheld has improved is the software. As my first android device I wasn\u0026rsquo;t a big fan of the need to occasionally use the touchscreen for system navigation and the need for a frontend app to tie all the emulators together neatly. The options for frontend apps was very limited back then but now that ES-DE has launched on android it\u0026rsquo;s a much nicer experience.\nAnbernic RG35XXSP # A direct clone of the Gameboy advance SP, but with the power to emulate upto Dreamcast and Nintendo 64. This is unfortunately the only handheld I have ever sold. This is an incredibly popular device so I am certainly in the minority but I just couldn\u0026rsquo;t get over the clicky buttons, early software and poor build quality.\nMiyoo Mini V4 # ![Miyoo Mini V4](./Miyoo Mini V4.jpg)\nThe Miyoo mini is the first handheld I really wanted but due to pricing, high demand and stock shortages it took me a long time to get hold of it. It really does not disappoint. Technically its a worse version of the Miyoo mini +. Its smaller and lacks WIFI but that small, super pocketable size gives it a huge amount of charm. If you are looking for something that can play upto Playstation 1 games, and you can take anywhere in your pocket then this is the device to get.\nConsole Modding # Gameboy # ![Gameboy Before](./Gameboy Before.jpg)\nI purchased this original Gameboy from Facebook Marketplace. Like a lot of old plastic grey electronics it has horrible yellowing, so I tool this opportunity to clean it up. The Gameboy was stripped down, rubber and plastic components washed and yhe main board was cleaned. The shell was coated in Hydrogen Peroxide and left outside on a sunny day.\n![Gameboy After](./Gameboy After.jpg)\nThe console was then reassembled and a new screen lens applied to have it looking good as new. As much as I appreciate an original Gameboy, its not really something I would want to play in the modern day. The four AA batteries to power it, the contrast wheel and the fact that my nostalgia really starts at Gameboy color, means its more of a show piece for me.\n","date":"March 13, 2026","externalUrl":null,"permalink":"/blog/retro-handhelds/","section":"Blogs","summary":"Retro handheld collection","title":"Retro Handhelds","type":"blog"},{"content":"","date":"March 13, 2026","externalUrl":null,"permalink":"/tags/","section":"Tags","summary":"","title":"Tags","type":"tags"},{"content":"","date":"March 13, 2026","externalUrl":null,"permalink":"/tags/electronics/","section":"Tags","summary":"","title":"Electronics","type":"tags"},{"content":"","date":"March 13, 2026","externalUrl":null,"permalink":"/projects/","section":"Projects","summary":"","title":"Projects","type":"projects"},{"content":" 📋 Project Highlights # Fabricate Dye Sensitized Solar Cell using Natural Dyes Investigate a variety of different dyes and their effects on cell efficiency Develop cosensitized cells by mixing compatible dyes and comparing their performance For my final year project of my BSc Physics degree, I fabricated solar cells using natural dyes extracted from plants, fruits and vegetables. The motivation being the project was to investigate alternative methods for solar power generation which don\u0026rsquo;t involve conventional silicon as this can be difficult to recycle at end of use.\nBenchmarking a silicon cell # To test the cells that we would be making, a light box was setup. A standard silicon cell was then tested to get an understanding of how much power could reasonably be harnessed from the light source and to give a benchmark to compare results against. Initially the testing of cells was done using a separate voltmeter and ammeter to record the I-V curve created by the cell. This was found to be very inefficient and was difficult to reliably repeat, so I setup a test circuit with an Arduino to record the result.\nExtracting the Dyes # The dyes were extracted from a range of plants, fruits and vegetables all based on success in previous research. The exact extraction method had to vary slightly based on the source of the dye but the base principle involved crushing the source in either water or ethanol and then filtering the solution.\nAnalyzing the Dye # With the dye extracted it was then watered down and analyzed using a spectrometer. This allowed us to see the absorption of the dye over a range of wavelengths. The absorption of the dye in the wavelengths of the sun are one of the most important properties of the dye so testing this at an early stage helped us rule out certain dye sources without making cells for them.\nMaking the Cells # To make the cells, a Titanium dioxide paste was made, and spread thinly onto a sheet of conductive glass. The cell was then heated on a hotplate and left to cool. The extracted dye was then carefully dropped onto the Ti02 with a pipet and left to soak in. The excess dye could then be rinsed off and the cell is left to dry. Finally a small amount of redox electrolyte solution is sandwiched between the Ti02 layer and another sheet of conductive glass, and the pieces are clamped together.\n🏁 Summary \u0026amp; Lessons Learned # Wrap up your project here. What would you do differently next time? This provides that \u0026ldquo;closing\u0026rdquo; feel for a future employer.\n","date":"March 13, 2026","externalUrl":null,"permalink":"/projects/solar-cells/","section":"Projects","summary":"Final year University project making Dye Sensitised Solar Cells.","title":"Solar Cells","type":"projects"},{"content":"","date":"March 13, 2026","externalUrl":null,"permalink":"/tags/university/","section":"Tags","summary":"","title":"University","type":"tags"},{"content":"","date":"February 20, 2026","externalUrl":null,"permalink":"/tags/esp32/","section":"Tags","summary":"","title":"ESP32","type":"tags"},{"content":" 📋 Project Highlights # Goal: Show my running progress on my desk Tech Stack: Python, ESP32, C# Outcome: A clean and simple setup that works reliably For christmas my wife got me a virtual running challenge. I have to run 80km with a smart watch and at the end I get a nice Scooby-Doo medal. The issue is, now that everything requires its own app I forget to open it. My Garmin watch tracks all my running and syncs it to the running app but I wanted a way see my progress, clearly on my desk in the hope it will motivate me to get out and run more.\nI had a waveshare 4.2\u0026quot; eink display in my drawer that ive been looking to find a good use for. A quick search only and I found a python wrapper that can pull data from Garmin connect and suddenly I had all the pieces to put this project together.\nStep 1 - Getting the Garmin Data # I found this brilliant tool online called Python Garmin Connect that allows you to input your Garmin account details and pull specific data from their API. The tool was installed and setup up as a system service on my server and the results servered with a Caddy web server.\nStep 2 - Displaying data on the eink screen # In VS Code I installed platform IO and connected my ESP32. The code was written to connect to wifi, grab the data from the web server and display it to the eink. I gave it a title and a progress bar with percentage to clearly show how much I have completed. I also added a Last Updated time stamp and logic to put the ESP to deep sleep and only update each morning after my typical workout time slot.\nI later decided it made more sense to show todays date at the botton my the page, making it double as a basic daily calender.\nOne of the greatest challenges was my desicion to include an image. An easier option would have been to buy an ESP32 with a micro SD card slot to give me an easier way of storing the image. Wanted to make this work without buying anything new I decided to stream the image from my Caddy server directly ro the display. With some AI magic I had a bash script that would convert any image I gave it to a resized monochrome bitmap suitable for the basic eink display. The great thing about using this approach is it makes changing the image for a different future challenge much easier.\nStep 3 - The case # The case comes from printables and felt like the cleanest option.\n🏁 Summary \u0026amp; Lessons Learned # Wrap up your project here. What would you do differently next time? This provides that \u0026ldquo;closing\u0026rdquo; feel for a future employer.\n","date":"February 20, 2026","externalUrl":null,"permalink":"/projects/garmin-eink/","section":"Projects","summary":"Using an Eink display with an ESP32 to track and motivate me for a virtual running challenge","title":"Garmin Eink","type":"projects"},{"content":"","date":"February 20, 2026","externalUrl":null,"permalink":"/tags/self-hosting/","section":"Tags","summary":"","title":"Self-Hosting","type":"tags"},{"content":" 📋 Project Highlights # Goal: What was the main objective? Tech Stack: Proxmox, Docker, Caddy, etc. Outcome: Did it work? Is it still running? 🚀 The Deep Dive # This is where you write your main paragraphs. You can drop images anywhere using the standard syntax. Thanks to the style block above, they will automatically stay at 50% width.\n🏁 Summary \u0026amp; Lessons Learned # Wrap up your project here. What would you do differently next time? This provides that \u0026ldquo;closing\u0026rdquo; feel for a future employer.\n","date":"February 20, 2026","externalUrl":null,"permalink":"/projects/smart-train/","section":"Projects","summary":"EVERYTHING MUST BE SMART! I take an old Hornby train and make it controllable from Home Assistant","title":"Smart Train","type":"projects"},{"content":"","date":"February 20, 2026","externalUrl":null,"permalink":"/tags/smart-home/","section":"Tags","summary":"","title":"Smart-Home","type":"tags"},{"content":"Testing 123\nA nice test header # Does this webhook work?\nWELL!?\n","date":"February 19, 2026","externalUrl":null,"permalink":"/blog/hello-world/","section":"Blogs","summary":"Welcome to my world.\"","title":"hello world","type":"blog"},{"content":"","externalUrl":null,"permalink":"/categories/","section":"Categories","summary":"","title":"Categories","type":"categories"},{"content":" Professional Experience # Nextbase June 2025 - Present Software QA Specialist Currently driving software quality by bridging the gap between firmware development and automated validation. * **Automated Testing:** Developed Raspberry Pi-based automation scripts to replace manual verification of dashcam hardware. * **Stability Lead:** Specialized in long-duration stability and stress testing. * **OTA Specialist:** Engineered test cases for Over-The-Air firmware updates. Pointwire June 2024 - June 2025 Technical Consultant Specialized in enterprise endpoint security and infrastructure management. * **Tanium SME:** Certified Operator, Administrator, and Cloud Specialist. * **Government \u0026 Defence:** Maintained SC Clearance to deliver secure deployments on MoD systems. * **Virtualization:** Engineered a Proxmox-based lab environment to simulate customer networks. Panasonic April 2023 - June 2024 Embedded Software Engineer Developed firmware for high-end, IoT-enabled smart home appliances. * **Model-Based Development:** Leveraged Simulink \u0026 Embedded Coder for STM32 microcontrollers. * **Test Automation:** Developed a Python-based automation framework. Education \u0026amp; Credentials # ISTQB Certified Tester (Foundation) - 2026 Tanium Certified Cloud Deployment Specialist - 2024 BSc Physics - University of Bristol (2018 - 2022) ","externalUrl":null,"permalink":"/about/","section":"Hi, I'm Ash Marlow","summary":"Professional Experience # Nextbase June 2025 - Present Software QA Specialist Currently driving software quality by bridging the gap between firmware development and automated validation. * **Automated Testing:** Developed Raspberry Pi-based automation scripts to replace manual verification of dashcam hardware. * **Stability Lead:** Specialized in long-duration stability and stress testing. * **OTA Specialist:** Engineered test cases for Over-The-Air firmware updates. Pointwire June 2024 - June 2025 Technical Consultant Specialized in enterprise endpoint security and infrastructure management. * **Tanium SME:** Certified Operator, Administrator, and Cloud Specialist. * **Government \u0026 Defence:** Maintained SC Clearance to deliver secure deployments on MoD systems. * **Virtualization:** Engineered a Proxmox-based lab environment to simulate customer networks. Panasonic April 2023 - June 2024 Embedded Software Engineer Developed firmware for high-end, IoT-enabled smart home appliances. * **Model-Based Development:** Leveraged Simulink \u0026 Embedded Coder for STM32 microcontrollers. * **Test Automation:** Developed a Python-based automation framework. Education \u0026 Credentials # ISTQB Certified Tester (Foundation) - 2026 Tanium Certified Cloud Deployment Specialist - 2024 BSc Physics - University of Bristol (2018 - 2022) ","title":"Curriculum Vitae","type":"page"}] \ No newline at end of file diff --git a/public/index.xml b/public/index.xml new file mode 100644 index 0000000..3af52f7 --- /dev/null +++ b/public/index.xml @@ -0,0 +1,73 @@ + + + + Hi, I'm Ash Marlow on Ash Marlow + http://localhost:1313/ + Recent content in Hi, I'm Ash Marlow on Ash Marlow + Hugo -- gohugo.io + en-gb + © 2026 + Fri, 13 Mar 2026 22:44:48 +0000 + + + Retro Handhelds + http://localhost:1313/blog/retro-handhelds/ + Fri, 13 Mar 2026 22:44:48 +0000 + + http://localhost:1313/blog/retro-handhelds/ + Retro handheld collection + + + + + Solar Cells + http://localhost:1313/projects/solar-cells/ + Fri, 13 Mar 2026 22:16:00 +0000 + + http://localhost:1313/projects/solar-cells/ + Final year University project making Dye Sensitised Solar Cells. + + + + + Garmin Eink + http://localhost:1313/projects/garmin-eink/ + Fri, 20 Feb 2026 15:42:06 +0000 + + http://localhost:1313/projects/garmin-eink/ + Using an Eink display with an ESP32 to track and motivate me for a virtual running challenge + + + + + Smart Train + http://localhost:1313/projects/smart-train/ + Fri, 20 Feb 2026 12:27:11 +0000 + + http://localhost:1313/projects/smart-train/ + EVERYTHING MUST BE SMART! I take an old Hornby train and make it controllable from Home Assistant + + + + + hello world + http://localhost:1313/blog/hello-world/ + Thu, 19 Feb 2026 00:00:00 +0000 + + http://localhost:1313/blog/hello-world/ + Welcome to my world.&quot; + + + + + Curriculum Vitae + http://localhost:1313/about/ + Mon, 01 Jan 0001 00:00:00 +0000 + + http://localhost:1313/about/ + <h2 class="relative group">Professional Experience <div id="professional-experience" class="anchor"></div> <span class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"> <a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#professional-experience" aria-label="Anchor">#</a> </span> </h2> <ol class="border-s-2 border-primary-500 dark:border-primary-300 list-none"> <li> <div class="flex"> <div class="bg-primary-500 dark:bg-primary-300 text-neutral-50 dark:text-neutral-700 min-w-[30px] h-8 text-2xl flex items-center justify-center rounded-full ltr:-ml-12 rtl:-mr-[79px] mt-5"> </div> <div class="block p-6 rounded-lg shadow-2xl flex-1 ms-6 mb-10 break-words"> <div class="flex justify-between"> <h2 class="mt-0">Nextbase</h2> <h3 class=""> <span class="flex cursor-pointer"> <span class="rounded-md border border-primary-400 px-1 py-[1px] text-xs font-normal text-primary-700 dark:border-primary-600 dark:text-primary-400"> June 2025 - Present </span> </span> </h3> </div> <h4 class="mt-0"> Software QA Specialist </h4> <div class="mb-6"> Currently driving software quality by bridging the gap between firmware development and automated validation. * **Automated Testing:** Developed Raspberry Pi-based automation scripts to replace manual verification of dashcam hardware. * **Stability Lead:** Specialized in long-duration stability and stress testing. * **OTA Specialist:** Engineered test cases for Over-The-Air firmware updates. </div> </div> </div> </li> <li> <div class="flex"> <div class="bg-primary-500 dark:bg-primary-300 text-neutral-50 dark:text-neutral-700 min-w-[30px] h-8 text-2xl flex items-center justify-center rounded-full ltr:-ml-12 rtl:-mr-[79px] mt-5"> <span class="relative block icon"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"> <path fill="currentColor" d="M256 0c4.6 0 9.2 1 13.4 2.9L457.7 82.8c22 9.3 38.4 31 38.3 57.2c-.5 99.2-41.3 280.7-213.7 363.2c-16.7 8-36.1 8-52.8 0C57.3 420.7 16.5 239.2 16 140c-.1-26.2 16.3-47.9 38.3-57.2L242.7 2.9C246.8 1 251.4 0 256 0zm0 66.8V444.8C394 378 431.1 230.1 432 141.4L256 66.8l0 0z"/></svg></span> </div> <div class="block p-6 rounded-lg shadow-2xl flex-1 ms-6 mb-10 break-words"> <div class="flex justify-between"> <h2 class="mt-0">Pointwire</h2> <h3 class=""> <span class="flex cursor-pointer"> <span class="rounded-md border border-primary-400 px-1 py-[1px] text-xs font-normal text-primary-700 dark:border-primary-600 dark:text-primary-400"> June 2024 - June 2025 </span> </span> </h3> </div> <h4 class="mt-0"> Technical Consultant </h4> <div class="mb-6"> Specialized in enterprise endpoint security and infrastructure management. * **Tanium SME:** Certified Operator, Administrator, and Cloud Specialist. * **Government & Defence:** Maintained SC Clearance to deliver secure deployments on MoD systems. * **Virtualization:** Engineered a Proxmox-based lab environment to simulate customer networks. </div> </div> </div> </li> <li> <div class="flex"> <div class="bg-primary-500 dark:bg-primary-300 text-neutral-50 dark:text-neutral-700 min-w-[30px] h-8 text-2xl flex items-center justify-center rounded-full ltr:-ml-12 rtl:-mr-[79px] mt-5"> <span class="relative block icon"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 640 512"> <path fill="currentColor" d="M392.8 1.2c-17-4.9-34.7 5-39.6 22l-128 448c-4.9 17 5 34.7 22 39.6s34.7-5 39.6-22l128-448c4.9-17-5-34.7-22-39.6zm80.6 120.1c-12.5 12.5-12.5 32.8 0 45.3L562.7 256l-89.4 89.4c-12.5 12.5-12.5 32.8 0 45.3s32.8 12.5 45.3 0l112-112c12.5-12.5 12.5-32.8 0-45.3l-112-112c-12.5-12.5-32.8-12.5-45.3 0zm-306.7 0c-12.5-12.5-32.8-12.5-45.3 0l-112 112c-12.5 12.5-12.5 32.8 0 45.3l112 112c12.5 12.5 32.8 12.5 45.3 0s12.5-32.8 0-45.3L77.3 256l89.4-89.4c12.5-12.5 12.5-32.8 0-45.3z"/></svg></span> </div> <div class="block p-6 rounded-lg shadow-2xl flex-1 ms-6 mb-10 break-words"> <div class="flex justify-between"> <h2 class="mt-0">Panasonic</h2> <h3 class=""> <span class="flex cursor-pointer"> <span class="rounded-md border border-primary-400 px-1 py-[1px] text-xs font-normal text-primary-700 dark:border-primary-600 dark:text-primary-400"> April 2023 - June 2024 </span> </span> </h3> </div> <h4 class="mt-0"> Embedded Software Engineer </h4> <div class="mb-6"> Developed firmware for high-end, IoT-enabled smart home appliances. * **Model-Based Development:** Leveraged Simulink & Embedded Coder for STM32 microcontrollers. * **Test Automation:** Developed a Python-based automation framework. </div> </div> </div> </li> </ol> <hr> <h2 class="relative group">Education &amp; Credentials <div id="education--credentials" class="anchor"></div> <span class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"> <a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#education--credentials" aria-label="Anchor">#</a> </span> </h2> <ul> <li><strong>ISTQB Certified Tester (Foundation)</strong> - <em>2026</em></li> <li><strong>Tanium Certified Cloud Deployment Specialist</strong> - <em>2024</em></li> <li><strong>BSc Physics</strong> - University of Bristol <em>(2018 - 2022)</em></li> </ul> + + + + + diff --git a/public/js/appearance.min.6f41174b3a05b680820fe08cadbfa5fb7a7ca347b76a0955cdc68b9d8aca1ce24f0547e138cea33bcc7904d551a90afcb1cc7f2d9fe8557075d501419046c08c.js b/public/js/appearance.min.6f41174b3a05b680820fe08cadbfa5fb7a7ca347b76a0955cdc68b9d8aca1ce24f0547e138cea33bcc7904d551a90afcb1cc7f2d9fe8557075d501419046c08c.js new file mode 100644 index 0000000..fc8ae8d --- /dev/null +++ b/public/js/appearance.min.6f41174b3a05b680820fe08cadbfa5fb7a7ca347b76a0955cdc68b9d8aca1ce24f0547e138cea33bcc7904d551a90afcb1cc7f2d9fe8557075d501419046c08c.js @@ -0,0 +1 @@ +const sitePreference=document.documentElement.getAttribute("data-default-appearance"),userPreference=localStorage.getItem("appearance");(sitePreference==="dark"&&userPreference===null||userPreference==="dark")&&document.documentElement.classList.add("dark"),document.documentElement.getAttribute("data-auto-appearance")==="true"&&(window.matchMedia&&window.matchMedia("(prefers-color-scheme: dark)").matches&&userPreference!=="light"&&document.documentElement.classList.add("dark"),window.matchMedia("(prefers-color-scheme: dark)").addEventListener("change",e=>{e.matches?document.documentElement.classList.add("dark"):document.documentElement.classList.remove("dark")}));var updateMeta,getTargetAppearance,updateMermaidTheme=()=>{if(typeof mermaid!="undefined"){const e=document.documentElement.classList.contains("dark"),t=document.querySelectorAll("pre.mermaid");t.forEach(e=>{e.getAttribute("data-processed")?(e.removeAttribute("data-processed"),e.innerHTML=e.getAttribute("data-graph")):e.setAttribute("data-graph",e.textContent)}),e?(initMermaidDark(),mermaid.run()):(initMermaidLight(),mermaid.run())}};window.addEventListener("DOMContentLoaded",e=>{const t=document.getElementById("appearance-switcher"),n=document.getElementById("appearance-switcher-mobile");updateMeta(),this.updateLogo?.(getTargetAppearance()),updateMermaidTheme(),t&&(t.addEventListener("click",()=>{document.documentElement.classList.toggle("dark");var e=getTargetAppearance();localStorage.setItem("appearance",e),updateMeta(),updateMermaidTheme(),this.updateLogo?.(e)}),t.addEventListener("contextmenu",e=>{e.preventDefault(),localStorage.removeItem("appearance")})),n&&(n.addEventListener("click",()=>{document.documentElement.classList.toggle("dark");var e=getTargetAppearance();localStorage.setItem("appearance",e),updateMeta(),updateMermaidTheme(),this.updateLogo?.(e)}),n.addEventListener("contextmenu",e=>{e.preventDefault(),localStorage.removeItem("appearance")}))}),updateMeta=()=>{var e=document.querySelector("body"),t=getComputedStyle(e);document.querySelector('meta[name="theme-color"]').setAttribute("content",t.backgroundColor)},getTargetAppearance=()=>document.documentElement.classList.contains("dark")?"dark":"light",window.addEventListener("DOMContentLoaded",e=>{const t=document.getElementById("top-scroller"),n=document.getElementById("site-footer");t&&n&&t.getBoundingClientRect().top>n.getBoundingClientRect().top&&(t.hidden=!0)}) \ No newline at end of file diff --git a/public/js/main.bundle.min.b61ad3f6e0119d2611a72f3892ca8f75eb1da42ac1f74dafaf32e617ccb970be4b278131f9ad9f2eff9d4bd23e552e7881e2c821970c4bf8f47a2467bca1c933.js b/public/js/main.bundle.min.b61ad3f6e0119d2611a72f3892ca8f75eb1da42ac1f74dafaf32e617ccb970be4b278131f9ad9f2eff9d4bd23e552e7881e2c821970c4bf8f47a2467bca1c933.js new file mode 100644 index 0000000..36075c6 --- /dev/null +++ b/public/js/main.bundle.min.b61ad3f6e0119d2611a72f3892ca8f75eb1da42ac1f74dafaf32e617ccb970be4b278131f9ad9f2eff9d4bd23e552e7881e2c821970c4bf8f47a2467bca1c933.js @@ -0,0 +1,15 @@ +function scrollToTop(){const e=document.getElementById("scroll-to-top");window.scrollY>window.innerHeight*.5?(e.classList.remove("translate-y-4","opacity-0"),e.classList.add("translate-y-0","opacity-100")):(e.classList.remove("translate-y-0","opacity-100"),e.classList.add("translate-y-4","opacity-0"))}window.addEventListener("scroll",scrollToTop),window.addEventListener("load",scrollToTop),e=this,t=function(){"use strict";function R(e,t){var n,s=Object.keys(e);return Object.getOwnPropertySymbols&&(n=Object.getOwnPropertySymbols(e),t&&(n=n.filter(function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable})),s.push.apply(s,n)),s}function h(e){for(var t,n=1;ne.length)&&(t=e.length);for(var n=0,s=new Array(t);n0&&0[0]!==arguments[0]?arguments[0]:{},s=n.getFn,i=0[0]===s?e.getFn:s,o=n.fieldNormWeight,r=0[0]===o?e.fieldNormWeight:o;t(this,a),this.norm=function(){var n=arguments.length>0&&0[0]!==arguments[0]?arguments[0]:1,s=arguments.length>1&&0[0]!==arguments[1]?arguments[1]:3,e=new Map,t=10**s;return{get:function(s){if(o=s.match(ce).length,e.has(o))return e.get(o);var o,a=1/o**(.5*n),i=parseFloat(Math.round(a*t)/t);return e.set(o,i),i},clear:function(){e.clear()}}}(r,3),this.getFn=i,this.isCreated=!1,this.setIndexRecords()}return n(a,[{key:"setSources",value:function(){var e=arguments.length>0&&0[0]!==arguments[0]?arguments[0]:[];this.docs=e}},{key:"setIndexRecords",value:function(){var e=arguments.length>0&&0[0]!==arguments[0]?arguments[0]:[];this.records=e}},{key:"setKeys",value:function(){var t=this,e=arguments.length>0&&0[0]!==arguments[0]?arguments[0]:[];this.keys=e,this._keysMap={},e.forEach(function(e,n){t._keysMap[e.id]=n})}},{key:"create",value:function(){var e=this;!this.isCreated&&this.docs.length&&(this.isCreated=!0,o(this.docs[0])?this.docs.forEach(function(t,n){e._addString(t,n)}):this.docs.forEach(function(t,n){e._addObject(t,n)}),this.norm.clear())}},{key:"add",value:function(e){var t=this.size();o(e)?this._addString(e,t):this._addObject(e,t)}},{key:"removeAt",value:function(e){this.records.splice(e,1);for(var t=e,n=this.size();t2&&0[0]!==arguments[2]?arguments[2]:{},i=o.getFn,r=0[0]===i?e.getFn:i,a=o.fieldNormWeight,c=0[0]===a?e.fieldNormWeight:a,s=new E({getFn:r,fieldNormWeight:c});return s.setKeys(t.map(H)),s.setSources(n),s.create(),s}function p(t){var s,n=arguments.length>1&&0[0]!==arguments[1]?arguments[1]:{},d=n.errors,f=0[0]===d?0:d,l=n.currentLocation,u=0[0]===l?0:l,a=n.expectedLocation,h=0[0]===a?0:a,r=n.distance,c=0[0]===r?e.distance:r,i=n.ignoreLocation,m=0[0]===i?e.ignoreLocation:i,o=f/t.length;return m?o:(s=Math.abs(h-u),c?o+s/c:s?1:o)}a=32;function K(t,n,s){var o,r,f,v,b,w,k,A,H,c=arguments.length>3&&0[0]!==arguments[3]?arguments[3]:{},F=c.location,$=0[0]===F?e.location:F,R=c.distance,C=0[0]===R?e.distance:R,N=c.threshold,V=0[0]===N?e.threshold:N,I=c.findAllMatches,W=0[0]===I?e.findAllMatches:I,P=c.minMatchCharLength,z=0[0]===P?e.minMatchCharLength:P,B=c.includeMatches,D=0[0]===B?e.includeMatches:B,L=c.ignoreLocation,y=0[0]===L?e.ignoreLocation:L;if(n.length>a)throw new Error("Pattern length exceeds max of ".concat(a,"."));for(var _,d=n.length,g=t.length,i=Math.max(0,Math.min($,g)),m=V,h=i,x=z>1||D,S=x?Array(g):[];(_=t.indexOf(n,h))>-1;)if(H=p(n,{currentLocation:_,expectedLocation:i,distance:C,ignoreLocation:y}),m=Math.min(H,m),h=_+d,x)for(b=0;b=T;o-=1)if(v=o-1,A=s[t.charAt(v)],x&&(S[v]=+!!A),u[o]=(u[o+1]<<1|1)&A,l&&(u[o]|=(O[o+1]|O[o])<<1|1|O[o+1]),u[o]&U&&(E=p(n,{errors:l,currentLocation:v,expectedLocation:i,distance:C,ignoreLocation:y}))<=m){if(m=E,(h=v)<=i)break;T=Math.max(1,2*i-h)}if(p(n,{errors:l+1,currentLocation:i,expectedLocation:i,distance:C,ignoreLocation:y})>m)break;O=u}return w={isMatch:h>=0,score:Math.max(.001,E)},x&&(k=function(){for(var i,s=arguments.length>0&&0[0]!==arguments[0]?arguments[0]:[],a=arguments.length>1&&0[0]!==arguments[1]?arguments[1]:e.minMatchCharLength,o=[],t=-1,r=-1,n=0,c=s.length;n=a&&o.push([t,r]),t=-1);return s[n-1]&&n-t>=a&&o.push([t,n-1]),o}(S,z),k.length?D&&(w.indices=k):w.isMatch=!1),w}function ee(e){for(var s,n={},t=0,o=e.length;t1&&0[0]!==arguments[1]?arguments[1]:{},h=o.location,A=0[0]===h?e.location:h,u=o.threshold,E=0[0]===u?e.threshold:u,v=o.distance,F=0[0]===v?e.distance:v,f=o.includeMatches,S=0[0]===f?e.includeMatches:f,g=o.findAllMatches,k=0[0]===g?e.findAllMatches:g,d=o.minMatchCharLength,O=0[0]===d?e.minMatchCharLength:d,y=o.isCaseSensitive,_=0[0]===y?e.isCaseSensitive:y,w=o.ignoreDiacritics,j=0[0]===w?e.ignoreDiacritics:w,b=o.ignoreLocation,C=0[0]===b?e.ignoreLocation:b;if(t(this,s),this.options={location:A,threshold:E,distance:F,includeMatches:S,findAllMatches:k,minMatchCharLength:O,isCaseSensitive:_,ignoreDiacritics:j,ignoreLocation:C},n=_?n:n.toLowerCase(),n=j?m(n):n,this.pattern=n,this.chunks=[],this.pattern.length)if(r=function(e,t){x.chunks.push({pattern:e,alphabet:ee(e),startIndex:t})},i=this.pattern.length,i>a){for(var c=0,p=i%a,M=i-p;c1&&0[0]!==arguments[1]?arguments[1]:{},r=s.location,O=0[0]===r?e.location:r,l=s.threshold,g=0[0]===l?e.threshold:l,u=s.distance,_=0[0]===u?e.distance:u,m=s.includeMatches,j=0[0]===m?e.includeMatches:m,p=s.findAllMatches,v=0[0]===p?e.findAllMatches:p,a=s.minMatchCharLength,b=0[0]===a?e.minMatchCharLength:a,f=s.isCaseSensitive,y=0[0]===f?e.isCaseSensitive:f,h=s.ignoreDiacritics,w=0[0]===h?e.ignoreDiacritics:h,c=s.ignoreLocation,x=0[0]===c?e.ignoreLocation:c;return t(this,o),(d=i.call(this,n))._bitapSearch=new V(n,{location:O,threshold:g,distance:_,includeMatches:j,findAllMatches:v,minMatchCharLength:b,isCaseSensitive:y,ignoreDiacritics:w,ignoreLocation:x}),d}return n(o,[{key:"search",value:function(e){return this._bitapSearch.searchIn(e)}}],[{key:"type",get:function(){return"fuzzy"}},{key:"multiRegex",get:function(){return/^"(.*)"$/}},{key:"singleRegex",get:function(){return/^(.*)$/}}]),o}(c),U=function(e){r(s,e);var o=l(s);function s(e){return t(this,s),o.call(this,e)}return n(s,[{key:"search",value:function(e){for(var t,o,n=0,s=[],i=this.pattern.length;(t=e.indexOf(this.pattern,n))>-1;)n=t+i,s.push([t,n-1]);return o=!!s.length,{isMatch:o,score:o?0:1,indices:s}}}],[{key:"type",get:function(){return"include"}},{key:"multiRegex",get:function(){return/^'"(.*)"$/}},{key:"singleRegex",get:function(){return/^'(.*)$/}}]),s}(c),j=[Z,U,se,Y,X,G,Q,S],I=j.length,te=/ +(?=(?:[^"]*"[^"]*")*[^"]*$)/,ne=new Set([S.type,U.type]),q=function(){function s(n){var o=arguments.length>1&&0[0]!==arguments[1]?arguments[1]:{},a=o.isCaseSensitive,r=0[0]===a?e.isCaseSensitive:a,c=o.ignoreDiacritics,l=0[0]===c?e.ignoreDiacritics:c,d=o.includeMatches,O=0[0]===d?e.includeMatches:d,h=o.minMatchCharLength,v=0[0]===h?e.minMatchCharLength:h,f=o.ignoreLocation,_=0[0]===f?e.ignoreLocation:f,g=o.findAllMatches,b=0[0]===g?e.findAllMatches:g,i=o.location,y=0[0]===i?e.location:i,p=o.threshold,w=0[0]===p?e.threshold:p,u=o.distance,x=0[0]===u?e.distance:u;t(this,s),this.query=null,this.options={isCaseSensitive:r,ignoreDiacritics:l,includeMatches:O,minMatchCharLength:v,findAllMatches:b,ignoreLocation:_,location:y,threshold:w,distance:x},n=r?n:n.toLowerCase(),n=l?m(n):n,this.pattern=n,this.query=function(e){var t=arguments.length>1&&0[0]!==arguments[1]?arguments[1]:{};return e.split("|").map(function(e){for(var a,r,c,l,d=e.trim().split(te).filter(function(e){return e&&!!e.trim()}),s=[],o=0,h=d.length;o2&&0[0]!==arguments[2]?arguments[2]:{}).auto,s=0[0]===n||n;return b(e)||(e=T(e)),function e(n){var r,c,d,u,a=Object.keys(n),l=function(e){return!!e[D]}(n);if(!l&&a.length>1&&!b(n))return e(T(n));if(function(e){return!i(e)&&B(e)&&!b(e)}(n)){if(r=l?n[D]:a[0],c=l?n[le]:n[r],!o(c))throw new Error(function(e){return"Invalid value for key ".concat(e)}(r));return d={keyId:_(r),pattern:c},s&&(d.searcher=w(c,t)),d}return u={children:[],operator:a[0]},a.forEach(function(t){var s=n[t];i(s)&&s.forEach(function(t){u.children.push(e(t))})}),u}(e)}function me(e,t){var n=e.matches;t.matches=[],s(n)&&n.forEach(function(e){if(s(e.indices)&&e.indices.length){var n={indices:e.indices,value:e.value};e.key&&(n.key=e.key.src),e.idx>-1&&(n.refIndex=e.idx),t.matches.push(n)}})}function fe(e,t){t.score=e.score}return u=function(){function a(n){var s=arguments.length>1&&0[0]!==arguments[1]?arguments[1]:{},o=arguments.length>2?arguments[2]:0[0];t(this,a),this.options=h(h({},e),s),this.options.useExtendedSearch,this._keyStore=new pe(this.options.keys),this.setCollection(n,o)}return n(a,[{key:"setCollection",value:function(e,t){if(this._docs=e,t&&!(t instanceof E))throw new Error("Incorrect 'index' type");this._myIndex=t||L(this.options.keys,this._docs,{getFn:this.options.getFn,fieldNormWeight:this.options.fieldNormWeight})}},{key:"add",value:function(e){s(e)&&(this._docs.push(e),this._myIndex.add(e))}},{key:"remove",value:function(){for(var t,o=arguments.length>0&&0[0]!==arguments[0]?arguments[0]:function(){return!1},n=[],e=0,s=this._docs.length;e1&&0[0]!==arguments[1]?arguments[1]:{}).limit,i=0[0]===a?-1:a,n=this.options,r=n.includeMatches,c=n.includeScore,l=n.shouldSort,d=n.sortFn,u=n.ignoreFieldNorm,s=o(t)?o(this._docs[0])?this._searchStringList(t):this._searchObjectList(t):this._searchLogical(t);return function(t,n){var s=n.ignoreFieldNorm,o=0[0]===s?e.ignoreFieldNorm:s;t.forEach(function(e){var t=1;e.matches.forEach(function(e){var n=e.key,a=e.norm,s=e.score,i=n?n.weight:null;t*=(0===s&&i?Number.EPSILON:s)**((i||1)*(o?1:a))}),e.score=t})}(s,{ignoreFieldNorm:u}),l&&s.sort(d),$(i)&&i>-1&&(s=s.slice(0,i)),function(t,n){var o=arguments.length>2&&0[0]!==arguments[2]?arguments[2]:{},i=o.includeMatches,r=0[0]===i?e.includeMatches:i,a=o.includeScore,c=0[0]===a?e.includeScore:a,s=[];return r&&s.push(me),c&&s.push(fe),t.map(function(e){var t=e.idx,o={item:n[t],refIndex:t};return s.length&&s.forEach(function(t){t(e,o)}),o})}(s,this._docs,{includeMatches:r,includeScore:c})}},{key:"_searchStringList",value:function(e){var n=w(e,this.options),o=this._myIndex.records,t=[];return o.forEach(function(e){var o=e.v,a=e.i,r=e.n;if(s(o)){var i=n.searchIn(o),c=i.isMatch,l=i.score,d=i.indices;c&&t.push({item:o,idx:a,matches:[{score:l,value:o,norm:r,indices:d}]})}}),t}},{key:"_searchLogical",value:function(e){var n=this,i=he(e,this.options),a=function e(t,s,o){if(!t.children){var c,l=t.keyId,u=t.searcher,i=n._findMatches({key:n._keyStore.get(l),value:n._myIndex.getValueForItemAtKeyId(s,l),searcher:u});return i&&i.length?[{idx:o,item:s,matches:i}]:[]}for(var a=[],r=0,h=t.children.length;r1&&0[0]!==arguments[1]?arguments[1]:{},o=s.getFn,a=0[0]===o?e.getFn:o,i=s.fieldNormWeight,r=0[0]===i?e.fieldNormWeight:i,c=t.keys,l=t.records,n=new E({getFn:a,fieldNormWeight:r});return n.setKeys(c),n.setIndexRecords(l),n},u.config=e,function(){f.push.apply(f,arguments)}(q),u},"object"==typeof exports&&"undefined"!=typeof module?module.exports=t():"function"==typeof define&&define.amd?define(t):(e="undefined"!=typeof globalThis?globalThis:e||self).Fuse=t();var e,t,fuse,showButton=document.getElementById("search-button"),showButtonMobile=document.getElementById("search-button-mobile"),hideButton=document.getElementById("close-search-button"),wrapper=document.getElementById("search-wrapper"),modal=document.getElementById("search-modal"),input=document.getElementById("search-query"),output=document.getElementById("search-results"),first=output.firstChild,last=output.lastChild,searchVisible=!1,indexed=!1,hasResults=!1;showButton?showButton.addEventListener("click",displaySearch):null,showButtonMobile?showButtonMobile.addEventListener("click",displaySearch):null,hideButton.addEventListener("click",hideSearch),wrapper.addEventListener("click",hideSearch),modal.addEventListener("click",function(e){return e.stopPropagation(),e.stopImmediatePropagation(),!1}),document.addEventListener("keydown",function(e){if(e.key=="/"){const t=document.activeElement,n=t.tagName,s=n==="INPUT"||n==="TEXTAREA"||t.isContentEditable;!searchVisible&&!s&&(e.preventDefault(),displaySearch())}e.key=="Escape"&&hideSearch(),e.key=="ArrowDown"&&searchVisible&&hasResults&&(e.preventDefault(),document.activeElement==input?first.focus():document.activeElement==last?last.focus():document.activeElement.parentElement.nextSibling.firstElementChild.focus()),e.key=="ArrowUp"&&searchVisible&&hasResults&&(e.preventDefault(),document.activeElement==input?input.focus():document.activeElement==first?input.focus():document.activeElement.parentElement.previousSibling.firstElementChild.focus()),e.key=="Enter"&&searchVisible&&hasResults&&(e.preventDefault(),document.activeElement==input?first.focus():document.activeElement.click())}),input.onkeyup=function(){executeQuery(this.value)};function displaySearch(){indexed||buildIndex(),searchVisible||(document.body.style.overflow="hidden",wrapper.style.visibility="visible",input.focus(),searchVisible=!0)}function hideSearch(){searchVisible&&(document.body.style.overflow="visible",wrapper.style.visibility="hidden",input.value="",output.innerHTML="",document.activeElement.blur(),searchVisible=!1)}function fetchJSON(e,t){var n=new XMLHttpRequest;n.onreadystatechange=function(){if(n.readyState===4&&n.status===200){var e=JSON.parse(n.responseText);t&&t(e)}},n.open("GET",e),n.send()}function buildIndex(){var e=wrapper.getAttribute("data-url"),e=e.replace(/\/?$/,"/");fetchJSON(e+"index.json",function(e){var t={shouldSort:!0,ignoreLocation:!0,threshold:0,includeMatches:!0,keys:[{name:"title",weight:.8},{name:"section",weight:.2},{name:"summary",weight:.6},{name:"content",weight:.4}]};fuse=new Fuse(e,t),indexed=!0})}function executeQuery(e){let n=fuse.search(e),t="";n.length>0?(n.forEach(function(e){var o,i,a=e.item.summary,s=document.createElement("div");s.innerHTML=a,e.item.summary=s.textContent||s.innerText||"",o=e.item.externalUrl?e.item.title+''+e.item.externalUrl+"":e.item.title,i=e.item.externalUrl?'target="_blank" rel="noopener" href="'+e.item.externalUrl+'"':'href="'+e.item.permalink+'"',t=t+`
  • + +
    +
    + ${o} +
    +
    ${e.item.section}·${e.item.date?e.item.date:""}
    +
    ${e.item.summary}
    +
    +
    +
    +
    +
  • `}),hasResults=!0):(t="",hasResults=!1),output.innerHTML=t,n.length>0&&(first=output.firstChild.firstElementChild,last=output.lastChild.firstElementChild)}document.getElementById("katex-render")&&document.getElementById("katex-render").addEventListener("load",()=>{renderMathInElement(document.body)}),function(){"use strict";var e=[];window.addEventListener("beforeprint",function(){for(var n=document.querySelectorAll("details:not([open])"),t=0;t{let t=atob(e.getAttribute("data-email"));const s=e.getAttribute("data-subject");let n=t.startsWith("mailto:")?t:"mailto:"+t;s&&(n+=(n.includes("?")?"&":"?")+"subject="+encodeURIComponent(s)),e.href=n})}() \ No newline at end of file diff --git a/public/lib/tw-elements/index.min.5ffccf337b773ee831515cdde152c8039e972dd479f7dffb0532a79de9a6de5926154ae2587f181ed6c06a99aee25667096bcf6495da5aa86e235d98baee5943.js b/public/lib/tw-elements/index.min.5ffccf337b773ee831515cdde152c8039e972dd479f7dffb0532a79de9a6de5926154ae2587f181ed6c06a99aee25667096bcf6495da5aa86e235d98baee5943.js new file mode 100644 index 0000000..a82e9a4 --- /dev/null +++ b/public/lib/tw-elements/index.min.5ffccf337b773ee831515cdde152c8039e972dd479f7dffb0532a79de9a6de5926154ae2587f181ed6c06a99aee25667096bcf6495da5aa86e235d98baee5943.js @@ -0,0 +1,29 @@ +(function(L,P){typeof exports=="object"&&typeof module<"u"?P(exports):typeof define=="function"&&define.amd?define(["exports"],P):(L=typeof globalThis<"u"?globalThis:L||self,P(L.twe={}))})(this,function(L){"use strict";var jl=Object.defineProperty;var Ul=(L,P,R)=>P in L?jl(L,P,{enumerable:!0,configurable:!0,writable:!0,value:R}):L[P]=R;var $i=(L,P,R)=>(Ul(L,typeof P!="symbol"?P+"":P,R),R);/*! +* TW Elements +* Version: FREE 2.0.0 +* +* Copyright: Material Design for Bootstrap +* https://mdbootstrap.com/ +* +* Read the license: https://tw-elements.com/license/ +* +* +* Documentation: https://tw-elements.com/ +* +* Support: https://mdbootstrap.com/support/cat/twe +* +* Contact: tailwind@mdbootstrap.com +* +*/const P=(()=>{const i={};let t=1;return{set(e,s,n){typeof e[s]>"u"&&(e[s]={key:s,id:t},t++),i[e[s].id]=n},get(e,s){if(!e||typeof e[s]>"u")return null;const n=e[s];return n.key===s?i[n.id]:null},delete(e,s){if(typeof e[s]>"u")return;const n=e[s];n.key===s&&(delete i[n.id],delete e[s])}}})(),R={setData(i,t,e){P.set(i,t,e)},getData(i,t){return P.get(i,t)},removeData(i,t){P.delete(i,t)}},Bn=1e6,jn=1e3,Ie="transitionend",Un=i=>i==null?`${i}`:{}.toString.call(i).match(/\s([a-z]+)/i)[1].toLowerCase(),Yn=i=>{do i+=Math.floor(Math.random()*Bn);while(document.getElementById(i));return i},Ii=i=>{let t=i.getAttribute("data-twe-target");if(!t||t==="#"){let e=i.getAttribute("href");if(!e||!e.includes("#")&&!e.startsWith("."))return null;e.includes("#")&&!e.startsWith("#")&&(e=`#${e.split("#")[1]}`),t=e&&e!=="#"?e.trim():null}return t},Re=i=>{const t=Ii(i);return t&&document.querySelector(t)?t:null},st=i=>{const t=Ii(i);return t?document.querySelector(t):null},ke=i=>{if(!i)return 0;let{transitionDuration:t,transitionDelay:e}=window.getComputedStyle(i);const s=Number.parseFloat(t),n=Number.parseFloat(e);return!s&&!n?0:(t=t.split(",")[0],e=e.split(",")[0],(Number.parseFloat(t)+Number.parseFloat(e))*jn)},Ri=i=>{i.dispatchEvent(new Event(Ie))},yt=i=>!i||typeof i!="object"?!1:(typeof i.jquery<"u"&&(i=i[0]),typeof i.nodeType<"u"),nt=i=>yt(i)?i.jquery?i[0]:i:typeof i=="string"&&i.length>0?document.querySelector(i):null,x=(i,t,e)=>{Object.keys(e).forEach(s=>{const n=e[s],r=t[s],o=r&&yt(r)?"element":Un(r);if(!new RegExp(n).test(o))throw new Error(`${i.toUpperCase()}: Option "${s}" provided type "${o}" but expected type "${n}".`)})},Ct=i=>{if(!i)return!1;if(i.style&&i.parentNode&&i.parentNode.style){const t=getComputedStyle(i),e=getComputedStyle(i.parentNode);return t.display!=="none"&&e.display!=="none"&&t.visibility!=="hidden"}return!1},ct=i=>!i||i.nodeType!==Node.ELEMENT_NODE||i.classList.contains("disabled")?!0:typeof i.disabled<"u"?i.disabled:i.hasAttribute("disabled")&&i.getAttribute("disabled")!=="false",ki=i=>{if(!document.documentElement.attachShadow)return null;if(typeof i.getRootNode=="function"){const t=i.getRootNode();return t instanceof ShadowRoot?t:null}return i instanceof ShadowRoot?i:i.parentNode?ki(i.parentNode):null},se=()=>function(){},Ut=i=>{i.offsetHeight},xi=()=>{const{jQuery:i}=window;return i&&!document.body.hasAttribute("data-twe-no-jquery")?i:null},xe=[],Pi=i=>{document.readyState==="loading"?(xe.length||document.addEventListener("DOMContentLoaded",()=>{xe.forEach(t=>t())}),xe.push(i)):i()},W=()=>document.documentElement.dir==="rtl",Yt=i=>document.createElement(i),dt=i=>{typeof i=="function"&&i()},Mi=(i,t,e=!0)=>{if(!e){dt(i);return}const s=5,n=ke(t)+s;let r=!1;const o=({target:a})=>{a===t&&(r=!0,t.removeEventListener(Ie,o),dt(i))};t.addEventListener(Ie,o),setTimeout(()=>{r||Ri(t)},n)},Hi=(i,t,e,s)=>{let n=i.indexOf(t);if(n===-1)return i[!e&&s?i.length-1:0];const r=i.length;return n+=e?1:-1,s&&(n=(n+r)%r),i[Math.max(0,Math.min(n,r-1))]},Kn=/[^.]*(?=\..*)\.|.*/,Fn=/\..*/,zn=/::\d+$/,Pe={};let Vi=1;const qn={mouseenter:"mouseover",mouseleave:"mouseout"},Xn=/^(mouseenter|mouseleave)/i,Wi=new Set(["click","dblclick","mouseup","mousedown","contextmenu","mousewheel","DOMMouseScroll","mouseover","mouseout","mousemove","selectstart","selectend","keydown","keypress","keyup","orientationchange","touchstart","touchmove","touchend","touchcancel","pointerdown","pointermove","pointerup","pointerleave","pointercancel","gesturestart","gesturechange","gestureend","focus","blur","change","reset","select","submit","focusin","focusout","load","unload","beforeunload","resize","move","DOMContentLoaded","readystatechange","error","abort","scroll"]);function Bi(i,t){return t&&`${t}::${Vi++}`||i.uidEvent||Vi++}function ji(i){const t=Bi(i);return i.uidEvent=t,Pe[t]=Pe[t]||{},Pe[t]}function Gn(i,t){return function e(s){return s.delegateTarget=i,e.oneOff&&d.off(i,s.type,t),t.apply(i,[s])}}function Qn(i,t,e){return function s(n){const r=i.querySelectorAll(t);for(let{target:o}=n;o&&o!==this;o=o.parentNode)for(let a=r.length;a--;"")if(r[a]===o)return n.delegateTarget=o,s.oneOff&&d.off(i,n.type,e),e.apply(o,[n]);return null}}function Ui(i,t,e=null){const s=Object.keys(i);for(let n=0,r=s.length;nfunction(T){if(!T.relatedTarget||T.relatedTarget!==T.delegateTarget&&!T.delegateTarget.contains(T.relatedTarget))return O.call(this,T)};s?s=g(s):e=g(e)}const[r,o,a]=Yi(t,e,s),l=ji(i),u=l[a]||(l[a]={}),c=Ui(u,o,r?e:null);if(c){c.oneOff=c.oneOff&&n;return}const f=Bi(o,t.replace(Kn,"")),v=r?Qn(i,e,s):Gn(i,e);v.delegationSelector=r?e:null,v.originalHandler=o,v.oneOff=n,v.uidEvent=f,u[f]=v,i.addEventListener(a,v,r)}function Me(i,t,e,s,n){const r=Ui(t[e],s,n);r&&(i.removeEventListener(e,r,!!n),delete t[e][r.uidEvent])}function Zn(i,t,e,s){const n=t[e]||{};Object.keys(n).forEach(r=>{if(r.includes(s)){const o=n[r];Me(i,t,e,o.originalHandler,o.delegationSelector)}})}function Fi(i){return i=i.replace(Fn,""),qn[i]||i}const d={on(i,t,e,s){Ki(i,t,e,s,!1)},one(i,t,e,s){Ki(i,t,e,s,!0)},off(i,t,e,s){if(typeof t!="string"||!i)return;const[n,r,o]=Yi(t,e,s),a=o!==t,l=ji(i),u=t.startsWith(".");if(typeof r<"u"){if(!l||!l[o])return;Me(i,l,o,r,n?e:null);return}u&&Object.keys(l).forEach(f=>{Zn(i,l,f,t.slice(1))});const c=l[o]||{};Object.keys(c).forEach(f=>{const v=f.replace(zn,"");if(!a||t.includes(v)){const g=c[f];Me(i,l,o,g.originalHandler,g.delegationSelector)}})},trigger(i,t,e){if(typeof t!="string"||!i)return null;const s=xi(),n=Fi(t),r=t!==n,o=Wi.has(n);let a,l=!0,u=!0,c=!1,f=null;return r&&s&&(a=s.Event(t,e),s(i).trigger(a),l=!a.isPropagationStopped(),u=!a.isImmediatePropagationStopped(),c=a.isDefaultPrevented()),o?(f=document.createEvent("HTMLEvents"),f.initEvent(n,l,!0)):f=new CustomEvent(t,{bubbles:l,cancelable:!0}),typeof e<"u"&&Object.keys(e).forEach(v=>{Object.defineProperty(f,v,{get(){return e[v]}})}),c&&f.preventDefault(),u&&i.dispatchEvent(f),f.defaultPrevented&&typeof a<"u"&&a.preventDefault(),f}},Jn="5.1.3";class et{constructor(t){t=nt(t),t&&(this._element=t,R.setData(this._element,this.constructor.DATA_KEY,this))}dispose(){R.removeData(this._element,this.constructor.DATA_KEY),d.off(this._element,this.constructor.EVENT_KEY),Object.getOwnPropertyNames(this).forEach(t=>{this[t]=null})}_queueCallback(t,e,s=!0){Mi(t,e,s)}static getInstance(t){return R.getData(nt(t),this.DATA_KEY)}static getOrCreateInstance(t,e={}){return this.getInstance(t)||new this(t,typeof e=="object"?e:null)}static get VERSION(){return Jn}static get NAME(){throw new Error('You have to implement the static method "NAME", for each component!')}static get DATA_KEY(){return`twe.${this.NAME}`}static get EVENT_KEY(){return`.${this.DATA_KEY}`}}const tr="button",er="active";class ne extends et{static get NAME(){return tr}toggle(){this._element.setAttribute("aria-pressed",this._element.classList.toggle(er))}static jQueryInterface(t){return this.each(function(){const e=ne.getOrCreateInstance(this);t==="toggle"&&e[t]()})}}var M="top",B="bottom",j="right",H="left",re="auto",Ot=[M,B,j,H],ut="start",Dt="end",zi="clippingParents",He="viewport",Nt="popper",qi="reference",Ve=Ot.reduce(function(i,t){return i.concat([t+"-"+ut,t+"-"+Dt])},[]),We=[].concat(Ot,[re]).reduce(function(i,t){return i.concat([t,t+"-"+ut,t+"-"+Dt])},[]),Xi="beforeRead",Gi="read",Qi="afterRead",Zi="beforeMain",Ji="main",ts="afterMain",es="beforeWrite",is="write",ss="afterWrite",ns=[Xi,Gi,Qi,Zi,Ji,ts,es,is,ss];function Q(i){return i?(i.nodeName||"").toLowerCase():null}function U(i){if(i==null)return window;if(i.toString()!=="[object Window]"){var t=i.ownerDocument;return t&&t.defaultView||window}return i}function ht(i){var t=U(i).Element;return i instanceof t||i instanceof Element}function F(i){var t=U(i).HTMLElement;return i instanceof t||i instanceof HTMLElement}function Be(i){if(typeof ShadowRoot>"u")return!1;var t=U(i).ShadowRoot;return i instanceof t||i instanceof ShadowRoot}function ir(i){var t=i.state;Object.keys(t.elements).forEach(function(e){var s=t.styles[e]||{},n=t.attributes[e]||{},r=t.elements[e];!F(r)||!Q(r)||(Object.assign(r.style,s),Object.keys(n).forEach(function(o){var a=n[o];a===!1?r.removeAttribute(o):r.setAttribute(o,a===!0?"":a)}))})}function sr(i){var t=i.state,e={popper:{position:t.options.strategy,left:"0",top:"0",margin:"0"},arrow:{position:"absolute"},reference:{}};return Object.assign(t.elements.popper.style,e.popper),t.styles=e,t.elements.arrow&&Object.assign(t.elements.arrow.style,e.arrow),function(){Object.keys(t.elements).forEach(function(s){var n=t.elements[s],r=t.attributes[s]||{},o=Object.keys(t.styles.hasOwnProperty(s)?t.styles[s]:e[s]),a=o.reduce(function(l,u){return l[u]="",l},{});!F(n)||!Q(n)||(Object.assign(n.style,a),Object.keys(r).forEach(function(l){n.removeAttribute(l)}))})}}const je={name:"applyStyles",enabled:!0,phase:"write",fn:ir,effect:sr,requires:["computeStyles"]};function Z(i){return i.split("-")[0]}var ft=Math.max,oe=Math.min,St=Math.round;function Ue(){var i=navigator.userAgentData;return i!=null&&i.brands&&Array.isArray(i.brands)?i.brands.map(function(t){return t.brand+"/"+t.version}).join(" "):navigator.userAgent}function rs(){return!/^((?!chrome|android).)*safari/i.test(Ue())}function Lt(i,t,e){t===void 0&&(t=!1),e===void 0&&(e=!1);var s=i.getBoundingClientRect(),n=1,r=1;t&&F(i)&&(n=i.offsetWidth>0&&St(s.width)/i.offsetWidth||1,r=i.offsetHeight>0&&St(s.height)/i.offsetHeight||1);var o=ht(i)?U(i):window,a=o.visualViewport,l=!rs()&&e,u=(s.left+(l&&a?a.offsetLeft:0))/n,c=(s.top+(l&&a?a.offsetTop:0))/r,f=s.width/n,v=s.height/r;return{width:f,height:v,top:c,right:u+f,bottom:c+v,left:u,x:u,y:c}}function Ye(i){var t=Lt(i),e=i.offsetWidth,s=i.offsetHeight;return Math.abs(t.width-e)<=1&&(e=t.width),Math.abs(t.height-s)<=1&&(s=t.height),{x:i.offsetLeft,y:i.offsetTop,width:e,height:s}}function os(i,t){var e=t.getRootNode&&t.getRootNode();if(i.contains(t))return!0;if(e&&Be(e)){var s=t;do{if(s&&i.isSameNode(s))return!0;s=s.parentNode||s.host}while(s)}return!1}function it(i){return U(i).getComputedStyle(i)}function nr(i){return["table","td","th"].indexOf(Q(i))>=0}function rt(i){return((ht(i)?i.ownerDocument:i.document)||window.document).documentElement}function ae(i){return Q(i)==="html"?i:i.assignedSlot||i.parentNode||(Be(i)?i.host:null)||rt(i)}function as(i){return!F(i)||it(i).position==="fixed"?null:i.offsetParent}function rr(i){var t=/firefox/i.test(Ue()),e=/Trident/i.test(Ue());if(e&&F(i)){var s=it(i);if(s.position==="fixed")return null}var n=ae(i);for(Be(n)&&(n=n.host);F(n)&&["html","body"].indexOf(Q(n))<0;){var r=it(n);if(r.transform!=="none"||r.perspective!=="none"||r.contain==="paint"||["transform","perspective"].indexOf(r.willChange)!==-1||t&&r.willChange==="filter"||t&&r.filter&&r.filter!=="none")return n;n=n.parentNode}return null}function Kt(i){for(var t=U(i),e=as(i);e&&nr(e)&&it(e).position==="static";)e=as(e);return e&&(Q(e)==="html"||Q(e)==="body"&&it(e).position==="static")?t:e||rr(i)||t}function Ke(i){return["top","bottom"].indexOf(i)>=0?"x":"y"}function Ft(i,t,e){return ft(i,oe(t,e))}function or(i,t,e){var s=Ft(i,t,e);return s>e?e:s}function ls(){return{top:0,right:0,bottom:0,left:0}}function cs(i){return Object.assign({},ls(),i)}function ds(i,t){return t.reduce(function(e,s){return e[s]=i,e},{})}var ar=function(t,e){return t=typeof t=="function"?t(Object.assign({},e.rects,{placement:e.placement})):t,cs(typeof t!="number"?t:ds(t,Ot))};function lr(i){var t,e=i.state,s=i.name,n=i.options,r=e.elements.arrow,o=e.modifiersData.popperOffsets,a=Z(e.placement),l=Ke(a),u=[H,j].indexOf(a)>=0,c=u?"height":"width";if(!(!r||!o)){var f=ar(n.padding,e),v=Ye(r),g=l==="y"?M:H,O=l==="y"?B:j,T=e.rects.reference[c]+e.rects.reference[l]-o[l]-e.rects.popper[c],y=o[l]-e.rects.reference[l],D=Kt(r),I=D?l==="y"?D.clientHeight||0:D.clientWidth||0:0,m=T/2-y/2,p=f[g],_=I-v[c]-f[O],b=I/2-v[c]/2+m,w=Ft(p,b,_),C=l;e.modifiersData[s]=(t={},t[C]=w,t.centerOffset=w-b,t)}}function cr(i){var t=i.state,e=i.options,s=e.element,n=s===void 0?"[data-popper-arrow]":s;n!=null&&(typeof n=="string"&&(n=t.elements.popper.querySelector(n),!n)||os(t.elements.popper,n)&&(t.elements.arrow=n))}const us={name:"arrow",enabled:!0,phase:"main",fn:lr,effect:cr,requires:["popperOffsets"],requiresIfExists:["preventOverflow"]};function $t(i){return i.split("-")[1]}var dr={top:"auto",right:"auto",bottom:"auto",left:"auto"};function ur(i,t){var e=i.x,s=i.y,n=t.devicePixelRatio||1;return{x:St(e*n)/n||0,y:St(s*n)/n||0}}function hs(i){var t,e=i.popper,s=i.popperRect,n=i.placement,r=i.variation,o=i.offsets,a=i.position,l=i.gpuAcceleration,u=i.adaptive,c=i.roundOffsets,f=i.isFixed,v=o.x,g=v===void 0?0:v,O=o.y,T=O===void 0?0:O,y=typeof c=="function"?c({x:g,y:T}):{x:g,y:T};g=y.x,T=y.y;var D=o.hasOwnProperty("x"),I=o.hasOwnProperty("y"),m=H,p=M,_=window;if(u){var b=Kt(e),w="clientHeight",C="clientWidth";if(b===U(e)&&(b=rt(e),it(b).position!=="static"&&a==="absolute"&&(w="scrollHeight",C="scrollWidth")),b=b,n===M||(n===H||n===j)&&r===Dt){p=B;var A=f&&b===_&&_.visualViewport?_.visualViewport.height:b[w];T-=A-s.height,T*=l?1:-1}if(n===H||(n===M||n===B)&&r===Dt){m=j;var N=f&&b===_&&_.visualViewport?_.visualViewport.width:b[C];g-=N-s.width,g*=l?1:-1}}var $=Object.assign({position:a},u&&dr),V=c===!0?ur({x:g,y:T},U(e)):{x:g,y:T};if(g=V.x,T=V.y,l){var k;return Object.assign({},$,(k={},k[p]=I?"0":"",k[m]=D?"0":"",k.transform=(_.devicePixelRatio||1)<=1?"translate("+g+"px, "+T+"px)":"translate3d("+g+"px, "+T+"px, 0)",k))}return Object.assign({},$,(t={},t[p]=I?T+"px":"",t[m]=D?g+"px":"",t.transform="",t))}function hr(i){var t=i.state,e=i.options,s=e.gpuAcceleration,n=s===void 0?!0:s,r=e.adaptive,o=r===void 0?!0:r,a=e.roundOffsets,l=a===void 0?!0:a,u={placement:Z(t.placement),variation:$t(t.placement),popper:t.elements.popper,popperRect:t.rects.popper,gpuAcceleration:n,isFixed:t.options.strategy==="fixed"};t.modifiersData.popperOffsets!=null&&(t.styles.popper=Object.assign({},t.styles.popper,hs(Object.assign({},u,{offsets:t.modifiersData.popperOffsets,position:t.options.strategy,adaptive:o,roundOffsets:l})))),t.modifiersData.arrow!=null&&(t.styles.arrow=Object.assign({},t.styles.arrow,hs(Object.assign({},u,{offsets:t.modifiersData.arrow,position:"absolute",adaptive:!1,roundOffsets:l})))),t.attributes.popper=Object.assign({},t.attributes.popper,{"data-popper-placement":t.placement})}const Fe={name:"computeStyles",enabled:!0,phase:"beforeWrite",fn:hr,data:{}};var le={passive:!0};function fr(i){var t=i.state,e=i.instance,s=i.options,n=s.scroll,r=n===void 0?!0:n,o=s.resize,a=o===void 0?!0:o,l=U(t.elements.popper),u=[].concat(t.scrollParents.reference,t.scrollParents.popper);return r&&u.forEach(function(c){c.addEventListener("scroll",e.update,le)}),a&&l.addEventListener("resize",e.update,le),function(){r&&u.forEach(function(c){c.removeEventListener("scroll",e.update,le)}),a&&l.removeEventListener("resize",e.update,le)}}const ze={name:"eventListeners",enabled:!0,phase:"write",fn:function(){},effect:fr,data:{}};var pr={left:"right",right:"left",bottom:"top",top:"bottom"};function ce(i){return i.replace(/left|right|bottom|top/g,function(t){return pr[t]})}var _r={start:"end",end:"start"};function fs(i){return i.replace(/start|end/g,function(t){return _r[t]})}function qe(i){var t=U(i),e=t.pageXOffset,s=t.pageYOffset;return{scrollLeft:e,scrollTop:s}}function Xe(i){return Lt(rt(i)).left+qe(i).scrollLeft}function gr(i,t){var e=U(i),s=rt(i),n=e.visualViewport,r=s.clientWidth,o=s.clientHeight,a=0,l=0;if(n){r=n.width,o=n.height;var u=rs();(u||!u&&t==="fixed")&&(a=n.offsetLeft,l=n.offsetTop)}return{width:r,height:o,x:a+Xe(i),y:l}}function mr(i){var t,e=rt(i),s=qe(i),n=(t=i.ownerDocument)==null?void 0:t.body,r=ft(e.scrollWidth,e.clientWidth,n?n.scrollWidth:0,n?n.clientWidth:0),o=ft(e.scrollHeight,e.clientHeight,n?n.scrollHeight:0,n?n.clientHeight:0),a=-s.scrollLeft+Xe(i),l=-s.scrollTop;return it(n||e).direction==="rtl"&&(a+=ft(e.clientWidth,n?n.clientWidth:0)-r),{width:r,height:o,x:a,y:l}}function Ge(i){var t=it(i),e=t.overflow,s=t.overflowX,n=t.overflowY;return/auto|scroll|overlay|hidden/.test(e+n+s)}function ps(i){return["html","body","#document"].indexOf(Q(i))>=0?i.ownerDocument.body:F(i)&&Ge(i)?i:ps(ae(i))}function zt(i,t){var e;t===void 0&&(t=[]);var s=ps(i),n=s===((e=i.ownerDocument)==null?void 0:e.body),r=U(s),o=n?[r].concat(r.visualViewport||[],Ge(s)?s:[]):s,a=t.concat(o);return n?a:a.concat(zt(ae(o)))}function Qe(i){return Object.assign({},i,{left:i.x,top:i.y,right:i.x+i.width,bottom:i.y+i.height})}function Er(i,t){var e=Lt(i,!1,t==="fixed");return e.top=e.top+i.clientTop,e.left=e.left+i.clientLeft,e.bottom=e.top+i.clientHeight,e.right=e.left+i.clientWidth,e.width=i.clientWidth,e.height=i.clientHeight,e.x=e.left,e.y=e.top,e}function _s(i,t,e){return t===He?Qe(gr(i,e)):ht(t)?Er(t,e):Qe(mr(rt(i)))}function vr(i){var t=zt(ae(i)),e=["absolute","fixed"].indexOf(it(i).position)>=0,s=e&&F(i)?Kt(i):i;return ht(s)?t.filter(function(n){return ht(n)&&os(n,s)&&Q(n)!=="body"}):[]}function br(i,t,e,s){var n=t==="clippingParents"?vr(i):[].concat(t),r=[].concat(n,[e]),o=r[0],a=r.reduce(function(l,u){var c=_s(i,u,s);return l.top=ft(c.top,l.top),l.right=oe(c.right,l.right),l.bottom=oe(c.bottom,l.bottom),l.left=ft(c.left,l.left),l},_s(i,o,s));return a.width=a.right-a.left,a.height=a.bottom-a.top,a.x=a.left,a.y=a.top,a}function gs(i){var t=i.reference,e=i.element,s=i.placement,n=s?Z(s):null,r=s?$t(s):null,o=t.x+t.width/2-e.width/2,a=t.y+t.height/2-e.height/2,l;switch(n){case M:l={x:o,y:t.y-e.height};break;case B:l={x:o,y:t.y+t.height};break;case j:l={x:t.x+t.width,y:a};break;case H:l={x:t.x-e.width,y:a};break;default:l={x:t.x,y:t.y}}var u=n?Ke(n):null;if(u!=null){var c=u==="y"?"height":"width";switch(r){case ut:l[u]=l[u]-(t[c]/2-e[c]/2);break;case Dt:l[u]=l[u]+(t[c]/2-e[c]/2);break}}return l}function It(i,t){t===void 0&&(t={});var e=t,s=e.placement,n=s===void 0?i.placement:s,r=e.strategy,o=r===void 0?i.strategy:r,a=e.boundary,l=a===void 0?zi:a,u=e.rootBoundary,c=u===void 0?He:u,f=e.elementContext,v=f===void 0?Nt:f,g=e.altBoundary,O=g===void 0?!1:g,T=e.padding,y=T===void 0?0:T,D=cs(typeof y!="number"?y:ds(y,Ot)),I=v===Nt?qi:Nt,m=i.rects.popper,p=i.elements[O?I:v],_=br(ht(p)?p:p.contextElement||rt(i.elements.popper),l,c,o),b=Lt(i.elements.reference),w=gs({reference:b,element:m,strategy:"absolute",placement:n}),C=Qe(Object.assign({},m,w)),A=v===Nt?C:b,N={top:_.top-A.top+D.top,bottom:A.bottom-_.bottom+D.bottom,left:_.left-A.left+D.left,right:A.right-_.right+D.right},$=i.modifiersData.offset;if(v===Nt&&$){var V=$[n];Object.keys(N).forEach(function(k){var vt=[j,B].indexOf(k)>=0?1:-1,bt=[M,B].indexOf(k)>=0?"y":"x";N[k]+=V[bt]*vt})}return N}function wr(i,t){t===void 0&&(t={});var e=t,s=e.placement,n=e.boundary,r=e.rootBoundary,o=e.padding,a=e.flipVariations,l=e.allowedAutoPlacements,u=l===void 0?We:l,c=$t(s),f=c?a?Ve:Ve.filter(function(O){return $t(O)===c}):Ot,v=f.filter(function(O){return u.indexOf(O)>=0});v.length===0&&(v=f);var g=v.reduce(function(O,T){return O[T]=It(i,{placement:T,boundary:n,rootBoundary:r,padding:o})[Z(T)],O},{});return Object.keys(g).sort(function(O,T){return g[O]-g[T]})}function Tr(i){if(Z(i)===re)return[];var t=ce(i);return[fs(i),t,fs(t)]}function Ar(i){var t=i.state,e=i.options,s=i.name;if(!t.modifiersData[s]._skip){for(var n=e.mainAxis,r=n===void 0?!0:n,o=e.altAxis,a=o===void 0?!0:o,l=e.fallbackPlacements,u=e.padding,c=e.boundary,f=e.rootBoundary,v=e.altBoundary,g=e.flipVariations,O=g===void 0?!0:g,T=e.allowedAutoPlacements,y=t.options.placement,D=Z(y),I=D===y,m=l||(I||!O?[ce(y)]:Tr(y)),p=[y].concat(m).reduce(function(jt,lt){return jt.concat(Z(lt)===re?wr(t,{placement:lt,boundary:c,rootBoundary:f,padding:u,flipVariations:O,allowedAutoPlacements:T}):lt)},[]),_=t.rects.reference,b=t.rects.popper,w=new Map,C=!0,A=p[0],N=0;N=0,bt=vt?"width":"height",K=It(t,{placement:$,boundary:c,rootBoundary:f,altBoundary:v,padding:u}),G=vt?k?j:H:k?B:M;_[bt]>b[bt]&&(G=ce(G));var De=ce(G),wt=[];if(r&&wt.push(K[V]<=0),a&&wt.push(K[G]<=0,K[De]<=0),wt.every(function(jt){return jt})){A=$,C=!1;break}w.set($,wt)}if(C)for(var Ne=O?3:1,Di=function(lt){var ie=p.find(function(Le){var Tt=w.get(Le);if(Tt)return Tt.slice(0,lt).every(function(Ni){return Ni})});if(ie)return A=ie,"break"},ee=Ne;ee>0;ee--){var Se=Di(ee);if(Se==="break")break}t.placement!==A&&(t.modifiersData[s]._skip=!0,t.placement=A,t.reset=!0)}}const ms={name:"flip",enabled:!0,phase:"main",fn:Ar,requiresIfExists:["offset"],data:{_skip:!1}};function Es(i,t,e){return e===void 0&&(e={x:0,y:0}),{top:i.top-t.height-e.y,right:i.right-t.width+e.x,bottom:i.bottom-t.height+e.y,left:i.left-t.width-e.x}}function vs(i){return[M,j,B,H].some(function(t){return i[t]>=0})}function yr(i){var t=i.state,e=i.name,s=t.rects.reference,n=t.rects.popper,r=t.modifiersData.preventOverflow,o=It(t,{elementContext:"reference"}),a=It(t,{altBoundary:!0}),l=Es(o,s),u=Es(a,n,r),c=vs(l),f=vs(u);t.modifiersData[e]={referenceClippingOffsets:l,popperEscapeOffsets:u,isReferenceHidden:c,hasPopperEscaped:f},t.attributes.popper=Object.assign({},t.attributes.popper,{"data-popper-reference-hidden":c,"data-popper-escaped":f})}const bs={name:"hide",enabled:!0,phase:"main",requiresIfExists:["preventOverflow"],fn:yr};function Cr(i,t,e){var s=Z(i),n=[H,M].indexOf(s)>=0?-1:1,r=typeof e=="function"?e(Object.assign({},t,{placement:i})):e,o=r[0],a=r[1];return o=o||0,a=(a||0)*n,[H,j].indexOf(s)>=0?{x:a,y:o}:{x:o,y:a}}function Or(i){var t=i.state,e=i.options,s=i.name,n=e.offset,r=n===void 0?[0,0]:n,o=We.reduce(function(c,f){return c[f]=Cr(f,t.rects,r),c},{}),a=o[t.placement],l=a.x,u=a.y;t.modifiersData.popperOffsets!=null&&(t.modifiersData.popperOffsets.x+=l,t.modifiersData.popperOffsets.y+=u),t.modifiersData[s]=o}const ws={name:"offset",enabled:!0,phase:"main",requires:["popperOffsets"],fn:Or};function Dr(i){var t=i.state,e=i.name;t.modifiersData[e]=gs({reference:t.rects.reference,element:t.rects.popper,strategy:"absolute",placement:t.placement})}const Ze={name:"popperOffsets",enabled:!0,phase:"read",fn:Dr,data:{}};function Nr(i){return i==="x"?"y":"x"}function Sr(i){var t=i.state,e=i.options,s=i.name,n=e.mainAxis,r=n===void 0?!0:n,o=e.altAxis,a=o===void 0?!1:o,l=e.boundary,u=e.rootBoundary,c=e.altBoundary,f=e.padding,v=e.tether,g=v===void 0?!0:v,O=e.tetherOffset,T=O===void 0?0:O,y=It(t,{boundary:l,rootBoundary:u,padding:f,altBoundary:c}),D=Z(t.placement),I=$t(t.placement),m=!I,p=Ke(D),_=Nr(p),b=t.modifiersData.popperOffsets,w=t.rects.reference,C=t.rects.popper,A=typeof T=="function"?T(Object.assign({},t.rects,{placement:t.placement})):T,N=typeof A=="number"?{mainAxis:A,altAxis:A}:Object.assign({mainAxis:0,altAxis:0},A),$=t.modifiersData.offset?t.modifiersData.offset[t.placement]:null,V={x:0,y:0};if(b){if(r){var k,vt=p==="y"?M:H,bt=p==="y"?B:j,K=p==="y"?"height":"width",G=b[p],De=G+y[vt],wt=G-y[bt],Ne=g?-C[K]/2:0,Di=I===ut?w[K]:C[K],ee=I===ut?-C[K]:-w[K],Se=t.elements.arrow,jt=g&&Se?Ye(Se):{width:0,height:0},lt=t.modifiersData["arrow#persistent"]?t.modifiersData["arrow#persistent"].padding:ls(),ie=lt[vt],Le=lt[bt],Tt=Ft(0,w[K],jt[K]),Ni=m?w[K]/2-Ne-Tt-ie-N.mainAxis:Di-Tt-ie-N.mainAxis,Pl=m?-w[K]/2+Ne+Tt+Le+N.mainAxis:ee+Tt+Le+N.mainAxis,Si=t.elements.arrow&&Kt(t.elements.arrow),Ml=Si?p==="y"?Si.clientTop||0:Si.clientLeft||0:0,In=(k=$==null?void 0:$[p])!=null?k:0,Hl=G+Ni-In-Ml,Vl=G+Pl-In,Rn=Ft(g?oe(De,Hl):De,G,g?ft(wt,Vl):wt);b[p]=Rn,V[p]=Rn-G}if(a){var kn,Wl=p==="x"?M:H,Bl=p==="x"?B:j,At=b[_],$e=_==="y"?"height":"width",xn=At+y[Wl],Pn=At-y[Bl],Li=[M,H].indexOf(D)!==-1,Mn=(kn=$==null?void 0:$[_])!=null?kn:0,Hn=Li?xn:At-w[$e]-C[$e]-Mn+N.altAxis,Vn=Li?At+w[$e]+C[$e]-Mn-N.altAxis:Pn,Wn=g&&Li?or(Hn,At,Vn):Ft(g?Hn:xn,At,g?Vn:Pn);b[_]=Wn,V[_]=Wn-At}t.modifiersData[s]=V}}const Ts={name:"preventOverflow",enabled:!0,phase:"main",fn:Sr,requiresIfExists:["offset"]};function Lr(i){return{scrollLeft:i.scrollLeft,scrollTop:i.scrollTop}}function $r(i){return i===U(i)||!F(i)?qe(i):Lr(i)}function Ir(i){var t=i.getBoundingClientRect(),e=St(t.width)/i.offsetWidth||1,s=St(t.height)/i.offsetHeight||1;return e!==1||s!==1}function Rr(i,t,e){e===void 0&&(e=!1);var s=F(t),n=F(t)&&Ir(t),r=rt(t),o=Lt(i,n,e),a={scrollLeft:0,scrollTop:0},l={x:0,y:0};return(s||!s&&!e)&&((Q(t)!=="body"||Ge(r))&&(a=$r(t)),F(t)?(l=Lt(t,!0),l.x+=t.clientLeft,l.y+=t.clientTop):r&&(l.x=Xe(r))),{x:o.left+a.scrollLeft-l.x,y:o.top+a.scrollTop-l.y,width:o.width,height:o.height}}function kr(i){var t=new Map,e=new Set,s=[];i.forEach(function(r){t.set(r.name,r)});function n(r){e.add(r.name);var o=[].concat(r.requires||[],r.requiresIfExists||[]);o.forEach(function(a){if(!e.has(a)){var l=t.get(a);l&&n(l)}}),s.push(r)}return i.forEach(function(r){e.has(r.name)||n(r)}),s}function xr(i){var t=kr(i);return ns.reduce(function(e,s){return e.concat(t.filter(function(n){return n.phase===s}))},[])}function Pr(i){var t;return function(){return t||(t=new Promise(function(e){Promise.resolve().then(function(){t=void 0,e(i())})})),t}}function Mr(i){var t=i.reduce(function(e,s){var n=e[s.name];return e[s.name]=n?Object.assign({},n,s,{options:Object.assign({},n.options,s.options),data:Object.assign({},n.data,s.data)}):s,e},{});return Object.keys(t).map(function(e){return t[e]})}var As={placement:"bottom",modifiers:[],strategy:"absolute"};function ys(){for(var i=arguments.length,t=new Array(i),e=0;e`-${t.toLowerCase()}`)}const E={setDataAttribute(i,t,e){i.setAttribute(`data-twe-${ei(t)}`,e)},removeDataAttribute(i,t){i.removeAttribute(`data-twe-${ei(t)}`)},getDataAttributes(i){if(!i)return{};const t={};return Object.keys(i.dataset).filter(e=>e.startsWith("twe")).forEach(e=>{if(e.startsWith("tweClass"))return;let s=e.replace(/^twe/,"");s=s.charAt(0).toLowerCase()+s.slice(1,s.length),t[s]=ti(i.dataset[e])}),t},getDataClassAttributes(i){if(!i)return{};const t={...i.dataset};return Object.keys(t).filter(e=>e.startsWith("tweClass")).forEach(e=>{let s=e.replace(/^tweClass/,"");s=s.charAt(0).toLowerCase()+s.slice(1,s.length),t[s]=ti(t[e])}),t},getDataAttribute(i,t){return ti(i.getAttribute(`data-twe-${ei(t)}`))},offset(i){const t=i.getBoundingClientRect();return{top:t.top+document.body.scrollTop,left:t.left+document.body.scrollLeft}},position(i){return{top:i.offsetTop,left:i.offsetLeft}},style(i,t){Object.assign(i.style,t)},toggleClass(i,t){i&&ii(t).forEach(e=>{i.classList.contains(e)?i.classList.remove(e):i.classList.add(e)})},addClass(i,t){ii(t).forEach(e=>!i.classList.contains(e)&&i.classList.add(e))},addStyle(i,t){Object.keys(t).forEach(e=>{i.style[e]=t[e]})},removeClass(i,t){ii(t).forEach(e=>i.classList.contains(e)&&i.classList.remove(e))},hasClass(i,t){return i.classList.contains(t)},maxOffset(i){const t=i.getBoundingClientRect();return{top:t.top+Math.max(document.body.scrollTop,document.documentElement.scrollTop,window.scrollY),left:t.left+Math.max(document.body.scrollLeft,document.documentElement.scrollLeft,window.scrollX)}}};function ii(i){return typeof i=="string"?i.split(" "):Array.isArray(i)?i:!1}const jr=3,h={closest(i,t){return i.closest(t)},matches(i,t){return i.matches(t)},find(i,t=document.documentElement){return[].concat(...Element.prototype.querySelectorAll.call(t,i))},findOne(i,t=document.documentElement){return Element.prototype.querySelector.call(t,i)},children(i,t){return[].concat(...i.children).filter(s=>s.matches(t))},parents(i,t){const e=[];let s=i.parentNode;for(;s&&s.nodeType===Node.ELEMENT_NODE&&s.nodeType!==jr;)this.matches(s,t)&&e.push(s),s=s.parentNode;return e},prev(i,t){let e=i.previousElementSibling;for(;e;){if(e.matches(t))return[e];e=e.previousElementSibling}return[]},next(i,t){let e=i.nextElementSibling;for(;e;){if(this.matches(e,t))return[e];e=e.nextElementSibling}return[]},focusableChildren(i){const t=["a","button","input","textarea","select","details","[tabindex]",'[contenteditable="true"]'].map(e=>`${e}:not([tabindex^="-"])`).join(", ");return this.find(t,i).filter(e=>!ct(e)&&Ct(e))}},si="dropdown",pt=".twe.dropdown",ni=".data-api",ue="Escape",Os="Space",Ds="Tab",ri="ArrowUp",he="ArrowDown",Ur=2,Yr=new RegExp(`${ri}|${he}|${ue}`),Kr=`hide${pt}`,Fr=`hidden${pt}`,zr=`show${pt}`,qr=`shown${pt}`,Xr=`click${pt}${ni}`,Ns=`keydown${pt}${ni}`,Gr=`keyup${pt}${ni}`,ot="show",Qr="dropup",Zr="dropend",Jr="dropstart",to="[data-twe-navbar-ref]",fe="[data-twe-dropdown-toggle-ref]",oi="[data-twe-dropdown-menu-ref]",eo="[data-twe-navbar-nav-ref]",io="[data-twe-dropdown-menu-ref] [data-twe-dropdown-item-ref]:not(.disabled):not(:disabled)",so=W()?"top-end":"top-start",no=W()?"top-start":"top-end",ro=W()?"bottom-end":"bottom-start",oo=W()?"bottom-start":"bottom-end",ao=W()?"left-start":"right-start",lo=W()?"right-start":"left-start",co=[{opacity:"0"},{opacity:"1"}],uo=[{opacity:"1"},{opacity:"0"}],Ss={iterations:1,easing:"ease",fill:"both"},ho={offset:[0,2],boundary:"clippingParents",reference:"toggle",display:"dynamic",popperConfig:null,autoClose:!0,dropdownAnimation:"on",animationDuration:550},fo={offset:"(array|string|function)",boundary:"(string|element)",reference:"(string|element|object)",display:"string",popperConfig:"(null|object|function)",autoClose:"(boolean|string)",dropdownAnimation:"string",animationDuration:"number"};class z extends et{constructor(t,e){super(t),this._popper=null,this._config=this._getConfig(e),this._menu=this._getMenuElement(),this._inNavbar=this._detectNavbar(),this._fadeOutAnimate=null;const s=window.matchMedia("(prefers-reduced-motion: reduce)").matches;this._animationCanPlay=this._config.dropdownAnimation==="on"&&!s,this._didInit=!1,this._init()}static get Default(){return ho}static get DefaultType(){return fo}static get NAME(){return si}toggle(){return this._isShown()?this.hide():this.show()}show(){if(ct(this._element)||this._isShown(this._menu))return;const t={relatedTarget:this._element};if(d.trigger(this._element,zr,t).defaultPrevented)return;const s=z.getParentFromElement(this._element);this._inNavbar?E.setDataAttribute(this._menu,"popper","none"):this._createPopper(s),"ontouchstart"in document.documentElement&&!s.closest(eo)&&[].concat(...document.body.children).forEach(n=>d.on(n,"mouseover",se)),this._element.focus(),this._element.setAttribute("aria-expanded",!0),this._menu.setAttribute(`data-twe-dropdown-${ot}`,""),this._animationCanPlay&&this._menu.animate(co,{...Ss,duration:this._config.animationDuration}),this._element.setAttribute(`data-twe-dropdown-${ot}`,""),setTimeout(()=>{d.trigger(this._element,qr,t)},this._animationCanPlay?this._config.animationDuration:0)}hide(){if(ct(this._element)||!this._isShown(this._menu))return;const t={relatedTarget:this._element};this._completeHide(t)}dispose(){this._popper&&this._popper.destroy(),super.dispose()}update(){this._inNavbar=this._detectNavbar(),this._popper&&this._popper.update()}_init(){this._didInit||(d.on(document,Ns,fe,z.dataApiKeydownHandler),d.on(document,Ns,oi,z.dataApiKeydownHandler),d.on(document,Xr,z.clearMenus),d.on(document,Gr,z.clearMenus),this._didInit=!0)}_completeHide(t){this._fadeOutAnimate&&this._fadeOutAnimate.playState==="running"||d.trigger(this._element,Kr,t).defaultPrevented||("ontouchstart"in document.documentElement&&[].concat(...document.body.children).forEach(s=>d.off(s,"mouseover",se)),this._animationCanPlay&&(this._fadeOutAnimate=this._menu.animate(uo,{...Ss,duration:this._config.animationDuration})),setTimeout(()=>{this._popper&&this._popper.destroy(),this._menu.removeAttribute(`data-twe-dropdown-${ot}`),this._element.removeAttribute(`data-twe-dropdown-${ot}`),this._element.setAttribute("aria-expanded","false"),E.removeDataAttribute(this._menu,"popper"),d.trigger(this._element,Fr,t)},this._animationCanPlay?this._config.animationDuration:0))}_getConfig(t){if(t={...this.constructor.Default,...E.getDataAttributes(this._element),...t},x(si,t,this.constructor.DefaultType),typeof t.reference=="object"&&!yt(t.reference)&&typeof t.reference.getBoundingClientRect!="function")throw new TypeError(`${si.toUpperCase()}: Option "reference" provided type "object" without a required "getBoundingClientRect" method.`);return t}_createPopper(t){if(typeof Cs>"u")throw new TypeError("Bootstrap's dropdowns require Popper (https://popper.js.org)");let e=this._element;this._config.reference==="parent"?e=t:yt(this._config.reference)?e=nt(this._config.reference):typeof this._config.reference=="object"&&(e=this._config.reference);const s=this._getPopperConfig(),n=s.modifiers.find(r=>r.name==="applyStyles"&&r.enabled===!1);this._popper=Je(e,this._menu,s),n&&E.setDataAttribute(this._menu,"popper","static")}_isShown(t=this._element){return t.dataset[`tweDropdown${ot.charAt(0).toUpperCase()+ot.slice(1)}`]===""}_getMenuElement(){return h.next(this._element,oi)[0]}_getPlacement(){const t=this._element.parentNode;if(t.dataset.tweDropdownPosition===Zr)return ao;if(t.dataset.tweDropdownPosition===Jr)return lo;const e=t.dataset.tweDropdownAlignment==="end";return t.dataset.tweDropdownPosition===Qr?e?no:so:e?oo:ro}_detectNavbar(){return this._element.closest(to)!==null}_getOffset(){const{offset:t}=this._config;return typeof t=="string"?t.split(",").map(e=>Number.parseInt(e,10)):typeof t=="function"?e=>t(e,this._element):t}_getPopperConfig(){const t={placement:this._getPlacement(),modifiers:[{name:"preventOverflow",options:{boundary:this._config.boundary}},{name:"offset",options:{offset:this._getOffset()}}]};return this._config.display==="static"&&(t.modifiers=[{name:"applyStyles",enabled:!1}]),{...t,...typeof this._config.popperConfig=="function"?this._config.popperConfig(t):this._config.popperConfig}}_selectMenuItem({key:t,target:e}){const s=h.find(io,this._menu).filter(Ct);s.length&&Hi(s,e,t===he,!s.includes(e)).focus()}static jQueryInterface(t){return this.each(function(){const e=z.getOrCreateInstance(this,t);if(typeof t=="string"){if(typeof e[t]>"u")throw new TypeError(`No method named "${t}"`);e[t]()}})}static clearMenus(t){if(t&&(t.button===Ur||t.type==="keyup"&&t.key!==Ds))return;const e=h.find(fe);for(let s=0,n=e.length;sc===this._element);l!==null&&u.length&&(this._selector=l,this._triggerArray.push(a))}this._initializeChildren(),this._config.parent||this._addAriaAndCollapsedClass(this._triggerArray,this._isShown()),this._config.toggle&&this.toggle()}static get Default(){return $s}static get NAME(){return ai}toggle(){this._isShown()?this.hide():this.show()}show(){if(this._isTransitioning||this._isShown())return;let t=[],e;if(this._config.parent){const c=h.find(Rs,this._config.parent);t=h.find(To,this._config.parent).filter(f=>!c.includes(f))}const s=h.findOne(this._selector);if(t.length){const c=t.find(f=>s!==f);if(e=c?kt.getInstance(c):null,e&&e._isTransitioning)return}if(d.trigger(this._element,_o).defaultPrevented)return;t.forEach(c=>{s!==c&&kt.getOrCreateInstance(c,{toggle:!1}).hide(),e||R.setData(c,Ls,null)});const r=this._getDimension(),o=r==="height"?this._classes.collapsing:this._classes.collapsingHorizontal;E.removeClass(this._element,this._classes.visible),E.removeClass(this._element,this._classes.hidden),E.addClass(this._element,o),this._element.removeAttribute(Rt),this._element.setAttribute(_e,""),this._element.style[r]=0,this._addAriaAndCollapsedClass(this._triggerArray,!0),this._isTransitioning=!0;const a=()=>{this._isTransitioning=!1,E.removeClass(this._element,this._classes.hidden),E.removeClass(this._element,o),E.addClass(this._element,this._classes.visible),this._element.removeAttribute(_e),this._element.setAttribute(Rt,""),this._element.setAttribute(li,""),this._element.style[r]="",d.trigger(this._element,go)},u=`scroll${r[0].toUpperCase()+r.slice(1)}`;this._queueCallback(a,this._element,!0),this._element.style[r]=`${this._element[u]}px`}hide(){if(this._isTransitioning||!this._isShown()||d.trigger(this._element,mo).defaultPrevented)return;const e=this._getDimension(),s=e==="height"?this._classes.collapsing:this._classes.collapsingHorizontal;this._element.style[e]=`${this._element.getBoundingClientRect()[e]}px`,Ut(this._element),E.addClass(this._element,s),E.removeClass(this._element,this._classes.visible),E.removeClass(this._element,this._classes.hidden),this._element.setAttribute(_e,""),this._element.removeAttribute(Rt),this._element.removeAttribute(li);const n=this._triggerArray.length;for(let o=0;o{this._isTransitioning=!1,E.removeClass(this._element,s),E.addClass(this._element,this._classes.visible),E.addClass(this._element,this._classes.hidden),this._element.removeAttribute(_e),this._element.setAttribute(Rt,""),d.trigger(this._element,Eo)};this._element.style[e]="",this._queueCallback(r,this._element,!0)}_isShown(t=this._element){return t.hasAttribute(li)}_getConfig(t){return t={...$s,...E.getDataAttributes(this._element),...t},t.toggle=!!t.toggle,t.parent=nt(t.parent),x(ai,t,po),t}_getClasses(t){const e=E.getDataClassAttributes(this._element);return t={...Ao,...e,...t},x(ai,t,yo),t}_getDimension(){return this._element.hasAttribute(vo)?bo:wo}_initializeChildren(){if(!this._config.parent)return;const t=h.find(Rs,this._config.parent);h.find(ks,this._config.parent).filter(e=>!t.includes(e)).forEach(e=>{const s=st(e);s&&this._addAriaAndCollapsedClass([e],this._isShown(s))})}_addAriaAndCollapsedClass(t,e){t.length&&t.forEach(s=>{e?s.removeAttribute(Is):s.setAttribute(`${Is}`,""),s.setAttribute("aria-expanded",e)})}static jQueryInterface(t){return this.each(function(){const e={};typeof t=="string"&&/show|hide/.test(t)&&(e.toggle=!1);const s=kt.getOrCreateInstance(this,e);if(typeof t=="string"){if(typeof s[t]>"u")throw new TypeError(`No method named "${t}"`);s[t]()}})}}const xs=".fixed-top, .fixed-bottom, .is-fixed, .sticky-top",Ps=".sticky-top";class ci{constructor(){this._element=document.body}getWidth(){const t=document.documentElement.clientWidth;return Math.abs(window.innerWidth-t)}hide(){const t=this.getWidth();this._disableOverFlow(),this._setElementAttributes(this._element,"paddingRight",e=>e+t),this._setElementAttributes(xs,"paddingRight",e=>e+t),this._setElementAttributes(Ps,"marginRight",e=>e-t)}_disableOverFlow(){this._saveInitialAttribute(this._element,"overflow"),this._element.style.overflow="hidden"}_setElementAttributes(t,e,s){const n=this.getWidth(),r=o=>{if(o!==this._element&&window.innerWidth>o.clientWidth+n)return;this._saveInitialAttribute(o,e);const a=window.getComputedStyle(o)[e];o.style[e]=`${s(Number.parseFloat(a))}px`};this._applyManipulationCallback(t,r)}reset(){this._resetElementAttributes(this._element,"overflow"),this._resetElementAttributes(this._element,"paddingRight"),this._resetElementAttributes(xs,"paddingRight"),this._resetElementAttributes(Ps,"marginRight")}_saveInitialAttribute(t,e){const s=t.style[e];s&&E.setDataAttribute(t,e,s)}_resetElementAttributes(t,e){const s=n=>{const r=E.getDataAttribute(n,e);typeof r>"u"?n.style.removeProperty(e):(E.removeDataAttribute(n,e),n.style[e]=r)};this._applyManipulationCallback(t,s)}_applyManipulationCallback(t,e){yt(t)?e(t):h.find(t,this._element).forEach(e)}isOverflowing(){return this.getWidth()>0}}const Co={isVisible:!0,isAnimated:!1,rootElement:"body",clickCallback:null,backdropClasses:null},Oo={isVisible:"boolean",isAnimated:"boolean",rootElement:"(element|string)",clickCallback:"(function|null)",backdropClasses:"(array|string|null)"},Ms="backdrop",Hs=`mousedown.twe.${Ms}`;class Vs{constructor(t){this._config=this._getConfig(t),this._isAppended=!1,this._element=null}show(t){if(!this._config.isVisible){dt(t);return}this._append(),this._config.isAnimated&&Ut(this._getElement());const e=this._config.backdropClasses||["opacity-50","transition-all","duration-300","ease-in-out","fixed","top-0","left-0","z-[1040]","bg-black","w-screen","h-screen"];E.removeClass(this._getElement(),"opacity-0"),E.addClass(this._getElement(),e),this._element.setAttribute("data-twe-backdrop-show",""),this._emulateAnimation(()=>{dt(t)})}hide(t){if(!this._config.isVisible){dt(t);return}this._element.removeAttribute("data-twe-backdrop-show"),this._getElement().classList.add("opacity-0"),this._getElement().classList.remove("opacity-50"),this._emulateAnimation(()=>{this.dispose(),dt(t)})}update(t={}){this._config=this._getConfig({...this._config,...t})}_getElement(){if(!this._element){const t=document.createElement("div");this._element=t}return this._element}_getConfig(t){return t={...Co,...typeof t=="object"?t:{}},t.rootElement=nt(t.rootElement),x(Ms,t,Oo),t}_append(){this._isAppended||(this._config.rootElement.append(this._getElement()),d.on(this._getElement(),Hs,()=>{dt(this._config.clickCallback)}),this._isAppended=!0)}dispose(){this._isAppended&&(d.off(this._element,Hs),this._element.remove(),this._isAppended=!1)}_emulateAnimation(t){Mi(t,this._getElement(),this._config.isAnimated)}}class Ws{constructor(t,e={},s){this._element=t,this._toggler=s,this._event=e.event||"blur",this._condition=e.condition||(()=>!0),this._selector=e.selector||'button, a, input, select, textarea, [tabindex]:not([tabindex="-1"])',this._onlyVisible=e.onlyVisible||!1,this._focusableElements=[],this._firstElement=null,this._lastElement=null,this.handler=n=>{this._condition(n)&&!n.shiftKey&&n.target===this._lastElement?(n.preventDefault(),this._firstElement.focus()):this._condition(n)&&n.shiftKey&&n.target===this._firstElement&&(n.preventDefault(),this._lastElement.focus())}}trap(){this._setElements(),this._init(),this._setFocusTrap()}disable(){this._focusableElements.forEach(t=>{t.removeEventListener(this._event,this.handler)}),this._toggler&&this._toggler.focus()}update(){this._setElements(),this._setFocusTrap()}_init(){const t=e=>{!this._firstElement||e.key!=="Tab"||this._focusableElements.includes(e.target)||(e.preventDefault(),this._firstElement.focus(),window.removeEventListener("keydown",t))};window.addEventListener("keydown",t)}_filterVisible(t){return t.filter(e=>{if(!Ct(e))return!1;const s=h.parents(e,"*");for(let n=0;n{const s=e.getAttribute("data-twe-disabled")==="true"||e.hasAttribute("disabled");return e.disabled||s?null:e}),this._onlyVisible&&(this._focusableElements=this._filterVisible(this._focusableElements)),this._firstElement=this._focusableElements[0],this._lastElement=this._focusableElements[this._focusableElements.length-1]}_setFocusTrap(){this._focusableElements.forEach((t,e)=>{e===this._focusableElements.length-1||e===0?t.addEventListener(this._event,this.handler):t.removeEventListener(this._event,this.handler)})}}let Bs=[];const js=(i,t="hide")=>{const e=`click.dismiss${i.EVENT_KEY}`,s=i.NAME;Bs.includes(s)||(Bs.push(s),d.on(document,e,`[data-twe-${s}-dismiss]`,function(n){if(["A","AREA"].includes(this.tagName)&&n.preventDefault(),ct(this))return;const r=st(this)||this.closest(`.${s}`)||this.closest(`[data-twe-${s}-init]`);if(!r)return;i.getOrCreateInstance(r)[t]()}))},Do=9,Us="offcanvas",xt=".twe.offcanvas",No=`load${xt}.data-api`,So="Escape",Ys={backdrop:!0,keyboard:!0,scroll:!1},Lo={backdrop:"boolean",keyboard:"boolean",scroll:"boolean"},Ks="show",$o="[data-twe-offcanvas-init][data-twe-offcanvas-show]",Io=`show${xt}`,Ro=`shown${xt}`,ko=`hide${xt}`,xo=`hidden${xt}`,Po=`keydown.dismiss${xt}`;class Pt extends et{constructor(t,e){super(t),this._config=this._getConfig(e),this._isShown=!1,this._backdrop=this._initializeBackDrop(),this._focustrap=this._initializeFocusTrap(),this._addEventListeners(),this._didInit=!1,this._init()}static get NAME(){return Us}static get Default(){return Ys}toggle(t){return this._isShown?this.hide():this.show(t)}show(t){if(this._isShown||d.trigger(this._element,Io,{relatedTarget:t}).defaultPrevented)return;this._isShown=!0,this._element.style.visibility="visible",this._backdrop.show(),this._config.scroll||new ci().hide(),this._element.removeAttribute("aria-hidden"),this._element.setAttribute("aria-modal",!0),this._element.setAttribute("role","dialog"),this._element.setAttribute(`data-twe-offcanvas-${Ks}`,"");const s=()=>{this._config.scroll||this._focustrap.trap(),d.trigger(this._element,Ro,{relatedTarget:t})};this._queueCallback(s,this._element,!0)}hide(){if(!this._isShown||d.trigger(this._element,ko).defaultPrevented)return;this._focustrap.disable(),this._element.blur(),this._isShown=!1,this._element.removeAttribute(`data-twe-offcanvas-${Ks}`),this._backdrop.hide();const e=()=>{this._element.setAttribute("aria-hidden",!0),this._element.removeAttribute("aria-modal"),this._element.removeAttribute("role"),this._element.style.visibility="hidden",this._config.scroll||new ci().reset(),d.trigger(this._element,xo)};this._queueCallback(e,this._element,!0)}dispose(){this._backdrop.dispose(),this._focustrap.disable(),super.dispose()}_init(){this._didInit||(d.on(window,No,()=>h.find($o).forEach(t=>Pt.getOrCreateInstance(t).show())),this._didInit=!0,js(Pt))}_getConfig(t){return t={...Ys,...E.getDataAttributes(this._element),...typeof t=="object"?t:{}},x(Us,t,Lo),t}_initializeBackDrop(){return new Vs({isVisible:this._config.backdrop,isAnimated:!0,rootElement:this._element.parentNode,clickCallback:()=>this.hide()})}_initializeFocusTrap(){return new Ws(this._element,{event:"keydown",condition:t=>t.keyCode===Do,onlyVisible:!0})}_addEventListeners(){d.on(this._element,Po,t=>{this._config.keyboard&&t.key===So&&this.hide()})}static jQueryInterface(t){return this.each(function(){const e=Pt.getOrCreateInstance(this,t);if(typeof t=="string"){if(e[t]===void 0||t.startsWith("_")||t==="constructor")throw new TypeError(`No method named "${t}"`);e[t](this)}})}}const di="carousel",Y=".twe.carousel",Fs=".data-api",Mo="ArrowLeft",Ho="ArrowRight",Vo=500,Wo=40,zs={interval:5e3,keyboard:!0,ride:!1,pause:"hover",wrap:!0,touch:!0},Bo={interval:"(number|boolean)",keyboard:"boolean",ride:"(boolean|string)",pause:"(string|boolean)",wrap:"boolean",touch:"boolean"},jo={pointer:"touch-pan-y",block:"!block",visible:"data-[twe-carousel-fade]:opacity-100 data-[twe-carousel-fade]:z-[1]",invisible:"data-[twe-carousel-fade]:z-0 data-[twe-carousel-fade]:opacity-0 data-[twe-carousel-fade]:duration-[600ms] data-[twe-carousel-fade]:delay-600",slideRight:"translate-x-full",slideLeft:"-translate-x-full"},Uo={pointer:"string",block:"string",visible:"string",invisible:"string",slideRight:"string",slideLeft:"string"},_t="next",gt="prev",mt="left",qt="right",Yo={[Mo]:qt,[Ho]:mt},Ko=`slide${Y}`,ui=`slid${Y}`,Fo=`keydown${Y}`,zo=`mouseenter${Y}`,qo=`mouseleave${Y}`,Xo=`touchstart${Y}`,Go=`touchmove${Y}`,Qo=`touchend${Y}`,Zo=`pointerdown${Y}`,Jo=`pointerup${Y}`,ta=`dragstart${Y}`,qs=`load${Y}${Fs}`,Xs=`click${Y}${Fs}`,Xt="data-twe-carousel-active",ea="data-twe-carousel-item-end",hi="data-twe-carousel-item-start",ia="data-twe-carousel-item-next",sa="data-twe-carousel-item-prev",na="data-twe-carousel-pointer-event",ra="[data-twe-carousel-init]",Gs="[data-twe-carousel-active]",fi="[data-twe-carousel-item]",Mt=`${Gs}${fi}`,oa=`${fi} img`,aa="[data-twe-carousel-item-next], [data-twe-carousel-item-prev]",la="[data-twe-carousel-indicators]",ca="[data-twe-target]",Qs="[data-twe-slide], [data-twe-slide-to]",da="touch",ua="pen";class q extends et{constructor(t,e,s){super(t),this._items=null,this._interval=null,this._activeElement=null,this._isPaused=!1,this._isSliding=!1,this.touchTimeout=null,this.touchStartX=0,this.touchDeltaX=0,this._config=this._getConfig(e),this._classes=this._getClasses(s),this._indicatorsElement=h.findOne(la,this._element),this._touchSupported="ontouchstart"in document.documentElement||navigator.maxTouchPoints>0,this._pointerEvent=!!window.PointerEvent,this._setActiveElementClass(),this._addEventListeners(),this._didInit=!1,this._init(),this._config.ride==="carousel"&&this.cycle()}static get Default(){return zs}static get NAME(){return di}next(){this._slide(_t)}nextWhenVisible(){!document.hidden&&Ct(this._element)&&this.next()}prev(){this._slide(gt)}pause(t){t||(this._isPaused=!0),h.findOne(aa,this._element)&&(Ri(this._element),this.cycle(!0)),clearInterval(this._interval),this._interval=null}cycle(t){t||(this._isPaused=!1),this._interval&&(clearInterval(this._interval),this._interval=null),this._config&&this._config.interval&&!this._isPaused&&(this._updateInterval(),this._interval=setInterval((document.visibilityState?this.nextWhenVisible:this.next).bind(this),this._config.interval))}to(t){this._activeElement=h.findOne(Mt,this._element);const e=this._getItemIndex(this._activeElement);if(t>this._items.length-1||t<0)return;if(this._isSliding){d.one(this._element,ui,()=>this.to(t));return}if(e===t){this.pause(),this.cycle();return}const s=t>e?_t:gt;this._slide(s,this._items[t])}dispose(){d.off(document,Xs,Qs,q.dataApiClickHandler),d.off(window,qs),super.dispose()}_init(){this._didInit||(d.on(document,Xs,Qs,q.dataApiClickHandler),d.on(window,qs,()=>{const t=h.find(ra);for(let e=0,s=t.length;ethis.cycle());return}this.cycle()}}_applyInitialClasses(){const t=h.findOne(Mt,this._element);t.classList.add(this._classes.block,...this._classes.visible.split(" ")),this._setActiveIndicatorElement(t)}_handleSwipe(){const t=Math.abs(this.touchDeltaX);if(t<=Wo)return;const e=t/this.touchDeltaX;this.touchDeltaX=0,e&&this._slide(e>0?qt:mt)}_setActiveElementClass(){this._activeElement=h.findOne(Mt,this._element),E.addClass(this._activeElement,"hidden")}_addEventListeners(){this._config.keyboard&&d.on(this._element,Fo,t=>this._keydown(t)),this._config.pause==="hover"&&(d.on(this._element,zo,t=>this.pause(t)),d.on(this._element,qo,t=>this._enableCycle(t))),this._config.touch&&this._touchSupported&&this._addTouchEventListeners(),this._applyInitialClasses()}_addTouchEventListeners(){const t=r=>this._pointerEvent&&(r.pointerType===ua||r.pointerType===da),e=r=>{t(r)?this.touchStartX=r.clientX:this._pointerEvent||(this.touchStartX=r.touches[0].clientX)},s=r=>{this.touchDeltaX=r.touches&&r.touches.length>1?0:r.touches[0].clientX-this.touchStartX},n=r=>{t(r)&&(this.touchDeltaX=r.clientX-this.touchStartX),this._handleSwipe(),this._config.pause==="hover"&&(this.pause(),this.touchTimeout&&clearTimeout(this.touchTimeout),this.touchTimeout=setTimeout(o=>this._enableCycle(o),Vo+this._config.interval))};h.find(oa,this._element).forEach(r=>{d.on(r,ta,o=>o.preventDefault())}),this._pointerEvent?(d.on(this._element,Zo,r=>e(r)),d.on(this._element,Jo,r=>n(r)),this._element.classList.add(this._classes.pointer),this._element.setAttribute(`${na}`,"")):(d.on(this._element,Xo,r=>e(r)),d.on(this._element,Go,r=>s(r)),d.on(this._element,Qo,r=>n(r)))}_keydown(t){if(/input|textarea/i.test(t.target.tagName))return;const e=Yo[t.key];e&&(t.preventDefault(),this._slide(e))}_getItemIndex(t){return this._items=t&&t.parentNode?h.find(fi,t.parentNode):[],this._items.indexOf(t)}_getItemByOrder(t,e){const s=t===_t;return Hi(this._items,e,s,this._config.wrap)}_triggerSlideEvent(t,e){const s=this._getItemIndex(t),n=this._getItemIndex(h.findOne(Mt,this._element));return d.trigger(this._element,Ko,{relatedTarget:t,direction:e,from:n,to:s})}_setActiveIndicatorElement(t){if(this._indicatorsElement){const e=h.findOne(Gs,this._indicatorsElement);e.removeAttribute(Xt),e.removeAttribute("aria-current"),e.classList.remove("!opacity-100");const s=h.find(ca,this._indicatorsElement);for(let n=0;n{d.trigger(this._element,ui,{relatedTarget:o,direction:v,from:r,to:a})};o.setAttribute(`${f}`,""),o.classList.add(this._classes.block,O),Ut(o),n.setAttribute(`${c}`,""),n.classList.add(g,...this._classes.invisible.split(" ")),n.classList.remove(...this._classes.visible.split(" ")),o.setAttribute(`${c}`,""),o.classList.add(...this._classes.visible.split(" ")),o.classList.remove(this._classes.slideRight,this._classes.slideLeft);const D=()=>{o.removeAttribute(c),o.removeAttribute(f),o.setAttribute(`${Xt}`,""),n.removeAttribute(Xt),n.classList.remove(g,...this._classes.invisible.split(" "),this._classes.block),n.removeAttribute(f),n.removeAttribute(c),this._isSliding=!1,setTimeout(y,0)};this._queueCallback(D,n,!0),(l||this._config.ride===!0)&&this.cycle()}_directionToOrder(t){return[qt,mt].includes(t)?W()?t===mt?gt:_t:t===mt?_t:gt:t}_orderToDirection(t){return[_t,gt].includes(t)?W()?t===gt?mt:qt:t===gt?qt:mt:t}static carouselInterface(t,e){const s=q.getOrCreateInstance(t,e);let{_config:n}=s;typeof e=="object"&&(n={...n,...e});const r=typeof e=="string"?e:e.slide;if(typeof e=="number"){s.to(e);return}if(typeof r=="string"){if(typeof s[r]>"u")throw new TypeError(`No method named "${r}"`);s[r]()}else n.interval&&n.ride===!0&&s.pause()}static jQueryInterface(t){return this.each(function(){let e=q.getOrCreateInstance(this);if(typeof t=="number"){e.to(t);return}if(typeof t=="string"){if(typeof e[t]>"u")throw new TypeError(`No method named "${t}"`);e[t]()}})}static dataApiClickHandler(t){const e=st(this);if(!e)return;const s={...E.getDataAttributes(e),...E.getDataAttributes(this)},n=this.getAttribute("data-twe-slide-to");n&&(s.interval=!1),q.carouselInterface(e,s),n&&q.getInstance(e).to(n),t.preventDefault()}}const ha=new Set(["background","cite","href","itemtype","longdesc","poster","src","xlink:href"]),fa=/^aria-[\w-]*$/i,pa=/^data-twe-[\w-]*$/i,_a=/^(?:(?:https?|mailto|ftp|tel|file|sms):|[^#&/:?]*(?:[#/?]|$))/i,ga=/^data:(?:image\/(?:bmp|gif|jpeg|jpg|png|tiff|webp)|video\/(?:mpeg|mp4|ogg|webm)|audio\/(?:mp3|oga|ogg|opus));base64,[\d+/a-z]+=*$/i,ma=(i,t)=>{const e=i.nodeName.toLowerCase();if(t.includes(e))return ha.has(e)?!!(_a.test(i.nodeValue)||ga.test(i.nodeValue)):!0;const s=t.filter(n=>n instanceof RegExp);for(let n=0,r=s.length;n{ma(v,f)||l.removeAttribute(v.nodeName)})}return n.body.innerHTML}const Js="tooltip",J=".twe.tooltip",va="te-tooltip",ba=new Set(["sanitize","allowList","sanitizeFn"]),wa={animation:"boolean",template:"string",title:"(string|element|function)",trigger:"string",delay:"(number|object)",html:"boolean",selector:"(string|boolean)",placement:"(string|function)",offset:"(array|string|function)",container:"(string|element|boolean)",fallbackPlacements:"array",boundary:"(string|element)",customClass:"(string|function)",sanitize:"boolean",sanitizeFn:"(null|function)",allowList:"object",popperConfig:"(null|object|function)"},Ta={AUTO:"auto",TOP:"top",RIGHT:W()?"left":"right",BOTTOM:"bottom",LEFT:W()?"right":"left"},Aa={animation:!0,template:` + + `,trigger:"hover focus",title:"",delay:0,html:!1,selector:!1,placement:"top",offset:[0,0],container:!1,fallbackPlacements:["top","right","bottom","left"],boundary:"clippingParents",customClass:"",sanitize:!0,sanitizeFn:null,allowList:Ea,popperConfig:{hide:!0}},ya={HIDE:`hide${J}`,HIDDEN:`hidden${J}`,SHOW:`show${J}`,SHOWN:`shown${J}`,INSERTED:`inserted${J}`,CLICK:`click${J}`,FOCUSIN:`focusin${J}`,FOCUSOUT:`focusout${J}`,MOUSEENTER:`mouseenter${J}`,MOUSELEAVE:`mouseleave${J}`},Ca="fade",Oa="modal",pi="show",Gt="show",_i="out",tn="[data-twe-tooltip-inner-ref]",en=`.${Oa}`,sn="hide.twe.modal",Qt="hover",gi="focus",Da="click",Na="manual";class Et extends et{constructor(t,e){if(typeof Cs>"u")throw new TypeError("Bootstrap's tooltips require Popper (https://popper.js.org)");super(t),this._isEnabled=!0,this._timeout=0,this._hoverState="",this._activeTrigger={},this._popper=null,this._config=this._getConfig(e),this.tip=null,this._setListeners()}static get Default(){return Aa}static get NAME(){return Js}static get Event(){return ya}static get DefaultType(){return wa}enable(){this._isEnabled=!0}disable(){this._isEnabled=!1}toggleEnabled(){this._isEnabled=!this._isEnabled}toggle(t){if(this._isEnabled)if(t){const e=this._initializeOnDelegatedTarget(t);e._activeTrigger.click=!e._activeTrigger.click,e._isWithActiveTrigger()?e._enter(null,e):e._leave(null,e)}else{if(this.getTipElement().classList.contains(pi)){this._leave(null,this);return}this._enter(null,this)}}dispose(){clearTimeout(this._timeout),d.off(this._element.closest(en),sn,this._hideModalHandler),this.tip&&this.tip.remove(),this._disposePopper(),super.dispose()}show(){if(this._element.style.display==="none")throw new Error("Please use show on visible elements");if(!(this.isWithContent()&&this._isEnabled))return;const t=d.trigger(this._element,this.constructor.Event.SHOW),e=ki(this._element),s=e===null?this._element.ownerDocument.documentElement.contains(this._element):e.contains(this._element);if(t.defaultPrevented||!s)return;this.constructor.NAME==="tooltip"&&this.tip&&this.getTitle()!==this.tip.querySelector(tn).innerHTML&&(this._disposePopper(),this.tip.remove(),this.tip=null);const n=this.getTipElement(),r=Yn(this.constructor.NAME);n.setAttribute("id",r),this._element.setAttribute("aria-describedby",r),this._config.animation&&setTimeout(()=>{this.tip.classList.add("opacity-100"),this.tip.classList.remove("opacity-0")},100);const o=typeof this._config.placement=="function"?this._config.placement.call(this,n,this._element):this._config.placement,a=this._getAttachment(o);this._addAttachmentClass(a);const{container:l}=this._config;if(R.setData(n,this.constructor.DATA_KEY,this),this._element.ownerDocument.documentElement.contains(this.tip)||(l.append(n),d.trigger(this._element,this.constructor.Event.INSERTED)),this._popper?this._popper.update():this._popper=Je(this._element,n,this._getPopperConfig(a)),n.getAttribute("id").includes("tooltip"))switch(o){case"bottom":n.classList.add("py-[0.4rem]");break;case"left":n.classList.add("px-[0.4rem]");break;case"right":n.classList.add("px-[0.4rem]");break;default:n.classList.add("py-[0.4rem]");break}const c=this._resolvePossibleFunction(this._config.customClass);c&&n.classList.add(...c.split(" ")),"ontouchstart"in document.documentElement&&[].concat(...document.body.children).forEach(g=>{d.on(g,"mouseover",se)});const f=()=>{const g=this._hoverState;this._hoverState=null,d.trigger(this._element,this.constructor.Event.SHOWN),g===_i&&this._leave(null,this)},v=this.tip.classList.contains("transition-opacity");this._queueCallback(f,this.tip,v)}hide(){if(!this._popper)return;const t=this.getTipElement(),e=()=>{this._isWithActiveTrigger()||(this._hoverState!==Gt&&t.remove(),this._cleanTipClass(),this._element.removeAttribute("aria-describedby"),d.trigger(this._element,this.constructor.Event.HIDDEN),this._disposePopper())};if(d.trigger(this._element,this.constructor.Event.HIDE).defaultPrevented)return;t.classList.add("opacity-0"),t.classList.remove("opacity-100"),"ontouchstart"in document.documentElement&&[].concat(...document.body.children).forEach(r=>d.off(r,"mouseover",se)),this._activeTrigger[Da]=!1,this._activeTrigger[gi]=!1,this._activeTrigger[Qt]=!1;const n=this.tip.classList.contains("opacity-0");this._queueCallback(e,this.tip,n),this._hoverState=""}update(){this._popper!==null&&this._popper.update()}isWithContent(){return!!this.getTitle()}getTipElement(){if(this.tip)return this.tip;const t=document.createElement("div");t.innerHTML=this._config.template;const e=t.children[0];return this.setContent(e),e.classList.remove(Ca,pi),this.tip=e,this.tip}setContent(t){this._sanitizeAndSetContent(t,this.getTitle(),tn)}_sanitizeAndSetContent(t,e,s){const n=h.findOne(s,t);if(!e&&n){n.remove();return}this.setElementContent(n,e)}setElementContent(t,e){if(t!==null){if(yt(e)){e=nt(e),this._config.html?e.parentNode!==t&&(t.innerHTML="",t.append(e)):t.textContent=e.textContent;return}this._config.html?(this._config.sanitize&&(e=Zs(e,this._config.allowList,this._config.sanitizeFn)),t.innerHTML=e):t.textContent=e}}getTitle(){const t=this._element.getAttribute("data-twe-original-title")||this._config.title;return this._resolvePossibleFunction(t)}updateAttachment(t){return t==="right"?"end":t==="left"?"start":t}_initializeOnDelegatedTarget(t,e){return e||this.constructor.getOrCreateInstance(t.delegateTarget,this._getDelegateConfig())}_getOffset(){const{offset:t}=this._config;return typeof t=="string"?t.split(",").map(e=>Number.parseInt(e,10)):typeof t=="function"?e=>t(e,this._element):t}_resolvePossibleFunction(t){return typeof t=="function"?t.call(this._element):t}_getPopperConfig(t){const e={placement:t,modifiers:[{name:"flip",options:{fallbackPlacements:this._config.fallbackPlacements}},{name:"offset",options:{offset:this._getOffset()}},{name:"preventOverflow",options:{boundary:this._config.boundary}},{name:"arrow",options:{element:`.${this.constructor.NAME}-arrow`}},{name:"onChange",enabled:!0,phase:"afterWrite",fn:s=>this._handlePopperPlacementChange(s)}],onFirstUpdate:s=>{s.options.placement!==s.placement&&this._handlePopperPlacementChange(s)}};return{...e,...typeof this._config.popperConfig=="function"?this._config.popperConfig(e):this._config.popperConfig}}_addAttachmentClass(t){this.getTipElement().classList.add(`${this._getBasicClassPrefix()}-${this.updateAttachment(t)}`)}_getAttachment(t){return Ta[t.toUpperCase()]}_setListeners(){this._config.trigger.split(" ").forEach(e=>{if(e==="click")d.on(this._element,this.constructor.Event.CLICK,this._config.selector,s=>this.toggle(s));else if(e!==Na){const s=e===Qt?this.constructor.Event.MOUSEENTER:this.constructor.Event.FOCUSIN,n=e===Qt?this.constructor.Event.MOUSELEAVE:this.constructor.Event.FOCUSOUT;d.on(this._element,s,this._config.selector,r=>this._enter(r)),d.on(this._element,n,this._config.selector,r=>this._leave(r))}}),this._hideModalHandler=()=>{this._element&&this.hide()},d.on(this._element.closest(en),sn,this._hideModalHandler),this._config.selector?this._config={...this._config,trigger:"manual",selector:""}:this._fixTitle()}_fixTitle(){const t=this._element.getAttribute("title"),e=typeof this._element.getAttribute("data-twe-original-title");(t||e!=="string")&&(this._element.setAttribute("data-twe-original-title",t||""),t&&!this._element.getAttribute("aria-label")&&!this._element.textContent&&this._element.setAttribute("aria-label",t),this._element.setAttribute("title",""))}_enter(t,e){if(e=this._initializeOnDelegatedTarget(t,e),t&&(e._activeTrigger[t.type==="focusin"?gi:Qt]=!0),e.getTipElement().classList.contains(pi)||e._hoverState===Gt){e._hoverState=Gt;return}if(clearTimeout(e._timeout),e._hoverState=Gt,!e._config.delay||!e._config.delay.show){e.show();return}e._timeout=setTimeout(()=>{e._hoverState===Gt&&e.show()},e._config.delay.show)}_leave(t,e){if(e=this._initializeOnDelegatedTarget(t,e),t&&(e._activeTrigger[t.type==="focusout"?gi:Qt]=e._element.contains(t.relatedTarget)),!e._isWithActiveTrigger()){if(clearTimeout(e._timeout),e._hoverState=_i,!e._config.delay||!e._config.delay.hide){e.hide();return}e._timeout=setTimeout(()=>{e._hoverState===_i&&e.hide()},e._config.delay.hide)}}_isWithActiveTrigger(){for(const t in this._activeTrigger)if(this._activeTrigger[t])return!0;return!1}_getConfig(t){const e=E.getDataAttributes(this._element);return Object.keys(e).forEach(s=>{ba.has(s)&&delete e[s]}),t={...this.constructor.Default,...e,...typeof t=="object"&&t?t:{}},t.container=t.container===!1?document.body:nt(t.container),typeof t.delay=="number"&&(t.delay={show:t.delay,hide:t.delay}),typeof t.title=="number"&&(t.title=t.title.toString()),typeof t.content=="number"&&(t.content=t.content.toString()),x(Js,t,this.constructor.DefaultType),t.sanitize&&(t.template=Zs(t.template,t.allowList,t.sanitizeFn)),t}_getDelegateConfig(){const t={};for(const e in this._config)this.constructor.Default[e]!==this._config[e]&&(t[e]=this._config[e]);return t}_cleanTipClass(){const t=this.getTipElement(),e=new RegExp(`(^|\\s)${this._getBasicClassPrefix()}\\S+`,"g"),s=t.getAttribute("class").match(e);s!==null&&s.length>0&&s.map(n=>n.trim()).forEach(n=>t.classList.remove(n))}_getBasicClassPrefix(){return va}_handlePopperPlacementChange(t){const{state:e}=t;e&&(this.tip=e.elements.popper,this._cleanTipClass(),this._addAttachmentClass(this._getAttachment(e.placement)))}_disposePopper(){this._popper&&(this._popper.destroy(),this._popper=null)}static jQueryInterface(t){return this.each(function(){const e=Et.getOrCreateInstance(this,t);if(typeof t=="string"){if(typeof e[t]>"u")throw new TypeError(`No method named "${t}"`);e[t]()}})}}const Sa="popover",tt=".twe.popover",La="te-popover",$a={...Et.Default,placement:"right",offset:[0,8],trigger:"click",content:"",template:` + + `},Ia={...Et.DefaultType,content:"(string|element|function)"},Ra={HIDE:`hide${tt}`,HIDDEN:`hidden${tt}`,SHOW:`show${tt}`,SHOWN:`shown${tt}`,INSERTED:`inserted${tt}`,CLICK:`click${tt}`,FOCUSIN:`focusin${tt}`,FOCUSOUT:`focusout${tt}`,MOUSEENTER:`mouseenter${tt}`,MOUSELEAVE:`mouseleave${tt}`},ka="[data-twe-popover-header-ref]",xa="[data-twe-popover-body-ref]";class ge extends Et{static get Default(){return $a}static get NAME(){return Sa}static get Event(){return Ra}static get DefaultType(){return Ia}isWithContent(){return this.getTitle()||this._getContent()}setContent(t){this._sanitizeAndSetContent(t,this.getTitle(),ka),this._sanitizeAndSetContent(t,this._getContent(),xa)}_getContent(){return this._resolvePossibleFunction(this._config.content)}_getBasicClassPrefix(){return La}static jQueryInterface(t){return this.each(function(){const e=ge.getOrCreateInstance(this,t);if(typeof t=="string"){if(typeof e[t]>"u")throw new TypeError(`No method named "${t}"`);e[t]()}})}}const mi="scrollspy",Ei=".twe.scrollspy",nn={offset:10,method:"auto",target:""},Pa={offset:"number",method:"string",target:"(string|element)"},Ma={active:"!text-primary font-semibold border-s-[0.125rem] border-solid border-primary"},Ha={active:"string"},vi=`activate${Ei}`,Va=`scroll${Ei}`,Zt="data-twe-nav-link-active",rn="data-twe-collapsible-scrollspy-ref",on="[data-twe-dropdown-item-ref]",Wa="[data-twe-nav-list-ref]",bi="[data-twe-nav-link-ref]",Ba="[data-twe-nav-item-ref]",an="[data-twe-list-group-item-ref]",wi=`${bi}, ${an}, ${on}`,ja="[data-twe-dropdown-ref]",Ua="[data-twe-dropdown-toggle-ref]",ln=`[${rn}]`,Ya=`[${Zt}]`,Ti="ul",Ka="maxOffset",cn="position";class me extends et{constructor(t,e,s){super(t),this._scrollElement=this._element.tagName==="BODY"?window:this._element,this._config=this._getConfig(e),this._classes=this._getClasses(s),this._offsets=[],this._targets=[],this._collapsibles=[],this._activeTarget=null,this._scrollHeight=0,d.on(this._scrollElement,Va,()=>this._process()),this.refresh(),this._process(),this._bindActivateEvent(),this._getCollapsibles(),this._collapsibles.length!==0&&(this._showSubsection(),this._hideSubsection())}static get Default(){return nn}static get NAME(){return mi}refresh(){const t=this._scrollElement===this._scrollElement.window?Ka:cn,e=this._config.method==="auto"?t:this._config.method,s=e===cn?this._getScrollTop():0;this._offsets=[],this._targets=[],this._scrollHeight=this._getScrollHeight(),h.find(wi,this._config.target).map(r=>{const o=Re(r),a=o?h.findOne(o):null;if(a){const l=a.getBoundingClientRect();if(l.width||l.height)return[E[e](a).top+s,o]}return null}).filter(r=>r).sort((r,o)=>r[0]-o[0]).forEach(r=>{this._offsets.push(r[0]),this._targets.push(r[1])})}dispose(){d.off(this._scrollElement,Ei),d.off(this._scrollElement,vi),super.dispose()}_getConfig(t){return t={...nn,...E.getDataAttributes(this._element),...typeof t=="object"&&t?t:{}},t.target=nt(t.target)||document.documentElement,x(mi,t,Pa),t}_getClasses(t){const e=E.getDataClassAttributes(this._element);return t={...Ma,...e,...t},x(mi,t,Ha),t}_getScrollTop(){return this._scrollElement===window?this._scrollElement.pageYOffset:this._scrollElement.scrollTop}_getScrollHeight(){return this._scrollElement.scrollHeight||Math.max(document.body.scrollHeight,document.documentElement.scrollHeight)}_getOffsetHeight(){return this._scrollElement===window?window.innerHeight:this._scrollElement.getBoundingClientRect().height}_process(){const t=this._getScrollTop()+this._config.offset,e=this._getScrollHeight(),s=this._config.offset+e-this._getOffsetHeight();if(this._scrollHeight!==e&&this.refresh(),t>=s){const n=this._targets[this._targets.length-1];this._activeTarget!==n&&this._activate(n);return}if(this._activeTarget&&t0){this._activeTarget=null,this._clear();return}for(let n=this._offsets.length;n--;)this._activeTarget!==this._targets[n]&&t>=this._offsets[n]&&(typeof this._offsets[n+1]>"u"||t`${n}[data-twe-target="${t}"],${n}[href="${t}"]`),s=h.findOne(e.join(","),this._config.target);s.classList.add(...this._classes.active.split(" ")),s.setAttribute(Zt,""),s.getAttribute(on)?h.findOne(Ua,s.closest(ja)).classList.add(...this._classes.active.split(" ")):h.parents(s,Wa).forEach(n=>{h.prev(n,`${bi}, ${an}`).forEach(r=>{r.classList.add(...this._classes.active.split(" ")),r.setAttribute(Zt,"")}),h.prev(n,Ba).forEach(r=>{h.children(r,bi).forEach(o=>o.classList.add(...this._classes.active.split(" ")))})}),d.trigger(this._scrollElement,vi,{relatedTarget:t})}_clear(){h.find(wi,this._config.target).filter(t=>t.classList.contains(...this._classes.active.split(" "))).forEach(t=>{t.classList.remove(...this._classes.active.split(" ")),t.removeAttribute(Zt)})}_hide(t){const e=h.findOne(Ti,t.parentNode);e.style.overflow="hidden",e.style.height="0px"}_show(t,e){t.style.height=e}_getCollapsibles(){const t=h.find(ln);t&&t.forEach(e=>{const s=e.parentNode,n=h.findOne(Ti,s),r=n.offsetHeight||n.scrollHeight;this._collapsibles.push({element:n,relatedTarget:e.getAttribute("href"),height:`${r}px`})})}_showSubsection(){h.find(Ya).filter(s=>s.hasAttribute(rn)).forEach(s=>{const n=h.findOne(Ti,s.parentNode),r=this._collapsibles.find(o=>o.relatedTarget=s.getAttribute("href")).height;this._show(n,r)})}_hideSubsection(){h.find(ln).filter(e=>e.hasAttribute(Zt)===!1).forEach(e=>{this._hide(e)})}_bindActivateEvent(){d.on(this._element,vi,()=>{this._showSubsection(),this._hideSubsection()})}static jQueryInterface(t){return this.each(function(){const e=me.getOrCreateInstance(this,t);if(typeof t=="string"){if(typeof e[t]>"u")throw new TypeError(`No method named "${t}"`);e[t]()}})}}const dn="tab",Ee=".twe.tab",Fa=`hide${Ee}`,za=`hidden${Ee}`,qa=`show${Ee}`,Xa=`shown${Ee}`,Ga="data-twe-dropdown-menu-ref",Ht="data-twe-tab-active",ve="data-twe-nav-active",Qa="[data-twe-dropdown-ref]",Za="[data-twe-nav-ref]",un=`[${Ht}]`,Ja=`[${ve}]`,hn=":scope > li > .active",tl="[data-twe-dropdown-toggle-ref]",el=":scope > [data-twe-dropdown-menu-ref] [data-twe-dropdown-show]",il={show:"opacity-100",hide:"opacity-0"},sl={show:"string",hide:"string"};class be extends et{constructor(t,e){super(t),this._classes=this._getClasses(e)}static get NAME(){return dn}show(){if(this._element.parentNode&&this._element.parentNode.nodeType===Node.ELEMENT_NODE&&this._element.getAttribute(ve)==="")return;let t;const e=st(this._element),s=this._element.closest(Za),n=h.findOne(Ja,s);if(s){const l=s.nodeName==="UL"||s.nodeName==="OL"?hn:un;t=h.find(l,s),t=t[t.length-1]}const r=t?d.trigger(t,Fa,{relatedTarget:this._element}):null;if(d.trigger(this._element,qa,{relatedTarget:t}).defaultPrevented||r!==null&&r.defaultPrevented)return;this._activate(this._element,s,null,n,this._element);const a=()=>{d.trigger(t,za,{relatedTarget:this._element}),d.trigger(this._element,Xa,{relatedTarget:t})};e?this._activate(e,e.parentNode,a,n,this._element):a()}_getClasses(t){const e=E.getDataClassAttributes(this._element);return t={...il,...e,...t},x(dn,t,sl),t}_activate(t,e,s,n,r){const a=(e&&(e.nodeName==="UL"||e.nodeName==="OL")?h.find(hn,e):h.children(e,un))[0],l=s&&a&&a.hasAttribute(Ht),u=()=>this._transitionComplete(t,a,s,n,r);a&&l?(E.removeClass(a,this._classes.show),E.addClass(a,this._classes.hide),this._queueCallback(u,t,!0)):u()}_transitionComplete(t,e,s,n,r){if(e&&n){e.removeAttribute(Ht),n.removeAttribute(ve);const a=h.findOne(el,e.parentNode);a&&a.removeAttribute(Ht),e.getAttribute("role")==="tab"&&e.setAttribute("aria-selected",!1)}t.setAttribute(Ht,""),r.setAttribute(ve,""),t.getAttribute("role")==="tab"&&t.setAttribute("aria-selected",!0),Ut(t),t.classList.contains(this._classes.hide)&&(E.removeClass(t,this._classes.hide),E.addClass(t,this._classes.show));let o=t.parentNode;if(o&&o.nodeName==="LI"&&(o=o.parentNode),o&&o.hasAttribute(Ga)){const a=t.closest(Qa);a&&h.find(tl,a).forEach(l=>l.setAttribute(Ht,"")),t.setAttribute("aria-expanded",!0)}s&&s()}static jQueryInterface(t){return this.each(function(){const e=be.getOrCreateInstance(this);if(typeof t=="string"){if(typeof e[t]>"u")throw new TypeError(`No method named "${t}"`);e[t]()}})}}(()=>{var i={454:(s,n,r)=>{r.d(n,{Z:()=>l});var o=r(645),a=r.n(o)()(function(u){return u[1]});a.push([s.id,"INPUT:-webkit-autofill,SELECT:-webkit-autofill,TEXTAREA:-webkit-autofill{animation-name:onautofillstart}INPUT:not(:-webkit-autofill),SELECT:not(:-webkit-autofill),TEXTAREA:not(:-webkit-autofill){animation-name:onautofillcancel}@keyframes onautofillstart{}@keyframes onautofillcancel{}",""]);const l=a},645:s=>{s.exports=function(n){var r=[];return r.toString=function(){return this.map(function(o){var a=n(o);return o[2]?"@media ".concat(o[2]," {").concat(a,"}"):a}).join("")},r.i=function(o,a,l){typeof o=="string"&&(o=[[null,o,""]]);var u={};if(l)for(var c=0;c{(function(){if(typeof window<"u")try{var s=new window.CustomEvent("test",{cancelable:!0});if(s.preventDefault(),s.defaultPrevented!==!0)throw new Error("Could not prevent default")}catch{var n=function(o,a){var l,u;return(a=a||{}).bubbles=!!a.bubbles,a.cancelable=!!a.cancelable,(l=document.createEvent("CustomEvent")).initCustomEvent(o,a.bubbles,a.cancelable,a.detail),u=l.preventDefault,l.preventDefault=function(){u.call(this);try{Object.defineProperty(this,"defaultPrevented",{get:function(){return!0}})}catch{this.defaultPrevented=!0}},l};n.prototype=window.Event.prototype,window.CustomEvent=n}})()},379:(s,n,r)=>{var o,a=function(){var m={};return function(p){if(m[p]===void 0){var _=document.querySelector(p);if(window.HTMLIFrameElement&&_ instanceof window.HTMLIFrameElement)try{_=_.contentDocument.head}catch{_=null}m[p]=_}return m[p]}}(),l=[];function u(m){for(var p=-1,_=0;_{var n=s&&s.__esModule?()=>s.default:()=>s;return e.d(n,{a:n}),n},e.d=(s,n)=>{for(var r in n)e.o(n,r)&&!e.o(s,r)&&Object.defineProperty(s,r,{enumerable:!0,get:n[r]})},e.o=(s,n)=>Object.prototype.hasOwnProperty.call(s,n),(()=>{var s=e(379),n=e.n(s),r=e(454);function o(l){if(!l.hasAttribute("autocompleted")){l.setAttribute("autocompleted","");var u=new window.CustomEvent("onautocomplete",{bubbles:!0,cancelable:!0,detail:null});l.dispatchEvent(u)||(l.value="")}}function a(l){l.hasAttribute("autocompleted")&&(l.removeAttribute("autocompleted"),l.dispatchEvent(new window.CustomEvent("onautocomplete",{bubbles:!0,cancelable:!1,detail:null})))}n()(r.Z,{insert:"head",singleton:!1}),r.Z.locals,e(810),document.addEventListener("animationstart",function(l){l.animationName==="onautofillstart"?o(l.target):a(l.target)},!0),document.addEventListener("input",function(l){l.inputType!=="insertReplacementText"&&"data"in l?a(l.target):o(l.target)},!0)})()})();const Ai="input",we="twe.input",fn="data-twe-input-wrapper-init",pn="data-twe-input-notch-ref",_n="data-twe-input-notch-leading-ref",gn="data-twe-input-notch-middle-ref",nl="data-twe-input-notch-trailing-ref",rl="data-twe-input-helper-ref",ol="data-twe-input-placeholder-active",at="data-twe-input-state-active",mn="data-twe-input-focused",En="data-twe-input-form-counter",Te=`[${fn}] input`,Ae=`[${fn}] textarea`,Vt=`[${pn}]`,vn=`[${_n}]`,bn=`[${gn}]`,al=`[${rl}]`,ll={inputFormWhite:!1},cl={inputFormWhite:"(boolean)"},dl={notch:"group flex absolute left-0 top-0 w-full max-w-full h-full text-left pointer-events-none",notchLeading:"pointer-events-none border border-solid box-border bg-transparent transition-all duration-200 ease-linear motion-reduce:transition-none left-0 top-0 h-full w-2 border-e-0 rounded-s-[0.25rem] group-data-[twe-input-focused]:border-e-0 group-data-[twe-input-state-active]:border-e-0",notchLeadingNormal:"border-secondary-500 dark:border-neutral-400 group-data-[twe-input-focused]:shadow-notch-1 group-data-[twe-input-focused]:border-primary",notchLeadingWhite:"border-neutral-200 group-data-[twe-input-focused]:shadow-notch-1 group-data-[twe-input-focused]:shadow-white group-data-[twe-input-focused]:border-white",notchMiddle:"pointer-events-none border border-solid box-border bg-transparent transition-all duration-200 ease-linear motion-reduce:transition-none grow-0 shrink-0 basis-auto w-auto max-w-[calc(100%-1rem)] h-full border-e-0 border-s-0 group-data-[twe-input-focused]:border-x-0 group-data-[twe-input-state-active]:border-x-0 group-data-[twe-input-focused]:border-t group-data-[twe-input-state-active]:border-t group-data-[twe-input-focused]:border-solid group-data-[twe-input-state-active]:border-solid group-data-[twe-input-focused]:border-t-transparent group-data-[twe-input-state-active]:border-t-transparent",notchMiddleNormal:"border-secondary-500 dark:border-neutral-400 group-data-[twe-input-focused]:shadow-notch-2 group-data-[twe-input-focused]:border-primary",notchMiddleWhite:"border-neutral-200 group-data-[twe-input-focused]:shadow-notch-2 group-data-[twe-input-focused]:shadow-white group-data-[twe-input-focused]:border-white",notchTrailing:"pointer-events-none border border-solid box-border bg-transparent transition-all duration-200 ease-linear motion-reduce:transition-none grow h-full border-s-0 rounded-e-[0.25rem] group-data-[twe-input-focused]:border-s-0 group-data-[twe-input-state-active]:border-s-0",notchTrailingNormal:"border-secondary-500 dark:border-neutral-400 group-data-[twe-input-focused]:shadow-notch-3 group-data-[twe-input-focused]:border-primary",notchTrailingWhite:"border-neutral-200 group-data-[twe-input-focused]:shadow-notch-3 group-data-[twe-input-focused]:shadow-white group-data-[twe-input-focused]:border-white",counter:"text-right leading-[1.6]"},ul={notch:"string",notchLeading:"string",notchLeadingNormal:"string",notchLeadingWhite:"string",notchMiddle:"string",notchMiddleNormal:"string",notchMiddleWhite:"string",notchTrailing:"string",notchTrailingNormal:"string",notchTrailingWhite:"string",counter:"string"};class S{constructor(t,e,s){this._config=this._getConfig(e,t),this._element=t,this._classes=this._getClasses(s),this._label=null,this._labelWidth=0,this._labelMarginLeft=0,this._notchLeading=null,this._notchMiddle=null,this._notchTrailing=null,this._initiated=!1,this._helper=null,this._counter=!1,this._counterElement=null,this._maxLength=0,this._leadingIcon=null,this._element&&(R.setData(t,we,this),this.init())}static get NAME(){return Ai}get input(){return h.findOne("input",this._element)||h.findOne("textarea",this._element)}init(){this._initiated||(this._getLabelData(),this._applyDivs(),this._applyNotch(),this._activate(),this._getHelper(),this._getCounter(),this._getEvents(),this._initiated=!0)}update(){this._getLabelData(),this._getNotchData(),this._applyNotch(),this._activate(),this._getHelper(),this._getCounter()}forceActive(){this.input.setAttribute(at,""),h.findOne(Vt,this.input.parentNode).setAttribute(at,"")}forceInactive(){this.input.removeAttribute(at),h.findOne(Vt,this.input.parentNode).removeAttribute(at)}dispose(){this._removeBorder(),R.removeData(this._element,we),this._element=null}_getConfig(t,e){return t={...ll,...E.getDataAttributes(e),...typeof t=="object"?t:{}},x(Ai,t,cl),t}_getClasses(t){const e=E.getDataClassAttributes(this._element);return t={...dl,...e,...t},x(Ai,t,ul),t}_getLabelData(){this._label=h.findOne("label",this._element),this._label===null?this._showPlaceholder():(this._getLabelWidth(),this._getLabelPositionInInputGroup(),this._toggleDefaultDatePlaceholder())}_getHelper(){this._helper=h.findOne(al,this._element)}_getCounter(){this._counter=E.getDataAttribute(this.input,"inputShowcounter"),this._counter&&(this._maxLength=this.input.maxLength,this._showCounter())}_getEvents(){d.on(this._element,"focus","input",S.activate(new S)),d.on(this._element,"input","input",S.activate(new S)),d.on(this._element,"blur","input",S.deactivate(new S)),d.on(this._element,"focus","textarea",S.activate(new S)),d.on(this._element,"input","textarea",S.activate(new S)),d.on(this._element,"blur","textarea",S.deactivate(new S)),d.on(window,"shown.twe.modal",t=>{h.find(Te,t.target).forEach(e=>{const s=S.getInstance(e.parentNode);s&&s.update()}),h.find(Ae,t.target).forEach(e=>{const s=S.getInstance(e.parentNode);s&&s.update()})}),d.on(window,"shown.twe.dropdown",t=>{const e=t.target.parentNode.querySelector("[data-twe-dropdown-menu-ref]");e&&(h.find(Te,e).forEach(s=>{const n=S.getInstance(s.parentNode);n&&n.update()}),h.find(Ae,e).forEach(s=>{const n=S.getInstance(s.parentNode);n&&n.update()}))}),d.on(window,"shown.twe.tab",t=>{let e;t.target.href?e=t.target.href.split("#")[1]:e=E.getDataAttribute(t.target,"target").split("#")[1];const s=h.findOne(`#${e}`);h.find(Te,s).forEach(n=>{const r=S.getInstance(n.parentNode);r&&r.update()}),h.find(Ae,s).forEach(n=>{const r=S.getInstance(n.parentNode);r&&r.update()})}),d.on(window,"reset",t=>{h.find(Te,t.target).forEach(e=>{const s=S.getInstance(e.parentNode);s&&s.forceInactive()}),h.find(Ae,t.target).forEach(e=>{const s=S.getInstance(e.parentNode);s&&s.forceInactive()})}),d.on(window,"onautocomplete",t=>{const e=S.getInstance(t.target.parentNode);!e||!t.cancelable||e.forceActive()})}_showCounter(){if(h.find(`[${En}]`,this._element).length>0)return;this._counterElement=document.createElement("div"),E.addClass(this._counterElement,this._classes.counter),this._counterElement.setAttribute(En,"");const e=this.input.value.length;this._counterElement.innerHTML=`${e} / ${this._maxLength}`,this._helper.appendChild(this._counterElement),this._bindCounter()}_bindCounter(){d.on(this.input,"input",()=>{const t=this.input.value.length;this._counterElement.innerHTML=`${t} / ${this._maxLength}`})}_toggleDefaultDatePlaceholder(t=this.input){if(!(t.getAttribute("type")==="date"))return;!(document.activeElement===t)&&!t.value?t.style.opacity=0:t.style.opacity=1}_showPlaceholder(){this.input.setAttribute(ol,"")}_getNotchData(){this._notchMiddle=h.findOne(bn,this._element),this._notchLeading=h.findOne(vn,this._element)}_getLabelWidth(){this._labelWidth=this._label.clientWidth*.8+8}_getLabelPositionInInputGroup(){if(this._labelMarginLeft=0,!this._element.hasAttribute("data-twe-input-group-ref"))return;const t=this.input,e=h.prev(t,"[data-twe-input-group-text-ref]")[0];e===void 0?this._labelMarginLeft=0:this._labelMarginLeft=e.offsetWidth-1}_applyDivs(){const t=this._config.inputFormWhite?this._classes.notchLeadingWhite:this._classes.notchLeadingNormal,e=this._config.inputFormWhite?this._classes.notchMiddleWhite:this._classes.notchMiddleNormal,s=this._config.inputFormWhite?this._classes.notchTrailingWhite:this._classes.notchTrailingNormal,n=h.find(Vt,this._element),r=Yt("div");E.addClass(r,this._classes.notch),r.setAttribute(pn,""),this._notchLeading=Yt("div"),E.addClass(this._notchLeading,`${this._classes.notchLeading} ${t}`),this._notchLeading.setAttribute(_n,""),this._notchMiddle=Yt("div"),E.addClass(this._notchMiddle,`${this._classes.notchMiddle} ${e}`),this._notchMiddle.setAttribute(gn,""),this._notchTrailing=Yt("div"),E.addClass(this._notchTrailing,`${this._classes.notchTrailing} ${s}`),this._notchTrailing.setAttribute(nl,""),!(n.length>=1)&&(r.append(this._notchLeading),r.append(this._notchMiddle),r.append(this._notchTrailing),this._element.append(r),r.dir="ltr")}_applyNotch(){this._notchMiddle.style.width=`${this._labelWidth}px`,this._notchLeading.style.width=`${this._labelMarginLeft+9}px`,this._label!==null&&(this._label.style.marginLeft=`${this._labelMarginLeft}px`)}_removeBorder(){const t=h.findOne(Vt,this._element);t&&t.remove()}_activate(t){Pi(()=>{this._getElements(t);const e=t?t.target:this.input,s=h.findOne(Vt,this._element);t&&t.type==="focus"&&s&&s.setAttribute(mn,""),e.value!==""&&(e.setAttribute(at,""),s&&s.setAttribute(at,"")),this._toggleDefaultDatePlaceholder(e)})}_getElements(t){if(t&&(this._element=t.target.parentNode,this._label=h.findOne("label",this._element)),t&&this._label){const e=this._labelWidth;this._getLabelData(),e!==this._labelWidth&&(this._notchMiddle=h.findOne(bn,t.target.parentNode),this._notchLeading=h.findOne(vn,t.target.parentNode),this._applyNotch())}}_deactivate(t){const e=t?t.target:this.input;if(e.getAttribute("aria-expanded")==="true")return;const s=h.findOne(Vt,e.parentNode);s.removeAttribute(mn),e.value===""&&(e.removeAttribute(at),s.removeAttribute(at)),this._toggleDefaultDatePlaceholder(e)}static activate(t){return function(e){t._activate(e)}}static deactivate(t){return function(e){t._deactivate(e)}}static jQueryInterface(t,e){return this.each(function(){let s=R.getData(this,we);const n=typeof t=="object"&&t;if(!(!s&&/dispose/.test(t))&&(s||(s=new S(this,n)),typeof t=="string")){if(typeof s[t]>"u")throw new TypeError(`No method named "${t}"`);s[t](e)}})}static getInstance(t){return R.getData(t,we)}static getOrCreateInstance(t,e={}){return this.getInstance(t)||new this(t,typeof e=="object"?e:null)}}const hl={property:"color",defaultValue:null,inherit:!0},Wt=(i,t)=>{const{property:e,defaultValue:s,inherit:n}={...hl,...t},r=document.createElement("div");r.classList.add(i),document.body.appendChild(r);const a=window.getComputedStyle(r)[e]||s,u=window.getComputedStyle(r.parentElement)[e];return document.body.removeChild(r),!n&&u&&a===u?s:a||s},yi="ripple",ye="twe.ripple",fl="rgba({{color}}, 0.2) 0, rgba({{color}}, 0.3) 40%, rgba({{color}}, 0.4) 50%, rgba({{color}}, 0.5) 60%, rgba({{color}}, 0) 70%",pl=["[data-twe-ripple-init]"],Ce=[0,0,0],_l=[{name:"primary",gradientColor:Wt("text-primary",{defaultValue:"#3B71CA",inherit:!1})},{name:"secondary",gradientColor:Wt("text-primary-100",{defaultValue:"#9FA6B2",inherit:!1})},{name:"success",gradientColor:Wt("text-success",{defaultValue:"#14A44D",inherit:!1})},{name:"danger",gradientColor:Wt("text-danger",{defaultValue:"#DC4C64",inherit:!1})},{name:"warning",gradientColor:Wt("text-warning",{defaultValue:"#E4A11B",inherit:!1})},{name:"info",gradientColor:Wt("text-info",{defaultValue:"#54B4D3",inherit:!1})},{name:"light",gradientColor:"#fbfbfb"},{name:"dark",gradientColor:"#262626"}],wn=.5,gl={rippleCentered:!1,rippleColor:"",rippleColorDark:"",rippleDuration:"500ms",rippleRadius:0,rippleUnbound:!1},ml={rippleCentered:"boolean",rippleColor:"string",rippleColorDark:"string",rippleDuration:"string",rippleRadius:"number",rippleUnbound:"boolean"},El={ripple:"relative overflow-hidden inline-block align-bottom",rippleWave:"rounded-[50%] opacity-50 pointer-events-none absolute touch-none scale-0 transition-[transform,_opacity] ease-[cubic-bezier(0,0,0.15,1),_cubic-bezier(0,0,0.15,1)] z-[999]",unbound:"overflow-visible"},vl={ripple:"string",rippleWave:"string",unbound:"string"};class Oe{constructor(t,e,s){this._element=t,this._options=this._getConfig(e),this._classes=this._getClasses(s),this._currentColor=this._options.rippleColor,this._element&&(R.setData(t,ye,this),E.addClass(this._element,this._classes.ripple)),this._clickHandler=this._createRipple.bind(this),this._rippleTimer=null,this._isMinWidthSet=!1,this._initialClasses=null,this.init()}static get NAME(){return yi}init(){this._addClickEvent(this._element)}dispose(){R.removeData(this._element,ye),d.off(this._element,"mousedown",this._clickHandler),this._element=null,this._options=null}_autoInit(t){pl.forEach(e=>{h.closest(t.target,e)&&(this._element=h.closest(t.target,e))}),this._element.style.minWidth||(E.style(this._element,{"min-width":getComputedStyle(this._element).width}),this._isMinWidthSet=!0),this._options=this._getConfig(),this._classes=this._getClasses(),this._initialClasses=[...this._element.classList],E.addClass(this._element,this._classes.ripple),this._createRipple(t)}_addClickEvent(t){d.on(t,"mousedown",this._clickHandler)}_createRipple(t){this._element.className.indexOf(this._classes.ripple)<0&&E.addClass(this._element,this._classes.ripple);const{layerX:e,layerY:s}=t,n=t.offsetX||e,r=t.offsetY||s,o=this._element.offsetHeight,a=this._element.offsetWidth,l=this._durationToMsNumber(this._options.rippleDuration),u={offsetX:this._options.rippleCentered?o/2:n,offsetY:this._options.rippleCentered?a/2:r,height:o,width:a},c=this._getDiameter(u),f=this._options.rippleRadius||c/2,v={delay:l*wn,duration:l-l*wn},g={left:this._options.rippleCentered?`${a/2-f}px`:`${n-f}px`,top:this._options.rippleCentered?`${o/2-f}px`:`${r-f}px`,height:`${this._options.rippleRadius*2||c}px`,width:`${this._options.rippleRadius*2||c}px`,transitionDelay:`0s, ${v.delay}ms`,transitionDuration:`${l}ms, ${v.duration}ms`},O=Yt("div");this._createHTMLRipple({wrapper:this._element,ripple:O,styles:g}),this._removeHTMLRipple({ripple:O,duration:l})}_createHTMLRipple({wrapper:t,ripple:e,styles:s}){Object.keys(s).forEach(n=>e.style[n]=s[n]),E.addClass(e,this._classes.rippleWave),e.setAttribute("data-twe-ripple-ref",""),this._addColor(e,t),this._toggleUnbound(t),this._appendRipple(e,t)}_removeHTMLRipple({ripple:t,duration:e}){this._rippleTimer&&(clearTimeout(this._rippleTimer),this._rippleTimer=null),t&&setTimeout(()=>{t.classList.add("!opacity-0")},10),this._rippleTimer=setTimeout(()=>{if(t&&(t.remove(),this._element)){h.find("[data-twe-ripple-ref]",this._element).forEach(n=>{n.remove()}),this._isMinWidthSet&&(E.style(this._element,{"min-width":""}),this._isMinWidthSet=!1);const s=this._initialClasses?this._addedNewRippleClasses(this._classes.ripple,this._initialClasses):this._classes.ripple.split(" ");E.removeClass(this._element,s)}},e)}_addedNewRippleClasses(t,e){return t.split(" ").filter(s=>e.findIndex(n=>s===n)===-1)}_durationToMsNumber(t){return Number(t.replace("ms","").replace("s","000"))}_getConfig(t={}){const e=E.getDataAttributes(this._element);return t={...gl,...e,...t},x(yi,t,ml),t}_getClasses(t={}){const e=E.getDataClassAttributes(this._element);return t={...El,...e,...t},x(yi,t,vl),t}_getDiameter({offsetX:t,offsetY:e,height:s,width:n}){const r=e<=s/2,o=t<=n/2,a=(v,g)=>Math.sqrt(v**2+g**2),l=e===s/2&&t===n/2,u={first:r===!0&&o===!1,second:r===!0&&o===!0,third:r===!1&&o===!0,fourth:r===!1&&o===!1},c={topLeft:a(t,e),topRight:a(n-t,e),bottomLeft:a(t,s-e),bottomRight:a(n-t,s-e)};let f=0;return l||u.fourth?f=c.topLeft:u.third?f=c.topRight:u.second?f=c.bottomRight:u.first&&(f=c.bottomLeft),f*2}_appendRipple(t,e){e.appendChild(t),setTimeout(()=>{E.addClass(t,"opacity-0 scale-100")},50)}_toggleUnbound(t){this._options.rippleUnbound===!0?E.addClass(t,this._classes.unbound):E.removeClass(t,this._classes.unbound)}_addColor(t){let e=this._options.rippleColor||"rgb(0,0,0)";(localStorage.theme==="dark"||!("theme"in localStorage)&&window.matchMedia("(prefers-color-scheme: dark)").matches)&&(e=this._options.rippleColorDark||this._options.rippleColor);const s=_l.find(o=>o.name===e.toLowerCase()),n=s?this._colorToRGB(s.gradientColor).join(","):this._colorToRGB(e).join(","),r=fl.split("{{color}}").join(`${n}`);t.style.backgroundImage=`radial-gradient(circle, ${r})`}_colorToRGB(t){function e(r){return r.length<7&&(r=`#${r[1]}${r[1]}${r[2]}${r[2]}${r[3]}${r[3]}`),[parseInt(r.substr(1,2),16),parseInt(r.substr(3,2),16),parseInt(r.substr(5,2),16)]}function s(r){const o=document.body.appendChild(document.createElement("fictum")),a="rgb(1, 2, 3)";return o.style.color=a,o.style.color!==a||(o.style.color=r,o.style.color===a||o.style.color==="")?Ce:(r=getComputedStyle(o).color,document.body.removeChild(o),r)}function n(r){return r=r.match(/[.\d]+/g).map(o=>+Number(o)),r.length=3,r}return t.toLowerCase()==="transparent"?Ce:t[0]==="#"?e(t):(t.indexOf("rgb")===-1&&(t=s(t)),t.indexOf("rgb")===0?n(t):Ce)}static autoInitial(t){return function(e){t._autoInit(e)}}static jQueryInterface(t){return this.each(function(){return R.getData(this,ye)?null:new Oe(this,t)})}static getInstance(t){return R.getData(t,ye)}static getOrCreateInstance(t,e={}){return this.getInstance(t)||new this(t,typeof e=="object"?e:null)}}const Ci="modal",X=".twe.modal",Tn="Escape",An={backdrop:!0,keyboard:!0,focus:!0},yn={backdrop:"(boolean|string)",keyboard:"boolean",focus:"boolean"},bl={show:"transform-none",static:"scale-[1.02]",staticProperties:"transition-scale duration-300 ease-in-out",backdrop:"opacity-50 transition-all duration-300 ease-in-out fixed top-0 left-0 z-[1040] bg-black w-screen h-screen"},wl={show:"string",static:"string",staticProperties:"string",backdrop:"string"},Tl=`hide${X}`,Al=`hidePrevented${X}`,yl=`hidden${X}`,Cl=`show${X}`,Ol=`shown${X}`,Cn=`resize${X}`,On=`click.dismiss${X}`,Dn=`keydown.dismiss${X}`,Dl=`mouseup.dismiss${X}`,Nn=`mousedown.dismiss${X}`,Sn="data-twe-modal-open",Ln="data-twe-open",Jt="[data-twe-modal-dialog-ref]",Nl="[data-twe-modal-body-ref]";class te extends et{constructor(t,e,s){super(t),this._config=this._getConfig(e),this._classes=this._getClasses(s),this._backdrop=this._initializeBackDrop(),this._focustrap=this._initializeFocusTrap(),this._scrollBar=new ci,this._dialog=h.findOne(Jt,this._element),this._isShown=!1,this._ignoreBackdropClick=!1,this._isTransitioning=!1,this._didInit=!1,this._init()}static get NAME(){return Ci}static get Default(){return An}static get getDefaultType(){return yn}toggle(t){return this._isShown?this.hide():this.show(t)}show(t){this._isShown||this._isTransitioning||d.trigger(this._element,Cl,{relatedTarget:t}).defaultPrevented||(this._isShown=!0,this._isAnimated()&&(this._isTransitioning=!0),this._scrollBar.hide(),document.body.setAttribute(Sn,"true"),this._adjustDialog(),this._setEscapeEvent(),this._setResizeEvent(),d.on(this._dialog,Nn,()=>{d.one(this._element,Dl,s=>{s.target===this._element&&(this._ignoreBackdropClick=!0)})}),this._showElement(t),this._showBackdrop())}hide(){if(!this._isShown||this._isTransitioning||d.trigger(this._element,Tl).defaultPrevented)return;this._isShown=!1;const e=this._isAnimated();e&&(this._isTransitioning=!0),this._setEscapeEvent(),this._setResizeEvent(),this._focustrap.disable(),h.findOne(Jt,this._element).classList.remove(this._classes.show),d.off(this._element,On),d.off(this._dialog,Nn),this._queueCallback(()=>this._hideModal(),this._element,e),this._element.removeAttribute(Ln)}dispose(){[window,document,this._dialog].forEach(t=>d.off(t,X)),this._backdrop.dispose(),this._focustrap.disable(),super.dispose()}handleUpdate(){this._adjustDialog()}_init(){this._didInit||(js(te),this._didInit=!0)}_initializeBackDrop(){return new Vs({isVisible:!!this._config.backdrop,isAnimated:this._isAnimated(),backdropClasses:this._classes.backdrop})}_initializeFocusTrap(){return new Ws(this._element,{event:"keydown",condition:t=>t.key==="Tab"})}_showElement(t){const e=this._isAnimated(),s=h.findOne(Nl,this._dialog);(!this._element.parentNode||this._element.parentNode.nodeType!==Node.ELEMENT_NODE)&&document.body.append(this._element),this._element.style.display="block",this._element.classList.remove("hidden"),this._element.removeAttribute("aria-hidden"),this._element.setAttribute("aria-modal",!0),this._element.setAttribute("role","dialog"),this._element.setAttribute(`${Ln}`,"true"),this._element.scrollTop=0;const n=h.findOne(Jt,this._element);n.classList.add(this._classes.show),n.classList.remove("opacity-0"),n.classList.add("opacity-100"),s&&(s.scrollTop=0),e&&Ut(this._element);const r=()=>{this._config.focus&&this._focustrap.trap(),this._isTransitioning=!1,d.trigger(this._element,Ol,{relatedTarget:t})};this._queueCallback(r,this._dialog,e)}_setEscapeEvent(){this._isShown?d.on(document,Dn,t=>{this._config.keyboard&&t.key===Tn?(t.preventDefault(),this.hide()):!this._config.keyboard&&t.key===Tn&&this._triggerBackdropTransition()}):d.off(this._element,Dn)}_setResizeEvent(){this._isShown?d.on(window,Cn,()=>this._adjustDialog()):d.off(window,Cn)}_hideModal(){const t=h.findOne(Jt,this._element);t.classList.remove(this._classes.show),t.classList.remove("opacity-100"),t.classList.add("opacity-0");const e=ke(t);setTimeout(()=>{this._element.style.display="none"},e),this._element.setAttribute("aria-hidden",!0),this._element.removeAttribute("aria-modal"),this._element.removeAttribute("role"),this._isTransitioning=!1,this._backdrop.hide(()=>{document.body.removeAttribute(Sn),this._resetAdjustments(),this._scrollBar.reset(),d.trigger(this._element,yl)})}_showBackdrop(t){d.on(this._element,On,e=>{if(this._ignoreBackdropClick){this._ignoreBackdropClick=!1;return}e.target===e.currentTarget&&(this._config.backdrop===!0?this.hide():this._config.backdrop==="static"&&this._triggerBackdropTransition())}),this._backdrop.show(t)}_isAnimated(){return!!h.findOne(Jt,this._element)}_triggerBackdropTransition(){if(d.trigger(this._element,Al).defaultPrevented)return;const{classList:e,scrollHeight:s,style:n}=this._element,r=s>document.documentElement.clientHeight;if(!r&&n.overflowY==="hidden"||e.contains(this._classes.static))return;r||(n.overflowY="hidden"),e.add(...this._classes.static.split(" ")),e.add(...this._classes.staticProperties.split(" "));const o=ke(this._element);this._queueCallback(()=>{e.remove(this._classes.static),setTimeout(()=>{e.remove(...this._classes.staticProperties.split(" "))},o),r||this._queueCallback(()=>{n.overflowY=""},this._dialog)},this._dialog),this._element.focus()}_getConfig(t){return t={...An,...E.getDataAttributes(this._element),...typeof t=="object"?t:{}},x(Ci,t,yn),t}_getClasses(t){const e=E.getDataClassAttributes(this._element);return t={...bl,...e,...t},x(Ci,t,wl),t}_adjustDialog(){const t=this._element.scrollHeight>document.documentElement.clientHeight,e=this._scrollBar.getWidth(),s=e>0;(!s&&t&&!W()||s&&!t&&W())&&(this._element.style.paddingLeft=`${e}px`),(s&&!t&&!W()||!s&&t&&W())&&(this._element.style.paddingRight=`${e}px`)}_resetAdjustments(){this._element.style.paddingLeft="",this._element.style.paddingRight=""}static jQueryInterface(t,e){return this.each(function(){const s=te.getOrCreateInstance(this,t);if(typeof t=="string"){if(typeof s[t]>"u")throw new TypeError(`No method named "${t}"`);s[t](e)}})}}const Sl={carousel:{name:"Carousel",selector:"[data-twe-carousel-init]",isToggler:!1},input:{name:"Input",selector:"[data-twe-input-wrapper-init]",isToggler:!1},scrollspy:{name:"ScrollSpy",selector:"[data-twe-spy='scroll']",isToggler:!1},button:{name:"Button",selector:"[data-twe-toggle='button']",isToggler:!0,callback:(i,t)=>{d.on(document,`click.twe.${i.NAME}`,t,e=>{e.preventDefault();const s=e.target.closest(t);i.getOrCreateInstance(s).toggle()})}},collapse:{name:"Collapse",selector:"[data-twe-collapse-init]",isToggler:!0,callback:(i,t)=>{d.on(document,`click.twe.${i.NAME}.data-api`,t,function(e){(e.target.tagName==="A"||e.delegateTarget&&e.delegateTarget.tagName==="A")&&e.preventDefault();const s=Re(this);h.find(s).forEach(r=>{i.getOrCreateInstance(r,{toggle:!1}).toggle()})})}},dropdown:{name:"Dropdown",selector:"[data-twe-dropdown-toggle-ref]",isToggler:!0,callback:(i,t)=>{d.on(document,`click.twe.${i.NAME}`,t,function(e){e.preventDefault(),i.getOrCreateInstance(this).toggle()})}},ripple:{name:"Ripple",selector:"[data-twe-ripple-init]",isToggler:!0,callback:(i,t)=>{d.one(document,"mousedown",t,i.autoInitial(new i))}},offcanvas:{name:"Offcanvas",selector:"[data-twe-offcanvas-toggle]",isToggler:!0,callback:(i,t)=>{d.on(document,`click.twe.${i.NAME}.data-api`,t,function(e){const s=st(this);if(["A","AREA"].includes(this.tagName)&&e.preventDefault(),ct(this))return;d.one(s,i.EVENT_HIDDEN,()=>{Ct(this)&&this.focus()});const n=h.findOne(i.OPEN_SELECTOR);n&&n!==s&&i.getInstance(n).hide(),i.getOrCreateInstance(s).toggle(this)})}},tab:{name:"Tab",selector:"[data-twe-toggle='tab'], [data-twe-toggle='pill'], [data-twe-toggle='list']",isToggler:!0,callback:(i,t)=>{d.on(document,`click.twe.${i.NAME}.data-api`,t,function(e){if(["A","AREA"].includes(this.tagName)&&e.preventDefault(),ct(this))return;i.getOrCreateInstance(this).show()})}},tooltip:{name:"Tooltip",selector:"[data-twe-toggle='tooltip']",isToggler:!1,callback:(i,t)=>{[].slice.call(document.querySelectorAll(t)).map(function(s){return new i(s)})}},popover:{name:"Popover",selector:"[data-twe-toggle='popover']",isToggler:!0,callback:(i,t)=>{[].slice.call(document.querySelectorAll(t)).map(function(s){return new i(s)})}},modal:{name:"Modal",selector:"[data-twe-toggle='modal']",isToggler:!0,callback:(i,t)=>{d.on(document,`click.twe.${i.NAME}`,t,function(e){const s=st(this);["A","AREA"].includes(this.tagName)&&e.preventDefault(),d.one(s,i.EVENT_SHOW,o=>{o.defaultPrevented||d.one(s,i.EVENT_HIDDEN,()=>{Ct(this)&&this.focus()})});const n=h.findOne(`[${i.OPEN_SELECTOR}="true"]`);n&&i.getInstance(n).hide(),i.getOrCreateInstance(s).toggle(this)})}}},Ll=i=>{Pi(()=>{const t=xi();if(t){const e=i.NAME,s=t.fn[e];t.fn[e]=i.jQueryInterface,t.fn[e].Constructor=i,t.fn[e].noConflict=()=>(t.fn[e]=s,i.jQueryInterface)}})};class $l{constructor(){this.inits=[]}get initialized(){return this.inits}isInited(t){return this.inits.includes(t)}add(t){this.isInited(t)||this.inits.push(t)}}const Oi=new $l;let Bt;const Il=i=>Bt[i.NAME]||null,Rl=(i,t)=>{if(!i||!t.allowReinits&&Oi.isInited(i.NAME))return;Oi.add(i.NAME);const e=Il(i),s=(e==null?void 0:e.isToggler)||!1;if(Ll(i),e!=null&&e.advanced){e==null||e.advanced(i,e==null?void 0:e.selector);return}if(s){e==null||e.callback(i,e==null?void 0:e.selector);return}h.find(e==null?void 0:e.selector).forEach(n=>{let r=i.getInstance(n);r||(r=new i(n),e!=null&&e.onInit&&r[e.onInit]())})},kl={allowReinits:!1,checkOtherImports:!1};class xl{constructor(t){$i(this,"init",(t,e)=>{t.forEach(s=>Rl(s,e))});$i(this,"initTWE",(t,e)=>{const s={...kl,...e},n=Object.keys(Bt).map(r=>{if(!!document.querySelector(Bt[r].selector)){const a=t[Bt[r].name];return!a&&!Oi.isInited(r)&&s.checkOtherImports&&console.warn(`Please import ${Bt[r].name} from "tw-elements" package and add it to a object parameter inside "initTWE" function`),a}});this.init(n,s)});Bt=t}}const $n=new xl(Sl).initTWE;$n({Button:ne,Dropdown:z,Collapse:kt,Offcanvas:Pt,Carousel:q,Popover:ge,ScrollSpy:me,Tab:be,Tooltip:Et,Input:S,Ripple:Oe,Modal:te}),L.Button=ne,L.Carousel=q,L.Collapse=kt,L.Dropdown=z,L.Input=S,L.Modal=te,L.Offcanvas=Pt,L.Popover=ge,L.Ripple=Oe,L.ScrollSpy=me,L.Tab=be,L.Tooltip=Et,L.initTWE=$n,Object.defineProperty(L,Symbol.toStringTag,{value:"Module"})}); +//# sourceMappingURL=tw-elements.umd.min.js.map diff --git a/public/lib/zoom/zoom.min.umd.a527109b68c082a70f3697716dd72a9d5aa8b545cf800cecbbc7399f2ca6f6e0ce3e431f2062b48bbfa47c9ea42822714060bef309be073f49b9c0e30d318d7b.js b/public/lib/zoom/zoom.min.umd.a527109b68c082a70f3697716dd72a9d5aa8b545cf800cecbbc7399f2ca6f6e0ce3e431f2062b48bbfa47c9ea42822714060bef309be073f49b9c0e30d318d7b.js new file mode 100644 index 0000000..6d88cc5 --- /dev/null +++ b/public/lib/zoom/zoom.min.umd.a527109b68c082a70f3697716dd72a9d5aa8b545cf800cecbbc7399f2ca6f6e0ce3e431f2062b48bbfa47c9ea42822714060bef309be073f49b9c0e30d318d7b.js @@ -0,0 +1,2 @@ +/*! medium-zoom 1.1.0 | MIT License | https://github.com/francoischalifour/medium-zoom */ +!function(e,t){"object"==typeof exports&&"undefined"!=typeof module?module.exports=t():"function"==typeof define&&define.amd?define(t):(e=e||self).mediumZoom=t()}(this,(function(){"use strict";var e=Object.assign||function(e){for(var t=1;t1&&void 0!==arguments[1]?arguments[1]:{},c=window.Promise||function(e){function t(){}e(t,t)},u=function(e){var t=e.target;t!==N?-1!==O.indexOf(t)&&w({target:t}):E()},s=function(){if(!A&&T.original){var e=window.pageYOffset||document.documentElement.scrollTop||document.body.scrollTop||0;Math.abs(k-e)>S.scrollOffset&&setTimeout(E,150)}},f=function(e){var t=e.key||e.keyCode;"Escape"!==t&&"Esc"!==t&&27!==t||E()},p=function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},n=t;if(t.background&&(N.style.background=t.background),t.container&&t.container instanceof Object&&(n.container=e({},S.container,t.container)),t.template){var i=o(t.template)?t.template:document.querySelector(t.template);n.template=i}return S=e({},S,n),O.forEach((function(e){e.dispatchEvent(a("medium-zoom:update",{detail:{zoom:j}}))})),j},g=function(){var o=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};return t(e({},S,o))},v=function(){for(var e=arguments.length,t=Array(e),o=0;o0?t.reduce((function(e,t){return[].concat(e,i(t))}),[]):O;return n.forEach((function(e){e.classList.remove("medium-zoom-image"),e.dispatchEvent(a("medium-zoom:detach",{detail:{zoom:j}}))})),O=O.filter((function(e){return-1===n.indexOf(e)})),j},z=function(e,t){var o=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};return O.forEach((function(n){n.addEventListener("medium-zoom:"+e,t,o)})),x.push({type:"medium-zoom:"+e,listener:t,options:o}),j},y=function(e,t){var o=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};return O.forEach((function(n){n.removeEventListener("medium-zoom:"+e,t,o)})),x=x.filter((function(o){return!(o.type==="medium-zoom:"+e&&o.listener.toString()===t.toString())})),j},b=function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},i=t.target,r=function(){var t={width:document.documentElement.clientWidth,height:document.documentElement.clientHeight,left:0,top:0,right:0,bottom:0},i=void 0,r=void 0;if(S.container)if(S.container instanceof Object)i=(t=e({},t,S.container)).width-t.left-t.right-2*S.margin,r=t.height-t.top-t.bottom-2*S.margin;else{var d=(o(S.container)?S.container:document.querySelector(S.container)).getBoundingClientRect(),a=d.width,m=d.height,l=d.left,c=d.top;t=e({},t,{width:a,height:m,left:l,top:c})}i=i||t.width-2*S.margin,r=r||t.height-2*S.margin;var u=T.zoomedHd||T.original,s=n(u)?i:u.naturalWidth||i,f=n(u)?r:u.naturalHeight||r,p=u.getBoundingClientRect(),g=p.top,v=p.left,h=p.width,z=p.height,y=Math.min(Math.max(h,s),i)/h,b=Math.min(Math.max(z,f),r)/z,E=Math.min(y,b),w="scale("+E+") translate3d("+((i-h)/2-v+S.margin+t.left)/E+"px, "+((r-z)/2-g+S.margin+t.top)/E+"px, 0)";T.zoomed.style.transform=w,T.zoomedHd&&(T.zoomedHd.style.transform=w)};return new c((function(e){if(i&&-1===O.indexOf(i))e(j);else{if(T.zoomed)e(j);else{if(i)T.original=i;else{if(!(O.length>0))return void e(j);var t=O;T.original=t[0]}if(T.original.dispatchEvent(a("medium-zoom:open",{detail:{zoom:j}})),k=window.pageYOffset||document.documentElement.scrollTop||document.body.scrollTop||0,A=!0,T.zoomed=d(T.original),document.body.appendChild(N),S.template){var n=o(S.template)?S.template:document.querySelector(S.template);T.template=document.createElement("div"),T.template.appendChild(n.content.cloneNode(!0)),document.body.appendChild(T.template)}if(T.original.parentElement&&"PICTURE"===T.original.parentElement.tagName&&T.original.currentSrc&&(T.zoomed.src=T.original.currentSrc),document.body.appendChild(T.zoomed),window.requestAnimationFrame((function(){document.body.classList.add("medium-zoom--opened")})),T.original.classList.add("medium-zoom-image--hidden"),T.zoomed.classList.add("medium-zoom-image--opened"),T.zoomed.addEventListener("click",E),T.zoomed.addEventListener("transitionend",(function t(){A=!1,T.zoomed.removeEventListener("transitionend",t),T.original.dispatchEvent(a("medium-zoom:opened",{detail:{zoom:j}})),e(j)})),T.original.getAttribute("data-zoom-src")){T.zoomedHd=T.zoomed.cloneNode(),T.zoomedHd.removeAttribute("srcset"),T.zoomedHd.removeAttribute("sizes"),T.zoomedHd.removeAttribute("loading"),T.zoomedHd.src=T.zoomed.getAttribute("data-zoom-src"),T.zoomedHd.onerror=function(){clearInterval(m),console.warn("Unable to reach the zoom image target "+T.zoomedHd.src),T.zoomedHd=null,r()};var m=setInterval((function(){T.zoomedHd.complete&&(clearInterval(m),T.zoomedHd.classList.add("medium-zoom-image--opened"),T.zoomedHd.addEventListener("click",E),document.body.appendChild(T.zoomedHd),r())}),10)}else if(T.original.hasAttribute("srcset")){T.zoomedHd=T.zoomed.cloneNode(),T.zoomedHd.removeAttribute("sizes"),T.zoomedHd.removeAttribute("loading");var l=T.zoomedHd.addEventListener("load",(function(){T.zoomedHd.removeEventListener("load",l),T.zoomedHd.classList.add("medium-zoom-image--opened"),T.zoomedHd.addEventListener("click",E),document.body.appendChild(T.zoomedHd),r()}))}else r()}}}))},E=function(){return new c((function(e){if(!A&&T.original){A=!0,document.body.classList.remove("medium-zoom--opened"),T.zoomed.style.transform="",T.zoomedHd&&(T.zoomedHd.style.transform=""),T.template&&(T.template.style.transition="opacity 150ms",T.template.style.opacity=0),T.original.dispatchEvent(a("medium-zoom:close",{detail:{zoom:j}})),T.zoomed.addEventListener("transitionend",(function t(){T.original.classList.remove("medium-zoom-image--hidden"),document.body.removeChild(T.zoomed),T.zoomedHd&&document.body.removeChild(T.zoomedHd),document.body.removeChild(N),T.zoomed.classList.remove("medium-zoom-image--opened"),T.template&&document.body.removeChild(T.template),A=!1,T.zoomed.removeEventListener("transitionend",t),T.original.dispatchEvent(a("medium-zoom:closed",{detail:{zoom:j}})),T.original=null,T.zoomed=null,T.zoomedHd=null,T.template=null,e(j)}))}else e(j)}))},w=function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},t=e.target;return T.original?E():b({target:t})},L=function(){return S},H=function(){return O},C=function(){return T.original},O=[],x=[],A=!1,k=0,S=l,T={original:null,zoomed:null,zoomedHd:null,template:null};"[object Object]"===Object.prototype.toString.call(m)?S=m:(m||"string"==typeof m)&&v(m),S=e({margin:0,background:"#fff",scrollOffset:40,container:null,template:null},S);var N=r(S.background);document.addEventListener("click",u),document.addEventListener("keyup",f),document.addEventListener("scroll",s),window.addEventListener("resize",E);var j={open:b,close:E,toggle:w,update:p,clone:g,attach:v,detach:h,on:z,off:y,getOptions:L,getImages:H,getZoomedImage:C};return j}})); diff --git a/public/page/1/index.html b/public/page/1/index.html new file mode 100644 index 0000000..de6695d --- /dev/null +++ b/public/page/1/index.html @@ -0,0 +1,9 @@ + + + + http://localhost:1313/ + + + + + diff --git a/public/projects/garmin-eink/basic-setup.jpg b/public/projects/garmin-eink/basic-setup.jpg new file mode 100644 index 0000000..04f4c22 Binary files /dev/null and b/public/projects/garmin-eink/basic-setup.jpg differ diff --git a/public/projects/garmin-eink/featured.jpg b/public/projects/garmin-eink/featured.jpg new file mode 100644 index 0000000..602b74c Binary files /dev/null and b/public/projects/garmin-eink/featured.jpg differ diff --git a/public/projects/garmin-eink/featured_hu_65de4d7558a4d614.jpg b/public/projects/garmin-eink/featured_hu_65de4d7558a4d614.jpg new file mode 100644 index 0000000..826bba1 Binary files /dev/null and b/public/projects/garmin-eink/featured_hu_65de4d7558a4d614.jpg differ diff --git a/public/projects/garmin-eink/index.html b/public/projects/garmin-eink/index.html new file mode 100644 index 0000000..1eb040c --- /dev/null +++ b/public/projects/garmin-eink/index.html @@ -0,0 +1,892 @@ + + + + + + + + + + + + + Garmin Eink · Ash Marlow + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +
    + + +
    + + + + +
    + +

    + Garmin Eink +

    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + + ·482 words·3 mins + + + + +
    + + + + + + + + + + + +
    + + + + + + + + + + + + + + +
    + +
    + + +
    +
    +
    +
    + + + + + + +
    + + + +
    + + +
    + + + + + + + +
    + + +
    + + +

    📋 Project Highlights +
    + + + # + + +

    +
      +
    • Goal: Show my running progress on my desk
    • +
    • Tech Stack: Python, ESP32, C#
    • +
    • Outcome: A clean and simple setup that works reliably
    • +
    +

    For christmas my wife got me a virtual running challenge. I have to run 80km with a smart watch and at the end I get a nice Scooby-Doo medal. The issue is, now that everything requires its own app I forget to open it. My Garmin watch tracks all my running and syncs it to the running app but I wanted a way see my progress, clearly on my desk in the hope it will motivate me to get out and run more.

    +

    I had a waveshare 4.2" eink display in my drawer that ive been looking to find a good use for. A quick search only and I found a python wrapper that can pull data from Garmin connect and suddenly I had all the pieces to put this project together.

    +
    + +

    Step 1 - Getting the Garmin Data +
    + + + # + + +

    +

    I found this brilliant tool online called Python Garmin Connect that allows you to input your Garmin account details and pull specific data from their API. The tool was installed and setup up as a system service on my server and the results servered with a Caddy web server.

    + +

    Step 2 - Displaying data on the eink screen +
    + + + # + + +

    +

    In VS Code I installed platform IO and connected my ESP32. The code was written to connect to wifi, grab the data from the web server and display it to the eink. I gave it a title and a progress bar with percentage to clearly show how much I have completed. I also added a Last Updated time stamp and logic to put the ESP to deep sleep and only update each morning after my typical workout time slot.

    +

    Early basic setup
    +

    +

    I later decided it made more sense to show todays date at the botton my the page, making it double as a basic daily calender.

    +

    One of the greatest challenges was my desicion to include an image. An easier option would have been to buy an ESP32 with a micro SD card slot to give me an easier way of storing the image. Wanted to make this work without buying anything new I decided to stream the image from my Caddy server directly ro the display. With some AI magic I had a bash script that would convert any image I gave it to a resized monochrome bitmap suitable for the basic eink display. The great thing about using this approach is it makes changing the image for a different future challenge much easier.

    + +

    Step 3 - The case +
    + + + # + + +

    +

    The case comes from printables and felt like the cleanest option.

    + +

    🏁 Summary & Lessons Learned +
    + + + # + + +

    +

    Wrap up your project here. What would you do differently next time? This provides that “closing” feel for a future employer.

    +

    Early basic setup
    +

    + + + + +
    + + + + + + + +
    +
    + + + +
    + + + + + + + + + + + + + +
    + + + + +
    + + +

    + © + 2026 + +

    + + + + +

    + + + Powered by Hugo & Blowfish +

    + +
    + + + + + +
    + + +
    + + + diff --git a/public/projects/garmin-eink/index.xml b/public/projects/garmin-eink/index.xml new file mode 100644 index 0000000..fbe3739 --- /dev/null +++ b/public/projects/garmin-eink/index.xml @@ -0,0 +1,13 @@ + + + + Garmin Eink on Ash Marlow + http://localhost:1313/projects/garmin-eink/ + Recent content in Garmin Eink on Ash Marlow + Hugo -- gohugo.io + en-gb + © 2026 + + + + diff --git a/public/projects/garmin-eink/medal.webp b/public/projects/garmin-eink/medal.webp new file mode 100644 index 0000000..6105f87 Binary files /dev/null and b/public/projects/garmin-eink/medal.webp differ diff --git a/public/projects/index.html b/public/projects/index.html new file mode 100644 index 0000000..74a21a0 --- /dev/null +++ b/public/projects/index.html @@ -0,0 +1,1128 @@ + + + + + + + + + + + + + Projects · Ash Marlow + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +
    + + + + + + + + + +
    + +

    Projects

    +
    + + + + + + + + + + + + + + + + + + + + + + +
    + + +
    + + +
    +
    + + + + +
    + +
    + +
    +
    + + + + + + + + + + +
    + + + +

    + 2026 +

    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + +
    + +
    + +
    +
    + +

    + Solar Cells + +

    +
    + + +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + + ·437 words·3 mins + + + + +
    + + + + + + + + + + + +
    + +
    +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + +
    + +
    + +
    +
    + +

    + Garmin Eink + +

    +
    + + +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + + ·482 words·3 mins + + + + +
    + + + + + + + + + + + +
    + +
    +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + +
    + +
    + +
    +
    + +

    + Smart Train + +

    +
    + + +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + + ·86 words·1 min + + + + +
    + + + + + + + + + + + +
    + +
    +
    +
    + + + + +
    + + + + + + + + + + + + + + + + + + +
    + + + + +
    + + +

    + © + 2026 + +

    + + + + +

    + + + Powered by Hugo & Blowfish +

    + +
    + + + + + +
    + + +
    + + + diff --git a/public/projects/index.xml b/public/projects/index.xml new file mode 100644 index 0000000..ccd1ded --- /dev/null +++ b/public/projects/index.xml @@ -0,0 +1,43 @@ + + + + Projects on Ash Marlow + http://localhost:1313/projects/ + Recent content in Projects on Ash Marlow + Hugo -- gohugo.io + en-gb + © 2026 + Fri, 13 Mar 2026 22:16:00 +0000 + + + Solar Cells + http://localhost:1313/projects/solar-cells/ + Fri, 13 Mar 2026 22:16:00 +0000 + + http://localhost:1313/projects/solar-cells/ + Final year University project making Dye Sensitised Solar Cells. + + + + + Garmin Eink + http://localhost:1313/projects/garmin-eink/ + Fri, 20 Feb 2026 15:42:06 +0000 + + http://localhost:1313/projects/garmin-eink/ + Using an Eink display with an ESP32 to track and motivate me for a virtual running challenge + + + + + Smart Train + http://localhost:1313/projects/smart-train/ + Fri, 20 Feb 2026 12:27:11 +0000 + + http://localhost:1313/projects/smart-train/ + EVERYTHING MUST BE SMART! I take an old Hornby train and make it controllable from Home Assistant + + + + + diff --git a/public/projects/page/1/index.html b/public/projects/page/1/index.html new file mode 100644 index 0000000..2f6cc03 --- /dev/null +++ b/public/projects/page/1/index.html @@ -0,0 +1,9 @@ + + + + http://localhost:1313/projects/ + + + + + diff --git a/public/projects/smart-train/featured.png b/public/projects/smart-train/featured.png new file mode 100644 index 0000000..b4a3ef1 Binary files /dev/null and b/public/projects/smart-train/featured.png differ diff --git a/public/projects/smart-train/featured_hu_32231a97a98ee4cd.png b/public/projects/smart-train/featured_hu_32231a97a98ee4cd.png new file mode 100644 index 0000000..80284bc Binary files /dev/null and b/public/projects/smart-train/featured_hu_32231a97a98ee4cd.png differ diff --git a/public/projects/smart-train/index.html b/public/projects/smart-train/index.html new file mode 100644 index 0000000..74277c0 --- /dev/null +++ b/public/projects/smart-train/index.html @@ -0,0 +1,846 @@ + + + + + + + + + + + + + Smart Train · Ash Marlow + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +
    + + +
    + + + + +
    + +

    + Smart Train +

    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + + ·86 words·1 min + + + + +
    + + + + + + + + + + + +
    + + + + + + + + + + + + + + +
    + +
    + + +
    +
    +
    +
    + + + + + + +
    + + + +
    + + +
    + + + + + + + +
    + + +
    + + +

    📋 Project Highlights +
    + + + # + + +

    +
      +
    • Goal: What was the main objective?
    • +
    • Tech Stack: Proxmox, Docker, Caddy, etc.
    • +
    • Outcome: Did it work? Is it still running?
    • +
    +
    + +

    🚀 The Deep Dive +
    + + + # + + +

    +

    This is where you write your main paragraphs. You can drop images anywhere using the standard syntax. Thanks to the style block above, they will automatically stay at 50% width.

    +

    Description
    +

    +
    + +

    🏁 Summary & Lessons Learned +
    + + + # + + +

    +

    Wrap up your project here. What would you do differently next time? This provides that “closing” feel for a future employer.

    + + + + +
    + + + + + + + +
    +
    + + + +
    + + + + + + + + + + + + + +
    + + + + +
    + + +

    + © + 2026 + +

    + + + + +

    + + + Powered by Hugo & Blowfish +

    + +
    + + + + + +
    + + +
    + + + diff --git a/public/projects/smart-train/index.xml b/public/projects/smart-train/index.xml new file mode 100644 index 0000000..c4d1739 --- /dev/null +++ b/public/projects/smart-train/index.xml @@ -0,0 +1,13 @@ + + + + Smart Train on Ash Marlow + http://localhost:1313/projects/smart-train/ + Recent content in Smart Train on Ash Marlow + Hugo -- gohugo.io + en-gb + © 2026 + + + + diff --git a/public/projects/smart-train/station.png b/public/projects/smart-train/station.png new file mode 100644 index 0000000..b289856 Binary files /dev/null and b/public/projects/smart-train/station.png differ diff --git a/public/projects/smart-train/tunnel.jpg b/public/projects/smart-train/tunnel.jpg new file mode 100644 index 0000000..ca9146f Binary files /dev/null and b/public/projects/smart-train/tunnel.jpg differ diff --git a/public/projects/solar-cells/Arduino.jpg b/public/projects/solar-cells/Arduino.jpg new file mode 100644 index 0000000..2eecbd5 Binary files /dev/null and b/public/projects/solar-cells/Arduino.jpg differ diff --git a/public/projects/solar-cells/Multimeter.jpg b/public/projects/solar-cells/Multimeter.jpg new file mode 100644 index 0000000..873cb6b Binary files /dev/null and b/public/projects/solar-cells/Multimeter.jpg differ diff --git a/public/projects/solar-cells/featured.jpg b/public/projects/solar-cells/featured.jpg new file mode 100644 index 0000000..20db573 Binary files /dev/null and b/public/projects/solar-cells/featured.jpg differ diff --git a/public/projects/solar-cells/featured_hu_3165a34c498eca82.jpg b/public/projects/solar-cells/featured_hu_3165a34c498eca82.jpg new file mode 100644 index 0000000..396b31f Binary files /dev/null and b/public/projects/solar-cells/featured_hu_3165a34c498eca82.jpg differ diff --git a/public/projects/solar-cells/index.html b/public/projects/solar-cells/index.html new file mode 100644 index 0000000..e2edc1c --- /dev/null +++ b/public/projects/solar-cells/index.html @@ -0,0 +1,889 @@ + + + + + + + + + + + + + Solar Cells · Ash Marlow + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +
    + + +
    + + + + +
    + +

    + Solar Cells +

    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + + ·437 words·3 mins + + + + +
    + + + + + + + + + + + +
    + + + + + + + + + + + + + + +
    + +
    + + +
    +
    +
    +
    + + + + + + +
    + + + +
    + + +
    + + + + + + + +
    + + +
    + + +

    📋 Project Highlights +
    + + + # + + +

    +
      +
    • Fabricate Dye Sensitized Solar Cell using Natural Dyes
    • +
    • Investigate a variety of different dyes and their effects on cell efficiency
    • +
    • Develop cosensitized cells by mixing compatible dyes and comparing their performance
    • +
    +
    +

    For my final year project of my BSc Physics degree, I fabricated solar cells using natural dyes extracted from plants, fruits and vegetables. +The motivation being the project was to investigate alternative methods for solar power generation which don’t involve conventional silicon as this can be difficult to recycle at end of use.

    + +

    Benchmarking a silicon cell +
    + + + # + + +

    +

    To test the cells that we would be making, a light box was setup. +A standard silicon cell was then tested to get an understanding of how much power could reasonably be harnessed from the light source and to give a benchmark to compare results against. +Initially the testing of cells was done using a separate voltmeter and ammeter to record the I-V curve created by the cell. +This was found to be very inefficient and was difficult to reliably repeat, so I setup a test circuit with an Arduino to record the result.

    +

    Arduino Digital Poteniometer
    +

    + +

    Extracting the Dyes +
    + + + # + + +

    +

    The dyes were extracted from a range of plants, fruits and vegetables all based on success in previous research. +The exact extraction method had to vary slightly based on the source of the dye but the base principle involved crushing the source in either water or ethanol and then filtering the solution.

    + +

    Analyzing the Dye +
    + + + # + + +

    +

    With the dye extracted it was then watered down and analyzed using a spectrometer. +This allowed us to see the absorption of the dye over a range of wavelengths. +The absorption of the dye in the wavelengths of the sun are one of the most important properties of the dye so testing this at an early stage helped us rule out certain dye sources without making cells for them.

    + +

    Making the Cells +
    + + + # + + +

    +

    To make the cells, a Titanium dioxide paste was made, and spread thinly onto a sheet of conductive glass. +The cell was then heated on a hotplate and left to cool. +The extracted dye was then carefully dropped onto the Ti02 with a pipet and left to soak in. +The excess dye could then be rinsed off and the cell is left to dry. +Finally a small amount of redox electrolyte solution is sandwiched between the Ti02 layer and another sheet of conductive glass, and the pieces are clamped together.

    + +

    🏁 Summary & Lessons Learned +
    + + + # + + +

    +

    Wrap up your project here. What would you do differently next time? This provides that “closing” feel for a future employer.

    + + + + +
    + + + + + + + +
    +
    + + + +
    + + + + + + + + + + + + + +
    + + + + +
    + + +

    + © + 2026 + +

    + + + + +

    + + + Powered by Hugo & Blowfish +

    + +
    + + + + + +
    + + +
    + + + diff --git a/public/projects/solar-cells/index.xml b/public/projects/solar-cells/index.xml new file mode 100644 index 0000000..afb97d3 --- /dev/null +++ b/public/projects/solar-cells/index.xml @@ -0,0 +1,13 @@ + + + + Solar Cells on Ash Marlow + http://localhost:1313/projects/solar-cells/ + Recent content in Solar Cells on Ash Marlow + Hugo -- gohugo.io + en-gb + © 2026 + + + + diff --git a/public/site.webmanifest b/public/site.webmanifest new file mode 100644 index 0000000..45dc8a2 --- /dev/null +++ b/public/site.webmanifest @@ -0,0 +1 @@ +{"name":"","short_name":"","icons":[{"src":"/android-chrome-192x192.png","sizes":"192x192","type":"image/png"},{"src":"/android-chrome-512x512.png","sizes":"512x512","type":"image/png"}],"theme_color":"#ffffff","background_color":"#ffffff","display":"standalone"} \ No newline at end of file diff --git a/public/sitemap.xml b/public/sitemap.xml new file mode 100644 index 0000000..97cfec1 --- /dev/null +++ b/public/sitemap.xml @@ -0,0 +1,40 @@ + + + + + http://localhost:1313/blog/ + 2026-03-13T22:44:48+00:00 + + + http://localhost:1313/ + 2026-03-13T22:44:48+00:00 + + + http://localhost:1313/blog/retro-handhelds/ + 2026-03-13T22:44:48+00:00 + + + http://localhost:1313/projects/ + 2026-03-13T22:16:00+00:00 + + + http://localhost:1313/projects/solar-cells/ + 2026-03-13T22:16:00+00:00 + + + http://localhost:1313/projects/garmin-eink/ + 2026-02-20T15:42:06+00:00 + + + http://localhost:1313/projects/smart-train/ + 2026-02-20T12:27:11+00:00 + + + http://localhost:1313/blog/hello-world/ + 2026-02-19T00:00:00+00:00 + + + http://localhost:1313/about/ + + diff --git a/public/tags/electronics/index.html b/public/tags/electronics/index.html new file mode 100644 index 0000000..64a0b7f --- /dev/null +++ b/public/tags/electronics/index.html @@ -0,0 +1,810 @@ + + + + + + + + + + + + + Electronics · Ash Marlow + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +
    + + + +
    + +

    Electronics

    +
    + + + + + + + + + + + + + + + + + + + + + + +
    + + +
    + + +
    +
    + +
    + +
    + + + + + + + + +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + +
    + +
    + +
    +
    + +

    + Solar Cells + +

    +
    + + +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + + ·437 words·3 mins + + + + +
    + + + + + + + + + + + +
    + +
    +
    +
    + + + +
    + + + + + + + + + + + + + + + + + + +
    + + + + +
    + + +

    + © + 2026 + +

    + + + + +

    + + + Powered by Hugo & Blowfish +

    + +
    + + + + + +
    + + +
    + + + diff --git a/public/tags/electronics/index.xml b/public/tags/electronics/index.xml new file mode 100644 index 0000000..757682d --- /dev/null +++ b/public/tags/electronics/index.xml @@ -0,0 +1,23 @@ + + + + Electronics on Ash Marlow + http://localhost:1313/tags/electronics/ + Recent content in Electronics on Ash Marlow + Hugo -- gohugo.io + en-gb + © 2026 + Fri, 13 Mar 2026 22:16:00 +0000 + + + Solar Cells + http://localhost:1313/projects/solar-cells/ + Fri, 13 Mar 2026 22:16:00 +0000 + + http://localhost:1313/projects/solar-cells/ + Final year University project making Dye Sensitised Solar Cells. + + + + + diff --git a/public/tags/electronics/page/1/index.html b/public/tags/electronics/page/1/index.html new file mode 100644 index 0000000..91d7b54 --- /dev/null +++ b/public/tags/electronics/page/1/index.html @@ -0,0 +1,9 @@ + + + + http://localhost:1313/tags/electronics/ + + + + + diff --git a/public/tags/esp32/index.html b/public/tags/esp32/index.html new file mode 100644 index 0000000..76c3d8f --- /dev/null +++ b/public/tags/esp32/index.html @@ -0,0 +1,959 @@ + + + + + + + + + + + + + ESP32 · Ash Marlow + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +
    + + + +
    + +

    ESP32

    +
    + + + + + + + + + + + + + + + + + + + + + + +
    + + +
    + + +
    +
    + +
    + +
    + + + + + + + + +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + +
    + +
    + +
    +
    + +

    + Garmin Eink + +

    +
    + + +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + + ·482 words·3 mins + + + + +
    + + + + + + + + + + + +
    + +
    +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + +
    + +
    + +
    +
    + +

    + Smart Train + +

    +
    + + +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + + ·86 words·1 min + + + + +
    + + + + + + + + + + + +
    + +
    +
    +
    + + + +
    + + + + + + + + + + + + + + + + + + +
    + + + + +
    + + +

    + © + 2026 + +

    + + + + +

    + + + Powered by Hugo & Blowfish +

    + +
    + + + + + +
    + + +
    + + + diff --git a/public/tags/esp32/index.xml b/public/tags/esp32/index.xml new file mode 100644 index 0000000..c32423c --- /dev/null +++ b/public/tags/esp32/index.xml @@ -0,0 +1,33 @@ + + + + ESP32 on Ash Marlow + http://localhost:1313/tags/esp32/ + Recent content in ESP32 on Ash Marlow + Hugo -- gohugo.io + en-gb + © 2026 + Fri, 20 Feb 2026 15:42:06 +0000 + + + Garmin Eink + http://localhost:1313/projects/garmin-eink/ + Fri, 20 Feb 2026 15:42:06 +0000 + + http://localhost:1313/projects/garmin-eink/ + Using an Eink display with an ESP32 to track and motivate me for a virtual running challenge + + + + + Smart Train + http://localhost:1313/projects/smart-train/ + Fri, 20 Feb 2026 12:27:11 +0000 + + http://localhost:1313/projects/smart-train/ + EVERYTHING MUST BE SMART! I take an old Hornby train and make it controllable from Home Assistant + + + + + diff --git a/public/tags/esp32/page/1/index.html b/public/tags/esp32/page/1/index.html new file mode 100644 index 0000000..2171fdd --- /dev/null +++ b/public/tags/esp32/page/1/index.html @@ -0,0 +1,9 @@ + + + + http://localhost:1313/tags/esp32/ + + + + + diff --git a/public/tags/games/index.html b/public/tags/games/index.html new file mode 100644 index 0000000..77ce981 --- /dev/null +++ b/public/tags/games/index.html @@ -0,0 +1,810 @@ + + + + + + + + + + + + + Games · Ash Marlow + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +
    + + + +
    + +

    Games

    +
    + + + + + + + + + + + + + + + + + + + + + + +
    + + +
    + + +
    +
    + +
    + +
    + + + + + + + + +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + +
    + +
    + +
    +
    + +

    + Retro Handhelds + +

    +
    + + +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + + ·677 words·4 mins + + + + +
    + + + + + + + + + + + +
    + +
    +
    +
    + + + +
    + + + + + + + + + + + + + + + + + + +
    + + + + +
    + + +

    + © + 2026 + +

    + + + + +

    + + + Powered by Hugo & Blowfish +

    + +
    + + + + + +
    + + +
    + + + diff --git a/public/tags/games/index.xml b/public/tags/games/index.xml new file mode 100644 index 0000000..4df3372 --- /dev/null +++ b/public/tags/games/index.xml @@ -0,0 +1,23 @@ + + + + Games on Ash Marlow + http://localhost:1313/tags/games/ + Recent content in Games on Ash Marlow + Hugo -- gohugo.io + en-gb + © 2026 + Fri, 13 Mar 2026 22:44:48 +0000 + + + Retro Handhelds + http://localhost:1313/blog/retro-handhelds/ + Fri, 13 Mar 2026 22:44:48 +0000 + + http://localhost:1313/blog/retro-handhelds/ + Retro handheld collection + + + + + diff --git a/public/tags/games/page/1/index.html b/public/tags/games/page/1/index.html new file mode 100644 index 0000000..7a20adf --- /dev/null +++ b/public/tags/games/page/1/index.html @@ -0,0 +1,9 @@ + + + + http://localhost:1313/tags/games/ + + + + + diff --git a/public/tags/index.html b/public/tags/index.html new file mode 100644 index 0000000..65246c5 --- /dev/null +++ b/public/tags/index.html @@ -0,0 +1,748 @@ + + + + + + + + + + + + + Tags · Ash Marlow + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +
    + + + +
    + +

    Tags

    +
    + + + + + + + + + + + + + + + + + + + + + + +
    + + +
    + + +
    +
    + + + + +
    + + + + +
    +

    + ESP32 + + · + + 2 + + +

    +
    + + +
    +

    + Games + + · + + 1 + + +

    +
    + + + + + + + + + + + +
    + + + + + + + + + + + + + + +
    + + + + +
    + + +

    + © + 2026 + +

    + + + + +

    + + + Powered by Hugo & Blowfish +

    + +
    + + + + + +
    + + +
    + + + diff --git a/public/tags/index.xml b/public/tags/index.xml new file mode 100644 index 0000000..ae5f92c --- /dev/null +++ b/public/tags/index.xml @@ -0,0 +1,73 @@ + + + + Tags on Ash Marlow + http://localhost:1313/tags/ + Recent content in Tags on Ash Marlow + Hugo -- gohugo.io + en-gb + © 2026 + Fri, 13 Mar 2026 22:44:48 +0000 + + + Games + http://localhost:1313/tags/games/ + Fri, 13 Mar 2026 22:44:48 +0000 + + http://localhost:1313/tags/games/ + + + + + + Electronics + http://localhost:1313/tags/electronics/ + Fri, 13 Mar 2026 22:16:00 +0000 + + http://localhost:1313/tags/electronics/ + + + + + + University + http://localhost:1313/tags/university/ + Fri, 13 Mar 2026 22:16:00 +0000 + + http://localhost:1313/tags/university/ + + + + + + ESP32 + http://localhost:1313/tags/esp32/ + Fri, 20 Feb 2026 15:42:06 +0000 + + http://localhost:1313/tags/esp32/ + + + + + + Self-Hosting + http://localhost:1313/tags/self-hosting/ + Fri, 20 Feb 2026 15:42:06 +0000 + + http://localhost:1313/tags/self-hosting/ + + + + + + Smart-Home + http://localhost:1313/tags/smart-home/ + Fri, 20 Feb 2026 12:27:11 +0000 + + http://localhost:1313/tags/smart-home/ + + + + + + diff --git a/public/tags/self-hosting/index.html b/public/tags/self-hosting/index.html new file mode 100644 index 0000000..797a937 --- /dev/null +++ b/public/tags/self-hosting/index.html @@ -0,0 +1,810 @@ + + + + + + + + + + + + + Self-Hosting · Ash Marlow + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +
    + + + +
    + +

    Self-Hosting

    +
    + + + + + + + + + + + + + + + + + + + + + + +
    + + +
    + + +
    +
    + +
    + +
    + + + + + + + + +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + +
    + +
    + +
    +
    + +

    + Garmin Eink + +

    +
    + + +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + + ·482 words·3 mins + + + + +
    + + + + + + + + + + + +
    + +
    +
    +
    + + + +
    + + + + + + + + + + + + + + + + + + +
    + + + + +
    + + +

    + © + 2026 + +

    + + + + +

    + + + Powered by Hugo & Blowfish +

    + +
    + + + + + +
    + + +
    + + + diff --git a/public/tags/self-hosting/index.xml b/public/tags/self-hosting/index.xml new file mode 100644 index 0000000..fa20d79 --- /dev/null +++ b/public/tags/self-hosting/index.xml @@ -0,0 +1,23 @@ + + + + Self-Hosting on Ash Marlow + http://localhost:1313/tags/self-hosting/ + Recent content in Self-Hosting on Ash Marlow + Hugo -- gohugo.io + en-gb + © 2026 + Fri, 20 Feb 2026 15:42:06 +0000 + + + Garmin Eink + http://localhost:1313/projects/garmin-eink/ + Fri, 20 Feb 2026 15:42:06 +0000 + + http://localhost:1313/projects/garmin-eink/ + Using an Eink display with an ESP32 to track and motivate me for a virtual running challenge + + + + + diff --git a/public/tags/self-hosting/page/1/index.html b/public/tags/self-hosting/page/1/index.html new file mode 100644 index 0000000..2eccf7c --- /dev/null +++ b/public/tags/self-hosting/page/1/index.html @@ -0,0 +1,9 @@ + + + + http://localhost:1313/tags/self-hosting/ + + + + + diff --git a/public/tags/smart-home/index.html b/public/tags/smart-home/index.html new file mode 100644 index 0000000..e477e5c --- /dev/null +++ b/public/tags/smart-home/index.html @@ -0,0 +1,810 @@ + + + + + + + + + + + + + Smart-Home · Ash Marlow + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +
    + + + +
    + +

    Smart-Home

    +
    + + + + + + + + + + + + + + + + + + + + + + +
    + + +
    + + +
    +
    + +
    + +
    + + + + + + + + +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + +
    + +
    + +
    +
    + +

    + Smart Train + +

    +
    + + +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + + ·86 words·1 min + + + + +
    + + + + + + + + + + + +
    + +
    +
    +
    + + + +
    + + + + + + + + + + + + + + + + + + +
    + + + + +
    + + +

    + © + 2026 + +

    + + + + +

    + + + Powered by Hugo & Blowfish +

    + +
    + + + + + +
    + + +
    + + + diff --git a/public/tags/smart-home/index.xml b/public/tags/smart-home/index.xml new file mode 100644 index 0000000..736242f --- /dev/null +++ b/public/tags/smart-home/index.xml @@ -0,0 +1,23 @@ + + + + Smart-Home on Ash Marlow + http://localhost:1313/tags/smart-home/ + Recent content in Smart-Home on Ash Marlow + Hugo -- gohugo.io + en-gb + © 2026 + Fri, 20 Feb 2026 12:27:11 +0000 + + + Smart Train + http://localhost:1313/projects/smart-train/ + Fri, 20 Feb 2026 12:27:11 +0000 + + http://localhost:1313/projects/smart-train/ + EVERYTHING MUST BE SMART! I take an old Hornby train and make it controllable from Home Assistant + + + + + diff --git a/public/tags/smart-home/page/1/index.html b/public/tags/smart-home/page/1/index.html new file mode 100644 index 0000000..5e60757 --- /dev/null +++ b/public/tags/smart-home/page/1/index.html @@ -0,0 +1,9 @@ + + + + http://localhost:1313/tags/smart-home/ + + + + + diff --git a/public/tags/university/index.html b/public/tags/university/index.html new file mode 100644 index 0000000..6730fb3 --- /dev/null +++ b/public/tags/university/index.html @@ -0,0 +1,810 @@ + + + + + + + + + + + + + University · Ash Marlow + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +
    + + + +
    + +

    University

    +
    + + + + + + + + + + + + + + + + + + + + + + +
    + + +
    + + +
    +
    + +
    + +
    + + + + + + + + +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + +
    + +
    + +
    +
    + +

    + Solar Cells + +

    +
    + + +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + + ·437 words·3 mins + + + + +
    + + + + + + + + + + + +
    + +
    +
    +
    + + + +
    + + + + + + + + + + + + + + + + + + +
    + + + + +
    + + +

    + © + 2026 + +

    + + + + +

    + + + Powered by Hugo & Blowfish +

    + +
    + + + + + +
    + + +
    + + + diff --git a/public/tags/university/index.xml b/public/tags/university/index.xml new file mode 100644 index 0000000..1f57d2a --- /dev/null +++ b/public/tags/university/index.xml @@ -0,0 +1,23 @@ + + + + University on Ash Marlow + http://localhost:1313/tags/university/ + Recent content in University on Ash Marlow + Hugo -- gohugo.io + en-gb + © 2026 + Fri, 13 Mar 2026 22:16:00 +0000 + + + Solar Cells + http://localhost:1313/projects/solar-cells/ + Fri, 13 Mar 2026 22:16:00 +0000 + + http://localhost:1313/projects/solar-cells/ + Final year University project making Dye Sensitised Solar Cells. + + + + + diff --git a/public/tags/university/page/1/index.html b/public/tags/university/page/1/index.html new file mode 100644 index 0000000..3606aed --- /dev/null +++ b/public/tags/university/page/1/index.html @@ -0,0 +1,9 @@ + + + + http://localhost:1313/tags/university/ + + + + + diff --git a/resources/_gen/images/blog/retro-handhelds/featured_hu_9a1528ea52fa35df.gif b/resources/_gen/images/blog/retro-handhelds/featured_hu_9a1528ea52fa35df.gif new file mode 100644 index 0000000..72e93c1 Binary files /dev/null and b/resources/_gen/images/blog/retro-handhelds/featured_hu_9a1528ea52fa35df.gif differ diff --git a/resources/_gen/images/blogs/retro-handhelds/featured_hu_9a1528ea52fa35df.gif b/resources/_gen/images/blogs/retro-handhelds/featured_hu_9a1528ea52fa35df.gif new file mode 100644 index 0000000..72e93c1 Binary files /dev/null and b/resources/_gen/images/blogs/retro-handhelds/featured_hu_9a1528ea52fa35df.gif differ diff --git a/resources/_gen/images/projects/garmin-eink/featured_hu_65de4d7558a4d614.jpg b/resources/_gen/images/projects/garmin-eink/featured_hu_65de4d7558a4d614.jpg new file mode 100644 index 0000000..826bba1 Binary files /dev/null and b/resources/_gen/images/projects/garmin-eink/featured_hu_65de4d7558a4d614.jpg differ diff --git a/resources/_gen/images/projects/smart-train/featured_hu_32231a97a98ee4cd.png b/resources/_gen/images/projects/smart-train/featured_hu_32231a97a98ee4cd.png new file mode 100644 index 0000000..80284bc Binary files /dev/null and b/resources/_gen/images/projects/smart-train/featured_hu_32231a97a98ee4cd.png differ diff --git a/resources/_gen/images/projects/solar-cells/featured_hu_3165a34c498eca82.jpg b/resources/_gen/images/projects/solar-cells/featured_hu_3165a34c498eca82.jpg new file mode 100644 index 0000000..396b31f Binary files /dev/null and b/resources/_gen/images/projects/solar-cells/featured_hu_3165a34c498eca82.jpg differ diff --git a/themes/blowfish b/themes/blowfish new file mode 160000 index 0000000..faea1bb --- /dev/null +++ b/themes/blowfish @@ -0,0 +1 @@ +Subproject commit faea1bb0466567091cce8563ddc6f546a0491276