diff --git a/package-lock.json b/package-lock.json index 5fb41ac..ec0d7ec 100644 --- a/package-lock.json +++ b/package-lock.json @@ -18,7 +18,9 @@ "react-redux": "^8.0.5", "react-router-dom": "6.3", "react-scripts": "5.0.1", + "react-toastify": "^9.1.1", "redux": "^4.2.0", + "tw-elements": "^1.0.0-alpha12", "web-vitals": "^2.1.4" }, "devDependencies": { @@ -3668,6 +3670,15 @@ } } }, + "node_modules/@popperjs/core": { + "version": "2.11.6", + "resolved": "https://registry.npmjs.org/@popperjs/core/-/core-2.11.6.tgz", + "integrity": "sha512-50/17A98tWUfQ176raKiOGXuYpLyyVMkxxG6oylzL3BPOlA6ADGdK7EYunSa4I064xerltq9TGXs8HmOk5E+vw==", + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/popperjs" + } + }, "node_modules/@protobufjs/aspromise": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/@protobufjs/aspromise/-/aspromise-1.1.2.tgz", @@ -6230,6 +6241,40 @@ "node": ">=10" } }, + "node_modules/chart.js": { + "version": "2.9.4", + "resolved": "https://registry.npmjs.org/chart.js/-/chart.js-2.9.4.tgz", + "integrity": "sha512-B07aAzxcrikjAPyV+01j7BmOpxtQETxTSlQ26BEYJ+3iUkbNKaOJ/nDbT6JjyqYxseM0ON12COHYdU2cTIjC7A==", + "dependencies": { + "chartjs-color": "^2.1.0", + "moment": "^2.10.2" + } + }, + "node_modules/chartjs-color": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/chartjs-color/-/chartjs-color-2.4.1.tgz", + "integrity": "sha512-haqOg1+Yebys/Ts/9bLo/BqUcONQOdr/hoEr2LLTRl6C5LXctUdHxsCYfvQVg5JIxITrfCNUDr4ntqmQk9+/0w==", + "dependencies": { + "chartjs-color-string": "^0.6.0", + "color-convert": "^1.9.3" + } + }, + "node_modules/chartjs-color-string": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/chartjs-color-string/-/chartjs-color-string-0.6.0.tgz", + "integrity": "sha512-TIB5OKn1hPJvO7JcteW4WY/63v6KwEdt6udfnDE9iCAZgy+V4SrbSxoIbTw/xkUIapjEI4ExGtD0+6D3KyFd7A==", + "dependencies": { + "color-name": "^1.0.0" + } + }, + "node_modules/chartjs-plugin-datalabels": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/chartjs-plugin-datalabels/-/chartjs-plugin-datalabels-0.7.0.tgz", + "integrity": "sha512-PKVUX14nYhH0wcdCpgOoC39Gbzvn6cZ7O9n+bwc02yKD9FTnJ7/TSrBcfebmolFZp1Rcicr9xbT0a5HUbigS7g==", + "peerDependencies": { + "chart.js": ">= 2.7.0 < 3" + } + }, "node_modules/check-types": { "version": "11.1.2", "resolved": "https://registry.npmjs.org/check-types/-/check-types-11.1.2.tgz", @@ -6322,6 +6367,14 @@ "wrap-ansi": "^7.0.0" } }, + "node_modules/clsx": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/clsx/-/clsx-1.2.1.tgz", + "integrity": "sha512-EcR6r5a8bj6pu3ycsa/E/cKVGuTgZJZdsyUYHOksG/UHIiKfjxzRxYJpyVBwYaQeOvghal9fcc4PidlgzugAQg==", + "engines": { + "node": ">=6" + } + }, "node_modules/co": { "version": "4.6.0", "resolved": "https://registry.npmjs.org/co/-/co-4.6.0.tgz", @@ -6972,6 +7025,11 @@ "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.1.1.tgz", "integrity": "sha512-DJR/VvkAvSZW9bTouZue2sSxDwdTN92uHjqeKVm+0dAqdfNykRzQ95tay8aXMBAAPpUiq4Qcug2L7neoRh2Egw==" }, + "node_modules/custom-event-polyfill": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/custom-event-polyfill/-/custom-event-polyfill-1.0.7.tgz", + "integrity": "sha512-TDDkd5DkaZxZFM8p+1I3yAlvM3rSr1wbrOliG4yJiwinMZN8z/iGL7BTlDkrJcYTmgUSb4ywVCc3ZaUtOtC76w==" + }, "node_modules/damerau-levenshtein": { "version": "1.0.8", "resolved": "https://registry.npmjs.org/damerau-levenshtein/-/damerau-levenshtein-1.0.8.tgz", @@ -7126,6 +7184,14 @@ "npm": "1.2.8000 || >= 1.4.16" } }, + "node_modules/detect-autofill": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/detect-autofill/-/detect-autofill-1.1.4.tgz", + "integrity": "sha512-utCBQwCR/beSnADQmBC7C4tTueBBkYCl6WSpfGUkYKO/+MzPxqYGj6G4MvHzcKmH1gCTK+VunX2vaagvkRXPvA==", + "dependencies": { + "custom-event-polyfill": "^1.0.7" + } + }, "node_modules/detect-newline": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/detect-newline/-/detect-newline-3.1.0.tgz", @@ -12712,6 +12778,14 @@ "mkdirp": "bin/cmd.js" } }, + "node_modules/moment": { + "version": "2.29.4", + "resolved": "https://registry.npmjs.org/moment/-/moment-2.29.4.tgz", + "integrity": "sha512-5LC9SOxjSc2HF6vO2CyuTDNivEdoz2IvyJJGj6X8DJ0eFyfszE0QiEd+iXmBvUP3WHxSjFH/vIsA0EN00cgr8w==", + "engines": { + "node": "*" + } + }, "node_modules/ms": { "version": "2.1.2", "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", @@ -13252,6 +13326,11 @@ "node": ">=8" } }, + "node_modules/perfect-scrollbar": { + "version": "1.5.5", + "resolved": "https://registry.npmjs.org/perfect-scrollbar/-/perfect-scrollbar-1.5.5.tgz", + "integrity": "sha512-dzalfutyP3e/FOpdlhVryN4AJ5XDVauVWxybSkLZmakFE2sS3y3pc4JnSprw8tGmHvkaG5Edr5T7LBTZ+WWU2g==" + }, "node_modules/performance-now": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz", @@ -13415,6 +13494,16 @@ "node": ">=4" } }, + "node_modules/popper.js": { + "version": "1.16.1", + "resolved": "https://registry.npmjs.org/popper.js/-/popper.js-1.16.1.tgz", + "integrity": "sha512-Wb4p1J4zyFTbM+u6WuO4XstYx4Ky9Cewe4DWrel7B0w6VVICvPwdOpotjzcf6eD8TsckVnIMNONQyPIUFOUbCQ==", + "deprecated": "You can find the new Popper v2 at @popperjs/core, this package is dedicated to the legacy v1", + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/popperjs" + } + }, "node_modules/postcss": { "version": "8.4.19", "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.19.tgz", @@ -15157,6 +15246,18 @@ } } }, + "node_modules/react-toastify": { + "version": "9.1.1", + "resolved": "https://registry.npmjs.org/react-toastify/-/react-toastify-9.1.1.tgz", + "integrity": "sha512-pkFCla1z3ve045qvjEmn2xOJOy4ZciwRXm1oMPULVkELi5aJdHCN/FHnuqXq8IwGDLB7PPk2/J6uP9D8ejuiRw==", + "dependencies": { + "clsx": "^1.1.1" + }, + "peerDependencies": { + "react": ">=16", + "react-dom": ">=16" + } + }, "node_modules/read-cache": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/read-cache/-/read-cache-1.0.0.tgz", @@ -16775,6 +16876,21 @@ "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" }, + "node_modules/tw-elements": { + "version": "1.0.0-alpha12", + "resolved": "https://registry.npmjs.org/tw-elements/-/tw-elements-1.0.0-alpha12.tgz", + "integrity": "sha512-AQHwXIC4kw4T0NPKAi0vD1bkHSiA4RhdXqqnXDWEHKsrN02njc/ITB3YZ92s2f2jt+wBPI2UOpeUsWL5xiMVeQ==", + "dependencies": { + "@popperjs/core": "^2.6.0", + "chart.js": "^2.9.4", + "chartjs-plugin-datalabels": "^0.7.0", + "deepmerge": "^4.2.2", + "detect-autofill": "^1.1.3", + "perfect-scrollbar": "^1.5.0", + "popper.js": "^1.16.1", + "tailwindcss": "^3.0.7" + } + }, "node_modules/type-check": { "version": "0.4.0", "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", @@ -20539,6 +20655,11 @@ "source-map": "^0.7.3" } }, + "@popperjs/core": { + "version": "2.11.6", + "resolved": "https://registry.npmjs.org/@popperjs/core/-/core-2.11.6.tgz", + "integrity": "sha512-50/17A98tWUfQ176raKiOGXuYpLyyVMkxxG6oylzL3BPOlA6ADGdK7EYunSa4I064xerltq9TGXs8HmOk5E+vw==" + }, "@protobufjs/aspromise": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/@protobufjs/aspromise/-/aspromise-1.1.2.tgz", @@ -22468,6 +22589,38 @@ "resolved": "https://registry.npmjs.org/char-regex/-/char-regex-1.0.2.tgz", "integrity": "sha512-kWWXztvZ5SBQV+eRgKFeh8q5sLuZY2+8WUIzlxWVTg+oGwY14qylx1KbKzHd8P6ZYkAg0xyIDU9JMHhyJMZ1jw==" }, + "chart.js": { + "version": "2.9.4", + "resolved": "https://registry.npmjs.org/chart.js/-/chart.js-2.9.4.tgz", + "integrity": "sha512-B07aAzxcrikjAPyV+01j7BmOpxtQETxTSlQ26BEYJ+3iUkbNKaOJ/nDbT6JjyqYxseM0ON12COHYdU2cTIjC7A==", + "requires": { + "chartjs-color": "^2.1.0", + "moment": "^2.10.2" + } + }, + "chartjs-color": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/chartjs-color/-/chartjs-color-2.4.1.tgz", + "integrity": "sha512-haqOg1+Yebys/Ts/9bLo/BqUcONQOdr/hoEr2LLTRl6C5LXctUdHxsCYfvQVg5JIxITrfCNUDr4ntqmQk9+/0w==", + "requires": { + "chartjs-color-string": "^0.6.0", + "color-convert": "^1.9.3" + } + }, + "chartjs-color-string": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/chartjs-color-string/-/chartjs-color-string-0.6.0.tgz", + "integrity": "sha512-TIB5OKn1hPJvO7JcteW4WY/63v6KwEdt6udfnDE9iCAZgy+V4SrbSxoIbTw/xkUIapjEI4ExGtD0+6D3KyFd7A==", + "requires": { + "color-name": "^1.0.0" + } + }, + "chartjs-plugin-datalabels": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/chartjs-plugin-datalabels/-/chartjs-plugin-datalabels-0.7.0.tgz", + "integrity": "sha512-PKVUX14nYhH0wcdCpgOoC39Gbzvn6cZ7O9n+bwc02yKD9FTnJ7/TSrBcfebmolFZp1Rcicr9xbT0a5HUbigS7g==", + "requires": {} + }, "check-types": { "version": "11.1.2", "resolved": "https://registry.npmjs.org/check-types/-/check-types-11.1.2.tgz", @@ -22538,6 +22691,11 @@ "wrap-ansi": "^7.0.0" } }, + "clsx": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/clsx/-/clsx-1.2.1.tgz", + "integrity": "sha512-EcR6r5a8bj6pu3ycsa/E/cKVGuTgZJZdsyUYHOksG/UHIiKfjxzRxYJpyVBwYaQeOvghal9fcc4PidlgzugAQg==" + }, "co": { "version": "4.6.0", "resolved": "https://registry.npmjs.org/co/-/co-4.6.0.tgz", @@ -23001,6 +23159,11 @@ "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.1.1.tgz", "integrity": "sha512-DJR/VvkAvSZW9bTouZue2sSxDwdTN92uHjqeKVm+0dAqdfNykRzQ95tay8aXMBAAPpUiq4Qcug2L7neoRh2Egw==" }, + "custom-event-polyfill": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/custom-event-polyfill/-/custom-event-polyfill-1.0.7.tgz", + "integrity": "sha512-TDDkd5DkaZxZFM8p+1I3yAlvM3rSr1wbrOliG4yJiwinMZN8z/iGL7BTlDkrJcYTmgUSb4ywVCc3ZaUtOtC76w==" + }, "damerau-levenshtein": { "version": "1.0.8", "resolved": "https://registry.npmjs.org/damerau-levenshtein/-/damerau-levenshtein-1.0.8.tgz", @@ -23115,6 +23278,14 @@ "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.2.0.tgz", "integrity": "sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==" }, + "detect-autofill": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/detect-autofill/-/detect-autofill-1.1.4.tgz", + "integrity": "sha512-utCBQwCR/beSnADQmBC7C4tTueBBkYCl6WSpfGUkYKO/+MzPxqYGj6G4MvHzcKmH1gCTK+VunX2vaagvkRXPvA==", + "requires": { + "custom-event-polyfill": "^1.0.7" + } + }, "detect-newline": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/detect-newline/-/detect-newline-3.1.0.tgz", @@ -27207,6 +27378,11 @@ "minimist": "^1.2.6" } }, + "moment": { + "version": "2.29.4", + "resolved": "https://registry.npmjs.org/moment/-/moment-2.29.4.tgz", + "integrity": "sha512-5LC9SOxjSc2HF6vO2CyuTDNivEdoz2IvyJJGj6X8DJ0eFyfszE0QiEd+iXmBvUP3WHxSjFH/vIsA0EN00cgr8w==" + }, "ms": { "version": "2.1.2", "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", @@ -27594,6 +27770,11 @@ "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==" }, + "perfect-scrollbar": { + "version": "1.5.5", + "resolved": "https://registry.npmjs.org/perfect-scrollbar/-/perfect-scrollbar-1.5.5.tgz", + "integrity": "sha512-dzalfutyP3e/FOpdlhVryN4AJ5XDVauVWxybSkLZmakFE2sS3y3pc4JnSprw8tGmHvkaG5Edr5T7LBTZ+WWU2g==" + }, "performance-now": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz", @@ -27710,6 +27891,11 @@ } } }, + "popper.js": { + "version": "1.16.1", + "resolved": "https://registry.npmjs.org/popper.js/-/popper.js-1.16.1.tgz", + "integrity": "sha512-Wb4p1J4zyFTbM+u6WuO4XstYx4Ky9Cewe4DWrel7B0w6VVICvPwdOpotjzcf6eD8TsckVnIMNONQyPIUFOUbCQ==" + }, "postcss": { "version": "8.4.19", "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.19.tgz", @@ -28782,6 +28968,14 @@ "workbox-webpack-plugin": "^6.4.1" } }, + "react-toastify": { + "version": "9.1.1", + "resolved": "https://registry.npmjs.org/react-toastify/-/react-toastify-9.1.1.tgz", + "integrity": "sha512-pkFCla1z3ve045qvjEmn2xOJOy4ZciwRXm1oMPULVkELi5aJdHCN/FHnuqXq8IwGDLB7PPk2/J6uP9D8ejuiRw==", + "requires": { + "clsx": "^1.1.1" + } + }, "read-cache": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/read-cache/-/read-cache-1.0.0.tgz", @@ -29978,6 +30172,21 @@ } } }, + "tw-elements": { + "version": "1.0.0-alpha12", + "resolved": "https://registry.npmjs.org/tw-elements/-/tw-elements-1.0.0-alpha12.tgz", + "integrity": "sha512-AQHwXIC4kw4T0NPKAi0vD1bkHSiA4RhdXqqnXDWEHKsrN02njc/ITB3YZ92s2f2jt+wBPI2UOpeUsWL5xiMVeQ==", + "requires": { + "@popperjs/core": "^2.6.0", + "chart.js": "^2.9.4", + "chartjs-plugin-datalabels": "^0.7.0", + "deepmerge": "^4.2.2", + "detect-autofill": "^1.1.3", + "perfect-scrollbar": "^1.5.0", + "popper.js": "^1.16.1", + "tailwindcss": "^3.0.7" + } + }, "type-check": { "version": "0.4.0", "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", diff --git a/package.json b/package.json index 95adca7..a5a0e97 100644 --- a/package.json +++ b/package.json @@ -13,7 +13,9 @@ "react-redux": "^8.0.5", "react-router-dom": "6.3", "react-scripts": "5.0.1", + "react-toastify": "^9.1.1", "redux": "^4.2.0", + "tw-elements": "^1.0.0-alpha12", "web-vitals": "^2.1.4" }, "scripts": { diff --git a/src/App.js b/src/App.js index abc1197..bb53765 100644 --- a/src/App.js +++ b/src/App.js @@ -1,10 +1,17 @@ +import { Provider } from "react-redux"; +import { ToastContainer } from "react-toastify"; +import { store } from "./app/store"; + +import AppRouter from "./router/AppRouter"; function App() { + return ( -
- -
+ + + + ); } diff --git a/src/app/store.jsx b/src/app/store.jsx new file mode 100644 index 0000000..14c9a1e --- /dev/null +++ b/src/app/store.jsx @@ -0,0 +1,9 @@ +import { configureStore} from "@reduxjs/toolkit"; +import authReducer from "../features/authSlice" + +export const store =configureStore({ + reducer:{ + auth:authReducer, + + } +}) \ No newline at end of file diff --git a/src/auth/firebase.js b/src/auth/firebase.js new file mode 100644 index 0000000..cd9b621 --- /dev/null +++ b/src/auth/firebase.js @@ -0,0 +1,110 @@ +// Import the functions you need from the SDKs you need + +import { initializeApp } from "firebase/app"; +import { + getAuth, + createUserWithEmailAndPassword, + signInWithEmailAndPassword, + signOut, + updateProfile, + onAuthStateChanged, + GoogleAuthProvider, + signInWithPopup, +} from "firebase/auth"; +import { useSelector } from "react-redux"; +import { clearUser, initialState, setUser } from "../features/authSlice"; +import { toastSuccessNotify, toastErrorNotify, toastWarnNotify } from "../helper/Toastfy"; +const firebaseConfig = { + apiKey: "AIzaSyDjSI_ROzIdejIheZ2twAYT46njNDS-hKg", + authDomain: "redux-app-85e9c.firebaseapp.com", + projectId: "redux-app-85e9c", + storageBucket: "redux-app-85e9c.appspot.com", + messagingSenderId: "777502188729", + appId: "1:777502188729:web:3ac62475f62cc342db2768" + }; +// Initialize Firebase +const app = initializeApp(firebaseConfig); +export const auth = getAuth(app); +export const provider = new GoogleAuthProvider(); +export const createUser = async (email,password,navigate,displayName) => { + try { + let userCredential = await createUserWithEmailAndPassword( + auth, + email, + password + ); + console.log(userCredential); + await updateProfile(auth.user, { displayName: displayName }); + toastSuccessNotify("Registered is successfully!") + navigate("/"); + } catch (error) { + toastErrorNotify(error.message); + console.log("asaefv") + console.log(auth); + } +}; + +export const userObserver = (setCurrentUser) => { + //? Kullanıcının signin olup olmadığını takip eden ve kullanıcı değiştiğinde yeni kullanıcıyı response olarak dönen firebase metodu + onAuthStateChanged(auth, (user) => { + if (user) { + const { email, displayName, photoURL } = user; + setCurrentUser({ email, displayName, photoURL }); + console.log(user); + } else { + setCurrentUser(false); + console.log("user signed out"); + } + }); + }; + +export const logOut = (navigate,dispatch) => { + signOut(auth); + dispatch(clearUser()) + toastWarnNotify("logged out successfully"); + navigate("/") +}; + +export const signIn = async (username,email, password, navigate, dispatch) => { + try { + await signInWithEmailAndPassword( + auth, + email, + password + ) + dispatch( + setUser({ + username: username, + email: email, + password: password + }) + ) + navigate("/home"); + toastSuccessNotify("Login successfully!") + } catch (error) { + toastErrorNotify(error.message); + } +}; + +export const signUpProvider = (navigate,dispatch) => { + //? Google ile giriş yapılması için kullanılan firebase metodu + const provider = new GoogleAuthProvider(); + //? Açılır pencere ile giriş yapılması için kullanılan firebase metodu + signInWithPopup(auth, provider) + .then(({user})=>{ + dispatch( + setUser({ + displayName: user.displayName, + email: user.email, + photoUrl: user.photoUrl + }) + ) + navigate("/home"); + toastSuccessNotify("Login successfully!!"); +}) + .catch((error) => { + // Handle Errors here. + toastErrorNotify(error); + }); +}; + diff --git a/src/features/authSlice.jsx b/src/features/authSlice.jsx new file mode 100644 index 0000000..41e67b1 --- /dev/null +++ b/src/features/authSlice.jsx @@ -0,0 +1,26 @@ +import { createSlice } from "@reduxjs/toolkit"; + +export const initialState = { + user: { + displayName: "", + email: "", + pasword:"" + }, +}; + +const authSlice = createSlice({ + name: "auth", + initialState, + reducers: { + setUser: (state, action) => { + state.user = action.payload; + }, + clearUser: (state, action) => { + state.user = initialState; + }, + }, +}); + +export const { setUser, clearUser } = authSlice.actions; + +export default authSlice.reducer; diff --git a/src/helper/Toastfy.js b/src/helper/Toastfy.js new file mode 100644 index 0000000..2b41143 --- /dev/null +++ b/src/helper/Toastfy.js @@ -0,0 +1,31 @@ +import { toast } from "react-toastify"; +export const toastWarnNotify = (msg) => { + toast.warn(msg, { + autoClose: 5000, + hideProgressBar: false, + closeOnClick: true, + pauseOnHover: true, + draggable: true, + progress: undefined, + }); +}; +export const toastSuccessNotify = (msg) => { + toast.success(msg, { + autoClose: 3000, + hideProgressBar: false, + closeOnClick: true, + pauseOnHover: true, + draggable: true, + progress: undefined, + }); +}; +export const toastErrorNotify = (msg) => { + toast.error(msg, { + autoClose: 5000, + hideProgressBar: false, + closeOnClick: true, + pauseOnHover: true, + draggable: true, + progress: undefined, + }); +}; \ No newline at end of file diff --git a/src/index.js b/src/index.js index 7765cb2..4322edf 100644 --- a/src/index.js +++ b/src/index.js @@ -2,13 +2,16 @@ import React from 'react'; import ReactDOM from 'react-dom/client'; import './index.css'; import App from './App'; +import 'tw-elements'; +import { BrowserRouter as Router} from 'react-router-dom'; + const root = ReactDOM.createRoot(document.getElementById('root')); root.render( - + - + ); // If you want to start measuring performance in your app, pass a function diff --git a/src/output.css b/src/output.css index 8e5c9ef..ccf49eb 100644 --- a/src/output.css +++ b/src/output.css @@ -41,7 +41,7 @@ html { /* 3 */ tab-size: 4; /* 3 */ - font-family: ui-sans-serif, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, "Noto Sans", sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji"; + font-family: Inter, sans-serif; /* 4 */ -webkit-font-feature-settings: normal; font-feature-settings: normal; @@ -125,7 +125,7 @@ code, kbd, samp, pre { - font-family: ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace; + font-family: ui-monospace, monospace; /* 1 */ font-size: 1em; /* 2 */ @@ -558,3 +558,4300 @@ video { --tw-backdrop-saturate: ; --tw-backdrop-sepia: ; } + +.container { + width: 100%; +} + +@media (min-width: 640px) { + .container { + max-width: 640px; + } +} + +@media (min-width: 768px) { + .container { + max-width: 768px; + } +} + +@media (min-width: 1024px) { + .container { + max-width: 1024px; + } +} + +@media (min-width: 1280px) { + .container { + max-width: 1280px; + } +} + +@media (min-width: 1536px) { + .container { + max-width: 1536px; + } +} + +:root { + --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-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: #0d6efd; + --bs-secondary: #6c757d; + --bs-success: #198754; + --bs-info: #0dcaf0; + --bs-warning: #ffc107; + --bs-danger: #dc3545; + --bs-light: #f8f9fa; + --bs-dark: #212529; + --bs-primary-rgb: 13, 110, 253; + --bs-secondary-rgb: 108, 117, 125; + --bs-success-rgb: 25, 135, 84; + --bs-info-rgb: 13, 202, 240; + --bs-warning-rgb: 255, 193, 7; + --bs-danger-rgb: 220, 53, 69; + --bs-light-rgb: 248, 249, 250; + --bs-dark-rgb: 33, 37, 41; + --bs-white-rgb: 255, 255, 255; + --bs-black-rgb: 0, 0, 0; + --bs-body-color-rgb: 33, 37, 41; + --bs-body-bg-rgb: 255, 255, 255; + --bs-font-sans-serif: system-ui, -apple-system, "Segoe UI", Roboto, "Helvetica Neue", Arial, "Noto Sans", "Liberation Sans", 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, rgba(255, 255, 255, 0.15), rgba(255, 255, 255, 0)); + --bs-body-font-family: var(--bs-font-sans-serif); + --bs-body-font-size: 1rem; + --bs-body-font-weight: 400; + --bs-body-line-height: 1.5; + --bs-body-color: #212529; + --bs-body-bg: #fff; +} + +.form-control[type=file] { + overflow: hidden; +} + +.form-control[type=file]:not(:disabled):not([readonly]) { + cursor: pointer; +} + +.form-control:focus { + box-shadow: 0 0 0 1px #2563eb; +} + +.form-control::-webkit-file-upload-button { + padding: 0.375rem 0.75rem; + margin: -0.375rem -0.75rem; + -webkit-margin-end: 0.75rem; + margin-inline-end: 0.75rem; + color: #212529; + background-color: #e9ecef; + pointer-events: none; + border-color: inherit; + border-style: solid; + border-width: 0; + border-inline-end-width: 1px; + border-radius: 0; + -webkit-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; + 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; +} + +.form-control::file-selector-button { + padding: 0.375rem 0.75rem; + margin: -0.375rem -0.75rem; + -webkit-margin-end: 0.75rem; + margin-inline-end: 0.75rem; + color: #212529; + background-color: #e9ecef; + pointer-events: none; + border-color: inherit; + border-style: solid; + border-width: 0; + border-inline-end-width: 1px; + border-radius: 0; + 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; +} + +.form-control:hover:not(:disabled):not([readonly])::-webkit-file-upload-button { + background-color: #dde0e3; +} + +.form-control:hover:not(:disabled):not([readonly])::file-selector-button { + background-color: #dde0e3; +} + +.form-control::-webkit-file-upload-button { + padding: 0.375rem 0.75rem; + margin: -0.375rem -0.75rem; + -webkit-margin-end: 0.75rem; + margin-inline-end: 0.75rem; + color: #374151; + background-color: #f3f4f6; + pointer-events: none; + border-color: inherit; + border-style: solid; + border-width: 0; + border-inline-end-width: 1px; + border-radius: 0; + -webkit-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; + 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; +} + +.form-control:hover:not(:disabled):not([readonly])::-webkit-file-upload-button { + background-color: #dde0e3; +} + +.form-check-input:checked { + background-color: #0d6efd; + border-color: #0d6efd; +} + +.form-check-input:checked[type=checkbox] { + background-image: url("data:image/svg+xml,%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 10l3 3l6-6'/%3e%3c/svg%3e"); +} + +.form-check-input:checked[type=radio] { + background-image: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='-4 -4 8 8'%3e%3ccircle r='2' fill='%23fff'/%3e%3c/svg%3e"); +} + +.form-check-input[type=checkbox]:indeterminate { + background-color: #0d6efd; + border-color: #0d6efd; + background-image: url("data:image/svg+xml,%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"); +} + +.form-check-input:disabled { + pointer-events: none; + -webkit-filter: none; + filter: none; + opacity: 0.5; +} + +.form-switch .form-check-input { + margin-top: 0.1rem; + background-image: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='-4 -4 8 8'%3e%3ccircle r='3' fill='%23fff'/%3e%3c/svg%3e"); + background-position: left center; + transition: background-position 0.15s ease-in-out; +} + +.form-switch .form-check-input:focus { + background-image: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='-4 -4 8 8'%3e%3ccircle r='3' fill='%23fff'/%3e%3c/svg%3e"); +} + +.form-switch .form-check-input:checked { + background-position: right center; + background-image: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='-4 -4 8 8'%3e%3ccircle r='3' fill='%23fff'/%3e%3c/svg%3e"); +} + +.form-floating > .form-control { + height: calc(3.5rem + 2px); + line-height: 1.25; + padding: 1rem 0.75rem; +} + +.form-floating > .form-control::-webkit-input-placeholder { + color: transparent; +} + +.form-floating > .form-control::placeholder { + color: transparent; +} + +.form-floating > .form-control:focus { + padding-top: 1.625rem; + padding-bottom: 0.625rem; +} + +.form-floating > .form-control:not(:placeholder-shown) { + padding-top: 1.625rem; + padding-bottom: 0.625rem; +} + +.form-floating > .form-control:-webkit-autofill { + padding-top: 1.625rem; + padding-bottom: 0.625rem; +} + +.form-floating > .form-control:focus ~ label { + opacity: 0.65; + -webkit-transform: scale(0.85) translateY(-0.5rem) translateX(0.15rem); + transform: scale(0.85) translateY(-0.5rem) translateX(0.15rem); +} + +.form-floating > .form-control:not(:placeholder-shown) ~ label { + opacity: 0.65; + -webkit-transform: scale(0.85) translateY(-0.5rem) translateX(0.15rem); + transform: scale(0.85) translateY(-0.5rem) translateX(0.15rem); +} + +.input-group > .form-control { + width: 1%; +} + +.input-group > .form-control:focus { + z-index: 3; +} + +.input-group:not(.has-validation) > .dropdown-toggle:nth-last-child(n+3) { + border-top-right-radius: 0; + border-bottom-right-radius: 0; +} + +.input-group.has-validation > .dropdown-toggle:nth-last-child(n+4) { + border-top-right-radius: 0; + border-bottom-right-radius: 0; +} + +.was-validated .form-control:valid { + border-color: #198754; + padding-right: calc(1.5em + 0.75rem); + background-image: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 8 8'%3e%3cpath fill='%23198754' d='M2.3 6.73L.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.1z'/%3e%3c/svg%3e"); + background-repeat: no-repeat; + background-position: right calc(0.375em + 0.1875rem) center; + background-size: calc(0.75em + 0.375rem) calc(0.75em + 0.375rem); +} + +.form-control.is-valid { + border-color: #198754; + padding-right: calc(1.5em + 0.75rem); + background-image: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 8 8'%3e%3cpath fill='%23198754' d='M2.3 6.73L.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.1z'/%3e%3c/svg%3e"); + background-repeat: no-repeat; + background-position: right calc(0.375em + 0.1875rem) center; + background-size: calc(0.75em + 0.375rem) calc(0.75em + 0.375rem); +} + +.was-validated .form-control:valid:focus { + border-color: #198754; + box-shadow: 0 0 0 0.25rem rgba(25, 135, 84, 0.25); +} + +.form-control.is-valid:focus { + border-color: #198754; + box-shadow: 0 0 0 0.25rem rgba(25, 135, 84, 0.25); +} + +.was-validated textarea.form-control:valid { + padding-right: calc(1.5em + 0.75rem); + background-position: top calc(0.375em + 0.1875rem) right calc(0.375em + 0.1875rem); +} + +textarea.form-control.is-valid { + padding-right: calc(1.5em + 0.75rem); + background-position: top calc(0.375em + 0.1875rem) right calc(0.375em + 0.1875rem); +} + +.was-validated .form-check-input:valid { + border-color: #198754; +} + +.form-check-input.is-valid { + border-color: #198754; +} + +.was-validated .form-check-input:valid:checked { + background-color: #198754; +} + +.form-check-input.is-valid:checked { + background-color: #198754; +} + +.was-validated .form-check-input:valid:focus { + box-shadow: 0 0 0 0.25rem rgba(25, 135, 84, 0.25); +} + +.form-check-input.is-valid:focus { + box-shadow: 0 0 0 0.25rem rgba(25, 135, 84, 0.25); +} + +.was-validated .form-check-input:valid ~ .form-check-label { + color: #198754; +} + +.form-check-input.is-valid ~ .form-check-label { + color: #198754; +} + +.form-check-inline .form-check-input ~ .valid-feedback { + margin-left: 0.5em; +} + +.was-validated .input-group .form-control:valid { + z-index: 1; +} + +.input-group .form-control.is-valid { + z-index: 1; +} + +.was-validated .input-group .form-control:valid:focus { + z-index: 3; +} + +.input-group .form-control.is-valid:focus { + z-index: 3; +} + +.is-invalid ~ .invalid-feedback { + display: block; +} + +.is-invalid ~ .invalid-tooltip { + display: block; +} + +.was-validated .form-control:invalid { + border-color: #dc3545; + padding-right: calc(1.5em + 0.75rem); + background-image: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 12 12' 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-repeat: no-repeat; + background-position: right calc(0.375em + 0.1875rem) center; + background-size: calc(0.75em + 0.375rem) calc(0.75em + 0.375rem); +} + +.form-control.is-invalid { + border-color: #dc3545; + padding-right: calc(1.5em + 0.75rem); + background-image: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 12 12' 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-repeat: no-repeat; + background-position: right calc(0.375em + 0.1875rem) center; + background-size: calc(0.75em + 0.375rem) calc(0.75em + 0.375rem); +} + +.was-validated .form-control:invalid:focus { + border-color: #dc3545; + box-shadow: 0 0 0 0.25rem rgba(220, 53, 69, 0.25); +} + +.form-control.is-invalid:focus { + border-color: #dc3545; + box-shadow: 0 0 0 0.25rem rgba(220, 53, 69, 0.25); +} + +.was-validated textarea.form-control:invalid { + padding-right: calc(1.5em + 0.75rem); + background-position: top calc(0.375em + 0.1875rem) right calc(0.375em + 0.1875rem); +} + +textarea.form-control.is-invalid { + padding-right: calc(1.5em + 0.75rem); + background-position: top calc(0.375em + 0.1875rem) right calc(0.375em + 0.1875rem); +} + +.form-select.is-invalid { + border-color: #dc3545; +} + +.form-select.is-invalid:not([multiple]):not([size]) { + padding-right: 4.125rem; + background-image: url("data:image/svg+xml,%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 5l6 6 6-6'/%3e%3c/svg%3e"), url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 12 12' 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 0.75rem center, center right 2.25rem; + background-size: 16px 12px, calc(0.75em + 0.375rem) calc(0.75em + 0.375rem); +} + +.form-select.is-invalid:not([multiple])[size="1"] { + padding-right: 4.125rem; + background-image: url("data:image/svg+xml,%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 5l6 6 6-6'/%3e%3c/svg%3e"), url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 12 12' 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 0.75rem center, center right 2.25rem; + background-size: 16px 12px, calc(0.75em + 0.375rem) calc(0.75em + 0.375rem); +} + +.form-select.is-invalid:focus { + border-color: #dc3545; + box-shadow: 0 0 0 0.25rem rgba(220, 53, 69, 0.25); +} + +.was-validated .form-check-input:invalid { + border-color: #dc3545; +} + +.form-check-input.is-invalid { + border-color: #dc3545; +} + +.was-validated .form-check-input:invalid:checked { + background-color: #dc3545; +} + +.form-check-input.is-invalid:checked { + background-color: #dc3545; +} + +.was-validated .form-check-input:invalid:focus { + box-shadow: 0 0 0 0.25rem rgba(220, 53, 69, 0.25); +} + +.form-check-input.is-invalid:focus { + box-shadow: 0 0 0 0.25rem rgba(220, 53, 69, 0.25); +} + +.was-validated .form-check-input:invalid ~ .form-check-label { + color: #dc3545; +} + +.form-check-input.is-invalid ~ .form-check-label { + color: #dc3545; +} + +.form-check-inline .form-check-input ~ .invalid-feedback { + margin-left: 0.5em; +} + +.was-validated .input-group .form-control:invalid { + z-index: 2; +} + +.input-group .form-control.is-invalid { + z-index: 2; +} + +.input-group .form-select.is-invalid { + z-index: 2; +} + +.was-validated .input-group .form-control:invalid:focus { + z-index: 3; +} + +.input-group .form-control.is-invalid:focus { + z-index: 3; +} + +.input-group .form-select.is-invalid:focus { + z-index: 3; +} + +.btn.active { + box-shadow: none; +} + +.btn.active:focus { + box-shadow: none; +} + +.fade { + transition: opacity 0.15s linear; +} + +.fade:not(.show) { + opacity: 0; +} + +.collapse:not(.show) { + display: none; +} + +.collapsing { + height: 0; + overflow: hidden; + transition: height 0.35s ease; +} + +.collapsing.collapse-horizontal { + width: 0; + height: auto; + transition: width 0.35s ease; +} + +.dropdown-menu { + z-index: 1000; +} + +.dropdown-item.active { + color: #1f2937; + -webkit-text-decoration: none; + text-decoration: none; + background-color: #0d6efd; +} + +.dropdown-item:active { + color: #1f2937; + -webkit-text-decoration: none; + text-decoration: none; + background-color: #0d6efd; +} + +.dropdown-item:disabled { + color: #adb5bd; + pointer-events: none; + background-color: transparent; +} + +.dropdown-menu.show { + display: block; +} + +.dropdown-menu-dark .dropdown-item.active { + color: #fff; + background-color: #0d6efd; +} + +.dropdown-menu-dark .dropdown-item:active { + color: #fff; + background-color: #0d6efd; +} + +.dropdown-menu-dark .dropdown-item.disabled { + color: #adb5bd; +} + +.dropdown-menu-dark .dropdown-item:disabled { + color: #adb5bd; +} + +.nav-tabs .nav-link { + color: #4b5563; +} + +.nav-tabs .nav-link:hover { + isolation: isolate; +} + +.nav-tabs .nav-link:focus { + isolation: isolate; +} + +.nav-tabs .nav-link.disabled { + color: #9ca3af; + background-color: transparent; + border-color: transparent; +} + +.nav-tabs .nav-link.active { + color: #2563eb; + border-color: #2563eb; +} + +.nav-tabs .nav-item.show .nav-link { + color: #2563eb; + border-color: #2563eb; +} + +.nav-tabs .dropdown-menu { + margin-top: -1px; + border-top-left-radius: 0; + border-top-right-radius: 0; +} + +.nav-pills .nav-link { + background: #f3f4f6; + color: #4b5563; + box-shadow: none; +} + +.nav-pills .nav-link.active { + background: #2563eb; + color: #fff; + box-shadow: 0 4px 6px -1px rgba(0, 0, 0, 0.1), 0 2px 4px -1px rgba(0, 0, 0, 0.06); +} + +.nav-pills .show > .nav-link { + background: #2563eb; + color: #fff; + box-shadow: 0 4px 6px -1px rgba(0, 0, 0, 0.1), 0 2px 4px -1px rgba(0, 0, 0, 0.06); +} + +.nav-pills .disabled { + color: #9ca3af; + background-color: rgba(243, 244, 246, 0.5); +} + +.nav-pills.menu-sidebar .nav-link { + background-color: transparent; + box-shadow: none; + padding: 0 5px; + border-radius: 0; +} + +.nav-pills.menu-sidebar .nav-link.active { + color: #1266f1; + font-weight: 600; + border-left: 0.125rem solid #1266f1; +} + +.nav-justified > .nav-link { + -ms-flex-basis: 0; + flex-basis: 0; +} + +.nav-justified .nav-item { + -ms-flex-basis: 0; + flex-basis: 0; +} + +.tab-content > .active { + display: block; +} + +.navbar-expand .navbar-nav { + flex-direction: row; +} + +.navbar-expand .navbar-nav .dropdown-menu { + position: absolute; +} + +.navbar-expand .navbar-nav .nav-link { + padding-right: 0.5rem; + padding-left: 0.5rem; +} + +.navbar-expand .offcanvas { + position: inherit; + bottom: 0; + z-index: 1000; + -ms-flex-grow: 1; + flex-grow: 1; + visibility: visible !important; + background-color: transparent; + border-right: 0; + border-left: 0; + transition: none; + -webkit-transform: none; + transform: none; +} + +.navbar-light .navbar-nav .nav-link.disabled { + color: rgba(0, 0, 0, 0.3); +} + +.navbar-light .navbar-nav .show > .nav-link { + color: rgba(0, 0, 0, 0.9); +} + +.navbar-light .navbar-nav .nav-link.active { + color: rgba(0, 0, 0, 0.9); +} + +.navbar-dark .navbar-nav .nav-link.disabled { + color: rgba(255, 255, 255, 0.25); +} + +.navbar-dark .navbar-nav .show > .nav-link { + color: #fff; +} + +.navbar-dark .navbar-nav .nav-link.active { + color: #fff; +} + +.accordion-item:last-of-type .accordion-button.collapsed { + border-bottom-right-radius: calc(0.5rem - 1px); + border-bottom-left-radius: calc(0.5rem - 1px); +} + +.btn-close.disabled { + pointer-events: none; + -webkit-user-select: none; + user-select: none; + opacity: 0.25; +} + +.modal { + z-index: 1055; +} + +.modal-dialog { + margin: 0.5rem; +} + +.modal.fade .modal-dialog { + transition: -webkit-transform 0.3s ease-out; + transition: transform 0.3s ease-out; + transition: transform 0.3s ease-out, -webkit-transform 0.3s ease-out; + -webkit-transform: translate(0, -50px); + transform: translate(0, -50px); +} + +.modal.show .modal-dialog { + -webkit-transform: none; + transform: none; +} + +.modal.modal-static .modal-dialog { + -webkit-transform: scale(1.02); + transform: scale(1.02); +} + +.modal-dialog-scrollable .modal-body { + overflow-y: auto; +} + +.modal-backdrop { + position: fixed; + top: 0; + left: 0; + z-index: 1050; + width: 100vw; + height: 100vh; + background-color: #000; +} + +.modal-backdrop.fade { + opacity: 0; +} + +.modal-backdrop.show { + opacity: 0.5; +} + +.modal-body { + flex: 1 1 auto; +} + +.modal-fullscreen .modal-body { + overflow-y: auto; +} + +.tooltip { + position: absolute; + z-index: 1080; + display: block; + margin: 0; + font-family: var(--bs-font-sans-serif); + font-style: normal; + font-weight: 400; + line-height: 1.5; + -webkit-text-align: start; + text-align: start; + -webkit-text-decoration: none; + text-decoration: none; + -webkit-text-shadow: none; + text-shadow: none; + -webkit-text-transform: none; + text-transform: none; + letter-spacing: normal; + word-break: normal; + word-spacing: normal; + white-space: normal; + line-break: auto; + font-size: 0.875rem; + word-wrap: break-word; + opacity: 0; +} + +.tooltip.show { + opacity: 1; +} + +.bs-tooltip-top .tooltip-arrow { + bottom: 0; +} + +.bs-tooltip-auto[data-popper-placement^=top] .tooltip-arrow { + bottom: 0; +} + +.bs-tooltip-top .tooltip-arrow::before { + top: -1px; + border-width: 0.4rem 0.4rem 0; + border-top-color: #000; +} + +.bs-tooltip-auto[data-popper-placement^=top] .tooltip-arrow::before { + top: -1px; + border-width: 0.4rem 0.4rem 0; + border-top-color: #000; +} + +.bs-tooltip-end .tooltip-arrow { + left: 0; + width: 0.4rem; + height: 0.8rem; +} + +.bs-tooltip-auto[data-popper-placement^=right] .tooltip-arrow { + left: 0; + width: 0.4rem; + height: 0.8rem; +} + +.bs-tooltip-end .tooltip-arrow::before { + right: -1px; + border-width: 0.4rem 0.4rem 0.4rem 0; + border-right-color: #000; +} + +.bs-tooltip-auto[data-popper-placement^=right] .tooltip-arrow::before { + right: -1px; + border-width: 0.4rem 0.4rem 0.4rem 0; + border-right-color: #000; +} + +.bs-tooltip-bottom .tooltip-arrow { + top: 0; +} + +.bs-tooltip-auto[data-popper-placement^=bottom] .tooltip-arrow { + top: 0; +} + +.bs-tooltip-bottom .tooltip-arrow::before { + bottom: -1px; + border-width: 0 0.4rem 0.4rem; + border-bottom-color: #000; +} + +.bs-tooltip-auto[data-popper-placement^=bottom] .tooltip-arrow::before { + bottom: -1px; + border-width: 0 0.4rem 0.4rem; + border-bottom-color: #000; +} + +.bs-tooltip-start .tooltip-arrow { + right: 0; + width: 0.4rem; + height: 0.8rem; +} + +.bs-tooltip-auto[data-popper-placement^=left] .tooltip-arrow { + right: 0; + width: 0.4rem; + height: 0.8rem; +} + +.bs-tooltip-start .tooltip-arrow::before { + left: -1px; + border-width: 0.4rem 0 0.4rem 0.4rem; + border-left-color: #000; +} + +.bs-tooltip-auto[data-popper-placement^=left] .tooltip-arrow::before { + left: -1px; + border-width: 0.4rem 0 0.4rem 0.4rem; + border-left-color: #000; +} + +.tooltip-inner { + max-width: 200px; + font-size: 14px; + padding: 6px 16px; + color: #fff; + -webkit-text-align: center; + text-align: center; + background-color: #6d6d6d; + border-radius: 0.25rem; +} + +.popover { + position: absolute; + top: 0; + left: 0; + z-index: 1070; + display: block; + max-width: 276px; + font-family: var(--bs-font-sans-serif); + font-style: normal; + font-weight: 400; + line-height: 1.5; + -webkit-text-align: start; + text-align: start; + -webkit-text-decoration: none; + text-decoration: none; + -webkit-text-shadow: none; + text-shadow: none; + -webkit-text-transform: none; + text-transform: none; + letter-spacing: normal; + word-break: normal; + word-spacing: normal; + white-space: normal; + line-break: auto; + font-size: 0.875rem; + word-wrap: break-word; + background-color: #fff; + background-clip: padding-box; + border: 0; + border-radius: 0.5rem; + box-shadow: 0 10px 15px -3px rgba(0, 0, 0, 0.1), 0 4px 6px -2px rgba(0, 0, 0, 0.05); +} + +.bs-popover-top > .popover-arrow { + bottom: calc(-0.5rem - 1px); +} + +.bs-popover-auto[data-popper-placement^=top] > .popover-arrow { + bottom: calc(-0.5rem - 1px); +} + +.bs-popover-top > .popover-arrow::before { + bottom: 0; + border-width: 0.5rem 0.5rem 0; + border-top-color: rgba(0, 0, 0, 0.25); +} + +.bs-popover-auto[data-popper-placement^=top] > .popover-arrow::before { + bottom: 0; + border-width: 0.5rem 0.5rem 0; + border-top-color: rgba(0, 0, 0, 0.25); +} + +.bs-popover-top > .popover-arrow::after { + bottom: 1px; + border-width: 0.5rem 0.5rem 0; + border-top-color: #fff; +} + +.bs-popover-auto[data-popper-placement^=top] > .popover-arrow::after { + bottom: 1px; + border-width: 0.5rem 0.5rem 0; + border-top-color: #fff; +} + +.bs-popover-end > .popover-arrow { + left: calc(-0.5rem - 1px); + width: 0.5rem; + height: 1rem; +} + +.bs-popover-auto[data-popper-placement^=right] > .popover-arrow { + left: calc(-0.5rem - 1px); + width: 0.5rem; + height: 1rem; +} + +.bs-popover-end > .popover-arrow::before { + left: 0; + border-width: 0.5rem 0.5rem 0.5rem 0; + border-right-color: rgba(0, 0, 0, 0.25); +} + +.bs-popover-auto[data-popper-placement^=right] > .popover-arrow::before { + left: 0; + border-width: 0.5rem 0.5rem 0.5rem 0; + border-right-color: rgba(0, 0, 0, 0.25); +} + +.bs-popover-end > .popover-arrow::after { + left: 1px; + border-width: 0.5rem 0.5rem 0.5rem 0; + border-right-color: #fff; +} + +.bs-popover-auto[data-popper-placement^=right] > .popover-arrow::after { + left: 1px; + border-width: 0.5rem 0.5rem 0.5rem 0; + border-right-color: #fff; +} + +.bs-popover-bottom > .popover-arrow { + top: calc(-0.5rem - 1px); +} + +.bs-popover-auto[data-popper-placement^=bottom] > .popover-arrow { + top: calc(-0.5rem - 1px); +} + +.bs-popover-bottom > .popover-arrow::before { + top: 0; + border-width: 0 0.5rem 0.5rem 0.5rem; + border-bottom-color: rgba(0, 0, 0, 0.25); +} + +.bs-popover-auto[data-popper-placement^=bottom] > .popover-arrow::before { + top: 0; + border-width: 0 0.5rem 0.5rem 0.5rem; + border-bottom-color: rgba(0, 0, 0, 0.25); +} + +.bs-popover-bottom > .popover-arrow::after { + top: 1px; + border-width: 0 0.5rem 0.5rem 0.5rem; + border-bottom-color: #fff; +} + +.bs-popover-auto[data-popper-placement^=bottom] > .popover-arrow::after { + top: 1px; + border-width: 0 0.5rem 0.5rem 0.5rem; + border-bottom-color: #fff; +} + +.bs-popover-bottom .popover-header::before { + position: absolute; + top: 0; + left: 50%; + display: block; + width: 1rem; + margin-left: -0.5rem; + content: ""; + border-bottom: 1px solid #f0f0f0; +} + +.bs-popover-auto[data-popper-placement^=bottom] .popover-header::before { + position: absolute; + top: 0; + left: 50%; + display: block; + width: 1rem; + margin-left: -0.5rem; + content: ""; + border-bottom: 1px solid #f0f0f0; +} + +.bs-popover-start > .popover-arrow { + right: calc(-0.5rem - 1px); + width: 0.5rem; + height: 1rem; +} + +.bs-popover-auto[data-popper-placement^=left] > .popover-arrow { + right: calc(-0.5rem - 1px); + width: 0.5rem; + height: 1rem; +} + +.bs-popover-start > .popover-arrow::before { + right: 0; + border-width: 0.5rem 0 0.5rem 0.5rem; + border-left-color: rgba(0, 0, 0, 0.25); +} + +.bs-popover-auto[data-popper-placement^=left] > .popover-arrow::before { + right: 0; + border-width: 0.5rem 0 0.5rem 0.5rem; + border-left-color: rgba(0, 0, 0, 0.25); +} + +.bs-popover-start > .popover-arrow::after { + right: 1px; + border-width: 0.5rem 0 0.5rem 0.5rem; + border-left-color: #fff; +} + +.bs-popover-auto[data-popper-placement^=left] > .popover-arrow::after { + right: 1px; + border-width: 0.5rem 0 0.5rem 0.5rem; + border-left-color: #fff; +} + +.popover-header { + padding: 0.5rem 1rem; + margin-bottom: 0; + font-size: 1rem; + background-color: #fff; + border-bottom: 1px solid rgba(0, 0, 0, 0.2); + border-top-left-radius: 0.5rem; + border-top-right-radius: 0.5rem; + font-weight: 500; +} + +.popover-header:empty { + display: none; +} + +.popover-body { + padding: 1rem 1rem; + color: #212529; +} + +.carousel.pointer-event { + touch-action: pan-y; +} + +.carousel-item { + display: none; + margin-right: -100%; + -webkit-backface-visibility: hidden; + backface-visibility: hidden; + transition: -webkit-transform 0.6s ease-in-out; + transition: transform 0.6s ease-in-out; + transition: transform 0.6s ease-in-out, -webkit-transform 0.6s ease-in-out; +} + +.carousel-item.active { + display: block; +} + +.carousel-item-next { + display: block; +} + +.carousel-item-prev { + display: block; +} + +.carousel-item-next:not(.carousel-item-start) { + -webkit-transform: translateX(100%); + transform: translateX(100%); +} + +.active.carousel-item-end { + -webkit-transform: translateX(100%); + transform: translateX(100%); +} + +.carousel-item-prev:not(.carousel-item-end) { + -webkit-transform: translateX(-100%); + transform: translateX(-100%); +} + +.active.carousel-item-start { + -webkit-transform: translateX(-100%); + transform: translateX(-100%); +} + +.carousel-fade .carousel-item { + opacity: 0; + transition-property: opacity; + -webkit-transform: none; + transform: none; +} + +.carousel-fade .carousel-item.active { + z-index: 1; + opacity: 1; +} + +.carousel-fade .carousel-item-next.carousel-item-start { + z-index: 1; + opacity: 1; +} + +.carousel-fade .carousel-item-prev.carousel-item-end { + z-index: 1; + opacity: 1; +} + +.carousel-fade .active.carousel-item-start { + z-index: 0; + opacity: 0; + transition: opacity 0s 0.6s; +} + +.carousel-fade .active.carousel-item-end { + z-index: 0; + opacity: 0; + transition: opacity 0s 0.6s; +} + +.carousel-indicators { + z-index: 2; + margin-right: 15%; + margin-left: 15%; + list-style: none; +} + +.carousel-indicators [data-bs-target] { + box-sizing: content-box; + flex: 0 1 auto; + width: 30px; + height: 3px; + padding: 0; + margin-right: 3px; + margin-left: 3px; + -webkit-text-indent: -999px; + text-indent: -999px; + cursor: pointer; + background-color: #fff; + background-clip: padding-box; + border: 0; + border-top: 10px solid transparent; + border-bottom: 10px solid transparent; + opacity: 0.5; + transition: opacity 0.6s ease; +} + +.carousel-indicators .active { + opacity: 1; +} + +.carousel-dark .carousel-indicators [data-bs-target] { + background-color: #000; +} + +.offcanvas { + z-index: 1045; +} + +.offcanvas-backdrop { + position: fixed; + top: 0; + left: 0; + z-index: 1040; + width: 100vw; + height: 100vh; + background-color: #000; +} + +.offcanvas-backdrop.fade { + opacity: 0; +} + +.offcanvas-backdrop.show { + opacity: 0.5; +} + +.offcanvas.show { + -webkit-transform: none; + transform: none; +} + +.sticky-top { + position: -webkit-sticky; + position: sticky; + top: 0; + z-index: 1020; +} + +.vr { + display: inline-block; + align-self: stretch; + width: 1px; + min-height: 1em; + background-color: currentColor; + opacity: 0.25; +} + +.animation { + -webkit-animation-duration: 1s; + animation-duration: 1s; + -webkit-animation-fill-mode: both; + animation-fill-mode: both; + padding: auto; +} + +.fade-in { + -webkit-animation-name: _fade-in; + animation-name: _fade-in; +} + +.fade-out { + -webkit-animation-name: _fade-out; + animation-name: _fade-out; +} + +.animation.infinite { + -webkit-animation-iteration-count: infinite; + animation-iteration-count: infinite; +} + +.animation.delay-1s { + -webkit-animation-delay: 1s; + animation-delay: 1s; +} + +.animation.delay-2s { + -webkit-animation-delay: 2s; + animation-delay: 2s; +} + +.animation.delay-3s { + -webkit-animation-delay: 3s; + animation-delay: 3s; +} + +.animation.delay-4s { + -webkit-animation-delay: 4s; + animation-delay: 4s; +} + +.animation.delay-5s { + -webkit-animation-delay: 5s; + animation-delay: 5s; +} + +.animation.fast { + -webkit-animation-duration: 800ms; + animation-duration: 800ms; +} + +.animation.faster { + -webkit-animation-duration: 500ms; + animation-duration: 500ms; +} + +.animation.slow { + -webkit-animation-duration: 2s; + animation-duration: 2s; +} + +.animation.slower { + -webkit-animation-duration: 3s; + animation-duration: 3s; +} + +.slide-in-left { + -webkit-animation-name: _slide-in-left; + animation-name: _slide-in-left; +} + +.slide-in-right { + -webkit-animation-name: _slide-in-right; + animation-name: _slide-in-right; +} + +.slide-out-left { + -webkit-animation-name: _slide-out-left; + animation-name: _slide-out-left; +} + +.slide-out-right { + -webkit-animation-name: _slide-out-right; + animation-name: _slide-out-right; +} + +.ripple-surface { + position: relative; + overflow: hidden; + display: inline-block; + vertical-align: bottom; +} + +.ripple-surface-unbound { + overflow: visible; +} + +.ripple-wave { + background-image: radial-gradient(circle, rgba(0, 0, 0, 0.2) 0, rgba(0, 0, 0, 0.3) 40%, rgba(0, 0, 0, 0.4) 50%, rgba(0, 0, 0, 0.5) 60%, transparent 70%); + border-radius: 50%; + opacity: 0.5; + pointer-events: none; + position: absolute; + touch-action: none; + -webkit-transform: scale(0); + transform: scale(0); + transition-property: opacity, -webkit-transform; + transition-property: transform, opacity; + transition-property: transform, opacity, -webkit-transform; + transition-timing-function: cubic-bezier(0, 0, 0.15, 1), cubic-bezier(0, 0, 0.15, 1); + z-index: 999; +} + +.ripple-wave.active { + -webkit-transform: scale(1); + transform: scale(1); + opacity: 0; +} + +.btn .ripple-wave { + background-image: radial-gradient(circle, rgba(255, 255, 255, 0.2) 0, rgba(255, 255, 255, 0.3) 40%, rgba(255, 255, 255, 0.4) 50%, rgba(255, 255, 255, 0.5) 60%, rgba(255, 255, 255, 0) 70%); +} + +.ripple-surface-primary .ripple-wave { + background-image: radial-gradient(circle, rgba(18, 102, 241, 0.2) 0, rgba(18, 102, 241, 0.3) 40%, rgba(18, 102, 241, 0.4) 50%, rgba(18, 102, 241, 0.5) 60%, rgba(18, 102, 241, 0) 70%); +} + +.ripple-surface-secondary .ripple-wave { + background-image: radial-gradient(circle, rgba(178, 60, 253, 0.2) 0, rgba(178, 60, 253, 0.3) 40%, rgba(178, 60, 253, 0.4) 50%, rgba(178, 60, 253, 0.5) 60%, rgba(178, 60, 253, 0) 70%); +} + +.ripple-surface-success .ripple-wave { + background-image: radial-gradient(circle, rgba(0, 183, 74, 0.2) 0, rgba(0, 183, 74, 0.3) 40%, rgba(0, 183, 74, 0.4) 50%, rgba(0, 183, 74, 0.5) 60%, rgba(0, 183, 74, 0) 70%); +} + +.ripple-surface-info .ripple-wave { + background-image: radial-gradient(circle, rgba(57, 192, 237, 0.2) 0, rgba(57, 192, 237, 0.3) 40%, rgba(57, 192, 237, 0.4) 50%, rgba(57, 192, 237, 0.5) 60%, rgba(57, 192, 237, 0) 70%); +} + +.ripple-surface-warning .ripple-wave { + background-image: radial-gradient(circle, rgba(255, 169, 0, 0.2) 0, rgba(255, 169, 0, 0.3) 40%, rgba(255, 169, 0, 0.4) 50%, rgba(255, 169, 0, 0.5) 60%, rgba(255, 169, 0, 0) 70%); +} + +.ripple-surface-danger .ripple-wave { + background-image: radial-gradient(circle, rgba(249, 49, 84, 0.2) 0, rgba(249, 49, 84, 0.3) 40%, rgba(249, 49, 84, 0.4) 50%, rgba(249, 49, 84, 0.5) 60%, rgba(249, 49, 84, 0) 70%); +} + +.ripple-surface-light .ripple-wave { + background-image: radial-gradient(circle, rgba(251, 251, 251, 0.2) 0, rgba(251, 251, 251, 0.3) 40%, rgba(251, 251, 251, 0.4) 50%, rgba(251, 251, 251, 0.5) 60%, rgba(251, 251, 251, 0) 70%); +} + +.ripple-surface-dark .ripple-wave { + background-image: radial-gradient(circle, rgba(38, 38, 38, 0.2) 0, rgba(38, 38, 38, 0.3) 40%, rgba(38, 38, 38, 0.4) 50%, rgba(38, 38, 38, 0.5) 60%, rgba(38, 38, 38, 0) 70%); +} + +.ripple-surface-white .ripple-wave { + background-image: radial-gradient(circle, rgba(255, 255, 255, 0.2) 0, rgba(255, 255, 255, 0.3) 40%, rgba(255, 255, 255, 0.4) 50%, rgba(255, 255, 255, 0.5) 60%, rgba(255, 255, 255, 0) 70%); +} + +.ripple-surface-black .ripple-wave { + background-image: radial-gradient(circle, rgba(0, 0, 0, 0.2) 0, rgba(0, 0, 0, 0.3) 40%, rgba(0, 0, 0, 0.4) 50%, rgba(0, 0, 0, 0.5) 60%, transparent 70%); +} + +.datepicker-toggle-button { + position: absolute; + outline: none; + border: none; + background-color: transparent; + right: 10px; + top: 50%; + -webkit-transform: translate(-50%, -50%); + transform: translate(-50%, -50%); +} + +.datepicker-toggle-button:focus { + color: #2979ff; +} + +.datepicker-toggle-button:hover { + color: #2979ff; +} + +.datepicker-backdrop { + width: 100%; + height: 100%; + position: fixed; + top: 0; + right: 0; + bottom: 0; + left: 0; + background-color: rgba(0, 0, 0, 0.4); + z-index: 1065; +} + +.datepicker-dropdown-container { + width: 328px; + height: 380px; + background-color: #fff; + border-radius: 0.5rem; + box-shadow: 0 10px 15px -3px rgba(0, 0, 0, 0.07), 0 4px 6px -2px rgba(0, 0, 0, 0.05); + z-index: 1066; +} + +.datepicker-modal-container { + display: flex; + flex-direction: column; + position: fixed; + top: 50%; + left: 50%; + -webkit-transform: translate(-50%, -50%); + transform: translate(-50%, -50%); + width: 328px; + height: 512px; + background-color: #fff; + border-radius: 0.6rem 0.6rem 0.5rem 0.5rem; + box-shadow: 0 10px 15px -3px rgba(0, 0, 0, 0.07), 0 4px 6px -2px rgba(0, 0, 0, 0.05); + z-index: 1066; +} + +.datepicker-header { + height: 120px; + padding-right: 24px; + padding-left: 24px; + background-color: #2979ff; + display: flex; + flex-direction: column; + border-radius: 0.5rem 0.5rem 0 0; +} + +.datepicker-title { + height: 32px; + display: flex; + flex-direction: column; + justify-content: flex-end; +} + +.datepicker-title-text { + font-size: 10px; + font-weight: 400; + -webkit-text-transform: uppercase; + text-transform: uppercase; + letter-spacing: 1.7px; + color: #fff; +} + +.datepicker-date { + height: 72px; + display: flex; + flex-direction: column; + justify-content: flex-end; +} + +.datepicker-date-text { + font-size: 34px; + font-weight: 400; + color: #fff; +} + +.datepicker-main { + position: relative; + height: 100%; +} + +.datepicker-date-controls { + padding: 10px 12px 0 12px; + display: flex; + justify-content: space-between; + color: rgba(0, 0, 0, 0.64); +} + +.datepicker-view-change-button { + padding: 10px; + color: #666; + font-weight: 500; + font-size: 0.9rem; + border-radius: 10px; + box-shadow: none; + background-color: transparent; + margin: 0; + border: none; +} + +.datepicker-view-change-button:hover { + background-color: #eee; +} + +.datepicker-view-change-button:focus { + background-color: #eee; +} + +.datepicker-view-change-button:after { + content: ""; + display: inline-block; + width: 0; + height: 0; + border-left: 5px solid transparent; + border-right: 5px solid transparent; + border-top-width: 5px; + border-top-style: solid; + margin: 0 0 0 5px; + vertical-align: middle; +} + +.datepicker-arrow-controls { + margin-top: 10px; +} + +.datepicker-previous-button { + position: relative; + padding: 0; + width: 40px; + height: 40px; + line-height: 40px; + border: none; + outline: none; + margin: 0; + color: rgba(0, 0, 0, 0.64); + background-color: transparent; + margin-right: 24px; +} + +.datepicker-previous-button:hover { + background-color: #eee; + border-radius: 50%; +} + +.datepicker-previous-button:focus { + background-color: #eee; + border-radius: 50%; +} + +.datepicker-previous-button::after { + top: 0; + left: 0; + right: 0; + bottom: 0; + position: absolute; + content: ""; + margin: 15.5px; + border: 0 solid currentColor; + border-top-width: 2px; + border-left-width: 2px; + -webkit-transform: translateX(2px) rotate(-45deg); + transform: translateX(2px) rotate(-45deg); +} + +.datepicker-next-button { + position: relative; + padding: 0; + width: 40px; + height: 40px; + line-height: 40px; + border: none; + outline: none; + margin: 0; + color: rgba(0, 0, 0, 0.64); + background-color: transparent; +} + +.datepicker-next-button:hover { + background-color: #eee; + border-radius: 50%; +} + +.datepicker-next-button:focus { + background-color: #eee; + border-radius: 50%; +} + +.datepicker-next-button::after { + top: 0; + left: 0; + right: 0; + bottom: 0; + position: absolute; + content: ""; + margin: 15.5px; + border: 0 solid currentColor; + border-top-width: 2px; + border-right-width: 2px; + -webkit-transform: translateX(-2px) rotate(45deg); + transform: translateX(-2px) rotate(45deg); +} + +.datepicker-view { + padding-left: 12px; + padding-right: 12px; + outline: none; +} + +.datepicker-table { + margin-right: auto; + margin-left: auto; + width: 304px; +} + +.datepicker-day-heading { + width: 40px; + height: 40px; + -webkit-text-align: center; + text-align: center; + font-size: 12px; + font-weight: 400; +} + +.datepicker-cell { + -webkit-text-align: center; + text-align: center; +} + +.datepicker-cell.disabled { + color: #ccc; + cursor: default; + pointer-events: none; +} + +.datepicker-cell.disabled:hover { + cursor: default; +} + +.datepicker-cell:hover { + cursor: pointer; +} + +.datepicker-cell:not(.disabled):not(.selected):hover .datepicker-cell-content { + background-color: #d3d3d3; +} + +.datepicker-cell.selected .datepicker-cell-content { + background-color: #2979ff; + color: #fff; +} + +.datepicker-cell:not(.selected).focused .datepicker-cell-content { + background-color: #eee; +} + +.datepicker-cell.focused .datepicker-cell-content.selected { + background-color: #2979ff; +} + +.datepicker-cell.current .datepicker-cell-content { + border: 1px solid #000; +} + +.datepicker-small-cell { + width: 40px; + height: 40px; +} + +.datepicker-small-cell-content { + width: 36px; + height: 36px; + line-height: 36px; + border-radius: 50%; + font-size: 13px; +} + +.datepicker-large-cell { + width: 76px; + height: 42px; +} + +.datepicker-large-cell-content { + width: 72px; + height: 40px; + line-height: 40px; + padding: 1px 2px; + border-radius: 999px; +} + +.datepicker-footer { + height: 56px; + display: flex; + position: absolute; + width: 100%; + bottom: 0; + justify-content: flex-end; + align-items: center; + padding-left: 12px; + padding-right: 12px; +} + +.datepicker-footer-btn { + background-color: #fff; + color: #2979ff; + border: none; + cursor: pointer; + padding: 0 10px; + -webkit-text-transform: uppercase; + text-transform: uppercase; + font-size: 0.8rem; + font-weight: 500; + height: 40px; + line-height: 40px; + letter-spacing: 0.1rem; + border-radius: 10px; + margin-bottom: 10px; +} + +.datepicker-footer-btn:hover { + background-color: #eee; +} + +.datepicker-footer-btn:focus { + background-color: #eee; +} + +.datepicker-clear-btn { + margin-right: auto; +} + +.timepicker-wrapper { + touch-action: none; + z-index: 1065; + opacity: 0; + right: 0; + bottom: 0; + top: 0; + left: 0; + background-color: rgba(0, 0, 0, 0.4); +} + +.timepicker-elements { + min-width: 310px; + min-height: 325px; + background: #fff; + border-top-right-radius: 0.6rem; + border-top-left-radius: 0.6rem; +} + +.timepicker-head { + background-color: #2979ff; + height: 100px; + border-top-right-radius: 0.5rem; + border-top-left-radius: 0.5rem; + padding: 10px 24px 10px 50px; +} + +.timepicker-button { + font-size: 0.8rem; + min-width: 64px; + box-sizing: border-box; + font-weight: 500; + line-height: 40px; + border-radius: 10px; + letter-spacing: 0.1rem; + -webkit-text-transform: uppercase; + text-transform: uppercase; + color: #2979ff; + border: none; + background-color: transparent; + transition: background-color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms, box-shadow 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms, border 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms; + outline: none; + padding: 0 10px; + height: 40px; + margin-bottom: 10px; +} + +.timepicker-button:hover { + background-color: rgba(0, 0, 0, 0.08); +} + +.timepicker-button:focus { + outline: none; + background-color: rgba(0, 0, 0, 0.08); +} + +.timepicker-current { + font-size: 3.75rem; + font-weight: 300; + line-height: 1.2; + letter-spacing: -0.00833em; + color: #fff; + opacity: 0.54; + border: none; + background: transparent; + padding: 0; +} + +.timepicker-current.active { + opacity: 1; +} + +.timepicker-current-wrapper { + direction: ltr; +} + +.timepicker-mode-wrapper { + margin-left: 20px; + font-size: 18px; + color: rgba(255, 255, 255, 0.54); +} + +.timepicker-mode-wrapper.active { + opacity: 1; +} + +.timepicker-clock-wrapper { + min-width: 310px; + max-width: 325px; + min-height: 305px; + overflow-x: hidden; + height: 100%; +} + +.timepicker-clock { + position: relative; + border-radius: 100%; + width: 260px; + height: 260px; + cursor: default; + margin: 0 auto; + background-color: rgba(0, 0, 0, 0.07); +} + +.timepicker-time-tips-minutes.active { + color: #fff; + background-color: #2979ff; + font-weight: 400; +} + +.timepicker-time-tips-inner.active { + color: #fff; + background-color: #2979ff; + font-weight: 400; +} + +.timepicker-time-tips-hours.active { + color: #fff; + background-color: #2979ff; + font-weight: 400; +} + +.timepicker-time-tips-minutes.disabled { + color: #b3afaf; + pointer-events: none; + background-color: transparent; +} + +.timepicker-time-tips-inner.disabled { + color: #b3afaf; + pointer-events: none; + background-color: transparent; +} + +.timepicker-time-tips-hours.disabled { + color: #b3afaf; + pointer-events: none; + background-color: transparent; +} + +.timepicker-dot { + font-weight: 300; + line-height: 1.2; + letter-spacing: -0.00833em; + color: #fff; + font-size: 3.75rem; + opacity: 0.54; + border: none; + background: transparent; + padding: 0; +} + +.timepicker-middle-dot { + top: 50%; + left: 50%; + width: 6px; + height: 6px; + -webkit-transform: translate(-50%, -50%); + transform: translate(-50%, -50%); + border-radius: 50%; + background-color: #2979ff; +} + +.timepicker-hand-pointer { + background-color: #2979ff; + bottom: 50%; + height: 40%; + left: calc(50% - 1px); + -webkit-transform-origin: center bottom 0; + transform-origin: center bottom 0; + width: 2px; +} + +.timepicker-time-tips.active { + color: #fff; +} + +.timepicker-circle { + top: -21px; + left: -15px; + width: 4px; + border: 14px solid #2979ff; + height: 4px; + box-sizing: content-box; + border-radius: 100%; +} + +.timepicker-hour-mode { + padding: 0; + background-color: transparent; + border: none; + color: #fff; + opacity: 0.54; + cursor: pointer; +} + +.timepicker-hour { + cursor: pointer; +} + +.timepicker-minute { + cursor: pointer; +} + +.timepicker-hour-mode:hover { + background-color: rgba(0, 0, 0, 0.15); + outline: none; +} + +.timepicker-hour-mode:focus { + background-color: rgba(0, 0, 0, 0.15); + outline: none; +} + +.timepicker-hour:hover { + background-color: rgba(0, 0, 0, 0.15); + outline: none; +} + +.timepicker-hour:focus { + background-color: rgba(0, 0, 0, 0.15); + outline: none; +} + +.timepicker-minute:hover { + background-color: rgba(0, 0, 0, 0.15); + outline: none; +} + +.timepicker-minute:focus { + background-color: rgba(0, 0, 0, 0.15); + outline: none; +} + +.timepicker-hour-mode.active { + color: #fff; + opacity: 1; +} + +.timepicker-hour.active { + color: #fff; + opacity: 1; +} + +.timepicker-minute.active { + color: #fff; + opacity: 1; +} + +.timepicker-footer { + border-bottom-left-radius: 0.5rem; + border-bottom-right-radius: 0.5rem; + display: flex; + justify-content: space-between; + align-items: center; + width: 100%; + height: 56px; + padding-left: 12px; + padding-right: 12px; + background-color: #fff; +} + +.timepicker-container { + max-height: calc(100% - 64px); + overflow-y: auto; + box-shadow: 0 10px 15px -3px rgba(0, 0, 0, 0.07), 0 4px 6px -2px rgba(0, 0, 0, 0.05); +} + +.timepicker-icon-up.active { + opacity: 1; +} + +.timepicker-icon-down.active { + opacity: 1; +} + +.timepicker-toggle-button { + position: absolute; + outline: none; + border: none; + background-color: transparent; + right: 10px; + top: 50%; + -webkit-transform: translate(-50%, -50%); + transform: translate(-50%, -50%); + transition: all 0.3s ease; + cursor: pointer; +} + +.timepicker-toggle-button:hover { + color: #2979ff; +} + +.timepicker-toggle-button:focus { + color: #2979ff; +} + +.timepicker-input:focus + .timepicker-toggle-button { + color: #2979ff; +} + +.timepicker-input:focus + .timepicker-toggle-button i { + color: #2979ff; +} + +.timepicker a.timepicker-toggle-button { + right: 1px; +} + +.timepicker-toggle-button.timepicker-icon { + right: 1px; +} + +.timepicker-modal .fade.show { + opacity: 1; +} + +.stepper { + position: relative; + padding: 0; + margin: 0; + width: 100%; + list-style: none; + overflow: hidden; + transition: height 0.2s ease-in-out; +} + +.stepper:not(.stepper-vertical) { + display: flex; + justify-content: space-between; +} + +.stepper:not(.stepper-vertical) .stepper-content { + position: absolute; + width: 100%; + padding: 1rem; +} + +.stepper:not(.stepper-vertical) .stepper-step { + flex: auto; + height: 4.5rem; +} + +.stepper:not(.stepper-vertical) .stepper-step:first-child .stepper-head { + padding-left: 1.5rem; +} + +.stepper:not(.stepper-vertical) .stepper-step:last-child .stepper-head { + padding-right: 1.5rem; +} + +.stepper:not(.stepper-vertical) .stepper-step:not(:first-child) .stepper-head:before { + flex: 1; + height: 1px; + width: 100%; + margin-right: 0.5rem; + content: ""; + background-color: rgba(0, 0, 0, 0.1); +} + +.stepper:not(.stepper-vertical) .stepper-step:not(:last-child) .stepper-head:after { + flex: 1; + height: 1px; + width: 100%; + margin-left: 0.5rem; + content: ""; + background-color: rgba(0, 0, 0, 0.1); +} + +.stepper:not(.stepper-vertical) .stepper-head-icon { + margin: 1.5rem 0.5rem 1.5rem 0; +} + +.stepper.stepper-mobile { + justify-content: center; + align-items: flex-end; +} + +.stepper.stepper-mobile.stepper-progress-bar .stepper-head-icon { + display: none; +} + +.stepper.stepper-mobile .stepper-step { + flex: unset; + height: -webkit-fit-content; + height: -moz-fit-content; + height: fit-content; + margin: 1rem 0 1rem 0; +} + +.stepper.stepper-mobile .stepper-step:not(:last-child) .stepper-head:after { + margin-left: 0; +} + +.stepper.stepper-mobile .stepper-step:not(:first-child) .stepper-head:before { + margin-right: 0; +} + +.stepper.stepper-mobile .stepper-step:not(:last-child):not(:first-child) .stepper-head { + padding-left: 0.25rem; + padding-right: 0.25rem; +} + +.stepper.stepper-mobile .stepper-head-icon { + font-size: 0; + margin: 0; + height: 0.5rem; + width: 0.5rem; + z-index: 1; +} + +.stepper.stepper-mobile .stepper-head-text { + display: none; +} + +.stepper.stepper-mobile .stepper-content { + top: 2.56rem; +} + +@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::-webkit-file-upload-button { + -webkit-transition: none; + transition: none; + } + + .form-switch .form-check-input { + transition: none; + } + + .form-range::-webkit-slider-thumb { + -webkit-transition: none; + transition: none; + } + + .form-range::-moz-range-thumb { + -moz-transition: none; + transition: none; + } + + .form-floating > label { + transition: none; + } + + .fade { + transition: none; + } + + .collapsing { + transition: none; + } + + .collapsing.collapse-horizontal { + transition: none; + } + + .accordion-button::after { + transition: none; + } + + .modal.fade .modal-dialog { + transition: none; + } + + .carousel-item { + transition: none; + } + + .carousel-fade .active.carousel-item-start { + transition: none; + } + + .carousel-fade .active.carousel-item-end { + transition: none; + } + + .carousel-control-prev { + transition: none; + } + + .carousel-control-next { + transition: none; + } + + .carousel-indicators [data-bs-target] { + transition: none; + } + + .spinner-border { + -webkit-animation-duration: 1.5s; + animation-duration: 1.5s; + } + + .spinner-grow { + -webkit-animation-duration: 1.5s; + animation-duration: 1.5s; + } +} + +@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-right: 0.5rem; + padding-left: 0.5rem; + } + + .navbar-expand-sm .navbar-nav-scroll { + overflow: visible; + } + + .navbar-expand-sm .navbar-collapse { + display: flex !important; + -ms-flex-basis: auto; + flex-basis: auto; + } + + .navbar-expand-sm .navbar-toggler { + display: none; + } + + .navbar-expand-sm .offcanvas-header { + display: none; + } + + .navbar-expand-sm .offcanvas { + position: inherit; + bottom: 0; + z-index: 1000; + -ms-flex-grow: 1; + flex-grow: 1; + visibility: visible !important; + background-color: transparent; + border-right: 0; + border-left: 0; + transition: none; + -webkit-transform: none; + transform: none; + } + + .navbar-expand-sm .offcanvas-top { + height: auto; + border-top: 0; + border-bottom: 0; + } + + .navbar-expand-sm .offcanvas-bottom { + height: auto; + border-top: 0; + border-bottom: 0; + } + + .navbar-expand-sm .offcanvas-body { + display: flex; + -ms-flex-grow: 0; + flex-grow: 0; + padding: 0; + overflow-y: visible; + } + + .modal-dialog { + max-width: 500px; + margin: 1.75rem auto; + } + + .modal-dialog-scrollable { + height: calc(100% - 3.5rem); + } + + .modal-dialog-centered { + min-height: calc(100% - 3.5rem); + } + + .modal-sm { + max-width: 300px; + } + + .sticky-sm-top { + position: -webkit-sticky; + position: sticky; + top: 0; + z-index: 1020; + } +} + +@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-right: 0.5rem; + padding-left: 0.5rem; + } + + .navbar-expand-md .navbar-nav-scroll { + overflow: visible; + } + + .navbar-expand-md .navbar-collapse { + display: flex !important; + -ms-flex-basis: auto; + flex-basis: auto; + } + + .navbar-expand-md .navbar-toggler { + display: none; + } + + .navbar-expand-md .offcanvas-header { + display: none; + } + + .navbar-expand-md .offcanvas { + position: inherit; + bottom: 0; + z-index: 1000; + -ms-flex-grow: 1; + flex-grow: 1; + visibility: visible !important; + background-color: transparent; + border-right: 0; + border-left: 0; + transition: none; + -webkit-transform: none; + transform: none; + } + + .navbar-expand-md .offcanvas-top { + height: auto; + border-top: 0; + border-bottom: 0; + } + + .navbar-expand-md .offcanvas-bottom { + height: auto; + border-top: 0; + border-bottom: 0; + } + + .navbar-expand-md .offcanvas-body { + display: flex; + -ms-flex-grow: 0; + flex-grow: 0; + padding: 0; + overflow-y: visible; + } + + .sticky-md-top { + position: -webkit-sticky; + position: sticky; + top: 0; + z-index: 1020; + } +} + +@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-right: 0.5rem; + padding-left: 0.5rem; + } + + .navbar-expand-lg .navbar-nav-scroll { + overflow: visible; + } + + .navbar-expand-lg .navbar-collapse { + display: flex !important; + -ms-flex-basis: auto; + flex-basis: auto; + } + + .navbar-expand-lg .navbar-toggler { + display: none; + } + + .navbar-expand-lg .offcanvas-header { + display: none; + } + + .navbar-expand-lg .offcanvas { + position: inherit; + bottom: 0; + z-index: 1000; + -ms-flex-grow: 1; + flex-grow: 1; + visibility: visible !important; + background-color: transparent; + border-right: 0; + border-left: 0; + transition: none; + -webkit-transform: none; + transform: none; + } + + .navbar-expand-lg .offcanvas-top { + height: auto; + border-top: 0; + border-bottom: 0; + } + + .navbar-expand-lg .offcanvas-bottom { + height: auto; + border-top: 0; + border-bottom: 0; + } + + .navbar-expand-lg .offcanvas-body { + display: flex; + -ms-flex-grow: 0; + flex-grow: 0; + padding: 0; + overflow-y: visible; + } + + .modal-lg { + max-width: 800px; + } + + .modal-xl { + max-width: 800px; + } + + .sticky-lg-top { + position: -webkit-sticky; + position: sticky; + top: 0; + z-index: 1020; + } +} + +@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-right: 0.5rem; + padding-left: 0.5rem; + } + + .navbar-expand-xl .navbar-nav-scroll { + overflow: visible; + } + + .navbar-expand-xl .navbar-collapse { + display: flex !important; + -ms-flex-basis: auto; + flex-basis: auto; + } + + .navbar-expand-xl .navbar-toggler { + display: none; + } + + .navbar-expand-xl .offcanvas-header { + display: none; + } + + .navbar-expand-xl .offcanvas { + position: inherit; + bottom: 0; + z-index: 1000; + -ms-flex-grow: 1; + flex-grow: 1; + visibility: visible !important; + background-color: transparent; + border-right: 0; + border-left: 0; + transition: none; + -webkit-transform: none; + transform: none; + } + + .navbar-expand-xl .offcanvas-top { + height: auto; + border-top: 0; + border-bottom: 0; + } + + .navbar-expand-xl .offcanvas-bottom { + height: auto; + border-top: 0; + border-bottom: 0; + } + + .navbar-expand-xl .offcanvas-body { + display: flex; + -ms-flex-grow: 0; + flex-grow: 0; + padding: 0; + overflow-y: visible; + } + + .modal-xl { + max-width: 1140px; + } + + .sticky-xl-top { + position: -webkit-sticky; + position: sticky; + top: 0; + z-index: 1020; + } +} + +@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-right: 0.5rem; + padding-left: 0.5rem; + } + + .navbar-expand-xxl .navbar-nav-scroll { + overflow: visible; + } + + .navbar-expand-xxl .navbar-collapse { + display: flex !important; + -ms-flex-basis: auto; + flex-basis: auto; + } + + .navbar-expand-xxl .navbar-toggler { + display: none; + } + + .navbar-expand-xxl .offcanvas-header { + display: none; + } + + .navbar-expand-xxl .offcanvas { + position: inherit; + bottom: 0; + z-index: 1000; + -ms-flex-grow: 1; + flex-grow: 1; + visibility: visible !important; + background-color: transparent; + border-right: 0; + border-left: 0; + transition: none; + -webkit-transform: none; + transform: none; + } + + .navbar-expand-xxl .offcanvas-top { + height: auto; + border-top: 0; + border-bottom: 0; + } + + .navbar-expand-xxl .offcanvas-bottom { + height: auto; + border-top: 0; + border-bottom: 0; + } + + .navbar-expand-xxl .offcanvas-body { + display: flex; + -ms-flex-grow: 0; + flex-grow: 0; + padding: 0; + overflow-y: visible; + } + + .sticky-xxl-top { + position: -webkit-sticky; + position: sticky; + top: 0; + z-index: 1020; + } +} + +@media (max-width: 575.98px) { + .modal-fullscreen-sm-down { + width: 100vw; + max-width: none; + height: 100%; + margin: 0; + } + + .modal-fullscreen-sm-down .modal-content { + height: 100%; + border: 0; + border-radius: 0; + } + + .modal-fullscreen-sm-down .modal-header { + border-radius: 0; + } + + .modal-fullscreen-sm-down .modal-body { + overflow-y: auto; + } + + .modal-fullscreen-sm-down .modal-footer { + border-radius: 0; + } +} + +@media (max-width: 767.98px) { + .modal-fullscreen-md-down { + width: 100vw; + max-width: none; + height: 100%; + margin: 0; + } + + .modal-fullscreen-md-down .modal-content { + height: 100%; + border: 0; + border-radius: 0; + } + + .modal-fullscreen-md-down .modal-header { + border-radius: 0; + } + + .modal-fullscreen-md-down .modal-body { + overflow-y: auto; + } + + .modal-fullscreen-md-down .modal-footer { + border-radius: 0; + } +} + +@media (max-width: 991.98px) { + .modal-fullscreen-lg-down { + width: 100vw; + max-width: none; + height: 100%; + margin: 0; + } + + .modal-fullscreen-lg-down .modal-content { + height: 100%; + border: 0; + border-radius: 0; + } + + .modal-fullscreen-lg-down .modal-header { + border-radius: 0; + } + + .modal-fullscreen-lg-down .modal-body { + overflow-y: auto; + } + + .modal-fullscreen-lg-down .modal-footer { + border-radius: 0; + } +} + +@media (max-width: 1199.98px) { + .modal-fullscreen-xl-down { + width: 100vw; + max-width: none; + height: 100%; + margin: 0; + } + + .modal-fullscreen-xl-down .modal-content { + height: 100%; + border: 0; + border-radius: 0; + } + + .modal-fullscreen-xl-down .modal-header { + border-radius: 0; + } + + .modal-fullscreen-xl-down .modal-body { + overflow-y: auto; + } + + .modal-fullscreen-xl-down .modal-footer { + border-radius: 0; + } +} + +@media (max-width: 1399.98px) { + .modal-fullscreen-xxl-down { + width: 100vw; + max-width: none; + height: 100%; + margin: 0; + } + + .modal-fullscreen-xxl-down .modal-content { + height: 100%; + border: 0; + border-radius: 0; + } + + .modal-fullscreen-xxl-down .modal-header { + border-radius: 0; + } + + .modal-fullscreen-xxl-down .modal-body { + overflow-y: auto; + } + + .modal-fullscreen-xxl-down .modal-footer { + border-radius: 0; + } +} + +@media (prefers-reduced-motion) { + .animation { + transition: none !important; + -webkit-animation: unset !important; + animation: unset !important; + } +} + +@media screen and (min-width: 320px) and (max-width: 820px) and (orientation: landscape) { + .datepicker-modal-container .datepicker-header { + height: 100%; + } + + .datepicker-modal-container .datepicker-date { + margin-top: 100px; + } + + .datepicker-modal-container .datepicker-day-cell { + width: 32x; + height: 32x; + } + + .datepicker-modal-container { + flex-direction: row; + width: 475px; + height: 360px; + } + + .datepicker-modal-container.datepicker-day-cell { + width: 36px; + height: 36px; + } +} + +@media screen and (min-width: 320px) and (max-width: 825px) and (orientation: landscape) { + .timepicker-elements { + flex-direction: row !important; + border-bottom-left-radius: 0.5rem; + min-width: auto; + min-height: auto; + overflow-y: auto; + } + + .timepicker-head { + border-top-right-radius: 0; + border-bottom-left-radius: 0; + padding: 10px; + padding-right: 10px !important; + height: auto; + min-height: 305px; + } + + .timepicker-head-content { + flex-direction: column; + } + + .timepicker-mode-wrapper { + justify-content: space-around !important; + flex-direction: row !important; + } + + .timepicker-current { + font-size: 3rem; + font-weight: 400; + } + + .timepicker-dot { + font-size: 3rem; + font-weight: 400; + } +} + +@-webkit-keyframes _spinner-grow { + 0% { + -webkit-transform: scale(0); + transform: scale(0); + } + + 50% { + opacity: 1; + -webkit-transform: none; + transform: none; + } +} + +@keyframes _spinner-grow { + 0% { + -webkit-transform: scale(0); + transform: scale(0); + } + + 50% { + opacity: 1; + -webkit-transform: none; + transform: none; + } +} + +@-webkit-keyframes _fade-in { + from { + opacity: 0; + } + + to { + opacity: 1; + } +} + +@keyframes _fade-in { + from { + opacity: 0; + } + + to { + opacity: 1; + } +} + +@-webkit-keyframes _fade-out { + from { + opacity: 1; + } + + to { + opacity: 0; + } +} + +@keyframes _fade-out { + from { + opacity: 1; + } + + to { + opacity: 0; + } +} + +@-webkit-keyframes _fade-in-down { + from { + opacity: 0; + -webkit-transform: translate3d(0, -100%, 0); + transform: translate3d(0, -100%, 0); + } + + to { + opacity: 1; + -webkit-transform: translate3d(0, 0, 0); + transform: translate3d(0, 0, 0); + } +} + +@keyframes _fade-in-down { + from { + opacity: 0; + -webkit-transform: translate3d(0, -100%, 0); + transform: translate3d(0, -100%, 0); + } + + to { + opacity: 1; + -webkit-transform: translate3d(0, 0, 0); + transform: translate3d(0, 0, 0); + } +} + +@-webkit-keyframes _fade-in-left { + from { + opacity: 0; + -webkit-transform: translate3d(-100%, 0, 0); + transform: translate3d(-100%, 0, 0); + } + + to { + opacity: 1; + -webkit-transform: translate3d(0, 0, 0); + transform: translate3d(0, 0, 0); + } +} + +@keyframes _fade-in-left { + from { + opacity: 0; + -webkit-transform: translate3d(-100%, 0, 0); + transform: translate3d(-100%, 0, 0); + } + + to { + opacity: 1; + -webkit-transform: translate3d(0, 0, 0); + transform: translate3d(0, 0, 0); + } +} + +@-webkit-keyframes _fade-in-right { + from { + opacity: 0; + -webkit-transform: translate3d(100%, 0, 0); + transform: translate3d(100%, 0, 0); + } + + to { + opacity: 1; + -webkit-transform: translate3d(0, 0, 0); + transform: translate3d(0, 0, 0); + } +} + +@keyframes _fade-in-right { + from { + opacity: 0; + -webkit-transform: translate3d(100%, 0, 0); + transform: translate3d(100%, 0, 0); + } + + to { + opacity: 1; + -webkit-transform: translate3d(0, 0, 0); + transform: translate3d(0, 0, 0); + } +} + +@-webkit-keyframes _fade-in-up { + from { + opacity: 0; + -webkit-transform: translate3d(0, 100%, 0); + transform: translate3d(0, 100%, 0); + } + + to { + opacity: 1; + -webkit-transform: translate3d(0, 0, 0); + transform: translate3d(0, 0, 0); + } +} + +@keyframes _fade-in-up { + from { + opacity: 0; + -webkit-transform: translate3d(0, 100%, 0); + transform: translate3d(0, 100%, 0); + } + + to { + opacity: 1; + -webkit-transform: translate3d(0, 0, 0); + transform: translate3d(0, 0, 0); + } +} + +@-webkit-keyframes _fade-out-down { + from { + opacity: 1; + } + + to { + opacity: 0; + -webkit-transform: translate3d(0, 100%, 0); + transform: translate3d(0, 100%, 0); + } +} + +@keyframes _fade-out-down { + from { + opacity: 1; + } + + to { + opacity: 0; + -webkit-transform: translate3d(0, 100%, 0); + transform: translate3d(0, 100%, 0); + } +} + +@-webkit-keyframes _fade-out-left { + from { + opacity: 1; + } + + to { + opacity: 0; + -webkit-transform: translate3d(-100%, 0, 0); + transform: translate3d(-100%, 0, 0); + } +} + +@keyframes _fade-out-left { + from { + opacity: 1; + } + + to { + opacity: 0; + -webkit-transform: translate3d(-100%, 0, 0); + transform: translate3d(-100%, 0, 0); + } +} + +@-webkit-keyframes _fade-out-right { + from { + opacity: 1; + } + + to { + opacity: 0; + -webkit-transform: translate3d(100%, 0, 0); + transform: translate3d(100%, 0, 0); + } +} + +@keyframes _fade-out-right { + from { + opacity: 1; + } + + to { + opacity: 0; + -webkit-transform: translate3d(100%, 0, 0); + transform: translate3d(100%, 0, 0); + } +} + +@-webkit-keyframes _fade-out-up { + from { + opacity: 1; + } + + to { + opacity: 0; + -webkit-transform: translate3d(0, -100%, 0); + transform: translate3d(0, -100%, 0); + } +} + +@keyframes _fade-out-up { + from { + opacity: 1; + } + + to { + opacity: 0; + -webkit-transform: translate3d(0, -100%, 0); + transform: translate3d(0, -100%, 0); + } +} + +@-webkit-keyframes _slide-in-down { + from { + visibility: visible; + -webkit-transform: translate3d(0, -100%, 0); + transform: translate3d(0, -100%, 0); + } + + to { + -webkit-transform: translate3d(0, 0, 0); + transform: translate3d(0, 0, 0); + } +} + +@keyframes _slide-in-down { + from { + visibility: visible; + -webkit-transform: translate3d(0, -100%, 0); + transform: translate3d(0, -100%, 0); + } + + to { + -webkit-transform: translate3d(0, 0, 0); + transform: translate3d(0, 0, 0); + } +} + +@-webkit-keyframes _slide-in-left { + from { + visibility: visible; + -webkit-transform: translate3d(-100%, 0, 0); + transform: translate3d(-100%, 0, 0); + } + + to { + -webkit-transform: translate3d(0, 0, 0); + transform: translate3d(0, 0, 0); + } +} + +@keyframes _slide-in-left { + from { + visibility: visible; + -webkit-transform: translate3d(-100%, 0, 0); + transform: translate3d(-100%, 0, 0); + } + + to { + -webkit-transform: translate3d(0, 0, 0); + transform: translate3d(0, 0, 0); + } +} + +@-webkit-keyframes _slide-in-right { + from { + visibility: visible; + -webkit-transform: translate3d(100%, 0, 0); + transform: translate3d(100%, 0, 0); + } + + to { + -webkit-transform: translate3d(0, 0, 0); + transform: translate3d(0, 0, 0); + } +} + +@keyframes _slide-in-right { + from { + visibility: visible; + -webkit-transform: translate3d(100%, 0, 0); + transform: translate3d(100%, 0, 0); + } + + to { + -webkit-transform: translate3d(0, 0, 0); + transform: translate3d(0, 0, 0); + } +} + +@-webkit-keyframes _slide-in-up { + from { + visibility: visible; + -webkit-transform: translate3d(0, 100%, 0); + transform: translate3d(0, 100%, 0); + } + + to { + -webkit-transform: translate3d(0, 0, 0); + transform: translate3d(0, 0, 0); + } +} + +@keyframes _slide-in-up { + from { + visibility: visible; + -webkit-transform: translate3d(0, 100%, 0); + transform: translate3d(0, 100%, 0); + } + + to { + -webkit-transform: translate3d(0, 0, 0); + transform: translate3d(0, 0, 0); + } +} + +@-webkit-keyframes _slide-out-down { + from { + -webkit-transform: translate3d(0, 0, 0); + transform: translate3d(0, 0, 0); + } + + to { + visibility: hidden; + -webkit-transform: translate3d(0, 100%, 0); + transform: translate3d(0, 100%, 0); + } +} + +@keyframes _slide-out-down { + from { + -webkit-transform: translate3d(0, 0, 0); + transform: translate3d(0, 0, 0); + } + + to { + visibility: hidden; + -webkit-transform: translate3d(0, 100%, 0); + transform: translate3d(0, 100%, 0); + } +} + +@-webkit-keyframes _slide-out-left { + from { + -webkit-transform: translate3d(0, 0, 0); + transform: translate3d(0, 0, 0); + } + + to { + visibility: hidden; + -webkit-transform: translate3d(-100%, 0, 0); + transform: translate3d(-100%, 0, 0); + } +} + +@keyframes _slide-out-left { + from { + -webkit-transform: translate3d(0, 0, 0); + transform: translate3d(0, 0, 0); + } + + to { + visibility: hidden; + -webkit-transform: translate3d(-100%, 0, 0); + transform: translate3d(-100%, 0, 0); + } +} + +@-webkit-keyframes _slide-out-right { + from { + -webkit-transform: translate3d(0, 0, 0); + transform: translate3d(0, 0, 0); + } + + to { + visibility: hidden; + -webkit-transform: translate3d(100%, 0, 0); + transform: translate3d(100%, 0, 0); + } +} + +@keyframes _slide-out-right { + from { + -webkit-transform: translate3d(0, 0, 0); + transform: translate3d(0, 0, 0); + } + + to { + visibility: hidden; + -webkit-transform: translate3d(100%, 0, 0); + transform: translate3d(100%, 0, 0); + } +} + +@-webkit-keyframes _slide-out-up { + from { + -webkit-transform: translate3d(0, 0, 0); + transform: translate3d(0, 0, 0); + } + + to { + visibility: hidden; + -webkit-transform: translate3d(0, -100%, 0); + transform: translate3d(0, -100%, 0); + } +} + +@keyframes _slide-out-up { + from { + -webkit-transform: translate3d(0, 0, 0); + transform: translate3d(0, 0, 0); + } + + to { + visibility: hidden; + -webkit-transform: translate3d(0, -100%, 0); + transform: translate3d(0, -100%, 0); + } +} + +@-webkit-keyframes _slide-down { + from { + -webkit-transform: translate3d(0, 0, 0); + transform: translate3d(0, 0, 0); + } + + to { + -webkit-transform: translate3d(0, 100%, 0); + transform: translate3d(0, 100%, 0); + } +} + +@keyframes _slide-down { + from { + -webkit-transform: translate3d(0, 0, 0); + transform: translate3d(0, 0, 0); + } + + to { + -webkit-transform: translate3d(0, 100%, 0); + transform: translate3d(0, 100%, 0); + } +} + +@-webkit-keyframes _slide-left { + from { + -webkit-transform: translate3d(0, 0, 0); + transform: translate3d(0, 0, 0); + } + + to { + -webkit-transform: translate3d(-100%, 0, 0); + transform: translate3d(-100%, 0, 0); + } +} + +@keyframes _slide-left { + from { + -webkit-transform: translate3d(0, 0, 0); + transform: translate3d(0, 0, 0); + } + + to { + -webkit-transform: translate3d(-100%, 0, 0); + transform: translate3d(-100%, 0, 0); + } +} + +@-webkit-keyframes _slide-right { + from { + -webkit-transform: translate3d(0, 0, 0); + transform: translate3d(0, 0, 0); + } + + to { + -webkit-transform: translate3d(100%, 0, 0); + transform: translate3d(100%, 0, 0); + } +} + +@keyframes _slide-right { + from { + -webkit-transform: translate3d(0, 0, 0); + transform: translate3d(0, 0, 0); + } + + to { + -webkit-transform: translate3d(100%, 0, 0); + transform: translate3d(100%, 0, 0); + } +} + +@-webkit-keyframes _slide-up { + from { + -webkit-transform: translate3d(0, 0, 0); + transform: translate3d(0, 0, 0); + } + + to { + -webkit-transform: translate3d(0, -100%, 0); + transform: translate3d(0, -100%, 0); + } +} + +@keyframes _slide-up { + from { + -webkit-transform: translate3d(0, 0, 0); + transform: translate3d(0, 0, 0); + } + + to { + -webkit-transform: translate3d(0, -100%, 0); + transform: translate3d(0, -100%, 0); + } +} + +@-webkit-keyframes _zoom-in { + from { + opacity: 0; + -webkit-transform: scale3d(0.3, 0.3, 0.3); + transform: scale3d(0.3, 0.3, 0.3); + } + + 50% { + opacity: 1; + } +} + +@keyframes _zoom-in { + from { + opacity: 0; + -webkit-transform: scale3d(0.3, 0.3, 0.3); + transform: scale3d(0.3, 0.3, 0.3); + } + + 50% { + opacity: 1; + } +} + +@-webkit-keyframes _zoom-out { + from { + opacity: 1; + } + + 50% { + opacity: 0; + -webkit-transform: scale3d(0.3, 0.3, 0.3); + transform: scale3d(0.3, 0.3, 0.3); + } + + to { + opacity: 0; + } +} + +@keyframes _zoom-out { + from { + opacity: 1; + } + + 50% { + opacity: 0; + -webkit-transform: scale3d(0.3, 0.3, 0.3); + transform: scale3d(0.3, 0.3, 0.3); + } + + to { + opacity: 0; + } +} + +@-webkit-keyframes _tada { + from { + -webkit-transform: scale3d(1, 1, 1); + transform: scale3d(1, 1, 1); + } + + 10% { + -webkit-transform: scale3d(0.9, 0.9, 0.9) rotate3d(0, 0, 1, -3deg); + transform: scale3d(0.9, 0.9, 0.9) rotate3d(0, 0, 1, -3deg); + } + + 20% { + -webkit-transform: scale3d(0.9, 0.9, 0.9) rotate3d(0, 0, 1, -3deg); + transform: scale3d(0.9, 0.9, 0.9) rotate3d(0, 0, 1, -3deg); + } + + 30% { + -webkit-transform: scale3d(1.1, 1.1, 1.1) rotate3d(0, 0, 1, 3deg); + transform: scale3d(1.1, 1.1, 1.1) rotate3d(0, 0, 1, 3deg); + } + + 50% { + -webkit-transform: scale3d(1.1, 1.1, 1.1) rotate3d(0, 0, 1, 3deg); + transform: scale3d(1.1, 1.1, 1.1) rotate3d(0, 0, 1, 3deg); + } + + 70% { + -webkit-transform: scale3d(1.1, 1.1, 1.1) rotate3d(0, 0, 1, 3deg); + transform: scale3d(1.1, 1.1, 1.1) rotate3d(0, 0, 1, 3deg); + } + + 90% { + -webkit-transform: scale3d(1.1, 1.1, 1.1) rotate3d(0, 0, 1, 3deg); + transform: scale3d(1.1, 1.1, 1.1) rotate3d(0, 0, 1, 3deg); + } + + 40% { + -webkit-transform: scale3d(1.1, 1.1, 1.1) rotate3d(0, 0, 1, -3deg); + transform: scale3d(1.1, 1.1, 1.1) rotate3d(0, 0, 1, -3deg); + } + + 60% { + -webkit-transform: scale3d(1.1, 1.1, 1.1) rotate3d(0, 0, 1, -3deg); + transform: scale3d(1.1, 1.1, 1.1) rotate3d(0, 0, 1, -3deg); + } + + 80% { + -webkit-transform: scale3d(1.1, 1.1, 1.1) rotate3d(0, 0, 1, -3deg); + transform: scale3d(1.1, 1.1, 1.1) rotate3d(0, 0, 1, -3deg); + } + + to { + -webkit-transform: scale3d(1, 1, 1); + transform: scale3d(1, 1, 1); + } +} + +@keyframes _tada { + from { + -webkit-transform: scale3d(1, 1, 1); + transform: scale3d(1, 1, 1); + } + + 10% { + -webkit-transform: scale3d(0.9, 0.9, 0.9) rotate3d(0, 0, 1, -3deg); + transform: scale3d(0.9, 0.9, 0.9) rotate3d(0, 0, 1, -3deg); + } + + 20% { + -webkit-transform: scale3d(0.9, 0.9, 0.9) rotate3d(0, 0, 1, -3deg); + transform: scale3d(0.9, 0.9, 0.9) rotate3d(0, 0, 1, -3deg); + } + + 30% { + -webkit-transform: scale3d(1.1, 1.1, 1.1) rotate3d(0, 0, 1, 3deg); + transform: scale3d(1.1, 1.1, 1.1) rotate3d(0, 0, 1, 3deg); + } + + 50% { + -webkit-transform: scale3d(1.1, 1.1, 1.1) rotate3d(0, 0, 1, 3deg); + transform: scale3d(1.1, 1.1, 1.1) rotate3d(0, 0, 1, 3deg); + } + + 70% { + -webkit-transform: scale3d(1.1, 1.1, 1.1) rotate3d(0, 0, 1, 3deg); + transform: scale3d(1.1, 1.1, 1.1) rotate3d(0, 0, 1, 3deg); + } + + 90% { + -webkit-transform: scale3d(1.1, 1.1, 1.1) rotate3d(0, 0, 1, 3deg); + transform: scale3d(1.1, 1.1, 1.1) rotate3d(0, 0, 1, 3deg); + } + + 40% { + -webkit-transform: scale3d(1.1, 1.1, 1.1) rotate3d(0, 0, 1, -3deg); + transform: scale3d(1.1, 1.1, 1.1) rotate3d(0, 0, 1, -3deg); + } + + 60% { + -webkit-transform: scale3d(1.1, 1.1, 1.1) rotate3d(0, 0, 1, -3deg); + transform: scale3d(1.1, 1.1, 1.1) rotate3d(0, 0, 1, -3deg); + } + + 80% { + -webkit-transform: scale3d(1.1, 1.1, 1.1) rotate3d(0, 0, 1, -3deg); + transform: scale3d(1.1, 1.1, 1.1) rotate3d(0, 0, 1, -3deg); + } + + to { + -webkit-transform: scale3d(1, 1, 1); + transform: scale3d(1, 1, 1); + } +} + +@-webkit-keyframes _pulse { + from { + -webkit-transform: scale3d(1, 1, 1); + transform: scale3d(1, 1, 1); + } + + 50% { + -webkit-transform: scale3d(1.05, 1.05, 1.05); + transform: scale3d(1.05, 1.05, 1.05); + } + + to { + -webkit-transform: scale3d(1, 1, 1); + transform: scale3d(1, 1, 1); + } +} + +@keyframes _pulse { + from { + -webkit-transform: scale3d(1, 1, 1); + transform: scale3d(1, 1, 1); + } + + 50% { + -webkit-transform: scale3d(1.05, 1.05, 1.05); + transform: scale3d(1.05, 1.05, 1.05); + } + + to { + -webkit-transform: scale3d(1, 1, 1); + transform: scale3d(1, 1, 1); + } +} + +@-webkit-keyframes _show-up-clock { + 0% { + opacity: 0; + -webkit-transform: scale(0.7); + transform: scale(0.7); + } + + to { + opacity: 1; + -webkit-transform: scale(1); + transform: scale(1); + } +} + +@keyframes _show-up-clock { + 0% { + opacity: 0; + -webkit-transform: scale(0.7); + transform: scale(0.7); + } + + to { + opacity: 1; + -webkit-transform: scale(1); + transform: scale(1); + } +} + +.visible { + visibility: visible; +} + +.collapse { + visibility: collapse; +} + +.static { + position: static; +} + +.fixed { + position: fixed; +} + +.absolute { + position: absolute; +} + +.relative { + position: relative; +} + +.sticky { + position: -webkit-sticky; + position: sticky; +} + +.float-left { + float: left; +} + +.m-0 { + margin: 0px; +} + +.mx-1 { + margin-left: 0.25rem; + margin-right: 0.25rem; +} + +.my-4 { + margin-top: 1rem; + margin-bottom: 1rem; +} + +.mx-4 { + margin-left: 1rem; + margin-right: 1rem; +} + +.mb-12 { + margin-bottom: 3rem; +} + +.mb-0 { + margin-bottom: 0px; +} + +.mr-4 { + margin-right: 1rem; +} + +.mb-6 { + margin-bottom: 1.5rem; +} + +.mt-1 { + margin-top: 0.25rem; +} + +.mr-2 { + margin-right: 0.5rem; +} + +.mt-2 { + margin-top: 0.5rem; +} + +.block { + display: block; +} + +.inline-block { + display: inline-block; +} + +.inline { + display: inline; +} + +.flex { + display: flex; +} + +.table { + display: table; +} + +.hidden { + display: none; +} + +.h-full { + height: 100%; +} + +.h-screen { + height: 100vh; +} + +.h-4 { + height: 1rem; +} + +.w-full { + width: 100%; +} + +.w-4 { + width: 1rem; +} + +.grow-0 { + flex-grow: 0; +} + +.basis-auto { + flex-basis: auto; +} + +.transform { + -webkit-transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y)); + transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y)); +} + +.cursor-pointer { + cursor: pointer; +} + +.resize { + resize: both; +} + +.appearance-none { + -webkit-appearance: none; + appearance: none; +} + +.flex-row { + flex-direction: row; +} + +.flex-col { + flex-direction: column; +} + +.flex-wrap { + flex-wrap: wrap; +} + +.items-center { + align-items: center; +} + +.justify-center { + justify-content: center; +} + +.justify-between { + justify-content: space-between; +} + +.justify-around { + justify-content: space-around; +} + +.justify-evenly { + justify-content: space-evenly; +} + +.rounded-full { + border-radius: 9999px; +} + +.rounded { + border-radius: 0.25rem; +} + +.rounded-sm { + border-radius: 0.125rem; +} + +.border { + border-width: 1px; +} + +.border-solid { + border-style: solid; +} + +.border-gray-300 { + --tw-border-opacity: 1; + border-color: rgb(209 213 219 / var(--tw-border-opacity)); +} + +.bg-blue-600 { + --tw-bg-opacity: 1; + background-color: rgb(37 99 235 / var(--tw-bg-opacity)); +} + +.bg-white { + --tw-bg-opacity: 1; + background-color: rgb(255 255 255 / var(--tw-bg-opacity)); +} + +.bg-contain { + background-size: contain; +} + +.bg-clip-padding { + background-clip: padding-box; +} + +.bg-center { + background-position: center; +} + +.bg-no-repeat { + background-repeat: no-repeat; +} + +.p-3 { + padding: 0.75rem; +} + +.px-6 { + padding-left: 1.5rem; + padding-right: 1.5rem; +} + +.px-4 { + padding-left: 1rem; + padding-right: 1rem; +} + +.py-2 { + padding-top: 0.5rem; + padding-bottom: 0.5rem; +} + +.px-7 { + padding-left: 1.75rem; + padding-right: 1.75rem; +} + +.py-3 { + padding-top: 0.75rem; + padding-bottom: 0.75rem; +} + +.pt-1 { + padding-top: 0.25rem; +} + +.text-center { + text-align: center; +} + +.align-top { + vertical-align: top; +} + +.text-lg { + font-size: 1.125rem; + line-height: 1.75rem; +} + +.text-xs { + font-size: 0.75rem; + line-height: 1rem; +} + +.text-xl { + font-size: 1.25rem; + line-height: 1.75rem; +} + +.text-sm { + font-size: 0.875rem; + line-height: 1.25rem; +} + +.font-medium { + font-weight: 500; +} + +.font-semibold { + font-weight: 600; +} + +.font-normal { + font-weight: 400; +} + +.uppercase { + text-transform: uppercase; +} + +.leading-tight { + line-height: 1.25; +} + +.leading-snug { + line-height: 1.375; +} + +.text-gray-800 { + --tw-text-opacity: 1; + color: rgb(31 41 55 / var(--tw-text-opacity)); +} + +.text-white { + --tw-text-opacity: 1; + color: rgb(255 255 255 / var(--tw-text-opacity)); +} + +.text-gray-700 { + --tw-text-opacity: 1; + color: rgb(55 65 81 / var(--tw-text-opacity)); +} + +.text-red-600 { + --tw-text-opacity: 1; + color: rgb(220 38 38 / var(--tw-text-opacity)); +} + +.shadow-md { + --tw-shadow: 0 4px 6px -1px rgb(0 0 0 / 0.1), 0 2px 4px -2px rgb(0 0 0 / 0.1); + --tw-shadow-colored: 0 4px 6px -1px var(--tw-shadow-color), 0 2px 4px -2px var(--tw-shadow-color); + box-shadow: var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000), var(--tw-shadow); +} + +.outline { + outline-style: solid; +} + +.blur { + --tw-blur: blur(8px); + -webkit-filter: var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow); + filter: var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow); +} + +.filter { + -webkit-filter: var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow); + filter: var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow); +} + +.transition { + transition-property: color, background-color, border-color, text-decoration-color, fill, stroke, opacity, box-shadow, -webkit-transform, -webkit-filter, -webkit-backdrop-filter; + transition-property: color, background-color, border-color, text-decoration-color, fill, stroke, opacity, box-shadow, transform, filter, backdrop-filter; + transition-property: color, background-color, border-color, text-decoration-color, fill, stroke, opacity, box-shadow, transform, filter, backdrop-filter, -webkit-transform, -webkit-filter, -webkit-backdrop-filter; + transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1); + transition-duration: 150ms; +} + +.duration-150 { + transition-duration: 150ms; +} + +.duration-200 { + transition-duration: 200ms; +} + +.ease-in-out { + transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1); +} + +.before\:mt-0\.5::before { + content: var(--tw-content); + margin-top: 0.125rem; +} + +.before\:mt-0::before { + content: var(--tw-content); + margin-top: 0px; +} + +.before\:flex-1::before { + content: var(--tw-content); + flex: 1 1 0%; +} + +.before\:border-t::before { + content: var(--tw-content); + border-top-width: 1px; +} + +.before\:border-gray-300::before { + content: var(--tw-content); + --tw-border-opacity: 1; + border-color: rgb(209 213 219 / var(--tw-border-opacity)); +} + +.after\:mt-0\.5::after { + content: var(--tw-content); + margin-top: 0.125rem; +} + +.after\:mt-0::after { + content: var(--tw-content); + margin-top: 0px; +} + +.after\:flex-1::after { + content: var(--tw-content); + flex: 1 1 0%; +} + +.after\:border-t::after { + content: var(--tw-content); + border-top-width: 1px; +} + +.after\:border-gray-300::after { + content: var(--tw-content); + --tw-border-opacity: 1; + border-color: rgb(209 213 219 / var(--tw-border-opacity)); +} + +.checked\:border-blue-600:checked { + --tw-border-opacity: 1; + border-color: rgb(37 99 235 / var(--tw-border-opacity)); +} + +.checked\:bg-blue-600:checked { + --tw-bg-opacity: 1; + background-color: rgb(37 99 235 / var(--tw-bg-opacity)); +} + +.hover\:bg-blue-700:hover { + --tw-bg-opacity: 1; + background-color: rgb(29 78 216 / var(--tw-bg-opacity)); +} + +.hover\:text-red-700:hover { + --tw-text-opacity: 1; + color: rgb(185 28 28 / var(--tw-text-opacity)); +} + +.hover\:shadow-lg:hover { + --tw-shadow: 0 10px 15px -3px rgb(0 0 0 / 0.1), 0 4px 6px -4px rgb(0 0 0 / 0.1); + --tw-shadow-colored: 0 10px 15px -3px var(--tw-shadow-color), 0 4px 6px -4px var(--tw-shadow-color); + box-shadow: var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000), var(--tw-shadow); +} + +.focus\:border-blue-600:focus { + --tw-border-opacity: 1; + border-color: rgb(37 99 235 / var(--tw-border-opacity)); +} + +.focus\:bg-blue-700:focus { + --tw-bg-opacity: 1; + background-color: rgb(29 78 216 / var(--tw-bg-opacity)); +} + +.focus\:bg-white:focus { + --tw-bg-opacity: 1; + background-color: rgb(255 255 255 / var(--tw-bg-opacity)); +} + +.focus\:text-gray-700:focus { + --tw-text-opacity: 1; + color: rgb(55 65 81 / var(--tw-text-opacity)); +} + +.focus\:text-red-700:focus { + --tw-text-opacity: 1; + color: rgb(185 28 28 / var(--tw-text-opacity)); +} + +.focus\:shadow-lg:focus { + --tw-shadow: 0 10px 15px -3px rgb(0 0 0 / 0.1), 0 4px 6px -4px rgb(0 0 0 / 0.1); + --tw-shadow-colored: 0 10px 15px -3px var(--tw-shadow-color), 0 4px 6px -4px var(--tw-shadow-color); + box-shadow: var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000), var(--tw-shadow); +} + +.focus\:outline-none:focus { + outline: 2px solid transparent; + outline-offset: 2px; +} + +.focus\:ring-0:focus { + --tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color); + --tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(0px + var(--tw-ring-offset-width)) var(--tw-ring-color); + box-shadow: var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow, 0 0 #0000); +} + +.active\:bg-blue-800:active { + --tw-bg-opacity: 1; + background-color: rgb(30 64 175 / var(--tw-bg-opacity)); +} + +.active\:shadow-lg:active { + --tw-shadow: 0 10px 15px -3px rgb(0 0 0 / 0.1), 0 4px 6px -4px rgb(0 0 0 / 0.1); + --tw-shadow-colored: 0 10px 15px -3px var(--tw-shadow-color), 0 4px 6px -4px var(--tw-shadow-color); + box-shadow: var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000), var(--tw-shadow); +} + +@media (min-width: 768px) { + .md\:mb-0 { + margin-bottom: 0px; + } + + .md\:w-9\/12 { + width: 75%; + } + + .md\:w-8\/12 { + width: 66.666667%; + } + + .md\:shrink-0 { + flex-shrink: 0; + } +} + +@media (min-width: 1024px) { + .lg\:w-6\/12 { + width: 50%; + } + + .lg\:w-5\/12 { + width: 41.666667%; + } + + .lg\:justify-start { + justify-content: flex-start; + } + + .lg\:justify-between { + justify-content: space-between; + } + + .lg\:text-left { + text-align: left; + } +} + +@media (min-width: 1280px) { + .xl\:ml-20 { + margin-left: 5rem; + } + + .xl\:w-6\/12 { + width: 50%; + } + + .xl\:w-5\/12 { + width: 41.666667%; + } + + .xl\:justify-center { + justify-content: center; + } +} diff --git a/src/pages/Home.jsx b/src/pages/Home.jsx new file mode 100644 index 0000000..99a0735 --- /dev/null +++ b/src/pages/Home.jsx @@ -0,0 +1,17 @@ +import React from 'react' +import { useDispatch } from 'react-redux' +import { useNavigate } from 'react-router-dom' +import { ToastContainer } from 'react-toastify' +import { logOut } from '../auth/firebase' + +const Home = () => { + const dispatch = useDispatch() + const navigate = useNavigate() + return ( +
+ +
+ ) +} + +export default Home diff --git a/src/pages/Login.jsx b/src/pages/Login.jsx new file mode 100644 index 0000000..867a13d --- /dev/null +++ b/src/pages/Login.jsx @@ -0,0 +1,140 @@ +import { getAuth, signInWithEmailAndPassword } from "firebase/auth"; +import React, { useState } from "react"; +import { useDispatch } from "react-redux"; +import { Link, useNavigate } from "react-router-dom"; +import { provider, signIn, signUpProvider } from "../auth/firebase"; +import { setUser } from "../features/authSlice"; + +const Login = () => { + const [loginUser, setLoginUser] = useState({ + username: "", + email: "", + password: "", + }); + const dispatch = useDispatch() + const navigate = useNavigate() + const handleGoogle = () => { + signUpProvider(navigate,dispatch) + } + const handleClick = (e) => { + e.preventDefault(); + signIn(loginUser.username,loginUser.email, loginUser.password, navigate,dispatch); + } + + return ( +
+
+
+
+ Login +
+
+ +
+

Sign in with

+ +
+
+

Or

+
+ {/* Name input */} +
+ + setLoginUser({ ...loginUser, username: e.target.value }) + } + /> +
+ {/* Email input */} +
+ + setLoginUser({ ...loginUser, email: e.target.value }) + } + /> +
+ {/* Password input */} +
+ + setLoginUser({ ...loginUser, password: e.target.value }) + } + /> +
+
+
+ + +
+ + Forgot password? + +
+
+ +

