diff --git a/.eleventy.js b/.eleventy.js index b8b1c960..5329b3a3 100644 --- a/.eleventy.js +++ b/.eleventy.js @@ -3,7 +3,6 @@ const fs = require("fs"); const slugify = require("slugify"); const syntaxHighlight = require("@11ty/eleventy-plugin-syntaxhighlight"); const eleventyNavigationPlugin = require("@11ty/eleventy-navigation"); -// const eleventyImageTransformPlugin = require("@11ty/eleventy-img"); const pluginRss = require("@11ty/eleventy-plugin-rss"); const inclusiveLangPlugin = require("@11ty/eleventy-plugin-inclusive-language"); const pluginTOC = require('eleventy-plugin-toc'); @@ -13,6 +12,7 @@ const markdownItAnchor = require("markdown-it-anchor"); const markdownItHighlightJS = require('markdown-it-highlightjs') const emojiReadTime = require("@11tyrocks/eleventy-plugin-emoji-readtime"); const packageVersion = require("./package.json").version; +const eleventySass = require("@11tyrocks/eleventy-plugin-sass-lightningcss"); const mdOptions = { html: true, @@ -33,6 +33,7 @@ module.exports = function (eleventyConfig) { if (process.env.ELEVENTY_ENV === "prod") { eleventyConfig.ignores.add("./src/posts/"); }; + eleventyConfig.addPlugin(eleventySass); eleventyConfig.addPlugin(syntaxHighlight); eleventyConfig.addPlugin(pluginRss, { posthtmlRenderOptions: { @@ -58,7 +59,7 @@ module.exports = function (eleventyConfig) { eleventyConfig.addWatchTarget("src/sass/*.scss"); eleventyConfig.addPassthroughCopy("src/assets/img"); - eleventyConfig.addPassthroughCopy("src/webfonts"); + eleventyConfig.addPassthroughCopy("src/assets/AdamJolicoeur-Resume.pdf"); eleventyConfig.addPassthroughCopy("src/cache-polyfill.js"); eleventyConfig.addPassthroughCopy("src/CNAME"); eleventyConfig.addPassthroughCopy("src/icon-16.png"); @@ -84,7 +85,7 @@ module.exports = function (eleventyConfig) { ready: function(err, bs) { bs.addMiddleware("*", (req, res) => { - const content_404 = fs.readFileSync('./docs/404.html'); + const content_404 = fs.readFileSync('./docs/404/404.html'); // Add 404 http status code in request header. res.writeHead(404, { "Content-Type": "text/html; charset=UTF-8" }); // Provides the 404 content without redirect. @@ -134,41 +135,6 @@ module.exports = function (eleventyConfig) { {skipFirstParagraphClass: 'precursor'} ); - // Create Posts Collection - // https://github.com/jdsteinbach/jdsteinbach.github.io/blob/blog/.eleventy.js - eleventyConfig.addCollection('posts', collection => { - return collection - .getAllSorted() - .reverse() - .filter(item => { - return item.inputPath.match(/^\.\/src\/posts\//) !== null - }) - }); - - // Create Posts Index Collection - // https://github.com/jdsteinbach/jdsteinbach.github.io/blob/blog/.eleventy.js - eleventyConfig.addCollection('postsIndex', collection => { - return collection - .getAllSorted() - .reverse() - .filter(item => { - return item.inputPath.match(/^\.\/src\/posts\//) !== null - }) - .slice(0, 8) - }); - - // Create Posts Feed Collection - // https://github.com/jdsteinbach/jdsteinbach.github.io/blob/blog/.eleventy.js - eleventyConfig.addCollection('postsFeed', collection => { - return collection - .getAllSorted() - .reverse() - .filter(item => { - return item.inputPath.match(/^\.\/src\/posts\//) !== null - }) - .slice(0, 10) - }); - // Create Category Collections // https://github.com/jdsteinbach/jdsteinbach.github.io/blob/blog/.eleventy.js Array.from(['development', 'general', 'design', 'portfolio']).map(cat => { diff --git a/.nvmrc b/.nvmrc index 5bc38ded..28d6ff1c 100644 --- a/.nvmrc +++ b/.nvmrc @@ -1 +1 @@ -v22.9 +v25.1.0 diff --git a/.stylelintignore b/.stylelintignore index 5193525c..e58cc9b4 100644 --- a/.stylelintignore +++ b/.stylelintignore @@ -1,3 +1,5 @@ src/sass/fa/** src/sass/fontawesome.scss node_modules/bootstrap/scss/*.scss +src/sass/prism.scss +src/sass/style.scss diff --git a/.vscode/settings.json b/.vscode/settings.json deleted file mode 100644 index 5c45f6e6..00000000 --- a/.vscode/settings.json +++ /dev/null @@ -1,56 +0,0 @@ -{ - "cSpell.ignoreWords": [ - "borderless", - "customerengagement", - "wireframe" - ], - "cSpell.words": [ - "Alfredlogo", - "Brookfield", - "Codepen", - "cssnano", - "Elgato", - "endfor", - "gamesandthings", - "headshot", - "jolicoeur", - "Joomla", - "Jumpstart", - "keybase", - "keycaps", - "Keychron", - "kubevirt", - "kubevirtio", - "linkify", - "luxon", - "MCLA", - "mindreeper", - "Molay", - "nikitavoloboev", - "OSIO", - "Patternfly", - "Photoshop", - "postbuild", - "Powerpack", - "RHDM", - "Roadmapping", - "Saylent", - "Shortcode", - "Shriners", - "Spiceworks", - "Streamdeck", - "Sturbridge", - "stylelint", - "stylesheet", - "syntaxhighlight", - "theproxyguy", - "Timetrak", - "Trak", - "UXPA", - "webfonts", - "Westborough", - "Westford", - "Zeplin" - ], - "html.customData": ["./node_modules/@shoelace-style/shoelace/dist/vscode.html-custom-data.json"] -} diff --git a/CLAUDE.md b/CLAUDE.md new file mode 100644 index 00000000..e3a54b33 --- /dev/null +++ b/CLAUDE.md @@ -0,0 +1,220 @@ +# CLAUDE.md + +This file provides guidance to Claude Code (claude.ai/code) when working with code in this repository. + +## Project Overview + +This is Adam Jolicoeur's portfolio website built with Eleventy (11ty), Node.js, Bootstrap 5, and Sass. It's a static site generator project that outputs to the `docs/` directory for GitHub Pages hosting. + +## Essential Commands + +### Development +```bash +npm run start # Start dev server with live reload on port 8081 +npm run build # Full production build (clean + images + sass + eleventy + postbuild) +npm run clean # Remove docs/ directory +``` + +### Building Components +```bash +npm run build:sass # Compile SCSS to CSS +npm run build:eleventy # Generate static site +npm run images:optimize # Process images from src/assets/img-raw/ using Sharp +npm run postbuild # Run autoprefixer and cssnano (automatically runs after build) +``` + +### Linting +```bash +npm run lint # Check Sass/SCSS files with Stylelint +npm run lint:fix # Auto-fix Stylelint issues +npm run webhint # Test accessibility/performance (requires dev server running) +``` + +### Versioning +```bash +npm run bump patch|minor|major # Update package.json version without git tag +``` + +## Important Build Information + +- **Node.js version**: 22 (specified in package.json engines and .nvmrc) +- **Development server port**: 8081 (NOT the default 8080) +- **Output directory**: `docs/` (required for GitHub Pages, gets deleted on build) +- **Input directory**: `src/` +- **Environment variables**: + - `ELEVENTY_ENV=dev` - includes posts directory + - `ELEVENTY_ENV=prod` - excludes posts directory (line 33-35 in .eleventy.js) + +## Architecture + +### Directory Structure + +``` +src/ +├── _data/ # Global data files +│ └── meta.js # Site metadata (URLs, social links, descriptions) +├── _includes/ # Nunjucks templates and partials +│ ├── base.njk # Main layout with navigation logic +│ ├── footer.njk # Footer template +│ ├── markdown.njk # Markdown content wrapper +│ └── ... +├── _generate/ # Generated content templates (social cards) +├── pages/ # Markdown content pages +│ ├── about/ +│ ├── designs/ +│ ├── development/ +│ └── ... +├── posts/ # Blog posts (excluded in prod builds) +├── assets/ +│ ├── img/ # Optimized images (generated, committed) +│ └── img-raw/ # Original high-res images for processing +├── sass/ # SCSS stylesheets +│ ├── style.scss # Main stylesheet (imports Bootstrap + partials) +│ ├── print.scss # Print-specific styles +│ ├── _variables.scss # Custom variables +│ ├── _layout.scss # Layout and grid customizations +│ ├── _cards.scss # Card component styles +│ ├── _navigation.scss# Navigation styles +│ └── ... +└── js/ # JavaScript (passed through) + +docs/ # Build output (DO NOT EDIT) +scripts/ +└── image-optimizer.js # Custom Sharp image processing script +``` + +### Template System + +- **Primary templating**: Nunjucks (`.njk` files) +- **Content format**: Markdown with YAML front matter +- **Base layout**: `src/_includes/base.njk` + - Contains conditional navigation logic based on URL + - Home page (`/`) has bottom navigation with anchor links + - About pages (`/about/*`) have About/Resume navigation + - Other pages have Home/Task-It/ALM navigation +- **Style system**: Bootstrap 5 grid + custom Sass in modular partials + +### Eleventy Configuration (.eleventy.js) + +Key features configured: +- **Plugins**: Syntax highlighting, RSS, navigation, inclusive language, TOC, dropcap, emoji read time +- **Markdown library**: markdown-it with anchor links and syntax highlighting +- **Custom collections**: `development`, `general`, `design`, `portfolio` (lines 139-153) +- **Custom filters**: `slug` filter for URL-safe strings (removes emojis, special chars) +- **Shortcodes**: `year`, `packageVersion` +- **Pass-through copy**: Images, icons, manifests, service worker, JavaScript +- **Watch targets**: `src/sass/*.scss` +- **404 handling**: Custom BrowserSync middleware (lines 82-96) + +### Image Processing + +The `scripts/image-optimizer.js` script: +- **Input**: `src/assets/img-raw/` (original high-res images) +- **Output**: `src/assets/img/` (optimized images) +- **Formats generated**: + - WebP: 1200px @ 80% quality, 300px thumbnails @ 70% quality + - JPEG fallbacks: 1200px @ 85% quality, 300px thumbnails @ 75% quality +- **Naming convention**: `filename.webp`, `filename-thumb.webp`, `filename.jpg`, `filename-thumb.jpg` +- **Run automatically**: Part of `npm run start` and `npm run build` + +### Sass Architecture + +The styling is modular with Bootstrap 5 as the foundation: +- **Entry point**: `src/sass/style.scss` imports Bootstrap and all partials +- **Key partials**: + - `_variables.scss` - Custom variables and Bootstrap overrides + - `_layout.scss` - Layout and grid customizations + - `_typography.scss` - Font styles and text utilities + - `_navigation.scss` - Navigation component styles + - `_cards.scss` - Card component styles for portfolio items + - `_buttons.scss` - Button styles + - `_footer.scss` - Footer styles + - `_components.scss` - Misc component styles + - `_animations.scss` - Animation utilities + - `_markdown.scss` - Markdown content styling +- **Build process**: Sass → CSS → PostCSS (autoprefixer + cssnano) + +## Key Technical Details + +### Content Management + +- **Adding pages**: Create `.md` file in `src/pages/` with front matter +- **Front matter fields**: `title`, `description`, `layout`, `eleventyNavigation`, `categories`, `type` +- **Navigation**: Uses `@11ty/eleventy-navigation` plugin, configured via front matter +- **Collections**: Auto-generated from `categories` front matter (development, general, design, portfolio) + +### Metadata and SEO + +Configured in `src/_data/meta.js`: +- Site metadata (name, description, URL) +- Social media links (GitHub, LinkedIn, Bluesky, Mastodon, CodePen, Figma) +- Author information +- Environment-aware URL configuration + +### Service Worker + +- Service worker registration in `src/_includes/base.njk` (lines 131-139) +- PWA support via `manifest.json` +- Multiple icon sizes for various devices + +### GitHub Actions CI/CD + +The site auto-deploys via `.github/workflows/eleventy_build.yml`: +- Triggers on push to `main` branch +- Builds with Node.js 22.x +- Publishes `docs/` to `gh-pages` branch +- Live site deploys automatically to GitHub Pages + +## Common Development Patterns + +### Adding a New Design Case Study + +1. Create markdown file: `src/pages/designs/project-name.md` +2. Add front matter with title, description, categories: `['design', 'portfolio']` +3. Add images to `src/assets/img-raw/` +4. Run `npm run images:optimize` +5. Reference images in markdown: `![alt text](/assets/img/filename.webp)` +6. Update navigation in `src/_includes/base.njk` if needed + +### Modifying Styles + +1. Edit relevant partial in `src/sass/` +2. Changes auto-compile with `npm run start` (watch mode) +3. For production: `npm run build:sass` +4. PostCSS automatically runs after build + +### Working with Collections + +Collections are auto-created based on `categories` in front matter. To add items to a collection: +```yaml +--- +title: My Project +categories: ['portfolio', 'design'] +--- +``` + +Access in templates: `collections.portfolio`, `collections.design`, etc. + +## Expected Warnings (Safe to Ignore) + +- **Sass deprecation warnings**: Bootstrap uses deprecated `@import` syntax (~144 warnings) +- **npm audit vulnerabilities**: Non-critical for static site generation +- **Stylelint errors**: Legacy code issues (~176 errors) - fix with `npm run lint:fix` +- **Node version warnings**: Package requires Node 22, works with 20+ (EBADENGINE warnings) + +## Testing Before Committing + +1. **Build succeeds**: `npm run build` +2. **Dev server runs**: `npm run start` and verify http://localhost:8081 +3. **Key pages load**: Test home, designs, development, about pages +4. **Images display**: Verify portfolio images load correctly +5. **Navigation works**: Test all navigation links +6. **Responsive behavior**: Check mobile/tablet layouts +7. **Run linting**: `npm run lint` (don't introduce new errors) + +## Deployment + +- **Main branch**: Triggers automatic GitHub Actions build +- **Output**: `docs/` directory published to `gh-pages` branch +- **Live URL**: https://www.adamjolicoeur.com +- **Cloudflare**: Creates PR previews automatically diff --git a/README.md b/README.md index 5cd1177b..90ab8e08 100755 --- a/README.md +++ b/README.md @@ -14,43 +14,23 @@ I'm a user experience designer with a passion for creating data-intensive design I decided to build my own portfolio site on GitHub, rather than on a less code-oriented platform, in order to keep my skills sharp, up-to-date, and to do everything in the open. -## How was it created? - -I used Figma for designing the site, VSCode with iTerm for development, NodeJS as the runtime environment with Eleventy as the site generator, and Bootstrap as the toolkit. - -### Figma - -For designing my portfolio, I used [Figma](https://www.figma.com) so that I could design in the open using the latest technology. - -### Eleventy - -This site is built using [Eleventy+Nunjucks](https://www.11ty.dev/docs/languages/nunjucks/) with [Bootstrap 5](https://getbootstrap.com) as the frontend toolkit. Custom CSS is applied in order to create a personalized experience. - -### NodeJS - -The project uses NodeJS as it's runtime environment. Currently, `22.6.0` is the latest version is use and is set using Node Version Manager (NVM). To set a local environment, enter `nvm use` into a terminal while inside of the project folder. _You must have node installed on your machine with nvm_ - -### Automation & Releases +## Automation & Releases **Automation** is handled by GitHub Actions, which sets Labels for pull requests and Releases versioning. I use [Cloudflare](https://www.cloudflare.com) to create pull request previews. **Releases** are done via the [release-drafter](https://github.com/marketplace/actions/release-drafter) GitHub Action. Release notes are automatically generated from the pull request title and description. -## Can I use it? - -At the moment this repo is very personalized to my needs and my information, so I would not recommend it. I will be creating a template in the near future, which I will welcome anyone to use and contribute to. - ---- ## References and Resources **Libraries** -- [Shoelace](https://www.shoelace.style) -- [Bootstrap](https://www.getbootstrap.com) - [Font Awesome](https://www.fontawesome.com) **Eleventy** - [Eleventy Documentation](https://www.11ty.dev/docs/) - [11ty Recipes](https://11ty.recipes/) - [The 11ty Bundle](https://11tybundle.dev/) -[https://github.com/jdsteinbach](https://github.com/jdsteinbach/jdsteinbach.github.io/blob/blog/.eleventy.js) + +**Carousel pen by Siiron** +- [https://codepen.io/siiron/pen/QWwLoMy](https://codepen.io/siiron/pen/QWwLoMy) diff --git a/docs/404.html b/docs/404.html index bc458987..1b760552 100644 --- a/docs/404.html +++ b/docs/404.html @@ -1,48 +1,36 @@ - - - + + - - + Adam Jolicoeur - - - - - - - - - - - - - - + + + + + + + + + + + + + + + @@ -52,104 +40,25 @@ title="RSS Feed for Adam Jolicoeur" href="/feed/" /> + - - - - -
+ + + +
+ An image of a trail sign, weathered, with arrows pointing in different directions
-
- Lost in the mountains -
-

Looks like you lost your way...

-

Go back to the home page by clicking the button below.

- Take me home +

Looks like you are lost...

+ Take me home
- - + + + + + +
+
+

Hello!

+

+ UX Designer, Developer, Program Manager. Creating software for the construction world. Previously at Red Hat and AWS. Collector of nerdy things...forever. +

+

+ Adam Jolicoeur is a designer, developer, and program manager in Massachusetts. Starting as a help desk tech, he discovered a desire to create technology, rather than fixing it, which lead to a leap into the software engineering space. +

+

+ While working at a small startup, Adam discovered the world of user experience design and realized that his future was before him. With a background in fine arts and knowledge in the software development space (Backbone/Angular, anyone?), Adam took another step forward by becoming the first ux designer at a financial startup. Leading the next-generation of product design for card processors and financial institutions, Adam took that experience and used it to catapult into the world of publicly traded companies. +

+

+ With a move to Red Hat (later acquired by IBM), Adam accelerated his career path (and filled up many pages in his passport) by working with industry experts and the open source community on enterprise software experiences. After five years at Red Hat, Adam joined a small team at Amazon in AWS's Safety Engineering group to work on a new issue tracking and management product. While his time at Amazon came to abrupt end during the layoffs of 2023, the knowledge gained from such an environment only strengthened his desire to create in a collaborative and forward-looking space. +

+

+ Adam has continued his career at Component Assembly Systems as their Lead Program Manager and Head of UX. +

+

Education

+

+ I attended MCLA (Massachusetts College of Liberal Arts, formerly North Adams State) graduating with degrees in Fine and Performing Arts and Arts Management. While at MCLA, I was the President of the Lacrosse Club (now a recognized D3 sport) while also receiving a variety of accolades such as Alpha Chi, National Scholars Honor Society, and the Who’s Who in American Colleges and Universities. +

+ View Resume +
+ +
+ + + + + + + + + diff --git a/docs/about/index.html b/docs/about/index.html deleted file mode 100644 index 8d91f5c6..00000000 --- a/docs/about/index.html +++ /dev/null @@ -1,363 +0,0 @@ - - - - - - - - About | Adam Jolicoeur - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-

About

-

- Driven and passionate senior user experience designer with a background in software development. -

resume -
- - -
-
-
- -

Hello #

-

UX Designer, Developer, Program Manager. Creating software for the construction world. Previously at Red Hat and AWS. Collector of nerdy things…forever.

-
-

Adam Jolicoeur is a designer, developer, and program manager in Massachusetts. Starting as a help desk tech, he discovered a desire to create technology, rather than fixing it, which lead to a leap into the software engineering space.

-

While working at a small startup, Adam discovered the world of user experience design and realized that his future was before him. With a background in fine arts and knowledge in the software development space (Backbone/Angular, anyone?), Adam took another step forward by becoming the first ux designer at a financial startup. Leading the next-generation of product design for card processors and financial institutions, Adam took that experience and used it to catapult into the world of publicly traded companies.

-

With a move to Red Hat (later acquired by IBM), Adam accelerated his career path (and filled up many pages in his passport) by working with industry experts and the open source community on enterprise software experiences. After five years at Red Hat, Adam joined a small team at Amazon in AWS’s Safety Engineering group to work on a new issue tracking and management product. While his time at Amazon came to abrupt end during the layoffs of 2023, the knowledge gained from such an environment only strengthened his desire to create in a collaborative and forward-looking space.

-

Adam has continued his career at Component Assembly Systems as their Lead Program Manager and Head of UX.

-

Career #

-
    -
  • Lead Program Manager / Head of UX @ Component Assembly Systems
    2023-Present
  • -
  • Senior UX Designer @ Amazon (AWS)
    2021-2023
  • -
  • Senior UX Designer @ Red Hat
    2016-2021
  • -
  • UX Designer @ Saylent Technologies
    2014-2016
  • -
  • UI Developer @ Black Duck Software
    2013-2014
  • -
  • Contractor @ Switchback, Inc.
    2010-2021
  • -
  • Help Desk Analyst @ Conservation Services Group
    2008-2010
  • -
-

Education #

-

I attended MCLA (Massachusetts College of Liberal Arts, formerly North Adams State) graduating with degrees in Fine and Performing Arts and Arts Management. While at MCLA, I was the President of the Lacrosse Club (now a recognized D3 sport) while also receiving a variety of accolades such as Alpha Chi, National Scholars Honor Society, and the Who’s Who in American Colleges and Universities.

- -
- -
-
-
- - - - - - - - diff --git a/docs/about/resume/index.html b/docs/about/resume/index.html new file mode 100644 index 00000000..429471e6 --- /dev/null +++ b/docs/about/resume/index.html @@ -0,0 +1,206 @@ + + + + + + Adam J. Jolicoeur | Adam Jolicoeur + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+

Adam J. Jolicoeur

+

+ Lead Product Designer with 15+ years at AWS, Red Hat, and high-growth B2B companies +

+ + +
+

Adam J. Jolicoeur

+ contact@adamjolicoeur.com +
+
+

I design enterprise applications and code production-quality prototypes. With expertise in design systems and complex data-intensive interfaces, I've shaped products used by millions of developers and contributed to industry-leading open-source design systems.

+

Key Highlights

+

+

    +
  • Lead designer for Task-it at Amazon Web Services - reached 500 daily active users across AWS in 18 months
  • +
  • Core contributor to PatternFly design system at Red Hat 20,000+ GitHub stars, used across OpenShift.
  • +
  • Built comprehensive design systems for enterprise construction management and financial services platforms
  • +
  • Code production-quality prototypes using HTML/CSS/React that validate designs and accelerate engineering
  • +
+

+
+
+

Current Role

+

+ Lead Product Designer & Product Manager +
+ Component Assembly Systems | 2024 - Present +

+
+
+

Previous Experience

+

+ Senior UX Designer — Amazon Web Services (2021-2023) +

+

+ Senior Interaction Designer — Red Hat (2016-2021) +

+

+ UX Designer — Saylent Technologies (2014-2016) +

+
+
+ Download Resume (PDF) +
+ Last updated November 2024 +
+
+

Also available

+ LinkedIn + GitHub +
+ + + +
+ + + + + + + + + diff --git a/docs/alfred/workflows/index.html b/docs/alfred/workflows/index.html deleted file mode 100644 index b088835b..00000000 --- a/docs/alfred/workflows/index.html +++ /dev/null @@ -1,358 +0,0 @@ - - - - - - - - Alfred Workflows | Adam Jolicoeur - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-

Alfred Workflows

-

- A list of my favorite Alfred workflows -

- - -

Alfred Workflows

-

A list of my favorite Alfred Workflows, broken down by those that I have downloaded and those that I have created or modified.

-

Note: Requires the Alfred Powerpack to use.

-

Downloaded #

- -

Created / Modified #

- - -
- - - - - - - - diff --git a/docs/apps/collectsomemore/index.html b/docs/apps/collectsomemore/index.html deleted file mode 100644 index 5deb3ca8..00000000 --- a/docs/apps/collectsomemore/index.html +++ /dev/null @@ -1,345 +0,0 @@ - - - - - - - - Collect Some More | Adam Jolicoeur - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-

Collect Some More

-

- An app for cataloging your collections. -

- - -
-
-

Status #

-

My app is currently available through TestFlight while I get it to a releasable state. If you’d like to give it a try, complete a request through the GitHub Repo today!

-

Releases #

-

Releases are listed on the releases page.

-

Privacy Policy #

-

Read the privacy policy here.

- -
- -
-
-
- - - - - - - - diff --git a/docs/apps/index.html b/docs/apps/index.html deleted file mode 100644 index 715c2154..00000000 --- a/docs/apps/index.html +++ /dev/null @@ -1,352 +0,0 @@ - - - - - - - - Apps | Adam Jolicoeur - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-

Apps

-

- Various apps available from me. -

- - -
-
- - -
-
-
- - - - - - - - diff --git a/docs/apps/privacy/index.html b/docs/apps/privacy/index.html deleted file mode 100644 index c96b2fff..00000000 --- a/docs/apps/privacy/index.html +++ /dev/null @@ -1,225 +0,0 @@ - - - - - - - - Privacy Policy | Adam Jolicoeur - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-

Privacy Policy

-

Last updated: August 27, 2025

-

This Privacy Policy describes Our policies and procedures on the collection, use and disclosure of Your information when You use the Service and tells You about Your privacy rights and how the law protects You.

-

We use Your Personal data to provide and improve the Service. By using the Service, You agree to the collection and use of information in accordance with this Privacy Policy. This Privacy Policy has been created with the help of the Free Privacy Policy Generator.

-

Interpretation and Definitions

-

Interpretation

-

The words of which the initial letter is capitalized have meanings defined under the following conditions. The following definitions shall have the same meaning regardless of whether they appear in singular or in plural.

-

Definitions

-

For the purposes of this Privacy Policy:

- -

Collecting and Using Your Personal Data

-

Types of Data Collected

-

Personal Data

-

While using Our Service, We may ask You to provide Us with certain personally identifiable information that can be used to contact or identify You. Personally identifiable information may include, but is not limited to:

- -

Usage Data

-

Usage Data is collected automatically when using the Service.

-

Usage Data may include information such as Your Device's Internet Protocol address (e.g. IP address), browser type, browser version, the pages of our Service that You visit, the time and date of Your visit, the time spent on those pages, unique device identifiers and other diagnostic data.

-

When You access the Service by or through a mobile device, We may collect certain information automatically, including, but not limited to, the type of mobile device You use, Your mobile device unique ID, the IP address of Your mobile device, Your mobile operating system, the type of mobile Internet browser You use, unique device identifiers and other diagnostic data.

-

We may also collect information that Your browser sends whenever You visit our Service or when You access the Service by or through a mobile device.

-

Use of Your Personal Data

-

The Company may use Personal Data for the following purposes:

- -

We may share Your personal information in the following situations:

- -

Retention of Your Personal Data

-

The Company will retain Your Personal Data only for as long as is necessary for the purposes set out in this Privacy Policy. We will retain and use Your Personal Data to the extent necessary to comply with our legal obligations (for example, if we are required to retain your data to comply with applicable laws), resolve disputes, and enforce our legal agreements and policies.

-

The Company will also retain Usage Data for internal analysis purposes. Usage Data is generally retained for a shorter period of time, except when this data is used to strengthen the security or to improve the functionality of Our Service, or We are legally obligated to retain this data for longer time periods.

-

Transfer of Your Personal Data

-

Your information, including Personal Data, is processed at the Company's operating offices and in any other places where the parties involved in the processing are located. It means that this information may be transferred to — and maintained on — computers located outside of Your state, province, country or other governmental jurisdiction where the data protection laws may differ than those from Your jurisdiction.

-

Your consent to this Privacy Policy followed by Your submission of such information represents Your agreement to that transfer.

-

The Company will take all steps reasonably necessary to ensure that Your data is treated securely and in accordance with this Privacy Policy and no transfer of Your Personal Data will take place to an organization or a country unless there are adequate controls in place including the security of Your data and other personal information.

-

Delete Your Personal Data

-

You have the right to delete or request that We assist in deleting the Personal Data that We have collected about You.

-

Our Service may give You the ability to delete certain information about You from within the Service.

-

You may update, amend, or delete Your information at any time by signing in to Your Account, if you have one, and visiting the account settings section that allows you to manage Your personal information. You may also contact Us to request access to, correct, or delete any personal information that You have provided to Us.

-

Please note, however, that We may need to retain certain information when we have a legal obligation or lawful basis to do so.

-

Disclosure of Your Personal Data

-

Business Transactions

-

If the Company is involved in a merger, acquisition or asset sale, Your Personal Data may be transferred. We will provide notice before Your Personal Data is transferred and becomes subject to a different Privacy Policy.

-

Law enforcement

-

Under certain circumstances, the Company may be required to disclose Your Personal Data if required to do so by law or in response to valid requests by public authorities (e.g. a court or a government agency).

-

Other legal requirements

-

The Company may disclose Your Personal Data in the good faith belief that such action is necessary to:

- -

Security of Your Personal Data

-

The security of Your Personal Data is important to Us, but remember that no method of transmission over the Internet, or method of electronic storage is 100% secure. While We strive to use commercially acceptable means to protect Your Personal Data, We cannot guarantee its absolute security.

-

Children's Privacy

-

Our Service does not address anyone under the age of 13. We do not knowingly collect personally identifiable information from anyone under the age of 13. If You are a parent or guardian and You are aware that Your child has provided Us with Personal Data, please contact Us. If We become aware that We have collected Personal Data from anyone under the age of 13 without verification of parental consent, We take steps to remove that information from Our servers.

-

If We need to rely on consent as a legal basis for processing Your information and Your country requires consent from a parent, We may require Your parent's consent before We collect and use that information.

-

Links to Other Websites

-

Our Service may contain links to other websites that are not operated by Us. If You click on a third party link, You will be directed to that third party's site. We strongly advise You to review the Privacy Policy of every site You visit.

-

We have no control over and assume no responsibility for the content, privacy policies or practices of any third party sites or services.

-

Changes to this Privacy 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.

-

We will let You know via email and/or a prominent notice on Our Service, prior to the change becoming effective and update the "Last updated" date at the top of this Privacy Policy.

-

You are advised to review this Privacy Policy periodically for any changes. Changes to this Privacy Policy are effective when they are posted on this page.

-

Contact Us

-

If you have any questions about this Privacy Policy, You can contact us:

- -
- - - - - diff --git a/docs/apps/releases/index.html b/docs/apps/releases/index.html deleted file mode 100644 index aee25c7f..00000000 --- a/docs/apps/releases/index.html +++ /dev/null @@ -1,340 +0,0 @@ - - - - - - - - Application Releases | Adam Jolicoeur - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-

Application Releases

-

- A list of releases -

- - -
-
-

Releases #

- -
- -
-
-
- - - - - - - - diff --git a/docs/apps/support/index.html b/docs/apps/support/index.html deleted file mode 100644 index cfe9b1c6..00000000 --- a/docs/apps/support/index.html +++ /dev/null @@ -1,91 +0,0 @@ - - - - - - - - Support | Adam Jolicoeur - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

Collect Some More #

-

Have an issue? File a request in the project repo on GitHub: New Issue

-

Have an idea for an enhancement of feature? File a request on the project repo: Feature Request

-

Score Mini Golf #

- - - - - diff --git a/docs/archives/archives/index.html b/docs/archives/archives/index.html index db1c2f10..54bfcb85 100644 --- a/docs/archives/archives/index.html +++ b/docs/archives/archives/index.html @@ -1,19 +1,17 @@ - - - + + - - + Archived Pages | Adam Jolicoeur - - + + @@ -21,45 +19,19 @@ - - - - - - - - - - - + + - @@ -69,113 +41,40 @@ title="RSS Feed for Adam Jolicoeur" href="/feed/" /> - - - + - - - - - - - + + + + +
-
-

Archived Pages

-

- -

+
+

Archived Pages

+

+ - - + + + + diff --git a/docs/archives/town-selectman/index.html b/docs/archives/town-selectman/index.html index 3eeea1c9..39bd0228 100644 --- a/docs/archives/town-selectman/index.html +++ b/docs/archives/town-selectman/index.html @@ -1,10 +1,8 @@ - - - + + - - + Archived | Adam Jolicoeur - + @@ -21,38 +19,12 @@ - - - - - - - - - - - + + - - - - + - - - - - - - + + + + +
-
-

Archived

-

- Old page when I ran for a position on the Brookfield Select Board. -

+
+

Archived

+

Old page when I ran for a position on the Brookfield Select Board.

+ - - + + + + diff --git a/docs/assets/AdamJolicoeur-Resume.pdf b/docs/assets/AdamJolicoeur-Resume.pdf new file mode 100644 index 00000000..da849a86 Binary files /dev/null and b/docs/assets/AdamJolicoeur-Resume.pdf differ diff --git a/docs/assets/img/404_lost_tree-thumb.jpg b/docs/assets/img/404_lost_tree-thumb.jpg new file mode 100644 index 00000000..0653508e Binary files /dev/null and b/docs/assets/img/404_lost_tree-thumb.jpg differ diff --git a/docs/assets/img/404_lost_tree-thumb.webp b/docs/assets/img/404_lost_tree-thumb.webp new file mode 100644 index 00000000..ab5aff1a Binary files /dev/null and b/docs/assets/img/404_lost_tree-thumb.webp differ diff --git a/docs/assets/img/404_lost_tree.jpg b/docs/assets/img/404_lost_tree.jpg new file mode 100644 index 00000000..f925c35d Binary files /dev/null and b/docs/assets/img/404_lost_tree.jpg differ diff --git a/docs/assets/img/404_lost_tree.webp b/docs/assets/img/404_lost_tree.webp new file mode 100644 index 00000000..f2f5af9d Binary files /dev/null and b/docs/assets/img/404_lost_tree.webp differ diff --git a/docs/assets/img/CAS-Button group-thumb.jpg b/docs/assets/img/CAS-Button group-thumb.jpg new file mode 100644 index 00000000..aa8720c5 Binary files /dev/null and b/docs/assets/img/CAS-Button group-thumb.jpg differ diff --git a/docs/assets/img/CAS-Button group-thumb.webp b/docs/assets/img/CAS-Button group-thumb.webp new file mode 100644 index 00000000..f815bca9 Binary files /dev/null and b/docs/assets/img/CAS-Button group-thumb.webp differ diff --git a/docs/assets/img/CAS-Button group.jpg b/docs/assets/img/CAS-Button group.jpg new file mode 100644 index 00000000..531eac60 Binary files /dev/null and b/docs/assets/img/CAS-Button group.jpg differ diff --git a/docs/assets/img/CAS-Button group.webp b/docs/assets/img/CAS-Button group.webp new file mode 100644 index 00000000..0e171a1f Binary files /dev/null and b/docs/assets/img/CAS-Button group.webp differ diff --git a/docs/assets/img/CAS-Button-group-thumb.jpg b/docs/assets/img/CAS-Button-group-thumb.jpg new file mode 100644 index 00000000..aa8720c5 Binary files /dev/null and b/docs/assets/img/CAS-Button-group-thumb.jpg differ diff --git a/docs/assets/img/CAS-Button-group-thumb.webp b/docs/assets/img/CAS-Button-group-thumb.webp new file mode 100644 index 00000000..f815bca9 Binary files /dev/null and b/docs/assets/img/CAS-Button-group-thumb.webp differ diff --git a/docs/assets/img/CAS-Button-group.jpg b/docs/assets/img/CAS-Button-group.jpg new file mode 100644 index 00000000..531eac60 Binary files /dev/null and b/docs/assets/img/CAS-Button-group.jpg differ diff --git a/docs/assets/img/CAS-Button-group.webp b/docs/assets/img/CAS-Button-group.webp new file mode 100644 index 00000000..0e171a1f Binary files /dev/null and b/docs/assets/img/CAS-Button-group.webp differ diff --git a/docs/assets/img/CAS-ButtonExamples-thumb.jpg b/docs/assets/img/CAS-ButtonExamples-thumb.jpg new file mode 100644 index 00000000..df5ffb7e Binary files /dev/null and b/docs/assets/img/CAS-ButtonExamples-thumb.jpg differ diff --git a/docs/assets/img/CAS-ButtonExamples-thumb.webp b/docs/assets/img/CAS-ButtonExamples-thumb.webp new file mode 100644 index 00000000..84880cfe Binary files /dev/null and b/docs/assets/img/CAS-ButtonExamples-thumb.webp differ diff --git a/docs/assets/img/CAS-ButtonExamples.jpg b/docs/assets/img/CAS-ButtonExamples.jpg new file mode 100644 index 00000000..c8f27fa4 Binary files /dev/null and b/docs/assets/img/CAS-ButtonExamples.jpg differ diff --git a/docs/assets/img/CAS-ButtonExamples.webp b/docs/assets/img/CAS-ButtonExamples.webp new file mode 100644 index 00000000..2b3d3b84 Binary files /dev/null and b/docs/assets/img/CAS-ButtonExamples.webp differ diff --git a/docs/assets/img/CAS-Buttons - Defaults-thumb.jpg b/docs/assets/img/CAS-Buttons - Defaults-thumb.jpg new file mode 100644 index 00000000..3851a06c Binary files /dev/null and b/docs/assets/img/CAS-Buttons - Defaults-thumb.jpg differ diff --git a/docs/assets/img/CAS-Buttons - Defaults-thumb.webp b/docs/assets/img/CAS-Buttons - Defaults-thumb.webp new file mode 100644 index 00000000..09023ad3 Binary files /dev/null and b/docs/assets/img/CAS-Buttons - Defaults-thumb.webp differ diff --git a/docs/assets/img/CAS-Buttons - Defaults.jpg b/docs/assets/img/CAS-Buttons - Defaults.jpg new file mode 100644 index 00000000..7843be9f Binary files /dev/null and b/docs/assets/img/CAS-Buttons - Defaults.jpg differ diff --git a/docs/assets/img/CAS-Buttons - Defaults.webp b/docs/assets/img/CAS-Buttons - Defaults.webp new file mode 100644 index 00000000..6582be59 Binary files /dev/null and b/docs/assets/img/CAS-Buttons - Defaults.webp differ diff --git a/docs/assets/img/CAS-Buttons - Hover-thumb.jpg b/docs/assets/img/CAS-Buttons - Hover-thumb.jpg new file mode 100644 index 00000000..672f7235 Binary files /dev/null and b/docs/assets/img/CAS-Buttons - Hover-thumb.jpg differ diff --git a/docs/assets/img/CAS-Buttons - Hover-thumb.webp b/docs/assets/img/CAS-Buttons - Hover-thumb.webp new file mode 100644 index 00000000..9446e87f Binary files /dev/null and b/docs/assets/img/CAS-Buttons - Hover-thumb.webp differ diff --git a/docs/assets/img/CAS-Buttons - Hover.jpg b/docs/assets/img/CAS-Buttons - Hover.jpg new file mode 100644 index 00000000..b343202b Binary files /dev/null and b/docs/assets/img/CAS-Buttons - Hover.jpg differ diff --git a/docs/assets/img/CAS-Buttons - Hover.webp b/docs/assets/img/CAS-Buttons - Hover.webp new file mode 100644 index 00000000..9a7b9be5 Binary files /dev/null and b/docs/assets/img/CAS-Buttons - Hover.webp differ diff --git a/docs/assets/img/CAS-Buttons - Outlines-thumb.jpg b/docs/assets/img/CAS-Buttons - Outlines-thumb.jpg new file mode 100644 index 00000000..574d2ea9 Binary files /dev/null and b/docs/assets/img/CAS-Buttons - Outlines-thumb.jpg differ diff --git a/docs/assets/img/CAS-Buttons - Outlines-thumb.webp b/docs/assets/img/CAS-Buttons - Outlines-thumb.webp new file mode 100644 index 00000000..4ca43a1e Binary files /dev/null and b/docs/assets/img/CAS-Buttons - Outlines-thumb.webp differ diff --git a/docs/assets/img/CAS-Buttons - Outlines.jpg b/docs/assets/img/CAS-Buttons - Outlines.jpg new file mode 100644 index 00000000..569165e6 Binary files /dev/null and b/docs/assets/img/CAS-Buttons - Outlines.jpg differ diff --git a/docs/assets/img/CAS-Buttons - Outlines.webp b/docs/assets/img/CAS-Buttons - Outlines.webp new file mode 100644 index 00000000..4c714878 Binary files /dev/null and b/docs/assets/img/CAS-Buttons - Outlines.webp differ diff --git a/docs/assets/img/CAS-Buttons-Defaults-thumb.jpg b/docs/assets/img/CAS-Buttons-Defaults-thumb.jpg new file mode 100644 index 00000000..4beb6dc3 Binary files /dev/null and b/docs/assets/img/CAS-Buttons-Defaults-thumb.jpg differ diff --git a/docs/assets/img/CAS-Buttons-Defaults-thumb.webp b/docs/assets/img/CAS-Buttons-Defaults-thumb.webp new file mode 100644 index 00000000..a1a684f3 Binary files /dev/null and b/docs/assets/img/CAS-Buttons-Defaults-thumb.webp differ diff --git a/docs/assets/img/CAS-Buttons-Defaults.jpg b/docs/assets/img/CAS-Buttons-Defaults.jpg new file mode 100644 index 00000000..b6db9b7b Binary files /dev/null and b/docs/assets/img/CAS-Buttons-Defaults.jpg differ diff --git a/docs/assets/img/CAS-Buttons-Defaults.webp b/docs/assets/img/CAS-Buttons-Defaults.webp new file mode 100644 index 00000000..66d42ba8 Binary files /dev/null and b/docs/assets/img/CAS-Buttons-Defaults.webp differ diff --git a/docs/assets/img/CAS-Buttons-Hover-thumb.jpg b/docs/assets/img/CAS-Buttons-Hover-thumb.jpg new file mode 100644 index 00000000..672f7235 Binary files /dev/null and b/docs/assets/img/CAS-Buttons-Hover-thumb.jpg differ diff --git a/docs/assets/img/CAS-Buttons-Hover-thumb.webp b/docs/assets/img/CAS-Buttons-Hover-thumb.webp new file mode 100644 index 00000000..9446e87f Binary files /dev/null and b/docs/assets/img/CAS-Buttons-Hover-thumb.webp differ diff --git a/docs/assets/img/CAS-Buttons-Hover.jpg b/docs/assets/img/CAS-Buttons-Hover.jpg new file mode 100644 index 00000000..b343202b Binary files /dev/null and b/docs/assets/img/CAS-Buttons-Hover.jpg differ diff --git a/docs/assets/img/CAS-Buttons-Hover.webp b/docs/assets/img/CAS-Buttons-Hover.webp new file mode 100644 index 00000000..9a7b9be5 Binary files /dev/null and b/docs/assets/img/CAS-Buttons-Hover.webp differ diff --git a/docs/assets/img/CAS-Buttons-Outlines-thumb.jpg b/docs/assets/img/CAS-Buttons-Outlines-thumb.jpg new file mode 100644 index 00000000..574d2ea9 Binary files /dev/null and b/docs/assets/img/CAS-Buttons-Outlines-thumb.jpg differ diff --git a/docs/assets/img/CAS-Buttons-Outlines-thumb.webp b/docs/assets/img/CAS-Buttons-Outlines-thumb.webp new file mode 100644 index 00000000..4ca43a1e Binary files /dev/null and b/docs/assets/img/CAS-Buttons-Outlines-thumb.webp differ diff --git a/docs/assets/img/CAS-Buttons-Outlines.jpg b/docs/assets/img/CAS-Buttons-Outlines.jpg new file mode 100644 index 00000000..569165e6 Binary files /dev/null and b/docs/assets/img/CAS-Buttons-Outlines.jpg differ diff --git a/docs/assets/img/CAS-Buttons-Outlines.webp b/docs/assets/img/CAS-Buttons-Outlines.webp new file mode 100644 index 00000000..4c714878 Binary files /dev/null and b/docs/assets/img/CAS-Buttons-Outlines.webp differ diff --git a/docs/assets/img/CAS-Card Examples-thumb.jpg b/docs/assets/img/CAS-Card Examples-thumb.jpg new file mode 100644 index 00000000..358c8b40 Binary files /dev/null and b/docs/assets/img/CAS-Card Examples-thumb.jpg differ diff --git a/docs/assets/img/CAS-Card Examples-thumb.webp b/docs/assets/img/CAS-Card Examples-thumb.webp new file mode 100644 index 00000000..17480697 Binary files /dev/null and b/docs/assets/img/CAS-Card Examples-thumb.webp differ diff --git a/docs/assets/img/CAS-Card Examples.jpg b/docs/assets/img/CAS-Card Examples.jpg new file mode 100644 index 00000000..87b460d4 Binary files /dev/null and b/docs/assets/img/CAS-Card Examples.jpg differ diff --git a/docs/assets/img/CAS-Card Examples.webp b/docs/assets/img/CAS-Card Examples.webp new file mode 100644 index 00000000..bdbb67ed Binary files /dev/null and b/docs/assets/img/CAS-Card Examples.webp differ diff --git a/docs/assets/img/CAS-Card-Examples-thumb.jpg b/docs/assets/img/CAS-Card-Examples-thumb.jpg new file mode 100644 index 00000000..60dea646 Binary files /dev/null and b/docs/assets/img/CAS-Card-Examples-thumb.jpg differ diff --git a/docs/assets/img/CAS-Card-Examples-thumb.webp b/docs/assets/img/CAS-Card-Examples-thumb.webp new file mode 100644 index 00000000..26242a02 Binary files /dev/null and b/docs/assets/img/CAS-Card-Examples-thumb.webp differ diff --git a/docs/assets/img/CAS-Card-Examples.jpg b/docs/assets/img/CAS-Card-Examples.jpg new file mode 100644 index 00000000..68d22b70 Binary files /dev/null and b/docs/assets/img/CAS-Card-Examples.jpg differ diff --git a/docs/assets/img/CAS-Card-Examples.webp b/docs/assets/img/CAS-Card-Examples.webp new file mode 100644 index 00000000..38e5525c Binary files /dev/null and b/docs/assets/img/CAS-Card-Examples.webp differ diff --git a/docs/assets/img/CAS-Cards-thumb.jpg b/docs/assets/img/CAS-Cards-thumb.jpg new file mode 100644 index 00000000..e1f8a9f1 Binary files /dev/null and b/docs/assets/img/CAS-Cards-thumb.jpg differ diff --git a/docs/assets/img/CAS-Cards-thumb.webp b/docs/assets/img/CAS-Cards-thumb.webp new file mode 100644 index 00000000..0d7bb02a Binary files /dev/null and b/docs/assets/img/CAS-Cards-thumb.webp differ diff --git a/docs/assets/img/CAS-Cards.jpg b/docs/assets/img/CAS-Cards.jpg new file mode 100644 index 00000000..3e1449b2 Binary files /dev/null and b/docs/assets/img/CAS-Cards.jpg differ diff --git a/docs/assets/img/CAS-Cards.webp b/docs/assets/img/CAS-Cards.webp new file mode 100644 index 00000000..50455369 Binary files /dev/null and b/docs/assets/img/CAS-Cards.webp differ diff --git a/docs/assets/img/CAS-ColorPalette-thumb.jpg b/docs/assets/img/CAS-ColorPalette-thumb.jpg new file mode 100644 index 00000000..93851d7a Binary files /dev/null and b/docs/assets/img/CAS-ColorPalette-thumb.jpg differ diff --git a/docs/assets/img/CAS-ColorPalette-thumb.webp b/docs/assets/img/CAS-ColorPalette-thumb.webp new file mode 100644 index 00000000..4f340c5d Binary files /dev/null and b/docs/assets/img/CAS-ColorPalette-thumb.webp differ diff --git a/docs/assets/img/CAS-ColorPalette.jpg b/docs/assets/img/CAS-ColorPalette.jpg new file mode 100644 index 00000000..c9bb2f0e Binary files /dev/null and b/docs/assets/img/CAS-ColorPalette.jpg differ diff --git a/docs/assets/img/CAS-ColorPalette.webp b/docs/assets/img/CAS-ColorPalette.webp new file mode 100644 index 00000000..712a1ede Binary files /dev/null and b/docs/assets/img/CAS-ColorPalette.webp differ diff --git a/docs/assets/img/CAS-Dropdown Examples-thumb.jpg b/docs/assets/img/CAS-Dropdown Examples-thumb.jpg new file mode 100644 index 00000000..0c280c4d Binary files /dev/null and b/docs/assets/img/CAS-Dropdown Examples-thumb.jpg differ diff --git a/docs/assets/img/CAS-Dropdown Examples-thumb.webp b/docs/assets/img/CAS-Dropdown Examples-thumb.webp new file mode 100644 index 00000000..5971ae3c Binary files /dev/null and b/docs/assets/img/CAS-Dropdown Examples-thumb.webp differ diff --git a/docs/assets/img/CAS-Dropdown Examples.jpg b/docs/assets/img/CAS-Dropdown Examples.jpg new file mode 100644 index 00000000..8d00f951 Binary files /dev/null and b/docs/assets/img/CAS-Dropdown Examples.jpg differ diff --git a/docs/assets/img/CAS-Dropdown Examples.webp b/docs/assets/img/CAS-Dropdown Examples.webp new file mode 100644 index 00000000..b5ee8078 Binary files /dev/null and b/docs/assets/img/CAS-Dropdown Examples.webp differ diff --git a/docs/assets/img/CAS-Dropdown-Examples-thumb.jpg b/docs/assets/img/CAS-Dropdown-Examples-thumb.jpg new file mode 100644 index 00000000..d1ea57a1 Binary files /dev/null and b/docs/assets/img/CAS-Dropdown-Examples-thumb.jpg differ diff --git a/docs/assets/img/CAS-Dropdown-Examples-thumb.webp b/docs/assets/img/CAS-Dropdown-Examples-thumb.webp new file mode 100644 index 00000000..ffee1c49 Binary files /dev/null and b/docs/assets/img/CAS-Dropdown-Examples-thumb.webp differ diff --git a/docs/assets/img/CAS-Dropdown-Examples.jpg b/docs/assets/img/CAS-Dropdown-Examples.jpg new file mode 100644 index 00000000..97dc596f Binary files /dev/null and b/docs/assets/img/CAS-Dropdown-Examples.jpg differ diff --git a/docs/assets/img/CAS-Dropdown-Examples.webp b/docs/assets/img/CAS-Dropdown-Examples.webp new file mode 100644 index 00000000..77c9f8f7 Binary files /dev/null and b/docs/assets/img/CAS-Dropdown-Examples.webp differ diff --git a/docs/assets/img/CAS-DropdownExamples-thumb.jpg b/docs/assets/img/CAS-DropdownExamples-thumb.jpg new file mode 100644 index 00000000..c04d313a Binary files /dev/null and b/docs/assets/img/CAS-DropdownExamples-thumb.jpg differ diff --git a/docs/assets/img/CAS-DropdownExamples-thumb.webp b/docs/assets/img/CAS-DropdownExamples-thumb.webp new file mode 100644 index 00000000..6c64f40a Binary files /dev/null and b/docs/assets/img/CAS-DropdownExamples-thumb.webp differ diff --git a/docs/assets/img/CAS-DropdownExamples.jpg b/docs/assets/img/CAS-DropdownExamples.jpg new file mode 100644 index 00000000..a7cf207f Binary files /dev/null and b/docs/assets/img/CAS-DropdownExamples.jpg differ diff --git a/docs/assets/img/CAS-DropdownExamples.webp b/docs/assets/img/CAS-DropdownExamples.webp new file mode 100644 index 00000000..3fa4eb21 Binary files /dev/null and b/docs/assets/img/CAS-DropdownExamples.webp differ diff --git a/docs/assets/img/CAS-Foreground Dark-thumb.jpg b/docs/assets/img/CAS-Foreground Dark-thumb.jpg new file mode 100644 index 00000000..218433c9 Binary files /dev/null and b/docs/assets/img/CAS-Foreground Dark-thumb.jpg differ diff --git a/docs/assets/img/CAS-Foreground Dark-thumb.webp b/docs/assets/img/CAS-Foreground Dark-thumb.webp new file mode 100644 index 00000000..e42d9e9e Binary files /dev/null and b/docs/assets/img/CAS-Foreground Dark-thumb.webp differ diff --git a/docs/assets/img/CAS-Foreground Dark.jpg b/docs/assets/img/CAS-Foreground Dark.jpg new file mode 100644 index 00000000..1a03121f Binary files /dev/null and b/docs/assets/img/CAS-Foreground Dark.jpg differ diff --git a/docs/assets/img/CAS-Foreground Dark.webp b/docs/assets/img/CAS-Foreground Dark.webp new file mode 100644 index 00000000..500ca2cf Binary files /dev/null and b/docs/assets/img/CAS-Foreground Dark.webp differ diff --git a/docs/assets/img/CAS-Foreground Light-thumb.jpg b/docs/assets/img/CAS-Foreground Light-thumb.jpg new file mode 100644 index 00000000..99f83de5 Binary files /dev/null and b/docs/assets/img/CAS-Foreground Light-thumb.jpg differ diff --git a/docs/assets/img/CAS-Foreground Light-thumb.webp b/docs/assets/img/CAS-Foreground Light-thumb.webp new file mode 100644 index 00000000..f4c3957d Binary files /dev/null and b/docs/assets/img/CAS-Foreground Light-thumb.webp differ diff --git a/docs/assets/img/CAS-Foreground Light.jpg b/docs/assets/img/CAS-Foreground Light.jpg new file mode 100644 index 00000000..5ed53806 Binary files /dev/null and b/docs/assets/img/CAS-Foreground Light.jpg differ diff --git a/docs/assets/img/CAS-Foreground Light.webp b/docs/assets/img/CAS-Foreground Light.webp new file mode 100644 index 00000000..1387fa64 Binary files /dev/null and b/docs/assets/img/CAS-Foreground Light.webp differ diff --git a/docs/assets/img/CAS-Foreground-Dark-thumb.jpg b/docs/assets/img/CAS-Foreground-Dark-thumb.jpg new file mode 100644 index 00000000..218433c9 Binary files /dev/null and b/docs/assets/img/CAS-Foreground-Dark-thumb.jpg differ diff --git a/docs/assets/img/CAS-Foreground-Dark-thumb.webp b/docs/assets/img/CAS-Foreground-Dark-thumb.webp new file mode 100644 index 00000000..e42d9e9e Binary files /dev/null and b/docs/assets/img/CAS-Foreground-Dark-thumb.webp differ diff --git a/docs/assets/img/CAS-Foreground-Dark.jpg b/docs/assets/img/CAS-Foreground-Dark.jpg new file mode 100644 index 00000000..1a03121f Binary files /dev/null and b/docs/assets/img/CAS-Foreground-Dark.jpg differ diff --git a/docs/assets/img/CAS-Foreground-Dark.webp b/docs/assets/img/CAS-Foreground-Dark.webp new file mode 100644 index 00000000..500ca2cf Binary files /dev/null and b/docs/assets/img/CAS-Foreground-Dark.webp differ diff --git a/docs/assets/img/CAS-Foreground-Light-thumb.jpg b/docs/assets/img/CAS-Foreground-Light-thumb.jpg new file mode 100644 index 00000000..99f83de5 Binary files /dev/null and b/docs/assets/img/CAS-Foreground-Light-thumb.jpg differ diff --git a/docs/assets/img/CAS-Foreground-Light-thumb.webp b/docs/assets/img/CAS-Foreground-Light-thumb.webp new file mode 100644 index 00000000..f4c3957d Binary files /dev/null and b/docs/assets/img/CAS-Foreground-Light-thumb.webp differ diff --git a/docs/assets/img/CAS-Foreground-Light.jpg b/docs/assets/img/CAS-Foreground-Light.jpg new file mode 100644 index 00000000..5ed53806 Binary files /dev/null and b/docs/assets/img/CAS-Foreground-Light.jpg differ diff --git a/docs/assets/img/CAS-Foreground-Light.webp b/docs/assets/img/CAS-Foreground-Light.webp new file mode 100644 index 00000000..1387fa64 Binary files /dev/null and b/docs/assets/img/CAS-Foreground-Light.webp differ diff --git a/docs/assets/img/CAS-Icons-thumb.jpg b/docs/assets/img/CAS-Icons-thumb.jpg new file mode 100644 index 00000000..d958588c Binary files /dev/null and b/docs/assets/img/CAS-Icons-thumb.jpg differ diff --git a/docs/assets/img/CAS-Icons-thumb.webp b/docs/assets/img/CAS-Icons-thumb.webp new file mode 100644 index 00000000..c9bf3b6c Binary files /dev/null and b/docs/assets/img/CAS-Icons-thumb.webp differ diff --git a/docs/assets/img/CAS-Icons.jpg b/docs/assets/img/CAS-Icons.jpg new file mode 100644 index 00000000..204cbe8f Binary files /dev/null and b/docs/assets/img/CAS-Icons.jpg differ diff --git a/docs/assets/img/CAS-Icons.webp b/docs/assets/img/CAS-Icons.webp new file mode 100644 index 00000000..f4d0d4b6 Binary files /dev/null and b/docs/assets/img/CAS-Icons.webp differ diff --git a/docs/assets/img/CAS-SpacingSizing-thumb.jpg b/docs/assets/img/CAS-SpacingSizing-thumb.jpg new file mode 100644 index 00000000..c7967fda Binary files /dev/null and b/docs/assets/img/CAS-SpacingSizing-thumb.jpg differ diff --git a/docs/assets/img/CAS-SpacingSizing-thumb.webp b/docs/assets/img/CAS-SpacingSizing-thumb.webp new file mode 100644 index 00000000..9566322a Binary files /dev/null and b/docs/assets/img/CAS-SpacingSizing-thumb.webp differ diff --git a/docs/assets/img/CAS-SpacingSizing.jpg b/docs/assets/img/CAS-SpacingSizing.jpg new file mode 100644 index 00000000..e625fe74 Binary files /dev/null and b/docs/assets/img/CAS-SpacingSizing.jpg differ diff --git a/docs/assets/img/CAS-SpacingSizing.webp b/docs/assets/img/CAS-SpacingSizing.webp new file mode 100644 index 00000000..1ee821be Binary files /dev/null and b/docs/assets/img/CAS-SpacingSizing.webp differ diff --git a/docs/assets/img/CAS-Table Component-thumb.jpg b/docs/assets/img/CAS-Table Component-thumb.jpg new file mode 100644 index 00000000..d144eeb8 Binary files /dev/null and b/docs/assets/img/CAS-Table Component-thumb.jpg differ diff --git a/docs/assets/img/CAS-Table Component-thumb.webp b/docs/assets/img/CAS-Table Component-thumb.webp new file mode 100644 index 00000000..93b5ac78 Binary files /dev/null and b/docs/assets/img/CAS-Table Component-thumb.webp differ diff --git a/docs/assets/img/CAS-Table Component.jpg b/docs/assets/img/CAS-Table Component.jpg new file mode 100644 index 00000000..29cdf0f4 Binary files /dev/null and b/docs/assets/img/CAS-Table Component.jpg differ diff --git a/docs/assets/img/CAS-Table Component.webp b/docs/assets/img/CAS-Table Component.webp new file mode 100644 index 00000000..45a9913d Binary files /dev/null and b/docs/assets/img/CAS-Table Component.webp differ diff --git a/docs/assets/img/CAS-Table-Component-thumb.jpg b/docs/assets/img/CAS-Table-Component-thumb.jpg new file mode 100644 index 00000000..d144eeb8 Binary files /dev/null and b/docs/assets/img/CAS-Table-Component-thumb.jpg differ diff --git a/docs/assets/img/CAS-Table-Component-thumb.webp b/docs/assets/img/CAS-Table-Component-thumb.webp new file mode 100644 index 00000000..93b5ac78 Binary files /dev/null and b/docs/assets/img/CAS-Table-Component-thumb.webp differ diff --git a/docs/assets/img/CAS-Table-Component.jpg b/docs/assets/img/CAS-Table-Component.jpg new file mode 100644 index 00000000..29cdf0f4 Binary files /dev/null and b/docs/assets/img/CAS-Table-Component.jpg differ diff --git a/docs/assets/img/CAS-Table-Component.webp b/docs/assets/img/CAS-Table-Component.webp new file mode 100644 index 00000000..45a9913d Binary files /dev/null and b/docs/assets/img/CAS-Table-Component.webp differ diff --git a/docs/assets/img/CAS-Text Inputs-thumb.jpg b/docs/assets/img/CAS-Text Inputs-thumb.jpg new file mode 100644 index 00000000..d36a8102 Binary files /dev/null and b/docs/assets/img/CAS-Text Inputs-thumb.jpg differ diff --git a/docs/assets/img/CAS-Text Inputs-thumb.webp b/docs/assets/img/CAS-Text Inputs-thumb.webp new file mode 100644 index 00000000..0c696d61 Binary files /dev/null and b/docs/assets/img/CAS-Text Inputs-thumb.webp differ diff --git a/docs/assets/img/CAS-Text Inputs.jpg b/docs/assets/img/CAS-Text Inputs.jpg new file mode 100644 index 00000000..4bd2f66f Binary files /dev/null and b/docs/assets/img/CAS-Text Inputs.jpg differ diff --git a/docs/assets/img/CAS-Text Inputs.webp b/docs/assets/img/CAS-Text Inputs.webp new file mode 100644 index 00000000..1067cd86 Binary files /dev/null and b/docs/assets/img/CAS-Text Inputs.webp differ diff --git a/docs/assets/img/CAS-Text-Inputs-thumb.jpg b/docs/assets/img/CAS-Text-Inputs-thumb.jpg new file mode 100644 index 00000000..d36a8102 Binary files /dev/null and b/docs/assets/img/CAS-Text-Inputs-thumb.jpg differ diff --git a/docs/assets/img/CAS-Text-Inputs-thumb.webp b/docs/assets/img/CAS-Text-Inputs-thumb.webp new file mode 100644 index 00000000..0c696d61 Binary files /dev/null and b/docs/assets/img/CAS-Text-Inputs-thumb.webp differ diff --git a/docs/assets/img/CAS-Text-Inputs.jpg b/docs/assets/img/CAS-Text-Inputs.jpg new file mode 100644 index 00000000..4bd2f66f Binary files /dev/null and b/docs/assets/img/CAS-Text-Inputs.jpg differ diff --git a/docs/assets/img/CAS-Text-Inputs.webp b/docs/assets/img/CAS-Text-Inputs.webp new file mode 100644 index 00000000..1067cd86 Binary files /dev/null and b/docs/assets/img/CAS-Text-Inputs.webp differ diff --git a/docs/assets/img/CAS-TextInputs-thumb.jpg b/docs/assets/img/CAS-TextInputs-thumb.jpg new file mode 100644 index 00000000..85a3e186 Binary files /dev/null and b/docs/assets/img/CAS-TextInputs-thumb.jpg differ diff --git a/docs/assets/img/CAS-TextInputs-thumb.webp b/docs/assets/img/CAS-TextInputs-thumb.webp new file mode 100644 index 00000000..d8250f8c Binary files /dev/null and b/docs/assets/img/CAS-TextInputs-thumb.webp differ diff --git a/docs/assets/img/CAS-TextInputs.jpg b/docs/assets/img/CAS-TextInputs.jpg new file mode 100644 index 00000000..261fde5a Binary files /dev/null and b/docs/assets/img/CAS-TextInputs.jpg differ diff --git a/docs/assets/img/CAS-TextInputs.webp b/docs/assets/img/CAS-TextInputs.webp new file mode 100644 index 00000000..762a632d Binary files /dev/null and b/docs/assets/img/CAS-TextInputs.webp differ diff --git a/docs/assets/img/CAS-Typography - Body-thumb.jpg b/docs/assets/img/CAS-Typography - Body-thumb.jpg new file mode 100644 index 00000000..686e4dcb Binary files /dev/null and b/docs/assets/img/CAS-Typography - Body-thumb.jpg differ diff --git a/docs/assets/img/CAS-Typography - Body-thumb.webp b/docs/assets/img/CAS-Typography - Body-thumb.webp new file mode 100644 index 00000000..aa269ea5 Binary files /dev/null and b/docs/assets/img/CAS-Typography - Body-thumb.webp differ diff --git a/docs/assets/img/CAS-Typography - Body.jpg b/docs/assets/img/CAS-Typography - Body.jpg new file mode 100644 index 00000000..db30fdc6 Binary files /dev/null and b/docs/assets/img/CAS-Typography - Body.jpg differ diff --git a/docs/assets/img/CAS-Typography - Body.webp b/docs/assets/img/CAS-Typography - Body.webp new file mode 100644 index 00000000..b80f1210 Binary files /dev/null and b/docs/assets/img/CAS-Typography - Body.webp differ diff --git a/docs/assets/img/CAS-Typography - Headings-thumb.jpg b/docs/assets/img/CAS-Typography - Headings-thumb.jpg new file mode 100644 index 00000000..a78f45b6 Binary files /dev/null and b/docs/assets/img/CAS-Typography - Headings-thumb.jpg differ diff --git a/docs/assets/img/CAS-Typography - Headings-thumb.webp b/docs/assets/img/CAS-Typography - Headings-thumb.webp new file mode 100644 index 00000000..2e4c83ab Binary files /dev/null and b/docs/assets/img/CAS-Typography - Headings-thumb.webp differ diff --git a/docs/assets/img/CAS-Typography - Headings.jpg b/docs/assets/img/CAS-Typography - Headings.jpg new file mode 100644 index 00000000..958a334f Binary files /dev/null and b/docs/assets/img/CAS-Typography - Headings.jpg differ diff --git a/docs/assets/img/CAS-Typography - Headings.webp b/docs/assets/img/CAS-Typography - Headings.webp new file mode 100644 index 00000000..2afa23bb Binary files /dev/null and b/docs/assets/img/CAS-Typography - Headings.webp differ diff --git a/docs/assets/img/CAS-Typography-Body-thumb.jpg b/docs/assets/img/CAS-Typography-Body-thumb.jpg new file mode 100644 index 00000000..6cfd5115 Binary files /dev/null and b/docs/assets/img/CAS-Typography-Body-thumb.jpg differ diff --git a/docs/assets/img/CAS-Typography-Body-thumb.webp b/docs/assets/img/CAS-Typography-Body-thumb.webp new file mode 100644 index 00000000..57b7264c Binary files /dev/null and b/docs/assets/img/CAS-Typography-Body-thumb.webp differ diff --git a/docs/assets/img/CAS-Typography-Body.jpg b/docs/assets/img/CAS-Typography-Body.jpg new file mode 100644 index 00000000..92b085b8 Binary files /dev/null and b/docs/assets/img/CAS-Typography-Body.jpg differ diff --git a/docs/assets/img/CAS-Typography-Body.webp b/docs/assets/img/CAS-Typography-Body.webp new file mode 100644 index 00000000..eeb39e72 Binary files /dev/null and b/docs/assets/img/CAS-Typography-Body.webp differ diff --git a/docs/assets/img/CAS-Typography-Headings-thumb.jpg b/docs/assets/img/CAS-Typography-Headings-thumb.jpg new file mode 100644 index 00000000..cca4dee1 Binary files /dev/null and b/docs/assets/img/CAS-Typography-Headings-thumb.jpg differ diff --git a/docs/assets/img/CAS-Typography-Headings-thumb.webp b/docs/assets/img/CAS-Typography-Headings-thumb.webp new file mode 100644 index 00000000..02b27fb5 Binary files /dev/null and b/docs/assets/img/CAS-Typography-Headings-thumb.webp differ diff --git a/docs/assets/img/CAS-Typography-Headings.jpg b/docs/assets/img/CAS-Typography-Headings.jpg new file mode 100644 index 00000000..d70e3f6c Binary files /dev/null and b/docs/assets/img/CAS-Typography-Headings.jpg differ diff --git a/docs/assets/img/CAS-Typography-Headings.webp b/docs/assets/img/CAS-Typography-Headings.webp new file mode 100644 index 00000000..d6680a91 Binary files /dev/null and b/docs/assets/img/CAS-Typography-Headings.webp differ diff --git a/docs/assets/img/CAS-Typography-thumb.jpg b/docs/assets/img/CAS-Typography-thumb.jpg new file mode 100644 index 00000000..930a6bce Binary files /dev/null and b/docs/assets/img/CAS-Typography-thumb.jpg differ diff --git a/docs/assets/img/CAS-Typography-thumb.webp b/docs/assets/img/CAS-Typography-thumb.webp new file mode 100644 index 00000000..c5417de0 Binary files /dev/null and b/docs/assets/img/CAS-Typography-thumb.webp differ diff --git a/docs/assets/img/CAS-Typography.jpg b/docs/assets/img/CAS-Typography.jpg new file mode 100644 index 00000000..0770715d Binary files /dev/null and b/docs/assets/img/CAS-Typography.jpg differ diff --git a/docs/assets/img/CAS-Typography.webp b/docs/assets/img/CAS-Typography.webp new file mode 100644 index 00000000..d0124119 Binary files /dev/null and b/docs/assets/img/CAS-Typography.webp differ diff --git a/docs/assets/img/DarkColors-thumb.jpg b/docs/assets/img/DarkColors-thumb.jpg new file mode 100644 index 00000000..219c47a3 Binary files /dev/null and b/docs/assets/img/DarkColors-thumb.jpg differ diff --git a/docs/assets/img/DarkColors-thumb.webp b/docs/assets/img/DarkColors-thumb.webp new file mode 100644 index 00000000..dc07fc12 Binary files /dev/null and b/docs/assets/img/DarkColors-thumb.webp differ diff --git a/docs/assets/img/DarkColors.jpg b/docs/assets/img/DarkColors.jpg new file mode 100644 index 00000000..2cf08ffa Binary files /dev/null and b/docs/assets/img/DarkColors.jpg differ diff --git a/docs/assets/img/DarkColors.webp b/docs/assets/img/DarkColors.webp new file mode 100644 index 00000000..1a28a7a7 Binary files /dev/null and b/docs/assets/img/DarkColors.webp differ diff --git a/docs/assets/img/LightColors-thumb.jpg b/docs/assets/img/LightColors-thumb.jpg new file mode 100644 index 00000000..224c5afc Binary files /dev/null and b/docs/assets/img/LightColors-thumb.jpg differ diff --git a/docs/assets/img/LightColors-thumb.webp b/docs/assets/img/LightColors-thumb.webp new file mode 100644 index 00000000..a02a292e Binary files /dev/null and b/docs/assets/img/LightColors-thumb.webp differ diff --git a/docs/assets/img/LightColors.jpg b/docs/assets/img/LightColors.jpg new file mode 100644 index 00000000..7bad403e Binary files /dev/null and b/docs/assets/img/LightColors.jpg differ diff --git a/docs/assets/img/LightColors.webp b/docs/assets/img/LightColors.webp new file mode 100644 index 00000000..106e7a8e Binary files /dev/null and b/docs/assets/img/LightColors.webp differ diff --git a/docs/assets/img/Storybook-GettingStarted-thumb.jpg b/docs/assets/img/Storybook-GettingStarted-thumb.jpg new file mode 100644 index 00000000..7eec2e23 Binary files /dev/null and b/docs/assets/img/Storybook-GettingStarted-thumb.jpg differ diff --git a/docs/assets/img/Storybook-GettingStarted-thumb.webp b/docs/assets/img/Storybook-GettingStarted-thumb.webp new file mode 100644 index 00000000..d3d123bf Binary files /dev/null and b/docs/assets/img/Storybook-GettingStarted-thumb.webp differ diff --git a/docs/assets/img/Storybook-GettingStarted.jpg b/docs/assets/img/Storybook-GettingStarted.jpg new file mode 100644 index 00000000..bc9baa63 Binary files /dev/null and b/docs/assets/img/Storybook-GettingStarted.jpg differ diff --git a/docs/assets/img/Storybook-GettingStarted.webp b/docs/assets/img/Storybook-GettingStarted.webp new file mode 100644 index 00000000..0c496b91 Binary files /dev/null and b/docs/assets/img/Storybook-GettingStarted.webp differ diff --git a/docs/connect/index.html b/docs/connect/index.html deleted file mode 100644 index 8a9195e3..00000000 --- a/docs/connect/index.html +++ /dev/null @@ -1,355 +0,0 @@ - - - - - - - - Connect | Adam Jolicoeur - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-

Connect

-

- -

- - -
-
-
- - Banner image from LinkedIn profile - Follow on LinkedIn - - - GitHub statistics widget - Say Hello on GitHub - - -

Find me on Pixelfed

- Follow me on Pixelfed -
-
-
-
- -
- - - - - - - - diff --git a/docs/contact/index.html b/docs/contact/index.html deleted file mode 100644 index b56a27b2..00000000 --- a/docs/contact/index.html +++ /dev/null @@ -1,89 +0,0 @@ - - - - - - - - Contact | Adam Jolicoeur - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

Contact

- - - - - - diff --git a/docs/credits/index.html b/docs/credits/index.html index 52ea7b97..63d6e2a7 100644 --- a/docs/credits/index.html +++ b/docs/credits/index.html @@ -1,19 +1,17 @@ - - - + + - - + Credits | Adam Jolicoeur - - + + @@ -21,45 +19,19 @@ - - - - - - - - - - - + + - @@ -69,154 +41,68 @@ title="RSS Feed for Adam Jolicoeur" href="/feed/" /> - - - + - - - - - - - + + + + +
-
-

Credits

-

+ + +

+

Credits

+

-

+

- -
-
-

Giving credit where credit is due, this page is based off of the Credits page from Lea Verou.

+ +
+
+

Giving credit where credit is due, this page is based off of the Credits page from Lea Verou.

+

+

This site was built using Eleventy, hosted on Cloudflare Pages, with previews deployed with Cloudflare. Certificate courtesy of Cloudflare and Let’s Encrypt.

+

Libraries #

Fonts #

  :root {
-    --sl-font-sans: "Oswald", sans-serif;
-    --sl-font-mono: "Fira Mono", monospace;
-    --sl-font-serif: "Lato", sans-serif;
-    --bs-font-sans-serif: "Lato", serif;
+    --font-family-sans: 'Inter', system-ui, -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, 'Helvetica Neue', Arial, sans-serif;
+    --font-family-serif: 'Playfair Display', serif;
+    --font-family-mono: 'Fira Code', 'Courier New', Courier, monospace;
+    --font-family-heading: 'Pirata One', cursive;
   }
-
    -
  • Oswald -
      -
    • Headers, specified through general <H> tags and CSS classes
    • -
    -
  • -
  • Lato -
      -
    • Paragraphs, specified through general <p> tags and CSS classes
    • -
    -
  • -
  • Fira Mono -
      -
    • Code blocks, specified through general <code> tags and CSS classes
    • -
    -
  • -

Icons #

A custom icon component (icon-component.js) is used to render icons as web components with Font Awesome as the preferred icon library.

-
  <fa-icon type="brands" name="github" size="md"></fa-icon>
-
+
  <fa-icon type="brands" name="github" size="md"></fa-icon>

Plugins #

-
- -
-
-
+ -
+ - - + + + + diff --git a/docs/css/print.css b/docs/css/print.css index d15dd624..c8f05ada 100644 --- a/docs/css/print.css +++ b/docs/css/print.css @@ -3,202 +3,192 @@ ** Copyright 2008-2024 Adam J. Jolicoeur ** https://www.adamjolicoeur.com **/ -body { - font: 12pt "Times New Roman", Times, serif; - line-height: 1.3; - background: #fff !important; - color: #000; -} - -header, -footer, -aside, -nav, -form, -iframe, -.menu, -.hero, -.adslot { - display: none; -} - -#navigation, -#footer { - display: none !important; -} - -main, -content { - display: block !important; - max-width: 8.5in !important; - width: 100%; - margin: 0; - float: none; -} - -.row { - display: block !important; -} - -.col-md-6 { - width: 100% !important; -} - -.mt-4, .mt-3, .mt-2 { - margin-top: 2pt !important; -} - -.mb-4, .mb-3, .mb-2 { - margin-bottom: 2pt !important; -} - -.my-4, .my-3, .my-2 { - margin-top: 0 !important; - margin-bottom: 0 !important; -} - -.py-4, .py-3, .py-2 { - padding-top: 0 !important; - padding-bottom: 0 !important; -} - -.pb-4, .pb-3, .pb-2 { - padding-bottom: 2pt !important; -} - -* { - background-image: none !important; -} - -img, -svg { - display: none !important; -} - -table, -img, -svg { - break-inside: avoid; -} - -.text-bg-light { - background-color: transparent !important; -} - -.row-badges { - display: none !important; -} - -.hide-on-print { - display: none !important; -} - -.print { - display: block !important; -} - -h1, -.h1 { - font-size: 22pt; - break-before: always; -} - -h2, -.h2 { - font-size: 19pt; - margin-top: 16px; - margin-bottom: 8px; -} - -h3, -.h3 { - font-size: 17pt; - margin-top: 16px; - margin-bottom: 8px; -} - -h4, -.h4 { - font-size: 14pt; - margin-top: 16px; - margin-bottom: 8px; -} - -h5, -.h5 { - font-size: 12pt; - margin-top: 16px; - margin-bottom: 8px; -} - -p, -.paragraph { - font-size: 12pt; - margin-bottom: 8px; -} - -/* Defining all page breaks */ -a { - page-break-inside: avoid; -} - -blockquote { - page-break-inside: avoid; -} - -h1, -h2, -h3, -h4, -h5, -h6 { - page-break-after: avoid; - page-break-inside: avoid; -} - -img { - page-break-inside: avoid; - page-break-after: avoid; -} - -table, -pre { - page-break-inside: avoid; -} - -ul, -ol, -dl { - page-break-before: avoid; -} - -/* Displaying link color and link behavior */ -a:link, -a:visited, -a { - background: transparent; - color: #520; - font-weight: bold; - text-decoration: underline; - text-align: left; -} - -a { - page-break-inside: avoid; -} - -a[href^=http]:after { - content: " < " attr(href) "> "; -} - -a:after > img { - content: ""; -} - -article a[href^="#"]:after { - content: ""; -} - -a:not(:local-link):after { - content: " < " attr(href) "> "; +@media print { + body { + font: 12pt "Times New Roman", Times, serif; + line-height: 1.3; + background: #fff !important; + color: #000; + } + header, + #header, + footer, + #footer, + aside, + nav, + form, + iframe, + .menu, + .hero, + .adslot { + display: none; + } + #navigation, + #footer { + display: none !important; + } + main, + content { + display: block !important; + max-width: 8.5in !important; + width: 100%; + margin: 0; + float: none; + } + section, + .section-hero { + padding: 0 !important; + margin: 0 !important; + margin-top: 16px !important; + } + .row { + display: block !important; + } + .col-md-6 { + width: 100% !important; + } + .mt-4, .mt-3, .mt-2 { + margin-top: 2pt !important; + } + .mb-4, .mb-3, .mb-2 { + margin-bottom: 2pt !important; + } + .my-4, .my-3, .my-2 { + margin-top: 0 !important; + margin-bottom: 0 !important; + } + .py-4, .py-3, .py-2 { + padding-top: 0 !important; + padding-bottom: 0 !important; + } + .pb-4, .pb-3, .pb-2 { + padding-bottom: 2pt !important; + } + * { + background-image: none !important; + } + img, + svg { + display: none !important; + } + table, + img, + svg { + break-inside: avoid; + } + .text-bg-light { + background-color: transparent !important; + } + .row-badges { + display: none !important; + } + .hide-on-print { + display: none !important; + } + .print { + display: block !important; + } + h1, + .h1, + .text-h1 { + font-size: 22pt; + break-before: always; + text-shadow: none; + font-family: "Times New Roman", Times, serif; + } + h2, + .h2, + .text-h2 { + font-size: 19pt; + margin-top: 16px; + margin-bottom: 8px; + font-family: "Times New Roman", Times, serif !important; + } + h2::after, + .h2::after, + .text-h2::after { + display: none; + } + h3, + .h3, + .text-h3 { + font-size: 17pt; + margin-top: 16px; + margin-bottom: 8px; + font-family: "Times New Roman", Times, serif !important; + } + h4, + .h4, + .text-h4 { + font-size: 14pt; + margin-top: 16px; + margin-bottom: 8px; + font-family: "Times New Roman", Times, serif !important; + } + h5, + .h5, + .text-h5 { + font-size: 12pt; + margin-top: 16px; + margin-bottom: 8px; + font-family: "Times New Roman", Times, serif !important; + } + p, + .paragraph { + font-size: 12pt; + margin-bottom: 8px; + font-family: "Times New Roman", Times, serif !important; + } + /* Defining all page breaks */ + blockquote { + page-break-inside: avoid; + } + h1, + h2, + h3, + h4, + h5, + h6 { + page-break-after: avoid; + page-break-inside: avoid; + } + img { + page-break-inside: avoid; + page-break-after: avoid; + } + table, + pre { + page-break-inside: avoid; + } + ul, + ol, + dl { + page-break-before: avoid; + } + /* Displaying link color and link behavior */ + a { + page-break-inside: avoid; + } + a, + a:link, + a:visited { + background: transparent; + color: #520; + font-weight: bold; + text-decoration: underline; + text-align: left; + } + .badge { + border-color: #000 !important; + color: #000 !important; + background: transparent !important; + } + .card { + background: transparent !important; + border-color: transparent !important; + padding: 0 !important; + box-shadow: none !important; + transition: none !important; + transform: none !important; + } } diff --git a/docs/css/prism.css b/docs/css/prism.css index 2ad7935f..7e563775 100644 --- a/docs/css/prism.css +++ b/docs/css/prism.css @@ -12,16 +12,11 @@ code[class*=language-], pre[class*=language-] { word-break: normal; word-wrap: normal; line-height: 1.5; - -moz-tab-size: 4; - -o-tab-size: 4; tab-size: 4; - -webkit-hyphens: none; - -moz-hyphens: none; - -ms-hyphens: none; hyphens: none; } -code[class*=language-] ::-moz-selection, code[class*=language-]::-moz-selection, pre[class*=language-] ::-moz-selection, pre[class*=language-]::-moz-selection { +code[class*=language-] ::selection, code[class*=language-]::selection, pre[class*=language-] ::selection, pre[class*=language-]::selection { text-shadow: none; background: #b3d4fc; } @@ -138,9 +133,7 @@ div.code-toolbar > .toolbar > .toolbar-item > button { line-height: normal; overflow: visible; padding: 0; - -webkit-user-select: none; - -moz-user-select: none; - -ms-user-select: none; + user-select: none; } div.code-toolbar > .toolbar > .toolbar-item > a, div.code-toolbar > .toolbar > .toolbar-item > button, div.code-toolbar > .toolbar > .toolbar-item > span { diff --git a/docs/css/style.css b/docs/css/style.css index 51eccecf..7f7e3459 100644 --- a/docs/css/style.css +++ b/docs/css/style.css @@ -1,4093 +1,186 @@ @charset "UTF-8"; -/* stylelint-disable */ -/*! - * Bootstrap Grid v5.3.8 (https://getbootstrap.com/) - * Copyright 2011-2025 The Bootstrap Authors - * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE) - */ -.container, -.container-fluid, -.container-xxl, -.container-xl, -.container-lg, -.container-md, -.container-sm { - --bs-gutter-x: 1.5rem; - --bs-gutter-y: 0; - width: 100%; - padding-right: calc(var(--bs-gutter-x) * 0.5); - padding-left: calc(var(--bs-gutter-x) * 0.5); - margin-right: auto; - margin-left: auto; -} - -@media (min-width: 576px) { - .container-sm, .container { - max-width: 540px; - } -} -@media (min-width: 768px) { - .container-md, .container-sm, .container { - max-width: 720px; - } -} -@media (min-width: 992px) { - .container-lg, .container-md, .container-sm, .container { - max-width: 960px; - } -} -@media (min-width: 1200px) { - .container-xl, .container-lg, .container-md, .container-sm, .container { - max-width: 1140px; - } -} -@media (min-width: 1400px) { - .container-xxl, .container-xl, .container-lg, .container-md, .container-sm, .container { - max-width: 1320px; - } -} -:root { - --bs-breakpoint-xs: 0; - --bs-breakpoint-sm: 576px; - --bs-breakpoint-md: 768px; - --bs-breakpoint-lg: 992px; - --bs-breakpoint-xl: 1200px; - --bs-breakpoint-xxl: 1400px; -} - -.row { - --bs-gutter-x: 1.5rem; - --bs-gutter-y: 0; - display: flex; - flex-wrap: wrap; - margin-top: calc(-1 * var(--bs-gutter-y)); - margin-right: calc(-0.5 * var(--bs-gutter-x)); - margin-left: calc(-0.5 * var(--bs-gutter-x)); -} -.row > * { - box-sizing: border-box; - flex-shrink: 0; - width: 100%; - max-width: 100%; - padding-right: calc(var(--bs-gutter-x) * 0.5); - padding-left: calc(var(--bs-gutter-x) * 0.5); - margin-top: var(--bs-gutter-y); -} - -.col { - flex: 1 0 0; -} - -.row-cols-auto > * { - flex: 0 0 auto; - width: auto; -} - -.row-cols-1 > * { - flex: 0 0 auto; - width: 100%; -} - -.row-cols-2 > * { - flex: 0 0 auto; - width: 50%; -} - -.row-cols-3 > * { - flex: 0 0 auto; - width: 33.33333333%; -} - -.row-cols-4 > * { - flex: 0 0 auto; - width: 25%; -} - -.row-cols-5 > * { - flex: 0 0 auto; - width: 20%; -} - -.row-cols-6 > * { - flex: 0 0 auto; - width: 16.66666667%; -} - -.col-auto { - flex: 0 0 auto; - width: auto; -} - -.col-1 { - flex: 0 0 auto; - width: 8.33333333%; -} - -.col-2 { - flex: 0 0 auto; - width: 16.66666667%; -} - -.col-3 { - flex: 0 0 auto; - width: 25%; -} - -.col-4 { - flex: 0 0 auto; - width: 33.33333333%; -} - -.col-5 { - flex: 0 0 auto; - width: 41.66666667%; -} - -.col-6 { - flex: 0 0 auto; - width: 50%; -} - -.col-7 { - flex: 0 0 auto; - width: 58.33333333%; -} - -.col-8 { - flex: 0 0 auto; - width: 66.66666667%; -} - -.col-9 { - flex: 0 0 auto; - width: 75%; -} - -.col-10 { - flex: 0 0 auto; - width: 83.33333333%; -} - -.col-11 { - flex: 0 0 auto; - width: 91.66666667%; -} - -.col-12 { - flex: 0 0 auto; - width: 100%; -} - -.offset-1 { - margin-left: 8.33333333%; -} - -.offset-2 { - margin-left: 16.66666667%; -} - -.offset-3 { - margin-left: 25%; -} - -.offset-4 { - margin-left: 33.33333333%; -} - -.offset-5 { - margin-left: 41.66666667%; -} - -.offset-6 { - margin-left: 50%; -} - -.offset-7 { - margin-left: 58.33333333%; -} - -.offset-8 { - margin-left: 66.66666667%; -} - -.offset-9 { - margin-left: 75%; -} - -.offset-10 { - margin-left: 83.33333333%; -} - -.offset-11 { - margin-left: 91.66666667%; -} - -.g-0, -.gx-0 { - --bs-gutter-x: 0; -} - -.g-0, -.gy-0 { - --bs-gutter-y: 0; -} - -.g-1, -.gx-1 { - --bs-gutter-x: 0.25rem; -} - -.g-1, -.gy-1 { - --bs-gutter-y: 0.25rem; -} - -.g-2, -.gx-2 { - --bs-gutter-x: 0.5rem; -} - -.g-2, -.gy-2 { - --bs-gutter-y: 0.5rem; -} - -.g-3, -.gx-3 { - --bs-gutter-x: 1rem; -} - -.g-3, -.gy-3 { - --bs-gutter-y: 1rem; -} - -.g-4, -.gx-4 { - --bs-gutter-x: 1.5rem; -} - -.g-4, -.gy-4 { - --bs-gutter-y: 1.5rem; -} - -.g-5, -.gx-5 { - --bs-gutter-x: 3rem; -} - -.g-5, -.gy-5 { - --bs-gutter-y: 3rem; -} - -@media (min-width: 576px) { - .col-sm { - flex: 1 0 0; - } - .row-cols-sm-auto > * { - flex: 0 0 auto; - width: auto; - } - .row-cols-sm-1 > * { - flex: 0 0 auto; - width: 100%; - } - .row-cols-sm-2 > * { - flex: 0 0 auto; - width: 50%; - } - .row-cols-sm-3 > * { - flex: 0 0 auto; - width: 33.33333333%; - } - .row-cols-sm-4 > * { - flex: 0 0 auto; - width: 25%; - } - .row-cols-sm-5 > * { - flex: 0 0 auto; - width: 20%; - } - .row-cols-sm-6 > * { - flex: 0 0 auto; - width: 16.66666667%; - } - .col-sm-auto { - flex: 0 0 auto; - width: auto; - } - .col-sm-1 { - flex: 0 0 auto; - width: 8.33333333%; - } - .col-sm-2 { - flex: 0 0 auto; - width: 16.66666667%; - } - .col-sm-3 { - flex: 0 0 auto; - width: 25%; - } - .col-sm-4 { - flex: 0 0 auto; - width: 33.33333333%; - } - .col-sm-5 { - flex: 0 0 auto; - width: 41.66666667%; - } - .col-sm-6 { - flex: 0 0 auto; - width: 50%; - } - .col-sm-7 { - flex: 0 0 auto; - width: 58.33333333%; - } - .col-sm-8 { - flex: 0 0 auto; - width: 66.66666667%; - } - .col-sm-9 { - flex: 0 0 auto; - width: 75%; - } - .col-sm-10 { - flex: 0 0 auto; - width: 83.33333333%; - } - .col-sm-11 { - flex: 0 0 auto; - width: 91.66666667%; - } - .col-sm-12 { - flex: 0 0 auto; - width: 100%; - } - .offset-sm-0 { - margin-left: 0; - } - .offset-sm-1 { - margin-left: 8.33333333%; - } - .offset-sm-2 { - margin-left: 16.66666667%; - } - .offset-sm-3 { - margin-left: 25%; - } - .offset-sm-4 { - margin-left: 33.33333333%; - } - .offset-sm-5 { - margin-left: 41.66666667%; - } - .offset-sm-6 { - margin-left: 50%; - } - .offset-sm-7 { - margin-left: 58.33333333%; - } - .offset-sm-8 { - margin-left: 66.66666667%; - } - .offset-sm-9 { - margin-left: 75%; - } - .offset-sm-10 { - margin-left: 83.33333333%; - } - .offset-sm-11 { - margin-left: 91.66666667%; - } - .g-sm-0, - .gx-sm-0 { - --bs-gutter-x: 0; - } - .g-sm-0, - .gy-sm-0 { - --bs-gutter-y: 0; - } - .g-sm-1, - .gx-sm-1 { - --bs-gutter-x: 0.25rem; - } - .g-sm-1, - .gy-sm-1 { - --bs-gutter-y: 0.25rem; - } - .g-sm-2, - .gx-sm-2 { - --bs-gutter-x: 0.5rem; - } - .g-sm-2, - .gy-sm-2 { - --bs-gutter-y: 0.5rem; - } - .g-sm-3, - .gx-sm-3 { - --bs-gutter-x: 1rem; - } - .g-sm-3, - .gy-sm-3 { - --bs-gutter-y: 1rem; - } - .g-sm-4, - .gx-sm-4 { - --bs-gutter-x: 1.5rem; - } - .g-sm-4, - .gy-sm-4 { - --bs-gutter-y: 1.5rem; - } - .g-sm-5, - .gx-sm-5 { - --bs-gutter-x: 3rem; - } - .g-sm-5, - .gy-sm-5 { - --bs-gutter-y: 3rem; - } -} -@media (min-width: 768px) { - .col-md { - flex: 1 0 0; - } - .row-cols-md-auto > * { - flex: 0 0 auto; - width: auto; - } - .row-cols-md-1 > * { - flex: 0 0 auto; - width: 100%; - } - .row-cols-md-2 > * { - flex: 0 0 auto; - width: 50%; - } - .row-cols-md-3 > * { - flex: 0 0 auto; - width: 33.33333333%; - } - .row-cols-md-4 > * { - flex: 0 0 auto; - width: 25%; - } - .row-cols-md-5 > * { - flex: 0 0 auto; - width: 20%; - } - .row-cols-md-6 > * { - flex: 0 0 auto; - width: 16.66666667%; - } - .col-md-auto { - flex: 0 0 auto; - width: auto; - } - .col-md-1 { - flex: 0 0 auto; - width: 8.33333333%; - } - .col-md-2 { - flex: 0 0 auto; - width: 16.66666667%; - } - .col-md-3 { - flex: 0 0 auto; - width: 25%; - } - .col-md-4 { - flex: 0 0 auto; - width: 33.33333333%; - } - .col-md-5 { - flex: 0 0 auto; - width: 41.66666667%; - } - .col-md-6 { - flex: 0 0 auto; - width: 50%; - } - .col-md-7 { - flex: 0 0 auto; - width: 58.33333333%; - } - .col-md-8 { - flex: 0 0 auto; - width: 66.66666667%; - } - .col-md-9 { - flex: 0 0 auto; - width: 75%; - } - .col-md-10 { - flex: 0 0 auto; - width: 83.33333333%; - } - .col-md-11 { - flex: 0 0 auto; - width: 91.66666667%; - } - .col-md-12 { - flex: 0 0 auto; - width: 100%; - } - .offset-md-0 { - margin-left: 0; - } - .offset-md-1 { - margin-left: 8.33333333%; - } - .offset-md-2 { - margin-left: 16.66666667%; - } - .offset-md-3 { - margin-left: 25%; - } - .offset-md-4 { - margin-left: 33.33333333%; - } - .offset-md-5 { - margin-left: 41.66666667%; - } - .offset-md-6 { - margin-left: 50%; - } - .offset-md-7 { - margin-left: 58.33333333%; - } - .offset-md-8 { - margin-left: 66.66666667%; - } - .offset-md-9 { - margin-left: 75%; - } - .offset-md-10 { - margin-left: 83.33333333%; - } - .offset-md-11 { - margin-left: 91.66666667%; - } - .g-md-0, - .gx-md-0 { - --bs-gutter-x: 0; - } - .g-md-0, - .gy-md-0 { - --bs-gutter-y: 0; - } - .g-md-1, - .gx-md-1 { - --bs-gutter-x: 0.25rem; - } - .g-md-1, - .gy-md-1 { - --bs-gutter-y: 0.25rem; - } - .g-md-2, - .gx-md-2 { - --bs-gutter-x: 0.5rem; - } - .g-md-2, - .gy-md-2 { - --bs-gutter-y: 0.5rem; - } - .g-md-3, - .gx-md-3 { - --bs-gutter-x: 1rem; - } - .g-md-3, - .gy-md-3 { - --bs-gutter-y: 1rem; - } - .g-md-4, - .gx-md-4 { - --bs-gutter-x: 1.5rem; - } - .g-md-4, - .gy-md-4 { - --bs-gutter-y: 1.5rem; - } - .g-md-5, - .gx-md-5 { - --bs-gutter-x: 3rem; - } - .g-md-5, - .gy-md-5 { - --bs-gutter-y: 3rem; - } -} -@media (min-width: 992px) { - .col-lg { - flex: 1 0 0; - } - .row-cols-lg-auto > * { - flex: 0 0 auto; - width: auto; - } - .row-cols-lg-1 > * { - flex: 0 0 auto; - width: 100%; - } - .row-cols-lg-2 > * { - flex: 0 0 auto; - width: 50%; - } - .row-cols-lg-3 > * { - flex: 0 0 auto; - width: 33.33333333%; - } - .row-cols-lg-4 > * { - flex: 0 0 auto; - width: 25%; - } - .row-cols-lg-5 > * { - flex: 0 0 auto; - width: 20%; - } - .row-cols-lg-6 > * { - flex: 0 0 auto; - width: 16.66666667%; - } - .col-lg-auto { - flex: 0 0 auto; - width: auto; - } - .col-lg-1 { - flex: 0 0 auto; - width: 8.33333333%; - } - .col-lg-2 { - flex: 0 0 auto; - width: 16.66666667%; - } - .col-lg-3 { - flex: 0 0 auto; - width: 25%; - } - .col-lg-4 { - flex: 0 0 auto; - width: 33.33333333%; - } - .col-lg-5 { - flex: 0 0 auto; - width: 41.66666667%; - } - .col-lg-6 { - flex: 0 0 auto; - width: 50%; - } - .col-lg-7 { - flex: 0 0 auto; - width: 58.33333333%; - } - .col-lg-8 { - flex: 0 0 auto; - width: 66.66666667%; - } - .col-lg-9 { - flex: 0 0 auto; - width: 75%; - } - .col-lg-10 { - flex: 0 0 auto; - width: 83.33333333%; - } - .col-lg-11 { - flex: 0 0 auto; - width: 91.66666667%; - } - .col-lg-12 { - flex: 0 0 auto; - width: 100%; - } - .offset-lg-0 { - margin-left: 0; - } - .offset-lg-1 { - margin-left: 8.33333333%; - } - .offset-lg-2 { - margin-left: 16.66666667%; - } - .offset-lg-3 { - margin-left: 25%; - } - .offset-lg-4 { - margin-left: 33.33333333%; - } - .offset-lg-5 { - margin-left: 41.66666667%; - } - .offset-lg-6 { - margin-left: 50%; - } - .offset-lg-7 { - margin-left: 58.33333333%; - } - .offset-lg-8 { - margin-left: 66.66666667%; - } - .offset-lg-9 { - margin-left: 75%; - } - .offset-lg-10 { - margin-left: 83.33333333%; - } - .offset-lg-11 { - margin-left: 91.66666667%; - } - .g-lg-0, - .gx-lg-0 { - --bs-gutter-x: 0; - } - .g-lg-0, - .gy-lg-0 { - --bs-gutter-y: 0; - } - .g-lg-1, - .gx-lg-1 { - --bs-gutter-x: 0.25rem; - } - .g-lg-1, - .gy-lg-1 { - --bs-gutter-y: 0.25rem; - } - .g-lg-2, - .gx-lg-2 { - --bs-gutter-x: 0.5rem; - } - .g-lg-2, - .gy-lg-2 { - --bs-gutter-y: 0.5rem; - } - .g-lg-3, - .gx-lg-3 { - --bs-gutter-x: 1rem; - } - .g-lg-3, - .gy-lg-3 { - --bs-gutter-y: 1rem; - } - .g-lg-4, - .gx-lg-4 { - --bs-gutter-x: 1.5rem; - } - .g-lg-4, - .gy-lg-4 { - --bs-gutter-y: 1.5rem; - } - .g-lg-5, - .gx-lg-5 { - --bs-gutter-x: 3rem; - } - .g-lg-5, - .gy-lg-5 { - --bs-gutter-y: 3rem; - } -} -@media (min-width: 1200px) { - .col-xl { - flex: 1 0 0; - } - .row-cols-xl-auto > * { - flex: 0 0 auto; - width: auto; - } - .row-cols-xl-1 > * { - flex: 0 0 auto; - width: 100%; - } - .row-cols-xl-2 > * { - flex: 0 0 auto; - width: 50%; - } - .row-cols-xl-3 > * { - flex: 0 0 auto; - width: 33.33333333%; - } - .row-cols-xl-4 > * { - flex: 0 0 auto; - width: 25%; - } - .row-cols-xl-5 > * { - flex: 0 0 auto; - width: 20%; - } - .row-cols-xl-6 > * { - flex: 0 0 auto; - width: 16.66666667%; - } - .col-xl-auto { - flex: 0 0 auto; - width: auto; - } - .col-xl-1 { - flex: 0 0 auto; - width: 8.33333333%; - } - .col-xl-2 { - flex: 0 0 auto; - width: 16.66666667%; - } - .col-xl-3 { - flex: 0 0 auto; - width: 25%; - } - .col-xl-4 { - flex: 0 0 auto; - width: 33.33333333%; - } - .col-xl-5 { - flex: 0 0 auto; - width: 41.66666667%; - } - .col-xl-6 { - flex: 0 0 auto; - width: 50%; - } - .col-xl-7 { - flex: 0 0 auto; - width: 58.33333333%; - } - .col-xl-8 { - flex: 0 0 auto; - width: 66.66666667%; - } - .col-xl-9 { - flex: 0 0 auto; - width: 75%; - } - .col-xl-10 { - flex: 0 0 auto; - width: 83.33333333%; - } - .col-xl-11 { - flex: 0 0 auto; - width: 91.66666667%; - } - .col-xl-12 { - flex: 0 0 auto; - width: 100%; - } - .offset-xl-0 { - margin-left: 0; - } - .offset-xl-1 { - margin-left: 8.33333333%; - } - .offset-xl-2 { - margin-left: 16.66666667%; - } - .offset-xl-3 { - margin-left: 25%; - } - .offset-xl-4 { - margin-left: 33.33333333%; - } - .offset-xl-5 { - margin-left: 41.66666667%; - } - .offset-xl-6 { - margin-left: 50%; - } - .offset-xl-7 { - margin-left: 58.33333333%; - } - .offset-xl-8 { - margin-left: 66.66666667%; - } - .offset-xl-9 { - margin-left: 75%; - } - .offset-xl-10 { - margin-left: 83.33333333%; - } - .offset-xl-11 { - margin-left: 91.66666667%; - } - .g-xl-0, - .gx-xl-0 { - --bs-gutter-x: 0; - } - .g-xl-0, - .gy-xl-0 { - --bs-gutter-y: 0; - } - .g-xl-1, - .gx-xl-1 { - --bs-gutter-x: 0.25rem; - } - .g-xl-1, - .gy-xl-1 { - --bs-gutter-y: 0.25rem; - } - .g-xl-2, - .gx-xl-2 { - --bs-gutter-x: 0.5rem; - } - .g-xl-2, - .gy-xl-2 { - --bs-gutter-y: 0.5rem; - } - .g-xl-3, - .gx-xl-3 { - --bs-gutter-x: 1rem; - } - .g-xl-3, - .gy-xl-3 { - --bs-gutter-y: 1rem; - } - .g-xl-4, - .gx-xl-4 { - --bs-gutter-x: 1.5rem; - } - .g-xl-4, - .gy-xl-4 { - --bs-gutter-y: 1.5rem; - } - .g-xl-5, - .gx-xl-5 { - --bs-gutter-x: 3rem; - } - .g-xl-5, - .gy-xl-5 { - --bs-gutter-y: 3rem; - } -} -@media (min-width: 1400px) { - .col-xxl { - flex: 1 0 0; - } - .row-cols-xxl-auto > * { - flex: 0 0 auto; - width: auto; - } - .row-cols-xxl-1 > * { - flex: 0 0 auto; - width: 100%; - } - .row-cols-xxl-2 > * { - flex: 0 0 auto; - width: 50%; - } - .row-cols-xxl-3 > * { - flex: 0 0 auto; - width: 33.33333333%; - } - .row-cols-xxl-4 > * { - flex: 0 0 auto; - width: 25%; - } - .row-cols-xxl-5 > * { - flex: 0 0 auto; - width: 20%; - } - .row-cols-xxl-6 > * { - flex: 0 0 auto; - width: 16.66666667%; - } - .col-xxl-auto { - flex: 0 0 auto; - width: auto; - } - .col-xxl-1 { - flex: 0 0 auto; - width: 8.33333333%; - } - .col-xxl-2 { - flex: 0 0 auto; - width: 16.66666667%; - } - .col-xxl-3 { - flex: 0 0 auto; - width: 25%; - } - .col-xxl-4 { - flex: 0 0 auto; - width: 33.33333333%; - } - .col-xxl-5 { - flex: 0 0 auto; - width: 41.66666667%; - } - .col-xxl-6 { - flex: 0 0 auto; - width: 50%; - } - .col-xxl-7 { - flex: 0 0 auto; - width: 58.33333333%; - } - .col-xxl-8 { - flex: 0 0 auto; - width: 66.66666667%; - } - .col-xxl-9 { - flex: 0 0 auto; - width: 75%; - } - .col-xxl-10 { - flex: 0 0 auto; - width: 83.33333333%; - } - .col-xxl-11 { - flex: 0 0 auto; - width: 91.66666667%; - } - .col-xxl-12 { - flex: 0 0 auto; - width: 100%; - } - .offset-xxl-0 { - margin-left: 0; - } - .offset-xxl-1 { - margin-left: 8.33333333%; - } - .offset-xxl-2 { - margin-left: 16.66666667%; - } - .offset-xxl-3 { - margin-left: 25%; - } - .offset-xxl-4 { - margin-left: 33.33333333%; - } - .offset-xxl-5 { - margin-left: 41.66666667%; - } - .offset-xxl-6 { - margin-left: 50%; - } - .offset-xxl-7 { - margin-left: 58.33333333%; - } - .offset-xxl-8 { - margin-left: 66.66666667%; - } - .offset-xxl-9 { - margin-left: 75%; - } - .offset-xxl-10 { - margin-left: 83.33333333%; - } - .offset-xxl-11 { - margin-left: 91.66666667%; - } - .g-xxl-0, - .gx-xxl-0 { - --bs-gutter-x: 0; - } - .g-xxl-0, - .gy-xxl-0 { - --bs-gutter-y: 0; - } - .g-xxl-1, - .gx-xxl-1 { - --bs-gutter-x: 0.25rem; - } - .g-xxl-1, - .gy-xxl-1 { - --bs-gutter-y: 0.25rem; - } - .g-xxl-2, - .gx-xxl-2 { - --bs-gutter-x: 0.5rem; - } - .g-xxl-2, - .gy-xxl-2 { - --bs-gutter-y: 0.5rem; - } - .g-xxl-3, - .gx-xxl-3 { - --bs-gutter-x: 1rem; - } - .g-xxl-3, - .gy-xxl-3 { - --bs-gutter-y: 1rem; - } - .g-xxl-4, - .gx-xxl-4 { - --bs-gutter-x: 1.5rem; - } - .g-xxl-4, - .gy-xxl-4 { - --bs-gutter-y: 1.5rem; - } - .g-xxl-5, - .gx-xxl-5 { - --bs-gutter-x: 3rem; - } - .g-xxl-5, - .gy-xxl-5 { - --bs-gutter-y: 3rem; - } -} -.d-inline { - display: inline !important; -} - -.d-inline-block { - display: inline-block !important; -} - -.d-block { - display: block !important; -} - -.d-grid { - display: grid !important; -} - -.d-inline-grid { - display: inline-grid !important; -} - -.d-table { - display: table !important; -} - -.d-table-row { - display: table-row !important; -} - -.d-table-cell { - display: table-cell !important; -} - -.d-flex { - display: flex !important; -} - -.d-inline-flex { - display: inline-flex !important; -} - -.d-none { - display: none !important; -} - -.flex-fill { - flex: 1 1 auto !important; -} - -.flex-row { - flex-direction: row !important; -} - -.flex-column { - flex-direction: column !important; -} - -.flex-row-reverse { - flex-direction: row-reverse !important; -} - -.flex-column-reverse { - flex-direction: column-reverse !important; -} - -.flex-grow-0 { - flex-grow: 0 !important; -} - -.flex-grow-1 { - flex-grow: 1 !important; -} - -.flex-shrink-0 { - flex-shrink: 0 !important; -} - -.flex-shrink-1 { - flex-shrink: 1 !important; -} - -.flex-wrap { - flex-wrap: wrap !important; -} - -.flex-nowrap { - flex-wrap: nowrap !important; -} - -.flex-wrap-reverse { - flex-wrap: wrap-reverse !important; -} - -.justify-content-start { - justify-content: flex-start !important; -} - -.justify-content-end { - justify-content: flex-end !important; -} - -.justify-content-center { - justify-content: center !important; -} - -.justify-content-between { - justify-content: space-between !important; -} - -.justify-content-around { - justify-content: space-around !important; -} - -.justify-content-evenly { - justify-content: space-evenly !important; -} - -.align-items-start { - align-items: flex-start !important; -} - -.align-items-end { - align-items: flex-end !important; -} - -.align-items-center { - align-items: center !important; -} - -.align-items-baseline { - align-items: baseline !important; -} - -.align-items-stretch { - align-items: stretch !important; -} - -.align-content-start { - align-content: flex-start !important; -} - -.align-content-end { - align-content: flex-end !important; -} - -.align-content-center { - align-content: center !important; -} - -.align-content-between { - align-content: space-between !important; -} - -.align-content-around { - align-content: space-around !important; -} - -.align-content-stretch { - align-content: stretch !important; -} - -.align-self-auto { - align-self: auto !important; -} - -.align-self-start { - align-self: flex-start !important; -} - -.align-self-end { - align-self: flex-end !important; -} - -.align-self-center { - align-self: center !important; -} - -.align-self-baseline { - align-self: baseline !important; -} - -.align-self-stretch { - align-self: stretch !important; -} - -.order-first { - order: -1 !important; -} - -.order-0 { - order: 0 !important; -} - -.order-1 { - order: 1 !important; -} - -.order-2 { - order: 2 !important; -} - -.order-3 { - order: 3 !important; -} - -.order-4 { - order: 4 !important; -} - -.order-5 { - order: 5 !important; -} - -.order-last { - order: 6 !important; -} - -.m-0 { - margin: 0 !important; -} - -.m-1 { - margin: 0.25rem !important; -} - -.m-2 { - margin: 0.5rem !important; -} - -.m-3 { - margin: 1rem !important; -} - -.m-4 { - margin: 1.5rem !important; -} - -.m-5 { - margin: 3rem !important; -} - -.m-auto { - margin: auto !important; -} - -.mx-0 { - margin-right: 0 !important; - margin-left: 0 !important; -} - -.mx-1 { - margin-right: 0.25rem !important; - margin-left: 0.25rem !important; -} - -.mx-2 { - margin-right: 0.5rem !important; - margin-left: 0.5rem !important; -} - -.mx-3 { - margin-right: 1rem !important; - margin-left: 1rem !important; -} - -.mx-4 { - margin-right: 1.5rem !important; - margin-left: 1.5rem !important; -} - -.mx-5 { - margin-right: 3rem !important; - margin-left: 3rem !important; -} - -.mx-auto { - margin-right: auto !important; - margin-left: auto !important; -} - -.my-0 { - margin-top: 0 !important; - margin-bottom: 0 !important; -} - -.my-1 { - margin-top: 0.25rem !important; - margin-bottom: 0.25rem !important; -} - -.my-2 { - margin-top: 0.5rem !important; - margin-bottom: 0.5rem !important; -} - -.my-3 { - margin-top: 1rem !important; - margin-bottom: 1rem !important; -} - -.my-4 { - margin-top: 1.5rem !important; - margin-bottom: 1.5rem !important; -} - -.my-5 { - margin-top: 3rem !important; - margin-bottom: 3rem !important; -} - -.my-auto { - margin-top: auto !important; - margin-bottom: auto !important; -} - -.mt-0 { - margin-top: 0 !important; -} - -.mt-1 { - margin-top: 0.25rem !important; -} - -.mt-2 { - margin-top: 0.5rem !important; -} - -.mt-3 { - margin-top: 1rem !important; -} - -.mt-4 { - margin-top: 1.5rem !important; -} - -.mt-5 { - margin-top: 3rem !important; -} - -.mt-auto { - margin-top: auto !important; -} - -.me-0 { - margin-right: 0 !important; -} - -.me-1 { - margin-right: 0.25rem !important; -} - -.me-2 { - margin-right: 0.5rem !important; -} - -.me-3 { - margin-right: 1rem !important; -} - -.me-4 { - margin-right: 1.5rem !important; -} - -.me-5 { - margin-right: 3rem !important; -} - -.me-auto { - margin-right: auto !important; -} - -.mb-0 { - margin-bottom: 0 !important; -} - -.mb-1 { - margin-bottom: 0.25rem !important; -} - -.mb-2 { - margin-bottom: 0.5rem !important; -} - -.mb-3 { - margin-bottom: 1rem !important; -} - -.mb-4 { - margin-bottom: 1.5rem !important; -} - -.mb-5 { - margin-bottom: 3rem !important; -} - -.mb-auto { - margin-bottom: auto !important; -} - -.ms-0 { - margin-left: 0 !important; -} - -.ms-1 { - margin-left: 0.25rem !important; -} - -.ms-2 { - margin-left: 0.5rem !important; -} - -.ms-3 { - margin-left: 1rem !important; -} - -.ms-4 { - margin-left: 1.5rem !important; -} - -.ms-5 { - margin-left: 3rem !important; -} - -.ms-auto { - margin-left: auto !important; -} - -.p-0 { - padding: 0 !important; -} - -.p-1 { - padding: 0.25rem !important; -} - -.p-2 { - padding: 0.5rem !important; -} - -.p-3 { - padding: 1rem !important; -} - -.p-4 { - padding: 1.5rem !important; -} - -.p-5 { - padding: 3rem !important; -} - -.px-0 { - padding-right: 0 !important; - padding-left: 0 !important; -} - -.px-1 { - padding-right: 0.25rem !important; - padding-left: 0.25rem !important; -} - -.px-2 { - padding-right: 0.5rem !important; - padding-left: 0.5rem !important; -} - -.px-3 { - padding-right: 1rem !important; - padding-left: 1rem !important; -} - -.px-4 { - padding-right: 1.5rem !important; - padding-left: 1.5rem !important; -} - -.px-5 { - padding-right: 3rem !important; - padding-left: 3rem !important; -} - -.py-0 { - padding-top: 0 !important; - padding-bottom: 0 !important; -} - -.py-1 { - padding-top: 0.25rem !important; - padding-bottom: 0.25rem !important; -} - -.py-2 { - padding-top: 0.5rem !important; - padding-bottom: 0.5rem !important; -} - -.py-3 { - padding-top: 1rem !important; - padding-bottom: 1rem !important; -} - -.py-4 { - padding-top: 1.5rem !important; - padding-bottom: 1.5rem !important; -} - -.py-5 { - padding-top: 3rem !important; - padding-bottom: 3rem !important; -} - -.pt-0 { - padding-top: 0 !important; -} - -.pt-1 { - padding-top: 0.25rem !important; -} - -.pt-2 { - padding-top: 0.5rem !important; -} - -.pt-3 { - padding-top: 1rem !important; -} - -.pt-4 { - padding-top: 1.5rem !important; -} - -.pt-5 { - padding-top: 3rem !important; -} - -.pe-0 { - padding-right: 0 !important; -} - -.pe-1 { - padding-right: 0.25rem !important; -} - -.pe-2 { - padding-right: 0.5rem !important; -} - -.pe-3 { - padding-right: 1rem !important; -} - -.pe-4 { - padding-right: 1.5rem !important; -} - -.pe-5 { - padding-right: 3rem !important; -} - -.pb-0 { - padding-bottom: 0 !important; -} - -.pb-1 { - padding-bottom: 0.25rem !important; -} - -.pb-2 { - padding-bottom: 0.5rem !important; -} - -.pb-3, blockquote blockquote > p { - padding-bottom: 1rem !important; -} - -.pb-4 { - padding-bottom: 1.5rem !important; -} - -.pb-5 { - padding-bottom: 3rem !important; -} - -.ps-0 { - padding-left: 0 !important; -} - -.ps-1 { - padding-left: 0.25rem !important; -} - -.ps-2 { - padding-left: 0.5rem !important; -} - -.ps-3 { - padding-left: 1rem !important; -} - -.ps-4 { - padding-left: 1.5rem !important; -} - -.ps-5 { - padding-left: 3rem !important; -} - -@media (min-width: 576px) { - .d-sm-inline { - display: inline !important; - } - .d-sm-inline-block { - display: inline-block !important; - } - .d-sm-block { - display: block !important; - } - .d-sm-grid { - display: grid !important; - } - .d-sm-inline-grid { - display: inline-grid !important; - } - .d-sm-table { - display: table !important; - } - .d-sm-table-row { - display: table-row !important; - } - .d-sm-table-cell { - display: table-cell !important; - } - .d-sm-flex { - display: flex !important; - } - .d-sm-inline-flex { - display: inline-flex !important; - } - .d-sm-none { - display: none !important; - } - .flex-sm-fill { - flex: 1 1 auto !important; - } - .flex-sm-row { - flex-direction: row !important; - } - .flex-sm-column { - flex-direction: column !important; - } - .flex-sm-row-reverse { - flex-direction: row-reverse !important; - } - .flex-sm-column-reverse { - flex-direction: column-reverse !important; - } - .flex-sm-grow-0 { - flex-grow: 0 !important; - } - .flex-sm-grow-1 { - flex-grow: 1 !important; - } - .flex-sm-shrink-0 { - flex-shrink: 0 !important; - } - .flex-sm-shrink-1 { - flex-shrink: 1 !important; - } - .flex-sm-wrap { - flex-wrap: wrap !important; - } - .flex-sm-nowrap { - flex-wrap: nowrap !important; - } - .flex-sm-wrap-reverse { - flex-wrap: wrap-reverse !important; - } - .justify-content-sm-start { - justify-content: flex-start !important; - } - .justify-content-sm-end { - justify-content: flex-end !important; - } - .justify-content-sm-center { - justify-content: center !important; - } - .justify-content-sm-between { - justify-content: space-between !important; - } - .justify-content-sm-around { - justify-content: space-around !important; - } - .justify-content-sm-evenly { - justify-content: space-evenly !important; - } - .align-items-sm-start { - align-items: flex-start !important; - } - .align-items-sm-end { - align-items: flex-end !important; - } - .align-items-sm-center { - align-items: center !important; - } - .align-items-sm-baseline { - align-items: baseline !important; - } - .align-items-sm-stretch { - align-items: stretch !important; - } - .align-content-sm-start { - align-content: flex-start !important; - } - .align-content-sm-end { - align-content: flex-end !important; - } - .align-content-sm-center { - align-content: center !important; - } - .align-content-sm-between { - align-content: space-between !important; - } - .align-content-sm-around { - align-content: space-around !important; - } - .align-content-sm-stretch { - align-content: stretch !important; - } - .align-self-sm-auto { - align-self: auto !important; - } - .align-self-sm-start { - align-self: flex-start !important; - } - .align-self-sm-end { - align-self: flex-end !important; - } - .align-self-sm-center { - align-self: center !important; - } - .align-self-sm-baseline { - align-self: baseline !important; - } - .align-self-sm-stretch { - align-self: stretch !important; - } - .order-sm-first { - order: -1 !important; - } - .order-sm-0 { - order: 0 !important; - } - .order-sm-1 { - order: 1 !important; - } - .order-sm-2 { - order: 2 !important; - } - .order-sm-3 { - order: 3 !important; - } - .order-sm-4 { - order: 4 !important; - } - .order-sm-5 { - order: 5 !important; - } - .order-sm-last { - order: 6 !important; - } - .m-sm-0 { - margin: 0 !important; - } - .m-sm-1 { - margin: 0.25rem !important; - } - .m-sm-2 { - margin: 0.5rem !important; - } - .m-sm-3 { - margin: 1rem !important; - } - .m-sm-4 { - margin: 1.5rem !important; - } - .m-sm-5 { - margin: 3rem !important; - } - .m-sm-auto { - margin: auto !important; - } - .mx-sm-0 { - margin-right: 0 !important; - margin-left: 0 !important; - } - .mx-sm-1 { - margin-right: 0.25rem !important; - margin-left: 0.25rem !important; - } - .mx-sm-2 { - margin-right: 0.5rem !important; - margin-left: 0.5rem !important; - } - .mx-sm-3 { - margin-right: 1rem !important; - margin-left: 1rem !important; - } - .mx-sm-4 { - margin-right: 1.5rem !important; - margin-left: 1.5rem !important; - } - .mx-sm-5 { - margin-right: 3rem !important; - margin-left: 3rem !important; - } - .mx-sm-auto { - margin-right: auto !important; - margin-left: auto !important; - } - .my-sm-0 { - margin-top: 0 !important; - margin-bottom: 0 !important; - } - .my-sm-1 { - margin-top: 0.25rem !important; - margin-bottom: 0.25rem !important; - } - .my-sm-2 { - margin-top: 0.5rem !important; - margin-bottom: 0.5rem !important; - } - .my-sm-3 { - margin-top: 1rem !important; - margin-bottom: 1rem !important; - } - .my-sm-4 { - margin-top: 1.5rem !important; - margin-bottom: 1.5rem !important; - } - .my-sm-5 { - margin-top: 3rem !important; - margin-bottom: 3rem !important; - } - .my-sm-auto { - margin-top: auto !important; - margin-bottom: auto !important; - } - .mt-sm-0 { - margin-top: 0 !important; - } - .mt-sm-1 { - margin-top: 0.25rem !important; - } - .mt-sm-2 { - margin-top: 0.5rem !important; - } - .mt-sm-3 { - margin-top: 1rem !important; - } - .mt-sm-4 { - margin-top: 1.5rem !important; - } - .mt-sm-5 { - margin-top: 3rem !important; - } - .mt-sm-auto { - margin-top: auto !important; - } - .me-sm-0 { - margin-right: 0 !important; - } - .me-sm-1 { - margin-right: 0.25rem !important; - } - .me-sm-2 { - margin-right: 0.5rem !important; - } - .me-sm-3 { - margin-right: 1rem !important; - } - .me-sm-4 { - margin-right: 1.5rem !important; - } - .me-sm-5 { - margin-right: 3rem !important; - } - .me-sm-auto { - margin-right: auto !important; - } - .mb-sm-0 { - margin-bottom: 0 !important; - } - .mb-sm-1 { - margin-bottom: 0.25rem !important; - } - .mb-sm-2 { - margin-bottom: 0.5rem !important; - } - .mb-sm-3 { - margin-bottom: 1rem !important; - } - .mb-sm-4 { - margin-bottom: 1.5rem !important; - } - .mb-sm-5 { - margin-bottom: 3rem !important; - } - .mb-sm-auto { - margin-bottom: auto !important; - } - .ms-sm-0 { - margin-left: 0 !important; - } - .ms-sm-1 { - margin-left: 0.25rem !important; - } - .ms-sm-2 { - margin-left: 0.5rem !important; - } - .ms-sm-3 { - margin-left: 1rem !important; - } - .ms-sm-4 { - margin-left: 1.5rem !important; - } - .ms-sm-5 { - margin-left: 3rem !important; - } - .ms-sm-auto { - margin-left: auto !important; - } - .p-sm-0 { - padding: 0 !important; - } - .p-sm-1 { - padding: 0.25rem !important; - } - .p-sm-2 { - padding: 0.5rem !important; - } - .p-sm-3 { - padding: 1rem !important; - } - .p-sm-4 { - padding: 1.5rem !important; - } - .p-sm-5 { - padding: 3rem !important; - } - .px-sm-0 { - padding-right: 0 !important; - padding-left: 0 !important; - } - .px-sm-1 { - padding-right: 0.25rem !important; - padding-left: 0.25rem !important; - } - .px-sm-2 { - padding-right: 0.5rem !important; - padding-left: 0.5rem !important; - } - .px-sm-3 { - padding-right: 1rem !important; - padding-left: 1rem !important; - } - .px-sm-4 { - padding-right: 1.5rem !important; - padding-left: 1.5rem !important; - } - .px-sm-5 { - padding-right: 3rem !important; - padding-left: 3rem !important; - } - .py-sm-0 { - padding-top: 0 !important; - padding-bottom: 0 !important; - } - .py-sm-1 { - padding-top: 0.25rem !important; - padding-bottom: 0.25rem !important; - } - .py-sm-2 { - padding-top: 0.5rem !important; - padding-bottom: 0.5rem !important; - } - .py-sm-3 { - padding-top: 1rem !important; - padding-bottom: 1rem !important; - } - .py-sm-4 { - padding-top: 1.5rem !important; - padding-bottom: 1.5rem !important; - } - .py-sm-5 { - padding-top: 3rem !important; - padding-bottom: 3rem !important; - } - .pt-sm-0 { - padding-top: 0 !important; - } - .pt-sm-1 { - padding-top: 0.25rem !important; - } - .pt-sm-2 { - padding-top: 0.5rem !important; - } - .pt-sm-3 { - padding-top: 1rem !important; - } - .pt-sm-4 { - padding-top: 1.5rem !important; - } - .pt-sm-5 { - padding-top: 3rem !important; - } - .pe-sm-0 { - padding-right: 0 !important; - } - .pe-sm-1 { - padding-right: 0.25rem !important; - } - .pe-sm-2 { - padding-right: 0.5rem !important; - } - .pe-sm-3 { - padding-right: 1rem !important; - } - .pe-sm-4 { - padding-right: 1.5rem !important; - } - .pe-sm-5 { - padding-right: 3rem !important; - } - .pb-sm-0 { - padding-bottom: 0 !important; - } - .pb-sm-1 { - padding-bottom: 0.25rem !important; - } - .pb-sm-2 { - padding-bottom: 0.5rem !important; - } - .pb-sm-3 { - padding-bottom: 1rem !important; - } - .pb-sm-4 { - padding-bottom: 1.5rem !important; - } - .pb-sm-5 { - padding-bottom: 3rem !important; - } - .ps-sm-0 { - padding-left: 0 !important; - } - .ps-sm-1 { - padding-left: 0.25rem !important; - } - .ps-sm-2 { - padding-left: 0.5rem !important; - } - .ps-sm-3 { - padding-left: 1rem !important; - } - .ps-sm-4 { - padding-left: 1.5rem !important; - } - .ps-sm-5 { - padding-left: 3rem !important; - } -} -@media (min-width: 768px) { - .d-md-inline { - display: inline !important; - } - .d-md-inline-block { - display: inline-block !important; - } - .d-md-block { - display: block !important; - } - .d-md-grid { - display: grid !important; - } - .d-md-inline-grid { - display: inline-grid !important; - } - .d-md-table { - display: table !important; - } - .d-md-table-row { - display: table-row !important; - } - .d-md-table-cell { - display: table-cell !important; - } - .d-md-flex { - display: flex !important; - } - .d-md-inline-flex { - display: inline-flex !important; - } - .d-md-none { - display: none !important; - } - .flex-md-fill { - flex: 1 1 auto !important; - } - .flex-md-row { - flex-direction: row !important; - } - .flex-md-column { - flex-direction: column !important; - } - .flex-md-row-reverse { - flex-direction: row-reverse !important; - } - .flex-md-column-reverse { - flex-direction: column-reverse !important; - } - .flex-md-grow-0 { - flex-grow: 0 !important; - } - .flex-md-grow-1 { - flex-grow: 1 !important; - } - .flex-md-shrink-0 { - flex-shrink: 0 !important; - } - .flex-md-shrink-1 { - flex-shrink: 1 !important; - } - .flex-md-wrap { - flex-wrap: wrap !important; - } - .flex-md-nowrap { - flex-wrap: nowrap !important; - } - .flex-md-wrap-reverse { - flex-wrap: wrap-reverse !important; - } - .justify-content-md-start { - justify-content: flex-start !important; - } - .justify-content-md-end { - justify-content: flex-end !important; - } - .justify-content-md-center { - justify-content: center !important; - } - .justify-content-md-between { - justify-content: space-between !important; - } - .justify-content-md-around { - justify-content: space-around !important; - } - .justify-content-md-evenly { - justify-content: space-evenly !important; - } - .align-items-md-start { - align-items: flex-start !important; - } - .align-items-md-end { - align-items: flex-end !important; - } - .align-items-md-center { - align-items: center !important; - } - .align-items-md-baseline { - align-items: baseline !important; - } - .align-items-md-stretch { - align-items: stretch !important; - } - .align-content-md-start { - align-content: flex-start !important; - } - .align-content-md-end { - align-content: flex-end !important; - } - .align-content-md-center { - align-content: center !important; - } - .align-content-md-between { - align-content: space-between !important; - } - .align-content-md-around { - align-content: space-around !important; - } - .align-content-md-stretch { - align-content: stretch !important; - } - .align-self-md-auto { - align-self: auto !important; - } - .align-self-md-start { - align-self: flex-start !important; - } - .align-self-md-end { - align-self: flex-end !important; - } - .align-self-md-center { - align-self: center !important; - } - .align-self-md-baseline { - align-self: baseline !important; - } - .align-self-md-stretch { - align-self: stretch !important; - } - .order-md-first { - order: -1 !important; - } - .order-md-0 { - order: 0 !important; - } - .order-md-1 { - order: 1 !important; - } - .order-md-2 { - order: 2 !important; - } - .order-md-3 { - order: 3 !important; - } - .order-md-4 { - order: 4 !important; - } - .order-md-5 { - order: 5 !important; - } - .order-md-last { - order: 6 !important; - } - .m-md-0 { - margin: 0 !important; - } - .m-md-1 { - margin: 0.25rem !important; - } - .m-md-2 { - margin: 0.5rem !important; - } - .m-md-3 { - margin: 1rem !important; - } - .m-md-4 { - margin: 1.5rem !important; - } - .m-md-5 { - margin: 3rem !important; - } - .m-md-auto { - margin: auto !important; - } - .mx-md-0 { - margin-right: 0 !important; - margin-left: 0 !important; - } - .mx-md-1 { - margin-right: 0.25rem !important; - margin-left: 0.25rem !important; - } - .mx-md-2 { - margin-right: 0.5rem !important; - margin-left: 0.5rem !important; - } - .mx-md-3 { - margin-right: 1rem !important; - margin-left: 1rem !important; - } - .mx-md-4 { - margin-right: 1.5rem !important; - margin-left: 1.5rem !important; - } - .mx-md-5 { - margin-right: 3rem !important; - margin-left: 3rem !important; - } - .mx-md-auto { - margin-right: auto !important; - margin-left: auto !important; - } - .my-md-0 { - margin-top: 0 !important; - margin-bottom: 0 !important; - } - .my-md-1 { - margin-top: 0.25rem !important; - margin-bottom: 0.25rem !important; - } - .my-md-2 { - margin-top: 0.5rem !important; - margin-bottom: 0.5rem !important; - } - .my-md-3 { - margin-top: 1rem !important; - margin-bottom: 1rem !important; - } - .my-md-4 { - margin-top: 1.5rem !important; - margin-bottom: 1.5rem !important; - } - .my-md-5 { - margin-top: 3rem !important; - margin-bottom: 3rem !important; - } - .my-md-auto { - margin-top: auto !important; - margin-bottom: auto !important; - } - .mt-md-0 { - margin-top: 0 !important; - } - .mt-md-1 { - margin-top: 0.25rem !important; - } - .mt-md-2 { - margin-top: 0.5rem !important; - } - .mt-md-3 { - margin-top: 1rem !important; - } - .mt-md-4 { - margin-top: 1.5rem !important; - } - .mt-md-5 { - margin-top: 3rem !important; - } - .mt-md-auto { - margin-top: auto !important; - } - .me-md-0 { - margin-right: 0 !important; - } - .me-md-1 { - margin-right: 0.25rem !important; - } - .me-md-2 { - margin-right: 0.5rem !important; - } - .me-md-3 { - margin-right: 1rem !important; - } - .me-md-4 { - margin-right: 1.5rem !important; - } - .me-md-5 { - margin-right: 3rem !important; - } - .me-md-auto { - margin-right: auto !important; - } - .mb-md-0 { - margin-bottom: 0 !important; - } - .mb-md-1 { - margin-bottom: 0.25rem !important; - } - .mb-md-2 { - margin-bottom: 0.5rem !important; - } - .mb-md-3 { - margin-bottom: 1rem !important; - } - .mb-md-4 { - margin-bottom: 1.5rem !important; - } - .mb-md-5 { - margin-bottom: 3rem !important; - } - .mb-md-auto { - margin-bottom: auto !important; - } - .ms-md-0 { - margin-left: 0 !important; - } - .ms-md-1 { - margin-left: 0.25rem !important; - } - .ms-md-2 { - margin-left: 0.5rem !important; - } - .ms-md-3 { - margin-left: 1rem !important; - } - .ms-md-4 { - margin-left: 1.5rem !important; - } - .ms-md-5 { - margin-left: 3rem !important; - } - .ms-md-auto { - margin-left: auto !important; - } - .p-md-0 { - padding: 0 !important; - } - .p-md-1 { - padding: 0.25rem !important; - } - .p-md-2 { - padding: 0.5rem !important; - } - .p-md-3 { - padding: 1rem !important; - } - .p-md-4 { - padding: 1.5rem !important; - } - .p-md-5 { - padding: 3rem !important; - } - .px-md-0 { - padding-right: 0 !important; - padding-left: 0 !important; - } - .px-md-1 { - padding-right: 0.25rem !important; - padding-left: 0.25rem !important; - } - .px-md-2 { - padding-right: 0.5rem !important; - padding-left: 0.5rem !important; - } - .px-md-3 { - padding-right: 1rem !important; - padding-left: 1rem !important; - } - .px-md-4 { - padding-right: 1.5rem !important; - padding-left: 1.5rem !important; - } - .px-md-5 { - padding-right: 3rem !important; - padding-left: 3rem !important; - } - .py-md-0 { - padding-top: 0 !important; - padding-bottom: 0 !important; - } - .py-md-1 { - padding-top: 0.25rem !important; - padding-bottom: 0.25rem !important; - } - .py-md-2 { - padding-top: 0.5rem !important; - padding-bottom: 0.5rem !important; - } - .py-md-3 { - padding-top: 1rem !important; - padding-bottom: 1rem !important; - } - .py-md-4 { - padding-top: 1.5rem !important; - padding-bottom: 1.5rem !important; - } - .py-md-5 { - padding-top: 3rem !important; - padding-bottom: 3rem !important; - } - .pt-md-0 { - padding-top: 0 !important; - } - .pt-md-1 { - padding-top: 0.25rem !important; - } - .pt-md-2 { - padding-top: 0.5rem !important; - } - .pt-md-3 { - padding-top: 1rem !important; - } - .pt-md-4 { - padding-top: 1.5rem !important; - } - .pt-md-5 { - padding-top: 3rem !important; - } - .pe-md-0 { - padding-right: 0 !important; - } - .pe-md-1 { - padding-right: 0.25rem !important; - } - .pe-md-2 { - padding-right: 0.5rem !important; - } - .pe-md-3 { - padding-right: 1rem !important; - } - .pe-md-4 { - padding-right: 1.5rem !important; - } - .pe-md-5 { - padding-right: 3rem !important; - } - .pb-md-0 { - padding-bottom: 0 !important; - } - .pb-md-1 { - padding-bottom: 0.25rem !important; - } - .pb-md-2 { - padding-bottom: 0.5rem !important; - } - .pb-md-3 { - padding-bottom: 1rem !important; - } - .pb-md-4 { - padding-bottom: 1.5rem !important; - } - .pb-md-5 { - padding-bottom: 3rem !important; - } - .ps-md-0 { - padding-left: 0 !important; - } - .ps-md-1 { - padding-left: 0.25rem !important; - } - .ps-md-2 { - padding-left: 0.5rem !important; - } - .ps-md-3 { - padding-left: 1rem !important; - } - .ps-md-4 { - padding-left: 1.5rem !important; - } - .ps-md-5 { - padding-left: 3rem !important; - } -} -@media (min-width: 992px) { - .d-lg-inline { - display: inline !important; - } - .d-lg-inline-block { - display: inline-block !important; - } - .d-lg-block { - display: block !important; - } - .d-lg-grid { - display: grid !important; - } - .d-lg-inline-grid { - display: inline-grid !important; - } - .d-lg-table { - display: table !important; - } - .d-lg-table-row { - display: table-row !important; - } - .d-lg-table-cell { - display: table-cell !important; - } - .d-lg-flex { - display: flex !important; - } - .d-lg-inline-flex { - display: inline-flex !important; - } - .d-lg-none { - display: none !important; - } - .flex-lg-fill { - flex: 1 1 auto !important; - } - .flex-lg-row { - flex-direction: row !important; - } - .flex-lg-column { - flex-direction: column !important; - } - .flex-lg-row-reverse { - flex-direction: row-reverse !important; - } - .flex-lg-column-reverse { - flex-direction: column-reverse !important; - } - .flex-lg-grow-0 { - flex-grow: 0 !important; - } - .flex-lg-grow-1 { - flex-grow: 1 !important; - } - .flex-lg-shrink-0 { - flex-shrink: 0 !important; - } - .flex-lg-shrink-1 { - flex-shrink: 1 !important; - } - .flex-lg-wrap { - flex-wrap: wrap !important; - } - .flex-lg-nowrap { - flex-wrap: nowrap !important; - } - .flex-lg-wrap-reverse { - flex-wrap: wrap-reverse !important; - } - .justify-content-lg-start { - justify-content: flex-start !important; - } - .justify-content-lg-end { - justify-content: flex-end !important; - } - .justify-content-lg-center { - justify-content: center !important; - } - .justify-content-lg-between { - justify-content: space-between !important; - } - .justify-content-lg-around { - justify-content: space-around !important; - } - .justify-content-lg-evenly { - justify-content: space-evenly !important; - } - .align-items-lg-start { - align-items: flex-start !important; - } - .align-items-lg-end { - align-items: flex-end !important; - } - .align-items-lg-center { - align-items: center !important; - } - .align-items-lg-baseline { - align-items: baseline !important; - } - .align-items-lg-stretch { - align-items: stretch !important; - } - .align-content-lg-start { - align-content: flex-start !important; - } - .align-content-lg-end { - align-content: flex-end !important; - } - .align-content-lg-center { - align-content: center !important; - } - .align-content-lg-between { - align-content: space-between !important; - } - .align-content-lg-around { - align-content: space-around !important; - } - .align-content-lg-stretch { - align-content: stretch !important; - } - .align-self-lg-auto { - align-self: auto !important; - } - .align-self-lg-start { - align-self: flex-start !important; - } - .align-self-lg-end { - align-self: flex-end !important; - } - .align-self-lg-center { - align-self: center !important; - } - .align-self-lg-baseline { - align-self: baseline !important; - } - .align-self-lg-stretch { - align-self: stretch !important; - } - .order-lg-first { - order: -1 !important; - } - .order-lg-0 { - order: 0 !important; - } - .order-lg-1 { - order: 1 !important; - } - .order-lg-2 { - order: 2 !important; - } - .order-lg-3 { - order: 3 !important; - } - .order-lg-4 { - order: 4 !important; - } - .order-lg-5 { - order: 5 !important; - } - .order-lg-last { - order: 6 !important; - } - .m-lg-0 { - margin: 0 !important; - } - .m-lg-1 { - margin: 0.25rem !important; - } - .m-lg-2 { - margin: 0.5rem !important; - } - .m-lg-3 { - margin: 1rem !important; - } - .m-lg-4 { - margin: 1.5rem !important; - } - .m-lg-5 { - margin: 3rem !important; - } - .m-lg-auto { - margin: auto !important; - } - .mx-lg-0 { - margin-right: 0 !important; - margin-left: 0 !important; - } - .mx-lg-1 { - margin-right: 0.25rem !important; - margin-left: 0.25rem !important; - } - .mx-lg-2 { - margin-right: 0.5rem !important; - margin-left: 0.5rem !important; - } - .mx-lg-3 { - margin-right: 1rem !important; - margin-left: 1rem !important; - } - .mx-lg-4 { - margin-right: 1.5rem !important; - margin-left: 1.5rem !important; - } - .mx-lg-5 { - margin-right: 3rem !important; - margin-left: 3rem !important; - } - .mx-lg-auto { - margin-right: auto !important; - margin-left: auto !important; - } - .my-lg-0 { - margin-top: 0 !important; - margin-bottom: 0 !important; - } - .my-lg-1 { - margin-top: 0.25rem !important; - margin-bottom: 0.25rem !important; - } - .my-lg-2 { - margin-top: 0.5rem !important; - margin-bottom: 0.5rem !important; - } - .my-lg-3 { - margin-top: 1rem !important; - margin-bottom: 1rem !important; - } - .my-lg-4 { - margin-top: 1.5rem !important; - margin-bottom: 1.5rem !important; - } - .my-lg-5 { - margin-top: 3rem !important; - margin-bottom: 3rem !important; - } - .my-lg-auto { - margin-top: auto !important; - margin-bottom: auto !important; - } - .mt-lg-0 { - margin-top: 0 !important; - } - .mt-lg-1 { - margin-top: 0.25rem !important; - } - .mt-lg-2 { - margin-top: 0.5rem !important; - } - .mt-lg-3 { - margin-top: 1rem !important; - } - .mt-lg-4 { - margin-top: 1.5rem !important; - } - .mt-lg-5 { - margin-top: 3rem !important; - } - .mt-lg-auto { - margin-top: auto !important; - } - .me-lg-0 { - margin-right: 0 !important; - } - .me-lg-1 { - margin-right: 0.25rem !important; - } - .me-lg-2 { - margin-right: 0.5rem !important; - } - .me-lg-3 { - margin-right: 1rem !important; - } - .me-lg-4 { - margin-right: 1.5rem !important; - } - .me-lg-5 { - margin-right: 3rem !important; - } - .me-lg-auto { - margin-right: auto !important; - } - .mb-lg-0 { - margin-bottom: 0 !important; - } - .mb-lg-1 { - margin-bottom: 0.25rem !important; - } - .mb-lg-2 { - margin-bottom: 0.5rem !important; - } - .mb-lg-3 { - margin-bottom: 1rem !important; - } - .mb-lg-4 { - margin-bottom: 1.5rem !important; - } - .mb-lg-5 { - margin-bottom: 3rem !important; - } - .mb-lg-auto { - margin-bottom: auto !important; - } - .ms-lg-0 { - margin-left: 0 !important; - } - .ms-lg-1 { - margin-left: 0.25rem !important; - } - .ms-lg-2 { - margin-left: 0.5rem !important; - } - .ms-lg-3 { - margin-left: 1rem !important; - } - .ms-lg-4 { - margin-left: 1.5rem !important; - } - .ms-lg-5 { - margin-left: 3rem !important; - } - .ms-lg-auto { - margin-left: auto !important; - } - .p-lg-0 { - padding: 0 !important; - } - .p-lg-1 { - padding: 0.25rem !important; - } - .p-lg-2 { - padding: 0.5rem !important; - } - .p-lg-3 { - padding: 1rem !important; - } - .p-lg-4 { - padding: 1.5rem !important; - } - .p-lg-5 { - padding: 3rem !important; - } - .px-lg-0 { - padding-right: 0 !important; - padding-left: 0 !important; - } - .px-lg-1 { - padding-right: 0.25rem !important; - padding-left: 0.25rem !important; - } - .px-lg-2 { - padding-right: 0.5rem !important; - padding-left: 0.5rem !important; - } - .px-lg-3 { - padding-right: 1rem !important; - padding-left: 1rem !important; - } - .px-lg-4 { - padding-right: 1.5rem !important; - padding-left: 1.5rem !important; - } - .px-lg-5 { - padding-right: 3rem !important; - padding-left: 3rem !important; - } - .py-lg-0 { - padding-top: 0 !important; - padding-bottom: 0 !important; - } - .py-lg-1 { - padding-top: 0.25rem !important; - padding-bottom: 0.25rem !important; - } - .py-lg-2 { - padding-top: 0.5rem !important; - padding-bottom: 0.5rem !important; - } - .py-lg-3 { - padding-top: 1rem !important; - padding-bottom: 1rem !important; - } - .py-lg-4 { - padding-top: 1.5rem !important; - padding-bottom: 1.5rem !important; - } - .py-lg-5 { - padding-top: 3rem !important; - padding-bottom: 3rem !important; - } - .pt-lg-0 { - padding-top: 0 !important; - } - .pt-lg-1 { - padding-top: 0.25rem !important; - } - .pt-lg-2 { - padding-top: 0.5rem !important; - } - .pt-lg-3 { - padding-top: 1rem !important; - } - .pt-lg-4 { - padding-top: 1.5rem !important; - } - .pt-lg-5 { - padding-top: 3rem !important; - } - .pe-lg-0 { - padding-right: 0 !important; - } - .pe-lg-1 { - padding-right: 0.25rem !important; - } - .pe-lg-2 { - padding-right: 0.5rem !important; - } - .pe-lg-3 { - padding-right: 1rem !important; - } - .pe-lg-4 { - padding-right: 1.5rem !important; - } - .pe-lg-5 { - padding-right: 3rem !important; - } - .pb-lg-0 { - padding-bottom: 0 !important; - } - .pb-lg-1 { - padding-bottom: 0.25rem !important; - } - .pb-lg-2 { - padding-bottom: 0.5rem !important; - } - .pb-lg-3 { - padding-bottom: 1rem !important; - } - .pb-lg-4 { - padding-bottom: 1.5rem !important; - } - .pb-lg-5 { - padding-bottom: 3rem !important; - } - .ps-lg-0 { - padding-left: 0 !important; - } - .ps-lg-1 { - padding-left: 0.25rem !important; - } - .ps-lg-2 { - padding-left: 0.5rem !important; - } - .ps-lg-3 { - padding-left: 1rem !important; - } - .ps-lg-4 { - padding-left: 1.5rem !important; - } - .ps-lg-5 { - padding-left: 3rem !important; - } -} -@media (min-width: 1200px) { - .d-xl-inline { - display: inline !important; - } - .d-xl-inline-block { - display: inline-block !important; - } - .d-xl-block { - display: block !important; - } - .d-xl-grid { - display: grid !important; - } - .d-xl-inline-grid { - display: inline-grid !important; - } - .d-xl-table { - display: table !important; - } - .d-xl-table-row { - display: table-row !important; - } - .d-xl-table-cell { - display: table-cell !important; - } - .d-xl-flex { - display: flex !important; - } - .d-xl-inline-flex { - display: inline-flex !important; - } - .d-xl-none { - display: none !important; - } - .flex-xl-fill { - flex: 1 1 auto !important; - } - .flex-xl-row { - flex-direction: row !important; - } - .flex-xl-column { - flex-direction: column !important; - } - .flex-xl-row-reverse { - flex-direction: row-reverse !important; - } - .flex-xl-column-reverse { - flex-direction: column-reverse !important; - } - .flex-xl-grow-0 { - flex-grow: 0 !important; - } - .flex-xl-grow-1 { - flex-grow: 1 !important; - } - .flex-xl-shrink-0 { - flex-shrink: 0 !important; - } - .flex-xl-shrink-1 { - flex-shrink: 1 !important; - } - .flex-xl-wrap { - flex-wrap: wrap !important; - } - .flex-xl-nowrap { - flex-wrap: nowrap !important; - } - .flex-xl-wrap-reverse { - flex-wrap: wrap-reverse !important; - } - .justify-content-xl-start { - justify-content: flex-start !important; - } - .justify-content-xl-end { - justify-content: flex-end !important; - } - .justify-content-xl-center { - justify-content: center !important; - } - .justify-content-xl-between { - justify-content: space-between !important; - } - .justify-content-xl-around { - justify-content: space-around !important; - } - .justify-content-xl-evenly { - justify-content: space-evenly !important; - } - .align-items-xl-start { - align-items: flex-start !important; - } - .align-items-xl-end { - align-items: flex-end !important; - } - .align-items-xl-center { - align-items: center !important; - } - .align-items-xl-baseline { - align-items: baseline !important; - } - .align-items-xl-stretch { - align-items: stretch !important; - } - .align-content-xl-start { - align-content: flex-start !important; - } - .align-content-xl-end { - align-content: flex-end !important; - } - .align-content-xl-center { - align-content: center !important; - } - .align-content-xl-between { - align-content: space-between !important; - } - .align-content-xl-around { - align-content: space-around !important; - } - .align-content-xl-stretch { - align-content: stretch !important; - } - .align-self-xl-auto { - align-self: auto !important; - } - .align-self-xl-start { - align-self: flex-start !important; - } - .align-self-xl-end { - align-self: flex-end !important; - } - .align-self-xl-center { - align-self: center !important; - } - .align-self-xl-baseline { - align-self: baseline !important; - } - .align-self-xl-stretch { - align-self: stretch !important; - } - .order-xl-first { - order: -1 !important; - } - .order-xl-0 { - order: 0 !important; - } - .order-xl-1 { - order: 1 !important; - } - .order-xl-2 { - order: 2 !important; - } - .order-xl-3 { - order: 3 !important; - } - .order-xl-4 { - order: 4 !important; - } - .order-xl-5 { - order: 5 !important; - } - .order-xl-last { - order: 6 !important; - } - .m-xl-0 { - margin: 0 !important; - } - .m-xl-1 { - margin: 0.25rem !important; - } - .m-xl-2 { - margin: 0.5rem !important; - } - .m-xl-3 { - margin: 1rem !important; - } - .m-xl-4 { - margin: 1.5rem !important; - } - .m-xl-5 { - margin: 3rem !important; - } - .m-xl-auto { - margin: auto !important; - } - .mx-xl-0 { - margin-right: 0 !important; - margin-left: 0 !important; - } - .mx-xl-1 { - margin-right: 0.25rem !important; - margin-left: 0.25rem !important; - } - .mx-xl-2 { - margin-right: 0.5rem !important; - margin-left: 0.5rem !important; - } - .mx-xl-3 { - margin-right: 1rem !important; - margin-left: 1rem !important; - } - .mx-xl-4 { - margin-right: 1.5rem !important; - margin-left: 1.5rem !important; - } - .mx-xl-5 { - margin-right: 3rem !important; - margin-left: 3rem !important; - } - .mx-xl-auto { - margin-right: auto !important; - margin-left: auto !important; - } - .my-xl-0 { - margin-top: 0 !important; - margin-bottom: 0 !important; - } - .my-xl-1 { - margin-top: 0.25rem !important; - margin-bottom: 0.25rem !important; - } - .my-xl-2 { - margin-top: 0.5rem !important; - margin-bottom: 0.5rem !important; - } - .my-xl-3 { - margin-top: 1rem !important; - margin-bottom: 1rem !important; - } - .my-xl-4 { - margin-top: 1.5rem !important; - margin-bottom: 1.5rem !important; - } - .my-xl-5 { - margin-top: 3rem !important; - margin-bottom: 3rem !important; - } - .my-xl-auto { - margin-top: auto !important; - margin-bottom: auto !important; - } - .mt-xl-0 { - margin-top: 0 !important; - } - .mt-xl-1 { - margin-top: 0.25rem !important; - } - .mt-xl-2 { - margin-top: 0.5rem !important; - } - .mt-xl-3 { - margin-top: 1rem !important; - } - .mt-xl-4 { - margin-top: 1.5rem !important; - } - .mt-xl-5 { - margin-top: 3rem !important; - } - .mt-xl-auto { - margin-top: auto !important; - } - .me-xl-0 { - margin-right: 0 !important; - } - .me-xl-1 { - margin-right: 0.25rem !important; - } - .me-xl-2 { - margin-right: 0.5rem !important; - } - .me-xl-3 { - margin-right: 1rem !important; - } - .me-xl-4 { - margin-right: 1.5rem !important; - } - .me-xl-5 { - margin-right: 3rem !important; - } - .me-xl-auto { - margin-right: auto !important; - } - .mb-xl-0 { - margin-bottom: 0 !important; - } - .mb-xl-1 { - margin-bottom: 0.25rem !important; - } - .mb-xl-2 { - margin-bottom: 0.5rem !important; - } - .mb-xl-3 { - margin-bottom: 1rem !important; - } - .mb-xl-4 { - margin-bottom: 1.5rem !important; - } - .mb-xl-5 { - margin-bottom: 3rem !important; - } - .mb-xl-auto { - margin-bottom: auto !important; - } - .ms-xl-0 { - margin-left: 0 !important; - } - .ms-xl-1 { - margin-left: 0.25rem !important; - } - .ms-xl-2 { - margin-left: 0.5rem !important; - } - .ms-xl-3 { - margin-left: 1rem !important; - } - .ms-xl-4 { - margin-left: 1.5rem !important; - } - .ms-xl-5 { - margin-left: 3rem !important; - } - .ms-xl-auto { - margin-left: auto !important; - } - .p-xl-0 { - padding: 0 !important; - } - .p-xl-1 { - padding: 0.25rem !important; - } - .p-xl-2 { - padding: 0.5rem !important; - } - .p-xl-3 { - padding: 1rem !important; - } - .p-xl-4 { - padding: 1.5rem !important; - } - .p-xl-5 { - padding: 3rem !important; - } - .px-xl-0 { - padding-right: 0 !important; - padding-left: 0 !important; - } - .px-xl-1 { - padding-right: 0.25rem !important; - padding-left: 0.25rem !important; - } - .px-xl-2 { - padding-right: 0.5rem !important; - padding-left: 0.5rem !important; - } - .px-xl-3 { - padding-right: 1rem !important; - padding-left: 1rem !important; - } - .px-xl-4 { - padding-right: 1.5rem !important; - padding-left: 1.5rem !important; - } - .px-xl-5 { - padding-right: 3rem !important; - padding-left: 3rem !important; - } - .py-xl-0 { - padding-top: 0 !important; - padding-bottom: 0 !important; - } - .py-xl-1 { - padding-top: 0.25rem !important; - padding-bottom: 0.25rem !important; - } - .py-xl-2 { - padding-top: 0.5rem !important; - padding-bottom: 0.5rem !important; - } - .py-xl-3 { - padding-top: 1rem !important; - padding-bottom: 1rem !important; - } - .py-xl-4 { - padding-top: 1.5rem !important; - padding-bottom: 1.5rem !important; - } - .py-xl-5 { - padding-top: 3rem !important; - padding-bottom: 3rem !important; - } - .pt-xl-0 { - padding-top: 0 !important; - } - .pt-xl-1 { - padding-top: 0.25rem !important; - } - .pt-xl-2 { - padding-top: 0.5rem !important; - } - .pt-xl-3 { - padding-top: 1rem !important; - } - .pt-xl-4 { - padding-top: 1.5rem !important; - } - .pt-xl-5 { - padding-top: 3rem !important; - } - .pe-xl-0 { - padding-right: 0 !important; - } - .pe-xl-1 { - padding-right: 0.25rem !important; - } - .pe-xl-2 { - padding-right: 0.5rem !important; - } - .pe-xl-3 { - padding-right: 1rem !important; - } - .pe-xl-4 { - padding-right: 1.5rem !important; - } - .pe-xl-5 { - padding-right: 3rem !important; - } - .pb-xl-0 { - padding-bottom: 0 !important; - } - .pb-xl-1 { - padding-bottom: 0.25rem !important; - } - .pb-xl-2 { - padding-bottom: 0.5rem !important; - } - .pb-xl-3 { - padding-bottom: 1rem !important; - } - .pb-xl-4 { - padding-bottom: 1.5rem !important; - } - .pb-xl-5 { - padding-bottom: 3rem !important; - } - .ps-xl-0 { - padding-left: 0 !important; - } - .ps-xl-1 { - padding-left: 0.25rem !important; - } - .ps-xl-2 { - padding-left: 0.5rem !important; - } - .ps-xl-3 { - padding-left: 1rem !important; - } - .ps-xl-4 { - padding-left: 1.5rem !important; - } - .ps-xl-5 { - padding-left: 3rem !important; - } -} -@media (min-width: 1400px) { - .d-xxl-inline { - display: inline !important; - } - .d-xxl-inline-block { - display: inline-block !important; - } - .d-xxl-block { - display: block !important; - } - .d-xxl-grid { - display: grid !important; - } - .d-xxl-inline-grid { - display: inline-grid !important; - } - .d-xxl-table { - display: table !important; - } - .d-xxl-table-row { - display: table-row !important; - } - .d-xxl-table-cell { - display: table-cell !important; - } - .d-xxl-flex { - display: flex !important; - } - .d-xxl-inline-flex { - display: inline-flex !important; - } - .d-xxl-none { - display: none !important; - } - .flex-xxl-fill { - flex: 1 1 auto !important; - } - .flex-xxl-row { - flex-direction: row !important; - } - .flex-xxl-column { - flex-direction: column !important; - } - .flex-xxl-row-reverse { - flex-direction: row-reverse !important; - } - .flex-xxl-column-reverse { - flex-direction: column-reverse !important; - } - .flex-xxl-grow-0 { - flex-grow: 0 !important; - } - .flex-xxl-grow-1 { - flex-grow: 1 !important; - } - .flex-xxl-shrink-0 { - flex-shrink: 0 !important; - } - .flex-xxl-shrink-1 { - flex-shrink: 1 !important; - } - .flex-xxl-wrap { - flex-wrap: wrap !important; - } - .flex-xxl-nowrap { - flex-wrap: nowrap !important; - } - .flex-xxl-wrap-reverse { - flex-wrap: wrap-reverse !important; - } - .justify-content-xxl-start { - justify-content: flex-start !important; - } - .justify-content-xxl-end { - justify-content: flex-end !important; - } - .justify-content-xxl-center { - justify-content: center !important; - } - .justify-content-xxl-between { - justify-content: space-between !important; - } - .justify-content-xxl-around { - justify-content: space-around !important; - } - .justify-content-xxl-evenly { - justify-content: space-evenly !important; - } - .align-items-xxl-start { - align-items: flex-start !important; - } - .align-items-xxl-end { - align-items: flex-end !important; - } - .align-items-xxl-center { - align-items: center !important; - } - .align-items-xxl-baseline { - align-items: baseline !important; - } - .align-items-xxl-stretch { - align-items: stretch !important; - } - .align-content-xxl-start { - align-content: flex-start !important; - } - .align-content-xxl-end { - align-content: flex-end !important; - } - .align-content-xxl-center { - align-content: center !important; - } - .align-content-xxl-between { - align-content: space-between !important; - } - .align-content-xxl-around { - align-content: space-around !important; - } - .align-content-xxl-stretch { - align-content: stretch !important; - } - .align-self-xxl-auto { - align-self: auto !important; - } - .align-self-xxl-start { - align-self: flex-start !important; - } - .align-self-xxl-end { - align-self: flex-end !important; - } - .align-self-xxl-center { - align-self: center !important; - } - .align-self-xxl-baseline { - align-self: baseline !important; - } - .align-self-xxl-stretch { - align-self: stretch !important; - } - .order-xxl-first { - order: -1 !important; - } - .order-xxl-0 { - order: 0 !important; - } - .order-xxl-1 { - order: 1 !important; - } - .order-xxl-2 { - order: 2 !important; - } - .order-xxl-3 { - order: 3 !important; - } - .order-xxl-4 { - order: 4 !important; - } - .order-xxl-5 { - order: 5 !important; - } - .order-xxl-last { - order: 6 !important; - } - .m-xxl-0 { - margin: 0 !important; - } - .m-xxl-1 { - margin: 0.25rem !important; - } - .m-xxl-2 { - margin: 0.5rem !important; - } - .m-xxl-3 { - margin: 1rem !important; - } - .m-xxl-4 { - margin: 1.5rem !important; - } - .m-xxl-5 { - margin: 3rem !important; - } - .m-xxl-auto { - margin: auto !important; - } - .mx-xxl-0 { - margin-right: 0 !important; - margin-left: 0 !important; - } - .mx-xxl-1 { - margin-right: 0.25rem !important; - margin-left: 0.25rem !important; - } - .mx-xxl-2 { - margin-right: 0.5rem !important; - margin-left: 0.5rem !important; - } - .mx-xxl-3 { - margin-right: 1rem !important; - margin-left: 1rem !important; - } - .mx-xxl-4 { - margin-right: 1.5rem !important; - margin-left: 1.5rem !important; - } - .mx-xxl-5 { - margin-right: 3rem !important; - margin-left: 3rem !important; - } - .mx-xxl-auto { - margin-right: auto !important; - margin-left: auto !important; - } - .my-xxl-0 { - margin-top: 0 !important; - margin-bottom: 0 !important; - } - .my-xxl-1 { - margin-top: 0.25rem !important; - margin-bottom: 0.25rem !important; - } - .my-xxl-2 { - margin-top: 0.5rem !important; - margin-bottom: 0.5rem !important; - } - .my-xxl-3 { - margin-top: 1rem !important; - margin-bottom: 1rem !important; - } - .my-xxl-4 { - margin-top: 1.5rem !important; - margin-bottom: 1.5rem !important; - } - .my-xxl-5 { - margin-top: 3rem !important; - margin-bottom: 3rem !important; - } - .my-xxl-auto { - margin-top: auto !important; - margin-bottom: auto !important; - } - .mt-xxl-0 { - margin-top: 0 !important; - } - .mt-xxl-1 { - margin-top: 0.25rem !important; - } - .mt-xxl-2 { - margin-top: 0.5rem !important; - } - .mt-xxl-3 { - margin-top: 1rem !important; - } - .mt-xxl-4 { - margin-top: 1.5rem !important; - } - .mt-xxl-5 { - margin-top: 3rem !important; - } - .mt-xxl-auto { - margin-top: auto !important; - } - .me-xxl-0 { - margin-right: 0 !important; - } - .me-xxl-1 { - margin-right: 0.25rem !important; - } - .me-xxl-2 { - margin-right: 0.5rem !important; - } - .me-xxl-3 { - margin-right: 1rem !important; - } - .me-xxl-4 { - margin-right: 1.5rem !important; - } - .me-xxl-5 { - margin-right: 3rem !important; - } - .me-xxl-auto { - margin-right: auto !important; - } - .mb-xxl-0 { - margin-bottom: 0 !important; - } - .mb-xxl-1 { - margin-bottom: 0.25rem !important; - } - .mb-xxl-2 { - margin-bottom: 0.5rem !important; - } - .mb-xxl-3 { - margin-bottom: 1rem !important; - } - .mb-xxl-4 { - margin-bottom: 1.5rem !important; - } - .mb-xxl-5 { - margin-bottom: 3rem !important; - } - .mb-xxl-auto { - margin-bottom: auto !important; - } - .ms-xxl-0 { - margin-left: 0 !important; - } - .ms-xxl-1 { - margin-left: 0.25rem !important; - } - .ms-xxl-2 { - margin-left: 0.5rem !important; - } - .ms-xxl-3 { - margin-left: 1rem !important; - } - .ms-xxl-4 { - margin-left: 1.5rem !important; - } - .ms-xxl-5 { - margin-left: 3rem !important; - } - .ms-xxl-auto { - margin-left: auto !important; - } - .p-xxl-0 { - padding: 0 !important; - } - .p-xxl-1 { - padding: 0.25rem !important; - } - .p-xxl-2 { - padding: 0.5rem !important; - } - .p-xxl-3 { - padding: 1rem !important; - } - .p-xxl-4 { - padding: 1.5rem !important; - } - .p-xxl-5 { - padding: 3rem !important; - } - .px-xxl-0 { - padding-right: 0 !important; - padding-left: 0 !important; - } - .px-xxl-1 { - padding-right: 0.25rem !important; - padding-left: 0.25rem !important; - } - .px-xxl-2 { - padding-right: 0.5rem !important; - padding-left: 0.5rem !important; - } - .px-xxl-3 { - padding-right: 1rem !important; - padding-left: 1rem !important; - } - .px-xxl-4 { - padding-right: 1.5rem !important; - padding-left: 1.5rem !important; - } - .px-xxl-5 { - padding-right: 3rem !important; - padding-left: 3rem !important; - } - .py-xxl-0 { - padding-top: 0 !important; - padding-bottom: 0 !important; - } - .py-xxl-1 { - padding-top: 0.25rem !important; - padding-bottom: 0.25rem !important; - } - .py-xxl-2 { - padding-top: 0.5rem !important; - padding-bottom: 0.5rem !important; - } - .py-xxl-3 { - padding-top: 1rem !important; - padding-bottom: 1rem !important; - } - .py-xxl-4 { - padding-top: 1.5rem !important; - padding-bottom: 1.5rem !important; - } - .py-xxl-5 { - padding-top: 3rem !important; - padding-bottom: 3rem !important; - } - .pt-xxl-0 { - padding-top: 0 !important; - } - .pt-xxl-1 { - padding-top: 0.25rem !important; - } - .pt-xxl-2 { - padding-top: 0.5rem !important; - } - .pt-xxl-3 { - padding-top: 1rem !important; - } - .pt-xxl-4 { - padding-top: 1.5rem !important; - } - .pt-xxl-5 { - padding-top: 3rem !important; - } - .pe-xxl-0 { - padding-right: 0 !important; - } - .pe-xxl-1 { - padding-right: 0.25rem !important; - } - .pe-xxl-2 { - padding-right: 0.5rem !important; - } - .pe-xxl-3 { - padding-right: 1rem !important; - } - .pe-xxl-4 { - padding-right: 1.5rem !important; - } - .pe-xxl-5 { - padding-right: 3rem !important; - } - .pb-xxl-0 { - padding-bottom: 0 !important; - } - .pb-xxl-1 { - padding-bottom: 0.25rem !important; - } - .pb-xxl-2 { - padding-bottom: 0.5rem !important; - } - .pb-xxl-3 { - padding-bottom: 1rem !important; - } - .pb-xxl-4 { - padding-bottom: 1.5rem !important; - } - .pb-xxl-5 { - padding-bottom: 3rem !important; - } - .ps-xxl-0 { - padding-left: 0 !important; - } - .ps-xxl-1 { - padding-left: 0.25rem !important; - } - .ps-xxl-2 { - padding-left: 0.5rem !important; - } - .ps-xxl-3 { - padding-left: 1rem !important; - } - .ps-xxl-4 { - padding-left: 1.5rem !important; - } - .ps-xxl-5 { - padding-left: 3rem !important; - } +/** + ** Copyright 2008-2025 Adam J. Jolicoeur + ** https://www.adamjolicoeur.com +**/ +:root { + /* Font Families */ + --font-family-sans: "Inter", system-ui, -apple-system, blinkmacsystemfont, "Segoe UI", roboto, "Helvetica Neue", arial, sans-serif; + --font-family-serif: "Playfair Display", serif; + --font-family-mono: "Fira Code", "Courier New", courier, monospace; + --font-family-heading: "Pirata One", cursive; + /* Colors */ + --white: #f0f0f0; + --black: #010101; + --earth-dark: #2d1f12; + --earth-brown: #4a3426; + --earth-sage: #5a6b4f; + --earth-sand: #c9b89a; + --earth-cream: #f5f1e8; + --accent-coral: #d35f3d; + --accent-coral-dark: #b34a2d; + --text-primary: #2d1f12; + --text-secondary: #4a3426; + --text-muted: #6b5d52; + --shadow: rgb(45, 31, 18, 15%); + --shadow-heavy: rgb(45, 31, 18, 25%); + --shadow-light: rgb(45, 31, 18, 8%); + /* Font Sizes */ + --font-size-xs: 0.75rem; + --font-size-sm: 0.875rem; + --font-size-md: 1rem; + --font-size-lg: 1.125rem; + --font-size-xl: 1.25rem; + --font-size-2xl: 1.5rem; + --font-size-3xl: 2rem; + --font-size-4xl: 2.5rem; + --font-size-5xl: 3rem; + --font-size-6xl: 4rem; + /* Spacing */ + --space-2xs: 0.25rem; + --space-xs: 0.5rem; + --space-sm: 0.75rem; + --space-md: 1rem; + --space-lg: 1.5rem; + --space-xl: 2rem; + --space-2xl: 3rem; + --space-3xl: 6rem; + /* Border radius */ + --radius-sm: 8px; + --radius-md: 12px; + --radius-lg: 16px; + --radius-xl: 20px; + --radius-pill: 50px; + /* Borders */ + --border-thin: 2px; + --border-medium: 4px; + --border-thick: 6px; + --border-extra-thick: 8px; +} + +* { + margin: 0; + padding: 0; + box-sizing: border-box; } -@media print { - .d-print-inline { - display: inline !important; - } - .d-print-inline-block { - display: inline-block !important; - } - .d-print-block { - display: block !important; - } - .d-print-grid { - display: grid !important; + +/* Focus visible styles for keyboard navigation */ +*:focus-visible { + outline: var(--border-thin) solid var(--accent-coral); + outline-offset: 2px; +} + +html { + scroll-behavior: smooth; +} + +body { + font-family: var(--font-family-sans); + background: linear-gradient(135deg, var(--earth-cream) 0%, #e8dcc8 100%); + color: var(--text-primary); + line-height: 1.6; + min-height: 100vh; + position: relative; +} + +/* Styles for users who prefer reduced motion */ +@media (prefers-reduced-motion: reduce) { + .animated-element { + animation: none; /* Disable animations */ + transition: none; /* Disable transitions */ + /* You can also provide alternative, less motion-intensive styles here */ + /* For example, for a hover effect, you might change opacity instead of scaling */ + opacity: 1; /* Ensure element is visible if animation was for visibility */ + } + /* You can also target specific elements or properties */ + body { + scroll-behavior: auto; /* Disable smooth scrolling if enabled */ } - .d-print-inline-grid { - display: inline-grid !important; + *, + *::before, + *::after { + animation-duration: 0.01ms !important; + animation-iteration-count: 1 !important; + transition-duration: 0.01ms !important; } - .d-print-table { - display: table !important; +} +.display-none, +.d-none { + display: none !important; +} + +/* Hero Section */ +.hero { + display: flex; + flex-direction: column; + align-items: center; + justify-content: center; + padding: 6rem 2rem; + text-align: center; + max-width: 900px; + margin: 0 auto; +} + +.rounded { + border-radius: var(--radius-xl, 20px) !important; +} + +.circle { + border-radius: 999px !important; + padding: 1rem !important; +} + +/* Work Highlights */ +.fade-in { + opacity: 0; + visibility: hidden; + transition: opacity 0.5s ease-in, visibility 0s linear 0.5s; /* 0.5s for opacity transition, 0s visibility transition after 0.5s delay */ +} + +.fade-in.show { + opacity: 1; + visibility: visible; + transition-delay: 0s; /* Override the delay for fade-in */ +} + +.show { + opacity: 1; + visibility: visible; + transition-delay: 0s; +} + +.hide { + opacity: 0; + visibility: hidden; + transition: opacity 0.5s ease-in, visibility 0s linear 0.5s; /* 0.5s for opacity transition, 0s visibility transition after 0.5s delay */ +} + +.hide-on-screen { + display: none !important; +} + +/* Responsive */ +@media (width <= 768px) { + .hero h1 { + font-size: var(--font-size-5xl, 3rem); } - .d-print-table-row { - display: table-row !important; + .no-wrap { + flex-wrap: wrap !important; } - .d-print-table-cell { - display: table-cell !important; + .hide-on-mobile { + display: none !important; } - .d-print-flex { - display: flex !important; + .work-grid { + grid-template-columns: 1fr; } - .d-print-inline-flex { - display: inline-flex !important; + .callouts-grid { + grid-template-columns: 1fr; } - .d-print-none { - display: none !important; + h2 { + font-size: var(--font-size-3xl, 2rem); } } -/* stylelint-enable */ -/** - ** Copyright 2008-2024 Adam J. Jolicoeur - ** https://www.adamjolicoeur.com -**/ +/* stylint-disable */ /* ** Arrow animations from https://codepen.io/postor/pen/vYpNYg */ @@ -4105,7 +198,6 @@ fill: transparent; stroke-width: 1px; animation: arrow 2s infinite; - -webkit-animation: arrow 2s infinite; } @keyframes arrow { @@ -4122,7 +214,7 @@ opacity: 0; } } -@-webkit-keyframes arrow /*Safari and Chrome*/ { +@keyframes arrow /*Safari and Chrome*/ { 0% { opacity: 0; } @@ -4138,1479 +230,1433 @@ } .arrows path.a1 { animation-delay: -1s; - -webkit-animation-delay: -1s; /* Safari 和 Chrome */ + /* Safari 和 Chrome */ } .arrows path.a2 { animation-delay: -0.5s; - -webkit-animation-delay: -0.5s; /* Safari 和 Chrome */ + /* Safari 和 Chrome */ } .arrows path.a3 { animation-delay: 0s; - -webkit-animation-delay: 0s; /* Safari 和 Chrome */ + /* Safari 和 Chrome */ } -.oswald-light { - font-family: "Oswald", sans-serif; - font-optical-sizing: auto; - font-weight: 300; +.pirata-one-regular { + font-family: "Pirata One", system-ui; + font-weight: 400; font-style: normal; } -.oswald-regular { - font-family: "Oswald", sans-serif; +.inter-400 { + font-family: Inter, sans-serif; font-optical-sizing: auto; font-weight: 400; font-style: normal; } -.oswald-medium { - font-family: "Oswald", sans-serif; +.inter-500 { + font-family: Inter, sans-serif; font-optical-sizing: auto; font-weight: 500; font-style: normal; } -.oswald-semibold { - font-family: "Oswald", sans-serif; +.inter-600 { + font-family: Inter, sans-serif; font-optical-sizing: auto; font-weight: 600; font-style: normal; } -.oswald-bold { - font-family: "Oswald", sans-serif; +.inter-700 { + font-family: Inter, sans-serif; font-optical-sizing: auto; font-weight: 700; font-style: normal; } -.lato-thin { - font-family: "Lato", sans-serif; - font-weight: 100; +.inter-800 { + font-family: Inter, sans-serif; + font-optical-sizing: auto; + font-weight: 800; font-style: normal; } -.lato-light { - font-family: "Lato", sans-serif; - font-weight: 300; +.inter-900 { + font-family: Inter, sans-serif; + font-optical-sizing: auto; + font-weight: 900; font-style: normal; } -.lato-regular { - font-family: "Lato", sans-serif; +.playfair-display-400 { + font-family: "Playfair Display", serif; + font-optical-sizing: auto; font-weight: 400; font-style: normal; } -.lato-bold { - font-family: "Lato", sans-serif; +.playfair-display-500 { + font-family: "Playfair Display", serif; + font-optical-sizing: auto; + font-weight: 500; + font-style: normal; +} + +.playfair-display-600 { + font-family: "Playfair Display", serif; + font-optical-sizing: auto; + font-weight: 600; + font-style: normal; +} + +.playfair-display-700 { + font-family: "Playfair Display", serif; + font-optical-sizing: auto; font-weight: 700; font-style: normal; } -.lato-black { - font-family: "Lato", sans-serif; +.playfair-display-800 { + font-family: "Playfair Display", serif; + font-optical-sizing: auto; + font-weight: 800; + font-style: normal; +} + +.playfair-display-900 { + font-family: "Playfair Display", serif; + font-optical-sizing: auto; font-weight: 900; font-style: normal; } -.lato-thin-italic { - font-family: "Lato", sans-serif; - font-weight: 100; - font-style: italic; +/* Heading 1 */ +h1, .text-h1 { + font-family: "Pirata One", cursive; + font-size: clamp(2.5rem, 8vw, 5rem); + color: var(--text-primary); + line-height: 1.2; + letter-spacing: 2px; + text-shadow: 3px 3px 0 var(--accent-coral); } -.lato-light-italic { - font-family: "Lato", sans-serif; - font-weight: 300; - font-style: italic; +.text-display { + font-family: "Pirata One", cursive; + font-size: clamp(3rem, 10vw, 6rem); + color: var(--text-primary); + line-height: 1.1; + letter-spacing: 2px; + text-shadow: 3px 3px 0 var(--accent-coral); } -.lato-regular-italic { - font-family: "Lato", sans-serif; - font-weight: 400; - font-style: italic; +.hero h1 { + font-family: var(--font-family-heading); + font-size: 6rem; + color: var(--text-primary); + margin-bottom: 1rem; + text-shadow: 3px 3px 0 var(--accent-coral); + letter-spacing: 2px; + line-height: 1.2; } -.lato-bold-italic { - font-family: "Lato", sans-serif; +/* Heading 2 */ +h2, .text-h2 { + font-family: "Playfair Display", serif; + font-size: clamp(2rem, 5vw, 3rem); + color: var(--text-primary); + line-height: 1.3; font-weight: 700; - font-style: italic; + margin-bottom: var(--space-md, 1.5rem); } -.lato-black-italic { - font-family: "Lato", sans-serif; - font-weight: 900; - font-style: italic; +.text-h2.no-underline::after { + display: none; + margin-bottom: var(--space-2xs, 0.25rem); } -:root { - --link-color-primary: #507687; - --link-color-primary-hover: #384B70; - --color-grey-50: #e8e8ec; - --color-grey-100: #f8f8f8; - --color-grey-200: #e3e3e3; - --color-grey-300: #bbb; - --color-grey-400: #949494; - --color-grey-500: #525759; - --color-grey-600: #424242; - --color-grey-800: #212529; - --color-grey-900: #010101; - --color-blue-50: #e6f4f1; - --color-blue-100: #bfe7fa; - --color-blue-200: #a2cadc; - --color-blue-300: #86adbf; - --color-blue-500: #6b91a3; - --color-blue-700: #507687; - --color-blue-800: #384B70; - --color-blue-900: #384B70; - --color-white: #fff; - --color-black: #000; -} - -@media (prefers-color-scheme: dark) { - :root { - color-scheme: light dark; - --bs-body-bg: var(--color-grey-700); - --bs-body-color: var(--color-grey-50); - --bs-secondary-color: var(--color-grey-300); - --bs-light-rgb: 105, 105, 105; - --aj-container-background: var(--bs-bg-opacity, .2); - --bs-text-dark: var(--color-grey-50); - } - body { - background-color: var(--color-grey-800) !important; - color: var(--color-grey-200) !important; - } - img { - filter: brightness(0.8) contrast(1.2); - } - .fa-solid, .fa-brand, i { - color: var(--color-grey-200) !important; - } - h1, .h1, h2, .h2, h3, .h3, h4, .h4, p, small, .small { - color: var(--color-grey-200); - font-weight: 350 !important; - } - .text-body-secondary, blockquote blockquote > p { - color: var(--sl-input-help-text-color); - } - .bg-light { - background-color: var(--aj-container-background) !important; - } - .text-dark { - color: var(--color-grey-950) !important; - } +h2::after, .text-h2::after { + content: ""; + display: block; + width: 100px; + height: 5px; + background: var(--accent-coral); + margin: 1rem auto; + border: 3px solid var(--earth-brown); +} + +/* Heading 3 */ +h3, .text-h3 { + font-family: "Playfair Display", serif; + font-size: clamp(1.5rem, 3vw, 2rem); + color: var(--text-primary); + line-height: 1.3; + font-weight: 600; } -.text-secondary, blockquote, blockquote > p { - color: var(--sl-input-help-text-color); + +/* Heading 4 */ +h4, .text-h4 { + font-family: "Playfair Display", serif; + font-size: clamp(1.25rem, 2.5vw, 1.5rem); + color: var(--text-primary); + line-height: 1.4; + font-weight: 600; } -:root { - --font-size-base: $size-base; +/* Heading 5 */ +h5, .text-h5 { + font-family: Inter, sans-serif; + font-size: clamp(1.1rem, 2vw, 1.25rem); + color: var(--text-primary); + line-height: 1.4; + font-weight: 700; } -:root { - --link-color-primary: #507687; - --link-color-primary-hover: #384B70; - --color-grey-50: #e8e8ec; - --color-grey-100: #f8f8f8; - --color-grey-200: #e3e3e3; - --color-grey-300: #bbb; - --color-grey-400: #949494; - --color-grey-500: #525759; - --color-grey-600: #424242; - --color-grey-800: #212529; - --color-grey-900: #010101; - --color-blue-50: #e6f4f1; - --color-blue-100: #bfe7fa; - --color-blue-200: #a2cadc; - --color-blue-300: #86adbf; - --color-blue-500: #6b91a3; - --color-blue-700: #507687; - --color-blue-800: #384B70; - --color-blue-900: #384B70; - --color-white: #fff; - --color-black: #000; -} - -@media (prefers-color-scheme: dark) { - :root { - color-scheme: light dark; - --bs-body-bg: var(--color-grey-700); - --bs-body-color: var(--color-grey-50); - --bs-secondary-color: var(--color-grey-300); - --bs-light-rgb: 105, 105, 105; - --aj-container-background: var(--bs-bg-opacity, .2); - --bs-text-dark: var(--color-grey-50); - } - body { - background-color: var(--color-grey-800) !important; - color: var(--color-grey-200) !important; - } - img { - filter: brightness(0.8) contrast(1.2); - } - .fa-solid, .fa-brand, i { - color: var(--color-grey-200) !important; - } - h1, .h1, h2, .h2, h3, .h3, h4, .h4, p, small, .small { - color: var(--color-grey-200); - font-weight: 350 !important; - } - .text-body-secondary, blockquote blockquote > p { - color: var(--sl-input-help-text-color); - } - .bg-light { - background-color: var(--aj-container-background) !important; - } - .text-dark { - color: var(--color-grey-950) !important; - } +/* Heading 6 */ +h6, .text-h6 { + font-family: Inter, sans-serif; + font-size: 1rem; + color: var(--text-primary); + line-height: 1.4; + font-weight: 700; + text-transform: uppercase; + letter-spacing: 0.5px; } -.text-secondary, blockquote, blockquote > p { - color: var(--sl-input-help-text-color); + +/* Body text sizes */ +.text-body-lg { + font-size: clamp(1.1rem, 1.5vw, 1.25rem) !important; + line-height: 1.7 !important; } -:root { - --font-size-base: $size-base; +p, .text-body { + font-size: clamp(0.95rem, 1.5vw, 1rem); + line-height: 1.7; + color: var(--text-primary); + padding-bottom: var(--space-xs, 0.5rem); } -/* stylelint-disable custom-property-pattern */ -/* stylelint-enable */ -:root { - --link-color-primary: #507687; - --link-color-primary-hover: #384B70; - --color-grey-50: #e8e8ec; - --color-grey-100: #f8f8f8; - --color-grey-200: #e3e3e3; - --color-grey-300: #bbb; - --color-grey-400: #949494; - --color-grey-500: #525759; - --color-grey-600: #424242; - --color-grey-800: #212529; - --color-grey-900: #010101; - --color-blue-50: #e6f4f1; - --color-blue-100: #bfe7fa; - --color-blue-200: #a2cadc; - --color-blue-300: #86adbf; - --color-blue-500: #6b91a3; - --color-blue-700: #507687; - --color-blue-800: #384B70; - --color-blue-900: #384B70; - --color-white: #fff; - --color-black: #000; -} - -@media (prefers-color-scheme: dark) { - :root { - color-scheme: light dark; - --bs-body-bg: var(--color-grey-700); - --bs-body-color: var(--color-grey-50); - --bs-secondary-color: var(--color-grey-300); - --bs-light-rgb: 105, 105, 105; - --aj-container-background: var(--bs-bg-opacity, .2); - --bs-text-dark: var(--color-grey-50); - } - body { - background-color: var(--color-grey-800) !important; - color: var(--color-grey-200) !important; - } - img { - filter: brightness(0.8) contrast(1.2); - } - .fa-solid, .fa-brand, i { - color: var(--color-grey-200) !important; - } - h1, .h1, h2, .h2, h3, .h3, h4, .h4, p, small, .small { - color: var(--color-grey-200); - font-weight: 350 !important; - } - .text-body-secondary, blockquote blockquote > p { - color: var(--sl-input-help-text-color); - } - .bg-light { - background-color: var(--aj-container-background) !important; - } - .text-dark { - color: var(--color-grey-950) !important; - } +p:last-child, .text-body:last-child { + margin-bottom: 0; } -.text-secondary, blockquote, blockquote > p { - color: var(--sl-input-help-text-color); + +.hero p { + font-size: clamp(1.1rem, 2vw, 1.25rem); + color: var(--earth-brown); + max-width: 720px; + margin: 0 auto; } -.margin-none { - margin: 0; +.card-body p:first-of-type, .card-body .text-body:first-of-type { + margin-top: var(--space-md, 16px); } -.margin-top-none { - margin-right: 0; +.text-body-sm { + font-size: clamp(0.85rem, 1.2vw, 0.9rem); + line-height: 1.6; } -.margin-bottom-none { - margin-bottom: 0; +.text-caption { + font-size: clamp(var(--space-sm), 1vw, 0.85rem); + line-height: 1.5; + color: var(--text-muted); } -.margin-left-none { - margin-left: 0; +.text-callout { + font-size: clamp(1rem, 1.5vw, 1.1rem); + line-height: 1.6; + font-weight: 600; + color: var(--text-primary); + margin: var(--space-lg, 1.5rem); + padding: var(--space-lg, 1.5rem); + background: var(--earth-sand-light); + border-left: var(--border-medium) solid var(--accent-coral); } -.margin-xsm { - margin: 0.25rem; +code, .code { + font-family: var(--font-family-mono); + font-size: clamp(0.85rem, 1vw, 0.9rem); } -.margin-top-xsm { - margin-right: 0.25rem; +code.code-inline, +.code.code-inline { + background: var(--earth-sand); + padding: 0.1rem 0.3rem; + border-radius: var(--radius-sm); } -.margin-bottom-xsm { - margin-bottom: 0.25rem; +.code-block { + display: block; + background: var(--earth-sand); + padding: 1rem; + border-radius: var(--radius-md); + font-size: clamp(0.85rem, 1vw, 0.9rem); + overflow-x: auto; + border: var(--border-thin) solid var(--earth-sage); } -.margin-left-xsm { - margin-left: 0.25rem; +/* Text utilities */ +.text-muted { + color: var(--text-muted); } -.margin-sm { - margin: 0.5rem; +.text-secondary { + color: var(--text-secondary); } -.margin-top-sm { - margin-right: 0.5rem; +.text-accent { + color: var(--accent-coral); } -.margin-bottom-sm { - margin-bottom: 0.5rem; +.text-semibold { + font-weight: 600; } -.margin-left-sm { - margin-left: 0.5rem; +.text-bold { + font-weight: 700; } -.margin-md { - margin: 1rem; +.text-center { + text-align: center; } -.margin-top-md { - margin-right: 1rem; +/* Lead paragraph */ +.lead, .text-lead { + font-size: clamp(1.1rem, 2vw, 1.35rem); + line-height: 1.7; + color: var(--text-secondary); } -.margin-bottom-md { - margin-bottom: 1rem; +a, .link { + color: var(--earth-sage); + border-bottom: 1px solid var(--earth-sage); + text-decoration: none; + transition: all 0.2s; + font-weight: var(--font-weight-semibold, 600); } -.margin-left-md { - margin-left: 1rem; +a:hover, a:focus, .link:hover, .link:focus { + color: var(--earth-brown); + border-bottom-color: var(--earth-brown); } -.margin-lg { - margin: 1.25rem; +blockquote, .blockquote { + border-left: var(--border-thin) solid var(--earth-brown); + padding-left: var(--space-md, 1rem); + margin: var(--space-lg, 1.5rem) 0; + font-style: italic; + color: var(--text-secondary); } -.margin-top-lg { - margin-right: 1.25rem; +.mb-1 { + margin-bottom: var(--space-2xs) !important; } -.margin-bottom-lg { - margin-bottom: 1.25rem; +.mb-2 { + margin-bottom: var(--space-xs) !important; } -.margin-left-lg { - margin-left: 1.25rem; +.mb-3 { + margin-bottom: var(--space-sm) !important; } -.margin-xl { - margin: 1.5rem; +.mb-4 { + margin-bottom: var(--space-md) !important; } -.margin-top-xl { - margin-right: 1.5rem; +.mb-5 { + margin-bottom: var(--space-xl) !important; } -.margin-bottom-xl { - margin-bottom: 1.5rem; +.mt-1 { + margin-top: var(--space-2xs) !important; } -.margin-left-xl { - margin-left: 1.5rem; +.mt-2 { + margin-top: var(--space-xs) !important; } -.margin-xxl { - margin: 2rem; +.mt-3 { + margin-top: var(--space-sm) !important; } -.margin-top-xxl { - margin-right: 2rem; +.mt-4 { + margin-top: var(--space-md) !important; } -.margin-bottom-xxl { - margin-bottom: 2rem; +.mt-5 { + margin-top: var(--space-xl) !important; } -.margin-left-xxl { - margin-left: 2rem; +.ml-1 { + margin-left: var(--space-2xs) !important; } -.margin-display { - margin: 4rem; +.ml-2 { + margin-left: var(--space-xs) !important; } -.margin-top-display { - margin-right: 4rem; +.ml-3 { + margin-left: var(--space-sm) !important; } -.margin-bottom-display { - margin-bottom: 4rem; +.ml-4 { + margin-left: var(--space-md) !important; } -.margin-left-display { - margin-left: 4rem; +.ml-5 { + margin-left: var(--space-xl) !important; } -.padding-none { - padding: 0; +.mr-1 { + margin-right: var(--space-2xs) !important; } -.padding-top-none { - padding-right: 0; +.mr-2 { + margin-right: var(--space-xs) !important; } -.padding-bottom-none { - padding-bottom: 0; +.mr-3 { + margin-right: var(--space-sm) !important; } -.padding-left-none { - padding-left: 0; +.mr-4 { + margin-right: var(--space-md) !important; } -.padding-xsm { - padding: 0.25rem; +.mr-5 { + margin-right: var(--space-xl) !important; } -.padding-top-xsm { - padding-right: 0.25rem; +.p-1 { + padding: var(--space-2xs) !important; } -.padding-bottom-xsm { - padding-bottom: 0.25rem; +.p-2 { + padding: var(--space-xs) !important; } -.padding-left-xsm { - padding-left: 0.25rem; +.p-3 { + padding: var(--space-sm) !important; } -.padding-sm { - padding: 0.5rem; +.p-4 { + padding: var(--space-md) !important; } -.padding-top-sm { - padding-right: 0.5rem; +.p-5 { + padding: var(--space-xl) !important; } -.padding-bottom-sm { - padding-bottom: 0.5rem; +.pt-1 { + padding-top: var(--space-2xs) !important; } -.padding-left-sm { - padding-left: 0.5rem; +.pt-2 { + padding-top: var(--space-xs) !important; } -.padding-md { - padding: 1rem; +.pt-3 { + padding-top: var(--space-sm) !important; } -.padding-top-md { - padding-right: 1rem; +.pt-4 { + padding-top: var(--space-md) !important; } -.padding-bottom-md { - padding-bottom: 1rem; +.pt-5 { + padding-top: var(--space-xl) !important; } -.padding-left-md { - padding-left: 1rem; +.pb-1 { + padding-bottom: var(--space-2xs) !important; } -.padding-lg { - padding: 1.25rem; +.pb-2 { + padding-bottom: var(--space-xs) !important; } -.padding-top-lg { - padding-right: 1.25rem; +.pb-3 { + padding-bottom: var(--space-sm) !important; } -.padding-bottom-lg { - padding-bottom: 1.25rem; +.pb-4 { + padding-bottom: var(--space-md) !important; } -.padding-left-lg { - padding-left: 1.25rem; +.pb-5 { + padding-bottom: var(--space-xl) !important; } -.padding-xl { - padding: 1.5rem; +.pl-1 { + padding-left: var(--space-2xs) !important; } -.padding-top-xl { - padding-right: 1.5rem; +.pl-2 { + padding-left: var(--space-xs) !important; } -.padding-bottom-xl { - padding-bottom: 1.5rem; +.pl-3 { + padding-left: var(--space-sm) !important; } -.padding-left-xl { - padding-left: 1.5rem; +.pl-4 { + padding-left: var(--space-md) !important; } -.padding-xxl { - padding: 2rem; +.pl-5 { + padding-left: var(--space-xl) !important; } -.padding-top-xxl { - padding-right: 2rem; +.pr-1 { + padding-right: var(--space-2xs) !important; } -.padding-bottom-xxl { - padding-bottom: 2rem; +.pr-2 { + padding-right: var(--space-xs) !important; } -.padding-left-xxl { - padding-left: 2rem; +.pr-3 { + padding-right: var(--space-sm) !important; } -.padding-display { - padding: 4rem; +.pr-4 { + padding-right: var(--space-md) !important; } -.padding-top-display { - padding-right: 4rem; +.pr-5 { + padding-right: var(--space-xl) !important; } -.padding-bottom-display { - padding-bottom: 4rem; +/* Section Styles */ +section { + max-width: 1200px; + margin: 0 auto; + padding: var(--space-3xl, 6rem) var(--space-lg, 2rem); } -.padding-left-display { - padding-left: 4rem; +.justify-content-center { + justify-content: center !important; } -.text-transform-uppercase { - text-transform: uppercase; +.row { + display: flex; + flex-wrap: wrap; + gap: var(--space-lg, 2rem); +} + +@media (width >= 768px) { + .row { + gap: var(--space-xs, 0.5rem); + } +} +@media (width >= 768px) { + .card-body .row { + gap: 0; + } +} +.button-row { + gap: 1rem; +} + +.no-wrap { + flex-wrap: nowrap; +} + +.d-flex { + display: flex; +} + +.flex-column { + flex-direction: column; +} + +.align-items-center { + align-items: center; +} + +.work-grid { + display: grid; + gap: var(--space-lg, 2rem); + grid-template-columns: repeat(auto-fit, minmax(300px, 1fr)); + margin-bottom: var(--space-lg, 2rem); } -.text-transform-capitalize { - text-transform: capitalize; +.divider { + display: block; + width: 50%; + height: var(--space-md, 1.5rem); + background: var(--accent-coral); + border: var(--border-medium, 4px) outset var(--earth-dark); + margin: 0 auto; +} + +.divider.vertical { + width: var(--space-2xs, 0.25rem); + height: 100%; + background: var(--earth-dark); + border-radius: var(--radius-sm); + border: none !important; + margin: 0; } -.text-transform-lowercase { - text-transform: lowercase; +ul, +ol, +.card-body ul, +.card-body ol, +ul.list, ol.list { + margin-left: var(--space-lg) !important; + padding-left: var(--space-md) !important; } -.text-dashed { - text-decoration: dashed; +.highlight-block { + display: flex; + flex-direction: row; + align-items: center; + justify-content: center; } -.text-dotted { - text-decoration: dotted; +.header-highlight { + text-align: center; + margin: var(--space-md) auto; + padding: var(--space-md); + width: 100%; } -.text-double { - text-decoration: double; +/* Navigation */ +nav { + position: fixed; + top: 2rem; + left: 50%; + transform: translateX(-50%); + z-index: 1000; + background: rgba(245, 241, 232, 0.5); + backdrop-filter: blur(24px); + filter: url("#lensFilter") saturate(120%) brightness(1.15); + border: var(--border-medium, 4px) solid var(--earth-brown); + border-radius: 50px; + padding: var(--space-sm) 2rem; + box-shadow: 0 8px 24px var(--shadow-heavy); +} + +.main-nav { + position: sticky; + top: 2rem; + margin: 0 auto; + width: fit-content; + transform: none !important; + left: 0; + right: 0; } -.text-line-through { - text-decoration: line-through; +nav ul { + list-style: none; + display: flex; + justify-content: center; + gap: 2rem; + margin-left: 0 !important; + padding-left: 0 !important; } -.text-none { +nav a { text-decoration: none; + color: var(--text-primary); + font-weight: 500; + font-size: 0.95rem; + transition: color 0.3s; + padding: var(--space-2xs) var(--space-xs, 0.5rem); + border-bottom: none; } -.text-solid { - text-decoration: solid; +nav a:hover, +nav a:focus { + color: var(--accent-coral); + outline: var(--border-thin) solid var(--accent-coral); + outline-offset: 2px; } -.text-underline { - text-decoration: underline; +nav a.active { + color: var(--accent-coral); } -.font-size-xs { - font-size: 0.75rem; +nav a.sub-page { + outline: var(--border-thin) solid var(--text-secondary); + outline-offset: 2px; } -.font-size-sm { - font-size: 0.875rem; +nav a.sub-page:hover { + outline-color: var(--accent-coral); } -.font-size-md { - font-size: 1rem; +@media (width <= 768px) { + nav { + top: var(--space-sm, 1rem) !important; + padding: var(--space-xs, 0.5rem) var(--space-sm, 1rem) !important; + margin: 0 auto !important; + } + nav ul { + gap: var(--space-sm, 1rem); + } } - -.font-size-lg { - font-size: 1.25rem; +/* Footer */ +footer { + background: var(--earth-dark); + color: var(--earth-cream); + padding: var(--space-2xl, 3rem) var(--space-xl, 2rem); + margin-top: var(--space-3xl, 6rem); + border-top: var(--border-extra-thick, 8px) solid var(--earth-brown); + box-shadow: 0 -10px 30px var(--shadow); } -.font-size-xl { - font-size: 1.5rem; +.footer-content { + max-width: 1200px; + margin: 0 auto; + display: grid; + grid-template-columns: repeat(auto-fit, minmax(250px, 1fr)); + gap: 3rem; } -.font-size-xxl { - font-size: 2rem; +.footer-section h3 { + font-family: "Playfair Display", serif; + color: var(--accent-coral); + margin-bottom: var(--space-md, 1rem); + font-size: clamp(1.2rem, 2vw, 1.5rem); } -.font-size-heading { - font-size: 2.5rem; +.footer-section p, +.footer-section li { + color: var(--earth-cream); + line-height: 1.6; + margin-bottom: var(--space-xs, 0.5rem); } -.font-size-display { - font-size: 4.5rem; +.footer-section ul { + list-style: none; + padding: 0; } -.text-align-left { - text-align: left; +.footer-section li { + margin-bottom: var(--space-xs, 0.5rem); } -.text-align-center { +.footer-bottom { text-align: center; + margin-top: var(--space-2xl, 3rem); + padding-top: var(--space-xl, 2rem); + border-top: var(--border-medium, 4px) solid var(--earth-brown); + color: var(--earth-sand); } -.text-align-right { - text-align: right; +.footer-bottom p { + margin: 0; + font-size: var(--font-size-sm); + color: var(--earth-cream); } -.border-radius-xs, .rounded-1 { - border-radius: 0.25rem; +.footer-section a, +.footer-bottom a { + color: var(--earth-cream); + text-decoration: underline; } -.border-radius-sm, .rounded-2, .card { - border-radius: 0.5rem; +.footer-section a:hover, +.footer-bottom a:hover { + color: var(--accent-coral); } -.border-radius-md, .rounded-3 { - border-radius: 1rem; +/* Badge */ +.badge { + display: inline-block; + padding: var(--space-2xs, 0.25rem) var(--space-sm, 0.75rem); + font-size: 0.85rem; + font-weight: 600; + background: var(--earth-sage); + color: var(--earth-cream); + border: var(--border-thin, 2px) solid var(--earth-brown); + border-radius: var(--radius-pill); } -.border-radius-lg, .rounded-3 { - border-radius: 1.25rem; +.badge-accent { + background: var(--accent-coral-dark); } -.border-radius-xl, .rounded-5 { - border-radius: 1.5rem; +.badge-outline { + background: transparent; + color: inherit; } -.border-radius-xxl, .rounded-6 { - border-radius: 2rem; +.badges, .row-badges { + display: flex; + gap: var(--space-2xs, 0.25rem); + flex-wrap: wrap; } -.border-radius-circle { - border-radius: 10000rem; +/* Base button styles */ +.btn { + display: inline-block; + padding: var(--space-sm, 0.75rem) var(--space-lg, 1.5rem); + font-family: var(--font-family-sans); + font-size: var(--font-size-md, 1rem); + font-weight: 600; + text-decoration: none; + border-radius: var(--radius-md, 12px); + transition: all 0.2s; + cursor: pointer; + border: none; + text-align: center; } -.display-block, .nav a::after { - display: block; +.btn:hover, +.btn:focus { + transform: translate(2px, 2px); + box-shadow: 2px 2px 0 var(--earth-brown); } -.display-inline-block { - display: inline-block; +/* Primary button */ +.btn-primary { + background: var(--accent-coral-dark); + color: var(--white); + border: var(--border-medium, 4px) solid var(--earth-brown); + box-shadow: 4px 4px 0 var(--earth-brown); } -.display-flex, .overview, -.account, .nav-items, .nav { - display: flex; +.btn-primary:hover, +.btn-primary:focus { + background: var(--accent-coral-dark); + color: var(--white); } -.display-inline-flex { - display: inline-flex; +/* Secondary button */ +.btn-secondary { + background: var(--earth-cream); + color: var(--text-primary); + border: var(--border-medium, 4px) solid var(--earth-brown); + box-shadow: 4px 4px 0 var(--earth-sage); } -.display-none, #check, -.menu { - display: none; +.btn-secondary:hover, +.btn-secondary:focus { + background: var(--earth-sand); + color: var(--text-primary); + transform: translate(2px, 2px); + box-shadow: 2px 2px 0 var(--earth-sage); + outline: var(--border-thin) solid var(--earth-dark); } -:root { - --link-color-primary: #507687; - --link-color-primary-hover: #384B70; - --color-grey-50: #e8e8ec; - --color-grey-100: #f8f8f8; - --color-grey-200: #e3e3e3; - --color-grey-300: #bbb; - --color-grey-400: #949494; - --color-grey-500: #525759; - --color-grey-600: #424242; - --color-grey-800: #212529; - --color-grey-900: #010101; - --color-blue-50: #e6f4f1; - --color-blue-100: #bfe7fa; - --color-blue-200: #a2cadc; - --color-blue-300: #86adbf; - --color-blue-500: #6b91a3; - --color-blue-700: #507687; - --color-blue-800: #384B70; - --color-blue-900: #384B70; - --color-white: #fff; - --color-black: #000; -} - -@media (prefers-color-scheme: dark) { - :root { - color-scheme: light dark; - --bs-body-bg: var(--color-grey-700); - --bs-body-color: var(--color-grey-50); - --bs-secondary-color: var(--color-grey-300); - --bs-light-rgb: 105, 105, 105; - --aj-container-background: var(--bs-bg-opacity, .2); - --bs-text-dark: var(--color-grey-50); - } - body { - background-color: var(--color-grey-800) !important; - color: var(--color-grey-200) !important; - } - img { - filter: brightness(0.8) contrast(1.2); - } - .fa-solid, .fa-brand, i { - color: var(--color-grey-200) !important; - } - h1, .h1, h2, .h2, h3, .h3, h4, .h4, p, small, .small { - color: var(--color-grey-200); - font-weight: 350 !important; - } - .text-body-secondary, blockquote blockquote > p { - color: var(--sl-input-help-text-color); - } - .bg-light { - background-color: var(--aj-container-background) !important; - } - .text-dark { - color: var(--color-grey-950) !important; - } -} -.text-secondary, blockquote, blockquote > p { - color: var(--sl-input-help-text-color); +/* Outline button */ +.btn-outline { + background: rgba(255, 255, 255, 0.5) !important; + backdrop-filter: blur(24px); + filter: url("#lensFilter") saturate(120%) brightness(1.15); + color: var(--text-primary) !important; + border: var(--border-medium, 4px) solid var(--earth-brown) !important; + box-shadow: none !important; } -:root { - --sl-font-sans: "Oswald", system-ui, -apple-system, blinkmacsystemfont, avenir next, avenir, segoe ui, sans-serif; - --sl-font-mono: "Fira Mono", "Roboto Mono", "Oxygen Mono", "Ubuntu Monospace", "Source Code Pro", "Fira Mono", "Droid Sans Mono", "Courier New", monospace; - --sl-font-serif: "Lato", system-ui, -apple-system, blinkmacsystemfont, avenir next, avenir, segoe ui, sans-serif; - --bs-font-sans-serif: "Lato", system-ui, -apple-system, blinkmacsystemfont, avenir next, avenir, segoe ui, sans-serif; +.btn-outline:hover, +.btn-outline:focus { + color: var(--earth-cream); + text-decoration: underline; } -body { - font-family: "Lato", system-ui, -apple-system, blinkmacsystemfont, avenir next, avenir, segoe ui, sans-serif; - font-weight: 400; - font-size: 18px; +/* Button sizes */ +.btn-sm { + padding: var(--space-xs, 0.5rem) var(--space-md, 1rem) !important; + font-size: 0.9rem !important; + border-width: var(--border-thin) !important; } -h1, h2, h3, h4, h5 { - font-family: "Oswald", system-ui, -apple-system, blinkmacsystemfont, avenir next, avenir, segoe ui, sans-serif; - font-weight: 400; - color: var(--sl-color-neutral-900); +.btn-lg { + padding: var(--space-md, 1rem) var(--space-xl, 2rem) !important; + font-size: 1.1rem !important; } -.hero { - font-size: 72px; -} - -h1, .h1 { - font-size: 45px; - margin-top: 16px; - margin-right: 0; - margin-bottom: 16px; - margin-left: 0; - letter-spacing: 0; -} - -h2, .h2 { - font-size: 36px; - margin-top: 16px; - margin-right: 0; - margin-bottom: 16px; - margin-left: 0; - letter-spacing: 0; -} - -h3, .h3 { - font-size: 27px; - margin-top: 16px; - margin-right: 0; - margin-bottom: 16px; - margin-left: 0; - letter-spacing: 0; -} - -h4, .h4 { - font-size: 22.5px; - margin-top: 0px; - margin-right: 0; - margin-bottom: 8px; - margin-left: 0; - letter-spacing: 0; -} - -h5, .h5 { - font-size: 20.25px; - margin-top: 0px; - margin-right: 0; - margin-bottom: 4px; - margin-left: 0; - letter-spacing: 0; -} - -.paragraph, -p, -li { - font-size: 18px; - font-weight: 400; - margin-top: 0; - margin-bottom: 1rem; - letter-spacing: 0; - color: var(--sl-color-neutral-900); -} -.paragraph:last-child, -p:last-child, -li:last-child { - margin-bottom: 0; +/* Skip to main content link */ +.skip-link { + position: absolute; + top: -100px; + left: 0; + background: var(--accent-coral); + color: var(--white); + padding: var(--space-sm, 0.75rem) var(--space-lg, 1.5rem); + text-decoration: none; + font-weight: 600; + border: var(--border-medium, 4px) solid var(--earth-brown); + z-index: 2000; + clip: rect(0, 0, 0, 0); + overflow: hidden; } -.paragraph-bold, -.bold, -p.bold { - font-weight: 700 !important; +.skip-link:focus { + top: 1rem; + left: 1rem; + clip: auto; + overflow: visible; } -p.lead, .lead { - font-size: 22.5px; - font-weight: 300; - padding-right: calc(1.325rem + 0.9vw); - padding-left: calc(1.325rem + 0.9vw); -} -@media (min-width: 1200px) { - p.lead, .lead { - padding-right: 2rem; - } +.social-links { + display: flex; + gap: 1rem; + flex-wrap: wrap; } -@media (min-width: 1200px) { - p.lead, .lead { - padding-left: 2rem; - } + +.social-link { + display: inline-block; + padding: var(--space-xs, 0.5rem) var(--space-md, 1rem); + background: var(--earth-sage); + color: var(--white); + text-decoration: none !important; + border: var(--border-medium, 4px) solid var(--earth-sand); + border-radius: 8px; + font-weight: 500; + transition: all 0.3s; + font-size: 0.95rem; } -small, -.small { - font-size: 15.75px; - letter-spacing: 0.2px; - color: var(--sl-color-neutral-900); +.social-link:hover, +.social-link:focus { + background: var(--accent-coral); + transform: translateY(-2px); + color: var(--white) !important; } -li { - margin-bottom: 0.25rem; - letter-spacing: 0; +/* Base card */ +.card { + background: var(--earth-cream); + border: var(--border-thick, 6px) solid var(--earth-brown); + border-radius: var(--radius-xl, 20px); + padding: var(--space-lg, 1.5rem); + box-shadow: 8px 8px 0 var(--shadow-heavy); + transition: transform 0.3s, box-shadow 0.3s; } -code, -.code { - font-family: "Fira Mono", "Roboto Mono", "Oxygen Mono", "Ubuntu Monospace", "Source Code Pro", "Fira Mono", "Droid Sans Mono", "Courier New", monospace; - font-weight: 400; - font-size: 18px; - letter-spacing: 0; - background-color: var(--sl-color-neutral-200); - padding: 2px; - border-radius: 4px; +.card:hover, +.card:focus-within { + transform: translateY(-5px); + box-shadow: 12px 12px 0 var(--shadow-heavy); } -pre { - background-color: var(--sl-color-neutral-200); - border-radius: 4px; - padding: var(--sl-spacing-small); +/* Card with layered shadow */ +.card-layered { + background: var(--earth-cream); + border: var(--border-thick, 6px) solid var(--earth-brown); + border-radius: var(--radius-xl, 20px); + padding: var(--space-xl, 2rem); + box-shadow: 12px 12px 0 var(--earth-sage), 12px 12px 0 5px var(--earth-brown); } -.sub-header { - font-family: "Oswald", system-ui, -apple-system, blinkmacsystemfont, avenir next, avenir, segoe ui, sans-serif; - font-weight: 400; - font-size: 27px; - color: var(--sl-color-neutral-600); - letter-spacing: 1.6px; - line-height: normal; +/* Card with only shadow */ +.card-shadow { + background: var(--earth-cream); + border: none; + border-radius: var(--radius-lg, 16px); + padding: var(--space-md, 1.5rem); + box-shadow: 10px 10px 0 var(--shadow-heavy); } -.link-secondary, -a.link-secondary { - font-family: "Lato", system-ui, -apple-system, blinkmacsystemfont, avenir next, avenir, segoe ui, sans-serif; - font-weight: 700; - font-size: 18px; - font-style: normal; - line-height: normal; - letter-spacing: 0.8px; +/* Card with accent shadow */ +.card-accent { + background: var(--earth-cream); + border: var(--border-extra-thick, 8px) solid var(--earth-brown); + border-radius: var(--radius-xl, 20px); + overflow: hidden; + box-shadow: 16px 16px 0 var(--accent-coral), 16px 16px 0 6px var(--earth-brown); } -a, .icon-link { - font-family: "Lato", system-ui, -apple-system, blinkmacsystemfont, avenir next, avenir, segoe ui, sans-serif; - font-size: 18px; - font-style: normal; - line-height: normal; - letter-spacing: 0.8px; +/* Simple card (minimal shadow) */ +.card-flex { + display: flex; + flex-direction: column; } -blockquote > p { - font-size: 27px; +.card-flex p { + flex: 1 0; } -blockquote > p::before { - content: "'"; + +.card-with-columns .row { + display: flex; + align-items: flex-start; + gap: var(--space-md, 1rem); + align-self: stretch; } -blockquote > p::after { - content: "'"; +.card-with-columns .column { + display: flex; + align-items: flex-start; + flex: 1 0 0; + align-self: stretch; } -blockquote blockquote > p { - font-weight: 400; - font-size: 27px; -} -blockquote blockquote > p::before { - content: "- "; +/* Card header */ +.card-header { + margin-bottom: var(--space-md, 1rem); + padding-bottom: var(--space-md, 1rem); + border-bottom: var(--border-thin, 2px) solid var(--earth-sand); } -blockquote blockquote > p::after { - content: " -"; + +/* Card body */ +.card-body { + margin-bottom: var(--space-md); } -dt, dd { - font-weight: 400; +.card-body img { + object-fit: cover; + width: 100%; } -@media (prefers-color-scheme: dark) { - dt, dd { - color: var(--sl-color-neutral-900); + +@media (width >= 768px) { + .img-thumbnail { + max-width: 50%; } } -dt:not(dd), dd:not(dd) { - font-weight: 700; -} - -dt:not(first-child) { - padding-top: var(--sl-spacing-small); +.card-body:last-child { + margin-bottom: 0; } -b, .bold { - font-weight: 700; +/* Card footer */ +.card-footer { + margin-top: var(--space-md, 1rem); + padding-top: var(--space-md, 1rem); + border-top: var(--border-thin, 2px) solid var(--earth-sand); } -u, .underline { - text-decoration: underline; +.showcase-content { + padding: var(--space-lg, 2rem); } -.text-body-emphasis { - color: var(--sl-color-neutral-900); +.showcase-content h3 { + font-family: var(--font-family-serif); + font-size: clamp(1.3rem, 2.5vw, 1.8rem); + color: var(--text-primary); + margin-bottom: var(--space-sm, 1rem); } -.font-weight-semibold, .fw-semibold { - font-weight: 600; +.showcase-content p { + color: var(--text-secondary); + margin-bottom: var(--space-md, 1.5rem); + font-size: clamp(0.95rem, 1.5vw, 1rem); } -.font-weight-bold, .fw-bold { - font-weight: 800; +.showcase-small { + background: var(--earth-sand); + border: 4px solid var(--earth-brown); + border-radius: var(--radius-lg, 16px); + padding: var(--space-md, 1.5rem); + box-shadow: 6px 6px 0 var(--shadow-heavy); + transition: transform 0.3s; } -.figure-caption { - font-style: italic; +.showcase-small:hover, +.showcase-small:focus-within { + transform: translateY(-4px); } -.text-white { - color: var(--color-white) !important; +.showcase-small h4 { + font-family: var(--font-family-serif); + font-size: clamp(1.1rem, 2vw, 1.3rem); + color: var(--text-primary); + margin-bottom: var(--space-xs, 0.5rem); } -.text-value-pairs { - display: flex; - padding-top: 0; - padding-right: 1rem; - padding-bottom: 0; - padding-left: 1rem; - justify-content: space-between; - align-items: center; - row-gap: 8px; - align-self: stretch; - flex-wrap: wrap; +.showcase-small p { + color: var(--text-secondary); + font-size: clamp(0.9rem, 1.5vw, 0.95rem); } -.text-align-left { - text-align: left; -} -.text-body-secondary { - color: var(--sl-input-help-text-color); +/* About Section */ +.about-card { + background: var(--earth-cream); + border: var(--border-thick, 6px) solid var(--earth-brown); + padding: var(--space-2xl, 3rem); + border-radius: var(--border-radius-xl, 20px); + box-shadow: 12px 12px 0 var(--earth-sage), 12px 12px 0 5px var(--earth-brown); + margin: 0 auto; } -.text-body, blockquote > p, blockquote blockquote > p { - color: var(--sl-color-neutral-900); +@media (width <= 768px) { + .about-card { + box-shadow: 6px 6px 0 var(--earth-sage), 6px 6px 0 4px var(--earth-brown); + padding: var(--space-md, 1rem); + } + .about-grid { + grid-template-columns: 1fr !important; + } } - -.text-transform-uppercase { - text-transform: uppercase !important; +.about-card p { + font-size: clamp(1rem, 1.5vw, 1.1rem); + line-height: 1.8; + color: var(--text-primary); + margin-bottom: var(--space-lg, 1.5rem); } -.text-bg-light { - background-color: var(--sl-color-neutral-100); +.about-card p:last-child { + margin-bottom: 0; } -.text-break { - word-wrap: break-word !important; - word-break: break-word !important; +.about-grid { + display: grid; + grid-template-columns: repeat(auto-fit, minmax(350px, 1fr)); + gap: var(--space-xl, 2rem); + margin-top: var(--space-xl, 2rem); } -aside { - background-color: var(--sl-color-neutral-50); - box-shadow: 0 0 0 1px var(--sl-color-neutral-200); - border-radius: var(--sl-border-radius-medium); +.showcase-large { + background: var(--earth-cream); + border: var(--border-thick, 6px) solid var(--earth-brown); + border-radius: var(--radius-xl, 20px); + overflow: hidden; + box-shadow: 12px 12px 0 var(--accent-coral), 12px 12px 0 6px var(--earth-brown); + transition: transform 0.3s; } -.toc.markdown-toc { - --sl-link-color: var(--sl-color-primary-700); - padding-top: var(--sl-spacing-x-small); - padding-bottom: var(--sl-spacing-x-small); - border-radius: var(--sl-border-radius-large); - position: sticky; - top: 16px; -} -.toc.markdown-toc a { - color: var(--sl-link-color); -} -.toc.markdown-toc a:hover { - color: var(--sl-color-primary-800); -} -.toc.markdown-toc ul { - display: flex; - flex-wrap: wrap; - justify-content: space-evenly; - align-items: center; - margin-top: var(--sl-spacing-small); - margin-bottom: var(--sl-spacing-small); - padding-left: var(--sl-spacing-large); - list-style: decimal-leading-zero; -} -.toc.markdown-toc ul ul { - padding-left: var(--sl-spacing-large); -} -@media only screen and (max-width: 776px) { - .toc.markdown-toc ul { - justify-content: space-between; - list-style: none; - padding-right: 2rem !important; - margin-bottom: 0 !important; - } - .toc.markdown-toc ul li ul li { - display: none; +@media (width <= 768px) { + .showcase-large { + box-shadow: 6px 6px 0 var(--accent-coral), 6px 6px 0 4px var(--earth-brown); } } +.showcase-large:hover, +.showcase-large:focus-within { + transform: translateY(-8px); +} -footer, -.footer { +.showcase-image { + width: 100%; + height: 300px; + background: linear-gradient(135deg, var(--earth-sage) 0%, var(--earth-sand) 100%); display: flex; - padding-top: 1rem; - padding-right: calc(1.275rem + 0.3vw); - padding-bottom: 1rem; - padding-left: calc(1.275rem + 0.3vw); - background: rgb(39, 39, 42); align-items: center; - gap: 16px; - align-self: stretch; - border-top: 1px solid var(--sl-color-neutral-600); -} -@media (min-width: 1200px) { - footer, - .footer { - padding-right: 1.5rem; - } -} -@media (min-width: 1200px) { - footer, - .footer { - padding-left: 1.5rem; - } -} -@media (prefers-color-scheme: dark) { - footer, - .footer { - background: var(--sl-color-neutral-100); - color: var(--sl-color-neutral-50); - } -} -footer a, -.footer a { - text-decoration: none !important; - color: var(--sl-color-primary-700) !important; -} -footer a:hover, -.footer a:hover { - color: inherit !important; -} -footer a:hover, -.footer a:hover { - color: var(--sl-color-primary-500) !important; -} -footer ul, -.footer ul { - list-style: none !important; - margin-left: 0; -} -footer small, footer .small, -.footer small, -.footer .small { - color: var(--sl-color-neutral-950); - font-size: 13.5px; + justify-content: center; + padding: var(--space-md, 1rem); + font-size: var(--font-size-5xl, 3rem); + color: var(--earth-cream); + border-bottom: var(--border-thick, 6px) solid var(--earth-brown); + object-fit: contain; } -.footer-link { - color: var(--link-color-primary); -} -.footer-link:hover, .footer-link:active { - color: var(--link-color-primary-hover); +.showcase-image-dark { + background: linear-gradient(135deg, var(--black) 0%, var(--earth-dark) 100%); } -sl-button::part(base) { - font-weight: 700; - font-size: 18px; - font-family: "Lato", system-ui, -apple-system, blinkmacsystemfont, avenir next, avenir, segoe ui, sans-serif; +/* Small Projects */ +.small-showcase-cards { + grid-column: 1/-1; + display: grid; + grid-template-columns: repeat(auto-fit, minmax(250px, 1fr)); + gap: var(--space-md, 1.5rem); + margin-top: var(--space-sm, 1rem); } -sl-button.card-button::part(base) { - display: flex; - justify-content: center; - font-weight: 700; +/* Callouts */ +.callouts-grid { + display: grid; + grid-template-columns: repeat(auto-fit, minmax(300px, 1fr)); + gap: 2rem; + margin-top: 2rem; } -.button-overlay { +.callout { display: flex; flex-direction: column; - justify-content: center; + align-items: flex-end; + justify-content: space-between; + background: var(--earth-cream); + border: var(--border-thick, 6px) solid var(--accent-coral-dark); + padding: 2rem; + border-radius: var(--radius-xl, 20px); + box-shadow: 8px 8px 0 var(--shadow-heavy); + position: relative; + transition: transform 0.3s, box-shadow 0.3s; } -sl-button.project-button::part(base) { - border-color: #e6f4f1; - color: #e6f4f1; -} -sl-button.project-button::part(base):hover { - border-color: #86adbf; - color: #86adbf; +.callout:hover, +.callout:focus-within { + transform: translateY(-5px); + box-shadow: 12px 12px 0 var(--shadow-heavy); } -.card-cover { - background-repeat: no-repeat; - background-position: top right; - background-size: cover; +.callout::before { + content: '"'; + font-family: var(--font-family-serif); + font-size: var(--font-size-6xl, 4rem); + color: var(--accent-coral); + position: absolute; + top: 10px; + left: 20px; + line-height: 1; } -.text-shadow-1 { - text-shadow: 0 0.125rem 0.25rem rgba(0, 0, 0, 0.25); +.callout-text { + font-style: italic; + margin-bottom: var(--space-md, 1.5rem); + padding-top: var(--space-sm, 1rem); + color: var(--text-primary); } -.bi { - vertical-align: -0.125em; - fill: currentcolor; +.callout-author { + font-weight: 600; + color: var(--text-primary); + display: block; } -.card { - background-color: var(--sl-panel-background-color); - box-shadow: var(--sl-shadow-large); +.callout-role { + font-size: var(--font-size-sm, 0.9rem); + color: var(--text-secondary); } -.card-cover { - background-repeat: no-repeat; - background-position: center center; - background-size: cover; +pre { + background-color: var(--earth-cream); + padding: var(--space-md, 1rem); + border-radius: var(--radius-md, 12px); } -.card-link { - font-size: 0.875rem; - color: var(--color-white); +/* stylelint-disable */ +.gallery { + --size: 100px; + display: grid; + grid-template-columns: repeat(6, var(--size)); + grid-auto-rows: var(--size); + margin-bottom: var(--size); + place-items: start center; + gap: 5px; +} +.gallery:has(:hover) picture:not(:hover), .gallery:has(:focus) picture:not(:focus) { + filter: brightness(0.5) contrast(0.5); +} +.gallery picture { + object-fit: cover; + width: calc(var(--size) * 2); + height: calc(var(--size) * 2); + clip-path: path("M90,10 C100,0 100,0 110,10 190,90 190,90 190,90 200,100 200,100 190,110 190,110 110,190 110,190 100,200 100,200 90,190 90,190 10,110 10,110 0,100 0,100 10,90Z"); + transition: clip-path 0.25s, filter 0.75s; + grid-column: auto/span 2; + border-radius: 5px; +} +.gallery picture:nth-child(5n-1) { + grid-column: 2/span 2; +} +.gallery picture:hover, .gallery picture:focus { + clip-path: path("M0,0 C0,0 200,0 200,0 200,0 200,100 200,100 200,100 200,200 200,200 200,200 100,200 100,200 100,200 100,200 0,200 0,200 0,100 0,100 0,100 0,100 0,100Z"); + z-index: 1; + transition: clip-path 0.25s, filter 0.25s; +} +.gallery picture:focus { + outline: 1px dashed black; + outline-offset: -5px; +} + +/* Carousel */ +.carousel > input { + width: 1px; + height: 1px; + clip: rect(1px, 1px, 1px, 1px); + clip-path: inset(50%); + margin: -1px; + overflow: hidden; + padding: 0; + position: absolute; } -.card-link > i { - color: var(--color-white) !important; +.carousel > input:nth-of-type(15):checked ~ .carousel__slides .carousel__slide:first-of-type { + margin-left: -1400%; } -.card-link:hover { - color: inherit; - text-decoration: underline; +.carousel > input:nth-of-type(14):checked ~ .carousel__slides .carousel__slide:first-of-type { + margin-left: -1300%; } - -.background-overlay .card-link:hover { - color: var(--sl-color-primary-400); +.carousel > input:nth-of-type(13):checked ~ .carousel__slides .carousel__slide:first-of-type { + margin-left: -1200%; } - -.card-transform { - transform: translateZ(0); - transition-duration: 0.7s; - transition-property: transform; +.carousel > input:nth-of-type(12):checked ~ .carousel__slides .carousel__slide:first-of-type { + margin-left: -1100%; } -.card-transform:hover, .card-transform:focus { - transform: scale(1.05); +.carousel > input:nth-of-type(11):checked ~ .carousel__slides .carousel__slide:first-of-type { + margin-left: -1000%; } - -/* Nav */ -.nav { - height: 70px; - background: var(--color-grey-900); - color: var(--sl-color-neutral-50); - padding: 0 2rem; - justify-content: space-between; - align-items: center; - z-index: var(--sl-z-index-drawer); +.carousel > input:nth-of-type(10):checked ~ .carousel__slides .carousel__slide:first-of-type { + margin-left: -900%; } - -.logo h2 { - font-style: italic; - text-decoration: overline; - color: var(--sl-color-primary-800); - cursor: pointer; - margin: 0 0.5rem; +.carousel > input:nth-of-type(9):checked ~ .carousel__slides .carousel__slide:first-of-type { + margin-left: -800%; } - -.nav-items { - justify-content: space-between; +.carousel > input:nth-of-type(8):checked ~ .carousel__slides .carousel__slide:first-of-type { + margin-left: -700%; } - -.overview, -.account { - align-items: center; +.carousel > input:nth-of-type(7):checked ~ .carousel__slides .carousel__slide:first-of-type { + margin-left: -600%; } - -.overview { - margin-right: 4rem; +.carousel > input:nth-of-type(6):checked ~ .carousel__slides .carousel__slide:first-of-type { + margin-left: -500%; } - -.nav li { - list-style: none; - margin: 0 0.5rem; +.carousel > input:nth-of-type(5):checked ~ .carousel__slides .carousel__slide:first-of-type { + margin-left: -400%; } - -.nav a { - text-decoration: none; - color: var(--sl-color-neutral-900); +.carousel > input:nth-of-type(4):checked ~ .carousel__slides .carousel__slide:first-of-type { + margin-left: -300%; } - -.nav a:hover, -.nav a.nav-link.active { - color: var(--sl-color-primary-600); +.carousel > input:nth-of-type(3):checked ~ .carousel__slides .carousel__slide:first-of-type { + margin-left: -200%; } - -.nav a::after { - content: ""; - height: 3px; - background: var(--sl-color-primary-600); - width: 0%; - transition: all ease-in-out 300ms; +.carousel > input:nth-of-type(2):checked ~ .carousel__slides .carousel__slide:first-of-type { + margin-left: -100%; } - -.nav a:hover::after { - width: 100%; +.carousel > input:nth-of-type(1):checked ~ .carousel__slides .carousel__slide:first-of-type { + margin-left: 0%; } - -.nav-icon { - display: flex; - justify-content: center; +.carousel > input:nth-of-type(1):checked ~ .carousel__thumbnails li:nth-of-type(1) { + box-shadow: 0 0 0 5px rgba(0, 0, 255, 0.5); } - -/* Responsive */ -@media (max-width: 776px) { - .nav-items { - padding: calc(1.325rem + 0.9vw); - display: none; - position: fixed; - top: 0; - right: 0; - height: 100vh; - width: 250px; - flex-direction: column; - justify-content: space-evenly; - z-index: var(--sl-z-index-drawer); - background-color: var(--color-grey-900); - transition: all ease-in-out 500ms; - } +.carousel > input:nth-of-type(2):checked ~ .carousel__thumbnails li:nth-of-type(2) { + box-shadow: 0 0 0 5px rgba(0, 0, 255, 0.5); } -@media (max-width: 776px) and (min-width: 1200px) { - .nav-items { - padding: 2rem; - } +.carousel > input:nth-of-type(3):checked ~ .carousel__thumbnails li:nth-of-type(3) { + box-shadow: 0 0 0 5px rgba(0, 0, 255, 0.5); } -@media (max-width: 776px) { - .overview, - .account { - flex-direction: column; - width: auto; - } - .overview { - margin: 0; - } - .nav li { - margin: 1rem 0; - } - .nav a { - display: inline-block; - } - .nav a:hover { - margin-left: 2px; - transition: all ease-in-out 300ms; - } - .menu { - padding: 0.5rem; - display: inline-block; - position: fixed; - top: 0.5rem; - right: 0.5rem; - background: #131316; - border-radius: var(--sl-border-radius-circle); - color: var(--sl-color-neutral-950); - z-index: calc(var(--sl-z-index-drawer) + 1); - } +.carousel > input:nth-of-type(4):checked ~ .carousel__thumbnails li:nth-of-type(4) { + box-shadow: 0 0 0 5px rgba(0, 0, 255, 0.5); } -@media (max-width: 776px) and (prefers-color-scheme: dark) { - .menu { - background: #131316; - } +.carousel > input:nth-of-type(5):checked ~ .carousel__thumbnails li:nth-of-type(5) { + box-shadow: 0 0 0 5px rgba(0, 0, 255, 0.5); } -@media (max-width: 776px) { - .menu:hover { - background: rgb(249.6341463415, 249.6341463415, 250.3658536585); - color: rgb(25.5, 25.5, 25.5); - transition: all ease-in-out 300ms; - cursor: pointer; - } - #check:checked ~ .nav-items { - right: 0; - display: block; - } +.carousel > input:nth-of-type(6):checked ~ .carousel__thumbnails li:nth-of-type(6) { + box-shadow: 0 0 0 5px rgba(0, 0, 255, 0.5); } -body { - margin: 0; +.carousel > input:nth-of-type(7):checked ~ .carousel__thumbnails li:nth-of-type(7) { + box-shadow: 0 0 0 5px rgba(0, 0, 255, 0.5); } - -.print { - display: none !important; +.carousel > input:nth-of-type(8):checked ~ .carousel__thumbnails li:nth-of-type(8) { + box-shadow: 0 0 0 5px rgba(0, 0, 255, 0.5); } - -.content { - display: flex; - max-width: 1920px; - margin-left: auto; - margin-right: auto; - width: 100%; - min-height: calc(100vh - 80px); - flex-direction: column; +.carousel > input:nth-of-type(9):checked ~ .carousel__thumbnails li:nth-of-type(9) { + box-shadow: 0 0 0 5px rgba(0, 0, 255, 0.5); } - -.divider-large { - height: 3rem; - background-color: rgba(0, 0, 0, 0.1); - border: solid rgba(0, 0, 0, 0.15); - border-width: 1px 0; - box-shadow: inset 0 0.5em 1.5em rgba(0, 0, 0, 0.1), inset 0 0.125em 0.5em rgba(0, 0, 0, 0.15); +.carousel > input:nth-of-type(10):checked ~ .carousel__thumbnails li:nth-of-type(10) { + box-shadow: 0 0 0 5px rgba(0, 0, 255, 0.5); } - -.navbar { - background-color: var(--color-grey-900); +.carousel > input:nth-of-type(11):checked ~ .carousel__thumbnails li:nth-of-type(11) { + box-shadow: 0 0 0 5px rgba(0, 0, 255, 0.5); +} +.carousel > input:nth-of-type(12):checked ~ .carousel__thumbnails li:nth-of-type(12) { + box-shadow: 0 0 0 5px rgba(0, 0, 255, 0.5); +} +.carousel > input:nth-of-type(13):checked ~ .carousel__thumbnails li:nth-of-type(13) { + box-shadow: 0 0 0 5px rgba(0, 0, 255, 0.5); +} +.carousel > input:nth-of-type(14):checked ~ .carousel__thumbnails li:nth-of-type(14) { + box-shadow: 0 0 0 5px rgba(0, 0, 255, 0.5); +} +.carousel > input:nth-of-type(15):checked ~ .carousel__thumbnails li:nth-of-type(15) { + box-shadow: 0 0 0 5px rgba(0, 0, 255, 0.5); } -.overlay { +.carousel__slides { + position: relative; + z-index: 1; + padding: 0; + margin: 0; + overflow: hidden; + white-space: nowrap; + box-sizing: border-box; display: flex; - justify-content: center; - align-items: center; - height: 500px; - min-height: 500px; - background: rgba(0, 0, 0, 0.8); - background-repeat: no-repeat; - background-size: contain; } -.imager { - padding-right: 0; - padding-left: 0; - background: url("../img/dashboard_minimal.png"); - background-size: cover; +.carousel__slide { + position: relative; + display: block; + flex: 1 0 100%; + width: 100%; + height: 100%; + overflow: hidden; + transition: all 300ms ease-out; + vertical-align: top; + box-sizing: border-box; + white-space: normal; } - -.portfolio-img-background { - padding-right: 0; - padding-left: 0; - background: url("../img/AdamJolicoeur_dot_com-minimal.png"); - background-size: cover; +.carousel__slide figure { + display: flex; + margin: 0; } - -.paragraph-inset { - padding-top: 0; - padding-right: 1rem; - padding-bottom: 0; - padding-left: 1rem; +.carousel__slide div { + position: relative; + width: 100%; } - -.job { - font-family: "Lato", system-ui, -apple-system, blinkmacsystemfont, avenir next, avenir, segoe ui, sans-serif; - font-weight: 400; - align-self: stretch; - word-wrap: break-word; +.carousel__slide div::before { + display: block; + content: ""; + width: 100%; + padding-top: 66.6666666667%; +} +.carousel__slide div > img { + position: absolute; + inset: 0; + width: 100%; + height: 100%; } -.job--company-name { - margin-bottom: 8px; +.carousel__slide img { + display: block; + flex: 1 1 auto; + object-fit: cover; } -.job--company-role { - margin-bottom: 8px; - color: var(--sl-color-neutral-700); +.carousel__slide figcaption { + align-self: flex-end; + padding: 20px 20px 0; + flex: 0 0 auto; + width: 25%; + min-width: 150px; } -.job--company-dates { - margin-bottom: 0; - color: var(--sl-color-neutral-700); +.carousel__slide .credit { + margin-top: 1rem; + color: rgba(0, 0, 0, 0.5); + display: block; } - -.column-list-item { - font-family: "Lato", system-ui, -apple-system, blinkmacsystemfont, avenir next, avenir, segoe ui, sans-serif; - font-weight: 400; - margin-bottom: 0; - align-self: stretch; - word-wrap: break-word; +.carousel__slide.scrollable { + overflow-y: scroll; } -.list-unstyled { +.carousel__thumbnails { list-style: none; + padding: 0; + display: flex; + margin: 0 -10px; } - -.hidden { - visibility: hidden !important; +.carousel__slides + .carousel__thumbnails { + margin-top: 20px; } - -.anchor-link { - visibility: hidden; +.carousel__thumbnails li { + flex: 1 1 auto; + max-width: calc(16.6666666667% - 20px); + margin: 0 10px; + transition: all 300ms ease-in-out; } - -.dark-background * { - color: var(--sl-color-neutral-50) !important; +.carousel__thumbnails label { + display: block; + position: relative; } - -.img-fluid { - max-width: 100%; - height: auto; +.carousel__thumbnails label::before { + display: block; + content: ""; + width: 100%; + padding-top: 100%; } - -.background-overlay { - background: rgba(0, 0, 0, 0.8); +.carousel__thumbnails label > img { + position: absolute; + inset: 0; + width: 100%; + height: 100%; +} +.carousel__thumbnails label:hover, .carousel__thumbnails label:focus { + cursor: pointer; } -.background-overlay-light { - background: rgba(0, 0, 0, 0.5); +.carousel__thumbnails label:hover img, .carousel__thumbnails label:focus img { + box-shadow: 0 0 0 1px rgba(0, 0, 0, 0.25); + transition: all 300ms ease-in-out; } - -.figure-img { - margin-bottom: 0.5rem; - line-height: 1; +.carousel__thumbnails img { + display: block; + width: 100%; + height: 100%; + object-fit: cover; } -.banner { - font-weight: 600; - font-size: 18px; - padding: 0.5rem 1rem; - margin: 0.5rem 0; - background-color: rgba(0, 127, 200, 0.5); - border-top-left-radius: 1rem; - border-bottom-right-radius: 1rem; - box-shadow: 0 1px 0 0 rgba(232, 232, 236, 0.5); - color: var(--color-white); -} +/* stylelint-enable */ +/* stylint-enable */ /*# sourceMappingURL=style.css.map */ diff --git a/docs/css/style.css.map b/docs/css/style.css.map index b59078f8..5961062c 100644 --- a/docs/css/style.css.map +++ b/docs/css/style.css.map @@ -1 +1 @@ -{"version":3,"sourceRoot":"","sources":["../../src/sass/style.scss","../../node_modules/bootstrap/scss/mixins/_banner.scss","../../node_modules/bootstrap/scss/_containers.scss","../../node_modules/bootstrap/scss/mixins/_container.scss","../../node_modules/bootstrap/scss/mixins/_breakpoints.scss","../../node_modules/bootstrap/scss/_variables.scss","../../node_modules/bootstrap/scss/_grid.scss","../../node_modules/bootstrap/scss/mixins/_grid.scss","../../node_modules/bootstrap/scss/mixins/_utilities.scss","../../node_modules/bootstrap/scss/utilities/_api.scss","../../src/sass/_animations.scss","../../src/sass/_font-oswald.scss","../../src/sass/_font-lato.scss","../../src/sass/_colors.scss","../../src/sass/_variables.scss","../../src/sass/_mixins.scss","../../src/sass/_typography.scss","../../node_modules/bootstrap/scss/vendor/_rfs.scss","../../src/sass/_toc.scss","../../src/sass/_footer.scss","../../src/sass/_buttons.scss","../../src/sass/_cards.scss","../../src/sass/_navigation.scss","../../src/sass/_general.scss"],"names":[],"mappings":";AAAA;ACCE;AAAA;AAAA;AAAA;AAAA;ACKA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;ECHA;EACA;EACA;EACA;EACA;EACA;EACA;;;ACsDE;EF5CE;IACE,WGkee;;;ADvbnB;EF5CE;IACE,WGkee;;;ADvbnB;EF5CE;IACE,WGkee;;;ADvbnB;EF5CE;IACE,WGkee;;;ADvbnB;EF5CE;IACE,WGkee;;;AClfvB;EAEI;EAAA;EAAA;EAAA;EAAA;EAAA;;;AAKF;ECNA;EACA;EACA;EACA;EAEA;EACA;EACA;;ADEE;ECGF;EAIA;EACA;EACA;EACA;EACA;EACA;;;AA+CI;EACE;;;AAGF;EApCJ;EACA;;;AAcA;EACE;EACA;;;AAFF;EACE;EACA;;;AAFF;EACE;EACA;;;AAFF;EACE;EACA;;;AAFF;EACE;EACA;;;AAFF;EACE;EACA;;;AA+BE;EAhDJ;EACA;;;AAqDQ;EAhEN;EACA;;;AA+DM;EAhEN;EACA;;;AA+DM;EAhEN;EACA;;;AA+DM;EAhEN;EACA;;;AA+DM;EAhEN;EACA;;;AA+DM;EAhEN;EACA;;;AA+DM;EAhEN;EACA;;;AA+DM;EAhEN;EACA;;;AA+DM;EAhEN;EACA;;;AA+DM;EAhEN;EACA;;;AA+DM;EAhEN;EACA;;;AA+DM;EAhEN;EACA;;;AAuEQ;EAxDV;;;AAwDU;EAxDV;;;AAwDU;EAxDV;;;AAwDU;EAxDV;;;AAwDU;EAxDV;;;AAwDU;EAxDV;;;AAwDU;EAxDV;;;AAwDU;EAxDV;;;AAwDU;EAxDV;;;AAwDU;EAxDV;;;AAwDU;EAxDV;;;AAmEM;AAAA;EAEE;;;AAGF;AAAA;EAEE;;;AAPF;AAAA;EAEE;;;AAGF;AAAA;EAEE;;;AAPF;AAAA;EAEE;;;AAGF;AAAA;EAEE;;;AAPF;AAAA;EAEE;;;AAGF;AAAA;EAEE;;;AAPF;AAAA;EAEE;;;AAGF;AAAA;EAEE;;;AAPF;AAAA;EAEE;;;AAGF;AAAA;EAEE;;;AH1DN;EGUE;IACE;;EAGF;IApCJ;IACA;;EAcA;IACE;IACA;;EAFF;IACE;IACA;;EAFF;IACE;IACA;;EAFF;IACE;IACA;;EAFF;IACE;IACA;;EAFF;IACE;IACA;;EA+BE;IAhDJ;IACA;;EAqDQ;IAhEN;IACA;;EA+DM;IAhEN;IACA;;EA+DM;IAhEN;IACA;;EA+DM;IAhEN;IACA;;EA+DM;IAhEN;IACA;;EA+DM;IAhEN;IACA;;EA+DM;IAhEN;IACA;;EA+DM;IAhEN;IACA;;EA+DM;IAhEN;IACA;;EA+DM;IAhEN;IACA;;EA+DM;IAhEN;IACA;;EA+DM;IAhEN;IACA;;EAuEQ;IAxDV;;EAwDU;IAxDV;;EAwDU;IAxDV;;EAwDU;IAxDV;;EAwDU;IAxDV;;EAwDU;IAxDV;;EAwDU;IAxDV;;EAwDU;IAxDV;;EAwDU;IAxDV;;EAwDU;IAxDV;;EAwDU;IAxDV;;EAwDU;IAxDV;;EAmEM;AAAA;IAEE;;EAGF;AAAA;IAEE;;EAPF;AAAA;IAEE;;EAGF;AAAA;IAEE;;EAPF;AAAA;IAEE;;EAGF;AAAA;IAEE;;EAPF;AAAA;IAEE;;EAGF;AAAA;IAEE;;EAPF;AAAA;IAEE;;EAGF;AAAA;IAEE;;EAPF;AAAA;IAEE;;EAGF;AAAA;IAEE;;;AH1DN;EGUE;IACE;;EAGF;IApCJ;IACA;;EAcA;IACE;IACA;;EAFF;IACE;IACA;;EAFF;IACE;IACA;;EAFF;IACE;IACA;;EAFF;IACE;IACA;;EAFF;IACE;IACA;;EA+BE;IAhDJ;IACA;;EAqDQ;IAhEN;IACA;;EA+DM;IAhEN;IACA;;EA+DM;IAhEN;IACA;;EA+DM;IAhEN;IACA;;EA+DM;IAhEN;IACA;;EA+DM;IAhEN;IACA;;EA+DM;IAhEN;IACA;;EA+DM;IAhEN;IACA;;EA+DM;IAhEN;IACA;;EA+DM;IAhEN;IACA;;EA+DM;IAhEN;IACA;;EA+DM;IAhEN;IACA;;EAuEQ;IAxDV;;EAwDU;IAxDV;;EAwDU;IAxDV;;EAwDU;IAxDV;;EAwDU;IAxDV;;EAwDU;IAxDV;;EAwDU;IAxDV;;EAwDU;IAxDV;;EAwDU;IAxDV;;EAwDU;IAxDV;;EAwDU;IAxDV;;EAwDU;IAxDV;;EAmEM;AAAA;IAEE;;EAGF;AAAA;IAEE;;EAPF;AAAA;IAEE;;EAGF;AAAA;IAEE;;EAPF;AAAA;IAEE;;EAGF;AAAA;IAEE;;EAPF;AAAA;IAEE;;EAGF;AAAA;IAEE;;EAPF;AAAA;IAEE;;EAGF;AAAA;IAEE;;EAPF;AAAA;IAEE;;EAGF;AAAA;IAEE;;;AH1DN;EGUE;IACE;;EAGF;IApCJ;IACA;;EAcA;IACE;IACA;;EAFF;IACE;IACA;;EAFF;IACE;IACA;;EAFF;IACE;IACA;;EAFF;IACE;IACA;;EAFF;IACE;IACA;;EA+BE;IAhDJ;IACA;;EAqDQ;IAhEN;IACA;;EA+DM;IAhEN;IACA;;EA+DM;IAhEN;IACA;;EA+DM;IAhEN;IACA;;EA+DM;IAhEN;IACA;;EA+DM;IAhEN;IACA;;EA+DM;IAhEN;IACA;;EA+DM;IAhEN;IACA;;EA+DM;IAhEN;IACA;;EA+DM;IAhEN;IACA;;EA+DM;IAhEN;IACA;;EA+DM;IAhEN;IACA;;EAuEQ;IAxDV;;EAwDU;IAxDV;;EAwDU;IAxDV;;EAwDU;IAxDV;;EAwDU;IAxDV;;EAwDU;IAxDV;;EAwDU;IAxDV;;EAwDU;IAxDV;;EAwDU;IAxDV;;EAwDU;IAxDV;;EAwDU;IAxDV;;EAwDU;IAxDV;;EAmEM;AAAA;IAEE;;EAGF;AAAA;IAEE;;EAPF;AAAA;IAEE;;EAGF;AAAA;IAEE;;EAPF;AAAA;IAEE;;EAGF;AAAA;IAEE;;EAPF;AAAA;IAEE;;EAGF;AAAA;IAEE;;EAPF;AAAA;IAEE;;EAGF;AAAA;IAEE;;EAPF;AAAA;IAEE;;EAGF;AAAA;IAEE;;;AH1DN;EGUE;IACE;;EAGF;IApCJ;IACA;;EAcA;IACE;IACA;;EAFF;IACE;IACA;;EAFF;IACE;IACA;;EAFF;IACE;IACA;;EAFF;IACE;IACA;;EAFF;IACE;IACA;;EA+BE;IAhDJ;IACA;;EAqDQ;IAhEN;IACA;;EA+DM;IAhEN;IACA;;EA+DM;IAhEN;IACA;;EA+DM;IAhEN;IACA;;EA+DM;IAhEN;IACA;;EA+DM;IAhEN;IACA;;EA+DM;IAhEN;IACA;;EA+DM;IAhEN;IACA;;EA+DM;IAhEN;IACA;;EA+DM;IAhEN;IACA;;EA+DM;IAhEN;IACA;;EA+DM;IAhEN;IACA;;EAuEQ;IAxDV;;EAwDU;IAxDV;;EAwDU;IAxDV;;EAwDU;IAxDV;;EAwDU;IAxDV;;EAwDU;IAxDV;;EAwDU;IAxDV;;EAwDU;IAxDV;;EAwDU;IAxDV;;EAwDU;IAxDV;;EAwDU;IAxDV;;EAwDU;IAxDV;;EAmEM;AAAA;IAEE;;EAGF;AAAA;IAEE;;EAPF;AAAA;IAEE;;EAGF;AAAA;IAEE;;EAPF;AAAA;IAEE;;EAGF;AAAA;IAEE;;EAPF;AAAA;IAEE;;EAGF;AAAA;IAEE;;EAPF;AAAA;IAEE;;EAGF;AAAA;IAEE;;EAPF;AAAA;IAEE;;EAGF;AAAA;IAEE;;;AH1DN;EGUE;IACE;;EAGF;IApCJ;IACA;;EAcA;IACE;IACA;;EAFF;IACE;IACA;;EAFF;IACE;IACA;;EAFF;IACE;IACA;;EAFF;IACE;IACA;;EAFF;IACE;IACA;;EA+BE;IAhDJ;IACA;;EAqDQ;IAhEN;IACA;;EA+DM;IAhEN;IACA;;EA+DM;IAhEN;IACA;;EA+DM;IAhEN;IACA;;EA+DM;IAhEN;IACA;;EA+DM;IAhEN;IACA;;EA+DM;IAhEN;IACA;;EA+DM;IAhEN;IACA;;EA+DM;IAhEN;IACA;;EA+DM;IAhEN;IACA;;EA+DM;IAhEN;IACA;;EA+DM;IAhEN;IACA;;EAuEQ;IAxDV;;EAwDU;IAxDV;;EAwDU;IAxDV;;EAwDU;IAxDV;;EAwDU;IAxDV;;EAwDU;IAxDV;;EAwDU;IAxDV;;EAwDU;IAxDV;;EAwDU;IAxDV;;EAwDU;IAxDV;;EAwDU;IAxDV;;EAwDU;IAxDV;;EAmEM;AAAA;IAEE;;EAGF;AAAA;IAEE;;EAPF;AAAA;IAEE;;EAGF;AAAA;IAEE;;EAPF;AAAA;IAEE;;EAGF;AAAA;IAEE;;EAPF;AAAA;IAEE;;EAGF;AAAA;IAEE;;EAPF;AAAA;IAEE;;EAGF;AAAA;IAEE;;EAPF;AAAA;IAEE;;EAGF;AAAA;IAEE;;;ACvDF;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;EAAA;;;AAPJ;EAOI;EAAA;;;AAPJ;EAOI;EAAA;;;AAPJ;EAOI;EAAA;;;AAPJ;EAOI;EAAA;;;AAPJ;EAOI;EAAA;;;AAPJ;EAOI;EAAA;;;AAPJ;EAOI;EAAA;;;AAPJ;EAOI;EAAA;;;AAPJ;EAOI;EAAA;;;AAPJ;EAOI;EAAA;;;AAPJ;EAOI;EAAA;;;AAPJ;EAOI;EAAA;;;AAPJ;EAOI;EAAA;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;EAAA;;;AAPJ;EAOI;EAAA;;;AAPJ;EAOI;EAAA;;;AAPJ;EAOI;EAAA;;;AAPJ;EAOI;EAAA;;;AAPJ;EAOI;EAAA;;;AAPJ;EAOI;EAAA;;;AAPJ;EAOI;EAAA;;;AAPJ;EAOI;EAAA;;;AAPJ;EAOI;EAAA;;;AAPJ;EAOI;EAAA;;;AAPJ;EAOI;EAAA;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AJVR;EIGI;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;IAAA;;EAPJ;IAOI;IAAA;;EAPJ;IAOI;IAAA;;EAPJ;IAOI;IAAA;;EAPJ;IAOI;IAAA;;EAPJ;IAOI;IAAA;;EAPJ;IAOI;IAAA;;EAPJ;IAOI;IAAA;;EAPJ;IAOI;IAAA;;EAPJ;IAOI;IAAA;;EAPJ;IAOI;IAAA;;EAPJ;IAOI;IAAA;;EAPJ;IAOI;IAAA;;EAPJ;IAOI;IAAA;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;IAAA;;EAPJ;IAOI;IAAA;;EAPJ;IAOI;IAAA;;EAPJ;IAOI;IAAA;;EAPJ;IAOI;IAAA;;EAPJ;IAOI;IAAA;;EAPJ;IAOI;IAAA;;EAPJ;IAOI;IAAA;;EAPJ;IAOI;IAAA;;EAPJ;IAOI;IAAA;;EAPJ;IAOI;IAAA;;EAPJ;IAOI;IAAA;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;;AJVR;EIGI;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;IAAA;;EAPJ;IAOI;IAAA;;EAPJ;IAOI;IAAA;;EAPJ;IAOI;IAAA;;EAPJ;IAOI;IAAA;;EAPJ;IAOI;IAAA;;EAPJ;IAOI;IAAA;;EAPJ;IAOI;IAAA;;EAPJ;IAOI;IAAA;;EAPJ;IAOI;IAAA;;EAPJ;IAOI;IAAA;;EAPJ;IAOI;IAAA;;EAPJ;IAOI;IAAA;;EAPJ;IAOI;IAAA;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;IAAA;;EAPJ;IAOI;IAAA;;EAPJ;IAOI;IAAA;;EAPJ;IAOI;IAAA;;EAPJ;IAOI;IAAA;;EAPJ;IAOI;IAAA;;EAPJ;IAOI;IAAA;;EAPJ;IAOI;IAAA;;EAPJ;IAOI;IAAA;;EAPJ;IAOI;IAAA;;EAPJ;IAOI;IAAA;;EAPJ;IAOI;IAAA;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;;AJVR;EIGI;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;IAAA;;EAPJ;IAOI;IAAA;;EAPJ;IAOI;IAAA;;EAPJ;IAOI;IAAA;;EAPJ;IAOI;IAAA;;EAPJ;IAOI;IAAA;;EAPJ;IAOI;IAAA;;EAPJ;IAOI;IAAA;;EAPJ;IAOI;IAAA;;EAPJ;IAOI;IAAA;;EAPJ;IAOI;IAAA;;EAPJ;IAOI;IAAA;;EAPJ;IAOI;IAAA;;EAPJ;IAOI;IAAA;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;IAAA;;EAPJ;IAOI;IAAA;;EAPJ;IAOI;IAAA;;EAPJ;IAOI;IAAA;;EAPJ;IAOI;IAAA;;EAPJ;IAOI;IAAA;;EAPJ;IAOI;IAAA;;EAPJ;IAOI;IAAA;;EAPJ;IAOI;IAAA;;EAPJ;IAOI;IAAA;;EAPJ;IAOI;IAAA;;EAPJ;IAOI;IAAA;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;;AJVR;EIGI;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;IAAA;;EAPJ;IAOI;IAAA;;EAPJ;IAOI;IAAA;;EAPJ;IAOI;IAAA;;EAPJ;IAOI;IAAA;;EAPJ;IAOI;IAAA;;EAPJ;IAOI;IAAA;;EAPJ;IAOI;IAAA;;EAPJ;IAOI;IAAA;;EAPJ;IAOI;IAAA;;EAPJ;IAOI;IAAA;;EAPJ;IAOI;IAAA;;EAPJ;IAOI;IAAA;;EAPJ;IAOI;IAAA;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;IAAA;;EAPJ;IAOI;IAAA;;EAPJ;IAOI;IAAA;;EAPJ;IAOI;IAAA;;EAPJ;IAOI;IAAA;;EAPJ;IAOI;IAAA;;EAPJ;IAOI;IAAA;;EAPJ;IAOI;IAAA;;EAPJ;IAOI;IAAA;;EAPJ;IAOI;IAAA;;EAPJ;IAOI;IAAA;;EAPJ;IAOI;IAAA;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;;AJVR;EIGI;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;IAAA;;EAPJ;IAOI;IAAA;;EAPJ;IAOI;IAAA;;EAPJ;IAOI;IAAA;;EAPJ;IAOI;IAAA;;EAPJ;IAOI;IAAA;;EAPJ;IAOI;IAAA;;EAPJ;IAOI;IAAA;;EAPJ;IAOI;IAAA;;EAPJ;IAOI;IAAA;;EAPJ;IAOI;IAAA;;EAPJ;IAOI;IAAA;;EAPJ;IAOI;IAAA;;EAPJ;IAOI;IAAA;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;IAAA;;EAPJ;IAOI;IAAA;;EAPJ;IAOI;IAAA;;EAPJ;IAOI;IAAA;;EAPJ;IAOI;IAAA;;EAPJ;IAOI;IAAA;;EAPJ;IAOI;IAAA;;EAPJ;IAOI;IAAA;;EAPJ;IAOI;IAAA;;EAPJ;IAOI;IAAA;;EAPJ;IAOI;IAAA;;EAPJ;IAOI;IAAA;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;;ACnCZ;ED4BQ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;;ARvEZ;AACA;AAAA;AAAA;AAAA;AUHA;AAAA;AAAA;AAGA;EACE;EACA;EACA;EACA;EACA;EACA;;;AAEF;EACE;EACA;EACA;EACA;EACA;;;AAGF;EACE;IAAI;;EACJ;IAAK;;EACL;IAAK;;EACL;IAAM;;;AAGR;EACE;IAAI;;EACJ;IAAK;;EACL;IAAK;;EACL;IAAM;;;AAGR;EACE;EACA;;;AAGF;EACE;EACA;;;AAGF;EACE;EACA;;;AC1CF;EACE;EACA;EACA;EACA;;;AAEF;EACE;EACA;EACA;EACA;;;AAEF;EACE;EACA;EACA;EACA;;;AAEF;EACE;EACA;EACA;EACA;;;AAEF;EACE;EACA;EACA;EACA;;;AC/BF;EACE;EACA;EACA;;;AAGF;EACE;EACA;EACA;;;AAGF;EACE;EACA;EACA;;;AAGF;EACE;EACA;EACA;;;AAGF;EACE;EACA;EACA;;;AAGF;EACE;EACA;EACA;;;AAGF;EACE;EACA;EACA;;;AAGF;EACE;EACA;EACA;;;AAGF;EACE;EACA;EACA;;;AAGF;EACE;EACA;EACA;;;ACIF;EACE;EACA;EAEA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EAEA;EACA;EACA;EAIA;EACA;;;AAEF;EACE;IACE;IACA;IACA;IACA;IACA;IACA;IACA;;EAEF;IACE;IACA;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;IACA;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;;AAGJ;EACE;;;ACxHF;EACE;;;ADwDF;EACE;EACA;EAEA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EAEA;EACA;EACA;EAIA;EACA;;;AAEF;EACE;IACE;IACA;IACA;IACA;IACA;IACA;IACA;;EAEF;IACE;IACA;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;IACA;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;;AAGJ;EACE;;;ACxHF;EACE;;;ACAF;AA4LA;AFpIA;EACE;EACA;EAEA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EAEA;EACA;EACA;EAIA;EACA;;;AAEF;EACE;IACE;IACA;IACA;IACA;IACA;IACA;IACA;;EAEF;IACE;IACA;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;IACA;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;;AAGJ;EACE;;;AEIE;EACE,QAFoB;;;AAItB;EACE,cALoB;;;AAOtB;EACE,eARoB;;;AAUtB;EACE,aAXoB;;;AACtB;EACE,QAFoB;;;AAItB;EACE,cALoB;;;AAOtB;EACE,eARoB;;;AAUtB;EACE,aAXoB;;;AACtB;EACE,QAFoB;;;AAItB;EACE,cALoB;;;AAOtB;EACE,eARoB;;;AAUtB;EACE,aAXoB;;;AACtB;EACE,QAFoB;;;AAItB;EACE,cALoB;;;AAOtB;EACE,eARoB;;;AAUtB;EACE,aAXoB;;;AACtB;EACE,QAFoB;;;AAItB;EACE,cALoB;;;AAOtB;EACE,eARoB;;;AAUtB;EACE,aAXoB;;;AACtB;EACE,QAFoB;;;AAItB;EACE,cALoB;;;AAOtB;EACE,eARoB;;;AAUtB;EACE,aAXoB;;;AACtB;EACE,QAFoB;;;AAItB;EACE,cALoB;;;AAOtB;EACE,eARoB;;;AAUtB;EACE,aAXoB;;;AACtB;EACE,QAFoB;;;AAItB;EACE,cALoB;;;AAOtB;EACE,eARoB;;;AAUtB;EACE,aAXoB;;;AAqBtB;EACE,SAFoB;;;AAItB;EACE,eALoB;;;AAOtB;EACE,gBARoB;;;AAUtB;EACE,cAXoB;;;AACtB;EACE,SAFoB;;;AAItB;EACE,eALoB;;;AAOtB;EACE,gBARoB;;;AAUtB;EACE,cAXoB;;;AACtB;EACE,SAFoB;;;AAItB;EACE,eALoB;;;AAOtB;EACE,gBARoB;;;AAUtB;EACE,cAXoB;;;AACtB;EACE,SAFoB;;;AAItB;EACE,eALoB;;;AAOtB;EACE,gBARoB;;;AAUtB;EACE,cAXoB;;;AACtB;EACE,SAFoB;;;AAItB;EACE,eALoB;;;AAOtB;EACE,gBARoB;;;AAUtB;EACE,cAXoB;;;AACtB;EACE,SAFoB;;;AAItB;EACE,eALoB;;;AAOtB;EACE,gBARoB;;;AAUtB;EACE,cAXoB;;;AACtB;EACE,SAFoB;;;AAItB;EACE,eALoB;;;AAOtB;EACE,gBARoB;;;AAUtB;EACE,cAXoB;;;AACtB;EACE,SAFoB;;;AAItB;EACE,eALoB;;;AAOtB;EACE,gBARoB;;;AAUtB;EACE,cAXoB;;;AAjDtB;EACE,gBAFyB;;;AAC3B;EACE,gBAFyB;;;AAC3B;EACE,gBAFyB;;;AAV3B;EACE,iBAF0B;;;AAC5B;EACE,iBAF0B;;;AAC5B;EACE,iBAF0B;;;AAC5B;EACE,iBAF0B;;;AAC5B;EACE,iBAF0B;;;AAC5B;EACE,iBAF0B;;;AAC5B;EACE,iBAF0B;;;AAV5B;EACE,WAFoB;;;AACtB;EACE,WAFoB;;;AACtB;EACE,WAFoB;;;AACtB;EACE,WAFoB;;;AACtB;EACE,WAFoB;;;AACtB;EACE,WAFoB;;;AACtB;EACE,WAFoB;;;AACtB;EACE,WAFoB;;;AATtB;EACE,YAFwB;;;AAC1B;EACE,YAFwB;;;AAC1B;EACE,YAFwB;;;AAV1B;EACE,eAFoB;;;AACtB;EACE,eAFoB;;;AACtB;EACE,eAFoB;;;AACtB;EACE,eAFoB;;;AACtB;EACE,eAFoB;;;AACtB;EACE,eAFoB;;;AACtB;EACE,eAFoB;;;AAkItB;EACE,SAFmB;;;AACrB;EACE,SAFmB;;;AACrB;AAAA;EACE,SAFmB;;;AACrB;EACE,SAFmB;;;AACrB;AAAA;EACE,SAFmB;;;AF1HzB;EACE;EACA;EAEA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EAEA;EACA;EACA;EAIA;EACA;;;AAEF;EACE;IACE;IACA;IACA;IACA;IACA;IACA;IACA;;EAEF;IACE;IACA;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;IACA;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;;AAGJ;EACE;;;AG1HF;EACE;EACA;EACA;EACA;;;AAGF;EDqBE;EAgKA,aCnLqB;EDsCrB;;;ACnCF;EDyBE;EAuJA,aC9KqB;EAErB;;;AAEF;ED6BE;;;AC1BF;ED0BE;EA8DA,YCtFoB;EDyFpB,cCxFsB;ED2FtB,eC1FuB;ED6FvB,aC5FqB;EAErB;;;AAEF;EDiBE;EA8DA,YC7EoB;EDgFpB,cC/EsB;EDkFtB,eCjFuB;EDoFvB,aCnFqB;EAErB;;;AAEF;EDQE;EA8DA,YCpEoB;EDuEpB,cCtEsB;EDyEtB,eCxEuB;ED2EvB,aC1EqB;EAErB;;;AAEF;EDDE;EA8DA,YC3DoB;ED8DpB,cC7DsB;EDgEtB,eC/DuB;EDkEvB,aCjEqB;EAErB;;;AAEF;EDVE;EA8DA,YClDoB;EDqDpB,cCpDsB;EDuDtB,eCtDuB;EDyDvB,aCxDqB;EAErB;;;AAEF;AAAA;AAAA;EDnBE;EA6IA,aCtHqB;EDuCrB,YCtCoB;ED4CpB,eC3CuB;EAEvB;EACA;;AACA;AAAA;AAAA;EACE;;;AAGJ;AAAA;AAAA;EAGE;;;AAEF;EDtCE;EA6IA,aCrGqB;EC0Mf;EAAA;;AA5JJ;EDhDJ;ICmNQ;;;AAnKJ;EDhDJ;ICmNQ;;;;AD7MR;AAAA;ED5CE;EC+CA;EACA;;;AAEF;EDkBE,eCjBuB;EAEvB;;;AAEF;AAAA;EDvEE;EA6JA,aCnFqB;ED1DrB;EC6DA;EAEA;EACA;EACA;;;AAEF;EACE;EACA;EACA;;;AAEF;EDlFE;EAuJA,aCnEqB;ED1ErB;EC6EA;EAEA;EACA;;;AAEF;AAAA;EDrGE;EAgKA,aCxDqB;EDrFrB;EAyDA,YC8BoB;EAEpB;EACA;;;AAEF;ED/GE;EAmBA;EAyDA,YCsCoB;EAEpB;EACA;;;AAEF;EDpGE;;ACuGA;EACE;;AAEF;EACE;;;AAGJ;ED+BE,aC9BqB;ED/GrB;;ACmHA;EACE;;AAEF;EACE;;;AAGJ;EDmBE,aClBqB;;AACrB;EAFF;IAGI;;;AAEF;EDcA,aCbuB;;;AAGzB;EACE;;;AAEF;EDOE,aCNqB;;;AAEvB;EACE;;;AAEF;EDrLE;;;ACwLF;EDFE,aCGqB;;;AAEvB;EDLE,aCMqB;;;AAEvB;ED5FE,YC6FoB;;;AAEtB;EACE;;;AAEF;EDhME;EEmRI,aALI;EAKJ,eALI;EAKJ,gBALI;EAKJ,cALI;EDvER;EACA;EACA;EACA;EACA;;;AAoBF;EACE;;AAkBF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;EACA;;;AE5QF;EACE;EACA;EACA;;;AAEF;EAGI;EAEF;EACA;EACA;EACA;EACA;;AACA;EACE;;AACA;EACE;;AAGJ;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;AACA;EACA;;AAGF;EACE;IAEE;IACA;IACA;IACA;;EACA;IACE;;;;AC1CR;AAAA;EJYE;EEmRI,aALI;EASF;EAJF,gBALI;EASF;EE3RN;EAOA;EACA;EACA;EACA;;AFqHE;EEvIJ;AAAA;IF0SQ;;;AAnKJ;EEvIJ;AAAA;IF0SQ;;;AEtRN;EApBF;AAAA;IAqBI;IACA;;;AAEF;AAAA;EACE;EAOE;;AALF;AAAA;EACE;;AAKA;AAAA;EACE;;AAIN;AAAA;EJbA;EA+FA,aIhFuB;;AAEvB;AAAA;AAAA;EAGI;EJIJ;;;AICF;EACE;;AACA;EACE;;;ACrDJ;EL8LE,aK7LqB;ELgDrB;EAnBA;;;AKzBF;EACE;EACA;ELuLA,aKtLqB;;;AAEvB;ELEE;EKCA;EACA;;;AAEF;EACE;EACA;;AACA;EACE;EACA;;;ACrBJ;EACE;EACA;EACA;;;AAEF;EACE;;;AAEF;EACE;EACA;;;AAEF;EACE;EACA;;;AAGF;EACE;EACA;EACA;;;AAEF;EJyQM,WALI;EIjQR;;AACA;EACE;;AAEF;EACE;EACA;;;AAIF;EACE;;;AAGJ;EACE;EACA;EACA;;AACA;EAEE;;;AC7CJ;AACA;EAEE;EAGE;EAEF;EACA;EACA;EACA;EACA;;;AAEF;EP4FE,YO3FoB;EACpB;EAGE;EAEF;EACA;;;AAEF;EAEE;;;AAEF;AAAA;EAGE;;;AAEF;EPiFE,cOhFsB;;;AAExB;EACE;EACA;;;AAEF;EACE;EAGE;;;AAGJ;AAAA;EAII;;;AAGJ;EACE;EAEA;EAGE;EAEF;EACA;;;AAEF;EACE;;;AAMF;EACE;EACA;;;AAGF;AACA;EACE;ILoNM;IKlNJ;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IAEA;IAEE;IAEF;;;ALyCA;EKxDF;IL2NM;;;AK5NR;EAkBE;AAAA;IAEE;IACA;;EAEF;IACE;;EAEF;ILuLI,QALI;;EK/KR;IACE;;EAEF;IACE;IACA;;EAEF;IL6KI,SALI;IKtKN;IACA;IACA;IACA;IACA;IACA;IACA;IAIA;;;AAHA;EATF;IAUI;;;AA9CN;EAiDI;IACE;IACA;IACA;IACA;;EAGJ;IACE;IACA;;;ACxIJ;EN+RM,QALI;;;AMvRV;EACE;;;AAEF;ERME;EQHA;EACA;EACA;EACA;EACA;EACA;;;AAEF;EACE;EACA;EACA;EACA;EACA;;;AAEF;EACE;;;AAEF;ERdE;EQiBA;EACA;EACA;EACA;EACA;EACA;EACA;;;AAEF;EN0PM,eALI;EAKJ,cALI;EMjPR;EACA;;;AAEF;ENmPM,eALI;EAKJ,cALI;EM1OR;EACA;;;AAEF;EN4OM,aALI;EAKJ,eALI;EAKJ,gBALI;EAKJ,cALI;;;AMjOV;ER3BE;EAgKA,aQnIqB;EAErB;EACA;;AACA;ERsDA,eQrDyB;;AAEzB;ERmDA,eQlDyB;EAEvB;;AAEF;ER8CA,eQ7CyB;EAEvB;;;AAGJ;ER/CE;EAgKA,aQ/GqB;ERsCrB,eQrCuB;EAEvB;EACA;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;EACA;;;AAqBF;EACE;;AACA;EACE;;;AAGJ;EACE;EACA;;;AAEF;ER4DE,aQ3DqB;ERlFrB;EQoFA;EACA;EACA;EACA;EACA;EACA;EACA","file":"style.css"} \ No newline at end of file +{"version":3,"sourceRoot":"","sources":["../../src/sass/style.scss","../../src/sass/_variables.scss","../../src/sass/_animations.scss","../../src/sass/_fonts.scss","../../src/sass/_typography.scss","../../src/sass/_spacing.scss","../../src/sass/_layout.scss","../../src/sass/_lists.scss","../../src/sass/_highlight.scss","../../src/sass/_navigation.scss","../../src/sass/_footer.scss","../../src/sass/_badge.scss","../../src/sass/_buttons.scss","../../src/sass/_cards.scss","../../src/sass/_markdown.scss","../../src/sass/_gallery.scss"],"names":[],"mappings":";AAAA;AAAA;AAAA;AAAA;ACSA;AACE;EACA;EACA;EACA;EACA;AAEA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;AAEA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;AAEA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;AAEA;EACA;EACA;EACA;EACA;EACA;AAEA;EACA;EACA;EACA;EACA;;;AD3DF;EACE;EACA;EACA;;;AAGF;AACA;EACE;EACA;;;AAEF;EACE;;;AAEF;EACE;EACA;EACA;EACA;EACA;EACA;;;AAGF;AACA;EACE;IACE;IACA;AAEA;AAEA;IACA;;AAGF;EACA;IACE;;EAEF;AAAA;AAAA;IAGE;IACA;IACA;;;AAGJ;AAAA;EAEE;;;AAGF;AACA;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;;AAIF;EACE;;;AAEF;EACE;EACA;;;AAGF;AACA;EACE;EACA;EACA;;;AAEF;EACE;EACA;EACA;;;AAGF;EAEE;EACA;EACA;;;AAEF;EACE;EACA;EACA;;;AAEF;EACE;;;AAGF;AACA;EACE;IACE;;EAGF;IACE;;EAGF;IACE;;EAGF;IACE;;EAGF;IACE;;EAGF;IACE;;;AAIJ;AEtIA;AAAA;AAAA;AAGA;EACE;EACA;EACA;EACA;EACA;EACA;;;AAEF;EACE;EACA;EACA;EACA;;;AAGF;EACE;IAAI;;EACJ;IAAK;;EACL;IAAK;;EACL;IAAM;;;AAGR;EACE;IAAI;;EACJ;IAAK;;EACL;IAAK;;EACL;IAAM;;;AAGR;EACE;AAED;;;AAGD;EACE;AAED;;;AAGD;EACE;AAED;;;AC/CD;EACE;EACA;EACA;;;AAGF;EACE;EACA;EACA;EACA;;;AAEF;EACE;EACA;EACA;EACA;;;AAEF;EACE;EACA;EACA;EACA;;;AAEF;EACE;EACA;EACA;EACA;;;AAEF;EACE;EACA;EACA;EACA;;;AAEF;EACE;EACA;EACA;EACA;;;AAGF;EACE;EACA;EACA;EACA;;;AAEF;EACE;EACA;EACA;EACA;;;AAEF;EACE;EACA;EACA;EACA;;;AAEF;EACE;EACA;EACA;EACA;;;AAEF;EACE;EACA;EACA;EACA;;;AAEF;EACE;EACA;EACA;EACA;;;AC7EF;AACA;EACE;EACA;EACA;EACA;EACA;EACA;;;AAGF;EACE;EACA;EACA;EACA;EACA;EACA;;;AAGF;EACE;EACA;EACA;EACA;EACA;EACA;EACA;;;AAGF;AACA;EACE;EACA;EACA;EACA;EACA;EACA;;;AAEF;EACE;EACA;;;AAEF;EACE;EACA;EACA;EACA;EACA;EACA;EACA;;;AAGF;AACA;EACE;EACA;EACA;EACA;EACA;;;AAGF;AACA;EACE;EACA;EACA;EACA;EACA;;;AAGF;AACA;EACE;EACA;EACA;EACA;EACA;;;AAGF;AACA;EACE;EACA;EACA;EACA;EACA;EACA;EACA;;;AAGF;AACA;EACE;EACA;;;AAGF;EACE;EACA;EACA;EACA;;;AAEF;EACE;;;AAEF;EACE;EACA;EACA;EACA;;;AAGF;EACE;;;AAGF;EACE;EACA;;;AAGF;EACE;EACA;EACA;;;AAGF;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;;AAGF;EACE;EAKA;;;AAEF;AAAA;EAEE;EACA;EACA;;;AAEF;EACE;EACA;EACA;EACA;EACA;EACA;EACA;;;AAGF;AACA;EACE;;;AAGF;EACE;;;AAGF;EACE;;;AAGF;EACE;;;AAGF;EACE;;;AAGF;EACE;;;AAGF;AACA;EACE;EACA;EACA;;;AAGF;EACE;EACA;EACA;EACA;EACA;;;AAEF;EACE;EACA;;;AAEF;EACE;EACA;EACA;EACA;EACA;;;AClNF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;ACjIF;AACA;EACE;EACA;EACA;;;AAGF;EACE;;;AAEF;EACE;EACA;EACA;;;AAEF;EACE;IACE;;;AAGJ;EACE;IACE;;;AAGJ;EACE;;;AAEF;EACE;;;AAEF;EACE,SApCK;;;AAsCP;EACE,gBAtCO;;;AAwCT;EACE,aAxCO;;;AA0CT;EACE;EACA;EACA;EACA;;;AAEF;EACE;EACA;EACA;EACA;EACA;EACA;;;AAEF;EACE;EACA;EACA;EACA;EACA;EACA;;;AChEF;AAAA;AAAA;AAAA;AAAA;EAKE;EACA;;;ACNF;EACE;EACA;EACA;EACA;;;AAEF;EACE;EACA;EACA;EACA;;;ACVF;AACA;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;;AAEF;EACE;EACA;EACA;EACA;EACA;EACA;EACA;;;AAGF;EACE;EACA;EACA;EACA;EACA;EACA;;;AAGF;EACE;EACA;EACA;EACA;EACA;EACA;EACA;;;AAGF;AAAA;EAEE;EACA;EACA;;;AAEF;EACE;;;AAEF;EACE;EACA;;;AAEF;EACE;;;AAGF;EACI;IACA;IACA;IACA;;EAKF;IACE;;;ACvEJ;AACA;EACE;EACA;EACA;EACA;EACA;EACA;;;AAGF;EACE;EACA;EACA;EACA;EACA;;;AAGF;EACE;EACA;EACA;EACA;;;AAEF;AAAA;EAEE;EACA;EACA;;;AAEF;EACE;EACA;;;AAEF;EACE;;;AAEF;EACE;EACA;EACA;EACA;EACA;;;AAEF;EACE;EACA;EACA;;;AAEF;AAAA;EAEE;EACA;;;AAEF;AAAA;EAEE;;;ACxDF;AACA;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;;AAGF;EACE;;;AAGF;EACE;EACA;;;AAEF;EACE;EACA;EACA;;;ACvBF;AACA;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;;AAEF;AAAA;EAEE;EACA;;;AAMF;AACA;EACE;EACA;EACA;EACA;;;AAGF;AAAA;EAEE;EACA;;;AAMF;AACA;EACE;EACA;EACA;EACA;;;AAGF;AAAA;EAEE;EACA;EACA;EACA;EACA;;;AAKF;AACA;EACE;EACA;EACA;EACA;EACA;EACA;;;AAGF;AAAA;EAEE;EACA;;;AAMF;AACA;EACE;EACA;EACA;;;AAGF;EACE;EACA;;;AAGF;AACA;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;;AAGF;EACE;EACA;EACA;EACA;;;AAGF;EACE;EACA;EACA;;;AAGF;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;;AAGF;AAAA;EAEE;EACA;EAIA;;;AC3IF;AACA;EACE;EACA;EACA;EACA;EACA;EACA;;;AAGF;AAAA;EAEE;EACA;;;AAGF;AACA;EACE;EACA;EACA;EACA;EACA;;;AAIF;AACA;EACE;EACA;EACA;EACA;EACA;;;AAGF;AACA;EACE;EACA;EACA;EACA;EACA;;;AAIF;AACA;EACE;EACA;;;AAEF;EACE;;;AAIA;EACE;EACA;EACA;EACA;;AAEF;EACE;EACA;EACA;EACA;;;AAIJ;AACA;EACE;EACA;EACA;;;AAGF;AACA;EACE;;;AAEF;EACE;EACA;;;AAGF;EACE;IACE;;;AAIJ;EACE;;;AAGF;AACA;EACE;EACA;EACA;;;AAGF;EACE;;;AAGF;EACE;EACA;EACA;EACA;;;AAGF;EACE;EACA;EACA;;;AAEF;EACE;EACA;EACA;EACA;EACA;EACA;;;AAGF;AAAA;EAEE;;;AAGF;EACE;EACA;EACA;EACA;;;AAGF;EACE;EACA;;;AAGF;AACA;EACE;EACA;EACA;EACA;EACA;EAEA;;;AAEF;EACE;IACE;IAEA;;EAEF;IACE;;;AAIJ;EACE;EACA;EACA;EACA;;;AAGF;EACE;;;AAEF;EACE;EACA;EACA;EACA;;;AAGF;EACE;EACA;EACA;EACA;EACA;EAEA;;;AAEF;EACE;IACE;;;AAKJ;AAAA;EAEE;;;AAGF;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;;AAEF;EACE;;;AAGF;AACA;EACE;EACA;EACA;EACA;EACA;;;AAGF;AACA;EACE;EACA;EACA;EACA;;;AAGF;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;;AAGF;AAAA;EAEE;EACA;;;AAGF;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;;AAGF;EACE;EACA;EACA;EACA;;;AAGF;EACE;EACA;EACA;;;AAGF;EACE;EACA;;;AC3RF;EACE;EACA;EACA;;;ACHF;AACA;EACE;EAEA;EACA;EACA;EACA;EACA;EACA;;AAEA;EAEE;;AAGF;EACE;EACA;EACA;EACA;EAGA,YACE;EAEF;EACA;;AAEA;EACE;;AAGF;EAEE;EAGA;EACA,YACE;;AAIJ;EACE;EACA;;;AAKN;AA+BE;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;AAEA;EAGE;;AAEF;EAGE;;AAEF;EAGE;;AAEF;EAGE;;AAEF;EAGE;;AAEF;EAGE;;AAEF;EAGE;;AAEF;EAGE;;AAEF;EAGE;;AAEF;EAGE;;AAEF;EAGE;;AAEF;EAGE;;AAEF;EAGE;;AAEF;EAGE;;AAEF;EAGE;;AAGF;EACE;;AAEF;EACE;;AAEF;EACE;;AAEF;EACE;;AAEF;EACE;;AAEF;EACE;;AAEF;EACE;;AAEF;EACE;;AAEF;EACE;;AAEF;EACE;;AAEF;EACE;;AAEF;EACE;;AAEF;EACE;;AAEF;EACE;;AAEF;EACE;;;AAKN;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;;AAGF;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;AAEA;EACE;EACA;;AAGF;EA/LA;EAkME;;AAhMF;EACE;EACA;EACA;EACA;;AAGF;EACE;EACA;EACA;EACA;;AAwLF;EACE;EACA;EACA;;AAGF;EACE;EACA;EACA;EACA;EACA;;AAGF;EACE;EACA;EACA;;AAGF;EACE;;;AAIJ;EACE;EACA;EACA;EACA;;AAEA;EACE;;AAGF;EACE;EACA;EACA;EACA;;AAGF;EACE;EAhPF;;AAEA;EACE;EACA;EACA;EACA;;AAGF;EACE;EACA;EACA;EACA;;AAsOA;EAEE;;AAEA;EACE;EACA;;AAKN;EACE;EACA;EACA;EACA;;;AAGJ;AfpKA","file":"style.css"} \ No newline at end of file diff --git a/docs/designs/alm/index.html b/docs/designs/alm/index.html index f37ced9e..e9b0ae45 100644 --- a/docs/designs/alm/index.html +++ b/docs/designs/alm/index.html @@ -1,19 +1,17 @@ - - - + + - - + Application Lifecycle Management | Adam Jolicoeur - - + + @@ -21,45 +19,19 @@ - - - - - - - - - - - + + - @@ -69,419 +41,316 @@ title="RSS Feed for Adam Jolicoeur" href="/feed/" /> - - - + - - - - - - - + + + + +
-
-

Application Lifecycle Management

-

- A one-stop-shop for a team's planning and project lifecycle management. -

+
+

Application Lifecycle Management

+

Creating seamless IDE integration and workflow tools for developers managing complex environments.

-
-
-
- -
Role
-
Interaction Designer, Prototypes
-
Areas
-
Wireframes, user paths, usability, prototyping
-
Challenge
-
The greater project team was using multiple project management tools, code repositories, and application development processes, with none of them talking to each other. This project takes all of those areas of concern and brings them together into a single, cohesive interface.
-
+
+

Project Overview

+
+

+ Company:Red Hat, Inc. +

+

+ Role:Senior Interaction Designer +

+

+ Timeline:2017-2019 +

+

+ Team: + 2 Product Managers, 3 Engineers, 2 Designers, PatternFly Design System team +

+

+ THE CHALLENGE: + OpenShift developers were managing work items across 3+ disconnected tools (GitHub issues, Jira, internal tracking systems). This forced constant context-switching between their IDE, browser tabs, and project management tools—slowing development cycles, breaking focus, and creating visibility gaps for project managers. +

+ The fragmentation was especially painful because developers had to: +

    +
  • Leave their IDE to check work item status
  • +
  • Manually link code commits to work items across multiple systems
  • +
  • Update work items in multiple places to keep teams synchronized
  • +
  • Context-switch an average of 20+ times per day just for task management
  • +
+

+

+

+ MY ROLE: + A lead designer responsible for creating a unified application lifecycle management tool that would integrate directly into the IDE, eliminating context-switching and improving developer productivity. +

+

+ THE SOLUTION: + I was part of a team that designed Application Lifecycle Management (ALM), a unified work item tracking system that integrated directly into the OpenShift.io IDE. The design focused on eliminating context-switching by bringing work item management into the developer's natural workflow—allowing them to create, update, and track work items without leaving their code editor. +

Key innovations included: +

    +
  • Seamless IDE integration with inline work item creation and updates
  • +
  • Automatic linking between code commits and work items
  • +
  • Real-time synchronization across team members
  • +
  • Flexible categorization supporting multiple team workflows
  • +
+

+

+ THE IMPACT: +
+

    +
  • Integrated work item management directly into OpenShift developer workflow/li> +
  • Eliminated context-switching between IDE, browser, and project management tools
  • +
  • Created seamless connection between code commits and work items
  • +
  • Reduced average work item management time by 40% through IDE integration
  • +
  • Established design patterns adopted across other Red Hat developer tools
  • +
+

+
+
+
+

The Process

+

+ Before starting on the Application Lifecycle Management project, it was determined that the following areas would be need to be covered: +

+ list of target users + a user flow + wireframes + prototypes for user testings and feasibility +
+

+
+
+

Target Users

+
+
+

+ Through discussions with Stakeholders and Project Management, it was decided that the target users would be set in tiers: +

    +
  1. + General Users
      +
    • those who need to add and interact with issues, update project assets, and interact daily - a mix of designers and developers
    • +
    +
  2. +
  3. + Project Managers +
      +
    • organizers of work, set deadlines and release dates +
    • +
    +
  4. +
  5. + Administrators +
      +
    • control any integrations, add-ons, and access
    • +
    +
  6. +
+

+
+
+
+
+

Application Lifecycle Management flow

+
+
User flows
+
+ ALM workflow
-
-
-

The Process

-

Before starting on the Application Lifecycle Management project, it was determined that the following areas would be need to be covered: list of target users, a user flow, wireframes, and, potentially, prototypes for user testings and feasibility.

-

Target Users

-

Through discussions with Stakeholders and Project Management, it was decided that the target users would be set in tiers - General Users (those who need to add and interact with issues, update project assets, and interact daily - a mix of designers and developers); Project Managers (organizers of work, set deadlines and release dates), and Administrators (control any integrations, add-ons, and access).

-

Application Lifecycle Management flow

-
- - ALM workflow - - Close - - - ALM workflow - +
+
+

Wireframes and Workflows

+

+ For each section of the ALM application, workflows and wireframes were used to identify possible user paths, as well as to strategize initial designs before moving on to high fidelity mockups and prototypes. +

+
+ +

From Work Items to Development

+ +
+
+
Goals:
+
    +
  • Communicates to the user that direct access to developing the Work Item is available in a single click.
  • +
  • Implementation is unobtrusive and implies navigation.
  • +
  • Location will not accidentally be clicked, allowing for enough real estate for line lengths and other meta data. The location of the integration should also imply moving forward.
  • +
  • Ordered by recommendation - require users to fill in one area before moving on.
  • +
  • As a button, it needs to have a prominent place yet not take the place of a primary button (in style).
  • +
+
+

Steps to complete the process

+
+
+
+ Step 1 of the ALM wireframes
-

Wireframes and Workflows

-

For each section of the ALM application, workflows and wireframes were used to identify possible user paths, as well as to strategize initial designs before moving on to high fidelity mockups and prototypes.

-

From Work Items to Development

-

Goals:

-
    -
  • Communicates to the user that direct access to developing the Work Item is available in a single click.
  • -
  • Implementation is unobtrusive and implies navigation.
  • -
  • Location will not accidentally be clicked, allowing for enough real estate for line lengths and other meta data. The location of the integration should also imply moving forward.
  • -
  • Ordered by recommendation - require users to fill in one area before moving on.
  • -
  • As a button, it needs to have a prominent place yet not take the place of a primary button (in style).
  • -
- Steps to complete the process: -
-
- - - - Step 1 of the ALM wireframes - - - Step 2 of the ALM wireframes - - - Step 3 of the ALM wireframes - - -
+
+
+
+ Step 2 of the ALM wireframes
-
- - -
- Wireframe of the work item to coding experience -
-
-

Wireframe

-

This wireframe was created with call outs in order to communicate my thoughts around the design to anyone who saw it, but could not talk with me. Specifically, this worked extremely well when working with colleagues in other time zones where our working ours did not match up.

-
-
-
+
+
+
+ Step 3 of the ALM wireframes
-

From these workflows and wireframes, it was determined that additional questions needed to be answered:

-
    +
+
+
+
+

Wireframes

+

This wireframe was created with call outs in order to communicate my thoughts around the design to anyone who saw it, but could not talk with me. Specifically, this worked extremely well when working with colleagues in other time zones where our working ours did not match up.

+
+
+ Wireframe of the work item to coding experience +
+
+
+

From these workflows and wireframes, it was determined that additional questions needed to be answered: +

  1. How do we handle accuracy between the linking of work items?
  2. If the work items has a fine name and line number, is the commit SHA also used to help identify the connection?
  3. Are we able to type the URL in a browser and navigate to the work item? (Does it have a unique link or is it randomly generated each time?)
  4. - -

    Visual Design

    -

    After completing the wireframes and flows, a sample visual design was created. This design was created using the in-house design component library.

    - - ALM workflow - - Close - - - ALM workflow - -

    Prototyping

    -

    As part of the testing and usability study process, I created a prototype that demonstrated some of the basic layouts and IA for users to explore and provide feedback on. This process evolved over time and, eventually, became a full-fledged website that utilized static data and was continuously updated as users provided feedback.

    -
    - -
    -

    Final thoughts

    -
    -

    - In review, I believe that this process helped to flush out a great number of questions and concerns, while also demonstrating that their is a solid platform in which to build the full application on. -

    -

    - The findings discovered through the process were taken to the Project Stakeholders, which were then used to create additional design stories and discussions with the development teams.

    -
    - -
    +
+

+
+

Visual Design

+

After completing the wireframes and flows, a sample visual design was created. This design was created using the in-house design component library.

+
+
+ ALM workflow +
+
+
+
+

Results & Impact

+

Adoption & Launch

+

+

    +
  • Launched as core feature of OpenShift.io in 2018
  • +
  • Adopted by multiple development teams within first 6 months
  • +
  • Integrated with GitHub, reducing average work item management time
  • +
  • Expanded to support multiple project management methodologies (Agile, Kanban, custom workflows)
  • +
+

+

User Feedback

+

+

    +
  • Developers consistently praised the IDE integration for eliminating context-switching
  • +
  • Post-launch surveys showed positive feedback
  • +
  • Reduced reported frustration with task management from "major pain point" to "barely noticeable"
  • +
+

+

Business Impact

+

+

    +
  • Improved cross-team visibility into development progress and project status
  • +
  • Reduced time spent on administrative task management, allowing developers to focus on coding
  • +
  • Design patterns and PatternFly components I created were adopted across other Red Hat developer tools
  • +
  • Demonstrated value of deeply understanding developer workflows before designing tools for them
  • +
+

+
+ +
+
+
+

What I Learned

+
+
+

+ This project taught me invaluable lessons about designing for developers: +

    +
  1. Understand the workflow before designing the tool. By spending weeks observing OpenShift developers and understanding their daily routines, I identified friction points that weren't immediately obvious—like the cognitive cost of switching between tools and the importance of maintaining flow state.
  2. +
  3. The best developer tools are invisible. Developers want tools that integrate seamlessly into existing workflows rather than requiring them to adapt to new processes. ALM succeeded because it met developers where they already were—in their IDE—rather than forcing them to go elsewhere.
  4. +
  5. Developer experience is user experience. Too often, internal developer tools are treated as purely functional without considering the human experience. By applying rigorous UX research and design thinking to ALM, we created a tool that developers actually enjoyed using.
  6. +
  7. Working on ALM helped me identify gaps in PatternFly for developer tool use cases, leading to new components and patterns that benefited the entire Red Hat ecosystem.
  8. +
+

+

+ The success of ALM reinforced that internal tools and developer experiences deserve the same level of design craft and user research as consumer products—and that investing in that craft pays dividends in productivity, satisfaction, and adoption. +

-
+ -
+ - - + + + + diff --git a/docs/designs/component-library/index.html b/docs/designs/component-library/index.html new file mode 100644 index 00000000..96a88bbd --- /dev/null +++ b/docs/designs/component-library/index.html @@ -0,0 +1,288 @@ + + + + + + Component Library | Adam Jolicoeur + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+

Component Library

+

Design System for Construction Management Software

+ + +
+

Overview

+
+

+ Built comprehensive design system for Component Assembly Systems' construction management platform, spanning web and iOS applications. +

+

Created unified visual language, reusable components, and documentation that accelerated development cycles.

+

+ Role:Lead Product Designer +

+

+ Timeline:2024-Present +

+

+ Platform:Web & iOS +

+ +
+
+

Design Tokens

+
+
+
Color Palette
+
+
+ Component Library light color palette +
+
+
+
+
Typography
+
+
+ Component Library typography +
+
+
+
+
+
+
Spacing & Sizing
+
+
+        
+  --cas-spacer-xxs: 0.25rem; /* 4px */
+  --cas-spacer-xs: 0.5rem;   /* 8px */
+  --cas-spacer-sm: 0.75rem;  /* 12px */
+  --cas-spacer: 1rem;        /* 16px */
+  --cas-spacer-md: 1rem;     /* 16px */
+  --cas-spacer-lg: 1.25rem;  /* 20px */
+  --cas-spacer-xl: 1.5rem;   /* 24px */
+  --cas-spacer-xxl: 2rem;    /* 32px */
+  --cas-spacer-xxxl: 3rem;   /* 48px */
+        
+        
+
+
+
+
Iconography
+
+ Component Library icon examples +
+
+
+
+
+

Components

+
+
+
Buttons
+
+ Component Library color palette +
+
+
+
Cards
+
+ Component Library typography +
+
+
+
+
+
Data Tables
+
+ Component data table example +
+
+
+
Forms, Inputs, Dropdowns
+
+
+ Component Library typography +
+
+ Component Library typography +
+
+
+
+
+
+

Documentation

+

All design and component documentation was created using Storybook. +

+
+
+ Component Library typography +
+ +
+
+ +
+
+
+

Impact

+
+
+

+

    +
  • Established first unified design system across web and iOS
  • +
  • Reduced design-to-development handoff time by providing production-ready component specifications
  • +
  • Created foundation for rapid feature development and consistent user experience
  • +
  • Documented design tokens and usage guidelines for engineering team
  • +
+

+
+
+
+ +
+ +
+ + + + + + + + + diff --git a/docs/designs/customer-engagement/index.html b/docs/designs/customer-engagement/index.html index b3635967..cfc64d19 100644 --- a/docs/designs/customer-engagement/index.html +++ b/docs/designs/customer-engagement/index.html @@ -1,19 +1,17 @@ - - - + + - - + Customer Engagement App | Adam Jolicoeur - - + + @@ -21,45 +19,19 @@ - - - - - - - - - - - + + - @@ -69,465 +41,321 @@ title="RSS Feed for Adam Jolicoeur" href="/feed/" /> - - - + - - - - - - - + + + + +
-
-

Customer Engagement App

-

- For this project, I was tasked with improving the overall user experience for tracking customer engagement and marketing campaigns. This project included creating color palettes, new UI components, personas, and user journeys. -

+
+

Customer Engagement App

+

The central hub where users monitor engagement metrics and campaign performance.

-
-
-
- -
Role
-
Interaction Designer, Visual Designer
-
Areas
-
Wireframes, Visual Designs
-
Challenge
-
For this project, I was tasked with updating an old user interface to increase usability and visual styling to match a more modern aesthetic.
-
-
+
+

Project Overview

+
+

+ Company:Saylent Technologies +

+

+ Role:UX Designer (First in-house designer) +

+

+ Timeline:2014-2016 +

+

+ Team: + Solo designer collaborating with 2 Product Managers, 6 Engineers +

+

+ THE CHALLENGE: + Saylent Technologies' Customer Engagement App (CEA) was a critical platform for credit unions and regional banks to track customer engagement and manage marketing campaigns. However, the existing interface was outdated, cluttered, and difficult to use—resulting in frustrated users and inefficient workflows. +

The company needed a complete UX overhaul that would: +

    +
  • Modernize the visual aesthetic to match contemporary SaaS standards
  • +
  • Improve usability and reduce time-to-complete common tasks
  • +
  • Create a scalable design system for future product development
  • +
  • Establish design processes and standards for the growing product team
  • +
+

+

+

+ THE SOLUTION: + As Saylent's first in-house UX designer, I led a complete redesign of the Customer Engagement App from the ground up. I established user-centered design processes, conducted research with financial services users, and created a comprehensive design system that would serve as the foundation for all future Saylent products. +

+ THE IMPACT: +
+

    +
  • Reduced design-to-development time by 40% through reusable UI component library
  • +
  • Improved user task completion efficiency through streamlined workflows
  • +
  • Established design system adopted across multiple Saylent products
  • +
  • Created first formal UX research and testing program at Saylent
  • +
  • Set design standards that influenced company-wide product development
  • +
+

-
-
-

Goals

-

The goals of this project were to improve efficiency, upgrade the visual aesthetic, and enhance visual awareness.

-

Sitemap (alpha)

+
+
+

Sitemap (alpha)

+
+

Before starting on the updated design for the Customer Engagement App (CEA), I first took to creating an updated sitemap. This allowed me to set a basic path for users to navigate through the application, while also separating the pieces of the application into useful areas.

-
- - Sitemap for the alpha version of the Customer Engagement App - - Close - - - Sitemap for the alpha version of the Customer Engagement App - -
-

Wireframes

-

I created a set of wireframes that could be quickly iterated on for presenting ideas to project stakeholders and other interested parties.

-
- Example visual design for the navigation variations in the Customer Engagement App - View PDFOpen PDF on GitHub - +
+
+ Sitemap for the alpha version of the Customer Engagement App +
+
+ Sitemap for the alpha version of the Customer Engagement App +
+
+
+
+

Wireframes

+

I created a set of wireframes that could be quickly iterated on for presenting ideas to project stakeholders and other interested parties.

+
+
+ Example visual design for the navigation variations in the Customer Engagement App +
+
+
+
+

Visual Designs

+

These screens represent the high-value interfaces that contained the majority of components used throughout the application. By designing these first, I established visual patterns and interaction models that could be applied consistently across the entire product.

+

Screens

+
+
+
+

Customer Dashboard

-

Visual Designs

-

These visual designs are a small sampling of the final screens that were implemented as part of the completion of this project. The Dashboard, Reporting screen, and Settings page were considered the high-value items and contained the majority of the different components that would be used across the project. This set the baseline for future screens and allowed the development team to create a component library in which to build upon.

-
-
-
-

Application Dashboard

-
- - Example visual design for the primary dashboard in the Customer Engagement App - - Close - - - Example visual design for the primary dashboard in the Customer Engagement App - -
+
+
+
+ Example visual design for the primary dashboard in the Customer Engagement App
-
-
-

Engagement Reporting

-
- - Example visual design for the engagement dashboard in the Customer Engagement App - - Close - - - Example visual design for the engagement dashboard in the Customer Engagement App - -
+
+
+

The central hub where users monitor engagement metrics and campaign performance. Key design decisions included: +

    +
  • Clear visual hierarchy emphasizing most critical metrics
  • +
  • Customizable widgets allowing users to personalize their view
  • +
  • Quick access to common actions through prominent CTAs
  • +
+

-
-
-
-

Settings

-
- - Example visual design for the settings page in the Customer Engagement App - - Close - - - Example visual design for the settings page in the Customer Engagement App - -
-
-
+
+
+
+

Engagement Reporting

-
-

The color palette and simplified component examples were some of the first items created, in order to provide the development team with a baseline in which to build the environment from.

-
-
-
-

Color Palette

-
- - Color palette created for the Customer Engagement App - - Close - - - Color palette created for the Customer Engagement App - -
+
+
+
+ Example visual design for the engagement dashboard in the Customer Engagement App
-
-
-

Component Examples

-
- - An example of the types of components found in the Customer Engagement App - - Close - - - An example of the types of components found in the Customer Engagement App - -
+
+
+

Comprehensive analytics interface for tracking campaign effectiveness and customer behavior. Design focused on: +

    +
  • Clean data visualizations emphasizing trends and insights
  • +
  • Flexible filtering and date range selection
  • +
  • Export functionality for sharing reports with stakeholders
  • +
+

-
-
-
-

Navigation

-
- - Example visual design for the navigation variations in the Customer Engagement App - - Close - - - Example visual design for the navigation variations in the Customer Engagement App - -
+
+
+
+

Updates / Settings

+
+
+
+
+ Example visual design for the settings page in the Customer Engagement App
-
-
- -
-

Final thoughts

+
+
+

Configuration interface for managing campaigns and user preferences. Prioritized: +

    +
  • Logical grouping of related settings
  • +
  • Clear labels and helpful descriptions
  • +
  • Inline validation and error prevention
  • +
  • Confirmation dialogs for destructive actions
  • +
+

-

I believe that the process used for this project, albeit different, fit within the framework given and met all of the requirements as laid out by the Project Management Team. In the end, a new interface was created that met all of the requirements and was based off of clear steps and proper research. Competitively, this new design met, and often surpassed, expectations when compared to what was in use prior to this project.

- - +
-
+
+
+
+
+

Color Palette

+
+
+

The color palette and simplified component examples were some of the first items created, in order to provide the development team with a baseline in which to build the environment from.

+
+
+ Color palette created for the Customer Engagement App +
+
+
+
+

Component Examples

+
+
+ An example of the types of components found in the Customer Engagement App +
+ +
+
+
+ +
+
+ Example visual design for the navigation variations in the Customer Engagement App +
+
+
+
+

Results & Impact

+
+

Adoption & Growth

+

+

    +
  • Redesigned interface launched to all Saylent customers in Q3 2015
  • +
  • Positive reception from existing users, with reduced support tickets
  • +
  • Component library adopted as standard for all future product development
  • +
+

+

User Feedback

+

+

    +
  • Post-launch usability testing showed marked improvement in task completion times
  • +
  • Customer satisfaction scores increased following redesign
  • +
  • Users consistently praised the "modern, professional" appearance
  • +
  • Support team reported decrease in UI-related questions and confusion
  • +
+

+

Business Impact

+

+

    +
  • Reduced design-to-development time by 40% through reusable component library
  • +
  • Improved development team efficiency through clear design specifications
  • +
  • Established design standards that accelerated development of additional products
  • +
+

+
+
+< class="divider"> +
+
+
+

What I Learned

+
+
+

+ This project taught me invaluable lessons about establishing design practice at a growing company: +

    +
  1. Design systems pay dividends. The reduction in design-to-development time came directly from creating reusable, well-documented components. The upfront investment in building a component library saved countless hours on future projects.
  2. +
  3. Being the first designer means building infrastructure. Beyond just designing screens, I had to establish processes for user research, usability testing, design reviews, and design-dev collaboration. This foundational work enabled Saylent to scale its design practice as the team grew.
  4. +
  5. Financial services users value clarity and confidence. Through research, I learned that our users prioritized clear labeling, logical workflows, and confirmation steps over flashy interactions.
  6. +
  7. Documentation is as important as the designs themselves. The component library was only valuable because it included clear usage guidelines, code snippets, and examples. This taught me that design deliverables must include the context engineers need to implement them correctly. +
+

+

+ The success of this redesign demonstrated the value of user-centered design at Saylent and paved the way for building a mature design practice at the company. +

+
+
+
+
+
+
+

Final thoughts

+
+
+

I believe that the process used for this project, albeit different, fit within the framework given and met all of the requirements as laid out by the Project Management Team. In the end, a new interface was created that met all of the requirements and was based off of clear steps and proper research. Competitively, this new design met, and often surpassed, expectations when compared to what was in use prior to this project.

+
+
+
-
+ - - + + + + diff --git a/docs/designs/dashboard-analytics/index.html b/docs/designs/dashboard-analytics/index.html new file mode 100644 index 00000000..9b2cb775 --- /dev/null +++ b/docs/designs/dashboard-analytics/index.html @@ -0,0 +1,187 @@ + + + + + + Dashboard Analytics | Adam Jolicoeur + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+

Dashboard Analytics

+

Real-time Data Visualization Platform

+ + +

OVERVIEW
+Designed real-time analytics platform for Saylent Technologies’
+financial services clients. Created intuitive data visualizations
+that helped users quickly identify trends and make data-driven decisions.

+

Role: UX Designer
+Company: Saylent Technologies
+Timeline: 2015-2016

+

THE CHALLENGE
+Financial services users needed to monitor account activity and
+identify trends quickly, but existing dashboards were cluttered
+and difficult to parse.

+

THE SOLUTION
+I designed a clean, focused dashboard that prioritized the most
+critical metrics and used clear data visualizations to surface
+insights at a glance.

+

───────────────────────────────────────────
+[Show your 3-4 dashboard images here]
+───────────────────────────────────────────

+

KEY FEATURES

+
    +
  • Real-time data updates for account monitoring
  • +
  • Customizable widgets for different user roles
  • +
  • Clear data visualizations emphasizing key trends
  • +
  • Responsive design for desktop and tablet viewing
  • +
+

IMPACT

+
    +
  • Improved user ability to identify account trends
  • +
  • Reduced time spent searching for critical information
  • +
  • Established design patterns for other Saylent products
  • +
+ +
+ +
+ + + + + + + + + diff --git a/docs/designs/district25/index.html b/docs/designs/district25/index.html deleted file mode 100644 index 53cb5e3a..00000000 --- a/docs/designs/district25/index.html +++ /dev/null @@ -1,329 +0,0 @@ - - - - - - - - District 25 website | Adam Jolicoeur - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-

District 25 website

-

- A website revamp for the 25th Masonic District of Masons in Massachusetts. -

- - - - - - - - - - - - diff --git a/docs/designs/index.html b/docs/designs/index.html deleted file mode 100644 index b9ecb585..00000000 --- a/docs/designs/index.html +++ /dev/null @@ -1,438 +0,0 @@ - - - - - - - - Designs | Adam Jolicoeur - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-

Designs

-

- Collaborate. Learn. Delight. -

- - - -
-
-
-
-

Task-It!

-

One enterprise task management system to rule them all.

-
- the journey -
-
-
-
-
-
-
- -
-
-
- Application Lifecycle Management thumbnail -
-
-

Application Lifecycle Management

-

A one-stop-shop for a team's planning and project lifecycle management.

- the journey -
-
-
- -
-
-
-

Customer Engagement App

-

End-to-end tracking of customer engagement and marketing campaigns.

- the journey -
-
- Customer Engagement App Dashboard thumbnail -
-
-
- -
-
-
- Switchback Timetrak thumbnail -
-
-

Switchback TimeTrak

-

The goal of this redesign was to create a simplistic system to easily access recent log entries, active projects, and team calendars. From this dashboard, users can quickly see these items, in addition to providing quick navigation items for in-depth reporting.

-

- Sketch Bootstrap Font Awesome -

-
-
-
- -
-
-
-

Structure Cloud

-

For this project, I was tasked with converting the UI of a COBOL application into something that would work with the modern web. The task was very challenging, in that one of the main requirements was to keep the layout as close to the original application as possible (in order to minimize the amount of relearning existing users would need to do), while also providing a clean UI that would attract new users to the platform.

-

- Sketch Font Awesome Visual Studio -

-
-
- Structure Cloud UI screenshot -
-
-
- -
-
-
-

Presentations

-

I've created many presentations over the years and recently began to transition them to Figma using the prototyping functionality. -

-
-
-
-
- - Portfolio presentation slide image - Portfolio Review - -
-
- - Color Picker presentation slide example - Color Picker - - -
-
-
- -
- - - - - - - - diff --git a/docs/designs/task-it/index.html b/docs/designs/task-it/index.html index 12df4632..d59a2993 100644 --- a/docs/designs/task-it/index.html +++ b/docs/designs/task-it/index.html @@ -1,10 +1,8 @@ - - - + + - - + Task-It! | Adam Jolicoeur - + @@ -21,38 +19,12 @@ - - - - - - - - - - - + + - - - - + - - - - - - - - -
-

Task-It!

-

- One enterprise task management system to rule them all. -

- - - -
-
-
- -
-
Role
-
Lead Designer
-
Areas
-
User research, Wireframes, User journeys, Mockups, Prototyping
-
Problem
-
After more than a decade of minimal updates, multiple subscription services, and independent teams, it became apparent that a single, scalable solution was needed. This project was to replace the existing systems, eliminating costs and overhead.
-
Challenge
-
With multiple systems container millions of tasks (both current and historical) as well as a growing need for various integrations, it was apparent that the user base would be the biggest challenge. Creating something that could not only handle all of the various methods of work, but also the vast historical nature of teams, presented a very unique situation. Additionally, the product had to be one that all users could utilize, no matter their working method. This included, but was not limited to, users with accessibility needs, users who preferred "terminal" or "keyboard" commands, and those who relied on standard keyboard-mouse usage.
-
Constraints
-
The biggest constraint was that of time. As each day passed, users were onboarded to either the older solution or to products that required licenses and cost the company money. The team was given one year to put together an initial release to be announced at an upcoming conference.
-
-
-
-
-
-
-

The Process

-

Before any design work (wireframes, mockups, prototypes) could begin, extensive user research and testing was needed.

-

Research methods with example questions: + + + +

+
+ +
+

Task-It!

+

One enterprise task management system to rule them all.

+ + +
+

Project Overview

+
+

+ Company:Amazon Web Services +

+

+ Role:Senior UX Designer (Lead Designer) +

+

+ Timeline:2021-2023 +

+

+ Team: + Collaborated with 3 PMs, 8 engineers, UX researcher +

+

+ THE CHALLENGE: + AWS teams were using 3-4 different task tracking tools (Jira, internal systems, spreadsheets), leading to fragmented workflows, poor cross-team visibility, and significant time wasted in context-switching. Product managers struggled to get a unified view of work across teams, and individual contributors were frustrated by having to update multiple systems. +

+

+ MY ROLE: + I designed Task-it, a unified task management platform that consolidated these disparate tools into a single, intuitive system with role-agnostic patterns that could serve diverse AWS teams. +

+

+ THE SOLUTION: + I designed Task-it, a unified task management platform that consolidated these disparate tools into a single, intuitive system. The design focused on role-agnostic patterns that could serve diverse AWS teams—from product managers tracking roadmaps to engineers managing technical debt to support teams triaging customer issues. +

+ THE IMPACT: +

    -
  • Contributor -
      -
    • Those who actively added items to a team's task queue.
    • +
    • 500 daily active users across 15+ AWS teams within 18 months of launch
    • +
    • Consolidated 3-4 separate tracking systems into one unified platform
    • +
    • Reduced context-switching and improved cross-team collaboration
    • +
    • Drove feature roadmap through continuous user research and usability testing
    • +
    • Created scalable UX patterns now being adopted in other AWS internal tools
    • +
    +

    +
+
+
+

The Process

+

Before any design work (wireframes, mockups, prototypes) could begin, extensive user research and testing was needed.

+
+

Research methods with example questions: +

    +
  1. User interviews +
      +
    • Ask users what their role is on their product team.
    • +
    • What product(s) do they use to manage their work?
    • +
    • If they do not use the existing internal product, why not?
  2. -
  3. Owner -
      -
    • Individuals who were, at a high-level, responsible for the delivery and success daily and long-term tasks and goals. While not ICs, Owners had a direct hand in what tasks teams took on.
    • +
    • Competitive analysis +
        +
      • What products are used internally, besides the previous internal-built system?
      • +
      • Why are they used? What do they provide that the current internal system does not?
      • +
      +
    • +
    • On-hand testing +
        +
      • As a user, I needed to work within the system we were working to replace so that I can find the issues that currently exist.
      • +
      • Findings were compared against user interviews. Those interviews were also used as a basis for various testing methods.
    • -
    • Viewer +
    • Observe users
        -
      • Those who stayed on the "outside" of the day-to-day operations, but could influence the work taking place. Viewers were not considered to be a top-level user, but the entire process had to take into account their work. If things became harder for them to see/find, then they were likely to become a blocker to adoption.
      • +
      • Watch how users use the products: where do they always visit? What tasks are they always performing?
    • -
    -

    After discussions with Project Management (PM), it was determined that the target audience would be broken down into tiers: Tier 1 and Tier 2. -

      -
    • Tier 1 consisted of those who used the existing solutions multiple times per day and could assist with driving adoption. These were the Contributors. -
    • -
    • Tier 2 consisted of those who interactive with existing solutions on a weekly basis, and then only to monitor the work being done by those in Tier 1. -
    • +
+

+
+
+

Once a baseline had been established, the first round of user flow diagrams and analysis took place. Each step in the various user flows had two goals: +

    +
  1. Follow user expectations +
      +
    • Users expected to be able to perform basic tasks, such as creating work items, viewing work items, and organizing their work in a single system.
    • +
    +
  2. +
  3. Simplify existing processes +
      +
    • Users would not accept a more complicated process. Interviews taught me that anything more complicated than what they had would be a deal-breaker for switching to, no matter the directives from management.
    • +
    +
  4. +
+

+
+
+
+

Target Audience

+

For the initial release (scoped internally as a "beta"), the target audience consisted of Individual Contributors (IC), with a mix of high-interaction and low-interaction users. These were categorized as 1. Contributors, 2. Owners, and 3. Viewers.

+
+
    +
  1. Contributor +
      +
    • Those who actively added items to a team's task queue.
    -

    -

    User flows, Wireframes, and Mockups

    -

    For the initial Task Details view, user flows and wireframes were used to identify possible errors. The findings from this work would go on to determine the direction of the final mockups.

    -
    -
    -

    User flows

    -
    - Image of the user flow -
    Basic user flow - - Expand - - open image in a new window - -
    -
    -
    -
    -

    User states

    -
    - Image of the various user flow states -
    User flow states - - Expand - - open image in a new window - -
    -
    -
    +
  2. +
  3. Owner +
      +
    • Individuals who were, at a high-level, responsible for the delivery and success daily and long-term tasks and goals. While not ICs, Owners had a direct hand in what tasks teams took on.
    • +
    +
  4. +
  5. Viewer +
      +
    • Those who stayed on the "outside" of the day-to-day operations, but could influence the work taking place. Viewers were not considered to be a top-level user, but the entire process had to take into account their work. If things became harder for them to see/find, then they were likely to become a blocker to adoption.
    • +
    +
  6. +
+
+

After discussions with Project Management (PM), it was determined that the target audience would be broken down into tiers: Tier 1 and Tier 2. +

+
+
    +
  1. + Tier 1 consisted of those who used the existing solutions multiple times per day and could assist with driving adoption. These were the Contributors. +
  2. +
  3. + Tier 2 consisted of those who interactive with existing solutions on a weekly basis, and then only to monitor the work being done by those in Tier 1. +
  4. +
+
+
+
+

User flows, Wireframes, and Mockups

+

For the initial Task Details view, user flows and wireframes were used to identify possible errors. The findings from this work would go on to determine the direction of the final mockups.

+
+
User flows
+
+
+ Image of the user flow +
+
+
+
+
User states
+
+
+ Image of the various user flow states +
+
+
+
+
+

Initial findings

+

Based off of these user flows, I determined that the success and failures paths needed to be looked at further. Depending on the user, these paths had the potential to break experiences and decrease the usability and delight in the product.

+

Wireframes

+

When creating wireframes, I start by taking an existing components (whether already in the application or from the component library in use) and lay out my page. From there, I begin to add some details (using the redacted script font) and basic headings. This is then reviewed with PM, Development, and, if available, fellow UX designers.

+

Mockups

+

After reviews have been completed on the wireframes, mockups are created. In my process, I utilize mockups to get the full look/feel of the page without interactions. Once completed, these are used for user testing as well as final review with the development team.

+
+
+
Wireframe
+
+ Image of the task details wireframe
-

Initial findings

-

Based off of these user flows, I determined that the success and failures paths needed to be looked at further. Depending on the user, these paths had the potential to break experiences and decrease the usability and delight in the product. -

-
-
-

Wireframes

-

When creating wireframes, I start by taking an existing components (whether already in the application or from the component library in use) and lay out my page. From there, I begin to add some details (using the redacted script font) and basic headings. This is then reviewed with PM, Development, and, if available, fellow UX designers.

- -
-
-

Mockups

-

After reviews have been completed on the wireframes, mockups are created. In my process, I utilize mockups to get the full look/feel of the page without interactions. Once completed, these are used for user testing as well as final review with the development team.

- -
+
+
+
Mockup
+
+ Image of the first version of the task details mockup
-
-
- - Image of the task details wireframe - Image of the first version of the task details mockup - -
+
+
+
+
+

Testing and Revisions

+

As part of the iterative process, I consistently looked at user feedback and heat-mapping to determine if there were any changes needed. From the beginning, it was known that additional attributes would be made available to users and that the Task Details page would have to be able to adapt accordingly.

+

As part of the testing process, I created a card-sorting survey for users, where I included all of the existing attributes, as well as some future-planned attributes, and asked users to order them by priority. Priority was determined by the user, with the only prompt being "what attribute(s) are required for you to get your work done in the most efficient manner?".

+
+
User Survey
+
+ Image of the user testing process +
+
+

Revisions

+

+ After analyzing the results of the card-sorting user testing, additional mockups were created to task with the updated attribute priorities. +

+
+
+
Revision 1
+
+ Image of the first version of the task details mockup
-

Testing and Revisions

-

As part of the iterative process, I consistently looked at user feedback and heat-mapping to determine if there were any changes needed. From the beginning, it was known that additional attributes would be made available to users and that the Task Details page would have to be able to adapt accordingly.

-

As part of the testing process, I created a card-sorting survey for users, where I included all of the existing attributes, as well as some future-planned attributes, and asked users to order them by priority. Priority was determined by the user, with the only prompt being "what attribute(s) are required for you to get your work done in the most efficient manner?".

-
- Image of the user testing process -
User testing card sorting -
-
-

Revisions

-

After analyzing the results of the card-sorting user testing, additional mockups were created to task with the updated attribute priorities.

-
-
-
- Image of the first version of the task details mockup -
Version 2 - - Expand - - open image in a new window - -
-
-
-
-
- Image of the first version of the task details mockup -
Version 3 - - Expand - - open image in a new window - -
-
-
-
-
- Image of the first version of the task details mockup -
Version 4 - - Expand - - open image in a new window - -
-
-
+
+
+
Revision 2
+
+ Image of the second version of the task details mockup
-
- -
-

Final thoughts

-
-

Throughout the design process, it became clear that although the initial design solved many of the problems users faced with existing systems, there was plenty of room in which to improve. -

-

From the user testing sessions, specifically card sorting, I was able to adjust the layout and direction of the task details page without negatively impact user's experiences.

-

By working the development team, we were able to quickly role out changes to users and compare the new metrics to those of previous iterations. These metrics became the new baseline for future designs and detail screens across the product.

-
- +
+
+
Revision 3
+
+ Image of the third version of the task details mockup
-
+
+
+

Results & Impact

+

Adoption & Growth

+

+

    +
  • Launched to pilot teams in Q2 2022, reaching general availability by Q4 2022
  • +
  • Grew from 50 pilot users to 500 daily active users within 18 months
  • +
  • Expanded across multiple AWS teams spanning product, engineering, and support organizations
  • +
  • Achieved organic growth through word-of-mouth recommendations from satisfied users
  • +
+

+

User Feedback

+

+

    +
  • Post-launch usability testing showed a high satisfaction rate with overall experience
  • +
  • Users consistently praised the unified view: "Finally, one place to see all my work"
  • +
  • Engineers appreciated the flexible categorization: "Task-it adapts to how I work, not the other way around"
  • +
  • Product managers valued cross-team visibility: "I can finally see what's blocked across all my teams"
  • +
+

+

Business Impact

+

+

    +
  • Consolidated 3-4 legacy tools, reducing tool sprawl and maintenance overhead
  • +
  • Improved cross-team visibility into project status, blockers, and dependencies
  • +
  • Reduced onboarding time for new AWS employees (one tool to learn instead of multiple)
  • +
  • Established design patterns now being adopted in other AWS internal applications
  • +
  • Demonstrated value of user-centered design for internal tools
  • +
+

+
+ +
+
+
+

What I Learned

+
+
+

+ This project reinforced three critical lessons about designing internal tools: +

    +
  1. Internal tools deserve the same design rigor as customer-facing products. By investing in proper user research, prototyping, and testing, we created a tool that users actually wanted to use—driving organic adoption without mandates from leadership.
  2. +
  3. Flexibility beats rigid workflows. Rather than forcing all teams into a single process, we designed role-agnostic patterns that could adapt to different team structures and workflows. This flexibility was key to achieving broad adoption across diverse AWS organizations.
  4. +
  5. Continuous research is essential. By conducting regular usability tests and gathering feedback throughout development, we caught issues early and built features that users actually needed—not just what we assumed they wanted.
  6. +
+

+

+ The success of Task-it demonstrated that internal tools can be delightful and that investing in UX research pays dividends in adoption, productivity, and user satisfaction. +

+
+
+
-
+
+
- - + + + + diff --git a/docs/designs/timetrak/index.html b/docs/designs/timetrak/index.html deleted file mode 100644 index 95b976b3..00000000 --- a/docs/designs/timetrak/index.html +++ /dev/null @@ -1,329 +0,0 @@ - - - - - - - - TimeTrak by Switchback | Adam Jolicoeur - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-

TimeTrak by Switchback

-

- Time tracking software for Switchback, Inc. -

- - - - - - - - - - - - diff --git a/docs/development/code/index.html b/docs/development/code/index.html index 738ea018..add95e45 100644 --- a/docs/development/code/index.html +++ b/docs/development/code/index.html @@ -1,10 +1,8 @@ - - - + + - - + redesign | Adam Jolicoeur - + @@ -21,38 +19,12 @@ - - - - - - - - - - - + + - - - - + - - - - - - - + + + + +
-
-

redesign

-

- A walkthrough of how I redesigned adamjolicoeur.com. -

+
+

redesign

+

A walkthrough of how I redesigned adamjolicoeur.com.

@@ -191,140 +90,44 @@

What I used

-
+
+
- - + + + + diff --git a/docs/development/examples/index.html b/docs/development/examples/index.html index 4b54d31e..451397e8 100644 --- a/docs/development/examples/index.html +++ b/docs/development/examples/index.html @@ -1,10 +1,8 @@ - - - + + - - + codepen examples | Adam Jolicoeur - + @@ -21,38 +19,12 @@ - - - - - - - - - - - + + - - - - + - - - - - - - + + + + +
-
-

codepen examples

-

- When I'm trying out new ideas, I'll often go to codepen to riff on them, but also to see what is already out there. -

+
+

codepen examples

+

When I'm trying out new ideas, I'll often go to codepen to riff on them, but also to see what is already out there.

@@ -229,140 +128,44 @@

-

+
+
- - + + + + diff --git a/docs/development/index.html b/docs/development/index.html index 6a30e698..e7195849 100644 --- a/docs/development/index.html +++ b/docs/development/index.html @@ -1,10 +1,8 @@ - - - + + - - + Development | Adam Jolicoeur - + @@ -21,38 +19,12 @@ - - - - - - - - - - - + + - - - - + - - - - - - - + + + + +
-
-

Development

-

- A selection of code examples from various projects that I've worked on. -

+
+

Development

+

A selection of code examples from various projects that I've worked on.

@@ -363,140 +262,44 @@

Codepen

-
+
+
- - + + + + diff --git a/docs/development/prototypes/index.html b/docs/development/prototypes/index.html index 12d78db9..d074f9e6 100644 --- a/docs/development/prototypes/index.html +++ b/docs/development/prototypes/index.html @@ -1,10 +1,8 @@ - - - + + - - + Prototypes | Adam Jolicoeur - + @@ -21,38 +19,12 @@ - - - - - - - - - - - + + - - - - + - - - - - - - + + + + +
-
-

Prototypes

-

- When I work on a design, I prototype as I go. This allows me to see what I'm doing in a working environment, while keeping expectations realistic. -

+
+

Prototypes

+

When I work on a design, I prototype as I go. This allows me to see what I'm doing in a working environment, while keeping expectations realistic.

@@ -232,140 +131,44 @@

Additional examples:

-
+
+
- - + + + + diff --git a/docs/feed.json b/docs/feed.json index ae470123..46f9b0dd 100644 --- a/docs/feed.json +++ b/docs/feed.json @@ -4,12 +4,12 @@ "eleventyExcludeFromCollections": true, "metadata": { "title": "Adam J. Jolicoeur", - "description": "Portfolio for Adam J. Jolicoeur, User Experience Designer", + "description": "I'm a Product Designer who ships code—and understands the business side. For 15 years, I've designed enterprise applications at Amazon Web Services, Red Hat, and high-growth B2B companies—turning complex, data-intensive workflows into intuitive interfaces that scale.", "language": "en", "url": "https://www.adamjolicoeur.com/", "author": { "name": "Adam J. Jolicoeur", - "url": "https://www.adamjolicoeur.com/about" + "url": "https://www.adamjolicoeur.com/about/adam" } } } @@ -27,115 +27,107 @@ }, "items": [ { - "id": "/marketing/", - "url": "/marketing/", - "title": "Marketing", - "date_published": "2025-11-21T13:26:46Z", - "date": "2025-11-21T13:26:46Z" + "id": "/designs/task-it/", + "url": "/designs/task-it/", + "title": "Task-It!", + "date_published": "2025-11-25T21:06:32Z", + "date": "2025-11-25T21:06:32Z" } , { - "id": "/journeys/journeys/", - "url": "/journeys/journeys/", - "title": "Journeys", - "date_published": "2025-11-21T13:26:46Z", - "date": "2025-11-21T13:26:46Z" + "id": "/designs/customer-engagement/", + "url": "/designs/customer-engagement/", + "title": "Customer Engagement App", + "date_published": "2025-11-25T21:06:32Z", + "date": "2025-11-25T21:06:32Z" } , { - "id": "/development/", - "url": "/development/", - "title": "Development", - "date_published": "2025-08-30T16:14:15Z", - "date": "2025-08-30T16:14:15Z" + "id": "/designs/component-library/", + "url": "/designs/component-library/", + "title": "Component Library", + "date_published": "2025-11-25T21:06:32Z", + "date": "2025-11-25T21:06:32Z" } , { - "id": "/apps/collectsomemore/", - "url": "/apps/collectsomemore/", - "title": "Collect Some More", - "date_published": "2025-08-27T14:04:31Z", - "date": "2025-08-27T14:04:31Z" + "id": "/designs/alm/", + "url": "/designs/alm/", + "title": "Application Lifecycle Management", + "date_published": "2025-11-25T21:06:32Z", + "date": "2025-11-25T21:06:32Z" } , { - "id": "/apps/support/", - "url": "/apps/support/", - "title": "Support", - "date_published": "2025-08-27T14:04:31Z", - "date": "2025-08-27T14:04:31Z" + "id": "/presentations/", + "url": "/presentations/", + "title": "Presentations", + "date_published": "2025-11-25T20:56:41Z", + "date": "2025-11-25T20:56:41Z" } , { - "id": "/apps/releases/", - "url": "/apps/releases/", - "title": "Application Releases", - "date_published": "2025-08-27T14:04:31Z", - "date": "2025-08-27T14:04:31Z" + "id": "/portfolio/", + "url": "/portfolio/", + "title": "My Work", + "date_published": "2025-11-25T20:56:41Z", + "date": "2025-11-25T20:56:41Z" } , { - "id": "/apps/privacy/", - "url": "/apps/privacy/", - "title": "Privacy Policy", - "date_published": "2025-08-27T14:04:31Z", - "date": "2025-08-27T14:04:31Z" + "id": "/designs/dashboard-analytics/", + "url": "/designs/dashboard-analytics/", + "title": "Dashboard Analytics", + "date_published": "2025-11-25T20:56:41Z", + "date": "2025-11-25T20:56:41Z" + } + , + { + "id": "/credits/", + "url": "/credits/", + "title": "Credits", + "date_published": "2025-11-18T20:30:02Z", + "date": "2025-11-18T20:30:02Z" } , { "id": "/presentations/portfolio/", "url": "/presentations/portfolio/", "title": "Portfolio", - "date_published": "2025-07-11T18:43:57Z", - "date": "2025-07-11T18:43:57Z" + "date_published": "2025-11-18T19:18:40Z", + "date": "2025-11-18T19:18:40Z" } , { "id": "/presentations/color-picker/", "url": "/presentations/color-picker/", "title": "Color Picker", - "date_published": "2025-07-11T18:43:57Z", - "date": "2025-07-11T18:43:57Z" - } - , - { - "id": "/designs/task-it/", - "url": "/designs/task-it/", - "title": "Task-It!", - "date_published": "2025-07-11T18:43:57Z", - "date": "2025-07-11T18:43:57Z" + "date_published": "2025-11-18T19:18:40Z", + "date": "2025-11-18T19:18:40Z" } , { - "id": "/designs/customer-engagement/", - "url": "/designs/customer-engagement/", - "title": "Customer Engagement App", - "date_published": "2025-07-11T18:43:57Z", - "date": "2025-07-11T18:43:57Z" - } - , - { - "id": "/designs/alm/", - "url": "/designs/alm/", - "title": "Application Lifecycle Management", - "date_published": "2025-07-11T18:43:57Z", - "date": "2025-07-11T18:43:57Z" + "id": "/about/resume/", + "url": "/about/resume/", + "title": "Adam J. Jolicoeur", + "date_published": "2025-11-18T16:15:09Z", + "date": "2025-11-18T16:15:09Z" } , { - "id": "/designs/", - "url": "/designs/", - "title": "Designs", - "date_published": "2025-07-11T18:43:57Z", - "date": "2025-07-11T18:43:57Z" + "id": "/about/adam/", + "url": "/about/adam/", + "title": "About", + "date_published": "2025-11-18T16:15:09Z", + "date": "2025-11-18T16:15:09Z" } , { - "id": "/streamdeck/examples/", - "url": "/streamdeck/examples/", - "title": "Stream Deck examples", - "date_published": "2025-07-11T18:03:04Z", - "date": "2025-07-11T18:03:04Z" + "id": "/development/", + "url": "/development/", + "title": "Development", + "date_published": "2025-08-30T16:14:15Z", + "date": "2025-08-30T16:14:15Z" } , { @@ -154,14 +146,6 @@ "date": "2025-07-11T18:03:04Z" } , - { - "id": "/contact/", - "url": "/contact/", - "title": "Contact", - "date_published": "2025-06-09T16:14:30Z", - "date": "2025-06-09T16:14:30Z" - } - , { "id": "/uses/", "url": "/uses/", @@ -170,78 +154,6 @@ "date": "2025-06-09T12:20:32Z" } , - { - "id": "/resume/", - "url": "/resume/", - "title": "Adam J. Jolicoeur", - "date_published": "2025-06-09T12:20:32Z", - "date": "2025-06-09T12:20:32Z" - } - , - { - "id": "/credits/", - "url": "/credits/", - "title": "Credits", - "date_published": "2025-06-09T12:20:32Z", - "date": "2025-06-09T12:20:32Z" - } - , - { - "id": "/apps/", - "url": "/apps/", - "title": "Apps", - "date_published": "2025-06-09T12:20:32Z", - "date": "2025-06-09T12:20:32Z" - } - , - { - "id": "/about/", - "url": "/about/", - "title": "About", - "date_published": "2025-06-09T12:20:32Z", - "date": "2025-06-09T12:20:32Z" - } - , - { - "id": "/connect/", - "url": "/connect/", - "title": "Connect", - "date_published": "2025-04-17T15:34:36Z", - "date": "2025-04-17T15:34:36Z" - } - , - { - "id": "/testimonials/", - "url": "/testimonials/", - "title": "Testimonials", - "date_published": "2025-01-20T21:13:03Z", - "date": "2025-01-20T21:13:03Z" - } - , - { - "id": "/presentations/", - "url": "/presentations/", - "title": "Presentations", - "date_published": "2025-01-20T21:13:03Z", - "date": "2025-01-20T21:13:03Z" - } - , - { - "id": "/icons-and-branding/icons/", - "url": "/icons-and-branding/icons/", - "title": "Icons", - "date_published": "2025-01-20T21:13:03Z", - "date": "2025-01-20T21:13:03Z" - } - , - { - "id": "/icons-and-branding/", - "url": "/icons-and-branding/", - "title": "Icons and Branding", - "date_published": "2025-01-20T21:13:03Z", - "date": "2025-01-20T21:13:03Z" - } - , { "id": "/development/prototypes/", "url": "/development/prototypes/", @@ -266,22 +178,6 @@ "date": "2025-01-20T21:13:03Z" } , - { - "id": "/designs/timetrak/", - "url": "/designs/timetrak/", - "title": "TimeTrak by Switchback", - "date_published": "2025-01-20T21:13:03Z", - "date": "2025-01-20T21:13:03Z" - } - , - { - "id": "/designs/district25/", - "url": "/designs/district25/", - "title": "District 25 website", - "date_published": "2025-01-20T21:13:03Z", - "date": "2025-01-20T21:13:03Z" - } - , { "id": "/archives/archives/", "url": "/archives/archives/", @@ -289,14 +185,6 @@ "date_published": "2025-01-20T21:13:03Z", "date": "2025-01-20T21:13:03Z" } - , - { - "id": "/alfred/workflows/", - "url": "/alfred/workflows/", - "title": "Alfred Workflows", - "date_published": "2025-01-20T21:13:03Z", - "date": "2025-01-20T21:13:03Z" - } ] } diff --git a/docs/howto/index.html b/docs/howto/index.html deleted file mode 100644 index 96d32c89..00000000 --- a/docs/howto/index.html +++ /dev/null @@ -1,319 +0,0 @@ - - - - - - - - howto | Adam Jolicoeur - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-
-
-

How to Use the Site #

- -
-
-
- - - - - - diff --git a/docs/icons-and-branding/icons/index.html b/docs/icons-and-branding/icons/index.html deleted file mode 100644 index db312ab2..00000000 --- a/docs/icons-and-branding/icons/index.html +++ /dev/null @@ -1,346 +0,0 @@ - - - - - - - - Icons | Adam Jolicoeur - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-

Icons

-

- Various icons and libraries that I've created. -

- - -
-
- -
-

Icon library

-

- Switchback Icon Library -

Stream Deck

-
-
-
- -
- - - - - - - - diff --git a/docs/icons-and-branding/index.html b/docs/icons-and-branding/index.html deleted file mode 100644 index 8ab0e90e..00000000 --- a/docs/icons-and-branding/index.html +++ /dev/null @@ -1,340 +0,0 @@ - - - - - - - - Icons and Branding | Adam Jolicoeur - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-

Icons and Branding

-

- Various icons, icon packs, and branding elements from over the years. -

- - -
-
-
-
- Icons - Logos - Apparel -
-
-
-
- -
- - - - - - - - diff --git a/docs/index.html b/docs/index.html index 760143bd..8004e689 100644 --- a/docs/index.html +++ b/docs/index.html @@ -1,19 +1,17 @@ - - - + + - - + Adam Jolicoeur - - + + @@ -21,45 +19,19 @@ - - - - - - - - - - - + + - @@ -69,555 +41,242 @@ title="RSS Feed for Adam Jolicoeur" href="/feed/" /> - - - + - - - - -