Merge pull request #29900 from overleaf/td-ciam-login

Implement unified access login page

GitOrigin-RevId: 9973565099e1e88dd9d6b232d8f5c545dc73e6f7
This commit is contained in:
Tim Down
2025-12-03 14:35:10 +00:00
committed by Copybot
parent c1dc70fc92
commit 5bbc5b2e58
20 changed files with 353 additions and 229 deletions

View File

@@ -1,42 +0,0 @@
include terms_of_service
include recaptcha
mixin ciamLogo
header.ciam-logo
a.brand.overleaf-ds-logo(href='/')
span.visually-hidden Overleaf
mixin ciamCardSeparator
hr.ciam-card-separator
mixin ciamCardFooter
section.ciam-card-footer
+ciamCardSeparator
.ciam-footer-ds-logo
img(
src=buildImgPath('digital-science/digital-science.svg')
alt='Digital Science'
)
p
| !{translate('advancing_research_with', { linkOverleaf: 'https://www.overleaf.com', linkPapers: 'https://www.papersapp.com/', linkDS: 'https://www.digital-science.com/products/' })}
mixin ciamTermsOfServiceAgreement
p
+termsOfServiceAgreementContent
mixin ciamRecaptchaConditions
p
+recaptchaConditionsContent
mixin ciamCustomFormDangerMessage(key)
div(
class='notification ciam-notification notification-type-error'
hidden
data-ol-custom-form-message=key
role='alert'
aria-live='polite'
)
.notification-icon
ph-warning-circle(aria-hidden='true')
.notification-content.text-left
block

View File

@@ -106,6 +106,7 @@
"address_second_line_optional": "",
"adjust_column_width": "",
"advanced_reference_search_mode": "",
"advancing_research_with": "",
"after_that_well_bill_you_x_total_y_subtotal_z_tax_annually_on_date_unless_you_cancel": "",
"aggregate_changed": "",
"aggregate_to": "",

View File

@@ -1,4 +1,6 @@
// These are used in the CIAM registration form
// These are used in the CIAM registration and login flows
import '@phosphor-icons/webcomponents/PhBank'
import '@phosphor-icons/webcomponents/PhEye'
import '@phosphor-icons/webcomponents/PhInfo'
import '@phosphor-icons/webcomponents/PhEyeSlash'
import '@phosphor-icons/webcomponents/PhWarningCircle'

View File

@@ -4,6 +4,7 @@ import { canSkipCaptcha, validateCaptchaV2 } from './captcha'
import inputValidator from './input-validator'
import { disableElement, enableElement } from '../utils/disableElement'
import { materialIcon as createMaterialIcon } from '@/features/utils/material-icon'
import { ciamIcon } from '@/features/utils/ciam-icon'
// Form helper(s) to handle:
// - Attaching to the relevant form elements
@@ -343,12 +344,20 @@ function showMessagesNewStyle(
}
// create the left icon
const icon = createMaterialIcon(
message.type === 'error' ? 'error' : 'check_circle'
)
const isDsBranded = formEl.dataset.ciamForm !== undefined
const messageIcon = document.createElement('div')
messageIcon.className = 'notification-icon'
messageIcon.appendChild(icon)
if (
isDsBranded &&
(message.type === 'error' || message.type === 'info')
) {
messageIcon.append(ciamIcon(message.type))
} else {
const icon = createMaterialIcon(
message.type === 'error' ? 'error' : 'check_circle'
)
messageIcon.appendChild(icon)
}
// append icon first so it's on the left
messageElContainer.appendChild(messageIcon)
@@ -379,23 +388,43 @@ function showMessagesNewStyle(
})
}
function querySelectorAllWithSelf(el: HTMLElement, selector: string) {
const nodeList = el.querySelectorAll<HTMLElement>(selector)
return el.matches(selector) ? [el, ...nodeList] : Array.from(nodeList)
}
export function inflightHelper(el: HTMLElement) {
const disabledInflight = el.querySelectorAll('[data-ol-disabled-inflight]')
const disabledInflight = querySelectorAllWithSelf(
el,
'[data-ol-disabled-inflight]'
)
const showWhenNotInflight = el.querySelectorAll<HTMLElement>(
'[data-ol-inflight="idle"]'
)
const showWhenInflight = el.querySelectorAll<HTMLElement>(
'[data-ol-inflight="pending"]'
)
const spinnerInflight = querySelectorAllWithSelf(
el,
'[data-ol-spinner-inflight]'
)
el.addEventListener('pending', () => {
disabledInflight.forEach(disableElement)
toggleDisplay(showWhenNotInflight, showWhenInflight)
spinnerInflight.forEach(loadingEl => {
loadingEl.setAttribute('data-ol-loading', 'true')
loadingEl.classList.add('button-loading')
})
})
el.addEventListener('idle', () => {
disabledInflight.forEach(enableElement)
toggleDisplay(showWhenInflight, showWhenNotInflight)
spinnerInflight.forEach(loadingEl => {
loadingEl.removeAttribute('data-ol-loading')
loadingEl.classList.remove('button-loading')
})
})
}

