diff --git a/landing/landing.css b/landing/landing.css index db834877e..31d535469 100644 --- a/landing/landing.css +++ b/landing/landing.css @@ -1,151 +1,159 @@ .container { background: radial-gradient(ellipse at bottom, #1f252e, #111827) fixed; font-family: var(--sans-serif); -moz-osx-font-smoothing: grayscale; text-rendering: optimizeLegibility; color: white; word-break: break-word; height: 100%; position: relative; z-index: 0; } .innerContainer { background-color: var(--page-background); margin: 0; padding: 0; height: 100%; overflow: auto; } +.innerContainerMobileNav { + overflow-y: hidden; +} + +.pageContentContainer { + position: relative; +} + .wrapper { transition-property: max-width; transition: 300ms; max-width: 1850px; margin-left: auto; margin-right: auto; display: grid; align-items: center; padding-top: 7vh; padding-bottom: 235px; grid-template-columns: 40px repeat(12, 1fr) 40px; grid-template-rows: repeat(auto-fill, 1fr); column-gap: 1.5%; row-gap: 75px; grid-template-areas: '. hImg hImg hImg hImg . hInfo hInfo hInfo hInfo hInfo hInfo hInfo .' '. fImg fImg fImg fImg fImg . fInfo fInfo fInfo fInfo fInfo fInfo .' '. cInfo cInfo cInfo cInfo cInfo cInfo . cImg cImg cImg cImg cImg cImg' '. eImg eImg eImg eImg eImg . eInfo eInfo eInfo eInfo eInfo eInfo .' '. sInfo sInfo sInfo sInfo sInfo sInfo . sImg sImg sImg sImg sImg .' 'oImg oImg oImg oImg oImg oImg . oInfo oInfo oInfo oInfo oInfo oInfo .' '. lInfo lInfo lInfo lInfo lInfo lInfo . lImg lImg lImg lImg lImg .'; } @media screen and (max-width: 1099px) { .wrapper { margin-left: auto; margin-right: auto; display: grid; align-items: center; padding-top: 7vh; padding-bottom: 235px; grid-template-columns: 16px repeat(6, 1fr) 16px; grid-template-rows: repeat(auto-fill, 1fr); column-gap: 1.5%; row-gap: 75px; grid-template-areas: '. hInfo hInfo hInfo hInfo hInfo hInfo .' '. fInfo fInfo fInfo fInfo fInfo fInfo .' '. fImg fImg fImg fImg fImg fImg .' '. cInfo cInfo cInfo cInfo cInfo cInfo .' '. cImg cImg cImg cImg cImg cImg cImg' '. eInfo eInfo eInfo eInfo eInfo eInfo .' '. eImg eImg eImg eImg eImg eImg .' '. sInfo sInfo sInfo sInfo sInfo sInfo .' '. sImg sImg sImg sImg sImg sImg .' '. oInfo oInfo oInfo oInfo oInfo oInfo .' 'oImg oImg oImg oImg oImg oImg oImg .' '. lInfo lInfo lInfo lInfo lInfo lInfo .' '. lImg lImg lImg lImg lImg lImg .'; } .heroImage { display: none; } .heroInfo { display: flex; flex-direction: column; padding-bottom: 1.5rem; } .federatedImage { justify-self: center; } .encryptedImage { justify-self: center; max-width: 585px; } .sovereignImage { justify-self: center; } } .heroImage { grid-area: hImg; } .heroInfo { grid-area: hInfo; } .federatedImage { grid-area: fImg; } .federatedInfo { grid-area: fInfo; } .customizableImage { grid-area: cImg; } .customizableInfo { grid-area: cInfo; } .encryptedImage { grid-area: eImg; } .encryptedInfo { grid-area: eInfo; } .sovereignImage { grid-area: sImg; } .sovereignInfo { grid-area: sInfo; } .openSourceImage { grid-area: oImg; } .openSourceInfo { grid-area: oInfo; } .lessNoisyImage { grid-area: lImg; } .lessNoisyInfo { grid-area: lInfo; } diff --git a/landing/landing.react.js b/landing/landing.react.js index 1113cfceb..ca8ed57da 100644 --- a/landing/landing.react.js +++ b/landing/landing.react.js @@ -1,101 +1,116 @@ // @flow +import classNames from 'classnames'; import * as React from 'react'; import { useRouteMatch } from 'react-router-dom'; import { ModalProvider, useModalContext, } from 'lib/components/modal-provider.react.js'; import AppLanding from './app-landing.react.js'; import Footer from './footer.react.js'; import Header from './header.react.js'; import Investors from './investors.react.js'; import Keyservers from './keyservers.react.js'; import css from './landing.css'; +import MobileNav from './mobile-nav.react.js'; import Privacy from './privacy.react.js'; import QR from './qr.react.js'; import SIWE from './siwe.react.js'; import Support from './support.react.js'; import Team from './team.react.js'; import Terms from './terms.react.js'; import useScrollToTopOnNavigate from './use-scroll-to-top-on-navigate.react.js'; import './reset.css'; import './global.css'; function Landing(): React.Node { const onSIWE = useRouteMatch({ path: '/siwe' }); if (onSIWE) { return ; } return ( ); } function LandingSite(): React.Node { const modalContext = useModalContext(); const modals = React.useMemo( () => modalContext.modals.map(([modal, key]) => ( {modal} )), [modalContext.modals], ); + const [showMobileNav, setShowMobileNav] = React.useState(false); + + const innerContainerClassName = classNames({ + [css.innerContainer]: true, + [css.innerContainerMobileNav]: showMobileNav, + }); + useScrollToTopOnNavigate(); const onPrivacy = useRouteMatch({ path: '/privacy' }); const onTerms = useRouteMatch({ path: '/terms' }); const onSupport = useRouteMatch({ path: '/support' }); const onKeyservers = useRouteMatch({ path: '/keyservers' }); const onQR = useRouteMatch({ path: '/qr' }); const onTeam = useRouteMatch({ path: '/team' }); const onInvestors = useRouteMatch({ path: '/investors' }); const activePage = React.useMemo(() => { if (onPrivacy) { return ; } else if (onTerms) { return ; } else if (onSupport) { return ; } else if (onKeyservers) { return ; } else if (onQR) { return ; } else if (onTeam) { return ; } else if (onInvestors) { return ; } else { return ; } }, [onKeyservers, onPrivacy, onSupport, onTerms, onTeam, onInvestors, onQR]); let header =
; if (onQR) { header = null; } let footer =