diff --git a/services/web/frontend/js/features/form-helpers/password-visibility.js b/services/web/frontend/js/features/form-helpers/password-visibility.js
new file mode 100644
index 0000000000..487c45952f
--- /dev/null
+++ b/services/web/frontend/js/features/form-helpers/password-visibility.js
@@ -0,0 +1,28 @@
+const visibilityOnQuery = '[data-ol-password-visibility-toggle="visibilityOn"]'
+const visibilityOffQuery =
+ '[data-ol-password-visibility-toggle="visibilityOff"]'
+
+const visibilityOnButton = document.querySelector(visibilityOnQuery)
+const visibilityOffButton = document.querySelector(visibilityOffQuery)
+
+if (visibilityOffButton && visibilityOnButton) {
+ visibilityOnButton.addEventListener('click', function () {
+ const passwordInput = document.querySelector(
+ '[data-ol-password-visibility-target]'
+ )
+ passwordInput.type = 'text'
+ visibilityOnButton.hidden = true
+ visibilityOffButton.hidden = false
+ visibilityOffButton.focus()
+ })
+
+ visibilityOffButton.addEventListener('click', function () {
+ const passwordInput = document.querySelector(
+ '[data-ol-password-visibility-target]'
+ )
+ passwordInput.type = 'password'
+ visibilityOffButton.hidden = true
+ visibilityOnButton.hidden = false
+ visibilityOnButton.focus()
+ })
+}
diff --git a/services/web/frontend/js/marketing.js b/services/web/frontend/js/marketing.js
index e90287ad29..3cb12be43a 100644
--- a/services/web/frontend/js/marketing.js
+++ b/services/web/frontend/js/marketing.js
@@ -3,6 +3,7 @@ import './infrastructure/error-reporter'
import 'jquery'
import 'bootstrap'
import './features/form-helpers/hydrate-form'
+import './features/form-helpers/password-visibility'
import './features/link-helpers/slow-link'
import './features/bookmarkable-tab'
import './features/contact-form'
diff --git a/services/web/frontend/stylesheets/app/base.less b/services/web/frontend/stylesheets/app/base.less
index 58a7d03e27..846b56828c 100644
--- a/services/web/frontend/stylesheets/app/base.less
+++ b/services/web/frontend/stylesheets/app/base.less
@@ -183,3 +183,20 @@
}
}
}
+
+.website-redesign {
+ .recaptcha-branding {
+ padding: @padding-sm 0;
+ text-align: left;
+ font-size: @font-size-extra-small;
+
+ & > a {
+ color: var(--emerald-green);
+
+ &:hover {
+ color: var(--emerald-green-dark);
+ }
+ text-decoration: underline;
+ }
+ }
+}
diff --git a/services/web/frontend/stylesheets/app/homepage.less b/services/web/frontend/stylesheets/app/homepage.less
index c79c4db070..4e5e28493d 100644
--- a/services/web/frontend/stylesheets/app/homepage.less
+++ b/services/web/frontend/stylesheets/app/homepage.less
@@ -183,26 +183,6 @@
}
}
-.hp-login-btn {
- .login-btn;
- min-width: 220px;
-}
-
-.hp-login-btn-large {
- .hp-login-btn;
-
- min-width: 256px;
- padding-left: 30px;
- font-size: 20px;
-}
-
-.hp-login-btn-icon-large {
- .login-btn-icon;
-
- width: 32px;
- height: 32px;
-}
-
.hp-register-form-email-pwd {
position: relative;
}
@@ -432,7 +412,18 @@
.form-group {
.hp-login-btn {
+ .login-btn;
+
width: 100%;
+ min-width: 220px;
+
+ .login-btn-icon {
+ position: absolute;
+ left: 6px;
+ top: 7px;
+ width: 20px;
+ height: 20px;
+ }
}
}
}
diff --git a/services/web/frontend/stylesheets/app/login-register.less b/services/web/frontend/stylesheets/app/login-register.less
index 95b6e2faff..af0edfbfc9 100644
--- a/services/web/frontend/stylesheets/app/login-register.less
+++ b/services/web/frontend/stylesheets/app/login-register.less
@@ -48,6 +48,7 @@
.login-register-text {
padding-bottom: 25px;
+ font-size: 90%;
&:last-child {
padding-bottom: 0;
}
@@ -125,3 +126,119 @@
.registration-block-separator {
margin-bottom: 0px;
}
+
+.website-redesign {
+ .login-register-container {
+ max-width: 320px;
+ }
+
+ .login-overleaf-logo-container {
+ padding: 15px;
+ width: 65px;
+ display: flex;
+ justify-content: center;
+ align-items: center;
+
+ .login-overleaf-logo {
+ width: 35px;
+ }
+
+ @media (max-width: @screen-xs-max) {
+ margin-top: @margin-lg;
+ }
+ }
+
+ .login-register-text {
+ font-size: 0.875rem;
+ line-height: 1.4;
+ text-align: left;
+
+ &.login-register-text-center {
+ text-align: center;
+ }
+ }
+
+ .login-register-other-links {
+ padding: @line-height-computed 0;
+ a {
+ color: var(--emerald-green);
+ text-decoration: underline;
+ // text-decoration-;skip-ink is for letter with descender (like 'g' and 'y')
+ // this will force underline to not skip the descender
+ text-decoration-skip-ink: none;
+
+ &:hover {
+ color: var(--emerald-green-dark);
+ }
+
+ // for accessibility with keyboard navigation
+ &:focus {
+ outline: 2px solid var(--emerald-green);
+ outline-offset: 1px;
+ }
+ }
+ }
+
+ .login-btn {
+ display: flex;
+ align-items: center;
+ justify-content: center;
+ padding: 4px 0;
+ }
+
+ .login-btn-icon {
+ position: relative;
+ top: unset;
+ left: unset;
+ background: unset;
+ border-radius: unset;
+ width: 20px;
+ height: 20px;
+ margin-right: 5px;
+
+ &::before {
+ content: unset;
+ }
+ }
+
+ .form-group {
+ text-align: left;
+ position: relative;
+
+ label {
+ font-size: @font-size-small;
+ }
+ }
+
+ .form-group-password {
+ display: flex;
+ position: relative;
+
+ input.form-control {
+ padding-right: 35px;
+ }
+
+ .visibility-toggle {
+ position: absolute;
+ right: 0;
+ top: 0;
+ width: @input-height-base;
+ height: @input-height-base;
+ display: flex;
+ align-items: center;
+ justify-content: center;
+ border: unset;
+ background-color: unset;
+
+ #visibility-icon-off {
+ margin-top: 2px; // workaround for the icon not having the same center as the non-slashed one
+ }
+ }
+ }
+
+ .form-group-password-input {
+ display: flex;
+ flex-direction: column;
+ width: 100%;
+ }
+}
diff --git a/services/web/frontend/stylesheets/app/register.less b/services/web/frontend/stylesheets/app/register.less
index 5e102af6d3..f0aafa10b8 100644
--- a/services/web/frontend/stylesheets/app/register.less
+++ b/services/web/frontend/stylesheets/app/register.less
@@ -25,3 +25,10 @@
border-bottom-width: 0;
}
}
+
+.website-redesign {
+ .login-register-form-focus {
+ padding: @line-height-computed 0 0 0;
+ border-bottom: unset;
+ }
+}
diff --git a/services/web/frontend/stylesheets/app/website-redesign.less b/services/web/frontend/stylesheets/app/website-redesign.less
index bcefe47e20..6c5d602b5a 100644
--- a/services/web/frontend/stylesheets/app/website-redesign.less
+++ b/services/web/frontend/stylesheets/app/website-redesign.less
@@ -944,11 +944,20 @@
.inline-green-link {
color: var(--emerald-green);
+ text-decoration: underline;
+ // text-decoration-;skip-ink is for letter with descender (like 'g' and 'y')
+ // this will force underline to not skip the descender
+ text-decoration-skip-ink: none;
&:hover {
color: var(--emerald-green-dark);
}
- text-decoration: underline;
+
+ // for accessibility with keyboard navigation
+ &:focus {
+ outline: 2px solid var(--emerald-green);
+ outline-offset: 1px;
+ }
}
.white-link {
diff --git a/services/web/frontend/stylesheets/core/type.less b/services/web/frontend/stylesheets/core/type.less
index 036813d2e0..d4236640af 100755
--- a/services/web/frontend/stylesheets/core/type.less
+++ b/services/web/frontend/stylesheets/core/type.less
@@ -124,7 +124,6 @@ small,
color: @text-small-color;
}
-.login-register-text,
.login-register-hr-text-container,
.text-small {
font-size: 90%;
diff --git a/services/web/locales/en.json b/services/web/locales/en.json
index 834f6fba59..feda7d1493 100644
--- a/services/web/locales/en.json
+++ b/services/web/locales/en.json
@@ -637,6 +637,7 @@
"for_teaching": "For teaching",
"for_universities": "For universities",
"for_visa_mastercard_and_discover": "For <0>Visa, MasterCard and Discover0>, the <1>3 digits1> on the <2>back2> of your card.",
+ "forgot_password": "Forgot password?",
"forgot_your_password": "Forgot your password",
"format": "Format",
"found_matching_deleted_users": "Found __deletedUserCount__ matching deleted users",
@@ -1031,6 +1032,7 @@
"log_in_with": "Log in with __provider__",
"log_in_with_a_different_account": "Log in with a different account",
"log_in_with_email": "Log in with __email__",
+ "log_in_with_email_raw": "Log in with email",
"log_in_with_existing_institution_email": "Please log in with your existing __appName__ account in order to get your __appName__ and __institutionName__ institutional accounts linked.",
"log_in_with_primary_email_address": "This will be the email address to use if you log in with an email address and password. Important __appName__ notifications will be sent to this email address.",
"log_in_with_sso": "Log in with SSO",
diff --git a/services/web/public/img/material-icons/visibility-slashed-18.svg b/services/web/public/img/material-icons/visibility-slashed-18.svg
new file mode 100644
index 0000000000..1a042aa31e
--- /dev/null
+++ b/services/web/public/img/material-icons/visibility-slashed-18.svg
@@ -0,0 +1,3 @@
+
diff --git a/services/web/public/img/material-icons/visibility-unslashed-18.svg b/services/web/public/img/material-icons/visibility-unslashed-18.svg
new file mode 100644
index 0000000000..b2864fa133
--- /dev/null
+++ b/services/web/public/img/material-icons/visibility-unslashed-18.svg
@@ -0,0 +1,3 @@
+
diff --git a/services/web/public/img/ol-brand/overleaf-o-dark.svg b/services/web/public/img/ol-brand/overleaf-o-dark.svg
new file mode 100644
index 0000000000..c4d2a9c220
--- /dev/null
+++ b/services/web/public/img/ol-brand/overleaf-o-dark.svg
@@ -0,0 +1 @@
+
\ No newline at end of file