diff --git a/packages/webapp/src/components/App.tsx b/packages/webapp/src/components/App.tsx index de8263e5c..0ad264ee8 100644 --- a/packages/webapp/src/components/App.tsx +++ b/packages/webapp/src/components/App.tsx @@ -13,7 +13,7 @@ import AppIntlLoader from './AppIntlLoader'; import PrivateRoute from '@/components/Guards/PrivateRoute'; import GlobalErrors from '@/containers/GlobalErrors/GlobalErrors'; import DashboardPrivatePages from '@/components/Dashboard/PrivatePages'; -import Authentication from '@/components/Authentication'; +import { Authentication } from '@/containers/Authentication/Authentication'; import { SplashScreen, DashboardThemeProvider } from '../components'; import { queryConfig } from '../hooks/query/base'; diff --git a/packages/webapp/src/components/Authentication.tsx b/packages/webapp/src/components/Authentication.tsx deleted file mode 100644 index 1a3267554..000000000 --- a/packages/webapp/src/components/Authentication.tsx +++ /dev/null @@ -1,62 +0,0 @@ -// @ts-nocheck -import React from 'react'; -import { Redirect, Route, Switch, Link, useLocation } from 'react-router-dom'; -import BodyClassName from 'react-body-classname'; -import { TransitionGroup, CSSTransition } from 'react-transition-group'; -import authenticationRoutes from '@/routes/authentication'; -import { Icon, FormattedMessage as T } from '@/components'; -import { useIsAuthenticated } from '@/hooks/state'; -import '@/style/pages/Authentication/Auth.scss'; - -function PageFade(props) { - return ; -} - -export default function AuthenticationWrapper({ ...rest }) { - const to = { pathname: '/' }; - const location = useLocation(); - const isAuthenticated = useIsAuthenticated(); - const locationKey = location.pathname; - - return ( - <> - {isAuthenticated ? ( - - ) : ( - -
- - - - -
-
-
- -
- - - - - {authenticationRoutes.map((route, index) => ( - - ))} - - - -
-
-
-
- )} - - ); -} diff --git a/packages/webapp/src/containers/Authentication/AuthCopyright.tsx b/packages/webapp/src/containers/Authentication/AuthCopyright.tsx index 6fcc71fd4..3f77a44d4 100644 --- a/packages/webapp/src/containers/Authentication/AuthCopyright.tsx +++ b/packages/webapp/src/containers/Authentication/AuthCopyright.tsx @@ -1,20 +1,7 @@ // @ts-nocheck import React from 'react'; -import moment from 'moment'; -import intl from 'react-intl-universal'; import { Icon } from '@/components/Icon'; export default function AuthCopyright() { - return ( - - ); + return ; } diff --git a/packages/webapp/src/containers/Authentication/AuthInsider.tsx b/packages/webapp/src/containers/Authentication/AuthInsider.tsx index 9a683ab3f..cef34393c 100644 --- a/packages/webapp/src/containers/Authentication/AuthInsider.tsx +++ b/packages/webapp/src/containers/Authentication/AuthInsider.tsx @@ -1,6 +1,8 @@ // @ts-nocheck import React from 'react'; +import styled from 'styled-components'; import AuthCopyright from './AuthCopyright'; +import { AuthInsiderContent, AuthInsiderCopyright } from './_components'; /** * Authentication insider page. @@ -9,16 +11,21 @@ export default function AuthInsider({ logo = true, copyright = true, children, + classNames, }) { return ( -
-
- { children } -
+ + + {children} + - -
+ {copyright && ( + + + + )} + ); } + +const AuthInsiderContentWrap = styled.div``; diff --git a/packages/webapp/src/containers/Authentication/Authentication.tsx b/packages/webapp/src/containers/Authentication/Authentication.tsx new file mode 100644 index 000000000..1fc2515e9 --- /dev/null +++ b/packages/webapp/src/containers/Authentication/Authentication.tsx @@ -0,0 +1,66 @@ +// @ts-nocheck +import React from 'react'; +import { Redirect, Route, Switch, useLocation } from 'react-router-dom'; +import BodyClassName from 'react-body-classname'; +import styled from 'styled-components'; +import { TransitionGroup, CSSTransition } from 'react-transition-group'; + +import authenticationRoutes from '@/routes/authentication'; +import { Icon, FormattedMessage as T } from '@/components'; +import { useIsAuthenticated } from '@/hooks/state'; + +import '@/style/pages/Authentication/Auth.scss'; + +export function Authentication() { + const to = { pathname: '/' }; + const location = useLocation(); + const isAuthenticated = useIsAuthenticated(); + const locationKey = location.pathname; + + if (isAuthenticated) { + return ; + } + return ( + + + + + + + + + + + {authenticationRoutes.map((route, index) => ( + + ))} + + + + + + + ); +} + +const AuthPage = styled.div``; +const AuthInsider = styled.div` + width: 384px; + margin: 0 auto; + margin-bottom: 40px; + padding-top: 80px; +`; + +const AuthLogo = styled.div` + text-align: center; + margin-bottom: 40px; +`; diff --git a/packages/webapp/src/containers/Authentication/InviteAcceptForm.tsx b/packages/webapp/src/containers/Authentication/InviteAcceptForm.tsx index 4d6b00799..dd2603271 100644 --- a/packages/webapp/src/containers/Authentication/InviteAcceptForm.tsx +++ b/packages/webapp/src/containers/Authentication/InviteAcceptForm.tsx @@ -11,6 +11,7 @@ import { useInviteAcceptContext } from './InviteAcceptProvider'; import { AppToaster } from '@/components'; import { InviteAcceptSchema } from './utils'; import InviteAcceptFormContent from './InviteAcceptFormContent'; +import { AuthInsiderCard } from './_components'; export default function InviteAcceptForm() { const history = useHistory(); @@ -80,23 +81,13 @@ export default function InviteAcceptForm() { }; return ( -
-
-

