diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index aae53ed5..c329d32f 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -1,4 +1,4 @@ -name: Build artifact and package +name: Build and Release Pakage on: release: @@ -6,34 +6,6 @@ on: workflow_dispatch: jobs: - artifact: - runs-on: ubuntu-22.04 - steps: - - name: Checkout source code - uses: actions/checkout@v3 - - - name: Cache build frontend - uses: actions/cache@v3 - id: cache-build-frontend - with: - path: apps/frontend - key: ${{ runner.os }}-frontend-${{ github.sha }} - - - name: Cache build backend - uses: actions/cache@v3 - id: cache-build-backend - with: - path: apps/backend - key: ${{ runner.os }}-backend-${{ github.sha }} - - - name: Compress files - run: tar -czf /tmp/clnapp.tar.gz apps/frontend/build apps/backend/dist package.json package-lock.json - - - uses: actions/upload-artifact@v3 - with: - name: clnapp-build$VERSION - path: /tmp/clnapp.tar.gz - build: name: Build image runs-on: ubuntu-22.04 diff --git a/.gitignore b/.gitignore index b04bae28..ce4d4b9a 100644 --- a/.gitignore +++ b/.gitignore @@ -6,3 +6,5 @@ application-cln.log .commando release env-local.sh +apps/frontend/build +apps/backend/dist diff --git a/README.md b/README.md index 95d809a9..aeb848b8 100644 --- a/README.md +++ b/README.md @@ -39,46 +39,66 @@ tar -xzf v0.0.1.tar.gz ``` - - ### Dependency Installation + - ### Dependency Installation and Compile ``` cd cln-application-0.0.1 - npm install --force --omit=dev + npm install + npm run build + npm prune --omit=dev ``` - ### Environment Variables This application accepts & depends upon these variables to be passed through environment: ``` - - SINGLE_SIGN_ON: Flag to bypass application level authentication (valid values: true/false, default: false) - - LOCAL_HOST: Device url for connect url links (optional; for connect wallet screen) - - DEVICE_DOMAIN_NAME: Device name/IP for lnmessage connect url feature (optional; for connect wallet screen) - - BITCOIN_NODE_IP: IP address of bitcoin node container (required) - - BITCOIN_NETWORK: Bitcoin network type (optional; for entrypoint.sh; valid values: bitcoin/signet/testnet/regtest) - - APP_CONFIG_DIR: Path for cln-application's configuration file (required; config.json) - - APP_MODE: Mode for logging and other settings (valid values: production/development/testing, default: production) - - APP_CONNECT: Choose how to connect to CLN (valid values: COMMANDO/REST/GRPC, default: COMMANDO) - - APP_PROTOCOL: Protocol on which the application will be served (valid values: http/https, default: http) - - APP_IP: IP address of this application (cln-application) container (required) - - APP_PORT: Port on which this application should be served (required) - - LIGHTNING_IP: IP address of Core lightning node container (required) - - LIGHTNING_PATH: Path for core lightning (optional; required for entrypoint.sh) - - HIDDEN_SERVICE_URL: REST hidden service url (optional; for connect wallet screen; Used for Tor Domain also) - - COMMANDO_CONFIG: Full Path including file name for commando auth with PUBKEY & RUNE (required) - - LIGHTNING_WEBSOCKET_PORT: Core lightning's websocket port (required; from cln's config.json; starting with `bind-addr=ws:`) - - LIGHTNING_REST_PROTOCOL: Protocol on which REST is served (valid values: http/https, default: https) - - LIGHTNING_REST_PORT: REST server port (required if APP_CONNECT is REST) - - LIGHTNING_CERTS_DIR: Path for core lightning certificates (Required if APP_CONNECT is REST/GRPC with PROTOCOL 'https') - - LIGHTNING_GRPC_PROTOCOL: Core lightning's GRPC protocol (valid values: http/https, default: http) - - LIGHTNING_GRPC_PORT: Core lightning's GRPC port (Required if APP_CONNECT is GRPC) + - BITCOIN_HOST: Hostname/IP address of bitcoin node container (configurable to run lightningd with `--bitcoin-rpcconnect`, default: `localhost`) + - BITCOIN_NETWORK: Bitcoin network type (for entrypoint.sh and lightningd with `--network`; valid values: bitcoin/signet/testnet/regtest; default: `bitcoin`) + + - APP_SINGLE_SIGN_ON: Flag to bypass application level authentication (valid values: true/false, default: false) + - APP_PROTOCOL: Protocol on which the application will be served (valid values: http/https, default: `http`) + - APP_HOST: Hostname/IP address of cln-application's container (default: `localhost`) + - APP_PORT: Port on which this application should be served (default: `2103`) + + - APP_CONFIG_FILE: Path for cln-application's configuration file (default: `./config.json`) + - APP_LOG_FILE: Path for cln-application's log file (default: `./application-cln.log`) + - APP_MODE: Mode for logging and other settings (valid values: production/development/testing, default: `production`) + - APP_CONNECT: Choose how to connect to CLN (valid values: COMMANDO/REST/GRPC, default: `COMMANDO`) + + - LIGHTNING_DATA_DIR: Path for core lightning (used by entrypoint.sh, default: ``) + - LIGHTNING_HOST: IP address of Core lightning node container (used for `COMMANDO` APP_CONNECT, default: `localhost`) + - LIGHTNING_TOR_HOST: REST hidden service url (default: ``) + + - LIGHTNING_VARS_FILE: Full Path including the file name for connection auth with LIGHTNING_PUBKEY & LIGHTNING_RUNE (defult: `./.commando-env`) + - LIGHTNING_WS_PROTOCOL: Core lightning's web socket is serving on ws or serving via WSSProxy (valid values: ws/wss, default: `ws`) + - LIGHTNING_WS_PORT: Core lightning's websocket port (used by `COMMANDO` APP_CONNECT; with `bind-addr=ws:`/`wss-bind-addr` in CLN config; default: `5001`) + - LIGHTNING_WS_CLIENT_KEY_FILE: Client key file path including file name for websocket TLS authentication (used by `COMMANDO` APP_CONNECT and `wss` LIGHTNING_WS_PROTOCOL; default: `./client-key.pem`) + - LIGHTNING_WS_CLIENT_CERT_FILE: Client certificate file path including file name for websocket TLS authentication (used by `COMMANDO` APP_CONNECT and `wss` LIGHTNING_WS_PROTOCOL; default: `./client.pem`) + - LIGHTNING_WS_CA_CERT_FILE: CA certificate file path including file name for websocket TLS authentication (default: `./ca.pem`) + + - LIGHTNING_REST_PROTOCOL: Protocol on which REST is served (valid values: http/https, default: `https`) + - LIGHTNING_REST_HOST: IP address/hostname of Core Lightning REST interface (used if APP_CONNECT is `REST`, default: `localhost`) + - LIGHTNING_REST_TOR_HOST: Tor hidden service URL for Core Lightning REST interface (default: ``) + - LIGHTNING_REST_PORT: REST server port (used if APP_CONNECT is `REST`; default: `3010`) + - LIGHTNING_REST_CLIENT_KEY_FILE: Client key file path including file name for REST TLS authentication (default: `./client-key.pem`) + - LIGHTNING_REST_CLIENT_CERT_FILE: Client certificate file path including file name for REST TLS authentication (default: `./client.pem`) + - LIGHTNING_REST_CA_CERT_FILE: CA certificate file path including file name for REST TLS authentication (used by `REST` APP_CONNECT and `https` LIGHTNING_REST_PROTOCOL; default: `./ca.pem`) + + - LIGHTNING_GRPC_HOST: IP address/hostname of Core Lightning GRPC interface (used if APP_CONNECT is `GRPC`, default: `localhost`) + - LIGHTNING_GRPC_TOR_HOST: Tor hidden service URL for Core Lightning GRPC interface (default: ``) + - LIGHTNING_GRPC_PORT: Core lightning's GRPC port (used if APP_CONNECT is `GRPC`; default: `9736`) + - LIGHTNING_GRPC_PROTO_PATH: URL to directory containing CLN gRPC protocol definitions (default: `https://github.com/ElementsProject/lightning/tree/master/cln-grpc/proto`) + - LIGHTNING_GRPC_CLIENT_KEY_FILE: Client key file path including file name for GRPC TLS authentication (used by `GRPC` APP_CONNECT; default: `./client-key.pem`) + - LIGHTNING_GRPC_CLIENT_CERT_FILE: Client certificate file path including file name for GRPC TLS authentication (used by `GRPC` APP_CONNECT; default: `./client.pem`) + - LIGHTNING_GRPC_CA_CERT_FILE: CA certificate file path including file name for GRPC TLS authentication (used by `GRPC` APP_CONNECT; default: `./ca.pem`) ``` Set these variables either via terminal OR by env.sh script OR by explicitly loading variables from .env files. - Important Note: Environment variables take precedence over config.json variables. Like `SINGLE_SIGN_ON` will take higher precedence over + Important Note: Environment variables take precedence over config.json variables. Like `APP_SINGLE_SIGN_ON` will take higher precedence over `singleSignOn` from config.json. - ### Application Configuration - This is the config.json file which is required by application's frontend. If the file named `config.json` is missing at `APP_CONFIG_DIR` location, one like below will be auto created: + This is the default `config.json` file which is required by application's frontend. If the file `APP_CONFIG_FILE` is missing at the location, one like below will be auto created: ``` { @@ -94,8 +114,8 @@ - ### Commando Authentication - This application utilizes [lnmessage](https://github.com/aaronbarnardsound/lnmessage) and [commando](https://docs.corelightning.org/reference/lightning-commando) for connecting with core lightning node. The connection is trustless and end-to-end encrypted. Commando manages authentication and authorization through runes, which can grant either full or fine-grained permissions. - - The backend server reads `LIGHTNING_PUBKEY` & `LIGHTNING_RUNE` from the `COMMANDO_CONFIG` file for this communication. - - Values can either be set manually or script `entrypoint.sh` can be used to call `getinfo` and `createrune` methods and save values in `COMMANDO_CONFIG`. + - The backend server reads `LIGHTNING_PUBKEY` & `LIGHTNING_RUNE` from the `LIGHTNING_VARS_FILE` file for this communication. + - Values can either be set manually or script `entrypoint.sh` can be used to call `getinfo` and `createrune` methods and save values in `LIGHTNING_VARS_FILE`. - `entrypoint.sh` can only run for the locally installed lightning. If `cln-application` is running remotely then pubkey and rune can be set manually. - Sample commando config should look like: diff --git a/apps/backend/dist/controllers/auth.js b/apps/backend/dist/controllers/auth.js deleted file mode 100644 index 83aa20a4..00000000 --- a/apps/backend/dist/controllers/auth.js +++ /dev/null @@ -1,118 +0,0 @@ -import jwt from 'jsonwebtoken'; -import * as fs from 'fs'; -import { APP_CONSTANTS, HttpStatusCode, SECRET_KEY } from '../shared/consts.js'; -import { logger } from '../shared/logger.js'; -import handleError from '../shared/error-handler.js'; -import { verifyPassword, isAuthenticated, isValidPassword } from '../shared/utils.js'; -import { AuthError } from '../models/errors.js'; -class AuthController { - userLogin(req, res, next) { - logger.info('Logging in'); - try { - const vpRes = verifyPassword(req.body.password); - if (vpRes === true) { - const token = jwt.sign({ userID: SECRET_KEY }, SECRET_KEY); - // Expire the token in a day - res.cookie('token', token, { httpOnly: true, maxAge: 3600000 * 24 }); - return res.status(201).json({ isAuthenticated: true, isValidPassword: isValidPassword() }); - } - else { - const err = new AuthError(HttpStatusCode.UNAUTHORIZED, vpRes); - handleError(err, req, res, next); - } - } - catch (error) { - handleError(error, req, res, next); - } - } - userLogout(req, res, next) { - try { - logger.info('Logging out'); - res.clearCookie('token'); - res.status(201).json({ isAuthenticated: false, isValidPassword: isValidPassword() }); - } - catch (error) { - handleError(error, req, res, next); - } - } - resetPassword(req, res, next) { - try { - logger.info('Resetting password'); - const isValid = req.body.isValid; - const currPassword = req.body.currPassword; - const newPassword = req.body.newPassword; - if (fs.existsSync(APP_CONSTANTS.APP_CONFIG_FILE)) { - try { - const config = JSON.parse(fs.readFileSync(APP_CONSTANTS.APP_CONFIG_FILE, 'utf-8')); - if (config.password === currPassword || !isValid) { - try { - config.password = newPassword; - try { - fs.writeFileSync(APP_CONSTANTS.APP_CONFIG_FILE, JSON.stringify(config, null, 2), 'utf-8'); - const token = jwt.sign({ userID: SECRET_KEY }, SECRET_KEY); - res.cookie('token', token, { httpOnly: true, maxAge: 3600 * 24 * 7 }); - res.status(201).json({ isAuthenticated: true, isValidPassword: isValidPassword() }); - } - catch (error) { - handleError(error, req, res, next); - } - } - catch (error) { - handleError(error, req, res, next); - } - } - else { - return new AuthError(HttpStatusCode.UNAUTHORIZED, 'Incorrect current password'); - } - } - catch (error) { - handleError(error, req, res, next); - } - } - else { - throw new AuthError(HttpStatusCode.UNAUTHORIZED, 'Config file does not exist'); - } - } - catch (error) { - handleError(error, req, res, next); - } - } - isUserAuthenticated(req, res, next) { - try { - const uaRes = isAuthenticated(req.cookies.token); - if (req.body.returnResponse) { - // Frontend is asking if user is authenticated or not - if (APP_CONSTANTS.SINGLE_SIGN_ON === 'true') { - return res.status(201).json({ isAuthenticated: true, isValidPassword: true }); - } - else { - const vpRes = isValidPassword(); - if (uaRes === true) { - if (vpRes === true) { - return res.status(201).json({ isAuthenticated: true, isValidPassword: true }); - } - else { - return res.status(201).json({ isAuthenticated: true, isValidPassword: vpRes }); - } - } - else { - return res.status(201).json({ isAuthenticated: false, isValidPassword: vpRes }); - } - } - } - else { - // Backend APIs are asking if user is authenticated or not - if (uaRes === true || APP_CONSTANTS.SINGLE_SIGN_ON === 'true') { - return next(); - } - else { - return res.status(401).json({ error: 'Unauthorized user' }); - } - } - } - catch (error) { - handleError(error, req, res, next); - } - } -} -export default new AuthController(); diff --git a/apps/backend/dist/controllers/lightning.js b/apps/backend/dist/controllers/lightning.js deleted file mode 100644 index 5202d038..00000000 --- a/apps/backend/dist/controllers/lightning.js +++ /dev/null @@ -1,42 +0,0 @@ -import handleError from '../shared/error-handler.js'; -import { CLNService } from '../service/lightning.service.js'; -import { logger } from '../shared/logger.js'; -import { AppConnect, APP_CONSTANTS } from '../shared/consts.js'; -const clnService = CLNService; -class LightningController { - callMethod(req, res, next) { - try { - logger.info('Calling method: ' + req.body.method); - clnService - .call(req.body.method, req.body.params) - .then((commandRes) => { - logger.info('Controller received response for ' + - req.body.method + - ': ' + - JSON.stringify(commandRes)); - if (APP_CONSTANTS.APP_CONNECT == AppConnect.COMMANDO && - req.body.method && - req.body.method === 'listpeers') { - // Filter out ln message pubkey from peers list - const lnmPubkey = clnService.getLNMsgPubkey(); - commandRes.peers = commandRes.peers.filter((peer) => peer.id !== lnmPubkey); - res.status(200).json(commandRes); - } - else { - res.status(200).json(commandRes); - } - }) - .catch((err) => { - logger.error('Controller caught lightning error from ' + - req.body.method + - ': ' + - JSON.stringify(err)); - return handleError(err, req, res, next); - }); - } - catch (error) { - return handleError(error, req, res, next); - } - } -} -export default new LightningController(); diff --git a/apps/backend/dist/controllers/shared.js b/apps/backend/dist/controllers/shared.js deleted file mode 100644 index ab5a05f0..00000000 --- a/apps/backend/dist/controllers/shared.js +++ /dev/null @@ -1,97 +0,0 @@ -import axios from 'axios'; -import * as fs from 'fs'; -import { APP_CONSTANTS, DEFAULT_CONFIG, FIAT_RATE_API, FIAT_VENUES, HttpStatusCode, } from '../shared/consts.js'; -import { logger } from '../shared/logger.js'; -import handleError from '../shared/error-handler.js'; -import { APIError } from '../models/errors.js'; -import { addServerConfig, refreshEnvVariables } from '../shared/utils.js'; -import { CLNService } from '../service/lightning.service.js'; -class SharedController { - getApplicationSettings(req, res, next) { - try { - logger.info('Getting Application Settings from ' + APP_CONSTANTS.APP_CONFIG_FILE); - if (!fs.existsSync(APP_CONSTANTS.APP_CONFIG_FILE)) { - fs.writeFileSync(APP_CONSTANTS.APP_CONFIG_FILE, JSON.stringify(DEFAULT_CONFIG, null, 2), 'utf-8'); - } - let config = { - uiConfig: JSON.parse(fs.readFileSync(APP_CONSTANTS.APP_CONFIG_FILE, 'utf-8')), - }; - delete config.uiConfig.password; - delete config.uiConfig.isLoading; - delete config.uiConfig.error; - delete config.uiConfig.singleSignOn; - config = addServerConfig(config); - res.status(200).json(config); - } - catch (error) { - handleError(error, req, res, next); - } - } - setApplicationSettings(req, res, next) { - try { - logger.info('Updating Application Settings: ' + JSON.stringify(req.body)); - const config = JSON.parse(fs.readFileSync(APP_CONSTANTS.APP_CONFIG_FILE, 'utf-8')); - req.body.uiConfig.password = config.password; // Before saving, add password in the config received from frontend - fs.writeFileSync(APP_CONSTANTS.APP_CONFIG_FILE, JSON.stringify(req.body.uiConfig, null, 2), 'utf-8'); - res.status(201).json({ message: 'Application Settings Updated Successfully' }); - } - catch (error) { - handleError(error, req, res, next); - } - } - getWalletConnectSettings(req, res, next) { - try { - logger.info('Getting Connection Settings'); - refreshEnvVariables(); - res.status(200).json(APP_CONSTANTS); - } - catch (error) { - handleError(error, req, res, next); - } - } - getFiatRate(req, res, next) { - try { - logger.info('Getting Fiat Rate for: ' + req.params.fiatCurrency); - const FIAT_VENUE = FIAT_VENUES.hasOwnProperty(req.params.fiatCurrency) - ? FIAT_VENUES[req.params.fiatCurrency] - : 'COINGECKO'; - return axios - .get(FIAT_RATE_API + FIAT_VENUE + '/pairs/XBT/' + req.params.fiatCurrency) - .then((response) => { - logger.info('Fiat Response: ' + JSON.stringify(response?.data)); - if (response.data?.rate) { - return res.status(200).json({ venue: FIAT_VENUE, rate: response.data?.rate }); - } - else { - return handleError(new APIError(HttpStatusCode.NOT_FOUND, 'Price Not Found'), req, res, next); - } - }) - .catch(err => { - return handleError(err, req, res, next); - }); - } - catch (error) { - handleError(error, req, res, next); - } - } - async saveInvoiceRune(req, res, next) { - try { - logger.info('Saving Invoice Rune'); - const showRunes = await CLNService.call('showrunes', []); - const invoiceRune = showRunes.runes.find(rune => rune.restrictions.some(restriction => restriction.alternatives.some(alternative => alternative.value === 'invoice')) && - rune.restrictions.some(restriction => restriction.alternatives.some(alternative => alternative.value === 'listinvoices'))); - if (invoiceRune && fs.existsSync(APP_CONSTANTS.COMMANDO_CONFIG)) { - const invoiceRuneString = `INVOICE_RUNE="${invoiceRune.rune}"\n`; - fs.appendFileSync(APP_CONSTANTS.COMMANDO_CONFIG, invoiceRuneString, 'utf-8'); - res.status(201).send(); - } - else { - throw new Error('Invoice rune not found or .commando-env does not exist.'); - } - } - catch (error) { - handleError(error, req, res, next); - } - } -} -export default new SharedController(); diff --git a/apps/backend/dist/models/errors.js b/apps/backend/dist/models/errors.js deleted file mode 100644 index 486bb380..00000000 --- a/apps/backend/dist/models/errors.js +++ /dev/null @@ -1,42 +0,0 @@ -import { HttpStatusCode } from '../shared/consts.js'; -export class BaseError extends Error { - code; - message; - constructor(code, message) { - super(message); - Object.setPrototypeOf(this, new.target.prototype); - this.code = code; - this.message = message; - Error.captureStackTrace(this); - } -} -export class APIError extends BaseError { - constructor(code = HttpStatusCode.INTERNAL_SERVER, message = 'Unknown API Server Error') { - super(code, message); - } -} -export class BitcoindError extends BaseError { - constructor(code = HttpStatusCode.BITCOIN_SERVER, message = 'Unknown Bitcoin API Error') { - super(code, message); - } -} -export class LightningError extends BaseError { - constructor(code = HttpStatusCode.LIGHTNING_SERVER, message = 'Unknown Core Lightning API Error') { - super(code, message); - } -} -export class ValidationError extends BaseError { - constructor(code = HttpStatusCode.INVALID_DATA, message = 'Unknown Validation Error') { - super(code, message); - } -} -export class AuthError extends BaseError { - constructor(code = HttpStatusCode.UNAUTHORIZED, message = 'Unknown Authentication Error') { - super(code, message); - } -} -export class GRPCError extends BaseError { - constructor(code = HttpStatusCode.GRPC_UNKNOWN, message = 'Unknown gRPC Error') { - super(code, message); - } -} diff --git a/apps/backend/dist/models/showrunes.type.js b/apps/backend/dist/models/showrunes.type.js deleted file mode 100644 index cb0ff5c3..00000000 --- a/apps/backend/dist/models/showrunes.type.js +++ /dev/null @@ -1 +0,0 @@ -export {}; diff --git a/apps/backend/dist/routes/v1/auth.js b/apps/backend/dist/routes/v1/auth.js deleted file mode 100644 index 7388e720..00000000 --- a/apps/backend/dist/routes/v1/auth.js +++ /dev/null @@ -1,18 +0,0 @@ -import { CommonRoutesConfig } from '../../shared/routes.config.js'; -import AuthController from '../../controllers/auth.js'; -import { API_VERSION } from '../../shared/consts.js'; -const AUTH_ROUTE = '/auth'; -export class AuthRoutes extends CommonRoutesConfig { - constructor(app) { - super(app, 'Auth Routes'); - } - configureRoutes() { - this.app.route(API_VERSION + AUTH_ROUTE + '/logout/').get(AuthController.userLogout); - this.app.route(API_VERSION + AUTH_ROUTE + '/login/').post(AuthController.userLogin); - this.app.route(API_VERSION + AUTH_ROUTE + '/reset/').post(AuthController.resetPassword); - this.app - .route(API_VERSION + AUTH_ROUTE + '/isauthenticated/') - .post(AuthController.isUserAuthenticated); - return this.app; - } -} diff --git a/apps/backend/dist/routes/v1/lightning.js b/apps/backend/dist/routes/v1/lightning.js deleted file mode 100644 index fd54beb4..00000000 --- a/apps/backend/dist/routes/v1/lightning.js +++ /dev/null @@ -1,16 +0,0 @@ -import { CommonRoutesConfig } from '../../shared/routes.config.js'; -import AuthController from '../../controllers/auth.js'; -import LightningController from '../../controllers/lightning.js'; -import { API_VERSION } from '../../shared/consts.js'; -const LIGHTNING_ROOT_ROUTE = '/cln'; -export class LightningRoutes extends CommonRoutesConfig { - constructor(app) { - super(app, 'Lightning Routes'); - } - configureRoutes() { - this.app - .route(API_VERSION + LIGHTNING_ROOT_ROUTE + '/call') - .post(AuthController.isUserAuthenticated, LightningController.callMethod); - return this.app; - } -} diff --git a/apps/backend/dist/routes/v1/shared.js b/apps/backend/dist/routes/v1/shared.js deleted file mode 100644 index b793480c..00000000 --- a/apps/backend/dist/routes/v1/shared.js +++ /dev/null @@ -1,33 +0,0 @@ -import { CommonRoutesConfig } from '../../shared/routes.config.js'; -import AuthController from '../../controllers/auth.js'; -import SharedController from '../../controllers/shared.js'; -import { API_VERSION } from '../../shared/consts.js'; -const SHARED_ROUTE = '/shared'; -export class SharedRoutes extends CommonRoutesConfig { - constructor(app) { - super(app, 'Shared Routes'); - } - configureRoutes() { - this.app.route(API_VERSION + SHARED_ROUTE + '/csrf/').get((req, res, next) => { - res.send({ - csrfToken: req.csrfToken && typeof req.csrfToken === 'function' ? req.csrfToken() : 'not-set', - }); - }); - this.app - .route(API_VERSION + SHARED_ROUTE + '/config/') - .get(SharedController.getApplicationSettings); - this.app - .route(API_VERSION + SHARED_ROUTE + '/config/') - .post(AuthController.isUserAuthenticated, SharedController.setApplicationSettings); - this.app - .route(API_VERSION + SHARED_ROUTE + '/connectwallet/') - .get(AuthController.isUserAuthenticated, SharedController.getWalletConnectSettings); - this.app - .route(API_VERSION + SHARED_ROUTE + '/rate/:fiatCurrency') - .get(SharedController.getFiatRate); - this.app - .route(API_VERSION + SHARED_ROUTE + '/saveinvoicerune/') - .post(AuthController.isUserAuthenticated, SharedController.saveInvoiceRune); - return this.app; - } -} diff --git a/apps/backend/dist/server.js b/apps/backend/dist/server.js deleted file mode 100644 index 0dd1b551..00000000 --- a/apps/backend/dist/server.js +++ /dev/null @@ -1,83 +0,0 @@ -import { join, dirname } from 'path'; -import { fileURLToPath } from 'url'; -import express from 'express'; -import http from 'http'; -import bodyParser from 'body-parser'; -import cors from 'cors'; -import csurf from 'csurf'; -import cookieParser from 'cookie-parser'; -import expressWinston from 'express-winston'; -import { logger, expressLogConfiguration } from './shared/logger.js'; -import { LightningRoutes } from './routes/v1/lightning.js'; -import { SharedRoutes } from './routes/v1/shared.js'; -import { AuthRoutes } from './routes/v1/auth.js'; -import { APIError } from './models/errors.js'; -import { APP_CONSTANTS, Environment, HttpStatusCode } from './shared/consts.js'; -import handleError from './shared/error-handler.js'; -const directoryName = dirname(fileURLToPath(import.meta.url)); -const routes = []; -const app = express(); -const server = http.createServer(app); -const LIGHTNING_PORT = normalizePort(process.env.APP_PORT || '2103'); -const APP_IP = process.env.APP_IP || 'localhost'; -const APP_PROTOCOL = process.env.APP_PROTOCOL || 'http'; -function normalizePort(val) { - const port = parseInt(val, 10); - if (isNaN(port)) { - return val; - } - if (port >= 0) { - return port; - } - return false; -} -app.use(bodyParser.json({ limit: '25mb' })); -app.use(bodyParser.urlencoded({ extended: false, limit: '25mb' })); -app.set('trust proxy', true); -app.use(cookieParser()); -app.use(csurf({ cookie: true })); -app.use((req, res, next) => { - res.setHeader('Cache-Control', 'no-cache'); - res.setHeader('Content-Security-Policy', "default-src 'self'; font-src 'self'; img-src 'self' data:; script-src 'self'; frame-src 'self'; style-src 'self';"); - next(); -}); -const corsOptions = { - methods: 'GET, POST, PATCH, PUT, DELETE, OPTIONS', - origin: APP_CONSTANTS.APP_MODE === Environment.PRODUCTION - ? APP_PROTOCOL + '://' + APP_IP + ':' + LIGHTNING_PORT - : APP_PROTOCOL + '://localhost:4300', - credentials: true, - allowedHeaders: 'Content-Type, X-XSRF-TOKEN, XSRF-TOKEN', -}; -app.use(cors(corsOptions)); -app.use(expressWinston.logger(expressLogConfiguration)); -app.use(expressWinston.errorLogger(expressLogConfiguration)); -routes.push(new AuthRoutes(app)); -routes.push(new SharedRoutes(app)); -routes.push(new LightningRoutes(app)); -// serve frontend -app.use('/', express.static(join(directoryName, '..', '..', 'frontend', 'build'))); -app.use((req, res, next) => { - res.sendFile(join(directoryName, '..', '..', 'frontend', 'build', 'index.html')); -}); -app.use((err, req, res, next) => { - return handleError(throwApiError(err), req, res, next); -}); -const throwApiError = (err) => { - logger.error('Server error: ' + err); - switch (err.code) { - case 'EACCES': - return new APIError(HttpStatusCode.ACCESS_DENIED, APP_PROTOCOL + '://' + APP_IP + ':' + LIGHTNING_PORT + ' requires elevated privileges'); - case 'EADDRINUSE': - return new APIError(HttpStatusCode.ADDR_IN_USE, APP_PROTOCOL + '://' + APP_IP + ':' + LIGHTNING_PORT + ' is already in use'); - case 'ECONNREFUSED': - return new APIError(HttpStatusCode.UNAUTHORIZED, 'Server is down/locked'); - case 'EBADCSRFTOKEN': - return new APIError(HttpStatusCode.BAD_CSRF_TOKEN, 'Invalid CSRF token. Form tempered.'); - default: - return new APIError(400, 'Default: ' + JSON.stringify(err)); - } -}; -server.on('error', throwApiError); -server.on('listening', () => logger.warn('Server running at ' + APP_PROTOCOL + '://' + APP_IP + ':' + LIGHTNING_PORT)); -server.listen({ port: LIGHTNING_PORT, host: APP_IP }); diff --git a/apps/backend/dist/service/grpc.service.js b/apps/backend/dist/service/grpc.service.js deleted file mode 100644 index 1c4e3dad..00000000 --- a/apps/backend/dist/service/grpc.service.js +++ /dev/null @@ -1,333 +0,0 @@ -import axios, { AxiosHeaders } from 'axios'; -import * as path from 'path'; -import fs from 'fs'; -import https from 'https'; -import protobuf from 'protobufjs'; -import { HttpStatusCode, GRPC_CONFIG, APP_CONSTANTS } from '../shared/consts.js'; -import { GRPCError } from '../models/errors.js'; -import { logger } from '../shared/logger.js'; -export class GRPCService { - authPubkey; - authSignature; - protoPath; - clnNode; - axiosConfig; - constructor(grpcConfig) { - this.authSignature = 'A'.repeat(64); - this.authPubkey = Buffer.from(grpcConfig.pubkey, 'hex').toString('base64'); - this.protoPath = [ - path.resolve(process.cwd(), './proto/node.proto'), - path.resolve(process.cwd(), './proto/primitives.proto'), - ]; - this.clnNode = protobuf.Root.fromJSON(protobuf.loadSync(this.protoPath).toJSON()); - const headers = new AxiosHeaders(); - headers.set('content-type', 'application/grpc'); - headers.set('accept', 'application/grpc'); - headers.set('glauthpubkey', this.authPubkey); - headers.set('glauthsig', this.authSignature); - this.axiosConfig = { - responseType: 'arraybuffer', - baseURL: `${grpcConfig.url}/cln.Node/`, - headers, - }; - if (APP_CONSTANTS.LIGHTNING_GRPC_PROTOCOL === 'https') { - const httpsAgent = new https.Agent({ - cert: fs.readFileSync(path.join(APP_CONSTANTS.LIGHTNING_CERTS_PATH || '.', 'client.pem')), - key: fs.readFileSync(path.join(APP_CONSTANTS.LIGHTNING_CERTS_PATH || '.', 'client-key.pem')), - ca: fs.readFileSync(path.join(APP_CONSTANTS.LIGHTNING_CERTS_PATH || '.', 'ca.pem')), - }); - this.axiosConfig.httpsAgent = httpsAgent; - } - } - static getGrpcStatusMessages(method) { - return { - 0: `${method} completed successfully.`, - 1: `${method} was cancelled.`, - 2: `Unknown or internal error for ${method}.`, - 3: `${method} had an invalid argument.`, - 4: `${method} took too long and timed out.`, - 5: `Resource not found for ${method}.`, - 6: `Resource already exists for ${method}.`, - 7: `Permission denied for ${method}.`, - 8: `Resource exhausted for ${method}.`, - 9: `Precondition failed for ${method}.`, - 10: `${method} was aborted.`, - 11: `${method} accessed an out-of-range value.`, - 12: `${method} is not implemented.`, - 13: `Internal server error for ${method}.`, - 14: `Service unavailable for ${method}.`, - 15: `Unrecoverable data loss in ${method}.`, - 16: `Authentication failed for ${method}.`, - }; - } - async encodePayload(method, payload) { - const requestType = this.clnNode.lookupType(`cln.${method}Request`); - const errMsg = requestType.verify(payload); - if (errMsg) - throw new GRPCError(HttpStatusCode.GRPC_UNKNOWN, errMsg); - const requestPayload = requestType.create(payload); - const encodedPayload = requestType.encode(requestPayload).finish(); - const flags = Buffer.alloc(1); - flags.writeUInt8(0, 0); - const header = Buffer.alloc(4); - header.writeUInt32BE(encodedPayload.length, 0); - logger.debug(requestType.decode(encodedPayload)); - return Buffer.concat([flags, header, encodedPayload]); - } - async sendRequest(methodUrl, encodedPayload) { - try { - const timestamp = Buffer.alloc(8); - timestamp.writeUInt32BE(Math.floor(Date.now() / 1000), 4); - const extendedAxiosConfig = { - ...this.axiosConfig, - headers: { - ...this.axiosConfig.headers, - glts: timestamp.toString('base64'), - }, - }; - return await axios.post(`${methodUrl}`, encodedPayload, extendedAxiosConfig); - } - catch (error) { - logger.error(`Request failed for ${methodUrl}:`, error); - throw new GRPCError(error.response?.status || error.code || HttpStatusCode.GRPC_UNKNOWN, error.response?.statusText || error.response?.data || error.message || ''); - } - } - CamelToSnakeCase(key) { - // convert camelCase keys to snake_case but do not change ENUMS_WITH_UNDERSCORES like CHANNELD_NORMAL - return key.includes('_') ? key : key.replace(/[A-Z]/g, match => `_${match.toLowerCase()}`); - } - transformResData(key, value) { - const transformedKey = this.CamelToSnakeCase(key); - if (Buffer.isBuffer(value) || value instanceof Uint8Array) { - return { [transformedKey]: Buffer.from(value).toString('hex') }; - } - if (typeof value === 'object' && value !== null && 'msat' in value) { - // FIXME: Amount.varify check will work with 0 NOT '0'. Amount default is '0'. - const msatValue = parseInt(value.msat); - if (!isNaN(msatValue)) { - return { [transformedKey]: msatValue }; - } - } - if (typeof value === 'object' && value !== null) { - if (Array.isArray(value)) { - return { [transformedKey]: value.map(item => this.transformResKeys(item)) }; - } - else { - return { [transformedKey]: this.transformResKeys(value) }; - } - } - return { [transformedKey]: value }; - } - transformResKeys(obj) { - if (typeof obj !== 'object' || obj === null) - return obj; - const transformedObj = {}; - for (const [key, value] of Object.entries(obj)) { - const transformedEntry = this.transformResData(key, value); - Object.assign(transformedObj, transformedEntry); - } - return transformedObj; - } - preserveEnums(data) { - if (data.channels) { - data.channels.forEach((channel) => { - if (channel.state && !channel.state.includes('_')) { - channel.state = channel.state - .replace(/([A-Z])/g, '_$1') - .toUpperCase() - .replace('_', ''); - } - }); - } - return data; - } - extractRpcError(errorMessage) { - const rpcErrorMatch = errorMessage.match(/RpcError\s*\{([^}]+)\}/); - if (!rpcErrorMatch) { - return errorMessage; - } - try { - const rpcErrorMessageMatch = errorMessage.match(/message: "([^"]*(?:"[^"]*"[^"]*)*)"/); - return rpcErrorMessageMatch && rpcErrorMessageMatch[1] - ? rpcErrorMessageMatch[1].replaceAll('\\', '') - : errorMessage; - } - catch (error) { - logger.error('Error extracting RPC error message: ', error); - return errorMessage; - } - } - decodeResponse(method, response) { - const responseType = this.clnNode.lookupType(`cln.${method}Response`); - const dataBuffer = Buffer.from(response.data || ''); - // resFlag (0, 1) and resDataLength (1, 5) not used in code - const responseData = dataBuffer.subarray(5); - const grpcStatus = Number(response.headers['grpc-status']); - if (grpcStatus !== 0) { - let errorMessage; - try { - errorMessage = decodeURIComponent(new TextDecoder('utf-8').decode(responseData)); - if (errorMessage !== 'None') { - errorMessage = this.extractRpcError(errorMessage); - } - else { - errorMessage = GRPCService.getGrpcStatusMessages(method)[grpcStatus]; - } - } - catch { - errorMessage = 'Invalid gRPC error response'; - } - // Offset gRPC status code by 550:return ensure a valid HTTP 5xx server error code - throw new GRPCError(550 + grpcStatus || HttpStatusCode.GRPC_UNKNOWN, errorMessage); - } - const decodedResponse = responseType.toObject(responseType.decode(responseData), { - longs: String, - enums: String, - bytes: Buffer, - defaults: true, - arrays: true, - objects: true, - }); - const transformedResponse = this.transformResKeys(decodedResponse); - const preserveEnumsInResponse = this.preserveEnums(transformedResponse); - return JSON.parse(JSON.stringify(preserveEnumsInResponse)); - } - convertMethodName(method) { - const methodMapping = { - 'bkpr-listaccountevents': 'BkprListAccountEvents', - createrune: 'CreateRune', - fetchinvoice: 'FetchInvoice', - fundchannel: 'FundChannel', - newaddr: 'NewAddr', - keysend: 'KeySend', - listfunds: 'ListFunds', - listinvoices: 'ListInvoices', - listnodes: 'ListNodes', - listoffers: 'ListOffers', - listpeers: 'ListPeers', - listpeerchannels: 'ListPeerChannels', - listsendpays: 'ListSendPays', - }; - const formattedMethod = method.charAt(0).toUpperCase() + method.slice(1).toLowerCase(); - return [methodMapping[method] || formattedMethod, formattedMethod]; - } - transformTypes(type, valueToTransform) { - switch (type) { - case 'Amount': - const AmountType = this.clnNode.lookupType('cln.Amount'); - return AmountType.create({ msat: valueToTransform }); - case 'AmountOrAll': - const AmountOrAllType = this.clnNode.lookupType('cln.AmountOrAll'); - if (valueToTransform === 'all') { - return AmountOrAllType.create({ [valueToTransform]: true }); - } - else { - return AmountOrAllType.create({ - amount: this.transformTypes('Amount', valueToTransform), - }); - } - case 'AmountOrAny': - const AmountOrAnyType = this.clnNode.lookupType('cln.AmountOrAny'); - if (valueToTransform === 'any') { - return AmountOrAnyType.create({ [valueToTransform]: true }); - } - else { - return AmountOrAnyType.create({ - amount: this.transformTypes('Amount', valueToTransform), - }); - } - case 'Feerate': - const FeerateType = this.clnNode.lookupType(`cln.Feerate`); - return FeerateType.create({ [valueToTransform]: true }); - default: - break; - } - } - snakeToCamel(str) { - return str.replace(/_([a-z])/g, (_, letter) => letter.toUpperCase()); - } - changeKeysToCamelCase(obj) { - if (Array.isArray(obj)) { - return obj.map(this.changeKeysToCamelCase); - } - else if (typeof obj === 'object' && obj !== null) { - const newObj = {}; - for (const key in obj) { - if (obj.hasOwnProperty(key)) { - const newKey = this.snakeToCamel(key); - newObj[newKey] = this.changeKeysToCamelCase(obj[key]); - } - } - return newObj; - } - return obj; - } - transformPayload(method, payload) { - try { - if (method?.toLowerCase() === 'fundchannel') { - payload.id = Buffer.from(payload.id, 'hex').toString('base64'); - payload.amount = this.transformTypes('AmountOrAll', payload.amount * 1000); - payload.feerate = this.transformTypes('Feerate', payload.feerate); - } - if (method?.toLowerCase() === 'withdraw') { - payload.satoshi = this.transformTypes('AmountOrAll', payload.satoshi * 1000); - payload.feerate = this.transformTypes('Feerate', payload.feerate); - } - if (method?.toLowerCase() === 'invoice') { - payload.amount_msat = this.transformTypes('AmountOrAny', payload.amount_msat); - } - if (method?.toLowerCase() === 'keysend') { - payload.destination = Buffer.from(payload.destination, 'hex').toString('base64'); - payload.amount_msat = this.transformTypes('Amount', payload.amount_msat); - } - if (method?.toLowerCase() === 'pay') { - payload.amount_msat = this.transformTypes('Amount', payload.amount_msat); - } - // Map values with their Enums - const enumsMapping = { - Feerates: ['style'], - Newaddr: ['addresstype'], - }; - const fieldNames = enumsMapping[method]; - if (fieldNames) { - fieldNames.forEach(fieldName => { - const capitalizedFieldName = fieldName.charAt(0).toUpperCase() + fieldName.slice(1).toLowerCase(); - const fieldEnum = this.clnNode.lookupEnum(`cln.${method}${capitalizedFieldName}`); - payload[fieldName] = fieldEnum.values[payload[fieldName].toUpperCase()]; - }); - } - return this.changeKeysToCamelCase(payload); - } - catch (error) { - throw new GRPCError(HttpStatusCode.INVALID_DATA, error.message || 'Unknown'); - } - } - async callMethod(methodName, reqPayload) { - if (methodName?.toLowerCase() === 'bkpr-listaccountevents') { - let data = {}; - if (GRPC_CONFIG.pubkey === '0279da9a93e50b008a7ba6bd25355fb7132f5015b790a05ee9f41bc9fbdeb30d19') { - data = JSON.parse(await fs.readFileSync(path.join(process.cwd(), '../../data/dummy/node-1.json'), 'utf8'))['bkpr-listaccountevents']; - } - else { - data = JSON.parse(await fs.readFileSync(path.join(process.cwd(), '../../data/dummy/node-3.json'), 'utf8'))['bkpr-listaccountevents']; - } - return data; - } - else { - const [method, capitalizedMethod] = this.convertMethodName(methodName); - reqPayload = this.transformPayload(capitalizedMethod, reqPayload); - const encodedPayload = await this.encodePayload(capitalizedMethod, reqPayload); - logger.info(`Calling gRPC method: ${capitalizedMethod}`); - logger.debug('Payload: ', reqPayload); - try { - const response = await this.sendRequest(method, encodedPayload); - logger.debug('Response Headers: ', response?.headers); - return this.decodeResponse(capitalizedMethod, response); - } - catch (error) { - logger.error(`Error calling ${capitalizedMethod}: `, error); - throw new GRPCError(error.response?.status || error.code || HttpStatusCode.GRPC_UNKNOWN, error.response?.statusText || error.response?.data || error.message || ''); - } - } - } -} diff --git a/apps/backend/dist/service/lightning.service.js b/apps/backend/dist/service/lightning.service.js deleted file mode 100644 index 948ed0eb..00000000 --- a/apps/backend/dist/service/lightning.service.js +++ /dev/null @@ -1,114 +0,0 @@ -import * as fs from 'fs'; -import * as crypto from 'crypto'; -import { join } from 'path'; -import https from 'https'; -import axios, { AxiosHeaders } from 'axios'; -import Lnmessage from 'lnmessage'; -import { LightningError } from '../models/errors.js'; -import { GRPCService } from './grpc.service.js'; -import { HttpStatusCode, APP_CONSTANTS, AppConnect, LN_MESSAGE_CONFIG, REST_CONFIG, GRPC_CONFIG, } from '../shared/consts.js'; -import { logger } from '../shared/logger.js'; -import { refreshEnvVariables } from '../shared/utils.js'; -export class LightningService { - clnService = null; - constructor() { - try { - logger.info('Getting Commando Rune'); - if (fs.existsSync(APP_CONSTANTS.COMMANDO_CONFIG)) { - refreshEnvVariables(); - switch (APP_CONSTANTS.APP_CONNECT) { - case AppConnect.REST: - logger.info('REST connecting with config: ' + JSON.stringify(REST_CONFIG)); - break; - case AppConnect.GRPC: - logger.info('GRPC connecting with config: ' + JSON.stringify(GRPC_CONFIG)); - this.clnService = new GRPCService(GRPC_CONFIG); - break; - default: - logger.info('lnMessage connecting with config: ' + JSON.stringify(LN_MESSAGE_CONFIG)); - this.clnService = new Lnmessage(LN_MESSAGE_CONFIG); - this.clnService.connect(); - break; - } - } - } - catch (error) { - logger.error('Failed to read rune for Commando connection: ' + JSON.stringify(error)); - throw error; - } - } - getLNMsgPubkey = () => { - return this.clnService.publicKey; - }; - call = async (method, methodParams) => { - switch (APP_CONSTANTS.APP_CONNECT) { - case AppConnect.REST: - const headers = new AxiosHeaders(); - headers.set('rune', APP_CONSTANTS.COMMANDO_RUNE); - const axiosConfig = { - baseURL: REST_CONFIG.url + '/v1/', - headers, - }; - if (APP_CONSTANTS.LIGHTNING_REST_PROTOCOL === 'https') { - const caCert = fs.readFileSync(join(APP_CONSTANTS.LIGHTNING_CERTS_PATH || '.', 'ca.pem')); - const httpsAgent = new https.Agent({ - ca: caCert, - }); - axiosConfig.httpsAgent = httpsAgent; - } - return axios - .post(method, methodParams, axiosConfig) - .then((commandRes) => { - logger.info('REST response for ' + method + ': ' + JSON.stringify(commandRes.data)); - return Promise.resolve(commandRes.data); - }) - .catch((err) => { - logger.error('REST lightning error from ' + method + ' command'); - if (typeof err === 'string') { - logger.error(err); - throw new LightningError(HttpStatusCode.LIGHTNING_SERVER, err); - } - else { - logger.error(JSON.stringify(err)); - throw new LightningError(HttpStatusCode.LIGHTNING_SERVER, err.message || err.code); - } - }); - case AppConnect.GRPC: - return this.clnService - .callMethod(method, methodParams) - .then((gRPCRes) => { - logger.info('gRPC response for ' + method + ': ' + JSON.stringify(gRPCRes)); - return Promise.resolve(gRPCRes); - }) - .catch((err) => { - logger.error('gRPC lightning error from ' + method + ' command'); - throw err; - }); - default: - return this.clnService - .commando({ - method: method, - params: methodParams, - rune: APP_CONSTANTS.COMMANDO_RUNE, - reqId: crypto.randomBytes(8).toString('hex'), - reqIdPrefix: 'clnapp', - }) - .then((commandRes) => { - logger.info('Commando response for ' + method + ': ' + JSON.stringify(commandRes)); - return Promise.resolve(commandRes); - }) - .catch((err) => { - logger.error('Commando lightning error from ' + method + ' command'); - if (typeof err === 'string') { - logger.error(err); - throw new LightningError(HttpStatusCode.LIGHTNING_SERVER, err); - } - else { - logger.error(JSON.stringify(err)); - throw new LightningError(HttpStatusCode.LIGHTNING_SERVER, err.message || err.code); - } - }); - } - }; -} -export const CLNService = new LightningService(); diff --git a/apps/backend/dist/shared/consts.js b/apps/backend/dist/shared/consts.js deleted file mode 100644 index aedd15d9..00000000 --- a/apps/backend/dist/shared/consts.js +++ /dev/null @@ -1,125 +0,0 @@ -import * as crypto from 'crypto'; -import { join } from 'path'; -export var Environment; -(function (Environment) { - Environment["PRODUCTION"] = "production"; - Environment["TESTING"] = "testing"; - Environment["DEVELOPMENT"] = "development"; -})(Environment || (Environment = {})); -export var AppConnect; -(function (AppConnect) { - AppConnect["COMMANDO"] = "COMMANDO"; - AppConnect["REST"] = "REST"; - AppConnect["GRPC"] = "GRPC"; -})(AppConnect || (AppConnect = {})); -export var NodeType; -(function (NodeType) { - NodeType["CLN"] = "CLN"; -})(NodeType || (NodeType = {})); -export var HttpStatusCode; -(function (HttpStatusCode) { - HttpStatusCode[HttpStatusCode["GET_OK"] = 200] = "GET_OK"; - HttpStatusCode[HttpStatusCode["POST_OK"] = 201] = "POST_OK"; - HttpStatusCode[HttpStatusCode["DELETE_OK"] = 204] = "DELETE_OK"; - HttpStatusCode[HttpStatusCode["BAD_REQUEST"] = 400] = "BAD_REQUEST"; - HttpStatusCode[HttpStatusCode["UNAUTHORIZED"] = 401] = "UNAUTHORIZED"; - HttpStatusCode[HttpStatusCode["BAD_CSRF_TOKEN"] = 403] = "BAD_CSRF_TOKEN"; - HttpStatusCode[HttpStatusCode["NOT_FOUND"] = 404] = "NOT_FOUND"; - HttpStatusCode[HttpStatusCode["ACCESS_DENIED"] = 406] = "ACCESS_DENIED"; - HttpStatusCode[HttpStatusCode["ADDR_IN_USE"] = 409] = "ADDR_IN_USE"; - HttpStatusCode[HttpStatusCode["INVALID_DATA"] = 421] = "INVALID_DATA"; - HttpStatusCode[HttpStatusCode["INTERNAL_SERVER"] = 500] = "INTERNAL_SERVER"; - HttpStatusCode[HttpStatusCode["BITCOIN_SERVER"] = 520] = "BITCOIN_SERVER"; - HttpStatusCode[HttpStatusCode["LIGHTNING_SERVER"] = 521] = "LIGHTNING_SERVER"; - HttpStatusCode[HttpStatusCode["GRPC_UNKNOWN"] = 552] = "GRPC_UNKNOWN"; -})(HttpStatusCode || (HttpStatusCode = {})); -export const SECRET_KEY = crypto.randomBytes(64).toString('hex'); -export const APP_CONSTANTS = { - SINGLE_SIGN_ON: process.env.SINGLE_SIGN_ON || 'false', - LOCAL_HOST: process.env.LOCAL_HOST || '', - DEVICE_DOMAIN_NAME: process.env.DEVICE_DOMAIN_NAME || '', - BITCOIN_NODE_IP: process.env.BITCOIN_NODE_IP || 'localhost', - BITCOIN_NETWORK: process.env.BITCOIN_NETWORK || 'bitcoin', - APP_CONFIG_FILE: join(process.env.APP_CONFIG_DIR || '.', 'config.json'), - APP_LOG_FILE: join(process.env.APP_CONFIG_DIR || '.', 'application-cln.log'), - APP_MODE: process.env.APP_MODE || Environment.PRODUCTION, - APP_CONNECT: process.env.APP_CONNECT || AppConnect.COMMANDO, - APP_PROTOCOL: process.env.APP_PROTOCOL || 'http', - APP_IP: process.env.APP_IP || 'localhost', - APP_PORT: process.env.APP_PORT || '2103', - LIGHTNING_IP: process.env.LIGHTNING_IP || process.env.APP_CORE_LIGHTNING_DAEMON_IP || 'localhost', - LIGHTNING_PATH: process.env.LIGHTNING_PATH || '', - HIDDEN_SERVICE_URL: process.env.HIDDEN_SERVICE_URL || '', - LIGHTNING_NODE_TYPE: process.env.LIGHTNING_NODE_TYPE || NodeType.CLN, - COMMANDO_CONFIG: process.env.COMMANDO_CONFIG || './.commando-env', - LIGHTNING_WS_PORT: +(process.env.LIGHTNING_WEBSOCKET_PORT || - process.env.APP_CORE_LIGHTNING_WEBSOCKET_PORT || - 5001), - LIGHTNING_REST_PROTOCOL: process.env.LIGHTNING_REST_PROTOCOL || process.env.APP_CORE_LIGHTNING_REST_PROTOCOL || 'https', - LIGHTNING_REST_PORT: +(process.env.LIGHTNING_REST_PORT || - process.env.APP_CORE_LIGHTNING_REST_PORT || - 3010), - LIGHTNING_CERTS_PATH: process.env.LIGHTNING_CERTS_PATH || '', - LIGHTNING_GRPC_PROTOCOL: process.env.LIGHTNING_GRPC_PROTOCOL || - process.env.APP_CORE_LIGHTNING_DAEMON_GRPC_PROTOCOL || - 'http', - LIGHTNING_GRPC_PORT: +(process.env.LIGHTNING_GRPC_PORT || - process.env.APP_CORE_LIGHTNING_DAEMON_GRPC_PORT || - 9736), - APP_VERSION: '', - NODE_PUBKEY: '', - COMMANDO_RUNE: '', - INVOICE_RUNE: '', - CLIENT_KEY: '', - CLIENT_CERT: '', - CA_CERT: '', -}; -export const DEFAULT_CONFIG = { - unit: 'SATS', - fiatUnit: 'USD', - appMode: 'DARK', - isLoading: false, - error: null, - singleSignOn: false, - password: '', -}; -export const LN_MESSAGE_CONFIG = { - remoteNodePublicKey: '', - wsProxy: 'ws://' + APP_CONSTANTS.LIGHTNING_IP + ':' + APP_CONSTANTS.LIGHTNING_WS_PORT, - ip: APP_CONSTANTS.LIGHTNING_IP, - port: APP_CONSTANTS.LIGHTNING_WS_PORT, - privateKey: crypto.randomBytes(32).toString('hex'), - logger: { - info: APP_CONSTANTS.APP_MODE === Environment.PRODUCTION ? () => { } : console.info, - warn: APP_CONSTANTS.APP_MODE === Environment.PRODUCTION ? () => { } : console.warn, - error: console.error, - }, -}; -export const GRPC_CONFIG = { - pubkey: APP_CONSTANTS.NODE_PUBKEY, - protocol: APP_CONSTANTS.LIGHTNING_GRPC_PROTOCOL, - ip: APP_CONSTANTS.LIGHTNING_IP, - port: APP_CONSTANTS.LIGHTNING_GRPC_PORT, - url: APP_CONSTANTS.LIGHTNING_GRPC_PROTOCOL + - '://' + - APP_CONSTANTS.LIGHTNING_IP + - ':' + - APP_CONSTANTS.LIGHTNING_GRPC_PORT, -}; -export const REST_CONFIG = { - protocol: APP_CONSTANTS.LIGHTNING_REST_PROTOCOL, - ip: APP_CONSTANTS.LIGHTNING_IP, - port: APP_CONSTANTS.LIGHTNING_REST_PORT, - url: APP_CONSTANTS.LIGHTNING_REST_PROTOCOL + - '://' + - APP_CONSTANTS.LIGHTNING_IP + - ':' + - APP_CONSTANTS.LIGHTNING_REST_PORT, -}; -export const API_VERSION = '/v1'; -export const FIAT_RATE_API = 'https://green-bitcoin-mainnet.blockstream.com/prices/v0/venues/'; -export const FIAT_VENUES = { - USD: 'KRAKEN', - EUR: 'KRAKEN', - NZD: 'KIWICOIN', -}; diff --git a/apps/backend/dist/shared/error-handler.js b/apps/backend/dist/shared/error-handler.js deleted file mode 100644 index 803affe7..00000000 --- a/apps/backend/dist/shared/error-handler.js +++ /dev/null @@ -1,15 +0,0 @@ -import { HttpStatusCode } from './consts.js'; -import { logger } from './logger.js'; -function handleError(error, req, res, next) { - const route = req.url || ''; - const message = error.message - ? error.message - : typeof error === 'object' - ? JSON.stringify(error) - : typeof error === 'string' - ? error - : 'Unknown Error!'; - logger.error(message, route, error.stack); - return res.status(error.code || HttpStatusCode.INTERNAL_SERVER).json(message); -} -export default handleError; diff --git a/apps/backend/dist/shared/logger.js b/apps/backend/dist/shared/logger.js deleted file mode 100644 index 8c4ef5f6..00000000 --- a/apps/backend/dist/shared/logger.js +++ /dev/null @@ -1,31 +0,0 @@ -import winston from 'winston'; -import { Environment, APP_CONSTANTS } from './consts.js'; -export const logConfiguration = { - transports: [ - new winston.transports.Console({ - level: APP_CONSTANTS.APP_MODE === Environment.PRODUCTION - ? "warn" /* LogLevel.WARN */ - : APP_CONSTANTS.APP_MODE === Environment.TESTING - ? "debug" /* LogLevel.DEBUG */ - : "info" /* LogLevel.INFO */, - format: winston.format.combine(winston.format.timestamp({ format: 'YYYY-MM-DD HH:mm:ss:ms' }), winston.format.timestamp(), winston.format.align(), winston.format.json(), winston.format.colorize({ all: true })), - }), - new winston.transports.File({ - filename: APP_CONSTANTS.APP_LOG_FILE, - level: APP_CONSTANTS.APP_MODE === Environment.PRODUCTION - ? "warn" /* LogLevel.WARN */ - : APP_CONSTANTS.APP_MODE === Environment.TESTING - ? "debug" /* LogLevel.DEBUG */ - : "info" /* LogLevel.INFO */, - format: winston.format.combine(winston.format.timestamp({ format: 'YYYY-MM-DD HH:mm:ss:ms' }), winston.format.timestamp(), winston.format.align(), winston.format.json(), winston.format.colorize({ all: true })), - }), - ], -}; -export const expressLogConfiguration = { - ...logConfiguration, - meta: APP_CONSTANTS.APP_MODE !== Environment.PRODUCTION, - message: 'HTTP {{res.statusCode}} {{req.method}} {{res.responseTime}}ms {{req.url}}', - expressFormat: false, - colorize: true, -}; -export const logger = winston.createLogger(logConfiguration); diff --git a/apps/backend/dist/shared/routes.config.js b/apps/backend/dist/shared/routes.config.js deleted file mode 100644 index e9378a14..00000000 --- a/apps/backend/dist/shared/routes.config.js +++ /dev/null @@ -1,12 +0,0 @@ -export class CommonRoutesConfig { - app; - name; - constructor(app, name) { - this.app = app; - this.name = name; - this.configureRoutes(); - } - getName() { - return this.name; - } -} diff --git a/apps/backend/dist/shared/utils.js b/apps/backend/dist/shared/utils.js deleted file mode 100644 index 145c6be0..00000000 --- a/apps/backend/dist/shared/utils.js +++ /dev/null @@ -1,133 +0,0 @@ -import jwt from 'jsonwebtoken'; -import * as fs from 'fs'; -import { sep } from 'path'; -import { logger } from '../shared/logger.js'; -import { APP_CONSTANTS, GRPC_CONFIG, LN_MESSAGE_CONFIG, SECRET_KEY } from '../shared/consts.js'; -export function addServerConfig(config) { - config.serverConfig = { - appConnect: APP_CONSTANTS.APP_CONNECT, - appPort: APP_CONSTANTS.APP_PORT, - appProtocol: APP_CONSTANTS.APP_PROTOCOL, - appVersion: APP_CONSTANTS.APP_VERSION, - lightningNodeType: APP_CONSTANTS.LIGHTNING_NODE_TYPE, - singleSignOn: APP_CONSTANTS.SINGLE_SIGN_ON, - }; - return config; -} -export function isAuthenticated(token) { - try { - if (!token) { - return 'Token missing'; - } - try { - const decoded = jwt.verify(token, SECRET_KEY); - return !!decoded.userID; - } - catch (error) { - return error.message || 'Invalid user'; - } - } - catch (error) { - return error; - } -} -export function verifyPassword(password) { - if (fs.existsSync(APP_CONSTANTS.APP_CONFIG_FILE)) { - try { - const config = JSON.parse(fs.readFileSync(APP_CONSTANTS.APP_CONFIG_FILE, 'utf-8')); - if (config.password === password) { - return true; - } - else { - return 'Incorrect password'; - } - } - catch (error) { - return error; - } - } - else { - return 'Config file does not exist'; - } -} -export function isValidPassword() { - if (fs.existsSync(APP_CONSTANTS.APP_CONFIG_FILE)) { - try { - const config = JSON.parse(fs.readFileSync(APP_CONSTANTS.APP_CONFIG_FILE, 'utf-8')); - if (config.password && config.password !== '') { - return true; - } - else { - return false; - } - } - catch (error) { - return error; - } - } - else { - return 'Config file does not exist'; - } -} -function parseEnvFile(filePath) { - try { - const content = fs.readFileSync(filePath, 'utf8'); - const lines = content.split('\n'); - const envVars = {}; - for (let line of lines) { - line = line.trim(); - if (line && line.indexOf('=') !== -1 && !line.startsWith('#')) { - const [key, ...value] = line.split('='); - envVars[key] = value.join('=').replace(/(^"|"$)/g, ''); - } - } - return envVars; - } - catch (err) { - logger.error('Error reading .commando-env file:', err); - return {}; - } -} -export function refreshEnvVariables() { - const envVars = parseEnvFile(APP_CONSTANTS.COMMANDO_CONFIG); - process.env.LIGHTNING_PUBKEY = envVars.LIGHTNING_PUBKEY; - process.env.COMMANDO_RUNE = envVars.LIGHTNING_RUNE; - process.env.INVOICE_RUNE = envVars.INVOICE_RUNE || ''; - APP_CONSTANTS.NODE_PUBKEY = envVars.LIGHTNING_PUBKEY; - APP_CONSTANTS.COMMANDO_RUNE = envVars.LIGHTNING_RUNE; - APP_CONSTANTS.INVOICE_RUNE = envVars.INVOICE_RUNE || ''; - LN_MESSAGE_CONFIG.remoteNodePublicKey = envVars.LIGHTNING_PUBKEY; - GRPC_CONFIG.pubkey = envVars.LIGHTNING_PUBKEY; - if (APP_CONSTANTS.LIGHTNING_CERTS_PATH === '') { - APP_CONSTANTS.LIGHTNING_CERTS_PATH = - APP_CONSTANTS.LIGHTNING_PATH + sep + APP_CONSTANTS.BITCOIN_NETWORK + sep; - } - let clientKey = ''; - let clientCert = ''; - let caCert = ''; - if (fs.existsSync('package.json')) { - const packageData = Buffer.from(fs.readFileSync('package.json')).toString(); - APP_CONSTANTS.APP_VERSION = JSON.parse(packageData).version; - } - if (fs.existsSync(APP_CONSTANTS.LIGHTNING_CERTS_PATH + 'client-key.pem')) { - clientKey = fs.readFileSync(APP_CONSTANTS.LIGHTNING_CERTS_PATH + 'client-key.pem').toString(); - APP_CONSTANTS.CLIENT_KEY = clientKey - .replace(/(\r\n|\n|\r)/gm, '') - .replace('-----BEGIN PRIVATE KEY-----', '') - .replace('-----END PRIVATE KEY-----', ''); - } - if (fs.existsSync(APP_CONSTANTS.LIGHTNING_CERTS_PATH + 'client.pem')) { - clientCert = fs.readFileSync(APP_CONSTANTS.LIGHTNING_CERTS_PATH + 'client.pem').toString(); - APP_CONSTANTS.CLIENT_CERT = clientCert - .replace(/(\r\n|\n|\r)/gm, '') - .replace('-----BEGIN CERTIFICATE-----', '') - .replace('-----END CERTIFICATE-----', ''); - } - if (fs.existsSync(APP_CONSTANTS.LIGHTNING_CERTS_PATH + 'ca.pem')) { - caCert = fs.readFileSync(APP_CONSTANTS.LIGHTNING_CERTS_PATH + 'ca.pem').toString(); - APP_CONSTANTS.CA_CERT = caCert - .replace(/(\r\n|\n|\r)/gm, '') - .replace('-----BEGIN CERTIFICATE-----', '') - .replace('-----END CERTIFICATE-----', ''); - } -} diff --git a/apps/backend/eslint.config.js b/apps/backend/eslint.config.js index c3249e00..acb94d32 100644 --- a/apps/backend/eslint.config.js +++ b/apps/backend/eslint.config.js @@ -17,7 +17,6 @@ export default [ rules: { '@typescript-eslint/explicit-function-return-type': 'off', '@typescript-eslint/no-explicit-any': 'off', - '@typescript-eslint/no-unused-vars': 'off', }, }, ]; diff --git a/apps/backend/package.json b/apps/backend/package.json index 18c09c6a..c8803685 100755 --- a/apps/backend/package.json +++ b/apps/backend/package.json @@ -1,6 +1,6 @@ { "name": "cln-application-backend", - "version": "0.0.7", + "version": "0.0.8", "description": "Core lightning application backend", "private": true, "license": "MIT", diff --git a/apps/backend/source/controllers/auth.ts b/apps/backend/source/controllers/auth.ts index 6499cbb1..bbf4bf41 100644 --- a/apps/backend/source/controllers/auth.ts +++ b/apps/backend/source/controllers/auth.ts @@ -8,8 +8,8 @@ import handleError from '../shared/error-handler.js'; import { verifyPassword, isAuthenticated, isValidPassword } from '../shared/utils.js'; import { AuthError } from '../models/errors.js'; -class AuthController { - userLogin(req: Request, res: Response, next: NextFunction) { +export class AuthController { + userLogin = async (req: Request, res: Response, next: NextFunction) => { logger.info('Logging in'); try { const vpRes = verifyPassword(req.body.password); @@ -25,9 +25,9 @@ class AuthController { } catch (error: any) { handleError(error, req, res, next); } - } + }; - userLogout(req: Request, res: Response, next: NextFunction) { + userLogout = async (req: Request, res: Response, next: NextFunction) => { try { logger.info('Logging out'); res.clearCookie('token'); @@ -35,9 +35,9 @@ class AuthController { } catch (error: any) { handleError(error, req, res, next); } - } + }; - resetPassword(req: Request, res: Response, next: NextFunction) { + resetPassword = async (req: Request, res: Response, next: NextFunction) => { try { logger.info('Resetting password'); const isValid = req.body.isValid; @@ -76,14 +76,14 @@ class AuthController { } catch (error: any) { handleError(error, req, res, next); } - } + }; - isUserAuthenticated(req: Request, res: Response, next: NextFunction) { + isUserAuthenticated = async (req: Request, res: Response, next: NextFunction) => { try { const uaRes = isAuthenticated(req.cookies.token); if (req.body.returnResponse) { // Frontend is asking if user is authenticated or not - if (APP_CONSTANTS.SINGLE_SIGN_ON === 'true') { + if (APP_CONSTANTS.APP_SINGLE_SIGN_ON === 'true') { return res.status(201).json({ isAuthenticated: true, isValidPassword: true }); } else { const vpRes = isValidPassword(); @@ -99,7 +99,7 @@ class AuthController { } } else { // Backend APIs are asking if user is authenticated or not - if (uaRes === true || APP_CONSTANTS.SINGLE_SIGN_ON === 'true') { + if (uaRes === true || APP_CONSTANTS.APP_SINGLE_SIGN_ON === 'true') { return next(); } else { return res.status(401).json({ error: 'Unauthorized user' }); @@ -108,7 +108,5 @@ class AuthController { } catch (error: any) { handleError(error, req, res, next); } - } + }; } - -export default new AuthController(); diff --git a/apps/backend/source/controllers/lightning.ts b/apps/backend/source/controllers/lightning.ts index 46f929b1..16c4da01 100755 --- a/apps/backend/source/controllers/lightning.ts +++ b/apps/backend/source/controllers/lightning.ts @@ -1,16 +1,20 @@ import { Request, Response, NextFunction } from 'express'; import handleError from '../shared/error-handler.js'; -import { CLNService, LightningService } from '../service/lightning.service.js'; +import { LightningService } from '../service/lightning.service.js'; import { logger } from '../shared/logger.js'; import { AppConnect, APP_CONSTANTS } from '../shared/consts.js'; -const clnService: LightningService = CLNService; +export class LightningController { + private clnService: LightningService; -class LightningController { - callMethod(req: Request, res: Response, next: NextFunction) { + constructor(clnService: LightningService) { + this.clnService = clnService; + } + + callMethod = async (req: Request, res: Response, next: NextFunction) => { try { logger.info('Calling method: ' + req.body.method); - clnService + this.clnService .call(req.body.method, req.body.params) .then((commandRes: any) => { logger.info( @@ -25,7 +29,7 @@ class LightningController { req.body.method === 'listpeers' ) { // Filter out ln message pubkey from peers list - const lnmPubkey = clnService.getLNMsgPubkey(); + const lnmPubkey = this.clnService.getLNMsgPubkey(); commandRes.peers = commandRes.peers.filter((peer: any) => peer.id !== lnmPubkey); res.status(200).json(commandRes); } else { @@ -44,7 +48,5 @@ class LightningController { } catch (error: any) { return handleError(error, req, res, next); } - } + }; } - -export default new LightningController(); diff --git a/apps/backend/source/controllers/shared.ts b/apps/backend/source/controllers/shared.ts index 5a234869..bc4187d2 100644 --- a/apps/backend/source/controllers/shared.ts +++ b/apps/backend/source/controllers/shared.ts @@ -12,15 +12,24 @@ import { import { logger } from '../shared/logger.js'; import handleError from '../shared/error-handler.js'; import { APIError } from '../models/errors.js'; -import { addServerConfig, refreshEnvVariables } from '../shared/utils.js'; -import { CLNService } from '../service/lightning.service.js'; +import { addServerConfig, setEnvVariables } from '../shared/utils.js'; import { ShowRunes } from '../models/showrunes.type.js'; +import { LightningService } from '../service/lightning.service.js'; -class SharedController { - getApplicationSettings(req: Request, res: Response, next: NextFunction) { +export class SharedController { + private clnService: LightningService; + + constructor(clnService: LightningService) { + this.clnService = clnService; + } + + getApplicationSettings = async (req: Request, res: Response, next: NextFunction) => { try { logger.info('Getting Application Settings from ' + APP_CONSTANTS.APP_CONFIG_FILE); if (!fs.existsSync(APP_CONSTANTS.APP_CONFIG_FILE)) { + logger.warning( + `Config file ${APP_CONSTANTS.APP_CONFIG_FILE} not found. Creating default config.`, + ); fs.writeFileSync( APP_CONSTANTS.APP_CONFIG_FILE, JSON.stringify(DEFAULT_CONFIG, null, 2), @@ -39,9 +48,9 @@ class SharedController { } catch (error: any) { handleError(error, req, res, next); } - } + }; - setApplicationSettings(req: Request, res: Response, next: NextFunction) { + setApplicationSettings = async (req: Request, res: Response, next: NextFunction) => { try { logger.info('Updating Application Settings: ' + JSON.stringify(req.body)); const config = JSON.parse(fs.readFileSync(APP_CONSTANTS.APP_CONFIG_FILE, 'utf-8')); @@ -55,19 +64,19 @@ class SharedController { } catch (error: any) { handleError(error, req, res, next); } - } + }; - getWalletConnectSettings(req: Request, res: Response, next: NextFunction) { + getWalletConnectSettings = async (req: Request, res: Response, next: NextFunction) => { try { logger.info('Getting Connection Settings'); - refreshEnvVariables(); + setEnvVariables(); res.status(200).json(APP_CONSTANTS); } catch (error: any) { handleError(error, req, res, next); } - } + }; - getFiatRate(req: Request, res: Response, next: NextFunction) { + getFiatRate = async (req: Request, res: Response, next: NextFunction) => { try { logger.info('Getting Fiat Rate for: ' + req.params.fiatCurrency); const FIAT_VENUE = FIAT_VENUES.hasOwnProperty(req.params.fiatCurrency) @@ -94,12 +103,12 @@ class SharedController { } catch (error: any) { handleError(error, req, res, next); } - } + }; - async saveInvoiceRune(req: Request, res: Response, next: NextFunction) { + saveInvoiceRune = async (req: Request, res: Response, next: NextFunction) => { try { logger.info('Saving Invoice Rune'); - const showRunes: ShowRunes = await CLNService.call('showrunes', []); + const showRunes: ShowRunes = await this.clnService.call('showrunes', []); const invoiceRune = showRunes.runes.find( rune => rune.restrictions.some(restriction => @@ -109,9 +118,9 @@ class SharedController { restriction.alternatives.some(alternative => alternative.value === 'listinvoices'), ), ); - if (invoiceRune && fs.existsSync(APP_CONSTANTS.COMMANDO_CONFIG)) { + if (invoiceRune && fs.existsSync(APP_CONSTANTS.LIGHTNING_VARS_FILE)) { const invoiceRuneString = `INVOICE_RUNE="${invoiceRune.rune}"\n`; - fs.appendFileSync(APP_CONSTANTS.COMMANDO_CONFIG, invoiceRuneString, 'utf-8'); + fs.appendFileSync(APP_CONSTANTS.LIGHTNING_VARS_FILE, invoiceRuneString, 'utf-8'); res.status(201).send(); } else { throw new Error('Invoice rune not found or .commando-env does not exist.'); @@ -119,7 +128,5 @@ class SharedController { } catch (error: any) { handleError(error, req, res, next); } - } + }; } - -export default new SharedController(); diff --git a/apps/backend/source/routes/v1/auth.ts b/apps/backend/source/routes/v1/auth.ts index db81a786..f2336231 100644 --- a/apps/backend/source/routes/v1/auth.ts +++ b/apps/backend/source/routes/v1/auth.ts @@ -1,6 +1,6 @@ import express from 'express'; import { CommonRoutesConfig } from '../../shared/routes.config.js'; -import AuthController from '../../controllers/auth.js'; +import { AuthController } from '../../controllers/auth.js'; import { API_VERSION } from '../../shared/consts.js'; const AUTH_ROUTE = '/auth'; @@ -11,12 +11,13 @@ export class AuthRoutes extends CommonRoutesConfig { } configureRoutes() { - this.app.route(API_VERSION + AUTH_ROUTE + '/logout/').get(AuthController.userLogout); - this.app.route(API_VERSION + AUTH_ROUTE + '/login/').post(AuthController.userLogin); - this.app.route(API_VERSION + AUTH_ROUTE + '/reset/').post(AuthController.resetPassword); + const authController = new AuthController(); + this.app.route(API_VERSION + AUTH_ROUTE + '/logout/').get(authController.userLogout); + this.app.route(API_VERSION + AUTH_ROUTE + '/login/').post(authController.userLogin); + this.app.route(API_VERSION + AUTH_ROUTE + '/reset/').post(authController.resetPassword); this.app .route(API_VERSION + AUTH_ROUTE + '/isauthenticated/') - .post(AuthController.isUserAuthenticated); + .post(authController.isUserAuthenticated); return this.app; } } diff --git a/apps/backend/source/routes/v1/lightning.ts b/apps/backend/source/routes/v1/lightning.ts index 60177eb4..04a43171 100755 --- a/apps/backend/source/routes/v1/lightning.ts +++ b/apps/backend/source/routes/v1/lightning.ts @@ -1,20 +1,27 @@ import express from 'express'; import { CommonRoutesConfig } from '../../shared/routes.config.js'; -import AuthController from '../../controllers/auth.js'; -import LightningController from '../../controllers/lightning.js'; +import { AuthController } from '../../controllers/auth.js'; +import { LightningController } from '../../controllers/lightning.js'; import { API_VERSION } from '../../shared/consts.js'; +import { LightningService } from '../../service/lightning.service.js'; const LIGHTNING_ROOT_ROUTE = '/cln'; export class LightningRoutes extends CommonRoutesConfig { - constructor(app: express.Application) { + private clnService: LightningService; + + constructor(app: express.Application, clnService: LightningService) { super(app, 'Lightning Routes'); + this.clnService = clnService; } configureRoutes() { + const authController = new AuthController(); + const lightningController = new LightningController(this.clnService); this.app .route(API_VERSION + LIGHTNING_ROOT_ROUTE + '/call') - .post(AuthController.isUserAuthenticated, LightningController.callMethod); + .post(authController.isUserAuthenticated, lightningController.callMethod); + return this.app; } } diff --git a/apps/backend/source/routes/v1/shared.ts b/apps/backend/source/routes/v1/shared.ts index 30cb2079..fe3ba374 100755 --- a/apps/backend/source/routes/v1/shared.ts +++ b/apps/backend/source/routes/v1/shared.ts @@ -1,17 +1,25 @@ import express from 'express'; import { CommonRoutesConfig } from '../../shared/routes.config.js'; -import AuthController from '../../controllers/auth.js'; -import SharedController from '../../controllers/shared.js'; +import { AuthController } from '../../controllers/auth.js'; +import { SharedController } from '../../controllers/shared.js'; import { API_VERSION } from '../../shared/consts.js'; +import { LightningService } from '../../service/lightning.service.js'; const SHARED_ROUTE = '/shared'; export class SharedRoutes extends CommonRoutesConfig { - constructor(app: express.Application) { + private clnService: LightningService; + + constructor(app: express.Application, clnService: LightningService) { super(app, 'Shared Routes'); + this.clnService = clnService; } configureRoutes() { + const authController = new AuthController(); + const sharedController = new SharedController(this.clnService); + + // eslint-disable-next-line @typescript-eslint/no-unused-vars this.app.route(API_VERSION + SHARED_ROUTE + '/csrf/').get((req, res, next) => { res.send({ csrfToken: @@ -20,19 +28,19 @@ export class SharedRoutes extends CommonRoutesConfig { }); this.app .route(API_VERSION + SHARED_ROUTE + '/config/') - .get(SharedController.getApplicationSettings); + .get(sharedController.getApplicationSettings); this.app .route(API_VERSION + SHARED_ROUTE + '/config/') - .post(AuthController.isUserAuthenticated, SharedController.setApplicationSettings); + .post(authController.isUserAuthenticated, sharedController.setApplicationSettings); this.app .route(API_VERSION + SHARED_ROUTE + '/connectwallet/') - .get(AuthController.isUserAuthenticated, SharedController.getWalletConnectSettings); + .get(authController.isUserAuthenticated, sharedController.getWalletConnectSettings); this.app .route(API_VERSION + SHARED_ROUTE + '/rate/:fiatCurrency') - .get(SharedController.getFiatRate); + .get(sharedController.getFiatRate); this.app .route(API_VERSION + SHARED_ROUTE + '/saveinvoicerune/') - .post(AuthController.isUserAuthenticated, SharedController.saveInvoiceRune); + .post(authController.isUserAuthenticated, sharedController.saveInvoiceRune); return this.app; } } diff --git a/apps/backend/source/server.ts b/apps/backend/source/server.ts index 23a20d23..d6d39e35 100755 --- a/apps/backend/source/server.ts +++ b/apps/backend/source/server.ts @@ -16,18 +16,19 @@ import { AuthRoutes } from './routes/v1/auth.js'; import { APIError } from './models/errors.js'; import { APP_CONSTANTS, Environment, HttpStatusCode } from './shared/consts.js'; import handleError from './shared/error-handler.js'; +import { LightningService } from './service/lightning.service.js'; const directoryName = dirname(fileURLToPath(import.meta.url)); const routes: Array = []; -const app: express.Application = express(); -const server: http.Server = http.createServer(app); +export const app: express.Application = express(); +export const server: http.Server = http.createServer(app); -const LIGHTNING_PORT = normalizePort(process.env.APP_PORT || '2103'); -const APP_IP = process.env.APP_IP || 'localhost'; +const APP_PORT = normalizePort(process.env.APP_PORT || '2103'); +const APP_HOST = process.env.APP_HOST || 'localhost'; const APP_PROTOCOL = process.env.APP_PROTOCOL || 'http'; -function normalizePort(val: string) { +export function normalizePort(val: string) { const port = parseInt(val, 10); if (isNaN(port)) { return val; @@ -51,12 +52,13 @@ app.use((req, res, next) => { ); next(); }); + const corsOptions = { methods: 'GET, POST, PATCH, PUT, DELETE, OPTIONS', origin: APP_CONSTANTS.APP_MODE === Environment.PRODUCTION - ? APP_PROTOCOL + '://' + APP_IP + ':' + LIGHTNING_PORT - : APP_PROTOCOL + '://localhost:4300', + ? `${APP_PROTOCOL}://${APP_HOST}:${APP_PORT}` + : `${APP_PROTOCOL}://localhost:4300`, credentials: true, allowedHeaders: 'Content-Type, X-XSRF-TOKEN, XSRF-TOKEN', }; @@ -65,44 +67,81 @@ app.use(cors(corsOptions)); app.use(expressWinston.logger(expressLogConfiguration)); app.use(expressWinston.errorLogger(expressLogConfiguration)); -routes.push(new AuthRoutes(app)); -routes.push(new SharedRoutes(app)); -routes.push(new LightningRoutes(app)); - -// serve frontend -app.use('/', express.static(join(directoryName, '..', '..', 'frontend', 'build'))); -app.use((req: express.Request, res: express.Response, next: any) => { - res.sendFile(join(directoryName, '..', '..', 'frontend', 'build', 'index.html')); -}); - -app.use((err: any, req: express.Request, res: express.Response, next: any) => { - return handleError(throwApiError(err), req, res, next); -}); - -const throwApiError = (err: any) => { - logger.error('Server error: ' + err); +export const throwApiError = (err: any) => { switch (err.code) { case 'EACCES': return new APIError( HttpStatusCode.ACCESS_DENIED, - APP_PROTOCOL + '://' + APP_IP + ':' + LIGHTNING_PORT + ' requires elevated privileges', + `${APP_PROTOCOL}://${APP_HOST}:${APP_PORT} requires elevated privileges`, ); case 'EADDRINUSE': return new APIError( HttpStatusCode.ADDR_IN_USE, - APP_PROTOCOL + '://' + APP_IP + ':' + LIGHTNING_PORT + ' is already in use', + `${APP_PROTOCOL}://${APP_HOST}:${APP_PORT} is already in use`, ); case 'ECONNREFUSED': return new APIError(HttpStatusCode.UNAUTHORIZED, 'Server is down/locked'); case 'EBADCSRFTOKEN': return new APIError(HttpStatusCode.BAD_CSRF_TOKEN, 'Invalid CSRF token. Form tempered.'); default: - return new APIError(400, 'Default: ' + JSON.stringify(err)); + return new APIError(HttpStatusCode.BAD_REQUEST, err?.message || err); } }; -server.on('error', throwApiError); -server.on('listening', () => - logger.warn('Server running at ' + APP_PROTOCOL + '://' + APP_IP + ':' + LIGHTNING_PORT), -); -server.listen({ port: LIGHTNING_PORT, host: APP_IP }); +async function startServer() { + try { + const clnService = new LightningService(); + + const authRoutes = new AuthRoutes(app); + const sharedRoutes = new SharedRoutes(app, clnService); + const lightningRoutes = new LightningRoutes(app, clnService); + + authRoutes.configureRoutes(); + sharedRoutes.configureRoutes(); + lightningRoutes.configureRoutes(); + + routes.push(authRoutes, sharedRoutes, lightningRoutes); + + // serve frontend + app.use('/', express.static(join(directoryName, '..', '..', 'frontend', 'build'))); + // eslint-disable-next-line @typescript-eslint/no-unused-vars + app.use((req: express.Request, res: express.Response, next: any) => { + res.sendFile(join(directoryName, '..', '..', 'frontend', 'build', 'index.html')); + }); + + // Global error handler for requests + app.use((err: any, req: express.Request, res: express.Response, next: any) => { + return handleError(throwApiError(err), req, res, next); + }); + + server.on('error', (err: any) => { + if (err.code) { + logger.error('On Server Error: ', err); + } else { + logger.error('On Server Error: ', throwApiError(err)); + } + process.exit(1); + }); + + server.on('listening', () => + logger.warn(`Server running at ${APP_PROTOCOL}://${APP_HOST}:${APP_PORT}`), + ); + + server.listen({ port: APP_PORT, host: APP_HOST }); + } catch (err: any) { + if (err.code) { + logger.error('Server Startup Error: ', err); + } else { + logger.error('Server Startup Error: ', throwApiError(err)); + } + process.exit(1); + } +} + +startServer(); + +process.on('uncaughtException', err => { + logger.error('I M HERE'); + logger.error('Uncaught Exception:', err); + process.exit(1); +}); diff --git a/apps/backend/source/service/grpc.service.ts b/apps/backend/source/service/grpc.service.ts index 9fe85b56..ce32fcc1 100644 --- a/apps/backend/source/service/grpc.service.ts +++ b/apps/backend/source/service/grpc.service.ts @@ -1,27 +1,36 @@ +import * as crypto from 'crypto'; import axios, { AxiosHeaders } from 'axios'; -import * as path from 'path'; -import fs from 'fs'; import https from 'https'; import protobuf from 'protobufjs'; -import { HttpStatusCode, GRPC_CONFIG, APP_CONSTANTS } from '../shared/consts.js'; +import { HttpStatusCode } from '../shared/consts.js'; import { GRPCError } from '../models/errors.js'; import { logger } from '../shared/logger.js'; export class GRPCService { private authPubkey: string; private authSignature: string; - private protoPath: string[]; - private clnNode: protobuf.Root; + private clnNode!: protobuf.Root; private axiosConfig: any; - constructor(grpcConfig: { pubkey: string; url: string }) { - this.authSignature = 'A'.repeat(64); + constructor(grpcConfig: { + pubkey: string; + url: string; + protoPath: string; + grpcClientKey: string; + grpcClientCert: string; + grpcCaCert: string; + }) { + this.authSignature = crypto.randomBytes(32).toString('hex'); this.authPubkey = Buffer.from(grpcConfig.pubkey, 'hex').toString('base64'); - this.protoPath = [ - path.resolve(process.cwd(), './proto/node.proto'), - path.resolve(process.cwd(), './proto/primitives.proto'), - ]; - this.clnNode = protobuf.Root.fromJSON(protobuf.loadSync(this.protoPath).toJSON()); + this.loadLightningProtos(grpcConfig.protoPath) + .then(protoRes => { + logger.info('gRPC Protos loaded successfully'); + this.clnNode = protoRes; + }) + .catch(error => { + logger.error('Failed to load gRPC Protos: ', error); + throw new GRPCError(HttpStatusCode.GRPC_UNKNOWN, 'Failed to load gRPC Protos'); + }); const headers = new AxiosHeaders(); headers.set('content-type', 'application/grpc'); headers.set('accept', 'application/grpc'); @@ -32,16 +41,47 @@ export class GRPCService { baseURL: `${grpcConfig.url}/cln.Node/`, headers, }; - if (APP_CONSTANTS.LIGHTNING_GRPC_PROTOCOL === 'https') { - const httpsAgent = new https.Agent({ - cert: fs.readFileSync(path.join(APP_CONSTANTS.LIGHTNING_CERTS_PATH || '.', 'client.pem')), - key: fs.readFileSync( - path.join(APP_CONSTANTS.LIGHTNING_CERTS_PATH || '.', 'client-key.pem'), - ), - ca: fs.readFileSync(path.join(APP_CONSTANTS.LIGHTNING_CERTS_PATH || '.', 'ca.pem')), + this.axiosConfig.httpsAgent = new https.Agent({ + key: grpcConfig.grpcClientKey, + cert: grpcConfig.grpcClientCert, + ca: grpcConfig.grpcCaCert, + }); + } + + private loadLightningProtos(protoPath: string): Promise { + return axios + .get(protoPath) + .then(response => { + const files = response.data; + const protoFiles = files.filter( + (file: any) => file.name.endsWith('.proto') && file.type === 'file', + ); + + if (protoFiles.length === 0) { + logger.error('No proto files found in the directory.'); + throw new Error('No proto files found in the directory.'); + } + + return Promise.all( + protoFiles.map((file: any) => + axios + .get(file.download_url) + .then(rawResponse => rawResponse.data) + .catch(error => { + logger.error(`Failed to fetch ${file.name}:`, error); + throw error; + }), + ), + ); + }) + .then(protoContents => { + const parsed = protobuf.parse(protoContents.join('\n')); + return protobuf.Root.fromJSON(parsed.root.toJSON()); + }) + .catch(error => { + logger.error('Failed to load proto files:', error); + throw error; }); - this.axiosConfig.httpsAgent = httpsAgent; - } } private static getGrpcStatusMessages(method: string): Record { @@ -323,19 +363,8 @@ export class GRPCService { public async callMethod(methodName: string, reqPayload: object): Promise { if (methodName?.toLowerCase() === 'bkpr-listaccountevents') { - let data = {}; - if ( - GRPC_CONFIG.pubkey === '0279da9a93e50b008a7ba6bd25355fb7132f5015b790a05ee9f41bc9fbdeb30d19' - ) { - data = JSON.parse( - await fs.readFileSync(path.join(process.cwd(), '../../data/dummy/node-1.json'), 'utf8'), - )['bkpr-listaccountevents']; - } else { - data = JSON.parse( - await fs.readFileSync(path.join(process.cwd(), '../../data/dummy/node-3.json'), 'utf8'), - )['bkpr-listaccountevents']; - } - return data; + // Bookkeeper is not available in gRPC, so we return an empty object till it is implemented + return {}; } else { const [method, capitalizedMethod] = this.convertMethodName(methodName); reqPayload = this.transformPayload(capitalizedMethod, reqPayload); diff --git a/apps/backend/source/service/lightning.service.ts b/apps/backend/source/service/lightning.service.ts index df3ec4c2..54f1c68d 100755 --- a/apps/backend/source/service/lightning.service.ts +++ b/apps/backend/source/service/lightning.service.ts @@ -1,10 +1,8 @@ -import * as fs from 'fs'; import * as crypto from 'crypto'; -import { join } from 'path'; import https from 'https'; import axios, { AxiosHeaders } from 'axios'; import Lnmessage from 'lnmessage'; -import { GRPCError, LightningError } from '../models/errors.js'; +import { GRPCError, LightningError, ValidationError } from '../models/errors.js'; import { GRPCService } from './grpc.service.js'; import { HttpStatusCode, @@ -15,33 +13,50 @@ import { GRPC_CONFIG, } from '../shared/consts.js'; import { logger } from '../shared/logger.js'; -import { refreshEnvVariables } from '../shared/utils.js'; +import { setEnvVariables, validateEnvVariables } from '../shared/utils.js'; export class LightningService { private clnService: any = null; + private axiosConfig: any = { + baseURL: '', + headers: {}, + httpsAgent: null, + }; constructor() { try { - logger.info('Getting Commando Rune'); - if (fs.existsSync(APP_CONSTANTS.COMMANDO_CONFIG)) { - refreshEnvVariables(); - switch (APP_CONSTANTS.APP_CONNECT) { - case AppConnect.REST: - logger.info('REST connecting with config: ' + JSON.stringify(REST_CONFIG)); - break; - case AppConnect.GRPC: - logger.info('GRPC connecting with config: ' + JSON.stringify(GRPC_CONFIG)); - this.clnService = new GRPCService(GRPC_CONFIG); - break; - default: - logger.info('lnMessage connecting with config: ' + JSON.stringify(LN_MESSAGE_CONFIG)); - this.clnService = new Lnmessage(LN_MESSAGE_CONFIG); - this.clnService.connect(); - break; - } + setEnvVariables(); + validateEnvVariables(); + } catch (error: any) { + throw new ValidationError(HttpStatusCode.INVALID_DATA, error); + } + try { + logger.info('Strating Lightning Service with APP_CONNECT: ' + APP_CONSTANTS.APP_CONNECT); + switch (APP_CONSTANTS.APP_CONNECT) { + case AppConnect.REST: + logger.info('REST connecting with config: ' + JSON.stringify(REST_CONFIG)); + const headers = new AxiosHeaders(); + headers.set('rune', REST_CONFIG.rune); + this.axiosConfig = { + baseURL: REST_CONFIG.url + '/v1/', + headers, + }; + if (APP_CONSTANTS.LIGHTNING_REST_PROTOCOL === 'https') { + this.axiosConfig.httpsAgent = new https.Agent({ ca: REST_CONFIG.restCaCert }); + } + break; + case AppConnect.GRPC: + logger.info('GRPC connecting with config: ' + JSON.stringify(GRPC_CONFIG)); + this.clnService = new GRPCService(GRPC_CONFIG); + break; + default: + logger.info('lnMessage connecting with config: ' + JSON.stringify(LN_MESSAGE_CONFIG)); + this.clnService = new Lnmessage(LN_MESSAGE_CONFIG); + this.clnService.connect(); + break; } } catch (error: any) { - logger.error('Failed to read rune for Commando connection: ' + JSON.stringify(error)); + logger.error('Failed to construct lightning service: ' + JSON.stringify(error)); throw error; } } @@ -53,21 +68,8 @@ export class LightningService { call = async (method: string, methodParams: any[]) => { switch (APP_CONSTANTS.APP_CONNECT) { case AppConnect.REST: - const headers = new AxiosHeaders(); - headers.set('rune', APP_CONSTANTS.COMMANDO_RUNE); - const axiosConfig: any = { - baseURL: REST_CONFIG.url + '/v1/', - headers, - }; - if (APP_CONSTANTS.LIGHTNING_REST_PROTOCOL === 'https') { - const caCert = fs.readFileSync(join(APP_CONSTANTS.LIGHTNING_CERTS_PATH || '.', 'ca.pem')); - const httpsAgent = new https.Agent({ - ca: caCert, - }); - axiosConfig.httpsAgent = httpsAgent; - } return axios - .post(method, methodParams, axiosConfig) + .post(method, methodParams, this.axiosConfig) .then((commandRes: any) => { logger.info('REST response for ' + method + ': ' + JSON.stringify(commandRes.data)); return Promise.resolve(commandRes.data); @@ -98,7 +100,7 @@ export class LightningService { .commando({ method: method, params: methodParams, - rune: APP_CONSTANTS.COMMANDO_RUNE, + rune: APP_CONSTANTS.ADMIN_RUNE, reqId: crypto.randomBytes(8).toString('hex'), reqIdPrefix: 'clnapp', }) @@ -119,5 +121,3 @@ export class LightningService { } }; } - -export const CLNService = new LightningService(); diff --git a/apps/backend/source/shared/consts.ts b/apps/backend/source/shared/consts.ts index 52cb4c2e..73f109b2 100755 --- a/apps/backend/source/shared/consts.ts +++ b/apps/backend/source/shared/consts.ts @@ -1,5 +1,6 @@ import * as crypto from 'crypto'; -import { join } from 'path'; +import WebSocket from 'ws'; +import fs from 'fs'; export enum Environment { PRODUCTION = 'production', @@ -13,10 +14,6 @@ export enum AppConnect { GRPC = 'GRPC', } -export enum NodeType { - CLN = 'CLN', -} - export enum HttpStatusCode { GET_OK = 200, POST_OK = 201, @@ -36,53 +33,102 @@ export enum HttpStatusCode { export const SECRET_KEY = crypto.randomBytes(64).toString('hex'); +export const DEFAULT_ENV_VALUES = { + APP_SINGLE_SIGN_ON: 'false', + BITCOIN_HOST: 'localhost', + BITCOIN_NETWORK: 'bitcoin', + APP_PROTOCOL: 'http', + APP_HOST: 'localhost', + APP_PORT: '2103', + APP_CONFIG_FILE: './config.json', + APP_LOG_FILE: './application-cln.log', + APP_MODE: Environment.PRODUCTION, + APP_CONNECT: AppConnect.COMMANDO, + LIGHTNING_DATA_DIR: '', + LIGHTNING_HOST: 'localhost', + LIGHTNING_TOR_HOST: '', + LIGHTNING_VARS_FILE: './.commando-env', + LIGHTNING_WS_PROTOCOL: 'ws', + LIGHTNING_WS_PORT: 5001, + LIGHTNING_WS_CLIENT_KEY_FILE: './client-key.pem', + LIGHTNING_WS_CLIENT_CERT_FILE: './client.pem', + LIGHTNING_WS_CA_CERT_FILE: './ca.pem', + LIGHTNING_REST_PROTOCOL: 'https', + LIGHTNING_REST_HOST: 'localhost', + LIGHTNING_REST_TOR_HOST: '', + LIGHTNING_REST_PORT: 3010, + LIGHTNING_REST_CLIENT_KEY_FILE: './client-key.pem', + LIGHTNING_REST_CLIENT_CERT_FILE: './client.pem', + LIGHTNING_REST_CA_CERT_FILE: './ca.pem', + LIGHTNING_GRPC_HOST: 'localhost', + LIGHTNING_GRPC_TOR_HOST: '', + LIGHTNING_GRPC_PORT: 9736, + LIGHTNING_GRPC_PROTO_PATH: + 'https://github.com/ElementsProject/lightning/tree/master/cln-grpc/proto', + LIGHTNING_GRPC_CLIENT_KEY_FILE: './client-key.pem', + LIGHTNING_GRPC_CLIENT_CERT_FILE: './client.pem', + LIGHTNING_GRPC_CA_CERT_FILE: './ca.pem', +}; + export const APP_CONSTANTS = { - SINGLE_SIGN_ON: process.env.SINGLE_SIGN_ON || 'false', - LOCAL_HOST: process.env.LOCAL_HOST || '', - DEVICE_DOMAIN_NAME: process.env.DEVICE_DOMAIN_NAME || '', - BITCOIN_NODE_IP: process.env.BITCOIN_NODE_IP || 'localhost', - BITCOIN_NETWORK: process.env.BITCOIN_NETWORK || 'bitcoin', - APP_CONFIG_FILE: join(process.env.APP_CONFIG_DIR || '.', 'config.json'), - APP_LOG_FILE: join(process.env.APP_CONFIG_DIR || '.', 'application-cln.log'), - APP_MODE: process.env.APP_MODE || Environment.PRODUCTION, - APP_CONNECT: process.env.APP_CONNECT || AppConnect.COMMANDO, - APP_PROTOCOL: process.env.APP_PROTOCOL || 'http', - APP_IP: process.env.APP_IP || 'localhost', - APP_PORT: process.env.APP_PORT || '2103', - LIGHTNING_IP: process.env.LIGHTNING_IP || process.env.APP_CORE_LIGHTNING_DAEMON_IP || 'localhost', - LIGHTNING_PATH: process.env.LIGHTNING_PATH || '', - HIDDEN_SERVICE_URL: process.env.HIDDEN_SERVICE_URL || '', - LIGHTNING_NODE_TYPE: process.env.LIGHTNING_NODE_TYPE || NodeType.CLN, - COMMANDO_CONFIG: process.env.COMMANDO_CONFIG || './.commando-env', - LIGHTNING_WS_PORT: +( - process.env.LIGHTNING_WEBSOCKET_PORT || - process.env.APP_CORE_LIGHTNING_WEBSOCKET_PORT || - 5001 - ), + APP_SINGLE_SIGN_ON: process.env.APP_SINGLE_SIGN_ON || DEFAULT_ENV_VALUES.APP_SINGLE_SIGN_ON, + BITCOIN_HOST: process.env.BITCOIN_HOST || DEFAULT_ENV_VALUES.BITCOIN_HOST, + BITCOIN_NETWORK: process.env.BITCOIN_NETWORK || DEFAULT_ENV_VALUES.BITCOIN_NETWORK, + APP_PROTOCOL: process.env.APP_PROTOCOL || DEFAULT_ENV_VALUES.APP_PROTOCOL, + APP_HOST: process.env.APP_HOST || DEFAULT_ENV_VALUES.APP_HOST, + APP_PORT: process.env.APP_PORT || DEFAULT_ENV_VALUES.APP_PORT, + APP_CONFIG_FILE: process.env.APP_CONFIG_FILE || DEFAULT_ENV_VALUES.APP_CONFIG_FILE, + APP_LOG_FILE: process.env.APP_LOG_FILE || DEFAULT_ENV_VALUES.APP_LOG_FILE, + APP_MODE: process.env.APP_MODE || DEFAULT_ENV_VALUES.APP_MODE, + APP_CONNECT: process.env.APP_CONNECT || DEFAULT_ENV_VALUES.APP_CONNECT, + LIGHTNING_DATA_DIR: process.env.LIGHTNING_DATA_DIR || DEFAULT_ENV_VALUES.LIGHTNING_DATA_DIR, + LIGHTNING_HOST: process.env.LIGHTNING_HOST || DEFAULT_ENV_VALUES.LIGHTNING_HOST, + LIGHTNING_TOR_HOST: process.env.LIGHTNING_TOR_HOST || DEFAULT_ENV_VALUES.LIGHTNING_TOR_HOST, + LIGHTNING_VARS_FILE: process.env.LIGHTNING_VARS_FILE || DEFAULT_ENV_VALUES.LIGHTNING_VARS_FILE, + LIGHTNING_WS_PROTOCOL: + process.env.LIGHTNING_WS_PROTOCOL || DEFAULT_ENV_VALUES.LIGHTNING_WS_PROTOCOL, + LIGHTNING_WS_PORT: +(process.env.LIGHTNING_WS_PORT || DEFAULT_ENV_VALUES.LIGHTNING_WS_PORT), + LIGHTNING_WS_CLIENT_KEY_FILE: + process.env.LIGHTNING_WS_CLIENT_KEY_FILE || DEFAULT_ENV_VALUES.LIGHTNING_WS_CLIENT_KEY_FILE, + LIGHTNING_WS_CLIENT_CERT_FILE: + process.env.LIGHTNING_WS_CLIENT_CERT_FILE || DEFAULT_ENV_VALUES.LIGHTNING_WS_CLIENT_CERT_FILE, + LIGHTNING_WS_CA_CERT_FILE: + process.env.LIGHTNING_WS_CA_CERT_FILE || DEFAULT_ENV_VALUES.LIGHTNING_WS_CA_CERT_FILE, LIGHTNING_REST_PROTOCOL: - process.env.LIGHTNING_REST_PROTOCOL || process.env.APP_CORE_LIGHTNING_REST_PROTOCOL || 'https', - LIGHTNING_REST_PORT: +( - process.env.LIGHTNING_REST_PORT || - process.env.APP_CORE_LIGHTNING_REST_PORT || - 3010 - ), - LIGHTNING_CERTS_PATH: process.env.LIGHTNING_CERTS_PATH || '', - LIGHTNING_GRPC_PROTOCOL: - process.env.LIGHTNING_GRPC_PROTOCOL || - process.env.APP_CORE_LIGHTNING_DAEMON_GRPC_PROTOCOL || - 'http', - LIGHTNING_GRPC_PORT: +( - process.env.LIGHTNING_GRPC_PORT || - process.env.APP_CORE_LIGHTNING_DAEMON_GRPC_PORT || - 9736 + process.env.LIGHTNING_REST_PROTOCOL || DEFAULT_ENV_VALUES.LIGHTNING_REST_PROTOCOL, + LIGHTNING_REST_HOST: process.env.LIGHTNING_REST_HOST || DEFAULT_ENV_VALUES.LIGHTNING_REST_HOST, + LIGHTNING_REST_TOR_HOST: + process.env.LIGHTNING_REST_TOR_HOST || DEFAULT_ENV_VALUES.LIGHTNING_REST_TOR_HOST, + LIGHTNING_REST_PORT: +(process.env.LIGHTNING_REST_PORT || DEFAULT_ENV_VALUES.LIGHTNING_REST_PORT), + LIGHTNING_REST_CLIENT_KEY_FILE: + process.env.LIGHTNING_REST_CLIENT_KEY_FILE || DEFAULT_ENV_VALUES.LIGHTNING_REST_CLIENT_KEY_FILE, + LIGHTNING_REST_CLIENT_CERT_FILE: + process.env.LIGHTNING_REST_CLIENT_CERT_FILE || + DEFAULT_ENV_VALUES.LIGHTNING_REST_CLIENT_CERT_FILE, + LIGHTNING_REST_CA_CERT_FILE: + process.env.LIGHTNING_REST_CA_CERT_FILE || DEFAULT_ENV_VALUES.LIGHTNING_REST_CA_CERT_FILE, + LIGHTNING_GRPC_HOST: process.env.LIGHTNING_GRPC_HOST || DEFAULT_ENV_VALUES.LIGHTNING_GRPC_HOST, + LIGHTNING_GRPC_TOR_HOST: + process.env.LIGHTNING_GRPC_TOR_HOST || DEFAULT_ENV_VALUES.LIGHTNING_GRPC_TOR_HOST, + LIGHTNING_GRPC_PORT: +(process.env.LIGHTNING_GRPC_PORT || DEFAULT_ENV_VALUES.LIGHTNING_GRPC_PORT), + LIGHTNING_GRPC_PROTO_PATH: encodeURIComponent( + process.env.LIGHTNING_GRPC_PROTO_PATH || DEFAULT_ENV_VALUES.LIGHTNING_GRPC_PROTO_PATH, ), + LIGHTNING_GRPC_CLIENT_KEY_FILE: + process.env.LIGHTNING_GRPC_CLIENT_KEY_FILE || DEFAULT_ENV_VALUES.LIGHTNING_GRPC_CLIENT_KEY_FILE, + LIGHTNING_GRPC_CLIENT_CERT_FILE: + process.env.LIGHTNING_GRPC_CLIENT_CERT_FILE || + DEFAULT_ENV_VALUES.LIGHTNING_GRPC_CLIENT_CERT_FILE, + LIGHTNING_GRPC_CA_CERT_FILE: + process.env.LIGHTNING_GRPC_CA_CERT_FILE || DEFAULT_ENV_VALUES.LIGHTNING_GRPC_CA_CERT_FILE, + // Not added by the user APP_VERSION: '', NODE_PUBKEY: '', - COMMANDO_RUNE: '', + ADMIN_RUNE: '', INVOICE_RUNE: '', - CLIENT_KEY: '', - CLIENT_CERT: '', - CA_CERT: '', + LIGHTNING_WS_TLS_CERTS: '', + LIGHTNING_REST_TLS_CERTS: '', + LIGHTNING_GRPC_TLS_CERTS: '', }; export const DEFAULT_CONFIG = { @@ -95,42 +141,72 @@ export const DEFAULT_CONFIG = { password: '', }; +class SecureWebSocket extends WebSocket { + constructor(url: string) { + const options = { + rejectUnauthorized: false, + cert: fs.readFileSync(APP_CONSTANTS.LIGHTNING_WS_CLIENT_CERT_FILE), + key: fs.readFileSync(APP_CONSTANTS.LIGHTNING_WS_CLIENT_KEY_FILE), + }; + super(url, options); + } +} + +if ( + APP_CONSTANTS.LIGHTNING_WS_PROTOCOL === 'wss' && + typeof (globalThis as any).WebSocket === 'undefined' +) { + (globalThis as any).WebSocket = SecureWebSocket; +} + export const LN_MESSAGE_CONFIG = { remoteNodePublicKey: '', - wsProxy: 'ws://' + APP_CONSTANTS.LIGHTNING_IP + ':' + APP_CONSTANTS.LIGHTNING_WS_PORT, - ip: APP_CONSTANTS.LIGHTNING_IP, + wsProxy: + APP_CONSTANTS.LIGHTNING_WS_PROTOCOL + + '://' + + APP_CONSTANTS.LIGHTNING_HOST + + ':' + + APP_CONSTANTS.LIGHTNING_WS_PORT, + ip: APP_CONSTANTS.LIGHTNING_HOST, port: APP_CONSTANTS.LIGHTNING_WS_PORT, privateKey: crypto.randomBytes(32).toString('hex'), + socket: (url: string) => + APP_CONSTANTS.LIGHTNING_WS_PROTOCOL === 'wss' ? new SecureWebSocket(url) : new WebSocket(url), logger: { info: APP_CONSTANTS.APP_MODE === Environment.PRODUCTION ? () => {} : console.info, warn: APP_CONSTANTS.APP_MODE === Environment.PRODUCTION ? () => {} : console.warn, error: console.error, }, -}; - -export const GRPC_CONFIG = { - pubkey: APP_CONSTANTS.NODE_PUBKEY, - protocol: APP_CONSTANTS.LIGHTNING_GRPC_PROTOCOL, - ip: APP_CONSTANTS.LIGHTNING_IP, - port: APP_CONSTANTS.LIGHTNING_GRPC_PORT, - url: - APP_CONSTANTS.LIGHTNING_GRPC_PROTOCOL + - '://' + - APP_CONSTANTS.LIGHTNING_IP + - ':' + - APP_CONSTANTS.LIGHTNING_GRPC_PORT, + wssClientKey: '', + wssClientCert: '', + wssCaCert: '', }; export const REST_CONFIG = { protocol: APP_CONSTANTS.LIGHTNING_REST_PROTOCOL, - ip: APP_CONSTANTS.LIGHTNING_IP, + ip: APP_CONSTANTS.LIGHTNING_REST_HOST, port: APP_CONSTANTS.LIGHTNING_REST_PORT, url: APP_CONSTANTS.LIGHTNING_REST_PROTOCOL + '://' + - APP_CONSTANTS.LIGHTNING_IP + + APP_CONSTANTS.LIGHTNING_REST_HOST + ':' + APP_CONSTANTS.LIGHTNING_REST_PORT, + rune: '', + restClientKey: '', + restClientCert: '', + restCaCert: '', +}; + +export const GRPC_CONFIG = { + pubkey: APP_CONSTANTS.NODE_PUBKEY, + ip: APP_CONSTANTS.LIGHTNING_GRPC_HOST, + port: APP_CONSTANTS.LIGHTNING_GRPC_PORT, + url: 'https://' + APP_CONSTANTS.LIGHTNING_GRPC_HOST + ':' + APP_CONSTANTS.LIGHTNING_GRPC_PORT, + protoPath: APP_CONSTANTS.LIGHTNING_GRPC_PROTO_PATH, + grpcClientKey: '', + grpcClientCert: '', + grpcCaCert: '', }; export const API_VERSION = '/v1'; diff --git a/apps/backend/source/shared/error-handler.ts b/apps/backend/source/shared/error-handler.ts index 130bdadf..4c46a8d0 100644 --- a/apps/backend/source/shared/error-handler.ts +++ b/apps/backend/source/shared/error-handler.ts @@ -14,6 +14,7 @@ function handleError( error: BaseError | APIError | BitcoindError | LightningError | ValidationError | GRPCError, req: Request, res: Response, + // eslint-disable-next-line @typescript-eslint/no-unused-vars next?: NextFunction, ) { const route = req.url || ''; diff --git a/apps/backend/source/shared/logger.ts b/apps/backend/source/shared/logger.ts index cbf732ac..194913d6 100644 --- a/apps/backend/source/shared/logger.ts +++ b/apps/backend/source/shared/logger.ts @@ -1,6 +1,14 @@ +import fs from 'fs'; +import path from 'path'; import winston from 'winston'; import { Environment, APP_CONSTANTS } from './consts.js'; +const logDir = path.dirname(APP_CONSTANTS.APP_LOG_FILE); + +if (!fs.existsSync(logDir)) { + fs.mkdirSync(logDir, { recursive: true }); +} + export const enum LogLevel { ERROR = 'error', WARN = 'warn', @@ -19,6 +27,10 @@ export const logConfiguration = { ? LogLevel.DEBUG : LogLevel.INFO, format: winston.format.combine( + winston.format(info => { + if (info.stack) delete info.stack; + return info; + })(), winston.format.timestamp({ format: 'YYYY-MM-DD HH:mm:ss:ms' }), winston.format.timestamp(), winston.format.align(), @@ -27,13 +39,15 @@ export const logConfiguration = { ), }), new winston.transports.File({ - filename: APP_CONSTANTS.APP_LOG_FILE, + filename: path.basename(APP_CONSTANTS.APP_LOG_FILE), + dirname: logDir, + maxsize: 5 * 1024 * 1024, level: APP_CONSTANTS.APP_MODE === Environment.PRODUCTION - ? LogLevel.WARN + ? LogLevel.DEBUG : APP_CONSTANTS.APP_MODE === Environment.TESTING ? LogLevel.DEBUG - : LogLevel.INFO, + : LogLevel.DEBUG, format: winston.format.combine( winston.format.timestamp({ format: 'YYYY-MM-DD HH:mm:ss:ms' }), winston.format.timestamp(), diff --git a/apps/backend/source/shared/routes.config.ts b/apps/backend/source/shared/routes.config.ts index 2ed2c27f..18c15e53 100644 --- a/apps/backend/source/shared/routes.config.ts +++ b/apps/backend/source/shared/routes.config.ts @@ -7,7 +7,6 @@ export abstract class CommonRoutesConfig { constructor(app: express.Application, name: string) { this.app = app; this.name = name; - this.configureRoutes(); } getName() { diff --git a/apps/backend/source/shared/utils.ts b/apps/backend/source/shared/utils.ts index 9713ba19..34d4ffe3 100644 --- a/apps/backend/source/shared/utils.ts +++ b/apps/backend/source/shared/utils.ts @@ -1,8 +1,15 @@ import jwt from 'jsonwebtoken'; import * as fs from 'fs'; -import { sep } from 'path'; import { logger } from '../shared/logger.js'; -import { APP_CONSTANTS, GRPC_CONFIG, LN_MESSAGE_CONFIG, SECRET_KEY } from '../shared/consts.js'; +import { + APP_CONSTANTS, + GRPC_CONFIG, + REST_CONFIG, + LN_MESSAGE_CONFIG, + SECRET_KEY, + AppConnect, + DEFAULT_ENV_VALUES, +} from '../shared/consts.js'; export function addServerConfig(config: any) { config.serverConfig = { @@ -10,8 +17,7 @@ export function addServerConfig(config: any) { appPort: APP_CONSTANTS.APP_PORT, appProtocol: APP_CONSTANTS.APP_PROTOCOL, appVersion: APP_CONSTANTS.APP_VERSION, - lightningNodeType: APP_CONSTANTS.LIGHTNING_NODE_TYPE, - singleSignOn: APP_CONSTANTS.SINGLE_SIGN_ON, + singleSignOn: APP_CONSTANTS.APP_SINGLE_SIGN_ON, }; return config; } @@ -87,46 +93,174 @@ function parseEnvFile(filePath: string): { [key: string]: string } { } } -export function refreshEnvVariables() { - const envVars = parseEnvFile(APP_CONSTANTS.COMMANDO_CONFIG); - process.env.LIGHTNING_PUBKEY = envVars.LIGHTNING_PUBKEY; - process.env.COMMANDO_RUNE = envVars.LIGHTNING_RUNE; - process.env.INVOICE_RUNE = envVars.INVOICE_RUNE || ''; - APP_CONSTANTS.NODE_PUBKEY = envVars.LIGHTNING_PUBKEY; - APP_CONSTANTS.COMMANDO_RUNE = envVars.LIGHTNING_RUNE; - APP_CONSTANTS.INVOICE_RUNE = envVars.INVOICE_RUNE || ''; - LN_MESSAGE_CONFIG.remoteNodePublicKey = envVars.LIGHTNING_PUBKEY; - GRPC_CONFIG.pubkey = envVars.LIGHTNING_PUBKEY; - if (APP_CONSTANTS.LIGHTNING_CERTS_PATH === '') { - APP_CONSTANTS.LIGHTNING_CERTS_PATH = - APP_CONSTANTS.LIGHTNING_PATH + sep + APP_CONSTANTS.BITCOIN_NETWORK + sep; - } - let clientKey = ''; - let clientCert = ''; - let caCert = ''; +export function setEnvVariables() { + if (fs.existsSync(APP_CONSTANTS.LIGHTNING_VARS_FILE)) { + const configVars = parseEnvFile(APP_CONSTANTS.LIGHTNING_VARS_FILE); + process.env.NODE_PUBKEY = configVars.LIGHTNING_PUBKEY || ''; + process.env.ADMIN_RUNE = configVars.LIGHTNING_RUNE || ''; + process.env.INVOICE_RUNE = configVars.INVOICE_RUNE || ''; + APP_CONSTANTS.NODE_PUBKEY = configVars.LIGHTNING_PUBKEY || ''; + APP_CONSTANTS.ADMIN_RUNE = configVars.LIGHTNING_RUNE || ''; + APP_CONSTANTS.INVOICE_RUNE = configVars.INVOICE_RUNE || ''; + LN_MESSAGE_CONFIG.remoteNodePublicKey = configVars.LIGHTNING_PUBKEY || ''; + GRPC_CONFIG.pubkey = configVars.LIGHTNING_PUBKEY; + REST_CONFIG.rune = configVars.LIGHTNING_RUNE || ''; + } if (fs.existsSync('package.json')) { const packageData = Buffer.from(fs.readFileSync('package.json')).toString(); APP_CONSTANTS.APP_VERSION = JSON.parse(packageData).version; } - if (fs.existsSync(APP_CONSTANTS.LIGHTNING_CERTS_PATH + 'client-key.pem')) { - clientKey = fs.readFileSync(APP_CONSTANTS.LIGHTNING_CERTS_PATH + 'client-key.pem').toString(); - APP_CONSTANTS.CLIENT_KEY = clientKey - .replace(/(\r\n|\n|\r)/gm, '') - .replace('-----BEGIN PRIVATE KEY-----', '') - .replace('-----END PRIVATE KEY-----', ''); - } - if (fs.existsSync(APP_CONSTANTS.LIGHTNING_CERTS_PATH + 'client.pem')) { - clientCert = fs.readFileSync(APP_CONSTANTS.LIGHTNING_CERTS_PATH + 'client.pem').toString(); - APP_CONSTANTS.CLIENT_CERT = clientCert - .replace(/(\r\n|\n|\r)/gm, '') - .replace('-----BEGIN CERTIFICATE-----', '') - .replace('-----END CERTIFICATE-----', ''); - } - if (fs.existsSync(APP_CONSTANTS.LIGHTNING_CERTS_PATH + 'ca.pem')) { - caCert = fs.readFileSync(APP_CONSTANTS.LIGHTNING_CERTS_PATH + 'ca.pem').toString(); - APP_CONSTANTS.CA_CERT = caCert - .replace(/(\r\n|\n|\r)/gm, '') - .replace('-----BEGIN CERTIFICATE-----', '') - .replace('-----END CERTIFICATE-----', ''); + try { + if (APP_CONSTANTS.LIGHTNING_WS_PROTOCOL === 'wss') { + if (fs.existsSync(APP_CONSTANTS.LIGHTNING_WS_CLIENT_KEY_FILE)) { + LN_MESSAGE_CONFIG.wssClientKey = fs + .readFileSync(APP_CONSTANTS.LIGHTNING_WS_CLIENT_KEY_FILE) + .toString(); + } + if (fs.existsSync(APP_CONSTANTS.LIGHTNING_WS_CLIENT_CERT_FILE)) { + LN_MESSAGE_CONFIG.wssClientCert = fs + .readFileSync(APP_CONSTANTS.LIGHTNING_WS_CLIENT_CERT_FILE) + .toString(); + } + if (fs.existsSync(APP_CONSTANTS.LIGHTNING_WS_CA_CERT_FILE)) { + LN_MESSAGE_CONFIG.wssCaCert = fs + .readFileSync(APP_CONSTANTS.LIGHTNING_WS_CA_CERT_FILE) + .toString(); + } + } + APP_CONSTANTS.LIGHTNING_WS_TLS_CERTS = encodeURIComponent( + btoa( + `client_key: ${LN_MESSAGE_CONFIG.wssClientKey}\nclient_cert: ${LN_MESSAGE_CONFIG.wssClientCert}\nca_cert: ${LN_MESSAGE_CONFIG.wssCaCert}`, + ), + ); + } catch (error: any) { + logger.error('Error reading wss proxy certs: ', error); + } + try { + if (APP_CONSTANTS.LIGHTNING_REST_PROTOCOL === 'https') { + if (fs.existsSync(APP_CONSTANTS.LIGHTNING_REST_CLIENT_KEY_FILE)) { + REST_CONFIG.restClientKey = fs + .readFileSync(APP_CONSTANTS.LIGHTNING_REST_CLIENT_KEY_FILE) + .toString(); + } + if (fs.existsSync(APP_CONSTANTS.LIGHTNING_REST_CLIENT_CERT_FILE)) { + REST_CONFIG.restClientCert = fs + .readFileSync(APP_CONSTANTS.LIGHTNING_REST_CLIENT_CERT_FILE) + .toString(); + } + if (fs.existsSync(APP_CONSTANTS.LIGHTNING_REST_CA_CERT_FILE)) { + REST_CONFIG.restCaCert = fs + .readFileSync(APP_CONSTANTS.LIGHTNING_REST_CA_CERT_FILE) + .toString(); + } + APP_CONSTANTS.LIGHTNING_REST_TLS_CERTS = encodeURIComponent( + btoa( + `client_key: ${REST_CONFIG.restClientKey}\nclient_cert: ${REST_CONFIG.restClientCert}\nca_cert: ${REST_CONFIG.restCaCert}`, + ), + ); + } + } catch (error: any) { + logger.error('Error reading REST certs: ', error); + } + try { + if (fs.existsSync(APP_CONSTANTS.LIGHTNING_GRPC_CLIENT_KEY_FILE)) { + GRPC_CONFIG.grpcClientKey = fs + .readFileSync(APP_CONSTANTS.LIGHTNING_GRPC_CLIENT_KEY_FILE) + .toString(); + } + if (fs.existsSync(APP_CONSTANTS.LIGHTNING_GRPC_CLIENT_CERT_FILE)) { + GRPC_CONFIG.grpcClientCert = fs + .readFileSync(APP_CONSTANTS.LIGHTNING_GRPC_CLIENT_CERT_FILE) + .toString(); + } + if (fs.existsSync(APP_CONSTANTS.LIGHTNING_GRPC_CA_CERT_FILE)) { + GRPC_CONFIG.grpcCaCert = fs + .readFileSync(APP_CONSTANTS.LIGHTNING_GRPC_CA_CERT_FILE) + .toString(); + } + APP_CONSTANTS.LIGHTNING_GRPC_TLS_CERTS = encodeURIComponent( + btoa( + `client_key: ${GRPC_CONFIG.grpcClientKey}\nclient_cert: ${GRPC_CONFIG.grpcClientCert}\nca_cert: ${GRPC_CONFIG.grpcCaCert}`, + ), + ); + } catch (error: any) { + logger.error('Error reading gRPC certs: ', error); + } + logger.info('Environment variables set successfully'); +} + +export function validateCommandoConfig() { + if (LN_MESSAGE_CONFIG.remoteNodePublicKey === '') { + throw `Node Public Key is not set for Commando connection. Fix LIGHTNING_PUBKEY in ${APP_CONSTANTS.LIGHTNING_VARS_FILE}.`; + } + if (APP_CONSTANTS.ADMIN_RUNE === '') { + throw `Rune is not set for Commando connection. Fix LIGHTNING_RUNE in ${APP_CONSTANTS.LIGHTNING_VARS_FILE}.`; + } + if (APP_CONSTANTS.LIGHTNING_WS_PROTOCOL === 'wss') { + if (LN_MESSAGE_CONFIG.wssClientKey === '') { + throw `Missing or Invalid WSS Client Key at ${APP_CONSTANTS.LIGHTNING_WS_CLIENT_KEY_FILE}.`; + } + if (LN_MESSAGE_CONFIG.wssClientCert === '') { + throw `Missing or Invalid WSS Client Certificate at ${APP_CONSTANTS.LIGHTNING_WS_CLIENT_CERT_FILE}.`; + } + } +} + +export function validateRestConfig() { + if (APP_CONSTANTS.ADMIN_RUNE === '') { + throw `Rune is not set for REST connection. Fix LIGHTNING_RUNE in ${APP_CONSTANTS.LIGHTNING_VARS_FILE}.`; + } + if (APP_CONSTANTS.LIGHTNING_REST_PROTOCOL === 'https' && REST_CONFIG.restCaCert === '') { + throw `Missing or Invalid REST Ca Certificate at ${APP_CONSTANTS.LIGHTNING_REST_CA_CERT_FILE}.`; + } +} + +export function validateGrpcConfig() { + if (GRPC_CONFIG.pubkey === '') { + throw `Node Public Key is not set for GRPC connection. Fix LIGHTNING_PUBKEY in ${APP_CONSTANTS.LIGHTNING_VARS_FILE}.`; + } + if (GRPC_CONFIG.grpcClientKey === '') { + throw `Missing or Invalid gRPC Client Key at ${APP_CONSTANTS.LIGHTNING_GRPC_CLIENT_KEY_FILE}.`; + } + if (GRPC_CONFIG.grpcClientCert === '') { + throw `Missing or Invalid gRPC Client Certificate at ${APP_CONSTANTS.LIGHTNING_GRPC_CLIENT_CERT_FILE}.`; + } + if (GRPC_CONFIG.grpcCaCert === '') { + throw `Missing or Invalid gRPC Ca Certificate at ${APP_CONSTANTS.LIGHTNING_GRPC_CA_CERT_FILE}.`; + } +} + +export function logDefaultValues() { + for (const [key, value] of Object.entries(DEFAULT_ENV_VALUES)) { + const envKey = key as keyof typeof APP_CONSTANTS; + if (!process.env[envKey] && APP_CONSTANTS[envKey] === value) { + logger.warn( + `${key} is defaulting to '${value}'. Configure as environment variable to override.`, + ); + } + } +} + +export function validateEnvVariables() { + if (!fs.existsSync(APP_CONSTANTS.LIGHTNING_VARS_FILE)) { + throw `LIGHTNING_VARS_FILE ${APP_CONSTANTS.LIGHTNING_VARS_FILE} does not exist. Create a file with the required variables LIGHTNING_PUBKEY and LIGHTNING_RUNE. See https://github.com/ElementsProject/cln-application?tab=readme-ov-file#commando-authentication for more details.`; + } + if (APP_CONSTANTS.NODE_PUBKEY === '') { + throw `LIGHTNING_PUBKEY is not set in ${APP_CONSTANTS.LIGHTNING_VARS_FILE} file.`; + } + if (APP_CONSTANTS.ADMIN_RUNE === '') { + throw `LIGHTNING_RUNE is not set in ${APP_CONSTANTS.LIGHTNING_VARS_FILE} file.`; + } + switch (APP_CONSTANTS.APP_CONNECT) { + case AppConnect.REST: + validateRestConfig(); + break; + case AppConnect.GRPC: + validateGrpcConfig(); + break; + default: + validateCommandoConfig(); + break; } + logDefaultValues(); } diff --git a/apps/frontend/build/asset-manifest.json b/apps/frontend/build/asset-manifest.json deleted file mode 100644 index 72d47457..00000000 --- a/apps/frontend/build/asset-manifest.json +++ /dev/null @@ -1,43 +0,0 @@ -{ - "files": { - "main.css": "/static/css/main.94b1eb52.css", - "main.js": "/static/js/main.07a60e9b.js", - "static/css/687.19b1d4d6.chunk.css": "/static/css/687.19b1d4d6.chunk.css", - "static/js/687.c6039462.chunk.js": "/static/js/687.c6039462.chunk.js", - "static/css/648.1c4becff.chunk.css": "/static/css/648.1c4becff.chunk.css", - "static/js/648.6b3a5a0d.chunk.js": "/static/js/648.6b3a5a0d.chunk.js", - "static/css/78.93e26be7.chunk.css": "/static/css/78.93e26be7.chunk.css", - "static/js/78.c368a490.chunk.js": "/static/js/78.c368a490.chunk.js", - "static/js/813.cdbe58bb.chunk.js": "/static/js/813.cdbe58bb.chunk.js", - "static/js/213.6d084fd7.chunk.js": "/static/js/213.6d084fd7.chunk.js", - "static/js/768.59f5d13d.chunk.js": "/static/js/768.59f5d13d.chunk.js", - "static/css/880.70c3ebe7.chunk.css": "/static/css/880.70c3ebe7.chunk.css", - "static/js/880.cd8c8d95.chunk.js": "/static/js/880.cd8c8d95.chunk.js", - "static/js/400.868d8ca3.chunk.js": "/static/js/400.868d8ca3.chunk.js", - "static/js/408.da49cbb1.chunk.js": "/static/js/408.da49cbb1.chunk.js", - "static/media/Inter-Bold.ttf": "/static/media/Inter-Bold.88fa7ae373b07b41ecce.ttf", - "static/media/Inter-SemiBold.ttf": "/static/media/Inter-SemiBold.4d56bb21f2399db8ad48.ttf", - "static/media/Inter-Medium.ttf": "/static/media/Inter-Medium.6dcbc9bed1ec438907ee.ttf", - "static/media/Inter-Thin.ttf": "/static/media/Inter-Thin.f341ca512063c66296d1.ttf", - "index.html": "/index.html", - "main.94b1eb52.css.map": "/static/css/main.94b1eb52.css.map", - "main.07a60e9b.js.map": "/static/js/main.07a60e9b.js.map", - "687.19b1d4d6.chunk.css.map": "/static/css/687.19b1d4d6.chunk.css.map", - "687.c6039462.chunk.js.map": "/static/js/687.c6039462.chunk.js.map", - "648.1c4becff.chunk.css.map": "/static/css/648.1c4becff.chunk.css.map", - "648.6b3a5a0d.chunk.js.map": "/static/js/648.6b3a5a0d.chunk.js.map", - "78.93e26be7.chunk.css.map": "/static/css/78.93e26be7.chunk.css.map", - "78.c368a490.chunk.js.map": "/static/js/78.c368a490.chunk.js.map", - "813.cdbe58bb.chunk.js.map": "/static/js/813.cdbe58bb.chunk.js.map", - "213.6d084fd7.chunk.js.map": "/static/js/213.6d084fd7.chunk.js.map", - "768.59f5d13d.chunk.js.map": "/static/js/768.59f5d13d.chunk.js.map", - "880.70c3ebe7.chunk.css.map": "/static/css/880.70c3ebe7.chunk.css.map", - "880.cd8c8d95.chunk.js.map": "/static/js/880.cd8c8d95.chunk.js.map", - "400.868d8ca3.chunk.js.map": "/static/js/400.868d8ca3.chunk.js.map", - "408.da49cbb1.chunk.js.map": "/static/js/408.da49cbb1.chunk.js.map" - }, - "entrypoints": [ - "static/css/main.94b1eb52.css", - "static/js/main.07a60e9b.js" - ] -} \ No newline at end of file diff --git a/apps/frontend/build/fonts/Inter-Bold.ttf b/apps/frontend/build/fonts/Inter-Bold.ttf deleted file mode 100644 index 8e82c70d..00000000 Binary files a/apps/frontend/build/fonts/Inter-Bold.ttf and /dev/null differ diff --git a/apps/frontend/build/fonts/Inter-Medium.ttf b/apps/frontend/build/fonts/Inter-Medium.ttf deleted file mode 100644 index b53fb1c4..00000000 Binary files a/apps/frontend/build/fonts/Inter-Medium.ttf and /dev/null differ diff --git a/apps/frontend/build/fonts/Inter-Regular.ttf b/apps/frontend/build/fonts/Inter-Regular.ttf deleted file mode 100644 index 8d4eebf2..00000000 Binary files a/apps/frontend/build/fonts/Inter-Regular.ttf and /dev/null differ diff --git a/apps/frontend/build/fonts/Inter-SemiBold.ttf b/apps/frontend/build/fonts/Inter-SemiBold.ttf deleted file mode 100644 index c6aeeb16..00000000 Binary files a/apps/frontend/build/fonts/Inter-SemiBold.ttf and /dev/null differ diff --git a/apps/frontend/build/fonts/Inter-Thin.ttf b/apps/frontend/build/fonts/Inter-Thin.ttf deleted file mode 100644 index 7aed55d5..00000000 Binary files a/apps/frontend/build/fonts/Inter-Thin.ttf and /dev/null differ diff --git a/apps/frontend/build/fonts/OFL.txt b/apps/frontend/build/fonts/OFL.txt deleted file mode 100644 index ad214842..00000000 --- a/apps/frontend/build/fonts/OFL.txt +++ /dev/null @@ -1,93 +0,0 @@ -Copyright 2020 The Inter Project Authors (https://github.com/rsms/inter) - -This Font Software is licensed under the SIL Open Font License, Version 1.1. -This license is copied below, and is also available with a FAQ at: -http://scripts.sil.org/OFL - - ------------------------------------------------------------ -SIL OPEN FONT LICENSE Version 1.1 - 26 February 2007 ------------------------------------------------------------ - -PREAMBLE -The goals of the Open Font License (OFL) are to stimulate worldwide -development of collaborative font projects, to support the font creation -efforts of academic and linguistic communities, and to provide a free and -open framework in which fonts may be shared and improved in partnership -with others. - -The OFL allows the licensed fonts to be used, studied, modified and -redistributed freely as long as they are not sold by themselves. The -fonts, including any derivative works, can be bundled, embedded, -redistributed and/or sold with any software provided that any reserved -names are not used by derivative works. The fonts and derivatives, -however, cannot be released under any other type of license. The -requirement for fonts to remain under this license does not apply -to any document created using the fonts or their derivatives. - -DEFINITIONS -"Font Software" refers to the set of files released by the Copyright -Holder(s) under this license and clearly marked as such. This may -include source files, build scripts and documentation. - -"Reserved Font Name" refers to any names specified as such after the -copyright statement(s). - -"Original Version" refers to the collection of Font Software components as -distributed by the Copyright Holder(s). - -"Modified Version" refers to any derivative made by adding to, deleting, -or substituting -- in part or in whole -- any of the components of the -Original Version, by changing formats or by porting the Font Software to a -new environment. - -"Author" refers to any designer, engineer, programmer, technical -writer or other person who contributed to the Font Software. - -PERMISSION & CONDITIONS -Permission is hereby granted, free of charge, to any person obtaining -a copy of the Font Software, to use, study, copy, merge, embed, modify, -redistribute, and sell modified and unmodified copies of the Font -Software, subject to the following conditions: - -1) Neither the Font Software nor any of its individual components, -in Original or Modified Versions, may be sold by itself. - -2) Original or Modified Versions of the Font Software may be bundled, -redistributed and/or sold with any software, provided that each copy -contains the above copyright notice and this license. These can be -included either as stand-alone text files, human-readable headers or -in the appropriate machine-readable metadata fields within text or -binary files as long as those fields can be easily viewed by the user. - -3) No Modified Version of the Font Software may use the Reserved Font -Name(s) unless explicit written permission is granted by the corresponding -Copyright Holder. This restriction only applies to the primary font name as -presented to the users. - -4) The name(s) of the Copyright Holder(s) or the Author(s) of the Font -Software shall not be used to promote, endorse or advertise any -Modified Version, except to acknowledge the contribution(s) of the -Copyright Holder(s) and the Author(s) or with their explicit written -permission. - -5) The Font Software, modified or unmodified, in part or in whole, -must be distributed entirely under this license, and must not be -distributed under any other license. The requirement for fonts to -remain under this license does not apply to any document created -using the Font Software. - -TERMINATION -This license becomes null and void if any of the above conditions are -not met. - -DISCLAIMER -THE FONT SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OF -MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT -OF COPYRIGHT, PATENT, TRADEMARK, OR OTHER RIGHT. IN NO EVENT SHALL THE -COPYRIGHT HOLDER BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, -INCLUDING ANY GENERAL, SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL -DAMAGES, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING -FROM, OUT OF THE USE OR INABILITY TO USE THE FONT SOFTWARE OR FROM -OTHER DEALINGS IN THE FONT SOFTWARE. diff --git a/apps/frontend/build/fonts/README.txt b/apps/frontend/build/fonts/README.txt deleted file mode 100644 index 3078f199..00000000 --- a/apps/frontend/build/fonts/README.txt +++ /dev/null @@ -1,72 +0,0 @@ -Inter Variable Font -=================== - -This download contains Inter as both a variable font and static fonts. - -Inter is a variable font with these axes: - slnt - wght - -This means all the styles are contained in a single file: - Inter-VariableFont_slnt,wght.ttf - -If your app fully supports variable fonts, you can now pick intermediate styles -that aren’t available as static fonts. Not all apps support variable fonts, and -in those cases you can use the static font files for Inter: - static/Inter-Thin.ttf - static/Inter-ExtraLight.ttf - static/Inter-Light.ttf - static/Inter-Regular.ttf - static/Inter-Medium.ttf - static/Inter-SemiBold.ttf - static/Inter-Bold.ttf - static/Inter-ExtraBold.ttf - static/Inter-Black.ttf - -Get started ------------ - -1. Install the font files you want to use - -2. Use your app's font picker to view the font family and all the -available styles - -Learn more about variable fonts -------------------------------- - - https://developers.google.com/web/fundamentals/design-and-ux/typography/variable-fonts - https://variablefonts.typenetwork.com - https://medium.com/variable-fonts - -In desktop apps - - https://theblog.adobe.com/can-variable-fonts-illustrator-cc - https://helpx.adobe.com/nz/photoshop/using/fonts.html#variable_fonts - -Online - - https://developers.google.com/fonts/docs/getting_started - https://developer.mozilla.org/en-US/docs/Web/CSS/CSS_Fonts/Variable_Fonts_Guide - https://developer.microsoft.com/en-us/microsoft-edge/testdrive/demos/variable-fonts - -Installing fonts - - MacOS: https://support.apple.com/en-us/HT201749 - Linux: https://www.google.com/search?q=how+to+install+a+font+on+gnu%2Blinux - Windows: https://support.microsoft.com/en-us/help/314960/how-to-install-or-remove-a-font-in-windows - -Android Apps - - https://developers.google.com/fonts/docs/android - https://developer.android.com/guide/topics/ui/look-and-feel/downloadable-fonts - -License -------- -Please read the full license text (OFL.txt) to understand the permissions, -restrictions and requirements for usage, redistribution, and modification. - -You can use them in your products & projects – print or digital, -commercial or otherwise. - -This isn't legal advice, please consider consulting a lawyer and see the full -license for all details. diff --git a/apps/frontend/build/images/cln-favicon.ico b/apps/frontend/build/images/cln-favicon.ico deleted file mode 100644 index 713a76a7..00000000 Binary files a/apps/frontend/build/images/cln-favicon.ico and /dev/null differ diff --git a/apps/frontend/build/images/cln-logo-dark.png b/apps/frontend/build/images/cln-logo-dark.png deleted file mode 100644 index 3410d29f..00000000 Binary files a/apps/frontend/build/images/cln-logo-dark.png and /dev/null differ diff --git a/apps/frontend/build/images/cln-logo-dark.svg b/apps/frontend/build/images/cln-logo-dark.svg deleted file mode 100644 index 41ad23da..00000000 --- a/apps/frontend/build/images/cln-logo-dark.svg +++ /dev/null @@ -1,5 +0,0 @@ - - - - - diff --git a/apps/frontend/build/images/cln-logo-light.png b/apps/frontend/build/images/cln-logo-light.png deleted file mode 100644 index 53e99d4a..00000000 Binary files a/apps/frontend/build/images/cln-logo-light.png and /dev/null differ diff --git a/apps/frontend/build/images/cln-logo-light.svg b/apps/frontend/build/images/cln-logo-light.svg deleted file mode 100644 index 7c641690..00000000 --- a/apps/frontend/build/images/cln-logo-light.svg +++ /dev/null @@ -1,5 +0,0 @@ - - - - - diff --git a/apps/frontend/build/index.html b/apps/frontend/build/index.html deleted file mode 100644 index ed650d12..00000000 --- a/apps/frontend/build/index.html +++ /dev/null @@ -1 +0,0 @@ -Core Lightning
\ No newline at end of file diff --git a/apps/frontend/build/static/css/648.1c4becff.chunk.css b/apps/frontend/build/static/css/648.1c4becff.chunk.css deleted file mode 100644 index 7a4902c3..00000000 --- a/apps/frontend/build/static/css/648.1c4becff.chunk.css +++ /dev/null @@ -1,2 +0,0 @@ -.fiat-box-span .svg-currency{fill:#9f9f9f}.fiat-box-span .svg-inline--fa{display:inline-block;height:.6rem;vertical-align:-1px}.fiat-box-span .svg-inline--fa.fa-lg{height:.75rem}[data-bs-theme=dark] .fiat-box-span .svg-currency{fill:#b7bbc2}.btc-transactions-tabs{border-bottom:.5px solid #dee2e6;padding:0 2rem .25rem .25rem}[data-bs-theme=dark] .btc-transactions-tabs{border-bottom:.5px solid #495057}.btc-transactions-list{cursor:pointer;display:flex;flex-direction:column;height:100%;padding-right:.5rem;transition:all .3s ease}.btc-transactions-list .btc-transaction-header{border:none;border-radius:.675rem;display:flex;flex-direction:column;margin-top:.5rem;padding:.5rem 1rem .5rem .125rem;transition:all .3s ease}.btc-transactions-list .btc-transaction-header.expanded{border-bottom:2px dashed hsla(0,0%,62%,.2);border-bottom-left-radius:0;border-bottom-right-radius:0}.btc-transactions-list .btc-transaction-header:hover{background-color:#ebeff9!important}.btc-transactions-list .btc-transaction-details{background-color:#ebeff9;border-bottom-left-radius:.675rem;border-bottom-right-radius:.675rem;transition:background-color .5s ease}[data-bs-theme=dark] .btc-transactions-list .btc-transaction-header:hover{background-color:#0c0c0f!important}[data-bs-theme=dark] .btc-transactions-list .btc-transaction-details{background-color:#0c0c0f}.btc-transaction-placeholder{transform-origin:top left}.btc-transaction-placeholder .btc-transaction-detail{align-items:center;margin:.5rem}.btc-transaction-placeholder .btc-transaction-copy{align-items:flex-start;cursor:pointer;display:inline-flex;padding:0}.btc-transaction-placeholder .btc-transaction-copy:hover svg path{stroke:#c09c1b}.btc-transaction-placeholder .btc-transaction-open{align-items:flex-start;cursor:pointer;display:inline-flex;padding:0}.btc-transaction-placeholder .btc-transaction-open:hover svg path{fill:#c09c1b}.alert{padding:.75rem}.alert.alert-danger,.alert.alert-success,.alert.alert-warning{transition:all .3s ease}.alert.alert-danger .btn-sm-svg.btn-svg-copy svg path{stroke:#dc3545}.alert.alert-danger .btn-sm-svg.btn-svg-copy svg:hover path{stroke:#7c151f}.alert.alert-success .btn-sm-svg.btn-svg-copy svg path{stroke:#33db95}.alert.alert-success .btn-sm-svg.btn-svg-copy svg:hover path{stroke:#157950}.alert .text-status{max-height:8rem;overflow:hidden}.alert .btn-sm-svg.btn-svg-copy{align-items:flex-start;cursor:pointer;display:inline-flex;padding:0}.slider-container{width:100%}.slider-container .slider-pic{-webkit-appearance:none;appearance:none;background:linear-gradient(90deg,#33db95,#fe8e02,#dc3545);border-radius:.25rem;cursor:pointer;height:.375rem;opacity:.8;outline:none;transition:opacity .5s ease;width:100%}.slider-container .slider-pic:hover{opacity:1}.slider-container .slider-pic::-moz-range-track{background:linear-gradient(90deg,#33db95,#fe8e02,#dc3545)}.slider-container .slider-pic::-webkit-slider-range-thumb{-webkit-appearance:none;appearance:none;background:transparent;cursor:pointer;height:2.5rem;width:2.5rem}.slider-container .slider-pic::-webkit-slider-runnable-track{background-color:transparent}.tooltip.bs-tooltip-top.feerate-tooltip.feerate-tooltip-Slow{left:-6.7vw!important}.tooltip.bs-tooltip-top.feerate-tooltip.feerate-tooltip-Urgent{left:6.7vw!important}.tooltip.bs-tooltip-top.feerate-tooltip .tooltip-inner{margin-bottom:.5rem}.nav.cln-transactions-tabs{border:none;border-bottom:.5px solid #dee2e6}.nav.cln-transactions-tabs .nav-item .nav-link{color:#9f9f9f;padding:0 1rem .25rem .25rem}.nav.cln-transactions-tabs .nav-item .nav-link span{padding:.25rem}.nav.cln-transactions-tabs .nav-item .nav-link.active,.nav.cln-transactions-tabs .nav-item .nav-link:focus,.nav.cln-transactions-tabs .nav-item .nav-link:hover{background-color:transparent}.nav.cln-transactions-tabs .nav-item .nav-link.active span,.nav.cln-transactions-tabs .nav-item .nav-link:focus span,.nav.cln-transactions-tabs .nav-item .nav-link:hover span{border-bottom:2px solid #e1ba2d}[data-bs-theme=dark] .nav.cln-transactions-tabs{border-bottom:.5px solid #495057}[data-bs-theme=dark] .nav.cln-transactions-tabs .nav-item .nav-link{color:#b7bbc2}.cln-transactions-list{cursor:pointer;display:flex;flex-direction:column;height:100%;padding-right:.5rem;transition:all .3s ease}.cln-transactions-list .cln-transaction-header{border:none;border-radius:.675rem;display:flex;flex-direction:column;margin-top:.5rem;padding:.5rem 1rem .5rem .125rem;transition:all .3s ease}.cln-transactions-list .cln-transaction-header.expanded{border-bottom:2px dashed hsla(0,0%,62%,.2);border-bottom-left-radius:0;border-bottom-right-radius:0}.cln-transactions-list .cln-transaction-header:hover{background-color:#ebeff9!important}.cln-transactions-list .cln-transaction-details{background-color:#ebeff9;border-bottom-left-radius:.675rem;border-bottom-right-radius:.675rem;transition:background-color .5s ease}[data-bs-theme=dark] .cln-transactions-list .cln-transaction-header:hover{background-color:#0c0c0f!important}[data-bs-theme=dark] .cln-transactions-list .cln-transaction-details{background-color:#0c0c0f}.cln-transaction-placeholder{transform-origin:top left}.cln-transaction-placeholder .cln-transaction-detail{align-items:center;margin:.5rem}.cln-transaction-placeholder .cln-transaction-copy{align-items:flex-start;cursor:pointer;display:inline-flex;padding:0}.cln-transaction-placeholder .cln-transaction-copy:hover svg path{stroke:#c09c1b}.cln-offers-list{cursor:pointer;height:100%;padding-right:.5rem}.cln-offers-list,.cln-offers-list .cln-offer-header{display:flex;flex-direction:column;transition:all .3s ease}.cln-offers-list .cln-offer-header{border:none;border-radius:.675rem;margin-top:.5rem;padding:.5rem 1rem .5rem .125rem}.cln-offers-list .cln-offer-header.expanded{border-bottom:2px dashed hsla(0,0%,62%,.2);border-bottom-left-radius:0;border-bottom-right-radius:0}.cln-offers-list .cln-offer-header:hover{background-color:#ebeff9!important}.cln-offers-list .cln-offer-details{background-color:#ebeff9;border-bottom-left-radius:.675rem;border-bottom-right-radius:.675rem;transition:background-color .5s ease}[data-bs-theme=dark] .cln-offers-list .cln-offer-header:hover{background-color:#0c0c0f!important}[data-bs-theme=dark] .cln-offers-list .cln-offer-details{background-color:#0c0c0f}.cln-offer-placeholder{transform-origin:top left}.cln-offer-placeholder .cln-offer-detail{align-items:center;margin:.5rem}.cln-offer-placeholder .cln-offer-copy{align-items:flex-start;cursor:pointer;display:inline-flex;padding:0}.cln-offer-placeholder .cln-offer-copy:hover svg path{stroke:#c09c1b}.cln-offer-placeholder .cln-offer-open{align-items:flex-start;cursor:pointer;display:inline-flex;padding:0}.cln-offer-placeholder .cln-offer-open:hover svg path{fill:#c09c1b}.channels-scroll-container{overflow:hidden}.channels-scroll-container .list-channels{transition:background-color .5s ease}.channels-scroll-container .list-channels .list-item-channel{align-items:flex-start;border-radius:.675rem;display:flex;justify-content:space-between;margin-bottom:.5rem;padding:.5rem;transition:background-color .5s ease}.channels-scroll-container .list-channels .list-item-channel.newly-opened{background-color:#ebeff9}.channels-scroll-container .list-channels .list-item-channel:hover{background-color:#ebeff9;cursor:pointer}.channels-scroll-container .list-channels .list-item-channel .progress{height:6px}[data-bs-theme=dark] .channels-scroll-container .list-channels,[data-bs-theme=dark] .channels-scroll-container .list-channels .list-item-channel{transition:background-color .5s ease}[data-bs-theme=dark] .channels-scroll-container .list-channels .list-item-channel.newly-opened,[data-bs-theme=dark] .channels-scroll-container .list-channels .list-item-channel:hover{background-color:#0c0c0f}.channel-scroll-container{max-height:53vh}.channel-scroll-container .progress{height:6px}.channel-scroll-container .btn-sm-svg.btn-svg-copy{align-items:flex-start;cursor:pointer;display:inline-flex;padding:0}.channel-scroll-container .btn-sm-svg.btn-svg-copy:hover svg path{stroke:#c09c1b}.channel-scroll-container .btn-sm-svg.btn-svg-open{align-items:flex-start;cursor:pointer;display:inline-flex;padding:0}.channel-scroll-container .btn-sm-svg.btn-svg-open:hover svg path{fill:#c09c1b}.toast-container .toast{border:1px solid #9f9f9f;border-radius:.5rem;box-shadow:0 8px 16px 0 rgba(58,66,71,.2)}.toast-container .toast.opaque{background-color:#fff}.toast-container .toast .message-type-box{background-color:#9f9f9f;border-bottom-left-radius:.35rem;border-top-left-radius:.35rem}.toast-container .toast span.btn-toast-close{cursor:pointer;padding:.5rem}.toast-container .toast span.btn-toast-close svg{height:.75rem;width:.75rem}.toast-container .toast span.btn-toast-close svg path{transition:all .3s ease}.toast-container .toast span.btn-toast-close:hover svg path{stroke:#797979}.toast-container .toast[data-bg=success]{border:1px solid #33db95}.toast-container .toast[data-bg=success] .message-type-box{background-color:#33db95}.toast-container .toast[data-bg=danger]{border:1px solid #dc3545}.toast-container .toast[data-bg=danger] .message-type-box{background-color:#dc3545}.toast-container .toast[data-bg=warning]{border:1px solid #fe8e02}.toast-container .toast[data-bg=warning] .message-type-box{background-color:#fe8e02}.toast-container .toast[data-bg=primary]{border:1px solid #e1ba2d}.toast-container .toast[data-bg=primary] .message-type-box{background-color:#e1ba2d}[data-bs-theme=dark] .toast{box-shadow:0 8px 16px 0 hsla(0,0%,62%,.2)}[data-bs-theme=dark] .toast.opaque{background-color:#0c0c0f}[data-bs-theme=dark] .toast span.btn-toast-close:hover svg path{stroke:#e0e2e5}@use "sass:math";.header .header-info-logo{height:5.5rem}.svg-logout{transition:all .5s ease}.svg-logout:hover{scale:1.1}.svg-night{cursor:pointer;opacity:.7;transition:all .5s ease}.svg-night path{fill:#e1ba2d}.svg-night:hover{filter:drop-shadow(0 0 3px #9f9f9f) drop-shadow(0 0 6px #9f9f9f) drop-shadow(0 0 20px #9f9f9f);opacity:1;scale:1.05}.svg-night:hover path{fill:#9f9f9f}.svg-day{cursor:pointer;opacity:1;transition:all .5s ease}.svg-day path{fill:#e1ba2d}.svg-day path.delay-1{transition:all .5s ease .3s}.svg-day path.delay-2{transition:all .5s ease 276ms}.svg-day path.delay-3{transition:all .5s ease 253ms}.svg-day path.delay-4{transition:all .5s ease .23s}.svg-day path.delay-5{transition:all .5s ease 207ms}.svg-day path.delay-6{transition:all .5s ease 184ms}.svg-day path.delay-7{transition:all .5s ease 161ms}.svg-day path.delay-8{transition:all .5s ease 138ms}.svg-day path.delay-9{transition:all .5s ease 115ms}.svg-day path.delay-10{transition:all .5s ease 92ms}.svg-day path.delay-11{transition:all .5s ease 69ms}.svg-day path.delay-12{transition:all .5s ease 46ms}.svg-day path.delay-13{transition:all .5s ease 23ms}.svg-day path.delay-14{transition:all .5s ease 0ms}.svg-day:hover{opacity:.8}.svg-day:hover path{fill:#3a4247}.svg-day:hover path.delay-1{transition:all .5s ease 0ms}.svg-day:hover path.delay-2{transition:all .5s ease 23ms}.svg-day:hover path.delay-3{transition:all .5s ease 46ms}.svg-day:hover path.delay-4{transition:all .5s ease 69ms}.svg-day:hover path.delay-5{transition:all .5s ease 92ms}.svg-day:hover path.delay-6{transition:all .5s ease 115ms}.svg-day:hover path.delay-7{transition:all .5s ease 138ms}.svg-day:hover path.delay-8{transition:all .5s ease 161ms}.svg-day:hover path.delay-9{transition:all .5s ease 184ms}.svg-day:hover path.delay-10{transition:all .5s ease 207ms}.svg-day:hover path.delay-11{transition:all .5s ease .23s}.svg-day:hover path.delay-12{transition:all .5s ease 253ms}.svg-day:hover path.delay-13{transition:all .5s ease 276ms}.svg-day:hover path.delay-14{transition:all .5s ease .3s}.menu-dropdown.dropdown .dropdown-toggle.btn-menu{background-color:#e1ba2d;padding:1.25rem 1.375rem;width:8rem}.menu-dropdown.dropdown .dropdown-toggle.btn-menu:after{display:none}.menu-dropdown.dropdown .dropdown-menu a.dropdown-item.active,.menu-dropdown.dropdown .dropdown-menu a.dropdown-item:active,.menu-dropdown.dropdown .dropdown-menu a.dropdown-item:focus,.menu-dropdown.dropdown .dropdown-menu a.dropdown-item:hover{color:#e1ba2d}.menu-dropdown.dropdown .dropdown-menu div.dropdown-item{color:#3a4247}.menu-dropdown.dropdown:focus-visible{outline:none}[data-bs-theme=light] .menu-dropdown.dropdown .dropdown-toggle.btn-menu{color:#fff}[data-bs-theme=light] .menu-dropdown.dropdown .dropdown-toggle.btn-menu svg path{fill:#fff}[data-bs-theme=light] .menu-dropdown.dropdown>.dropdown-menu{border:none}[data-bs-theme=dark] .menu-dropdown.dropdown .dropdown-toggle.btn-menu{color:#2a2a2c}[data-bs-theme=dark] .menu-dropdown.dropdown .dropdown-toggle.btn-menu svg path{fill:#2a2a2c}[data-bs-theme=dark] .menu-dropdown.dropdown .dropdown-menu div.dropdown-item{color:#fff}.settings-menu.dropdown .dropdown-toggle.btn-settings-menu{margin-left:.5rem;padding:1.25rem 1.375rem}.settings-menu.dropdown .dropdown-toggle.btn-settings-menu:after{display:none}.settings-menu.dropdown .dropdown-menu a.dropdown-item.active,.settings-menu.dropdown .dropdown-menu a.dropdown-item:active,.settings-menu.dropdown .dropdown-menu a.dropdown-item:focus,.settings-menu.dropdown .dropdown-menu a.dropdown-item:hover{color:#e1ba2d}.settings-menu.dropdown .dropdown-menu div.dropdown-item{color:#3a4247}[data-bs-theme=light] .settings-menu.dropdown{margin-left:.5rem}[data-bs-theme=light] .settings-menu.dropdown .dropdown-toggle.btn-settings-menu{color:#fff}[data-bs-theme=light] .settings-menu.dropdown .dropdown-toggle.btn-settings-menu svg path{fill:#fff}[data-bs-theme=light] .settings-menu.dropdown>.dropdown-menu{border:none}[data-bs-theme=light] .btn-compact{background-color:#e1ba2d}[data-bs-theme=light] .btn-compact svg>path{fill:#3a4247}[data-bs-theme=dark] .settings-menu.dropdown .dropdown-toggle.btn-settings-menu{color:#2a2a2c}[data-bs-theme=dark] .settings-menu.dropdown .dropdown-toggle.btn-settings-menu svg path{fill:#2a2a2c}[data-bs-theme=dark] .settings-menu.dropdown .dropdown-menu div.dropdown-item{color:#fff}[data-bs-theme=dark] .btn-compact{background-color:#e1ba2d}[data-bs-theme=dark] .btn-compact svg>path{fill:#3a4247}.fiat-dropdown.dropdown .svg-curr-symbol{margin-top:3px}.fiat-dropdown.dropdown .dropdown-menu .dropdown-item .svg-currency{fill:#3a4247}.fiat-dropdown.dropdown .dropdown-menu .dropdown-item:hover{color:#e1ba2d}.fiat-dropdown.dropdown .dropdown-menu .dropdown-item:hover .svg-currency{fill:#e1ba2d}.fiat-dropdown.dropdown .dropdown-menu .fiat-dropdown-scroller{height:200px;max-height:200px}.fiat-dropdown.dropdown button.dropdown-toggle{border-radius:.5rem;width:5rem}.fiat-dropdown.dropdown button.dropdown-toggle:after{border-bottom:0;border-left:.3em solid transparent;border-right:.3em solid transparent;border-top:.3em solid;color:#3a4247;content:"";display:inline-block;margin-left:.255em}.fiat-dropdown.dropdown button.dropdown-toggle .svg-currency{fill:#3a4247}.fiat-dropdown.dropdown button.dropdown-toggle .dropdown-toggle-text{display:inline-flex;font-size:12px;width:2.2rem}.fiat-dropdown.dropdown button.dropdown-toggle.btn.show,.fiat-dropdown.dropdown button.dropdown-toggle.btn:first-child:active,.fiat-dropdown.dropdown button.dropdown-toggle:hover{background-color:transparent;border-color:#ced4da;box-shadow:none}[data-bs-theme=dark] .fiat-dropdown.dropdown .dropdown-menu .dropdown-item .svg-currency{fill:#fff}[data-bs-theme=dark] .fiat-dropdown.dropdown .dropdown-menu .dropdown-item:hover{color:#e1ba2d}[data-bs-theme=dark] .fiat-dropdown.dropdown .dropdown-menu .dropdown-item:hover .svg-currency{fill:#e1ba2d}[data-bs-theme=dark] .fiat-dropdown.dropdown button.dropdown-toggle:after{color:#fff}[data-bs-theme=dark] .fiat-dropdown.dropdown button.dropdown-toggle .svg-currency{fill:#fff}[data-bs-theme=dark] .fiat-dropdown.dropdown button.dropdown-toggle .dropdown-toggle-text{color:#fff}[data-bs-theme=dark] .fiat-dropdown.dropdown button.dropdown-toggle.btn.show,[data-bs-theme=dark] .fiat-dropdown.dropdown button.dropdown-toggle.btn:first-child:active,[data-bs-theme=dark] .fiat-dropdown.dropdown button.dropdown-toggle:hover{border-color:#e9ecef;color:#e1ba2d}@font-face{font-display:swap;font-family:Inter;font-style:italic;font-weight:400;src:url(/static/media/Inter-Thin.f341ca512063c66296d1.ttf) format("truetype")}@font-face{font-display:swap;font-family:Inter;font-style:normal;font-weight:500;src:url(/static/media/Inter-Medium.6dcbc9bed1ec438907ee.ttf) format("truetype")}@font-face{font-display:swap;font-family:Inter;font-style:normal;font-weight:600;src:url(/static/media/Inter-SemiBold.4d56bb21f2399db8ad48.ttf) format("truetype")}@font-face{font-display:swap;font-family:Inter;font-style:normal;font-weight:700;src:url(/static/media/Inter-Bold.88fa7ae373b07b41ecce.ttf) format("truetype")}.toggle{background:#fff;border:1px solid #dee2e6;border-radius:.5rem;box-sizing:border-box;color:#3a4247;cursor:pointer;display:flex;font-weight:600;height:2rem;justify-content:flex-start;position:relative;width:6.5rem}.toggle .toggle-bg-text{height:100%}.toggle .toggle-switch{background:#e1ba2d;color:#fff;font-weight:600;height:105%;margin-top:-1px;position:absolute;width:55%}.toggle .toggle-switch.toggle-left{border-bottom-left-radius:.5rem;border-color:#e1ba2d;border-top-left-radius:.5rem}.toggle .toggle-switch.toggle-right{border-bottom-right-radius:.5rem;border-color:#e1ba2d;border-top-right-radius:.5rem}.toggle .toggle-switch:hover{background-color:#e4c143;border-color:#e4c143}.toggle[data-isswitchon=true]{justify-content:flex-end}[data-bs-theme=dark] .toggle{background:#434346;color:#fff}[data-bs-theme=dark] .toggle .toggle-switch{color:#2a2a2c} -/*# sourceMappingURL=648.1c4becff.chunk.css.map*/ \ No newline at end of file diff --git a/apps/frontend/build/static/css/648.1c4becff.chunk.css.map b/apps/frontend/build/static/css/648.1c4becff.chunk.css.map deleted file mode 100644 index c15365b7..00000000 --- a/apps/frontend/build/static/css/648.1c4becff.chunk.css.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"static/css/648.1c4becff.chunk.css","mappings":"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","sources":["components/shared/FiatBox/FiatBox.scss","styles/constants.scss","components/cln/BTCWallet/BTCWallet.scss","components/cln/BTCTransactionsList/BTCTransactionsList.scss","components/cln/BTCTransaction/BTCTransaction.scss","components/shared/StatusAlert/StatusAlert.scss","components/shared/FeerateRange/FeerateRange.scss","components/cln/CLNWallet/CLNWallet.scss","components/cln/CLNTransactionsList/CLNTransactionsList.scss","components/cln/CLNTransaction/CLNTransaction.scss","components/cln/CLNOffersList/CLNOffersList.scss","components/cln/CLNOffer/CLNOffer.scss","components/cln/Channels/Channels.scss","components/cln/ChannelDetails/ChannelDetails.scss","components/shared/ToastMessage/ToastMessage.scss","components/ui/Header/Header.scss","components/ui/Menu/Menu.scss","components/ui/Settings/Settings.scss","components/shared/FiatSelection/FiatSelection.scss","styles/fonts.scss","components/shared/ToggleSwitch/ToggleSwitch.scss","../../../node_modules/bootstrap/scss/_variables.scss"],"sourcesContent":["@import '../../../styles/constants.scss';\n\n.fiat-box-span {\n & .svg-currency {\n fill: $light;\n }\n & .svg-inline--fa {\n display: inline-block;\n height: 0.6rem;\n vertical-align: -1px;\n &.fa-lg {\n height: 0.75rem;\n }\n }\n}\n\n@include color-mode(dark) {\n .fiat-box-span {\n & .svg-currency {\n fill: $light-dark;\n }\n }\n}\n","@import './fonts.scss';\n@import '~bootstrap/scss/functions';\n@import '~bootstrap/scss/variables';\n@import '~bootstrap/scss/mixins';\n@import 'react-perfect-scrollbar/dist/css/styles.css';\n\n$transition-time: 300ms;\n$theme-transition: 500ms;\n$color-mode-type: data;\n$enable-shadows: true;\n$enable-gradients: true;\n$enable-responsive-font-sizes: true;\n\n$font-family-base: -apple-system, BlinkMacSystemFont, 'Inter', 'DM Sans', 'Helvetica Neue',\n 'Segoe UI', Arial, 'Noto Sans', sans-serif, 'Apple Color Emoji', 'Segoe UI Emoji',\n 'Segoe UI Symbol', 'Noto Color Emoji';\n\n$font-size-base: 14px;\n$font-weight-base: 500;\n$btn-font-size: 14px;\n\n$primary: #e1ba2d;\n$primary-darker: #cca103;\n$secondary: $gray-100;\n$success: #33db95;\n$warning: #fe8e02;\n$danger: #dc3545;\n$blue: #1b2559;\n$darker-blue: #141c44;\n$light: #9f9f9f;\n$dark: #3a4247;\n$light-dark: #b7bbc2;\n$card-bg-dark: #2a2a2c;\n$text-dark: #131314;\n$form-ctrl-bg-dark: #303032;\n$dark-blue: #101828;\n$border-color-dark: #495057;\n$border-color: #dee2e6;\n$tooltip-bg-dark: #1b1b1d;\n\n$body-bg-light: #ebeff9;\n$body-bg: $white;\n$body-color: $dark;\n$body-tertiary-bg: $white;\n$body-bg-dark: #0c0c0f;\n$body-color-dark: $white;\n\n$border-radius: 1.25rem;\n$btn-link-color: $primary;\n$btn-padding-x: 0.625rem;\n\n$form-check-input-checked-bg-color: $primary;\n$form-check-input-checked-border-color: $primary;\n$form-check-input-focus-border: lighten($primary, 10%);\n$form-check-input-focus-box-shadow: 0 0 0 0.25rem rgba(lighten($primary, 10%), 0.25);\n\n$card-border-width: 0.5px;\n$card-border-color: rgba($light, 0.1);\n$card-border-radius: $border-radius;\n$card-cap-bg: transparent;\n\n$dropdown-min-width: 5rem;\n$dropdown-box-shadow: none;\n$dropdown-border-radius: 0.5rem;\n\n$input-color: $dark;\n$input-disabled-bg: $gray-200;\n$modal-backdrop-opacity: 0.2;\n\n$form-range-track-height: 0.25rem;\n$form-range-track-bg: $success;\n$form-range-thumb-bg: $white;\n$form-range-thumb-border: 0.5px solid $gray-300;\n$form-range-thumb-focus-box-shadow:\n 0 0 0 1px $body-bg,\n $primary;\n$form-range-thumb-active-bg: tint-color($primary, 70%);\n\n$toast-max-width: 24rem;\n","@import '../../../styles/constants.scss';\n\n.btc-transactions-tabs {\n border-bottom: 0.5px solid $border-color;\n padding: 0 2rem 0.25rem 0.25rem;\n}\n\n@include color-mode(dark) {\n .btc-transactions-tabs {\n border-bottom: 0.5px solid $border-color-dark;\n }\n}\n","@import '../../../styles/constants.scss';\n\n.btc-transactions-list {\n cursor: pointer;\n display: flex;\n flex-direction: column;\n height: 100%;\n padding-right: 0.5rem;\n transition: all $transition-time ease;\n & .btc-transaction-header {\n display: flex;\n flex-direction: column;\n border: none;\n margin-top: 0.5rem;\n border-radius: 0.675rem;\n padding: 0.5rem 1rem 0.5rem 0.125rem;\n transition: all $transition-time ease;\n &.expanded {\n border-bottom: 2px dashed rgba($light, 0.2);\n border-bottom-left-radius: 0;\n border-bottom-right-radius: 0;\n }\n &:hover {\n background-color: $body-bg-light !important;\n }\n }\n & .btc-transaction-details {\n transition: background-color $theme-transition ease;\n background-color: $body-bg-light;\n border-bottom-left-radius: 0.675rem;\n border-bottom-right-radius: 0.675rem;\n }\n}\n\n@include color-mode(dark) {\n .btc-transactions-list {\n & .btc-transaction-header {\n &:hover {\n background-color: $body-bg-dark !important;\n }\n }\n & .btc-transaction-details {\n background-color: $body-bg-dark;\n }\n }\n}\n","@import '../../../styles/constants.scss';\n\n.btc-transaction-placeholder {\n transform-origin: top left;\n & .btc-transaction-detail {\n align-items: center;\n margin: 0.5rem;\n }\n & .btc-transaction-copy {\n display: inline-flex;\n align-items: flex-start;\n padding: 0;\n cursor: pointer;\n &:hover {\n svg path {\n stroke: darken($primary, 10%);\n }\n }\n }\n & .btc-transaction-open {\n display: inline-flex;\n align-items: flex-start;\n padding: 0;\n cursor: pointer;\n &:hover {\n svg path {\n fill: darken($primary, 10%);\n }\n }\n }\n}\n","@import '../../../styles/constants.scss';\n\n.alert {\n padding: 0.75rem;\n &.alert-danger,\n &.alert-success,\n &.alert-warning {\n transition: all $transition-time ease;\n }\n &.alert-danger .btn-sm-svg.btn-svg-copy {\n & svg {\n & path {\n stroke: $danger;\n }\n &:hover {\n & path {\n stroke: darken($danger, 25%);\n }\n }\n }\n }\n &.alert-success .btn-sm-svg.btn-svg-copy {\n & svg {\n & path {\n stroke: $success;\n }\n &:hover {\n & path {\n stroke: darken($success, 25%);\n }\n }\n }\n }\n & .text-status {\n max-height: 8rem;\n overflow: hidden;\n }\n & .btn-sm-svg.btn-svg-copy {\n display: inline-flex;\n align-items: flex-start;\n padding: 0;\n cursor: pointer;\n }\n}\n","@import '../../../styles/constants.scss';\n\n.slider-container {\n width: 100%;\n & .slider-pic {\n -webkit-appearance: none;\n appearance: none;\n width: 100%;\n height: 0.375rem;\n border-radius: 0.25rem;\n background: linear-gradient(to right, $success, $warning, $danger);\n outline: none;\n opacity: 0.8;\n transition: opacity $theme-transition ease;\n cursor: pointer;\n &:hover {\n opacity: 1;\n }\n &::-moz-range-track {\n background: linear-gradient(to right, $success, $warning, $danger);\n }\n &::-webkit-slider-range-thumb {\n -webkit-appearance: none;\n appearance: none;\n background: transparent;\n width: 2.5rem;\n height: 2.5rem;\n cursor: pointer;\n }\n &::-webkit-slider-runnable-track {\n background-color: transparent;\n }\n }\n}\n\n.tooltip.bs-tooltip-top.feerate-tooltip {\n &.feerate-tooltip-Slow {\n left: -6.7vw !important;\n }\n &.feerate-tooltip-Urgent {\n left: 6.7vw !important;\n }\n & .tooltip-inner {\n margin-bottom: 0.5rem;\n }\n}\n","@import '../../../styles/constants.scss';\n\n.nav.cln-transactions-tabs {\n border: none;\n border-bottom: 0.5px solid $border-color;\n border-left: none;\n border-right: none;\n border-top: none;\n & .nav-item .nav-link {\n padding: 0 1rem 0.25rem 0.25rem;\n color: $light;\n & span {\n padding: 0.25rem 0.25rem 0.25rem 0.25rem;\n }\n &.active,\n &:hover,\n &:focus {\n background-color: transparent;\n & span {\n border-bottom: 2px solid $primary;\n }\n }\n }\n}\n\n@include color-mode(dark) {\n .nav.cln-transactions-tabs {\n border-bottom: 0.5px solid $border-color-dark;\n & .nav-item .nav-link {\n color: $light-dark;\n }\n }\n}\n","@import '../../../styles/constants.scss';\n\n.cln-transactions-list {\n cursor: pointer;\n display: flex;\n flex-direction: column;\n height: 100%;\n padding-right: 0.5rem;\n transition: all $transition-time ease;\n & .cln-transaction-header {\n display: flex;\n flex-direction: column;\n border: none;\n margin-top: 0.5rem;\n border-radius: 0.675rem;\n padding: 0.5rem 1rem 0.5rem 0.125rem;\n transition: all $transition-time ease;\n &.expanded {\n border-bottom: 2px dashed rgba($light, 0.2);\n border-bottom-left-radius: 0;\n border-bottom-right-radius: 0;\n }\n &:hover {\n background-color: $body-bg-light !important;\n }\n }\n & .cln-transaction-details {\n transition: background-color $theme-transition ease;\n background-color: $body-bg-light;\n border-bottom-left-radius: 0.675rem;\n border-bottom-right-radius: 0.675rem;\n }\n}\n\n@include color-mode(dark) {\n .cln-transactions-list {\n & .cln-transaction-header {\n &:hover {\n background-color: $body-bg-dark !important;\n }\n }\n & .cln-transaction-details {\n background-color: $body-bg-dark;\n }\n }\n}\n","@import '../../../styles/constants.scss';\n\n.cln-transaction-placeholder {\n transform-origin: top left;\n & .cln-transaction-detail {\n align-items: center;\n margin: 0.5rem;\n }\n & .cln-transaction-copy {\n display: inline-flex;\n align-items: flex-start;\n padding: 0;\n cursor: pointer;\n &:hover {\n svg path {\n stroke: darken($primary, 10%);\n }\n }\n }\n}\n","@import '../../../styles/constants.scss';\n\n.cln-offers-list {\n cursor: pointer;\n display: flex;\n flex-direction: column;\n height: 100%;\n padding-right: 0.5rem;\n transition: all $transition-time ease;\n & .cln-offer-header {\n display: flex;\n flex-direction: column;\n border: none;\n margin-top: 0.5rem;\n border-radius: 0.675rem;\n padding: 0.5rem 1rem 0.5rem 0.125rem;\n transition: all $transition-time ease;\n &.expanded {\n border-bottom: 2px dashed rgba($light, 0.2);\n border-bottom-left-radius: 0;\n border-bottom-right-radius: 0;\n }\n &:hover {\n background-color: $body-bg-light !important;\n }\n }\n & .cln-offer-details {\n transition: background-color $theme-transition ease;\n background-color: $body-bg-light;\n border-bottom-left-radius: 0.675rem;\n border-bottom-right-radius: 0.675rem;\n }\n}\n\n@include color-mode(dark) {\n .cln-offers-list {\n & .cln-offer-header {\n &:hover {\n background-color: $body-bg-dark !important;\n }\n }\n & .cln-offer-details {\n background-color: $body-bg-dark;\n }\n }\n}\n","@import '../../../styles/constants.scss';\n\n.cln-offer-placeholder {\n transform-origin: top left;\n & .cln-offer-detail {\n align-items: center;\n margin: 0.5rem;\n }\n & .cln-offer-copy {\n display: inline-flex;\n align-items: flex-start;\n padding: 0;\n cursor: pointer;\n &:hover {\n svg path {\n stroke: darken($primary, 10%);\n }\n }\n }\n & .cln-offer-open {\n display: inline-flex;\n align-items: flex-start;\n padding: 0;\n cursor: pointer;\n &:hover {\n svg path {\n fill: darken($primary, 10%);\n }\n }\n }\n}\n","@import '../../../styles/constants.scss';\n\n.channels-scroll-container {\n overflow: hidden;\n & .list-channels {\n transition: background-color $theme-transition ease;\n & .list-item-channel {\n border-radius: 0.675rem;\n margin-bottom: 0.5rem;\n padding: 0.5rem;\n display: flex;\n justify-content: space-between;\n align-items: flex-start;\n transition: background-color $theme-transition ease;\n &.newly-opened {\n background-color: $body-bg-light;\n }\n &:hover {\n cursor: pointer;\n background-color: $body-bg-light;\n }\n & .progress {\n height: 6px;\n }\n }\n }\n}\n\n@include color-mode(dark) {\n .channels-scroll-container {\n & .list-channels {\n transition: background-color $theme-transition ease;\n & .list-item-channel {\n transition: background-color $theme-transition ease;\n &.newly-opened {\n background-color: $body-bg-dark;\n }\n &:hover {\n background-color: $body-bg-dark;\n }\n }\n }\n }\n}\n","@import '../../../styles/constants.scss';\n\n.channel-scroll-container {\n max-height: 53vh;\n & .progress {\n height: 6px;\n }\n & .btn-sm-svg.btn-svg-copy {\n display: inline-flex;\n align-items: flex-start;\n padding: 0;\n cursor: pointer;\n &:hover {\n svg path {\n stroke: darken($primary, 10%);\n }\n }\n }\n & .btn-sm-svg.btn-svg-open {\n display: inline-flex;\n align-items: flex-start;\n padding: 0;\n cursor: pointer;\n &:hover {\n svg path {\n fill: darken($primary, 10%);\n }\n }\n }\n}\n","@import '../../../styles/constants.scss';\n\n.toast-container {\n & .toast {\n box-shadow: 0px 8px 16px 0px rgba($dark, 0.2);\n border-radius: 0.5rem;\n border: 1px solid $light;\n &.opaque {\n background-color: rgba($body-bg, 1);\n }\n & .message-type-box {\n background-color: $light;\n border-top-left-radius: 0.35rem;\n border-bottom-left-radius: 0.35rem;\n }\n\n span.btn-toast-close {\n padding: 0.5rem;\n cursor: pointer;\n & svg {\n width: 0.75rem;\n height: 0.75rem;\n & path {\n transition: all $transition-time ease;\n }\n }\n &:hover {\n & svg path {\n stroke: darken($light, 15%);\n }\n }\n }\n\n &[data-bg='success'] {\n border: 1px solid $success;\n\n & .message-type-box {\n background-color: $success;\n }\n }\n\n &[data-bg='danger'] {\n border: 1px solid $danger;\n\n & .message-type-box {\n background-color: $danger;\n }\n }\n\n &[data-bg='warning'] {\n border: 1px solid $warning;\n\n & .message-type-box {\n background-color: $warning;\n }\n }\n\n &[data-bg='primary'] {\n border: 1px solid $primary;\n\n & .message-type-box {\n background-color: $primary;\n }\n }\n }\n}\n\n@include color-mode(dark) {\n & .toast {\n box-shadow: 0px 8px 16px 0px rgba($light, 0.2);\n &.opaque {\n background-color: rgba($body-bg-dark, 1);\n }\n span.btn-toast-close {\n &:hover {\n & svg path {\n stroke: lighten($light-dark, 15%);\n }\n }\n }\n }\n}\n","@use 'sass:math';\n@import '../../../styles/constants.scss';\n\n.header {\n & .header-info-logo {\n height: 5.5rem;\n }\n}\n\n.svg-logout {\n transition: all $theme-transition ease;\n &:hover {\n scale: 1.1;\n }\n}\n\n.svg-night {\n cursor: pointer;\n opacity: 0.7;\n transition: all $theme-transition ease;\n & path {\n fill: $primary;\n }\n &:hover {\n opacity: 1;\n scale: 1.05;\n filter: drop-shadow(0px 0px 3px $light) drop-shadow(0px 0px 6px $light)\n drop-shadow(0px 0px 20px $light);\n & path {\n fill: $light;\n }\n }\n}\n\n.svg-day {\n cursor: pointer;\n opacity: 1;\n transition: all $theme-transition ease;\n & path {\n fill: $primary;\n &.delay-1 {\n transition: all $theme-transition ease 300ms;\n }\n &.delay-2 {\n transition: all $theme-transition ease 276ms;\n }\n &.delay-3 {\n transition: all $theme-transition ease 253ms;\n }\n &.delay-4 {\n transition: all $theme-transition ease 230ms;\n }\n &.delay-5 {\n transition: all $theme-transition ease 207ms;\n }\n &.delay-6 {\n transition: all $theme-transition ease 184ms;\n }\n &.delay-7 {\n transition: all $theme-transition ease 161ms;\n }\n &.delay-8 {\n transition: all $theme-transition ease 138ms;\n }\n &.delay-9 {\n transition: all $theme-transition ease 115ms;\n }\n &.delay-10 {\n transition: all $theme-transition ease 92ms;\n }\n &.delay-11 {\n transition: all $theme-transition ease 69ms;\n }\n &.delay-12 {\n transition: all $theme-transition ease 46ms;\n }\n &.delay-13 {\n transition: all $theme-transition ease 23ms;\n }\n &.delay-14 {\n transition: all $theme-transition ease 0ms;\n }\n }\n &:hover {\n opacity: 0.8;\n & path {\n fill: $dark;\n &.delay-1 {\n transition: all $theme-transition ease 0ms;\n }\n &.delay-2 {\n transition: all $theme-transition ease 23ms;\n }\n &.delay-3 {\n transition: all $theme-transition ease 46ms;\n }\n &.delay-4 {\n transition: all $theme-transition ease 69ms;\n }\n &.delay-5 {\n transition: all $theme-transition ease 92ms;\n }\n &.delay-6 {\n transition: all $theme-transition ease 115ms;\n }\n &.delay-7 {\n transition: all $theme-transition ease 138ms;\n }\n &.delay-8 {\n transition: all $theme-transition ease 161ms;\n }\n &.delay-9 {\n transition: all $theme-transition ease 184ms;\n }\n &.delay-10 {\n transition: all $theme-transition ease 207ms;\n }\n &.delay-11 {\n transition: all $theme-transition ease 230ms;\n }\n &.delay-12 {\n transition: all $theme-transition ease 253ms;\n }\n &.delay-13 {\n transition: all $theme-transition ease 276ms;\n }\n &.delay-14 {\n transition: all $theme-transition ease 300ms;\n }\n }\n }\n}\n","@import '../../../styles/constants.scss';\n\n.menu-dropdown.dropdown {\n & .dropdown-toggle.btn-menu {\n background-color: $primary;\n width: 8rem;\n padding: 1.25rem 1.375rem;\n &::after {\n display: none;\n }\n }\n & .dropdown-menu {\n & a.dropdown-item {\n &.active,\n &:active,\n &:focus,\n &:hover {\n color: $primary;\n }\n }\n & div.dropdown-item {\n color: $dark;\n }\n }\n &:focus-visible {\n outline: none;\n }\n}\n\n@include color-mode(light) {\n .menu-dropdown.dropdown {\n & .dropdown-toggle.btn-menu {\n color: $white;\n & svg path {\n fill: $white;\n }\n }\n & > .dropdown-menu {\n border: none;\n }\n }\n .btn-compact {\n background-color: $primary;\n & svg > path {\n fill: $dark;\n }\n }\n}\n\n@include color-mode(dark) {\n .menu-dropdown.dropdown {\n & .dropdown-toggle.btn-menu {\n color: $card-bg-dark;\n & svg path {\n fill: $card-bg-dark;\n }\n }\n & .dropdown-menu {\n & div.dropdown-item {\n color: $white;\n }\n }\n }\n .btn-compact {\n background-color: $primary;\n & svg > path {\n fill: $dark;\n }\n }\n}\n","@import '../../../styles/constants.scss';\n\n.settings-menu.dropdown {\n & .dropdown-toggle.btn-settings-menu {\n margin-left: 0.5rem;\n padding: 1.25rem 1.375rem;\n &::after {\n display: none;\n }\n }\n & .dropdown-menu {\n & a.dropdown-item {\n &.active,\n &:active,\n &:focus,\n &:hover {\n color: $primary;\n }\n }\n & div.dropdown-item {\n color: $dark;\n }\n }\n}\n\n@include color-mode(light) {\n .settings-menu.dropdown {\n margin-left: 0.5rem;\n & .dropdown-toggle.btn-settings-menu {\n color: $white;\n & svg path {\n fill: $white;\n }\n }\n & > .dropdown-menu {\n border: none;\n }\n }\n .btn-compact {\n background-color: $primary;\n & svg > path {\n fill: $dark;\n }\n }\n}\n\n@include color-mode(dark) {\n .settings-menu.dropdown {\n & .dropdown-toggle.btn-settings-menu {\n color: $card-bg-dark;\n & svg path {\n fill: $card-bg-dark;\n }\n }\n & .dropdown-menu {\n & div.dropdown-item {\n color: $white;\n }\n }\n }\n .btn-compact {\n background-color: $primary;\n & svg > path {\n fill: $dark;\n }\n }\n}\n","@import '../../../styles/constants.scss';\n\n.fiat-dropdown.dropdown {\n & .svg-curr-symbol {\n margin-top: 3px;\n }\n & .dropdown-menu {\n & .dropdown-item {\n & .svg-currency {\n fill: $dark;\n }\n &:hover {\n & .svg-currency {\n fill: $primary;\n }\n color: $primary;\n }\n }\n & .fiat-dropdown-scroller {\n max-height: 200px;\n height: 200px;\n }\n }\n & button.dropdown-toggle {\n width: 5rem;\n border-radius: 0.5rem;\n &::after {\n color: $dark;\n display: inline-block;\n margin-left: 0.255em;\n content: '';\n border-top: 0.3em solid;\n border-right: 0.3em solid transparent;\n border-bottom: 0;\n border-left: 0.3em solid transparent;\n }\n & .svg-currency {\n fill: $dark;\n }\n & .dropdown-toggle-text {\n width: 2.2rem;\n font-size: 12px;\n display: inline-flex;\n }\n &:hover,\n &.btn:first-child:active,\n &.btn.show {\n background-color: transparent;\n border-color: $gray-400;\n box-shadow: none;\n }\n }\n}\n\n@include color-mode(dark) {\n .fiat-dropdown.dropdown {\n & .dropdown-menu {\n & .dropdown-item {\n & .svg-currency {\n fill: $white;\n }\n &:hover {\n & .svg-currency {\n fill: $primary;\n }\n color: $primary;\n }\n }\n }\n & button.dropdown-toggle {\n &::after {\n color: $white;\n }\n & .svg-currency {\n fill: $white;\n }\n & .dropdown-toggle-text {\n color: $white;\n }\n &:hover,\n &.btn:first-child:active,\n &.btn.show {\n border-color: $gray-200;\n color: $primary;\n }\n }\n }\n}\n","@font-face {\n font-family: 'Inter';\n font-style: italic;\n font-weight: 400;\n font-display: swap;\n src: url('../../public/fonts/Inter-Thin.ttf') format('truetype');\n}\n@font-face {\n font-family: 'Inter';\n font-style: normal;\n font-weight: 500;\n font-display: swap;\n src: url('../../public/fonts/Inter-Medium.ttf') format('truetype');\n}\n@font-face {\n font-family: 'Inter';\n font-style: normal;\n font-weight: 600;\n font-display: swap;\n src: url('../../public/fonts/Inter-SemiBold.ttf') format('truetype');\n}\n@font-face {\n font-family: 'Inter';\n font-style: normal;\n font-weight: 700;\n font-display: swap;\n src: url('../../public/fonts/Inter-Bold.ttf') format('truetype');\n}\n","@import '../../../styles/constants.scss';\n\n.toggle {\n color: $dark;\n font-weight: 600;\n border: 1px solid $gray-300;\n border-radius: 0.5rem;\n height: 2rem;\n width: 6.5rem;\n box-sizing: border-box;\n position: relative;\n cursor: pointer;\n background: $white;\n display: flex;\n justify-content: flex-start;\n\n & .toggle-bg-text {\n height: 100%;\n }\n\n & .toggle-switch {\n margin-top: -1px;\n position: absolute;\n height: 105%;\n width: calc(55%);\n color: $white;\n font-weight: 600;\n background: $primary;\n &.toggle-left {\n border-color: $primary;\n border-top-left-radius: 0.5rem;\n border-bottom-left-radius: 0.5rem;\n }\n &.toggle-right {\n border-color: $primary;\n border-top-right-radius: 0.5rem;\n border-bottom-right-radius: 0.5rem;\n }\n &:hover {\n background-color: lighten($primary, 5%);\n border-color: lighten($primary, 5%);\n }\n }\n &[data-isswitchon='true'] {\n justify-content: flex-end;\n }\n}\n\n@include color-mode(dark) {\n .toggle {\n color: $white;\n background: lighten($card-bg-dark, 10%);\n\n & .toggle-switch {\n color: $card-bg-dark;\n }\n }\n}\n","// Variables\n//\n// Variables should follow the `$component-state-property-size` formula for\n// consistent naming. Ex: $nav-link-disabled-color and $modal-content-box-shadow-xs.\n\n// Color system\n\n// scss-docs-start gray-color-variables\n$white: #fff !default;\n$gray-100: #f8f9fa !default;\n$gray-200: #e9ecef !default;\n$gray-300: #dee2e6 !default;\n$gray-400: #ced4da !default;\n$gray-500: #adb5bd !default;\n$gray-600: #6c757d !default;\n$gray-700: #495057 !default;\n$gray-800: #343a40 !default;\n$gray-900: #212529 !default;\n$black: #000 !default;\n// scss-docs-end gray-color-variables\n\n// fusv-disable\n// scss-docs-start gray-colors-map\n$grays: (\n \"100\": $gray-100,\n \"200\": $gray-200,\n \"300\": $gray-300,\n \"400\": $gray-400,\n \"500\": $gray-500,\n \"600\": $gray-600,\n \"700\": $gray-700,\n \"800\": $gray-800,\n \"900\": $gray-900\n) !default;\n// scss-docs-end gray-colors-map\n// fusv-enable\n\n// scss-docs-start color-variables\n$blue: #0d6efd !default;\n$indigo: #6610f2 !default;\n$purple: #6f42c1 !default;\n$pink: #d63384 !default;\n$red: #dc3545 !default;\n$orange: #fd7e14 !default;\n$yellow: #ffc107 !default;\n$green: #198754 !default;\n$teal: #20c997 !default;\n$cyan: #0dcaf0 !default;\n// scss-docs-end color-variables\n\n// scss-docs-start colors-map\n$colors: (\n \"blue\": $blue,\n \"indigo\": $indigo,\n \"purple\": $purple,\n \"pink\": $pink,\n \"red\": $red,\n \"orange\": $orange,\n \"yellow\": $yellow,\n \"green\": $green,\n \"teal\": $teal,\n \"cyan\": $cyan,\n \"black\": $black,\n \"white\": $white,\n \"gray\": $gray-600,\n \"gray-dark\": $gray-800\n) !default;\n// scss-docs-end colors-map\n\n// The contrast ratio to reach against white, to determine if color changes from \"light\" to \"dark\". Acceptable values for WCAG 2.2 are 3, 4.5 and 7.\n// See https://www.w3.org/TR/WCAG/#contrast-minimum\n$min-contrast-ratio: 4.5 !default;\n\n// Customize the light and dark text colors for use in our color contrast function.\n$color-contrast-dark: $black !default;\n$color-contrast-light: $white !default;\n\n// fusv-disable\n$blue-100: tint-color($blue, 80%) !default;\n$blue-200: tint-color($blue, 60%) !default;\n$blue-300: tint-color($blue, 40%) !default;\n$blue-400: tint-color($blue, 20%) !default;\n$blue-500: $blue !default;\n$blue-600: shade-color($blue, 20%) !default;\n$blue-700: shade-color($blue, 40%) !default;\n$blue-800: shade-color($blue, 60%) !default;\n$blue-900: shade-color($blue, 80%) !default;\n\n$indigo-100: tint-color($indigo, 80%) !default;\n$indigo-200: tint-color($indigo, 60%) !default;\n$indigo-300: tint-color($indigo, 40%) !default;\n$indigo-400: tint-color($indigo, 20%) !default;\n$indigo-500: $indigo !default;\n$indigo-600: shade-color($indigo, 20%) !default;\n$indigo-700: shade-color($indigo, 40%) !default;\n$indigo-800: shade-color($indigo, 60%) !default;\n$indigo-900: shade-color($indigo, 80%) !default;\n\n$purple-100: tint-color($purple, 80%) !default;\n$purple-200: tint-color($purple, 60%) !default;\n$purple-300: tint-color($purple, 40%) !default;\n$purple-400: tint-color($purple, 20%) !default;\n$purple-500: $purple !default;\n$purple-600: shade-color($purple, 20%) !default;\n$purple-700: shade-color($purple, 40%) !default;\n$purple-800: shade-color($purple, 60%) !default;\n$purple-900: shade-color($purple, 80%) !default;\n\n$pink-100: tint-color($pink, 80%) !default;\n$pink-200: tint-color($pink, 60%) !default;\n$pink-300: tint-color($pink, 40%) !default;\n$pink-400: tint-color($pink, 20%) !default;\n$pink-500: $pink !default;\n$pink-600: shade-color($pink, 20%) !default;\n$pink-700: shade-color($pink, 40%) !default;\n$pink-800: shade-color($pink, 60%) !default;\n$pink-900: shade-color($pink, 80%) !default;\n\n$red-100: tint-color($red, 80%) !default;\n$red-200: tint-color($red, 60%) !default;\n$red-300: tint-color($red, 40%) !default;\n$red-400: tint-color($red, 20%) !default;\n$red-500: $red !default;\n$red-600: shade-color($red, 20%) !default;\n$red-700: shade-color($red, 40%) !default;\n$red-800: shade-color($red, 60%) !default;\n$red-900: shade-color($red, 80%) !default;\n\n$orange-100: tint-color($orange, 80%) !default;\n$orange-200: tint-color($orange, 60%) !default;\n$orange-300: tint-color($orange, 40%) !default;\n$orange-400: tint-color($orange, 20%) !default;\n$orange-500: $orange !default;\n$orange-600: shade-color($orange, 20%) !default;\n$orange-700: shade-color($orange, 40%) !default;\n$orange-800: shade-color($orange, 60%) !default;\n$orange-900: shade-color($orange, 80%) !default;\n\n$yellow-100: tint-color($yellow, 80%) !default;\n$yellow-200: tint-color($yellow, 60%) !default;\n$yellow-300: tint-color($yellow, 40%) !default;\n$yellow-400: tint-color($yellow, 20%) !default;\n$yellow-500: $yellow !default;\n$yellow-600: shade-color($yellow, 20%) !default;\n$yellow-700: shade-color($yellow, 40%) !default;\n$yellow-800: shade-color($yellow, 60%) !default;\n$yellow-900: shade-color($yellow, 80%) !default;\n\n$green-100: tint-color($green, 80%) !default;\n$green-200: tint-color($green, 60%) !default;\n$green-300: tint-color($green, 40%) !default;\n$green-400: tint-color($green, 20%) !default;\n$green-500: $green !default;\n$green-600: shade-color($green, 20%) !default;\n$green-700: shade-color($green, 40%) !default;\n$green-800: shade-color($green, 60%) !default;\n$green-900: shade-color($green, 80%) !default;\n\n$teal-100: tint-color($teal, 80%) !default;\n$teal-200: tint-color($teal, 60%) !default;\n$teal-300: tint-color($teal, 40%) !default;\n$teal-400: tint-color($teal, 20%) !default;\n$teal-500: $teal !default;\n$teal-600: shade-color($teal, 20%) !default;\n$teal-700: shade-color($teal, 40%) !default;\n$teal-800: shade-color($teal, 60%) !default;\n$teal-900: shade-color($teal, 80%) !default;\n\n$cyan-100: tint-color($cyan, 80%) !default;\n$cyan-200: tint-color($cyan, 60%) !default;\n$cyan-300: tint-color($cyan, 40%) !default;\n$cyan-400: tint-color($cyan, 20%) !default;\n$cyan-500: $cyan !default;\n$cyan-600: shade-color($cyan, 20%) !default;\n$cyan-700: shade-color($cyan, 40%) !default;\n$cyan-800: shade-color($cyan, 60%) !default;\n$cyan-900: shade-color($cyan, 80%) !default;\n\n$blues: (\n \"blue-100\": $blue-100,\n \"blue-200\": $blue-200,\n \"blue-300\": $blue-300,\n \"blue-400\": $blue-400,\n \"blue-500\": $blue-500,\n \"blue-600\": $blue-600,\n \"blue-700\": $blue-700,\n \"blue-800\": $blue-800,\n \"blue-900\": $blue-900\n) !default;\n\n$indigos: (\n \"indigo-100\": $indigo-100,\n \"indigo-200\": $indigo-200,\n \"indigo-300\": $indigo-300,\n \"indigo-400\": $indigo-400,\n \"indigo-500\": $indigo-500,\n \"indigo-600\": $indigo-600,\n \"indigo-700\": $indigo-700,\n \"indigo-800\": $indigo-800,\n \"indigo-900\": $indigo-900\n) !default;\n\n$purples: (\n \"purple-100\": $purple-100,\n \"purple-200\": $purple-200,\n \"purple-300\": $purple-300,\n \"purple-400\": $purple-400,\n \"purple-500\": $purple-500,\n \"purple-600\": $purple-600,\n \"purple-700\": $purple-700,\n \"purple-800\": $purple-800,\n \"purple-900\": $purple-900\n) !default;\n\n$pinks: (\n \"pink-100\": $pink-100,\n \"pink-200\": $pink-200,\n \"pink-300\": $pink-300,\n \"pink-400\": $pink-400,\n \"pink-500\": $pink-500,\n \"pink-600\": $pink-600,\n \"pink-700\": $pink-700,\n \"pink-800\": $pink-800,\n \"pink-900\": $pink-900\n) !default;\n\n$reds: (\n \"red-100\": $red-100,\n \"red-200\": $red-200,\n \"red-300\": $red-300,\n \"red-400\": $red-400,\n \"red-500\": $red-500,\n \"red-600\": $red-600,\n \"red-700\": $red-700,\n \"red-800\": $red-800,\n \"red-900\": $red-900\n) !default;\n\n$oranges: (\n \"orange-100\": $orange-100,\n \"orange-200\": $orange-200,\n \"orange-300\": $orange-300,\n \"orange-400\": $orange-400,\n \"orange-500\": $orange-500,\n \"orange-600\": $orange-600,\n \"orange-700\": $orange-700,\n \"orange-800\": $orange-800,\n \"orange-900\": $orange-900\n) !default;\n\n$yellows: (\n \"yellow-100\": $yellow-100,\n \"yellow-200\": $yellow-200,\n \"yellow-300\": $yellow-300,\n \"yellow-400\": $yellow-400,\n \"yellow-500\": $yellow-500,\n \"yellow-600\": $yellow-600,\n \"yellow-700\": $yellow-700,\n \"yellow-800\": $yellow-800,\n \"yellow-900\": $yellow-900\n) !default;\n\n$greens: (\n \"green-100\": $green-100,\n \"green-200\": $green-200,\n \"green-300\": $green-300,\n \"green-400\": $green-400,\n \"green-500\": $green-500,\n \"green-600\": $green-600,\n \"green-700\": $green-700,\n \"green-800\": $green-800,\n \"green-900\": $green-900\n) !default;\n\n$teals: (\n \"teal-100\": $teal-100,\n \"teal-200\": $teal-200,\n \"teal-300\": $teal-300,\n \"teal-400\": $teal-400,\n \"teal-500\": $teal-500,\n \"teal-600\": $teal-600,\n \"teal-700\": $teal-700,\n \"teal-800\": $teal-800,\n \"teal-900\": $teal-900\n) !default;\n\n$cyans: (\n \"cyan-100\": $cyan-100,\n \"cyan-200\": $cyan-200,\n \"cyan-300\": $cyan-300,\n \"cyan-400\": $cyan-400,\n \"cyan-500\": $cyan-500,\n \"cyan-600\": $cyan-600,\n \"cyan-700\": $cyan-700,\n \"cyan-800\": $cyan-800,\n \"cyan-900\": $cyan-900\n) !default;\n// fusv-enable\n\n// scss-docs-start theme-color-variables\n$primary: $blue !default;\n$secondary: $gray-600 !default;\n$success: $green !default;\n$info: $cyan !default;\n$warning: $yellow !default;\n$danger: $red !default;\n$light: $gray-100 !default;\n$dark: $gray-900 !default;\n// scss-docs-end theme-color-variables\n\n// scss-docs-start theme-colors-map\n$theme-colors: (\n \"primary\": $primary,\n \"secondary\": $secondary,\n \"success\": $success,\n \"info\": $info,\n \"warning\": $warning,\n \"danger\": $danger,\n \"light\": $light,\n \"dark\": $dark\n) !default;\n// scss-docs-end theme-colors-map\n\n// scss-docs-start theme-text-variables\n$primary-text-emphasis: shade-color($primary, 60%) !default;\n$secondary-text-emphasis: shade-color($secondary, 60%) !default;\n$success-text-emphasis: shade-color($success, 60%) !default;\n$info-text-emphasis: shade-color($info, 60%) !default;\n$warning-text-emphasis: shade-color($warning, 60%) !default;\n$danger-text-emphasis: shade-color($danger, 60%) !default;\n$light-text-emphasis: $gray-700 !default;\n$dark-text-emphasis: $gray-700 !default;\n// scss-docs-end theme-text-variables\n\n// scss-docs-start theme-bg-subtle-variables\n$primary-bg-subtle: tint-color($primary, 80%) !default;\n$secondary-bg-subtle: tint-color($secondary, 80%) !default;\n$success-bg-subtle: tint-color($success, 80%) !default;\n$info-bg-subtle: tint-color($info, 80%) !default;\n$warning-bg-subtle: tint-color($warning, 80%) !default;\n$danger-bg-subtle: tint-color($danger, 80%) !default;\n$light-bg-subtle: mix($gray-100, $white) !default;\n$dark-bg-subtle: $gray-400 !default;\n// scss-docs-end theme-bg-subtle-variables\n\n// scss-docs-start theme-border-subtle-variables\n$primary-border-subtle: tint-color($primary, 60%) !default;\n$secondary-border-subtle: tint-color($secondary, 60%) !default;\n$success-border-subtle: tint-color($success, 60%) !default;\n$info-border-subtle: tint-color($info, 60%) !default;\n$warning-border-subtle: tint-color($warning, 60%) !default;\n$danger-border-subtle: tint-color($danger, 60%) !default;\n$light-border-subtle: $gray-200 !default;\n$dark-border-subtle: $gray-500 !default;\n// scss-docs-end theme-border-subtle-variables\n\n// Characters which are escaped by the escape-svg function\n$escaped-characters: (\n (\"<\", \"%3c\"),\n (\">\", \"%3e\"),\n (\"#\", \"%23\"),\n (\"(\", \"%28\"),\n (\")\", \"%29\"),\n) !default;\n\n// Options\n//\n// Quickly modify global styling by enabling or disabling optional features.\n\n$enable-caret: true !default;\n$enable-rounded: true !default;\n$enable-shadows: false !default;\n$enable-gradients: false !default;\n$enable-transitions: true !default;\n$enable-reduced-motion: true !default;\n$enable-smooth-scroll: true !default;\n$enable-grid-classes: true !default;\n$enable-container-classes: true !default;\n$enable-cssgrid: false !default;\n$enable-button-pointers: true !default;\n$enable-rfs: true !default;\n$enable-validation-icons: true !default;\n$enable-negative-margins: false !default;\n$enable-deprecation-messages: true !default;\n$enable-important-utilities: true !default;\n\n$enable-dark-mode: true !default;\n$color-mode-type: data !default; // `data` or `media-query`\n\n// Prefix for :root CSS variables\n\n$variable-prefix: bs- !default; // Deprecated in v5.2.0 for the shorter `$prefix`\n$prefix: $variable-prefix !default;\n\n// Gradient\n//\n// The gradient which is added to components if `$enable-gradients` is `true`\n// This gradient is also added to elements with `.bg-gradient`\n// scss-docs-start variable-gradient\n$gradient: linear-gradient(180deg, rgba($white, .15), rgba($white, 0)) !default;\n// scss-docs-end variable-gradient\n\n// Spacing\n//\n// Control the default styling of most Bootstrap elements by modifying these\n// variables. Mostly focused on spacing.\n// You can add more entries to the $spacers map, should you need more variation.\n\n// scss-docs-start spacer-variables-maps\n$spacer: 1rem !default;\n$spacers: (\n 0: 0,\n 1: $spacer * .25,\n 2: $spacer * .5,\n 3: $spacer,\n 4: $spacer * 1.5,\n 5: $spacer * 3,\n) !default;\n// scss-docs-end spacer-variables-maps\n\n// Position\n//\n// Define the edge positioning anchors of the position utilities.\n\n// scss-docs-start position-map\n$position-values: (\n 0: 0,\n 50: 50%,\n 100: 100%\n) !default;\n// scss-docs-end position-map\n\n// Body\n//\n// Settings for the `` element.\n\n$body-text-align: null !default;\n$body-color: $gray-900 !default;\n$body-bg: $white !default;\n\n$body-secondary-color: rgba($body-color, .75) !default;\n$body-secondary-bg: $gray-200 !default;\n\n$body-tertiary-color: rgba($body-color, .5) !default;\n$body-tertiary-bg: $gray-100 !default;\n\n$body-emphasis-color: $black !default;\n\n// Links\n//\n// Style anchor elements.\n\n$link-color: $primary !default;\n$link-decoration: underline !default;\n$link-shade-percentage: 20% !default;\n$link-hover-color: shift-color($link-color, $link-shade-percentage) !default;\n$link-hover-decoration: null !default;\n\n$stretched-link-pseudo-element: after !default;\n$stretched-link-z-index: 1 !default;\n\n// Icon links\n// scss-docs-start icon-link-variables\n$icon-link-gap: .375rem !default;\n$icon-link-underline-offset: .25em !default;\n$icon-link-icon-size: 1em !default;\n$icon-link-icon-transition: .2s ease-in-out transform !default;\n$icon-link-icon-transform: translate3d(.25em, 0, 0) !default;\n// scss-docs-end icon-link-variables\n\n// Paragraphs\n//\n// Style p element.\n\n$paragraph-margin-bottom: 1rem !default;\n\n\n// Grid breakpoints\n//\n// Define the minimum dimensions at which your layout will change,\n// adapting to different screen sizes, for use in media queries.\n\n// scss-docs-start grid-breakpoints\n$grid-breakpoints: (\n xs: 0,\n sm: 576px,\n md: 768px,\n lg: 992px,\n xl: 1200px,\n xxl: 1400px\n) !default;\n// scss-docs-end grid-breakpoints\n\n@include _assert-ascending($grid-breakpoints, \"$grid-breakpoints\");\n@include _assert-starts-at-zero($grid-breakpoints, \"$grid-breakpoints\");\n\n\n// Grid containers\n//\n// Define the maximum width of `.container` for different screen sizes.\n\n// scss-docs-start container-max-widths\n$container-max-widths: (\n sm: 540px,\n md: 720px,\n lg: 960px,\n xl: 1140px,\n xxl: 1320px\n) !default;\n// scss-docs-end container-max-widths\n\n@include _assert-ascending($container-max-widths, \"$container-max-widths\");\n\n\n// Grid columns\n//\n// Set the number of columns and specify the width of the gutters.\n\n$grid-columns: 12 !default;\n$grid-gutter-width: 1.5rem !default;\n$grid-row-columns: 6 !default;\n\n// Container padding\n\n$container-padding-x: $grid-gutter-width !default;\n\n\n// Components\n//\n// Define common padding and border radius sizes and more.\n\n// scss-docs-start border-variables\n$border-width: 1px !default;\n$border-widths: (\n 1: 1px,\n 2: 2px,\n 3: 3px,\n 4: 4px,\n 5: 5px\n) !default;\n$border-style: solid !default;\n$border-color: $gray-300 !default;\n$border-color-translucent: rgba($black, .175) !default;\n// scss-docs-end border-variables\n\n// scss-docs-start border-radius-variables\n$border-radius: .375rem !default;\n$border-radius-sm: .25rem !default;\n$border-radius-lg: .5rem !default;\n$border-radius-xl: 1rem !default;\n$border-radius-xxl: 2rem !default;\n$border-radius-pill: 50rem !default;\n// scss-docs-end border-radius-variables\n// fusv-disable\n$border-radius-2xl: $border-radius-xxl !default; // Deprecated in v5.3.0\n// fusv-enable\n\n// scss-docs-start box-shadow-variables\n$box-shadow: 0 .5rem 1rem rgba($black, .15) !default;\n$box-shadow-sm: 0 .125rem .25rem rgba($black, .075) !default;\n$box-shadow-lg: 0 1rem 3rem rgba($black, .175) !default;\n$box-shadow-inset: inset 0 1px 2px rgba($black, .075) !default;\n// scss-docs-end box-shadow-variables\n\n$component-active-color: $white !default;\n$component-active-bg: $primary !default;\n\n// scss-docs-start focus-ring-variables\n$focus-ring-width: .25rem !default;\n$focus-ring-opacity: .25 !default;\n$focus-ring-color: rgba($primary, $focus-ring-opacity) !default;\n$focus-ring-blur: 0 !default;\n$focus-ring-box-shadow: 0 0 $focus-ring-blur $focus-ring-width $focus-ring-color !default;\n// scss-docs-end focus-ring-variables\n\n// scss-docs-start caret-variables\n$caret-width: .3em !default;\n$caret-vertical-align: $caret-width * .85 !default;\n$caret-spacing: $caret-width * .85 !default;\n// scss-docs-end caret-variables\n\n$transition-base: all .2s ease-in-out !default;\n$transition-fade: opacity .15s linear !default;\n// scss-docs-start collapse-transition\n$transition-collapse: height .35s ease !default;\n$transition-collapse-width: width .35s ease !default;\n// scss-docs-end collapse-transition\n\n// stylelint-disable function-disallowed-list\n// scss-docs-start aspect-ratios\n$aspect-ratios: (\n \"1x1\": 100%,\n \"4x3\": calc(3 / 4 * 100%),\n \"16x9\": calc(9 / 16 * 100%),\n \"21x9\": calc(9 / 21 * 100%)\n) !default;\n// scss-docs-end aspect-ratios\n// stylelint-enable function-disallowed-list\n\n// Typography\n//\n// Font, line-height, and color for body text, headings, and more.\n\n// scss-docs-start font-variables\n// stylelint-disable value-keyword-case\n$font-family-sans-serif: system-ui, -apple-system, \"Segoe UI\", Roboto, \"Helvetica Neue\", \"Noto Sans\", \"Liberation Sans\", Arial, sans-serif, \"Apple Color Emoji\", \"Segoe UI Emoji\", \"Segoe UI Symbol\", \"Noto Color Emoji\" !default;\n$font-family-monospace: SFMono-Regular, Menlo, Monaco, Consolas, \"Liberation Mono\", \"Courier New\", monospace !default;\n// stylelint-enable value-keyword-case\n$font-family-base: var(--#{$prefix}font-sans-serif) !default;\n$font-family-code: var(--#{$prefix}font-monospace) !default;\n\n// $font-size-root affects the value of `rem`, which is used for as well font sizes, paddings, and margins\n// $font-size-base affects the font size of the body text\n$font-size-root: null !default;\n$font-size-base: 1rem !default; // Assumes the browser default, typically `16px`\n$font-size-sm: $font-size-base * .875 !default;\n$font-size-lg: $font-size-base * 1.25 !default;\n\n$font-weight-lighter: lighter !default;\n$font-weight-light: 300 !default;\n$font-weight-normal: 400 !default;\n$font-weight-medium: 500 !default;\n$font-weight-semibold: 600 !default;\n$font-weight-bold: 700 !default;\n$font-weight-bolder: bolder !default;\n\n$font-weight-base: $font-weight-normal !default;\n\n$line-height-base: 1.5 !default;\n$line-height-sm: 1.25 !default;\n$line-height-lg: 2 !default;\n\n$h1-font-size: $font-size-base * 2.5 !default;\n$h2-font-size: $font-size-base * 2 !default;\n$h3-font-size: $font-size-base * 1.75 !default;\n$h4-font-size: $font-size-base * 1.5 !default;\n$h5-font-size: $font-size-base * 1.25 !default;\n$h6-font-size: $font-size-base !default;\n// scss-docs-end font-variables\n\n// scss-docs-start font-sizes\n$font-sizes: (\n 1: $h1-font-size,\n 2: $h2-font-size,\n 3: $h3-font-size,\n 4: $h4-font-size,\n 5: $h5-font-size,\n 6: $h6-font-size\n) !default;\n// scss-docs-end font-sizes\n\n// scss-docs-start headings-variables\n$headings-margin-bottom: $spacer * .5 !default;\n$headings-font-family: null !default;\n$headings-font-style: null !default;\n$headings-font-weight: 500 !default;\n$headings-line-height: 1.2 !default;\n$headings-color: inherit !default;\n// scss-docs-end headings-variables\n\n// scss-docs-start display-headings\n$display-font-sizes: (\n 1: 5rem,\n 2: 4.5rem,\n 3: 4rem,\n 4: 3.5rem,\n 5: 3rem,\n 6: 2.5rem\n) !default;\n\n$display-font-family: null !default;\n$display-font-style: null !default;\n$display-font-weight: 300 !default;\n$display-line-height: $headings-line-height !default;\n// scss-docs-end display-headings\n\n// scss-docs-start type-variables\n$lead-font-size: $font-size-base * 1.25 !default;\n$lead-font-weight: 300 !default;\n\n$small-font-size: .875em !default;\n\n$sub-sup-font-size: .75em !default;\n\n// fusv-disable\n$text-muted: var(--#{$prefix}secondary-color) !default; // Deprecated in 5.3.0\n// fusv-enable\n\n$initialism-font-size: $small-font-size !default;\n\n$blockquote-margin-y: $spacer !default;\n$blockquote-font-size: $font-size-base * 1.25 !default;\n$blockquote-footer-color: $gray-600 !default;\n$blockquote-footer-font-size: $small-font-size !default;\n\n$hr-margin-y: $spacer !default;\n$hr-color: inherit !default;\n\n// fusv-disable\n$hr-bg-color: null !default; // Deprecated in v5.2.0\n$hr-height: null !default; // Deprecated in v5.2.0\n// fusv-enable\n\n$hr-border-color: null !default; // Allows for inherited colors\n$hr-border-width: var(--#{$prefix}border-width) !default;\n$hr-opacity: .25 !default;\n\n// scss-docs-start vr-variables\n$vr-border-width: var(--#{$prefix}border-width) !default;\n// scss-docs-end vr-variables\n\n$legend-margin-bottom: .5rem !default;\n$legend-font-size: 1.5rem !default;\n$legend-font-weight: null !default;\n\n$dt-font-weight: $font-weight-bold !default;\n\n$list-inline-padding: .5rem !default;\n\n$mark-padding: .1875em !default;\n$mark-color: $body-color !default;\n$mark-bg: $yellow-100 !default;\n// scss-docs-end type-variables\n\n\n// Tables\n//\n// Customizes the `.table` component with basic values, each used across all table variations.\n\n// scss-docs-start table-variables\n$table-cell-padding-y: .5rem !default;\n$table-cell-padding-x: .5rem !default;\n$table-cell-padding-y-sm: .25rem !default;\n$table-cell-padding-x-sm: .25rem !default;\n\n$table-cell-vertical-align: top !default;\n\n$table-color: var(--#{$prefix}emphasis-color) !default;\n$table-bg: var(--#{$prefix}body-bg) !default;\n$table-accent-bg: transparent !default;\n\n$table-th-font-weight: null !default;\n\n$table-striped-color: $table-color !default;\n$table-striped-bg-factor: .05 !default;\n$table-striped-bg: rgba(var(--#{$prefix}emphasis-color-rgb), $table-striped-bg-factor) !default;\n\n$table-active-color: $table-color !default;\n$table-active-bg-factor: .1 !default;\n$table-active-bg: rgba(var(--#{$prefix}emphasis-color-rgb), $table-active-bg-factor) !default;\n\n$table-hover-color: $table-color !default;\n$table-hover-bg-factor: .075 !default;\n$table-hover-bg: rgba(var(--#{$prefix}emphasis-color-rgb), $table-hover-bg-factor) !default;\n\n$table-border-factor: .2 !default;\n$table-border-width: var(--#{$prefix}border-width) !default;\n$table-border-color: var(--#{$prefix}border-color) !default;\n\n$table-striped-order: odd !default;\n$table-striped-columns-order: even !default;\n\n$table-group-separator-color: currentcolor !default;\n\n$table-caption-color: var(--#{$prefix}secondary-color) !default;\n\n$table-bg-scale: -80% !default;\n// scss-docs-end table-variables\n\n// scss-docs-start table-loop\n$table-variants: (\n \"primary\": shift-color($primary, $table-bg-scale),\n \"secondary\": shift-color($secondary, $table-bg-scale),\n \"success\": shift-color($success, $table-bg-scale),\n \"info\": shift-color($info, $table-bg-scale),\n \"warning\": shift-color($warning, $table-bg-scale),\n \"danger\": shift-color($danger, $table-bg-scale),\n \"light\": $light,\n \"dark\": $dark,\n) !default;\n// scss-docs-end table-loop\n\n\n// Buttons + Forms\n//\n// Shared variables that are reassigned to `$input-` and `$btn-` specific variables.\n\n// scss-docs-start input-btn-variables\n$input-btn-padding-y: .375rem !default;\n$input-btn-padding-x: .75rem !default;\n$input-btn-font-family: null !default;\n$input-btn-font-size: $font-size-base !default;\n$input-btn-line-height: $line-height-base !default;\n\n$input-btn-focus-width: $focus-ring-width !default;\n$input-btn-focus-color-opacity: $focus-ring-opacity !default;\n$input-btn-focus-color: $focus-ring-color !default;\n$input-btn-focus-blur: $focus-ring-blur !default;\n$input-btn-focus-box-shadow: $focus-ring-box-shadow !default;\n\n$input-btn-padding-y-sm: .25rem !default;\n$input-btn-padding-x-sm: .5rem !default;\n$input-btn-font-size-sm: $font-size-sm !default;\n\n$input-btn-padding-y-lg: .5rem !default;\n$input-btn-padding-x-lg: 1rem !default;\n$input-btn-font-size-lg: $font-size-lg !default;\n\n$input-btn-border-width: var(--#{$prefix}border-width) !default;\n// scss-docs-end input-btn-variables\n\n\n// Buttons\n//\n// For each of Bootstrap's buttons, define text, background, and border color.\n\n// scss-docs-start btn-variables\n$btn-color: var(--#{$prefix}body-color) !default;\n$btn-padding-y: $input-btn-padding-y !default;\n$btn-padding-x: $input-btn-padding-x !default;\n$btn-font-family: $input-btn-font-family !default;\n$btn-font-size: $input-btn-font-size !default;\n$btn-line-height: $input-btn-line-height !default;\n$btn-white-space: null !default; // Set to `nowrap` to prevent text wrapping\n\n$btn-padding-y-sm: $input-btn-padding-y-sm !default;\n$btn-padding-x-sm: $input-btn-padding-x-sm !default;\n$btn-font-size-sm: $input-btn-font-size-sm !default;\n\n$btn-padding-y-lg: $input-btn-padding-y-lg !default;\n$btn-padding-x-lg: $input-btn-padding-x-lg !default;\n$btn-font-size-lg: $input-btn-font-size-lg !default;\n\n$btn-border-width: $input-btn-border-width !default;\n\n$btn-font-weight: $font-weight-normal !default;\n$btn-box-shadow: inset 0 1px 0 rgba($white, .15), 0 1px 1px rgba($black, .075) !default;\n$btn-focus-width: $input-btn-focus-width !default;\n$btn-focus-box-shadow: $input-btn-focus-box-shadow !default;\n$btn-disabled-opacity: .65 !default;\n$btn-active-box-shadow: inset 0 3px 5px rgba($black, .125) !default;\n\n$btn-link-color: var(--#{$prefix}link-color) !default;\n$btn-link-hover-color: var(--#{$prefix}link-hover-color) !default;\n$btn-link-disabled-color: $gray-600 !default;\n$btn-link-focus-shadow-rgb: to-rgb(mix(color-contrast($link-color), $link-color, 15%)) !default;\n\n// Allows for customizing button radius independently from global border radius\n$btn-border-radius: var(--#{$prefix}border-radius) !default;\n$btn-border-radius-sm: var(--#{$prefix}border-radius-sm) !default;\n$btn-border-radius-lg: var(--#{$prefix}border-radius-lg) !default;\n\n$btn-transition: color .15s ease-in-out, background-color .15s ease-in-out, border-color .15s ease-in-out, box-shadow .15s ease-in-out !default;\n\n$btn-hover-bg-shade-amount: 15% !default;\n$btn-hover-bg-tint-amount: 15% !default;\n$btn-hover-border-shade-amount: 20% !default;\n$btn-hover-border-tint-amount: 10% !default;\n$btn-active-bg-shade-amount: 20% !default;\n$btn-active-bg-tint-amount: 20% !default;\n$btn-active-border-shade-amount: 25% !default;\n$btn-active-border-tint-amount: 10% !default;\n// scss-docs-end btn-variables\n\n\n// Forms\n\n// scss-docs-start form-text-variables\n$form-text-margin-top: .25rem !default;\n$form-text-font-size: $small-font-size !default;\n$form-text-font-style: null !default;\n$form-text-font-weight: null !default;\n$form-text-color: var(--#{$prefix}secondary-color) !default;\n// scss-docs-end form-text-variables\n\n// scss-docs-start form-label-variables\n$form-label-margin-bottom: .5rem !default;\n$form-label-font-size: null !default;\n$form-label-font-style: null !default;\n$form-label-font-weight: null !default;\n$form-label-color: null !default;\n// scss-docs-end form-label-variables\n\n// scss-docs-start form-input-variables\n$input-padding-y: $input-btn-padding-y !default;\n$input-padding-x: $input-btn-padding-x !default;\n$input-font-family: $input-btn-font-family !default;\n$input-font-size: $input-btn-font-size !default;\n$input-font-weight: $font-weight-base !default;\n$input-line-height: $input-btn-line-height !default;\n\n$input-padding-y-sm: $input-btn-padding-y-sm !default;\n$input-padding-x-sm: $input-btn-padding-x-sm !default;\n$input-font-size-sm: $input-btn-font-size-sm !default;\n\n$input-padding-y-lg: $input-btn-padding-y-lg !default;\n$input-padding-x-lg: $input-btn-padding-x-lg !default;\n$input-font-size-lg: $input-btn-font-size-lg !default;\n\n$input-bg: var(--#{$prefix}body-bg) !default;\n$input-disabled-color: null !default;\n$input-disabled-bg: var(--#{$prefix}secondary-bg) !default;\n$input-disabled-border-color: null !default;\n\n$input-color: var(--#{$prefix}body-color) !default;\n$input-border-color: var(--#{$prefix}border-color) !default;\n$input-border-width: $input-btn-border-width !default;\n$input-box-shadow: var(--#{$prefix}box-shadow-inset) !default;\n\n$input-border-radius: var(--#{$prefix}border-radius) !default;\n$input-border-radius-sm: var(--#{$prefix}border-radius-sm) !default;\n$input-border-radius-lg: var(--#{$prefix}border-radius-lg) !default;\n\n$input-focus-bg: $input-bg !default;\n$input-focus-border-color: tint-color($component-active-bg, 50%) !default;\n$input-focus-color: $input-color !default;\n$input-focus-width: $input-btn-focus-width !default;\n$input-focus-box-shadow: $input-btn-focus-box-shadow !default;\n\n$input-placeholder-color: var(--#{$prefix}secondary-color) !default;\n$input-plaintext-color: var(--#{$prefix}body-color) !default;\n\n$input-height-border: calc(#{$input-border-width} * 2) !default; // stylelint-disable-line function-disallowed-list\n\n$input-height-inner: add($input-line-height * 1em, $input-padding-y * 2) !default;\n$input-height-inner-half: add($input-line-height * .5em, $input-padding-y) !default;\n$input-height-inner-quarter: add($input-line-height * .25em, $input-padding-y * .5) !default;\n\n$input-height: add($input-line-height * 1em, add($input-padding-y * 2, $input-height-border, false)) !default;\n$input-height-sm: add($input-line-height * 1em, add($input-padding-y-sm * 2, $input-height-border, false)) !default;\n$input-height-lg: add($input-line-height * 1em, add($input-padding-y-lg * 2, $input-height-border, false)) !default;\n\n$input-transition: border-color .15s ease-in-out, box-shadow .15s ease-in-out !default;\n\n$form-color-width: 3rem !default;\n// scss-docs-end form-input-variables\n\n// scss-docs-start form-check-variables\n$form-check-input-width: 1em !default;\n$form-check-min-height: $font-size-base * $line-height-base !default;\n$form-check-padding-start: $form-check-input-width + .5em !default;\n$form-check-margin-bottom: .125rem !default;\n$form-check-label-color: null !default;\n$form-check-label-cursor: null !default;\n$form-check-transition: null !default;\n\n$form-check-input-active-filter: brightness(90%) !default;\n\n$form-check-input-bg: $input-bg !default;\n$form-check-input-border: var(--#{$prefix}border-width) solid var(--#{$prefix}border-color) !default;\n$form-check-input-border-radius: .25em !default;\n$form-check-radio-border-radius: 50% !default;\n$form-check-input-focus-border: $input-focus-border-color !default;\n$form-check-input-focus-box-shadow: $focus-ring-box-shadow !default;\n\n$form-check-input-checked-color: $component-active-color !default;\n$form-check-input-checked-bg-color: $component-active-bg !default;\n$form-check-input-checked-border-color: $form-check-input-checked-bg-color !default;\n$form-check-input-checked-bg-image: url(\"data:image/svg+xml,\") !default;\n$form-check-radio-checked-bg-image: url(\"data:image/svg+xml,\") !default;\n\n$form-check-input-indeterminate-color: $component-active-color !default;\n$form-check-input-indeterminate-bg-color: $component-active-bg !default;\n$form-check-input-indeterminate-border-color: $form-check-input-indeterminate-bg-color !default;\n$form-check-input-indeterminate-bg-image: url(\"data:image/svg+xml,\") !default;\n\n$form-check-input-disabled-opacity: .5 !default;\n$form-check-label-disabled-opacity: $form-check-input-disabled-opacity !default;\n$form-check-btn-check-disabled-opacity: $btn-disabled-opacity !default;\n\n$form-check-inline-margin-end: 1rem !default;\n// scss-docs-end form-check-variables\n\n// scss-docs-start form-switch-variables\n$form-switch-color: rgba($black, .25) !default;\n$form-switch-width: 2em !default;\n$form-switch-padding-start: $form-switch-width + .5em !default;\n$form-switch-bg-image: url(\"data:image/svg+xml,\") !default;\n$form-switch-border-radius: $form-switch-width !default;\n$form-switch-transition: background-position .15s ease-in-out !default;\n\n$form-switch-focus-color: $input-focus-border-color !default;\n$form-switch-focus-bg-image: url(\"data:image/svg+xml,\") !default;\n\n$form-switch-checked-color: $component-active-color !default;\n$form-switch-checked-bg-image: url(\"data:image/svg+xml,\") !default;\n$form-switch-checked-bg-position: right center !default;\n// scss-docs-end form-switch-variables\n\n// scss-docs-start input-group-variables\n$input-group-addon-padding-y: $input-padding-y !default;\n$input-group-addon-padding-x: $input-padding-x !default;\n$input-group-addon-font-weight: $input-font-weight !default;\n$input-group-addon-color: $input-color !default;\n$input-group-addon-bg: var(--#{$prefix}tertiary-bg) !default;\n$input-group-addon-border-color: $input-border-color !default;\n// scss-docs-end input-group-variables\n\n// scss-docs-start form-select-variables\n$form-select-padding-y: $input-padding-y !default;\n$form-select-padding-x: $input-padding-x !default;\n$form-select-font-family: $input-font-family !default;\n$form-select-font-size: $input-font-size !default;\n$form-select-indicator-padding: $form-select-padding-x * 3 !default; // Extra padding for background-image\n$form-select-font-weight: $input-font-weight !default;\n$form-select-line-height: $input-line-height !default;\n$form-select-color: $input-color !default;\n$form-select-bg: $input-bg !default;\n$form-select-disabled-color: null !default;\n$form-select-disabled-bg: $input-disabled-bg !default;\n$form-select-disabled-border-color: $input-disabled-border-color !default;\n$form-select-bg-position: right $form-select-padding-x center !default;\n$form-select-bg-size: 16px 12px !default; // In pixels because image dimensions\n$form-select-indicator-color: $gray-800 !default;\n$form-select-indicator: url(\"data:image/svg+xml,\") !default;\n\n$form-select-feedback-icon-padding-end: $form-select-padding-x * 2.5 + $form-select-indicator-padding !default;\n$form-select-feedback-icon-position: center right $form-select-indicator-padding !default;\n$form-select-feedback-icon-size: $input-height-inner-half $input-height-inner-half !default;\n\n$form-select-border-width: $input-border-width !default;\n$form-select-border-color: $input-border-color !default;\n$form-select-border-radius: $input-border-radius !default;\n$form-select-box-shadow: var(--#{$prefix}box-shadow-inset) !default;\n\n$form-select-focus-border-color: $input-focus-border-color !default;\n$form-select-focus-width: $input-focus-width !default;\n$form-select-focus-box-shadow: 0 0 0 $form-select-focus-width $input-btn-focus-color !default;\n\n$form-select-padding-y-sm: $input-padding-y-sm !default;\n$form-select-padding-x-sm: $input-padding-x-sm !default;\n$form-select-font-size-sm: $input-font-size-sm !default;\n$form-select-border-radius-sm: $input-border-radius-sm !default;\n\n$form-select-padding-y-lg: $input-padding-y-lg !default;\n$form-select-padding-x-lg: $input-padding-x-lg !default;\n$form-select-font-size-lg: $input-font-size-lg !default;\n$form-select-border-radius-lg: $input-border-radius-lg !default;\n\n$form-select-transition: $input-transition !default;\n// scss-docs-end form-select-variables\n\n// scss-docs-start form-range-variables\n$form-range-track-width: 100% !default;\n$form-range-track-height: .5rem !default;\n$form-range-track-cursor: pointer !default;\n$form-range-track-bg: var(--#{$prefix}secondary-bg) !default;\n$form-range-track-border-radius: 1rem !default;\n$form-range-track-box-shadow: var(--#{$prefix}box-shadow-inset) !default;\n\n$form-range-thumb-width: 1rem !default;\n$form-range-thumb-height: $form-range-thumb-width !default;\n$form-range-thumb-bg: $component-active-bg !default;\n$form-range-thumb-border: 0 !default;\n$form-range-thumb-border-radius: 1rem !default;\n$form-range-thumb-box-shadow: 0 .1rem .25rem rgba($black, .1) !default;\n$form-range-thumb-focus-box-shadow: 0 0 0 1px $body-bg, $input-focus-box-shadow !default;\n$form-range-thumb-focus-box-shadow-width: $input-focus-width !default; // For focus box shadow issue in Edge\n$form-range-thumb-active-bg: tint-color($component-active-bg, 70%) !default;\n$form-range-thumb-disabled-bg: var(--#{$prefix}secondary-color) !default;\n$form-range-thumb-transition: background-color .15s ease-in-out, border-color .15s ease-in-out, box-shadow .15s ease-in-out !default;\n// scss-docs-end form-range-variables\n\n// scss-docs-start form-file-variables\n$form-file-button-color: $input-color !default;\n$form-file-button-bg: var(--#{$prefix}tertiary-bg) !default;\n$form-file-button-hover-bg: var(--#{$prefix}secondary-bg) !default;\n// scss-docs-end form-file-variables\n\n// scss-docs-start form-floating-variables\n$form-floating-height: add(3.5rem, $input-height-border) !default;\n$form-floating-line-height: 1.25 !default;\n$form-floating-padding-x: $input-padding-x !default;\n$form-floating-padding-y: 1rem !default;\n$form-floating-input-padding-t: 1.625rem !default;\n$form-floating-input-padding-b: .625rem !default;\n$form-floating-label-height: 1.5em !default;\n$form-floating-label-opacity: .65 !default;\n$form-floating-label-transform: scale(.85) translateY(-.5rem) translateX(.15rem) !default;\n$form-floating-label-disabled-color: $gray-600 !default;\n$form-floating-transition: opacity .1s ease-in-out, transform .1s ease-in-out !default;\n// scss-docs-end form-floating-variables\n\n// Form validation\n\n// scss-docs-start form-feedback-variables\n$form-feedback-margin-top: $form-text-margin-top !default;\n$form-feedback-font-size: $form-text-font-size !default;\n$form-feedback-font-style: $form-text-font-style !default;\n$form-feedback-valid-color: $success !default;\n$form-feedback-invalid-color: $danger !default;\n\n$form-feedback-icon-valid-color: $form-feedback-valid-color !default;\n$form-feedback-icon-valid: url(\"data:image/svg+xml,\") !default;\n$form-feedback-icon-invalid-color: $form-feedback-invalid-color !default;\n$form-feedback-icon-invalid: url(\"data:image/svg+xml,\") !default;\n// scss-docs-end form-feedback-variables\n\n// scss-docs-start form-validation-colors\n$form-valid-color: $form-feedback-valid-color !default;\n$form-valid-border-color: $form-feedback-valid-color !default;\n$form-invalid-color: $form-feedback-invalid-color !default;\n$form-invalid-border-color: $form-feedback-invalid-color !default;\n// scss-docs-end form-validation-colors\n\n// scss-docs-start form-validation-states\n$form-validation-states: (\n \"valid\": (\n \"color\": var(--#{$prefix}form-valid-color),\n \"icon\": $form-feedback-icon-valid,\n \"tooltip-color\": #fff,\n \"tooltip-bg-color\": var(--#{$prefix}success),\n \"focus-box-shadow\": 0 0 $input-btn-focus-blur $input-focus-width rgba(var(--#{$prefix}success-rgb), $input-btn-focus-color-opacity),\n \"border-color\": var(--#{$prefix}form-valid-border-color),\n ),\n \"invalid\": (\n \"color\": var(--#{$prefix}form-invalid-color),\n \"icon\": $form-feedback-icon-invalid,\n \"tooltip-color\": #fff,\n \"tooltip-bg-color\": var(--#{$prefix}danger),\n \"focus-box-shadow\": 0 0 $input-btn-focus-blur $input-focus-width rgba(var(--#{$prefix}danger-rgb), $input-btn-focus-color-opacity),\n \"border-color\": var(--#{$prefix}form-invalid-border-color),\n )\n) !default;\n// scss-docs-end form-validation-states\n\n// Z-index master list\n//\n// Warning: Avoid customizing these values. They're used for a bird's eye view\n// of components dependent on the z-axis and are designed to all work together.\n\n// scss-docs-start zindex-stack\n$zindex-dropdown: 1000 !default;\n$zindex-sticky: 1020 !default;\n$zindex-fixed: 1030 !default;\n$zindex-offcanvas-backdrop: 1040 !default;\n$zindex-offcanvas: 1045 !default;\n$zindex-modal-backdrop: 1050 !default;\n$zindex-modal: 1055 !default;\n$zindex-popover: 1070 !default;\n$zindex-tooltip: 1080 !default;\n$zindex-toast: 1090 !default;\n// scss-docs-end zindex-stack\n\n// scss-docs-start zindex-levels-map\n$zindex-levels: (\n n1: -1,\n 0: 0,\n 1: 1,\n 2: 2,\n 3: 3\n) !default;\n// scss-docs-end zindex-levels-map\n\n\n// Navs\n\n// scss-docs-start nav-variables\n$nav-link-padding-y: .5rem !default;\n$nav-link-padding-x: 1rem !default;\n$nav-link-font-size: null !default;\n$nav-link-font-weight: null !default;\n$nav-link-color: var(--#{$prefix}link-color) !default;\n$nav-link-hover-color: var(--#{$prefix}link-hover-color) !default;\n$nav-link-transition: color .15s ease-in-out, background-color .15s ease-in-out, border-color .15s ease-in-out !default;\n$nav-link-disabled-color: var(--#{$prefix}secondary-color) !default;\n$nav-link-focus-box-shadow: $focus-ring-box-shadow !default;\n\n$nav-tabs-border-color: var(--#{$prefix}border-color) !default;\n$nav-tabs-border-width: var(--#{$prefix}border-width) !default;\n$nav-tabs-border-radius: var(--#{$prefix}border-radius) !default;\n$nav-tabs-link-hover-border-color: var(--#{$prefix}secondary-bg) var(--#{$prefix}secondary-bg) $nav-tabs-border-color !default;\n$nav-tabs-link-active-color: var(--#{$prefix}emphasis-color) !default;\n$nav-tabs-link-active-bg: var(--#{$prefix}body-bg) !default;\n$nav-tabs-link-active-border-color: var(--#{$prefix}border-color) var(--#{$prefix}border-color) $nav-tabs-link-active-bg !default;\n\n$nav-pills-border-radius: var(--#{$prefix}border-radius) !default;\n$nav-pills-link-active-color: $component-active-color !default;\n$nav-pills-link-active-bg: $component-active-bg !default;\n\n$nav-underline-gap: 1rem !default;\n$nav-underline-border-width: .125rem !default;\n$nav-underline-link-active-color: var(--#{$prefix}emphasis-color) !default;\n// scss-docs-end nav-variables\n\n\n// Navbar\n\n// scss-docs-start navbar-variables\n$navbar-padding-y: $spacer * .5 !default;\n$navbar-padding-x: null !default;\n\n$navbar-nav-link-padding-x: .5rem !default;\n\n$navbar-brand-font-size: $font-size-lg !default;\n// Compute the navbar-brand padding-y so the navbar-brand will have the same height as navbar-text and nav-link\n$nav-link-height: $font-size-base * $line-height-base + $nav-link-padding-y * 2 !default;\n$navbar-brand-height: $navbar-brand-font-size * $line-height-base !default;\n$navbar-brand-padding-y: ($nav-link-height - $navbar-brand-height) * .5 !default;\n$navbar-brand-margin-end: 1rem !default;\n\n$navbar-toggler-padding-y: .25rem !default;\n$navbar-toggler-padding-x: .75rem !default;\n$navbar-toggler-font-size: $font-size-lg !default;\n$navbar-toggler-border-radius: $btn-border-radius !default;\n$navbar-toggler-focus-width: $btn-focus-width !default;\n$navbar-toggler-transition: box-shadow .15s ease-in-out !default;\n\n$navbar-light-color: rgba(var(--#{$prefix}emphasis-color-rgb), .65) !default;\n$navbar-light-hover-color: rgba(var(--#{$prefix}emphasis-color-rgb), .8) !default;\n$navbar-light-active-color: rgba(var(--#{$prefix}emphasis-color-rgb), 1) !default;\n$navbar-light-disabled-color: rgba(var(--#{$prefix}emphasis-color-rgb), .3) !default;\n$navbar-light-icon-color: rgba($body-color, .75) !default;\n$navbar-light-toggler-icon-bg: url(\"data:image/svg+xml,\") !default;\n$navbar-light-toggler-border-color: rgba(var(--#{$prefix}emphasis-color-rgb), .15) !default;\n$navbar-light-brand-color: $navbar-light-active-color !default;\n$navbar-light-brand-hover-color: $navbar-light-active-color !default;\n// scss-docs-end navbar-variables\n\n// scss-docs-start navbar-dark-variables\n$navbar-dark-color: rgba($white, .55) !default;\n$navbar-dark-hover-color: rgba($white, .75) !default;\n$navbar-dark-active-color: $white !default;\n$navbar-dark-disabled-color: rgba($white, .25) !default;\n$navbar-dark-icon-color: $navbar-dark-color !default;\n$navbar-dark-toggler-icon-bg: url(\"data:image/svg+xml,\") !default;\n$navbar-dark-toggler-border-color: rgba($white, .1) !default;\n$navbar-dark-brand-color: $navbar-dark-active-color !default;\n$navbar-dark-brand-hover-color: $navbar-dark-active-color !default;\n// scss-docs-end navbar-dark-variables\n\n\n// Dropdowns\n//\n// Dropdown menu container and contents.\n\n// scss-docs-start dropdown-variables\n$dropdown-min-width: 10rem !default;\n$dropdown-padding-x: 0 !default;\n$dropdown-padding-y: .5rem !default;\n$dropdown-spacer: .125rem !default;\n$dropdown-font-size: $font-size-base !default;\n$dropdown-color: var(--#{$prefix}body-color) !default;\n$dropdown-bg: var(--#{$prefix}body-bg) !default;\n$dropdown-border-color: var(--#{$prefix}border-color-translucent) !default;\n$dropdown-border-radius: var(--#{$prefix}border-radius) !default;\n$dropdown-border-width: var(--#{$prefix}border-width) !default;\n$dropdown-inner-border-radius: calc(#{$dropdown-border-radius} - #{$dropdown-border-width}) !default; // stylelint-disable-line function-disallowed-list\n$dropdown-divider-bg: $dropdown-border-color !default;\n$dropdown-divider-margin-y: $spacer * .5 !default;\n$dropdown-box-shadow: var(--#{$prefix}box-shadow) !default;\n\n$dropdown-link-color: var(--#{$prefix}body-color) !default;\n$dropdown-link-hover-color: $dropdown-link-color !default;\n$dropdown-link-hover-bg: var(--#{$prefix}tertiary-bg) !default;\n\n$dropdown-link-active-color: $component-active-color !default;\n$dropdown-link-active-bg: $component-active-bg !default;\n\n$dropdown-link-disabled-color: var(--#{$prefix}tertiary-color) !default;\n\n$dropdown-item-padding-y: $spacer * .25 !default;\n$dropdown-item-padding-x: $spacer !default;\n\n$dropdown-header-color: $gray-600 !default;\n$dropdown-header-padding-x: $dropdown-item-padding-x !default;\n$dropdown-header-padding-y: $dropdown-padding-y !default;\n// fusv-disable\n$dropdown-header-padding: $dropdown-header-padding-y $dropdown-header-padding-x !default; // Deprecated in v5.2.0\n// fusv-enable\n// scss-docs-end dropdown-variables\n\n// scss-docs-start dropdown-dark-variables\n$dropdown-dark-color: $gray-300 !default;\n$dropdown-dark-bg: $gray-800 !default;\n$dropdown-dark-border-color: $dropdown-border-color !default;\n$dropdown-dark-divider-bg: $dropdown-divider-bg !default;\n$dropdown-dark-box-shadow: null !default;\n$dropdown-dark-link-color: $dropdown-dark-color !default;\n$dropdown-dark-link-hover-color: $white !default;\n$dropdown-dark-link-hover-bg: rgba($white, .15) !default;\n$dropdown-dark-link-active-color: $dropdown-link-active-color !default;\n$dropdown-dark-link-active-bg: $dropdown-link-active-bg !default;\n$dropdown-dark-link-disabled-color: $gray-500 !default;\n$dropdown-dark-header-color: $gray-500 !default;\n// scss-docs-end dropdown-dark-variables\n\n\n// Pagination\n\n// scss-docs-start pagination-variables\n$pagination-padding-y: .375rem !default;\n$pagination-padding-x: .75rem !default;\n$pagination-padding-y-sm: .25rem !default;\n$pagination-padding-x-sm: .5rem !default;\n$pagination-padding-y-lg: .75rem !default;\n$pagination-padding-x-lg: 1.5rem !default;\n\n$pagination-font-size: $font-size-base !default;\n\n$pagination-color: var(--#{$prefix}link-color) !default;\n$pagination-bg: var(--#{$prefix}body-bg) !default;\n$pagination-border-radius: var(--#{$prefix}border-radius) !default;\n$pagination-border-width: var(--#{$prefix}border-width) !default;\n$pagination-margin-start: calc(-1 * #{$pagination-border-width}) !default; // stylelint-disable-line function-disallowed-list\n$pagination-border-color: var(--#{$prefix}border-color) !default;\n\n$pagination-focus-color: var(--#{$prefix}link-hover-color) !default;\n$pagination-focus-bg: var(--#{$prefix}secondary-bg) !default;\n$pagination-focus-box-shadow: $focus-ring-box-shadow !default;\n$pagination-focus-outline: 0 !default;\n\n$pagination-hover-color: var(--#{$prefix}link-hover-color) !default;\n$pagination-hover-bg: var(--#{$prefix}tertiary-bg) !default;\n$pagination-hover-border-color: var(--#{$prefix}border-color) !default; // Todo in v6: remove this?\n\n$pagination-active-color: $component-active-color !default;\n$pagination-active-bg: $component-active-bg !default;\n$pagination-active-border-color: $component-active-bg !default;\n\n$pagination-disabled-color: var(--#{$prefix}secondary-color) !default;\n$pagination-disabled-bg: var(--#{$prefix}secondary-bg) !default;\n$pagination-disabled-border-color: var(--#{$prefix}border-color) !default;\n\n$pagination-transition: color .15s ease-in-out, background-color .15s ease-in-out, border-color .15s ease-in-out, box-shadow .15s ease-in-out !default;\n\n$pagination-border-radius-sm: var(--#{$prefix}border-radius-sm) !default;\n$pagination-border-radius-lg: var(--#{$prefix}border-radius-lg) !default;\n// scss-docs-end pagination-variables\n\n\n// Placeholders\n\n// scss-docs-start placeholders\n$placeholder-opacity-max: .5 !default;\n$placeholder-opacity-min: .2 !default;\n// scss-docs-end placeholders\n\n// Cards\n\n// scss-docs-start card-variables\n$card-spacer-y: $spacer !default;\n$card-spacer-x: $spacer !default;\n$card-title-spacer-y: $spacer * .5 !default;\n$card-title-color: null !default;\n$card-subtitle-color: null !default;\n$card-border-width: var(--#{$prefix}border-width) !default;\n$card-border-color: var(--#{$prefix}border-color-translucent) !default;\n$card-border-radius: var(--#{$prefix}border-radius) !default;\n$card-box-shadow: null !default;\n$card-inner-border-radius: subtract($card-border-radius, $card-border-width) !default;\n$card-cap-padding-y: $card-spacer-y * .5 !default;\n$card-cap-padding-x: $card-spacer-x !default;\n$card-cap-bg: rgba(var(--#{$prefix}body-color-rgb), .03) !default;\n$card-cap-color: null !default;\n$card-height: null !default;\n$card-color: null !default;\n$card-bg: var(--#{$prefix}body-bg) !default;\n$card-img-overlay-padding: $spacer !default;\n$card-group-margin: $grid-gutter-width * .5 !default;\n// scss-docs-end card-variables\n\n// Accordion\n\n// scss-docs-start accordion-variables\n$accordion-padding-y: 1rem !default;\n$accordion-padding-x: 1.25rem !default;\n$accordion-color: var(--#{$prefix}body-color) !default;\n$accordion-bg: var(--#{$prefix}body-bg) !default;\n$accordion-border-width: var(--#{$prefix}border-width) !default;\n$accordion-border-color: var(--#{$prefix}border-color) !default;\n$accordion-border-radius: var(--#{$prefix}border-radius) !default;\n$accordion-inner-border-radius: subtract($accordion-border-radius, $accordion-border-width) !default;\n\n$accordion-body-padding-y: $accordion-padding-y !default;\n$accordion-body-padding-x: $accordion-padding-x !default;\n\n$accordion-button-padding-y: $accordion-padding-y !default;\n$accordion-button-padding-x: $accordion-padding-x !default;\n$accordion-button-color: var(--#{$prefix}body-color) !default;\n$accordion-button-bg: var(--#{$prefix}accordion-bg) !default;\n$accordion-transition: $btn-transition, border-radius .15s ease !default;\n$accordion-button-active-bg: var(--#{$prefix}primary-bg-subtle) !default;\n$accordion-button-active-color: var(--#{$prefix}primary-text-emphasis) !default;\n\n// fusv-disable\n$accordion-button-focus-border-color: $input-focus-border-color !default; // Deprecated in v5.3.3\n// fusv-enable\n$accordion-button-focus-box-shadow: $btn-focus-box-shadow !default;\n\n$accordion-icon-width: 1.25rem !default;\n$accordion-icon-color: $body-color !default;\n$accordion-icon-active-color: $primary-text-emphasis !default;\n$accordion-icon-transition: transform .2s ease-in-out !default;\n$accordion-icon-transform: rotate(-180deg) !default;\n\n$accordion-button-icon: url(\"data:image/svg+xml,\") !default;\n$accordion-button-active-icon: url(\"data:image/svg+xml,\") !default;\n// scss-docs-end accordion-variables\n\n// Tooltips\n\n// scss-docs-start tooltip-variables\n$tooltip-font-size: $font-size-sm !default;\n$tooltip-max-width: 200px !default;\n$tooltip-color: var(--#{$prefix}body-bg) !default;\n$tooltip-bg: var(--#{$prefix}emphasis-color) !default;\n$tooltip-border-radius: var(--#{$prefix}border-radius) !default;\n$tooltip-opacity: .9 !default;\n$tooltip-padding-y: $spacer * .25 !default;\n$tooltip-padding-x: $spacer * .5 !default;\n$tooltip-margin: null !default; // TODO: remove this in v6\n\n$tooltip-arrow-width: .8rem !default;\n$tooltip-arrow-height: .4rem !default;\n// fusv-disable\n$tooltip-arrow-color: null !default; // Deprecated in Bootstrap 5.2.0 for CSS variables\n// fusv-enable\n// scss-docs-end tooltip-variables\n\n// Form tooltips must come after regular tooltips\n// scss-docs-start tooltip-feedback-variables\n$form-feedback-tooltip-padding-y: $tooltip-padding-y !default;\n$form-feedback-tooltip-padding-x: $tooltip-padding-x !default;\n$form-feedback-tooltip-font-size: $tooltip-font-size !default;\n$form-feedback-tooltip-line-height: null !default;\n$form-feedback-tooltip-opacity: $tooltip-opacity !default;\n$form-feedback-tooltip-border-radius: $tooltip-border-radius !default;\n// scss-docs-end tooltip-feedback-variables\n\n\n// Popovers\n\n// scss-docs-start popover-variables\n$popover-font-size: $font-size-sm !default;\n$popover-bg: var(--#{$prefix}body-bg) !default;\n$popover-max-width: 276px !default;\n$popover-border-width: var(--#{$prefix}border-width) !default;\n$popover-border-color: var(--#{$prefix}border-color-translucent) !default;\n$popover-border-radius: var(--#{$prefix}border-radius-lg) !default;\n$popover-inner-border-radius: calc(#{$popover-border-radius} - #{$popover-border-width}) !default; // stylelint-disable-line function-disallowed-list\n$popover-box-shadow: var(--#{$prefix}box-shadow) !default;\n\n$popover-header-font-size: $font-size-base !default;\n$popover-header-bg: var(--#{$prefix}secondary-bg) !default;\n$popover-header-color: $headings-color !default;\n$popover-header-padding-y: .5rem !default;\n$popover-header-padding-x: $spacer !default;\n\n$popover-body-color: var(--#{$prefix}body-color) !default;\n$popover-body-padding-y: $spacer !default;\n$popover-body-padding-x: $spacer !default;\n\n$popover-arrow-width: 1rem !default;\n$popover-arrow-height: .5rem !default;\n// scss-docs-end popover-variables\n\n// fusv-disable\n// Deprecated in Bootstrap 5.2.0 for CSS variables\n$popover-arrow-color: $popover-bg !default;\n$popover-arrow-outer-color: var(--#{$prefix}border-color-translucent) !default;\n// fusv-enable\n\n\n// Toasts\n\n// scss-docs-start toast-variables\n$toast-max-width: 350px !default;\n$toast-padding-x: .75rem !default;\n$toast-padding-y: .5rem !default;\n$toast-font-size: .875rem !default;\n$toast-color: null !default;\n$toast-background-color: rgba(var(--#{$prefix}body-bg-rgb), .85) !default;\n$toast-border-width: var(--#{$prefix}border-width) !default;\n$toast-border-color: var(--#{$prefix}border-color-translucent) !default;\n$toast-border-radius: var(--#{$prefix}border-radius) !default;\n$toast-box-shadow: var(--#{$prefix}box-shadow) !default;\n$toast-spacing: $container-padding-x !default;\n\n$toast-header-color: var(--#{$prefix}secondary-color) !default;\n$toast-header-background-color: rgba(var(--#{$prefix}body-bg-rgb), .85) !default;\n$toast-header-border-color: $toast-border-color !default;\n// scss-docs-end toast-variables\n\n\n// Badges\n\n// scss-docs-start badge-variables\n$badge-font-size: .75em !default;\n$badge-font-weight: $font-weight-bold !default;\n$badge-color: $white !default;\n$badge-padding-y: .35em !default;\n$badge-padding-x: .65em !default;\n$badge-border-radius: var(--#{$prefix}border-radius) !default;\n// scss-docs-end badge-variables\n\n\n// Modals\n\n// scss-docs-start modal-variables\n$modal-inner-padding: $spacer !default;\n\n$modal-footer-margin-between: .5rem !default;\n\n$modal-dialog-margin: .5rem !default;\n$modal-dialog-margin-y-sm-up: 1.75rem !default;\n\n$modal-title-line-height: $line-height-base !default;\n\n$modal-content-color: var(--#{$prefix}body-color) !default;\n$modal-content-bg: var(--#{$prefix}body-bg) !default;\n$modal-content-border-color: var(--#{$prefix}border-color-translucent) !default;\n$modal-content-border-width: var(--#{$prefix}border-width) !default;\n$modal-content-border-radius: var(--#{$prefix}border-radius-lg) !default;\n$modal-content-inner-border-radius: subtract($modal-content-border-radius, $modal-content-border-width) !default;\n$modal-content-box-shadow-xs: var(--#{$prefix}box-shadow-sm) !default;\n$modal-content-box-shadow-sm-up: var(--#{$prefix}box-shadow) !default;\n\n$modal-backdrop-bg: $black !default;\n$modal-backdrop-opacity: .5 !default;\n\n$modal-header-border-color: var(--#{$prefix}border-color) !default;\n$modal-header-border-width: $modal-content-border-width !default;\n$modal-header-padding-y: $modal-inner-padding !default;\n$modal-header-padding-x: $modal-inner-padding !default;\n$modal-header-padding: $modal-header-padding-y $modal-header-padding-x !default; // Keep this for backwards compatibility\n\n$modal-footer-bg: null !default;\n$modal-footer-border-color: $modal-header-border-color !default;\n$modal-footer-border-width: $modal-header-border-width !default;\n\n$modal-sm: 300px !default;\n$modal-md: 500px !default;\n$modal-lg: 800px !default;\n$modal-xl: 1140px !default;\n\n$modal-fade-transform: translate(0, -50px) !default;\n$modal-show-transform: none !default;\n$modal-transition: transform .3s ease-out !default;\n$modal-scale-transform: scale(1.02) !default;\n// scss-docs-end modal-variables\n\n\n// Alerts\n//\n// Define alert colors, border radius, and padding.\n\n// scss-docs-start alert-variables\n$alert-padding-y: $spacer !default;\n$alert-padding-x: $spacer !default;\n$alert-margin-bottom: 1rem !default;\n$alert-border-radius: var(--#{$prefix}border-radius) !default;\n$alert-link-font-weight: $font-weight-bold !default;\n$alert-border-width: var(--#{$prefix}border-width) !default;\n$alert-dismissible-padding-r: $alert-padding-x * 3 !default; // 3x covers width of x plus default padding on either side\n// scss-docs-end alert-variables\n\n// fusv-disable\n$alert-bg-scale: -80% !default; // Deprecated in v5.2.0, to be removed in v6\n$alert-border-scale: -70% !default; // Deprecated in v5.2.0, to be removed in v6\n$alert-color-scale: 40% !default; // Deprecated in v5.2.0, to be removed in v6\n// fusv-enable\n\n// Progress bars\n\n// scss-docs-start progress-variables\n$progress-height: 1rem !default;\n$progress-font-size: $font-size-base * .75 !default;\n$progress-bg: var(--#{$prefix}secondary-bg) !default;\n$progress-border-radius: var(--#{$prefix}border-radius) !default;\n$progress-box-shadow: var(--#{$prefix}box-shadow-inset) !default;\n$progress-bar-color: $white !default;\n$progress-bar-bg: $primary !default;\n$progress-bar-animation-timing: 1s linear infinite !default;\n$progress-bar-transition: width .6s ease !default;\n// scss-docs-end progress-variables\n\n\n// List group\n\n// scss-docs-start list-group-variables\n$list-group-color: var(--#{$prefix}body-color) !default;\n$list-group-bg: var(--#{$prefix}body-bg) !default;\n$list-group-border-color: var(--#{$prefix}border-color) !default;\n$list-group-border-width: var(--#{$prefix}border-width) !default;\n$list-group-border-radius: var(--#{$prefix}border-radius) !default;\n\n$list-group-item-padding-y: $spacer * .5 !default;\n$list-group-item-padding-x: $spacer !default;\n// fusv-disable\n$list-group-item-bg-scale: -80% !default; // Deprecated in v5.3.0\n$list-group-item-color-scale: 40% !default; // Deprecated in v5.3.0\n// fusv-enable\n\n$list-group-hover-bg: var(--#{$prefix}tertiary-bg) !default;\n$list-group-active-color: $component-active-color !default;\n$list-group-active-bg: $component-active-bg !default;\n$list-group-active-border-color: $list-group-active-bg !default;\n\n$list-group-disabled-color: var(--#{$prefix}secondary-color) !default;\n$list-group-disabled-bg: $list-group-bg !default;\n\n$list-group-action-color: var(--#{$prefix}secondary-color) !default;\n$list-group-action-hover-color: var(--#{$prefix}emphasis-color) !default;\n\n$list-group-action-active-color: var(--#{$prefix}body-color) !default;\n$list-group-action-active-bg: var(--#{$prefix}secondary-bg) !default;\n// scss-docs-end list-group-variables\n\n\n// Image thumbnails\n\n// scss-docs-start thumbnail-variables\n$thumbnail-padding: .25rem !default;\n$thumbnail-bg: var(--#{$prefix}body-bg) !default;\n$thumbnail-border-width: var(--#{$prefix}border-width) !default;\n$thumbnail-border-color: var(--#{$prefix}border-color) !default;\n$thumbnail-border-radius: var(--#{$prefix}border-radius) !default;\n$thumbnail-box-shadow: var(--#{$prefix}box-shadow-sm) !default;\n// scss-docs-end thumbnail-variables\n\n\n// Figures\n\n// scss-docs-start figure-variables\n$figure-caption-font-size: $small-font-size !default;\n$figure-caption-color: var(--#{$prefix}secondary-color) !default;\n// scss-docs-end figure-variables\n\n\n// Breadcrumbs\n\n// scss-docs-start breadcrumb-variables\n$breadcrumb-font-size: null !default;\n$breadcrumb-padding-y: 0 !default;\n$breadcrumb-padding-x: 0 !default;\n$breadcrumb-item-padding-x: .5rem !default;\n$breadcrumb-margin-bottom: 1rem !default;\n$breadcrumb-bg: null !default;\n$breadcrumb-divider-color: var(--#{$prefix}secondary-color) !default;\n$breadcrumb-active-color: var(--#{$prefix}secondary-color) !default;\n$breadcrumb-divider: quote(\"/\") !default;\n$breadcrumb-divider-flipped: $breadcrumb-divider !default;\n$breadcrumb-border-radius: null !default;\n// scss-docs-end breadcrumb-variables\n\n// Carousel\n\n// scss-docs-start carousel-variables\n$carousel-control-color: $white !default;\n$carousel-control-width: 15% !default;\n$carousel-control-opacity: .5 !default;\n$carousel-control-hover-opacity: .9 !default;\n$carousel-control-transition: opacity .15s ease !default;\n$carousel-control-icon-filter: null !default;\n\n$carousel-indicator-width: 30px !default;\n$carousel-indicator-height: 3px !default;\n$carousel-indicator-hit-area-height: 10px !default;\n$carousel-indicator-spacer: 3px !default;\n$carousel-indicator-opacity: .5 !default;\n$carousel-indicator-active-bg: $white !default;\n$carousel-indicator-active-opacity: 1 !default;\n$carousel-indicator-transition: opacity .6s ease !default;\n\n$carousel-caption-width: 70% !default;\n$carousel-caption-color: $white !default;\n$carousel-caption-padding-y: 1.25rem !default;\n$carousel-caption-spacer: 1.25rem !default;\n\n$carousel-control-icon-width: 2rem !default;\n\n$carousel-control-prev-icon-bg: url(\"data:image/svg+xml,\") !default;\n$carousel-control-next-icon-bg: url(\"data:image/svg+xml,\") !default;\n\n$carousel-transition-duration: .6s !default;\n$carousel-transition: transform $carousel-transition-duration ease-in-out !default; // Define transform transition first if using multiple transitions (e.g., `transform 2s ease, opacity .5s ease-out`)\n// scss-docs-end carousel-variables\n\n// scss-docs-start carousel-dark-variables\n$carousel-dark-indicator-active-bg: $black !default; // Deprecated in v5.3.4\n$carousel-dark-caption-color: $black !default; // Deprecated in v5.3.4\n$carousel-dark-control-icon-filter: invert(1) grayscale(100) !default; // Deprecated in v5.3.4\n// scss-docs-end carousel-dark-variables\n\n\n// Spinners\n\n// scss-docs-start spinner-variables\n$spinner-width: 2rem !default;\n$spinner-height: $spinner-width !default;\n$spinner-vertical-align: -.125em !default;\n$spinner-border-width: .25em !default;\n$spinner-animation-speed: .75s !default;\n\n$spinner-width-sm: 1rem !default;\n$spinner-height-sm: $spinner-width-sm !default;\n$spinner-border-width-sm: .2em !default;\n// scss-docs-end spinner-variables\n\n\n// Close\n\n// scss-docs-start close-variables\n$btn-close-width: 1em !default;\n$btn-close-height: $btn-close-width !default;\n$btn-close-padding-x: .25em !default;\n$btn-close-padding-y: $btn-close-padding-x !default;\n$btn-close-color: $black !default;\n$btn-close-bg: url(\"data:image/svg+xml,\") !default;\n$btn-close-focus-shadow: $focus-ring-box-shadow !default;\n$btn-close-opacity: .5 !default;\n$btn-close-hover-opacity: .75 !default;\n$btn-close-focus-opacity: 1 !default;\n$btn-close-disabled-opacity: .25 !default;\n$btn-close-filter: null !default;\n$btn-close-white-filter: invert(1) grayscale(100%) brightness(200%) !default; // Deprecated in v5.3.4\n// scss-docs-end close-variables\n\n\n// Offcanvas\n\n// scss-docs-start offcanvas-variables\n$offcanvas-padding-y: $modal-inner-padding !default;\n$offcanvas-padding-x: $modal-inner-padding !default;\n$offcanvas-horizontal-width: 400px !default;\n$offcanvas-vertical-height: 30vh !default;\n$offcanvas-transition-duration: .3s !default;\n$offcanvas-border-color: $modal-content-border-color !default;\n$offcanvas-border-width: $modal-content-border-width !default;\n$offcanvas-title-line-height: $modal-title-line-height !default;\n$offcanvas-bg-color: var(--#{$prefix}body-bg) !default;\n$offcanvas-color: var(--#{$prefix}body-color) !default;\n$offcanvas-box-shadow: $modal-content-box-shadow-xs !default;\n$offcanvas-backdrop-bg: $modal-backdrop-bg !default;\n$offcanvas-backdrop-opacity: $modal-backdrop-opacity !default;\n// scss-docs-end offcanvas-variables\n\n// Code\n\n$code-font-size: $small-font-size !default;\n$code-color: $pink !default;\n\n$kbd-padding-y: .1875rem !default;\n$kbd-padding-x: .375rem !default;\n$kbd-font-size: $code-font-size !default;\n$kbd-color: var(--#{$prefix}body-bg) !default;\n$kbd-bg: var(--#{$prefix}body-color) !default;\n$nested-kbd-font-weight: null !default; // Deprecated in v5.2.0, removing in v6\n\n$pre-color: null !default;\n\n@import \"variables-dark\"; // TODO: can be removed safely in v6, only here to avoid breaking changes in v5.3\n"],"names":[],"sourceRoot":""} \ No newline at end of file diff --git a/apps/frontend/build/static/css/687.19b1d4d6.chunk.css b/apps/frontend/build/static/css/687.19b1d4d6.chunk.css deleted file mode 100644 index d8aa6e7f..00000000 --- a/apps/frontend/build/static/css/687.19b1d4d6.chunk.css +++ /dev/null @@ -1,6 +0,0 @@ -/*! - * Bootstrap v5.3.6 (https://getbootstrap.com/) - * Copyright 2011-2025 The Bootstrap Authors - * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE) - */:root,[data-bs-theme=light]{--bs-blue:#0d6efd;--bs-indigo:#6610f2;--bs-purple:#6f42c1;--bs-pink:#d63384;--bs-red:#dc3545;--bs-orange:#fd7e14;--bs-yellow:#ffc107;--bs-green:#198754;--bs-teal:#20c997;--bs-cyan:#0dcaf0;--bs-black:#000;--bs-white:#fff;--bs-gray:#6c757d;--bs-gray-dark:#343a40;--bs-gray-100:#f8f9fa;--bs-gray-200:#e9ecef;--bs-gray-300:#dee2e6;--bs-gray-400:#ced4da;--bs-gray-500:#adb5bd;--bs-gray-600:#6c757d;--bs-gray-700:#495057;--bs-gray-800:#343a40;--bs-gray-900:#212529;--bs-primary:#e1ba2d;--bs-secondary:#f8f9fa;--bs-success:#33db95;--bs-warning:#fe8e02;--bs-danger:#dc3545;--bs-dark:#3a4247;--bs-light:#9f9f9f;--bs-primary-rgb:225,186,45;--bs-secondary-rgb:248,249,250;--bs-success-rgb:51,219,149;--bs-warning-rgb:254,142,2;--bs-danger-rgb:220,53,69;--bs-dark-rgb:58,66,71;--bs-light-rgb:159,159,159;--bs-primary-text-emphasis:#052c65;--bs-secondary-text-emphasis:#2b2f32;--bs-success-text-emphasis:#0a3622;--bs-info-text-emphasis:#055160;--bs-warning-text-emphasis:#664d03;--bs-danger-text-emphasis:#58151c;--bs-light-text-emphasis:#495057;--bs-dark-text-emphasis:#495057;--bs-primary-bg-subtle:#cfe2ff;--bs-secondary-bg-subtle:#e2e3e5;--bs-success-bg-subtle:#d1e7dd;--bs-info-bg-subtle:#cff4fc;--bs-warning-bg-subtle:#fff3cd;--bs-danger-bg-subtle:#f8d7da;--bs-light-bg-subtle:#fcfcfd;--bs-dark-bg-subtle:#ced4da;--bs-primary-border-subtle:#9ec5fe;--bs-secondary-border-subtle:#c4c8cb;--bs-success-border-subtle:#a3cfbb;--bs-info-border-subtle:#9eeaf9;--bs-warning-border-subtle:#ffe69c;--bs-danger-border-subtle:#f1aeb5;--bs-light-border-subtle:#e9ecef;--bs-dark-border-subtle:#adb5bd;--bs-white-rgb:255,255,255;--bs-black-rgb:0,0,0;--bs-font-sans-serif:system-ui,-apple-system,"Segoe UI",Roboto,"Helvetica Neue","Noto Sans","Liberation Sans",Arial,sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol","Noto Color Emoji";--bs-font-monospace:SFMono-Regular,Menlo,Monaco,Consolas,"Liberation Mono","Courier New",monospace;--bs-gradient:linear-gradient(180deg,hsla(0,0%,100%,.15),hsla(0,0%,100%,0));--bs-body-font-family:-apple-system,BlinkMacSystemFont,"Inter","DM Sans","Helvetica Neue","Segoe UI",Arial,"Noto Sans",sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol","Noto Color Emoji";--bs-body-font-size:.875rem;--bs-body-font-weight:500;--bs-body-line-height:1.5;--bs-body-color:#3a4247;--bs-body-color-rgb:58,66,71;--bs-body-bg:#fff;--bs-body-bg-rgb:255,255,255;--bs-emphasis-color:#000;--bs-emphasis-color-rgb:0,0,0;--bs-secondary-color:rgba(33,37,41,.75);--bs-secondary-color-rgb:33,37,41;--bs-secondary-bg:#e9ecef;--bs-secondary-bg-rgb:233,236,239;--bs-tertiary-color:rgba(33,37,41,.5);--bs-tertiary-color-rgb:33,37,41;--bs-tertiary-bg:#fff;--bs-tertiary-bg-rgb:255,255,255;--bs-heading-color:inherit;--bs-link-color:#0d6efd;--bs-link-color-rgb:13,110,253;--bs-link-decoration:underline;--bs-link-hover-color:#0a58ca;--bs-link-hover-color-rgb:10,88,202;--bs-code-color:#d63384;--bs-highlight-color:#212529;--bs-highlight-bg:#fff3cd;--bs-border-width:1px;--bs-border-style:solid;--bs-border-color:#dee2e6;--bs-border-color-translucent:rgba(0,0,0,.175);--bs-border-radius:1.25rem;--bs-border-radius-sm:.25rem;--bs-border-radius-lg:.5rem;--bs-border-radius-xl:1rem;--bs-border-radius-xxl:2rem;--bs-border-radius-2xl:var(--bs-border-radius-xxl);--bs-border-radius-pill:50rem;--bs-box-shadow:0 0.5rem 1rem rgba(0,0,0,.15);--bs-box-shadow-sm:0 0.125rem 0.25rem rgba(0,0,0,.075);--bs-box-shadow-lg:0 1rem 3rem rgba(0,0,0,.175);--bs-box-shadow-inset:inset 0 1px 2px rgba(0,0,0,.075);--bs-focus-ring-width:.25rem;--bs-focus-ring-opacity:.25;--bs-focus-ring-color:rgba(13,110,253,.25);--bs-form-valid-color:#198754;--bs-form-valid-border-color:#198754;--bs-form-invalid-color:#dc3545;--bs-form-invalid-border-color:#dc3545}[data-bs-theme=dark]{--bs-body-color:#fff;--bs-body-color-rgb:255,255,255;--bs-body-bg:#0c0c0f;--bs-body-bg-rgb:12,12,15;--bs-emphasis-color:#fff;--bs-emphasis-color-rgb:255,255,255;--bs-secondary-color:rgba(222,226,230,.75);--bs-secondary-color-rgb:222,226,230;--bs-secondary-bg:#343a40;--bs-secondary-bg-rgb:52,58,64;--bs-tertiary-color:rgba(222,226,230,.5);--bs-tertiary-color-rgb:222,226,230;--bs-tertiary-bg:#2b3035;--bs-tertiary-bg-rgb:43,48,53;--bs-primary-text-emphasis:#6ea8fe;--bs-secondary-text-emphasis:#a7acb1;--bs-success-text-emphasis:#75b798;--bs-info-text-emphasis:#6edff6;--bs-warning-text-emphasis:#ffda6a;--bs-danger-text-emphasis:#ea868f;--bs-light-text-emphasis:#f8f9fa;--bs-dark-text-emphasis:#dee2e6;--bs-primary-bg-subtle:#031633;--bs-secondary-bg-subtle:#161719;--bs-success-bg-subtle:#051b11;--bs-info-bg-subtle:#032830;--bs-warning-bg-subtle:#332701;--bs-danger-bg-subtle:#2c0b0e;--bs-light-bg-subtle:#343a40;--bs-dark-bg-subtle:#1a1d20;--bs-primary-border-subtle:#084298;--bs-secondary-border-subtle:#41464b;--bs-success-border-subtle:#0f5132;--bs-info-border-subtle:#087990;--bs-warning-border-subtle:#997404;--bs-danger-border-subtle:#842029;--bs-light-border-subtle:#495057;--bs-dark-border-subtle:#343a40;--bs-heading-color:inherit;--bs-link-color:#6ea8fe;--bs-link-hover-color:#8bb9fe;--bs-link-color-rgb:110,168,254;--bs-link-hover-color-rgb:139,185,254;--bs-code-color:#e685b5;--bs-highlight-color:#dee2e6;--bs-highlight-bg:#664d03;--bs-border-color:#495057;--bs-border-color-translucent:hsla(0,0%,100%,.15);--bs-form-valid-color:#75b798;--bs-form-valid-border-color:#75b798;--bs-form-invalid-color:#ea868f;--bs-form-invalid-border-color:#ea868f;color-scheme:dark}*,:after,:before{box-sizing:border-box}@media (prefers-reduced-motion:no-preference){:root{scroll-behavior:smooth}}body{-webkit-text-size-adjust:100%;-webkit-tap-highlight-color:rgba(0,0,0,0);background-color:#fff;background-color:var(--bs-body-bg);color:#3a4247;color:var(--bs-body-color);font-family:-apple-system,BlinkMacSystemFont,Inter,DM Sans,Helvetica Neue,Segoe UI,Arial,Noto Sans,sans-serif,Apple Color Emoji,Segoe UI Emoji,Segoe UI Symbol,Noto Color Emoji;font-family:var(--bs-body-font-family);font-size:.875rem;font-size:var(--bs-body-font-size);font-weight:500;font-weight:var(--bs-body-font-weight);line-height:1.5;line-height:var(--bs-body-line-height);margin:0;text-align:var(--bs-body-text-align)}hr{border:0;border-top:1px solid;border-top:var(--bs-border-width) solid;color:inherit;margin:1rem 0;opacity:.25}.h1,.h2,.h3,.h4,.h5,.h6,h1,h2,h3,h4,h5,h6{color:inherit;color:var(--bs-heading-color);font-weight:500;line-height:1.2;margin-bottom:.5rem;margin-top:0}.h1,h1{font-size:calc(1.375rem + 1.5vw)}@media (min-width:1200px){.h1,h1{font-size:2.5rem}}.h2,h2{font-size:calc(1.325rem + .9vw)}@media (min-width:1200px){.h2,h2{font-size:2rem}}.h3,h3{font-size:calc(1.3rem + .6vw)}@media (min-width:1200px){.h3,h3{font-size:1.75rem}}.h4,h4{font-size:calc(1.275rem + .3vw)}@media (min-width:1200px){.h4,h4{font-size:1.5rem}}.h5,h5{font-size:1.25rem}.h6,h6{font-size:1rem}p{margin-bottom:1rem;margin-top:0}abbr[title]{cursor:help;-webkit-text-decoration:underline dotted;text-decoration:underline dotted;-webkit-text-decoration-skip-ink:none;text-decoration-skip-ink:none}address{font-style:normal;line-height:inherit;margin-bottom:1rem}ol,ul{padding-left:2rem}dl,ol,ul{margin-bottom:1rem;margin-top:0}ol ol,ol ul,ul ol,ul ul{margin-bottom:0}dt{font-weight:700}dd{margin-bottom:.5rem;margin-left:0}blockquote{margin:0 0 1rem}b,strong{font-weight:bolder}.small,small{font-size:.875em}.mark,mark{background-color:#fff3cd;background-color:var(--bs-highlight-bg);color:#212529;color:var(--bs-highlight-color);padding:.1875em}sub,sup{font-size:.75em;line-height:0;position:relative;vertical-align:baseline}sub{bottom:-.25em}sup{top:-.5em}a{color:#0d6efd;color:rgba(var(--bs-link-color-rgb),var(--bs-link-opacity,1));text-decoration:underline}a:hover{--bs-link-color-rgb:var(--bs-link-hover-color-rgb)}a:not([href]):not([class]),a:not([href]):not([class]):hover{color:inherit;text-decoration:none}code,kbd,pre,samp{font-family:SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,monospace;font-family:var(--bs-font-monospace);font-size:1em}pre{display:block;font-size:.875em;margin-bottom:1rem;margin-top:0;overflow:auto}pre code{color:inherit;font-size:inherit;word-break:normal}code{word-wrap:break-word;color:#d63384;color:var(--bs-code-color);font-size:.875em}a>code{color:inherit}kbd{background-color:#3a4247;background-color:var(--bs-body-color);border-radius:.25rem;color:#fff;color:var(--bs-body-bg);font-size:.875em;padding:.1875rem .375rem}kbd kbd{font-size:1em;padding:0}figure{margin:0 0 1rem}img,svg{vertical-align:middle}table{border-collapse:collapse;caption-side:bottom}caption{color:rgba(33,37,41,.75);color:var(--bs-secondary-color);padding-bottom:.5rem;padding-top:.5rem;text-align:left}th{text-align:inherit;text-align:-webkit-match-parent}tbody,td,tfoot,th,thead,tr{border:0 solid;border-color:inherit}label{display:inline-block}button{border-radius:0}button:focus:not(:focus-visible){outline:0}button,input,optgroup,select,textarea{font-family:inherit;font-size:inherit;line-height:inherit;margin:0}button,select{text-transform:none}[role=button]{cursor:pointer}select{word-wrap:normal}select:disabled{opacity:1}[list]:not([type=date]):not([type=datetime-local]):not([type=month]):not([type=week]):not([type=time])::-webkit-calendar-picker-indicator{display:none!important}[type=button],[type=reset],[type=submit],button{-webkit-appearance:button}[type=button]:not(:disabled),[type=reset]:not(:disabled),[type=submit]:not(:disabled),button:not(:disabled){cursor:pointer}::-moz-focus-inner{border-style:none;padding:0}textarea{resize:vertical}fieldset{border:0;margin:0;min-width:0;padding:0}legend{float:left;font-size:calc(1.275rem + .3vw);line-height:inherit;margin-bottom:.5rem;padding:0;width:100%}@media (min-width:1200px){legend{font-size:1.5rem}}legend+*{clear:left}::-webkit-datetime-edit-day-field,::-webkit-datetime-edit-fields-wrapper,::-webkit-datetime-edit-hour-field,::-webkit-datetime-edit-minute,::-webkit-datetime-edit-month-field,::-webkit-datetime-edit-text,::-webkit-datetime-edit-year-field{padding:0}::-webkit-inner-spin-button{height:auto}[type=search]{-webkit-appearance:textfield;outline-offset:-2px}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-color-swatch-wrapper{padding:0}::-webkit-file-upload-button{-webkit-appearance:button;font:inherit}::file-selector-button{-webkit-appearance:button;font:inherit}output{display:inline-block}iframe{border:0}summary{cursor:pointer;display:list-item}progress{vertical-align:baseline}[hidden]{display:none!important}.lead{font-size:1.25rem;font-weight:300}.display-1{font-size:calc(1.625rem + 4.5vw);font-weight:300;line-height:1.2}@media (min-width:1200px){.display-1{font-size:5rem}}.display-2{font-size:calc(1.575rem + 3.9vw);font-weight:300;line-height:1.2}@media (min-width:1200px){.display-2{font-size:4.5rem}}.display-3{font-size:calc(1.525rem + 3.3vw);font-weight:300;line-height:1.2}@media (min-width:1200px){.display-3{font-size:4rem}}.display-4{font-size:calc(1.475rem + 2.7vw);font-weight:300;line-height:1.2}@media (min-width:1200px){.display-4{font-size:3.5rem}}.display-5{font-size:calc(1.425rem + 2.1vw);font-weight:300;line-height:1.2}@media (min-width:1200px){.display-5{font-size:3rem}}.display-6{font-size:calc(1.375rem + 1.5vw);font-weight:300;line-height:1.2}@media (min-width:1200px){.display-6{font-size:2.5rem}}.list-inline,.list-unstyled{list-style:none;padding-left:0}.list-inline-item{display:inline-block}.list-inline-item:not(:last-child){margin-right:.5rem}.initialism{font-size:.875em;text-transform:uppercase}.blockquote{font-size:1.25rem;margin-bottom:1rem}.blockquote>:last-child{margin-bottom:0}.blockquote-footer{color:#6c757d;font-size:.875em;margin-bottom:1rem;margin-top:-1rem}.blockquote-footer:before{content:"\2014\00A0"}.img-fluid,.img-thumbnail{height:auto;max-width:100%}.img-thumbnail{background-color:#fff;background-color:var(--bs-body-bg);border:1px solid #dee2e6;border:var(--bs-border-width) solid var(--bs-border-color);border-radius:1.25rem;border-radius:var(--bs-border-radius);box-shadow:0 .125rem .25rem rgba(0,0,0,.075);box-shadow:var(--bs-box-shadow-sm);padding:.25rem}.figure{display:inline-block}.figure-img{line-height:1;margin-bottom:.5rem}.figure-caption{color:rgba(33,37,41,.75);color:var(--bs-secondary-color);font-size:.875em}.container,.container-fluid,.container-lg,.container-md,.container-sm,.container-xl,.container-xxl{--bs-gutter-x:1.5rem;--bs-gutter-y:0;margin-left:auto;margin-right:auto;padding-left:calc(var(--bs-gutter-x)*.5);padding-right:calc(var(--bs-gutter-x)*.5);width:100%}@media (min-width:576px){.container,.container-sm{max-width:540px}}@media (min-width:768px){.container,.container-md,.container-sm{max-width:720px}}@media (min-width:992px){.container,.container-lg,.container-md,.container-sm{max-width:960px}}@media (min-width:1200px){.container,.container-lg,.container-md,.container-sm,.container-xl{max-width:1140px}}@media (min-width:1400px){.container,.container-lg,.container-md,.container-sm,.container-xl,.container-xxl{max-width:1320px}}:root{--bs-breakpoint-xs:0;--bs-breakpoint-sm:576px;--bs-breakpoint-md:768px;--bs-breakpoint-lg:992px;--bs-breakpoint-xl:1200px;--bs-breakpoint-xxl:1400px}.row{--bs-gutter-x:1.5rem;--bs-gutter-y:0;display:flex;flex-wrap:wrap;margin-left:calc(var(--bs-gutter-x)*-.5);margin-right:calc(var(--bs-gutter-x)*-.5);margin-top:calc(var(--bs-gutter-y)*-1)}.row>*{flex-shrink:0;margin-top:var(--bs-gutter-y);max-width:100%;padding-left:calc(var(--bs-gutter-x)*.5);padding-right:calc(var(--bs-gutter-x)*.5);width:100%}.col{flex:1 0}.row-cols-auto>*{flex:0 0 auto;width:auto}.row-cols-1>*{flex:0 0 auto;width:100%}.row-cols-2>*{flex:0 0 auto;width:50%}.row-cols-3>*{flex:0 0 auto;width:33.33333%}.row-cols-4>*{flex:0 0 auto;width:25%}.row-cols-5>*{flex:0 0 auto;width:20%}.row-cols-6>*{flex:0 0 auto;width:16.66667%}.col-auto{flex:0 0 auto;width:auto}.col-1{flex:0 0 auto;width:8.33333%}.col-2{flex:0 0 auto;width:16.66667%}.col-3{flex:0 0 auto;width:25%}.col-4{flex:0 0 auto;width:33.33333%}.col-5{flex:0 0 auto;width:41.66667%}.col-6{flex:0 0 auto;width:50%}.col-7{flex:0 0 auto;width:58.33333%}.col-8{flex:0 0 auto;width:66.66667%}.col-9{flex:0 0 auto;width:75%}.col-10{flex:0 0 auto;width:83.33333%}.col-11{flex:0 0 auto;width:91.66667%}.col-12{flex:0 0 auto;width:100%}.offset-1{margin-left:8.33333%}.offset-2{margin-left:16.66667%}.offset-3{margin-left:25%}.offset-4{margin-left:33.33333%}.offset-5{margin-left:41.66667%}.offset-6{margin-left:50%}.offset-7{margin-left:58.33333%}.offset-8{margin-left:66.66667%}.offset-9{margin-left:75%}.offset-10{margin-left:83.33333%}.offset-11{margin-left:91.66667%}.g-0,.gx-0{--bs-gutter-x:0}.g-0,.gy-0{--bs-gutter-y:0}.g-1,.gx-1{--bs-gutter-x:.25rem}.g-1,.gy-1{--bs-gutter-y:.25rem}.g-2,.gx-2{--bs-gutter-x:.5rem}.g-2,.gy-2{--bs-gutter-y:.5rem}.g-3,.gx-3{--bs-gutter-x:1rem}.g-3,.gy-3{--bs-gutter-y:1rem}.g-4,.gx-4{--bs-gutter-x:1.5rem}.g-4,.gy-4{--bs-gutter-y:1.5rem}.g-5,.gx-5{--bs-gutter-x:3rem}.g-5,.gy-5{--bs-gutter-y:3rem}@media (min-width:576px){.col-sm{flex:1 0}.row-cols-sm-auto>*{flex:0 0 auto;width:auto}.row-cols-sm-1>*{flex:0 0 auto;width:100%}.row-cols-sm-2>*{flex:0 0 auto;width:50%}.row-cols-sm-3>*{flex:0 0 auto;width:33.33333%}.row-cols-sm-4>*{flex:0 0 auto;width:25%}.row-cols-sm-5>*{flex:0 0 auto;width:20%}.row-cols-sm-6>*{flex:0 0 auto;width:16.66667%}.col-sm-auto{flex:0 0 auto;width:auto}.col-sm-1{flex:0 0 auto;width:8.33333%}.col-sm-2{flex:0 0 auto;width:16.66667%}.col-sm-3{flex:0 0 auto;width:25%}.col-sm-4{flex:0 0 auto;width:33.33333%}.col-sm-5{flex:0 0 auto;width:41.66667%}.col-sm-6{flex:0 0 auto;width:50%}.col-sm-7{flex:0 0 auto;width:58.33333%}.col-sm-8{flex:0 0 auto;width:66.66667%}.col-sm-9{flex:0 0 auto;width:75%}.col-sm-10{flex:0 0 auto;width:83.33333%}.col-sm-11{flex:0 0 auto;width:91.66667%}.col-sm-12{flex:0 0 auto;width:100%}.offset-sm-0{margin-left:0}.offset-sm-1{margin-left:8.33333%}.offset-sm-2{margin-left:16.66667%}.offset-sm-3{margin-left:25%}.offset-sm-4{margin-left:33.33333%}.offset-sm-5{margin-left:41.66667%}.offset-sm-6{margin-left:50%}.offset-sm-7{margin-left:58.33333%}.offset-sm-8{margin-left:66.66667%}.offset-sm-9{margin-left:75%}.offset-sm-10{margin-left:83.33333%}.offset-sm-11{margin-left:91.66667%}.g-sm-0,.gx-sm-0{--bs-gutter-x:0}.g-sm-0,.gy-sm-0{--bs-gutter-y:0}.g-sm-1,.gx-sm-1{--bs-gutter-x:.25rem}.g-sm-1,.gy-sm-1{--bs-gutter-y:.25rem}.g-sm-2,.gx-sm-2{--bs-gutter-x:.5rem}.g-sm-2,.gy-sm-2{--bs-gutter-y:.5rem}.g-sm-3,.gx-sm-3{--bs-gutter-x:1rem}.g-sm-3,.gy-sm-3{--bs-gutter-y:1rem}.g-sm-4,.gx-sm-4{--bs-gutter-x:1.5rem}.g-sm-4,.gy-sm-4{--bs-gutter-y:1.5rem}.g-sm-5,.gx-sm-5{--bs-gutter-x:3rem}.g-sm-5,.gy-sm-5{--bs-gutter-y:3rem}}@media (min-width:768px){.col-md{flex:1 0}.row-cols-md-auto>*{flex:0 0 auto;width:auto}.row-cols-md-1>*{flex:0 0 auto;width:100%}.row-cols-md-2>*{flex:0 0 auto;width:50%}.row-cols-md-3>*{flex:0 0 auto;width:33.33333%}.row-cols-md-4>*{flex:0 0 auto;width:25%}.row-cols-md-5>*{flex:0 0 auto;width:20%}.row-cols-md-6>*{flex:0 0 auto;width:16.66667%}.col-md-auto{flex:0 0 auto;width:auto}.col-md-1{flex:0 0 auto;width:8.33333%}.col-md-2{flex:0 0 auto;width:16.66667%}.col-md-3{flex:0 0 auto;width:25%}.col-md-4{flex:0 0 auto;width:33.33333%}.col-md-5{flex:0 0 auto;width:41.66667%}.col-md-6{flex:0 0 auto;width:50%}.col-md-7{flex:0 0 auto;width:58.33333%}.col-md-8{flex:0 0 auto;width:66.66667%}.col-md-9{flex:0 0 auto;width:75%}.col-md-10{flex:0 0 auto;width:83.33333%}.col-md-11{flex:0 0 auto;width:91.66667%}.col-md-12{flex:0 0 auto;width:100%}.offset-md-0{margin-left:0}.offset-md-1{margin-left:8.33333%}.offset-md-2{margin-left:16.66667%}.offset-md-3{margin-left:25%}.offset-md-4{margin-left:33.33333%}.offset-md-5{margin-left:41.66667%}.offset-md-6{margin-left:50%}.offset-md-7{margin-left:58.33333%}.offset-md-8{margin-left:66.66667%}.offset-md-9{margin-left:75%}.offset-md-10{margin-left:83.33333%}.offset-md-11{margin-left:91.66667%}.g-md-0,.gx-md-0{--bs-gutter-x:0}.g-md-0,.gy-md-0{--bs-gutter-y:0}.g-md-1,.gx-md-1{--bs-gutter-x:.25rem}.g-md-1,.gy-md-1{--bs-gutter-y:.25rem}.g-md-2,.gx-md-2{--bs-gutter-x:.5rem}.g-md-2,.gy-md-2{--bs-gutter-y:.5rem}.g-md-3,.gx-md-3{--bs-gutter-x:1rem}.g-md-3,.gy-md-3{--bs-gutter-y:1rem}.g-md-4,.gx-md-4{--bs-gutter-x:1.5rem}.g-md-4,.gy-md-4{--bs-gutter-y:1.5rem}.g-md-5,.gx-md-5{--bs-gutter-x:3rem}.g-md-5,.gy-md-5{--bs-gutter-y:3rem}}@media (min-width:992px){.col-lg{flex:1 0}.row-cols-lg-auto>*{flex:0 0 auto;width:auto}.row-cols-lg-1>*{flex:0 0 auto;width:100%}.row-cols-lg-2>*{flex:0 0 auto;width:50%}.row-cols-lg-3>*{flex:0 0 auto;width:33.33333%}.row-cols-lg-4>*{flex:0 0 auto;width:25%}.row-cols-lg-5>*{flex:0 0 auto;width:20%}.row-cols-lg-6>*{flex:0 0 auto;width:16.66667%}.col-lg-auto{flex:0 0 auto;width:auto}.col-lg-1{flex:0 0 auto;width:8.33333%}.col-lg-2{flex:0 0 auto;width:16.66667%}.col-lg-3{flex:0 0 auto;width:25%}.col-lg-4{flex:0 0 auto;width:33.33333%}.col-lg-5{flex:0 0 auto;width:41.66667%}.col-lg-6{flex:0 0 auto;width:50%}.col-lg-7{flex:0 0 auto;width:58.33333%}.col-lg-8{flex:0 0 auto;width:66.66667%}.col-lg-9{flex:0 0 auto;width:75%}.col-lg-10{flex:0 0 auto;width:83.33333%}.col-lg-11{flex:0 0 auto;width:91.66667%}.col-lg-12{flex:0 0 auto;width:100%}.offset-lg-0{margin-left:0}.offset-lg-1{margin-left:8.33333%}.offset-lg-2{margin-left:16.66667%}.offset-lg-3{margin-left:25%}.offset-lg-4{margin-left:33.33333%}.offset-lg-5{margin-left:41.66667%}.offset-lg-6{margin-left:50%}.offset-lg-7{margin-left:58.33333%}.offset-lg-8{margin-left:66.66667%}.offset-lg-9{margin-left:75%}.offset-lg-10{margin-left:83.33333%}.offset-lg-11{margin-left:91.66667%}.g-lg-0,.gx-lg-0{--bs-gutter-x:0}.g-lg-0,.gy-lg-0{--bs-gutter-y:0}.g-lg-1,.gx-lg-1{--bs-gutter-x:.25rem}.g-lg-1,.gy-lg-1{--bs-gutter-y:.25rem}.g-lg-2,.gx-lg-2{--bs-gutter-x:.5rem}.g-lg-2,.gy-lg-2{--bs-gutter-y:.5rem}.g-lg-3,.gx-lg-3{--bs-gutter-x:1rem}.g-lg-3,.gy-lg-3{--bs-gutter-y:1rem}.g-lg-4,.gx-lg-4{--bs-gutter-x:1.5rem}.g-lg-4,.gy-lg-4{--bs-gutter-y:1.5rem}.g-lg-5,.gx-lg-5{--bs-gutter-x:3rem}.g-lg-5,.gy-lg-5{--bs-gutter-y:3rem}}@media (min-width:1200px){.col-xl{flex:1 0}.row-cols-xl-auto>*{flex:0 0 auto;width:auto}.row-cols-xl-1>*{flex:0 0 auto;width:100%}.row-cols-xl-2>*{flex:0 0 auto;width:50%}.row-cols-xl-3>*{flex:0 0 auto;width:33.33333%}.row-cols-xl-4>*{flex:0 0 auto;width:25%}.row-cols-xl-5>*{flex:0 0 auto;width:20%}.row-cols-xl-6>*{flex:0 0 auto;width:16.66667%}.col-xl-auto{flex:0 0 auto;width:auto}.col-xl-1{flex:0 0 auto;width:8.33333%}.col-xl-2{flex:0 0 auto;width:16.66667%}.col-xl-3{flex:0 0 auto;width:25%}.col-xl-4{flex:0 0 auto;width:33.33333%}.col-xl-5{flex:0 0 auto;width:41.66667%}.col-xl-6{flex:0 0 auto;width:50%}.col-xl-7{flex:0 0 auto;width:58.33333%}.col-xl-8{flex:0 0 auto;width:66.66667%}.col-xl-9{flex:0 0 auto;width:75%}.col-xl-10{flex:0 0 auto;width:83.33333%}.col-xl-11{flex:0 0 auto;width:91.66667%}.col-xl-12{flex:0 0 auto;width:100%}.offset-xl-0{margin-left:0}.offset-xl-1{margin-left:8.33333%}.offset-xl-2{margin-left:16.66667%}.offset-xl-3{margin-left:25%}.offset-xl-4{margin-left:33.33333%}.offset-xl-5{margin-left:41.66667%}.offset-xl-6{margin-left:50%}.offset-xl-7{margin-left:58.33333%}.offset-xl-8{margin-left:66.66667%}.offset-xl-9{margin-left:75%}.offset-xl-10{margin-left:83.33333%}.offset-xl-11{margin-left:91.66667%}.g-xl-0,.gx-xl-0{--bs-gutter-x:0}.g-xl-0,.gy-xl-0{--bs-gutter-y:0}.g-xl-1,.gx-xl-1{--bs-gutter-x:.25rem}.g-xl-1,.gy-xl-1{--bs-gutter-y:.25rem}.g-xl-2,.gx-xl-2{--bs-gutter-x:.5rem}.g-xl-2,.gy-xl-2{--bs-gutter-y:.5rem}.g-xl-3,.gx-xl-3{--bs-gutter-x:1rem}.g-xl-3,.gy-xl-3{--bs-gutter-y:1rem}.g-xl-4,.gx-xl-4{--bs-gutter-x:1.5rem}.g-xl-4,.gy-xl-4{--bs-gutter-y:1.5rem}.g-xl-5,.gx-xl-5{--bs-gutter-x:3rem}.g-xl-5,.gy-xl-5{--bs-gutter-y:3rem}}@media (min-width:1400px){.col-xxl{flex:1 0}.row-cols-xxl-auto>*{flex:0 0 auto;width:auto}.row-cols-xxl-1>*{flex:0 0 auto;width:100%}.row-cols-xxl-2>*{flex:0 0 auto;width:50%}.row-cols-xxl-3>*{flex:0 0 auto;width:33.33333%}.row-cols-xxl-4>*{flex:0 0 auto;width:25%}.row-cols-xxl-5>*{flex:0 0 auto;width:20%}.row-cols-xxl-6>*{flex:0 0 auto;width:16.66667%}.col-xxl-auto{flex:0 0 auto;width:auto}.col-xxl-1{flex:0 0 auto;width:8.33333%}.col-xxl-2{flex:0 0 auto;width:16.66667%}.col-xxl-3{flex:0 0 auto;width:25%}.col-xxl-4{flex:0 0 auto;width:33.33333%}.col-xxl-5{flex:0 0 auto;width:41.66667%}.col-xxl-6{flex:0 0 auto;width:50%}.col-xxl-7{flex:0 0 auto;width:58.33333%}.col-xxl-8{flex:0 0 auto;width:66.66667%}.col-xxl-9{flex:0 0 auto;width:75%}.col-xxl-10{flex:0 0 auto;width:83.33333%}.col-xxl-11{flex:0 0 auto;width:91.66667%}.col-xxl-12{flex:0 0 auto;width:100%}.offset-xxl-0{margin-left:0}.offset-xxl-1{margin-left:8.33333%}.offset-xxl-2{margin-left:16.66667%}.offset-xxl-3{margin-left:25%}.offset-xxl-4{margin-left:33.33333%}.offset-xxl-5{margin-left:41.66667%}.offset-xxl-6{margin-left:50%}.offset-xxl-7{margin-left:58.33333%}.offset-xxl-8{margin-left:66.66667%}.offset-xxl-9{margin-left:75%}.offset-xxl-10{margin-left:83.33333%}.offset-xxl-11{margin-left:91.66667%}.g-xxl-0,.gx-xxl-0{--bs-gutter-x:0}.g-xxl-0,.gy-xxl-0{--bs-gutter-y:0}.g-xxl-1,.gx-xxl-1{--bs-gutter-x:.25rem}.g-xxl-1,.gy-xxl-1{--bs-gutter-y:.25rem}.g-xxl-2,.gx-xxl-2{--bs-gutter-x:.5rem}.g-xxl-2,.gy-xxl-2{--bs-gutter-y:.5rem}.g-xxl-3,.gx-xxl-3{--bs-gutter-x:1rem}.g-xxl-3,.gy-xxl-3{--bs-gutter-y:1rem}.g-xxl-4,.gx-xxl-4{--bs-gutter-x:1.5rem}.g-xxl-4,.gy-xxl-4{--bs-gutter-y:1.5rem}.g-xxl-5,.gx-xxl-5{--bs-gutter-x:3rem}.g-xxl-5,.gy-xxl-5{--bs-gutter-y:3rem}}.table{--bs-table-color-type:initial;--bs-table-bg-type:initial;--bs-table-color-state:initial;--bs-table-bg-state:initial;--bs-table-color:var(--bs-emphasis-color);--bs-table-bg:var(--bs-body-bg);--bs-table-border-color:var(--bs-border-color);--bs-table-accent-bg:transparent;--bs-table-striped-color:var(--bs-emphasis-color);--bs-table-striped-bg:rgba(var(--bs-emphasis-color-rgb),0.05);--bs-table-active-color:var(--bs-emphasis-color);--bs-table-active-bg:rgba(var(--bs-emphasis-color-rgb),0.1);--bs-table-hover-color:var(--bs-emphasis-color);--bs-table-hover-bg:rgba(var(--bs-emphasis-color-rgb),0.075);border-color:var(--bs-table-border-color);margin-bottom:1rem;vertical-align:top;width:100%}.table>:not(caption)>*>*{background-color:var(--bs-table-bg);border-bottom-width:1px;border-bottom-width:var(--bs-border-width);box-shadow:inset 0 0 0 9999px var(--bs-table-accent-bg);box-shadow:inset 0 0 0 9999px var(--bs-table-bg-state,var(--bs-table-bg-type,var(--bs-table-accent-bg)));color:var(--bs-table-color);color:var(--bs-table-color-state,var(--bs-table-color-type,var(--bs-table-color)));padding:.5rem}.table>tbody{vertical-align:inherit}.table>thead{vertical-align:bottom}.table-group-divider{border-top:2px solid;border-top:calc(var(--bs-border-width)*2) solid}.caption-top{caption-side:top}.table-sm>:not(caption)>*>*{padding:.25rem}.table-bordered>:not(caption)>*{border-width:1px 0;border-width:var(--bs-border-width) 0}.table-bordered>:not(caption)>*>*{border-width:0 1px;border-width:0 var(--bs-border-width)}.table-borderless>:not(caption)>*>*{border-bottom-width:0}.table-borderless>:not(:first-child){border-top-width:0}.table-striped-columns>:not(caption)>tr>:nth-child(2n),.table-striped>tbody>tr:nth-of-type(odd)>*{--bs-table-color-type:var(--bs-table-striped-color);--bs-table-bg-type:var(--bs-table-striped-bg)}.table-active{--bs-table-color-state:var(--bs-table-active-color);--bs-table-bg-state:var(--bs-table-active-bg)}.table-hover>tbody>tr:hover>*{--bs-table-color-state:var(--bs-table-hover-color);--bs-table-bg-state:var(--bs-table-hover-bg)}.table-primary{--bs-table-color:#000;--bs-table-bg:#cfe2ff;--bs-table-border-color:#a6b5cc;--bs-table-striped-bg:#c5d7f2;--bs-table-striped-color:#000;--bs-table-active-bg:#bacbe6;--bs-table-active-color:#000;--bs-table-hover-bg:#bfd1ec;--bs-table-hover-color:#000}.table-primary,.table-secondary{border-color:var(--bs-table-border-color);color:var(--bs-table-color)}.table-secondary{--bs-table-color:#000;--bs-table-bg:#e2e3e5;--bs-table-border-color:#b5b6b7;--bs-table-striped-bg:#d7d8da;--bs-table-striped-color:#000;--bs-table-active-bg:#cbccce;--bs-table-active-color:#000;--bs-table-hover-bg:#d1d2d4;--bs-table-hover-color:#000}.table-success{--bs-table-color:#000;--bs-table-bg:#d1e7dd;--bs-table-border-color:#a7b9b1;--bs-table-striped-bg:#c7dbd2;--bs-table-striped-color:#000;--bs-table-active-bg:#bcd0c7;--bs-table-active-color:#000;--bs-table-hover-bg:#c1d6cc;--bs-table-hover-color:#000}.table-info,.table-success{border-color:var(--bs-table-border-color);color:var(--bs-table-color)}.table-info{--bs-table-color:#000;--bs-table-bg:#cff4fc;--bs-table-border-color:#a6c3ca;--bs-table-striped-bg:#c5e8ef;--bs-table-striped-color:#000;--bs-table-active-bg:#badce3;--bs-table-active-color:#000;--bs-table-hover-bg:#bfe2e9;--bs-table-hover-color:#000}.table-warning{--bs-table-color:#000;--bs-table-bg:#fff3cd;--bs-table-border-color:#ccc2a4;--bs-table-striped-bg:#f2e7c3;--bs-table-striped-color:#000;--bs-table-active-bg:#e6dbb9;--bs-table-active-color:#000;--bs-table-hover-bg:#ece1be;--bs-table-hover-color:#000}.table-danger,.table-warning{border-color:var(--bs-table-border-color);color:var(--bs-table-color)}.table-danger{--bs-table-color:#000;--bs-table-bg:#f8d7da;--bs-table-border-color:#c6acae;--bs-table-striped-bg:#eccccf;--bs-table-striped-color:#000;--bs-table-active-bg:#dfc2c4;--bs-table-active-color:#000;--bs-table-hover-bg:#e5c7ca;--bs-table-hover-color:#000}.table-light{--bs-table-color:#000;--bs-table-bg:#f8f9fa;--bs-table-border-color:#c6c7c8;--bs-table-striped-bg:#ecedee;--bs-table-striped-color:#000;--bs-table-active-bg:#dfe0e1;--bs-table-active-color:#000;--bs-table-hover-bg:#e5e6e7;--bs-table-hover-color:#000}.table-dark,.table-light{border-color:var(--bs-table-border-color);color:var(--bs-table-color)}.table-dark{--bs-table-color:#fff;--bs-table-bg:#212529;--bs-table-border-color:#4d5154;--bs-table-striped-bg:#2c3034;--bs-table-striped-color:#fff;--bs-table-active-bg:#373b3e;--bs-table-active-color:#fff;--bs-table-hover-bg:#323539;--bs-table-hover-color:#fff}.table-responsive{-webkit-overflow-scrolling:touch;overflow-x:auto}@media (max-width:575.98px){.table-responsive-sm{-webkit-overflow-scrolling:touch;overflow-x:auto}}@media (max-width:767.98px){.table-responsive-md{-webkit-overflow-scrolling:touch;overflow-x:auto}}@media (max-width:991.98px){.table-responsive-lg{-webkit-overflow-scrolling:touch;overflow-x:auto}}@media (max-width:1199.98px){.table-responsive-xl{-webkit-overflow-scrolling:touch;overflow-x:auto}}@media (max-width:1399.98px){.table-responsive-xxl{-webkit-overflow-scrolling:touch;overflow-x:auto}}.form-label{margin-bottom:.5rem}.col-form-label{font-size:inherit;line-height:1.5;margin-bottom:0;padding-bottom:calc(.375rem + 1px);padding-bottom:calc(.375rem + var(--bs-border-width));padding-top:calc(.375rem + 1px);padding-top:calc(.375rem + var(--bs-border-width))}.col-form-label-lg{font-size:1.25rem;padding-bottom:calc(.5rem + 1px);padding-bottom:calc(.5rem + var(--bs-border-width));padding-top:calc(.5rem + 1px);padding-top:calc(.5rem + var(--bs-border-width))}.col-form-label-sm{font-size:.875rem;padding-bottom:calc(.25rem + 1px);padding-bottom:calc(.25rem + var(--bs-border-width));padding-top:calc(.25rem + 1px);padding-top:calc(.25rem + var(--bs-border-width))}.form-text{color:rgba(33,37,41,.75);color:var(--bs-secondary-color);font-size:.875em;margin-top:.25rem}.form-control{-webkit-appearance:none;appearance:none;background-clip:padding-box;background-color:#fff;background-color:var(--bs-body-bg);border:1px solid #dee2e6;border:var(--bs-border-width) solid var(--bs-border-color);border-radius:1.25rem;border-radius:var(--bs-border-radius);box-shadow:inset 0 1px 2px rgba(0,0,0,.075);box-shadow:var(--bs-box-shadow-inset);color:#3a4247;display:block;font-size:1rem;font-weight:400;line-height:1.5;padding:.375rem .75rem;transition:border-color .15s ease-in-out,box-shadow .15s ease-in-out;width:100%}@media (prefers-reduced-motion:reduce){.form-control{transition:none}}.form-control[type=file]{overflow:hidden}.form-control[type=file]:not(:disabled):not([readonly]){cursor:pointer}.form-control:focus{background-color:#fff;background-color:var(--bs-body-bg);border-color:#86b7fe;box-shadow:inset 0 1px 2px rgba(0,0,0,.075),0 0 0 .25rem rgba(13,110,253,.25);box-shadow:var(--bs-box-shadow-inset),0 0 0 .25rem rgba(13,110,253,.25);color:#3a4247;color:var(--bs-body-color);outline:0}.form-control::-webkit-date-and-time-value{height:1.5em;margin:0;min-width:85px}.form-control::-webkit-datetime-edit{display:block;padding:0}.form-control::placeholder{color:rgba(33,37,41,.75);color:var(--bs-secondary-color);opacity:1}.form-control:disabled{background-color:#e9ecef;opacity:1}.form-control::-webkit-file-upload-button{-webkit-margin-end:.75rem;background-color:#fff;background-color:var(--bs-tertiary-bg);background-image:linear-gradient(180deg,hsla(0,0%,100%,.15),hsla(0,0%,100%,0));background-image:var(--bs-gradient);border:0 solid;border-color:inherit;border-inline-end-width:1px;border-inline-end-width:var(--bs-border-width);border-radius:0;color:#3a4247;color:var(--bs-body-color);margin:-.375rem -.75rem;margin-inline-end:.75rem;padding:.375rem .75rem;pointer-events:none;-webkit-transition:color .15s ease-in-out,background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out;transition:color .15s ease-in-out,background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out}.form-control::file-selector-button{-webkit-margin-end:.75rem;background-color:#fff;background-color:var(--bs-tertiary-bg);background-image:linear-gradient(180deg,hsla(0,0%,100%,.15),hsla(0,0%,100%,0));background-image:var(--bs-gradient);border:0 solid;border-color:inherit;border-inline-end-width:1px;border-inline-end-width:var(--bs-border-width);border-radius:0;color:#3a4247;color:var(--bs-body-color);margin:-.375rem -.75rem;margin-inline-end:.75rem;padding:.375rem .75rem;pointer-events:none;transition:color .15s ease-in-out,background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out}@media (prefers-reduced-motion:reduce){.form-control::-webkit-file-upload-button{-webkit-transition:none;transition:none}.form-control::file-selector-button{transition:none}}.form-control:hover:not(:disabled):not([readonly])::-webkit-file-upload-button{background-color:#e9ecef;background-color:var(--bs-secondary-bg)}.form-control:hover:not(:disabled):not([readonly])::file-selector-button{background-color:#e9ecef;background-color:var(--bs-secondary-bg)}.form-control-plaintext{background-color:transparent;border:solid transparent;border-width:1px 0;border-width:var(--bs-border-width) 0;color:#3a4247;color:var(--bs-body-color);display:block;line-height:1.5;margin-bottom:0;padding:.375rem 0;width:100%}.form-control-plaintext:focus{outline:0}.form-control-plaintext.form-control-lg,.form-control-plaintext.form-control-sm{padding-left:0;padding-right:0}.form-control-sm{border-radius:.25rem;border-radius:var(--bs-border-radius-sm);font-size:.875rem;min-height:calc(1.5em + .5rem + 2px);min-height:calc(1.5em + .5rem + var(--bs-border-width)*2);padding:.25rem .5rem}.form-control-sm::-webkit-file-upload-button{-webkit-margin-end:.5rem;margin:-.25rem -.5rem;margin-inline-end:.5rem;padding:.25rem .5rem}.form-control-sm::file-selector-button{-webkit-margin-end:.5rem;margin:-.25rem -.5rem;margin-inline-end:.5rem;padding:.25rem .5rem}.form-control-lg{border-radius:.5rem;border-radius:var(--bs-border-radius-lg);font-size:1.25rem;min-height:calc(1.5em + 1rem + 2px);min-height:calc(1.5em + 1rem + var(--bs-border-width)*2);padding:.5rem 1rem}.form-control-lg::-webkit-file-upload-button{-webkit-margin-end:1rem;margin:-.5rem -1rem;margin-inline-end:1rem;padding:.5rem 1rem}.form-control-lg::file-selector-button{-webkit-margin-end:1rem;margin:-.5rem -1rem;margin-inline-end:1rem;padding:.5rem 1rem}textarea.form-control{min-height:calc(1.5em + .75rem + 2px);min-height:calc(1.5em + .75rem + var(--bs-border-width)*2)}textarea.form-control-sm{min-height:calc(1.5em + .5rem + 2px);min-height:calc(1.5em + .5rem + var(--bs-border-width)*2)}textarea.form-control-lg{min-height:calc(1.5em + 1rem + 2px);min-height:calc(1.5em + 1rem + var(--bs-border-width)*2)}.form-control-color{height:calc(1.5em + .75rem + 2px);height:calc(1.5em + .75rem + var(--bs-border-width)*2);padding:.375rem;width:3rem}.form-control-color:not(:disabled):not([readonly]){cursor:pointer}.form-control-color::-moz-color-swatch{border:0!important;border-radius:1.25rem;border-radius:var(--bs-border-radius)}.form-control-color::-webkit-color-swatch{border:0!important;border-radius:1.25rem;border-radius:var(--bs-border-radius)}.form-control-color.form-control-sm{height:calc(1.5em + .5rem + 2px);height:calc(1.5em + .5rem + var(--bs-border-width)*2)}.form-control-color.form-control-lg{height:calc(1.5em + 1rem + 2px);height:calc(1.5em + 1rem + var(--bs-border-width)*2)}.form-select{--bs-form-select-bg-img:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'%3E%3Cpath fill='none' stroke='%23343a40' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' d='m2 5 6 6 6-6'/%3E%3C/svg%3E");-webkit-appearance:none;appearance:none;background-color:#fff;background-color:var(--bs-body-bg);background-image:var(--bs-form-select-bg-img),none;background-image:var(--bs-form-select-bg-img),var(--bs-form-select-bg-icon,none);background-position:right .75rem center;background-repeat:no-repeat;background-size:16px 12px;border:1px solid #dee2e6;border:var(--bs-border-width) solid var(--bs-border-color);border-radius:1.25rem;border-radius:var(--bs-border-radius);box-shadow:inset 0 1px 2px rgba(0,0,0,.075);box-shadow:var(--bs-box-shadow-inset);color:#3a4247;color:var(--bs-body-color);display:block;font-size:1rem;font-weight:400;line-height:1.5;padding:.375rem 2.25rem .375rem .75rem;transition:border-color .15s ease-in-out,box-shadow .15s ease-in-out;width:100%}@media (prefers-reduced-motion:reduce){.form-select{transition:none}}.form-select:focus{border-color:#86b7fe;box-shadow:inset 0 1px 2px rgba(0,0,0,.075),0 0 0 .25rem rgba(13,110,253,.25);box-shadow:var(--bs-box-shadow-inset),0 0 0 .25rem rgba(13,110,253,.25);outline:0}.form-select[multiple],.form-select[size]:not([size="1"]){background-image:none;padding-right:.75rem}.form-select:disabled{background-color:#e9ecef;background-color:var(--bs-secondary-bg)}.form-select:-moz-focusring{color:transparent;text-shadow:0 0 0 #3a4247;text-shadow:0 0 0 var(--bs-body-color)}.form-select-sm{border-radius:.25rem;border-radius:var(--bs-border-radius-sm);font-size:.875rem;padding-bottom:.25rem;padding-left:.5rem;padding-top:.25rem}.form-select-lg{border-radius:.5rem;border-radius:var(--bs-border-radius-lg);font-size:1.25rem;padding-bottom:.5rem;padding-left:1rem;padding-top:.5rem}[data-bs-theme=dark] .form-select{--bs-form-select-bg-img:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'%3E%3Cpath fill='none' stroke='%23dee2e6' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' d='m2 5 6 6 6-6'/%3E%3C/svg%3E")}.form-check{display:block;margin-bottom:.125rem;min-height:1.5rem;padding-left:1.5em}.form-check .form-check-input{float:left;margin-left:-1.5em}.form-check-reverse{padding-left:0;padding-right:1.5em;text-align:right}.form-check-reverse .form-check-input{float:right;margin-left:0;margin-right:-1.5em}.form-check-input{--bs-form-check-bg:var(--bs-body-bg);-webkit-appearance:none;appearance:none;background-color:var(--bs-form-check-bg);background-image:var(--bs-form-check-bg-image);background-position:50%;background-repeat:no-repeat;background-size:contain;border:1px solid #dee2e6;border:var(--bs-border-width) solid var(--bs-border-color);flex-shrink:0;height:1em;margin-top:.25em;-webkit-print-color-adjust:exact;print-color-adjust:exact;vertical-align:top;width:1em}.form-check-input[type=checkbox]{border-radius:.25em}.form-check-input[type=radio]{border-radius:50%}.form-check-input:active{filter:brightness(90%)}.form-check-input:focus{border-color:#e7c95a;box-shadow:0 0 0 .25rem rgba(231,201,90,.25);outline:0}.form-check-input:checked{background-color:#e1ba2d;border-color:#e1ba2d}.form-check-input:checked[type=checkbox]{--bs-form-check-bg-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 20 20'%3E%3Cpath fill='none' stroke='%23fff' stroke-linecap='round' stroke-linejoin='round' stroke-width='3' d='m6 10 3 3 6-6'/%3E%3C/svg%3E"),var(--bs-gradient)}.form-check-input:checked[type=radio]{--bs-form-check-bg-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='-4 -4 8 8'%3E%3Ccircle r='2' fill='%23fff'/%3E%3C/svg%3E"),var(--bs-gradient)}.form-check-input[type=checkbox]:indeterminate{--bs-form-check-bg-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 20 20'%3E%3Cpath fill='none' stroke='%23fff' stroke-linecap='round' stroke-linejoin='round' stroke-width='3' d='M6 10h8'/%3E%3C/svg%3E"),var(--bs-gradient);background-color:#0d6efd;border-color:#0d6efd}.form-check-input:disabled{filter:none;opacity:.5;pointer-events:none}.form-check-input:disabled~.form-check-label,.form-check-input[disabled]~.form-check-label{cursor:default;opacity:.5}.form-switch{padding-left:2.5em}.form-switch .form-check-input{--bs-form-switch-bg:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='-4 -4 8 8'%3E%3Ccircle r='3' fill='rgba(0,0,0,0.25)'/%3E%3C/svg%3E");background-image:var(--bs-form-switch-bg);background-position:0;border-radius:2em;margin-left:-2.5em;transition:background-position .15s ease-in-out;width:2em}@media (prefers-reduced-motion:reduce){.form-switch .form-check-input{transition:none}}.form-switch .form-check-input:focus{--bs-form-switch-bg:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='-4 -4 8 8'%3E%3Ccircle r='3' fill='%2386b7fe'/%3E%3C/svg%3E")}.form-switch .form-check-input:checked{--bs-form-switch-bg:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='-4 -4 8 8'%3E%3Ccircle r='3' fill='%23fff'/%3E%3C/svg%3E"),var(--bs-gradient);background-position:100%}.form-switch.form-check-reverse{padding-left:0;padding-right:2.5em}.form-switch.form-check-reverse .form-check-input{margin-left:0;margin-right:-2.5em}.form-check-inline{display:inline-block;margin-right:1rem}.btn-check{clip:rect(0,0,0,0);pointer-events:none;position:absolute}.btn-check:disabled+.btn,.btn-check[disabled]+.btn{filter:none;opacity:.65;pointer-events:none}[data-bs-theme=dark] .form-switch .form-check-input:not(:checked):not(:focus){--bs-form-switch-bg:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='-4 -4 8 8'%3E%3Ccircle r='3' fill='rgba(255,255,255,0.25)'/%3E%3C/svg%3E")}.form-range{-webkit-appearance:none;appearance:none;background-color:transparent;height:1.5rem;padding:0;width:100%}.form-range:focus{outline:0}.form-range:focus::-webkit-slider-thumb{box-shadow:0 0 0 1px #fff,#e1ba2d}.form-range:focus::-moz-range-thumb{box-shadow:0 0 0 1px #fff,#e1ba2d}.form-range::-moz-focus-outer{border:0}.form-range::-webkit-slider-thumb{-webkit-appearance:none;appearance:none;background-color:#fff;background-image:linear-gradient(180deg,hsla(0,0%,100%,.15),hsla(0,0%,100%,0));background-image:var(--bs-gradient);border:.5px solid #dee2e6;border-radius:1rem;box-shadow:0 .1rem .25rem rgba(0,0,0,.1);height:1rem;margin-top:-.375rem;-webkit-transition:background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out;transition:background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out;width:1rem}@media (prefers-reduced-motion:reduce){.form-range::-webkit-slider-thumb{-webkit-transition:none;transition:none}}.form-range::-webkit-slider-thumb:active{background-color:#f6eac0;background-image:linear-gradient(180deg,hsla(0,0%,100%,.15),hsla(0,0%,100%,0));background-image:var(--bs-gradient)}.form-range::-webkit-slider-runnable-track{background-color:#33db95;border-color:transparent;border-radius:1rem;box-shadow:inset 0 1px 2px rgba(0,0,0,.075);box-shadow:var(--bs-box-shadow-inset);color:transparent;cursor:pointer;height:.25rem;width:100%}.form-range::-moz-range-thumb{appearance:none;background-color:#fff;background-image:linear-gradient(180deg,hsla(0,0%,100%,.15),hsla(0,0%,100%,0));background-image:var(--bs-gradient);border:.5px solid #dee2e6;border-radius:1rem;box-shadow:0 .1rem .25rem rgba(0,0,0,.1);height:1rem;-moz-transition:background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out;transition:background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out;width:1rem}@media (prefers-reduced-motion:reduce){.form-range::-moz-range-thumb{-moz-transition:none;transition:none}}.form-range::-moz-range-thumb:active{background-color:#f6eac0;background-image:linear-gradient(180deg,hsla(0,0%,100%,.15),hsla(0,0%,100%,0));background-image:var(--bs-gradient)}.form-range::-moz-range-track{background-color:#33db95;border-color:transparent;border-radius:1rem;box-shadow:inset 0 1px 2px rgba(0,0,0,.075);box-shadow:var(--bs-box-shadow-inset);color:transparent;cursor:pointer;height:.25rem;width:100%}.form-range:disabled{pointer-events:none}.form-range:disabled::-webkit-slider-thumb{background-color:rgba(33,37,41,.75);background-color:var(--bs-secondary-color)}.form-range:disabled::-moz-range-thumb{background-color:rgba(33,37,41,.75);background-color:var(--bs-secondary-color)}.form-floating{position:relative}.form-floating>.form-control,.form-floating>.form-control-plaintext,.form-floating>.form-select{height:calc(3.5rem + 2px);height:calc(3.5rem + var(--bs-border-width)*2);line-height:1.25;min-height:calc(3.5rem + 2px);min-height:calc(3.5rem + var(--bs-border-width)*2)}.form-floating>label{border:1px solid transparent;border:var(--bs-border-width) solid transparent;color:rgba(58,66,71,.65);color:rgba(var(--bs-body-color-rgb),.65);height:100%;left:0;max-width:100%;overflow:hidden;padding:1rem .75rem;pointer-events:none;position:absolute;text-align:start;text-overflow:ellipsis;top:0;transform-origin:0 0;transition:opacity .1s ease-in-out,transform .1s ease-in-out;white-space:nowrap;z-index:2}@media (prefers-reduced-motion:reduce){.form-floating>label{transition:none}}.form-floating>.form-control,.form-floating>.form-control-plaintext{padding:1rem .75rem}.form-floating>.form-control-plaintext::placeholder,.form-floating>.form-control::placeholder{color:transparent}.form-floating>.form-control-plaintext:focus,.form-floating>.form-control-plaintext:not(:placeholder-shown),.form-floating>.form-control:focus,.form-floating>.form-control:not(:placeholder-shown){padding-bottom:.625rem;padding-top:1.625rem}.form-floating>.form-control-plaintext:-webkit-autofill,.form-floating>.form-control:-webkit-autofill{padding-bottom:.625rem;padding-top:1.625rem}.form-floating>.form-select{padding-bottom:.625rem;padding-left:.75rem;padding-top:1.625rem}.form-floating>.form-control-plaintext~label,.form-floating>.form-control:focus~label,.form-floating>.form-control:not(:placeholder-shown)~label,.form-floating>.form-select~label{transform:scale(.85) translateY(-.5rem) translateX(.15rem)}.form-floating>.form-control:-webkit-autofill~label{transform:scale(.85) translateY(-.5rem) translateX(.15rem)}.form-floating>textarea:focus~label:after,.form-floating>textarea:not(:placeholder-shown)~label:after{background-color:#fff;background-color:var(--bs-body-bg);border-radius:1.25rem;border-radius:var(--bs-border-radius);content:"";height:1.5em;inset:1rem .375rem;position:absolute;z-index:-1}.form-floating>textarea:disabled~label:after{background-color:#e9ecef}.form-floating>.form-control-plaintext~label{border-width:1px 0;border-width:var(--bs-border-width) 0}.form-floating>.form-control:disabled~label,.form-floating>:disabled~label{color:#6c757d}.input-group{align-items:stretch;display:flex;flex-wrap:wrap;position:relative;width:100%}.input-group>.form-control,.input-group>.form-floating,.input-group>.form-select{flex:1 1 auto;min-width:0;position:relative;width:1%}.input-group>.form-control:focus,.input-group>.form-floating:focus-within,.input-group>.form-select:focus{z-index:5}.input-group .btn{position:relative;z-index:2}.input-group .btn:focus{z-index:5}.input-group-text{align-items:center;background-color:#fff;background-color:var(--bs-tertiary-bg);border:1px solid #dee2e6;border:var(--bs-border-width) solid var(--bs-border-color);border-radius:1.25rem;border-radius:var(--bs-border-radius);color:#3a4247;color:var(--bs-body-color);display:flex;font-size:1rem;font-weight:400;line-height:1.5;padding:.375rem .75rem;text-align:center;white-space:nowrap}.input-group-lg>.btn,.input-group-lg>.form-control,.input-group-lg>.form-select,.input-group-lg>.input-group-text{border-radius:.5rem;border-radius:var(--bs-border-radius-lg);font-size:1.25rem;padding:.5rem 1rem}.input-group-sm>.btn,.input-group-sm>.form-control,.input-group-sm>.form-select,.input-group-sm>.input-group-text{border-radius:.25rem;border-radius:var(--bs-border-radius-sm);font-size:.875rem;padding:.25rem .5rem}.input-group-lg>.form-select,.input-group-sm>.form-select{padding-right:3rem}.input-group.has-validation>.dropdown-toggle:nth-last-child(n+4),.input-group.has-validation>.form-floating:nth-last-child(n+3)>.form-control,.input-group.has-validation>.form-floating:nth-last-child(n+3)>.form-select,.input-group.has-validation>:nth-last-child(n+3):not(.dropdown-toggle):not(.dropdown-menu):not(.form-floating),.input-group:not(.has-validation)>.dropdown-toggle:nth-last-child(n+3),.input-group:not(.has-validation)>.form-floating:not(:last-child)>.form-control,.input-group:not(.has-validation)>.form-floating:not(:last-child)>.form-select,.input-group:not(.has-validation)>:not(:last-child):not(.dropdown-toggle):not(.dropdown-menu):not(.form-floating){border-bottom-right-radius:0;border-top-right-radius:0}.input-group>:not(:first-child):not(.dropdown-menu):not(.valid-tooltip):not(.valid-feedback):not(.invalid-tooltip):not(.invalid-feedback){border-bottom-left-radius:0;border-top-left-radius:0;margin-left:-1px;margin-left:calc(var(--bs-border-width)*-1)}.input-group>.form-floating:not(:first-child)>.form-control,.input-group>.form-floating:not(:first-child)>.form-select{border-bottom-left-radius:0;border-top-left-radius:0}.valid-feedback{color:#198754;color:var(--bs-form-valid-color);display:none;font-size:.875em;margin-top:.25rem;width:100%}.valid-tooltip{background-color:#33db95;background-color:var(--bs-success);border-radius:1.25rem;border-radius:var(--bs-border-radius);color:#fff;display:none;font-size:.875rem;margin-top:.1rem;max-width:100%;padding:.25rem .5rem;position:absolute;top:100%;z-index:5}.is-valid~.valid-feedback,.is-valid~.valid-tooltip,.was-validated :valid~.valid-feedback,.was-validated :valid~.valid-tooltip{display:block}.form-control.is-valid,.was-validated .form-control:valid{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 8 8'%3E%3Cpath fill='%23198754' d='M2.3 6.73.6 4.53c-.4-1.04.46-1.4 1.1-.8l1.1 1.4 3.4-3.8c.6-.63 1.6-.27 1.2.7l-4 4.6c-.43.5-.8.4-1.1.1'/%3E%3C/svg%3E");background-position:right calc(.375em + .1875rem) center;background-repeat:no-repeat;background-size:calc(.75em + .375rem) calc(.75em + .375rem);border-color:#198754;border-color:var(--bs-form-valid-border-color);padding-right:calc(1.5em + .75rem)}.form-control.is-valid:focus,.was-validated .form-control:valid:focus{border-color:#198754;border-color:var(--bs-form-valid-border-color);box-shadow:inset 0 1px 2px rgba(0,0,0,.075),0 0 0 .25rem rgba(51,219,149,.25);box-shadow:var(--bs-box-shadow-inset),0 0 0 .25rem rgba(var(--bs-success-rgb),.25)}.was-validated textarea.form-control:valid,textarea.form-control.is-valid{background-position:top calc(.375em + .1875rem) right calc(.375em + .1875rem);padding-right:calc(1.5em + .75rem)}.form-select.is-valid,.was-validated .form-select:valid{border-color:#198754;border-color:var(--bs-form-valid-border-color)}.form-select.is-valid:not([multiple]):not([size]),.form-select.is-valid:not([multiple])[size="1"],.was-validated .form-select:valid:not([multiple]):not([size]),.was-validated .form-select:valid:not([multiple])[size="1"]{--bs-form-select-bg-icon:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 8 8'%3E%3Cpath fill='%23198754' d='M2.3 6.73.6 4.53c-.4-1.04.46-1.4 1.1-.8l1.1 1.4 3.4-3.8c.6-.63 1.6-.27 1.2.7l-4 4.6c-.43.5-.8.4-1.1.1'/%3E%3C/svg%3E");background-position:right .75rem center,center right 2.25rem;background-size:16px 12px,calc(.75em + .375rem) calc(.75em + .375rem);padding-right:4.125rem}.form-select.is-valid:focus,.was-validated .form-select:valid:focus{border-color:#198754;border-color:var(--bs-form-valid-border-color);box-shadow:inset 0 1px 2px rgba(0,0,0,.075),0 0 0 .25rem rgba(51,219,149,.25);box-shadow:var(--bs-box-shadow-inset),0 0 0 .25rem rgba(var(--bs-success-rgb),.25)}.form-control-color.is-valid,.was-validated .form-control-color:valid{width:calc(3.75rem + 1.5em)}.form-check-input.is-valid,.was-validated .form-check-input:valid{border-color:#198754;border-color:var(--bs-form-valid-border-color)}.form-check-input.is-valid:checked,.was-validated .form-check-input:valid:checked{background-color:#198754;background-color:var(--bs-form-valid-color)}.form-check-input.is-valid:focus,.was-validated .form-check-input:valid:focus{box-shadow:0 0 0 .25rem rgba(51,219,149,.25);box-shadow:0 0 0 .25rem rgba(var(--bs-success-rgb),.25)}.form-check-input.is-valid~.form-check-label,.was-validated .form-check-input:valid~.form-check-label{color:#198754;color:var(--bs-form-valid-color)}.form-check-inline .form-check-input~.valid-feedback{margin-left:.5em}.input-group>.form-control:not(:focus).is-valid,.input-group>.form-floating:not(:focus-within).is-valid,.input-group>.form-select:not(:focus).is-valid,.was-validated .input-group>.form-control:not(:focus):valid,.was-validated .input-group>.form-floating:not(:focus-within):valid,.was-validated .input-group>.form-select:not(:focus):valid{z-index:3}.invalid-feedback{color:#dc3545;color:var(--bs-form-invalid-color);display:none;font-size:.875em;margin-top:.25rem;width:100%}.invalid-tooltip{background-color:#dc3545;background-color:var(--bs-danger);border-radius:1.25rem;border-radius:var(--bs-border-radius);color:#fff;display:none;font-size:.875rem;margin-top:.1rem;max-width:100%;padding:.25rem .5rem;position:absolute;top:100%;z-index:5}.is-invalid~.invalid-feedback,.is-invalid~.invalid-tooltip,.was-validated :invalid~.invalid-feedback,.was-validated :invalid~.invalid-tooltip{display:block}.form-control.is-invalid,.was-validated .form-control:invalid{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='12' height='12' fill='none' stroke='%23dc3545'%3E%3Ccircle cx='6' cy='6' r='4.5'/%3E%3Cpath stroke-linejoin='round' d='M5.8 3.6h.4L6 6.5z'/%3E%3Ccircle cx='6' cy='8.2' r='.6' fill='%23dc3545' stroke='none'/%3E%3C/svg%3E");background-position:right calc(.375em + .1875rem) center;background-repeat:no-repeat;background-size:calc(.75em + .375rem) calc(.75em + .375rem);border-color:#dc3545;border-color:var(--bs-form-invalid-border-color);padding-right:calc(1.5em + .75rem)}.form-control.is-invalid:focus,.was-validated .form-control:invalid:focus{border-color:#dc3545;border-color:var(--bs-form-invalid-border-color);box-shadow:inset 0 1px 2px rgba(0,0,0,.075),0 0 0 .25rem rgba(220,53,69,.25);box-shadow:var(--bs-box-shadow-inset),0 0 0 .25rem rgba(var(--bs-danger-rgb),.25)}.was-validated textarea.form-control:invalid,textarea.form-control.is-invalid{background-position:top calc(.375em + .1875rem) right calc(.375em + .1875rem);padding-right:calc(1.5em + .75rem)}.form-select.is-invalid,.was-validated .form-select:invalid{border-color:#dc3545;border-color:var(--bs-form-invalid-border-color)}.form-select.is-invalid:not([multiple]):not([size]),.form-select.is-invalid:not([multiple])[size="1"],.was-validated .form-select:invalid:not([multiple]):not([size]),.was-validated .form-select:invalid:not([multiple])[size="1"]{--bs-form-select-bg-icon:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='12' height='12' fill='none' stroke='%23dc3545'%3E%3Ccircle cx='6' cy='6' r='4.5'/%3E%3Cpath stroke-linejoin='round' d='M5.8 3.6h.4L6 6.5z'/%3E%3Ccircle cx='6' cy='8.2' r='.6' fill='%23dc3545' stroke='none'/%3E%3C/svg%3E");background-position:right .75rem center,center right 2.25rem;background-size:16px 12px,calc(.75em + .375rem) calc(.75em + .375rem);padding-right:4.125rem}.form-select.is-invalid:focus,.was-validated .form-select:invalid:focus{border-color:#dc3545;border-color:var(--bs-form-invalid-border-color);box-shadow:inset 0 1px 2px rgba(0,0,0,.075),0 0 0 .25rem rgba(220,53,69,.25);box-shadow:var(--bs-box-shadow-inset),0 0 0 .25rem rgba(var(--bs-danger-rgb),.25)}.form-control-color.is-invalid,.was-validated .form-control-color:invalid{width:calc(3.75rem + 1.5em)}.form-check-input.is-invalid,.was-validated .form-check-input:invalid{border-color:#dc3545;border-color:var(--bs-form-invalid-border-color)}.form-check-input.is-invalid:checked,.was-validated .form-check-input:invalid:checked{background-color:#dc3545;background-color:var(--bs-form-invalid-color)}.form-check-input.is-invalid:focus,.was-validated .form-check-input:invalid:focus{box-shadow:0 0 0 .25rem rgba(220,53,69,.25);box-shadow:0 0 0 .25rem rgba(var(--bs-danger-rgb),.25)}.form-check-input.is-invalid~.form-check-label,.was-validated .form-check-input:invalid~.form-check-label{color:#dc3545;color:var(--bs-form-invalid-color)}.form-check-inline .form-check-input~.invalid-feedback{margin-left:.5em}.input-group>.form-control:not(:focus).is-invalid,.input-group>.form-floating:not(:focus-within).is-invalid,.input-group>.form-select:not(:focus).is-invalid,.was-validated .input-group>.form-control:not(:focus):invalid,.was-validated .input-group>.form-floating:not(:focus-within):invalid,.was-validated .input-group>.form-select:not(:focus):invalid{z-index:4}.btn{--bs-btn-padding-x:.625rem;--bs-btn-padding-y:.375rem;--bs-btn-font-family: ;--bs-btn-font-size:.875rem;--bs-btn-font-weight:400;--bs-btn-line-height:1.5;--bs-btn-color:var(--bs-body-color);--bs-btn-bg:transparent;--bs-btn-border-width:var(--bs-border-width);--bs-btn-border-color:transparent;--bs-btn-border-radius:var(--bs-border-radius);--bs-btn-hover-border-color:transparent;--bs-btn-box-shadow:inset 0 1px 0 hsla(0,0%,100%,.15),0 1px 1px rgba(0,0,0,.075);--bs-btn-disabled-opacity:.65;--bs-btn-focus-box-shadow:0 0 0 .25rem rgba(var(--bs-btn-focus-shadow-rgb),.5);background-color:var(--bs-btn-bg);background-image:linear-gradient(180deg,hsla(0,0%,100%,.15),hsla(0,0%,100%,0));background-image:var(--bs-gradient);border:var(--bs-btn-border-width) solid var(--bs-btn-border-color);border-radius:var(--bs-btn-border-radius);box-shadow:var(--bs-btn-box-shadow);color:var(--bs-btn-color);cursor:pointer;display:inline-block;font-family:var(--bs-btn-font-family);font-size:var(--bs-btn-font-size);font-weight:var(--bs-btn-font-weight);line-height:var(--bs-btn-line-height);padding:var(--bs-btn-padding-y) var(--bs-btn-padding-x);text-align:center;text-decoration:none;transition:color .15s ease-in-out,background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out;-webkit-user-select:none;user-select:none;vertical-align:middle}@media (prefers-reduced-motion:reduce){.btn{transition:none}}.btn:hover{background-color:var(--bs-btn-hover-bg);border-color:var(--bs-btn-hover-border-color);color:var(--bs-btn-hover-color)}.btn-check+.btn:hover{background-color:var(--bs-btn-bg);border-color:var(--bs-btn-border-color);color:var(--bs-btn-color)}.btn:focus-visible{background-color:var(--bs-btn-hover-bg);background-image:linear-gradient(180deg,hsla(0,0%,100%,.15),hsla(0,0%,100%,0));background-image:var(--bs-gradient);border-color:var(--bs-btn-hover-border-color);box-shadow:var(--bs-btn-box-shadow),var(--bs-btn-focus-box-shadow);color:var(--bs-btn-hover-color);outline:0}.btn-check:focus-visible+.btn{border-color:var(--bs-btn-hover-border-color);box-shadow:var(--bs-btn-box-shadow),var(--bs-btn-focus-box-shadow);outline:0}.btn-check:checked+.btn,.btn.active,.btn.show,.btn:first-child:active,:not(.btn-check)+.btn:active{background-color:var(--bs-btn-active-bg);background-image:none;border-color:var(--bs-btn-active-border-color);box-shadow:var(--bs-btn-active-shadow);color:var(--bs-btn-active-color)}.btn-check:checked+.btn:focus-visible,.btn.active:focus-visible,.btn.show:focus-visible,.btn:first-child:active:focus-visible,:not(.btn-check)+.btn:active:focus-visible{box-shadow:var(--bs-btn-active-shadow),var(--bs-btn-focus-box-shadow)}.btn-check:checked:focus-visible+.btn{box-shadow:var(--bs-btn-active-shadow),var(--bs-btn-focus-box-shadow)}.btn.disabled,.btn:disabled,fieldset:disabled .btn{background-color:var(--bs-btn-disabled-bg);background-image:none;border-color:var(--bs-btn-disabled-border-color);box-shadow:none;color:var(--bs-btn-disabled-color);opacity:var(--bs-btn-disabled-opacity);pointer-events:none}.btn-primary{--bs-btn-color:#000;--bs-btn-bg:#e1ba2d;--bs-btn-border-color:#e1ba2d;--bs-btn-hover-color:#000;--bs-btn-hover-bg:#e6c44d;--bs-btn-hover-border-color:#e4c142;--bs-btn-focus-shadow-rgb:191,158,38;--bs-btn-active-color:#000;--bs-btn-active-bg:#e7c857;--bs-btn-active-border-color:#e4c142;--bs-btn-active-shadow:inset 0 3px 5px rgba(0,0,0,.125);--bs-btn-disabled-color:#000;--bs-btn-disabled-bg:#e1ba2d;--bs-btn-disabled-border-color:#e1ba2d}.btn-secondary{--bs-btn-color:#000;--bs-btn-bg:#f8f9fa;--bs-btn-border-color:#f8f9fa;--bs-btn-hover-color:#000;--bs-btn-hover-bg:#f9fafb;--bs-btn-hover-border-color:#f9fafb;--bs-btn-focus-shadow-rgb:211,212,213;--bs-btn-active-color:#000;--bs-btn-active-bg:#f9fafb;--bs-btn-active-border-color:#f9fafb;--bs-btn-active-shadow:inset 0 3px 5px rgba(0,0,0,.125);--bs-btn-disabled-color:#000;--bs-btn-disabled-bg:#f8f9fa;--bs-btn-disabled-border-color:#f8f9fa}.btn-success{--bs-btn-color:#000;--bs-btn-bg:#33db95;--bs-btn-border-color:#33db95;--bs-btn-hover-color:#000;--bs-btn-hover-bg:#52e0a5;--bs-btn-hover-border-color:#47dfa0;--bs-btn-focus-shadow-rgb:43,186,127;--bs-btn-active-color:#000;--bs-btn-active-bg:#5ce2aa;--bs-btn-active-border-color:#47dfa0;--bs-btn-active-shadow:inset 0 3px 5px rgba(0,0,0,.125);--bs-btn-disabled-color:#000;--bs-btn-disabled-bg:#33db95;--bs-btn-disabled-border-color:#33db95}.btn-warning{--bs-btn-color:#000;--bs-btn-bg:#fe8e02;--bs-btn-border-color:#fe8e02;--bs-btn-hover-color:#000;--bs-btn-hover-bg:#fe9f28;--bs-btn-hover-border-color:#fe991b;--bs-btn-focus-shadow-rgb:216,121,2;--bs-btn-active-color:#000;--bs-btn-active-bg:#fea535;--bs-btn-active-border-color:#fe991b;--bs-btn-active-shadow:inset 0 3px 5px rgba(0,0,0,.125);--bs-btn-disabled-color:#000;--bs-btn-disabled-bg:#fe8e02;--bs-btn-disabled-border-color:#fe8e02}.btn-danger{--bs-btn-color:#fff;--bs-btn-bg:#dc3545;--bs-btn-border-color:#dc3545;--bs-btn-hover-color:#fff;--bs-btn-hover-bg:#bb2d3b;--bs-btn-hover-border-color:#b02a37;--bs-btn-focus-shadow-rgb:225,83,97;--bs-btn-active-color:#fff;--bs-btn-active-bg:#b02a37;--bs-btn-active-border-color:#a52834;--bs-btn-active-shadow:inset 0 3px 5px rgba(0,0,0,.125);--bs-btn-disabled-color:#fff;--bs-btn-disabled-bg:#dc3545;--bs-btn-disabled-border-color:#dc3545}.btn-dark{--bs-btn-color:#fff;--bs-btn-bg:#3a4247;--bs-btn-border-color:#3a4247;--bs-btn-hover-color:#fff;--bs-btn-hover-bg:#585e63;--bs-btn-hover-border-color:#4e5559;--bs-btn-focus-shadow-rgb:88,94,99;--bs-btn-active-color:#fff;--bs-btn-active-bg:#61686c;--bs-btn-active-border-color:#4e5559;--bs-btn-active-shadow:inset 0 3px 5px rgba(0,0,0,.125);--bs-btn-disabled-color:#fff;--bs-btn-disabled-bg:#3a4247;--bs-btn-disabled-border-color:#3a4247}.btn-light{--bs-btn-color:#000;--bs-btn-bg:#9f9f9f;--bs-btn-border-color:#9f9f9f;--bs-btn-hover-color:#000;--bs-btn-hover-bg:#878787;--bs-btn-hover-border-color:#7f7f7f;--bs-btn-focus-shadow-rgb:135,135,135;--bs-btn-active-color:#000;--bs-btn-active-bg:#7f7f7f;--bs-btn-active-border-color:#777;--bs-btn-active-shadow:inset 0 3px 5px rgba(0,0,0,.125);--bs-btn-disabled-color:#000;--bs-btn-disabled-bg:#9f9f9f;--bs-btn-disabled-border-color:#9f9f9f}.btn-outline-primary{--bs-btn-color:#e1ba2d;--bs-btn-border-color:#e1ba2d;--bs-btn-hover-color:#000;--bs-btn-hover-bg:#e1ba2d;--bs-btn-hover-border-color:#e1ba2d;--bs-btn-focus-shadow-rgb:225,186,45;--bs-btn-active-color:#000;--bs-btn-active-bg:#e1ba2d;--bs-btn-active-border-color:#e1ba2d;--bs-btn-active-shadow:inset 0 3px 5px rgba(0,0,0,.125);--bs-btn-disabled-color:#e1ba2d;--bs-btn-disabled-bg:transparent;--bs-btn-disabled-border-color:#e1ba2d;--bs-gradient:none}.btn-outline-secondary{--bs-btn-color:#f8f9fa;--bs-btn-border-color:#f8f9fa;--bs-btn-hover-color:#000;--bs-btn-hover-bg:#f8f9fa;--bs-btn-hover-border-color:#f8f9fa;--bs-btn-focus-shadow-rgb:248,249,250;--bs-btn-active-color:#000;--bs-btn-active-bg:#f8f9fa;--bs-btn-active-border-color:#f8f9fa;--bs-btn-active-shadow:inset 0 3px 5px rgba(0,0,0,.125);--bs-btn-disabled-color:#f8f9fa;--bs-btn-disabled-bg:transparent;--bs-btn-disabled-border-color:#f8f9fa;--bs-gradient:none}.btn-outline-success{--bs-btn-color:#33db95;--bs-btn-border-color:#33db95;--bs-btn-hover-color:#000;--bs-btn-hover-bg:#33db95;--bs-btn-hover-border-color:#33db95;--bs-btn-focus-shadow-rgb:51,219,149;--bs-btn-active-color:#000;--bs-btn-active-bg:#33db95;--bs-btn-active-border-color:#33db95;--bs-btn-active-shadow:inset 0 3px 5px rgba(0,0,0,.125);--bs-btn-disabled-color:#33db95;--bs-btn-disabled-bg:transparent;--bs-btn-disabled-border-color:#33db95;--bs-gradient:none}.btn-outline-warning{--bs-btn-color:#fe8e02;--bs-btn-border-color:#fe8e02;--bs-btn-hover-color:#000;--bs-btn-hover-bg:#fe8e02;--bs-btn-hover-border-color:#fe8e02;--bs-btn-focus-shadow-rgb:254,142,2;--bs-btn-active-color:#000;--bs-btn-active-bg:#fe8e02;--bs-btn-active-border-color:#fe8e02;--bs-btn-active-shadow:inset 0 3px 5px rgba(0,0,0,.125);--bs-btn-disabled-color:#fe8e02;--bs-btn-disabled-bg:transparent;--bs-btn-disabled-border-color:#fe8e02;--bs-gradient:none}.btn-outline-danger{--bs-btn-color:#dc3545;--bs-btn-border-color:#dc3545;--bs-btn-hover-color:#fff;--bs-btn-hover-bg:#dc3545;--bs-btn-hover-border-color:#dc3545;--bs-btn-focus-shadow-rgb:220,53,69;--bs-btn-active-color:#fff;--bs-btn-active-bg:#dc3545;--bs-btn-active-border-color:#dc3545;--bs-btn-active-shadow:inset 0 3px 5px rgba(0,0,0,.125);--bs-btn-disabled-color:#dc3545;--bs-btn-disabled-bg:transparent;--bs-btn-disabled-border-color:#dc3545;--bs-gradient:none}.btn-outline-dark{--bs-btn-color:#3a4247;--bs-btn-border-color:#3a4247;--bs-btn-hover-color:#fff;--bs-btn-hover-bg:#3a4247;--bs-btn-hover-border-color:#3a4247;--bs-btn-focus-shadow-rgb:58,66,71;--bs-btn-active-color:#fff;--bs-btn-active-bg:#3a4247;--bs-btn-active-border-color:#3a4247;--bs-btn-active-shadow:inset 0 3px 5px rgba(0,0,0,.125);--bs-btn-disabled-color:#3a4247;--bs-btn-disabled-bg:transparent;--bs-btn-disabled-border-color:#3a4247;--bs-gradient:none}.btn-outline-light{--bs-btn-color:#9f9f9f;--bs-btn-border-color:#9f9f9f;--bs-btn-hover-color:#000;--bs-btn-hover-bg:#9f9f9f;--bs-btn-hover-border-color:#9f9f9f;--bs-btn-focus-shadow-rgb:159,159,159;--bs-btn-active-color:#000;--bs-btn-active-bg:#9f9f9f;--bs-btn-active-border-color:#9f9f9f;--bs-btn-active-shadow:inset 0 3px 5px rgba(0,0,0,.125);--bs-btn-disabled-color:#9f9f9f;--bs-btn-disabled-bg:transparent;--bs-btn-disabled-border-color:#9f9f9f;--bs-gradient:none}.btn-link{--bs-btn-font-weight:400;--bs-btn-color:#e1ba2d;--bs-btn-bg:transparent;--bs-btn-border-color:transparent;--bs-btn-hover-color:var(--bs-link-hover-color);--bs-btn-hover-border-color:transparent;--bs-btn-active-color:var(--bs-link-hover-color);--bs-btn-active-border-color:transparent;--bs-btn-disabled-color:#6c757d;--bs-btn-disabled-border-color:transparent;--bs-btn-box-shadow:0 0 0 #000;--bs-btn-focus-shadow-rgb:49,132,253;background-image:none;text-decoration:underline}.btn-link:focus-visible{color:var(--bs-btn-color)}.btn-link:hover{color:var(--bs-btn-hover-color)}.btn-group-lg>.btn,.btn-lg{--bs-btn-padding-y:.5rem;--bs-btn-padding-x:1rem;--bs-btn-font-size:1.25rem;--bs-btn-border-radius:var(--bs-border-radius-lg)}.btn-group-sm>.btn,.btn-sm{--bs-btn-padding-y:.25rem;--bs-btn-padding-x:.5rem;--bs-btn-font-size:.875rem;--bs-btn-border-radius:var(--bs-border-radius-sm)}.fade{transition:opacity .15s linear}@media (prefers-reduced-motion:reduce){.fade{transition:none}}.fade:not(.show){opacity:0}.collapse:not(.show){display:none}.collapsing{height:0;overflow:hidden;transition:height .35s ease}@media (prefers-reduced-motion:reduce){.collapsing{transition:none}}.collapsing.collapse-horizontal{height:auto;transition:width .35s ease;width:0}@media (prefers-reduced-motion:reduce){.collapsing.collapse-horizontal{transition:none}}.dropdown,.dropdown-center,.dropend,.dropstart,.dropup,.dropup-center{position:relative}.dropdown-toggle{white-space:nowrap}.dropdown-toggle:after{border-bottom:0;border-left:.3em solid transparent;border-right:.3em solid transparent;border-top:.3em solid;content:"";display:inline-block;margin-left:.255em;vertical-align:.255em}.dropdown-toggle:empty:after{margin-left:0}.dropdown-menu{--bs-dropdown-zindex:1000;--bs-dropdown-min-width:5rem;--bs-dropdown-padding-x:0;--bs-dropdown-padding-y:.5rem;--bs-dropdown-spacer:.125rem;--bs-dropdown-font-size:1rem;--bs-dropdown-color:var(--bs-body-color);--bs-dropdown-bg:var(--bs-body-bg);--bs-dropdown-border-color:var(--bs-border-color-translucent);--bs-dropdown-border-radius:.5rem;--bs-dropdown-border-width:var(--bs-border-width);--bs-dropdown-inner-border-radius:calc(var(--bs-border-radius) - var(--bs-border-width));--bs-dropdown-divider-bg:var(--bs-border-color-translucent);--bs-dropdown-divider-margin-y:.5rem;--bs-dropdown-box-shadow:none;--bs-dropdown-link-color:var(--bs-body-color);--bs-dropdown-link-hover-color:var(--bs-body-color);--bs-dropdown-link-hover-bg:var(--bs-tertiary-bg);--bs-dropdown-link-active-color:#fff;--bs-dropdown-link-active-bg:#0d6efd;--bs-dropdown-link-disabled-color:var(--bs-tertiary-color);--bs-dropdown-item-padding-x:1rem;--bs-dropdown-item-padding-y:.25rem;--bs-dropdown-header-color:#6c757d;--bs-dropdown-header-padding-x:1rem;--bs-dropdown-header-padding-y:.5rem;background-clip:padding-box;background-color:var(--bs-dropdown-bg);border:var(--bs-dropdown-border-width) solid var(--bs-dropdown-border-color);border-radius:var(--bs-dropdown-border-radius);box-shadow:var(--bs-dropdown-box-shadow);color:var(--bs-dropdown-color);display:none;font-size:var(--bs-dropdown-font-size);list-style:none;margin:0;min-width:var(--bs-dropdown-min-width);padding:var(--bs-dropdown-padding-y) var(--bs-dropdown-padding-x);position:absolute;text-align:left;z-index:var(--bs-dropdown-zindex)}.dropdown-menu[data-bs-popper]{left:0;margin-top:var(--bs-dropdown-spacer);top:100%}.dropdown-menu-start{--bs-position:start}.dropdown-menu-start[data-bs-popper]{left:0;right:auto}.dropdown-menu-end{--bs-position:end}.dropdown-menu-end[data-bs-popper]{left:auto;right:0}@media (min-width:576px){.dropdown-menu-sm-start{--bs-position:start}.dropdown-menu-sm-start[data-bs-popper]{left:0;right:auto}.dropdown-menu-sm-end{--bs-position:end}.dropdown-menu-sm-end[data-bs-popper]{left:auto;right:0}}@media (min-width:768px){.dropdown-menu-md-start{--bs-position:start}.dropdown-menu-md-start[data-bs-popper]{left:0;right:auto}.dropdown-menu-md-end{--bs-position:end}.dropdown-menu-md-end[data-bs-popper]{left:auto;right:0}}@media (min-width:992px){.dropdown-menu-lg-start{--bs-position:start}.dropdown-menu-lg-start[data-bs-popper]{left:0;right:auto}.dropdown-menu-lg-end{--bs-position:end}.dropdown-menu-lg-end[data-bs-popper]{left:auto;right:0}}@media (min-width:1200px){.dropdown-menu-xl-start{--bs-position:start}.dropdown-menu-xl-start[data-bs-popper]{left:0;right:auto}.dropdown-menu-xl-end{--bs-position:end}.dropdown-menu-xl-end[data-bs-popper]{left:auto;right:0}}@media (min-width:1400px){.dropdown-menu-xxl-start{--bs-position:start}.dropdown-menu-xxl-start[data-bs-popper]{left:0;right:auto}.dropdown-menu-xxl-end{--bs-position:end}.dropdown-menu-xxl-end[data-bs-popper]{left:auto;right:0}}.dropup .dropdown-menu[data-bs-popper]{bottom:100%;margin-bottom:var(--bs-dropdown-spacer);margin-top:0;top:auto}.dropup .dropdown-toggle:after{border-bottom:.3em solid;border-left:.3em solid transparent;border-right:.3em solid transparent;border-top:0;content:"";display:inline-block;margin-left:.255em;vertical-align:.255em}.dropup .dropdown-toggle:empty:after{margin-left:0}.dropend .dropdown-menu[data-bs-popper]{left:100%;margin-left:var(--bs-dropdown-spacer);margin-top:0;right:auto;top:0}.dropend .dropdown-toggle:after{border-bottom:.3em solid transparent;border-left:.3em solid;border-right:0;border-top:.3em solid transparent;content:"";display:inline-block;margin-left:.255em;vertical-align:.255em}.dropend .dropdown-toggle:empty:after{margin-left:0}.dropend .dropdown-toggle:after{vertical-align:0}.dropstart .dropdown-menu[data-bs-popper]{left:auto;margin-right:var(--bs-dropdown-spacer);margin-top:0;right:100%;top:0}.dropstart .dropdown-toggle:after{content:"";display:inline-block;display:none;margin-left:.255em;vertical-align:.255em}.dropstart .dropdown-toggle:before{border-bottom:.3em solid transparent;border-right:.3em solid;border-top:.3em solid transparent;content:"";display:inline-block;margin-right:.255em;vertical-align:.255em}.dropstart .dropdown-toggle:empty:after{margin-left:0}.dropstart .dropdown-toggle:before{vertical-align:0}.dropdown-divider{border-top:1px solid var(--bs-dropdown-divider-bg);height:0;margin:var(--bs-dropdown-divider-margin-y) 0;opacity:1;overflow:hidden}.dropdown-item{background-color:transparent;border:0;border-radius:0;border-radius:var(--bs-dropdown-item-border-radius,0);clear:both;color:var(--bs-dropdown-link-color);display:block;font-weight:400;padding:var(--bs-dropdown-item-padding-y) var(--bs-dropdown-item-padding-x);text-align:inherit;text-decoration:none;white-space:nowrap;width:100%}.dropdown-item:focus,.dropdown-item:hover{background-color:var(--bs-dropdown-link-hover-bg);color:var(--bs-dropdown-link-hover-color)}.dropdown-item.active,.dropdown-item:active,.dropdown-item:focus,.dropdown-item:hover{background-image:linear-gradient(180deg,hsla(0,0%,100%,.15),hsla(0,0%,100%,0));background-image:var(--bs-gradient)}.dropdown-item.active,.dropdown-item:active{background-color:var(--bs-dropdown-link-active-bg);color:var(--bs-dropdown-link-active-color);text-decoration:none}.dropdown-item.disabled,.dropdown-item:disabled{background-color:transparent;background-image:none;color:var(--bs-dropdown-link-disabled-color);pointer-events:none}.dropdown-menu.show{display:block}.dropdown-header{color:var(--bs-dropdown-header-color);display:block;font-size:.875rem;margin-bottom:0;padding:var(--bs-dropdown-header-padding-y) var(--bs-dropdown-header-padding-x);white-space:nowrap}.dropdown-item-text{color:var(--bs-dropdown-link-color);display:block;padding:var(--bs-dropdown-item-padding-y) var(--bs-dropdown-item-padding-x)}.dropdown-menu-dark{--bs-dropdown-color:#dee2e6;--bs-dropdown-bg:#343a40;--bs-dropdown-border-color:var(--bs-border-color-translucent);--bs-dropdown-box-shadow: ;--bs-dropdown-link-color:#dee2e6;--bs-dropdown-link-hover-color:#fff;--bs-dropdown-divider-bg:var(--bs-border-color-translucent);--bs-dropdown-link-hover-bg:hsla(0,0%,100%,.15);--bs-dropdown-link-active-color:#fff;--bs-dropdown-link-active-bg:#0d6efd;--bs-dropdown-link-disabled-color:#adb5bd;--bs-dropdown-header-color:#adb5bd}.btn-group,.btn-group-vertical{display:inline-flex;position:relative;vertical-align:middle}.btn-group-vertical>.btn,.btn-group>.btn{flex:1 1 auto;position:relative}.btn-group-vertical>.btn-check:checked+.btn,.btn-group-vertical>.btn-check:focus+.btn,.btn-group-vertical>.btn.active,.btn-group-vertical>.btn:active,.btn-group-vertical>.btn:focus,.btn-group-vertical>.btn:hover,.btn-group>.btn-check:checked+.btn,.btn-group>.btn-check:focus+.btn,.btn-group>.btn.active,.btn-group>.btn:active,.btn-group>.btn:focus,.btn-group>.btn:hover{z-index:1}.btn-toolbar{display:flex;flex-wrap:wrap;justify-content:flex-start}.btn-toolbar .input-group{width:auto}.btn-group{border-radius:1.25rem;border-radius:var(--bs-border-radius)}.btn-group>.btn-group:not(:first-child),.btn-group>:not(.btn-check:first-child)+.btn{margin-left:-1px;margin-left:calc(var(--bs-border-width)*-1)}.btn-group>.btn-group:not(:last-child)>.btn,.btn-group>.btn.dropdown-toggle-split:first-child,.btn-group>.btn:not(:last-child):not(.dropdown-toggle){border-bottom-right-radius:0;border-top-right-radius:0}.btn-group>.btn-group:not(:first-child)>.btn,.btn-group>.btn:nth-child(n+3),.btn-group>:not(.btn-check)+.btn{border-bottom-left-radius:0;border-top-left-radius:0}.dropdown-toggle-split{padding-left:.46875rem;padding-right:.46875rem}.dropdown-toggle-split:after,.dropend .dropdown-toggle-split:after,.dropup .dropdown-toggle-split:after{margin-left:0}.dropstart .dropdown-toggle-split:before{margin-right:0}.btn-group-sm>.btn+.dropdown-toggle-split,.btn-sm+.dropdown-toggle-split{padding-left:.375rem;padding-right:.375rem}.btn-group-lg>.btn+.dropdown-toggle-split,.btn-lg+.dropdown-toggle-split{padding-left:.75rem;padding-right:.75rem}.btn-group.show .dropdown-toggle{box-shadow:inset 0 3px 5px rgba(0,0,0,.125)}.btn-group.show .dropdown-toggle.btn-link{box-shadow:none}.btn-group-vertical{align-items:flex-start;flex-direction:column;justify-content:center}.btn-group-vertical>.btn,.btn-group-vertical>.btn-group{width:100%}.btn-group-vertical>.btn-group:not(:first-child),.btn-group-vertical>.btn:not(:first-child){margin-top:-1px;margin-top:calc(var(--bs-border-width)*-1)}.btn-group-vertical>.btn-group:not(:last-child)>.btn,.btn-group-vertical>.btn:not(:last-child):not(.dropdown-toggle){border-bottom-left-radius:0;border-bottom-right-radius:0}.btn-group-vertical>.btn-group:not(:first-child)>.btn,.btn-group-vertical>.btn:nth-child(n+3),.btn-group-vertical>:not(.btn-check)+.btn{border-top-left-radius:0;border-top-right-radius:0}.nav{--bs-nav-link-padding-x:1rem;--bs-nav-link-padding-y:.5rem;--bs-nav-link-font-weight: ;--bs-nav-link-color:var(--bs-link-color);--bs-nav-link-hover-color:var(--bs-link-hover-color);--bs-nav-link-disabled-color:var(--bs-secondary-color);display:flex;flex-wrap:wrap;list-style:none;margin-bottom:0;padding-left:0}.nav-link{background:none;border:0;color:var(--bs-nav-link-color);display:block;font-size:var(--bs-nav-link-font-size);font-weight:var(--bs-nav-link-font-weight);padding:var(--bs-nav-link-padding-y) var(--bs-nav-link-padding-x);text-decoration:none;transition:color .15s ease-in-out,background-color .15s ease-in-out,border-color .15s ease-in-out}@media (prefers-reduced-motion:reduce){.nav-link{transition:none}}.nav-link:focus,.nav-link:hover{color:var(--bs-nav-link-hover-color)}.nav-link:focus-visible{box-shadow:0 0 0 .25rem rgba(13,110,253,.25);outline:0}.nav-link.disabled,.nav-link:disabled{color:var(--bs-nav-link-disabled-color);cursor:default;pointer-events:none}.nav-tabs{--bs-nav-tabs-border-width:var(--bs-border-width);--bs-nav-tabs-border-color:var(--bs-border-color);--bs-nav-tabs-border-radius:var(--bs-border-radius);--bs-nav-tabs-link-hover-border-color:var(--bs-secondary-bg) var(--bs-secondary-bg) var(--bs-border-color);--bs-nav-tabs-link-active-color:var(--bs-emphasis-color);--bs-nav-tabs-link-active-bg:var(--bs-body-bg);--bs-nav-tabs-link-active-border-color:var(--bs-border-color) var(--bs-border-color) var(--bs-body-bg);border-bottom:var(--bs-nav-tabs-border-width) solid var(--bs-nav-tabs-border-color)}.nav-tabs .nav-link{border:var(--bs-nav-tabs-border-width) solid transparent;border-top-left-radius:var(--bs-nav-tabs-border-radius);border-top-right-radius:var(--bs-nav-tabs-border-radius);margin-bottom:calc(var(--bs-nav-tabs-border-width)*-1)}.nav-tabs .nav-link:focus,.nav-tabs .nav-link:hover{border-color:var(--bs-nav-tabs-link-hover-border-color);isolation:isolate}.nav-tabs .nav-item.show .nav-link,.nav-tabs .nav-link.active{background-color:var(--bs-nav-tabs-link-active-bg);border-color:var(--bs-nav-tabs-link-active-border-color);color:var(--bs-nav-tabs-link-active-color)}.nav-tabs .dropdown-menu{border-top-left-radius:0;border-top-right-radius:0;margin-top:calc(var(--bs-nav-tabs-border-width)*-1)}.nav-pills{--bs-nav-pills-border-radius:var(--bs-border-radius);--bs-nav-pills-link-active-color:#fff;--bs-nav-pills-link-active-bg:#0d6efd}.nav-pills .nav-link{border-radius:var(--bs-nav-pills-border-radius)}.nav-pills .nav-link.active,.nav-pills .show>.nav-link{background-color:var(--bs-nav-pills-link-active-bg);background-image:linear-gradient(180deg,hsla(0,0%,100%,.15),hsla(0,0%,100%,0));background-image:var(--bs-gradient);color:var(--bs-nav-pills-link-active-color)}.nav-underline{--bs-nav-underline-gap:1rem;--bs-nav-underline-border-width:.125rem;--bs-nav-underline-link-active-color:var(--bs-emphasis-color);gap:var(--bs-nav-underline-gap)}.nav-underline .nav-link{border-bottom:var(--bs-nav-underline-border-width) solid transparent;padding-left:0;padding-right:0}.nav-underline .nav-link:focus,.nav-underline .nav-link:hover{border-bottom-color:currentcolor}.nav-underline .nav-link.active,.nav-underline .show>.nav-link{border-bottom-color:currentcolor;color:var(--bs-nav-underline-link-active-color);font-weight:700}.nav-fill .nav-item,.nav-fill>.nav-link{flex:1 1 auto;text-align:center}.nav-justified .nav-item,.nav-justified>.nav-link{flex-basis:0;flex-grow:1;text-align:center}.nav-fill .nav-item .nav-link,.nav-justified .nav-item .nav-link{width:100%}.tab-content>.tab-pane{display:none}.tab-content>.active{display:block}.navbar{--bs-navbar-padding-x:0;--bs-navbar-padding-y:.5rem;--bs-navbar-color:rgba(var(--bs-emphasis-color-rgb),0.65);--bs-navbar-hover-color:rgba(var(--bs-emphasis-color-rgb),0.8);--bs-navbar-disabled-color:rgba(var(--bs-emphasis-color-rgb),0.3);--bs-navbar-active-color:rgba(var(--bs-emphasis-color-rgb),1);--bs-navbar-brand-padding-y:.3125rem;--bs-navbar-brand-margin-end:1rem;--bs-navbar-brand-font-size:1.25rem;--bs-navbar-brand-color:rgba(var(--bs-emphasis-color-rgb),1);--bs-navbar-brand-hover-color:rgba(var(--bs-emphasis-color-rgb),1);--bs-navbar-nav-link-padding-x:.5rem;--bs-navbar-toggler-padding-y:.25rem;--bs-navbar-toggler-padding-x:.75rem;--bs-navbar-toggler-font-size:1.25rem;--bs-navbar-toggler-icon-bg:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 30 30'%3E%3Cpath stroke='rgba(33,37,41,0.75)' stroke-linecap='round' stroke-miterlimit='10' stroke-width='2' d='M4 7h22M4 15h22M4 23h22'/%3E%3C/svg%3E");--bs-navbar-toggler-border-color:rgba(var(--bs-emphasis-color-rgb),0.15);--bs-navbar-toggler-border-radius:var(--bs-border-radius);--bs-navbar-toggler-focus-width:.25rem;--bs-navbar-toggler-transition:box-shadow 0.15s ease-in-out;align-items:center;background-image:linear-gradient(180deg,hsla(0,0%,100%,.15),hsla(0,0%,100%,0));background-image:var(--bs-gradient);display:flex;flex-wrap:wrap;justify-content:space-between;padding:var(--bs-navbar-padding-y) var(--bs-navbar-padding-x);position:relative}.navbar>.container,.navbar>.container-fluid,.navbar>.container-lg,.navbar>.container-md,.navbar>.container-sm,.navbar>.container-xl,.navbar>.container-xxl{align-items:center;display:flex;flex-wrap:inherit;justify-content:space-between}.navbar-brand{color:var(--bs-navbar-brand-color);font-size:var(--bs-navbar-brand-font-size);margin-right:var(--bs-navbar-brand-margin-end);padding-bottom:var(--bs-navbar-brand-padding-y);padding-top:var(--bs-navbar-brand-padding-y);text-decoration:none;white-space:nowrap}.navbar-brand:focus,.navbar-brand:hover{color:var(--bs-navbar-brand-hover-color)}.navbar-nav{--bs-nav-link-padding-x:0;--bs-nav-link-padding-y:.5rem;--bs-nav-link-font-weight: ;--bs-nav-link-color:var(--bs-navbar-color);--bs-nav-link-hover-color:var(--bs-navbar-hover-color);--bs-nav-link-disabled-color:var(--bs-navbar-disabled-color);display:flex;flex-direction:column;list-style:none;margin-bottom:0;padding-left:0}.navbar-nav .nav-link.active,.navbar-nav .nav-link.show{color:var(--bs-navbar-active-color)}.navbar-nav .dropdown-menu{position:static}.navbar-text{color:var(--bs-navbar-color);padding-bottom:.5rem;padding-top:.5rem}.navbar-text a,.navbar-text a:focus,.navbar-text a:hover{color:var(--bs-navbar-active-color)}.navbar-collapse{align-items:center;flex-basis:100%;flex-grow:1}.navbar-toggler{background-color:transparent;border:var(--bs-border-width) solid var(--bs-navbar-toggler-border-color);border-radius:var(--bs-navbar-toggler-border-radius);color:var(--bs-navbar-color);font-size:var(--bs-navbar-toggler-font-size);line-height:1;padding:var(--bs-navbar-toggler-padding-y) var(--bs-navbar-toggler-padding-x);transition:var(--bs-navbar-toggler-transition)}@media (prefers-reduced-motion:reduce){.navbar-toggler{transition:none}}.navbar-toggler:hover{text-decoration:none}.navbar-toggler:focus{box-shadow:0 0 0 var(--bs-navbar-toggler-focus-width);outline:0;text-decoration:none}.navbar-toggler-icon{background-image:var(--bs-navbar-toggler-icon-bg);background-position:50%;background-repeat:no-repeat;background-size:100%;display:inline-block;height:1.5em;vertical-align:middle;width:1.5em}.navbar-nav-scroll{max-height:75vh;max-height:var(--bs-scroll-height,75vh);overflow-y:auto}@media (min-width:576px){.navbar-expand-sm{flex-wrap:nowrap;justify-content:flex-start}.navbar-expand-sm .navbar-nav{flex-direction:row}.navbar-expand-sm .navbar-nav .dropdown-menu{position:absolute}.navbar-expand-sm .navbar-nav .nav-link{padding-left:var(--bs-navbar-nav-link-padding-x);padding-right:var(--bs-navbar-nav-link-padding-x)}.navbar-expand-sm .navbar-nav-scroll{overflow:visible}.navbar-expand-sm .navbar-collapse{display:flex!important;flex-basis:auto}.navbar-expand-sm .navbar-toggler{display:none}.navbar-expand-sm .offcanvas{background-color:transparent!important;border:0!important;box-shadow:none;flex-grow:1;height:auto!important;position:static;transform:none!important;transition:none;visibility:visible!important;width:auto!important;z-index:auto}.navbar-expand-sm .offcanvas .offcanvas-header{display:none}.navbar-expand-sm .offcanvas .offcanvas-body{display:flex;flex-grow:0;overflow-y:visible;padding:0}}@media (min-width:768px){.navbar-expand-md{flex-wrap:nowrap;justify-content:flex-start}.navbar-expand-md .navbar-nav{flex-direction:row}.navbar-expand-md .navbar-nav .dropdown-menu{position:absolute}.navbar-expand-md .navbar-nav .nav-link{padding-left:var(--bs-navbar-nav-link-padding-x);padding-right:var(--bs-navbar-nav-link-padding-x)}.navbar-expand-md .navbar-nav-scroll{overflow:visible}.navbar-expand-md .navbar-collapse{display:flex!important;flex-basis:auto}.navbar-expand-md .navbar-toggler{display:none}.navbar-expand-md .offcanvas{background-color:transparent!important;border:0!important;box-shadow:none;flex-grow:1;height:auto!important;position:static;transform:none!important;transition:none;visibility:visible!important;width:auto!important;z-index:auto}.navbar-expand-md .offcanvas .offcanvas-header{display:none}.navbar-expand-md .offcanvas .offcanvas-body{display:flex;flex-grow:0;overflow-y:visible;padding:0}}@media (min-width:992px){.navbar-expand-lg{flex-wrap:nowrap;justify-content:flex-start}.navbar-expand-lg .navbar-nav{flex-direction:row}.navbar-expand-lg .navbar-nav .dropdown-menu{position:absolute}.navbar-expand-lg .navbar-nav .nav-link{padding-left:var(--bs-navbar-nav-link-padding-x);padding-right:var(--bs-navbar-nav-link-padding-x)}.navbar-expand-lg .navbar-nav-scroll{overflow:visible}.navbar-expand-lg .navbar-collapse{display:flex!important;flex-basis:auto}.navbar-expand-lg .navbar-toggler{display:none}.navbar-expand-lg .offcanvas{background-color:transparent!important;border:0!important;box-shadow:none;flex-grow:1;height:auto!important;position:static;transform:none!important;transition:none;visibility:visible!important;width:auto!important;z-index:auto}.navbar-expand-lg .offcanvas .offcanvas-header{display:none}.navbar-expand-lg .offcanvas .offcanvas-body{display:flex;flex-grow:0;overflow-y:visible;padding:0}}@media (min-width:1200px){.navbar-expand-xl{flex-wrap:nowrap;justify-content:flex-start}.navbar-expand-xl .navbar-nav{flex-direction:row}.navbar-expand-xl .navbar-nav .dropdown-menu{position:absolute}.navbar-expand-xl .navbar-nav .nav-link{padding-left:var(--bs-navbar-nav-link-padding-x);padding-right:var(--bs-navbar-nav-link-padding-x)}.navbar-expand-xl .navbar-nav-scroll{overflow:visible}.navbar-expand-xl .navbar-collapse{display:flex!important;flex-basis:auto}.navbar-expand-xl .navbar-toggler{display:none}.navbar-expand-xl .offcanvas{background-color:transparent!important;border:0!important;box-shadow:none;flex-grow:1;height:auto!important;position:static;transform:none!important;transition:none;visibility:visible!important;width:auto!important;z-index:auto}.navbar-expand-xl .offcanvas .offcanvas-header{display:none}.navbar-expand-xl .offcanvas .offcanvas-body{display:flex;flex-grow:0;overflow-y:visible;padding:0}}@media (min-width:1400px){.navbar-expand-xxl{flex-wrap:nowrap;justify-content:flex-start}.navbar-expand-xxl .navbar-nav{flex-direction:row}.navbar-expand-xxl .navbar-nav .dropdown-menu{position:absolute}.navbar-expand-xxl .navbar-nav .nav-link{padding-left:var(--bs-navbar-nav-link-padding-x);padding-right:var(--bs-navbar-nav-link-padding-x)}.navbar-expand-xxl .navbar-nav-scroll{overflow:visible}.navbar-expand-xxl .navbar-collapse{display:flex!important;flex-basis:auto}.navbar-expand-xxl .navbar-toggler{display:none}.navbar-expand-xxl .offcanvas{background-color:transparent!important;border:0!important;box-shadow:none;flex-grow:1;height:auto!important;position:static;transform:none!important;transition:none;visibility:visible!important;width:auto!important;z-index:auto}.navbar-expand-xxl .offcanvas .offcanvas-header{display:none}.navbar-expand-xxl .offcanvas .offcanvas-body{display:flex;flex-grow:0;overflow-y:visible;padding:0}}.navbar-expand{flex-wrap:nowrap;justify-content:flex-start}.navbar-expand .navbar-nav{flex-direction:row}.navbar-expand .navbar-nav .dropdown-menu{position:absolute}.navbar-expand .navbar-nav .nav-link{padding-left:var(--bs-navbar-nav-link-padding-x);padding-right:var(--bs-navbar-nav-link-padding-x)}.navbar-expand .navbar-nav-scroll{overflow:visible}.navbar-expand .navbar-collapse{display:flex!important;flex-basis:auto}.navbar-expand .navbar-toggler{display:none}.navbar-expand .offcanvas{background-color:transparent!important;border:0!important;box-shadow:none;flex-grow:1;height:auto!important;position:static;transform:none!important;transition:none;visibility:visible!important;width:auto!important;z-index:auto}.navbar-expand .offcanvas .offcanvas-header{display:none}.navbar-expand .offcanvas .offcanvas-body{display:flex;flex-grow:0;overflow-y:visible;padding:0}.navbar-dark,.navbar[data-bs-theme=dark]{--bs-navbar-color:hsla(0,0%,100%,.55);--bs-navbar-hover-color:hsla(0,0%,100%,.75);--bs-navbar-disabled-color:hsla(0,0%,100%,.25);--bs-navbar-active-color:#fff;--bs-navbar-brand-color:#fff;--bs-navbar-brand-hover-color:#fff;--bs-navbar-toggler-border-color:hsla(0,0%,100%,.1)}.navbar-dark,.navbar[data-bs-theme=dark],[data-bs-theme=dark] .navbar-toggler-icon{--bs-navbar-toggler-icon-bg:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 30 30'%3E%3Cpath stroke='rgba(255,255,255,0.55)' stroke-linecap='round' stroke-miterlimit='10' stroke-width='2' d='M4 7h22M4 15h22M4 23h22'/%3E%3C/svg%3E")}.card{--bs-card-spacer-y:1rem;--bs-card-spacer-x:1rem;--bs-card-title-spacer-y:.5rem;--bs-card-title-color: ;--bs-card-subtitle-color: ;--bs-card-border-width:.5px;--bs-card-border-color:hsla(0,0%,62%,.1);--bs-card-border-radius:1.25rem;--bs-card-box-shadow: ;--bs-card-inner-border-radius:calc(var(--bs-border-radius) - var(--bs-border-width));--bs-card-cap-padding-y:.5rem;--bs-card-cap-padding-x:1rem;--bs-card-cap-bg:transparent;--bs-card-cap-color: ;--bs-card-height: ;--bs-card-color: ;--bs-card-bg:var(--bs-body-bg);--bs-card-img-overlay-padding:1rem;--bs-card-group-margin:.75rem;word-wrap:break-word;background-clip:border-box;background-color:var(--bs-card-bg);border:var(--bs-card-border-width) solid var(--bs-card-border-color);border-radius:var(--bs-card-border-radius);box-shadow:var(--bs-card-box-shadow);color:#3a4247;color:var(--bs-body-color);display:flex;flex-direction:column;height:var(--bs-card-height);min-width:0;position:relative}.card>hr{margin-left:0;margin-right:0}.card>.list-group{border-bottom:inherit;border-top:inherit}.card>.list-group:first-child{border-top-left-radius:var(--bs-card-inner-border-radius);border-top-right-radius:var(--bs-card-inner-border-radius);border-top-width:0}.card>.list-group:last-child{border-bottom-left-radius:var(--bs-card-inner-border-radius);border-bottom-right-radius:var(--bs-card-inner-border-radius);border-bottom-width:0}.card>.card-header+.list-group,.card>.list-group+.card-footer{border-top:0}.card-body{color:var(--bs-card-color);flex:1 1 auto;padding:var(--bs-card-spacer-y) var(--bs-card-spacer-x)}.card-title{color:var(--bs-card-title-color);margin-bottom:var(--bs-card-title-spacer-y)}.card-subtitle{color:var(--bs-card-subtitle-color);margin-top:calc(var(--bs-card-title-spacer-y)*-.5)}.card-subtitle,.card-text:last-child{margin-bottom:0}.card-link+.card-link{margin-left:var(--bs-card-spacer-x)}.card-header{background-color:var(--bs-card-cap-bg);border-bottom:var(--bs-card-border-width) solid var(--bs-card-border-color);color:var(--bs-card-cap-color);margin-bottom:0;padding:var(--bs-card-cap-padding-y) var(--bs-card-cap-padding-x)}.card-header:first-child{border-radius:var(--bs-card-inner-border-radius) var(--bs-card-inner-border-radius) 0 0}.card-footer{background-color:var(--bs-card-cap-bg);border-top:var(--bs-card-border-width) solid var(--bs-card-border-color);color:var(--bs-card-cap-color);padding:var(--bs-card-cap-padding-y) var(--bs-card-cap-padding-x)}.card-footer:last-child{border-radius:0 0 var(--bs-card-inner-border-radius) var(--bs-card-inner-border-radius)}.card-header-tabs{border-bottom:0;margin-bottom:calc(var(--bs-card-cap-padding-y)*-1);margin-left:calc(var(--bs-card-cap-padding-x)*-.5);margin-right:calc(var(--bs-card-cap-padding-x)*-.5)}.card-header-tabs .nav-link.active{background-color:var(--bs-card-bg);border-bottom-color:var(--bs-card-bg)}.card-header-pills{margin-left:calc(var(--bs-card-cap-padding-x)*-.5);margin-right:calc(var(--bs-card-cap-padding-x)*-.5)}.card-img-overlay{border-radius:var(--bs-card-inner-border-radius);bottom:0;left:0;padding:var(--bs-card-img-overlay-padding);position:absolute;right:0;top:0}.card-img,.card-img-bottom,.card-img-top{width:100%}.card-img,.card-img-top{border-top-left-radius:var(--bs-card-inner-border-radius);border-top-right-radius:var(--bs-card-inner-border-radius)}.card-img,.card-img-bottom{border-bottom-left-radius:var(--bs-card-inner-border-radius);border-bottom-right-radius:var(--bs-card-inner-border-radius)}.card-group>.card{margin-bottom:var(--bs-card-group-margin)}@media (min-width:576px){.card-group{display:flex;flex-flow:row wrap}.card-group>.card{flex:1 0;margin-bottom:0}.card-group>.card+.card{border-left:0;margin-left:0}.card-group>.card:not(:last-child){border-bottom-right-radius:0;border-top-right-radius:0}.card-group>.card:not(:last-child)>.card-header,.card-group>.card:not(:last-child)>.card-img-top{border-top-right-radius:0}.card-group>.card:not(:last-child)>.card-footer,.card-group>.card:not(:last-child)>.card-img-bottom{border-bottom-right-radius:0}.card-group>.card:not(:first-child){border-bottom-left-radius:0;border-top-left-radius:0}.card-group>.card:not(:first-child)>.card-header,.card-group>.card:not(:first-child)>.card-img-top{border-top-left-radius:0}.card-group>.card:not(:first-child)>.card-footer,.card-group>.card:not(:first-child)>.card-img-bottom{border-bottom-left-radius:0}}.accordion{--bs-accordion-color:var(--bs-body-color);--bs-accordion-bg:var(--bs-body-bg);--bs-accordion-transition:color 0.15s ease-in-out,background-color 0.15s ease-in-out,border-color 0.15s ease-in-out,box-shadow 0.15s ease-in-out,border-radius 0.15s ease;--bs-accordion-border-color:var(--bs-border-color);--bs-accordion-border-width:var(--bs-border-width);--bs-accordion-border-radius:var(--bs-border-radius);--bs-accordion-inner-border-radius:calc(var(--bs-border-radius) - var(--bs-border-width));--bs-accordion-btn-padding-x:1.25rem;--bs-accordion-btn-padding-y:1rem;--bs-accordion-btn-color:var(--bs-body-color);--bs-accordion-btn-bg:var(--bs-accordion-bg);--bs-accordion-btn-icon:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='none' stroke='%23212529' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='m2 5 6 6 6-6'/%3E%3C/svg%3E");--bs-accordion-btn-icon-width:1.25rem;--bs-accordion-btn-icon-transform:rotate(-180deg);--bs-accordion-btn-icon-transition:transform 0.2s ease-in-out;--bs-accordion-btn-active-icon:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='none' stroke='%23052c65' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='m2 5 6 6 6-6'/%3E%3C/svg%3E");--bs-accordion-btn-focus-box-shadow:0 0 0 .25rem rgba(13,110,253,.25);--bs-accordion-body-padding-x:1.25rem;--bs-accordion-body-padding-y:1rem;--bs-accordion-active-color:var(--bs-primary-text-emphasis);--bs-accordion-active-bg:var(--bs-primary-bg-subtle)}.accordion-button{align-items:center;background-color:var(--bs-accordion-btn-bg);border:0;border-radius:0;color:var(--bs-accordion-btn-color);display:flex;font-size:.875rem;overflow-anchor:none;padding:var(--bs-accordion-btn-padding-y) var(--bs-accordion-btn-padding-x);position:relative;text-align:left;transition:var(--bs-accordion-transition);width:100%}@media (prefers-reduced-motion:reduce){.accordion-button{transition:none}}.accordion-button:not(.collapsed){background-color:var(--bs-accordion-active-bg);box-shadow:inset 0 calc(var(--bs-accordion-border-width)*-1) 0 var(--bs-accordion-border-color);color:var(--bs-accordion-active-color)}.accordion-button:not(.collapsed):after{background-image:var(--bs-accordion-btn-active-icon);transform:var(--bs-accordion-btn-icon-transform)}.accordion-button:after{background-image:var(--bs-accordion-btn-icon);background-repeat:no-repeat;background-size:var(--bs-accordion-btn-icon-width);content:"";flex-shrink:0;height:var(--bs-accordion-btn-icon-width);margin-left:auto;transition:var(--bs-accordion-btn-icon-transition);width:var(--bs-accordion-btn-icon-width)}@media (prefers-reduced-motion:reduce){.accordion-button:after{transition:none}}.accordion-button:hover{z-index:2}.accordion-button:focus{box-shadow:var(--bs-accordion-btn-focus-box-shadow);outline:0;z-index:3}.accordion-header{margin-bottom:0}.accordion-item{background-color:var(--bs-accordion-bg);border:var(--bs-accordion-border-width) solid var(--bs-accordion-border-color);color:var(--bs-accordion-color)}.accordion-item:first-of-type{border-top-left-radius:var(--bs-accordion-border-radius);border-top-right-radius:var(--bs-accordion-border-radius)}.accordion-item:first-of-type>.accordion-header .accordion-button{border-top-left-radius:var(--bs-accordion-inner-border-radius);border-top-right-radius:var(--bs-accordion-inner-border-radius)}.accordion-item:not(:first-of-type){border-top:0}.accordion-item:last-of-type{border-bottom-left-radius:var(--bs-accordion-border-radius);border-bottom-right-radius:var(--bs-accordion-border-radius)}.accordion-item:last-of-type>.accordion-header .accordion-button.collapsed{border-bottom-left-radius:var(--bs-accordion-inner-border-radius);border-bottom-right-radius:var(--bs-accordion-inner-border-radius)}.accordion-item:last-of-type>.accordion-collapse{border-bottom-left-radius:var(--bs-accordion-border-radius);border-bottom-right-radius:var(--bs-accordion-border-radius)}.accordion-body{padding:var(--bs-accordion-body-padding-y) var(--bs-accordion-body-padding-x)}.accordion-flush>.accordion-item{border-left:0;border-radius:0;border-right:0}.accordion-flush>.accordion-item:first-child{border-top:0}.accordion-flush>.accordion-item:last-child{border-bottom:0}.accordion-flush>.accordion-item>.accordion-collapse,.accordion-flush>.accordion-item>.accordion-header .accordion-button,.accordion-flush>.accordion-item>.accordion-header .accordion-button.collapsed{border-radius:0}[data-bs-theme=dark] .accordion-button:after{--bs-accordion-btn-icon:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='%236ea8fe'%3E%3Cpath fill-rule='evenodd' d='M1.646 4.646a.5.5 0 0 1 .708 0L8 10.293l5.646-5.647a.5.5 0 0 1 .708.708l-6 6a.5.5 0 0 1-.708 0l-6-6a.5.5 0 0 1 0-.708'/%3E%3C/svg%3E");--bs-accordion-btn-active-icon:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='%236ea8fe'%3E%3Cpath fill-rule='evenodd' d='M1.646 4.646a.5.5 0 0 1 .708 0L8 10.293l5.646-5.647a.5.5 0 0 1 .708.708l-6 6a.5.5 0 0 1-.708 0l-6-6a.5.5 0 0 1 0-.708'/%3E%3C/svg%3E")}.breadcrumb{--bs-breadcrumb-padding-x:0;--bs-breadcrumb-padding-y:0;--bs-breadcrumb-margin-bottom:1rem;--bs-breadcrumb-bg: ;--bs-breadcrumb-border-radius: ;--bs-breadcrumb-divider-color:var(--bs-secondary-color);--bs-breadcrumb-item-padding-x:.5rem;--bs-breadcrumb-item-active-color:var(--bs-secondary-color);background-color:var(--bs-breadcrumb-bg);border-radius:var(--bs-breadcrumb-border-radius);display:flex;flex-wrap:wrap;font-size:var(--bs-breadcrumb-font-size);list-style:none;margin-bottom:var(--bs-breadcrumb-margin-bottom);padding:var(--bs-breadcrumb-padding-y) var(--bs-breadcrumb-padding-x)}.breadcrumb-item+.breadcrumb-item{padding-left:var(--bs-breadcrumb-item-padding-x)}.breadcrumb-item+.breadcrumb-item:before{color:var(--bs-breadcrumb-divider-color);content:"/";content:var(--bs-breadcrumb-divider,"/");float:left;padding-right:var(--bs-breadcrumb-item-padding-x)}.breadcrumb-item.active{color:var(--bs-breadcrumb-item-active-color)}.pagination{--bs-pagination-padding-x:.75rem;--bs-pagination-padding-y:.375rem;--bs-pagination-font-size:1rem;--bs-pagination-color:var(--bs-link-color);--bs-pagination-bg:var(--bs-body-bg);--bs-pagination-border-width:var(--bs-border-width);--bs-pagination-border-color:var(--bs-border-color);--bs-pagination-border-radius:var(--bs-border-radius);--bs-pagination-hover-color:var(--bs-link-hover-color);--bs-pagination-hover-bg:var(--bs-tertiary-bg);--bs-pagination-hover-border-color:var(--bs-border-color);--bs-pagination-focus-color:var(--bs-link-hover-color);--bs-pagination-focus-bg:var(--bs-secondary-bg);--bs-pagination-focus-box-shadow:0 0 0 .25rem rgba(13,110,253,.25);--bs-pagination-active-color:#fff;--bs-pagination-active-bg:#0d6efd;--bs-pagination-active-border-color:#0d6efd;--bs-pagination-disabled-color:var(--bs-secondary-color);--bs-pagination-disabled-bg:var(--bs-secondary-bg);--bs-pagination-disabled-border-color:var(--bs-border-color);display:flex;list-style:none;padding-left:0}.page-link{background-color:var(--bs-pagination-bg);border:var(--bs-pagination-border-width) solid var(--bs-pagination-border-color);color:var(--bs-pagination-color);display:block;font-size:var(--bs-pagination-font-size);padding:var(--bs-pagination-padding-y) var(--bs-pagination-padding-x);position:relative;text-decoration:none;transition:color .15s ease-in-out,background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out}@media (prefers-reduced-motion:reduce){.page-link{transition:none}}.page-link:hover{background-color:var(--bs-pagination-hover-bg);border-color:var(--bs-pagination-hover-border-color);color:var(--bs-pagination-hover-color);z-index:2}.page-link:focus{background-color:var(--bs-pagination-focus-bg);box-shadow:var(--bs-pagination-focus-box-shadow);color:var(--bs-pagination-focus-color);outline:0;z-index:3}.active>.page-link,.page-link.active{background-color:var(--bs-pagination-active-bg);background-image:linear-gradient(180deg,hsla(0,0%,100%,.15),hsla(0,0%,100%,0));background-image:var(--bs-gradient);border-color:var(--bs-pagination-active-border-color);color:var(--bs-pagination-active-color);z-index:3}.disabled>.page-link,.page-link.disabled{background-color:var(--bs-pagination-disabled-bg);border-color:var(--bs-pagination-disabled-border-color);color:var(--bs-pagination-disabled-color);pointer-events:none}.page-item:not(:first-child) .page-link{margin-left:-1px;margin-left:calc(var(--bs-border-width)*-1)}.page-item:first-child .page-link{border-bottom-left-radius:var(--bs-pagination-border-radius);border-top-left-radius:var(--bs-pagination-border-radius)}.page-item:last-child .page-link{border-bottom-right-radius:var(--bs-pagination-border-radius);border-top-right-radius:var(--bs-pagination-border-radius)}.pagination-lg{--bs-pagination-padding-x:1.5rem;--bs-pagination-padding-y:.75rem;--bs-pagination-font-size:1.25rem;--bs-pagination-border-radius:var(--bs-border-radius-lg)}.pagination-sm{--bs-pagination-padding-x:.5rem;--bs-pagination-padding-y:.25rem;--bs-pagination-font-size:.875rem;--bs-pagination-border-radius:var(--bs-border-radius-sm)}.badge{--bs-badge-padding-x:.65em;--bs-badge-padding-y:.35em;--bs-badge-font-size:.75em;--bs-badge-font-weight:700;--bs-badge-color:#fff;--bs-badge-border-radius:var(--bs-border-radius);background-image:linear-gradient(180deg,hsla(0,0%,100%,.15),hsla(0,0%,100%,0));background-image:var(--bs-gradient);border-radius:var(--bs-badge-border-radius);color:var(--bs-badge-color);display:inline-block;font-size:var(--bs-badge-font-size);font-weight:var(--bs-badge-font-weight);line-height:1;padding:var(--bs-badge-padding-y) var(--bs-badge-padding-x);text-align:center;vertical-align:baseline;white-space:nowrap}.badge:empty{display:none}.btn .badge{position:relative;top:-1px}.alert{--bs-alert-bg:transparent;--bs-alert-padding-x:1rem;--bs-alert-padding-y:1rem;--bs-alert-margin-bottom:1rem;--bs-alert-color:inherit;--bs-alert-border-color:transparent;--bs-alert-border:var(--bs-border-width) solid var(--bs-alert-border-color);--bs-alert-border-radius:var(--bs-border-radius);--bs-alert-link-color:inherit;background-color:var(--bs-alert-bg);border:var(--bs-alert-border);border-radius:var(--bs-alert-border-radius);color:var(--bs-alert-color);margin-bottom:var(--bs-alert-margin-bottom);padding:var(--bs-alert-padding-y) var(--bs-alert-padding-x);position:relative}.alert-heading{color:inherit}.alert-link{color:var(--bs-alert-link-color);font-weight:700}.alert-dismissible{padding-right:3rem}.alert-dismissible .btn-close{padding:1.25rem 1rem;position:absolute;right:0;top:0;z-index:2}.alert-primary{--bs-alert-color:var(--bs-primary-text-emphasis);--bs-alert-bg:var(--bs-primary-bg-subtle);--bs-alert-border-color:var(--bs-primary-border-subtle);--bs-alert-link-color:var(--bs-primary-text-emphasis)}.alert-secondary{--bs-alert-color:var(--bs-secondary-text-emphasis);--bs-alert-bg:var(--bs-secondary-bg-subtle);--bs-alert-border-color:var(--bs-secondary-border-subtle);--bs-alert-link-color:var(--bs-secondary-text-emphasis)}.alert-success{--bs-alert-color:var(--bs-success-text-emphasis);--bs-alert-bg:var(--bs-success-bg-subtle);--bs-alert-border-color:var(--bs-success-border-subtle);--bs-alert-link-color:var(--bs-success-text-emphasis)}.alert-warning{--bs-alert-color:var(--bs-warning-text-emphasis);--bs-alert-bg:var(--bs-warning-bg-subtle);--bs-alert-border-color:var(--bs-warning-border-subtle);--bs-alert-link-color:var(--bs-warning-text-emphasis)}.alert-danger{--bs-alert-color:var(--bs-danger-text-emphasis);--bs-alert-bg:var(--bs-danger-bg-subtle);--bs-alert-border-color:var(--bs-danger-border-subtle);--bs-alert-link-color:var(--bs-danger-text-emphasis)}.alert-dark{--bs-alert-color:var(--bs-dark-text-emphasis);--bs-alert-bg:var(--bs-dark-bg-subtle);--bs-alert-border-color:var(--bs-dark-border-subtle);--bs-alert-link-color:var(--bs-dark-text-emphasis)}.alert-light{--bs-alert-color:var(--bs-light-text-emphasis);--bs-alert-bg:var(--bs-light-bg-subtle);--bs-alert-border-color:var(--bs-light-border-subtle);--bs-alert-link-color:var(--bs-light-text-emphasis)}@keyframes progress-bar-stripes{0%{background-position-x:var(--bs-progress-height)}}.progress,.progress-stacked{--bs-progress-height:1rem;--bs-progress-font-size:.75rem;--bs-progress-bg:var(--bs-secondary-bg);--bs-progress-border-radius:var(--bs-border-radius);--bs-progress-box-shadow:var(--bs-box-shadow-inset);--bs-progress-bar-color:#fff;--bs-progress-bar-bg:#0d6efd;--bs-progress-bar-transition:width 0.6s ease;background-color:var(--bs-progress-bg);border-radius:var(--bs-progress-border-radius);box-shadow:var(--bs-progress-box-shadow);display:flex;font-size:var(--bs-progress-font-size);height:var(--bs-progress-height);overflow:hidden}.progress-bar{background-color:var(--bs-progress-bar-bg);color:var(--bs-progress-bar-color);display:flex;flex-direction:column;justify-content:center;overflow:hidden;text-align:center;transition:var(--bs-progress-bar-transition);white-space:nowrap}@media (prefers-reduced-motion:reduce){.progress-bar{transition:none}}.progress-bar-striped{background-image:linear-gradient(45deg,hsla(0,0%,100%,.15) 25%,transparent 0,transparent 50%,hsla(0,0%,100%,.15) 0,hsla(0,0%,100%,.15) 75%,transparent 0,transparent);background-size:var(--bs-progress-height) var(--bs-progress-height)}.progress-stacked>.progress{overflow:visible}.progress-stacked>.progress>.progress-bar{width:100%}.progress-bar-animated{animation:progress-bar-stripes 1s linear infinite}@media (prefers-reduced-motion:reduce){.progress-bar-animated{animation:none}}.list-group{--bs-list-group-color:var(--bs-body-color);--bs-list-group-bg:var(--bs-body-bg);--bs-list-group-border-color:var(--bs-border-color);--bs-list-group-border-width:var(--bs-border-width);--bs-list-group-border-radius:var(--bs-border-radius);--bs-list-group-item-padding-x:1rem;--bs-list-group-item-padding-y:.5rem;--bs-list-group-action-color:var(--bs-secondary-color);--bs-list-group-action-hover-color:var(--bs-emphasis-color);--bs-list-group-action-hover-bg:var(--bs-tertiary-bg);--bs-list-group-action-active-color:var(--bs-body-color);--bs-list-group-action-active-bg:var(--bs-secondary-bg);--bs-list-group-disabled-color:var(--bs-secondary-color);--bs-list-group-disabled-bg:var(--bs-body-bg);--bs-list-group-active-color:#fff;--bs-list-group-active-bg:#0d6efd;--bs-list-group-active-border-color:#0d6efd;border-radius:var(--bs-list-group-border-radius);display:flex;flex-direction:column;margin-bottom:0;padding-left:0}.list-group-numbered{counter-reset:section;list-style-type:none}.list-group-numbered>.list-group-item:before{content:counters(section,".") ". ";counter-increment:section}.list-group-item{background-color:var(--bs-list-group-bg);border:var(--bs-list-group-border-width) solid var(--bs-list-group-border-color);color:var(--bs-list-group-color);display:block;padding:var(--bs-list-group-item-padding-y) var(--bs-list-group-item-padding-x);position:relative;text-decoration:none}.list-group-item:first-child{border-top-left-radius:inherit;border-top-right-radius:inherit}.list-group-item:last-child{border-bottom-left-radius:inherit;border-bottom-right-radius:inherit}.list-group-item.disabled,.list-group-item:disabled{background-color:var(--bs-list-group-disabled-bg);color:var(--bs-list-group-disabled-color);pointer-events:none}.list-group-item.active{background-color:var(--bs-list-group-active-bg);border-color:var(--bs-list-group-active-border-color);color:var(--bs-list-group-active-color);z-index:2}.list-group-item+.list-group-item{border-top-width:0}.list-group-item+.list-group-item.active{border-top-width:var(--bs-list-group-border-width);margin-top:calc(var(--bs-list-group-border-width)*-1)}.list-group-item-action{color:var(--bs-list-group-action-color);text-align:inherit;width:100%}.list-group-item-action:not(.active):focus,.list-group-item-action:not(.active):hover{background-color:var(--bs-list-group-action-hover-bg);color:var(--bs-list-group-action-hover-color);text-decoration:none;z-index:1}.list-group-item-action:not(.active):active{background-color:var(--bs-list-group-action-active-bg);color:var(--bs-list-group-action-active-color)}.list-group-horizontal{flex-direction:row}.list-group-horizontal>.list-group-item:first-child:not(:last-child){border-bottom-left-radius:var(--bs-list-group-border-radius);border-top-right-radius:0}.list-group-horizontal>.list-group-item:last-child:not(:first-child){border-bottom-left-radius:0;border-top-right-radius:var(--bs-list-group-border-radius)}.list-group-horizontal>.list-group-item.active{margin-top:0}.list-group-horizontal>.list-group-item+.list-group-item{border-left-width:0;border-top-width:var(--bs-list-group-border-width)}.list-group-horizontal>.list-group-item+.list-group-item.active{border-left-width:var(--bs-list-group-border-width);margin-left:calc(var(--bs-list-group-border-width)*-1)}@media (min-width:576px){.list-group-horizontal-sm{flex-direction:row}.list-group-horizontal-sm>.list-group-item:first-child:not(:last-child){border-bottom-left-radius:var(--bs-list-group-border-radius);border-top-right-radius:0}.list-group-horizontal-sm>.list-group-item:last-child:not(:first-child){border-bottom-left-radius:0;border-top-right-radius:var(--bs-list-group-border-radius)}.list-group-horizontal-sm>.list-group-item.active{margin-top:0}.list-group-horizontal-sm>.list-group-item+.list-group-item{border-left-width:0;border-top-width:var(--bs-list-group-border-width)}.list-group-horizontal-sm>.list-group-item+.list-group-item.active{border-left-width:var(--bs-list-group-border-width);margin-left:calc(var(--bs-list-group-border-width)*-1)}}@media (min-width:768px){.list-group-horizontal-md{flex-direction:row}.list-group-horizontal-md>.list-group-item:first-child:not(:last-child){border-bottom-left-radius:var(--bs-list-group-border-radius);border-top-right-radius:0}.list-group-horizontal-md>.list-group-item:last-child:not(:first-child){border-bottom-left-radius:0;border-top-right-radius:var(--bs-list-group-border-radius)}.list-group-horizontal-md>.list-group-item.active{margin-top:0}.list-group-horizontal-md>.list-group-item+.list-group-item{border-left-width:0;border-top-width:var(--bs-list-group-border-width)}.list-group-horizontal-md>.list-group-item+.list-group-item.active{border-left-width:var(--bs-list-group-border-width);margin-left:calc(var(--bs-list-group-border-width)*-1)}}@media (min-width:992px){.list-group-horizontal-lg{flex-direction:row}.list-group-horizontal-lg>.list-group-item:first-child:not(:last-child){border-bottom-left-radius:var(--bs-list-group-border-radius);border-top-right-radius:0}.list-group-horizontal-lg>.list-group-item:last-child:not(:first-child){border-bottom-left-radius:0;border-top-right-radius:var(--bs-list-group-border-radius)}.list-group-horizontal-lg>.list-group-item.active{margin-top:0}.list-group-horizontal-lg>.list-group-item+.list-group-item{border-left-width:0;border-top-width:var(--bs-list-group-border-width)}.list-group-horizontal-lg>.list-group-item+.list-group-item.active{border-left-width:var(--bs-list-group-border-width);margin-left:calc(var(--bs-list-group-border-width)*-1)}}@media (min-width:1200px){.list-group-horizontal-xl{flex-direction:row}.list-group-horizontal-xl>.list-group-item:first-child:not(:last-child){border-bottom-left-radius:var(--bs-list-group-border-radius);border-top-right-radius:0}.list-group-horizontal-xl>.list-group-item:last-child:not(:first-child){border-bottom-left-radius:0;border-top-right-radius:var(--bs-list-group-border-radius)}.list-group-horizontal-xl>.list-group-item.active{margin-top:0}.list-group-horizontal-xl>.list-group-item+.list-group-item{border-left-width:0;border-top-width:var(--bs-list-group-border-width)}.list-group-horizontal-xl>.list-group-item+.list-group-item.active{border-left-width:var(--bs-list-group-border-width);margin-left:calc(var(--bs-list-group-border-width)*-1)}}@media (min-width:1400px){.list-group-horizontal-xxl{flex-direction:row}.list-group-horizontal-xxl>.list-group-item:first-child:not(:last-child){border-bottom-left-radius:var(--bs-list-group-border-radius);border-top-right-radius:0}.list-group-horizontal-xxl>.list-group-item:last-child:not(:first-child){border-bottom-left-radius:0;border-top-right-radius:var(--bs-list-group-border-radius)}.list-group-horizontal-xxl>.list-group-item.active{margin-top:0}.list-group-horizontal-xxl>.list-group-item+.list-group-item{border-left-width:0;border-top-width:var(--bs-list-group-border-width)}.list-group-horizontal-xxl>.list-group-item+.list-group-item.active{border-left-width:var(--bs-list-group-border-width);margin-left:calc(var(--bs-list-group-border-width)*-1)}}.list-group-flush{border-radius:0}.list-group-flush>.list-group-item{border-width:0 0 var(--bs-list-group-border-width)}.list-group-flush>.list-group-item:last-child{border-bottom-width:0}.list-group-item-primary{--bs-list-group-color:var(--bs-primary-text-emphasis);--bs-list-group-bg:var(--bs-primary-bg-subtle);--bs-list-group-border-color:var(--bs-primary-border-subtle);--bs-list-group-action-hover-color:var(--bs-emphasis-color);--bs-list-group-action-hover-bg:var(--bs-primary-border-subtle);--bs-list-group-action-active-color:var(--bs-emphasis-color);--bs-list-group-action-active-bg:var(--bs-primary-border-subtle);--bs-list-group-active-color:var(--bs-primary-bg-subtle);--bs-list-group-active-bg:var(--bs-primary-text-emphasis);--bs-list-group-active-border-color:var(--bs-primary-text-emphasis)}.list-group-item-secondary{--bs-list-group-color:var(--bs-secondary-text-emphasis);--bs-list-group-bg:var(--bs-secondary-bg-subtle);--bs-list-group-border-color:var(--bs-secondary-border-subtle);--bs-list-group-action-hover-color:var(--bs-emphasis-color);--bs-list-group-action-hover-bg:var(--bs-secondary-border-subtle);--bs-list-group-action-active-color:var(--bs-emphasis-color);--bs-list-group-action-active-bg:var(--bs-secondary-border-subtle);--bs-list-group-active-color:var(--bs-secondary-bg-subtle);--bs-list-group-active-bg:var(--bs-secondary-text-emphasis);--bs-list-group-active-border-color:var(--bs-secondary-text-emphasis)}.list-group-item-success{--bs-list-group-color:var(--bs-success-text-emphasis);--bs-list-group-bg:var(--bs-success-bg-subtle);--bs-list-group-border-color:var(--bs-success-border-subtle);--bs-list-group-action-hover-color:var(--bs-emphasis-color);--bs-list-group-action-hover-bg:var(--bs-success-border-subtle);--bs-list-group-action-active-color:var(--bs-emphasis-color);--bs-list-group-action-active-bg:var(--bs-success-border-subtle);--bs-list-group-active-color:var(--bs-success-bg-subtle);--bs-list-group-active-bg:var(--bs-success-text-emphasis);--bs-list-group-active-border-color:var(--bs-success-text-emphasis)}.list-group-item-warning{--bs-list-group-color:var(--bs-warning-text-emphasis);--bs-list-group-bg:var(--bs-warning-bg-subtle);--bs-list-group-border-color:var(--bs-warning-border-subtle);--bs-list-group-action-hover-color:var(--bs-emphasis-color);--bs-list-group-action-hover-bg:var(--bs-warning-border-subtle);--bs-list-group-action-active-color:var(--bs-emphasis-color);--bs-list-group-action-active-bg:var(--bs-warning-border-subtle);--bs-list-group-active-color:var(--bs-warning-bg-subtle);--bs-list-group-active-bg:var(--bs-warning-text-emphasis);--bs-list-group-active-border-color:var(--bs-warning-text-emphasis)}.list-group-item-danger{--bs-list-group-color:var(--bs-danger-text-emphasis);--bs-list-group-bg:var(--bs-danger-bg-subtle);--bs-list-group-border-color:var(--bs-danger-border-subtle);--bs-list-group-action-hover-color:var(--bs-emphasis-color);--bs-list-group-action-hover-bg:var(--bs-danger-border-subtle);--bs-list-group-action-active-color:var(--bs-emphasis-color);--bs-list-group-action-active-bg:var(--bs-danger-border-subtle);--bs-list-group-active-color:var(--bs-danger-bg-subtle);--bs-list-group-active-bg:var(--bs-danger-text-emphasis);--bs-list-group-active-border-color:var(--bs-danger-text-emphasis)}.list-group-item-dark{--bs-list-group-color:var(--bs-dark-text-emphasis);--bs-list-group-bg:var(--bs-dark-bg-subtle);--bs-list-group-border-color:var(--bs-dark-border-subtle);--bs-list-group-action-hover-color:var(--bs-emphasis-color);--bs-list-group-action-hover-bg:var(--bs-dark-border-subtle);--bs-list-group-action-active-color:var(--bs-emphasis-color);--bs-list-group-action-active-bg:var(--bs-dark-border-subtle);--bs-list-group-active-color:var(--bs-dark-bg-subtle);--bs-list-group-active-bg:var(--bs-dark-text-emphasis);--bs-list-group-active-border-color:var(--bs-dark-text-emphasis)}.list-group-item-light{--bs-list-group-color:var(--bs-light-text-emphasis);--bs-list-group-bg:var(--bs-light-bg-subtle);--bs-list-group-border-color:var(--bs-light-border-subtle);--bs-list-group-action-hover-color:var(--bs-emphasis-color);--bs-list-group-action-hover-bg:var(--bs-light-border-subtle);--bs-list-group-action-active-color:var(--bs-emphasis-color);--bs-list-group-action-active-bg:var(--bs-light-border-subtle);--bs-list-group-active-color:var(--bs-light-bg-subtle);--bs-list-group-active-bg:var(--bs-light-text-emphasis);--bs-list-group-active-border-color:var(--bs-light-text-emphasis)}.btn-close{--bs-btn-close-color:#000;--bs-btn-close-bg:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'%3E%3Cpath d='M.293.293a1 1 0 0 1 1.414 0L8 6.586 14.293.293a1 1 0 1 1 1.414 1.414L9.414 8l6.293 6.293a1 1 0 0 1-1.414 1.414L8 9.414l-6.293 6.293a1 1 0 0 1-1.414-1.414L6.586 8 .293 1.707a1 1 0 0 1 0-1.414'/%3E%3C/svg%3E");--bs-btn-close-opacity:.5;--bs-btn-close-hover-opacity:.75;--bs-btn-close-focus-shadow:0 0 0 .25rem rgba(13,110,253,.25);--bs-btn-close-focus-opacity:1;--bs-btn-close-disabled-opacity:.25;background:transparent var(--bs-btn-close-bg) center/1em auto no-repeat;border:0;border-radius:1.25rem;box-sizing:content-box;filter:var(--bs-btn-close-filter);height:1em;opacity:var(--bs-btn-close-opacity);padding:.25em;width:1em}.btn-close,.btn-close:hover{color:var(--bs-btn-close-color)}.btn-close:hover{opacity:var(--bs-btn-close-hover-opacity);text-decoration:none}.btn-close:focus{box-shadow:var(--bs-btn-close-focus-shadow);opacity:var(--bs-btn-close-focus-opacity);outline:0}.btn-close.disabled,.btn-close:disabled{opacity:var(--bs-btn-close-disabled-opacity);pointer-events:none;-webkit-user-select:none;user-select:none}.btn-close-white{--bs-btn-close-filter:invert(1) grayscale(100%) brightness(200%)}:root,[data-bs-theme=light]{--bs-btn-close-filter: }[data-bs-theme=dark]{--bs-btn-close-filter:invert(1) grayscale(100%) brightness(200%)}.toast{--bs-toast-zindex:1090;--bs-toast-padding-x:.75rem;--bs-toast-padding-y:.5rem;--bs-toast-spacing:1.5rem;--bs-toast-max-width:24rem;--bs-toast-font-size:.875rem;--bs-toast-color: ;--bs-toast-bg:rgba(var(--bs-body-bg-rgb),0.85);--bs-toast-border-width:var(--bs-border-width);--bs-toast-border-color:var(--bs-border-color-translucent);--bs-toast-border-radius:var(--bs-border-radius);--bs-toast-box-shadow:var(--bs-box-shadow);--bs-toast-header-color:var(--bs-secondary-color);--bs-toast-header-bg:rgba(var(--bs-body-bg-rgb),0.85);--bs-toast-header-border-color:var(--bs-border-color-translucent);background-clip:padding-box;background-color:var(--bs-toast-bg);border:var(--bs-toast-border-width) solid var(--bs-toast-border-color);border-radius:var(--bs-toast-border-radius);box-shadow:var(--bs-toast-box-shadow);color:var(--bs-toast-color);font-size:var(--bs-toast-font-size);max-width:100%;pointer-events:auto;width:var(--bs-toast-max-width)}.toast.showing{opacity:0}.toast:not(.show){display:none}.toast-container{--bs-toast-zindex:1090;max-width:100%;pointer-events:none;position:absolute;width:-webkit-max-content;width:max-content;z-index:var(--bs-toast-zindex)}.toast-container>:not(:last-child){margin-bottom:var(--bs-toast-spacing)}.toast-header{align-items:center;background-clip:padding-box;background-color:var(--bs-toast-header-bg);border-bottom:var(--bs-toast-border-width) solid var(--bs-toast-header-border-color);border-top-left-radius:calc(var(--bs-toast-border-radius) - var(--bs-toast-border-width));border-top-right-radius:calc(var(--bs-toast-border-radius) - var(--bs-toast-border-width));color:var(--bs-toast-header-color);display:flex;padding:var(--bs-toast-padding-y) var(--bs-toast-padding-x)}.toast-header .btn-close{margin-left:var(--bs-toast-padding-x);margin-right:calc(var(--bs-toast-padding-x)*-.5)}.toast-body{word-wrap:break-word;padding:var(--bs-toast-padding-x)}.modal{--bs-modal-zindex:1055;--bs-modal-width:500px;--bs-modal-padding:1rem;--bs-modal-margin:.5rem;--bs-modal-color:var(--bs-body-color);--bs-modal-bg:var(--bs-body-bg);--bs-modal-border-color:var(--bs-border-color-translucent);--bs-modal-border-width:var(--bs-border-width);--bs-modal-border-radius:var(--bs-border-radius-lg);--bs-modal-box-shadow:var(--bs-box-shadow-sm);--bs-modal-inner-border-radius:calc(var(--bs-border-radius-lg) - var(--bs-border-width));--bs-modal-header-padding-x:1rem;--bs-modal-header-padding-y:1rem;--bs-modal-header-padding:1rem 1rem;--bs-modal-header-border-color:var(--bs-border-color);--bs-modal-header-border-width:var(--bs-border-width);--bs-modal-title-line-height:1.5;--bs-modal-footer-gap:.5rem;--bs-modal-footer-bg: ;--bs-modal-footer-border-color:var(--bs-border-color);--bs-modal-footer-border-width:var(--bs-border-width);display:none;height:100%;left:0;outline:0;overflow-x:hidden;overflow-y:auto;position:fixed;top:0;width:100%;z-index:var(--bs-modal-zindex)}.modal-dialog{margin:var(--bs-modal-margin);pointer-events:none;position:relative;width:auto}.modal.fade .modal-dialog{transform:translateY(-50px);transition:transform .3s ease-out}@media (prefers-reduced-motion:reduce){.modal.fade .modal-dialog{transition:none}}.modal.show .modal-dialog{transform:none}.modal.modal-static .modal-dialog{transform:scale(1.02)}.modal-dialog-scrollable{height:calc(100% - var(--bs-modal-margin)*2)}.modal-dialog-scrollable .modal-content{max-height:100%;overflow:hidden}.modal-dialog-scrollable .modal-body{overflow-y:auto}.modal-dialog-centered{align-items:center;display:flex;min-height:calc(100% - var(--bs-modal-margin)*2)}.modal-content{background-clip:padding-box;background-color:var(--bs-modal-bg);border:var(--bs-modal-border-width) solid var(--bs-modal-border-color);border-radius:var(--bs-modal-border-radius);box-shadow:var(--bs-modal-box-shadow);color:var(--bs-modal-color);display:flex;flex-direction:column;outline:0;pointer-events:auto;position:relative;width:100%}.modal-backdrop{--bs-backdrop-zindex:1050;--bs-backdrop-bg:#000;--bs-backdrop-opacity:.2;background-color:var(--bs-backdrop-bg);height:100vh;left:0;position:fixed;top:0;width:100vw;z-index:var(--bs-backdrop-zindex)}.modal-backdrop.fade{opacity:0}.modal-backdrop.show{opacity:var(--bs-backdrop-opacity)}.modal-header{align-items:center;border-bottom:var(--bs-modal-header-border-width) solid var(--bs-modal-header-border-color);border-top-left-radius:var(--bs-modal-inner-border-radius);border-top-right-radius:var(--bs-modal-inner-border-radius);display:flex;flex-shrink:0;padding:var(--bs-modal-header-padding)}.modal-header .btn-close{margin-bottom:calc(var(--bs-modal-header-padding-y)*-.5);margin-left:auto;margin-right:calc(var(--bs-modal-header-padding-x)*-.5);margin-top:calc(var(--bs-modal-header-padding-y)*-.5);padding:calc(var(--bs-modal-header-padding-y)*.5) calc(var(--bs-modal-header-padding-x)*.5)}.modal-title{line-height:var(--bs-modal-title-line-height);margin-bottom:0}.modal-body{flex:1 1 auto;padding:var(--bs-modal-padding);position:relative}.modal-footer{align-items:center;background-color:var(--bs-modal-footer-bg);border-bottom-left-radius:var(--bs-modal-inner-border-radius);border-bottom-right-radius:var(--bs-modal-inner-border-radius);border-top:var(--bs-modal-footer-border-width) solid var(--bs-modal-footer-border-color);display:flex;flex-shrink:0;flex-wrap:wrap;justify-content:flex-end;padding:calc(var(--bs-modal-padding) - var(--bs-modal-footer-gap)*.5)}.modal-footer>*{margin:calc(var(--bs-modal-footer-gap)*.5)}@media (min-width:576px){.modal{--bs-modal-margin:1.75rem;--bs-modal-box-shadow:var(--bs-box-shadow)}.modal-dialog{margin-left:auto;margin-right:auto;max-width:var(--bs-modal-width)}.modal-sm{--bs-modal-width:300px}}@media (min-width:992px){.modal-lg,.modal-xl{--bs-modal-width:800px}}@media (min-width:1200px){.modal-xl{--bs-modal-width:1140px}}.modal-fullscreen{height:100%;margin:0;max-width:none;width:100vw}.modal-fullscreen .modal-content{border:0;border-radius:0;height:100%}.modal-fullscreen .modal-footer,.modal-fullscreen .modal-header{border-radius:0}.modal-fullscreen .modal-body{overflow-y:auto}@media (max-width:575.98px){.modal-fullscreen-sm-down{height:100%;margin:0;max-width:none;width:100vw}.modal-fullscreen-sm-down .modal-content{border:0;border-radius:0;height:100%}.modal-fullscreen-sm-down .modal-footer,.modal-fullscreen-sm-down .modal-header{border-radius:0}.modal-fullscreen-sm-down .modal-body{overflow-y:auto}}@media (max-width:767.98px){.modal-fullscreen-md-down{height:100%;margin:0;max-width:none;width:100vw}.modal-fullscreen-md-down .modal-content{border:0;border-radius:0;height:100%}.modal-fullscreen-md-down .modal-footer,.modal-fullscreen-md-down .modal-header{border-radius:0}.modal-fullscreen-md-down .modal-body{overflow-y:auto}}@media (max-width:991.98px){.modal-fullscreen-lg-down{height:100%;margin:0;max-width:none;width:100vw}.modal-fullscreen-lg-down .modal-content{border:0;border-radius:0;height:100%}.modal-fullscreen-lg-down .modal-footer,.modal-fullscreen-lg-down .modal-header{border-radius:0}.modal-fullscreen-lg-down .modal-body{overflow-y:auto}}@media (max-width:1199.98px){.modal-fullscreen-xl-down{height:100%;margin:0;max-width:none;width:100vw}.modal-fullscreen-xl-down .modal-content{border:0;border-radius:0;height:100%}.modal-fullscreen-xl-down .modal-footer,.modal-fullscreen-xl-down .modal-header{border-radius:0}.modal-fullscreen-xl-down .modal-body{overflow-y:auto}}@media (max-width:1399.98px){.modal-fullscreen-xxl-down{height:100%;margin:0;max-width:none;width:100vw}.modal-fullscreen-xxl-down .modal-content{border:0;border-radius:0;height:100%}.modal-fullscreen-xxl-down .modal-footer,.modal-fullscreen-xxl-down .modal-header{border-radius:0}.modal-fullscreen-xxl-down .modal-body{overflow-y:auto}}.tooltip{--bs-tooltip-zindex:1080;--bs-tooltip-max-width:200px;--bs-tooltip-padding-x:.5rem;--bs-tooltip-padding-y:.25rem;--bs-tooltip-margin: ;--bs-tooltip-font-size:.875rem;--bs-tooltip-color:var(--bs-body-bg);--bs-tooltip-bg:var(--bs-emphasis-color);--bs-tooltip-border-radius:var(--bs-border-radius);--bs-tooltip-opacity:.9;--bs-tooltip-arrow-width:.8rem;--bs-tooltip-arrow-height:.4rem;word-wrap:break-word;display:block;font-family:-apple-system,BlinkMacSystemFont,Inter,DM Sans,Helvetica Neue,Segoe UI,Arial,Noto Sans,sans-serif,Apple Color Emoji,Segoe UI Emoji,Segoe UI Symbol,Noto Color Emoji;font-size:var(--bs-tooltip-font-size);font-style:normal;font-weight:400;letter-spacing:normal;line-break:auto;line-height:1.5;margin:var(--bs-tooltip-margin);opacity:0;text-align:left;text-align:start;text-decoration:none;text-shadow:none;text-transform:none;white-space:normal;word-break:normal;word-spacing:normal;z-index:var(--bs-tooltip-zindex)}.tooltip.show{opacity:var(--bs-tooltip-opacity)}.tooltip .tooltip-arrow{display:block;height:var(--bs-tooltip-arrow-height);width:var(--bs-tooltip-arrow-width)}.tooltip .tooltip-arrow:before{border-color:transparent;border-style:solid;content:"";position:absolute}.bs-tooltip-auto[data-popper-placement^=top] .tooltip-arrow,.bs-tooltip-top .tooltip-arrow{bottom:calc(var(--bs-tooltip-arrow-height)*-1)}.bs-tooltip-auto[data-popper-placement^=top] .tooltip-arrow:before,.bs-tooltip-top .tooltip-arrow:before{border-top-color:var(--bs-tooltip-bg);border-width:var(--bs-tooltip-arrow-height) calc(var(--bs-tooltip-arrow-width)*.5) 0;top:-1px}.bs-tooltip-auto[data-popper-placement^=right] .tooltip-arrow,.bs-tooltip-end .tooltip-arrow{height:var(--bs-tooltip-arrow-width);left:calc(var(--bs-tooltip-arrow-height)*-1);width:var(--bs-tooltip-arrow-height)}.bs-tooltip-auto[data-popper-placement^=right] .tooltip-arrow:before,.bs-tooltip-end .tooltip-arrow:before{border-right-color:var(--bs-tooltip-bg);border-width:calc(var(--bs-tooltip-arrow-width)*.5) var(--bs-tooltip-arrow-height) calc(var(--bs-tooltip-arrow-width)*.5) 0;right:-1px}.bs-tooltip-auto[data-popper-placement^=bottom] .tooltip-arrow,.bs-tooltip-bottom .tooltip-arrow{top:calc(var(--bs-tooltip-arrow-height)*-1)}.bs-tooltip-auto[data-popper-placement^=bottom] .tooltip-arrow:before,.bs-tooltip-bottom .tooltip-arrow:before{border-bottom-color:var(--bs-tooltip-bg);border-width:0 calc(var(--bs-tooltip-arrow-width)*.5) var(--bs-tooltip-arrow-height);bottom:-1px}.bs-tooltip-auto[data-popper-placement^=left] .tooltip-arrow,.bs-tooltip-start .tooltip-arrow{height:var(--bs-tooltip-arrow-width);right:calc(var(--bs-tooltip-arrow-height)*-1);width:var(--bs-tooltip-arrow-height)}.bs-tooltip-auto[data-popper-placement^=left] .tooltip-arrow:before,.bs-tooltip-start .tooltip-arrow:before{border-left-color:var(--bs-tooltip-bg);border-width:calc(var(--bs-tooltip-arrow-width)*.5) 0 calc(var(--bs-tooltip-arrow-width)*.5) var(--bs-tooltip-arrow-height);left:-1px}.tooltip-inner{background-color:var(--bs-tooltip-bg);border-radius:var(--bs-tooltip-border-radius);color:var(--bs-tooltip-color);max-width:var(--bs-tooltip-max-width);padding:var(--bs-tooltip-padding-y) var(--bs-tooltip-padding-x);text-align:center}.popover{--bs-popover-zindex:1070;--bs-popover-max-width:276px;--bs-popover-font-size:.875rem;--bs-popover-bg:var(--bs-body-bg);--bs-popover-border-width:var(--bs-border-width);--bs-popover-border-color:var(--bs-border-color-translucent);--bs-popover-border-radius:var(--bs-border-radius-lg);--bs-popover-inner-border-radius:calc(var(--bs-border-radius-lg) - var(--bs-border-width));--bs-popover-box-shadow:var(--bs-box-shadow);--bs-popover-header-padding-x:1rem;--bs-popover-header-padding-y:.5rem;--bs-popover-header-font-size:1rem;--bs-popover-header-color:inherit;--bs-popover-header-bg:var(--bs-secondary-bg);--bs-popover-body-padding-x:1rem;--bs-popover-body-padding-y:1rem;--bs-popover-body-color:var(--bs-body-color);--bs-popover-arrow-width:1rem;--bs-popover-arrow-height:.5rem;--bs-popover-arrow-border:var(--bs-popover-border-color);word-wrap:break-word;background-clip:padding-box;background-color:var(--bs-popover-bg);border:var(--bs-popover-border-width) solid var(--bs-popover-border-color);border-radius:var(--bs-popover-border-radius);box-shadow:var(--bs-popover-box-shadow);display:block;font-family:-apple-system,BlinkMacSystemFont,Inter,DM Sans,Helvetica Neue,Segoe UI,Arial,Noto Sans,sans-serif,Apple Color Emoji,Segoe UI Emoji,Segoe UI Symbol,Noto Color Emoji;font-size:var(--bs-popover-font-size);font-style:normal;font-weight:400;letter-spacing:normal;line-break:auto;line-height:1.5;max-width:var(--bs-popover-max-width);text-align:left;text-align:start;text-decoration:none;text-shadow:none;text-transform:none;white-space:normal;word-break:normal;word-spacing:normal;z-index:var(--bs-popover-zindex)}.popover .popover-arrow{display:block;height:var(--bs-popover-arrow-height);width:var(--bs-popover-arrow-width)}.popover .popover-arrow:after,.popover .popover-arrow:before{border:0 solid transparent;content:"";display:block;position:absolute}.bs-popover-auto[data-popper-placement^=top]>.popover-arrow,.bs-popover-top>.popover-arrow{bottom:calc((var(--bs-popover-arrow-height))*-1 - var(--bs-popover-border-width))}.bs-popover-auto[data-popper-placement^=top]>.popover-arrow:after,.bs-popover-auto[data-popper-placement^=top]>.popover-arrow:before,.bs-popover-top>.popover-arrow:after,.bs-popover-top>.popover-arrow:before{border-width:var(--bs-popover-arrow-height) calc(var(--bs-popover-arrow-width)*.5) 0}.bs-popover-auto[data-popper-placement^=top]>.popover-arrow:before,.bs-popover-top>.popover-arrow:before{border-top-color:var(--bs-popover-arrow-border);bottom:0}.bs-popover-auto[data-popper-placement^=top]>.popover-arrow:after,.bs-popover-top>.popover-arrow:after{border-top-color:var(--bs-popover-bg);bottom:var(--bs-popover-border-width)}.bs-popover-auto[data-popper-placement^=right]>.popover-arrow,.bs-popover-end>.popover-arrow{height:var(--bs-popover-arrow-width);left:calc((var(--bs-popover-arrow-height))*-1 - var(--bs-popover-border-width));width:var(--bs-popover-arrow-height)}.bs-popover-auto[data-popper-placement^=right]>.popover-arrow:after,.bs-popover-auto[data-popper-placement^=right]>.popover-arrow:before,.bs-popover-end>.popover-arrow:after,.bs-popover-end>.popover-arrow:before{border-width:calc(var(--bs-popover-arrow-width)*.5) var(--bs-popover-arrow-height) calc(var(--bs-popover-arrow-width)*.5) 0}.bs-popover-auto[data-popper-placement^=right]>.popover-arrow:before,.bs-popover-end>.popover-arrow:before{border-right-color:var(--bs-popover-arrow-border);left:0}.bs-popover-auto[data-popper-placement^=right]>.popover-arrow:after,.bs-popover-end>.popover-arrow:after{border-right-color:var(--bs-popover-bg);left:var(--bs-popover-border-width)}.bs-popover-auto[data-popper-placement^=bottom]>.popover-arrow,.bs-popover-bottom>.popover-arrow{top:calc((var(--bs-popover-arrow-height))*-1 - var(--bs-popover-border-width))}.bs-popover-auto[data-popper-placement^=bottom]>.popover-arrow:after,.bs-popover-auto[data-popper-placement^=bottom]>.popover-arrow:before,.bs-popover-bottom>.popover-arrow:after,.bs-popover-bottom>.popover-arrow:before{border-width:0 calc(var(--bs-popover-arrow-width)*.5) var(--bs-popover-arrow-height)}.bs-popover-auto[data-popper-placement^=bottom]>.popover-arrow:before,.bs-popover-bottom>.popover-arrow:before{border-bottom-color:var(--bs-popover-arrow-border);top:0}.bs-popover-auto[data-popper-placement^=bottom]>.popover-arrow:after,.bs-popover-bottom>.popover-arrow:after{border-bottom-color:var(--bs-popover-bg);top:var(--bs-popover-border-width)}.bs-popover-auto[data-popper-placement^=bottom] .popover-header:before,.bs-popover-bottom .popover-header:before{border-bottom:var(--bs-popover-border-width) solid var(--bs-popover-header-bg);content:"";display:block;left:50%;margin-left:calc(var(--bs-popover-arrow-width)*-.5);position:absolute;top:0;width:var(--bs-popover-arrow-width)}.bs-popover-auto[data-popper-placement^=left]>.popover-arrow,.bs-popover-start>.popover-arrow{height:var(--bs-popover-arrow-width);right:calc((var(--bs-popover-arrow-height))*-1 - var(--bs-popover-border-width));width:var(--bs-popover-arrow-height)}.bs-popover-auto[data-popper-placement^=left]>.popover-arrow:after,.bs-popover-auto[data-popper-placement^=left]>.popover-arrow:before,.bs-popover-start>.popover-arrow:after,.bs-popover-start>.popover-arrow:before{border-width:calc(var(--bs-popover-arrow-width)*.5) 0 calc(var(--bs-popover-arrow-width)*.5) var(--bs-popover-arrow-height)}.bs-popover-auto[data-popper-placement^=left]>.popover-arrow:before,.bs-popover-start>.popover-arrow:before{border-left-color:var(--bs-popover-arrow-border);right:0}.bs-popover-auto[data-popper-placement^=left]>.popover-arrow:after,.bs-popover-start>.popover-arrow:after{border-left-color:var(--bs-popover-bg);right:var(--bs-popover-border-width)}.popover-header{background-color:var(--bs-popover-header-bg);border-bottom:var(--bs-popover-border-width) solid var(--bs-popover-border-color);border-top-left-radius:var(--bs-popover-inner-border-radius);border-top-right-radius:var(--bs-popover-inner-border-radius);color:var(--bs-popover-header-color);font-size:var(--bs-popover-header-font-size);margin-bottom:0;padding:var(--bs-popover-header-padding-y) var(--bs-popover-header-padding-x)}.popover-header:empty{display:none}.popover-body{color:var(--bs-popover-body-color);padding:var(--bs-popover-body-padding-y) var(--bs-popover-body-padding-x)}.carousel{position:relative}.carousel.pointer-event{touch-action:pan-y}.carousel-inner{overflow:hidden;position:relative;width:100%}.carousel-inner:after{clear:both;content:"";display:block}.carousel-item{-webkit-backface-visibility:hidden;backface-visibility:hidden;display:none;float:left;margin-right:-100%;position:relative;transition:transform .6s ease-in-out;width:100%}@media (prefers-reduced-motion:reduce){.carousel-item{transition:none}}.carousel-item-next,.carousel-item-prev,.carousel-item.active{display:block}.active.carousel-item-end,.carousel-item-next:not(.carousel-item-start){transform:translateX(100%)}.active.carousel-item-start,.carousel-item-prev:not(.carousel-item-end){transform:translateX(-100%)}.carousel-fade .carousel-item{opacity:0;transform:none;transition-property:opacity}.carousel-fade .carousel-item-next.carousel-item-start,.carousel-fade .carousel-item-prev.carousel-item-end,.carousel-fade .carousel-item.active{opacity:1;z-index:1}.carousel-fade .active.carousel-item-end,.carousel-fade .active.carousel-item-start{opacity:0;transition:opacity 0s .6s;z-index:0}@media (prefers-reduced-motion:reduce){.carousel-fade .active.carousel-item-end,.carousel-fade .active.carousel-item-start{transition:none}}.carousel-control-next,.carousel-control-prev{align-items:center;background:none;border:0;bottom:0;color:#fff;display:flex;filter:var(--bs-carousel-control-icon-filter);justify-content:center;opacity:.5;padding:0;position:absolute;text-align:center;top:0;transition:opacity .15s ease;width:15%;z-index:1}@media (prefers-reduced-motion:reduce){.carousel-control-next,.carousel-control-prev{transition:none}}.carousel-control-next:focus,.carousel-control-next:hover,.carousel-control-prev:focus,.carousel-control-prev:hover{color:#fff;opacity:.9;outline:0;text-decoration:none}.carousel-control-prev{background-image:linear-gradient(90deg,rgba(0,0,0,.25),rgba(0,0,0,.001));left:0}.carousel-control-next{background-image:linear-gradient(270deg,rgba(0,0,0,.25),rgba(0,0,0,.001));right:0}.carousel-control-next-icon,.carousel-control-prev-icon{background-position:50%;background-repeat:no-repeat;background-size:100% 100%;display:inline-block;height:2rem;width:2rem}.carousel-control-prev-icon{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='%23fff'%3E%3Cpath d='M11.354 1.646a.5.5 0 0 1 0 .708L5.707 8l5.647 5.646a.5.5 0 0 1-.708.708l-6-6a.5.5 0 0 1 0-.708l6-6a.5.5 0 0 1 .708 0'/%3E%3C/svg%3E")}.carousel-control-next-icon{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='%23fff'%3E%3Cpath d='M4.646 1.646a.5.5 0 0 1 .708 0l6 6a.5.5 0 0 1 0 .708l-6 6a.5.5 0 0 1-.708-.708L10.293 8 4.646 2.354a.5.5 0 0 1 0-.708'/%3E%3C/svg%3E")}.carousel-indicators{bottom:0;display:flex;justify-content:center;left:0;margin-bottom:1rem;margin-left:15%;margin-right:15%;padding:0;position:absolute;right:0;z-index:2}.carousel-indicators [data-bs-target]{background-clip:padding-box;background-color:#fff;background-color:var(--bs-carousel-indicator-active-bg);border:0;border-bottom:10px solid transparent;border-top:10px solid transparent;box-sizing:content-box;cursor:pointer;flex:0 1 auto;height:3px;margin-left:3px;margin-right:3px;opacity:.5;padding:0;text-indent:-999px;transition:opacity .6s ease;width:30px}@media (prefers-reduced-motion:reduce){.carousel-indicators [data-bs-target]{transition:none}}.carousel-indicators .active{opacity:1}.carousel-caption{bottom:1.25rem;color:#fff;color:var(--bs-carousel-caption-color);left:15%;padding-bottom:1.25rem;padding-top:1.25rem;position:absolute;right:15%;text-align:center}.carousel-dark{--bs-carousel-indicator-active-bg:#000;--bs-carousel-caption-color:#000;--bs-carousel-control-icon-filter:invert(1) grayscale(100)}:root,[data-bs-theme=light]{--bs-carousel-indicator-active-bg:#fff;--bs-carousel-caption-color:#fff;--bs-carousel-control-icon-filter: }[data-bs-theme=dark]{--bs-carousel-indicator-active-bg:#000;--bs-carousel-caption-color:#000;--bs-carousel-control-icon-filter:invert(1) grayscale(100)}.spinner-border,.spinner-grow{animation:var(--bs-spinner-animation-speed) linear infinite var(--bs-spinner-animation-name);border-radius:50%;display:inline-block;height:var(--bs-spinner-height);vertical-align:var(--bs-spinner-vertical-align);width:var(--bs-spinner-width)}@keyframes spinner-border{to{transform:rotate(1turn)}}.spinner-border{--bs-spinner-width:2rem;--bs-spinner-height:2rem;--bs-spinner-vertical-align:-.125em;--bs-spinner-border-width:.25em;--bs-spinner-animation-speed:.75s;--bs-spinner-animation-name:spinner-border;border-right-color:currentcolor;border:var(--bs-spinner-border-width) solid;border-right:var(--bs-spinner-border-width) solid transparent}.spinner-border-sm{--bs-spinner-width:1rem;--bs-spinner-height:1rem;--bs-spinner-border-width:.2em}@keyframes spinner-grow{0%{transform:scale(0)}50%{opacity:1;transform:none}}.spinner-grow{--bs-spinner-width:2rem;--bs-spinner-height:2rem;--bs-spinner-vertical-align:-.125em;--bs-spinner-animation-speed:.75s;--bs-spinner-animation-name:spinner-grow;background-color:currentcolor;opacity:0}.spinner-grow-sm{--bs-spinner-width:1rem;--bs-spinner-height:1rem}@media (prefers-reduced-motion:reduce){.spinner-border,.spinner-grow{--bs-spinner-animation-speed:1.5s}}.offcanvas,.offcanvas-lg,.offcanvas-md,.offcanvas-sm,.offcanvas-xl,.offcanvas-xxl{--bs-offcanvas-zindex:1045;--bs-offcanvas-width:400px;--bs-offcanvas-height:30vh;--bs-offcanvas-padding-x:1rem;--bs-offcanvas-padding-y:1rem;--bs-offcanvas-color:var(--bs-body-color);--bs-offcanvas-bg:var(--bs-body-bg);--bs-offcanvas-border-width:var(--bs-border-width);--bs-offcanvas-border-color:var(--bs-border-color-translucent);--bs-offcanvas-box-shadow:var(--bs-box-shadow-sm);--bs-offcanvas-transition:transform .3s ease-in-out;--bs-offcanvas-title-line-height:1.5}@media (max-width:575.98px){.offcanvas-sm{background-clip:padding-box;background-color:var(--bs-offcanvas-bg);bottom:0;box-shadow:var(--bs-offcanvas-box-shadow);color:var(--bs-offcanvas-color);display:flex;flex-direction:column;max-width:100%;outline:0;position:fixed;transition:var(--bs-offcanvas-transition);visibility:hidden;z-index:var(--bs-offcanvas-zindex)}}@media (max-width:575.98px) and (prefers-reduced-motion:reduce){.offcanvas-sm{transition:none}}@media (max-width:575.98px){.offcanvas-sm.offcanvas-start{border-right:var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);left:0;top:0;transform:translateX(-100%);width:var(--bs-offcanvas-width)}.offcanvas-sm.offcanvas-end{border-left:var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);right:0;top:0;transform:translateX(100%);width:var(--bs-offcanvas-width)}.offcanvas-sm.offcanvas-top{border-bottom:var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);top:0;transform:translateY(-100%)}.offcanvas-sm.offcanvas-bottom,.offcanvas-sm.offcanvas-top{height:var(--bs-offcanvas-height);left:0;max-height:100%;right:0}.offcanvas-sm.offcanvas-bottom{border-top:var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);transform:translateY(100%)}.offcanvas-sm.show:not(.hiding),.offcanvas-sm.showing{transform:none}.offcanvas-sm.hiding,.offcanvas-sm.show,.offcanvas-sm.showing{visibility:visible}}@media (min-width:576px){.offcanvas-sm{--bs-offcanvas-height:auto;--bs-offcanvas-border-width:0;background-color:transparent!important}.offcanvas-sm .offcanvas-header{display:none}.offcanvas-sm .offcanvas-body{background-color:transparent!important;display:flex;flex-grow:0;overflow-y:visible;padding:0}}@media (max-width:767.98px){.offcanvas-md{background-clip:padding-box;background-color:var(--bs-offcanvas-bg);bottom:0;box-shadow:var(--bs-offcanvas-box-shadow);color:var(--bs-offcanvas-color);display:flex;flex-direction:column;max-width:100%;outline:0;position:fixed;transition:var(--bs-offcanvas-transition);visibility:hidden;z-index:var(--bs-offcanvas-zindex)}}@media (max-width:767.98px) and (prefers-reduced-motion:reduce){.offcanvas-md{transition:none}}@media (max-width:767.98px){.offcanvas-md.offcanvas-start{border-right:var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);left:0;top:0;transform:translateX(-100%);width:var(--bs-offcanvas-width)}.offcanvas-md.offcanvas-end{border-left:var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);right:0;top:0;transform:translateX(100%);width:var(--bs-offcanvas-width)}.offcanvas-md.offcanvas-top{border-bottom:var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);top:0;transform:translateY(-100%)}.offcanvas-md.offcanvas-bottom,.offcanvas-md.offcanvas-top{height:var(--bs-offcanvas-height);left:0;max-height:100%;right:0}.offcanvas-md.offcanvas-bottom{border-top:var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);transform:translateY(100%)}.offcanvas-md.show:not(.hiding),.offcanvas-md.showing{transform:none}.offcanvas-md.hiding,.offcanvas-md.show,.offcanvas-md.showing{visibility:visible}}@media (min-width:768px){.offcanvas-md{--bs-offcanvas-height:auto;--bs-offcanvas-border-width:0;background-color:transparent!important}.offcanvas-md .offcanvas-header{display:none}.offcanvas-md .offcanvas-body{background-color:transparent!important;display:flex;flex-grow:0;overflow-y:visible;padding:0}}@media (max-width:991.98px){.offcanvas-lg{background-clip:padding-box;background-color:var(--bs-offcanvas-bg);bottom:0;box-shadow:var(--bs-offcanvas-box-shadow);color:var(--bs-offcanvas-color);display:flex;flex-direction:column;max-width:100%;outline:0;position:fixed;transition:var(--bs-offcanvas-transition);visibility:hidden;z-index:var(--bs-offcanvas-zindex)}}@media (max-width:991.98px) and (prefers-reduced-motion:reduce){.offcanvas-lg{transition:none}}@media (max-width:991.98px){.offcanvas-lg.offcanvas-start{border-right:var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);left:0;top:0;transform:translateX(-100%);width:var(--bs-offcanvas-width)}.offcanvas-lg.offcanvas-end{border-left:var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);right:0;top:0;transform:translateX(100%);width:var(--bs-offcanvas-width)}.offcanvas-lg.offcanvas-top{border-bottom:var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);top:0;transform:translateY(-100%)}.offcanvas-lg.offcanvas-bottom,.offcanvas-lg.offcanvas-top{height:var(--bs-offcanvas-height);left:0;max-height:100%;right:0}.offcanvas-lg.offcanvas-bottom{border-top:var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);transform:translateY(100%)}.offcanvas-lg.show:not(.hiding),.offcanvas-lg.showing{transform:none}.offcanvas-lg.hiding,.offcanvas-lg.show,.offcanvas-lg.showing{visibility:visible}}@media (min-width:992px){.offcanvas-lg{--bs-offcanvas-height:auto;--bs-offcanvas-border-width:0;background-color:transparent!important}.offcanvas-lg .offcanvas-header{display:none}.offcanvas-lg .offcanvas-body{background-color:transparent!important;display:flex;flex-grow:0;overflow-y:visible;padding:0}}@media (max-width:1199.98px){.offcanvas-xl{background-clip:padding-box;background-color:var(--bs-offcanvas-bg);bottom:0;box-shadow:var(--bs-offcanvas-box-shadow);color:var(--bs-offcanvas-color);display:flex;flex-direction:column;max-width:100%;outline:0;position:fixed;transition:var(--bs-offcanvas-transition);visibility:hidden;z-index:var(--bs-offcanvas-zindex)}}@media (max-width:1199.98px) and (prefers-reduced-motion:reduce){.offcanvas-xl{transition:none}}@media (max-width:1199.98px){.offcanvas-xl.offcanvas-start{border-right:var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);left:0;top:0;transform:translateX(-100%);width:var(--bs-offcanvas-width)}.offcanvas-xl.offcanvas-end{border-left:var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);right:0;top:0;transform:translateX(100%);width:var(--bs-offcanvas-width)}.offcanvas-xl.offcanvas-top{border-bottom:var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);top:0;transform:translateY(-100%)}.offcanvas-xl.offcanvas-bottom,.offcanvas-xl.offcanvas-top{height:var(--bs-offcanvas-height);left:0;max-height:100%;right:0}.offcanvas-xl.offcanvas-bottom{border-top:var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);transform:translateY(100%)}.offcanvas-xl.show:not(.hiding),.offcanvas-xl.showing{transform:none}.offcanvas-xl.hiding,.offcanvas-xl.show,.offcanvas-xl.showing{visibility:visible}}@media (min-width:1200px){.offcanvas-xl{--bs-offcanvas-height:auto;--bs-offcanvas-border-width:0;background-color:transparent!important}.offcanvas-xl .offcanvas-header{display:none}.offcanvas-xl .offcanvas-body{background-color:transparent!important;display:flex;flex-grow:0;overflow-y:visible;padding:0}}@media (max-width:1399.98px){.offcanvas-xxl{background-clip:padding-box;background-color:var(--bs-offcanvas-bg);bottom:0;box-shadow:var(--bs-offcanvas-box-shadow);color:var(--bs-offcanvas-color);display:flex;flex-direction:column;max-width:100%;outline:0;position:fixed;transition:var(--bs-offcanvas-transition);visibility:hidden;z-index:var(--bs-offcanvas-zindex)}}@media (max-width:1399.98px) and (prefers-reduced-motion:reduce){.offcanvas-xxl{transition:none}}@media (max-width:1399.98px){.offcanvas-xxl.offcanvas-start{border-right:var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);left:0;top:0;transform:translateX(-100%);width:var(--bs-offcanvas-width)}.offcanvas-xxl.offcanvas-end{border-left:var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);right:0;top:0;transform:translateX(100%);width:var(--bs-offcanvas-width)}.offcanvas-xxl.offcanvas-top{border-bottom:var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);top:0;transform:translateY(-100%)}.offcanvas-xxl.offcanvas-bottom,.offcanvas-xxl.offcanvas-top{height:var(--bs-offcanvas-height);left:0;max-height:100%;right:0}.offcanvas-xxl.offcanvas-bottom{border-top:var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);transform:translateY(100%)}.offcanvas-xxl.show:not(.hiding),.offcanvas-xxl.showing{transform:none}.offcanvas-xxl.hiding,.offcanvas-xxl.show,.offcanvas-xxl.showing{visibility:visible}}@media (min-width:1400px){.offcanvas-xxl{--bs-offcanvas-height:auto;--bs-offcanvas-border-width:0;background-color:transparent!important}.offcanvas-xxl .offcanvas-header{display:none}.offcanvas-xxl .offcanvas-body{background-color:transparent!important;display:flex;flex-grow:0;overflow-y:visible;padding:0}}.offcanvas{background-clip:padding-box;background-color:var(--bs-offcanvas-bg);bottom:0;box-shadow:var(--bs-offcanvas-box-shadow);color:var(--bs-offcanvas-color);display:flex;flex-direction:column;max-width:100%;outline:0;position:fixed;transition:var(--bs-offcanvas-transition);visibility:hidden;z-index:var(--bs-offcanvas-zindex)}@media (prefers-reduced-motion:reduce){.offcanvas{transition:none}}.offcanvas.offcanvas-start{border-right:var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);left:0;top:0;transform:translateX(-100%);width:var(--bs-offcanvas-width)}.offcanvas.offcanvas-end{border-left:var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);right:0;top:0;transform:translateX(100%);width:var(--bs-offcanvas-width)}.offcanvas.offcanvas-top{border-bottom:var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);top:0;transform:translateY(-100%)}.offcanvas.offcanvas-bottom,.offcanvas.offcanvas-top{height:var(--bs-offcanvas-height);left:0;max-height:100%;right:0}.offcanvas.offcanvas-bottom{border-top:var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);transform:translateY(100%)}.offcanvas.show:not(.hiding),.offcanvas.showing{transform:none}.offcanvas.hiding,.offcanvas.show,.offcanvas.showing{visibility:visible}.offcanvas-backdrop{background-color:#000;height:100vh;left:0;position:fixed;top:0;width:100vw;z-index:1040}.offcanvas-backdrop.fade{opacity:0}.offcanvas-backdrop.show{opacity:.5}.offcanvas-header{align-items:center;display:flex;padding:var(--bs-offcanvas-padding-y) var(--bs-offcanvas-padding-x)}.offcanvas-header .btn-close{margin-bottom:calc(var(--bs-offcanvas-padding-y)*-.5);margin-left:auto;margin-right:calc(var(--bs-offcanvas-padding-x)*-.5);margin-top:calc(var(--bs-offcanvas-padding-y)*-.5);padding:calc(var(--bs-offcanvas-padding-y)*.5) calc(var(--bs-offcanvas-padding-x)*.5)}.offcanvas-title{line-height:var(--bs-offcanvas-title-line-height);margin-bottom:0}.offcanvas-body{flex-grow:1;overflow-y:auto;padding:var(--bs-offcanvas-padding-y) var(--bs-offcanvas-padding-x)}.placeholder{background-color:currentcolor;cursor:wait;display:inline-block;min-height:1em;opacity:.5;vertical-align:middle}.placeholder.btn:before{content:"";display:inline-block}.placeholder-xs{min-height:.6em}.placeholder-sm{min-height:.8em}.placeholder-lg{min-height:1.2em}.placeholder-glow .placeholder{animation:placeholder-glow 2s ease-in-out infinite}@keyframes placeholder-glow{50%{opacity:.2}}.placeholder-wave{animation:placeholder-wave 2s linear infinite;-webkit-mask-image:linear-gradient(130deg,#000 55%,rgba(0,0,0,.8) 75%,#000 95%);mask-image:linear-gradient(130deg,#000 55%,rgba(0,0,0,.8) 75%,#000 95%);-webkit-mask-size:200% 100%;mask-size:200% 100%}@keyframes placeholder-wave{to{-webkit-mask-position:-200% 0;mask-position:-200% 0}}.clearfix:after{clear:both;content:"";display:block}.text-bg-primary{background-color:#e1ba2d!important;background-color:RGBA(var(--bs-primary-rgb),var(--bs-bg-opacity,1))!important;color:#000!important}.text-bg-secondary{background-color:#f8f9fa!important;background-color:RGBA(var(--bs-secondary-rgb),var(--bs-bg-opacity,1))!important;color:#000!important}.text-bg-success{background-color:#33db95!important;background-color:RGBA(var(--bs-success-rgb),var(--bs-bg-opacity,1))!important;color:#000!important}.text-bg-warning{background-color:#fe8e02!important;background-color:RGBA(var(--bs-warning-rgb),var(--bs-bg-opacity,1))!important;color:#000!important}.text-bg-danger{background-color:#dc3545!important;background-color:RGBA(var(--bs-danger-rgb),var(--bs-bg-opacity,1))!important;color:#fff!important}.text-bg-dark{background-color:#3a4247!important;background-color:RGBA(var(--bs-dark-rgb),var(--bs-bg-opacity,1))!important;color:#fff!important}.text-bg-light{background-color:#9f9f9f!important;background-color:RGBA(var(--bs-light-rgb),var(--bs-bg-opacity,1))!important;color:#000!important}.link-primary{color:#e1ba2d!important;color:RGBA(var(--bs-primary-rgb),var(--bs-link-opacity,1))!important;-webkit-text-decoration-color:#e1ba2d!important;text-decoration-color:#e1ba2d!important;-webkit-text-decoration-color:RGBA(var(--bs-primary-rgb),var(--bs-link-underline-opacity,1))!important;text-decoration-color:RGBA(var(--bs-primary-rgb),var(--bs-link-underline-opacity,1))!important}.link-primary:focus,.link-primary:hover{color:#e7c857!important;color:RGBA(231,200,87,var(--bs-link-opacity,1))!important;-webkit-text-decoration-color:#e7c857!important;text-decoration-color:#e7c857!important;-webkit-text-decoration-color:RGBA(231,200,87,var(--bs-link-underline-opacity,1))!important;text-decoration-color:RGBA(231,200,87,var(--bs-link-underline-opacity,1))!important}.link-secondary{color:#f8f9fa!important;color:RGBA(var(--bs-secondary-rgb),var(--bs-link-opacity,1))!important;-webkit-text-decoration-color:#f8f9fa!important;text-decoration-color:#f8f9fa!important;-webkit-text-decoration-color:RGBA(var(--bs-secondary-rgb),var(--bs-link-underline-opacity,1))!important;text-decoration-color:RGBA(var(--bs-secondary-rgb),var(--bs-link-underline-opacity,1))!important}.link-secondary:focus,.link-secondary:hover{color:#f9fafb!important;color:RGBA(249,250,251,var(--bs-link-opacity,1))!important;-webkit-text-decoration-color:#f9fafb!important;text-decoration-color:#f9fafb!important;-webkit-text-decoration-color:RGBA(249,250,251,var(--bs-link-underline-opacity,1))!important;text-decoration-color:RGBA(249,250,251,var(--bs-link-underline-opacity,1))!important}.link-success{color:#33db95!important;color:RGBA(var(--bs-success-rgb),var(--bs-link-opacity,1))!important;-webkit-text-decoration-color:#33db95!important;text-decoration-color:#33db95!important;-webkit-text-decoration-color:RGBA(var(--bs-success-rgb),var(--bs-link-underline-opacity,1))!important;text-decoration-color:RGBA(var(--bs-success-rgb),var(--bs-link-underline-opacity,1))!important}.link-success:focus,.link-success:hover{color:#5ce2aa!important;color:RGBA(92,226,170,var(--bs-link-opacity,1))!important;-webkit-text-decoration-color:#5ce2aa!important;text-decoration-color:#5ce2aa!important;-webkit-text-decoration-color:RGBA(92,226,170,var(--bs-link-underline-opacity,1))!important;text-decoration-color:RGBA(92,226,170,var(--bs-link-underline-opacity,1))!important}.link-warning{color:#fe8e02!important;color:RGBA(var(--bs-warning-rgb),var(--bs-link-opacity,1))!important;-webkit-text-decoration-color:#fe8e02!important;text-decoration-color:#fe8e02!important;-webkit-text-decoration-color:RGBA(var(--bs-warning-rgb),var(--bs-link-underline-opacity,1))!important;text-decoration-color:RGBA(var(--bs-warning-rgb),var(--bs-link-underline-opacity,1))!important}.link-warning:focus,.link-warning:hover{color:#fea535!important;color:RGBA(254,165,53,var(--bs-link-opacity,1))!important;-webkit-text-decoration-color:#fea535!important;text-decoration-color:#fea535!important;-webkit-text-decoration-color:RGBA(254,165,53,var(--bs-link-underline-opacity,1))!important;text-decoration-color:RGBA(254,165,53,var(--bs-link-underline-opacity,1))!important}.link-danger{color:#dc3545!important;color:RGBA(var(--bs-danger-rgb),var(--bs-link-opacity,1))!important;-webkit-text-decoration-color:#dc3545!important;text-decoration-color:#dc3545!important;-webkit-text-decoration-color:RGBA(var(--bs-danger-rgb),var(--bs-link-underline-opacity,1))!important;text-decoration-color:RGBA(var(--bs-danger-rgb),var(--bs-link-underline-opacity,1))!important}.link-danger:focus,.link-danger:hover{color:#b02a37!important;color:RGBA(176,42,55,var(--bs-link-opacity,1))!important;-webkit-text-decoration-color:#b02a37!important;text-decoration-color:#b02a37!important;-webkit-text-decoration-color:RGBA(176,42,55,var(--bs-link-underline-opacity,1))!important;text-decoration-color:RGBA(176,42,55,var(--bs-link-underline-opacity,1))!important}.link-dark{color:#3a4247!important;color:RGBA(var(--bs-dark-rgb),var(--bs-link-opacity,1))!important;-webkit-text-decoration-color:#3a4247!important;text-decoration-color:#3a4247!important;-webkit-text-decoration-color:RGBA(var(--bs-dark-rgb),var(--bs-link-underline-opacity,1))!important;text-decoration-color:RGBA(var(--bs-dark-rgb),var(--bs-link-underline-opacity,1))!important}.link-dark:focus,.link-dark:hover{color:#2e3539!important;color:RGBA(46,53,57,var(--bs-link-opacity,1))!important;-webkit-text-decoration-color:#2e3539!important;text-decoration-color:#2e3539!important;-webkit-text-decoration-color:RGBA(46,53,57,var(--bs-link-underline-opacity,1))!important;text-decoration-color:RGBA(46,53,57,var(--bs-link-underline-opacity,1))!important}.link-light{color:#9f9f9f!important;color:RGBA(var(--bs-light-rgb),var(--bs-link-opacity,1))!important;-webkit-text-decoration-color:#9f9f9f!important;text-decoration-color:#9f9f9f!important;-webkit-text-decoration-color:RGBA(var(--bs-light-rgb),var(--bs-link-underline-opacity,1))!important;text-decoration-color:RGBA(var(--bs-light-rgb),var(--bs-link-underline-opacity,1))!important}.link-light:focus,.link-light:hover{color:#b2b2b2!important;color:RGBA(178,178,178,var(--bs-link-opacity,1))!important;-webkit-text-decoration-color:#b2b2b2!important;text-decoration-color:#b2b2b2!important;-webkit-text-decoration-color:RGBA(178,178,178,var(--bs-link-underline-opacity,1))!important;text-decoration-color:RGBA(178,178,178,var(--bs-link-underline-opacity,1))!important}.link-body-emphasis{color:#000!important;color:RGBA(var(--bs-emphasis-color-rgb),var(--bs-link-opacity,1))!important;-webkit-text-decoration-color:#000!important;text-decoration-color:#000!important;-webkit-text-decoration-color:RGBA(var(--bs-emphasis-color-rgb),var(--bs-link-underline-opacity,1))!important;text-decoration-color:RGBA(var(--bs-emphasis-color-rgb),var(--bs-link-underline-opacity,1))!important}.link-body-emphasis:focus,.link-body-emphasis:hover{color:rgba(0,0,0,.75)!important;color:RGBA(var(--bs-emphasis-color-rgb),var(--bs-link-opacity,.75))!important;-webkit-text-decoration-color:rgba(0,0,0,.75)!important;text-decoration-color:rgba(0,0,0,.75)!important;-webkit-text-decoration-color:RGBA(var(--bs-emphasis-color-rgb),var(--bs-link-underline-opacity,.75))!important;text-decoration-color:RGBA(var(--bs-emphasis-color-rgb),var(--bs-link-underline-opacity,.75))!important}.focus-ring:focus{box-shadow:0 0 0 .25rem rgba(13,110,253,.25);box-shadow:var(--bs-focus-ring-x,0) var(--bs-focus-ring-y,0) var(--bs-focus-ring-blur,0) var(--bs-focus-ring-width) var(--bs-focus-ring-color);outline:0}.icon-link{align-items:center;-webkit-backface-visibility:hidden;backface-visibility:hidden;display:inline-flex;gap:.375rem;-webkit-text-decoration-color:rgba(13,110,253,.5);text-decoration-color:rgba(13,110,253,.5);-webkit-text-decoration-color:rgba(var(--bs-link-color-rgb),var(--bs-link-opacity,.5));text-decoration-color:rgba(var(--bs-link-color-rgb),var(--bs-link-opacity,.5));text-underline-offset:.25em}.icon-link>.bi{fill:currentcolor;flex-shrink:0;height:1em;transition:transform .2s ease-in-out;width:1em}@media (prefers-reduced-motion:reduce){.icon-link>.bi{transition:none}}.icon-link-hover:focus-visible>.bi,.icon-link-hover:hover>.bi{transform:translate3d(.25em,0,0);transform:var(--bs-icon-link-transform,translate3d(.25em,0,0))}.ratio{position:relative;width:100%}.ratio:before{content:"";display:block;padding-top:var(--bs-aspect-ratio)}.ratio>*{height:100%;left:0;position:absolute;top:0;width:100%}.ratio-1x1{--bs-aspect-ratio:100%}.ratio-4x3{--bs-aspect-ratio:75%}.ratio-16x9{--bs-aspect-ratio:56.25%}.ratio-21x9{--bs-aspect-ratio:42.85714%}.fixed-top{top:0}.fixed-bottom,.fixed-top{left:0;position:fixed;right:0;z-index:1030}.fixed-bottom{bottom:0}.sticky-top{top:0}.sticky-bottom,.sticky-top{position:-webkit-sticky;position:sticky;z-index:1020}.sticky-bottom{bottom:0}@media (min-width:576px){.sticky-sm-top{top:0}.sticky-sm-bottom,.sticky-sm-top{position:-webkit-sticky;position:sticky;z-index:1020}.sticky-sm-bottom{bottom:0}}@media (min-width:768px){.sticky-md-top{top:0}.sticky-md-bottom,.sticky-md-top{position:-webkit-sticky;position:sticky;z-index:1020}.sticky-md-bottom{bottom:0}}@media (min-width:992px){.sticky-lg-top{top:0}.sticky-lg-bottom,.sticky-lg-top{position:-webkit-sticky;position:sticky;z-index:1020}.sticky-lg-bottom{bottom:0}}@media (min-width:1200px){.sticky-xl-top{top:0}.sticky-xl-bottom,.sticky-xl-top{position:-webkit-sticky;position:sticky;z-index:1020}.sticky-xl-bottom{bottom:0}}@media (min-width:1400px){.sticky-xxl-top{top:0}.sticky-xxl-bottom,.sticky-xxl-top{position:-webkit-sticky;position:sticky;z-index:1020}.sticky-xxl-bottom{bottom:0}}.hstack{align-items:center;flex-direction:row}.hstack,.vstack{align-self:stretch;display:flex}.vstack{flex:1 1 auto;flex-direction:column}.visually-hidden,.visually-hidden-focusable:not(:focus):not(:focus-within){clip:rect(0,0,0,0)!important;border:0!important;height:1px!important;margin:-1px!important;overflow:hidden!important;padding:0!important;white-space:nowrap!important;width:1px!important}.visually-hidden-focusable:not(:focus):not(:focus-within):not(caption),.visually-hidden:not(caption){position:absolute!important}.visually-hidden *,.visually-hidden-focusable:not(:focus):not(:focus-within) *{overflow:hidden!important}.stretched-link:after{bottom:0;content:"";left:0;position:absolute;right:0;top:0;z-index:1}.text-truncate{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.vr{align-self:stretch;background-color:currentcolor;display:inline-block;min-height:1em;opacity:.25;width:1px;width:var(--bs-border-width)}.align-baseline{vertical-align:baseline!important}.align-top{vertical-align:top!important}.align-middle{vertical-align:middle!important}.align-bottom{vertical-align:bottom!important}.align-text-bottom{vertical-align:text-bottom!important}.align-text-top{vertical-align:text-top!important}.float-start{float:left!important}.float-end{float:right!important}.float-none{float:none!important}.object-fit-contain{object-fit:contain!important}.object-fit-cover{object-fit:cover!important}.object-fit-fill{object-fit:fill!important}.object-fit-scale{object-fit:scale-down!important}.object-fit-none{object-fit:none!important}.opacity-0{opacity:0!important}.opacity-25{opacity:.25!important}.opacity-50{opacity:.5!important}.opacity-75{opacity:.75!important}.opacity-100{opacity:1!important}.overflow-auto{overflow:auto!important}.overflow-hidden{overflow:hidden!important}.overflow-visible{overflow:visible!important}.overflow-scroll{overflow:scroll!important}.overflow-x-auto{overflow-x:auto!important}.overflow-x-hidden{overflow-x:hidden!important}.overflow-x-visible{overflow-x:visible!important}.overflow-x-scroll{overflow-x:scroll!important}.overflow-y-auto{overflow-y:auto!important}.overflow-y-hidden{overflow-y:hidden!important}.overflow-y-visible{overflow-y:visible!important}.overflow-y-scroll{overflow-y:scroll!important}.d-inline{display:inline!important}.d-inline-block{display:inline-block!important}.d-block{display:block!important}.d-grid{display:grid!important}.d-inline-grid{display:inline-grid!important}.d-table{display:table!important}.d-table-row{display:table-row!important}.d-table-cell{display:table-cell!important}.d-flex{display:flex!important}.d-inline-flex{display:inline-flex!important}.d-none{display:none!important}.shadow{box-shadow:0 .5rem 1rem rgba(0,0,0,.15)!important;box-shadow:var(--bs-box-shadow)!important}.shadow-sm{box-shadow:0 .125rem .25rem rgba(0,0,0,.075)!important;box-shadow:var(--bs-box-shadow-sm)!important}.shadow-lg{box-shadow:0 1rem 3rem rgba(0,0,0,.175)!important;box-shadow:var(--bs-box-shadow-lg)!important}.shadow-none{box-shadow:none!important}.focus-ring-primary{--bs-focus-ring-color:rgba(var(--bs-primary-rgb),var(--bs-focus-ring-opacity))}.focus-ring-secondary{--bs-focus-ring-color:rgba(var(--bs-secondary-rgb),var(--bs-focus-ring-opacity))}.focus-ring-success{--bs-focus-ring-color:rgba(var(--bs-success-rgb),var(--bs-focus-ring-opacity))}.focus-ring-warning{--bs-focus-ring-color:rgba(var(--bs-warning-rgb),var(--bs-focus-ring-opacity))}.focus-ring-danger{--bs-focus-ring-color:rgba(var(--bs-danger-rgb),var(--bs-focus-ring-opacity))}.focus-ring-dark{--bs-focus-ring-color:rgba(var(--bs-dark-rgb),var(--bs-focus-ring-opacity))}.focus-ring-light{--bs-focus-ring-color:rgba(var(--bs-light-rgb),var(--bs-focus-ring-opacity))}.position-static{position:static!important}.position-relative{position:relative!important}.position-absolute{position:absolute!important}.position-fixed{position:fixed!important}.position-sticky{position:-webkit-sticky!important;position:sticky!important}.top-0{top:0!important}.top-50{top:50%!important}.top-100{top:100%!important}.bottom-0{bottom:0!important}.bottom-50{bottom:50%!important}.bottom-100{bottom:100%!important}.start-0{left:0!important}.start-50{left:50%!important}.start-100{left:100%!important}.end-0{right:0!important}.end-50{right:50%!important}.end-100{right:100%!important}.translate-middle{transform:translate(-50%,-50%)!important}.translate-middle-x{transform:translateX(-50%)!important}.translate-middle-y{transform:translateY(-50%)!important}.border{border:1px solid #dee2e6!important;border:var(--bs-border-width) var(--bs-border-style) var(--bs-border-color)!important}.border-0{border:0!important}.border-top{border-top:1px solid #dee2e6!important;border-top:var(--bs-border-width) var(--bs-border-style) var(--bs-border-color)!important}.border-top-0{border-top:0!important}.border-end{border-right:1px solid #dee2e6!important;border-right:var(--bs-border-width) var(--bs-border-style) var(--bs-border-color)!important}.border-end-0{border-right:0!important}.border-bottom{border-bottom:1px solid #dee2e6!important;border-bottom:var(--bs-border-width) var(--bs-border-style) var(--bs-border-color)!important}.border-bottom-0{border-bottom:0!important}.border-start{border-left:1px solid #dee2e6!important;border-left:var(--bs-border-width) var(--bs-border-style) var(--bs-border-color)!important}.border-start-0{border-left:0!important}.border-primary{--bs-border-opacity:1;border-color:rgba(var(--bs-primary-rgb),var(--bs-border-opacity))!important}.border-secondary{--bs-border-opacity:1;border-color:rgba(var(--bs-secondary-rgb),var(--bs-border-opacity))!important}.border-success{--bs-border-opacity:1;border-color:rgba(var(--bs-success-rgb),var(--bs-border-opacity))!important}.border-warning{--bs-border-opacity:1;border-color:rgba(var(--bs-warning-rgb),var(--bs-border-opacity))!important}.border-danger{--bs-border-opacity:1;border-color:rgba(var(--bs-danger-rgb),var(--bs-border-opacity))!important}.border-dark{--bs-border-opacity:1;border-color:rgba(var(--bs-dark-rgb),var(--bs-border-opacity))!important}.border-light{--bs-border-opacity:1;border-color:rgba(var(--bs-light-rgb),var(--bs-border-opacity))!important}.border-black{--bs-border-opacity:1;border-color:rgba(var(--bs-black-rgb),var(--bs-border-opacity))!important}.border-white{--bs-border-opacity:1;border-color:rgba(var(--bs-white-rgb),var(--bs-border-opacity))!important}.border-primary-subtle{border-color:#9ec5fe!important;border-color:var(--bs-primary-border-subtle)!important}.border-secondary-subtle{border-color:#c4c8cb!important;border-color:var(--bs-secondary-border-subtle)!important}.border-success-subtle{border-color:#a3cfbb!important;border-color:var(--bs-success-border-subtle)!important}.border-info-subtle{border-color:#9eeaf9!important;border-color:var(--bs-info-border-subtle)!important}.border-warning-subtle{border-color:#ffe69c!important;border-color:var(--bs-warning-border-subtle)!important}.border-danger-subtle{border-color:#f1aeb5!important;border-color:var(--bs-danger-border-subtle)!important}.border-light-subtle{border-color:#e9ecef!important;border-color:var(--bs-light-border-subtle)!important}.border-dark-subtle{border-color:#adb5bd!important;border-color:var(--bs-dark-border-subtle)!important}.border-1{border-width:1px!important}.border-2{border-width:2px!important}.border-3{border-width:3px!important}.border-4{border-width:4px!important}.border-5{border-width:5px!important}.border-opacity-10{--bs-border-opacity:.1}.border-opacity-25{--bs-border-opacity:.25}.border-opacity-50{--bs-border-opacity:.5}.border-opacity-75{--bs-border-opacity:.75}.border-opacity-100{--bs-border-opacity:1}.w-25{width:25%!important}.w-50{width:50%!important}.w-75{width:75%!important}.w-100{width:100%!important}.w-auto{width:auto!important}.mw-100{max-width:100%!important}.vw-100{width:100vw!important}.min-vw-100{min-width:100vw!important}.h-25{height:25%!important}.h-50{height:50%!important}.h-75{height:75%!important}.h-100{height:100%!important}.h-auto{height:auto!important}.mh-100{max-height:100%!important}.vh-100{height:100vh!important}.min-vh-100{min-height:100vh!important}.flex-fill{flex:1 1 auto!important}.flex-row{flex-direction:row!important}.flex-column{flex-direction:column!important}.flex-row-reverse{flex-direction:row-reverse!important}.flex-column-reverse{flex-direction:column-reverse!important}.flex-grow-0{flex-grow:0!important}.flex-grow-1{flex-grow:1!important}.flex-shrink-0{flex-shrink:0!important}.flex-shrink-1{flex-shrink:1!important}.flex-wrap{flex-wrap:wrap!important}.flex-nowrap{flex-wrap:nowrap!important}.flex-wrap-reverse{flex-wrap:wrap-reverse!important}.justify-content-start{justify-content:flex-start!important}.justify-content-end{justify-content:flex-end!important}.justify-content-center{justify-content:center!important}.justify-content-between{justify-content:space-between!important}.justify-content-around{justify-content:space-around!important}.justify-content-evenly{justify-content:space-evenly!important}.align-items-start{align-items:flex-start!important}.align-items-end{align-items:flex-end!important}.align-items-center{align-items:center!important}.align-items-baseline{align-items:baseline!important}.align-items-stretch{align-items:stretch!important}.align-content-start{align-content:flex-start!important}.align-content-end{align-content:flex-end!important}.align-content-center{align-content:center!important}.align-content-between{align-content:space-between!important}.align-content-around{align-content:space-around!important}.align-content-stretch{align-content:stretch!important}.align-self-auto{align-self:auto!important}.align-self-start{align-self:flex-start!important}.align-self-end{align-self:flex-end!important}.align-self-center{align-self:center!important}.align-self-baseline{align-self:baseline!important}.align-self-stretch{align-self:stretch!important}.order-first{order:-1!important}.order-0{order:0!important}.order-1{order:1!important}.order-2{order:2!important}.order-3{order:3!important}.order-4{order:4!important}.order-5{order:5!important}.order-last{order:6!important}.m-0{margin:0!important}.m-1{margin:.25rem!important}.m-2{margin:.5rem!important}.m-3{margin:1rem!important}.m-4{margin:1.5rem!important}.m-5{margin:3rem!important}.m-auto{margin:auto!important}.mx-0{margin-left:0!important;margin-right:0!important}.mx-1{margin-left:.25rem!important;margin-right:.25rem!important}.mx-2{margin-left:.5rem!important;margin-right:.5rem!important}.mx-3{margin-left:1rem!important;margin-right:1rem!important}.mx-4{margin-left:1.5rem!important;margin-right:1.5rem!important}.mx-5{margin-left:3rem!important;margin-right:3rem!important}.mx-auto{margin-left:auto!important;margin-right:auto!important}.my-0{margin-bottom:0!important;margin-top:0!important}.my-1{margin-bottom:.25rem!important;margin-top:.25rem!important}.my-2{margin-bottom:.5rem!important;margin-top:.5rem!important}.my-3{margin-bottom:1rem!important;margin-top:1rem!important}.my-4{margin-bottom:1.5rem!important;margin-top:1.5rem!important}.my-5{margin-bottom:3rem!important;margin-top:3rem!important}.my-auto{margin-bottom:auto!important;margin-top:auto!important}.mt-0{margin-top:0!important}.mt-1{margin-top:.25rem!important}.mt-2{margin-top:.5rem!important}.mt-3{margin-top:1rem!important}.mt-4{margin-top:1.5rem!important}.mt-5{margin-top:3rem!important}.mt-auto{margin-top:auto!important}.me-0{margin-right:0!important}.me-1{margin-right:.25rem!important}.me-2{margin-right:.5rem!important}.me-3{margin-right:1rem!important}.me-4{margin-right:1.5rem!important}.me-5{margin-right:3rem!important}.me-auto{margin-right:auto!important}.mb-0{margin-bottom:0!important}.mb-1{margin-bottom:.25rem!important}.mb-2{margin-bottom:.5rem!important}.mb-3{margin-bottom:1rem!important}.mb-4{margin-bottom:1.5rem!important}.mb-5{margin-bottom:3rem!important}.mb-auto{margin-bottom:auto!important}.ms-0{margin-left:0!important}.ms-1{margin-left:.25rem!important}.ms-2{margin-left:.5rem!important}.ms-3{margin-left:1rem!important}.ms-4{margin-left:1.5rem!important}.ms-5{margin-left:3rem!important}.ms-auto{margin-left:auto!important}.p-0{padding:0!important}.p-1{padding:.25rem!important}.p-2{padding:.5rem!important}.p-3{padding:1rem!important}.p-4{padding:1.5rem!important}.p-5{padding:3rem!important}.px-0{padding-left:0!important;padding-right:0!important}.px-1{padding-left:.25rem!important;padding-right:.25rem!important}.px-2{padding-left:.5rem!important;padding-right:.5rem!important}.px-3{padding-left:1rem!important;padding-right:1rem!important}.px-4{padding-left:1.5rem!important;padding-right:1.5rem!important}.px-5{padding-left:3rem!important;padding-right:3rem!important}.py-0{padding-bottom:0!important;padding-top:0!important}.py-1{padding-bottom:.25rem!important;padding-top:.25rem!important}.py-2{padding-bottom:.5rem!important;padding-top:.5rem!important}.py-3{padding-bottom:1rem!important;padding-top:1rem!important}.py-4{padding-bottom:1.5rem!important;padding-top:1.5rem!important}.py-5{padding-bottom:3rem!important;padding-top:3rem!important}.pt-0{padding-top:0!important}.pt-1{padding-top:.25rem!important}.pt-2{padding-top:.5rem!important}.pt-3{padding-top:1rem!important}.pt-4{padding-top:1.5rem!important}.pt-5{padding-top:3rem!important}.pe-0{padding-right:0!important}.pe-1{padding-right:.25rem!important}.pe-2{padding-right:.5rem!important}.pe-3{padding-right:1rem!important}.pe-4{padding-right:1.5rem!important}.pe-5{padding-right:3rem!important}.pb-0{padding-bottom:0!important}.pb-1{padding-bottom:.25rem!important}.pb-2{padding-bottom:.5rem!important}.pb-3{padding-bottom:1rem!important}.pb-4{padding-bottom:1.5rem!important}.pb-5{padding-bottom:3rem!important}.ps-0{padding-left:0!important}.ps-1{padding-left:.25rem!important}.ps-2{padding-left:.5rem!important}.ps-3{padding-left:1rem!important}.ps-4{padding-left:1.5rem!important}.ps-5{padding-left:3rem!important}.gap-0{gap:0!important}.gap-1{gap:.25rem!important}.gap-2{gap:.5rem!important}.gap-3{gap:1rem!important}.gap-4{gap:1.5rem!important}.gap-5{gap:3rem!important}.row-gap-0{row-gap:0!important}.row-gap-1{row-gap:.25rem!important}.row-gap-2{row-gap:.5rem!important}.row-gap-3{row-gap:1rem!important}.row-gap-4{row-gap:1.5rem!important}.row-gap-5{row-gap:3rem!important}.column-gap-0{column-gap:0!important}.column-gap-1{column-gap:.25rem!important}.column-gap-2{column-gap:.5rem!important}.column-gap-3{column-gap:1rem!important}.column-gap-4{column-gap:1.5rem!important}.column-gap-5{column-gap:3rem!important}.font-monospace{font-family:SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,monospace!important;font-family:var(--bs-font-monospace)!important}.fs-1{font-size:calc(1.375rem + 1.5vw)!important}.fs-2{font-size:calc(1.325rem + .9vw)!important}.fs-3{font-size:calc(1.3rem + .6vw)!important}.fs-4{font-size:calc(1.275rem + .3vw)!important}.fs-5{font-size:1.25rem!important}.fs-6{font-size:1rem!important}.fst-italic{font-style:italic!important}.fst-normal{font-style:normal!important}.fw-lighter{font-weight:lighter!important}.fw-light{font-weight:300!important}.fw-normal{font-weight:400!important}.fw-medium{font-weight:500!important}.fw-semibold{font-weight:600!important}.fw-bold{font-weight:700!important}.fw-bolder{font-weight:bolder!important}.lh-1{line-height:1!important}.lh-sm{line-height:1.25!important}.lh-base{line-height:1.5!important}.lh-lg{line-height:2!important}.text-start{text-align:left!important}.text-end{text-align:right!important}.text-center{text-align:center!important}.text-decoration-none{text-decoration:none!important}.text-decoration-underline{text-decoration:underline!important}.text-decoration-line-through{text-decoration:line-through!important}.text-lowercase{text-transform:lowercase!important}.text-uppercase{text-transform:uppercase!important}.text-capitalize{text-transform:capitalize!important}.text-wrap{white-space:normal!important}.text-nowrap{white-space:nowrap!important}.text-break{word-wrap:break-word!important;word-break:break-word!important}.text-primary{--bs-text-opacity:1;color:rgba(225,186,45,var(--bs-text-opacity))!important;color:rgba(var(--bs-primary-rgb),var(--bs-text-opacity))!important}.text-secondary{--bs-text-opacity:1;color:rgba(248,249,250,var(--bs-text-opacity))!important;color:rgba(var(--bs-secondary-rgb),var(--bs-text-opacity))!important}.text-success{--bs-text-opacity:1;color:rgba(51,219,149,var(--bs-text-opacity))!important;color:rgba(var(--bs-success-rgb),var(--bs-text-opacity))!important}.text-warning{--bs-text-opacity:1;color:rgba(254,142,2,var(--bs-text-opacity))!important;color:rgba(var(--bs-warning-rgb),var(--bs-text-opacity))!important}.text-danger{--bs-text-opacity:1;color:rgba(220,53,69,var(--bs-text-opacity))!important;color:rgba(var(--bs-danger-rgb),var(--bs-text-opacity))!important}.text-dark{--bs-text-opacity:1;color:rgba(58,66,71,var(--bs-text-opacity))!important;color:rgba(var(--bs-dark-rgb),var(--bs-text-opacity))!important}.text-light{--bs-text-opacity:1;color:rgba(159,159,159,var(--bs-text-opacity))!important;color:rgba(var(--bs-light-rgb),var(--bs-text-opacity))!important}.text-black{--bs-text-opacity:1;color:rgba(0,0,0,var(--bs-text-opacity))!important;color:rgba(var(--bs-black-rgb),var(--bs-text-opacity))!important}.text-white{--bs-text-opacity:1;color:rgba(255,255,255,var(--bs-text-opacity))!important;color:rgba(var(--bs-white-rgb),var(--bs-text-opacity))!important}.text-body{--bs-text-opacity:1;color:rgba(58,66,71,var(--bs-text-opacity))!important;color:rgba(var(--bs-body-color-rgb),var(--bs-text-opacity))!important}.text-muted{--bs-text-opacity:1;color:rgba(33,37,41,.75)!important;color:var(--bs-secondary-color)!important}.text-black-50{--bs-text-opacity:1;color:rgba(0,0,0,.5)!important}.text-white-50{--bs-text-opacity:1;color:hsla(0,0%,100%,.5)!important}.text-body-secondary{--bs-text-opacity:1;color:rgba(33,37,41,.75)!important;color:var(--bs-secondary-color)!important}.text-body-tertiary{--bs-text-opacity:1;color:rgba(33,37,41,.5)!important;color:var(--bs-tertiary-color)!important}.text-body-emphasis{--bs-text-opacity:1;color:#000!important;color:var(--bs-emphasis-color)!important}.text-reset{--bs-text-opacity:1;color:inherit!important}.text-opacity-25{--bs-text-opacity:.25}.text-opacity-50{--bs-text-opacity:.5}.text-opacity-75{--bs-text-opacity:.75}.text-opacity-100{--bs-text-opacity:1}.text-primary-emphasis{color:#052c65!important;color:var(--bs-primary-text-emphasis)!important}.text-secondary-emphasis{color:#2b2f32!important;color:var(--bs-secondary-text-emphasis)!important}.text-success-emphasis{color:#0a3622!important;color:var(--bs-success-text-emphasis)!important}.text-info-emphasis{color:#055160!important;color:var(--bs-info-text-emphasis)!important}.text-warning-emphasis{color:#664d03!important;color:var(--bs-warning-text-emphasis)!important}.text-danger-emphasis{color:#58151c!important;color:var(--bs-danger-text-emphasis)!important}.text-light-emphasis{color:#495057!important;color:var(--bs-light-text-emphasis)!important}.text-dark-emphasis{color:#495057!important;color:var(--bs-dark-text-emphasis)!important}.link-opacity-10,.link-opacity-10-hover:hover{--bs-link-opacity:.1}.link-opacity-25,.link-opacity-25-hover:hover{--bs-link-opacity:.25}.link-opacity-50,.link-opacity-50-hover:hover{--bs-link-opacity:.5}.link-opacity-75,.link-opacity-75-hover:hover{--bs-link-opacity:.75}.link-opacity-100,.link-opacity-100-hover:hover{--bs-link-opacity:1}.link-offset-1,.link-offset-1-hover:hover{text-underline-offset:.125em!important}.link-offset-2,.link-offset-2-hover:hover{text-underline-offset:.25em!important}.link-offset-3,.link-offset-3-hover:hover{text-underline-offset:.375em!important}.link-underline-primary{--bs-link-underline-opacity:1;-webkit-text-decoration-color:rgba(225,186,45,var(--bs-link-underline-opacity))!important;text-decoration-color:rgba(225,186,45,var(--bs-link-underline-opacity))!important;-webkit-text-decoration-color:rgba(var(--bs-primary-rgb),var(--bs-link-underline-opacity))!important;text-decoration-color:rgba(var(--bs-primary-rgb),var(--bs-link-underline-opacity))!important}.link-underline-secondary{--bs-link-underline-opacity:1;-webkit-text-decoration-color:rgba(248,249,250,var(--bs-link-underline-opacity))!important;text-decoration-color:rgba(248,249,250,var(--bs-link-underline-opacity))!important;-webkit-text-decoration-color:rgba(var(--bs-secondary-rgb),var(--bs-link-underline-opacity))!important;text-decoration-color:rgba(var(--bs-secondary-rgb),var(--bs-link-underline-opacity))!important}.link-underline-success{--bs-link-underline-opacity:1;-webkit-text-decoration-color:rgba(51,219,149,var(--bs-link-underline-opacity))!important;text-decoration-color:rgba(51,219,149,var(--bs-link-underline-opacity))!important;-webkit-text-decoration-color:rgba(var(--bs-success-rgb),var(--bs-link-underline-opacity))!important;text-decoration-color:rgba(var(--bs-success-rgb),var(--bs-link-underline-opacity))!important}.link-underline-warning{--bs-link-underline-opacity:1;-webkit-text-decoration-color:rgba(254,142,2,var(--bs-link-underline-opacity))!important;text-decoration-color:rgba(254,142,2,var(--bs-link-underline-opacity))!important;-webkit-text-decoration-color:rgba(var(--bs-warning-rgb),var(--bs-link-underline-opacity))!important;text-decoration-color:rgba(var(--bs-warning-rgb),var(--bs-link-underline-opacity))!important}.link-underline-danger{--bs-link-underline-opacity:1;-webkit-text-decoration-color:rgba(220,53,69,var(--bs-link-underline-opacity))!important;text-decoration-color:rgba(220,53,69,var(--bs-link-underline-opacity))!important;-webkit-text-decoration-color:rgba(var(--bs-danger-rgb),var(--bs-link-underline-opacity))!important;text-decoration-color:rgba(var(--bs-danger-rgb),var(--bs-link-underline-opacity))!important}.link-underline-dark{--bs-link-underline-opacity:1;-webkit-text-decoration-color:rgba(58,66,71,var(--bs-link-underline-opacity))!important;text-decoration-color:rgba(58,66,71,var(--bs-link-underline-opacity))!important;-webkit-text-decoration-color:rgba(var(--bs-dark-rgb),var(--bs-link-underline-opacity))!important;text-decoration-color:rgba(var(--bs-dark-rgb),var(--bs-link-underline-opacity))!important}.link-underline-light{--bs-link-underline-opacity:1;-webkit-text-decoration-color:rgba(159,159,159,var(--bs-link-underline-opacity))!important;text-decoration-color:rgba(159,159,159,var(--bs-link-underline-opacity))!important;-webkit-text-decoration-color:rgba(var(--bs-light-rgb),var(--bs-link-underline-opacity))!important;text-decoration-color:rgba(var(--bs-light-rgb),var(--bs-link-underline-opacity))!important}.link-underline{--bs-link-underline-opacity:1;-webkit-text-decoration-color:#0d6efd!important;text-decoration-color:#0d6efd!important;-webkit-text-decoration-color:rgba(var(--bs-link-color-rgb),var(--bs-link-underline-opacity,1))!important;text-decoration-color:rgba(var(--bs-link-color-rgb),var(--bs-link-underline-opacity,1))!important}.link-underline-opacity-0,.link-underline-opacity-0-hover:hover{--bs-link-underline-opacity:0}.link-underline-opacity-10,.link-underline-opacity-10-hover:hover{--bs-link-underline-opacity:.1}.link-underline-opacity-25,.link-underline-opacity-25-hover:hover{--bs-link-underline-opacity:.25}.link-underline-opacity-50,.link-underline-opacity-50-hover:hover{--bs-link-underline-opacity:.5}.link-underline-opacity-75,.link-underline-opacity-75-hover:hover{--bs-link-underline-opacity:.75}.link-underline-opacity-100,.link-underline-opacity-100-hover:hover{--bs-link-underline-opacity:1}.bg-primary{--bs-bg-opacity:1;background-color:rgba(225,186,45,var(--bs-bg-opacity))!important;background-color:rgba(var(--bs-primary-rgb),var(--bs-bg-opacity))!important}.bg-secondary{--bs-bg-opacity:1;background-color:rgba(248,249,250,var(--bs-bg-opacity))!important;background-color:rgba(var(--bs-secondary-rgb),var(--bs-bg-opacity))!important}.bg-success{--bs-bg-opacity:1;background-color:rgba(51,219,149,var(--bs-bg-opacity))!important;background-color:rgba(var(--bs-success-rgb),var(--bs-bg-opacity))!important}.bg-warning{--bs-bg-opacity:1;background-color:rgba(254,142,2,var(--bs-bg-opacity))!important;background-color:rgba(var(--bs-warning-rgb),var(--bs-bg-opacity))!important}.bg-danger{--bs-bg-opacity:1;background-color:rgba(220,53,69,var(--bs-bg-opacity))!important;background-color:rgba(var(--bs-danger-rgb),var(--bs-bg-opacity))!important}.bg-dark{--bs-bg-opacity:1;background-color:rgba(58,66,71,var(--bs-bg-opacity))!important;background-color:rgba(var(--bs-dark-rgb),var(--bs-bg-opacity))!important}.bg-light{--bs-bg-opacity:1;background-color:rgba(159,159,159,var(--bs-bg-opacity))!important;background-color:rgba(var(--bs-light-rgb),var(--bs-bg-opacity))!important}.bg-black{--bs-bg-opacity:1;background-color:rgba(0,0,0,var(--bs-bg-opacity))!important;background-color:rgba(var(--bs-black-rgb),var(--bs-bg-opacity))!important}.bg-white{--bs-bg-opacity:1;background-color:rgba(255,255,255,var(--bs-bg-opacity))!important;background-color:rgba(var(--bs-white-rgb),var(--bs-bg-opacity))!important}.bg-body{--bs-bg-opacity:1;background-color:rgba(255,255,255,var(--bs-bg-opacity))!important;background-color:rgba(var(--bs-body-bg-rgb),var(--bs-bg-opacity))!important}.bg-transparent{--bs-bg-opacity:1;background-color:transparent!important}.bg-body-secondary{--bs-bg-opacity:1;background-color:rgba(233,236,239,var(--bs-bg-opacity))!important;background-color:rgba(var(--bs-secondary-bg-rgb),var(--bs-bg-opacity))!important}.bg-body-tertiary{--bs-bg-opacity:1;background-color:rgba(255,255,255,var(--bs-bg-opacity))!important;background-color:rgba(var(--bs-tertiary-bg-rgb),var(--bs-bg-opacity))!important}.bg-opacity-10{--bs-bg-opacity:.1}.bg-opacity-25{--bs-bg-opacity:.25}.bg-opacity-50{--bs-bg-opacity:.5}.bg-opacity-75{--bs-bg-opacity:.75}.bg-opacity-100{--bs-bg-opacity:1}.bg-primary-subtle{background-color:#cfe2ff!important;background-color:var(--bs-primary-bg-subtle)!important}.bg-secondary-subtle{background-color:#e2e3e5!important;background-color:var(--bs-secondary-bg-subtle)!important}.bg-success-subtle{background-color:#d1e7dd!important;background-color:var(--bs-success-bg-subtle)!important}.bg-info-subtle{background-color:#cff4fc!important;background-color:var(--bs-info-bg-subtle)!important}.bg-warning-subtle{background-color:#fff3cd!important;background-color:var(--bs-warning-bg-subtle)!important}.bg-danger-subtle{background-color:#f8d7da!important;background-color:var(--bs-danger-bg-subtle)!important}.bg-light-subtle{background-color:#fcfcfd!important;background-color:var(--bs-light-bg-subtle)!important}.bg-dark-subtle{background-color:#ced4da!important;background-color:var(--bs-dark-bg-subtle)!important}.bg-gradient{background-image:linear-gradient(180deg,hsla(0,0%,100%,.15),hsla(0,0%,100%,0))!important;background-image:var(--bs-gradient)!important}.user-select-all{-webkit-user-select:all!important;user-select:all!important}.user-select-auto{-webkit-user-select:auto!important;user-select:auto!important}.user-select-none{-webkit-user-select:none!important;user-select:none!important}.pe-none{pointer-events:none!important}.pe-auto{pointer-events:auto!important}.rounded{border-radius:1.25rem!important;border-radius:var(--bs-border-radius)!important}.rounded-0{border-radius:0!important}.rounded-1{border-radius:.25rem!important;border-radius:var(--bs-border-radius-sm)!important}.rounded-2{border-radius:1.25rem!important;border-radius:var(--bs-border-radius)!important}.rounded-3{border-radius:.5rem!important;border-radius:var(--bs-border-radius-lg)!important}.rounded-4{border-radius:1rem!important;border-radius:var(--bs-border-radius-xl)!important}.rounded-5{border-radius:2rem!important;border-radius:var(--bs-border-radius-xxl)!important}.rounded-circle{border-radius:50%!important}.rounded-pill{border-radius:50rem!important;border-radius:var(--bs-border-radius-pill)!important}.rounded-top{border-top-left-radius:1.25rem!important;border-top-left-radius:var(--bs-border-radius)!important;border-top-right-radius:1.25rem!important;border-top-right-radius:var(--bs-border-radius)!important}.rounded-top-0{border-top-left-radius:0!important;border-top-right-radius:0!important}.rounded-top-1{border-top-left-radius:.25rem!important;border-top-left-radius:var(--bs-border-radius-sm)!important;border-top-right-radius:.25rem!important;border-top-right-radius:var(--bs-border-radius-sm)!important}.rounded-top-2{border-top-left-radius:1.25rem!important;border-top-left-radius:var(--bs-border-radius)!important;border-top-right-radius:1.25rem!important;border-top-right-radius:var(--bs-border-radius)!important}.rounded-top-3{border-top-left-radius:.5rem!important;border-top-left-radius:var(--bs-border-radius-lg)!important;border-top-right-radius:.5rem!important;border-top-right-radius:var(--bs-border-radius-lg)!important}.rounded-top-4{border-top-left-radius:1rem!important;border-top-left-radius:var(--bs-border-radius-xl)!important;border-top-right-radius:1rem!important;border-top-right-radius:var(--bs-border-radius-xl)!important}.rounded-top-5{border-top-left-radius:2rem!important;border-top-left-radius:var(--bs-border-radius-xxl)!important;border-top-right-radius:2rem!important;border-top-right-radius:var(--bs-border-radius-xxl)!important}.rounded-top-circle{border-top-left-radius:50%!important;border-top-right-radius:50%!important}.rounded-top-pill{border-top-left-radius:50rem!important;border-top-left-radius:var(--bs-border-radius-pill)!important;border-top-right-radius:50rem!important;border-top-right-radius:var(--bs-border-radius-pill)!important}.rounded-end{border-bottom-right-radius:1.25rem!important;border-bottom-right-radius:var(--bs-border-radius)!important;border-top-right-radius:1.25rem!important;border-top-right-radius:var(--bs-border-radius)!important}.rounded-end-0{border-bottom-right-radius:0!important;border-top-right-radius:0!important}.rounded-end-1{border-bottom-right-radius:.25rem!important;border-bottom-right-radius:var(--bs-border-radius-sm)!important;border-top-right-radius:.25rem!important;border-top-right-radius:var(--bs-border-radius-sm)!important}.rounded-end-2{border-bottom-right-radius:1.25rem!important;border-bottom-right-radius:var(--bs-border-radius)!important;border-top-right-radius:1.25rem!important;border-top-right-radius:var(--bs-border-radius)!important}.rounded-end-3{border-bottom-right-radius:.5rem!important;border-bottom-right-radius:var(--bs-border-radius-lg)!important;border-top-right-radius:.5rem!important;border-top-right-radius:var(--bs-border-radius-lg)!important}.rounded-end-4{border-bottom-right-radius:1rem!important;border-bottom-right-radius:var(--bs-border-radius-xl)!important;border-top-right-radius:1rem!important;border-top-right-radius:var(--bs-border-radius-xl)!important}.rounded-end-5{border-bottom-right-radius:2rem!important;border-bottom-right-radius:var(--bs-border-radius-xxl)!important;border-top-right-radius:2rem!important;border-top-right-radius:var(--bs-border-radius-xxl)!important}.rounded-end-circle{border-bottom-right-radius:50%!important;border-top-right-radius:50%!important}.rounded-end-pill{border-bottom-right-radius:50rem!important;border-bottom-right-radius:var(--bs-border-radius-pill)!important;border-top-right-radius:50rem!important;border-top-right-radius:var(--bs-border-radius-pill)!important}.rounded-bottom{border-bottom-left-radius:1.25rem!important;border-bottom-left-radius:var(--bs-border-radius)!important;border-bottom-right-radius:1.25rem!important;border-bottom-right-radius:var(--bs-border-radius)!important}.rounded-bottom-0{border-bottom-left-radius:0!important;border-bottom-right-radius:0!important}.rounded-bottom-1{border-bottom-left-radius:.25rem!important;border-bottom-left-radius:var(--bs-border-radius-sm)!important;border-bottom-right-radius:.25rem!important;border-bottom-right-radius:var(--bs-border-radius-sm)!important}.rounded-bottom-2{border-bottom-left-radius:1.25rem!important;border-bottom-left-radius:var(--bs-border-radius)!important;border-bottom-right-radius:1.25rem!important;border-bottom-right-radius:var(--bs-border-radius)!important}.rounded-bottom-3{border-bottom-left-radius:.5rem!important;border-bottom-left-radius:var(--bs-border-radius-lg)!important;border-bottom-right-radius:.5rem!important;border-bottom-right-radius:var(--bs-border-radius-lg)!important}.rounded-bottom-4{border-bottom-left-radius:1rem!important;border-bottom-left-radius:var(--bs-border-radius-xl)!important;border-bottom-right-radius:1rem!important;border-bottom-right-radius:var(--bs-border-radius-xl)!important}.rounded-bottom-5{border-bottom-left-radius:2rem!important;border-bottom-left-radius:var(--bs-border-radius-xxl)!important;border-bottom-right-radius:2rem!important;border-bottom-right-radius:var(--bs-border-radius-xxl)!important}.rounded-bottom-circle{border-bottom-left-radius:50%!important;border-bottom-right-radius:50%!important}.rounded-bottom-pill{border-bottom-left-radius:50rem!important;border-bottom-left-radius:var(--bs-border-radius-pill)!important;border-bottom-right-radius:50rem!important;border-bottom-right-radius:var(--bs-border-radius-pill)!important}.rounded-start{border-bottom-left-radius:1.25rem!important;border-bottom-left-radius:var(--bs-border-radius)!important;border-top-left-radius:1.25rem!important;border-top-left-radius:var(--bs-border-radius)!important}.rounded-start-0{border-bottom-left-radius:0!important;border-top-left-radius:0!important}.rounded-start-1{border-bottom-left-radius:.25rem!important;border-bottom-left-radius:var(--bs-border-radius-sm)!important;border-top-left-radius:.25rem!important;border-top-left-radius:var(--bs-border-radius-sm)!important}.rounded-start-2{border-bottom-left-radius:1.25rem!important;border-bottom-left-radius:var(--bs-border-radius)!important;border-top-left-radius:1.25rem!important;border-top-left-radius:var(--bs-border-radius)!important}.rounded-start-3{border-bottom-left-radius:.5rem!important;border-bottom-left-radius:var(--bs-border-radius-lg)!important;border-top-left-radius:.5rem!important;border-top-left-radius:var(--bs-border-radius-lg)!important}.rounded-start-4{border-bottom-left-radius:1rem!important;border-bottom-left-radius:var(--bs-border-radius-xl)!important;border-top-left-radius:1rem!important;border-top-left-radius:var(--bs-border-radius-xl)!important}.rounded-start-5{border-bottom-left-radius:2rem!important;border-bottom-left-radius:var(--bs-border-radius-xxl)!important;border-top-left-radius:2rem!important;border-top-left-radius:var(--bs-border-radius-xxl)!important}.rounded-start-circle{border-bottom-left-radius:50%!important;border-top-left-radius:50%!important}.rounded-start-pill{border-bottom-left-radius:50rem!important;border-bottom-left-radius:var(--bs-border-radius-pill)!important;border-top-left-radius:50rem!important;border-top-left-radius:var(--bs-border-radius-pill)!important}.visible{visibility:visible!important}.invisible{visibility:hidden!important}.z-n1{z-index:-1!important}.z-0{z-index:0!important}.z-1{z-index:1!important}.z-2{z-index:2!important}.z-3{z-index:3!important}@media (min-width:576px){.float-sm-start{float:left!important}.float-sm-end{float:right!important}.float-sm-none{float:none!important}.object-fit-sm-contain{object-fit:contain!important}.object-fit-sm-cover{object-fit:cover!important}.object-fit-sm-fill{object-fit:fill!important}.object-fit-sm-scale{object-fit:scale-down!important}.object-fit-sm-none{object-fit:none!important}.d-sm-inline{display:inline!important}.d-sm-inline-block{display:inline-block!important}.d-sm-block{display:block!important}.d-sm-grid{display:grid!important}.d-sm-inline-grid{display:inline-grid!important}.d-sm-table{display:table!important}.d-sm-table-row{display:table-row!important}.d-sm-table-cell{display:table-cell!important}.d-sm-flex{display:flex!important}.d-sm-inline-flex{display:inline-flex!important}.d-sm-none{display:none!important}.flex-sm-fill{flex:1 1 auto!important}.flex-sm-row{flex-direction:row!important}.flex-sm-column{flex-direction:column!important}.flex-sm-row-reverse{flex-direction:row-reverse!important}.flex-sm-column-reverse{flex-direction:column-reverse!important}.flex-sm-grow-0{flex-grow:0!important}.flex-sm-grow-1{flex-grow:1!important}.flex-sm-shrink-0{flex-shrink:0!important}.flex-sm-shrink-1{flex-shrink:1!important}.flex-sm-wrap{flex-wrap:wrap!important}.flex-sm-nowrap{flex-wrap:nowrap!important}.flex-sm-wrap-reverse{flex-wrap:wrap-reverse!important}.justify-content-sm-start{justify-content:flex-start!important}.justify-content-sm-end{justify-content:flex-end!important}.justify-content-sm-center{justify-content:center!important}.justify-content-sm-between{justify-content:space-between!important}.justify-content-sm-around{justify-content:space-around!important}.justify-content-sm-evenly{justify-content:space-evenly!important}.align-items-sm-start{align-items:flex-start!important}.align-items-sm-end{align-items:flex-end!important}.align-items-sm-center{align-items:center!important}.align-items-sm-baseline{align-items:baseline!important}.align-items-sm-stretch{align-items:stretch!important}.align-content-sm-start{align-content:flex-start!important}.align-content-sm-end{align-content:flex-end!important}.align-content-sm-center{align-content:center!important}.align-content-sm-between{align-content:space-between!important}.align-content-sm-around{align-content:space-around!important}.align-content-sm-stretch{align-content:stretch!important}.align-self-sm-auto{align-self:auto!important}.align-self-sm-start{align-self:flex-start!important}.align-self-sm-end{align-self:flex-end!important}.align-self-sm-center{align-self:center!important}.align-self-sm-baseline{align-self:baseline!important}.align-self-sm-stretch{align-self:stretch!important}.order-sm-first{order:-1!important}.order-sm-0{order:0!important}.order-sm-1{order:1!important}.order-sm-2{order:2!important}.order-sm-3{order:3!important}.order-sm-4{order:4!important}.order-sm-5{order:5!important}.order-sm-last{order:6!important}.m-sm-0{margin:0!important}.m-sm-1{margin:.25rem!important}.m-sm-2{margin:.5rem!important}.m-sm-3{margin:1rem!important}.m-sm-4{margin:1.5rem!important}.m-sm-5{margin:3rem!important}.m-sm-auto{margin:auto!important}.mx-sm-0{margin-left:0!important;margin-right:0!important}.mx-sm-1{margin-left:.25rem!important;margin-right:.25rem!important}.mx-sm-2{margin-left:.5rem!important;margin-right:.5rem!important}.mx-sm-3{margin-left:1rem!important;margin-right:1rem!important}.mx-sm-4{margin-left:1.5rem!important;margin-right:1.5rem!important}.mx-sm-5{margin-left:3rem!important;margin-right:3rem!important}.mx-sm-auto{margin-left:auto!important;margin-right:auto!important}.my-sm-0{margin-bottom:0!important;margin-top:0!important}.my-sm-1{margin-bottom:.25rem!important;margin-top:.25rem!important}.my-sm-2{margin-bottom:.5rem!important;margin-top:.5rem!important}.my-sm-3{margin-bottom:1rem!important;margin-top:1rem!important}.my-sm-4{margin-bottom:1.5rem!important;margin-top:1.5rem!important}.my-sm-5{margin-bottom:3rem!important;margin-top:3rem!important}.my-sm-auto{margin-bottom:auto!important;margin-top:auto!important}.mt-sm-0{margin-top:0!important}.mt-sm-1{margin-top:.25rem!important}.mt-sm-2{margin-top:.5rem!important}.mt-sm-3{margin-top:1rem!important}.mt-sm-4{margin-top:1.5rem!important}.mt-sm-5{margin-top:3rem!important}.mt-sm-auto{margin-top:auto!important}.me-sm-0{margin-right:0!important}.me-sm-1{margin-right:.25rem!important}.me-sm-2{margin-right:.5rem!important}.me-sm-3{margin-right:1rem!important}.me-sm-4{margin-right:1.5rem!important}.me-sm-5{margin-right:3rem!important}.me-sm-auto{margin-right:auto!important}.mb-sm-0{margin-bottom:0!important}.mb-sm-1{margin-bottom:.25rem!important}.mb-sm-2{margin-bottom:.5rem!important}.mb-sm-3{margin-bottom:1rem!important}.mb-sm-4{margin-bottom:1.5rem!important}.mb-sm-5{margin-bottom:3rem!important}.mb-sm-auto{margin-bottom:auto!important}.ms-sm-0{margin-left:0!important}.ms-sm-1{margin-left:.25rem!important}.ms-sm-2{margin-left:.5rem!important}.ms-sm-3{margin-left:1rem!important}.ms-sm-4{margin-left:1.5rem!important}.ms-sm-5{margin-left:3rem!important}.ms-sm-auto{margin-left:auto!important}.p-sm-0{padding:0!important}.p-sm-1{padding:.25rem!important}.p-sm-2{padding:.5rem!important}.p-sm-3{padding:1rem!important}.p-sm-4{padding:1.5rem!important}.p-sm-5{padding:3rem!important}.px-sm-0{padding-left:0!important;padding-right:0!important}.px-sm-1{padding-left:.25rem!important;padding-right:.25rem!important}.px-sm-2{padding-left:.5rem!important;padding-right:.5rem!important}.px-sm-3{padding-left:1rem!important;padding-right:1rem!important}.px-sm-4{padding-left:1.5rem!important;padding-right:1.5rem!important}.px-sm-5{padding-left:3rem!important;padding-right:3rem!important}.py-sm-0{padding-bottom:0!important;padding-top:0!important}.py-sm-1{padding-bottom:.25rem!important;padding-top:.25rem!important}.py-sm-2{padding-bottom:.5rem!important;padding-top:.5rem!important}.py-sm-3{padding-bottom:1rem!important;padding-top:1rem!important}.py-sm-4{padding-bottom:1.5rem!important;padding-top:1.5rem!important}.py-sm-5{padding-bottom:3rem!important;padding-top:3rem!important}.pt-sm-0{padding-top:0!important}.pt-sm-1{padding-top:.25rem!important}.pt-sm-2{padding-top:.5rem!important}.pt-sm-3{padding-top:1rem!important}.pt-sm-4{padding-top:1.5rem!important}.pt-sm-5{padding-top:3rem!important}.pe-sm-0{padding-right:0!important}.pe-sm-1{padding-right:.25rem!important}.pe-sm-2{padding-right:.5rem!important}.pe-sm-3{padding-right:1rem!important}.pe-sm-4{padding-right:1.5rem!important}.pe-sm-5{padding-right:3rem!important}.pb-sm-0{padding-bottom:0!important}.pb-sm-1{padding-bottom:.25rem!important}.pb-sm-2{padding-bottom:.5rem!important}.pb-sm-3{padding-bottom:1rem!important}.pb-sm-4{padding-bottom:1.5rem!important}.pb-sm-5{padding-bottom:3rem!important}.ps-sm-0{padding-left:0!important}.ps-sm-1{padding-left:.25rem!important}.ps-sm-2{padding-left:.5rem!important}.ps-sm-3{padding-left:1rem!important}.ps-sm-4{padding-left:1.5rem!important}.ps-sm-5{padding-left:3rem!important}.gap-sm-0{gap:0!important}.gap-sm-1{gap:.25rem!important}.gap-sm-2{gap:.5rem!important}.gap-sm-3{gap:1rem!important}.gap-sm-4{gap:1.5rem!important}.gap-sm-5{gap:3rem!important}.row-gap-sm-0{row-gap:0!important}.row-gap-sm-1{row-gap:.25rem!important}.row-gap-sm-2{row-gap:.5rem!important}.row-gap-sm-3{row-gap:1rem!important}.row-gap-sm-4{row-gap:1.5rem!important}.row-gap-sm-5{row-gap:3rem!important}.column-gap-sm-0{column-gap:0!important}.column-gap-sm-1{column-gap:.25rem!important}.column-gap-sm-2{column-gap:.5rem!important}.column-gap-sm-3{column-gap:1rem!important}.column-gap-sm-4{column-gap:1.5rem!important}.column-gap-sm-5{column-gap:3rem!important}.text-sm-start{text-align:left!important}.text-sm-end{text-align:right!important}.text-sm-center{text-align:center!important}}@media (min-width:768px){.float-md-start{float:left!important}.float-md-end{float:right!important}.float-md-none{float:none!important}.object-fit-md-contain{object-fit:contain!important}.object-fit-md-cover{object-fit:cover!important}.object-fit-md-fill{object-fit:fill!important}.object-fit-md-scale{object-fit:scale-down!important}.object-fit-md-none{object-fit:none!important}.d-md-inline{display:inline!important}.d-md-inline-block{display:inline-block!important}.d-md-block{display:block!important}.d-md-grid{display:grid!important}.d-md-inline-grid{display:inline-grid!important}.d-md-table{display:table!important}.d-md-table-row{display:table-row!important}.d-md-table-cell{display:table-cell!important}.d-md-flex{display:flex!important}.d-md-inline-flex{display:inline-flex!important}.d-md-none{display:none!important}.flex-md-fill{flex:1 1 auto!important}.flex-md-row{flex-direction:row!important}.flex-md-column{flex-direction:column!important}.flex-md-row-reverse{flex-direction:row-reverse!important}.flex-md-column-reverse{flex-direction:column-reverse!important}.flex-md-grow-0{flex-grow:0!important}.flex-md-grow-1{flex-grow:1!important}.flex-md-shrink-0{flex-shrink:0!important}.flex-md-shrink-1{flex-shrink:1!important}.flex-md-wrap{flex-wrap:wrap!important}.flex-md-nowrap{flex-wrap:nowrap!important}.flex-md-wrap-reverse{flex-wrap:wrap-reverse!important}.justify-content-md-start{justify-content:flex-start!important}.justify-content-md-end{justify-content:flex-end!important}.justify-content-md-center{justify-content:center!important}.justify-content-md-between{justify-content:space-between!important}.justify-content-md-around{justify-content:space-around!important}.justify-content-md-evenly{justify-content:space-evenly!important}.align-items-md-start{align-items:flex-start!important}.align-items-md-end{align-items:flex-end!important}.align-items-md-center{align-items:center!important}.align-items-md-baseline{align-items:baseline!important}.align-items-md-stretch{align-items:stretch!important}.align-content-md-start{align-content:flex-start!important}.align-content-md-end{align-content:flex-end!important}.align-content-md-center{align-content:center!important}.align-content-md-between{align-content:space-between!important}.align-content-md-around{align-content:space-around!important}.align-content-md-stretch{align-content:stretch!important}.align-self-md-auto{align-self:auto!important}.align-self-md-start{align-self:flex-start!important}.align-self-md-end{align-self:flex-end!important}.align-self-md-center{align-self:center!important}.align-self-md-baseline{align-self:baseline!important}.align-self-md-stretch{align-self:stretch!important}.order-md-first{order:-1!important}.order-md-0{order:0!important}.order-md-1{order:1!important}.order-md-2{order:2!important}.order-md-3{order:3!important}.order-md-4{order:4!important}.order-md-5{order:5!important}.order-md-last{order:6!important}.m-md-0{margin:0!important}.m-md-1{margin:.25rem!important}.m-md-2{margin:.5rem!important}.m-md-3{margin:1rem!important}.m-md-4{margin:1.5rem!important}.m-md-5{margin:3rem!important}.m-md-auto{margin:auto!important}.mx-md-0{margin-left:0!important;margin-right:0!important}.mx-md-1{margin-left:.25rem!important;margin-right:.25rem!important}.mx-md-2{margin-left:.5rem!important;margin-right:.5rem!important}.mx-md-3{margin-left:1rem!important;margin-right:1rem!important}.mx-md-4{margin-left:1.5rem!important;margin-right:1.5rem!important}.mx-md-5{margin-left:3rem!important;margin-right:3rem!important}.mx-md-auto{margin-left:auto!important;margin-right:auto!important}.my-md-0{margin-bottom:0!important;margin-top:0!important}.my-md-1{margin-bottom:.25rem!important;margin-top:.25rem!important}.my-md-2{margin-bottom:.5rem!important;margin-top:.5rem!important}.my-md-3{margin-bottom:1rem!important;margin-top:1rem!important}.my-md-4{margin-bottom:1.5rem!important;margin-top:1.5rem!important}.my-md-5{margin-bottom:3rem!important;margin-top:3rem!important}.my-md-auto{margin-bottom:auto!important;margin-top:auto!important}.mt-md-0{margin-top:0!important}.mt-md-1{margin-top:.25rem!important}.mt-md-2{margin-top:.5rem!important}.mt-md-3{margin-top:1rem!important}.mt-md-4{margin-top:1.5rem!important}.mt-md-5{margin-top:3rem!important}.mt-md-auto{margin-top:auto!important}.me-md-0{margin-right:0!important}.me-md-1{margin-right:.25rem!important}.me-md-2{margin-right:.5rem!important}.me-md-3{margin-right:1rem!important}.me-md-4{margin-right:1.5rem!important}.me-md-5{margin-right:3rem!important}.me-md-auto{margin-right:auto!important}.mb-md-0{margin-bottom:0!important}.mb-md-1{margin-bottom:.25rem!important}.mb-md-2{margin-bottom:.5rem!important}.mb-md-3{margin-bottom:1rem!important}.mb-md-4{margin-bottom:1.5rem!important}.mb-md-5{margin-bottom:3rem!important}.mb-md-auto{margin-bottom:auto!important}.ms-md-0{margin-left:0!important}.ms-md-1{margin-left:.25rem!important}.ms-md-2{margin-left:.5rem!important}.ms-md-3{margin-left:1rem!important}.ms-md-4{margin-left:1.5rem!important}.ms-md-5{margin-left:3rem!important}.ms-md-auto{margin-left:auto!important}.p-md-0{padding:0!important}.p-md-1{padding:.25rem!important}.p-md-2{padding:.5rem!important}.p-md-3{padding:1rem!important}.p-md-4{padding:1.5rem!important}.p-md-5{padding:3rem!important}.px-md-0{padding-left:0!important;padding-right:0!important}.px-md-1{padding-left:.25rem!important;padding-right:.25rem!important}.px-md-2{padding-left:.5rem!important;padding-right:.5rem!important}.px-md-3{padding-left:1rem!important;padding-right:1rem!important}.px-md-4{padding-left:1.5rem!important;padding-right:1.5rem!important}.px-md-5{padding-left:3rem!important;padding-right:3rem!important}.py-md-0{padding-bottom:0!important;padding-top:0!important}.py-md-1{padding-bottom:.25rem!important;padding-top:.25rem!important}.py-md-2{padding-bottom:.5rem!important;padding-top:.5rem!important}.py-md-3{padding-bottom:1rem!important;padding-top:1rem!important}.py-md-4{padding-bottom:1.5rem!important;padding-top:1.5rem!important}.py-md-5{padding-bottom:3rem!important;padding-top:3rem!important}.pt-md-0{padding-top:0!important}.pt-md-1{padding-top:.25rem!important}.pt-md-2{padding-top:.5rem!important}.pt-md-3{padding-top:1rem!important}.pt-md-4{padding-top:1.5rem!important}.pt-md-5{padding-top:3rem!important}.pe-md-0{padding-right:0!important}.pe-md-1{padding-right:.25rem!important}.pe-md-2{padding-right:.5rem!important}.pe-md-3{padding-right:1rem!important}.pe-md-4{padding-right:1.5rem!important}.pe-md-5{padding-right:3rem!important}.pb-md-0{padding-bottom:0!important}.pb-md-1{padding-bottom:.25rem!important}.pb-md-2{padding-bottom:.5rem!important}.pb-md-3{padding-bottom:1rem!important}.pb-md-4{padding-bottom:1.5rem!important}.pb-md-5{padding-bottom:3rem!important}.ps-md-0{padding-left:0!important}.ps-md-1{padding-left:.25rem!important}.ps-md-2{padding-left:.5rem!important}.ps-md-3{padding-left:1rem!important}.ps-md-4{padding-left:1.5rem!important}.ps-md-5{padding-left:3rem!important}.gap-md-0{gap:0!important}.gap-md-1{gap:.25rem!important}.gap-md-2{gap:.5rem!important}.gap-md-3{gap:1rem!important}.gap-md-4{gap:1.5rem!important}.gap-md-5{gap:3rem!important}.row-gap-md-0{row-gap:0!important}.row-gap-md-1{row-gap:.25rem!important}.row-gap-md-2{row-gap:.5rem!important}.row-gap-md-3{row-gap:1rem!important}.row-gap-md-4{row-gap:1.5rem!important}.row-gap-md-5{row-gap:3rem!important}.column-gap-md-0{column-gap:0!important}.column-gap-md-1{column-gap:.25rem!important}.column-gap-md-2{column-gap:.5rem!important}.column-gap-md-3{column-gap:1rem!important}.column-gap-md-4{column-gap:1.5rem!important}.column-gap-md-5{column-gap:3rem!important}.text-md-start{text-align:left!important}.text-md-end{text-align:right!important}.text-md-center{text-align:center!important}}@media (min-width:992px){.float-lg-start{float:left!important}.float-lg-end{float:right!important}.float-lg-none{float:none!important}.object-fit-lg-contain{object-fit:contain!important}.object-fit-lg-cover{object-fit:cover!important}.object-fit-lg-fill{object-fit:fill!important}.object-fit-lg-scale{object-fit:scale-down!important}.object-fit-lg-none{object-fit:none!important}.d-lg-inline{display:inline!important}.d-lg-inline-block{display:inline-block!important}.d-lg-block{display:block!important}.d-lg-grid{display:grid!important}.d-lg-inline-grid{display:inline-grid!important}.d-lg-table{display:table!important}.d-lg-table-row{display:table-row!important}.d-lg-table-cell{display:table-cell!important}.d-lg-flex{display:flex!important}.d-lg-inline-flex{display:inline-flex!important}.d-lg-none{display:none!important}.flex-lg-fill{flex:1 1 auto!important}.flex-lg-row{flex-direction:row!important}.flex-lg-column{flex-direction:column!important}.flex-lg-row-reverse{flex-direction:row-reverse!important}.flex-lg-column-reverse{flex-direction:column-reverse!important}.flex-lg-grow-0{flex-grow:0!important}.flex-lg-grow-1{flex-grow:1!important}.flex-lg-shrink-0{flex-shrink:0!important}.flex-lg-shrink-1{flex-shrink:1!important}.flex-lg-wrap{flex-wrap:wrap!important}.flex-lg-nowrap{flex-wrap:nowrap!important}.flex-lg-wrap-reverse{flex-wrap:wrap-reverse!important}.justify-content-lg-start{justify-content:flex-start!important}.justify-content-lg-end{justify-content:flex-end!important}.justify-content-lg-center{justify-content:center!important}.justify-content-lg-between{justify-content:space-between!important}.justify-content-lg-around{justify-content:space-around!important}.justify-content-lg-evenly{justify-content:space-evenly!important}.align-items-lg-start{align-items:flex-start!important}.align-items-lg-end{align-items:flex-end!important}.align-items-lg-center{align-items:center!important}.align-items-lg-baseline{align-items:baseline!important}.align-items-lg-stretch{align-items:stretch!important}.align-content-lg-start{align-content:flex-start!important}.align-content-lg-end{align-content:flex-end!important}.align-content-lg-center{align-content:center!important}.align-content-lg-between{align-content:space-between!important}.align-content-lg-around{align-content:space-around!important}.align-content-lg-stretch{align-content:stretch!important}.align-self-lg-auto{align-self:auto!important}.align-self-lg-start{align-self:flex-start!important}.align-self-lg-end{align-self:flex-end!important}.align-self-lg-center{align-self:center!important}.align-self-lg-baseline{align-self:baseline!important}.align-self-lg-stretch{align-self:stretch!important}.order-lg-first{order:-1!important}.order-lg-0{order:0!important}.order-lg-1{order:1!important}.order-lg-2{order:2!important}.order-lg-3{order:3!important}.order-lg-4{order:4!important}.order-lg-5{order:5!important}.order-lg-last{order:6!important}.m-lg-0{margin:0!important}.m-lg-1{margin:.25rem!important}.m-lg-2{margin:.5rem!important}.m-lg-3{margin:1rem!important}.m-lg-4{margin:1.5rem!important}.m-lg-5{margin:3rem!important}.m-lg-auto{margin:auto!important}.mx-lg-0{margin-left:0!important;margin-right:0!important}.mx-lg-1{margin-left:.25rem!important;margin-right:.25rem!important}.mx-lg-2{margin-left:.5rem!important;margin-right:.5rem!important}.mx-lg-3{margin-left:1rem!important;margin-right:1rem!important}.mx-lg-4{margin-left:1.5rem!important;margin-right:1.5rem!important}.mx-lg-5{margin-left:3rem!important;margin-right:3rem!important}.mx-lg-auto{margin-left:auto!important;margin-right:auto!important}.my-lg-0{margin-bottom:0!important;margin-top:0!important}.my-lg-1{margin-bottom:.25rem!important;margin-top:.25rem!important}.my-lg-2{margin-bottom:.5rem!important;margin-top:.5rem!important}.my-lg-3{margin-bottom:1rem!important;margin-top:1rem!important}.my-lg-4{margin-bottom:1.5rem!important;margin-top:1.5rem!important}.my-lg-5{margin-bottom:3rem!important;margin-top:3rem!important}.my-lg-auto{margin-bottom:auto!important;margin-top:auto!important}.mt-lg-0{margin-top:0!important}.mt-lg-1{margin-top:.25rem!important}.mt-lg-2{margin-top:.5rem!important}.mt-lg-3{margin-top:1rem!important}.mt-lg-4{margin-top:1.5rem!important}.mt-lg-5{margin-top:3rem!important}.mt-lg-auto{margin-top:auto!important}.me-lg-0{margin-right:0!important}.me-lg-1{margin-right:.25rem!important}.me-lg-2{margin-right:.5rem!important}.me-lg-3{margin-right:1rem!important}.me-lg-4{margin-right:1.5rem!important}.me-lg-5{margin-right:3rem!important}.me-lg-auto{margin-right:auto!important}.mb-lg-0{margin-bottom:0!important}.mb-lg-1{margin-bottom:.25rem!important}.mb-lg-2{margin-bottom:.5rem!important}.mb-lg-3{margin-bottom:1rem!important}.mb-lg-4{margin-bottom:1.5rem!important}.mb-lg-5{margin-bottom:3rem!important}.mb-lg-auto{margin-bottom:auto!important}.ms-lg-0{margin-left:0!important}.ms-lg-1{margin-left:.25rem!important}.ms-lg-2{margin-left:.5rem!important}.ms-lg-3{margin-left:1rem!important}.ms-lg-4{margin-left:1.5rem!important}.ms-lg-5{margin-left:3rem!important}.ms-lg-auto{margin-left:auto!important}.p-lg-0{padding:0!important}.p-lg-1{padding:.25rem!important}.p-lg-2{padding:.5rem!important}.p-lg-3{padding:1rem!important}.p-lg-4{padding:1.5rem!important}.p-lg-5{padding:3rem!important}.px-lg-0{padding-left:0!important;padding-right:0!important}.px-lg-1{padding-left:.25rem!important;padding-right:.25rem!important}.px-lg-2{padding-left:.5rem!important;padding-right:.5rem!important}.px-lg-3{padding-left:1rem!important;padding-right:1rem!important}.px-lg-4{padding-left:1.5rem!important;padding-right:1.5rem!important}.px-lg-5{padding-left:3rem!important;padding-right:3rem!important}.py-lg-0{padding-bottom:0!important;padding-top:0!important}.py-lg-1{padding-bottom:.25rem!important;padding-top:.25rem!important}.py-lg-2{padding-bottom:.5rem!important;padding-top:.5rem!important}.py-lg-3{padding-bottom:1rem!important;padding-top:1rem!important}.py-lg-4{padding-bottom:1.5rem!important;padding-top:1.5rem!important}.py-lg-5{padding-bottom:3rem!important;padding-top:3rem!important}.pt-lg-0{padding-top:0!important}.pt-lg-1{padding-top:.25rem!important}.pt-lg-2{padding-top:.5rem!important}.pt-lg-3{padding-top:1rem!important}.pt-lg-4{padding-top:1.5rem!important}.pt-lg-5{padding-top:3rem!important}.pe-lg-0{padding-right:0!important}.pe-lg-1{padding-right:.25rem!important}.pe-lg-2{padding-right:.5rem!important}.pe-lg-3{padding-right:1rem!important}.pe-lg-4{padding-right:1.5rem!important}.pe-lg-5{padding-right:3rem!important}.pb-lg-0{padding-bottom:0!important}.pb-lg-1{padding-bottom:.25rem!important}.pb-lg-2{padding-bottom:.5rem!important}.pb-lg-3{padding-bottom:1rem!important}.pb-lg-4{padding-bottom:1.5rem!important}.pb-lg-5{padding-bottom:3rem!important}.ps-lg-0{padding-left:0!important}.ps-lg-1{padding-left:.25rem!important}.ps-lg-2{padding-left:.5rem!important}.ps-lg-3{padding-left:1rem!important}.ps-lg-4{padding-left:1.5rem!important}.ps-lg-5{padding-left:3rem!important}.gap-lg-0{gap:0!important}.gap-lg-1{gap:.25rem!important}.gap-lg-2{gap:.5rem!important}.gap-lg-3{gap:1rem!important}.gap-lg-4{gap:1.5rem!important}.gap-lg-5{gap:3rem!important}.row-gap-lg-0{row-gap:0!important}.row-gap-lg-1{row-gap:.25rem!important}.row-gap-lg-2{row-gap:.5rem!important}.row-gap-lg-3{row-gap:1rem!important}.row-gap-lg-4{row-gap:1.5rem!important}.row-gap-lg-5{row-gap:3rem!important}.column-gap-lg-0{column-gap:0!important}.column-gap-lg-1{column-gap:.25rem!important}.column-gap-lg-2{column-gap:.5rem!important}.column-gap-lg-3{column-gap:1rem!important}.column-gap-lg-4{column-gap:1.5rem!important}.column-gap-lg-5{column-gap:3rem!important}.text-lg-start{text-align:left!important}.text-lg-end{text-align:right!important}.text-lg-center{text-align:center!important}}@media (min-width:1200px){.float-xl-start{float:left!important}.float-xl-end{float:right!important}.float-xl-none{float:none!important}.object-fit-xl-contain{object-fit:contain!important}.object-fit-xl-cover{object-fit:cover!important}.object-fit-xl-fill{object-fit:fill!important}.object-fit-xl-scale{object-fit:scale-down!important}.object-fit-xl-none{object-fit:none!important}.d-xl-inline{display:inline!important}.d-xl-inline-block{display:inline-block!important}.d-xl-block{display:block!important}.d-xl-grid{display:grid!important}.d-xl-inline-grid{display:inline-grid!important}.d-xl-table{display:table!important}.d-xl-table-row{display:table-row!important}.d-xl-table-cell{display:table-cell!important}.d-xl-flex{display:flex!important}.d-xl-inline-flex{display:inline-flex!important}.d-xl-none{display:none!important}.flex-xl-fill{flex:1 1 auto!important}.flex-xl-row{flex-direction:row!important}.flex-xl-column{flex-direction:column!important}.flex-xl-row-reverse{flex-direction:row-reverse!important}.flex-xl-column-reverse{flex-direction:column-reverse!important}.flex-xl-grow-0{flex-grow:0!important}.flex-xl-grow-1{flex-grow:1!important}.flex-xl-shrink-0{flex-shrink:0!important}.flex-xl-shrink-1{flex-shrink:1!important}.flex-xl-wrap{flex-wrap:wrap!important}.flex-xl-nowrap{flex-wrap:nowrap!important}.flex-xl-wrap-reverse{flex-wrap:wrap-reverse!important}.justify-content-xl-start{justify-content:flex-start!important}.justify-content-xl-end{justify-content:flex-end!important}.justify-content-xl-center{justify-content:center!important}.justify-content-xl-between{justify-content:space-between!important}.justify-content-xl-around{justify-content:space-around!important}.justify-content-xl-evenly{justify-content:space-evenly!important}.align-items-xl-start{align-items:flex-start!important}.align-items-xl-end{align-items:flex-end!important}.align-items-xl-center{align-items:center!important}.align-items-xl-baseline{align-items:baseline!important}.align-items-xl-stretch{align-items:stretch!important}.align-content-xl-start{align-content:flex-start!important}.align-content-xl-end{align-content:flex-end!important}.align-content-xl-center{align-content:center!important}.align-content-xl-between{align-content:space-between!important}.align-content-xl-around{align-content:space-around!important}.align-content-xl-stretch{align-content:stretch!important}.align-self-xl-auto{align-self:auto!important}.align-self-xl-start{align-self:flex-start!important}.align-self-xl-end{align-self:flex-end!important}.align-self-xl-center{align-self:center!important}.align-self-xl-baseline{align-self:baseline!important}.align-self-xl-stretch{align-self:stretch!important}.order-xl-first{order:-1!important}.order-xl-0{order:0!important}.order-xl-1{order:1!important}.order-xl-2{order:2!important}.order-xl-3{order:3!important}.order-xl-4{order:4!important}.order-xl-5{order:5!important}.order-xl-last{order:6!important}.m-xl-0{margin:0!important}.m-xl-1{margin:.25rem!important}.m-xl-2{margin:.5rem!important}.m-xl-3{margin:1rem!important}.m-xl-4{margin:1.5rem!important}.m-xl-5{margin:3rem!important}.m-xl-auto{margin:auto!important}.mx-xl-0{margin-left:0!important;margin-right:0!important}.mx-xl-1{margin-left:.25rem!important;margin-right:.25rem!important}.mx-xl-2{margin-left:.5rem!important;margin-right:.5rem!important}.mx-xl-3{margin-left:1rem!important;margin-right:1rem!important}.mx-xl-4{margin-left:1.5rem!important;margin-right:1.5rem!important}.mx-xl-5{margin-left:3rem!important;margin-right:3rem!important}.mx-xl-auto{margin-left:auto!important;margin-right:auto!important}.my-xl-0{margin-bottom:0!important;margin-top:0!important}.my-xl-1{margin-bottom:.25rem!important;margin-top:.25rem!important}.my-xl-2{margin-bottom:.5rem!important;margin-top:.5rem!important}.my-xl-3{margin-bottom:1rem!important;margin-top:1rem!important}.my-xl-4{margin-bottom:1.5rem!important;margin-top:1.5rem!important}.my-xl-5{margin-bottom:3rem!important;margin-top:3rem!important}.my-xl-auto{margin-bottom:auto!important;margin-top:auto!important}.mt-xl-0{margin-top:0!important}.mt-xl-1{margin-top:.25rem!important}.mt-xl-2{margin-top:.5rem!important}.mt-xl-3{margin-top:1rem!important}.mt-xl-4{margin-top:1.5rem!important}.mt-xl-5{margin-top:3rem!important}.mt-xl-auto{margin-top:auto!important}.me-xl-0{margin-right:0!important}.me-xl-1{margin-right:.25rem!important}.me-xl-2{margin-right:.5rem!important}.me-xl-3{margin-right:1rem!important}.me-xl-4{margin-right:1.5rem!important}.me-xl-5{margin-right:3rem!important}.me-xl-auto{margin-right:auto!important}.mb-xl-0{margin-bottom:0!important}.mb-xl-1{margin-bottom:.25rem!important}.mb-xl-2{margin-bottom:.5rem!important}.mb-xl-3{margin-bottom:1rem!important}.mb-xl-4{margin-bottom:1.5rem!important}.mb-xl-5{margin-bottom:3rem!important}.mb-xl-auto{margin-bottom:auto!important}.ms-xl-0{margin-left:0!important}.ms-xl-1{margin-left:.25rem!important}.ms-xl-2{margin-left:.5rem!important}.ms-xl-3{margin-left:1rem!important}.ms-xl-4{margin-left:1.5rem!important}.ms-xl-5{margin-left:3rem!important}.ms-xl-auto{margin-left:auto!important}.p-xl-0{padding:0!important}.p-xl-1{padding:.25rem!important}.p-xl-2{padding:.5rem!important}.p-xl-3{padding:1rem!important}.p-xl-4{padding:1.5rem!important}.p-xl-5{padding:3rem!important}.px-xl-0{padding-left:0!important;padding-right:0!important}.px-xl-1{padding-left:.25rem!important;padding-right:.25rem!important}.px-xl-2{padding-left:.5rem!important;padding-right:.5rem!important}.px-xl-3{padding-left:1rem!important;padding-right:1rem!important}.px-xl-4{padding-left:1.5rem!important;padding-right:1.5rem!important}.px-xl-5{padding-left:3rem!important;padding-right:3rem!important}.py-xl-0{padding-bottom:0!important;padding-top:0!important}.py-xl-1{padding-bottom:.25rem!important;padding-top:.25rem!important}.py-xl-2{padding-bottom:.5rem!important;padding-top:.5rem!important}.py-xl-3{padding-bottom:1rem!important;padding-top:1rem!important}.py-xl-4{padding-bottom:1.5rem!important;padding-top:1.5rem!important}.py-xl-5{padding-bottom:3rem!important;padding-top:3rem!important}.pt-xl-0{padding-top:0!important}.pt-xl-1{padding-top:.25rem!important}.pt-xl-2{padding-top:.5rem!important}.pt-xl-3{padding-top:1rem!important}.pt-xl-4{padding-top:1.5rem!important}.pt-xl-5{padding-top:3rem!important}.pe-xl-0{padding-right:0!important}.pe-xl-1{padding-right:.25rem!important}.pe-xl-2{padding-right:.5rem!important}.pe-xl-3{padding-right:1rem!important}.pe-xl-4{padding-right:1.5rem!important}.pe-xl-5{padding-right:3rem!important}.pb-xl-0{padding-bottom:0!important}.pb-xl-1{padding-bottom:.25rem!important}.pb-xl-2{padding-bottom:.5rem!important}.pb-xl-3{padding-bottom:1rem!important}.pb-xl-4{padding-bottom:1.5rem!important}.pb-xl-5{padding-bottom:3rem!important}.ps-xl-0{padding-left:0!important}.ps-xl-1{padding-left:.25rem!important}.ps-xl-2{padding-left:.5rem!important}.ps-xl-3{padding-left:1rem!important}.ps-xl-4{padding-left:1.5rem!important}.ps-xl-5{padding-left:3rem!important}.gap-xl-0{gap:0!important}.gap-xl-1{gap:.25rem!important}.gap-xl-2{gap:.5rem!important}.gap-xl-3{gap:1rem!important}.gap-xl-4{gap:1.5rem!important}.gap-xl-5{gap:3rem!important}.row-gap-xl-0{row-gap:0!important}.row-gap-xl-1{row-gap:.25rem!important}.row-gap-xl-2{row-gap:.5rem!important}.row-gap-xl-3{row-gap:1rem!important}.row-gap-xl-4{row-gap:1.5rem!important}.row-gap-xl-5{row-gap:3rem!important}.column-gap-xl-0{column-gap:0!important}.column-gap-xl-1{column-gap:.25rem!important}.column-gap-xl-2{column-gap:.5rem!important}.column-gap-xl-3{column-gap:1rem!important}.column-gap-xl-4{column-gap:1.5rem!important}.column-gap-xl-5{column-gap:3rem!important}.text-xl-start{text-align:left!important}.text-xl-end{text-align:right!important}.text-xl-center{text-align:center!important}}@media (min-width:1400px){.float-xxl-start{float:left!important}.float-xxl-end{float:right!important}.float-xxl-none{float:none!important}.object-fit-xxl-contain{object-fit:contain!important}.object-fit-xxl-cover{object-fit:cover!important}.object-fit-xxl-fill{object-fit:fill!important}.object-fit-xxl-scale{object-fit:scale-down!important}.object-fit-xxl-none{object-fit:none!important}.d-xxl-inline{display:inline!important}.d-xxl-inline-block{display:inline-block!important}.d-xxl-block{display:block!important}.d-xxl-grid{display:grid!important}.d-xxl-inline-grid{display:inline-grid!important}.d-xxl-table{display:table!important}.d-xxl-table-row{display:table-row!important}.d-xxl-table-cell{display:table-cell!important}.d-xxl-flex{display:flex!important}.d-xxl-inline-flex{display:inline-flex!important}.d-xxl-none{display:none!important}.flex-xxl-fill{flex:1 1 auto!important}.flex-xxl-row{flex-direction:row!important}.flex-xxl-column{flex-direction:column!important}.flex-xxl-row-reverse{flex-direction:row-reverse!important}.flex-xxl-column-reverse{flex-direction:column-reverse!important}.flex-xxl-grow-0{flex-grow:0!important}.flex-xxl-grow-1{flex-grow:1!important}.flex-xxl-shrink-0{flex-shrink:0!important}.flex-xxl-shrink-1{flex-shrink:1!important}.flex-xxl-wrap{flex-wrap:wrap!important}.flex-xxl-nowrap{flex-wrap:nowrap!important}.flex-xxl-wrap-reverse{flex-wrap:wrap-reverse!important}.justify-content-xxl-start{justify-content:flex-start!important}.justify-content-xxl-end{justify-content:flex-end!important}.justify-content-xxl-center{justify-content:center!important}.justify-content-xxl-between{justify-content:space-between!important}.justify-content-xxl-around{justify-content:space-around!important}.justify-content-xxl-evenly{justify-content:space-evenly!important}.align-items-xxl-start{align-items:flex-start!important}.align-items-xxl-end{align-items:flex-end!important}.align-items-xxl-center{align-items:center!important}.align-items-xxl-baseline{align-items:baseline!important}.align-items-xxl-stretch{align-items:stretch!important}.align-content-xxl-start{align-content:flex-start!important}.align-content-xxl-end{align-content:flex-end!important}.align-content-xxl-center{align-content:center!important}.align-content-xxl-between{align-content:space-between!important}.align-content-xxl-around{align-content:space-around!important}.align-content-xxl-stretch{align-content:stretch!important}.align-self-xxl-auto{align-self:auto!important}.align-self-xxl-start{align-self:flex-start!important}.align-self-xxl-end{align-self:flex-end!important}.align-self-xxl-center{align-self:center!important}.align-self-xxl-baseline{align-self:baseline!important}.align-self-xxl-stretch{align-self:stretch!important}.order-xxl-first{order:-1!important}.order-xxl-0{order:0!important}.order-xxl-1{order:1!important}.order-xxl-2{order:2!important}.order-xxl-3{order:3!important}.order-xxl-4{order:4!important}.order-xxl-5{order:5!important}.order-xxl-last{order:6!important}.m-xxl-0{margin:0!important}.m-xxl-1{margin:.25rem!important}.m-xxl-2{margin:.5rem!important}.m-xxl-3{margin:1rem!important}.m-xxl-4{margin:1.5rem!important}.m-xxl-5{margin:3rem!important}.m-xxl-auto{margin:auto!important}.mx-xxl-0{margin-left:0!important;margin-right:0!important}.mx-xxl-1{margin-left:.25rem!important;margin-right:.25rem!important}.mx-xxl-2{margin-left:.5rem!important;margin-right:.5rem!important}.mx-xxl-3{margin-left:1rem!important;margin-right:1rem!important}.mx-xxl-4{margin-left:1.5rem!important;margin-right:1.5rem!important}.mx-xxl-5{margin-left:3rem!important;margin-right:3rem!important}.mx-xxl-auto{margin-left:auto!important;margin-right:auto!important}.my-xxl-0{margin-bottom:0!important;margin-top:0!important}.my-xxl-1{margin-bottom:.25rem!important;margin-top:.25rem!important}.my-xxl-2{margin-bottom:.5rem!important;margin-top:.5rem!important}.my-xxl-3{margin-bottom:1rem!important;margin-top:1rem!important}.my-xxl-4{margin-bottom:1.5rem!important;margin-top:1.5rem!important}.my-xxl-5{margin-bottom:3rem!important;margin-top:3rem!important}.my-xxl-auto{margin-bottom:auto!important;margin-top:auto!important}.mt-xxl-0{margin-top:0!important}.mt-xxl-1{margin-top:.25rem!important}.mt-xxl-2{margin-top:.5rem!important}.mt-xxl-3{margin-top:1rem!important}.mt-xxl-4{margin-top:1.5rem!important}.mt-xxl-5{margin-top:3rem!important}.mt-xxl-auto{margin-top:auto!important}.me-xxl-0{margin-right:0!important}.me-xxl-1{margin-right:.25rem!important}.me-xxl-2{margin-right:.5rem!important}.me-xxl-3{margin-right:1rem!important}.me-xxl-4{margin-right:1.5rem!important}.me-xxl-5{margin-right:3rem!important}.me-xxl-auto{margin-right:auto!important}.mb-xxl-0{margin-bottom:0!important}.mb-xxl-1{margin-bottom:.25rem!important}.mb-xxl-2{margin-bottom:.5rem!important}.mb-xxl-3{margin-bottom:1rem!important}.mb-xxl-4{margin-bottom:1.5rem!important}.mb-xxl-5{margin-bottom:3rem!important}.mb-xxl-auto{margin-bottom:auto!important}.ms-xxl-0{margin-left:0!important}.ms-xxl-1{margin-left:.25rem!important}.ms-xxl-2{margin-left:.5rem!important}.ms-xxl-3{margin-left:1rem!important}.ms-xxl-4{margin-left:1.5rem!important}.ms-xxl-5{margin-left:3rem!important}.ms-xxl-auto{margin-left:auto!important}.p-xxl-0{padding:0!important}.p-xxl-1{padding:.25rem!important}.p-xxl-2{padding:.5rem!important}.p-xxl-3{padding:1rem!important}.p-xxl-4{padding:1.5rem!important}.p-xxl-5{padding:3rem!important}.px-xxl-0{padding-left:0!important;padding-right:0!important}.px-xxl-1{padding-left:.25rem!important;padding-right:.25rem!important}.px-xxl-2{padding-left:.5rem!important;padding-right:.5rem!important}.px-xxl-3{padding-left:1rem!important;padding-right:1rem!important}.px-xxl-4{padding-left:1.5rem!important;padding-right:1.5rem!important}.px-xxl-5{padding-left:3rem!important;padding-right:3rem!important}.py-xxl-0{padding-bottom:0!important;padding-top:0!important}.py-xxl-1{padding-bottom:.25rem!important;padding-top:.25rem!important}.py-xxl-2{padding-bottom:.5rem!important;padding-top:.5rem!important}.py-xxl-3{padding-bottom:1rem!important;padding-top:1rem!important}.py-xxl-4{padding-bottom:1.5rem!important;padding-top:1.5rem!important}.py-xxl-5{padding-bottom:3rem!important;padding-top:3rem!important}.pt-xxl-0{padding-top:0!important}.pt-xxl-1{padding-top:.25rem!important}.pt-xxl-2{padding-top:.5rem!important}.pt-xxl-3{padding-top:1rem!important}.pt-xxl-4{padding-top:1.5rem!important}.pt-xxl-5{padding-top:3rem!important}.pe-xxl-0{padding-right:0!important}.pe-xxl-1{padding-right:.25rem!important}.pe-xxl-2{padding-right:.5rem!important}.pe-xxl-3{padding-right:1rem!important}.pe-xxl-4{padding-right:1.5rem!important}.pe-xxl-5{padding-right:3rem!important}.pb-xxl-0{padding-bottom:0!important}.pb-xxl-1{padding-bottom:.25rem!important}.pb-xxl-2{padding-bottom:.5rem!important}.pb-xxl-3{padding-bottom:1rem!important}.pb-xxl-4{padding-bottom:1.5rem!important}.pb-xxl-5{padding-bottom:3rem!important}.ps-xxl-0{padding-left:0!important}.ps-xxl-1{padding-left:.25rem!important}.ps-xxl-2{padding-left:.5rem!important}.ps-xxl-3{padding-left:1rem!important}.ps-xxl-4{padding-left:1.5rem!important}.ps-xxl-5{padding-left:3rem!important}.gap-xxl-0{gap:0!important}.gap-xxl-1{gap:.25rem!important}.gap-xxl-2{gap:.5rem!important}.gap-xxl-3{gap:1rem!important}.gap-xxl-4{gap:1.5rem!important}.gap-xxl-5{gap:3rem!important}.row-gap-xxl-0{row-gap:0!important}.row-gap-xxl-1{row-gap:.25rem!important}.row-gap-xxl-2{row-gap:.5rem!important}.row-gap-xxl-3{row-gap:1rem!important}.row-gap-xxl-4{row-gap:1.5rem!important}.row-gap-xxl-5{row-gap:3rem!important}.column-gap-xxl-0{column-gap:0!important}.column-gap-xxl-1{column-gap:.25rem!important}.column-gap-xxl-2{column-gap:.5rem!important}.column-gap-xxl-3{column-gap:1rem!important}.column-gap-xxl-4{column-gap:1.5rem!important}.column-gap-xxl-5{column-gap:3rem!important}.text-xxl-start{text-align:left!important}.text-xxl-end{text-align:right!important}.text-xxl-center{text-align:center!important}}@media (min-width:1200px){.fs-1{font-size:2.5rem!important}.fs-2{font-size:2rem!important}.fs-3{font-size:1.75rem!important}.fs-4{font-size:1.5rem!important}}@media print{.d-print-inline{display:inline!important}.d-print-inline-block{display:inline-block!important}.d-print-block{display:block!important}.d-print-grid{display:grid!important}.d-print-inline-grid{display:inline-grid!important}.d-print-table{display:table!important}.d-print-table-row{display:table-row!important}.d-print-table-cell{display:table-cell!important}.d-print-flex{display:flex!important}.d-print-inline-flex{display:inline-flex!important}.d-print-none{display:none!important}}[data-bs-theme=dark] .text-light{color:#b7bbc2!important;transition:color .5s ease}[data-bs-theme=dark] .text-contrast,[data-bs-theme=dark] .text-dark,[data-bs-theme=dark] .text-light-white{color:#fff!important;transition:color .5s ease}[data-bs-theme=dark] .text-white-dark{color:#2a2a2c;transition:color .5s ease}[data-bs-theme=dark] .text-dark-primary{color:#e1ba2d;transition:color .5s ease}[data-bs-theme=dark] .text-blue,[data-bs-theme=dark] .text-darker-blue{color:#fff;transition:color .5s ease}[data-bs-theme=dark] .card{background-color:#2a2a2c;box-shadow:none}[data-bs-theme=dark] .card.bg-primary{color:#131314}[data-bs-theme=dark] .dropdown-menu,[data-bs-theme=dark] .list-group-item{background-color:#2a2a2c;box-shadow:none}[data-bs-theme=dark] .fill-light{fill:#b7bbc2}[data-bs-theme=dark] .fill-1,[data-bs-theme=dark] .fill-contrast{fill:#131314}[data-bs-theme=dark] .fill-2,[data-bs-theme=dark] .fill-primary{fill:#e1ba2d}[data-bs-theme=dark] .fill-strong-contrast{fill:#2a2a2c;stop-color:#2a2a2c}[data-bs-theme=dark] .fill-body-color{fill:#b7bbc2}[data-bs-theme=dark] .fill-body-bg{fill:#0c0c0f}[data-bs-theme=dark] .fill-dark{fill:#fff}[data-bs-theme=dark] .stroke-bg,[data-bs-theme=dark] .stroke-body-bg,[data-bs-theme=dark] .stroke-primary-bg{stroke:#0c0c0f}[data-bs-theme=dark] .stroke-light{stroke:#b7bbc2}[data-bs-theme=dark] .stroke-white-primary{stroke:#e1ba2d}[data-bs-theme=dark] span.span-close-svg{border-radius:1.25rem;cursor:pointer}[data-bs-theme=dark] span.span-close-svg svg path{transition:all .3s ease}[data-bs-theme=dark] span.span-close-svg:focus-visible,[data-bs-theme=dark] span.span-close-svg:hover{outline:none}[data-bs-theme=dark] span.span-close-svg:focus-visible svg path,[data-bs-theme=dark] span.span-close-svg:hover svg path{stroke:#e0e2e5}[data-bs-theme=dark] .btn.btn-primary.hover,[data-bs-theme=dark] .btn.btn-primary:hover{box-shadow:0 2px 4px 0 hsla(218,8%,74%,.25)}[data-bs-theme=dark] .btn-rounded.bg-primary,[data-bs-theme=dark] .btn-rounded.btn.btn-primary{color:#2a2a2c}[data-bs-theme=dark] .btn-rounded.bg-primary:hover,[data-bs-theme=dark] .btn-rounded.btn.btn-primary:hover{box-shadow:0 2px 4px 0 hsla(218,8%,74%,.25)}[data-bs-theme=dark] .btn-group-sm>.btn-rounded.btn-secondary.btn,[data-bs-theme=dark] .btn-rounded.btn-sm.btn-secondary{border:1px solid #fff;color:#fff}[data-bs-theme=dark] .btn-group-sm>.btn-rounded.btn-secondary.btn:hover,[data-bs-theme=dark] .btn-rounded.btn-sm.btn-secondary:hover{color:#2a2a2c}[data-bs-theme=dark] .btn-group.btn-group-action .btn,[data-bs-theme=dark] .btn-group.btn-group-action button.btn-actions{color:#131314}[data-bs-theme=dark] .btn-group.btn-group-action .btn:hover,[data-bs-theme=dark] .btn-group.btn-group-action button.btn-actions:hover{background-color:#2a2a2c;border-color:#2a2a2c}[data-bs-theme=dark] .btn-group.btn-group-action .btn:hover+button.btn-actions,[data-bs-theme=dark] .btn-group.btn-group-action button.btn-actions:hover+button.btn-actions{border-color:#2a2a2c}[data-bs-theme=dark] .form-check.form-check-inline .form-check-input{background-color:#303032}[data-bs-theme=dark] .dropdown a.dropdown-item{color:#fff}[data-bs-theme=dark] .dropdown a.dropdown-item.active,[data-bs-theme=dark] .dropdown a.dropdown-item:active,[data-bs-theme=dark] .dropdown a.dropdown-item:focus,[data-bs-theme=dark] .dropdown a.dropdown-item:hover{color:#e1ba2d!important}[data-bs-theme=dark] .dropdown a.dropdown-item.no-focus.active,[data-bs-theme=dark] .dropdown a.dropdown-item.no-focus:active,[data-bs-theme=dark] .dropdown a.dropdown-item.no-focus:focus,[data-bs-theme=dark] .dropdown a.dropdown-item.no-focus:hover{color:#fff!important}[data-bs-theme=dark] .dropdown div.dropdown-item{color:#fff}[data-bs-theme=dark] .input-group .form-control{background-color:#303032;color:#fff}[data-bs-theme=dark] .input-group .form-control:focus{border-color:#495057}[data-bs-theme=dark] .input-group .form-control::-webkit-input-placeholder{color:#b7bbc2}[data-bs-theme=dark] .input-group .form-control:-moz-placeholder,[data-bs-theme=dark] .input-group .form-control::-moz-placeholder{color:#b7bbc2;opacity:1}[data-bs-theme=dark] .input-group .form-control:-ms-input-placeholder{color:#b7bbc2}[data-bs-theme=dark] .input-group .form-control-addon{background-color:#303032}[data-bs-theme=dark] .input-group .form-control-addon:focus{border-color:#495057}[data-bs-theme=dark] .switch{border:1px solid #fff}[data-bs-theme=dark] .switch .handle{background-color:#3a4247}[data-bs-theme=dark] .switch:focus{box-shadow:0 0 0 .2rem hsla(218,8%,74%,.25)}[data-bs-theme=dark] .switch[data-isswitchon=true]{border:1px solid #21ba7a}[data-bs-theme=dark] .tooltip{box-shadow:0 1px 2px 0 hsla(218,8%,74%,.16)}[data-bs-theme=dark] .tooltip .tooltip-inner{background-color:#0c0c0f;border:1px solid #2a2a2c;color:#b7bbc2}[data-bs-theme=dark] .tooltip .tooltip-inner svg path{fill:#b7bbc2}[data-bs-theme=dark] .recharts-surface>path:not(.recharts-legend-icon){fill:#1b1b1d}[data-bs-theme=dark] .react-datepicker-popper .react-datepicker__triangle{fill:#303032;stroke:hsla(0,0%,62%,.1);color:#303032}[data-bs-theme=dark] .react-datepicker-popper .react-datepicker{background-color:#303032;border-color:hsla(0,0%,62%,.1)}[data-bs-theme=dark] .react-datepicker-popper .react-datepicker .react-datepicker__header{background-color:#2a2a2c;border-bottom:.5px solid hsla(0,0%,62%,.1)}[data-bs-theme=dark] .react-datepicker-popper .react-datepicker .react-datepicker__header .react-datepicker-time__header,[data-bs-theme=dark] .react-datepicker-popper .react-datepicker .react-datepicker__header .react-datepicker-time__header .react-datepicker__day-name,[data-bs-theme=dark] .react-datepicker-popper .react-datepicker .react-datepicker__header .react-datepicker-year-header,[data-bs-theme=dark] .react-datepicker-popper .react-datepicker .react-datepicker__header .react-datepicker-year-header .react-datepicker__day-name,[data-bs-theme=dark] .react-datepicker-popper .react-datepicker .react-datepicker__header .react-datepicker__current-month,[data-bs-theme=dark] .react-datepicker-popper .react-datepicker .react-datepicker__header .react-datepicker__current-month .react-datepicker__day-name,[data-bs-theme=dark] .react-datepicker-popper .react-datepicker .react-datepicker__header .react-datepicker__day-names,[data-bs-theme=dark] .react-datepicker-popper .react-datepicker .react-datepicker__header .react-datepicker__day-names .react-datepicker__day-name{color:#fff}[data-bs-theme=dark] .react-datepicker-popper .react-datepicker .react-datepicker__navigation .react-datepicker__navigation-icon:before{border-color:#fff}[data-bs-theme=dark] .react-datepicker-popper .react-datepicker .react-datepicker__month-container .react-datepicker__day{color:#fff}[data-bs-theme=dark] .react-datepicker-popper .react-datepicker .react-datepicker__month-container .react-datepicker__day:hover{background-color:#0c0c0f}[data-bs-theme=dark] .react-datepicker-popper .react-datepicker .react-datepicker__month-container .react-datepicker__day--disabled{color:#3a4247}[data-bs-theme=dark] .ps.ps--active-y>.ps__rail-y{background-color:#3a4247}[data-bs-theme=light] .text-contrast{color:#3a4247}[data-bs-theme=light] .text-white-dark{color:#fff}[data-bs-theme=light] .text-light-white{color:#9f9f9f!important}[data-bs-theme=light] .text-dark-primary{color:#3a4247}[data-bs-theme=light] .fill-light{fill:#9f9f9f}[data-bs-theme=light] .fill-1,[data-bs-theme=light] .fill-primary{fill:#e1ba2d}[data-bs-theme=light] .fill-2,[data-bs-theme=light] .fill-strong-contrast{fill:#fff;stop-color:#fff}[data-bs-theme=light] .fill-contrast{fill:#fff}[data-bs-theme=light] .fill-body-color{fill:#3a4247}[data-bs-theme=light] .fill-body-bg{fill:#ebeff9}[data-bs-theme=light] .stroke-body-bg{stroke:#ebeff9}[data-bs-theme=light] .stroke-bg{stroke:#fff}[data-bs-theme=light] .stroke-primary-bg{stroke:#e1ba2d}[data-bs-theme=light] .stroke-light{stroke:#9f9f9f}[data-bs-theme=light] .stroke-white-primary{stroke:#fff}[data-bs-theme=light] .card.bg-primary{color:#fff}[data-bs-theme=light] .dropdown-menu,[data-bs-theme=light] .list-group-item{box-shadow:none}[data-bs-theme=light] span.span-close-svg{border-radius:1.25rem;cursor:pointer}[data-bs-theme=light] span.span-close-svg svg path{transition:all .3s ease}[data-bs-theme=light] span.span-close-svg:focus-visible,[data-bs-theme=light] span.span-close-svg:hover{outline:none}[data-bs-theme=light] span.span-close-svg:focus-visible svg path,[data-bs-theme=light] span.span-close-svg:hover svg path{stroke:#797979}[data-bs-theme=light] .btn-rounded.bg-primary,[data-bs-theme=light] .btn-rounded.btn.btn-primary{color:#fff}[data-bs-theme=light] .btn-rounded.bg-primary:hover,[data-bs-theme=light] .btn-rounded.btn.btn-primary:hover{box-shadow:0 2px 4px 0 #ced4da}[data-bs-theme=light] .btn-group button.btn-actions{color:#fff}[data-bs-theme=light] .dropdown .dropdown-item{color:#3a4247}[data-bs-theme=light] .dropdown .dropdown-item.active,[data-bs-theme=light] .dropdown .dropdown-item:active,[data-bs-theme=light] .dropdown .dropdown-item:focus,[data-bs-theme=light] .dropdown .dropdown-item:hover{color:#e1ba2d}[data-bs-theme=light] .input-group .form-control{background-color:#fff;color:#3a4247}[data-bs-theme=light] .input-group .form-control:focus{border-color:#dee2e6}[data-bs-theme=light] .input-group .form-control::-webkit-input-placeholder{color:#9f9f9f}[data-bs-theme=light] .input-group .form-control:-moz-placeholder,[data-bs-theme=light] .input-group .form-control::-moz-placeholder{color:#9f9f9f;opacity:1}[data-bs-theme=light] .input-group .form-control:-ms-input-placeholder{color:#9f9f9f}[data-bs-theme=light] .input-group .form-control-addon{background-color:#fff}[data-bs-theme=light] .input-group .form-control-addon:focus{border-color:#dee2e6}[data-bs-theme=light] .inner-box-shadow{box-shadow:0 4px 8px 0 #ced4da}[data-bs-theme=light] .tooltip{box-shadow:0 4px 8px 0 rgba(206,212,218,.16)}[data-bs-theme=light] .tooltip .tooltip-inner{background-color:#fff;border:1px solid #b7bbc2;color:#3a4247}[data-bs-theme=light] .tooltip .tooltip-inner svg path{fill:#3a4247}[data-bs-theme=light] .recharts-surface>path:not(.recharts-legend-icon){fill:#ebeff9}[data-bs-theme=light] .react-datepicker-popper .react-datepicker__triangle{fill:#fff;stroke:hsla(0,0%,62%,.1);color:#fff}[data-bs-theme=light] .react-datepicker-popper .react-datepicker{background-color:#fff;border-color:hsla(0,0%,62%,.1)}[data-bs-theme=light] .react-datepicker-popper .react-datepicker .react-datepicker__header{background-color:#fff;border-bottom:.5px solid hsla(0,0%,62%,.1)}[data-bs-theme=light] .react-datepicker-popper .react-datepicker .react-datepicker__header .react-datepicker-time__header,[data-bs-theme=light] .react-datepicker-popper .react-datepicker .react-datepicker__header .react-datepicker-time__header .react-datepicker__day-name,[data-bs-theme=light] .react-datepicker-popper .react-datepicker .react-datepicker__header .react-datepicker-year-header,[data-bs-theme=light] .react-datepicker-popper .react-datepicker .react-datepicker__header .react-datepicker-year-header .react-datepicker__day-name,[data-bs-theme=light] .react-datepicker-popper .react-datepicker .react-datepicker__header .react-datepicker__current-month,[data-bs-theme=light] .react-datepicker-popper .react-datepicker .react-datepicker__header .react-datepicker__current-month .react-datepicker__day-name,[data-bs-theme=light] .react-datepicker-popper .react-datepicker .react-datepicker__header .react-datepicker__day-names,[data-bs-theme=light] .react-datepicker-popper .react-datepicker .react-datepicker__header .react-datepicker__day-names .react-datepicker__day-name{color:#3a4247}[data-bs-theme=light] .react-datepicker-popper .react-datepicker .react-datepicker__navigation-icon:before{border-color:#3a4247}[data-bs-theme=light] .react-datepicker-popper .react-datepicker .react-datepicker__month-container .react-datepicker__day{color:#3a4247}[data-bs-theme=light] .react-datepicker-popper .react-datepicker .react-datepicker__month-container .react-datepicker__day:hover{background-color:#ebeff9}[data-bs-theme=light] .react-datepicker-popper .react-datepicker .react-datepicker__month-container .react-datepicker__day--disabled{color:#9f9f9f}body{transition:background-color .5s ease}body[data-screensize=XL],body[data-screensize=XXL]{overflow:hidden}body.modal-open #root-container,body.modal-open #root-container.blurred-container{filter:blur(5px)}body #root-container{height:100vh;transition:filter .3s ease}body .tooltip{padding:0}body .tooltip .tooltip-arrow{color:transparent}body .tooltip .tooltip-arrow:before{border-color:transparent}body .tooltip .tooltip-inner{border-radius:0;font-size:.75rem}a{text-decoration:none}.mt-12px{margin-top:.75rem!important}.mt-2px{margin-top:2px!important}.pt-2px{padding-top:2px!important}.pt-12px{padding-top:.75rem!important}.cursor-pointer{cursor:pointer!important}.text-valid{color:#33db95}.text-invalid{color:#dc3545}.text-blue{color:#1b2559}.text-dark{color:#3a4247}.text-darker-blue{color:#141c44}.border-none{border:none!important}.fs-18px{font-size:1.125rem!important}.fs-base{font-size:14px!important}.fs-7{font-size:.75rem!important}.fs-8{font-size:.4rem!important}.mt-10{margin-top:10rem}.ms-2px{margin-left:2px!important}.me-2px{margin-right:2px!important}.me-10px{margin-right:10px!important}.border-gray-300{border:.5px solid #dee2e6}.square{height:12px;width:12px}.dot{border-radius:50%;height:10px;min-width:10px;padding:0;width:10px}.minw-12px{min-width:12px}.btn.btn-primary{color:#3a4247;color:var(--bs-body-color);font-weight:600;padding:1.25rem 1.675rem;transition:color .5s ease}.btn.btn-primary.active,.btn.btn-primary:active{color:#3a4247;color:var(--bs-body-color);text-decoration:none}.btn.btn-primary.hover,.btn.btn-primary:focus-visible,.btn.btn-primary:hover{background-color:#c9a31d;border-color:#c9a31d;outline:none}.btn-link{font-size:.75rem;font-weight:600;padding:0 12px;text-decoration:none;transition:transform .3s ease;transition:color .5s ease}.btn-link:active,.btn-link:focus-visible,.btn-link:hover{color:#c09c1b;outline:none;transform:scale(1.01)}button.btn-rounded,button.btn-rounded.btn{align-items:center;border:none;border-radius:1.25rem;box-shadow:none;display:flex;font-weight:600;height:2rem;padding:1.25rem 1.675rem;transition:all .3s ease}button.btn-rounded.btn-secondary,button.btn-rounded.btn.btn-secondary{background:transparent;border:1px solid #dee2e6;color:#3a4247;font-size:.75rem}button.btn-rounded.btn-secondary:focus-visible,button.btn-rounded.btn-secondary:hover,button.btn-rounded.btn.btn-secondary:focus-visible,button.btn-rounded.btn.btn-secondary:hover{background-color:#e1ba2d;border:1px solid #e1ba2d;color:#fff;outline:none}.btn-group-sm>button.btn-rounded.btn,button.btn-rounded.btn-sm,button.btn-rounded.btn.btn-sm{padding:0 1rem}button.btn-rounded.btn:not(.btn-settings-menu.dropdown-toggle),button.btn-rounded:not(.btn-settings-menu.dropdown-toggle){transition:color .5s ease}.btn-group-sm>button.btn-rounded.btn-secondary.btn:hover,.btn-group-sm>button.btn-rounded.btn.btn-secondary:hover,button.btn-rounded.btn-sm.btn-secondary:hover,button.btn-rounded.btn.btn-sm.btn-secondary:hover{transition:background-color .3s ease,color 0ms ease}button.btn-rounded.bg-primary:focus-visible,button.btn-rounded.bg-primary:hover,button.btn-rounded.btn-primary:focus-visible,button.btn-rounded.btn-primary:hover,button.btn-rounded.btn.bg-primary:focus-visible,button.btn-rounded.btn.bg-primary:hover,button.btn-rounded.btn.btn-primary:focus-visible,button.btn-rounded.btn.btn-primary:hover{background-color:#c9a31d!important;border-color:#c9a31d!important;outline:none}button.btn-rounded.btn:disabled,button.btn-rounded:disabled{cursor:not-allowed;opacity:.5}.btn-group button.btn-actions{border:none;cursor:pointer;flex:1 1 auto;padding:.625rem;text-align:center}.btn-group button.btn-actions:not(:first-child){border-left:2px solid #e1ba2d}.btn-group.btn-group-action .btn,.btn-group.btn-group-action button.btn-actions{background-color:#cca103;box-shadow:none;font-weight:600;transition:background-color .5s ease,color .5s ease,border-color .5s ease}.btn-group.btn-group-action .btn:focus-visible,.btn-group.btn-group-action .btn:hover,.btn-group.btn-group-action button.btn-actions:focus-visible,.btn-group.btn-group-action button.btn-actions:hover{background-color:#fff;border-color:#fff;color:#e1ba2d;outline:none}.btn-group.btn-group-action .btn:focus-visible+button.btn-actions,.btn-group.btn-group-action .btn:hover+button.btn-actions,.btn-group.btn-group-action button.btn-actions:focus-visible+button.btn-actions,.btn-group.btn-group-action button.btn-actions:hover+button.btn-actions{border-color:#fff}.btn-group.btn-group-action .btn:focus-visible svg .fill-contrast,.btn-group.btn-group-action .btn:hover svg .fill-contrast,.btn-group.btn-group-action button.btn-actions:focus-visible svg .fill-contrast,.btn-group.btn-group-action button.btn-actions:hover svg .fill-contrast{fill:#e1ba2d;transition:fill .5s ease}.stroke-width-2{stroke-width:1.5px}.stroke-width-3{stroke-width:3px}.stroke-width-4{stroke-width:3.5px}.stroke-width-5{stroke-width:5px}.stroke-width-28{stroke-width:28px}.stroke-linecap-round{stroke-linecap:round}.stroke-white{stroke:#fff}.stroke-dark{stroke:#3a4247}.stroke-primary{stroke:#e1ba2d}.fill-success{fill:#33db95}.fill-warning{fill:#fe8e02}.fill-danger{fill:#dc3545}.fill-dark{fill:#3a4247}.fill-white{fill:#fff}.fill-graph-1{fill:#00c6a0}.fill-graph-2{fill:#f2cf20}.fill-graph-3{fill:#ed583b}svg circle,svg defs>linearGradient>stop,svg line,svg path:not(.path-settings){transition:fill .5s ease,stroke .5s ease,stop-color .5s ease}svg.svg-small{height:1.25rem;width:.75rem}svg.svg-white path{fill:#fff}svg.svg-inline--fa{display:inline-flex}svg.svg-inline--fa.fa-xl{height:1.25rem}svg.svg-inline--fa.fa-lg{height:1rem}svg.svg-inline--fa.fa-md{height:.75rem}svg.svg-inline--fa.fa-sm{height:.5rem}svg.svg-inline--fa.fa-xs{height:.25rem}.svg-fill-disabled path.fill-contrast{fill:#6c757d}.switch{align-items:center;background-color:#fff;border:1px solid #d2d2d2;border-radius:1.25rem;cursor:pointer;display:inline-flex;height:1.25rem;justify-content:flex-start;padding:.25rem;width:2.5rem}.switch .handle{background-color:#9f9f9f;border-radius:.75rem;height:.75rem;width:.75rem}.switch:focus{box-shadow:0 0 0 .2rem hsla(0,0%,62%,.25)}.switch[data-isswitchon=true]{background-color:#33db95;border:1px solid #8aeac2;justify-content:flex-end}.switch[data-isswitchon=true] .handle{background-color:#fff}.switch[data-isswitchon=true]:focus{box-shadow:0 0 0 .2rem rgba(51,219,149,.25)}.card{border:none;transition:background-color .5s ease,box-shadow .5s ease}.card .card-header{border-bottom:none}.card .card-body{transition:color .5s ease}.card .card-footer{border-top:none}.cards-container{height:67vh;margin-bottom:1.5rem}.dropdown .dropdown-item{font-weight:500;padding:.5rem 1rem}.dropdown .dropdown-item.active,.dropdown .dropdown-item:active,.dropdown .dropdown-item:focus,.dropdown .dropdown-item:hover{background-color:transparent;background-color:initial;background-image:none;color:#e1ba2d}.dropdown.dropdown-disabled{cursor:not-allowed;opacity:.2}.dropdown .btn.show,.dropdown .btn:first-child:active{box-shadow:none}.overflow-x-ellipsis{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.ps.ps--active-y>.ps__rail-y{opacity:1;width:.5rem;z-index:99}.ps.ps--active-y>.ps__rail-y .ps__thumb-y{background-color:#dfb316;width:.25rem}.ps.ps--active-x>.ps__rail-x{display:none!important}.modal.modal-lg .modal-dialog,.modal.modal-md .modal-dialog{max-width:450px}.modal.modal-xl .modal-dialog,.modal.modal-xxl .modal-dialog{max-width:60%}label.form-label{margin-bottom:0}.form-check .form-check-input{height:18px;width:18px}.form-check .form-check-label{margin:3px 0 0 3px}.input-group{box-shadow:0 1px 2px 0 rgba(16,24,40,.05);margin-top:.25rem}.input-group .form-control{box-shadow:none;font-size:14px;padding:.675rem;transition:background-color .5s ease}.input-group .form-control.form-control-left{border-bottom-left-radius:.375rem!important;border-bottom-right-radius:0;border-right:0;border-top-left-radius:.375rem!important;border-top-right-radius:0;cursor:pointer;padding-right:0}.input-group .form-control.form-control-right{border-bottom-left-radius:0;border-bottom-right-radius:.375rem!important;border-left:0;border-top-left-radius:0;border-top-right-radius:.375rem!important;padding-left:0}.input-group .form-control.form-control-middle{border-left:0;border-right:0;padding-left:0;padding-right:0;transition:background-color .5s ease}.input-group .form-control.password-input-ctrl{font-size:175%;padding-bottom:4px;padding-top:2px}.input-group .form-control:focus{box-shadow:0 1px 2px 0 rgba(16,24,40,.05)}.input-group .form-control-addon{padding:.675rem;transition:background-color .5s ease}.input-group .form-control-addon.form-control-addon-disabled{background-color:#e9ecef}.input-group .form-control-addon:focus{border-color:transparent;box-shadow:0 1px 2px 0 rgba(16,24,40,.05)}.input-group .form-control-addon.form-control-addon-right{border-left:0;cursor:pointer;padding-bottom:0;padding-top:0}.input-group .form-control-addon.form-control-addon-right.input-group-text{border-bottom-left-radius:0;border-bottom-right-radius:.375rem!important;border-top-left-radius:0;border-top-right-radius:.375rem!important}.input-group .form-control-addon.form-control-addon-right:hover svg path{stroke:#c09c1b}.input-group .form-control-addon.form-control-addon-right:hover svg path.svg-add{stroke:none;fill:#c09c1b}.input-group .form-control-addon.form-control-addon-right .btn-addon-close{cursor:pointer}.input-group .form-control-addon.form-control-addon-right .btn-addon-close svg{height:.675rem;width:.675rem}.input-group .form-control-addon.form-control-addon-right .btn-addon-close:hover path{fill:#c09c1b}.input-group .form-control-addon.form-control-addon-left{border-right:0}.input-group .form-control-addon.form-control-addon-left.input-group-text{border-bottom-left-radius:.375rem!important;border-bottom-right-radius:0;border-top-left-radius:.375rem!important;border-top-right-radius:0}.input-group.invalid .form-control{border-color:#dc3545}.input-group.invalid .form-control:focus{border-color:#dc3545;box-shadow:0 1px 2px 0 rgba(220,53,69,.05)}.input-group.invalid .form-control-addon{border-color:#dc3545}.input-group.invalid .form-control-addon:focus{border-color:#dc3545;box-shadow:none}.qr-container{position:relative;width:220px}.qr-container .qr-cln-logo{border:3px solid #fff;border-radius:50%;height:2.5rem;left:41%;padding:0;position:absolute;top:41%;width:2.5rem}.alert,.message{word-break:break-all}.message{align-items:center;display:flex;font-size:12px;font-weight:600;height:1.5rem;margin-bottom:.5rem;min-height:1.5rem}.message.invalid{color:#dc3545}.message.pending{color:#fe8e02}.message.success{color:#33db95}.list-group{overflow:hidden;position:relative}.list-group .list-group-item{border:none}.wallet-card{border-bottom-left-radius:0;border-bottom-right-radius:0;border-top-left-radius:1.25rem;border-top-right-radius:1.25rem}.information-svg{margin-right:.25rem;min-width:17px}.information-svg.svg-sm{display:block;height:.75rem}.no-btctx-dark{height:11.5rem;transition:all .5s ease}.no-btctx-dark .cls-1{fill:url(#lgbtcdark)}.no-btctx-dark .cls-2{-webkit-clip-path:url(#clippath);clip-path:url(#clippath)}.no-btctx-dark .cls-3,.no-btctx-dark .cls-4{fill:#1d2127}.no-btctx-dark .cls-4,.no-btctx-dark .cls-5{stroke:#b3b3b3;stroke-miterlimit:10;stroke-width:2px}.no-btctx-dark .cls-6{-webkit-clip-path:url(#clippath-1);clip-path:url(#clippath-1)}.no-btctx-dark .cls-7{-webkit-clip-path:url(#clippath-4);clip-path:url(#clippath-4)}.no-btctx-dark .cls-8{-webkit-clip-path:url(#clippath-3);clip-path:url(#clippath-3)}.no-btctx-dark .cls-9{-webkit-clip-path:url(#clippath-2);clip-path:url(#clippath-2)}.no-btctx-dark .cls-10{fill:#e0ba2d;opacity:.2}.no-btctx-dark .cls-5{fill:none}.no-btctx-dark .cls-11{isolation:isolate}.no-btctx-light{height:11.5rem;transition:all .5s ease}.no-btctx-light .cls-1{fill:url(#lgbtclight)}.no-btctx-light .cls-2{-webkit-clip-path:url(#clippath);clip-path:url(#clippath)}.no-btctx-light .cls-3,.no-btctx-light .cls-4{fill:#fff}.no-btctx-light .cls-4,.no-btctx-light .cls-5{stroke:#b3b3b3;stroke-miterlimit:10;stroke-width:2px}.no-btctx-light .cls-6{-webkit-clip-path:url(#clippath-1);clip-path:url(#clippath-1)}.no-btctx-light .cls-7{-webkit-clip-path:url(#clippath-4);clip-path:url(#clippath-4)}.no-btctx-light .cls-8{-webkit-clip-path:url(#clippath-3);clip-path:url(#clippath-3)}.no-btctx-light .cls-9{-webkit-clip-path:url(#clippath-2);clip-path:url(#clippath-2)}.no-btctx-light .cls-10{fill:#e0ba2d;opacity:.13}.no-btctx-light .cls-5{fill:none}.no-btctx-light .cls-11{isolation:isolate}.no-clntx-dark{height:11.5rem;transition:all .5s ease}.no-clntx-dark .cls-1{fill:url(#lgclndark)}.no-clntx-dark .cls-2{-webkit-clip-path:url(#clippath);clip-path:url(#clippath)}.no-clntx-dark .cls-3,.no-clntx-dark .cls-4{fill:#1d2127}.no-clntx-dark .cls-4,.no-clntx-dark .cls-5{stroke:#b3b3b3;stroke-miterlimit:10;stroke-width:2px}.no-clntx-dark .cls-6{-webkit-clip-path:url(#clippath-1);clip-path:url(#clippath-1)}.no-clntx-dark .cls-7{-webkit-clip-path:url(#clippath-4);clip-path:url(#clippath-4)}.no-clntx-dark .cls-8{-webkit-clip-path:url(#clippath-3);clip-path:url(#clippath-3)}.no-clntx-dark .cls-9{-webkit-clip-path:url(#clippath-2);clip-path:url(#clippath-2)}.no-clntx-dark .cls-10{-webkit-clip-path:url(#clippath-7);clip-path:url(#clippath-7)}.no-clntx-dark .cls-11{-webkit-clip-path:url(#clippath-8);clip-path:url(#clippath-8)}.no-clntx-dark .cls-12{-webkit-clip-path:url(#clippath-6);clip-path:url(#clippath-6)}.no-clntx-dark .cls-13{-webkit-clip-path:url(#clippath-5);clip-path:url(#clippath-5)}.no-clntx-dark .cls-14{-webkit-clip-path:url(#clippath-9);clip-path:url(#clippath-9)}.no-clntx-dark .cls-15{-webkit-clip-path:url(#clippath-14);clip-path:url(#clippath-14)}.no-clntx-dark .cls-16{-webkit-clip-path:url(#clippath-13);clip-path:url(#clippath-13)}.no-clntx-dark .cls-17{-webkit-clip-path:url(#clippath-12);clip-path:url(#clippath-12)}.no-clntx-dark .cls-18{-webkit-clip-path:url(#clippath-10);clip-path:url(#clippath-10)}.no-clntx-dark .cls-19{-webkit-clip-path:url(#clippath-15);clip-path:url(#clippath-15)}.no-clntx-dark .cls-20{-webkit-clip-path:url(#clippath-17);clip-path:url(#clippath-17)}.no-clntx-dark .cls-21{-webkit-clip-path:url(#clippath-16);clip-path:url(#clippath-16)}.no-clntx-dark .cls-22{-webkit-clip-path:url(#clippath-19);clip-path:url(#clippath-19)}.no-clntx-dark .cls-23{-webkit-clip-path:url(#clippath-11);clip-path:url(#clippath-11)}.no-clntx-dark .cls-24{-webkit-clip-path:url(#clippath-18);clip-path:url(#clippath-18)}.no-clntx-dark .cls-25{fill:#e0ba2d;opacity:.2}.no-clntx-dark .cls-5{fill:none}.no-clntx-dark .cls-26{isolation:isolate}.no-clntx-light{height:11.5rem;transition:all .5s ease}.no-clntx-light .cls-1{fill:url(#lgclnlight)}.no-clntx-light .cls-2{-webkit-clip-path:url(#clippath);clip-path:url(#clippath)}.no-clntx-light .cls-3,.no-clntx-light .cls-4{fill:#fff}.no-clntx-light .cls-4,.no-clntx-light .cls-5{stroke:#b3b3b3;stroke-miterlimit:10;stroke-width:2px}.no-clntx-light .cls-6{-webkit-clip-path:url(#clippath-1);clip-path:url(#clippath-1)}.no-clntx-light .cls-7{-webkit-clip-path:url(#clippath-4);clip-path:url(#clippath-4)}.no-clntx-light .cls-8{-webkit-clip-path:url(#clippath-3);clip-path:url(#clippath-3)}.no-clntx-light .cls-9{-webkit-clip-path:url(#clippath-2);clip-path:url(#clippath-2)}.no-clntx-light .cls-10{-webkit-clip-path:url(#clippath-7);clip-path:url(#clippath-7)}.no-clntx-light .cls-11{-webkit-clip-path:url(#clippath-8);clip-path:url(#clippath-8)}.no-clntx-light .cls-12{-webkit-clip-path:url(#clippath-6);clip-path:url(#clippath-6)}.no-clntx-light .cls-13{-webkit-clip-path:url(#clippath-5);clip-path:url(#clippath-5)}.no-clntx-light .cls-14{-webkit-clip-path:url(#clippath-9);clip-path:url(#clippath-9)}.no-clntx-light .cls-15{-webkit-clip-path:url(#clippath-14);clip-path:url(#clippath-14)}.no-clntx-light .cls-16{-webkit-clip-path:url(#clippath-13);clip-path:url(#clippath-13)}.no-clntx-light .cls-17{-webkit-clip-path:url(#clippath-12);clip-path:url(#clippath-12)}.no-clntx-light .cls-18{-webkit-clip-path:url(#clippath-10);clip-path:url(#clippath-10)}.no-clntx-light .cls-19{-webkit-clip-path:url(#clippath-15);clip-path:url(#clippath-15)}.no-clntx-light .cls-20{-webkit-clip-path:url(#clippath-17);clip-path:url(#clippath-17)}.no-clntx-light .cls-21{-webkit-clip-path:url(#clippath-16);clip-path:url(#clippath-16)}.no-clntx-light .cls-22{-webkit-clip-path:url(#clippath-19);clip-path:url(#clippath-19)}.no-clntx-light .cls-23{-webkit-clip-path:url(#clippath-11);clip-path:url(#clippath-11)}.no-clntx-light .cls-24{-webkit-clip-path:url(#clippath-18);clip-path:url(#clippath-18)}.no-clntx-light .cls-25{fill:#e0ba2d;opacity:.13}.no-clntx-light .cls-5{fill:none}.no-clntx-light .cls-26{isolation:isolate}.no-channel-dark{height:11.5rem;transition:all .5s ease}.no-channel-dark .cls-1,.no-channel-dark .cls-2{fill:none}.no-channel-dark .cls-3{fill:url(#lgchdark1)}.no-channel-dark .cls-4{-webkit-clip-path:url(#clippath);clip-path:url(#clippath)}.no-channel-dark .cls-5{fill:#b3b3b3}.no-channel-dark .cls-6{fill:#1d2127;stroke-miterlimit:10;stroke-width:2px}.no-channel-dark .cls-2,.no-channel-dark .cls-6{stroke:#b3b3b3}.no-channel-dark .cls-7{-webkit-clip-path:url(#clippath-1);clip-path:url(#clippath-1)}.no-channel-dark .cls-8{fill:#e0ba2d;opacity:.2}.no-channel-dark .cls-9{fill:url(#lgchdark2)}.no-channel-dark .cls-2{stroke-dasharray:0 20;stroke-linecap:round;stroke-linejoin:round;stroke-width:4px}.no-channel-light{height:11.5rem;transition:all .5s ease}.no-channel-light .cls-1,.no-channel-light .cls-2{fill:none}.no-channel-light .cls-3{fill:url(#lgchlight1)}.no-channel-light .cls-4{-webkit-clip-path:url(#clippath);clip-path:url(#clippath)}.no-channel-light .cls-5{fill:#b3b3b3}.no-channel-light .cls-6{fill:#fff;stroke-miterlimit:10;stroke-width:2px}.no-channel-light .cls-2,.no-channel-light .cls-6{stroke:#b3b3b3}.no-channel-light .cls-7{-webkit-clip-path:url(#clippath-1);clip-path:url(#clippath-1)}.no-channel-light .cls-8{fill:#e0ba2d;opacity:.13}.no-channel-light .cls-9{fill:url(#lgchlight2)}.no-channel-light .cls-2{stroke-dasharray:0 20;stroke-linecap:round;stroke-linejoin:round;stroke-width:4px}.opacity-8{opacity:.8}.opacity-7{opacity:.7}.recharts-wrapper svg g path:focus{outline:none}.recharts-wrapper .recharts-tooltip-wrapper{z-index:9999}.react-datepicker-popper .react-datepicker{border-radius:1.25rem;border-width:.5px}.react-datepicker-popper .react-datepicker .react-datepicker__navigation .react-datepicker__navigation-icon:before{border-width:1px 1px 0 0}.react-datepicker-popper .react-datepicker .react-datepicker__navigation:hover .react-datepicker__navigation-icon:before{border-color:#e1ba2d}.react-datepicker-popper .react-datepicker .react-datepicker__month-container:focus-visible{outline:none}.react-datepicker-popper .react-datepicker .react-datepicker__month-container .react-datepicker__day:hover{border-color:#e1ba2d}.react-datepicker-popper .react-datepicker .react-datepicker__month-container .react-datepicker__day.react-datepicker__day--in-range,.react-datepicker-popper .react-datepicker .react-datepicker__month-container .react-datepicker__day.react-datepicker__day--in-selecting-range,.react-datepicker-popper .react-datepicker .react-datepicker__month-container .react-datepicker__day.react-datepicker__day--keyboard-selected,.react-datepicker-popper .react-datepicker .react-datepicker__month-container .react-datepicker__day.react-datepicker__day--selected,.react-datepicker-popper .react-datepicker .react-datepicker__month-container .react-datepicker__day.react-datepicker__month-text--in-range,.react-datepicker-popper .react-datepicker .react-datepicker__month-container .react-datepicker__day.react-datepicker__month-text--in-selecting-range,.react-datepicker-popper .react-datepicker .react-datepicker__month-container .react-datepicker__day.react-datepicker__month-text--keyboard-selected,.react-datepicker-popper .react-datepicker .react-datepicker__month-container .react-datepicker__day.react-datepicker__month-text--selected,.react-datepicker-popper .react-datepicker .react-datepicker__month-container .react-datepicker__day.react-datepicker__quarter-text--in-range,.react-datepicker-popper .react-datepicker .react-datepicker__month-container .react-datepicker__day.react-datepicker__quarter-text--in-selecting-range,.react-datepicker-popper .react-datepicker .react-datepicker__month-container .react-datepicker__day.react-datepicker__quarter-text--keyboard-selected,.react-datepicker-popper .react-datepicker .react-datepicker__month-container .react-datepicker__day.react-datepicker__quarter-text--selected,.react-datepicker-popper .react-datepicker .react-datepicker__month-container .react-datepicker__day.react-datepicker__year-text--in-range,.react-datepicker-popper .react-datepicker .react-datepicker__month-container .react-datepicker__day.react-datepicker__year-text--in-selecting-range,.react-datepicker-popper .react-datepicker .react-datepicker__month-container .react-datepicker__day.react-datepicker__year-text--keyboard-selected,.react-datepicker-popper .react-datepicker .react-datepicker__month-container .react-datepicker__day.react-datepicker__year-text--selected{background-color:#e1ba2d}.react-datepicker-popper .react-datepicker .react-datepicker__month-container .react-datepicker__day--disabled{cursor:not-allowed}.delayed-load{animation:fadeIn .1s ease-in .3s forwards;opacity:0}@keyframes growX{0%{opacity:0;transform:scaleX(0)}50%{opacity:.3}to{opacity:1;transform:scaleX(1)}}@keyframes growDelayed{0%{opacity:0;transform:scale(0)}30%{opacity:0;transform:scale(.3)}to{opacity:.8;transform:scale(1)}}@keyframes fadeIn{0%{opacity:0}to{opacity:1}}.list-scroll-container{max-height:48vh}.toast-container .toast{border:1px solid #9f9f9f;border-radius:.5rem;box-shadow:0 8px 16px 0 rgba(58,66,71,.2)}.toast-container .toast.opaque{background-color:#fff}.toast-container .toast .message-type-box{background-color:#9f9f9f;border-bottom-left-radius:.35rem;border-top-left-radius:.35rem}.toast-container .toast span.btn-toast-close{cursor:pointer;padding:.5rem}.toast-container .toast span.btn-toast-close svg{height:.75rem;width:.75rem}.toast-container .toast span.btn-toast-close svg path{transition:all .3s ease}.toast-container .toast span.btn-toast-close:hover svg path{stroke:#797979}.toast-container .toast[data-bg=success]{border:1px solid #33db95}.toast-container .toast[data-bg=success] .message-type-box{background-color:#33db95}.toast-container .toast[data-bg=danger]{border:1px solid #dc3545}.toast-container .toast[data-bg=danger] .message-type-box{background-color:#dc3545}.toast-container .toast[data-bg=warning]{border:1px solid #fe8e02}.toast-container .toast[data-bg=warning] .message-type-box{background-color:#fe8e02}.toast-container .toast[data-bg=primary]{border:1px solid #e1ba2d}.toast-container .toast[data-bg=primary] .message-type-box{background-color:#e1ba2d}[data-bs-theme=dark] .toast{box-shadow:0 8px 16px 0 hsla(0,0%,62%,.2)}[data-bs-theme=dark] .toast.opaque{background-color:#0c0c0f}[data-bs-theme=dark] .toast span.btn-toast-close:hover svg path{stroke:#e0e2e5}.fa-circle-xmark path{fill:#9f9f9f}[data-bs-theme=dark] .fa-circle-xmark path{fill:#fff}.modal-content .modal-footer,.modal-content .modal-header{border:none}.dropdown.dropdown-network .dropdown-toggle.btn.btn-secondary{background-image:none;border-radius:.375rem!important;box-shadow:0 1px 2px rgba(16,24,40,.05);padding:.675rem}.dropdown.dropdown-network .dropdown-menu{font-size:.875rem;width:100%}[data-bs-theme=light] .dropdown.dropdown-network .dropdown-toggle.btn.btn-secondary{background-color:#fff;border-color:#dee2e6;color:#3a4247}[data-bs-theme=light] .dropdown.dropdown-network .dropdown-menu .dropdown-item{color:#3a4247}[data-bs-theme=light] .dropdown.dropdown-network .dropdown-menu .dropdown-item.active,[data-bs-theme=light] .dropdown.dropdown-network .dropdown-menu .dropdown-item:active,[data-bs-theme=light] .dropdown.dropdown-network .dropdown-menu .dropdown-item:focus,[data-bs-theme=light] .dropdown.dropdown-network .dropdown-menu .dropdown-item:hover{color:#e1ba2d}[data-bs-theme=dark] .dropdown.dropdown-network .dropdown-toggle.btn.btn-secondary{background-color:#303032;border-color:#495057;color:#fff}[data-bs-theme=dark] .dropdown.dropdown-network .dropdown-menu .dropdown-item{color:#b7bbc2}[data-bs-theme=dark] .dropdown.dropdown-network .dropdown-menu .dropdown-item.active,[data-bs-theme=dark] .dropdown.dropdown-network .dropdown-menu .dropdown-item:active,[data-bs-theme=dark] .dropdown.dropdown-network .dropdown-menu .dropdown-item:focus,[data-bs-theme=dark] .dropdown.dropdown-network .dropdown-menu .dropdown-item:hover{color:#e1ba2d}.alert{padding:.75rem}.alert.alert-danger,.alert.alert-success,.alert.alert-warning{transition:all .3s ease}.alert.alert-danger .btn-sm-svg.btn-svg-copy svg path{stroke:#dc3545}.alert.alert-danger .btn-sm-svg.btn-svg-copy svg:hover path{stroke:#7c151f}.alert.alert-success .btn-sm-svg.btn-svg-copy svg path{stroke:#33db95}.alert.alert-success .btn-sm-svg.btn-svg-copy svg:hover path{stroke:#157950}.alert .text-status{max-height:8rem;overflow:hidden}.alert .btn-sm-svg.btn-svg-copy{align-items:flex-start;cursor:pointer;display:inline-flex;padding:0}.modal-content{border:none}.modal-content .modal-body .modal-box{border:1px solid #e1ba2d;border-radius:.5rem;box-shadow:0 8px 16px 0 rgba(58,66,71,.2)}.modal-content .modal-body .message-type-box{background-color:#e1ba2d;border-bottom-left-radius:.35rem;border-top-left-radius:.35rem}@font-face{font-display:swap;font-family:Inter;font-style:italic;font-weight:400;src:url(/static/media/Inter-Thin.f341ca512063c66296d1.ttf) format("truetype")}@font-face{font-display:swap;font-family:Inter;font-style:normal;font-weight:500;src:url(/static/media/Inter-Medium.6dcbc9bed1ec438907ee.ttf) format("truetype")}@font-face{font-display:swap;font-family:Inter;font-style:normal;font-weight:600;src:url(/static/media/Inter-SemiBold.4d56bb21f2399db8ad48.ttf) format("truetype")}@font-face{font-display:swap;font-family:Inter;font-style:normal;font-weight:700;src:url(/static/media/Inter-Bold.88fa7ae373b07b41ecce.ttf) format("truetype")}.terminal-container{display:flex;flex-direction:column}.terminal-input{height:8rem}.terminal-input,.terminal-output{overflow:hidden;resize:none;white-space:pre-wrap}.terminal-output{background-color:#ebeff9;border:var(--bs-border-width) solid var(--bs-border-color);border-radius:1.25rem;box-shadow:0 1px 2px rgba(16,24,40,.05);font-size:14px;height:47vh;margin-bottom:1.5rem;padding:1rem 0 1rem 2rem;width:100%}.btn-copy-output{background:transparent;border:none;border-radius:1.25rem;cursor:pointer;padding:1rem;position:absolute;right:0;z-index:1}.btn-copy-output:focus-visible,.btn-copy-output:hover{outline:none}.btn-copy-output:focus-visible svg path,.btn-copy-output:hover svg path{stroke:#c09c1b}.btn-copy-output:focus-visible svg path.svg-add,.btn-copy-output:hover svg path.svg-add{stroke:none;fill:#c09c1b}[data-bs-theme=dark] .terminal-output{background-color:#0c0c0f;border:var(--bs-border-width) solid var(--bs-border-color)} -/*# sourceMappingURL=687.19b1d4d6.chunk.css.map*/ \ No newline at end of file diff --git a/apps/frontend/build/static/css/687.19b1d4d6.chunk.css.map b/apps/frontend/build/static/css/687.19b1d4d6.chunk.css.map deleted file mode 100644 index 9492fb6a..00000000 --- a/apps/frontend/build/static/css/687.19b1d4d6.chunk.css.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"static/css/687.19b1d4d6.chunk.css","mappings":"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,eF0nBqB,CEznBrB,eL6OiC,CA7IjC,0BKpGF,WLuQM,cA9E6B,CKnLlC,CAND,WLgQM,iCK7PJ,eF0nBqB,CEznBrB,eL6OiC,CA7IjC,0BKpGF,WLuQM,gBA9E6B,CKnLlC,CAND,WLgQM,iCK7PJ,eF0nBqB,CEznBrB,eL6OiC,CA7IjC,0BKpGF,WLuQM,cA9E6B,CKnLlC,CAND,WLgQM,iCK7PJ,eF0nBqB,CEznBrB,eL6OiC,CA7IjC,0BKpGF,WLuQM,gBA9E6B,CKnLlC,CAoBF,4BCxDC,gBADA,cACgB,CD6DjB,kBAEC,oBAAqB,CADvB,mCAII,kBFsoB+B,CEroBhC,YLuNG,gBAnE+B,CKzInC,wBAAyB,CAC1B,YL2MK,kBKvMJ,kBLoImC,CKrIrC,wBAKI,eAAgB,CACjB,mBAOD,cL2LI,gBAnE+B,CK1HnC,kBFuTW,CExTX,gBFnFgB,CEkFlB,0BAOI,oBAAqB,CE9FxB,0BCKC,YAHA,cAGY,CDLb,eAMC,qBJ+jDmE,CI/jDnE,kCJ+jDmE,CI9jDnE,wBJgkD6E,CIhkD7E,0DJgkD6E,CC7jD3E,qBD8jD6E,CC9jD7E,qCD8jD6E,CMnkD3E,4CNokD2E,CMpkD3E,kCNokD2E,CIpkD/E,cCAY,CDQb,QAQC,oBAAqB,CACtB,YAIC,aAAY,CADZ,mBACc,CACf,gBAIC,yDPuPI,gBG2zC+E,CIjjDpF,mGGtCC,oBAA+B,CAC/B,eAA+B,CAK/B,iBADA,iBAAkB,CADlB,wCAA4D,CAD5D,yCAA6D,CAD7D,UAIiB,CCsDf,yBC5CE,yBACE,eTmeG,CSleJ,CD0CH,yBC5CE,uCACE,eToeG,CSneJ,CD0CH,yBC5CE,qDACE,eTqeG,CSpeJ,CD0CH,0BC5CE,mEACE,gBTseI,CSreL,CD0CH,0BC5CE,kFACE,gBTueK,CSteN,CVMP,MWrBI,oBAA6C,CAA7C,wBAA6C,CAA7C,wBAA6C,CAA7C,wBAA6C,CAA7C,yBAA6C,CAA7C,0BAA6C,CAEhD,KCHC,oBAA+B,CAC/B,eAA+B,CAC/B,YAAa,CACb,cAAe,CAIf,yCADA,yCAA6D,CAD7D,sCAE4D,CDD5D,OCUA,aAAc,CAKd,8BAHA,cAAe,CAEf,wCAA4D,CAD5D,yCAA6D,CAF7D,UAI+C,CA+C3C,KACE,QAAW,CACZ,iBAlCL,aAAc,CACd,UAAW,CAcX,cACE,aAAc,CACd,UAAoC,CAFtC,cACE,aAAc,CACd,SAAoC,CAFtC,cACE,aAAc,CACd,eAAoC,CAFtC,cACE,aAAc,CACd,SAAoC,CAFtC,cACE,aAAc,CACd,SAAoC,CAFtC,cACE,aAAc,CACd,eAAoC,CACrC,UAlBD,aAAc,CACd,UAAW,CAiDN,OA5DH,aAAc,CACd,cAA0C,CA+DpC,OAhEN,aAAc,CACd,eAA0C,CA+DpC,OAhEN,aAAc,CACd,SAA0C,CA+DpC,OAhEN,aAAc,CACd,eAA0C,CA+DpC,OAhEN,aAAc,CACd,eAA0C,CA+DpC,OAhEN,aAAc,CACd,SAA0C,CA+DpC,OAhEN,aAAc,CACd,eAA0C,CA+DpC,OAhEN,aAAc,CACd,eAA0C,CA+DpC,OAhEN,aAAc,CACd,SAA0C,CA+DpC,QAhEN,aAAc,CACd,eAA0C,CA+DpC,QAhEN,aAAc,CACd,eAA0C,CA+DpC,QAhEN,aAAc,CACd,UAA0C,CAiEnC,UAlDT,oBAA8C,CAwDpC,UAxDV,qBAA8C,CAwDpC,UAxDV,eAA8C,CAwDpC,UAxDV,qBAA8C,CAwDpC,UAxDV,qBAA8C,CAwDpC,UAxDV,eAA8C,CAwDpC,UAxDV,qBAA8C,CAwDpC,UAxDV,qBAA8C,CAwDpC,UAxDV,eAA8C,CAwDpC,WAxDV,qBAA8C,CAwDpC,WAxDV,qBAA8C,CA0DnC,WAWH,eAA+B,CAChC,WAIC,eAA+B,CAPjC,WAEE,oBAA+B,CAChC,WAIC,oBAA+B,CAPjC,WAEE,mBAA+B,CAChC,WAIC,mBAA+B,CAPjC,WAEE,kBAA+B,CAChC,WAIC,kBAA+B,CAPjC,WAEE,oBAA+B,CAChC,WAIC,oBAA+B,CAPjC,WAEE,kBAA+B,CAChC,WAIC,kBAA+B,CH1DrC,yBGUE,QACE,QAAW,CACZ,oBAlCL,aAAc,CACd,UAAW,CAcX,iBACE,aAAc,CACd,UAAoC,CAFtC,iBACE,aAAc,CACd,SAAoC,CAFtC,iBACE,aAAc,CACd,eAAoC,CAFtC,iBACE,aAAc,CACd,SAAoC,CAFtC,iBACE,aAAc,CACd,SAAoC,CAFtC,iBACE,aAAc,CACd,eAAoC,CACrC,aAlBD,aAAc,CACd,UAAW,CAiDN,UA5DH,aAAc,CACd,cAA0C,CA+DpC,UAhEN,aAAc,CACd,eAA0C,CA+DpC,UAhEN,aAAc,CACd,SAA0C,CA+DpC,UAhEN,aAAc,CACd,eAA0C,CA+DpC,UAhEN,aAAc,CACd,eAA0C,CA+DpC,UAhEN,aAAc,CACd,SAA0C,CA+DpC,UAhEN,aAAc,CACd,eAA0C,CA+DpC,UAhEN,aAAc,CACd,eAA0C,CA+DpC,UAhEN,aAAc,CACd,SAA0C,CA+DpC,WAhEN,aAAc,CACd,eAA0C,CA+DpC,WAhEN,aAAc,CACd,eAA0C,CA+DpC,WAhEN,aAAc,CACd,UAA0C,CAiEnC,aAlDT,aAA4B,CAwDlB,aAxDV,oBAA8C,CAwDpC,aAxDV,qBAA8C,CAwDpC,aAxDV,eAA8C,CAwDpC,aAxDV,qBAA8C,CAwDpC,aAxDV,qBAA8C,CAwDpC,aAxDV,eAA8C,CAwDpC,aAxDV,qBAA8C,CAwDpC,aAxDV,qBAA8C,CAwDpC,aAxDV,eAA8C,CAwDpC,cAxDV,qBAA8C,CAwDpC,cAxDV,qBAA8C,CA0DnC,iBAWH,eAA+B,CAChC,iBAIC,eAA+B,CAPjC,iBAEE,oBAA+B,CAChC,iBAIC,oBAA+B,CAPjC,iBAEE,mBAA+B,CAChC,iBAIC,mBAA+B,CAPjC,iBAEE,kBAA+B,CAChC,iBAIC,kBAA+B,CAPjC,iBAEE,oBAA+B,CAChC,iBAIC,oBAA+B,CAPjC,iBAEE,kBAA+B,CAChC,iBAIC,kBAA+B,CAChC,CH3DL,yBGUE,QACE,QAAW,CACZ,oBAlCL,aAAc,CACd,UAAW,CAcX,iBACE,aAAc,CACd,UAAoC,CAFtC,iBACE,aAAc,CACd,SAAoC,CAFtC,iBACE,aAAc,CACd,eAAoC,CAFtC,iBACE,aAAc,CACd,SAAoC,CAFtC,iBACE,aAAc,CACd,SAAoC,CAFtC,iBACE,aAAc,CACd,eAAoC,CACrC,aAlBD,aAAc,CACd,UAAW,CAiDN,UA5DH,aAAc,CACd,cAA0C,CA+DpC,UAhEN,aAAc,CACd,eAA0C,CA+DpC,UAhEN,aAAc,CACd,SAA0C,CA+DpC,UAhEN,aAAc,CACd,eAA0C,CA+DpC,UAhEN,aAAc,CACd,eAA0C,CA+DpC,UAhEN,aAAc,CACd,SAA0C,CA+DpC,UAhEN,aAAc,CACd,eAA0C,CA+DpC,UAhEN,aAAc,CACd,eAA0C,CA+DpC,UAhEN,aAAc,CACd,SAA0C,CA+DpC,WAhEN,aAAc,CACd,eAA0C,CA+DpC,WAhEN,aAAc,CACd,eAA0C,CA+DpC,WAhEN,aAAc,CACd,UAA0C,CAiEnC,aAlDT,aAA4B,CAwDlB,aAxDV,oBAA8C,CAwDpC,aAxDV,qBAA8C,CAwDpC,aAxDV,eAA8C,CAwDpC,aAxDV,qBAA8C,CAwDpC,aAxDV,qBAA8C,CAwDpC,aAxDV,eAA8C,CAwDpC,aAxDV,qBAA8C,CAwDpC,aAxDV,qBAA8C,CAwDpC,aAxDV,eAA8C,CAwDpC,cAxDV,qBAA8C,CAwDpC,cAxDV,qBAA8C,CA0DnC,iBAWH,eAA+B,CAChC,iBAIC,eAA+B,CAPjC,iBAEE,oBAA+B,CAChC,iBAIC,oBAA+B,CAPjC,iBAEE,mBAA+B,CAChC,iBAIC,mBAA+B,CAPjC,iBAEE,kBAA+B,CAChC,iBAIC,kBAA+B,CAPjC,iBAEE,oBAA+B,CAChC,iBAIC,oBAA+B,CAPjC,iBAEE,kBAA+B,CAChC,iBAIC,kBAA+B,CAChC,CH3DL,yBGUE,QACE,QAAW,CACZ,oBAlCL,aAAc,CACd,UAAW,CAcX,iBACE,aAAc,CACd,UAAoC,CAFtC,iBACE,aAAc,CACd,SAAoC,CAFtC,iBACE,aAAc,CACd,eAAoC,CAFtC,iBACE,aAAc,CACd,SAAoC,CAFtC,iBACE,aAAc,CACd,SAAoC,CAFtC,iBACE,aAAc,CACd,eAAoC,CACrC,aAlBD,aAAc,CACd,UAAW,CAiDN,UA5DH,aAAc,CACd,cAA0C,CA+DpC,UAhEN,aAAc,CACd,eAA0C,CA+DpC,UAhEN,aAAc,CACd,SAA0C,CA+DpC,UAhEN,aAAc,CACd,eAA0C,CA+DpC,UAhEN,aAAc,CACd,eAA0C,CA+DpC,UAhEN,aAAc,CACd,SAA0C,CA+DpC,UAhEN,aAAc,CACd,eAA0C,CA+DpC,UAhEN,aAAc,CACd,eAA0C,CA+DpC,UAhEN,aAAc,CACd,SAA0C,CA+DpC,WAhEN,aAAc,CACd,eAA0C,CA+DpC,WAhEN,aAAc,CACd,eAA0C,CA+DpC,WAhEN,aAAc,CACd,UAA0C,CAiEnC,aAlDT,aAA4B,CAwDlB,aAxDV,oBAA8C,CAwDpC,aAxDV,qBAA8C,CAwDpC,aAxDV,eAA8C,CAwDpC,aAxDV,qBAA8C,CAwDpC,aAxDV,qBAA8C,CAwDpC,aAxDV,eAA8C,CAwDpC,aAxDV,qBAA8C,CAwDpC,aAxDV,qBAA8C,CAwDpC,aAxDV,eAA8C,CAwDpC,cAxDV,qBAA8C,CAwDpC,cAxDV,qBAA8C,CA0DnC,iBAWH,eAA+B,CAChC,iBAIC,eAA+B,CAPjC,iBAEE,oBAA+B,CAChC,iBAIC,oBAA+B,CAPjC,iBAEE,mBAA+B,CAChC,iBAIC,mBAA+B,CAPjC,iBAEE,kBAA+B,CAChC,iBAIC,kBAA+B,CAPjC,iBAEE,oBAA+B,CAChC,iBAIC,oBAA+B,CAPjC,iBAEE,kBAA+B,CAChC,iBAIC,kBAA+B,CAChC,CH3DL,0BGUE,QACE,QAAW,CACZ,oBAlCL,aAAc,CACd,UAAW,CAcX,iBACE,aAAc,CACd,UAAoC,CAFtC,iBACE,aAAc,CACd,SAAoC,CAFtC,iBACE,aAAc,CACd,eAAoC,CAFtC,iBACE,aAAc,CACd,SAAoC,CAFtC,iBACE,aAAc,CACd,SAAoC,CAFtC,iBACE,aAAc,CACd,eAAoC,CACrC,aAlBD,aAAc,CACd,UAAW,CAiDN,UA5DH,aAAc,CACd,cAA0C,CA+DpC,UAhEN,aAAc,CACd,eAA0C,CA+DpC,UAhEN,aAAc,CACd,SAA0C,CA+DpC,UAhEN,aAAc,CACd,eAA0C,CA+DpC,UAhEN,aAAc,CACd,eAA0C,CA+DpC,UAhEN,aAAc,CACd,SAA0C,CA+DpC,UAhEN,aAAc,CACd,eAA0C,CA+DpC,UAhEN,aAAc,CACd,eAA0C,CA+DpC,UAhEN,aAAc,CACd,SAA0C,CA+DpC,WAhEN,aAAc,CACd,eAA0C,CA+DpC,WAhEN,aAAc,CACd,eAA0C,CA+DpC,WAhEN,aAAc,CACd,UAA0C,CAiEnC,aAlDT,aAA4B,CAwDlB,aAxDV,oBAA8C,CAwDpC,aAxDV,qBAA8C,CAwDpC,aAxDV,eAA8C,CAwDpC,aAxDV,qBAA8C,CAwDpC,aAxDV,qBAA8C,CAwDpC,aAxDV,eAA8C,CAwDpC,aAxDV,qBAA8C,CAwDpC,aAxDV,qBAA8C,CAwDpC,aAxDV,eAA8C,CAwDpC,cAxDV,qBAA8C,CAwDpC,cAxDV,qBAA8C,CA0DnC,iBAWH,eAA+B,CAChC,iBAIC,eAA+B,CAPjC,iBAEE,oBAA+B,CAChC,iBAIC,oBAA+B,CAPjC,iBAEE,mBAA+B,CAChC,iBAIC,mBAA+B,CAPjC,iBAEE,kBAA+B,CAChC,iBAIC,kBAA+B,CAPjC,iBAEE,oBAA+B,CAChC,iBAIC,oBAA+B,CAPjC,iBAEE,kBAA+B,CAChC,iBAIC,kBAA+B,CAChC,CH3DL,0BGUE,SACE,QAAW,CACZ,qBAlCL,aAAc,CACd,UAAW,CAcX,kBACE,aAAc,CACd,UAAoC,CAFtC,kBACE,aAAc,CACd,SAAoC,CAFtC,kBACE,aAAc,CACd,eAAoC,CAFtC,kBACE,aAAc,CACd,SAAoC,CAFtC,kBACE,aAAc,CACd,SAAoC,CAFtC,kBACE,aAAc,CACd,eAAoC,CACrC,cAlBD,aAAc,CACd,UAAW,CAiDN,WA5DH,aAAc,CACd,cAA0C,CA+DpC,WAhEN,aAAc,CACd,eAA0C,CA+DpC,WAhEN,aAAc,CACd,SAA0C,CA+DpC,WAhEN,aAAc,CACd,eAA0C,CA+DpC,WAhEN,aAAc,CACd,eAA0C,CA+DpC,WAhEN,aAAc,CACd,SAA0C,CA+DpC,WAhEN,aAAc,CACd,eAA0C,CA+DpC,WAhEN,aAAc,CACd,eAA0C,CA+DpC,WAhEN,aAAc,CACd,SAA0C,CA+DpC,YAhEN,aAAc,CACd,eAA0C,CA+DpC,YAhEN,aAAc,CACd,eAA0C,CA+DpC,YAhEN,aAAc,CACd,UAA0C,CAiEnC,cAlDT,aAA4B,CAwDlB,cAxDV,oBAA8C,CAwDpC,cAxDV,qBAA8C,CAwDpC,cAxDV,eAA8C,CAwDpC,cAxDV,qBAA8C,CAwDpC,cAxDV,qBAA8C,CAwDpC,cAxDV,eAA8C,CAwDpC,cAxDV,qBAA8C,CAwDpC,cAxDV,qBAA8C,CAwDpC,cAxDV,eAA8C,CAwDpC,eAxDV,qBAA8C,CAwDpC,eAxDV,qBAA8C,CA0DnC,mBAWH,eAA+B,CAChC,mBAIC,eAA+B,CAPjC,mBAEE,oBAA+B,CAChC,mBAIC,oBAA+B,CAPjC,mBAEE,mBAA+B,CAChC,mBAIC,mBAA+B,CAPjC,mBAEE,kBAA+B,CAChC,mBAIC,kBAA+B,CAPjC,mBAEE,oBAA+B,CAChC,mBAIC,oBAA+B,CAPjC,mBAEE,kBAA+B,CAChC,mBAIC,kBAA+B,CAChC,CCtHT,OAEE,6BAA+C,CAC/C,0BAAyC,CACzC,8BAAiD,CACjD,2BAA2C,CAE3C,yCAAqC,CACrC,+BAA+B,CAC/B,8CAAmD,CACnD,gCAA6C,CAC7C,iDAAqD,CACrD,6DAA+C,CAC/C,gDAAmD,CACnD,2DAA6C,CAC7C,+CAAiD,CACjD,4DAA2C,CAK3C,0CAFA,kBZkYW,CYjYX,kBZusB+B,CYzsB/B,UAGqE,CArBvE,yBAgCI,mCAAqD,CACrD,uBZ+sBqE,CY/sBrE,0CZ+sBqE,CY9sBrE,iKAHA,2BAA4J,CAA5J,kFAA4J,CAF5J,aAKgL,CAlCpL,aAsCI,sBAAuB,CAtC3B,aA0CI,qBAAsB,CACvB,qBAID,oEZusBwC,CYtsBzC,aAOC,gBAAiB,CAClB,4BAUG,cZupBgC,CYtpBjC,gCAeC,wDAAmC,CAFvC,kCAMM,wDZ0pBmE,CYzpBpE,oCAOD,qBAAsB,CAH1B,qCAOI,kBAAmB,CAapB,kGAMC,mDAA+C,CAC/C,6CAAyC,CAC1C,cAQD,mDAAiD,CACjD,6CAA2C,CAC5C,8BAQG,kDAAiD,CACjD,4CAA2C,CC5I7C,eAOE,qBAAqC,CACrC,qBAA+B,CAC/B,+BAAmD,CACnD,6BAA+C,CAC/C,6BAAqD,CACrD,4BAA6C,CAC7C,4BAAmD,CACnD,2BAA2C,CAC3C,2BAGqE,CAlBvE,gCAkBE,0CADA,2BACqE,CAlBvE,iBAOE,qBAAqC,CACrC,qBAA+B,CAC/B,+BAAmD,CACnD,6BAA+C,CAC/C,6BAAqD,CACrD,4BAA6C,CAC7C,4BAAmD,CACnD,2BAA2C,CAC3C,2BAGqE,CAlBvE,eAOE,qBAAqC,CACrC,qBAA+B,CAC/B,+BAAmD,CACnD,6BAA+C,CAC/C,6BAAqD,CACrD,4BAA6C,CAC7C,4BAAmD,CACnD,2BAA2C,CAC3C,2BAGqE,CAlBvE,2BAkBE,0CADA,2BACqE,CAlBvE,YAOE,qBAAqC,CACrC,qBAA+B,CAC/B,+BAAmD,CACnD,6BAA+C,CAC/C,6BAAqD,CACrD,4BAA6C,CAC7C,4BAAmD,CACnD,2BAA2C,CAC3C,2BAGqE,CAlBvE,eAOE,qBAAqC,CACrC,qBAA+B,CAC/B,+BAAmD,CACnD,6BAA+C,CAC/C,6BAAqD,CACrD,4BAA6C,CAC7C,4BAAmD,CACnD,2BAA2C,CAC3C,2BAGqE,CAlBvE,6BAkBE,0CADA,2BACqE,CAlBvE,cAOE,qBAAqC,CACrC,qBAA+B,CAC/B,+BAAmD,CACnD,6BAA+C,CAC/C,6BAAqD,CACrD,4BAA6C,CAC7C,4BAAmD,CACnD,2BAA2C,CAC3C,2BAGqE,CAlBvE,aAOE,qBAAqC,CACrC,qBAA+B,CAC/B,+BAAmD,CACnD,6BAA+C,CAC/C,6BAAqD,CACrD,4BAA6C,CAC7C,4BAAmD,CACnD,2BAA2C,CAC3C,2BAGqE,CAlBvE,yBAkBE,0CADA,2BACqE,CAlBvE,YAOE,qBAAqC,CACrC,qBAA+B,CAC/B,+BAAmD,CACnD,6BAA+C,CAC/C,6BAAqD,CACrD,4BAA6C,CAC7C,4BAAmD,CACnD,2BAA2C,CAC3C,2BAGqE,CACtE,kBDkJG,iCADA,eACiC,CJ3FnC,4BIyFA,qBAEE,iCADA,eACiC,CAClC,CJ5FD,4BIyFA,qBAEE,iCADA,eACiC,CAClC,CJ5FD,4BIyFA,qBAEE,iCADA,eACiC,CAClC,CJ5FD,6BIyFA,qBAEE,iCADA,eACiC,CAClC,CJ5FD,6BIyFA,sBAEE,iCADA,eACiC,CAClC,CEpKL,YACE,mBdu2B2C,Ccl2B5C,gBjBqRK,iBAnE+B,CiBvMnC,gBAJA,eAAgB,CADhB,kCC0N8D,CD1N9D,qDC0N8D,CD3N9D,+BC2N8D,CD3N9D,kDdqmB+B,Cc7lBhC,mBjBwQK,kBiBpQJ,gCC+M8D,CD/M9D,mDC+M8D,CDhN9D,6BCgN8D,CDhN9D,gDjBkMmC,CiB/LpC,mBjBkQK,kBiB9PJ,iCCyM8D,CDzM9D,oDCyM8D,CD1M9D,8BC0M8D,CD1M9D,iDjB4LmC,CiBzLpC,WE1BC,yDnBsRI,gBAnE+B,CmBvNnC,iBhBm2BuF,CgB91BxF,cCGC,uBAAgB,CAAhB,eAAgB,CAEhB,2BAA4B,CAD5B,qBjBq3BuE,CiBr3BvE,kCjBq3BuE,CiBn3BvE,wBjBy3BiF,CiBz3BjF,0DjBy3BiF,CCt3B/E,qBD03BiF,CC13BjF,qCD03BiF,CM/3B/E,2CN63BqF,CM73BrF,qCN63BqF,CiB/3BzF,aCkBY,CDzBZ,aAAc,CpB0RV,cAnE+B,CoBlNnC,ejBkmB+B,CiBjmB/B,ejBymB+B,CiB7mB/B,sBjB8wBkC,CmBrwB9B,qEFVJ,UjB85BgG,CmBh5B5F,uCFhBN,cEiBQ,eAAgB,CF2FvB,CA5GD,yBAqBI,eAAgB,CArBpB,wDAwBM,cAAe,CAxBrB,oBA+BI,qBjBg2BqE,CiBh2BrE,kCjBg2BqE,CiB/1BrE,oBF0KiC,CThM/B,sJWoBF,ajBs2B2E,CiBt2B3E,0BjBs2B2E,CiBn2B3E,SjBCa,CiBlCjB,2CAsDI,YAAmE,CAKnE,QAAO,CAXP,cAWS,CA3Db,qCAiEI,aAAc,CACd,SAAU,CAlEd,2BAuEI,wBjB40BqF,CiB50BrF,+BjB40BqF,CiB10BrF,SAAU,CAzEd,uBAmFI,wBjB7Ec,CiBgFd,SAAU,CAtFd,0CA6FI,yBjBorBgC,CoBjxBlC,qBpBqiCyE,CoBriCzE,sCpBqiCyE,CoBliCvE,8EAAqD,CAArD,mCAAqD,CHgGrD,cAAe,CAFf,oBAAqB,CAGrB,2BjBgsBqE,CiBhsBrE,8CjBgsBqE,CiB/rBrE,eAAgB,CAPhB,ajBsyB2E,CiBtyB3E,0BjBsyB2E,CiBxyB3E,uBjBqrBgC,CiBprBhC,wBjBorBgC,CiBtrBhC,sBjBsrBgC,CiBjrBhC,mBAAoB,CEpFlB,mQnBo0B6I,CiBh1BnJ,oCA6FI,yBjBorBgC,CoBjxBlC,qBpBqiCyE,CoBriCzE,sCpBqiCyE,CoBliCvE,8EAAqD,CAArD,mCAAqD,CHgGrD,cAAe,CAFf,oBAAqB,CAGrB,2BjBgsBqE,CiBhsBrE,8CjBgsBqE,CiB/rBrE,eAAgB,CAPhB,ajBsyB2E,CiBtyB3E,0BjBsyB2E,CiBxyB3E,uBjBqrBgC,CiBprBhC,wBjBorBgC,CiBtrBhC,sBjBsrBgC,CiBjrBhC,mBAAoB,CEpFlB,6HnBo0B6I,CmBh0B7I,uCFhBN,0CEiBQ,uCAAgB,CFjBxB,oCEiBQ,eAAgB,CFsFrB,CAvGH,+EA0GI,gEjB47ByE,CiBtiC7E,yEA0GI,gEjB47ByE,CiB37B1E,wBAeD,4BAA6B,CAE7B,kFAHA,ajB2xB6E,CiB3xB7E,0BjB2xB6E,CiBhyB7E,aAAc,CAId,ejBwf+B,CiBzf/B,eAAgB,CADhB,iBAA2B,CAD3B,UAOmC,CATrC,8BAYI,SAAU,CAZd,gFAkBI,cAAa,CADb,eACe,CAChB,iBhBvHC,8DJ4QE,iBAnE+B,CoBvEnC,oCFqF8D,CErF9D,yDFqF8D,CEpF9D,oBjBwvByF,CiB1vB3F,6CASI,yBADA,qBjBqoB+B,CiBpoB/B,wBAFA,oBjBsoB+B,CiB7oBnC,uCASI,yBADA,qBjBqoB+B,CiBpoB/B,wBAFA,oBjBsoB+B,CiBnoBhC,iBhB3IC,6DJ4QE,iBAnE+B,CoB1DnC,mCFwE8D,CExE9D,wDFwE8D,CEvE9D,kBjB4uByF,CiB9uB3F,6CASI,wBADA,mBjB4nB8B,CiB3nB9B,uBAFA,kBjB6nB8B,CiBpoBlC,uCASI,wBADA,mBjB4nB8B,CiB3nB9B,uBAFA,kBjB6nB8B,CiB1nB/B,sBAQC,gGFuD4D,CEzDhE,yBAMI,8FFmD4D,CEzDhE,yBAUI,4FF+C4D,CE9C7D,oBAMD,iCFwC8D,CExC9D,sDFwC8D,CEvC9D,gBAFA,UjBmlBmC,CiBplBrC,mDAMI,cAAe,CANnB,uCAUI,kBAAoB,ChBvLpB,2DD03BiF,CiB7sBrF,0CAeI,kBAAoB,ChB5LpB,2DD03BiF,CiB7sBrF,oCAmBsB,sFFuB0C,CE1ChE,oCAoBsB,oFFsB0C,CEtBd,aI9MhD,qQAWA,CACA,uBACA,sCACA,mCACA,mDACA,iFpBHE,CKLE,wCLKF,2BKLE,mDaEA,2DAIA,4DACE,4CEOJ,sCfdE,CeIJ,yCADA,cACA,+CADA,sCACA,CfJI,qEeGJ,UfHI,oEeTN,0CAmCI,6EAMA,wEAzCJ,WA+CI,0DACA,qBAKF,CALE,oBAKF,uBACA,wBACA,wCpBzCE,wEoB+CF,uCAEA,iBAGD,6DAKK,CpBzDF,iBoBoDH,CpBpDG,yCJ4QE,kBwBnNA,iBCrEJ,mBACA,yCAJF,CAEE,iBACA,CDqEI,oBCvEJ,kBACA,CDsEI,iBCxEN,CAOI,kCAED,qQAuBD,2BACA,qBACA,CAFA,iBACA,mBACA,yCACA,wCAEA,eADA,mBACA,iBACA,mDACA,cADA,mBACA,uDAfF,gIAkCI,wBAlCJ,CAkCI,4BAlCJ,uBAsCI,yBACA,2DAII,CA3CR,crBTI,2BqBSJ,CA2CQ,0DA3CR,4BA2CQ,kCA3CR,kDAmDQ,iEAnDR,8CA2DI,4CAIE,CA/DN,SA+DM,kHAOF,uRAgCA,uCACA,+LARJ,gDAcM,iRAmB6C,CAnB7C,6CAoBA,4BAMJ,WACA,YANG,mBAMH,CtBsyBoC,2FsBnyBtC,uCAQM,kBACA,gCAED,iLCxKH,CACA,yCALF,yCAIkB,kBAChB,CALF,gDAIE,SAJF,wCAa8B,+BAb9B,iBAiBI,qCAjBJ,0KHCI,wCGyBA,0LJhBE,CCTF,wBDSE,sHAIA,aIdN,CJcM,mBIdN,wCJeQ,8BIfR,sCHFE,CGoCC,iBHpCD,oDAGE,0HGoCA,uLjB7BE,aiBwCF,uBAEA,gBHpDF,6BAGE,CGDJ,uBAgDI,CjBxCE,UcPF,2IGmDA,iCjB5CE,+BNIS,QmBFT,+KAIA,oCIdN,0BJeQ,4DIfR,CJUM,gCIVN,8GHCI,uGGgEA,CJvDE,UIuDF,wCAEA,kCtBtDA,uBKLE,mFiBRN,+EA6EM,gFAIA,iDACD,mBCvFH,4CADF,uCDMA,iBAiFM,gBAjFN,wBCNA,+BAMI,oHACA,8DAPJ,mBAYI,yCAIA,CAVA,YAUA,2GAIA,uGAKA,CAnBA,UAmBA,sEACA,oBLVE,uDnBwiCoF,wBmBpiCpF,+EKpBN,qCAgCI,8BAhCJ,wUAyCM,2CAzCN,2EA6CM,2CA7CN,iCAmDI,iGAnDJ,yEA6DM,iBA7DN,gFxBsjCwF,CwBtjCxF,qBA4EM,4BAEA,iDA9EN,kEAmEM,YAnEN,OAmEM,8BAnEN,CAmEM,oBAOA,mBACW,CA3EjB,yDAyEM,CAzEN,MA8EM,oBvB3DF,6DuBnBJ,CAyEM,kBACA,CA1EN,iDAmFI,qBAnFJ,qFAwFM,mBAxFN,+FA+FG,iBC1FD,qMADF,wKA+BM,CAJF,oBAIE,6BAaJ,sBACA,oB5B8OI,C4BhPJ,oB5BgPI,oL4BtOJ,+GxBtCE,0DwBwCH,uGAeA,oHAMC,CAND,WxBvDG,YwBuDH,CxBvDG,+CwB6DF,8CxB7DE,sEwBgEH,wDAKA,oaAUD,+HxB/DI,4DwB+DJ,gJAyBI,CAzBJ,gKAyBI,mHAzBJ,oNClEI,6DAIA,C7B2PE,iB6B/PF,CAHA,oBAOA,2DAIA,kBACA,CAkBE,iqBAWE,6BAhEJ,yBAgEI,2IAhEJ,qDpBQE,4DoBRF,oJAgFI,wBAhFJ,iBAuFE,aAvFF,kCAuFE,0DAvFF,2EA4FM,4D1Bs5B2F,C0Bl/BjG,mIA8FM,+HA9FN,wEpBQE,uQoBRF,yDAyHE,CAzHF,4BAyHE,2DAzHF,CAoGI,mEpB5FF,mCoBRF,uEA4HI,mEA5HJ,8EAgII,mFAhIJ,2EAoII,6EACD,CArIH,kCAqIG,yDArIH,+iB7ByRE,C6BlPF,4DACA,sEAxCA,C7ByRE,sB6BzRF,ySAwDI,uEACA,2BAEA,mEACA,mEA5DJ,mFAgEI,oEpBxDF,mLoBRF,uGAgFI,8CAhFJ,sDAuFE,mWAKI,SACA,mBACA,aACA,oCAFA,YACA,8CACA,kBAKF,wBpB5FF,+FoB4FE,WApGJ,aAoGI,mCApGJ,mCAoGI,CALE,iBA/FN,mBpBQE,+IoB0GE,4EAlHJ,8XAoII,CApIJ,4BAoII,2DACD,CArIH,qEAyHE,mCAYC,2EArIH,mTCCF,6EAGA,CAJA,kCAIA,6DAEA,qBAAiC,gDAEjC,qOAIA,6UAaA,CAEsB,4DAGtB,sE1BjBE,C0BYF,sB1BZE,yEmBZA,kJdOE,kFaEA,2EAIA,2BQsGL,CAtHD,sEAyCI,oBACA,iDACD,uFAMC,wBAAiE,CAjDrE,6CAqDI,mFPlDA,kGOoDA,2GAQD,gDAGC,wDAIE,+WAMJ,+IAeM,6DAIH,wBAMC,+EArGN,+CA8GI,wCACA,iFAGA,+BAAmF,8EClGrF,CACA,iCACA,+EAGA,oCACA,CAKA,kEAEA,0CAbiC,CAMjC,mCACA,CACA,yBACA,CACA,eAVA,oBACA,CAEA,qCACuC,CACvC,uEACA,sCAEA,CAPA,uDAEA,CAMA,sCACA,CAHA,6HAGA,yBACA,kBADA,6DACA,KACA,4BACA,uCAbA,CAAiC,6CAEjC,CAWA,+BAXA,uBAEA,iCACA,wCACA,CAHA,yBAGA,oBAEA,uCACA,+EAEA,oCACA,8CACA,CDkGA,kEC7GA,CAKA,+BACA,CAKA,SAXA,+BACA,6CAEA,mEAEA,CAFA,SAEA,oGAGA,wCACmD,CACnD,oEACA,CAAiE,sCAZjE,CASA,gCATA,0KAKA,qEAGA,uCACA,qEACA,oDAXA,0CAEA,sBACA,iDAEA,CACA,gBAOA,kCDkGA,CC1GA,sCACA,CDyGA,mBCzGA,iCACA,oBACA,8BACA,0BACA,8DACA,qCACA,2BACA,2BDkGA,qCC9GA,wDAEA,6BACA,6BACA,uCACA,gBACA,uCACA,8BACA,0BACA,8DACA,sCACA,2BACA,2BDwHC,qCC3GD,wDAEA,6BACA,6BAA2D,CAC3D,sCACA,iCACA,oBACA,wDACA,8DACA,qCACA,2BACA,2BACA,qCAbA,wDAEA,6BACA,6BACA,uCACA,iCACA,oBACA,8BACA,0BACA,8DACA,oCACA,2BACA,gEDoGA,wDC/GA,6BACA,6BACA,CAAuC,sCAEvC,oDACA,8BACA,0BACA,0BACA,wEACA,2BACA,2BACA,qCACA,wDAZA,6BACA,6BACA,uCACA,8BACA,kDAEA,0BAAyC,CACzC,6DACA,mCACA,4BAAmD,0BACnD,qCACA,wDAZA,6BACA,6BACA,uCACuC,CACvC,kDACA,8BACA,0BACA,0BACA,oCACA,iEACA,2BACA,kCACA,wDDoGA,6BChHA,6BACA,uCAEA,sBACA,oDACA,0BACA,0BACA,oCACA,qCACA,sDACA,qCACA,wDAEA,gCAbA,iCACA,uCACA,mBACA,wBACA,oDACA,0BACA,0BACA,oCACA,sCACA,sDACA,qCACA,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","sources":["../../../node_modules/bootstrap/scss/mixins/_banner.scss","components/App/App.scss","../../../node_modules/bootstrap/scss/_root.scss","../../../node_modules/bootstrap/scss/vendor/_rfs.scss","../../../node_modules/bootstrap/scss/mixins/_color-mode.scss","../../../node_modules/bootstrap/scss/_reboot.scss","../../../node_modules/bootstrap/scss/_variables.scss","../../../node_modules/bootstrap/scss/mixins/_border-radius.scss","../../../node_modules/bootstrap/scss/_type.scss","../../../node_modules/bootstrap/scss/mixins/_lists.scss","../../../node_modules/bootstrap/scss/_images.scss","../../../node_modules/bootstrap/scss/mixins/_image.scss","../../../node_modules/bootstrap/scss/mixins/_box-shadow.scss","../../../node_modules/bootstrap/scss/mixins/_container.scss","../../../node_modules/bootstrap/scss/mixins/_breakpoints.scss","../../../node_modules/bootstrap/scss/_containers.scss","../../../node_modules/bootstrap/scss/_grid.scss","../../../node_modules/bootstrap/scss/mixins/_grid.scss","../../../node_modules/bootstrap/scss/_tables.scss","../../../node_modules/bootstrap/scss/mixins/_table-variants.scss","../../../node_modules/bootstrap/scss/forms/_labels.scss","../../../node_modules/bootstrap/scss/_functions.scss","../../../node_modules/bootstrap/scss/forms/_form-text.scss","../../../node_modules/bootstrap/scss/forms/_form-control.scss","styles/constants.scss","../../../node_modules/bootstrap/scss/mixins/_transition.scss","../../../node_modules/bootstrap/scss/mixins/_gradients.scss","../../../node_modules/bootstrap/scss/forms/_form-select.scss","../../../node_modules/bootstrap/scss/forms/_form-check.scss","../../../node_modules/bootstrap/scss/forms/_form-range.scss","../../../node_modules/bootstrap/scss/forms/_floating-labels.scss","../../../node_modules/bootstrap/scss/forms/_input-group.scss","../../../node_modules/bootstrap/scss/mixins/_forms.scss","../../../node_modules/bootstrap/scss/_buttons.scss","../../../node_modules/bootstrap/scss/mixins/_buttons.scss","../../../node_modules/bootstrap/scss/_transitions.scss","../../../node_modules/bootstrap/scss/_dropdown.scss","../../../node_modules/bootstrap/scss/mixins/_caret.scss","../../../node_modules/bootstrap/scss/_button-group.scss","../../../node_modules/bootstrap/scss/_nav.scss","../../../node_modules/bootstrap/scss/_navbar.scss","../../../node_modules/bootstrap/scss/_card.scss","../../../node_modules/bootstrap/scss/_accordion.scss","../../../node_modules/bootstrap/scss/_breadcrumb.scss","../../../node_modules/bootstrap/scss/_pagination.scss","../../../node_modules/bootstrap/scss/mixins/_pagination.scss","../../../node_modules/bootstrap/scss/_badge.scss","../../../node_modules/bootstrap/scss/_alert.scss","../../../node_modules/bootstrap/scss/_progress.scss","../../../node_modules/bootstrap/scss/_list-group.scss","../../../node_modules/bootstrap/scss/_close.scss","../../../node_modules/bootstrap/scss/_toasts.scss","../../../node_modules/bootstrap/scss/_modal.scss","../../../node_modules/bootstrap/scss/mixins/_backdrop.scss","../../../node_modules/bootstrap/scss/_tooltip.scss","../../../node_modules/bootstrap/scss/mixins/_reset-text.scss","../../../node_modules/bootstrap/scss/_popover.scss","../../../node_modules/bootstrap/scss/_carousel.scss","../../../node_modules/bootstrap/scss/_spinners.scss","../../../node_modules/bootstrap/scss/_offcanvas.scss","../../../node_modules/bootstrap/scss/_placeholders.scss","../../../node_modules/bootstrap/scss/mixins/_clearfix.scss","../../../node_modules/bootstrap/scss/helpers/_color-bg.scss","../../../node_modules/bootstrap/scss/helpers/_colored-links.scss","../../../node_modules/bootstrap/scss/helpers/_focus-ring.scss","../../../node_modules/bootstrap/scss/helpers/_icon-link.scss","../../../node_modules/bootstrap/scss/helpers/_ratio.scss","../../../node_modules/bootstrap/scss/helpers/_position.scss","../../../node_modules/bootstrap/scss/helpers/_stacks.scss","../../../node_modules/bootstrap/scss/mixins/_visually-hidden.scss","../../../node_modules/bootstrap/scss/helpers/_stretched-link.scss","../../../node_modules/bootstrap/scss/mixins/_text-truncate.scss","../../../node_modules/bootstrap/scss/helpers/_vr.scss","../../../node_modules/bootstrap/scss/mixins/_utilities.scss","../../../node_modules/bootstrap/scss/utilities/_api.scss","styles/fonts.scss","styles/mode-dark.scss","styles/mode-light.scss","styles/shared.scss","components/shared/ToastMessage/ToastMessage.scss","components/modals/NodeInfo/NodeInfo.scss","components/modals/ConnectWallet/ConnectWallet.scss","components/shared/StatusAlert/StatusAlert.scss","components/modals/Logout/Logout.scss","components/modals/SQLTerminal/SQLTerminal.scss"],"sourcesContent":["@mixin bsBanner($file) {\n /*!\n * Bootstrap #{$file} v5.3.6 (https://getbootstrap.com/)\n * Copyright 2011-2025 The Bootstrap Authors\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n */\n}\n","@import '../../styles/bootstrap-custom';\n@import '../../styles/constants';\n@import '../../styles/shared';\n\n.list-scroll-container {\n max-height: 48vh;\n}\n",":root,\n[data-bs-theme=\"light\"] {\n // Note: Custom variable values only support SassScript inside `#{}`.\n\n // Colors\n //\n // Generate palettes for full colors, grays, and theme colors.\n\n @each $color, $value in $colors {\n --#{$prefix}#{$color}: #{$value};\n }\n\n @each $color, $value in $grays {\n --#{$prefix}gray-#{$color}: #{$value};\n }\n\n @each $color, $value in $theme-colors {\n --#{$prefix}#{$color}: #{$value};\n }\n\n @each $color, $value in $theme-colors-rgb {\n --#{$prefix}#{$color}-rgb: #{$value};\n }\n\n @each $color, $value in $theme-colors-text {\n --#{$prefix}#{$color}-text-emphasis: #{$value};\n }\n\n @each $color, $value in $theme-colors-bg-subtle {\n --#{$prefix}#{$color}-bg-subtle: #{$value};\n }\n\n @each $color, $value in $theme-colors-border-subtle {\n --#{$prefix}#{$color}-border-subtle: #{$value};\n }\n\n --#{$prefix}white-rgb: #{to-rgb($white)};\n --#{$prefix}black-rgb: #{to-rgb($black)};\n\n // Fonts\n\n // Note: Use `inspect` for lists so that quoted items keep the quotes.\n // See https://github.com/sass/sass/issues/2383#issuecomment-336349172\n --#{$prefix}font-sans-serif: #{inspect($font-family-sans-serif)};\n --#{$prefix}font-monospace: #{inspect($font-family-monospace)};\n --#{$prefix}gradient: #{$gradient};\n\n // Root and body\n // scss-docs-start root-body-variables\n @if $font-size-root != null {\n --#{$prefix}root-font-size: #{$font-size-root};\n }\n --#{$prefix}body-font-family: #{inspect($font-family-base)};\n @include rfs($font-size-base, --#{$prefix}body-font-size);\n --#{$prefix}body-font-weight: #{$font-weight-base};\n --#{$prefix}body-line-height: #{$line-height-base};\n @if $body-text-align != null {\n --#{$prefix}body-text-align: #{$body-text-align};\n }\n\n --#{$prefix}body-color: #{$body-color};\n --#{$prefix}body-color-rgb: #{to-rgb($body-color)};\n --#{$prefix}body-bg: #{$body-bg};\n --#{$prefix}body-bg-rgb: #{to-rgb($body-bg)};\n\n --#{$prefix}emphasis-color: #{$body-emphasis-color};\n --#{$prefix}emphasis-color-rgb: #{to-rgb($body-emphasis-color)};\n\n --#{$prefix}secondary-color: #{$body-secondary-color};\n --#{$prefix}secondary-color-rgb: #{to-rgb($body-secondary-color)};\n --#{$prefix}secondary-bg: #{$body-secondary-bg};\n --#{$prefix}secondary-bg-rgb: #{to-rgb($body-secondary-bg)};\n\n --#{$prefix}tertiary-color: #{$body-tertiary-color};\n --#{$prefix}tertiary-color-rgb: #{to-rgb($body-tertiary-color)};\n --#{$prefix}tertiary-bg: #{$body-tertiary-bg};\n --#{$prefix}tertiary-bg-rgb: #{to-rgb($body-tertiary-bg)};\n // scss-docs-end root-body-variables\n\n --#{$prefix}heading-color: #{$headings-color};\n\n --#{$prefix}link-color: #{$link-color};\n --#{$prefix}link-color-rgb: #{to-rgb($link-color)};\n --#{$prefix}link-decoration: #{$link-decoration};\n\n --#{$prefix}link-hover-color: #{$link-hover-color};\n --#{$prefix}link-hover-color-rgb: #{to-rgb($link-hover-color)};\n\n @if $link-hover-decoration != null {\n --#{$prefix}link-hover-decoration: #{$link-hover-decoration};\n }\n\n --#{$prefix}code-color: #{$code-color};\n --#{$prefix}highlight-color: #{$mark-color};\n --#{$prefix}highlight-bg: #{$mark-bg};\n\n // scss-docs-start root-border-var\n --#{$prefix}border-width: #{$border-width};\n --#{$prefix}border-style: #{$border-style};\n --#{$prefix}border-color: #{$border-color};\n --#{$prefix}border-color-translucent: #{$border-color-translucent};\n\n --#{$prefix}border-radius: #{$border-radius};\n --#{$prefix}border-radius-sm: #{$border-radius-sm};\n --#{$prefix}border-radius-lg: #{$border-radius-lg};\n --#{$prefix}border-radius-xl: #{$border-radius-xl};\n --#{$prefix}border-radius-xxl: #{$border-radius-xxl};\n --#{$prefix}border-radius-2xl: var(--#{$prefix}border-radius-xxl); // Deprecated in v5.3.0 for consistency\n --#{$prefix}border-radius-pill: #{$border-radius-pill};\n // scss-docs-end root-border-var\n\n --#{$prefix}box-shadow: #{$box-shadow};\n --#{$prefix}box-shadow-sm: #{$box-shadow-sm};\n --#{$prefix}box-shadow-lg: #{$box-shadow-lg};\n --#{$prefix}box-shadow-inset: #{$box-shadow-inset};\n\n // Focus styles\n // scss-docs-start root-focus-variables\n --#{$prefix}focus-ring-width: #{$focus-ring-width};\n --#{$prefix}focus-ring-opacity: #{$focus-ring-opacity};\n --#{$prefix}focus-ring-color: #{$focus-ring-color};\n // scss-docs-end root-focus-variables\n\n // scss-docs-start root-form-validation-variables\n --#{$prefix}form-valid-color: #{$form-valid-color};\n --#{$prefix}form-valid-border-color: #{$form-valid-border-color};\n --#{$prefix}form-invalid-color: #{$form-invalid-color};\n --#{$prefix}form-invalid-border-color: #{$form-invalid-border-color};\n // scss-docs-end root-form-validation-variables\n}\n\n@if $enable-dark-mode {\n @include color-mode(dark, true) {\n color-scheme: dark;\n\n // scss-docs-start root-dark-mode-vars\n --#{$prefix}body-color: #{$body-color-dark};\n --#{$prefix}body-color-rgb: #{to-rgb($body-color-dark)};\n --#{$prefix}body-bg: #{$body-bg-dark};\n --#{$prefix}body-bg-rgb: #{to-rgb($body-bg-dark)};\n\n --#{$prefix}emphasis-color: #{$body-emphasis-color-dark};\n --#{$prefix}emphasis-color-rgb: #{to-rgb($body-emphasis-color-dark)};\n\n --#{$prefix}secondary-color: #{$body-secondary-color-dark};\n --#{$prefix}secondary-color-rgb: #{to-rgb($body-secondary-color-dark)};\n --#{$prefix}secondary-bg: #{$body-secondary-bg-dark};\n --#{$prefix}secondary-bg-rgb: #{to-rgb($body-secondary-bg-dark)};\n\n --#{$prefix}tertiary-color: #{$body-tertiary-color-dark};\n --#{$prefix}tertiary-color-rgb: #{to-rgb($body-tertiary-color-dark)};\n --#{$prefix}tertiary-bg: #{$body-tertiary-bg-dark};\n --#{$prefix}tertiary-bg-rgb: #{to-rgb($body-tertiary-bg-dark)};\n\n @each $color, $value in $theme-colors-text-dark {\n --#{$prefix}#{$color}-text-emphasis: #{$value};\n }\n\n @each $color, $value in $theme-colors-bg-subtle-dark {\n --#{$prefix}#{$color}-bg-subtle: #{$value};\n }\n\n @each $color, $value in $theme-colors-border-subtle-dark {\n --#{$prefix}#{$color}-border-subtle: #{$value};\n }\n\n --#{$prefix}heading-color: #{$headings-color-dark};\n\n --#{$prefix}link-color: #{$link-color-dark};\n --#{$prefix}link-hover-color: #{$link-hover-color-dark};\n --#{$prefix}link-color-rgb: #{to-rgb($link-color-dark)};\n --#{$prefix}link-hover-color-rgb: #{to-rgb($link-hover-color-dark)};\n\n --#{$prefix}code-color: #{$code-color-dark};\n --#{$prefix}highlight-color: #{$mark-color-dark};\n --#{$prefix}highlight-bg: #{$mark-bg-dark};\n\n --#{$prefix}border-color: #{$border-color-dark};\n --#{$prefix}border-color-translucent: #{$border-color-translucent-dark};\n\n --#{$prefix}form-valid-color: #{$form-valid-color-dark};\n --#{$prefix}form-valid-border-color: #{$form-valid-border-color-dark};\n --#{$prefix}form-invalid-color: #{$form-invalid-color-dark};\n --#{$prefix}form-invalid-border-color: #{$form-invalid-border-color-dark};\n // scss-docs-end root-dark-mode-vars\n }\n}\n","// stylelint-disable scss/dimension-no-non-numeric-values\n\n// SCSS RFS mixin\n//\n// Automated responsive values for font sizes, paddings, margins and much more\n//\n// Licensed under MIT (https://github.com/twbs/rfs/blob/main/LICENSE)\n\n// Configuration\n\n// Base value\n$rfs-base-value: 1.25rem !default;\n$rfs-unit: rem !default;\n\n@if $rfs-unit != rem and $rfs-unit != px {\n @error \"`#{$rfs-unit}` is not a valid unit for $rfs-unit. Use `px` or `rem`.\";\n}\n\n// Breakpoint at where values start decreasing if screen width is smaller\n$rfs-breakpoint: 1200px !default;\n$rfs-breakpoint-unit: px !default;\n\n@if $rfs-breakpoint-unit != px and $rfs-breakpoint-unit != em and $rfs-breakpoint-unit != rem {\n @error \"`#{$rfs-breakpoint-unit}` is not a valid unit for $rfs-breakpoint-unit. Use `px`, `em` or `rem`.\";\n}\n\n// Resize values based on screen height and width\n$rfs-two-dimensional: false !default;\n\n// Factor of decrease\n$rfs-factor: 10 !default;\n\n@if type-of($rfs-factor) != number or $rfs-factor <= 1 {\n @error \"`#{$rfs-factor}` is not a valid $rfs-factor, it must be greater than 1.\";\n}\n\n// Mode. Possibilities: \"min-media-query\", \"max-media-query\"\n$rfs-mode: min-media-query !default;\n\n// Generate enable or disable classes. Possibilities: false, \"enable\" or \"disable\"\n$rfs-class: false !default;\n\n// 1 rem = $rfs-rem-value px\n$rfs-rem-value: 16 !default;\n\n// Safari iframe resize bug: https://github.com/twbs/rfs/issues/14\n$rfs-safari-iframe-resize-bug-fix: false !default;\n\n// Disable RFS by setting $enable-rfs to false\n$enable-rfs: true !default;\n\n// Cache $rfs-base-value unit\n$rfs-base-value-unit: unit($rfs-base-value);\n\n@function divide($dividend, $divisor, $precision: 10) {\n $sign: if($dividend > 0 and $divisor > 0 or $dividend < 0 and $divisor < 0, 1, -1);\n $dividend: abs($dividend);\n $divisor: abs($divisor);\n @if $dividend == 0 {\n @return 0;\n }\n @if $divisor == 0 {\n @error \"Cannot divide by 0\";\n }\n $remainder: $dividend;\n $result: 0;\n $factor: 10;\n @while ($remainder > 0 and $precision >= 0) {\n $quotient: 0;\n @while ($remainder >= $divisor) {\n $remainder: $remainder - $divisor;\n $quotient: $quotient + 1;\n }\n $result: $result * 10 + $quotient;\n $factor: $factor * .1;\n $remainder: $remainder * 10;\n $precision: $precision - 1;\n @if ($precision < 0 and $remainder >= $divisor * 5) {\n $result: $result + 1;\n }\n }\n $result: $result * $factor * $sign;\n $dividend-unit: unit($dividend);\n $divisor-unit: unit($divisor);\n $unit-map: (\n \"px\": 1px,\n \"rem\": 1rem,\n \"em\": 1em,\n \"%\": 1%\n );\n @if ($dividend-unit != $divisor-unit and map-has-key($unit-map, $dividend-unit)) {\n $result: $result * map-get($unit-map, $dividend-unit);\n }\n @return $result;\n}\n\n// Remove px-unit from $rfs-base-value for calculations\n@if $rfs-base-value-unit == px {\n $rfs-base-value: divide($rfs-base-value, $rfs-base-value * 0 + 1);\n}\n@else if $rfs-base-value-unit == rem {\n $rfs-base-value: divide($rfs-base-value, divide($rfs-base-value * 0 + 1, $rfs-rem-value));\n}\n\n// Cache $rfs-breakpoint unit to prevent multiple calls\n$rfs-breakpoint-unit-cache: unit($rfs-breakpoint);\n\n// Remove unit from $rfs-breakpoint for calculations\n@if $rfs-breakpoint-unit-cache == px {\n $rfs-breakpoint: divide($rfs-breakpoint, $rfs-breakpoint * 0 + 1);\n}\n@else if $rfs-breakpoint-unit-cache == rem or $rfs-breakpoint-unit-cache == \"em\" {\n $rfs-breakpoint: divide($rfs-breakpoint, divide($rfs-breakpoint * 0 + 1, $rfs-rem-value));\n}\n\n// Calculate the media query value\n$rfs-mq-value: if($rfs-breakpoint-unit == px, #{$rfs-breakpoint}px, #{divide($rfs-breakpoint, $rfs-rem-value)}#{$rfs-breakpoint-unit});\n$rfs-mq-property-width: if($rfs-mode == max-media-query, max-width, min-width);\n$rfs-mq-property-height: if($rfs-mode == max-media-query, max-height, min-height);\n\n// Internal mixin used to determine which media query needs to be used\n@mixin _rfs-media-query {\n @if $rfs-two-dimensional {\n @if $rfs-mode == max-media-query {\n @media (#{$rfs-mq-property-width}: #{$rfs-mq-value}), (#{$rfs-mq-property-height}: #{$rfs-mq-value}) {\n @content;\n }\n }\n @else {\n @media (#{$rfs-mq-property-width}: #{$rfs-mq-value}) and (#{$rfs-mq-property-height}: #{$rfs-mq-value}) {\n @content;\n }\n }\n }\n @else {\n @media (#{$rfs-mq-property-width}: #{$rfs-mq-value}) {\n @content;\n }\n }\n}\n\n// Internal mixin that adds disable classes to the selector if needed.\n@mixin _rfs-rule {\n @if $rfs-class == disable and $rfs-mode == max-media-query {\n // Adding an extra class increases specificity, which prevents the media query to override the property\n &,\n .disable-rfs &,\n &.disable-rfs {\n @content;\n }\n }\n @else if $rfs-class == enable and $rfs-mode == min-media-query {\n .enable-rfs &,\n &.enable-rfs {\n @content;\n }\n } @else {\n @content;\n }\n}\n\n// Internal mixin that adds enable classes to the selector if needed.\n@mixin _rfs-media-query-rule {\n\n @if $rfs-class == enable {\n @if $rfs-mode == min-media-query {\n @content;\n }\n\n @include _rfs-media-query () {\n .enable-rfs &,\n &.enable-rfs {\n @content;\n }\n }\n }\n @else {\n @if $rfs-class == disable and $rfs-mode == min-media-query {\n .disable-rfs &,\n &.disable-rfs {\n @content;\n }\n }\n @include _rfs-media-query () {\n @content;\n }\n }\n}\n\n// Helper function to get the formatted non-responsive value\n@function rfs-value($values) {\n // Convert to list\n $values: if(type-of($values) != list, ($values,), $values);\n\n $val: \"\";\n\n // Loop over each value and calculate value\n @each $value in $values {\n @if $value == 0 {\n $val: $val + \" 0\";\n }\n @else {\n // Cache $value unit\n $unit: if(type-of($value) == \"number\", unit($value), false);\n\n @if $unit == px {\n // Convert to rem if needed\n $val: $val + \" \" + if($rfs-unit == rem, #{divide($value, $value * 0 + $rfs-rem-value)}rem, $value);\n }\n @else if $unit == rem {\n // Convert to px if needed\n $val: $val + \" \" + if($rfs-unit == px, #{divide($value, $value * 0 + 1) * $rfs-rem-value}px, $value);\n } @else {\n // If $value isn't a number (like inherit) or $value has a unit (not px or rem, like 1.5em) or $ is 0, just print the value\n $val: $val + \" \" + $value;\n }\n }\n }\n\n // Remove first space\n @return unquote(str-slice($val, 2));\n}\n\n// Helper function to get the responsive value calculated by RFS\n@function rfs-fluid-value($values) {\n // Convert to list\n $values: if(type-of($values) != list, ($values,), $values);\n\n $val: \"\";\n\n // Loop over each value and calculate value\n @each $value in $values {\n @if $value == 0 {\n $val: $val + \" 0\";\n } @else {\n // Cache $value unit\n $unit: if(type-of($value) == \"number\", unit($value), false);\n\n // If $value isn't a number (like inherit) or $value has a unit (not px or rem, like 1.5em) or $ is 0, just print the value\n @if not $unit or $unit != px and $unit != rem {\n $val: $val + \" \" + $value;\n } @else {\n // Remove unit from $value for calculations\n $value: divide($value, $value * 0 + if($unit == px, 1, divide(1, $rfs-rem-value)));\n\n // Only add the media query if the value is greater than the minimum value\n @if abs($value) <= $rfs-base-value or not $enable-rfs {\n $val: $val + \" \" + if($rfs-unit == rem, #{divide($value, $rfs-rem-value)}rem, #{$value}px);\n }\n @else {\n // Calculate the minimum value\n $value-min: $rfs-base-value + divide(abs($value) - $rfs-base-value, $rfs-factor);\n\n // Calculate difference between $value and the minimum value\n $value-diff: abs($value) - $value-min;\n\n // Base value formatting\n $min-width: if($rfs-unit == rem, #{divide($value-min, $rfs-rem-value)}rem, #{$value-min}px);\n\n // Use negative value if needed\n $min-width: if($value < 0, -$min-width, $min-width);\n\n // Use `vmin` if two-dimensional is enabled\n $variable-unit: if($rfs-two-dimensional, vmin, vw);\n\n // Calculate the variable width between 0 and $rfs-breakpoint\n $variable-width: #{divide($value-diff * 100, $rfs-breakpoint)}#{$variable-unit};\n\n // Return the calculated value\n $val: $val + \" calc(\" + $min-width + if($value < 0, \" - \", \" + \") + $variable-width + \")\";\n }\n }\n }\n }\n\n // Remove first space\n @return unquote(str-slice($val, 2));\n}\n\n// RFS mixin\n@mixin rfs($values, $property: font-size) {\n @if $values != null {\n $val: rfs-value($values);\n $fluid-val: rfs-fluid-value($values);\n\n // Do not print the media query if responsive & non-responsive values are the same\n @if $val == $fluid-val {\n #{$property}: $val;\n }\n @else {\n @include _rfs-rule () {\n #{$property}: if($rfs-mode == max-media-query, $val, $fluid-val);\n\n // Include safari iframe resize fix if needed\n min-width: if($rfs-safari-iframe-resize-bug-fix, (0 * 1vw), null);\n }\n\n @include _rfs-media-query-rule () {\n #{$property}: if($rfs-mode == max-media-query, $fluid-val, $val);\n }\n }\n }\n}\n\n// Shorthand helper mixins\n@mixin font-size($value) {\n @include rfs($value);\n}\n\n@mixin padding($value) {\n @include rfs($value, padding);\n}\n\n@mixin padding-top($value) {\n @include rfs($value, padding-top);\n}\n\n@mixin padding-right($value) {\n @include rfs($value, padding-right);\n}\n\n@mixin padding-bottom($value) {\n @include rfs($value, padding-bottom);\n}\n\n@mixin padding-left($value) {\n @include rfs($value, padding-left);\n}\n\n@mixin margin($value) {\n @include rfs($value, margin);\n}\n\n@mixin margin-top($value) {\n @include rfs($value, margin-top);\n}\n\n@mixin margin-right($value) {\n @include rfs($value, margin-right);\n}\n\n@mixin margin-bottom($value) {\n @include rfs($value, margin-bottom);\n}\n\n@mixin margin-left($value) {\n @include rfs($value, margin-left);\n}\n","// scss-docs-start color-mode-mixin\n@mixin color-mode($mode: light, $root: false) {\n @if $color-mode-type == \"media-query\" {\n @if $root == true {\n @media (prefers-color-scheme: $mode) {\n :root {\n @content;\n }\n }\n } @else {\n @media (prefers-color-scheme: $mode) {\n @content;\n }\n }\n } @else {\n [data-bs-theme=\"#{$mode}\"] {\n @content;\n }\n }\n}\n// scss-docs-end color-mode-mixin\n","// stylelint-disable declaration-no-important, selector-no-qualifying-type, property-no-vendor-prefix\n\n\n// Reboot\n//\n// Normalization of HTML elements, manually forked from Normalize.css to remove\n// styles targeting irrelevant browsers while applying new styles.\n//\n// Normalize is licensed MIT. https://github.com/necolas/normalize.css\n\n\n// Document\n//\n// Change from `box-sizing: content-box` so that `width` is not affected by `padding` or `border`.\n\n*,\n*::before,\n*::after {\n box-sizing: border-box;\n}\n\n\n// Root\n//\n// Ability to the value of the root font sizes, affecting the value of `rem`.\n// null by default, thus nothing is generated.\n\n:root {\n @if $font-size-root != null {\n @include font-size(var(--#{$prefix}root-font-size));\n }\n\n @if $enable-smooth-scroll {\n @media (prefers-reduced-motion: no-preference) {\n scroll-behavior: smooth;\n }\n }\n}\n\n\n// Body\n//\n// 1. Remove the margin in all browsers.\n// 2. As a best practice, apply a default `background-color`.\n// 3. Prevent adjustments of font size after orientation changes in iOS.\n// 4. Change the default tap highlight to be completely transparent in iOS.\n\n// scss-docs-start reboot-body-rules\nbody {\n margin: 0; // 1\n font-family: var(--#{$prefix}body-font-family);\n @include font-size(var(--#{$prefix}body-font-size));\n font-weight: var(--#{$prefix}body-font-weight);\n line-height: var(--#{$prefix}body-line-height);\n color: var(--#{$prefix}body-color);\n text-align: var(--#{$prefix}body-text-align);\n background-color: var(--#{$prefix}body-bg); // 2\n -webkit-text-size-adjust: 100%; // 3\n -webkit-tap-highlight-color: rgba($black, 0); // 4\n}\n// scss-docs-end reboot-body-rules\n\n\n// Content grouping\n//\n// 1. Reset Firefox's gray color\n\nhr {\n margin: $hr-margin-y 0;\n color: $hr-color; // 1\n border: 0;\n border-top: $hr-border-width solid $hr-border-color;\n opacity: $hr-opacity;\n}\n\n\n// Typography\n//\n// 1. Remove top margins from headings\n// By default, `

`-`

` all receive top and bottom margins. We nuke the top\n// margin for easier control within type scales as it avoids margin collapsing.\n\n%heading {\n margin-top: 0; // 1\n margin-bottom: $headings-margin-bottom;\n font-family: $headings-font-family;\n font-style: $headings-font-style;\n font-weight: $headings-font-weight;\n line-height: $headings-line-height;\n color: var(--#{$prefix}heading-color);\n}\n\nh1 {\n @extend %heading;\n @include font-size($h1-font-size);\n}\n\nh2 {\n @extend %heading;\n @include font-size($h2-font-size);\n}\n\nh3 {\n @extend %heading;\n @include font-size($h3-font-size);\n}\n\nh4 {\n @extend %heading;\n @include font-size($h4-font-size);\n}\n\nh5 {\n @extend %heading;\n @include font-size($h5-font-size);\n}\n\nh6 {\n @extend %heading;\n @include font-size($h6-font-size);\n}\n\n\n// Reset margins on paragraphs\n//\n// Similarly, the top margin on `

`s get reset. However, we also reset the\n// bottom margin to use `rem` units instead of `em`.\n\np {\n margin-top: 0;\n margin-bottom: $paragraph-margin-bottom;\n}\n\n\n// Abbreviations\n//\n// 1. Add the correct text decoration in Chrome, Edge, Opera, and Safari.\n// 2. Add explicit cursor to indicate changed behavior.\n// 3. Prevent the text-decoration to be skipped.\n\nabbr[title] {\n text-decoration: underline dotted; // 1\n cursor: help; // 2\n text-decoration-skip-ink: none; // 3\n}\n\n\n// Address\n\naddress {\n margin-bottom: 1rem;\n font-style: normal;\n line-height: inherit;\n}\n\n\n// Lists\n\nol,\nul {\n padding-left: 2rem;\n}\n\nol,\nul,\ndl {\n margin-top: 0;\n margin-bottom: 1rem;\n}\n\nol ol,\nul ul,\nol ul,\nul ol {\n margin-bottom: 0;\n}\n\ndt {\n font-weight: $dt-font-weight;\n}\n\n// 1. Undo browser default\n\ndd {\n margin-bottom: .5rem;\n margin-left: 0; // 1\n}\n\n\n// Blockquote\n\nblockquote {\n margin: 0 0 1rem;\n}\n\n\n// Strong\n//\n// Add the correct font weight in Chrome, Edge, and Safari\n\nb,\nstrong {\n font-weight: $font-weight-bolder;\n}\n\n\n// Small\n//\n// Add the correct font size in all browsers\n\nsmall {\n @include font-size($small-font-size);\n}\n\n\n// Mark\n\nmark {\n padding: $mark-padding;\n color: var(--#{$prefix}highlight-color);\n background-color: var(--#{$prefix}highlight-bg);\n}\n\n\n// Sub and Sup\n//\n// Prevent `sub` and `sup` elements from affecting the line height in\n// all browsers.\n\nsub,\nsup {\n position: relative;\n @include font-size($sub-sup-font-size);\n line-height: 0;\n vertical-align: baseline;\n}\n\nsub { bottom: -.25em; }\nsup { top: -.5em; }\n\n\n// Links\n\na {\n color: rgba(var(--#{$prefix}link-color-rgb), var(--#{$prefix}link-opacity, 1));\n text-decoration: $link-decoration;\n\n &:hover {\n --#{$prefix}link-color-rgb: var(--#{$prefix}link-hover-color-rgb);\n text-decoration: $link-hover-decoration;\n }\n}\n\n// And undo these styles for placeholder links/named anchors (without href).\n// It would be more straightforward to just use a[href] in previous block, but that\n// causes specificity issues in many other styles that are too complex to fix.\n// See https://github.com/twbs/bootstrap/issues/19402\n\na:not([href]):not([class]) {\n &,\n &:hover {\n color: inherit;\n text-decoration: none;\n }\n}\n\n\n// Code\n\npre,\ncode,\nkbd,\nsamp {\n font-family: $font-family-code;\n @include font-size(1em); // Correct the odd `em` font sizing in all browsers.\n}\n\n// 1. Remove browser default top margin\n// 2. Reset browser default of `1em` to use `rem`s\n// 3. Don't allow content to break outside\n\npre {\n display: block;\n margin-top: 0; // 1\n margin-bottom: 1rem; // 2\n overflow: auto; // 3\n @include font-size($code-font-size);\n color: $pre-color;\n\n // Account for some code outputs that place code tags in pre tags\n code {\n @include font-size(inherit);\n color: inherit;\n word-break: normal;\n }\n}\n\ncode {\n @include font-size($code-font-size);\n color: var(--#{$prefix}code-color);\n word-wrap: break-word;\n\n // Streamline the style when inside anchors to avoid broken underline and more\n a > & {\n color: inherit;\n }\n}\n\nkbd {\n padding: $kbd-padding-y $kbd-padding-x;\n @include font-size($kbd-font-size);\n color: $kbd-color;\n background-color: $kbd-bg;\n @include border-radius($border-radius-sm);\n\n kbd {\n padding: 0;\n @include font-size(1em);\n font-weight: $nested-kbd-font-weight;\n }\n}\n\n\n// Figures\n//\n// Apply a consistent margin strategy (matches our type styles).\n\nfigure {\n margin: 0 0 1rem;\n}\n\n\n// Images and content\n\nimg,\nsvg {\n vertical-align: middle;\n}\n\n\n// Tables\n//\n// Prevent double borders\n\ntable {\n caption-side: bottom;\n border-collapse: collapse;\n}\n\ncaption {\n padding-top: $table-cell-padding-y;\n padding-bottom: $table-cell-padding-y;\n color: $table-caption-color;\n text-align: left;\n}\n\n// 1. Removes font-weight bold by inheriting\n// 2. Matches default `` alignment by inheriting `text-align`.\n// 3. Fix alignment for Safari\n\nth {\n font-weight: $table-th-font-weight; // 1\n text-align: inherit; // 2\n text-align: -webkit-match-parent; // 3\n}\n\nthead,\ntbody,\ntfoot,\ntr,\ntd,\nth {\n border-color: inherit;\n border-style: solid;\n border-width: 0;\n}\n\n\n// Forms\n//\n// 1. Allow labels to use `margin` for spacing.\n\nlabel {\n display: inline-block; // 1\n}\n\n// Remove the default `border-radius` that macOS Chrome adds.\n// See https://github.com/twbs/bootstrap/issues/24093\n\nbutton {\n // stylelint-disable-next-line property-disallowed-list\n border-radius: 0;\n}\n\n// Explicitly remove focus outline in Chromium when it shouldn't be\n// visible (e.g. as result of mouse click or touch tap). It already\n// should be doing this automatically, but seems to currently be\n// confused and applies its very visible two-tone outline anyway.\n\nbutton:focus:not(:focus-visible) {\n outline: 0;\n}\n\n// 1. Remove the margin in Firefox and Safari\n\ninput,\nbutton,\nselect,\noptgroup,\ntextarea {\n margin: 0; // 1\n font-family: inherit;\n @include font-size(inherit);\n line-height: inherit;\n}\n\n// Remove the inheritance of text transform in Firefox\nbutton,\nselect {\n text-transform: none;\n}\n// Set the cursor for non-`\n props.onActionClick('deposit')}\n data-testid='deposit-button'\n >\n \n Deposit\n \n \n \n \n

\n \n \n \n \n \n \n );\n};\n\nexport default BTCWallet;\n","import './QRCode.scss';\nimport { motion, AnimatePresence } from 'framer-motion';\nimport { QRCodeCanvas } from 'qrcode.react';\nimport { Row, Form, InputGroup } from 'react-bootstrap';\n\nimport { CopySVG } from '../../../svgs/Copy';\nimport logger from '../../../services/logger.service';\nimport { copyTextToClipboard } from '../../../utilities/data-formatters';\nimport { setShowToast } from '../../../store/rootSlice';\nimport { useDispatch, useSelector } from 'react-redux';\nimport { selectIsDarkMode } from '../../../store/rootSelectors';\n\nconst QRCodeComponent = (props) => {\n const dispatch = useDispatch();\n const isDarkMode = useSelector(selectIsDarkMode);\n\n const copyHandler = () => {\n copyTextToClipboard(props.message).then((response) => {\n dispatch(setShowToast({show: true, message: (props.toastMessage || props.message), bg: 'success'}));\n }).catch((err) => {\n logger.error(err);\n });\n }\n\n return (\n
\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
\n );\n};\n\nexport default QRCodeComponent;\n","import './BTCDeposit.scss';\nimport { useEffect, useState } from 'react';\nimport { Card } from 'react-bootstrap';\n\nimport { CallStatus, CLEAR_STATUS_ALERT_DELAY } from '../../../utilities/constants';\nimport logger from '../../../services/logger.service';\nimport { BitcoinWalletSVG } from '../../../svgs/BitcoinWallet';\nimport QRCodeComponent from '../../shared/QRCode/QRCode';\nimport { CloseSVG } from '../../../svgs/Close';\nimport StatusAlert from '../../shared/StatusAlert/StatusAlert';\nimport { CLNService } from '../../../services/http.service';\n\nconst BTCDeposit = props => {\n const [responseStatus, setResponseStatus] = useState(CallStatus.NONE);\n const [responseMessage, setResponseMessage] = useState('');\n\n const delayedClearStatusAlert = () => {\n setTimeout(() => {\n setResponseStatus(CallStatus.NONE);\n setResponseMessage('');\n }, CLEAR_STATUS_ALERT_DELAY);\n };\n\n useEffect(() => {\n setResponseStatus(CallStatus.PENDING);\n setResponseMessage('Generating New Address...');\n CLNService.btcDeposit()\n .then((response: any) => {\n logger.info(response);\n if (response.bech32) {\n setResponseStatus(CallStatus.SUCCESS);\n setResponseMessage(response.bech32);\n } else {\n setResponseStatus(CallStatus.ERROR);\n setResponseMessage(response.response || response.message || 'Unknown Error');\n delayedClearStatusAlert();\n }\n })\n .catch(err => {\n logger.error(err);\n setResponseStatus(CallStatus.ERROR);\n setResponseMessage(err);\n delayedClearStatusAlert();\n });\n }, []);\n\n return (\n \n \n \n
\n \n Bitcoin Wallet\n
\n \n \n \n
\n

Deposit

\n \n {responseStatus === CallStatus.SUCCESS ? (\n \n ) : (\n \n )}\n \n
\n
\n );\n};\n\nexport default BTCDeposit;\n","import React from 'react';\n\nexport const AmountSVG = props => {\n return (\n \n \n \n );\n};\n","import React from 'react';\n\nexport const AddressSVG = props => {\n return (\n \n \n \n \n );\n};\n","import './FeerateRange.scss';\nimport { Row, Col, Form, OverlayTrigger, Tooltip } from 'react-bootstrap';\n\nimport { FeeRate, FEE_RATES, Units } from '../../../utilities/constants';\nimport FiatBox from '../FiatBox/FiatBox';\nimport { useSelector } from 'react-redux';\nimport { selectFeeRate } from '../../../store/clnSelectors';\nimport { selectFiatConfig, selectFiatUnit } from '../../../store/rootSelectors';\n\nconst FeerateRange = (props) => {\n const feeRate = useSelector(selectFeeRate);\n const fiatUnit = useSelector(selectFiatUnit);\n const fiatConfig = useSelector(selectFiatConfig);\n\n const getSelFeeRateValue = () => {\n return (props.selFeeRate === FeeRate.SLOW) ? \n (feeRate.perkb?.min_acceptable || 0) :\n (props.selFeeRate === FeeRate.URGENT) ? \n (feeRate.perkb?.unilateral_close || 0) :\n (feeRate.perkb?.opening || 0);\n };\n\n return (\n <>\n \n Fee Rate\n \n
\n \n {Math.round(getSelFeeRateValue() / 1000)} Sats/vB\n ≈ \n \n \n }\n >\n \n \n
\n \n {FEE_RATES.map((rate, i) => (\n \n {rate}\n \n ))}\n \n \n );\n};\n\nexport default FeerateRange;\n","import './BTCWithdraw.scss';\nimport { useState } from 'react';\nimport { Spinner, Card, Row, Col, Button, Form, InputGroup } from 'react-bootstrap';\n\nimport logger from '../../../services/logger.service';\nimport useInput from '../../../hooks/use-input';\nimport { CallStatus, CLEAR_STATUS_ALERT_DELAY, FeeRate, FEE_RATES } from '../../../utilities/constants';\nimport { ActionSVG } from '../../../svgs/Action';\nimport { AmountSVG } from '../../../svgs/Amount';\nimport { AddressSVG } from '../../../svgs/Address';\nimport { BitcoinWalletSVG } from '../../../svgs/BitcoinWallet';\nimport FiatBox from '../../shared/FiatBox/FiatBox';\nimport InvalidInputMessage from '../../shared/InvalidInputMessage/InvalidInputMessage';\nimport { CloseSVG } from '../../../svgs/Close';\nimport StatusAlert from '../../shared/StatusAlert/StatusAlert';\nimport FeerateRange from '../../shared/FeerateRange/FeerateRange';\nimport { CLNService } from '../../../services/http.service';\nimport { useSelector } from 'react-redux';\nimport { selectFiatConfig, selectFiatUnit, selectWalletBalances } from '../../../store/rootSelectors';\n\nconst BTCWithdraw = (props) => {\n const fiatUnit = useSelector(selectFiatUnit);\n const fiatConfig = useSelector(selectFiatConfig);\n const walletBalances = useSelector(selectWalletBalances);\n const [selFeeRate, setSelFeeRate] = useState(FeeRate.NORMAL);\n const [responseStatus, setResponseStatus] = useState(CallStatus.NONE);\n const [responseMessage, setResponseMessage] = useState('');\n\n const isValidAmount = (value) => value === 'All' || (value > 0 && value <= (walletBalances.btcSpendableBalance || 0));\n const isValidAddress = (value) => value.trim() !== '';\n\n const {\n value: addressValue,\n isValid: addressIsValid,\n hasError: addressHasError,\n valueChangeHandler: addressChangeHandler,\n inputBlurHandler: addressBlurHandler,\n reset: resetAddress,\n } = useInput(isValidAddress);\n const {\n value: amountValue,\n isValid: amountIsValid,\n hasError: amountHasError,\n valueChangeHandler: amountChangeHandler,\n inputBlurHandler: amountBlurHandler,\n reset: resetAmount,\n } = useInput(isValidAmount);\n\n let formIsValid = false;\n\n if (addressIsValid && amountIsValid) {\n formIsValid = true;\n };\n \n const selFeeRateChangeHandler = (event) => {\n setSelFeeRate(FEE_RATES[+event.target.value]);\n };\n\n const touchFormControls = () => {\n addressBlurHandler(null);\n amountBlurHandler(null);\n };\n\n const resetFormValues = () => {\n resetAddress();\n resetAmount();\n setSelFeeRate(FeeRate.NORMAL);\n };\n\n const delayedClearStatusAlert = () => {\n setTimeout(() => {\n setResponseStatus(CallStatus.NONE);\n setResponseMessage('');\n }, CLEAR_STATUS_ALERT_DELAY);\n }\n\n const withdrawHandler = (event) => {\n event.preventDefault();\n touchFormControls();\n if (!formIsValid) { return; }\n setResponseStatus(CallStatus.PENDING);\n setResponseMessage('Sending Transaction...');\n CLNService.btcWithdraw(addressValue, amountValue.toLowerCase(), selFeeRate.toLowerCase())\n .then((response: any) => {\n logger.info(response);\n if (response.txid) {\n setResponseStatus(CallStatus.SUCCESS);\n setResponseMessage('Transaction sent with transaction id ' + response.txid);\n resetFormValues();\n delayedClearStatusAlert();\n } else {\n setResponseStatus(CallStatus.ERROR);\n setResponseMessage(response.response || response.message || 'Unknown Error');\n delayedClearStatusAlert();\n }\n })\n .catch(err => {\n logger.error(err);\n setResponseStatus(CallStatus.ERROR);\n setResponseMessage(err);\n delayedClearStatusAlert();\n });\n };\n\n return (\n
\n \n \n \n
\n \n Bitcoin Wallet\n
\n \n
\n

Withdraw

\n \n \n \n \n Amount*\n {amountValue !== 'All' ? \n \n :\n <>\n }\n \n \n \n \n \n \n { amountValue === 'All' ? \n \n resetAmount()}>\n \n :\n <>\n }\n \n {\n !amountHasError ?\n amountValue && amountValue !== 'All' ?\n

\n ~ \n

\n :\n

\n :\n (walletBalances.btcSpendableBalance || 0)) ? \n 'Amount should be lesser then ' + (walletBalances.btcSpendableBalance || 0)\n :\n 'Invalid Amount'\n } />\n }\n \n \n Address*\n \n \n \n \n \n \n {(addressHasError) ?\n \n :\n
\n }\n \n \n \n \n
\n \n
\n \n \n \n
\n
\n
\n );\n};\n\nexport default BTCWithdraw;\n","import './BTCCard.scss';\nimport { useState } from 'react';\nimport { motion, AnimatePresence } from 'framer-motion';\nimport { Card } from 'react-bootstrap';\n\nimport BTCWallet from '../BTCWallet/BTCWallet';\nimport BTCDeposit from '../BTCDeposit/BTCDeposit';\nimport BTCWithdraw from '../BTCWithdraw/BTCWithdraw';\nimport { TRANSITION_DURATION } from '../../../utilities/constants';\n\nconst BTCCard = () => {\n const [selBTCCard, setSelBTCCard] = useState('wallet');\n\n return (\n \n \n \n {selBTCCard === 'wallet' ? (\n setSelBTCCard(action)} />\n ) : selBTCCard === 'deposit' ? (\n setSelBTCCard('wallet')} />\n ) : (\n setSelBTCCard('wallet')} />\n )}\n \n \n \n );\n};\n\nexport default BTCCard;\n","import React from 'react';\n\nimport { motion } from 'framer-motion';\nimport { ANIMATION_FINAL_STATE, ANIMATION_INITIAL_STATE, ANIMATION_TRANSITION, OPACITY_VARIANTS } from '../utilities/constants';\n\nexport const LightningWalletSVG = props => {\n return (\n \n \n \n \n );\n};\n","import './CLNTransaction.scss';\nimport { motion } from 'framer-motion';\nimport { Row, Col } from 'react-bootstrap';\n\nimport { copyTextToClipboard, formatCurrency } from '../../../utilities/data-formatters';\nimport { TRANSITION_DURATION, Units } from '../../../utilities/constants';\nimport { CopySVG } from '../../../svgs/Copy';\nimport DateBox from '../../shared/DateBox/DateBox';\nimport logger from '../../../services/logger.service';\nimport { setShowToast } from '../../../store/rootSlice';\nimport { useDispatch } from 'react-redux';\n\nconst TODAY = Math.floor(Date.now() / 1000);\n\nconst Payment = ({ payment, copyHandler }) => {\n return (\n <>\n {payment.amount_msat ? (\n \n \n Transaction Fee (mSats)\n \n \n {payment.amount_sent_msat\n ? formatCurrency(\n payment.amount_sent_msat - payment.amount_msat,\n Units.MSATS,\n Units.MSATS,\n false,\n 0,\n 'string',\n )\n : 0}\n \n \n ) : (\n <>\n )}\n {payment.bolt11 || payment.bolt12 ? (\n \n \n Invoice\n \n \n {payment.bolt11 || payment.bolt12}\n \n \n \n \n \n ) : (\n <>\n )}\n {payment.payment_preimage ? (\n \n \n Preimage\n \n \n {payment.payment_preimage}\n \n \n \n \n \n ) : (\n <>\n )}\n \n );\n};\n\nconst Invoice = ({ invoice, copyHandler }) => {\n return (\n <>\n {invoice.paid_at && invoice.expires_at && invoice.expires_at > TODAY ? (\n \n \n Valid till\n \n \n \n \n \n ) : (\n <>\n )}\n {invoice.bolt11 || invoice.bolt12 ? (\n \n \n Invoice\n \n \n {invoice.bolt11 || invoice.bolt12}\n \n \n \n \n \n ) : (\n <>\n )}\n {invoice.payment_preimage ? (\n \n \n Preimage\n \n \n {invoice.payment_preimage}\n \n \n \n \n \n ) : (\n <>\n )}\n \n );\n};\n\nconst CLNTransaction = (props) => {\n const dispatch = useDispatch();\n \n const copyHandler = (event) => {\n let textToCopy = '';\n switch (event.target.id) {\n case 'Destination':\n textToCopy = props.transaction.destination;\n break;\n case 'Invoice':\n textToCopy = props.transaction.bolt11 || props.transaction.bolt12;\n break;\n case 'Preimage':\n textToCopy = props.transaction.payment_preimage;\n break;\n default:\n textToCopy = props.transaction.payment_hash;\n break;\n }\n copyTextToClipboard(textToCopy).then((response) => {\n dispatch(setShowToast({show: true, message: (event.target.id + ' Copied Successfully!'), bg: 'success'}));\n }).catch((err) => {\n logger.error(err);\n });\n }\n\n return (\n \n {props.transaction.type?.toLowerCase() === 'payment' ? (\n \n ) : (\n \n )}\n \n );\n};\n\nexport default CLNTransaction;\n","import React from 'react';\n\nimport { easeOut, motion } from 'framer-motion';\nimport { OPACITY_VARIANTS } from '../utilities/constants';\n\nexport const NoCLNTransactionLightSVG = props => {\n return (\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n );\n};\n","import React from 'react';\n\nimport { easeOut, motion } from 'framer-motion';\nimport { OPACITY_VARIANTS } from '../utilities/constants';\n\nexport const NoCLNTransactionDarkSVG = props => {\n return (\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n );\n};\n","import './CLNTransactionsList.scss';\nimport { useState } from 'react';\nimport { motion, AnimatePresence } from 'framer-motion';\nimport { Row, Col, Spinner, Alert } from 'react-bootstrap';\n\nimport { formatCurrency } from '../../../utilities/data-formatters';\nimport { IncomingArrowSVG } from '../../../svgs/IncomingArrow';\nimport { OutgoingArrowSVG } from '../../../svgs/OutgoingArrow';\nimport DateBox from '../../shared/DateBox/DateBox';\nimport FiatBox from '../../shared/FiatBox/FiatBox';\nimport Transaction from '../CLNTransaction/CLNTransaction';\nimport { TRANSITION_DURATION, Units } from '../../../utilities/constants';\nimport { NoCLNTransactionLightSVG } from '../../../svgs/NoCLNTransactionLight';\nimport { NoCLNTransactionDarkSVG } from '../../../svgs/NoCLNTransactionDark';\nimport { useSelector } from 'react-redux';\nimport { selectActiveChannelsExist, selectFiatConfig, selectFiatUnit, selectIsAuthenticated, selectIsDarkMode, selectUIConfigUnit } from '../../../store/rootSelectors';\nimport { selectListLightningTransactions } from '../../../store/clnSelectors';\n\nconst TODAY = Math.floor(Date.now() / 1000);\n\nconst PaymentHeader = ({ payment }) => {\n const fiatUnit = useSelector(selectFiatUnit);\n const uiConfigUnit = useSelector(selectUIConfigUnit);\n const fiatConfig = useSelector(selectFiatConfig);\n return (\n \n \n \n \n \n \n \n \n {payment.description || payment.payment_hash}\n \n \n \n {payment.status?.toLowerCase() === 'complete'\n ? '-' +\n formatCurrency(\n payment.amount_sent_msat || 0,\n Units.MSATS,\n uiConfigUnit,\n false,\n 0,\n 'string',\n )\n : 0}\n \n \n \n \n Created at\n \n \n \n \n \n \n \n \n );\n};\n\nconst InvoiceHeader = ({ invoice }) => {\n const fiatUnit = useSelector(selectFiatUnit);\n const uiConfigUnit = useSelector(selectUIConfigUnit);\n const fiatConfig = useSelector(selectFiatConfig);\n return (\n \n \n \n \n \n \n \n \n {invoice.description || invoice.payment_hash}\n \n \n \n {invoice.paid_at ? (\n \n {'+' +\n formatCurrency(\n invoice.amount_received_msat || 0,\n Units.MSATS,\n uiConfigUnit,\n false,\n 8,\n 'string',\n )}\n \n ) : (\n formatCurrency(\n invoice.amount_msat || 0,\n Units.MSATS,\n uiConfigUnit,\n false,\n 8,\n 'string',\n )\n )}\n \n \n \n \n {invoice.paid_at ? (\n Paid at\n ) : invoice.expires_at > TODAY ? (\n Valid till\n ) : (\n Expired at\n )}\n \n \n \n \n \n \n \n \n );\n};\n\nconst CLNTransactionsAccordion = ({\n i,\n expanded,\n setExpanded,\n initExpansions,\n transaction,\n}) => {\n const isDarkMode = useSelector(selectIsDarkMode);\n return (\n <>\n {\n initExpansions[i] = !expanded[i];\n return setExpanded(initExpansions);\n }}\n >\n {transaction.type?.toLowerCase() === 'payment' ? (\n \n ) : (\n \n )}\n \n \n {expanded[i] && (\n \n \n \n )}\n \n \n );\n};\n\nexport const CLNTransactionsList = () => {\n const isDarkMode = useSelector(selectIsDarkMode);\n const isAuthenticated = useSelector(selectIsAuthenticated);\n const activeChannelsExist = useSelector(selectActiveChannelsExist);\n const listLightningTransactions = useSelector(selectListLightningTransactions);\n const initExpansions = (listLightningTransactions.clnTransactions?.reduce((acc: boolean[], curr) => [...acc, false], []) || []);\n const [expanded, setExpanded] = useState(initExpansions);\n return (\n isAuthenticated && listLightningTransactions.isLoading ?\n \n \n \n :\n listLightningTransactions.error ?\n {listLightningTransactions.error} :\n listLightningTransactions?.clnTransactions && listLightningTransactions?.clnTransactions.length && listLightningTransactions?.clnTransactions.length > 0 ?\n
\n {\n listLightningTransactions?.clnTransactions?.map((transaction, i) => (\n \n ))\n }\n
\n :\n \n \n {isDarkMode ?\n :\n \n }\n \n {activeChannelsExist ?\n 'No transaction found. Click send/receive to start!' :\n 'No transaction found. Open channel to start!'\n }\n \n \n \n );\n};\n\nexport default CLNTransactionsList;\n","import './CLNOffer.scss';\nimport { motion } from 'framer-motion';\nimport { Row, Col } from 'react-bootstrap';\n\nimport { CopySVG } from '../../../svgs/Copy';\nimport { TRANSITION_DURATION } from '../../../utilities/constants';\nimport { copyTextToClipboard } from '../../../utilities/data-formatters';\nimport logger from '../../../services/logger.service';\nimport { setShowToast } from '../../../store/rootSlice';\nimport { useDispatch } from 'react-redux';\n\nconst OfferDetail = ({ offer, copyHandler }) => {\n return (\n <>\n {offer.bolt12 ? (\n \n \n Bolt 12\n \n \n {offer.bolt12}\n \n \n \n \n \n ) : (\n <>\n )}\n \n );\n};\n\nconst CLNOffer = (props) => {\n const dispatch = useDispatch();\n \n const copyHandler = (event) => {\n let textToCopy = '';\n switch (event.target.id) {\n case 'Bolt12':\n textToCopy = props.offer.bolt12;\n break;\n default:\n textToCopy = props.offer.bolt12;\n break;\n }\n copyTextToClipboard(textToCopy).then((response) => {\n dispatch(setShowToast({show: true, message: (event.target.id + ' Copied Successfully!'), bg: 'success'}));\n }).catch((err) => {\n logger.error(err);\n });\n }\n\n return (\n \n \n \n );\n};\n\nexport default CLNOffer;\n","import './CLNOffersList.scss';\nimport { useState } from 'react';\nimport { motion, AnimatePresence } from 'framer-motion';\nimport { Row, Col, Spinner, Alert } from 'react-bootstrap';\n\nimport { IncomingArrowSVG } from '../../../svgs/IncomingArrow';\nimport Offer from '../CLNOffer/CLNOffer';\nimport { TRANSITION_DURATION } from '../../../utilities/constants';\nimport { NoCLNTransactionLightSVG } from '../../../svgs/NoCLNTransactionLight';\nimport { NoCLNTransactionDarkSVG } from '../../../svgs/NoCLNTransactionDark';\nimport { useSelector } from 'react-redux';\nimport { selectListOffers } from '../../../store/clnSelectors';\nimport { selectIsAuthenticated, selectIsDarkMode } from '../../../store/rootSelectors';\n\nconst OfferHeader = ({ offer }) => {\n return (\n \n \n \n \n \n \n \n \n {offer.label || offer.offer_id}\n \n \n \n \n \n \n {offer.active ? 'Active' : 'Inactive'}\n \n \n \n \n {offer.single_use ? 'Single Use' : 'Multi Use'}\n \n \n \n \n \n );\n};\n\nconst CLNOffersAccordion = ({\n i,\n expanded,\n setExpanded,\n initExpansions,\n offer,\n}) => {\n const isDarkMode = useSelector(selectIsDarkMode);\n return (\n <>\n {\n initExpansions[i] = !expanded[i];\n return setExpanded(initExpansions);\n }}\n >\n \n \n \n {expanded[i] && (\n \n \n \n )}\n \n \n );\n};\n\nexport const CLNOffersList = () => {\n const isDarkMode = useSelector(selectIsDarkMode);\n const isAuthenticated = useSelector(selectIsAuthenticated);\n const listOffers = useSelector(selectListOffers);\n const initExpansions = (listOffers.offers?.reduce((acc: boolean[], curr) => [...acc, false], []) || []);\n const [expanded, setExpanded] = useState(initExpansions);\n\n return (\n isAuthenticated && listOffers.isLoading ?\n \n \n \n : \n listOffers.error ? \n {listOffers.error} : \n listOffers?.offers && listOffers?.offers.length && listOffers?.offers.length > 0 ?\n
\n { \n listOffers?.offers?.map((offer, i) => (\n \n ))\n }\n
\n :\n \n \n { isDarkMode ? \n :\n \n }\n No offer found. Click receive to generate new offer!\n \n \n );\n};\n\nexport default CLNOffersList;\n","import './CLNWallet.scss';\nimport { useState } from 'react';\nimport { motion, AnimatePresence } from 'framer-motion';\nimport PerfectScrollbar from 'react-perfect-scrollbar';\nimport { Card, Col, ButtonGroup, Spinner, Alert, Tab, Nav } from 'react-bootstrap';\n\nimport { LightningWalletSVG } from '../../../svgs/LightningWallet';\nimport { WithdrawSVG } from '../../../svgs/Withdraw';\nimport { DepositSVG } from '../../../svgs/Deposit';\nimport CLNTransactionsList from '../CLNTransactionsList/CLNTransactionsList';\nimport CurrencyBox from '../../shared/CurrencyBox/CurrencyBox';\nimport { TRANSITION_DURATION } from '../../../utilities/constants';\nimport CLNOffersList from '../CLNOffersList/CLNOffersList';\nimport { useSelector } from 'react-redux';\nimport { selectIsAuthenticated, selectWalletBalances } from '../../../store/rootSelectors';\n\nconst CLNWallet = (props) => {\n const isAuthenticated = useSelector(selectIsAuthenticated);\n const walletBalances = useSelector(selectWalletBalances);\n const [selectedTab, setSelectedTab] = useState('transactions');\n\n return (\n \n \n \n \n \n \n
\n
Lightning Wallet
\n { isAuthenticated && walletBalances.isLoading ? \n : \n walletBalances.error ? \n {walletBalances.error} : \n \n }\n
\n \n
\n \n props.onActionClick('send')}\n data-testid=\"send-button\"\n >\n \n Send\n \n props.onActionClick('receive')}\n data-testid=\"receive-button\"\n >\n \n Receive\n \n \n
\n \n setSelectedTab(selTab || 'transactions')}\n >\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
\n
\n );\n};\n\nexport default CLNWallet;\n","import React from 'react';\n\nexport const DescriptionSVG = props => {\n return (\n \n \n \n \n );\n};\n","import './CLNReceive.scss';\nimport { useState } from 'react';\nimport { Card, Row, Col, Spinner, Button, Form, InputGroup } from 'react-bootstrap';\n\nimport logger from '../../../services/logger.service';\nimport useInput from '../../../hooks/use-input';\nimport { CallStatus, CLEAR_STATUS_ALERT_DELAY, PaymentType, SATS_MSAT } from '../../../utilities/constants';\nimport { ActionSVG } from '../../../svgs/Action';\nimport { AmountSVG } from '../../../svgs/Amount';\nimport { DescriptionSVG } from '../../../svgs/Description';\nimport { LightningWalletSVG } from '../../../svgs/LightningWallet';\nimport QRCodeComponent from '../../shared/QRCode/QRCode';\nimport FiatBox from '../../shared/FiatBox/FiatBox';\nimport InvalidInputMessage from '../../shared/InvalidInputMessage/InvalidInputMessage';\nimport { CloseSVG } from '../../../svgs/Close';\nimport StatusAlert from '../../shared/StatusAlert/StatusAlert';\nimport { CLNService } from '../../../services/http.service';\nimport { useSelector } from 'react-redux';\nimport { selectFiatConfig, selectFiatUnit } from '../../../store/rootSelectors';\n\nconst CLNReceive = (props) => {\n const fiatUnit = useSelector(selectFiatUnit);\n const fiatConfig = useSelector(selectFiatConfig);\n const [paymentType, setPaymentType] = useState(PaymentType.INVOICE);\n const [showInvoice, setShowInvoice] = useState(false);\n const [responseStatus, setResponseStatus] = useState(CallStatus.NONE);\n const [responseMessage, setResponseMessage] = useState('');\n\n const isValidAmount = value => value.trim() === '' || !isNaN(value);\n const isValidDescription = value => value.trim() !== '';\n\n const {\n value: descriptionValue,\n isValid: descriptionIsValid,\n hasError: descriptionHasError,\n valueChangeHandler: descriptionChangeHandler,\n inputBlurHandler: descriptionBlurHandler,\n reset: resetDescription,\n } = useInput(isValidDescription);\n const {\n value: amountValue,\n isValid: amountIsValid,\n hasError: amountHasError,\n valueChangeHandler: amountChangeHandler,\n inputBlurHandler: amountBlurHandler,\n reset: resetAmount,\n } = useInput(isValidAmount);\n\n let formIsValid = false;\n\n if (descriptionIsValid && amountIsValid) {\n formIsValid = true;\n }\n\n const paymentTypeChangeHandler = event => {\n setPaymentType(event.target.id);\n resetDescription();\n resetAmount();\n };\n\n const touchFormControls = () => {\n descriptionBlurHandler(null);\n amountBlurHandler(null);\n };\n\n const resetFormValues = () => {\n resetDescription();\n resetAmount();\n };\n\n const delayedClearStatusAlert = () => {\n setTimeout(() => {\n setResponseStatus(CallStatus.NONE);\n setResponseMessage('');\n }, CLEAR_STATUS_ALERT_DELAY);\n };\n\n const CLNReceiveHandler = event => {\n event.preventDefault();\n touchFormControls();\n if (!formIsValid) {\n return;\n }\n setResponseStatus(CallStatus.PENDING);\n setResponseMessage(\n 'Generating ' + (paymentType === PaymentType.OFFER ? 'Offer' : 'Invoice') + '...',\n );\n let amtValueMSats = amountValue === '' ? 'any' : +amountValue * SATS_MSAT;\n CLNService.clnReceiveInvoice(\n paymentType,\n amtValueMSats,\n descriptionValue,\n 'invoicelbl' + Math.random().toString(36).slice(2) + Date.now(),\n )\n .then((response: any) => {\n logger.info(response);\n if (response.bolt11 || response.bolt12) {\n setResponseStatus(CallStatus.SUCCESS);\n setResponseMessage(response.bolt11 || response.bolt12);\n setShowInvoice(true);\n resetFormValues();\n } else {\n setResponseStatus(CallStatus.ERROR);\n setResponseMessage(response.response || response.message || 'Unknown Error');\n delayedClearStatusAlert();\n }\n })\n .catch(err => {\n logger.error(err);\n setResponseStatus(CallStatus.ERROR);\n setResponseMessage(err);\n delayedClearStatusAlert();\n });\n };\n\n if (showInvoice) {\n return (\n \n \n \n \n
\n \n Lightning Wallet\n
\n \n \n \n
\n

\n {paymentType === PaymentType.OFFER ? 'Offer' : 'Invoice'}\n

\n \n \n \n \n \n
\n
\n
\n );\n }\n\n return (\n
\n \n \n \n
\n \n Lightning Wallet\n
\n \n
\n

Generate {paymentType === PaymentType.OFFER ? 'Offer' : 'Invoice'}

\n \n \n \n \n \n \n \n Description*\n \n \n \n \n \n \n {(descriptionHasError) ?\n \n :\n
\n }\n \n \n Amount\n \n \n \n \n \n \n {!amountHasError ?\n amountValue && amountValue !== 'All' ?\n

\n ~ \n

\n :\n

\n :\n \n }\n \n
\n \n
\n \n \n \n
\n
\n
\n );\n};\n\nexport default CLNReceive;\n","import './CLNSend.scss';\nimport { useState } from 'react';\nimport { Card, Row, Col, Spinner, Button, Form, InputGroup } from 'react-bootstrap';\n\nimport logger from '../../../services/logger.service';\nimport useInput from '../../../hooks/use-input';\nimport { formatCurrency, isCompatibleVersion } from '../../../utilities/data-formatters';\nimport { CallStatus, CLEAR_STATUS_ALERT_DELAY, PaymentType, SATS_MSAT, Units, InputType } from '../../../utilities/constants';\nimport { ActionSVG } from '../../../svgs/Action';\nimport { AmountSVG } from '../../../svgs/Amount';\nimport { AddressSVG } from '../../../svgs/Address';\nimport { LightningWalletSVG } from '../../../svgs/LightningWallet';\nimport InvalidInputMessage from '../../shared/InvalidInputMessage/InvalidInputMessage';\nimport { CloseSVG } from '../../../svgs/Close';\nimport StatusAlert from '../../shared/StatusAlert/StatusAlert';\nimport { CLNService } from '../../../services/http.service';\nimport { useSelector } from 'react-redux';\nimport { selectNodeInfo, selectUIConfigUnit, selectWalletBalances } from '../../../store/rootSelectors';\n\nconst CLNSend = (props) => {\n const uiConfigUnit = useSelector(selectUIConfigUnit);\n const nodeInfo = useSelector(selectNodeInfo);\n const walletBalances = useSelector(selectWalletBalances);\n const [paymentType, setPaymentType] = useState(PaymentType.INVOICE);\n const [emptyInvoice, setEmptyInvoice] = useState(false);\n const [decodeResponse, setDecodeResponse] = useState({ description: '', amount: '' });\n const [responseStatus, setResponseStatus] = useState(CallStatus.NONE);\n const [responseMessage, setResponseMessage] = useState('');\n\n const isValidAmount = (value) => value.trim() !== '' && value > 0 && value <= (walletBalances.clnLocalBalance || 0);\n const isValidInvoice = (value) => value.trim() !== '' && (paymentType === PaymentType.KEYSEND || (paymentType === PaymentType.INVOICE && value.startsWith('lnb')) || (paymentType === PaymentType.OFFER && value.startsWith('lno')));\n\n const {\n value: invoiceValue,\n isValid: invoiceIsValid,\n hasError: invoiceHasError,\n valueChangeHandler: invoiceChangeHandler,\n inputBlurHandler: invoiceBlurHandler,\n reset: resetInvoice,\n } = useInput(isValidInvoice, InputType.LOWERCASE);\n const {\n value: amountValue,\n isValid: amountIsValid,\n hasError: amountHasError,\n valueChangeHandler: amountChangeHandler,\n inputBlurHandler: amountBlurHandler,\n reset: resetAmount,\n } = useInput(isValidAmount);\n\n let formIsValid = false;\n\n if (\n (paymentType !== PaymentType.KEYSEND && invoiceIsValid && !emptyInvoice) ||\n (paymentType !== PaymentType.KEYSEND && invoiceIsValid && emptyInvoice && amountIsValid) ||\n (paymentType === PaymentType.KEYSEND && invoiceIsValid && amountIsValid)\n ) {\n formIsValid = true;\n }\n\n const touchFormControls = () => {\n invoiceBlurHandler(null);\n amountBlurHandler(null);\n };\n\n const resetFormValues = () => {\n setEmptyInvoice(false);\n setDecodeResponse({ description: '', amount: '' });\n setPaymentType(PaymentType.INVOICE);\n resetInvoice();\n resetAmount();\n };\n\n const paymentTypeChangeHandler = event => {\n setEmptyInvoice(false);\n setDecodeResponse({ description: '', amount: '' });\n setPaymentType(event.target.id);\n resetInvoice();\n resetAmount();\n };\n\n const invoiceDecodeHandler = (event) => {\n if (paymentType !== PaymentType.KEYSEND) {\n if (!isValidInvoice(event.target.value)) {\n event.preventDefault();\n touchFormControls();\n return;\n }\n CLNService.decodeInvoice(event.target.value)\n .then((decodeRes: any) => {\n logger.info(decodeRes);\n if (paymentType === PaymentType.OFFER) {\n if (!decodeRes.valid) {\n logger.error('Offer Invalid');\n setResponseStatus(CallStatus.ERROR);\n setResponseMessage('Invalid or Open Offer');\n delayedClearStatusAlert();\n } else if (!decodeRes.offer_amount_msat) {\n setEmptyInvoice(true);\n setDecodeResponse({ \n description: (decodeRes.offer_description),\n amount: ('Open Offer')\n });\n } else {\n let amountmSats = 0;\n if (isCompatibleVersion((nodeInfo.version || ''), '23.02')) {\n amountmSats = decodeRes.offer_amount_msat || 0;\n } else {\n amountmSats = +(decodeRes.offer_amount_msat.substring(0, (decodeRes.offer_amount_msat.length - 4))) || 0;\n }\n amountChangeHandler({target: {value: (amountmSats / SATS_MSAT).toString()}});\n setDecodeResponse({ \n description: (decodeRes.offer_description),\n amount: (formatCurrency(amountmSats, Units.MSATS, uiConfigUnit, false, 0, 'string') + ' Sats')\n });\n }\n } else {\n if (!decodeRes.amount_msat) {\n setEmptyInvoice(true);\n setDecodeResponse({ \n description: (decodeRes.description),\n amount: ('Open Invoice')\n });\n } else {\n amountChangeHandler({target: {value: ((decodeRes.amount_msat) / SATS_MSAT).toString()}});\n setDecodeResponse({ \n description: (decodeRes.description),\n amount: (formatCurrency((decodeRes.amount_msat || 0), Units.MSATS, uiConfigUnit, false, 0, 'string') + ' Sats')\n });\n }\n }\n })\n .catch(err => {\n logger.error(err);\n setResponseStatus(CallStatus.ERROR);\n setResponseMessage(err);\n delayedClearStatusAlert();\n });\n }\n };\n\n const delayedClearStatusAlert = () => {\n setTimeout(() => {\n setResponseStatus(CallStatus.NONE);\n setResponseMessage('');\n }, CLEAR_STATUS_ALERT_DELAY);\n };\n\n const sendInvoice = (type: PaymentType, invoice: string, amount: number) => {\n let amtMSats =\n (type === PaymentType.INVOICE && !emptyInvoice) || type === PaymentType.OFFER\n ? null\n : amount * SATS_MSAT;\n CLNService.clnSendPayment(type, invoice, amtMSats)\n .then((response: any) => {\n logger.info(response);\n if (response.payment_hash) {\n setResponseStatus(CallStatus.SUCCESS);\n setResponseMessage('Payment sent with payment hash ' + response.payment_hash);\n resetFormValues();\n delayedClearStatusAlert();\n } else {\n setResponseStatus(CallStatus.ERROR);\n setResponseMessage(response.response || response.message || 'Unknown Error');\n delayedClearStatusAlert();\n }\n })\n .catch(err => {\n logger.error(err);\n setResponseStatus(CallStatus.ERROR);\n setResponseMessage(err);\n delayedClearStatusAlert();\n });\n };\n\n const CLNSendHandler = event => {\n event.preventDefault();\n touchFormControls();\n if (!formIsValid) {\n return;\n }\n setResponseStatus(CallStatus.PENDING);\n setResponseMessage('Sending Payment...');\n if (paymentType === PaymentType.OFFER) {\n CLNService.fetchInvoice(invoiceValue, +amountValue)\n .then((fetchInvoiceRes: any) => {\n logger.info(fetchInvoiceRes);\n sendInvoice(PaymentType.OFFER, fetchInvoiceRes.invoice, +amountValue || 0);\n })\n .catch(err => {\n logger.error(err);\n setResponseStatus(CallStatus.ERROR);\n setResponseMessage(err);\n delayedClearStatusAlert();\n });\n } else {\n sendInvoice(paymentType, invoiceValue, +amountValue || 0);\n }\n };\n\n return (\n
\n \n \n \n
\n \n Lightning Wallet\n
\n \n \n \n
\n

Send Payment

\n \n \n \n \n \n \n \n \n \n {paymentType === PaymentType.KEYSEND\n ? 'Pubkey'\n : paymentType === PaymentType.OFFER\n ? 'Offer'\n : 'Invoice'}\n *\n \n \n \n \n \n {\n invoiceChangeHandler(event);\n invoiceDecodeHandler(event);\n }}\n onBlur={invoiceBlurHandler}\n />\n \n \n \n {decodeResponse.description}\n \n \n {decodeResponse.amount}\n \n \n \n \n {invoiceHasError ? (\n \n ) : (\n
\n )}\n \n {paymentType === PaymentType.KEYSEND || emptyInvoice ? (\n \n Amount*\n \n \n \n \n \n \n {amountHasError ? (\n \n ) : (\n
\n )}\n \n ) : (\n <>\n )}\n
\n \n
\n \n \n Send Payment\n {responseStatus === CallStatus.PENDING ? (\n \n ) : (\n \n )}\n \n \n
\n
\n
\n );\n};\n\nexport default CLNSend;\n","import './CLNCard.scss';\nimport { useState } from 'react';\nimport { motion, AnimatePresence } from 'framer-motion';\nimport { Card } from 'react-bootstrap';\n\nimport CLNWallet from '../CLNWallet/CLNWallet';\nimport CLNReceive from '../CLNReceive/CLNReceive';\nimport CLNSend from '../CLNSend/CLNSend';\nimport { TRANSITION_DURATION } from '../../../utilities/constants';\n\nconst CLNCard = () => {\n const [selCLNCard, setSelCLNCard] = useState('wallet');\n\n return (\n \n \n \n {selCLNCard === 'wallet' ? (\n setSelCLNCard(action)} />\n ) : selCLNCard === 'receive' ? (\n setSelCLNCard('wallet')} />\n ) : (\n setSelCLNCard('wallet')} />\n )}\n \n \n \n );\n};\n\nexport default CLNCard;\n","import React from 'react';\n\nimport { easeOut, motion } from 'framer-motion';\nimport { OPACITY_VARIANTS } from '../utilities/constants';\n\nexport const NoChannelLightSVG = (props) => {\n return (\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n );\n};\n","import React from 'react';\n\nimport { easeOut, motion } from 'framer-motion';\nimport { OPACITY_VARIANTS } from '../utilities/constants';\n\nexport const NoChannelDarkSVG = props => {\n return (\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n );\n};\n","import './Channels.scss';\nimport { motion } from 'framer-motion';\nimport PerfectScrollbar from 'react-perfect-scrollbar';\nimport { Spinner, Card, Row, Col, ListGroup, Alert, ProgressBar, OverlayTrigger, Tooltip } from 'react-bootstrap';\n\nimport { formatCurrency, titleCase } from '../../../utilities/data-formatters';\nimport { ActionSVG } from '../../../svgs/Action';\nimport { STAGERRED_SPRING_VARIANTS_3, Units } from '../../../utilities/constants';\nimport { NoChannelLightSVG } from '../../../svgs/NoChannelLight';\nimport { NoChannelDarkSVG } from '../../../svgs/NoChannelDark';\nimport { useSelector } from 'react-redux';\nimport { selectIsAuthenticated, selectIsDarkMode, selectListChannels, selectUIConfigUnit } from '../../../store/rootSelectors';\n\nconst Channels = (props) => {\n const isDarkMode = useSelector(selectIsDarkMode);\n const isAuthenticated = useSelector(selectIsAuthenticated);\n const uiConfigUnit = useSelector(selectUIConfigUnit);\n const listChannels = useSelector(selectListChannels);\n const allChannelsMerged = [...listChannels.activeChannels, ...listChannels.pendingChannels, ...listChannels.inactiveChannels];\n\n return (\n \n Payment Channels\n \n { isAuthenticated && listChannels.isLoading ? \n \n \n \n :\n listChannels.error ? \n {listChannels.error} : \n allChannelsMerged && allChannelsMerged.length && allChannelsMerged.length > 0 ?\n \n \n {allChannelsMerged.map((channel, idx) => (\n (props.onChannelClick(channel))}\n >\n
\n <>\n
\n {titleCase(channel.current_state)}}\n >\n \n
\n {channel.node_alias}\n
\n \n
\n \n 1000000 || channel.to_them_sat > 1000000) ? (channel.to_us_sat / 1000) : channel.to_us_sat} key={1} />\n 1000000 || channel.to_them_sat > 1000000) ? (channel.to_them_sat / 1000) : channel.to_them_sat} key={2} />\n \n \n \n {formatCurrency(channel.to_us_sat, Units.SATS, uiConfigUnit, false, 5, 'string')} {uiConfigUnit}\n \n \n {formatCurrency(channel.to_them_sat, Units.SATS, uiConfigUnit, false, 5, 'string')} {uiConfigUnit}\n \n \n \n
\n \n ))}\n
\n
\n :\n \n \n { isDarkMode ? \n :\n \n }\n No channel found. Open channel to start!\n \n \n }\n
\n \n \n \n
\n );\n};\n\nexport default Channels;\n","import './ChannelOpen.scss';\nimport { useState } from 'react';\nimport { motion } from 'framer-motion';\nimport { Spinner, Card, Row, Col, Form, InputGroup } from 'react-bootstrap';\n\nimport logger from '../../../services/logger.service';\nimport useInput from '../../../hooks/use-input';\nimport { CallStatus, FeeRate, BOUNCY_SPRING_VARIANTS_1, CLEAR_STATUS_ALERT_DELAY } from '../../../utilities/constants';\nimport { ActionSVG } from '../../../svgs/Action';\nimport { AmountSVG } from '../../../svgs/Amount';\nimport { AddressSVG } from '../../../svgs/Address';\nimport FiatBox from '../../shared/FiatBox/FiatBox';\nimport InvalidInputMessage from '../../shared/InvalidInputMessage/InvalidInputMessage';\nimport { CloseSVG } from '../../../svgs/Close';\nimport StatusAlert from '../../shared/StatusAlert/StatusAlert';\nimport FeerateRange from '../../shared/FeerateRange/FeerateRange';\nimport { CLNService } from '../../../services/http.service';\nimport { useSelector } from 'react-redux';\nimport { selectFiatConfig, selectFiatUnit, selectWalletBalances } from '../../../store/rootSelectors';\n\nconst ChannelOpen = (props) => {\n const fiatUnit = useSelector(selectFiatUnit);\n const fiatConfig = useSelector(selectFiatConfig);\n const walletBalances = useSelector(selectWalletBalances);\n const [selFeeRate, setSelFeeRate] = useState(FeeRate.NORMAL);\n const [announce, setAnnounce] = useState(true);\n const [responseStatus, setResponseStatus] = useState(CallStatus.NONE);\n const [responseMessage, setResponseMessage] = useState('');\n const isValidAmount = (value) => value.trim() !== '' && value > 0 && value <= (walletBalances.btcSpendableBalance || 0);\n const isValidPubkey = (value) => value.includes('@') && value.includes(':');\n\n const {\n value: pubkeyValue,\n isValid: pubkeyIsValid,\n hasError: pubkeyHasError,\n valueChangeHandler: pubkeyChangeHandler,\n inputBlurHandler: pubkeyBlurHandler,\n reset: resetPubkey,\n } = useInput(isValidPubkey);\n const {\n value: amountValue,\n isValid: amountIsValid,\n hasError: amountHasError,\n valueChangeHandler: amountChangeHandler,\n inputBlurHandler: amountBlurHandler,\n reset: resetAmount,\n } = useInput(isValidAmount);\n\n let formIsValid = false;\n\n if (pubkeyIsValid && amountIsValid) {\n formIsValid = true;\n }\n\n const selFeeRateChangeHandler = event => {\n switch (+event.target.value) {\n case 0:\n setSelFeeRate(FeeRate.SLOW);\n break;\n case 2:\n setSelFeeRate(FeeRate.URGENT);\n break;\n default:\n setSelFeeRate(FeeRate.NORMAL);\n break;\n }\n };\n\n const touchFormControls = () => {\n pubkeyBlurHandler(null);\n amountBlurHandler(null);\n };\n\n const resetFormValues = () => {\n resetPubkey();\n resetAmount();\n setAnnounce(true);\n setSelFeeRate(FeeRate.NORMAL);\n };\n\n const delayedClearStatusAlert = (shouldClose: boolean, channelId: string = '') => {\n setTimeout(() => {\n logger.info('Should Close: ' + shouldClose);\n if (shouldClose) {\n props.onClose(channelId);\n }\n setResponseStatus(CallStatus.NONE);\n setResponseMessage('');\n }, CLEAR_STATUS_ALERT_DELAY);\n };\n\n const ChannelOpenHandler = event => {\n event.preventDefault();\n touchFormControls();\n if (!formIsValid) {\n return;\n }\n setResponseStatus(CallStatus.PENDING);\n setResponseMessage('Opening Channel...');\n CLNService.openChannel(pubkeyValue, +amountValue, selFeeRate.toLowerCase(), announce)\n .then((response: any) => {\n logger.info(response);\n if (response.channel_id || response.txid) {\n setResponseStatus(CallStatus.SUCCESS);\n setResponseMessage(\n 'Channel opened with ' +\n (response.channel_id\n ? 'channel id ' + response.channel_id\n : 'transaction id ' + response.txid),\n );\n resetFormValues();\n delayedClearStatusAlert(true, response.channel_id);\n } else {\n setResponseStatus(CallStatus.ERROR);\n setResponseMessage(response.response || response.message || 'Unknown Error');\n delayedClearStatusAlert(false);\n }\n })\n .catch(err => {\n logger.error(err);\n setResponseStatus(CallStatus.ERROR);\n setResponseMessage(err);\n delayedClearStatusAlert(false);\n });\n };\n\n return (\n
\n \n \n \n
\n Open Channel\n
\n \n
\n \n \n \n Node ID*\n \n \n \n \n \n \n {(pubkeyHasError) ?\n :
\n }\n \n \n Amount*\n \n \n \n \n \n \n {\n !amountHasError ?\n amountValue ?\n

\n ~ \n

\n :\n

\n :\n (walletBalances.btcSpendableBalance || 0)) ? \n 'Amount should be lesser then ' + (walletBalances.btcSpendableBalance || 0)\n :\n 'Invalid Amount'\n } />\n }\n \n \n Announce\n
setAnnounce(!announce)}>\n \n
\n \n \n \n \n
\n \n
\n \n \n \n
\n
\n
\n );\n};\n\nexport default ChannelOpen;\n","import './ChannelDetails.scss';\nimport { useState } from 'react';\nimport PerfectScrollbar from 'react-perfect-scrollbar';\nimport { Spinner, Card, Row, Col, ProgressBar, OverlayTrigger, Tooltip } from 'react-bootstrap';\n\nimport { copyTextToClipboard, formatCurrency, titleCase } from '../../../utilities/data-formatters';\nimport { CallStatus, CLEAR_STATUS_ALERT_DELAY, Units } from '../../../utilities/constants';\nimport { ActionSVG } from '../../../svgs/Action';\nimport { CloseSVG } from '../../../svgs/Close';\nimport StatusAlert from '../../shared/StatusAlert/StatusAlert';\nimport logger from '../../../services/logger.service';\nimport { CopySVG } from '../../../svgs/Copy';\nimport { OpenLinkSVG } from '../../../svgs/OpenLink';\nimport ToastMessage from '../../shared/ToastMessage/ToastMessage';\nimport { CLNService } from '../../../services/http.service';\nimport { setShowToast } from '../../../store/rootSlice';\nimport { useDispatch, useSelector } from 'react-redux';\nimport { selectNodeInfo, selectShowToast, selectUIConfigUnit } from '../../../store/rootSelectors';\n\nconst ChannelDetails = (props) => {\n const dispatch = useDispatch();\n const uiConfigUnit = useSelector(selectUIConfigUnit);\n const nodeInfo = useSelector(selectNodeInfo);\n const showToast = useSelector(selectShowToast);\n const [showToastState, setShowToastState] = useState(false);\n const [channelClosed, setChannelClosed] = useState(props.selChannel.current_state !== 'ACTIVE');\n const [responseStatus, setResponseStatus] = useState(CallStatus.NONE);\n const [responseMessage, setResponseMessage] = useState('');\n\n const openLinkHandler = (event) => {\n window.open('https://blockstream.info/' + (nodeInfo.network === 'testnet' ? 'testnet/' : '') + 'tx/' + event.target.id, '_blank');\n };\n\n const ChannelCloseHandler = event => {\n event.preventDefault();\n setResponseStatus(CallStatus.PENDING);\n setResponseMessage('');\n setShowToastState(true);\n };\n\n const copyHandler = event => {\n let textToCopy = '';\n switch (event.target.id) {\n case 'Channel ID':\n textToCopy = props.selChannel.channel_id;\n break;\n case 'Funding ID':\n textToCopy = props.selChannel.funding_txid;\n break;\n default:\n textToCopy = props.selChannel.channel_id;\n break;\n }\n copyTextToClipboard(textToCopy).then((response) => {\n dispatch(setShowToast({ show: true, message: (event.target.id + ' Copied Successfully!'), bg: 'success' }));\n }).catch((err) => {\n logger.error(err);\n });\n }\n\n const delayedClearStatusAlert = () => {\n setTimeout(() => {\n setResponseStatus(CallStatus.NONE);\n setResponseMessage('');\n }, CLEAR_STATUS_ALERT_DELAY);\n };\n\n const confirmResponseHandler = (response) => {\n setShowToastState(false);\n dispatch(setShowToast({ ...showToast, show: false, onConfirmResponse: null }));\n if (response) {\n setResponseStatus(CallStatus.PENDING);\n setResponseMessage('Closing Channel...');\n CLNService.closeChannel(props.selChannel.channel_id)\n .then((response: any) => {\n logger.info(response);\n if (response.type) {\n props.selChannel.current_state = 'PENDING';\n setChannelClosed(true);\n setResponseStatus(CallStatus.SUCCESS);\n setResponseMessage('Channel ' + response.type + ' closed' + (response.txid ? (' with transaction id ' + response.txid) : ''));\n delayedClearStatusAlert();\n } else {\n setResponseStatus(CallStatus.ERROR);\n setResponseMessage(response.response || response.message || 'Unknown Error');\n delayedClearStatusAlert();\n }\n })\n .catch(err => {\n logger.error(err);\n setResponseStatus(CallStatus.ERROR);\n setResponseMessage(err);\n delayedClearStatusAlert();\n });\n } else {\n setResponseStatus(CallStatus.NONE);\n setResponseMessage('');\n }\n };\n\n return (\n
\n \n \n \n
\n Channel Detail\n
\n \n
\n \n \n \n \n {titleCase(props.selChannel.current_state)}}\n >\n \n
\n {props.selChannel.node_alias}\n
\n \n \n 1000000 || props.selChannel.to_them_sat > 1000000) ? (props.selChannel.to_us_sat / 1000) : props.selChannel.to_us_sat} key={1} />\n 1000000 || props.selChannel.to_them_sat > 1000000) ? (props.selChannel.to_them_sat / 1000) : props.selChannel.to_them_sat} key={2} />\n \n \n \n {formatCurrency(props.selChannel.to_us_sat, Units.SATS, uiConfigUnit, false, 5, 'string')} {uiConfigUnit}\n \n \n {formatCurrency(props.selChannel.to_them_sat, Units.SATS, uiConfigUnit, false, 5, 'string')} {uiConfigUnit}\n \n \n \n \n Short Channel Id\n \n {props.selChannel.short_channel_id || '-'}\n \n \n \n Withdrawal Timelock\n \n {props.selChannel.their_to_self_delay} Blocks\n \n \n \n Opened By\n \n {titleCase(props.selChannel.opener)}\n \n \n \n Channel Type\n \n {props.selChannel.private ? 'Private' : 'Public'}\n \n \n \n Dust Limit\n \n {formatCurrency(props.selChannel.dust_limit_msat, Units.MSATS, uiConfigUnit, false, 8, 'string')} {uiConfigUnit}\n \n \n \n Spendable\n \n {formatCurrency(props.selChannel.spendable_msat, Units.MSATS, uiConfigUnit, false, 8, 'string')} {uiConfigUnit}\n \n \n \n Receivable\n \n {formatCurrency(props.selChannel.receivable_msat, Units.MSATS, uiConfigUnit, false, 8, 'string')} {uiConfigUnit}\n \n \n \n Channel ID\n {props.selChannel.channel_id}\n \n \n \n Funding ID\n {props.selChannel.funding_txid}\n \n \n \n
\n \n \n Withdrawal Timelock\n \n \n {props.selChannel.their_to_self_delay} Blocks\n \n \n \n \n Opened By\n \n \n {titleCase(props.selChannel.opener)}\n \n \n \n \n Channel Type\n \n \n {props.selChannel.private ? 'Private' : 'Public'}\n \n \n \n \n Dust Limit\n \n \n {formatCurrency(\n props.selChannel.dust_limit_msat,\n Units.MSATS,\n uiConfigUnit,\n false,\n 8,\n 'string',\n )}{' '}\n {uiConfigUnit}\n \n \n \n \n Spendable\n \n \n {formatCurrency(\n props.selChannel.spendable_msat,\n Units.MSATS,\n uiConfigUnit,\n false,\n 8,\n 'string',\n )}{' '}\n {uiConfigUnit}\n \n \n \n \n Receivable\n \n \n {formatCurrency(\n props.selChannel.receivable_msat,\n Units.MSATS,\n uiConfigUnit,\n false,\n 8,\n 'string',\n )}{' '}\n {uiConfigUnit}\n \n \n \n \n Channel ID\n \n \n {props.selChannel.channel_id}\n \n \n \n \n \n \n \n Funding ID\n \n \n {props.selChannel.funding_txid}\n \n \n \n \n \n \n \n \n \n
\n {!showToastState ? (\n \n ) : (\n <>\n )}\n
\n {channelClosed ? (\n <>\n ) : (\n \n \n Close Channel\n {responseStatus === CallStatus.PENDING ? (\n \n ) : (\n \n )}\n \n \n )}\n
\n
\n
\n );\n};\n\nexport default ChannelDetails;\n","import './ChannelsCard.scss';\nimport { useState } from 'react';\nimport { motion, AnimatePresence } from 'framer-motion';\nimport { Card } from 'react-bootstrap';\n\nimport Channels from '../Channels/Channels';\nimport ChannelOpen from '../ChannelOpen/ChannelOpen';\nimport ChannelDetails from '../ChannelDetails/ChannelDetails';\nimport { CLEAR_STATUS_ALERT_DELAY, TRANSITION_DURATION } from '../../../utilities/constants';\nimport { PeerChannel } from '../../../types/root.type';\n\nconst ChannelsCard = () => {\n const [selChannelCard, setSelChannelCard] = useState('channels');\n const [selChannel, setSelChannel] = useState(null);\n const [newlyOpenedChannelId, setNewlyOpenedChannelId] = useState('');\n\n const onCloseHandler = channelId => {\n setNewlyOpenedChannelId(channelId);\n setSelChannelCard('channels');\n setTimeout(() => {\n setNewlyOpenedChannelId('');\n }, CLEAR_STATUS_ALERT_DELAY);\n };\n\n return (\n \n \n \n {selChannelCard === 'open' ? (\n \n ) : selChannelCard === 'details' ? (\n setSelChannelCard('channels')} selChannel={selChannel} />\n ) : (\n setSelChannelCard('open')}\n onChannelClick={channel => {\n setSelChannel(channel);\n setSelChannelCard('details');\n }}\n />\n )}\n \n \n \n );\n};\n\nexport default ChannelsCard;\n","import './CLNHome.scss';\nimport { Row, Col } from 'react-bootstrap';\nimport Overview from '../Overview/Overview';\nimport BTCCard from '../BTCCard/BTCCard';\nimport CLNCard from '../CLNCard/CLNCard';\nimport ChannelsCard from '../ChannelsCard/ChannelsCard';\nimport Header from '../../ui/Header/Header';\nimport { useSelector } from 'react-redux';\nimport { useInjectReducer } from '../../../hooks/use-injectreducer';\nimport clnReducer from '../../../store/clnSlice';\nimport { selectNodeInfo } from '../../../store/rootSelectors';\n\nfunction CLNHome() {\n useInjectReducer('cln', clnReducer);\n const nodeInfo = useSelector(selectNodeInfo);\n\n if (nodeInfo.error) {\n return (\n \n \n {nodeInfo.error}\n \n \n );\n }\n\n return (\n <>\n
\n
\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
\n \n );\n}\n\nexport default CLNHome;\n","import './InvalidInputMessage.scss';\nimport { motion } from 'framer-motion';\nimport { STAGERRED_SPRING_VARIANTS_2 } from '../../../utilities/constants';\nimport { InformationSVG } from '../../../svgs/Information';\n\nconst InvalidInputMessage = props => {\n return (\n \n \n {props.message}\n \n );\n};\n\nexport default InvalidInputMessage;\n","import './ToastMessage.scss';\nimport { useEffect, useState } from 'react';\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome';\nimport {\n faCheck,\n faTriangleExclamation,\n faExclamationCircle,\n} from '@fortawesome/free-solid-svg-icons';\nimport { motion } from 'framer-motion';\nimport { Toast, Col } from 'react-bootstrap';\n\nimport { BOUNCY_SPRING_VARIANTS_3, STAGERRED_SPRING_VARIANTS_2 } from '../../../utilities/constants';\nimport { CloseSVG } from '../../../svgs/Close';\nimport { QuestionMarkSVG } from '../../../svgs/QuestionMark';\nimport { setShowToast } from '../../../store/rootSlice';\nimport { useDispatch, useSelector } from 'react-redux';\nimport { selectShowToast } from '../../../store/rootSelectors';\n\nconst ToastMessage = (props) => {\n const dispatch = useDispatch();\n const showToast = useSelector(selectShowToast);\n const [y, setY] = useState('0');\n const TOAST_SHOW = props.showOnComponent ? !!props.show : !!showToast.show;\n const TOAST_TYPE = props.type || showToast.type || '';\n const SHOW_DELAY = props.showDelay || showToast.delay || 3000;\n const TOAST_BG = props.bg || showToast.bg || 'primary';\n const TOAST_CONTAINER_CLASS_NAME = 'toast-container w-100 d-flex justify-content-center ' + (props.containerClassName || showToast.containerClassName || 'top-0');\n const TOAST_CLASS_NAME = 'd-flex align-items-start justify-content-between ' + (props.className || showToast.className || '');\n const TOAST_MESSAGE = props.message || showToast.message || '';\n\n useEffect(() => {\n if (!props.showOnComponent) {\n setY(TOAST_SHOW ? '3rem' : '0');\n }\n }, [props.showOnComponent, TOAST_SHOW]);\n\n const closeHandler = () => {\n if (!props.showOnComponent) {\n dispatch(setShowToast({...showToast, show: false}));\n }\n };\n\n const confirmCloseHandler = response => {\n if (!props.showOnComponent) {\n dispatch(setShowToast({...showToast, show: false, onConfirmResponse: response}));\n } else {\n props.onConfirmResponse(response);\n }\n };\n return (\n <>\n {TOAST_TYPE === 'CONFIRM' ? (\n TOAST_SHOW ? (\n \n \n \n \n \n \n \n \n \n {TOAST_MESSAGE || 'Default Message!'}\n confirmCloseHandler(true)}\n >\n Yes\n \n confirmCloseHandler(false)}\n >\n No\n \n \n \n \n \n \n \n ) : (\n <>\n )\n ) : (\n \n \n \n \n \n \n \n \n \n {TOAST_MESSAGE || 'Default Message!'}\n \n \n \n \n \n \n \n \n \n )}\n \n );\n};\n\nexport default ToastMessage;\n","import React from 'react';\n\nexport const QuestionMarkSVG = props => {\n return (\n \n \n \n \n \n );\n};\n","import { useState } from 'react';\nimport { InputType } from '../utilities/constants';\n\nconst useInput = (validateValue, inputType: InputType = InputType.ORIGINAL) => {\n const [enteredValue, setEnteredValue] = useState('');\n const [isTouched, setIsTouched] = useState(false);\n\n const normalizeValue = (value: string) => {\n switch (inputType) {\n case 'lowercase':\n return value.toLowerCase();\n case 'uppercase':\n return value.toUpperCase();\n default:\n return value;\n }\n };\n\n const valueIsValid = validateValue(enteredValue);\n const hasError = !valueIsValid && isTouched;\n\n const valueChangeHandler = (event) => {\n event.target.value = normalizeValue(event.target.value);\n setEnteredValue(event.target.value);\n };\n\n const inputBlurHandler = (event) => {\n setIsTouched(true);\n };\n\n const reset = () => {\n setEnteredValue('');\n setIsTouched(false);\n };\n\n return {\n value: enteredValue,\n isValid: valueIsValid,\n hasError,\n valueChangeHandler,\n inputBlurHandler,\n reset\n };\n};\n\nexport default useInput;\n"],"names":["BitcoinWalletSVG","props","_jsx","motion","svg","className","svgClassName","width","height","viewBox","fill","xmlns","variants","OPACITY_VARIANTS","children","path","d","initial","ANIMATION_INITIAL_STATE","animate","ANIMATION_FINAL_STATE","transition","ANIMATION_TRANSITION","WithdrawSVG","DepositSVG","IncomingArrowSVG","_props$txStatus","_props$txStatus2","_props$txStatus3","_props$txStatus4","_props$txStatus5","_props$txStatus6","OverlayTrigger","placement","delay","show","hide","overlay","txStatus","toLowerCase","Tooltip","titleCase","_Fragment","_jsxs","cx","cy","r","OutgoingArrowSVG","showTooltip","dataType","convertIntoDateFormat","dataValue","OpenLinkSVG","id","fillRule","clipRule","TransactionDetail","_ref","transaction","copyHandler","openLinkHandler","blockheight","Row","Col","xs","description","txid","onClick","CopySVG","payment_id","outpoint","split","dispatch","useDispatch","nodeInfo","useSelector","selectNodeInfo","div","collapsed","scale","opacity","open","duration","TRANSITION_DURATION","event","textToCopy","target","copyTextToClipboard","then","response","setShowToast","message","bg","catch","err","logger","error","window","network","NoBTCTransactionDarkSVG","xmlnsXlink","ease","easeOut","points","x1","y1","x2","y2","gradientTransform","gradientUnits","offset","stopColor","stopOpacity","rx","ry","transform","NoBTCTransactionLightSVG","WithdrawHeader","withdraw","fiatUnit","selectFiatUnit","uiConfigUnit","selectUIConfigUnit","fiatConfig","selectFiatConfig","tag","formatCurrency","debit_msat","Units","MSATS","DateBox","timestamp","FiatBox","value","fromUnit","symbol","rate","DepositHeader","_ref2","deposit","credit_msat","BTCTransactionsAccordion","_ref3","_transaction$tag","i","expanded","setExpanded","initExpansions","isDarkMode","selectIsDarkMode","backgroundColor","AnimatePresence","exit","Transaction","BTCTransactionsList","_listBitcoinTransacti","_listBitcoinTransacti2","isAuthenticated","selectIsAuthenticated","listBitcoinTransactions","selectListBitcoinTransactions","btcTransactions","reduce","acc","curr","useState","isLoading","Spinner","animation","variant","Alert","length","map","walletBalances","selectWalletBalances","Card","Body","CurrencyBox","btcSpendableBalance","shorten","rootClasses","currencyClasses","unitClasses","ButtonGroup","onActionClick","PerfectScrollbar","toastMessage","img","alt","src","QRCodeCanvas","size","includeMargin","bgColor","fgColor","InputGroup","Form","Control","placeholder","readOnly","Text","responseStatus","setResponseStatus","CallStatus","NONE","responseMessage","setResponseMessage","delayedClearStatusAlert","setTimeout","CLEAR_STATUS_ALERT_DELAY","useEffect","PENDING","CLNService","btcDeposit","info","bech32","SUCCESS","ERROR","Header","onClose","CloseSVG","QRCodeComponent","StatusAlert","AmountSVG","AddressSVG","feeRate","selectFeeRate","getSelFeeRateValue","_feeRate$perkb","_feeRate$perkb2","_feeRate$perkb3","selFeeRate","FeeRate","SLOW","perkb","min_acceptable","URGENT","unilateral_close","opening","Label","Math","round","SATS","Range","tabIndex","defaultValue","min","max","selFeeRateChangeHandler","onChange","FEE_RATES","setSelFeeRate","NORMAL","addressValue","isValid","addressIsValid","hasError","addressHasError","valueChangeHandler","addressChangeHandler","inputBlurHandler","addressBlurHandler","reset","resetAddress","useInput","trim","amountValue","amountIsValid","amountHasError","amountChangeHandler","amountBlurHandler","resetAmount","formIsValid","onSubmit","preventDefault","btcWithdraw","Button","type","parseFloat","toString","toLocaleString","onBlur","disabled","InvalidInputMessage","FeerateRange","Footer","ActionSVG","BTCCard","selBTCCard","setSelBTCCard","mode","y","BTCWallet","action","BTCDeposit","BTCWithdraw","LightningWalletSVG","TODAY","floor","Date","now","Payment","payment","amount_msat","amount_sent_msat","bolt11","bolt12","payment_preimage","Invoice","invoice","paid_at","expires_at","_props$transaction$ty","destination","payment_hash","NoCLNTransactionLightSVG","NoCLNTransactionDarkSVG","PaymentHeader","_payment$status","status","created_at","InvoiceHeader","amount_received_msat","CLNTransactionsAccordion","_transaction$type","CLNTransactionsList","_listLightningTransac","_listLightningTransac2","activeChannelsExist","selectActiveChannelsExist","listLightningTransactions","selectListLightningTransactions","clnTransactions","OfferDetail","offer","OfferHeader","used","label","offer_id","active","single_use","CLNOffersAccordion","Offer","CLNOffersList","_listOffers$offers","_listOffers$offers2","listOffers","selectListOffers","offers","selectedTab","setSelectedTab","clnLocalBalance","Tab","Container","activeKey","onSelect","selTab","Nav","Item","Link","eventKey","Content","Pane","DescriptionSVG","paymentType","setPaymentType","PaymentType","INVOICE","showInvoice","setShowInvoice","descriptionValue","descriptionIsValid","descriptionHasError","descriptionChangeHandler","descriptionBlurHandler","resetDescription","isNaN","paymentTypeChangeHandler","OFFER","amtValueMSats","SATS_MSAT","clnReceiveInvoice","random","slice","Check","checked","inline","name","emptyInvoice","setEmptyInvoice","decodeResponse","setDecodeResponse","amount","isValidInvoice","KEYSEND","startsWith","invoiceValue","invoiceIsValid","invoiceHasError","invoiceChangeHandler","invoiceBlurHandler","resetInvoice","InputType","LOWERCASE","touchFormControls","sendInvoice","amtMSats","clnSendPayment","fetchInvoice","fetchInvoiceRes","decodeInvoice","decodeRes","valid","offer_amount_msat","amountmSats","isCompatibleVersion","version","substring","offer_description","invoiceDecodeHandler","CLNCard","selCLNCard","setSelCLNCard","CLNWallet","CLNReceive","CLNSend","NoChannelLightSVG","xlinkHref","NoChannelDarkSVG","listChannels","selectListChannels","allChannelsMerged","activeChannels","pendingChannels","inactiveChannels","ListGroup","as","channel","idx","_channel$current_stat","_channel$current_stat2","li","newlyOpenedChannelId","channel_id","STAGERRED_SPRING_VARIANTS_3","custom","onChannelClick","current_state","node_alias","ProgressBar","to_us_sat","to_them_sat","short_channel_id","onOpenChannel","announce","setAnnounce","pubkeyValue","pubkeyIsValid","pubkeyHasError","pubkeyChangeHandler","pubkeyBlurHandler","resetPubkey","includes","shouldClose","channelId","arguments","undefined","openChannel","layout","BOUNCY_SPRING_VARIANTS_1","_props$selChannel$cur","_props$selChannel$cur2","showToast","selectShowToast","showToastState","setShowToastState","channelClosed","setChannelClosed","selChannel","funding_txid","options","suppressScrollX","their_to_self_delay","opener","private","dust_limit_msat","spendable_msat","receivable_msat","ToastMessage","showOnComponent","containerClassName","onConfirmResponse","_objectSpread","closeChannel","ChannelsCard","selChannelCard","setSelChannelCard","setSelChannel","setNewlyOpenedChannelId","ChannelOpen","ChannelDetails","Channels","useInjectReducer","clnReducer","Overview","lg","STAGERRED_SPRING_VARIANTS_2","InformationSVG","setY","TOAST_SHOW","TOAST_TYPE","SHOW_DELAY","showDelay","TOAST_BG","TOAST_CONTAINER_CLASS_NAME","TOAST_CLASS_NAME","TOAST_MESSAGE","closeHandler","confirmCloseHandler","Toast","QuestionMarkSVG","BOUNCY_SPRING_VARIANTS_3","autohide","FontAwesomeIcon","icon","faCheck","faTriangleExclamation","faExclamationCircle","strokeWidth","strokeLinecap","strokeLinejoin","validateValue","inputType","ORIGINAL","enteredValue","setEnteredValue","isTouched","setIsTouched","valueIsValid","toUpperCase","normalizeValue"],"sourceRoot":""} \ No newline at end of file diff --git a/apps/frontend/build/static/js/687.c6039462.chunk.js b/apps/frontend/build/static/js/687.c6039462.chunk.js deleted file mode 100644 index 3afa215a..00000000 --- a/apps/frontend/build/static/js/687.c6039462.chunk.js +++ /dev/null @@ -1,2 +0,0 @@ -(self.webpackChunkcln_application_frontend=self.webpackChunkcln_application_frontend||[]).push([[687],{791:(e,s,t)=>{"use strict";t.d(s,{A:()=>i});var l=t(7280),a=t(9786),n=t(6652),o=t(812);const i=e=>(0,o.jsxs)(l.P.div,{className:"message invalid",variants:a.YO,initial:"hidden",animate:"visible",exit:"hidden",custom:e.custom||0,children:[(0,o.jsx)(n.$,{svgClassName:"information-svg",className:"fill-danger"}),e.message]})},3117:(e,s,t)=>{"use strict";t.d(s,{A:()=>j});var l=t(9740),a=t(2176),n=t(3647),o=t(2820),i=t(7280),r=t(7036),c=t(4173),d=t(9786),m=t(4806),x=t(5451),N=t(3880),h=t(5588),u=t(5756),C=t(812);const j=e=>{const s=(0,h.wA)(),t=(0,h.d4)(u.Py),[j,g]=(0,a.useState)("0"),f=e.showOnComponent?!!e.show:!!t.show,p=e.type||t.type||"",A=e.showDelay||t.delay||3e3,v=e.bg||t.bg||"primary",w="toast-container w-100 d-flex justify-content-center "+(e.containerClassName||t.containerClassName||"top-0"),b="d-flex align-items-start justify-content-between "+(e.className||t.className||""),R=e.message||t.message||"";(0,a.useEffect)((()=>{e.showOnComponent||g(f?"3rem":"0")}),[e.showOnComponent,f]);const T=()=>{e.showOnComponent||s((0,N.Fs)((0,l.A)((0,l.A)({},t),{},{show:!1})))},E=a=>{e.showOnComponent?e.onConfirmResponse(a):s((0,N.Fs)((0,l.A)((0,l.A)({},t),{},{show:!1,onConfirmResponse:a})))};return(0,C.jsx)(C.Fragment,{children:"CONFIRM"===p?f?(0,C.jsx)(i.P.div,{variants:d.YO,initial:"hidden",animate:"visible",exit:"hidden",custom:e.custom||0,className:w,children:(0,C.jsx)(r.A,{show:!0,onClose:T,delay:A||3e3,"data-bg":v,className:b,children:(0,C.jsx)(r.A.Body,{"data-testid":"toast-body",className:"p-0 w-100 d-flex align-items-start justify-content-start",children:(0,C.jsxs)(c.A,{className:"d-flex align-items-stretch justify-content-between",children:[(0,C.jsx)(c.A,{xs:2,className:"message-type-box d-flex align-items-center justify-content-center",children:(0,C.jsx)(x.i,{})}),(0,C.jsx)(c.A,{xs:10,className:"p-2",children:(0,C.jsxs)(c.A,{className:"d-flex align-items-center justify-content-between",children:[(0,C.jsx)(c.A,{xs:6,children:R||"Default Message!"}),(0,C.jsx)("button",{type:"button",className:"btn btn-rounded btn-sm btn-secondary",onClick:()=>E(!0),children:"Yes"}),(0,C.jsx)("button",{type:"button",className:"btn btn-rounded btn-sm btn-secondary",onClick:()=>E(!1),children:"No"})]})})]})})})}):(0,C.jsx)(C.Fragment,{}):(0,C.jsx)(i.P.div,{"data-testid":"toast-div",animate:{y:j},transition:d.A9,className:w,children:(0,C.jsx)(r.A,{"data-testid":"toast",show:f,onClose:T,delay:A||3e3,autohide:!0,"data-bg":v,className:b,children:(0,C.jsx)(r.A.Body,{"data-testid":"toast-body",className:"p-0 w-100 d-flex align-items-stretch justify-content-start",children:(0,C.jsxs)(c.A,{className:"d-flex align-items-stretch justify-content-between",children:[(0,C.jsx)(c.A,{xs:2,className:"message-type-box d-flex align-items-center justify-content-center",children:(0,C.jsx)(n.g,{className:"svg-white fa-xl",icon:"success"===v?o.e68:"danger"===v?o.JAe:o.tUE})}),(0,C.jsx)(c.A,{xs:10,className:"p-2",children:(0,C.jsxs)(c.A,{className:"d-flex align-items-center justify-content-between",children:[R||"Default Message!",(0,C.jsx)("span",{className:"btn-toast-close",onClick:T,children:(0,C.jsx)(m.P,{})})]})})]})})})})})}},3821:(e,s,t)=>{"use strict";t.d(s,{A:()=>c});var l=t(2176),a=t(623),n=t(7280),o=t(4571),i=t(9786),r=t(812);const c=()=>{const e=(0,o.zy)();return(0,l.useEffect)((()=>{window.scrollTo({top:0,behavior:"smooth"})}),[e.pathname]),(0,r.jsx)(a.N,{mode:"wait",children:(0,r.jsx)(n.P.div,{initial:{y:20,opacity:0},animate:{y:0,opacity:1},exit:{y:-20,opacity:0},transition:{duration:i.xt},className:"overflow-hidden","data-testid":"route-transition",children:(0,r.jsx)(o.sv,{})},e.pathname)})}},4550:(e,s,t)=>{"use strict";t.d(s,{A:()=>o});var l=t(2176),a=t(9786);const n=e=>e<576?a.Rp.XS:e<768?a.Rp.SM:e<992?a.Rp.MD:e<1200?a.Rp.LG:e<1440?a.Rp.XL:a.Rp.XXL,o=()=>{const[e,s]=(0,l.useState)((()=>n(window.innerWidth)));return(0,l.useEffect)((()=>{const e=()=>setTimeout((()=>s(n(window.innerWidth))),200);return window.addEventListener("resize",e),()=>window.removeEventListener("resize",e)}),[]),e}},5156:()=>{},5451:(e,s,t)=>{"use strict";t.d(s,{i:()=>a});t(2176);var l=t(812);const a=e=>(0,l.jsxs)("svg",{className:e.className,width:"32",height:"32",viewBox:"0 0 32 32",fill:"none",xmlns:"http://www.w3.org/2000/svg",children:[(0,l.jsx)("path",{className:"stroke-white",d:"M16 28C22.6274 28 28 22.6274 28 16C28 9.37258 22.6274 4 16 4C9.37258 4 4 9.37258 4 16C4 22.6274 9.37258 28 16 28Z",strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round"}),(0,l.jsx)("path",{className:"fill-white",d:"M16 24C16.8284 24 17.5 23.3284 17.5 22.5C17.5 21.6716 16.8284 21 16 21C15.1716 21 14.5 21.6716 14.5 22.5C14.5 23.3284 15.1716 24 16 24Z"}),(0,l.jsx)("path",{className:"stroke-white",d:"M16 18V17C16.6922 17 17.3689 16.7947 17.9445 16.4101C18.5201 16.0256 18.9687 15.4789 19.2336 14.8394C19.4985 14.1999 19.5678 13.4961 19.4327 12.8172C19.2977 12.1383 18.9644 11.5146 18.4749 11.0251C17.9854 10.5356 17.3617 10.2023 16.6828 10.0673C16.0039 9.9322 15.3001 10.0015 14.6606 10.2664C14.0211 10.5313 13.4744 10.9799 13.0899 11.5555C12.7053 12.1311 12.5 12.8078 12.5 13.5",strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round"})]})},6205:(e,s,t)=>{"use strict";t.d(s,{A:()=>n});var l=t(2176),a=t(9786);const n=function(e){let s=arguments.length>1&&void 0!==arguments[1]?arguments[1]:a.NZ.ORIGINAL;const[t,n]=(0,l.useState)(""),[o,i]=(0,l.useState)(!1),r=e(t);return{value:t,isValid:r,hasError:!r&&o,valueChangeHandler:e=>{e.target.value=(e=>{switch(s){case"lowercase":return e.toLowerCase();case"uppercase":return e.toUpperCase();default:return e}})(e.target.value),n(e.target.value)},inputBlurHandler:e=>{i(!0)},reset:()=>{n(""),i(!1)}}}},6652:(e,s,t)=>{"use strict";t.d(s,{$:()=>a});t(2176);var l=t(812);const a=e=>(0,l.jsxs)("svg",{className:e.svgClassName,width:"17",height:"17",viewBox:"0 0 17 17",fill:"none",xmlns:"http://www.w3.org/2000/svg",children:[(0,l.jsx)("path",{fillRule:"evenodd",clipRule:"evenodd",d:"M8.125 1.25C4.32804 1.25 1.25 4.32804 1.25 8.125C1.25 11.922 4.32804 15 8.125 15C11.922 15 15 11.922 15 8.125C15 4.32804 11.922 1.25 8.125 1.25ZM0 8.125C0 3.63769 3.63769 0 8.125 0C12.6123 0 16.25 3.63769 16.25 8.125C16.25 12.6123 12.6123 16.25 8.125 16.25C3.63769 16.25 0 12.6123 0 8.125Z",className:e.className}),(0,l.jsx)("path",{fillRule:"evenodd",clipRule:"evenodd",d:"M6.875 7.5C6.875 7.15482 7.15482 6.875 7.5 6.875H8.125C8.47018 6.875 8.75 7.15482 8.75 7.5V11.25C9.09518 11.25 9.375 11.5298 9.375 11.875C9.375 12.2202 9.09518 12.5 8.75 12.5H8.125C7.77982 12.5 7.5 12.2202 7.5 11.875V8.125C7.15482 8.125 6.875 7.84518 6.875 7.5Z",className:e.className}),(0,l.jsx)("path",{d:"M7.96875 5.625C8.48652 5.625 8.90625 5.20527 8.90625 4.6875C8.90625 4.16973 8.48652 3.75 7.96875 3.75C7.45098 3.75 7.03125 4.16973 7.03125 4.6875C7.03125 5.20527 7.45098 5.625 7.96875 5.625Z",className:e.className})]})},7159:(e,s,t)=>{"use strict";t.d(s,{A:()=>h});var l=t(7280),a=t(4173),n=t(8286),o=t(9786),i=t(307),r=t(6652),c=t(9735),d=t(5168),m=t(3880),x=t(5588),N=t(812);const h=e=>{const s=(0,x.wA)();return e.responseStatus!==o.JT.NONE?(0,N.jsxs)(l.P.div,{className:"w-100 d-flex align-items-start justify-content-center alert alert-"+(e.responseStatus===o.JT.ERROR?"danger":e.responseStatus===o.JT.PENDING?"warning":e.responseStatus===o.JT.SUCCESS?"success":""),initial:"hidden",animate:"visible",exit:"hidden",variants:o.tw,transition:{ease:"easeOut",duration:1},children:[(0,N.jsx)(a.A,{xs:1,className:"d-flex align-items-start justify-content-start mt-1",children:e.responseStatus===o.JT.PENDING?(0,N.jsx)(n.A,{variant:"primary",size:"sm","data-testid":"status-pending-spinner"}):(0,N.jsx)(r.$,{svgClassName:"information-svg",className:e.responseStatus===o.JT.ERROR?"fill-danger":"fill-success"})}),(0,N.jsx)(a.A,{xs:10,className:"mt-2px ms-1 px-1 text-status",children:(0,i.nx)(e.responseMessage)}),e.responseStatus!==o.JT.PENDING?(0,N.jsx)(a.A,{xs:1,onClick:t=>{(0,i.eM)(e.responseMessage).then((e=>{s((0,m.Fs)({show:!0,message:"Response Copied Successfully!",bg:"success"}))})).catch((e=>{d.A.error(e)}))},className:"d-flex align-items-start justify-content-end btn-sm-svg btn-svg-copy mt-1",id:"",children:(0,N.jsx)(c.G,{id:"",showTooltip:!0})}):(0,N.jsx)(N.Fragment,{})]}):(0,N.jsx)(N.Fragment,{})}},8586:(e,s,t)=>{"use strict";t.r(s),t.d(s,{App:()=>se,default:()=>te});var l=t(5708),a=t(4550),n=t(3117),o=t(9740),i=t(2176),r=t(623),c=t(7280),d=t(5235),m=t(1343),x=t(5675),N=t(4613),h=t(7557),u=t(9735),C=t(4806),j=t(5168),g=t(307),f=t(3880),p=t(5588),A=t(5756),v=t(812);const w=()=>{const e=(0,p.wA)(),s=(0,p.d4)(A.SZ),t=(0,p.d4)(A.bD),l=(0,p.d4)(A.CV),[a,n]=(0,i.useState)("");(0,i.useEffect)((()=>{var e,s;let l=t.id||"";t.address&&null!==(e=t.address)&&void 0!==e&&e.length&&t.address.length>0?l=l+"@"+t.address[0].address+":"+t.address[0].port:t.binding&&null!==(s=t.binding)&&void 0!==s&&s.length&&t.binding.length>0?l=l+"@"+t.binding[0].address+":"+t.binding[0].port:l+="@ : ",n(l)}),[t]);const w=()=>{(0,g.eM)(a).then((s=>{e((0,f.Fs)({show:!0,message:"Node ID Copied Successfully!",bg:"success"}))})).catch((e=>{j.A.error(e)}))},b=()=>{e((0,f.S0)((0,o.A)((0,o.A)({},l),{},{nodeInfoModal:!1})))};return(0,v.jsxs)(m.A,{show:l.nodeInfoModal,onHide:b,centered:!0,className:"modal-lg","data-testid":"node-info-modal",children:[(0,v.jsx)(m.A.Header,{className:"d-flex align-items-start justify-content-end pb-0",children:(0,v.jsx)("span",{className:"span-close-svg",onClick:b,children:(0,v.jsx)(C.P,{})})}),(0,v.jsxs)(m.A.Body,{className:"py-0",children:[(0,v.jsxs)(x.A,{className:"qr-container m-auto d-flex",children:[(0,v.jsx)(r.N,{children:(0,v.jsx)(c.P.img,{alt:"Core Lightning Logo",src:s?"/images/cln-logo-dark.png":"/images/cln-logo-light.png",className:"qr-cln-logo",initial:{opacity:0},animate:{opacity:1},transition:{delay:.05,duration:.01}},"cln-logo")}),(0,v.jsx)(d.Xe,{value:a||"",size:220,includeMargin:!0,bgColor:s?"#0C0C0F":"#FFFFFF",fgColor:s?"#FFFFFF":"#000000"})]}),(0,v.jsxs)(x.A,{className:"d-flex align-items-start justify-content-center pt-2",children:[(0,v.jsx)("h4",{className:"text-blue fw-bold d-flex justify-content-center",children:"Node ID"}),(0,v.jsx)("p",{className:"py-3 w-75 text-break text-dark d-flex justify-content-center",children:"Other Lightning nodes can open payment channels to your node following this Node ID."}),(0,v.jsx)("div",{className:"mb-4 text-break text-dark d-flex justify-content-center",children:(0,v.jsxs)(N.A,{className:"mb-3",children:[(0,v.jsx)(h.A.Control,{onClick:w,placeholder:a,"aria-label":a,"aria-describedby":"copy-addon",className:"form-control-left",readOnly:!0}),(0,v.jsx)(N.A.Text,{id:a,className:"form-control-addon form-control-addon-right",onClick:w,children:(0,v.jsx)(u.G,{id:a})})]})})]})]})]})};var b=t(4173),R=t(1829),T=t(8286),E=t(2189),y=t(1416);const I=e=>(0,v.jsx)(E.A,{placement:"auto",delay:{show:250,hide:250},overlay:e.showTooltip?(0,v.jsx)(y.A,{children:e.tooltipText||""}):(0,v.jsx)(v.Fragment,{}),children:(0,v.jsxs)("svg",{width:"17",height:"17",viewBox:"0 0 17 17",fill:"none",xmlns:"http://www.w3.org/2000/svg",children:[(0,v.jsx)("path",{d:"M1 8.5H16",stroke:"#9F9F9F",strokeWidth:"1.3",strokeLinecap:"round",strokeLinejoin:"round"}),(0,v.jsx)("path",{d:"M8.5 1V16",stroke:"#9F9F9F",strokeWidth:"1.3",strokeLinecap:"round",strokeLinejoin:"round"})]})});var L=t(9631);const _=()=>{var e,s,t,l,a,n,w,E,y,_,O,P,S,k,G,M,H,F,V,U,D,K,z,B;const J=(0,p.wA)(),W=(0,p.d4)(A.SZ),q=(0,p.d4)(A.qn),Y=(0,p.d4)(A.CV),[Z,Q]=(0,i.useState)(["LN Message","LN Message (Tor)"]),[X,$]=(0,i.useState)("LN Message"),[ee,se]=(0,i.useState)(""),[te,le]=(0,i.useState)({port:{title:"Websocket Port",field:"LIGHTNING_WS_PORT"},host:{title:"CLN Host",field:"DEVICE_DOMAIN_NAME"},rune:{title:"Rune",field:"COMMANDO_RUNE"},invoiceRune:{title:"Invoice Rune",field:"INVOICE_RUNE"},connectUrl:{title:"Lnmessage URL",field:""}}),[ae,ne]=(0,i.useState)(!1);(0,i.useEffect)((()=>{let e=["LN Message","LN Message (Tor)"];q.LIGHTNING_REST_PORT&&(e.push("REST"),q.TOR_SERVICE&&""!==q.TOR_SERVICE&&e.push("REST (Tor)")),q.LIGHTNING_GRPC_PORT&&(e.push("gRPC"),q.TOR_SERVICE&&""!==q.TOR_SERVICE&&e.push("gRPC (Tor)")),Q(e),"LN Message"===X&&se("ln-message://"+q.DEVICE_DOMAIN_NAME+":"+q.LIGHTNING_WS_PORT+"?rune="+q.COMMANDO_RUNE+(""!==q.INVOICE_RUNE?"&invoiceRune="+q.INVOICE_RUNE:""))}),[q,X]);const oe=e=>{var s,t,l;let a="";switch(e.target.id){case"Websocket Port":a=(null===(s=q.LIGHTNING_WS_PORT)||void 0===s?void 0:s.toString())||"";break;case"gRPC Port":a=(null===(t=q.LIGHTNING_GRPC_PORT)||void 0===t?void 0:t.toString())||"";break;case"REST Port":a=(null===(l=q.LIGHTNING_REST_PORT)||void 0===l?void 0:l.toString())||"";break;case"CLN Host":a=(X.includes("(Tor)")?q.TOR_SERVICE:q.DEVICE_DOMAIN_NAME)||"";break;case"Rune":a=q.COMMANDO_RUNE||"";break;case"Invoice Rune":a=q.INVOICE_RUNE||"";break;case"Client Key":a=q.CLIENT_KEY||"";break;case"Client Cert":a=q.CLIENT_CERT||"";break;case"CA Cert":a=q.CA_CERT||"";break;default:a=ee||""}(0,g.eM)(a).then((s=>{J((0,f.Fs)({show:!0,message:e.target.id+" Copied Successfully!",bg:"success"}))})).catch((e=>{j.A.error(e)}))},ie=()=>{ne(!0),L.fm.createInvoiceRune().then((e=>{J((0,f.My)(e)),J((0,f.Fs)({show:!0,message:"Created Invoice Rune Successfully!",bg:"success"}))})).catch((e=>{j.A.error(e.message||JSON.stringify(e)),J((0,f.Fs)({show:!0,message:"Error Creating Invoice Rune: ".concat(e.message||""),bg:"danger"}))})).finally((()=>{ne(!1)}))},re=()=>{J((0,f.S0)((0,o.A)((0,o.A)({},Y),{},{connectWalletModal:!1})))},ce=e=>{var s,t,l,a;switch($(e.target.id),e.target.id){case"LN Message":default:le({port:{title:"Websocket Port",field:"LIGHTNING_WS_PORT"},host:{title:"CLN Host",field:"DEVICE_DOMAIN_NAME"},rune:{title:"Rune",field:"COMMANDO_RUNE"},invoiceRune:{title:"Invoice Rune",field:"INVOICE_RUNE"},connectUrl:{title:"Lnmessage URL",field:""}}),se("ln-message://"+q.DEVICE_DOMAIN_NAME+":"+q.LIGHTNING_WS_PORT+"?rune="+q.COMMANDO_RUNE+(""!==q.INVOICE_RUNE?"&invoiceRune="+q.INVOICE_RUNE:""));break;case"LN Message (Tor)":le({port:{title:"Websocket Port",field:"LIGHTNING_WS_PORT"},host:{title:"CLN Host",field:"TOR_SERVICE"},rune:{title:"Rune",field:"COMMANDO_RUNE"},invoiceRune:{title:"Invoice Rune",field:"INVOICE_RUNE"},connectUrl:{title:"Lnmessage URL",field:""}}),se("ln-message://"+q.TOR_SERVICE+":"+q.LIGHTNING_WS_PORT+"?rune="+q.COMMANDO_RUNE+(""!==q.INVOICE_RUNE?"&invoiceRune="+q.INVOICE_RUNE:""));break;case"REST":le({protocol:{title:"REST Protocol",field:"LIGHTNING_REST_PROTOCOL"},host:{title:"CLN Host",field:"DEVICE_DOMAIN_NAME"},port:{title:"REST Port",field:"LIGHTNING_REST_PORT"},clientKey:{title:"Client Key",field:"CLIENT_KEY"},clientCert:{title:"Client Cert",field:"CLIENT_CERT"},caCert:{title:"CA Cert",field:"CA_CERT"},connectUrl:{title:"REST URL",field:""}}),se("clnrest://"+q.LIGHTNING_REST_PROTOCOL+"://"+q.DEVICE_DOMAIN_NAME+":"+q.LIGHTNING_REST_PORT+"?rune="+q.COMMANDO_RUNE+("https"===(null===(s=q.LIGHTNING_REST_PROTOCOL)||void 0===s?void 0:s.toLowerCase())?"&clientKey="+q.CLIENT_KEY+"&clientCert="+q.CLIENT_CERT+"&caCert="+q.CA_CERT:""));break;case"REST (Tor)":le({protocol:{title:"REST Protocol",field:"LIGHTNING_REST_PROTOCOL"},host:{title:"CLN Host",field:"TOR_SERVICE"},port:{title:"REST Port",field:"LIGHTNING_REST_PORT"},clientKey:{title:"Client Key",field:"CLIENT_KEY"},clientCert:{title:"Client Cert",field:"CLIENT_CERT"},caCert:{title:"CA Cert",field:"CA_CERT"},connectUrl:{title:"REST URL",field:""}}),se("clnrest://"+q.LIGHTNING_REST_PROTOCOL+"://"+q.TOR_SERVICE+":"+q.LIGHTNING_REST_PORT+"?rune="+q.COMMANDO_RUNE+("https"===(null===(t=q.LIGHTNING_REST_PROTOCOL)||void 0===t?void 0:t.toLowerCase())?"&clientKey="+q.CLIENT_KEY+"&clientCert="+q.CLIENT_CERT+"&caCert="+q.CA_CERT:""));break;case"gRPC":le({protocol:{title:"gRPC Protocol",field:"LIGHTNING_GRPC_PROTOCOL"},host:{title:"CLN Host",field:"DEVICE_DOMAIN_NAME"},port:{title:"GRPC Port",field:"LIGHTNING_GRPC_PORT"},clientKey:{title:"Client Key",field:"CLIENT_KEY"},clientCert:{title:"Client Cert",field:"CLIENT_CERT"},caCert:{title:"CA Cert",field:"CA_CERT"},connectUrl:{title:"gRPC URL",field:""}}),se("cln-grpc://"+q.LIGHTNING_GRPC_PROTOCOL+"://"+q.DEVICE_DOMAIN_NAME+":"+q.LIGHTNING_GRPC_PORT+("https"===(null===(l=q.LIGHTNING_GRPC_PROTOCOL)||void 0===l?void 0:l.toLowerCase())?"?clientKey="+q.CLIENT_KEY+"&clientCert="+q.CLIENT_CERT+"&caCert="+q.CA_CERT:""));break;case"gRPC (Tor)":le({protocol:{title:"gRPC Protocol",field:"LIGHTNING_GRPC_PROTOCOL"},host:{title:"CLN Host",field:"TOR_SERVICE"},port:{title:"GRPC Port",field:"LIGHTNING_GRPC_PORT"},clientKey:{title:"Client Key",field:"CLIENT_KEY"},clientCert:{title:"Client Cert",field:"CLIENT_CERT"},caCert:{title:"CA Cert",field:"CA_CERT"},connectUrl:{title:"gRPC URL",field:""}}),se("cln-grpc://"+q.LIGHTNING_GRPC_PROTOCOL+"://"+q.TOR_SERVICE+":"+q.LIGHTNING_GRPC_PORT+("https"===(null===(a=q.LIGHTNING_GRPC_PROTOCOL)||void 0===a?void 0:a.toLowerCase())?"?clientKey="+q.CLIENT_KEY+"&clientCert="+q.CLIENT_CERT+"&caCert="+q.CA_CERT:""))}};let de,me;return"LN Message"!==X&&"LN Message (Tor)"!==X||(q.INVOICE_RUNE&&""!==q.INVOICE_RUNE?(de=oe,me=u.G):(de=ie,me=I)),(0,v.jsx)(v.Fragment,{children:(0,v.jsxs)(m.A,{show:Y.connectWalletModal,onHide:re,centered:!0,className:"modal-lg","data-testid":"connect-wallet",children:[(0,v.jsx)(m.A.Header,{className:"d-flex align-items-start justify-content-end pb-0",children:(0,v.jsx)("span",{className:"span-close-svg",onClick:re,children:(0,v.jsx)(C.P,{})})}),(0,v.jsxs)(m.A.Body,{className:"py-0 px-4",children:[(0,v.jsxs)(x.A,{className:"qr-container m-auto d-flex",children:[(0,v.jsx)(r.N,{children:(0,v.jsx)(c.P.img,{alt:"Core Lightning Logo",src:W?"/images/cln-logo-dark.png":"/images/cln-logo-light.png",className:"qr-cln-logo",initial:{opacity:0},animate:{opacity:1},transition:{delay:.05,duration:.01}},"cln-logo")}),(0,v.jsx)(d.Xe,{value:ee,size:220,includeMargin:!0,bgColor:W?"#0C0C0F":"#FFFFFF",fgColor:W?"#FFFFFF":"#000000"})]}),(0,v.jsx)(x.A,{className:"d-flex align-items-start justify-content-center pt-2",children:(0,v.jsx)("h4",{className:"w-100 text-blue fw-semibold d-flex justify-content-center text-center",children:"Connect wallet to your node"})}),(0,v.jsxs)(x.A,{className:"d-flex align-items-start justify-content-center",children:[(0,v.jsxs)(b.A,{xs:X.includes("LN Message")?12:6,children:[(0,v.jsx)(h.A.Label,{className:"text-light",children:"Network"}),(0,v.jsxs)(R.A,{className:"dropdown-network mt-1 mb-2",children:[(0,v.jsx)(R.A.Toggle,{variant:"secondary",id:"network",className:"w-100 d-flex align-items-center justify-content-between","data-testid":"network-toggle",children:X}),(0,v.jsx)(R.A.Menu,{"data-testid":"network-menu",children:Z.map((e=>(0,v.jsx)(R.A.Item,{"data-testid":"network-item",as:"div",id:e,onClick:ce,children:e},e)))})]})]}),!X.includes("LN Message")&&te.protocol?(0,v.jsxs)(b.A,{xs:6,children:[(0,v.jsx)(h.A.Label,{className:"text-light",children:te.protocol.title}),(0,v.jsxs)(N.A,{className:"mb-2",children:[(0,v.jsx)(h.A.Control,{onClick:oe,id:te.protocol.title,value:q[te.protocol.field]||"","aria-label":q[te.protocol.field],"aria-describedby":"copy-addon-port",className:"form-control-left","data-testid":"protocol",readOnly:!0}),(0,v.jsx)(N.A.Text,{id:te.port.title,className:"form-control-addon form-control-addon-right",onClick:oe,children:(0,v.jsx)(u.G,{id:te.port.title})})]})]}):(0,v.jsx)(b.A,{xs:6})]}),(0,v.jsxs)(x.A,{className:"d-flex align-items-start justify-content-center",children:[(0,v.jsxs)(b.A,{xs:6,children:[(0,v.jsx)(h.A.Label,{className:"text-light",children:te.host.title}),(0,v.jsxs)(N.A,{className:"mb-2",children:[(0,v.jsx)(h.A.Control,{onClick:oe,id:te.host.title,value:q[te.host.field]||"","aria-label":q[te.host.field],"aria-describedby":"copy-addon-host",className:"form-control-left","data-testid":"host",readOnly:!0}),(0,v.jsx)(N.A.Text,{id:te.host.title,className:"form-control-addon form-control-addon-right",onClick:oe,children:(0,v.jsx)(u.G,{id:te.host.title})})]})]}),(0,v.jsxs)(b.A,{xs:6,children:[(0,v.jsx)(h.A.Label,{className:"text-light",children:te.port.title||""}),(0,v.jsxs)(N.A,{className:"mb-2",children:[(0,v.jsx)(h.A.Control,{onClick:oe,id:te.port.title,value:q[te.port.field]||"","aria-label":q[te.port.field],"aria-describedby":"copy-addon-port",className:"form-control-left","data-testid":"port",readOnly:!0}),(0,v.jsx)(N.A.Text,{id:te.port.title,className:"form-control-addon form-control-addon-right",onClick:oe,children:(0,v.jsx)(u.G,{id:te.port.title})})]})]})]}),"gRPC"!==X&&"gRPC (Tor)"!==X&&te.rune?(0,v.jsx)(x.A,{className:"d-flex align-items-start justify-content-center",children:(0,v.jsxs)(b.A,{xs:12,children:[(0,v.jsx)(h.A.Label,{className:"text-light",children:te.rune.title||""}),(0,v.jsxs)(N.A,{className:"mb-2",children:[(0,v.jsx)(h.A.Control,{onClick:oe,id:te.rune.title,value:q[te.rune.field]||"","aria-label":q[te.rune.field],"aria-describedby":"copy-addon-rune",className:"form-control-left","data-testid":"rune",readOnly:!0}),(0,v.jsx)(N.A.Text,{id:te.rune.title,className:"form-control-addon form-control-addon-right",onClick:oe,children:(0,v.jsx)(u.G,{id:te.rune.title})})]})]})}):(0,v.jsx)(v.Fragment,{}),("LN Message"===X||"LN Message (Tor)"===X)&&(0,v.jsx)(x.A,{className:"d-flex align-items-start justify-content-center",children:(0,v.jsxs)(b.A,{xs:12,children:[(0,v.jsx)(h.A.Label,{className:"text-light",children:(null===(e=te.invoiceRune)||void 0===e?void 0:e.title)||""}),(0,v.jsxs)(N.A,{className:"mb-2",children:[(0,v.jsx)(h.A.Control,{onClick:de,id:null===(s=te.invoiceRune)||void 0===s?void 0:s.title,value:q.INVOICE_RUNE||"",placeholder:"Not Found","aria-label":q.INVOICE_RUNE,disabled:ae,"aria-describedby":"copy-addon-invoice-rune",className:"form-control-left","data-testid":"invoice-rune",readOnly:!0}),(0,v.jsx)(N.A.Text,{id:null===(t=te.invoiceRune)||void 0===t?void 0:t.title,className:"form-control-addon form-control-addon-right",onClick:ae?void 0:de,"data-testid":"invoice-rune-button",children:ae?(0,v.jsx)("span",{className:"h-100 d-flex justify-content-center align-items-center",children:(0,v.jsx)(T.A,{className:"me-1",variant:"light",size:"sm","data-testid":"invoice-rune-spinner"})}):me&&(0,v.jsx)(me,{id:null===(l=te.invoiceRune)||void 0===l?void 0:l.title,showTooltip:""===q.INVOICE_RUNE,tooltipText:"Create New Invoice Rune"})})]})]})}),X.includes("REST")&&"https"===(null===(a=q.LIGHTNING_REST_PROTOCOL)||void 0===a?void 0:a.toLowerCase())||X.includes("gRPC")&&"https"===(null===(n=q.LIGHTNING_GRPC_PROTOCOL)||void 0===n?void 0:n.toLowerCase())?(0,v.jsxs)(v.Fragment,{children:[(0,v.jsx)(x.A,{className:"d-flex align-items-start justify-content-center",children:(0,v.jsxs)(b.A,{xs:12,children:[(0,v.jsx)(h.A.Label,{className:"text-light",children:(null===(w=te.clientKey)||void 0===w?void 0:w.title)||""}),(0,v.jsxs)(N.A,{className:"mb-2",children:[(0,v.jsx)(h.A.Control,{onClick:oe,id:null===(E=te.clientKey)||void 0===E?void 0:E.title,value:q.CLIENT_KEY||"","aria-label":q.CLIENT_KEY,"aria-describedby":"copy-addon-host",className:"form-control-left","data-testid":"client-key",readOnly:!0}),(0,v.jsx)(N.A.Text,{id:null===(y=te.clientKey)||void 0===y?void 0:y.title,className:"form-control-addon form-control-addon-right",onClick:oe,children:(0,v.jsx)(u.G,{id:null===(_=te.clientKey)||void 0===_?void 0:_.title})})]})]})}),(0,v.jsx)(x.A,{className:"d-flex align-items-start justify-content-center",children:(0,v.jsxs)(b.A,{xs:12,children:[(0,v.jsx)(h.A.Label,{className:"text-light",children:(null===(O=te.clientCert)||void 0===O?void 0:O.title)||""}),(0,v.jsxs)(N.A,{className:"mb-2",children:[(0,v.jsx)(h.A.Control,{onClick:oe,id:null===(P=te.clientCert)||void 0===P?void 0:P.title,value:q.CLIENT_CERT||"","aria-label":q.CLIENT_CERT,"aria-describedby":"copy-addon-host",className:"form-control-left","data-testid":"client-cert",readOnly:!0}),(0,v.jsx)(N.A.Text,{id:null===(S=te.clientCert)||void 0===S?void 0:S.title,className:"form-control-addon form-control-addon-right",onClick:oe,children:(0,v.jsx)(u.G,{id:null===(k=te.clientCert)||void 0===k?void 0:k.title})})]})]})})]}):(0,v.jsx)(v.Fragment,{}),"REST"===X&&"https"===(null===(G=q.LIGHTNING_REST_PROTOCOL)||void 0===G?void 0:G.toLowerCase())||"gRPC"===X&&"https"===(null===(M=q.LIGHTNING_GRPC_PROTOCOL)||void 0===M?void 0:M.toLowerCase())?(0,v.jsx)(x.A,{className:"d-flex align-items-start justify-content-center",children:(0,v.jsxs)(b.A,{xs:12,children:[(0,v.jsx)(h.A.Label,{className:"text-light",children:(null===(H=te.caCert)||void 0===H?void 0:H.title)||""}),(0,v.jsxs)(N.A,{className:"mb-2",children:[(0,v.jsx)(h.A.Control,{onClick:oe,id:null===(F=te.caCert)||void 0===F?void 0:F.title,value:q.CA_CERT||"","aria-label":q.CA_CERT,"aria-describedby":"copy-addon-host",className:"form-control-left","data-testid":"ca-cert",readOnly:!0}),(0,v.jsx)(N.A.Text,{id:null===(V=te.caCert)||void 0===V?void 0:V.title,className:"form-control-addon form-control-addon-right",onClick:oe,children:(0,v.jsx)(u.G,{id:null===(U=te.caCert)||void 0===U?void 0:U.title})})]})]})}):(0,v.jsx)(v.Fragment,{}),(0,v.jsx)(x.A,{className:"mb-4 d-flex align-items-start justify-content-center",children:(0,v.jsxs)(b.A,{xs:12,children:[(0,v.jsx)(h.A.Label,{className:"text-light",children:(null===(D=te.connectUrl)||void 0===D?void 0:D.title)||""}),(0,v.jsxs)(N.A,{className:"mb-2",children:[(0,v.jsx)(h.A.Control,{onClick:oe,id:null===(K=te.connectUrl)||void 0===K?void 0:K.title,value:ee||"","aria-label":ee||"","aria-describedby":"copy-addon-url",className:"form-control-left","data-testid":"connect-url",readOnly:!0}),(0,v.jsx)(N.A.Text,{id:null===(z=te.connectUrl)||void 0===z?void 0:z.title,className:"form-control-addon form-control-addon-right",onClick:oe,children:(0,v.jsx)(u.G,{id:null===(B=te.connectUrl)||void 0===B?void 0:B.title})})]})]})})]})]})})};var O=t(5373),P=t.n(O),S=t(6205),k=t(9786),G=t(9082),M=t(791);const H=e=>(0,v.jsx)("svg",{xmlns:"http://www.w3.org/2000/svg",height:"16",viewBox:"0 0 512 512",fill:"none",className:e.className,children:(0,v.jsx)("path",{className:"fill-body-color",d:"M336 352c97.2 0 176-78.8 176-176S433.2 0 336 0S160 78.8 160 176c0 18.7 2.9 36.8 8.3 53.7L7 391c-4.5 4.5-7 10.6-7 17v80c0 13.3 10.7 24 24 24h80c13.3 0 24-10.7 24-24V448h40c13.3 0 24-10.7 24-24V384h40c6.4 0 12.5-2.5 17-7l33.3-33.3c16.9 5.4 35 8.3 53.7 8.3zM376 96a40 40 0 1 1 0 80 40 40 0 1 1 0-80z"})});var F=t(7159);const V=e=>(0,v.jsx)("svg",{className:e.className,height:"16",viewBox:"0 0 576 512",fill:"none",xmlns:"http://www.w3.org/2000/svg",children:(0,v.jsx)("path",{className:"fill-body-color",d:"M288 80c-65.2 0-118.8 29.6-159.9 67.7C89.6 183.5 63 226 49.4 256c13.6 30 40.2 72.5 78.6 108.3C169.2 402.4 222.8 432 288 432s118.8-29.6 159.9-67.7C486.4 328.5 513 286 526.6 256c-13.6-30-40.2-72.5-78.6-108.3C406.8 109.6 353.2 80 288 80zM95.4 112.6C142.5 68.8 207.2 32 288 32s145.5 36.8 192.6 80.6c46.8 43.5 78.1 95.4 93 131.1c3.3 7.9 3.3 16.7 0 24.6c-14.9 35.7-46.2 87.7-93 131.1C433.5 443.2 368.8 480 288 480s-145.5-36.8-192.6-80.6C48.6 356 17.3 304 2.5 268.3c-3.3-7.9-3.3-16.7 0-24.6C17.3 208 48.6 156 95.4 112.6zM288 336c44.2 0 80-35.8 80-80s-35.8-80-80-80c-.7 0-1.3 0-2 0c1.3 5.1 2 10.5 2 16c0 35.3-28.7 64-64 64c-5.5 0-10.9-.7-16-2c0 .7 0 1.3 0 2c0 44.2 35.8 80 80 80zm0-208a128 128 0 1 1 0 256 128 128 0 1 1 0-256z"})}),U=e=>(0,v.jsx)("svg",{className:e.className,height:"16",viewBox:"0 0 640 512",fill:"none",xmlns:"http://www.w3.org/2000/svg",children:(0,v.jsx)("path",{className:"fill-body-color",d:"M38.8 5.1C28.4-3.1 13.3-1.2 5.1 9.2S-1.2 34.7 9.2 42.9l592 464c10.4 8.2 25.5 6.3 33.7-4.1s6.3-25.5-4.1-33.7L525.6 386.7c39.6-40.6 66.4-86.1 79.9-118.4c3.3-7.9 3.3-16.7 0-24.6c-14.9-35.7-46.2-87.7-93-131.1C465.5 68.8 400.8 32 320 32c-68.2 0-125 26.3-169.3 60.8L38.8 5.1zm151 118.3C226 97.7 269.5 80 320 80c65.2 0 118.8 29.6 159.9 67.7C518.4 183.5 545 226 558.6 256c-12.6 28-36.6 66.8-70.9 100.9l-53.8-42.2c9.1-17.6 14.2-37.5 14.2-58.7c0-70.7-57.3-128-128-128c-32.2 0-61.7 11.9-84.2 31.5l-46.1-36.1zM394.9 284.2l-81.5-63.9c4.2-8.5 6.6-18.2 6.6-28.3c0-5.5-.7-10.9-2-16c.7 0 1.3 0 2 0c44.2 0 80 35.8 80 80c0 9.9-1.8 19.4-5.1 28.2zm9.4 130.3C378.8 425.4 350.7 432 320 432c-65.2 0-118.8-29.6-159.9-67.7C121.6 328.5 95 286 81.4 256c8.3-18.4 21.5-41.5 39.4-64.8L83.1 161.5C60.3 191.2 44 220.8 34.5 243.7c-3.3 7.9-3.3 16.7 0 24.6c14.9 35.7 46.2 87.7 93 131.1C174.5 443.2 239.2 480 320 480c47.8 0 89.9-12.9 126.2-32.5l-41.9-33zM192 256c0 70.7 57.3 128 128 128c13.3 0 26.1-2 38.2-5.8L302 334c-23.5-5.4-43.1-21.2-53.7-42.3l-56.1-44.2c-.2 2.8-.3 5.6-.3 8.5z"})});var D=t(4571);const K=()=>{const e=(0,D.Zp)(),{pathname:s}=(0,D.zy)(),t=(0,p.wA)(),l=(0,p.d4)(A.CV),[a,n]=(0,i.useState)(!0),[r,c]=(0,i.useState)(k.JT.NONE),[d,u]=(0,i.useState)(""),{value:C,isValid:g,hasError:w,valueChangeHandler:R,inputBlurHandler:E,reset:y}=(0,S.A)((e=>""!==e.trim()));let I=!1;g&&(I=!0);return(0,v.jsx)("form",{className:"h-100",children:(0,v.jsxs)(m.A,{show:l.loginModal,centered:!0,className:"modal-lg","data-testid":"login-modal",children:[(0,v.jsx)(m.A.Header,{className:"d-flex align-items-start justify-content-start pb-0"}),(0,v.jsxs)(m.A.Body,{className:"py-0",children:[(0,v.jsx)(x.A,{className:"d-flex align-items-start justify-content-center",children:(0,v.jsxs)(b.A,{xs:12,children:[(0,v.jsx)(h.A.Label,{className:" text-dark",children:"Password*"}),(0,v.jsxs)(N.A,{className:w?"invalid ":"",children:[(0,v.jsx)(N.A.Text,{className:"form-control-addon form-control-addon-left",children:(0,v.jsx)(H,{})}),(0,v.jsx)(h.A.Control,{tabIndex:1,autoFocus:!0,id:"password",type:a?"password":"text",placeholder:"Password","aria-label":"password","aria-describedby":"addon-password",className:a&&""!==C?"form-control-middle password-input-ctrl":"form-control-middle",value:C,onChange:R,onBlur:E}),(0,v.jsx)(N.A.Text,{className:"form-control-addon form-control-addon-right",children:(0,v.jsx)("span",{onClick:()=>{n(!a)},children:a?(0,v.jsx)(V,{}):(0,v.jsx)(U,{})})})]}),w?(0,v.jsx)(M.A,{message:"Invalid Password"}):(0,v.jsx)("div",{className:"message"})]})}),(0,v.jsx)(F.A,{responseStatus:r,responseMessage:d})]}),(0,v.jsx)(m.A.Footer,{children:(0,v.jsxs)("button",{tabIndex:2,type:"button",className:"btn-rounded bg-primary",onClick:async a=>{if(E(null),I){c(k.JT.PENDING),u("Logging In...");try{const a=await L.u8.userLogin(P()(C).toString());t((0,f.pz)(a)),a.isAuthenticated&&a.isValidPassword&&(t((0,f.S0)((0,o.A)((0,o.A)({},l),{},{loginModal:!1}))),n(!0),c(k.JT.NONE),u(""),y(),e(s.includes("/bookkeeper")?s:"/cln",{replace:!0}))}catch(i){j.A.error(i),c(k.JT.ERROR),u(i)}}},disabled:r===k.JT.PENDING,children:["Login",r===k.JT.PENDING?(0,v.jsx)(T.A,{className:"mt-1 ms-2 text-white-dark",size:"sm"}):(0,v.jsx)(G.P,{className:"ms-3"})]})})]})})};var z=t(5451),B=t(2117),J=t(4205);const W=()=>{const e=(0,p.wA)(),s=(0,p.d4)(A.CV),t=s=>{!0===s&&(L.u8.userLogout(),e((0,f.VP)()),e((0,J.Uu)()),e((0,B.is)()),l(!0))},l=t=>{e((0,f.S0)((0,o.A)((0,o.A)({},s),{},{loginModal:t||!1,logoutModal:!1})))};return(0,v.jsx)("form",{className:"h-100",children:(0,v.jsx)(m.A,{show:s.logoutModal,onHide:l,centered:!0,className:"modal-lg","data-testid":"logout-modal",children:(0,v.jsx)(m.A.Body,{className:"p-0 w-100 d-flex align-items-start justify-content-start",children:(0,v.jsxs)(b.A,{className:"d-flex align-items-stretch justify-content-between modal-box",children:[(0,v.jsx)(b.A,{xs:2,className:"message-type-box d-flex align-items-center justify-content-center",children:(0,v.jsx)(z.i,{})}),(0,v.jsx)(b.A,{xs:10,className:"p-3",children:(0,v.jsxs)(b.A,{className:"d-flex align-items-center justify-content-between",children:[(0,v.jsx)(b.A,{xs:7,className:"ps-1",children:"Logout?"}),(0,v.jsx)("button",{type:"button",className:"btn btn-rounded btn-sm btn-secondary",onClick:()=>t(!0),children:"Yes"}),(0,v.jsx)("button",{type:"button",className:"btn btn-rounded btn-sm btn-secondary",onClick:()=>t(!1),children:"No"})]})})]})})})})},q=()=>{const e=(0,D.Zp)(),{pathname:s}=(0,D.zy)(),t=(0,p.wA)(),l=(0,p.d4)(A.CV),a=(0,p.d4)(A.Qt),[n,r]=(0,i.useState)(!0),[c,d]=(0,i.useState)(!0),[u,g]=(0,i.useState)(!0),[w,R]=(0,i.useState)(k.JT.NONE),[E,y]=(0,i.useState)(""),{value:I,isValid:_,hasError:O,valueChangeHandler:K,inputBlurHandler:z,reset:B}=(0,S.A)((e=>""!==e.trim())),{value:J,isValid:W,hasError:q,valueChangeHandler:Y,inputBlurHandler:Z,reset:Q}=(0,S.A)((e=>""!==e.trim())),{value:X,isValid:$,hasError:ee,valueChangeHandler:se,inputBlurHandler:te,reset:le}=(0,S.A)((e=>""!==e.trim()&&e===J));let ae=!1;(a&&_&&W&&$||!a&&W&&$)&&(ae=!0);const ne=()=>{t((0,f.S0)((0,o.A)((0,o.A)({},l),{},{setPasswordModal:!1})))};return(0,v.jsx)("form",{className:"h-100",children:(0,v.jsxs)(m.A,{show:l.setPasswordModal,onHide:a?ne:()=>{},centered:!0,className:"modal-lg","data-testid":"set-password-modal",children:[(0,v.jsx)(m.A.Header,{className:"d-flex align-items-start justify-content-end pb-0",children:a?(0,v.jsx)("span",{className:"span-close-svg",onClick:ne,children:(0,v.jsx)(C.P,{})}):(0,v.jsx)(v.Fragment,{})}),(0,v.jsxs)(m.A.Body,{className:"py-0",children:[(0,v.jsxs)(x.A,{className:"d-flex align-items-start justify-content-center",children:[a?(0,v.jsxs)(b.A,{xs:12,children:[(0,v.jsx)(h.A.Label,{className:" text-dark",children:"Current Password*"}),(0,v.jsxs)(N.A,{className:O?"invalid ":"",children:[(0,v.jsx)(N.A.Text,{className:"form-control-addon form-control-addon-left",children:(0,v.jsx)(H,{})}),(0,v.jsx)(h.A.Control,{tabIndex:1,autoFocus:!0,id:"currpassword",type:n?"password":"text",placeholder:"Current Password","aria-label":"curr-password","aria-describedby":"addon-curr-password",className:n&&""!==I?"form-control-middle password-input-ctrl":"form-control-middle",value:I,onChange:K,onBlur:z}),(0,v.jsx)(N.A.Text,{className:"form-control-addon form-control-addon-right",children:(0,v.jsx)("span",{onClick:()=>{r(!n)},children:n?(0,v.jsx)(V,{}):(0,v.jsx)(U,{})})})]}),O?(0,v.jsx)(M.A,{message:"Invalid Current Password"}):(0,v.jsx)("div",{className:"message"})]}):(0,v.jsx)(v.Fragment,{}),(0,v.jsxs)(b.A,{xs:12,children:[(0,v.jsx)(h.A.Label,{className:" text-dark",children:"New Password*"}),(0,v.jsxs)(N.A,{className:q?"invalid ":"",children:[(0,v.jsx)(N.A.Text,{className:"form-control-addon form-control-addon-left",children:(0,v.jsx)(H,{})}),(0,v.jsx)(h.A.Control,{tabIndex:1,autoFocus:!a,id:"newpassword",type:c?"password":"text",placeholder:"New Password","aria-label":"new-password","aria-describedby":"addon-new-password",className:c&&""!==J?"form-control-middle password-input-ctrl":"form-control-middle",value:J,onChange:Y,onBlur:Z}),(0,v.jsx)(N.A.Text,{className:"form-control-addon form-control-addon-right",children:(0,v.jsx)("span",{onClick:()=>{d(!c)},children:c?(0,v.jsx)(V,{}):(0,v.jsx)(U,{})})})]}),q?(0,v.jsx)(M.A,{message:"Invalid New Password"}):(0,v.jsx)("div",{className:"message"})]}),(0,v.jsxs)(b.A,{xs:12,children:[(0,v.jsx)(h.A.Label,{className:" text-dark",children:"Confirm New Password*"}),(0,v.jsxs)(N.A,{className:ee?"invalid ":"",children:[(0,v.jsx)(N.A.Text,{className:"form-control-addon form-control-addon-left",children:(0,v.jsx)(H,{})}),(0,v.jsx)(h.A.Control,{tabIndex:2,id:"confirmnewpassword",type:u?"password":"text",placeholder:"Confirm New Password","aria-label":"confirm-new-password","aria-describedby":"addon-confirm-new-password",className:u&&""!==X?"form-control-middle password-input-ctrl":"form-control-middle",value:X,onChange:se,onBlur:te}),(0,v.jsx)(N.A.Text,{className:"form-control-addon form-control-addon-right",children:(0,v.jsx)("span",{onClick:()=>{g(!u)},children:u?(0,v.jsx)(V,{}):(0,v.jsx)(U,{})})})]}),ee?(0,v.jsx)(M.A,{message:X!==J?"New and Confirm New Password Do Not Match":"Invalid Confirm New Password"}):(0,v.jsx)("div",{className:"message"})]})]}),(0,v.jsx)(F.A,{responseStatus:w,responseMessage:E})]}),(0,v.jsx)(m.A.Footer,{children:(0,v.jsxs)("button",{tabIndex:3,type:"button",className:"btn-rounded bg-primary",onClick:async n=>{if(z(null),Z(null),te(null),ae){R(k.JT.PENDING),y("Resetting Password...");try{const n=await L.u8.resetUserPassword(a,a?P()(I).toString():"",P()(J).toString());j.A.info(n),t((0,f.pz)(n)),n.isAuthenticated&&(r(!0),d(!0),g(!0),R(k.JT.NONE),y(""),B(),Q(),le(),t((0,f.Fs)({show:!0,message:"Password Reset Successfully!",bg:"success"})),t((0,f.S0)((0,o.A)((0,o.A)({},l),{},{setPasswordModal:!1}))),e(s.includes("/bookkeeper")?s:"/cln",{replace:!0}))}catch(i){R(k.JT.ERROR),y(i.response||i.message||"Unknown Error")}}},disabled:w===k.JT.PENDING,children:[a?"Reset Password":"Set Password",w===k.JT.PENDING?(0,v.jsx)(T.A,{className:"mt-1 ms-2 text-white-dark",size:"sm"}):(0,v.jsx)(G.P,{className:"ms-3"})]})})]})})};var Y=t(3821),Z=t(8420),Q=t(947),X=t.n(Q);const $=e=>(0,v.jsx)("svg",{className:e.className,width:"12",height:"16",xmlns:"http://www.w3.org/2000/svg",fill:"none",viewBox:"0 0 448 512",children:(0,v.jsx)("path",{d:"M448 80l0 48c0 44.2-100.3 80-224 80S0 172.2 0 128L0 80C0 35.8 100.3 0 224 0S448 35.8 448 80zM393.2 214.7c20.8-7.4 39.9-16.9 54.8-28.6L448 288c0 44.2-100.3 80-224 80S0 332.2 0 288L0 186.1c14.9 11.8 34 21.2 54.8 28.6C99.7 230.7 159.5 240 224 240s124.3-9.3 169.2-25.3zM0 346.1c14.9 11.8 34 21.2 54.8 28.6C99.7 390.7 159.5 400 224 400s124.3-9.3 169.2-25.3c20.8-7.4 39.9-16.9 54.8-28.6l0 85.9c0 44.2-100.3 80-224 80S0 476.2 0 432l0-85.9z",className:"fill-body-color"})}),ee=e=>{const s=(0,i.useRef)(null),t=(0,p.d4)(A.CV),l=(0,p.wA)(),a=(0,i.useRef)(null),[n,r]=(0,i.useState)(!1),[c,d]=(0,i.useState)(""),[x,w]=(0,i.useState)(""),b=e=>{let s="";"SQL Query"===e.target.id?s=c:a.current&&(s=a.current.innerText),(0,g.eM)(s).then((s=>{l((0,f.Fs)({show:!0,message:e.target.id+" Copied Successfully!",bg:"success"}))})).catch((e=>{j.A.error(e)}))},R=(0,i.useCallback)((async()=>{const e=c.replace(/\n/g," ").replace(/\s+/g," ").trim();try{const s=await L.u8.executeSql(e);w(JSON.stringify(s.rows,null,2)+"\n\n"),w(e+"\n"+JSON.stringify(s.rows,null,2)+"\n\n")}catch(s){s&&s.message?w(e+"\nError: "+s.message):w(e+"\nError: "+s)}}),[c]);(0,i.useEffect)((()=>{!n&&c.endsWith("\n")&&c.trimEnd().endsWith(";")&&(r(!0),R())}),[c,n,R]),(0,i.useEffect)((()=>{a.current&&(a.current.scrollTop=a.current.scrollHeight)}),[x]);const T=()=>{l((0,f.S0)((0,o.A)((0,o.A)({},t),{},{sqlTerminalModal:!1})))};return(0,v.jsxs)(m.A,{ref:s,show:t.sqlTerminalModal,onHide:T,centered:!0,className:"modal-xl","data-testid":"sql-terminal",children:[(0,v.jsxs)(m.A.Header,{className:"d-flex align-items-start justify-content-between pb-0 mx-2",children:[(0,v.jsx)("h4",{children:"SQL Terminal"}),(0,v.jsx)("span",{className:"span-close-svg",onClick:T,children:(0,v.jsx)(C.P,{})})]}),(0,v.jsx)(m.A.Body,{className:"py-0 px-4",children:(0,v.jsxs)("div",{"data-testid":"terminal-container",children:[(0,v.jsxs)(N.A,{className:"d-flex align-items-stretch justify-content-start mb-4",children:[(0,v.jsx)(N.A.Text,{className:"align-items-start form-control-addon form-control-addon-left pt-3",children:(0,v.jsx)($,{})}),(0,v.jsx)(h.A.Control,{tabIndex:1,autoFocus:!0,id:"query",name:"query","data-testid":"query-input",type:"text",placeholder:"SQL Query","aria-label":"query","aria-describedby":"addon-query",className:"form-control-middle terminal-input ps-1 pt-3",as:"textarea",rows:5,value:c,onChange:e=>{r(!1),d(e.target.value)}}),(0,v.jsx)(N.A.Text,{id:c,className:"form-control-addon form-control-addon-right align-items-start pt-3",onClick:b,children:(0,v.jsx)(u.G,{id:"SQL Query",showTooltip:!0})})]}),(0,v.jsxs)("div",{style:{position:"relative"},children:[(0,v.jsx)("button",{tabIndex:3,onClick:b,className:"btn-copy-output",children:(0,v.jsx)(u.G,{id:"Output",showTooltip:!0})}),(0,v.jsx)("pre",{className:"terminal-output "+(x.includes("Error: ")?"text-invalid":"text-valid"),ref:a,children:(0,v.jsx)(X(),{children:(0,v.jsx)("code",{children:x})})})]}),(0,v.jsxs)(Z.A,{className:"btn-group-action mb-3",children:[(0,v.jsx)("button",{tabIndex:4,type:"button",className:"btn-rounded bg-primary fs-6 me-4",onClick:R,children:"Execute"}),(0,v.jsx)("button",{tabIndex:5,type:"button",className:"btn-rounded bg-primary fs-6 me-4",onClick:()=>{d(""),w("")},children:"Clear"}),(0,v.jsx)("button",{tabIndex:6,type:"button",className:"btn-rounded bg-primary fs-6 me-4",onClick:async()=>{window.open("https://docs.corelightning.org/reference/sql","_blank")},children:"Help"})]})]})})]})},se=()=>{const e=(0,a.A)(),s=(0,p.d4)(A.Kc),t=(0,p.d4)(A.JR),o=(0,p.d4)(A.SZ),i=s?"py-4":"py-4 blurred-container",r=document.getElementsByTagName("body")[0],c=r.attributes,d=document.createAttribute("data-bs-theme");d.value=t.toLowerCase()||"dark",r.style.backgroundColor=o?"#0C0C0F":"#EBEFF9";const m=document.createAttribute("data-screensize");return m.value=e,c.setNamedItem(d),c.setNamedItem(m),(0,v.jsxs)(v.Fragment,{children:[(0,v.jsx)(l.A,{className:i,id:"root-container","data-testid":"container",children:(0,v.jsx)(Y.A,{})}),(0,v.jsx)(n.A,{}),(0,v.jsx)(w,{}),(0,v.jsx)(_,{}),(0,v.jsx)(K,{}),(0,v.jsx)(W,{}),(0,v.jsx)(q,{}),(0,v.jsx)(ee,{})]})},te=se},9082:(e,s,t)=>{"use strict";t.d(s,{P:()=>a});t(2176);var l=t(812);const a=e=>(0,l.jsx)("svg",{className:e.className,width:"16",height:"10",viewBox:"0 0 16 10",fill:"none",xmlns:"http://www.w3.org/2000/svg",children:(0,l.jsx)("path",{d:"M0.5 5.83333L12.3083 5.83333L9.325 8.825L10.5 10L15.5 5L10.5 -4.37114e-07L9.325 1.175L12.3083 4.16667L0.500001 4.16667L0.5 5.83333Z",className:"fill-strong-contrast"})})},9735:(e,s,t)=>{"use strict";t.d(s,{G:()=>o});t(2176);var l=t(2189),a=t(1416),n=t(812);const o=e=>(0,n.jsx)(l.A,{placement:"auto",delay:{show:250,hide:250},overlay:e.showTooltip?(0,n.jsx)(a.A,{children:"Copy "+(e.id||"")}):(0,n.jsx)(n.Fragment,{}),children:(0,n.jsxs)("svg",{id:e.id,className:e.className,width:"22",height:"20",viewBox:"0 0 22 20",fill:"none",xmlns:"http://www.w3.org/2000/svg",children:[(0,n.jsx)("path",{id:e.id,className:"stroke-light",d:"M15.3164 6.4375H17.3789C17.7931 6.4375 18.1289 6.77329 18.1289 7.1875V17.6875C18.1289 18.1017 17.7931 18.4375 17.3789 18.4375H6.87891C6.46469 18.4375 6.12891 18.1017 6.12891 17.6875V15.625",strokeWidth:"1.3",strokeLinecap:"round",strokeLinejoin:"round"}),(0,n.jsx)("path",{id:e.id,className:"stroke-light",d:"M1.25391 2.3125C1.25391 1.89828 1.5897 1.5625 2.00391 1.5625H12.5039C12.9181 1.5625 13.2539 1.89829 13.2539 2.3125V12.8125C13.2539 13.2267 12.9181 13.5625 12.5039 13.5625H2.00391C1.58969 13.5625 1.25391 13.2267 1.25391 12.8125V2.3125Z",strokeWidth:"1.3",strokeLinejoin:"round"})]})})}}]); -//# sourceMappingURL=687.c6039462.chunk.js.map \ No newline at end of file diff --git a/apps/frontend/build/static/js/687.c6039462.chunk.js.map b/apps/frontend/build/static/js/687.c6039462.chunk.js.map deleted file mode 100644 index a16058b0..00000000 --- a/apps/frontend/build/static/js/687.c6039462.chunk.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"static/js/687.c6039462.chunk.js","mappings":"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","sources":["components/shared/InvalidInputMessage/InvalidInputMessage.tsx","components/shared/ToastMessage/ToastMessage.tsx","components/ui/RouteTransition/RouteTransition.tsx","hooks/use-breakpoint.ts","svgs/QuestionMark.tsx","hooks/use-input.ts","svgs/Information.tsx","components/shared/StatusAlert/StatusAlert.tsx","components/modals/NodeInfo/NodeInfo.tsx","svgs/Add.tsx","components/modals/ConnectWallet/ConnectWallet.tsx","svgs/Password.tsx","svgs/Show.tsx","svgs/Hide.tsx","components/modals/Login/Login.tsx","components/modals/Logout/Logout.tsx","components/modals/SetPassword/SetPassword.tsx","svgs/SQL.tsx","components/modals/SQLTerminal/SQLTerminal.tsx","components/App/App.tsx","svgs/Action.tsx","svgs/Copy.tsx"],"sourcesContent":["import './InvalidInputMessage.scss';\nimport { motion } from 'framer-motion';\nimport { STAGERRED_SPRING_VARIANTS_2 } from '../../../utilities/constants';\nimport { InformationSVG } from '../../../svgs/Information';\n\nconst InvalidInputMessage = props => {\n return (\n \n \n {props.message}\n \n );\n};\n\nexport default InvalidInputMessage;\n","import './ToastMessage.scss';\nimport { useEffect, useState } from 'react';\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome';\nimport {\n faCheck,\n faTriangleExclamation,\n faExclamationCircle,\n} from '@fortawesome/free-solid-svg-icons';\nimport { motion } from 'framer-motion';\nimport { Toast, Col } from 'react-bootstrap';\n\nimport { BOUNCY_SPRING_VARIANTS_3, STAGERRED_SPRING_VARIANTS_2 } from '../../../utilities/constants';\nimport { CloseSVG } from '../../../svgs/Close';\nimport { QuestionMarkSVG } from '../../../svgs/QuestionMark';\nimport { setShowToast } from '../../../store/rootSlice';\nimport { useDispatch, useSelector } from 'react-redux';\nimport { selectShowToast } from '../../../store/rootSelectors';\n\nconst ToastMessage = (props) => {\n const dispatch = useDispatch();\n const showToast = useSelector(selectShowToast);\n const [y, setY] = useState('0');\n const TOAST_SHOW = props.showOnComponent ? !!props.show : !!showToast.show;\n const TOAST_TYPE = props.type || showToast.type || '';\n const SHOW_DELAY = props.showDelay || showToast.delay || 3000;\n const TOAST_BG = props.bg || showToast.bg || 'primary';\n const TOAST_CONTAINER_CLASS_NAME = 'toast-container w-100 d-flex justify-content-center ' + (props.containerClassName || showToast.containerClassName || 'top-0');\n const TOAST_CLASS_NAME = 'd-flex align-items-start justify-content-between ' + (props.className || showToast.className || '');\n const TOAST_MESSAGE = props.message || showToast.message || '';\n\n useEffect(() => {\n if (!props.showOnComponent) {\n setY(TOAST_SHOW ? '3rem' : '0');\n }\n }, [props.showOnComponent, TOAST_SHOW]);\n\n const closeHandler = () => {\n if (!props.showOnComponent) {\n dispatch(setShowToast({...showToast, show: false}));\n }\n };\n\n const confirmCloseHandler = response => {\n if (!props.showOnComponent) {\n dispatch(setShowToast({...showToast, show: false, onConfirmResponse: response}));\n } else {\n props.onConfirmResponse(response);\n }\n };\n return (\n <>\n {TOAST_TYPE === 'CONFIRM' ? (\n TOAST_SHOW ? (\n \n \n \n \n \n \n \n \n \n {TOAST_MESSAGE || 'Default Message!'}\n confirmCloseHandler(true)}\n >\n Yes\n \n confirmCloseHandler(false)}\n >\n No\n \n \n \n \n \n \n \n ) : (\n <>\n )\n ) : (\n \n \n \n \n \n \n \n \n \n {TOAST_MESSAGE || 'Default Message!'}\n \n \n \n \n \n \n \n \n \n )}\n \n );\n};\n\nexport default ToastMessage;\n","import { useEffect } from 'react';\nimport { AnimatePresence, motion } from 'framer-motion';\nimport { Outlet, useLocation } from 'react-router-dom';\nimport { TRANSITION_DURATION } from '../../../utilities/constants';\n\nconst RouteTransition = () => {\n const location = useLocation();\n\n useEffect(() => {\n window.scrollTo({ top: 0, behavior: 'smooth' });\n }, [location.pathname]);\n\n return (\n \n \n \n \n \n );\n};\n\nexport default RouteTransition;\n","/**\n * @author Junaid Atari\n * @link https://gist.github.com/blacksmoke26/65f35ee824674e00d858047e852bd270\n *\n * Modified by AgainPsychoX to use TypeScript and `use-debounce` package.\n * Modified by Shahana to remove `use-debounce` package and use enums.\n */\n\nimport { useState, useEffect } from 'react';\nimport { Breakpoints } from '../utilities/constants';\n\nconst resolveBreakpoint = (width: number): Breakpoints => {\n if (width < 576) return Breakpoints.XS;\n if (width < 768) return Breakpoints.SM;\n if (width < 992) return Breakpoints.MD;\n if (width < 1200) return Breakpoints.LG;\n if (width < 1440) return Breakpoints.XL;\n return Breakpoints.XXL;\n};\n\nconst useBreakpoint = () => {\n const [size, setSize] = useState(() => resolveBreakpoint(window.innerWidth));\n\n useEffect(() => {\n const update = () => {\n return setTimeout(() => {\n return setSize(resolveBreakpoint(window.innerWidth));\n }, 200);\n };\n\n window.addEventListener('resize', update);\n return () => window.removeEventListener('resize', update);\n }, []);\n\n return size;\n};\n\nexport default useBreakpoint;\n","import React from 'react';\n\nexport const QuestionMarkSVG = props => {\n return (\n \n \n \n \n \n );\n};\n","import { useState } from 'react';\nimport { InputType } from '../utilities/constants';\n\nconst useInput = (validateValue, inputType: InputType = InputType.ORIGINAL) => {\n const [enteredValue, setEnteredValue] = useState('');\n const [isTouched, setIsTouched] = useState(false);\n\n const normalizeValue = (value: string) => {\n switch (inputType) {\n case 'lowercase':\n return value.toLowerCase();\n case 'uppercase':\n return value.toUpperCase();\n default:\n return value;\n }\n };\n\n const valueIsValid = validateValue(enteredValue);\n const hasError = !valueIsValid && isTouched;\n\n const valueChangeHandler = (event) => {\n event.target.value = normalizeValue(event.target.value);\n setEnteredValue(event.target.value);\n };\n\n const inputBlurHandler = (event) => {\n setIsTouched(true);\n };\n\n const reset = () => {\n setEnteredValue('');\n setIsTouched(false);\n };\n\n return {\n value: enteredValue,\n isValid: valueIsValid,\n hasError,\n valueChangeHandler,\n inputBlurHandler,\n reset\n };\n};\n\nexport default useInput;\n","import React from 'react';\n\nexport const InformationSVG = props => {\n return (\n \n \n \n \n \n );\n};\n","import './StatusAlert.scss';\nimport { motion } from 'framer-motion';\nimport { Spinner, Col } from 'react-bootstrap';\n\nimport { CallStatus, OPACITY_VARIANTS } from '../../../utilities/constants';\nimport { copyTextToClipboard, titleCase } from '../../../utilities/data-formatters';\nimport { InformationSVG } from '../../../svgs/Information';\nimport { CopySVG } from '../../../svgs/Copy';\nimport logger from '../../../services/logger.service';\nimport { setShowToast } from '../../../store/rootSlice';\nimport { useDispatch } from 'react-redux';\n\nconst StatusAlert = props => {\n const dispatch = useDispatch();\n\n const copyHandler = (event) => {\n copyTextToClipboard(props.responseMessage).then((response) => {\n dispatch(setShowToast({show: true, message: ('Response Copied Successfully!'), bg: 'success'}));\n }).catch((err) => {\n logger.error(err);\n });\n }\n\n return props.responseStatus !== CallStatus.NONE ? (\n \n \n {props.responseStatus === CallStatus.PENDING ? (\n \n ) : (\n \n )}\n \n \n {titleCase(props.responseMessage)}\n \n {props.responseStatus !== CallStatus.PENDING ? (\n \n \n \n ) : (\n <>\n )}\n \n ) : (\n <>\n );\n};\n\nexport default StatusAlert;\n","import './NodeInfo.scss';\nimport { useEffect, useState } from 'react';\nimport { motion, AnimatePresence } from 'framer-motion';\nimport { QRCodeCanvas } from 'qrcode.react';\nimport { Modal, Row, InputGroup, Form } from 'react-bootstrap';\n\nimport { CopySVG } from '../../../svgs/Copy';\nimport { CloseSVG } from '../../../svgs/Close';\nimport logger from '../../../services/logger.service';\nimport { copyTextToClipboard } from '../../../utilities/data-formatters';\nimport { setShowModals, setShowToast } from '../../../store/rootSlice';\nimport { useDispatch, useSelector } from 'react-redux';\nimport { selectIsDarkMode, selectNodeInfo, selectShowModals } from '../../../store/rootSelectors';\n\nconst NodeInfo = () => {\n const dispatch = useDispatch();\n const isDarkMode = useSelector(selectIsDarkMode);\n const nodeInfo = useSelector(selectNodeInfo);\n const showModals = useSelector(selectShowModals);\n const [nodeURI, setNodeURI] = useState('');\n\n useEffect(() => {\n let uri = (nodeInfo.id || '');\n if (nodeInfo.address && nodeInfo.address?.length && nodeInfo.address.length > 0) {\n uri = uri + '@' + nodeInfo.address[0].address + ':' + nodeInfo.address[0].port;\n } else if (nodeInfo.binding && nodeInfo.binding?.length && nodeInfo.binding.length > 0) {\n uri = uri + '@' + nodeInfo.binding[0].address + ':' + nodeInfo.binding[0].port;\n } else {\n uri = uri + '@ : ';\n }\n setNodeURI(uri);\n }, [nodeInfo]);\n\n const copyHandler = () => {\n copyTextToClipboard(nodeURI).then((response) => {\n dispatch(setShowToast({show: true, message: 'Node ID Copied Successfully!', bg: 'success'}));\n }).catch((err) => {\n logger.error(err);\n });\n }\n\n const closeHandler = () => {\n dispatch(setShowModals({...showModals, nodeInfoModal: false}));\n }\n\n return (\n \n \n \n \n \n \n \n \n \n \n \n \n

Node ID

\n

\n Other Lightning nodes can open payment channels to your node following this Node ID. \n

\n
\n \n \n \n \n \n \n
\n
\n
\n
\n );\n};\n\nexport default NodeInfo;\n","import React from 'react';\nimport { OverlayTrigger, Tooltip } from 'react-bootstrap';\n\nexport const AddSVG = props => {\n return (\n {props.tooltipText || ''} : <>)}\n >\n \n \n \n \n \n );\n};\n\n","import './ConnectWallet.scss';\nimport { useState, useEffect } from 'react';\nimport { motion, AnimatePresence } from 'framer-motion';\nimport { QRCodeCanvas } from 'qrcode.react';\nimport { Modal, Col, Row, Spinner, Dropdown, InputGroup, Form } from 'react-bootstrap';\n\nimport { CopySVG } from '../../../svgs/Copy';\nimport { CloseSVG } from '../../../svgs/Close';\nimport { copyTextToClipboard } from '../../../utilities/data-formatters';\nimport { ConnectWalletFields } from '../../../types/root.type';\nimport logger from '../../../services/logger.service';\nimport { AddSVG } from '../../../svgs/Add';\nimport { CLNService } from '../../../services/http.service';\nimport { setShowModals, setShowToast, setConnectWallet } from '../../../store/rootSlice';\nimport { useDispatch, useSelector } from 'react-redux';\nimport { selectIsDarkMode, selectShowModals, selectWalletConnect } from '../../../store/rootSelectors';\n\nconst ConnectWallet = () => {\n const dispatch = useDispatch();\n const isDarkMode = useSelector(selectIsDarkMode);\n const connectWallet = useSelector(selectWalletConnect);\n const showModals = useSelector(selectShowModals);\n const [networkTypes, setNetworkTypes] = useState(['LN Message', 'LN Message (Tor)']);\n const [selNetwork, setSelNetwork] = useState('LN Message');\n const [connectUrl, setConnectUrl] = useState('');\n const initialConnectValues: ConnectWalletFields = { port: { title: 'Websocket Port', field: 'LIGHTNING_WS_PORT' }, host: { title: 'CLN Host', field: 'DEVICE_DOMAIN_NAME' }, rune: { title: 'Rune', field: 'COMMANDO_RUNE' }, invoiceRune: { title: 'Invoice Rune', field: 'INVOICE_RUNE' }, connectUrl: { title: 'Lnmessage URL', field: '' } };\n const [connectValues, setConnectValues] = useState(initialConnectValues);\n const [isLoadingInvoiceRune, setIsLoadingInvoiceRune] = useState(false);\n\n useEffect(() => {\n let newNetworkTypes: string[] = ['LN Message', 'LN Message (Tor)'];\n if (connectWallet.LIGHTNING_REST_PORT) {\n newNetworkTypes.push('REST');\n if (connectWallet.TOR_SERVICE && connectWallet.TOR_SERVICE !== '') {\n newNetworkTypes.push('REST (Tor)');\n }\n }\n if (connectWallet.LIGHTNING_GRPC_PORT) {\n newNetworkTypes.push('gRPC');\n if (connectWallet.TOR_SERVICE && connectWallet.TOR_SERVICE !== '') {\n newNetworkTypes.push('gRPC (Tor)');\n }\n }\n setNetworkTypes(newNetworkTypes);\n if (selNetwork === 'LN Message') {\n setConnectUrl('ln-message://' + connectWallet.DEVICE_DOMAIN_NAME + ':' + connectWallet.LIGHTNING_WS_PORT + '?rune=' + connectWallet.COMMANDO_RUNE + (connectWallet.INVOICE_RUNE !== '' ? '&invoiceRune=' + connectWallet.INVOICE_RUNE : ''));\n }\n }, [connectWallet, selNetwork]);\n\n const copyHandler = (event) => {\n let textToCopy = '';\n switch (event.target.id) {\n case 'Websocket Port':\n textToCopy = connectWallet.LIGHTNING_WS_PORT?.toString() || '';\n break;\n case 'gRPC Port':\n textToCopy = connectWallet.LIGHTNING_GRPC_PORT?.toString() || '';\n break;\n case 'REST Port':\n textToCopy = connectWallet.LIGHTNING_REST_PORT?.toString() || '';\n break;\n case 'CLN Host':\n textToCopy = (selNetwork.includes('(Tor)') ? connectWallet.TOR_SERVICE : connectWallet.DEVICE_DOMAIN_NAME) || '';\n break;\n case 'Rune':\n textToCopy = connectWallet.COMMANDO_RUNE || '';\n break;\n case 'Invoice Rune':\n textToCopy = connectWallet.INVOICE_RUNE || '';\n break;\n case 'Client Key':\n textToCopy = connectWallet.CLIENT_KEY || '';\n break;\n case 'Client Cert':\n textToCopy = connectWallet.CLIENT_CERT || '';\n break;\n case 'CA Cert':\n textToCopy = connectWallet.CA_CERT || '';\n break;\n default:\n textToCopy = connectUrl || '';\n break;\n }\n copyTextToClipboard(textToCopy).then((response) => {\n dispatch(setShowToast({ show: true, message: (event.target.id + ' Copied Successfully!'), bg: 'success' }));\n }).catch((err) => {\n logger.error(err);\n });\n }\n\n const createInvoiceRuneHandler = () => {\n setIsLoadingInvoiceRune(true);\n CLNService.createInvoiceRune()\n .then((updatedWalletConnectData) => {\n dispatch(setConnectWallet(updatedWalletConnectData));\n dispatch(setShowToast({ show: true, message: ('Created Invoice Rune Successfully!'), bg: 'success' }));\n })\n .catch(err => {\n logger.error(err.message || JSON.stringify(err));\n dispatch(setShowToast({ show: true, message: (`Error Creating Invoice Rune: ${err.message || ''}`), bg: 'danger' }));\n })\n .finally(() => {\n setIsLoadingInvoiceRune(false);\n });\n };\n\n const closeHandler = () => {\n dispatch(setShowModals({ ...showModals, connectWalletModal: false }));\n }\n\n const networkChangeHandler = (event) => {\n setSelNetwork(event.target.id);\n switch (event.target.id) {\n case 'LN Message':\n setConnectValues({ port: { title: 'Websocket Port', field: 'LIGHTNING_WS_PORT' }, host: { title: 'CLN Host', field: 'DEVICE_DOMAIN_NAME' }, rune: { title: 'Rune', field: 'COMMANDO_RUNE' }, invoiceRune: { title: 'Invoice Rune', field: 'INVOICE_RUNE' }, connectUrl: { title: 'Lnmessage URL', field: '' } });\n setConnectUrl('ln-message://' + connectWallet.DEVICE_DOMAIN_NAME + ':' + connectWallet.LIGHTNING_WS_PORT + '?rune=' + connectWallet.COMMANDO_RUNE + (connectWallet.INVOICE_RUNE !== '' ? '&invoiceRune=' + connectWallet.INVOICE_RUNE : ''));\n break;\n\n case 'LN Message (Tor)':\n setConnectValues({ port: { title: 'Websocket Port', field: 'LIGHTNING_WS_PORT' }, host: { title: 'CLN Host', field: 'TOR_SERVICE' }, rune: { title: 'Rune', field: 'COMMANDO_RUNE' }, invoiceRune: { title: 'Invoice Rune', field: 'INVOICE_RUNE' }, connectUrl: { title: 'Lnmessage URL', field: '' } });\n setConnectUrl('ln-message://' + connectWallet.TOR_SERVICE + ':' + connectWallet.LIGHTNING_WS_PORT + '?rune=' + connectWallet.COMMANDO_RUNE + (connectWallet.INVOICE_RUNE !== '' ? '&invoiceRune=' + connectWallet.INVOICE_RUNE : ''));\n break;\n\n case 'REST':\n setConnectValues({ protocol: { title: 'REST Protocol', field: 'LIGHTNING_REST_PROTOCOL' }, host: { title: 'CLN Host', field: 'DEVICE_DOMAIN_NAME' }, port: { title: 'REST Port', field: 'LIGHTNING_REST_PORT' }, clientKey: { title: 'Client Key', field: 'CLIENT_KEY' }, clientCert: { title: 'Client Cert', field: 'CLIENT_CERT' }, caCert: { title: 'CA Cert', field: 'CA_CERT' }, connectUrl: { title: 'REST URL', field: '' } });\n setConnectUrl('clnrest://' + connectWallet.LIGHTNING_REST_PROTOCOL + '://' + connectWallet.DEVICE_DOMAIN_NAME + ':' + connectWallet.LIGHTNING_REST_PORT + '?rune=' + connectWallet.COMMANDO_RUNE + (connectWallet.LIGHTNING_REST_PROTOCOL?.toLowerCase() === 'https' ? '&clientKey=' + connectWallet.CLIENT_KEY + '&clientCert=' + connectWallet.CLIENT_CERT + '&caCert=' + connectWallet.CA_CERT : ''));\n break;\n\n case 'REST (Tor)':\n setConnectValues({ protocol: { title: 'REST Protocol', field: 'LIGHTNING_REST_PROTOCOL' }, host: { title: 'CLN Host', field: 'TOR_SERVICE' }, port: { title: 'REST Port', field: 'LIGHTNING_REST_PORT' }, clientKey: { title: 'Client Key', field: 'CLIENT_KEY' }, clientCert: { title: 'Client Cert', field: 'CLIENT_CERT' }, caCert: { title: 'CA Cert', field: 'CA_CERT' }, connectUrl: { title: 'REST URL', field: '' } });\n setConnectUrl('clnrest://' + connectWallet.LIGHTNING_REST_PROTOCOL + '://' + connectWallet.TOR_SERVICE + ':' + connectWallet.LIGHTNING_REST_PORT + '?rune=' + connectWallet.COMMANDO_RUNE + (connectWallet.LIGHTNING_REST_PROTOCOL?.toLowerCase() === 'https' ? '&clientKey=' + connectWallet.CLIENT_KEY + '&clientCert=' + connectWallet.CLIENT_CERT + '&caCert=' + connectWallet.CA_CERT : ''));\n break;\n\n case 'gRPC':\n setConnectValues({ protocol: { title: 'gRPC Protocol', field: 'LIGHTNING_GRPC_PROTOCOL' }, host: { title: 'CLN Host', field: 'DEVICE_DOMAIN_NAME' }, port: { title: 'GRPC Port', field: 'LIGHTNING_GRPC_PORT' }, clientKey: { title: 'Client Key', field: 'CLIENT_KEY' }, clientCert: { title: 'Client Cert', field: 'CLIENT_CERT' }, caCert: { title: 'CA Cert', field: 'CA_CERT' }, connectUrl: { title: 'gRPC URL', field: '' } });\n setConnectUrl('cln-grpc://' + connectWallet.LIGHTNING_GRPC_PROTOCOL + '://' + connectWallet.DEVICE_DOMAIN_NAME + ':' + connectWallet.LIGHTNING_GRPC_PORT + (connectWallet.LIGHTNING_GRPC_PROTOCOL?.toLowerCase() === 'https' ? '?clientKey=' + connectWallet.CLIENT_KEY + '&clientCert=' + connectWallet.CLIENT_CERT + '&caCert=' + connectWallet.CA_CERT : ''));\n break;\n\n case 'gRPC (Tor)':\n setConnectValues({ protocol: { title: 'gRPC Protocol', field: 'LIGHTNING_GRPC_PROTOCOL' }, host: { title: 'CLN Host', field: 'TOR_SERVICE' }, port: { title: 'GRPC Port', field: 'LIGHTNING_GRPC_PORT' }, clientKey: { title: 'Client Key', field: 'CLIENT_KEY' }, clientCert: { title: 'Client Cert', field: 'CLIENT_CERT' }, caCert: { title: 'CA Cert', field: 'CA_CERT' }, connectUrl: { title: 'gRPC URL', field: '' } });\n setConnectUrl('cln-grpc://' + connectWallet.LIGHTNING_GRPC_PROTOCOL + '://' + connectWallet.TOR_SERVICE + ':' + connectWallet.LIGHTNING_GRPC_PORT + (connectWallet.LIGHTNING_GRPC_PROTOCOL?.toLowerCase() === 'https' ? '?clientKey=' + connectWallet.CLIENT_KEY + '&clientCert=' + connectWallet.CLIENT_CERT + '&caCert=' + connectWallet.CA_CERT : ''));\n break;\n\n default:\n setConnectValues({ port: { title: 'Websocket Port', field: 'LIGHTNING_WS_PORT' }, host: { title: 'CLN Host', field: 'DEVICE_DOMAIN_NAME' }, rune: { title: 'Rune', field: 'COMMANDO_RUNE' }, invoiceRune: { title: 'Invoice Rune', field: 'INVOICE_RUNE' }, connectUrl: { title: 'Lnmessage URL', field: '' } });\n setConnectUrl('ln-message://' + connectWallet.DEVICE_DOMAIN_NAME + ':' + connectWallet.LIGHTNING_WS_PORT + '?rune=' + connectWallet.COMMANDO_RUNE + (connectWallet.INVOICE_RUNE !== '' ? '&invoiceRune=' + connectWallet.INVOICE_RUNE : ''));\n break;\n }\n };\n\n let invoiceRuneClickHandler;\n let InvoiceRuneSvg;\n\n if (selNetwork === 'LN Message' || selNetwork === 'LN Message (Tor)') {\n if (connectWallet.INVOICE_RUNE && connectWallet.INVOICE_RUNE !== '') {\n invoiceRuneClickHandler = copyHandler;\n InvoiceRuneSvg = CopySVG;\n } else {\n invoiceRuneClickHandler = createInvoiceRuneHandler;\n InvoiceRuneSvg = AddSVG;\n }\n }\n\n return (\n <>\n \n \n \n \n \n \n \n \n \n \n \n \n

\n Connect wallet to your node\n

\n
\n \n \n Network\n \n \n {selNetwork}\n \n \n {networkTypes.map((type) =>\n {type}\n )}\n \n \n \n {!selNetwork.includes('LN Message') && connectValues.protocol ?\n \n {connectValues.protocol.title}\n \n \n \n \n \n \n : \n }\n \n \n \n {connectValues.host.title}\n \n \n \n \n \n \n \n \n {connectValues.port.title || ''}\n \n \n \n \n \n \n \n \n {(selNetwork !== 'gRPC' && selNetwork !== 'gRPC (Tor)') && connectValues.rune ?\n \n \n {connectValues.rune.title || ''}\n \n \n \n \n \n \n \n : <>\n }\n {(selNetwork === 'LN Message' || selNetwork === 'LN Message (Tor)') && (\n \n \n {connectValues.invoiceRune?.title || ''}\n \n \n \n {isLoadingInvoiceRune ?\n \n \n \n : InvoiceRuneSvg && \n }\n \n \n \n \n )}\n {(selNetwork.includes('REST') && connectWallet.LIGHTNING_REST_PROTOCOL?.toLowerCase() === 'https') || \n (selNetwork.includes('gRPC') && connectWallet.LIGHTNING_GRPC_PROTOCOL?.toLowerCase() === 'https') ?\n <>\n \n \n {connectValues.clientKey?.title || ''}\n \n \n \n \n \n \n \n \n \n \n {connectValues.clientCert?.title || ''}\n \n \n \n \n \n \n \n \n \n :\n <>\n }\n {(selNetwork === 'REST' && connectWallet.LIGHTNING_REST_PROTOCOL?.toLowerCase() === 'https') || \n (selNetwork === 'gRPC' && connectWallet.LIGHTNING_GRPC_PROTOCOL?.toLowerCase() === 'https') ?\n \n \n {connectValues.caCert?.title || ''}\n \n \n \n \n \n \n \n \n :\n <>\n }\n \n \n {connectValues.connectUrl?.title || ''}\n \n \n \n \n \n \n \n \n
\n
\n \n );\n};\n\nexport default ConnectWallet;\n","import React from 'react';\n\nexport const PasswordSVG = props => {\n return (\n // Font Awesome Free 6.4.2 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license (Commercial License) Copyright 2023 Fonticons, Inc.\n \n \n \n );\n};\n","import React from 'react';\n\nexport const ShowSVG = props => {\n return (\n // Font Awesome Free 6.4.2 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license (Commercial License) Copyright 2023 Fonticons, Inc.\n \n \n \n );\n};\n","import React from 'react';\n\nexport const HideSVG = props => {\n return (\n // Font Awesome Free 6.4.2 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license (Commercial License) Copyright 2023 Fonticons, Inc.\n \n \n \n );\n};\n","import './Login.scss';\nimport { useState } from 'react';\nimport SHA256 from \"crypto-js/sha256\";\nimport { Modal, Col, Row, Spinner, InputGroup, Form } from 'react-bootstrap';\n\nimport useInput from '../../../hooks/use-input';\nimport { CallStatus } from '../../../utilities/constants';\nimport { ActionSVG } from '../../../svgs/Action';\nimport InvalidInputMessage from '../../shared/InvalidInputMessage/InvalidInputMessage';\nimport { PasswordSVG } from '../../../svgs/Password';\nimport StatusAlert from '../../shared/StatusAlert/StatusAlert';\nimport { ShowSVG } from '../../../svgs/Show';\nimport { HideSVG } from '../../../svgs/Hide';\nimport { RootService } from '../../../services/http.service';\nimport { setAuthStatus, setShowModals } from '../../../store/rootSlice';\nimport logger from '../../../services/logger.service';\nimport { useDispatch, useSelector } from 'react-redux';\nimport { selectShowModals } from '../../../store/rootSelectors';\nimport { useLocation, useNavigate } from 'react-router-dom';\n\nconst LoginComponent = () => {\n const navigate = useNavigate();\n const { pathname } = useLocation();\n const dispatch = useDispatch();\n const showModals = useSelector(selectShowModals);\n const [hidePassword, setHidePassword] = useState(true);\n const [responseStatus, setResponseStatus] = useState(CallStatus.NONE);\n const [responseMessage, setResponseMessage] = useState('');\n\n const isValidPassword = value => value.trim() !== '';\n\n const {\n value: passwordValue,\n isValid: passwordIsValid,\n hasError: passwordHasError,\n valueChangeHandler: passwordChangeHandler,\n inputBlurHandler: passwordBlurHandler,\n reset: resetPassword,\n } = useInput(isValidPassword);\n\n let formIsValid = false;\n\n if (passwordIsValid) {\n formIsValid = true;\n }\n\n const touchFormControls = () => {\n passwordBlurHandler(null);\n };\n\n const resetFormValues = () => {\n resetPassword();\n };\n\n const loginHandler = async (event) => {\n touchFormControls();\n if (!formIsValid) {\n return;\n }\n setResponseStatus(CallStatus.PENDING);\n setResponseMessage('Logging In...');\n try {\n const authStatus = await RootService.userLogin(SHA256(passwordValue).toString());\n dispatch(setAuthStatus(authStatus));\n if (authStatus.isAuthenticated) {\n if (authStatus.isValidPassword) {\n dispatch(setShowModals({ ...showModals, loginModal: false }));\n setHidePassword(true);\n setResponseStatus(CallStatus.NONE);\n setResponseMessage('');\n resetFormValues();\n navigate(pathname.includes('/bookkeeper') ? pathname : '/cln', { replace: true });\n }\n } \n } catch (err: any) {\n logger.error(err);\n setResponseStatus(CallStatus.ERROR);\n setResponseMessage(err);\n }\n }\n\n const togglePasswordVisibility = () => {\n setHidePassword(!hidePassword);\n };\n\n return (\n
\n \n \n \n \n \n Password*\n \n \n \n \n \n \n togglePasswordVisibility()}>\n {hidePassword ? : }\n \n \n \n {passwordHasError ? (\n \n ) : (\n
\n )}\n \n
\n \n
\n \n \n Login\n {responseStatus === CallStatus.PENDING ? (\n \n ) : (\n \n )}\n \n \n
\n
\n );\n};\n\nexport default LoginComponent;\n","import './Logout.scss';\nimport { Modal, Col } from 'react-bootstrap';\n\nimport { QuestionMarkSVG } from '../../../svgs/QuestionMark';\nimport { RootService } from '../../../services/http.service';\nimport { clearBKPRStore } from '../../../store/bkprSlice';\nimport { clearRootStore, setShowModals } from '../../../store/rootSlice';\nimport { clearCLNStore } from '../../../store/clnSlice';\nimport { useDispatch, useSelector } from 'react-redux';\nimport { selectShowModals } from '../../../store/rootSelectors';\n\nconst LogoutComponent = () => {\n const dispatch = useDispatch();\n const showModals = useSelector(selectShowModals); \n\n const logoutHandler = event => {\n if (event === true) {\n RootService.userLogout();\n dispatch(clearRootStore())\n dispatch(clearCLNStore())\n dispatch(clearBKPRStore())\n closeHandler(true);\n }\n };\n\n const closeHandler = (showLogin?: boolean) => {\n dispatch(setShowModals({ ...showModals, loginModal: showLogin || false, logoutModal: false }));\n }\n\n return (\n
\n \n \n \n \n \n \n \n \n \n Logout?\n \n logoutHandler(true)}\n >\n Yes\n \n logoutHandler(false)}\n >\n No\n \n \n \n \n \n \n
\n );\n};\n\nexport default LogoutComponent;\n","import './SetPassword.scss';\nimport { useState } from 'react';\nimport SHA256 from \"crypto-js/sha256\";\nimport { Modal, Row, Col, Spinner, InputGroup, Form } from 'react-bootstrap';\nimport logger from '../../../services/logger.service';\nimport useInput from '../../../hooks/use-input';\nimport { CallStatus } from '../../../utilities/constants';\nimport { ActionSVG } from '../../../svgs/Action';\nimport InvalidInputMessage from '../../shared/InvalidInputMessage/InvalidInputMessage';\nimport { PasswordSVG } from '../../../svgs/Password';\nimport StatusAlert from '../../shared/StatusAlert/StatusAlert';\nimport { ShowSVG } from '../../../svgs/Show';\nimport { HideSVG } from '../../../svgs/Hide';\nimport { CloseSVG } from '../../../svgs/Close';\nimport { RootService } from '../../../services/http.service';\nimport { setAuthStatus, setShowModals, setShowToast } from '../../../store/rootSlice';\nimport { useDispatch, useSelector } from 'react-redux';\nimport { selectIsValidPassword, selectShowModals } from '../../../store/rootSelectors';\nimport { useLocation, useNavigate } from 'react-router-dom';\n\nconst SetPasswordComponent = () => {\n const navigate = useNavigate();\n const { pathname } = useLocation();\n const dispatch = useDispatch();\n const showModals = useSelector(selectShowModals);\n const isValidPassword = useSelector(selectIsValidPassword);\n const [hideCurrPassword, setHideCurrPassword] = useState(true);\n const [hideNewPassword, setHideNewPassword] = useState(true);\n const [hideConfirmNewPassword, setHideConfirmNewPassword] = useState(true);\n const [responseStatus, setResponseStatus] = useState(CallStatus.NONE);\n const [responseMessage, setResponseMessage] = useState('');\n const isValidCurrPassword = (value) => value.trim() !== '';\n const isValidNewPassword = (value) => value.trim() !== '';\n const isValidConfirmNewPassword = (value) => value.trim() !== '' && value === newPasswordValue;\n\n const {\n value: currPasswordValue,\n isValid: currPasswordIsValid,\n hasError: currPasswordHasError,\n valueChangeHandler: currPasswordChangeHandler,\n inputBlurHandler: currPasswordBlurHandler,\n reset: resetCurrPassword,\n } = useInput(isValidCurrPassword);\n\n const {\n value: newPasswordValue,\n isValid: newPasswordIsValid,\n hasError: newPasswordHasError,\n valueChangeHandler: newPasswordChangeHandler,\n inputBlurHandler: newPasswordBlurHandler,\n reset: resetNewPassword,\n } = useInput(isValidNewPassword);\n\n const {\n value: confirmNewPasswordValue,\n isValid: confirmNewPasswordIsValid,\n hasError: confirmNewPasswordHasError,\n valueChangeHandler: confirmNewPasswordChangeHandler,\n inputBlurHandler: confirmNewPasswordBlurHandler,\n reset: resetConfirmNewPassword,\n } = useInput(isValidConfirmNewPassword);\n\n let formIsValid = false;\n\n if (\n (isValidPassword && currPasswordIsValid && newPasswordIsValid && confirmNewPasswordIsValid)\n || (!isValidPassword && newPasswordIsValid && confirmNewPasswordIsValid)\n ) {\n formIsValid = true;\n };\n \n const touchFormControls = () => {\n currPasswordBlurHandler(null);\n newPasswordBlurHandler(null);\n confirmNewPasswordBlurHandler(null);\n };\n\n const resetFormValues = () => {\n resetCurrPassword();\n resetNewPassword();\n resetConfirmNewPassword();\n };\n\n const resetPasswordHandler = async (event) => {\n touchFormControls();\n if (!formIsValid) { return; }\n setResponseStatus(CallStatus.PENDING);\n setResponseMessage('Resetting Password...');\n try {\n const authStatus = await RootService.resetUserPassword(isValidPassword, isValidPassword ? SHA256(currPasswordValue).toString() : '', SHA256(newPasswordValue).toString());\n logger.info(authStatus);\n dispatch(setAuthStatus(authStatus));\n if (authStatus.isAuthenticated) {\n setHideCurrPassword(true);\n setHideNewPassword(true);\n setHideConfirmNewPassword(true);\n setResponseStatus(CallStatus.NONE);\n setResponseMessage('');\n resetFormValues();\n dispatch(setShowToast({ show: true, message: ('Password Reset Successfully!'), bg: 'success' }));\n dispatch(setShowModals({...showModals, setPasswordModal: false}));\n navigate(pathname.includes('/bookkeeper') ? pathname : '/cln', { replace: true });\n } \n } catch (error: any) {\n setResponseStatus(CallStatus.ERROR);\n setResponseMessage(error.response || error.message || 'Unknown Error');\n }\n };\n\n const toggleCurrPasswordVisibility = () => {\n setHideCurrPassword(!hideCurrPassword);\n };\n\n const toggleNewPasswordVisibility = () => {\n setHideNewPassword(!hideNewPassword);\n };\n\n const toggleConfirmNewPasswordVisibility = () => {\n setHideConfirmNewPassword(!hideConfirmNewPassword);\n };\n\n const closeHandler = () => {\n dispatch(setShowModals({...showModals, setPasswordModal: false}));\n }\n\n return (\n
\n {}} centered className='modal-lg' data-testid='set-password-modal'>\n \n { isValidPassword\n ? \n : <>\n }\n \n \n \n { isValidPassword ?\n \n Current Password*\n \n \n \n \n \n \n toggleCurrPasswordVisibility()}>{hideCurrPassword ? : }\n \n \n {(currPasswordHasError) ?\n \n :\n
\n }\n \n :\n <>\n }\n \n New Password*\n \n \n \n \n \n \n toggleNewPasswordVisibility()}>{hideNewPassword ? : }\n \n \n {(newPasswordHasError) ?\n \n :\n
\n }\n \n \n Confirm New Password*\n \n \n \n \n \n \n toggleConfirmNewPasswordVisibility()}>{hideConfirmNewPassword ? : }\n \n \n {(confirmNewPasswordHasError) ?\n \n :\n
\n }\n \n
\n \n
\n \n \n \n
\n
\n );\n}\n\nexport default SetPasswordComponent;\n","export const SQLSVG = props => {\n return (\n \n \n \n );\n};\n","import { useCallback, useEffect, useRef, useState } from 'react';\nimport { ButtonGroup, Form, InputGroup, Modal } from 'react-bootstrap';\nimport './SQLTerminal.scss';\nimport PerfectScrollbar from 'react-perfect-scrollbar';\nimport { CloseSVG } from '../../../svgs/Close';\nimport logger from '../../../services/logger.service';\nimport { SQLSVG } from '../../../svgs/SQL';\nimport { CopySVG } from '../../../svgs/Copy';\nimport { copyTextToClipboard } from '../../../utilities/data-formatters';\nimport { RootService } from '../../../services/http.service';\nimport { setShowModals, setShowToast } from '../../../store/rootSlice';\nimport { useDispatch, useSelector } from 'react-redux';\nimport { selectShowModals } from '../../../store/rootSelectors';\n\nconst SQLTerminal = (props) => {\n const containerRef = useRef(null);\n const showModals = useSelector(selectShowModals);\n const dispatch = useDispatch();\n const outputRef = useRef(null);\n const [executed, setExecuted] = useState(false);\n const [query, setQuery] = useState('');\n const [output, setOutput] = useState('');\n\n const scrollToBottom = () => {\n if (outputRef.current) {\n outputRef.current.scrollTop = outputRef.current.scrollHeight;\n }\n };\n\n const handleChange = e => {\n setExecuted(false);\n setQuery(e.target.value);\n };\n\n const handleCopy = e => {\n let textToCopy = '';\n if (e.target.id === 'SQL Query') {\n textToCopy = query;\n } else if (outputRef.current) {\n textToCopy = outputRef.current.innerText;\n }\n copyTextToClipboard(textToCopy)\n .then(response => {\n dispatch(setShowToast({\n show: true,\n message: e.target.id + ' Copied Successfully!',\n bg: 'success',\n }));\n })\n .catch(err => {\n logger.error(err);\n });\n };\n\n const handleExecute = useCallback(async () => {\n const formattedQuery = query.replace(/\\n/g, ' ').replace(/\\s+/g, ' ').trim();\n try {\n const result = await RootService.executeSql(formattedQuery);\n setOutput(JSON.stringify(result.rows, null, 2) + '\\n\\n');\n setOutput(formattedQuery + '\\n' + JSON.stringify(result.rows, null, 2) + '\\n\\n');\n } catch (error: any) {\n if (error && error.message) {\n setOutput(formattedQuery + '\\nError: ' + error.message);\n } else {\n setOutput(formattedQuery + '\\nError: ' + error);\n }\n }\n }, [query]);\n\n const handleHelp = async () => {\n window.open('https://docs.corelightning.org/reference/sql', '_blank');\n };\n\n const handleClear = () => {\n setQuery('');\n setOutput('');\n };\n\n useEffect(() => {\n // Check if the last character is a newline and the character before it is a semicolon\n if (!executed && query.endsWith('\\n') && query.trimEnd().endsWith(';')) {\n setExecuted(true);\n handleExecute();\n }\n }, [query, executed, handleExecute]);\n\n useEffect(() => {\n scrollToBottom();\n }, [output]);\n\n const closeHandler = () => {\n dispatch(setShowModals({ ...showModals, sqlTerminalModal: false }));\n }\n\n return (\n \n \n

SQL Terminal

\n \n
\n \n
\n \n \n \n \n \n \n \n \n \n
\n \n \n \n {output}\n \n \n
\n \n \n Execute\n \n \n Clear\n \n \n Help\n \n \n
\n
\n
\n );\n};\n\nexport default SQLTerminal;\n","import './App.scss';\nimport { Container } from 'react-bootstrap';\n\nimport useBreakpoint from '../../hooks/use-breakpoint';\nimport ToastMessage from '../shared/ToastMessage/ToastMessage';\nimport NodeInfo from '../modals/NodeInfo/NodeInfo';\nimport ConnectWallet from '../modals/ConnectWallet/ConnectWallet';\nimport LoginComponent from '../modals/Login/Login';\nimport LogoutComponent from '../modals/Logout/Logout';\nimport SetPasswordComponent from '../modals/SetPassword/SetPassword';\nimport RouteTransition from '../ui/RouteTransition/RouteTransition';\nimport { useSelector } from 'react-redux';\nimport { selectAppMode, selectIsAuthenticated, selectIsDarkMode } from '../../store/rootSelectors';\nimport SQLTerminal from '../modals/SQLTerminal/SQLTerminal';\n\nexport const App = () => {\n const currentScreenSize = useBreakpoint();\n const isAuthenticated = useSelector(selectIsAuthenticated);\n const appMode = useSelector(selectAppMode);\n const isDarkMode = useSelector(selectIsDarkMode);\n const containerClassName = isAuthenticated ? 'py-4' : 'py-4 blurred-container';\n const bodyHTML = document.getElementsByTagName('body')[0];\n const htmlAttributes = bodyHTML.attributes;\n const theme = document.createAttribute('data-bs-theme');\n theme.value = appMode.toLowerCase() || 'dark';\n bodyHTML.style.backgroundColor = isDarkMode ? '#0C0C0F' : '#EBEFF9';\n const screensize = document.createAttribute('data-screensize');\n screensize.value = currentScreenSize;\n htmlAttributes.setNamedItem(theme);\n htmlAttributes.setNamedItem(screensize);\n \n return (\n <>\n \n \n \n \n \n \n \n \n \n \n \n );\n};\n\nexport default App;\n","import React from 'react';\n\nexport const ActionSVG = props => {\n return (\n \n \n \n );\n};\n","import React from 'react';\nimport { OverlayTrigger, Tooltip } from 'react-bootstrap';\n\nexport const CopySVG = props => {\n return (\n {'Copy ' + (props.id || '')} : <>)}\n >\n \n \n \n \n \n );\n};\n\n"],"names":["props","_jsxs","motion","div","className","variants","STAGERRED_SPRING_VARIANTS_2","initial","animate","exit","custom","children","_jsx","InformationSVG","svgClassName","message","dispatch","useDispatch","showToast","useSelector","selectShowToast","y","setY","useState","TOAST_SHOW","showOnComponent","show","TOAST_TYPE","type","SHOW_DELAY","showDelay","delay","TOAST_BG","bg","TOAST_CONTAINER_CLASS_NAME","containerClassName","TOAST_CLASS_NAME","TOAST_MESSAGE","useEffect","closeHandler","setShowToast","_objectSpread","confirmCloseHandler","response","onConfirmResponse","_Fragment","Toast","onClose","Body","Col","xs","QuestionMarkSVG","onClick","transition","BOUNCY_SPRING_VARIANTS_3","autohide","FontAwesomeIcon","icon","faCheck","faTriangleExclamation","faExclamationCircle","CloseSVG","RouteTransition","location","useLocation","window","scrollTo","top","behavior","pathname","AnimatePresence","mode","opacity","duration","TRANSITION_DURATION","Outlet","resolveBreakpoint","width","Breakpoints","XS","SM","MD","LG","XL","XXL","useBreakpoint","size","setSize","innerWidth","update","setTimeout","addEventListener","removeEventListener","height","viewBox","fill","xmlns","d","strokeWidth","strokeLinecap","strokeLinejoin","validateValue","inputType","arguments","length","undefined","InputType","ORIGINAL","enteredValue","setEnteredValue","isTouched","setIsTouched","valueIsValid","value","isValid","hasError","valueChangeHandler","event","target","toLowerCase","toUpperCase","normalizeValue","inputBlurHandler","reset","fillRule","clipRule","responseStatus","CallStatus","NONE","ERROR","PENDING","SUCCESS","OPACITY_VARIANTS","ease","Spinner","variant","titleCase","responseMessage","copyTextToClipboard","then","catch","err","logger","error","id","CopySVG","showTooltip","NodeInfo","isDarkMode","selectIsDarkMode","nodeInfo","selectNodeInfo","showModals","selectShowModals","nodeURI","setNodeURI","_nodeInfo$address","_nodeInfo$binding","uri","address","port","binding","copyHandler","setShowModals","nodeInfoModal","Modal","onHide","centered","Header","Row","img","alt","src","QRCodeCanvas","includeMargin","bgColor","fgColor","InputGroup","Form","Control","placeholder","readOnly","Text","AddSVG","OverlayTrigger","placement","hide","overlay","Tooltip","tooltipText","stroke","ConnectWallet","_connectValues$invoic","_connectValues$invoic2","_connectValues$invoic3","_connectValues$invoic4","_connectWallet$LIGHTN8","_connectWallet$LIGHTN9","_connectValues$client","_connectValues$client2","_connectValues$client3","_connectValues$client4","_connectValues$client5","_connectValues$client6","_connectValues$client7","_connectValues$client8","_connectWallet$LIGHTN0","_connectWallet$LIGHTN1","_connectValues$caCert","_connectValues$caCert2","_connectValues$caCert3","_connectValues$caCert4","_connectValues$connec","_connectValues$connec2","_connectValues$connec3","_connectValues$connec4","connectWallet","selectWalletConnect","networkTypes","setNetworkTypes","selNetwork","setSelNetwork","connectUrl","setConnectUrl","connectValues","setConnectValues","title","field","host","rune","invoiceRune","isLoadingInvoiceRune","setIsLoadingInvoiceRune","newNetworkTypes","LIGHTNING_REST_PORT","push","TOR_SERVICE","LIGHTNING_GRPC_PORT","DEVICE_DOMAIN_NAME","LIGHTNING_WS_PORT","COMMANDO_RUNE","INVOICE_RUNE","_connectWallet$LIGHTN","_connectWallet$LIGHTN2","_connectWallet$LIGHTN3","textToCopy","toString","includes","CLIENT_KEY","CLIENT_CERT","CA_CERT","createInvoiceRuneHandler","CLNService","createInvoiceRune","updatedWalletConnectData","setConnectWallet","JSON","stringify","concat","finally","connectWalletModal","networkChangeHandler","_connectWallet$LIGHTN4","_connectWallet$LIGHTN5","_connectWallet$LIGHTN6","_connectWallet$LIGHTN7","protocol","clientKey","clientCert","caCert","LIGHTNING_REST_PROTOCOL","LIGHTNING_GRPC_PROTOCOL","invoiceRuneClickHandler","InvoiceRuneSvg","Label","Dropdown","Toggle","Menu","map","Item","as","disabled","PasswordSVG","ShowSVG","HideSVG","LoginComponent","navigate","useNavigate","hidePassword","setHidePassword","setResponseStatus","setResponseMessage","passwordValue","passwordIsValid","passwordHasError","passwordChangeHandler","passwordBlurHandler","resetPassword","useInput","trim","formIsValid","loginModal","tabIndex","autoFocus","onChange","onBlur","InvalidInputMessage","StatusAlert","Footer","async","authStatus","RootService","userLogin","SHA256","setAuthStatus","isAuthenticated","isValidPassword","replace","ActionSVG","LogoutComponent","logoutHandler","userLogout","clearRootStore","clearCLNStore","clearBKPRStore","showLogin","logoutModal","SetPasswordComponent","selectIsValidPassword","hideCurrPassword","setHideCurrPassword","hideNewPassword","setHideNewPassword","hideConfirmNewPassword","setHideConfirmNewPassword","currPasswordValue","currPasswordIsValid","currPasswordHasError","currPasswordChangeHandler","currPasswordBlurHandler","resetCurrPassword","newPasswordValue","newPasswordIsValid","newPasswordHasError","newPasswordChangeHandler","newPasswordBlurHandler","resetNewPassword","confirmNewPasswordValue","confirmNewPasswordIsValid","confirmNewPasswordHasError","confirmNewPasswordChangeHandler","confirmNewPasswordBlurHandler","resetConfirmNewPassword","setPasswordModal","resetUserPassword","info","SQLSVG","containerRef","useRef","outputRef","executed","setExecuted","query","setQuery","output","setOutput","handleCopy","e","current","innerText","handleExecute","useCallback","formattedQuery","result","executeSql","rows","endsWith","trimEnd","scrollTop","scrollHeight","sqlTerminalModal","ref","name","style","position","PerfectScrollbar","ButtonGroup","handleClear","open","App","currentScreenSize","selectIsAuthenticated","appMode","selectAppMode","bodyHTML","document","getElementsByTagName","htmlAttributes","attributes","theme","createAttribute","backgroundColor","screensize","setNamedItem","Container","ToastMessage","SQLTerminal"],"sourceRoot":""} \ No newline at end of file diff --git a/apps/frontend/build/static/js/768.59f5d13d.chunk.js b/apps/frontend/build/static/js/768.59f5d13d.chunk.js deleted file mode 100644 index 9081202b..00000000 --- a/apps/frontend/build/static/js/768.59f5d13d.chunk.js +++ /dev/null @@ -1,2 +0,0 @@ -"use strict";(self.webpackChunkcln_application_frontend=self.webpackChunkcln_application_frontend||[]).push([[768],{2458:(t,e,n)=>{n.d(e,{A:()=>C});var r=n(9740),a=n(9850),s=n(1346),o=n.n(s),i=n(2176),l=n(6130),c=n(2459),u=n(7555),f=n(4489),d=n(812);const h=["className","bsPrefix","as"],m=(0,f.A)("h4");m.displayName="DivStyledAsH4";const A=i.forwardRef(((t,e)=>{let{className:n,bsPrefix:s,as:i=m}=t,l=(0,a.A)(t,h);return s=(0,u.oU)(s,"alert-heading"),(0,d.jsx)(i,(0,r.A)({ref:e,className:o()(n,s)},l))}));A.displayName="AlertHeading";const p=A;var v=n(1188);const g=["className","bsPrefix","as"],y=i.forwardRef(((t,e)=>{let{className:n,bsPrefix:s,as:i=v.A}=t,l=(0,a.A)(t,g);return s=(0,u.oU)(s,"alert-link"),(0,d.jsx)(i,(0,r.A)({ref:e,className:o()(n,s)},l))}));y.displayName="AlertLink";const b=y;var x=n(881),w=n(9359);const N=["bsPrefix","show","closeLabel","closeVariant","className","children","variant","onClose","dismissible","transition"],k=i.forwardRef(((t,e)=>{const n=(0,l.Zw)(t,{show:"onClose"}),{bsPrefix:s,show:i=!0,closeLabel:f="Close alert",closeVariant:h,className:m,children:A,variant:p="primary",onClose:v,dismissible:g,transition:y=x.A}=n,b=(0,a.A)(n,N),k=(0,u.oU)(s,"alert"),C=(0,c.A)((t=>{v&&v(!1,t)})),M=!0===y?x.A:y,S=(0,d.jsxs)("div",(0,r.A)((0,r.A)({role:"alert"},M?void 0:b),{},{ref:e,className:o()(m,k,p&&"".concat(k,"-").concat(p),g&&"".concat(k,"-dismissible")),children:[g&&(0,d.jsx)(w.A,{onClick:C,"aria-label":f,variant:h}),A]}));return M?(0,d.jsx)(M,(0,r.A)((0,r.A)({unmountOnExit:!0},b),{},{ref:void 0,in:i,children:S})):i?S:null}));k.displayName="Alert";const C=Object.assign(k,{Link:b,Heading:p})},5886:(t,e,n)=>{n.d(e,{i:()=>B});var r=n(9740),a=n(366);function s(t,e,n){var r;if("string"===typeof t){let s=document;e&&((0,a.V)(Boolean(e.current),"Scope provided, but no element detected."),s=e.current),n?(null!==(r=n[t])&&void 0!==r||(n[t]=s.querySelectorAll(t)),t=n[t]):t=s.querySelectorAll(t)}else t instanceof Element&&(t=[t]);return Array.from(t||[])}var o=n(6059),i=n(7638);const l=(0,n(6257).p)((()=>void 0!==window.ScrollTimeline));class c{constructor(t){this.animations=t.filter(Boolean)}then(t,e){return Promise.all(this.animations).then(t).catch(e)}getAll(t){return this.animations[0][t]}setAll(t,e){for(let n=0;n{if(!l()||!e.attachTimeline)return e.pause(),function(t,e){let n;const r=()=>{const{currentTime:r}=e,a=(null===r?0:r.value)/100;n!==a&&t(a),n=a};return i.Gt.update(r,!0),()=>(0,i.WG)(r)}((t=>{e.time=e.duration*t}),t);e.attachTimeline(t)}));return()=>{e.forEach(((t,e)=>{t&&t(),this.animations[e].stop()}))}}get time(){return this.getAll("time")}set time(t){this.setAll("time",t)}get speed(){return this.getAll("speed")}set speed(t){this.setAll("speed",t)}get duration(){let t=0;for(let e=0;ee[t]()))}play(){this.runAll("play")}pause(){this.runAll("pause")}stop(){this.runAll("stop")}cancel(){this.runAll("cancel")}complete(){this.runAll("complete")}}var u=n(2086),f=n(6247),d=n(4900),h=n(4427);function m(t){const e={presenceContext:null,props:{},visualState:{renderState:{transform:{},transformOrigin:{},style:{},vars:{},attrs:{}},latestValues:{}}},n=(0,f.x)(t)?new d.l(e,{enableHardwareAcceleration:!1}):new h.M(e,{enableHardwareAcceleration:!0});n.mount(t),o.C.set(t,n)}var A=n(3267),p=n(9850),v=n(3123),g=n(2817),y=n(2985);function b(t){let e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:100;const n=(0,v.o)((0,r.A)({keyframes:[0,e]},t)),a=Math.min((0,g.t)(n),g.Y);return{type:"keyframes",ease:t=>n.next(a*t).value/e,duration:(0,y.X)(a)}}var x=n(1955),w=n(3859),N=n(6874),k=n(2928);function C(t,e,n,r){var a;return"number"===typeof e?e:e.startsWith("-")||e.startsWith("+")?Math.max(0,t+parseFloat(e)):"<"===e?n:null!==(a=r.get(e))&&void 0!==a?a:t}var M=n(667);function S(t,e){return(0,M.h)(t)?t[((t,e,n)=>{const r=e-t;return((n-t)%r+r)%r+t})(0,t.length,e)]:t}var j=n(910),E=n(7407);function P(t,e,n,r,a,s){!function(t,e,n){for(let r=0;re&&a.at"number"===typeof t,W=t=>t.every(U);function _(t,e,n,i){const l=s(t,i),f=l.length;(0,a.V)(Boolean(f),"No valid element provided.");const d=[];for(let a=0;a1&&void 0!==arguments[1]?arguments[1]:{},{defaultTransition:n={}}=e,a=(0,p.A)(e,T),o=arguments.length>2?arguments[2]:void 0;const i=n.duration||.3,l=new Map,c=new Map,u={},f=new Map;let d=0,h=0,m=0;for(let A=0;A3&&void 0!==arguments[3]?arguments[3]:0,o=arguments.length>4&&void 0!==arguments[4]?arguments[4]:0;const l=L(t),{delay:c=0,times:u=(0,x.Z)(l),type:f="keyframes"}=e,d=(0,p.A)(e,G);let{ease:A=n.ease||"easeOut",duration:v}=e;const N="function"===typeof c?c(s,o):c,k=l.length;if(k<=2&&"spring"===f){let t=100;if(2===k&&W(l)){const e=l[1]-l[0];t=Math.abs(e)}const e=(0,r.A)({},d);void 0!==v&&(e.duration=(0,y.f)(v));const n=b(e,t);A=n.ease,v=n.duration}null!==v&&void 0!==v||(v=i);const C=h+N,M=C+v;1===u.length&&0===u[0]&&(u[1]=1);const S=u.length-l.length;S>0&&(0,w.f)(u,S),1===l.length&&l.unshift(null),P(a,l,A,u,C,M),g=Math.max(N+v,g),m=Math.max(M,m)};if((0,k.S)(a))N(l,v,V("default",H(a,c)));else{const t=s(a,o,u),e=t.length;for(let n=0;n{for(const s in t){const o=t[s];o.sort(O);const i=[],c=[],u=[];for(let t=0;t{let n,{keyframes:r,transition:s}=t;n=(0,k.S)(e)?(0,A.z)(e,r.default,s.default):_(e,r,s),a.push(n)})),new c(a)}const B=function(t,e,n){let r;var a;return a=t,r=Array.isArray(a)&&Array.isArray(a[0])?q(t,e,z):function(t){return"object"===typeof t&&!Array.isArray(t)}(e)?_(t,e,n,z):(0,A.z)(t,e,n),z&&z.animations.push(r),r};var z},5895:(t,e,n)=>{n.d(e,{d:()=>i});var r=n(2176),a=n(985),s=n(6481),o=n(3041);function i(t){const e=(0,o.M)((()=>(0,a.OQ)(t))),{isStatic:n}=(0,r.useContext)(s.Q);if(n){const[,n]=(0,r.useState)(t);(0,r.useEffect)((()=>e.on("change",n)),[])}return e}},6173:(t,e,n)=>{n.d(e,{G:()=>d});var r=n(9740),a=n(1716);const s=t=>(t=>t&&"object"===typeof t&&t.mix)(t)?t.mix:void 0;var o=n(5895),i=n(1584),l=n(7638);function c(t,e){const n=(0,o.d)(e()),r=()=>n.set(e());return r(),(0,i.E)((()=>{const e=()=>l.Gt.update(r,!1,!0),n=t.map((t=>t.on("change",e)));return()=>{n.forEach((t=>t())),(0,l.WG)(r)}})),n}var u=n(3041),f=n(985);function d(t,e,n,o){if("function"===typeof t)return function(t){f.bt.current=[],t();const e=c(f.bt.current,t);return f.bt.current=void 0,e}(t);const i="function"===typeof e?e:function(){const t=!Array.isArray(arguments.length<=0?void 0:arguments[0]),e=t?0:-1,n=0+e<0||arguments.length<=0+e?void 0:arguments[0+e],o=1+e<0||arguments.length<=1+e?void 0:arguments[1+e],i=2+e<0||arguments.length<=2+e?void 0:arguments[2+e],l=3+e<0||arguments.length<=3+e?void 0:arguments[3+e],c=(0,a.G)(o,i,(0,r.A)({mixer:s(i[0])},l));return t?c(n):c}(e,n,o);return Array.isArray(t)?h(t,i):h([t],(t=>{let[e]=t;return i(e)}))}function h(t,e){const n=(0,u.M)((()=>[]));return c(t,(()=>{n.length=0;const r=t.length;for(let e=0;e{n.d(e,{A:()=>m});var r=n(9740),a=n(9850),s=n(1346),o=n.n(s),i=n(2176),l=n(5360),c=n.n(l),u=n(7555),f=n(812);const d=["bsPrefix","className","fluid","rounded","roundedCircle","thumbnail"],h=(c().string,c().bool,c().bool,c().bool,c().bool,i.forwardRef(((t,e)=>{let{bsPrefix:n,className:s,fluid:i=!1,rounded:l=!1,roundedCircle:c=!1,thumbnail:h=!1}=t,m=(0,a.A)(t,d);return n=(0,u.oU)(n,"img"),(0,f.jsx)("img",(0,r.A)((0,r.A)({ref:e},m),{},{className:o()(s,i&&"".concat(n,"-fluid"),l&&"rounded",c&&"rounded-circle",h&&"".concat(n,"-thumbnail"))}))})));h.displayName="Image";const m=h}}]); -//# sourceMappingURL=768.59f5d13d.chunk.js.map \ No newline at end of file diff --git a/apps/frontend/build/static/js/768.59f5d13d.chunk.js.map b/apps/frontend/build/static/js/768.59f5d13d.chunk.js.map deleted file mode 100644 index 72c7ec69..00000000 --- a/apps/frontend/build/static/js/768.59f5d13d.chunk.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"static/js/768.59f5d13d.chunk.js","mappings":"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","sources":["../../../node_modules/react-bootstrap/esm/AlertHeading.js","../../../node_modules/react-bootstrap/esm/AlertLink.js","../../../node_modules/react-bootstrap/esm/Alert.js","../../../node_modules/framer-motion/dist/es/render/dom/utils/resolve-element.mjs","../../../node_modules/framer-motion/dist/es/render/dom/scroll/supports.mjs","../../../node_modules/framer-motion/dist/es/animation/GroupPlaybackControls.mjs","../../../node_modules/framer-motion/dist/es/render/dom/scroll/observe.mjs","../../../node_modules/framer-motion/dist/es/animation/utils/create-visual-element.mjs","../../../node_modules/framer-motion/dist/es/easing/utils/create-generator-easing.mjs","../../../node_modules/framer-motion/dist/es/animation/sequence/utils/calc-time.mjs","../../../node_modules/framer-motion/dist/es/easing/utils/get-easing-for-segment.mjs","../../../node_modules/framer-motion/dist/es/utils/wrap.mjs","../../../node_modules/framer-motion/dist/es/animation/sequence/utils/edit.mjs","../../../node_modules/framer-motion/dist/es/animation/sequence/utils/sort.mjs","../../../node_modules/framer-motion/dist/es/animation/sequence/create.mjs","../../../node_modules/framer-motion/dist/es/animation/animate.mjs","../../../node_modules/framer-motion/dist/es/animation/utils/is-dom-keyframes.mjs","../../../node_modules/framer-motion/dist/es/value/use-motion-value.mjs","../../../node_modules/framer-motion/dist/es/utils/transform.mjs","../../../node_modules/framer-motion/dist/es/value/use-combine-values.mjs","../../../node_modules/framer-motion/dist/es/value/use-transform.mjs","../../../node_modules/framer-motion/dist/es/value/use-computed.mjs","../../../node_modules/react-bootstrap/esm/Image.js"],"sourcesContent":["\"use client\";\n\nimport * as React from 'react';\nimport classNames from 'classnames';\nimport { useBootstrapPrefix } from './ThemeProvider';\nimport divWithClassName from './divWithClassName';\nimport { jsx as _jsx } from \"react/jsx-runtime\";\nconst DivStyledAsH4 = divWithClassName('h4');\nDivStyledAsH4.displayName = 'DivStyledAsH4';\nconst AlertHeading = /*#__PURE__*/React.forwardRef(({\n className,\n bsPrefix,\n as: Component = DivStyledAsH4,\n ...props\n}, ref) => {\n bsPrefix = useBootstrapPrefix(bsPrefix, 'alert-heading');\n return /*#__PURE__*/_jsx(Component, {\n ref: ref,\n className: classNames(className, bsPrefix),\n ...props\n });\n});\nAlertHeading.displayName = 'AlertHeading';\nexport default AlertHeading;","\"use client\";\n\nimport * as React from 'react';\nimport classNames from 'classnames';\nimport Anchor from '@restart/ui/Anchor';\nimport { useBootstrapPrefix } from './ThemeProvider';\nimport { jsx as _jsx } from \"react/jsx-runtime\";\nconst AlertLink = /*#__PURE__*/React.forwardRef(({\n className,\n bsPrefix,\n as: Component = Anchor,\n ...props\n}, ref) => {\n bsPrefix = useBootstrapPrefix(bsPrefix, 'alert-link');\n return /*#__PURE__*/_jsx(Component, {\n ref: ref,\n className: classNames(className, bsPrefix),\n ...props\n });\n});\nAlertLink.displayName = 'AlertLink';\nexport default AlertLink;","\"use client\";\n\nimport classNames from 'classnames';\nimport * as React from 'react';\nimport { useUncontrolled } from 'uncontrollable';\nimport useEventCallback from '@restart/hooks/useEventCallback';\nimport { useBootstrapPrefix } from './ThemeProvider';\nimport AlertHeading from './AlertHeading';\nimport AlertLink from './AlertLink';\nimport Fade from './Fade';\nimport CloseButton from './CloseButton';\nimport { jsx as _jsx } from \"react/jsx-runtime\";\nimport { jsxs as _jsxs } from \"react/jsx-runtime\";\nconst Alert = /*#__PURE__*/React.forwardRef((uncontrolledProps, ref) => {\n const {\n bsPrefix,\n show = true,\n closeLabel = 'Close alert',\n closeVariant,\n className,\n children,\n variant = 'primary',\n onClose,\n dismissible,\n transition = Fade,\n ...props\n } = useUncontrolled(uncontrolledProps, {\n show: 'onClose'\n });\n const prefix = useBootstrapPrefix(bsPrefix, 'alert');\n const handleClose = useEventCallback(e => {\n if (onClose) {\n onClose(false, e);\n }\n });\n const Transition = transition === true ? Fade : transition;\n const alert = /*#__PURE__*/_jsxs(\"div\", {\n role: \"alert\",\n ...(!Transition ? props : undefined),\n ref: ref,\n className: classNames(className, prefix, variant && `${prefix}-${variant}`, dismissible && `${prefix}-dismissible`),\n children: [dismissible && /*#__PURE__*/_jsx(CloseButton, {\n onClick: handleClose,\n \"aria-label\": closeLabel,\n variant: closeVariant\n }), children]\n });\n if (!Transition) return show ? alert : null;\n return /*#__PURE__*/_jsx(Transition, {\n unmountOnExit: true,\n ...props,\n ref: undefined,\n in: show,\n children: alert\n });\n});\nAlert.displayName = 'Alert';\nexport default Object.assign(Alert, {\n Link: AlertLink,\n Heading: AlertHeading\n});","import { invariant } from '../../../utils/errors.mjs';\n\nfunction resolveElements(elements, scope, selectorCache) {\n var _a;\n if (typeof elements === \"string\") {\n let root = document;\n if (scope) {\n invariant(Boolean(scope.current), \"Scope provided, but no element detected.\");\n root = scope.current;\n }\n if (selectorCache) {\n (_a = selectorCache[elements]) !== null && _a !== void 0 ? _a : (selectorCache[elements] = root.querySelectorAll(elements));\n elements = selectorCache[elements];\n }\n else {\n elements = root.querySelectorAll(elements);\n }\n }\n else if (elements instanceof Element) {\n elements = [elements];\n }\n /**\n * Return an empty array\n */\n return Array.from(elements || []);\n}\n\nexport { resolveElements };\n","import { memo } from '../../../utils/memo.mjs';\n\nconst supportsScrollTimeline = memo(() => window.ScrollTimeline !== undefined);\n\nexport { supportsScrollTimeline };\n","import { observeTimeline } from '../render/dom/scroll/observe.mjs';\nimport { supportsScrollTimeline } from '../render/dom/scroll/supports.mjs';\n\nclass GroupPlaybackControls {\n constructor(animations) {\n this.animations = animations.filter(Boolean);\n }\n then(onResolve, onReject) {\n return Promise.all(this.animations).then(onResolve).catch(onReject);\n }\n /**\n * TODO: Filter out cancelled or stopped animations before returning\n */\n getAll(propName) {\n return this.animations[0][propName];\n }\n setAll(propName, newValue) {\n for (let i = 0; i < this.animations.length; i++) {\n this.animations[i][propName] = newValue;\n }\n }\n attachTimeline(timeline) {\n const cancelAll = this.animations.map((animation) => {\n if (supportsScrollTimeline() && animation.attachTimeline) {\n animation.attachTimeline(timeline);\n }\n else {\n animation.pause();\n return observeTimeline((progress) => {\n animation.time = animation.duration * progress;\n }, timeline);\n }\n });\n return () => {\n cancelAll.forEach((cancelTimeline, i) => {\n if (cancelTimeline)\n cancelTimeline();\n this.animations[i].stop();\n });\n };\n }\n get time() {\n return this.getAll(\"time\");\n }\n set time(time) {\n this.setAll(\"time\", time);\n }\n get speed() {\n return this.getAll(\"speed\");\n }\n set speed(speed) {\n this.setAll(\"speed\", speed);\n }\n get duration() {\n let max = 0;\n for (let i = 0; i < this.animations.length; i++) {\n max = Math.max(max, this.animations[i].duration);\n }\n return max;\n }\n runAll(methodName) {\n this.animations.forEach((controls) => controls[methodName]());\n }\n play() {\n this.runAll(\"play\");\n }\n pause() {\n this.runAll(\"pause\");\n }\n stop() {\n this.runAll(\"stop\");\n }\n cancel() {\n this.runAll(\"cancel\");\n }\n complete() {\n this.runAll(\"complete\");\n }\n}\n\nexport { GroupPlaybackControls };\n","import { frame, cancelFrame } from '../../../frameloop/frame.mjs';\n\nfunction observeTimeline(update, timeline) {\n let prevProgress;\n const onFrame = () => {\n const { currentTime } = timeline;\n const percentage = currentTime === null ? 0 : currentTime.value;\n const progress = percentage / 100;\n if (prevProgress !== progress) {\n update(progress);\n }\n prevProgress = progress;\n };\n frame.update(onFrame, true);\n return () => cancelFrame(onFrame);\n}\n\nexport { observeTimeline };\n","import { isSVGElement } from '../../render/dom/utils/is-svg-element.mjs';\nimport { SVGVisualElement } from '../../render/svg/SVGVisualElement.mjs';\nimport { HTMLVisualElement } from '../../render/html/HTMLVisualElement.mjs';\nimport { visualElementStore } from '../../render/store.mjs';\n\nfunction createVisualElement(element) {\n const options = {\n presenceContext: null,\n props: {},\n visualState: {\n renderState: {\n transform: {},\n transformOrigin: {},\n style: {},\n vars: {},\n attrs: {},\n },\n latestValues: {},\n },\n };\n const node = isSVGElement(element)\n ? new SVGVisualElement(options, {\n enableHardwareAcceleration: false,\n })\n : new HTMLVisualElement(options, {\n enableHardwareAcceleration: true,\n });\n node.mount(element);\n visualElementStore.set(element, node);\n}\n\nexport { createVisualElement };\n","import { spring } from '../../animation/generators/spring/index.mjs';\nimport { calcGeneratorDuration, maxGeneratorDuration } from '../../animation/generators/utils/calc-duration.mjs';\nimport { millisecondsToSeconds } from '../../utils/time-conversion.mjs';\n\n/**\n * Create a progress => progress easing function from a generator.\n */\nfunction createGeneratorEasing(options, scale = 100) {\n const generator = spring({ keyframes: [0, scale], ...options });\n const duration = Math.min(calcGeneratorDuration(generator), maxGeneratorDuration);\n return {\n type: \"keyframes\",\n ease: (progress) => generator.next(duration * progress).value / scale,\n duration: millisecondsToSeconds(duration),\n };\n}\n\nexport { createGeneratorEasing };\n","/**\n * Given a absolute or relative time definition and current/prev time state of the sequence,\n * calculate an absolute time for the next keyframes.\n */\nfunction calcNextTime(current, next, prev, labels) {\n var _a;\n if (typeof next === \"number\") {\n return next;\n }\n else if (next.startsWith(\"-\") || next.startsWith(\"+\")) {\n return Math.max(0, current + parseFloat(next));\n }\n else if (next === \"<\") {\n return prev;\n }\n else {\n return (_a = labels.get(next)) !== null && _a !== void 0 ? _a : current;\n }\n}\n\nexport { calcNextTime };\n","import { wrap } from '../../utils/wrap.mjs';\nimport { isEasingArray } from './is-easing-array.mjs';\n\nfunction getEasingForSegment(easing, i) {\n return isEasingArray(easing) ? easing[wrap(0, easing.length, i)] : easing;\n}\n\nexport { getEasingForSegment };\n","const wrap = (min, max, v) => {\n const rangeSize = max - min;\n return ((((v - min) % rangeSize) + rangeSize) % rangeSize) + min;\n};\n\nexport { wrap };\n","import { getEasingForSegment } from '../../../easing/utils/get-easing-for-segment.mjs';\nimport { removeItem } from '../../../utils/array.mjs';\nimport { mix } from '../../../utils/mix.mjs';\n\nfunction eraseKeyframes(sequence, startTime, endTime) {\n for (let i = 0; i < sequence.length; i++) {\n const keyframe = sequence[i];\n if (keyframe.at > startTime && keyframe.at < endTime) {\n removeItem(sequence, keyframe);\n // If we remove this item we have to push the pointer back one\n i--;\n }\n }\n}\nfunction addKeyframes(sequence, keyframes, easing, offset, startTime, endTime) {\n /**\n * Erase every existing value between currentTime and targetTime,\n * this will essentially splice this timeline into any currently\n * defined ones.\n */\n eraseKeyframes(sequence, startTime, endTime);\n for (let i = 0; i < keyframes.length; i++) {\n sequence.push({\n value: keyframes[i],\n at: mix(startTime, endTime, offset[i]),\n easing: getEasingForSegment(easing, i),\n });\n }\n}\n\nexport { addKeyframes, eraseKeyframes };\n","function compareByTime(a, b) {\n if (a.at === b.at) {\n if (a.value === null)\n return 1;\n if (b.value === null)\n return -1;\n return 0;\n }\n else {\n return a.at - b.at;\n }\n}\n\nexport { compareByTime };\n","import { createGeneratorEasing } from '../../easing/utils/create-generator-easing.mjs';\nimport { resolveElements } from '../../render/dom/utils/resolve-element.mjs';\nimport { defaultOffset } from '../../utils/offsets/default.mjs';\nimport { fillOffset } from '../../utils/offsets/fill.mjs';\nimport { progress } from '../../utils/progress.mjs';\nimport { secondsToMilliseconds } from '../../utils/time-conversion.mjs';\nimport { isMotionValue } from '../../value/utils/is-motion-value.mjs';\nimport { calcNextTime } from './utils/calc-time.mjs';\nimport { addKeyframes } from './utils/edit.mjs';\nimport { compareByTime } from './utils/sort.mjs';\n\nconst defaultSegmentEasing = \"easeInOut\";\nfunction createAnimationsFromSequence(sequence, { defaultTransition = {}, ...sequenceTransition } = {}, scope) {\n const defaultDuration = defaultTransition.duration || 0.3;\n const animationDefinitions = new Map();\n const sequences = new Map();\n const elementCache = {};\n const timeLabels = new Map();\n let prevTime = 0;\n let currentTime = 0;\n let totalDuration = 0;\n /**\n * Build the timeline by mapping over the sequence array and converting\n * the definitions into keyframes and offsets with absolute time values.\n * These will later get converted into relative offsets in a second pass.\n */\n for (let i = 0; i < sequence.length; i++) {\n const segment = sequence[i];\n /**\n * If this is a timeline label, mark it and skip the rest of this iteration.\n */\n if (typeof segment === \"string\") {\n timeLabels.set(segment, currentTime);\n continue;\n }\n else if (!Array.isArray(segment)) {\n timeLabels.set(segment.name, calcNextTime(currentTime, segment.at, prevTime, timeLabels));\n continue;\n }\n let [subject, keyframes, transition = {}] = segment;\n /**\n * If a relative or absolute time value has been specified we need to resolve\n * it in relation to the currentTime.\n */\n if (transition.at !== undefined) {\n currentTime = calcNextTime(currentTime, transition.at, prevTime, timeLabels);\n }\n /**\n * Keep track of the maximum duration in this definition. This will be\n * applied to currentTime once the definition has been parsed.\n */\n let maxDuration = 0;\n const resolveValueSequence = (valueKeyframes, valueTransition, valueSequence, elementIndex = 0, numElements = 0) => {\n const valueKeyframesAsList = keyframesAsList(valueKeyframes);\n const { delay = 0, times = defaultOffset(valueKeyframesAsList), type = \"keyframes\", ...remainingTransition } = valueTransition;\n let { ease = defaultTransition.ease || \"easeOut\", duration } = valueTransition;\n /**\n * Resolve stagger() if defined.\n */\n const calculatedDelay = typeof delay === \"function\"\n ? delay(elementIndex, numElements)\n : delay;\n /**\n * If this animation should and can use a spring, generate a spring easing function.\n */\n const numKeyframes = valueKeyframesAsList.length;\n if (numKeyframes <= 2 && type === \"spring\") {\n /**\n * As we're creating an easing function from a spring,\n * ideally we want to generate it using the real distance\n * between the two keyframes. However this isn't always\n * possible - in these situations we use 0-100.\n */\n let absoluteDelta = 100;\n if (numKeyframes === 2 &&\n isNumberKeyframesArray(valueKeyframesAsList)) {\n const delta = valueKeyframesAsList[1] - valueKeyframesAsList[0];\n absoluteDelta = Math.abs(delta);\n }\n const springTransition = { ...remainingTransition };\n if (duration !== undefined) {\n springTransition.duration = secondsToMilliseconds(duration);\n }\n const springEasing = createGeneratorEasing(springTransition, absoluteDelta);\n ease = springEasing.ease;\n duration = springEasing.duration;\n }\n duration !== null && duration !== void 0 ? duration : (duration = defaultDuration);\n const startTime = currentTime + calculatedDelay;\n const targetTime = startTime + duration;\n /**\n * If there's only one time offset of 0, fill in a second with length 1\n */\n if (times.length === 1 && times[0] === 0) {\n times[1] = 1;\n }\n /**\n * Fill out if offset if fewer offsets than keyframes\n */\n const remainder = times.length - valueKeyframesAsList.length;\n remainder > 0 && fillOffset(times, remainder);\n /**\n * If only one value has been set, ie [1], push a null to the start of\n * the keyframe array. This will let us mark a keyframe at this point\n * that will later be hydrated with the previous value.\n */\n valueKeyframesAsList.length === 1 &&\n valueKeyframesAsList.unshift(null);\n /**\n * Add keyframes, mapping offsets to absolute time.\n */\n addKeyframes(valueSequence, valueKeyframesAsList, ease, times, startTime, targetTime);\n maxDuration = Math.max(calculatedDelay + duration, maxDuration);\n totalDuration = Math.max(targetTime, totalDuration);\n };\n if (isMotionValue(subject)) {\n const subjectSequence = getSubjectSequence(subject, sequences);\n resolveValueSequence(keyframes, transition, getValueSequence(\"default\", subjectSequence));\n }\n else {\n /**\n * Find all the elements specified in the definition and parse value\n * keyframes from their timeline definitions.\n */\n const elements = resolveElements(subject, scope, elementCache);\n const numElements = elements.length;\n /**\n * For every element in this segment, process the defined values.\n */\n for (let elementIndex = 0; elementIndex < numElements; elementIndex++) {\n /**\n * Cast necessary, but we know these are of this type\n */\n keyframes = keyframes;\n transition = transition;\n const element = elements[elementIndex];\n const subjectSequence = getSubjectSequence(element, sequences);\n for (const key in keyframes) {\n resolveValueSequence(keyframes[key], getValueTransition(transition, key), getValueSequence(key, subjectSequence), elementIndex, numElements);\n }\n }\n }\n prevTime = currentTime;\n currentTime += maxDuration;\n }\n /**\n * For every element and value combination create a new animation.\n */\n sequences.forEach((valueSequences, element) => {\n for (const key in valueSequences) {\n const valueSequence = valueSequences[key];\n /**\n * Arrange all the keyframes in ascending time order.\n */\n valueSequence.sort(compareByTime);\n const keyframes = [];\n const valueOffset = [];\n const valueEasing = [];\n /**\n * For each keyframe, translate absolute times into\n * relative offsets based on the total duration of the timeline.\n */\n for (let i = 0; i < valueSequence.length; i++) {\n const { at, value, easing } = valueSequence[i];\n keyframes.push(value);\n valueOffset.push(progress(0, totalDuration, at));\n valueEasing.push(easing || \"easeOut\");\n }\n /**\n * If the first keyframe doesn't land on offset: 0\n * provide one by duplicating the initial keyframe. This ensures\n * it snaps to the first keyframe when the animation starts.\n */\n if (valueOffset[0] !== 0) {\n valueOffset.unshift(0);\n keyframes.unshift(keyframes[0]);\n valueEasing.unshift(defaultSegmentEasing);\n }\n /**\n * If the last keyframe doesn't land on offset: 1\n * provide one with a null wildcard value. This will ensure it\n * stays static until the end of the animation.\n */\n if (valueOffset[valueOffset.length - 1] !== 1) {\n valueOffset.push(1);\n keyframes.push(null);\n }\n if (!animationDefinitions.has(element)) {\n animationDefinitions.set(element, {\n keyframes: {},\n transition: {},\n });\n }\n const definition = animationDefinitions.get(element);\n definition.keyframes[key] = keyframes;\n definition.transition[key] = {\n ...defaultTransition,\n duration: totalDuration,\n ease: valueEasing,\n times: valueOffset,\n ...sequenceTransition,\n };\n }\n });\n return animationDefinitions;\n}\nfunction getSubjectSequence(subject, sequences) {\n !sequences.has(subject) && sequences.set(subject, {});\n return sequences.get(subject);\n}\nfunction getValueSequence(name, sequences) {\n if (!sequences[name])\n sequences[name] = [];\n return sequences[name];\n}\nfunction keyframesAsList(keyframes) {\n return Array.isArray(keyframes) ? keyframes : [keyframes];\n}\nfunction getValueTransition(transition, key) {\n return transition[key]\n ? { ...transition, ...transition[key] }\n : { ...transition };\n}\nconst isNumber = (keyframe) => typeof keyframe === \"number\";\nconst isNumberKeyframesArray = (keyframes) => keyframes.every(isNumber);\n\nexport { createAnimationsFromSequence, getValueTransition };\n","import { resolveElements } from '../render/dom/utils/resolve-element.mjs';\nimport { visualElementStore } from '../render/store.mjs';\nimport { invariant } from '../utils/errors.mjs';\nimport { GroupPlaybackControls } from './GroupPlaybackControls.mjs';\nimport { isDOMKeyframes } from './utils/is-dom-keyframes.mjs';\nimport { animateTarget } from './interfaces/visual-element-target.mjs';\nimport { createVisualElement } from './utils/create-visual-element.mjs';\nimport { animateSingleValue } from './interfaces/single-value.mjs';\nimport { createAnimationsFromSequence } from './sequence/create.mjs';\nimport { isMotionValue } from '../value/utils/is-motion-value.mjs';\n\nfunction animateElements(elementOrSelector, keyframes, options, scope) {\n const elements = resolveElements(elementOrSelector, scope);\n const numElements = elements.length;\n invariant(Boolean(numElements), \"No valid element provided.\");\n const animations = [];\n for (let i = 0; i < numElements; i++) {\n const element = elements[i];\n /**\n * Check each element for an associated VisualElement. If none exists,\n * we need to create one.\n */\n if (!visualElementStore.has(element)) {\n /**\n * TODO: We only need render-specific parts of the VisualElement.\n * With some additional work the size of the animate() function\n * could be reduced significantly.\n */\n createVisualElement(element);\n }\n const visualElement = visualElementStore.get(element);\n const transition = { ...options };\n /**\n * Resolve stagger function if provided.\n */\n if (typeof transition.delay === \"function\") {\n transition.delay = transition.delay(i, numElements);\n }\n animations.push(...animateTarget(visualElement, { ...keyframes, transition }, {}));\n }\n return new GroupPlaybackControls(animations);\n}\nconst isSequence = (value) => Array.isArray(value) && Array.isArray(value[0]);\nfunction animateSequence(sequence, options, scope) {\n const animations = [];\n const animationDefinitions = createAnimationsFromSequence(sequence, options, scope);\n animationDefinitions.forEach(({ keyframes, transition }, subject) => {\n let animation;\n if (isMotionValue(subject)) {\n animation = animateSingleValue(subject, keyframes.default, transition.default);\n }\n else {\n animation = animateElements(subject, keyframes, transition);\n }\n animations.push(animation);\n });\n return new GroupPlaybackControls(animations);\n}\nconst createScopedAnimate = (scope) => {\n /**\n * Implementation\n */\n function scopedAnimate(valueOrElementOrSequence, keyframes, options) {\n let animation;\n if (isSequence(valueOrElementOrSequence)) {\n animation = animateSequence(valueOrElementOrSequence, keyframes, scope);\n }\n else if (isDOMKeyframes(keyframes)) {\n animation = animateElements(valueOrElementOrSequence, keyframes, options, scope);\n }\n else {\n animation = animateSingleValue(valueOrElementOrSequence, keyframes, options);\n }\n if (scope) {\n scope.animations.push(animation);\n }\n return animation;\n }\n return scopedAnimate;\n};\nconst animate = createScopedAnimate();\n\nexport { animate, createScopedAnimate };\n","function isDOMKeyframes(keyframes) {\n return typeof keyframes === \"object\" && !Array.isArray(keyframes);\n}\n\nexport { isDOMKeyframes };\n","import { useContext, useState, useEffect } from 'react';\nimport { motionValue } from './index.mjs';\nimport { MotionConfigContext } from '../context/MotionConfigContext.mjs';\nimport { useConstant } from '../utils/use-constant.mjs';\n\n/**\n * Creates a `MotionValue` to track the state and velocity of a value.\n *\n * Usually, these are created automatically. For advanced use-cases, like use with `useTransform`, you can create `MotionValue`s externally and pass them into the animated component via the `style` prop.\n *\n * ```jsx\n * export const MyComponent = () => {\n * const scale = useMotionValue(1)\n *\n * return \n * }\n * ```\n *\n * @param initial - The initial state.\n *\n * @public\n */\nfunction useMotionValue(initial) {\n const value = useConstant(() => motionValue(initial));\n /**\n * If this motion value is being used in static mode, like on\n * the Framer canvas, force components to rerender when the motion\n * value is updated.\n */\n const { isStatic } = useContext(MotionConfigContext);\n if (isStatic) {\n const [, setLatest] = useState(initial);\n useEffect(() => value.on(\"change\", setLatest), []);\n }\n return value;\n}\n\nexport { useMotionValue };\n","import { interpolate } from './interpolate.mjs';\n\nconst isCustomValueType = (v) => {\n return v && typeof v === \"object\" && v.mix;\n};\nconst getMixer = (v) => (isCustomValueType(v) ? v.mix : undefined);\nfunction transform(...args) {\n const useImmediate = !Array.isArray(args[0]);\n const argOffset = useImmediate ? 0 : -1;\n const inputValue = args[0 + argOffset];\n const inputRange = args[1 + argOffset];\n const outputRange = args[2 + argOffset];\n const options = args[3 + argOffset];\n const interpolator = interpolate(inputRange, outputRange, {\n mixer: getMixer(outputRange[0]),\n ...options,\n });\n return useImmediate ? interpolator(inputValue) : interpolator;\n}\n\nexport { transform };\n","import { useMotionValue } from './use-motion-value.mjs';\nimport { useIsomorphicLayoutEffect } from '../utils/use-isomorphic-effect.mjs';\nimport { cancelFrame, frame } from '../frameloop/frame.mjs';\n\nfunction useCombineMotionValues(values, combineValues) {\n /**\n * Initialise the returned motion value. This remains the same between renders.\n */\n const value = useMotionValue(combineValues());\n /**\n * Create a function that will update the template motion value with the latest values.\n * This is pre-bound so whenever a motion value updates it can schedule its\n * execution in Framesync. If it's already been scheduled it won't be fired twice\n * in a single frame.\n */\n const updateValue = () => value.set(combineValues());\n /**\n * Synchronously update the motion value with the latest values during the render.\n * This ensures that within a React render, the styles applied to the DOM are up-to-date.\n */\n updateValue();\n /**\n * Subscribe to all motion values found within the template. Whenever any of them change,\n * schedule an update.\n */\n useIsomorphicLayoutEffect(() => {\n const scheduleUpdate = () => frame.update(updateValue, false, true);\n const subscriptions = values.map((v) => v.on(\"change\", scheduleUpdate));\n return () => {\n subscriptions.forEach((unsubscribe) => unsubscribe());\n cancelFrame(updateValue);\n };\n });\n return value;\n}\n\nexport { useCombineMotionValues };\n","import { transform } from '../utils/transform.mjs';\nimport { useCombineMotionValues } from './use-combine-values.mjs';\nimport { useConstant } from '../utils/use-constant.mjs';\nimport { useComputed } from './use-computed.mjs';\n\nfunction useTransform(input, inputRangeOrTransformer, outputRange, options) {\n if (typeof input === \"function\") {\n return useComputed(input);\n }\n const transformer = typeof inputRangeOrTransformer === \"function\"\n ? inputRangeOrTransformer\n : transform(inputRangeOrTransformer, outputRange, options);\n return Array.isArray(input)\n ? useListTransform(input, transformer)\n : useListTransform([input], ([latest]) => transformer(latest));\n}\nfunction useListTransform(values, transformer) {\n const latest = useConstant(() => []);\n return useCombineMotionValues(values, () => {\n latest.length = 0;\n const numValues = values.length;\n for (let i = 0; i < numValues; i++) {\n latest[i] = values[i].get();\n }\n return transformer(latest);\n });\n}\n\nexport { useTransform };\n","import { collectMotionValues } from './index.mjs';\nimport { useCombineMotionValues } from './use-combine-values.mjs';\n\nfunction useComputed(compute) {\n /**\n * Open session of collectMotionValues. Any MotionValue that calls get()\n * will be saved into this array.\n */\n collectMotionValues.current = [];\n compute();\n const value = useCombineMotionValues(collectMotionValues.current, compute);\n /**\n * Synchronously close session of collectMotionValues.\n */\n collectMotionValues.current = undefined;\n return value;\n}\n\nexport { useComputed };\n","\"use client\";\n\nimport classNames from 'classnames';\nimport * as React from 'react';\nimport PropTypes from 'prop-types';\nimport { useBootstrapPrefix } from './ThemeProvider';\nimport { jsx as _jsx } from \"react/jsx-runtime\";\nexport const propTypes = {\n /**\n * @default 'img'\n */\n bsPrefix: PropTypes.string,\n /**\n * Sets image as fluid image.\n */\n fluid: PropTypes.bool,\n /**\n * Sets image shape as rounded.\n */\n rounded: PropTypes.bool,\n /**\n * Sets image shape as circle.\n */\n roundedCircle: PropTypes.bool,\n /**\n * Sets image shape as thumbnail.\n */\n thumbnail: PropTypes.bool\n};\nconst Image = /*#__PURE__*/React.forwardRef(({\n bsPrefix,\n className,\n fluid = false,\n rounded = false,\n roundedCircle = false,\n thumbnail = false,\n ...props\n}, ref) => {\n bsPrefix = useBootstrapPrefix(bsPrefix, 'img');\n return /*#__PURE__*/_jsx(\"img\", {\n ref: ref,\n ...props,\n className: classNames(className, fluid && `${bsPrefix}-fluid`, rounded && `rounded`, roundedCircle && `rounded-circle`, thumbnail && `${bsPrefix}-thumbnail`)\n });\n});\nImage.displayName = 'Image';\nexport default Image;"],"names":["_excluded","DivStyledAsH4","divWithClassName","displayName","AlertHeading","React","_ref","ref","className","bsPrefix","as","Component","props","_objectWithoutProperties","useBootstrapPrefix","_jsx","_objectSpread","classNames","AlertLink","Anchor","Alert","uncontrolledProps","_useUncontrolled","useUncontrolled","show","closeLabel","closeVariant","children","variant","onClose","dismissible","transition","Fade","prefix","handleClose","useEventCallback","e","Transition","alert","_jsxs","role","undefined","concat","CloseButton","onClick","unmountOnExit","in","Object","assign","Link","Heading","resolveElements","elements","scope","selectorCache","_a","root","document","invariant","Boolean","current","querySelectorAll","Element","Array","from","supportsScrollTimeline","memo","window","ScrollTimeline","GroupPlaybackControls","constructor","animations","this","filter","then","onResolve","onReject","Promise","all","catch","getAll","propName","setAll","newValue","i","length","attachTimeline","timeline","cancelAll","map","animation","pause","update","prevProgress","onFrame","currentTime","progress","value","frame","cancelFrame","observeTimeline","time","duration","forEach","cancelTimeline","stop","speed","max","Math","runAll","methodName","controls","play","cancel","complete","createVisualElement","element","options","presenceContext","visualState","renderState","transform","transformOrigin","style","vars","attrs","latestValues","node","isSVGElement","SVGVisualElement","enableHardwareAcceleration","HTMLVisualElement","mount","visualElementStore","set","createGeneratorEasing","scale","arguments","generator","spring","keyframes","min","calcGeneratorDuration","maxGeneratorDuration","type","ease","next","millisecondsToSeconds","calcNextTime","prev","labels","startsWith","parseFloat","get","getEasingForSegment","easing","isEasingArray","wrap","v","rangeSize","addKeyframes","sequence","offset","startTime","endTime","keyframe","at","removeItem","eraseKeyframes","push","mix","compareByTime","a","b","getSubjectSequence","subject","sequences","has","getValueSequence","name","keyframesAsList","isArray","getValueTransition","key","isNumber","isNumberKeyframesArray","every","animateElements","elementOrSelector","numElements","visualElement","delay","animateTarget","animateSequence","animationDefinitions","defaultTransition","sequenceTransition","defaultDuration","Map","elementCache","timeLabels","prevTime","totalDuration","segment","maxDuration","resolveValueSequence","valueKeyframes","valueTransition","valueSequence","elementIndex","valueKeyframesAsList","times","defaultOffset","remainingTransition","_excluded2","calculatedDelay","numKeyframes","absoluteDelta","delta","abs","springTransition","secondsToMilliseconds","springEasing","targetTime","remainder","fillOffset","unshift","isMotionValue","subjectSequence","valueSequences","sort","valueOffset","valueEasing","definition","createAnimationsFromSequence","animateSingleValue","default","animate","valueOrElementOrSequence","isDOMKeyframes","useMotionValue","initial","useConstant","motionValue","isStatic","useContext","MotionConfigContext","setLatest","useState","useEffect","on","getMixer","isCustomValueType","useCombineMotionValues","values","combineValues","updateValue","useIsomorphicLayoutEffect","scheduleUpdate","subscriptions","unsubscribe","useTransform","input","inputRangeOrTransformer","outputRange","compute","collectMotionValues","useComputed","transformer","useImmediate","argOffset","inputValue","inputRange","interpolator","interpolate","mixer","useListTransform","latest","numValues","Image","PropTypes","fluid","rounded","roundedCircle","thumbnail"],"sourceRoot":""} \ No newline at end of file diff --git a/apps/frontend/build/static/js/78.c368a490.chunk.js b/apps/frontend/build/static/js/78.c368a490.chunk.js deleted file mode 100644 index b08d97ba..00000000 --- a/apps/frontend/build/static/js/78.c368a490.chunk.js +++ /dev/null @@ -1,2 +0,0 @@ -"use strict";(self.webpackChunkcln_application_frontend=self.webpackChunkcln_application_frontend||[]).push([[78],{3821:(e,s,t)=>{t.d(s,{A:()=>c});var a=t(2176),n=t(623),r=t(7280),i=t(4571),o=t(9786),l=t(812);const c=()=>{const e=(0,i.zy)();return(0,a.useEffect)((()=>{window.scrollTo({top:0,behavior:"smooth"})}),[e.pathname]),(0,l.jsx)(n.N,{mode:"wait",children:(0,l.jsx)(r.P.div,{initial:{y:20,opacity:0},animate:{y:0,opacity:1},exit:{y:-20,opacity:0},transition:{duration:o.xt},className:"overflow-hidden","data-testid":"route-transition",children:(0,l.jsx)(i.sv,{})},e.pathname)})}},9671:(e,s,t)=>{t.r(s),t.d(s,{default:()=>S});var a=t(4571),n=t(5675),r=t(4173),i=t(3821),o=t(7615),l=t(8286),c=t(812);const d=e=>(0,c.jsxs)("svg",{className:e.className,width:"52",height:"52",style:{minWidth:"52px"},viewBox:"0 0 62 62",fill:"none",xmlns:"http://www.w3.org/2000/svg",children:[(0,c.jsx)("circle",{cx:"30",cy:"30",r:"15",className:"stroke-primary-bg stroke-width-28"}),(0,c.jsx)("path",{d:"M27.125 29.4062C33.1656 29.4062 38.0625 27.2027 38.0625 24.4844C38.0625 21.7661 33.1656 19.5625 27.125 19.5625C21.0844 19.5625 16.1875 21.7661 16.1875 24.4844C16.1875 27.2027 21.0844 29.4062 27.125 29.4062Z",strokeWidth:"3",strokeLinecap:"round",strokeLinejoin:"round",className:"stroke-white-primary"}),(0,c.jsx)("path",{d:"M16.1875 24.4844V29.9531C16.1875 32.6738 21.082 34.875 27.125 34.875C33.168 34.875 38.0625 32.6738 38.0625 29.9531V24.4844",strokeWidth:"3",strokeLinecap:"round",strokeLinejoin:"round",className:"stroke-white-primary"}),(0,c.jsx)("path",{d:"M22.75 28.9961V34.4648",strokeWidth:"3",strokeLinecap:"round",strokeLinejoin:"round",className:"stroke-white-primary"}),(0,c.jsx)("path",{d:"M38.0625 26.2207C43.0527 26.6855 46.8125 28.668 46.8125 31.0469C46.8125 33.7676 41.918 35.9688 35.875 35.9688C33.1953 35.9688 30.7344 35.5313 28.834 34.8203",strokeWidth:"3",strokeLinecap:"round",strokeLinejoin:"round",className:"stroke-white-primary"}),(0,c.jsx)("path",{d:"M24.9375 34.7793V36.5156C24.9375 39.2363 29.832 41.4375 35.875 41.4375C41.918 41.4375 46.8125 39.2363 46.8125 36.5156V31.0469",strokeWidth:"3",strokeLinecap:"round",strokeLinejoin:"round",className:"stroke-white-primary"}),(0,c.jsx)("path",{d:"M40.25 35.5586V41.0273",strokeWidth:"3",strokeLinecap:"round",strokeLinejoin:"round",className:"stroke-white-primary"}),(0,c.jsx)("path",{d:"M31.5 28.9961V41.0273",strokeWidth:"3",strokeLinecap:"round",strokeLinejoin:"round",className:"stroke-white-primary"})]});var m=t(9082),x=t(9786),h=t(3116),f=t(7159),p=t(5588),j=t(6765);const u=()=>{const e=(0,a.Zp)(),s=(0,p.d4)(j.z0),t=(0,p.d4)(j.KU),r=(0,p.d4)(j.ge);return(0,c.jsxs)(o.A,{className:"sats-flow-info inner-box-shadow p-4 pb-3","data-testid":"satsflow-info-container",children:[(0,c.jsxs)(o.A.Header,{className:"d-flex px-1 fs-18px p-0 fw-bold text-dark",children:[(0,c.jsx)(d,{className:"me-3"}),(0,c.jsxs)(n.A,{children:[(0,c.jsx)("span",{className:"fw-bold",children:"Sats Flow"}),(0,c.jsx)("span",{className:"text-muted fs-7",children:"Track inflows and outflow events over time."})]})]}),(0,c.jsx)(o.A.Body,{className:"mt-2 p-0",children:t?(0,c.jsx)("span",{className:"h-100 d-flex justify-content-center align-items-center",children:(0,c.jsx)(l.A,{animation:"grow",variant:"primary"})}):r?(0,c.jsx)(f.A,{responseStatus:x.JT.ERROR,responseMessage:r.replace("Satsflow: ","")}):0===s.inflows_for_period_msat&&0===s.outflows_for_period_msat?(0,c.jsx)(n.A,{className:"text-light fs-6 h-75 mt-2 align-items-center justify-content-center",children:(0,c.jsxs)(n.A,{className:"d-flex align-items-center justify-content-center text-center",children:["No inbound/outbound satsflow for the period.",(0,c.jsx)("br",{}),"Choose another period or forward transactions to see details!"]})}):(0,c.jsxs)("div",{className:"d-flex flex-row justify-content-between ",children:[(0,c.jsxs)("div",{className:"d-flex flex-column align-items-start p-2",children:[(0,c.jsx)("span",{className:"fs-6 text-dark",children:"Inflow this month"}),(0,c.jsx)("span",{className:"fs-3 fw-bold positive",children:(0,c.jsx)(h.A,{value:s.inflows_for_period_msat,shorten:!1,hideUnit:!0,fromUnit:x.WU.MSATS,rootClasses:"d-inline-flex flex-column",currencyClasses:"fs-3 fw-bold positive"})})]}),(0,c.jsxs)("div",{className:"d-flex flex-column align-items-start p-2",children:[(0,c.jsx)("span",{className:"fs-6 text-dark",children:"Outflow this month"}),(0,c.jsx)("span",{className:"fs-3 fw-bold negative",children:(0,c.jsx)(h.A,{value:s.outflows_for_period_msat,shorten:!1,hideUnit:!0,fromUnit:x.WU.MSATS,rootClasses:"d-inline-flex flex-column",currencyClasses:"fs-3 fw-bold negative"})})]})]})}),(0,c.jsx)(o.A.Footer,{className:"d-flex justify-content-end px-2",children:(0,c.jsxs)("button",{tabIndex:1,type:"button",disabled:t||!!r,className:"btn-rounded bg-primary fs-6",onClick:()=>e("./satsflow"),children:["View More",(0,c.jsx)(m.P,{className:"ms-3"})]})})]})};var N=t(1416),w=t(2189);const k=e=>(0,c.jsxs)("svg",{className:e.className,width:"52",height:"52",style:{minWidth:"52px"},viewBox:"0 0 62 62",fill:"none",xmlns:"http://www.w3.org/2000/svg",children:[(0,c.jsx)("circle",{cx:"30",cy:"30",r:"15",className:"stroke-primary-bg stroke-width-28"}),(0,c.jsx)("path",{d:"M31.5 31.5V17.625",strokeWidth:"3",strokeLinecap:"round",strokeLinejoin:"round",className:"stroke-white-primary"}),(0,c.jsx)("path",{d:"M43.5106 24.5625L19.4895 38.4375",strokeWidth:"3",strokeLinecap:"round",strokeLinejoin:"round",className:"stroke-white-primary"}),(0,c.jsx)("path",{d:"M17.8563 34.0438C17.6985 33.2051 17.6211 32.3533 17.625 31.5C17.6232 28.6305 18.512 25.8311 20.1689 23.4882C21.8257 21.1453 24.1689 19.3744 26.875 18.4199V28.8262L17.8563 34.0438Z",strokeWidth:"3",strokeLinecap:"round",strokeLinejoin:"round",className:"stroke-white-primary"}),(0,c.jsx)("path",{d:"M31.5 17.625C33.9313 17.6253 36.3198 18.2644 38.4263 19.4783C40.5328 20.6922 42.2833 22.4384 43.5026 24.5418C44.7218 26.6452 45.367 29.0321 45.3734 31.4634C45.3798 33.8946 44.7473 36.2848 43.5392 38.3947C42.331 40.5045 40.5897 42.2599 38.4897 43.4849C36.3896 44.71 34.0045 45.3617 31.5733 45.3748C29.1421 45.3879 26.7501 44.762 24.637 43.5597C22.5238 42.3574 20.7637 40.6209 19.5328 38.5242",strokeWidth:"3",strokeLinecap:"round",strokeLinejoin:"round",className:"stroke-white-primary"})]});var y=t(307),v=t(5756);const b=e=>{let{route:s,unit:t}=e;return(0,c.jsx)(N.A,{children:(0,c.jsxs)(n.A,{className:"p-1",children:[(0,c.jsxs)(r.A,{xs:12,children:["Aliases: ",null===s||void 0===s?void 0:s.channel_aliases]}),(0,c.jsxs)(r.A,{xs:12,children:["Fee Collected: ",(0,y.vv)(null===s||void 0===s?void 0:s.fee_msat,x.WU.MSATS,t,!1,5,"string")]})]})})},g=()=>{var e,s,t,r;const i=(0,a.Zp)(),d=(0,p.d4)(v.T_),h=(0,p.d4)(j.z0),u=(0,p.d4)(j.bp),N=(0,p.d4)(j.JJ);return(0,c.jsxs)(o.A,{className:"volume-info inner-box-shadow p-4 pb-3","data-testid":"volume-info-container",children:[(0,c.jsxs)(o.A.Header,{className:"d-flex px-1 fs-18px p-0 fw-bold text-dark",children:[(0,c.jsx)(k,{className:"me-3"}),(0,c.jsxs)(n.A,{children:[(0,c.jsx)("span",{className:"fw-bold",children:"Volume Chart"}),(0,c.jsx)("span",{className:"text-muted fs-7",children:"Track route performance."})]})]}),(0,c.jsx)(o.A.Body,{className:"mt-2 p-0",children:u?(0,c.jsx)("span",{className:"h-100 d-flex justify-content-center align-items-center",children:(0,c.jsx)(l.A,{animation:"grow",variant:"primary"})}):N?(0,c.jsx)(f.A,{responseStatus:x.JT.ERROR,responseMessage:N.replace("Volume: ","")}):""===(null===(e=h.most_traffic_route)||void 0===e?void 0:e.channel_scids)&&""===(null===(s=h.least_traffic_route)||void 0===s?void 0:s.channel_scids)?(0,c.jsx)(n.A,{className:"text-light fs-6 h-75 mt-2 align-items-center justify-content-center",children:(0,c.jsxs)(n.A,{className:"d-flex align-items-center justify-content-center text-center",children:["No forwarding activity found.",(0,c.jsx)("br",{}),"Forward transactions to see details!"]})}):(0,c.jsxs)(c.Fragment,{children:[(0,c.jsxs)("div",{className:"d-flex flex-column align-items-start p-2 pb-0 h-50",children:[(0,c.jsx)("span",{className:"fs-6 text-dark",children:"Route with Most Traffic"}),(0,c.jsx)(w.A,{placement:"auto",delay:{show:250,hide:250},overlay:b({route:h.most_traffic_route,unit:d}),children:(0,c.jsx)("span",{className:"fs-4 fw-bold positive",children:null===(t=h.most_traffic_route)||void 0===t?void 0:t.channel_scids})})]}),(0,c.jsxs)("div",{className:"d-flex flex-column align-items-start p-2 pt-0 h-50",children:[(0,c.jsx)("span",{className:"fs-6 text-dark",children:"Route with Least Traffic"}),(0,c.jsx)(w.A,{placement:"auto",delay:{show:250,hide:250},overlay:b({route:h.least_traffic_route,unit:d}),children:(0,c.jsx)("span",{className:"fs-4 fw-bold negative",children:null===(r=h.least_traffic_route)||void 0===r?void 0:r.channel_scids})})]})]})}),(0,c.jsx)(o.A.Footer,{className:"d-flex justify-content-end px-2",children:(0,c.jsxs)("button",{tabIndex:1,type:"button",disabled:u||!!N,className:"btn-rounded bg-primary fs-6",onClick:()=>i("./volume"),children:["View More",(0,c.jsx)(m.P,{className:"ms-3"})]})})]})};var A=t(8149),_=t(9184);const C=e=>(0,c.jsxs)("svg",{className:e.className,width:"52",height:"52",style:{minWidth:"52px"},viewBox:"0 0 62 62",fill:"none",xmlns:"http://www.w3.org/2000/svg",children:[(0,c.jsx)("circle",{cx:"30",cy:"30",r:"15",className:"stroke-primary-bg stroke-width-28"}),(0,c.jsx)("path",{d:"M19.3594 43.0625V32.6562H27.4531",strokeWidth:"3",strokeLinecap:"round",strokeLinejoin:"round",className:"stroke-white-primary"}),(0,c.jsx)("path",{d:"M45.9531 43.0625H17.0469",strokeWidth:"3",strokeLinecap:"round",strokeLinejoin:"round",className:"stroke-white-primary"}),(0,c.jsx)("path",{d:"M27.4531 43.0625V25.7188H35.5469",strokeWidth:"3",strokeLinecap:"round",strokeLinejoin:"round",className:"stroke-white-primary"}),(0,c.jsx)("path",{d:"M43.6406 18.7812H35.5469V43.0625H43.6406V18.7812Z",strokeWidth:"3",strokeLinecap:"round",strokeLinejoin:"round",className:"stroke-white-primary"})]}),L=()=>{const e=(0,a.Zp)(),s=(0,p.d4)(j.z0),t=(0,p.d4)(j.KU),r=(0,p.d4)(j.ge);return(0,c.jsxs)(o.A,{className:"h-100 inner-box-shadow px-4 pt-4 pb-3","data-testid":"account-event-info-container",children:[(0,c.jsxs)(o.A.Header,{className:"d-flex px-1 fs-18px p-0 fw-bold text-dark",children:[(0,c.jsx)(C,{className:"me-3"}),(0,c.jsxs)(n.A,{children:[(0,c.jsx)("span",{className:"fw-bold",children:"Account Events"}),(0,c.jsx)("span",{className:"text-muted fs-7",children:"Track account activity at any given time."})]})]}),(0,c.jsx)(o.A.Body,{className:"mt-2 p-0",children:t?(0,c.jsx)("span",{className:"h-100 d-flex justify-content-center align-items-center",children:(0,c.jsx)(l.A,{animation:"grow",variant:"primary"})}):r?(0,c.jsx)(f.A,{responseStatus:x.JT.ERROR,responseMessage:r.replace("Satsflow: ","")}):0===s.total_invoice_received_msat&&0===s.total_payments_sent_msat&&0===s.routing_revenue_msat&&0===s.onchain_fee_msat?(0,c.jsx)(n.A,{className:"text-light fs-6 h-75 mt-2 align-items-center justify-content-center",children:(0,c.jsxs)(n.A,{className:"d-flex align-items-center justify-content-center text-center",children:["No account activity found for the period.",(0,c.jsx)("br",{}),"Choose another period or send/receive payments!"]})}):(0,c.jsxs)(c.Fragment,{children:[(0,c.jsxs)("div",{className:"d-flex flex-column align-items-stretch justify-content-between",children:[(0,c.jsxs)("div",{className:"d-flex flex-column align-items-start p-2",children:[(0,c.jsx)("span",{className:"fs-6 text-dark",children:"Total Invoice Received"}),(0,c.jsxs)("span",{className:"fs-2 fw-bold primary",children:["+",(0,c.jsx)(h.A,{value:s.total_invoice_received_msat,shorten:!1,hideUnit:!0,fromUnit:x.WU.MSATS,rootClasses:"d-inline-flex flex-column",currencyClasses:"fs-2 fw-bold primary"})]})]}),(0,c.jsxs)("div",{className:"d-flex flex-column align-items-start p-2",children:[(0,c.jsx)("span",{className:"fs-6 text-dark",children:"Total Payments Sent"}),(0,c.jsxs)("span",{className:"fs-2 fw-bold primary",children:["-",(0,c.jsx)(h.A,{value:s.total_payments_sent_msat,shorten:!1,hideUnit:!0,fromUnit:x.WU.MSATS,rootClasses:"d-inline-flex flex-column",currencyClasses:"fs-2 fw-bold primary"})]})]})]}),(0,c.jsxs)("div",{className:"d-flex flex-column align-items-stretch justify-content-between",children:[(0,c.jsxs)("div",{className:"d-flex flex-column align-items-start p-2",children:[(0,c.jsx)("span",{className:"fs-6 text-dark",children:"Routing Revenue"}),(0,c.jsxs)("span",{className:"fs-2 fw-bold primary",children:["+",(0,c.jsx)(h.A,{value:s.routing_revenue_msat,shorten:!1,hideUnit:!0,fromUnit:x.WU.MSATS,rootClasses:"d-inline-flex flex-column",currencyClasses:"fs-2 fw-bold primary"})]})]}),(0,c.jsxs)("div",{className:"d-flex flex-column align-items-start p-2",children:[(0,c.jsx)("span",{className:"fs-6 text-dark",children:"On-Chain Fee"}),(0,c.jsxs)("span",{className:"fs-2 fw-bold primary",children:["-",(0,c.jsx)(h.A,{value:s.onchain_fee_msat,shorten:!1,hideUnit:!0,fromUnit:x.WU.MSATS,rootClasses:"d-inline-flex flex-column",currencyClasses:"fs-2 fw-bold primary"})]})]})]})]})}),(0,c.jsx)(o.A.Footer,{className:"d-flex justify-content-end px-2",children:(0,c.jsxs)("button",{tabIndex:1,type:"button",disabled:t||!!r,className:"btn-rounded bg-primary fs-6",onClick:()=>e("./accountevents"),children:["View More",(0,c.jsx)(m.P,{className:"ms-3"})]})})]})};var M=t(9117),W=t(2117);const S=()=>{(0,M.N)("bkpr",W.Ay);const e=(0,p.d4)(v.bD),s=(0,a.zy)();return e.error?(0,c.jsx)(n.A,{className:"message invalid mt-10",children:(0,c.jsx)(r.A,{xs:12,className:"d-flex align-items-center justify-content-center",children:e.error})}):(0,c.jsxs)("div",{"data-testid":"bookkeeper-dashboard-container",className:"d-flex flex-column justify-content-stretch",children:[(0,c.jsx)(_.A,{}),(0,c.jsx)(i.A,{}),"/bookkeeper"===s.pathname&&(0,c.jsxs)(c.Fragment,{children:[(0,c.jsx)(n.A,{children:(0,c.jsx)(r.A,{className:"mx-1",children:(0,c.jsx)(A.A,{})})}),(0,c.jsxs)(n.A,{className:"px-3",children:[(0,c.jsx)(r.A,{xs:12,lg:6,className:"cards-container",children:(0,c.jsx)(L,{})}),(0,c.jsxs)(r.A,{xs:12,lg:6,className:"cards-container d-flex flex-column justify-content-between",children:[(0,c.jsx)(u,{}),(0,c.jsx)(g,{})]})]})]})]})}}}]); -//# sourceMappingURL=78.c368a490.chunk.js.map \ No newline at end of file diff --git a/apps/frontend/build/static/js/78.c368a490.chunk.js.map b/apps/frontend/build/static/js/78.c368a490.chunk.js.map deleted file mode 100644 index 1f270f3d..00000000 --- a/apps/frontend/build/static/js/78.c368a490.chunk.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"static/js/78.c368a490.chunk.js","mappings":"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","sources":["components/ui/RouteTransition/RouteTransition.tsx","svgs/SatsFlow.tsx","components/bookkeeper/BkprHome/SatsFlowInfo/SatsFlowInfo.tsx","svgs/VolumeChart.tsx","components/bookkeeper/BkprHome/VolumeInfo/VolumeInfo.tsx","svgs/AccountEvents.tsx","components/bookkeeper/BkprHome/AccountEventsInfo/AccountEventsInfo.tsx","components/bookkeeper/BkprHome/BkprHome.tsx"],"sourcesContent":["import { useEffect } from 'react';\nimport { AnimatePresence, motion } from 'framer-motion';\nimport { Outlet, useLocation } from 'react-router-dom';\nimport { TRANSITION_DURATION } from '../../../utilities/constants';\n\nconst RouteTransition = () => {\n const location = useLocation();\n\n useEffect(() => {\n window.scrollTo({ top: 0, behavior: 'smooth' });\n }, [location.pathname]);\n\n return (\n \n \n \n \n \n );\n};\n\nexport default RouteTransition;\n","export const SatsFlowSVG = props => {\n return (\n \n \n \n \n \n \n \n \n \n \n );\n};\n","import './SatsFlowInfo.scss';\nimport { useNavigate } from 'react-router-dom';\nimport { Card, Row, Spinner } from 'react-bootstrap';\nimport { SatsFlowSVG } from '../../../../svgs/SatsFlow';\nimport { ActionSVG } from '../../../../svgs/Action';\nimport { CallStatus, Units } from '../../../../utilities/constants';\nimport CurrencyBox from '../../../shared/CurrencyBox/CurrencyBox';\n\nimport StatusAlert from '../../../shared/StatusAlert/StatusAlert';\nimport { useSelector } from 'react-redux';\nimport { selectIsSatsFlowLoading, selectSatsFlowError, selectSummary } from '../../../../store/bkprSelectors';\n\nconst SatsFlowInfo = () => {\n const navigate = useNavigate();\n const bkprSummary = useSelector(selectSummary);\n const satsFlowLoading = useSelector(selectIsSatsFlowLoading);\n const satsFlowError = useSelector(selectSatsFlowError);\n\n return (\n \n \n \n \n Sats Flow\n Track inflows and outflow events over time.\n \n \n \n {satsFlowLoading ?\n \n \n \n :\n satsFlowError ?\n \n :\n bkprSummary.inflows_for_period_msat === 0 && bkprSummary.outflows_for_period_msat === 0 ?\n \n \n No inbound/outbound satsflow for the period.
Choose another period or forward transactions to see details!\n
\n
\n :\n
\n
\n Inflow this month\n \n \n \n
\n
\n Outflow this month\n \n \n \n
\n
\n }\n
\n \n navigate('./satsflow')}\n >\n View More\n \n \n \n
\n\n );\n};\n\nexport default SatsFlowInfo;\n","export const VolumeChartSVG = props => {\n return (\n \n \n \n \n \n \n \n );\n};\n","import './VolumeInfo.scss';\nimport { useNavigate } from 'react-router-dom';\nimport { Card, Col, OverlayTrigger, Row, Spinner, Tooltip } from 'react-bootstrap';\nimport { ActionSVG } from '../../../../svgs/Action';\nimport { VolumeChartSVG } from '../../../../svgs/VolumeChart';\nimport { formatCurrency } from '../../../../utilities/data-formatters';\nimport { CallStatus, Units } from '../../../../utilities/constants';\n\nimport StatusAlert from '../../../shared/StatusAlert/StatusAlert';\nimport { useSelector } from 'react-redux';\nimport { selectIsVolumeLoading, selectSummary, selectVolumeError } from '../../../../store/bkprSelectors';\nimport { selectUIConfigUnit } from '../../../../store/rootSelectors';\n\nconst SummaryRouteTooltip = ({ route, unit }: any) => {\n return (\n \n \n Aliases: {route?.channel_aliases}\n Fee Collected: {formatCurrency(route?.fee_msat, Units.MSATS, unit, false, 5, 'string')}\n \n \n );\n};\n\nconst VolumeInfo = () => {\n const navigate = useNavigate();\n const uiConfigUnit = useSelector(selectUIConfigUnit);\n const bkprSummary = useSelector(selectSummary);\n const volumeLoading = useSelector(selectIsVolumeLoading);\n const volumeError = useSelector(selectVolumeError);\n\n return (\n \n \n \n \n Volume Chart\n Track route performance.\n \n \n \n {volumeLoading ?\n \n \n \n :\n volumeError ?\n \n :\n bkprSummary.most_traffic_route?.channel_scids === '' && bkprSummary.least_traffic_route?.channel_scids === '' ?\n \n \n No forwarding activity found.
Forward transactions to see details!\n
\n
\n :\n <>\n
\n Route with Most Traffic\n \n {bkprSummary.most_traffic_route?.channel_scids}\n \n
\n
\n Route with Least Traffic\n \n {bkprSummary.least_traffic_route?.channel_scids}\n \n
\n \n }\n
\n \n navigate('./volume')}\n >\n View More\n \n \n \n
\n );\n};\n\nexport default VolumeInfo;\n","export const AccountEventsSVG = props => {\n return (\n \n \n \n \n \n \n \n );\n};\n","import './AccountEventsInfo.scss';\nimport { useNavigate } from 'react-router-dom';\nimport { Card, Row, Spinner } from 'react-bootstrap';\nimport { ActionSVG } from '../../../../svgs/Action';\nimport { AccountEventsSVG } from '../../../../svgs/AccountEvents';\nimport { CallStatus, Units } from '../../../../utilities/constants';\nimport CurrencyBox from '../../../shared/CurrencyBox/CurrencyBox';\nimport StatusAlert from '../../../shared/StatusAlert/StatusAlert';\nimport { useSelector } from 'react-redux';\nimport { selectIsSatsFlowLoading, selectSatsFlowError, selectSummary } from '../../../../store/bkprSelectors';\n\nconst AccountEventsInfo = () => {\n const navigate = useNavigate();\n const bkprSummary = useSelector(selectSummary);\n const satsFlowLoading = useSelector(selectIsSatsFlowLoading);\n const satsFlowError = useSelector(selectSatsFlowError);\n\n return (\n \n \n \n \n Account Events\n Track account activity at any given time.\n \n \n \n {satsFlowLoading ?\n \n \n \n :\n satsFlowError ?\n \n :\n bkprSummary.total_invoice_received_msat === 0 && bkprSummary.total_payments_sent_msat === 0 && \n bkprSummary.routing_revenue_msat === 0 && bkprSummary.onchain_fee_msat === 0 ?\n \n \n No account activity found for the period.
Choose another period or send/receive payments!\n
\n
\n :\n <>\n
\n
\n Total Invoice Received\n +\n
\n
\n Total Payments Sent\n -\n
\n
\n
\n
\n Routing Revenue\n +\n
\n
\n On-Chain Fee\n -\n
\n
\n \n }\n
\n \n navigate('./accountevents')}\n >\n View More\n \n \n \n
\n );\n};\n\nexport default AccountEventsInfo;\n","import './BkprHome.scss';\nimport { useLocation } from 'react-router-dom';\nimport { Row, Col } from 'react-bootstrap';\nimport RouteTransition from '../../ui/RouteTransition/RouteTransition';\nimport SatsFlowInfo from './SatsFlowInfo/SatsFlowInfo';\nimport VolumeInfo from './VolumeInfo/VolumeInfo';\nimport Overview from '../../cln/Overview/Overview';\nimport Header from '../../ui/Header/Header';\nimport AccountEventsInfo from './AccountEventsInfo/AccountEventsInfo';\nimport { useSelector } from 'react-redux';\nimport { useInjectReducer } from '../../../hooks/use-injectreducer';\nimport bkprReducer from '../../../store/bkprSlice';\nimport { selectNodeInfo } from '../../../store/rootSelectors';\n\nconst Bookkeeper = () => {\n useInjectReducer('bkpr', bkprReducer);\n const nodeInfo = useSelector(selectNodeInfo);\n const location = useLocation();\n \n if (nodeInfo.error) {\n return (\n \n \n {nodeInfo.error}\n \n \n );\n }\n\n return (\n
\n
\n \n {location.pathname === '/bookkeeper' && (\n <>\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n )}\n
\n );\n};\n\nexport default Bookkeeper;\n"],"names":["RouteTransition","location","useLocation","useEffect","window","scrollTo","top","behavior","pathname","_jsx","AnimatePresence","mode","children","motion","div","initial","y","opacity","animate","exit","transition","duration","TRANSITION_DURATION","className","Outlet","SatsFlowSVG","props","_jsxs","width","height","style","minWidth","viewBox","fill","xmlns","cx","cy","r","d","strokeWidth","strokeLinecap","strokeLinejoin","SatsFlowInfo","navigate","useNavigate","bkprSummary","useSelector","selectSummary","satsFlowLoading","selectIsSatsFlowLoading","satsFlowError","selectSatsFlowError","Card","Header","Row","Body","Spinner","animation","variant","StatusAlert","responseStatus","CallStatus","ERROR","responseMessage","replace","inflows_for_period_msat","outflows_for_period_msat","CurrencyBox","value","shorten","hideUnit","fromUnit","Units","MSATS","rootClasses","currencyClasses","Footer","tabIndex","type","disabled","onClick","ActionSVG","VolumeChartSVG","SummaryRouteTooltip","_ref","route","unit","Tooltip","Col","xs","channel_aliases","formatCurrency","fee_msat","VolumeInfo","_bkprSummary$most_tra","_bkprSummary$least_tr","_bkprSummary$most_tra2","_bkprSummary$least_tr2","uiConfigUnit","selectUIConfigUnit","volumeLoading","selectIsVolumeLoading","volumeError","selectVolumeError","most_traffic_route","channel_scids","least_traffic_route","_Fragment","OverlayTrigger","placement","delay","show","hide","overlay","AccountEventsSVG","AccountEventsInfo","total_invoice_received_msat","total_payments_sent_msat","routing_revenue_msat","onchain_fee_msat","Bookkeeper","useInjectReducer","bkprReducer","nodeInfo","selectNodeInfo","error","Overview","lg"],"sourceRoot":""} \ No newline at end of file diff --git a/apps/frontend/build/static/js/813.cdbe58bb.chunk.js b/apps/frontend/build/static/js/813.cdbe58bb.chunk.js deleted file mode 100644 index 68ee3576..00000000 --- a/apps/frontend/build/static/js/813.cdbe58bb.chunk.js +++ /dev/null @@ -1,3 +0,0 @@ -/*! For license information please see 813.cdbe58bb.chunk.js.LICENSE.txt */ -"use strict";(self.webpackChunkcln_application_frontend=self.webpackChunkcln_application_frontend||[]).push([[813],{3647:(t,n,e)=>{function a(t,n,e){return(n=function(t){var n=function(t,n){if("object"!=typeof t||!t)return t;var e=t[Symbol.toPrimitive];if(void 0!==e){var a=e.call(t,n||"default");if("object"!=typeof a)return a;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===n?String:Number)(t)}(t,"string");return"symbol"==typeof n?n:n+""}(n))in t?Object.defineProperty(t,n,{value:e,enumerable:!0,configurable:!0,writable:!0}):t[n]=e,t}function r(t,n){var e=Object.keys(t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(t);n&&(a=a.filter((function(n){return Object.getOwnPropertyDescriptor(t,n).enumerable}))),e.push.apply(e,a)}return e}function o(t){for(var n=1;nDe});const i=()=>{};let s={},l={},c=null,f={mark:i,measure:i};try{"undefined"!==typeof window&&(s=window),"undefined"!==typeof document&&(l=document),"undefined"!==typeof MutationObserver&&(c=MutationObserver),"undefined"!==typeof performance&&(f=performance)}catch(Le){}const{userAgent:u=""}=s.navigator||{},d=s,m=l,p=c,h=f,g=(d.document,!!m.documentElement&&!!m.head&&"function"===typeof m.addEventListener&&"function"===typeof m.createElement),b=~u.indexOf("MSIE")||~u.indexOf("Trident/");var y={classic:{fa:"solid",fas:"solid","fa-solid":"solid",far:"regular","fa-regular":"regular",fal:"light","fa-light":"light",fat:"thin","fa-thin":"thin",fab:"brands","fa-brands":"brands"},duotone:{fa:"solid",fad:"solid","fa-solid":"solid","fa-duotone":"solid",fadr:"regular","fa-regular":"regular",fadl:"light","fa-light":"light",fadt:"thin","fa-thin":"thin"},sharp:{fa:"solid",fass:"solid","fa-solid":"solid",fasr:"regular","fa-regular":"regular",fasl:"light","fa-light":"light",fast:"thin","fa-thin":"thin"},"sharp-duotone":{fa:"solid",fasds:"solid","fa-solid":"solid",fasdr:"regular","fa-regular":"regular",fasdl:"light","fa-light":"light",fasdt:"thin","fa-thin":"thin"}},v=["fa-classic","fa-duotone","fa-sharp","fa-sharp-duotone"],x="classic",k="duotone",w=[x,k,"sharp","sharp-duotone"],A=new Map([["classic",{defaultShortPrefixId:"fas",defaultStyleId:"solid",styleIds:["solid","regular","light","thin","brands"],futureStyleIds:[],defaultFontWeight:900}],["sharp",{defaultShortPrefixId:"fass",defaultStyleId:"solid",styleIds:["solid","regular","light","thin"],futureStyleIds:[],defaultFontWeight:900}],["duotone",{defaultShortPrefixId:"fad",defaultStyleId:"solid",styleIds:["solid","regular","light","thin"],futureStyleIds:[],defaultFontWeight:900}],["sharp-duotone",{defaultShortPrefixId:"fasds",defaultStyleId:"solid",styleIds:["solid","regular","light","thin"],futureStyleIds:[],defaultFontWeight:900}]]),O=["fak","fa-kit","fakd","fa-kit-duotone"],P={fak:"kit","fa-kit":"kit"},N={fakd:"kit-duotone","fa-kit-duotone":"kit-duotone"},S=["fak","fakd"],C={kit:"fak"},j={"kit-duotone":"fakd"},E={GROUP:"duotone-group",SWAP_OPACITY:"swap-opacity",PRIMARY:"primary",SECONDARY:"secondary"},I=["fak","fa-kit","fakd","fa-kit-duotone"],z={classic:{fab:"fa-brands",fad:"fa-duotone",fal:"fa-light",far:"fa-regular",fas:"fa-solid",fat:"fa-thin"},duotone:{fadr:"fa-regular",fadl:"fa-light",fadt:"fa-thin"},sharp:{fass:"fa-solid",fasr:"fa-regular",fasl:"fa-light",fast:"fa-thin"},"sharp-duotone":{fasds:"fa-solid",fasdr:"fa-regular",fasdl:"fa-light",fasdt:"fa-thin"}},M=["fa","fas","far","fal","fat","fad","fadr","fadl","fadt","fab","fass","fasr","fasl","fast","fasds","fasdr","fasdl","fasdt","fa-classic","fa-duotone","fa-sharp","fa-sharp-duotone","fa-solid","fa-regular","fa-light","fa-thin","fa-duotone","fa-brands"],F=[1,2,3,4,5,6,7,8,9,10],D=F.concat([11,12,13,14,15,16,17,18,19,20]),R=[...Object.keys({classic:["fas","far","fal","fat","fad"],duotone:["fadr","fadl","fadt"],sharp:["fass","fasr","fasl","fast"],"sharp-duotone":["fasds","fasdr","fasdl","fasdt"]}),"solid","regular","light","thin","duotone","brands","2xs","xs","sm","lg","xl","2xl","beat","border","fade","beat-fade","bounce","flip-both","flip-horizontal","flip-vertical","flip","fw","inverse","layers-counter","layers-text","layers","li","pull-left","pull-right","pulse","rotate-180","rotate-270","rotate-90","rotate-by","shake","spin-pulse","spin-reverse","spin","stack-1x","stack-2x","stack","ul",E.GROUP,E.SWAP_OPACITY,E.PRIMARY,E.SECONDARY].concat(F.map((t=>"".concat(t,"x")))).concat(D.map((t=>"w-".concat(t))));const L="___FONT_AWESOME___",T=16,Y="svg-inline--fa",W="data-fa-i2svg",_="data-fa-pseudo-element",H="data-prefix",U="data-icon",B="fontawesome-i2svg",X=["HTML","HEAD","STYLE","SCRIPT"],q=(()=>{try{return!0}catch(t){return!1}})();function V(t){return new Proxy(t,{get:(t,n)=>n in t?t[n]:t[x]})}const G=o({},y);G[x]=o(o(o(o({},{"fa-duotone":"duotone"}),y[x]),P),N);const K=V(G),$=o({},{classic:{solid:"fas",regular:"far",light:"fal",thin:"fat",brands:"fab"},duotone:{solid:"fad",regular:"fadr",light:"fadl",thin:"fadt"},sharp:{solid:"fass",regular:"fasr",light:"fasl",thin:"fast"},"sharp-duotone":{solid:"fasds",regular:"fasdr",light:"fasdl",thin:"fasdt"}});$[x]=o(o(o(o({},{duotone:"fad"}),$[x]),C),j);const J=V($),Q=o({},z);Q[x]=o(o({},Q[x]),{fak:"fa-kit"});const Z=V(Q),tt=o({},{classic:{"fa-brands":"fab","fa-duotone":"fad","fa-light":"fal","fa-regular":"far","fa-solid":"fas","fa-thin":"fat"},duotone:{"fa-regular":"fadr","fa-light":"fadl","fa-thin":"fadt"},sharp:{"fa-solid":"fass","fa-regular":"fasr","fa-light":"fasl","fa-thin":"fast"},"sharp-duotone":{"fa-solid":"fasds","fa-regular":"fasdr","fa-light":"fasdl","fa-thin":"fasdt"}});tt[x]=o(o({},tt[x]),{"fa-kit":"fak"});V(tt);const nt=/fa(s|r|l|t|d|dr|dl|dt|b|k|kd|ss|sr|sl|st|sds|sdr|sdl|sdt)?[\-\ ]/,et="fa-layers-text",at=/Font ?Awesome ?([56 ]*)(Solid|Regular|Light|Thin|Duotone|Brands|Free|Pro|Sharp Duotone|Sharp|Kit)?.*/i,rt=(V(o({},{classic:{900:"fas",400:"far",normal:"far",300:"fal",100:"fat"},duotone:{900:"fad",400:"fadr",300:"fadl",100:"fadt"},sharp:{900:"fass",400:"fasr",300:"fasl",100:"fast"},"sharp-duotone":{900:"fasds",400:"fasdr",300:"fasdl",100:"fasdt"}})),["class","data-prefix","data-icon","data-fa-transform","data-fa-mask"]),ot={GROUP:"duotone-group",SWAP_OPACITY:"swap-opacity",PRIMARY:"primary",SECONDARY:"secondary"},it=["kit",...R],st=d.FontAwesomeConfig||{};if(m&&"function"===typeof m.querySelector){[["data-family-prefix","familyPrefix"],["data-css-prefix","cssPrefix"],["data-family-default","familyDefault"],["data-style-default","styleDefault"],["data-replacement-class","replacementClass"],["data-auto-replace-svg","autoReplaceSvg"],["data-auto-add-css","autoAddCss"],["data-auto-a11y","autoA11y"],["data-search-pseudo-elements","searchPseudoElements"],["data-observe-mutations","observeMutations"],["data-mutate-approach","mutateApproach"],["data-keep-original-source","keepOriginalSource"],["data-measure-performance","measurePerformance"],["data-show-missing-icons","showMissingIcons"]].forEach((t=>{let[n,e]=t;const a=function(t){return""===t||"false"!==t&&("true"===t||t)}(function(t){var n=m.querySelector("script["+t+"]");if(n)return n.getAttribute(t)}(n));void 0!==a&&null!==a&&(st[e]=a)}))}const lt={styleDefault:"solid",familyDefault:x,cssPrefix:"fa",replacementClass:Y,autoReplaceSvg:!0,autoAddCss:!0,autoA11y:!0,searchPseudoElements:!1,observeMutations:!0,mutateApproach:"async",keepOriginalSource:!0,measurePerformance:!1,showMissingIcons:!0};st.familyPrefix&&(st.cssPrefix=st.familyPrefix);const ct=o(o({},lt),st);ct.autoReplaceSvg||(ct.observeMutations=!1);const ft={};Object.keys(lt).forEach((t=>{Object.defineProperty(ft,t,{enumerable:!0,set:function(n){ct[t]=n,ut.forEach((t=>t(ft)))},get:function(){return ct[t]}})})),Object.defineProperty(ft,"familyPrefix",{enumerable:!0,set:function(t){ct.cssPrefix=t,ut.forEach((t=>t(ft)))},get:function(){return ct.cssPrefix}}),d.FontAwesomeConfig=ft;const ut=[];const dt=T,mt={size:16,x:0,y:0,rotate:0,flipX:!1,flipY:!1};function pt(){let t=12,n="";for(;t-- >0;)n+="0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ"[62*Math.random()|0];return n}function ht(t){const n=[];for(let e=(t||[]).length>>>0;e--;)n[e]=t[e];return n}function gt(t){return t.classList?ht(t.classList):(t.getAttribute("class")||"").split(" ").filter((t=>t))}function bt(t){return"".concat(t).replace(/&/g,"&").replace(/"/g,""").replace(/'/g,"'").replace(//g,">")}function yt(t){return Object.keys(t||{}).reduce(((n,e)=>n+"".concat(e,": ").concat(t[e].trim(),";")),"")}function vt(t){return t.size!==mt.size||t.x!==mt.x||t.y!==mt.y||t.rotate!==mt.rotate||t.flipX||t.flipY}function xt(){const t="fa",n=Y,e=ft.cssPrefix,a=ft.replacementClass;let r=':root, :host {\n --fa-font-solid: normal 900 1em/1 "Font Awesome 6 Free";\n --fa-font-regular: normal 400 1em/1 "Font Awesome 6 Free";\n --fa-font-light: normal 300 1em/1 "Font Awesome 6 Pro";\n --fa-font-thin: normal 100 1em/1 "Font Awesome 6 Pro";\n --fa-font-duotone: normal 900 1em/1 "Font Awesome 6 Duotone";\n --fa-font-duotone-regular: normal 400 1em/1 "Font Awesome 6 Duotone";\n --fa-font-duotone-light: normal 300 1em/1 "Font Awesome 6 Duotone";\n --fa-font-duotone-thin: normal 100 1em/1 "Font Awesome 6 Duotone";\n --fa-font-brands: normal 400 1em/1 "Font Awesome 6 Brands";\n --fa-font-sharp-solid: normal 900 1em/1 "Font Awesome 6 Sharp";\n --fa-font-sharp-regular: normal 400 1em/1 "Font Awesome 6 Sharp";\n --fa-font-sharp-light: normal 300 1em/1 "Font Awesome 6 Sharp";\n --fa-font-sharp-thin: normal 100 1em/1 "Font Awesome 6 Sharp";\n --fa-font-sharp-duotone-solid: normal 900 1em/1 "Font Awesome 6 Sharp Duotone";\n --fa-font-sharp-duotone-regular: normal 400 1em/1 "Font Awesome 6 Sharp Duotone";\n --fa-font-sharp-duotone-light: normal 300 1em/1 "Font Awesome 6 Sharp Duotone";\n --fa-font-sharp-duotone-thin: normal 100 1em/1 "Font Awesome 6 Sharp Duotone";\n}\n\nsvg:not(:root).svg-inline--fa, svg:not(:host).svg-inline--fa {\n overflow: visible;\n box-sizing: content-box;\n}\n\n.svg-inline--fa {\n display: var(--fa-display, inline-block);\n height: 1em;\n overflow: visible;\n vertical-align: -0.125em;\n}\n.svg-inline--fa.fa-2xs {\n vertical-align: 0.1em;\n}\n.svg-inline--fa.fa-xs {\n vertical-align: 0em;\n}\n.svg-inline--fa.fa-sm {\n vertical-align: -0.0714285705em;\n}\n.svg-inline--fa.fa-lg {\n vertical-align: -0.2em;\n}\n.svg-inline--fa.fa-xl {\n vertical-align: -0.25em;\n}\n.svg-inline--fa.fa-2xl {\n vertical-align: -0.3125em;\n}\n.svg-inline--fa.fa-pull-left {\n margin-right: var(--fa-pull-margin, 0.3em);\n width: auto;\n}\n.svg-inline--fa.fa-pull-right {\n margin-left: var(--fa-pull-margin, 0.3em);\n width: auto;\n}\n.svg-inline--fa.fa-li {\n width: var(--fa-li-width, 2em);\n top: 0.25em;\n}\n.svg-inline--fa.fa-fw {\n width: var(--fa-fw-width, 1.25em);\n}\n\n.fa-layers svg.svg-inline--fa {\n bottom: 0;\n left: 0;\n margin: auto;\n position: absolute;\n right: 0;\n top: 0;\n}\n\n.fa-layers-counter, .fa-layers-text {\n display: inline-block;\n position: absolute;\n text-align: center;\n}\n\n.fa-layers {\n display: inline-block;\n height: 1em;\n position: relative;\n text-align: center;\n vertical-align: -0.125em;\n width: 1em;\n}\n.fa-layers svg.svg-inline--fa {\n transform-origin: center center;\n}\n\n.fa-layers-text {\n left: 50%;\n top: 50%;\n transform: translate(-50%, -50%);\n transform-origin: center center;\n}\n\n.fa-layers-counter {\n background-color: var(--fa-counter-background-color, #ff253a);\n border-radius: var(--fa-counter-border-radius, 1em);\n box-sizing: border-box;\n color: var(--fa-inverse, #fff);\n line-height: var(--fa-counter-line-height, 1);\n max-width: var(--fa-counter-max-width, 5em);\n min-width: var(--fa-counter-min-width, 1.5em);\n overflow: hidden;\n padding: var(--fa-counter-padding, 0.25em 0.5em);\n right: var(--fa-right, 0);\n text-overflow: ellipsis;\n top: var(--fa-top, 0);\n transform: scale(var(--fa-counter-scale, 0.25));\n transform-origin: top right;\n}\n\n.fa-layers-bottom-right {\n bottom: var(--fa-bottom, 0);\n right: var(--fa-right, 0);\n top: auto;\n transform: scale(var(--fa-layers-scale, 0.25));\n transform-origin: bottom right;\n}\n\n.fa-layers-bottom-left {\n bottom: var(--fa-bottom, 0);\n left: var(--fa-left, 0);\n right: auto;\n top: auto;\n transform: scale(var(--fa-layers-scale, 0.25));\n transform-origin: bottom left;\n}\n\n.fa-layers-top-right {\n top: var(--fa-top, 0);\n right: var(--fa-right, 0);\n transform: scale(var(--fa-layers-scale, 0.25));\n transform-origin: top right;\n}\n\n.fa-layers-top-left {\n left: var(--fa-left, 0);\n right: auto;\n top: var(--fa-top, 0);\n transform: scale(var(--fa-layers-scale, 0.25));\n transform-origin: top left;\n}\n\n.fa-1x {\n font-size: 1em;\n}\n\n.fa-2x {\n font-size: 2em;\n}\n\n.fa-3x {\n font-size: 3em;\n}\n\n.fa-4x {\n font-size: 4em;\n}\n\n.fa-5x {\n font-size: 5em;\n}\n\n.fa-6x {\n font-size: 6em;\n}\n\n.fa-7x {\n font-size: 7em;\n}\n\n.fa-8x {\n font-size: 8em;\n}\n\n.fa-9x {\n font-size: 9em;\n}\n\n.fa-10x {\n font-size: 10em;\n}\n\n.fa-2xs {\n font-size: 0.625em;\n line-height: 0.1em;\n vertical-align: 0.225em;\n}\n\n.fa-xs {\n font-size: 0.75em;\n line-height: 0.0833333337em;\n vertical-align: 0.125em;\n}\n\n.fa-sm {\n font-size: 0.875em;\n line-height: 0.0714285718em;\n vertical-align: 0.0535714295em;\n}\n\n.fa-lg {\n font-size: 1.25em;\n line-height: 0.05em;\n vertical-align: -0.075em;\n}\n\n.fa-xl {\n font-size: 1.5em;\n line-height: 0.0416666682em;\n vertical-align: -0.125em;\n}\n\n.fa-2xl {\n font-size: 2em;\n line-height: 0.03125em;\n vertical-align: -0.1875em;\n}\n\n.fa-fw {\n text-align: center;\n width: 1.25em;\n}\n\n.fa-ul {\n list-style-type: none;\n margin-left: var(--fa-li-margin, 2.5em);\n padding-left: 0;\n}\n.fa-ul > li {\n position: relative;\n}\n\n.fa-li {\n left: calc(-1 * var(--fa-li-width, 2em));\n position: absolute;\n text-align: center;\n width: var(--fa-li-width, 2em);\n line-height: inherit;\n}\n\n.fa-border {\n border-color: var(--fa-border-color, #eee);\n border-radius: var(--fa-border-radius, 0.1em);\n border-style: var(--fa-border-style, solid);\n border-width: var(--fa-border-width, 0.08em);\n padding: var(--fa-border-padding, 0.2em 0.25em 0.15em);\n}\n\n.fa-pull-left {\n float: left;\n margin-right: var(--fa-pull-margin, 0.3em);\n}\n\n.fa-pull-right {\n float: right;\n margin-left: var(--fa-pull-margin, 0.3em);\n}\n\n.fa-beat {\n animation-name: fa-beat;\n animation-delay: var(--fa-animation-delay, 0s);\n animation-direction: var(--fa-animation-direction, normal);\n animation-duration: var(--fa-animation-duration, 1s);\n animation-iteration-count: var(--fa-animation-iteration-count, infinite);\n animation-timing-function: var(--fa-animation-timing, ease-in-out);\n}\n\n.fa-bounce {\n animation-name: fa-bounce;\n animation-delay: var(--fa-animation-delay, 0s);\n animation-direction: var(--fa-animation-direction, normal);\n animation-duration: var(--fa-animation-duration, 1s);\n animation-iteration-count: var(--fa-animation-iteration-count, infinite);\n animation-timing-function: var(--fa-animation-timing, cubic-bezier(0.28, 0.84, 0.42, 1));\n}\n\n.fa-fade {\n animation-name: fa-fade;\n animation-delay: var(--fa-animation-delay, 0s);\n animation-direction: var(--fa-animation-direction, normal);\n animation-duration: var(--fa-animation-duration, 1s);\n animation-iteration-count: var(--fa-animation-iteration-count, infinite);\n animation-timing-function: var(--fa-animation-timing, cubic-bezier(0.4, 0, 0.6, 1));\n}\n\n.fa-beat-fade {\n animation-name: fa-beat-fade;\n animation-delay: var(--fa-animation-delay, 0s);\n animation-direction: var(--fa-animation-direction, normal);\n animation-duration: var(--fa-animation-duration, 1s);\n animation-iteration-count: var(--fa-animation-iteration-count, infinite);\n animation-timing-function: var(--fa-animation-timing, cubic-bezier(0.4, 0, 0.6, 1));\n}\n\n.fa-flip {\n animation-name: fa-flip;\n animation-delay: var(--fa-animation-delay, 0s);\n animation-direction: var(--fa-animation-direction, normal);\n animation-duration: var(--fa-animation-duration, 1s);\n animation-iteration-count: var(--fa-animation-iteration-count, infinite);\n animation-timing-function: var(--fa-animation-timing, ease-in-out);\n}\n\n.fa-shake {\n animation-name: fa-shake;\n animation-delay: var(--fa-animation-delay, 0s);\n animation-direction: var(--fa-animation-direction, normal);\n animation-duration: var(--fa-animation-duration, 1s);\n animation-iteration-count: var(--fa-animation-iteration-count, infinite);\n animation-timing-function: var(--fa-animation-timing, linear);\n}\n\n.fa-spin {\n animation-name: fa-spin;\n animation-delay: var(--fa-animation-delay, 0s);\n animation-direction: var(--fa-animation-direction, normal);\n animation-duration: var(--fa-animation-duration, 2s);\n animation-iteration-count: var(--fa-animation-iteration-count, infinite);\n animation-timing-function: var(--fa-animation-timing, linear);\n}\n\n.fa-spin-reverse {\n --fa-animation-direction: reverse;\n}\n\n.fa-pulse,\n.fa-spin-pulse {\n animation-name: fa-spin;\n animation-direction: var(--fa-animation-direction, normal);\n animation-duration: var(--fa-animation-duration, 1s);\n animation-iteration-count: var(--fa-animation-iteration-count, infinite);\n animation-timing-function: var(--fa-animation-timing, steps(8));\n}\n\n@media (prefers-reduced-motion: reduce) {\n .fa-beat,\n.fa-bounce,\n.fa-fade,\n.fa-beat-fade,\n.fa-flip,\n.fa-pulse,\n.fa-shake,\n.fa-spin,\n.fa-spin-pulse {\n animation-delay: -1ms;\n animation-duration: 1ms;\n animation-iteration-count: 1;\n transition-delay: 0s;\n transition-duration: 0s;\n }\n}\n@keyframes fa-beat {\n 0%, 90% {\n transform: scale(1);\n }\n 45% {\n transform: scale(var(--fa-beat-scale, 1.25));\n }\n}\n@keyframes fa-bounce {\n 0% {\n transform: scale(1, 1) translateY(0);\n }\n 10% {\n transform: scale(var(--fa-bounce-start-scale-x, 1.1), var(--fa-bounce-start-scale-y, 0.9)) translateY(0);\n }\n 30% {\n transform: scale(var(--fa-bounce-jump-scale-x, 0.9), var(--fa-bounce-jump-scale-y, 1.1)) translateY(var(--fa-bounce-height, -0.5em));\n }\n 50% {\n transform: scale(var(--fa-bounce-land-scale-x, 1.05), var(--fa-bounce-land-scale-y, 0.95)) translateY(0);\n }\n 57% {\n transform: scale(1, 1) translateY(var(--fa-bounce-rebound, -0.125em));\n }\n 64% {\n transform: scale(1, 1) translateY(0);\n }\n 100% {\n transform: scale(1, 1) translateY(0);\n }\n}\n@keyframes fa-fade {\n 50% {\n opacity: var(--fa-fade-opacity, 0.4);\n }\n}\n@keyframes fa-beat-fade {\n 0%, 100% {\n opacity: var(--fa-beat-fade-opacity, 0.4);\n transform: scale(1);\n }\n 50% {\n opacity: 1;\n transform: scale(var(--fa-beat-fade-scale, 1.125));\n }\n}\n@keyframes fa-flip {\n 50% {\n transform: rotate3d(var(--fa-flip-x, 0), var(--fa-flip-y, 1), var(--fa-flip-z, 0), var(--fa-flip-angle, -180deg));\n }\n}\n@keyframes fa-shake {\n 0% {\n transform: rotate(-15deg);\n }\n 4% {\n transform: rotate(15deg);\n }\n 8%, 24% {\n transform: rotate(-18deg);\n }\n 12%, 28% {\n transform: rotate(18deg);\n }\n 16% {\n transform: rotate(-22deg);\n }\n 20% {\n transform: rotate(22deg);\n }\n 32% {\n transform: rotate(-12deg);\n }\n 36% {\n transform: rotate(12deg);\n }\n 40%, 100% {\n transform: rotate(0deg);\n }\n}\n@keyframes fa-spin {\n 0% {\n transform: rotate(0deg);\n }\n 100% {\n transform: rotate(360deg);\n }\n}\n.fa-rotate-90 {\n transform: rotate(90deg);\n}\n\n.fa-rotate-180 {\n transform: rotate(180deg);\n}\n\n.fa-rotate-270 {\n transform: rotate(270deg);\n}\n\n.fa-flip-horizontal {\n transform: scale(-1, 1);\n}\n\n.fa-flip-vertical {\n transform: scale(1, -1);\n}\n\n.fa-flip-both,\n.fa-flip-horizontal.fa-flip-vertical {\n transform: scale(-1, -1);\n}\n\n.fa-rotate-by {\n transform: rotate(var(--fa-rotate-angle, 0));\n}\n\n.fa-stack {\n display: inline-block;\n vertical-align: middle;\n height: 2em;\n position: relative;\n width: 2.5em;\n}\n\n.fa-stack-1x,\n.fa-stack-2x {\n bottom: 0;\n left: 0;\n margin: auto;\n position: absolute;\n right: 0;\n top: 0;\n z-index: var(--fa-stack-z-index, auto);\n}\n\n.svg-inline--fa.fa-stack-1x {\n height: 1em;\n width: 1.25em;\n}\n.svg-inline--fa.fa-stack-2x {\n height: 2em;\n width: 2.5em;\n}\n\n.fa-inverse {\n color: var(--fa-inverse, #fff);\n}\n\n.sr-only,\n.fa-sr-only {\n position: absolute;\n width: 1px;\n height: 1px;\n padding: 0;\n margin: -1px;\n overflow: hidden;\n clip: rect(0, 0, 0, 0);\n white-space: nowrap;\n border-width: 0;\n}\n\n.sr-only-focusable:not(:focus),\n.fa-sr-only-focusable:not(:focus) {\n position: absolute;\n width: 1px;\n height: 1px;\n padding: 0;\n margin: -1px;\n overflow: hidden;\n clip: rect(0, 0, 0, 0);\n white-space: nowrap;\n border-width: 0;\n}\n\n.svg-inline--fa .fa-primary {\n fill: var(--fa-primary-color, currentColor);\n opacity: var(--fa-primary-opacity, 1);\n}\n\n.svg-inline--fa .fa-secondary {\n fill: var(--fa-secondary-color, currentColor);\n opacity: var(--fa-secondary-opacity, 0.4);\n}\n\n.svg-inline--fa.fa-swap-opacity .fa-primary {\n opacity: var(--fa-secondary-opacity, 0.4);\n}\n\n.svg-inline--fa.fa-swap-opacity .fa-secondary {\n opacity: var(--fa-primary-opacity, 1);\n}\n\n.svg-inline--fa mask .fa-primary,\n.svg-inline--fa mask .fa-secondary {\n fill: black;\n}';if(e!==t||a!==n){const o=new RegExp("\\.".concat(t,"\\-"),"g"),i=new RegExp("\\--".concat(t,"\\-"),"g"),s=new RegExp("\\.".concat(n),"g");r=r.replace(o,".".concat(e,"-")).replace(i,"--".concat(e,"-")).replace(s,".".concat(a))}return r}let kt=!1;function wt(){ft.autoAddCss&&!kt&&(!function(t){if(!t||!g)return;const n=m.createElement("style");n.setAttribute("type","text/css"),n.innerHTML=t;const e=m.head.childNodes;let a=null;for(let r=e.length-1;r>-1;r--){const t=e[r],n=(t.tagName||"").toUpperCase();["STYLE","LINK"].indexOf(n)>-1&&(a=t)}m.head.insertBefore(n,a)}(xt()),kt=!0)}var At={mixout:()=>({dom:{css:xt,insertCss:wt}}),hooks:()=>({beforeDOMElementCreation(){wt()},beforeI2svg(){wt()}})};const Ot=d||{};Ot[L]||(Ot[L]={}),Ot[L].styles||(Ot[L].styles={}),Ot[L].hooks||(Ot[L].hooks={}),Ot[L].shims||(Ot[L].shims=[]);var Pt=Ot[L];const Nt=[],St=function(){m.removeEventListener("DOMContentLoaded",St),Ct=1,Nt.map((t=>t()))};let Ct=!1;function jt(t){const{tag:n,attributes:e={},children:a=[]}=t;return"string"===typeof t?bt(t):"<".concat(n," ").concat(function(t){return Object.keys(t||{}).reduce(((n,e)=>n+"".concat(e,'="').concat(bt(t[e]),'" ')),"").trim()}(e),">").concat(a.map(jt).join(""),"")}function Et(t,n,e){if(t&&t[n]&&t[n][e])return{prefix:n,iconName:e,icon:t[n][e]}}g&&(Ct=(m.documentElement.doScroll?/^loaded|^c/:/^loaded|^i|^c/).test(m.readyState),Ct||m.addEventListener("DOMContentLoaded",St));var It=function(t,n,e,a){var r,o,i,s=Object.keys(t),l=s.length,c=void 0!==a?function(t,n){return function(e,a,r,o){return t.call(n,e,a,r,o)}}(n,a):n;for(void 0===e?(r=1,i=t[s[0]]):(r=0,i=e);r=55296&&r<=56319&&e{const a=t[e];return!!a.icon?n[a.iconName]=a.icon:n[e]=a,n}),{})}function Ft(t,n){let e=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};const{skipHooks:a=!1}=e,r=Mt(n);"function"!==typeof Pt.hooks.addPack||a?Pt.styles[t]=o(o({},Pt.styles[t]||{}),r):Pt.hooks.addPack(t,Mt(n)),"fas"===t&&Ft("fa",n)}const{styles:Dt,shims:Rt}=Pt,Lt=Object.keys(Z),Tt=Lt.reduce(((t,n)=>(t[n]=Object.keys(Z[n]),t)),{});let Yt=null,Wt={},_t={},Ht={},Ut={},Bt={};function Xt(t,n){const e=n.split("-"),a=e[0],r=e.slice(1).join("-");return a!==t||""===r||(o=r,~it.indexOf(o))?null:r;var o}const qt=()=>{const t=t=>It(Dt,((n,e,a)=>(n[a]=It(e,t,{}),n)),{});Wt=t(((t,n,e)=>{if(n[3]&&(t[n[3]]=e),n[2]){n[2].filter((t=>"number"===typeof t)).forEach((n=>{t[n.toString(16)]=e}))}return t})),_t=t(((t,n,e)=>{if(t[e]=e,n[2]){n[2].filter((t=>"string"===typeof t)).forEach((n=>{t[n]=e}))}return t})),Bt=t(((t,n,e)=>{const a=n[2];return t[e]=e,a.forEach((n=>{t[n]=e})),t}));const n="far"in Dt||ft.autoFetchSvg,e=It(Rt,((t,e)=>{const a=e[0];let r=e[1];const o=e[2];return"far"!==r||n||(r="fas"),"string"===typeof a&&(t.names[a]={prefix:r,iconName:o}),"number"===typeof a&&(t.unicodes[a.toString(16)]={prefix:r,iconName:o}),t}),{names:{},unicodes:{}});Ht=e.names,Ut=e.unicodes,Yt=Qt(ft.styleDefault,{family:ft.familyDefault})};var Vt;function Gt(t,n){return(Wt[t]||{})[n]}function Kt(t,n){return(Bt[t]||{})[n]}function $t(t){return Ht[t]||{prefix:null,iconName:null}}function Jt(){return Yt}Vt=t=>{Yt=Qt(t.styleDefault,{family:ft.familyDefault})},ut.push(Vt),qt();function Qt(t){let n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};const{family:e=x}=n,a=K[e][t];if(e===k&&!t)return"fad";const r=J[e][t]||J[e][a],o=t in Pt.styles?t:null;return r||o||null}function Zt(t){return t.sort().filter(((t,n,e)=>e.indexOf(t)===n))}function tn(t){let n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};const{skipLookups:e=!1}=n;let a=null;const r=M.concat(I),i=Zt(t.filter((t=>r.includes(t)))),s=Zt(t.filter((t=>!M.includes(t)))),l=i.filter((t=>(a=t,!v.includes(t)))),[c=null]=l,f=function(t){let n=x;const e=Lt.reduce(((t,n)=>(t[n]="".concat(ft.cssPrefix,"-").concat(n),t)),{});return w.forEach((a=>{(t.includes(e[a])||t.some((t=>Tt[a].includes(t))))&&(n=a)})),n}(i),u=o(o({},function(t){let n=[],e=null;return t.forEach((t=>{const a=Xt(ft.cssPrefix,t);a?e=a:t&&n.push(t)})),{iconName:e,rest:n}}(s)),{},{prefix:Qt(c,{family:f})});return o(o(o({},u),function(t){const{values:n,family:e,canonical:a,givenPrefix:r="",styles:o={},config:i={}}=t,s=e===k,l=n.includes("fa-duotone")||n.includes("fad"),c="duotone"===i.familyDefault,f="fad"===a.prefix||"fa-duotone"===a.prefix;!s&&(l||c||f)&&(a.prefix="fad");(n.includes("fa-brands")||n.includes("fab"))&&(a.prefix="fab");if(!a.prefix&&nn.includes(e)){if(Object.keys(o).find((t=>en.includes(t)))||i.autoFetchSvg){const t=A.get(e).defaultShortPrefixId;a.prefix=t,a.iconName=Kt(a.prefix,a.iconName)||a.iconName}}"fa"!==a.prefix&&"fa"!==r||(a.prefix=Jt()||"fas");return a}({values:t,family:f,styles:Dt,config:ft,canonical:u,givenPrefix:a})),function(t,n,e){let{prefix:a,iconName:r}=e;if(t||!a||!r)return{prefix:a,iconName:r};const o="fa"===n?$t(r):{},i=Kt(a,r);r=o.iconName||i||r,a=o.prefix||a,"far"!==a||Dt.far||!Dt.fas||ft.autoFetchSvg||(a="fas");return{prefix:a,iconName:r}}(e,a,u))}const nn=w.filter((t=>t!==x||t!==k)),en=Object.keys(z).filter((t=>t!==x)).map((t=>Object.keys(z[t]))).flat();let an=[],rn={};const on={},sn=Object.keys(on);function ln(t,n){for(var e=arguments.length,a=new Array(e>2?e-2:0),r=2;r{n=t.apply(null,[n,...a])})),n}function cn(t){for(var n=arguments.length,e=new Array(n>1?n-1:0),a=1;a{t.apply(null,e)}))}function fn(){const t=arguments[0],n=Array.prototype.slice.call(arguments,1);return on[t]?on[t].apply(null,n):void 0}function un(t){"fa"===t.prefix&&(t.prefix="fas");let{iconName:n}=t;const e=t.prefix||Jt();if(n)return n=Kt(e,n)||n,Et(dn.definitions,e,n)||Et(Pt.styles,e,n)}const dn=new class{constructor(){this.definitions={}}add(){for(var t=arguments.length,n=new Array(t),e=0;e{this.definitions[t]=o(o({},this.definitions[t]||{}),a[t]),Ft(t,a[t]);const n=Z[x][t];n&&Ft(n,a[t]),qt()}))}reset(){this.definitions={}}_pullDefinitions(t,n){const e=n.prefix&&n.iconName&&n.icon?{0:n}:n;return Object.keys(e).map((n=>{const{prefix:a,iconName:r,icon:o}=e[n],i=o[2];t[a]||(t[a]={}),i.length>0&&i.forEach((n=>{"string"===typeof n&&(t[a][n]=o)})),t[a][r]=o})),t}},mn={i2svg:function(){let t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};return g?(cn("beforeI2svg",t),fn("pseudoElements2svg",t),fn("i2svg",t)):Promise.reject(new Error("Operation requires a DOM of some kind."))},watch:function(){let t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};const{autoReplaceSvgRoot:n}=t;var e;!1===ft.autoReplaceSvg&&(ft.autoReplaceSvg=!0),ft.observeMutations=!0,e=()=>{gn({autoReplaceSvgRoot:n}),cn("watch",t)},g&&(Ct?setTimeout(e,0):Nt.push(e))}},pn={icon:t=>{if(null===t)return null;if("object"===typeof t&&t.prefix&&t.iconName)return{prefix:t.prefix,iconName:Kt(t.prefix,t.iconName)||t.iconName};if(Array.isArray(t)&&2===t.length){const n=0===t[1].indexOf("fa-")?t[1].slice(3):t[1],e=Qt(t[0]);return{prefix:e,iconName:Kt(e,n)||n}}if("string"===typeof t&&(t.indexOf("".concat(ft.cssPrefix,"-"))>-1||t.match(nt))){const n=tn(t.split(" "),{skipLookups:!0});return{prefix:n.prefix||Jt(),iconName:Kt(n.prefix,n.iconName)||n.iconName}}if("string"===typeof t){const n=Jt();return{prefix:n,iconName:Kt(n,t)||t}}}},hn={noAuto:()=>{ft.autoReplaceSvg=!1,ft.observeMutations=!1,cn("noAuto")},config:ft,dom:mn,parse:pn,library:dn,findIconDefinition:un,toHtml:jt},gn=function(){let t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};const{autoReplaceSvgRoot:n=m}=t;(Object.keys(Pt.styles).length>0||ft.autoFetchSvg)&&g&&ft.autoReplaceSvg&&hn.dom.i2svg({node:n})};function bn(t,n){return Object.defineProperty(t,"abstract",{get:n}),Object.defineProperty(t,"html",{get:function(){return t.abstract.map((t=>jt(t)))}}),Object.defineProperty(t,"node",{get:function(){if(!g)return;const n=m.createElement("div");return n.innerHTML=t.html,n.children}}),t}function yn(t){const{icons:{main:n,mask:e},prefix:a,iconName:r,transform:i,symbol:s,title:l,maskId:c,titleId:f,extra:u,watchable:d=!1}=t,{width:m,height:p}=e.found?e:n,h=S.includes(a),g=[ft.replacementClass,r?"".concat(ft.cssPrefix,"-").concat(r):""].filter((t=>-1===u.classes.indexOf(t))).filter((t=>""!==t||!!t)).concat(u.classes).join(" ");let b={children:[],attributes:o(o({},u.attributes),{},{"data-prefix":a,"data-icon":r,class:g,role:u.attributes.role||"img",xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 ".concat(m," ").concat(p)})};const y=h&&!~u.classes.indexOf("fa-fw")?{width:"".concat(m/p*16*.0625,"em")}:{};d&&(b.attributes[W]=""),l&&(b.children.push({tag:"title",attributes:{id:b.attributes["aria-labelledby"]||"title-".concat(f||pt())},children:[l]}),delete b.attributes.title);const v=o(o({},b),{},{prefix:a,iconName:r,main:n,mask:e,maskId:c,transform:i,symbol:s,styles:o(o({},y),u.styles)}),{children:x,attributes:k}=e.found&&n.found?fn("generateAbstractMask",v)||{children:[],attributes:{}}:fn("generateAbstractIcon",v)||{children:[],attributes:{}};return v.children=x,v.attributes=k,s?function(t){let{prefix:n,iconName:e,children:a,attributes:r,symbol:i}=t;const s=!0===i?"".concat(n,"-").concat(ft.cssPrefix,"-").concat(e):i;return[{tag:"svg",attributes:{style:"display: none;"},children:[{tag:"symbol",attributes:o(o({},r),{},{id:s}),children:a}]}]}(v):function(t){let{children:n,main:e,mask:a,attributes:r,styles:i,transform:s}=t;if(vt(s)&&e.found&&!a.found){const{width:t,height:n}=e,a={x:t/n/2,y:.5};r.style=yt(o(o({},i),{},{"transform-origin":"".concat(a.x+s.x/16,"em ").concat(a.y+s.y/16,"em")}))}return[{tag:"svg",attributes:r,children:n}]}(v)}function vn(t){const{content:n,width:e,height:a,transform:r,title:i,extra:s,watchable:l=!1}=t,c=o(o(o({},s.attributes),i?{title:i}:{}),{},{class:s.classes.join(" ")});l&&(c[W]="");const f=o({},s.styles);vt(r)&&(f.transform=function(t){let{transform:n,width:e=T,height:a=T,startCentered:r=!1}=t,o="";return o+=r&&b?"translate(".concat(n.x/dt-e/2,"em, ").concat(n.y/dt-a/2,"em) "):r?"translate(calc(-50% + ".concat(n.x/dt,"em), calc(-50% + ").concat(n.y/dt,"em)) "):"translate(".concat(n.x/dt,"em, ").concat(n.y/dt,"em) "),o+="scale(".concat(n.size/dt*(n.flipX?-1:1),", ").concat(n.size/dt*(n.flipY?-1:1),") "),o+="rotate(".concat(n.rotate,"deg) "),o}({transform:r,startCentered:!0,width:e,height:a}),f["-webkit-transform"]=f.transform);const u=yt(f);u.length>0&&(c.style=u);const d=[];return d.push({tag:"span",attributes:c,children:[n]}),i&&d.push({tag:"span",attributes:{class:"sr-only"},children:[i]}),d}const{styles:xn}=Pt;function kn(t){const n=t[0],e=t[1],[a]=t.slice(4);let r=null;return r=Array.isArray(a)?{tag:"g",attributes:{class:"".concat(ft.cssPrefix,"-").concat(ot.GROUP)},children:[{tag:"path",attributes:{class:"".concat(ft.cssPrefix,"-").concat(ot.SECONDARY),fill:"currentColor",d:a[0]}},{tag:"path",attributes:{class:"".concat(ft.cssPrefix,"-").concat(ot.PRIMARY),fill:"currentColor",d:a[1]}}]}:{tag:"path",attributes:{fill:"currentColor",d:a}},{found:!0,width:n,height:e,icon:r}}const wn={found:!1,width:512,height:512};function An(t,n){let e=n;return"fa"===n&&null!==ft.styleDefault&&(n=Jt()),new Promise(((a,r)=>{if("fa"===e){const e=$t(t)||{};t=e.iconName||t,n=e.prefix||n}if(t&&n&&xn[n]&&xn[n][t]){return a(kn(xn[n][t]))}!function(t,n){q||ft.showMissingIcons||!t||console.error('Icon with name "'.concat(t,'" and prefix "').concat(n,'" is missing.'))}(t,n),a(o(o({},wn),{},{icon:ft.showMissingIcons&&t&&fn("missingIconAbstract")||{}}))}))}const On=()=>{},Pn=ft.measurePerformance&&h&&h.mark&&h.measure?h:{mark:On,measure:On},Nn='FA "6.7.2"',Sn=t=>{Pn.mark("".concat(Nn," ").concat(t," ends")),Pn.measure("".concat(Nn," ").concat(t),"".concat(Nn," ").concat(t," begins"),"".concat(Nn," ").concat(t," ends"))};var Cn=t=>(Pn.mark("".concat(Nn," ").concat(t," begins")),()=>Sn(t));const jn=()=>{};function En(t){return"string"===typeof(t.getAttribute?t.getAttribute(W):null)}function In(t){return m.createElementNS("http://www.w3.org/2000/svg",t)}function zn(t){return m.createElement(t)}function Mn(t){let n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};const{ceFn:e=("svg"===t.tag?In:zn)}=n;if("string"===typeof t)return m.createTextNode(t);const a=e(t.tag);Object.keys(t.attributes||[]).forEach((function(n){a.setAttribute(n,t.attributes[n])}));return(t.children||[]).forEach((function(t){a.appendChild(Mn(t,{ceFn:e}))})),a}const Fn={replace:function(t){const n=t[0];if(n.parentNode)if(t[1].forEach((t=>{n.parentNode.insertBefore(Mn(t),n)})),null===n.getAttribute(W)&&ft.keepOriginalSource){let t=m.createComment(function(t){let n=" ".concat(t.outerHTML," ");return n="".concat(n,"Font Awesome fontawesome.com "),n}(n));n.parentNode.replaceChild(t,n)}else n.remove()},nest:function(t){const n=t[0],e=t[1];if(~gt(n).indexOf(ft.replacementClass))return Fn.replace(t);const a=new RegExp("".concat(ft.cssPrefix,"-.*"));if(delete e[0].attributes.id,e[0].attributes.class){const t=e[0].attributes.class.split(" ").reduce(((t,n)=>(n===ft.replacementClass||n.match(a)?t.toSvg.push(n):t.toNode.push(n),t)),{toNode:[],toSvg:[]});e[0].attributes.class=t.toSvg.join(" "),0===t.toNode.length?n.removeAttribute("class"):n.setAttribute("class",t.toNode.join(" "))}const r=e.map((t=>jt(t))).join("\n");n.setAttribute(W,""),n.innerHTML=r}};function Dn(t){t()}function Rn(t,n){const e="function"===typeof n?n:jn;if(0===t.length)e();else{let n=Dn;"async"===ft.mutateApproach&&(n=d.requestAnimationFrame||Dn),n((()=>{const n=!0===ft.autoReplaceSvg?Fn.replace:Fn[ft.autoReplaceSvg]||Fn.replace,a=Cn("mutate");t.map(n),a(),e()}))}}let Ln=!1;function Tn(){Ln=!0}function Yn(){Ln=!1}let Wn=null;function _n(t){if(!p)return;if(!ft.observeMutations)return;const{treeCallback:n=jn,nodeCallback:e=jn,pseudoElementsCallback:a=jn,observeMutationsRoot:r=m}=t;Wn=new p((t=>{if(Ln)return;const r=Jt();ht(t).forEach((t=>{if("childList"===t.type&&t.addedNodes.length>0&&!En(t.addedNodes[0])&&(ft.searchPseudoElements&&a(t.target),n(t.target)),"attributes"===t.type&&t.target.parentNode&&ft.searchPseudoElements&&a(t.target.parentNode),"attributes"===t.type&&En(t.target)&&~rt.indexOf(t.attributeName))if("class"===t.attributeName&&function(t){const n=t.getAttribute?t.getAttribute(H):null,e=t.getAttribute?t.getAttribute(U):null;return n&&e}(t.target)){const{prefix:n,iconName:e}=tn(gt(t.target));t.target.setAttribute(H,n||r),e&&t.target.setAttribute(U,e)}else(o=t.target)&&o.classList&&o.classList.contains&&o.classList.contains(ft.replacementClass)&&e(t.target);var o}))})),g&&Wn.observe(r,{childList:!0,attributes:!0,characterData:!0,subtree:!0})}function Hn(t){const n=t.getAttribute("data-prefix"),e=t.getAttribute("data-icon"),a=void 0!==t.innerText?t.innerText.trim():"";let r=tn(gt(t));return r.prefix||(r.prefix=Jt()),n&&e&&(r.prefix=n,r.iconName=e),r.iconName&&r.prefix||(r.prefix&&a.length>0&&(r.iconName=(o=r.prefix,i=t.innerText,(_t[o]||{})[i]||Gt(r.prefix,zt(t.innerText)))),!r.iconName&&ft.autoFetchSvg&&t.firstChild&&t.firstChild.nodeType===Node.TEXT_NODE&&(r.iconName=t.firstChild.data)),r;var o,i}function Un(t){let n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{styleParser:!0};const{iconName:e,prefix:a,rest:r}=Hn(t),i=function(t){const n=ht(t.attributes).reduce(((t,n)=>("class"!==t.name&&"style"!==t.name&&(t[n.name]=n.value),t)),{}),e=t.getAttribute("title"),a=t.getAttribute("data-fa-title-id");return ft.autoA11y&&(e?n["aria-labelledby"]="".concat(ft.replacementClass,"-title-").concat(a||pt()):(n["aria-hidden"]="true",n.focusable="false")),n}(t),s=ln("parseNodeAttributes",{},t);let l=n.styleParser?function(t){const n=t.getAttribute("style");let e=[];return n&&(e=n.split(";").reduce(((t,n)=>{const e=n.split(":"),a=e[0],r=e.slice(1);return a&&r.length>0&&(t[a]=r.join(":").trim()),t}),{})),e}(t):[];return o({iconName:e,title:t.getAttribute("title"),titleId:t.getAttribute("data-fa-title-id"),prefix:a,transform:mt,mask:{iconName:null,prefix:null,rest:[]},maskId:null,symbol:!1,extra:{classes:r,styles:l,attributes:i}},s)}const{styles:Bn}=Pt;function Xn(t){const n="nest"===ft.autoReplaceSvg?Un(t,{styleParser:!1}):Un(t);return~n.extra.classes.indexOf(et)?fn("generateLayersText",t,n):fn("generateSvgReplacementMutation",t,n)}function qn(t){let n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:null;if(!g)return Promise.resolve();const e=m.documentElement.classList,a=t=>e.add("".concat(B,"-").concat(t)),r=t=>e.remove("".concat(B,"-").concat(t)),o=ft.autoFetchSvg?[...O,...M]:v.concat(Object.keys(Bn));o.includes("fa")||o.push("fa");const i=[".".concat(et,":not([").concat(W,"])")].concat(o.map((t=>".".concat(t,":not([").concat(W,"])")))).join(", ");if(0===i.length)return Promise.resolve();let s=[];try{s=ht(t.querySelectorAll(i))}catch(f){}if(!(s.length>0))return Promise.resolve();a("pending"),r("complete");const l=Cn("onTree"),c=s.reduce(((t,n)=>{try{const e=Xn(n);e&&t.push(e)}catch(f){q||"MissingIcon"===f.name&&console.error(f)}return t}),[]);return new Promise(((t,e)=>{Promise.all(c).then((e=>{Rn(e,(()=>{a("active"),a("complete"),r("pending"),"function"===typeof n&&n(),l(),t()}))})).catch((t=>{l(),e(t)}))}))}function Vn(t){let n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:null;Xn(t).then((t=>{t&&Rn([t],n)}))}const Gn=function(t){let n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};const{transform:e=mt,symbol:a=!1,mask:r=null,maskId:i=null,title:s=null,titleId:l=null,classes:c=[],attributes:f={},styles:u={}}=n;if(!t)return;const{prefix:d,iconName:m,icon:p}=t;return bn(o({type:"icon"},t),(()=>(cn("beforeDOMElementCreation",{iconDefinition:t,params:n}),ft.autoA11y&&(s?f["aria-labelledby"]="".concat(ft.replacementClass,"-title-").concat(l||pt()):(f["aria-hidden"]="true",f.focusable="false")),yn({icons:{main:kn(p),mask:r?kn(r.icon):{found:!1,width:null,height:null,icon:{}}},prefix:d,iconName:m,transform:o(o({},mt),e),symbol:a,title:s,maskId:i,titleId:l,extra:{attributes:f,styles:u,classes:c}}))))};var Kn={mixout(){return{icon:(t=Gn,function(n){let e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};const a=(n||{}).icon?n:un(n||{});let{mask:r}=e;return r&&(r=(r||{}).icon?r:un(r||{})),t(a,o(o({},e),{},{mask:r}))})};var t},hooks:()=>({mutationObserverCallbacks:t=>(t.treeCallback=qn,t.nodeCallback=Vn,t)}),provides(t){t.i2svg=function(t){const{node:n=m,callback:e=()=>{}}=t;return qn(n,e)},t.generateSvgReplacementMutation=function(t,n){const{iconName:e,title:a,titleId:r,prefix:o,transform:i,symbol:s,mask:l,maskId:c,extra:f}=n;return new Promise(((n,u)=>{Promise.all([An(e,o),l.iconName?An(l.iconName,l.prefix):Promise.resolve({found:!1,width:512,height:512,icon:{}})]).then((l=>{let[u,d]=l;n([t,yn({icons:{main:u,mask:d},prefix:o,iconName:e,transform:i,symbol:s,maskId:c,title:a,titleId:r,extra:f,watchable:!0})])})).catch(u)}))},t.generateAbstractIcon=function(t){let{children:n,attributes:e,main:a,transform:r,styles:o}=t;const i=yt(o);let s;return i.length>0&&(e.style=i),vt(r)&&(s=fn("generateAbstractTransformGrouping",{main:a,transform:r,containerWidth:a.width,iconWidth:a.width})),n.push(s||a.icon),{children:n,attributes:e}}}},$n={mixout:()=>({layer(t){let n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};const{classes:e=[]}=n;return bn({type:"layer"},(()=>{cn("beforeDOMElementCreation",{assembler:t,params:n});let a=[];return t((t=>{Array.isArray(t)?t.map((t=>{a=a.concat(t.abstract)})):a=a.concat(t.abstract)})),[{tag:"span",attributes:{class:["".concat(ft.cssPrefix,"-layers"),...e].join(" ")},children:a}]}))}})},Jn={mixout:()=>({counter(t){let n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};const{title:e=null,classes:a=[],attributes:r={},styles:i={}}=n;return bn({type:"counter",content:t},(()=>(cn("beforeDOMElementCreation",{content:t,params:n}),function(t){const{content:n,title:e,extra:a}=t,r=o(o(o({},a.attributes),e?{title:e}:{}),{},{class:a.classes.join(" ")}),i=yt(a.styles);i.length>0&&(r.style=i);const s=[];return s.push({tag:"span",attributes:r,children:[n]}),e&&s.push({tag:"span",attributes:{class:"sr-only"},children:[e]}),s}({content:t.toString(),title:e,extra:{attributes:r,styles:i,classes:["".concat(ft.cssPrefix,"-layers-counter"),...a]}}))))}})},Qn={mixout:()=>({text(t){let n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};const{transform:e=mt,title:a=null,classes:r=[],attributes:i={},styles:s={}}=n;return bn({type:"text",content:t},(()=>(cn("beforeDOMElementCreation",{content:t,params:n}),vn({content:t,transform:o(o({},mt),e),title:a,extra:{attributes:i,styles:s,classes:["".concat(ft.cssPrefix,"-layers-text"),...r]}}))))}}),provides(t){t.generateLayersText=function(t,n){const{title:e,transform:a,extra:r}=n;let o=null,i=null;if(b){const n=parseInt(getComputedStyle(t).fontSize,10),e=t.getBoundingClientRect();o=e.width/n,i=e.height/n}return ft.autoA11y&&!e&&(r.attributes["aria-hidden"]="true"),Promise.resolve([t,vn({content:t.innerHTML,width:o,height:i,transform:a,title:e,extra:r,watchable:!0})])}}};const Zn=new RegExp('"',"ug"),te=[1105920,1112319],ne=o(o(o(o({},{FontAwesome:{normal:"fas",400:"fas"}}),{"Font Awesome 6 Free":{900:"fas",400:"far"},"Font Awesome 6 Pro":{900:"fas",400:"far",normal:"far",300:"fal",100:"fat"},"Font Awesome 6 Brands":{400:"fab",normal:"fab"},"Font Awesome 6 Duotone":{900:"fad",400:"fadr",normal:"fadr",300:"fadl",100:"fadt"},"Font Awesome 6 Sharp":{900:"fass",400:"fasr",normal:"fasr",300:"fasl",100:"fast"},"Font Awesome 6 Sharp Duotone":{900:"fasds",400:"fasdr",normal:"fasdr",300:"fasdl",100:"fasdt"}}),{"Font Awesome 5 Free":{900:"fas",400:"far"},"Font Awesome 5 Pro":{900:"fas",400:"far",normal:"far",300:"fal"},"Font Awesome 5 Brands":{400:"fab",normal:"fab"},"Font Awesome 5 Duotone":{900:"fad"}}),{"Font Awesome Kit":{400:"fak",normal:"fak"},"Font Awesome Kit Duotone":{400:"fakd",normal:"fakd"}}),ee=Object.keys(ne).reduce(((t,n)=>(t[n.toLowerCase()]=ne[n],t)),{}),ae=Object.keys(ee).reduce(((t,n)=>{const e=ee[n];return t[n]=e[900]||[...Object.entries(e)][0][1],t}),{});function re(t,n){const e="".concat("data-fa-pseudo-element-pending").concat(n.replace(":","-"));return new Promise(((a,r)=>{if(null!==t.getAttribute(e))return a();const i=ht(t.children).filter((t=>t.getAttribute(_)===n))[0],s=d.getComputedStyle(t,n),l=s.getPropertyValue("font-family"),c=l.match(at),f=s.getPropertyValue("font-weight"),u=s.getPropertyValue("content");if(i&&!c)return t.removeChild(i),a();if(c&&"none"!==u&&""!==u){const u=s.getPropertyValue("content");let d=function(t,n){const e=t.replace(/^['"]|['"]$/g,"").toLowerCase(),a=parseInt(n),r=isNaN(a)?"normal":a;return(ee[e]||{})[r]||ae[e]}(l,f);const{value:p,isSecondary:h}=function(t){const n=t.replace(Zn,""),e=function(t,n){const e=t.length;let a,r=t.charCodeAt(n);return r>=55296&&r<=56319&&e>n+1&&(a=t.charCodeAt(n+1),a>=56320&&a<=57343)?1024*(r-55296)+a-56320+65536:r}(n,0),a=e>=te[0]&&e<=te[1],r=2===n.length&&n[0]===n[1];return{value:zt(r?n[0]:n),isSecondary:a||r}}(u),g=c[0].startsWith("FontAwesome");let b=Gt(d,p),y=b;if(g){const t=function(t){const n=Ut[t],e=Gt("fas",t);return n||(e?{prefix:"fas",iconName:e}:null)||{prefix:null,iconName:null}}(p);t.iconName&&t.prefix&&(b=t.iconName,d=t.prefix)}if(!b||h||i&&i.getAttribute(H)===d&&i.getAttribute(U)===y)a();else{t.setAttribute(e,y),i&&t.removeChild(i);const s={iconName:null,title:null,titleId:null,prefix:null,transform:mt,symbol:!1,mask:{iconName:null,prefix:null,rest:[]},maskId:null,extra:{classes:[],styles:{},attributes:{}}},{extra:l}=s;l.attributes[_]=n,An(b,d).then((r=>{const i=yn(o(o({},s),{},{icons:{main:r,mask:{prefix:null,iconName:null,rest:[]}},prefix:d,iconName:y,extra:l,watchable:!0})),c=m.createElementNS("http://www.w3.org/2000/svg","svg");"::before"===n?t.insertBefore(c,t.firstChild):t.appendChild(c),c.outerHTML=i.map((t=>jt(t))).join("\n"),t.removeAttribute(e),a()})).catch(r)}}else a()}))}function oe(t){return Promise.all([re(t,"::before"),re(t,"::after")])}function ie(t){return t.parentNode!==document.head&&!~X.indexOf(t.tagName.toUpperCase())&&!t.getAttribute(_)&&(!t.parentNode||"svg"!==t.parentNode.tagName)}function se(t){if(g)return new Promise(((n,e)=>{const a=ht(t.querySelectorAll("*")).filter(ie).map(oe),r=Cn("searchPseudoElements");Tn(),Promise.all(a).then((()=>{r(),Yn(),n()})).catch((()=>{r(),Yn(),e()}))}))}var le={hooks:()=>({mutationObserverCallbacks:t=>(t.pseudoElementsCallback=se,t)}),provides(t){t.pseudoElements2svg=function(t){const{node:n=m}=t;ft.searchPseudoElements&&se(n)}}};let ce=!1;var fe={mixout:()=>({dom:{unwatch(){Tn(),ce=!0}}}),hooks:()=>({bootstrap(){_n(ln("mutationObserverCallbacks",{}))},noAuto(){Wn&&Wn.disconnect()},watch(t){const{observeMutationsRoot:n}=t;ce?Yn():_n(ln("mutationObserverCallbacks",{observeMutationsRoot:n}))}})};const ue=t=>t.toLowerCase().split(" ").reduce(((t,n)=>{const e=n.toLowerCase().split("-"),a=e[0];let r=e.slice(1).join("-");if(a&&"h"===r)return t.flipX=!0,t;if(a&&"v"===r)return t.flipY=!0,t;if(r=parseFloat(r),isNaN(r))return t;switch(a){case"grow":t.size=t.size+r;break;case"shrink":t.size=t.size-r;break;case"left":t.x=t.x-r;break;case"right":t.x=t.x+r;break;case"up":t.y=t.y-r;break;case"down":t.y=t.y+r;break;case"rotate":t.rotate=t.rotate+r}return t}),{size:16,x:0,y:0,flipX:!1,flipY:!1,rotate:0});var de={mixout:()=>({parse:{transform:t=>ue(t)}}),hooks:()=>({parseNodeAttributes(t,n){const e=n.getAttribute("data-fa-transform");return e&&(t.transform=ue(e)),t}}),provides(t){t.generateAbstractTransformGrouping=function(t){let{main:n,transform:e,containerWidth:a,iconWidth:r}=t;const i={transform:"translate(".concat(a/2," 256)")},s="translate(".concat(32*e.x,", ").concat(32*e.y,") "),l="scale(".concat(e.size/16*(e.flipX?-1:1),", ").concat(e.size/16*(e.flipY?-1:1),") "),c="rotate(".concat(e.rotate," 0 0)"),f={outer:i,inner:{transform:"".concat(s," ").concat(l," ").concat(c)},path:{transform:"translate(".concat(r/2*-1," -256)")}};return{tag:"g",attributes:o({},f.outer),children:[{tag:"g",attributes:o({},f.inner),children:[{tag:n.icon.tag,children:n.icon.children,attributes:o(o({},n.icon.attributes),f.path)}]}]}}}};const me={x:0,y:0,width:"100%",height:"100%"};function pe(t){let n=!(arguments.length>1&&void 0!==arguments[1])||arguments[1];return t.attributes&&(t.attributes.fill||n)&&(t.attributes.fill="black"),t}var he={hooks:()=>({parseNodeAttributes(t,n){const e=n.getAttribute("data-fa-mask"),a=e?tn(e.split(" ").map((t=>t.trim()))):{prefix:null,iconName:null,rest:[]};return a.prefix||(a.prefix=Jt()),t.mask=a,t.maskId=n.getAttribute("data-fa-mask-id"),t}}),provides(t){t.generateAbstractMask=function(t){let{children:n,attributes:e,main:a,mask:r,maskId:i,transform:s}=t;const{width:l,icon:c}=a,{width:f,icon:u}=r,d=function(t){let{transform:n,containerWidth:e,iconWidth:a}=t;const r={transform:"translate(".concat(e/2," 256)")},o="translate(".concat(32*n.x,", ").concat(32*n.y,") "),i="scale(".concat(n.size/16*(n.flipX?-1:1),", ").concat(n.size/16*(n.flipY?-1:1),") "),s="rotate(".concat(n.rotate," 0 0)");return{outer:r,inner:{transform:"".concat(o," ").concat(i," ").concat(s)},path:{transform:"translate(".concat(a/2*-1," -256)")}}}({transform:s,containerWidth:f,iconWidth:l}),m={tag:"rect",attributes:o(o({},me),{},{fill:"white"})},p=c.children?{children:c.children.map(pe)}:{},h={tag:"g",attributes:o({},d.inner),children:[pe(o({tag:c.tag,attributes:o(o({},c.attributes),d.path)},p))]},g={tag:"g",attributes:o({},d.outer),children:[h]},b="mask-".concat(i||pt()),y="clip-".concat(i||pt()),v={tag:"mask",attributes:o(o({},me),{},{id:b,maskUnits:"userSpaceOnUse",maskContentUnits:"userSpaceOnUse"}),children:[m,g]},x={tag:"defs",children:[{tag:"clipPath",attributes:{id:y},children:(k=u,"g"===k.tag?k.children:[k])},v]};var k;return n.push(x,{tag:"rect",attributes:o({fill:"currentColor","clip-path":"url(#".concat(y,")"),mask:"url(#".concat(b,")")},me)}),{children:n,attributes:e}}}},ge={provides(t){let n=!1;d.matchMedia&&(n=d.matchMedia("(prefers-reduced-motion: reduce)").matches),t.missingIconAbstract=function(){const t=[],e={fill:"currentColor"},a={attributeType:"XML",repeatCount:"indefinite",dur:"2s"};t.push({tag:"path",attributes:o(o({},e),{},{d:"M156.5,447.7l-12.6,29.5c-18.7-9.5-35.9-21.2-51.5-34.9l22.7-22.7C127.6,430.5,141.5,440,156.5,447.7z M40.6,272H8.5 c1.4,21.2,5.4,41.7,11.7,61.1L50,321.2C45.1,305.5,41.8,289,40.6,272z M40.6,240c1.4-18.8,5.2-37,11.1-54.1l-29.5-12.6 C14.7,194.3,10,216.7,8.5,240H40.6z M64.3,156.5c7.8-14.9,17.2-28.8,28.1-41.5L69.7,92.3c-13.7,15.6-25.5,32.8-34.9,51.5 L64.3,156.5z M397,419.6c-13.9,12-29.4,22.3-46.1,30.4l11.9,29.8c20.7-9.9,39.8-22.6,56.9-37.6L397,419.6z M115,92.4 c13.9-12,29.4-22.3,46.1-30.4l-11.9-29.8c-20.7,9.9-39.8,22.6-56.8,37.6L115,92.4z M447.7,355.5c-7.8,14.9-17.2,28.8-28.1,41.5 l22.7,22.7c13.7-15.6,25.5-32.9,34.9-51.5L447.7,355.5z M471.4,272c-1.4,18.8-5.2,37-11.1,54.1l29.5,12.6 c7.5-21.1,12.2-43.5,13.6-66.8H471.4z M321.2,462c-15.7,5-32.2,8.2-49.2,9.4v32.1c21.2-1.4,41.7-5.4,61.1-11.7L321.2,462z M240,471.4c-18.8-1.4-37-5.2-54.1-11.1l-12.6,29.5c21.1,7.5,43.5,12.2,66.8,13.6V471.4z M462,190.8c5,15.7,8.2,32.2,9.4,49.2h32.1 c-1.4-21.2-5.4-41.7-11.7-61.1L462,190.8z M92.4,397c-12-13.9-22.3-29.4-30.4-46.1l-29.8,11.9c9.9,20.7,22.6,39.8,37.6,56.9 L92.4,397z M272,40.6c18.8,1.4,36.9,5.2,54.1,11.1l12.6-29.5C317.7,14.7,295.3,10,272,8.5V40.6z M190.8,50 c15.7-5,32.2-8.2,49.2-9.4V8.5c-21.2,1.4-41.7,5.4-61.1,11.7L190.8,50z M442.3,92.3L419.6,115c12,13.9,22.3,29.4,30.5,46.1 l29.8-11.9C470,128.5,457.3,109.4,442.3,92.3z M397,92.4l22.7-22.7c-15.6-13.7-32.8-25.5-51.5-34.9l-12.6,29.5 C370.4,72.1,384.4,81.5,397,92.4z"})});const r=o(o({},a),{},{attributeName:"opacity"}),i={tag:"circle",attributes:o(o({},e),{},{cx:"256",cy:"364",r:"28"}),children:[]};return n||i.children.push({tag:"animate",attributes:o(o({},a),{},{attributeName:"r",values:"28;14;28;28;14;28;"})},{tag:"animate",attributes:o(o({},r),{},{values:"1;0;1;1;0;1;"})}),t.push(i),t.push({tag:"path",attributes:o(o({},e),{},{opacity:"1",d:"M263.7,312h-16c-6.6,0-12-5.4-12-12c0-71,77.4-63.9,77.4-107.8c0-20-17.8-40.2-57.4-40.2c-29.1,0-44.3,9.6-59.2,28.7 c-3.9,5-11.1,6-16.2,2.4l-13.1-9.2c-5.6-3.9-6.9-11.8-2.6-17.2c21.2-27.2,46.4-44.7,91.2-44.7c52.3,0,97.4,29.8,97.4,80.2 c0,67.6-77.4,63.5-77.4,107.8C275.7,306.6,270.3,312,263.7,312z"}),children:n?[]:[{tag:"animate",attributes:o(o({},r),{},{values:"1;0;0;0;0;1;"})}]}),n||t.push({tag:"path",attributes:o(o({},e),{},{opacity:"0",d:"M232.5,134.5l7,168c0.3,6.4,5.6,11.5,12,11.5h9c6.4,0,11.7-5.1,12-11.5l7-168c0.3-6.8-5.2-12.5-12-12.5h-23 C237.7,122,232.2,127.7,232.5,134.5z"}),children:[{tag:"animate",attributes:o(o({},r),{},{values:"0;0;1;1;0;0;"})}]}),{tag:"g",attributes:{class:"missing"},children:t}}}};!function(t,n){let{mixoutsTo:e}=n;an=t,rn={},Object.keys(on).forEach((t=>{-1===sn.indexOf(t)&&delete on[t]})),an.forEach((t=>{const n=t.mixout?t.mixout():{};if(Object.keys(n).forEach((t=>{"function"===typeof n[t]&&(e[t]=n[t]),"object"===typeof n[t]&&Object.keys(n[t]).forEach((a=>{e[t]||(e[t]={}),e[t][a]=n[t][a]}))})),t.hooks){const n=t.hooks();Object.keys(n).forEach((t=>{rn[t]||(rn[t]=[]),rn[t].push(n[t])}))}t.provides&&t.provides(on)}))}([At,Kn,$n,Jn,Qn,le,fe,de,he,ge,{hooks:()=>({parseNodeAttributes(t,n){const e=n.getAttribute("data-fa-symbol"),a=null!==e&&(""===e||e);return t.symbol=a,t}})}],{mixoutsTo:hn});const be=hn.parse,ye=hn.icon;var ve=e(5360),xe=e.n(ve),ke=e(2176);function we(t,n){var e=Object.keys(t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(t);n&&(a=a.filter((function(n){return Object.getOwnPropertyDescriptor(t,n).enumerable}))),e.push.apply(e,a)}return e}function Ae(t){for(var n=1;n=0||(r[e]=t[e]);return r}(t,n);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(t);for(a=0;a=0||Object.prototype.propertyIsEnumerable.call(t,e)&&(r[e]=t[e])}return r}function Se(t){return function(t){if(Array.isArray(t))return Ce(t)}(t)||function(t){if("undefined"!==typeof Symbol&&null!=t[Symbol.iterator]||null!=t["@@iterator"])return Array.from(t)}(t)||function(t,n){if(!t)return;if("string"===typeof t)return Ce(t,n);var e=Object.prototype.toString.call(t).slice(8,-1);"Object"===e&&t.constructor&&(e=t.constructor.name);if("Map"===e||"Set"===e)return Array.from(t);if("Arguments"===e||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(e))return Ce(t,n)}(t)||function(){throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function Ce(t,n){(null==n||n>t.length)&&(n=t.length);for(var e=0,a=new Array(n);e0||!Array.isArray(n)&&n?Pe({},t,n):{}}var Fe={border:!1,className:"",mask:null,maskId:null,fixedWidth:!1,inverse:!1,flip:!1,icon:null,listItem:!1,pull:null,pulse:!1,rotation:null,size:null,spin:!1,spinPulse:!1,spinReverse:!1,beat:!1,fade:!1,beatFade:!1,bounce:!1,shake:!1,symbol:!1,title:"",titleId:null,transform:null,swapOpacity:!1},De=ke.forwardRef((function(t,n){var e=Ae(Ae({},Fe),t),a=e.icon,r=e.mask,o=e.symbol,i=e.className,s=e.title,l=e.titleId,c=e.maskId,f=ze(a),u=Me("classes",[].concat(Se(function(t){var n,e=t.beat,a=t.fade,r=t.beatFade,o=t.bounce,i=t.shake,s=t.flash,l=t.spin,c=t.spinPulse,f=t.spinReverse,u=t.pulse,d=t.fixedWidth,m=t.inverse,p=t.border,h=t.listItem,g=t.flip,b=t.size,y=t.rotation,v=t.pull,x=(Pe(n={"fa-beat":e,"fa-fade":a,"fa-beat-fade":r,"fa-bounce":o,"fa-shake":i,"fa-flash":s,"fa-spin":l,"fa-spin-reverse":f,"fa-spin-pulse":c,"fa-pulse":u,"fa-fw":d,"fa-inverse":m,"fa-border":p,"fa-li":h,"fa-flip":!0===g,"fa-flip-horizontal":"horizontal"===g||"both"===g,"fa-flip-vertical":"vertical"===g||"both"===g},"fa-".concat(b),"undefined"!==typeof b&&null!==b),Pe(n,"fa-rotate-".concat(y),"undefined"!==typeof y&&null!==y&&0!==y),Pe(n,"fa-pull-".concat(v),"undefined"!==typeof v&&null!==v),Pe(n,"fa-swap-opacity",t.swapOpacity),n);return Object.keys(x).map((function(t){return x[t]?t:null})).filter((function(t){return t}))}(e)),Se((i||"").split(" ")))),d=Me("transform","string"===typeof e.transform?be.transform(e.transform):e.transform),m=Me("mask",ze(r)),p=ye(f,Ae(Ae(Ae(Ae({},u),d),m),{},{symbol:o,title:s,titleId:l,maskId:c}));if(!p)return function(){var t;!Ie&&console&&"function"===typeof console.error&&(t=console).error.apply(t,arguments)}("Could not find icon",f),null;var h=p.abstract,g={ref:n};return Object.keys(e).forEach((function(t){Fe.hasOwnProperty(t)||(g[t]=e[t])})),Re(h[0],g)}));De.displayName="FontAwesomeIcon",De.propTypes={beat:xe().bool,border:xe().bool,beatFade:xe().bool,bounce:xe().bool,className:xe().string,fade:xe().bool,flash:xe().bool,mask:xe().oneOfType([xe().object,xe().array,xe().string]),maskId:xe().string,fixedWidth:xe().bool,inverse:xe().bool,flip:xe().oneOf([!0,!1,"horizontal","vertical","both"]),icon:xe().oneOfType([xe().object,xe().array,xe().string]),listItem:xe().bool,pull:xe().oneOf(["right","left"]),pulse:xe().bool,rotation:xe().oneOf([0,90,180,270]),shake:xe().bool,size:xe().oneOf(["2xs","xs","sm","lg","xl","2xl","1x","2x","3x","4x","5x","6x","7x","8x","9x","10x"]),spin:xe().bool,spinPulse:xe().bool,spinReverse:xe().bool,symbol:xe().oneOfType([xe().bool,xe().string]),title:xe().string,titleId:xe().string,transform:xe().oneOfType([xe().string,xe().object]),swapOpacity:xe().bool};var Re=function t(n,e){var a=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};if("string"===typeof e)return e;var r=(e.children||[]).map((function(e){return t(n,e)})),o=Object.keys(e.attributes||{}).reduce((function(t,n){var a=e.attributes[n];switch(n){case"class":t.attrs.className=a,delete e.attributes.class;break;case"style":t.attrs.style=a.split(";").map((function(t){return t.trim()})).filter((function(t){return t})).reduce((function(t,n){var e,a=n.indexOf(":"),r=je(n.slice(0,a)),o=n.slice(a+1).trim();return r.startsWith("webkit")?t[(e=r,e.charAt(0).toUpperCase()+e.slice(1))]=o:t[r]=o,t}),{});break;default:0===n.indexOf("aria-")||0===n.indexOf("data-")?t.attrs[n.toLowerCase()]=a:t.attrs[je(n)]=a}return t}),{attrs:{}}),i=a.style,s=void 0===i?{}:i,l=Ne(a,Ee);return o.attrs.style=Ae(Ae({},o.attrs.style),s),n.apply(void 0,[e.tag,Ae(Ae({},o.attrs),l)].concat(Se(r)))}.bind(null,ke.createElement)},9359:(t,n,e)=>{e.d(n,{A:()=>p});var a=e(9740),r=e(9850),o=e(5360),i=e.n(o),s=e(2176),l=e(1346),c=e.n(l),f=e(812);const u=["className","variant","aria-label"],d={"aria-label":i().string,onClick:i().func,variant:i().oneOf(["white"])},m=s.forwardRef(((t,n)=>{let{className:e,variant:o,"aria-label":i="Close"}=t,s=(0,r.A)(t,u);return(0,f.jsx)("button",(0,a.A)({ref:n,type:"button",className:c()("btn-close",o&&"btn-close-".concat(o),e),"aria-label":i},s))}));m.displayName="CloseButton",m.propTypes=d;const p=m}}]); -//# sourceMappingURL=813.cdbe58bb.chunk.js.map \ No newline at end of file diff --git a/apps/frontend/build/static/js/813.cdbe58bb.chunk.js.LICENSE.txt b/apps/frontend/build/static/js/813.cdbe58bb.chunk.js.LICENSE.txt deleted file mode 100644 index b8470477..00000000 --- a/apps/frontend/build/static/js/813.cdbe58bb.chunk.js.LICENSE.txt +++ /dev/null @@ -1,5 +0,0 @@ -/*! - * Font Awesome Free 6.7.2 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 2024 Fonticons, Inc. - */ diff --git a/apps/frontend/build/static/js/813.cdbe58bb.chunk.js.map b/apps/frontend/build/static/js/813.cdbe58bb.chunk.js.map deleted file mode 100644 index a79fed00..00000000 --- a/apps/frontend/build/static/js/813.cdbe58bb.chunk.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"static/js/813.cdbe58bb.chunk.js","mappings":"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","sources":["../../../node_modules/@fortawesome/fontawesome-svg-core/index.mjs","../../../node_modules/@fortawesome/react-fontawesome/index.es.js","../../../node_modules/react-bootstrap/esm/CloseButton.js"],"sourcesContent":["/*!\n * Font Awesome Free 6.7.2 by @fontawesome - https://fontawesome.com\n * License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License)\n * Copyright 2024 Fonticons, Inc.\n */\nfunction _defineProperty(e, r, t) {\n return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, {\n value: t,\n enumerable: !0,\n configurable: !0,\n writable: !0\n }) : e[r] = t, e;\n}\nfunction _inherits(t, e) {\n if (\"function\" != typeof e && null !== e) throw new TypeError(\"Super expression must either be null or a function\");\n t.prototype = Object.create(e && e.prototype, {\n constructor: {\n value: t,\n writable: !0,\n configurable: !0\n }\n }), Object.defineProperty(t, \"prototype\", {\n writable: !1\n }), e && _setPrototypeOf(t, e);\n}\nfunction ownKeys(e, r) {\n var t = Object.keys(e);\n if (Object.getOwnPropertySymbols) {\n var o = Object.getOwnPropertySymbols(e);\n r && (o = o.filter(function (r) {\n return Object.getOwnPropertyDescriptor(e, r).enumerable;\n })), t.push.apply(t, o);\n }\n return t;\n}\nfunction _objectSpread2(e) {\n for (var r = 1; r < arguments.length; r++) {\n var t = null != arguments[r] ? arguments[r] : {};\n r % 2 ? ownKeys(Object(t), !0).forEach(function (r) {\n _defineProperty(e, r, t[r]);\n }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) {\n Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r));\n });\n }\n return e;\n}\nfunction _setPrototypeOf(t, e) {\n return _setPrototypeOf = Object.setPrototypeOf ? Object.setPrototypeOf.bind() : function (t, e) {\n return t.__proto__ = e, t;\n }, _setPrototypeOf(t, e);\n}\nfunction _toPrimitive(t, r) {\n if (\"object\" != typeof t || !t) return t;\n var e = t[Symbol.toPrimitive];\n if (void 0 !== e) {\n var i = e.call(t, r || \"default\");\n if (\"object\" != typeof i) return i;\n throw new TypeError(\"@@toPrimitive must return a primitive value.\");\n }\n return (\"string\" === r ? String : Number)(t);\n}\nfunction _toPropertyKey(t) {\n var i = _toPrimitive(t, \"string\");\n return \"symbol\" == typeof i ? i : i + \"\";\n}\nfunction _wrapRegExp() {\n _wrapRegExp = function (e, r) {\n return new BabelRegExp(e, void 0, r);\n };\n var e = RegExp.prototype,\n r = new WeakMap();\n function BabelRegExp(e, t, p) {\n var o = RegExp(e, t);\n return r.set(o, p || r.get(e)), _setPrototypeOf(o, BabelRegExp.prototype);\n }\n function buildGroups(e, t) {\n var p = r.get(t);\n return Object.keys(p).reduce(function (r, t) {\n var o = p[t];\n if (\"number\" == typeof o) r[t] = e[o];else {\n for (var i = 0; void 0 === e[o[i]] && i + 1 < o.length;) i++;\n r[t] = e[o[i]];\n }\n return r;\n }, Object.create(null));\n }\n return _inherits(BabelRegExp, RegExp), BabelRegExp.prototype.exec = function (r) {\n var t = e.exec.call(this, r);\n if (t) {\n t.groups = buildGroups(t, this);\n var p = t.indices;\n p && (p.groups = buildGroups(p, this));\n }\n return t;\n }, BabelRegExp.prototype[Symbol.replace] = function (t, p) {\n if (\"string\" == typeof p) {\n var o = r.get(this);\n return e[Symbol.replace].call(this, t, p.replace(/\\$<([^>]+)>/g, function (e, r) {\n var t = o[r];\n return \"$\" + (Array.isArray(t) ? t.join(\"$\") : t);\n }));\n }\n if (\"function\" == typeof p) {\n var i = this;\n return e[Symbol.replace].call(this, t, function () {\n var e = arguments;\n return \"object\" != typeof e[e.length - 1] && (e = [].slice.call(e)).push(buildGroups(e, i)), p.apply(this, e);\n });\n }\n return e[Symbol.replace].call(this, t, p);\n }, _wrapRegExp.apply(this, arguments);\n}\n\nconst noop = () => {};\nlet _WINDOW = {};\nlet _DOCUMENT = {};\nlet _MUTATION_OBSERVER = null;\nlet _PERFORMANCE = {\n mark: noop,\n measure: noop\n};\ntry {\n if (typeof window !== 'undefined') _WINDOW = window;\n if (typeof document !== 'undefined') _DOCUMENT = document;\n if (typeof MutationObserver !== 'undefined') _MUTATION_OBSERVER = MutationObserver;\n if (typeof performance !== 'undefined') _PERFORMANCE = performance;\n} catch (e) {}\nconst {\n userAgent = ''\n} = _WINDOW.navigator || {};\nconst WINDOW = _WINDOW;\nconst DOCUMENT = _DOCUMENT;\nconst MUTATION_OBSERVER = _MUTATION_OBSERVER;\nconst PERFORMANCE = _PERFORMANCE;\nconst IS_BROWSER = !!WINDOW.document;\nconst IS_DOM = !!DOCUMENT.documentElement && !!DOCUMENT.head && typeof DOCUMENT.addEventListener === 'function' && typeof DOCUMENT.createElement === 'function';\nconst IS_IE = ~userAgent.indexOf('MSIE') || ~userAgent.indexOf('Trident/');\n\nvar p = /fa(s|r|l|t|d|dr|dl|dt|b|k|kd|ss|sr|sl|st|sds|sdr|sdl|sdt)?[\\-\\ ]/,\n g = /Font ?Awesome ?([56 ]*)(Solid|Regular|Light|Thin|Duotone|Brands|Free|Pro|Sharp Duotone|Sharp|Kit)?.*/i;\nvar S = {\n classic: {\n fa: \"solid\",\n fas: \"solid\",\n \"fa-solid\": \"solid\",\n far: \"regular\",\n \"fa-regular\": \"regular\",\n fal: \"light\",\n \"fa-light\": \"light\",\n fat: \"thin\",\n \"fa-thin\": \"thin\",\n fab: \"brands\",\n \"fa-brands\": \"brands\"\n },\n duotone: {\n fa: \"solid\",\n fad: \"solid\",\n \"fa-solid\": \"solid\",\n \"fa-duotone\": \"solid\",\n fadr: \"regular\",\n \"fa-regular\": \"regular\",\n fadl: \"light\",\n \"fa-light\": \"light\",\n fadt: \"thin\",\n \"fa-thin\": \"thin\"\n },\n sharp: {\n fa: \"solid\",\n fass: \"solid\",\n \"fa-solid\": \"solid\",\n fasr: \"regular\",\n \"fa-regular\": \"regular\",\n fasl: \"light\",\n \"fa-light\": \"light\",\n fast: \"thin\",\n \"fa-thin\": \"thin\"\n },\n \"sharp-duotone\": {\n fa: \"solid\",\n fasds: \"solid\",\n \"fa-solid\": \"solid\",\n fasdr: \"regular\",\n \"fa-regular\": \"regular\",\n fasdl: \"light\",\n \"fa-light\": \"light\",\n fasdt: \"thin\",\n \"fa-thin\": \"thin\"\n }\n },\n A = {\n GROUP: \"duotone-group\",\n SWAP_OPACITY: \"swap-opacity\",\n PRIMARY: \"primary\",\n SECONDARY: \"secondary\"\n },\n P = [\"fa-classic\", \"fa-duotone\", \"fa-sharp\", \"fa-sharp-duotone\"];\nvar s = \"classic\",\n t = \"duotone\",\n r = \"sharp\",\n o = \"sharp-duotone\",\n L = [s, t, r, o];\nvar G = {\n classic: {\n 900: \"fas\",\n 400: \"far\",\n normal: \"far\",\n 300: \"fal\",\n 100: \"fat\"\n },\n duotone: {\n 900: \"fad\",\n 400: \"fadr\",\n 300: \"fadl\",\n 100: \"fadt\"\n },\n sharp: {\n 900: \"fass\",\n 400: \"fasr\",\n 300: \"fasl\",\n 100: \"fast\"\n },\n \"sharp-duotone\": {\n 900: \"fasds\",\n 400: \"fasdr\",\n 300: \"fasdl\",\n 100: \"fasdt\"\n }\n };\nvar lt = {\n \"Font Awesome 6 Free\": {\n 900: \"fas\",\n 400: \"far\"\n },\n \"Font Awesome 6 Pro\": {\n 900: \"fas\",\n 400: \"far\",\n normal: \"far\",\n 300: \"fal\",\n 100: \"fat\"\n },\n \"Font Awesome 6 Brands\": {\n 400: \"fab\",\n normal: \"fab\"\n },\n \"Font Awesome 6 Duotone\": {\n 900: \"fad\",\n 400: \"fadr\",\n normal: \"fadr\",\n 300: \"fadl\",\n 100: \"fadt\"\n },\n \"Font Awesome 6 Sharp\": {\n 900: \"fass\",\n 400: \"fasr\",\n normal: \"fasr\",\n 300: \"fasl\",\n 100: \"fast\"\n },\n \"Font Awesome 6 Sharp Duotone\": {\n 900: \"fasds\",\n 400: \"fasdr\",\n normal: \"fasdr\",\n 300: \"fasdl\",\n 100: \"fasdt\"\n }\n };\nvar pt = new Map([[\"classic\", {\n defaultShortPrefixId: \"fas\",\n defaultStyleId: \"solid\",\n styleIds: [\"solid\", \"regular\", \"light\", \"thin\", \"brands\"],\n futureStyleIds: [],\n defaultFontWeight: 900\n }], [\"sharp\", {\n defaultShortPrefixId: \"fass\",\n defaultStyleId: \"solid\",\n styleIds: [\"solid\", \"regular\", \"light\", \"thin\"],\n futureStyleIds: [],\n defaultFontWeight: 900\n }], [\"duotone\", {\n defaultShortPrefixId: \"fad\",\n defaultStyleId: \"solid\",\n styleIds: [\"solid\", \"regular\", \"light\", \"thin\"],\n futureStyleIds: [],\n defaultFontWeight: 900\n }], [\"sharp-duotone\", {\n defaultShortPrefixId: \"fasds\",\n defaultStyleId: \"solid\",\n styleIds: [\"solid\", \"regular\", \"light\", \"thin\"],\n futureStyleIds: [],\n defaultFontWeight: 900\n }]]),\n xt = {\n classic: {\n solid: \"fas\",\n regular: \"far\",\n light: \"fal\",\n thin: \"fat\",\n brands: \"fab\"\n },\n duotone: {\n solid: \"fad\",\n regular: \"fadr\",\n light: \"fadl\",\n thin: \"fadt\"\n },\n sharp: {\n solid: \"fass\",\n regular: \"fasr\",\n light: \"fasl\",\n thin: \"fast\"\n },\n \"sharp-duotone\": {\n solid: \"fasds\",\n regular: \"fasdr\",\n light: \"fasdl\",\n thin: \"fasdt\"\n }\n };\nvar Ft = [\"fak\", \"fa-kit\", \"fakd\", \"fa-kit-duotone\"],\n St = {\n kit: {\n fak: \"kit\",\n \"fa-kit\": \"kit\"\n },\n \"kit-duotone\": {\n fakd: \"kit-duotone\",\n \"fa-kit-duotone\": \"kit-duotone\"\n }\n },\n At = [\"kit\"];\nvar Ct = {\n kit: {\n \"fa-kit\": \"fak\"\n },\n \"kit-duotone\": {\n \"fa-kit-duotone\": \"fakd\"\n }\n};\nvar Lt = [\"fak\", \"fakd\"],\n Wt = {\n kit: {\n fak: \"fa-kit\"\n },\n \"kit-duotone\": {\n fakd: \"fa-kit-duotone\"\n }\n };\nvar Et = {\n kit: {\n kit: \"fak\"\n },\n \"kit-duotone\": {\n \"kit-duotone\": \"fakd\"\n }\n };\n\nvar t$1 = {\n GROUP: \"duotone-group\",\n SWAP_OPACITY: \"swap-opacity\",\n PRIMARY: \"primary\",\n SECONDARY: \"secondary\"\n },\n r$1 = [\"fa-classic\", \"fa-duotone\", \"fa-sharp\", \"fa-sharp-duotone\"];\nvar bt$1 = [\"fak\", \"fa-kit\", \"fakd\", \"fa-kit-duotone\"];\nvar Yt = {\n \"Font Awesome Kit\": {\n 400: \"fak\",\n normal: \"fak\"\n },\n \"Font Awesome Kit Duotone\": {\n 400: \"fakd\",\n normal: \"fakd\"\n }\n };\nvar ua = {\n classic: {\n \"fa-brands\": \"fab\",\n \"fa-duotone\": \"fad\",\n \"fa-light\": \"fal\",\n \"fa-regular\": \"far\",\n \"fa-solid\": \"fas\",\n \"fa-thin\": \"fat\"\n },\n duotone: {\n \"fa-regular\": \"fadr\",\n \"fa-light\": \"fadl\",\n \"fa-thin\": \"fadt\"\n },\n sharp: {\n \"fa-solid\": \"fass\",\n \"fa-regular\": \"fasr\",\n \"fa-light\": \"fasl\",\n \"fa-thin\": \"fast\"\n },\n \"sharp-duotone\": {\n \"fa-solid\": \"fasds\",\n \"fa-regular\": \"fasdr\",\n \"fa-light\": \"fasdl\",\n \"fa-thin\": \"fasdt\"\n }\n },\n I$1 = {\n classic: [\"fas\", \"far\", \"fal\", \"fat\", \"fad\"],\n duotone: [\"fadr\", \"fadl\", \"fadt\"],\n sharp: [\"fass\", \"fasr\", \"fasl\", \"fast\"],\n \"sharp-duotone\": [\"fasds\", \"fasdr\", \"fasdl\", \"fasdt\"]\n },\n ga = {\n classic: {\n fab: \"fa-brands\",\n fad: \"fa-duotone\",\n fal: \"fa-light\",\n far: \"fa-regular\",\n fas: \"fa-solid\",\n fat: \"fa-thin\"\n },\n duotone: {\n fadr: \"fa-regular\",\n fadl: \"fa-light\",\n fadt: \"fa-thin\"\n },\n sharp: {\n fass: \"fa-solid\",\n fasr: \"fa-regular\",\n fasl: \"fa-light\",\n fast: \"fa-thin\"\n },\n \"sharp-duotone\": {\n fasds: \"fa-solid\",\n fasdr: \"fa-regular\",\n fasdl: \"fa-light\",\n fasdt: \"fa-thin\"\n }\n },\n x = [\"fa-solid\", \"fa-regular\", \"fa-light\", \"fa-thin\", \"fa-duotone\", \"fa-brands\"],\n Ia = [\"fa\", \"fas\", \"far\", \"fal\", \"fat\", \"fad\", \"fadr\", \"fadl\", \"fadt\", \"fab\", \"fass\", \"fasr\", \"fasl\", \"fast\", \"fasds\", \"fasdr\", \"fasdl\", \"fasdt\", ...r$1, ...x],\n m$1 = [\"solid\", \"regular\", \"light\", \"thin\", \"duotone\", \"brands\"],\n c$1 = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10],\n F$1 = c$1.concat([11, 12, 13, 14, 15, 16, 17, 18, 19, 20]),\n ma = [...Object.keys(I$1), ...m$1, \"2xs\", \"xs\", \"sm\", \"lg\", \"xl\", \"2xl\", \"beat\", \"border\", \"fade\", \"beat-fade\", \"bounce\", \"flip-both\", \"flip-horizontal\", \"flip-vertical\", \"flip\", \"fw\", \"inverse\", \"layers-counter\", \"layers-text\", \"layers\", \"li\", \"pull-left\", \"pull-right\", \"pulse\", \"rotate-180\", \"rotate-270\", \"rotate-90\", \"rotate-by\", \"shake\", \"spin-pulse\", \"spin-reverse\", \"spin\", \"stack-1x\", \"stack-2x\", \"stack\", \"ul\", t$1.GROUP, t$1.SWAP_OPACITY, t$1.PRIMARY, t$1.SECONDARY].concat(c$1.map(a => \"\".concat(a, \"x\"))).concat(F$1.map(a => \"w-\".concat(a)));\nvar wa = {\n \"Font Awesome 5 Free\": {\n 900: \"fas\",\n 400: \"far\"\n },\n \"Font Awesome 5 Pro\": {\n 900: \"fas\",\n 400: \"far\",\n normal: \"far\",\n 300: \"fal\"\n },\n \"Font Awesome 5 Brands\": {\n 400: \"fab\",\n normal: \"fab\"\n },\n \"Font Awesome 5 Duotone\": {\n 900: \"fad\"\n }\n };\n\nconst NAMESPACE_IDENTIFIER = '___FONT_AWESOME___';\nconst UNITS_IN_GRID = 16;\nconst DEFAULT_CSS_PREFIX = 'fa';\nconst DEFAULT_REPLACEMENT_CLASS = 'svg-inline--fa';\nconst DATA_FA_I2SVG = 'data-fa-i2svg';\nconst DATA_FA_PSEUDO_ELEMENT = 'data-fa-pseudo-element';\nconst DATA_FA_PSEUDO_ELEMENT_PENDING = 'data-fa-pseudo-element-pending';\nconst DATA_PREFIX = 'data-prefix';\nconst DATA_ICON = 'data-icon';\nconst HTML_CLASS_I2SVG_BASE_CLASS = 'fontawesome-i2svg';\nconst MUTATION_APPROACH_ASYNC = 'async';\nconst TAGNAMES_TO_SKIP_FOR_PSEUDOELEMENTS = ['HTML', 'HEAD', 'STYLE', 'SCRIPT'];\nconst PRODUCTION = (() => {\n try {\n return process.env.NODE_ENV === 'production';\n } catch (e$$1) {\n return false;\n }\n})();\nfunction familyProxy(obj) {\n // Defaults to the classic family if family is not available\n return new Proxy(obj, {\n get(target, prop) {\n return prop in target ? target[prop] : target[s];\n }\n });\n}\nconst _PREFIX_TO_STYLE = _objectSpread2({}, S);\n\n// We changed FACSSClassesToStyleId in the icons repo to be canonical and as such, \"classic\" family does not have any\n// duotone styles. But we do still need duotone in _PREFIX_TO_STYLE below, so we are manually adding\n// {'fa-duotone': 'duotone'}\n_PREFIX_TO_STYLE[s] = _objectSpread2(_objectSpread2(_objectSpread2(_objectSpread2({}, {\n 'fa-duotone': 'duotone'\n}), S[s]), St['kit']), St['kit-duotone']);\nconst PREFIX_TO_STYLE = familyProxy(_PREFIX_TO_STYLE);\nconst _STYLE_TO_PREFIX = _objectSpread2({}, xt);\n\n// We changed FAStyleIdToShortPrefixId in the icons repo to be canonical and as such, \"classic\" family does not have any\n// duotone styles. But we do still need duotone in _STYLE_TO_PREFIX below, so we are manually adding {duotone: 'fad'}\n_STYLE_TO_PREFIX[s] = _objectSpread2(_objectSpread2(_objectSpread2(_objectSpread2({}, {\n duotone: 'fad'\n}), _STYLE_TO_PREFIX[s]), Et['kit']), Et['kit-duotone']);\nconst STYLE_TO_PREFIX = familyProxy(_STYLE_TO_PREFIX);\nconst _PREFIX_TO_LONG_STYLE = _objectSpread2({}, ga);\n_PREFIX_TO_LONG_STYLE[s] = _objectSpread2(_objectSpread2({}, _PREFIX_TO_LONG_STYLE[s]), Wt['kit']);\nconst PREFIX_TO_LONG_STYLE = familyProxy(_PREFIX_TO_LONG_STYLE);\nconst _LONG_STYLE_TO_PREFIX = _objectSpread2({}, ua);\n_LONG_STYLE_TO_PREFIX[s] = _objectSpread2(_objectSpread2({}, _LONG_STYLE_TO_PREFIX[s]), Ct['kit']);\nconst LONG_STYLE_TO_PREFIX = familyProxy(_LONG_STYLE_TO_PREFIX);\nconst ICON_SELECTION_SYNTAX_PATTERN = p; // eslint-disable-line no-useless-escape\n\nconst LAYERS_TEXT_CLASSNAME = 'fa-layers-text';\nconst FONT_FAMILY_PATTERN = g;\nconst _FONT_WEIGHT_TO_PREFIX = _objectSpread2({}, G);\nconst FONT_WEIGHT_TO_PREFIX = familyProxy(_FONT_WEIGHT_TO_PREFIX);\nconst ATTRIBUTES_WATCHED_FOR_MUTATION = ['class', 'data-prefix', 'data-icon', 'data-fa-transform', 'data-fa-mask'];\nconst DUOTONE_CLASSES = A;\nconst RESERVED_CLASSES = [...At, ...ma];\n\nconst initial = WINDOW.FontAwesomeConfig || {};\nfunction getAttrConfig(attr) {\n var element = DOCUMENT.querySelector('script[' + attr + ']');\n if (element) {\n return element.getAttribute(attr);\n }\n}\nfunction coerce(val) {\n // Getting an empty string will occur if the attribute is set on the HTML tag but without a value\n // We'll assume that this is an indication that it should be toggled to true\n if (val === '') return true;\n if (val === 'false') return false;\n if (val === 'true') return true;\n return val;\n}\nif (DOCUMENT && typeof DOCUMENT.querySelector === 'function') {\n const attrs = [['data-family-prefix', 'familyPrefix'], ['data-css-prefix', 'cssPrefix'], ['data-family-default', 'familyDefault'], ['data-style-default', 'styleDefault'], ['data-replacement-class', 'replacementClass'], ['data-auto-replace-svg', 'autoReplaceSvg'], ['data-auto-add-css', 'autoAddCss'], ['data-auto-a11y', 'autoA11y'], ['data-search-pseudo-elements', 'searchPseudoElements'], ['data-observe-mutations', 'observeMutations'], ['data-mutate-approach', 'mutateApproach'], ['data-keep-original-source', 'keepOriginalSource'], ['data-measure-performance', 'measurePerformance'], ['data-show-missing-icons', 'showMissingIcons']];\n attrs.forEach(_ref => {\n let [attr, key] = _ref;\n const val = coerce(getAttrConfig(attr));\n if (val !== undefined && val !== null) {\n initial[key] = val;\n }\n });\n}\nconst _default = {\n styleDefault: 'solid',\n familyDefault: s,\n cssPrefix: DEFAULT_CSS_PREFIX,\n replacementClass: DEFAULT_REPLACEMENT_CLASS,\n autoReplaceSvg: true,\n autoAddCss: true,\n autoA11y: true,\n searchPseudoElements: false,\n observeMutations: true,\n mutateApproach: 'async',\n keepOriginalSource: true,\n measurePerformance: false,\n showMissingIcons: true\n};\n\n// familyPrefix is deprecated but we must still support it if present\nif (initial.familyPrefix) {\n initial.cssPrefix = initial.familyPrefix;\n}\nconst _config = _objectSpread2(_objectSpread2({}, _default), initial);\nif (!_config.autoReplaceSvg) _config.observeMutations = false;\nconst config = {};\nObject.keys(_default).forEach(key => {\n Object.defineProperty(config, key, {\n enumerable: true,\n set: function (val) {\n _config[key] = val;\n _onChangeCb.forEach(cb => cb(config));\n },\n get: function () {\n return _config[key];\n }\n });\n});\n\n// familyPrefix is deprecated as of 6.2.0 and should be removed in 7.0.0\nObject.defineProperty(config, 'familyPrefix', {\n enumerable: true,\n set: function (val) {\n _config.cssPrefix = val;\n _onChangeCb.forEach(cb => cb(config));\n },\n get: function () {\n return _config.cssPrefix;\n }\n});\nWINDOW.FontAwesomeConfig = config;\nconst _onChangeCb = [];\nfunction onChange(cb) {\n _onChangeCb.push(cb);\n return () => {\n _onChangeCb.splice(_onChangeCb.indexOf(cb), 1);\n };\n}\n\nconst d$2 = UNITS_IN_GRID;\nconst meaninglessTransform = {\n size: 16,\n x: 0,\n y: 0,\n rotate: 0,\n flipX: false,\n flipY: false\n};\nfunction insertCss(css) {\n if (!css || !IS_DOM) {\n return;\n }\n const style = DOCUMENT.createElement('style');\n style.setAttribute('type', 'text/css');\n style.innerHTML = css;\n const headChildren = DOCUMENT.head.childNodes;\n let beforeChild = null;\n for (let i = headChildren.length - 1; i > -1; i--) {\n const child = headChildren[i];\n const tagName = (child.tagName || '').toUpperCase();\n if (['STYLE', 'LINK'].indexOf(tagName) > -1) {\n beforeChild = child;\n }\n }\n DOCUMENT.head.insertBefore(style, beforeChild);\n return css;\n}\nconst idPool = '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ';\nfunction nextUniqueId() {\n let size = 12;\n let id = '';\n while (size-- > 0) {\n id += idPool[Math.random() * 62 | 0];\n }\n return id;\n}\nfunction toArray(obj) {\n const array = [];\n for (let i = (obj || []).length >>> 0; i--;) {\n array[i] = obj[i];\n }\n return array;\n}\nfunction classArray(node) {\n if (node.classList) {\n return toArray(node.classList);\n } else {\n return (node.getAttribute('class') || '').split(' ').filter(i => i);\n }\n}\nfunction htmlEscape(str) {\n return \"\".concat(str).replace(/&/g, '&').replace(/\"/g, '"').replace(/'/g, ''').replace(//g, '>');\n}\nfunction joinAttributes(attributes) {\n return Object.keys(attributes || {}).reduce((acc, attributeName) => {\n return acc + \"\".concat(attributeName, \"=\\\"\").concat(htmlEscape(attributes[attributeName]), \"\\\" \");\n }, '').trim();\n}\nfunction joinStyles(styles) {\n return Object.keys(styles || {}).reduce((acc, styleName) => {\n return acc + \"\".concat(styleName, \": \").concat(styles[styleName].trim(), \";\");\n }, '');\n}\nfunction transformIsMeaningful(transform) {\n return transform.size !== meaninglessTransform.size || transform.x !== meaninglessTransform.x || transform.y !== meaninglessTransform.y || transform.rotate !== meaninglessTransform.rotate || transform.flipX || transform.flipY;\n}\nfunction transformForSvg(_ref) {\n let {\n transform,\n containerWidth,\n iconWidth\n } = _ref;\n const outer = {\n transform: \"translate(\".concat(containerWidth / 2, \" 256)\")\n };\n const innerTranslate = \"translate(\".concat(transform.x * 32, \", \").concat(transform.y * 32, \") \");\n const innerScale = \"scale(\".concat(transform.size / 16 * (transform.flipX ? -1 : 1), \", \").concat(transform.size / 16 * (transform.flipY ? -1 : 1), \") \");\n const innerRotate = \"rotate(\".concat(transform.rotate, \" 0 0)\");\n const inner = {\n transform: \"\".concat(innerTranslate, \" \").concat(innerScale, \" \").concat(innerRotate)\n };\n const path = {\n transform: \"translate(\".concat(iconWidth / 2 * -1, \" -256)\")\n };\n return {\n outer,\n inner,\n path\n };\n}\nfunction transformForCss(_ref2) {\n let {\n transform,\n width = UNITS_IN_GRID,\n height = UNITS_IN_GRID,\n startCentered = false\n } = _ref2;\n let val = '';\n if (startCentered && IS_IE) {\n val += \"translate(\".concat(transform.x / d$2 - width / 2, \"em, \").concat(transform.y / d$2 - height / 2, \"em) \");\n } else if (startCentered) {\n val += \"translate(calc(-50% + \".concat(transform.x / d$2, \"em), calc(-50% + \").concat(transform.y / d$2, \"em)) \");\n } else {\n val += \"translate(\".concat(transform.x / d$2, \"em, \").concat(transform.y / d$2, \"em) \");\n }\n val += \"scale(\".concat(transform.size / d$2 * (transform.flipX ? -1 : 1), \", \").concat(transform.size / d$2 * (transform.flipY ? -1 : 1), \") \");\n val += \"rotate(\".concat(transform.rotate, \"deg) \");\n return val;\n}\n\nvar baseStyles = \":root, :host {\\n --fa-font-solid: normal 900 1em/1 \\\"Font Awesome 6 Free\\\";\\n --fa-font-regular: normal 400 1em/1 \\\"Font Awesome 6 Free\\\";\\n --fa-font-light: normal 300 1em/1 \\\"Font Awesome 6 Pro\\\";\\n --fa-font-thin: normal 100 1em/1 \\\"Font Awesome 6 Pro\\\";\\n --fa-font-duotone: normal 900 1em/1 \\\"Font Awesome 6 Duotone\\\";\\n --fa-font-duotone-regular: normal 400 1em/1 \\\"Font Awesome 6 Duotone\\\";\\n --fa-font-duotone-light: normal 300 1em/1 \\\"Font Awesome 6 Duotone\\\";\\n --fa-font-duotone-thin: normal 100 1em/1 \\\"Font Awesome 6 Duotone\\\";\\n --fa-font-brands: normal 400 1em/1 \\\"Font Awesome 6 Brands\\\";\\n --fa-font-sharp-solid: normal 900 1em/1 \\\"Font Awesome 6 Sharp\\\";\\n --fa-font-sharp-regular: normal 400 1em/1 \\\"Font Awesome 6 Sharp\\\";\\n --fa-font-sharp-light: normal 300 1em/1 \\\"Font Awesome 6 Sharp\\\";\\n --fa-font-sharp-thin: normal 100 1em/1 \\\"Font Awesome 6 Sharp\\\";\\n --fa-font-sharp-duotone-solid: normal 900 1em/1 \\\"Font Awesome 6 Sharp Duotone\\\";\\n --fa-font-sharp-duotone-regular: normal 400 1em/1 \\\"Font Awesome 6 Sharp Duotone\\\";\\n --fa-font-sharp-duotone-light: normal 300 1em/1 \\\"Font Awesome 6 Sharp Duotone\\\";\\n --fa-font-sharp-duotone-thin: normal 100 1em/1 \\\"Font Awesome 6 Sharp Duotone\\\";\\n}\\n\\nsvg:not(:root).svg-inline--fa, svg:not(:host).svg-inline--fa {\\n overflow: visible;\\n box-sizing: content-box;\\n}\\n\\n.svg-inline--fa {\\n display: var(--fa-display, inline-block);\\n height: 1em;\\n overflow: visible;\\n vertical-align: -0.125em;\\n}\\n.svg-inline--fa.fa-2xs {\\n vertical-align: 0.1em;\\n}\\n.svg-inline--fa.fa-xs {\\n vertical-align: 0em;\\n}\\n.svg-inline--fa.fa-sm {\\n vertical-align: -0.0714285705em;\\n}\\n.svg-inline--fa.fa-lg {\\n vertical-align: -0.2em;\\n}\\n.svg-inline--fa.fa-xl {\\n vertical-align: -0.25em;\\n}\\n.svg-inline--fa.fa-2xl {\\n vertical-align: -0.3125em;\\n}\\n.svg-inline--fa.fa-pull-left {\\n margin-right: var(--fa-pull-margin, 0.3em);\\n width: auto;\\n}\\n.svg-inline--fa.fa-pull-right {\\n margin-left: var(--fa-pull-margin, 0.3em);\\n width: auto;\\n}\\n.svg-inline--fa.fa-li {\\n width: var(--fa-li-width, 2em);\\n top: 0.25em;\\n}\\n.svg-inline--fa.fa-fw {\\n width: var(--fa-fw-width, 1.25em);\\n}\\n\\n.fa-layers svg.svg-inline--fa {\\n bottom: 0;\\n left: 0;\\n margin: auto;\\n position: absolute;\\n right: 0;\\n top: 0;\\n}\\n\\n.fa-layers-counter, .fa-layers-text {\\n display: inline-block;\\n position: absolute;\\n text-align: center;\\n}\\n\\n.fa-layers {\\n display: inline-block;\\n height: 1em;\\n position: relative;\\n text-align: center;\\n vertical-align: -0.125em;\\n width: 1em;\\n}\\n.fa-layers svg.svg-inline--fa {\\n transform-origin: center center;\\n}\\n\\n.fa-layers-text {\\n left: 50%;\\n top: 50%;\\n transform: translate(-50%, -50%);\\n transform-origin: center center;\\n}\\n\\n.fa-layers-counter {\\n background-color: var(--fa-counter-background-color, #ff253a);\\n border-radius: var(--fa-counter-border-radius, 1em);\\n box-sizing: border-box;\\n color: var(--fa-inverse, #fff);\\n line-height: var(--fa-counter-line-height, 1);\\n max-width: var(--fa-counter-max-width, 5em);\\n min-width: var(--fa-counter-min-width, 1.5em);\\n overflow: hidden;\\n padding: var(--fa-counter-padding, 0.25em 0.5em);\\n right: var(--fa-right, 0);\\n text-overflow: ellipsis;\\n top: var(--fa-top, 0);\\n transform: scale(var(--fa-counter-scale, 0.25));\\n transform-origin: top right;\\n}\\n\\n.fa-layers-bottom-right {\\n bottom: var(--fa-bottom, 0);\\n right: var(--fa-right, 0);\\n top: auto;\\n transform: scale(var(--fa-layers-scale, 0.25));\\n transform-origin: bottom right;\\n}\\n\\n.fa-layers-bottom-left {\\n bottom: var(--fa-bottom, 0);\\n left: var(--fa-left, 0);\\n right: auto;\\n top: auto;\\n transform: scale(var(--fa-layers-scale, 0.25));\\n transform-origin: bottom left;\\n}\\n\\n.fa-layers-top-right {\\n top: var(--fa-top, 0);\\n right: var(--fa-right, 0);\\n transform: scale(var(--fa-layers-scale, 0.25));\\n transform-origin: top right;\\n}\\n\\n.fa-layers-top-left {\\n left: var(--fa-left, 0);\\n right: auto;\\n top: var(--fa-top, 0);\\n transform: scale(var(--fa-layers-scale, 0.25));\\n transform-origin: top left;\\n}\\n\\n.fa-1x {\\n font-size: 1em;\\n}\\n\\n.fa-2x {\\n font-size: 2em;\\n}\\n\\n.fa-3x {\\n font-size: 3em;\\n}\\n\\n.fa-4x {\\n font-size: 4em;\\n}\\n\\n.fa-5x {\\n font-size: 5em;\\n}\\n\\n.fa-6x {\\n font-size: 6em;\\n}\\n\\n.fa-7x {\\n font-size: 7em;\\n}\\n\\n.fa-8x {\\n font-size: 8em;\\n}\\n\\n.fa-9x {\\n font-size: 9em;\\n}\\n\\n.fa-10x {\\n font-size: 10em;\\n}\\n\\n.fa-2xs {\\n font-size: 0.625em;\\n line-height: 0.1em;\\n vertical-align: 0.225em;\\n}\\n\\n.fa-xs {\\n font-size: 0.75em;\\n line-height: 0.0833333337em;\\n vertical-align: 0.125em;\\n}\\n\\n.fa-sm {\\n font-size: 0.875em;\\n line-height: 0.0714285718em;\\n vertical-align: 0.0535714295em;\\n}\\n\\n.fa-lg {\\n font-size: 1.25em;\\n line-height: 0.05em;\\n vertical-align: -0.075em;\\n}\\n\\n.fa-xl {\\n font-size: 1.5em;\\n line-height: 0.0416666682em;\\n vertical-align: -0.125em;\\n}\\n\\n.fa-2xl {\\n font-size: 2em;\\n line-height: 0.03125em;\\n vertical-align: -0.1875em;\\n}\\n\\n.fa-fw {\\n text-align: center;\\n width: 1.25em;\\n}\\n\\n.fa-ul {\\n list-style-type: none;\\n margin-left: var(--fa-li-margin, 2.5em);\\n padding-left: 0;\\n}\\n.fa-ul > li {\\n position: relative;\\n}\\n\\n.fa-li {\\n left: calc(-1 * var(--fa-li-width, 2em));\\n position: absolute;\\n text-align: center;\\n width: var(--fa-li-width, 2em);\\n line-height: inherit;\\n}\\n\\n.fa-border {\\n border-color: var(--fa-border-color, #eee);\\n border-radius: var(--fa-border-radius, 0.1em);\\n border-style: var(--fa-border-style, solid);\\n border-width: var(--fa-border-width, 0.08em);\\n padding: var(--fa-border-padding, 0.2em 0.25em 0.15em);\\n}\\n\\n.fa-pull-left {\\n float: left;\\n margin-right: var(--fa-pull-margin, 0.3em);\\n}\\n\\n.fa-pull-right {\\n float: right;\\n margin-left: var(--fa-pull-margin, 0.3em);\\n}\\n\\n.fa-beat {\\n animation-name: fa-beat;\\n animation-delay: var(--fa-animation-delay, 0s);\\n animation-direction: var(--fa-animation-direction, normal);\\n animation-duration: var(--fa-animation-duration, 1s);\\n animation-iteration-count: var(--fa-animation-iteration-count, infinite);\\n animation-timing-function: var(--fa-animation-timing, ease-in-out);\\n}\\n\\n.fa-bounce {\\n animation-name: fa-bounce;\\n animation-delay: var(--fa-animation-delay, 0s);\\n animation-direction: var(--fa-animation-direction, normal);\\n animation-duration: var(--fa-animation-duration, 1s);\\n animation-iteration-count: var(--fa-animation-iteration-count, infinite);\\n animation-timing-function: var(--fa-animation-timing, cubic-bezier(0.28, 0.84, 0.42, 1));\\n}\\n\\n.fa-fade {\\n animation-name: fa-fade;\\n animation-delay: var(--fa-animation-delay, 0s);\\n animation-direction: var(--fa-animation-direction, normal);\\n animation-duration: var(--fa-animation-duration, 1s);\\n animation-iteration-count: var(--fa-animation-iteration-count, infinite);\\n animation-timing-function: var(--fa-animation-timing, cubic-bezier(0.4, 0, 0.6, 1));\\n}\\n\\n.fa-beat-fade {\\n animation-name: fa-beat-fade;\\n animation-delay: var(--fa-animation-delay, 0s);\\n animation-direction: var(--fa-animation-direction, normal);\\n animation-duration: var(--fa-animation-duration, 1s);\\n animation-iteration-count: var(--fa-animation-iteration-count, infinite);\\n animation-timing-function: var(--fa-animation-timing, cubic-bezier(0.4, 0, 0.6, 1));\\n}\\n\\n.fa-flip {\\n animation-name: fa-flip;\\n animation-delay: var(--fa-animation-delay, 0s);\\n animation-direction: var(--fa-animation-direction, normal);\\n animation-duration: var(--fa-animation-duration, 1s);\\n animation-iteration-count: var(--fa-animation-iteration-count, infinite);\\n animation-timing-function: var(--fa-animation-timing, ease-in-out);\\n}\\n\\n.fa-shake {\\n animation-name: fa-shake;\\n animation-delay: var(--fa-animation-delay, 0s);\\n animation-direction: var(--fa-animation-direction, normal);\\n animation-duration: var(--fa-animation-duration, 1s);\\n animation-iteration-count: var(--fa-animation-iteration-count, infinite);\\n animation-timing-function: var(--fa-animation-timing, linear);\\n}\\n\\n.fa-spin {\\n animation-name: fa-spin;\\n animation-delay: var(--fa-animation-delay, 0s);\\n animation-direction: var(--fa-animation-direction, normal);\\n animation-duration: var(--fa-animation-duration, 2s);\\n animation-iteration-count: var(--fa-animation-iteration-count, infinite);\\n animation-timing-function: var(--fa-animation-timing, linear);\\n}\\n\\n.fa-spin-reverse {\\n --fa-animation-direction: reverse;\\n}\\n\\n.fa-pulse,\\n.fa-spin-pulse {\\n animation-name: fa-spin;\\n animation-direction: var(--fa-animation-direction, normal);\\n animation-duration: var(--fa-animation-duration, 1s);\\n animation-iteration-count: var(--fa-animation-iteration-count, infinite);\\n animation-timing-function: var(--fa-animation-timing, steps(8));\\n}\\n\\n@media (prefers-reduced-motion: reduce) {\\n .fa-beat,\\n.fa-bounce,\\n.fa-fade,\\n.fa-beat-fade,\\n.fa-flip,\\n.fa-pulse,\\n.fa-shake,\\n.fa-spin,\\n.fa-spin-pulse {\\n animation-delay: -1ms;\\n animation-duration: 1ms;\\n animation-iteration-count: 1;\\n transition-delay: 0s;\\n transition-duration: 0s;\\n }\\n}\\n@keyframes fa-beat {\\n 0%, 90% {\\n transform: scale(1);\\n }\\n 45% {\\n transform: scale(var(--fa-beat-scale, 1.25));\\n }\\n}\\n@keyframes fa-bounce {\\n 0% {\\n transform: scale(1, 1) translateY(0);\\n }\\n 10% {\\n transform: scale(var(--fa-bounce-start-scale-x, 1.1), var(--fa-bounce-start-scale-y, 0.9)) translateY(0);\\n }\\n 30% {\\n transform: scale(var(--fa-bounce-jump-scale-x, 0.9), var(--fa-bounce-jump-scale-y, 1.1)) translateY(var(--fa-bounce-height, -0.5em));\\n }\\n 50% {\\n transform: scale(var(--fa-bounce-land-scale-x, 1.05), var(--fa-bounce-land-scale-y, 0.95)) translateY(0);\\n }\\n 57% {\\n transform: scale(1, 1) translateY(var(--fa-bounce-rebound, -0.125em));\\n }\\n 64% {\\n transform: scale(1, 1) translateY(0);\\n }\\n 100% {\\n transform: scale(1, 1) translateY(0);\\n }\\n}\\n@keyframes fa-fade {\\n 50% {\\n opacity: var(--fa-fade-opacity, 0.4);\\n }\\n}\\n@keyframes fa-beat-fade {\\n 0%, 100% {\\n opacity: var(--fa-beat-fade-opacity, 0.4);\\n transform: scale(1);\\n }\\n 50% {\\n opacity: 1;\\n transform: scale(var(--fa-beat-fade-scale, 1.125));\\n }\\n}\\n@keyframes fa-flip {\\n 50% {\\n transform: rotate3d(var(--fa-flip-x, 0), var(--fa-flip-y, 1), var(--fa-flip-z, 0), var(--fa-flip-angle, -180deg));\\n }\\n}\\n@keyframes fa-shake {\\n 0% {\\n transform: rotate(-15deg);\\n }\\n 4% {\\n transform: rotate(15deg);\\n }\\n 8%, 24% {\\n transform: rotate(-18deg);\\n }\\n 12%, 28% {\\n transform: rotate(18deg);\\n }\\n 16% {\\n transform: rotate(-22deg);\\n }\\n 20% {\\n transform: rotate(22deg);\\n }\\n 32% {\\n transform: rotate(-12deg);\\n }\\n 36% {\\n transform: rotate(12deg);\\n }\\n 40%, 100% {\\n transform: rotate(0deg);\\n }\\n}\\n@keyframes fa-spin {\\n 0% {\\n transform: rotate(0deg);\\n }\\n 100% {\\n transform: rotate(360deg);\\n }\\n}\\n.fa-rotate-90 {\\n transform: rotate(90deg);\\n}\\n\\n.fa-rotate-180 {\\n transform: rotate(180deg);\\n}\\n\\n.fa-rotate-270 {\\n transform: rotate(270deg);\\n}\\n\\n.fa-flip-horizontal {\\n transform: scale(-1, 1);\\n}\\n\\n.fa-flip-vertical {\\n transform: scale(1, -1);\\n}\\n\\n.fa-flip-both,\\n.fa-flip-horizontal.fa-flip-vertical {\\n transform: scale(-1, -1);\\n}\\n\\n.fa-rotate-by {\\n transform: rotate(var(--fa-rotate-angle, 0));\\n}\\n\\n.fa-stack {\\n display: inline-block;\\n vertical-align: middle;\\n height: 2em;\\n position: relative;\\n width: 2.5em;\\n}\\n\\n.fa-stack-1x,\\n.fa-stack-2x {\\n bottom: 0;\\n left: 0;\\n margin: auto;\\n position: absolute;\\n right: 0;\\n top: 0;\\n z-index: var(--fa-stack-z-index, auto);\\n}\\n\\n.svg-inline--fa.fa-stack-1x {\\n height: 1em;\\n width: 1.25em;\\n}\\n.svg-inline--fa.fa-stack-2x {\\n height: 2em;\\n width: 2.5em;\\n}\\n\\n.fa-inverse {\\n color: var(--fa-inverse, #fff);\\n}\\n\\n.sr-only,\\n.fa-sr-only {\\n position: absolute;\\n width: 1px;\\n height: 1px;\\n padding: 0;\\n margin: -1px;\\n overflow: hidden;\\n clip: rect(0, 0, 0, 0);\\n white-space: nowrap;\\n border-width: 0;\\n}\\n\\n.sr-only-focusable:not(:focus),\\n.fa-sr-only-focusable:not(:focus) {\\n position: absolute;\\n width: 1px;\\n height: 1px;\\n padding: 0;\\n margin: -1px;\\n overflow: hidden;\\n clip: rect(0, 0, 0, 0);\\n white-space: nowrap;\\n border-width: 0;\\n}\\n\\n.svg-inline--fa .fa-primary {\\n fill: var(--fa-primary-color, currentColor);\\n opacity: var(--fa-primary-opacity, 1);\\n}\\n\\n.svg-inline--fa .fa-secondary {\\n fill: var(--fa-secondary-color, currentColor);\\n opacity: var(--fa-secondary-opacity, 0.4);\\n}\\n\\n.svg-inline--fa.fa-swap-opacity .fa-primary {\\n opacity: var(--fa-secondary-opacity, 0.4);\\n}\\n\\n.svg-inline--fa.fa-swap-opacity .fa-secondary {\\n opacity: var(--fa-primary-opacity, 1);\\n}\\n\\n.svg-inline--fa mask .fa-primary,\\n.svg-inline--fa mask .fa-secondary {\\n fill: black;\\n}\";\n\nfunction css() {\n const dcp = DEFAULT_CSS_PREFIX;\n const drc = DEFAULT_REPLACEMENT_CLASS;\n const fp = config.cssPrefix;\n const rc = config.replacementClass;\n let s = baseStyles;\n if (fp !== dcp || rc !== drc) {\n const dPatt = new RegExp(\"\\\\.\".concat(dcp, \"\\\\-\"), 'g');\n const customPropPatt = new RegExp(\"\\\\--\".concat(dcp, \"\\\\-\"), 'g');\n const rPatt = new RegExp(\"\\\\.\".concat(drc), 'g');\n s = s.replace(dPatt, \".\".concat(fp, \"-\")).replace(customPropPatt, \"--\".concat(fp, \"-\")).replace(rPatt, \".\".concat(rc));\n }\n return s;\n}\nlet _cssInserted = false;\nfunction ensureCss() {\n if (config.autoAddCss && !_cssInserted) {\n insertCss(css());\n _cssInserted = true;\n }\n}\nvar InjectCSS = {\n mixout() {\n return {\n dom: {\n css,\n insertCss: ensureCss\n }\n };\n },\n hooks() {\n return {\n beforeDOMElementCreation() {\n ensureCss();\n },\n beforeI2svg() {\n ensureCss();\n }\n };\n }\n};\n\nconst w = WINDOW || {};\nif (!w[NAMESPACE_IDENTIFIER]) w[NAMESPACE_IDENTIFIER] = {};\nif (!w[NAMESPACE_IDENTIFIER].styles) w[NAMESPACE_IDENTIFIER].styles = {};\nif (!w[NAMESPACE_IDENTIFIER].hooks) w[NAMESPACE_IDENTIFIER].hooks = {};\nif (!w[NAMESPACE_IDENTIFIER].shims) w[NAMESPACE_IDENTIFIER].shims = [];\nvar namespace = w[NAMESPACE_IDENTIFIER];\n\nconst functions = [];\nconst listener = function () {\n DOCUMENT.removeEventListener('DOMContentLoaded', listener);\n loaded = 1;\n functions.map(fn => fn());\n};\nlet loaded = false;\nif (IS_DOM) {\n loaded = (DOCUMENT.documentElement.doScroll ? /^loaded|^c/ : /^loaded|^i|^c/).test(DOCUMENT.readyState);\n if (!loaded) DOCUMENT.addEventListener('DOMContentLoaded', listener);\n}\nfunction domready (fn) {\n if (!IS_DOM) return;\n loaded ? setTimeout(fn, 0) : functions.push(fn);\n}\n\nfunction toHtml(abstractNodes) {\n const {\n tag,\n attributes = {},\n children = []\n } = abstractNodes;\n if (typeof abstractNodes === 'string') {\n return htmlEscape(abstractNodes);\n } else {\n return \"<\".concat(tag, \" \").concat(joinAttributes(attributes), \">\").concat(children.map(toHtml).join(''), \"\");\n }\n}\n\nfunction iconFromMapping(mapping, prefix, iconName) {\n if (mapping && mapping[prefix] && mapping[prefix][iconName]) {\n return {\n prefix,\n iconName,\n icon: mapping[prefix][iconName]\n };\n }\n}\n\n/**\n * Internal helper to bind a function known to have 4 arguments\n * to a given context.\n */\nvar bindInternal4 = function bindInternal4(func, thisContext) {\n return function (a, b, c, d) {\n return func.call(thisContext, a, b, c, d);\n };\n};\n\n/**\n * # Reduce\n *\n * A fast object `.reduce()` implementation.\n *\n * @param {Object} subject The object to reduce over.\n * @param {Function} fn The reducer function.\n * @param {mixed} initialValue The initial value for the reducer, defaults to subject[0].\n * @param {Object} thisContext The context for the reducer.\n * @return {mixed} The final result.\n */\nvar reduce = function fastReduceObject(subject, fn, initialValue, thisContext) {\n var keys = Object.keys(subject),\n length = keys.length,\n iterator = thisContext !== undefined ? bindInternal4(fn, thisContext) : fn,\n i,\n key,\n result;\n if (initialValue === undefined) {\n i = 1;\n result = subject[keys[0]];\n } else {\n i = 0;\n result = initialValue;\n }\n for (; i < length; i++) {\n key = keys[i];\n result = iterator(result, subject[key], key, subject);\n }\n return result;\n};\n\n/**\n * ucs2decode() and codePointAt() are both works of Mathias Bynens and licensed under MIT\n *\n * Copyright Mathias Bynens \n\n * Permission is hereby granted, free of charge, to any person obtaining\n * a copy of this software and associated documentation files (the\n * \"Software\"), to deal in the Software without restriction, including\n * without limitation the rights to use, copy, modify, merge, publish,\n * distribute, sublicense, and/or sell copies of the Software, and to\n * permit persons to whom the Software is furnished to do so, subject to\n * the following conditions:\n\n * The above copyright notice and this permission notice shall be\n * included in all copies or substantial portions of the Software.\n\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND,\n * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND\n * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE\n * LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION\n * OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION\n * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\n */\n\nfunction ucs2decode(string) {\n const output = [];\n let counter = 0;\n const length = string.length;\n while (counter < length) {\n const value = string.charCodeAt(counter++);\n if (value >= 0xD800 && value <= 0xDBFF && counter < length) {\n const extra = string.charCodeAt(counter++);\n if ((extra & 0xFC00) == 0xDC00) {\n // eslint-disable-line eqeqeq\n output.push(((value & 0x3FF) << 10) + (extra & 0x3FF) + 0x10000);\n } else {\n output.push(value);\n counter--;\n }\n } else {\n output.push(value);\n }\n }\n return output;\n}\nfunction toHex(unicode) {\n const decoded = ucs2decode(unicode);\n return decoded.length === 1 ? decoded[0].toString(16) : null;\n}\nfunction codePointAt(string, index) {\n const size = string.length;\n let first = string.charCodeAt(index);\n let second;\n if (first >= 0xD800 && first <= 0xDBFF && size > index + 1) {\n second = string.charCodeAt(index + 1);\n if (second >= 0xDC00 && second <= 0xDFFF) {\n return (first - 0xD800) * 0x400 + second - 0xDC00 + 0x10000;\n }\n }\n return first;\n}\n\nfunction normalizeIcons(icons) {\n return Object.keys(icons).reduce((acc, iconName) => {\n const icon = icons[iconName];\n const expanded = !!icon.icon;\n if (expanded) {\n acc[icon.iconName] = icon.icon;\n } else {\n acc[iconName] = icon;\n }\n return acc;\n }, {});\n}\nfunction defineIcons(prefix, icons) {\n let params = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};\n const {\n skipHooks = false\n } = params;\n const normalized = normalizeIcons(icons);\n if (typeof namespace.hooks.addPack === 'function' && !skipHooks) {\n namespace.hooks.addPack(prefix, normalizeIcons(icons));\n } else {\n namespace.styles[prefix] = _objectSpread2(_objectSpread2({}, namespace.styles[prefix] || {}), normalized);\n }\n\n /**\n * Font Awesome 4 used the prefix of `fa` for all icons. With the introduction\n * of new styles we needed to differentiate between them. Prefix `fa` is now an alias\n * for `fas` so we'll ease the upgrade process for our users by automatically defining\n * this as well.\n */\n if (prefix === 'fas') {\n defineIcons('fa', icons);\n }\n}\n\nconst duotonePathRe = [/*#__PURE__*/_wrapRegExp(/path d=\"([^\"]+)\".*path d=\"([^\"]+)\"/, {\n d1: 1,\n d2: 2\n}), /*#__PURE__*/_wrapRegExp(/path class=\"([^\"]+)\".*d=\"([^\"]+)\".*path class=\"([^\"]+)\".*d=\"([^\"]+)\"/, {\n cls1: 1,\n d1: 2,\n cls2: 3,\n d2: 4\n}), /*#__PURE__*/_wrapRegExp(/path class=\"([^\"]+)\".*d=\"([^\"]+)\"/, {\n cls1: 1,\n d1: 2\n})];\n\nconst {\n styles,\n shims\n} = namespace;\nconst FAMILY_NAMES = Object.keys(PREFIX_TO_LONG_STYLE);\nconst PREFIXES_FOR_FAMILY = FAMILY_NAMES.reduce((acc, familyId) => {\n acc[familyId] = Object.keys(PREFIX_TO_LONG_STYLE[familyId]);\n return acc;\n}, {});\nlet _defaultUsablePrefix = null;\nlet _byUnicode = {};\nlet _byLigature = {};\nlet _byOldName = {};\nlet _byOldUnicode = {};\nlet _byAlias = {};\nfunction isReserved(name) {\n return ~RESERVED_CLASSES.indexOf(name);\n}\nfunction getIconName(cssPrefix, cls) {\n const parts = cls.split('-');\n const prefix = parts[0];\n const iconName = parts.slice(1).join('-');\n if (prefix === cssPrefix && iconName !== '' && !isReserved(iconName)) {\n return iconName;\n } else {\n return null;\n }\n}\nconst build = () => {\n const lookup = reducer => {\n return reduce(styles, (o$$1, style, prefix) => {\n o$$1[prefix] = reduce(style, reducer, {});\n return o$$1;\n }, {});\n };\n _byUnicode = lookup((acc, icon, iconName) => {\n if (icon[3]) {\n acc[icon[3]] = iconName;\n }\n if (icon[2]) {\n const aliases = icon[2].filter(a$$1 => {\n return typeof a$$1 === 'number';\n });\n aliases.forEach(alias => {\n acc[alias.toString(16)] = iconName;\n });\n }\n return acc;\n });\n _byLigature = lookup((acc, icon, iconName) => {\n acc[iconName] = iconName;\n if (icon[2]) {\n const aliases = icon[2].filter(a$$1 => {\n return typeof a$$1 === 'string';\n });\n aliases.forEach(alias => {\n acc[alias] = iconName;\n });\n }\n return acc;\n });\n _byAlias = lookup((acc, icon, iconName) => {\n const aliases = icon[2];\n acc[iconName] = iconName;\n aliases.forEach(alias => {\n acc[alias] = iconName;\n });\n return acc;\n });\n\n // If we have a Kit, we can't determine if regular is available since we\n // could be auto-fetching it. We'll have to assume that it is available.\n const hasRegular = 'far' in styles || config.autoFetchSvg;\n const shimLookups = reduce(shims, (acc, shim) => {\n const maybeNameMaybeUnicode = shim[0];\n let prefix = shim[1];\n const iconName = shim[2];\n if (prefix === 'far' && !hasRegular) {\n prefix = 'fas';\n }\n if (typeof maybeNameMaybeUnicode === 'string') {\n acc.names[maybeNameMaybeUnicode] = {\n prefix,\n iconName\n };\n }\n if (typeof maybeNameMaybeUnicode === 'number') {\n acc.unicodes[maybeNameMaybeUnicode.toString(16)] = {\n prefix,\n iconName\n };\n }\n return acc;\n }, {\n names: {},\n unicodes: {}\n });\n _byOldName = shimLookups.names;\n _byOldUnicode = shimLookups.unicodes;\n _defaultUsablePrefix = getCanonicalPrefix(config.styleDefault, {\n family: config.familyDefault\n });\n};\nonChange(c$$1 => {\n _defaultUsablePrefix = getCanonicalPrefix(c$$1.styleDefault, {\n family: config.familyDefault\n });\n});\nbuild();\nfunction byUnicode(prefix, unicode) {\n return (_byUnicode[prefix] || {})[unicode];\n}\nfunction byLigature(prefix, ligature) {\n return (_byLigature[prefix] || {})[ligature];\n}\nfunction byAlias(prefix, alias) {\n return (_byAlias[prefix] || {})[alias];\n}\nfunction byOldName(name) {\n return _byOldName[name] || {\n prefix: null,\n iconName: null\n };\n}\nfunction byOldUnicode(unicode) {\n const oldUnicode = _byOldUnicode[unicode];\n const newUnicode = byUnicode('fas', unicode);\n return oldUnicode || (newUnicode ? {\n prefix: 'fas',\n iconName: newUnicode\n } : null) || {\n prefix: null,\n iconName: null\n };\n}\nfunction getDefaultUsablePrefix() {\n return _defaultUsablePrefix;\n}\nconst emptyCanonicalIcon = () => {\n return {\n prefix: null,\n iconName: null,\n rest: []\n };\n};\nfunction getFamilyId(values) {\n let family = s;\n const famProps = FAMILY_NAMES.reduce((acc, familyId) => {\n acc[familyId] = \"\".concat(config.cssPrefix, \"-\").concat(familyId);\n return acc;\n }, {});\n L.forEach(familyId => {\n if (values.includes(famProps[familyId]) || values.some(v$$1 => PREFIXES_FOR_FAMILY[familyId].includes(v$$1))) {\n family = familyId;\n }\n });\n return family;\n}\nfunction getCanonicalPrefix(styleOrPrefix) {\n let params = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n const {\n family = s\n } = params;\n const style = PREFIX_TO_STYLE[family][styleOrPrefix];\n\n // handles the exception of passing in only a family of 'duotone' with no style\n if (family === t && !styleOrPrefix) {\n return 'fad';\n }\n const prefix = STYLE_TO_PREFIX[family][styleOrPrefix] || STYLE_TO_PREFIX[family][style];\n const defined = styleOrPrefix in namespace.styles ? styleOrPrefix : null;\n const result = prefix || defined || null;\n return result;\n}\nfunction moveNonFaClassesToRest(classNames) {\n let rest = [];\n let iconName = null;\n classNames.forEach(cls => {\n const result = getIconName(config.cssPrefix, cls);\n if (result) {\n iconName = result;\n } else if (cls) {\n rest.push(cls);\n }\n });\n return {\n iconName,\n rest\n };\n}\nfunction sortedUniqueValues(arr) {\n return arr.sort().filter((value, index, arr) => {\n return arr.indexOf(value) === index;\n });\n}\nfunction getCanonicalIcon(values) {\n let params = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n const {\n skipLookups = false\n } = params;\n let givenPrefix = null;\n const faCombinedClasses = Ia.concat(bt$1);\n const faStyleOrFamilyClasses = sortedUniqueValues(values.filter(cls => faCombinedClasses.includes(cls)));\n const nonStyleOrFamilyClasses = sortedUniqueValues(values.filter(cls => !Ia.includes(cls)));\n const faStyles = faStyleOrFamilyClasses.filter(cls => {\n givenPrefix = cls;\n return !P.includes(cls);\n });\n const [styleFromValues = null] = faStyles;\n const family = getFamilyId(faStyleOrFamilyClasses);\n const canonical = _objectSpread2(_objectSpread2({}, moveNonFaClassesToRest(nonStyleOrFamilyClasses)), {}, {\n prefix: getCanonicalPrefix(styleFromValues, {\n family\n })\n });\n return _objectSpread2(_objectSpread2(_objectSpread2({}, canonical), getDefaultCanonicalPrefix({\n values,\n family,\n styles,\n config,\n canonical,\n givenPrefix\n })), applyShimAndAlias(skipLookups, givenPrefix, canonical));\n}\nfunction applyShimAndAlias(skipLookups, givenPrefix, canonical) {\n let {\n prefix,\n iconName\n } = canonical;\n if (skipLookups || !prefix || !iconName) {\n return {\n prefix,\n iconName\n };\n }\n const shim = givenPrefix === 'fa' ? byOldName(iconName) : {};\n const aliasIconName = byAlias(prefix, iconName);\n iconName = shim.iconName || aliasIconName || iconName;\n prefix = shim.prefix || prefix;\n if (prefix === 'far' && !styles['far'] && styles['fas'] && !config.autoFetchSvg) {\n // Allow a fallback from the regular style to solid if regular is not available\n // but only if we aren't auto-fetching SVGs\n prefix = 'fas';\n }\n return {\n prefix,\n iconName\n };\n}\nconst newCanonicalFamilies = L.filter(familyId => {\n return familyId !== s || familyId !== t;\n});\nconst newCanonicalStyles = Object.keys(ga).filter(key => key !== s).map(key => Object.keys(ga[key])).flat();\nfunction getDefaultCanonicalPrefix(prefixOptions) {\n const {\n values,\n family,\n canonical,\n givenPrefix = '',\n styles = {},\n config: config$$1 = {}\n } = prefixOptions;\n const isDuotoneFamily = family === t;\n const valuesHasDuotone = values.includes('fa-duotone') || values.includes('fad');\n const defaultFamilyIsDuotone = config$$1.familyDefault === 'duotone';\n const canonicalPrefixIsDuotone = canonical.prefix === 'fad' || canonical.prefix === 'fa-duotone';\n if (!isDuotoneFamily && (valuesHasDuotone || defaultFamilyIsDuotone || canonicalPrefixIsDuotone)) {\n canonical.prefix = 'fad';\n }\n if (values.includes('fa-brands') || values.includes('fab')) {\n canonical.prefix = 'fab';\n }\n if (!canonical.prefix && newCanonicalFamilies.includes(family)) {\n const validPrefix = Object.keys(styles).find(key => newCanonicalStyles.includes(key));\n if (validPrefix || config$$1.autoFetchSvg) {\n const defaultPrefix = pt.get(family).defaultShortPrefixId;\n canonical.prefix = defaultPrefix;\n canonical.iconName = byAlias(canonical.prefix, canonical.iconName) || canonical.iconName;\n }\n }\n if (canonical.prefix === 'fa' || givenPrefix === 'fa') {\n // The fa prefix is not canonical. So if it has made it through until this point\n // we will shift it to the correct prefix.\n canonical.prefix = getDefaultUsablePrefix() || 'fas';\n }\n return canonical;\n}\n\nclass Library {\n constructor() {\n this.definitions = {};\n }\n add() {\n for (var _len = arguments.length, definitions = new Array(_len), _key = 0; _key < _len; _key++) {\n definitions[_key] = arguments[_key];\n }\n const additions = definitions.reduce(this._pullDefinitions, {});\n Object.keys(additions).forEach(key => {\n this.definitions[key] = _objectSpread2(_objectSpread2({}, this.definitions[key] || {}), additions[key]);\n defineIcons(key, additions[key]);\n\n // TODO can we stop doing this? We can't get the icons by 'fa-solid' any longer so this probably needs to change\n const longPrefix = PREFIX_TO_LONG_STYLE[s][key];\n if (longPrefix) defineIcons(longPrefix, additions[key]);\n build();\n });\n }\n reset() {\n this.definitions = {};\n }\n _pullDefinitions(additions, definition) {\n const normalized = definition.prefix && definition.iconName && definition.icon ? {\n 0: definition\n } : definition;\n Object.keys(normalized).map(key => {\n const {\n prefix,\n iconName,\n icon\n } = normalized[key];\n const aliases = icon[2];\n if (!additions[prefix]) additions[prefix] = {};\n if (aliases.length > 0) {\n aliases.forEach(alias => {\n if (typeof alias === 'string') {\n additions[prefix][alias] = icon;\n }\n });\n }\n additions[prefix][iconName] = icon;\n });\n return additions;\n }\n}\n\nlet _plugins = [];\nlet _hooks = {};\nconst providers = {};\nconst defaultProviderKeys = Object.keys(providers);\nfunction registerPlugins(nextPlugins, _ref) {\n let {\n mixoutsTo: obj\n } = _ref;\n _plugins = nextPlugins;\n _hooks = {};\n Object.keys(providers).forEach(k => {\n if (defaultProviderKeys.indexOf(k) === -1) {\n delete providers[k];\n }\n });\n _plugins.forEach(plugin => {\n const mixout = plugin.mixout ? plugin.mixout() : {};\n Object.keys(mixout).forEach(tk => {\n if (typeof mixout[tk] === 'function') {\n obj[tk] = mixout[tk];\n }\n if (typeof mixout[tk] === 'object') {\n Object.keys(mixout[tk]).forEach(sk => {\n if (!obj[tk]) {\n obj[tk] = {};\n }\n obj[tk][sk] = mixout[tk][sk];\n });\n }\n });\n if (plugin.hooks) {\n const hooks = plugin.hooks();\n Object.keys(hooks).forEach(hook => {\n if (!_hooks[hook]) {\n _hooks[hook] = [];\n }\n _hooks[hook].push(hooks[hook]);\n });\n }\n if (plugin.provides) {\n plugin.provides(providers);\n }\n });\n return obj;\n}\nfunction chainHooks(hook, accumulator) {\n for (var _len = arguments.length, args = new Array(_len > 2 ? _len - 2 : 0), _key = 2; _key < _len; _key++) {\n args[_key - 2] = arguments[_key];\n }\n const hookFns = _hooks[hook] || [];\n hookFns.forEach(hookFn => {\n accumulator = hookFn.apply(null, [accumulator, ...args]); // eslint-disable-line no-useless-call\n });\n return accumulator;\n}\nfunction callHooks(hook) {\n for (var _len2 = arguments.length, args = new Array(_len2 > 1 ? _len2 - 1 : 0), _key2 = 1; _key2 < _len2; _key2++) {\n args[_key2 - 1] = arguments[_key2];\n }\n const hookFns = _hooks[hook] || [];\n hookFns.forEach(hookFn => {\n hookFn.apply(null, args);\n });\n return undefined;\n}\nfunction callProvided() {\n const hook = arguments[0];\n const args = Array.prototype.slice.call(arguments, 1);\n return providers[hook] ? providers[hook].apply(null, args) : undefined;\n}\n\nfunction findIconDefinition(iconLookup) {\n if (iconLookup.prefix === 'fa') {\n iconLookup.prefix = 'fas';\n }\n let {\n iconName\n } = iconLookup;\n const prefix = iconLookup.prefix || getDefaultUsablePrefix();\n if (!iconName) return;\n iconName = byAlias(prefix, iconName) || iconName;\n return iconFromMapping(library.definitions, prefix, iconName) || iconFromMapping(namespace.styles, prefix, iconName);\n}\nconst library = new Library();\nconst noAuto = () => {\n config.autoReplaceSvg = false;\n config.observeMutations = false;\n callHooks('noAuto');\n};\nconst dom = {\n i2svg: function () {\n let params = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n if (IS_DOM) {\n callHooks('beforeI2svg', params);\n callProvided('pseudoElements2svg', params);\n return callProvided('i2svg', params);\n } else {\n return Promise.reject(new Error('Operation requires a DOM of some kind.'));\n }\n },\n watch: function () {\n let params = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n const {\n autoReplaceSvgRoot\n } = params;\n if (config.autoReplaceSvg === false) {\n config.autoReplaceSvg = true;\n }\n config.observeMutations = true;\n domready(() => {\n autoReplace({\n autoReplaceSvgRoot\n });\n callHooks('watch', params);\n });\n }\n};\nconst parse = {\n icon: icon => {\n if (icon === null) {\n return null;\n }\n if (typeof icon === 'object' && icon.prefix && icon.iconName) {\n return {\n prefix: icon.prefix,\n iconName: byAlias(icon.prefix, icon.iconName) || icon.iconName\n };\n }\n if (Array.isArray(icon) && icon.length === 2) {\n const iconName = icon[1].indexOf('fa-') === 0 ? icon[1].slice(3) : icon[1];\n const prefix = getCanonicalPrefix(icon[0]);\n return {\n prefix,\n iconName: byAlias(prefix, iconName) || iconName\n };\n }\n if (typeof icon === 'string' && (icon.indexOf(\"\".concat(config.cssPrefix, \"-\")) > -1 || icon.match(ICON_SELECTION_SYNTAX_PATTERN))) {\n const canonicalIcon = getCanonicalIcon(icon.split(' '), {\n skipLookups: true\n });\n return {\n prefix: canonicalIcon.prefix || getDefaultUsablePrefix(),\n iconName: byAlias(canonicalIcon.prefix, canonicalIcon.iconName) || canonicalIcon.iconName\n };\n }\n if (typeof icon === 'string') {\n const prefix = getDefaultUsablePrefix();\n return {\n prefix,\n iconName: byAlias(prefix, icon) || icon\n };\n }\n }\n};\nconst api = {\n noAuto,\n config,\n dom,\n parse,\n library,\n findIconDefinition,\n toHtml\n};\nconst autoReplace = function () {\n let params = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n const {\n autoReplaceSvgRoot = DOCUMENT\n } = params;\n if ((Object.keys(namespace.styles).length > 0 || config.autoFetchSvg) && IS_DOM && config.autoReplaceSvg) api.dom.i2svg({\n node: autoReplaceSvgRoot\n });\n};\n\nfunction domVariants(val, abstractCreator) {\n Object.defineProperty(val, 'abstract', {\n get: abstractCreator\n });\n Object.defineProperty(val, 'html', {\n get: function () {\n return val.abstract.map(a => toHtml(a));\n }\n });\n Object.defineProperty(val, 'node', {\n get: function () {\n if (!IS_DOM) return;\n const container = DOCUMENT.createElement('div');\n container.innerHTML = val.html;\n return container.children;\n }\n });\n return val;\n}\n\nfunction asIcon (_ref) {\n let {\n children,\n main,\n mask,\n attributes,\n styles,\n transform\n } = _ref;\n if (transformIsMeaningful(transform) && main.found && !mask.found) {\n const {\n width,\n height\n } = main;\n const offset = {\n x: width / height / 2,\n y: 0.5\n };\n attributes['style'] = joinStyles(_objectSpread2(_objectSpread2({}, styles), {}, {\n 'transform-origin': \"\".concat(offset.x + transform.x / 16, \"em \").concat(offset.y + transform.y / 16, \"em\")\n }));\n }\n return [{\n tag: 'svg',\n attributes,\n children\n }];\n}\n\nfunction asSymbol (_ref) {\n let {\n prefix,\n iconName,\n children,\n attributes,\n symbol\n } = _ref;\n const id = symbol === true ? \"\".concat(prefix, \"-\").concat(config.cssPrefix, \"-\").concat(iconName) : symbol;\n return [{\n tag: 'svg',\n attributes: {\n style: 'display: none;'\n },\n children: [{\n tag: 'symbol',\n attributes: _objectSpread2(_objectSpread2({}, attributes), {}, {\n id\n }),\n children\n }]\n }];\n}\n\nfunction makeInlineSvgAbstract(params) {\n const {\n icons: {\n main,\n mask\n },\n prefix,\n iconName,\n transform,\n symbol,\n title,\n maskId,\n titleId,\n extra,\n watchable = false\n } = params;\n const {\n width,\n height\n } = mask.found ? mask : main;\n const isUploadedIcon = Lt.includes(prefix);\n const attrClass = [config.replacementClass, iconName ? \"\".concat(config.cssPrefix, \"-\").concat(iconName) : ''].filter(c$$1 => extra.classes.indexOf(c$$1) === -1).filter(c$$1 => c$$1 !== '' || !!c$$1).concat(extra.classes).join(' ');\n let content = {\n children: [],\n attributes: _objectSpread2(_objectSpread2({}, extra.attributes), {}, {\n 'data-prefix': prefix,\n 'data-icon': iconName,\n 'class': attrClass,\n 'role': extra.attributes.role || 'img',\n 'xmlns': 'http://www.w3.org/2000/svg',\n 'viewBox': \"0 0 \".concat(width, \" \").concat(height)\n })\n };\n const uploadedIconWidthStyle = isUploadedIcon && !~extra.classes.indexOf('fa-fw') ? {\n width: \"\".concat(width / height * 16 * 0.0625, \"em\")\n } : {};\n if (watchable) {\n content.attributes[DATA_FA_I2SVG] = '';\n }\n if (title) {\n content.children.push({\n tag: 'title',\n attributes: {\n id: content.attributes['aria-labelledby'] || \"title-\".concat(titleId || nextUniqueId())\n },\n children: [title]\n });\n delete content.attributes.title;\n }\n const args = _objectSpread2(_objectSpread2({}, content), {}, {\n prefix,\n iconName,\n main,\n mask,\n maskId,\n transform,\n symbol,\n styles: _objectSpread2(_objectSpread2({}, uploadedIconWidthStyle), extra.styles)\n });\n const {\n children,\n attributes\n } = mask.found && main.found ? callProvided('generateAbstractMask', args) || {\n children: [],\n attributes: {}\n } : callProvided('generateAbstractIcon', args) || {\n children: [],\n attributes: {}\n };\n args.children = children;\n args.attributes = attributes;\n if (symbol) {\n return asSymbol(args);\n } else {\n return asIcon(args);\n }\n}\nfunction makeLayersTextAbstract(params) {\n const {\n content,\n width,\n height,\n transform,\n title,\n extra,\n watchable = false\n } = params;\n const attributes = _objectSpread2(_objectSpread2(_objectSpread2({}, extra.attributes), title ? {\n 'title': title\n } : {}), {}, {\n 'class': extra.classes.join(' ')\n });\n if (watchable) {\n attributes[DATA_FA_I2SVG] = '';\n }\n const styles = _objectSpread2({}, extra.styles);\n if (transformIsMeaningful(transform)) {\n styles['transform'] = transformForCss({\n transform,\n startCentered: true,\n width,\n height\n });\n styles['-webkit-transform'] = styles['transform'];\n }\n const styleString = joinStyles(styles);\n if (styleString.length > 0) {\n attributes['style'] = styleString;\n }\n const val = [];\n val.push({\n tag: 'span',\n attributes,\n children: [content]\n });\n if (title) {\n val.push({\n tag: 'span',\n attributes: {\n class: 'sr-only'\n },\n children: [title]\n });\n }\n return val;\n}\nfunction makeLayersCounterAbstract(params) {\n const {\n content,\n title,\n extra\n } = params;\n const attributes = _objectSpread2(_objectSpread2(_objectSpread2({}, extra.attributes), title ? {\n 'title': title\n } : {}), {}, {\n 'class': extra.classes.join(' ')\n });\n const styleString = joinStyles(extra.styles);\n if (styleString.length > 0) {\n attributes['style'] = styleString;\n }\n const val = [];\n val.push({\n tag: 'span',\n attributes,\n children: [content]\n });\n if (title) {\n val.push({\n tag: 'span',\n attributes: {\n class: 'sr-only'\n },\n children: [title]\n });\n }\n return val;\n}\n\nconst {\n styles: styles$1\n} = namespace;\nfunction asFoundIcon(icon) {\n const width = icon[0];\n const height = icon[1];\n const [vectorData] = icon.slice(4);\n let element = null;\n if (Array.isArray(vectorData)) {\n element = {\n tag: 'g',\n attributes: {\n class: \"\".concat(config.cssPrefix, \"-\").concat(DUOTONE_CLASSES.GROUP)\n },\n children: [{\n tag: 'path',\n attributes: {\n class: \"\".concat(config.cssPrefix, \"-\").concat(DUOTONE_CLASSES.SECONDARY),\n fill: 'currentColor',\n d: vectorData[0]\n }\n }, {\n tag: 'path',\n attributes: {\n class: \"\".concat(config.cssPrefix, \"-\").concat(DUOTONE_CLASSES.PRIMARY),\n fill: 'currentColor',\n d: vectorData[1]\n }\n }]\n };\n } else {\n element = {\n tag: 'path',\n attributes: {\n fill: 'currentColor',\n d: vectorData\n }\n };\n }\n return {\n found: true,\n width,\n height,\n icon: element\n };\n}\nconst missingIconResolutionMixin = {\n found: false,\n width: 512,\n height: 512\n};\nfunction maybeNotifyMissing(iconName, prefix) {\n if (!PRODUCTION && !config.showMissingIcons && iconName) {\n console.error(\"Icon with name \\\"\".concat(iconName, \"\\\" and prefix \\\"\").concat(prefix, \"\\\" is missing.\"));\n }\n}\nfunction findIcon(iconName, prefix) {\n let givenPrefix = prefix;\n if (prefix === 'fa' && config.styleDefault !== null) {\n prefix = getDefaultUsablePrefix();\n }\n return new Promise((resolve, reject) => {\n if (givenPrefix === 'fa') {\n const shim = byOldName(iconName) || {};\n iconName = shim.iconName || iconName;\n prefix = shim.prefix || prefix;\n }\n if (iconName && prefix && styles$1[prefix] && styles$1[prefix][iconName]) {\n const icon = styles$1[prefix][iconName];\n return resolve(asFoundIcon(icon));\n }\n maybeNotifyMissing(iconName, prefix);\n resolve(_objectSpread2(_objectSpread2({}, missingIconResolutionMixin), {}, {\n icon: config.showMissingIcons && iconName ? callProvided('missingIconAbstract') || {} : {}\n }));\n });\n}\n\nconst noop$1 = () => {};\nconst p$2 = config.measurePerformance && PERFORMANCE && PERFORMANCE.mark && PERFORMANCE.measure ? PERFORMANCE : {\n mark: noop$1,\n measure: noop$1\n};\nconst preamble = \"FA \\\"6.7.2\\\"\";\nconst begin = name => {\n p$2.mark(\"\".concat(preamble, \" \").concat(name, \" begins\"));\n return () => end(name);\n};\nconst end = name => {\n p$2.mark(\"\".concat(preamble, \" \").concat(name, \" ends\"));\n p$2.measure(\"\".concat(preamble, \" \").concat(name), \"\".concat(preamble, \" \").concat(name, \" begins\"), \"\".concat(preamble, \" \").concat(name, \" ends\"));\n};\nvar perf = {\n begin,\n end\n};\n\nconst noop$2 = () => {};\nfunction isWatched(node) {\n const i2svg = node.getAttribute ? node.getAttribute(DATA_FA_I2SVG) : null;\n return typeof i2svg === 'string';\n}\nfunction hasPrefixAndIcon(node) {\n const prefix = node.getAttribute ? node.getAttribute(DATA_PREFIX) : null;\n const icon = node.getAttribute ? node.getAttribute(DATA_ICON) : null;\n return prefix && icon;\n}\nfunction hasBeenReplaced(node) {\n return node && node.classList && node.classList.contains && node.classList.contains(config.replacementClass);\n}\nfunction getMutator() {\n if (config.autoReplaceSvg === true) {\n return mutators.replace;\n }\n const mutator = mutators[config.autoReplaceSvg];\n return mutator || mutators.replace;\n}\nfunction createElementNS(tag) {\n return DOCUMENT.createElementNS('http://www.w3.org/2000/svg', tag);\n}\nfunction createElement(tag) {\n return DOCUMENT.createElement(tag);\n}\nfunction convertSVG(abstractObj) {\n let params = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n const {\n ceFn = abstractObj.tag === 'svg' ? createElementNS : createElement\n } = params;\n if (typeof abstractObj === 'string') {\n return DOCUMENT.createTextNode(abstractObj);\n }\n const tag = ceFn(abstractObj.tag);\n Object.keys(abstractObj.attributes || []).forEach(function (key) {\n tag.setAttribute(key, abstractObj.attributes[key]);\n });\n const children = abstractObj.children || [];\n children.forEach(function (child) {\n tag.appendChild(convertSVG(child, {\n ceFn\n }));\n });\n return tag;\n}\nfunction nodeAsComment(node) {\n let comment = \" \".concat(node.outerHTML, \" \");\n /* BEGIN.ATTRIBUTION */\n comment = \"\".concat(comment, \"Font Awesome fontawesome.com \");\n /* END.ATTRIBUTION */\n return comment;\n}\nconst mutators = {\n replace: function (mutation) {\n const node = mutation[0];\n if (node.parentNode) {\n mutation[1].forEach(abstract => {\n node.parentNode.insertBefore(convertSVG(abstract), node);\n });\n if (node.getAttribute(DATA_FA_I2SVG) === null && config.keepOriginalSource) {\n let comment = DOCUMENT.createComment(nodeAsComment(node));\n node.parentNode.replaceChild(comment, node);\n } else {\n node.remove();\n }\n }\n },\n nest: function (mutation) {\n const node = mutation[0];\n const abstract = mutation[1];\n\n // If we already have a replaced node we do not want to continue nesting within it.\n // Short-circuit to the standard replacement\n if (~classArray(node).indexOf(config.replacementClass)) {\n return mutators.replace(mutation);\n }\n const forSvg = new RegExp(\"\".concat(config.cssPrefix, \"-.*\"));\n delete abstract[0].attributes.id;\n if (abstract[0].attributes.class) {\n const splitClasses = abstract[0].attributes.class.split(' ').reduce((acc, cls) => {\n if (cls === config.replacementClass || cls.match(forSvg)) {\n acc.toSvg.push(cls);\n } else {\n acc.toNode.push(cls);\n }\n return acc;\n }, {\n toNode: [],\n toSvg: []\n });\n abstract[0].attributes.class = splitClasses.toSvg.join(' ');\n if (splitClasses.toNode.length === 0) {\n node.removeAttribute('class');\n } else {\n node.setAttribute('class', splitClasses.toNode.join(' '));\n }\n }\n const newInnerHTML = abstract.map(a => toHtml(a)).join('\\n');\n node.setAttribute(DATA_FA_I2SVG, '');\n node.innerHTML = newInnerHTML;\n }\n};\nfunction performOperationSync(op) {\n op();\n}\nfunction perform(mutations, callback) {\n const callbackFunction = typeof callback === 'function' ? callback : noop$2;\n if (mutations.length === 0) {\n callbackFunction();\n } else {\n let frame = performOperationSync;\n if (config.mutateApproach === MUTATION_APPROACH_ASYNC) {\n frame = WINDOW.requestAnimationFrame || performOperationSync;\n }\n frame(() => {\n const mutator = getMutator();\n const mark = perf.begin('mutate');\n mutations.map(mutator);\n mark();\n callbackFunction();\n });\n }\n}\nlet disabled = false;\nfunction disableObservation() {\n disabled = true;\n}\nfunction enableObservation() {\n disabled = false;\n}\nlet mo = null;\nfunction observe(options) {\n if (!MUTATION_OBSERVER) {\n return;\n }\n if (!config.observeMutations) {\n return;\n }\n const {\n treeCallback = noop$2,\n nodeCallback = noop$2,\n pseudoElementsCallback = noop$2,\n observeMutationsRoot = DOCUMENT\n } = options;\n mo = new MUTATION_OBSERVER(objects => {\n if (disabled) return;\n const defaultPrefix = getDefaultUsablePrefix();\n toArray(objects).forEach(mutationRecord => {\n if (mutationRecord.type === 'childList' && mutationRecord.addedNodes.length > 0 && !isWatched(mutationRecord.addedNodes[0])) {\n if (config.searchPseudoElements) {\n pseudoElementsCallback(mutationRecord.target);\n }\n treeCallback(mutationRecord.target);\n }\n if (mutationRecord.type === 'attributes' && mutationRecord.target.parentNode && config.searchPseudoElements) {\n pseudoElementsCallback(mutationRecord.target.parentNode);\n }\n if (mutationRecord.type === 'attributes' && isWatched(mutationRecord.target) && ~ATTRIBUTES_WATCHED_FOR_MUTATION.indexOf(mutationRecord.attributeName)) {\n if (mutationRecord.attributeName === 'class' && hasPrefixAndIcon(mutationRecord.target)) {\n const {\n prefix,\n iconName\n } = getCanonicalIcon(classArray(mutationRecord.target));\n mutationRecord.target.setAttribute(DATA_PREFIX, prefix || defaultPrefix);\n if (iconName) mutationRecord.target.setAttribute(DATA_ICON, iconName);\n } else if (hasBeenReplaced(mutationRecord.target)) {\n nodeCallback(mutationRecord.target);\n }\n }\n });\n });\n if (!IS_DOM) return;\n mo.observe(observeMutationsRoot, {\n childList: true,\n attributes: true,\n characterData: true,\n subtree: true\n });\n}\nfunction disconnect() {\n if (!mo) return;\n mo.disconnect();\n}\n\nfunction styleParser (node) {\n const style = node.getAttribute('style');\n let val = [];\n if (style) {\n val = style.split(';').reduce((acc, style) => {\n const styles = style.split(':');\n const prop = styles[0];\n const value = styles.slice(1);\n if (prop && value.length > 0) {\n acc[prop] = value.join(':').trim();\n }\n return acc;\n }, {});\n }\n return val;\n}\n\nfunction classParser (node) {\n const existingPrefix = node.getAttribute('data-prefix');\n const existingIconName = node.getAttribute('data-icon');\n const innerText = node.innerText !== undefined ? node.innerText.trim() : '';\n let val = getCanonicalIcon(classArray(node));\n if (!val.prefix) {\n val.prefix = getDefaultUsablePrefix();\n }\n if (existingPrefix && existingIconName) {\n val.prefix = existingPrefix;\n val.iconName = existingIconName;\n }\n if (val.iconName && val.prefix) {\n return val;\n }\n if (val.prefix && innerText.length > 0) {\n val.iconName = byLigature(val.prefix, node.innerText) || byUnicode(val.prefix, toHex(node.innerText));\n }\n if (!val.iconName && config.autoFetchSvg && node.firstChild && node.firstChild.nodeType === Node.TEXT_NODE) {\n val.iconName = node.firstChild.data;\n }\n return val;\n}\n\nfunction attributesParser (node) {\n const extraAttributes = toArray(node.attributes).reduce((acc, attr) => {\n if (acc.name !== 'class' && acc.name !== 'style') {\n acc[attr.name] = attr.value;\n }\n return acc;\n }, {});\n const title = node.getAttribute('title');\n const titleId = node.getAttribute('data-fa-title-id');\n if (config.autoA11y) {\n if (title) {\n extraAttributes['aria-labelledby'] = \"\".concat(config.replacementClass, \"-title-\").concat(titleId || nextUniqueId());\n } else {\n extraAttributes['aria-hidden'] = 'true';\n extraAttributes['focusable'] = 'false';\n }\n }\n return extraAttributes;\n}\n\nfunction blankMeta() {\n return {\n iconName: null,\n title: null,\n titleId: null,\n prefix: null,\n transform: meaninglessTransform,\n symbol: false,\n mask: {\n iconName: null,\n prefix: null,\n rest: []\n },\n maskId: null,\n extra: {\n classes: [],\n styles: {},\n attributes: {}\n }\n };\n}\nfunction parseMeta(node) {\n let parser = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {\n styleParser: true\n };\n const {\n iconName,\n prefix,\n rest: extraClasses\n } = classParser(node);\n const extraAttributes = attributesParser(node);\n const pluginMeta = chainHooks('parseNodeAttributes', {}, node);\n let extraStyles = parser.styleParser ? styleParser(node) : [];\n return _objectSpread2({\n iconName,\n title: node.getAttribute('title'),\n titleId: node.getAttribute('data-fa-title-id'),\n prefix,\n transform: meaninglessTransform,\n mask: {\n iconName: null,\n prefix: null,\n rest: []\n },\n maskId: null,\n symbol: false,\n extra: {\n classes: extraClasses,\n styles: extraStyles,\n attributes: extraAttributes\n }\n }, pluginMeta);\n}\n\nconst {\n styles: styles$2\n} = namespace;\nfunction generateMutation(node) {\n const nodeMeta = config.autoReplaceSvg === 'nest' ? parseMeta(node, {\n styleParser: false\n }) : parseMeta(node);\n if (~nodeMeta.extra.classes.indexOf(LAYERS_TEXT_CLASSNAME)) {\n return callProvided('generateLayersText', node, nodeMeta);\n } else {\n return callProvided('generateSvgReplacementMutation', node, nodeMeta);\n }\n}\nfunction getKnownPrefixes() {\n return [...Ft, ...Ia];\n}\nfunction onTree(root) {\n let callback = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : null;\n if (!IS_DOM) return Promise.resolve();\n const htmlClassList = DOCUMENT.documentElement.classList;\n const hclAdd = suffix => htmlClassList.add(\"\".concat(HTML_CLASS_I2SVG_BASE_CLASS, \"-\").concat(suffix));\n const hclRemove = suffix => htmlClassList.remove(\"\".concat(HTML_CLASS_I2SVG_BASE_CLASS, \"-\").concat(suffix));\n const prefixes = config.autoFetchSvg ? getKnownPrefixes() : P.concat(Object.keys(styles$2));\n if (!prefixes.includes('fa')) {\n prefixes.push('fa');\n }\n const prefixesDomQuery = [\".\".concat(LAYERS_TEXT_CLASSNAME, \":not([\").concat(DATA_FA_I2SVG, \"])\")].concat(prefixes.map(p$$1 => \".\".concat(p$$1, \":not([\").concat(DATA_FA_I2SVG, \"])\"))).join(', ');\n if (prefixesDomQuery.length === 0) {\n return Promise.resolve();\n }\n let candidates = [];\n try {\n candidates = toArray(root.querySelectorAll(prefixesDomQuery));\n } catch (e$$1) {\n // noop\n }\n if (candidates.length > 0) {\n hclAdd('pending');\n hclRemove('complete');\n } else {\n return Promise.resolve();\n }\n const mark = perf.begin('onTree');\n const mutations = candidates.reduce((acc, node) => {\n try {\n const mutation = generateMutation(node);\n if (mutation) {\n acc.push(mutation);\n }\n } catch (e$$1) {\n if (!PRODUCTION) {\n if (e$$1.name === 'MissingIcon') {\n console.error(e$$1);\n }\n }\n }\n return acc;\n }, []);\n return new Promise((resolve, reject) => {\n Promise.all(mutations).then(resolvedMutations => {\n perform(resolvedMutations, () => {\n hclAdd('active');\n hclAdd('complete');\n hclRemove('pending');\n if (typeof callback === 'function') callback();\n mark();\n resolve();\n });\n }).catch(e$$1 => {\n mark();\n reject(e$$1);\n });\n });\n}\nfunction onNode(node) {\n let callback = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : null;\n generateMutation(node).then(mutation => {\n if (mutation) {\n perform([mutation], callback);\n }\n });\n}\nfunction resolveIcons(next) {\n return function (maybeIconDefinition) {\n let params = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n const iconDefinition = (maybeIconDefinition || {}).icon ? maybeIconDefinition : findIconDefinition(maybeIconDefinition || {});\n let {\n mask\n } = params;\n if (mask) {\n mask = (mask || {}).icon ? mask : findIconDefinition(mask || {});\n }\n return next(iconDefinition, _objectSpread2(_objectSpread2({}, params), {}, {\n mask\n }));\n };\n}\nconst render = function (iconDefinition) {\n let params = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n const {\n transform = meaninglessTransform,\n symbol = false,\n mask = null,\n maskId = null,\n title = null,\n titleId = null,\n classes = [],\n attributes = {},\n styles = {}\n } = params;\n if (!iconDefinition) return;\n const {\n prefix,\n iconName,\n icon\n } = iconDefinition;\n return domVariants(_objectSpread2({\n type: 'icon'\n }, iconDefinition), () => {\n callHooks('beforeDOMElementCreation', {\n iconDefinition,\n params\n });\n if (config.autoA11y) {\n if (title) {\n attributes['aria-labelledby'] = \"\".concat(config.replacementClass, \"-title-\").concat(titleId || nextUniqueId());\n } else {\n attributes['aria-hidden'] = 'true';\n attributes['focusable'] = 'false';\n }\n }\n return makeInlineSvgAbstract({\n icons: {\n main: asFoundIcon(icon),\n mask: mask ? asFoundIcon(mask.icon) : {\n found: false,\n width: null,\n height: null,\n icon: {}\n }\n },\n prefix,\n iconName,\n transform: _objectSpread2(_objectSpread2({}, meaninglessTransform), transform),\n symbol,\n title,\n maskId,\n titleId,\n extra: {\n attributes,\n styles,\n classes\n }\n });\n });\n};\nvar ReplaceElements = {\n mixout() {\n return {\n icon: resolveIcons(render)\n };\n },\n hooks() {\n return {\n mutationObserverCallbacks(accumulator) {\n accumulator.treeCallback = onTree;\n accumulator.nodeCallback = onNode;\n return accumulator;\n }\n };\n },\n provides(providers$$1) {\n providers$$1.i2svg = function (params) {\n const {\n node = DOCUMENT,\n callback = () => {}\n } = params;\n return onTree(node, callback);\n };\n providers$$1.generateSvgReplacementMutation = function (node, nodeMeta) {\n const {\n iconName,\n title,\n titleId,\n prefix,\n transform,\n symbol,\n mask,\n maskId,\n extra\n } = nodeMeta;\n return new Promise((resolve, reject) => {\n Promise.all([findIcon(iconName, prefix), mask.iconName ? findIcon(mask.iconName, mask.prefix) : Promise.resolve({\n found: false,\n width: 512,\n height: 512,\n icon: {}\n })]).then(_ref => {\n let [main, mask] = _ref;\n resolve([node, makeInlineSvgAbstract({\n icons: {\n main,\n mask\n },\n prefix,\n iconName,\n transform,\n symbol,\n maskId,\n title,\n titleId,\n extra,\n watchable: true\n })]);\n }).catch(reject);\n });\n };\n providers$$1.generateAbstractIcon = function (_ref2) {\n let {\n children,\n attributes,\n main,\n transform,\n styles\n } = _ref2;\n const styleString = joinStyles(styles);\n if (styleString.length > 0) {\n attributes['style'] = styleString;\n }\n let nextChild;\n if (transformIsMeaningful(transform)) {\n nextChild = callProvided('generateAbstractTransformGrouping', {\n main,\n transform,\n containerWidth: main.width,\n iconWidth: main.width\n });\n }\n children.push(nextChild || main.icon);\n return {\n children,\n attributes\n };\n };\n }\n};\n\nvar Layers = {\n mixout() {\n return {\n layer(assembler) {\n let params = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n const {\n classes = []\n } = params;\n return domVariants({\n type: 'layer'\n }, () => {\n callHooks('beforeDOMElementCreation', {\n assembler,\n params\n });\n let children = [];\n assembler(args => {\n Array.isArray(args) ? args.map(a => {\n children = children.concat(a.abstract);\n }) : children = children.concat(args.abstract);\n });\n return [{\n tag: 'span',\n attributes: {\n class: [\"\".concat(config.cssPrefix, \"-layers\"), ...classes].join(' ')\n },\n children\n }];\n });\n }\n };\n }\n};\n\nvar LayersCounter = {\n mixout() {\n return {\n counter(content) {\n let params = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n const {\n title = null,\n classes = [],\n attributes = {},\n styles = {}\n } = params;\n return domVariants({\n type: 'counter',\n content\n }, () => {\n callHooks('beforeDOMElementCreation', {\n content,\n params\n });\n return makeLayersCounterAbstract({\n content: content.toString(),\n title,\n extra: {\n attributes,\n styles,\n classes: [\"\".concat(config.cssPrefix, \"-layers-counter\"), ...classes]\n }\n });\n });\n }\n };\n }\n};\n\nvar LayersText = {\n mixout() {\n return {\n text(content) {\n let params = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n const {\n transform = meaninglessTransform,\n title = null,\n classes = [],\n attributes = {},\n styles = {}\n } = params;\n return domVariants({\n type: 'text',\n content\n }, () => {\n callHooks('beforeDOMElementCreation', {\n content,\n params\n });\n return makeLayersTextAbstract({\n content,\n transform: _objectSpread2(_objectSpread2({}, meaninglessTransform), transform),\n title,\n extra: {\n attributes,\n styles,\n classes: [\"\".concat(config.cssPrefix, \"-layers-text\"), ...classes]\n }\n });\n });\n }\n };\n },\n provides(providers$$1) {\n providers$$1.generateLayersText = function (node, nodeMeta) {\n const {\n title,\n transform,\n extra\n } = nodeMeta;\n let width = null;\n let height = null;\n if (IS_IE) {\n const computedFontSize = parseInt(getComputedStyle(node).fontSize, 10);\n const boundingClientRect = node.getBoundingClientRect();\n width = boundingClientRect.width / computedFontSize;\n height = boundingClientRect.height / computedFontSize;\n }\n if (config.autoA11y && !title) {\n extra.attributes['aria-hidden'] = 'true';\n }\n return Promise.resolve([node, makeLayersTextAbstract({\n content: node.innerHTML,\n width,\n height,\n transform,\n title,\n extra,\n watchable: true\n })]);\n };\n }\n};\n\nconst CLEAN_CONTENT_PATTERN = new RegExp('\\u{22}', 'ug');\nconst SECONDARY_UNICODE_RANGE = [1105920, 1112319];\nconst _FONT_FAMILY_WEIGHT_TO_PREFIX = _objectSpread2(_objectSpread2(_objectSpread2(_objectSpread2({}, {\n FontAwesome: {\n normal: 'fas',\n 400: 'fas'\n }\n}), lt), wa), Yt);\nconst FONT_FAMILY_WEIGHT_TO_PREFIX = Object.keys(_FONT_FAMILY_WEIGHT_TO_PREFIX).reduce((acc, key) => {\n acc[key.toLowerCase()] = _FONT_FAMILY_WEIGHT_TO_PREFIX[key];\n return acc;\n}, {});\nconst FONT_FAMILY_WEIGHT_FALLBACK = Object.keys(FONT_FAMILY_WEIGHT_TO_PREFIX).reduce((acc, fontFamily) => {\n const weights = FONT_FAMILY_WEIGHT_TO_PREFIX[fontFamily];\n acc[fontFamily] = weights[900] || [...Object.entries(weights)][0][1];\n return acc;\n}, {});\nfunction hexValueFromContent(content) {\n const cleaned = content.replace(CLEAN_CONTENT_PATTERN, '');\n const codePoint = codePointAt(cleaned, 0);\n const isPrependTen = codePoint >= SECONDARY_UNICODE_RANGE[0] && codePoint <= SECONDARY_UNICODE_RANGE[1];\n const isDoubled = cleaned.length === 2 ? cleaned[0] === cleaned[1] : false;\n return {\n value: isDoubled ? toHex(cleaned[0]) : toHex(cleaned),\n isSecondary: isPrependTen || isDoubled\n };\n}\nfunction getPrefix(fontFamily, fontWeight) {\n const fontFamilySanitized = fontFamily.replace(/^['\"]|['\"]$/g, '').toLowerCase();\n const fontWeightInteger = parseInt(fontWeight);\n const fontWeightSanitized = isNaN(fontWeightInteger) ? 'normal' : fontWeightInteger;\n return (FONT_FAMILY_WEIGHT_TO_PREFIX[fontFamilySanitized] || {})[fontWeightSanitized] || FONT_FAMILY_WEIGHT_FALLBACK[fontFamilySanitized];\n}\nfunction replaceForPosition(node, position) {\n const pendingAttribute = \"\".concat(DATA_FA_PSEUDO_ELEMENT_PENDING).concat(position.replace(':', '-'));\n return new Promise((resolve, reject) => {\n if (node.getAttribute(pendingAttribute) !== null) {\n // This node is already being processed\n return resolve();\n }\n const children = toArray(node.children);\n const alreadyProcessedPseudoElement = children.filter(c$$1 => c$$1.getAttribute(DATA_FA_PSEUDO_ELEMENT) === position)[0];\n const styles = WINDOW.getComputedStyle(node, position);\n const fontFamily = styles.getPropertyValue('font-family');\n const fontFamilyMatch = fontFamily.match(FONT_FAMILY_PATTERN);\n const fontWeight = styles.getPropertyValue('font-weight');\n const content = styles.getPropertyValue('content');\n if (alreadyProcessedPseudoElement && !fontFamilyMatch) {\n // If we've already processed it but the current computed style does not result in a font-family,\n // that probably means that a class name that was previously present to make the icon has been\n // removed. So we now should delete the icon.\n node.removeChild(alreadyProcessedPseudoElement);\n return resolve();\n } else if (fontFamilyMatch && content !== 'none' && content !== '') {\n const content = styles.getPropertyValue('content');\n let prefix = getPrefix(fontFamily, fontWeight);\n const {\n value: hexValue,\n isSecondary\n } = hexValueFromContent(content);\n const isV4 = fontFamilyMatch[0].startsWith('FontAwesome');\n let iconName = byUnicode(prefix, hexValue);\n let iconIdentifier = iconName;\n if (isV4) {\n const iconName4 = byOldUnicode(hexValue);\n if (iconName4.iconName && iconName4.prefix) {\n iconName = iconName4.iconName;\n prefix = iconName4.prefix;\n }\n }\n\n // Only convert the pseudo element in this ::before/::after position into an icon if we haven't\n // already done so with the same prefix and iconName\n if (iconName && !isSecondary && (!alreadyProcessedPseudoElement || alreadyProcessedPseudoElement.getAttribute(DATA_PREFIX) !== prefix || alreadyProcessedPseudoElement.getAttribute(DATA_ICON) !== iconIdentifier)) {\n node.setAttribute(pendingAttribute, iconIdentifier);\n if (alreadyProcessedPseudoElement) {\n // Delete the old one, since we're replacing it with a new one\n node.removeChild(alreadyProcessedPseudoElement);\n }\n const meta = blankMeta();\n const {\n extra\n } = meta;\n extra.attributes[DATA_FA_PSEUDO_ELEMENT] = position;\n findIcon(iconName, prefix).then(main => {\n const abstract = makeInlineSvgAbstract(_objectSpread2(_objectSpread2({}, meta), {}, {\n icons: {\n main,\n mask: emptyCanonicalIcon()\n },\n prefix,\n iconName: iconIdentifier,\n extra,\n watchable: true\n }));\n const element = DOCUMENT.createElementNS('http://www.w3.org/2000/svg', 'svg');\n if (position === '::before') {\n node.insertBefore(element, node.firstChild);\n } else {\n node.appendChild(element);\n }\n element.outerHTML = abstract.map(a$$1 => toHtml(a$$1)).join('\\n');\n node.removeAttribute(pendingAttribute);\n resolve();\n }).catch(reject);\n } else {\n resolve();\n }\n } else {\n resolve();\n }\n });\n}\nfunction replace(node) {\n return Promise.all([replaceForPosition(node, '::before'), replaceForPosition(node, '::after')]);\n}\nfunction processable(node) {\n return node.parentNode !== document.head && !~TAGNAMES_TO_SKIP_FOR_PSEUDOELEMENTS.indexOf(node.tagName.toUpperCase()) && !node.getAttribute(DATA_FA_PSEUDO_ELEMENT) && (!node.parentNode || node.parentNode.tagName !== 'svg');\n}\nfunction searchPseudoElements(root) {\n if (!IS_DOM) return;\n return new Promise((resolve, reject) => {\n const operations = toArray(root.querySelectorAll('*')).filter(processable).map(replace);\n const end = perf.begin('searchPseudoElements');\n disableObservation();\n Promise.all(operations).then(() => {\n end();\n enableObservation();\n resolve();\n }).catch(() => {\n end();\n enableObservation();\n reject();\n });\n });\n}\nvar PseudoElements = {\n hooks() {\n return {\n mutationObserverCallbacks(accumulator) {\n accumulator.pseudoElementsCallback = searchPseudoElements;\n return accumulator;\n }\n };\n },\n provides(providers) {\n providers.pseudoElements2svg = function (params) {\n const {\n node = DOCUMENT\n } = params;\n if (config.searchPseudoElements) {\n searchPseudoElements(node);\n }\n };\n }\n};\n\nlet _unwatched = false;\nvar MutationObserver$1 = {\n mixout() {\n return {\n dom: {\n unwatch() {\n disableObservation();\n _unwatched = true;\n }\n }\n };\n },\n hooks() {\n return {\n bootstrap() {\n observe(chainHooks('mutationObserverCallbacks', {}));\n },\n noAuto() {\n disconnect();\n },\n watch(params) {\n const {\n observeMutationsRoot\n } = params;\n if (_unwatched) {\n enableObservation();\n } else {\n observe(chainHooks('mutationObserverCallbacks', {\n observeMutationsRoot\n }));\n }\n }\n };\n }\n};\n\nconst parseTransformString = transformString => {\n let transform = {\n size: 16,\n x: 0,\n y: 0,\n flipX: false,\n flipY: false,\n rotate: 0\n };\n return transformString.toLowerCase().split(' ').reduce((acc, n) => {\n const parts = n.toLowerCase().split('-');\n const first = parts[0];\n let rest = parts.slice(1).join('-');\n if (first && rest === 'h') {\n acc.flipX = true;\n return acc;\n }\n if (first && rest === 'v') {\n acc.flipY = true;\n return acc;\n }\n rest = parseFloat(rest);\n if (isNaN(rest)) {\n return acc;\n }\n switch (first) {\n case 'grow':\n acc.size = acc.size + rest;\n break;\n case 'shrink':\n acc.size = acc.size - rest;\n break;\n case 'left':\n acc.x = acc.x - rest;\n break;\n case 'right':\n acc.x = acc.x + rest;\n break;\n case 'up':\n acc.y = acc.y - rest;\n break;\n case 'down':\n acc.y = acc.y + rest;\n break;\n case 'rotate':\n acc.rotate = acc.rotate + rest;\n break;\n }\n return acc;\n }, transform);\n};\nvar PowerTransforms = {\n mixout() {\n return {\n parse: {\n transform: transformString => {\n return parseTransformString(transformString);\n }\n }\n };\n },\n hooks() {\n return {\n parseNodeAttributes(accumulator, node) {\n const transformString = node.getAttribute('data-fa-transform');\n if (transformString) {\n accumulator.transform = parseTransformString(transformString);\n }\n return accumulator;\n }\n };\n },\n provides(providers) {\n providers.generateAbstractTransformGrouping = function (_ref) {\n let {\n main,\n transform,\n containerWidth,\n iconWidth\n } = _ref;\n const outer = {\n transform: \"translate(\".concat(containerWidth / 2, \" 256)\")\n };\n const innerTranslate = \"translate(\".concat(transform.x * 32, \", \").concat(transform.y * 32, \") \");\n const innerScale = \"scale(\".concat(transform.size / 16 * (transform.flipX ? -1 : 1), \", \").concat(transform.size / 16 * (transform.flipY ? -1 : 1), \") \");\n const innerRotate = \"rotate(\".concat(transform.rotate, \" 0 0)\");\n const inner = {\n transform: \"\".concat(innerTranslate, \" \").concat(innerScale, \" \").concat(innerRotate)\n };\n const path = {\n transform: \"translate(\".concat(iconWidth / 2 * -1, \" -256)\")\n };\n const operations = {\n outer,\n inner,\n path\n };\n return {\n tag: 'g',\n attributes: _objectSpread2({}, operations.outer),\n children: [{\n tag: 'g',\n attributes: _objectSpread2({}, operations.inner),\n children: [{\n tag: main.icon.tag,\n children: main.icon.children,\n attributes: _objectSpread2(_objectSpread2({}, main.icon.attributes), operations.path)\n }]\n }]\n };\n };\n }\n};\n\nconst ALL_SPACE = {\n x: 0,\n y: 0,\n width: '100%',\n height: '100%'\n};\nfunction fillBlack(abstract) {\n let force = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : true;\n if (abstract.attributes && (abstract.attributes.fill || force)) {\n abstract.attributes.fill = 'black';\n }\n return abstract;\n}\nfunction deGroup(abstract) {\n if (abstract.tag === 'g') {\n return abstract.children;\n } else {\n return [abstract];\n }\n}\nvar Masks = {\n hooks() {\n return {\n parseNodeAttributes(accumulator, node) {\n const maskData = node.getAttribute('data-fa-mask');\n const mask = !maskData ? emptyCanonicalIcon() : getCanonicalIcon(maskData.split(' ').map(i => i.trim()));\n if (!mask.prefix) {\n mask.prefix = getDefaultUsablePrefix();\n }\n accumulator.mask = mask;\n accumulator.maskId = node.getAttribute('data-fa-mask-id');\n return accumulator;\n }\n };\n },\n provides(providers) {\n providers.generateAbstractMask = function (_ref) {\n let {\n children,\n attributes,\n main,\n mask,\n maskId: explicitMaskId,\n transform\n } = _ref;\n const {\n width: mainWidth,\n icon: mainPath\n } = main;\n const {\n width: maskWidth,\n icon: maskPath\n } = mask;\n const trans = transformForSvg({\n transform,\n containerWidth: maskWidth,\n iconWidth: mainWidth\n });\n const maskRect = {\n tag: 'rect',\n attributes: _objectSpread2(_objectSpread2({}, ALL_SPACE), {}, {\n fill: 'white'\n })\n };\n const maskInnerGroupChildrenMixin = mainPath.children ? {\n children: mainPath.children.map(fillBlack)\n } : {};\n const maskInnerGroup = {\n tag: 'g',\n attributes: _objectSpread2({}, trans.inner),\n children: [fillBlack(_objectSpread2({\n tag: mainPath.tag,\n attributes: _objectSpread2(_objectSpread2({}, mainPath.attributes), trans.path)\n }, maskInnerGroupChildrenMixin))]\n };\n const maskOuterGroup = {\n tag: 'g',\n attributes: _objectSpread2({}, trans.outer),\n children: [maskInnerGroup]\n };\n const maskId = \"mask-\".concat(explicitMaskId || nextUniqueId());\n const clipId = \"clip-\".concat(explicitMaskId || nextUniqueId());\n const maskTag = {\n tag: 'mask',\n attributes: _objectSpread2(_objectSpread2({}, ALL_SPACE), {}, {\n id: maskId,\n maskUnits: 'userSpaceOnUse',\n maskContentUnits: 'userSpaceOnUse'\n }),\n children: [maskRect, maskOuterGroup]\n };\n const defs = {\n tag: 'defs',\n children: [{\n tag: 'clipPath',\n attributes: {\n id: clipId\n },\n children: deGroup(maskPath)\n }, maskTag]\n };\n children.push(defs, {\n tag: 'rect',\n attributes: _objectSpread2({\n fill: 'currentColor',\n 'clip-path': \"url(#\".concat(clipId, \")\"),\n mask: \"url(#\".concat(maskId, \")\")\n }, ALL_SPACE)\n });\n return {\n children,\n attributes\n };\n };\n }\n};\n\nvar MissingIconIndicator = {\n provides(providers) {\n let reduceMotion = false;\n if (WINDOW.matchMedia) {\n reduceMotion = WINDOW.matchMedia('(prefers-reduced-motion: reduce)').matches;\n }\n providers.missingIconAbstract = function () {\n const gChildren = [];\n const FILL = {\n fill: 'currentColor'\n };\n const ANIMATION_BASE = {\n attributeType: 'XML',\n repeatCount: 'indefinite',\n dur: '2s'\n };\n\n // Ring\n gChildren.push({\n tag: 'path',\n attributes: _objectSpread2(_objectSpread2({}, FILL), {}, {\n d: 'M156.5,447.7l-12.6,29.5c-18.7-9.5-35.9-21.2-51.5-34.9l22.7-22.7C127.6,430.5,141.5,440,156.5,447.7z M40.6,272H8.5 c1.4,21.2,5.4,41.7,11.7,61.1L50,321.2C45.1,305.5,41.8,289,40.6,272z M40.6,240c1.4-18.8,5.2-37,11.1-54.1l-29.5-12.6 C14.7,194.3,10,216.7,8.5,240H40.6z M64.3,156.5c7.8-14.9,17.2-28.8,28.1-41.5L69.7,92.3c-13.7,15.6-25.5,32.8-34.9,51.5 L64.3,156.5z M397,419.6c-13.9,12-29.4,22.3-46.1,30.4l11.9,29.8c20.7-9.9,39.8-22.6,56.9-37.6L397,419.6z M115,92.4 c13.9-12,29.4-22.3,46.1-30.4l-11.9-29.8c-20.7,9.9-39.8,22.6-56.8,37.6L115,92.4z M447.7,355.5c-7.8,14.9-17.2,28.8-28.1,41.5 l22.7,22.7c13.7-15.6,25.5-32.9,34.9-51.5L447.7,355.5z M471.4,272c-1.4,18.8-5.2,37-11.1,54.1l29.5,12.6 c7.5-21.1,12.2-43.5,13.6-66.8H471.4z M321.2,462c-15.7,5-32.2,8.2-49.2,9.4v32.1c21.2-1.4,41.7-5.4,61.1-11.7L321.2,462z M240,471.4c-18.8-1.4-37-5.2-54.1-11.1l-12.6,29.5c21.1,7.5,43.5,12.2,66.8,13.6V471.4z M462,190.8c5,15.7,8.2,32.2,9.4,49.2h32.1 c-1.4-21.2-5.4-41.7-11.7-61.1L462,190.8z M92.4,397c-12-13.9-22.3-29.4-30.4-46.1l-29.8,11.9c9.9,20.7,22.6,39.8,37.6,56.9 L92.4,397z M272,40.6c18.8,1.4,36.9,5.2,54.1,11.1l12.6-29.5C317.7,14.7,295.3,10,272,8.5V40.6z M190.8,50 c15.7-5,32.2-8.2,49.2-9.4V8.5c-21.2,1.4-41.7,5.4-61.1,11.7L190.8,50z M442.3,92.3L419.6,115c12,13.9,22.3,29.4,30.5,46.1 l29.8-11.9C470,128.5,457.3,109.4,442.3,92.3z M397,92.4l22.7-22.7c-15.6-13.7-32.8-25.5-51.5-34.9l-12.6,29.5 C370.4,72.1,384.4,81.5,397,92.4z'\n })\n });\n const OPACITY_ANIMATE = _objectSpread2(_objectSpread2({}, ANIMATION_BASE), {}, {\n attributeName: 'opacity'\n });\n const dot = {\n tag: 'circle',\n attributes: _objectSpread2(_objectSpread2({}, FILL), {}, {\n cx: '256',\n cy: '364',\n r: '28'\n }),\n children: []\n };\n if (!reduceMotion) {\n dot.children.push({\n tag: 'animate',\n attributes: _objectSpread2(_objectSpread2({}, ANIMATION_BASE), {}, {\n attributeName: 'r',\n values: '28;14;28;28;14;28;'\n })\n }, {\n tag: 'animate',\n attributes: _objectSpread2(_objectSpread2({}, OPACITY_ANIMATE), {}, {\n values: '1;0;1;1;0;1;'\n })\n });\n }\n gChildren.push(dot);\n gChildren.push({\n tag: 'path',\n attributes: _objectSpread2(_objectSpread2({}, FILL), {}, {\n opacity: '1',\n d: 'M263.7,312h-16c-6.6,0-12-5.4-12-12c0-71,77.4-63.9,77.4-107.8c0-20-17.8-40.2-57.4-40.2c-29.1,0-44.3,9.6-59.2,28.7 c-3.9,5-11.1,6-16.2,2.4l-13.1-9.2c-5.6-3.9-6.9-11.8-2.6-17.2c21.2-27.2,46.4-44.7,91.2-44.7c52.3,0,97.4,29.8,97.4,80.2 c0,67.6-77.4,63.5-77.4,107.8C275.7,306.6,270.3,312,263.7,312z'\n }),\n children: reduceMotion ? [] : [{\n tag: 'animate',\n attributes: _objectSpread2(_objectSpread2({}, OPACITY_ANIMATE), {}, {\n values: '1;0;0;0;0;1;'\n })\n }]\n });\n if (!reduceMotion) {\n // Exclamation\n gChildren.push({\n tag: 'path',\n attributes: _objectSpread2(_objectSpread2({}, FILL), {}, {\n opacity: '0',\n d: 'M232.5,134.5l7,168c0.3,6.4,5.6,11.5,12,11.5h9c6.4,0,11.7-5.1,12-11.5l7-168c0.3-6.8-5.2-12.5-12-12.5h-23 C237.7,122,232.2,127.7,232.5,134.5z'\n }),\n children: [{\n tag: 'animate',\n attributes: _objectSpread2(_objectSpread2({}, OPACITY_ANIMATE), {}, {\n values: '0;0;1;1;0;0;'\n })\n }]\n });\n }\n return {\n tag: 'g',\n attributes: {\n 'class': 'missing'\n },\n children: gChildren\n };\n };\n }\n};\n\nvar SvgSymbols = {\n hooks() {\n return {\n parseNodeAttributes(accumulator, node) {\n const symbolData = node.getAttribute('data-fa-symbol');\n const symbol = symbolData === null ? false : symbolData === '' ? true : symbolData;\n accumulator['symbol'] = symbol;\n return accumulator;\n }\n };\n }\n};\n\nvar plugins = [InjectCSS, ReplaceElements, Layers, LayersCounter, LayersText, PseudoElements, MutationObserver$1, PowerTransforms, Masks, MissingIconIndicator, SvgSymbols];\n\nregisterPlugins(plugins, {\n mixoutsTo: api\n});\nconst noAuto$1 = api.noAuto;\nconst config$1 = api.config;\nconst library$1 = api.library;\nconst dom$1 = api.dom;\nconst parse$1 = api.parse;\nconst findIconDefinition$1 = api.findIconDefinition;\nconst toHtml$1 = api.toHtml;\nconst icon = api.icon;\nconst layer = api.layer;\nconst text = api.text;\nconst counter = api.counter;\n\nexport { noAuto$1 as noAuto, config$1 as config, library$1 as library, dom$1 as dom, parse$1 as parse, findIconDefinition$1 as findIconDefinition, toHtml$1 as toHtml, icon, layer, text, counter, api };\n","import { parse, icon } from '@fortawesome/fontawesome-svg-core';\nimport PropTypes from 'prop-types';\nimport React from 'react';\n\nfunction ownKeys(object, enumerableOnly) {\n var keys = Object.keys(object);\n\n if (Object.getOwnPropertySymbols) {\n var symbols = Object.getOwnPropertySymbols(object);\n enumerableOnly && (symbols = symbols.filter(function (sym) {\n return Object.getOwnPropertyDescriptor(object, sym).enumerable;\n })), keys.push.apply(keys, symbols);\n }\n\n return keys;\n}\n\nfunction _objectSpread2(target) {\n for (var i = 1; i < arguments.length; i++) {\n var source = null != arguments[i] ? arguments[i] : {};\n i % 2 ? ownKeys(Object(source), !0).forEach(function (key) {\n _defineProperty(target, key, source[key]);\n }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) {\n Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key));\n });\n }\n\n return target;\n}\n\nfunction _typeof(obj) {\n \"@babel/helpers - typeof\";\n\n return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (obj) {\n return typeof obj;\n } : function (obj) {\n return obj && \"function\" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj;\n }, _typeof(obj);\n}\n\nfunction _defineProperty(obj, key, value) {\n if (key in obj) {\n Object.defineProperty(obj, key, {\n value: value,\n enumerable: true,\n configurable: true,\n writable: true\n });\n } else {\n obj[key] = value;\n }\n\n return obj;\n}\n\nfunction _objectWithoutPropertiesLoose(source, excluded) {\n if (source == null) return {};\n var target = {};\n var sourceKeys = Object.keys(source);\n var key, i;\n\n for (i = 0; i < sourceKeys.length; i++) {\n key = sourceKeys[i];\n if (excluded.indexOf(key) >= 0) continue;\n target[key] = source[key];\n }\n\n return target;\n}\n\nfunction _objectWithoutProperties(source, excluded) {\n if (source == null) return {};\n\n var target = _objectWithoutPropertiesLoose(source, excluded);\n\n var key, i;\n\n if (Object.getOwnPropertySymbols) {\n var sourceSymbolKeys = Object.getOwnPropertySymbols(source);\n\n for (i = 0; i < sourceSymbolKeys.length; i++) {\n key = sourceSymbolKeys[i];\n if (excluded.indexOf(key) >= 0) continue;\n if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue;\n target[key] = source[key];\n }\n }\n\n return target;\n}\n\nfunction _toConsumableArray(arr) {\n return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _unsupportedIterableToArray(arr) || _nonIterableSpread();\n}\n\nfunction _arrayWithoutHoles(arr) {\n if (Array.isArray(arr)) return _arrayLikeToArray(arr);\n}\n\nfunction _iterableToArray(iter) {\n if (typeof Symbol !== \"undefined\" && iter[Symbol.iterator] != null || iter[\"@@iterator\"] != null) return Array.from(iter);\n}\n\nfunction _unsupportedIterableToArray(o, minLen) {\n if (!o) return;\n if (typeof o === \"string\") return _arrayLikeToArray(o, minLen);\n var n = Object.prototype.toString.call(o).slice(8, -1);\n if (n === \"Object\" && o.constructor) n = o.constructor.name;\n if (n === \"Map\" || n === \"Set\") return Array.from(o);\n if (n === \"Arguments\" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen);\n}\n\nfunction _arrayLikeToArray(arr, len) {\n if (len == null || len > arr.length) len = arr.length;\n\n for (var i = 0, arr2 = new Array(len); i < len; i++) arr2[i] = arr[i];\n\n return arr2;\n}\n\nfunction _nonIterableSpread() {\n throw new TypeError(\"Invalid attempt to spread non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\");\n}\n\n// Get CSS class list from a props object\nfunction classList(props) {\n var _classes;\n\n var beat = props.beat,\n fade = props.fade,\n beatFade = props.beatFade,\n bounce = props.bounce,\n shake = props.shake,\n flash = props.flash,\n spin = props.spin,\n spinPulse = props.spinPulse,\n spinReverse = props.spinReverse,\n pulse = props.pulse,\n fixedWidth = props.fixedWidth,\n inverse = props.inverse,\n border = props.border,\n listItem = props.listItem,\n flip = props.flip,\n size = props.size,\n rotation = props.rotation,\n pull = props.pull; // map of CSS class names to properties\n\n var classes = (_classes = {\n 'fa-beat': beat,\n 'fa-fade': fade,\n 'fa-beat-fade': beatFade,\n 'fa-bounce': bounce,\n 'fa-shake': shake,\n 'fa-flash': flash,\n 'fa-spin': spin,\n 'fa-spin-reverse': spinReverse,\n 'fa-spin-pulse': spinPulse,\n 'fa-pulse': pulse,\n 'fa-fw': fixedWidth,\n 'fa-inverse': inverse,\n 'fa-border': border,\n 'fa-li': listItem,\n 'fa-flip': flip === true,\n 'fa-flip-horizontal': flip === 'horizontal' || flip === 'both',\n 'fa-flip-vertical': flip === 'vertical' || flip === 'both'\n }, _defineProperty(_classes, \"fa-\".concat(size), typeof size !== 'undefined' && size !== null), _defineProperty(_classes, \"fa-rotate-\".concat(rotation), typeof rotation !== 'undefined' && rotation !== null && rotation !== 0), _defineProperty(_classes, \"fa-pull-\".concat(pull), typeof pull !== 'undefined' && pull !== null), _defineProperty(_classes, 'fa-swap-opacity', props.swapOpacity), _classes); // map over all the keys in the classes object\n // return an array of the keys where the value for the key is not null\n\n return Object.keys(classes).map(function (key) {\n return classes[key] ? key : null;\n }).filter(function (key) {\n return key;\n });\n}\n\n// Camelize taken from humps\n// humps is copyright © 2012+ Dom Christie\n// Released under the MIT license.\n// Performant way to determine if object coerces to a number\nfunction _isNumerical(obj) {\n obj = obj - 0; // eslint-disable-next-line no-self-compare\n\n return obj === obj;\n}\n\nfunction camelize(string) {\n if (_isNumerical(string)) {\n return string;\n } // eslint-disable-next-line no-useless-escape\n\n\n string = string.replace(/[\\-_\\s]+(.)?/g, function (match, chr) {\n return chr ? chr.toUpperCase() : '';\n }); // Ensure 1st char is always lowercase\n\n return string.substr(0, 1).toLowerCase() + string.substr(1);\n}\n\nvar _excluded = [\"style\"];\n\nfunction capitalize(val) {\n return val.charAt(0).toUpperCase() + val.slice(1);\n}\n\nfunction styleToObject(style) {\n return style.split(';').map(function (s) {\n return s.trim();\n }).filter(function (s) {\n return s;\n }).reduce(function (acc, pair) {\n var i = pair.indexOf(':');\n var prop = camelize(pair.slice(0, i));\n var value = pair.slice(i + 1).trim();\n prop.startsWith('webkit') ? acc[capitalize(prop)] = value : acc[prop] = value;\n return acc;\n }, {});\n}\n\nfunction convert(createElement, element) {\n var extraProps = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};\n\n if (typeof element === 'string') {\n return element;\n }\n\n var children = (element.children || []).map(function (child) {\n return convert(createElement, child);\n });\n /* eslint-disable dot-notation */\n\n var mixins = Object.keys(element.attributes || {}).reduce(function (acc, key) {\n var val = element.attributes[key];\n\n switch (key) {\n case 'class':\n acc.attrs['className'] = val;\n delete element.attributes['class'];\n break;\n\n case 'style':\n acc.attrs['style'] = styleToObject(val);\n break;\n\n default:\n if (key.indexOf('aria-') === 0 || key.indexOf('data-') === 0) {\n acc.attrs[key.toLowerCase()] = val;\n } else {\n acc.attrs[camelize(key)] = val;\n }\n\n }\n\n return acc;\n }, {\n attrs: {}\n });\n\n var _extraProps$style = extraProps.style,\n existingStyle = _extraProps$style === void 0 ? {} : _extraProps$style,\n remaining = _objectWithoutProperties(extraProps, _excluded);\n\n mixins.attrs['style'] = _objectSpread2(_objectSpread2({}, mixins.attrs['style']), existingStyle);\n /* eslint-enable */\n\n return createElement.apply(void 0, [element.tag, _objectSpread2(_objectSpread2({}, mixins.attrs), remaining)].concat(_toConsumableArray(children)));\n}\n\nvar PRODUCTION = false;\n\ntry {\n PRODUCTION = process.env.NODE_ENV === 'production';\n} catch (e) {}\n\nfunction log () {\n if (!PRODUCTION && console && typeof console.error === 'function') {\n var _console;\n\n (_console = console).error.apply(_console, arguments);\n }\n}\n\nfunction normalizeIconArgs(icon) {\n // this has everything that it needs to be rendered which means it was probably imported\n // directly from an icon svg package\n if (icon && _typeof(icon) === 'object' && icon.prefix && icon.iconName && icon.icon) {\n return icon;\n }\n\n if (parse.icon) {\n return parse.icon(icon);\n } // if the icon is null, there's nothing to do\n\n\n if (icon === null) {\n return null;\n } // if the icon is an object and has a prefix and an icon name, return it\n\n\n if (icon && _typeof(icon) === 'object' && icon.prefix && icon.iconName) {\n return icon;\n } // if it's an array with length of two\n\n\n if (Array.isArray(icon) && icon.length === 2) {\n // use the first item as prefix, second as icon name\n return {\n prefix: icon[0],\n iconName: icon[1]\n };\n } // if it's a string, use it as the icon name\n\n\n if (typeof icon === 'string') {\n return {\n prefix: 'fas',\n iconName: icon\n };\n }\n}\n\n// creates an object with a key of key\n// and a value of value\n// if certain conditions are met\nfunction objectWithKey(key, value) {\n // if the value is a non-empty array\n // or it's not an array but it is truthy\n // then create the object with the key and the value\n // if not, return an empty array\n return Array.isArray(value) && value.length > 0 || !Array.isArray(value) && value ? _defineProperty({}, key, value) : {};\n}\n\nvar defaultProps = {\n border: false,\n className: '',\n mask: null,\n maskId: null,\n fixedWidth: false,\n inverse: false,\n flip: false,\n icon: null,\n listItem: false,\n pull: null,\n pulse: false,\n rotation: null,\n size: null,\n spin: false,\n spinPulse: false,\n spinReverse: false,\n beat: false,\n fade: false,\n beatFade: false,\n bounce: false,\n shake: false,\n symbol: false,\n title: '',\n titleId: null,\n transform: null,\n swapOpacity: false\n};\nvar FontAwesomeIcon = /*#__PURE__*/React.forwardRef(function (props, ref) {\n var allProps = _objectSpread2(_objectSpread2({}, defaultProps), props);\n\n var iconArgs = allProps.icon,\n maskArgs = allProps.mask,\n symbol = allProps.symbol,\n className = allProps.className,\n title = allProps.title,\n titleId = allProps.titleId,\n maskId = allProps.maskId;\n var iconLookup = normalizeIconArgs(iconArgs);\n var classes = objectWithKey('classes', [].concat(_toConsumableArray(classList(allProps)), _toConsumableArray((className || '').split(' '))));\n var transform = objectWithKey('transform', typeof allProps.transform === 'string' ? parse.transform(allProps.transform) : allProps.transform);\n var mask = objectWithKey('mask', normalizeIconArgs(maskArgs));\n var renderedIcon = icon(iconLookup, _objectSpread2(_objectSpread2(_objectSpread2(_objectSpread2({}, classes), transform), mask), {}, {\n symbol: symbol,\n title: title,\n titleId: titleId,\n maskId: maskId\n }));\n\n if (!renderedIcon) {\n log('Could not find icon', iconLookup);\n return null;\n }\n\n var abstract = renderedIcon.abstract;\n var extraProps = {\n ref: ref\n };\n Object.keys(allProps).forEach(function (key) {\n // eslint-disable-next-line no-prototype-builtins\n if (!defaultProps.hasOwnProperty(key)) {\n extraProps[key] = allProps[key];\n }\n });\n return convertCurry(abstract[0], extraProps);\n});\nFontAwesomeIcon.displayName = 'FontAwesomeIcon';\nFontAwesomeIcon.propTypes = {\n beat: PropTypes.bool,\n border: PropTypes.bool,\n beatFade: PropTypes.bool,\n bounce: PropTypes.bool,\n className: PropTypes.string,\n fade: PropTypes.bool,\n flash: PropTypes.bool,\n mask: PropTypes.oneOfType([PropTypes.object, PropTypes.array, PropTypes.string]),\n maskId: PropTypes.string,\n fixedWidth: PropTypes.bool,\n inverse: PropTypes.bool,\n flip: PropTypes.oneOf([true, false, 'horizontal', 'vertical', 'both']),\n icon: PropTypes.oneOfType([PropTypes.object, PropTypes.array, PropTypes.string]),\n listItem: PropTypes.bool,\n pull: PropTypes.oneOf(['right', 'left']),\n pulse: PropTypes.bool,\n rotation: PropTypes.oneOf([0, 90, 180, 270]),\n shake: PropTypes.bool,\n size: PropTypes.oneOf(['2xs', 'xs', 'sm', 'lg', 'xl', '2xl', '1x', '2x', '3x', '4x', '5x', '6x', '7x', '8x', '9x', '10x']),\n spin: PropTypes.bool,\n spinPulse: PropTypes.bool,\n spinReverse: PropTypes.bool,\n symbol: PropTypes.oneOfType([PropTypes.bool, PropTypes.string]),\n title: PropTypes.string,\n titleId: PropTypes.string,\n transform: PropTypes.oneOfType([PropTypes.string, PropTypes.object]),\n swapOpacity: PropTypes.bool\n};\nvar convertCurry = convert.bind(null, React.createElement);\n\nexport { FontAwesomeIcon };\n","import PropTypes from 'prop-types';\nimport * as React from 'react';\nimport classNames from 'classnames';\nimport { jsx as _jsx } from \"react/jsx-runtime\";\nconst propTypes = {\n /** An accessible label indicating the relevant information about the Close Button. */\n 'aria-label': PropTypes.string,\n /** A callback fired after the Close Button is clicked. */\n onClick: PropTypes.func,\n /**\n * Render different color variant for the button.\n *\n * Omitting this will render the default dark color.\n */\n variant: PropTypes.oneOf(['white'])\n};\nconst CloseButton = /*#__PURE__*/React.forwardRef(({\n className,\n variant,\n 'aria-label': ariaLabel = 'Close',\n ...props\n}, ref) => /*#__PURE__*/_jsx(\"button\", {\n ref: ref,\n type: \"button\",\n className: classNames('btn-close', variant && `btn-close-${variant}`, className),\n \"aria-label\": ariaLabel,\n ...props\n}));\nCloseButton.displayName = 'CloseButton';\nCloseButton.propTypes = propTypes;\nexport default CloseButton;"],"names":["_defineProperty","e","r","t","i","Symbol","toPrimitive","call","TypeError","String","Number","_toPrimitive","_toPropertyKey","Object","defineProperty","value","enumerable","configurable","writable","ownKeys","keys","getOwnPropertySymbols","o","filter","getOwnPropertyDescriptor","push","apply","_objectSpread2","arguments","length","forEach","getOwnPropertyDescriptors","defineProperties","noop","_WINDOW","_DOCUMENT","_MUTATION_OBSERVER","_PERFORMANCE","mark","measure","window","document","MutationObserver","performance","userAgent","navigator","WINDOW","DOCUMENT","MUTATION_OBSERVER","PERFORMANCE","IS_DOM","documentElement","head","addEventListener","createElement","IS_IE","indexOf","S","classic","fa","fas","far","fal","fat","fab","duotone","fad","fadr","fadl","fadt","sharp","fass","fasr","fasl","fast","fasds","fasdr","fasdl","fasdt","P","s","L","pt","Map","defaultShortPrefixId","defaultStyleId","styleIds","futureStyleIds","defaultFontWeight","Ft","St","fak","fakd","Lt","Et","kit","t$1","GROUP","SWAP_OPACITY","PRIMARY","SECONDARY","bt$1","ga","Ia","c$1","F$1","concat","ma","map","a","NAMESPACE_IDENTIFIER","UNITS_IN_GRID","DEFAULT_REPLACEMENT_CLASS","DATA_FA_I2SVG","DATA_FA_PSEUDO_ELEMENT","DATA_PREFIX","DATA_ICON","HTML_CLASS_I2SVG_BASE_CLASS","TAGNAMES_TO_SKIP_FOR_PSEUDOELEMENTS","PRODUCTION","process","e$$1","familyProxy","obj","Proxy","get","target","prop","_PREFIX_TO_STYLE","PREFIX_TO_STYLE","_STYLE_TO_PREFIX","solid","regular","light","thin","brands","STYLE_TO_PREFIX","_PREFIX_TO_LONG_STYLE","PREFIX_TO_LONG_STYLE","_LONG_STYLE_TO_PREFIX","ICON_SELECTION_SYNTAX_PATTERN","LAYERS_TEXT_CLASSNAME","FONT_FAMILY_PATTERN","ATTRIBUTES_WATCHED_FOR_MUTATION","normal","DUOTONE_CLASSES","RESERVED_CLASSES","initial","FontAwesomeConfig","querySelector","_ref","attr","key","val","coerce","element","getAttribute","getAttrConfig","undefined","_default","styleDefault","familyDefault","cssPrefix","replacementClass","autoReplaceSvg","autoAddCss","autoA11y","searchPseudoElements","observeMutations","mutateApproach","keepOriginalSource","measurePerformance","showMissingIcons","familyPrefix","_config","config","set","_onChangeCb","cb","d$2","meaninglessTransform","size","x","y","rotate","flipX","flipY","nextUniqueId","id","Math","random","toArray","array","classArray","node","classList","split","htmlEscape","str","replace","joinStyles","styles","reduce","acc","styleName","trim","transformIsMeaningful","transform","css","dcp","drc","fp","rc","dPatt","RegExp","customPropPatt","rPatt","_cssInserted","ensureCss","style","setAttribute","innerHTML","headChildren","childNodes","beforeChild","child","tagName","toUpperCase","insertBefore","insertCss","InjectCSS","mixout","dom","hooks","beforeDOMElementCreation","beforeI2svg","w","shims","namespace","functions","listener","removeEventListener","loaded","fn","toHtml","abstractNodes","tag","attributes","children","attributeName","joinAttributes","join","iconFromMapping","mapping","prefix","iconName","icon","doScroll","test","readyState","subject","initialValue","thisContext","result","iterator","func","b","c","d","bindInternal4","toHex","unicode","decoded","string","output","counter","charCodeAt","extra","ucs2decode","toString","normalizeIcons","icons","defineIcons","params","skipHooks","normalized","addPack","FAMILY_NAMES","PREFIXES_FOR_FAMILY","familyId","_defaultUsablePrefix","_byUnicode","_byLigature","_byOldName","_byOldUnicode","_byAlias","getIconName","cls","parts","slice","name","build","lookup","reducer","o$$1","a$$1","alias","aliases","hasRegular","autoFetchSvg","shimLookups","shim","maybeNameMaybeUnicode","names","unicodes","getCanonicalPrefix","family","byUnicode","byAlias","byOldName","getDefaultUsablePrefix","c$$1","styleOrPrefix","defined","sortedUniqueValues","arr","sort","index","getCanonicalIcon","values","skipLookups","givenPrefix","faCombinedClasses","faStyleOrFamilyClasses","includes","nonStyleOrFamilyClasses","faStyles","styleFromValues","famProps","some","v$$1","getFamilyId","canonical","classNames","rest","moveNonFaClassesToRest","prefixOptions","config$$1","isDuotoneFamily","valuesHasDuotone","defaultFamilyIsDuotone","canonicalPrefixIsDuotone","newCanonicalFamilies","find","newCanonicalStyles","defaultPrefix","getDefaultCanonicalPrefix","aliasIconName","applyShimAndAlias","flat","_plugins","_hooks","providers","defaultProviderKeys","chainHooks","hook","accumulator","_len","args","Array","_key","hookFn","callHooks","_len2","_key2","callProvided","prototype","findIconDefinition","iconLookup","library","definitions","constructor","this","add","additions","_pullDefinitions","longPrefix","reset","definition","i2svg","Promise","reject","Error","watch","autoReplaceSvgRoot","autoReplace","setTimeout","parse","isArray","match","canonicalIcon","api","noAuto","domVariants","abstractCreator","abstract","container","html","makeInlineSvgAbstract","main","mask","symbol","title","maskId","titleId","watchable","width","height","found","isUploadedIcon","attrClass","classes","content","role","uploadedIconWidthStyle","asSymbol","offset","asIcon","makeLayersTextAbstract","_ref2","startCentered","transformForCss","styleString","class","styles$1","asFoundIcon","vectorData","fill","missingIconResolutionMixin","findIcon","resolve","console","error","maybeNotifyMissing","noop$1","p$2","preamble","end","perf","noop$2","isWatched","createElementNS","convertSVG","abstractObj","ceFn","createTextNode","appendChild","mutators","mutation","parentNode","comment","createComment","outerHTML","nodeAsComment","replaceChild","remove","nest","forSvg","splitClasses","toSvg","toNode","removeAttribute","newInnerHTML","performOperationSync","op","perform","mutations","callback","callbackFunction","frame","requestAnimationFrame","mutator","disabled","disableObservation","enableObservation","mo","observe","options","treeCallback","nodeCallback","pseudoElementsCallback","observeMutationsRoot","objects","mutationRecord","type","addedNodes","hasPrefixAndIcon","contains","childList","characterData","subtree","classParser","existingPrefix","existingIconName","innerText","ligature","firstChild","nodeType","Node","TEXT_NODE","data","parseMeta","parser","styleParser","extraClasses","extraAttributes","attributesParser","pluginMeta","extraStyles","styles$2","generateMutation","nodeMeta","onTree","root","htmlClassList","hclAdd","suffix","hclRemove","prefixes","prefixesDomQuery","p$$1","candidates","querySelectorAll","all","then","resolvedMutations","catch","onNode","render","iconDefinition","ReplaceElements","next","maybeIconDefinition","mutationObserverCallbacks","provides","providers$$1","generateSvgReplacementMutation","generateAbstractIcon","nextChild","containerWidth","iconWidth","Layers","layer","assembler","LayersCounter","makeLayersCounterAbstract","LayersText","text","generateLayersText","computedFontSize","parseInt","getComputedStyle","fontSize","boundingClientRect","getBoundingClientRect","CLEAN_CONTENT_PATTERN","SECONDARY_UNICODE_RANGE","_FONT_FAMILY_WEIGHT_TO_PREFIX","FontAwesome","FONT_FAMILY_WEIGHT_TO_PREFIX","toLowerCase","FONT_FAMILY_WEIGHT_FALLBACK","fontFamily","weights","entries","replaceForPosition","position","pendingAttribute","alreadyProcessedPseudoElement","getPropertyValue","fontFamilyMatch","fontWeight","removeChild","fontFamilySanitized","fontWeightInteger","fontWeightSanitized","isNaN","getPrefix","hexValue","isSecondary","cleaned","codePoint","second","first","codePointAt","isPrependTen","isDoubled","hexValueFromContent","isV4","startsWith","iconIdentifier","iconName4","oldUnicode","newUnicode","byOldUnicode","meta","processable","operations","PseudoElements","pseudoElements2svg","_unwatched","MutationObserver$1","unwatch","bootstrap","disconnect","parseTransformString","transformString","n","parseFloat","PowerTransforms","parseNodeAttributes","generateAbstractTransformGrouping","outer","innerTranslate","innerScale","innerRotate","inner","path","ALL_SPACE","fillBlack","force","Masks","maskData","generateAbstractMask","explicitMaskId","mainWidth","mainPath","maskWidth","maskPath","trans","transformForSvg","maskRect","maskInnerGroupChildrenMixin","maskInnerGroup","maskOuterGroup","clipId","maskTag","maskUnits","maskContentUnits","defs","MissingIconIndicator","reduceMotion","matchMedia","matches","missingIconAbstract","gChildren","FILL","ANIMATION_BASE","attributeType","repeatCount","dur","OPACITY_ANIMATE","dot","cx","cy","opacity","nextPlugins","mixoutsTo","k","plugin","tk","sk","registerPlugins","symbolData","parse$1","object","enumerableOnly","symbols","sym","source","_typeof","_objectWithoutProperties","excluded","sourceKeys","_objectWithoutPropertiesLoose","sourceSymbolKeys","propertyIsEnumerable","_toConsumableArray","_arrayLikeToArray","_arrayWithoutHoles","iter","from","_iterableToArray","minLen","_unsupportedIterableToArray","_nonIterableSpread","len","arr2","camelize","chr","substr","_excluded","normalizeIconArgs","objectWithKey","defaultProps","border","className","fixedWidth","inverse","flip","listItem","pull","pulse","rotation","spin","spinPulse","spinReverse","beat","fade","beatFade","bounce","shake","swapOpacity","FontAwesomeIcon","React","props","ref","allProps","iconArgs","maskArgs","_classes","flash","renderedIcon","_console","log","extraProps","hasOwnProperty","convertCurry","displayName","propTypes","PropTypes","convert","mixins","attrs","pair","charAt","_extraProps$style","existingStyle","remaining","bind","onClick","variant","CloseButton","ariaLabel","_jsx","_objectSpread"],"sourceRoot":""} \ No newline at end of file diff --git a/apps/frontend/build/static/js/880.cd8c8d95.chunk.js b/apps/frontend/build/static/js/880.cd8c8d95.chunk.js deleted file mode 100644 index 173d2b7a..00000000 --- a/apps/frontend/build/static/js/880.cd8c8d95.chunk.js +++ /dev/null @@ -1,2 +0,0 @@ -(self.webpackChunkcln_application_frontend=self.webpackChunkcln_application_frontend||[]).push([[880],{1343:(e,t,n)=>{"use strict";n.d(t,{A:()=>we});var o,r=n(9850),s=n(9740),a=n(1346),i=n.n(a),c=n(5982),l=n(8624),d=n(685),u=n(5055);function f(e){if((!o&&0!==o||e)&&l.A){var t=document.createElement("div");t.style.position="absolute",t.style.top="-9999px",t.style.width="50px",t.style.height="50px",t.style.overflow="scroll",document.body.appendChild(t),o=t.offsetWidth-t.clientWidth,document.body.removeChild(t)}return o}var h=n(2176);var m=n(2459),p=n(8512),g=n(4196),y=n(6181);function v(e){void 0===e&&(e=(0,d.A)());try{var t=e.activeElement;return t&&t.nodeName?t:null}catch(n){return e.body}}var b=n(6666),A=n(664),w=n(3989),x=n(3216);function E(e){const t=function(e){const t=(0,h.useRef)(e);return t.current=e,t}(e);(0,h.useEffect)((()=>()=>t.current()),[])}var N=n(6007),k=n(5687),B=n(2914);const C=(0,n(8594).sE)("modal-open");const R=class{constructor(){let{ownerDocument:e,handleContainerOverflow:t=!0,isRTL:n=!1}=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};this.handleContainerOverflow=t,this.isRTL=n,this.modals=[],this.ownerDocument=e}getScrollbarWidth(){return function(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:document;const t=e.defaultView;return Math.abs(t.innerWidth-e.documentElement.clientWidth)}(this.ownerDocument)}getElement(){return(this.ownerDocument||document).body}setModalAttributes(e){}removeModalAttributes(e){}setContainerStyle(e){const t={overflow:"hidden"},n=this.isRTL?"paddingLeft":"paddingRight",o=this.getElement();e.style={overflow:o.style.overflow,[n]:o.style[n]},e.scrollBarWidth&&(t[n]="".concat(parseInt((0,B.A)(o,n)||"0",10)+e.scrollBarWidth,"px")),o.setAttribute(C,""),(0,B.A)(o,t)}reset(){[...this.modals].forEach((e=>this.remove(e)))}removeContainerStyle(e){const t=this.getElement();t.removeAttribute(C),Object.assign(t.style,e.style)}add(e){let t=this.modals.indexOf(e);return-1!==t?t:(t=this.modals.length,this.modals.push(e),this.setModalAttributes(e),0!==t||(this.state={scrollBarWidth:this.getScrollbarWidth(),style:{}},this.handleContainerOverflow&&this.setContainerStyle(this.state)),t)}remove(e){const t=this.modals.indexOf(e);-1!==t&&(this.modals.splice(t,1),!this.modals.length&&this.handleContainerOverflow&&this.removeContainerStyle(this.state),this.removeModalAttributes(e))}isTopModal(e){return!!this.modals.length&&this.modals[this.modals.length-1]===e}};var S=n(6509),_=n(4222),T=n(8510),j=n(5436),O=n(812);const H=["show","role","className","style","children","backdrop","keyboard","onBackdropClick","onEscapeKeyDown","transition","runTransition","backdropTransition","runBackdropTransition","autoFocus","enforceFocus","restoreFocus","restoreFocusOptions","renderDialog","renderBackdrop","manager","container","onShow","onHide","onExit","onExited","onExiting","onEnter","onEntering","onEntered"];let F;function D(e){const t=(0,_.A)(),n=e||function(e){return F||(F=new R({ownerDocument:null==e?void 0:e.document})),F}(t),o=(0,h.useRef)({dialog:null,backdrop:null});return Object.assign(o.current,{add:()=>n.add(o.current),remove:()=>n.remove(o.current),isTopModal:()=>n.isTopModal(o.current),setDialogRef:(0,h.useCallback)((e=>{o.current.dialog=e}),[]),setBackdropRef:(0,h.useCallback)((e=>{o.current.backdrop=e}),[])})}const M=(0,h.forwardRef)(((e,t)=>{let{show:n=!1,role:o="dialog",className:r,style:s,children:a,backdrop:i=!0,keyboard:c=!0,onBackdropClick:d,onEscapeKeyDown:u,transition:f,runTransition:m,backdropTransition:p,runBackdropTransition:g,autoFocus:y=!0,enforceFocus:B=!0,restoreFocus:C=!0,restoreFocusOptions:R,renderDialog:F,renderBackdrop:M=e=>(0,O.jsx)("div",Object.assign({},e)),manager:L,container:P,onShow:W,onHide:z=()=>{},onExit:I,onExited:U,onExiting:V,onEnter:K,onEntering:$,onEntered:Y}=e,q=function(e,t){if(null==e)return{};var n={};for(var o in e)if({}.hasOwnProperty.call(e,o)){if(t.indexOf(o)>=0)continue;n[o]=e[o]}return n}(e,H);const G=(0,_.A)(),J=(0,S.A)(P),Q=D(L),X=(0,x.A)(),Z=(0,N.A)(n),[ee,te]=(0,h.useState)(!n),ne=(0,h.useRef)(null);(0,h.useImperativeHandle)(t,(()=>Q),[Q]),l.A&&!Z&&n&&(ne.current=v(null==G?void 0:G.document)),n&&ee&&te(!1);const oe=(0,k.A)((()=>{if(Q.add(),le.current=(0,A.A)(document,"keydown",ie),ce.current=(0,A.A)(document,"focus",(()=>setTimeout(se)),!0),W&&W(),y){var e,t;const n=v(null!=(e=null==(t=Q.dialog)?void 0:t.ownerDocument)?e:null==G?void 0:G.document);Q.dialog&&n&&!(0,b.A)(Q.dialog,n)&&(ne.current=n,Q.dialog.focus())}})),re=(0,k.A)((()=>{var e;(Q.remove(),null==le.current||le.current(),null==ce.current||ce.current(),C)&&(null==(e=ne.current)||null==e.focus||e.focus(R),ne.current=null)}));(0,h.useEffect)((()=>{n&&J&&oe()}),[n,J,oe]),(0,h.useEffect)((()=>{ee&&re()}),[ee,re]),E((()=>{re()}));const se=(0,k.A)((()=>{if(!B||!X()||!Q.isTopModal())return;const e=v(null==G?void 0:G.document);Q.dialog&&e&&!(0,b.A)(Q.dialog,e)&&Q.dialog.focus()})),ae=(0,k.A)((e=>{e.target===e.currentTarget&&(null==d||d(e),!0===i&&z())})),ie=(0,k.A)((e=>{c&&(0,j.v$)(e)&&Q.isTopModal()&&(null==u||u(e),e.defaultPrevented||z())})),ce=(0,h.useRef)(),le=(0,h.useRef)();if(!J)return null;const de=Object.assign({role:o,ref:Q.setDialogRef,"aria-modal":"dialog"===o||void 0},q,{style:s,className:r,tabIndex:-1});let ue=F?F(de):(0,O.jsx)("div",Object.assign({},de,{children:h.cloneElement(a,{role:"document"})}));ue=(0,T.Yc)(f,m,{unmountOnExit:!0,mountOnEnter:!0,appear:!0,in:!!n,onExit:I,onExiting:V,onExited:function(){te(!0),null==U||U(...arguments)},onEnter:K,onEntering:$,onEntered:Y,children:ue});let fe=null;return i&&(fe=M({ref:Q.setBackdropRef,onClick:ae}),fe=(0,T.Yc)(p,g,{in:!!n,appear:!0,mountOnEnter:!0,unmountOnExit:!0,children:fe})),(0,O.jsx)(O.Fragment,{children:w.createPortal((0,O.jsxs)(O.Fragment,{children:[fe,ue]}),J)})}));M.displayName="Modal";const L=Object.assign(M,{Manager:R});var P=n(4383);var W=n(1732);function z(e,t){return e.replace(new RegExp("(^|\\s)"+t+"(?:\\s|$)","g"),"$1").replace(/\s+/g," ").replace(/^\s*|\s*$/g,"")}const I=".fixed-top, .fixed-bottom, .is-fixed, .sticky-top",U=".sticky-top",V=".navbar-toggler";class K extends R{adjustAndStore(e,t,n){const o=t.style[e];t.dataset[e]=o,(0,B.A)(t,{[e]:"".concat(parseFloat((0,B.A)(t,e))+n,"px")})}restore(e,t){const n=t.dataset[e];void 0!==n&&(delete t.dataset[e],(0,B.A)(t,{[e]:n}))}setContainerStyle(e){super.setContainerStyle(e);const t=this.getElement();var n,o;if(o="modal-open",(n=t).classList?n.classList.add(o):(0,P.A)(n,o)||("string"===typeof n.className?n.className=n.className+" "+o:n.setAttribute("class",(n.className&&n.className.baseVal||"")+" "+o)),!e.scrollBarWidth)return;const r=this.isRTL?"paddingLeft":"paddingRight",s=this.isRTL?"marginLeft":"marginRight";(0,W.A)(t,I).forEach((t=>this.adjustAndStore(r,t,e.scrollBarWidth))),(0,W.A)(t,U).forEach((t=>this.adjustAndStore(s,t,-e.scrollBarWidth))),(0,W.A)(t,V).forEach((t=>this.adjustAndStore(s,t,e.scrollBarWidth)))}removeContainerStyle(e){super.removeContainerStyle(e);const t=this.getElement();var n,o;o="modal-open",(n=t).classList?n.classList.remove(o):"string"===typeof n.className?n.className=z(n.className,o):n.setAttribute("class",z(n.className&&n.className.baseVal||"",o));const r=this.isRTL?"paddingLeft":"paddingRight",s=this.isRTL?"marginLeft":"marginRight";(0,W.A)(t,I).forEach((e=>this.restore(r,e))),(0,W.A)(t,U).forEach((e=>this.restore(s,e))),(0,W.A)(t,V).forEach((e=>this.restore(s,e)))}}let $;var Y=n(881),q=n(7555);const G=["className","bsPrefix","as"],J=h.forwardRef(((e,t)=>{let{className:n,bsPrefix:o,as:a="div"}=e,c=(0,r.A)(e,G);return o=(0,q.oU)(o,"modal-body"),(0,O.jsx)(a,(0,s.A)({ref:t,className:i()(n,o)},c))}));J.displayName="ModalBody";const Q=J,X=h.createContext({onHide(){}}),Z=["bsPrefix","className","contentClassName","centered","size","fullscreen","children","scrollable"],ee=h.forwardRef(((e,t)=>{let{bsPrefix:n,className:o,contentClassName:a,centered:c,size:l,fullscreen:d,children:u,scrollable:f}=e,h=(0,r.A)(e,Z);n=(0,q.oU)(n,"modal");const m="".concat(n,"-dialog"),p="string"===typeof d?"".concat(n,"-fullscreen-").concat(d):"".concat(n,"-fullscreen");return(0,O.jsx)("div",(0,s.A)((0,s.A)({},h),{},{ref:t,className:i()(m,o,l&&"".concat(n,"-").concat(l),c&&"".concat(m,"-centered"),f&&"".concat(m,"-scrollable"),d&&p),children:(0,O.jsx)("div",{className:i()("".concat(n,"-content"),a),children:u})}))}));ee.displayName="ModalDialog";const te=ee,ne=["className","bsPrefix","as"],oe=h.forwardRef(((e,t)=>{let{className:n,bsPrefix:o,as:a="div"}=e,c=(0,r.A)(e,ne);return o=(0,q.oU)(o,"modal-footer"),(0,O.jsx)(a,(0,s.A)({ref:t,className:i()(n,o)},c))}));oe.displayName="ModalFooter";const re=oe;var se=n(9359);const ae=["closeLabel","closeVariant","closeButton","onHide","children"],ie=h.forwardRef(((e,t)=>{let{closeLabel:n="Close",closeVariant:o,closeButton:a=!1,onHide:i,children:c}=e,l=(0,r.A)(e,ae);const d=(0,h.useContext)(X),u=(0,m.A)((()=>{null==d||d.onHide(),null==i||i()}));return(0,O.jsxs)("div",(0,s.A)((0,s.A)({ref:t},l),{},{children:[c,a&&(0,O.jsx)(se.A,{"aria-label":n,variant:o,onClick:u})]}))}));ie.displayName="AbstractModalHeader";const ce=ie,le=["bsPrefix","className","closeLabel","closeButton"],de=h.forwardRef(((e,t)=>{let{bsPrefix:n,className:o,closeLabel:a="Close",closeButton:c=!1}=e,l=(0,r.A)(e,le);return n=(0,q.oU)(n,"modal-header"),(0,O.jsx)(ce,(0,s.A)((0,s.A)({ref:t},l),{},{className:i()(o,n),closeLabel:a,closeButton:c}))}));de.displayName="ModalHeader";const ue=de;var fe=n(4489);const he=["className","bsPrefix","as"],me=(0,fe.A)("h4"),pe=h.forwardRef(((e,t)=>{let{className:n,bsPrefix:o,as:a=me}=e,c=(0,r.A)(e,he);return o=(0,q.oU)(o,"modal-title"),(0,O.jsx)(a,(0,s.A)({ref:t,className:i()(n,o)},c))}));pe.displayName="ModalTitle";const ge=pe,ye=["bsPrefix","className","style","dialogClassName","contentClassName","children","dialogAs","data-bs-theme","aria-labelledby","aria-describedby","aria-label","show","animation","backdrop","keyboard","onEscapeKeyDown","onShow","onHide","container","autoFocus","enforceFocus","restoreFocus","restoreFocusOptions","onEntered","onExit","onExiting","onEnter","onEntering","onExited","backdropClassName","manager"];function ve(e){return(0,O.jsx)(Y.A,(0,s.A)((0,s.A)({},e),{},{timeout:null}))}function be(e){return(0,O.jsx)(Y.A,(0,s.A)((0,s.A)({},e),{},{timeout:null}))}const Ae=h.forwardRef(((e,t)=>{let{bsPrefix:n,className:o,style:a,dialogClassName:v,contentClassName:b,children:A,dialogAs:w=te,"data-bs-theme":x,"aria-labelledby":E,"aria-describedby":N,"aria-label":k,show:B=!1,animation:C=!0,backdrop:R=!0,keyboard:S=!0,onEscapeKeyDown:_,onShow:T,onHide:j,container:H,autoFocus:F=!0,enforceFocus:D=!0,restoreFocus:M=!0,restoreFocusOptions:P,onEntered:W,onExit:z,onExiting:I,onEnter:U,onEntering:V,onExited:Y,backdropClassName:G,manager:J}=e,Q=(0,r.A)(e,ye);const[Z,ee]=(0,h.useState)({}),[ne,oe]=(0,h.useState)(!1),re=(0,h.useRef)(!1),se=(0,h.useRef)(!1),ae=(0,h.useRef)(null),[ie,ce]=(0,h.useState)(null),le=(0,p.A)(t,ce),de=(0,m.A)(j),ue=(0,q.Wz)();n=(0,q.oU)(n,"modal");const fe=(0,h.useMemo)((()=>({onHide:de})),[de]);function he(){return J||(e={isRTL:ue},$||($=new K(e)),$);var e}function me(e){if(!l.A)return;const t=he().getScrollbarWidth()>0,n=e.scrollHeight>(0,d.A)(e).documentElement.clientHeight;ee({paddingRight:t&&!n?f():void 0,paddingLeft:!t&&n?f():void 0})}const pe=(0,m.A)((()=>{ie&&me(ie.dialog)}));(0,g.A)((()=>{(0,u.A)(window,"resize",pe),null==ae.current||ae.current()}));const ge=()=>{re.current=!0},Ae=e=>{re.current&&ie&&e.target===ie.dialog&&(se.current=!0),re.current=!1},we=()=>{oe(!0),ae.current=(0,y.A)(ie.dialog,(()=>{oe(!1)}))},xe=e=>{"static"!==R?se.current||e.target!==e.currentTarget?se.current=!1:null==j||j():(e=>{e.target===e.currentTarget&&we()})(e)},Ee=(0,h.useCallback)((e=>(0,O.jsx)("div",(0,s.A)((0,s.A)({},e),{},{className:i()("".concat(n,"-backdrop"),G,!C&&"show")}))),[C,G,n]),Ne=(0,s.A)((0,s.A)({},a),Z);Ne.display="block";return(0,O.jsx)(X.Provider,{value:fe,children:(0,O.jsx)(L,{show:B,ref:le,backdrop:R,container:H,keyboard:!0,autoFocus:F,enforceFocus:D,restoreFocus:M,restoreFocusOptions:P,onEscapeKeyDown:e=>{S?null==_||_(e):(e.preventDefault(),"static"===R&&we())},onShow:T,onHide:j,onEnter:(e,t)=>{e&&me(e),null==U||U(e,t)},onEntering:(e,t)=>{null==V||V(e,t),(0,c.Ay)(window,"resize",pe)},onEntered:W,onExit:e=>{null==ae.current||ae.current(),null==z||z(e)},onExiting:I,onExited:e=>{e&&(e.style.display=""),null==Y||Y(e),(0,u.A)(window,"resize",pe)},manager:he(),transition:C?ve:void 0,backdropTransition:C?be:void 0,renderBackdrop:Ee,renderDialog:e=>(0,O.jsx)("div",(0,s.A)((0,s.A)({role:"dialog"},e),{},{style:Ne,className:i()(o,n,ne&&"".concat(n,"-static"),!C&&"show"),onClick:R?xe:void 0,onMouseUp:Ae,"data-bs-theme":x,"aria-label":k,"aria-labelledby":E,"aria-describedby":N,children:(0,O.jsx)(w,(0,s.A)((0,s.A)({},Q),{},{onMouseDown:ge,className:v,contentClassName:b,children:A}))}))})})}));Ae.displayName="Modal";const we=Object.assign(Ae,{Body:Q,Header:ue,Title:ge,Footer:re,Dialog:te,TRANSITION_DURATION:300,BACKDROP_TRANSITION_DURATION:150})},5373:function(e,t,n){!function(){var t;e.exports=(t=n(9449),function(e){var n=t,o=n.lib,r=o.WordArray,s=o.Hasher,a=n.algo,i=[],c=[];!function(){function t(t){for(var n=e.sqrt(t),o=2;o<=n;o++)if(!(t%o))return!1;return!0}function n(e){return 4294967296*(e-(0|e))|0}for(var o=2,r=0;r<64;)t(o)&&(r<8&&(i[r]=n(e.pow(o,.5))),c[r]=n(e.pow(o,1/3)),r++),o++}();var l=[],d=a.SHA256=s.extend({_doReset:function(){this._hash=new r.init(i.slice(0))},_doProcessBlock:function(e,t){for(var n=this._hash.words,o=n[0],r=n[1],s=n[2],a=n[3],i=n[4],d=n[5],u=n[6],f=n[7],h=0;h<64;h++){if(h<16)l[h]=0|e[t+h];else{var m=l[h-15],p=(m<<25|m>>>7)^(m<<14|m>>>18)^m>>>3,g=l[h-2],y=(g<<15|g>>>17)^(g<<13|g>>>19)^g>>>10;l[h]=p+l[h-7]+y+l[h-16]}var v=o&r^o&s^r&s,b=(o<<30|o>>>2)^(o<<19|o>>>13)^(o<<10|o>>>22),A=f+((i<<26|i>>>6)^(i<<21|i>>>11)^(i<<7|i>>>25))+(i&d^~i&u)+c[h]+l[h];f=u,u=d,d=i,i=a+A|0,a=s,s=r,r=o,o=A+(b+v)|0}n[0]=n[0]+o|0,n[1]=n[1]+r|0,n[2]=n[2]+s|0,n[3]=n[3]+a|0,n[4]=n[4]+i|0,n[5]=n[5]+d|0,n[6]=n[6]+u|0,n[7]=n[7]+f|0},_doFinalize:function(){var t=this._data,n=t.words,o=8*this._nDataBytes,r=8*t.sigBytes;return n[r>>>5]|=128<<24-r%32,n[14+(r+64>>>9<<4)]=e.floor(o/4294967296),n[15+(r+64>>>9<<4)]=o,t.sigBytes=4*n.length,this._process(),this._hash},clone:function(){var e=s.clone.call(this);return e._hash=this._hash.clone(),e}});n.SHA256=s._createHelper(d),n.HmacSHA256=s._createHmacHelper(d)}(Math),t.SHA256)}()},5708:(e,t,n)=>{"use strict";n.d(t,{A:()=>f});var o=n(9740),r=n(9850),s=n(1346),a=n.n(s),i=n(2176),c=n(7555),l=n(812);const d=["bsPrefix","fluid","as","className"],u=i.forwardRef(((e,t)=>{let{bsPrefix:n,fluid:s=!1,as:i="div",className:u}=e,f=(0,r.A)(e,d);const h=(0,c.oU)(n,"container"),m="string"===typeof s?"-".concat(s):"-fluid";return(0,l.jsx)(i,(0,o.A)((0,o.A)({ref:t},f),{},{className:a()(u,s?"".concat(h).concat(m):h)}))}));u.displayName="Container";const f=u},9449:function(e,t,n){e.exports=function(){var e=e||function(e,t){var o;if("undefined"!==typeof window&&window.crypto&&(o=window.crypto),"undefined"!==typeof self&&self.crypto&&(o=self.crypto),"undefined"!==typeof globalThis&&globalThis.crypto&&(o=globalThis.crypto),!o&&"undefined"!==typeof window&&window.msCrypto&&(o=window.msCrypto),!o&&"undefined"!==typeof n.g&&n.g.crypto&&(o=n.g.crypto),!o)try{o=n(5156)}catch(g){}var r=function(){if(o){if("function"===typeof o.getRandomValues)try{return o.getRandomValues(new Uint32Array(1))[0]}catch(g){}if("function"===typeof o.randomBytes)try{return o.randomBytes(4).readInt32LE()}catch(g){}}throw new Error("Native crypto module could not be used to get secure random number.")},s=Object.create||function(){function e(){}return function(t){var n;return e.prototype=t,n=new e,e.prototype=null,n}}(),a={},i=a.lib={},c=i.Base={extend:function(e){var t=s(this);return e&&t.mixIn(e),t.hasOwnProperty("init")&&this.init!==t.init||(t.init=function(){t.$super.init.apply(this,arguments)}),t.init.prototype=t,t.$super=this,t},create:function(){var e=this.extend();return e.init.apply(e,arguments),e},init:function(){},mixIn:function(e){for(var t in e)e.hasOwnProperty(t)&&(this[t]=e[t]);e.hasOwnProperty("toString")&&(this.toString=e.toString)},clone:function(){return this.init.prototype.extend(this)}},l=i.WordArray=c.extend({init:function(e,n){e=this.words=e||[],this.sigBytes=n!=t?n:4*e.length},toString:function(e){return(e||u).stringify(this)},concat:function(e){var t=this.words,n=e.words,o=this.sigBytes,r=e.sigBytes;if(this.clamp(),o%4)for(var s=0;s>>2]>>>24-s%4*8&255;t[o+s>>>2]|=a<<24-(o+s)%4*8}else for(var i=0;i>>2]=n[i>>>2];return this.sigBytes+=r,this},clamp:function(){var t=this.words,n=this.sigBytes;t[n>>>2]&=4294967295<<32-n%4*8,t.length=e.ceil(n/4)},clone:function(){var e=c.clone.call(this);return e.words=this.words.slice(0),e},random:function(e){for(var t=[],n=0;n>>2]>>>24-r%4*8&255;o.push((s>>>4).toString(16)),o.push((15&s).toString(16))}return o.join("")},parse:function(e){for(var t=e.length,n=[],o=0;o>>3]|=parseInt(e.substr(o,2),16)<<24-o%8*4;return new l.init(n,t/2)}},f=d.Latin1={stringify:function(e){for(var t=e.words,n=e.sigBytes,o=[],r=0;r>>2]>>>24-r%4*8&255;o.push(String.fromCharCode(s))}return o.join("")},parse:function(e){for(var t=e.length,n=[],o=0;o>>2]|=(255&e.charCodeAt(o))<<24-o%4*8;return new l.init(n,t)}},h=d.Utf8={stringify:function(e){try{return decodeURIComponent(escape(f.stringify(e)))}catch(t){throw new Error("Malformed UTF-8 data")}},parse:function(e){return f.parse(unescape(encodeURIComponent(e)))}},m=i.BufferedBlockAlgorithm=c.extend({reset:function(){this._data=new l.init,this._nDataBytes=0},_append:function(e){"string"==typeof e&&(e=h.parse(e)),this._data.concat(e),this._nDataBytes+=e.sigBytes},_process:function(t){var n,o=this._data,r=o.words,s=o.sigBytes,a=this.blockSize,i=s/(4*a),c=(i=t?e.ceil(i):e.max((0|i)-this._minBufferSize,0))*a,d=e.min(4*c,s);if(c){for(var u=0;u\n try {\n var active = doc.activeElement; // IE11 returns a seemingly empty object in some cases when accessing\n // document.activeElement from an