+ Don't have an account? + + Register + +

+
+ +
+
+
+
+ ); +}; + +export default Login; diff --git a/src/pages/Register.jsx b/src/pages/Register.jsx new file mode 100644 index 0000000..2099b44 --- /dev/null +++ b/src/pages/Register.jsx @@ -0,0 +1,99 @@ +import React, {useState } from 'react' +import { useDispatch, useSelector } from 'react-redux'; + +import { Link, useNavigate } from 'react-router-dom'; +import { createUser } from '../auth/firebase'; + +const Register = () => { + const navigate = useNavigate() + const dispatch = useDispatch() + const [registerUser, setRegisterUser] = useState({ + username: "", + email: "", + password: "", + }); + const handleRegister =(e)=>{ + e.preventDefault() + const displayName = registerUser.username + const email = registerUser.email + const password = registerUser.password + createUser(email, password, navigate, displayName); + console.log(email,password,displayName) + } + + return ( +
+
+
+
+
+ Login +
+
+ {/* Name input */} +
+ + setRegisterUser({ ...registerUser, username: e.target.value }) + } + /> +
+ {/* Email input */} +
+ + setRegisterUser({ ...registerUser, email: e.target.value }) + } + /> +
+ {/* Password input */} +
+ + setRegisterUser({ ...registerUser, password: e.target.value }) + } + /> +
+
+ + + Login + +
+ +
+
+
+
+
+ ) +} + +export default Register diff --git a/src/router/AppRouter.jsx b/src/router/AppRouter.jsx new file mode 100644 index 0000000..d0f840a --- /dev/null +++ b/src/router/AppRouter.jsx @@ -0,0 +1,29 @@ +import React, { useEffect, useState } from 'react' +import { useDispatch, useSelector } from 'react-redux' +import { Route, Routes } from 'react-router-dom' +import Home from '../pages/Home' +import Login from '../pages/Login' +import Register from '../pages/Register' +import { userObserver } from '../auth/firebase' + +const AppRouter = () => { + const currentUser = useSelector((state)=>state.user) + const dispatch = useDispatch() + + useEffect(() => { + userObserver(dispatch,currentUser) + }, []) + return ( + <> + + } /> + } /> + }/> + + + + + ) +} + +export default AppRouter diff --git a/src/router/PrivateRouter.jsx b/src/router/PrivateRouter.jsx new file mode 100644 index 0000000..e69de29 diff --git a/tailwind.config.js b/tailwind.config.js index 593a6cb..990f83c 100644 --- a/tailwind.config.js +++ b/tailwind.config.js @@ -1,8 +1,7 @@ /** @type {import('tailwindcss').Config} */ module.exports = { - content: ["./src/**/*.{html,js}"], - theme: { - extend: {}, - }, - plugins: [], + content: ['./src/**/*.{html,js,jsx}', './node_modules/tw-elements/dist/js/**/*.js'], + plugins: [ + require('tw-elements/dist/plugin') + ] }