View File

@@ -1,13 +1,7 @@
import { materialIcon } from '@/features/utils/material-icon'
import classNames from 'classnames'
import '@phosphor-icons/webcomponents/PhWarningCircle'
function dsErrorIcon() {
const icon = document.createElement('ph-warning-circle')
icon.className = 'ciam-form-text-icon'
icon.ariaHidden = 'true'
return icon
}
import { ciamIcon } from '@/features/utils/ciam-icon'
export default function inputValidator(
inputEl: HTMLInputElement | HTMLTextAreaElement
@@ -30,7 +24,9 @@ export default function inputValidator(
const messageTextNode = document.createTextNode('')
const iconEl = isDsBranded ? dsErrorIcon() : materialIcon('error')
const iconEl = isDsBranded
? ciamIcon('error', 'ciam-form-text-icon')
: materialIcon('error')
messageInnerEl.append(iconEl)
messageInnerEl.append(messageTextNode)

View File

@@ -37,6 +37,8 @@ const CIAMSixDigitsInput = forwardRef<
)}
maxLength={7}
inputMode="numeric"
autocomplete="off"
data-1p-ignore
/>
<span className="ciam-six-digits-dash" aria-hidden>
-

View File

@@ -0,0 +1,9 @@
export function ciamIcon(type: 'error' | 'info', className?: string) {
const elName = type === 'error' ? 'ph-warning-circle' : 'ph-info'
const icon = document.createElement(elName)
if (className) {
icon.className = className
}
icon.ariaHidden = 'true'
return icon
}

View File

@@ -1,22 +1,43 @@
import React, { FC, ReactNode } from 'react'
import { Trans } from 'react-i18next'
import dsLogo from '@/shared/svgs/digital-science.svg'
type Props = { children: ReactNode }
const CiamLayout: FC<Props> = ({ children }: Props) => (
<div className="ciam-layout ciam-enabled">
<header className="ciam-logo">
<a href="/" className="brand overleaf-ds-logo">
<a href="/" className="brand overleaf-ds-logo ciam-image-link">
<span className="visually-hidden">Overleaf</span>
</a>
</header>
<div className="ciam-container">
<main className="ciam-card" id="main-content">
{children}
<section className="ciam-card-footer">
<hr className="ciam-card-separator" />
<div className="ciam-footer-ds-logo">
<img src={dsLogo} alt="Digital Science — home" />
</div>
<p>
<Trans
i18nKey="advancing_research_with"
components={[
// eslint-disable-next-line jsx-a11y/anchor-has-content,react/jsx-key
<a href="https://www.overleaf.com" />,
// eslint-disable-next-line jsx-a11y/anchor-has-content,react/jsx-key
<a href="https://www.papersapp.com/" />,
]}
/>
</p>
</section>
</main>
</div>
<footer>
<a href="https://www.overleaf.com/legal#Privacy">Privacy</a>
<a href="https://www.overleaf.com/legal#Terms">Terms</a>
<div className="footer-links">
<a href="https://www.overleaf.com/legal#Privacy">Privacy</a>
<a href="https://www.overleaf.com/legal#Terms">Terms</a>
</div>
</footer>
</div>
)

