diff --git a/06_js-debug/projects/debugging-multi-step-form-template.zip b/06_js-debug/projects/debugging-multi-step-form-template.zip index 9068e62..9ce1b51 100644 Binary files a/06_js-debug/projects/debugging-multi-step-form-template.zip and b/06_js-debug/projects/debugging-multi-step-form-template.zip differ diff --git a/webseite-react-php-jwt.zip b/webseite-react-php-jwt.zip new file mode 100644 index 0000000..886c83b Binary files /dev/null and b/webseite-react-php-jwt.zip differ diff --git a/webseite-react-php-jwt/react-app/.vscode/settings.json b/webseite-react-php-jwt/react-app/.vscode/settings.json new file mode 100644 index 0000000..cb2ddd7 --- /dev/null +++ b/webseite-react-php-jwt/react-app/.vscode/settings.json @@ -0,0 +1,8 @@ +{ + "workbench.colorCustomizations": { + "titleBar.activeForeground": "#333", + "titleBar.activeBackground": "#86cd8b", + "titleBar.inactiveForeground": "#ddd", + "titleBar.inactiveBackground": "#6fa973" + } +} diff --git a/webseite-react-php-jwt/react-app/README.md b/webseite-react-php-jwt/react-app/README.md new file mode 100644 index 0000000..232ba73 --- /dev/null +++ b/webseite-react-php-jwt/react-app/README.md @@ -0,0 +1,377 @@ +# Installation der Pakete + +## Dependencies + +```bash +npm install react-router-dom bootstrap uuid axios react-icons +``` + +## DevDependencies + +```bash +npm install sass -D +``` + +## Configuration von Vite + +```js +import { defineConfig } from 'vite'; +import react from '@vitejs/plugin-react'; + +// https://vite.dev/config/ +export default defineConfig({ + plugins: [react()], + css: { + preprocessorOptions: { + scss: { + quietDeps: true, // Unix + silenceDeprecations: [ + 'color-functions', + 'global-builtin', + 'import', + 'legacy-js-api', + ], + }, + }, + }, +}); +``` + +# React + Vite + +This template provides a minimal setup to get React working in Vite with HMR and some ESLint rules. + +Currently, two official plugins are available: + +- [@vitejs/plugin-react](https://github.com/vitejs/vite-plugin-react/blob/main/packages/plugin-react) uses [Babel](https://babeljs.io/) (or [oxc](https://oxc.rs) when used in [rolldown-vite](https://vite.dev/guide/rolldown)) for Fast Refresh +- [@vitejs/plugin-react-swc](https://github.com/vitejs/vite-plugin-react/blob/main/packages/plugin-react-swc) uses [SWC](https://swc.rs/) for Fast Refresh + +## React Compiler + +The React Compiler is not enabled on this template because of its impact on dev & build performances. To add it, see [this documentation](https://react.dev/learn/react-compiler/installation). + +## Expanding the ESLint configuration + +If you are developing a production application, we recommend using TypeScript with type-aware lint rules enabled. Check out the [TS template](https://github.com/vitejs/vite/tree/main/packages/create-vite/template-react-ts) for information on how to integrate TypeScript and [`typescript-eslint`](https://typescript-eslint.io) in your project. + +# Products Store mit useContext und useReducer + +`TableProducts` hält den Tabellen-State nicht mehr lokal in der Komponente. Stattdessen gibt es einen ausgelagerten Store aus **Context + Reducer**. So können Kind-Komponenten wie `RowProduct` den State lesen und Aktionen auslösen, ohne Callbacks per Props durchzureichen (kein Prop Drilling). + +## Dateistruktur + +``` +src/stores/products/ + initialState.js // Startzustand (Factory) + reducer.js // reine State-Übergänge + ProductsStore.jsx // Context, Provider, Custom Hooks + index.js // öffentliche Exports +``` + +## Step 1: `initialState` auslagern + +Datei: `src/stores/products/initialState.js` + +Der Startzustand wird als **Factory-Funktion** geschrieben, nicht als festes Objekt. So kann der Provider die geladenen Produkte (`items`) übergeben, und Validierung bleibt an einer Stelle. + +```js +export const createInitialState = (items) => { + return { items: items || [] }; +}; +``` + +Später wird sie so verwendet: + +```js +useReducer(productsReducer, items, createInitialState); +``` + +React ruft `createInitialState(items)` einmal beim ersten Render auf (lazy init). Das dritte Argument von `useReducer` ist genau dafür da. + +## Step 2: Reducer auslagern + +Datei: `src/stores/products/reducer.js` + +Der Reducer bleibt eine **reine Funktion**: `(state, action) => newState`. Keine Side Effects außer einem `console.warn` für unbekannte Actions. + +Action-Typen liegen in einem Objekt `PRODUCTS_ACTIONS`. Tippfehler fallen so früher auf als bei losen Strings wie `'UPDATE_AMMOUNT'`. + +```js +export const PRODUCTS_ACTIONS = { + UPDATE_AMOUNT: 'UPDATE_AMOUNT', + UPDATE_PRICE: 'UPDATE_PRICE', +}; +``` + +Jede Action folgt dem Muster `{ type, payload }`. Der Reducer kopiert den State (`...state`) und ersetzt nur das betroffene Item über `map`. Unveränderte Items behalten dieselbe Referenz – das ist wichtig für `memo(RowProduct)`. + +## Step 3: Context aufteilen (State und Dispatch) + +Datei: `src/stores/products/ProductsStore.jsx` + +Best Practice: **zwei Contexts**, nicht einen. + +| Context | Inhalt | Wann re-rendern Kind-Komponenten? | +| ------------------------- | ----------- | ------------------------------------- | +| `ProductsStateContext` | `{ items }` | bei jeder State-Änderung | +| `ProductsDispatchContext` | `dispatch` | praktisch nie (`dispatch` ist stabil) | + +`RowProduct` braucht nur Aktionen (also `dispatch`). Würde State und Dispatch in einem Value `{ state, dispatch }` stecken, bekäme jede Zeile bei jeder Eingabe ein neues Objekt und würde neu rendern – `memo` wäre wirkungslos. + +```js +const ProductsStateContext = createContext(null); +const ProductsDispatchContext = createContext(null); +``` + +`null` als Default ist Absicht: so erkennt der Custom Hook, wenn jemand den Store **außerhalb** des Providers nutzt. + +## Step 4: Provider mit `useReducer` bauen + +`ProductsProvider` ist die einzige Stelle, an der `useReducer` läuft. Er bekommt `items` (z. B. aus dem Fetch auf der Page) und reicht State sowie `dispatch` nach unten. + +```jsx +export const ProductsProvider = (props) => { + const { children, items = [] } = props; + const [state, dispatch] = useReducer( + productsReducer, + items, + createInitialState, + ); + + return ( + + + {children} + + + ); +}; +``` + +Wichtig: Die Komponente, die `useContext` aufruft, muss ein **Kind** des Providers sein – nicht dieselbe Komponente, die den Provider rendert. Deshalb gibt es `TableProducts` (Provider) und `TableProductsView` (Consumer). + +## Step 5: Custom Hooks statt nacktem `useContext` + +Drei Hooks kapseln den Zugriff und werfen einen Fehler, wenn der Provider fehlt: + +1. `useProductsState()` – liest `{ items }` +2. `useProductsDispatch()` – liefert `dispatch` +3. `useProductsActions()` – fertige Callbacks `updateAmount` / `updatePrice` + +Komponenten sollen nicht `dispatch({ type: '…' })` selbst zusammenbauen. Die Action-Objekte gehören in den Store, analog zu Redux Action Creators. + +```js +const updateAmount = useCallback( + (amount, id) => { + dispatch({ type: PRODUCTS_ACTIONS.UPDATE_AMOUNT, payload: { id, amount } }); + }, + [dispatch], +); +``` + +`useCallback` + stabiles `dispatch` hält die Funktionsreferenz gleich. Zusammen mit `memo(RowProduct)` rendern nur Zeilen neu, deren Item-Props sich geändert haben. + +## Step 6: Barrel-Export + +Datei: `src/stores/products/index.js` + +Andere Dateien importieren nur den Ordner, nicht interne Pfade: + +```js +import { + ProductsProvider, + useProductsState, + useProductsActions, +} from '../../stores/products'; +``` + +Reducer und `initialState` bleiben intern austauschbar, ohne dass `TableProducts` oder `RowProduct` ihre Imports ändern müssen. + +## Step 7: `TableProducts` an den Store anbinden + +`TableProducts` wrappt die Ansicht mit dem Provider und übergibt die Props als Initial-Items: + +```jsx +const TableProducts = (props) => { + return ( + + + + ); +}; +``` + +`TableProductsView` liest den State und berechnet den Gesamtpreis lokal mit `useMemo`. Der Gesamtpreis ist **abgeleiteter State** – er gehört nicht in den Reducer, sondern wird aus `items` berechnet. + +Die Handler `onHandleAmount` / `onHandlePrice` entfallen. `RowProduct` holt sie selbst aus dem Store. + +## Step 8: Prop Drilling in `RowProduct` entfernen + +Vorher: `TableProducts` → `RowProduct` → Inputs (Callbacks als Props). + +Nachher: `RowProduct` ruft `useProductsActions()` auf. Die Zeile bekommt nur noch die Produktdaten als Props (`_id`, `title`, `stock`, `price`, `sku`). Die `_id` bindet den Input-Wert an das richtige Item: + +```js +const { updateAmount, updatePrice } = useProductsActions(); + +const handleAmount = useCallback( + (value) => { + updateAmount(value, _id); + }, + [updateAmount, _id], +); +``` + +Die Produktdaten bleiben Props (nicht aus dem Context gelesen). Würde jede Zeile `items` aus dem State-Context lesen, würden **alle** Zeilen bei jeder Änderung neu rendern. + +## Datenfluss + +``` +TableProductsPage fetch JSON → items + │ + ▼ +TableProducts ProductsProvider(items) + │ + ├── TableProductsView useProductsState() → Tabelle + Total + │ + └── RowProduct useProductsActions() → UPDATE_AMOUNT / UPDATE_PRICE + │ + ▼ + productsReducer neuer items-Array → Context → UI +``` + +## Kurz: warum diese Aufteilung? + +- **`initialState.js`** – Startzustand und Validierung, unabhängig von React +- **`reducer.js`** – alle State-Übergänge testbar ohne Komponenten +- **`ProductsStore.jsx`** – React-Anbindung (Context, Provider, Hooks) +- **zwei Contexts** – Zeilen, die nur dispatchen, re-rendern nicht unnötig +- **Custom Hooks** – klare API, Fehler wenn der Provider fehlt +- **kein Prop Drilling** – neue Kind-Komponenten können den Store direkt nutzen + +--- + +# Architektur & Funktionsweise des ProductsProvider + +Dieser Store implementiert ein **Optimistic UI mit entkoppeltem, gepuffertem Backend-Sync (Debounce & Merge)**. + +``` +UI Input (z. B. Tippen im Input-Feld) + │ + ├──▶ 1. dispatch(...) ──▶ State aktualisiert sich SOFORT (UI reagiert flüssig) + │ + └──▶ 2. schedulePatch(...) ──▶ Änderungen sammeln & Timer starten (400 ms) + │ + (nach 400 ms Ruhe) + │ + ▼ + flushPatch(...) ──▶ HTTP PATCH an API + +``` + +--- + +## 1. Kernkonzept: `schedulePatch` vs. `flushPatch` + +Beim Bearbeiten von Feldern (wie Preis oder Menge) feuert die Eingabe bei jedem Tastendruck (`onChange`). Würde man jedes Mal sofort einen API-Request senden, würde das Backend mit HTTP-Aufrufen überflutet werden. + +### `schedulePatch(id, patch)` – Das Sammelbecken & der Timer + +**Zweck:** Nimmt Änderungen entgegen, führt sie pro Produkt zusammen (_mergen_) und setzt den Countdown zurück (_debouncen_). + +1. **Merge (`pendingPatches`):** + +- Tippt der Nutzer schnell hintereinander Menge `5` und Preis `19.99`, merkt sich die Map: `{ stock: 5, price: 19.99 }`. + +2. **Timer-Reset (`persistTimers`):** + +- Läuft bereits ein Timer für dieses Produkt, wird er mit `clearTimeout` gestoppt. +- Ein neuer 400ms-Timer startet. Erst wenn der Nutzer **400 ms lang nichts mehr tippt**, läuft der Timer ab. + +--- + +### `flushPatch(id)` – Der Ausführer + +**Zweck:** Holt die gesammelten Änderungen ab und sendet den eigentlichen API-Request. + +1. **Puffer leeren:** Holt das zusammengefasste Patch-Objekt aus `pendingPatches.current` und löscht es sofort aus der Map (verhindert doppelte Requests). +2. **Timer aufräumen:** Entfernt eventuell noch vorhandene Timer-Referenzen. +3. **API-Call (`patchProduct`):** Sendet den minimalen Patch an den Server. +4. **Erfolg:** Aktualisiert das Produkt im State mit den offiziellen Serverdaten (`SET_ITEM`). +5. **Fehlerfall (Rollback):** Schlägt der Request fehl, wird der Fehler gesetzt und via `loadProducts()` der alte/gültige Serverzustand nachgeladen (Rollback des optimistischen UI-Updates). + +--- + +## 2. Der Unmount-Cleanup (`useEffect`) + +Verlässt der Nutzer die Seite oder wird der Provider abgebaut, greift die Cleanup-Funktion: + +```javascript +useEffect(() => { + return () => { + // 1. Laufende Timer sofort stoppen + timers.forEach((timer) => clearTimeout(timer)); + timers.clear(); + + // 2. Ungespeicherte Änderungen sofort absenden ("Flush on Unmount") + patches.forEach((patch, id) => { + if (patch && Object.keys(patch).length > 0) { + patchProduct(id, patch).catch(() => {}); + } + }); + patches.clear(); + }; +}, []); +``` + +- Verhindert Datenverlust, wenn der Nutzer kurz nach einer Eingabe navigiert. + +--- + +## 3. Die 3-Context-Architektur + +Der Store teilt die Verantwortlichkeiten in **drei separate Contexte** auf, um unnötige Re-Renders im Komponentenbaum vollständig zu unterbinden: + +| Context | Hook | Inhalt | Re-Render Verhalten | +| ----------------------------- | ----------------------- | -------------------------------------------- | --------------------------------------------------------------------------------------------------- | +| **`ProductsStateContext`** | `useProductsState()` | `state` (Items, Loading, Error) | Rendert **nur** neu, wenn sich der State ändert (z. B. Listen-Komponenten). | +| **`ProductsDispatchContext`** | `useProductsDispatch()` | `dispatch` | **Rendert nie neu** (Referenz bleibt über gesamten App-Lebenszyklus stabil). | +| **`ProductsActionsContext`** | `useProductsActions()` | Methoden (`updatePrice`, `addProduct`, etc.) | **Rendert nie neu**, da alle Actions mit `useCallback` und stabilen Abhängigkeiten memoisiert sind. | + +--- + +## 4. Übersicht der Action-Methoden + +- **`updateAmount(amount, id)` & `updatePrice(price, id)`:** +- **Optimistisch & Debounced:** Ändern sofort den lokalen State via `dispatch` und reichen die Daten an `schedulePatch` weiter. + +- **`addProduct(product)`, `saveProduct(id, product)`, `removeProduct(id)`:** +- **Pessimistisch & Direkt:** Warten direkt auf die API-Antwort (`async/await`) und updaten erst nach erfolgreichem Server-Response den Reducer-State. + +- **`loadProducts()`:** +- Lädt die komplette Produktliste manuell neu (z. B. nach einem Rollback oder Pull-to-Refresh). + + +--- + +## useLayoutEffect vs. useEffect + +Der Hauptunterschied liegt im **Timing der Ausführung** relativ zum Browser-Rendering: + +| Eigenschaft | `useLayoutEffect` | `useEffect` | +| --- | --- | --- | +| **Ausführungsart** | **Synchron** (blockiert das Painting) | **Asynchron / Deferiert** (nach dem Painting) | +| **Zeitpunkt** | Direkt nach den DOM-Mutationen, *bevor* der Browser den Bildschirm aktualisiert | Nachdem der Browser die Pixel auf den Bildschirm gezeichnet hat | +| **Haupt-Use-Case** | DOM-Messungen (`getBoundingClientRect`), visuelle DOM-Mutationen zur Vermeidung von Layout Shifts / Flackern | Data Fetching, Subscriptions, Logging, Storage-Zugriffe | +| **Performance-Impact** | Kann UI-Ruckler verursachen, wenn Berechnungen zu lange dauern | Keine Blockierung der UI-Darstellung | + +--- + +**Analyse deines Codes:** + +* **`useLayoutEffect` für `setAuthToken(state.token)**`: +* *Zweck hier:* Der Token (z. B. in Axios-Headern oder API-Clients) wird **synchron** gesetzt, noch bevor Kindkomponenten in ihren eigenen `useEffect`-Hooks initiale API-Aufrufe ausführen. Dadurch wird ein Race Condition vermieden, bei dem ein Kind-Effekt einen Request ohne gültigen Header losschickt. + + +* **`useEffect` für `persistAuth(...)**`: +* *Zweck hier:* Das Schreiben in den `localStorage`/`IndexedDB` ist ein Side Effect, der die visuelle Darstellung nicht direkt beeinflusst und daher die UI nicht blockieren muss. \ No newline at end of file diff --git a/webseite-react-php-jwt/react-app/eslint.config.js b/webseite-react-php-jwt/react-app/eslint.config.js new file mode 100644 index 0000000..4fa125d --- /dev/null +++ b/webseite-react-php-jwt/react-app/eslint.config.js @@ -0,0 +1,29 @@ +import js from '@eslint/js' +import globals from 'globals' +import reactHooks from 'eslint-plugin-react-hooks' +import reactRefresh from 'eslint-plugin-react-refresh' +import { defineConfig, globalIgnores } from 'eslint/config' + +export default defineConfig([ + globalIgnores(['dist']), + { + files: ['**/*.{js,jsx}'], + extends: [ + js.configs.recommended, + reactHooks.configs.flat.recommended, + reactRefresh.configs.vite, + ], + languageOptions: { + ecmaVersion: 2020, + globals: globals.browser, + parserOptions: { + ecmaVersion: 'latest', + ecmaFeatures: { jsx: true }, + sourceType: 'module', + }, + }, + rules: { + 'no-unused-vars': ['error', { varsIgnorePattern: '^[A-Z_]' }], + }, + }, +]) diff --git a/webseite-react-php-jwt/react-app/index.html b/webseite-react-php-jwt/react-app/index.html new file mode 100644 index 0000000..c0b3511 --- /dev/null +++ b/webseite-react-php-jwt/react-app/index.html @@ -0,0 +1,13 @@ + + + + + + + react-app + + +
+ + + diff --git a/webseite-react-php-jwt/react-app/package-lock.json b/webseite-react-php-jwt/react-app/package-lock.json new file mode 100644 index 0000000..40dc6e8 --- /dev/null +++ b/webseite-react-php-jwt/react-app/package-lock.json @@ -0,0 +1,3196 @@ +{ + "name": "react-app", + "version": "0.0.1", + "lockfileVersion": 3, + "requires": true, + "packages": { + "": { + "name": "react-app", + "version": "0.0.1", + "dependencies": { + "@splidejs/react-splide": "^0.7.12", + "axios": "^1.20.0", + "bootstrap": "^5.3.8", + "react": "^19.2.8", + "react-dom": "^19.2.8", + "react-icons": "^5.7.0", + "react-router-dom": "^7.18.3", + "uuid": "^14.0.2" + }, + "devDependencies": { + "@eslint/js": "^10.0.1", + "@types/react": "^19.2.18", + "@types/react-dom": "^19.2.5", + "@vitejs/plugin-react": "^6.1.1", + "eslint": "^10.9.1", + "eslint-plugin-react-hooks": "^7.1.1", + "eslint-plugin-react-refresh": "^0.5.5", + "globals": "^17.11.0", + "sass": "^1.103.1", + "vite": "^8.2.2" + } + }, + "node_modules/@babel/code-frame": { + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.29.7.tgz", + "integrity": "sha512-Aup7aUOfpbAUg2ROOJN6Iw5f9DMBlzu0mIkm/malLQFN/YQgO48wCj0Kxa3sEHJvPVFg7siR+qRInwXd2qhQKw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-validator-identifier": "^7.29.7", + "js-tokens": "^4.0.0", + "picocolors": "^1.1.1" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/compat-data": { + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.29.7.tgz", + "integrity": "sha512-locTkQyKvwIEgBzVrn8693ebc97F2U8ZHjbXwDXJ5Fn2TCpNwTlKcaKLkdHop5c/icOFE7qt7Q9JC5hnKNa6Gg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/core": { + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.29.7.tgz", + "integrity": "sha512-RgHBCvtjbOK2gXSNBNIkNoEc9qoVEtau3hj8gEqKQuL3HZAibKarWFEI3Lfm6EYKkLalOh8eSrj9b+ch9H/VBA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/code-frame": "^7.29.7", + "@babel/generator": "^7.29.7", + "@babel/helper-compilation-targets": "^7.29.7", + "@babel/helper-module-transforms": "^7.29.7", + "@babel/helpers": "^7.29.7", + "@babel/parser": "^7.29.7", + "@babel/template": "^7.29.7", + "@babel/traverse": "^7.29.7", + "@babel/types": "^7.29.7", + "@jridgewell/remapping": "^2.3.5", + "convert-source-map": "^2.0.0", + "debug": "^4.1.0", + "gensync": "^1.0.0-beta.2", + "json5": "^2.2.3", + "semver": "^6.3.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/babel" + } + }, + "node_modules/@babel/generator": { + "version": "7.29.8", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.29.8.tgz", + "integrity": "sha512-gZbepsdh3WDtgZKWL+vTPh71LSBrm/Y4/QDZBVCcYfmeTEEuoOYwlSy+G1StfJg+/Zy550u/3TATbm7qDbbMtg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/parser": "^7.29.8", + "@babel/types": "^7.29.8", + "@jridgewell/gen-mapping": "^0.3.12", + "@jridgewell/trace-mapping": "^0.3.28", + "jsesc": "^3.0.2" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-compilation-targets": { + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.29.7.tgz", + "integrity": "sha512-wem6WaBj4NaVYVdNhLPPVacES6ZJ+KBBfSkTMD3YZxbP3rm3Di85tJU5ljaUNhaOynt+Aj0xruhYuzQBt8n71g==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/compat-data": "^7.29.7", + "@babel/helper-validator-option": "^7.29.7", + "browserslist": "^4.24.0", + "lru-cache": "^5.1.1", + "semver": "^6.3.1" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-globals": { + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/helper-globals/-/helper-globals-7.29.7.tgz", + "integrity": "sha512-3nQVUAtvkKH9zahfWgw96Jc/uFOmjACE1kQz82E2lqWmHBgjzbNlsC22nuQTfahmWeQtTq5nQ/4Nnd2A1wj4zA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-module-imports": { + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.29.7.tgz", + "integrity": "sha512-ejHwrQQYcm9xnTivShn2IDOlIzInN34AXskvq9QicvCtEzq1Vzclu/tKF8Jq1Cg8JG2GL6/EmjgsCT7lXepE3g==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/traverse": "^7.29.7", + "@babel/types": "^7.29.7" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-module-transforms": { + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.29.7.tgz", + "integrity": "sha512-UPUVSyXbOh627KiCIGQSgwWzGeBKLkaJ9PJEdrngIwMSzxLR4jS4+f1f1jb7VzBbg8nFLaYotvVPFCTqdrmTAg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-module-imports": "^7.29.7", + "@babel/helper-validator-identifier": "^7.29.7", + "@babel/traverse": "^7.29.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/helper-string-parser": { + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.29.7.tgz", + "integrity": "sha512-Pb5ijPrZ89GDH8223L4UP8i6QApWxs04RbPQJTeWDV0/keR2E36MeKnyr6LYmUUvqRRI+Iv87SuF1W6ErINzYw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-validator-identifier": { + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.29.7.tgz", + "integrity": "sha512-qehxGkRj55h/ff8EMaJ+cYhyaKlHIxqYDn682wQD7RNp9UujOQsHog2uS0r2vzr4pW+sXf90NeeayjcNaX3fFg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-validator-option": { + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.29.7.tgz", + "integrity": "sha512-N9ZErrD+yW5geCDtBqnOoxmR8+tNKiGuxKlDpuJxfsqpa2dFcexaziGAE/qoHLiDDreVNMupxGmSoNlyvsA3gw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helpers": { + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.29.7.tgz", + "integrity": "sha512-1k2lAGRMfHTcwuNYcCNUmaUffmQv8KWMfh2iJUUeRlwlwH4FdNG7mfPI10NPfLHJFThE4Tyr4mv7kTNZOiPuBg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/template": "^7.29.7", + "@babel/types": "^7.29.7" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/parser": { + "version": "7.29.8", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.29.8.tgz", + "integrity": "sha512-E8lTAYNB1KW+FH+VGJuZM1ioAx2E6oVlvQFRrf5P8ZZmsiJXYAD9vTFV7yyEURNzgh1dFqMZuO6tUwcARbqFCA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/types": "^7.29.8" + }, + "bin": { + "parser": "bin/babel-parser.js" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@babel/template": { + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.29.7.tgz", + "integrity": "sha512-puq+Gf35oI24FeN11LkoUQFqv9uwNeWpxXZi/Ji3rRIoKAzKnxRaZ+Gkj0vKS9ZCiTESfng1N9LyOyXvo+m+Gg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/code-frame": "^7.29.7", + "@babel/parser": "^7.29.7", + "@babel/types": "^7.29.7" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/traverse": { + "version": "7.29.8", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.29.8.tgz", + "integrity": "sha512-I5z7H3bf/41ktsNVLtpN0wAa336HkqIHQ5BuPLEhTkt1jVSyZpeNKIzTgEWmlxjdg81R0IgUCcaE+Ok3NvrfZg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/code-frame": "^7.29.7", + "@babel/generator": "^7.29.8", + "@babel/helper-globals": "^7.29.7", + "@babel/parser": "^7.29.8", + "@babel/template": "^7.29.7", + "@babel/types": "^7.29.8", + "debug": "^4.3.1" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/types": { + "version": "7.29.8", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.29.8.tgz", + "integrity": "sha512-Vj1jF3cPfxg7OAfoI7QnVKLoILlm2JF9pnVHrX8qx7AHMiYWT+NDAA7jChlNgRS4WTLc/fD1lXLmPixluj+3Gg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-string-parser": "^7.29.7", + "@babel/helper-validator-identifier": "^7.29.7" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@eslint-community/eslint-utils": { + "version": "4.10.1", + "resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.10.1.tgz", + "integrity": "sha512-cuadcxVFE8sDK6iWJbs8Sn0av2Nrh2QSGQhVlBW9AaAHqHwjWsZHT8LJ4hFGPh7ASBV2deFdM7H/DPjulmh8rg==", + "dev": true, + "license": "MIT", + "dependencies": { + "eslint-visitor-keys": "^3.4.3" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + }, + "peerDependencies": { + "eslint": "^6.0.0 || ^7.0.0 || >=8.0.0" + } + }, + "node_modules/@eslint-community/eslint-utils/node_modules/eslint-visitor-keys": { + "version": "3.4.3", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz", + "integrity": "sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/@eslint-community/regexpp": { + "version": "4.12.2", + "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.12.2.tgz", + "integrity": "sha512-EriSTlt5OC9/7SXkRSCAhfSxxoSUgBm33OH+IkwbdpgoqsSsUg7y3uh+IICI/Qg4BBWr3U2i39RpmycbxMq4ew==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^12.0.0 || ^14.0.0 || >=16.0.0" + } + }, + "node_modules/@eslint/config-array": { + "version": "0.23.5", + "resolved": "https://registry.npmjs.org/@eslint/config-array/-/config-array-0.23.5.tgz", + "integrity": "sha512-Y3kKLvC1dvTOT+oGlqNQ1XLqK6D1HU2YXPc52NmAlJZbMMWDzGYXMiPRJ8TYD39muD/OTjlZmNJ4ib7dvSrMBA==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@eslint/object-schema": "^3.0.5", + "debug": "^4.3.1", + "minimatch": "^10.2.4" + }, + "engines": { + "node": "^20.19.0 || ^22.13.0 || >=24" + } + }, + "node_modules/@eslint/config-helpers": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/@eslint/config-helpers/-/config-helpers-0.7.0.tgz", + "integrity": "sha512-DObd/KKUsU+FaFv4PLxSRenpXfQWmPXXP3pPZ6/K1PCrMu2vQpMDMuQe/BqYeoLcz8ro0bVDF1RxOJgfVEdhUw==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@eslint/core": "^1.2.1" + }, + "engines": { + "node": "^20.19.0 || ^22.13.0 || >=24" + } + }, + "node_modules/@eslint/core": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@eslint/core/-/core-1.2.1.tgz", + "integrity": "sha512-MwcE1P+AZ4C6DWlpin/OmOA54mmIZ/+xZuJiQd4SyB29oAJjN30UW9wkKNptW2ctp4cEsvhlLY/CsQ1uoHDloQ==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@types/json-schema": "^7.0.15" + }, + "engines": { + "node": "^20.19.0 || ^22.13.0 || >=24" + } + }, + "node_modules/@eslint/js": { + "version": "10.0.1", + "resolved": "https://registry.npmjs.org/@eslint/js/-/js-10.0.1.tgz", + "integrity": "sha512-zeR9k5pd4gxjZ0abRoIaxdc7I3nDktoXZk2qOv9gCNWx3mVwEn32VRhyLaRsDiJjTs0xq/T8mfPtyuXu7GWBcA==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^20.19.0 || ^22.13.0 || >=24" + }, + "funding": { + "url": "https://eslint.org/donate" + }, + "peerDependencies": { + "eslint": "^10.0.0" + }, + "peerDependenciesMeta": { + "eslint": { + "optional": true + } + } + }, + "node_modules/@eslint/object-schema": { + "version": "3.0.5", + "resolved": "https://registry.npmjs.org/@eslint/object-schema/-/object-schema-3.0.5.tgz", + "integrity": "sha512-vqTaUEgxzm+YDSdElad6PiRoX4t8VGDjCtt05zn4nU810UIx/uNEV7/lZJ6KwFThKZOzOxzXy48da+No7HZaMw==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": "^20.19.0 || ^22.13.0 || >=24" + } + }, + "node_modules/@eslint/plugin-kit": { + "version": "0.7.2", + "resolved": "https://registry.npmjs.org/@eslint/plugin-kit/-/plugin-kit-0.7.2.tgz", + "integrity": "sha512-+CNAzxglkrpNf/kKywqQfk74QjtceuOE7Qm+AF8miRvPF/wmmK5+OJOgVh3AVTT3RP2mH3+FOaxlE5v72owk0A==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@eslint/core": "^1.2.1", + "levn": "^0.4.1" + }, + "engines": { + "node": "^20.19.0 || ^22.13.0 || >=24" + } + }, + "node_modules/@humanfs/core": { + "version": "0.19.2", + "resolved": "https://registry.npmjs.org/@humanfs/core/-/core-0.19.2.tgz", + "integrity": "sha512-UhXNm+CFMWcbChXywFwkmhqjs3PRCmcSa/hfBgLIb7oQ5HNb1wS0icWsGtSAUNgefHeI+eBrA8I1fxmbHsGdvA==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@humanfs/types": "^0.15.0" + }, + "engines": { + "node": ">=18.18.0" + } + }, + "node_modules/@humanfs/node": { + "version": "0.16.8", + "resolved": "https://registry.npmjs.org/@humanfs/node/-/node-0.16.8.tgz", + "integrity": "sha512-gE1eQNZ3R++kTzFUpdGlpmy8kDZD/MLyHqDwqjkVQI0JMdI1D51sy1H958PNXYkM2rAac7e5/CnIKZrHtPh3BQ==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@humanfs/core": "^0.19.2", + "@humanfs/types": "^0.15.0", + "@humanwhocodes/retry": "^0.4.0" + }, + "engines": { + "node": ">=18.18.0" + } + }, + "node_modules/@humanfs/types": { + "version": "0.15.0", + "resolved": "https://registry.npmjs.org/@humanfs/types/-/types-0.15.0.tgz", + "integrity": "sha512-ZZ1w0aoQkwuUuC7Yf+7sdeaNfqQiiLcSRbfI08oAxqLtpXQr9AIVX7Ay7HLDuiLYAaFPu8oBYNq/QIi9URHJ3Q==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">=18.18.0" + } + }, + "node_modules/@humanwhocodes/module-importer": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz", + "integrity": "sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">=12.22" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/nzakas" + } + }, + "node_modules/@humanwhocodes/retry": { + "version": "0.4.3", + "resolved": "https://registry.npmjs.org/@humanwhocodes/retry/-/retry-0.4.3.tgz", + "integrity": "sha512-bV0Tgo9K4hfPCek+aMAn81RppFKv2ySDQeMoSZuvTASywNTnVJCArCZE2FWqpvIatKu7VMRLWlR1EazvVhDyhQ==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">=18.18" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/nzakas" + } + }, + "node_modules/@jridgewell/gen-mapping": { + "version": "0.3.13", + "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.13.tgz", + "integrity": "sha512-2kkt/7niJ6MgEPxF0bYdQ6etZaA+fQvDcLKckhy1yIQOzaoKjBBjSj63/aLVjYE3qhRt5dvM+uUyfCg6UKCBbA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jridgewell/sourcemap-codec": "^1.5.0", + "@jridgewell/trace-mapping": "^0.3.24" + } + }, + "node_modules/@jridgewell/remapping": { + "version": "2.3.5", + "resolved": "https://registry.npmjs.org/@jridgewell/remapping/-/remapping-2.3.5.tgz", + "integrity": "sha512-LI9u/+laYG4Ds1TDKSJW2YPrIlcVYOwi2fUC6xB43lueCjgxV4lffOCZCtYFiH6TNOX+tQKXx97T4IKHbhyHEQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jridgewell/gen-mapping": "^0.3.5", + "@jridgewell/trace-mapping": "^0.3.24" + } + }, + "node_modules/@jridgewell/resolve-uri": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz", + "integrity": "sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/sourcemap-codec": { + "version": "1.5.5", + "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.5.tgz", + "integrity": "sha512-cYQ9310grqxueWbl+WuIUIaiUaDcj7WOq5fVhEljNVgRfOUhY9fy2zTvfoqWsnebh8Sl70VScFbICvJnLKB0Og==", + "dev": true, + "license": "MIT" + }, + "node_modules/@jridgewell/trace-mapping": { + "version": "0.3.31", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.31.tgz", + "integrity": "sha512-zzNR+SdQSDJzc8joaeP8QQoCQr8NuYx2dIIytl1QeBEZHJ9uW6hebsrYgbz8hJwUQao3TWCMtmfV8Nu1twOLAw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jridgewell/resolve-uri": "^3.1.0", + "@jridgewell/sourcemap-codec": "^1.4.14" + } + }, + "node_modules/@oxc-project/types": { + "version": "0.147.0", + "resolved": "https://registry.npmjs.org/@oxc-project/types/-/types-0.147.0.tgz", + "integrity": "sha512-IJ3s6ltHLp45S0bh7phkX+gJO7A1Wuz2EaqpAhb8WjqDwbzMiWKHhyyT42tskaWjEYXtHtVCPpnBJVT9+dcRLg==", + "dev": true, + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/Boshen" + } + }, + "node_modules/@parcel/watcher": { + "version": "2.6.0", + "resolved": "https://registry.npmjs.org/@parcel/watcher/-/watcher-2.6.0.tgz", + "integrity": "sha512-7FNeNl8NCE7aINx7WXiKQrPYZWC/hvrTsmk6zmxbI7LTXE7hVek/n8AfVgpe2y82zl3w0HvCHN0bVKMBoJcC0w==", + "dev": true, + "hasInstallScript": true, + "license": "MIT", + "optional": true, + "dependencies": { + "detect-libc": "^2.0.3", + "is-glob": "^4.0.3", + "node-addon-api": "^7.0.0", + "picomatch": "^4.0.4" + }, + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + }, + "optionalDependencies": { + "@parcel/watcher-android-arm64": "2.6.0", + "@parcel/watcher-darwin-arm64": "2.6.0", + "@parcel/watcher-darwin-x64": "2.6.0", + "@parcel/watcher-freebsd-x64": "2.6.0", + "@parcel/watcher-linux-arm-glibc": "2.6.0", + "@parcel/watcher-linux-arm-musl": "2.6.0", + "@parcel/watcher-linux-arm64-glibc": "2.6.0", + "@parcel/watcher-linux-arm64-musl": "2.6.0", + "@parcel/watcher-linux-x64-glibc": "2.6.0", + "@parcel/watcher-linux-x64-musl": "2.6.0", + "@parcel/watcher-win32-arm64": "2.6.0", + "@parcel/watcher-win32-x64": "2.6.0" + } + }, + "node_modules/@parcel/watcher-android-arm64": { + "version": "2.6.0", + "resolved": "https://registry.npmjs.org/@parcel/watcher-android-arm64/-/watcher-android-arm64-2.6.0.tgz", + "integrity": "sha512-trgpLSCKRC/huFjXX/Smh+0sWe4+YtKfktIToiMl59ghz7z+qkH6kMvNnUbLyRs9N11t8l4svSCs1+5B3rOAhA==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/watcher-darwin-arm64": { + "version": "2.6.0", + "resolved": "https://registry.npmjs.org/@parcel/watcher-darwin-arm64/-/watcher-darwin-arm64-2.6.0.tgz", + "integrity": "sha512-Y3QV0gl7Q1zbfueunkWIERICbEojQFCgpyG7YqOGNFLsckXyI1xu9mAIUpKY9QBYzBtSkN8dBPwd3yiAO9ovMw==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/watcher-darwin-x64": { + "version": "2.6.0", + "resolved": "https://registry.npmjs.org/@parcel/watcher-darwin-x64/-/watcher-darwin-x64-2.6.0.tgz", + "integrity": "sha512-Ohv6OpzhUfKYD7Beb8kDvG0jbIxORCYY1JRdZnaBtnjjkJxgD7ZVL0nw2sCYd0yTMKTvz3nnTnOF3cDifK+kvw==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/watcher-freebsd-x64": { + "version": "2.6.0", + "resolved": "https://registry.npmjs.org/@parcel/watcher-freebsd-x64/-/watcher-freebsd-x64-2.6.0.tgz", + "integrity": "sha512-5HmXvDgs8VK+74jF9y9/2FE3/OnlcKmc56tjmSrEuZjpSZOGL+fvAu+HKJBdPs9uwoP2hE6TlSUpXZ/C5jUFmQ==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/watcher-linux-arm-glibc": { + "version": "2.6.0", + "resolved": "https://registry.npmjs.org/@parcel/watcher-linux-arm-glibc/-/watcher-linux-arm-glibc-2.6.0.tgz", + "integrity": "sha512-Ps/hui3A+vMbjdqlqAowK2ZL8+BO8dBjxeWXj6npTBs3jx4wWmbPpaLuqwrQrSqIVMCnpWo238bJ1U37GhQOYg==", + "cpu": [ + "arm" + ], + "dev": true, + "libc": [ + "glibc" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/watcher-linux-arm-musl": { + "version": "2.6.0", + "resolved": "https://registry.npmjs.org/@parcel/watcher-linux-arm-musl/-/watcher-linux-arm-musl-2.6.0.tgz", + "integrity": "sha512-9c6AUHgHoG+IY88MRIHupztQiQnrbqHYQjkM2btA+Bf/wQnQMuiD0Wfk1EVv3TlNT3x41uU71rn6E4xh/+zvkw==", + "cpu": [ + "arm" + ], + "dev": true, + "libc": [ + "musl" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/watcher-linux-arm64-glibc": { + "version": "2.6.0", + "resolved": "https://registry.npmjs.org/@parcel/watcher-linux-arm64-glibc/-/watcher-linux-arm64-glibc-2.6.0.tgz", + "integrity": "sha512-yHRqS2owEXe6Hic9z6Mh1ECsCd+ODVOGvZDyciqRd21+v+o+DnXMOrw50DSpIG2sb8GPEaPPmfeCAWKPJdq46g==", + "cpu": [ + "arm64" + ], + "dev": true, + "libc": [ + "glibc" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/watcher-linux-arm64-musl": { + "version": "2.6.0", + "resolved": "https://registry.npmjs.org/@parcel/watcher-linux-arm64-musl/-/watcher-linux-arm64-musl-2.6.0.tgz", + "integrity": "sha512-WhB2e/V7rqdHHWZusBSPuy5Ei8S6lSz6FE5TKKQz5h3a0O+C+mhY7vxU9b/stqvMb8beLnPY82ZrFTLKs+SrKA==", + "cpu": [ + "arm64" + ], + "dev": true, + "libc": [ + "musl" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/watcher-linux-x64-glibc": { + "version": "2.6.0", + "resolved": "https://registry.npmjs.org/@parcel/watcher-linux-x64-glibc/-/watcher-linux-x64-glibc-2.6.0.tgz", + "integrity": "sha512-ulGE6x6Oz6iAwg75T8YQSoguBWasniIbX+QWpaYPcCnDOpdWX3k+4xbEYPZVLxOuoJI+svJJPD3sEj8G7lrQ3A==", + "cpu": [ + "x64" + ], + "dev": true, + "libc": [ + "glibc" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/watcher-linux-x64-musl": { + "version": "2.6.0", + "resolved": "https://registry.npmjs.org/@parcel/watcher-linux-x64-musl/-/watcher-linux-x64-musl-2.6.0.tgz", + "integrity": "sha512-tkBYKt7YQrjIJWYDnto2YgO8MRkjlMTSNoRHzsXinBqbLdeOM3L32wPZJvIZxqaLMfSlS/4sUjH/6STVP/XDLw==", + "cpu": [ + "x64" + ], + "dev": true, + "libc": [ + "musl" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/watcher-win32-arm64": { + "version": "2.6.0", + "resolved": "https://registry.npmjs.org/@parcel/watcher-win32-arm64/-/watcher-win32-arm64-2.6.0.tgz", + "integrity": "sha512-gIZAP23jaHjGWasY/TY6yL7NHFClf0Ga7FN+iINvk+KN94rhm94lYZhFsbYFNcA04/onvGD9kKmiJLJB2HbNwQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/watcher-win32-x64": { + "version": "2.6.0", + "resolved": "https://registry.npmjs.org/@parcel/watcher-win32-x64/-/watcher-win32-x64-2.6.0.tgz", + "integrity": "sha512-cA+/pXV2YkfxlIcXOQ5fSWqAzzPyD78/x5qbK/I0vUkrlYHA8TIz+MXjAbGouguKVSI4bOmkTSJ1/poVSsgt+A==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@popperjs/core": { + "version": "2.11.8", + "resolved": "https://registry.npmjs.org/@popperjs/core/-/core-2.11.8.tgz", + "integrity": "sha512-P1st0aksCrn9sGZhp8GMYwBnQsbvAWsZAX44oXNNvLHGqAOcoVxmjZiohstwQ7SqKnbR47akdNi+uleWD8+g6A==", + "license": "MIT", + "peer": true, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/popperjs" + } + }, + "node_modules/@rolldown/binding-android-arm-eabi": { + "version": "1.2.6", + "resolved": "https://registry.npmjs.org/@rolldown/binding-android-arm-eabi/-/binding-android-arm-eabi-1.2.6.tgz", + "integrity": "sha512-b+jTcARdTiFLI6jB4a5XjTm0RWd6KcRfQj/I2356fxUZemiho9zQLxo0RtCuMDAyKcLo6cEltkgbQp6d1+sjjQ==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@rolldown/binding-android-arm64": { + "version": "1.2.6", + "resolved": "https://registry.npmjs.org/@rolldown/binding-android-arm64/-/binding-android-arm64-1.2.6.tgz", + "integrity": "sha512-lkWU8ZJaRk9q3CIEY1Tc7vIFALp3Xw5NfGJo2hQg5oIqNgxWi1zI+IiDEK3r70BF5Dzol1tcXsnzsRc8NLhG+Q==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@rolldown/binding-darwin-arm64": { + "version": "1.2.6", + "resolved": "https://registry.npmjs.org/@rolldown/binding-darwin-arm64/-/binding-darwin-arm64-1.2.6.tgz", + "integrity": "sha512-dgR56NYnvAszm7Ob1B2/Vn0e8bUQYZH2UjVaMMtMVOCKFSfjhfLmuA/9+O+F+ajUdG6B/bSssrKW6JJYASa8jA==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@rolldown/binding-darwin-x64": { + "version": "1.2.6", + "resolved": "https://registry.npmjs.org/@rolldown/binding-darwin-x64/-/binding-darwin-x64-1.2.6.tgz", + "integrity": "sha512-vpVxFvUCFioJqug7OTvqptkc4yb8UX0AwfDmJpaR/0sWz+BUmqSVAf7c8JkUgnN8YLspb4a/N6NhTyMAmdyQ7Q==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@rolldown/binding-freebsd-x64": { + "version": "1.2.6", + "resolved": "https://registry.npmjs.org/@rolldown/binding-freebsd-x64/-/binding-freebsd-x64-1.2.6.tgz", + "integrity": "sha512-h1wG6Y6K3JlRswxsI64qQJqBAy4vrLuHgRbc8CZMGSWTOFRY6ghMApM1NKzB2I0n5xV1fjkE18SuVl2QpLeNpA==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@rolldown/binding-linux-arm-gnueabihf": { + "version": "1.2.6", + "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-arm-gnueabihf/-/binding-linux-arm-gnueabihf-1.2.6.tgz", + "integrity": "sha512-tbCiqub0q2MVWJKgF5PoAlNWCtQydiOYSLIkd8sByqK/6MMYLJRcSXSYodqYtd0O+Fw7QaVmKKlS4oL94YRZ0w==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@rolldown/binding-linux-arm64-gnu": { + "version": "1.2.6", + "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-arm64-gnu/-/binding-linux-arm64-gnu-1.2.6.tgz", + "integrity": "sha512-oxK9+baEBPhZG5HB4URY+uU04zJWeZlH6Tb9rB5DK4DF9XR1uXNLXt5Q5ZsugTKayNCNLhkcwz/ye74hRI98dg==", + "cpu": [ + "arm64" + ], + "dev": true, + "libc": [ + "glibc" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@rolldown/binding-linux-arm64-musl": { + "version": "1.2.6", + "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-arm64-musl/-/binding-linux-arm64-musl-1.2.6.tgz", + "integrity": "sha512-muWCk27FVBEZtv0MsK8gnfSmgczA8KQ0uRVJbTABKhkRfQc38aUrcb7fhi3BNiyseFmgcRsoMfQsSNJ+DbZdSw==", + "cpu": [ + "arm64" + ], + "dev": true, + "libc": [ + "musl" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@rolldown/binding-linux-ppc64-gnu": { + "version": "1.2.6", + "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-ppc64-gnu/-/binding-linux-ppc64-gnu-1.2.6.tgz", + "integrity": "sha512-eWDoSfU7Co2qj3vgB3Dt4lj1mG6CoWbcJQkRMP3XJplyCMtuaq3LHvPFjS9QIPvMGWVadJC04Xiy0IdcVPtnwQ==", + "cpu": [ + "ppc64" + ], + "dev": true, + "libc": [ + "glibc" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@rolldown/binding-linux-s390x-gnu": { + "version": "1.2.6", + "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-s390x-gnu/-/binding-linux-s390x-gnu-1.2.6.tgz", + "integrity": "sha512-2bWNjRSIayvupRKxXUY2tWG9fYdoUlTqWywHRvE8Eq3GvuQ+f2HeIkve697fIt+IQs/PV8yFsdWuhp1aJ1PdnA==", + "cpu": [ + "s390x" + ], + "dev": true, + "libc": [ + "glibc" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@rolldown/binding-linux-x64-gnu": { + "version": "1.2.6", + "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-x64-gnu/-/binding-linux-x64-gnu-1.2.6.tgz", + "integrity": "sha512-KekI0gS0wLxe1UBSQSjenBVwou/JkcQPDzBPICGZjxUv9k3RteHDPBQaiOicZUFKRIH2wKEimGwVpnJsbPzu7w==", + "cpu": [ + "x64" + ], + "dev": true, + "libc": [ + "glibc" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@rolldown/binding-linux-x64-musl": { + "version": "1.2.6", + "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-x64-musl/-/binding-linux-x64-musl-1.2.6.tgz", + "integrity": "sha512-TvtPnfVr+HtyGiDmPK4VWmlNm7QhNNAcK5Q9A7aOXsI8545yCyaoMaicXrFZ72JzeYjaUVk7yT243zT0jzjFKQ==", + "cpu": [ + "x64" + ], + "dev": true, + "libc": [ + "musl" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@rolldown/binding-openharmony-arm64": { + "version": "1.2.6", + "resolved": "https://registry.npmjs.org/@rolldown/binding-openharmony-arm64/-/binding-openharmony-arm64-1.2.6.tgz", + "integrity": "sha512-iOo0VEay2XFhaCcH0sps5XIimkSuOnNaZrf6+ZkoSOQBJPKNU48RkmJv0/lSpipexu5P+ouFgafe5IGr/DiQfg==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "openharmony" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@rolldown/binding-win32-arm64-msvc": { + "version": "1.2.6", + "resolved": "https://registry.npmjs.org/@rolldown/binding-win32-arm64-msvc/-/binding-win32-arm64-msvc-1.2.6.tgz", + "integrity": "sha512-y5NTmmasMS455JlOCO4ZM9krIchv3Mvm1crL1iUPGOPgEzSkves9n0SdC5Sjz6+qWDFhd8/JpfWMH8NSWNHe+A==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@rolldown/binding-win32-x64-msvc": { + "version": "1.2.6", + "resolved": "https://registry.npmjs.org/@rolldown/binding-win32-x64-msvc/-/binding-win32-x64-msvc-1.2.6.tgz", + "integrity": "sha512-np8iZSLfXlAD4kWhiyq/u0Yt8oZDtRQ8lGhQaCXo2rl37KNjeU0GjJuwr4P3oeZ++ROfofsKNBqR5LTO8aXyWQ==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@rolldown/pluginutils": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@rolldown/pluginutils/-/pluginutils-1.0.1.tgz", + "integrity": "sha512-2j9bGt5Jh8hj+vPtgzPtl72j0yRxHAyumoo6TNfAjsLB04UtpSvPbPcDcBMxz7n+9CYB0c1GxQFxYRg2jimqGw==", + "dev": true, + "license": "MIT" + }, + "node_modules/@splidejs/react-splide": { + "version": "0.7.12", + "resolved": "https://registry.npmjs.org/@splidejs/react-splide/-/react-splide-0.7.12.tgz", + "integrity": "sha512-UfXH+j47jsMc4x5HA/aOwuuHPqn6y9+ZTNYPWDRD8iLKvIVMZlzq2unjUEvyDAU+TTVPZOXkG2Ojeoz0P4AkZw==", + "license": "MIT", + "dependencies": { + "@splidejs/splide": "^4.1.3" + } + }, + "node_modules/@splidejs/splide": { + "version": "4.1.4", + "resolved": "https://registry.npmjs.org/@splidejs/splide/-/splide-4.1.4.tgz", + "integrity": "sha512-5I30evTJcAJQXt6vJ26g2xEkG+l1nXcpEw4xpKh0/FWQ8ozmAeTbtniVtVmz2sH1Es3vgfC4SS8B2X4o5JMptA==", + "license": "MIT" + }, + "node_modules/@types/esrecurse": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/@types/esrecurse/-/esrecurse-4.3.1.tgz", + "integrity": "sha512-xJBAbDifo5hpffDBuHl0Y8ywswbiAp/Wi7Y/GtAgSlZyIABppyurxVueOPE8LUQOxdlgi6Zqce7uoEpqNTeiUw==", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/estree": { + "version": "1.0.9", + "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.9.tgz", + "integrity": "sha512-GhdPgy1el4/ImP05X05Uw4cw2/M93BCUmnEvWZNStlCzEKME4Fkk+YpoA5OiHNQmoS7Cafb8Xa3Pya8m1Qrzeg==", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/json-schema": { + "version": "7.0.15", + "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.15.tgz", + "integrity": "sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/react": { + "version": "19.2.18", + "resolved": "https://registry.npmjs.org/@types/react/-/react-19.2.18.tgz", + "integrity": "sha512-AnzbBERsrLKtk2XSfTbYRLjQPdy116Sty4q+T+Bp3IC4l6jNBvreVPAHmpq9qhXQM7CXZPjLVmGMw9sy+hxQ3w==", + "dev": true, + "license": "MIT", + "dependencies": { + "csstype": "^3.2.2" + } + }, + "node_modules/@types/react-dom": { + "version": "19.2.5", + "resolved": "https://registry.npmjs.org/@types/react-dom/-/react-dom-19.2.5.tgz", + "integrity": "sha512-fMPwH9v7r/pp43yUd2/Mbiex5KouJwwR3dzHkhLREUC6764VyDsqxhAxv6OFEYR1RhjOyD1naqba8ECDBe7ZQg==", + "dev": true, + "license": "MIT", + "peerDependencies": { + "@types/react": "^19.2.0" + } + }, + "node_modules/@vitejs/plugin-react": { + "version": "6.1.1", + "resolved": "https://registry.npmjs.org/@vitejs/plugin-react/-/plugin-react-6.1.1.tgz", + "integrity": "sha512-yxLaQV9gkhS8ezJqCM6+ndU7mDY6gqAg75NQ+0IjwEI8IYOmQCgkRwHKVSfWXW076DsqMo0Dk+0FK1U+M5RgFw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@rolldown/pluginutils": "^1.0.1" + }, + "engines": { + "node": "^20.19.0 || >=22.12.0" + }, + "peerDependencies": { + "@rolldown/plugin-babel": "^0.1.7 || ^0.2.0", + "babel-plugin-react-compiler": "^1.0.0", + "oxc-transform-react": "^0.145.0", + "vite": "^8.0.0" + }, + "peerDependenciesMeta": { + "@rolldown/plugin-babel": { + "optional": true + }, + "babel-plugin-react-compiler": { + "optional": true + }, + "oxc-transform-react": { + "optional": true + } + } + }, + "node_modules/acorn": { + "version": "8.18.0", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.18.0.tgz", + "integrity": "sha512-lGq+9yr1/GuAWaVYIHRjvvySG5/4VfKIvC8EWxStPdcDh/Ka7FG3twP6v4d5BkravUilhIAsG4Qj83t02LWUPQ==", + "dev": true, + "license": "MIT", + "bin": { + "acorn": "bin/acorn" + }, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/acorn-jsx": { + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz", + "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==", + "dev": true, + "license": "MIT", + "peerDependencies": { + "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0" + } + }, + "node_modules/agent-base": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz", + "integrity": "sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==", + "license": "MIT", + "dependencies": { + "debug": "4" + }, + "engines": { + "node": ">= 6.0.0" + } + }, + "node_modules/ajv": { + "version": "6.15.0", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.15.0.tgz", + "integrity": "sha512-fgFx7Hfoq60ytK2c7DhnF8jIvzYgOMxfugjLOSMHjLIPgenqa7S7oaagATUq99mV6IYvN2tRmC0wnTYX6iPbMw==", + "dev": true, + "license": "MIT", + "dependencies": { + "fast-deep-equal": "^3.1.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, + "node_modules/asynckit": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", + "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==", + "license": "MIT" + }, + "node_modules/axios": { + "version": "1.20.0", + "resolved": "https://registry.npmjs.org/axios/-/axios-1.20.0.tgz", + "integrity": "sha512-r8aOh8j9cGKpgQAqpzrUHnSIc6a59Y3Xf/cv8sy1DrHCkZHzQGEuoq1tARk6qSyDdtQGSDgpb9kFlruzPvrgwg==", + "license": "MIT", + "dependencies": { + "follow-redirects": "^1.16.0", + "form-data": "^4.0.6", + "https-proxy-agent": "^5.0.1", + "proxy-from-env": "^2.1.0" + } + }, + "node_modules/balanced-match": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-4.0.4.tgz", + "integrity": "sha512-BLrgEcRTwX2o6gGxGOCNyMvGSp35YofuYzw9h1IMTRmKqttAZZVU67bdb9Pr2vUHA8+j3i2tJfjO6C6+4myGTA==", + "dev": true, + "license": "MIT", + "engines": { + "node": "18 || 20 || >=22" + } + }, + "node_modules/baseline-browser-mapping": { + "version": "2.11.19", + "resolved": "https://registry.npmjs.org/baseline-browser-mapping/-/baseline-browser-mapping-2.11.19.tgz", + "integrity": "sha512-Grytf1xOxOEMTGRwx6rLGKkTabd4vMg3VrKdj/7joCmV0qgh4QwMMO6xh34YEXQqirAuUdgQGa5orJQQ+69RBw==", + "dev": true, + "license": "Apache-2.0", + "bin": { + "baseline-browser-mapping": "dist/cli.cjs" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/bootstrap": { + "version": "5.3.8", + "resolved": "https://registry.npmjs.org/bootstrap/-/bootstrap-5.3.8.tgz", + "integrity": "sha512-HP1SZDqaLDPwsNiqRqi5NcP0SSXciX2s9E+RyqJIIqGo+vJeN5AJVM98CXmW/Wux0nQ5L7jeWUdplCEf0Ee+tg==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/twbs" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/bootstrap" + } + ], + "license": "MIT", + "peerDependencies": { + "@popperjs/core": "^2.11.8" + } + }, + "node_modules/brace-expansion": { + "version": "5.0.9", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-5.0.9.tgz", + "integrity": "sha512-ScQ4IuvIEF1TMlP7Zt+vjJ//9zlPb2SDcxWxM3bk8s6t6GGdJ7KO1dCcTidOPJKePW30LE/2cT7wCyPho9/Wxg==", + "dev": true, + "license": "MIT", + "dependencies": { + "balanced-match": "^4.0.2" + }, + "engines": { + "node": "20 || >=22" + } + }, + "node_modules/browserslist": { + "version": "4.28.8", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.28.8.tgz", + "integrity": "sha512-V2NpofLblG64mfOtSgDhOJESZEGogzDMBv/q+W6oc4LXWP/q75eOXoOaaOu1EOadB9U4Bwx/e0yzbvwKH8zalA==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/browserslist" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "dependencies": { + "baseline-browser-mapping": "^2.11.12", + "caniuse-lite": "^1.0.30001809", + "electron-to-chromium": "^1.5.402", + "node-releases": "^2.0.53", + "update-browserslist-db": "^1.3.0" + }, + "bin": { + "browserslist": "cli.js" + }, + "engines": { + "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7" + } + }, + "node_modules/call-bind-apply-helpers": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/call-bind-apply-helpers/-/call-bind-apply-helpers-1.0.2.tgz", + "integrity": "sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ==", + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0", + "function-bind": "^1.1.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/caniuse-lite": { + "version": "1.0.30001810", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001810.tgz", + "integrity": "sha512-TITQPUkaz+aVk5GL6NhOdwk1aEaNTSDPsGFWrTuhKGtjTF70jL/Oht2W4c6rXUe5fu7Ie19VIahAXHIIiWWNeg==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/caniuse-lite" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "CC-BY-4.0" + }, + "node_modules/chokidar": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-5.0.0.tgz", + "integrity": "sha512-TQMmc3w+5AxjpL8iIiwebF73dRDF4fBIieAqGn9RGCWaEVwQ6Fb2cGe31Yns0RRIzii5goJ1Y7xbMwo1TxMplw==", + "dev": true, + "license": "MIT", + "dependencies": { + "readdirp": "^5.0.0" + }, + "engines": { + "node": ">= 20.19.0" + }, + "funding": { + "url": "https://paulmillr.com/funding/" + } + }, + "node_modules/combined-stream": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", + "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", + "license": "MIT", + "dependencies": { + "delayed-stream": "~1.0.0" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/convert-source-map": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-2.0.0.tgz", + "integrity": "sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==", + "dev": true, + "license": "MIT" + }, + "node_modules/cookie": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-1.1.1.tgz", + "integrity": "sha512-ei8Aos7ja0weRpFzJnEA9UHJ/7XQmqglbRwnf2ATjcB9Wq874VKH9kfjjirM6UhU2/E5fFYadylyhFldcqSidQ==", + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" + } + }, + "node_modules/cross-spawn": { + "version": "7.0.6", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.6.tgz", + "integrity": "sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==", + "dev": true, + "license": "MIT", + "dependencies": { + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/csstype": { + "version": "3.2.3", + "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.2.3.tgz", + "integrity": "sha512-z1HGKcYy2xA8AGQfwrn0PAy+PB7X/GSj3UVJW9qKyn43xWa+gl5nXmU4qqLMRzWVLFC8KusUX8T/0kCiOYpAIQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/debug": { + "version": "4.4.3", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.3.tgz", + "integrity": "sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==", + "license": "MIT", + "dependencies": { + "ms": "^2.1.3" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/deep-is": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz", + "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/delayed-stream": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", + "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==", + "license": "MIT", + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/detect-libc": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-2.1.2.tgz", + "integrity": "sha512-Btj2BOOO83o3WyH59e8MgXsxEQVcarkUOpEYrubB0urwnN10yQ364rsiByU11nZlqWYZm05i/of7io4mzihBtQ==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">=8" + } + }, + "node_modules/dunder-proto": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/dunder-proto/-/dunder-proto-1.0.1.tgz", + "integrity": "sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A==", + "license": "MIT", + "dependencies": { + "call-bind-apply-helpers": "^1.0.1", + "es-errors": "^1.3.0", + "gopd": "^1.2.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/electron-to-chromium": { + "version": "1.5.414", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.414.tgz", + "integrity": "sha512-aYlviXiaXBbzvKgyALpcMmqa3Np3sDr0XnZbEG62n2UpZFbEcjQ4EEMOLGzVPhwVnwTz0lvKY+GcARbunuHekw==", + "dev": true, + "license": "ISC" + }, + "node_modules/es-define-property": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.1.tgz", + "integrity": "sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g==", + "license": "MIT", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-errors": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/es-errors/-/es-errors-1.3.0.tgz", + "integrity": "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==", + "license": "MIT", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-object-atoms": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/es-object-atoms/-/es-object-atoms-1.1.2.tgz", + "integrity": "sha512-HWcBoN6NileqtSydK2FqHbS/LoDd2pqrnQHLyJzBj4kOp/ky2MWMN694xOfkK8/SnUsW2DH7EfyVlydKCsm1Zw==", + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-set-tostringtag": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/es-set-tostringtag/-/es-set-tostringtag-2.1.0.tgz", + "integrity": "sha512-j6vWzfrGVfyXxge+O0x5sh6cvxAog0a/4Rdd2K36zCMV5eJ+/+tOAngRO8cODMNWbVRdVlmGZQL2YS3yR8bIUA==", + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.6", + "has-tostringtag": "^1.0.2", + "hasown": "^2.0.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/escalade": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.2.0.tgz", + "integrity": "sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/escape-string-regexp": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", + "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/eslint": { + "version": "10.9.1", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-10.9.1.tgz", + "integrity": "sha512-9VaAkDURekixUQJy0oJYl2DcN6oKMfxay7XzaGYAWQwsb6qfKf+x76R2k1L8kb1boc+FyCAaTA9GmiKaaiaF+A==", + "dev": true, + "license": "MIT", + "workspaces": [ + "packages/*" + ], + "dependencies": { + "@eslint-community/eslint-utils": "^4.8.0", + "@eslint-community/regexpp": "^4.12.2", + "@eslint/config-array": "^0.23.5", + "@eslint/config-helpers": "^0.7.0", + "@eslint/core": "^1.2.1", + "@eslint/plugin-kit": "^0.7.2", + "@humanfs/node": "^0.16.6", + "@humanwhocodes/module-importer": "^1.0.1", + "@humanwhocodes/retry": "^0.4.2", + "@types/estree": "^1.0.6", + "ajv": "^6.14.0", + "cross-spawn": "^7.0.6", + "debug": "^4.3.2", + "escape-string-regexp": "^4.0.0", + "eslint-scope": "^9.1.2", + "eslint-visitor-keys": "^5.0.1", + "espree": "^11.2.0", + "esquery": "^1.7.0", + "esutils": "^2.0.2", + "fast-deep-equal": "^3.1.3", + "file-entry-cache": "^8.0.0", + "find-up": "^5.0.0", + "glob-parent": "^6.0.2", + "ignore": "^5.2.0", + "imurmurhash": "^0.1.4", + "is-glob": "^4.0.0", + "json-stable-stringify-without-jsonify": "^1.0.1", + "minimatch": "^10.2.5", + "natural-compare": "^1.4.0", + "optionator": "^0.9.3" + }, + "bin": { + "eslint": "bin/eslint.js" + }, + "engines": { + "node": "^20.19.0 || ^22.13.0 || >=24" + }, + "funding": { + "url": "https://eslint.org/donate" + }, + "peerDependencies": { + "jiti": "*" + }, + "peerDependenciesMeta": { + "jiti": { + "optional": true + } + } + }, + "node_modules/eslint-plugin-react-hooks": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/eslint-plugin-react-hooks/-/eslint-plugin-react-hooks-7.1.1.tgz", + "integrity": "sha512-f2I7Gw6JbvCexzIInuSbZpfdQ44D7iqdWX01FKLvrPgqxoE7oMj8clOfto8U6vYiz4yd5oKu39rRSVOe1zRu0g==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/core": "^7.24.4", + "@babel/parser": "^7.24.4", + "hermes-parser": "^0.25.1", + "zod": "^3.25.0 || ^4.0.0", + "zod-validation-error": "^3.5.0 || ^4.0.0" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "eslint": "^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0-0 || ^9.0.0 || ^10.0.0" + } + }, + "node_modules/eslint-plugin-react-refresh": { + "version": "0.5.5", + "resolved": "https://registry.npmjs.org/eslint-plugin-react-refresh/-/eslint-plugin-react-refresh-0.5.5.tgz", + "integrity": "sha512-vG7yLURXNvCHy0FBdbZRwIu0BLPJMlUUJS2Ep7ud9w1YCLftFZtuEjyjhym0Qq9yuZ6LJUitNlu/hMk0gakXAw==", + "dev": true, + "license": "MIT", + "peerDependencies": { + "eslint": "^9 || ^10" + } + }, + "node_modules/eslint-scope": { + "version": "9.1.2", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-9.1.2.tgz", + "integrity": "sha512-xS90H51cKw0jltxmvmHy2Iai1LIqrfbw57b79w/J7MfvDfkIkFZ+kj6zC3BjtUwh150HsSSdxXZcsuv72miDFQ==", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "@types/esrecurse": "^4.3.1", + "@types/estree": "^1.0.8", + "esrecurse": "^4.3.0", + "estraverse": "^5.2.0" + }, + "engines": { + "node": "^20.19.0 || ^22.13.0 || >=24" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/eslint-visitor-keys": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-5.0.1.tgz", + "integrity": "sha512-tD40eHxA35h0PEIZNeIjkHoDR4YjjJp34biM0mDvplBe//mB+IHCqHDGV7pxF+7MklTvighcCPPZC7ynWyjdTA==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": "^20.19.0 || ^22.13.0 || >=24" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/espree": { + "version": "11.2.0", + "resolved": "https://registry.npmjs.org/espree/-/espree-11.2.0.tgz", + "integrity": "sha512-7p3DrVEIopW1B1avAGLuCSh1jubc01H2JHc8B4qqGblmg5gI9yumBgACjWo4JlIc04ufug4xJ3SQI8HkS/Rgzw==", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "acorn": "^8.16.0", + "acorn-jsx": "^5.3.2", + "eslint-visitor-keys": "^5.0.1" + }, + "engines": { + "node": "^20.19.0 || ^22.13.0 || >=24" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/esquery": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.7.0.tgz", + "integrity": "sha512-Ap6G0WQwcU/LHsvLwON1fAQX9Zp0A2Y6Y/cJBl9r/JbW90Zyg4/zbG6zzKa2OTALELarYHmKu0GhpM5EO+7T0g==", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "estraverse": "^5.1.0" + }, + "engines": { + "node": ">=0.10" + } + }, + "node_modules/esrecurse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", + "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "estraverse": "^5.2.0" + }, + "engines": { + "node": ">=4.0" + } + }, + "node_modules/estraverse": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", + "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", + "dev": true, + "license": "BSD-2-Clause", + "engines": { + "node": ">=4.0" + } + }, + "node_modules/esutils": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", + "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", + "dev": true, + "license": "BSD-2-Clause", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/fast-deep-equal": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", + "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", + "dev": true, + "license": "MIT" + }, + "node_modules/fast-json-stable-stringify": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", + "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", + "dev": true, + "license": "MIT" + }, + "node_modules/fast-levenshtein": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", + "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==", + "dev": true, + "license": "MIT" + }, + "node_modules/fdir": { + "version": "6.5.0", + "resolved": "https://registry.npmjs.org/fdir/-/fdir-6.5.0.tgz", + "integrity": "sha512-tIbYtZbucOs0BRGqPJkshJUYdL+SDH7dVM8gjy+ERp3WAUjLEFJE+02kanyHtwjWOnwrKYBiwAmM0p4kLJAnXg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12.0.0" + }, + "peerDependencies": { + "picomatch": "^3 || ^4" + }, + "peerDependenciesMeta": { + "picomatch": { + "optional": true + } + } + }, + "node_modules/file-entry-cache": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-8.0.0.tgz", + "integrity": "sha512-XXTUwCvisa5oacNGRP9SfNtYBNAMi+RPwBFmblZEF7N7swHYQS6/Zfk7SRwx4D5j3CH211YNRco1DEMNVfZCnQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "flat-cache": "^4.0.0" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/find-up": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", + "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", + "dev": true, + "license": "MIT", + "dependencies": { + "locate-path": "^6.0.0", + "path-exists": "^4.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/flat-cache": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-4.0.1.tgz", + "integrity": "sha512-f7ccFPK3SXFHpx15UIGyRJ/FJQctuKZ0zVuN3frBo4HnK3cay9VEW0R6yPYFHC0AgqhukPzKjq22t5DmAyqGyw==", + "dev": true, + "license": "MIT", + "dependencies": { + "flatted": "^3.2.9", + "keyv": "^4.5.4" + }, + "engines": { + "node": ">=16" + } + }, + "node_modules/flatted": { + "version": "3.4.4", + "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.4.4.tgz", + "integrity": "sha512-5+ybhBZANEJxaH3X5evAFatUxLfEHSr7n6kYJ+1Qd0mUqr4eu9gIf6GDbWHf8RJijHrjjO8G+la14SlL2SeS1Q==", + "dev": true, + "license": "ISC" + }, + "node_modules/follow-redirects": { + "version": "1.16.0", + "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.16.0.tgz", + "integrity": "sha512-y5rN/uOsadFT/JfYwhxRS5R7Qce+g3zG97+JrtFZlC9klX/W5hD7iiLzScI4nZqUS7DNUdhPgw4xI8W2LuXlUw==", + "funding": [ + { + "type": "individual", + "url": "https://github.com/sponsors/RubenVerborgh" + } + ], + "license": "MIT", + "engines": { + "node": ">=4.0" + }, + "peerDependenciesMeta": { + "debug": { + "optional": true + } + } + }, + "node_modules/form-data": { + "version": "4.0.6", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.6.tgz", + "integrity": "sha512-vKatAh4SlVfgbv+YtmhiRjhEMJsYpsG1Y2rMQtR+SVSbytsSD1YGzDIcrAJmdFec88u/+VoGmxnl+80gL1tRCQ==", + "license": "MIT", + "dependencies": { + "asynckit": "^0.4.0", + "combined-stream": "^1.0.8", + "es-set-tostringtag": "^2.1.0", + "hasown": "^2.0.4", + "mime-types": "^2.1.35" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/fsevents": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", + "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", + "dev": true, + "hasInstallScript": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^8.16.0 || ^10.6.0 || >=11.0.0" + } + }, + "node_modules/function-bind": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz", + "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==", + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/gensync": { + "version": "1.0.0-beta.2", + "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz", + "integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/get-intrinsic": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.3.0.tgz", + "integrity": "sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ==", + "license": "MIT", + "dependencies": { + "call-bind-apply-helpers": "^1.0.2", + "es-define-property": "^1.0.1", + "es-errors": "^1.3.0", + "es-object-atoms": "^1.1.1", + "function-bind": "^1.1.2", + "get-proto": "^1.0.1", + "gopd": "^1.2.0", + "has-symbols": "^1.1.0", + "hasown": "^2.0.2", + "math-intrinsics": "^1.1.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/get-proto": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/get-proto/-/get-proto-1.0.1.tgz", + "integrity": "sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g==", + "license": "MIT", + "dependencies": { + "dunder-proto": "^1.0.1", + "es-object-atoms": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/glob-parent": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", + "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", + "dev": true, + "license": "ISC", + "dependencies": { + "is-glob": "^4.0.3" + }, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/globals": { + "version": "17.11.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-17.11.0.tgz", + "integrity": "sha512-Z2I8hM+PbJDXQDq3Icgpzv+mPdwr68iZUU9d5WW4FuXfDUQfkZaZuvjMv42/5crNyw154+9+VWXbYrUgDXbxNw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/gopd": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.2.0.tgz", + "integrity": "sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg==", + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-symbols": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.1.0.tgz", + "integrity": "sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ==", + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-tostringtag": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.2.tgz", + "integrity": "sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==", + "license": "MIT", + "dependencies": { + "has-symbols": "^1.0.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/hasown": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.4.tgz", + "integrity": "sha512-T2UbfbBEF32wiepXIsMlTW9+dDYC6wMh/t/vYA4tuOMKqWz/n3vr1NFSxQiyP+zk2mXsoMA/i/7qV6LKut1t1A==", + "license": "MIT", + "dependencies": { + "function-bind": "^1.1.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/hermes-estree": { + "version": "0.25.1", + "resolved": "https://registry.npmjs.org/hermes-estree/-/hermes-estree-0.25.1.tgz", + "integrity": "sha512-0wUoCcLp+5Ev5pDW2OriHC2MJCbwLwuRx+gAqMTOkGKJJiBCLjtrvy4PWUGn6MIVefecRpzoOZ/UV6iGdOr+Cw==", + "dev": true, + "license": "MIT" + }, + "node_modules/hermes-parser": { + "version": "0.25.1", + "resolved": "https://registry.npmjs.org/hermes-parser/-/hermes-parser-0.25.1.tgz", + "integrity": "sha512-6pEjquH3rqaI6cYAXYPcz9MS4rY6R4ngRgrgfDshRptUZIc3lw0MCIJIGDj9++mfySOuPTHB4nrSW99BCvOPIA==", + "dev": true, + "license": "MIT", + "dependencies": { + "hermes-estree": "0.25.1" + } + }, + "node_modules/https-proxy-agent": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz", + "integrity": "sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA==", + "license": "MIT", + "dependencies": { + "agent-base": "6", + "debug": "4" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/ignore": { + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.2.tgz", + "integrity": "sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 4" + } + }, + "node_modules/immutable": { + "version": "5.1.9", + "resolved": "https://registry.npmjs.org/immutable/-/immutable-5.1.9.tgz", + "integrity": "sha512-m8nVez3rwrgmWxtLMt1ZYXB2Lv7OKYn/disyxAlSDYAlKSlFoPPfIAmAM/M5xqL4m4C/wAPw7S2/CNaUii1Hxg==", + "dev": true, + "license": "MIT" + }, + "node_modules/imurmurhash": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", + "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.8.19" + } + }, + "node_modules/is-extglob": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", + "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-glob": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", + "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-extglob": "^2.1.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/isexe": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", + "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", + "dev": true, + "license": "ISC" + }, + "node_modules/js-tokens": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", + "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/jsesc": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-3.1.0.tgz", + "integrity": "sha512-/sM3dO2FOzXjKQhJuo0Q173wf2KOo8t4I8vHy6lF9poUp7bKT0/NHE8fPX23PwfhnykfqnC2xRxOnVw5XuGIaA==", + "dev": true, + "license": "MIT", + "bin": { + "jsesc": "bin/jsesc" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/json-buffer": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.1.tgz", + "integrity": "sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/json-schema-traverse": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", + "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", + "dev": true, + "license": "MIT" + }, + "node_modules/json-stable-stringify-without-jsonify": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", + "integrity": "sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==", + "dev": true, + "license": "MIT" + }, + "node_modules/json5": { + "version": "2.2.3", + "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz", + "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==", + "dev": true, + "license": "MIT", + "bin": { + "json5": "lib/cli.js" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/keyv": { + "version": "4.5.4", + "resolved": "https://registry.npmjs.org/keyv/-/keyv-4.5.4.tgz", + "integrity": "sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==", + "dev": true, + "license": "MIT", + "dependencies": { + "json-buffer": "3.0.1" + } + }, + "node_modules/levn": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz", + "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "prelude-ls": "^1.2.1", + "type-check": "~0.4.0" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/lightningcss": { + "version": "1.33.0", + "resolved": "https://registry.npmjs.org/lightningcss/-/lightningcss-1.33.0.tgz", + "integrity": "sha512-WkUDrojuJs0xkgGf2udWxa3yGBRxPtxUkB79i6aCZLRgc7PM8fZe9TosfPDcvEpQZbuFASnHYmRLBLUbmLOIIA==", + "dev": true, + "license": "MPL-2.0", + "dependencies": { + "detect-libc": "^2.0.3" + }, + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + }, + "optionalDependencies": { + "lightningcss-android-arm64": "1.33.0", + "lightningcss-darwin-arm64": "1.33.0", + "lightningcss-darwin-x64": "1.33.0", + "lightningcss-freebsd-x64": "1.33.0", + "lightningcss-linux-arm-gnueabihf": "1.33.0", + "lightningcss-linux-arm64-gnu": "1.33.0", + "lightningcss-linux-arm64-musl": "1.33.0", + "lightningcss-linux-x64-gnu": "1.33.0", + "lightningcss-linux-x64-musl": "1.33.0", + "lightningcss-win32-arm64-msvc": "1.33.0", + "lightningcss-win32-x64-msvc": "1.33.0" + } + }, + "node_modules/lightningcss-android-arm64": { + "version": "1.33.0", + "resolved": "https://registry.npmjs.org/lightningcss-android-arm64/-/lightningcss-android-arm64-1.33.0.tgz", + "integrity": "sha512-gEpRTalKdosp4Bb8qWtc2iOgE5SeIHlpS1up9bFq2wAyYhl1UdTObYiHe98zEM9SQvSoqQZ1IQD0JNpg3Ml5pg==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MPL-2.0", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-darwin-arm64": { + "version": "1.33.0", + "resolved": "https://registry.npmjs.org/lightningcss-darwin-arm64/-/lightningcss-darwin-arm64-1.33.0.tgz", + "integrity": "sha512-Sciaz8eenNTKn9b3t7+xr0ipTp9YxKQY4npwQ3mrRuL0BAVHBLyZxofhaKBAVtzmtRZ/zTyo0/to4B1uWG/Djg==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MPL-2.0", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-darwin-x64": { + "version": "1.33.0", + "resolved": "https://registry.npmjs.org/lightningcss-darwin-x64/-/lightningcss-darwin-x64-1.33.0.tgz", + "integrity": "sha512-Z5UPAxzrjlWNNyGy6i65cJzzvgJ5D3T6wMvs+gWpY9d7qRhANrxqAp6LhxIgZhWEw18RfJTGcRxjuLIBr+m8XQ==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MPL-2.0", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-freebsd-x64": { + "version": "1.33.0", + "resolved": "https://registry.npmjs.org/lightningcss-freebsd-x64/-/lightningcss-freebsd-x64-1.33.0.tgz", + "integrity": "sha512-QQM/Ti/hQajJwCY+RiWuCZ9sdtI/XQk7nDK5vC8kkdwixezOlDgvDx7+RT+QjK6FcFT4MpsuoBnHIo/O3StRRg==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MPL-2.0", + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-linux-arm-gnueabihf": { + "version": "1.33.0", + "resolved": "https://registry.npmjs.org/lightningcss-linux-arm-gnueabihf/-/lightningcss-linux-arm-gnueabihf-1.33.0.tgz", + "integrity": "sha512-N7FVBe6iS24MlM6R/4RBTxGhQheZGs7tiQ9U32UtF75NzP5Q7xWPRqLBCKxlRQRk3rY1jCIPLzx7WzOhuUIRLQ==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MPL-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-linux-arm64-gnu": { + "version": "1.33.0", + "resolved": "https://registry.npmjs.org/lightningcss-linux-arm64-gnu/-/lightningcss-linux-arm64-gnu-1.33.0.tgz", + "integrity": "sha512-j2v/itmy4HlNxlc6voKXYgBqNi0Ng2LShg4z7GufpEgs05P+2suBVyi9I6YHq5uoVFx9ETin3eCEhLVyXGQnKg==", + "cpu": [ + "arm64" + ], + "dev": true, + "libc": [ + "glibc" + ], + "license": "MPL-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-linux-arm64-musl": { + "version": "1.33.0", + "resolved": "https://registry.npmjs.org/lightningcss-linux-arm64-musl/-/lightningcss-linux-arm64-musl-1.33.0.tgz", + "integrity": "sha512-yiO5ROMuYQgXbC60yjZU5CYSFZGKXL0HFATXt9mHJn1+zW55oCtMI9NfcVhYLMFDL7gV7oBPon/EmMMGg2OvtQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "libc": [ + "musl" + ], + "license": "MPL-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-linux-x64-gnu": { + "version": "1.33.0", + "resolved": "https://registry.npmjs.org/lightningcss-linux-x64-gnu/-/lightningcss-linux-x64-gnu-1.33.0.tgz", + "integrity": "sha512-ar+Ju7LmcN0Jo4FpL4hpFybwNG9/3A/Br5KW2n2jyODg3MEZXaDYADdemoNS+BDNfMgKvylJLj4S5tyRActuAg==", + "cpu": [ + "x64" + ], + "dev": true, + "libc": [ + "glibc" + ], + "license": "MPL-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-linux-x64-musl": { + "version": "1.33.0", + "resolved": "https://registry.npmjs.org/lightningcss-linux-x64-musl/-/lightningcss-linux-x64-musl-1.33.0.tgz", + "integrity": "sha512-RYiYbkokw0trfKqqzfF55lginwEPrD3OJDfTuJzFs1MK6iFnDenaz1fqLLtX4ITG3OktJQXOeTaw1awrBAlZPw==", + "cpu": [ + "x64" + ], + "dev": true, + "libc": [ + "musl" + ], + "license": "MPL-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-win32-arm64-msvc": { + "version": "1.33.0", + "resolved": "https://registry.npmjs.org/lightningcss-win32-arm64-msvc/-/lightningcss-win32-arm64-msvc-1.33.0.tgz", + "integrity": "sha512-1K+MPfLSFVpphzpdbfkhlWk6wBrTObBzS2T6db10PNOZgR9GoVsAWzwNyuhUYYbTp23j+4RrncfujZ4uAzXvwA==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MPL-2.0", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-win32-x64-msvc": { + "version": "1.33.0", + "resolved": "https://registry.npmjs.org/lightningcss-win32-x64-msvc/-/lightningcss-win32-x64-msvc-1.33.0.tgz", + "integrity": "sha512-OlEICDx/Xl0FqSp4bry8zFnCvGpig3Gl4gCquvYwHuqJKEC1+n9NgDniFvqHGmMv1ZkqDJrDqKKSykTDX+ehuA==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MPL-2.0", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/locate-path": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", + "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", + "dev": true, + "license": "MIT", + "dependencies": { + "p-locate": "^5.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/lru-cache": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz", + "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==", + "dev": true, + "license": "ISC", + "dependencies": { + "yallist": "^3.0.2" + } + }, + "node_modules/math-intrinsics": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/math-intrinsics/-/math-intrinsics-1.1.0.tgz", + "integrity": "sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g==", + "license": "MIT", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/mime-db": { + "version": "1.52.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", + "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/mime-types": { + "version": "2.1.35", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", + "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", + "license": "MIT", + "dependencies": { + "mime-db": "1.52.0" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/minimatch": { + "version": "10.2.6", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-10.2.6.tgz", + "integrity": "sha512-vpLQEs+VLCr1nU0BXS07maYoFwlDAH0gngQuuttxIwutDFEMHq2blX+8vpgxDdK3J1PwjCJiep77OitTZ4Ll1A==", + "dev": true, + "license": "BlueOak-1.0.0", + "dependencies": { + "brace-expansion": "^5.0.8" + }, + "engines": { + "node": "18 || 20 || >=22" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", + "license": "MIT" + }, + "node_modules/nanoid": { + "version": "3.3.18", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.18.tgz", + "integrity": "sha512-DTg4MJbGMWkfi6VZFdNt2/caMbQy4Ou+Op/hJQvGEWcnVfoA1QA+xzRKAzw9jD6+GVOOeYr/mIcuDSdug6F6+w==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "bin": { + "nanoid": "bin/nanoid.cjs" + }, + "engines": { + "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" + } + }, + "node_modules/natural-compare": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", + "integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==", + "dev": true, + "license": "MIT" + }, + "node_modules/node-addon-api": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-7.1.1.tgz", + "integrity": "sha512-5m3bsyrjFWE1xf7nz7YXdN4udnVtXK6/Yfgn5qnahL6bCkf2yKt4k3nuTKAtT4r3IG8JNR2ncsIMdZuAzJjHQQ==", + "dev": true, + "license": "MIT", + "optional": true + }, + "node_modules/node-releases": { + "version": "2.0.53", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.53.tgz", + "integrity": "sha512-D9UOmYG3UH1V+ENW56t5QXBwJw1YEY18ruVeus89Rw+SyIgjPkCO84bRzO3uNIYosJbNwiabWVn48o3uJLjxFQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18" + } + }, + "node_modules/optionator": { + "version": "0.9.4", + "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.4.tgz", + "integrity": "sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g==", + "dev": true, + "license": "MIT", + "dependencies": { + "deep-is": "^0.1.3", + "fast-levenshtein": "^2.0.6", + "levn": "^0.4.1", + "prelude-ls": "^1.2.1", + "type-check": "^0.4.0", + "word-wrap": "^1.2.5" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/p-limit": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", + "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "yocto-queue": "^0.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/p-locate": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", + "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", + "dev": true, + "license": "MIT", + "dependencies": { + "p-limit": "^3.0.2" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/path-exists": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", + "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/path-key": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", + "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/picocolors": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz", + "integrity": "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==", + "dev": true, + "license": "ISC" + }, + "node_modules/picomatch": { + "version": "4.0.7", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.7.tgz", + "integrity": "sha512-qcJu88Q2IWqJsDD529JKMdwGm/dvInW4HvQnRwiH9JtihJvzGOscDtHE3x1pBKeUOTysQ8kVmLnJ2kJu7yhcGA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/postcss": { + "version": "8.5.26", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.5.26.tgz", + "integrity": "sha512-u82N74LFzG8ca+dD8puPnplTXoGH4fTPpVGuIbt36G3qvNlkvfD0lEAZSxaly3KX8TS/L1A1gsCEmvKmBcVbkQ==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/postcss" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "dependencies": { + "nanoid": "^3.3.17", + "picocolors": "^1.1.1", + "source-map-js": "^1.2.1" + }, + "engines": { + "node": "^10 || ^12 || >=14" + } + }, + "node_modules/prelude-ls": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", + "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/proxy-from-env": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-2.1.0.tgz", + "integrity": "sha512-cJ+oHTW1VAEa8cJslgmUZrc+sjRKgAKl3Zyse6+PV38hZe/V6Z14TbCuXcan9F9ghlz4QrFr2c92TNF82UkYHA==", + "license": "MIT", + "engines": { + "node": ">=10" + } + }, + "node_modules/punycode": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz", + "integrity": "sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/react": { + "version": "19.2.8", + "resolved": "https://registry.npmjs.org/react/-/react-19.2.8.tgz", + "integrity": "sha512-PWaYA1L/q9u2u7xYQi+Y3L3Yfnie7XyLeaJICV1MGD6LprsBxcAqGjYyr0eY3p+QdsA+x/Irkt4Qif8D63+Sbw==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/react-dom": { + "version": "19.2.8", + "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-19.2.8.tgz", + "integrity": "sha512-rVprimfGBG3DR+Tq0IQG2DT5PxKth1WIGDmj5yPmlzr4YBe7uyE+Du4oVqTDXZSHGGGXRtTJEGSSePyQCMBglQ==", + "license": "MIT", + "dependencies": { + "scheduler": "^0.27.0" + }, + "peerDependencies": { + "react": "^19.2.8" + } + }, + "node_modules/react-icons": { + "version": "5.7.0", + "resolved": "https://registry.npmjs.org/react-icons/-/react-icons-5.7.0.tgz", + "integrity": "sha512-LBLy340Rzqy6+/yVhZKT3B/QpP1BZaesGqasf09HPOBzRarcDIFH0WwXlXQfE7q7ipxK4MSiC5DIBWURCny6fw==", + "license": "MIT", + "peerDependencies": { + "react": "*" + } + }, + "node_modules/react-router": { + "version": "7.18.3", + "resolved": "https://registry.npmjs.org/react-router/-/react-router-7.18.3.tgz", + "integrity": "sha512-gyXgtdr5uACJ5b1Q4udzjVV+tb/rlHIMJKuJ0e89R4Kzgz47z/rgP0dIKxktqIEUhDHluGTPJJH/wRha7CyqsA==", + "license": "MIT", + "dependencies": { + "cookie": "^1.0.1", + "set-cookie-parser": "^2.6.0" + }, + "engines": { + "node": ">=20.0.0" + }, + "peerDependencies": { + "react": ">=18", + "react-dom": ">=18" + }, + "peerDependenciesMeta": { + "react-dom": { + "optional": true + } + } + }, + "node_modules/react-router-dom": { + "version": "7.18.3", + "resolved": "https://registry.npmjs.org/react-router-dom/-/react-router-dom-7.18.3.tgz", + "integrity": "sha512-ytVbyBBM7vMfRCam25r0WMhSVSom909A8p+8m0/f1w853dz/xfFu6etAT2SEbVoSnI+ZoPRDqIsQXVT89gp7kg==", + "license": "MIT", + "dependencies": { + "react-router": "7.18.3" + }, + "engines": { + "node": ">=20.0.0" + }, + "peerDependencies": { + "react": ">=18", + "react-dom": ">=18" + } + }, + "node_modules/readdirp": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-5.1.1.tgz", + "integrity": "sha512-Kko+Y5XQ6fM+Ce3dq3m9YGxnacYZYl9cA1wZjaF3Vbry2L3i1qVg8+CAgNPsXRArPMUMCaOR7oa9Nqntc43JKA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 20.19.0" + }, + "funding": { + "type": "individual", + "url": "https://paulmillr.com/funding/" + } + }, + "node_modules/rolldown": { + "version": "1.2.6", + "resolved": "https://registry.npmjs.org/rolldown/-/rolldown-1.2.6.tgz", + "integrity": "sha512-vMM4q3aixf46GiF1Kok8jDPFsEpXgFWGjUHXNkNHNm+Y2adXAG2dbX91jkti3i0ZRsOlcmbuzAz1poObSHCmUA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@oxc-project/types": "=0.147.0", + "@rolldown/pluginutils": "^1.0.0" + }, + "bin": { + "rolldown": "bin/cli.mjs" + }, + "engines": { + "node": "^20.19.0 || >=22.12.0" + }, + "optionalDependencies": { + "@rolldown/binding-android-arm-eabi": "1.2.6", + "@rolldown/binding-android-arm64": "1.2.6", + "@rolldown/binding-darwin-arm64": "1.2.6", + "@rolldown/binding-darwin-x64": "1.2.6", + "@rolldown/binding-freebsd-x64": "1.2.6", + "@rolldown/binding-linux-arm-gnueabihf": "1.2.6", + "@rolldown/binding-linux-arm64-gnu": "1.2.6", + "@rolldown/binding-linux-arm64-musl": "1.2.6", + "@rolldown/binding-linux-ppc64-gnu": "1.2.6", + "@rolldown/binding-linux-s390x-gnu": "1.2.6", + "@rolldown/binding-linux-x64-gnu": "1.2.6", + "@rolldown/binding-linux-x64-musl": "1.2.6", + "@rolldown/binding-openharmony-arm64": "1.2.6", + "@rolldown/binding-win32-arm64-msvc": "1.2.6", + "@rolldown/binding-win32-x64-msvc": "1.2.6" + } + }, + "node_modules/sass": { + "version": "1.103.1", + "resolved": "https://registry.npmjs.org/sass/-/sass-1.103.1.tgz", + "integrity": "sha512-9icZURbP51S6S0QGoyaeqk9uB06GNWxsFYWfH5RgpFgqK5FA8tJcM3AdVxrZEVJ7dz+L87nG95gBKf4VuaMHGw==", + "dev": true, + "license": "MIT", + "dependencies": { + "chokidar": "^5.0.0", + "immutable": "^5.1.5", + "source-map-js": ">=0.6.2 <2.0.0" + }, + "bin": { + "sass": "sass.js" + }, + "engines": { + "node": ">=20.19.0" + }, + "optionalDependencies": { + "@parcel/watcher": "^2.4.1" + } + }, + "node_modules/scheduler": { + "version": "0.27.0", + "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.27.0.tgz", + "integrity": "sha512-eNv+WrVbKu1f3vbYJT/xtiF5syA5HPIMtf9IgY/nKg0sWqzAUEvqY/xm7OcZc/qafLx/iO9FgOmeSAp4v5ti/Q==", + "license": "MIT" + }, + "node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "dev": true, + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/set-cookie-parser": { + "version": "2.7.2", + "resolved": "https://registry.npmjs.org/set-cookie-parser/-/set-cookie-parser-2.7.2.tgz", + "integrity": "sha512-oeM1lpU/UvhTxw+g3cIfxXHyJRc/uidd3yK1P242gzHds0udQBYzs3y8j4gCCW+ZJ7ad0yctld8RYO+bdurlvw==", + "license": "MIT" + }, + "node_modules/shebang-command": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", + "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", + "dev": true, + "license": "MIT", + "dependencies": { + "shebang-regex": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/shebang-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", + "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/source-map-js": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.1.tgz", + "integrity": "sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==", + "dev": true, + "license": "BSD-3-Clause", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/tinyglobby": { + "version": "0.2.17", + "resolved": "https://registry.npmjs.org/tinyglobby/-/tinyglobby-0.2.17.tgz", + "integrity": "sha512-wXR/dYpcqKmfWpEdZjiKJOwCNFndD0DMnrW/cYjVGttEkBfVgcLFHoNrlj47mjOVic9yyNu65alsgF4NQyTa2g==", + "dev": true, + "license": "MIT", + "dependencies": { + "fdir": "^6.5.0", + "picomatch": "^4.0.4" + }, + "engines": { + "node": ">=12.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/SuperchupuDev" + } + }, + "node_modules/type-check": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", + "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==", + "dev": true, + "license": "MIT", + "dependencies": { + "prelude-ls": "^1.2.1" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/update-browserslist-db": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.3.1.tgz", + "integrity": "sha512-ZZ61DsRsOnakl74HAmp3oSN4aXUmEWXf+i/yv0h7tIBfICc3VdrFErQKUUKPgu3AMsTUMbcongALEN4l6GSUrQ==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/browserslist" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "dependencies": { + "escalade": "^3.2.0", + "picocolors": "^1.1.1" + }, + "bin": { + "update-browserslist-db": "cli.js" + }, + "peerDependencies": { + "browserslist": ">= 4.21.0" + } + }, + "node_modules/uri-js": { + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", + "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "punycode": "^2.1.0" + } + }, + "node_modules/uuid": { + "version": "14.0.2", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-14.0.2.tgz", + "integrity": "sha512-xZe/16rV4aa+HGSOCiY2YeLT1OybRLrrkL/Rqaq7p7GMVXjFh+6wN4oMYgjFmnSnhY8t6Xpdl2l9qmnHYuMHwQ==", + "funding": [ + "https://github.com/sponsors/broofa", + "https://github.com/sponsors/ctavan" + ], + "license": "MIT", + "bin": { + "uuid": "dist-node/bin/uuid" + } + }, + "node_modules/vite": { + "version": "8.2.2", + "resolved": "https://registry.npmjs.org/vite/-/vite-8.2.2.tgz", + "integrity": "sha512-cFKLV/PRgAUlIRm5WjMjJ86jrftzpqcgH+Us+DS8mI3CDNiH30Whrz8uHL3+MOLPAgqbMBAqWdAHAphOAM+z/Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "lightningcss": "^1.33.0", + "picomatch": "^4.0.5", + "postcss": "^8.5.26", + "rolldown": "~1.2.4", + "tinyglobby": "^0.2.17" + }, + "bin": { + "vite": "bin/vite.js" + }, + "engines": { + "node": "^20.19.0 || >=22.12.0" + }, + "funding": { + "url": "https://github.com/vitejs/vite?sponsor=1" + }, + "optionalDependencies": { + "fsevents": "~2.3.3" + }, + "peerDependencies": { + "@types/node": "^20.19.0 || >=22.12.0", + "@vitejs/devtools": "^0.4.0 || ^0.5.0", + "esbuild": "^0.27.0 || ^0.28.0", + "jiti": ">=1.21.0", + "less": "^4.0.0", + "sass": "^1.70.0", + "sass-embedded": "^1.70.0", + "stylus": ">=0.54.8", + "sugarss": "^5.0.0", + "terser": "^5.16.0", + "tsx": "^4.8.1", + "yaml": "^2.4.2" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + }, + "@vitejs/devtools": { + "optional": true + }, + "esbuild": { + "optional": true + }, + "jiti": { + "optional": true + }, + "less": { + "optional": true + }, + "sass": { + "optional": true + }, + "sass-embedded": { + "optional": true + }, + "stylus": { + "optional": true + }, + "sugarss": { + "optional": true + }, + "terser": { + "optional": true + }, + "tsx": { + "optional": true + }, + "yaml": { + "optional": true + } + } + }, + "node_modules/which": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", + "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", + "dev": true, + "license": "ISC", + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "node-which": "bin/node-which" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/word-wrap": { + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.5.tgz", + "integrity": "sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/yallist": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", + "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==", + "dev": true, + "license": "ISC" + }, + "node_modules/yocto-queue": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", + "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/zod": { + "version": "4.4.3", + "resolved": "https://registry.npmjs.org/zod/-/zod-4.4.3.tgz", + "integrity": "sha512-ytENFjIJFl2UwYglde2jchW2Hwm4GJFLDiSXWdTrJQBIN9Fcyp7n4DhxJEiWNAJMV1/BqWfW/kkg71UDcHJyTQ==", + "dev": true, + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/colinhacks" + } + }, + "node_modules/zod-validation-error": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/zod-validation-error/-/zod-validation-error-4.0.2.tgz", + "integrity": "sha512-Q6/nZLe6jxuU80qb/4uJ4t5v2VEZ44lzQjPDhYJNztRQ4wyWc6VF3D3Kb/fAuPetZQnhS3hnajCf9CsWesghLQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18.0.0" + }, + "peerDependencies": { + "zod": "^3.25.0 || ^4.0.0" + } + } + } +} diff --git a/webseite-react-php-jwt/react-app/package.json b/webseite-react-php-jwt/react-app/package.json new file mode 100644 index 0000000..3dcbf30 --- /dev/null +++ b/webseite-react-php-jwt/react-app/package.json @@ -0,0 +1,34 @@ +{ + "name": "react-app", + "private": true, + "version": "0.0.1", + "type": "module", + "scripts": { + "dev": "vite", + "build": "vite build", + "lint": "eslint .", + "preview": "vite preview" + }, + "dependencies": { + "@splidejs/react-splide": "^0.7.12", + "axios": "^1.20.0", + "bootstrap": "^5.3.8", + "react": "^19.2.8", + "react-dom": "^19.2.8", + "react-icons": "^5.7.0", + "react-router-dom": "^7.18.3", + "uuid": "^14.0.2" + }, + "devDependencies": { + "@eslint/js": "^10.0.1", + "@types/react": "^19.2.18", + "@types/react-dom": "^19.2.5", + "@vitejs/plugin-react": "^6.1.1", + "eslint": "^10.9.1", + "eslint-plugin-react-hooks": "^7.1.1", + "eslint-plugin-react-refresh": "^0.5.5", + "globals": "^17.11.0", + "sass": "^1.103.1", + "vite": "^8.2.2" + } +} diff --git a/webseite-react-php-jwt/react-app/public/data/nerdshop-products.json b/webseite-react-php-jwt/react-app/public/data/nerdshop-products.json new file mode 100644 index 0000000..f8db02d --- /dev/null +++ b/webseite-react-php-jwt/react-app/public/data/nerdshop-products.json @@ -0,0 +1,119 @@ +[ + { + "_id": "675bee96bb39023b77e6cd92", + "title": "Smart Coffee Mug with LCD Level Indicator", + "sku": "MUG0007", + "stock": 25, + "price": 49.99, + "description": "Know exactly how much coffee you have left with this LCD-equipped mug.", + "tagline": "Never face an empty mug again." + }, + { + "_id": "675bee96bb39023b77e6cd93", + "title": "Bluetooth Coffee Mug with Fortune Telling Scanner", + "sku": "MUG0013", + "stock": 15, + "price": 99.99, + "description": "Get your daily fortune with every sip using this Bluetooth-connected mug.", + "tagline": "Coffee reading, made smart." + }, + { + "_id": "675bee96bb39023b77e6cd94", + "title": "South Pole Tested Pre-Warmed Ink Pen", + "sku": "OFF3145", + "stock": 34, + "price": 29.95, + "description": "Write smoothly even in the coldest conditions with this pre-warmed ink pen.", + "tagline": "The pen that conquers the cold." + }, + { + "_id": "675bee96bb39023b77e6cd95", + "title": "Ambidextrous Computer Mouse", + "sku": "COM1001", + "stock": 50, + "price": 19.9, + "description": "Finally, a mouse designed for both left and right-handed users.", + "tagline": "End the left-right struggle." + }, + { + "_id": "675bee96bb39023b77e6cd96", + "title": "Easter Egg Themed Webcam", + "sku": "COM0404", + "stock": 8, + "price": 14.99, + "description": "Add some festive flair to your video calls with this Easter egg webcam.", + "tagline": "Happy Easter, every day." + }, + { + "_id": "675bee96bb39023b77e6cd97", + "title": "Vulcan Language vi Cheatsheet", + "sku": "COM0001", + "stock": 6, + "price": 9.9, + "description": "Master the Vulcan language and vi editor simultaneously with this handy cheatsheet.", + "tagline": "Learn vi and Vulcan, live long and prosper." + }, + { + "_id": "675bee96bb39023b77e6cd98", + "title": "Klingon Language emacs Cheatsheet", + "sku": "COM1536", + "stock": 33, + "price": 9.9, + "description": "Conquer the Klingon language and emacs with this comprehensive cheatsheet.", + "tagline": "Learn emacs and Klingon, qapla'!" + }, + { + "_id": "675bee96bb39023b77e6cda0", + "title": "Self-Folding Laundry Basket", + "sku": "HME0023", + "stock": 15, + "price": 79.99, + "description": "Say goodbye to laundry clutter with this self-folding basket.", + "tagline": "Laundry day just got easier." + }, + { + "_id": "675bee96bb39023b77e6cda1", + "title": "Noise-Cancelling Headphones for Cats", + "sku": "PET0112", + "stock": 39, + "price": 39.95, + "description": "Give your cat the gift of silence with these noise-canceling headphones.", + "tagline": "Purrfect tranquility for your feline friend." + }, + { + "_id": "675bee96bb39023b77e6cda2", + "title": "Glow-in-the-Dark Toilet Paper", + "sku": "HME0221", + "stock": 65, + "price": 12.5, + "description": "Navigate your midnight bathroom trips with ease using this glow-in-the-dark toilet paper.", + "tagline": "A guiding light in the darkness." + }, + { + "_id": "675bee96bb39023b77e6cda3", + "title": "Automatic Plant Waterer with Compliment Dispenser", + "sku": "GRD0334", + "stock": 17, + "price": 69.99, + "description": "Keep your plants happy and hydrated with automatic watering and daily compliments.", + "tagline": "Nurture your plants, boost their self-esteem." + }, + { + "_id": "675bee96bb39023b77e6cda4", + "title": "Self-Stirring Cereal Bowl", + "sku": "KIT0445", + "stock": 55, + "price": 24.95, + "description": "Enjoy perfectly crunchy cereal every time with this self-stirring bowl.", + "tagline": "No more soggy surprises." + }, + { + "_id": "675bee96bb39023b77e6cda5", + "title": "Polygon Planet Lamp", + "sku": "LMP0556", + "stock": 4, + "price": 39.9, + "description": "Transform your space with the enchanting glow of a planetarium-inspired lamp.", + "tagline": "Bring the cosmos into your home." + } +] diff --git a/webseite-react-php-jwt/react-app/public/fonts/amatic-sc-v28-latin/amatic-sc-v28-latin-700.woff2 b/webseite-react-php-jwt/react-app/public/fonts/amatic-sc-v28-latin/amatic-sc-v28-latin-700.woff2 new file mode 100644 index 0000000..05ba3cf Binary files /dev/null and b/webseite-react-php-jwt/react-app/public/fonts/amatic-sc-v28-latin/amatic-sc-v28-latin-700.woff2 differ diff --git a/webseite-react-php-jwt/react-app/public/fonts/amatic-sc-v28-latin/amatic-sc-v28-latin-regular.woff2 b/webseite-react-php-jwt/react-app/public/fonts/amatic-sc-v28-latin/amatic-sc-v28-latin-regular.woff2 new file mode 100644 index 0000000..804b1aa Binary files /dev/null and b/webseite-react-php-jwt/react-app/public/fonts/amatic-sc-v28-latin/amatic-sc-v28-latin-regular.woff2 differ diff --git a/webseite-react-php-jwt/react-app/public/fonts/merriweather-v33-latin/merriweather-v33-latin-300.woff2 b/webseite-react-php-jwt/react-app/public/fonts/merriweather-v33-latin/merriweather-v33-latin-300.woff2 new file mode 100644 index 0000000..cafa2fd Binary files /dev/null and b/webseite-react-php-jwt/react-app/public/fonts/merriweather-v33-latin/merriweather-v33-latin-300.woff2 differ diff --git a/webseite-react-php-jwt/react-app/public/fonts/merriweather-v33-latin/merriweather-v33-latin-300italic.woff2 b/webseite-react-php-jwt/react-app/public/fonts/merriweather-v33-latin/merriweather-v33-latin-300italic.woff2 new file mode 100644 index 0000000..5d870b3 Binary files /dev/null and b/webseite-react-php-jwt/react-app/public/fonts/merriweather-v33-latin/merriweather-v33-latin-300italic.woff2 differ diff --git a/webseite-react-php-jwt/react-app/public/fonts/merriweather-v33-latin/merriweather-v33-latin-500.woff2 b/webseite-react-php-jwt/react-app/public/fonts/merriweather-v33-latin/merriweather-v33-latin-500.woff2 new file mode 100644 index 0000000..eff5a1c Binary files /dev/null and b/webseite-react-php-jwt/react-app/public/fonts/merriweather-v33-latin/merriweather-v33-latin-500.woff2 differ diff --git a/webseite-react-php-jwt/react-app/public/fonts/merriweather-v33-latin/merriweather-v33-latin-500italic.woff2 b/webseite-react-php-jwt/react-app/public/fonts/merriweather-v33-latin/merriweather-v33-latin-500italic.woff2 new file mode 100644 index 0000000..277cfa8 Binary files /dev/null and b/webseite-react-php-jwt/react-app/public/fonts/merriweather-v33-latin/merriweather-v33-latin-500italic.woff2 differ diff --git a/webseite-react-php-jwt/react-app/public/fonts/merriweather-v33-latin/merriweather-v33-latin-600.woff2 b/webseite-react-php-jwt/react-app/public/fonts/merriweather-v33-latin/merriweather-v33-latin-600.woff2 new file mode 100644 index 0000000..c366145 Binary files /dev/null and b/webseite-react-php-jwt/react-app/public/fonts/merriweather-v33-latin/merriweather-v33-latin-600.woff2 differ diff --git a/webseite-react-php-jwt/react-app/public/fonts/merriweather-v33-latin/merriweather-v33-latin-600italic.woff2 b/webseite-react-php-jwt/react-app/public/fonts/merriweather-v33-latin/merriweather-v33-latin-600italic.woff2 new file mode 100644 index 0000000..9e91423 Binary files /dev/null and b/webseite-react-php-jwt/react-app/public/fonts/merriweather-v33-latin/merriweather-v33-latin-600italic.woff2 differ diff --git a/webseite-react-php-jwt/react-app/public/fonts/merriweather-v33-latin/merriweather-v33-latin-700.woff2 b/webseite-react-php-jwt/react-app/public/fonts/merriweather-v33-latin/merriweather-v33-latin-700.woff2 new file mode 100644 index 0000000..1c1896b Binary files /dev/null and b/webseite-react-php-jwt/react-app/public/fonts/merriweather-v33-latin/merriweather-v33-latin-700.woff2 differ diff --git a/webseite-react-php-jwt/react-app/public/fonts/merriweather-v33-latin/merriweather-v33-latin-700italic.woff2 b/webseite-react-php-jwt/react-app/public/fonts/merriweather-v33-latin/merriweather-v33-latin-700italic.woff2 new file mode 100644 index 0000000..6fe153e Binary files /dev/null and b/webseite-react-php-jwt/react-app/public/fonts/merriweather-v33-latin/merriweather-v33-latin-700italic.woff2 differ diff --git a/webseite-react-php-jwt/react-app/public/fonts/merriweather-v33-latin/merriweather-v33-latin-800.woff2 b/webseite-react-php-jwt/react-app/public/fonts/merriweather-v33-latin/merriweather-v33-latin-800.woff2 new file mode 100644 index 0000000..275090e Binary files /dev/null and b/webseite-react-php-jwt/react-app/public/fonts/merriweather-v33-latin/merriweather-v33-latin-800.woff2 differ diff --git a/webseite-react-php-jwt/react-app/public/fonts/merriweather-v33-latin/merriweather-v33-latin-800italic.woff2 b/webseite-react-php-jwt/react-app/public/fonts/merriweather-v33-latin/merriweather-v33-latin-800italic.woff2 new file mode 100644 index 0000000..6729bf3 Binary files /dev/null and b/webseite-react-php-jwt/react-app/public/fonts/merriweather-v33-latin/merriweather-v33-latin-800italic.woff2 differ diff --git a/webseite-react-php-jwt/react-app/public/fonts/merriweather-v33-latin/merriweather-v33-latin-900.woff2 b/webseite-react-php-jwt/react-app/public/fonts/merriweather-v33-latin/merriweather-v33-latin-900.woff2 new file mode 100644 index 0000000..b3fdf21 Binary files /dev/null and b/webseite-react-php-jwt/react-app/public/fonts/merriweather-v33-latin/merriweather-v33-latin-900.woff2 differ diff --git a/webseite-react-php-jwt/react-app/public/fonts/merriweather-v33-latin/merriweather-v33-latin-900italic.woff2 b/webseite-react-php-jwt/react-app/public/fonts/merriweather-v33-latin/merriweather-v33-latin-900italic.woff2 new file mode 100644 index 0000000..f4e2d9d Binary files /dev/null and b/webseite-react-php-jwt/react-app/public/fonts/merriweather-v33-latin/merriweather-v33-latin-900italic.woff2 differ diff --git a/webseite-react-php-jwt/react-app/public/fonts/merriweather-v33-latin/merriweather-v33-latin-italic.woff2 b/webseite-react-php-jwt/react-app/public/fonts/merriweather-v33-latin/merriweather-v33-latin-italic.woff2 new file mode 100644 index 0000000..fdb5252 Binary files /dev/null and b/webseite-react-php-jwt/react-app/public/fonts/merriweather-v33-latin/merriweather-v33-latin-italic.woff2 differ diff --git a/webseite-react-php-jwt/react-app/public/fonts/merriweather-v33-latin/merriweather-v33-latin-regular.woff2 b/webseite-react-php-jwt/react-app/public/fonts/merriweather-v33-latin/merriweather-v33-latin-regular.woff2 new file mode 100644 index 0000000..824753f Binary files /dev/null and b/webseite-react-php-jwt/react-app/public/fonts/merriweather-v33-latin/merriweather-v33-latin-regular.woff2 differ diff --git a/webseite-react-php-jwt/react-app/public/fonts/open-sans-v40-latin/open-sans-v40-latin-300.woff2 b/webseite-react-php-jwt/react-app/public/fonts/open-sans-v40-latin/open-sans-v40-latin-300.woff2 new file mode 100644 index 0000000..e000fcb Binary files /dev/null and b/webseite-react-php-jwt/react-app/public/fonts/open-sans-v40-latin/open-sans-v40-latin-300.woff2 differ diff --git a/webseite-react-php-jwt/react-app/public/fonts/open-sans-v40-latin/open-sans-v40-latin-300italic.woff2 b/webseite-react-php-jwt/react-app/public/fonts/open-sans-v40-latin/open-sans-v40-latin-300italic.woff2 new file mode 100644 index 0000000..5167821 Binary files /dev/null and b/webseite-react-php-jwt/react-app/public/fonts/open-sans-v40-latin/open-sans-v40-latin-300italic.woff2 differ diff --git a/webseite-react-php-jwt/react-app/public/fonts/open-sans-v40-latin/open-sans-v40-latin-500.woff2 b/webseite-react-php-jwt/react-app/public/fonts/open-sans-v40-latin/open-sans-v40-latin-500.woff2 new file mode 100644 index 0000000..a35be30 Binary files /dev/null and b/webseite-react-php-jwt/react-app/public/fonts/open-sans-v40-latin/open-sans-v40-latin-500.woff2 differ diff --git a/webseite-react-php-jwt/react-app/public/fonts/open-sans-v40-latin/open-sans-v40-latin-500italic.woff2 b/webseite-react-php-jwt/react-app/public/fonts/open-sans-v40-latin/open-sans-v40-latin-500italic.woff2 new file mode 100644 index 0000000..039e72f Binary files /dev/null and b/webseite-react-php-jwt/react-app/public/fonts/open-sans-v40-latin/open-sans-v40-latin-500italic.woff2 differ diff --git a/webseite-react-php-jwt/react-app/public/fonts/open-sans-v40-latin/open-sans-v40-latin-600.woff2 b/webseite-react-php-jwt/react-app/public/fonts/open-sans-v40-latin/open-sans-v40-latin-600.woff2 new file mode 100644 index 0000000..f67ef00 Binary files /dev/null and b/webseite-react-php-jwt/react-app/public/fonts/open-sans-v40-latin/open-sans-v40-latin-600.woff2 differ diff --git a/webseite-react-php-jwt/react-app/public/fonts/open-sans-v40-latin/open-sans-v40-latin-600italic.woff2 b/webseite-react-php-jwt/react-app/public/fonts/open-sans-v40-latin/open-sans-v40-latin-600italic.woff2 new file mode 100644 index 0000000..bd6a4d1 Binary files /dev/null and b/webseite-react-php-jwt/react-app/public/fonts/open-sans-v40-latin/open-sans-v40-latin-600italic.woff2 differ diff --git a/webseite-react-php-jwt/react-app/public/fonts/open-sans-v40-latin/open-sans-v40-latin-700.woff2 b/webseite-react-php-jwt/react-app/public/fonts/open-sans-v40-latin/open-sans-v40-latin-700.woff2 new file mode 100644 index 0000000..7e3b8b0 Binary files /dev/null and b/webseite-react-php-jwt/react-app/public/fonts/open-sans-v40-latin/open-sans-v40-latin-700.woff2 differ diff --git a/webseite-react-php-jwt/react-app/public/fonts/open-sans-v40-latin/open-sans-v40-latin-700italic.woff2 b/webseite-react-php-jwt/react-app/public/fonts/open-sans-v40-latin/open-sans-v40-latin-700italic.woff2 new file mode 100644 index 0000000..2c96334 Binary files /dev/null and b/webseite-react-php-jwt/react-app/public/fonts/open-sans-v40-latin/open-sans-v40-latin-700italic.woff2 differ diff --git a/webseite-react-php-jwt/react-app/public/fonts/open-sans-v40-latin/open-sans-v40-latin-800.woff2 b/webseite-react-php-jwt/react-app/public/fonts/open-sans-v40-latin/open-sans-v40-latin-800.woff2 new file mode 100644 index 0000000..cf65114 Binary files /dev/null and b/webseite-react-php-jwt/react-app/public/fonts/open-sans-v40-latin/open-sans-v40-latin-800.woff2 differ diff --git a/webseite-react-php-jwt/react-app/public/fonts/open-sans-v40-latin/open-sans-v40-latin-800italic.woff2 b/webseite-react-php-jwt/react-app/public/fonts/open-sans-v40-latin/open-sans-v40-latin-800italic.woff2 new file mode 100644 index 0000000..17bc073 Binary files /dev/null and b/webseite-react-php-jwt/react-app/public/fonts/open-sans-v40-latin/open-sans-v40-latin-800italic.woff2 differ diff --git a/webseite-react-php-jwt/react-app/public/fonts/open-sans-v40-latin/open-sans-v40-latin-italic.woff2 b/webseite-react-php-jwt/react-app/public/fonts/open-sans-v40-latin/open-sans-v40-latin-italic.woff2 new file mode 100644 index 0000000..84ee197 Binary files /dev/null and b/webseite-react-php-jwt/react-app/public/fonts/open-sans-v40-latin/open-sans-v40-latin-italic.woff2 differ diff --git a/webseite-react-php-jwt/react-app/public/fonts/open-sans-v40-latin/open-sans-v40-latin-regular.woff2 b/webseite-react-php-jwt/react-app/public/fonts/open-sans-v40-latin/open-sans-v40-latin-regular.woff2 new file mode 100644 index 0000000..eaae942 Binary files /dev/null and b/webseite-react-php-jwt/react-app/public/fonts/open-sans-v40-latin/open-sans-v40-latin-regular.woff2 differ diff --git a/webseite-react-php-jwt/react-app/public/fonts/source-code-pro-v31-latin/source-code-pro-v31-latin-200.woff2 b/webseite-react-php-jwt/react-app/public/fonts/source-code-pro-v31-latin/source-code-pro-v31-latin-200.woff2 new file mode 100644 index 0000000..c29a4c8 Binary files /dev/null and b/webseite-react-php-jwt/react-app/public/fonts/source-code-pro-v31-latin/source-code-pro-v31-latin-200.woff2 differ diff --git a/webseite-react-php-jwt/react-app/public/fonts/source-code-pro-v31-latin/source-code-pro-v31-latin-200italic.woff2 b/webseite-react-php-jwt/react-app/public/fonts/source-code-pro-v31-latin/source-code-pro-v31-latin-200italic.woff2 new file mode 100644 index 0000000..7840ccb Binary files /dev/null and b/webseite-react-php-jwt/react-app/public/fonts/source-code-pro-v31-latin/source-code-pro-v31-latin-200italic.woff2 differ diff --git a/webseite-react-php-jwt/react-app/public/fonts/source-code-pro-v31-latin/source-code-pro-v31-latin-300.woff2 b/webseite-react-php-jwt/react-app/public/fonts/source-code-pro-v31-latin/source-code-pro-v31-latin-300.woff2 new file mode 100644 index 0000000..9ac7d7b Binary files /dev/null and b/webseite-react-php-jwt/react-app/public/fonts/source-code-pro-v31-latin/source-code-pro-v31-latin-300.woff2 differ diff --git a/webseite-react-php-jwt/react-app/public/fonts/source-code-pro-v31-latin/source-code-pro-v31-latin-300italic.woff2 b/webseite-react-php-jwt/react-app/public/fonts/source-code-pro-v31-latin/source-code-pro-v31-latin-300italic.woff2 new file mode 100644 index 0000000..45158af Binary files /dev/null and b/webseite-react-php-jwt/react-app/public/fonts/source-code-pro-v31-latin/source-code-pro-v31-latin-300italic.woff2 differ diff --git a/webseite-react-php-jwt/react-app/public/fonts/source-code-pro-v31-latin/source-code-pro-v31-latin-500.woff2 b/webseite-react-php-jwt/react-app/public/fonts/source-code-pro-v31-latin/source-code-pro-v31-latin-500.woff2 new file mode 100644 index 0000000..2f6e1f1 Binary files /dev/null and b/webseite-react-php-jwt/react-app/public/fonts/source-code-pro-v31-latin/source-code-pro-v31-latin-500.woff2 differ diff --git a/webseite-react-php-jwt/react-app/public/fonts/source-code-pro-v31-latin/source-code-pro-v31-latin-500italic.woff2 b/webseite-react-php-jwt/react-app/public/fonts/source-code-pro-v31-latin/source-code-pro-v31-latin-500italic.woff2 new file mode 100644 index 0000000..64d1b85 Binary files /dev/null and b/webseite-react-php-jwt/react-app/public/fonts/source-code-pro-v31-latin/source-code-pro-v31-latin-500italic.woff2 differ diff --git a/webseite-react-php-jwt/react-app/public/fonts/source-code-pro-v31-latin/source-code-pro-v31-latin-600.woff2 b/webseite-react-php-jwt/react-app/public/fonts/source-code-pro-v31-latin/source-code-pro-v31-latin-600.woff2 new file mode 100644 index 0000000..aef4852 Binary files /dev/null and b/webseite-react-php-jwt/react-app/public/fonts/source-code-pro-v31-latin/source-code-pro-v31-latin-600.woff2 differ diff --git a/webseite-react-php-jwt/react-app/public/fonts/source-code-pro-v31-latin/source-code-pro-v31-latin-600italic.woff2 b/webseite-react-php-jwt/react-app/public/fonts/source-code-pro-v31-latin/source-code-pro-v31-latin-600italic.woff2 new file mode 100644 index 0000000..0bf6b85 Binary files /dev/null and b/webseite-react-php-jwt/react-app/public/fonts/source-code-pro-v31-latin/source-code-pro-v31-latin-600italic.woff2 differ diff --git a/webseite-react-php-jwt/react-app/public/fonts/source-code-pro-v31-latin/source-code-pro-v31-latin-700.woff2 b/webseite-react-php-jwt/react-app/public/fonts/source-code-pro-v31-latin/source-code-pro-v31-latin-700.woff2 new file mode 100644 index 0000000..9c33eed Binary files /dev/null and b/webseite-react-php-jwt/react-app/public/fonts/source-code-pro-v31-latin/source-code-pro-v31-latin-700.woff2 differ diff --git a/webseite-react-php-jwt/react-app/public/fonts/source-code-pro-v31-latin/source-code-pro-v31-latin-700italic.woff2 b/webseite-react-php-jwt/react-app/public/fonts/source-code-pro-v31-latin/source-code-pro-v31-latin-700italic.woff2 new file mode 100644 index 0000000..ef7994f Binary files /dev/null and b/webseite-react-php-jwt/react-app/public/fonts/source-code-pro-v31-latin/source-code-pro-v31-latin-700italic.woff2 differ diff --git a/webseite-react-php-jwt/react-app/public/fonts/source-code-pro-v31-latin/source-code-pro-v31-latin-800.woff2 b/webseite-react-php-jwt/react-app/public/fonts/source-code-pro-v31-latin/source-code-pro-v31-latin-800.woff2 new file mode 100644 index 0000000..00041b2 Binary files /dev/null and b/webseite-react-php-jwt/react-app/public/fonts/source-code-pro-v31-latin/source-code-pro-v31-latin-800.woff2 differ diff --git a/webseite-react-php-jwt/react-app/public/fonts/source-code-pro-v31-latin/source-code-pro-v31-latin-800italic.woff2 b/webseite-react-php-jwt/react-app/public/fonts/source-code-pro-v31-latin/source-code-pro-v31-latin-800italic.woff2 new file mode 100644 index 0000000..b1a1376 Binary files /dev/null and b/webseite-react-php-jwt/react-app/public/fonts/source-code-pro-v31-latin/source-code-pro-v31-latin-800italic.woff2 differ diff --git a/webseite-react-php-jwt/react-app/public/fonts/source-code-pro-v31-latin/source-code-pro-v31-latin-900.woff2 b/webseite-react-php-jwt/react-app/public/fonts/source-code-pro-v31-latin/source-code-pro-v31-latin-900.woff2 new file mode 100644 index 0000000..bec6da8 Binary files /dev/null and b/webseite-react-php-jwt/react-app/public/fonts/source-code-pro-v31-latin/source-code-pro-v31-latin-900.woff2 differ diff --git a/webseite-react-php-jwt/react-app/public/fonts/source-code-pro-v31-latin/source-code-pro-v31-latin-900italic.woff2 b/webseite-react-php-jwt/react-app/public/fonts/source-code-pro-v31-latin/source-code-pro-v31-latin-900italic.woff2 new file mode 100644 index 0000000..b1851d5 Binary files /dev/null and b/webseite-react-php-jwt/react-app/public/fonts/source-code-pro-v31-latin/source-code-pro-v31-latin-900italic.woff2 differ diff --git a/webseite-react-php-jwt/react-app/public/fonts/source-code-pro-v31-latin/source-code-pro-v31-latin-italic.woff2 b/webseite-react-php-jwt/react-app/public/fonts/source-code-pro-v31-latin/source-code-pro-v31-latin-italic.woff2 new file mode 100644 index 0000000..5c81ab3 Binary files /dev/null and b/webseite-react-php-jwt/react-app/public/fonts/source-code-pro-v31-latin/source-code-pro-v31-latin-italic.woff2 differ diff --git a/webseite-react-php-jwt/react-app/public/fonts/source-code-pro-v31-latin/source-code-pro-v31-latin-regular.woff2 b/webseite-react-php-jwt/react-app/public/fonts/source-code-pro-v31-latin/source-code-pro-v31-latin-regular.woff2 new file mode 100644 index 0000000..d1f2d84 Binary files /dev/null and b/webseite-react-php-jwt/react-app/public/fonts/source-code-pro-v31-latin/source-code-pro-v31-latin-regular.woff2 differ diff --git a/webseite-react-php-jwt/react-app/public/img/header-bg.jpg b/webseite-react-php-jwt/react-app/public/img/header-bg.jpg new file mode 100644 index 0000000..7113677 Binary files /dev/null and b/webseite-react-php-jwt/react-app/public/img/header-bg.jpg differ diff --git a/webseite-react-php-jwt/react-app/public/img/jokes-bg.jpg b/webseite-react-php-jwt/react-app/public/img/jokes-bg.jpg new file mode 100644 index 0000000..594f316 Binary files /dev/null and b/webseite-react-php-jwt/react-app/public/img/jokes-bg.jpg differ diff --git a/webseite-react-php-jwt/react-app/public/img/logo-react.min.svg b/webseite-react-php-jwt/react-app/public/img/logo-react.min.svg new file mode 100644 index 0000000..5fb5f94 --- /dev/null +++ b/webseite-react-php-jwt/react-app/public/img/logo-react.min.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/webseite-react-php-jwt/react-app/public/img/logo-react.svg b/webseite-react-php-jwt/react-app/public/img/logo-react.svg new file mode 100644 index 0000000..08c4248 --- /dev/null +++ b/webseite-react-php-jwt/react-app/public/img/logo-react.svg @@ -0,0 +1,1923 @@ + + \ No newline at end of file diff --git a/webseite-react-php-jwt/react-app/public/img/slides/slide-01.jpg b/webseite-react-php-jwt/react-app/public/img/slides/slide-01.jpg new file mode 100644 index 0000000..d98bbcc Binary files /dev/null and b/webseite-react-php-jwt/react-app/public/img/slides/slide-01.jpg differ diff --git a/webseite-react-php-jwt/react-app/public/img/slides/slide-02.jpg b/webseite-react-php-jwt/react-app/public/img/slides/slide-02.jpg new file mode 100644 index 0000000..2b2d966 Binary files /dev/null and b/webseite-react-php-jwt/react-app/public/img/slides/slide-02.jpg differ diff --git a/webseite-react-php-jwt/react-app/public/img/slides/slide-03.jpg b/webseite-react-php-jwt/react-app/public/img/slides/slide-03.jpg new file mode 100644 index 0000000..70509f3 Binary files /dev/null and b/webseite-react-php-jwt/react-app/public/img/slides/slide-03.jpg differ diff --git a/webseite-react-php-jwt/react-app/public/vite.svg b/webseite-react-php-jwt/react-app/public/vite.svg new file mode 100644 index 0000000..e7b8dfb --- /dev/null +++ b/webseite-react-php-jwt/react-app/public/vite.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/webseite-react-php-jwt/react-app/src/App.jsx b/webseite-react-php-jwt/react-app/src/App.jsx new file mode 100644 index 0000000..bf14ef0 --- /dev/null +++ b/webseite-react-php-jwt/react-app/src/App.jsx @@ -0,0 +1,20 @@ +import FooterMain from './components/footers/FooterMain'; +import HeaderMain from './components/headers/HeaderMain'; +import NavMain from './components/navs/NavMain'; +import Router from './routes/Router'; +import { AuthProvider } from './stores/auth'; + +function App() { + return ( + + + +
+ +
+ +
+ ); +} + +export default App; diff --git a/webseite-react-php-jwt/react-app/src/assets/img/logo-js.min.svg b/webseite-react-php-jwt/react-app/src/assets/img/logo-js.min.svg new file mode 100644 index 0000000..97339d6 --- /dev/null +++ b/webseite-react-php-jwt/react-app/src/assets/img/logo-js.min.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/webseite-react-php-jwt/react-app/src/assets/react.svg b/webseite-react-php-jwt/react-app/src/assets/react.svg new file mode 100644 index 0000000..6c87de9 --- /dev/null +++ b/webseite-react-php-jwt/react-app/src/assets/react.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/webseite-react-php-jwt/react-app/src/components/footers/FooterMain.jsx b/webseite-react-php-jwt/react-app/src/components/footers/FooterMain.jsx new file mode 100644 index 0000000..da00d18 --- /dev/null +++ b/webseite-react-php-jwt/react-app/src/components/footers/FooterMain.jsx @@ -0,0 +1,48 @@ +import NavSocial from '../navs/NavSocial'; + +const FooterMain = (props) => { + // const { } = props; + + return ( + + ); +}; +export default FooterMain; diff --git a/webseite-react-php-jwt/react-app/src/components/headers/HeaderMain.jsx b/webseite-react-php-jwt/react-app/src/components/headers/HeaderMain.jsx new file mode 100644 index 0000000..2cfd418 --- /dev/null +++ b/webseite-react-php-jwt/react-app/src/components/headers/HeaderMain.jsx @@ -0,0 +1,21 @@ +import LogoMain from '../logos/LogoMain'; +import SliderSplide from '../sliders/SliderSplide'; + +const HeaderMain = () => { + const images = [ + '/img/slides/slide-01.jpg', // + '/img/slides/slide-02.jpg', + '/img/slides/slide-03.jpg', + ]; + + return ( +
+ +
+ +
+
+ ); +}; + +export default HeaderMain; diff --git a/webseite-react-php-jwt/react-app/src/components/icons/Logo.jsx b/webseite-react-php-jwt/react-app/src/components/icons/Logo.jsx new file mode 100644 index 0000000..df70261 --- /dev/null +++ b/webseite-react-php-jwt/react-app/src/components/icons/Logo.jsx @@ -0,0 +1,62 @@ +const Logo = (props) => { + // const { } = props; + + return ( + + + + + + + + + + + + + + + + + + + + + + + + + ); +}; +export default Logo; diff --git a/webseite-react-php-jwt/react-app/src/components/inputs/InputAmount.jsx b/webseite-react-php-jwt/react-app/src/components/inputs/InputAmount.jsx new file mode 100644 index 0000000..b7dcb73 --- /dev/null +++ b/webseite-react-php-jwt/react-app/src/components/inputs/InputAmount.jsx @@ -0,0 +1,57 @@ +// import { useState } from 'react'; +import { FaMinus, FaPlus } from 'react-icons/fa6'; + +const InputAmount = (props) => { + const { min = 0, max = 100, amount = 0 } = props; + // const [amount, setAmount] = useState(props.amount || 0); + + const handleChange = (e) => { + const inputValue = e.target.value; + const numericRegExp = /^-?\d*$/; // regular expression for numbers (including optional minus sign) + + if (numericRegExp.test(inputValue)) { + // setAmount(inputValue); + props.onHandleAmount(inputValue); + } + }; + + const handleClickIncrement = () => { + if (amount < max) { + // setAmount((amount) => amount + 1); + props.onHandleAmount(amount + 1); + } + }; + + const handleClickDecrement = () => { + if (amount > min) { + // setAmount((amount) => amount - 1); + props.onHandleAmount(amount - 1); + } + }; + + return ( +
+
+ + + + + + + +
+
+ ); +}; + +export default InputAmount; diff --git a/webseite-react-php-jwt/react-app/src/components/inputs/InputPrice.jsx b/webseite-react-php-jwt/react-app/src/components/inputs/InputPrice.jsx new file mode 100644 index 0000000..765cd16 --- /dev/null +++ b/webseite-react-php-jwt/react-app/src/components/inputs/InputPrice.jsx @@ -0,0 +1,57 @@ +// import { useState } from 'react'; + +const isValidPrice = (value) => { + // regular expression for price (up to 2 decimal places) + const regex = new RegExp(/^\d+(\.\d{0,2})?$/); + return regex.test(value); +}; + +const InputPrice = (props) => { + const { currency = '$', price = 0 } = props; + + // const [price, setPrice] = useState(parseFloat(props.price) || 0); + + const handleChange = (e) => { + const inputValue = parseFloat(e.target.value); + + // setPrice(inputValue); + props.onHandlePrice(inputValue); + }; + const handleBlur = (e) => { + const inputValue = e.target.value; + + if (!isValidPrice(inputValue)) { + // setPrice(0); + props.onHandlePrice(0); + } + }; + + const renderCurrency = () => { + if (currency === '$') { + return
{currency}
; + } else if (currency === '€' || currency === '¥') { + return
{currency}
; + } else { + return null; // or throw an error + } + }; + + return ( +
+
+ {currency === '$' && renderCurrency()} + + {(currency === '€' || currency === '¥') && renderCurrency()} +
+
+ ); +}; + +export default InputPrice; diff --git a/webseite-react-php-jwt/react-app/src/components/logos/LogoMain.jsx b/webseite-react-php-jwt/react-app/src/components/logos/LogoMain.jsx new file mode 100644 index 0000000..4f4c602 --- /dev/null +++ b/webseite-react-php-jwt/react-app/src/components/logos/LogoMain.jsx @@ -0,0 +1,14 @@ +// import Logo from '../../assets/img/logo-js.min.svg'; +import Logo from '../icons/Logo'; + +const LogoMain = (props) => { + // const { } = props; + + return ( +
+ {/* React */} + +
+ ); +}; +export default LogoMain; diff --git a/webseite-react-php-jwt/react-app/src/components/navs/NavMain.jsx b/webseite-react-php-jwt/react-app/src/components/navs/NavMain.jsx new file mode 100644 index 0000000..16fcfbd --- /dev/null +++ b/webseite-react-php-jwt/react-app/src/components/navs/NavMain.jsx @@ -0,0 +1,135 @@ +import { useState } from 'react'; +import { NavLink } from 'react-router-dom'; +import { useAuthActions, useAuthState } from '../../stores/auth'; + +const NavMain = () => { + const { user, loading, error } = useAuthState(); + const { login, logout } = useAuthActions(); + const [username, setUsername] = useState(''); + const [password, setPassword] = useState(''); + + const handleLogin = async (event) => { + event.preventDefault(); + + try { + await login(username, password); + setUsername(''); + setPassword(''); + } catch { + // Fehler kommt aus dem Auth-Store + } + }; + + return ( + + ); +}; + +export default NavMain; diff --git a/webseite-react-php-jwt/react-app/src/components/navs/NavSocial.jsx b/webseite-react-php-jwt/react-app/src/components/navs/NavSocial.jsx new file mode 100644 index 0000000..616cdaf --- /dev/null +++ b/webseite-react-php-jwt/react-app/src/components/navs/NavSocial.jsx @@ -0,0 +1,35 @@ +import { FaYoutube, FaXTwitter, FaFacebookF, FaInstagram } from 'react-icons/fa6'; + +const NavSocial = () => { + return ( + + ); +}; +export default NavSocial; diff --git a/webseite-react-php-jwt/react-app/src/components/sliders/SliderSplide.jsx b/webseite-react-php-jwt/react-app/src/components/sliders/SliderSplide.jsx new file mode 100644 index 0000000..ac3eaa1 --- /dev/null +++ b/webseite-react-php-jwt/react-app/src/components/sliders/SliderSplide.jsx @@ -0,0 +1,32 @@ +import { Splide, SplideSlide } from '@splidejs/react-splide'; + +const SliderSplide = (props) => { + const { + images = [], + label = 'JS Header Slides', + options = { + rewind: true, + height: '100%', + autoplay: true, + speed: 800, + type: 'fade', + }, + } = props; + + return ( + <> + {images && images.length > 0 && ( +
+ + {images.map((image, idx) => ( + + + + ))} + +
+ )} + + ); +}; +export default SliderSplide; diff --git a/webseite-react-php-jwt/react-app/src/components/tables/TableProducts.jsx b/webseite-react-php-jwt/react-app/src/components/tables/TableProducts.jsx new file mode 100644 index 0000000..08ccd3a --- /dev/null +++ b/webseite-react-php-jwt/react-app/src/components/tables/TableProducts.jsx @@ -0,0 +1,70 @@ +import { useMemo } from 'react'; +import { ProductsProvider, useProductsActions, useProductsState } from '../../stores/products'; +import { useAuthState } from '../../stores/auth'; +import RowProduct from './content/RowProduct'; + +const TableProductsView = () => { + const { user } = useAuthState(); + const { items, loading, error } = useProductsState(); + const { loadProducts } = useProductsActions(); + + const totalPrice = useMemo(() => { + return items.reduce((sum, obj) => { + return sum + Number(obj.price) * Number(obj.stock); + }, 0); + }, [items]); + + if (loading && items.length === 0) { + return

Produkte werden geladen …

; + } + + return ( +
+
+ {error && ( +
+

{error}

+ +
+ )} + + + + + + + + + {user && } + + + + {items.length > 0 && + items.map((item) => ( + + ))} + + + + + + {user && + +
SKUStockTitlePriceTotalAdmin
Total:${totalPrice.toFixed(2)}} +
+
+
+ ); +}; + +const TableProducts = () => { + return ( + + + + ); +}; + +export default TableProducts; diff --git a/webseite-react-php-jwt/react-app/src/components/tables/TableUsers.jsx b/webseite-react-php-jwt/react-app/src/components/tables/TableUsers.jsx new file mode 100644 index 0000000..fed13fa --- /dev/null +++ b/webseite-react-php-jwt/react-app/src/components/tables/TableUsers.jsx @@ -0,0 +1,59 @@ +import { UsersProvider, useUsersActions, useUsersState } from '../../stores/users'; +import { useAuthState } from '../../stores/auth'; +import RowUser from './content/RowUser'; + +const TableUsersView = () => { + const { user } = useAuthState(); + const { items, loading, error } = useUsersState(); + const { loadUsers } = useUsersActions(); + + if (!user) { + return ( +
+ Bitte oben rechts einloggen, um die User-Tabelle zu sehen. +
+ ); + } + + if (loading && items.length === 0) { + return

Benutzer werden geladen …

; + } + + return ( +
+ {error && ( +
+

{error}

+ +
+ )} + + + + + + + + + + + {items.map((item) => ( + + ))} + +
IDUsernameE-MailAngelegt
+
+ ); +}; + +const TableUsers = () => { + return ( + + + + ); +}; + +export default TableUsers; diff --git a/webseite-react-php-jwt/react-app/src/components/tables/content/RowProduct.jsx b/webseite-react-php-jwt/react-app/src/components/tables/content/RowProduct.jsx new file mode 100644 index 0000000..5757ba2 --- /dev/null +++ b/webseite-react-php-jwt/react-app/src/components/tables/content/RowProduct.jsx @@ -0,0 +1,89 @@ +import { memo, useCallback, useState } from 'react'; +import { FaPen, FaTrash } from 'react-icons/fa6'; +import InputAmount from '../../inputs/InputAmount'; +import InputPrice from '../../inputs/InputPrice'; +import { useProductsActions } from '../../../stores/products'; + +const RowProduct = (props) => { + const { + _id, + title, + stock: amount = 0, + price = 0, + sku = '', + canManage = false, + } = props; + + const [isEditing, setIsEditing] = useState(false); + const { updateAmount, updatePrice, removeProduct } = useProductsActions(); + + const handleAmount = useCallback( + (value) => { + updateAmount(value, _id); + }, + [updateAmount, _id] + ); + + const handlePrice = useCallback( + (value) => { + updatePrice(value, _id); + }, + [updatePrice, _id] + ); + + const handleToggleEdit = useCallback(() => { + setIsEditing((current) => !current); + }, []); + + const handleRemove = useCallback(async () => { + const confirmed = window.confirm(`Produkt „${title}“ wirklich entfernen?`); + if (!confirmed) { + return; + } + + await removeProduct(_id); + }, [removeProduct, _id, title]); + + return ( + + {sku} + + {canManage && isEditing ? ( + + ) : ( + amount + )} + + {title} + + {canManage && isEditing ? ( + + ) : ( + Number(price).toFixed(2) + )} + + {(Number(amount) * Number(price)).toFixed(2)} + {canManage && ( + + + + + )} + + ); +}; + +export default memo(RowProduct); diff --git a/webseite-react-php-jwt/react-app/src/components/tables/content/RowUser.jsx b/webseite-react-php-jwt/react-app/src/components/tables/content/RowUser.jsx new file mode 100644 index 0000000..f01825a --- /dev/null +++ b/webseite-react-php-jwt/react-app/src/components/tables/content/RowUser.jsx @@ -0,0 +1,16 @@ +import { memo } from 'react'; + +const RowUser = (props) => { + const { id, username, email, created_at: createdAt = '' } = props; + + return ( + + {id} + {username} + {email} + {createdAt} + + ); +}; + +export default memo(RowUser); diff --git a/webseite-react-php-jwt/react-app/src/docs/PLAN.md b/webseite-react-php-jwt/react-app/src/docs/PLAN.md new file mode 100644 index 0000000..2a6277e --- /dev/null +++ b/webseite-react-php-jwt/react-app/src/docs/PLAN.md @@ -0,0 +1,84 @@ +# Projekt-Roadmap: Phasenplan + +Übersicht über die schrittweise Entwicklung von der lokalen Client-App bis zum modernen Next.js + Convex Stack deployed via Coolify. + +--- + +## Phasen-Übersicht + +| Phase | Fokus | Verzeichnis / Module | Stack | Hosting / Ziel | +| :---------- | :-------------------------- | :-------------------------------------------------- | :-------------------------------------------- | :------------------------------- | +| **Phase 1** | Client-Prototyp & State | `/react-app` | React + Vite, `useContext`, `useReducer` | Lokal | +| **Phase 2** | Classic Fullstack & MariaDB | `/react-server/frontend`
`/react-server/backend` | React SPA + Slim PHP (REST API, PDO, MariaDB) | Apache Webspace / Shared Hosting | +| **Phase 3** | Modern Fullstack Rewrite | `/next-app` | Next.js (App Router, RSC/SSG) + Convex BaaS | Lokal / Staging | +| **Phase 4** | Production Deployment | `/next-app` + Infrastruktur | Coolify (Self-hosted PaaS) + Convex Cloud | VPS / Production Server | + +--- + +## Phase 1: Client-Only SPA (`/react-app`) + +**Ziel:** Schnelles Prototyping der Benutzeroberfläche und Etablierung des lokalen UI-State-Managements ohne Backend-Abhängigkeit. + +- **Stack & Setup:** + - React + Vite + - Globaler State via `useContext` und `useReducer` (zur Vermeidung von Prop Drilling und State Uplifting) + - Mock-Daten / LocalStorage für initiale Datenhaltung +- **Meilensteine:** + - [ ] Grundlegendes Layout und Komponentenstruktur aufbauen + - [ ] State-Reducer für UI- und Dummy-Datenflüsse implementieren + - [ ] Service-Layer für Datenzugriffe vorbereiten (gekapselte Mock-APIs) + +--- + +## Phase 2: Klassisches Client-Server-Modell (`/react-server`) + +**Ziel:** Anbindung einer relationalen Datenbank über eine schlanke REST-API, lauffähig auf Standard-PHP/Apache-Webspaces ohne Node-Hosting-Zwang. + +- **Struktur:** + - `/react-server/frontend`: Die React-App aus Phase 1 (Vite Build / statisches Bundle in `dist/`) + - `/react-server/backend`: Schlanke PHP-Schnittstelle +- **Stack & Setup:** + - Backend: Slim Framework (PHP) + PDO + - Datenbank: MariaDB / MySQL + - Routing & Server: Apache `.htaccess` (URL-Rewriting für Slim & SPA-Routing) + - CORS-Middleware für lokale Entwicklung +- **Meilensteine:** + - [ ] MariaDB-Datenbankschema erstellen + - [ ] REST-Endpunkte in Slim PHP anlegen (`GET`, `POST`, `PUT`, `DELETE`) + - [ ] Frontend-API-Services von Mock-Daten auf HTTP-Requests (`fetch`) umstellen + - [ ] Deployment auf klassischem Apache-Webspace testen + +--- + +## Phase 3: Modern Stack Rewrite & Vibe Coding (`/next-app`) + +**Ziel:** Kompletter Neuaufbau mit moderner Architektur, nativer SEO-Unterstützung und reaktiver Echtzeit-Datenbank. + +- **Stack & Setup:** + - Next.js (App Router, React Server Components, SSG) + - Convex (BaaS, Schema-Validierung, WebSocket-Echtzeit, Server Functions) + - SEO: `sitemap.ts`, `robots.ts`, native `generateMetadata`-API +- **Meilensteine:** + - [ ] Neues Next.js-Projekt aufsetzen (`/next-app`) + - [ ] `convex/schema.ts` definieren (Übernahme der Datenstruktur aus MariaDB) + - [ ] Convex Backend Functions (Queries & Mutations) implementieren + - [ ] UI-Komponenten auf Next.js App Router und Convex-Hooks (`useQuery`, `useMutation`) portieren + - [ ] Statische Seiten / SSG für suchmaschinenrelevante Bereiche konfigurieren + +--- + +## Phase 4: Deployment & Infrastruktur mit Coolify + +**Ziel:** Automatisiertes, wartungsarmes Hosting der Next.js-Applikation über eine eigene Coolify-Instanz. + +- **Stack & Setup:** + - Coolify (Self-hosted PaaS via Docker auf VPS) + - Next.js Standalone Build + - Convex Cloud / Self-Hosted Backend Connection + - Automatisches Git-Deployment (Webhooks, CI/CD) +- **Meilensteine:** + - [ ] `output: "standalone"` in `next.config.js` konfigurieren + - [ ] Dockerfile für Next.js optimieren (Multi-Stage Build für geringe Image-Größe) + - [ ] Applikation in Coolify als Service / Git-Repository verknüpfen + - [ ] Environment Variables einrichten (`CONVEX_DEPLOYMENT`, `NEXT_PUBLIC_CONVEX_URL`, etc.) + - [ ] SSL-Zertifikate, Domain-Routing und Health-Checks in Coolify verifizieren diff --git a/webseite-react-php-jwt/react-app/src/main.jsx b/webseite-react-php-jwt/react-app/src/main.jsx new file mode 100644 index 0000000..5df8118 --- /dev/null +++ b/webseite-react-php-jwt/react-app/src/main.jsx @@ -0,0 +1,16 @@ +import { StrictMode } from 'react'; +import { createRoot } from 'react-dom/client'; +import { BrowserRouter } from 'react-router-dom'; + +import './styles/main.scss'; +import 'bootstrap'; + +import App from './App.jsx'; + +createRoot(document.getElementById('root')).render( + + + + + +); diff --git a/webseite-react-php-jwt/react-app/src/pages/AboutPage.jsx b/webseite-react-php-jwt/react-app/src/pages/AboutPage.jsx new file mode 100644 index 0000000..3c843dc --- /dev/null +++ b/webseite-react-php-jwt/react-app/src/pages/AboutPage.jsx @@ -0,0 +1,14 @@ +const AboutPage = () => { + return ( +
+
+

About us

+

+ Lorem ipsum dolor sit amet consectetur adipisicing elit. Qui rerum, fugit ipsa optio laboriosam sed est quae + explicabo! Reiciendis, iure soluta ad libero esse cupiditate pariatur nostrum accusantium! Obcaecati, in. +

+
+
+ ); +}; +export default AboutPage; diff --git a/webseite-react-php-jwt/react-app/src/pages/ContactPage.jsx b/webseite-react-php-jwt/react-app/src/pages/ContactPage.jsx new file mode 100644 index 0000000..79c2bb3 --- /dev/null +++ b/webseite-react-php-jwt/react-app/src/pages/ContactPage.jsx @@ -0,0 +1,11 @@ +const ContactPage = () => { + return ( +
+
+

Contact

+

Lorem ipsum dolor sit amet consectetur

+
+
+ ); +}; +export default ContactPage; diff --git a/webseite-react-php-jwt/react-app/src/pages/HomePage.jsx b/webseite-react-php-jwt/react-app/src/pages/HomePage.jsx new file mode 100644 index 0000000..36cb7fd --- /dev/null +++ b/webseite-react-php-jwt/react-app/src/pages/HomePage.jsx @@ -0,0 +1,10 @@ +const HomePage = () => { + return ( +
+
+

Hello from SPA!

+
+
+ ); +}; +export default HomePage; diff --git a/webseite-react-php-jwt/react-app/src/pages/ProjectsPage.jsx b/webseite-react-php-jwt/react-app/src/pages/ProjectsPage.jsx new file mode 100644 index 0000000..3564b62 --- /dev/null +++ b/webseite-react-php-jwt/react-app/src/pages/ProjectsPage.jsx @@ -0,0 +1,10 @@ +import { Outlet } from 'react-router-dom'; + +const ProjectsPage = () => { + return ( +
+ +
+ ); +}; +export default ProjectsPage; diff --git a/webseite-react-php-jwt/react-app/src/pages/projects/TableProductsPage.jsx b/webseite-react-php-jwt/react-app/src/pages/projects/TableProductsPage.jsx new file mode 100644 index 0000000..d8de4aa --- /dev/null +++ b/webseite-react-php-jwt/react-app/src/pages/projects/TableProductsPage.jsx @@ -0,0 +1,15 @@ +import TableProducts from '../../components/tables/TableProducts'; + +const TableProductsPage = () => { + return ( +
+
+

Table Products

+

Produkte öffentlich sichtbar – Bearbeiten und Löschen nur nach Login

+ +
+
+ ); +}; + +export default TableProductsPage; diff --git a/webseite-react-php-jwt/react-app/src/pages/projects/TableUsersPage.jsx b/webseite-react-php-jwt/react-app/src/pages/projects/TableUsersPage.jsx new file mode 100644 index 0000000..c797c47 --- /dev/null +++ b/webseite-react-php-jwt/react-app/src/pages/projects/TableUsersPage.jsx @@ -0,0 +1,15 @@ +import TableUsers from '../../components/tables/TableUsers'; + +const TableUsersPage = () => { + return ( +
+
+

Table Users

+

Benutzer aus der Slim REST API

+ +
+
+ ); +}; + +export default TableUsersPage; diff --git a/webseite-react-php-jwt/react-app/src/routes/Router.jsx b/webseite-react-php-jwt/react-app/src/routes/Router.jsx new file mode 100644 index 0000000..ad2d501 --- /dev/null +++ b/webseite-react-php-jwt/react-app/src/routes/Router.jsx @@ -0,0 +1,23 @@ +import { Route, Routes } from 'react-router-dom'; +import HomePage from '../pages/HomePage'; +import AboutPage from '../pages/AboutPage'; +import ContactPage from '../pages/ContactPage'; +import ProjectsPage from '../pages/ProjectsPage'; +import TableProductsPage from '../pages/projects/TableProductsPage'; +import TableUsersPage from '../pages/projects/TableUsersPage'; + +const Router = () => { + return ( + + } /> + } /> + + }> + } /> + } /> + + } /> + + ); +}; +export default Router; diff --git a/webseite-react-php-jwt/react-app/src/stores/auth/AuthStore.jsx b/webseite-react-php-jwt/react-app/src/stores/auth/AuthStore.jsx new file mode 100644 index 0000000..a86df00 --- /dev/null +++ b/webseite-react-php-jwt/react-app/src/stores/auth/AuthStore.jsx @@ -0,0 +1,127 @@ +import { + createContext, + useCallback, + useContext, + useEffect, + useLayoutEffect, + useMemo, + useReducer, +} from 'react'; + +import { setAuthToken, setOnUnauthorized } from '../http'; +import { fetchMe, getApiErrorMessage, loginRequest, logoutRequest } from './api'; +import { createInitialState, persistAuth } from './initialState'; +import { AUTH_ACTIONS, authReducer } from './reducer'; + +const AuthStateContext = createContext(null); +const AuthActionsContext = createContext(null); + +export const AuthProvider = (props) => { + const { children } = props; + const [state, dispatch] = useReducer(authReducer, undefined, createInitialState); + + useLayoutEffect(() => { + setAuthToken(state.token); + }, [state.token]); + + useEffect(() => { + persistAuth(state.user, state.token); + }, [state.user, state.token]); + + useEffect(() => { + return setOnUnauthorized(() => { + persistAuth(null, null); + dispatch({ type: AUTH_ACTIONS.CLEAR }); + }); + }, []); + + useEffect(() => { + if (!state.token) { + return undefined; + } + + const controller = new AbortController(); + + const restore = async () => { + try { + const user = await fetchMe({ signal: controller.signal }); + dispatch({ + type: AUTH_ACTIONS.SET_SESSION, + payload: { user, token: state.token }, + }); + } catch (error) { + if (controller.signal.aborted) { + return; + } + + setAuthToken(null); + persistAuth(null, null); + dispatch({ type: AUTH_ACTIONS.CLEAR }); + } + }; + + restore(); + + return () => { + controller.abort(); + }; + }, []); + + const login = useCallback(async (username, password) => { + dispatch({ type: AUTH_ACTIONS.SET_LOADING, payload: true }); + + try { + const session = await loginRequest(username, password); + setAuthToken(session.token); + dispatch({ type: AUTH_ACTIONS.SET_SESSION, payload: session }); + return session.user; + } catch (error) { + const status = error.response?.status; + const message = + status === 401 ? 'Benutzername oder Passwort ist falsch' : getApiErrorMessage(error); + + dispatch({ type: AUTH_ACTIONS.SET_ERROR, payload: message }); + throw error; + } + }, []); + + const logout = useCallback(async () => { + try { + await logoutRequest(); + } catch { + // Session lokal trotzdem beenden + } finally { + setAuthToken(null); + persistAuth(null, null); + dispatch({ type: AUTH_ACTIONS.CLEAR }); + } + }, []); + + const actions = useMemo(() => ({ login, logout }), [login, logout]); + + return ( + + {children} + + ); +}; + +export const useAuthState = () => { + const state = useContext(AuthStateContext); + + if (state == null) { + throw new Error('useAuthState muss innerhalb von AuthProvider verwendet werden'); + } + + return state; +}; + +export const useAuthActions = () => { + const actions = useContext(AuthActionsContext); + + if (actions == null) { + throw new Error('useAuthActions muss innerhalb von AuthProvider verwendet werden'); + } + + return actions; +}; diff --git a/webseite-react-php-jwt/react-app/src/stores/auth/api.js b/webseite-react-php-jwt/react-app/src/stores/auth/api.js new file mode 100644 index 0000000..65fe683 --- /dev/null +++ b/webseite-react-php-jwt/react-app/src/stores/auth/api.js @@ -0,0 +1,22 @@ +import { apiClient, getApiErrorMessage } from '../http'; + +export { getApiErrorMessage }; + +export const loginRequest = async (username, password) => { + const { data } = await apiClient.post('/login', { username, password }); + + if (!data?.user || !data?.token) { + throw new Error('Ungültige API-Antwort: Session erwartet'); + } + + return data; +}; + +export const logoutRequest = async () => { + await apiClient.post('/logout'); +}; + +export const fetchMe = async (config = {}) => { + const { data } = await apiClient.get('/me', config); + return data; +}; diff --git a/webseite-react-php-jwt/react-app/src/stores/auth/index.js b/webseite-react-php-jwt/react-app/src/stores/auth/index.js new file mode 100644 index 0000000..92f0b15 --- /dev/null +++ b/webseite-react-php-jwt/react-app/src/stores/auth/index.js @@ -0,0 +1,4 @@ +export { createInitialState } from './initialState'; +export { AUTH_ACTIONS, authReducer } from './reducer'; +export { AuthProvider, useAuthActions, useAuthState } from './AuthStore'; +export { fetchMe, getApiErrorMessage, loginRequest, logoutRequest } from './api'; diff --git a/webseite-react-php-jwt/react-app/src/stores/auth/initialState.js b/webseite-react-php-jwt/react-app/src/stores/auth/initialState.js new file mode 100644 index 0000000..99632a7 --- /dev/null +++ b/webseite-react-php-jwt/react-app/src/stores/auth/initialState.js @@ -0,0 +1,38 @@ +const STORAGE_KEY = 'nerdshop.auth'; + +export const loadStoredAuth = () => { + try { + const raw = localStorage.getItem(STORAGE_KEY); + if (!raw) { + return { user: null, token: null }; + } + + const parsed = JSON.parse(raw); + if (parsed?.token && parsed?.user) { + return { user: parsed.user, token: parsed.token }; + } + } catch { + localStorage.removeItem(STORAGE_KEY); + } + + return { user: null, token: null }; +}; + +export const persistAuth = (user, token) => { + if (user && token) { + localStorage.setItem(STORAGE_KEY, JSON.stringify({ user, token })); + } else { + localStorage.removeItem(STORAGE_KEY); + } +}; + +export const createInitialState = () => { + const stored = loadStoredAuth(); + + return { + user: stored.user, + token: stored.token, + loading: Boolean(stored.token), + error: null, + }; +}; diff --git a/webseite-react-php-jwt/react-app/src/stores/auth/reducer.js b/webseite-react-php-jwt/react-app/src/stores/auth/reducer.js new file mode 100644 index 0000000..0070dbf --- /dev/null +++ b/webseite-react-php-jwt/react-app/src/stores/auth/reducer.js @@ -0,0 +1,41 @@ +export const AUTH_ACTIONS = { + SET_LOADING: 'SET_LOADING', + SET_SESSION: 'SET_SESSION', + SET_ERROR: 'SET_ERROR', + CLEAR: 'CLEAR', +}; + +export const authReducer = (state, action) => { + switch (action.type) { + case AUTH_ACTIONS.SET_LOADING: + return { + ...state, + loading: action.payload, + error: action.payload ? null : state.error, + }; + case AUTH_ACTIONS.SET_SESSION: + return { + ...state, + user: action.payload.user, + token: action.payload.token, + loading: false, + error: null, + }; + case AUTH_ACTIONS.SET_ERROR: + return { + ...state, + loading: false, + error: action.payload, + }; + case AUTH_ACTIONS.CLEAR: + return { + user: null, + token: null, + loading: false, + error: null, + }; + default: + console.warn('no action found'); + return state; + } +}; diff --git a/webseite-react-php-jwt/react-app/src/stores/http.js b/webseite-react-php-jwt/react-app/src/stores/http.js new file mode 100644 index 0000000..adf8bb7 --- /dev/null +++ b/webseite-react-php-jwt/react-app/src/stores/http.js @@ -0,0 +1,83 @@ +import axios from 'axios'; +import { loadStoredAuth } from './auth/initialState'; + +export const apiClient = axios.create({ + baseURL: import.meta.env.VITE_API_URL ?? '/api', + timeout: 8000, + headers: { 'Content-Type': 'application/json' }, +}); + +let authToken = null; +let onUnauthorized = null; + +const isLoginRequest = (config) => { + const url = config?.url ?? ''; + return url === '/login' || url.endsWith('/login'); +}; + +const resolveAuthToken = () => authToken || loadStoredAuth().token || null; + +const applyAuthorizationHeader = (headers, token) => { + const value = `Bearer ${token}`; + + if (headers && typeof headers.set === 'function') { + headers.set('Authorization', value); + return headers; + } + + return { ...(headers || {}), Authorization: value }; +}; + +export const setAuthToken = (token) => { + authToken = token || null; + + if (authToken) { + apiClient.defaults.headers.common.Authorization = `Bearer ${authToken}`; + } else { + delete apiClient.defaults.headers.common.Authorization; + } +}; + +setAuthToken(loadStoredAuth().token); + +export const setOnUnauthorized = (handler) => { + onUnauthorized = handler; + + return () => { + if (onUnauthorized === handler) { + onUnauthorized = null; + } + }; +}; + +apiClient.interceptors.request.use((config) => { + const token = resolveAuthToken(); + + if (token && !isLoginRequest(config)) { + config.headers = applyAuthorizationHeader(config.headers, token); + } + + return config; +}); + +apiClient.interceptors.response.use( + (response) => response, + (error) => { + const status = error.response?.status; + + if (status === 401 && !isLoginRequest(error.config)) { + setAuthToken(null); + onUnauthorized?.(); + } + + return Promise.reject(error); + } +); + +export const getApiErrorMessage = (error) => { + if (axios.isCancel(error) || error.code === 'ERR_CANCELED') { + return null; + } + + return error.response?.data?.error || error.message || 'Unbekannter API-Fehler'; +}; diff --git a/webseite-react-php-jwt/react-app/src/stores/products/ProductsStore.jsx b/webseite-react-php-jwt/react-app/src/stores/products/ProductsStore.jsx new file mode 100644 index 0000000..7899846 --- /dev/null +++ b/webseite-react-php-jwt/react-app/src/stores/products/ProductsStore.jsx @@ -0,0 +1,294 @@ +import { + createContext, + useCallback, + useContext, + useEffect, + useMemo, + useReducer, + useRef, +} from 'react'; + +import { apiClient } from '../http'; +import { createInitialState } from './initialState'; +import { PRODUCTS_ACTIONS, productsReducer } from './reducer'; + +import { + createProduct, + deleteProduct, + fetchProducts, + getApiErrorMessage, + patchProduct, + updateProduct, +} from './api'; + +const PERSIST_DELAY_MS = 400; + +const ProductsStateContext = createContext(null); +const ProductsDispatchContext = createContext(null); +const ProductsActionsContext = createContext(null); + +export const ProductsProvider = (props) => { + const { children, items = [], autoLoad = true } = props; + + const [state, dispatch] = useReducer( + productsReducer, + items, + createInitialState, // Der 3. Parameter dient der Lazy Initialization (verzögerten/faulen Initialisierung) des States. + ); + + // Warum macht man das? + + // Performance (Expensive Calculations): Wenn die Erstellung des Ausgangszustands rechenintensiv ist (z. B. Parsen von localStorage, Filtern/Sortieren großer Arrays), wird createInitialState nur ein einziges Mal beim Mounten ausgeführt – nicht bei jedem weiteren Render. + + // Wiederverwendbarkeit: Du kannst dieselbe createInitialState-Funktion auch innerhalb deines Reducers aufrufen, um z. B. bei einer RESET-Action den State sauber auf die Ausgangswerte zurückzusetzen. + + const pendingPatches = useRef(new Map()); + const persistTimers = useRef(new Map()); + + useEffect(() => { + if (!autoLoad) { + return undefined; + } + + const controller = new AbortController(); + + const load = async () => { + dispatch({ type: PRODUCTS_ACTIONS.SET_LOADING, payload: true }); + + try { + const loadedItems = await fetchProducts({ signal: controller.signal }); + dispatch({ type: PRODUCTS_ACTIONS.SET_ITEMS, payload: loadedItems }); + } catch (error) { + if (controller.signal.aborted) { + return; + } + + dispatch({ + type: PRODUCTS_ACTIONS.SET_ERROR, + payload: getApiErrorMessage(error), + }); + } + }; + + load(); + + return () => { + controller.abort(); + }; + }, [autoLoad]); + + const loadProducts = useCallback(async () => { + dispatch({ type: PRODUCTS_ACTIONS.SET_LOADING, payload: true }); + + try { + const loadedItems = await fetchProducts(); + dispatch({ type: PRODUCTS_ACTIONS.SET_ITEMS, payload: loadedItems }); + } catch (error) { + dispatch({ + type: PRODUCTS_ACTIONS.SET_ERROR, + payload: getApiErrorMessage(error), + }); + } + }, []); + + const flushPatch = useCallback( + async (id) => { + const patch = pendingPatches.current.get(id); + pendingPatches.current.delete(id); + + if (persistTimers.current.has(id)) { + clearTimeout(persistTimers.current.get(id)); + persistTimers.current.delete(id); + } + + if (!patch || Object.keys(patch).length === 0) { + return; + } + + try { + const updated = await patchProduct(id, patch); + dispatch({ type: PRODUCTS_ACTIONS.SET_ITEM, payload: updated }); + } catch (error) { + dispatch({ + type: PRODUCTS_ACTIONS.SET_ERROR, + payload: getApiErrorMessage(error), + }); + await loadProducts(); + } + }, + [loadProducts], + ); + + const schedulePatch = useCallback( + (id, patch) => { + const merged = { ...(pendingPatches.current.get(id) || {}), ...patch }; + pendingPatches.current.set(id, merged); + + if (persistTimers.current.has(id)) { + clearTimeout(persistTimers.current.get(id)); + } + + persistTimers.current.set( + id, + setTimeout(() => { + flushPatch(id); + }, PERSIST_DELAY_MS), + ); + }, + [flushPatch], + ); + + useEffect(() => { + const timers = persistTimers.current; + const patches = pendingPatches.current; + + return () => { + timers.forEach((timer) => clearTimeout(timer)); + timers.clear(); + + patches.forEach((patch, id) => { + if ( + patch && + Object.keys(patch).length > 0 && + apiClient.defaults.headers.common.Authorization + ) { + patchProduct(id, patch).catch(() => {}); + } + }); + patches.clear(); + }; + }, []); + + const updateAmount = useCallback( + (amount, id) => { + dispatch({ + type: PRODUCTS_ACTIONS.UPDATE_AMOUNT, + payload: { id, amount }, + }); + + const stock = Number(amount); + if (Number.isFinite(stock)) { + schedulePatch(id, { stock }); + } + }, + [schedulePatch], + ); + + const updatePrice = useCallback( + (price, id) => { + dispatch({ type: PRODUCTS_ACTIONS.UPDATE_PRICE, payload: { id, price } }); + + const numericPrice = Number(price); + if (Number.isFinite(numericPrice)) { + schedulePatch(id, { price: numericPrice }); + } + }, + [schedulePatch], + ); + + const addProduct = useCallback(async (product) => { + try { + const created = await createProduct(product); + dispatch({ type: PRODUCTS_ACTIONS.ADD_ITEM, payload: created }); + return created; + } catch (error) { + dispatch({ + type: PRODUCTS_ACTIONS.SET_ERROR, + payload: getApiErrorMessage(error), + }); + throw error; + } + }, []); + + const saveProduct = useCallback(async (id, product) => { + try { + const updated = await updateProduct(id, product); + dispatch({ type: PRODUCTS_ACTIONS.SET_ITEM, payload: updated }); + return updated; + } catch (error) { + dispatch({ + type: PRODUCTS_ACTIONS.SET_ERROR, + payload: getApiErrorMessage(error), + }); + throw error; + } + }, []); + + const removeProduct = useCallback(async (id) => { + try { + await deleteProduct(id); + dispatch({ type: PRODUCTS_ACTIONS.REMOVE_ITEM, payload: id }); + } catch (error) { + dispatch({ + type: PRODUCTS_ACTIONS.SET_ERROR, + payload: getApiErrorMessage(error), + }); + throw error; + } + }, []); + + const actions = useMemo( + () => ({ + loadProducts, + updateAmount, + updatePrice, + addProduct, + saveProduct, + removeProduct, + }), + [ + loadProducts, + updateAmount, + updatePrice, + addProduct, + saveProduct, + removeProduct, + ], + ); + + return ( + + + + {children} + + + + ); +}; + +export const useProductsState = () => { + const state = useContext(ProductsStateContext); + + if (state == null) { + throw new Error( + 'useProductsState muss innerhalb von ProductsProvider verwendet werden', + ); + } + + return state; +}; + +export const useProductsDispatch = () => { + const dispatch = useContext(ProductsDispatchContext); + + if (dispatch == null) { + throw new Error( + 'useProductsDispatch muss innerhalb von ProductsProvider verwendet werden', + ); + } + + return dispatch; +}; + +export const useProductsActions = () => { + const actions = useContext(ProductsActionsContext); + + if (actions == null) { + throw new Error( + 'useProductsActions muss innerhalb von ProductsProvider verwendet werden', + ); + } + + return actions; +}; diff --git a/webseite-react-php-jwt/react-app/src/stores/products/api.js b/webseite-react-php-jwt/react-app/src/stores/products/api.js new file mode 100644 index 0000000..39f66c3 --- /dev/null +++ b/webseite-react-php-jwt/react-app/src/stores/products/api.js @@ -0,0 +1,37 @@ +import { apiClient, getApiErrorMessage } from '../http'; + +export { getApiErrorMessage }; + +export const fetchProducts = async (config = {}) => { + const { data } = await apiClient.get('/products', config); + + if (!Array.isArray(data)) { + throw new Error('Ungültige API-Antwort: Produktliste erwartet'); + } + + return data; +}; + +export const fetchProduct = async (id, config = {}) => { + const { data } = await apiClient.get(`/products/${id}`, config); + return data; +}; + +export const createProduct = async (product) => { + const { data } = await apiClient.post('/products', product); + return data; +}; + +export const updateProduct = async (id, product) => { + const { data } = await apiClient.put(`/products/${id}`, product); + return data; +}; + +export const patchProduct = async (id, patch) => { + const { data } = await apiClient.patch(`/products/${id}`, patch); + return data; +}; + +export const deleteProduct = async (id) => { + await apiClient.delete(`/products/${id}`); +}; diff --git a/webseite-react-php-jwt/react-app/src/stores/products/index.js b/webseite-react-php-jwt/react-app/src/stores/products/index.js new file mode 100644 index 0000000..ae3d40e --- /dev/null +++ b/webseite-react-php-jwt/react-app/src/stores/products/index.js @@ -0,0 +1,17 @@ +export { createInitialState } from './initialState'; +export { PRODUCTS_ACTIONS, productsReducer } from './reducer'; +export { + ProductsProvider, + useProductsActions, + useProductsDispatch, + useProductsState, +} from './ProductsStore'; +export { + createProduct, + deleteProduct, + fetchProduct, + fetchProducts, + getApiErrorMessage, + patchProduct, + updateProduct, +} from './api'; diff --git a/webseite-react-php-jwt/react-app/src/stores/products/initialState.js b/webseite-react-php-jwt/react-app/src/stores/products/initialState.js new file mode 100644 index 0000000..56c4cc5 --- /dev/null +++ b/webseite-react-php-jwt/react-app/src/stores/products/initialState.js @@ -0,0 +1,7 @@ +export const createInitialState = (items) => { + return { + items: items || [], + loading: true, + error: null, + }; +}; diff --git a/webseite-react-php-jwt/react-app/src/stores/products/reducer.js b/webseite-react-php-jwt/react-app/src/stores/products/reducer.js new file mode 100644 index 0000000..4dc6615 --- /dev/null +++ b/webseite-react-php-jwt/react-app/src/stores/products/reducer.js @@ -0,0 +1,73 @@ +export const PRODUCTS_ACTIONS = { + SET_LOADING: 'SET_LOADING', + SET_ITEMS: 'SET_ITEMS', + SET_ITEM: 'SET_ITEM', + SET_ERROR: 'SET_ERROR', + ADD_ITEM: 'ADD_ITEM', + REMOVE_ITEM: 'REMOVE_ITEM', + UPDATE_AMOUNT: 'UPDATE_AMOUNT', + UPDATE_PRICE: 'UPDATE_PRICE', +}; + +export const productsReducer = (state, action) => { + switch (action.type) { + case PRODUCTS_ACTIONS.SET_LOADING: + return { + ...state, + loading: action.payload, + error: action.payload ? null : state.error, + }; + case PRODUCTS_ACTIONS.SET_ITEMS: + return { + ...state, + items: action.payload, + loading: false, + error: null, + }; + case PRODUCTS_ACTIONS.SET_ITEM: + return { + ...state, + items: state.items.map((item) => (item._id === action.payload._id ? action.payload : item)), + error: null, + }; + case PRODUCTS_ACTIONS.SET_ERROR: + return { + ...state, + loading: false, + error: action.payload, + }; + case PRODUCTS_ACTIONS.ADD_ITEM: + return { + ...state, + items: [...state.items, action.payload], + error: null, + }; + case PRODUCTS_ACTIONS.REMOVE_ITEM: + return { + ...state, + items: state.items.filter((item) => item._id !== action.payload), + error: null, + }; + case PRODUCTS_ACTIONS.UPDATE_AMOUNT: + return { + ...state, + items: state.items.map((item) => + item._id === action.payload.id + ? { ...item, stock: action.payload.amount } // + : item + ), + }; + case PRODUCTS_ACTIONS.UPDATE_PRICE: + return { + ...state, + items: state.items.map((item) => + item._id === action.payload.id + ? { ...item, price: action.payload.price } // + : item + ), + }; + default: + console.warn('no action found'); + return state; + } +}; diff --git a/webseite-react-php-jwt/react-app/src/stores/users/UsersStore.jsx b/webseite-react-php-jwt/react-app/src/stores/users/UsersStore.jsx new file mode 100644 index 0000000..192e685 --- /dev/null +++ b/webseite-react-php-jwt/react-app/src/stores/users/UsersStore.jsx @@ -0,0 +1,72 @@ +import { createContext, useCallback, useContext, useEffect, useMemo, useReducer } from 'react'; + +import { useAuthState } from '../auth'; +import { fetchUsers, getApiErrorMessage } from './api'; +import { createInitialState } from './initialState'; +import { USERS_ACTIONS, usersReducer } from './reducer'; + +const UsersStateContext = createContext(null); +const UsersActionsContext = createContext(null); + +export const UsersProvider = (props) => { + const { children, items = [], autoLoad = true } = props; + const { token } = useAuthState(); + const [state, dispatch] = useReducer(usersReducer, items, createInitialState); + + const loadUsers = useCallback(async (signal) => { + dispatch({ type: USERS_ACTIONS.SET_LOADING, payload: true }); + + try { + const loadedItems = await fetchUsers(signal ? { signal } : {}); + dispatch({ type: USERS_ACTIONS.SET_ITEMS, payload: loadedItems }); + } catch (error) { + const message = getApiErrorMessage(error); + if (message == null) { + return; + } + + dispatch({ type: USERS_ACTIONS.SET_ERROR, payload: message }); + } + }, []); + + useEffect(() => { + if (!autoLoad || !token) { + return undefined; + } + + const controller = new AbortController(); + loadUsers(controller.signal); + + return () => { + controller.abort(); + }; + }, [autoLoad, token, loadUsers]); + + const actions = useMemo(() => ({ loadUsers: () => loadUsers() }), [loadUsers]); + + return ( + + {children} + + ); +}; + +export const useUsersState = () => { + const state = useContext(UsersStateContext); + + if (state == null) { + throw new Error('useUsersState muss innerhalb von UsersProvider verwendet werden'); + } + + return state; +}; + +export const useUsersActions = () => { + const actions = useContext(UsersActionsContext); + + if (actions == null) { + throw new Error('useUsersActions muss innerhalb von UsersProvider verwendet werden'); + } + + return actions; +}; diff --git a/webseite-react-php-jwt/react-app/src/stores/users/api.js b/webseite-react-php-jwt/react-app/src/stores/users/api.js new file mode 100644 index 0000000..02c7df8 --- /dev/null +++ b/webseite-react-php-jwt/react-app/src/stores/users/api.js @@ -0,0 +1,13 @@ +import { apiClient, getApiErrorMessage } from '../http'; + +export { getApiErrorMessage }; + +export const fetchUsers = async (config = {}) => { + const { data } = await apiClient.get('/users', config); + + if (!Array.isArray(data)) { + throw new Error('Ungültige API-Antwort: Benutzerliste erwartet'); + } + + return data; +}; diff --git a/webseite-react-php-jwt/react-app/src/stores/users/index.js b/webseite-react-php-jwt/react-app/src/stores/users/index.js new file mode 100644 index 0000000..50981a4 --- /dev/null +++ b/webseite-react-php-jwt/react-app/src/stores/users/index.js @@ -0,0 +1,4 @@ +export { createInitialState } from './initialState'; +export { USERS_ACTIONS, usersReducer } from './reducer'; +export { UsersProvider, useUsersActions, useUsersState } from './UsersStore'; +export { fetchUsers, getApiErrorMessage } from './api'; diff --git a/webseite-react-php-jwt/react-app/src/stores/users/initialState.js b/webseite-react-php-jwt/react-app/src/stores/users/initialState.js new file mode 100644 index 0000000..56c4cc5 --- /dev/null +++ b/webseite-react-php-jwt/react-app/src/stores/users/initialState.js @@ -0,0 +1,7 @@ +export const createInitialState = (items) => { + return { + items: items || [], + loading: true, + error: null, + }; +}; diff --git a/webseite-react-php-jwt/react-app/src/stores/users/reducer.js b/webseite-react-php-jwt/react-app/src/stores/users/reducer.js new file mode 100644 index 0000000..a0f5078 --- /dev/null +++ b/webseite-react-php-jwt/react-app/src/stores/users/reducer.js @@ -0,0 +1,32 @@ +export const USERS_ACTIONS = { + SET_LOADING: 'SET_LOADING', + SET_ITEMS: 'SET_ITEMS', + SET_ERROR: 'SET_ERROR', +}; + +export const usersReducer = (state, action) => { + switch (action.type) { + case USERS_ACTIONS.SET_LOADING: + return { + ...state, + loading: action.payload, + error: action.payload ? null : state.error, + }; + case USERS_ACTIONS.SET_ITEMS: + return { + ...state, + items: action.payload, + loading: false, + error: null, + }; + case USERS_ACTIONS.SET_ERROR: + return { + ...state, + loading: false, + error: action.payload, + }; + default: + console.warn('no action found'); + return state; + } +}; diff --git a/webseite-react-php-jwt/react-app/src/styles/abstracts/_bootstrap-mixins.scss b/webseite-react-php-jwt/react-app/src/styles/abstracts/_bootstrap-mixins.scss new file mode 100644 index 0000000..9a26f88 --- /dev/null +++ b/webseite-react-php-jwt/react-app/src/styles/abstracts/_bootstrap-mixins.scss @@ -0,0 +1,94 @@ +@use 'variables' as *; + +// Breakpoint Functions +@function breakpoint-min($name, $breakpoints: $grid-breakpoints) { + $min: map-get($breakpoints, $name); + @return if($min != 0, $min, null); +} + +@function breakpoint-max($name, $breakpoints: $grid-breakpoints) { + $max: map-get($breakpoints, $name); + @return if($max and $max > 0, $max - 0.02, null); +} + +// Breakpoint Mixins +@mixin media-breakpoint-up($name, $breakpoints: $grid-breakpoints) { + $min: breakpoint-min($name, $breakpoints); + @if $min { + @media (min-width: $min) { + @content; + } + } @else { + @content; + } +} + +@mixin media-breakpoint-down($name, $breakpoints: $grid-breakpoints) { + $max: breakpoint-max($name, $breakpoints); + @if $max { + @media (max-width: $max) { + @content; + } + } @else { + @content; + } +} + +@mixin media-breakpoint-between( + $lower, + $upper, + $breakpoints: $grid-breakpoints +) { + $min: breakpoint-min($lower, $breakpoints); + $max: breakpoint-max($upper, $breakpoints); + + @if $min != null and $max != null { + @media (min-width: $min) and (max-width: $max) { + @content; + } + } @else if $max == null { + @include media-breakpoint-up($lower, $breakpoints) { + @content; + } + } @else if $min == null { + @include media-breakpoint-down($upper, $breakpoints) { + @content; + } + } +} + +@function breakpoint-next( + $name, + $breakpoints: $grid-breakpoints, + $breakpoint-names: map-keys($breakpoints) +) { + $n: index($breakpoint-names, $name); + @if not $n { + @error "breakpoint `#{$name}` not found in `#{$breakpoints}`"; + } + @return if( + $n < length($breakpoint-names), + nth($breakpoint-names, $n + 1), + null + ); +} + +@mixin media-breakpoint-only($name, $breakpoints: $grid-breakpoints) { + $min: breakpoint-min($name, $breakpoints); + $next: breakpoint-next($name, $breakpoints); + $max: breakpoint-max($next, $breakpoints); + + @if $min != null and $max != null { + @media (min-width: $min) and (max-width: $max) { + @content; + } + } @else if $max == null { + @include media-breakpoint-up($name, $breakpoints) { + @content; + } + } @else if $min == null { + @include media-breakpoint-down($next, $breakpoints) { + @content; + } + } +} diff --git a/webseite-react-php-jwt/react-app/src/styles/abstracts/_colors.scss b/webseite-react-php-jwt/react-app/src/styles/abstracts/_colors.scss new file mode 100644 index 0000000..9eb7fcd --- /dev/null +++ b/webseite-react-php-jwt/react-app/src/styles/abstracts/_colors.scss @@ -0,0 +1,25 @@ +@use 'sass:color'; + +/* Color Theme Swatches in Hex */ +$color-1: #5c4b51; +$color-2: #8cbeb2; +$color-3: #f2ebbf; +$color-4: #f3b562; +$color-5: #f06060; +$color-6: #293241; + +$color-dark-blue: $color-6; + +$color-red: $color-5; +$color-yellow: $color-4; +$color-brown: $color-1; +$color-black: #020202; +$color-white: #fff; + +$color-dark-text: $color-black; +$color-light-grey: #ccc; + +$bgColor: #efefef; +$color: salmon; + +$gradient-1: linear-gradient(0deg, color.change($color-dark-blue, $lightness: 10%) 0%, $color-dark-blue 100%); diff --git a/webseite-react-php-jwt/react-app/src/styles/abstracts/_index.scss b/webseite-react-php-jwt/react-app/src/styles/abstracts/_index.scss new file mode 100644 index 0000000..adf64f8 --- /dev/null +++ b/webseite-react-php-jwt/react-app/src/styles/abstracts/_index.scss @@ -0,0 +1,4 @@ +@forward 'colors'; +@forward 'typography'; +@forward 'variables'; +@forward 'bootstrap-mixins'; diff --git a/webseite-react-php-jwt/react-app/src/styles/abstracts/_typography.scss b/webseite-react-php-jwt/react-app/src/styles/abstracts/_typography.scss new file mode 100644 index 0000000..34c537f --- /dev/null +++ b/webseite-react-php-jwt/react-app/src/styles/abstracts/_typography.scss @@ -0,0 +1,9 @@ +$fallback-serif: Cambria, Cochin, Georgia, Times, 'Times New Roman', serif; +$fallback-sans-serif: 'Segoe UI', Tahoma, Geneva, Verdana, sans-serif; + +$font-headline: 'Open Sans', $fallback-sans-serif; +$font-subclaim: $fallback-sans-serif; + +$font-menu: 'Source Code Pro', $fallback-sans-serif; +$font-copy: 'Merriweather', $fallback-serif; +$font-quote: 'Amatic SC', $fallback-serif; diff --git a/webseite-react-php-jwt/react-app/src/styles/abstracts/_variables.scss b/webseite-react-php-jwt/react-app/src/styles/abstracts/_variables.scss new file mode 100644 index 0000000..415bc3f --- /dev/null +++ b/webseite-react-php-jwt/react-app/src/styles/abstracts/_variables.scss @@ -0,0 +1,17 @@ +// Einzelne Breakpoint-Variablen für einfachere Verwendung +$grid-breakpoints-xs: 0; +$grid-breakpoints-sm: 576px; +$grid-breakpoints-md: 768px; +$grid-breakpoints-lg: 992px; +$grid-breakpoints-xl: 1200px; +$grid-breakpoints-xxl: 1400px; + +// Bootstrap Breakpoints direkt definieren (ohne komplexe Dependencies) +$grid-breakpoints: ( + xs: 0, + sm: $grid-breakpoints-sm, + md: $grid-breakpoints-md, + lg: $grid-breakpoints-lg, + xl: $grid-breakpoints-xl, + xxl: $grid-breakpoints-xxl, +) !default; diff --git a/webseite-react-php-jwt/react-app/src/styles/base/_index.scss b/webseite-react-php-jwt/react-app/src/styles/base/_index.scss new file mode 100644 index 0000000..26fa81a --- /dev/null +++ b/webseite-react-php-jwt/react-app/src/styles/base/_index.scss @@ -0,0 +1,2 @@ +@forward 'theme'; +@forward 'utils'; diff --git a/webseite-react-php-jwt/react-app/src/styles/base/_theme.scss b/webseite-react-php-jwt/react-app/src/styles/base/_theme.scss new file mode 100644 index 0000000..286c1e9 --- /dev/null +++ b/webseite-react-php-jwt/react-app/src/styles/base/_theme.scss @@ -0,0 +1,82 @@ +@use '../abstracts/' as *; + +// Allgemeine Formatierungen +*, +html { + box-sizing: border-box; +} + +html, +body { + height: 100%; + padding: 0; + margin: 0; +} + +body { + background-color: $bgColor; + display: flex; + flex-direction: column; + font-family: $font-copy; +} + +// Sticky footer https://css-tricks.com/couple-takes-sticky-footer/#aa-there-is-flexbox +body, +#root { + display: flex; + flex-direction: column; +} + +html, +body, +#root { + height: 100%; +} + +body > header, +main { + flex: 1 0 auto; +} + +body > footer, +.footer-main { + flex-shrink: 0; +} +// ------- + +h1, +h2, +h3, +h4, +h5, +h6 { + color: $color-5; + font-family: $font-headline; +} + +// Sticky footer +main { + flex: 1 0 auto; +} + +body > footer, +.footer-main { + flex-shrink: 0; +} + +.loading-spin { + animation-name: loadingSpin; + animation-duration: 1s; + animation-fill-mode: both; + animation-iteration-count: infinite; + animation-timing-function: steps(8); +} + +@keyframes loadingSpin { + 0% { + transform: rotate(0deg); + } + 100% { + transform: rotate(360deg); + } +} diff --git a/webseite-react-php-jwt/react-app/src/styles/base/_utils.scss b/webseite-react-php-jwt/react-app/src/styles/base/_utils.scss new file mode 100644 index 0000000..0576df4 --- /dev/null +++ b/webseite-react-php-jwt/react-app/src/styles/base/_utils.scss @@ -0,0 +1,43 @@ +// Shadow Effects ========================== +// https://codepen.io/sdthornton/pen/wBZdXq +.drop-shadow-curved { + position: relative; + float: left; + width: 40%; + padding: 1em; + margin: 2em 10px 4em; + background: #fff; + box-shadow: 0 1px 4px rgba(0, 0, 0, 0.3), 0 0 40px rgba(0, 0, 0, 0.1) inset; + + &:before, + &:after { + content: ''; + width: 3px; + position: absolute; + z-index: -1; + + top: 10px; + bottom: 10px; + box-shadow: 0 0 15px rgba(0, 0, 0, 0.6); + border-radius: 10px / 100px; + } + &:before { + left: 0; + } + &:after { + right: 0; + } +} + +.sr-only { + overflow: hidden; + position: absolute; + width: 1px; + height: 1px; + margin: -1px; + border: 0; + padding: 0; + white-space: nowrap; + clip: rect(0 0 0 0); + pointer-events: none; +} diff --git a/webseite-react-php-jwt/react-app/src/styles/components/_button.scss b/webseite-react-php-jwt/react-app/src/styles/components/_button.scss new file mode 100644 index 0000000..c83b1c1 --- /dev/null +++ b/webseite-react-php-jwt/react-app/src/styles/components/_button.scss @@ -0,0 +1,13 @@ +.btn-custom { + &:hover, + &:focus { + background-color: #333; + color: #e0e0e0; + border: 1px solid #333; + } + background-color: #f0f0f0; + color: #333; + border: 1px solid #ccc; + padding: 8px 16px; + border-radius: 0; +} diff --git a/webseite-react-php-jwt/react-app/src/styles/components/_chuck-norris-jokes.scss b/webseite-react-php-jwt/react-app/src/styles/components/_chuck-norris-jokes.scss new file mode 100644 index 0000000..d94589b --- /dev/null +++ b/webseite-react-php-jwt/react-app/src/styles/components/_chuck-norris-jokes.scss @@ -0,0 +1,45 @@ +.chuck-norris-jokes { + text-align: center; + + .chuck-container { + position: relative; + padding: 2rem; + border-radius: 12px; + color: white; + text-align: center; + overflow: hidden; + max-width: 580px; + margin: 2rem auto; + + height: 430px; + display: flex; + flex-direction: column; + justify-content: center; + align-items: center; + background-image: url('/Chuck-Norris-Wallpaper-By-Thereverend3k.jpg'); + background-size: contain; + background-repeat: no-repeat; + background-position: center; + + &::before { + content: ''; + position: absolute; + inset: 0; + background: rgba(0, 0, 0, 0.6); + } + + .chuck-norris { + position: relative; + font-size: 1.8rem; + font-weight: 700; + line-height: 1.4; + color: #efefef; + } + + button { + position: relative; + font-size: 1.4rem; + margin-top: 1rem; + } + } +} diff --git a/webseite-react-php-jwt/react-app/src/styles/components/_footer-main.scss b/webseite-react-php-jwt/react-app/src/styles/components/_footer-main.scss new file mode 100644 index 0000000..c55804e --- /dev/null +++ b/webseite-react-php-jwt/react-app/src/styles/components/_footer-main.scss @@ -0,0 +1,29 @@ +@use '../abstracts/' as *; + +.m-footer-main { + padding: 2rem 0; + background: $gradient-1; + color: white; + + a { + color: white; + } + + .row > [class^='col'], + .row > div { + justify-items: center; + text-align: center; + margin: 0 0 1rem; + @include media-breakpoint-up(md) { + justify-items: flex-start; + text-align: left; + } + } + + // for mobile view + padding: 2rem 2rem; + // for desktop view + @media (min-width: 768px) { + padding: 2rem 0; + } +} diff --git a/webseite-react-php-jwt/react-app/src/styles/components/_header-main.scss b/webseite-react-php-jwt/react-app/src/styles/components/_header-main.scss new file mode 100644 index 0000000..4cdf94b --- /dev/null +++ b/webseite-react-php-jwt/react-app/src/styles/components/_header-main.scss @@ -0,0 +1,33 @@ +@use '../abstracts/' as *; +.m-header-main { + display: flex; + position: relative; + justify-content: center; + align-items: center; + min-height: 400px; + max-height: 400px; + + background-image: url('/img/header-bg.jpg'); + background-position: center; + background-repeat: no-repeat; + background-origin: border-box; + background-size: cover; + + .content-box { + position: absolute; + z-index: 2; + } + + // radial gradient overlay + &::after { + content: ''; + position: absolute; + z-index: 1; + left: 0; + top: 0; + width: 100%; + height: 100%; + + background: radial-gradient(circle, rgba(0, 0, 0, 0) 0%, rgba(0, 0, 0, 0.7) 100%); + } +} diff --git a/webseite-react-php-jwt/react-app/src/styles/components/_index.scss b/webseite-react-php-jwt/react-app/src/styles/components/_index.scss new file mode 100644 index 0000000..ad390a5 --- /dev/null +++ b/webseite-react-php-jwt/react-app/src/styles/components/_index.scss @@ -0,0 +1,11 @@ +@forward 'chuck-norris-jokes'; +@forward 'footer-main'; +@forward 'header-main'; +@forward 'input-amount'; +@forward 'input-price'; +@forward 'logo-main'; +@forward 'nav-main'; +@forward 'nav-socials'; +@forward 'slider-splide'; +@forward 'table-products'; +@forward 'table-users'; diff --git a/webseite-react-php-jwt/react-app/src/styles/components/_input-amount.scss b/webseite-react-php-jwt/react-app/src/styles/components/_input-amount.scss new file mode 100644 index 0000000..59ad167 --- /dev/null +++ b/webseite-react-php-jwt/react-app/src/styles/components/_input-amount.scss @@ -0,0 +1,25 @@ +.m-input-amount { + .input-group-text { + padding: 0; + margin: 0; + overflow: hidden; + button { + border-radius: 0; + } + } + input[type='number'] { + text-align: center; + max-width: 100px; + &::placeholder { + color: #ccc; + } + + &::-webkit-outer-spin-button, + &::-webkit-inner-spin-button { + -webkit-appearance: none; + margin: 0; + } + -o-appearance: textfield; /* Opera */ + appearance: textfield; /* Firefox */ + } +} diff --git a/webseite-react-php-jwt/react-app/src/styles/components/_input-price.scss b/webseite-react-php-jwt/react-app/src/styles/components/_input-price.scss new file mode 100644 index 0000000..1d46019 --- /dev/null +++ b/webseite-react-php-jwt/react-app/src/styles/components/_input-price.scss @@ -0,0 +1,6 @@ +.m-input-price { + max-width: 200px; + input { + text-align: center; + } +} diff --git a/webseite-react-php-jwt/react-app/src/styles/components/_logo-main.scss b/webseite-react-php-jwt/react-app/src/styles/components/_logo-main.scss new file mode 100644 index 0000000..8d89bba --- /dev/null +++ b/webseite-react-php-jwt/react-app/src/styles/components/_logo-main.scss @@ -0,0 +1,23 @@ +@use '../abstracts/' as *; + +.logo-main { + min-width: 280px; + max-width: 320px; + @include media-breakpoint-up(md) { + max-width: 360px; + } + img, + svg { + width: 100%; + height: auto; + } + figcaption { + margin: -1px; + padding: 0; + height: 1px; + width: 1px; + clip: rect(0, 0, 0, 0); + visibility: hidden; + overflow: hidden; + } +} diff --git a/webseite-react-php-jwt/react-app/src/styles/components/_nav-main.scss b/webseite-react-php-jwt/react-app/src/styles/components/_nav-main.scss new file mode 100644 index 0000000..86d4729 --- /dev/null +++ b/webseite-react-php-jwt/react-app/src/styles/components/_nav-main.scss @@ -0,0 +1,46 @@ +@use '../abstracts/' as *; + +.m-nav-main { + font-family: $font-menu; + &.bg-body-dark { + background-color: $color-dark-blue; + .navbar-nav .nav-link, + .navbar-brand { + color: $color-white; + } + } + + .nav-auth { + padding: 0.5rem 0; + } + + .nav-auth-session, + .nav-auth-form { + display: flex; + flex-wrap: wrap; + align-items: center; + gap: 0.5rem; + } + + .nav-auth-user { + color: $color-3; + font-weight: 600; + letter-spacing: 0.04em; + } + + .nav-auth-form { + position: relative; + max-width: 28rem; + + .form-control { + width: 8.5rem; + } + } + + .nav-auth-error { + flex-basis: 100%; + margin: 0; + color: $color-yellow; + font-size: 0.8rem; + } +} diff --git a/webseite-react-php-jwt/react-app/src/styles/components/_nav-socials.scss b/webseite-react-php-jwt/react-app/src/styles/components/_nav-socials.scss new file mode 100644 index 0000000..3a96df9 --- /dev/null +++ b/webseite-react-php-jwt/react-app/src/styles/components/_nav-socials.scss @@ -0,0 +1,74 @@ +@use '../abstracts/' as *; +@use 'sass:color'; + +.m-nav-social { + ul { + list-style: none; + padding: 0; + margin: 0; + display: flex; + + justify-content: center; + @include media-breakpoint-up(md) { + justify-content: flex-start; + } + align-items: center; + li { + a { + color: white; + display: inline-block; + padding: 0.5rem; + background-color: color.scale($color-dark-blue, $lightness: 10%); + margin: 3px; + border-radius: 50%; + width: 48px; + height: 48px; + display: flex; + justify-content: center; + align-items: center; + text-decoration: none; + transition: all 0.4s ease-out; + &:hover, + &:focus { + background-color: color.scale($color-5, $lightness: 20%); + } + } + + a[aria-label='youtube'] { + &:hover, + &:focus { + background-color: #f00; + } + } + + a[aria-label='facebook'] { + &:hover, + &:focus { + background-color: #3b5998; + } + } + + a[aria-label='x-twitter'] { + &:hover, + &:focus { + background-color: #000000; + } + } + + a[aria-label='instagram'] { + &:hover, + &:focus { + background: linear-gradient( + 9deg, + rgba(254, 218, 117, 1) 10%, + rgba(250, 126, 30, 1) 30%, + rgba(239, 100, 57, 1) 43%, + rgba(214, 41, 118, 1) 55%, + rgba(150, 47, 191, 1) 67%, + rgba(79, 91, 213, 1) 81% + ); + } + } + } + } +} diff --git a/webseite-react-php-jwt/react-app/src/styles/components/_slider-splide.scss b/webseite-react-php-jwt/react-app/src/styles/components/_slider-splide.scss new file mode 100644 index 0000000..facc6ed --- /dev/null +++ b/webseite-react-php-jwt/react-app/src/styles/components/_slider-splide.scss @@ -0,0 +1,28 @@ +.m-slider-splide, +.slider-splide { + height: 100%; + width: 100%; + + .splide { + height: 100%; + + img { + object-fit: cover; + width: 100%; + height: 100%; + } + .splide__track { + height: 100%; + } + .splide__arrows { + position: relative; + z-index: 999; + top: 50%; + } + .splide__pagination { + position: absolute; + bottom: 0.5rem; + z-index: 999; + } + } +} diff --git a/webseite-react-php-jwt/react-app/src/styles/components/_splide.scss b/webseite-react-php-jwt/react-app/src/styles/components/_splide.scss new file mode 100644 index 0000000..cd00292 --- /dev/null +++ b/webseite-react-php-jwt/react-app/src/styles/components/_splide.scss @@ -0,0 +1,15 @@ +.splider-content { + display: flex; + justify-content: center; + padding: 20px 0; + + figcaption { + margin: -1px; + padding: 0; + height: 1px; + width: 1px; + clip: rect(0, 0, 0, 0); + visibility: hidden; + overflow: hidden; + } +} diff --git a/webseite-react-php-jwt/react-app/src/styles/components/_table-products.scss b/webseite-react-php-jwt/react-app/src/styles/components/_table-products.scss new file mode 100644 index 0000000..602408e --- /dev/null +++ b/webseite-react-php-jwt/react-app/src/styles/components/_table-products.scss @@ -0,0 +1,64 @@ +@use '../abstracts/' as *; + +.m-table-products, +.table-products { + tr { + vertical-align: middle; + div { + margin: 0 !important; + } + } + + .col-total { + text-align: right; + width: 100px; + } + + .col-actions { + width: 7.5rem; + text-align: right; + white-space: nowrap; + } + + .btn-action { + display: inline-flex; + align-items: center; + justify-content: center; + width: 2rem; + height: 2rem; + padding: 0; + margin-left: 0.25rem; + border: 0; + line-height: 1; + } + + .btn-action-edit { + background-color: $color-dark-blue; + color: $color-white; + + &:hover, + &:focus-visible, + &.is-active { + background-color: $color-yellow; + color: $color-dark-blue; + } + } + + .btn-action-remove { + background-color: $color-red; + color: $color-white; + + &:hover, + &:focus-visible { + background-color: $color-brown; + color: $color-white; + } + } + + tfoot { + .col-total { + border-top: 2px solid $color-black; + font-weight: bold; + } + } +} diff --git a/webseite-react-php-jwt/react-app/src/styles/components/_table-users.scss b/webseite-react-php-jwt/react-app/src/styles/components/_table-users.scss new file mode 100644 index 0000000..f5ad31d --- /dev/null +++ b/webseite-react-php-jwt/react-app/src/styles/components/_table-users.scss @@ -0,0 +1,6 @@ +.m-table-users, +.table-users { + tr { + vertical-align: middle; + } +} diff --git a/webseite-react-php-jwt/react-app/src/styles/components/_weather-box.scss b/webseite-react-php-jwt/react-app/src/styles/components/_weather-box.scss new file mode 100644 index 0000000..4c27b46 --- /dev/null +++ b/webseite-react-php-jwt/react-app/src/styles/components/_weather-box.scss @@ -0,0 +1,102 @@ +@use 'sass:color'; + +.weather-box { + &.loaded { + // opacity: 1; + // https://cssreference.io/property/animation/ + animation-name: fadeInWeatherBox; + animation-duration: 1s; + animation-fill-mode: both; + } + + // WetterBox nicht anzeigen, wenn Informationen noch nicht vorliegen + opacity: 0; + + font-family: $font-copy; + max-width: 400px; + padding: 1rem; + border-radius: 1rem; + background-color: #fff; + display: flex; + + .weather-pic { + width: 45%; + figure { + overflow: hidden; + img, + svg { + width: 100%; + } + img { + border-radius: 1rem; + } + figcaption { + text-align: center; + } + .description { + text-align: center; + color: #ccc; + line-height: 1.5; + } + } + } + + .weather-information { + padding: 2.5rem 0 0; + width: 55%; + .text-temp { + text-align: center; + font-size: 3rem; + margin: 0; + color: #555; + } + + .text-temp-min-max { + text-align: center; + color: #ccc; + line-height: 1; + margin: 0 0 2rem; + } + + .temp-unit { + font-size: 2.5rem; + color: ligthen(#555, 20%); + // @debug color.scale(#555, $lightness: 20%); + } + + .wind-direction { + display: flex; + text-align: center; + line-height: 1; + margin: 0 0 2rem; + color: #555; + .fa-compass { + transition: all 0.8s ease-out; + font-size: 48px; + width: 48px; + height: 48px; + margin: 0 1rem 0 2rem; + } + + .text-wind-info { + margin: 0; + text-align: center; + line-height: 1.5; + } + .speed { + display: inline; + } + } + } +} + +@keyframes fadeInWeatherBox { + 0% { + opacity: 0; + transform: scale(1.5); + } + 100% { + opacity: 1; + transform: scale(1); + } +} diff --git a/webseite-react-php-jwt/react-app/src/styles/fonts/_amatic-sc-v28-latin.scss b/webseite-react-php-jwt/react-app/src/styles/fonts/_amatic-sc-v28-latin.scss new file mode 100644 index 0000000..83c742c --- /dev/null +++ b/webseite-react-php-jwt/react-app/src/styles/fonts/_amatic-sc-v28-latin.scss @@ -0,0 +1,17 @@ +// amatic-sc-regular - latin +@font-face { + font-display: swap; + font-family: 'Amatic SC'; + font-style: normal; + font-weight: 400; + src: url('/fonts/amatic-sc-v28-latin/amatic-sc-v28-latin-regular.woff2') format('woff2'); +} + +// amatic-sc-700 - latin +@font-face { + font-display: swap; + font-family: 'Amatic SC'; + font-style: normal; + font-weight: 700; + src: url('/fonts/amatic-sc-v28-latin/amatic-sc-v28-latin-700.woff2') format('woff2'); +} diff --git a/webseite-react-php-jwt/react-app/src/styles/fonts/_index.scss b/webseite-react-php-jwt/react-app/src/styles/fonts/_index.scss new file mode 100644 index 0000000..78431b8 --- /dev/null +++ b/webseite-react-php-jwt/react-app/src/styles/fonts/_index.scss @@ -0,0 +1,5 @@ +@forward 'amatic-sc-v28-latin'; +@forward 'merriweather-v33-latin'; +@forward 'open-sans-v40-latin'; +@forward 'source-sans-3-v19-latin'; +@forward 'source-code-pro-v31-latin'; diff --git a/webseite-react-php-jwt/react-app/src/styles/fonts/_merriweather-v33-latin.scss b/webseite-react-php-jwt/react-app/src/styles/fonts/_merriweather-v33-latin.scss new file mode 100644 index 0000000..f4afb52 --- /dev/null +++ b/webseite-react-php-jwt/react-app/src/styles/fonts/_merriweather-v33-latin.scss @@ -0,0 +1,123 @@ +// merriweather-300 - latin +@font-face { + font-display: swap; + font-family: 'Merriweather'; + font-style: normal; + font-weight: 300; + src: url('/fonts/merriweather-v33-latin/merriweather-v33-latin-300.woff2') format('woff2'); +} + +// merriweather-300italic - latin +@font-face { + font-display: swap; + font-family: 'Merriweather'; + font-style: italic; + font-weight: 300; + src: url('/fonts/merriweather-v33-latin/merriweather-v33-latin-300italic.woff2') format('woff2'); +} + +// merriweather-regular - latin +@font-face { + font-display: swap; + font-family: 'Merriweather'; + font-style: normal; + font-weight: 400; + src: url('/fonts/merriweather-v33-latin/merriweather-v33-latin-regular.woff2') format('woff2'); +} + +// merriweather-italic - latin +@font-face { + font-display: swap; + font-family: 'Merriweather'; + font-style: italic; + font-weight: 400; + src: url('/fonts/merriweather-v33-latin/merriweather-v33-latin-italic.woff2') format('woff2'); +} +// merriweather-500 - latin +@font-face { + font-display: swap; + font-family: 'Merriweather'; + font-style: normal; + font-weight: 500; + src: url('/fonts/merriweather-v33-latin/merriweather-v33-latin-500.woff2') format('woff2'); +} +// merriweather-500italic - latin +@font-face { + font-display: swap; + font-family: 'Merriweather'; + font-style: italic; + font-weight: 500; + src: url('/fonts/merriweather-v33-latin/merriweather-v33-latin-500italic.woff2') format('woff2'); +} + +// merriweather-600 - latin +@font-face { + font-display: swap; + font-family: 'Merriweather'; + font-style: normal; + font-weight: 600; + src: url('/fonts/merriweather-v33-latin/merriweather-v33-latin-600.woff2') format('woff2'); +} + +// merriweather-600italic - latin +@font-face { + font-display: swap; + font-family: 'Merriweather'; + font-style: italic; + font-weight: 600; + src: url('/fonts/merriweather-v33-latin/merriweather-v33-latin-600italic.woff2') format('woff2'); +} + +// merriweather-700 - latin +@font-face { + font-display: swap; + font-family: 'Merriweather'; + font-style: normal; + font-weight: 700; + src: url('/fonts/merriweather-v33-latin/merriweather-v33-latin-700.woff2') format('woff2'); +} + +// merriweather-700italic - latin +@font-face { + font-display: swap; + font-family: 'Merriweather'; + font-style: italic; + font-weight: 700; + src: url('/fonts/merriweather-v33-latin/merriweather-v33-latin-700italic.woff2') format('woff2'); +} + +// merriweather-800 - latin +@font-face { + font-display: swap; + font-family: 'Merriweather'; + font-style: normal; + font-weight: 800; + src: url('/fonts/merriweather-v33-latin/merriweather-v33-latin-800.woff2') format('woff2'); +} + +// merriweather-800italic - latin +@font-face { + font-display: swap; + font-family: 'Merriweather'; + font-style: italic; + font-weight: 800; + src: url('/fonts/merriweather-v33-latin/merriweather-v33-latin-800italic.woff2') format('woff2'); +} + +// merriweather-900 - latin +@font-face { + font-display: swap; + font-family: 'Merriweather'; + font-style: normal; + font-weight: 900; + src: url('/fonts/merriweather-v33-latin/merriweather-v33-latin-900.woff2') format('woff2'); +} + +// merriweather-900italic - latin +@font-face { + font-display: swap; + font-family: 'Merriweather'; + font-style: italic; + font-weight: 900; + src: url('/fonts/merriweather-v33-latin/merriweather-v33-latin-900italic.woff2') format('woff2'); +} diff --git a/webseite-react-php-jwt/react-app/src/styles/fonts/_open-sans-v40-latin.scss b/webseite-react-php-jwt/react-app/src/styles/fonts/_open-sans-v40-latin.scss new file mode 100644 index 0000000..725d28c --- /dev/null +++ b/webseite-react-php-jwt/react-app/src/styles/fonts/_open-sans-v40-latin.scss @@ -0,0 +1,108 @@ +// open-sans-300 - latin +@font-face { + font-display: swap; + font-family: 'Open Sans'; + font-style: normal; + font-weight: 300; + src: url('/fonts/open-sans-v40-latin/open-sans-v40-latin-300.woff2') + format('woff2'); +} +// open-sans-300italic - latin +@font-face { + font-display: swap; + font-family: 'Open Sans'; + font-style: italic; + font-weight: 300; + src: url('/fonts/open-sans-v40-latin/open-sans-v40-latin-300italic.woff2') + format('woff2'); +} +// open-sans-regular - latin +@font-face { + font-display: swap; + font-family: 'Open Sans'; + font-style: normal; + font-weight: 400; + src: url('/fonts/open-sans-v40-latin/open-sans-v40-latin-regular.woff2') + format('woff2'); +} +// open-sans-italic - latin +@font-face { + font-display: swap; + font-family: 'Open Sans'; + font-style: italic; + font-weight: 400; + src: url('/fonts/open-sans-v40-latin/open-sans-v40-latin-italic.woff2') + format('woff2'); +} +// open-sans-500 - latin +@font-face { + font-display: swap; + font-family: 'Open Sans'; + font-style: normal; + font-weight: 500; + src: url('/fonts/open-sans-v40-latin/open-sans-v40-latin-500.woff2') + format('woff2'); +} +// open-sans-500italic - latin +@font-face { + font-display: swap; + font-family: 'Open Sans'; + font-style: italic; + font-weight: 500; + src: url('/fonts/open-sans-v40-latin/open-sans-v40-latin-500italic.woff2') + format('woff2'); +} +// open-sans-600 - latin +@font-face { + font-display: swap; + font-family: 'Open Sans'; + font-style: normal; + font-weight: 600; + src: url('/fonts/open-sans-v40-latin/open-sans-v40-latin-600.woff2') + format('woff2'); +} +// open-sans-600italic - latin +@font-face { + font-display: swap; + font-family: 'Open Sans'; + font-style: italic; + font-weight: 600; + src: url('/fonts/open-sans-v40-latin/open-sans-v40-latin-600italic.woff2') + format('woff2'); +} +// open-sans-700 - latin +@font-face { + font-display: swap; + font-family: 'Open Sans'; + font-style: normal; + font-weight: 700; + src: url('/fonts/open-sans-v40-latin/open-sans-v40-latin-700.woff2') + format('woff2'); +} +// open-sans-700italic - latin +@font-face { + font-display: swap; + font-family: 'Open Sans'; + font-style: italic; + font-weight: 700; + src: url('/fonts/open-sans-v40-latin/open-sans-v40-latin-700italic.woff2') + format('woff2'); +} +// open-sans-800 - latin +@font-face { + font-display: swap; + font-family: 'Open Sans'; + font-style: normal; + font-weight: 800; + src: url('/fonts/open-sans-v40-latin/open-sans-v40-latin-800.woff2') + format('woff2'); +} +// open-sans-800italic - latin +@font-face { + font-display: swap; + font-family: 'Open Sans'; + font-style: italic; + font-weight: 800; + src: url('/fonts/open-sans-v40-latin/open-sans-v40-latin-800italic.woff2') + format('woff2'); +} diff --git a/webseite-react-php-jwt/react-app/src/styles/fonts/_source-code-pro-v31-latin.scss b/webseite-react-php-jwt/react-app/src/styles/fonts/_source-code-pro-v31-latin.scss new file mode 100644 index 0000000..e57093c --- /dev/null +++ b/webseite-react-php-jwt/react-app/src/styles/fonts/_source-code-pro-v31-latin.scss @@ -0,0 +1,133 @@ +// source-code-pro-200italic - latin +@font-face { + font-display: swap; + font-family: 'Source Code Pro'; + font-style: italic; + font-weight: 200; + src: url('/fonts/source-code-pro-v31-latin/source-code-pro-v31-latin-200italic.woff2') format('woff2'); +} + +// source-code-pro-300 - latin +@font-face { + font-display: swap; + font-family: 'Source Code Pro'; + font-style: normal; + font-weight: 300; + src: url('/fonts/source-code-pro-v31-latin/source-code-pro-v31-latin-300.woff2') format('woff2'); +} + +// source-code-pro-300italic - latin +@font-face { + font-display: swap; + font-family: 'Source Code Pro'; + font-style: italic; + font-weight: 300; + src: url('/fonts/source-code-pro-v31-latin/source-code-pro-v31-latin-300italic.woff2') format('woff2'); +} + +// source-code-pro-regular - latin +@font-face { + font-display: swap; + font-family: 'Source Code Pro'; + font-style: normal; + font-weight: 400; + src: url('/fonts/source-code-pro-v31-latin/source-code-pro-v31-latin-regular.woff2') format('woff2'); +} + +// source-code-pro-italic - latin +@font-face { + font-display: swap; + font-family: 'Source Code Pro'; + font-style: italic; + font-weight: 400; + src: url('/fonts/source-code-pro-v31-latin/source-code-pro-v31-latin-italic.woff2') format('woff2'); +} + +// source-code-pro-500 - latin +@font-face { + font-display: swap; + font-family: 'Source Code Pro'; + font-style: normal; + font-weight: 500; + src: url('/fonts/source-code-pro-v31-latin/source-code-pro-v31-latin-500.woff2') format('woff2'); +} + +// source-code-pro-500italic - latin +@font-face { + font-display: swap; + font-family: 'Source Code Pro'; + font-style: italic; + font-weight: 500; + src: url('/fonts/source-code-pro-v31-latin/source-code-pro-v31-latin-500italic.woff2') format('woff2'); +} + +// source-code-pro-600 - latin +@font-face { + font-display: swap; + font-family: 'Source Code Pro'; + font-style: normal; + font-weight: 600; + src: url('/fonts/source-code-pro-v31-latin/source-code-pro-v31-latin-600.woff2') format('woff2'); +} + +// source-code-pro-600italic - latin +@font-face { + font-display: swap; + font-family: 'Source Code Pro'; + font-style: italic; + font-weight: 600; + src: url('/fonts/source-code-pro-v31-latin/source-code-pro-v31-latin-600italic.woff2') format('woff2'); +} + +// source-code-pro-700 - latin +@font-face { + font-display: swap; + font-family: 'Source Code Pro'; + font-style: normal; + font-weight: 700; + src: url('/fonts/source-code-pro-v31-latin/source-code-pro-v31-latin-700.woff2') format('woff2'); +} + +// source-code-pro-700italic - latin +@font-face { + font-display: swap; + font-family: 'Source Code Pro'; + font-style: italic; + font-weight: 700; + src: url('/fonts/source-code-pro-v31-latin/source-code-pro-v31-latin-700italic.woff2') format('woff2'); +} + +// source-code-pro-800 - latin +@font-face { + font-display: swap; + font-family: 'Source Code Pro'; + font-style: normal; + font-weight: 800; + src: url('/fonts/source-code-pro-v31-latin/source-code-pro-v31-latin-800.woff2') format('woff2'); +} +// source-code-pro-800italic - latin +@font-face { + font-display: swap; + font-family: 'Source Code Pro'; + font-style: italic; + font-weight: 800; + src: url('/fonts/source-code-pro-v31-latin/source-code-pro-v31-latin-800italic.woff2') format('woff2'); +} + +// source-code-pro-900 - latin +@font-face { + font-display: swap; + font-family: 'Source Code Pro'; + font-style: normal; + font-weight: 900; + src: url('/fonts/source-code-pro-v31-latin/source-code-pro-v31-latin-900.woff2') format('woff2'); +} + +// source-code-pro-900italic - latin +@font-face { + font-display: swap; + font-family: 'Source Code Pro'; + font-style: italic; + font-weight: 900; + src: url('/fonts/source-code-pro-v31-latin/source-code-pro-v31-latin-900italic.woff2') format('woff2'); +} diff --git a/webseite-react-php-jwt/react-app/src/styles/fonts/_source-sans-3-v19-latin.scss b/webseite-react-php-jwt/react-app/src/styles/fonts/_source-sans-3-v19-latin.scss new file mode 100644 index 0000000..694a813 --- /dev/null +++ b/webseite-react-php-jwt/react-app/src/styles/fonts/_source-sans-3-v19-latin.scss @@ -0,0 +1,143 @@ +// source-sans-3-200 - latin +@font-face { + font-display: swap; + font-family: 'Source Sans 3'; + font-style: normal; + font-weight: 200; + src: url('/fonts/source-sans-3-v19-latin/source-sans-3-v19-latin-200.woff2') format('woff2'); +} + +// source-sans-3-200italic - latin +@font-face { + font-display: swap; + font-family: 'Source Sans 3'; + font-style: italic; + font-weight: 200; + src: url('/fonts/source-sans-3-v19-latin/source-sans-3-v19-latin-200italic.woff2') format('woff2'); +} + +// source-sans-3-300 - latin +@font-face { + font-display: swap; + font-family: 'Source Sans 3'; + font-style: normal; + font-weight: 300; + src: url('/fonts/source-sans-3-v19-latin/source-sans-3-v19-latin-300.woff2') format('woff2'); +} + +// source-sans-3-300italic - latin +@font-face { + font-display: swap; + font-family: 'Source Sans 3'; + font-style: italic; + font-weight: 300; + src: url('/fonts/source-sans-3-v19-latin/source-sans-3-v19-latin-300italic.woff2') format('woff2'); +} + +// source-sans-3-regular - latin +@font-face { + font-display: swap; + font-family: 'Source Sans 3'; + font-style: normal; + font-weight: 400; + src: url('/fonts/source-sans-3-v19-latin/source-sans-3-v19-latin-regular.woff2') format('woff2'); +} + +// source-sans-3-italic - latin +@font-face { + font-display: swap; + font-family: 'Source Sans 3'; + font-style: italic; + font-weight: 400; + src: url('/fonts/source-sans-3-v19-latin/source-sans-3-v19-latin-italic.woff2') format('woff2'); +} + +// source-sans-3-500 - latin +@font-face { + font-display: swap; + font-family: 'Source Sans 3'; + font-style: normal; + font-weight: 500; + src: url('/fonts/source-sans-3-v19-latin/source-sans-3-v19-latin-500.woff2') format('woff2'); +} + +// source-sans-3-500italic - latin +@font-face { + font-display: swap; + font-family: 'Source Sans 3'; + font-style: italic; + font-weight: 500; + src: url('/fonts/source-sans-3-v19-latin/source-sans-3-v19-latin-500italic.woff2') format('woff2'); +} + +// source-sans-3-600 - latin +@font-face { + font-display: swap; + font-family: 'Source Sans 3'; + font-style: normal; + font-weight: 600; + src: url('/fonts/source-sans-3-v19-latin/source-sans-3-v19-latin-600.woff2') format('woff2'); +} + +// source-sans-3-600italic - latin +@font-face { + font-display: swap; + font-family: 'Source Sans 3'; + font-style: italic; + font-weight: 600; + src: url('/fonts/source-sans-3-v19-latin/source-sans-3-v19-latin-600italic.woff2') format('woff2'); +} + +// source-sans-3-700 - latin +@font-face { + font-display: swap; + font-family: 'Source Sans 3'; + font-style: normal; + font-weight: 700; + src: url('/fonts/source-sans-3-v19-latin/source-sans-3-v19-latin-700.woff2') format('woff2'); +} + +// source-sans-3-700italic - latin +@font-face { + font-display: swap; + font-family: 'Source Sans 3'; + font-style: italic; + font-weight: 700; + src: url('/fonts/source-sans-3-v19-latin/source-sans-3-v19-latin-700italic.woff2') format('woff2'); +} + +// source-sans-3-800 - latin +@font-face { + font-display: swap; + font-family: 'Source Sans 3'; + font-style: normal; + font-weight: 800; + src: url('/fonts/source-sans-3-v19-latin/source-sans-3-v19-latin-800.woff2') format('woff2'); +} + +// source-sans-3-800italic - latin +@font-face { + font-display: swap; + font-family: 'Source Sans 3'; + font-style: italic; + font-weight: 800; + src: url('/fonts/source-sans-3-v19-latin/source-sans-3-v19-latin-800italic.woff2') format('woff2'); +} + +// source-sans-3-900 - latin +@font-face { + font-display: swap; + font-family: 'Source Sans 3'; + font-style: normal; + font-weight: 900; + src: url('/fonts/source-sans-3-v19-latin/source-sans-3-v19-latin-900.woff2') format('woff2'); +} + +// source-sans-3-900italic - latin +@font-face { + font-display: swap; + font-family: 'Source Sans 3'; + font-style: italic; + font-weight: 900; + src: url('/fonts/source-sans-3-v19-latin/source-sans-3-v19-latin-900italic.woff2') format('woff2'); +} diff --git a/webseite-react-php-jwt/react-app/src/styles/icons/_index.scss b/webseite-react-php-jwt/react-app/src/styles/icons/_index.scss new file mode 100644 index 0000000..8515778 --- /dev/null +++ b/webseite-react-php-jwt/react-app/src/styles/icons/_index.scss @@ -0,0 +1,4 @@ +@use 'fontawesome-7.1.0/solid.scss'; +@use 'fontawesome-7.1.0/regular.scss'; +@use 'fontawesome-7.1.0/brands.scss'; +@use 'fontawesome-7.1.0/fontawesome.scss'; diff --git a/webseite-react-php-jwt/react-app/src/styles/icons/fontawesome-7.1.0/_animated.scss b/webseite-react-php-jwt/react-app/src/styles/icons/fontawesome-7.1.0/_animated.scss new file mode 100644 index 0000000..0ac7dd4 --- /dev/null +++ b/webseite-react-php-jwt/react-app/src/styles/icons/fontawesome-7.1.0/_animated.scss @@ -0,0 +1,150 @@ +// animating icons +// -------------------------- +@use 'variables' as v; + +.#{v.$css-prefix}-beat { + animation-name: #{v.$css-prefix}-beat; + animation-delay: var(--#{v.$css-prefix}-animation-delay, 0s); + animation-direction: var(--#{v.$css-prefix}-animation-direction, normal); + animation-duration: var(--#{v.$css-prefix}-animation-duration, 1s); + animation-iteration-count: var(--#{v.$css-prefix}-animation-iteration-count, infinite); + animation-timing-function: var(--#{v.$css-prefix}-animation-timing, ease-in-out); +} + +.#{v.$css-prefix}-bounce { + animation-name: #{v.$css-prefix}-bounce; + animation-delay: var(--#{v.$css-prefix}-animation-delay, 0s); + animation-direction: var(--#{v.$css-prefix}-animation-direction, normal); + animation-duration: var(--#{v.$css-prefix}-animation-duration, 1s); + animation-iteration-count: var(--#{v.$css-prefix}-animation-iteration-count, infinite); + animation-timing-function: var(--#{v.$css-prefix}-animation-timing, cubic-bezier(0.280, 0.840, 0.420, 1)); +} + +.#{v.$css-prefix}-fade { + animation-name: #{v.$css-prefix}-fade; + animation-delay: var(--#{v.$css-prefix}-animation-delay, 0s); + animation-direction: var(--#{v.$css-prefix}-animation-direction, normal); + animation-duration: var(--#{v.$css-prefix}-animation-duration, 1s); + animation-iteration-count: var(--#{v.$css-prefix}-animation-iteration-count, infinite); + animation-timing-function: var(--#{v.$css-prefix}-animation-timing, cubic-bezier(.4,0,.6,1)); +} + +.#{v.$css-prefix}-beat-fade { + animation-name: #{v.$css-prefix}-beat-fade; + animation-delay: var(--#{v.$css-prefix}-animation-delay, 0s); + animation-direction: var(--#{v.$css-prefix}-animation-direction, normal); + animation-duration: var(--#{v.$css-prefix}-animation-duration, 1s); + animation-iteration-count: var(--#{v.$css-prefix}-animation-iteration-count, infinite); + animation-timing-function: var(--#{v.$css-prefix}-animation-timing, cubic-bezier(.4,0,.6,1)); +} + +.#{v.$css-prefix}-flip { + animation-name: #{v.$css-prefix}-flip; + animation-delay: var(--#{v.$css-prefix}-animation-delay, 0s); + animation-direction: var(--#{v.$css-prefix}-animation-direction, normal); + animation-duration: var(--#{v.$css-prefix}-animation-duration, 1s); + animation-iteration-count: var(--#{v.$css-prefix}-animation-iteration-count, infinite); + animation-timing-function: var(--#{v.$css-prefix}-animation-timing, ease-in-out); +} + +.#{v.$css-prefix}-shake { + animation-name: #{v.$css-prefix}-shake; + animation-delay: var(--#{v.$css-prefix}-animation-delay, 0s); + animation-direction: var(--#{v.$css-prefix}-animation-direction, normal); + animation-duration: var(--#{v.$css-prefix}-animation-duration, 1s); + animation-iteration-count: var(--#{v.$css-prefix}-animation-iteration-count, infinite); + animation-timing-function: var(--#{v.$css-prefix}-animation-timing, linear); +} + +.#{v.$css-prefix}-spin { + animation-name: #{v.$css-prefix}-spin; + animation-delay: var(--#{v.$css-prefix}-animation-delay, 0s); + animation-direction: var(--#{v.$css-prefix}-animation-direction, normal); + animation-duration: var(--#{v.$css-prefix}-animation-duration, 2s); + animation-iteration-count: var(--#{v.$css-prefix}-animation-iteration-count, infinite); + animation-timing-function: var(--#{v.$css-prefix}-animation-timing, linear); +} + +.#{v.$css-prefix}-spin-reverse { + --#{v.$css-prefix}-animation-direction: reverse; +} + +.#{v.$css-prefix}-pulse, +.#{v.$css-prefix}-spin-pulse { + animation-name: #{v.$css-prefix}-spin; + animation-direction: var(--#{v.$css-prefix}-animation-direction, normal); + animation-duration: var(--#{v.$css-prefix}-animation-duration, 1s); + animation-iteration-count: var(--#{v.$css-prefix}-animation-iteration-count, infinite); + animation-timing-function: var(--#{v.$css-prefix}-animation-timing, steps(8)); +} + +// if agent or operating system prefers reduced motion, disable animations +// see: https://www.smashingmagazine.com/2020/09/design-reduced-motion-sensitivities/ +// see: https://developer.mozilla.org/en-US/docs/Web/CSS/@media/prefers-reduced-motion +@media (prefers-reduced-motion: reduce) { + .#{v.$css-prefix}-beat, + .#{v.$css-prefix}-bounce, + .#{v.$css-prefix}-fade, + .#{v.$css-prefix}-beat-fade, + .#{v.$css-prefix}-flip, + .#{v.$css-prefix}-pulse, + .#{v.$css-prefix}-shake, + .#{v.$css-prefix}-spin, + .#{v.$css-prefix}-spin-pulse { + animation: none !important; + transition: none !important; + } +} + +@keyframes #{v.$css-prefix}-beat { + 0%, 90% { transform: scale(1); } + 45% { transform: scale(var(--#{v.$css-prefix}-beat-scale, 1.25)); } +} + +@keyframes #{v.$css-prefix}-bounce { + 0% { transform: scale(1,1) translateY(0); } + 10% { transform: scale(var(--#{v.$css-prefix}-bounce-start-scale-x, 1.1),var(--#{v.$css-prefix}-bounce-start-scale-y, 0.9)) translateY(0); } + 30% { transform: scale(var(--#{v.$css-prefix}-bounce-jump-scale-x, 0.9),var(--#{v.$css-prefix}-bounce-jump-scale-y, 1.1)) translateY(var(--#{v.$css-prefix}-bounce-height, -0.5em)); } + 50% { transform: scale(var(--#{v.$css-prefix}-bounce-land-scale-x, 1.05),var(--#{v.$css-prefix}-bounce-land-scale-y, 0.95)) translateY(0); } + 57% { transform: scale(1,1) translateY(var(--#{v.$css-prefix}-bounce-rebound, -0.125em)); } + 64% { transform: scale(1,1) translateY(0); } + 100% { transform: scale(1,1) translateY(0); } +} + +@keyframes #{v.$css-prefix}-fade { + 50% { opacity: var(--#{v.$css-prefix}-fade-opacity, 0.4); } +} + +@keyframes #{v.$css-prefix}-beat-fade { + 0%, 100% { + opacity: var(--#{v.$css-prefix}-beat-fade-opacity, 0.4); + transform: scale(1); + } + 50% { + opacity: 1; + transform: scale(var(--#{v.$css-prefix}-beat-fade-scale, 1.125)); + } +} + +@keyframes #{v.$css-prefix}-flip { + 50% { + transform: rotate3d(var(--#{v.$css-prefix}-flip-x, 0), var(--#{v.$css-prefix}-flip-y, 1), var(--#{v.$css-prefix}-flip-z, 0), var(--#{v.$css-prefix}-flip-angle, -180deg)); + } +} + +@keyframes #{v.$css-prefix}-shake { + 0% { transform: rotate(-15deg); } + 4% { transform: rotate(15deg); } + 8%, 24% { transform: rotate(-18deg); } + 12%, 28% { transform: rotate(18deg); } + 16% { transform: rotate(-22deg); } + 20% { transform: rotate(22deg); } + 32% { transform: rotate(-12deg); } + 36% { transform: rotate(12deg); } + 40%, 100% { transform: rotate(0deg); } +} + +@keyframes #{v.$css-prefix}-spin { + 0% { transform: rotate(0deg); } + 100% { transform: rotate(360deg); } +} diff --git a/webseite-react-php-jwt/react-app/src/styles/icons/fontawesome-7.1.0/_bordered.scss b/webseite-react-php-jwt/react-app/src/styles/icons/fontawesome-7.1.0/_bordered.scss new file mode 100644 index 0000000..47408e4 --- /dev/null +++ b/webseite-react-php-jwt/react-app/src/styles/icons/fontawesome-7.1.0/_bordered.scss @@ -0,0 +1,24 @@ +// bordered icons +// ------------------------- +@use 'variables' as v; + +/* Heads Up: Bordered Icons will not be supported in the future! + - This feature will be deprecated in the next major release of Font Awesome (v8)! + - You may continue to use it in this version *v7), but it will not be supported in Font Awesome v8. +*/ + +/* Notes: +* --@{v.$css-prefix}-border-width = 1/16 by default (to render as ~1px based on a 16px default font-size) +* --@{v.$css-prefix}-border-padding = + ** 3/16 for vertical padding (to give ~2px of vertical whitespace around an icon considering it's vertical alignment) + ** 4/16 for horizontal padding (to give ~4px of horizontal whitespace around an icon) +*/ + +.#{v.$css-prefix}-border { + border-color: var(--#{v.$css-prefix}-border-color, #{v.$border-color}); + border-radius: var(--#{v.$css-prefix}-border-radius, #{v.$border-radius}); + border-style: var(--#{v.$css-prefix}-border-style, #{v.$border-style}); + border-width: var(--#{v.$css-prefix}-border-width, #{v.$border-width}); + box-sizing: var(--#{v.$css-prefix}-border-box-sizing, #{v.$border-box-sizing}); + padding: var(--#{v.$css-prefix}-border-padding, #{v.$border-padding}); +} diff --git a/webseite-react-php-jwt/react-app/src/styles/icons/fontawesome-7.1.0/_core.scss b/webseite-react-php-jwt/react-app/src/styles/icons/fontawesome-7.1.0/_core.scss new file mode 100644 index 0000000..5a9d9e5 --- /dev/null +++ b/webseite-react-php-jwt/react-app/src/styles/icons/fontawesome-7.1.0/_core.scss @@ -0,0 +1,43 @@ +// base icon class definition +// ------------------------- +@use 'variables' as v; +@use 'mixins' as m; + +.#{v.$css-prefix}-solid, +.#{v.$css-prefix}-regular, +.#{v.$css-prefix}-brands, +.#{v.$css-prefix}-classic, +.fas, +.far, +.fab, +.#{v.$css-prefix} { + @include m.fa-icon(); +} + +:is( + .fas, + .far, + .fab, + .#{v.$css-prefix}-solid, + .#{v.$css-prefix}-regular, + .#{v.$css-prefix}-brands, + .#{v.$css-prefix}-classic, + .fa +)::before { + content: var(#{v.$icon-property})/""; +} + +@supports not (content: ''/'') { +:is( + .fas, + .far, + .fab, + .#{v.$css-prefix}-solid, + .#{v.$css-prefix}-regular, + .#{v.$css-prefix}-brands, + .#{v.$css-prefix}-classic, + .fa +)::before { + content: var(#{v.$icon-property}); + } +} \ No newline at end of file diff --git a/webseite-react-php-jwt/react-app/src/styles/icons/fontawesome-7.1.0/_fa.scss b/webseite-react-php-jwt/react-app/src/styles/icons/fontawesome-7.1.0/_fa.scss new file mode 100644 index 0000000..0ab0481 --- /dev/null +++ b/webseite-react-php-jwt/react-app/src/styles/icons/fontawesome-7.1.0/_fa.scss @@ -0,0 +1,3 @@ +@forward "functions"; +@forward "variables"; +@forward "mixins"; diff --git a/webseite-react-php-jwt/react-app/src/styles/icons/fontawesome-7.1.0/_functions.scss b/webseite-react-php-jwt/react-app/src/styles/icons/fontawesome-7.1.0/_functions.scss new file mode 100644 index 0000000..ab1ef1f --- /dev/null +++ b/webseite-react-php-jwt/react-app/src/styles/icons/fontawesome-7.1.0/_functions.scss @@ -0,0 +1,8 @@ +// functions +// -------------------------- +@use "sass:string"; + +// fa-content: convenience function used to set content property +@function fa-content($var) { + @return string.unquote("\"#{ $var }\""); +} diff --git a/webseite-react-php-jwt/react-app/src/styles/icons/fontawesome-7.1.0/_icons.scss b/webseite-react-php-jwt/react-app/src/styles/icons/fontawesome-7.1.0/_icons.scss new file mode 100644 index 0000000..8f62efb --- /dev/null +++ b/webseite-react-php-jwt/react-app/src/styles/icons/fontawesome-7.1.0/_icons.scss @@ -0,0 +1,15 @@ +// specific icon class definition +// ------------------------- +@use "sass:string"; +@use 'variables' as v; + +/* Font Awesome uses the Unicode Private Use Area (PUA) to ensure screen + readers do not read off random characters that represent icons */ + + +@each $name, $icon in v.$icons { + .#{v.$css-prefix}-#{$name} { + #{v.$icon-property}: string.unquote("\"#{ $icon }\""); + } +} + diff --git a/webseite-react-php-jwt/react-app/src/styles/icons/fontawesome-7.1.0/_list.scss b/webseite-react-php-jwt/react-app/src/styles/icons/fontawesome-7.1.0/_list.scss new file mode 100644 index 0000000..d25b4ab --- /dev/null +++ b/webseite-react-php-jwt/react-app/src/styles/icons/fontawesome-7.1.0/_list.scss @@ -0,0 +1,19 @@ +// icons in a list +// ------------------------- +@use 'variables' as v; + +.#{v.$css-prefix}-ul { + list-style-type: none; + margin-inline-start: var(--#{v.$css-prefix}-li-margin, #{v.$li-margin}); + padding-inline-start: 0; + + > li { position: relative; } +} + +.#{v.$css-prefix}-li { + inset-inline-start: calc(-1 * var(--#{v.$css-prefix}-li-width, #{v.$li-width})); + position: absolute; + text-align: center; + width: var(--#{v.$css-prefix}-li-width, #{v.$li-width}); + line-height: inherit; +} diff --git a/webseite-react-php-jwt/react-app/src/styles/icons/fontawesome-7.1.0/_mixins.scss b/webseite-react-php-jwt/react-app/src/styles/icons/fontawesome-7.1.0/_mixins.scss new file mode 100644 index 0000000..99fee68 --- /dev/null +++ b/webseite-react-php-jwt/react-app/src/styles/icons/fontawesome-7.1.0/_mixins.scss @@ -0,0 +1,28 @@ +// mixins +// -------------------------- +@use 'variables' as v; + +// base rendering for an icon +@mixin fa-icon($family: v.$family) { + --_#{v.$css-prefix}-family: var(--#{v.$css-prefix}-family, var(--#{v.$css-prefix}-style-family, '#{$family}')); + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; + display: var(--#{v.$css-prefix}-display, #{v.$display}); + font-family: var(--_#{v.$css-prefix}-family); + font-feature-settings: normal; + font-style: normal; + font-synthesis: none; + font-variant: normal; + font-weight: var(--#{v.$css-prefix}-style, #{v.$style}); + line-height: 1; + text-align: center; + text-rendering: auto; + width: var(--#{v.$css-prefix}-width, #{v.$fw-width}); +} + +// sets relative font-sizing and alignment (in _sizing) +@mixin fa-size ($font-size) { + font-size: calc(#{$font-size} / #{v.$size-scale-base} * 1em); /* converts a #{$font-size}px size into an em-based value that's relative to the scale's #{v.$size-scale-base}px base */ + line-height: calc(1 / #{$font-size} * 1em); /* sets the line-height of the icon back to that of it's parent */ + vertical-align: calc(((6 / #{$font-size}) - (3 / 8)) * 1em); /* vertically centers the icon taking into account the surrounding text's descender */ +} diff --git a/webseite-react-php-jwt/react-app/src/styles/icons/fontawesome-7.1.0/_pulled.scss b/webseite-react-php-jwt/react-app/src/styles/icons/fontawesome-7.1.0/_pulled.scss new file mode 100644 index 0000000..349125f --- /dev/null +++ b/webseite-react-php-jwt/react-app/src/styles/icons/fontawesome-7.1.0/_pulled.scss @@ -0,0 +1,15 @@ +// pulled icons +// ------------------------- +@use 'variables' as v; + +.#{v.$css-prefix}-pull-left, +.#{v.$css-prefix}-pull-start { + float: inline-start; + margin-inline-end: var(--#{v.$css-prefix}-pull-margin, #{v.$pull-margin}); +} + +.#{v.$css-prefix}-pull-right, +.#{v.$css-prefix}-pull-end { + float: inline-end; + margin-inline-start: var(--#{v.$css-prefix}-pull-margin, #{v.$pull-margin}); +} diff --git a/webseite-react-php-jwt/react-app/src/styles/icons/fontawesome-7.1.0/_rotated-flipped.scss b/webseite-react-php-jwt/react-app/src/styles/icons/fontawesome-7.1.0/_rotated-flipped.scss new file mode 100644 index 0000000..7f69940 --- /dev/null +++ b/webseite-react-php-jwt/react-app/src/styles/icons/fontawesome-7.1.0/_rotated-flipped.scss @@ -0,0 +1,32 @@ +// rotating + flipping icons +// ------------------------- +@use 'variables' as v; + +.#{v.$css-prefix}-rotate-90 { + transform: rotate(90deg); +} + +.#{v.$css-prefix}-rotate-180 { + transform: rotate(180deg); +} + +.#{v.$css-prefix}-rotate-270 { + transform: rotate(270deg); +} + +.#{v.$css-prefix}-flip-horizontal { + transform: scale(-1, 1); +} + +.#{v.$css-prefix}-flip-vertical { + transform: scale(1, -1); +} + +.#{v.$css-prefix}-flip-both, +.#{v.$css-prefix}-flip-horizontal.#{v.$css-prefix}-flip-vertical { + transform: scale(-1, -1); +} + +.#{v.$css-prefix}-rotate-by { + transform: rotate(var(--#{v.$css-prefix}-rotate-angle, 0)); +} diff --git a/webseite-react-php-jwt/react-app/src/styles/icons/fontawesome-7.1.0/_shims.scss b/webseite-react-php-jwt/react-app/src/styles/icons/fontawesome-7.1.0/_shims.scss new file mode 100644 index 0000000..b36cee0 --- /dev/null +++ b/webseite-react-php-jwt/react-app/src/styles/icons/fontawesome-7.1.0/_shims.scss @@ -0,0 +1,2193 @@ +@use "sass:string"; +@use 'variables' as v; + +.#{v.$css-prefix}.#{v.$css-prefix}-glass { + #{v.$icon-property}: string.unquote("\"#{ v.$var-martini-glass-empty }\""); +} +.#{v.$css-prefix}.#{v.$css-prefix}-envelope-o { + font-family: 'Font Awesome 7 Free'; + font-weight: 400; +} +.#{v.$css-prefix}.#{v.$css-prefix}-envelope-o { + #{v.$icon-property}: string.unquote("\"#{ v.$var-envelope }\""); +} +.#{v.$css-prefix}.#{v.$css-prefix}-star-o { + font-family: 'Font Awesome 7 Free'; + font-weight: 400; +} +.#{v.$css-prefix}.#{v.$css-prefix}-star-o { + #{v.$icon-property}: string.unquote("\"#{ v.$var-star }\""); +} +.#{v.$css-prefix}.#{v.$css-prefix}-remove { + #{v.$icon-property}: string.unquote("\"#{ v.$var-xmark }\""); +} +.#{v.$css-prefix}.#{v.$css-prefix}-close { + #{v.$icon-property}: string.unquote("\"#{ v.$var-xmark }\""); +} +.#{v.$css-prefix}.#{v.$css-prefix}-gear { + #{v.$icon-property}: string.unquote("\"#{ v.$var-gear }\""); +} +.#{v.$css-prefix}.#{v.$css-prefix}-trash-o { + font-family: 'Font Awesome 7 Free'; + font-weight: 400; +} +.#{v.$css-prefix}.#{v.$css-prefix}-trash-o { + #{v.$icon-property}: string.unquote("\"#{ v.$var-trash-can }\""); +} +.#{v.$css-prefix}.#{v.$css-prefix}-home { + #{v.$icon-property}: string.unquote("\"#{ v.$var-house }\""); +} +.#{v.$css-prefix}.#{v.$css-prefix}-file-o { + font-family: 'Font Awesome 7 Free'; + font-weight: 400; +} +.#{v.$css-prefix}.#{v.$css-prefix}-file-o { + #{v.$icon-property}: string.unquote("\"#{ v.$var-file }\""); +} +.#{v.$css-prefix}.#{v.$css-prefix}-clock-o { + font-family: 'Font Awesome 7 Free'; + font-weight: 400; +} +.#{v.$css-prefix}.#{v.$css-prefix}-clock-o { + #{v.$icon-property}: string.unquote("\"#{ v.$var-clock }\""); +} +.#{v.$css-prefix}.#{v.$css-prefix}-arrow-circle-o-down { + font-family: 'Font Awesome 7 Free'; + font-weight: 400; +} +.#{v.$css-prefix}.#{v.$css-prefix}-arrow-circle-o-down { + #{v.$icon-property}: string.unquote("\"#{ v.$var-circle-down }\""); +} +.#{v.$css-prefix}.#{v.$css-prefix}-arrow-circle-o-up { + font-family: 'Font Awesome 7 Free'; + font-weight: 400; +} +.#{v.$css-prefix}.#{v.$css-prefix}-arrow-circle-o-up { + #{v.$icon-property}: string.unquote("\"#{ v.$var-circle-up }\""); +} +.#{v.$css-prefix}.#{v.$css-prefix}-play-circle-o { + font-family: 'Font Awesome 7 Free'; + font-weight: 400; +} +.#{v.$css-prefix}.#{v.$css-prefix}-play-circle-o { + #{v.$icon-property}: string.unquote("\"#{ v.$var-circle-play }\""); +} +.#{v.$css-prefix}.#{v.$css-prefix}-repeat { + #{v.$icon-property}: string.unquote("\"#{ v.$var-arrow-rotate-right }\""); +} +.#{v.$css-prefix}.#{v.$css-prefix}-rotate-right { + #{v.$icon-property}: string.unquote("\"#{ v.$var-arrow-rotate-right }\""); +} +.#{v.$css-prefix}.#{v.$css-prefix}-refresh { + #{v.$icon-property}: string.unquote("\"#{ v.$var-arrows-rotate }\""); +} +.#{v.$css-prefix}.#{v.$css-prefix}-list-alt { + font-family: 'Font Awesome 7 Free'; + font-weight: 400; +} +.#{v.$css-prefix}.#{v.$css-prefix}-list-alt { + #{v.$icon-property}: string.unquote("\"#{ v.$var-rectangle-list }\""); +} +.#{v.$css-prefix}.#{v.$css-prefix}-dedent { + #{v.$icon-property}: string.unquote("\"#{ v.$var-outdent }\""); +} +.#{v.$css-prefix}.#{v.$css-prefix}-video-camera { + #{v.$icon-property}: string.unquote("\"#{ v.$var-video }\""); +} +.#{v.$css-prefix}.#{v.$css-prefix}-picture-o { + font-family: 'Font Awesome 7 Free'; + font-weight: 400; +} +.#{v.$css-prefix}.#{v.$css-prefix}-picture-o { + #{v.$icon-property}: string.unquote("\"#{ v.$var-image }\""); +} +.#{v.$css-prefix}.#{v.$css-prefix}-photo { + font-family: 'Font Awesome 7 Free'; + font-weight: 400; +} +.#{v.$css-prefix}.#{v.$css-prefix}-photo { + #{v.$icon-property}: string.unquote("\"#{ v.$var-image }\""); +} +.#{v.$css-prefix}.#{v.$css-prefix}-image { + font-family: 'Font Awesome 7 Free'; + font-weight: 400; +} +.#{v.$css-prefix}.#{v.$css-prefix}-image { + #{v.$icon-property}: string.unquote("\"#{ v.$var-image }\""); +} +.#{v.$css-prefix}.#{v.$css-prefix}-map-marker { + #{v.$icon-property}: string.unquote("\"#{ v.$var-location-dot }\""); +} +.#{v.$css-prefix}.#{v.$css-prefix}-pencil-square-o { + font-family: 'Font Awesome 7 Free'; + font-weight: 400; +} +.#{v.$css-prefix}.#{v.$css-prefix}-pencil-square-o { + #{v.$icon-property}: string.unquote("\"#{ v.$var-pen-to-square }\""); +} +.#{v.$css-prefix}.#{v.$css-prefix}-edit { + font-family: 'Font Awesome 7 Free'; + font-weight: 400; +} +.#{v.$css-prefix}.#{v.$css-prefix}-edit { + #{v.$icon-property}: string.unquote("\"#{ v.$var-pen-to-square }\""); +} +.#{v.$css-prefix}.#{v.$css-prefix}-share-square-o { + #{v.$icon-property}: string.unquote("\"#{ v.$var-share-from-square }\""); +} +.#{v.$css-prefix}.#{v.$css-prefix}-check-square-o { + font-family: 'Font Awesome 7 Free'; + font-weight: 400; +} +.#{v.$css-prefix}.#{v.$css-prefix}-check-square-o { + #{v.$icon-property}: string.unquote("\"#{ v.$var-square-check }\""); +} +.#{v.$css-prefix}.#{v.$css-prefix}-arrows { + #{v.$icon-property}: string.unquote("\"#{ v.$var-up-down-left-right }\""); +} +.#{v.$css-prefix}.#{v.$css-prefix}-times-circle-o { + font-family: 'Font Awesome 7 Free'; + font-weight: 400; +} +.#{v.$css-prefix}.#{v.$css-prefix}-times-circle-o { + #{v.$icon-property}: string.unquote("\"#{ v.$var-circle-xmark }\""); +} +.#{v.$css-prefix}.#{v.$css-prefix}-check-circle-o { + font-family: 'Font Awesome 7 Free'; + font-weight: 400; +} +.#{v.$css-prefix}.#{v.$css-prefix}-check-circle-o { + #{v.$icon-property}: string.unquote("\"#{ v.$var-circle-check }\""); +} +.#{v.$css-prefix}.#{v.$css-prefix}-mail-forward { + #{v.$icon-property}: string.unquote("\"#{ v.$var-share }\""); +} +.#{v.$css-prefix}.#{v.$css-prefix}-expand { + #{v.$icon-property}: string.unquote("\"#{ v.$var-up-right-and-down-left-from-center }\""); +} +.#{v.$css-prefix}.#{v.$css-prefix}-compress { + #{v.$icon-property}: string.unquote("\"#{ v.$var-down-left-and-up-right-to-center }\""); +} +.#{v.$css-prefix}.#{v.$css-prefix}-eye { + font-family: 'Font Awesome 7 Free'; + font-weight: 400; +} +.#{v.$css-prefix}.#{v.$css-prefix}-eye-slash { + font-family: 'Font Awesome 7 Free'; + font-weight: 400; +} +.#{v.$css-prefix}.#{v.$css-prefix}-warning { + #{v.$icon-property}: string.unquote("\"#{ v.$var-triangle-exclamation }\""); +} +.#{v.$css-prefix}.#{v.$css-prefix}-calendar { + #{v.$icon-property}: string.unquote("\"#{ v.$var-calendar-days }\""); +} +.#{v.$css-prefix}.#{v.$css-prefix}-arrows-v { + #{v.$icon-property}: string.unquote("\"#{ v.$var-up-down }\""); +} +.#{v.$css-prefix}.#{v.$css-prefix}-arrows-h { + #{v.$icon-property}: string.unquote("\"#{ v.$var-left-right }\""); +} +.#{v.$css-prefix}.#{v.$css-prefix}-bar-chart { + #{v.$icon-property}: string.unquote("\"#{ v.$var-chart-column }\""); +} +.#{v.$css-prefix}.#{v.$css-prefix}-bar-chart-o { + #{v.$icon-property}: string.unquote("\"#{ v.$var-chart-column }\""); +} +.#{v.$css-prefix}.#{v.$css-prefix}-twitter-square { + font-family: 'Font Awesome 7 Brands'; + font-weight: 400; +} +.#{v.$css-prefix}.#{v.$css-prefix}-twitter-square { + #{v.$icon-property}: string.unquote("\"#{ v.$var-square-twitter }\""); +} +.#{v.$css-prefix}.#{v.$css-prefix}-facebook-square { + font-family: 'Font Awesome 7 Brands'; + font-weight: 400; +} +.#{v.$css-prefix}.#{v.$css-prefix}-facebook-square { + #{v.$icon-property}: string.unquote("\"#{ v.$var-square-facebook }\""); +} +.#{v.$css-prefix}.#{v.$css-prefix}-gears { + #{v.$icon-property}: string.unquote("\"#{ v.$var-gears }\""); +} +.#{v.$css-prefix}.#{v.$css-prefix}-thumbs-o-up { + font-family: 'Font Awesome 7 Free'; + font-weight: 400; +} +.#{v.$css-prefix}.#{v.$css-prefix}-thumbs-o-up { + #{v.$icon-property}: string.unquote("\"#{ v.$var-thumbs-up }\""); +} +.#{v.$css-prefix}.#{v.$css-prefix}-thumbs-o-down { + font-family: 'Font Awesome 7 Free'; + font-weight: 400; +} +.#{v.$css-prefix}.#{v.$css-prefix}-thumbs-o-down { + #{v.$icon-property}: string.unquote("\"#{ v.$var-thumbs-down }\""); +} +.#{v.$css-prefix}.#{v.$css-prefix}-heart-o { + font-family: 'Font Awesome 7 Free'; + font-weight: 400; +} +.#{v.$css-prefix}.#{v.$css-prefix}-heart-o { + #{v.$icon-property}: string.unquote("\"#{ v.$var-heart }\""); +} +.#{v.$css-prefix}.#{v.$css-prefix}-sign-out { + #{v.$icon-property}: string.unquote("\"#{ v.$var-right-from-bracket }\""); +} +.#{v.$css-prefix}.#{v.$css-prefix}-linkedin-square { + font-family: 'Font Awesome 7 Brands'; + font-weight: 400; +} +.#{v.$css-prefix}.#{v.$css-prefix}-linkedin-square { + #{v.$icon-property}: string.unquote("\"#{ v.$var-linkedin }\""); +} +.#{v.$css-prefix}.#{v.$css-prefix}-thumb-tack { + #{v.$icon-property}: string.unquote("\"#{ v.$var-thumbtack }\""); +} +.#{v.$css-prefix}.#{v.$css-prefix}-external-link { + #{v.$icon-property}: string.unquote("\"#{ v.$var-up-right-from-square }\""); +} +.#{v.$css-prefix}.#{v.$css-prefix}-sign-in { + #{v.$icon-property}: string.unquote("\"#{ v.$var-right-to-bracket }\""); +} +.#{v.$css-prefix}.#{v.$css-prefix}-github-square { + font-family: 'Font Awesome 7 Brands'; + font-weight: 400; +} +.#{v.$css-prefix}.#{v.$css-prefix}-github-square { + #{v.$icon-property}: string.unquote("\"#{ v.$var-square-github }\""); +} +.#{v.$css-prefix}.#{v.$css-prefix}-lemon-o { + font-family: 'Font Awesome 7 Free'; + font-weight: 400; +} +.#{v.$css-prefix}.#{v.$css-prefix}-lemon-o { + #{v.$icon-property}: string.unquote("\"#{ v.$var-lemon }\""); +} +.#{v.$css-prefix}.#{v.$css-prefix}-square-o { + font-family: 'Font Awesome 7 Free'; + font-weight: 400; +} +.#{v.$css-prefix}.#{v.$css-prefix}-square-o { + #{v.$icon-property}: string.unquote("\"#{ v.$var-square }\""); +} +.#{v.$css-prefix}.#{v.$css-prefix}-bookmark-o { + font-family: 'Font Awesome 7 Free'; + font-weight: 400; +} +.#{v.$css-prefix}.#{v.$css-prefix}-bookmark-o { + #{v.$icon-property}: string.unquote("\"#{ v.$var-bookmark }\""); +} +.#{v.$css-prefix}.#{v.$css-prefix}-twitter { + font-family: 'Font Awesome 7 Brands'; + font-weight: 400; +} +.#{v.$css-prefix}.#{v.$css-prefix}-facebook { + font-family: 'Font Awesome 7 Brands'; + font-weight: 400; +} +.#{v.$css-prefix}.#{v.$css-prefix}-facebook { + #{v.$icon-property}: string.unquote("\"#{ v.$var-facebook-f }\""); +} +.#{v.$css-prefix}.#{v.$css-prefix}-facebook-f { + font-family: 'Font Awesome 7 Brands'; + font-weight: 400; +} +.#{v.$css-prefix}.#{v.$css-prefix}-facebook-f { + #{v.$icon-property}: string.unquote("\"#{ v.$var-facebook-f }\""); +} +.#{v.$css-prefix}.#{v.$css-prefix}-github { + font-family: 'Font Awesome 7 Brands'; + font-weight: 400; +} +.#{v.$css-prefix}.#{v.$css-prefix}-credit-card { + font-family: 'Font Awesome 7 Free'; + font-weight: 400; +} +.#{v.$css-prefix}.#{v.$css-prefix}-feed { + #{v.$icon-property}: string.unquote("\"#{ v.$var-rss }\""); +} +.#{v.$css-prefix}.#{v.$css-prefix}-hdd-o { + font-family: 'Font Awesome 7 Free'; + font-weight: 400; +} +.#{v.$css-prefix}.#{v.$css-prefix}-hdd-o { + #{v.$icon-property}: string.unquote("\"#{ v.$var-hard-drive }\""); +} +.#{v.$css-prefix}.#{v.$css-prefix}-hand-o-right { + font-family: 'Font Awesome 7 Free'; + font-weight: 400; +} +.#{v.$css-prefix}.#{v.$css-prefix}-hand-o-right { + #{v.$icon-property}: string.unquote("\"#{ v.$var-hand-point-right }\""); +} +.#{v.$css-prefix}.#{v.$css-prefix}-hand-o-left { + font-family: 'Font Awesome 7 Free'; + font-weight: 400; +} +.#{v.$css-prefix}.#{v.$css-prefix}-hand-o-left { + #{v.$icon-property}: string.unquote("\"#{ v.$var-hand-point-left }\""); +} +.#{v.$css-prefix}.#{v.$css-prefix}-hand-o-up { + font-family: 'Font Awesome 7 Free'; + font-weight: 400; +} +.#{v.$css-prefix}.#{v.$css-prefix}-hand-o-up { + #{v.$icon-property}: string.unquote("\"#{ v.$var-hand-point-up }\""); +} +.#{v.$css-prefix}.#{v.$css-prefix}-hand-o-down { + font-family: 'Font Awesome 7 Free'; + font-weight: 400; +} +.#{v.$css-prefix}.#{v.$css-prefix}-hand-o-down { + #{v.$icon-property}: string.unquote("\"#{ v.$var-hand-point-down }\""); +} +.#{v.$css-prefix}.#{v.$css-prefix}-globe { + #{v.$icon-property}: string.unquote("\"#{ v.$var-earth-americas }\""); +} +.#{v.$css-prefix}.#{v.$css-prefix}-tasks { + #{v.$icon-property}: string.unquote("\"#{ v.$var-bars-progress }\""); +} +.#{v.$css-prefix}.#{v.$css-prefix}-arrows-alt { + #{v.$icon-property}: string.unquote("\"#{ v.$var-maximize }\""); +} +.#{v.$css-prefix}.#{v.$css-prefix}-group { + #{v.$icon-property}: string.unquote("\"#{ v.$var-users }\""); +} +.#{v.$css-prefix}.#{v.$css-prefix}-chain { + #{v.$icon-property}: string.unquote("\"#{ v.$var-link }\""); +} +.#{v.$css-prefix}.#{v.$css-prefix}-cut { + #{v.$icon-property}: string.unquote("\"#{ v.$var-scissors }\""); +} +.#{v.$css-prefix}.#{v.$css-prefix}-files-o { + font-family: 'Font Awesome 7 Free'; + font-weight: 400; +} +.#{v.$css-prefix}.#{v.$css-prefix}-files-o { + #{v.$icon-property}: string.unquote("\"#{ v.$var-copy }\""); +} +.#{v.$css-prefix}.#{v.$css-prefix}-floppy-o { + font-family: 'Font Awesome 7 Free'; + font-weight: 400; +} +.#{v.$css-prefix}.#{v.$css-prefix}-floppy-o { + #{v.$icon-property}: string.unquote("\"#{ v.$var-floppy-disk }\""); +} +.#{v.$css-prefix}.#{v.$css-prefix}-save { + font-family: 'Font Awesome 7 Free'; + font-weight: 400; +} +.#{v.$css-prefix}.#{v.$css-prefix}-save { + #{v.$icon-property}: string.unquote("\"#{ v.$var-floppy-disk }\""); +} +.#{v.$css-prefix}.#{v.$css-prefix}-navicon { + #{v.$icon-property}: string.unquote("\"#{ v.$var-bars }\""); +} +.#{v.$css-prefix}.#{v.$css-prefix}-reorder { + #{v.$icon-property}: string.unquote("\"#{ v.$var-bars }\""); +} +.#{v.$css-prefix}.#{v.$css-prefix}-magic { + #{v.$icon-property}: string.unquote("\"#{ v.$var-wand-magic-sparkles }\""); +} +.#{v.$css-prefix}.#{v.$css-prefix}-pinterest { + font-family: 'Font Awesome 7 Brands'; + font-weight: 400; +} +.#{v.$css-prefix}.#{v.$css-prefix}-pinterest-square { + font-family: 'Font Awesome 7 Brands'; + font-weight: 400; +} +.#{v.$css-prefix}.#{v.$css-prefix}-pinterest-square { + #{v.$icon-property}: string.unquote("\"#{ v.$var-square-pinterest }\""); +} +.#{v.$css-prefix}.#{v.$css-prefix}-google-plus-square { + font-family: 'Font Awesome 7 Brands'; + font-weight: 400; +} +.#{v.$css-prefix}.#{v.$css-prefix}-google-plus-square { + #{v.$icon-property}: string.unquote("\"#{ v.$var-square-google-plus }\""); +} +.#{v.$css-prefix}.#{v.$css-prefix}-google-plus { + font-family: 'Font Awesome 7 Brands'; + font-weight: 400; +} +.#{v.$css-prefix}.#{v.$css-prefix}-google-plus { + #{v.$icon-property}: string.unquote("\"#{ v.$var-google-plus-g }\""); +} +.#{v.$css-prefix}.#{v.$css-prefix}-money { + #{v.$icon-property}: string.unquote("\"#{ v.$var-money-bill-1 }\""); +} +.#{v.$css-prefix}.#{v.$css-prefix}-unsorted { + #{v.$icon-property}: string.unquote("\"#{ v.$var-sort }\""); +} +.#{v.$css-prefix}.#{v.$css-prefix}-sort-desc { + #{v.$icon-property}: string.unquote("\"#{ v.$var-sort-down }\""); +} +.#{v.$css-prefix}.#{v.$css-prefix}-sort-asc { + #{v.$icon-property}: string.unquote("\"#{ v.$var-sort-up }\""); +} +.#{v.$css-prefix}.#{v.$css-prefix}-linkedin { + font-family: 'Font Awesome 7 Brands'; + font-weight: 400; +} +.#{v.$css-prefix}.#{v.$css-prefix}-linkedin { + #{v.$icon-property}: string.unquote("\"#{ v.$var-linkedin-in }\""); +} +.#{v.$css-prefix}.#{v.$css-prefix}-rotate-left { + #{v.$icon-property}: string.unquote("\"#{ v.$var-arrow-rotate-left }\""); +} +.#{v.$css-prefix}.#{v.$css-prefix}-legal { + #{v.$icon-property}: string.unquote("\"#{ v.$var-gavel }\""); +} +.#{v.$css-prefix}.#{v.$css-prefix}-tachometer { + #{v.$icon-property}: string.unquote("\"#{ v.$var-gauge-high }\""); +} +.#{v.$css-prefix}.#{v.$css-prefix}-dashboard { + #{v.$icon-property}: string.unquote("\"#{ v.$var-gauge-high }\""); +} +.#{v.$css-prefix}.#{v.$css-prefix}-comment-o { + font-family: 'Font Awesome 7 Free'; + font-weight: 400; +} +.#{v.$css-prefix}.#{v.$css-prefix}-comment-o { + #{v.$icon-property}: string.unquote("\"#{ v.$var-comment }\""); +} +.#{v.$css-prefix}.#{v.$css-prefix}-comments-o { + font-family: 'Font Awesome 7 Free'; + font-weight: 400; +} +.#{v.$css-prefix}.#{v.$css-prefix}-comments-o { + #{v.$icon-property}: string.unquote("\"#{ v.$var-comments }\""); +} +.#{v.$css-prefix}.#{v.$css-prefix}-flash { + #{v.$icon-property}: string.unquote("\"#{ v.$var-bolt }\""); +} +.#{v.$css-prefix}.#{v.$css-prefix}-clipboard { + #{v.$icon-property}: string.unquote("\"#{ v.$var-paste }\""); +} +.#{v.$css-prefix}.#{v.$css-prefix}-lightbulb-o { + font-family: 'Font Awesome 7 Free'; + font-weight: 400; +} +.#{v.$css-prefix}.#{v.$css-prefix}-lightbulb-o { + #{v.$icon-property}: string.unquote("\"#{ v.$var-lightbulb }\""); +} +.#{v.$css-prefix}.#{v.$css-prefix}-exchange { + #{v.$icon-property}: string.unquote("\"#{ v.$var-right-left }\""); +} +.#{v.$css-prefix}.#{v.$css-prefix}-cloud-download { + #{v.$icon-property}: string.unquote("\"#{ v.$var-cloud-arrow-down }\""); +} +.#{v.$css-prefix}.#{v.$css-prefix}-cloud-upload { + #{v.$icon-property}: string.unquote("\"#{ v.$var-cloud-arrow-up }\""); +} +.#{v.$css-prefix}.#{v.$css-prefix}-bell-o { + font-family: 'Font Awesome 7 Free'; + font-weight: 400; +} +.#{v.$css-prefix}.#{v.$css-prefix}-bell-o { + #{v.$icon-property}: string.unquote("\"#{ v.$var-bell }\""); +} +.#{v.$css-prefix}.#{v.$css-prefix}-cutlery { + #{v.$icon-property}: string.unquote("\"#{ v.$var-utensils }\""); +} +.#{v.$css-prefix}.#{v.$css-prefix}-file-text-o { + font-family: 'Font Awesome 7 Free'; + font-weight: 400; +} +.#{v.$css-prefix}.#{v.$css-prefix}-file-text-o { + #{v.$icon-property}: string.unquote("\"#{ v.$var-file-lines }\""); +} +.#{v.$css-prefix}.#{v.$css-prefix}-building-o { + font-family: 'Font Awesome 7 Free'; + font-weight: 400; +} +.#{v.$css-prefix}.#{v.$css-prefix}-building-o { + #{v.$icon-property}: string.unquote("\"#{ v.$var-building }\""); +} +.#{v.$css-prefix}.#{v.$css-prefix}-hospital-o { + font-family: 'Font Awesome 7 Free'; + font-weight: 400; +} +.#{v.$css-prefix}.#{v.$css-prefix}-hospital-o { + #{v.$icon-property}: string.unquote("\"#{ v.$var-hospital }\""); +} +.#{v.$css-prefix}.#{v.$css-prefix}-tablet { + #{v.$icon-property}: string.unquote("\"#{ v.$var-tablet-screen-button }\""); +} +.#{v.$css-prefix}.#{v.$css-prefix}-mobile { + #{v.$icon-property}: string.unquote("\"#{ v.$var-mobile-screen-button }\""); +} +.#{v.$css-prefix}.#{v.$css-prefix}-mobile-phone { + #{v.$icon-property}: string.unquote("\"#{ v.$var-mobile-screen-button }\""); +} +.#{v.$css-prefix}.#{v.$css-prefix}-circle-o { + font-family: 'Font Awesome 7 Free'; + font-weight: 400; +} +.#{v.$css-prefix}.#{v.$css-prefix}-circle-o { + #{v.$icon-property}: string.unquote("\"#{ v.$var-circle }\""); +} +.#{v.$css-prefix}.#{v.$css-prefix}-mail-reply { + #{v.$icon-property}: string.unquote("\"#{ v.$var-reply }\""); +} +.#{v.$css-prefix}.#{v.$css-prefix}-github-alt { + font-family: 'Font Awesome 7 Brands'; + font-weight: 400; +} +.#{v.$css-prefix}.#{v.$css-prefix}-folder-o { + font-family: 'Font Awesome 7 Free'; + font-weight: 400; +} +.#{v.$css-prefix}.#{v.$css-prefix}-folder-o { + #{v.$icon-property}: string.unquote("\"#{ v.$var-folder }\""); +} +.#{v.$css-prefix}.#{v.$css-prefix}-folder-open-o { + font-family: 'Font Awesome 7 Free'; + font-weight: 400; +} +.#{v.$css-prefix}.#{v.$css-prefix}-folder-open-o { + #{v.$icon-property}: string.unquote("\"#{ v.$var-folder-open }\""); +} +.#{v.$css-prefix}.#{v.$css-prefix}-smile-o { + font-family: 'Font Awesome 7 Free'; + font-weight: 400; +} +.#{v.$css-prefix}.#{v.$css-prefix}-smile-o { + #{v.$icon-property}: string.unquote("\"#{ v.$var-face-smile }\""); +} +.#{v.$css-prefix}.#{v.$css-prefix}-frown-o { + font-family: 'Font Awesome 7 Free'; + font-weight: 400; +} +.#{v.$css-prefix}.#{v.$css-prefix}-frown-o { + #{v.$icon-property}: string.unquote("\"#{ v.$var-face-frown }\""); +} +.#{v.$css-prefix}.#{v.$css-prefix}-meh-o { + font-family: 'Font Awesome 7 Free'; + font-weight: 400; +} +.#{v.$css-prefix}.#{v.$css-prefix}-meh-o { + #{v.$icon-property}: string.unquote("\"#{ v.$var-face-meh }\""); +} +.#{v.$css-prefix}.#{v.$css-prefix}-keyboard-o { + font-family: 'Font Awesome 7 Free'; + font-weight: 400; +} +.#{v.$css-prefix}.#{v.$css-prefix}-keyboard-o { + #{v.$icon-property}: string.unquote("\"#{ v.$var-keyboard }\""); +} +.#{v.$css-prefix}.#{v.$css-prefix}-flag-o { + font-family: 'Font Awesome 7 Free'; + font-weight: 400; +} +.#{v.$css-prefix}.#{v.$css-prefix}-flag-o { + #{v.$icon-property}: string.unquote("\"#{ v.$var-flag }\""); +} +.#{v.$css-prefix}.#{v.$css-prefix}-mail-reply-all { + #{v.$icon-property}: string.unquote("\"#{ v.$var-reply-all }\""); +} +.#{v.$css-prefix}.#{v.$css-prefix}-star-half-o { + font-family: 'Font Awesome 7 Free'; + font-weight: 400; +} +.#{v.$css-prefix}.#{v.$css-prefix}-star-half-o { + #{v.$icon-property}: string.unquote("\"#{ v.$var-star-half-stroke }\""); +} +.#{v.$css-prefix}.#{v.$css-prefix}-star-half-empty { + font-family: 'Font Awesome 7 Free'; + font-weight: 400; +} +.#{v.$css-prefix}.#{v.$css-prefix}-star-half-empty { + #{v.$icon-property}: string.unquote("\"#{ v.$var-star-half-stroke }\""); +} +.#{v.$css-prefix}.#{v.$css-prefix}-star-half-full { + font-family: 'Font Awesome 7 Free'; + font-weight: 400; +} +.#{v.$css-prefix}.#{v.$css-prefix}-star-half-full { + #{v.$icon-property}: string.unquote("\"#{ v.$var-star-half-stroke }\""); +} +.#{v.$css-prefix}.#{v.$css-prefix}-code-fork { + #{v.$icon-property}: string.unquote("\"#{ v.$var-code-branch }\""); +} +.#{v.$css-prefix}.#{v.$css-prefix}-chain-broken { + #{v.$icon-property}: string.unquote("\"#{ v.$var-link-slash }\""); +} +.#{v.$css-prefix}.#{v.$css-prefix}-unlink { + #{v.$icon-property}: string.unquote("\"#{ v.$var-link-slash }\""); +} +.#{v.$css-prefix}.#{v.$css-prefix}-calendar-o { + font-family: 'Font Awesome 7 Free'; + font-weight: 400; +} +.#{v.$css-prefix}.#{v.$css-prefix}-calendar-o { + #{v.$icon-property}: string.unquote("\"#{ v.$var-calendar }\""); +} +.#{v.$css-prefix}.#{v.$css-prefix}-maxcdn { + font-family: 'Font Awesome 7 Brands'; + font-weight: 400; +} +.#{v.$css-prefix}.#{v.$css-prefix}-html5 { + font-family: 'Font Awesome 7 Brands'; + font-weight: 400; +} +.#{v.$css-prefix}.#{v.$css-prefix}-css3 { + font-family: 'Font Awesome 7 Brands'; + font-weight: 400; +} +.#{v.$css-prefix}.#{v.$css-prefix}-unlock-alt { + #{v.$icon-property}: string.unquote("\"#{ v.$var-unlock }\""); +} +.#{v.$css-prefix}.#{v.$css-prefix}-minus-square-o { + font-family: 'Font Awesome 7 Free'; + font-weight: 400; +} +.#{v.$css-prefix}.#{v.$css-prefix}-minus-square-o { + #{v.$icon-property}: string.unquote("\"#{ v.$var-square-minus }\""); +} +.#{v.$css-prefix}.#{v.$css-prefix}-level-up { + #{v.$icon-property}: string.unquote("\"#{ v.$var-turn-up }\""); +} +.#{v.$css-prefix}.#{v.$css-prefix}-level-down { + #{v.$icon-property}: string.unquote("\"#{ v.$var-turn-down }\""); +} +.#{v.$css-prefix}.#{v.$css-prefix}-pencil-square { + #{v.$icon-property}: string.unquote("\"#{ v.$var-square-pen }\""); +} +.#{v.$css-prefix}.#{v.$css-prefix}-external-link-square { + #{v.$icon-property}: string.unquote("\"#{ v.$var-square-up-right }\""); +} +.#{v.$css-prefix}.#{v.$css-prefix}-compass { + font-family: 'Font Awesome 7 Free'; + font-weight: 400; +} +.#{v.$css-prefix}.#{v.$css-prefix}-caret-square-o-down { + font-family: 'Font Awesome 7 Free'; + font-weight: 400; +} +.#{v.$css-prefix}.#{v.$css-prefix}-caret-square-o-down { + #{v.$icon-property}: string.unquote("\"#{ v.$var-square-caret-down }\""); +} +.#{v.$css-prefix}.#{v.$css-prefix}-toggle-down { + font-family: 'Font Awesome 7 Free'; + font-weight: 400; +} +.#{v.$css-prefix}.#{v.$css-prefix}-toggle-down { + #{v.$icon-property}: string.unquote("\"#{ v.$var-square-caret-down }\""); +} +.#{v.$css-prefix}.#{v.$css-prefix}-caret-square-o-up { + font-family: 'Font Awesome 7 Free'; + font-weight: 400; +} +.#{v.$css-prefix}.#{v.$css-prefix}-caret-square-o-up { + #{v.$icon-property}: string.unquote("\"#{ v.$var-square-caret-up }\""); +} +.#{v.$css-prefix}.#{v.$css-prefix}-toggle-up { + font-family: 'Font Awesome 7 Free'; + font-weight: 400; +} +.#{v.$css-prefix}.#{v.$css-prefix}-toggle-up { + #{v.$icon-property}: string.unquote("\"#{ v.$var-square-caret-up }\""); +} +.#{v.$css-prefix}.#{v.$css-prefix}-caret-square-o-right { + font-family: 'Font Awesome 7 Free'; + font-weight: 400; +} +.#{v.$css-prefix}.#{v.$css-prefix}-caret-square-o-right { + #{v.$icon-property}: string.unquote("\"#{ v.$var-square-caret-right }\""); +} +.#{v.$css-prefix}.#{v.$css-prefix}-toggle-right { + font-family: 'Font Awesome 7 Free'; + font-weight: 400; +} +.#{v.$css-prefix}.#{v.$css-prefix}-toggle-right { + #{v.$icon-property}: string.unquote("\"#{ v.$var-square-caret-right }\""); +} +.#{v.$css-prefix}.#{v.$css-prefix}-eur { + #{v.$icon-property}: string.unquote("\"#{ v.$var-euro-sign }\""); +} +.#{v.$css-prefix}.#{v.$css-prefix}-euro { + #{v.$icon-property}: string.unquote("\"#{ v.$var-euro-sign }\""); +} +.#{v.$css-prefix}.#{v.$css-prefix}-gbp { + #{v.$icon-property}: string.unquote("\"#{ v.$var-sterling-sign }\""); +} +.#{v.$css-prefix}.#{v.$css-prefix}-usd { + #{v.$icon-property}: string.unquote("\"#{ v.$var-dollar-sign }\""); +} +.#{v.$css-prefix}.#{v.$css-prefix}-dollar { + #{v.$icon-property}: string.unquote("\"#{ v.$var-dollar-sign }\""); +} +.#{v.$css-prefix}.#{v.$css-prefix}-inr { + #{v.$icon-property}: string.unquote("\"#{ v.$var-indian-rupee-sign }\""); +} +.#{v.$css-prefix}.#{v.$css-prefix}-rupee { + #{v.$icon-property}: string.unquote("\"#{ v.$var-indian-rupee-sign }\""); +} +.#{v.$css-prefix}.#{v.$css-prefix}-jpy { + #{v.$icon-property}: string.unquote("\"#{ v.$var-yen-sign }\""); +} +.#{v.$css-prefix}.#{v.$css-prefix}-cny { + #{v.$icon-property}: string.unquote("\"#{ v.$var-yen-sign }\""); +} +.#{v.$css-prefix}.#{v.$css-prefix}-rmb { + #{v.$icon-property}: string.unquote("\"#{ v.$var-yen-sign }\""); +} +.#{v.$css-prefix}.#{v.$css-prefix}-yen { + #{v.$icon-property}: string.unquote("\"#{ v.$var-yen-sign }\""); +} +.#{v.$css-prefix}.#{v.$css-prefix}-rub { + #{v.$icon-property}: string.unquote("\"#{ v.$var-ruble-sign }\""); +} +.#{v.$css-prefix}.#{v.$css-prefix}-ruble { + #{v.$icon-property}: string.unquote("\"#{ v.$var-ruble-sign }\""); +} +.#{v.$css-prefix}.#{v.$css-prefix}-rouble { + #{v.$icon-property}: string.unquote("\"#{ v.$var-ruble-sign }\""); +} +.#{v.$css-prefix}.#{v.$css-prefix}-krw { + #{v.$icon-property}: string.unquote("\"#{ v.$var-won-sign }\""); +} +.#{v.$css-prefix}.#{v.$css-prefix}-won { + #{v.$icon-property}: string.unquote("\"#{ v.$var-won-sign }\""); +} +.#{v.$css-prefix}.#{v.$css-prefix}-btc { + font-family: 'Font Awesome 7 Brands'; + font-weight: 400; +} +.#{v.$css-prefix}.#{v.$css-prefix}-bitcoin { + font-family: 'Font Awesome 7 Brands'; + font-weight: 400; +} +.#{v.$css-prefix}.#{v.$css-prefix}-bitcoin { + #{v.$icon-property}: string.unquote("\"#{ v.$var-btc }\""); +} +.#{v.$css-prefix}.#{v.$css-prefix}-file-text { + #{v.$icon-property}: string.unquote("\"#{ v.$var-file-lines }\""); +} +.#{v.$css-prefix}.#{v.$css-prefix}-sort-alpha-asc { + #{v.$icon-property}: string.unquote("\"#{ v.$var-arrow-down-a-z }\""); +} +.#{v.$css-prefix}.#{v.$css-prefix}-sort-alpha-desc { + #{v.$icon-property}: string.unquote("\"#{ v.$var-arrow-down-z-a }\""); +} +.#{v.$css-prefix}.#{v.$css-prefix}-sort-amount-asc { + #{v.$icon-property}: string.unquote("\"#{ v.$var-arrow-down-short-wide }\""); +} +.#{v.$css-prefix}.#{v.$css-prefix}-sort-amount-desc { + #{v.$icon-property}: string.unquote("\"#{ v.$var-arrow-down-wide-short }\""); +} +.#{v.$css-prefix}.#{v.$css-prefix}-sort-numeric-asc { + #{v.$icon-property}: string.unquote("\"#{ v.$var-arrow-down-1-9 }\""); +} +.#{v.$css-prefix}.#{v.$css-prefix}-sort-numeric-desc { + #{v.$icon-property}: string.unquote("\"#{ v.$var-arrow-down-9-1 }\""); +} +.#{v.$css-prefix}.#{v.$css-prefix}-youtube-square { + font-family: 'Font Awesome 7 Brands'; + font-weight: 400; +} +.#{v.$css-prefix}.#{v.$css-prefix}-youtube-square { + #{v.$icon-property}: string.unquote("\"#{ v.$var-square-youtube }\""); +} +.#{v.$css-prefix}.#{v.$css-prefix}-youtube { + font-family: 'Font Awesome 7 Brands'; + font-weight: 400; +} +.#{v.$css-prefix}.#{v.$css-prefix}-xing { + font-family: 'Font Awesome 7 Brands'; + font-weight: 400; +} +.#{v.$css-prefix}.#{v.$css-prefix}-xing-square { + font-family: 'Font Awesome 7 Brands'; + font-weight: 400; +} +.#{v.$css-prefix}.#{v.$css-prefix}-xing-square { + #{v.$icon-property}: string.unquote("\"#{ v.$var-square-xing }\""); +} +.#{v.$css-prefix}.#{v.$css-prefix}-youtube-play { + font-family: 'Font Awesome 7 Brands'; + font-weight: 400; +} +.#{v.$css-prefix}.#{v.$css-prefix}-youtube-play { + #{v.$icon-property}: string.unquote("\"#{ v.$var-youtube }\""); +} +.#{v.$css-prefix}.#{v.$css-prefix}-dropbox { + font-family: 'Font Awesome 7 Brands'; + font-weight: 400; +} +.#{v.$css-prefix}.#{v.$css-prefix}-stack-overflow { + font-family: 'Font Awesome 7 Brands'; + font-weight: 400; +} +.#{v.$css-prefix}.#{v.$css-prefix}-instagram { + font-family: 'Font Awesome 7 Brands'; + font-weight: 400; +} +.#{v.$css-prefix}.#{v.$css-prefix}-flickr { + font-family: 'Font Awesome 7 Brands'; + font-weight: 400; +} +.#{v.$css-prefix}.#{v.$css-prefix}-adn { + font-family: 'Font Awesome 7 Brands'; + font-weight: 400; +} +.#{v.$css-prefix}.#{v.$css-prefix}-bitbucket { + font-family: 'Font Awesome 7 Brands'; + font-weight: 400; +} +.#{v.$css-prefix}.#{v.$css-prefix}-bitbucket-square { + font-family: 'Font Awesome 7 Brands'; + font-weight: 400; +} +.#{v.$css-prefix}.#{v.$css-prefix}-bitbucket-square { + #{v.$icon-property}: string.unquote("\"#{ v.$var-bitbucket }\""); +} +.#{v.$css-prefix}.#{v.$css-prefix}-tumblr { + font-family: 'Font Awesome 7 Brands'; + font-weight: 400; +} +.#{v.$css-prefix}.#{v.$css-prefix}-tumblr-square { + font-family: 'Font Awesome 7 Brands'; + font-weight: 400; +} +.#{v.$css-prefix}.#{v.$css-prefix}-tumblr-square { + #{v.$icon-property}: string.unquote("\"#{ v.$var-square-tumblr }\""); +} +.#{v.$css-prefix}.#{v.$css-prefix}-long-arrow-down { + #{v.$icon-property}: string.unquote("\"#{ v.$var-down-long }\""); +} +.#{v.$css-prefix}.#{v.$css-prefix}-long-arrow-up { + #{v.$icon-property}: string.unquote("\"#{ v.$var-up-long }\""); +} +.#{v.$css-prefix}.#{v.$css-prefix}-long-arrow-left { + #{v.$icon-property}: string.unquote("\"#{ v.$var-left-long }\""); +} +.#{v.$css-prefix}.#{v.$css-prefix}-long-arrow-right { + #{v.$icon-property}: string.unquote("\"#{ v.$var-right-long }\""); +} +.#{v.$css-prefix}.#{v.$css-prefix}-apple { + font-family: 'Font Awesome 7 Brands'; + font-weight: 400; +} +.#{v.$css-prefix}.#{v.$css-prefix}-windows { + font-family: 'Font Awesome 7 Brands'; + font-weight: 400; +} +.#{v.$css-prefix}.#{v.$css-prefix}-android { + font-family: 'Font Awesome 7 Brands'; + font-weight: 400; +} +.#{v.$css-prefix}.#{v.$css-prefix}-linux { + font-family: 'Font Awesome 7 Brands'; + font-weight: 400; +} +.#{v.$css-prefix}.#{v.$css-prefix}-dribbble { + font-family: 'Font Awesome 7 Brands'; + font-weight: 400; +} +.#{v.$css-prefix}.#{v.$css-prefix}-skype { + font-family: 'Font Awesome 7 Brands'; + font-weight: 400; +} +.#{v.$css-prefix}.#{v.$css-prefix}-foursquare { + font-family: 'Font Awesome 7 Brands'; + font-weight: 400; +} +.#{v.$css-prefix}.#{v.$css-prefix}-trello { + font-family: 'Font Awesome 7 Brands'; + font-weight: 400; +} +.#{v.$css-prefix}.#{v.$css-prefix}-gratipay { + font-family: 'Font Awesome 7 Brands'; + font-weight: 400; +} +.#{v.$css-prefix}.#{v.$css-prefix}-gittip { + font-family: 'Font Awesome 7 Brands'; + font-weight: 400; +} +.#{v.$css-prefix}.#{v.$css-prefix}-gittip { + #{v.$icon-property}: string.unquote("\"#{ v.$var-gratipay }\""); +} +.#{v.$css-prefix}.#{v.$css-prefix}-sun-o { + font-family: 'Font Awesome 7 Free'; + font-weight: 400; +} +.#{v.$css-prefix}.#{v.$css-prefix}-sun-o { + #{v.$icon-property}: string.unquote("\"#{ v.$var-sun }\""); +} +.#{v.$css-prefix}.#{v.$css-prefix}-moon-o { + font-family: 'Font Awesome 7 Free'; + font-weight: 400; +} +.#{v.$css-prefix}.#{v.$css-prefix}-moon-o { + #{v.$icon-property}: string.unquote("\"#{ v.$var-moon }\""); +} +.#{v.$css-prefix}.#{v.$css-prefix}-vk { + font-family: 'Font Awesome 7 Brands'; + font-weight: 400; +} +.#{v.$css-prefix}.#{v.$css-prefix}-weibo { + font-family: 'Font Awesome 7 Brands'; + font-weight: 400; +} +.#{v.$css-prefix}.#{v.$css-prefix}-renren { + font-family: 'Font Awesome 7 Brands'; + font-weight: 400; +} +.#{v.$css-prefix}.#{v.$css-prefix}-pagelines { + font-family: 'Font Awesome 7 Brands'; + font-weight: 400; +} +.#{v.$css-prefix}.#{v.$css-prefix}-stack-exchange { + font-family: 'Font Awesome 7 Brands'; + font-weight: 400; +} +.#{v.$css-prefix}.#{v.$css-prefix}-arrow-circle-o-right { + font-family: 'Font Awesome 7 Free'; + font-weight: 400; +} +.#{v.$css-prefix}.#{v.$css-prefix}-arrow-circle-o-right { + #{v.$icon-property}: string.unquote("\"#{ v.$var-circle-right }\""); +} +.#{v.$css-prefix}.#{v.$css-prefix}-arrow-circle-o-left { + font-family: 'Font Awesome 7 Free'; + font-weight: 400; +} +.#{v.$css-prefix}.#{v.$css-prefix}-arrow-circle-o-left { + #{v.$icon-property}: string.unquote("\"#{ v.$var-circle-left }\""); +} +.#{v.$css-prefix}.#{v.$css-prefix}-caret-square-o-left { + font-family: 'Font Awesome 7 Free'; + font-weight: 400; +} +.#{v.$css-prefix}.#{v.$css-prefix}-caret-square-o-left { + #{v.$icon-property}: string.unquote("\"#{ v.$var-square-caret-left }\""); +} +.#{v.$css-prefix}.#{v.$css-prefix}-toggle-left { + font-family: 'Font Awesome 7 Free'; + font-weight: 400; +} +.#{v.$css-prefix}.#{v.$css-prefix}-toggle-left { + #{v.$icon-property}: string.unquote("\"#{ v.$var-square-caret-left }\""); +} +.#{v.$css-prefix}.#{v.$css-prefix}-dot-circle-o { + font-family: 'Font Awesome 7 Free'; + font-weight: 400; +} +.#{v.$css-prefix}.#{v.$css-prefix}-dot-circle-o { + #{v.$icon-property}: string.unquote("\"#{ v.$var-circle-dot }\""); +} +.#{v.$css-prefix}.#{v.$css-prefix}-vimeo-square { + font-family: 'Font Awesome 7 Brands'; + font-weight: 400; +} +.#{v.$css-prefix}.#{v.$css-prefix}-vimeo-square { + #{v.$icon-property}: string.unquote("\"#{ v.$var-square-vimeo }\""); +} +.#{v.$css-prefix}.#{v.$css-prefix}-try { + #{v.$icon-property}: string.unquote("\"#{ v.$var-turkish-lira-sign }\""); +} +.#{v.$css-prefix}.#{v.$css-prefix}-turkish-lira { + #{v.$icon-property}: string.unquote("\"#{ v.$var-turkish-lira-sign }\""); +} +.#{v.$css-prefix}.#{v.$css-prefix}-plus-square-o { + font-family: 'Font Awesome 7 Free'; + font-weight: 400; +} +.#{v.$css-prefix}.#{v.$css-prefix}-plus-square-o { + #{v.$icon-property}: string.unquote("\"#{ v.$var-square-plus }\""); +} +.#{v.$css-prefix}.#{v.$css-prefix}-slack { + font-family: 'Font Awesome 7 Brands'; + font-weight: 400; +} +.#{v.$css-prefix}.#{v.$css-prefix}-wordpress { + font-family: 'Font Awesome 7 Brands'; + font-weight: 400; +} +.#{v.$css-prefix}.#{v.$css-prefix}-openid { + font-family: 'Font Awesome 7 Brands'; + font-weight: 400; +} +.#{v.$css-prefix}.#{v.$css-prefix}-institution { + #{v.$icon-property}: string.unquote("\"#{ v.$var-building-columns }\""); +} +.#{v.$css-prefix}.#{v.$css-prefix}-bank { + #{v.$icon-property}: string.unquote("\"#{ v.$var-building-columns }\""); +} +.#{v.$css-prefix}.#{v.$css-prefix}-mortar-board { + #{v.$icon-property}: string.unquote("\"#{ v.$var-graduation-cap }\""); +} +.#{v.$css-prefix}.#{v.$css-prefix}-yahoo { + font-family: 'Font Awesome 7 Brands'; + font-weight: 400; +} +.#{v.$css-prefix}.#{v.$css-prefix}-google { + font-family: 'Font Awesome 7 Brands'; + font-weight: 400; +} +.#{v.$css-prefix}.#{v.$css-prefix}-reddit { + font-family: 'Font Awesome 7 Brands'; + font-weight: 400; +} +.#{v.$css-prefix}.#{v.$css-prefix}-reddit-square { + font-family: 'Font Awesome 7 Brands'; + font-weight: 400; +} +.#{v.$css-prefix}.#{v.$css-prefix}-reddit-square { + #{v.$icon-property}: string.unquote("\"#{ v.$var-square-reddit }\""); +} +.#{v.$css-prefix}.#{v.$css-prefix}-stumbleupon-circle { + font-family: 'Font Awesome 7 Brands'; + font-weight: 400; +} +.#{v.$css-prefix}.#{v.$css-prefix}-stumbleupon { + font-family: 'Font Awesome 7 Brands'; + font-weight: 400; +} +.#{v.$css-prefix}.#{v.$css-prefix}-delicious { + font-family: 'Font Awesome 7 Brands'; + font-weight: 400; +} +.#{v.$css-prefix}.#{v.$css-prefix}-digg { + font-family: 'Font Awesome 7 Brands'; + font-weight: 400; +} +.#{v.$css-prefix}.#{v.$css-prefix}-pied-piper-pp { + font-family: 'Font Awesome 7 Brands'; + font-weight: 400; +} +.#{v.$css-prefix}.#{v.$css-prefix}-pied-piper-alt { + font-family: 'Font Awesome 7 Brands'; + font-weight: 400; +} +.#{v.$css-prefix}.#{v.$css-prefix}-drupal { + font-family: 'Font Awesome 7 Brands'; + font-weight: 400; +} +.#{v.$css-prefix}.#{v.$css-prefix}-joomla { + font-family: 'Font Awesome 7 Brands'; + font-weight: 400; +} +.#{v.$css-prefix}.#{v.$css-prefix}-behance { + font-family: 'Font Awesome 7 Brands'; + font-weight: 400; +} +.#{v.$css-prefix}.#{v.$css-prefix}-behance-square { + font-family: 'Font Awesome 7 Brands'; + font-weight: 400; +} +.#{v.$css-prefix}.#{v.$css-prefix}-behance-square { + #{v.$icon-property}: string.unquote("\"#{ v.$var-square-behance }\""); +} +.#{v.$css-prefix}.#{v.$css-prefix}-steam { + font-family: 'Font Awesome 7 Brands'; + font-weight: 400; +} +.#{v.$css-prefix}.#{v.$css-prefix}-steam-square { + font-family: 'Font Awesome 7 Brands'; + font-weight: 400; +} +.#{v.$css-prefix}.#{v.$css-prefix}-steam-square { + #{v.$icon-property}: string.unquote("\"#{ v.$var-square-steam }\""); +} +.#{v.$css-prefix}.#{v.$css-prefix}-automobile { + #{v.$icon-property}: string.unquote("\"#{ v.$var-car }\""); +} +.#{v.$css-prefix}.#{v.$css-prefix}-cab { + #{v.$icon-property}: string.unquote("\"#{ v.$var-taxi }\""); +} +.#{v.$css-prefix}.#{v.$css-prefix}-spotify { + font-family: 'Font Awesome 7 Brands'; + font-weight: 400; +} +.#{v.$css-prefix}.#{v.$css-prefix}-deviantart { + font-family: 'Font Awesome 7 Brands'; + font-weight: 400; +} +.#{v.$css-prefix}.#{v.$css-prefix}-soundcloud { + font-family: 'Font Awesome 7 Brands'; + font-weight: 400; +} +.#{v.$css-prefix}.#{v.$css-prefix}-file-pdf-o { + font-family: 'Font Awesome 7 Free'; + font-weight: 400; +} +.#{v.$css-prefix}.#{v.$css-prefix}-file-pdf-o { + #{v.$icon-property}: string.unquote("\"#{ v.$var-file-pdf }\""); +} +.#{v.$css-prefix}.#{v.$css-prefix}-file-word-o { + font-family: 'Font Awesome 7 Free'; + font-weight: 400; +} +.#{v.$css-prefix}.#{v.$css-prefix}-file-word-o { + #{v.$icon-property}: string.unquote("\"#{ v.$var-file-word }\""); +} +.#{v.$css-prefix}.#{v.$css-prefix}-file-excel-o { + font-family: 'Font Awesome 7 Free'; + font-weight: 400; +} +.#{v.$css-prefix}.#{v.$css-prefix}-file-excel-o { + #{v.$icon-property}: string.unquote("\"#{ v.$var-file-excel }\""); +} +.#{v.$css-prefix}.#{v.$css-prefix}-file-powerpoint-o { + font-family: 'Font Awesome 7 Free'; + font-weight: 400; +} +.#{v.$css-prefix}.#{v.$css-prefix}-file-powerpoint-o { + #{v.$icon-property}: string.unquote("\"#{ v.$var-file-powerpoint }\""); +} +.#{v.$css-prefix}.#{v.$css-prefix}-file-image-o { + font-family: 'Font Awesome 7 Free'; + font-weight: 400; +} +.#{v.$css-prefix}.#{v.$css-prefix}-file-image-o { + #{v.$icon-property}: string.unquote("\"#{ v.$var-file-image }\""); +} +.#{v.$css-prefix}.#{v.$css-prefix}-file-photo-o { + font-family: 'Font Awesome 7 Free'; + font-weight: 400; +} +.#{v.$css-prefix}.#{v.$css-prefix}-file-photo-o { + #{v.$icon-property}: string.unquote("\"#{ v.$var-file-image }\""); +} +.#{v.$css-prefix}.#{v.$css-prefix}-file-picture-o { + font-family: 'Font Awesome 7 Free'; + font-weight: 400; +} +.#{v.$css-prefix}.#{v.$css-prefix}-file-picture-o { + #{v.$icon-property}: string.unquote("\"#{ v.$var-file-image }\""); +} +.#{v.$css-prefix}.#{v.$css-prefix}-file-archive-o { + font-family: 'Font Awesome 7 Free'; + font-weight: 400; +} +.#{v.$css-prefix}.#{v.$css-prefix}-file-archive-o { + #{v.$icon-property}: string.unquote("\"#{ v.$var-file-zipper }\""); +} +.#{v.$css-prefix}.#{v.$css-prefix}-file-zip-o { + font-family: 'Font Awesome 7 Free'; + font-weight: 400; +} +.#{v.$css-prefix}.#{v.$css-prefix}-file-zip-o { + #{v.$icon-property}: string.unquote("\"#{ v.$var-file-zipper }\""); +} +.#{v.$css-prefix}.#{v.$css-prefix}-file-audio-o { + font-family: 'Font Awesome 7 Free'; + font-weight: 400; +} +.#{v.$css-prefix}.#{v.$css-prefix}-file-audio-o { + #{v.$icon-property}: string.unquote("\"#{ v.$var-file-audio }\""); +} +.#{v.$css-prefix}.#{v.$css-prefix}-file-sound-o { + font-family: 'Font Awesome 7 Free'; + font-weight: 400; +} +.#{v.$css-prefix}.#{v.$css-prefix}-file-sound-o { + #{v.$icon-property}: string.unquote("\"#{ v.$var-file-audio }\""); +} +.#{v.$css-prefix}.#{v.$css-prefix}-file-video-o { + font-family: 'Font Awesome 7 Free'; + font-weight: 400; +} +.#{v.$css-prefix}.#{v.$css-prefix}-file-video-o { + #{v.$icon-property}: string.unquote("\"#{ v.$var-file-video }\""); +} +.#{v.$css-prefix}.#{v.$css-prefix}-file-movie-o { + font-family: 'Font Awesome 7 Free'; + font-weight: 400; +} +.#{v.$css-prefix}.#{v.$css-prefix}-file-movie-o { + #{v.$icon-property}: string.unquote("\"#{ v.$var-file-video }\""); +} +.#{v.$css-prefix}.#{v.$css-prefix}-file-code-o { + font-family: 'Font Awesome 7 Free'; + font-weight: 400; +} +.#{v.$css-prefix}.#{v.$css-prefix}-file-code-o { + #{v.$icon-property}: string.unquote("\"#{ v.$var-file-code }\""); +} +.#{v.$css-prefix}.#{v.$css-prefix}-vine { + font-family: 'Font Awesome 7 Brands'; + font-weight: 400; +} +.#{v.$css-prefix}.#{v.$css-prefix}-codepen { + font-family: 'Font Awesome 7 Brands'; + font-weight: 400; +} +.#{v.$css-prefix}.#{v.$css-prefix}-jsfiddle { + font-family: 'Font Awesome 7 Brands'; + font-weight: 400; +} +.#{v.$css-prefix}.#{v.$css-prefix}-life-bouy { + #{v.$icon-property}: string.unquote("\"#{ v.$var-life-ring }\""); +} +.#{v.$css-prefix}.#{v.$css-prefix}-life-buoy { + #{v.$icon-property}: string.unquote("\"#{ v.$var-life-ring }\""); +} +.#{v.$css-prefix}.#{v.$css-prefix}-life-saver { + #{v.$icon-property}: string.unquote("\"#{ v.$var-life-ring }\""); +} +.#{v.$css-prefix}.#{v.$css-prefix}-support { + #{v.$icon-property}: string.unquote("\"#{ v.$var-life-ring }\""); +} +.#{v.$css-prefix}.#{v.$css-prefix}-circle-o-notch { + #{v.$icon-property}: string.unquote("\"#{ v.$var-circle-notch }\""); +} +.#{v.$css-prefix}.#{v.$css-prefix}-rebel { + font-family: 'Font Awesome 7 Brands'; + font-weight: 400; +} +.#{v.$css-prefix}.#{v.$css-prefix}-ra { + font-family: 'Font Awesome 7 Brands'; + font-weight: 400; +} +.#{v.$css-prefix}.#{v.$css-prefix}-ra { + #{v.$icon-property}: string.unquote("\"#{ v.$var-rebel }\""); +} +.#{v.$css-prefix}.#{v.$css-prefix}-resistance { + font-family: 'Font Awesome 7 Brands'; + font-weight: 400; +} +.#{v.$css-prefix}.#{v.$css-prefix}-resistance { + #{v.$icon-property}: string.unquote("\"#{ v.$var-rebel }\""); +} +.#{v.$css-prefix}.#{v.$css-prefix}-empire { + font-family: 'Font Awesome 7 Brands'; + font-weight: 400; +} +.#{v.$css-prefix}.#{v.$css-prefix}-ge { + font-family: 'Font Awesome 7 Brands'; + font-weight: 400; +} +.#{v.$css-prefix}.#{v.$css-prefix}-ge { + #{v.$icon-property}: string.unquote("\"#{ v.$var-empire }\""); +} +.#{v.$css-prefix}.#{v.$css-prefix}-git-square { + font-family: 'Font Awesome 7 Brands'; + font-weight: 400; +} +.#{v.$css-prefix}.#{v.$css-prefix}-git-square { + #{v.$icon-property}: string.unquote("\"#{ v.$var-square-git }\""); +} +.#{v.$css-prefix}.#{v.$css-prefix}-git { + font-family: 'Font Awesome 7 Brands'; + font-weight: 400; +} +.#{v.$css-prefix}.#{v.$css-prefix}-hacker-news { + font-family: 'Font Awesome 7 Brands'; + font-weight: 400; +} +.#{v.$css-prefix}.#{v.$css-prefix}-y-combinator-square { + font-family: 'Font Awesome 7 Brands'; + font-weight: 400; +} +.#{v.$css-prefix}.#{v.$css-prefix}-y-combinator-square { + #{v.$icon-property}: string.unquote("\"#{ v.$var-hacker-news }\""); +} +.#{v.$css-prefix}.#{v.$css-prefix}-yc-square { + font-family: 'Font Awesome 7 Brands'; + font-weight: 400; +} +.#{v.$css-prefix}.#{v.$css-prefix}-yc-square { + #{v.$icon-property}: string.unquote("\"#{ v.$var-hacker-news }\""); +} +.#{v.$css-prefix}.#{v.$css-prefix}-tencent-weibo { + font-family: 'Font Awesome 7 Brands'; + font-weight: 400; +} +.#{v.$css-prefix}.#{v.$css-prefix}-qq { + font-family: 'Font Awesome 7 Brands'; + font-weight: 400; +} +.#{v.$css-prefix}.#{v.$css-prefix}-weixin { + font-family: 'Font Awesome 7 Brands'; + font-weight: 400; +} +.#{v.$css-prefix}.#{v.$css-prefix}-wechat { + font-family: 'Font Awesome 7 Brands'; + font-weight: 400; +} +.#{v.$css-prefix}.#{v.$css-prefix}-wechat { + #{v.$icon-property}: string.unquote("\"#{ v.$var-weixin }\""); +} +.#{v.$css-prefix}.#{v.$css-prefix}-send { + #{v.$icon-property}: string.unquote("\"#{ v.$var-paper-plane }\""); +} +.#{v.$css-prefix}.#{v.$css-prefix}-paper-plane-o { + font-family: 'Font Awesome 7 Free'; + font-weight: 400; +} +.#{v.$css-prefix}.#{v.$css-prefix}-paper-plane-o { + #{v.$icon-property}: string.unquote("\"#{ v.$var-paper-plane }\""); +} +.#{v.$css-prefix}.#{v.$css-prefix}-send-o { + font-family: 'Font Awesome 7 Free'; + font-weight: 400; +} +.#{v.$css-prefix}.#{v.$css-prefix}-send-o { + #{v.$icon-property}: string.unquote("\"#{ v.$var-paper-plane }\""); +} +.#{v.$css-prefix}.#{v.$css-prefix}-circle-thin { + font-family: 'Font Awesome 7 Free'; + font-weight: 400; +} +.#{v.$css-prefix}.#{v.$css-prefix}-circle-thin { + #{v.$icon-property}: string.unquote("\"#{ v.$var-circle }\""); +} +.#{v.$css-prefix}.#{v.$css-prefix}-header { + #{v.$icon-property}: string.unquote("\"#{ v.$var-heading }\""); +} +.#{v.$css-prefix}.#{v.$css-prefix}-futbol-o { + font-family: 'Font Awesome 7 Free'; + font-weight: 400; +} +.#{v.$css-prefix}.#{v.$css-prefix}-futbol-o { + #{v.$icon-property}: string.unquote("\"#{ v.$var-futbol }\""); +} +.#{v.$css-prefix}.#{v.$css-prefix}-soccer-ball-o { + font-family: 'Font Awesome 7 Free'; + font-weight: 400; +} +.#{v.$css-prefix}.#{v.$css-prefix}-soccer-ball-o { + #{v.$icon-property}: string.unquote("\"#{ v.$var-futbol }\""); +} +.#{v.$css-prefix}.#{v.$css-prefix}-slideshare { + font-family: 'Font Awesome 7 Brands'; + font-weight: 400; +} +.#{v.$css-prefix}.#{v.$css-prefix}-twitch { + font-family: 'Font Awesome 7 Brands'; + font-weight: 400; +} +.#{v.$css-prefix}.#{v.$css-prefix}-yelp { + font-family: 'Font Awesome 7 Brands'; + font-weight: 400; +} +.#{v.$css-prefix}.#{v.$css-prefix}-newspaper-o { + font-family: 'Font Awesome 7 Free'; + font-weight: 400; +} +.#{v.$css-prefix}.#{v.$css-prefix}-newspaper-o { + #{v.$icon-property}: string.unquote("\"#{ v.$var-newspaper }\""); +} +.#{v.$css-prefix}.#{v.$css-prefix}-paypal { + font-family: 'Font Awesome 7 Brands'; + font-weight: 400; +} +.#{v.$css-prefix}.#{v.$css-prefix}-google-wallet { + font-family: 'Font Awesome 7 Brands'; + font-weight: 400; +} +.#{v.$css-prefix}.#{v.$css-prefix}-cc-visa { + font-family: 'Font Awesome 7 Brands'; + font-weight: 400; +} +.#{v.$css-prefix}.#{v.$css-prefix}-cc-mastercard { + font-family: 'Font Awesome 7 Brands'; + font-weight: 400; +} +.#{v.$css-prefix}.#{v.$css-prefix}-cc-discover { + font-family: 'Font Awesome 7 Brands'; + font-weight: 400; +} +.#{v.$css-prefix}.#{v.$css-prefix}-cc-amex { + font-family: 'Font Awesome 7 Brands'; + font-weight: 400; +} +.#{v.$css-prefix}.#{v.$css-prefix}-cc-paypal { + font-family: 'Font Awesome 7 Brands'; + font-weight: 400; +} +.#{v.$css-prefix}.#{v.$css-prefix}-cc-stripe { + font-family: 'Font Awesome 7 Brands'; + font-weight: 400; +} +.#{v.$css-prefix}.#{v.$css-prefix}-bell-slash-o { + font-family: 'Font Awesome 7 Free'; + font-weight: 400; +} +.#{v.$css-prefix}.#{v.$css-prefix}-bell-slash-o { + #{v.$icon-property}: string.unquote("\"#{ v.$var-bell-slash }\""); +} +.#{v.$css-prefix}.#{v.$css-prefix}-trash { + #{v.$icon-property}: string.unquote("\"#{ v.$var-trash-can }\""); +} +.#{v.$css-prefix}.#{v.$css-prefix}-copyright { + font-family: 'Font Awesome 7 Free'; + font-weight: 400; +} +.#{v.$css-prefix}.#{v.$css-prefix}-eyedropper { + #{v.$icon-property}: string.unquote("\"#{ v.$var-eye-dropper }\""); +} +.#{v.$css-prefix}.#{v.$css-prefix}-area-chart { + #{v.$icon-property}: string.unquote("\"#{ v.$var-chart-area }\""); +} +.#{v.$css-prefix}.#{v.$css-prefix}-pie-chart { + #{v.$icon-property}: string.unquote("\"#{ v.$var-chart-pie }\""); +} +.#{v.$css-prefix}.#{v.$css-prefix}-line-chart { + #{v.$icon-property}: string.unquote("\"#{ v.$var-chart-line }\""); +} +.#{v.$css-prefix}.#{v.$css-prefix}-lastfm { + font-family: 'Font Awesome 7 Brands'; + font-weight: 400; +} +.#{v.$css-prefix}.#{v.$css-prefix}-lastfm-square { + font-family: 'Font Awesome 7 Brands'; + font-weight: 400; +} +.#{v.$css-prefix}.#{v.$css-prefix}-lastfm-square { + #{v.$icon-property}: string.unquote("\"#{ v.$var-square-lastfm }\""); +} +.#{v.$css-prefix}.#{v.$css-prefix}-ioxhost { + font-family: 'Font Awesome 7 Brands'; + font-weight: 400; +} +.#{v.$css-prefix}.#{v.$css-prefix}-angellist { + font-family: 'Font Awesome 7 Brands'; + font-weight: 400; +} +.#{v.$css-prefix}.#{v.$css-prefix}-cc { + font-family: 'Font Awesome 7 Free'; + font-weight: 400; +} +.#{v.$css-prefix}.#{v.$css-prefix}-cc { + #{v.$icon-property}: string.unquote("\"#{ v.$var-closed-captioning }\""); +} +.#{v.$css-prefix}.#{v.$css-prefix}-ils { + #{v.$icon-property}: string.unquote("\"#{ v.$var-shekel-sign }\""); +} +.#{v.$css-prefix}.#{v.$css-prefix}-shekel { + #{v.$icon-property}: string.unquote("\"#{ v.$var-shekel-sign }\""); +} +.#{v.$css-prefix}.#{v.$css-prefix}-sheqel { + #{v.$icon-property}: string.unquote("\"#{ v.$var-shekel-sign }\""); +} +.#{v.$css-prefix}.#{v.$css-prefix}-buysellads { + font-family: 'Font Awesome 7 Brands'; + font-weight: 400; +} +.#{v.$css-prefix}.#{v.$css-prefix}-connectdevelop { + font-family: 'Font Awesome 7 Brands'; + font-weight: 400; +} +.#{v.$css-prefix}.#{v.$css-prefix}-dashcube { + font-family: 'Font Awesome 7 Brands'; + font-weight: 400; +} +.#{v.$css-prefix}.#{v.$css-prefix}-forumbee { + font-family: 'Font Awesome 7 Brands'; + font-weight: 400; +} +.#{v.$css-prefix}.#{v.$css-prefix}-leanpub { + font-family: 'Font Awesome 7 Brands'; + font-weight: 400; +} +.#{v.$css-prefix}.#{v.$css-prefix}-sellsy { + font-family: 'Font Awesome 7 Brands'; + font-weight: 400; +} +.#{v.$css-prefix}.#{v.$css-prefix}-shirtsinbulk { + font-family: 'Font Awesome 7 Brands'; + font-weight: 400; +} +.#{v.$css-prefix}.#{v.$css-prefix}-simplybuilt { + font-family: 'Font Awesome 7 Brands'; + font-weight: 400; +} +.#{v.$css-prefix}.#{v.$css-prefix}-skyatlas { + font-family: 'Font Awesome 7 Brands'; + font-weight: 400; +} +.#{v.$css-prefix}.#{v.$css-prefix}-diamond { + font-family: 'Font Awesome 7 Free'; + font-weight: 400; +} +.#{v.$css-prefix}.#{v.$css-prefix}-diamond { + #{v.$icon-property}: string.unquote("\"#{ v.$var-gem }\""); +} +.#{v.$css-prefix}.#{v.$css-prefix}-transgender { + #{v.$icon-property}: string.unquote("\"#{ v.$var-mars-and-venus }\""); +} +.#{v.$css-prefix}.#{v.$css-prefix}-intersex { + #{v.$icon-property}: string.unquote("\"#{ v.$var-mars-and-venus }\""); +} +.#{v.$css-prefix}.#{v.$css-prefix}-transgender-alt { + #{v.$icon-property}: string.unquote("\"#{ v.$var-transgender }\""); +} +.#{v.$css-prefix}.#{v.$css-prefix}-facebook-official { + font-family: 'Font Awesome 7 Brands'; + font-weight: 400; +} +.#{v.$css-prefix}.#{v.$css-prefix}-facebook-official { + #{v.$icon-property}: string.unquote("\"#{ v.$var-facebook }\""); +} +.#{v.$css-prefix}.#{v.$css-prefix}-pinterest-p { + font-family: 'Font Awesome 7 Brands'; + font-weight: 400; +} +.#{v.$css-prefix}.#{v.$css-prefix}-whatsapp { + font-family: 'Font Awesome 7 Brands'; + font-weight: 400; +} +.#{v.$css-prefix}.#{v.$css-prefix}-hotel { + #{v.$icon-property}: string.unquote("\"#{ v.$var-bed }\""); +} +.#{v.$css-prefix}.#{v.$css-prefix}-viacoin { + font-family: 'Font Awesome 7 Brands'; + font-weight: 400; +} +.#{v.$css-prefix}.#{v.$css-prefix}-medium { + font-family: 'Font Awesome 7 Brands'; + font-weight: 400; +} +.#{v.$css-prefix}.#{v.$css-prefix}-y-combinator { + font-family: 'Font Awesome 7 Brands'; + font-weight: 400; +} +.#{v.$css-prefix}.#{v.$css-prefix}-yc { + font-family: 'Font Awesome 7 Brands'; + font-weight: 400; +} +.#{v.$css-prefix}.#{v.$css-prefix}-yc { + #{v.$icon-property}: string.unquote("\"#{ v.$var-y-combinator }\""); +} +.#{v.$css-prefix}.#{v.$css-prefix}-optin-monster { + font-family: 'Font Awesome 7 Brands'; + font-weight: 400; +} +.#{v.$css-prefix}.#{v.$css-prefix}-opencart { + font-family: 'Font Awesome 7 Brands'; + font-weight: 400; +} +.#{v.$css-prefix}.#{v.$css-prefix}-expeditedssl { + font-family: 'Font Awesome 7 Brands'; + font-weight: 400; +} +.#{v.$css-prefix}.#{v.$css-prefix}-battery-4 { + #{v.$icon-property}: string.unquote("\"#{ v.$var-battery-full }\""); +} +.#{v.$css-prefix}.#{v.$css-prefix}-battery { + #{v.$icon-property}: string.unquote("\"#{ v.$var-battery-full }\""); +} +.#{v.$css-prefix}.#{v.$css-prefix}-battery-3 { + #{v.$icon-property}: string.unquote("\"#{ v.$var-battery-three-quarters }\""); +} +.#{v.$css-prefix}.#{v.$css-prefix}-battery-2 { + #{v.$icon-property}: string.unquote("\"#{ v.$var-battery-half }\""); +} +.#{v.$css-prefix}.#{v.$css-prefix}-battery-1 { + #{v.$icon-property}: string.unquote("\"#{ v.$var-battery-quarter }\""); +} +.#{v.$css-prefix}.#{v.$css-prefix}-battery-0 { + #{v.$icon-property}: string.unquote("\"#{ v.$var-battery-empty }\""); +} +.#{v.$css-prefix}.#{v.$css-prefix}-object-group { + font-family: 'Font Awesome 7 Free'; + font-weight: 400; +} +.#{v.$css-prefix}.#{v.$css-prefix}-object-ungroup { + font-family: 'Font Awesome 7 Free'; + font-weight: 400; +} +.#{v.$css-prefix}.#{v.$css-prefix}-sticky-note-o { + font-family: 'Font Awesome 7 Free'; + font-weight: 400; +} +.#{v.$css-prefix}.#{v.$css-prefix}-sticky-note-o { + #{v.$icon-property}: string.unquote("\"#{ v.$var-note-sticky }\""); +} +.#{v.$css-prefix}.#{v.$css-prefix}-cc-jcb { + font-family: 'Font Awesome 7 Brands'; + font-weight: 400; +} +.#{v.$css-prefix}.#{v.$css-prefix}-cc-diners-club { + font-family: 'Font Awesome 7 Brands'; + font-weight: 400; +} +.#{v.$css-prefix}.#{v.$css-prefix}-clone { + font-family: 'Font Awesome 7 Free'; + font-weight: 400; +} +.#{v.$css-prefix}.#{v.$css-prefix}-hourglass-o { + #{v.$icon-property}: string.unquote("\"#{ v.$var-hourglass }\""); +} +.#{v.$css-prefix}.#{v.$css-prefix}-hourglass-1 { + #{v.$icon-property}: string.unquote("\"#{ v.$var-hourglass-start }\""); +} +.#{v.$css-prefix}.#{v.$css-prefix}-hourglass-2 { + #{v.$icon-property}: string.unquote("\"#{ v.$var-hourglass-half }\""); +} +.#{v.$css-prefix}.#{v.$css-prefix}-hourglass-3 { + #{v.$icon-property}: string.unquote("\"#{ v.$var-hourglass-end }\""); +} +.#{v.$css-prefix}.#{v.$css-prefix}-hand-rock-o { + font-family: 'Font Awesome 7 Free'; + font-weight: 400; +} +.#{v.$css-prefix}.#{v.$css-prefix}-hand-rock-o { + #{v.$icon-property}: string.unquote("\"#{ v.$var-hand-back-fist }\""); +} +.#{v.$css-prefix}.#{v.$css-prefix}-hand-grab-o { + font-family: 'Font Awesome 7 Free'; + font-weight: 400; +} +.#{v.$css-prefix}.#{v.$css-prefix}-hand-grab-o { + #{v.$icon-property}: string.unquote("\"#{ v.$var-hand-back-fist }\""); +} +.#{v.$css-prefix}.#{v.$css-prefix}-hand-paper-o { + font-family: 'Font Awesome 7 Free'; + font-weight: 400; +} +.#{v.$css-prefix}.#{v.$css-prefix}-hand-paper-o { + #{v.$icon-property}: string.unquote("\"#{ v.$var-hand }\""); +} +.#{v.$css-prefix}.#{v.$css-prefix}-hand-stop-o { + font-family: 'Font Awesome 7 Free'; + font-weight: 400; +} +.#{v.$css-prefix}.#{v.$css-prefix}-hand-stop-o { + #{v.$icon-property}: string.unquote("\"#{ v.$var-hand }\""); +} +.#{v.$css-prefix}.#{v.$css-prefix}-hand-scissors-o { + font-family: 'Font Awesome 7 Free'; + font-weight: 400; +} +.#{v.$css-prefix}.#{v.$css-prefix}-hand-scissors-o { + #{v.$icon-property}: string.unquote("\"#{ v.$var-hand-scissors }\""); +} +.#{v.$css-prefix}.#{v.$css-prefix}-hand-lizard-o { + font-family: 'Font Awesome 7 Free'; + font-weight: 400; +} +.#{v.$css-prefix}.#{v.$css-prefix}-hand-lizard-o { + #{v.$icon-property}: string.unquote("\"#{ v.$var-hand-lizard }\""); +} +.#{v.$css-prefix}.#{v.$css-prefix}-hand-spock-o { + font-family: 'Font Awesome 7 Free'; + font-weight: 400; +} +.#{v.$css-prefix}.#{v.$css-prefix}-hand-spock-o { + #{v.$icon-property}: string.unquote("\"#{ v.$var-hand-spock }\""); +} +.#{v.$css-prefix}.#{v.$css-prefix}-hand-pointer-o { + font-family: 'Font Awesome 7 Free'; + font-weight: 400; +} +.#{v.$css-prefix}.#{v.$css-prefix}-hand-pointer-o { + #{v.$icon-property}: string.unquote("\"#{ v.$var-hand-pointer }\""); +} +.#{v.$css-prefix}.#{v.$css-prefix}-hand-peace-o { + font-family: 'Font Awesome 7 Free'; + font-weight: 400; +} +.#{v.$css-prefix}.#{v.$css-prefix}-hand-peace-o { + #{v.$icon-property}: string.unquote("\"#{ v.$var-hand-peace }\""); +} +.#{v.$css-prefix}.#{v.$css-prefix}-registered { + font-family: 'Font Awesome 7 Free'; + font-weight: 400; +} +.#{v.$css-prefix}.#{v.$css-prefix}-creative-commons { + font-family: 'Font Awesome 7 Brands'; + font-weight: 400; +} +.#{v.$css-prefix}.#{v.$css-prefix}-gg { + font-family: 'Font Awesome 7 Brands'; + font-weight: 400; +} +.#{v.$css-prefix}.#{v.$css-prefix}-gg-circle { + font-family: 'Font Awesome 7 Brands'; + font-weight: 400; +} +.#{v.$css-prefix}.#{v.$css-prefix}-odnoklassniki { + font-family: 'Font Awesome 7 Brands'; + font-weight: 400; +} +.#{v.$css-prefix}.#{v.$css-prefix}-odnoklassniki-square { + font-family: 'Font Awesome 7 Brands'; + font-weight: 400; +} +.#{v.$css-prefix}.#{v.$css-prefix}-odnoklassniki-square { + #{v.$icon-property}: string.unquote("\"#{ v.$var-square-odnoklassniki }\""); +} +.#{v.$css-prefix}.#{v.$css-prefix}-get-pocket { + font-family: 'Font Awesome 7 Brands'; + font-weight: 400; +} +.#{v.$css-prefix}.#{v.$css-prefix}-wikipedia-w { + font-family: 'Font Awesome 7 Brands'; + font-weight: 400; +} +.#{v.$css-prefix}.#{v.$css-prefix}-safari { + font-family: 'Font Awesome 7 Brands'; + font-weight: 400; +} +.#{v.$css-prefix}.#{v.$css-prefix}-chrome { + font-family: 'Font Awesome 7 Brands'; + font-weight: 400; +} +.#{v.$css-prefix}.#{v.$css-prefix}-firefox { + font-family: 'Font Awesome 7 Brands'; + font-weight: 400; +} +.#{v.$css-prefix}.#{v.$css-prefix}-opera { + font-family: 'Font Awesome 7 Brands'; + font-weight: 400; +} +.#{v.$css-prefix}.#{v.$css-prefix}-internet-explorer { + font-family: 'Font Awesome 7 Brands'; + font-weight: 400; +} +.#{v.$css-prefix}.#{v.$css-prefix}-television { + #{v.$icon-property}: string.unquote("\"#{ v.$var-tv }\""); +} +.#{v.$css-prefix}.#{v.$css-prefix}-contao { + font-family: 'Font Awesome 7 Brands'; + font-weight: 400; +} +.#{v.$css-prefix}.#{v.$css-prefix}-500px { + font-family: 'Font Awesome 7 Brands'; + font-weight: 400; +} +.#{v.$css-prefix}.#{v.$css-prefix}-amazon { + font-family: 'Font Awesome 7 Brands'; + font-weight: 400; +} +.#{v.$css-prefix}.#{v.$css-prefix}-calendar-plus-o { + font-family: 'Font Awesome 7 Free'; + font-weight: 400; +} +.#{v.$css-prefix}.#{v.$css-prefix}-calendar-plus-o { + #{v.$icon-property}: string.unquote("\"#{ v.$var-calendar-plus }\""); +} +.#{v.$css-prefix}.#{v.$css-prefix}-calendar-minus-o { + font-family: 'Font Awesome 7 Free'; + font-weight: 400; +} +.#{v.$css-prefix}.#{v.$css-prefix}-calendar-minus-o { + #{v.$icon-property}: string.unquote("\"#{ v.$var-calendar-minus }\""); +} +.#{v.$css-prefix}.#{v.$css-prefix}-calendar-times-o { + font-family: 'Font Awesome 7 Free'; + font-weight: 400; +} +.#{v.$css-prefix}.#{v.$css-prefix}-calendar-times-o { + #{v.$icon-property}: string.unquote("\"#{ v.$var-calendar-xmark }\""); +} +.#{v.$css-prefix}.#{v.$css-prefix}-calendar-check-o { + font-family: 'Font Awesome 7 Free'; + font-weight: 400; +} +.#{v.$css-prefix}.#{v.$css-prefix}-calendar-check-o { + #{v.$icon-property}: string.unquote("\"#{ v.$var-calendar-check }\""); +} +.#{v.$css-prefix}.#{v.$css-prefix}-map-o { + font-family: 'Font Awesome 7 Free'; + font-weight: 400; +} +.#{v.$css-prefix}.#{v.$css-prefix}-map-o { + #{v.$icon-property}: string.unquote("\"#{ v.$var-map }\""); +} +.#{v.$css-prefix}.#{v.$css-prefix}-commenting { + #{v.$icon-property}: string.unquote("\"#{ v.$var-comment-dots }\""); +} +.#{v.$css-prefix}.#{v.$css-prefix}-commenting-o { + font-family: 'Font Awesome 7 Free'; + font-weight: 400; +} +.#{v.$css-prefix}.#{v.$css-prefix}-commenting-o { + #{v.$icon-property}: string.unquote("\"#{ v.$var-comment-dots }\""); +} +.#{v.$css-prefix}.#{v.$css-prefix}-houzz { + font-family: 'Font Awesome 7 Brands'; + font-weight: 400; +} +.#{v.$css-prefix}.#{v.$css-prefix}-vimeo { + font-family: 'Font Awesome 7 Brands'; + font-weight: 400; +} +.#{v.$css-prefix}.#{v.$css-prefix}-vimeo { + #{v.$icon-property}: string.unquote("\"#{ v.$var-vimeo-v }\""); +} +.#{v.$css-prefix}.#{v.$css-prefix}-black-tie { + font-family: 'Font Awesome 7 Brands'; + font-weight: 400; +} +.#{v.$css-prefix}.#{v.$css-prefix}-fonticons { + font-family: 'Font Awesome 7 Brands'; + font-weight: 400; +} +.#{v.$css-prefix}.#{v.$css-prefix}-reddit-alien { + font-family: 'Font Awesome 7 Brands'; + font-weight: 400; +} +.#{v.$css-prefix}.#{v.$css-prefix}-edge { + font-family: 'Font Awesome 7 Brands'; + font-weight: 400; +} +.#{v.$css-prefix}.#{v.$css-prefix}-credit-card-alt { + #{v.$icon-property}: string.unquote("\"#{ v.$var-credit-card }\""); +} +.#{v.$css-prefix}.#{v.$css-prefix}-codiepie { + font-family: 'Font Awesome 7 Brands'; + font-weight: 400; +} +.#{v.$css-prefix}.#{v.$css-prefix}-modx { + font-family: 'Font Awesome 7 Brands'; + font-weight: 400; +} +.#{v.$css-prefix}.#{v.$css-prefix}-fort-awesome { + font-family: 'Font Awesome 7 Brands'; + font-weight: 400; +} +.#{v.$css-prefix}.#{v.$css-prefix}-usb { + font-family: 'Font Awesome 7 Brands'; + font-weight: 400; +} +.#{v.$css-prefix}.#{v.$css-prefix}-product-hunt { + font-family: 'Font Awesome 7 Brands'; + font-weight: 400; +} +.#{v.$css-prefix}.#{v.$css-prefix}-mixcloud { + font-family: 'Font Awesome 7 Brands'; + font-weight: 400; +} +.#{v.$css-prefix}.#{v.$css-prefix}-scribd { + font-family: 'Font Awesome 7 Brands'; + font-weight: 400; +} +.#{v.$css-prefix}.#{v.$css-prefix}-pause-circle-o { + font-family: 'Font Awesome 7 Free'; + font-weight: 400; +} +.#{v.$css-prefix}.#{v.$css-prefix}-pause-circle-o { + #{v.$icon-property}: string.unquote("\"#{ v.$var-circle-pause }\""); +} +.#{v.$css-prefix}.#{v.$css-prefix}-stop-circle-o { + font-family: 'Font Awesome 7 Free'; + font-weight: 400; +} +.#{v.$css-prefix}.#{v.$css-prefix}-stop-circle-o { + #{v.$icon-property}: string.unquote("\"#{ v.$var-circle-stop }\""); +} +.#{v.$css-prefix}.#{v.$css-prefix}-bluetooth { + font-family: 'Font Awesome 7 Brands'; + font-weight: 400; +} +.#{v.$css-prefix}.#{v.$css-prefix}-bluetooth-b { + font-family: 'Font Awesome 7 Brands'; + font-weight: 400; +} +.#{v.$css-prefix}.#{v.$css-prefix}-gitlab { + font-family: 'Font Awesome 7 Brands'; + font-weight: 400; +} +.#{v.$css-prefix}.#{v.$css-prefix}-wpbeginner { + font-family: 'Font Awesome 7 Brands'; + font-weight: 400; +} +.#{v.$css-prefix}.#{v.$css-prefix}-wpforms { + font-family: 'Font Awesome 7 Brands'; + font-weight: 400; +} +.#{v.$css-prefix}.#{v.$css-prefix}-envira { + font-family: 'Font Awesome 7 Brands'; + font-weight: 400; +} +.#{v.$css-prefix}.#{v.$css-prefix}-wheelchair-alt { + font-family: 'Font Awesome 7 Brands'; + font-weight: 400; +} +.#{v.$css-prefix}.#{v.$css-prefix}-wheelchair-alt { + #{v.$icon-property}: string.unquote("\"#{ v.$var-accessible-icon }\""); +} +.#{v.$css-prefix}.#{v.$css-prefix}-question-circle-o { + font-family: 'Font Awesome 7 Free'; + font-weight: 400; +} +.#{v.$css-prefix}.#{v.$css-prefix}-question-circle-o { + #{v.$icon-property}: string.unquote("\"#{ v.$var-circle-question }\""); +} +.#{v.$css-prefix}.#{v.$css-prefix}-volume-control-phone { + #{v.$icon-property}: string.unquote("\"#{ v.$var-phone-volume }\""); +} +.#{v.$css-prefix}.#{v.$css-prefix}-asl-interpreting { + #{v.$icon-property}: string.unquote("\"#{ v.$var-hands-asl-interpreting }\""); +} +.#{v.$css-prefix}.#{v.$css-prefix}-deafness { + #{v.$icon-property}: string.unquote("\"#{ v.$var-ear-deaf }\""); +} +.#{v.$css-prefix}.#{v.$css-prefix}-hard-of-hearing { + #{v.$icon-property}: string.unquote("\"#{ v.$var-ear-deaf }\""); +} +.#{v.$css-prefix}.#{v.$css-prefix}-glide { + font-family: 'Font Awesome 7 Brands'; + font-weight: 400; +} +.#{v.$css-prefix}.#{v.$css-prefix}-glide-g { + font-family: 'Font Awesome 7 Brands'; + font-weight: 400; +} +.#{v.$css-prefix}.#{v.$css-prefix}-signing { + #{v.$icon-property}: string.unquote("\"#{ v.$var-hands }\""); +} +.#{v.$css-prefix}.#{v.$css-prefix}-viadeo { + font-family: 'Font Awesome 7 Brands'; + font-weight: 400; +} +.#{v.$css-prefix}.#{v.$css-prefix}-viadeo-square { + font-family: 'Font Awesome 7 Brands'; + font-weight: 400; +} +.#{v.$css-prefix}.#{v.$css-prefix}-viadeo-square { + #{v.$icon-property}: string.unquote("\"#{ v.$var-square-viadeo }\""); +} +.#{v.$css-prefix}.#{v.$css-prefix}-snapchat { + font-family: 'Font Awesome 7 Brands'; + font-weight: 400; +} +.#{v.$css-prefix}.#{v.$css-prefix}-snapchat-ghost { + font-family: 'Font Awesome 7 Brands'; + font-weight: 400; +} +.#{v.$css-prefix}.#{v.$css-prefix}-snapchat-ghost { + #{v.$icon-property}: string.unquote("\"#{ v.$var-snapchat }\""); +} +.#{v.$css-prefix}.#{v.$css-prefix}-snapchat-square { + font-family: 'Font Awesome 7 Brands'; + font-weight: 400; +} +.#{v.$css-prefix}.#{v.$css-prefix}-snapchat-square { + #{v.$icon-property}: string.unquote("\"#{ v.$var-square-snapchat }\""); +} +.#{v.$css-prefix}.#{v.$css-prefix}-pied-piper { + font-family: 'Font Awesome 7 Brands'; + font-weight: 400; +} +.#{v.$css-prefix}.#{v.$css-prefix}-first-order { + font-family: 'Font Awesome 7 Brands'; + font-weight: 400; +} +.#{v.$css-prefix}.#{v.$css-prefix}-yoast { + font-family: 'Font Awesome 7 Brands'; + font-weight: 400; +} +.#{v.$css-prefix}.#{v.$css-prefix}-themeisle { + font-family: 'Font Awesome 7 Brands'; + font-weight: 400; +} +.#{v.$css-prefix}.#{v.$css-prefix}-google-plus-official { + font-family: 'Font Awesome 7 Brands'; + font-weight: 400; +} +.#{v.$css-prefix}.#{v.$css-prefix}-google-plus-official { + #{v.$icon-property}: string.unquote("\"#{ v.$var-google-plus }\""); +} +.#{v.$css-prefix}.#{v.$css-prefix}-google-plus-circle { + font-family: 'Font Awesome 7 Brands'; + font-weight: 400; +} +.#{v.$css-prefix}.#{v.$css-prefix}-google-plus-circle { + #{v.$icon-property}: string.unquote("\"#{ v.$var-google-plus }\""); +} +.#{v.$css-prefix}.#{v.$css-prefix}-font-awesome { + font-family: 'Font Awesome 7 Brands'; + font-weight: 400; +} +.#{v.$css-prefix}.#{v.$css-prefix}-fa { + font-family: 'Font Awesome 7 Brands'; + font-weight: 400; +} +.#{v.$css-prefix}.#{v.$css-prefix}-fa { + #{v.$icon-property}: string.unquote("\"#{ v.$var-font-awesome }\""); +} +.#{v.$css-prefix}.#{v.$css-prefix}-handshake-o { + font-family: 'Font Awesome 7 Free'; + font-weight: 400; +} +.#{v.$css-prefix}.#{v.$css-prefix}-handshake-o { + #{v.$icon-property}: string.unquote("\"#{ v.$var-handshake }\""); +} +.#{v.$css-prefix}.#{v.$css-prefix}-envelope-open-o { + font-family: 'Font Awesome 7 Free'; + font-weight: 400; +} +.#{v.$css-prefix}.#{v.$css-prefix}-envelope-open-o { + #{v.$icon-property}: string.unquote("\"#{ v.$var-envelope-open }\""); +} +.#{v.$css-prefix}.#{v.$css-prefix}-linode { + font-family: 'Font Awesome 7 Brands'; + font-weight: 400; +} +.#{v.$css-prefix}.#{v.$css-prefix}-address-book-o { + font-family: 'Font Awesome 7 Free'; + font-weight: 400; +} +.#{v.$css-prefix}.#{v.$css-prefix}-address-book-o { + #{v.$icon-property}: string.unquote("\"#{ v.$var-address-book }\""); +} +.#{v.$css-prefix}.#{v.$css-prefix}-vcard { + #{v.$icon-property}: string.unquote("\"#{ v.$var-address-card }\""); +} +.#{v.$css-prefix}.#{v.$css-prefix}-address-card-o { + font-family: 'Font Awesome 7 Free'; + font-weight: 400; +} +.#{v.$css-prefix}.#{v.$css-prefix}-address-card-o { + #{v.$icon-property}: string.unquote("\"#{ v.$var-address-card }\""); +} +.#{v.$css-prefix}.#{v.$css-prefix}-vcard-o { + font-family: 'Font Awesome 7 Free'; + font-weight: 400; +} +.#{v.$css-prefix}.#{v.$css-prefix}-vcard-o { + #{v.$icon-property}: string.unquote("\"#{ v.$var-address-card }\""); +} +.#{v.$css-prefix}.#{v.$css-prefix}-user-circle-o { + font-family: 'Font Awesome 7 Free'; + font-weight: 400; +} +.#{v.$css-prefix}.#{v.$css-prefix}-user-circle-o { + #{v.$icon-property}: string.unquote("\"#{ v.$var-circle-user }\""); +} +.#{v.$css-prefix}.#{v.$css-prefix}-user-o { + font-family: 'Font Awesome 7 Free'; + font-weight: 400; +} +.#{v.$css-prefix}.#{v.$css-prefix}-user-o { + #{v.$icon-property}: string.unquote("\"#{ v.$var-user }\""); +} +.#{v.$css-prefix}.#{v.$css-prefix}-id-badge { + font-family: 'Font Awesome 7 Free'; + font-weight: 400; +} +.#{v.$css-prefix}.#{v.$css-prefix}-drivers-license { + #{v.$icon-property}: string.unquote("\"#{ v.$var-id-card }\""); +} +.#{v.$css-prefix}.#{v.$css-prefix}-id-card-o { + font-family: 'Font Awesome 7 Free'; + font-weight: 400; +} +.#{v.$css-prefix}.#{v.$css-prefix}-id-card-o { + #{v.$icon-property}: string.unquote("\"#{ v.$var-id-card }\""); +} +.#{v.$css-prefix}.#{v.$css-prefix}-drivers-license-o { + font-family: 'Font Awesome 7 Free'; + font-weight: 400; +} +.#{v.$css-prefix}.#{v.$css-prefix}-drivers-license-o { + #{v.$icon-property}: string.unquote("\"#{ v.$var-id-card }\""); +} +.#{v.$css-prefix}.#{v.$css-prefix}-quora { + font-family: 'Font Awesome 7 Brands'; + font-weight: 400; +} +.#{v.$css-prefix}.#{v.$css-prefix}-free-code-camp { + font-family: 'Font Awesome 7 Brands'; + font-weight: 400; +} +.#{v.$css-prefix}.#{v.$css-prefix}-telegram { + font-family: 'Font Awesome 7 Brands'; + font-weight: 400; +} +.#{v.$css-prefix}.#{v.$css-prefix}-thermometer-4 { + #{v.$icon-property}: string.unquote("\"#{ v.$var-temperature-full }\""); +} +.#{v.$css-prefix}.#{v.$css-prefix}-thermometer { + #{v.$icon-property}: string.unquote("\"#{ v.$var-temperature-full }\""); +} +.#{v.$css-prefix}.#{v.$css-prefix}-thermometer-3 { + #{v.$icon-property}: string.unquote("\"#{ v.$var-temperature-three-quarters }\""); +} +.#{v.$css-prefix}.#{v.$css-prefix}-thermometer-2 { + #{v.$icon-property}: string.unquote("\"#{ v.$var-temperature-half }\""); +} +.#{v.$css-prefix}.#{v.$css-prefix}-thermometer-1 { + #{v.$icon-property}: string.unquote("\"#{ v.$var-temperature-quarter }\""); +} +.#{v.$css-prefix}.#{v.$css-prefix}-thermometer-0 { + #{v.$icon-property}: string.unquote("\"#{ v.$var-temperature-empty }\""); +} +.#{v.$css-prefix}.#{v.$css-prefix}-bathtub { + #{v.$icon-property}: string.unquote("\"#{ v.$var-bath }\""); +} +.#{v.$css-prefix}.#{v.$css-prefix}-s15 { + #{v.$icon-property}: string.unquote("\"#{ v.$var-bath }\""); +} +.#{v.$css-prefix}.#{v.$css-prefix}-window-maximize { + font-family: 'Font Awesome 7 Free'; + font-weight: 400; +} +.#{v.$css-prefix}.#{v.$css-prefix}-window-restore { + font-family: 'Font Awesome 7 Free'; + font-weight: 400; +} +.#{v.$css-prefix}.#{v.$css-prefix}-times-rectangle { + #{v.$icon-property}: string.unquote("\"#{ v.$var-rectangle-xmark }\""); +} +.#{v.$css-prefix}.#{v.$css-prefix}-window-close-o { + font-family: 'Font Awesome 7 Free'; + font-weight: 400; +} +.#{v.$css-prefix}.#{v.$css-prefix}-window-close-o { + #{v.$icon-property}: string.unquote("\"#{ v.$var-rectangle-xmark }\""); +} +.#{v.$css-prefix}.#{v.$css-prefix}-times-rectangle-o { + font-family: 'Font Awesome 7 Free'; + font-weight: 400; +} +.#{v.$css-prefix}.#{v.$css-prefix}-times-rectangle-o { + #{v.$icon-property}: string.unquote("\"#{ v.$var-rectangle-xmark }\""); +} +.#{v.$css-prefix}.#{v.$css-prefix}-bandcamp { + font-family: 'Font Awesome 7 Brands'; + font-weight: 400; +} +.#{v.$css-prefix}.#{v.$css-prefix}-grav { + font-family: 'Font Awesome 7 Brands'; + font-weight: 400; +} +.#{v.$css-prefix}.#{v.$css-prefix}-etsy { + font-family: 'Font Awesome 7 Brands'; + font-weight: 400; +} +.#{v.$css-prefix}.#{v.$css-prefix}-imdb { + font-family: 'Font Awesome 7 Brands'; + font-weight: 400; +} +.#{v.$css-prefix}.#{v.$css-prefix}-ravelry { + font-family: 'Font Awesome 7 Brands'; + font-weight: 400; +} +.#{v.$css-prefix}.#{v.$css-prefix}-eercast { + font-family: 'Font Awesome 7 Brands'; + font-weight: 400; +} +.#{v.$css-prefix}.#{v.$css-prefix}-eercast { + #{v.$icon-property}: string.unquote("\"#{ v.$var-sellcast }\""); +} +.#{v.$css-prefix}.#{v.$css-prefix}-snowflake-o { + font-family: 'Font Awesome 7 Free'; + font-weight: 400; +} +.#{v.$css-prefix}.#{v.$css-prefix}-snowflake-o { + #{v.$icon-property}: string.unquote("\"#{ v.$var-snowflake }\""); +} +.#{v.$css-prefix}.#{v.$css-prefix}-superpowers { + font-family: 'Font Awesome 7 Brands'; + font-weight: 400; +} +.#{v.$css-prefix}.#{v.$css-prefix}-wpexplorer { + font-family: 'Font Awesome 7 Brands'; + font-weight: 400; +} +.#{v.$css-prefix}.#{v.$css-prefix}-meetup { + font-family: 'Font Awesome 7 Brands'; + font-weight: 400; +} diff --git a/webseite-react-php-jwt/react-app/src/styles/icons/fontawesome-7.1.0/_sizing.scss b/webseite-react-php-jwt/react-app/src/styles/icons/fontawesome-7.1.0/_sizing.scss new file mode 100644 index 0000000..90a5573 --- /dev/null +++ b/webseite-react-php-jwt/react-app/src/styles/icons/fontawesome-7.1.0/_sizing.scss @@ -0,0 +1,18 @@ +// sizing icons +// ------------------------- +@use 'variables' as v; +@use 'mixins' as m; + +// literal magnification scale +@for $i from 1 through 10 { + .#{v.$css-prefix}-#{$i}x { + font-size: $i * 1em; + } +} + +// step-based scale (with alignment) +@each $size, $value in v.$sizes { + .#{v.$css-prefix}-#{$size} { + @include m.fa-size($value); + } +} diff --git a/webseite-react-php-jwt/react-app/src/styles/icons/fontawesome-7.1.0/_stacked.scss b/webseite-react-php-jwt/react-app/src/styles/icons/fontawesome-7.1.0/_stacked.scss new file mode 100644 index 0000000..dbc86e1 --- /dev/null +++ b/webseite-react-php-jwt/react-app/src/styles/icons/fontawesome-7.1.0/_stacked.scss @@ -0,0 +1,35 @@ +// stacking icons +// ------------------------- +@use 'variables' as v; + +.#{v.$css-prefix}-stack { + display: inline-block; + height: 2em; + line-height: 2em; + position: relative; + vertical-align: v.$stack-vertical-align; + width: v.$stack-width; +} + +.#{v.$css-prefix}-stack-1x, +.#{v.$css-prefix}-stack-2x { + --#{v.$css-prefix}-width: 100%; + + inset: 0; + position: absolute; + text-align: center; + width: var(--#{v.$css-prefix}-width); + z-index: var(--#{v.$css-prefix}-stack-z-index, #{v.$stack-z-index}); +} + +.#{v.$css-prefix}-stack-1x { + line-height: inherit; +} + +.#{v.$css-prefix}-stack-2x { + font-size: 2em; +} + +.#{v.$css-prefix}-inverse { + color: var(--#{v.$css-prefix}-inverse, #{v.$inverse}); +} diff --git a/webseite-react-php-jwt/react-app/src/styles/icons/fontawesome-7.1.0/_variables.scss b/webseite-react-php-jwt/react-app/src/styles/icons/fontawesome-7.1.0/_variables.scss new file mode 100644 index 0000000..9c38f6b --- /dev/null +++ b/webseite-react-php-jwt/react-app/src/styles/icons/fontawesome-7.1.0/_variables.scss @@ -0,0 +1,5134 @@ +// variables +// -------------------------- + +$css-prefix: fa !default; +$style: 900 !default; +$family: 'Font Awesome 7 Free' !default; + +$icon-property: --fa !default; + +$display: inline-block !default; + +$fw-width: calc((20 / 16) * 1em) !default; +$inverse: #fff !default; + +$border-box-sizing: content-box !default; +$border-color: #eee !default; +$border-padding: 0.1875em 0.25em !default; +$border-radius: 0.1em !default; +$border-style: solid !default; +$border-width: 0.0625em !default; + +$size-scale-2xs: 10 !default; +$size-scale-xs: 12 !default; +$size-scale-sm: 14 !default; +$size-scale-base: 16 !default; +$size-scale-lg: 20 !default; +$size-scale-xl: 24 !default; +$size-scale-2xl: 32 !default; + +$sizes: ( + '2xs': $size-scale-2xs, + 'xs': $size-scale-xs, + 'sm': $size-scale-sm, + 'lg': $size-scale-lg, + 'xl': $size-scale-xl, + '2xl': $size-scale-2xl, +) !default; + +$li-width: 2em !default; +$li-margin: calc($li-width * (5 / 4)) !default; + +$pull-margin: 0.3em !default; + +$primary-opacity: 1 !default; +$secondary-opacity: 0.4 !default; + +$stack-vertical-align: middle !default; +$stack-width: ($fw-width * 2) !default; +$stack-z-index: auto !default; + +// web fonts-related variables +$font-display: block !default; +$font-path: '../fonts/fontawesome-7.1.0' !default; + +// deprecated: these older SCSS variables will be removed with Font Awesome's next major release +$style-family: $family; + +$var-0: \30; +$var-1: \31; +$var-2: \32; +$var-3: \33; +$var-4: \34; +$var-5: \35; +$var-6: \36; +$var-7: \37; +$var-8: \38; +$var-9: \39; +$var-exclamation: \21; +$var-hashtag: \23; +$var-dollar-sign: \24; +$var-dollar: \24; +$var-usd: \24; +$var-percent: \25; +$var-percentage: \25; +$var-asterisk: \2a; +$var-plus: \2b; +$var-add: \2b; +$var-less-than: \3c; +$var-equals: \3d; +$var-greater-than: \3e; +$var-question: \3f; +$var-at: \40; +$var-a: \41; +$var-b: \42; +$var-c: \43; +$var-d: \44; +$var-e: \45; +$var-f: \46; +$var-g: \47; +$var-h: \48; +$var-i: \49; +$var-j: \4a; +$var-k: \4b; +$var-l: \4c; +$var-m: \4d; +$var-n: \4e; +$var-o: \4f; +$var-p: \50; +$var-q: \51; +$var-r: \52; +$var-s: \53; +$var-t: \54; +$var-u: \55; +$var-v: \56; +$var-w: \57; +$var-x: \58; +$var-y: \59; +$var-z: \5a; +$var-faucet: \e005; +$var-faucet-drip: \e006; +$var-house-chimney-window: \e00d; +$var-house-signal: \e012; +$var-temperature-arrow-down: \e03f; +$var-temperature-down: \e03f; +$var-temperature-arrow-up: \e040; +$var-temperature-up: \e040; +$var-trailer: \e041; +$var-bacteria: \e059; +$var-bacterium: \e05a; +$var-box-tissue: \e05b; +$var-hand-holding-medical: \e05c; +$var-hand-sparkles: \e05d; +$var-hands-bubbles: \e05e; +$var-hands-wash: \e05e; +$var-handshake-slash: \e060; +$var-handshake-alt-slash: \e060; +$var-handshake-simple-slash: \e060; +$var-head-side-cough: \e061; +$var-head-side-cough-slash: \e062; +$var-head-side-mask: \e063; +$var-head-side-virus: \e064; +$var-house-chimney-user: \e065; +$var-house-laptop: \e066; +$var-laptop-house: \e066; +$var-lungs-virus: \e067; +$var-people-arrows: \e068; +$var-people-arrows-left-right: \e068; +$var-plane-slash: \e069; +$var-pump-medical: \e06a; +$var-pump-soap: \e06b; +$var-shield-virus: \e06c; +$var-sink: \e06d; +$var-soap: \e06e; +$var-stopwatch-20: \e06f; +$var-shop-slash: \e070; +$var-store-alt-slash: \e070; +$var-store-slash: \e071; +$var-toilet-paper-slash: \e072; +$var-users-slash: \e073; +$var-virus: \e074; +$var-virus-slash: \e075; +$var-viruses: \e076; +$var-vest: \e085; +$var-vest-patches: \e086; +$var-arrow-trend-down: \e097; +$var-arrow-trend-up: \e098; +$var-arrow-up-from-bracket: \e09a; +$var-austral-sign: \e0a9; +$var-baht-sign: \e0ac; +$var-bitcoin-sign: \e0b4; +$var-bolt-lightning: \e0b7; +$var-book-bookmark: \e0bb; +$var-camera-rotate: \e0d8; +$var-cedi-sign: \e0df; +$var-chart-column: \e0e3; +$var-chart-gantt: \e0e4; +$var-clapperboard: \e131; +$var-clover: \e139; +$var-code-compare: \e13a; +$var-code-fork: \e13b; +$var-code-pull-request: \e13c; +$var-colon-sign: \e140; +$var-cruzeiro-sign: \e152; +$var-display: \e163; +$var-dong-sign: \e169; +$var-elevator: \e16d; +$var-filter-circle-xmark: \e17b; +$var-florin-sign: \e184; +$var-folder-closed: \e185; +$var-franc-sign: \e18f; +$var-guarani-sign: \e19a; +$var-gun: \e19b; +$var-hands-clapping: \e1a8; +$var-house-user: \e1b0; +$var-home-user: \e1b0; +$var-indian-rupee-sign: \e1bc; +$var-indian-rupee: \e1bc; +$var-inr: \e1bc; +$var-kip-sign: \e1c4; +$var-lari-sign: \e1c8; +$var-litecoin-sign: \e1d3; +$var-manat-sign: \e1d5; +$var-mask-face: \e1d7; +$var-mill-sign: \e1ed; +$var-money-bills: \e1f3; +$var-naira-sign: \e1f6; +$var-notdef: \e1fe; +$var-panorama: \e209; +$var-peseta-sign: \e221; +$var-peso-sign: \e222; +$var-plane-up: \e22d; +$var-rupiah-sign: \e23d; +$var-stairs: \e289; +$var-timeline: \e29c; +$var-truck-front: \e2b7; +$var-turkish-lira-sign: \e2bb; +$var-try: \e2bb; +$var-turkish-lira: \e2bb; +$var-vault: \e2c5; +$var-wand-magic-sparkles: \e2ca; +$var-magic-wand-sparkles: \e2ca; +$var-wheat-awn: \e2cd; +$var-wheat-alt: \e2cd; +$var-wheelchair-move: \e2ce; +$var-wheelchair-alt: \e2ce; +$var-bangladeshi-taka-sign: \e2e6; +$var-bowl-rice: \e2eb; +$var-person-pregnant: \e31e; +$var-house-chimney: \e3af; +$var-home-lg: \e3af; +$var-house-crack: \e3b1; +$var-house-medical: \e3b2; +$var-cent-sign: \e3f5; +$var-plus-minus: \e43c; +$var-sailboat: \e445; +$var-section: \e447; +$var-shrimp: \e448; +$var-brazilian-real-sign: \e46c; +$var-chart-simple: \e473; +$var-diagram-next: \e476; +$var-diagram-predecessor: \e477; +$var-diagram-successor: \e47a; +$var-earth-oceania: \e47b; +$var-globe-oceania: \e47b; +$var-bug-slash: \e490; +$var-file-circle-plus: \e494; +$var-shop-lock: \e4a5; +$var-virus-covid: \e4a8; +$var-virus-covid-slash: \e4a9; +$var-anchor-circle-check: \e4aa; +$var-anchor-circle-exclamation: \e4ab; +$var-anchor-circle-xmark: \e4ac; +$var-anchor-lock: \e4ad; +$var-arrow-down-up-across-line: \e4af; +$var-arrow-down-up-lock: \e4b0; +$var-arrow-right-to-city: \e4b3; +$var-arrow-up-from-ground-water: \e4b5; +$var-arrow-up-from-water-pump: \e4b6; +$var-arrow-up-right-dots: \e4b7; +$var-arrows-down-to-line: \e4b8; +$var-arrows-down-to-people: \e4b9; +$var-arrows-left-right-to-line: \e4ba; +$var-arrows-spin: \e4bb; +$var-arrows-split-up-and-left: \e4bc; +$var-arrows-to-circle: \e4bd; +$var-arrows-to-dot: \e4be; +$var-arrows-to-eye: \e4bf; +$var-arrows-turn-right: \e4c0; +$var-arrows-turn-to-dots: \e4c1; +$var-arrows-up-to-line: \e4c2; +$var-bore-hole: \e4c3; +$var-bottle-droplet: \e4c4; +$var-bottle-water: \e4c5; +$var-bowl-food: \e4c6; +$var-boxes-packing: \e4c7; +$var-bridge: \e4c8; +$var-bridge-circle-check: \e4c9; +$var-bridge-circle-exclamation: \e4ca; +$var-bridge-circle-xmark: \e4cb; +$var-bridge-lock: \e4cc; +$var-bridge-water: \e4ce; +$var-bucket: \e4cf; +$var-bugs: \e4d0; +$var-building-circle-arrow-right: \e4d1; +$var-building-circle-check: \e4d2; +$var-building-circle-exclamation: \e4d3; +$var-building-circle-xmark: \e4d4; +$var-building-flag: \e4d5; +$var-building-lock: \e4d6; +$var-building-ngo: \e4d7; +$var-building-shield: \e4d8; +$var-building-un: \e4d9; +$var-building-user: \e4da; +$var-building-wheat: \e4db; +$var-burst: \e4dc; +$var-car-on: \e4dd; +$var-car-tunnel: \e4de; +$var-child-combatant: \e4e0; +$var-child-rifle: \e4e0; +$var-children: \e4e1; +$var-circle-nodes: \e4e2; +$var-clipboard-question: \e4e3; +$var-cloud-showers-water: \e4e4; +$var-computer: \e4e5; +$var-cubes-stacked: \e4e6; +$var-envelope-circle-check: \e4e8; +$var-explosion: \e4e9; +$var-ferry: \e4ea; +$var-file-circle-exclamation: \e4eb; +$var-file-circle-minus: \e4ed; +$var-file-circle-question: \e4ef; +$var-file-shield: \e4f0; +$var-fire-burner: \e4f1; +$var-fish-fins: \e4f2; +$var-flask-vial: \e4f3; +$var-glass-water: \e4f4; +$var-glass-water-droplet: \e4f5; +$var-group-arrows-rotate: \e4f6; +$var-hand-holding-hand: \e4f7; +$var-handcuffs: \e4f8; +$var-hands-bound: \e4f9; +$var-hands-holding-child: \e4fa; +$var-hands-holding-circle: \e4fb; +$var-heart-circle-bolt: \e4fc; +$var-heart-circle-check: \e4fd; +$var-heart-circle-exclamation: \e4fe; +$var-heart-circle-minus: \e4ff; +$var-heart-circle-plus: \e500; +$var-heart-circle-xmark: \e501; +$var-helicopter-symbol: \e502; +$var-helmet-un: \e503; +$var-hill-avalanche: \e507; +$var-hill-rockslide: \e508; +$var-house-circle-check: \e509; +$var-house-circle-exclamation: \e50a; +$var-house-circle-xmark: \e50b; +$var-house-fire: \e50c; +$var-house-flag: \e50d; +$var-house-flood-water: \e50e; +$var-house-flood-water-circle-arrow-right: \e50f; +$var-house-lock: \e510; +$var-house-medical-circle-check: \e511; +$var-house-medical-circle-exclamation: \e512; +$var-house-medical-circle-xmark: \e513; +$var-house-medical-flag: \e514; +$var-house-tsunami: \e515; +$var-jar: \e516; +$var-jar-wheat: \e517; +$var-jet-fighter-up: \e518; +$var-jug-detergent: \e519; +$var-kitchen-set: \e51a; +$var-land-mine-on: \e51b; +$var-landmark-flag: \e51c; +$var-laptop-file: \e51d; +$var-lines-leaning: \e51e; +$var-location-pin-lock: \e51f; +$var-locust: \e520; +$var-magnifying-glass-arrow-right: \e521; +$var-magnifying-glass-chart: \e522; +$var-mars-and-venus-burst: \e523; +$var-mask-ventilator: \e524; +$var-mattress-pillow: \e525; +$var-mobile-retro: \e527; +$var-money-bill-transfer: \e528; +$var-money-bill-trend-up: \e529; +$var-money-bill-wheat: \e52a; +$var-mosquito: \e52b; +$var-mosquito-net: \e52c; +$var-mound: \e52d; +$var-mountain-city: \e52e; +$var-mountain-sun: \e52f; +$var-oil-well: \e532; +$var-people-group: \e533; +$var-people-line: \e534; +$var-people-pulling: \e535; +$var-people-robbery: \e536; +$var-people-roof: \e537; +$var-person-arrow-down-to-line: \e538; +$var-person-arrow-up-from-line: \e539; +$var-person-breastfeeding: \e53a; +$var-person-burst: \e53b; +$var-person-cane: \e53c; +$var-person-chalkboard: \e53d; +$var-person-circle-check: \e53e; +$var-person-circle-exclamation: \e53f; +$var-person-circle-minus: \e540; +$var-person-circle-plus: \e541; +$var-person-circle-question: \e542; +$var-person-circle-xmark: \e543; +$var-person-dress-burst: \e544; +$var-person-drowning: \e545; +$var-person-falling: \e546; +$var-person-falling-burst: \e547; +$var-person-half-dress: \e548; +$var-person-harassing: \e549; +$var-person-military-pointing: \e54a; +$var-person-military-rifle: \e54b; +$var-person-military-to-person: \e54c; +$var-person-rays: \e54d; +$var-person-rifle: \e54e; +$var-person-shelter: \e54f; +$var-person-walking-arrow-loop-left: \e551; +$var-person-walking-arrow-right: \e552; +$var-person-walking-dashed-line-arrow-right: \e553; +$var-person-walking-luggage: \e554; +$var-plane-circle-check: \e555; +$var-plane-circle-exclamation: \e556; +$var-plane-circle-xmark: \e557; +$var-plane-lock: \e558; +$var-plate-wheat: \e55a; +$var-plug-circle-bolt: \e55b; +$var-plug-circle-check: \e55c; +$var-plug-circle-exclamation: \e55d; +$var-plug-circle-minus: \e55e; +$var-plug-circle-plus: \e55f; +$var-plug-circle-xmark: \e560; +$var-ranking-star: \e561; +$var-road-barrier: \e562; +$var-road-bridge: \e563; +$var-road-circle-check: \e564; +$var-road-circle-exclamation: \e565; +$var-road-circle-xmark: \e566; +$var-road-lock: \e567; +$var-road-spikes: \e568; +$var-rug: \e569; +$var-sack-xmark: \e56a; +$var-school-circle-check: \e56b; +$var-school-circle-exclamation: \e56c; +$var-school-circle-xmark: \e56d; +$var-school-flag: \e56e; +$var-school-lock: \e56f; +$var-sheet-plastic: \e571; +$var-shield-cat: \e572; +$var-shield-dog: \e573; +$var-shield-heart: \e574; +$var-square-nfi: \e576; +$var-square-person-confined: \e577; +$var-square-virus: \e578; +$var-staff-snake: \e579; +$var-rod-asclepius: \e579; +$var-rod-snake: \e579; +$var-staff-aesculapius: \e579; +$var-sun-plant-wilt: \e57a; +$var-tarp: \e57b; +$var-tarp-droplet: \e57c; +$var-tent: \e57d; +$var-tent-arrow-down-to-line: \e57e; +$var-tent-arrow-left-right: \e57f; +$var-tent-arrow-turn-left: \e580; +$var-tent-arrows-down: \e581; +$var-tents: \e582; +$var-toilet-portable: \e583; +$var-toilets-portable: \e584; +$var-tower-cell: \e585; +$var-tower-observation: \e586; +$var-tree-city: \e587; +$var-trowel: \e589; +$var-trowel-bricks: \e58a; +$var-truck-arrow-right: \e58b; +$var-truck-droplet: \e58c; +$var-truck-field: \e58d; +$var-truck-field-un: \e58e; +$var-truck-plane: \e58f; +$var-users-between-lines: \e591; +$var-users-line: \e592; +$var-users-rays: \e593; +$var-users-rectangle: \e594; +$var-users-viewfinder: \e595; +$var-vial-circle-check: \e596; +$var-vial-virus: \e597; +$var-wheat-awn-circle-exclamation: \e598; +$var-worm: \e599; +$var-xmarks-lines: \e59a; +$var-child-dress: \e59c; +$var-child-reaching: \e59d; +$var-file-circle-check: \e5a0; +$var-file-circle-xmark: \e5a1; +$var-person-through-window: \e5a9; +$var-plant-wilt: \e5aa; +$var-stapler: \e5af; +$var-train-tram: \e5b4; +$var-table-cells-column-lock: \e678; +$var-table-cells-row-lock: \e67a; +$var-web-awesome: \e682; +$var-thumbtack-slash: \e68f; +$var-thumb-tack-slash: \e68f; +$var-table-cells-row-unlock: \e691; +$var-chart-diagram: \e695; +$var-comment-nodes: \e696; +$var-file-fragment: \e697; +$var-file-half-dashed: \e698; +$var-hexagon-nodes: \e699; +$var-hexagon-nodes-bolt: \e69a; +$var-square-binary: \e69b; +$var-pentagon: \e790; +$var-non-binary: \e807; +$var-spiral: \e80a; +$var-mobile-vibrate: \e816; +$var-single-quote-left: \e81b; +$var-single-quote-right: \e81c; +$var-bus-side: \e81d; +$var-septagon: \e820; +$var-heptagon: \e820; +$var-martini-glass-empty: \f000; +$var-glass-martini: \f000; +$var-music: \f001; +$var-magnifying-glass: \f002; +$var-search: \f002; +$var-heart: \f004; +$var-star: \f005; +$var-user: \f007; +$var-user-alt: \f007; +$var-user-large: \f007; +$var-film: \f008; +$var-film-alt: \f008; +$var-film-simple: \f008; +$var-table-cells-large: \f009; +$var-th-large: \f009; +$var-table-cells: \f00a; +$var-th: \f00a; +$var-table-list: \f00b; +$var-th-list: \f00b; +$var-check: \f00c; +$var-xmark: \f00d; +$var-close: \f00d; +$var-multiply: \f00d; +$var-remove: \f00d; +$var-times: \f00d; +$var-magnifying-glass-plus: \f00e; +$var-search-plus: \f00e; +$var-magnifying-glass-minus: \f010; +$var-search-minus: \f010; +$var-power-off: \f011; +$var-signal: \f012; +$var-signal-5: \f012; +$var-signal-perfect: \f012; +$var-gear: \f013; +$var-cog: \f013; +$var-house: \f015; +$var-home: \f015; +$var-home-alt: \f015; +$var-home-lg-alt: \f015; +$var-clock: \f017; +$var-clock-four: \f017; +$var-road: \f018; +$var-download: \f019; +$var-inbox: \f01c; +$var-arrow-rotate-right: \f01e; +$var-arrow-right-rotate: \f01e; +$var-arrow-rotate-forward: \f01e; +$var-redo: \f01e; +$var-arrows-rotate: \f021; +$var-refresh: \f021; +$var-sync: \f021; +$var-rectangle-list: \f022; +$var-list-alt: \f022; +$var-lock: \f023; +$var-flag: \f024; +$var-headphones: \f025; +$var-headphones-alt: \f025; +$var-headphones-simple: \f025; +$var-volume-off: \f026; +$var-volume-low: \f027; +$var-volume-down: \f027; +$var-volume-high: \f028; +$var-volume-up: \f028; +$var-qrcode: \f029; +$var-barcode: \f02a; +$var-tag: \f02b; +$var-tags: \f02c; +$var-book: \f02d; +$var-bookmark: \f02e; +$var-print: \f02f; +$var-camera: \f030; +$var-camera-alt: \f030; +$var-font: \f031; +$var-bold: \f032; +$var-italic: \f033; +$var-text-height: \f034; +$var-text-width: \f035; +$var-align-left: \f036; +$var-align-center: \f037; +$var-align-right: \f038; +$var-align-justify: \f039; +$var-list: \f03a; +$var-list-squares: \f03a; +$var-outdent: \f03b; +$var-dedent: \f03b; +$var-indent: \f03c; +$var-video: \f03d; +$var-video-camera: \f03d; +$var-image: \f03e; +$var-location-pin: \f041; +$var-map-marker: \f041; +$var-circle-half-stroke: \f042; +$var-adjust: \f042; +$var-droplet: \f043; +$var-tint: \f043; +$var-pen-to-square: \f044; +$var-edit: \f044; +$var-arrows-up-down-left-right: \f047; +$var-arrows: \f047; +$var-backward-step: \f048; +$var-step-backward: \f048; +$var-backward-fast: \f049; +$var-fast-backward: \f049; +$var-backward: \f04a; +$var-play: \f04b; +$var-pause: \f04c; +$var-stop: \f04d; +$var-forward: \f04e; +$var-forward-fast: \f050; +$var-fast-forward: \f050; +$var-forward-step: \f051; +$var-step-forward: \f051; +$var-eject: \f052; +$var-chevron-left: \f053; +$var-chevron-right: \f054; +$var-circle-plus: \f055; +$var-plus-circle: \f055; +$var-circle-minus: \f056; +$var-minus-circle: \f056; +$var-circle-xmark: \f057; +$var-times-circle: \f057; +$var-xmark-circle: \f057; +$var-circle-check: \f058; +$var-check-circle: \f058; +$var-circle-question: \f059; +$var-question-circle: \f059; +$var-circle-info: \f05a; +$var-info-circle: \f05a; +$var-crosshairs: \f05b; +$var-ban: \f05e; +$var-cancel: \f05e; +$var-arrow-left: \f060; +$var-arrow-right: \f061; +$var-arrow-up: \f062; +$var-arrow-down: \f063; +$var-share: \f064; +$var-mail-forward: \f064; +$var-expand: \f065; +$var-compress: \f066; +$var-minus: \f068; +$var-subtract: \f068; +$var-circle-exclamation: \f06a; +$var-exclamation-circle: \f06a; +$var-gift: \f06b; +$var-leaf: \f06c; +$var-fire: \f06d; +$var-eye: \f06e; +$var-eye-slash: \f070; +$var-triangle-exclamation: \f071; +$var-exclamation-triangle: \f071; +$var-warning: \f071; +$var-plane: \f072; +$var-calendar-days: \f073; +$var-calendar-alt: \f073; +$var-shuffle: \f074; +$var-random: \f074; +$var-comment: \f075; +$var-magnet: \f076; +$var-chevron-up: \f077; +$var-chevron-down: \f078; +$var-retweet: \f079; +$var-cart-shopping: \f07a; +$var-shopping-cart: \f07a; +$var-folder: \f07b; +$var-folder-blank: \f07b; +$var-folder-open: \f07c; +$var-arrows-up-down: \f07d; +$var-arrows-v: \f07d; +$var-arrows-left-right: \f07e; +$var-arrows-h: \f07e; +$var-chart-bar: \f080; +$var-bar-chart: \f080; +$var-camera-retro: \f083; +$var-key: \f084; +$var-gears: \f085; +$var-cogs: \f085; +$var-comments: \f086; +$var-star-half: \f089; +$var-arrow-right-from-bracket: \f08b; +$var-sign-out: \f08b; +$var-thumbtack: \f08d; +$var-thumb-tack: \f08d; +$var-arrow-up-right-from-square: \f08e; +$var-external-link: \f08e; +$var-arrow-right-to-bracket: \f090; +$var-sign-in: \f090; +$var-trophy: \f091; +$var-upload: \f093; +$var-lemon: \f094; +$var-phone: \f095; +$var-square-phone: \f098; +$var-phone-square: \f098; +$var-unlock: \f09c; +$var-credit-card: \f09d; +$var-credit-card-alt: \f09d; +$var-rss: \f09e; +$var-feed: \f09e; +$var-hard-drive: \f0a0; +$var-hdd: \f0a0; +$var-bullhorn: \f0a1; +$var-certificate: \f0a3; +$var-hand-point-right: \f0a4; +$var-hand-point-left: \f0a5; +$var-hand-point-up: \f0a6; +$var-hand-point-down: \f0a7; +$var-circle-arrow-left: \f0a8; +$var-arrow-circle-left: \f0a8; +$var-circle-arrow-right: \f0a9; +$var-arrow-circle-right: \f0a9; +$var-circle-arrow-up: \f0aa; +$var-arrow-circle-up: \f0aa; +$var-circle-arrow-down: \f0ab; +$var-arrow-circle-down: \f0ab; +$var-globe: \f0ac; +$var-wrench: \f0ad; +$var-list-check: \f0ae; +$var-tasks: \f0ae; +$var-filter: \f0b0; +$var-briefcase: \f0b1; +$var-up-down-left-right: \f0b2; +$var-arrows-alt: \f0b2; +$var-users: \f0c0; +$var-link: \f0c1; +$var-chain: \f0c1; +$var-cloud: \f0c2; +$var-flask: \f0c3; +$var-scissors: \f0c4; +$var-cut: \f0c4; +$var-copy: \f0c5; +$var-paperclip: \f0c6; +$var-floppy-disk: \f0c7; +$var-save: \f0c7; +$var-square: \f0c8; +$var-bars: \f0c9; +$var-navicon: \f0c9; +$var-list-ul: \f0ca; +$var-list-dots: \f0ca; +$var-list-ol: \f0cb; +$var-list-1-2: \f0cb; +$var-list-numeric: \f0cb; +$var-strikethrough: \f0cc; +$var-underline: \f0cd; +$var-table: \f0ce; +$var-wand-magic: \f0d0; +$var-magic: \f0d0; +$var-truck: \f0d1; +$var-money-bill: \f0d6; +$var-caret-down: \f0d7; +$var-caret-up: \f0d8; +$var-caret-left: \f0d9; +$var-caret-right: \f0da; +$var-table-columns: \f0db; +$var-columns: \f0db; +$var-sort: \f0dc; +$var-unsorted: \f0dc; +$var-sort-down: \f0dd; +$var-sort-desc: \f0dd; +$var-sort-up: \f0de; +$var-sort-asc: \f0de; +$var-envelope: \f0e0; +$var-arrow-rotate-left: \f0e2; +$var-arrow-left-rotate: \f0e2; +$var-arrow-rotate-back: \f0e2; +$var-arrow-rotate-backward: \f0e2; +$var-undo: \f0e2; +$var-gavel: \f0e3; +$var-legal: \f0e3; +$var-bolt: \f0e7; +$var-zap: \f0e7; +$var-sitemap: \f0e8; +$var-umbrella: \f0e9; +$var-paste: \f0ea; +$var-file-clipboard: \f0ea; +$var-lightbulb: \f0eb; +$var-arrow-right-arrow-left: \f0ec; +$var-exchange: \f0ec; +$var-cloud-arrow-down: \f0ed; +$var-cloud-download: \f0ed; +$var-cloud-download-alt: \f0ed; +$var-cloud-arrow-up: \f0ee; +$var-cloud-upload: \f0ee; +$var-cloud-upload-alt: \f0ee; +$var-user-doctor: \f0f0; +$var-user-md: \f0f0; +$var-stethoscope: \f0f1; +$var-suitcase: \f0f2; +$var-bell: \f0f3; +$var-mug-saucer: \f0f4; +$var-coffee: \f0f4; +$var-hospital: \f0f8; +$var-hospital-alt: \f0f8; +$var-hospital-wide: \f0f8; +$var-truck-medical: \f0f9; +$var-ambulance: \f0f9; +$var-suitcase-medical: \f0fa; +$var-medkit: \f0fa; +$var-jet-fighter: \f0fb; +$var-fighter-jet: \f0fb; +$var-beer-mug-empty: \f0fc; +$var-beer: \f0fc; +$var-square-h: \f0fd; +$var-h-square: \f0fd; +$var-square-plus: \f0fe; +$var-plus-square: \f0fe; +$var-angles-left: \f100; +$var-angle-double-left: \f100; +$var-angles-right: \f101; +$var-angle-double-right: \f101; +$var-angles-up: \f102; +$var-angle-double-up: \f102; +$var-angles-down: \f103; +$var-angle-double-down: \f103; +$var-angle-left: \f104; +$var-angle-right: \f105; +$var-angle-up: \f106; +$var-angle-down: \f107; +$var-laptop: \f109; +$var-tablet-button: \f10a; +$var-mobile-button: \f10b; +$var-quote-left: \f10d; +$var-quote-left-alt: \f10d; +$var-quote-right: \f10e; +$var-quote-right-alt: \f10e; +$var-spinner: \f110; +$var-circle: \f111; +$var-face-smile: \f118; +$var-smile: \f118; +$var-face-frown: \f119; +$var-frown: \f119; +$var-face-meh: \f11a; +$var-meh: \f11a; +$var-gamepad: \f11b; +$var-keyboard: \f11c; +$var-flag-checkered: \f11e; +$var-terminal: \f120; +$var-code: \f121; +$var-reply-all: \f122; +$var-mail-reply-all: \f122; +$var-location-arrow: \f124; +$var-crop: \f125; +$var-code-branch: \f126; +$var-link-slash: \f127; +$var-chain-broken: \f127; +$var-chain-slash: \f127; +$var-unlink: \f127; +$var-info: \f129; +$var-superscript: \f12b; +$var-subscript: \f12c; +$var-eraser: \f12d; +$var-puzzle-piece: \f12e; +$var-microphone: \f130; +$var-microphone-slash: \f131; +$var-shield: \f132; +$var-shield-blank: \f132; +$var-calendar: \f133; +$var-fire-extinguisher: \f134; +$var-rocket: \f135; +$var-circle-chevron-left: \f137; +$var-chevron-circle-left: \f137; +$var-circle-chevron-right: \f138; +$var-chevron-circle-right: \f138; +$var-circle-chevron-up: \f139; +$var-chevron-circle-up: \f139; +$var-circle-chevron-down: \f13a; +$var-chevron-circle-down: \f13a; +$var-anchor: \f13d; +$var-unlock-keyhole: \f13e; +$var-unlock-alt: \f13e; +$var-bullseye: \f140; +$var-ellipsis: \f141; +$var-ellipsis-h: \f141; +$var-ellipsis-vertical: \f142; +$var-ellipsis-v: \f142; +$var-square-rss: \f143; +$var-rss-square: \f143; +$var-circle-play: \f144; +$var-play-circle: \f144; +$var-ticket: \f145; +$var-square-minus: \f146; +$var-minus-square: \f146; +$var-arrow-turn-up: \f148; +$var-level-up: \f148; +$var-arrow-turn-down: \f149; +$var-level-down: \f149; +$var-square-check: \f14a; +$var-check-square: \f14a; +$var-square-pen: \f14b; +$var-pen-square: \f14b; +$var-pencil-square: \f14b; +$var-square-arrow-up-right: \f14c; +$var-external-link-square: \f14c; +$var-share-from-square: \f14d; +$var-share-square: \f14d; +$var-compass: \f14e; +$var-square-caret-down: \f150; +$var-caret-square-down: \f150; +$var-square-caret-up: \f151; +$var-caret-square-up: \f151; +$var-square-caret-right: \f152; +$var-caret-square-right: \f152; +$var-euro-sign: \f153; +$var-eur: \f153; +$var-euro: \f153; +$var-sterling-sign: \f154; +$var-gbp: \f154; +$var-pound-sign: \f154; +$var-rupee-sign: \f156; +$var-rupee: \f156; +$var-yen-sign: \f157; +$var-cny: \f157; +$var-jpy: \f157; +$var-rmb: \f157; +$var-yen: \f157; +$var-ruble-sign: \f158; +$var-rouble: \f158; +$var-rub: \f158; +$var-ruble: \f158; +$var-won-sign: \f159; +$var-krw: \f159; +$var-won: \f159; +$var-file: \f15b; +$var-file-lines: \f15c; +$var-file-alt: \f15c; +$var-file-text: \f15c; +$var-arrow-down-a-z: \f15d; +$var-sort-alpha-asc: \f15d; +$var-sort-alpha-down: \f15d; +$var-arrow-up-a-z: \f15e; +$var-sort-alpha-up: \f15e; +$var-arrow-down-wide-short: \f160; +$var-sort-amount-asc: \f160; +$var-sort-amount-down: \f160; +$var-arrow-up-wide-short: \f161; +$var-sort-amount-up: \f161; +$var-arrow-down-1-9: \f162; +$var-sort-numeric-asc: \f162; +$var-sort-numeric-down: \f162; +$var-arrow-up-1-9: \f163; +$var-sort-numeric-up: \f163; +$var-thumbs-up: \f164; +$var-thumbs-down: \f165; +$var-arrow-down-long: \f175; +$var-long-arrow-down: \f175; +$var-arrow-up-long: \f176; +$var-long-arrow-up: \f176; +$var-arrow-left-long: \f177; +$var-long-arrow-left: \f177; +$var-arrow-right-long: \f178; +$var-long-arrow-right: \f178; +$var-person-dress: \f182; +$var-female: \f182; +$var-person: \f183; +$var-male: \f183; +$var-sun: \f185; +$var-moon: \f186; +$var-box-archive: \f187; +$var-archive: \f187; +$var-bug: \f188; +$var-square-caret-left: \f191; +$var-caret-square-left: \f191; +$var-circle-dot: \f192; +$var-dot-circle: \f192; +$var-wheelchair: \f193; +$var-lira-sign: \f195; +$var-shuttle-space: \f197; +$var-space-shuttle: \f197; +$var-square-envelope: \f199; +$var-envelope-square: \f199; +$var-building-columns: \f19c; +$var-bank: \f19c; +$var-institution: \f19c; +$var-museum: \f19c; +$var-university: \f19c; +$var-graduation-cap: \f19d; +$var-mortar-board: \f19d; +$var-language: \f1ab; +$var-fax: \f1ac; +$var-building: \f1ad; +$var-child: \f1ae; +$var-paw: \f1b0; +$var-cube: \f1b2; +$var-cubes: \f1b3; +$var-recycle: \f1b8; +$var-car: \f1b9; +$var-automobile: \f1b9; +$var-taxi: \f1ba; +$var-cab: \f1ba; +$var-tree: \f1bb; +$var-database: \f1c0; +$var-file-pdf: \f1c1; +$var-file-word: \f1c2; +$var-file-excel: \f1c3; +$var-file-powerpoint: \f1c4; +$var-file-image: \f1c5; +$var-file-zipper: \f1c6; +$var-file-archive: \f1c6; +$var-file-audio: \f1c7; +$var-file-video: \f1c8; +$var-file-code: \f1c9; +$var-life-ring: \f1cd; +$var-circle-notch: \f1ce; +$var-paper-plane: \f1d8; +$var-clock-rotate-left: \f1da; +$var-history: \f1da; +$var-heading: \f1dc; +$var-header: \f1dc; +$var-paragraph: \f1dd; +$var-sliders: \f1de; +$var-sliders-h: \f1de; +$var-share-nodes: \f1e0; +$var-share-alt: \f1e0; +$var-square-share-nodes: \f1e1; +$var-share-alt-square: \f1e1; +$var-bomb: \f1e2; +$var-futbol: \f1e3; +$var-futbol-ball: \f1e3; +$var-soccer-ball: \f1e3; +$var-tty: \f1e4; +$var-teletype: \f1e4; +$var-binoculars: \f1e5; +$var-plug: \f1e6; +$var-newspaper: \f1ea; +$var-wifi: \f1eb; +$var-wifi-3: \f1eb; +$var-wifi-strong: \f1eb; +$var-calculator: \f1ec; +$var-bell-slash: \f1f6; +$var-trash: \f1f8; +$var-copyright: \f1f9; +$var-eye-dropper: \f1fb; +$var-eye-dropper-empty: \f1fb; +$var-eyedropper: \f1fb; +$var-paintbrush: \f1fc; +$var-paint-brush: \f1fc; +$var-cake-candles: \f1fd; +$var-birthday-cake: \f1fd; +$var-cake: \f1fd; +$var-chart-area: \f1fe; +$var-area-chart: \f1fe; +$var-chart-pie: \f200; +$var-pie-chart: \f200; +$var-chart-line: \f201; +$var-line-chart: \f201; +$var-toggle-off: \f204; +$var-toggle-on: \f205; +$var-bicycle: \f206; +$var-bus: \f207; +$var-closed-captioning: \f20a; +$var-shekel-sign: \f20b; +$var-ils: \f20b; +$var-shekel: \f20b; +$var-sheqel: \f20b; +$var-sheqel-sign: \f20b; +$var-cart-plus: \f217; +$var-cart-arrow-down: \f218; +$var-diamond: \f219; +$var-ship: \f21a; +$var-user-secret: \f21b; +$var-motorcycle: \f21c; +$var-street-view: \f21d; +$var-heart-pulse: \f21e; +$var-heartbeat: \f21e; +$var-venus: \f221; +$var-mars: \f222; +$var-mercury: \f223; +$var-mars-and-venus: \f224; +$var-transgender: \f225; +$var-transgender-alt: \f225; +$var-venus-double: \f226; +$var-mars-double: \f227; +$var-venus-mars: \f228; +$var-mars-stroke: \f229; +$var-mars-stroke-up: \f22a; +$var-mars-stroke-v: \f22a; +$var-mars-stroke-right: \f22b; +$var-mars-stroke-h: \f22b; +$var-neuter: \f22c; +$var-genderless: \f22d; +$var-server: \f233; +$var-user-plus: \f234; +$var-user-xmark: \f235; +$var-user-times: \f235; +$var-bed: \f236; +$var-train: \f238; +$var-train-subway: \f239; +$var-subway: \f239; +$var-battery-full: \f240; +$var-battery: \f240; +$var-battery-5: \f240; +$var-battery-three-quarters: \f241; +$var-battery-4: \f241; +$var-battery-half: \f242; +$var-battery-3: \f242; +$var-battery-quarter: \f243; +$var-battery-2: \f243; +$var-battery-empty: \f244; +$var-battery-0: \f244; +$var-arrow-pointer: \f245; +$var-mouse-pointer: \f245; +$var-i-cursor: \f246; +$var-object-group: \f247; +$var-object-ungroup: \f248; +$var-note-sticky: \f249; +$var-sticky-note: \f249; +$var-clone: \f24d; +$var-scale-balanced: \f24e; +$var-balance-scale: \f24e; +$var-hourglass-start: \f251; +$var-hourglass-1: \f251; +$var-hourglass-half: \f252; +$var-hourglass-2: \f252; +$var-hourglass-end: \f253; +$var-hourglass-3: \f253; +$var-hourglass: \f254; +$var-hourglass-empty: \f254; +$var-hand-back-fist: \f255; +$var-hand-rock: \f255; +$var-hand: \f256; +$var-hand-paper: \f256; +$var-hand-scissors: \f257; +$var-hand-lizard: \f258; +$var-hand-spock: \f259; +$var-hand-pointer: \f25a; +$var-hand-peace: \f25b; +$var-trademark: \f25c; +$var-registered: \f25d; +$var-tv: \f26c; +$var-television: \f26c; +$var-tv-alt: \f26c; +$var-calendar-plus: \f271; +$var-calendar-minus: \f272; +$var-calendar-xmark: \f273; +$var-calendar-times: \f273; +$var-calendar-check: \f274; +$var-industry: \f275; +$var-map-pin: \f276; +$var-signs-post: \f277; +$var-map-signs: \f277; +$var-map: \f279; +$var-message: \f27a; +$var-comment-alt: \f27a; +$var-circle-pause: \f28b; +$var-pause-circle: \f28b; +$var-circle-stop: \f28d; +$var-stop-circle: \f28d; +$var-bag-shopping: \f290; +$var-shopping-bag: \f290; +$var-basket-shopping: \f291; +$var-shopping-basket: \f291; +$var-universal-access: \f29a; +$var-person-walking-with-cane: \f29d; +$var-blind: \f29d; +$var-audio-description: \f29e; +$var-phone-volume: \f2a0; +$var-volume-control-phone: \f2a0; +$var-braille: \f2a1; +$var-ear-listen: \f2a2; +$var-assistive-listening-systems: \f2a2; +$var-hands-asl-interpreting: \f2a3; +$var-american-sign-language-interpreting: \f2a3; +$var-asl-interpreting: \f2a3; +$var-hands-american-sign-language-interpreting: \f2a3; +$var-ear-deaf: \f2a4; +$var-deaf: \f2a4; +$var-deafness: \f2a4; +$var-hard-of-hearing: \f2a4; +$var-hands: \f2a7; +$var-sign-language: \f2a7; +$var-signing: \f2a7; +$var-eye-low-vision: \f2a8; +$var-low-vision: \f2a8; +$var-font-awesome: \f2b4; +$var-font-awesome-flag: \f2b4; +$var-font-awesome-logo-full: \f2b4; +$var-handshake: \f2b5; +$var-handshake-alt: \f2b5; +$var-handshake-simple: \f2b5; +$var-envelope-open: \f2b6; +$var-address-book: \f2b9; +$var-contact-book: \f2b9; +$var-address-card: \f2bb; +$var-contact-card: \f2bb; +$var-vcard: \f2bb; +$var-circle-user: \f2bd; +$var-user-circle: \f2bd; +$var-id-badge: \f2c1; +$var-id-card: \f2c2; +$var-drivers-license: \f2c2; +$var-temperature-full: \f2c7; +$var-temperature-4: \f2c7; +$var-thermometer-4: \f2c7; +$var-thermometer-full: \f2c7; +$var-temperature-three-quarters: \f2c8; +$var-temperature-3: \f2c8; +$var-thermometer-3: \f2c8; +$var-thermometer-three-quarters: \f2c8; +$var-temperature-half: \f2c9; +$var-temperature-2: \f2c9; +$var-thermometer-2: \f2c9; +$var-thermometer-half: \f2c9; +$var-temperature-quarter: \f2ca; +$var-temperature-1: \f2ca; +$var-thermometer-1: \f2ca; +$var-thermometer-quarter: \f2ca; +$var-temperature-empty: \f2cb; +$var-temperature-0: \f2cb; +$var-thermometer-0: \f2cb; +$var-thermometer-empty: \f2cb; +$var-shower: \f2cc; +$var-bath: \f2cd; +$var-bathtub: \f2cd; +$var-podcast: \f2ce; +$var-window-maximize: \f2d0; +$var-window-minimize: \f2d1; +$var-window-restore: \f2d2; +$var-square-xmark: \f2d3; +$var-times-square: \f2d3; +$var-xmark-square: \f2d3; +$var-microchip: \f2db; +$var-snowflake: \f2dc; +$var-spoon: \f2e5; +$var-utensil-spoon: \f2e5; +$var-utensils: \f2e7; +$var-cutlery: \f2e7; +$var-rotate-left: \f2ea; +$var-rotate-back: \f2ea; +$var-rotate-backward: \f2ea; +$var-undo-alt: \f2ea; +$var-trash-can: \f2ed; +$var-trash-alt: \f2ed; +$var-rotate: \f2f1; +$var-sync-alt: \f2f1; +$var-stopwatch: \f2f2; +$var-right-from-bracket: \f2f5; +$var-sign-out-alt: \f2f5; +$var-right-to-bracket: \f2f6; +$var-sign-in-alt: \f2f6; +$var-rotate-right: \f2f9; +$var-redo-alt: \f2f9; +$var-rotate-forward: \f2f9; +$var-poo: \f2fe; +$var-images: \f302; +$var-pencil: \f303; +$var-pencil-alt: \f303; +$var-pen: \f304; +$var-pen-clip: \f305; +$var-pen-alt: \f305; +$var-octagon: \f306; +$var-down-long: \f309; +$var-long-arrow-alt-down: \f309; +$var-left-long: \f30a; +$var-long-arrow-alt-left: \f30a; +$var-right-long: \f30b; +$var-long-arrow-alt-right: \f30b; +$var-up-long: \f30c; +$var-long-arrow-alt-up: \f30c; +$var-hexagon: \f312; +$var-file-pen: \f31c; +$var-file-edit: \f31c; +$var-maximize: \f31e; +$var-expand-arrows-alt: \f31e; +$var-clipboard: \f328; +$var-left-right: \f337; +$var-arrows-alt-h: \f337; +$var-up-down: \f338; +$var-arrows-alt-v: \f338; +$var-alarm-clock: \f34e; +$var-circle-down: \f358; +$var-arrow-alt-circle-down: \f358; +$var-circle-left: \f359; +$var-arrow-alt-circle-left: \f359; +$var-circle-right: \f35a; +$var-arrow-alt-circle-right: \f35a; +$var-circle-up: \f35b; +$var-arrow-alt-circle-up: \f35b; +$var-up-right-from-square: \f35d; +$var-external-link-alt: \f35d; +$var-square-up-right: \f360; +$var-external-link-square-alt: \f360; +$var-right-left: \f362; +$var-exchange-alt: \f362; +$var-repeat: \f363; +$var-code-commit: \f386; +$var-code-merge: \f387; +$var-desktop: \f390; +$var-desktop-alt: \f390; +$var-gem: \f3a5; +$var-turn-down: \f3be; +$var-level-down-alt: \f3be; +$var-turn-up: \f3bf; +$var-level-up-alt: \f3bf; +$var-lock-open: \f3c1; +$var-location-dot: \f3c5; +$var-map-marker-alt: \f3c5; +$var-microphone-lines: \f3c9; +$var-microphone-alt: \f3c9; +$var-mobile-screen-button: \f3cd; +$var-mobile-alt: \f3cd; +$var-mobile: \f3ce; +$var-mobile-android: \f3ce; +$var-mobile-phone: \f3ce; +$var-mobile-screen: \f3cf; +$var-mobile-android-alt: \f3cf; +$var-money-bill-1: \f3d1; +$var-money-bill-alt: \f3d1; +$var-phone-slash: \f3dd; +$var-image-portrait: \f3e0; +$var-portrait: \f3e0; +$var-reply: \f3e5; +$var-mail-reply: \f3e5; +$var-shield-halved: \f3ed; +$var-shield-alt: \f3ed; +$var-tablet-screen-button: \f3fa; +$var-tablet-alt: \f3fa; +$var-tablet: \f3fb; +$var-tablet-android: \f3fb; +$var-ticket-simple: \f3ff; +$var-ticket-alt: \f3ff; +$var-rectangle-xmark: \f410; +$var-rectangle-times: \f410; +$var-times-rectangle: \f410; +$var-window-close: \f410; +$var-down-left-and-up-right-to-center: \f422; +$var-compress-alt: \f422; +$var-up-right-and-down-left-from-center: \f424; +$var-expand-alt: \f424; +$var-baseball-bat-ball: \f432; +$var-baseball: \f433; +$var-baseball-ball: \f433; +$var-basketball: \f434; +$var-basketball-ball: \f434; +$var-bowling-ball: \f436; +$var-chess: \f439; +$var-chess-bishop: \f43a; +$var-chess-board: \f43c; +$var-chess-king: \f43f; +$var-chess-knight: \f441; +$var-chess-pawn: \f443; +$var-chess-queen: \f445; +$var-chess-rook: \f447; +$var-dumbbell: \f44b; +$var-football: \f44e; +$var-football-ball: \f44e; +$var-golf-ball-tee: \f450; +$var-golf-ball: \f450; +$var-hockey-puck: \f453; +$var-broom-ball: \f458; +$var-quidditch: \f458; +$var-quidditch-broom-ball: \f458; +$var-square-full: \f45c; +$var-table-tennis-paddle-ball: \f45d; +$var-ping-pong-paddle-ball: \f45d; +$var-table-tennis: \f45d; +$var-volleyball: \f45f; +$var-volleyball-ball: \f45f; +$var-hand-dots: \f461; +$var-allergies: \f461; +$var-bandage: \f462; +$var-band-aid: \f462; +$var-box: \f466; +$var-boxes-stacked: \f468; +$var-boxes: \f468; +$var-boxes-alt: \f468; +$var-briefcase-medical: \f469; +$var-fire-flame-simple: \f46a; +$var-burn: \f46a; +$var-capsules: \f46b; +$var-clipboard-check: \f46c; +$var-clipboard-list: \f46d; +$var-person-dots-from-line: \f470; +$var-diagnoses: \f470; +$var-dna: \f471; +$var-dolly: \f472; +$var-dolly-box: \f472; +$var-cart-flatbed: \f474; +$var-dolly-flatbed: \f474; +$var-file-medical: \f477; +$var-file-waveform: \f478; +$var-file-medical-alt: \f478; +$var-kit-medical: \f479; +$var-first-aid: \f479; +$var-circle-h: \f47e; +$var-hospital-symbol: \f47e; +$var-id-card-clip: \f47f; +$var-id-card-alt: \f47f; +$var-notes-medical: \f481; +$var-pallet: \f482; +$var-pills: \f484; +$var-prescription-bottle: \f485; +$var-prescription-bottle-medical: \f486; +$var-prescription-bottle-alt: \f486; +$var-bed-pulse: \f487; +$var-procedures: \f487; +$var-truck-fast: \f48b; +$var-shipping-fast: \f48b; +$var-smoking: \f48d; +$var-syringe: \f48e; +$var-tablets: \f490; +$var-thermometer: \f491; +$var-vial: \f492; +$var-vials: \f493; +$var-warehouse: \f494; +$var-weight-scale: \f496; +$var-weight: \f496; +$var-x-ray: \f497; +$var-box-open: \f49e; +$var-comment-dots: \f4ad; +$var-commenting: \f4ad; +$var-comment-slash: \f4b3; +$var-couch: \f4b8; +$var-circle-dollar-to-slot: \f4b9; +$var-donate: \f4b9; +$var-dove: \f4ba; +$var-hand-holding: \f4bd; +$var-hand-holding-heart: \f4be; +$var-hand-holding-dollar: \f4c0; +$var-hand-holding-usd: \f4c0; +$var-hand-holding-droplet: \f4c1; +$var-hand-holding-water: \f4c1; +$var-hands-holding: \f4c2; +$var-handshake-angle: \f4c4; +$var-hands-helping: \f4c4; +$var-parachute-box: \f4cd; +$var-people-carry-box: \f4ce; +$var-people-carry: \f4ce; +$var-piggy-bank: \f4d3; +$var-ribbon: \f4d6; +$var-route: \f4d7; +$var-seedling: \f4d8; +$var-sprout: \f4d8; +$var-sign-hanging: \f4d9; +$var-sign: \f4d9; +$var-face-smile-wink: \f4da; +$var-smile-wink: \f4da; +$var-tape: \f4db; +$var-truck-ramp-box: \f4de; +$var-truck-loading: \f4de; +$var-truck-moving: \f4df; +$var-video-slash: \f4e2; +$var-wine-glass: \f4e3; +$var-user-astronaut: \f4fb; +$var-user-check: \f4fc; +$var-user-clock: \f4fd; +$var-user-gear: \f4fe; +$var-user-cog: \f4fe; +$var-user-pen: \f4ff; +$var-user-edit: \f4ff; +$var-user-group: \f500; +$var-user-friends: \f500; +$var-user-graduate: \f501; +$var-user-lock: \f502; +$var-user-minus: \f503; +$var-user-ninja: \f504; +$var-user-shield: \f505; +$var-user-slash: \f506; +$var-user-alt-slash: \f506; +$var-user-large-slash: \f506; +$var-user-tag: \f507; +$var-user-tie: \f508; +$var-users-gear: \f509; +$var-users-cog: \f509; +$var-scale-unbalanced: \f515; +$var-balance-scale-left: \f515; +$var-scale-unbalanced-flip: \f516; +$var-balance-scale-right: \f516; +$var-blender: \f517; +$var-book-open: \f518; +$var-tower-broadcast: \f519; +$var-broadcast-tower: \f519; +$var-broom: \f51a; +$var-chalkboard: \f51b; +$var-blackboard: \f51b; +$var-chalkboard-user: \f51c; +$var-chalkboard-teacher: \f51c; +$var-church: \f51d; +$var-coins: \f51e; +$var-compact-disc: \f51f; +$var-crow: \f520; +$var-crown: \f521; +$var-dice: \f522; +$var-dice-five: \f523; +$var-dice-four: \f524; +$var-dice-one: \f525; +$var-dice-six: \f526; +$var-dice-three: \f527; +$var-dice-two: \f528; +$var-divide: \f529; +$var-door-closed: \f52a; +$var-door-open: \f52b; +$var-feather: \f52d; +$var-frog: \f52e; +$var-gas-pump: \f52f; +$var-glasses: \f530; +$var-greater-than-equal: \f532; +$var-helicopter: \f533; +$var-infinity: \f534; +$var-kiwi-bird: \f535; +$var-less-than-equal: \f537; +$var-memory: \f538; +$var-microphone-lines-slash: \f539; +$var-microphone-alt-slash: \f539; +$var-money-bill-wave: \f53a; +$var-money-bill-1-wave: \f53b; +$var-money-bill-wave-alt: \f53b; +$var-money-check: \f53c; +$var-money-check-dollar: \f53d; +$var-money-check-alt: \f53d; +$var-not-equal: \f53e; +$var-palette: \f53f; +$var-square-parking: \f540; +$var-parking: \f540; +$var-diagram-project: \f542; +$var-project-diagram: \f542; +$var-receipt: \f543; +$var-robot: \f544; +$var-ruler: \f545; +$var-ruler-combined: \f546; +$var-ruler-horizontal: \f547; +$var-ruler-vertical: \f548; +$var-school: \f549; +$var-screwdriver: \f54a; +$var-shoe-prints: \f54b; +$var-skull: \f54c; +$var-ban-smoking: \f54d; +$var-smoking-ban: \f54d; +$var-store: \f54e; +$var-shop: \f54f; +$var-store-alt: \f54f; +$var-bars-staggered: \f550; +$var-reorder: \f550; +$var-stream: \f550; +$var-stroopwafel: \f551; +$var-toolbox: \f552; +$var-shirt: \f553; +$var-t-shirt: \f553; +$var-tshirt: \f553; +$var-person-walking: \f554; +$var-walking: \f554; +$var-wallet: \f555; +$var-face-angry: \f556; +$var-angry: \f556; +$var-archway: \f557; +$var-book-atlas: \f558; +$var-atlas: \f558; +$var-award: \f559; +$var-delete-left: \f55a; +$var-backspace: \f55a; +$var-bezier-curve: \f55b; +$var-bong: \f55c; +$var-brush: \f55d; +$var-bus-simple: \f55e; +$var-bus-alt: \f55e; +$var-cannabis: \f55f; +$var-check-double: \f560; +$var-martini-glass-citrus: \f561; +$var-cocktail: \f561; +$var-bell-concierge: \f562; +$var-concierge-bell: \f562; +$var-cookie: \f563; +$var-cookie-bite: \f564; +$var-crop-simple: \f565; +$var-crop-alt: \f565; +$var-tachograph-digital: \f566; +$var-digital-tachograph: \f566; +$var-face-dizzy: \f567; +$var-dizzy: \f567; +$var-compass-drafting: \f568; +$var-drafting-compass: \f568; +$var-drum: \f569; +$var-drum-steelpan: \f56a; +$var-feather-pointed: \f56b; +$var-feather-alt: \f56b; +$var-file-contract: \f56c; +$var-file-arrow-down: \f56d; +$var-file-download: \f56d; +$var-file-export: \f56e; +$var-arrow-right-from-file: \f56e; +$var-file-import: \f56f; +$var-arrow-right-to-file: \f56f; +$var-file-invoice: \f570; +$var-file-invoice-dollar: \f571; +$var-file-prescription: \f572; +$var-file-signature: \f573; +$var-file-arrow-up: \f574; +$var-file-upload: \f574; +$var-fill: \f575; +$var-fill-drip: \f576; +$var-fingerprint: \f577; +$var-fish: \f578; +$var-face-flushed: \f579; +$var-flushed: \f579; +$var-face-frown-open: \f57a; +$var-frown-open: \f57a; +$var-martini-glass: \f57b; +$var-glass-martini-alt: \f57b; +$var-earth-africa: \f57c; +$var-globe-africa: \f57c; +$var-earth-americas: \f57d; +$var-earth: \f57d; +$var-earth-america: \f57d; +$var-globe-americas: \f57d; +$var-earth-asia: \f57e; +$var-globe-asia: \f57e; +$var-face-grimace: \f57f; +$var-grimace: \f57f; +$var-face-grin: \f580; +$var-grin: \f580; +$var-face-grin-wide: \f581; +$var-grin-alt: \f581; +$var-face-grin-beam: \f582; +$var-grin-beam: \f582; +$var-face-grin-beam-sweat: \f583; +$var-grin-beam-sweat: \f583; +$var-face-grin-hearts: \f584; +$var-grin-hearts: \f584; +$var-face-grin-squint: \f585; +$var-grin-squint: \f585; +$var-face-grin-squint-tears: \f586; +$var-grin-squint-tears: \f586; +$var-face-grin-stars: \f587; +$var-grin-stars: \f587; +$var-face-grin-tears: \f588; +$var-grin-tears: \f588; +$var-face-grin-tongue: \f589; +$var-grin-tongue: \f589; +$var-face-grin-tongue-squint: \f58a; +$var-grin-tongue-squint: \f58a; +$var-face-grin-tongue-wink: \f58b; +$var-grin-tongue-wink: \f58b; +$var-face-grin-wink: \f58c; +$var-grin-wink: \f58c; +$var-grip: \f58d; +$var-grid-horizontal: \f58d; +$var-grip-horizontal: \f58d; +$var-grip-vertical: \f58e; +$var-grid-vertical: \f58e; +$var-headset: \f590; +$var-highlighter: \f591; +$var-hot-tub-person: \f593; +$var-hot-tub: \f593; +$var-hotel: \f594; +$var-joint: \f595; +$var-face-kiss: \f596; +$var-kiss: \f596; +$var-face-kiss-beam: \f597; +$var-kiss-beam: \f597; +$var-face-kiss-wink-heart: \f598; +$var-kiss-wink-heart: \f598; +$var-face-laugh: \f599; +$var-laugh: \f599; +$var-face-laugh-beam: \f59a; +$var-laugh-beam: \f59a; +$var-face-laugh-squint: \f59b; +$var-laugh-squint: \f59b; +$var-face-laugh-wink: \f59c; +$var-laugh-wink: \f59c; +$var-cart-flatbed-suitcase: \f59d; +$var-luggage-cart: \f59d; +$var-map-location: \f59f; +$var-map-marked: \f59f; +$var-map-location-dot: \f5a0; +$var-map-marked-alt: \f5a0; +$var-marker: \f5a1; +$var-medal: \f5a2; +$var-face-meh-blank: \f5a4; +$var-meh-blank: \f5a4; +$var-face-rolling-eyes: \f5a5; +$var-meh-rolling-eyes: \f5a5; +$var-monument: \f5a6; +$var-mortar-pestle: \f5a7; +$var-paint-roller: \f5aa; +$var-passport: \f5ab; +$var-pen-fancy: \f5ac; +$var-pen-nib: \f5ad; +$var-pen-ruler: \f5ae; +$var-pencil-ruler: \f5ae; +$var-plane-arrival: \f5af; +$var-plane-departure: \f5b0; +$var-prescription: \f5b1; +$var-face-sad-cry: \f5b3; +$var-sad-cry: \f5b3; +$var-face-sad-tear: \f5b4; +$var-sad-tear: \f5b4; +$var-van-shuttle: \f5b6; +$var-shuttle-van: \f5b6; +$var-signature: \f5b7; +$var-face-smile-beam: \f5b8; +$var-smile-beam: \f5b8; +$var-solar-panel: \f5ba; +$var-spa: \f5bb; +$var-splotch: \f5bc; +$var-spray-can: \f5bd; +$var-stamp: \f5bf; +$var-star-half-stroke: \f5c0; +$var-star-half-alt: \f5c0; +$var-suitcase-rolling: \f5c1; +$var-face-surprise: \f5c2; +$var-surprise: \f5c2; +$var-swatchbook: \f5c3; +$var-person-swimming: \f5c4; +$var-swimmer: \f5c4; +$var-water-ladder: \f5c5; +$var-ladder-water: \f5c5; +$var-swimming-pool: \f5c5; +$var-droplet-slash: \f5c7; +$var-tint-slash: \f5c7; +$var-face-tired: \f5c8; +$var-tired: \f5c8; +$var-tooth: \f5c9; +$var-umbrella-beach: \f5ca; +$var-weight-hanging: \f5cd; +$var-wine-glass-empty: \f5ce; +$var-wine-glass-alt: \f5ce; +$var-spray-can-sparkles: \f5d0; +$var-air-freshener: \f5d0; +$var-apple-whole: \f5d1; +$var-apple-alt: \f5d1; +$var-atom: \f5d2; +$var-bone: \f5d7; +$var-book-open-reader: \f5da; +$var-book-reader: \f5da; +$var-brain: \f5dc; +$var-car-rear: \f5de; +$var-car-alt: \f5de; +$var-car-battery: \f5df; +$var-battery-car: \f5df; +$var-car-burst: \f5e1; +$var-car-crash: \f5e1; +$var-car-side: \f5e4; +$var-charging-station: \f5e7; +$var-diamond-turn-right: \f5eb; +$var-directions: \f5eb; +$var-draw-polygon: \f5ee; +$var-vector-polygon: \f5ee; +$var-laptop-code: \f5fc; +$var-layer-group: \f5fd; +$var-location-crosshairs: \f601; +$var-location: \f601; +$var-lungs: \f604; +$var-microscope: \f610; +$var-oil-can: \f613; +$var-poop: \f619; +$var-shapes: \f61f; +$var-triangle-circle-square: \f61f; +$var-star-of-life: \f621; +$var-gauge: \f624; +$var-dashboard: \f624; +$var-gauge-med: \f624; +$var-tachometer-alt-average: \f624; +$var-gauge-high: \f625; +$var-tachometer-alt: \f625; +$var-tachometer-alt-fast: \f625; +$var-gauge-simple: \f629; +$var-gauge-simple-med: \f629; +$var-tachometer-average: \f629; +$var-gauge-simple-high: \f62a; +$var-tachometer: \f62a; +$var-tachometer-fast: \f62a; +$var-teeth: \f62e; +$var-teeth-open: \f62f; +$var-masks-theater: \f630; +$var-theater-masks: \f630; +$var-traffic-light: \f637; +$var-truck-monster: \f63b; +$var-truck-pickup: \f63c; +$var-rectangle-ad: \f641; +$var-ad: \f641; +$var-ankh: \f644; +$var-book-bible: \f647; +$var-bible: \f647; +$var-business-time: \f64a; +$var-briefcase-clock: \f64a; +$var-city: \f64f; +$var-comment-dollar: \f651; +$var-comments-dollar: \f653; +$var-cross: \f654; +$var-dharmachakra: \f655; +$var-envelope-open-text: \f658; +$var-folder-minus: \f65d; +$var-folder-plus: \f65e; +$var-filter-circle-dollar: \f662; +$var-funnel-dollar: \f662; +$var-gopuram: \f664; +$var-hamsa: \f665; +$var-bahai: \f666; +$var-haykal: \f666; +$var-jedi: \f669; +$var-book-journal-whills: \f66a; +$var-journal-whills: \f66a; +$var-kaaba: \f66b; +$var-khanda: \f66d; +$var-landmark: \f66f; +$var-envelopes-bulk: \f674; +$var-mail-bulk: \f674; +$var-menorah: \f676; +$var-mosque: \f678; +$var-om: \f679; +$var-spaghetti-monster-flying: \f67b; +$var-pastafarianism: \f67b; +$var-peace: \f67c; +$var-place-of-worship: \f67f; +$var-square-poll-vertical: \f681; +$var-poll: \f681; +$var-square-poll-horizontal: \f682; +$var-poll-h: \f682; +$var-person-praying: \f683; +$var-pray: \f683; +$var-hands-praying: \f684; +$var-praying-hands: \f684; +$var-book-quran: \f687; +$var-quran: \f687; +$var-magnifying-glass-dollar: \f688; +$var-search-dollar: \f688; +$var-magnifying-glass-location: \f689; +$var-search-location: \f689; +$var-socks: \f696; +$var-square-root-variable: \f698; +$var-square-root-alt: \f698; +$var-star-and-crescent: \f699; +$var-star-of-david: \f69a; +$var-synagogue: \f69b; +$var-scroll-torah: \f6a0; +$var-torah: \f6a0; +$var-torii-gate: \f6a1; +$var-vihara: \f6a7; +$var-volume-xmark: \f6a9; +$var-volume-mute: \f6a9; +$var-volume-times: \f6a9; +$var-yin-yang: \f6ad; +$var-blender-phone: \f6b6; +$var-book-skull: \f6b7; +$var-book-dead: \f6b7; +$var-campground: \f6bb; +$var-cat: \f6be; +$var-chair: \f6c0; +$var-cloud-moon: \f6c3; +$var-cloud-sun: \f6c4; +$var-cow: \f6c8; +$var-dice-d20: \f6cf; +$var-dice-d6: \f6d1; +$var-dog: \f6d3; +$var-dragon: \f6d5; +$var-drumstick-bite: \f6d7; +$var-dungeon: \f6d9; +$var-file-csv: \f6dd; +$var-hand-fist: \f6de; +$var-fist-raised: \f6de; +$var-ghost: \f6e2; +$var-hammer: \f6e3; +$var-hanukiah: \f6e6; +$var-hat-wizard: \f6e8; +$var-person-hiking: \f6ec; +$var-hiking: \f6ec; +$var-hippo: \f6ed; +$var-horse: \f6f0; +$var-house-chimney-crack: \f6f1; +$var-house-damage: \f6f1; +$var-hryvnia-sign: \f6f2; +$var-hryvnia: \f6f2; +$var-mask: \f6fa; +$var-mountain: \f6fc; +$var-network-wired: \f6ff; +$var-otter: \f700; +$var-ring: \f70b; +$var-person-running: \f70c; +$var-running: \f70c; +$var-scroll: \f70e; +$var-skull-crossbones: \f714; +$var-slash: \f715; +$var-spider: \f717; +$var-toilet-paper: \f71e; +$var-toilet-paper-alt: \f71e; +$var-toilet-paper-blank: \f71e; +$var-tractor: \f722; +$var-user-injured: \f728; +$var-vr-cardboard: \f729; +$var-wand-sparkles: \f72b; +$var-wind: \f72e; +$var-wine-bottle: \f72f; +$var-cloud-meatball: \f73b; +$var-cloud-moon-rain: \f73c; +$var-cloud-rain: \f73d; +$var-cloud-showers-heavy: \f740; +$var-cloud-sun-rain: \f743; +$var-democrat: \f747; +$var-flag-usa: \f74d; +$var-hurricane: \f751; +$var-landmark-dome: \f752; +$var-landmark-alt: \f752; +$var-meteor: \f753; +$var-person-booth: \f756; +$var-poo-storm: \f75a; +$var-poo-bolt: \f75a; +$var-rainbow: \f75b; +$var-republican: \f75e; +$var-smog: \f75f; +$var-temperature-high: \f769; +$var-temperature-low: \f76b; +$var-cloud-bolt: \f76c; +$var-thunderstorm: \f76c; +$var-tornado: \f76f; +$var-volcano: \f770; +$var-check-to-slot: \f772; +$var-vote-yea: \f772; +$var-water: \f773; +$var-baby: \f77c; +$var-baby-carriage: \f77d; +$var-carriage-baby: \f77d; +$var-biohazard: \f780; +$var-blog: \f781; +$var-calendar-day: \f783; +$var-calendar-week: \f784; +$var-candy-cane: \f786; +$var-carrot: \f787; +$var-cash-register: \f788; +$var-minimize: \f78c; +$var-compress-arrows-alt: \f78c; +$var-dumpster: \f793; +$var-dumpster-fire: \f794; +$var-ethernet: \f796; +$var-gifts: \f79c; +$var-champagne-glasses: \f79f; +$var-glass-cheers: \f79f; +$var-whiskey-glass: \f7a0; +$var-glass-whiskey: \f7a0; +$var-earth-europe: \f7a2; +$var-globe-europe: \f7a2; +$var-grip-lines: \f7a4; +$var-grip-lines-vertical: \f7a5; +$var-guitar: \f7a6; +$var-heart-crack: \f7a9; +$var-heart-broken: \f7a9; +$var-holly-berry: \f7aa; +$var-horse-head: \f7ab; +$var-icicles: \f7ad; +$var-igloo: \f7ae; +$var-mitten: \f7b5; +$var-mug-hot: \f7b6; +$var-radiation: \f7b9; +$var-circle-radiation: \f7ba; +$var-radiation-alt: \f7ba; +$var-restroom: \f7bd; +$var-satellite: \f7bf; +$var-satellite-dish: \f7c0; +$var-sd-card: \f7c2; +$var-sim-card: \f7c4; +$var-person-skating: \f7c5; +$var-skating: \f7c5; +$var-person-skiing: \f7c9; +$var-skiing: \f7c9; +$var-person-skiing-nordic: \f7ca; +$var-skiing-nordic: \f7ca; +$var-sleigh: \f7cc; +$var-comment-sms: \f7cd; +$var-sms: \f7cd; +$var-person-snowboarding: \f7ce; +$var-snowboarding: \f7ce; +$var-snowman: \f7d0; +$var-snowplow: \f7d2; +$var-tenge-sign: \f7d7; +$var-tenge: \f7d7; +$var-toilet: \f7d8; +$var-screwdriver-wrench: \f7d9; +$var-tools: \f7d9; +$var-cable-car: \f7da; +$var-tram: \f7da; +$var-fire-flame-curved: \f7e4; +$var-fire-alt: \f7e4; +$var-bacon: \f7e5; +$var-book-medical: \f7e6; +$var-bread-slice: \f7ec; +$var-cheese: \f7ef; +$var-house-chimney-medical: \f7f2; +$var-clinic-medical: \f7f2; +$var-clipboard-user: \f7f3; +$var-comment-medical: \f7f5; +$var-crutch: \f7f7; +$var-disease: \f7fa; +$var-egg: \f7fb; +$var-folder-tree: \f802; +$var-burger: \f805; +$var-hamburger: \f805; +$var-hand-middle-finger: \f806; +$var-helmet-safety: \f807; +$var-hard-hat: \f807; +$var-hat-hard: \f807; +$var-hospital-user: \f80d; +$var-hotdog: \f80f; +$var-ice-cream: \f810; +$var-laptop-medical: \f812; +$var-pager: \f815; +$var-pepper-hot: \f816; +$var-pizza-slice: \f818; +$var-sack-dollar: \f81d; +$var-book-tanakh: \f827; +$var-tanakh: \f827; +$var-bars-progress: \f828; +$var-tasks-alt: \f828; +$var-trash-arrow-up: \f829; +$var-trash-restore: \f829; +$var-trash-can-arrow-up: \f82a; +$var-trash-restore-alt: \f82a; +$var-user-nurse: \f82f; +$var-wave-square: \f83e; +$var-person-biking: \f84a; +$var-biking: \f84a; +$var-border-all: \f84c; +$var-border-none: \f850; +$var-border-top-left: \f853; +$var-border-style: \f853; +$var-person-digging: \f85e; +$var-digging: \f85e; +$var-fan: \f863; +$var-icons: \f86d; +$var-heart-music-camera-bolt: \f86d; +$var-phone-flip: \f879; +$var-phone-alt: \f879; +$var-square-phone-flip: \f87b; +$var-phone-square-alt: \f87b; +$var-photo-film: \f87c; +$var-photo-video: \f87c; +$var-text-slash: \f87d; +$var-remove-format: \f87d; +$var-arrow-down-z-a: \f881; +$var-sort-alpha-desc: \f881; +$var-sort-alpha-down-alt: \f881; +$var-arrow-up-z-a: \f882; +$var-sort-alpha-up-alt: \f882; +$var-arrow-down-short-wide: \f884; +$var-sort-amount-desc: \f884; +$var-sort-amount-down-alt: \f884; +$var-arrow-up-short-wide: \f885; +$var-sort-amount-up-alt: \f885; +$var-arrow-down-9-1: \f886; +$var-sort-numeric-desc: \f886; +$var-sort-numeric-down-alt: \f886; +$var-arrow-up-9-1: \f887; +$var-sort-numeric-up-alt: \f887; +$var-spell-check: \f891; +$var-voicemail: \f897; +$var-hat-cowboy: \f8c0; +$var-hat-cowboy-side: \f8c1; +$var-computer-mouse: \f8cc; +$var-mouse: \f8cc; +$var-radio: \f8d7; +$var-record-vinyl: \f8d9; +$var-walkie-talkie: \f8ef; +$var-caravan: \f8ff; + +$var-firefox-browser: \e007; +$var-ideal: \e013; +$var-microblog: \e01a; +$var-square-pied-piper: \e01e; +$var-pied-piper-square: \e01e; +$var-unity: \e049; +$var-dailymotion: \e052; +$var-square-instagram: \e055; +$var-instagram-square: \e055; +$var-mixer: \e056; +$var-shopify: \e057; +$var-deezer: \e077; +$var-edge-legacy: \e078; +$var-google-pay: \e079; +$var-rust: \e07a; +$var-tiktok: \e07b; +$var-unsplash: \e07c; +$var-cloudflare: \e07d; +$var-guilded: \e07e; +$var-hive: \e07f; +$var-42-group: \e080; +$var-innosoft: \e080; +$var-instalod: \e081; +$var-octopus-deploy: \e082; +$var-perbyte: \e083; +$var-uncharted: \e084; +$var-watchman-monitoring: \e087; +$var-wodu: \e088; +$var-wirsindhandwerk: \e2d0; +$var-wsh: \e2d0; +$var-bots: \e340; +$var-cmplid: \e360; +$var-bilibili: \e3d9; +$var-golang: \e40f; +$var-pix: \e43a; +$var-sitrox: \e44a; +$var-hashnode: \e499; +$var-meta: \e49b; +$var-padlet: \e4a0; +$var-nfc-directional: \e530; +$var-nfc-symbol: \e531; +$var-screenpal: \e570; +$var-space-awesome: \e5ac; +$var-square-font-awesome: \e5ad; +$var-square-gitlab: \e5ae; +$var-gitlab-square: \e5ae; +$var-odysee: \e5c6; +$var-stubber: \e5c7; +$var-debian: \e60b; +$var-shoelace: \e60c; +$var-threads: \e618; +$var-square-threads: \e619; +$var-square-x-twitter: \e61a; +$var-x-twitter: \e61b; +$var-opensuse: \e62b; +$var-letterboxd: \e62d; +$var-square-letterboxd: \e62e; +$var-mintbit: \e62f; +$var-google-scholar: \e63b; +$var-brave: \e63c; +$var-brave-reverse: \e63d; +$var-pixiv: \e640; +$var-upwork: \e641; +$var-webflow: \e65c; +$var-signal-messenger: \e663; +$var-bluesky: \e671; +$var-jxl: \e67b; +$var-square-upwork: \e67c; +$var-web-awesome: \e682; +$var-square-web-awesome: \e683; +$var-square-web-awesome-stroke: \e684; +$var-dart-lang: \e693; +$var-flutter: \e694; +$var-files-pinwheel: \e69f; +$var-css: \e6a2; +$var-square-bluesky: \e6a3; +$var-openai: \e7cf; +$var-square-linkedin: \e7d0; +$var-cash-app: \e7d4; +$var-disqus: \e7d5; +$var-eleventy: \e7d6; +$var-11ty: \e7d6; +$var-kakao-talk: \e7d7; +$var-linktree: \e7d8; +$var-notion: \e7d9; +$var-pandora: \e7da; +$var-pixelfed: \e7db; +$var-tidal: \e7dc; +$var-vsco: \e7dd; +$var-w3c: \e7de; +$var-lumon: \e7e2; +$var-lumon-drop: \e7e3; +$var-square-figma: \e7e4; +$var-tex: \e7ff; +$var-duolingo: \e812; +$var-square-twitter: \f081; +$var-twitter-square: \f081; +$var-square-facebook: \f082; +$var-facebook-square: \f082; +$var-linkedin: \f08c; +$var-square-github: \f092; +$var-github-square: \f092; +$var-twitter: \f099; +$var-facebook: \f09a; +$var-github: \f09b; +$var-pinterest: \f0d2; +$var-square-pinterest: \f0d3; +$var-pinterest-square: \f0d3; +$var-square-google-plus: \f0d4; +$var-google-plus-square: \f0d4; +$var-google-plus-g: \f0d5; +$var-linkedin-in: \f0e1; +$var-github-alt: \f113; +$var-maxcdn: \f136; +$var-html5: \f13b; +$var-css3: \f13c; +$var-btc: \f15a; +$var-youtube: \f167; +$var-xing: \f168; +$var-square-xing: \f169; +$var-xing-square: \f169; +$var-dropbox: \f16b; +$var-stack-overflow: \f16c; +$var-instagram: \f16d; +$var-flickr: \f16e; +$var-adn: \f170; +$var-bitbucket: \f171; +$var-tumblr: \f173; +$var-square-tumblr: \f174; +$var-tumblr-square: \f174; +$var-apple: \f179; +$var-windows: \f17a; +$var-android: \f17b; +$var-linux: \f17c; +$var-dribbble: \f17d; +$var-skype: \f17e; +$var-foursquare: \f180; +$var-trello: \f181; +$var-gratipay: \f184; +$var-vk: \f189; +$var-weibo: \f18a; +$var-renren: \f18b; +$var-pagelines: \f18c; +$var-stack-exchange: \f18d; +$var-square-vimeo: \f194; +$var-vimeo-square: \f194; +$var-slack: \f198; +$var-slack-hash: \f198; +$var-wordpress: \f19a; +$var-openid: \f19b; +$var-yahoo: \f19e; +$var-google: \f1a0; +$var-reddit: \f1a1; +$var-square-reddit: \f1a2; +$var-reddit-square: \f1a2; +$var-stumbleupon-circle: \f1a3; +$var-stumbleupon: \f1a4; +$var-delicious: \f1a5; +$var-digg: \f1a6; +$var-pied-piper-pp: \f1a7; +$var-pied-piper-alt: \f1a8; +$var-drupal: \f1a9; +$var-joomla: \f1aa; +$var-behance: \f1b4; +$var-square-behance: \f1b5; +$var-behance-square: \f1b5; +$var-steam: \f1b6; +$var-square-steam: \f1b7; +$var-steam-square: \f1b7; +$var-spotify: \f1bc; +$var-deviantart: \f1bd; +$var-soundcloud: \f1be; +$var-vine: \f1ca; +$var-codepen: \f1cb; +$var-jsfiddle: \f1cc; +$var-rebel: \f1d0; +$var-empire: \f1d1; +$var-square-git: \f1d2; +$var-git-square: \f1d2; +$var-git: \f1d3; +$var-hacker-news: \f1d4; +$var-tencent-weibo: \f1d5; +$var-qq: \f1d6; +$var-weixin: \f1d7; +$var-slideshare: \f1e7; +$var-twitch: \f1e8; +$var-yelp: \f1e9; +$var-paypal: \f1ed; +$var-google-wallet: \f1ee; +$var-cc-visa: \f1f0; +$var-cc-mastercard: \f1f1; +$var-cc-discover: \f1f2; +$var-cc-amex: \f1f3; +$var-cc-paypal: \f1f4; +$var-cc-stripe: \f1f5; +$var-lastfm: \f202; +$var-square-lastfm: \f203; +$var-lastfm-square: \f203; +$var-ioxhost: \f208; +$var-angellist: \f209; +$var-buysellads: \f20d; +$var-connectdevelop: \f20e; +$var-dashcube: \f210; +$var-forumbee: \f211; +$var-leanpub: \f212; +$var-sellsy: \f213; +$var-shirtsinbulk: \f214; +$var-simplybuilt: \f215; +$var-skyatlas: \f216; +$var-pinterest-p: \f231; +$var-whatsapp: \f232; +$var-viacoin: \f237; +$var-medium: \f23a; +$var-medium-m: \f23a; +$var-y-combinator: \f23b; +$var-optin-monster: \f23c; +$var-opencart: \f23d; +$var-expeditedssl: \f23e; +$var-cc-jcb: \f24b; +$var-cc-diners-club: \f24c; +$var-creative-commons: \f25e; +$var-gg: \f260; +$var-gg-circle: \f261; +$var-odnoklassniki: \f263; +$var-square-odnoklassniki: \f264; +$var-odnoklassniki-square: \f264; +$var-get-pocket: \f265; +$var-wikipedia-w: \f266; +$var-safari: \f267; +$var-chrome: \f268; +$var-firefox: \f269; +$var-opera: \f26a; +$var-internet-explorer: \f26b; +$var-contao: \f26d; +$var-500px: \f26e; +$var-amazon: \f270; +$var-houzz: \f27c; +$var-vimeo-v: \f27d; +$var-black-tie: \f27e; +$var-fonticons: \f280; +$var-reddit-alien: \f281; +$var-edge: \f282; +$var-codiepie: \f284; +$var-modx: \f285; +$var-fort-awesome: \f286; +$var-usb: \f287; +$var-product-hunt: \f288; +$var-mixcloud: \f289; +$var-scribd: \f28a; +$var-bluetooth: \f293; +$var-bluetooth-b: \f294; +$var-gitlab: \f296; +$var-wpbeginner: \f297; +$var-wpforms: \f298; +$var-envira: \f299; +$var-glide: \f2a5; +$var-glide-g: \f2a6; +$var-viadeo: \f2a9; +$var-square-viadeo: \f2aa; +$var-viadeo-square: \f2aa; +$var-snapchat: \f2ab; +$var-snapchat-ghost: \f2ab; +$var-square-snapchat: \f2ad; +$var-snapchat-square: \f2ad; +$var-pied-piper: \f2ae; +$var-first-order: \f2b0; +$var-yoast: \f2b1; +$var-themeisle: \f2b2; +$var-google-plus: \f2b3; +$var-font-awesome: \f2b4; +$var-font-awesome-flag: \f2b4; +$var-font-awesome-logo-full: \f2b4; +$var-linode: \f2b8; +$var-quora: \f2c4; +$var-free-code-camp: \f2c5; +$var-telegram: \f2c6; +$var-telegram-plane: \f2c6; +$var-bandcamp: \f2d5; +$var-grav: \f2d6; +$var-etsy: \f2d7; +$var-imdb: \f2d8; +$var-ravelry: \f2d9; +$var-sellcast: \f2da; +$var-superpowers: \f2dd; +$var-wpexplorer: \f2de; +$var-meetup: \f2e0; +$var-square-font-awesome-stroke: \f35c; +$var-font-awesome-alt: \f35c; +$var-accessible-icon: \f368; +$var-accusoft: \f369; +$var-adversal: \f36a; +$var-affiliatetheme: \f36b; +$var-algolia: \f36c; +$var-amilia: \f36d; +$var-angrycreative: \f36e; +$var-app-store: \f36f; +$var-app-store-ios: \f370; +$var-apper: \f371; +$var-asymmetrik: \f372; +$var-audible: \f373; +$var-avianex: \f374; +$var-aws: \f375; +$var-bimobject: \f378; +$var-bitcoin: \f379; +$var-bity: \f37a; +$var-blackberry: \f37b; +$var-blogger: \f37c; +$var-blogger-b: \f37d; +$var-buromobelexperte: \f37f; +$var-centercode: \f380; +$var-cloudscale: \f383; +$var-cloudsmith: \f384; +$var-cloudversify: \f385; +$var-cpanel: \f388; +$var-css3-alt: \f38b; +$var-cuttlefish: \f38c; +$var-d-and-d: \f38d; +$var-deploydog: \f38e; +$var-deskpro: \f38f; +$var-digital-ocean: \f391; +$var-discord: \f392; +$var-discourse: \f393; +$var-dochub: \f394; +$var-docker: \f395; +$var-draft2digital: \f396; +$var-square-dribbble: \f397; +$var-dribbble-square: \f397; +$var-dyalog: \f399; +$var-earlybirds: \f39a; +$var-erlang: \f39d; +$var-facebook-f: \f39e; +$var-facebook-messenger: \f39f; +$var-firstdraft: \f3a1; +$var-fonticons-fi: \f3a2; +$var-fort-awesome-alt: \f3a3; +$var-freebsd: \f3a4; +$var-gitkraken: \f3a6; +$var-gofore: \f3a7; +$var-goodreads: \f3a8; +$var-goodreads-g: \f3a9; +$var-google-drive: \f3aa; +$var-google-play: \f3ab; +$var-gripfire: \f3ac; +$var-grunt: \f3ad; +$var-gulp: \f3ae; +$var-square-hacker-news: \f3af; +$var-hacker-news-square: \f3af; +$var-hire-a-helper: \f3b0; +$var-hotjar: \f3b1; +$var-hubspot: \f3b2; +$var-itunes: \f3b4; +$var-itunes-note: \f3b5; +$var-jenkins: \f3b6; +$var-joget: \f3b7; +$var-js: \f3b8; +$var-square-js: \f3b9; +$var-js-square: \f3b9; +$var-keycdn: \f3ba; +$var-kickstarter: \f3bb; +$var-square-kickstarter: \f3bb; +$var-kickstarter-k: \f3bc; +$var-laravel: \f3bd; +$var-line: \f3c0; +$var-lyft: \f3c3; +$var-magento: \f3c4; +$var-medapps: \f3c6; +$var-medrt: \f3c8; +$var-microsoft: \f3ca; +$var-mix: \f3cb; +$var-mizuni: \f3cc; +$var-monero: \f3d0; +$var-napster: \f3d2; +$var-node-js: \f3d3; +$var-npm: \f3d4; +$var-ns8: \f3d5; +$var-nutritionix: \f3d6; +$var-page4: \f3d7; +$var-palfed: \f3d8; +$var-patreon: \f3d9; +$var-periscope: \f3da; +$var-phabricator: \f3db; +$var-phoenix-framework: \f3dc; +$var-playstation: \f3df; +$var-pushed: \f3e1; +$var-python: \f3e2; +$var-red-river: \f3e3; +$var-wpressr: \f3e4; +$var-rendact: \f3e4; +$var-replyd: \f3e6; +$var-resolving: \f3e7; +$var-rocketchat: \f3e8; +$var-rockrms: \f3e9; +$var-schlix: \f3ea; +$var-searchengin: \f3eb; +$var-servicestack: \f3ec; +$var-sistrix: \f3ee; +$var-speakap: \f3f3; +$var-staylinked: \f3f5; +$var-steam-symbol: \f3f6; +$var-sticker-mule: \f3f7; +$var-studiovinari: \f3f8; +$var-supple: \f3f9; +$var-uber: \f402; +$var-uikit: \f403; +$var-uniregistry: \f404; +$var-untappd: \f405; +$var-ussunnah: \f407; +$var-vaadin: \f408; +$var-viber: \f409; +$var-vimeo: \f40a; +$var-vnv: \f40b; +$var-square-whatsapp: \f40c; +$var-whatsapp-square: \f40c; +$var-whmcs: \f40d; +$var-wordpress-simple: \f411; +$var-xbox: \f412; +$var-yandex: \f413; +$var-yandex-international: \f414; +$var-apple-pay: \f415; +$var-cc-apple-pay: \f416; +$var-fly: \f417; +$var-node: \f419; +$var-osi: \f41a; +$var-react: \f41b; +$var-autoprefixer: \f41c; +$var-less: \f41d; +$var-sass: \f41e; +$var-vuejs: \f41f; +$var-angular: \f420; +$var-aviato: \f421; +$var-ember: \f423; +$var-gitter: \f426; +$var-hooli: \f427; +$var-strava: \f428; +$var-stripe: \f429; +$var-stripe-s: \f42a; +$var-typo3: \f42b; +$var-amazon-pay: \f42c; +$var-cc-amazon-pay: \f42d; +$var-ethereum: \f42e; +$var-korvue: \f42f; +$var-elementor: \f430; +$var-square-youtube: \f431; +$var-youtube-square: \f431; +$var-flipboard: \f44d; +$var-hips: \f452; +$var-php: \f457; +$var-quinscape: \f459; +$var-readme: \f4d5; +$var-java: \f4e4; +$var-pied-piper-hat: \f4e5; +$var-creative-commons-by: \f4e7; +$var-creative-commons-nc: \f4e8; +$var-creative-commons-nc-eu: \f4e9; +$var-creative-commons-nc-jp: \f4ea; +$var-creative-commons-nd: \f4eb; +$var-creative-commons-pd: \f4ec; +$var-creative-commons-pd-alt: \f4ed; +$var-creative-commons-remix: \f4ee; +$var-creative-commons-sa: \f4ef; +$var-creative-commons-sampling: \f4f0; +$var-creative-commons-sampling-plus: \f4f1; +$var-creative-commons-share: \f4f2; +$var-creative-commons-zero: \f4f3; +$var-ebay: \f4f4; +$var-keybase: \f4f5; +$var-mastodon: \f4f6; +$var-r-project: \f4f7; +$var-researchgate: \f4f8; +$var-teamspeak: \f4f9; +$var-first-order-alt: \f50a; +$var-fulcrum: \f50b; +$var-galactic-republic: \f50c; +$var-galactic-senate: \f50d; +$var-jedi-order: \f50e; +$var-mandalorian: \f50f; +$var-old-republic: \f510; +$var-phoenix-squadron: \f511; +$var-sith: \f512; +$var-trade-federation: \f513; +$var-wolf-pack-battalion: \f514; +$var-hornbill: \f592; +$var-mailchimp: \f59e; +$var-megaport: \f5a3; +$var-nimblr: \f5a8; +$var-rev: \f5b2; +$var-shopware: \f5b5; +$var-squarespace: \f5be; +$var-themeco: \f5c6; +$var-weebly: \f5cc; +$var-wix: \f5cf; +$var-ello: \f5f1; +$var-hackerrank: \f5f7; +$var-kaggle: \f5fa; +$var-markdown: \f60f; +$var-neos: \f612; +$var-zhihu: \f63f; +$var-alipay: \f642; +$var-the-red-yeti: \f69d; +$var-critical-role: \f6c9; +$var-d-and-d-beyond: \f6ca; +$var-dev: \f6cc; +$var-fantasy-flight-games: \f6dc; +$var-wizards-of-the-coast: \f730; +$var-think-peaks: \f731; +$var-reacteurope: \f75d; +$var-artstation: \f77a; +$var-atlassian: \f77b; +$var-canadian-maple-leaf: \f785; +$var-centos: \f789; +$var-confluence: \f78d; +$var-dhl: \f790; +$var-diaspora: \f791; +$var-fedex: \f797; +$var-fedora: \f798; +$var-figma: \f799; +$var-intercom: \f7af; +$var-invision: \f7b0; +$var-jira: \f7b1; +$var-mendeley: \f7b3; +$var-raspberry-pi: \f7bb; +$var-redhat: \f7bc; +$var-sketch: \f7c6; +$var-sourcetree: \f7d3; +$var-suse: \f7d6; +$var-ubuntu: \f7df; +$var-ups: \f7e0; +$var-usps: \f7e1; +$var-yarn: \f7e3; +$var-airbnb: \f834; +$var-battle-net: \f835; +$var-bootstrap: \f836; +$var-buffer: \f837; +$var-chromecast: \f838; +$var-evernote: \f839; +$var-itch-io: \f83a; +$var-salesforce: \f83b; +$var-speaker-deck: \f83c; +$var-symfony: \f83d; +$var-waze: \f83f; +$var-yammer: \f840; +$var-git-alt: \f841; +$var-stackpath: \f842; +$var-cotton-bureau: \f89e; +$var-buy-n-large: \f8a6; +$var-mdb: \f8ca; +$var-orcid: \f8d2; +$var-swift: \f8e1; +$var-umbraco: \f8e8; + +$icons: ( + '0': $var-0, + '1': $var-1, + '2': $var-2, + '3': $var-3, + '4': $var-4, + '5': $var-5, + '6': $var-6, + '7': $var-7, + '8': $var-8, + '9': $var-9, + 'exclamation': $var-exclamation, + 'hashtag': $var-hashtag, + 'dollar-sign': $var-dollar-sign, + 'dollar': $var-dollar, + 'usd': $var-usd, + 'percent': $var-percent, + 'percentage': $var-percentage, + 'asterisk': $var-asterisk, + 'plus': $var-plus, + 'add': $var-add, + 'less-than': $var-less-than, + 'equals': $var-equals, + 'greater-than': $var-greater-than, + 'question': $var-question, + 'at': $var-at, + 'a': $var-a, + 'b': $var-b, + 'c': $var-c, + 'd': $var-d, + 'e': $var-e, + 'f': $var-f, + 'g': $var-g, + 'h': $var-h, + 'i': $var-i, + 'j': $var-j, + 'k': $var-k, + 'l': $var-l, + 'm': $var-m, + 'n': $var-n, + 'o': $var-o, + 'p': $var-p, + 'q': $var-q, + 'r': $var-r, + 's': $var-s, + 't': $var-t, + 'u': $var-u, + 'v': $var-v, + 'w': $var-w, + 'x': $var-x, + 'y': $var-y, + 'z': $var-z, + 'faucet': $var-faucet, + 'faucet-drip': $var-faucet-drip, + 'house-chimney-window': $var-house-chimney-window, + 'house-signal': $var-house-signal, + 'temperature-arrow-down': $var-temperature-arrow-down, + 'temperature-down': $var-temperature-down, + 'temperature-arrow-up': $var-temperature-arrow-up, + 'temperature-up': $var-temperature-up, + 'trailer': $var-trailer, + 'bacteria': $var-bacteria, + 'bacterium': $var-bacterium, + 'box-tissue': $var-box-tissue, + 'hand-holding-medical': $var-hand-holding-medical, + 'hand-sparkles': $var-hand-sparkles, + 'hands-bubbles': $var-hands-bubbles, + 'hands-wash': $var-hands-wash, + 'handshake-slash': $var-handshake-slash, + 'handshake-alt-slash': $var-handshake-alt-slash, + 'handshake-simple-slash': $var-handshake-simple-slash, + 'head-side-cough': $var-head-side-cough, + 'head-side-cough-slash': $var-head-side-cough-slash, + 'head-side-mask': $var-head-side-mask, + 'head-side-virus': $var-head-side-virus, + 'house-chimney-user': $var-house-chimney-user, + 'house-laptop': $var-house-laptop, + 'laptop-house': $var-laptop-house, + 'lungs-virus': $var-lungs-virus, + 'people-arrows': $var-people-arrows, + 'people-arrows-left-right': $var-people-arrows-left-right, + 'plane-slash': $var-plane-slash, + 'pump-medical': $var-pump-medical, + 'pump-soap': $var-pump-soap, + 'shield-virus': $var-shield-virus, + 'sink': $var-sink, + 'soap': $var-soap, + 'stopwatch-20': $var-stopwatch-20, + 'shop-slash': $var-shop-slash, + 'store-alt-slash': $var-store-alt-slash, + 'store-slash': $var-store-slash, + 'toilet-paper-slash': $var-toilet-paper-slash, + 'users-slash': $var-users-slash, + 'virus': $var-virus, + 'virus-slash': $var-virus-slash, + 'viruses': $var-viruses, + 'vest': $var-vest, + 'vest-patches': $var-vest-patches, + 'arrow-trend-down': $var-arrow-trend-down, + 'arrow-trend-up': $var-arrow-trend-up, + 'arrow-up-from-bracket': $var-arrow-up-from-bracket, + 'austral-sign': $var-austral-sign, + 'baht-sign': $var-baht-sign, + 'bitcoin-sign': $var-bitcoin-sign, + 'bolt-lightning': $var-bolt-lightning, + 'book-bookmark': $var-book-bookmark, + 'camera-rotate': $var-camera-rotate, + 'cedi-sign': $var-cedi-sign, + 'chart-column': $var-chart-column, + 'chart-gantt': $var-chart-gantt, + 'clapperboard': $var-clapperboard, + 'clover': $var-clover, + 'code-compare': $var-code-compare, + 'code-fork': $var-code-fork, + 'code-pull-request': $var-code-pull-request, + 'colon-sign': $var-colon-sign, + 'cruzeiro-sign': $var-cruzeiro-sign, + 'display': $var-display, + 'dong-sign': $var-dong-sign, + 'elevator': $var-elevator, + 'filter-circle-xmark': $var-filter-circle-xmark, + 'florin-sign': $var-florin-sign, + 'folder-closed': $var-folder-closed, + 'franc-sign': $var-franc-sign, + 'guarani-sign': $var-guarani-sign, + 'gun': $var-gun, + 'hands-clapping': $var-hands-clapping, + 'house-user': $var-house-user, + 'home-user': $var-home-user, + 'indian-rupee-sign': $var-indian-rupee-sign, + 'indian-rupee': $var-indian-rupee, + 'inr': $var-inr, + 'kip-sign': $var-kip-sign, + 'lari-sign': $var-lari-sign, + 'litecoin-sign': $var-litecoin-sign, + 'manat-sign': $var-manat-sign, + 'mask-face': $var-mask-face, + 'mill-sign': $var-mill-sign, + 'money-bills': $var-money-bills, + 'naira-sign': $var-naira-sign, + 'notdef': $var-notdef, + 'panorama': $var-panorama, + 'peseta-sign': $var-peseta-sign, + 'peso-sign': $var-peso-sign, + 'plane-up': $var-plane-up, + 'rupiah-sign': $var-rupiah-sign, + 'stairs': $var-stairs, + 'timeline': $var-timeline, + 'truck-front': $var-truck-front, + 'turkish-lira-sign': $var-turkish-lira-sign, + 'try': $var-try, + 'turkish-lira': $var-turkish-lira, + 'vault': $var-vault, + 'wand-magic-sparkles': $var-wand-magic-sparkles, + 'magic-wand-sparkles': $var-magic-wand-sparkles, + 'wheat-awn': $var-wheat-awn, + 'wheat-alt': $var-wheat-alt, + 'wheelchair-move': $var-wheelchair-move, + 'wheelchair-alt': $var-wheelchair-alt, + 'bangladeshi-taka-sign': $var-bangladeshi-taka-sign, + 'bowl-rice': $var-bowl-rice, + 'person-pregnant': $var-person-pregnant, + 'house-chimney': $var-house-chimney, + 'home-lg': $var-home-lg, + 'house-crack': $var-house-crack, + 'house-medical': $var-house-medical, + 'cent-sign': $var-cent-sign, + 'plus-minus': $var-plus-minus, + 'sailboat': $var-sailboat, + 'section': $var-section, + 'shrimp': $var-shrimp, + 'brazilian-real-sign': $var-brazilian-real-sign, + 'chart-simple': $var-chart-simple, + 'diagram-next': $var-diagram-next, + 'diagram-predecessor': $var-diagram-predecessor, + 'diagram-successor': $var-diagram-successor, + 'earth-oceania': $var-earth-oceania, + 'globe-oceania': $var-globe-oceania, + 'bug-slash': $var-bug-slash, + 'file-circle-plus': $var-file-circle-plus, + 'shop-lock': $var-shop-lock, + 'virus-covid': $var-virus-covid, + 'virus-covid-slash': $var-virus-covid-slash, + 'anchor-circle-check': $var-anchor-circle-check, + 'anchor-circle-exclamation': $var-anchor-circle-exclamation, + 'anchor-circle-xmark': $var-anchor-circle-xmark, + 'anchor-lock': $var-anchor-lock, + 'arrow-down-up-across-line': $var-arrow-down-up-across-line, + 'arrow-down-up-lock': $var-arrow-down-up-lock, + 'arrow-right-to-city': $var-arrow-right-to-city, + 'arrow-up-from-ground-water': $var-arrow-up-from-ground-water, + 'arrow-up-from-water-pump': $var-arrow-up-from-water-pump, + 'arrow-up-right-dots': $var-arrow-up-right-dots, + 'arrows-down-to-line': $var-arrows-down-to-line, + 'arrows-down-to-people': $var-arrows-down-to-people, + 'arrows-left-right-to-line': $var-arrows-left-right-to-line, + 'arrows-spin': $var-arrows-spin, + 'arrows-split-up-and-left': $var-arrows-split-up-and-left, + 'arrows-to-circle': $var-arrows-to-circle, + 'arrows-to-dot': $var-arrows-to-dot, + 'arrows-to-eye': $var-arrows-to-eye, + 'arrows-turn-right': $var-arrows-turn-right, + 'arrows-turn-to-dots': $var-arrows-turn-to-dots, + 'arrows-up-to-line': $var-arrows-up-to-line, + 'bore-hole': $var-bore-hole, + 'bottle-droplet': $var-bottle-droplet, + 'bottle-water': $var-bottle-water, + 'bowl-food': $var-bowl-food, + 'boxes-packing': $var-boxes-packing, + 'bridge': $var-bridge, + 'bridge-circle-check': $var-bridge-circle-check, + 'bridge-circle-exclamation': $var-bridge-circle-exclamation, + 'bridge-circle-xmark': $var-bridge-circle-xmark, + 'bridge-lock': $var-bridge-lock, + 'bridge-water': $var-bridge-water, + 'bucket': $var-bucket, + 'bugs': $var-bugs, + 'building-circle-arrow-right': $var-building-circle-arrow-right, + 'building-circle-check': $var-building-circle-check, + 'building-circle-exclamation': $var-building-circle-exclamation, + 'building-circle-xmark': $var-building-circle-xmark, + 'building-flag': $var-building-flag, + 'building-lock': $var-building-lock, + 'building-ngo': $var-building-ngo, + 'building-shield': $var-building-shield, + 'building-un': $var-building-un, + 'building-user': $var-building-user, + 'building-wheat': $var-building-wheat, + 'burst': $var-burst, + 'car-on': $var-car-on, + 'car-tunnel': $var-car-tunnel, + 'child-combatant': $var-child-combatant, + 'child-rifle': $var-child-rifle, + 'children': $var-children, + 'circle-nodes': $var-circle-nodes, + 'clipboard-question': $var-clipboard-question, + 'cloud-showers-water': $var-cloud-showers-water, + 'computer': $var-computer, + 'cubes-stacked': $var-cubes-stacked, + 'envelope-circle-check': $var-envelope-circle-check, + 'explosion': $var-explosion, + 'ferry': $var-ferry, + 'file-circle-exclamation': $var-file-circle-exclamation, + 'file-circle-minus': $var-file-circle-minus, + 'file-circle-question': $var-file-circle-question, + 'file-shield': $var-file-shield, + 'fire-burner': $var-fire-burner, + 'fish-fins': $var-fish-fins, + 'flask-vial': $var-flask-vial, + 'glass-water': $var-glass-water, + 'glass-water-droplet': $var-glass-water-droplet, + 'group-arrows-rotate': $var-group-arrows-rotate, + 'hand-holding-hand': $var-hand-holding-hand, + 'handcuffs': $var-handcuffs, + 'hands-bound': $var-hands-bound, + 'hands-holding-child': $var-hands-holding-child, + 'hands-holding-circle': $var-hands-holding-circle, + 'heart-circle-bolt': $var-heart-circle-bolt, + 'heart-circle-check': $var-heart-circle-check, + 'heart-circle-exclamation': $var-heart-circle-exclamation, + 'heart-circle-minus': $var-heart-circle-minus, + 'heart-circle-plus': $var-heart-circle-plus, + 'heart-circle-xmark': $var-heart-circle-xmark, + 'helicopter-symbol': $var-helicopter-symbol, + 'helmet-un': $var-helmet-un, + 'hill-avalanche': $var-hill-avalanche, + 'hill-rockslide': $var-hill-rockslide, + 'house-circle-check': $var-house-circle-check, + 'house-circle-exclamation': $var-house-circle-exclamation, + 'house-circle-xmark': $var-house-circle-xmark, + 'house-fire': $var-house-fire, + 'house-flag': $var-house-flag, + 'house-flood-water': $var-house-flood-water, + 'house-flood-water-circle-arrow-right': + $var-house-flood-water-circle-arrow-right, + 'house-lock': $var-house-lock, + 'house-medical-circle-check': $var-house-medical-circle-check, + 'house-medical-circle-exclamation': $var-house-medical-circle-exclamation, + 'house-medical-circle-xmark': $var-house-medical-circle-xmark, + 'house-medical-flag': $var-house-medical-flag, + 'house-tsunami': $var-house-tsunami, + 'jar': $var-jar, + 'jar-wheat': $var-jar-wheat, + 'jet-fighter-up': $var-jet-fighter-up, + 'jug-detergent': $var-jug-detergent, + 'kitchen-set': $var-kitchen-set, + 'land-mine-on': $var-land-mine-on, + 'landmark-flag': $var-landmark-flag, + 'laptop-file': $var-laptop-file, + 'lines-leaning': $var-lines-leaning, + 'location-pin-lock': $var-location-pin-lock, + 'locust': $var-locust, + 'magnifying-glass-arrow-right': $var-magnifying-glass-arrow-right, + 'magnifying-glass-chart': $var-magnifying-glass-chart, + 'mars-and-venus-burst': $var-mars-and-venus-burst, + 'mask-ventilator': $var-mask-ventilator, + 'mattress-pillow': $var-mattress-pillow, + 'mobile-retro': $var-mobile-retro, + 'money-bill-transfer': $var-money-bill-transfer, + 'money-bill-trend-up': $var-money-bill-trend-up, + 'money-bill-wheat': $var-money-bill-wheat, + 'mosquito': $var-mosquito, + 'mosquito-net': $var-mosquito-net, + 'mound': $var-mound, + 'mountain-city': $var-mountain-city, + 'mountain-sun': $var-mountain-sun, + 'oil-well': $var-oil-well, + 'people-group': $var-people-group, + 'people-line': $var-people-line, + 'people-pulling': $var-people-pulling, + 'people-robbery': $var-people-robbery, + 'people-roof': $var-people-roof, + 'person-arrow-down-to-line': $var-person-arrow-down-to-line, + 'person-arrow-up-from-line': $var-person-arrow-up-from-line, + 'person-breastfeeding': $var-person-breastfeeding, + 'person-burst': $var-person-burst, + 'person-cane': $var-person-cane, + 'person-chalkboard': $var-person-chalkboard, + 'person-circle-check': $var-person-circle-check, + 'person-circle-exclamation': $var-person-circle-exclamation, + 'person-circle-minus': $var-person-circle-minus, + 'person-circle-plus': $var-person-circle-plus, + 'person-circle-question': $var-person-circle-question, + 'person-circle-xmark': $var-person-circle-xmark, + 'person-dress-burst': $var-person-dress-burst, + 'person-drowning': $var-person-drowning, + 'person-falling': $var-person-falling, + 'person-falling-burst': $var-person-falling-burst, + 'person-half-dress': $var-person-half-dress, + 'person-harassing': $var-person-harassing, + 'person-military-pointing': $var-person-military-pointing, + 'person-military-rifle': $var-person-military-rifle, + 'person-military-to-person': $var-person-military-to-person, + 'person-rays': $var-person-rays, + 'person-rifle': $var-person-rifle, + 'person-shelter': $var-person-shelter, + 'person-walking-arrow-loop-left': $var-person-walking-arrow-loop-left, + 'person-walking-arrow-right': $var-person-walking-arrow-right, + 'person-walking-dashed-line-arrow-right': + $var-person-walking-dashed-line-arrow-right, + 'person-walking-luggage': $var-person-walking-luggage, + 'plane-circle-check': $var-plane-circle-check, + 'plane-circle-exclamation': $var-plane-circle-exclamation, + 'plane-circle-xmark': $var-plane-circle-xmark, + 'plane-lock': $var-plane-lock, + 'plate-wheat': $var-plate-wheat, + 'plug-circle-bolt': $var-plug-circle-bolt, + 'plug-circle-check': $var-plug-circle-check, + 'plug-circle-exclamation': $var-plug-circle-exclamation, + 'plug-circle-minus': $var-plug-circle-minus, + 'plug-circle-plus': $var-plug-circle-plus, + 'plug-circle-xmark': $var-plug-circle-xmark, + 'ranking-star': $var-ranking-star, + 'road-barrier': $var-road-barrier, + 'road-bridge': $var-road-bridge, + 'road-circle-check': $var-road-circle-check, + 'road-circle-exclamation': $var-road-circle-exclamation, + 'road-circle-xmark': $var-road-circle-xmark, + 'road-lock': $var-road-lock, + 'road-spikes': $var-road-spikes, + 'rug': $var-rug, + 'sack-xmark': $var-sack-xmark, + 'school-circle-check': $var-school-circle-check, + 'school-circle-exclamation': $var-school-circle-exclamation, + 'school-circle-xmark': $var-school-circle-xmark, + 'school-flag': $var-school-flag, + 'school-lock': $var-school-lock, + 'sheet-plastic': $var-sheet-plastic, + 'shield-cat': $var-shield-cat, + 'shield-dog': $var-shield-dog, + 'shield-heart': $var-shield-heart, + 'square-nfi': $var-square-nfi, + 'square-person-confined': $var-square-person-confined, + 'square-virus': $var-square-virus, + 'staff-snake': $var-staff-snake, + 'rod-asclepius': $var-rod-asclepius, + 'rod-snake': $var-rod-snake, + 'staff-aesculapius': $var-staff-aesculapius, + 'sun-plant-wilt': $var-sun-plant-wilt, + 'tarp': $var-tarp, + 'tarp-droplet': $var-tarp-droplet, + 'tent': $var-tent, + 'tent-arrow-down-to-line': $var-tent-arrow-down-to-line, + 'tent-arrow-left-right': $var-tent-arrow-left-right, + 'tent-arrow-turn-left': $var-tent-arrow-turn-left, + 'tent-arrows-down': $var-tent-arrows-down, + 'tents': $var-tents, + 'toilet-portable': $var-toilet-portable, + 'toilets-portable': $var-toilets-portable, + 'tower-cell': $var-tower-cell, + 'tower-observation': $var-tower-observation, + 'tree-city': $var-tree-city, + 'trowel': $var-trowel, + 'trowel-bricks': $var-trowel-bricks, + 'truck-arrow-right': $var-truck-arrow-right, + 'truck-droplet': $var-truck-droplet, + 'truck-field': $var-truck-field, + 'truck-field-un': $var-truck-field-un, + 'truck-plane': $var-truck-plane, + 'users-between-lines': $var-users-between-lines, + 'users-line': $var-users-line, + 'users-rays': $var-users-rays, + 'users-rectangle': $var-users-rectangle, + 'users-viewfinder': $var-users-viewfinder, + 'vial-circle-check': $var-vial-circle-check, + 'vial-virus': $var-vial-virus, + 'wheat-awn-circle-exclamation': $var-wheat-awn-circle-exclamation, + 'worm': $var-worm, + 'xmarks-lines': $var-xmarks-lines, + 'child-dress': $var-child-dress, + 'child-reaching': $var-child-reaching, + 'file-circle-check': $var-file-circle-check, + 'file-circle-xmark': $var-file-circle-xmark, + 'person-through-window': $var-person-through-window, + 'plant-wilt': $var-plant-wilt, + 'stapler': $var-stapler, + 'train-tram': $var-train-tram, + 'table-cells-column-lock': $var-table-cells-column-lock, + 'table-cells-row-lock': $var-table-cells-row-lock, + 'web-awesome': $var-web-awesome, + 'thumbtack-slash': $var-thumbtack-slash, + 'thumb-tack-slash': $var-thumb-tack-slash, + 'table-cells-row-unlock': $var-table-cells-row-unlock, + 'chart-diagram': $var-chart-diagram, + 'comment-nodes': $var-comment-nodes, + 'file-fragment': $var-file-fragment, + 'file-half-dashed': $var-file-half-dashed, + 'hexagon-nodes': $var-hexagon-nodes, + 'hexagon-nodes-bolt': $var-hexagon-nodes-bolt, + 'square-binary': $var-square-binary, + 'pentagon': $var-pentagon, + 'non-binary': $var-non-binary, + 'spiral': $var-spiral, + 'mobile-vibrate': $var-mobile-vibrate, + 'single-quote-left': $var-single-quote-left, + 'single-quote-right': $var-single-quote-right, + 'bus-side': $var-bus-side, + 'septagon': $var-septagon, + 'heptagon': $var-heptagon, + 'martini-glass-empty': $var-martini-glass-empty, + 'glass-martini': $var-glass-martini, + 'music': $var-music, + 'magnifying-glass': $var-magnifying-glass, + 'search': $var-search, + 'heart': $var-heart, + 'star': $var-star, + 'user': $var-user, + 'user-alt': $var-user-alt, + 'user-large': $var-user-large, + 'film': $var-film, + 'film-alt': $var-film-alt, + 'film-simple': $var-film-simple, + 'table-cells-large': $var-table-cells-large, + 'th-large': $var-th-large, + 'table-cells': $var-table-cells, + 'th': $var-th, + 'table-list': $var-table-list, + 'th-list': $var-th-list, + 'check': $var-check, + 'xmark': $var-xmark, + 'close': $var-close, + 'multiply': $var-multiply, + 'remove': $var-remove, + 'times': $var-times, + 'magnifying-glass-plus': $var-magnifying-glass-plus, + 'search-plus': $var-search-plus, + 'magnifying-glass-minus': $var-magnifying-glass-minus, + 'search-minus': $var-search-minus, + 'power-off': $var-power-off, + 'signal': $var-signal, + 'signal-5': $var-signal-5, + 'signal-perfect': $var-signal-perfect, + 'gear': $var-gear, + 'cog': $var-cog, + 'house': $var-house, + 'home': $var-home, + 'home-alt': $var-home-alt, + 'home-lg-alt': $var-home-lg-alt, + 'clock': $var-clock, + 'clock-four': $var-clock-four, + 'road': $var-road, + 'download': $var-download, + 'inbox': $var-inbox, + 'arrow-rotate-right': $var-arrow-rotate-right, + 'arrow-right-rotate': $var-arrow-right-rotate, + 'arrow-rotate-forward': $var-arrow-rotate-forward, + 'redo': $var-redo, + 'arrows-rotate': $var-arrows-rotate, + 'refresh': $var-refresh, + 'sync': $var-sync, + 'rectangle-list': $var-rectangle-list, + 'list-alt': $var-list-alt, + 'lock': $var-lock, + 'flag': $var-flag, + 'headphones': $var-headphones, + 'headphones-alt': $var-headphones-alt, + 'headphones-simple': $var-headphones-simple, + 'volume-off': $var-volume-off, + 'volume-low': $var-volume-low, + 'volume-down': $var-volume-down, + 'volume-high': $var-volume-high, + 'volume-up': $var-volume-up, + 'qrcode': $var-qrcode, + 'barcode': $var-barcode, + 'tag': $var-tag, + 'tags': $var-tags, + 'book': $var-book, + 'bookmark': $var-bookmark, + 'print': $var-print, + 'camera': $var-camera, + 'camera-alt': $var-camera-alt, + 'font': $var-font, + 'bold': $var-bold, + 'italic': $var-italic, + 'text-height': $var-text-height, + 'text-width': $var-text-width, + 'align-left': $var-align-left, + 'align-center': $var-align-center, + 'align-right': $var-align-right, + 'align-justify': $var-align-justify, + 'list': $var-list, + 'list-squares': $var-list-squares, + 'outdent': $var-outdent, + 'dedent': $var-dedent, + 'indent': $var-indent, + 'video': $var-video, + 'video-camera': $var-video-camera, + 'image': $var-image, + 'location-pin': $var-location-pin, + 'map-marker': $var-map-marker, + 'circle-half-stroke': $var-circle-half-stroke, + 'adjust': $var-adjust, + 'droplet': $var-droplet, + 'tint': $var-tint, + 'pen-to-square': $var-pen-to-square, + 'edit': $var-edit, + 'arrows-up-down-left-right': $var-arrows-up-down-left-right, + 'arrows': $var-arrows, + 'backward-step': $var-backward-step, + 'step-backward': $var-step-backward, + 'backward-fast': $var-backward-fast, + 'fast-backward': $var-fast-backward, + 'backward': $var-backward, + 'play': $var-play, + 'pause': $var-pause, + 'stop': $var-stop, + 'forward': $var-forward, + 'forward-fast': $var-forward-fast, + 'fast-forward': $var-fast-forward, + 'forward-step': $var-forward-step, + 'step-forward': $var-step-forward, + 'eject': $var-eject, + 'chevron-left': $var-chevron-left, + 'chevron-right': $var-chevron-right, + 'circle-plus': $var-circle-plus, + 'plus-circle': $var-plus-circle, + 'circle-minus': $var-circle-minus, + 'minus-circle': $var-minus-circle, + 'circle-xmark': $var-circle-xmark, + 'times-circle': $var-times-circle, + 'xmark-circle': $var-xmark-circle, + 'circle-check': $var-circle-check, + 'check-circle': $var-check-circle, + 'circle-question': $var-circle-question, + 'question-circle': $var-question-circle, + 'circle-info': $var-circle-info, + 'info-circle': $var-info-circle, + 'crosshairs': $var-crosshairs, + 'ban': $var-ban, + 'cancel': $var-cancel, + 'arrow-left': $var-arrow-left, + 'arrow-right': $var-arrow-right, + 'arrow-up': $var-arrow-up, + 'arrow-down': $var-arrow-down, + 'share': $var-share, + 'mail-forward': $var-mail-forward, + 'expand': $var-expand, + 'compress': $var-compress, + 'minus': $var-minus, + 'subtract': $var-subtract, + 'circle-exclamation': $var-circle-exclamation, + 'exclamation-circle': $var-exclamation-circle, + 'gift': $var-gift, + 'leaf': $var-leaf, + 'fire': $var-fire, + 'eye': $var-eye, + 'eye-slash': $var-eye-slash, + 'triangle-exclamation': $var-triangle-exclamation, + 'exclamation-triangle': $var-exclamation-triangle, + 'warning': $var-warning, + 'plane': $var-plane, + 'calendar-days': $var-calendar-days, + 'calendar-alt': $var-calendar-alt, + 'shuffle': $var-shuffle, + 'random': $var-random, + 'comment': $var-comment, + 'magnet': $var-magnet, + 'chevron-up': $var-chevron-up, + 'chevron-down': $var-chevron-down, + 'retweet': $var-retweet, + 'cart-shopping': $var-cart-shopping, + 'shopping-cart': $var-shopping-cart, + 'folder': $var-folder, + 'folder-blank': $var-folder-blank, + 'folder-open': $var-folder-open, + 'arrows-up-down': $var-arrows-up-down, + 'arrows-v': $var-arrows-v, + 'arrows-left-right': $var-arrows-left-right, + 'arrows-h': $var-arrows-h, + 'chart-bar': $var-chart-bar, + 'bar-chart': $var-bar-chart, + 'camera-retro': $var-camera-retro, + 'key': $var-key, + 'gears': $var-gears, + 'cogs': $var-cogs, + 'comments': $var-comments, + 'star-half': $var-star-half, + 'arrow-right-from-bracket': $var-arrow-right-from-bracket, + 'sign-out': $var-sign-out, + 'thumbtack': $var-thumbtack, + 'thumb-tack': $var-thumb-tack, + 'arrow-up-right-from-square': $var-arrow-up-right-from-square, + 'external-link': $var-external-link, + 'arrow-right-to-bracket': $var-arrow-right-to-bracket, + 'sign-in': $var-sign-in, + 'trophy': $var-trophy, + 'upload': $var-upload, + 'lemon': $var-lemon, + 'phone': $var-phone, + 'square-phone': $var-square-phone, + 'phone-square': $var-phone-square, + 'unlock': $var-unlock, + 'credit-card': $var-credit-card, + 'credit-card-alt': $var-credit-card-alt, + 'rss': $var-rss, + 'feed': $var-feed, + 'hard-drive': $var-hard-drive, + 'hdd': $var-hdd, + 'bullhorn': $var-bullhorn, + 'certificate': $var-certificate, + 'hand-point-right': $var-hand-point-right, + 'hand-point-left': $var-hand-point-left, + 'hand-point-up': $var-hand-point-up, + 'hand-point-down': $var-hand-point-down, + 'circle-arrow-left': $var-circle-arrow-left, + 'arrow-circle-left': $var-arrow-circle-left, + 'circle-arrow-right': $var-circle-arrow-right, + 'arrow-circle-right': $var-arrow-circle-right, + 'circle-arrow-up': $var-circle-arrow-up, + 'arrow-circle-up': $var-arrow-circle-up, + 'circle-arrow-down': $var-circle-arrow-down, + 'arrow-circle-down': $var-arrow-circle-down, + 'globe': $var-globe, + 'wrench': $var-wrench, + 'list-check': $var-list-check, + 'tasks': $var-tasks, + 'filter': $var-filter, + 'briefcase': $var-briefcase, + 'up-down-left-right': $var-up-down-left-right, + 'arrows-alt': $var-arrows-alt, + 'users': $var-users, + 'link': $var-link, + 'chain': $var-chain, + 'cloud': $var-cloud, + 'flask': $var-flask, + 'scissors': $var-scissors, + 'cut': $var-cut, + 'copy': $var-copy, + 'paperclip': $var-paperclip, + 'floppy-disk': $var-floppy-disk, + 'save': $var-save, + 'square': $var-square, + 'bars': $var-bars, + 'navicon': $var-navicon, + 'list-ul': $var-list-ul, + 'list-dots': $var-list-dots, + 'list-ol': $var-list-ol, + 'list-1-2': $var-list-1-2, + 'list-numeric': $var-list-numeric, + 'strikethrough': $var-strikethrough, + 'underline': $var-underline, + 'table': $var-table, + 'wand-magic': $var-wand-magic, + 'magic': $var-magic, + 'truck': $var-truck, + 'money-bill': $var-money-bill, + 'caret-down': $var-caret-down, + 'caret-up': $var-caret-up, + 'caret-left': $var-caret-left, + 'caret-right': $var-caret-right, + 'table-columns': $var-table-columns, + 'columns': $var-columns, + 'sort': $var-sort, + 'unsorted': $var-unsorted, + 'sort-down': $var-sort-down, + 'sort-desc': $var-sort-desc, + 'sort-up': $var-sort-up, + 'sort-asc': $var-sort-asc, + 'envelope': $var-envelope, + 'arrow-rotate-left': $var-arrow-rotate-left, + 'arrow-left-rotate': $var-arrow-left-rotate, + 'arrow-rotate-back': $var-arrow-rotate-back, + 'arrow-rotate-backward': $var-arrow-rotate-backward, + 'undo': $var-undo, + 'gavel': $var-gavel, + 'legal': $var-legal, + 'bolt': $var-bolt, + 'zap': $var-zap, + 'sitemap': $var-sitemap, + 'umbrella': $var-umbrella, + 'paste': $var-paste, + 'file-clipboard': $var-file-clipboard, + 'lightbulb': $var-lightbulb, + 'arrow-right-arrow-left': $var-arrow-right-arrow-left, + 'exchange': $var-exchange, + 'cloud-arrow-down': $var-cloud-arrow-down, + 'cloud-download': $var-cloud-download, + 'cloud-download-alt': $var-cloud-download-alt, + 'cloud-arrow-up': $var-cloud-arrow-up, + 'cloud-upload': $var-cloud-upload, + 'cloud-upload-alt': $var-cloud-upload-alt, + 'user-doctor': $var-user-doctor, + 'user-md': $var-user-md, + 'stethoscope': $var-stethoscope, + 'suitcase': $var-suitcase, + 'bell': $var-bell, + 'mug-saucer': $var-mug-saucer, + 'coffee': $var-coffee, + 'hospital': $var-hospital, + 'hospital-alt': $var-hospital-alt, + 'hospital-wide': $var-hospital-wide, + 'truck-medical': $var-truck-medical, + 'ambulance': $var-ambulance, + 'suitcase-medical': $var-suitcase-medical, + 'medkit': $var-medkit, + 'jet-fighter': $var-jet-fighter, + 'fighter-jet': $var-fighter-jet, + 'beer-mug-empty': $var-beer-mug-empty, + 'beer': $var-beer, + 'square-h': $var-square-h, + 'h-square': $var-h-square, + 'square-plus': $var-square-plus, + 'plus-square': $var-plus-square, + 'angles-left': $var-angles-left, + 'angle-double-left': $var-angle-double-left, + 'angles-right': $var-angles-right, + 'angle-double-right': $var-angle-double-right, + 'angles-up': $var-angles-up, + 'angle-double-up': $var-angle-double-up, + 'angles-down': $var-angles-down, + 'angle-double-down': $var-angle-double-down, + 'angle-left': $var-angle-left, + 'angle-right': $var-angle-right, + 'angle-up': $var-angle-up, + 'angle-down': $var-angle-down, + 'laptop': $var-laptop, + 'tablet-button': $var-tablet-button, + 'mobile-button': $var-mobile-button, + 'quote-left': $var-quote-left, + 'quote-left-alt': $var-quote-left-alt, + 'quote-right': $var-quote-right, + 'quote-right-alt': $var-quote-right-alt, + 'spinner': $var-spinner, + 'circle': $var-circle, + 'face-smile': $var-face-smile, + 'smile': $var-smile, + 'face-frown': $var-face-frown, + 'frown': $var-frown, + 'face-meh': $var-face-meh, + 'meh': $var-meh, + 'gamepad': $var-gamepad, + 'keyboard': $var-keyboard, + 'flag-checkered': $var-flag-checkered, + 'terminal': $var-terminal, + 'code': $var-code, + 'reply-all': $var-reply-all, + 'mail-reply-all': $var-mail-reply-all, + 'location-arrow': $var-location-arrow, + 'crop': $var-crop, + 'code-branch': $var-code-branch, + 'link-slash': $var-link-slash, + 'chain-broken': $var-chain-broken, + 'chain-slash': $var-chain-slash, + 'unlink': $var-unlink, + 'info': $var-info, + 'superscript': $var-superscript, + 'subscript': $var-subscript, + 'eraser': $var-eraser, + 'puzzle-piece': $var-puzzle-piece, + 'microphone': $var-microphone, + 'microphone-slash': $var-microphone-slash, + 'shield': $var-shield, + 'shield-blank': $var-shield-blank, + 'calendar': $var-calendar, + 'fire-extinguisher': $var-fire-extinguisher, + 'rocket': $var-rocket, + 'circle-chevron-left': $var-circle-chevron-left, + 'chevron-circle-left': $var-chevron-circle-left, + 'circle-chevron-right': $var-circle-chevron-right, + 'chevron-circle-right': $var-chevron-circle-right, + 'circle-chevron-up': $var-circle-chevron-up, + 'chevron-circle-up': $var-chevron-circle-up, + 'circle-chevron-down': $var-circle-chevron-down, + 'chevron-circle-down': $var-chevron-circle-down, + 'anchor': $var-anchor, + 'unlock-keyhole': $var-unlock-keyhole, + 'unlock-alt': $var-unlock-alt, + 'bullseye': $var-bullseye, + 'ellipsis': $var-ellipsis, + 'ellipsis-h': $var-ellipsis-h, + 'ellipsis-vertical': $var-ellipsis-vertical, + 'ellipsis-v': $var-ellipsis-v, + 'square-rss': $var-square-rss, + 'rss-square': $var-rss-square, + 'circle-play': $var-circle-play, + 'play-circle': $var-play-circle, + 'ticket': $var-ticket, + 'square-minus': $var-square-minus, + 'minus-square': $var-minus-square, + 'arrow-turn-up': $var-arrow-turn-up, + 'level-up': $var-level-up, + 'arrow-turn-down': $var-arrow-turn-down, + 'level-down': $var-level-down, + 'square-check': $var-square-check, + 'check-square': $var-check-square, + 'square-pen': $var-square-pen, + 'pen-square': $var-pen-square, + 'pencil-square': $var-pencil-square, + 'square-arrow-up-right': $var-square-arrow-up-right, + 'external-link-square': $var-external-link-square, + 'share-from-square': $var-share-from-square, + 'share-square': $var-share-square, + 'compass': $var-compass, + 'square-caret-down': $var-square-caret-down, + 'caret-square-down': $var-caret-square-down, + 'square-caret-up': $var-square-caret-up, + 'caret-square-up': $var-caret-square-up, + 'square-caret-right': $var-square-caret-right, + 'caret-square-right': $var-caret-square-right, + 'euro-sign': $var-euro-sign, + 'eur': $var-eur, + 'euro': $var-euro, + 'sterling-sign': $var-sterling-sign, + 'gbp': $var-gbp, + 'pound-sign': $var-pound-sign, + 'rupee-sign': $var-rupee-sign, + 'rupee': $var-rupee, + 'yen-sign': $var-yen-sign, + 'cny': $var-cny, + 'jpy': $var-jpy, + 'rmb': $var-rmb, + 'yen': $var-yen, + 'ruble-sign': $var-ruble-sign, + 'rouble': $var-rouble, + 'rub': $var-rub, + 'ruble': $var-ruble, + 'won-sign': $var-won-sign, + 'krw': $var-krw, + 'won': $var-won, + 'file': $var-file, + 'file-lines': $var-file-lines, + 'file-alt': $var-file-alt, + 'file-text': $var-file-text, + 'arrow-down-a-z': $var-arrow-down-a-z, + 'sort-alpha-asc': $var-sort-alpha-asc, + 'sort-alpha-down': $var-sort-alpha-down, + 'arrow-up-a-z': $var-arrow-up-a-z, + 'sort-alpha-up': $var-sort-alpha-up, + 'arrow-down-wide-short': $var-arrow-down-wide-short, + 'sort-amount-asc': $var-sort-amount-asc, + 'sort-amount-down': $var-sort-amount-down, + 'arrow-up-wide-short': $var-arrow-up-wide-short, + 'sort-amount-up': $var-sort-amount-up, + 'arrow-down-1-9': $var-arrow-down-1-9, + 'sort-numeric-asc': $var-sort-numeric-asc, + 'sort-numeric-down': $var-sort-numeric-down, + 'arrow-up-1-9': $var-arrow-up-1-9, + 'sort-numeric-up': $var-sort-numeric-up, + 'thumbs-up': $var-thumbs-up, + 'thumbs-down': $var-thumbs-down, + 'arrow-down-long': $var-arrow-down-long, + 'long-arrow-down': $var-long-arrow-down, + 'arrow-up-long': $var-arrow-up-long, + 'long-arrow-up': $var-long-arrow-up, + 'arrow-left-long': $var-arrow-left-long, + 'long-arrow-left': $var-long-arrow-left, + 'arrow-right-long': $var-arrow-right-long, + 'long-arrow-right': $var-long-arrow-right, + 'person-dress': $var-person-dress, + 'female': $var-female, + 'person': $var-person, + 'male': $var-male, + 'sun': $var-sun, + 'moon': $var-moon, + 'box-archive': $var-box-archive, + 'archive': $var-archive, + 'bug': $var-bug, + 'square-caret-left': $var-square-caret-left, + 'caret-square-left': $var-caret-square-left, + 'circle-dot': $var-circle-dot, + 'dot-circle': $var-dot-circle, + 'wheelchair': $var-wheelchair, + 'lira-sign': $var-lira-sign, + 'shuttle-space': $var-shuttle-space, + 'space-shuttle': $var-space-shuttle, + 'square-envelope': $var-square-envelope, + 'envelope-square': $var-envelope-square, + 'building-columns': $var-building-columns, + 'bank': $var-bank, + 'institution': $var-institution, + 'museum': $var-museum, + 'university': $var-university, + 'graduation-cap': $var-graduation-cap, + 'mortar-board': $var-mortar-board, + 'language': $var-language, + 'fax': $var-fax, + 'building': $var-building, + 'child': $var-child, + 'paw': $var-paw, + 'cube': $var-cube, + 'cubes': $var-cubes, + 'recycle': $var-recycle, + 'car': $var-car, + 'automobile': $var-automobile, + 'taxi': $var-taxi, + 'cab': $var-cab, + 'tree': $var-tree, + 'database': $var-database, + 'file-pdf': $var-file-pdf, + 'file-word': $var-file-word, + 'file-excel': $var-file-excel, + 'file-powerpoint': $var-file-powerpoint, + 'file-image': $var-file-image, + 'file-zipper': $var-file-zipper, + 'file-archive': $var-file-archive, + 'file-audio': $var-file-audio, + 'file-video': $var-file-video, + 'file-code': $var-file-code, + 'life-ring': $var-life-ring, + 'circle-notch': $var-circle-notch, + 'paper-plane': $var-paper-plane, + 'clock-rotate-left': $var-clock-rotate-left, + 'history': $var-history, + 'heading': $var-heading, + 'header': $var-header, + 'paragraph': $var-paragraph, + 'sliders': $var-sliders, + 'sliders-h': $var-sliders-h, + 'share-nodes': $var-share-nodes, + 'share-alt': $var-share-alt, + 'square-share-nodes': $var-square-share-nodes, + 'share-alt-square': $var-share-alt-square, + 'bomb': $var-bomb, + 'futbol': $var-futbol, + 'futbol-ball': $var-futbol-ball, + 'soccer-ball': $var-soccer-ball, + 'tty': $var-tty, + 'teletype': $var-teletype, + 'binoculars': $var-binoculars, + 'plug': $var-plug, + 'newspaper': $var-newspaper, + 'wifi': $var-wifi, + 'wifi-3': $var-wifi-3, + 'wifi-strong': $var-wifi-strong, + 'calculator': $var-calculator, + 'bell-slash': $var-bell-slash, + 'trash': $var-trash, + 'copyright': $var-copyright, + 'eye-dropper': $var-eye-dropper, + 'eye-dropper-empty': $var-eye-dropper-empty, + 'eyedropper': $var-eyedropper, + 'paintbrush': $var-paintbrush, + 'paint-brush': $var-paint-brush, + 'cake-candles': $var-cake-candles, + 'birthday-cake': $var-birthday-cake, + 'cake': $var-cake, + 'chart-area': $var-chart-area, + 'area-chart': $var-area-chart, + 'chart-pie': $var-chart-pie, + 'pie-chart': $var-pie-chart, + 'chart-line': $var-chart-line, + 'line-chart': $var-line-chart, + 'toggle-off': $var-toggle-off, + 'toggle-on': $var-toggle-on, + 'bicycle': $var-bicycle, + 'bus': $var-bus, + 'closed-captioning': $var-closed-captioning, + 'shekel-sign': $var-shekel-sign, + 'ils': $var-ils, + 'shekel': $var-shekel, + 'sheqel': $var-sheqel, + 'sheqel-sign': $var-sheqel-sign, + 'cart-plus': $var-cart-plus, + 'cart-arrow-down': $var-cart-arrow-down, + 'diamond': $var-diamond, + 'ship': $var-ship, + 'user-secret': $var-user-secret, + 'motorcycle': $var-motorcycle, + 'street-view': $var-street-view, + 'heart-pulse': $var-heart-pulse, + 'heartbeat': $var-heartbeat, + 'venus': $var-venus, + 'mars': $var-mars, + 'mercury': $var-mercury, + 'mars-and-venus': $var-mars-and-venus, + 'transgender': $var-transgender, + 'transgender-alt': $var-transgender-alt, + 'venus-double': $var-venus-double, + 'mars-double': $var-mars-double, + 'venus-mars': $var-venus-mars, + 'mars-stroke': $var-mars-stroke, + 'mars-stroke-up': $var-mars-stroke-up, + 'mars-stroke-v': $var-mars-stroke-v, + 'mars-stroke-right': $var-mars-stroke-right, + 'mars-stroke-h': $var-mars-stroke-h, + 'neuter': $var-neuter, + 'genderless': $var-genderless, + 'server': $var-server, + 'user-plus': $var-user-plus, + 'user-xmark': $var-user-xmark, + 'user-times': $var-user-times, + 'bed': $var-bed, + 'train': $var-train, + 'train-subway': $var-train-subway, + 'subway': $var-subway, + 'battery-full': $var-battery-full, + 'battery': $var-battery, + 'battery-5': $var-battery-5, + 'battery-three-quarters': $var-battery-three-quarters, + 'battery-4': $var-battery-4, + 'battery-half': $var-battery-half, + 'battery-3': $var-battery-3, + 'battery-quarter': $var-battery-quarter, + 'battery-2': $var-battery-2, + 'battery-empty': $var-battery-empty, + 'battery-0': $var-battery-0, + 'arrow-pointer': $var-arrow-pointer, + 'mouse-pointer': $var-mouse-pointer, + 'i-cursor': $var-i-cursor, + 'object-group': $var-object-group, + 'object-ungroup': $var-object-ungroup, + 'note-sticky': $var-note-sticky, + 'sticky-note': $var-sticky-note, + 'clone': $var-clone, + 'scale-balanced': $var-scale-balanced, + 'balance-scale': $var-balance-scale, + 'hourglass-start': $var-hourglass-start, + 'hourglass-1': $var-hourglass-1, + 'hourglass-half': $var-hourglass-half, + 'hourglass-2': $var-hourglass-2, + 'hourglass-end': $var-hourglass-end, + 'hourglass-3': $var-hourglass-3, + 'hourglass': $var-hourglass, + 'hourglass-empty': $var-hourglass-empty, + 'hand-back-fist': $var-hand-back-fist, + 'hand-rock': $var-hand-rock, + 'hand': $var-hand, + 'hand-paper': $var-hand-paper, + 'hand-scissors': $var-hand-scissors, + 'hand-lizard': $var-hand-lizard, + 'hand-spock': $var-hand-spock, + 'hand-pointer': $var-hand-pointer, + 'hand-peace': $var-hand-peace, + 'trademark': $var-trademark, + 'registered': $var-registered, + 'tv': $var-tv, + 'television': $var-television, + 'tv-alt': $var-tv-alt, + 'calendar-plus': $var-calendar-plus, + 'calendar-minus': $var-calendar-minus, + 'calendar-xmark': $var-calendar-xmark, + 'calendar-times': $var-calendar-times, + 'calendar-check': $var-calendar-check, + 'industry': $var-industry, + 'map-pin': $var-map-pin, + 'signs-post': $var-signs-post, + 'map-signs': $var-map-signs, + 'map': $var-map, + 'message': $var-message, + 'comment-alt': $var-comment-alt, + 'circle-pause': $var-circle-pause, + 'pause-circle': $var-pause-circle, + 'circle-stop': $var-circle-stop, + 'stop-circle': $var-stop-circle, + 'bag-shopping': $var-bag-shopping, + 'shopping-bag': $var-shopping-bag, + 'basket-shopping': $var-basket-shopping, + 'shopping-basket': $var-shopping-basket, + 'universal-access': $var-universal-access, + 'person-walking-with-cane': $var-person-walking-with-cane, + 'blind': $var-blind, + 'audio-description': $var-audio-description, + 'phone-volume': $var-phone-volume, + 'volume-control-phone': $var-volume-control-phone, + 'braille': $var-braille, + 'ear-listen': $var-ear-listen, + 'assistive-listening-systems': $var-assistive-listening-systems, + 'hands-asl-interpreting': $var-hands-asl-interpreting, + 'american-sign-language-interpreting': + $var-american-sign-language-interpreting, + 'asl-interpreting': $var-asl-interpreting, + 'hands-american-sign-language-interpreting': + $var-hands-american-sign-language-interpreting, + 'ear-deaf': $var-ear-deaf, + 'deaf': $var-deaf, + 'deafness': $var-deafness, + 'hard-of-hearing': $var-hard-of-hearing, + 'hands': $var-hands, + 'sign-language': $var-sign-language, + 'signing': $var-signing, + 'eye-low-vision': $var-eye-low-vision, + 'low-vision': $var-low-vision, + 'font-awesome': $var-font-awesome, + 'font-awesome-flag': $var-font-awesome-flag, + 'font-awesome-logo-full': $var-font-awesome-logo-full, + 'handshake': $var-handshake, + 'handshake-alt': $var-handshake-alt, + 'handshake-simple': $var-handshake-simple, + 'envelope-open': $var-envelope-open, + 'address-book': $var-address-book, + 'contact-book': $var-contact-book, + 'address-card': $var-address-card, + 'contact-card': $var-contact-card, + 'vcard': $var-vcard, + 'circle-user': $var-circle-user, + 'user-circle': $var-user-circle, + 'id-badge': $var-id-badge, + 'id-card': $var-id-card, + 'drivers-license': $var-drivers-license, + 'temperature-full': $var-temperature-full, + 'temperature-4': $var-temperature-4, + 'thermometer-4': $var-thermometer-4, + 'thermometer-full': $var-thermometer-full, + 'temperature-three-quarters': $var-temperature-three-quarters, + 'temperature-3': $var-temperature-3, + 'thermometer-3': $var-thermometer-3, + 'thermometer-three-quarters': $var-thermometer-three-quarters, + 'temperature-half': $var-temperature-half, + 'temperature-2': $var-temperature-2, + 'thermometer-2': $var-thermometer-2, + 'thermometer-half': $var-thermometer-half, + 'temperature-quarter': $var-temperature-quarter, + 'temperature-1': $var-temperature-1, + 'thermometer-1': $var-thermometer-1, + 'thermometer-quarter': $var-thermometer-quarter, + 'temperature-empty': $var-temperature-empty, + 'temperature-0': $var-temperature-0, + 'thermometer-0': $var-thermometer-0, + 'thermometer-empty': $var-thermometer-empty, + 'shower': $var-shower, + 'bath': $var-bath, + 'bathtub': $var-bathtub, + 'podcast': $var-podcast, + 'window-maximize': $var-window-maximize, + 'window-minimize': $var-window-minimize, + 'window-restore': $var-window-restore, + 'square-xmark': $var-square-xmark, + 'times-square': $var-times-square, + 'xmark-square': $var-xmark-square, + 'microchip': $var-microchip, + 'snowflake': $var-snowflake, + 'spoon': $var-spoon, + 'utensil-spoon': $var-utensil-spoon, + 'utensils': $var-utensils, + 'cutlery': $var-cutlery, + 'rotate-left': $var-rotate-left, + 'rotate-back': $var-rotate-back, + 'rotate-backward': $var-rotate-backward, + 'undo-alt': $var-undo-alt, + 'trash-can': $var-trash-can, + 'trash-alt': $var-trash-alt, + 'rotate': $var-rotate, + 'sync-alt': $var-sync-alt, + 'stopwatch': $var-stopwatch, + 'right-from-bracket': $var-right-from-bracket, + 'sign-out-alt': $var-sign-out-alt, + 'right-to-bracket': $var-right-to-bracket, + 'sign-in-alt': $var-sign-in-alt, + 'rotate-right': $var-rotate-right, + 'redo-alt': $var-redo-alt, + 'rotate-forward': $var-rotate-forward, + 'poo': $var-poo, + 'images': $var-images, + 'pencil': $var-pencil, + 'pencil-alt': $var-pencil-alt, + 'pen': $var-pen, + 'pen-clip': $var-pen-clip, + 'pen-alt': $var-pen-alt, + 'octagon': $var-octagon, + 'down-long': $var-down-long, + 'long-arrow-alt-down': $var-long-arrow-alt-down, + 'left-long': $var-left-long, + 'long-arrow-alt-left': $var-long-arrow-alt-left, + 'right-long': $var-right-long, + 'long-arrow-alt-right': $var-long-arrow-alt-right, + 'up-long': $var-up-long, + 'long-arrow-alt-up': $var-long-arrow-alt-up, + 'hexagon': $var-hexagon, + 'file-pen': $var-file-pen, + 'file-edit': $var-file-edit, + 'maximize': $var-maximize, + 'expand-arrows-alt': $var-expand-arrows-alt, + 'clipboard': $var-clipboard, + 'left-right': $var-left-right, + 'arrows-alt-h': $var-arrows-alt-h, + 'up-down': $var-up-down, + 'arrows-alt-v': $var-arrows-alt-v, + 'alarm-clock': $var-alarm-clock, + 'circle-down': $var-circle-down, + 'arrow-alt-circle-down': $var-arrow-alt-circle-down, + 'circle-left': $var-circle-left, + 'arrow-alt-circle-left': $var-arrow-alt-circle-left, + 'circle-right': $var-circle-right, + 'arrow-alt-circle-right': $var-arrow-alt-circle-right, + 'circle-up': $var-circle-up, + 'arrow-alt-circle-up': $var-arrow-alt-circle-up, + 'up-right-from-square': $var-up-right-from-square, + 'external-link-alt': $var-external-link-alt, + 'square-up-right': $var-square-up-right, + 'external-link-square-alt': $var-external-link-square-alt, + 'right-left': $var-right-left, + 'exchange-alt': $var-exchange-alt, + 'repeat': $var-repeat, + 'code-commit': $var-code-commit, + 'code-merge': $var-code-merge, + 'desktop': $var-desktop, + 'desktop-alt': $var-desktop-alt, + 'gem': $var-gem, + 'turn-down': $var-turn-down, + 'level-down-alt': $var-level-down-alt, + 'turn-up': $var-turn-up, + 'level-up-alt': $var-level-up-alt, + 'lock-open': $var-lock-open, + 'location-dot': $var-location-dot, + 'map-marker-alt': $var-map-marker-alt, + 'microphone-lines': $var-microphone-lines, + 'microphone-alt': $var-microphone-alt, + 'mobile-screen-button': $var-mobile-screen-button, + 'mobile-alt': $var-mobile-alt, + 'mobile': $var-mobile, + 'mobile-android': $var-mobile-android, + 'mobile-phone': $var-mobile-phone, + 'mobile-screen': $var-mobile-screen, + 'mobile-android-alt': $var-mobile-android-alt, + 'money-bill-1': $var-money-bill-1, + 'money-bill-alt': $var-money-bill-alt, + 'phone-slash': $var-phone-slash, + 'image-portrait': $var-image-portrait, + 'portrait': $var-portrait, + 'reply': $var-reply, + 'mail-reply': $var-mail-reply, + 'shield-halved': $var-shield-halved, + 'shield-alt': $var-shield-alt, + 'tablet-screen-button': $var-tablet-screen-button, + 'tablet-alt': $var-tablet-alt, + 'tablet': $var-tablet, + 'tablet-android': $var-tablet-android, + 'ticket-simple': $var-ticket-simple, + 'ticket-alt': $var-ticket-alt, + 'rectangle-xmark': $var-rectangle-xmark, + 'rectangle-times': $var-rectangle-times, + 'times-rectangle': $var-times-rectangle, + 'window-close': $var-window-close, + 'down-left-and-up-right-to-center': $var-down-left-and-up-right-to-center, + 'compress-alt': $var-compress-alt, + 'up-right-and-down-left-from-center': $var-up-right-and-down-left-from-center, + 'expand-alt': $var-expand-alt, + 'baseball-bat-ball': $var-baseball-bat-ball, + 'baseball': $var-baseball, + 'baseball-ball': $var-baseball-ball, + 'basketball': $var-basketball, + 'basketball-ball': $var-basketball-ball, + 'bowling-ball': $var-bowling-ball, + 'chess': $var-chess, + 'chess-bishop': $var-chess-bishop, + 'chess-board': $var-chess-board, + 'chess-king': $var-chess-king, + 'chess-knight': $var-chess-knight, + 'chess-pawn': $var-chess-pawn, + 'chess-queen': $var-chess-queen, + 'chess-rook': $var-chess-rook, + 'dumbbell': $var-dumbbell, + 'football': $var-football, + 'football-ball': $var-football-ball, + 'golf-ball-tee': $var-golf-ball-tee, + 'golf-ball': $var-golf-ball, + 'hockey-puck': $var-hockey-puck, + 'broom-ball': $var-broom-ball, + 'quidditch': $var-quidditch, + 'quidditch-broom-ball': $var-quidditch-broom-ball, + 'square-full': $var-square-full, + 'table-tennis-paddle-ball': $var-table-tennis-paddle-ball, + 'ping-pong-paddle-ball': $var-ping-pong-paddle-ball, + 'table-tennis': $var-table-tennis, + 'volleyball': $var-volleyball, + 'volleyball-ball': $var-volleyball-ball, + 'hand-dots': $var-hand-dots, + 'allergies': $var-allergies, + 'bandage': $var-bandage, + 'band-aid': $var-band-aid, + 'box': $var-box, + 'boxes-stacked': $var-boxes-stacked, + 'boxes': $var-boxes, + 'boxes-alt': $var-boxes-alt, + 'briefcase-medical': $var-briefcase-medical, + 'fire-flame-simple': $var-fire-flame-simple, + 'burn': $var-burn, + 'capsules': $var-capsules, + 'clipboard-check': $var-clipboard-check, + 'clipboard-list': $var-clipboard-list, + 'person-dots-from-line': $var-person-dots-from-line, + 'diagnoses': $var-diagnoses, + 'dna': $var-dna, + 'dolly': $var-dolly, + 'dolly-box': $var-dolly-box, + 'cart-flatbed': $var-cart-flatbed, + 'dolly-flatbed': $var-dolly-flatbed, + 'file-medical': $var-file-medical, + 'file-waveform': $var-file-waveform, + 'file-medical-alt': $var-file-medical-alt, + 'kit-medical': $var-kit-medical, + 'first-aid': $var-first-aid, + 'circle-h': $var-circle-h, + 'hospital-symbol': $var-hospital-symbol, + 'id-card-clip': $var-id-card-clip, + 'id-card-alt': $var-id-card-alt, + 'notes-medical': $var-notes-medical, + 'pallet': $var-pallet, + 'pills': $var-pills, + 'prescription-bottle': $var-prescription-bottle, + 'prescription-bottle-medical': $var-prescription-bottle-medical, + 'prescription-bottle-alt': $var-prescription-bottle-alt, + 'bed-pulse': $var-bed-pulse, + 'procedures': $var-procedures, + 'truck-fast': $var-truck-fast, + 'shipping-fast': $var-shipping-fast, + 'smoking': $var-smoking, + 'syringe': $var-syringe, + 'tablets': $var-tablets, + 'thermometer': $var-thermometer, + 'vial': $var-vial, + 'vials': $var-vials, + 'warehouse': $var-warehouse, + 'weight-scale': $var-weight-scale, + 'weight': $var-weight, + 'x-ray': $var-x-ray, + 'box-open': $var-box-open, + 'comment-dots': $var-comment-dots, + 'commenting': $var-commenting, + 'comment-slash': $var-comment-slash, + 'couch': $var-couch, + 'circle-dollar-to-slot': $var-circle-dollar-to-slot, + 'donate': $var-donate, + 'dove': $var-dove, + 'hand-holding': $var-hand-holding, + 'hand-holding-heart': $var-hand-holding-heart, + 'hand-holding-dollar': $var-hand-holding-dollar, + 'hand-holding-usd': $var-hand-holding-usd, + 'hand-holding-droplet': $var-hand-holding-droplet, + 'hand-holding-water': $var-hand-holding-water, + 'hands-holding': $var-hands-holding, + 'handshake-angle': $var-handshake-angle, + 'hands-helping': $var-hands-helping, + 'parachute-box': $var-parachute-box, + 'people-carry-box': $var-people-carry-box, + 'people-carry': $var-people-carry, + 'piggy-bank': $var-piggy-bank, + 'ribbon': $var-ribbon, + 'route': $var-route, + 'seedling': $var-seedling, + 'sprout': $var-sprout, + 'sign-hanging': $var-sign-hanging, + 'sign': $var-sign, + 'face-smile-wink': $var-face-smile-wink, + 'smile-wink': $var-smile-wink, + 'tape': $var-tape, + 'truck-ramp-box': $var-truck-ramp-box, + 'truck-loading': $var-truck-loading, + 'truck-moving': $var-truck-moving, + 'video-slash': $var-video-slash, + 'wine-glass': $var-wine-glass, + 'user-astronaut': $var-user-astronaut, + 'user-check': $var-user-check, + 'user-clock': $var-user-clock, + 'user-gear': $var-user-gear, + 'user-cog': $var-user-cog, + 'user-pen': $var-user-pen, + 'user-edit': $var-user-edit, + 'user-group': $var-user-group, + 'user-friends': $var-user-friends, + 'user-graduate': $var-user-graduate, + 'user-lock': $var-user-lock, + 'user-minus': $var-user-minus, + 'user-ninja': $var-user-ninja, + 'user-shield': $var-user-shield, + 'user-slash': $var-user-slash, + 'user-alt-slash': $var-user-alt-slash, + 'user-large-slash': $var-user-large-slash, + 'user-tag': $var-user-tag, + 'user-tie': $var-user-tie, + 'users-gear': $var-users-gear, + 'users-cog': $var-users-cog, + 'scale-unbalanced': $var-scale-unbalanced, + 'balance-scale-left': $var-balance-scale-left, + 'scale-unbalanced-flip': $var-scale-unbalanced-flip, + 'balance-scale-right': $var-balance-scale-right, + 'blender': $var-blender, + 'book-open': $var-book-open, + 'tower-broadcast': $var-tower-broadcast, + 'broadcast-tower': $var-broadcast-tower, + 'broom': $var-broom, + 'chalkboard': $var-chalkboard, + 'blackboard': $var-blackboard, + 'chalkboard-user': $var-chalkboard-user, + 'chalkboard-teacher': $var-chalkboard-teacher, + 'church': $var-church, + 'coins': $var-coins, + 'compact-disc': $var-compact-disc, + 'crow': $var-crow, + 'crown': $var-crown, + 'dice': $var-dice, + 'dice-five': $var-dice-five, + 'dice-four': $var-dice-four, + 'dice-one': $var-dice-one, + 'dice-six': $var-dice-six, + 'dice-three': $var-dice-three, + 'dice-two': $var-dice-two, + 'divide': $var-divide, + 'door-closed': $var-door-closed, + 'door-open': $var-door-open, + 'feather': $var-feather, + 'frog': $var-frog, + 'gas-pump': $var-gas-pump, + 'glasses': $var-glasses, + 'greater-than-equal': $var-greater-than-equal, + 'helicopter': $var-helicopter, + 'infinity': $var-infinity, + 'kiwi-bird': $var-kiwi-bird, + 'less-than-equal': $var-less-than-equal, + 'memory': $var-memory, + 'microphone-lines-slash': $var-microphone-lines-slash, + 'microphone-alt-slash': $var-microphone-alt-slash, + 'money-bill-wave': $var-money-bill-wave, + 'money-bill-1-wave': $var-money-bill-1-wave, + 'money-bill-wave-alt': $var-money-bill-wave-alt, + 'money-check': $var-money-check, + 'money-check-dollar': $var-money-check-dollar, + 'money-check-alt': $var-money-check-alt, + 'not-equal': $var-not-equal, + 'palette': $var-palette, + 'square-parking': $var-square-parking, + 'parking': $var-parking, + 'diagram-project': $var-diagram-project, + 'project-diagram': $var-project-diagram, + 'receipt': $var-receipt, + 'robot': $var-robot, + 'ruler': $var-ruler, + 'ruler-combined': $var-ruler-combined, + 'ruler-horizontal': $var-ruler-horizontal, + 'ruler-vertical': $var-ruler-vertical, + 'school': $var-school, + 'screwdriver': $var-screwdriver, + 'shoe-prints': $var-shoe-prints, + 'skull': $var-skull, + 'ban-smoking': $var-ban-smoking, + 'smoking-ban': $var-smoking-ban, + 'store': $var-store, + 'shop': $var-shop, + 'store-alt': $var-store-alt, + 'bars-staggered': $var-bars-staggered, + 'reorder': $var-reorder, + 'stream': $var-stream, + 'stroopwafel': $var-stroopwafel, + 'toolbox': $var-toolbox, + 'shirt': $var-shirt, + 't-shirt': $var-t-shirt, + 'tshirt': $var-tshirt, + 'person-walking': $var-person-walking, + 'walking': $var-walking, + 'wallet': $var-wallet, + 'face-angry': $var-face-angry, + 'angry': $var-angry, + 'archway': $var-archway, + 'book-atlas': $var-book-atlas, + 'atlas': $var-atlas, + 'award': $var-award, + 'delete-left': $var-delete-left, + 'backspace': $var-backspace, + 'bezier-curve': $var-bezier-curve, + 'bong': $var-bong, + 'brush': $var-brush, + 'bus-simple': $var-bus-simple, + 'bus-alt': $var-bus-alt, + 'cannabis': $var-cannabis, + 'check-double': $var-check-double, + 'martini-glass-citrus': $var-martini-glass-citrus, + 'cocktail': $var-cocktail, + 'bell-concierge': $var-bell-concierge, + 'concierge-bell': $var-concierge-bell, + 'cookie': $var-cookie, + 'cookie-bite': $var-cookie-bite, + 'crop-simple': $var-crop-simple, + 'crop-alt': $var-crop-alt, + 'tachograph-digital': $var-tachograph-digital, + 'digital-tachograph': $var-digital-tachograph, + 'face-dizzy': $var-face-dizzy, + 'dizzy': $var-dizzy, + 'compass-drafting': $var-compass-drafting, + 'drafting-compass': $var-drafting-compass, + 'drum': $var-drum, + 'drum-steelpan': $var-drum-steelpan, + 'feather-pointed': $var-feather-pointed, + 'feather-alt': $var-feather-alt, + 'file-contract': $var-file-contract, + 'file-arrow-down': $var-file-arrow-down, + 'file-download': $var-file-download, + 'file-export': $var-file-export, + 'arrow-right-from-file': $var-arrow-right-from-file, + 'file-import': $var-file-import, + 'arrow-right-to-file': $var-arrow-right-to-file, + 'file-invoice': $var-file-invoice, + 'file-invoice-dollar': $var-file-invoice-dollar, + 'file-prescription': $var-file-prescription, + 'file-signature': $var-file-signature, + 'file-arrow-up': $var-file-arrow-up, + 'file-upload': $var-file-upload, + 'fill': $var-fill, + 'fill-drip': $var-fill-drip, + 'fingerprint': $var-fingerprint, + 'fish': $var-fish, + 'face-flushed': $var-face-flushed, + 'flushed': $var-flushed, + 'face-frown-open': $var-face-frown-open, + 'frown-open': $var-frown-open, + 'martini-glass': $var-martini-glass, + 'glass-martini-alt': $var-glass-martini-alt, + 'earth-africa': $var-earth-africa, + 'globe-africa': $var-globe-africa, + 'earth-americas': $var-earth-americas, + 'earth': $var-earth, + 'earth-america': $var-earth-america, + 'globe-americas': $var-globe-americas, + 'earth-asia': $var-earth-asia, + 'globe-asia': $var-globe-asia, + 'face-grimace': $var-face-grimace, + 'grimace': $var-grimace, + 'face-grin': $var-face-grin, + 'grin': $var-grin, + 'face-grin-wide': $var-face-grin-wide, + 'grin-alt': $var-grin-alt, + 'face-grin-beam': $var-face-grin-beam, + 'grin-beam': $var-grin-beam, + 'face-grin-beam-sweat': $var-face-grin-beam-sweat, + 'grin-beam-sweat': $var-grin-beam-sweat, + 'face-grin-hearts': $var-face-grin-hearts, + 'grin-hearts': $var-grin-hearts, + 'face-grin-squint': $var-face-grin-squint, + 'grin-squint': $var-grin-squint, + 'face-grin-squint-tears': $var-face-grin-squint-tears, + 'grin-squint-tears': $var-grin-squint-tears, + 'face-grin-stars': $var-face-grin-stars, + 'grin-stars': $var-grin-stars, + 'face-grin-tears': $var-face-grin-tears, + 'grin-tears': $var-grin-tears, + 'face-grin-tongue': $var-face-grin-tongue, + 'grin-tongue': $var-grin-tongue, + 'face-grin-tongue-squint': $var-face-grin-tongue-squint, + 'grin-tongue-squint': $var-grin-tongue-squint, + 'face-grin-tongue-wink': $var-face-grin-tongue-wink, + 'grin-tongue-wink': $var-grin-tongue-wink, + 'face-grin-wink': $var-face-grin-wink, + 'grin-wink': $var-grin-wink, + 'grip': $var-grip, + 'grid-horizontal': $var-grid-horizontal, + 'grip-horizontal': $var-grip-horizontal, + 'grip-vertical': $var-grip-vertical, + 'grid-vertical': $var-grid-vertical, + 'headset': $var-headset, + 'highlighter': $var-highlighter, + 'hot-tub-person': $var-hot-tub-person, + 'hot-tub': $var-hot-tub, + 'hotel': $var-hotel, + 'joint': $var-joint, + 'face-kiss': $var-face-kiss, + 'kiss': $var-kiss, + 'face-kiss-beam': $var-face-kiss-beam, + 'kiss-beam': $var-kiss-beam, + 'face-kiss-wink-heart': $var-face-kiss-wink-heart, + 'kiss-wink-heart': $var-kiss-wink-heart, + 'face-laugh': $var-face-laugh, + 'laugh': $var-laugh, + 'face-laugh-beam': $var-face-laugh-beam, + 'laugh-beam': $var-laugh-beam, + 'face-laugh-squint': $var-face-laugh-squint, + 'laugh-squint': $var-laugh-squint, + 'face-laugh-wink': $var-face-laugh-wink, + 'laugh-wink': $var-laugh-wink, + 'cart-flatbed-suitcase': $var-cart-flatbed-suitcase, + 'luggage-cart': $var-luggage-cart, + 'map-location': $var-map-location, + 'map-marked': $var-map-marked, + 'map-location-dot': $var-map-location-dot, + 'map-marked-alt': $var-map-marked-alt, + 'marker': $var-marker, + 'medal': $var-medal, + 'face-meh-blank': $var-face-meh-blank, + 'meh-blank': $var-meh-blank, + 'face-rolling-eyes': $var-face-rolling-eyes, + 'meh-rolling-eyes': $var-meh-rolling-eyes, + 'monument': $var-monument, + 'mortar-pestle': $var-mortar-pestle, + 'paint-roller': $var-paint-roller, + 'passport': $var-passport, + 'pen-fancy': $var-pen-fancy, + 'pen-nib': $var-pen-nib, + 'pen-ruler': $var-pen-ruler, + 'pencil-ruler': $var-pencil-ruler, + 'plane-arrival': $var-plane-arrival, + 'plane-departure': $var-plane-departure, + 'prescription': $var-prescription, + 'face-sad-cry': $var-face-sad-cry, + 'sad-cry': $var-sad-cry, + 'face-sad-tear': $var-face-sad-tear, + 'sad-tear': $var-sad-tear, + 'van-shuttle': $var-van-shuttle, + 'shuttle-van': $var-shuttle-van, + 'signature': $var-signature, + 'face-smile-beam': $var-face-smile-beam, + 'smile-beam': $var-smile-beam, + 'solar-panel': $var-solar-panel, + 'spa': $var-spa, + 'splotch': $var-splotch, + 'spray-can': $var-spray-can, + 'stamp': $var-stamp, + 'star-half-stroke': $var-star-half-stroke, + 'star-half-alt': $var-star-half-alt, + 'suitcase-rolling': $var-suitcase-rolling, + 'face-surprise': $var-face-surprise, + 'surprise': $var-surprise, + 'swatchbook': $var-swatchbook, + 'person-swimming': $var-person-swimming, + 'swimmer': $var-swimmer, + 'water-ladder': $var-water-ladder, + 'ladder-water': $var-ladder-water, + 'swimming-pool': $var-swimming-pool, + 'droplet-slash': $var-droplet-slash, + 'tint-slash': $var-tint-slash, + 'face-tired': $var-face-tired, + 'tired': $var-tired, + 'tooth': $var-tooth, + 'umbrella-beach': $var-umbrella-beach, + 'weight-hanging': $var-weight-hanging, + 'wine-glass-empty': $var-wine-glass-empty, + 'wine-glass-alt': $var-wine-glass-alt, + 'spray-can-sparkles': $var-spray-can-sparkles, + 'air-freshener': $var-air-freshener, + 'apple-whole': $var-apple-whole, + 'apple-alt': $var-apple-alt, + 'atom': $var-atom, + 'bone': $var-bone, + 'book-open-reader': $var-book-open-reader, + 'book-reader': $var-book-reader, + 'brain': $var-brain, + 'car-rear': $var-car-rear, + 'car-alt': $var-car-alt, + 'car-battery': $var-car-battery, + 'battery-car': $var-battery-car, + 'car-burst': $var-car-burst, + 'car-crash': $var-car-crash, + 'car-side': $var-car-side, + 'charging-station': $var-charging-station, + 'diamond-turn-right': $var-diamond-turn-right, + 'directions': $var-directions, + 'draw-polygon': $var-draw-polygon, + 'vector-polygon': $var-vector-polygon, + 'laptop-code': $var-laptop-code, + 'layer-group': $var-layer-group, + 'location-crosshairs': $var-location-crosshairs, + 'location': $var-location, + 'lungs': $var-lungs, + 'microscope': $var-microscope, + 'oil-can': $var-oil-can, + 'poop': $var-poop, + 'shapes': $var-shapes, + 'triangle-circle-square': $var-triangle-circle-square, + 'star-of-life': $var-star-of-life, + 'gauge': $var-gauge, + 'dashboard': $var-dashboard, + 'gauge-med': $var-gauge-med, + 'tachometer-alt-average': $var-tachometer-alt-average, + 'gauge-high': $var-gauge-high, + 'tachometer-alt': $var-tachometer-alt, + 'tachometer-alt-fast': $var-tachometer-alt-fast, + 'gauge-simple': $var-gauge-simple, + 'gauge-simple-med': $var-gauge-simple-med, + 'tachometer-average': $var-tachometer-average, + 'gauge-simple-high': $var-gauge-simple-high, + 'tachometer': $var-tachometer, + 'tachometer-fast': $var-tachometer-fast, + 'teeth': $var-teeth, + 'teeth-open': $var-teeth-open, + 'masks-theater': $var-masks-theater, + 'theater-masks': $var-theater-masks, + 'traffic-light': $var-traffic-light, + 'truck-monster': $var-truck-monster, + 'truck-pickup': $var-truck-pickup, + 'rectangle-ad': $var-rectangle-ad, + 'ad': $var-ad, + 'ankh': $var-ankh, + 'book-bible': $var-book-bible, + 'bible': $var-bible, + 'business-time': $var-business-time, + 'briefcase-clock': $var-briefcase-clock, + 'city': $var-city, + 'comment-dollar': $var-comment-dollar, + 'comments-dollar': $var-comments-dollar, + 'cross': $var-cross, + 'dharmachakra': $var-dharmachakra, + 'envelope-open-text': $var-envelope-open-text, + 'folder-minus': $var-folder-minus, + 'folder-plus': $var-folder-plus, + 'filter-circle-dollar': $var-filter-circle-dollar, + 'funnel-dollar': $var-funnel-dollar, + 'gopuram': $var-gopuram, + 'hamsa': $var-hamsa, + 'bahai': $var-bahai, + 'haykal': $var-haykal, + 'jedi': $var-jedi, + 'book-journal-whills': $var-book-journal-whills, + 'journal-whills': $var-journal-whills, + 'kaaba': $var-kaaba, + 'khanda': $var-khanda, + 'landmark': $var-landmark, + 'envelopes-bulk': $var-envelopes-bulk, + 'mail-bulk': $var-mail-bulk, + 'menorah': $var-menorah, + 'mosque': $var-mosque, + 'om': $var-om, + 'spaghetti-monster-flying': $var-spaghetti-monster-flying, + 'pastafarianism': $var-pastafarianism, + 'peace': $var-peace, + 'place-of-worship': $var-place-of-worship, + 'square-poll-vertical': $var-square-poll-vertical, + 'poll': $var-poll, + 'square-poll-horizontal': $var-square-poll-horizontal, + 'poll-h': $var-poll-h, + 'person-praying': $var-person-praying, + 'pray': $var-pray, + 'hands-praying': $var-hands-praying, + 'praying-hands': $var-praying-hands, + 'book-quran': $var-book-quran, + 'quran': $var-quran, + 'magnifying-glass-dollar': $var-magnifying-glass-dollar, + 'search-dollar': $var-search-dollar, + 'magnifying-glass-location': $var-magnifying-glass-location, + 'search-location': $var-search-location, + 'socks': $var-socks, + 'square-root-variable': $var-square-root-variable, + 'square-root-alt': $var-square-root-alt, + 'star-and-crescent': $var-star-and-crescent, + 'star-of-david': $var-star-of-david, + 'synagogue': $var-synagogue, + 'scroll-torah': $var-scroll-torah, + 'torah': $var-torah, + 'torii-gate': $var-torii-gate, + 'vihara': $var-vihara, + 'volume-xmark': $var-volume-xmark, + 'volume-mute': $var-volume-mute, + 'volume-times': $var-volume-times, + 'yin-yang': $var-yin-yang, + 'blender-phone': $var-blender-phone, + 'book-skull': $var-book-skull, + 'book-dead': $var-book-dead, + 'campground': $var-campground, + 'cat': $var-cat, + 'chair': $var-chair, + 'cloud-moon': $var-cloud-moon, + 'cloud-sun': $var-cloud-sun, + 'cow': $var-cow, + 'dice-d20': $var-dice-d20, + 'dice-d6': $var-dice-d6, + 'dog': $var-dog, + 'dragon': $var-dragon, + 'drumstick-bite': $var-drumstick-bite, + 'dungeon': $var-dungeon, + 'file-csv': $var-file-csv, + 'hand-fist': $var-hand-fist, + 'fist-raised': $var-fist-raised, + 'ghost': $var-ghost, + 'hammer': $var-hammer, + 'hanukiah': $var-hanukiah, + 'hat-wizard': $var-hat-wizard, + 'person-hiking': $var-person-hiking, + 'hiking': $var-hiking, + 'hippo': $var-hippo, + 'horse': $var-horse, + 'house-chimney-crack': $var-house-chimney-crack, + 'house-damage': $var-house-damage, + 'hryvnia-sign': $var-hryvnia-sign, + 'hryvnia': $var-hryvnia, + 'mask': $var-mask, + 'mountain': $var-mountain, + 'network-wired': $var-network-wired, + 'otter': $var-otter, + 'ring': $var-ring, + 'person-running': $var-person-running, + 'running': $var-running, + 'scroll': $var-scroll, + 'skull-crossbones': $var-skull-crossbones, + 'slash': $var-slash, + 'spider': $var-spider, + 'toilet-paper': $var-toilet-paper, + 'toilet-paper-alt': $var-toilet-paper-alt, + 'toilet-paper-blank': $var-toilet-paper-blank, + 'tractor': $var-tractor, + 'user-injured': $var-user-injured, + 'vr-cardboard': $var-vr-cardboard, + 'wand-sparkles': $var-wand-sparkles, + 'wind': $var-wind, + 'wine-bottle': $var-wine-bottle, + 'cloud-meatball': $var-cloud-meatball, + 'cloud-moon-rain': $var-cloud-moon-rain, + 'cloud-rain': $var-cloud-rain, + 'cloud-showers-heavy': $var-cloud-showers-heavy, + 'cloud-sun-rain': $var-cloud-sun-rain, + 'democrat': $var-democrat, + 'flag-usa': $var-flag-usa, + 'hurricane': $var-hurricane, + 'landmark-dome': $var-landmark-dome, + 'landmark-alt': $var-landmark-alt, + 'meteor': $var-meteor, + 'person-booth': $var-person-booth, + 'poo-storm': $var-poo-storm, + 'poo-bolt': $var-poo-bolt, + 'rainbow': $var-rainbow, + 'republican': $var-republican, + 'smog': $var-smog, + 'temperature-high': $var-temperature-high, + 'temperature-low': $var-temperature-low, + 'cloud-bolt': $var-cloud-bolt, + 'thunderstorm': $var-thunderstorm, + 'tornado': $var-tornado, + 'volcano': $var-volcano, + 'check-to-slot': $var-check-to-slot, + 'vote-yea': $var-vote-yea, + 'water': $var-water, + 'baby': $var-baby, + 'baby-carriage': $var-baby-carriage, + 'carriage-baby': $var-carriage-baby, + 'biohazard': $var-biohazard, + 'blog': $var-blog, + 'calendar-day': $var-calendar-day, + 'calendar-week': $var-calendar-week, + 'candy-cane': $var-candy-cane, + 'carrot': $var-carrot, + 'cash-register': $var-cash-register, + 'minimize': $var-minimize, + 'compress-arrows-alt': $var-compress-arrows-alt, + 'dumpster': $var-dumpster, + 'dumpster-fire': $var-dumpster-fire, + 'ethernet': $var-ethernet, + 'gifts': $var-gifts, + 'champagne-glasses': $var-champagne-glasses, + 'glass-cheers': $var-glass-cheers, + 'whiskey-glass': $var-whiskey-glass, + 'glass-whiskey': $var-glass-whiskey, + 'earth-europe': $var-earth-europe, + 'globe-europe': $var-globe-europe, + 'grip-lines': $var-grip-lines, + 'grip-lines-vertical': $var-grip-lines-vertical, + 'guitar': $var-guitar, + 'heart-crack': $var-heart-crack, + 'heart-broken': $var-heart-broken, + 'holly-berry': $var-holly-berry, + 'horse-head': $var-horse-head, + 'icicles': $var-icicles, + 'igloo': $var-igloo, + 'mitten': $var-mitten, + 'mug-hot': $var-mug-hot, + 'radiation': $var-radiation, + 'circle-radiation': $var-circle-radiation, + 'radiation-alt': $var-radiation-alt, + 'restroom': $var-restroom, + 'satellite': $var-satellite, + 'satellite-dish': $var-satellite-dish, + 'sd-card': $var-sd-card, + 'sim-card': $var-sim-card, + 'person-skating': $var-person-skating, + 'skating': $var-skating, + 'person-skiing': $var-person-skiing, + 'skiing': $var-skiing, + 'person-skiing-nordic': $var-person-skiing-nordic, + 'skiing-nordic': $var-skiing-nordic, + 'sleigh': $var-sleigh, + 'comment-sms': $var-comment-sms, + 'sms': $var-sms, + 'person-snowboarding': $var-person-snowboarding, + 'snowboarding': $var-snowboarding, + 'snowman': $var-snowman, + 'snowplow': $var-snowplow, + 'tenge-sign': $var-tenge-sign, + 'tenge': $var-tenge, + 'toilet': $var-toilet, + 'screwdriver-wrench': $var-screwdriver-wrench, + 'tools': $var-tools, + 'cable-car': $var-cable-car, + 'tram': $var-tram, + 'fire-flame-curved': $var-fire-flame-curved, + 'fire-alt': $var-fire-alt, + 'bacon': $var-bacon, + 'book-medical': $var-book-medical, + 'bread-slice': $var-bread-slice, + 'cheese': $var-cheese, + 'house-chimney-medical': $var-house-chimney-medical, + 'clinic-medical': $var-clinic-medical, + 'clipboard-user': $var-clipboard-user, + 'comment-medical': $var-comment-medical, + 'crutch': $var-crutch, + 'disease': $var-disease, + 'egg': $var-egg, + 'folder-tree': $var-folder-tree, + 'burger': $var-burger, + 'hamburger': $var-hamburger, + 'hand-middle-finger': $var-hand-middle-finger, + 'helmet-safety': $var-helmet-safety, + 'hard-hat': $var-hard-hat, + 'hat-hard': $var-hat-hard, + 'hospital-user': $var-hospital-user, + 'hotdog': $var-hotdog, + 'ice-cream': $var-ice-cream, + 'laptop-medical': $var-laptop-medical, + 'pager': $var-pager, + 'pepper-hot': $var-pepper-hot, + 'pizza-slice': $var-pizza-slice, + 'sack-dollar': $var-sack-dollar, + 'book-tanakh': $var-book-tanakh, + 'tanakh': $var-tanakh, + 'bars-progress': $var-bars-progress, + 'tasks-alt': $var-tasks-alt, + 'trash-arrow-up': $var-trash-arrow-up, + 'trash-restore': $var-trash-restore, + 'trash-can-arrow-up': $var-trash-can-arrow-up, + 'trash-restore-alt': $var-trash-restore-alt, + 'user-nurse': $var-user-nurse, + 'wave-square': $var-wave-square, + 'person-biking': $var-person-biking, + 'biking': $var-biking, + 'border-all': $var-border-all, + 'border-none': $var-border-none, + 'border-top-left': $var-border-top-left, + 'border-style': $var-border-style, + 'person-digging': $var-person-digging, + 'digging': $var-digging, + 'fan': $var-fan, + 'icons': $var-icons, + 'heart-music-camera-bolt': $var-heart-music-camera-bolt, + 'phone-flip': $var-phone-flip, + 'phone-alt': $var-phone-alt, + 'square-phone-flip': $var-square-phone-flip, + 'phone-square-alt': $var-phone-square-alt, + 'photo-film': $var-photo-film, + 'photo-video': $var-photo-video, + 'text-slash': $var-text-slash, + 'remove-format': $var-remove-format, + 'arrow-down-z-a': $var-arrow-down-z-a, + 'sort-alpha-desc': $var-sort-alpha-desc, + 'sort-alpha-down-alt': $var-sort-alpha-down-alt, + 'arrow-up-z-a': $var-arrow-up-z-a, + 'sort-alpha-up-alt': $var-sort-alpha-up-alt, + 'arrow-down-short-wide': $var-arrow-down-short-wide, + 'sort-amount-desc': $var-sort-amount-desc, + 'sort-amount-down-alt': $var-sort-amount-down-alt, + 'arrow-up-short-wide': $var-arrow-up-short-wide, + 'sort-amount-up-alt': $var-sort-amount-up-alt, + 'arrow-down-9-1': $var-arrow-down-9-1, + 'sort-numeric-desc': $var-sort-numeric-desc, + 'sort-numeric-down-alt': $var-sort-numeric-down-alt, + 'arrow-up-9-1': $var-arrow-up-9-1, + 'sort-numeric-up-alt': $var-sort-numeric-up-alt, + 'spell-check': $var-spell-check, + 'voicemail': $var-voicemail, + 'hat-cowboy': $var-hat-cowboy, + 'hat-cowboy-side': $var-hat-cowboy-side, + 'computer-mouse': $var-computer-mouse, + 'mouse': $var-mouse, + 'radio': $var-radio, + 'record-vinyl': $var-record-vinyl, + 'walkie-talkie': $var-walkie-talkie, + 'caravan': $var-caravan, +); + +$brand-icons: ( + 'firefox-browser': $var-firefox-browser, + 'ideal': $var-ideal, + 'microblog': $var-microblog, + 'square-pied-piper': $var-square-pied-piper, + 'pied-piper-square': $var-pied-piper-square, + 'unity': $var-unity, + 'dailymotion': $var-dailymotion, + 'square-instagram': $var-square-instagram, + 'instagram-square': $var-instagram-square, + 'mixer': $var-mixer, + 'shopify': $var-shopify, + 'deezer': $var-deezer, + 'edge-legacy': $var-edge-legacy, + 'google-pay': $var-google-pay, + 'rust': $var-rust, + 'tiktok': $var-tiktok, + 'unsplash': $var-unsplash, + 'cloudflare': $var-cloudflare, + 'guilded': $var-guilded, + 'hive': $var-hive, + '42-group': $var-42-group, + 'innosoft': $var-innosoft, + 'instalod': $var-instalod, + 'octopus-deploy': $var-octopus-deploy, + 'perbyte': $var-perbyte, + 'uncharted': $var-uncharted, + 'watchman-monitoring': $var-watchman-monitoring, + 'wodu': $var-wodu, + 'wirsindhandwerk': $var-wirsindhandwerk, + 'wsh': $var-wsh, + 'bots': $var-bots, + 'cmplid': $var-cmplid, + 'bilibili': $var-bilibili, + 'golang': $var-golang, + 'pix': $var-pix, + 'sitrox': $var-sitrox, + 'hashnode': $var-hashnode, + 'meta': $var-meta, + 'padlet': $var-padlet, + 'nfc-directional': $var-nfc-directional, + 'nfc-symbol': $var-nfc-symbol, + 'screenpal': $var-screenpal, + 'space-awesome': $var-space-awesome, + 'square-font-awesome': $var-square-font-awesome, + 'square-gitlab': $var-square-gitlab, + 'gitlab-square': $var-gitlab-square, + 'odysee': $var-odysee, + 'stubber': $var-stubber, + 'debian': $var-debian, + 'shoelace': $var-shoelace, + 'threads': $var-threads, + 'square-threads': $var-square-threads, + 'square-x-twitter': $var-square-x-twitter, + 'x-twitter': $var-x-twitter, + 'opensuse': $var-opensuse, + 'letterboxd': $var-letterboxd, + 'square-letterboxd': $var-square-letterboxd, + 'mintbit': $var-mintbit, + 'google-scholar': $var-google-scholar, + 'brave': $var-brave, + 'brave-reverse': $var-brave-reverse, + 'pixiv': $var-pixiv, + 'upwork': $var-upwork, + 'webflow': $var-webflow, + 'signal-messenger': $var-signal-messenger, + 'bluesky': $var-bluesky, + 'jxl': $var-jxl, + 'square-upwork': $var-square-upwork, + 'web-awesome': $var-web-awesome, + 'square-web-awesome': $var-square-web-awesome, + 'square-web-awesome-stroke': $var-square-web-awesome-stroke, + 'dart-lang': $var-dart-lang, + 'flutter': $var-flutter, + 'files-pinwheel': $var-files-pinwheel, + 'css': $var-css, + 'square-bluesky': $var-square-bluesky, + 'openai': $var-openai, + 'square-linkedin': $var-square-linkedin, + 'cash-app': $var-cash-app, + 'disqus': $var-disqus, + 'eleventy': $var-eleventy, + '11ty': $var-11ty, + 'kakao-talk': $var-kakao-talk, + 'linktree': $var-linktree, + 'notion': $var-notion, + 'pandora': $var-pandora, + 'pixelfed': $var-pixelfed, + 'tidal': $var-tidal, + 'vsco': $var-vsco, + 'w3c': $var-w3c, + 'lumon': $var-lumon, + 'lumon-drop': $var-lumon-drop, + 'square-figma': $var-square-figma, + 'tex': $var-tex, + 'duolingo': $var-duolingo, + 'square-twitter': $var-square-twitter, + 'twitter-square': $var-twitter-square, + 'square-facebook': $var-square-facebook, + 'facebook-square': $var-facebook-square, + 'linkedin': $var-linkedin, + 'square-github': $var-square-github, + 'github-square': $var-github-square, + 'twitter': $var-twitter, + 'facebook': $var-facebook, + 'github': $var-github, + 'pinterest': $var-pinterest, + 'square-pinterest': $var-square-pinterest, + 'pinterest-square': $var-pinterest-square, + 'square-google-plus': $var-square-google-plus, + 'google-plus-square': $var-google-plus-square, + 'google-plus-g': $var-google-plus-g, + 'linkedin-in': $var-linkedin-in, + 'github-alt': $var-github-alt, + 'maxcdn': $var-maxcdn, + 'html5': $var-html5, + 'css3': $var-css3, + 'btc': $var-btc, + 'youtube': $var-youtube, + 'xing': $var-xing, + 'square-xing': $var-square-xing, + 'xing-square': $var-xing-square, + 'dropbox': $var-dropbox, + 'stack-overflow': $var-stack-overflow, + 'instagram': $var-instagram, + 'flickr': $var-flickr, + 'adn': $var-adn, + 'bitbucket': $var-bitbucket, + 'tumblr': $var-tumblr, + 'square-tumblr': $var-square-tumblr, + 'tumblr-square': $var-tumblr-square, + 'apple': $var-apple, + 'windows': $var-windows, + 'android': $var-android, + 'linux': $var-linux, + 'dribbble': $var-dribbble, + 'skype': $var-skype, + 'foursquare': $var-foursquare, + 'trello': $var-trello, + 'gratipay': $var-gratipay, + 'vk': $var-vk, + 'weibo': $var-weibo, + 'renren': $var-renren, + 'pagelines': $var-pagelines, + 'stack-exchange': $var-stack-exchange, + 'square-vimeo': $var-square-vimeo, + 'vimeo-square': $var-vimeo-square, + 'slack': $var-slack, + 'slack-hash': $var-slack-hash, + 'wordpress': $var-wordpress, + 'openid': $var-openid, + 'yahoo': $var-yahoo, + 'google': $var-google, + 'reddit': $var-reddit, + 'square-reddit': $var-square-reddit, + 'reddit-square': $var-reddit-square, + 'stumbleupon-circle': $var-stumbleupon-circle, + 'stumbleupon': $var-stumbleupon, + 'delicious': $var-delicious, + 'digg': $var-digg, + 'pied-piper-pp': $var-pied-piper-pp, + 'pied-piper-alt': $var-pied-piper-alt, + 'drupal': $var-drupal, + 'joomla': $var-joomla, + 'behance': $var-behance, + 'square-behance': $var-square-behance, + 'behance-square': $var-behance-square, + 'steam': $var-steam, + 'square-steam': $var-square-steam, + 'steam-square': $var-steam-square, + 'spotify': $var-spotify, + 'deviantart': $var-deviantart, + 'soundcloud': $var-soundcloud, + 'vine': $var-vine, + 'codepen': $var-codepen, + 'jsfiddle': $var-jsfiddle, + 'rebel': $var-rebel, + 'empire': $var-empire, + 'square-git': $var-square-git, + 'git-square': $var-git-square, + 'git': $var-git, + 'hacker-news': $var-hacker-news, + 'tencent-weibo': $var-tencent-weibo, + 'qq': $var-qq, + 'weixin': $var-weixin, + 'slideshare': $var-slideshare, + 'twitch': $var-twitch, + 'yelp': $var-yelp, + 'paypal': $var-paypal, + 'google-wallet': $var-google-wallet, + 'cc-visa': $var-cc-visa, + 'cc-mastercard': $var-cc-mastercard, + 'cc-discover': $var-cc-discover, + 'cc-amex': $var-cc-amex, + 'cc-paypal': $var-cc-paypal, + 'cc-stripe': $var-cc-stripe, + 'lastfm': $var-lastfm, + 'square-lastfm': $var-square-lastfm, + 'lastfm-square': $var-lastfm-square, + 'ioxhost': $var-ioxhost, + 'angellist': $var-angellist, + 'buysellads': $var-buysellads, + 'connectdevelop': $var-connectdevelop, + 'dashcube': $var-dashcube, + 'forumbee': $var-forumbee, + 'leanpub': $var-leanpub, + 'sellsy': $var-sellsy, + 'shirtsinbulk': $var-shirtsinbulk, + 'simplybuilt': $var-simplybuilt, + 'skyatlas': $var-skyatlas, + 'pinterest-p': $var-pinterest-p, + 'whatsapp': $var-whatsapp, + 'viacoin': $var-viacoin, + 'medium': $var-medium, + 'medium-m': $var-medium-m, + 'y-combinator': $var-y-combinator, + 'optin-monster': $var-optin-monster, + 'opencart': $var-opencart, + 'expeditedssl': $var-expeditedssl, + 'cc-jcb': $var-cc-jcb, + 'cc-diners-club': $var-cc-diners-club, + 'creative-commons': $var-creative-commons, + 'gg': $var-gg, + 'gg-circle': $var-gg-circle, + 'odnoklassniki': $var-odnoklassniki, + 'square-odnoklassniki': $var-square-odnoklassniki, + 'odnoklassniki-square': $var-odnoklassniki-square, + 'get-pocket': $var-get-pocket, + 'wikipedia-w': $var-wikipedia-w, + 'safari': $var-safari, + 'chrome': $var-chrome, + 'firefox': $var-firefox, + 'opera': $var-opera, + 'internet-explorer': $var-internet-explorer, + 'contao': $var-contao, + '500px': $var-500px, + 'amazon': $var-amazon, + 'houzz': $var-houzz, + 'vimeo-v': $var-vimeo-v, + 'black-tie': $var-black-tie, + 'fonticons': $var-fonticons, + 'reddit-alien': $var-reddit-alien, + 'edge': $var-edge, + 'codiepie': $var-codiepie, + 'modx': $var-modx, + 'fort-awesome': $var-fort-awesome, + 'usb': $var-usb, + 'product-hunt': $var-product-hunt, + 'mixcloud': $var-mixcloud, + 'scribd': $var-scribd, + 'bluetooth': $var-bluetooth, + 'bluetooth-b': $var-bluetooth-b, + 'gitlab': $var-gitlab, + 'wpbeginner': $var-wpbeginner, + 'wpforms': $var-wpforms, + 'envira': $var-envira, + 'glide': $var-glide, + 'glide-g': $var-glide-g, + 'viadeo': $var-viadeo, + 'square-viadeo': $var-square-viadeo, + 'viadeo-square': $var-viadeo-square, + 'snapchat': $var-snapchat, + 'snapchat-ghost': $var-snapchat-ghost, + 'square-snapchat': $var-square-snapchat, + 'snapchat-square': $var-snapchat-square, + 'pied-piper': $var-pied-piper, + 'first-order': $var-first-order, + 'yoast': $var-yoast, + 'themeisle': $var-themeisle, + 'google-plus': $var-google-plus, + 'font-awesome': $var-font-awesome, + 'font-awesome-flag': $var-font-awesome-flag, + 'font-awesome-logo-full': $var-font-awesome-logo-full, + 'linode': $var-linode, + 'quora': $var-quora, + 'free-code-camp': $var-free-code-camp, + 'telegram': $var-telegram, + 'telegram-plane': $var-telegram-plane, + 'bandcamp': $var-bandcamp, + 'grav': $var-grav, + 'etsy': $var-etsy, + 'imdb': $var-imdb, + 'ravelry': $var-ravelry, + 'sellcast': $var-sellcast, + 'superpowers': $var-superpowers, + 'wpexplorer': $var-wpexplorer, + 'meetup': $var-meetup, + 'square-font-awesome-stroke': $var-square-font-awesome-stroke, + 'font-awesome-alt': $var-font-awesome-alt, + 'accessible-icon': $var-accessible-icon, + 'accusoft': $var-accusoft, + 'adversal': $var-adversal, + 'affiliatetheme': $var-affiliatetheme, + 'algolia': $var-algolia, + 'amilia': $var-amilia, + 'angrycreative': $var-angrycreative, + 'app-store': $var-app-store, + 'app-store-ios': $var-app-store-ios, + 'apper': $var-apper, + 'asymmetrik': $var-asymmetrik, + 'audible': $var-audible, + 'avianex': $var-avianex, + 'aws': $var-aws, + 'bimobject': $var-bimobject, + 'bitcoin': $var-bitcoin, + 'bity': $var-bity, + 'blackberry': $var-blackberry, + 'blogger': $var-blogger, + 'blogger-b': $var-blogger-b, + 'buromobelexperte': $var-buromobelexperte, + 'centercode': $var-centercode, + 'cloudscale': $var-cloudscale, + 'cloudsmith': $var-cloudsmith, + 'cloudversify': $var-cloudversify, + 'cpanel': $var-cpanel, + 'css3-alt': $var-css3-alt, + 'cuttlefish': $var-cuttlefish, + 'd-and-d': $var-d-and-d, + 'deploydog': $var-deploydog, + 'deskpro': $var-deskpro, + 'digital-ocean': $var-digital-ocean, + 'discord': $var-discord, + 'discourse': $var-discourse, + 'dochub': $var-dochub, + 'docker': $var-docker, + 'draft2digital': $var-draft2digital, + 'square-dribbble': $var-square-dribbble, + 'dribbble-square': $var-dribbble-square, + 'dyalog': $var-dyalog, + 'earlybirds': $var-earlybirds, + 'erlang': $var-erlang, + 'facebook-f': $var-facebook-f, + 'facebook-messenger': $var-facebook-messenger, + 'firstdraft': $var-firstdraft, + 'fonticons-fi': $var-fonticons-fi, + 'fort-awesome-alt': $var-fort-awesome-alt, + 'freebsd': $var-freebsd, + 'gitkraken': $var-gitkraken, + 'gofore': $var-gofore, + 'goodreads': $var-goodreads, + 'goodreads-g': $var-goodreads-g, + 'google-drive': $var-google-drive, + 'google-play': $var-google-play, + 'gripfire': $var-gripfire, + 'grunt': $var-grunt, + 'gulp': $var-gulp, + 'square-hacker-news': $var-square-hacker-news, + 'hacker-news-square': $var-hacker-news-square, + 'hire-a-helper': $var-hire-a-helper, + 'hotjar': $var-hotjar, + 'hubspot': $var-hubspot, + 'itunes': $var-itunes, + 'itunes-note': $var-itunes-note, + 'jenkins': $var-jenkins, + 'joget': $var-joget, + 'js': $var-js, + 'square-js': $var-square-js, + 'js-square': $var-js-square, + 'keycdn': $var-keycdn, + 'kickstarter': $var-kickstarter, + 'square-kickstarter': $var-square-kickstarter, + 'kickstarter-k': $var-kickstarter-k, + 'laravel': $var-laravel, + 'line': $var-line, + 'lyft': $var-lyft, + 'magento': $var-magento, + 'medapps': $var-medapps, + 'medrt': $var-medrt, + 'microsoft': $var-microsoft, + 'mix': $var-mix, + 'mizuni': $var-mizuni, + 'monero': $var-monero, + 'napster': $var-napster, + 'node-js': $var-node-js, + 'npm': $var-npm, + 'ns8': $var-ns8, + 'nutritionix': $var-nutritionix, + 'page4': $var-page4, + 'palfed': $var-palfed, + 'patreon': $var-patreon, + 'periscope': $var-periscope, + 'phabricator': $var-phabricator, + 'phoenix-framework': $var-phoenix-framework, + 'playstation': $var-playstation, + 'pushed': $var-pushed, + 'python': $var-python, + 'red-river': $var-red-river, + 'wpressr': $var-wpressr, + 'rendact': $var-rendact, + 'replyd': $var-replyd, + 'resolving': $var-resolving, + 'rocketchat': $var-rocketchat, + 'rockrms': $var-rockrms, + 'schlix': $var-schlix, + 'searchengin': $var-searchengin, + 'servicestack': $var-servicestack, + 'sistrix': $var-sistrix, + 'speakap': $var-speakap, + 'staylinked': $var-staylinked, + 'steam-symbol': $var-steam-symbol, + 'sticker-mule': $var-sticker-mule, + 'studiovinari': $var-studiovinari, + 'supple': $var-supple, + 'uber': $var-uber, + 'uikit': $var-uikit, + 'uniregistry': $var-uniregistry, + 'untappd': $var-untappd, + 'ussunnah': $var-ussunnah, + 'vaadin': $var-vaadin, + 'viber': $var-viber, + 'vimeo': $var-vimeo, + 'vnv': $var-vnv, + 'square-whatsapp': $var-square-whatsapp, + 'whatsapp-square': $var-whatsapp-square, + 'whmcs': $var-whmcs, + 'wordpress-simple': $var-wordpress-simple, + 'xbox': $var-xbox, + 'yandex': $var-yandex, + 'yandex-international': $var-yandex-international, + 'apple-pay': $var-apple-pay, + 'cc-apple-pay': $var-cc-apple-pay, + 'fly': $var-fly, + 'node': $var-node, + 'osi': $var-osi, + 'react': $var-react, + 'autoprefixer': $var-autoprefixer, + 'less': $var-less, + 'sass': $var-sass, + 'vuejs': $var-vuejs, + 'angular': $var-angular, + 'aviato': $var-aviato, + 'ember': $var-ember, + 'gitter': $var-gitter, + 'hooli': $var-hooli, + 'strava': $var-strava, + 'stripe': $var-stripe, + 'stripe-s': $var-stripe-s, + 'typo3': $var-typo3, + 'amazon-pay': $var-amazon-pay, + 'cc-amazon-pay': $var-cc-amazon-pay, + 'ethereum': $var-ethereum, + 'korvue': $var-korvue, + 'elementor': $var-elementor, + 'square-youtube': $var-square-youtube, + 'youtube-square': $var-youtube-square, + 'flipboard': $var-flipboard, + 'hips': $var-hips, + 'php': $var-php, + 'quinscape': $var-quinscape, + 'readme': $var-readme, + 'java': $var-java, + 'pied-piper-hat': $var-pied-piper-hat, + 'creative-commons-by': $var-creative-commons-by, + 'creative-commons-nc': $var-creative-commons-nc, + 'creative-commons-nc-eu': $var-creative-commons-nc-eu, + 'creative-commons-nc-jp': $var-creative-commons-nc-jp, + 'creative-commons-nd': $var-creative-commons-nd, + 'creative-commons-pd': $var-creative-commons-pd, + 'creative-commons-pd-alt': $var-creative-commons-pd-alt, + 'creative-commons-remix': $var-creative-commons-remix, + 'creative-commons-sa': $var-creative-commons-sa, + 'creative-commons-sampling': $var-creative-commons-sampling, + 'creative-commons-sampling-plus': $var-creative-commons-sampling-plus, + 'creative-commons-share': $var-creative-commons-share, + 'creative-commons-zero': $var-creative-commons-zero, + 'ebay': $var-ebay, + 'keybase': $var-keybase, + 'mastodon': $var-mastodon, + 'r-project': $var-r-project, + 'researchgate': $var-researchgate, + 'teamspeak': $var-teamspeak, + 'first-order-alt': $var-first-order-alt, + 'fulcrum': $var-fulcrum, + 'galactic-republic': $var-galactic-republic, + 'galactic-senate': $var-galactic-senate, + 'jedi-order': $var-jedi-order, + 'mandalorian': $var-mandalorian, + 'old-republic': $var-old-republic, + 'phoenix-squadron': $var-phoenix-squadron, + 'sith': $var-sith, + 'trade-federation': $var-trade-federation, + 'wolf-pack-battalion': $var-wolf-pack-battalion, + 'hornbill': $var-hornbill, + 'mailchimp': $var-mailchimp, + 'megaport': $var-megaport, + 'nimblr': $var-nimblr, + 'rev': $var-rev, + 'shopware': $var-shopware, + 'squarespace': $var-squarespace, + 'themeco': $var-themeco, + 'weebly': $var-weebly, + 'wix': $var-wix, + 'ello': $var-ello, + 'hackerrank': $var-hackerrank, + 'kaggle': $var-kaggle, + 'markdown': $var-markdown, + 'neos': $var-neos, + 'zhihu': $var-zhihu, + 'alipay': $var-alipay, + 'the-red-yeti': $var-the-red-yeti, + 'critical-role': $var-critical-role, + 'd-and-d-beyond': $var-d-and-d-beyond, + 'dev': $var-dev, + 'fantasy-flight-games': $var-fantasy-flight-games, + 'wizards-of-the-coast': $var-wizards-of-the-coast, + 'think-peaks': $var-think-peaks, + 'reacteurope': $var-reacteurope, + 'artstation': $var-artstation, + 'atlassian': $var-atlassian, + 'canadian-maple-leaf': $var-canadian-maple-leaf, + 'centos': $var-centos, + 'confluence': $var-confluence, + 'dhl': $var-dhl, + 'diaspora': $var-diaspora, + 'fedex': $var-fedex, + 'fedora': $var-fedora, + 'figma': $var-figma, + 'intercom': $var-intercom, + 'invision': $var-invision, + 'jira': $var-jira, + 'mendeley': $var-mendeley, + 'raspberry-pi': $var-raspberry-pi, + 'redhat': $var-redhat, + 'sketch': $var-sketch, + 'sourcetree': $var-sourcetree, + 'suse': $var-suse, + 'ubuntu': $var-ubuntu, + 'ups': $var-ups, + 'usps': $var-usps, + 'yarn': $var-yarn, + 'airbnb': $var-airbnb, + 'battle-net': $var-battle-net, + 'bootstrap': $var-bootstrap, + 'buffer': $var-buffer, + 'chromecast': $var-chromecast, + 'evernote': $var-evernote, + 'itch-io': $var-itch-io, + 'salesforce': $var-salesforce, + 'speaker-deck': $var-speaker-deck, + 'symfony': $var-symfony, + 'waze': $var-waze, + 'yammer': $var-yammer, + 'git-alt': $var-git-alt, + 'stackpath': $var-stackpath, + 'cotton-bureau': $var-cotton-bureau, + 'buy-n-large': $var-buy-n-large, + 'mdb': $var-mdb, + 'orcid': $var-orcid, + 'swift': $var-swift, + 'umbraco': $var-umbraco, +); diff --git a/webseite-react-php-jwt/react-app/src/styles/icons/fontawesome-7.1.0/_widths.scss b/webseite-react-php-jwt/react-app/src/styles/icons/fontawesome-7.1.0/_widths.scss new file mode 100644 index 0000000..b2c6729 --- /dev/null +++ b/webseite-react-php-jwt/react-app/src/styles/icons/fontawesome-7.1.0/_widths.scss @@ -0,0 +1,12 @@ +// icon widths +// ------------------------- +@use 'variables' as v; + +.#{v.$css-prefix}-width-auto { + --#{v.$css-prefix}-width: auto; +} + +.#{v.$css-prefix}-fw, +.#{v.$css-prefix}-width-fixed { + --#{v.$css-prefix}-width: #{v.$fw-width}; +} diff --git a/webseite-react-php-jwt/react-app/src/styles/icons/fontawesome-7.1.0/brands.scss b/webseite-react-php-jwt/react-app/src/styles/icons/fontawesome-7.1.0/brands.scss new file mode 100644 index 0000000..fa1b181 --- /dev/null +++ b/webseite-react-php-jwt/react-app/src/styles/icons/fontawesome-7.1.0/brands.scss @@ -0,0 +1,45 @@ +/*! + * Font Awesome Free 7.1.0 by @fontawesome - https://fontawesome.com + * License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) + * Copyright 2025 Fonticons, Inc. + */ +@use "sass:string"; +@use 'variables' as v; +@use 'mixins' as m; + +:root, :host { + --#{v.$css-prefix}-family-brands: 'Font Awesome 7 Brands'; + --#{v.$css-prefix}-font-brands: normal 400 1em/1 var(--#{v.$css-prefix}-family-brands); +} + +@font-face { + font-family: 'Font Awesome 7 Brands'; + font-style: normal; + font-weight: 400; + font-display: v.$font-display; + src: url('#{v.$font-path}/fa-brands-400.woff2'); +} + +.fab, +.#{v.$css-prefix}-brands, +.#{v.$css-prefix}-classic.#{v.$css-prefix}-brands { + --#{v.$css-prefix}-family: var(--#{v.$css-prefix}-family-brands); + --#{v.$css-prefix}-style: 400; +} + +@each $name, $icon in v.$brand-icons { + .#{v.$css-prefix}-#{$name} { + #{v.$icon-property}: string.unquote("\"#{ $icon }\""); + } +} + +// convenience mixin for declaring pseudo-elements by CSS variable, +// including all style-specific font properties and ::before elements. +@mixin icon($var) { + @include m.fa-icon(Font Awesome 7 Brands); + @extend .#{v.$css-prefix}-brands; + + &::before { + content: string.unquote("\"#{ $var }\""); + } +} diff --git a/webseite-react-php-jwt/react-app/src/styles/icons/fontawesome-7.1.0/fontawesome.scss b/webseite-react-php-jwt/react-app/src/styles/icons/fontawesome-7.1.0/fontawesome.scss new file mode 100644 index 0000000..e37bad8 --- /dev/null +++ b/webseite-react-php-jwt/react-app/src/styles/icons/fontawesome-7.1.0/fontawesome.scss @@ -0,0 +1,20 @@ +/*! + * Font Awesome Free 7.1.0 by @fontawesome - https://fontawesome.com + * License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) + * Copyright 2025 Fonticons, Inc. + */ +// Font Awesome core compile (Web Fonts-based) +// ------------------------- + + + +@use 'core'; +@use 'sizing'; +@use 'widths'; +@use 'list'; +@use 'bordered'; +@use 'pulled'; +@use 'animated'; +@use 'rotated-flipped'; +@use 'stacked'; +@use 'icons'; diff --git a/webseite-react-php-jwt/react-app/src/styles/icons/fontawesome-7.1.0/regular.scss b/webseite-react-php-jwt/react-app/src/styles/icons/fontawesome-7.1.0/regular.scss new file mode 100644 index 0000000..7acecc9 --- /dev/null +++ b/webseite-react-php-jwt/react-app/src/styles/icons/fontawesome-7.1.0/regular.scss @@ -0,0 +1,51 @@ +/*! + * Font Awesome Free 7.1.0 by @fontawesome - https://fontawesome.com + * License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) + * Copyright 2025 Fonticons, Inc. + */ +@use "sass:string"; +@use 'variables' as v; +@use 'mixins' as m; + +:root, :host { + --#{v.$css-prefix}-family-classic: '#{ v.$family }'; + --#{v.$css-prefix}-font-regular: normal 400 1em/1 var(--#{v.$css-prefix}-family-classic); + + /* deprecated: this older custom property will be removed next major release */ + --#{v.$css-prefix}-style-family-classic: var(--#{v.$css-prefix}-family-classic); +} + + +@font-face { + font-family: 'Font Awesome 7 Free'; + font-style: normal; + font-weight: 400; + font-display: v.$font-display; + src: url('#{v.$font-path}/fa-regular-400.woff2'); +} + + +.far { + --#{v.$css-prefix}-family: var(--#{v.$css-prefix}-family-classic); + --#{v.$css-prefix}-style: 400; +} + +.#{v.$css-prefix}-classic { + --#{v.$css-prefix}-family: var(--#{v.$css-prefix}-family-classic); +} + +.#{v.$css-prefix}-regular { + --#{v.$css-prefix}-style: 400; +} + +// convenience mixin for declaring pseudo-elements by CSS variable, +// including all style-specific font properties and ::before elements. +@mixin icon($var) { + @include m.fa-icon(Font Awesome 7 Free); + @extend .#{v.$css-prefix}-regular; + @extend .#{v.$css-prefix}-classic; + + &::before { + content: string.unquote("\"#{ $var }\""); + } +} diff --git a/webseite-react-php-jwt/react-app/src/styles/icons/fontawesome-7.1.0/solid.scss b/webseite-react-php-jwt/react-app/src/styles/icons/fontawesome-7.1.0/solid.scss new file mode 100644 index 0000000..deb9a1a --- /dev/null +++ b/webseite-react-php-jwt/react-app/src/styles/icons/fontawesome-7.1.0/solid.scss @@ -0,0 +1,51 @@ +/*! + * Font Awesome Free 7.1.0 by @fontawesome - https://fontawesome.com + * License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) + * Copyright 2025 Fonticons, Inc. + */ +@use "sass:string"; +@use 'variables' as v; +@use 'mixins' as m; + +:root, :host { + --#{v.$css-prefix}-family-classic: '#{ v.$family }'; + --#{v.$css-prefix}-font-solid: normal 900 1em/1 var(--#{v.$css-prefix}-family-classic); + + /* deprecated: this older custom property will be removed next major release */ + --#{v.$css-prefix}-style-family-classic: var(--#{v.$css-prefix}-family-classic); +} + + +@font-face { + font-family: 'Font Awesome 7 Free'; + font-style: normal; + font-weight: 900; + font-display: v.$font-display; + src: url('#{v.$font-path}/fa-solid-900.woff2'); +} + + +.fas { + --#{v.$css-prefix}-family: var(--#{v.$css-prefix}-family-classic); + --#{v.$css-prefix}-style: 900; +} + +.#{v.$css-prefix}-classic { + --#{v.$css-prefix}-family: var(--#{v.$css-prefix}-family-classic); +} + +.#{v.$css-prefix}-solid { + --#{v.$css-prefix}-style: 900; +} + +// convenience mixin for declaring pseudo-elements by CSS variable, +// including all style-specific font properties and ::before elements. +@mixin icon($var) { + @include m.fa-icon(Font Awesome 7 Free); + @extend .#{v.$css-prefix}-solid; + @extend .#{v.$css-prefix}-classic; + + &::before { + content: string.unquote("\"#{ $var }\""); + } +} diff --git a/webseite-react-php-jwt/react-app/src/styles/icons/fontawesome-7.1.0/v4-shims.scss b/webseite-react-php-jwt/react-app/src/styles/icons/fontawesome-7.1.0/v4-shims.scss new file mode 100644 index 0000000..e32bb30 --- /dev/null +++ b/webseite-react-php-jwt/react-app/src/styles/icons/fontawesome-7.1.0/v4-shims.scss @@ -0,0 +1,11 @@ +/*! + * Font Awesome Free 7.1.0 by @fontawesome - https://fontawesome.com + * License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) + * Copyright 2025 Fonticons, Inc. + */ +// V4 shims compile (Web Fonts-based) +// ------------------------- + +@use 'functions'; +@use 'variables' as v; +@use 'shims'; diff --git a/webseite-react-php-jwt/react-app/src/styles/libraries/_index.scss b/webseite-react-php-jwt/react-app/src/styles/libraries/_index.scss new file mode 100644 index 0000000..cdc37e6 --- /dev/null +++ b/webseite-react-php-jwt/react-app/src/styles/libraries/_index.scss @@ -0,0 +1,2 @@ +// @forward 'bootstrap-5.3.8/bootstrap-grid'; +@forward 'bootstrap-5.3.8/bootstrap'; diff --git a/webseite-react-php-jwt/react-app/src/styles/libraries/bootstrap-5.3.8/_accordion.scss b/webseite-react-php-jwt/react-app/src/styles/libraries/bootstrap-5.3.8/_accordion.scss new file mode 100644 index 0000000..e9f267f --- /dev/null +++ b/webseite-react-php-jwt/react-app/src/styles/libraries/bootstrap-5.3.8/_accordion.scss @@ -0,0 +1,153 @@ +// +// Base styles +// + +.accordion { + // scss-docs-start accordion-css-vars + --#{$prefix}accordion-color: #{$accordion-color}; + --#{$prefix}accordion-bg: #{$accordion-bg}; + --#{$prefix}accordion-transition: #{$accordion-transition}; + --#{$prefix}accordion-border-color: #{$accordion-border-color}; + --#{$prefix}accordion-border-width: #{$accordion-border-width}; + --#{$prefix}accordion-border-radius: #{$accordion-border-radius}; + --#{$prefix}accordion-inner-border-radius: #{$accordion-inner-border-radius}; + --#{$prefix}accordion-btn-padding-x: #{$accordion-button-padding-x}; + --#{$prefix}accordion-btn-padding-y: #{$accordion-button-padding-y}; + --#{$prefix}accordion-btn-color: #{$accordion-button-color}; + --#{$prefix}accordion-btn-bg: #{$accordion-button-bg}; + --#{$prefix}accordion-btn-icon: #{escape-svg($accordion-button-icon)}; + --#{$prefix}accordion-btn-icon-width: #{$accordion-icon-width}; + --#{$prefix}accordion-btn-icon-transform: #{$accordion-icon-transform}; + --#{$prefix}accordion-btn-icon-transition: #{$accordion-icon-transition}; + --#{$prefix}accordion-btn-active-icon: #{escape-svg($accordion-button-active-icon)}; + --#{$prefix}accordion-btn-focus-box-shadow: #{$accordion-button-focus-box-shadow}; + --#{$prefix}accordion-body-padding-x: #{$accordion-body-padding-x}; + --#{$prefix}accordion-body-padding-y: #{$accordion-body-padding-y}; + --#{$prefix}accordion-active-color: #{$accordion-button-active-color}; + --#{$prefix}accordion-active-bg: #{$accordion-button-active-bg}; + // scss-docs-end accordion-css-vars +} + +.accordion-button { + position: relative; + display: flex; + align-items: center; + width: 100%; + padding: var(--#{$prefix}accordion-btn-padding-y) var(--#{$prefix}accordion-btn-padding-x); + @include font-size($font-size-base); + color: var(--#{$prefix}accordion-btn-color); + text-align: left; // Reset button style + background-color: var(--#{$prefix}accordion-btn-bg); + border: 0; + @include border-radius(0); + overflow-anchor: none; + @include transition(var(--#{$prefix}accordion-transition)); + + &:not(.collapsed) { + color: var(--#{$prefix}accordion-active-color); + background-color: var(--#{$prefix}accordion-active-bg); + box-shadow: inset 0 calc(-1 * var(--#{$prefix}accordion-border-width)) 0 var(--#{$prefix}accordion-border-color); // stylelint-disable-line function-disallowed-list + + &::after { + background-image: var(--#{$prefix}accordion-btn-active-icon); + transform: var(--#{$prefix}accordion-btn-icon-transform); + } + } + + // Accordion icon + &::after { + flex-shrink: 0; + width: var(--#{$prefix}accordion-btn-icon-width); + height: var(--#{$prefix}accordion-btn-icon-width); + margin-left: auto; + content: ""; + background-image: var(--#{$prefix}accordion-btn-icon); + background-repeat: no-repeat; + background-size: var(--#{$prefix}accordion-btn-icon-width); + @include transition(var(--#{$prefix}accordion-btn-icon-transition)); + } + + &:hover { + z-index: 2; + } + + &:focus { + z-index: 3; + outline: 0; + box-shadow: var(--#{$prefix}accordion-btn-focus-box-shadow); + } +} + +.accordion-header { + margin-bottom: 0; +} + +.accordion-item { + color: var(--#{$prefix}accordion-color); + background-color: var(--#{$prefix}accordion-bg); + border: var(--#{$prefix}accordion-border-width) solid var(--#{$prefix}accordion-border-color); + + &:first-of-type { + @include border-top-radius(var(--#{$prefix}accordion-border-radius)); + + > .accordion-header .accordion-button { + @include border-top-radius(var(--#{$prefix}accordion-inner-border-radius)); + } + } + + &:not(:first-of-type) { + border-top: 0; + } + + // Only set a border-radius on the last item if the accordion is collapsed + &:last-of-type { + @include border-bottom-radius(var(--#{$prefix}accordion-border-radius)); + + > .accordion-header .accordion-button { + &.collapsed { + @include border-bottom-radius(var(--#{$prefix}accordion-inner-border-radius)); + } + } + + > .accordion-collapse { + @include border-bottom-radius(var(--#{$prefix}accordion-border-radius)); + } + } +} + +.accordion-body { + padding: var(--#{$prefix}accordion-body-padding-y) var(--#{$prefix}accordion-body-padding-x); +} + + +// Flush accordion items +// +// Remove borders and border-radius to keep accordion items edge-to-edge. + +.accordion-flush { + > .accordion-item { + border-right: 0; + border-left: 0; + @include border-radius(0); + + &:first-child { border-top: 0; } + &:last-child { border-bottom: 0; } + + // stylelint-disable selector-max-class + > .accordion-collapse, + > .accordion-header .accordion-button, + > .accordion-header .accordion-button.collapsed { + @include border-radius(0); + } + // stylelint-enable selector-max-class + } +} + +@if $enable-dark-mode { + @include color-mode(dark) { + .accordion-button::after { + --#{$prefix}accordion-btn-icon: #{escape-svg($accordion-button-icon-dark)}; + --#{$prefix}accordion-btn-active-icon: #{escape-svg($accordion-button-active-icon-dark)}; + } + } +} diff --git a/webseite-react-php-jwt/react-app/src/styles/libraries/bootstrap-5.3.8/_alert.scss b/webseite-react-php-jwt/react-app/src/styles/libraries/bootstrap-5.3.8/_alert.scss new file mode 100644 index 0000000..b8cff9b --- /dev/null +++ b/webseite-react-php-jwt/react-app/src/styles/libraries/bootstrap-5.3.8/_alert.scss @@ -0,0 +1,68 @@ +// +// Base styles +// + +.alert { + // scss-docs-start alert-css-vars + --#{$prefix}alert-bg: transparent; + --#{$prefix}alert-padding-x: #{$alert-padding-x}; + --#{$prefix}alert-padding-y: #{$alert-padding-y}; + --#{$prefix}alert-margin-bottom: #{$alert-margin-bottom}; + --#{$prefix}alert-color: inherit; + --#{$prefix}alert-border-color: transparent; + --#{$prefix}alert-border: #{$alert-border-width} solid var(--#{$prefix}alert-border-color); + --#{$prefix}alert-border-radius: #{$alert-border-radius}; + --#{$prefix}alert-link-color: inherit; + // scss-docs-end alert-css-vars + + position: relative; + padding: var(--#{$prefix}alert-padding-y) var(--#{$prefix}alert-padding-x); + margin-bottom: var(--#{$prefix}alert-margin-bottom); + color: var(--#{$prefix}alert-color); + background-color: var(--#{$prefix}alert-bg); + border: var(--#{$prefix}alert-border); + @include border-radius(var(--#{$prefix}alert-border-radius)); +} + +// Headings for larger alerts +.alert-heading { + // Specified to prevent conflicts of changing $headings-color + color: inherit; +} + +// Provide class for links that match alerts +.alert-link { + font-weight: $alert-link-font-weight; + color: var(--#{$prefix}alert-link-color); +} + + +// Dismissible alerts +// +// Expand the right padding and account for the close button's positioning. + +.alert-dismissible { + padding-right: $alert-dismissible-padding-r; + + // Adjust close link position + .btn-close { + position: absolute; + top: 0; + right: 0; + z-index: $stretched-link-z-index + 1; + padding: $alert-padding-y * 1.25 $alert-padding-x; + } +} + + +// scss-docs-start alert-modifiers +// Generate contextual modifier classes for colorizing the alert +@each $state in map-keys($theme-colors) { + .alert-#{$state} { + --#{$prefix}alert-color: var(--#{$prefix}#{$state}-text-emphasis); + --#{$prefix}alert-bg: var(--#{$prefix}#{$state}-bg-subtle); + --#{$prefix}alert-border-color: var(--#{$prefix}#{$state}-border-subtle); + --#{$prefix}alert-link-color: var(--#{$prefix}#{$state}-text-emphasis); + } +} +// scss-docs-end alert-modifiers diff --git a/webseite-react-php-jwt/react-app/src/styles/libraries/bootstrap-5.3.8/_badge.scss b/webseite-react-php-jwt/react-app/src/styles/libraries/bootstrap-5.3.8/_badge.scss new file mode 100644 index 0000000..cc3d269 --- /dev/null +++ b/webseite-react-php-jwt/react-app/src/styles/libraries/bootstrap-5.3.8/_badge.scss @@ -0,0 +1,38 @@ +// Base class +// +// Requires one of the contextual, color modifier classes for `color` and +// `background-color`. + +.badge { + // scss-docs-start badge-css-vars + --#{$prefix}badge-padding-x: #{$badge-padding-x}; + --#{$prefix}badge-padding-y: #{$badge-padding-y}; + @include rfs($badge-font-size, --#{$prefix}badge-font-size); + --#{$prefix}badge-font-weight: #{$badge-font-weight}; + --#{$prefix}badge-color: #{$badge-color}; + --#{$prefix}badge-border-radius: #{$badge-border-radius}; + // scss-docs-end badge-css-vars + + display: inline-block; + padding: var(--#{$prefix}badge-padding-y) var(--#{$prefix}badge-padding-x); + @include font-size(var(--#{$prefix}badge-font-size)); + font-weight: var(--#{$prefix}badge-font-weight); + line-height: 1; + color: var(--#{$prefix}badge-color); + text-align: center; + white-space: nowrap; + vertical-align: baseline; + @include border-radius(var(--#{$prefix}badge-border-radius)); + @include gradient-bg(); + + // Empty badges collapse automatically + &:empty { + display: none; + } +} + +// Quick fix for badges in buttons +.btn .badge { + position: relative; + top: -1px; +} diff --git a/webseite-react-php-jwt/react-app/src/styles/libraries/bootstrap-5.3.8/_breadcrumb.scss b/webseite-react-php-jwt/react-app/src/styles/libraries/bootstrap-5.3.8/_breadcrumb.scss new file mode 100644 index 0000000..b8252ff --- /dev/null +++ b/webseite-react-php-jwt/react-app/src/styles/libraries/bootstrap-5.3.8/_breadcrumb.scss @@ -0,0 +1,40 @@ +.breadcrumb { + // scss-docs-start breadcrumb-css-vars + --#{$prefix}breadcrumb-padding-x: #{$breadcrumb-padding-x}; + --#{$prefix}breadcrumb-padding-y: #{$breadcrumb-padding-y}; + --#{$prefix}breadcrumb-margin-bottom: #{$breadcrumb-margin-bottom}; + @include rfs($breadcrumb-font-size, --#{$prefix}breadcrumb-font-size); + --#{$prefix}breadcrumb-bg: #{$breadcrumb-bg}; + --#{$prefix}breadcrumb-border-radius: #{$breadcrumb-border-radius}; + --#{$prefix}breadcrumb-divider-color: #{$breadcrumb-divider-color}; + --#{$prefix}breadcrumb-item-padding-x: #{$breadcrumb-item-padding-x}; + --#{$prefix}breadcrumb-item-active-color: #{$breadcrumb-active-color}; + // scss-docs-end breadcrumb-css-vars + + display: flex; + flex-wrap: wrap; + padding: var(--#{$prefix}breadcrumb-padding-y) var(--#{$prefix}breadcrumb-padding-x); + margin-bottom: var(--#{$prefix}breadcrumb-margin-bottom); + @include font-size(var(--#{$prefix}breadcrumb-font-size)); + list-style: none; + background-color: var(--#{$prefix}breadcrumb-bg); + @include border-radius(var(--#{$prefix}breadcrumb-border-radius)); +} + +.breadcrumb-item { + // The separator between breadcrumbs (by default, a forward-slash: "/") + + .breadcrumb-item { + padding-left: var(--#{$prefix}breadcrumb-item-padding-x); + + &::before { + float: left; // Suppress inline spacings and underlining of the separator + padding-right: var(--#{$prefix}breadcrumb-item-padding-x); + color: var(--#{$prefix}breadcrumb-divider-color); + content: var(--#{$prefix}breadcrumb-divider, escape-svg($breadcrumb-divider)) #{"/* rtl:"} var(--#{$prefix}breadcrumb-divider, escape-svg($breadcrumb-divider-flipped)) #{"*/"}; + } + } + + &.active { + color: var(--#{$prefix}breadcrumb-item-active-color); + } +} diff --git a/webseite-react-php-jwt/react-app/src/styles/libraries/bootstrap-5.3.8/_button-group.scss b/webseite-react-php-jwt/react-app/src/styles/libraries/bootstrap-5.3.8/_button-group.scss new file mode 100644 index 0000000..78e1252 --- /dev/null +++ b/webseite-react-php-jwt/react-app/src/styles/libraries/bootstrap-5.3.8/_button-group.scss @@ -0,0 +1,147 @@ +// Make the div behave like a button +.btn-group, +.btn-group-vertical { + position: relative; + display: inline-flex; + vertical-align: middle; // match .btn alignment given font-size hack above + + > .btn { + position: relative; + flex: 1 1 auto; + } + + // Bring the hover, focused, and "active" buttons to the front to overlay + // the borders properly + > .btn-check:checked + .btn, + > .btn-check:focus + .btn, + > .btn:hover, + > .btn:focus, + > .btn:active, + > .btn.active { + z-index: 1; + } +} + +// Optional: Group multiple button groups together for a toolbar +.btn-toolbar { + display: flex; + flex-wrap: wrap; + justify-content: flex-start; + + .input-group { + width: auto; + } +} + +.btn-group { + @include border-radius($btn-border-radius); + + // Prevent double borders when buttons are next to each other + > :not(.btn-check:first-child) + .btn, + > .btn-group:not(:first-child) { + margin-left: calc(-1 * #{$btn-border-width}); // stylelint-disable-line function-disallowed-list + } + + // Reset rounded corners + > .btn:not(:last-child):not(.dropdown-toggle), + > .btn.dropdown-toggle-split:first-child, + > .btn-group:not(:last-child) > .btn { + @include border-end-radius(0); + } + + // The left radius should be 0 if the button is: + // - the "third or more" child + // - the second child and the previous element isn't `.btn-check` (making it the first child visually) + // - part of a btn-group which isn't the first child + > .btn:nth-child(n + 3), + > :not(.btn-check) + .btn, + > .btn-group:not(:first-child) > .btn { + @include border-start-radius(0); + } +} + +// Sizing +// +// Remix the default button sizing classes into new ones for easier manipulation. + +.btn-group-sm > .btn { @extend .btn-sm; } +.btn-group-lg > .btn { @extend .btn-lg; } + + +// +// Split button dropdowns +// + +.dropdown-toggle-split { + padding-right: $btn-padding-x * .75; + padding-left: $btn-padding-x * .75; + + &::after, + .dropup &::after, + .dropend &::after { + margin-left: 0; + } + + .dropstart &::before { + margin-right: 0; + } +} + +.btn-sm + .dropdown-toggle-split { + padding-right: $btn-padding-x-sm * .75; + padding-left: $btn-padding-x-sm * .75; +} + +.btn-lg + .dropdown-toggle-split { + padding-right: $btn-padding-x-lg * .75; + padding-left: $btn-padding-x-lg * .75; +} + + +// The clickable button for toggling the menu +// Set the same inset shadow as the :active state +.btn-group.show .dropdown-toggle { + @include box-shadow($btn-active-box-shadow); + + // Show no shadow for `.btn-link` since it has no other button styles. + &.btn-link { + @include box-shadow(none); + } +} + + +// +// Vertical button groups +// + +.btn-group-vertical { + flex-direction: column; + align-items: flex-start; + justify-content: center; + + > .btn, + > .btn-group { + width: 100%; + } + + > .btn:not(:first-child), + > .btn-group:not(:first-child) { + margin-top: calc(-1 * #{$btn-border-width}); // stylelint-disable-line function-disallowed-list + } + + // Reset rounded corners + > .btn:not(:last-child):not(.dropdown-toggle), + > .btn-group:not(:last-child) > .btn { + @include border-bottom-radius(0); + } + + // The top radius should be 0 if the button is: + // - the "third or more" child + // - the second child and the previous element isn't `.btn-check` (making it the first child visually) + // - part of a btn-group which isn't the first child + > .btn:nth-child(n + 3), + > :not(.btn-check) + .btn, + > .btn-group:not(:first-child) > .btn { + @include border-top-radius(0); + } +} diff --git a/webseite-react-php-jwt/react-app/src/styles/libraries/bootstrap-5.3.8/_buttons.scss b/webseite-react-php-jwt/react-app/src/styles/libraries/bootstrap-5.3.8/_buttons.scss new file mode 100644 index 0000000..caa4518 --- /dev/null +++ b/webseite-react-php-jwt/react-app/src/styles/libraries/bootstrap-5.3.8/_buttons.scss @@ -0,0 +1,216 @@ +// +// Base styles +// + +.btn { + // scss-docs-start btn-css-vars + --#{$prefix}btn-padding-x: #{$btn-padding-x}; + --#{$prefix}btn-padding-y: #{$btn-padding-y}; + --#{$prefix}btn-font-family: #{$btn-font-family}; + @include rfs($btn-font-size, --#{$prefix}btn-font-size); + --#{$prefix}btn-font-weight: #{$btn-font-weight}; + --#{$prefix}btn-line-height: #{$btn-line-height}; + --#{$prefix}btn-color: #{$btn-color}; + --#{$prefix}btn-bg: transparent; + --#{$prefix}btn-border-width: #{$btn-border-width}; + --#{$prefix}btn-border-color: transparent; + --#{$prefix}btn-border-radius: #{$btn-border-radius}; + --#{$prefix}btn-hover-border-color: transparent; + --#{$prefix}btn-box-shadow: #{$btn-box-shadow}; + --#{$prefix}btn-disabled-opacity: #{$btn-disabled-opacity}; + --#{$prefix}btn-focus-box-shadow: 0 0 0 #{$btn-focus-width} rgba(var(--#{$prefix}btn-focus-shadow-rgb), .5); + // scss-docs-end btn-css-vars + + display: inline-block; + padding: var(--#{$prefix}btn-padding-y) var(--#{$prefix}btn-padding-x); + font-family: var(--#{$prefix}btn-font-family); + @include font-size(var(--#{$prefix}btn-font-size)); + font-weight: var(--#{$prefix}btn-font-weight); + line-height: var(--#{$prefix}btn-line-height); + color: var(--#{$prefix}btn-color); + text-align: center; + text-decoration: if($link-decoration == none, null, none); + white-space: $btn-white-space; + vertical-align: middle; + cursor: if($enable-button-pointers, pointer, null); + user-select: none; + border: var(--#{$prefix}btn-border-width) solid var(--#{$prefix}btn-border-color); + @include border-radius(var(--#{$prefix}btn-border-radius)); + @include gradient-bg(var(--#{$prefix}btn-bg)); + @include box-shadow(var(--#{$prefix}btn-box-shadow)); + @include transition($btn-transition); + + &:hover { + color: var(--#{$prefix}btn-hover-color); + text-decoration: if($link-hover-decoration == underline, none, null); + background-color: var(--#{$prefix}btn-hover-bg); + border-color: var(--#{$prefix}btn-hover-border-color); + } + + .btn-check + &:hover { + // override for the checkbox/radio buttons + color: var(--#{$prefix}btn-color); + background-color: var(--#{$prefix}btn-bg); + border-color: var(--#{$prefix}btn-border-color); + } + + &:focus-visible { + color: var(--#{$prefix}btn-hover-color); + @include gradient-bg(var(--#{$prefix}btn-hover-bg)); + border-color: var(--#{$prefix}btn-hover-border-color); + outline: 0; + // Avoid using mixin so we can pass custom focus shadow properly + @if $enable-shadows { + box-shadow: var(--#{$prefix}btn-box-shadow), var(--#{$prefix}btn-focus-box-shadow); + } @else { + box-shadow: var(--#{$prefix}btn-focus-box-shadow); + } + } + + .btn-check:focus-visible + & { + border-color: var(--#{$prefix}btn-hover-border-color); + outline: 0; + // Avoid using mixin so we can pass custom focus shadow properly + @if $enable-shadows { + box-shadow: var(--#{$prefix}btn-box-shadow), var(--#{$prefix}btn-focus-box-shadow); + } @else { + box-shadow: var(--#{$prefix}btn-focus-box-shadow); + } + } + + .btn-check:checked + &, + :not(.btn-check) + &:active, + &:first-child:active, + &.active, + &.show { + color: var(--#{$prefix}btn-active-color); + background-color: var(--#{$prefix}btn-active-bg); + // Remove CSS gradients if they're enabled + background-image: if($enable-gradients, none, null); + border-color: var(--#{$prefix}btn-active-border-color); + @include box-shadow(var(--#{$prefix}btn-active-shadow)); + + &:focus-visible { + // Avoid using mixin so we can pass custom focus shadow properly + @if $enable-shadows { + box-shadow: var(--#{$prefix}btn-active-shadow), var(--#{$prefix}btn-focus-box-shadow); + } @else { + box-shadow: var(--#{$prefix}btn-focus-box-shadow); + } + } + } + + .btn-check:checked:focus-visible + & { + // Avoid using mixin so we can pass custom focus shadow properly + @if $enable-shadows { + box-shadow: var(--#{$prefix}btn-active-shadow), var(--#{$prefix}btn-focus-box-shadow); + } @else { + box-shadow: var(--#{$prefix}btn-focus-box-shadow); + } + } + + &:disabled, + &.disabled, + fieldset:disabled & { + color: var(--#{$prefix}btn-disabled-color); + pointer-events: none; + background-color: var(--#{$prefix}btn-disabled-bg); + background-image: if($enable-gradients, none, null); + border-color: var(--#{$prefix}btn-disabled-border-color); + opacity: var(--#{$prefix}btn-disabled-opacity); + @include box-shadow(none); + } +} + + +// +// Alternate buttons +// + +// scss-docs-start btn-variant-loops +@each $color, $value in $theme-colors { + .btn-#{$color} { + @if $color == "light" { + @include button-variant( + $value, + $value, + $hover-background: shade-color($value, $btn-hover-bg-shade-amount), + $hover-border: shade-color($value, $btn-hover-border-shade-amount), + $active-background: shade-color($value, $btn-active-bg-shade-amount), + $active-border: shade-color($value, $btn-active-border-shade-amount) + ); + } @else if $color == "dark" { + @include button-variant( + $value, + $value, + $hover-background: tint-color($value, $btn-hover-bg-tint-amount), + $hover-border: tint-color($value, $btn-hover-border-tint-amount), + $active-background: tint-color($value, $btn-active-bg-tint-amount), + $active-border: tint-color($value, $btn-active-border-tint-amount) + ); + } @else { + @include button-variant($value, $value); + } + } +} + +@each $color, $value in $theme-colors { + .btn-outline-#{$color} { + @include button-outline-variant($value); + } +} +// scss-docs-end btn-variant-loops + + +// +// Link buttons +// + +// Make a button look and behave like a link +.btn-link { + --#{$prefix}btn-font-weight: #{$font-weight-normal}; + --#{$prefix}btn-color: #{$btn-link-color}; + --#{$prefix}btn-bg: transparent; + --#{$prefix}btn-border-color: transparent; + --#{$prefix}btn-hover-color: #{$btn-link-hover-color}; + --#{$prefix}btn-hover-border-color: transparent; + --#{$prefix}btn-active-color: #{$btn-link-hover-color}; + --#{$prefix}btn-active-border-color: transparent; + --#{$prefix}btn-disabled-color: #{$btn-link-disabled-color}; + --#{$prefix}btn-disabled-border-color: transparent; + --#{$prefix}btn-box-shadow: 0 0 0 #000; // Can't use `none` as keyword negates all values when used with multiple shadows + --#{$prefix}btn-focus-shadow-rgb: #{$btn-link-focus-shadow-rgb}; + + text-decoration: $link-decoration; + @if $enable-gradients { + background-image: none; + } + + &:hover, + &:focus-visible { + text-decoration: $link-hover-decoration; + } + + &:focus-visible { + color: var(--#{$prefix}btn-color); + } + + &:hover { + color: var(--#{$prefix}btn-hover-color); + } + + // No need for an active state here +} + + +// +// Button Sizes +// + +.btn-lg { + @include button-size($btn-padding-y-lg, $btn-padding-x-lg, $btn-font-size-lg, $btn-border-radius-lg); +} + +.btn-sm { + @include button-size($btn-padding-y-sm, $btn-padding-x-sm, $btn-font-size-sm, $btn-border-radius-sm); +} diff --git a/webseite-react-php-jwt/react-app/src/styles/libraries/bootstrap-5.3.8/_card.scss b/webseite-react-php-jwt/react-app/src/styles/libraries/bootstrap-5.3.8/_card.scss new file mode 100644 index 0000000..dcebe6a --- /dev/null +++ b/webseite-react-php-jwt/react-app/src/styles/libraries/bootstrap-5.3.8/_card.scss @@ -0,0 +1,238 @@ +// +// Base styles +// + +.card { + // scss-docs-start card-css-vars + --#{$prefix}card-spacer-y: #{$card-spacer-y}; + --#{$prefix}card-spacer-x: #{$card-spacer-x}; + --#{$prefix}card-title-spacer-y: #{$card-title-spacer-y}; + --#{$prefix}card-title-color: #{$card-title-color}; + --#{$prefix}card-subtitle-color: #{$card-subtitle-color}; + --#{$prefix}card-border-width: #{$card-border-width}; + --#{$prefix}card-border-color: #{$card-border-color}; + --#{$prefix}card-border-radius: #{$card-border-radius}; + --#{$prefix}card-box-shadow: #{$card-box-shadow}; + --#{$prefix}card-inner-border-radius: #{$card-inner-border-radius}; + --#{$prefix}card-cap-padding-y: #{$card-cap-padding-y}; + --#{$prefix}card-cap-padding-x: #{$card-cap-padding-x}; + --#{$prefix}card-cap-bg: #{$card-cap-bg}; + --#{$prefix}card-cap-color: #{$card-cap-color}; + --#{$prefix}card-height: #{$card-height}; + --#{$prefix}card-color: #{$card-color}; + --#{$prefix}card-bg: #{$card-bg}; + --#{$prefix}card-img-overlay-padding: #{$card-img-overlay-padding}; + --#{$prefix}card-group-margin: #{$card-group-margin}; + // scss-docs-end card-css-vars + + position: relative; + display: flex; + flex-direction: column; + min-width: 0; // See https://github.com/twbs/bootstrap/pull/22740#issuecomment-305868106 + height: var(--#{$prefix}card-height); + color: var(--#{$prefix}body-color); + word-wrap: break-word; + background-color: var(--#{$prefix}card-bg); + background-clip: border-box; + border: var(--#{$prefix}card-border-width) solid var(--#{$prefix}card-border-color); + @include border-radius(var(--#{$prefix}card-border-radius)); + @include box-shadow(var(--#{$prefix}card-box-shadow)); + + > hr { + margin-right: 0; + margin-left: 0; + } + + > .list-group { + border-top: inherit; + border-bottom: inherit; + + &:first-child { + border-top-width: 0; + @include border-top-radius(var(--#{$prefix}card-inner-border-radius)); + } + + &:last-child { + border-bottom-width: 0; + @include border-bottom-radius(var(--#{$prefix}card-inner-border-radius)); + } + } + + // Due to specificity of the above selector (`.card > .list-group`), we must + // use a child selector here to prevent double borders. + > .card-header + .list-group, + > .list-group + .card-footer { + border-top: 0; + } +} + +.card-body { + // Enable `flex-grow: 1` for decks and groups so that card blocks take up + // as much space as possible, ensuring footers are aligned to the bottom. + flex: 1 1 auto; + padding: var(--#{$prefix}card-spacer-y) var(--#{$prefix}card-spacer-x); + color: var(--#{$prefix}card-color); +} + +.card-title { + margin-bottom: var(--#{$prefix}card-title-spacer-y); + color: var(--#{$prefix}card-title-color); +} + +.card-subtitle { + margin-top: calc(-.5 * var(--#{$prefix}card-title-spacer-y)); // stylelint-disable-line function-disallowed-list + margin-bottom: 0; + color: var(--#{$prefix}card-subtitle-color); +} + +.card-text:last-child { + margin-bottom: 0; +} + +.card-link { + &:hover { + text-decoration: if($link-hover-decoration == underline, none, null); + } + + + .card-link { + margin-left: var(--#{$prefix}card-spacer-x); + } +} + +// +// Optional textual caps +// + +.card-header { + padding: var(--#{$prefix}card-cap-padding-y) var(--#{$prefix}card-cap-padding-x); + margin-bottom: 0; // Removes the default margin-bottom of + color: var(--#{$prefix}card-cap-color); + background-color: var(--#{$prefix}card-cap-bg); + border-bottom: var(--#{$prefix}card-border-width) solid var(--#{$prefix}card-border-color); + + &:first-child { + @include border-radius(var(--#{$prefix}card-inner-border-radius) var(--#{$prefix}card-inner-border-radius) 0 0); + } +} + +.card-footer { + padding: var(--#{$prefix}card-cap-padding-y) var(--#{$prefix}card-cap-padding-x); + color: var(--#{$prefix}card-cap-color); + background-color: var(--#{$prefix}card-cap-bg); + border-top: var(--#{$prefix}card-border-width) solid var(--#{$prefix}card-border-color); + + &:last-child { + @include border-radius(0 0 var(--#{$prefix}card-inner-border-radius) var(--#{$prefix}card-inner-border-radius)); + } +} + + +// +// Header navs +// + +.card-header-tabs { + margin-right: calc(-.5 * var(--#{$prefix}card-cap-padding-x)); // stylelint-disable-line function-disallowed-list + margin-bottom: calc(-1 * var(--#{$prefix}card-cap-padding-y)); // stylelint-disable-line function-disallowed-list + margin-left: calc(-.5 * var(--#{$prefix}card-cap-padding-x)); // stylelint-disable-line function-disallowed-list + border-bottom: 0; + + .nav-link.active { + background-color: var(--#{$prefix}card-bg); + border-bottom-color: var(--#{$prefix}card-bg); + } +} + +.card-header-pills { + margin-right: calc(-.5 * var(--#{$prefix}card-cap-padding-x)); // stylelint-disable-line function-disallowed-list + margin-left: calc(-.5 * var(--#{$prefix}card-cap-padding-x)); // stylelint-disable-line function-disallowed-list +} + +// Card image +.card-img-overlay { + position: absolute; + top: 0; + right: 0; + bottom: 0; + left: 0; + padding: var(--#{$prefix}card-img-overlay-padding); + @include border-radius(var(--#{$prefix}card-inner-border-radius)); +} + +.card-img, +.card-img-top, +.card-img-bottom { + width: 100%; // Required because we use flexbox and this inherently applies align-self: stretch +} + +.card-img, +.card-img-top { + @include border-top-radius(var(--#{$prefix}card-inner-border-radius)); +} + +.card-img, +.card-img-bottom { + @include border-bottom-radius(var(--#{$prefix}card-inner-border-radius)); +} + + +// +// Card groups +// + +.card-group { + // The child selector allows nested `.card` within `.card-group` + // to display properly. + > .card { + margin-bottom: var(--#{$prefix}card-group-margin); + } + + @include media-breakpoint-up(sm) { + display: flex; + flex-flow: row wrap; + // The child selector allows nested `.card` within `.card-group` + // to display properly. + > .card { + flex: 1 0 0; + margin-bottom: 0; + + + .card { + margin-left: 0; + border-left: 0; + } + + // Handle rounded corners + @if $enable-rounded { + &:not(:last-child) { + @include border-end-radius(0); + + > .card-img-top, + > .card-header { + // stylelint-disable-next-line property-disallowed-list + border-top-right-radius: 0; + } + > .card-img-bottom, + > .card-footer { + // stylelint-disable-next-line property-disallowed-list + border-bottom-right-radius: 0; + } + } + + &:not(:first-child) { + @include border-start-radius(0); + + > .card-img-top, + > .card-header { + // stylelint-disable-next-line property-disallowed-list + border-top-left-radius: 0; + } + > .card-img-bottom, + > .card-footer { + // stylelint-disable-next-line property-disallowed-list + border-bottom-left-radius: 0; + } + } + } + } + } +} diff --git a/webseite-react-php-jwt/react-app/src/styles/libraries/bootstrap-5.3.8/_carousel.scss b/webseite-react-php-jwt/react-app/src/styles/libraries/bootstrap-5.3.8/_carousel.scss new file mode 100644 index 0000000..5ebf6b1 --- /dev/null +++ b/webseite-react-php-jwt/react-app/src/styles/libraries/bootstrap-5.3.8/_carousel.scss @@ -0,0 +1,226 @@ +// Notes on the classes: +// +// 1. .carousel.pointer-event should ideally be pan-y (to allow for users to scroll vertically) +// even when their scroll action started on a carousel, but for compatibility (with Firefox) +// we're preventing all actions instead +// 2. The .carousel-item-start and .carousel-item-end is used to indicate where +// the active slide is heading. +// 3. .active.carousel-item is the current slide. +// 4. .active.carousel-item-start and .active.carousel-item-end is the current +// slide in its in-transition state. Only one of these occurs at a time. +// 5. .carousel-item-next.carousel-item-start and .carousel-item-prev.carousel-item-end +// is the upcoming slide in transition. + +.carousel { + position: relative; +} + +.carousel.pointer-event { + touch-action: pan-y; +} + +.carousel-inner { + position: relative; + width: 100%; + overflow: hidden; + @include clearfix(); +} + +.carousel-item { + position: relative; + display: none; + float: left; + width: 100%; + margin-right: -100%; + backface-visibility: hidden; + @include transition($carousel-transition); +} + +.carousel-item.active, +.carousel-item-next, +.carousel-item-prev { + display: block; +} + +.carousel-item-next:not(.carousel-item-start), +.active.carousel-item-end { + transform: translateX(100%); +} + +.carousel-item-prev:not(.carousel-item-end), +.active.carousel-item-start { + transform: translateX(-100%); +} + + +// +// Alternate transitions +// + +.carousel-fade { + .carousel-item { + opacity: 0; + transition-property: opacity; + transform: none; + } + + .carousel-item.active, + .carousel-item-next.carousel-item-start, + .carousel-item-prev.carousel-item-end { + z-index: 1; + opacity: 1; + } + + .active.carousel-item-start, + .active.carousel-item-end { + z-index: 0; + opacity: 0; + @include transition(opacity 0s $carousel-transition-duration); + } +} + + +// +// Left/right controls for nav +// + +.carousel-control-prev, +.carousel-control-next { + position: absolute; + top: 0; + bottom: 0; + z-index: 1; + // Use flex for alignment (1-3) + display: flex; // 1. allow flex styles + align-items: center; // 2. vertically center contents + justify-content: center; // 3. horizontally center contents + width: $carousel-control-width; + padding: 0; + color: $carousel-control-color; + text-align: center; + background: none; + filter: var(--#{$prefix}carousel-control-icon-filter); + border: 0; + opacity: $carousel-control-opacity; + @include transition($carousel-control-transition); + + // Hover/focus state + &:hover, + &:focus { + color: $carousel-control-color; + text-decoration: none; + outline: 0; + opacity: $carousel-control-hover-opacity; + } +} +.carousel-control-prev { + left: 0; + background-image: if($enable-gradients, linear-gradient(90deg, rgba($black, .25), rgba($black, .001)), null); +} +.carousel-control-next { + right: 0; + background-image: if($enable-gradients, linear-gradient(270deg, rgba($black, .25), rgba($black, .001)), null); +} + +// Icons for within +.carousel-control-prev-icon, +.carousel-control-next-icon { + display: inline-block; + width: $carousel-control-icon-width; + height: $carousel-control-icon-width; + background-repeat: no-repeat; + background-position: 50%; + background-size: 100% 100%; +} + +.carousel-control-prev-icon { + background-image: escape-svg($carousel-control-prev-icon-bg) #{"/*rtl:" + escape-svg($carousel-control-next-icon-bg) + "*/"}; +} +.carousel-control-next-icon { + background-image: escape-svg($carousel-control-next-icon-bg) #{"/*rtl:" + escape-svg($carousel-control-prev-icon-bg) + "*/"}; +} + +// Optional indicator pips/controls +// +// Add a container (such as a list) with the following class and add an item (ideally a focusable control, +// like a button) with data-bs-target for each slide your carousel holds. + +.carousel-indicators { + position: absolute; + right: 0; + bottom: 0; + left: 0; + z-index: 2; + display: flex; + justify-content: center; + padding: 0; + // Use the .carousel-control's width as margin so we don't overlay those + margin-right: $carousel-control-width; + margin-bottom: 1rem; + margin-left: $carousel-control-width; + + [data-bs-target] { + box-sizing: content-box; + flex: 0 1 auto; + width: $carousel-indicator-width; + height: $carousel-indicator-height; + padding: 0; + margin-right: $carousel-indicator-spacer; + margin-left: $carousel-indicator-spacer; + text-indent: -999px; + cursor: pointer; + background-color: var(--#{$prefix}carousel-indicator-active-bg); + background-clip: padding-box; + border: 0; + // Use transparent borders to increase the hit area by 10px on top and bottom. + border-top: $carousel-indicator-hit-area-height solid transparent; + border-bottom: $carousel-indicator-hit-area-height solid transparent; + opacity: $carousel-indicator-opacity; + @include transition($carousel-indicator-transition); + } + + .active { + opacity: $carousel-indicator-active-opacity; + } +} + + +// Optional captions +// +// + +.carousel-caption { + position: absolute; + right: (100% - $carousel-caption-width) * .5; + bottom: $carousel-caption-spacer; + left: (100% - $carousel-caption-width) * .5; + padding-top: $carousel-caption-padding-y; + padding-bottom: $carousel-caption-padding-y; + color: var(--#{$prefix}carousel-caption-color); + text-align: center; +} + +// Dark mode carousel + +@mixin carousel-dark() { + --#{$prefix}carousel-indicator-active-bg: #{$carousel-indicator-active-bg-dark}; + --#{$prefix}carousel-caption-color: #{$carousel-caption-color-dark}; + --#{$prefix}carousel-control-icon-filter: #{$carousel-control-icon-filter-dark}; +} + +.carousel-dark { + @include carousel-dark(); +} + +:root, +[data-bs-theme="light"] { + --#{$prefix}carousel-indicator-active-bg: #{$carousel-indicator-active-bg}; + --#{$prefix}carousel-caption-color: #{$carousel-caption-color}; + --#{$prefix}carousel-control-icon-filter: #{$carousel-control-icon-filter}; +} + +@if $enable-dark-mode { + @include color-mode(dark, true) { + @include carousel-dark(); + } +} diff --git a/webseite-react-php-jwt/react-app/src/styles/libraries/bootstrap-5.3.8/_close.scss b/webseite-react-php-jwt/react-app/src/styles/libraries/bootstrap-5.3.8/_close.scss new file mode 100644 index 0000000..d53c96f --- /dev/null +++ b/webseite-react-php-jwt/react-app/src/styles/libraries/bootstrap-5.3.8/_close.scss @@ -0,0 +1,66 @@ +// Transparent background and border properties included for button version. +// iOS requires the button element instead of an anchor tag. +// If you want the anchor version, it requires `href="#"`. +// See https://developer.mozilla.org/en-US/docs/Web/Events/click#Safari_Mobile + +.btn-close { + // scss-docs-start close-css-vars + --#{$prefix}btn-close-color: #{$btn-close-color}; + --#{$prefix}btn-close-bg: #{ escape-svg($btn-close-bg) }; + --#{$prefix}btn-close-opacity: #{$btn-close-opacity}; + --#{$prefix}btn-close-hover-opacity: #{$btn-close-hover-opacity}; + --#{$prefix}btn-close-focus-shadow: #{$btn-close-focus-shadow}; + --#{$prefix}btn-close-focus-opacity: #{$btn-close-focus-opacity}; + --#{$prefix}btn-close-disabled-opacity: #{$btn-close-disabled-opacity}; + // scss-docs-end close-css-vars + + box-sizing: content-box; + width: $btn-close-width; + height: $btn-close-height; + padding: $btn-close-padding-y $btn-close-padding-x; + color: var(--#{$prefix}btn-close-color); + background: transparent var(--#{$prefix}btn-close-bg) center / $btn-close-width auto no-repeat; // include transparent for button elements + filter: var(--#{$prefix}btn-close-filter); + border: 0; // for button elements + @include border-radius(); + opacity: var(--#{$prefix}btn-close-opacity); + + // Override 's hover style + &:hover { + color: var(--#{$prefix}btn-close-color); + text-decoration: none; + opacity: var(--#{$prefix}btn-close-hover-opacity); + } + + &:focus { + outline: 0; + box-shadow: var(--#{$prefix}btn-close-focus-shadow); + opacity: var(--#{$prefix}btn-close-focus-opacity); + } + + &:disabled, + &.disabled { + pointer-events: none; + user-select: none; + opacity: var(--#{$prefix}btn-close-disabled-opacity); + } +} + +@mixin btn-close-white() { + --#{$prefix}btn-close-filter: #{$btn-close-filter-dark}; +} + +.btn-close-white { + @include btn-close-white(); +} + +:root, +[data-bs-theme="light"] { + --#{$prefix}btn-close-filter: #{$btn-close-filter}; +} + +@if $enable-dark-mode { + @include color-mode(dark, true) { + @include btn-close-white(); + } +} diff --git a/webseite-react-php-jwt/react-app/src/styles/libraries/bootstrap-5.3.8/_containers.scss b/webseite-react-php-jwt/react-app/src/styles/libraries/bootstrap-5.3.8/_containers.scss new file mode 100644 index 0000000..83b3138 --- /dev/null +++ b/webseite-react-php-jwt/react-app/src/styles/libraries/bootstrap-5.3.8/_containers.scss @@ -0,0 +1,41 @@ +// Container widths +// +// Set the container width, and override it for fixed navbars in media queries. + +@if $enable-container-classes { + // Single container class with breakpoint max-widths + .container, + // 100% wide container at all breakpoints + .container-fluid { + @include make-container(); + } + + // Responsive containers that are 100% wide until a breakpoint + @each $breakpoint, $container-max-width in $container-max-widths { + .container-#{$breakpoint} { + @extend .container-fluid; + } + + @include media-breakpoint-up($breakpoint, $grid-breakpoints) { + %responsive-container-#{$breakpoint} { + max-width: $container-max-width; + } + + // Extend each breakpoint which is smaller or equal to the current breakpoint + $extend-breakpoint: true; + + @each $name, $width in $grid-breakpoints { + @if ($extend-breakpoint) { + .container#{breakpoint-infix($name, $grid-breakpoints)} { + @extend %responsive-container-#{$breakpoint}; + } + + // Once the current breakpoint is reached, stop extending + @if ($breakpoint == $name) { + $extend-breakpoint: false; + } + } + } + } + } +} diff --git a/webseite-react-php-jwt/react-app/src/styles/libraries/bootstrap-5.3.8/_dropdown.scss b/webseite-react-php-jwt/react-app/src/styles/libraries/bootstrap-5.3.8/_dropdown.scss new file mode 100644 index 0000000..587ebb4 --- /dev/null +++ b/webseite-react-php-jwt/react-app/src/styles/libraries/bootstrap-5.3.8/_dropdown.scss @@ -0,0 +1,250 @@ +// The dropdown wrapper (`
`) +.dropup, +.dropend, +.dropdown, +.dropstart, +.dropup-center, +.dropdown-center { + position: relative; +} + +.dropdown-toggle { + white-space: nowrap; + + // Generate the caret automatically + @include caret(); +} + +// The dropdown menu +.dropdown-menu { + // scss-docs-start dropdown-css-vars + --#{$prefix}dropdown-zindex: #{$zindex-dropdown}; + --#{$prefix}dropdown-min-width: #{$dropdown-min-width}; + --#{$prefix}dropdown-padding-x: #{$dropdown-padding-x}; + --#{$prefix}dropdown-padding-y: #{$dropdown-padding-y}; + --#{$prefix}dropdown-spacer: #{$dropdown-spacer}; + @include rfs($dropdown-font-size, --#{$prefix}dropdown-font-size); + --#{$prefix}dropdown-color: #{$dropdown-color}; + --#{$prefix}dropdown-bg: #{$dropdown-bg}; + --#{$prefix}dropdown-border-color: #{$dropdown-border-color}; + --#{$prefix}dropdown-border-radius: #{$dropdown-border-radius}; + --#{$prefix}dropdown-border-width: #{$dropdown-border-width}; + --#{$prefix}dropdown-inner-border-radius: #{$dropdown-inner-border-radius}; + --#{$prefix}dropdown-divider-bg: #{$dropdown-divider-bg}; + --#{$prefix}dropdown-divider-margin-y: #{$dropdown-divider-margin-y}; + --#{$prefix}dropdown-box-shadow: #{$dropdown-box-shadow}; + --#{$prefix}dropdown-link-color: #{$dropdown-link-color}; + --#{$prefix}dropdown-link-hover-color: #{$dropdown-link-hover-color}; + --#{$prefix}dropdown-link-hover-bg: #{$dropdown-link-hover-bg}; + --#{$prefix}dropdown-link-active-color: #{$dropdown-link-active-color}; + --#{$prefix}dropdown-link-active-bg: #{$dropdown-link-active-bg}; + --#{$prefix}dropdown-link-disabled-color: #{$dropdown-link-disabled-color}; + --#{$prefix}dropdown-item-padding-x: #{$dropdown-item-padding-x}; + --#{$prefix}dropdown-item-padding-y: #{$dropdown-item-padding-y}; + --#{$prefix}dropdown-header-color: #{$dropdown-header-color}; + --#{$prefix}dropdown-header-padding-x: #{$dropdown-header-padding-x}; + --#{$prefix}dropdown-header-padding-y: #{$dropdown-header-padding-y}; + // scss-docs-end dropdown-css-vars + + position: absolute; + z-index: var(--#{$prefix}dropdown-zindex); + display: none; // none by default, but block on "open" of the menu + min-width: var(--#{$prefix}dropdown-min-width); + padding: var(--#{$prefix}dropdown-padding-y) var(--#{$prefix}dropdown-padding-x); + margin: 0; // Override default margin of ul + @include font-size(var(--#{$prefix}dropdown-font-size)); + color: var(--#{$prefix}dropdown-color); + text-align: left; // Ensures proper alignment if parent has it changed (e.g., modal footer) + list-style: none; + background-color: var(--#{$prefix}dropdown-bg); + background-clip: padding-box; + border: var(--#{$prefix}dropdown-border-width) solid var(--#{$prefix}dropdown-border-color); + @include border-radius(var(--#{$prefix}dropdown-border-radius)); + @include box-shadow(var(--#{$prefix}dropdown-box-shadow)); + + &[data-bs-popper] { + top: 100%; + left: 0; + margin-top: var(--#{$prefix}dropdown-spacer); + } + + @if $dropdown-padding-y == 0 { + > .dropdown-item:first-child, + > li:first-child .dropdown-item { + @include border-top-radius(var(--#{$prefix}dropdown-inner-border-radius)); + } + > .dropdown-item:last-child, + > li:last-child .dropdown-item { + @include border-bottom-radius(var(--#{$prefix}dropdown-inner-border-radius)); + } + + } +} + +// scss-docs-start responsive-breakpoints +// We deliberately hardcode the `bs-` prefix because we check +// this custom property in JS to determine Popper's positioning + +@each $breakpoint in map-keys($grid-breakpoints) { + @include media-breakpoint-up($breakpoint) { + $infix: breakpoint-infix($breakpoint, $grid-breakpoints); + + .dropdown-menu#{$infix}-start { + --bs-position: start; + + &[data-bs-popper] { + right: auto; + left: 0; + } + } + + .dropdown-menu#{$infix}-end { + --bs-position: end; + + &[data-bs-popper] { + right: 0; + left: auto; + } + } + } +} +// scss-docs-end responsive-breakpoints + +// Allow for dropdowns to go bottom up (aka, dropup-menu) +// Just add .dropup after the standard .dropdown class and you're set. +.dropup { + .dropdown-menu[data-bs-popper] { + top: auto; + bottom: 100%; + margin-top: 0; + margin-bottom: var(--#{$prefix}dropdown-spacer); + } + + .dropdown-toggle { + @include caret(up); + } +} + +.dropend { + .dropdown-menu[data-bs-popper] { + top: 0; + right: auto; + left: 100%; + margin-top: 0; + margin-left: var(--#{$prefix}dropdown-spacer); + } + + .dropdown-toggle { + @include caret(end); + &::after { + vertical-align: 0; + } + } +} + +.dropstart { + .dropdown-menu[data-bs-popper] { + top: 0; + right: 100%; + left: auto; + margin-top: 0; + margin-right: var(--#{$prefix}dropdown-spacer); + } + + .dropdown-toggle { + @include caret(start); + &::before { + vertical-align: 0; + } + } +} + + +// Dividers (basically an `
`) within the dropdown +.dropdown-divider { + height: 0; + margin: var(--#{$prefix}dropdown-divider-margin-y) 0; + overflow: hidden; + border-top: 1px solid var(--#{$prefix}dropdown-divider-bg); + opacity: 1; // Revisit in v6 to de-dupe styles that conflict with
element +} + +// Links, buttons, and more within the dropdown menu +// +// `