cssAudio - Activefile-genericCSS - ActiveGeneric - ActiveHTML - ActiveImage - ActiveJS - ActiveSVG - ActiveText - Activefile-genericVideo - ActiveLovehtmlicon-new-collectionicon-personicon-teamlog-outoctocatpop-outspinnerstartv

Pen Settings

CSS Base

Vendor Prefixing

Add External Stylesheets/Pens

Any URL's added here will be added as <link>s in order, and before the CSS in the editor. If you link to another Pen, it will include the CSS from that Pen. If the preprocessor matches, it will attempt to combine them before processing.

+ add another resource

You're using npm packages, so we've auto-selected Babel for you here, which we require to process imports and make it all work. If you need to use a different JavaScript preprocessor, remove the packages in the npm tab.

Add External Scripts/Pens

Any URL's added here will be added as <script>s in order, and run before the JavaScript in the editor. You can use the URL of any other Pen and it will include the JavaScript from that Pen.

+ add another resource

Use npm Packages

We can make npm packages available for you to use in your JavaScript. We use webpack to prepare them and make them available to import. We'll also process your JavaScript with Babel.

⚠️ This feature can only be used by logged in users.

Code Indentation

     

Save Automatically?

If active, Pens will autosave every 30 seconds after being saved once.

Auto-Updating Preview

If enabled, the preview panel updates automatically as you code. If disabled, use the "Run" button to update.

            
              div#loading-pane
	div#loading-content
		div#wave
			span.dot
			span.dot
			span.dot
main
	div.weather-card
		span.switch-unit.right
			span.circle
			h1.active(onclick="switchUnit(event)") &deg;F
			h1(onclick="switchUnit(event)") &deg;C
		span.right.clear
			i.fas.fa-map-marker-alt
			h1#location
		h1#big-temp.clear
		img.sky-svg
		img.weather-icon
		div.weather-info
			h1#day.left
			h1#temp.right
			br
			h1#condition.right.clear 
			hr.clear
			table
				tr
					td.t-header Humidity
					td.t-header Pressure
					td.t-header Wind
					td.t-header Cloud
				tr
					td#humidity.sec-data
					td#pressure.sec-data
					td#wind.sec-data
					td#cloud.sec-data
		
            
          
!
            
              $blue: #00BFFF;

body,html{
	width:100%;
	height:100%;
	padding:0;
	margin:0;
	font-family: 'Julius Sans One', sans-serif;
}

body{
	background-size:cover;
	background-repeat:no-repeat;
	background-position:center;
}

.left{
	float:left;
}
.right{
	float:right;
}

.clear{
	clear:both;
}


#loading-pane{
	position:fixed;
	margin:0;
	padding:0;
	width:100%;
	height:100%;
	z-index:11;
	background:white;
	
	#loading-content{
		width:25%;
		height:200px;
		margin:auto;
		position:relative;
		top:20%;
		text-align:center;
		
		#wave {
	position:relative;
	margin-top:20vh;
	text-align:center;
	width:100%;
	height:100px;
	margin-left: auto;
	margin-right: auto;
	.dot {
		display:inline-block;
		width:30px;
		height:30px;
		border-radius:50%;
		margin-right:10px;
		background:$blue;
		animation: wave 1.3s ease-in-out infinite;

		&:nth-child(2) {
			animation-delay: -1.1s;
		}

		&:nth-child(3) {
			animation-delay: -0.9s;
		}
	}
}		
	}
}