View File

@@ -0,0 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" width="103" height="29" fill="none"><g fill="#383838" clip-path="url(#a)"><path d="M28.143 15.424h-5.31V.285h5.222c5.267 0 8.008 3.05 8.008 7.548s-2.807 7.593-7.92 7.593v-.002m-.199-12.222h-1.36v9.304h1.36c2.678 0 4.344-1.405 4.344-4.652s-1.777-4.652-4.344-4.652M38.392 15.424V.285h3.753v15.141h-3.753v-.002M51.91 15.71c-4.806 0-7.46-3.16-7.46-7.834C44.45 3.202 47.324 0 51.996 0c1.867 0 3.423.44 4.63 1.12l-.504 3.268c-1.142-.724-2.48-1.295-4.038-1.295-2.612 0-3.883 1.931-3.883 4.763s1.316 4.848 3.927 4.848a4.26 4.26 0 0 0 2.04-.482V9.524h-2.633l-.44-2.787h6.343v7.372c-1.581 1.03-3.446 1.6-5.53 1.6h.001M60.053 15.424V.285h3.752v15.141h-3.752v-.002M73.878 3.467v11.959h-3.774V3.467h-4.279V.285h11.981l.527 3.182h-4.455M82.393.219h4.126l5.266 14.744-3.773.614-1.12-3.292h-5.266l-1.008 3.138h-3.664L82.394.219m.132 9.127h3.423l-1.69-5.267-1.733 5.267M93.455 15.424V.285h3.751v11.892h4.652l.506 3.247h-8.909M25.963 28.152c-1.268 0-2.517-.383-3.365-.846l.181-.926c.887.504 2.034.926 3.281.926 1.412 0 2.338-.625 2.338-1.73 0-.989-.584-1.491-2.618-2.057-1.994-.543-2.9-1.228-2.9-2.678 0-1.449 1.25-2.496 3.122-2.496 1.068 0 2.015.261 2.779.644l-.16.906c-.867-.443-1.752-.684-2.66-.684-1.49 0-2.155.706-2.155 1.57 0 .865.564 1.332 2.256 1.793 2.157.585 3.264 1.33 3.264 2.92 0 1.713-1.39 2.66-3.363 2.66v-.002M35.392 28.193c-2.316 0-4.168-1.813-4.168-4.933s1.873-4.934 4.23-4.934c1.187 0 2.234.422 3.062 1.048l-.183.967c-.947-.807-1.832-1.188-2.92-1.188-2.014 0-3.202 1.672-3.202 4.109 0 2.436 1.149 4.108 3.283 4.108 1.027 0 1.976-.363 2.962-1.209l.121.886c-.865.726-1.912 1.148-3.182 1.148l-.003-.002M40.877 27.992v-9.466h.928v9.466h-.928M48.478 28.193c-2.497 0-4.17-1.852-4.17-4.933 0-3.081 1.733-4.934 4.03-4.934 2.416 0 3.625 2.114 3.625 4.732v.202h-6.685c0 2.416 1.127 4.108 3.241 4.108 1.149 0 2.357-.603 3.283-1.45l.14.888c-.866.784-2.114 1.39-3.464 1.39v-.003m-3.161-5.72h5.66c-.06-1.852-.988-3.362-2.639-3.362-1.793 0-2.821 1.389-3.021 3.363M60.813 27.992v-6.586c0-1.43-.685-2.215-2.035-2.215-1.048 0-2.135.605-3.324 1.712v7.089h-.947v-9.466h.685l.241 1.43c1.149-1.006 2.196-1.63 3.446-1.63 1.954 0 2.879 1.107 2.879 3.001v6.666h-.945v-.001M68.355 28.193c-2.318 0-4.17-1.813-4.17-4.933s1.873-4.934 4.23-4.934c1.187 0 2.235.422 3.06 1.048l-.181.967c-.945-.807-1.834-1.188-2.919-1.188-2.013 0-3.202 1.672-3.202 4.109 0 2.436 1.148 4.108 3.28 4.108 1.028 0 1.976-.363 2.962-1.209l.121.886c-.866.726-1.913 1.148-3.181 1.148v-.002M77.335 28.193c-2.497 0-4.17-1.852-4.17-4.933 0-3.081 1.733-4.934 4.028-4.934 2.418 0 3.625 2.114 3.625 4.732v.202h-6.686c0 2.416 1.126 4.108 3.242 4.108 1.147 0 2.357-.603 3.283-1.45l.14.888c-.866.784-2.114 1.39-3.464 1.39l.002-.003m-3.162-5.72h5.66c-.061-1.852-.987-3.362-2.64-3.362-1.793 0-2.818 1.389-3.021 3.363h.001M20.18 4.173h-3.477V7.65h3.478V4.173M12.395.285H8.919v3.478h3.476V.285ZM16.284.285h-3.477v3.476h3.477V.285ZM20.18.284h-3.477v3.478h3.478V.284ZM12.395 4.173H8.919V7.65h3.476V4.173M16.284 4.173h-3.477V7.65h3.477V4.173M16.284 8.06h-3.477v3.476h3.477V8.062M20.18 8.06h-3.477v3.478h3.478V8.061M16.284 11.948h-3.477v3.478h3.477v-3.478M20.18 11.948h-3.477v3.478h3.478v-3.478M8.233 6.152h-2.51v2.512h2.51V6.152"/><path d="M5.735 7.4h-2.51v2.51h2.51V7.4M5.005 11.65h-2.51v2.51h2.51v-2.51M7.649 13.514H5.14v2.51H7.65v-2.51M9.247 10.79h-2.51v2.51h2.51v-2.51M13.405 10.108h-3.12v3.12h3.12v-3.12M8.499 18.863H5.66V21.7H8.5v-2.837"/><path d="M6.725 20.995H5.347v1.377h1.378v-1.377M18.381 19.294h-1.494v1.494h1.494v-1.494M14.112 16.06H11.6v2.513h2.512V16.06M8.092 1.546h-2.51v2.51h2.51v-2.51M14.112 18.672H12.55v1.563h1.562v-1.563M11.424 18.88H9.529v1.895h1.895V18.88M18.217 22.88h-1.894v1.894h1.893v-1.893M10.733 25.06H9.187v1.547h1.546v-1.546M1.755 11.257H0v1.753h1.755v-1.753"/></g><defs><clipPath id="a"><path fill="#fff" d="M0 0h102.363v28.194H0z"/></clipPath></defs></svg>