- -

-

- {' '} - {inviteValue.organization_name} -

-
- + -
+ ); } diff --git a/packages/webapp/src/containers/Authentication/InviteAcceptFormContent.tsx b/packages/webapp/src/containers/Authentication/InviteAcceptFormContent.tsx index 9b800be76..c32823f07 100644 --- a/packages/webapp/src/containers/Authentication/InviteAcceptFormContent.tsx +++ b/packages/webapp/src/containers/Authentication/InviteAcceptFormContent.tsx @@ -1,13 +1,14 @@ // @ts-nocheck import React from 'react'; import intl from 'react-intl-universal'; -import { Button, InputGroup, Intent, FormGroup } from '@blueprintjs/core'; -import { Form, ErrorMessage, FastField, useFormikContext } from 'formik'; +import { InputGroup, Intent } from '@blueprintjs/core'; +import { Form, useFormikContext } from 'formik'; import { Link } from 'react-router-dom'; -import { Col, Row, FormattedMessage as T } from '@/components'; -import { inputIntent } from '@/utils'; + +import { Col, FFormGroup, Row, FormattedMessage as T } from '@/components'; import { useInviteAcceptContext } from './InviteAcceptProvider'; import { PasswordRevealer } from './components'; +import { AuthSubmitButton } from './_components'; /** * Invite user form. @@ -34,75 +35,25 @@ export default function InviteUserFormContent() {
- - {({ form, field, meta: { error, touched } }) => ( - } - className={'form-group--first_name'} - intent={inputIntent({ error, touched })} - helperText={} - > - - - )} - + }> + + - - {({ form, field, meta: { error, touched } }) => ( - } - className={'form-group--last_name'} - intent={inputIntent({ error, touched })} - helperText={} - > - - - )} - + }> + + - - {({ form, field, meta: { error, touched } }) => ( - } - className={'form-group--phone_number'} - intent={inputIntent({ error, touched })} - helperText={} - > - - - )} - - - - {({ form, field, meta: { error, touched } }) => ( - } - labelInfo={ - - } - className={'form-group--password has-password-revealer'} - intent={inputIntent({ error, touched })} - helperText={} - > - - - )} - + } + labelInfo={} + > + +

