From 3a570e36d962fd46eae1b22dbcc308dc3f62eab0 Mon Sep 17 00:00:00 2001 From: Chaoming Li Date: Fri, 29 Nov 2024 16:53:04 +1100 Subject: [PATCH] added exampleSite --- README.md | 32 + exampleSite/archetypes/default.md | 5 + exampleSite/assets/css/main.css | 187 + exampleSite/content/_index.md | 94 + .../content/blog/content-management-hugo.md | 170 + .../blog/customizing-your-hugo-theme.md | 121 + .../content/blog/deploying-hugo-sites.md | 101 + .../content/blog/getting-started-with-hugo.md | 81 + .../blog/optimizing-hugo-performance.md | 119 + exampleSite/content/careers.md | 42 + exampleSite/content/company.md | 90 + exampleSite/content/features/design-system.md | 66 + .../content/features/developer-experience.md | 75 + exampleSite/content/features/performance.md | 52 + exampleSite/content/jobs/product-manager.md | 55 + .../content/jobs/senior-frontend-developer.md | 54 + exampleSite/content/license.md | 26 + exampleSite/content/pricing.md | 152 + exampleSite/content/privacy.md | 88 + exampleSite/hugo.toml | 234 + exampleSite/hugo_stats.json | 517 ++ exampleSite/package.json | 17 + exampleSite/postcss.config.js | 6 + exampleSite/static/css/style.css | 4503 +++++++++++++++++ exampleSite/static/images/blog/blog-1.jpg | Bin 0 -> 77805 bytes exampleSite/static/images/blog/blog-2.webp | Bin 0 -> 401558 bytes exampleSite/static/images/blog/blog-3.webp | Bin 0 -> 75850 bytes exampleSite/static/images/blog/blog-4.jpg | Bin 0 -> 428724 bytes exampleSite/static/images/blog/blog-5.jpg | Bin 0 -> 285620 bytes exampleSite/static/images/company/exec-1.svg | 7 + exampleSite/static/images/company/exec-2.svg | 7 + exampleSite/static/images/company/exec-3.svg | 7 + .../static/images/company/investor-1.svg | 7 + .../static/images/company/investor-2.svg | 7 + .../static/images/company/investor-3.svg | 8 + .../static/images/company/investor-4.svg | 8 + exampleSite/static/images/favicon.ico | Bin 0 -> 193049 bytes exampleSite/static/images/feature-1.svg | 28 + exampleSite/static/images/feature-2.svg | 35 + exampleSite/static/images/feature-3.svg | 34 + exampleSite/static/images/hero-dashboard.svg | 26 + exampleSite/static/images/logo.svg | 8 + .../static/images/logos/customer-1.png | Bin 0 -> 1491 bytes .../static/images/logos/customer-1.svg | 20 + .../static/images/logos/customer-2.png | Bin 0 -> 1867 bytes .../static/images/logos/customer-3.png | Bin 0 -> 2045 bytes .../static/images/logos/customer-4.png | Bin 0 -> 1776 bytes .../static/images/logos/customer-5.png | Bin 0 -> 1620 bytes exampleSite/static/images/social/facebook.svg | 1 + exampleSite/static/images/social/github.svg | 1 + .../static/images/social/instagram.svg | 1 + exampleSite/static/images/social/linkedin.svg | 1 + exampleSite/static/images/social/twitter.svg | 1 + exampleSite/static/images/social/youtube.svg | 1 + exampleSite/static/images/team.jpg | Bin 0 -> 19093 bytes exampleSite/static/images/testimonial-1.svg | 5 + exampleSite/tailwind.config.js | 34 + 57 files changed, 7134 insertions(+) create mode 100644 exampleSite/archetypes/default.md create mode 100644 exampleSite/assets/css/main.css create mode 100644 exampleSite/content/_index.md create mode 100644 exampleSite/content/blog/content-management-hugo.md create mode 100644 exampleSite/content/blog/customizing-your-hugo-theme.md create mode 100644 exampleSite/content/blog/deploying-hugo-sites.md create mode 100644 exampleSite/content/blog/getting-started-with-hugo.md create mode 100644 exampleSite/content/blog/optimizing-hugo-performance.md create mode 100644 exampleSite/content/careers.md create mode 100644 exampleSite/content/company.md create mode 100644 exampleSite/content/features/design-system.md create mode 100644 exampleSite/content/features/developer-experience.md create mode 100644 exampleSite/content/features/performance.md create mode 100644 exampleSite/content/jobs/product-manager.md create mode 100644 exampleSite/content/jobs/senior-frontend-developer.md create mode 100644 exampleSite/content/license.md create mode 100644 exampleSite/content/pricing.md create mode 100644 exampleSite/content/privacy.md create mode 100644 exampleSite/hugo.toml create mode 100644 exampleSite/hugo_stats.json create mode 100644 exampleSite/package.json create mode 100644 exampleSite/postcss.config.js create mode 100644 exampleSite/static/css/style.css create mode 100644 exampleSite/static/images/blog/blog-1.jpg create mode 100644 exampleSite/static/images/blog/blog-2.webp create mode 100644 exampleSite/static/images/blog/blog-3.webp create mode 100644 exampleSite/static/images/blog/blog-4.jpg create mode 100644 exampleSite/static/images/blog/blog-5.jpg create mode 100644 exampleSite/static/images/company/exec-1.svg create mode 100644 exampleSite/static/images/company/exec-2.svg create mode 100644 exampleSite/static/images/company/exec-3.svg create mode 100644 exampleSite/static/images/company/investor-1.svg create mode 100644 exampleSite/static/images/company/investor-2.svg create mode 100644 exampleSite/static/images/company/investor-3.svg create mode 100644 exampleSite/static/images/company/investor-4.svg create mode 100644 exampleSite/static/images/favicon.ico create mode 100644 exampleSite/static/images/feature-1.svg create mode 100644 exampleSite/static/images/feature-2.svg create mode 100644 exampleSite/static/images/feature-3.svg create mode 100644 exampleSite/static/images/hero-dashboard.svg create mode 100644 exampleSite/static/images/logo.svg create mode 100644 exampleSite/static/images/logos/customer-1.png create mode 100644 exampleSite/static/images/logos/customer-1.svg create mode 100644 exampleSite/static/images/logos/customer-2.png create mode 100644 exampleSite/static/images/logos/customer-3.png create mode 100644 exampleSite/static/images/logos/customer-4.png create mode 100644 exampleSite/static/images/logos/customer-5.png create mode 100644 exampleSite/static/images/social/facebook.svg create mode 100644 exampleSite/static/images/social/github.svg create mode 100644 exampleSite/static/images/social/instagram.svg create mode 100644 exampleSite/static/images/social/linkedin.svg create mode 100644 exampleSite/static/images/social/twitter.svg create mode 100644 exampleSite/static/images/social/youtube.svg create mode 100644 exampleSite/static/images/team.jpg create mode 100644 exampleSite/static/images/testimonial-1.svg create mode 100644 exampleSite/tailwind.config.js diff --git a/README.md b/README.md index 81d56ad..cd206ee 100644 --- a/README.md +++ b/README.md @@ -82,6 +82,38 @@ module.exports = { npm install ``` +## Example Site + +The theme comes with a fully functional example site that demonstrates its features and capabilities. You can use this as a reference when building your own site. + +### Using the Example Site + +1. Copy the example site content: +```bash +cp -r themes/hugo-saasify-theme/exampleSite/* . +``` + +2. The example site includes: +- Complete content structure with sample pages +- Blog posts with various layouts +- Feature pages +- Career/Jobs section +- Pricing page +- Company information page +- Properly configured hugo.toml + +3. Start the development server: +```bash +npm run start +``` + +The example site provides a great starting point to understand how to: +- Structure your content +- Use different page layouts +- Configure navigation menus +- Set up site parameters +- Implement common SaaS website features + ### 4. Configure your Hugo site Create or update your `hugo.toml` with the following configuration: diff --git a/exampleSite/archetypes/default.md b/exampleSite/archetypes/default.md new file mode 100644 index 0000000..25b6752 --- /dev/null +++ b/exampleSite/archetypes/default.md @@ -0,0 +1,5 @@ ++++ +date = '{{ .Date }}' +draft = true +title = '{{ replace .File.ContentBaseName "-" " " | title }}' ++++ diff --git a/exampleSite/assets/css/main.css b/exampleSite/assets/css/main.css new file mode 100644 index 0000000..77cf0cf --- /dev/null +++ b/exampleSite/assets/css/main.css @@ -0,0 +1,187 @@ +@tailwind base; +@tailwind components; +@tailwind utilities; + +@layer base { + html { + @apply scroll-smooth; + } + + body { + @apply font-sans text-gray-700 antialiased; + } + + h1, h2, h3, h4, h5, h6 { + @apply font-heading font-bold text-gray-900; + } +} + +@layer utilities { + .rounded-lg { + border-radius: 2rem; + } +} + +@layer components { + .cta-section { + padding-top: 3rem; + padding-bottom: 3rem; + margin-top: 2rem; + margin-bottom: 2rem; + } + + .cta-gradient { + background: linear-gradient(calc(var(--gradient-angle) * 1deg), var(--gradient-from), var(--gradient-to)); + } + + .btn { + @apply inline-flex items-center justify-center px-6 py-3 font-medium transition duration-200 ease-in-out; + border-radius: 2rem; + } + + .btn-primary { + @apply btn bg-primary-600 text-white hover:bg-primary-700 hover:scale-105; + } + + .btn-secondary { + @apply btn bg-secondary-600 text-white hover:bg-secondary-700 hover:scale-105; + } + + .btn-outline { + @apply btn border-2 border-primary-600 text-primary-600 hover:scale-105; + } + + .container { + @apply mx-auto px-4 sm:px-6 lg:px-8 max-w-7xl; + } + + .section { + @apply py-16 md:py-24; + } + + .card { + @apply bg-white p-6 transition duration-200 hover:shadow-md; + border-radius: 2rem; + } + + .nav-link { + @apply text-gray-600 hover:text-primary-600 font-bold transition duration-200; + } + + .feature-grid { + @apply grid gap-8 md:grid-cols-2 lg:grid-cols-3; + } + + /* Blog and Syntax Highlighting Styles */ + .highlight { + @apply text-sm font-mono text-gray-200; + } + + .highlight table { + @apply w-full border-separate border-spacing-0; + } + + .highlight table td { + @apply p-0; + } + + .highlight table td:first-child { + @apply pr-4 text-right select-none text-gray-500 border-r border-gray-700; + } + + .highlight table td:last-child { + @apply pl-4 w-full; + } + + .highlight .k, .highlight .kd { + @apply text-purple-400 font-semibold; + } + + .highlight .nf, .highlight .nx { + @apply text-blue-400; + } + + .highlight .s, .highlight .s1, .highlight .s2 { + @apply text-green-400; + } + + .highlight .mi, .highlight .mf { + @apply text-orange-400; + } + + .highlight .c, .highlight .c1, .highlight .cm { + @apply text-gray-500 italic; + } + + .highlight .o { + @apply text-yellow-400; + } + + .highlight .p { + @apply text-gray-400; + } + + .prose { + @apply max-w-none; + } + + .prose h1, .prose h2, .prose h3, .prose h4 { + @apply font-heading font-bold text-gray-900; + } + + .prose h1 { + @apply text-4xl mb-8; + } + + .prose h2 { + @apply text-3xl mt-12 mb-6; + } + + .prose h3 { + @apply text-2xl mt-8 mb-4; + } + + .prose p { + @apply text-gray-700 leading-relaxed mb-6; + } + + .prose a { + @apply text-primary-600 hover:text-primary-700 no-underline; + } + + .prose ul, .prose ol { + @apply my-6 ml-6; + } + + .prose li { + @apply mb-2; + } + + .prose blockquote { + @apply border-l-4 border-gray-200 pl-4 italic text-gray-700 my-8; + } + + .prose img { + @apply rounded-lg shadow-lg my-8; + } + + .prose code:not(pre code) { + @apply bg-gray-100 text-gray-900 px-1.5 py-0.5 rounded text-sm font-mono; + } + + .table-of-contents { + @apply bg-gray-50 p-6 rounded-lg my-8; + } + + .table-of-contents nav { + @apply space-y-2; + } + + .table-of-contents a { + @apply text-gray-700 hover:text-primary-600 no-underline; + } + + .table-of-contents ul { + @apply list-none ml-4 space-y-2; + } +} diff --git a/exampleSite/content/_index.md b/exampleSite/content/_index.md new file mode 100644 index 0000000..402ff65 --- /dev/null +++ b/exampleSite/content/_index.md @@ -0,0 +1,94 @@ +--- +title: Home +client_logos: + - name: "Customer 1" + logo: "/images/logos/customer-1.png" + - name: "Customer 2" + logo: "/images/logos/customer-2.png" + - name: "Customer 3" + logo: "/images/logos/customer-3.png" + - name: "Customer 4" + logo: "/images/logos/customer-4.png" + - name: "Customer 5" + logo: "/images/logos/customer-5.png" +testimonials: + - name: "John Smith" + title: "CTO at TechStartup" + avatar: "/images/testimonial-1.svg" + quote: "We built our SaaS website in record time. The performance is incredible, and our users love the modern, clean design." + - name: "Sarah Johnson" + title: "Founder at WebFlow" + avatar: "/images/testimonial-1.svg" + quote: "The combination of Hugo and TailwindCSS delivers lightning-fast performance. Our website loads instantly, which has significantly improved our conversion rates." + - name: "Michael Chen" + title: "Lead Developer at CloudTech" + avatar: "/images/testimonial-1.svg" + quote: "This theme made it easy to create a professional SaaS website. The build times are incredibly fast, and the code is clean and maintainable." +--- + +{{< hero + headline="Build Your SaaS Website" + sub_headline="Create stunning, responsive websites that load instantly. Built with Hugo and TailwindCSS for maximum performance and flexibility." + primary_button_text="Get Started Free" + primary_button_url="#" + secondary_button_text="View Demo" + secondary_button_url="#" + hero_image="/images/hero-dashboard.svg" + gradient-from="#dbeafe" + gradient-to="#f3e8ff" + gradient-angle="180" +>}} + +{{< client-logos animate="true" >}} + +{{< features-section + title="Modern Features for Modern Websites" + description="Discover how our theme helps you build fast, beautiful SaaS websites with ease." +>}} + +{{< feature + title="Lightning-Fast Performance" + description="Leverage Hugo's blazing-fast build times and optimized output. Your website loads instantly, providing an exceptional user experience." + badge="Performance" + badgeColor="#2563eb" + image="/images/feature-1.svg" + buttonText="Learn More" + buttonLink="/features/performance/" + features="Sub-second page loads,Optimized assets,Minimal JavaScript,CDN-ready output" + imagePosition="right" +>}} + +{{< feature + title="Beautiful Design System" + description="Create stunning user interfaces with our comprehensive design system built on TailwindCSS. Customize everything to match your brand." + badge="Design" + badgeColor="#7c3aed" + image="/images/feature-2.svg" + buttonText="Learn More" + buttonLink="/features/design-system/" + features="Modern UI components,Responsive design,Custom typography,Flexible layouts" + imagePosition="left" +>}} + +{{< feature + title="Developer Experience" + description="Enjoy a seamless development experience with hot reload, component-based architecture, and clean, maintainable code." + badge="Development" + badgeColor="#16a34a" + image="/images/feature-3.svg" + buttonText="Learn More" + buttonLink="/features/developer-experience/" + features="Component system,Easy customization,Clean code,Detailed documentation" + imagePosition="right" +>}} + +{{< /features-section >}} + +{{< testimonials + title="Trusted by Modern Web Teams" + description="See how teams are building better websites with our theme." + animate="true" + background-color="#f1f5f9" +>}} + +{{< cta >}} diff --git a/exampleSite/content/blog/content-management-hugo.md b/exampleSite/content/blog/content-management-hugo.md new file mode 100644 index 0000000..1c11004 --- /dev/null +++ b/exampleSite/content/blog/content-management-hugo.md @@ -0,0 +1,170 @@ +--- +title: "Content Management in Hugo: Best Practices" +date: 2023-07-24 +author: "Michael Park" +description: "Learn effective strategies for managing content in Hugo, from organizing your content structure to implementing taxonomies and creating dynamic content relationships." +categories: ["Content"] +tags: ["hugo", "content-management", "organization", "workflow"] +featured_image: "/images/blog/blog-5.jpg" +--- + +{{< toc >}} + +## Introduction + +Effective content management is crucial for maintaining a scalable Hugo site. This guide covers best practices for organizing and managing your content. + +## Content Organization + +### Directory Structure + +Create a logical content hierarchy: + +{{< code text "Content Structure" >}} +content/ +├── blog/ +│ ├── tech/ +│ ├── tutorials/ +│ └── news/ +├── products/ +├── about/ +└── docs/ +{{< /code >}} + +### Front Matter Templates + +Use archetypes to standardize content: + +{{< code yaml "archetypes/blog.md" >}} +--- +title: "{{ replace .Name "-" " " | title }}" +date: {{ .Date }} +draft: true +categories: [] +tags: [] +featured_image: "" +description: "" +author: "" +--- + +{{}} + +## Introduction + +[Your introduction here] + +## Main Content + +[Your content here] +{{< /code >}} + +## Content Types + +### Page Bundles + +Organize related content together: +- Group images with content +- Manage page resources +- Maintain content hierarchy + +### Taxonomies + +Create meaningful content relationships: + +{{< code toml "config.toml" >}} +[taxonomies] + category = "categories" + tag = "tags" + series = "series" + author = "authors" +{{< /code >}} + +## Content Workflow + +### Draft Management + +1. **Creating Drafts** + ```bash + hugo new blog/my-draft-post.md + ``` + +2. **Preview Drafts** + ```bash + hugo server -D + ``` + +3. **Publishing Content** + - Update front matter + - Review content + - Deploy changes + +### Content Updates + +Maintain content freshness: + +1. **Regular Reviews** + - Check for outdated information + - Update screenshots + - Verify external links + +2. **Version Control** + - Track content changes + - Collaborate with team + - Maintain history + +## Dynamic Content + +### Related Content + +{{< code html "layouts/partials/related.html" >}} +{{ $related := .Site.RegularPages.Related . | first 3 }} +{{ with $related }} +

Related Posts

+ +{{ end }} +{{< /code >}} + +### Content Reuse + +Create reusable content snippets: + +{{< code html "layouts/shortcodes/notice.html" >}} +
+ {{ .Inner | markdownify }} +
+{{< /code >}} + +## SEO and Metadata + +1. **Title Optimization** +2. **Meta Descriptions** +3. **URL Structure** +4. **Image Alt Text** + +## Content Backup + +### Backup Strategies + +1. **Version Control** + - Git repository + - Regular commits + - Remote backups + +2. **External Storage** + - Cloud storage + - Local backups + - Asset management + +## Conclusion + +Good content management practices are essential for maintaining a successful Hugo site. By following these guidelines, you can create an efficient and scalable content workflow. + +## Resources + +- [Hugo Content Management Documentation](https://gohugo.io/content-management/) +- [Hugo Archetypes Guide](https://gohugo.io/content-management/archetypes/) +- [Hugo Taxonomies Documentation](https://gohugo.io/content-management/taxonomies/) diff --git a/exampleSite/content/blog/customizing-your-hugo-theme.md b/exampleSite/content/blog/customizing-your-hugo-theme.md new file mode 100644 index 0000000..0574ca7 --- /dev/null +++ b/exampleSite/content/blog/customizing-your-hugo-theme.md @@ -0,0 +1,121 @@ +--- +title: "Customizing Your Hugo Theme: A Deep Dive" +date: 2023-07-21 +author: "Jane Smith" +description: "Learn how to customize your Hugo theme to create a unique website that matches your brand and requirements." +categories: ["Development"] +tags: ["hugo", "themes", "customization", "web-design"] +featured_image: "/images/blog/blog-2.webp" +--- + +{{< toc >}} + +## Introduction + +While Hugo comes with many beautiful themes, you'll often want to customize them to match your specific needs. This guide will walk you through the process of customizing your Hugo theme effectively. + +## Understanding Hugo's Theme Structure + +Before diving into customization, it's important to understand how Hugo themes are structured. + +## Basic Theme Customization + +### 1. Colors and Typography + +The easiest way to start customizing your theme is by modifying the CSS: + +{{< code css "assets/css/main.css" >}} +:root { + --primary-color: #007bff; + --secondary-color: #6c757d; + --font-family: 'Inter', sans-serif; +} + +body { + font-family: var(--font-family); + color: #333; +} +{{< /code >}} + +### 2. Layout Modifications + +You can override any layout file from the theme by creating a matching file in your site's layouts directory. + +## Advanced Customization Techniques + +### Creating Custom Shortcodes + +Shortcodes are a powerful way to add custom functionality: + +{{< code html "layouts/shortcodes/custom-alert.html" >}} +
+ {{ .Inner | markdownify }} +
+{{< /code >}} + +### Working with Partials + +Partials help keep your code DRY and maintainable: + +{{< code html "layouts/partials/custom-header.html" >}} + +{{< /code >}} + +## Best Practices + +1. **Don't Edit Theme Files Directly** + - Create overrides in your site directory + - Use Hugo's lookup order to your advantage + +2. **Maintain Compatibility** + - Test your customizations across different devices + - Keep accessibility in mind + +3. **Performance Considerations** + - Optimize images and assets + - Minimize CSS and JavaScript + +## Common Customization Examples + +### Custom Homepage Layout + +{{< code html "layouts/index.html" >}} +{{ define "main" }} +
+ {{ partial "hero.html" . }} + {{ partial "featured-posts.html" . }} + {{ partial "newsletter.html" . }} +
+{{ end }} +{{< /code >}} + +### Custom Taxonomy Pages + +{{< code html "layouts/taxonomy/category.html" >}} +{{ define "main" }} +
+

{{ .Title }}

