diff --git a/landing/app-landing.react.js b/landing/app-landing.react.js
index 2769d875d..bd7e7b1a2 100644
--- a/landing/app-landing.react.js
+++ b/landing/app-landing.react.js
@@ -1,177 +1,180 @@
// @flow
import {
faLock,
faUserShield,
faUsers,
faCodeBranch,
faTools,
faBellSlash,
} from '@fortawesome/free-solid-svg-icons';
import * as React from 'react';
import CyclingHeader from './cycling-header.react';
import InfoCard from './info-card.react';
import css from './landing.css';
import StarBackground from './star-background.react';
const screenshots = [
{
alt: 'a mobile phone conversation list screen',
file: 'federated-prototype',
},
{
alt: 'a mobile phone with customized dashboard screen',
file: 'customizable-prototype',
},
{
alt: 'a mobile phone chat conversation screen',
file: 'e2e-encrypted-prototype',
},
{
alt: 'a mobile phone user information screen',
file: 'sovereign-prototype',
},
{
alt: 'a mobile phone addon app selection screen',
file: 'open-source-prototype',
},
{
alt: 'a mobile phone notification options screen',
file: 'less-noisy-prototype',
},
];
const LandingAssetsS3URL = 'https://dh9fld3hutpxf.cloudfront.net';
function AppLanding(): React.Node {
const [activeCardIdx, setActiveCardIdx] = React.useState(-1);
React.useEffect(() => {
const testWEBP = 'UklGRiIAAABXRUJQVlA4IBYAAAAwAQCdASoBAAEADsD+JaQAA3AAAAAA';
const testImg = new Image();
// preload webp if supported
testImg.onload = () => {
for (const imageFileName of screenshots) {
const image = new Image();
image.src = `${LandingAssetsS3URL}/${imageFileName.file}.webp`;
}
};
// preload png if webp not supported
testImg.onerror = () => {
for (const imageFileName of screenshots) {
const image = new Image();
image.src = `${LandingAssetsS3URL}/${imageFileName.file}.png`;
}
};
testImg.src = `data:image/webp;base64,${testWEBP}`;
}, []);
const imageIdx =
activeCardIdx === -1
? 1
: Math.min(Math.max(0, activeCardIdx), screenshots.length - 1);
return (
<>
-
-
- (think "Web3 Discord")
-
+
+
+
+ (think "Web3 Discord")
+
+
+
>
);
}
export default AppLanding;
diff --git a/landing/landing.css b/landing/landing.css
index 4e90439ac..29982b5e0 100644
--- a/landing/landing.css
+++ b/landing/landing.css
@@ -1,484 +1,494 @@
/* ===== GENERAL PAGE STYLES ===== */
html {
background: radial-gradient(ellipse at bottom, #1f252e, #111827);
background-attachment: fixed;
font-family: 'IBM Plex Sans', sans-serif;
color: white;
word-break: break-word;
}
/* Override browser default to achieve edge-to-edge footer translucency effect */
body {
background-image: radial-gradient(
circle at top left,
#2d008888 0%,
#ffffff00 50%
);
margin: 0;
padding: 0;
}
a {
transition: 0.2s;
text-decoration: none;
}
.mono {
font-family: 'iA Writer Duo S', monospace;
}
.no_bottom_margin {
margin-bottom: 0;
}
@media screen and (-webkit-min-device-pixel-ratio: 0) and (min-resolution: 0.001dpcm) {
img {
image-rendering: -webkit-optimize-contrast !important;
}
}
@media not all and (min-resolution: 0.001dpcm) {
@supports (-webkit-appearance: none) and (stroke-color: transparent) {
img {
image-rendering: unset !important;
}
}
}
/* ===== TEXT STYLES ===== */
h1 {
font-size: 58px;
font-family: 'IBM Plex Sans', sans-serif;
}
h2 {
font-size: 50px;
font-family: 'IBM Plex Sans', sans-serif;
}
p,
li {
font-size: 24px;
line-height: 1.6em;
}
.app_landing_subheading {
font-weight: bold;
padding-inline: 4px;
}
span.app_landing_subheading {
background-color: #7e57c2;
}
p.app_landing_subheading {
font-family: 'iA Writer Duo S', monospace;
color: #7e57c2;
font-size: 32px;
padding-inline: 0px;
}
span.purple_accent {
color: #7e57c2;
}
/* ===== COMMON CSS GRID LAYOUT ===== */
div.body_grid,
div.app_landing_grid {
max-width: 1920px;
margin-left: auto;
margin-right: auto;
display: grid;
column-gap: 6em;
padding-left: 60px;
padding-right: 60px;
padding-top: 20px;
padding-bottom: 40px;
transition-property: max-width;
transition: 300ms;
}
/* ===== CSS BODY GRID LAYOUT ===== */
div.body_grid {
grid-template-columns: 1fr 1fr;
grid-template-areas:
'hero_copy hero_image'
'server_image server_copy'
'keyserver_company keyserver_company'
'keyserver_copy read_the_docs';
}
div.hero_copy {
grid-area: hero_copy;
align-self: center;
}
div.hero_image {
grid-area: hero_image;
object-fit: scale-down;
align-self: center;
}
div.server_image {
grid-area: server_image;
object-fit: scale-down;
align-self: center;
}
div.server_copy {
grid-area: server_copy;
align-self: center;
}
div.keyserver_company {
grid-area: keyserver_company;
text-align: center;
padding-top: 80px;
}
div.read_the_docs {
grid-area: read_the_docs;
align-self: center;
padding-bottom: 40px;
}
/* ===== APP LANDING GRID ===== */
div.app_landing_grid {
grid-template-columns: 2fr 3fr;
grid-template-areas: 'app_preview app_copy';
padding-top: 6vh;
padding-bottom: 8vh;
}
div.app_preview {
grid-area: app_preview;
justify-self: right;
}
div.app_preview img {
min-height: 560px;
max-height: 70vh;
max-width: 30vw;
object-fit: scale-down;
position: sticky;
top: 18vh;
left: 0;
}
div.app_copy {
grid-area: app_copy;
align-self: center;
justify-self: left;
}
+.app_copy_wrapper {
+ height: 70vh;
+ display: flex;
+ flex-direction: column;
+ justify-content: center;
+}
+
h1.cycling_header {
font-family: 'iA Writer Duo S', monospace;
font-size: 50px;
- margin-top: 26vh;
+ margin: 0;
white-space: pre-wrap;
}
/* ===== TILE GRID STYLING ===== */
div.tile_grid {
display: grid;
margin-right: 16%;
grid-template-columns: 1fr;
grid-template-rows: 1fr 1fr 1fr 1fr 1fr 1fr;
row-gap: 36vh;
margin-top: 32vh;
margin-bottom: 36vh;
grid-template-areas:
'tile_one'
'tile_two'
'tile_three'
'tile_four'
'tile_five'
'tile_six';
}
div.tile_grid > div {
display: flex;
padding: 36px;
border-radius: 8px;
background-color: #ebedee;
justify-content: center;
flex-direction: column;
transition: 300ms;
background-color: rgba(0, 0, 0, 0.35);
backdrop-filter: none;
-webkit-backdrop-filter: blur(2px);
transition: 300ms;
}
.active_card {
box-shadow: 0px 20px 50px rgba(126, 87, 194, 0.5);
}
div.tile_title_row {
display: flex;
flex-direction: row;
align-items: center;
align-content: center;
justify-content: flex-start;
margin-left: 20px;
margin-right: 20px;
padding-bottom: 20px;
}
div.tile_title_row > p.tile_title {
font-family: 'iA Writer Duo S', monospace;
font-weight: bold;
font-size: 36px;
transition: 300ms;
}
div.tile_grid > div p {
font-size: 22px;
color: white;
text-align: left;
margin-top: 0px;
margin-bottom: 0px;
margin-left: 20px;
margin-right: 20px;
transition: 300ms;
}
div.tile_one {
grid-area: tile_one;
}
div.tile_two {
grid-area: tile_two;
}
div.tile_three {
grid-area: tile_three;
}
div.tile_four {
grid-area: tile_four;
}
div.tile_five {
grid-area: tile_five;
}
div.tile_six {
grid-area: tile_six;
}
/* ===== LEGAL PAGE STYLING ===== */
div.legal_container {
max-width: 1080px;
margin-left: auto;
margin-right: auto;
padding-left: 60px;
padding-right: 60px;
}
div.legal_container h1 {
font-size: 42px;
}
div.legal_container h2 {
font-size: 38px;
}
div.legal_container p,
li {
font-size: 20px;
}
div.legal_container a {
color: #7e57c2;
}
div.legal_container a:hover {
color: #8c69c9;
}
/* ===== LAYOUT HACKS ===== */
div.body_grid > div + .starting_section {
padding-top: 80px;
}
.section {
padding-top: 80px;
}
/* ===== MEDIUM-LARGE BREAKPOINT ===== */
@media (max-width: 1699px) {
div.tile_title_row > p.tile_title {
font-size: 30px;
}
h1.cycling_header {
font-size: 44px;
}
}
/* ===== MEDIUM BREAKPOINT ===== */
@media (max-width: 1499px) {
div.body_grid {
padding-left: 60px;
padding-right: 60px;
}
h1 {
font-size: 42px;
}
h2 {
font-size: 38px;
}
p,
li {
font-size: 18px;
}
/* ===== LEGAL PAGE STYLING ===== */
div.legal_container h1 {
font-size: 28px;
}
div.legal_container h2 {
font-size: 24px;
}
div.legal_container p,
li {
font-size: 16px;
}
/* ===== APP LANDING GRID STYLING ===== */
div.tile_grid > div p {
font-size: 16px;
}
div.tile_title_row > p.tile_title {
font-size: 24px;
}
h1.cycling_header {
font-size: 38px;
- margin-top: 20vh;
}
}
/* ===== MEDIUM-SMALL BREAKPOINT ===== */
@media (max-width: 1299px) {
div.tile_title_row > p.tile_title {
font-size: 22px;
}
h1.cycling_header {
font-size: 30px;
}
}
/* ===== SMALLEST BREAKPOINT ===== */
@media (max-width: 1099px) {
/* ===== TEXT STYLES ===== */
h1 {
font-size: 28px;
}
h2 {
font-size: 24px;
}
p,
li {
font-size: 16px;
}
/* ===== COMMON CSS GRID LAYOUT ===== */
div.body_grid,
div.app_landing_grid {
padding-left: 3%;
padding-right: 3%;
grid-template-columns: minmax(auto, 540px);
justify-content: center;
padding-top: 0vh;
padding-bottom: 2vh;
}
/* ===== CSS BODY GRID LAYOUT ===== */
div.body_grid {
grid-template-areas:
'hero_image'
'hero_copy'
'server_image'
'server_copy'
'keyserver_company'
'keyserver_copy'
'read_the_docs';
}
div.keyserver_company {
text-align: left;
padding-top: 60px;
}
.keyserver_company > h1 {
font-size: 24px;
}
div.keyserver_copy {
padding-bottom: 0;
}
div.read_the_docs {
padding-top: 20px;
padding-bottom: 0;
}
/* ===== APP LANDING GRID LAYOUT ===== */
div.app_landing_grid {
grid-template-areas:
'app_preview'
'app_copy';
}
div.app_preview {
grid-area: app_preview;
align-self: center;
justify-self: center;
}
div.app_preview img {
max-height: 92vh;
max-width: 96vw;
}
+ .app_copy_wrapper {
+ height: 30vh;
+ }
+
div.app_copy {
grid-area: app_copy;
align-self: center;
justify-self: center;
}
h1.cycling_header {
font-family: 'iA Writer Duo S', monospace;
margin-top: 4vh;
font-size: 22px;
text-align: center;
}
.app_landing_subheading {
margin-bottom: 6vh;
text-align: center;
}
p.app_landing_subheading {
font-size: 18px;
}
div.tile_grid {
row-gap: 4vh;
padding-left: 3%;
padding-right: 3%;
grid-template-columns: minmax(auto, 540px);
justify-content: center;
}
div.app_copy div.tile_grid {
margin: 0;
}
div.tile_grid {
padding-bottom: 4vh;
}
div.tile_title_row > p.tile_title {
font-size: 20px;
}
.active_card {
box-shadow: none;
}
/* ===== LAYOUT HACKS ===== */
.section {
padding-top: 20px;
}
/* ===== LEGAL PAGE STYLING ===== */
div.legal_container {
max-width: 540px;
padding-left: 3%;
padding-right: 3%;
}
}