From 05654fa1e43343874717ea0fba441b5666ae980f Mon Sep 17 00:00:00 2001 From: ztimson Date: Sat, 24 Aug 2019 21:59:34 -0400 Subject: [PATCH] Dope new landing page --- angular.json | 3 +- package.json | 1 + src/app/animations.ts | 2 +- src/app/app.module.ts | 2 + .../animatedBackground.component.html | 2166 +++++++++++++++++ .../animatedBackground.component.scss | 1164 +++++++++ .../animatedBackground.component.ts | 153 ++ src/app/views/home/home.component.html | 47 +- src/app/views/home/home.component.scss | 15 + src/app/views/home/home.component.ts | 3 +- src/styles.scss | 2 + 11 files changed, 3518 insertions(+), 40 deletions(-) create mode 100644 src/app/components/animatedBackground/animatedBackground.component.html create mode 100644 src/app/components/animatedBackground/animatedBackground.component.scss create mode 100644 src/app/components/animatedBackground/animatedBackground.component.ts create mode 100644 src/app/views/home/home.component.scss diff --git a/angular.json b/angular.json index c638594..c2d9930 100644 --- a/angular.json +++ b/angular.json @@ -37,7 +37,8 @@ "./node_modules/leaflet-polylinedecorator/dist/leaflet.polylineDecorator.js", "./node_modules/leaflet-openweathermap/leaflet-openweathermap.js", "./node_modules/leaflet-rotatedmarker/leaflet.rotatedMarker.js", - "./node_modules/esri-leaflet/dist/esri-leaflet.js" + "./node_modules/esri-leaflet/dist/esri-leaflet.js", + "./node_modules/jquery/dist/jquery.js" ] }, "configurations": { diff --git a/package.json b/package.json index bd88d59..0ececd0 100644 --- a/package.json +++ b/package.json @@ -30,6 +30,7 @@ "esri-leaflet": "^2.3.0", "firebase": "^6.3.0", "hammerjs": "^2.0.8", + "jquery": "^3.4.1", "leaflet": "^1.5.1", "leaflet-openweathermap": "^1.0.0", "leaflet-polylinedecorator": "^1.6.0", diff --git a/src/app/animations.ts b/src/app/animations.ts index 9c59acc..ce0e37c 100644 --- a/src/app/animations.ts +++ b/src/app/animations.ts @@ -26,7 +26,7 @@ export const fadeIn = trigger('fadeIn', [ export const fadeOut = trigger('fadeOut', [ transition(':leave', [ style({ opacity: 1 }), - animate(defaultTiming, style({ opacity: 0 })) + animate(1500, style({ opacity: 0 })) ]) ]); diff --git a/src/app/app.module.ts b/src/app/app.module.ts index 14bd11e..fdf9f05 100644 --- a/src/app/app.module.ts +++ b/src/app/app.module.ts @@ -17,9 +17,11 @@ import {AngularFirestoreModule} from "@angular/fire/firestore"; import {ToolbarComponent} from "./components/toolbar/toolbar.component"; import {PaletteComponent} from "./components/palette/palette.component"; import {MarkerComponent} from "./components/marker/marker.component"; +import {AnimatedBackgroundComponent} from "./components/animatedBackground/animatedBackground.component"; @NgModule({ declarations: [ + AnimatedBackgroundComponent, AppComponent, CalibrateComponent, HomeComponent, diff --git a/src/app/components/animatedBackground/animatedBackground.component.html b/src/app/components/animatedBackground/animatedBackground.component.html new file mode 100644 index 0000000..b6f3573 --- /dev/null +++ b/src/app/components/animatedBackground/animatedBackground.component.html @@ -0,0 +1,2166 @@ +
+ + +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ + > + + + + + + + + + + +
+ + +
+
+
+
+
+
+
+ + +
+ + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+
+ + + + + + + + + + + + +
+
+ + +
+ + +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + +
+ + +
+ + diff --git a/src/app/components/animatedBackground/animatedBackground.component.scss b/src/app/components/animatedBackground/animatedBackground.component.scss new file mode 100644 index 0000000..784db15 --- /dev/null +++ b/src/app/components/animatedBackground/animatedBackground.component.scss @@ -0,0 +1,1164 @@ +@import url(https://fonts.googleapis.com/css?family=Open+Sans:300); + +.cover { + position: absolute; + top: 0; + left: 0; + right: 0; + bottom: 0; + z-index: 600; + background-color: black; +} + +/* Global Styles + ---------------------------------------------- */ +html {font-family: 'Open Sans', sans-serif; background: #0D133A; height:100%; font-size: 100%; text-size-adjust: 100%; -ms-text-size-adjust: 100%; font-smoothing: antialiased;overflow: hidden;position: relative;} +body {height:100%;overflow: hidden; margin: 0; font-size: 1em; line-height: 1.4; position: relative;} +img { border: 0; -ms-interpolation-mode: bicubic; vertical-align: middle; } +svg:not(:root) { overflow: hidden; } +a{color: white;text-decoration: none;} + +/* Animation globals + ---------------------------------------------- */ +#landscape, .land, #bottom, .stags,.stag, .counter:before, #lensFlare, .sunMask{ + animation-duration: 60s; + animation-iteration-count: infinite; + animation-timing-function: linear; +} + +/* Background gradients + ---------------------------------------------- */ +#sky{ + height: 60%; + margin-bottom: -6px; + position: absolute; + top: 0px; + z-index: 2; +} +#sky-rect{height:100%;} + +#reflection, #sunMask{ + height: 40%; + position: absolute; + top: 60%; + z-index: 4; +} +#reflection-rect{height:100%;} +#sunMask{ + background: #0D133A; + height: 40%; + position: absolute; + top: 60%; + width: 100%; +} + +/* Stag + ---------------------------------------------- */ +#stag{ + position: absolute; + bottom: 15.3%; + width: 6.3%; + left: 38%; + z-index: 5; +} +.stag{ + width:100%; + position: absolute; + bottom: 0px; +} +.stags{ + animation-name: stags; + animation-delay:1s; +} +@keyframes stags{ + 0% { fill:#0D141E;} + 4% { fill:#101522;} + 8% { fill:#121726;} + 12% { fill:#141829;} + 16% { fill:#1C1E3C;} + 20% { fill:#22214F;} + 24% { fill:#262262;} + 28% { fill:#1D4065;} + 32% { fill:#125768;} + 36% { fill:#1E4553;} + 40% { fill:#1E404E;} + 44% { fill:#1E3B49;} + 48% { fill:#1D3643;} + 52% { fill:#1C313E;} + 56% { fill:#1C3344;} + 60% { fill:#1C3449;} + 64% { fill:#1B344F;} + 68% { fill:#183454;} + 72% { fill:#242B4A;} + 76% { fill:#2B2241;} + 80% { fill:#24203C;} + 84% { fill:#1D1D37;} + 88% { fill:#151A32;} + 92% { fill:#14192C;} + 96% { fill:#111725;} + 100% { fill:#0D141E;} +} +#stag1{ + animation-name: stag_one; + width: 108%; + left: -20%; + +} +@keyframes stag_one{ + 0% {opacity:1.0;} + 15% {opacity:1.0;} + 20% {opacity:0.0;} + 90% {opacity:0.0;} + 95% {opacity:1.0;} + 100% {opacity:1.0;} +} +#stag2{ + animation-name: stag_two; +} +@keyframes stag_two{ + 0% {opacity:0.0;} + 17% {opacity:0.0;} + 20% {opacity:1.0;} + 40% {opacity:1.0;} + 45% {opacity:0.0;} + 65% {opacity:0.0;} + 70% {opacity:1.0;} + 90% {opacity:1.0;} + 95% {opacity:0.0;} + 100% {opacity:0.0;} +} +#stag3{ + animation-name: stag_three; + width: 144%; + left: -10%; + bottom: -3%; +} +@keyframes stag_three{ + 0% {opacity:0.0;} + 15% {opacity:0.0;} + 20% {opacity:0.0;} + 40% {opacity:0.0;} + 45% {opacity:1.0;} + 65% {opacity:1.0;} + 70% {opacity:0.0;} + 100% {opacity:0.0;} +} + +/* Sun + ---------------------------------------------- */ +.sunMask{ + position:absolute; + width:100%; + height:100%; + -webkit-mask-image: gradient(linear, left 50%, left 60%, from(rgba(0,0,0,1)), to(rgba(0,0,0,0))); + z-index: 4; + mix-blend-mode: screen; + animation-name: sunFocus; +} +@keyframes sunFocus{ + 0% { filter: blur(10px);opacity:0;} + 16% {filter: blur(10px);} + 20% {filter: blur(10px);} + 25% {filter: blur(5px);opacity:0;} + 30% {filter: blur(0px);opacity:1;} + 80% {filter: blur(0px);opacity:1;} + 88% {filter: blur(5px);opacity:0;} + 100% {filter: blur(10px);opacity:0;} +} +.sun{ + width: 100%; + padding-bottom: 100%; + position:absolute; + right: -51%; + top: -330%; +} +.sun div{ + background: transparent url(https://s3-us-west-2.amazonaws.com/s.cdpn.io/21555/sun.svg); + position: absolute; + top: 0; bottom: 0; left: 0; right: 0; +} +.suncrane{ + animation: suncrane 60s linear infinite; + position:absolute; + width: 21%; + height: 4%; + background: transparent; + margin: auto; + top: 57%; + left: 0; + right: 0; +} +@keyframes suncrane{ + 0% {transform:rotate(90deg);} + 100% {transform:rotate(-270deg);} +} +.sun:before{ + display:block; + content:' '; + animation: glare 60s linear infinite; + position:absolute; + width: 120%; + height: 120%; + background: url(https://s3-us-west-2.amazonaws.com/s.cdpn.io/21555/glare.svg) no-repeat scroll center; + top: -10%; + left: -10%; + background-size: 100%; +} + +@keyframes glare{ + from {transform:rotate(90deg);opacity:0.0;} + 30%{opacity:0.0;} + 36%{opacity:1.0;} + 68%{opacity:1.0;} + 74%{opacity:0.0;} + to {transform:rotate(450deg);opacity:0.0;} +} + + +.sun:after{display: block; content:' '; position:absolute;background: white;width: 10%;height: 10%;top: 45%;border-radius: 100%;margin: auto;left: 0;right: 0;box-shadow: 0px 0px 80px 30px white;} + +/* Clouds + ---------------------------------------------- */ +.clouds{ + position: absolute; + width: 100%; + z-index: 4; mix-blend-mode: screen; + height: 100%; +} +.clouds svg{ + width: 60%; + position: absolute; + top: 51%; + filter: blur(2px); + opacity: 0.4; + left: -60%; + animation-duration: 60s; + animation-iteration-count: infinite; + animation-timing-function: linear; + animation-name: clouds; +} +@keyframes clouds{ + 0% {transform: translate3d(110%, 0px, 0px);opacity: 0.0;} + 19%{opacity: 0.0;filter: blur(5px);} + 25%{opacity: 0.3;filter: blur(2px);} + 50%{opacity: 0.6;} + 75%{opacity: 0.2;} + 90%{opacity: 0.0;} + 100% {transform: translate3d(150%, 0px, 0px);opacity: 0.0} +} + +/* Lens flare + ---------------------------------------------- */ +.lighting{ + width: 100%; + height: 100%; + position: absolute; + z-index: 8; + opacity: 0.3; + -webkit-mask-image: gradient(linear, left 50%, left 60%, from(rgba(0,0,0,1)), to(rgba(0,0,0,1))); + mix-blend-mode: screen; + pointer-events: none; + filter: blur(3px); +} +.lighting .suncrane{ + width: 100%; +} +#lensFlare{ + transform: rotate(16deg) translate3d(9%, -47%, 0px) scale(1); + animation-name: flaring; +} + +@keyframes flaring{ + 0% { transform: rotate(16deg) translate3d(9%, -47%, 0px) scale(1); opacity: 0.0;} + 28% { transform: rotate(16deg) translate3d(9%, -47%, 0px) scale(1); opacity: 0.0; } + 35% { transform: rotate(16deg) translate3d(9%, -47%, 0px) scale(1); opacity: 1.0; } + 70% { transform: rotate(16deg) translate3d(9%, -47%, 0px) scale(1); opacity: 1.0; } + 78% { transform: rotate(16deg) translate3d(9%, -47%, 0px) scale(1); opacity: 0.0; } + 100% { transform: rotate(16deg) translate3d(9%, -47%, 0px) scale(1); opacity: 0.0; } +} + +/* Sun on lake twinkles + ---------------------------------------------- */ +.twinkleWrap{ + position: absolute; + z-index: 4; + width:100%; + height:100%; + top:0; + opacity: 0.55; +} + +.twinkles{ + width: 2.3%; + position: absolute; + right: 49.2%; + top: 72.5%; + animation: twinkles 60s linear infinite; +} +@keyframes twinkles{ + 0% {transform: translate(450%, 0%);opacity:0.0;} + 32%{opacity:0.0;} + 34%{opacity:1.0;} + 36.5% {transform: translate(450%, 0%);} + 54% {transform: translate(0%, 0%);} + 72% {transform: translate(-450%, 0%);opacity:1.0;} + 78%{opacity:0.0;} + 100% {transform: translate(-450%, 0%);opacity:0.0;} +} +.twinkles:before{ + content:' '; + display: none; + position:absolute; + height: 600px; + width:3px; + background:red; + top: -600px; + left: 50%; +} +.twinkles svg{ + width: 100%; + position: absolute; + top: 0; +} +#twinkle1{ + animation: twinkle1 2s linear infinite; +} +@keyframes twinkle1{ + 0% {opacity:1.0;} + 33.33% {opacity:0.0;} + 66.66% {opacity:0.0;} + 99.99% {opacity:1.0;} + 100% {opacity:1.0;} +} +#twinkle2{ animation: twinkle2 2s linear infinite; +} +@keyframes twinkle2{ + 0% {opacity:0.0;} + 33.33% {opacity:1.0;} + 66.66% {opacity:0.0;} + 99.99% {opacity:0.0;} + 100% {opacity:0.0;} +} +#twinkle3{ animation: twinkle3 2s linear infinite; +} +@keyframes twinkle3{ + 0% {opacity:0.0;} + 33.33% {opacity:0.0;} + 66.66% {opacity:1.0;} + 99.99% {opacity:0.0;} + 100% {opacity:0.0;} +} + +/* Vignette + ---------------------------------------------- */ +.vignette{ + background: radial-gradient(transparent 60%, rgb(1, 14, 39) 130%); + background-size: cover; + height: 100%; + z-index: 9; + position: absolute; + width: 100%; + pointer-events: none; +} + +/* Stars + ---------------------------------------------- */ +.stars{ + height: 100%; + z-index: 2; + position: absolute; + width: 100%; + + overflow: hidden; +} +.starWrap{ + height: 60%; + width: 100%; + position:relative; +} +.starProject{ + overflow: hidden; +} +.starReflect{ + overflow: hidden; + height: 40%; + opacity: 0.9; + top: 1%; +} +#stars{ + position: absolute; + width: 120%; + border-radius: 100%; + margin: auto; + left: -10%; + right: 0; + animation: stars 120s linear infinite; + transform: rotate(0deg); + top: -35%; +} + +@keyframes stars{ + 100% {transform: rotate(-360deg);} +} + +#starReflection{ + position: absolute; + width: 120%; + border-radius: 100%; + margin: auto; + left: -10%; + right: 0; + animation: starsReflect 120s linear infinite; + transform: rotate(0deg); + top:initial; + bottom: -102%; +} +@keyframes starsReflect{ + 100% {transform: rotate(360deg);} +} + +/* Sprites + ----------------------------------------------- */ +.spriteWrap{ + height: 100%; + width: 100%; + position: absolute; + z-index: 13; + animation: sprites 60s linear infinite; + pointer-events: none; +} +@keyframes sprites{ + 0% {opacity:0.8;} + 20% {opacity:0.8;} + 25%{opacity:0.0;} + 73% {opacity:0.0;} + 90% {opacity:0.8;} + 100% {opacity:0.8;} +} + +#sprites{ + height: 100%; + width: 100%; +} + +/* Controls + ---------------------------------------------- */ +.controls{ + position:absolute; + top:0px; + width: 20%; + z-index: 10; + background: rgba(0, 0, 0, 0.16); + height: 100%; + width: 380px; + padding: 23px; + transform: translate3d(-250px, 0px, 0px); + -moz-transform: translate3d(-250px, 0px, 0px); + -o-transform: translate3d(-250px, 0px, 0px); + -ms-transform: translate3d(-250px, 0px, 0px); + transform: translate3d(-250px, 0px, 0px); + opacity: 0; +} +.controls, .controls *{ + box-sizing: border-box; + -moz-box-sizing: border-box; + box-sizing: border-box; + transition: all 0.25s ease; -moz-transition: all 0.25s ease; -o-transition: all 0.25s ease; transition: all 0.25s ease; +} +.controls:hover{ + transform: translate3d(0px, 0px, 0px); + -moz-transform: translate3d(0px, 0px, 0px); + -o-transform: translate3d(0px, 0px, 0px); + -ms-transform: translate3d(0px, 0px, 0px); + transform: translate3d(0px, 0px, 0px); + opacity: 1.0; +} +.controls ul{ + margin: 0px; + padding: 0px; + list-style: none; +} +.controls ul li{ + border-bottom: 1px solid rgba(255, 255, 255, 0.09); + color: white; +} +.controls ul li span.title{ + display: inline-block; + padding: 10px 0px; +} +.controls ul li a{ + display: block; + padding: 10px 0px; +} +.controls ul li a:hover{ + padding-left: 10px; +} +.controls ul li a.active{} +.controls ul li a.active:after{content: 'on';float: right;} +.controls audio{ + width: 100%; + opacity: 0.2; + position: relative; + width: 80%; + display: inline-block; + top: 8px; + float: right; +} +.controls audio:hover{opacity:1.0;} +.noise{ + width:100%; + height:100%; + background:transparent; + opacity:0.03; + z-index: 9; + position: absolute; + top: 0; + pointer-events: none; +} +.noise.active{ + background: transparent url(https://s3-us-west-2.amazonaws.com/s.cdpn.io/21555/static2.gif); + opacity: 0.015; + background-size: 620px; +} +.counter{ + color: rgba(255, 255, 255, 0.12); + position: absolute; + width: calc(100% - 46px); + bottom: 21px; + text-align:justify; + font-size: 0px; +} +.counter:before{ + content: ':'; + display:inline-block; + position: absolute; + animation-name: timer; + background: rgba(255, 255, 255, 0.03); + text-align: right; + left:0px; + bottom: 0px; + color: transparent; + border-right: 1px solid rgba(255, 255, 255, 0.13); + line-height: 34px; +} +@keyframes timer{ + 0% { width:0%; } + 100% { width:100%; } +} + +/* Landscape + ---------------------------------------------- */ +#landscape{ + width: 100.02%; + position: absolute; + bottom: 11%; + z-index: 5; + animation-name: focus; +} +@keyframes focus{ + 0% { filter: blur(5px);} + 16% {filter: blur(2px);} + 20% {filter: blur(0px);} + 80% {filter: blur(0px);} + 88% {filter: blur(2px);} + 100% {filter: blur(5px);} +} + +#bottom{ + animation-name: bottomFill; + height: 100%; + position: absolute; + top: 88%; + width: 100%; + z-index: 5; + animation-delay:1s; +} +@keyframes bottomFill{ + 0% { background:#0D141E; } + 4% { background:#101522; } + 8% { background:#121726; } + 12% { background:#141829; } + 16% { background:#1C1E3C; } + 20% { background:#22214F; } + 24% { background:#262262; } + 28% { background:#1D4065; } + 32% { background:#125768; } + 36% { background:#1E4553; } + 40% { background:#1E404E; } + 44% { background:#1E3B49; } + 48% { background:#1D3643; } + 52% { background:#1C313E; } + 56% { background:#1C3344; } + 60% { background:#1C3449; } + 64% { background:#1B344F; } + 68% { background:#183454; } + 72% { background:#242B4A; } + 76% { background:#2B2241; } + 80% { background:#24203C; } + 84% { background:#1D1D37; } + 88% { background:#151A32; } + 92% { background:#14192C; } + 96% { background:#111725; } + 100% { background:#0D141E; } +} + +/* Land - layer 1 animation */ +#landscape .layer1 { + fill:#F1F2F2; + animation-name: layer1; + animation-delay:1s; +} +@keyframes layer1{ + 0% { fill:#244154; } + 4% { fill:#344358; } + 8% { fill:#42465D; } + 12% { fill:#4F4761; } + 16% { fill:#7E5773; } + 20% { fill:#A3517F; } + 24% { fill:#F3829F; } + 28% { fill:#D4B2AF; } + 32% { fill:#AEDABB; } + 36% { fill:#A1D6D6; } + 40% { fill:#9ED5DD; } + 44% { fill:#9AD4E4; } + 48% { fill:#97D3EA; } + 52% { fill:#92D3F4; } + 56% { fill:#95C8DA; } + 60% { fill:#96BDC5; } + 64% { fill:#96B3B2; } + 68% { fill:#96AA9E; } + 72% { fill:#AF866A; } + 76% { fill:#C0633B; } + 80% { fill:#9D5E51; } + 84% { fill:#7B5960; } + 88% { fill:#59546D; } + 92% { fill:#484E64; } + 96% { fill:#37475C; } + 100% { fill:#244154; } +} + +/* Land - layer 2 animation */ +#landscape .layer2 { + fill:#E6E7E8; + animation-name: layer2; + animation-delay:1s; +} +@keyframes layer2{ + 0% { fill:#0F2B46; } + 4% { fill:#1C2D4A; } + 8% { fill:#272E4E; } + 12% { fill:#302F52; } + 16% { fill:#663966; } + 20% { fill:#913776; } + 24% { fill:#D94A93; } + 28% { fill:#BB94AD; } + 32% { fill:#76CCCE; } + 36% { fill:#6BAEC9; } + 40% { fill:#62A7CA; } + 44% { fill:#59A0CB; } + 48% { fill:#5099CC; } + 52% { fill:#4692CF; } + 56% { fill:#4D8FBD; } + 60% { fill:#518CAF; } + 64% { fill:#548AA1; } + 68% { fill:#578793; } + 72% { fill:#7E6768; } + 76% { fill:#8F4244; } + 80% { fill:#74404D; } + 84% { fill:#593D55; } + 88% { fill:#393B5D; } + 92% { fill:#2C3655; } + 96% { fill:#1F304E; } + 100% { fill:#0F2B46; } +} + +/* Land - layer 3 animation */ +#landscape .layer3 { + fill:#D1D3D4; + animation-name: layer3; + animation-delay:1s; +} +@keyframes layer3{ + 0% { fill:#0F2944; } + 4% { fill:#1B2B47; } + 8% { fill:#252C4B; } + 12% { fill:#2E2D4E; } + 16% { fill:#5F3663; } + 20% { fill:#863572; } + 24% { fill:#C8458D; } + 28% { fill:#A48BAB; } + 32% { fill:#68BFC7; } + 36% { fill:#54A4C8; } + 40% { fill:#4F9EC8; } + 44% { fill:#4B98C7; } + 48% { fill:#4691C7; } + 52% { fill:#408BC8; } + 56% { fill:#4688B7; } + 60% { fill:#4984A9; } + 64% { fill:#4C819C; } + 68% { fill:#4E7E8F; } + 72% { fill:#776167; } + 76% { fill:#893E45; } + 80% { fill:#6F3C4C; } + 84% { fill:#543A52; } + 88% { fill:#353758; } + 92% { fill:#2A3351; } + 96% { fill:#1E2E4A; } + 100% { fill:#0F2944; } +} + +/* Land - layer 4 animation */ +#landscape .layer4 { + fill:#BCBEC0; + animation-name: layer4; + animation-delay:1s; +} +@keyframes layer4{ + 0% { fill:#0F2841; } + 4% { fill:#1A2945; } + 8% { fill:#232A48; } + 12% { fill:#2B2A4B; } + 16% { fill:#59335F; } + 20% { fill:#7C336D; } + 24% { fill:#B84089; } + 28% { fill:#9683A5; } + 32% { fill:#57B5C1; } + 36% { fill:#4798BD; } + 40% { fill:#4391BC; } + 44% { fill:#408BBB; } + 48% { fill:#3D85BA; } + 52% { fill:#397FBA; } + 56% { fill:#3E7DAC; } + 60% { fill:#407AA1; } + 64% { fill:#427896; } + 68% { fill:#44768B; } + 72% { fill:#705B66; } + 76% { fill:#823B46; } + 80% { fill:#69394B; } + 84% { fill:#503650; } + 88% { fill:#323454; } + 92% { fill:#27304D; } + 96% { fill:#1C2C47; } + 100% { fill:#0F2841; } +} + +/* Land - layer 5 animation */ +#landscape .layer5 { + fill:#A7A9AC; + animation-name: layer5; + animation-delay:1s; +} +@keyframes layer5{ + 0% { fill:#0E263F; } + 4% { fill:#192742; } + 8% { fill:#212745; } + 12% { fill:#292848; } + 16% { fill:#51305B; } + 20% { fill:#6E3068; } + 24% { fill:#A23B82; } + 28% { fill:#84799F; } + 32% { fill:#44AABC; } + 36% { fill:#3A8DB3; } + 40% { fill:#3887B1; } + 44% { fill:#3680AF; } + 48% { fill:#347AAD; } + 52% { fill:#3273AB; } + 56% { fill:#3672A1; } + 60% { fill:#387198; } + 64% { fill:#396F90; } + 68% { fill:#3A6E87; } + 72% { fill:#695565; } + 76% { fill:#7C3747; } + 80% { fill:#64354A; } + 84% { fill:#4B334D; } + 88% { fill:#2E314F; } + 92% { fill:#252D4A; } + 96% { fill:#1B2A44; } + 100% { fill:#0E263F; } +} + +/* Land - layer 6 animation */ +#landscape .layer6 { + fill:#939598; + animation-name: layer6; + animation-delay:1s; +} +@keyframes layer6{ + 0% { fill:#0E243C; } + 4% { fill:#18253F; } + 8% { fill:#202542; } + 12% { fill:#262544; } + 16% { fill:#482C56; } + 20% { fill:#612D63; } + 24% { fill:#8D357C; } + 28% { fill:#6F719B; } + 32% { fill:#00A1BC; } + 36% { fill:#2583A8; } + 40% { fill:#287CA3; } + 44% { fill:#2A759F; } + 48% { fill:#2D6F9A; } + 52% { fill:#2E6895; } + 56% { fill:#2F6891; } + 60% { fill:#30678D; } + 64% { fill:#306788; } + 68% { fill:#306683; } + 72% { fill:#625064; } + 76% { fill:#753347; } + 80% { fill:#5E3249; } + 84% { fill:#47304A; } + 88% { fill:#2B2E4B; } + 92% { fill:#222A46; } + 96% { fill:#192741; } + 100% { fill:#0E243C; } +} + +/* Land - layer 7 animation */ +#landscape .layer7 { + fill:#808285; + animation-name: layer7; + animation-delay:1s; +} +@keyframes layer7{ + 0% { fill:#102237; } + 4% { fill:#18223A; } + 8% { fill:#1E233D; } + 12% { fill:#242340; } + 16% { fill:#402952; } + 20% { fill:#542A5E; } + 24% { fill:#793177; } + 28% { fill:#5F668F; } + 32% { fill:#0A8FA7; } + 36% { fill:#237595; } + 40% { fill:#256F90; } + 44% { fill:#27698C; } + 48% { fill:#286387; } + 52% { fill:#285D82; } + 56% { fill:#285E82; } + 60% { fill:#285F81; } + 64% { fill:#275F81; } + 68% { fill:#255F7F; } + 72% { fill:#574A63; } + 76% { fill:#683148; } + 80% { fill:#542F48; } + 84% { fill:#3F2D47; } + 88% { fill:#242742; } + 92% { fill:#202841; } + 96% { fill:#19253C; } + 100% { fill:#102237; } +} + +/* Land - layer 8 animation */ +#landscape .layer8 { + fill:#6D6E71; + animation-name: layer8; + animation-delay:1s; +} +@keyframes layer8{ + 0% { fill:#111F31; } + 4% { fill:#172034; } + 8% { fill:#1C2037; } + 12% { fill:#20213B; } + 16% { fill:#37274C; } + 20% { fill:#472759; } + 24% { fill:#662C71; } + 28% { fill:#4F5C83; } + 32% { fill:#118095; } + 36% { fill:#206983; } + 40% { fill:#21637E; } + 44% { fill:#225D7A; } + 48% { fill:#225775; } + 52% { fill:#225270; } + 56% { fill:#235372; } + 60% { fill:#235574; } + 64% { fill:#235675; } + 68% { fill:#235676; } + 72% { fill:#4C445F; } + 76% { fill:#5B2F49; } + 80% { fill:#4A2C47; } + 84% { fill:#382A44; } + 88% { fill:#242742; } + 92% { fill:#1E253D; } + 96% { fill:#182338; } + 100% { fill:#111F31; } +} + +/* Land - layer 9 animation */ +#landscape .layer9 { + fill:#58595B; + animation-name: layer9; + animation-delay:1s; +} +@keyframes layer9{ + 0% { fill:#111C2B; } + 4% { fill:#151D2E; } + 8% { fill:#191E32; } + 12% { fill:#1D1E35; } + 16% { fill:#2F2447; } + 20% { fill:#3A2454; } + 24% { fill:#52296C; } + 28% { fill:#405279; } + 32% { fill:#137185; } + 36% { fill:#1C5C72; } + 40% { fill:#1C576E; } + 44% { fill:#1C5269; } + 48% { fill:#1B4C64; } + 52% { fill:#1A475F; } + 56% { fill:#1C4A63; } + 60% { fill:#1E4B67; } + 64% { fill:#1F4D6A; } + 68% { fill:#204E6D; } + 72% { fill:#413E5A; } + 76% { fill:#4E2D49; } + 80% { fill:#402A45; } + 84% { fill:#312742; } + 88% { fill:#20243E; } + 92% { fill:#1B2238; } + 96% { fill:#171F32; } + 100% { fill:#111C2B; } +} + +/* Land - layer 10 animation */ +#landscape .layer10 { + fill:#414042; + animation-name: layer10; + animation-delay:1s; +} +@keyframes layer10{ + 0% { fill:#101825; } + 4% { fill:#131928; } + 8% { fill:#161A2C; } + 12% { fill:#181B2F; } + 16% { fill:#262141; } + 20% { fill:#2C214F; } + 24% { fill:#3D2567; } + 28% { fill:#30486F; } + 32% { fill:#136476; } + 36% { fill:#165163; } + 40% { fill:#154C5E; } + 44% { fill:#144759; } + 48% { fill:#134254; } + 52% { fill:#113D4F; } + 56% { fill:#154055; } + 60% { fill:#19425A; } + 64% { fill:#1B445F; } + 68% { fill:#1E4564; } + 72% { fill:#363856; } + 76% { fill:#412A49; } + 80% { fill:#352744; } + 84% { fill:#29243F; } + 88% { fill:#1C203A; } + 92% { fill:#191F33; } + 96% { fill:#151C2C; } + 100% { fill:#101825; } +} + +/* Land - layer 11 animation */ +#landscape .layer11 { + fill:#232323; + animation-name: layer11; + animation-delay:1s; +} +@keyframes layer11{ + 0% { fill:#0D141E; transform: skew(0deg, 0deg) translate3d(0px, 0px, 0px);} + 4% { fill:#101522; transform: skew(1deg, 0deg) translate3d(-0.5%, 0px, 0px);} + 8% { fill:#121726; transform: skew(0deg, 0deg) translate3d(0px, 0px, 0px);} + 12% { fill:#141829; transform: skew(-1deg, 0deg) translate3d(0.5%, 0px, 0px);} + 16% { fill:#1C1E3C; transform: skew(0deg, 0deg) translate3d(0px, 0px, 0px);} + 20% { fill:#22214F; transform: skew(1deg, 0deg) translate3d(-0.5%, 0px, 0px);} + 24% { fill:#262262; transform: skew(0deg, 0deg) translate3d(0px, 0px, 0px);} + 28% { fill:#1D4065; transform: skew(-1deg, 0deg) translate3d(0.5%, 0px, 0px);} + 32% { fill:#125768; transform: skew(0deg, 0deg) translate3d(0px, 0px, 0px);} + 36% { fill:#1E4553; transform: skew(1deg, 0deg) translate3d(-0.5%, 0px, 0px);} + 40% { fill:#1E404E; transform: skew(0deg, 0deg) translate3d(0px, 0px, 0px);} + 44% { fill:#1E3B49; transform: skew(-1deg, 0deg) translate3d(0.5%, 0px, 0px);} + 48% { fill:#1D3643; transform: skew(0deg, 0deg) translate3d(0px, 0px, 0px);} + 52% { fill:#1C313E; transform: skew(1deg, 0deg) translate3d(-0.5%, 0px, 0px);} + 56% { fill:#1C3344; transform: skew(0deg, 0deg) translate3d(0px, 0px, 0px);} + 60% { fill:#1C3449; transform: skew(-1deg, 0deg) translate3d(0.5%, 0px, 0px);} + 64% { fill:#1B344F; transform: skew(0deg, 0deg) translate3d(0px, 0px, 0px);} + 68% { fill:#183454; transform: skew(1deg, 0deg) translate3d(-0.5%, 0px, 0px);} + 72% { fill:#242B4A; transform: skew(0deg, 0deg) translate3d(0px, 0px, 0px);} + 76% { fill:#2B2241; transform: skew(-1deg, 0deg) translate3d(0.5%, 0px, 0px);} + 80% { fill:#24203C; transform: skew(0deg, 0deg) translate3d(0px, 0px, 0px);} + 84% { fill:#1D1D37; } + 88% { fill:#151A32; } + 92% { fill:#14192C; } + 96% { fill:#111725; } + 100% { fill:#0D141E; } +} + +/* Aspect ratio media queries + ---------------------------------------------- */ + +/* 3/2 and 6/1 -- out of range*/ +@media screen and (min-aspect-ratio: 3/1) and (max-aspect-ratio: 6/1){ + body{background: rgb(31, 60, 80);} + body:before{content:'Aspect ratio out of range - too wide';color: white;text-align: center;width: 100%;height: 100%;display: block;position: absolute;top: 50%;} + #sky, #reflection, #sunMask, #landscape, #bottom, #stag, .controls, .stars, .sunMask, .clouds, .lighting, .vignette, .twinkleWrap,.spriteWrap{display: none;} +} + +/* 14/5 and 3/1 */ +@media screen and (min-aspect-ratio: 14/5) and (max-aspect-ratio: 7/2){ + .twinkles{} + #reflection, #sunMask{height: 42%;} + #landscape{bottom: -3%;} + #bottom{top: 101%;} + #stag{bottom: 3%;} + .sun{top: -570%;} + .twinkles{top: 77%;} +} +/* 5/2 and 14/5 */ +@media screen and (min-aspect-ratio: 5/2) and (max-aspect-ratio: 14/5){ + .twinkles{top: 75%;} + #reflection, #sunMask{} + #landscape{bottom: 1%;} + #bottom{top: 98%;} + #stag{bottom: 7%;} + .sun{top: -532%;} +} +/* 9/4 and 5/2 */ +@media screen and (min-aspect-ratio: 9/4) and (max-aspect-ratio: 5/2){ + .twinkles{top: 75%;} + #reflection, #sunMask{height: 40%;} + #landscape{bottom: 5%;} + #bottom{top: 94%;} + #stag{bottom: 10%;} + .sun{top: -452%;} +} +/* 11/5 and 9/4 */ +@media screen and (min-aspect-ratio: 11/5) and (max-aspect-ratio: 9/4){ + .twinkles{} + #reflection, #sunMask{} + #landscape{bottom: 6%;} + #bottom{top: 93%;} + #stag{ + bottom: 11%;} + .sun{top: -410%;} +} +/* 13/6 and 11/5 */ +@media screen and (min-aspect-ratio: 13/6) and (max-aspect-ratio: 11/5){ + .twinkles{} + #reflection, #sunMask{height: 37%;} + #landscape{bottom: 6%;} + #bottom{top: 93%;} + #stag{bottom: 11%;} + .sun{} +} + +/* 15/7 and 13/6 */ +@media screen and (min-aspect-ratio: 15/7) and (max-aspect-ratio: 13/6){ + .twinkles{} + #reflection, #sunMask{height: 31%;} + #landscape{bottom: 7%;} + #bottom{top: 92%;} + #stag{bottom: 12%;} + .sun{} +} + +/* 2/1 and 15/7 */ +@media screen and (min-aspect-ratio: 2/1) and (max-aspect-ratio: 15/7){ + .twinkles{} + #reflection, #sunMask{height: 31%;} + #landscape{bottom: 8%;} + #bottom{top: 91%;} + #stag{bottom: 12%;} + .sun{top: -370%;} +} + +@media screen and (min-aspect-ratio: 15/8) and (max-aspect-ratio: 2/1){ + .twinkles{} + #reflection, #sunMask{height: 30%;} + #landscape{} + #bottom{} + #stag{bottom: 15%;} + .sun{} +} + +/* 7/4 and 15/8 */ +@media screen and (min-aspect-ratio: 7/4) and (max-aspect-ratio: 15/8){ + .twinkles{top: 71%;} + #reflection, #sunMask{height: 28%;} + #landscape{bottom: 13%;} + #bottom{top: 86%;} + #stag{bottom: 17%;} + .sun{top: -300%;} +} +/* 11/7 and 7/4 */ +@media screen and (min-aspect-ratio: 11/7) and (max-aspect-ratio: 7/4){ + .twinkles{top: 69%;} + #reflection, #sunMask{height: 24%;} + #landscape{bottom: 16%;} + #bottom{top: 83%;} + #stag{bottom: 20%;} + .sun{top: -270%;} +} +/* 13/9 and 11/7 */ +@media screen and (min-aspect-ratio: 13/9) and (max-aspect-ratio: 11/7){ + .twinkles{top: 68%;} + #reflection, #sunMask{height: 22%;} + #landscape{bottom: 18%;} + #bottom{top: 81%;} + #stag{bottom: 21.6%;} + .sun{top: -240%;} +} +/* 4/3 and 13/9 */ +@media screen and (min-aspect-ratio: 4/3) and (max-aspect-ratio: 13/9){ + .twinkles{top: 66%;} + #reflection, #sunMask{height: 19%;} + #landscape{bottom: 22%;} + #bottom{top: 77%;} + #stag{bottom: 25%;} + .sun{top: -230%;} +} +/* 8/7 and 4/3 */ +@media screen and (min-aspect-ratio: 8/7) and (max-aspect-ratio: 4/3){ + .twinkles{top: 65%;} + #reflection, #sunMask{height: 18%;} + #landscape{bottom: 23%;} + #bottom{top: 76%;} + #stag{bottom: 25.3%;} + .sun{top: -180%;} +} +/* 14/15 and 8/7 */ +@media screen and (min-aspect-ratio: 14/15) and (max-aspect-ratio: 8/7){ + .twinkles{top: 63%;width: 3%;} + #reflection, #sunMask{height: 17%;} + #landscape{bottom: 26%;} + #bottom{top: 73.8%;} + #stag{bottom: 28.3%;} + .sun{top: -140%;} +} +/* 5/6 and 14/15 */ +@media screen and (min-aspect-ratio: 5/6) and (max-aspect-ratio: 14/15){ + .twinkles{top: 63%; width: 3%;} + #reflection, #sunMask{height: 13%;} + #landscape{bottom: 28%;} + #bottom{top: 71.5%;} + #stag{bottom: 30%;} + .sun{top: -110%;} +} +/* 7/10 and 5/6 */ +@media screen and (min-aspect-ratio: 7/10) and (max-aspect-ratio: 5/6){ + .twinkles{top: 62%; width: 3%;} + #reflection, #sunMask{height: 11%;} + #landscape{bottom: 30%;} + #bottom{top: 69.6%;} + #stag{bottom: 31.8%;} + .sun{top: -70%;} +} +/* 5/9 and 7/10 */ +@media screen and (min-aspect-ratio: 5/9) and (max-aspect-ratio: 7/10){ + .twinkles{top: 62%; width: 3%;} + #reflection, #sunMask{height: 8%;} + #landscape{bottom: 32%;} + #bottom{top: 67.5%;} + #stag{bottom: 33.5%;} + .sun{top: -55%;} +} + +/* 1/10 and 5/9 --- out of range*/ +@media screen and (min-aspect-ratio: 1/10) and (max-aspect-ratio: 5/9){ + body{background: rgb(31, 60, 80);} + body:before{content:'Aspect ratio out of range - too narrow';color: white;text-align: center;width: 100%;height: 100%;display: block;position: absolute;top: 50%;} + #sky, #reflection, #sunMask, #landscape, #bottom, #stag, .controls, .stars, .sunMask, .clouds, .lighting, .vignette, .twinkleWrap,.spriteWrap{display: none;} +} diff --git a/src/app/components/animatedBackground/animatedBackground.component.ts b/src/app/components/animatedBackground/animatedBackground.component.ts new file mode 100644 index 0000000..f5c9dad --- /dev/null +++ b/src/app/components/animatedBackground/animatedBackground.component.ts @@ -0,0 +1,153 @@ +import {AfterViewChecked, Component} from "@angular/core"; +import {fadeOut} from "../../animations"; + +@Component({ + selector: 'animated-background', + templateUrl: 'animatedBackground.component.html', + styleUrls: ['animatedBackground.component.scss'], + animations: [fadeOut] +}) +export class AnimatedBackgroundComponent implements AfterViewChecked { + private once = true; + + splash = true; + + constructor() { + setTimeout(() => this.splash = false, 1000); + } + + ngAfterViewChecked() { + const $ = window['$']; + if (this.once && !!$) { + this.once = false; + (function () { + var WIDTH, HEIGHT, canvas, con, g; + var pxs = []; + var rint = 50; + + $.fn.sprites = function () { + this.append($('')); + setup(this); + }; + + function setup(container) { + let windowSize = function () { + WIDTH = container.innerWidth(); + HEIGHT = container.innerHeight(); + canvas = container.find('#sprites'); + canvas.attr('width', WIDTH).attr('height', HEIGHT); + }; + + windowSize(); + + $(window).resize(function () { + windowSize(); + }); + + con = canvas[0].getContext('2d'); + + for (let i = 0; i < 100; i++) { + pxs[i] = new Circle(); + pxs[i].reset(); + } + + requestAnimationFrame(draw); + } + + function draw() { + con.clearRect(0, 0, WIDTH, HEIGHT); + con.globalCompositeOperation = "lighter"; + + for (var i = 0; i < pxs.length; i++) { + pxs[i].fade(); + pxs[i].move(); + pxs[i].draw(); + } + + requestAnimationFrame(draw); + } + + function Circle() { + this.s = { + ttl: 15000, + xmax: 5, + ymax: 2, + rmax: 7, + rt: 1, + xdef: 960, + ydef: 540, + xdrift: 4, + ydrift: 4, + random: true, + blink: true + }; + + this.reset = function () { + this.x = (this.s.random ? WIDTH * Math.random() : this.s.xdef); + this.y = (this.s.random ? HEIGHT * Math.random() : this.s.ydef); + this.r = ((this.s.rmax - 1) * Math.random()) + 1; + + this.dx = (Math.random() * this.s.xmax) * (Math.random() < 0.5 ? -1 : 1); + this.dy = (Math.random() * this.s.ymax) * (Math.random() < 0.5 ? -1 : 1); + + this.hl = (this.s.ttl / rint) * (this.r / this.s.rmax); + this.rt = Math.random() * this.hl; + + this.stop = Math.random() * 0.2 + 0.4; + + this.s.rt = Math.random() + 1; + this.s.xdrift *= Math.random() * (Math.random() < 0.5 ? -1 : 1); + this.s.ydrift *= Math.random() * (Math.random() < 0.5 ? -1 : 1); + }; + + this.fade = function () { + this.rt += this.s.rt; + }; + + this.draw = function () { + let newo, cr; + + if (this.s.blink && (this.rt <= 0 || this.rt >= this.hl)) { + this.s.rt = this.s.rt * -1; + } else if (this.rt >= this.hl) { + this.reset(); + } + + newo = 1 - (this.rt / this.hl); + + con.beginPath(); + con.arc(this.x, this.y, this.r, 0, Math.PI * 2, true); + con.closePath(); + + cr = this.r * newo; + + g = con.createRadialGradient(this.x, this.y, 0, this.x, this.y, (cr <= 0 ? 1 : cr)); + g.addColorStop(0.0, 'rgba(193,254,254,' + newo + ')'); + g.addColorStop(this.stop, 'rgba(193,254,254,' + (newo * 0.2) + ')'); + g.addColorStop(1.0, 'rgba(193,254,254,0)'); + + con.fillStyle = g; + con.fill(); + }; + + this.move = function () { + this.x += (this.rt / this.hl) * this.dx; + this.y += (this.rt / this.hl) * this.dy; + if (this.x > WIDTH || this.x < 0) this.dx *= -1; + if (this.y > HEIGHT || this.y < 0) this.dy *= -1; + }; + + this.getX = function () { + return this.x; + }; + + this.getY = function () { + return this.y; + }; + }; + })(); + + $('.spriteWrap').sprites(); + } + } +} diff --git a/src/app/views/home/home.component.html b/src/app/views/home/home.component.html index 1db21b7..8650df7 100644 --- a/src/app/views/home/home.component.html +++ b/src/app/views/home/home.component.html @@ -1,40 +1,13 @@ -
-
- -
-
-

Collaborative map making... {{typedText | async}}

-
-
-
-
- - - -
-
- -
-
- - - -
-
- -
-
-
+ +
+ +
+
+
+
+
diff --git a/src/app/views/home/home.component.scss b/src/app/views/home/home.component.scss new file mode 100644 index 0000000..df00256 --- /dev/null +++ b/src/app/views/home/home.component.scss @@ -0,0 +1,15 @@ +.badge { + position: absolute; + top: 15%; + left: 50%; + z-index: 500; + transform: translateX(-50%); +} + +.controls { + position: absolute; + bottom: 10%; + left: 50%; + z-index: 500; + transform: translateX(-50%); +} diff --git a/src/app/views/home/home.component.ts b/src/app/views/home/home.component.ts index ccb7ab2..4f7c978 100644 --- a/src/app/views/home/home.component.ts +++ b/src/app/views/home/home.component.ts @@ -8,7 +8,8 @@ const chars = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789'; @Component({ selector: 'home', - templateUrl: 'home.component.html' + templateUrl: 'home.component.html', + styleUrls: ['home.component.scss'] }) export class HomeComponent { phrase = 'If you\'re into that'; diff --git a/src/styles.scss b/src/styles.scss index 4783a03..a4f51f6 100644 --- a/src/styles.scss +++ b/src/styles.scss @@ -9,8 +9,10 @@ html, body { height: 100vh; overflow: hidden; } + body { margin: 0; overscroll-behavior: none; font-family: Roboto, "Helvetica Neue", sans-serif; + background-color: black; }