+
+ {{ range .Pages }} + {{ partial "post-card.html" . }} + {{ end }} +
+
+{{ end }} +{{< /code >}} + +## Conclusion + +Customizing your Hugo theme allows you to create a unique website that stands out. By understanding Hugo's structure and following best practices, you can make modifications that are both effective and maintainable. + +## Further Resources + +- [Hugo Documentation](https://gohugo.io/documentation/) +- [Hugo Forums](https://discourse.gohugo.io/) +- [Hugo Theme Components](https://themes.gohugo.io/tags/components/) diff --git a/exampleSite/content/blog/deploying-hugo-sites.md b/exampleSite/content/blog/deploying-hugo-sites.md new file mode 100644 index 0000000..2839203 --- /dev/null +++ b/exampleSite/content/blog/deploying-hugo-sites.md @@ -0,0 +1,101 @@ +--- +title: "Deploying Hugo Sites: A Complete Guide" +date: 2023-07-22 +author: "Alex Johnson" +description: "Learn how to deploy your Hugo site to various platforms including Netlify, Vercel, and GitHub Pages." +categories: ["Deployment"] +tags: ["hugo", "deployment", "netlify", "vercel", "github-pages"] +featured_image: "/images/blog/blog-3.webp" +--- + +{{< toc >}} + +## Introduction + +Once you've built your Hugo site, the next step is deploying it to make it accessible to the world. This guide covers various deployment options and best practices. + +## Popular Deployment Platforms + +### 1. Netlify + +Netlify offers a seamless deployment experience: + +{{< code bash "terminal" >}} +# Create netlify.toml +[build] + publish = "public" + command = "hugo --gc --minify" + +[build.environment] + HUGO_VERSION = "0.95.0" +{{< /code >}} + +### 2. Vercel + +Vercel provides excellent performance and analytics. + +### 3. GitHub Pages + +Perfect for project sites and personal blogs: + +{{< code yaml "github-workflow.yml" >}} +name: GitHub Pages + +on: + push: + branches: + - main + +jobs: + deploy: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v2 + - name: Setup Hugo + uses: peaceiris/actions-hugo@v2 +{{< /code >}} + +## Deployment Best Practices + +1. **Use Version Control** + - Track your changes + - Collaborate effectively + - Enable automated deployments + +2. **Optimize Assets** + - Compress images + - Minify CSS/JS + - Enable caching + +3. **Configure CI/CD** + - Automate builds + - Run tests + - Deploy automatically + +## Performance Considerations + +1. **Page Load Speed** + - Optimize images + - Minimize HTTP requests + - Use CDN + +2. **SEO** + - Configure meta tags + - Create sitemap + - Enable robots.txt + +## Security Measures + +1. **Enable HTTPS** +2. **Configure Headers** +3. **Implement CSP** + +## Conclusion + +Choosing the right deployment platform and following best practices ensures your Hugo site is fast, secure, and reliable. + +## Resources + +- [Hugo Deployment Documentation](https://gohugo.io/hosting-and-deployment/) +- [Netlify Documentation](https://docs.netlify.com/) +- [Vercel Documentation](https://vercel.com/docs) diff --git a/exampleSite/content/blog/getting-started-with-hugo.md b/exampleSite/content/blog/getting-started-with-hugo.md new file mode 100644 index 0000000..0081faf --- /dev/null +++ b/exampleSite/content/blog/getting-started-with-hugo.md @@ -0,0 +1,81 @@ +--- +title: "Getting Started with Hugo: A Beginner's Guide" +date: 2023-07-20 +author: "John Doe" +description: "Learn how to build your first website with Hugo, the world's fastest framework for building websites." +categories: ["Tutorials"] +tags: ["hugo", "static-site", "web-development", "beginners"] +featured_image: "/images/blog/blog-1.jpg" +--- + +{{< toc >}} + +## Introduction + +Hugo is one of the most popular open-source static site generators. With its amazing speed and flexibility, Hugo makes building websites fun again. + +## Why Choose Hugo? + +Here are some compelling reasons to choose Hugo for your next project: + +1. Lightning Fast +2. Easy to Learn +3. Highly Flexible +4. Great Community + +## Setting Up Your First Hugo Site + +Let's walk through creating your first Hugo site: + +{{< code bash "terminal" >}} +# Create a new Hugo site +hugo new site my-awesome-site +cd my-awesome-site + +# Initialize git and add a theme +git init +git submodule add https://github.com/theNewDynamic/gohugo-theme-ananke themes/ananke + +# Add the theme to your configuration +echo "theme = 'ananke'" >> config.toml + +# Create your first post +hugo new posts/my-first-post.md +{{< /code >}} + +## Working with Content + +Hugo makes content creation straightforward. Here's how to organize your content effectively. + +## Advanced Features + +Hugo comes with many advanced features out of the box: + +1. **Taxonomies**: Categories and tags +2. **Shortcodes**: Easy way to add complex content +3. **Custom Outputs**: JSON, AMP, etc. +4. **Asset Processing**: SASS/SCSS, PostCSS + +## Code Examples + +Here's an example of a simple Hugo template: + +{{< code html "layouts/_default/single.html" >}} +{{ define "main" }} +
+

{{ .Title }}

+ + {{ .Content }} +
+{{ end }} +{{< /code >}} + +## Conclusion + +Hugo provides an excellent foundation for building modern websites. Its combination of speed, flexibility, and ease of use makes it a great choice for projects of any size. + +## Next Steps + +- Explore Hugo's [official documentation](https://gohugo.io/documentation/) +- Join the [Hugo community](https://discourse.gohugo.io/) +- Check out some [Hugo themes](https://themes.gohugo.io/) diff --git a/exampleSite/content/blog/optimizing-hugo-performance.md b/exampleSite/content/blog/optimizing-hugo-performance.md new file mode 100644 index 0000000..480d026 --- /dev/null +++ b/exampleSite/content/blog/optimizing-hugo-performance.md @@ -0,0 +1,119 @@ +--- +title: "Optimizing Hugo Performance: Speed Up Your Site" +date: 2023-07-23 +author: "Sarah Chen" +description: "Learn advanced techniques to optimize your Hugo site for better performance, faster load times, and improved user experience." +categories: ["Performance"] +tags: ["hugo", "optimization", "performance", "seo"] +featured_image: "/images/blog/blog-4.jpg" +--- + +{{< toc >}} + +## Introduction + +Performance is crucial for user experience and SEO. In this guide, we'll explore various techniques to optimize your Hugo site for maximum performance. + +## Asset Optimization + +### Image Optimization + +Images often contribute the most to page weight. Here's how to optimize them: + +{{< code html "layouts/shortcodes/optimized-image.html" >}} +{{ $image := .Page.Resources.GetMatch (printf "%s" (.Get "src")) }} +{{ $options := dict "targetWidth" 800 "quality" 85 }} +{{ $processed := $image.Process "resize 800x webp q85" }} +{{ .Get +{{< /code >}} + +### CSS and JavaScript + +Minimize your asset footprint: +- Minify CSS and JavaScript +- Bundle assets appropriately +- Remove unused code + +## Caching Strategies + +1. **Browser Caching** + - Set appropriate cache headers + - Use versioned assets + - Implement service workers + +2. **Hugo Caching** + - Use `.Scratch` for expensive operations + - Cache partial results + - Implement memoization + +## Content Delivery + +### CDN Setup + +{{< code toml "config.toml" >}} +[params.cdn] + enable = true + provider = "cloudfront" + domain = "cdn.example.com" +{{< /code >}} + +### Edge Computing + +Leverage edge computing for faster content delivery: +- Deploy to multiple regions +- Use edge functions when needed +- Implement geo-routing + +## Performance Monitoring + +### Key Metrics + +1. **Core Web Vitals** + - Largest Contentful Paint (LCP) + - First Input Delay (FID) + - Cumulative Layout Shift (CLS) + +2. **Additional Metrics** + - Time to First Byte (TTFB) + - First Contentful Paint (FCP) + - Total Blocking Time (TBT) + +## Advanced Optimization Techniques + +### Resource Hints + +{{< code html "layouts/partials/head.html" >}} + + +{{< /code >}} + +### Critical CSS + +Inline critical styles for faster rendering: + +{{< code html "layouts/partials/critical-css.html" >}} + +{{< /code >}} + +## SEO Optimization + +1. **Structured Data** +2. **XML Sitemaps** +3. **Meta Tags** + +## Conclusion + +Optimizing your Hugo site is an ongoing process. Regular monitoring and adjustments ensure your site maintains peak performance. + +## Resources + +- [Hugo Performance Documentation](https://gohugo.io/documentation/) +- [Web.dev Performance Guide](https://web.dev/performance/) +- [PageSpeed Insights](https://pagespeed.web.dev/) diff --git a/exampleSite/content/careers.md b/exampleSite/content/careers.md new file mode 100644 index 0000000..04bfee9 --- /dev/null +++ b/exampleSite/content/careers.md @@ -0,0 +1,42 @@ +--- +title: "Join Our Team" +description: "Be part of a team that's revolutionizing the SaaS industry with innovative solutions and a people-first culture." +layout: "career" + +culture_section: + title: "Our Culture" + image: "/images/team.jpg" + image_alt: "Our Team" + image_caption: "Join our amazing team!" + values: + - icon: "🌟" + title: "Innovation First" + description: "We encourage creative thinking and empower our team to push boundaries and explore new possibilities." + - icon: "🤝" + title: "Collaborative Spirit" + description: "We believe in the power of teamwork and foster an environment where everyone's voice is heard and valued." + - icon: "🌱" + title: "Growth Mindset" + description: "We invest in our team's development and provide opportunities for continuous learning and advancement." + +benefits_section: + title: "Why Join Us?" + benefits: + - icon: "💪" + title: "Health & Wellness" + description: "Comprehensive health coverage, wellness programs, and mental health support." + - icon: "🎯" + title: "Work-Life Balance" + description: "Flexible working hours, remote options, and unlimited PTO policy." + - icon: "📚" + title: "Learning & Development" + description: "Professional development budget and regular learning sessions." + +positions_section: + title: "Open Positions" + view_position_text: "View Position" +--- + +At Saasify, we believe in empowering our team members to do their best work. We foster an environment of innovation, collaboration, and continuous learning. Our culture is built on trust, transparency, and a shared commitment to excellence. + +We're looking for passionate individuals who want to make a difference and grow with us. If you're excited about building the future of SaaS and working with cutting-edge technology, we'd love to hear from you. diff --git a/exampleSite/content/company.md b/exampleSite/content/company.md new file mode 100644 index 0000000..6284ec1 --- /dev/null +++ b/exampleSite/content/company.md @@ -0,0 +1,90 @@ +--- +title: "About Our Company" +layout: "company" +description: "Learn about our mission, leadership team, and the investors backing our vision" +--- + +{{< section-container class="bg-gradient-to-b from-blue-50 via-blue-50 to-white pt-20 pb-32" >}} +
+

Building the Future of SaaS

+

We're on a mission to revolutionize how businesses operate in the digital age

+
+

Our Mission

+

+ We're dedicated to empowering businesses with innovative SaaS solutions that drive growth and efficiency. Our platform combines cutting-edge technology with intuitive design to solve complex business challenges. +

+
+
+{{< /section-container >}} + +{{< section-container class="py-20 bg-gray-50" >}} +
+

Leadership Team

+
+ {{< team-member + name="Sarah Johnson" + title="Chief Executive Officer" + image="/images/company/exec-1.svg" + linkedin="#" + >}} + {{< team-member + name="Michael Chen" + title="Chief Technology Officer" + image="/images/company/exec-2.svg" + linkedin="#" + >}} + {{< team-member + name="Emily Rodriguez" + title="Chief Product Officer" + image="/images/company/exec-3.svg" + linkedin="#" + >}} +
+
+{{< /section-container >}} + +{{< section-container class="py-20" >}} +
+

Backed by World-Class Investors

+
+ {{< investor-logo name="Sequoia Capital" image="/images/company/investor-1.svg" >}} + {{< investor-logo name="Andreessen Horowitz" image="/images/company/investor-2.svg" >}} + {{< investor-logo name="Accel" image="/images/company/investor-3.svg" >}} + {{< investor-logo name="Benchmark" image="/images/company/investor-4.svg" >}} +
+
+{{< /section-container >}} + +{{< section-container class="py-20 bg-gray-50" >}} +
+

Company Values