@@ -117,16 +68,14 @@ export default function InviteUserFormContent() {

-
- -
+ + +
); } diff --git a/packages/webapp/src/containers/Authentication/Login.tsx b/packages/webapp/src/containers/Authentication/Login.tsx index 33a746fde..4032f2e67 100644 --- a/packages/webapp/src/containers/Authentication/Login.tsx +++ b/packages/webapp/src/containers/Authentication/Login.tsx @@ -1,14 +1,25 @@ // @ts-nocheck import React from 'react'; -import { Link } from 'react-router-dom'; import { Formik } from 'formik'; -import { AppToaster as Toaster, FormattedMessage as T } from '@/components'; +import { Link } from 'react-router-dom'; +import { AppToaster as Toaster, FormattedMessage as T } from '@/components'; import AuthInsider from '@/containers/Authentication/AuthInsider'; import { useAuthLogin } from '@/hooks/query'; import LoginForm from './LoginForm'; import { LoginSchema, transformLoginErrorsToToasts } from './utils'; +import { + AuthFooterLinks, + AuthFooterLink, + AuthInsiderCard, +} from './_components'; + +const initialValues = { + crediential: '', + password: '', + keepLoggedIn: false +}; /** * Login page. @@ -38,34 +49,32 @@ export default function Login() { return ( -
-
-

- -