main{
	padding-top:1.2em;
	position:relative;
	top:50%;
	transform:translateY(-50%);
	
	.weather-card{
		width:300px;
		height:500px;
		border-radius:10px;
		margin:auto;
		position:relative;
		box-shadow:0 2px 6px rgba(0,0,0,.3);
		transition:all 1s;
		
		&:hover{
			transform:scale(1.05);
			box-shadow:0 5px 10px rgba(0,0,0,.5);
			
			#big-temp{
				font-size:5em;
					background-position:0 100%;
				&:before{background-position:0 100%}
				&:after{background-position:0 100%}
			}
			
		}
		
		.weather-icon{
			display:block;
			margin:auto;
			width:150px;
			height:150px;
			padding-top:.8em;
		}
		
		.sky-svg{
			width:45px;
			height:45px;
			display:block;
			margin:auto;
			-webkit-transform-origin: 50% 50%;
			-moz-transform-origin: 50% 50%;
			-o-transform-origin: 50% 50%;
			transform-origin: 50% 50%;
			position:absolute;
			top:10px;
			left:10px;
			animation: rotate 4s linear infinite;
		}
		
		.switch-unit{
			position:relative;
			margin:.5em;
			padding:2px 2px 2px 2px;
			border:1px solid white;
			border-radius:25px;
			background:white;
			box-shadow:0 2px 6px rgba(0,0,0,.3);
			
			.circle{
				position:absolute;
				height:25px;
				width:25px;
				background:$blue;
				border-radius:50%;
				z-index:.5;
				transition:all .3s linear;
			}
			
			h1{
				background:transparent;
				color:$blue;
				font-size:1em; margin:0;
				display:inline-block;
				cursor:pointer;
				border-radius:50%;
				position:relative;
				transition:color .3s;
				padding:3px 5px 3px 5px;
				z-index:10;
				
				&.active{
					color:white;
				}
			}
			
		}
		
		span{
			#location{
			padding:.5em 1em 1em 0;
			font-size:1.5em;
			display:inline-block;	
		}
			
			i{
				color:rgba(255,255,255,.8);
				font-size:1.5em;
			}
			
		}
		
		h1{
			color:white;
			margin:0;
			text-align:center;
			font-size:3em;
			
			&#big-temp{
				 position:relative;
				 font-size:4em;
				 transition:all .5s;
				 background: -webkit-linear-gradient(white, white 50%, $blue 50%, $blue);		background-size:100% 200%;
				background-position:0 0;
  -webkit-background-clip: text;
  -webkit-text-fill-color: transparent;
				
				
				&:after{
					transition:all .7s;
					content:attr(data-after);
					position:absolute;
					font-size:.4em;
					right:10%;
					top:60px;
					background: -webkit-linear-gradient(#eee, #eee 50%, $blue 50%, $blue);		background-size:100% 200%;
				background-position:0 0;
  -webkit-background-clip: text;
  -webkit-text-fill-color: transparent;
				}
				
				&:before{
					transition:all .7s;
					content:attr(data-before);
					position:absolute;
					font-size:.4em;
					left:10%;
					top:60px;
					background: -webkit-linear-gradient(#eee, #eee 50%, $blue 50%, $blue);		background-size:100% 200%;
				background-position:0 0;
  -webkit-background-clip: text;
  -webkit-text-fill-color: transparent;
				}
				
			}
		}
		
		.weather-info{
			position:absolute;
			background:transparent;
			margin-left:5%;
			width:90%;
			height:100px;
			bottom:0px;
			border-bottom-left-radius:10px;
			border-bottom-right-radius:10px;
			
			table{
				margin:auto;
				.t-header{
				color:white;
					font-size:.8em;
					
				}
				.sec-data{
				font-size:.65em;
				font-weight:lighter;
				text-align:center;
				color:white;
				}
				
			}
			
			h1{
				font-weight:bold;
				font-size:.9em;
				margin:0;
				padding:0;
				margin-bottom:5px;
				&#condition{
					font-weight:lighter;
					color:rgba(255,255,255,.8);
				}
			}
		}
		
	}
	
}

@keyframes rotate {
	100%{transform:rotate(360deg);}
}

@keyframes fillText{
	100%{
					background-position:0 100%;
				}
}

@keyframes wave {
	0%, 60%, 100% {
		transform: initial;
	}

	30% {
		transform: translateY(-100px);
	}
}

@keyframes fadeoutLoad{
	80%{
		opacity:0;
	}
	100%{
		opacity:0;
		display:none !important;
	}
}


            
          
!
            
              const days = [
	"Sunday",
	"Monday",
	"Tuesday",
	"Wednesday",
	"Thursday",
	"Friday",
	"Saturday"
];

