diff --git a/.claude/CLAUDE.md b/.claude/CLAUDE.md
new file mode 100644
index 0000000..28d2de8
--- /dev/null
+++ b/.claude/CLAUDE.md
@@ -0,0 +1,123 @@
+# Ultracite Code Standards
+
+This project uses **Ultracite**, a zero-config preset that enforces strict code quality standards through automated formatting and linting.
+
+## Quick Reference
+
+- **Format code**: `npm exec -- ultracite fix`
+- **Check for issues**: `npm exec -- ultracite check`
+- **Diagnose setup**: `npm exec -- ultracite doctor`
+
+Biome (the underlying engine) provides robust linting and formatting. Most issues are automatically fixable.
+
+---
+
+## Core Principles
+
+Write code that is **accessible, performant, type-safe, and maintainable**. Focus on clarity and explicit intent over brevity.
+
+### Type Safety & Explicitness
+
+- Use explicit types for function parameters and return values when they enhance clarity
+- Prefer `unknown` over `any` when the type is genuinely unknown
+- Use const assertions (`as const`) for immutable values and literal types
+- Leverage TypeScript's type narrowing instead of type assertions
+- Use meaningful variable names instead of magic numbers - extract constants with descriptive names
+
+### Modern JavaScript/TypeScript
+
+- Use arrow functions for callbacks and short functions
+- Prefer `for...of` loops over `.forEach()` and indexed `for` loops
+- Use optional chaining (`?.`) and nullish coalescing (`??`) for safer property access
+- Prefer template literals over string concatenation
+- Use destructuring for object and array assignments
+- Use `const` by default, `let` only when reassignment is needed, never `var`
+
+### Async & Promises
+
+- Always `await` promises in async functions - don't forget to use the return value
+- Use `async/await` syntax instead of promise chains for better readability
+- Handle errors appropriately in async code with try-catch blocks
+- Don't use async functions as Promise executors
+
+### React & JSX
+
+- Use function components over class components
+- Call hooks at the top level only, never conditionally
+- Specify all dependencies in hook dependency arrays correctly
+- Use the `key` prop for elements in iterables (prefer unique IDs over array indices)
+- Nest children between opening and closing tags instead of passing as props
+- Don't define components inside other components
+- Use semantic HTML and ARIA attributes for accessibility:
+ - Provide meaningful alt text for images
+ - Use proper heading hierarchy
+ - Add labels for form inputs
+ - Include keyboard event handlers alongside mouse events
+ - Use semantic elements (``, ``, etc.) instead of divs with roles
+
+### Error Handling & Debugging
+
+- Remove `console.log`, `debugger`, and `alert` statements from production code
+- Throw `Error` objects with descriptive messages, not strings or other values
+- Use `try-catch` blocks meaningfully - don't catch errors just to rethrow them
+- Prefer early returns over nested conditionals for error cases
+
+### Code Organization
+
+- Keep functions focused and under reasonable cognitive complexity limits
+- Extract complex conditions into well-named boolean variables
+- Use early returns to reduce nesting
+- Prefer simple conditionals over nested ternary operators
+- Group related code together and separate concerns
+
+### Security
+
+- Add `rel="noopener"` when using `target="_blank"` on links
+- Avoid `dangerouslySetInnerHTML` unless absolutely necessary
+- Don't use `eval()` or assign directly to `document.cookie`
+- Validate and sanitize user input
+
+### Performance
+
+- Avoid spread syntax in accumulators within loops
+- Use top-level regex literals instead of creating them in loops
+- Prefer specific imports over namespace imports
+- Avoid barrel files (index files that re-export everything)
+- Use proper image components (e.g., Next.js ``) over ` ` tags
+
+### Framework-Specific Guidance
+
+**Next.js:**
+- Use Next.js `` component for images
+- Use `next/head` or App Router metadata API for head elements
+- Use Server Components for async data fetching instead of async Client Components
+
+**React 19+:**
+- Use ref as a prop instead of `React.forwardRef`
+
+**Solid/Svelte/Vue/Qwik:**
+- Use `class` and `for` attributes (not `className` or `htmlFor`)
+
+---
+
+## Testing
+
+- Write assertions inside `it()` or `test()` blocks
+- Avoid done callbacks in async tests - use async/await instead
+- Don't use `.only` or `.skip` in committed code
+- Keep test suites reasonably flat - avoid excessive `describe` nesting
+
+## When Biome Can't Help
+
+Biome's linter will catch most issues automatically. Focus your attention on:
+
+1. **Business logic correctness** - Biome can't validate your algorithms
+2. **Meaningful naming** - Use descriptive names for functions, variables, and types
+3. **Architecture decisions** - Component structure, data flow, and API design
+4. **Edge cases** - Handle boundary conditions and error states
+5. **User experience** - Accessibility, performance, and usability considerations
+6. **Documentation** - Add comments for complex logic, but prefer self-documenting code
+
+---
+
+Most formatting and common issues are automatically fixed by Biome. Run `npm exec -- ultracite fix` before committing to ensure compliance.
diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml
new file mode 100644
index 0000000..2df3dcd
--- /dev/null
+++ b/.github/workflows/ci.yml
@@ -0,0 +1,26 @@
+name: CI
+
+on:
+ push:
+ branches: ["**"]
+ pull_request:
+
+jobs:
+ build:
+ runs-on: ubuntu-latest
+ steps:
+ - name: Checkout
+ uses: actions/checkout@v4
+ - name: Setup Node
+ uses: actions/setup-node@v4
+ with:
+ node-version: 'lts/*'
+ cache: npm
+ - name: Install
+ run: npm ci
+ - name: Lint
+ run: npm run lint
+ - name: Format Check
+ run: npm run format:check
+ - name: Build
+ run: npm run build
diff --git a/.husky/pre-commit b/.husky/pre-commit
new file mode 100644
index 0000000..45d4d70
--- /dev/null
+++ b/.husky/pre-commit
@@ -0,0 +1,70 @@
+npm test
+
+#!/bin/sh
+# Exit on any error
+set -e
+
+# Check if there are any staged files
+if [ -z "$(git diff --cached --name-only)" ]; then
+ echo "No staged files to format"
+ exit 0
+fi
+
+# Store the hash of staged changes to detect modifications
+STAGED_HASH=$(git diff --cached | sha256sum | cut -d' ' -f1)
+
+# Save list of staged files (handling all file states)
+STAGED_FILES=$(git diff --cached --name-only --diff-filter=ACMR)
+PARTIALLY_STAGED=$(git diff --name-only)
+
+# Stash unstaged changes to preserve working directory
+# --keep-index keeps staged changes in working tree
+git stash push --quiet --keep-index --message "pre-commit-stash" || true
+STASHED=$?
+
+# Run formatter on the staged files
+npx ultracite fix
+FORMAT_EXIT_CODE=$?
+
+# Restore working directory state
+if [ $STASHED -eq 0 ]; then
+ # Re-stage the formatted files
+ if [ -n "$STAGED_FILES" ]; then
+ echo "$STAGED_FILES" | while IFS= read -r file; do
+ if [ -f "$file" ]; then
+ git add "$file"
+ fi
+ done
+ fi
+
+ # Restore unstaged changes
+ git stash pop --quiet || true
+
+ # Restore partial staging if files were partially staged
+ if [ -n "$PARTIALLY_STAGED" ]; then
+ for file in $PARTIALLY_STAGED; do
+ if [ -f "$file" ] && echo "$STAGED_FILES" | grep -q "^$file$"; then
+ # File was partially staged - need to unstage the unstaged parts
+ git restore --staged "$file" 2>/dev/null || true
+ git add -p "$file" < /dev/null 2>/dev/null || git add "$file"
+ fi
+ done
+ fi
+else
+ # No stash was created, just re-add the formatted files
+ if [ -n "$STAGED_FILES" ]; then
+ echo "$STAGED_FILES" | while IFS= read -r file; do
+ if [ -f "$file" ]; then
+ git add "$file"
+ fi
+ done
+ fi
+fi
+
+# Check if staged files actually changed
+NEW_STAGED_HASH=$(git diff --cached | sha256sum | cut -d' ' -f1)
+if [ "$STAGED_HASH" != "$NEW_STAGED_HASH" ]; then
+ echo "✨ Files formatted by Ultracite"
+fi
+
+exit $FORMAT_EXIT_CODE
diff --git a/.zed/settings.json b/.zed/settings.json
new file mode 100644
index 0000000..b669e38
--- /dev/null
+++ b/.zed/settings.json
@@ -0,0 +1,50 @@
+{
+ "formatter": "language_server",
+ "format_on_save": "on",
+ "lsp": {
+ "typescript-language-server": {
+ "settings": {
+ "typescript": {
+ "preferences": {
+ "includePackageJsonAutoImports": "on"
+ }
+ }
+ }
+ }
+ },
+ "languages": {
+ "JavaScript": {
+ "formatter": {
+ "language_server": {
+ "name": "biome"
+ }
+ },
+ "code_actions_on_format": {
+ "source.fixAll.biome": true,
+ "source.organizeImports.biome": true
+ }
+ },
+ "TypeScript": {
+ "formatter": {
+ "language_server": {
+ "name": "biome"
+ }
+ },
+ "code_actions_on_format": {
+ "source.fixAll.biome": true,
+ "source.organizeImports.biome": true
+ }
+ },
+ "TSX": {
+ "formatter": {
+ "language_server": {
+ "name": "biome"
+ }
+ },
+ "code_actions_on_format": {
+ "source.fixAll.biome": true,
+ "source.organizeImports.biome": true
+ }
+ }
+ }
+}
diff --git a/AGENTS.md b/AGENTS.md
new file mode 100644
index 0000000..28d2de8
--- /dev/null
+++ b/AGENTS.md
@@ -0,0 +1,123 @@
+# Ultracite Code Standards
+
+This project uses **Ultracite**, a zero-config preset that enforces strict code quality standards through automated formatting and linting.
+
+## Quick Reference
+
+- **Format code**: `npm exec -- ultracite fix`
+- **Check for issues**: `npm exec -- ultracite check`
+- **Diagnose setup**: `npm exec -- ultracite doctor`
+
+Biome (the underlying engine) provides robust linting and formatting. Most issues are automatically fixable.
+
+---
+
+## Core Principles
+
+Write code that is **accessible, performant, type-safe, and maintainable**. Focus on clarity and explicit intent over brevity.
+
+### Type Safety & Explicitness
+
+- Use explicit types for function parameters and return values when they enhance clarity
+- Prefer `unknown` over `any` when the type is genuinely unknown
+- Use const assertions (`as const`) for immutable values and literal types
+- Leverage TypeScript's type narrowing instead of type assertions
+- Use meaningful variable names instead of magic numbers - extract constants with descriptive names
+
+### Modern JavaScript/TypeScript
+
+- Use arrow functions for callbacks and short functions
+- Prefer `for...of` loops over `.forEach()` and indexed `for` loops
+- Use optional chaining (`?.`) and nullish coalescing (`??`) for safer property access
+- Prefer template literals over string concatenation
+- Use destructuring for object and array assignments
+- Use `const` by default, `let` only when reassignment is needed, never `var`
+
+### Async & Promises
+
+- Always `await` promises in async functions - don't forget to use the return value
+- Use `async/await` syntax instead of promise chains for better readability
+- Handle errors appropriately in async code with try-catch blocks
+- Don't use async functions as Promise executors
+
+### React & JSX
+
+- Use function components over class components
+- Call hooks at the top level only, never conditionally
+- Specify all dependencies in hook dependency arrays correctly
+- Use the `key` prop for elements in iterables (prefer unique IDs over array indices)
+- Nest children between opening and closing tags instead of passing as props
+- Don't define components inside other components
+- Use semantic HTML and ARIA attributes for accessibility:
+ - Provide meaningful alt text for images
+ - Use proper heading hierarchy
+ - Add labels for form inputs
+ - Include keyboard event handlers alongside mouse events
+ - Use semantic elements (``, ``, etc.) instead of divs with roles
+
+### Error Handling & Debugging
+
+- Remove `console.log`, `debugger`, and `alert` statements from production code
+- Throw `Error` objects with descriptive messages, not strings or other values
+- Use `try-catch` blocks meaningfully - don't catch errors just to rethrow them
+- Prefer early returns over nested conditionals for error cases
+
+### Code Organization
+
+- Keep functions focused and under reasonable cognitive complexity limits
+- Extract complex conditions into well-named boolean variables
+- Use early returns to reduce nesting
+- Prefer simple conditionals over nested ternary operators
+- Group related code together and separate concerns
+
+### Security
+
+- Add `rel="noopener"` when using `target="_blank"` on links
+- Avoid `dangerouslySetInnerHTML` unless absolutely necessary
+- Don't use `eval()` or assign directly to `document.cookie`
+- Validate and sanitize user input
+
+### Performance
+
+- Avoid spread syntax in accumulators within loops
+- Use top-level regex literals instead of creating them in loops
+- Prefer specific imports over namespace imports
+- Avoid barrel files (index files that re-export everything)
+- Use proper image components (e.g., Next.js ``) over ` ` tags
+
+### Framework-Specific Guidance
+
+**Next.js:**
+- Use Next.js `` component for images
+- Use `next/head` or App Router metadata API for head elements
+- Use Server Components for async data fetching instead of async Client Components
+
+**React 19+:**
+- Use ref as a prop instead of `React.forwardRef`
+
+**Solid/Svelte/Vue/Qwik:**
+- Use `class` and `for` attributes (not `className` or `htmlFor`)
+
+---
+
+## Testing
+
+- Write assertions inside `it()` or `test()` blocks
+- Avoid done callbacks in async tests - use async/await instead
+- Don't use `.only` or `.skip` in committed code
+- Keep test suites reasonably flat - avoid excessive `describe` nesting
+
+## When Biome Can't Help
+
+Biome's linter will catch most issues automatically. Focus your attention on:
+
+1. **Business logic correctness** - Biome can't validate your algorithms
+2. **Meaningful naming** - Use descriptive names for functions, variables, and types
+3. **Architecture decisions** - Component structure, data flow, and API design
+4. **Edge cases** - Handle boundary conditions and error states
+5. **User experience** - Accessibility, performance, and usability considerations
+6. **Documentation** - Add comments for complex logic, but prefer self-documenting code
+
+---
+
+Most formatting and common issues are automatically fixed by Biome. Run `npm exec -- ultracite fix` before committing to ensure compliance.
diff --git a/README.md b/README.md
index 4ad3f9d..8c9f224 100644
--- a/README.md
+++ b/README.md
@@ -44,7 +44,8 @@ If you have cloned the repo or downloaded from .zip, there are a few steps you m
1. Change directory: `cd marx`.
2. Install node modules: `npm install`.
-4. To run gulp: `gulp`.
+4. Build CSS: `npm run build`.
+5. (Optional) Watch for changes: `npm run watch`.
## Running Github Pages
@@ -68,9 +69,9 @@ These are the files that are generated from `npm install marx-css`
│ ├── marx.css
│ ├── marx.min.css
│ ├── marx.min.css.map
-├── gulpfile.js
├── index.html
├── package.json
+├── postcss.config.cjs
└── src
├── _base.css
├── _buttons.css
diff --git a/biome.jsonc b/biome.jsonc
new file mode 100644
index 0000000..495fab5
--- /dev/null
+++ b/biome.jsonc
@@ -0,0 +1,14 @@
+{
+ "$schema": "./node_modules/@biomejs/biome/configuration_schema.json",
+ "extends": ["ultracite/biome/core"],
+ "files": {
+ "includes": [
+ "**/*",
+ "!!**/css",
+ "!!**/*.map",
+ "!!**/.claude",
+ "!!**/.husky",
+ "!!**/.zed"
+ ]
+ }
+}
diff --git a/css/marx.css b/css/marx.css
index 04ca469..7ccca1e 100644
--- a/css/marx.css
+++ b/css/marx.css
@@ -6,282 +6,282 @@
* 2. Backgrounds do not repeat by default (opinionated).
*/
*,
- ::before,
- ::after {
- box-sizing: border-box; /* 1 */
- background-repeat: no-repeat; /* 2 */
- }
+::before,
+::after {
+ box-sizing: border-box; /* 1 */
+ background-repeat: no-repeat; /* 2 */
+}
/**
- * 1. Add text decoration inheritance in all browsers (opinionated).
- * 2. Add vertical alignment inheritance in all browsers (opinionated).
- */
+ * 1. Add text decoration inheritance in all browsers (opinionated).
+ * 2. Add vertical alignment inheritance in all browsers (opinionated).
+ */
::before,
- ::after {
- text-decoration: inherit; /* 1 */
- vertical-align: inherit; /* 2 */
- }
+::after {
+ text-decoration: inherit; /* 1 */
+ vertical-align: inherit; /* 2 */
+}
/**
- * 1. Use the default cursor in all browsers (opinionated).
- * 2. Change the line height in all browsers (opinionated).
- * 3. Breaks words to prevent overflow in all browsers (opinionated).
- * 4. Use a 4-space tab width in all browsers (opinionated).
- * 5. Remove the grey highlight on links in iOS (opinionated).
- * 6. Prevent adjustments of font size after orientation changes in iOS.
- */
+ * 1. Use the default cursor in all browsers (opinionated).
+ * 2. Change the line height in all browsers (opinionated).
+ * 3. Breaks words to prevent overflow in all browsers (opinionated).
+ * 4. Use a 4-space tab width in all browsers (opinionated).
+ * 5. Remove the grey highlight on links in iOS (opinionated).
+ * 6. Prevent adjustments of font size after orientation changes in iOS.
+ */
:where(:root) {
- cursor: default; /* 1 */
- line-height: 1.5; /* 2 */
- overflow-wrap: break-word; /* 3 */
- -moz-tab-size: 4; /* 4 */
- -o-tab-size: 4;
- tab-size: 4; /* 4 */
- -webkit-tap-highlight-color: transparent; /* 5 */
- -webkit-text-size-adjust: 100%; /* 6 */
- -moz-text-size-adjust: 100%;
- text-size-adjust: 100%; /* 6 */
- }
+ cursor: default; /* 1 */
+ line-height: 1.5; /* 2 */
+ overflow-wrap: break-word; /* 3 */
+ -moz-tab-size: 4; /* 4 */
+ -o-tab-size: 4;
+ tab-size: 4; /* 4 */
+ -webkit-tap-highlight-color: transparent; /* 5 */
+ -webkit-text-size-adjust: 100%; /* 6 */
+ -moz-text-size-adjust: 100%;
+ text-size-adjust: 100%; /* 6 */
+}
/* Sections
* ========================================================================== */
/**
- * Remove the margin in all browsers (opinionated).
- */
+ * Remove the margin in all browsers (opinionated).
+ */
:where(body) {
- margin: 0;
- }
+ margin: 0;
+}
/**
- * Correct the font size and margin on `h1` elements within `section` and
- * `article` contexts in Chrome, Edge, Firefox, and Safari.
- */
+ * Correct the font size and margin on `h1` elements within `section` and
+ * `article` contexts in Chrome, Edge, Firefox, and Safari.
+ */
:where(h1) {
- font-size: 2em;
- margin: 0.67em 0;
- }
+ font-size: 2em;
+ margin: 0.67em 0;
+}
/* Grouping content
* ========================================================================== */
/**
- * Remove the margin on nested lists in Chrome, Edge, and Safari.
- */
+ * Remove the margin on nested lists in Chrome, Edge, and Safari.
+ */
:where(dl, ol, ul) :where(dl, ol, ul) {
- margin: 0;
- }
+ margin: 0;
+}
/**
- * 1. Correct the inheritance of border color in Firefox.
- * 2. Add the correct box sizing in Firefox.
- */
+ * 1. Correct the inheritance of border color in Firefox.
+ * 2. Add the correct box sizing in Firefox.
+ */
:where(hr) {
- color: inherit; /* 1 */
- height: 0; /* 2 */
- }
+ color: inherit; /* 1 */
+ height: 0; /* 2 */
+}
/**
- * Remove the list style on navigation lists in all browsers (opinionated).
- */
+ * Remove the list style on navigation lists in all browsers (opinionated).
+ */
:where(nav) :where(ol, ul) {
- list-style-type: none;
- padding: 0;
- }
+ list-style-type: none;
+ padding: 0;
+}
/**
- * Prevent VoiceOver from ignoring list semantics in Safari (opinionated).
- */
+ * Prevent VoiceOver from ignoring list semantics in Safari (opinionated).
+ */
:where(nav li)::before {
- content: "\200B";
- float: left;
- }
+ content: "\200B";
+ float: left;
+}
/**
- * 1. Correct the inheritance and scaling of font size in all browsers.
- * 2. Correct the odd `em` font sizing in all browsers.
- * 3. Prevent overflow of the container in all browsers (opinionated).
- */
+ * 1. Correct the inheritance and scaling of font size in all browsers.
+ * 2. Correct the odd `em` font sizing in all browsers.
+ * 3. Prevent overflow of the container in all browsers (opinionated).
+ */
:where(pre) {
- font-family: monospace, monospace; /* 1 */
- font-size: 1em; /* 2 */
- overflow: auto; /* 3 */
- }
+ font-family: monospace; /* 1 */
+ font-size: 1em; /* 2 */
+ overflow: auto; /* 3 */
+}
/* Text-level semantics
* ========================================================================== */
/**
- * Add the correct text decoration in Safari.
- */
+ * Add the correct text decoration in Safari.
+ */
:where(abbr[title]) {
- text-decoration: underline;
- -webkit-text-decoration: underline dotted;
- text-decoration: underline dotted;
- }
+ text-decoration: underline;
+ -webkit-text-decoration: underline dotted;
+ text-decoration: underline dotted;
+}
/**
- * Add the correct font weight in Chrome, Edge, and Safari.
- */
+ * Add the correct font weight in Chrome, Edge, and Safari.
+ */
:where(b, strong) {
- font-weight: bolder;
- }
+ font-weight: bolder;
+}
/**
- * 1. Correct the inheritance and scaling of font size in all browsers.
- * 2. Correct the odd `em` font sizing in all browsers.
- */
+ * 1. Correct the inheritance and scaling of font size in all browsers.
+ * 2. Correct the odd `em` font sizing in all browsers.
+ */
:where(code, kbd, samp) {
- font-family: monospace, monospace; /* 1 */
- font-size: 1em; /* 2 */
- }
+ font-family: monospace; /* 1 */
+ font-size: 1em; /* 2 */
+}
/**
- * Add the correct font size in all browsers.
- */
+ * Add the correct font size in all browsers.
+ */
:where(small) {
- font-size: 80%;
- }
+ font-size: 80%;
+}
/* Embedded content
* ========================================================================== */
/*
* Change the alignment on media elements in all browsers (opinionated).
*/
:where(audio, canvas, iframe, img, svg, video) {
- vertical-align: middle;
- }
+ vertical-align: middle;
+}
/**
- * Remove the border on iframes in all browsers (opinionated).
- */
+ * Remove the border on iframes in all browsers (opinionated).
+ */
:where(iframe) {
- border-style: none;
- }
+ border-style: none;
+}
/**
- * Change the fill color to match the text color in all browsers (opinionated).
- */
+ * Change the fill color to match the text color in all browsers (opinionated).
+ */
:where(svg:not([fill])) {
- fill: currentColor;
- }
+ fill: currentColor;
+}
/* Tabular data
* ========================================================================== */
/**
- * 1. Collapse border spacing in all browsers (opinionated).
- * 2. Correct table border color in Chrome, Edge, and Safari.
- * 3. Remove text indentation from table contents in Chrome, Edge, and Safari.
- */
+ * 1. Collapse border spacing in all browsers (opinionated).
+ * 2. Correct table border color in Chrome, Edge, and Safari.
+ * 3. Remove text indentation from table contents in Chrome, Edge, and Safari.
+ */
:where(table) {
- border-collapse: collapse; /* 1 */
- border-color: currentColor; /* 2 */
- text-indent: 0; /* 3 */
- }
+ border-collapse: collapse; /* 1 */
+ border-color: currentColor; /* 2 */
+ text-indent: 0; /* 3 */
+}
/* Forms
* ========================================================================== */
/**
- * Remove the margin on controls in Safari.
- */
+ * Remove the margin on controls in Safari.
+ */
:where(button, input, select) {
- margin: 0;
- }
+ margin: 0;
+}
/**
- * Correct the inability to style buttons in iOS and Safari.
- */
+ * Correct the inability to style buttons in iOS and Safari.
+ */
:where(button, [type="button" i], [type="reset" i], [type="submit" i]) {
- -webkit-appearance: button;
- }
+ -webkit-appearance: button;
+}
/**
- * Change the inconsistent appearance in all browsers (opinionated).
- */
+ * Change the inconsistent appearance in all browsers (opinionated).
+ */
:where(fieldset) {
- border: 1px solid #a0a0a0;
- }
+ border: 1px solid #a0a0a0;
+}
/**
- * Add the correct vertical alignment in Chrome, Edge, and Firefox.
- */
+ * Add the correct vertical alignment in Chrome, Edge, and Firefox.
+ */
:where(progress) {
- vertical-align: baseline;
- }
+ vertical-align: baseline;
+}
/**
- * 1. Remove the margin in Firefox and Safari.
- * 3. Change the resize direction in all browsers (opinionated).
- */
+ * 1. Remove the margin in Firefox and Safari.
+ * 3. Change the resize direction in all browsers (opinionated).
+ */
:where(textarea) {
- margin: 0; /* 1 */
- resize: vertical; /* 3 */
- }
+ margin: 0; /* 1 */
+ resize: vertical; /* 3 */
+}
/**
- * 1. Correct the odd appearance in Chrome, Edge, and Safari.
- * 2. Correct the outline style in Safari.
- */
+ * 1. Correct the odd appearance in Chrome, Edge, and Safari.
+ * 2. Correct the outline style in Safari.
+ */
:where([type="search" i]) {
- -webkit-appearance: textfield; /* 1 */
- outline-offset: -2px; /* 2 */
- }
+ -webkit-appearance: textfield; /* 1 */
+ outline-offset: -2px; /* 2 */
+}
/**
- * Correct the cursor style of increment and decrement buttons in Safari.
- */
+ * Correct the cursor style of increment and decrement buttons in Safari.
+ */
::-webkit-inner-spin-button,
- ::-webkit-outer-spin-button {
- height: auto;
- }
+::-webkit-outer-spin-button {
+ height: auto;
+}
/**
- * Correct the text style of placeholders in Chrome, Edge, and Safari.
- */
+ * Correct the text style of placeholders in Chrome, Edge, and Safari.
+ */
::-webkit-input-placeholder {
- color: inherit;
- opacity: 0.54;
- }
+ color: inherit;
+ opacity: 0.54;
+}
/**
- * Remove the inner padding in Chrome, Edge, and Safari on macOS.
- */
+ * Remove the inner padding in Chrome, Edge, and Safari on macOS.
+ */
::-webkit-search-decoration {
- -webkit-appearance: none;
- }
+ -webkit-appearance: none;
+}
/**
- * 1. Correct the inability to style upload buttons in iOS and Safari.
- * 2. Change font properties to `inherit` in Safari.
- */
+ * 1. Correct the inability to style upload buttons in iOS and Safari.
+ * 2. Change font properties to `inherit` in Safari.
+ */
::-webkit-file-upload-button {
- -webkit-appearance: button; /* 1 */
- font: inherit; /* 2 */
- }
+ -webkit-appearance: button; /* 1 */
+ font: inherit; /* 2 */
+}
/* Interactive
* ========================================================================== */
/*
* Add the correct styles in Safari.
*/
:where(dialog) {
- background-color: white;
- border: solid;
- color: black;
- height: -moz-fit-content;
- height: fit-content;
- left: 0;
- margin: auto;
- padding: 1em;
- position: absolute;
- right: 0;
- width: -moz-fit-content;
- width: fit-content;
- }
+ background-color: white;
+ border: solid;
+ color: black;
+ height: -moz-fit-content;
+ height: fit-content;
+ left: 0;
+ margin: auto;
+ padding: 1em;
+ position: absolute;
+ right: 0;
+ width: -moz-fit-content;
+ width: fit-content;
+}
:where(dialog:not([open])) {
- display: none;
- }
+ display: none;
+}
/*
* Add the correct display in Safari.
*/
:where(details > summary:first-of-type) {
- display: list-item;
- }
+ display: list-item;
+}
/* Accessibility
* ========================================================================== */
/**
- * Change the cursor on busy elements in all browsers (opinionated).
- */
+ * Change the cursor on busy elements in all browsers (opinionated).
+ */
:where([aria-busy="true" i]) {
- cursor: progress;
- }
+ cursor: progress;
+}
/*
* Change the cursor on disabled, not-editable, or otherwise
* inoperable elements in all browsers (opinionated).
*/
:where([aria-disabled="true" i], [disabled]) {
- cursor: not-allowed;
- }
+ cursor: not-allowed;
+}
/*
* Change the display on visually hidden accessible elements
* in all browsers (opinionated).
*/
:where([aria-hidden="false" i][hidden]) {
- display: initial;
- }
+ display: initial;
+}
:where([aria-hidden="false" i][hidden]:not(:focus)) {
- clip: rect(0, 0, 0, 0);
- position: absolute;
- }
+ clip: rect(0, 0, 0, 0);
+ position: absolute;
+}
:root {
--br: 4px;
--xs-pad: 4px;
@@ -312,12 +312,15 @@
--link-color: var(--primary);
--link-hover-color: var(--primary-600);
- --sans-serif: -apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,"Helvetica Neue",Arial,sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol";
- --serif: Georgia, Times, 'Times New Roman', serif;
- --monospace: Menlo, Monaco, Consolas, 'Courier New', monospace;
+ --sans-serif:
+ -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue",
+ Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol";
+ --serif: Georgia, Times, "Times New Roman", serif;
+ --monospace: Menlo, Monaco, Consolas, "Courier New", monospace;
--font-family: var(--sans-serif);
--font-size-base: 16px;
+ --font-size-xs: 8px;
--font-size-sm: 14px;
--font-size-h1: 40px;
--font-size-h2: 32px;
@@ -537,7 +540,9 @@ textarea {
font-size: 1rem;
padding: var(--sm-pad) var(--md-pad);
line-height: 1.5;
- transition: border-color .15s ease-in-out, box-shadow .15s ease-in-out;
+ transition:
+ border-color 0.15s ease-in-out,
+ box-shadow 0.15s ease-in-out;
font-family: var(--sans-serif);
word-break: normal;
}
@@ -559,7 +564,9 @@ input:not([type]) {
width: 100%;
padding: var(--sm-pad) var(--md-pad);
line-height: 1.5;
- transition: border-color .15s ease-in-out, box-shadow .15s ease-in-out;
+ transition:
+ border-color 0.15s ease-in-out,
+ box-shadow 0.15s ease-in-out;
text-align: left;
word-break: normal;
}
@@ -656,29 +663,29 @@ label {
fieldset {
border: 0;
margin: 0;
- padding: var(--sm-pad 0);
+ padding: var(--sm-pad) 0;
}
legend {
border-bottom: var(--border);
color: var(--text);
display: block;
margin-bottom: var(--sm-pad);
- padding: var(--sm-pad 0);
+ padding: var(--sm-pad) 0;
width: 100%;
}
textarea {
overflow: auto;
resize: vertical;
}
-input[type=checkbox],
-input[type=radio] {
+input[type="checkbox"],
+input[type="radio"] {
box-sizing: border-box;
padding: 0;
display: inline;
}
-input[type=submit],
-input[type=reset],
-input[type=button],
+input[type="submit"],
+input[type="reset"],
+input[type="button"],
button {
background-color: var(--primary);
border: var(--primary);
@@ -696,42 +703,46 @@ button {
border: 1px solid transparent;
font-size: 1rem;
line-height: 1.5;
- transition: color .15s ease-in-out, background-color .15s ease-in-out, border-color .15s ease-in-out, box-shadow .15s ease-in-out;
-}
-input[type=submit]::-moz-focus-inner,
-input[type=reset]::-moz-focus-inner,
-input[type=button]::-moz-focus-inner,
+ transition:
+ color 0.15s ease-in-out,
+ background-color 0.15s ease-in-out,
+ border-color 0.15s ease-in-out,
+ box-shadow 0.15s ease-in-out;
+}
+input[type="submit"]::-moz-focus-inner,
+input[type="reset"]::-moz-focus-inner,
+input[type="button"]::-moz-focus-inner,
button::-moz-focus-inner {
padding: 0;
}
-input[type=submit]:hover,
-input[type=reset]:hover,
-input[type=button]:hover,
+input[type="submit"]:hover,
+input[type="reset"]:hover,
+input[type="button"]:hover,
button:hover {
background-color: var(--primary-600);
border-color: var(--primary-600);
color: var(--white);
}
-input[type=submit]:not(:disabled):active,
-input[type=reset]:not(:disabled):active,
-input[type=button]:not(:disabled):active,
+input[type="submit"]:not(:disabled):active,
+input[type="reset"]:not(:disabled):active,
+input[type="button"]:not(:disabled):active,
button:not(:disabled):active {
background-color: var(--primary-600);
border-color: var(--primary-600);
color: var(--white);
}
-input[type=submit]:focus,
-input[type=reset]:focus,
-input[type=button]:focus,
+input[type="submit"]:focus,
+input[type="reset"]:focus,
+input[type="button"]:focus,
button:focus {
outline: 0;
box-shadow: 0 0 0 0.2rem rgba(59, 130, 246, 0.5);
}
-input[type=submit]:disabled,
-input[type=reset]:disabled,
-input[type=button]:disabled,
+input[type="submit"]:disabled,
+input[type="reset"]:disabled,
+input[type="button"]:disabled,
button:disabled {
- opacity: .65;
+ opacity: 0.65;
cursor: not-allowed;
background-color: var(--primary);
border-color: var(--primary);
@@ -742,7 +753,7 @@ table {
margin-bottom: var(--md-pad);
}
caption {
- padding: var(--sm-pad 0);
+ padding: var(--sm-pad) 0;
}
thead th {
border: 0;
@@ -763,7 +774,9 @@ tfoot tr {
}
tfoot td {
color: var(--secondary);
- font-size: var(--sm-pad);
+ font-size: var(--font-size-xs);
font-style: italic;
padding: var(--md-pad) var(--xs-pad);
}
+
+/*# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL3NyYy9tYXJ4LmNzcyIsIi4uL3NyYy9fc2FuaXRpemUuY3NzIiwiLi4vc3JjL192YXJpYWJsZXMuY3NzIiwiLi4vc3JjL19iYXNlLmNzcyIsIi4uL3NyYy9fdHlwb2dyYXBoeS5jc3MiLCIuLi9zcmMvX2Zvcm0uY3NzIiwiLi4vc3JjL19idXR0b25zLmNzcyIsIi4uL3NyYy9fdGFibGVzLmNzcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxtSEFBbUg7QUNBbkg7K0VBQytFO0FBRS9FOzs7RUFHRTtBQUVGOzs7RUFHRSxzQkFBc0IsRUFBRSxNQUFNO0VBQzlCLDRCQUE0QixFQUFFLE1BQU07QUFDdEM7QUFFQTs7O0VBR0U7QUFFRjs7RUFFRSx3QkFBd0IsRUFBRSxNQUFNO0VBQ2hDLHVCQUF1QixFQUFFLE1BQU07QUFDakM7QUFFQTs7Ozs7OztFQU9FO0FBRUY7RUFDRSxlQUFlLEVBQUUsTUFBTTtFQUN2QixnQkFBZ0IsRUFBRSxNQUFNO0VBQ3hCLHlCQUF5QixFQUFFLE1BQU07RUFDakMsZ0JBQWdCLEVBQUUsTUFBTTtFQUN4QixjQUFXO0tBQVgsV0FBVyxFQUFFLE1BQU07RUFDbkIsd0NBQXdDLEVBQUUsTUFBTTtFQUNoRCw4QkFBOEIsRUFBRSxNQUFNO0VBQ3RDLDJCQUFzQjtPQUF0QixzQkFBc0IsRUFBRSxNQUFNO0FBQ2hDO0FBRUE7Z0ZBQ2dGO0FBRWhGOztFQUVFO0FBRUY7RUFDRSxTQUFTO0FBQ1g7QUFFQTs7O0VBR0U7QUFFRjtFQUNFLGNBQWM7RUFDZCxnQkFBZ0I7QUFDbEI7QUFFQTtnRkFDZ0Y7QUFFaEY7O0VBRUU7QUFFRjtFQUNFLFNBQVM7QUFDWDtBQUVBOzs7RUFHRTtBQUVGO0VBQ0UsY0FBYyxFQUFFLE1BQU07RUFDdEIsU0FBUyxFQUFFLE1BQU07QUFDbkI7QUFFQTs7RUFFRTtBQUVGO0VBQ0UscUJBQXFCO0VBQ3JCLFVBQVU7QUFDWjtBQUVBOztFQUVFO0FBRUY7RUFDRSxnQkFBZ0I7RUFDaEIsV0FBVztBQUNiO0FB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QVU7RUFDVixlQUFlO0FBQ2pCO0FDekxBOzs7O0VBSUUsZ0NBQWdDO0VBQ2hDLHNCQUFzQjtFQUN0Qix3QkFBd0I7RUFDeEIsbUJBQW1CO0VBQ25CLG9DQUFvQztFQUNwQyxxQkFBcUI7RUFDckIsZ0JBQWdCO0VBQ2hCLGtCQUFrQjtFQUNsQixtQkFBbUI7RUFDbkIsc0JBQXNCO0VBQ3RCLHlCQUFpQjtLQUFqQixzQkFBaUI7VUFBakIsaUJBQWlCO0VBQ2pCLDZCQUE2QjtFQUM3QixlQUFlO0VBQ2YsZ0JBQWdCO0VBQ2hCOzs7O2dDQUk4QjtBQUNoQztBQUVBOzs7O0VBSUUsVUFBVTtBQUNaO0FBRUE7Ozs7RUFJRSxvQ0FBb0M7RUFDcEMsZ0NBQWdDO0VBQ2hDLG1CQUFtQjtBQUNyQjtBQUVBOzs7O0VBSUUsb0NBQW9DO0VBQ3BDLGdDQUFnQztFQUNoQyxtQkFBbUI7QUFDckI7QUFFQTs7OztFQUlFLFVBQVU7RUFDVixnREFBZ0Q7QUFDbEQ7QUFFQTs7OztFQUlFLGFBQWE7RUFDYixtQkFBbUI7RUFDbkIsZ0NBQWdDO0VBQ2hDLDRCQUE0QjtFQUM1QixtQkFBbUI7QUFDckI7QUNuRUE7RUFDRSx5QkFBeUI7RUFDekIsNEJBQTRCO0FBQzlCO0FBRUE7RUFDRSx3QkFBd0I7QUFDMUI7QUFFQTtFQUNFLFNBQVM7RUFDVCx3Q0FBd0M7RUFDeEMsZ0JBQWdCO0FBQ2xCO0FBRUE7RUFDRSw0QkFBNEI7QUFDOUI7QUFFQTs7RUFFRSw0QkFBNEI7RUFDNUIsc0JBQXNCO0VBQ3RCLHVCQUF1QjtBQUN6QjtBQUVBO0VBQ0UsZ0JBQWdCO0FBQ2xCO0FBRUE7RUFDRSx1QkFBdUI7RUFDdkIsOEJBQThCO0VBQzlCLGtCQUFrQjtFQUNsQixvQ0FBb0M7QUFDdEMiLCJmaWxlIjoibWFyeC5jc3MiLCJzb3VyY2VzQ29udGVudCI6WyIvKiEgTWFyeCB2NC4xLjEgLSBUaGUgY2xhc3NsZXNzIENTUyByZXNldCAocGVyZmVjdCBmb3IgQ29tbXVuaXN0cykgfCBNSVQgTGljZW5zZSB8IGh0dHBzOi8vZ2l0aHViLmNvbS9tYmxvZGUvbWFyeCAqL1xuQGltcG9ydCBcIl9zYW5pdGl6ZS5jc3NcIjtcbkBpbXBvcnQgXCJfdmFyaWFibGVzLmNzc1wiO1xuQGltcG9ydCBcIl9iYXNlLmNzc1wiO1xuQGltcG9ydCBcIl90eXBvZ3JhcGh5LmNzc1wiO1xuQGltcG9ydCBcIl9mb3JtLmNzc1wiO1xuQGltcG9ydCBcIl9idXR0b25zLmNzc1wiO1xuQGltcG9ydCBcIl90YWJsZXMuY3NzXCI7XG4iLCIvKiBEb2N1bWVudFxuICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi9cblxuLyoqXG4gKiAxLiBBZGQgYm9yZGVyIGJveCBzaXppbmcgaW4gYWxsIGJyb3dzZXJzIChvcGluaW9uYXRlZCkuXG4gKiAyLiBCYWNrZ3JvdW5kcyBkbyBub3QgcmVwZWF0IGJ5IGRlZmF1bHQgKG9waW5pb25hdGVkKS5cbiAqL1xuXG4qLFxuOjpiZWZvcmUsXG46OmFmdGVyIHtcbiAgYm94LXNpemluZzogYm9yZGVyLWJveDsgLyogMSAqL1xuICBiYWNrZ3JvdW5kLXJlcGVhdDogbm8tcmVwZWF0OyAvKiAyICovXG59XG5cbi8qKlxuICogMS4gQWRkIHRleHQgZGVjb3JhdGlvbiBpbmhlcml0YW5jZSBpbiBhbGwgYnJvd3NlcnMgKG9waW5pb25hdGVkKS5cbiAqIDIuIEFkZCB2ZXJ0aWNhbCBhbGlnbm1lbnQgaW5oZXJpdGFuY2UgaW4gYWxsIGJyb3dzZXJzIChvcGluaW9uYXRlZCkuXG4gKi9cblxuOjpiZWZvcmUsXG46OmFmdGVyIHtcbiAgdGV4dC1kZWNvcmF0aW9uOiBpbmhlcml0OyAvKiAxICovXG4gIHZlcnRpY2FsLWFsaWduOiBpbmhlcml0OyAvKiAyICovXG59XG5cbi8qKlxuICogMS4gVXNlIHRoZSBkZWZhdWx0IGN1cnNvciBpbiBhbGwgYnJvd3NlcnMgKG9waW5pb25hdGVkKS5cbiAqIDIuIENoYW5nZSB0aGUgbGluZSBoZWlnaHQgaW4gYWxsIGJyb3dzZXJzIChvcGluaW9uYXRlZCkuXG4gKiAzLiBCcmVha3Mgd29yZHMgdG8gcHJldmVudCBvdmVyZmxvdyBpbiBhbGwgYnJvd3NlcnMgKG9waW5pb25hdGVkKS5cbiAqIDQuIFVzZSBhIDQtc3BhY2UgdGFiIHdpZHRoIGluIGFsbCBicm93c2VycyAob3BpbmlvbmF0ZWQpLlxuICogNS4gUmVtb3ZlIHRoZSBncmV5IGhpZ2hsaWdodCBvbiBsaW5rcyBpbiBpT1MgKG9waW5pb25hdGVkKS5cbiAqIDYuIFByZXZlbnQgYWRqdXN0bWVudHMgb2YgZm9udCBzaXplIGFmdGVyIG9yaWVudGF0aW9uIGNoYW5nZXMgaW4gaU9TLlxuICovXG5cbjp3aGVyZSg6cm9vdCkge1xuICBjdXJzb3I6IGRlZmF1bHQ7IC8qIDEgKi9cbiAgbGluZS1oZWlnaHQ6IDEuNTsgLyogMiAqL1xuICBvdmVyZmxvdy13cmFwOiBicmVhay13b3JkOyAvKiAzICovXG4gIC1tb3otdGFiLXNpemU6IDQ7IC8qIDQgKi9cbiAgdGFiLXNpemU6IDQ7IC8qIDQgKi9cbiAgLXdlYmtpdC10YXAtaGlnaGxpZ2h0LWNvbG9yOiB0cmFuc3BhcmVudDsgLyogNSAqL1xuICAtd2Via2l0LXRleHQtc2l6ZS1hZGp1c3Q6IDEwMCU7IC8qIDYgKi9cbiAgdGV4dC1zaXplLWFkanVzdDogMTAwJTsgLyogNiAqL1xufVxuXG4vKiBTZWN0aW9uc1xuICAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovXG5cbi8qKlxuICogUmVtb3ZlIHRoZSBtYXJnaW4gaW4gYWxsIGJyb3dzZXJzIChvcGluaW9uYXRlZCkuXG4gKi9cblxuOndoZXJlKGJvZHkpIHtcbiAgbWFyZ2luOiAwO1xufVxuXG4vKipcbiAqIENvcnJlY3QgdGhlIGZvbnQgc2l6ZSBhbmQgbWFyZ2luIG9uIGBoMWAgZWxlbWVudHMgd2l0aGluIGBzZWN0aW9uYCBhbmRcbiAqIGBhcnRpY2xlYCBjb250ZXh0cyBpbiBDaHJvbWUsIEVkZ2UsIEZpcmVmb3gsIGFuZCBTYWZhcmkuXG4gKi9cblxuOndoZXJlKGgxKSB7XG4gIGZvbnQtc2l6ZTogMmVtO1xuICBtYXJnaW46IDAuNjdlbSAwO1xufVxuXG4vKiBHcm91cGluZyBjb250ZW50XG4gICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi9cblxuLyoqXG4gKiBSZW1vdmUgdGhlIG1hcmdpbiBvbiBuZXN0ZWQgbGlzdHMgaW4gQ2hyb21lLCBFZGdlLCBhbmQgU2FmYXJpLlxuICovXG5cbjp3aGVyZShkbCwgb2wsIHVsKSA6d2hlcmUoZGwsIG9sLCB1bCkge1xuICBtYXJnaW46IDA7XG59XG5cbi8qKlxuICogMS4gQ29ycmVjdCB0aGUgaW5oZXJpdGFuY2Ugb2YgYm9yZGVyIGNvbG9yIGluIEZpcmVmb3guXG4gKiAyLiBBZGQgdGhlIGNvcnJlY3QgYm94IHNpemluZyBpbiBGaXJlZm94LlxuICovXG5cbjp3aGVyZShocikge1xuICBjb2xvcjogaW5oZXJpdDsgLyogMSAqL1xuICBoZWlnaHQ6IDA7IC8qIDIgKi9cbn1cblxuLyoqXG4gKiBSZW1vdmUgdGhlIGxpc3Qgc3R5bGUgb24gbmF2aWdhdGlvbiBsaXN0cyBpbiBhbGwgYnJvd3NlcnMgKG9waW5pb25hdGVkKS5cbiAqL1xuXG46d2hlcmUobmF2KSA6d2hlcmUob2wsIHVsKSB7XG4gIGxpc3Qtc3R5bGUtdHlwZTogbm9uZTtcbiAgcGFkZGluZzogMDtcbn1cblxuLyoqXG4gKiBQcmV2ZW50IFZvaWNlT3ZlciBmcm9tIGlnbm9yaW5nIGxpc3Qgc2VtYW50aWNzIGluIFNhZmFyaSAob3BpbmlvbmF0ZWQpLlxuICovXG5cbjp3aGVyZShuYXYgbGkpOjpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcMjAwQlwiO1xuICBmbG9hdDogbGVmdDtcbn1cblxuLyoqXG4gKiAxLiBDb3JyZWN0IHRoZSBpbmhlcml0YW5jZSBhbmQgc2NhbGluZyBvZiBmb250IHNpemUgaW4gYWxsIGJyb3dzZXJzLlxuICogMi4gQ29ycmVjdCB0aGUgb2RkIGBlbWAgZm9udCBzaXppbmcgaW4gYWxsIGJyb3dzZXJzLlxuICogMy4gUHJldmVudCBvdmVyZmxvdyBvZiB0aGUgY29udGFpbmVyIGluIGFsbCBicm93c2VycyAob3BpbmlvbmF0ZWQpLlxuICovXG5cbjp3aGVyZShwcmUpIHtcbiAgZm9udC1mYW1pbHk6IG1vbm9zcGFjZTsgLyogMSAqL1xuICBmb250LXNpemU6IDFlbTsgLyogMiAqL1xuICBvdmVyZmxvdzogYXV0bzsgLyogMyAqL1xufVxuXG4vKiBUZXh0LWxldmVsIHNlbWFudGljc1xuICAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovXG5cbi8qKlxuICogQWRkIHRoZSBjb3JyZWN0IHRleHQgZGVjb3JhdGlvbiBpbiBTYWZhcmkuXG4gKi9cblxuOndoZXJlKGFiYnJbdGl0bGVdKSB7XG4gIHRleHQtZGVjb3JhdGlvbjogdW5kZXJsaW5lO1xuICB0ZXh0LWRlY29yYXRpb246IHVuZGVybGluZSBkb3R0ZWQ7XG59XG5cbi8qKlxuICogQWRkIHRoZSBjb3JyZWN0IGZvbnQgd2VpZ2h0IGluIENocm9tZSwgRWRnZSwgYW5kIFNhZmFyaS5cbiAqL1xuXG46d2hlcmUoYiwgc3Ryb25nKSB7XG4gIGZvbnQtd2VpZ2h0OiBib2xkZXI7XG59XG5cbi8qKlxuICogMS4gQ29ycmVjdCB0aGUgaW5oZXJpdGFuY2UgYW5kIHNjYWxpbmcgb2YgZm9udCBzaXplIGluIGFsbCBicm93c2Vycy5cbiAqIDIuIENvcnJlY3QgdGhlIG9kZCBgZW1gIGZvbnQgc2l6aW5nIGluIGFsbCBicm93c2Vycy5cbiAqL1xuXG46d2hlcmUoY29kZSwga2JkLCBzYW1wKSB7XG4gIGZvbnQtZmFtaWx5OiBtb25vc3BhY2U7IC8qIDEgKi9cbiAgZm9udC1zaXplOiAxZW07IC8qIDIgKi9cbn1cblxuLyoqXG4gKiBBZGQgdGhlIGNvcnJlY3QgZm9udCBzaXplIGluIGFsbCBicm93c2Vycy5cbiAqL1xuXG46d2hlcmUoc21hbGwpIHtcbiAgZm9udC1zaXplOiA4MCU7XG59XG5cbi8qIEVtYmVkZGVkIGNvbnRlbnRcbiAgKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqL1xuXG4vKlxuICAqIENoYW5nZSB0aGUgYWxpZ25tZW50IG9uIG1lZGlhIGVsZW1lbnRzIGluIGFsbCBicm93c2VycyAob3BpbmlvbmF0ZWQpLlxuICAqL1xuXG46d2hlcmUoYXVkaW8sIGNhbnZhcywgaWZyYW1lLCBpbWcsIHN2ZywgdmlkZW8pIHtcbiAgdmVydGljYWwtYWxpZ246IG1pZGRsZTtcbn1cblxuLyoqXG4gKiBSZW1vdmUgdGhlIGJvcmRlciBvbiBpZnJhbWVzIGluIGFsbCBicm93c2VycyAob3BpbmlvbmF0ZWQpLlxuICovXG5cbjp3aGVyZShpZnJhbWUpIHtcbiAgYm9yZGVyLXN0eWxlOiBub25lO1xufVxuXG4vKipcbiAqIENoYW5nZSB0aGUgZmlsbCBjb2xvciB0byBtYXRjaCB0aGUgdGV4dCBjb2xvciBpbiBhbGwgYnJvd3NlcnMgKG9waW5pb25hdGVkKS5cbiAqL1xuXG46d2hlcmUoc3ZnOm5vdChbZmlsbF0pKSB7XG4gIGZpbGw6IGN1cnJlbnRDb2xvcjtcbn1cblxuLyogVGFidWxhciBkYXRhXG4gICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi9cblxuLyoqXG4gKiAxLiBDb2xsYXBzZSBib3JkZXIgc3BhY2luZyBpbiBhbGwgYnJvd3NlcnMgKG9waW5pb25hdGVkKS5cbiAqIDIuIENvcnJlY3QgdGFibGUgYm9yZGVyIGNvbG9yIGluIENocm9tZSwgRWRnZSwgYW5kIFNhZmFyaS5cbiAqIDMuIFJlbW92ZSB0ZXh0IGluZGVudGF0aW9uIGZyb20gdGFibGUgY29udGVudHMgaW4gQ2hyb21lLCBFZGdlLCBhbmQgU2FmYXJpLlxuICovXG5cbjp3aGVyZSh0YWJsZSkge1xuICBib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOyAvKiAxICovXG4gIGJvcmRlci1jb2xvcjogY3VycmVudENvbG9yOyAvKiAyICovXG4gIHRleHQtaW5kZW50OiAwOyAvKiAzICovXG59XG5cbi8qIEZvcm1zXG4gICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi9cblxuLyoqXG4gKiBSZW1vdmUgdGhlIG1hcmdpbiBvbiBjb250cm9scyBpbiBTYWZhcmkuXG4gKi9cblxuOndoZXJlKGJ1dHRvbiwgaW5wdXQsIHNlbGVjdCkge1xuICBtYXJnaW46IDA7XG59XG5cbi8qKlxuICogQ29ycmVjdCB0aGUgaW5hYmlsaXR5IHRvIHN0eWxlIGJ1dHRvbnMgaW4gaU9TIGFuZCBTYWZhcmkuXG4gKi9cblxuOndoZXJlKGJ1dHRvbiwgW3R5cGU9XCJidXR0b25cIiBpXSwgW3R5cGU9XCJyZXNldFwiIGldLCBbdHlwZT1cInN1Ym1pdFwiIGldKSB7XG4gIC13ZWJraXQtYXBwZWFyYW5jZTogYnV0dG9uO1xufVxuXG4vKipcbiAqIENoYW5nZSB0aGUgaW5jb25zaXN0ZW50IGFwcGVhcmFuY2UgaW4gYWxsIGJyb3dzZXJzIChvcGluaW9uYXRlZCkuXG4gKi9cblxuOndoZXJlKGZpZWxkc2V0KSB7XG4gIGJvcmRlcjogMXB4IHNvbGlkICNhMGEwYTA7XG59XG5cbi8qKlxuICogQWRkIHRoZSBjb3JyZWN0IHZlcnRpY2FsIGFsaWdubWVudCBpbiBDaHJvbWUsIEVkZ2UsIGFuZCBGaXJlZm94LlxuICovXG5cbjp3aGVyZShwcm9ncmVzcykge1xuICB2ZXJ0aWNhbC1hbGlnbjogYmFzZWxpbmU7XG59XG5cbi8qKlxuICogMS4gUmVtb3ZlIHRoZSBtYXJnaW4gaW4gRmlyZWZveCBhbmQgU2FmYXJpLlxuICogMy4gQ2hhbmdlIHRoZSByZXNpemUgZGlyZWN0aW9uIGluIGFsbCBicm93c2VycyAob3BpbmlvbmF0ZWQpLlxuICovXG5cbjp3aGVyZSh0ZXh0YXJlYSkge1xuICBtYXJnaW46IDA7IC8qIDEgKi9cbiAgcmVzaXplOiB2ZXJ0aWNhbDsgLyogMyAqL1xufVxuXG4vKipcbiAqIDEuIENvcnJlY3QgdGhlIG9kZCBhcHBlYXJhbmNlIGluIENocm9tZSwgRWRnZSwgYW5kIFNhZmFyaS5cbiAqIDIuIENvcnJlY3QgdGhlIG91dGxpbmUgc3R5bGUgaW4gU2FmYXJpLlxuICovXG5cbjp3aGVyZShbdHlwZT1cInNlYXJjaFwiIGldKSB7XG4gIC13ZWJraXQtYXBwZWFyYW5jZTogdGV4dGZpZWxkOyAvKiAxICovXG4gIG91dGxpbmUtb2Zmc2V0OiAtMnB4OyAvKiAyICovXG59XG5cbi8qKlxuICogQ29ycmVjdCB0aGUgY3Vyc29yIHN0eWxlIG9mIGluY3JlbWVudCBhbmQgZGVjcmVtZW50IGJ1dHRvbnMgaW4gU2FmYXJpLlxuICovXG5cbjo6LXdlYmtpdC1pbm5lci1zcGluLWJ1dHRvbixcbjo6LXdlYmtpdC1vdXRlci1zcGluLWJ1dHRvbiB7XG4gIGhlaWdodDogYXV0bztcbn1cblxuLyoqXG4gKiBDb3JyZWN0IHRoZSB0ZXh0IHN0eWxlIG9mIHBsYWNlaG9sZGVycyBpbiBDaHJvbWUsIEVkZ2UsIGFuZCBTYWZhcmkuXG4gKi9cblxuOjotd2Via2l0LWlucHV0LXBsYWNlaG9sZGVyIHtcbiAgY29sb3I6IGluaGVyaXQ7XG4gIG9wYWNpdHk6IDAuNTQ7XG59XG5cbi8qKlxuICogUmVtb3ZlIHRoZSBpbm5lciBwYWRkaW5nIGluIENocm9tZSwgRWRnZSwgYW5kIFNhZmFyaSBvbiBtYWNPUy5cbiAqL1xuXG46Oi13ZWJraXQtc2VhcmNoLWRlY29yYXRpb24ge1xuICAtd2Via2l0LWFwcGVhcmFuY2U6IG5vbmU7XG59XG5cbi8qKlxuICogMS4gQ29ycmVjdCB0aGUgaW5hYmlsaXR5IHRvIHN0eWxlIHVwbG9hZCBidXR0b25zIGluIGlPUyBhbmQgU2FmYXJpLlxuICogMi4gQ2hhbmdlIGZvbnQgcHJvcGVydGllcyB0byBgaW5oZXJpdGAgaW4gU2FmYXJpLlxuICovXG5cbjo6LXdlYmtpdC1maWxlLXVwbG9hZC1idXR0b24ge1xuICAtd2Via2l0LWFwcGVhcmFuY2U6IGJ1dHRvbjsgLyogMSAqL1xuICBmb250OiBpbmhlcml0OyAvKiAyICovXG59XG5cbi8qIEludGVyYWN0aXZlXG4gICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi9cblxuLypcbiAgKiBBZGQgdGhlIGNvcnJlY3Qgc3R5bGVzIGluIFNhZmFyaS5cbiAgKi9cblxuOndoZXJlKGRpYWxvZykge1xuICBiYWNrZ3JvdW5kLWNvbG9yOiB3aGl0ZTtcbiAgYm9yZGVyOiBzb2xpZDtcbiAgY29sb3I6IGJsYWNrO1xuICBoZWlnaHQ6IC1tb3otZml0LWNvbnRlbnQ7XG4gIGhlaWdodDogZml0LWNvbnRlbnQ7XG4gIGxlZnQ6IDA7XG4gIG1hcmdpbjogYXV0bztcbiAgcGFkZGluZzogMWVtO1xuICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gIHJpZ2h0OiAwO1xuICB3aWR0aDogLW1vei1maXQtY29udGVudDtcbiAgd2lkdGg6IGZpdC1jb250ZW50O1xufVxuXG46d2hlcmUoZGlhbG9nOm5vdChbb3Blbl0pKSB7XG4gIGRpc3BsYXk6IG5vbmU7XG59XG5cbi8qXG4gICogQWRkIHRoZSBjb3JyZWN0IGRpc3BsYXkgaW4gU2FmYXJpLlxuICAqL1xuXG46d2hlcmUoZGV0YWlscyA+IHN1bW1hcnk6Zmlyc3Qtb2YtdHlwZSkge1xuICBkaXNwbGF5OiBsaXN0LWl0ZW07XG59XG5cbi8qIEFjY2Vzc2liaWxpdHlcbiAgKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqL1xuXG4vKipcbiAqIENoYW5nZSB0aGUgY3Vyc29yIG9uIGJ1c3kgZWxlbWVudHMgaW4gYWxsIGJyb3dzZXJzIChvcGluaW9uYXRlZCkuXG4gKi9cblxuOndoZXJlKFthcmlhLWJ1c3k9XCJ0cnVlXCIgaV0pIHtcbiAgY3Vyc29yOiBwcm9ncmVzcztcbn1cblxuLypcbiAgKiBDaGFuZ2UgdGhlIGN1cnNvciBvbiBkaXNhYmxlZCwgbm90LWVkaXRhYmxlLCBvciBvdGhlcndpc2VcbiAgKiBpbm9wZXJhYmxlIGVsZW1lbnRzIGluIGFsbCBicm93c2VycyAob3BpbmlvbmF0ZWQpLlxuICAqL1xuXG46d2hlcmUoW2FyaWEtZGlzYWJsZWQ9XCJ0cnVlXCIgaV0sIFtkaXNhYmxlZF0pIHtcbiAgY3Vyc29yOiBub3QtYWxsb3dlZDtcbn1cblxuLypcbiAgKiBDaGFuZ2UgdGhlIGRpc3BsYXkgb24gdmlzdWFsbHkgaGlkZGVuIGFjY2Vzc2libGUgZWxlbWVudHNcbiAgKiBpbiBhbGwgYnJvd3NlcnMgKG9waW5pb25hdGVkKS5cbiAgKi9cblxuOndoZXJlKFthcmlhLWhpZGRlbj1cImZhbHNlXCIgaV1baGlkZGVuXSkge1xuICBkaXNwbGF5OiBpbml0aWFsO1xufVxuXG46d2hlcmUoW2FyaWEtaGlkZGVuPVwiZmFsc2VcIiBpXVtoaWRkZW5dOm5vdCg6Zm9jdXMpKSB7XG4gIGNsaXA6IHJlY3QoMCwgMCwgMCwgMCk7XG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbn1cbiIsIjpyb290IHtcbiAgLS1icjogNHB4O1xuICAtLXhzLXBhZDogNHB4O1xuICAtLXNtLXBhZDogOHB4O1xuICAtLW1kLXBhZDogMTZweDtcbiAgLS1sZy1wYWQ6IDIwcHg7XG4gIC0teGxnLXBhZDogNDBweDtcblxuICAtLXNtLWJyZWFrcG9pbnQ6IDQwMHB4O1xuICAtLWxnLWJyZWFrcG9pbnQ6IDc2OHB4O1xuXG4gIC0tcHJpbWFyeS00MDA6ICM2MGE1ZmE7XG4gIC0tcHJpbWFyeTogIzNiODJmNjtcbiAgLS1wcmltYXJ5LTYwMDogIzI1NjNlYjtcbiAgLS1hY2NlbnQ6ICM2NGZmZGE7XG4gIC0tcmVkOiAjZjQzZjVlO1xuICAtLXJlZC02MDA6ICNkYzI2MjY7XG4gIC0teWVsbG93OiAjZWFiMzA4O1xuICAtLWdyZXk6ICNmN2Y3Zjk7XG4gIC0td2hpdGU6ICNmZmY7XG4gIC0tYmxhY2s6ICMwMDA7XG5cbiAgLS10ZXh0OiByZ2JhKDAsIDAsIDAsIDAuOCk7XG4gIC0tc2Vjb25kYXJ5OiByZ2JhKDAsIDAsIDAsIDAuNTQpO1xuICAtLWRpc2FibGVkOiByZ2JhKDAsIDAsIDAsIDAuMzgpO1xuICAtLWRpdmlkZXJzOiByZ2JhKDAsIDAsIDAsIDAuMTIpO1xuXG4gIC0tbGluay1jb2xvcjogdmFyKC0tcHJpbWFyeSk7XG4gIC0tbGluay1ob3Zlci1jb2xvcjogdmFyKC0tcHJpbWFyeS02MDApO1xuXG4gIC0tc2Fucy1zZXJpZjpcbiAgICAtYXBwbGUtc3lzdGVtLCBCbGlua01hY1N5c3RlbUZvbnQsIFwiU2Vnb2UgVUlcIiwgUm9ib3RvLCBcIkhlbHZldGljYSBOZXVlXCIsXG4gICAgQXJpYWwsIHNhbnMtc2VyaWYsIFwiQXBwbGUgQ29sb3IgRW1vamlcIiwgXCJTZWdvZSBVSSBFbW9qaVwiLCBcIlNlZ29lIFVJIFN5bWJvbFwiO1xuICAtLXNlcmlmOiBHZW9yZ2lhLCBUaW1lcywgXCJUaW1lcyBOZXcgUm9tYW5cIiwgc2VyaWY7XG4gIC0tbW9ub3NwYWNlOiBNZW5sbywgTW9uYWNvLCBDb25zb2xhcywgXCJDb3VyaWVyIE5ld1wiLCBtb25vc3BhY2U7XG4gIC0tZm9udC1mYW1pbHk6IHZhcigtLXNhbnMtc2VyaWYpO1xuXG4gIC0tZm9udC1zaXplLWJhc2U6IDE2cHg7XG4gIC0tZm9udC1zaXplLXhzOiA4cHg7XG4gIC0tZm9udC1zaXplLXNtOiAxNHB4O1xuICAtLWZvbnQtc2l6ZS1oMTogNDBweDtcbiAgLS1mb250LXNpemUtaDI6IDMycHg7XG4gIC0tZm9udC1zaXplLWgzOiAyOHB4O1xuICAtLWZvbnQtc2l6ZS1oNDogMjRweDtcbiAgLS1mb250LXNpemUtaDU6IDIwcHg7XG4gIC0tZm9udC1zaXplLWg2OiAxNnB4O1xuICAtLWxpbmUtaGVpZ2h0LWJhc2U6IDEuNTtcblxuICAtLWJvcmRlcjogMXB4IHNvbGlkIHZhcigtLWRpdmlkZXJzKTtcbn1cbiIsIm1haW4sXG5oZWFkZXIsXG5mb290ZXIsXG5hcnRpY2xlLFxuc2VjdGlvbixcbmFzaWRlLFxuZGV0YWlscyxcbnN1bW1hcnkge1xuICBtYXJnaW46IDAgYXV0bztcbiAgbWFyZ2luLWJvdHRvbTogdmFyKC0tbWQtcGFkKTtcbiAgd2lkdGg6IDEwMCU7XG59XG5cbm1haW4ge1xuICBkaXNwbGF5OiBibG9jaztcbiAgbWFyZ2luOiAwIGF1dG87XG4gIG1heC13aWR0aDogdmFyKC0tbGctYnJlYWtwb2ludCk7XG4gIHBhZGRpbmc6IDAgdmFyKC0tbWQtcGFkKSB2YXIoLS1tZC1wYWQpO1xufVxuXG5mb290ZXIge1xuICBib3JkZXItdG9wOiB2YXIoLS1ib3JkZXIpO1xuICBwYWRkaW5nOiB2YXIoLS1tZC1wYWQpIDA7XG4gIHRleHQtYWxpZ246IGNlbnRlcjtcbn1cblxuZm9vdGVyIHAge1xuICBtYXJnaW4tYm90dG9tOiAwO1xufVxuXG5ociB7XG4gIGJvcmRlcjogMDtcbiAgYm9yZGVyLXRvcDogdmFyKC0tYm9yZGVyKTtcbiAgZGlzcGxheTogYmxvY2s7XG4gIG1hcmdpbi10b3A6IHZhcigtLW1kLXBhZCk7XG4gIG1hcmdpbi1ib3R0b206IHZhcigtLW1kLXBhZCk7XG4gIHdpZHRoOiAxMDAlO1xuICBib3gtc2l6aW5nOiBjb250ZW50LWJveDtcbiAgaGVpZ2h0OiAwO1xuICBvdmVyZmxvdzogdmlzaWJsZTtcbn1cblxuaW1nIHtcbiAgaGVpZ2h0OiBhdXRvO1xuICBtYXgtd2lkdGg6IDEwMCU7XG4gIHZlcnRpY2FsLWFsaWduOiBiYXNlbGluZTtcbn1cblxuQG1lZGlhIHNjcmVlbiBhbmQgKG1heC13aWR0aDogdmFyKC0tc20tYnJlYWtwb2ludCkpIHtcbiAgYXJ0aWNsZSxcbiAgc2VjdGlvbixcbiAgYXNpZGUge1xuICAgIGNsZWFyOiBib3RoO1xuICAgIGRpc3BsYXk6IGJsb2NrO1xuICAgIG1heC13aWR0aDogMTAwJTtcbiAgfVxuXG4gIGltZyB7XG4gICAgbWFyZ2luLXJpZ2h0OiB2YXIoLS1tZC1wYWQpO1xuICB9XG59XG5cbmVtYmVkLFxuaWZyYW1lLFxudmlkZW8ge1xuICBib3JkZXI6IDA7XG59XG5cbnByb2dyZXNzIHtcbiAgYmFja2dyb3VuZC1yZXBlYXQ6IHJlcGVhdDtcbn1cbiIsImJvZHkge1xuICBjb2xvcjogdmFyKC0tdGV4dCk7XG4gIGZvbnQtZmFtaWx5OiB2YXIoLS1mb250LWZhbWlseSk7XG4gIGZvbnQtc2l6ZTogdmFyKC0tZm9udC1zaXplLWJhc2UpO1xuICBsaW5lLWhlaWdodDogdmFyKC0tbGluZS1oZWlnaHQtYmFzZSk7XG59XG5cbnAge1xuICBtYXJnaW46IDA7XG4gIG1hcmdpbi1ib3R0b206IHZhcigtLW1kLXBhZCk7XG59XG5cbmgxLFxuaDIsXG5oMyxcbmg0LFxuaDUsXG5oNiB7XG4gIGNvbG9yOiBpbmhlcml0O1xuICBmb250LWZhbWlseTogaW5oZXJpdDtcbiAgbGluZS1oZWlnaHQ6IDEuMjtcbiAgZm9udC13ZWlnaHQ6IDUwMDtcbn1cblxuaDEge1xuICBmb250LXNpemU6IHZhcigtLWZvbnQtc2l6ZS1oMSk7XG4gIG1hcmdpbjogdmFyKC0tbGctcGFkKSAwIHZhcigtLW1kLXBhZCk7XG59XG5cbmgyIHtcbiAgZm9udC1zaXplOiB2YXIoLS1mb250LXNpemUtaDIpO1xuICBtYXJnaW46IHZhcigtLWxnLXBhZCkgMCB2YXIoLS1tZC1wYWQpO1xufVxuXG5oMyB7XG4gIGZvbnQtc2l6ZTogdmFyKC0tZm9udC1zaXplLWgzKTtcbiAgbWFyZ2luOiB2YXIoLS1tZC1wYWQpIDAgdmFyKC0teHMtcGFkKTtcbn1cblxuaDQge1xuICBmb250LXNpemU6IHZhcigtLWZvbnQtc2l6ZS1oNCk7XG4gIG1hcmdpbjogdmFyKC0tbWQtcGFkKSAwIHZhcigtLXhzLXBhZCk7XG59XG5cbmg1IHtcbiAgZm9udC1zaXplOiB2YXIoLS1mb250LXNpemUtaDUpO1xuICBtYXJnaW46IHZhcigtLW1kLXBhZCkgMCB2YXIoLS14cy1wYWQpO1xufVxuXG5oNiB7XG4gIGZvbnQtc2l6ZTogdmFyKC0tZm9udC1zaXplLWg2KTtcbiAgbWFyZ2luOiB2YXIoLS1tZC1wYWQpIDAgdmFyKC0teHMtcGFkKTtcbn1cblxuc21hbGwge1xuICBjb2xvcjogdmFyKC0tc2Vjb25kYXJ5KTtcbiAgdmVydGljYWwtYWxpZ246IGJvdHRvbTtcbn1cblxucHJlIHtcbiAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tZ3JleSk7XG4gIGNvbG9yOiB2YXIoLS10ZXh0KTtcbiAgZGlzcGxheTogYmxvY2s7XG4gIGZvbnQtZmFtaWx5OiB2YXIoLS1tb25vc3BhY2UpO1xuICBmb250LXNpemU6IHZhcigtLWZvbnQtc2l6ZS1iYXNlKTtcbiAgbWFyZ2luOiB2YXIoLS1tZC1wYWQpIDA7XG4gIHBhZGRpbmc6IHZhcigtLW1kLXBhZCk7XG4gIHdoaXRlLXNwYWNlOiBwcmUtd3JhcDtcbiAgb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDtcbn1cblxuY29kZSB7XG4gIGNvbG9yOiB2YXIoLS10ZXh0KTtcbiAgZm9udC1mYW1pbHk6IHZhcigtLW1vbm9zcGFjZSk7XG4gIGZvbnQtc2l6ZTogdmFyKC0tZm9udC1zaXplLWJhc2UpO1xuICBsaW5lLWhlaWdodDogaW5oZXJpdDtcbiAgbWFyZ2luOiAwO1xuICBwYWRkaW5nOiAwO1xuICB2ZXJ0aWNhbC1hbGlnbjogYmFzZWxpbmU7XG4gIHdvcmQtYnJlYWs6IGJyZWFrLWFsbDtcbiAgd29yZC13cmFwOiBicmVhay13b3JkO1xufVxuXG5hIHtcbiAgY29sb3I6IHZhcigtLWxpbmstY29sb3IpO1xuICB0ZXh0LWRlY29yYXRpb246IG5vbmU7XG4gIGJhY2tncm91bmQtY29sb3I6IHRyYW5zcGFyZW50O1xufVxuXG5hOmhvdmVyLFxuYTpmb2N1cyB7XG4gIGNvbG9yOiB2YXIoLS1saW5rLWhvdmVyLWNvbG9yKTtcbiAgdGV4dC1kZWNvcmF0aW9uOiB1bmRlcmxpbmU7XG59XG5cbmRsIHtcbiAgbWFyZ2luLWJvdHRvbTogdmFyKC0tbWQtcGFkKTtcbn1cblxuZGQge1xuICBtYXJnaW4tbGVmdDogdmFyKC0teGxnLXBhZCk7XG59XG5cbnVsLFxub2wge1xuICBtYXJnaW4tYm90dG9tOiB2YXIoLS1zbS1wYWQpO1xuICBwYWRkaW5nLWxlZnQ6IHZhcigtLXhsZy1wYWQpO1xuICB2ZXJ0aWNhbC1hbGlnbjogYmFzZWxpbmU7XG59XG5cbmJsb2NrcXVvdGUge1xuICBib3JkZXItbGVmdDogMnB4IHNvbGlkIHZhcigtLXRleHQpO1xuICBmb250LWZhbWlseTogdmFyKC0tc2VyaWYpO1xuICBmb250LXN0eWxlOiBpdGFsaWM7XG4gIG1hcmdpbjogdmFyKC0tbWQtcGFkKSAwO1xuICBwYWRkaW5nLWxlZnQ6IHZhcigtLW1kLXBhZCk7XG59XG5cbmZpZ2NhcHRpb24ge1xuICBmb250LWZhbWlseTogdmFyKC0tc2VyaWYpO1xufVxuXG51IHtcbiAgdGV4dC1kZWNvcmF0aW9uOiB1bmRlcmxpbmU7XG59XG5cbnMge1xuICB0ZXh0LWRlY29yYXRpb246IGxpbmUtdGhyb3VnaDtcbn1cblxuc3VwIHtcbiAgZm9udC1zaXplOiB2YXIoLS1mb250LXNpemUtc20pO1xuICB2ZXJ0aWNhbC1hbGlnbjogc3VwZXI7XG59XG5cbnN1YiB7XG4gIGZvbnQtc2l6ZTogdmFyKC0tZm9udC1zaXplLXNtKTtcbiAgdmVydGljYWwtYWxpZ246IHN1Yjtcbn1cblxubWFyayB7XG4gIGJhY2tncm91bmQtY29sb3I6IHZhcigtLXllbGxvdyk7XG59XG4iLCJpbnB1dFt0eXBlPVwidGV4dFwiXSxcbmlucHV0W3R5cGU9XCJwYXNzd29yZFwiXSxcbmlucHV0W3R5cGU9XCJlbWFpbFwiXSxcbmlucHV0W3R5cGU9XCJ1cmxcIl0sXG5pbnB1dFt0eXBlPVwiZGF0ZVwiXSxcbmlucHV0W3R5cGU9XCJtb250aFwiXSxcbmlucHV0W3R5cGU9XCJ0aW1lXCJdLFxuaW5wdXRbdHlwZT1cImRhdGV0aW1lXCJdLFxuaW5wdXRbdHlwZT1cImRhdGV0aW1lLWxvY2FsXCJdLFxuaW5wdXRbdHlwZT1cIndlZWtcIl0sXG5pbnB1dFt0eXBlPVwibnVtYmVyXCJdLFxuaW5wdXRbdHlwZT1cInNlYXJjaFwiXSxcbmlucHV0W3R5cGU9XCJ0ZWxcIl0sXG5zZWxlY3QsXG50ZXh0YXJlYSB7XG4gIGJhY2tncm91bmQ6IHZhcigtLXdoaXRlKTtcbiAgYmFja2dyb3VuZC1jbGlwOiBwYWRkaW5nLWJveDtcbiAgYm9yZGVyOiB2YXIoLS1ib3JkZXIpO1xuICBib3JkZXItcmFkaXVzOiB2YXIoLS1icik7XG4gIGNvbG9yOiB2YXIoLS10ZXh0KTtcbiAgZGlzcGxheTogYmxvY2s7XG4gIHdpZHRoOiAxMDAlO1xuICBmb250LXNpemU6IDFyZW07XG4gIHBhZGRpbmc6IHZhcigtLXNtLXBhZCkgdmFyKC0tbWQtcGFkKTtcbiAgbGluZS1oZWlnaHQ6IDEuNTtcbiAgdHJhbnNpdGlvbjpcbiAgICBib3JkZXItY29sb3IgMC4xNXMgZWFzZS1pbi1vdXQsXG4gICAgYm94LXNoYWRvdyAwLjE1cyBlYXNlLWluLW91dDtcbiAgZm9udC1mYW1pbHk6IHZhcigtLXNhbnMtc2VyaWYpO1xuICB3b3JkLWJyZWFrOiBub3JtYWw7XG59XG5cbmlucHV0W3R5cGU9XCJjb2xvclwiXSB7XG4gIGJhY2tncm91bmQtY29sb3I6IHZhcigtLXdoaXRlKTtcbiAgYm9yZGVyOiB2YXIoLS1ib3JkZXIpO1xuICBib3JkZXItcmFkaXVzOiB2YXIoLS1icik7XG4gIGRpc3BsYXk6IGlubGluZS1ibG9jaztcbiAgdmVydGljYWwtYWxpZ246IG1pZGRsZTtcbn1cblxuaW5wdXQ6bm90KFt0eXBlXSkge1xuICAtd2Via2l0LWFwcGVhcmFuY2U6IG5vbmU7XG4gIGJhY2tncm91bmQ6IHZhcigtLXdoaXRlKTtcbiAgYmFja2dyb3VuZC1jbGlwOiBwYWRkaW5nLWJveDtcbiAgYm9yZGVyOiB2YXIoLS1ib3JkZXIpO1xuICBib3JkZXItcmFkaXVzOiB2YXIoLS1icik7XG4gIGNvbG9yOiB2YXIoLS10ZXh0KTtcbiAgZGlzcGxheTogYmxvY2s7XG4gIHdpZHRoOiAxMDAlO1xuICBwYWRkaW5nOiB2YXIoLS1zbS1wYWQpIHZhcigtLW1kLXBhZCk7XG4gIGxpbmUtaGVpZ2h0OiAxLjU7XG4gIHRyYW5zaXRpb246XG4gICAgYm9yZGVyLWNvbG9yIDAuMTVzIGVhc2UtaW4tb3V0LFxuICAgIGJveC1zaGFkb3cgMC4xNXMgZWFzZS1pbi1vdXQ7XG4gIHRleHQtYWxpZ246IGxlZnQ7XG4gIHdvcmQtYnJlYWs6IG5vcm1hbDtcbn1cblxuaW5wdXRbdHlwZT1cInRleHRcIl06Zm9jdXMsXG5pbnB1dFt0eXBlPVwicGFzc3dvcmRcIl06Zm9jdXMsXG5pbnB1dFt0eXBlPVwiZW1haWxcIl06Zm9jdXMsXG5pbnB1dFt0eXBlPVwidXJsXCJdOmZvY3VzLFxuaW5wdXRbdHlwZT1cImRhdGVcIl06Zm9jdXMsXG5pbnB1dFt0eXBlPVwibW9udGhcIl06Zm9jdXMsXG5pbnB1dFt0eXBlPVwidGltZVwiXTpmb2N1cyxcbmlucHV0W3R5cGU9XCJkYXRldGltZVwiXTpmb2N1cyxcbmlucHV0W3R5cGU9XCJkYXRldGltZS1sb2NhbFwiXTpmb2N1cyxcbmlucHV0W3R5cGU9XCJ3ZWVrXCJdOmZvY3VzLFxuaW5wdXRbdHlwZT1cIm51bWJlclwiXTpmb2N1cyxcbmlucHV0W3R5cGU9XCJzZWFyY2hcIl06Zm9jdXMsXG5pbnB1dFt0eXBlPVwidGVsXCJdOmZvY3VzLFxuaW5wdXRbdHlwZT1cImNvbG9yXCJdOmZvY3VzLFxuc2VsZWN0OmZvY3VzLFxudGV4dGFyZWE6Zm9jdXMge1xuICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS13aGl0ZSk7XG4gIGJvcmRlci1jb2xvcjogdmFyKC0tcHJpbWFyeS00MDApO1xuICBvdXRsaW5lOiAwO1xuICBib3gtc2hhZG93OiAwIDAgMCAwLjJyZW0gcmdiYSg1OSwgMTMwLCAyNDYsIDAuNSk7XG59XG5cbmlucHV0Om5vdChbdHlwZV0pOmZvY3VzIHtcbiAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0td2hpdGUpO1xuICBib3JkZXItY29sb3I6IHZhcigtLXByaW1hcnktNDAwKTtcbiAgb3V0bGluZTogMDtcbiAgYm94LXNoYWRvdzogMCAwIDAgMC4ycmVtIHJnYmEoNTksIDEzMCwgMjQ2LCAwLjUpO1xufVxuXG5pbnB1dFt0eXBlPVwiZmlsZVwiXTpmb2N1cyxcbmlucHV0W3R5cGU9XCJyYWRpb1wiXTpmb2N1cyxcbmlucHV0W3R5cGU9XCJjaGVja2JveFwiXTpmb2N1cyB7XG4gIG91dGxpbmU6IDFweCB0aGluIHZhcigtLWRpdmlkZXJzKTtcbn1cblxuaW5wdXRbdHlwZT1cInRleHRcIl1bZGlzYWJsZWRdLFxuaW5wdXRbdHlwZT1cInBhc3N3b3JkXCJdW2Rpc2FibGVkXSxcbmlucHV0W3R5cGU9XCJlbWFpbFwiXVtkaXNhYmxlZF0sXG5pbnB1dFt0eXBlPVwidXJsXCJdW2Rpc2FibGVkXSxcbmlucHV0W3R5cGU9XCJkYXRlXCJdW2Rpc2FibGVkXSxcbmlucHV0W3R5cGU9XCJtb250aFwiXVtkaXNhYmxlZF0sXG5pbnB1dFt0eXBlPVwidGltZVwiXVtkaXNhYmxlZF0sXG5pbnB1dFt0eXBlPVwiZGF0ZXRpbWVcIl1bZGlzYWJsZWRdLFxuaW5wdXRbdHlwZT1cImRhdGV0aW1lLWxvY2FsXCJdW2Rpc2FibGVkXSxcbmlucHV0W3R5cGU9XCJ3ZWVrXCJdW2Rpc2FibGVkXSxcbmlucHV0W3R5cGU9XCJudW1iZXJcIl1bZGlzYWJsZWRdLFxuaW5wdXRbdHlwZT1cInNlYXJjaFwiXVtkaXNhYmxlZF0sXG5pbnB1dFt0eXBlPVwidGVsXCJdW2Rpc2FibGVkXSxcbmlucHV0W3R5cGU9XCJjb2xvclwiXVtkaXNhYmxlZF0sXG5zZWxlY3RbZGlzYWJsZWRdLFxudGV4dGFyZWFbZGlzYWJsZWRdIHtcbiAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tZGl2aWRlcnMpO1xuICBjb2xvcjogdmFyKC0tc2Vjb25kYXJ5KTtcbiAgY3Vyc29yOiBub3QtYWxsb3dlZDtcbiAgb3BhY2l0eTogMTtcbn1cblxuaW5wdXQ6bm90KFt0eXBlXSlbZGlzYWJsZWRdIHtcbiAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tZGl2aWRlcnMpO1xuICBjb2xvcjogdmFyKC0tc2Vjb25kYXJ5KTtcbiAgY3Vyc29yOiBub3QtYWxsb3dlZDtcbiAgb3BhY2l0eTogMTtcbn1cblxuaW5wdXRbcmVhZG9ubHldLFxuc2VsZWN0W3JlYWRvbmx5XSxcbnRleHRhcmVhW3JlYWRvbmx5XSB7XG4gIGJvcmRlci1jb2xvcjogdmFyKC0tZGl2aWRlcnMpO1xuICBjb2xvcjogdmFyKC0tc2Vjb25kYXJ5KTtcbn1cblxuaW5wdXQ6Zm9jdXM6aW52YWxpZCxcbnRleHRhcmVhOmZvY3VzOmludmFsaWQsXG5zZWxlY3Q6Zm9jdXM6aW52YWxpZCB7XG4gIGJvcmRlci1jb2xvcjogdmFyKC0tcmVkLTYwMCk7XG4gIGNvbG9yOiB2YXIoLS1yZWQpO1xufVxuXG5pbnB1dFt0eXBlPVwiZmlsZVwiXTpmb2N1czppbnZhbGlkOmZvY3VzLFxuaW5wdXRbdHlwZT1cInJhZGlvXCJdOmZvY3VzOmludmFsaWQ6Zm9jdXMsXG5pbnB1dFt0eXBlPVwiY2hlY2tib3hcIl06Zm9jdXM6aW52YWxpZDpmb2N1cyB7XG4gIG91dGxpbmUtY29sb3I6IHZhcigtLXJlZCk7XG59XG5cbnNlbGVjdCB7XG4gIGJvcmRlcjogdmFyKC0tYm9yZGVyKTtcbiAgdmVydGljYWwtYWxpZ246IHN1Yjtcbn1cblxuc2VsZWN0Om5vdChbc2l6ZV0pOm5vdChbbXVsdGlwbGVdKSB7XG4gIGhlaWdodDogY2FsYygyLjI1cmVtICsgMnB4KTtcbn1cblxuc2VsZWN0W211bHRpcGxlXSB7XG4gIGhlaWdodDogYXV0bztcbn1cblxubGFiZWwge1xuICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XG4gIGxpbmUtaGVpZ2h0OiAyO1xufVxuXG5maWVsZHNldCB7XG4gIGJvcmRlcjogMDtcbiAgbWFyZ2luOiAwO1xuICBwYWRkaW5nOiB2YXIoLS1zbS1wYWQpIDA7XG59XG5cbmxlZ2VuZCB7XG4gIGJvcmRlci1ib3R0b206IHZhcigtLWJvcmRlcik7XG4gIGNvbG9yOiB2YXIoLS10ZXh0KTtcbiAgZGlzcGxheTogYmxvY2s7XG4gIG1hcmdpbi1ib3R0b206IHZhcigtLXNtLXBhZCk7XG4gIHBhZGRpbmc6IHZhcigtLXNtLXBhZCkgMDtcbiAgd2lkdGg6IDEwMCU7XG59XG5cbnRleHRhcmVhIHtcbiAgb3ZlcmZsb3c6IGF1dG87XG4gIHJlc2l6ZTogdmVydGljYWw7XG59XG5cbmlucHV0W3R5cGU9XCJjaGVja2JveFwiXSxcbmlucHV0W3R5cGU9XCJyYWRpb1wiXSB7XG4gIGJveC1zaXppbmc6IGJvcmRlci1ib3g7XG4gIHBhZGRpbmc6IDA7XG4gIGRpc3BsYXk6IGlubGluZTtcbn1cbiIsImlucHV0W3R5cGU9XCJzdWJtaXRcIl0sXG5pbnB1dFt0eXBlPVwicmVzZXRcIl0sXG5pbnB1dFt0eXBlPVwiYnV0dG9uXCJdLFxuYnV0dG9uIHtcbiAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tcHJpbWFyeSk7XG4gIGJvcmRlcjogdmFyKC0tcHJpbWFyeSk7XG4gIGJvcmRlci1yYWRpdXM6IHZhcigtLWJyKTtcbiAgY29sb3I6IHZhcigtLXdoaXRlKTtcbiAgcGFkZGluZzogdmFyKC0tc20tcGFkKSB2YXIoLS1tZC1wYWQpO1xuICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XG4gIGZvbnQtd2VpZ2h0OiA0MDA7XG4gIHRleHQtYWxpZ246IGNlbnRlcjtcbiAgd2hpdGUtc3BhY2U6IG5vd3JhcDtcbiAgdmVydGljYWwtYWxpZ246IG1pZGRsZTtcbiAgdXNlci1zZWxlY3Q6IG5vbmU7XG4gIGJvcmRlcjogMXB4IHNvbGlkIHRyYW5zcGFyZW50O1xuICBmb250LXNpemU6IDFyZW07XG4gIGxpbmUtaGVpZ2h0OiAxLjU7XG4gIHRyYW5zaXRpb246XG4gICAgY29sb3IgMC4xNXMgZWFzZS1pbi1vdXQsXG4gICAgYmFja2dyb3VuZC1jb2xvciAwLjE1cyBlYXNlLWluLW91dCxcbiAgICBib3JkZXItY29sb3IgMC4xNXMgZWFzZS1pbi1vdXQsXG4gICAgYm94LXNoYWRvdyAwLjE1cyBlYXNlLWluLW91dDtcbn1cblxuaW5wdXRbdHlwZT1cInN1Ym1pdFwiXTo6LW1vei1mb2N1cy1pbm5lcixcbmlucHV0W3R5cGU9XCJyZXNldFwiXTo6LW1vei1mb2N1cy1pbm5lcixcbmlucHV0W3R5cGU9XCJidXR0b25cIl06Oi1tb3otZm9jdXMtaW5uZXIsXG5idXR0b246Oi1tb3otZm9jdXMtaW5uZXIge1xuICBwYWRkaW5nOiAwO1xufVxuXG5pbnB1dFt0eXBlPVwic3VibWl0XCJdOmhvdmVyLFxuaW5wdXRbdHlwZT1cInJlc2V0XCJdOmhvdmVyLFxuaW5wdXRbdHlwZT1cImJ1dHRvblwiXTpob3ZlcixcbmJ1dHRvbjpob3ZlciB7XG4gIGJhY2tncm91bmQtY29sb3I6IHZhcigtLXByaW1hcnktNjAwKTtcbiAgYm9yZGVyLWNvbG9yOiB2YXIoLS1wcmltYXJ5LTYwMCk7XG4gIGNvbG9yOiB2YXIoLS13aGl0ZSk7XG59XG5cbmlucHV0W3R5cGU9XCJzdWJtaXRcIl06bm90KDpkaXNhYmxlZCk6YWN0aXZlLFxuaW5wdXRbdHlwZT1cInJlc2V0XCJdOm5vdCg6ZGlzYWJsZWQpOmFjdGl2ZSxcbmlucHV0W3R5cGU9XCJidXR0b25cIl06bm90KDpkaXNhYmxlZCk6YWN0aXZlLFxuYnV0dG9uOm5vdCg6ZGlzYWJsZWQpOmFjdGl2ZSB7XG4gIGJhY2tncm91bmQtY29sb3I6IHZhcigtLXByaW1hcnktNjAwKTtcbiAgYm9yZGVyLWNvbG9yOiB2YXIoLS1wcmltYXJ5LTYwMCk7XG4gIGNvbG9yOiB2YXIoLS13aGl0ZSk7XG59XG5cbmlucHV0W3R5cGU9XCJzdWJtaXRcIl06Zm9jdXMsXG5pbnB1dFt0eXBlPVwicmVzZXRcIl06Zm9jdXMsXG5pbnB1dFt0eXBlPVwiYnV0dG9uXCJdOmZvY3VzLFxuYnV0dG9uOmZvY3VzIHtcbiAgb3V0bGluZTogMDtcbiAgYm94LXNoYWRvdzogMCAwIDAgMC4ycmVtIHJnYmEoNTksIDEzMCwgMjQ2LCAwLjUpO1xufVxuXG5pbnB1dFt0eXBlPVwic3VibWl0XCJdOmRpc2FibGVkLFxuaW5wdXRbdHlwZT1cInJlc2V0XCJdOmRpc2FibGVkLFxuaW5wdXRbdHlwZT1cImJ1dHRvblwiXTpkaXNhYmxlZCxcbmJ1dHRvbjpkaXNhYmxlZCB7XG4gIG9wYWNpdHk6IDAuNjU7XG4gIGN1cnNvcjogbm90LWFsbG93ZWQ7XG4gIGJhY2tncm91bmQtY29sb3I6IHZhcigtLXByaW1hcnkpO1xuICBib3JkZXItY29sb3I6IHZhcigtLXByaW1hcnkpO1xuICBjb2xvcjogdmFyKC0td2hpdGUpO1xufVxuIiwidGFibGUge1xuICBib3JkZXItdG9wOiB2YXIoLS1ib3JkZXIpO1xuICBtYXJnaW4tYm90dG9tOiB2YXIoLS1tZC1wYWQpO1xufVxuXG5jYXB0aW9uIHtcbiAgcGFkZGluZzogdmFyKC0tc20tcGFkKSAwO1xufVxuXG50aGVhZCB0aCB7XG4gIGJvcmRlcjogMDtcbiAgYm9yZGVyLWJvdHRvbTogMnB4IHNvbGlkIHZhcigtLWRpdmlkZXJzKTtcbiAgdGV4dC1hbGlnbjogbGVmdDtcbn1cblxudHIge1xuICBtYXJnaW4tYm90dG9tOiB2YXIoLS1zbS1wYWQpO1xufVxuXG50aCxcbnRkIHtcbiAgYm9yZGVyLWJvdHRvbTogdmFyKC0tYm9yZGVyKTtcbiAgcGFkZGluZzogdmFyKC0tbWQtcGFkKTtcbiAgdmVydGljYWwtYWxpZ246IGluaGVyaXQ7XG59XG5cbnRmb290IHRyIHtcbiAgdGV4dC1hbGlnbjogbGVmdDtcbn1cblxudGZvb3QgdGQge1xuICBjb2xvcjogdmFyKC0tc2Vjb25kYXJ5KTtcbiAgZm9udC1zaXplOiB2YXIoLS1mb250LXNpemUteHMpO1xuICBmb250LXN0eWxlOiBpdGFsaWM7XG4gIHBhZGRpbmc6IHZhcigtLW1kLXBhZCkgdmFyKC0teHMtcGFkKTtcbn1cbiJdfQ== */
\ No newline at end of file
diff --git a/css/marx.min.css b/css/marx.min.css
index db75d00..a0169cf 100644
--- a/css/marx.min.css
+++ b/css/marx.min.css
@@ -1 +1,2 @@
-/*! Marx v4.1.1 - The classless CSS reset (perfect for Communists) | MIT License | https://github.com/mblode/marx */*,:after,:before{background-repeat:no-repeat;box-sizing:border-box}:after,:before{text-decoration:inherit;vertical-align:inherit}:where(:root){-webkit-tap-highlight-color:transparent;-webkit-text-size-adjust:100%;-moz-text-size-adjust:100%;text-size-adjust:100%;cursor:default;line-height:1.5;overflow-wrap:break-word;-moz-tab-size:4;-o-tab-size:4;tab-size:4}:where(body){margin:0}:where(h1){font-size:2em;margin:.67em 0}:where(dl,ol,ul) :where(dl,ol,ul){margin:0}:where(hr){color:inherit;height:0}:where(nav) :where(ol,ul){list-style-type:none;padding:0}:where(navli):before{content:"\200B";float:left}:where(pre){font-family:monospace,monospace;font-size:1em;overflow:auto}:where(abbr[title]){text-decoration:underline;-webkit-text-decoration:underline dotted;text-decoration:underline dotted}:where(b,strong){font-weight:bolder}:where(code,kbd,samp){font-family:monospace,monospace;font-size:1em}:where(small){font-size:80%}:where(audio,canvas,iframe,img,svg,video){vertical-align:middle}:where(iframe){border-style:none}:where(svg:not([fill])){fill:currentColor}:where(table){border-collapse:collapse;border-color:currentColor;text-indent:0}:where(button,input,select){margin:0}:where(button,[type=button i],[type=reset i],[type=submit i]){-webkit-appearance:button}:where(fieldset){border:1px solid #a0a0a0}:where(progress){vertical-align:baseline}:where(textarea){margin:0;resize:vertical}:where([type=search i]){-webkit-appearance:textfield;outline-offset:-2px}::-webkit-inner-spin-button,::-webkit-outer-spin-button{height:auto}::-webkit-input-placeholder{color:inherit;opacity:.54}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-file-upload-button{-webkit-appearance:button;font:inherit}:where(dialog){background-color:#fff;border:solid;color:#000;height:-moz-fit-content;height:fit-content;left:0;margin:auto;padding:1em;position:absolute;right:0;width:-moz-fit-content;width:fit-content}:where(dialog:not([open])){display:none}:where(details>summary:first-of-type){display:list-item}:where([aria-busy=true i]){cursor:progress}:where([aria-disabled=true i],[disabled]){cursor:not-allowed}:where([aria-hidden=false i][hidden]){display:initial}:where([aria-hidden=false i][hidden]:not(:focus)){clip:rect(0,0,0,0);position:absolute}:root{--br:4px;--xs-pad:4px;--sm-pad:8px;--md-pad:16px;--lg-pad:20px;--xlg-pad:40px;--sm-breakpoint:400px;--lg-breakpoint:768px;--primary-400:#60a5fa;--primary:#3b82f6;--primary-600:#2563eb;--accent:#64ffda;--red:#f43f5e;--red-600:#dc2626;--yellow:#eab308;--grey:#f7f7f9;--white:#fff;--black:#000;--text:rgba(0,0,0,.8);--secondary:rgba(0,0,0,.54);--disabled:rgba(0,0,0,.38);--dividers:rgba(0,0,0,.12);--link-color:var(--primary);--link-hover-color:var(--primary-600);--sans-serif:-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,"Helvetica Neue",Arial,sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol";--serif:Georgia,Times,"Times New Roman",serif;--monospace:Menlo,Monaco,Consolas,"Courier New",monospace;--font-family:var(--sans-serif);--font-size-base:16px;--font-size-sm:14px;--font-size-h1:40px;--font-size-h2:32px;--font-size-h3:28px;--font-size-h4:24px;--font-size-h5:20px;--font-size-h6:16px;--line-height-base:1.5;--border:1px solid var(--dividers)}article,aside,details,footer,header,main,section,summary{margin:0 auto;margin-bottom:var(--md-pad);width:100%}main{display:block;margin:0 auto;max-width:var(--lg-breakpoint);padding:0 var(--md-pad) var(--md-pad)}footer{border-top:var(--border);padding:var(--md-pad) 0;text-align:center}footer p{margin-bottom:0}hr{border:0;border-top:var(--border);box-sizing:content-box;display:block;height:0;margin-bottom:var(--md-pad);margin-top:var(--md-pad);overflow:visible;width:100%}img{height:auto;max-width:100%;vertical-align:baseline}@media screen and (max-width:var(--sm-breakpoint)){article,aside,section{clear:both;display:block;max-width:100%}img{margin-right:var(--md-pad)}}embed,iframe,video{border:0}progress{background-repeat:repeat}body{color:var(--text);font-family:var(--font-family);font-size:var(--font-size-base);line-height:var(--line-height-base)}p{margin:0;margin-bottom:var(--md-pad)}h1,h2,h3,h4,h5,h6{color:inherit;font-family:inherit;font-weight:500;line-height:1.2}h1{font-size:var(--font-size-h1)}h1,h2{margin:var(--lg-pad) 0 var(--md-pad)}h2{font-size:var(--font-size-h2)}h3{font-size:var(--font-size-h3)}h3,h4{margin:var(--md-pad) 0 var(--xs-pad)}h4{font-size:var(--font-size-h4)}h5{font-size:var(--font-size-h5)}h5,h6{margin:var(--md-pad) 0 var(--xs-pad)}h6{font-size:var(--font-size-h6)}small{color:var(--secondary);vertical-align:bottom}pre{background-color:var(--grey);display:block;margin:var(--md-pad) 0;overflow-wrap:break-word;padding:var(--md-pad);white-space:pre-wrap}code,pre{color:var(--text);font-family:var(--monospace);font-size:var(--font-size-base)}code{word-wrap:break-word;line-height:inherit;margin:0;padding:0;vertical-align:baseline;word-break:break-all}a{background-color:transparent;color:var(--link-color);text-decoration:none}a:focus,a:hover{color:var(--link-hover-color);text-decoration:underline}dl{margin-bottom:var(--md-pad)}dd{margin-left:var(--xlg-pad)}ol,ul{margin-bottom:var(--sm-pad);padding-left:var(--xlg-pad);vertical-align:baseline}blockquote{border-left:2px solid var(--text);font-style:italic;margin:var(--md-pad) 0;padding-left:var(--md-pad)}blockquote,figcaption{font-family:var(--serif)}u{text-decoration:underline}s{text-decoration:line-through}sup{vertical-align:super}sub,sup{font-size:var(--font-size-sm)}sub{vertical-align:sub}mark{background-color:var(--yellow)}input[type=date],input[type=datetime-local],input[type=datetime],input[type=email],input[type=month],input[type=number],input[type=password],input[type=search],input[type=tel],input[type=text],input[type=time],input[type=url],input[type=week],select,textarea{background:var(--white);background-clip:padding-box;border:var(--border);border-radius:var(--br);color:var(--text);display:block;font-family:var(--sans-serif);font-size:1rem;line-height:1.5;padding:var(--sm-pad) var(--md-pad);transition:border-color .15s ease-in-out,box-shadow .15s ease-in-out;width:100%;word-break:normal}input[type=color]{background-color:var(--white);display:inline-block;vertical-align:middle}input:not([type]),input[type=color]{border:var(--border);border-radius:var(--br)}input:not([type]){-webkit-appearance:none;background:var(--white);background-clip:padding-box;color:var(--text);display:block;line-height:1.5;padding:var(--sm-pad) var(--md-pad);text-align:left;transition:border-color .15s ease-in-out,box-shadow .15s ease-in-out;width:100%;word-break:normal}input:not([type]):focus,input[type=color]:focus,input[type=date]:focus,input[type=datetime-local]:focus,input[type=datetime]:focus,input[type=email]:focus,input[type=month]:focus,input[type=number]:focus,input[type=password]:focus,input[type=search]:focus,input[type=tel]:focus,input[type=text]:focus,input[type=time]:focus,input[type=url]:focus,input[type=week]:focus,select:focus,textarea:focus{background-color:var(--white);border-color:var(--primary-400);box-shadow:0 0 0 .2rem rgba(59,130,246,.5);outline:0}input[type=checkbox]:focus,input[type=file]:focus,input[type=radio]:focus{outline:1px thin var(--dividers)}input:not([type])[disabled],input[type=color][disabled],input[type=date][disabled],input[type=datetime-local][disabled],input[type=datetime][disabled],input[type=email][disabled],input[type=month][disabled],input[type=number][disabled],input[type=password][disabled],input[type=search][disabled],input[type=tel][disabled],input[type=text][disabled],input[type=time][disabled],input[type=url][disabled],input[type=week][disabled],select[disabled],textarea[disabled]{background-color:var(--dividers);color:var(--secondary);cursor:not-allowed;opacity:1}input[readonly],select[readonly],textarea[readonly]{border-color:var(--dividers);color:var(--secondary)}input:focus:invalid,select:focus:invalid,textarea:focus:invalid{border-color:var(--red-600);color:var(--red)}input[type=checkbox]:focus:invalid:focus,input[type=file]:focus:invalid:focus,input[type=radio]:focus:invalid:focus{outline-color:var(--red)}select{border:var(--border);vertical-align:sub}select:not([size]):not([multiple]){height:calc(2.25rem + 2px)}select[multiple]{height:auto}label{display:inline-block;line-height:2}fieldset{border:0;margin:0}fieldset,legend{padding:var(--sm-pad 0)}legend{border-bottom:var(--border);color:var(--text);display:block;margin-bottom:var(--sm-pad);width:100%}textarea{overflow:auto;resize:vertical}input[type=checkbox],input[type=radio]{box-sizing:border-box;display:inline;padding:0}button,input[type=button],input[type=reset],input[type=submit]{background-color:var(--primary);border:1px solid transparent;border-radius:var(--br);color:var(--white);display:inline-block;font-size:1rem;font-weight:400;line-height:1.5;padding:var(--sm-pad) var(--md-pad);text-align:center;transition:color .15s ease-in-out,background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out;-webkit-user-select:none;-moz-user-select:none;user-select:none;vertical-align:middle;white-space:nowrap}button::-moz-focus-inner,input[type=button]::-moz-focus-inner,input[type=reset]::-moz-focus-inner,input[type=submit]::-moz-focus-inner{padding:0}button:hover,button:not(:disabled):active,input[type=button]:hover,input[type=button]:not(:disabled):active,input[type=reset]:hover,input[type=reset]:not(:disabled):active,input[type=submit]:hover,input[type=submit]:not(:disabled):active{background-color:var(--primary-600);border-color:var(--primary-600);color:var(--white)}button:focus,input[type=button]:focus,input[type=reset]:focus,input[type=submit]:focus{box-shadow:0 0 0 .2rem rgba(59,130,246,.5);outline:0}button:disabled,input[type=button]:disabled,input[type=reset]:disabled,input[type=submit]:disabled{background-color:var(--primary);border-color:var(--primary);color:var(--white);cursor:not-allowed;opacity:.65}table{border-top:var(--border);margin-bottom:var(--md-pad)}caption{padding:var(--sm-pad 0)}thead th{border:0;border-bottom:2px solid var(--dividers);text-align:left}tr{margin-bottom:var(--sm-pad)}td,th{border-bottom:var(--border);padding:var(--md-pad);vertical-align:inherit}tfoot tr{text-align:left}tfoot td{color:var(--secondary);font-size:var(--sm-pad);font-style:italic;padding:var(--md-pad) var(--xs-pad)}
\ No newline at end of file
+/*! Marx v4.1.1 - The classless CSS reset (perfect for Communists) | MIT License | https://github.com/mblode/marx */*,:after,:before{background-repeat:no-repeat;box-sizing:border-box}:after,:before{text-decoration:inherit;vertical-align:inherit}:where(:root){cursor:default;line-height:1.5;overflow-wrap:break-word;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-tap-highlight-color:transparent;-webkit-text-size-adjust:100%;-moz-text-size-adjust:100%;text-size-adjust:100%}:where(body){margin:0}:where(h1){font-size:2em;margin:.67em 0}:where(dl,ol,ul) :where(dl,ol,ul){margin:0}:where(hr){color:inherit;height:0}:where(nav) :where(ol,ul){list-style-type:none;padding:0}:where(nav li):before{content:"\200B";float:left}:where(pre){font-family:monospace;font-size:1em;overflow:auto}:where(abbr[title]){text-decoration:underline;-webkit-text-decoration:underline dotted;text-decoration:underline dotted}:where(b,strong){font-weight:bolder}:where(code,kbd,samp){font-family:monospace;font-size:1em}:where(small){font-size:80%}:where(audio,canvas,iframe,img,svg,video){vertical-align:middle}:where(iframe){border-style:none}:where(svg:not([fill])){fill:currentColor}:where(table){border-collapse:collapse;border-color:currentColor;text-indent:0}:where(button,input,select){margin:0}:where(button,[type=button i],[type=reset i],[type=submit i]){-webkit-appearance:button}:where(fieldset){border:1px solid #a0a0a0}:where(progress){vertical-align:baseline}:where(textarea){margin:0;resize:vertical}:where([type=search i]){-webkit-appearance:textfield;outline-offset:-2px}::-webkit-inner-spin-button,::-webkit-outer-spin-button{height:auto}::-webkit-input-placeholder{color:inherit;opacity:.54}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-file-upload-button{-webkit-appearance:button;font:inherit}:where(dialog){background-color:#fff;border:solid;color:#000;height:-moz-fit-content;height:fit-content;left:0;margin:auto;padding:1em;position:absolute;right:0;width:-moz-fit-content;width:fit-content}:where(dialog:not([open])){display:none}:where(details>summary:first-of-type){display:list-item}:where([aria-busy=true i]){cursor:progress}:where([aria-disabled=true i],[disabled]){cursor:not-allowed}:where([aria-hidden=false i][hidden]){display:initial}:where([aria-hidden=false i][hidden]:not(:focus)){clip:rect(0,0,0,0);position:absolute}:root{--br:4px;--xs-pad:4px;--sm-pad:8px;--md-pad:16px;--lg-pad:20px;--xlg-pad:40px;--sm-breakpoint:400px;--lg-breakpoint:768px;--primary-400:#60a5fa;--primary:#3b82f6;--primary-600:#2563eb;--accent:#64ffda;--red:#f43f5e;--red-600:#dc2626;--yellow:#eab308;--grey:#f7f7f9;--white:#fff;--black:#000;--text:rgba(0,0,0,.8);--secondary:rgba(0,0,0,.54);--disabled:rgba(0,0,0,.38);--dividers:rgba(0,0,0,.12);--link-color:var(--primary);--link-hover-color:var(--primary-600);--sans-serif:-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,"Helvetica Neue",Arial,sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol";--serif:Georgia,Times,"Times New Roman",serif;--monospace:Menlo,Monaco,Consolas,"Courier New",monospace;--font-family:var(--sans-serif);--font-size-base:16px;--font-size-xs:8px;--font-size-sm:14px;--font-size-h1:40px;--font-size-h2:32px;--font-size-h3:28px;--font-size-h4:24px;--font-size-h5:20px;--font-size-h6:16px;--line-height-base:1.5;--border:1px solid var(--dividers)}article,aside,details,footer,header,main,section,summary{margin:0 auto;margin-bottom:var(--md-pad);width:100%}main{display:block;margin:0 auto;max-width:var(--lg-breakpoint);padding:0 var(--md-pad) var(--md-pad)}footer{border-top:var(--border);padding:var(--md-pad) 0;text-align:center}footer p{margin-bottom:0}hr{border:0;border-top:var(--border);box-sizing:content-box;display:block;height:0;margin-bottom:var(--md-pad);margin-top:var(--md-pad);overflow:visible;width:100%}img{height:auto;max-width:100%;vertical-align:baseline}@media screen and (max-width:var(--sm-breakpoint )){article,aside,section{clear:both;display:block;max-width:100%}img{margin-right:var(--md-pad)}}embed,iframe,video{border:0}progress{background-repeat:repeat}body{color:var(--text);font-family:var(--font-family);font-size:var(--font-size-base);line-height:var(--line-height-base)}p{margin:0;margin-bottom:var(--md-pad)}h1,h2,h3,h4,h5,h6{color:inherit;font-family:inherit;font-weight:500;line-height:1.2}h1{font-size:var(--font-size-h1)}h1,h2{margin:var(--lg-pad) 0 var(--md-pad)}h2{font-size:var(--font-size-h2)}h3{font-size:var(--font-size-h3)}h3,h4{margin:var(--md-pad) 0 var(--xs-pad)}h4{font-size:var(--font-size-h4)}h5{font-size:var(--font-size-h5)}h5,h6{margin:var(--md-pad) 0 var(--xs-pad)}h6{font-size:var(--font-size-h6)}small{color:var(--secondary);vertical-align:bottom}pre{background-color:var(--grey);display:block;margin:var(--md-pad) 0;overflow-wrap:break-word;padding:var(--md-pad);white-space:pre-wrap}code,pre{color:var(--text);font-family:var(--monospace);font-size:var(--font-size-base)}code{line-height:inherit;margin:0;padding:0;vertical-align:baseline;word-break:break-all;word-wrap:break-word}a{background-color:transparent;color:var(--link-color);text-decoration:none}a:focus,a:hover{color:var(--link-hover-color);text-decoration:underline}dl{margin-bottom:var(--md-pad)}dd{margin-left:var(--xlg-pad)}ol,ul{margin-bottom:var(--sm-pad);padding-left:var(--xlg-pad);vertical-align:baseline}blockquote{border-left:2px solid var(--text);font-style:italic;margin:var(--md-pad) 0;padding-left:var(--md-pad)}blockquote,figcaption{font-family:var(--serif)}u{text-decoration:underline}s{text-decoration:line-through}sup{vertical-align:super}sub,sup{font-size:var(--font-size-sm)}sub{vertical-align:sub}mark{background-color:var(--yellow)}input[type=date],input[type=datetime-local],input[type=datetime],input[type=email],input[type=month],input[type=number],input[type=password],input[type=search],input[type=tel],input[type=text],input[type=time],input[type=url],input[type=week],select,textarea{background:var(--white);background-clip:padding-box;border:var(--border);border-radius:var(--br);color:var(--text);display:block;font-family:var(--sans-serif);font-size:1rem;line-height:1.5;padding:var(--sm-pad) var(--md-pad);transition:border-color .15s ease-in-out,box-shadow .15s ease-in-out;width:100%;word-break:normal}input[type=color]{background-color:var(--white);display:inline-block;vertical-align:middle}input:not([type]),input[type=color]{border:var(--border);border-radius:var(--br)}input:not([type]){-webkit-appearance:none;background:var(--white);background-clip:padding-box;color:var(--text);display:block;line-height:1.5;padding:var(--sm-pad) var(--md-pad);text-align:left;transition:border-color .15s ease-in-out,box-shadow .15s ease-in-out;width:100%;word-break:normal}input:not([type]):focus,input[type=color]:focus,input[type=date]:focus,input[type=datetime-local]:focus,input[type=datetime]:focus,input[type=email]:focus,input[type=month]:focus,input[type=number]:focus,input[type=password]:focus,input[type=search]:focus,input[type=tel]:focus,input[type=text]:focus,input[type=time]:focus,input[type=url]:focus,input[type=week]:focus,select:focus,textarea:focus{background-color:var(--white);border-color:var(--primary-400);box-shadow:0 0 0 .2rem rgba(59,130,246,.5);outline:0}input[type=checkbox]:focus,input[type=file]:focus,input[type=radio]:focus{outline:1px thin var(--dividers)}input:not([type])[disabled],input[type=color][disabled],input[type=date][disabled],input[type=datetime-local][disabled],input[type=datetime][disabled],input[type=email][disabled],input[type=month][disabled],input[type=number][disabled],input[type=password][disabled],input[type=search][disabled],input[type=tel][disabled],input[type=text][disabled],input[type=time][disabled],input[type=url][disabled],input[type=week][disabled],select[disabled],textarea[disabled]{background-color:var(--dividers);color:var(--secondary);cursor:not-allowed;opacity:1}input[readonly],select[readonly],textarea[readonly]{border-color:var(--dividers);color:var(--secondary)}input:focus:invalid,select:focus:invalid,textarea:focus:invalid{border-color:var(--red-600);color:var(--red)}input[type=checkbox]:focus:invalid:focus,input[type=file]:focus:invalid:focus,input[type=radio]:focus:invalid:focus{outline-color:var(--red)}select{border:var(--border);vertical-align:sub}select:not([size]):not([multiple]){height:calc(2.25rem + 2px)}select[multiple]{height:auto}label{display:inline-block;line-height:2}fieldset{border:0;margin:0}fieldset,legend{padding:var(--sm-pad) 0}legend{border-bottom:var(--border);color:var(--text);display:block;margin-bottom:var(--sm-pad);width:100%}textarea{overflow:auto;resize:vertical}input[type=checkbox],input[type=radio]{box-sizing:border-box;display:inline;padding:0}button,input[type=button],input[type=reset],input[type=submit]{background-color:var(--primary);border:1px solid transparent;border-radius:var(--br);color:var(--white);display:inline-block;font-size:1rem;font-weight:400;line-height:1.5;padding:var(--sm-pad) var(--md-pad);text-align:center;transition:color .15s ease-in-out,background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out;-webkit-user-select:none;-moz-user-select:none;user-select:none;vertical-align:middle;white-space:nowrap}button::-moz-focus-inner,input[type=button]::-moz-focus-inner,input[type=reset]::-moz-focus-inner,input[type=submit]::-moz-focus-inner{padding:0}button:hover,button:not(:disabled):active,input[type=button]:hover,input[type=button]:not(:disabled):active,input[type=reset]:hover,input[type=reset]:not(:disabled):active,input[type=submit]:hover,input[type=submit]:not(:disabled):active{background-color:var(--primary-600);border-color:var(--primary-600);color:var(--white)}button:focus,input[type=button]:focus,input[type=reset]:focus,input[type=submit]:focus{box-shadow:0 0 0 .2rem rgba(59,130,246,.5);outline:0}button:disabled,input[type=button]:disabled,input[type=reset]:disabled,input[type=submit]:disabled{background-color:var(--primary);border-color:var(--primary);color:var(--white);cursor:not-allowed;opacity:.65}table{border-top:var(--border);margin-bottom:var(--md-pad)}caption{padding:var(--sm-pad) 0}thead th{border:0;border-bottom:2px solid var(--dividers);text-align:left}tr{margin-bottom:var(--sm-pad)}td,th{border-bottom:var(--border);padding:var(--md-pad);vertical-align:inherit}tfoot tr{text-align:left}tfoot td{color:var(--secondary);font-size:var(--font-size-xs);font-style:italic;padding:var(--md-pad) var(--xs-pad)}
+/*# sourceMappingURL=marx.min.css.map */
\ No newline at end of file
diff --git a/css/marx.min.css.map b/css/marx.min.css.map
new file mode 100644
index 0000000..2b9ccb4
--- /dev/null
+++ b/css/marx.min.css.map
@@ -0,0 +1 @@
+{"version":3,"sources":["../src/marx.css","../src/_sanitize.css","../src/_variables.css","../src/_base.css","../src/_typography.css","../src/_form.css","../src/_buttons.css","../src/_tables.css"],"names":[],"mappings":"AAAA,mHAAmH,CCQnH,iBAIE,2BAA4B,CAD5B,qBAEF,CAOA,eAEE,uBAAwB,CACxB,sBACF,CAWA,cACE,cAAe,CACf,eAAgB,CAChB,wBAAyB,CACzB,eAAgB,CAChB,aAAW,CAAX,UAAW,CACX,uCAAwC,CACxC,6BAA8B,CAC9B,0BAAsB,CAAtB,qBACF,CASA,aACE,QACF,CAOA,WACE,aAAc,CACd,cACF,CASA,kCACE,QACF,CAOA,WACE,aAAc,CACd,QACF,CAMA,0BACE,oBAAqB,CACrB,SACF,CAMA,sBACE,eAAgB,CAChB,UACF,CAQA,YACE,qBAAsB,CACtB,aAAc,CACd,aACF,CASA,oBACE,yBAA0B,CAC1B,wCAAiC,CAAjC,gCACF,CAMA,iBACE,kBACF,CAOA,sBACE,qBAAsB,CACtB,aACF,CAMA,cACE,aACF,CASA,0CACE,qBACF,CAMA,eACE,iBACF,CAMA,wBACE,iBACF,CAWA,cACE,wBAAyB,CACzB,yBAA0B,CAC1B,aACF,CASA,4BACE,QACF,CAMA,8DACE,yBACF,CAMA,iBACE,wBACF,CAMA,iBACE,uBACF,CAOA,iBACE,QAAS,CACT,eACF,CAOA,wBACE,4BAA6B,CAC7B,mBACF,CAMA,wDAEE,WACF,CAMA,4BACE,aAAc,CACd,WACF,CAMA,4BACE,uBACF,CAOA,6BACE,yBAA0B,CAC1B,YACF,CASA,eACE,qBAAuB,CACvB,YAAa,CACb,UAAY,CACZ,uBAAwB,CACxB,kBAAmB,CACnB,MAAO,CACP,WAAY,CACZ,WAAY,CACZ,iBAAkB,CAClB,OAAQ,CACR,sBAAuB,CACvB,iBACF,CAEA,2BACE,YACF,CAMA,sCACE,iBACF,CASA,2BACE,eACF,CAOA,0CACE,kBACF,CAOA,sCACE,eACF,CAEA,kDACE,kBAAsB,CACtB,iBACF,CCnWA,MACE,QAAS,CACT,YAAa,CACb,YAAa,CACb,aAAc,CACd,aAAc,CACd,cAAe,CAEf,qBAAsB,CACtB,qBAAsB,CAEtB,qBAAsB,CACtB,iBAAkB,CAClB,qBAAsB,CACtB,gBAAiB,CACjB,aAAc,CACd,iBAAkB,CAClB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","file":"marx.min.css","sourcesContent":["/*! Marx v4.1.1 - The classless CSS reset (perfect for Communists) | MIT License | https://github.com/mblode/marx */\n@import \"_sanitize.css\";\n@import \"_variables.css\";\n@import \"_base.css\";\n@import \"_typography.css\";\n@import \"_form.css\";\n@import \"_buttons.css\";\n@import \"_tables.css\";\n","/* Document\n * ========================================================================== */\n\n/**\n * 1. Add border box sizing in all browsers (opinionated).\n * 2. Backgrounds do not repeat by default (opinionated).\n */\n\n*,\n::before,\n::after {\n box-sizing: border-box; /* 1 */\n background-repeat: no-repeat; /* 2 */\n}\n\n/**\n * 1. Add text decoration inheritance in all browsers (opinionated).\n * 2. Add vertical alignment inheritance in all browsers (opinionated).\n */\n\n::before,\n::after {\n text-decoration: inherit; /* 1 */\n vertical-align: inherit; /* 2 */\n}\n\n/**\n * 1. Use the default cursor in all browsers (opinionated).\n * 2. Change the line height in all browsers (opinionated).\n * 3. Breaks words to prevent overflow in all browsers (opinionated).\n * 4. Use a 4-space tab width in all browsers (opinionated).\n * 5. Remove the grey highlight on links in iOS (opinionated).\n * 6. Prevent adjustments of font size after orientation changes in iOS.\n */\n\n:where(:root) {\n cursor: default; /* 1 */\n line-height: 1.5; /* 2 */\n overflow-wrap: break-word; /* 3 */\n -moz-tab-size: 4; /* 4 */\n tab-size: 4; /* 4 */\n -webkit-tap-highlight-color: transparent; /* 5 */\n -webkit-text-size-adjust: 100%; /* 6 */\n text-size-adjust: 100%; /* 6 */\n}\n\n/* Sections\n * ========================================================================== */\n\n/**\n * Remove the margin in all browsers (opinionated).\n */\n\n:where(body) {\n margin: 0;\n}\n\n/**\n * Correct the font size and margin on `h1` elements within `section` and\n * `article` contexts in Chrome, Edge, Firefox, and Safari.\n */\n\n:where(h1) {\n font-size: 2em;\n margin: 0.67em 0;\n}\n\n/* Grouping content\n * ========================================================================== */\n\n/**\n * Remove the margin on nested lists in Chrome, Edge, and Safari.\n */\n\n:where(dl, ol, ul) :where(dl, ol, ul) {\n margin: 0;\n}\n\n/**\n * 1. Correct the inheritance of border color in Firefox.\n * 2. Add the correct box sizing in Firefox.\n */\n\n:where(hr) {\n color: inherit; /* 1 */\n height: 0; /* 2 */\n}\n\n/**\n * Remove the list style on navigation lists in all browsers (opinionated).\n */\n\n:where(nav) :where(ol, ul) {\n list-style-type: none;\n padding: 0;\n}\n\n/**\n * Prevent VoiceOver from ignoring list semantics in Safari (opinionated).\n */\n\n:where(nav li)::before {\n content: \"\\200B\";\n float: left;\n}\n\n/**\n * 1. Correct the inheritance and scaling of font size in all browsers.\n * 2. Correct the odd `em` font sizing in all browsers.\n * 3. Prevent overflow of the container in all browsers (opinionated).\n */\n\n:where(pre) {\n font-family: monospace; /* 1 */\n font-size: 1em; /* 2 */\n overflow: auto; /* 3 */\n}\n\n/* Text-level semantics\n * ========================================================================== */\n\n/**\n * Add the correct text decoration in Safari.\n */\n\n:where(abbr[title]) {\n text-decoration: underline;\n text-decoration: underline dotted;\n}\n\n/**\n * Add the correct font weight in Chrome, Edge, and Safari.\n */\n\n:where(b, strong) {\n font-weight: bolder;\n}\n\n/**\n * 1. Correct the inheritance and scaling of font size in all browsers.\n * 2. Correct the odd `em` font sizing in all browsers.\n */\n\n:where(code, kbd, samp) {\n font-family: monospace; /* 1 */\n font-size: 1em; /* 2 */\n}\n\n/**\n * Add the correct font size in all browsers.\n */\n\n:where(small) {\n font-size: 80%;\n}\n\n/* Embedded content\n * ========================================================================== */\n\n/*\n * Change the alignment on media elements in all browsers (opinionated).\n */\n\n:where(audio, canvas, iframe, img, svg, video) {\n vertical-align: middle;\n}\n\n/**\n * Remove the border on iframes in all browsers (opinionated).\n */\n\n:where(iframe) {\n border-style: none;\n}\n\n/**\n * Change the fill color to match the text color in all browsers (opinionated).\n */\n\n:where(svg:not([fill])) {\n fill: currentColor;\n}\n\n/* Tabular data\n * ========================================================================== */\n\n/**\n * 1. Collapse border spacing in all browsers (opinionated).\n * 2. Correct table border color in Chrome, Edge, and Safari.\n * 3. Remove text indentation from table contents in Chrome, Edge, and Safari.\n */\n\n:where(table) {\n border-collapse: collapse; /* 1 */\n border-color: currentColor; /* 2 */\n text-indent: 0; /* 3 */\n}\n\n/* Forms\n * ========================================================================== */\n\n/**\n * Remove the margin on controls in Safari.\n */\n\n:where(button, input, select) {\n margin: 0;\n}\n\n/**\n * Correct the inability to style buttons in iOS and Safari.\n */\n\n:where(button, [type=\"button\" i], [type=\"reset\" i], [type=\"submit\" i]) {\n -webkit-appearance: button;\n}\n\n/**\n * Change the inconsistent appearance in all browsers (opinionated).\n */\n\n:where(fieldset) {\n border: 1px solid #a0a0a0;\n}\n\n/**\n * Add the correct vertical alignment in Chrome, Edge, and Firefox.\n */\n\n:where(progress) {\n vertical-align: baseline;\n}\n\n/**\n * 1. Remove the margin in Firefox and Safari.\n * 3. Change the resize direction in all browsers (opinionated).\n */\n\n:where(textarea) {\n margin: 0; /* 1 */\n resize: vertical; /* 3 */\n}\n\n/**\n * 1. Correct the odd appearance in Chrome, Edge, and Safari.\n * 2. Correct the outline style in Safari.\n */\n\n:where([type=\"search\" i]) {\n -webkit-appearance: textfield; /* 1 */\n outline-offset: -2px; /* 2 */\n}\n\n/**\n * Correct the cursor style of increment and decrement buttons in Safari.\n */\n\n::-webkit-inner-spin-button,\n::-webkit-outer-spin-button {\n height: auto;\n}\n\n/**\n * Correct the text style of placeholders in Chrome, Edge, and Safari.\n */\n\n::-webkit-input-placeholder {\n color: inherit;\n opacity: 0.54;\n}\n\n/**\n * Remove the inner padding in Chrome, Edge, and Safari on macOS.\n */\n\n::-webkit-search-decoration {\n -webkit-appearance: none;\n}\n\n/**\n * 1. Correct the inability to style upload buttons in iOS and Safari.\n * 2. Change font properties to `inherit` in Safari.\n */\n\n::-webkit-file-upload-button {\n -webkit-appearance: button; /* 1 */\n font: inherit; /* 2 */\n}\n\n/* Interactive\n * ========================================================================== */\n\n/*\n * Add the correct styles in Safari.\n */\n\n:where(dialog) {\n background-color: white;\n border: solid;\n color: black;\n height: -moz-fit-content;\n height: fit-content;\n left: 0;\n margin: auto;\n padding: 1em;\n position: absolute;\n right: 0;\n width: -moz-fit-content;\n width: fit-content;\n}\n\n:where(dialog:not([open])) {\n display: none;\n}\n\n/*\n * Add the correct display in Safari.\n */\n\n:where(details > summary:first-of-type) {\n display: list-item;\n}\n\n/* Accessibility\n * ========================================================================== */\n\n/**\n * Change the cursor on busy elements in all browsers (opinionated).\n */\n\n:where([aria-busy=\"true\" i]) {\n cursor: progress;\n}\n\n/*\n * Change the cursor on disabled, not-editable, or otherwise\n * inoperable elements in all browsers (opinionated).\n */\n\n:where([aria-disabled=\"true\" i], [disabled]) {\n cursor: not-allowed;\n}\n\n/*\n * Change the display on visually hidden accessible elements\n * in all browsers (opinionated).\n */\n\n:where([aria-hidden=\"false\" i][hidden]) {\n display: initial;\n}\n\n:where([aria-hidden=\"false\" i][hidden]:not(:focus)) {\n clip: rect(0, 0, 0, 0);\n position: absolute;\n}\n",":root {\n --br: 4px;\n --xs-pad: 4px;\n --sm-pad: 8px;\n --md-pad: 16px;\n --lg-pad: 20px;\n --xlg-pad: 40px;\n\n --sm-breakpoint: 400px;\n --lg-breakpoint: 768px;\n\n --primary-400: #60a5fa;\n --primary: #3b82f6;\n --primary-600: #2563eb;\n --accent: #64ffda;\n --red: #f43f5e;\n --red-600: #dc2626;\n --yellow: #eab308;\n --grey: #f7f7f9;\n --white: #fff;\n --black: #000;\n\n --text: rgba(0, 0, 0, 0.8);\n --secondary: rgba(0, 0, 0, 0.54);\n --disabled: rgba(0, 0, 0, 0.38);\n --dividers: rgba(0, 0, 0, 0.12);\n\n --link-color: var(--primary);\n --link-hover-color: var(--primary-600);\n\n --sans-serif:\n -apple-system, BlinkMacSystemFont, \"Segoe UI\", Roboto, \"Helvetica Neue\",\n Arial, sans-serif, \"Apple Color Emoji\", \"Segoe UI Emoji\", \"Segoe UI Symbol\";\n --serif: Georgia, Times, \"Times New Roman\", serif;\n --monospace: Menlo, Monaco, Consolas, \"Courier New\", monospace;\n --font-family: var(--sans-serif);\n\n --font-size-base: 16px;\n --font-size-xs: 8px;\n --font-size-sm: 14px;\n --font-size-h1: 40px;\n --font-size-h2: 32px;\n --font-size-h3: 28px;\n --font-size-h4: 24px;\n --font-size-h5: 20px;\n --font-size-h6: 16px;\n --line-height-base: 1.5;\n\n --border: 1px solid var(--dividers);\n}\n","main,\nheader,\nfooter,\narticle,\nsection,\naside,\ndetails,\nsummary {\n margin: 0 auto;\n margin-bottom: var(--md-pad);\n width: 100%;\n}\n\nmain {\n display: block;\n margin: 0 auto;\n max-width: var(--lg-breakpoint);\n padding: 0 var(--md-pad) var(--md-pad);\n}\n\nfooter {\n border-top: var(--border);\n padding: var(--md-pad) 0;\n text-align: center;\n}\n\nfooter p {\n margin-bottom: 0;\n}\n\nhr {\n border: 0;\n border-top: var(--border);\n display: block;\n margin-top: var(--md-pad);\n margin-bottom: var(--md-pad);\n width: 100%;\n box-sizing: content-box;\n height: 0;\n overflow: visible;\n}\n\nimg {\n height: auto;\n max-width: 100%;\n vertical-align: baseline;\n}\n\n@media screen and (max-width: var(--sm-breakpoint)) {\n article,\n section,\n aside {\n clear: both;\n display: block;\n max-width: 100%;\n }\n\n img {\n margin-right: var(--md-pad);\n }\n}\n\nembed,\niframe,\nvideo {\n border: 0;\n}\n\nprogress {\n background-repeat: repeat;\n}\n","body {\n color: var(--text);\n font-family: var(--font-family);\n font-size: var(--font-size-base);\n line-height: var(--line-height-base);\n}\n\np {\n margin: 0;\n margin-bottom: var(--md-pad);\n}\n\nh1,\nh2,\nh3,\nh4,\nh5,\nh6 {\n color: inherit;\n font-family: inherit;\n line-height: 1.2;\n font-weight: 500;\n}\n\nh1 {\n font-size: var(--font-size-h1);\n margin: var(--lg-pad) 0 var(--md-pad);\n}\n\nh2 {\n font-size: var(--font-size-h2);\n margin: var(--lg-pad) 0 var(--md-pad);\n}\n\nh3 {\n font-size: var(--font-size-h3);\n margin: var(--md-pad) 0 var(--xs-pad);\n}\n\nh4 {\n font-size: var(--font-size-h4);\n margin: var(--md-pad) 0 var(--xs-pad);\n}\n\nh5 {\n font-size: var(--font-size-h5);\n margin: var(--md-pad) 0 var(--xs-pad);\n}\n\nh6 {\n font-size: var(--font-size-h6);\n margin: var(--md-pad) 0 var(--xs-pad);\n}\n\nsmall {\n color: var(--secondary);\n vertical-align: bottom;\n}\n\npre {\n background-color: var(--grey);\n color: var(--text);\n display: block;\n font-family: var(--monospace);\n font-size: var(--font-size-base);\n margin: var(--md-pad) 0;\n padding: var(--md-pad);\n white-space: pre-wrap;\n overflow-wrap: break-word;\n}\n\ncode {\n color: var(--text);\n font-family: var(--monospace);\n font-size: var(--font-size-base);\n line-height: inherit;\n margin: 0;\n padding: 0;\n vertical-align: baseline;\n word-break: break-all;\n word-wrap: break-word;\n}\n\na {\n color: var(--link-color);\n text-decoration: none;\n background-color: transparent;\n}\n\na:hover,\na:focus {\n color: var(--link-hover-color);\n text-decoration: underline;\n}\n\ndl {\n margin-bottom: var(--md-pad);\n}\n\ndd {\n margin-left: var(--xlg-pad);\n}\n\nul,\nol {\n margin-bottom: var(--sm-pad);\n padding-left: var(--xlg-pad);\n vertical-align: baseline;\n}\n\nblockquote {\n border-left: 2px solid var(--text);\n font-family: var(--serif);\n font-style: italic;\n margin: var(--md-pad) 0;\n padding-left: var(--md-pad);\n}\n\nfigcaption {\n font-family: var(--serif);\n}\n\nu {\n text-decoration: underline;\n}\n\ns {\n text-decoration: line-through;\n}\n\nsup {\n font-size: var(--font-size-sm);\n vertical-align: super;\n}\n\nsub {\n font-size: var(--font-size-sm);\n vertical-align: sub;\n}\n\nmark {\n background-color: var(--yellow);\n}\n","input[type=\"text\"],\ninput[type=\"password\"],\ninput[type=\"email\"],\ninput[type=\"url\"],\ninput[type=\"date\"],\ninput[type=\"month\"],\ninput[type=\"time\"],\ninput[type=\"datetime\"],\ninput[type=\"datetime-local\"],\ninput[type=\"week\"],\ninput[type=\"number\"],\ninput[type=\"search\"],\ninput[type=\"tel\"],\nselect,\ntextarea {\n background: var(--white);\n background-clip: padding-box;\n border: var(--border);\n border-radius: var(--br);\n color: var(--text);\n display: block;\n width: 100%;\n font-size: 1rem;\n padding: var(--sm-pad) var(--md-pad);\n line-height: 1.5;\n transition:\n border-color 0.15s ease-in-out,\n box-shadow 0.15s ease-in-out;\n font-family: var(--sans-serif);\n word-break: normal;\n}\n\ninput[type=\"color\"] {\n background-color: var(--white);\n border: var(--border);\n border-radius: var(--br);\n display: inline-block;\n vertical-align: middle;\n}\n\ninput:not([type]) {\n -webkit-appearance: none;\n background: var(--white);\n background-clip: padding-box;\n border: var(--border);\n border-radius: var(--br);\n color: var(--text);\n display: block;\n width: 100%;\n padding: var(--sm-pad) var(--md-pad);\n line-height: 1.5;\n transition:\n border-color 0.15s ease-in-out,\n box-shadow 0.15s ease-in-out;\n text-align: left;\n word-break: normal;\n}\n\ninput[type=\"text\"]:focus,\ninput[type=\"password\"]:focus,\ninput[type=\"email\"]:focus,\ninput[type=\"url\"]:focus,\ninput[type=\"date\"]:focus,\ninput[type=\"month\"]:focus,\ninput[type=\"time\"]:focus,\ninput[type=\"datetime\"]:focus,\ninput[type=\"datetime-local\"]:focus,\ninput[type=\"week\"]:focus,\ninput[type=\"number\"]:focus,\ninput[type=\"search\"]:focus,\ninput[type=\"tel\"]:focus,\ninput[type=\"color\"]:focus,\nselect:focus,\ntextarea:focus {\n background-color: var(--white);\n border-color: var(--primary-400);\n outline: 0;\n box-shadow: 0 0 0 0.2rem rgba(59, 130, 246, 0.5);\n}\n\ninput:not([type]):focus {\n background-color: var(--white);\n border-color: var(--primary-400);\n outline: 0;\n box-shadow: 0 0 0 0.2rem rgba(59, 130, 246, 0.5);\n}\n\ninput[type=\"file\"]:focus,\ninput[type=\"radio\"]:focus,\ninput[type=\"checkbox\"]:focus {\n outline: 1px thin var(--dividers);\n}\n\ninput[type=\"text\"][disabled],\ninput[type=\"password\"][disabled],\ninput[type=\"email\"][disabled],\ninput[type=\"url\"][disabled],\ninput[type=\"date\"][disabled],\ninput[type=\"month\"][disabled],\ninput[type=\"time\"][disabled],\ninput[type=\"datetime\"][disabled],\ninput[type=\"datetime-local\"][disabled],\ninput[type=\"week\"][disabled],\ninput[type=\"number\"][disabled],\ninput[type=\"search\"][disabled],\ninput[type=\"tel\"][disabled],\ninput[type=\"color\"][disabled],\nselect[disabled],\ntextarea[disabled] {\n background-color: var(--dividers);\n color: var(--secondary);\n cursor: not-allowed;\n opacity: 1;\n}\n\ninput:not([type])[disabled] {\n background-color: var(--dividers);\n color: var(--secondary);\n cursor: not-allowed;\n opacity: 1;\n}\n\ninput[readonly],\nselect[readonly],\ntextarea[readonly] {\n border-color: var(--dividers);\n color: var(--secondary);\n}\n\ninput:focus:invalid,\ntextarea:focus:invalid,\nselect:focus:invalid {\n border-color: var(--red-600);\n color: var(--red);\n}\n\ninput[type=\"file\"]:focus:invalid:focus,\ninput[type=\"radio\"]:focus:invalid:focus,\ninput[type=\"checkbox\"]:focus:invalid:focus {\n outline-color: var(--red);\n}\n\nselect {\n border: var(--border);\n vertical-align: sub;\n}\n\nselect:not([size]):not([multiple]) {\n height: calc(2.25rem + 2px);\n}\n\nselect[multiple] {\n height: auto;\n}\n\nlabel {\n display: inline-block;\n line-height: 2;\n}\n\nfieldset {\n border: 0;\n margin: 0;\n padding: var(--sm-pad) 0;\n}\n\nlegend {\n border-bottom: var(--border);\n color: var(--text);\n display: block;\n margin-bottom: var(--sm-pad);\n padding: var(--sm-pad) 0;\n width: 100%;\n}\n\ntextarea {\n overflow: auto;\n resize: vertical;\n}\n\ninput[type=\"checkbox\"],\ninput[type=\"radio\"] {\n box-sizing: border-box;\n padding: 0;\n display: inline;\n}\n","input[type=\"submit\"],\ninput[type=\"reset\"],\ninput[type=\"button\"],\nbutton {\n background-color: var(--primary);\n border: var(--primary);\n border-radius: var(--br);\n color: var(--white);\n padding: var(--sm-pad) var(--md-pad);\n display: inline-block;\n font-weight: 400;\n text-align: center;\n white-space: nowrap;\n vertical-align: middle;\n user-select: none;\n border: 1px solid transparent;\n font-size: 1rem;\n line-height: 1.5;\n transition:\n color 0.15s ease-in-out,\n background-color 0.15s ease-in-out,\n border-color 0.15s ease-in-out,\n box-shadow 0.15s ease-in-out;\n}\n\ninput[type=\"submit\"]::-moz-focus-inner,\ninput[type=\"reset\"]::-moz-focus-inner,\ninput[type=\"button\"]::-moz-focus-inner,\nbutton::-moz-focus-inner {\n padding: 0;\n}\n\ninput[type=\"submit\"]:hover,\ninput[type=\"reset\"]:hover,\ninput[type=\"button\"]:hover,\nbutton:hover {\n background-color: var(--primary-600);\n border-color: var(--primary-600);\n color: var(--white);\n}\n\ninput[type=\"submit\"]:not(:disabled):active,\ninput[type=\"reset\"]:not(:disabled):active,\ninput[type=\"button\"]:not(:disabled):active,\nbutton:not(:disabled):active {\n background-color: var(--primary-600);\n border-color: var(--primary-600);\n color: var(--white);\n}\n\ninput[type=\"submit\"]:focus,\ninput[type=\"reset\"]:focus,\ninput[type=\"button\"]:focus,\nbutton:focus {\n outline: 0;\n box-shadow: 0 0 0 0.2rem rgba(59, 130, 246, 0.5);\n}\n\ninput[type=\"submit\"]:disabled,\ninput[type=\"reset\"]:disabled,\ninput[type=\"button\"]:disabled,\nbutton:disabled {\n opacity: 0.65;\n cursor: not-allowed;\n background-color: var(--primary);\n border-color: var(--primary);\n color: var(--white);\n}\n","table {\n border-top: var(--border);\n margin-bottom: var(--md-pad);\n}\n\ncaption {\n padding: var(--sm-pad) 0;\n}\n\nthead th {\n border: 0;\n border-bottom: 2px solid var(--dividers);\n text-align: left;\n}\n\ntr {\n margin-bottom: var(--sm-pad);\n}\n\nth,\ntd {\n border-bottom: var(--border);\n padding: var(--md-pad);\n vertical-align: inherit;\n}\n\ntfoot tr {\n text-align: left;\n}\n\ntfoot td {\n color: var(--secondary);\n font-size: var(--font-size-xs);\n font-style: italic;\n padding: var(--md-pad) var(--xs-pad);\n}\n"]}
\ No newline at end of file
diff --git a/gulpfile.js b/gulpfile.js
deleted file mode 100644
index 1cb767a..0000000
--- a/gulpfile.js
+++ /dev/null
@@ -1,59 +0,0 @@
-// Load plugins
-const browsersync = require('browser-sync').create();
-const gulp = require('gulp');
-const autoprefixer = require('autoprefixer');
-const postcssImport = require("postcss-import")
-const cssnano = require('cssnano');
-const postcss = require('gulp-postcss');
-const plumber = require('gulp-plumber');
-const rename = require('gulp-rename');
-const sourcemaps = require('gulp-sourcemaps');
-const cleanCss = require('gulp-clean-css');
-
-// BrowserSync
-function browserSync(done) {
- browsersync.init({
- server: {
- baseDir: './',
- },
- port: 3000,
- });
- done();
-}
-
-// BrowserSync Reload
-function browserSyncReload(done) {
- browsersync.reload();
- done();
-}
-
-// CSS task
-function css() {
- return gulp
- .src('./src/**/[^_]*.css')
- .pipe(plumber())
- .pipe(postcss([autoprefixer(), postcssImport()]))
- .pipe(gulp.dest('css/'))
- .pipe(postcss([cssnano()]))
- .pipe(rename({ suffix: '.min' }))
- .pipe(cleanCss({ compatibility: 'ie8' }))
- .pipe(sourcemaps.write('.'))
- .pipe(gulp.dest('css/'))
- .pipe(browsersync.stream());
-}
-
-// Watch files
-function watchFiles() {
- gulp.watch('./src/**/*', css);
- gulp.watch('*.html', browserSyncReload);
-}
-
-// define complex tasks
-const build = gulp.series(css);
-const watch = gulp.parallel(watchFiles, browserSync);
-
-// export tasks
-exports.css = css;
-exports.build = build;
-exports.watch = watch;
-exports.default = build;
diff --git a/index.html b/index.html
index 9ea5a91..62542ee 100644
--- a/index.html
+++ b/index.html
@@ -2,7 +2,10 @@
- HTML 5 Test Page (https://github.com/cbracco/html5-test-page) with Marx (SCSS)
+
+ HTML 5 Test Page (https://github.com/cbracco/html5-test-page) with Marx
+ (SCSS)
+
@@ -12,7 +15,10 @@
HTML5 Test Page
- This is a test page filled with common HTML elements to be used to provide visual feedback whilst building CSS systems and frameworks.
+
+ This is a test page filled with common HTML elements to be used to
+ provide visual feedback whilst building CSS systems and frameworks.
+
@@ -58,7 +64,9 @@ HTML5 Test Page
-
+
Headings
@@ -71,28 +79,55 @@ Heading 4
Heading 5
Heading 6
-
+
-
+
-
A paragraph (from the Greek paragraphos, “to write beside” or “written beside”) is a self-contained unit of a discourse in writing dealing with a particular point or idea. A paragraph consists of one or more sentences. Though not required by the syntax of any language, paragraphs are usually an expected part of formal writing, used to organize longer prose.
+
+ A paragraph (from the Greek paragraphos, “to write beside” or
+ “written beside”) is a self-contained unit of a discourse in
+ writing dealing with a particular point or idea. A paragraph
+ consists of one or more sentences. Though not required by the
+ syntax of any language, paragraphs are usually an expected part
+ of formal writing, used to organize longer prose.
+
-
+
-
+
- A block quotation (also known as a long quotation or extract) is a quotation in a written document, that is set off from the main text as a paragraph, or block of text.
- It is typically distinguished visually using indentation and a different typeface or smaller size quotation. It may or may not include a citation, usually placed at the bottom.
+
+ A block quotation (also known as a long quotation or extract)
+ is a quotation in a written document, that is set off from the
+ main text as a paragraph, or block of text.
+
+
+ It is typically distinguished visually using indentation and a
+ different typeface or smaller size quotation. It may or may
+ not include a citation, usually placed at the bottom.
+
Said no one, ever.
-
+
-
+
Definition list
@@ -112,17 +147,25 @@ Unordered List
List Item 3
-
+
-
+
-
+
-
+
Table Caption
@@ -174,14 +217,27 @@ Unordered List
-
+
-
+
-
Keyboard input: Cmd
-
Inline code: <div>code</div>
-
Sample output: This is sample output from a computer program.
+
+ Keyboard input:
+ Cmd
+
+
+ Inline code:
+ <div>code</div>
+
+
+ Sample output:
+ This is sample output from a computer program.
+
Pre-formatted text
P R E F O R M A T T E D T E X T
! " # $ % & ' ( ) * + , - . /
@@ -191,89 +247,202 @@ Pre-formatted text
` a b c d e f g h i j k l m n o
p q r s t u v w x y z { | } ~
-
+
-
+
This is a text link .
-
Strong is used to indicate strong importance.
+
+ Strong is used to indicate strong importance.
+
This text has added emphasis.
-
The b element is stylistically different text from normal text, without any special importance.
-
The i element is text that is offset from the normal text.
-
The u element is text with an unarticulated, though explicitly rendered, non-textual annotation.
-
This text is deleted and This text is inserted .
-
This text has a strikethrough .
-
Superscript® .
-
Subscript for things like H2 O.
-
This small text is small for for fine print, etc.
-
Abbreviation: HTML
-
This text is a short inline quotation.
-
This is a citation.
-
The dfn element indicates a definition.
-
The mark element indicates a highlight.
-
The variable element , such as x = y .
-
The time element: 2 weeks ago
+
+ The b element is stylistically different text from normal
+ text, without any special importance.
+
+
+ The i element is text that is offset from the normal
+ text.
+
+
+ The u element is text with an unarticulated, though
+ explicitly rendered, non-textual annotation.
+
+
+ This text is deleted and
+ This text is inserted .
+
+
+ This text has a strikethrough .
+
+
+ Superscript® .
+
+
+ Subscript for things like H2 O.
+
+
+ This small text is small for for fine print, etc.
+
+
+ Abbreviation:
+ HTML
+
+
+
+ This text is a short inline quotation.
+
+
+
+ This is a citation.
+
+
+ The dfn element indicates a definition.
+
+
+ The mark element indicates a highlight.
+
+
+ The variable element , such as x =
+ y .
+
+
+ The time element:
+ 2 weeks ago
+
-
+
-
+
-
+
-
No <figure> element
-
-
Wrapped in a <figure> element, no <figcaption>
-
-
Wrapped in a <figure> element, with a <figcaption>
+
+ No <figure> element
+
+
+
+
+
+ Wrapped in a <figure> element, no
+ <figcaption>
+
+
+
+
+
+ Wrapped in a <figure> element, with a
+ <figcaption>
+
Here is a caption for this image.
-
+
-
-
-
+
+
+
-
- video
-
+
+
+ video
+
+
-
- canvas
-
+
+
+ canvas
+
+
-
- 2 out of 10
-
+
+
+ 2 out of 10
+
+
-
-
-
+
+
+
-
-
-
+
+
+
+
+
+
+
-
-
-
+
+
+
+
+
Password
-
+
Web Address
-
+
Email Address
-
+
Phone Number
-
+
Search
-
+
Number Input
-
+
Error
-
+
Valid
-
+
-
+
Select menus
@@ -328,33 +533,87 @@
Wrapped in a <figure> element, with a <figcaptio
-
+
Checkboxes
-
+
Radio buttons
-
+
Textareas
Textarea
-
+
-
+
HTML5 inputs
@@ -394,7 +653,9 @@
Wrapped in a <figure> element, with a <figcaptio
-
+
Action buttons
@@ -410,11 +671,12 @@
Wrapped in a <figure> element, with a <figcaptio
<button disabled>
-
+
-