-
-
+
+
-
+
@@ -44,12 +44,15 @@ const EmailVerificationFormComponent = props => {
);
@@ -57,20 +60,22 @@ const EmailVerificationFormComponent = props => {
const alreadyVerified = (
);
diff --git a/src/containers/EmailVerificationPage/EmailVerificationPage.css b/src/containers/EmailVerificationPage/EmailVerificationPage.css
index e60fe8aa..abcbe29f 100644
--- a/src/containers/EmailVerificationPage/EmailVerificationPage.css
+++ b/src/containers/EmailVerificationPage/EmailVerificationPage.css
@@ -1,39 +1,13 @@
@import '../../marketplace.css';
.root {
- @apply --backgroundImage;
-
- /* PageLayout is using flex: EmailVerificationPage's .root takes all available space */
- flex-grow: 1;
-
- /* EmailVerificationPage's root uses flexbox */
- display: flex;
-
- @media (--viewportMedium) {
- justify-content: center;
- align-items: flex-start;
- }
+ @apply --marketplaceModalRootStyles;
}
.content {
- flex-grow: 1;
- display: flex;
- flex-direction: column;
- padding: 30px 24px 98px 24px;
- background-color: var(--matterColorLight);
- border-radius: 2px;
-
- @media (--viewportMedium) {
- flex-basis: 480px;
- flex-grow: 0;
- min-height: 573px;
- padding: 60px;
- margin-top: 7.5vh;
- margin-bottom: 7.5vh;
- }
+ @apply --marketplaceModalBaseStyles;
}
.error {
- margin-top: 24px;
- color: var(--failColor);
+ @apply --marketplaceModalErrorStyles;
}
diff --git a/src/containers/ListingPage/ListingPage.css b/src/containers/ListingPage/ListingPage.css
index ad5081ca..208fe0d7 100644
--- a/src/containers/ListingPage/ListingPage.css
+++ b/src/containers/ListingPage/ListingPage.css
@@ -119,11 +119,12 @@
height: calc(0.41 * 100vw);
max-height: 50vh;
object-fit: cover;
- border-radius: 2px;
- }
+ border-radius: var(--borderRadius);
- &:hover {
- opacity: 0.85;
+ &:hover {
+ transform: scale(1.005);
+ box-shadow: var(--boxShadowListingCard);
+ }
}
}
diff --git a/src/containers/LoginForm/LoginForm.css b/src/containers/LoginForm/LoginForm.css
index c585c53d..831909f3 100644
--- a/src/containers/LoginForm/LoginForm.css
+++ b/src/containers/LoginForm/LoginForm.css
@@ -1,32 +1,26 @@
@import '../../marketplace.css';
.root {
- display: flex;
- flex-direction: column;
- flex: 1;
- justify-content: space-between;
- height: 100%;
+ @apply --marketplaceModalFormRootStyles;
}
.password {
- margin-top: 24px;
- margin-bottom: 24px;
-
- @media (--viewportMedium) {
- margin-top: 30px;
- }
+ @apply --marketplaceModalPasswordMargins;
}
.bottomWrapper {
- margin-top: auto;
- text-align: center;
+ @apply --marketplaceModalBottomWrapper;
+}
+
+/* Adjust the bottomWrapper's margin to match modals without the helper text */
+.bottomWrapperText {
+ @apply --marketplaceModalBottomWrapperText;
}
.recoveryLink {
- color: var(--matterColor);
+ @apply --marketplaceModalHelperLink;
}
.recoveryLinkInfo {
- @apply --marketplaceH5FontStyles;
- color: var(--matterColorAnti);
+ @apply --marketplaceModalHelperText;
}
diff --git a/src/containers/LoginForm/LoginForm.js b/src/containers/LoginForm/LoginForm.js
index d32ddb8e..cd77fada 100644
--- a/src/containers/LoginForm/LoginForm.js
+++ b/src/containers/LoginForm/LoginForm.js
@@ -3,7 +3,7 @@ import { compose } from 'redux';
import { FormattedMessage, injectIntl, intlShape } from 'react-intl';
import { reduxForm, propTypes as formPropTypes } from 'redux-form';
import classNames from 'classnames';
-import { Button, TextInputField, NamedLink } from '../../components';
+import { PrimaryButton, TextInputField, NamedLink } from '../../components';
import * as validators from '../../util/validators';
import css from './LoginForm.css';
@@ -55,6 +55,7 @@ const LoginFormComponent = props => {
return (
);
};
diff --git a/src/containers/PasswordRecoveryForm/PasswordRecoveryForm.css b/src/containers/PasswordRecoveryForm/PasswordRecoveryForm.css
index a4c925e5..e38e8a75 100644
--- a/src/containers/PasswordRecoveryForm/PasswordRecoveryForm.css
+++ b/src/containers/PasswordRecoveryForm/PasswordRecoveryForm.css
@@ -1,12 +1,7 @@
@import '../../marketplace.css';
.root {
-display: flex;
- flex-direction: column;
- flex: 1;
- justify-content: space-between;
- height: 100%;
- min-height: 306px;
+ @apply --marketplaceModalFormRootStyles;
}
.email {
@@ -18,23 +13,20 @@ display: flex;
}
.bottomWrapper {
- margin-top: auto;
+ @apply --marketplaceModalBottomWrapper;
}
-.bottomText {
- @apply --marketplaceH5FontStyles;
- color: var(--matterColorAnti);
- margin: 0;
-
- @media (--viewportMedium) {
- margin: 0;
- }
+/* Adjust the bottomWrapper's margin to match modals without the helper text */
+.bottomWrapperText {
+ @apply --marketplaceModalBottomWrapperText;
}
-.submitButton {
- margin-top: 26px;
+/* Helper links */
+.modalHelperLink {
+ @apply --marketplaceModalHelperLink;
}
-.loginLink {
- color: var(--matterColor);
+/* Helper texts for the links, not the actual links */
+.modalHelperText {
+ @apply --marketplaceModalHelperText;
}
diff --git a/src/containers/PasswordRecoveryForm/PasswordRecoveryForm.js b/src/containers/PasswordRecoveryForm/PasswordRecoveryForm.js
index 5ef51344..b04815b1 100644
--- a/src/containers/PasswordRecoveryForm/PasswordRecoveryForm.js
+++ b/src/containers/PasswordRecoveryForm/PasswordRecoveryForm.js
@@ -43,11 +43,11 @@ const PasswordRecoveryFormComponent = props => {
? emailNotFoundMessage
: null;
const initialEmail = initialValues ? initialValues.email : null;
- const buttonDisabled = (pristine && !initialEmail) || submitting;
+ const submitDisabled = (pristine && !initialEmail) || submitting;
const classes = classNames(rootClassName || css.root, className);
const loginLink = (
-
+
);
@@ -66,17 +66,22 @@ const PasswordRecoveryFormComponent = props => {
/>
+
);
};
+
PasswordRecoveryFormComponent.defaultProps = {
rootClassName: null,
className: null,
diff --git a/src/containers/PasswordRecoveryPage/PasswordRecoveryPage.css b/src/containers/PasswordRecoveryPage/PasswordRecoveryPage.css
index b655d83e..f28f1d45 100644
--- a/src/containers/PasswordRecoveryPage/PasswordRecoveryPage.css
+++ b/src/containers/PasswordRecoveryPage/PasswordRecoveryPage.css
@@ -1,118 +1,48 @@
@import '../../marketplace.css';
-:root {
- --baseContent: {
- flex-grow: 1;
- display: flex;
- flex-direction: column;
- padding: 32px 24px 98px 24px;
- background-color: var(--matterColorLight);
- border-radius: 2px;
-
- @media (--viewportMedium) {
- flex-basis: 480px;
- flex-grow: 0;
- padding: 55px;
- margin-top: 7.5vh;
- margin-bottom: 7.5vh;
- }
- }
-}
-
.root {
- @apply --backgroundImage;
-
- display: flex;
- flex: 1;
-
- @media (--viewportMedium) {
- justify-content: center;
- align-items: flex-start;
- }
-}
-
-.submitEmailContent {
- @apply --baseContent;
-}
-
-.emailSubmittedContent {
- @apply --baseContent;
- padding-bottom: 99px;
-
- @media (--viewportMedium) {
- padding-bottom: 62px;
- min-height: 508px;
- }
+ @apply --marketplaceModalRootStyles;
}
+.submitEmailContent,
+.genericErrorContent,
+.emailSubmittedContent,
.emailNotVerifiedContent {
- @apply --baseContent;
- padding-top: 30px;
-
- @media (--viewportMedium) {
- padding-top: 53px;
- padding-bottom: 80px;
- }
-}
-
-.genericErrorContent {
- @apply --baseContent;
-}
-
-.keysIconRoot {
- width: 100%;
- height: 100%;
-}
-
-.title {
- @apply --marketplaceModalTitle;
- margin-top: 31px;
- margin-bottom: 0px;
-}
-
-.message {
- margin-top: 23px;
- margin-bottom: 0px;
-
- @media (--viewportMedium) {
- margin-top: 24px;
- margin-bottom: 0px;
- }
-}
-
-.submittedEmail {
- font-weight: bold;
-}
-
-.emailNotVerifiedBottomText {
- margin-top: 30px;
- margin-bottom: 0px;
-
- @media (--viewportMedium) {
- margin-top: 32px;
- }
+ @apply --marketplaceModalBaseStyles;
}
.bottomWrapper {
- margin-top: auto;
+ @apply --marketplaceModalBottomWrapper;
+
+ /* Align the helper links to the left since there isn't a Primary Button anymore */
+ text-align: left;
}
-.bottomInfo {
- @apply --marketplaceH5FontStyles;
- margin: 0;
- color: var(--matterColorAnti);
-
- @media (--viewportMedium) {
- margin: 0;
- }
+.modalIcon {
+ @apply --marketplaceModalIconStyles;
}
-.bottomLink {
- @apply --marketplaceH5FontStyles;
- margin: 0;
- color: var(--matterColor);
+/* ================ Typography ================ */
- @media (--viewportMedium) {
- margin: 0;
- }
+/* Title of the modal */
+.modalTitle {
+ @apply --marketplaceModalTitleStyles;
+}
+
+/* Paragraph for the Modal */
+.modalMessage {
+ @apply --marketplaceModalParagraphStyles;
+}
+
+/* Make the email pop */
+.email {
+ @apply --marketplaceModalHighlightEmail;
+}
+
+.helperLink {
+ @apply --marketplaceModalHelperLink;
+}
+
+.helperText {
+ @apply --marketplaceModalHelperText;
}
diff --git a/src/containers/PasswordRecoveryPage/PasswordRecoveryPage.js b/src/containers/PasswordRecoveryPage/PasswordRecoveryPage.js
index 99467875..3953fa08 100644
--- a/src/containers/PasswordRecoveryPage/PasswordRecoveryPage.js
+++ b/src/containers/PasswordRecoveryPage/PasswordRecoveryPage.js
@@ -55,24 +55,24 @@ export const PasswordRecoveryPageComponent = props => {
});
const resendEmailLink = (
- onSubmitEmail(submittedEmail)}>
+ onSubmitEmail(submittedEmail)}>
);
const fixEmailLink = (
-
+
);
const submitEmailContent = (
-
-
+
+
-
+
{
);
const submittedEmailText = passwordRequested
- ? {initialEmail}
- : {submittedEmail};
+ ? {initialEmail}
+ : {submittedEmail};
const emailSubmittedContent = (
-
-
+
+
-
+
-
+
{recoveryInProgress
?
: {
values={{ resendEmailLink }}
/>}
-
-
+
+
);
- const initialEmailText = {initialEmail};
+ const initialEmailText = {initialEmail};
const emailNotVerifiedContent = (
@@ -137,11 +137,11 @@ export const PasswordRecoveryPageComponent = props => {
const genericErrorContent = (
diff --git a/src/containers/PasswordResetForm/PasswordResetForm.css b/src/containers/PasswordResetForm/PasswordResetForm.css
index 4377786e..90b9e320 100644
--- a/src/containers/PasswordResetForm/PasswordResetForm.css
+++ b/src/containers/PasswordResetForm/PasswordResetForm.css
@@ -1,15 +1,9 @@
+@import '../../marketplace.css';
+
.root {
}
-.passwordInput {
- /* Leave space between the input and the button below when the
- viewport height is small */
- margin-bottom: 24px;
-}
-
-.submitButton {
- /* In a flexbox context, this makes the button position itself to the
- bottom */
- margin-top: auto;
+.password {
+ @apply --marketplaceModalPasswordMargins;
}
diff --git a/src/containers/PasswordResetForm/PasswordResetForm.js b/src/containers/PasswordResetForm/PasswordResetForm.js
index 19094daa..2908c5b5 100644
--- a/src/containers/PasswordResetForm/PasswordResetForm.js
+++ b/src/containers/PasswordResetForm/PasswordResetForm.js
@@ -62,7 +62,7 @@ const PasswordResetFormComponent = props => {
return (
-
+
+
+
);
};
diff --git a/src/marketplace.css b/src/marketplace.css
index 89c74f53..b6720181 100644
--- a/src/marketplace.css
+++ b/src/marketplace.css
@@ -286,6 +286,224 @@
outline: none;
}
}
+
+
+
+
+/* ================ Modals ================ */
+
+ --marketplaceModalRootStyles {
+ /* PageLayout is using flex: AuthenticationPage's .root takes all available space */
+ flex-grow: 1;
+
+ /* AuthenticationPage's root uses flexbox */
+ display: flex;
+
+ @media (--viewportMedium) {
+ justify-content: center;
+ align-items: flex-start;
+ @apply --backgroundImage;
+ }
+ }
+
+ --marketplaceModalFormRootStyles {
+ display: flex;
+ flex-direction: column;
+ flex: 1;
+ justify-content: space-between;
+ height: 100%;
+ }
+
+ --marketplaceModalBaseStyles {
+ flex-grow: 1;
+
+ /* Create context so the close button can be positioned within it */
+ position: relative;
+
+ /* Display and dimensions */
+ display: flex;
+ flex-direction: column;
+ padding: 24px 24px 48px 24px;
+
+ background-color: var(--matterColorLight);
+ border-radius: var(--borderRadius);
+
+ @media (--viewportMedium) {
+ flex-basis: 480px;
+ flex-grow: 0;
+ /* min-height: 568px; */
+ padding: 55px 60px 55px 60px;
+ margin-top: 12.5vh;
+ margin-bottom: 12.5vh;
+ }
+ }
+
+
+ /* Modal title */
+
+ --marketplaceModalTitleStyles {
+ font-weight: var(--fontWeightSemiBold);
+ font-size: 30px;
+ line-height: 36px;
+ letter-spacing: -0.5px;
+ margin: 0;
+ font-weight: var(--fontWeightBold);
+
+ @media (--viewportMedium) {
+ font-weight: var(--fontWeightSemiBold);
+ line-height: 40px;
+ letter-spacing: -0.9px;
+ margin: 0;
+ }
+ }
+
+
+ /* Modal message */
+
+ --marketplaceModalParagraphStyles {
+ margin: 18px 0 0 0;
+
+ @media (--viewportMedium) {
+ margin: 24px 0 0 0;
+ }
+ }
+
+
+ /* Bottom wrapper for the modal */
+
+ --marketplaceModalBottomWrapper {
+ text-align: center;
+ margin-top: 60px;
+ align-self: stretch;
+
+ @media (--viewportMedium) {
+ margin-top: 96px;
+ }
+ }
+
+ /* Adjust the bottomWrapper's margin to match modals without the helper text */
+ --marketplaceModalBottomWrapperText {
+ margin-top: -24px;
+ padding-bottom: 8px;
+
+ @media (--viewportMedium) {
+ padding-bottom: 0;
+ }
+ }
+
+ --marketplaceModalHelperText {
+ @apply --marketplaceH5FontStyles;
+ color: var(--matterColorAnti);
+ margin: 0;
+
+ @media (--viewportMedium) {
+ margin: 0;
+ }
+ }
+
+ --marketplaceModalHelperLink {
+ @apply --marketplaceH5FontStyles;
+ color: var(--matterColor);
+ margin: 0;
+
+ @media (--viewportMedium) {
+ margin: 0;
+ }
+ }
+
+ /* Modal Close icon */
+
+ --marketplaceModalCloseStyles {
+
+ /* Position inside modal */
+ position: absolute;
+ top: 0;
+ right: 0;
+
+ /* Some content (like map) is positioning itself on top of close button without z-index handling */
+ z-index: calc(var(--zIndexModal) + 1);
+
+ /* Safari didn't know how to baseline-align svg icon and text */
+ display: flex;
+ align-items: flex-start;
+ width: auto;
+
+ /* Sizing (touch area) */
+ padding: 24px 30px;
+ margin: 0;
+ border: 0;
+
+ @media (--viewportMedium) {
+ padding: 27px 30px;
+ }
+
+ /* Colors */
+ background-color: transparent;
+ color: var(--matterColor);
+
+ cursor: pointer;
+
+ &:enabled:hover {
+ background-color: transparent;
+ color: var(--matterColorDark);
+ box-shadow: none;
+ text-decoration: none;
+ }
+ &:enabled:active {
+ background-color: transparent;
+ color: var(--matterColorDark);
+ }
+ &:disabled {
+ background-color: transparent;
+ }
+ }
+
+ --marketplaceModalIconStyles {
+ height: 48px;
+ margin-bottom: 12px;
+
+ @media (--viewportMedium) {
+ height: 64px;
+ margin-bottom: 23px;
+ }
+ }
+
+ --marketplaceModalCloseText {
+ /* Font */
+ @apply --marketplaceH6FontStyles;
+ margin: -2.5px 0 0 0;
+
+ @media (--viewportMedium) {
+ margin-top: -1px;
+ }
+ }
+
+ --marketplaceModalCloseIcon {
+ display: inline-block;
+ margin-left: 8px;
+ padding: 2px 0 4px;
+ box-sizing: content-box;
+ }
+
+ --marketplaceModalErrorStyles {
+ @apply --marketplaceH4FontStyles;
+ margin-top: 24px;
+ color: var(--failColor);
+ }
+
+ --marketplaceModalHighlightEmail {
+ font-weight: var(--fontWeightBold);
+ }
+
+ --marketplaceModalPasswordMargins {
+ /* Leave space between the input and the button below when the
+ viewport height is small */
+ margin-top: 24px;
+
+ @media (--viewportMedium) {
+ margin-top: 30px;
+ }
+ }
}
diff --git a/src/marketplaceFonts.css b/src/marketplaceFonts.css
index c8c7b7ee..3e6bb89a 100644
--- a/src/marketplaceFonts.css
+++ b/src/marketplaceFonts.css
@@ -198,20 +198,6 @@
}
- /* This font is specific to Modal's (Lightbox) titles */
- --marketplaceModalTitle: {
- font-weight: var(--fontWeightSemiBold);
- font-size: 30px;
- line-height: 36px;
- letter-spacing: -0.5px;
-
- @media (--viewportMedium) {
- line-height: 40px;
- letter-spacing: -0.9px;
- }
- }
-
-
/* ================ Tabbed navigation font styles ================ */
--marketplaceTabNavFontStyles {
diff --git a/src/marketplaceIndex.css b/src/marketplaceIndex.css
index 83338b98..bb8be7fe 100644
--- a/src/marketplaceIndex.css
+++ b/src/marketplaceIndex.css
@@ -74,6 +74,10 @@ label {
}
}
+button {
+ font-family: "sofiapro", Helvetica, Arial, sans-serif;
+}
+
select {
@apply --marketplaceSelectStyles;
}