const gradOpac = 0.80;
// gradient colors from https://cdpn.io/rDEAl
const grads = [
	[
		{ color: `rgba(0, 0, 12, ${gradOpac})`, position: 0 },
		{ color: `rgba(0, 0, 12, ${gradOpac})`, position: 0 }
	],
	[
		{ color: `rgba(2, 1, 17, ${gradOpac})`, position: 85 },
		{ color: `rgba(25, 22, 33, ${gradOpac})`, position: 100 }
	],
	[
		{ color: `rgba(2, 1, 17, ${gradOpac})`, position: 60 },
		{ color: `rgba(32, 32, 44, ${gradOpac})`, position: 100 }
	],
	[
		{ color: `rgba(2, 1, 17, ${gradOpac})`, position: 10 },
		{ color: `rgba(58, 58, 82, ${gradOpac})`, position: 100 }
	],
	[
		{ color: `rgba(32, 32, 44, ${gradOpac})`, position: 0 },
		{ color: `rgba(81, 81, 117, ${gradOpac})`, position: 100 }
	],
	[
		{ color: `rgba(64, 64, 92, ${gradOpac})`, position: 0 },
		{ color: `rgba(111, 113, 170, ${gradOpac})`, position: 80 },
		{ color: `rgba(138, 118, 171, ${gradOpac})`, position: 100 }
	],
	[
		{ color: `rgba(74, 73, 105, ${gradOpac})`, position: 0 },
		{ color: `rgba(112, 114, 171, ${gradOpac})`, position: 50 },
		{ color: `rgba(205, 130, 160, ${gradOpac})`, position: 100 }
	],
	[
		{ color: `rgba(117, 122, 191, ${gradOpac})`, position: 0 },
		{ color: `rgba(133, 131, 190, ${gradOpac})`, position: 60 },
		{ color: `rgba(234, 176, 209, ${gradOpac})`, position: 100 }
	],
	[
		{ color: `rgba(130, 173, 219, ${gradOpac})`, position: 0 },
		{ color: `rgba(235, 178, 177, ${gradOpac})`, position: 100 }
	],
	[
		{ color: `rgba(148, 197, 248, ${gradOpac})`, position: 1 },
		{ color: `rgba(166, 230, 255, ${gradOpac})`, position: 70 },
		{ color: `rgba(177, 181, 234, ${gradOpac})`, position: 100 }
	],
	[
		{ color: `rgba(183, 234, 255, ${gradOpac})`, position: 0 },
		{ color: `rgba(148, 223, 255, ${gradOpac})`, position: 100 }
	],
	[
		{ color: `rgba(155, 226, 254, ${gradOpac})`, position: 0 },
		{ color: `rgba(103, 209, 251, ${gradOpac})`, position: 100 }
	],
	[
		{ color: `rgba(144, 223, 254, ${gradOpac})`, position: 0 },
		{ color: `rgba(56, 163, 209, ${gradOpac})`, position: 100 }
	],
	[
		{ color: `rgba(87, 193, 235, ${gradOpac})`, position: 0 },
		{ color: `rgba(36, 111, 168, ${gradOpac})`, position: 100 }
	],
	[
		{ color: `rgba(45, 145, 194, ${gradOpac})`, position: 0 },
		{ color: `rgba(30, 82, 142, ${gradOpac})`, position: 100 }
	],
	[
		{ color: `rgba(36, 115, 171, ${gradOpac})`, position: 0 },
		{ color: `rgba(30, 82, 142, ${gradOpac})`, position: 70 },
		{ color: `rgba(91, 121, 131, ${gradOpac})`, position: 100 }
	],
	[
		{ color: `rgba(30, 82, 142, ${gradOpac})`, position: 0 },
		{ color: `rgba(38, 88, 137, ${gradOpac})`, position: 50 },
		{ color: `rgba(157, 166, 113, ${gradOpac})`, position: 100 }
	],
	[
		{ color: `rgba(30, 82, 142, ${gradOpac})`, position: 0 },
		{ color: `rgba(114, 138, 124, ${gradOpac})`, position: 50 },
		{ color: `rgba(233, 206, 93, ${gradOpac})`, position: 100 }
	],
	[
		{ color: `rgba(21, 66, 119, ${gradOpac})`, position: 0 },
		{ color: `rgba(87, 110, 113, ${gradOpac})`, position: 30 },
		{ color: `rgba(225, 196, 94, ${gradOpac})`, position: 70 },
		{ color: `rgba(178, 99, 57, ${gradOpac})`, position: 100 }
	],
	[
		{ color: `rgba(22, 60, 82, ${gradOpac})`, position: 0 },
		{ color: `rgba(79, 79, 71, ${gradOpac})`, position: 30 },
		{ color: `rgba(197, 117, 45, ${gradOpac})`, position: 60 },
		{ color: `rgba(183, 73, 15, ${gradOpac})`, position: 80 },
		{ color: `rgba(47, 17, 7, ${gradOpac})`, position: 100 }
	],
	[
		{ color: `rgba(7, 27, 38, ${gradOpac})`, position: 0 },
		{ color: `rgba(7, 27, 38, ${gradOpac})`, position: 30 },
		{ color: `rgba(138, 59, 18, ${gradOpac})`, position: 80 },
		{ color: `rgba(36, 14, 3, ${gradOpac})`, position: 100 }
	],
	[
		{ color: `rgba(1, 10, 16, ${gradOpac})`, position: 30 },
		{ color: `rgba(89, 35, 11, ${gradOpac})`, position: 80 },
		{ color: `rgba(47, 17, 7, ${gradOpac})`, position: 100 }
	],
	[
		{ color: `rgba(9, 4, 1, ${gradOpac})`, position: 50 },
		{ color: `rgba(75, 29, 6, ${gradOpac})`, position: 100 }
	],
	[
		{ color: `rgba(0, 0, 12, ${gradOpac})`, position: 80 },
		{ color: `rgba(21, 8, 0, ${gradOpac})`, position: 100 }
	]
];
let date = new Date();
//----------------------------------------------------------------------------------------------------------------------------------------------------