After

Width:  |  Height:  |  Size: 3.8 KiB

View File

@@ -1,5 +1,6 @@
@import '../ds/all'; // DS design system styles
@import 'ciam-layout';
@import 'ciam-variables';
@import 'ciam-links';
@import 'ciam-login';
@import 'ciam-register';
@import 'ciam-six-digits';

View File

@@ -1,13 +1,21 @@
@use 'sass:math';
@mixin ciam-bottom-margin {
margin: 0 0 var(--ds-spacing-400);
}
@mixin ciam-vertically-spaced {
display: flex;
flex-direction: column;
gap: var(--ds-spacing-400);
}
.overleaf-ds-logo {
background-image: url('../../../frontend/js/shared/svgs/overleaf-a-ds-solution-mallard.svg');
}
.ciam-layout {
display: flex;
flex-direction: column;
gap: var(--ds-spacing-400);
@include ciam-vertically-spaced;
@include media-breakpoint-up(sm) {
gap: var(--ds-spacing-800);
@@ -25,141 +33,195 @@
color: var(--ds-color-text-primary);
}
.ciam-container {
flex: 1 1 auto;
padding: 0 var(--ds-spacing-300);
}
.ciam-logo {
padding: var(--ds-spacing-800) 0 0 0;
text-align: center;
@include media-breakpoint-up(sm) {
padding-left: var(--ds-spacing-800);
padding-right: var(--ds-spacing-800);
}
}
.ciam-logo .brand {
flex-shrink: 0;
background-repeat: no-repeat;
background-position: center center;
background-size: contain;
height: 49px;
width: 107px;
margin: 0 auto;
display: block;
@include media-breakpoint-up(sm) {
height: 64px;
width: 130px;
margin: 9px 0; // Vertical margin isn't an exacting spacing value in the design
}
}
h1 {
@include ds-heading-sm-semibold;
@include ds-heading-md-semibold;
padding-bottom: var(--ds-spacing-200);
margin: 0;
}
.ciam-card {
display: flex;
flex-direction: column;
gap: var(--ds-spacing-400);
background-color: var(--bg-light-primary);
box-shadow:
0 4px 6px -4px rgb(0 0 0 / 10%),
0 1px 29px -3px rgb(0 0 0 / 16%);
padding: var(--ds-spacing-800) var(--ds-spacing-400);
border-radius: var(--ds-border-radius-400);
max-width: 464px;
margin: 0 auto;
min-height: 500px;
@include media-breakpoint-up(sm) {
padding: var(--ds-spacing-1300);
}
.notification {
@include ds-body-sm-regular;
color: var(--ds-color-text-primary);
padding: 0 var(--ds-spacing-400);
border-width: 0;
border-radius: var(--ds-border-radius-200);
.notification-icon {
font-size: math.div(20em, 14);
}
.notification-content {
padding: var(--ds-spacing-400) 0;
}
&.notification-type-error {
background-color: var(--ds-color-red-50);
}
}
}
.ciam-disclaimers p {
@include ds-body-sm-regular;
padding-bottom: var(--ds-spacing-250);
margin: 0;
}
.ciam-card-separator {
margin: var(--ds-spacing-500) 0;
height: 0;
border-top: solid 1px var(--ds-grey-20);
}
.ciam-card-footer {
display: flex;
flex-direction: column;
gap: var(--ds-spacing-250);
p {
@include ds-body-sm-regular;
color: var(--ds-color-text-secondary);
margin-bottom: 0;
}
}
.ciam-footer-ds-logo {
text-align: center;
padding: var(--ds-spacing-200) 0;
}
.ciam-stepper {
margin: 0;
height: 4px;
border-radius: var(--ds-border-radius-full);
.step {
background: var(--ds-color-neutral-200);
}
}
footer {
display: flex;
gap: var(--ds-spacing-600);
justify-content: center;
padding: var(--ds-spacing-300) 0;
margin: 0 auto;
// Allow room for the cookie banner
padding-bottom: 100px;
@include media-breakpoint-up(sm) {
margin-left: var(--ds-spacing-800);
margin-right: var(--ds-spacing-800);
justify-content: start;
}
.footer-links {
display: flex;
gap: var(--ds-spacing-600);
justify-content: center;
color: var(--ds-color-text-secondary);
padding: var(--ds-spacing-300) 0;
margin: 0 auto;
a {
@include ds-body-sm-regular;
@include media-breakpoint-up(sm) {
margin-left: var(--ds-spacing-800);
margin-right: var(--ds-spacing-800);
}
a {
@include ds-body-sm-regular;
}
}
}
}
.ciam-container {
flex: 1 1 auto;
padding: 0 var(--ds-spacing-300);
}
.ciam-logo {
padding: var(--ds-spacing-800) 0 0 0;
text-align: center;
@include media-breakpoint-up(sm) {
padding-left: var(--ds-spacing-800);
padding-right: var(--ds-spacing-800);
}
}
.ciam-logo .brand {
flex-shrink: 0;
background-repeat: no-repeat;
background-position: center center;
background-size: contain;
height: 60px;
width: 133px;
margin: 0 auto;
display: block;
@include media-breakpoint-up(sm) {
height: 64px;
width: 142px;
margin: 9px 0; // Vertical margin isn't an exacting spacing value in the design
}
}
.ciam-card {
@include ciam-vertically-spaced;
background-color: var(--bg-light-primary);
box-shadow:
0 4px 6px -4px rgb(0 0 0 / 10%),
0 1px 29px -3px rgb(0 0 0 / 16%);
padding: var(--ds-spacing-800) var(--ds-spacing-400);
border-radius: var(--ds-border-radius-400);
max-width: 464px;
margin: 0 auto;
min-height: 500px;
@include media-breakpoint-up(sm) {
padding: var(--ds-spacing-1300);
}
.notification {
@include ds-body-sm-regular;
color: var(--ds-color-text-primary);
padding: 0 var(--ds-spacing-400);
border-width: 0;
border-radius: var(--ds-border-radius-200);
gap: var(--ds-spacing-300);
.notification-icon {
font-size: math.div(20em, 14);
display: flex;
align-items: center;
padding: var(--ds-spacing-50);
}
.notification-content {
padding: var(--ds-spacing-400) 0;
}
&.notification-type-error {
background-color: var(--ds-color-red-50);
}
&.notification-type-info {
background-color: var(--ds-color-blue-50);
}
}
}
.ciam-login-register-error-container .notification {
@include ciam-bottom-margin;
}
.ciam-disclaimers p {
@include ds-body-sm-regular;
padding-bottom: var(--ds-spacing-250);
margin: 0;
}
.ciam-card-separator {
margin: var(--ds-spacing-500) 0;
height: 0;
border-top: solid 1px var(--ds-grey-20);
}
.ciam-card-footer {
display: flex;
flex-direction: column;
gap: var(--ds-spacing-250);
p {
@include ds-body-sm-regular;
color: var(--ds-color-text-secondary);
margin-bottom: 0;
text-align: center;
@include media-breakpoint-up(sm) {
text-align: start;
}
}
}
.ciam-login-register-text {
@include ciam-bottom-margin;
}
.ciam-login-register-text-final {
margin: 0;
}
.ciam-footer-ds-logo {
text-align: center;
padding: var(--ds-spacing-200) 0;
}
.ciam-stepper {
margin: 0;
height: 4px;
border-radius: var(--ds-border-radius-full);
.step {
background: var(--ds-color-neutral-200);
}
}
.ciam-work-uni-sso {
padding-top: var(--ds-spacing-200);
font-weight: var(--ds-font-weight-semibold);
}
.ciam-login-register-or-text-container {
@include ds-body-xs-semibold;
@include ciam-bottom-margin;
display: flex;
align-items: center;
gap: var(--ds-spacing-250);
color: var(--ds-color-text-secondary);
padding: var(--ds-spacing-200) 0 0 0;
&::before,
&::after {
content: '';
display: block;
flex-grow: 1;
height: 1px;
background-color: var(--ds-color-neutral-200);
}
}

View File

@@ -0,0 +1,37 @@
// TODO: Replace `fuchsia` by the correct colors.
.ciam-enabled,
.website-redesign:not(.application-page) .ciam-enabled .notification {
// Links, used in services/web/frontend/stylesheets/base/links.scss
--link-color: currentcolor;
--link-hover-color: var(--ds-color-text-primary);
--link-visited-color: var(--ds-color-text-secondary);
--link-text-decoration: underline;
--link-hover-text-decoration: underline;
a {
text-decoration-thickness: 5%;
text-underline-offset: 19.5%;
}
a:hover,
a:focus {
text-decoration-thickness: 10%;
}
a:focus-visible {
box-shadow: none;
outline: none;
background-color: var(--ds-color-yellow-500);
&.ciam-image-link {
@include ds-focus-outline;
background-color: transparent;
}
&.btn {
background-color: var(--bs-btn-bg);
}
}
}

View File

@@ -0,0 +1,15 @@
@import 'ds-design-system';
.ciam-login-text {
text-align: center;
padding: var(--ds-spacing-200) 0;
margin: 0;
&.ciam-login-bottom-space {
@include ciam-bottom-margin;
}
}
.ciam-login-sso-form-controls {
@include ciam-vertically-spaced;
}

View File

@@ -11,41 +11,19 @@
padding: var(--ds-spacing-200) 0;
}
.ciam-work-uni-sso {
color: var(--ds-color-text-secondary);
padding-top: var(--ds-spacing-200);
margin-bottom: var(--ds-spacing-400);
font-weight: var(--ds-font-weight-semibold);
}
.ciam-register-container {
display: flex;
flex-direction: column;
.login-register-or-text-container {
@include ds-body-xs-semibold;
gap: var(--ds-spacing-250);
padding: var(--ds-spacing-200) 0 0 0;
margin-bottom: var(--ds-spacing-400);
&::before,
&::after {
background-color: var(--ds-color-neutral-200);
}
}
.login-register-error-container {
padding-bottom: 0;
.notification {
margin-bottom: var(--ds-spacing-400);
footer .footer-links {
@include media-breakpoint-up(sm) {
justify-content: start;
}
}
}
.ciam-password-group {
margin-bottom: var(--ds-spacing-400);
@include ciam-bottom-margin;
}
.ciam-password-requirements-message {

View File

@@ -1,11 +0,0 @@
// TODO: Replace `fuchsia` by the correct colors.
.ciam-enabled,
.website-redesign:not(.application-page) .ciam-enabled .notification {
// Links, used in services/web/frontend/stylesheets/base/links.scss
--link-color: var(--ds-color-text-primary);
--link-hover-color: var(--ds-color-text-secondary);
--link-visited-color: var(--ds-color-text-secondary);
--link-text-decoration: underline;
--link-hover-text-decoration: none;
}

View File

@@ -111,4 +111,18 @@
visibility: hidden;
}
}
.button-content {
display: inline-flex;
align-items: center;
gap: var(--ds-spacing-200); // Add gap between text and icons
justify-content: center;
}
.btn-social-icon {
height: 24px;
width: 24px;
padding: var(--ds-spacing-50);
margin: 0;
}
}