+
+ {{< value-card + title="Innovation First" + icon="lightbulb" + description="We constantly push boundaries and embrace new technologies to solve complex challenges." + >}} + {{< value-card + title="Customer Success" + icon="users" + description="Our customers' success is our success. We're committed to delivering exceptional value." + >}} + {{< value-card + title="Transparency" + icon="eye" + description="We believe in open communication and building trust through transparency." + >}} +
+
+{{< /section-container >}} + +{{< section-container class="py-20" >}} +
+
+ {{< stat number="2015" label="Founded" >}} + {{< stat number="200+" label="Team Members" >}} + {{< stat number="10k+" label="Customers" >}} + {{< stat number="50M+" label="Annual Revenue" >}} +
+
+{{< /section-container >}} diff --git a/exampleSite/content/features/design-system.md b/exampleSite/content/features/design-system.md new file mode 100644 index 0000000..412d4cc --- /dev/null +++ b/exampleSite/content/features/design-system.md @@ -0,0 +1,66 @@ +--- +title: "Beautiful Design System" +description: "Create stunning user interfaces with our comprehensive design system built on TailwindCSS. Customize everything to match your brand." +layout: "feature" +badge: "Design" +badgeColor: "#7c3aed" +features: + - title: "Modern UI Components" + description: "A complete set of pre-built components designed for SaaS websites. From navigation bars to pricing tables, everything you need is included." + - title: "Responsive Design" + description: "Every component is fully responsive and tested across all device sizes. Your website will look great on everything from phones to large displays." + - title: "Custom Typography" + description: "Carefully crafted typography system with perfect vertical rhythm. Easily customize fonts and sizes to match your brand guidelines." + - title: "Flexible Layouts" + description: "Modular layout system that adapts to your content. Create unique page layouts while maintaining consistent spacing and alignment." +demo: + description: "Explore our comprehensive design system built with TailwindCSS." + image: "/images/feature-2.svg" +--- + +## Comprehensive Design System + +Our theme includes a complete design system that makes it easy to create beautiful, consistent interfaces. Built on TailwindCSS, it provides the flexibility to customize every aspect of your design while maintaining a professional look. + +### Design Components + +#### Core Elements +- Typography system with perfect vertical rhythm +- Color palette with semantic variables +- Spacing and sizing scales +- Grid and layout systems + +#### UI Components +- Navigation components (headers, footers, menus) +- Hero sections and feature displays +- Cards and content containers +- Forms and input elements +- Buttons and CTAs +- Pricing tables +- Testimonial displays +- Team member profiles + +#### Design Features + +##### Customization +- Easy theme customization through TailwindCSS +- Brand color management +- Typography customization +- Spacing system adjustment +- Component variants + +##### Accessibility +- WCAG 2.1 compliant components +- Proper ARIA attributes +- Keyboard navigation support +- High contrast mode support +- Screen reader optimized + +##### Responsive Design +- Mobile-first approach +- Breakpoint system +- Fluid typography +- Adaptive layouts +- Touch-friendly interactions + +Our design system provides the perfect foundation for creating beautiful, accessible, and responsive websites that stand out from the crowd. diff --git a/exampleSite/content/features/developer-experience.md b/exampleSite/content/features/developer-experience.md new file mode 100644 index 0000000..2c81cc3 --- /dev/null +++ b/exampleSite/content/features/developer-experience.md @@ -0,0 +1,75 @@ +--- +title: "Developer Experience" +description: "Enjoy a seamless development experience with hot reload, component-based architecture, and clean, maintainable code." +layout: "feature" +badge: "Development" +badgeColor: "#16a34a" +features: + - title: "Component System" + description: "Modular component architecture makes it easy to build and maintain your website. Reuse components across pages while maintaining consistency." + - title: "Easy Customization" + description: "Clear configuration files and well-organized code make it simple to customize any aspect of your site. No deep Hugo knowledge required." + - title: "Clean Code" + description: "Well-structured, documented code following best practices. Makes maintenance and updates straightforward for any developer." + - title: "Detailed Documentation" + description: "Comprehensive documentation covers everything from setup to advanced customization. Includes examples and best practices." +demo: + description: "See how our developer-friendly architecture makes building websites a breeze." + image: "/images/feature-3.svg" +--- + +## Built for Developers + +Our theme is designed with developers in mind, providing a clean, efficient workflow that makes building websites enjoyable and productive. + +### Development Features + +#### Project Structure +- Logical directory organization +- Clear separation of concerns +- Modular component architecture +- Consistent naming conventions + +#### Development Workflow +- Fast hot reload development server +- Automatic asset processing +- Source maps for debugging +- Build process optimization + +#### Component System + +##### Shortcodes +- Rich set of pre-built shortcodes +- Easy to create custom shortcodes +- Documentation for each shortcode +- Example implementations + +##### Partials +- Reusable partial templates +- Context-aware components +- Easy to extend and modify +- Clear documentation + +#### Customization + +##### Configuration +- Central configuration file +- Environment variables support +- Feature flags +- Easy theme customization + +##### Styling +- TailwindCSS integration +- PostCSS processing +- Custom CSS support +- Design token system + +#### Documentation +- Getting started guide +- Component documentation +- Configuration reference +- Best practices +- Troubleshooting guide +- Deployment instructions + +Our developer experience focuses on making it easy to build, customize, and maintain your website while following best practices and maintaining clean, efficient code. diff --git a/exampleSite/content/features/performance.md b/exampleSite/content/features/performance.md new file mode 100644 index 0000000..ead01ab --- /dev/null +++ b/exampleSite/content/features/performance.md @@ -0,0 +1,52 @@ +--- +title: "Lightning-Fast Performance" +description: "Leverage Hugo's blazing-fast build times and optimized output. Your website loads instantly, providing an exceptional user experience." +layout: "feature" +badge: "Performance" +badgeColor: "#2563eb" +features: + - title: "Sub-second Page Loads" + description: "Experience instant page transitions with Hugo's static site generation. Pages load in milliseconds, ensuring visitors stay engaged." + - title: "Optimized Assets" + description: "Automatically optimize images, CSS, and JavaScript. Reduce file sizes without compromising quality for faster load times." + - title: "Minimal JavaScript" + description: "Built with minimal JavaScript dependencies. Pages remain fast and functional while keeping the bundle size small." + - title: "CDN-Ready Output" + description: "Deploy your site to any CDN for global distribution. Static files are optimized for edge caching and maximum performance." +demo: + description: "See how our optimized build process delivers lightning-fast page loads and smooth transitions." + image: "/images/feature-1.svg" +--- + +## Built for Speed + +Our theme is engineered from the ground up with performance in mind. By leveraging Hugo's powerful static site generation and combining it with modern optimization techniques, we deliver websites that load instantly and run smoothly. + +### Performance Metrics + +- **Build Time**: Less than 1 second for most sites +- **Page Load Time**: Under 500ms first contentful paint +- **Time to Interactive**: Under 1.5 seconds +- **Google Lighthouse Score**: 95+ on all metrics + +### Optimization Features + +#### Asset Optimization +- Automatic image optimization and WebP conversion +- CSS minification and purging of unused styles +- JavaScript bundling and tree-shaking +- Lazy loading of images and components + +#### Caching Strategy +- Efficient browser caching with proper headers +- Static asset fingerprinting +- Pre-rendered HTML for instant loads +- Service worker for offline capabilities + +#### CDN Integration +- Built for global distribution +- Edge caching ready +- Automatic cache invalidation +- Geographic redundancy + +Our performance-first approach ensures your website not only looks great but delivers an exceptional user experience through blazing-fast load times and smooth interactions. diff --git a/exampleSite/content/jobs/product-manager.md b/exampleSite/content/jobs/product-manager.md new file mode 100644 index 0000000..65e773e --- /dev/null +++ b/exampleSite/content/jobs/product-manager.md @@ -0,0 +1,55 @@ +--- +title: "Product Manager" +date: 2023-11-14 +description: "We're seeking a Product Manager to drive our product strategy and roadmap" +location: "San Francisco, CA (Hybrid)" +type: "Full-time" +salary: "$130K - $180K" +layout: "job-single" +--- + +We're looking for a Product Manager to join our team and help shape the future of our product. + +## About the Role + +As a Product Manager, you'll be responsible for: + +- Defining and executing the product strategy and roadmap +- Working closely with engineering, design, and marketing teams +- Conducting user research and gathering customer feedback +- Analyzing market trends and competitive landscape +- Prioritizing features and managing the product backlog + +## Requirements + +- 4+ years of product management experience in SaaS +- Strong analytical and problem-solving skills +- Excellent communication and stakeholder management abilities +- Experience with agile development methodologies +- Data-driven decision making mindset +- Technical background or ability to work closely with technical teams + +## Nice to Have + +- MBA or relevant advanced degree +- Experience with B2B SaaS products +- Background in UX design or software development +- Experience with product analytics tools +- Public speaking or presentation experience + +## Benefits + +- Competitive salary and equity package +- Comprehensive health, dental, and vision insurance +- 401(k) matching +- Flexible PTO policy +- Professional development budget +- Wellness programs +- Company-sponsored events +- Office perks and snacks + +## How to Apply + +Please send your resume and a cover letter detailing your product management experience and why you're interested in joining our team. Include examples of products you've managed and their impact. + +[Apply Now](mailto:careers@example.com) diff --git a/exampleSite/content/jobs/senior-frontend-developer.md b/exampleSite/content/jobs/senior-frontend-developer.md new file mode 100644 index 0000000..3fbcc96 --- /dev/null +++ b/exampleSite/content/jobs/senior-frontend-developer.md @@ -0,0 +1,54 @@ +--- +title: "Senior Frontend Developer" +date: 2023-11-14 +description: "Join our team as a Senior Frontend Developer and help build the next generation of our SaaS platform" +location: "Remote" +type: "Full-time" +salary: "$120K - $160K" +layout: "job-single" +--- + +We're looking for a Senior Frontend Developer to join our growing team and help shape the future of our SaaS platform. + +## About the Role + +As a Senior Frontend Developer, you'll be responsible for: + +- Building and maintaining high-quality, reusable UI components +- Collaborating with designers to implement pixel-perfect interfaces +- Optimizing application performance and accessibility +- Mentoring junior developers and reviewing code +- Contributing to technical architecture decisions + +## Requirements + +- 5+ years of experience in frontend development +- Expert knowledge of modern JavaScript, HTML, and CSS +- Strong experience with React or Vue.js +- Understanding of modern frontend build tools and workflows +- Experience with responsive design and cross-browser compatibility +- Strong communication skills and ability to work in a remote team + +## Nice to Have + +- Experience with TypeScript +- Knowledge of testing frameworks (Jest, Cypress) +- Contributions to open source projects +- Experience with design systems +- Understanding of backend technologies + +## Benefits + +- Competitive salary and equity package +- Flexible working hours +- Remote-first culture +- Health insurance +- Learning and development budget +- Annual team retreats +- Home office setup allowance + +## How to Apply + +Please send your resume, portfolio, and a brief cover letter explaining why you'd be a great fit for our team. Include links to any relevant projects or open source contributions. + +[Apply Now](mailto:careers@example.com) diff --git a/exampleSite/content/license.md b/exampleSite/content/license.md new file mode 100644 index 0000000..f133c7a --- /dev/null +++ b/exampleSite/content/license.md @@ -0,0 +1,26 @@ +--- +title: "License" +layout: "simple" +--- + +## MIT License + +Copyright (c) 2024 + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. diff --git a/exampleSite/content/pricing.md b/exampleSite/content/pricing.md new file mode 100644 index 0000000..d854fd0 --- /dev/null +++ b/exampleSite/content/pricing.md @@ -0,0 +1,152 @@ +--- +title: "Pricing" +description: "Choose the perfect plan for your needs" +layout: "pricing" +--- + +{{< pricing-table-1 >}} +{ + "title": "Designed for business teams like yours", + "description": "Here at Flowbite we focus on markets where technology, innovation, and capital can unlock long-term value and drive economic growth.", + "plans": [ + { + "name": "Starter", + "price": "29", + "description": "Best option for personal use & for your next project.", + "features": [ + "Individual configuration", + "No setup, or hidden fees", + "Team size: 1 developer", + "Premium support: 6 months", + "Free updates: 6 months" + ], + "button": { + "text": "Get started", + "url": "#" + } + }, + { + "name": "Company", + "price": "99", + "description": "Relevant for multiple users, extended & premium support.", + "featured": true, + "features": [ + "Individual configuration", + "No setup, or hidden fees", + "Team size: 10 developers", + "Premium support: 24 months", + "Free updates: 24 months" + ], + "button": { + "text": "Get started", + "url": "#" + } + }, + { + "name": "Enterprise", + "price": "499", + "description": "Best for large scale uses and extended redistribution rights.", + "features": [ + "Individual configuration", + "No setup, or hidden fees", + "Team size: 100+ developers", + "Premium support: 36 months", + "Free updates: 36 months" + ], + "button": { + "text": "Get started", + "url": "#" + } + } + ] +} +{{< /pricing-table-1 >}} + +
+ +{{< pricing-table-2 >}} +{ + "title": "Alternative Pricing Options", + "description": "Choose a plan that best suits your business needs with our flexible pricing options.", + "plans": [ + { + "name": "Basic", + "price": "19", + "description": "Perfect for freelancers and solo developers.", + "features": [ + "Core features included", + "Community support", + "Team size: 1 developer", + "Basic analytics", + "Monthly updates" + ], + "button": { + "text": "Choose Basic", + "url": "#" + } + }, + { + "name": "Professional", + "price": "79", + "description": "Ideal for growing development teams.", + "featured": true, + "features": [ + "All Basic features", + "Priority support", + "Team size: up to 5 developers", + "Advanced analytics", + "CI/CD integration" + ], + "button": { + "text": "Choose Pro", + "url": "#" + } + }, + { + "name": "Business", + "price": "299", + "description": "For large organizations and enterprises.", + "features": [ + "All Pro features", + "24/7 dedicated support", + "Unlimited team size", + "Custom integrations", + "SLA guarantee" + ], + "button": { + "text": "Choose Business", + "url": "#" + } + } + ] +} +{{< /pricing-table-2 >}} + +{{< faq >}} +{ + "title": "Common Questions", + "description": "Find answers to frequently asked questions about our pricing plans and features.", + "questions": [ + { + "question": "What type of payment do you accept?", + "answer": "We accept all major credit cards, PayPal, and bank transfers. All payments are processed securely through our payment providers." + }, + { + "question": "Do you offer custom pricing for larger teams?", + "answer": "Yes! If you have specific needs or a larger team, please contact our sales team for custom pricing tailored to your requirements." + }, + { + "question": "What's included in the free updates?", + "answer": "Free updates include all new features, improvements, and bug fixes released during your subscription period. You'll always have access to the latest version." + }, + { + "question": "What kind of support is included?", + "answer": "All plans include technical support, with varying response times based on your plan level. Enterprise customers get priority support with dedicated account managers." + }, + { + "question": "Can I upgrade or downgrade my plan?", + "answer": "Yes, you can change your plan at any time. When upgrading, you'll be prorated for the remainder of your billing period. When downgrading, changes take effect at the next billing cycle." + } + ] +} +{{< /faq >}} diff --git a/exampleSite/content/privacy.md b/exampleSite/content/privacy.md new file mode 100644 index 0000000..a6b0955 --- /dev/null +++ b/exampleSite/content/privacy.md @@ -0,0 +1,88 @@ +--- +title: "Privacy Policy" +layout: "simple" +--- + +## Introduction + +At Saasify, we take your privacy seriously. This Privacy Policy explains how we collect, use, disclose, and safeguard your information when you use our service. + +--- + +## Information We Collect + +### Personal Information + +* **Name and email address** +* **Billing information** +* **Usage data and analytics** +* **Communication preferences** + +### Automatically Collected Information + +* **IP addresses** +* **Browser type** +* **Device information** +* **Cookies and tracking technologies** + +--- + +## How We Use Your Information + +We use the collected information for: + +* **Service Delivery** + Providing and maintaining our service +* **Updates** + Notifying you about changes to our service +* **Support** + Providing customer support +* **Transactions** + Processing your transactions +* **Analytics** + Analyzing usage patterns to improve our service + +--- + +## Data Security + +We implement appropriate technical and organizational security measures to protect your personal information. However, no method of transmission over the Internet is 100% secure. + +--- + +## Third-Party Services + +We may employ third-party companies and individuals to: + +* Facilitate our service +* Provide service-related services +* Assist in analyzing service usage + +--- + +## Your Rights + +You have the right to: + +* **Access** your personal data +* **Correct** inaccurate data +* **Request deletion** of your data +* **Object** to data processing +* **Export** your data + +--- + +## Changes to This Policy + +We may update our Privacy Policy from time to time. We will notify you of any changes by posting the new Privacy Policy on this page and updating the "Last Updated" date. + +--- + +## Contact Us + +If you have questions about this Privacy Policy, please contact us at: + +* **Email:** privacy@saasify.com +* **Address:** 123 Tech Street, San Francisco, CA 94105 + +*Last Updated: January 2024* diff --git a/exampleSite/hugo.toml b/exampleSite/hugo.toml new file mode 100644 index 0000000..1d3fc0e --- /dev/null +++ b/exampleSite/hugo.toml @@ -0,0 +1,234 @@ +baseURL = "https://saasify-demo.chaoming.li/" +languageCode = "en-us" +title = "Saasify" + +# Theme Config +theme = "../.." + +# Enable syntax highlighting +pygmentsCodeFences = true +pygmentsUseClasses = true + +# Enable emoji support +enableEmoji = true + +# Enable Git info for lastmod +enableGitInfo = true + +# Enable taxonomies +[taxonomies] + category = 'categories' + tag = 'tags' + +# Pagination +paginate = 6 +paginatePath = "page" + +[params] + description = "" + author = "Chaoming Li" + logo = "/images/logo.svg" + + # Global CTA Configuration + [params.cta] + enable = true + title = "Ready to Build Your SaaS Website?" + description = "Join companies already using our theme to create beautiful, high-performance websites." + gradient_from = "#2563eb" # Indigo-600 + gradient_to = "#7c3aed" # Purple-600 + gradient_angle = 30 + [params.cta.primary_button] + text = "Get Started Free" + url = "/get-started" + [params.cta.secondary_button] + text = "Book Demo" + url = "/demo" + + # Social Media Links + [params.social] + linkedin = "https://linkedin.com/in/chaomingli" + twitter = "https://twitter.com/lichaoming" + youtube = "https://youtube.com/@chaomingli" + facebook = "https://facebook.com/lichaoming" + instagram = "https://instagram.com/lichaoming" + github = "https://github.com/chaoming" + + # Footer Configuration + [params.footer] + column_1_title = "Features" + column_2_title = "COMPANY" + column_3_title = "LEGAL" + + [params.header] + # Header background and border styles (optional) + background = "bg-white/80 backdrop-blur-sm" + border = "border-b border-gray-100" + + # Logo configuration + [params.header.logo] + src = "/images/logo.svg" + + # Menu configuration + [params.header.menu] + spacing = "space-x-8" + + # Dropdown menu configuration + [params.header.menu.dropdown] + width = "w-72" + container_padding = "py-6" + item_padding = "px-8 py-3" + background = "bg-white" + border = "border border-gray-100" + shadow = "shadow-xl" + radius = "rounded-lg" + text_color = "text-gray-700" + hover_background = "hover:bg-gray-50" + text_size = "text-sm" + + # Button configuration + [params.header.buttons] + # Sign In button + [params.header.buttons.signIn] + text = "Sign in" + url = "/signin" + + # Get Started button + [params.header.buttons.getStarted] + text = "Get Started" + url = "/get-started" + + # Blog configuration + [params.blog] + enable = true + title = "Latest Articles" + subtitle = "Learn more about web development and best practices" + + # Blog CTA configuration + [params.blog.cta] + enable = true # Enable/disable CTA in blog posts + + # Sidebar configuration + [params.blog.sidebar] + # Recent articles section + [params.blog.sidebar.recent] + enable = true + title = "Recent Articles" + count = 5 + + # Categories section + [params.blog.sidebar.categories] + enable = true + title = "Categories" + + # Tags section + [params.blog.sidebar.tags] + enable = true + title = "Popular Tags" + count = 20 + + # Subscribe form section + [params.blog.sidebar.subscribe] + enable = true + title = "Subscribe to Newsletter" + description = "Get the latest posts delivered right to your inbox" + action = "https://formspree.io/f/your-form-id" + emailName = "email" + buttonText = "Subscribe" + placeholder = "Enter your email" + disclaimer = "We respect your privacy. Unsubscribe at any time." + +[module] + [module.hugoVersion] + extended = true + min = "0.80.0" + +[build] + writeStats = true + +[build.buildStats] + enable = true + +[security.funcs] + getenv = ['^HUGO_', '^CI$'] + +[markup] + [markup.highlight] + noClasses = false + lineNos = true + codeFences = true + guessSyntax = true + lineNumbersInTable = true + [markup.goldmark.renderer] + unsafe = true + [markup.tableOfContents] + endLevel = 3 + ordered = false + startLevel = 2 + +# Navigation Menu +[menu] + [[menu.main]] + name = "Features" + weight = 1 + [menu.main.params] + has_submenu = true + submenu = [ + { name = "Performance", url = "/features/performance/" }, + { name = "Design System", url = "/features/design-system/" }, + { name = "Developer Experience", url = "/features/developer-experience/" } + ] + [[menu.main]] + name = "Pricing" + url = "/pricing" + weight = 2 + [[menu.main]] + name = "Blog" + url = "/blog" + weight = 3 + [[menu.main]] + name = "Company" + weight = 4 + [menu.main.params] + has_submenu = true + submenu = [ + { name = "About Us", url = "/company/" }, + { name = "Careers", url = "/careers/" } + ] + + # Footer Column 1 Menu + [[menu.footer_column_1]] + name = "Performance" + url = "/features/performance/" + weight = 1 + [[menu.footer_column_1]] + name = "Design System" + url = "/features/design-system/" + weight = 2 + [[menu.footer_column_1]] + name = "Developer Experience" + url = "/features/developer-experience/" + weight = 3 + + # Footer Column 2 Menu + [[menu.footer_column_2]] + name = "Blog" + url = "/blog" + weight = 1 + [[menu.footer_column_2]] + name = "About Us" + url = "/company" + weight = 2 + [[menu.footer_column_2]] + name = "Careers" + url = "/careers" + weight = 3 + + # Footer Column 3 Menu + [[menu.footer_column_3]] + name = "License" + url = "/license" + weight = 1 + [[menu.footer_column_3]] + name = "Privacy Policy" + url = "/privacy" + weight = 2 diff --git a/exampleSite/hugo_stats.json b/exampleSite/hugo_stats.json new file mode 100644 index 0000000..311d53f --- /dev/null +++ b/exampleSite/hugo_stats.json @@ -0,0 +1,517 @@ +{ + "htmlElements": { + "tags": [ + "a", + "article", + "aside", + "body", + "br", + "button", + "code", + "dd", + "div", + "dt", + "em", + "footer", + "form", + "h1", + "h2", + "h3", + "h4", + "h5", + "head", + "header", + "hr", + "html", + "img", + "input", + "label", + "li", + "link", + "meta", + "nav", + "ol", + "p", + "path", + "pre", + "script", + "section", + "span", + "strong", + "style", + "svg", + "table", + "td", + "time", + "title", + "tr", + "ul" + ], + "classes": [ + "!max-w-none", + "-bottom-20", + "-bottom-4", + "-left-20", + "-mx-6", + "-right-20", + "-right-4", + "-top-20", + "-top-4", + "-translate-x-1/2", + "absolute", + "animate", + "aspect-h-9", + "aspect-square", + "aspect-w-16", + "backdrop-blur-sm", + "badge", + "badge-icon", + "bg-blue-100", + "bg-gradient-to-b", + "bg-gradient-to-r", + "bg-gray-100", + "bg-gray-50", + "bg-gray-800", + "bg-gray-900", + "bg-green-500", + "bg-primary-100", + "bg-primary-50", + "bg-primary-600", + "bg-red-500", + "bg-secondary-100", + "bg-white", + "bg-white/80", + "bg-yellow-400", + "bg-yellow-500", + "block", + "blur-3xl", + "border", + "border-2", + "border-b", + "border-gray-100", + "border-gray-200", + "border-gray-300", + "border-gray-700", + "border-t", + "border-white", + "border-y", + "bottom-2", + "btn", + "btn-outline", + "btn-primary", + "chroma", + "container", + "cta-gradient", + "cta-section", + "cursor-pointer", + "dark:bg-gray-800", + "dark:bg-gray-900", + "dark:border-gray-700", + "dark:text-gray-400", + "dark:text-green-400", + "dark:text-white", + "duration-200", + "duration-300", + "ease-in-out", + "faq-content", + "feature-page", + "filter", + "fixed", + "flex", + "flex-1", + "flex-auto", + "flex-col", + "flex-grow", + "flex-shrink-0", + "flex-wrap", + "focus:border-primary-500", + "focus:outline-none", + "focus:ring-2", + "focus:ring-offset-2", + "focus:ring-primary-500", + "focus:ring-primary-600", + "font-bold", + "font-extrabold", + "font-light", + "font-medium", + "font-mono", + "font-semibold", + "from-blue-50", + "from-primary-600", + "gap-12", + "gap-2", + "gap-4", + "gap-6", + "gap-8", + "gap-x-8", + "gap-y-16", + "gradient-bg", + "grayscale", + "grid", + "grid-cols-1", + "grid-cols-2", + "group", + "group-hover:bg-primary-100", + "group-hover:border-primary-100", + "group-hover:opacity-100", + "group-hover:scale-105", + "group-hover:shadow-md", + "group-hover:text-primary-600", + "group-hover:text-primary-700", + "group-hover:visible", + "h-12", + "h-20", + "h-3", + "h-4", + "h-5", + "h-6", + "h-64", + "h-8", + "h-96", + "h-auto", + "h-full", + "hidden", + "highlight", + "hover:-translate-y-1", + "hover:bg-gray-100", + "hover:bg-gray-200", + "hover:bg-gray-50", + "hover:bg-primary-100", + "hover:bg-primary-700", + "hover:border-primary-600", + "hover:grayscale-0", + "hover:scale-105", + "hover:shadow-lg", + "hover:shadow-md", + "hover:text-gray-900", + "hover:text-primary-600", + "hover:text-primary-700", + "inline-block", + "inline-flex", + "inset-x-0", + "investor-logo", + "invisible", + "isolate", + "items-baseline", + "items-center", + "items-start", + "justify-between", + "justify-center", + "leading-7", + "leading-8", + "leading-relaxed", + "leading-tight", + "left-0", + "left-1/2", + "lg:flex-row", + "lg:grid-cols-2", + "lg:grid-cols-3", + "lg:max-w-none", + "lg:mb-12", + "lg:mt-24", + "lg:order-1", + "lg:order-2", + "lg:p-12", + "lg:prose-lg", + "lg:px-6", + "lg:px-8", + "lg:py-16", + "lg:text-6xl", + "lg:text-center", + "lg:w-80", + "line-clamp-2", + "lntable", + "lntd", + "logo-scroll", + "logos-slide", + "max-h-12", + "max-w-2xl", + "max-w-3xl", + "max-w-4xl", + "max-w-6xl", + "max-w-7xl", + "max-w-none", + "max-w-screen-md", + "max-w-screen-xl", + "max-w-xl", + "mb-1", + "mb-12", + "mb-16", + "mb-2", + "mb-3", + "mb-4", + "mb-5", + "mb-6", + "mb-8", + "md:flex", + "md:flex-row", + "md:grid-cols-2", + "md:grid-cols-3", + "md:grid-cols-4", + "md:hidden", + "md:pb-28", + "md:pt-24", + "md:space-y-0", + "md:text-2xl", + "md:text-3xl", + "md:text-4xl", + "md:text-5xl", + "min-h-screen", + "ml-1", + "ml-2", + "ml-3", + "ml-4", + "mobile-menu-wrapper", + "mr-2", + "mt-12", + "mt-16", + "mt-2", + "mt-4", + "mt-6", + "mt-8", + "mx-auto", + "my-8", + "nav-content", + "nav-toggle", + "not-prose", + "object-cover", + "opacity-0", + "opacity-50", + "opacity-75", + "order-1", + "order-2", + "overflow-hidden", + "overflow-x-auto", + "p-2", + "p-4", + "p-6", + "p-8", + "pb-20", + "pb-24", + "pb-32", + "pl-4", + "post", + "prose", + "prose-lg", + "prose-sm", + "pt-16", + "pt-20", + "pt-24", + "pt-4", + "pt-8", + "px-3", + "px-4", + "px-5", + "px-6", + "px-8", + "py-1", + "py-1.5", + "py-10", + "py-12", + "py-16", + "py-2", + "py-20", + "py-24", + "py-3", + "py-4", + "py-6", + "py-8", + "relative", + "right-0", + "right-2", + "right-4", + "ring-1", + "ring-gray-200", + "rounded-2xl", + "rounded-full", + "rounded-lg", + "rounded-md", + "rounded-xl", + "section", + "shadow-2xl", + "shadow-elevation", + "shadow-lg", + "shadow-md", + "shadow-sm", + "shadow-xl", + "sm:flex-row", + "sm:mt-20", + "sm:prose", + "sm:pt-32", + "sm:px-6", + "sm:py-32", + "sm:text-4xl", + "sm:text-6xl", + "sm:text-xl", + "space-x-2", + "space-x-3", + "space-x-4", + "space-x-6", + "space-x-8", + "space-y-2", + "space-y-3", + "space-y-32", + "space-y-4", + "space-y-6", + "space-y-8", + "sr-only", + "stat-card", + "team-member", + "testimonial-card", + "testimonials-container", + "testimonials-track", + "text-2xl", + "text-3xl", + "text-4xl", + "text-5xl", + "text-base", + "text-blue-500", + "text-blue-600", + "text-blue-800", + "text-center", + "text-gray-200", + "text-gray-500", + "text-gray-600", + "text-gray-700", + "text-gray-800", + "text-gray-900", + "text-green-500", + "text-left", + "text-lg", + "text-primary-100", + "text-primary-600", + "text-right", + "text-sm", + "text-white", + "text-xl", + "text-xs", + "to-primary-700", + "to-white", + "top-0", + "top-20", + "top-4", + "tracking-tight", + "tracking-wider", + "transform", + "transition", + "transition-all", + "transition-colors", + "transition-shadow", + "transition-transform", + "uppercase", + "value-card", + "via-blue-50", + "w-12", + "w-3", + "w-4", + "w-5", + "w-6", + "w-64", + "w-72", + "w-8", + "w-full", + "xl:grid-cols-4", + "xl:w-96", + "z-10", + "z-50" + ], + "ids": [ + "1-colors-and-typography", + "1-netlify", + "2-layout-modifications", + "2-vercel", + "3-github-pages", + "TableOfContents", + "about-the-role", + "accessibility", + "advanced-customization-techniques", + "advanced-features", + "advanced-optimization-techniques", + "asset-optimization", + "automatically-collected-information", + "backup-strategies", + "basic-theme-customization", + "benefits", + "best-practices", + "built-for-developers", + "built-for-speed", + "caching-strategies", + "caching-strategy", + "cdn-integration", + "cdn-setup", + "changes-to-this-policy", + "code-examples", + "common-customization-examples", + "component-system", + "comprehensive-design-system", + "conclusion", + "configuration", + "contact-us", + "content-backup", + "content-delivery", + "content-organization", + "content-reuse", + "content-types", + "content-updates", + "content-workflow", + "core-elements", + "creating-custom-shortcodes", + "critical-css", + "css-and-javascript", + "custom-homepage-layout", + "custom-taxonomy-pages", + "customization", + "data-security", + "deployment-best-practices", + "design-components", + "design-features", + "development-features", + "development-workflow", + "directory-structure", + "documentation", + "draft-management", + "dynamic-content", + "edge-computing", + "front-matter-templates", + "further-resources", + "how-to-apply", + "how-we-use-your-information", + "image-optimization", + "information-we-collect", + "introduction", + "key-metrics", + "mit-license", + "nav-toggle", + "next-steps", + "nice-to-have", + "optimization-features", + "page-bundles", + "partials", + "performance-considerations", + "performance-metrics", + "performance-monitoring", + "personal-information", + "popular-deployment-platforms", + "project-structure", + "related-content", + "requirements", + "resource-hints", + "resources", + "responsive-design", + "security-measures", + "seo-and-metadata", + "seo-optimization", + "setting-up-your-first-hugo-site", + "shortcodes", + "styling", + "taxonomies", + "third-party-services", + "ui-components", + "understanding-hugos-theme-structure", + "why-choose-hugo", + "working-with-content", + "working-with-partials", + "your-rights" + ] + } +} diff --git a/exampleSite/package.json b/exampleSite/package.json new file mode 100644 index 0000000..9d91cd3 --- /dev/null +++ b/exampleSite/package.json @@ -0,0 +1,17 @@ +{ + "name": "hugo-saasify-demo", + "version": "1.0.0", + "scripts": { + "start": "concurrently \"npx tailwindcss -i assets/css/main.css -o static/css/style.css --watch\" \"hugo server -D\"", + "build": "tailwindcss -i assets/css/main.css -o static/css/style.css --minify && hugo --minify" + }, + "devDependencies": { + "@tailwindcss/forms": "^0.5.7", + "@tailwindcss/typography": "^0.5.10", + "autoprefixer": "^10.4.16", + "concurrently": "^8.2.2", + "postcss": "^8.4.31", + "postcss-cli": "^10.1.0", + "tailwindcss": "^3.3.5" + } +} diff --git a/exampleSite/postcss.config.js b/exampleSite/postcss.config.js new file mode 100644 index 0000000..f1c8dac --- /dev/null +++ b/exampleSite/postcss.config.js @@ -0,0 +1,6 @@ +module.exports = { + plugins: { + tailwindcss: {}, + autoprefixer: {}, + } +} diff --git a/exampleSite/static/css/style.css b/exampleSite/static/css/style.css new file mode 100644 index 0000000..b7afcde --- /dev/null +++ b/exampleSite/static/css/style.css @@ -0,0 +1,4503 @@ +*, ::before, ::after { + --tw-border-spacing-x: 0; + --tw-border-spacing-y: 0; + --tw-translate-x: 0; + --tw-translate-y: 0; + --tw-rotate: 0; + --tw-skew-x: 0; + --tw-skew-y: 0; + --tw-scale-x: 1; + --tw-scale-y: 1; + --tw-pan-x: ; + --tw-pan-y: ; + --tw-pinch-zoom: ; + --tw-scroll-snap-strictness: proximity; + --tw-gradient-from-position: ; + --tw-gradient-via-position: ; + --tw-gradient-to-position: ; + --tw-ordinal: ; + --tw-slashed-zero: ; + --tw-numeric-figure: ; + --tw-numeric-spacing: ; + --tw-numeric-fraction: ; + --tw-ring-inset: ; + --tw-ring-offset-width: 0px; + --tw-ring-offset-color: #fff; + --tw-ring-color: rgb(59 130 246 / 0.5); + --tw-ring-offset-shadow: 0 0 #0000; + --tw-ring-shadow: 0 0 #0000; + --tw-shadow: 0 0 #0000; + --tw-shadow-colored: 0 0 #0000; + --tw-blur: ; + --tw-brightness: ; + --tw-contrast: ; + --tw-grayscale: ; + --tw-hue-rotate: ; + --tw-invert: ; + --tw-saturate: ; + --tw-sepia: ; + --tw-drop-shadow: ; + --tw-backdrop-blur: ; + --tw-backdrop-brightness: ; + --tw-backdrop-contrast: ; + --tw-backdrop-grayscale: ; + --tw-backdrop-hue-rotate: ; + --tw-backdrop-invert: ; + --tw-backdrop-opacity: ; + --tw-backdrop-saturate: ; + --tw-backdrop-sepia: ; + --tw-contain-size: ; + --tw-contain-layout: ; + --tw-contain-paint: ; + --tw-contain-style: ; +} + +::backdrop { + --tw-border-spacing-x: 0; + --tw-border-spacing-y: 0; + --tw-translate-x: 0; + --tw-translate-y: 0; + --tw-rotate: 0; + --tw-skew-x: 0; + --tw-skew-y: 0; + --tw-scale-x: 1; + --tw-scale-y: 1; + --tw-pan-x: ; + --tw-pan-y: ; + --tw-pinch-zoom: ; + --tw-scroll-snap-strictness: proximity; + --tw-gradient-from-position: ; + --tw-gradient-via-position: ; + --tw-gradient-to-position: ; + --tw-ordinal: ; + --tw-slashed-zero: ; + --tw-numeric-figure: ; + --tw-numeric-spacing: ; + --tw-numeric-fraction: ; + --tw-ring-inset: ; + --tw-ring-offset-width: 0px; + --tw-ring-offset-color: #fff; + --tw-ring-color: rgb(59 130 246 / 0.5); + --tw-ring-offset-shadow: 0 0 #0000; + --tw-ring-shadow: 0 0 #0000; + --tw-shadow: 0 0 #0000; + --tw-shadow-colored: 0 0 #0000; + --tw-blur: ; + --tw-brightness: ; + --tw-contrast: ; + --tw-grayscale: ; + --tw-hue-rotate: ; + --tw-invert: ; + --tw-saturate: ; + --tw-sepia: ; + --tw-drop-shadow: ; + --tw-backdrop-blur: ; + --tw-backdrop-brightness: ; + --tw-backdrop-contrast: ; + --tw-backdrop-grayscale: ; + --tw-backdrop-hue-rotate: ; + --tw-backdrop-invert: ; + --tw-backdrop-opacity: ; + --tw-backdrop-saturate: ; + --tw-backdrop-sepia: ; + --tw-contain-size: ; + --tw-contain-layout: ; + --tw-contain-paint: ; + --tw-contain-style: ; +} + +/* +! tailwindcss v3.4.15 | MIT License | https://tailwindcss.com +*/ + +/* +1. Prevent padding and border from affecting element width. (https://github.com/mozdevs/cssremedy/issues/4) +2. Allow adding a border to an element by just adding a border-width. (https://github.com/tailwindcss/tailwindcss/pull/116) +*/ + +*, +::before, +::after { + box-sizing: border-box; + /* 1 */ + border-width: 0; + /* 2 */ + border-style: solid; + /* 2 */ + border-color: #e5e7eb; + /* 2 */ +} + +::before, +::after { + --tw-content: ''; +} + +/* +1. Use a consistent sensible line-height in all browsers. +2. Prevent adjustments of font size after orientation changes in iOS. +3. Use a more readable tab size. +4. Use the user's configured `sans` font-family by default. +5. Use the user's configured `sans` font-feature-settings by default. +6. Use the user's configured `sans` font-variation-settings by default. +7. Disable tap highlights on iOS +*/ + +html, +:host { + line-height: 1.5; + /* 1 */ + -webkit-text-size-adjust: 100%; + /* 2 */ + -moz-tab-size: 4; + /* 3 */ + -o-tab-size: 4; + tab-size: 4; + /* 3 */ + font-family: Inter, system-ui, sans-serif; + /* 4 */ + font-feature-settings: normal; + /* 5 */ + font-variation-settings: normal; + /* 6 */ + -webkit-tap-highlight-color: transparent; + /* 7 */ +} + +/* +1. Remove the margin in all browsers. +2. Inherit line-height from `html` so users can set them as a class directly on the `html` element. +*/ + +body { + margin: 0; + /* 1 */ + line-height: inherit; + /* 2 */ +} + +/* +1. Add the correct height in Firefox. +2. Correct the inheritance of border color in Firefox. (https://bugzilla.mozilla.org/show_bug.cgi?id=190655) +3. Ensure horizontal rules are visible by default. +*/ + +hr { + height: 0; + /* 1 */ + color: inherit; + /* 2 */ + border-top-width: 1px; + /* 3 */ +} + +/* +Add the correct text decoration in Chrome, Edge, and Safari. +*/ + +abbr:where([title]) { + -webkit-text-decoration: underline dotted; + text-decoration: underline dotted; +} + +/* +Remove the default font size and weight for headings. +*/ + +h1, +h2, +h3, +h4, +h5, +h6 { + font-size: inherit; + font-weight: inherit; +} + +/* +Reset links to optimize for opt-in styling instead of opt-out. +*/ + +a { + color: inherit; + text-decoration: inherit; +} + +/* +Add the correct font weight in Edge and Safari. +*/ + +b, +strong { + font-weight: bolder; +} + +/* +1. Use the user's configured `mono` font-family by default. +2. Use the user's configured `mono` font-feature-settings by default. +3. Use the user's configured `mono` font-variation-settings by default. +4. Correct the odd `em` font sizing in all browsers. +*/ + +code, +kbd, +samp, +pre { + font-family: ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace; + /* 1 */ + font-feature-settings: normal; + /* 2 */ + font-variation-settings: normal; + /* 3 */ + font-size: 1em; + /* 4 */ +} + +/* +Add the correct font size in all browsers. +*/ + +small { + font-size: 80%; +} + +/* +Prevent `sub` and `sup` elements from affecting the line height in all browsers. +*/ + +sub, +sup { + font-size: 75%; + line-height: 0; + position: relative; + vertical-align: baseline; +} + +sub { + bottom: -0.25em; +} + +sup { + top: -0.5em; +} + +/* +1. Remove text indentation from table contents in Chrome and Safari. (https://bugs.chromium.org/p/chromium/issues/detail?id=999088, https://bugs.webkit.org/show_bug.cgi?id=201297) +2. Correct table border color inheritance in all Chrome and Safari. (https://bugs.chromium.org/p/chromium/issues/detail?id=935729, https://bugs.webkit.org/show_bug.cgi?id=195016) +3. Remove gaps between table borders by default. +*/ + +table { + text-indent: 0; + /* 1 */ + border-color: inherit; + /* 2 */ + border-collapse: collapse; + /* 3 */ +} + +/* +1. Change the font styles in all browsers. +2. Remove the margin in Firefox and Safari. +3. Remove default padding in all browsers. +*/ + +button, +input, +optgroup, +select, +textarea { + font-family: inherit; + /* 1 */ + font-feature-settings: inherit; + /* 1 */ + font-variation-settings: inherit; + /* 1 */ + font-size: 100%; + /* 1 */ + font-weight: inherit; + /* 1 */ + line-height: inherit; + /* 1 */ + letter-spacing: inherit; + /* 1 */ + color: inherit; + /* 1 */ + margin: 0; + /* 2 */ + padding: 0; + /* 3 */ +} + +/* +Remove the inheritance of text transform in Edge and Firefox. +*/ + +button, +select { + text-transform: none; +} + +/* +1. Correct the inability to style clickable types in iOS and Safari. +2. Remove default button styles. +*/ + +button, +input:where([type='button']), +input:where([type='reset']), +input:where([type='submit']) { + -webkit-appearance: button; + /* 1 */ + background-color: transparent; + /* 2 */ + background-image: none; + /* 2 */ +} + +/* +Use the modern Firefox focus style for all focusable elements. +*/ + +:-moz-focusring { + outline: auto; +} + +/* +Remove the additional `:invalid` styles in Firefox. (https://github.com/mozilla/gecko-dev/blob/2f9eacd9d3d995c937b4251a5557d95d494c9be1/layout/style/res/forms.css#L728-L737) +*/ + +:-moz-ui-invalid { + box-shadow: none; +} + +/* +Add the correct vertical alignment in Chrome and Firefox. +*/ + +progress { + vertical-align: baseline; +} + +/* +Correct the cursor style of increment and decrement buttons in Safari. +*/ + +::-webkit-inner-spin-button, +::-webkit-outer-spin-button { + height: auto; +} + +/* +1. Correct the odd appearance in Chrome and Safari. +2. Correct the outline style in Safari. +*/ + +[type='search'] { + -webkit-appearance: textfield; + /* 1 */ + outline-offset: -2px; + /* 2 */ +} + +/* +Remove the inner padding in Chrome and Safari on macOS. +*/ + +::-webkit-search-decoration { + -webkit-appearance: none; +} + +/* +1. Correct the inability to style clickable types in iOS and Safari. +2. Change font properties to `inherit` in Safari. +*/ + +::-webkit-file-upload-button { + -webkit-appearance: button; + /* 1 */ + font: inherit; + /* 2 */ +} + +/* +Add the correct display in Chrome and Safari. +*/ + +summary { + display: list-item; +} + +/* +Removes the default spacing and border for appropriate elements. +*/ + +blockquote, +dl, +dd, +h1, +h2, +h3, +h4, +h5, +h6, +hr, +figure, +p, +pre { + margin: 0; +} + +fieldset { + margin: 0; + padding: 0; +} + +legend { + padding: 0; +} + +ol, +ul, +menu { + list-style: none; + margin: 0; + padding: 0; +} + +/* +Reset default styling for dialogs. +*/ + +dialog { + padding: 0; +} + +/* +Prevent resizing textareas horizontally by default. +*/ + +textarea { + resize: vertical; +} + +/* +1. Reset the default placeholder opacity in Firefox. (https://github.com/tailwindlabs/tailwindcss/issues/3300) +2. Set the default placeholder color to the user's configured gray 400 color. +*/ + +input::-moz-placeholder, textarea::-moz-placeholder { + opacity: 1; + /* 1 */ + color: #9ca3af; + /* 2 */ +} + +input::placeholder, +textarea::placeholder { + opacity: 1; + /* 1 */ + color: #9ca3af; + /* 2 */ +} + +/* +Set the default cursor for buttons. +*/ + +button, +[role="button"] { + cursor: pointer; +} + +/* +Make sure disabled buttons don't get the pointer cursor. +*/ + +:disabled { + cursor: default; +} + +/* +1. Make replaced elements `display: block` by default. (https://github.com/mozdevs/cssremedy/issues/14) +2. Add `vertical-align: middle` to align replaced elements more sensibly by default. (https://github.com/jensimmons/cssremedy/issues/14#issuecomment-634934210) + This can trigger a poorly considered lint error in some tools but is included by design. +*/ + +img, +svg, +video, +canvas, +audio, +iframe, +embed, +object { + display: block; + /* 1 */ + vertical-align: middle; + /* 2 */ +} + +/* +Constrain images and videos to the parent width and preserve their intrinsic aspect ratio. (https://github.com/mozdevs/cssremedy/issues/14) +*/ + +img, +video { + max-width: 100%; + height: auto; +} + +/* Make elements with the HTML hidden attribute stay hidden by default */ + +[hidden]:where(:not([hidden="until-found"])) { + display: none; +} + +[type='text'],input:where(:not([type])),[type='email'],[type='url'],[type='password'],[type='number'],[type='date'],[type='datetime-local'],[type='month'],[type='search'],[type='tel'],[type='time'],[type='week'],[multiple],textarea,select { + -webkit-appearance: none; + -moz-appearance: none; + appearance: none; + background-color: #fff; + border-color: #6b7280; + border-width: 1px; + border-radius: 0px; + padding-top: 0.5rem; + padding-right: 0.75rem; + padding-bottom: 0.5rem; + padding-left: 0.75rem; + font-size: 1rem; + line-height: 1.5rem; + --tw-shadow: 0 0 #0000; +} + +[type='text']:focus, input:where(:not([type])):focus, [type='email']:focus, [type='url']:focus, [type='password']:focus, [type='number']:focus, [type='date']:focus, [type='datetime-local']:focus, [type='month']:focus, [type='search']:focus, [type='tel']:focus, [type='time']:focus, [type='week']:focus, [multiple]:focus, textarea:focus, select: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: #2563eb; + --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: #2563eb; +} + +input::-moz-placeholder, textarea::-moz-placeholder { + color: #6b7280; + opacity: 1; +} + +input::placeholder,textarea::placeholder { + color: #6b7280; + opacity: 1; +} + +::-webkit-datetime-edit-fields-wrapper { + padding: 0; +} + +::-webkit-date-and-time-value { + min-height: 1.5em; + 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='%236b7280' stroke-linecap='round' stroke-linejoin='round' stroke-width='1.5' d='M6 8l4 4 4-4'/%3e%3c/svg%3e"); + background-position: right 0.5rem center; + background-repeat: no-repeat; + background-size: 1.5em 1.5em; + padding-right: 2.5rem; + -webkit-print-color-adjust: exact; + print-color-adjust: exact; +} + +[multiple],[size]:where(select:not([size="1"])) { + background-image: initial; + background-position: initial; + background-repeat: unset; + background-size: initial; + padding-right: 0.75rem; + -webkit-print-color-adjust: unset; + print-color-adjust: unset; +} + +[type='checkbox'],[type='radio'] { + -webkit-appearance: none; + -moz-appearance: none; + appearance: none; + padding: 0; + -webkit-print-color-adjust: exact; + print-color-adjust: exact; + display: inline-block; + vertical-align: middle; + background-origin: border-box; + -webkit-user-select: none; + -moz-user-select: none; + user-select: none; + flex-shrink: 0; + height: 1rem; + width: 1rem; + color: #2563eb; + background-color: #fff; + border-color: #6b7280; + border-width: 1px; + --tw-shadow: 0 0 #0000; +} + +[type='checkbox'] { + border-radius: 0px; +} + +[type='radio'] { + border-radius: 100%; +} + +[type='checkbox']:focus,[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: #2563eb; + --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); +} + +[type='checkbox']:checked,[type='radio']:checked { + border-color: transparent; + background-color: currentColor; + background-size: 100% 100%; + background-position: center; + background-repeat: no-repeat; +} + +[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) { + [type='checkbox']:checked { + -webkit-appearance: auto; + -moz-appearance: auto; + appearance: auto; + } +} + +[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) { + [type='radio']:checked { + -webkit-appearance: auto; + -moz-appearance: auto; + appearance: auto; + } +} + +[type='checkbox']:checked:hover,[type='checkbox']:checked:focus,[type='radio']:checked:hover,[type='radio']:checked:focus { + border-color: transparent; + background-color: currentColor; +} + +[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: center; + background-repeat: no-repeat; +} + +@media (forced-colors: active) { + [type='checkbox']:indeterminate { + -webkit-appearance: auto; + -moz-appearance: auto; + appearance: auto; + } +} + +[type='checkbox']:indeterminate:hover,[type='checkbox']:indeterminate:focus { + border-color: transparent; + background-color: currentColor; +} + +[type='file'] { + background: unset; + border-color: inherit; + border-width: 0; + border-radius: 0; + padding: 0; + font-size: unset; + line-height: inherit; +} + +[type='file']:focus { + outline: 1px solid ButtonText; + outline: 1px auto -webkit-focus-ring-color; +} + +html { + scroll-behavior: smooth; +} + +body { + font-family: Inter, system-ui, sans-serif; + --tw-text-opacity: 1; + color: rgb(55 65 81 / var(--tw-text-opacity, 1)); + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; +} + +h1, h2, h3, h4, h5, h6 { + font-family: Plus Jakarta Sans, sans-serif; + font-weight: 700; + --tw-text-opacity: 1; + color: rgb(17 24 39 / var(--tw-text-opacity, 1)); +} + +.container { + width: 100%; +} + +@media (min-width: 640px) { + .container { + max-width: 640px; + } +} + +@media (min-width: 768px) { + .container { + max-width: 768px; + } +} + +@media (min-width: 1024px) { + .container { + max-width: 1024px; + } +} + +@media (min-width: 1280px) { + .container { + max-width: 1280px; + } +} + +@media (min-width: 1536px) { + .container { + max-width: 1536px; + } +} + +.prose { + color: var(--tw-prose-body); + max-width: 65ch; +} + +.prose :where(p):not(:where([class~="not-prose"],[class~="not-prose"] *)) { + margin-top: 1.25em; + margin-bottom: 1.25em; +} + +.prose :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; +} + +.prose :where(a):not(:where([class~="not-prose"],[class~="not-prose"] *)) { + color: var(--tw-prose-links); + text-decoration: underline; + font-weight: 500; +} + +.prose :where(strong):not(:where([class~="not-prose"],[class~="not-prose"] *)) { + color: var(--tw-prose-bold); + font-weight: 600; +} + +.prose :where(a strong):not(:where([class~="not-prose"],[class~="not-prose"] *)) { + color: inherit; +} + +.prose :where(blockquote strong):not(:where([class~="not-prose"],[class~="not-prose"] *)) { + color: inherit; +} + +.prose :where(thead th strong):not(:where([class~="not-prose"],[class~="not-prose"] *)) { + color: inherit; +} + +.prose :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; +} + +.prose :where(ol[type="A"]):not(:where([class~="not-prose"],[class~="not-prose"] *)) { + list-style-type: upper-alpha; +} + +.prose :where(ol[type="a"]):not(:where([class~="not-prose"],[class~="not-prose"] *)) { + list-style-type: lower-alpha; +} + +.prose :where(ol[type="A" s]):not(:where([class~="not-prose"],[class~="not-prose"] *)) { + list-style-type: upper-alpha; +} + +.prose :where(ol[type="a" s]):not(:where([class~="not-prose"],[class~="not-prose"] *)) { + list-style-type: lower-alpha; +} + +.prose :where(ol[type="I"]):not(:where([class~="not-prose"],[class~="not-prose"] *)) { + list-style-type: upper-roman; +} + +.prose :where(ol[type="i"]):not(:where([class~="not-prose"],[class~="not-prose"] *)) { + list-style-type: lower-roman; +} + +.prose :where(ol[type="I" s]):not(:where([class~="not-prose"],[class~="not-prose"] *)) { + list-style-type: upper-roman; +} + +.prose :where(ol[type="i" s]):not(:where([class~="not-prose"],[class~="not-prose"] *)) { + list-style-type: lower-roman; +} + +.prose :where(ol[type="1"]):not(:where([class~="not-prose"],[class~="not-prose"] *)) { + list-style-type: decimal; +} + +.prose :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; +} + +.prose :where(ol > li):not(:where([class~="not-prose"],[class~="not-prose"] *))::marker { + font-weight: 400; + color: var(--tw-prose-counters); +} + +.prose :where(ul > li):not(:where([class~="not-prose"],[class~="not-prose"] *))::marker { + color: var(--tw-prose-bullets); +} + +.prose :where(dt):not(:where([class~="not-prose"],[class~="not-prose"] *)) { + color: var(--tw-prose-headings); + font-weight: 600; + margin-top: 1.25em; +} + +.prose :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; +} + +.prose :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; +} + +.prose :where(blockquote p:first-of-type):not(:where([class~="not-prose"],[class~="not-prose"] *))::before { + content: open-quote; +} + +.prose :where(blockquote p:last-of-type):not(:where([class~="not-prose"],[class~="not-prose"] *))::after { + content: close-quote; +} + +.prose :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; +} + +.prose :where(h1 strong):not(:where([class~="not-prose"],[class~="not-prose"] *)) { + font-weight: 900; + color: inherit; +} + +.prose :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; +} + +.prose :where(h2 strong):not(:where([class~="not-prose"],[class~="not-prose"] *)) { + font-weight: 800; + color: inherit; +} + +.prose :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; +} + +.prose :where(h3 strong):not(:where([class~="not-prose"],[class~="not-prose"] *)) { + font-weight: 700; + color: inherit; +} + +.prose :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; +} + +.prose :where(h4 strong):not(:where([class~="not-prose"],[class~="not-prose"] *)) { + font-weight: 700; + color: inherit; +} + +.prose :where(img):not(:where([class~="not-prose"],[class~="not-prose"] *)) { + margin-top: 2em; + margin-bottom: 2em; +} + +.prose :where(picture):not(:where([class~="not-prose"],[class~="not-prose"] *)) { + display: block; + margin-top: 2em; + margin-bottom: 2em; +} + +.prose :where(video):not(:where([class~="not-prose"],[class~="not-prose"] *)) { + margin-top: 2em; + margin-bottom: 2em; +} + +.prose :where(kbd):not(:where([class~="not-prose"],[class~="not-prose"] *)) { + font-weight: 500; + font-family: inherit; + color: var(--tw-prose-kbd); + box-shadow: 0 0 0 1px rgb(var(--tw-prose-kbd-shadows) / 10%), 0 3px 0 rgb(var(--tw-prose-kbd-shadows) / 10%); + font-size: 0.875em; + border-radius: 0.3125rem; + padding-top: 0.1875em; + padding-inline-end: 0.375em; + padding-bottom: 0.1875em; + padding-inline-start: 0.375em; +} + +.prose :where(code):not(:where([class~="not-prose"],[class~="not-prose"] *)) { + color: var(--tw-prose-code); + font-weight: 600; + font-size: 0.875em; +} + +.prose :where(code):not(:where([class~="not-prose"],[class~="not-prose"] *))::before { + content: "`"; +} + +.prose :where(code):not(:where([class~="not-prose"],[class~="not-prose"] *))::after { + content: "`"; +} + +.prose :where(a code):not(:where([class~="not-prose"],[class~="not-prose"] *)) { + color: inherit; +} + +.prose :where(h1 code):not(:where([class~="not-prose"],[class~="not-prose"] *)) { + color: inherit; +} + +.prose :where(h2 code):not(:where([class~="not-prose"],[class~="not-prose"] *)) { + color: inherit; + font-size: 0.875em; +} + +.prose :where(h3 code):not(:where([class~="not-prose"],[class~="not-prose"] *)) { + color: inherit; + font-size: 0.9em; +} + +.prose :where(h4 code):not(:where([class~="not-prose"],[class~="not-prose"] *)) { + color: inherit; +} + +.prose :where(blockquote code):not(:where([class~="not-prose"],[class~="not-prose"] *)) { + color: inherit; +} + +.prose :where(thead th code):not(:where([class~="not-prose"],[class~="not-prose"] *)) { + color: inherit; +} + +.prose :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; +} + +.prose :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; +} + +.prose :where(pre code):not(:where([class~="not-prose"],[class~="not-prose"] *))::before { + content: none; +} + +.prose :where(pre code):not(:where([class~="not-prose"],[class~="not-prose"] *))::after { + content: none; +} + +.prose :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; +} + +.prose :where(thead):not(:where([class~="not-prose"],[class~="not-prose"] *)) { + border-bottom-width: 1px; + border-bottom-color: var(--tw-prose-th-borders); +} + +.prose :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; +} + +.prose :where(tbody tr):not(:where([class~="not-prose"],[class~="not-prose"] *)) { + border-bottom-width: 1px; + border-bottom-color: var(--tw-prose-td-borders); +} + +.prose :where(tbody tr:last-child):not(:where([class~="not-prose"],[class~="not-prose"] *)) { + border-bottom-width: 0; +} + +.prose :where(tbody td):not(:where([class~="not-prose"],[class~="not-prose"] *)) { + vertical-align: baseline; +} + +.prose :where(tfoot):not(:where([class~="not-prose"],[class~="not-prose"] *)) { + border-top-width: 1px; + border-top-color: var(--tw-prose-th-borders); +} + +.prose :where(tfoot td):not(:where([class~="not-prose"],[class~="not-prose"] *)) { + vertical-align: top; +} + +.prose :where(th, td):not(:where([class~="not-prose"],[class~="not-prose"] *)) { + text-align: start; +} + +.prose :where(figure > *):not(:where([class~="not-prose"],[class~="not-prose"] *)) { + margin-top: 0; + margin-bottom: 0; +} + +.prose :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; +} + +.prose { + --tw-prose-body: #374151; + --tw-prose-headings: #111827; + --tw-prose-lead: #4b5563; + --tw-prose-links: #111827; + --tw-prose-bold: #111827; + --tw-prose-counters: #6b7280; + --tw-prose-bullets: #d1d5db; + --tw-prose-hr: #e5e7eb; + --tw-prose-quotes: #111827; + --tw-prose-quote-borders: #e5e7eb; + --tw-prose-captions: #6b7280; + --tw-prose-kbd: #111827; + --tw-prose-kbd-shadows: 17 24 39; + --tw-prose-code: #111827; + --tw-prose-pre-code: #e5e7eb; + --tw-prose-pre-bg: #1f2937; + --tw-prose-th-borders: #d1d5db; + --tw-prose-td-borders: #e5e7eb; + --tw-prose-invert-body: #d1d5db; + --tw-prose-invert-headings: #fff; + --tw-prose-invert-lead: #9ca3af; + --tw-prose-invert-links: #fff; + --tw-prose-invert-bold: #fff; + --tw-prose-invert-counters: #9ca3af; + --tw-prose-invert-bullets: #4b5563; + --tw-prose-invert-hr: #374151; + --tw-prose-invert-quotes: #f3f4f6; + --tw-prose-invert-quote-borders: #374151; + --tw-prose-invert-captions: #9ca3af; + --tw-prose-invert-kbd: #fff; + --tw-prose-invert-kbd-shadows: 255 255 255; + --tw-prose-invert-code: #fff; + --tw-prose-invert-pre-code: #d1d5db; + --tw-prose-invert-pre-bg: rgb(0 0 0 / 50%); + --tw-prose-invert-th-borders: #4b5563; + --tw-prose-invert-td-borders: #374151; + font-size: 1rem; + line-height: 1.75; +} + +.prose :where(picture > img):not(:where([class~="not-prose"],[class~="not-prose"] *)) { + margin-top: 0; + margin-bottom: 0; +} + +.prose :where(li):not(:where([class~="not-prose"],[class~="not-prose"] *)) { + margin-top: 0.5em; + margin-bottom: 0.5em; +} + +.prose :where(ol > li):not(:where([class~="not-prose"],[class~="not-prose"] *)) { + padding-inline-start: 0.375em; +} + +.prose :where(ul > li):not(:where([class~="not-prose"],[class~="not-prose"] *)) { + padding-inline-start: 0.375em; +} + +.prose :where(.prose > ul > li p):not(:where([class~="not-prose"],[class~="not-prose"] *)) { + margin-top: 0.75em; + margin-bottom: 0.75em; +} + +.prose :where(.prose > ul > li > p:first-child):not(:where([class~="not-prose"],[class~="not-prose"] *)) { + margin-top: 1.25em; +} + +.prose :where(.prose > ul > li > p:last-child):not(:where([class~="not-prose"],[class~="not-prose"] *)) { + margin-bottom: 1.25em; +} + +.prose :where(.prose > ol > li > p:first-child):not(:where([class~="not-prose"],[class~="not-prose"] *)) { + margin-top: 1.25em; +} + +.prose :where(.prose > ol > li > p:last-child):not(:where([class~="not-prose"],[class~="not-prose"] *)) { + margin-bottom: 1.25em; +} + +.prose :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; +} + +.prose :where(dl):not(:where([class~="not-prose"],[class~="not-prose"] *)) { + margin-top: 1.25em; + margin-bottom: 1.25em; +} + +.prose :where(dd):not(:where([class~="not-prose"],[class~="not-prose"] *)) { + margin-top: 0.5em; + padding-inline-start: 1.625em; +} + +.prose :where(hr + *):not(:where([class~="not-prose"],[class~="not-prose"] *)) { + margin-top: 0; +} + +.prose :where(h2 + *):not(:where([class~="not-prose"],[class~="not-prose"] *)) { + margin-top: 0; +} + +.prose :where(h3 + *):not(:where([class~="not-prose"],[class~="not-prose"] *)) { + margin-top: 0; +} + +.prose :where(h4 + *):not(:where([class~="not-prose"],[class~="not-prose"] *)) { + margin-top: 0; +} + +.prose :where(thead th:first-child):not(:where([class~="not-prose"],[class~="not-prose"] *)) { + padding-inline-start: 0; +} + +.prose :where(thead th:last-child):not(:where([class~="not-prose"],[class~="not-prose"] *)) { + padding-inline-end: 0; +} + +.prose :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; +} + +.prose :where(tbody td:first-child, tfoot td:first-child):not(:where([class~="not-prose"],[class~="not-prose"] *)) { + padding-inline-start: 0; +} + +.prose :where(tbody td:last-child, tfoot td:last-child):not(:where([class~="not-prose"],[class~="not-prose"] *)) { + padding-inline-end: 0; +} + +.prose :where(figure):not(:where([class~="not-prose"],[class~="not-prose"] *)) { + margin-top: 2em; + margin-bottom: 2em; +} + +.prose :where(.prose > :first-child):not(:where([class~="not-prose"],[class~="not-prose"] *)) { + margin-top: 0; +} + +.prose :where(.prose > :last-child):not(:where([class~="not-prose"],[class~="not-prose"] *)) { + margin-bottom: 0; +} + +.prose-sm { + font-size: 0.875rem; + line-height: 1.7142857; +} + +.prose-sm :where(p):not(:where([class~="not-prose"],[class~="not-prose"] *)) { + margin-top: 1.1428571em; + margin-bottom: 1.1428571em; +} + +.prose-sm :where([class~="lead"]):not(:where([class~="not-prose"],[class~="not-prose"] *)) { + font-size: 1.2857143em; + line-height: 1.5555556; + margin-top: 0.8888889em; + margin-bottom: 0.8888889em; +} + +.prose-sm :where(blockquote):not(:where([class~="not-prose"],[class~="not-prose"] *)) { + margin-top: 1.3333333em; + margin-bottom: 1.3333333em; + padding-inline-start: 1.1111111em; +} + +.prose-sm :where(h1):not(:where([class~="not-prose"],[class~="not-prose"] *)) { + font-size: 2.1428571em; + margin-top: 0; + margin-bottom: 0.8em; + line-height: 1.2; +} + +.prose-sm :where(h2):not(:where([class~="not-prose"],[class~="not-prose"] *)) { + font-size: 1.4285714em; + margin-top: 1.6em; + margin-bottom: 0.8em; + line-height: 1.4; +} + +.prose-sm :where(h3):not(:where([class~="not-prose"],[class~="not-prose"] *)) { + font-size: 1.2857143em; + margin-top: 1.5555556em; + margin-bottom: 0.4444444em; + line-height: 1.5555556; +} + +.prose-sm :where(h4):not(:where([class~="not-prose"],[class~="not-prose"] *)) { + margin-top: 1.4285714em; + margin-bottom: 0.5714286em; + line-height: 1.4285714; +} + +.prose-sm :where(img):not(:where([class~="not-prose"],[class~="not-prose"] *)) { + margin-top: 1.7142857em; + margin-bottom: 1.7142857em; +} + +.prose-sm :where(picture):not(:where([class~="not-prose"],[class~="not-prose"] *)) { + margin-top: 1.7142857em; + margin-bottom: 1.7142857em; +} + +.prose-sm :where(picture > img):not(:where([class~="not-prose"],[class~="not-prose"] *)) { + margin-top: 0; + margin-bottom: 0; +} + +.prose-sm :where(video):not(:where([class~="not-prose"],[class~="not-prose"] *)) { + margin-top: 1.7142857em; + margin-bottom: 1.7142857em; +} + +.prose-sm :where(kbd):not(:where([class~="not-prose"],[class~="not-prose"] *)) { + font-size: 0.8571429em; + border-radius: 0.3125rem; + padding-top: 0.1428571em; + padding-inline-end: 0.3571429em; + padding-bottom: 0.1428571em; + padding-inline-start: 0.3571429em; +} + +.prose-sm :where(code):not(:where([class~="not-prose"],[class~="not-prose"] *)) { + font-size: 0.8571429em; +} + +.prose-sm :where(h2 code):not(:where([class~="not-prose"],[class~="not-prose"] *)) { + font-size: 0.9em; +} + +.prose-sm :where(h3 code):not(:where([class~="not-prose"],[class~="not-prose"] *)) { + font-size: 0.8888889em; +} + +.prose-sm :where(pre):not(:where([class~="not-prose"],[class~="not-prose"] *)) { + font-size: 0.8571429em; + line-height: 1.6666667; + margin-top: 1.6666667em; + margin-bottom: 1.6666667em; + border-radius: 0.25rem; + padding-top: 0.6666667em; + padding-inline-end: 1em; + padding-bottom: 0.6666667em; + padding-inline-start: 1em; +} + +.prose-sm :where(ol):not(:where([class~="not-prose"],[class~="not-prose"] *)) { + margin-top: 1.1428571em; + margin-bottom: 1.1428571em; + padding-inline-start: 1.5714286em; +} + +.prose-sm :where(ul):not(:where([class~="not-prose"],[class~="not-prose"] *)) { + margin-top: 1.1428571em; + margin-bottom: 1.1428571em; + padding-inline-start: 1.5714286em; +} + +.prose-sm :where(li):not(:where([class~="not-prose"],[class~="not-prose"] *)) { + margin-top: 0.2857143em; + margin-bottom: 0.2857143em; +} + +.prose-sm :where(ol > li):not(:where([class~="not-prose"],[class~="not-prose"] *)) { + padding-inline-start: 0.4285714em; +} + +.prose-sm :where(ul > li):not(:where([class~="not-prose"],[class~="not-prose"] *)) { + padding-inline-start: 0.4285714em; +} + +.prose-sm :where(.prose-sm > ul > li p):not(:where([class~="not-prose"],[class~="not-prose"] *)) { + margin-top: 0.5714286em; + margin-bottom: 0.5714286em; +} + +.prose-sm :where(.prose-sm > ul > li > p:first-child):not(:where([class~="not-prose"],[class~="not-prose"] *)) { + margin-top: 1.1428571em; +} + +.prose-sm :where(.prose-sm > ul > li > p:last-child):not(:where([class~="not-prose"],[class~="not-prose"] *)) { + margin-bottom: 1.1428571em; +} + +.prose-sm :where(.prose-sm > ol > li > p:first-child):not(:where([class~="not-prose"],[class~="not-prose"] *)) { + margin-top: 1.1428571em; +} + +.prose-sm :where(.prose-sm > ol > li > p:last-child):not(:where([class~="not-prose"],[class~="not-prose"] *)) { + margin-bottom: 1.1428571em; +} + +.prose-sm :where(ul ul, ul ol, ol ul, ol ol):not(:where([class~="not-prose"],[class~="not-prose"] *)) { + margin-top: 0.5714286em; + margin-bottom: 0.5714286em; +} + +.prose-sm :where(dl):not(:where([class~="not-prose"],[class~="not-prose"] *)) { + margin-top: 1.1428571em; + margin-bottom: 1.1428571em; +} + +.prose-sm :where(dt):not(:where([class~="not-prose"],[class~="not-prose"] *)) { + margin-top: 1.1428571em; +} + +.prose-sm :where(dd):not(:where([class~="not-prose"],[class~="not-prose"] *)) { + margin-top: 0.2857143em; + padding-inline-start: 1.5714286em; +} + +.prose-sm :where(hr):not(:where([class~="not-prose"],[class~="not-prose"] *)) { + margin-top: 2.8571429em; + margin-bottom: 2.8571429em; +} + +.prose-sm :where(hr + *):not(:where([class~="not-prose"],[class~="not-prose"] *)) { + margin-top: 0; +} + +.prose-sm :where(h2 + *):not(:where([class~="not-prose"],[class~="not-prose"] *)) { + margin-top: 0; +} + +.prose-sm :where(h3 + *):not(:where([class~="not-prose"],[class~="not-prose"] *)) { + margin-top: 0; +} + +.prose-sm :where(h4 + *):not(:where([class~="not-prose"],[class~="not-prose"] *)) { + margin-top: 0; +} + +.prose-sm :where(table):not(:where([class~="not-prose"],[class~="not-prose"] *)) { + font-size: 0.8571429em; + line-height: 1.5; +} + +.prose-sm :where(thead th):not(:where([class~="not-prose"],[class~="not-prose"] *)) { + padding-inline-end: 1em; + padding-bottom: 0.6666667em; + padding-inline-start: 1em; +} + +.prose-sm :where(thead th:first-child):not(:where([class~="not-prose"],[class~="not-prose"] *)) { + padding-inline-start: 0; +} + +.prose-sm :where(thead th:last-child):not(:where([class~="not-prose"],[class~="not-prose"] *)) { + padding-inline-end: 0; +} + +.prose-sm :where(tbody td, tfoot td):not(:where([class~="not-prose"],[class~="not-prose"] *)) { + padding-top: 0.6666667em; + padding-inline-end: 1em; + padding-bottom: 0.6666667em; + padding-inline-start: 1em; +} + +.prose-sm :where(tbody td:first-child, tfoot td:first-child):not(:where([class~="not-prose"],[class~="not-prose"] *)) { + padding-inline-start: 0; +} + +.prose-sm :where(tbody td:last-child, tfoot td:last-child):not(:where([class~="not-prose"],[class~="not-prose"] *)) { + padding-inline-end: 0; +} + +.prose-sm :where(figure):not(:where([class~="not-prose"],[class~="not-prose"] *)) { + margin-top: 1.7142857em; + margin-bottom: 1.7142857em; +} + +.prose-sm :where(figure > *):not(:where([class~="not-prose"],[class~="not-prose"] *)) { + margin-top: 0; + margin-bottom: 0; +} + +.prose-sm :where(figcaption):not(:where([class~="not-prose"],[class~="not-prose"] *)) { + font-size: 0.8571429em; + line-height: 1.3333333; + margin-top: 0.6666667em; +} + +.prose-sm :where(.prose-sm > :first-child):not(:where([class~="not-prose"],[class~="not-prose"] *)) { + margin-top: 0; +} + +.prose-sm :where(.prose-sm > :last-child):not(:where([class~="not-prose"],[class~="not-prose"] *)) { + margin-bottom: 0; +} + +.prose-lg { + font-size: 1.125rem; + line-height: 1.7777778; +} + +.prose-lg :where(p):not(:where([class~="not-prose"],[class~="not-prose"] *)) { + margin-top: 1.3333333em; + margin-bottom: 1.3333333em; +} + +.prose-lg :where([class~="lead"]):not(:where([class~="not-prose"],[class~="not-prose"] *)) { + font-size: 1.2222222em; + line-height: 1.4545455; + margin-top: 1.0909091em; + margin-bottom: 1.0909091em; +} + +.prose-lg :where(blockquote):not(:where([class~="not-prose"],[class~="not-prose"] *)) { + margin-top: 1.6666667em; + margin-bottom: 1.6666667em; + padding-inline-start: 1em; +} + +.prose-lg :where(h1):not(:where([class~="not-prose"],[class~="not-prose"] *)) { + font-size: 2.6666667em; + margin-top: 0; + margin-bottom: 0.8333333em; + line-height: 1; +} + +.prose-lg :where(h2):not(:where([class~="not-prose"],[class~="not-prose"] *)) { + font-size: 1.6666667em; + margin-top: 1.8666667em; + margin-bottom: 1.0666667em; + line-height: 1.3333333; +} + +.prose-lg :where(h3):not(:where([class~="not-prose"],[class~="not-prose"] *)) { + font-size: 1.3333333em; + margin-top: 1.6666667em; + margin-bottom: 0.6666667em; + line-height: 1.5; +} + +.prose-lg :where(h4):not(:where([class~="not-prose"],[class~="not-prose"] *)) { + margin-top: 1.7777778em; + margin-bottom: 0.4444444em; + line-height: 1.5555556; +} + +.prose-lg :where(img):not(:where([class~="not-prose"],[class~="not-prose"] *)) { + margin-top: 1.7777778em; + margin-bottom: 1.7777778em; +} + +.prose-lg :where(picture):not(:where([class~="not-prose"],[class~="not-prose"] *)) { + margin-top: 1.7777778em; + margin-bottom: 1.7777778em; +} + +.prose-lg :where(picture > img):not(:where([class~="not-prose"],[class~="not-prose"] *)) { + margin-top: 0; + margin-bottom: 0; +} + +.prose-lg :where(video):not(:where([class~="not-prose"],[class~="not-prose"] *)) { + margin-top: 1.7777778em; + margin-bottom: 1.7777778em; +} + +.prose-lg :where(kbd):not(:where([class~="not-prose"],[class~="not-prose"] *)) { + font-size: 0.8888889em; + border-radius: 0.3125rem; + padding-top: 0.2222222em; + padding-inline-end: 0.4444444em; + padding-bottom: 0.2222222em; + padding-inline-start: 0.4444444em; +} + +.prose-lg :where(code):not(:where([class~="not-prose"],[class~="not-prose"] *)) { + font-size: 0.8888889em; +} + +.prose-lg :where(h2 code):not(:where([class~="not-prose"],[class~="not-prose"] *)) { + font-size: 0.8666667em; +} + +.prose-lg :where(h3 code):not(:where([class~="not-prose"],[class~="not-prose"] *)) { + font-size: 0.875em; +} + +.prose-lg :where(pre):not(:where([class~="not-prose"],[class~="not-prose"] *)) { + font-size: 0.8888889em; + line-height: 1.75; + margin-top: 2em; + margin-bottom: 2em; + border-radius: 0.375rem; + padding-top: 1em; + padding-inline-end: 1.5em; + padding-bottom: 1em; + padding-inline-start: 1.5em; +} + +.prose-lg :where(ol):not(:where([class~="not-prose"],[class~="not-prose"] *)) { + margin-top: 1.3333333em; + margin-bottom: 1.3333333em; + padding-inline-start: 1.5555556em; +} + +.prose-lg :where(ul):not(:where([class~="not-prose"],[class~="not-prose"] *)) { + margin-top: 1.3333333em; + margin-bottom: 1.3333333em; + padding-inline-start: 1.5555556em; +} + +.prose-lg :where(li):not(:where([class~="not-prose"],[class~="not-prose"] *)) { + margin-top: 0.6666667em; + margin-bottom: 0.6666667em; +} + +.prose-lg :where(ol > li):not(:where([class~="not-prose"],[class~="not-prose"] *)) { + padding-inline-start: 0.4444444em; +} + +.prose-lg :where(ul > li):not(:where([class~="not-prose"],[class~="not-prose"] *)) { + padding-inline-start: 0.4444444em; +} + +.prose-lg :where(.prose-lg > ul > li p):not(:where([class~="not-prose"],[class~="not-prose"] *)) { + margin-top: 0.8888889em; + margin-bottom: 0.8888889em; +} + +.prose-lg :where(.prose-lg > ul > li > p:first-child):not(:where([class~="not-prose"],[class~="not-prose"] *)) { + margin-top: 1.3333333em; +} + +.prose-lg :where(.prose-lg > ul > li > p:last-child):not(:where([class~="not-prose"],[class~="not-prose"] *)) { + margin-bottom: 1.3333333em; +} + +.prose-lg :where(.prose-lg > ol > li > p:first-child):not(:where([class~="not-prose"],[class~="not-prose"] *)) { + margin-top: 1.3333333em; +} + +.prose-lg :where(.prose-lg > ol > li > p:last-child):not(:where([class~="not-prose"],[class~="not-prose"] *)) { + margin-bottom: 1.3333333em; +} + +.prose-lg :where(ul ul, ul ol, ol ul, ol ol):not(:where([class~="not-prose"],[class~="not-prose"] *)) { + margin-top: 0.8888889em; + margin-bottom: 0.8888889em; +} + +.prose-lg :where(dl):not(:where([class~="not-prose"],[class~="not-prose"] *)) { + margin-top: 1.3333333em; + margin-bottom: 1.3333333em; +} + +.prose-lg :where(dt):not(:where([class~="not-prose"],[class~="not-prose"] *)) { + margin-top: 1.3333333em; +} + +.prose-lg :where(dd):not(:where([class~="not-prose"],[class~="not-prose"] *)) { + margin-top: 0.6666667em; + padding-inline-start: 1.5555556em; +} + +.prose-lg :where(hr):not(:where([class~="not-prose"],[class~="not-prose"] *)) { + margin-top: 3.1111111em; + margin-bottom: 3.1111111em; +} + +.prose-lg :where(hr + *):not(:where([class~="not-prose"],[class~="not-prose"] *)) { + margin-top: 0; +} + +.prose-lg :where(h2 + *):not(:where([class~="not-prose"],[class~="not-prose"] *)) { + margin-top: 0; +} + +.prose-lg :where(h3 + *):not(:where([class~="not-prose"],[class~="not-prose"] *)) { + margin-top: 0; +} + +.prose-lg :where(h4 + *):not(:where([class~="not-prose"],[class~="not-prose"] *)) { + margin-top: 0; +} + +.prose-lg :where(table):not(:where([class~="not-prose"],[class~="not-prose"] *)) { + font-size: 0.8888889em; + line-height: 1.5; +} + +.prose-lg :where(thead th):not(:where([class~="not-prose"],[class~="not-prose"] *)) { + padding-inline-end: 0.75em; + padding-bottom: 0.75em; + padding-inline-start: 0.75em; +} + +.prose-lg :where(thead th:first-child):not(:where([class~="not-prose"],[class~="not-prose"] *)) { + padding-inline-start: 0; +} + +.prose-lg :where(thead th:last-child):not(:where([class~="not-prose"],[class~="not-prose"] *)) { + padding-inline-end: 0; +} + +.prose-lg :where(tbody td, tfoot td):not(:where([class~="not-prose"],[class~="not-prose"] *)) { + padding-top: 0.75em; + padding-inline-end: 0.75em; + padding-bottom: 0.75em; + padding-inline-start: 0.75em; +} + +.prose-lg :where(tbody td:first-child, tfoot td:first-child):not(:where([class~="not-prose"],[class~="not-prose"] *)) { + padding-inline-start: 0; +} + +.prose-lg :where(tbody td:last-child, tfoot td:last-child):not(:where([class~="not-prose"],[class~="not-prose"] *)) { + padding-inline-end: 0; +} + +.prose-lg :where(figure):not(:where([class~="not-prose"],[class~="not-prose"] *)) { + margin-top: 1.7777778em; + margin-bottom: 1.7777778em; +} + +.prose-lg :where(figure > *):not(:where([class~="not-prose"],[class~="not-prose"] *)) { + margin-top: 0; + margin-bottom: 0; +} + +.prose-lg :where(figcaption):not(:where([class~="not-prose"],[class~="not-prose"] *)) { + font-size: 0.8888889em; + line-height: 1.5; + margin-top: 1em; +} + +.prose-lg :where(.prose-lg > :first-child):not(:where([class~="not-prose"],[class~="not-prose"] *)) { + margin-top: 0; +} + +.prose-lg :where(.prose-lg > :last-child):not(:where([class~="not-prose"],[class~="not-prose"] *)) { + margin-bottom: 0; +} + +.cta-section { + padding-top: 3rem; + padding-bottom: 3rem; + margin-top: 2rem; + margin-bottom: 2rem; +} + +.cta-gradient { + background: linear-gradient(calc(var(--gradient-angle) * 1deg), var(--gradient-from), var(--gradient-to)); +} + +.btn { + display: inline-flex; + align-items: center; + justify-content: center; + padding-left: 1.5rem; + padding-right: 1.5rem; + padding-top: 0.75rem; + padding-bottom: 0.75rem; + font-weight: 500; + transition-property: color, background-color, border-color, text-decoration-color, fill, stroke, opacity, box-shadow, transform, filter, -webkit-backdrop-filter; + transition-property: color, background-color, border-color, text-decoration-color, fill, stroke, opacity, box-shadow, transform, filter, backdrop-filter; + transition-property: color, background-color, border-color, text-decoration-color, fill, stroke, opacity, box-shadow, transform, filter, backdrop-filter, -webkit-backdrop-filter; + transition-duration: 200ms; + transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1); + border-radius: 2rem; +} + +.btn-primary { + display: inline-flex; + align-items: center; + justify-content: center; + padding-left: 1.5rem; + padding-right: 1.5rem; + padding-top: 0.75rem; + padding-bottom: 0.75rem; + font-weight: 500; + transition-property: color, background-color, border-color, text-decoration-color, fill, stroke, opacity, box-shadow, transform, filter, -webkit-backdrop-filter; + transition-property: color, background-color, border-color, text-decoration-color, fill, stroke, opacity, box-shadow, transform, filter, backdrop-filter; + transition-property: color, background-color, border-color, text-decoration-color, fill, stroke, opacity, box-shadow, transform, filter, backdrop-filter, -webkit-backdrop-filter; + transition-duration: 200ms; + transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1); + border-radius: 2rem; + --tw-bg-opacity: 1; + background-color: rgb(2 132 199 / var(--tw-bg-opacity, 1)); + --tw-text-opacity: 1; + color: rgb(255 255 255 / var(--tw-text-opacity, 1)); +} + +.btn-primary:hover { + --tw-scale-x: 1.05; + --tw-scale-y: 1.05; + transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y)); + --tw-bg-opacity: 1; + background-color: rgb(3 105 161 / var(--tw-bg-opacity, 1)); +} + +.btn-outline { + display: inline-flex; + align-items: center; + justify-content: center; + padding-left: 1.5rem; + padding-right: 1.5rem; + padding-top: 0.75rem; + padding-bottom: 0.75rem; + font-weight: 500; + transition-property: color, background-color, border-color, text-decoration-color, fill, stroke, opacity, box-shadow, transform, filter, -webkit-backdrop-filter; + transition-property: color, background-color, border-color, text-decoration-color, fill, stroke, opacity, box-shadow, transform, filter, backdrop-filter; + transition-property: color, background-color, border-color, text-decoration-color, fill, stroke, opacity, box-shadow, transform, filter, backdrop-filter, -webkit-backdrop-filter; + transition-duration: 200ms; + transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1); + border-radius: 2rem; + border-width: 2px; + --tw-border-opacity: 1; + border-color: rgb(2 132 199 / var(--tw-border-opacity, 1)); + --tw-text-opacity: 1; + color: rgb(2 132 199 / var(--tw-text-opacity, 1)); +} + +.btn-outline:hover { + --tw-scale-x: 1.05; + --tw-scale-y: 1.05; + transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y)); +} + +.container { + margin-left: auto; + margin-right: auto; + max-width: 80rem; + padding-left: 1rem; + padding-right: 1rem; +} + +@media (min-width: 640px) { + .container { + padding-left: 1.5rem; + padding-right: 1.5rem; + } +} + +@media (min-width: 1024px) { + .container { + padding-left: 2rem; + padding-right: 2rem; + } +} + +.section { + padding-top: 4rem; + padding-bottom: 4rem; +} + +@media (min-width: 768px) { + .section { + padding-top: 6rem; + padding-bottom: 6rem; + } +} + +/* Blog and Syntax Highlighting Styles */ + +.highlight { + font-family: ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace; + font-size: 0.875rem; + line-height: 1.25rem; + --tw-text-opacity: 1; + color: rgb(229 231 235 / var(--tw-text-opacity, 1)); +} + +.highlight table { + width: 100%; + border-collapse: separate; + --tw-border-spacing-x: 0px; + --tw-border-spacing-y: 0px; + border-spacing: var(--tw-border-spacing-x) var(--tw-border-spacing-y); +} + +.highlight table td { + padding: 0px; +} + +.highlight table td:first-child { + -webkit-user-select: none; + -moz-user-select: none; + user-select: none; + border-right-width: 1px; + --tw-border-opacity: 1; + border-color: rgb(55 65 81 / var(--tw-border-opacity, 1)); + padding-right: 1rem; + text-align: right; + --tw-text-opacity: 1; + color: rgb(107 114 128 / var(--tw-text-opacity, 1)); +} + +.highlight table td:last-child { + width: 100%; + padding-left: 1rem; +} + +.highlight .k, .highlight .kd { + font-weight: 600; + --tw-text-opacity: 1; + color: rgb(192 132 252 / var(--tw-text-opacity, 1)); +} + +.highlight .nf, .highlight .nx { + --tw-text-opacity: 1; + color: rgb(96 165 250 / var(--tw-text-opacity, 1)); +} + +.highlight .s, .highlight .s1, .highlight .s2 { + --tw-text-opacity: 1; + color: rgb(74 222 128 / var(--tw-text-opacity, 1)); +} + +.highlight .mi, .highlight .mf { + --tw-text-opacity: 1; + color: rgb(251 146 60 / var(--tw-text-opacity, 1)); +} + +.highlight .c, .highlight .c1, .highlight .cm { + font-style: italic; + --tw-text-opacity: 1; + color: rgb(107 114 128 / var(--tw-text-opacity, 1)); +} + +.highlight .o { + --tw-text-opacity: 1; + color: rgb(250 204 21 / var(--tw-text-opacity, 1)); +} + +.highlight .p { + --tw-text-opacity: 1; + color: rgb(156 163 175 / var(--tw-text-opacity, 1)); +} + +.prose { + max-width: none; +} + +.prose h1, .prose h2, .prose h3, .prose h4 { + font-family: Plus Jakarta Sans, sans-serif; + font-weight: 700; + --tw-text-opacity: 1; + color: rgb(17 24 39 / var(--tw-text-opacity, 1)); +} + +.prose h1 { + margin-bottom: 2rem; + font-size: 2.25rem; + line-height: 2.5rem; +} + +.prose h2 { + margin-top: 3rem; + margin-bottom: 1.5rem; + font-size: 1.875rem; + line-height: 2.25rem; +} + +.prose h3 { + margin-top: 2rem; + margin-bottom: 1rem; + font-size: 1.5rem; + line-height: 2rem; +} + +.prose p { + margin-bottom: 1.5rem; + line-height: 1.625; + --tw-text-opacity: 1; + color: rgb(55 65 81 / var(--tw-text-opacity, 1)); +} + +.prose a { + --tw-text-opacity: 1; + color: rgb(2 132 199 / var(--tw-text-opacity, 1)); + text-decoration-line: none; +} + +.prose a:hover { + --tw-text-opacity: 1; + color: rgb(3 105 161 / var(--tw-text-opacity, 1)); +} + +.prose ul, .prose ol { + margin-top: 1.5rem; + margin-bottom: 1.5rem; + margin-left: 1.5rem; +} + +.prose li { + margin-bottom: 0.5rem; +} + +.prose blockquote { + margin-top: 2rem; + margin-bottom: 2rem; + border-left-width: 4px; + --tw-border-opacity: 1; + border-color: rgb(229 231 235 / var(--tw-border-opacity, 1)); + padding-left: 1rem; + font-style: italic; + --tw-text-opacity: 1; + color: rgb(55 65 81 / var(--tw-text-opacity, 1)); +} + +.prose img { + margin-top: 2rem; + margin-bottom: 2rem; + --tw-shadow: 0 10px 15px -3px rgb(0 0 0 / 0.1), 0 4px 6px -4px rgb(0 0 0 / 0.1); + --tw-shadow-colored: 0 10px 15px -3px var(--tw-shadow-color), 0 4px 6px -4px var(--tw-shadow-color); + box-shadow: var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000), var(--tw-shadow); + border-radius: 2rem; +} + +.prose code:not(pre code) { + border-radius: 0.25rem; + --tw-bg-opacity: 1; + background-color: rgb(243 244 246 / var(--tw-bg-opacity, 1)); + padding-left: 0.375rem; + padding-right: 0.375rem; + padding-top: 0.125rem; + padding-bottom: 0.125rem; + font-family: ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace; + font-size: 0.875rem; + line-height: 1.25rem; + --tw-text-opacity: 1; + color: rgb(17 24 39 / var(--tw-text-opacity, 1)); +} + +.sr-only { + position: absolute; + width: 1px; + height: 1px; + padding: 0; + margin: -1px; + overflow: hidden; + clip: rect(0, 0, 0, 0); + white-space: nowrap; + border-width: 0; +} + +.visible { + visibility: visible; +} + +.invisible { + visibility: hidden; +} + +.static { + position: static; +} + +.fixed { + position: fixed; +} + +.absolute { + position: absolute; +} + +.relative { + position: relative; +} + +.inset-0 { + inset: 0px; +} + +.inset-x-0 { + left: 0px; + right: 0px; +} + +.-bottom-20 { + bottom: -5rem; +} + +.-bottom-4 { + bottom: -1rem; +} + +.-left-20 { + left: -5rem; +} + +.-right-20 { + right: -5rem; +} + +.-right-4 { + right: -1rem; +} + +.-top-20 { + top: -5rem; +} + +.-top-4 { + top: -1rem; +} + +.bottom-2 { + bottom: 0.5rem; +} + +.left-0 { + left: 0px; +} + +.left-1\/2 { + left: 50%; +} + +.right-0 { + right: 0px; +} + +.right-2 { + right: 0.5rem; +} + +.right-4 { + right: 1rem; +} + +.top-0 { + top: 0px; +} + +.top-20 { + top: 5rem; +} + +.top-4 { + top: 1rem; +} + +.isolate { + isolation: isolate; +} + +.z-10 { + z-index: 10; +} + +.z-50 { + z-index: 50; +} + +.order-1 { + order: 1; +} + +.order-2 { + order: 2; +} + +.-mx-6 { + margin-left: -1.5rem; + margin-right: -1.5rem; +} + +.mx-auto { + margin-left: auto; + margin-right: auto; +} + +.my-8 { + margin-top: 2rem; + margin-bottom: 2rem; +} + +.mb-1 { + margin-bottom: 0.25rem; +} + +.mb-12 { + margin-bottom: 3rem; +} + +.mb-16 { + margin-bottom: 4rem; +} + +.mb-2 { + margin-bottom: 0.5rem; +} + +.mb-3 { + margin-bottom: 0.75rem; +} + +.mb-4 { + margin-bottom: 1rem; +} + +.mb-5 { + margin-bottom: 1.25rem; +} + +.mb-6 { + margin-bottom: 1.5rem; +} + +.mb-8 { + margin-bottom: 2rem; +} + +.ml-1 { + margin-left: 0.25rem; +} + +.ml-2 { + margin-left: 0.5rem; +} + +.ml-3 { + margin-left: 0.75rem; +} + +.ml-4 { + margin-left: 1rem; +} + +.mr-2 { + margin-right: 0.5rem; +} + +.mt-12 { + margin-top: 3rem; +} + +.mt-16 { + margin-top: 4rem; +} + +.mt-2 { + margin-top: 0.5rem; +} + +.mt-4 { + margin-top: 1rem; +} + +.mt-6 { + margin-top: 1.5rem; +} + +.mt-8 { + margin-top: 2rem; +} + +.line-clamp-2 { + overflow: hidden; + display: -webkit-box; + -webkit-box-orient: vertical; + -webkit-line-clamp: 2; +} + +.block { + display: block; +} + +.inline-block { + display: inline-block; +} + +.flex { + display: flex; +} + +.inline-flex { + display: inline-flex; +} + +.table { + display: table; +} + +.grid { + display: grid; +} + +.hidden { + display: none; +} + +.aspect-square { + aspect-ratio: 1 / 1; +} + +.h-12 { + height: 3rem; +} + +.h-20 { + height: 5rem; +} + +.h-3 { + height: 0.75rem; +} + +.h-4 { + height: 1rem; +} + +.h-5 { + height: 1.25rem; +} + +.h-6 { + height: 1.5rem; +} + +.h-64 { + height: 16rem; +} + +.h-8 { + height: 2rem; +} + +.h-96 { + height: 24rem; +} + +.h-auto { + height: auto; +} + +.h-full { + height: 100%; +} + +.max-h-12 { + max-height: 3rem; +} + +.min-h-screen { + min-height: 100vh; +} + +.w-12 { + width: 3rem; +} + +.w-20 { + width: 5rem; +} + +.w-3 { + width: 0.75rem; +} + +.w-4 { + width: 1rem; +} + +.w-5 { + width: 1.25rem; +} + +.w-6 { + width: 1.5rem; +} + +.w-64 { + width: 16rem; +} + +.w-72 { + width: 18rem; +} + +.w-8 { + width: 2rem; +} + +.w-full { + width: 100%; +} + +.\!max-w-none { + max-width: none !important; +} + +.max-w-2xl { + max-width: 42rem; +} + +.max-w-3xl { + max-width: 48rem; +} + +.max-w-4xl { + max-width: 56rem; +} + +.max-w-6xl { + max-width: 72rem; +} + +.max-w-7xl { + max-width: 80rem; +} + +.max-w-none { + max-width: none; +} + +.max-w-screen-md { + max-width: 768px; +} + +.max-w-screen-xl { + max-width: 1280px; +} + +.max-w-xl { + max-width: 36rem; +} + +.flex-1 { + flex: 1 1 0%; +} + +.flex-auto { + flex: 1 1 auto; +} + +.flex-shrink-0 { + flex-shrink: 0; +} + +.flex-grow { + flex-grow: 1; +} + +.grow { + flex-grow: 1; +} + +.-translate-x-1\/2 { + --tw-translate-x: -50%; + transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y)); +} + +.rotate-180 { + --tw-rotate: 180deg; + transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y)); +} + +.transform { + transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y)); +} + +.cursor-pointer { + cursor: pointer; +} + +.resize { + resize: both; +} + +.grid-cols-1 { + grid-template-columns: repeat(1, minmax(0, 1fr)); +} + +.grid-cols-2 { + grid-template-columns: repeat(2, minmax(0, 1fr)); +} + +.flex-col { + flex-direction: column; +} + +.flex-wrap { + flex-wrap: wrap; +} + +.items-start { + align-items: flex-start; +} + +.items-center { + align-items: center; +} + +.items-baseline { + align-items: baseline; +} + +.justify-center { + justify-content: center; +} + +.justify-between { + justify-content: space-between; +} + +.gap-12 { + gap: 3rem; +} + +.gap-2 { + gap: 0.5rem; +} + +.gap-4 { + gap: 1rem; +} + +.gap-6 { + gap: 1.5rem; +} + +.gap-8 { + gap: 2rem; +} + +.gap-x-8 { + -moz-column-gap: 2rem; + column-gap: 2rem; +} + +.gap-y-16 { + row-gap: 4rem; +} + +.space-x-2 > :not([hidden]) ~ :not([hidden]) { + --tw-space-x-reverse: 0; + margin-right: calc(0.5rem * var(--tw-space-x-reverse)); + margin-left: calc(0.5rem * calc(1 - var(--tw-space-x-reverse))); +} + +.space-x-3 > :not([hidden]) ~ :not([hidden]) { + --tw-space-x-reverse: 0; + margin-right: calc(0.75rem * var(--tw-space-x-reverse)); + margin-left: calc(0.75rem * calc(1 - var(--tw-space-x-reverse))); +} + +.space-x-4 > :not([hidden]) ~ :not([hidden]) { + --tw-space-x-reverse: 0; + margin-right: calc(1rem * var(--tw-space-x-reverse)); + margin-left: calc(1rem * calc(1 - var(--tw-space-x-reverse))); +} + +.space-x-6 > :not([hidden]) ~ :not([hidden]) { + --tw-space-x-reverse: 0; + margin-right: calc(1.5rem * var(--tw-space-x-reverse)); + margin-left: calc(1.5rem * calc(1 - var(--tw-space-x-reverse))); +} + +.space-x-8 > :not([hidden]) ~ :not([hidden]) { + --tw-space-x-reverse: 0; + margin-right: calc(2rem * var(--tw-space-x-reverse)); + margin-left: calc(2rem * calc(1 - var(--tw-space-x-reverse))); +} + +.space-y-2 > :not([hidden]) ~ :not([hidden]) { + --tw-space-y-reverse: 0; + margin-top: calc(0.5rem * calc(1 - var(--tw-space-y-reverse))); + margin-bottom: calc(0.5rem * var(--tw-space-y-reverse)); +} + +.space-y-3 > :not([hidden]) ~ :not([hidden]) { + --tw-space-y-reverse: 0; + margin-top: calc(0.75rem * calc(1 - var(--tw-space-y-reverse))); + margin-bottom: calc(0.75rem * var(--tw-space-y-reverse)); +} + +.space-y-32 > :not([hidden]) ~ :not([hidden]) { + --tw-space-y-reverse: 0; + margin-top: calc(8rem * calc(1 - var(--tw-space-y-reverse))); + margin-bottom: calc(8rem * var(--tw-space-y-reverse)); +} + +.space-y-4 > :not([hidden]) ~ :not([hidden]) { + --tw-space-y-reverse: 0; + margin-top: calc(1rem * calc(1 - var(--tw-space-y-reverse))); + margin-bottom: calc(1rem * var(--tw-space-y-reverse)); +} + +.space-y-6 > :not([hidden]) ~ :not([hidden]) { + --tw-space-y-reverse: 0; + margin-top: calc(1.5rem * calc(1 - var(--tw-space-y-reverse))); + margin-bottom: calc(1.5rem * var(--tw-space-y-reverse)); +} + +.space-y-8 > :not([hidden]) ~ :not([hidden]) { + --tw-space-y-reverse: 0; + margin-top: calc(2rem * calc(1 - var(--tw-space-y-reverse))); + margin-bottom: calc(2rem * var(--tw-space-y-reverse)); +} + +.overflow-hidden { + overflow: hidden; +} + +.overflow-x-auto { + overflow-x: auto; +} + +.truncate { + overflow: hidden; + text-overflow: ellipsis; + white-space: nowrap; +} + +.rounded-2xl { + border-radius: 1rem; +} + +.rounded-full { + border-radius: 9999px; +} + +.rounded-lg { + border-radius: 0.5rem; +} + +.rounded-md { + border-radius: 0.375rem; +} + +.rounded-xl { + border-radius: 0.75rem; +} + +.border { + border-width: 1px; +} + +.border-2 { + border-width: 2px; +} + +.border-y { + border-top-width: 1px; + border-bottom-width: 1px; +} + +.border-b { + border-bottom-width: 1px; +} + +.border-t { + border-top-width: 1px; +} + +.border-gray-100 { + --tw-border-opacity: 1; + border-color: rgb(243 244 246 / var(--tw-border-opacity, 1)); +} + +.border-gray-200 { + --tw-border-opacity: 1; + border-color: rgb(229 231 235 / var(--tw-border-opacity, 1)); +} + +.border-gray-300 { + --tw-border-opacity: 1; + border-color: rgb(209 213 219 / var(--tw-border-opacity, 1)); +} + +.border-gray-700 { + --tw-border-opacity: 1; + border-color: rgb(55 65 81 / var(--tw-border-opacity, 1)); +} + +.border-white { + --tw-border-opacity: 1; + border-color: rgb(255 255 255 / var(--tw-border-opacity, 1)); +} + +.bg-blue-100 { + --tw-bg-opacity: 1; + background-color: rgb(219 234 254 / var(--tw-bg-opacity, 1)); +} + +.bg-gray-100 { + --tw-bg-opacity: 1; + background-color: rgb(243 244 246 / var(--tw-bg-opacity, 1)); +} + +.bg-gray-200 { + --tw-bg-opacity: 1; + background-color: rgb(229 231 235 / var(--tw-bg-opacity, 1)); +} + +.bg-gray-50 { + --tw-bg-opacity: 1; + background-color: rgb(249 250 251 / var(--tw-bg-opacity, 1)); +} + +.bg-gray-800 { + --tw-bg-opacity: 1; + background-color: rgb(31 41 55 / var(--tw-bg-opacity, 1)); +} + +.bg-gray-900 { + --tw-bg-opacity: 1; + background-color: rgb(17 24 39 / var(--tw-bg-opacity, 1)); +} + +.bg-green-500 { + --tw-bg-opacity: 1; + background-color: rgb(34 197 94 / var(--tw-bg-opacity, 1)); +} + +.bg-primary-100 { + --tw-bg-opacity: 1; + background-color: rgb(224 242 254 / var(--tw-bg-opacity, 1)); +} + +.bg-primary-50 { + --tw-bg-opacity: 1; + background-color: rgb(240 249 255 / var(--tw-bg-opacity, 1)); +} + +.bg-primary-600 { + --tw-bg-opacity: 1; + background-color: rgb(2 132 199 / var(--tw-bg-opacity, 1)); +} + +.bg-red-500 { + --tw-bg-opacity: 1; + background-color: rgb(239 68 68 / var(--tw-bg-opacity, 1)); +} + +.bg-white { + --tw-bg-opacity: 1; + background-color: rgb(255 255 255 / var(--tw-bg-opacity, 1)); +} + +.bg-white\/80 { + background-color: rgb(255 255 255 / 0.8); +} + +.bg-yellow-400 { + --tw-bg-opacity: 1; + background-color: rgb(250 204 21 / var(--tw-bg-opacity, 1)); +} + +.bg-yellow-500 { + --tw-bg-opacity: 1; + background-color: rgb(234 179 8 / var(--tw-bg-opacity, 1)); +} + +.bg-gradient-to-b { + background-image: linear-gradient(to bottom, var(--tw-gradient-stops)); +} + +.bg-gradient-to-r { + background-image: linear-gradient(to right, var(--tw-gradient-stops)); +} + +.from-blue-50 { + --tw-gradient-from: #eff6ff var(--tw-gradient-from-position); + --tw-gradient-to: rgb(239 246 255 / 0) var(--tw-gradient-to-position); + --tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to); +} + +.from-gray-50 { + --tw-gradient-from: #f9fafb var(--tw-gradient-from-position); + --tw-gradient-to: rgb(249 250 251 / 0) var(--tw-gradient-to-position); + --tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to); +} + +.from-primary-600 { + --tw-gradient-from: #0284c7 var(--tw-gradient-from-position); + --tw-gradient-to: rgb(2 132 199 / 0) var(--tw-gradient-to-position); + --tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to); +} + +.via-blue-50 { + --tw-gradient-to: rgb(239 246 255 / 0) var(--tw-gradient-to-position); + --tw-gradient-stops: var(--tw-gradient-from), #eff6ff var(--tw-gradient-via-position), var(--tw-gradient-to); +} + +.to-primary-700 { + --tw-gradient-to: #0369a1 var(--tw-gradient-to-position); +} + +.to-white { + --tw-gradient-to: #fff var(--tw-gradient-to-position); +} + +.object-cover { + -o-object-fit: cover; + object-fit: cover; +} + +.p-2 { + padding: 0.5rem; +} + +.p-4 { + padding: 1rem; +} + +.p-6 { + padding: 1.5rem; +} + +.p-8 { + padding: 2rem; +} + +.px-3 { + padding-left: 0.75rem; + padding-right: 0.75rem; +} + +.px-4 { + padding-left: 1rem; + padding-right: 1rem; +} + +.px-5 { + padding-left: 1.25rem; + padding-right: 1.25rem; +} + +.px-6 { + padding-left: 1.5rem; + padding-right: 1.5rem; +} + +.px-8 { + padding-left: 2rem; + padding-right: 2rem; +} + +.py-1 { + padding-top: 0.25rem; + padding-bottom: 0.25rem; +} + +.py-1\.5 { + padding-top: 0.375rem; + padding-bottom: 0.375rem; +} + +.py-10 { + padding-top: 2.5rem; + padding-bottom: 2.5rem; +} + +.py-12 { + padding-top: 3rem; + padding-bottom: 3rem; +} + +.py-16 { + padding-top: 4rem; + padding-bottom: 4rem; +} + +.py-2 { + padding-top: 0.5rem; + padding-bottom: 0.5rem; +} + +.py-20 { + padding-top: 5rem; + padding-bottom: 5rem; +} + +.py-24 { + padding-top: 6rem; + padding-bottom: 6rem; +} + +.py-3 { + padding-top: 0.75rem; + padding-bottom: 0.75rem; +} + +.py-4 { + padding-top: 1rem; + padding-bottom: 1rem; +} + +.py-6 { + padding-top: 1.5rem; + padding-bottom: 1.5rem; +} + +.py-8 { + padding-top: 2rem; + padding-bottom: 2rem; +} + +.pb-20 { + padding-bottom: 5rem; +} + +.pb-24 { + padding-bottom: 6rem; +} + +.pb-32 { + padding-bottom: 8rem; +} + +.pl-4 { + padding-left: 1rem; +} + +.pt-16 { + padding-top: 4rem; +} + +.pt-20 { + padding-top: 5rem; +} + +.pt-24 { + padding-top: 6rem; +} + +.pt-4 { + padding-top: 1rem; +} + +.pt-8 { + padding-top: 2rem; +} + +.text-left { + text-align: left; +} + +.text-center { + text-align: center; +} + +.text-right { + text-align: right; +} + +.font-mono { + font-family: ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace; +} + +.text-2xl { + font-size: 1.5rem; + line-height: 2rem; +} + +.text-3xl { + font-size: 1.875rem; + line-height: 2.25rem; +} + +.text-4xl { + font-size: 2.25rem; + line-height: 2.5rem; +} + +.text-5xl { + font-size: 3rem; + line-height: 1; +} + +.text-base { + font-size: 1rem; + line-height: 1.5rem; +} + +.text-lg { + font-size: 1.125rem; + line-height: 1.75rem; +} + +.text-sm { + font-size: 0.875rem; + line-height: 1.25rem; +} + +.text-xl { + font-size: 1.25rem; + line-height: 1.75rem; +} + +.text-xs { + font-size: 0.75rem; + line-height: 1rem; +} + +.font-bold { + font-weight: 700; +} + +.font-extrabold { + font-weight: 800; +} + +.font-light { + font-weight: 300; +} + +.font-medium { + font-weight: 500; +} + +.font-semibold { + font-weight: 600; +} + +.uppercase { + text-transform: uppercase; +} + +.leading-7 { + line-height: 1.75rem; +} + +.leading-8 { + line-height: 2rem; +} + +.leading-relaxed { + line-height: 1.625; +} + +.leading-tight { + line-height: 1.25; +} + +.tracking-tight { + letter-spacing: -0.025em; +} + +.tracking-wider { + letter-spacing: 0.05em; +} + +.text-blue-500 { + --tw-text-opacity: 1; + color: rgb(59 130 246 / var(--tw-text-opacity, 1)); +} + +.text-blue-600 { + --tw-text-opacity: 1; + color: rgb(37 99 235 / var(--tw-text-opacity, 1)); +} + +.text-blue-800 { + --tw-text-opacity: 1; + color: rgb(30 64 175 / var(--tw-text-opacity, 1)); +} + +.text-gray-200 { + --tw-text-opacity: 1; + color: rgb(229 231 235 / var(--tw-text-opacity, 1)); +} + +.text-gray-400 { + --tw-text-opacity: 1; + color: rgb(156 163 175 / var(--tw-text-opacity, 1)); +} + +.text-gray-500 { + --tw-text-opacity: 1; + color: rgb(107 114 128 / var(--tw-text-opacity, 1)); +} + +.text-gray-600 { + --tw-text-opacity: 1; + color: rgb(75 85 99 / var(--tw-text-opacity, 1)); +} + +.text-gray-700 { + --tw-text-opacity: 1; + color: rgb(55 65 81 / var(--tw-text-opacity, 1)); +} + +.text-gray-800 { + --tw-text-opacity: 1; + color: rgb(31 41 55 / var(--tw-text-opacity, 1)); +} + +.text-gray-900 { + --tw-text-opacity: 1; + color: rgb(17 24 39 / var(--tw-text-opacity, 1)); +} + +.text-green-500 { + --tw-text-opacity: 1; + color: rgb(34 197 94 / var(--tw-text-opacity, 1)); +} + +.text-primary-100 { + --tw-text-opacity: 1; + color: rgb(224 242 254 / var(--tw-text-opacity, 1)); +} + +.text-primary-600 { + --tw-text-opacity: 1; + color: rgb(2 132 199 / var(--tw-text-opacity, 1)); +} + +.text-white { + --tw-text-opacity: 1; + color: rgb(255 255 255 / var(--tw-text-opacity, 1)); +} + +.opacity-0 { + opacity: 0; +} + +.opacity-50 { + opacity: 0.5; +} + +.opacity-75 { + opacity: 0.75; +} + +.shadow { + --tw-shadow: 0 1px 3px 0 rgb(0 0 0 / 0.1), 0 1px 2px -1px rgb(0 0 0 / 0.1); + --tw-shadow-colored: 0 1px 3px 0 var(--tw-shadow-color), 0 1px 2px -1px var(--tw-shadow-color); + box-shadow: var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000), var(--tw-shadow); +} + +.shadow-2xl { + --tw-shadow: 0 25px 50px -12px rgb(0 0 0 / 0.25); + --tw-shadow-colored: 0 25px 50px -12px var(--tw-shadow-color); + box-shadow: var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000), var(--tw-shadow); +} + +.shadow-lg { + --tw-shadow: 0 10px 15px -3px rgb(0 0 0 / 0.1), 0 4px 6px -4px rgb(0 0 0 / 0.1); + --tw-shadow-colored: 0 10px 15px -3px var(--tw-shadow-color), 0 4px 6px -4px var(--tw-shadow-color); + box-shadow: var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000), var(--tw-shadow); +} + +.shadow-md { + --tw-shadow: 0 4px 6px -1px rgb(0 0 0 / 0.1), 0 2px 4px -2px rgb(0 0 0 / 0.1); + --tw-shadow-colored: 0 4px 6px -1px var(--tw-shadow-color), 0 2px 4px -2px var(--tw-shadow-color); + box-shadow: var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000), var(--tw-shadow); +} + +.shadow-sm { + --tw-shadow: 0 1px 2px 0 rgb(0 0 0 / 0.05); + --tw-shadow-colored: 0 1px 2px 0 var(--tw-shadow-color); + box-shadow: var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000), var(--tw-shadow); +} + +.shadow-xl { + --tw-shadow: 0 20px 25px -5px rgb(0 0 0 / 0.1), 0 8px 10px -6px rgb(0 0 0 / 0.1); + --tw-shadow-colored: 0 20px 25px -5px var(--tw-shadow-color), 0 8px 10px -6px var(--tw-shadow-color); + box-shadow: var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000), var(--tw-shadow); +} + +.ring-1 { + --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, 0 0 #0000); +} + +.ring-gray-200 { + --tw-ring-opacity: 1; + --tw-ring-color: rgb(229 231 235 / var(--tw-ring-opacity, 1)); +} + +.blur-3xl { + --tw-blur: blur(64px); + 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); +} + +.grayscale { + --tw-grayscale: grayscale(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); +} + +.backdrop-blur-sm { + --tw-backdrop-blur: blur(4px); + -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, text-decoration-color, fill, stroke, opacity, box-shadow, transform, filter, -webkit-backdrop-filter; + transition-property: color, background-color, border-color, text-decoration-color, fill, stroke, opacity, box-shadow, transform, filter, backdrop-filter; + transition-property: color, background-color, border-color, text-decoration-color, fill, stroke, opacity, box-shadow, transform, filter, backdrop-filter, -webkit-backdrop-filter; + transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1); + transition-duration: 150ms; +} + +.transition-all { + transition-property: all; + transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1); + transition-duration: 150ms; +} + +.transition-colors { + transition-property: color, background-color, border-color, text-decoration-color, fill, stroke; + transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1); + transition-duration: 150ms; +} + +.transition-shadow { + transition-property: box-shadow; + transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1); + transition-duration: 150ms; +} + +.transition-transform { + transition-property: transform; + transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1); + transition-duration: 150ms; +} + +.duration-200 { + transition-duration: 200ms; +} + +.duration-300 { + transition-duration: 300ms; +} + +.ease-in-out { + transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1); +} + +.rounded-lg { + border-radius: 2rem; +} + +@media (min-width: 640px) { + .sm\:prose { + color: var(--tw-prose-body); + max-width: 65ch; + } + + .sm\:prose :where(p):not(:where([class~="not-prose"],[class~="not-prose"] *)) { + margin-top: 1.25em; + margin-bottom: 1.25em; + } + + .sm\:prose :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; + } + + .sm\:prose :where(a):not(:where([class~="not-prose"],[class~="not-prose"] *)) { + color: var(--tw-prose-links); + text-decoration: underline; + font-weight: 500; + } + + .sm\:prose :where(strong):not(:where([class~="not-prose"],[class~="not-prose"] *)) { + color: var(--tw-prose-bold); + font-weight: 600; + } + + .sm\:prose :where(a strong):not(:where([class~="not-prose"],[class~="not-prose"] *)) { + color: inherit; + } + + .sm\:prose :where(blockquote strong):not(:where([class~="not-prose"],[class~="not-prose"] *)) { + color: inherit; + } + + .sm\:prose :where(thead th strong):not(:where([class~="not-prose"],[class~="not-prose"] *)) { + color: inherit; + } + + .sm\:prose :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; + } + + .sm\:prose :where(ol[type="A"]):not(:where([class~="not-prose"],[class~="not-prose"] *)) { + list-style-type: upper-alpha; + } + + .sm\:prose :where(ol[type="a"]):not(:where([class~="not-prose"],[class~="not-prose"] *)) { + list-style-type: lower-alpha; + } + + .sm\:prose :where(ol[type="A" s]):not(:where([class~="not-prose"],[class~="not-prose"] *)) { + list-style-type: upper-alpha; + } + + .sm\:prose :where(ol[type="a" s]):not(:where([class~="not-prose"],[class~="not-prose"] *)) { + list-style-type: lower-alpha; + } + + .sm\:prose :where(ol[type="I"]):not(:where([class~="not-prose"],[class~="not-prose"] *)) { + list-style-type: upper-roman; + } + + .sm\:prose :where(ol[type="i"]):not(:where([class~="not-prose"],[class~="not-prose"] *)) { + list-style-type: lower-roman; + } + + .sm\:prose :where(ol[type="I" s]):not(:where([class~="not-prose"],[class~="not-prose"] *)) { + list-style-type: upper-roman; + } + + .sm\:prose :where(ol[type="i" s]):not(:where([class~="not-prose"],[class~="not-prose"] *)) { + list-style-type: lower-roman; + } + + .sm\:prose :where(ol[type="1"]):not(:where([class~="not-prose"],[class~="not-prose"] *)) { + list-style-type: decimal; + } + + .sm\:prose :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; + } + + .sm\:prose :where(ol > li):not(:where([class~="not-prose"],[class~="not-prose"] *))::marker { + font-weight: 400; + color: var(--tw-prose-counters); + } + + .sm\:prose :where(ul > li):not(:where([class~="not-prose"],[class~="not-prose"] *))::marker { + color: var(--tw-prose-bullets); + } + + .sm\:prose :where(dt):not(:where([class~="not-prose"],[class~="not-prose"] *)) { + color: var(--tw-prose-headings); + font-weight: 600; + margin-top: 1.25em; + } + + .sm\:prose :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; + } + + .sm\:prose :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; + } + + .sm\:prose :where(blockquote p:first-of-type):not(:where([class~="not-prose"],[class~="not-prose"] *))::before { + content: open-quote; + } + + .sm\:prose :where(blockquote p:last-of-type):not(:where([class~="not-prose"],[class~="not-prose"] *))::after { + content: close-quote; + } + + .sm\:prose :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; + } + + .sm\:prose :where(h1 strong):not(:where([class~="not-prose"],[class~="not-prose"] *)) { + font-weight: 900; + color: inherit; + } + + .sm\:prose :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; + } + + .sm\:prose :where(h2 strong):not(:where([class~="not-prose"],[class~="not-prose"] *)) { + font-weight: 800; + color: inherit; + } + + .sm\:prose :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; + } + + .sm\:prose :where(h3 strong):not(:where([class~="not-prose"],[class~="not-prose"] *)) { + font-weight: 700; + color: inherit; + } + + .sm\:prose :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; + } + + .sm\:prose :where(h4 strong):not(:where([class~="not-prose"],[class~="not-prose"] *)) { + font-weight: 700; + color: inherit; + } + + .sm\:prose :where(img):not(:where([class~="not-prose"],[class~="not-prose"] *)) { + margin-top: 2em; + margin-bottom: 2em; + } + + .sm\:prose :where(picture):not(:where([class~="not-prose"],[class~="not-prose"] *)) { + display: block; + margin-top: 2em; + margin-bottom: 2em; + } + + .sm\:prose :where(video):not(:where([class~="not-prose"],[class~="not-prose"] *)) { + margin-top: 2em; + margin-bottom: 2em; + } + + .sm\:prose :where(kbd):not(:where([class~="not-prose"],[class~="not-prose"] *)) { + font-weight: 500; + font-family: inherit; + color: var(--tw-prose-kbd); + box-shadow: 0 0 0 1px rgb(var(--tw-prose-kbd-shadows) / 10%), 0 3px 0 rgb(var(--tw-prose-kbd-shadows) / 10%); + font-size: 0.875em; + border-radius: 0.3125rem; + padding-top: 0.1875em; + padding-inline-end: 0.375em; + padding-bottom: 0.1875em; + padding-inline-start: 0.375em; + } + + .sm\:prose :where(code):not(:where([class~="not-prose"],[class~="not-prose"] *)) { + color: var(--tw-prose-code); + font-weight: 600; + font-size: 0.875em; + } + + .sm\:prose :where(code):not(:where([class~="not-prose"],[class~="not-prose"] *))::before { + content: "`"; + } + + .sm\:prose :where(code):not(:where([class~="not-prose"],[class~="not-prose"] *))::after { + content: "`"; + } + + .sm\:prose :where(a code):not(:where([class~="not-prose"],[class~="not-prose"] *)) { + color: inherit; + } + + .sm\:prose :where(h1 code):not(:where([class~="not-prose"],[class~="not-prose"] *)) { + color: inherit; + } + + .sm\:prose :where(h2 code):not(:where([class~="not-prose"],[class~="not-prose"] *)) { + color: inherit; + font-size: 0.875em; + } + + .sm\:prose :where(h3 code):not(:where([class~="not-prose"],[class~="not-prose"] *)) { + color: inherit; + font-size: 0.9em; + } + + .sm\:prose :where(h4 code):not(:where([class~="not-prose"],[class~="not-prose"] *)) { + color: inherit; + } + + .sm\:prose :where(blockquote code):not(:where([class~="not-prose"],[class~="not-prose"] *)) { + color: inherit; + } + + .sm\:prose :where(thead th code):not(:where([class~="not-prose"],[class~="not-prose"] *)) { + color: inherit; + } + + .sm\:prose :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; + } + + .sm\:prose :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; + } + + .sm\:prose :where(pre code):not(:where([class~="not-prose"],[class~="not-prose"] *))::before { + content: none; + } + + .sm\:prose :where(pre code):not(:where([class~="not-prose"],[class~="not-prose"] *))::after { + content: none; + } + + .sm\:prose :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; + } + + .sm\:prose :where(thead):not(:where([class~="not-prose"],[class~="not-prose"] *)) { + border-bottom-width: 1px; + border-bottom-color: var(--tw-prose-th-borders); + } + + .sm\:prose :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; + } + + .sm\:prose :where(tbody tr):not(:where([class~="not-prose"],[class~="not-prose"] *)) { + border-bottom-width: 1px; + border-bottom-color: var(--tw-prose-td-borders); + } + + .sm\:prose :where(tbody tr:last-child):not(:where([class~="not-prose"],[class~="not-prose"] *)) { + border-bottom-width: 0; + } + + .sm\:prose :where(tbody td):not(:where([class~="not-prose"],[class~="not-prose"] *)) { + vertical-align: baseline; + } + + .sm\:prose :where(tfoot):not(:where([class~="not-prose"],[class~="not-prose"] *)) { + border-top-width: 1px; + border-top-color: var(--tw-prose-th-borders); + } + + .sm\:prose :where(tfoot td):not(:where([class~="not-prose"],[class~="not-prose"] *)) { + vertical-align: top; + } + + .sm\:prose :where(th, td):not(:where([class~="not-prose"],[class~="not-prose"] *)) { + text-align: start; + } + + .sm\:prose :where(figure > *):not(:where([class~="not-prose"],[class~="not-prose"] *)) { + margin-top: 0; + margin-bottom: 0; + } + + .sm\:prose :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; + } + + .sm\:prose { + --tw-prose-body: #374151; + --tw-prose-headings: #111827; + --tw-prose-lead: #4b5563; + --tw-prose-links: #111827; + --tw-prose-bold: #111827; + --tw-prose-counters: #6b7280; + --tw-prose-bullets: #d1d5db; + --tw-prose-hr: #e5e7eb; + --tw-prose-quotes: #111827; + --tw-prose-quote-borders: #e5e7eb; + --tw-prose-captions: #6b7280; + --tw-prose-kbd: #111827; + --tw-prose-kbd-shadows: 17 24 39; + --tw-prose-code: #111827; + --tw-prose-pre-code: #e5e7eb; + --tw-prose-pre-bg: #1f2937; + --tw-prose-th-borders: #d1d5db; + --tw-prose-td-borders: #e5e7eb; + --tw-prose-invert-body: #d1d5db; + --tw-prose-invert-headings: #fff; + --tw-prose-invert-lead: #9ca3af; + --tw-prose-invert-links: #fff; + --tw-prose-invert-bold: #fff; + --tw-prose-invert-counters: #9ca3af; + --tw-prose-invert-bullets: #4b5563; + --tw-prose-invert-hr: #374151; + --tw-prose-invert-quotes: #f3f4f6; + --tw-prose-invert-quote-borders: #374151; + --tw-prose-invert-captions: #9ca3af; + --tw-prose-invert-kbd: #fff; + --tw-prose-invert-kbd-shadows: 255 255 255; + --tw-prose-invert-code: #fff; + --tw-prose-invert-pre-code: #d1d5db; + --tw-prose-invert-pre-bg: rgb(0 0 0 / 50%); + --tw-prose-invert-th-borders: #4b5563; + --tw-prose-invert-td-borders: #374151; + font-size: 1rem; + line-height: 1.75; + } + + .sm\:prose :where(picture > img):not(:where([class~="not-prose"],[class~="not-prose"] *)) { + margin-top: 0; + margin-bottom: 0; + } + + .sm\:prose :where(li):not(:where([class~="not-prose"],[class~="not-prose"] *)) { + margin-top: 0.5em; + margin-bottom: 0.5em; + } + + .sm\:prose :where(ol > li):not(:where([class~="not-prose"],[class~="not-prose"] *)) { + padding-inline-start: 0.375em; + } + + .sm\:prose :where(ul > li):not(:where([class~="not-prose"],[class~="not-prose"] *)) { + padding-inline-start: 0.375em; + } + + .sm\:prose :where(.sm\:prose > ul > li p):not(:where([class~="not-prose"],[class~="not-prose"] *)) { + margin-top: 0.75em; + margin-bottom: 0.75em; + } + + .sm\:prose :where(.sm\:prose > ul > li > p:first-child):not(:where([class~="not-prose"],[class~="not-prose"] *)) { + margin-top: 1.25em; + } + + .sm\:prose :where(.sm\:prose > ul > li > p:last-child):not(:where([class~="not-prose"],[class~="not-prose"] *)) { + margin-bottom: 1.25em; + } + + .sm\:prose :where(.sm\:prose > ol > li > p:first-child):not(:where([class~="not-prose"],[class~="not-prose"] *)) { + margin-top: 1.25em; + } + + .sm\:prose :where(.sm\:prose > ol > li > p:last-child):not(:where([class~="not-prose"],[class~="not-prose"] *)) { + margin-bottom: 1.25em; + } + + .sm\:prose :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; + } + + .sm\:prose :where(dl):not(:where([class~="not-prose"],[class~="not-prose"] *)) { + margin-top: 1.25em; + margin-bottom: 1.25em; + } + + .sm\:prose :where(dd):not(:where([class~="not-prose"],[class~="not-prose"] *)) { + margin-top: 0.5em; + padding-inline-start: 1.625em; + } + + .sm\:prose :where(hr + *):not(:where([class~="not-prose"],[class~="not-prose"] *)) { + margin-top: 0; + } + + .sm\:prose :where(h2 + *):not(:where([class~="not-prose"],[class~="not-prose"] *)) { + margin-top: 0; + } + + .sm\:prose :where(h3 + *):not(:where([class~="not-prose"],[class~="not-prose"] *)) { + margin-top: 0; + } + + .sm\:prose :where(h4 + *):not(:where([class~="not-prose"],[class~="not-prose"] *)) { + margin-top: 0; + } + + .sm\:prose :where(thead th:first-child):not(:where([class~="not-prose"],[class~="not-prose"] *)) { + padding-inline-start: 0; + } + + .sm\:prose :where(thead th:last-child):not(:where([class~="not-prose"],[class~="not-prose"] *)) { + padding-inline-end: 0; + } + + .sm\:prose :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; + } + + .sm\:prose :where(tbody td:first-child, tfoot td:first-child):not(:where([class~="not-prose"],[class~="not-prose"] *)) { + padding-inline-start: 0; + } + + .sm\:prose :where(tbody td:last-child, tfoot td:last-child):not(:where([class~="not-prose"],[class~="not-prose"] *)) { + padding-inline-end: 0; + } + + .sm\:prose :where(figure):not(:where([class~="not-prose"],[class~="not-prose"] *)) { + margin-top: 2em; + margin-bottom: 2em; + } + + .sm\:prose :where(.sm\:prose > :first-child):not(:where([class~="not-prose"],[class~="not-prose"] *)) { + margin-top: 0; + } + + .sm\:prose :where(.sm\:prose > :last-child):not(:where([class~="not-prose"],[class~="not-prose"] *)) { + margin-bottom: 0; + } + + .sm\:prose { + max-width: none; + } + + .sm\:prose h1,.sm\:prose h2,.sm\:prose h3,.sm\:prose h4 { + font-family: Plus Jakarta Sans, sans-serif; + font-weight: 700; + --tw-text-opacity: 1; + color: rgb(17 24 39 / var(--tw-text-opacity, 1)); + } + + .sm\:prose h1 { + margin-bottom: 2rem; + font-size: 2.25rem; + line-height: 2.5rem; + } + + .sm\:prose h2 { + margin-top: 3rem; + margin-bottom: 1.5rem; + font-size: 1.875rem; + line-height: 2.25rem; + } + + .sm\:prose h3 { + margin-top: 2rem; + margin-bottom: 1rem; + font-size: 1.5rem; + line-height: 2rem; + } + + .sm\:prose p { + margin-bottom: 1.5rem; + line-height: 1.625; + --tw-text-opacity: 1; + color: rgb(55 65 81 / var(--tw-text-opacity, 1)); + } + + .sm\:prose a { + --tw-text-opacity: 1; + color: rgb(2 132 199 / var(--tw-text-opacity, 1)); + text-decoration-line: none; + } + + .sm\:prose a:hover { + --tw-text-opacity: 1; + color: rgb(3 105 161 / var(--tw-text-opacity, 1)); + } + + .sm\:prose ul,.sm\:prose ol { + margin-top: 1.5rem; + margin-bottom: 1.5rem; + margin-left: 1.5rem; + } + + .sm\:prose li { + margin-bottom: 0.5rem; + } + + .sm\:prose blockquote { + margin-top: 2rem; + margin-bottom: 2rem; + border-left-width: 4px; + --tw-border-opacity: 1; + border-color: rgb(229 231 235 / var(--tw-border-opacity, 1)); + padding-left: 1rem; + font-style: italic; + --tw-text-opacity: 1; + color: rgb(55 65 81 / var(--tw-text-opacity, 1)); + } + + .sm\:prose img { + margin-top: 2rem; + margin-bottom: 2rem; + --tw-shadow: 0 10px 15px -3px rgb(0 0 0 / 0.1), 0 4px 6px -4px rgb(0 0 0 / 0.1); + --tw-shadow-colored: 0 10px 15px -3px var(--tw-shadow-color), 0 4px 6px -4px var(--tw-shadow-color); + box-shadow: var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000), var(--tw-shadow); + border-radius: 2rem; + } + + .sm\:prose code:not(pre code) { + border-radius: 0.25rem; + --tw-bg-opacity: 1; + background-color: rgb(243 244 246 / var(--tw-bg-opacity, 1)); + padding-left: 0.375rem; + padding-right: 0.375rem; + padding-top: 0.125rem; + padding-bottom: 0.125rem; + font-family: ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace; + font-size: 0.875rem; + line-height: 1.25rem; + --tw-text-opacity: 1; + color: rgb(17 24 39 / var(--tw-text-opacity, 1)); + } +} + +@media (min-width: 1024px) { + .lg\:prose-lg { + font-size: 1.125rem; + line-height: 1.7777778; + } + + .lg\:prose-lg :where(p):not(:where([class~="not-prose"],[class~="not-prose"] *)) { + margin-top: 1.3333333em; + margin-bottom: 1.3333333em; + } + + .lg\:prose-lg :where([class~="lead"]):not(:where([class~="not-prose"],[class~="not-prose"] *)) { + font-size: 1.2222222em; + line-height: 1.4545455; + margin-top: 1.0909091em; + margin-bottom: 1.0909091em; + } + + .lg\:prose-lg :where(blockquote):not(:where([class~="not-prose"],[class~="not-prose"] *)) { + margin-top: 1.6666667em; + margin-bottom: 1.6666667em; + padding-inline-start: 1em; + } + + .lg\:prose-lg :where(h1):not(:where([class~="not-prose"],[class~="not-prose"] *)) { + font-size: 2.6666667em; + margin-top: 0; + margin-bottom: 0.8333333em; + line-height: 1; + } + + .lg\:prose-lg :where(h2):not(:where([class~="not-prose"],[class~="not-prose"] *)) { + font-size: 1.6666667em; + margin-top: 1.8666667em; + margin-bottom: 1.0666667em; + line-height: 1.3333333; + } + + .lg\:prose-lg :where(h3):not(:where([class~="not-prose"],[class~="not-prose"] *)) { + font-size: 1.3333333em; + margin-top: 1.6666667em; + margin-bottom: 0.6666667em; + line-height: 1.5; + } + + .lg\:prose-lg :where(h4):not(:where([class~="not-prose"],[class~="not-prose"] *)) { + margin-top: 1.7777778em; + margin-bottom: 0.4444444em; + line-height: 1.5555556; + } + + .lg\:prose-lg :where(img):not(:where([class~="not-prose"],[class~="not-prose"] *)) { + margin-top: 1.7777778em; + margin-bottom: 1.7777778em; + } + + .lg\:prose-lg :where(picture):not(:where([class~="not-prose"],[class~="not-prose"] *)) { + margin-top: 1.7777778em; + margin-bottom: 1.7777778em; + } + + .lg\:prose-lg :where(picture > img):not(:where([class~="not-prose"],[class~="not-prose"] *)) { + margin-top: 0; + margin-bottom: 0; + } + + .lg\:prose-lg :where(video):not(:where([class~="not-prose"],[class~="not-prose"] *)) { + margin-top: 1.7777778em; + margin-bottom: 1.7777778em; + } + + .lg\:prose-lg :where(kbd):not(:where([class~="not-prose"],[class~="not-prose"] *)) { + font-size: 0.8888889em; + border-radius: 0.3125rem; + padding-top: 0.2222222em; + padding-inline-end: 0.4444444em; + padding-bottom: 0.2222222em; + padding-inline-start: 0.4444444em; + } + + .lg\:prose-lg :where(code):not(:where([class~="not-prose"],[class~="not-prose"] *)) { + font-size: 0.8888889em; + } + + .lg\:prose-lg :where(h2 code):not(:where([class~="not-prose"],[class~="not-prose"] *)) { + font-size: 0.8666667em; + } + + .lg\:prose-lg :where(h3 code):not(:where([class~="not-prose"],[class~="not-prose"] *)) { + font-size: 0.875em; + } + + .lg\:prose-lg :where(pre):not(:where([class~="not-prose"],[class~="not-prose"] *)) { + font-size: 0.8888889em; + line-height: 1.75; + margin-top: 2em; + margin-bottom: 2em; + border-radius: 0.375rem; + padding-top: 1em; + padding-inline-end: 1.5em; + padding-bottom: 1em; + padding-inline-start: 1.5em; + } + + .lg\:prose-lg :where(ol):not(:where([class~="not-prose"],[class~="not-prose"] *)) { + margin-top: 1.3333333em; + margin-bottom: 1.3333333em; + padding-inline-start: 1.5555556em; + } + + .lg\:prose-lg :where(ul):not(:where([class~="not-prose"],[class~="not-prose"] *)) { + margin-top: 1.3333333em; + margin-bottom: 1.3333333em; + padding-inline-start: 1.5555556em; + } + + .lg\:prose-lg :where(li):not(:where([class~="not-prose"],[class~="not-prose"] *)) { + margin-top: 0.6666667em; + margin-bottom: 0.6666667em; + } + + .lg\:prose-lg :where(ol > li):not(:where([class~="not-prose"],[class~="not-prose"] *)) { + padding-inline-start: 0.4444444em; + } + + .lg\:prose-lg :where(ul > li):not(:where([class~="not-prose"],[class~="not-prose"] *)) { + padding-inline-start: 0.4444444em; + } + + .lg\:prose-lg :where(.lg\:prose-lg > ul > li p):not(:where([class~="not-prose"],[class~="not-prose"] *)) { + margin-top: 0.8888889em; + margin-bottom: 0.8888889em; + } + + .lg\:prose-lg :where(.lg\:prose-lg > ul > li > p:first-child):not(:where([class~="not-prose"],[class~="not-prose"] *)) { + margin-top: 1.3333333em; + } + + .lg\:prose-lg :where(.lg\:prose-lg > ul > li > p:last-child):not(:where([class~="not-prose"],[class~="not-prose"] *)) { + margin-bottom: 1.3333333em; + } + + .lg\:prose-lg :where(.lg\:prose-lg > ol > li > p:first-child):not(:where([class~="not-prose"],[class~="not-prose"] *)) { + margin-top: 1.3333333em; + } + + .lg\:prose-lg :where(.lg\:prose-lg > ol > li > p:last-child):not(:where([class~="not-prose"],[class~="not-prose"] *)) { + margin-bottom: 1.3333333em; + } + + .lg\:prose-lg :where(ul ul, ul ol, ol ul, ol ol):not(:where([class~="not-prose"],[class~="not-prose"] *)) { + margin-top: 0.8888889em; + margin-bottom: 0.8888889em; + } + + .lg\:prose-lg :where(dl):not(:where([class~="not-prose"],[class~="not-prose"] *)) { + margin-top: 1.3333333em; + margin-bottom: 1.3333333em; + } + + .lg\:prose-lg :where(dt):not(:where([class~="not-prose"],[class~="not-prose"] *)) { + margin-top: 1.3333333em; + } + + .lg\:prose-lg :where(dd):not(:where([class~="not-prose"],[class~="not-prose"] *)) { + margin-top: 0.6666667em; + padding-inline-start: 1.5555556em; + } + + .lg\:prose-lg :where(hr):not(:where([class~="not-prose"],[class~="not-prose"] *)) { + margin-top: 3.1111111em; + margin-bottom: 3.1111111em; + } + + .lg\:prose-lg :where(hr + *):not(:where([class~="not-prose"],[class~="not-prose"] *)) { + margin-top: 0; + } + + .lg\:prose-lg :where(h2 + *):not(:where([class~="not-prose"],[class~="not-prose"] *)) { + margin-top: 0; + } + + .lg\:prose-lg :where(h3 + *):not(:where([class~="not-prose"],[class~="not-prose"] *)) { + margin-top: 0; + } + + .lg\:prose-lg :where(h4 + *):not(:where([class~="not-prose"],[class~="not-prose"] *)) { + margin-top: 0; + } + + .lg\:prose-lg :where(table):not(:where([class~="not-prose"],[class~="not-prose"] *)) { + font-size: 0.8888889em; + line-height: 1.5; + } + + .lg\:prose-lg :where(thead th):not(:where([class~="not-prose"],[class~="not-prose"] *)) { + padding-inline-end: 0.75em; + padding-bottom: 0.75em; + padding-inline-start: 0.75em; + } + + .lg\:prose-lg :where(thead th:first-child):not(:where([class~="not-prose"],[class~="not-prose"] *)) { + padding-inline-start: 0; + } + + .lg\:prose-lg :where(thead th:last-child):not(:where([class~="not-prose"],[class~="not-prose"] *)) { + padding-inline-end: 0; + } + + .lg\:prose-lg :where(tbody td, tfoot td):not(:where([class~="not-prose"],[class~="not-prose"] *)) { + padding-top: 0.75em; + padding-inline-end: 0.75em; + padding-bottom: 0.75em; + padding-inline-start: 0.75em; + } + + .lg\:prose-lg :where(tbody td:first-child, tfoot td:first-child):not(:where([class~="not-prose"],[class~="not-prose"] *)) { + padding-inline-start: 0; + } + + .lg\:prose-lg :where(tbody td:last-child, tfoot td:last-child):not(:where([class~="not-prose"],[class~="not-prose"] *)) { + padding-inline-end: 0; + } + + .lg\:prose-lg :where(figure):not(:where([class~="not-prose"],[class~="not-prose"] *)) { + margin-top: 1.7777778em; + margin-bottom: 1.7777778em; + } + + .lg\:prose-lg :where(figure > *):not(:where([class~="not-prose"],[class~="not-prose"] *)) { + margin-top: 0; + margin-bottom: 0; + } + + .lg\:prose-lg :where(figcaption):not(:where([class~="not-prose"],[class~="not-prose"] *)) { + font-size: 0.8888889em; + line-height: 1.5; + margin-top: 1em; + } + + .lg\:prose-lg :where(.lg\:prose-lg > :first-child):not(:where([class~="not-prose"],[class~="not-prose"] *)) { + margin-top: 0; + } + + .lg\:prose-lg :where(.lg\:prose-lg > :last-child):not(:where([class~="not-prose"],[class~="not-prose"] *)) { + margin-bottom: 0; + } +} + +.hover\:-translate-y-1:hover { + --tw-translate-y: -0.25rem; + transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y)); +} + +.hover\:scale-105:hover { + --tw-scale-x: 1.05; + --tw-scale-y: 1.05; + transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y)); +} + +.hover\:border-primary-600:hover { + --tw-border-opacity: 1; + border-color: rgb(2 132 199 / var(--tw-border-opacity, 1)); +} + +.hover\:bg-gray-100:hover { + --tw-bg-opacity: 1; + background-color: rgb(243 244 246 / var(--tw-bg-opacity, 1)); +} + +.hover\:bg-gray-200:hover { + --tw-bg-opacity: 1; + background-color: rgb(229 231 235 / var(--tw-bg-opacity, 1)); +} + +.hover\:bg-gray-50:hover { + --tw-bg-opacity: 1; + background-color: rgb(249 250 251 / var(--tw-bg-opacity, 1)); +} + +.hover\:bg-primary-100:hover { + --tw-bg-opacity: 1; + background-color: rgb(224 242 254 / var(--tw-bg-opacity, 1)); +} + +.hover\:bg-primary-700:hover { + --tw-bg-opacity: 1; + background-color: rgb(3 105 161 / var(--tw-bg-opacity, 1)); +} + +.hover\:text-gray-900:hover { + --tw-text-opacity: 1; + color: rgb(17 24 39 / var(--tw-text-opacity, 1)); +} + +.hover\:text-primary-600:hover { + --tw-text-opacity: 1; + color: rgb(2 132 199 / var(--tw-text-opacity, 1)); +} + +.hover\:text-primary-700:hover { + --tw-text-opacity: 1; + color: rgb(3 105 161 / var(--tw-text-opacity, 1)); +} + +.hover\:shadow-lg:hover { + --tw-shadow: 0 10px 15px -3px rgb(0 0 0 / 0.1), 0 4px 6px -4px rgb(0 0 0 / 0.1); + --tw-shadow-colored: 0 10px 15px -3px var(--tw-shadow-color), 0 4px 6px -4px var(--tw-shadow-color); + box-shadow: var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000), var(--tw-shadow); +} + +.hover\:shadow-md:hover { + --tw-shadow: 0 4px 6px -1px rgb(0 0 0 / 0.1), 0 2px 4px -2px rgb(0 0 0 / 0.1); + --tw-shadow-colored: 0 4px 6px -1px var(--tw-shadow-color), 0 2px 4px -2px var(--tw-shadow-color); + box-shadow: var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000), var(--tw-shadow); +} + +.hover\:grayscale-0:hover { + --tw-grayscale: grayscale(0); + 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); +} + +.focus\:border-primary-500:focus { + --tw-border-opacity: 1; + border-color: rgb(14 165 233 / var(--tw-border-opacity, 1)); +} + +.focus\:outline-none:focus { + outline: 2px solid transparent; + outline-offset: 2px; +} + +.focus\:ring-2:focus { + --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, 0 0 #0000); +} + +.focus\:ring-primary-500:focus { + --tw-ring-opacity: 1; + --tw-ring-color: rgb(14 165 233 / var(--tw-ring-opacity, 1)); +} + +.focus\:ring-primary-600:focus { + --tw-ring-opacity: 1; + --tw-ring-color: rgb(2 132 199 / var(--tw-ring-opacity, 1)); +} + +.focus\:ring-offset-2:focus { + --tw-ring-offset-width: 2px; +} + +.group:hover .group-hover\:visible { + visibility: visible; +} + +.group:hover .group-hover\:scale-105 { + --tw-scale-x: 1.05; + --tw-scale-y: 1.05; + transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y)); +} + +.group:hover .group-hover\:border-primary-100 { + --tw-border-opacity: 1; + border-color: rgb(224 242 254 / var(--tw-border-opacity, 1)); +} + +.group:hover .group-hover\:bg-primary-100 { + --tw-bg-opacity: 1; + background-color: rgb(224 242 254 / var(--tw-bg-opacity, 1)); +} + +.group:hover .group-hover\:text-primary-600 { + --tw-text-opacity: 1; + color: rgb(2 132 199 / var(--tw-text-opacity, 1)); +} + +.group:hover .group-hover\:text-primary-700 { + --tw-text-opacity: 1; + color: rgb(3 105 161 / var(--tw-text-opacity, 1)); +} + +.group:hover .group-hover\:opacity-100 { + opacity: 1; +} + +.group:hover .group-hover\:shadow-md { + --tw-shadow: 0 4px 6px -1px rgb(0 0 0 / 0.1), 0 2px 4px -2px rgb(0 0 0 / 0.1); + --tw-shadow-colored: 0 4px 6px -1px var(--tw-shadow-color), 0 2px 4px -2px var(--tw-shadow-color); + box-shadow: var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000), var(--tw-shadow); +} + +@media (min-width: 640px) { + .sm\:mt-20 { + margin-top: 5rem; + } + + .sm\:flex-row { + flex-direction: row; + } + + .sm\:px-6 { + padding-left: 1.5rem; + padding-right: 1.5rem; + } + + .sm\:py-32 { + padding-top: 8rem; + padding-bottom: 8rem; + } + + .sm\:pt-32 { + padding-top: 8rem; + } + + .sm\:text-4xl { + font-size: 2.25rem; + line-height: 2.5rem; + } + + .sm\:text-6xl { + font-size: 3.75rem; + line-height: 1; + } + + .sm\:text-xl { + font-size: 1.25rem; + line-height: 1.75rem; + } +} + +@media (min-width: 768px) { + .md\:flex { + display: flex; + } + + .md\:hidden { + display: none; + } + + .md\:grid-cols-2 { + grid-template-columns: repeat(2, minmax(0, 1fr)); + } + + .md\:grid-cols-3 { + grid-template-columns: repeat(3, minmax(0, 1fr)); + } + + .md\:grid-cols-4 { + grid-template-columns: repeat(4, minmax(0, 1fr)); + } + + .md\:flex-row { + flex-direction: row; + } + + .md\:space-y-0 > :not([hidden]) ~ :not([hidden]) { + --tw-space-y-reverse: 0; + margin-top: calc(0px * calc(1 - var(--tw-space-y-reverse))); + margin-bottom: calc(0px * var(--tw-space-y-reverse)); + } + + .md\:pb-28 { + padding-bottom: 7rem; + } + + .md\:pt-24 { + padding-top: 6rem; + } + + .md\:text-2xl { + font-size: 1.5rem; + line-height: 2rem; + } + + .md\:text-3xl { + font-size: 1.875rem; + line-height: 2.25rem; + } + + .md\:text-4xl { + font-size: 2.25rem; + line-height: 2.5rem; + } + + .md\:text-5xl { + font-size: 3rem; + line-height: 1; + } +} + +@media (min-width: 1024px) { + .lg\:order-1 { + order: 1; + } + + .lg\:order-2 { + order: 2; + } + + .lg\:mb-12 { + margin-bottom: 3rem; + } + + .lg\:mt-24 { + margin-top: 6rem; + } + + .lg\:w-80 { + width: 20rem; + } + + .lg\:max-w-none { + max-width: none; + } + + .lg\:grid-cols-2 { + grid-template-columns: repeat(2, minmax(0, 1fr)); + } + + .lg\:grid-cols-3 { + grid-template-columns: repeat(3, minmax(0, 1fr)); + } + + .lg\:flex-row { + flex-direction: row; + } + + .lg\:p-12 { + padding: 3rem; + } + + .lg\:px-6 { + padding-left: 1.5rem; + padding-right: 1.5rem; + } + + .lg\:px-8 { + padding-left: 2rem; + padding-right: 2rem; + } + + .lg\:py-16 { + padding-top: 4rem; + padding-bottom: 4rem; + } + + .lg\:text-center { + text-align: center; + } + + .lg\:text-6xl { + font-size: 3.75rem; + line-height: 1; + } +} + +@media (min-width: 1280px) { + .xl\:w-96 { + width: 24rem; + } + + .xl\:grid-cols-4 { + grid-template-columns: repeat(4, minmax(0, 1fr)); + } +} + +@media (prefers-color-scheme: dark) { + .dark\:border-gray-700 { + --tw-border-opacity: 1; + border-color: rgb(55 65 81 / var(--tw-border-opacity, 1)); + } + + .dark\:bg-gray-800 { + --tw-bg-opacity: 1; + background-color: rgb(31 41 55 / var(--tw-bg-opacity, 1)); + } + + .dark\:bg-gray-900 { + --tw-bg-opacity: 1; + background-color: rgb(17 24 39 / var(--tw-bg-opacity, 1)); + } + + .dark\:text-gray-400 { + --tw-text-opacity: 1; + color: rgb(156 163 175 / var(--tw-text-opacity, 1)); + } + + .dark\:text-green-400 { + --tw-text-opacity: 1; + color: rgb(74 222 128 / var(--tw-text-opacity, 1)); + } + + .dark\:text-white { + --tw-text-opacity: 1; + color: rgb(255 255 255 / var(--tw-text-opacity, 1)); + } +} diff --git a/exampleSite/static/images/blog/blog-1.jpg b/exampleSite/static/images/blog/blog-1.jpg new file mode 100644 index 0000000000000000000000000000000000000000..8776392539c5453bebe9252cbfa2c6ac8ed239e2 GIT binary patch literal 77805 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