//----------------------------------------------------------------------------------------------------------------
document.addEventListener("DOMContentLoaded", function() {
	setGradient();
	getLoc();
});
//----------------------------------------------------------------------------------------------------------------
function getLoc() {
	//obtain lat and logitude from navigator
	if (navigator.geolocation) {
		navigator.geolocation.getCurrentPosition(getWeatherData);
	} else {
		alert("This browser does not support geoLocation");
	}
}
//----------------------------------------------------------------------------------------------------------------
function getWeatherData(position) {
	let lat = position.coords.latitude.toFixed(2);
	let long = position.coords.longitude.toFixed(2);
	let key = "19d7d6480fb0955393bc8a3c04fd526a";
	let endPoint =
		"https://api.openweathermap.org/data/2.5/weather?lat=" +
		lat +
		"&lon=" +
		long +
		"&appid=" +
		key;
	// call to api
	fetch(endPoint)
		.then(res => {
			return res.json();
		})
		.then(response => {
			// function call to add data to card
			appendWeatherData(response);
		});
}
//----------------------------------------------------------------------------------------------------------------
function appendWeatherData(weatherData) {
	document.getElementById("day").innerHTML = days[date.getDay()];
	console.log(weatherData);
	//set weatherIcon
	setWeatherIcon(weatherData.weather[0].icon);
	//set sun/moon icon
	getSunPos(weatherData.sys.sunrise, weatherData.sys.sunset);
	//set humidity
	document.getElementById("humidity").innerHTML = ` ${
		weatherData.main.humidity
	} %`;
	//set pressure
	document.getElementById("pressure").innerHTML = ` ${parseInt(
		weatherData.main.pressure
	) / 100} pa`;
	//set location
	document.getElementById("location").innerHTML = weatherData.name;
	//set wind speed
	document.getElementById("wind").innerHTML = `${(
		weatherData.wind.speed * 2.2367
	).toFixed(1)} m/h`;
	//set temp
	document.getElementById("temp").innerHTML = `${convertKelvin(
		weatherData.main.temp
	)} &deg;`;
	//set big temp
	document
		.getElementById("big-temp")
		.setAttribute("data-after", `${convertKelvin(weatherData.main["temp_max"])}`);
	document
		.getElementById("big-temp")
		.setAttribute(
			"data-before",
			`${convertKelvin(weatherData.main["temp_min"])}`
		);
	document.getElementById("big-temp").innerHTML = `${convertKelvin(
		weatherData.main.temp
	)}`;
	//set condition
	document.getElementById("condition").innerHTML = weatherData.weather[0].main;
	//set Cloud
	document.getElementById("cloud").innerHTML = weatherData.clouds.all + " %";
	//remove loader
document.body.removeChild(document.getElementById("loading-pane"));
}
//----------------------------------------------------------------------------------------------------------------
function convertKelvin(temp, unit = "f") {
	if (unit === "f") {
		return (parseFloat(temp) * (9 / 5) - 459.67).toFixed(0);
	} else {
		return (parseFloat(temp) - 273.15).toFixed(0);
	}
}
//----------------------------------------------------------------------------------------------------------------
function convertFC(temp, currentUnit = "c") {
	if (currentUnit === "c") {
		return parseFloat(temp * 9 / 5 + 32).toFixed(0);
	}
	if (currentUnit === "f") {
		return parseFloat((temp - 32) * (5 / 9)).toFixed(0);
	}
}
//----------------------------------------------------------------------------------------------------------------
function setGradient() {
	let hour = date.getHours();
	let colorSet = grads[hour];
	//make string of gradient by appending all colors and percentages
	let gradientString = colorSet.reduce((total, current) => {
		return `${total}${current.color} 		${current.position}%,`;
	}, "linear-gradient(");
	gradientString = gradientString.slice(0, -1) + ")";

	document.getElementsByClassName(
		"weather-card"
	)[0].style.background = gradientString;
}
//----------------------------------------------------------------------------------------------------------------
function switchUnit(event) {
	if (event.target.classList.contains("active")) return;
	else {
		document.getElementsByClassName("active")[0].classList.toggle("active");
		event.target.classList.toggle("active");
		let temp = document.getElementById("big-temp").innerHTML;
		let newTemp;
		let minTemp;
		let maxTemp;
		if (event.target.innerHTML === "°F") {
			document.getElementsByClassName("circle")[0].style.transform = "translateX(0px)";
			newTemp = convertFC(parseInt(temp), "c");
			minTemp = convertFC(
				parseInt(document.getElementById("big-temp").getAttribute("data-before")),
				"c"
			);
			maxTemp = convertFC(
				parseInt(document.getElementById("big-temp").getAttribute("data-after")),
				"c"
			);
			document.getElementById("big-temp").setAttribute("data-before", minTemp);
			document.getElementById("big-temp").setAttribute("data-after", maxTemp);
			document.getElementById("big-temp").innerHTML = newTemp ;
			document.getElementById("temp").innerHTML = newTemp + "&deg";
		} else {
				document.getElementsByClassName("circle")[0].style.transform = "translateX(135%)";
			newTemp = convertFC(parseInt(temp), "f");
			minTemp = convertFC(
				parseInt(document.getElementById("big-temp").getAttribute("data-before")),
				"f"
			);
			maxTemp = convertFC(
				parseInt(document.getElementById("big-temp").getAttribute("data-after")),
				"f"
			);
			document.getElementById("big-temp").setAttribute("data-before", minTemp);
			document.getElementById("big-temp").setAttribute("data-after", maxTemp);
			document.getElementById("big-temp").innerHTML = newTemp;
			document.getElementById("temp").innerHTML = newTemp + "&deg";
		}
	}
}
//----------------------------------------------------------------------------------------------------------------
function getSunPos(sunRiseUTC, sunSetUTC) {
	var offset = new Date().getTimezoneOffset() * -1;
	sunRiseUTC += offset * 60;
	sunSetUTC += offset * 60;
	let currentTime = date.getTime() / 1000.0 + offset * 60;
	if (currentTime < sunRiseUTC || currentTime > sunSetUTC) {
		document
			.getElementsByClassName("sky-svg")[0]
			.setAttribute(
				"src",
				"https://res.cloudinary.com/dwrytmxwf/image/upload/v1537319485/newWeather/icons/moon.svg"
			);
	} else if (currentTime >= sunRiseUTC && currentTime < sunSetUTC) {
		document
			.getElementsByClassName("sky-svg")[0]
			.setAttribute(
				"src",
				"https://res.cloudinary.com/dwrytmxwf/image/upload/v1537319485/newWeather/icons/sun.svg"
			);
	}
}
//----------------------------------------------------------------------------------------
function setWeatherIcon(iconCode){
	let icon = document.getElementsByClassName("weather-icon")[0];
	let background = document.body;

	switch(true){
		case iconCode==="01d":{icon.setAttribute("src","https://res.cloudinary.com/dwrytmxwf/image/upload/v1537362284/newWeather/icons/weatherIcons/01d.svg");
background.style.backgroundImage = " url(https://res.cloudinary.com/dwrytmxwf/image/upload/v1537403430/newWeather/01d.jpg)";			 
													 break;}
		case iconCode==="01n":{icon.setAttribute("src","https://res.cloudinary.com/dwrytmxwf/image/upload/v1537362284/newWeather/icons/weatherIcons/01n.svg");
													 background.style.backgroundImage = " url(https://res.cloudinary.com/dwrytmxwf/image/upload/v1537403431/newWeather/01n.jpg)";	
													 break;}
		case iconCode==="02d":{icon.setAttribute("src","https://res.cloudinary.com/dwrytmxwf/image/upload/v1537362284/newWeather/icons/weatherIcons/02d.svg");
													 background.style.backgroundImage = " url(https://res.cloudinary.com/dwrytmxwf/image/upload/v1537403431/newWeather/02d.jpg)";	
													 break;}
		case iconCode==="02n":{icon.setAttribute("src","https://res.cloudinary.com/dwrytmxwf/image/upload/v1537362284/newWeather/icons/weatherIcons/02n.svg");
													 background.style.backgroundImage = " url(https://res.cloudinary.com/dwrytmxwf/image/upload/v1537403431/newWeather/02n.jpg)";	
													 break;}
		case iconCode==="03d" || iconCode==="03n":{icon.setAttribute("src","https://res.cloudinary.com/dwrytmxwf/image/upload/v1537362284/newWeather/icons/weatherIcons/03dn.svg");
																							 background.style.backgroundImage = " url(https://res.cloudinary.com/dwrytmxwf/image/upload/v1537403431/newWeather/03dn.jpg)";	
																							 break;}
		case iconCode==="04d" || iconCode==="04n":{icon.setAttribute("src","https://res.cloudinary.com/dwrytmxwf/image/upload/v1537362284/newWeather/icons/weatherIcons/04dn.svg");
																							 background.style.backgroundImage = " url(https://res.cloudinary.com/dwrytmxwf/image/upload/v1537403431/newWeather/04dn.jpg)";	
																							 break;}
		case iconCode==="09d" || iconCode==="09n":{icon.setAttribute("src","https://res.cloudinary.com/dwrytmxwf/image/upload/v1537362282/newWeather/icons/weatherIcons/09dn.svg");
																							 background.style.backgroundImage = " url(https://res.cloudinary.com/dwrytmxwf/image/upload/v1537403431/newWeather/09dn.jpg)";	
																							 break;}
		case iconCode==="10d":{icon.setAttribute("src","https://res.cloudinary.com/dwrytmxwf/image/upload/v1537362282/newWeather/icons/weatherIcons/10d.svg");
													 background.style.backgroundImage = " url(https://res.cloudinary.com/dwrytmxwf/image/upload/v1537403432/newWeather/10dn.jpg)";	
													 break;}
		case iconCode==="10n":{icon.setAttribute("src","https://res.cloudinary.com/dwrytmxwf/image/upload/v1537362282/newWeather/icons/weatherIcons/10n.svg");
													 background.style.backgroundImage = " url(https://res.cloudinary.com/dwrytmxwf/image/upload/v1537403432/newWeather/10dn.jpg)";	
													 break;}
		case iconCode==="11d" || iconCode==="11n":{icon.setAttribute("src","https://res.cloudinary.com/dwrytmxwf/image/upload/v1537362282/newWeather/icons/weatherIcons/11dn.svg");
																							 background.style.backgroundImage = " url(https://res.cloudinary.com/dwrytmxwf/image/upload/v1537403432/newWeather/11dn.jpg)";	
																							 break;}
		case iconCode==="13d" || iconCode==="13n":{icon.setAttribute("src","https://res.cloudinary.com/dwrytmxwf/image/upload/v1537362282/newWeather/icons/weatherIcons/13dn.svg");
																							 background.style.backgroundImage = "background: url(https://res.cloudinary.com/dwrytmxwf/image/upload/v1537403432/newWeather/13dn.jpg)";	
																							 break;}
		case iconCode==="50d" || iconCode==="50n":{icon.setAttribute("src","https://res.cloudinary.com/dwrytmxwf/image/upload/v1537362282/newWeather/icons/weatherIcons/50dn.svg");
																							 background.style.backgroundImage = " url(https://res.cloudinary.com/dwrytmxwf/image/upload/v1537403432/newWeather/50dn.jpg)";	
																							 break;}	
	}
}
            
          
!
999px
🕑 One or more of the npm packages you are using needs to be built. You're the first person to ever need it! We're building it right now and your preview will start updating again when it's ready.
Loading ..................

Console