- {/* - - {' '} - - */} -
- + + - -
+
); } + +function LoginFooterLinks() { + return ( + + + Don't have an account? Sign up + + + + + + + + + ); +} diff --git a/packages/webapp/src/containers/Authentication/LoginForm.tsx b/packages/webapp/src/containers/Authentication/LoginForm.tsx index 22b806774..e586aab8b 100644 --- a/packages/webapp/src/containers/Authentication/LoginForm.tsx +++ b/packages/webapp/src/containers/Authentication/LoginForm.tsx @@ -1,89 +1,63 @@ // @ts-nocheck -import React from 'react'; -import { - Button, - InputGroup, - Intent, - FormGroup, - Checkbox, -} from '@blueprintjs/core'; -import { Form, ErrorMessage, Field } from 'formik'; -import { T } from '@/components'; -import { inputIntent } from '@/utils'; -import { PasswordRevealer } from './components'; +import React, { useState } from 'react'; +import { Button, Intent } from '@blueprintjs/core'; +import { Form } from 'formik'; +import { Tooltip2 } from '@blueprintjs/popover2'; + +import { FFormGroup, FInputGroup, FCheckbox, T } from '@/components'; +import { AuthSubmitButton } from './_components'; /** * Login form. */ export default function LoginForm({ isSubmitting }) { - const [passwordType, setPasswordType] = React.useState('password'); + const [showPassword, setShowPassword] = useState(false); // Handle password revealer changing. - const handlePasswordRevealerChange = React.useCallback( - (shown) => { - const type = shown ? 'text' : 'password'; - setPasswordType(type); - }, - [setPasswordType], + const handleLockClick = () => { + setShowPassword(!showPassword); + }; + + const lockButton = ( + + - + + + ); } diff --git a/packages/webapp/src/containers/Authentication/Register.tsx b/packages/webapp/src/containers/Authentication/Register.tsx index bdbff0d47..aba50d734 100644 --- a/packages/webapp/src/containers/Authentication/Register.tsx +++ b/packages/webapp/src/containers/Authentication/Register.tsx @@ -11,6 +11,18 @@ import { useAuthLogin, useAuthRegister } from '@/hooks/query/authentication'; import RegisterForm from './RegisterForm'; import { RegisterSchema, transformRegisterErrorsToForm } from './utils'; +import { + AuthFooterLinks, + AuthFooterLink, + AuthInsiderCard, +} from './_components'; + +const initialValues = { + first_name: '', + last_name: '', + email: '', + password: '', +}; /** * Register form. @@ -19,18 +31,6 @@ export default function RegisterUserForm() { const { mutateAsync: authLoginMutate } = useAuthLogin(); const { mutateAsync: authRegisterMutate } = useAuthRegister(); - const initialValues = useMemo( - () => ({ - first_name: '', - last_name: '', - email: '', - phone_number: '', - password: '', - country: 'LY', - }), - [], - ); - const handleSubmit = (values, { setSubmitting, setErrors }) => { authRegisterMutate(values) .then((response) => { @@ -66,24 +66,32 @@ export default function RegisterUserForm() { return ( -
-
-

- -

- - - - -
- + -
+ + +
); } + +function RegisterFooterLinks() { + return ( + + + Return to Sign In + + + + + + + + + ); +} diff --git a/packages/webapp/src/containers/Authentication/RegisterForm.tsx b/packages/webapp/src/containers/Authentication/RegisterForm.tsx index 8f44056a4..6cf27f360 100644 --- a/packages/webapp/src/containers/Authentication/RegisterForm.tsx +++ b/packages/webapp/src/containers/Authentication/RegisterForm.tsx @@ -1,148 +1,97 @@ // @ts-nocheck import React from 'react'; +import { Form } from 'formik'; import intl from 'react-intl-universal'; -import { - Button, - InputGroup, - Intent, - FormGroup, - Spinner, -} from '@blueprintjs/core'; -import { ErrorMessage, Field, Form } from 'formik'; -import { FormattedMessage as T } from '@/components'; +import { Intent, Button } from '@blueprintjs/core'; import { Link } from 'react-router-dom'; -import { Row, Col, If } from '@/components'; -import { PasswordRevealer } from './components'; -import { inputIntent } from '@/utils'; +import { Tooltip2 } from '@blueprintjs/popover2'; +import styled from 'styled-components'; + +import { + FFormGroup, + FInputGroup, + Row, + Col, + FormattedMessage as T, +} from '@/components'; +import { AuthSubmitButton, AuthenticationLoadingOverlay } from './_components'; /** * Register form. */ export default function RegisterForm({ isSubmitting }) { - const [passwordType, setPasswordType] = React.useState('password'); + const [showPassword, setShowPassword] = React.useState(false); // Handle password revealer changing. - const handlePasswordRevealerChange = React.useCallback( - (shown) => { - const type = shown ? 'text' : 'password'; - setPasswordType(type); - }, - [setPasswordType], + const handleLockClick = () => { + setShowPassword(!showPassword); + }; + + const lockButton = ( + + - - - -
- -
-
+ {isSubmitting && } ); } + +const TermsConditionsText = styled.p` + opacity: 0.8; + margin-bottom: 1.4rem; +`; diff --git a/packages/webapp/src/containers/Authentication/ResetPassword.tsx b/packages/webapp/src/containers/Authentication/ResetPassword.tsx index 027f2da1b..63796bcff 100644 --- a/packages/webapp/src/containers/Authentication/ResetPassword.tsx +++ b/packages/webapp/src/containers/Authentication/ResetPassword.tsx @@ -4,14 +4,23 @@ import intl from 'react-intl-universal'; import { Formik } from 'formik'; import { Intent, Position } from '@blueprintjs/core'; import { Link, useParams, useHistory } from 'react-router-dom'; -import { AppToaster, FormattedMessage as T } from '@/components'; +import { AppToaster } from '@/components'; import { useAuthResetPassword } from '@/hooks/query'; - import AuthInsider from '@/containers/Authentication/AuthInsider'; +import { + AuthFooterLink, + AuthFooterLinks, + AuthInsiderCard, +} from './_components'; import ResetPasswordForm from './ResetPasswordForm'; import { ResetPasswordSchema } from './utils'; + +const initialValues = { + password: '', + confirm_password: '', +}; /** * Reset password page. */ @@ -22,15 +31,6 @@ export default function ResetPassword() { // Authentication reset password. const { mutateAsync: authResetPasswordMutate } = useAuthResetPassword(); - // Initial values of the form. - const initialValues = useMemo( - () => ({ - password: '', - confirm_password: '', - }), - [], - ); - // Handle the form submitting. const handleSubmit = (values, { setSubmitting }) => { authResetPasswordMutate([token, values]) @@ -64,24 +64,30 @@ export default function ResetPassword() { return ( -
-
-

- -

- {' '} - - - -
- + -
+ + +
); } + +function ResetPasswordFooterLinks() { + return ( + + + Don't have an account? Sign up + + + + Return to Sign In + + + ); +} diff --git a/packages/webapp/src/containers/Authentication/ResetPasswordForm.tsx b/packages/webapp/src/containers/Authentication/ResetPasswordForm.tsx index 6b0233a9f..fe7d0f5f4 100644 --- a/packages/webapp/src/containers/Authentication/ResetPasswordForm.tsx +++ b/packages/webapp/src/containers/Authentication/ResetPasswordForm.tsx @@ -1,9 +1,9 @@ // @ts-nocheck import React from 'react'; -import { Button, InputGroup, Intent, FormGroup } from '@blueprintjs/core'; -import { Form, ErrorMessage, FastField } from 'formik'; -import { FormattedMessage as T } from '@/components'; -import { inputIntent } from '@/utils'; +import { Intent } from '@blueprintjs/core'; +import { Form } from 'formik'; +import { FFormGroup, FInputGroup, FormattedMessage as T } from '@/components'; +import { AuthSubmitButton } from './_components'; /** * Reset password form. @@ -11,54 +11,23 @@ import { inputIntent } from '@/utils'; export default function ResetPasswordForm({ isSubmitting }) { return (
- - {({ form, field, meta: { error, touched } }) => ( - } - intent={inputIntent({ error, touched })} - helperText={} - className={'form-group--password'} - > - - - )} - + }> + + - - {({ form, field, meta: { error, touched } }) => ( - } - labelInfo={'(again):'} - intent={inputIntent({ error, touched })} - helperText={} - className={'form-group--confirm-password'} - > - - - )} - + }> + + -
- -
+ + +
); } diff --git a/packages/webapp/src/containers/Authentication/SendResetPassword.tsx b/packages/webapp/src/containers/Authentication/SendResetPassword.tsx index dd2a67a50..8bf07809f 100644 --- a/packages/webapp/src/containers/Authentication/SendResetPassword.tsx +++ b/packages/webapp/src/containers/Authentication/SendResetPassword.tsx @@ -5,33 +5,32 @@ import { Formik } from 'formik'; import { Link, useHistory } from 'react-router-dom'; import { Intent } from '@blueprintjs/core'; -import { AppToaster, FormattedMessage as T } from '@/components'; +import { AppToaster } from '@/components'; import { useAuthSendResetPassword } from '@/hooks/query'; import SendResetPasswordForm from './SendResetPasswordForm'; +import { + AuthFooterLink, + AuthFooterLinks, + AuthInsiderCard, +} from './_components'; import { SendResetPasswordSchema, transformSendResetPassErrorsToToasts, } from './utils'; - import AuthInsider from '@/containers/Authentication/AuthInsider'; +const initialValues = { + crediential: '', +}; + /** * Send reset password page. */ export default function SendResetPassword({ requestSendResetPassword }) { const history = useHistory(); - const { mutateAsync: sendResetPasswordMutate } = useAuthSendResetPassword(); - // Initial values. - const initialValues = useMemo( - () => ({ - crediential: '', - }), - [], - ); - // Handle form submitting. const handleSubmit = (values, { setSubmitting }) => { sendResetPasswordMutate({ email: values.crediential }) @@ -61,28 +60,30 @@ export default function SendResetPassword({ requestSendResetPassword }) { return ( -
-
-

- -

-

- -

-
- + - -
+ + +
); } + +function SendResetPasswordFooterLinks() { + return ( + + + Don't have an account? Sign up + + + + Return to Sign In + + + ); +} diff --git a/packages/webapp/src/containers/Authentication/SendResetPasswordForm.tsx b/packages/webapp/src/containers/Authentication/SendResetPasswordForm.tsx index d8439e971..29e878af0 100644 --- a/packages/webapp/src/containers/Authentication/SendResetPasswordForm.tsx +++ b/packages/webapp/src/containers/Authentication/SendResetPasswordForm.tsx @@ -1,43 +1,44 @@ // @ts-nocheck import React from 'react'; -import { Button, InputGroup, Intent, FormGroup } from '@blueprintjs/core'; -import { Form, ErrorMessage, FastField } from 'formik'; -import { FormattedMessage as T } from '@/components'; -import { inputIntent } from '@/utils'; +import { Intent } from '@blueprintjs/core'; +import { Form } from 'formik'; +import styled from 'styled-components'; + +import { FInputGroup, FFormGroup, FormattedMessage as T } from '@/components'; +import { AuthSubmitButton } from './_components'; /** * Send reset password form. */ export default function SendResetPasswordForm({ isSubmitting }) { return ( -
- - {({ form, field, meta: { error, touched } }) => ( - } - intent={inputIntent({ error, touched })} - helperText={} - className={'form-group--crediential'} - > - - - )} - + + + Enter the email address associated with your account and we'll send you + a link to reset your password. + -
- -
+ } + > + + + + + Reset Password +
); } + +const TopParagraph = styled.p` + margin-bottom: 1.6rem; + opacity: 0.8; +`; diff --git a/packages/webapp/src/containers/Authentication/_components.tsx b/packages/webapp/src/containers/Authentication/_components.tsx new file mode 100644 index 000000000..7010fc4bf --- /dev/null +++ b/packages/webapp/src/containers/Authentication/_components.tsx @@ -0,0 +1,69 @@ +import React from 'react'; +import styled from 'styled-components'; +import { Spinner } from '@blueprintjs/core'; +import { Button } from '@blueprintjs/core'; + +export function AuthenticationLoadingOverlay() { + return ( + + + + ); +} + +const AuthOverlayRoot = styled.div` + position: absolute; + top: 0; + left: 0; + bottom: 0; + right: 0; + background: rgba(252, 253, 255, 0.5); + display: flex; + justify-content: center; +`; + +export const AuthInsiderContent = styled.div` + position: relative; +`; +export const AuthInsiderCard = styled.div` + border: 1px solid #d5d5d5; + box-shadow: 0 1px 3px rgba(0, 0, 0, 0.04); + padding: 26px 22px; + background: #ffff; + border-radius: 3px; +`; + +export const AuthInsiderCopyright = styled.div` + text-align: center; + font-size: 12px; + color: #666; + margin-top: 1.2rem; + + .bp3-icon-bigcapital { + svg { + path { + fill: #a3a3a3; + } + } + } +`; + +export const AuthFooterLinks = styled.div` + display: flex; + flex-direction: column; + gap: 10px; + padding-left: 1.2rem; + padding-right: 1.2rem; + margin-top: 1rem; +`; + +export const AuthFooterLink = styled.p` + color: #666; + margin: 0; +`; + +export const AuthSubmitButton = styled(Button)` + background-color: #0052cc; + min-height: 45px; + margin-top: 20px; +`; diff --git a/packages/webapp/src/containers/Authentication/components.tsx b/packages/webapp/src/containers/Authentication/components.tsx index a9e36dbb0..50edd06f2 100644 --- a/packages/webapp/src/containers/Authentication/components.tsx +++ b/packages/webapp/src/containers/Authentication/components.tsx @@ -16,15 +16,9 @@ export function PasswordRevealer({ defaultShown = false, onChange }) { {' '} - - - {' '} - - - ); diff --git a/packages/webapp/src/lang/en/index.json b/packages/webapp/src/lang/en/index.json index db8dbaf6c..37ee4c817 100644 --- a/packages/webapp/src/lang/en/index.json +++ b/packages/webapp/src/lang/en/index.json @@ -31,7 +31,7 @@ "phone_number": "Phone Number", "you_email_address_is": "You email address is", "you_will_use_this_address_to_sign_in_to_bigcapital": "You will use this address to sign in to Bigcapital.", - "signing_in_or_creating": "By signing in or creating an account, you agree with our
Terms & Conditions and Privacy Statement ", + "signing_in_or_creating": "By signing in or creating an account, you agree with our Terms & Conditions and Privacy Statement ", "and": "And", "create_account": "Create Account", "success": "Success", diff --git a/packages/webapp/src/style/pages/Authentication/Auth.scss b/packages/webapp/src/style/pages/Authentication/Auth.scss index 7a5a376d2..15cecf753 100644 --- a/packages/webapp/src/style/pages/Authentication/Auth.scss +++ b/packages/webapp/src/style/pages/Authentication/Auth.scss @@ -1,224 +1,32 @@ - body.authentication { background-color: #fcfdff; } -.authentication-insider { - width: 384px; - margin: 0 auto; - margin-bottom: 40px; - padding-top: 80px; - - &__logo-section { - text-align: center; - margin-bottom: 60px; - } - - &__content { - position: relative; - } - - &__footer { - .auth-copyright { - text-align: center; - font-size: 12px; - color: #666; - - .bp3-icon-bigcapital { - margin-top: 9px; - - svg { - path { - fill: #a3a3a3; - } - } - } - } - } -} - - -.authTransition{ - +.authTransition { &-enter { opacity: 0; } - + &-enter-active { opacity: 1; transition: opacity 250ms ease-in-out; } - + &-enter-done { opacity: 1; } - + &-exit { opacity: 1; } - + &-exit-active { opacity: 0.5; transition: opacity 250ms ease-in-out; } + &-exit-active { opacity: 0; display: none; } - -} - - -.authentication-page { - &__goto-bigcapital { - position: fixed; - margin-top: 30px; - margin-left: 30px; - color: #777; - } - - .bp3-input { - min-height: 40px; - } - .bp3-form-group { - margin-bottom: 25px; - } - - .bp3-form-group.has-password-revealer { - .bp3-label { - display: flex; - justify-content: space-between; - } - - .password-revealer { - .text { - font-size: 12px; - } - } - } - - .bp3-button.bp3-fill.bp3-intent-primary { - font-size: 16px; - } - - &__label-section { - margin-bottom: 30px; - color: #555; - - h3 { - font-weight: 500; - font-size: 22px; - color: #2d2b43; - margin: 0 0 12px; - } - - a { - text-decoration: underline; - color: #0040bd; - } - } - - &__form-wrapper { - width: 100%; - margin: 0 auto; - } - - &__footer-links { - padding: 9px; - border-top: 1px solid #ddd; - border-bottom: 1px solid #ddd; - text-align: center; - margin-bottom: 1.2rem; - - a { - color: #0052cc; - } - } - - &__loading-overlay { - position: absolute; - top: 0; - left: 0; - bottom: 0; - right: 0; - background: rgba(252, 253, 255, 0.5); - display: flex; - justify-content: center; - } - - &__submit-button-wrap { - margin: 0px 0px 24px 0px; - - .bp3-button { - background-color: #0052cc; - min-height: 45px; - } - } - - // Login Form - // ------------------------------ - .login-form { - // width: 690px; - // margin: 0px auto; - // padding: 85px 50px; - - .checkbox { - &--remember-me { - margin: -6px 0 26px 0px; - font-size: 14px; - } - } - } - - // Register form - // ---------------------------- - .register-form { - - &__agreement-section { - margin-top: -10px; - - p { - font-size: 13px; - margin-top: -10px; - margin-bottom: 24px; - line-height: 1.65; - } - } - - &__submit-button-wrap { - margin: 25px 0px 25px 0px; - - .bp3-button { - min-height: 45px; - background-color: #0052cc; - } - } - } - - // Send reset password - // ---------------------------- - .send-reset-password { - .form-group--crediential { - margin-bottom: 36px; - } - } - - // Invite form. - // ---------------- - .invite-form { - - &__statement-section { - margin-top: -10px; - - p { - font-size: 14px; - margin-bottom: 20px; - line-height: 1.65; - } - } - - .authentication-page__loading-overlay { - background: rgba(252, 253, 255, 0.9); - } - } -} +} \ No newline at end of file