diff --git a/keyserver/images/loading_logo.svg b/keyserver/images/loading_logo.svg new file mode 100644 --- /dev/null +++ b/keyserver/images/loading_logo.svg @@ -0,0 +1,10 @@ + diff --git a/web/loading.css b/web/loading.css new file mode 100644 --- /dev/null +++ b/web/loading.css @@ -0,0 +1,73 @@ +div.loadingContainer { + display: flex; + align-items: center; + justify-content: center; + height: 100%; + background-color: 'black'; +} +div.loading { + width: 256px; + height: 256px; + background: linear-gradient( + 180deg, + #5b3894 -2.54%, + #331f5c 42.59%, + #22153d 103.12% + ); + box-shadow: 0px 0px 64px rgba(0, 0, 0, 0.25); + border-radius: 48px; + display: flex; + align-items: center; + justify-content: center; + padding: 16px; + box-sizing: border-box; +} +div.innerLoading { + flex: 1; + background-color: #1b0e38; + width: 100%; + height: 100%; + border-radius: 32px; + display: flex; + flex-direction: column; + align-items: center; + justify-content: space-evenly; + padding: 0 24px 0 24px; +} +div.innerLoading > img { + height: 92px; + padding: 24px; +} + +.loader { + border-radius: 8px; + width: 100%; + height: 12px; + display: inline-block; + position: relative; + background: rgba(255, 255, 255, 0.15); + overflow: hidden; +} +.loader::after { + border-radius: 8px; + content: ''; + width: 48px; + height: 12px; + background: #fff; + position: absolute; + top: 0; + left: 0; + box-sizing: border-box; + animation: loaderAnimation 1s linear infinite alternate; +} + +@keyframes loaderAnimation { + 0% { + left: 0; + transform: translateX(-50%); + } + 100% { + left: 100%; + transform: translateX(-50%); + } +} diff --git a/web/loading.react.js b/web/loading.react.js new file mode 100644 --- /dev/null +++ b/web/loading.react.js @@ -0,0 +1,20 @@ +// @flow + +import * as React from 'react'; + +import css from './loading.css'; + +function Loading(): React.Node { + return ( +