View File

@@ -8,8 +8,6 @@
.form-group-ds label,
.website-redesign .form-group-ds label,
.website-redesign .form-label-ds {
@include ds-body-sm-semibold;
--bs-body-font-family: var(--ds-font-family-sans), sans-serif;
--bs-success-rgb: 25, 117, 76; // #19754c
--bs-danger-rgb: 195, 9, 43; // #c3092b
@@ -22,6 +20,12 @@
margin-bottom: var(--ds-spacing-100);
}
.form-label-ds,
.form-group-ds label,
.website-redesign .form-group-ds label {
@include ds-body-md-semibold;
}
.form-group-ds {
margin-bottom: var(--ds-spacing-400);
}

View File

@@ -22,6 +22,10 @@
margin: auto;
max-width: 480px;
h1 {
margin-bottom: var(--ds-spacing-400);
}
.notification {
margin-bottom: var(--spacing-05);
}

View File

@@ -128,7 +128,7 @@
"administration_and_security": "Administration and security",
"advanced_reference_search": "Advanced <0>reference search</0>",
"advanced_reference_search_mode": "Advanced reference search",
"advancing_research_with": "Advancing research with <a href=\"__linkOverleaf__\">Overleaf</a>, <a href=\"__linkPapers__\">Papers</a>, and <a href=\"__linkDS__\">more</a>",
"advancing_research_with": "Advancing research with <0>Overleaf</0>, <1>Papers</1>, and more",
"after_that_well_bill_you_x_total_y_subtotal_z_tax_annually_on_date_unless_you_cancel": "After that, well bill you __totalAmount__ (__subtotalAmount__ + __taxAmount__ tax) annually on __date__, unless you cancel.",
"aggregate_changed": "Changed",
"aggregate_to": "to",
@@ -830,6 +830,7 @@
"for_teams_and_organizations_who_want_a_streamlined_sso_and_security": "For teams and organizations who want a streamlined sign-on process and our strongest cloud security.",
"for_universities": "For universities",
"forever": "forever",
"forgot_password": "Forgot password?",
"forgot_your_password": "Forgot your password",
"format": "Format",
"found_matching_deleted_users": "Found __deletedUserCount__ matching deleted users",

Binary file not shown.

After

Width:  |  Height:  |  Size: 71 KiB