/* ABB styles */
@font-face {
    font-family: 'ABBVoice';
    src: url('https://d3o3d9viu00ouz.cloudfront.net/external/font/0.0.13/bundle/fonts/ABBvoice_W_Rg.woff2') format('woff2');
}

@font-face {
    font-family: "ABBvoice-Medium";
    font-style: normal;
    font-weight: 100;
    src: url('https://d3o3d9viu00ouz.cloudfront.net/external/font/0.0.13/bundle/fonts/ABBvoice_W_Md.woff2') format('woff2');
}

@font-face {
    font-family: "ABBvoice-Bold";
    font-style: normal;
    font-weight: 100;
    src: url('https://d3o3d9viu00ouz.cloudfront.net/external/font/0.0.13/bundle/fonts/ABBvoice_W_Bd.woff2') format('woff2');
}



/* =========================================================
   animations
   ========================================================= */

@keyframes pulse-red
{
	0% {
		transform: translate(-50%, -50%) scale(0.95);
		box-shadow: 0 0 0 0 rgba(255, 0, 16, .9);
	}
	
	70% {
		transform: translate(-50%, -50%) scale(1);
		box-shadow: 0 0 0 2em rgba(255, 0, 16, 0);
	}
	
	100% {
		transform: translate(-50%, -50%) scale(0.95);
		box-shadow: 0 0 0 0 rgba(255, 0, 16, 0);
	}
}

@keyframes pulse-white
{
	0% {
		transform: scale(1);
		opacity: 0;
	}

	1% {
		transform: scale(1.1);
		opacity: .1;
	}
	
	50% {
		transform: scale(1.5);
		opacity: .5
	}
	
	100% {
		transform: scale(2);
		opacity: 0;
	}
}

@keyframes tf-spinner {
	to { transform: translate(-50%,-50%) rotate(360deg); }
}



/* =========================================================
   general
   ========================================================= */

body {
    font-family: 'ABBVoice', Arial, sans-serif;
    display: flex;
    justify-content: flex-start;
    align-items: center;
	flex-direction: column;
    background-color: #fff;
    margin: 0;
    padding: 0;
	box-sizing: border-box;
}

div.tomorrow-filter, .tomorrow-filter * {
	margin: 0; padding: 0;
}

div.tomorrow-filter, .tomorrow-filter *, .tomorrow-filter *::before, .tomorrow-filter *::after {
	box-sizing: border-box;
}

sup, sub {
	vertical-align: baseline;
	position: relative;
	top: -0.4em;
}

sub { 
	top: 0.4em; 
}



/* =========================================================
   .tomorrow-filter
   ========================================================= */

.tomorrow-filter {
    position: relative;
    width: 100%;
    margin: 0 auto;
}



/* =========================================================
   container
   ========================================================= */

.tomorrow-filter div.container {
	counter-reset: callout;
	position: relative;
}

.tomorrow-filter div.container::after {
	content: '';
	display: block;
	width: 100%;
	height: 100%;
	left: 0;
	top: 50%;
	position: absolute;
	z-index: -1;
	background: rgba(0,0,0,1);
	transform: translateY(-50%) scaleY(0);
	transition: transform .25s;
}

.tomorrow-filter.loaded div.container::after {
	transform: translateY(-50%) scaleY(1);
}

.tomorrow-filter div.container::before {
	content: '';
	box-sizing: border-box;
	position: absolute;
	z-index: -1;
	top: 50%;
	left: 50%;
	width: 4em;
	height: 4em;
	transform: translate(-50%, -50%);
	border-radius: 50%;
	border: .375em solid #ccc;
	border-top-color: #000;
	animation: tf-spinner .6s linear infinite;
}



/* =========================================================
   canvas
   ========================================================= */

.tomorrow-filter canvas {
	display: block;
    width: 100%;
    height: auto;
    aspect-ratio: 16 / 9;
	background: #333;
	opacity: .125;
	transition: opacity .25s;
}

.tomorrow-filter.loaded canvas {
	opacity: 1; 
}



/* =========================================================
   callouts
   ========================================================= */

.tomorrow-filter div.callout {
	position: absolute;
	z-index: 10;

	opacity: 0;
	background-color: rgba(128, 128, 128, 0.1);
	border-radius: clamp(2em,5vw, 2.5em);
	color: white;
	-webkit-backdrop-filter: blur(8px);
	backdrop-filter: blur(8px);
	box-shadow: .1875em .375em 1.125em rgba(0,0,0,.4);
    pointer-events: none;
    -webkit-user-select: none;
    user-select: none;
	box-shadow: 1px 2px 4px rgba(0,0,0,1);
	filter: saturate(.75);

	width: clamp(3em, 5vw, 5em);
	max-width: clamp(3em, 5vw, 5em);
	display: flex;

	transition: all .25s;
}

.can-hover .tomorrow-filter .callout:hover, .tomorrow-filter .callout.open {
	width: auto;
	max-width: calc(100% - 2em);
	z-index: 30;
	background-color: rgba(228, 228, 228, 0.1);
	transition: all .25s;
}

.tomorrow-filter .callout.open, .can-hover .tomorrow-filter .callout.open:hover {
	width: 32em;
	max-width: calc(100% - 2em);
	transition: all .25s;
}

.tomorrow-filter .callout.open {
	top: 50% !important;
  	left: 50% !important;
	transform: translate(-50%, -50%) !important;
}

.tomorrow-filter .callout::before {
	content: '';
	position: absolute;
	top: 0;
	left: 0;
	right: 0;
	bottom: 0;
	border-radius: inherit;
	padding: 3px;
	background: linear-gradient(175deg, rgba(164,110,107,1), rgba(104,8,0,.5));
	-webkit-mask: 
		linear-gradient(#fff 0 0) content-box, 
		linear-gradient(#fff 0 0);
	mask: 
		linear-gradient(#fff 0 0) content-box, 
		linear-gradient(#fff 0 0);
	-webkit-mask-composite: destination-out;
	mask-composite: exclude; 
}

.tomorrow-filter div.callout.show {
	opacity: 1;
	pointer-events: all;
	cursor: pointer;
}

.tomorrow-filter div[id^='callout'].open ~ div.callout, .tomorrow-filter div.callout:has(~ div.callout.open) {
	opacity: 0;
	pointer-events: none;
	transition: opacity .25s;
}

.tomorrow-filter div.container:has(div.callout.open)::after {
	opacity: .25;
	z-index: 1;
}



/* =========================================================
   callouts - icon
   ========================================================= */

.tomorrow-filter figure {
	display: block;
	width: clamp(3em, 5vw, 5em);
	height: auto;
	aspect-ratio: 1;
	padding: .5em;
	position: relative;
	flex: 0 0 clamp(3em, 5vw, 5em);
	display: flex;
	align-items: flex-start;
	justify-content: center;
	transform: translateY(.25em);
}

.tomorrow-filter figure::before {
	content: '';
	display: block;
	position: absolute;
	top: -.25em;
	left: 0;
	z-index: -1;
	width: 100%;
	height: 100%;
	border: clamp(.25em,.375vw,.375em) rgba(255,255,255,1) solid;
	border-radius: 100%;
	opacity: 0;
}

.tomorrow-filter .callout:not(:hover):not(.open) figure::before {
	animation: pulse-white 1s linear 0s infinite;
}

.tomorrow-filter figure img {
	width: 90%;
	max-width: 90%;
	height: auto;
}



/* =========================================================
   callouts - content
   ========================================================= */

.tomorrow-filter div.text-content {
	width: 0;
	overflow: hidden;
	color: #fff;
	opacity: 0;
	padding: 0;
	display: flex;
	flex-direction: column;
	align-items: flex-start;
	justify-content: center;
	transition: all 0s;
	position: relative;
}

.can-hover .tomorrow-filter .callout:hover div.text-content, .tomorrow-filter .callout.open div.text-content {
	width: auto;
	padding-inline: .5em 2em;
	opacity: 1;
	overflow: auto;
	transition: all .25s;
}

.tomorrow-filter .callout.open div.text-content {
	padding-block: 2em;
}

.tomorrow-filter h4 {
	font-size: clamp(.875em, 1.2vw, 1.2em);
	font-family: ABBVoice-Bold;
	margin: 0;
	padding: 0;
	font-weight: normal;
	font-style: normal;
	line-height: 1;
	white-space: nowrap;
	opacity: 0;
	transition: opacity 0s;
}

.can-hover .tomorrow-filter .callout:hover h4, .tomorrow-filter .callout.open h4 {
	opacity: 1;
	transition: opacity .25s;
}

.tomorrow-filter .callout p {
	font-size: clamp(.75em, 1.1vw, 1.1em);
	height: 0;
	width: 0;
	max-width: 0;
	opacity: 0;
	transition: opacity .25s;
	font-family: 'ABBVoice';
	color: #eee;
	overflow: hidden;
}

.tomorrow-filter .callout.open p {
	height: auto;
	width: auto;
	max-width: calc(100% - 2em);
	opacity: 1;
	margin: 1em 0;
	position: relative;
}

.tomorrow-filter div.text-content::before, .tomorrow-filter div.text-content::after {
	content: '';
	display: block;
	width: 2px;
	height: 2em;
	background: #fff;
	position: absolute;
	z-index: 2;
	right: 2em;
	top: 1.25em;
	transform-origin: 50% 50%;
	opacity: 0;
	transform: rotate(90deg);
	transition: opacity .25s, transform .25s;
}

.tomorrow-filter .callout.open div.text-content::before, .tomorrow-filter .callout.open div.text-content::after {
	opacity: 1;
	transition: opacity .5s ease .25s, transform .25s ease .25s;
}

.tomorrow-filter .callout.open div.text-content::before {
	transform: rotate(45deg);
}

.tomorrow-filter .callout.open div.text-content::after {
	transform: rotate(-45deg);
}

.tomorrow-filter p em {
	font-family: 'ABBvoice-Bold';
	font-style: normal;
	color: #fff;
}



/* =========================================================
   callouts - position
   ========================================================= */

.tomorrow-filter #callout1 {
    left: 11%;
    top: 22%;
}

.tomorrow-filter #callout2 {
    left: 19%;
    top: 55%;
}

.tomorrow-filter #callout3 {
    left: 45%;
    top: 27%;
}

.tomorrow-filter #callout4 {
    left: 55%;
    top: 70%;
}

.tomorrow-filter #callout5 {
    left: 77%;
    top: 20%;
}

.tomorrow-filter #callout6 {
    left: 80%;
    top: 55%;
}



/* =========================================================
   instructions
   ========================================================= */

p.instructions {
	position: absolute;
	z-index: 10;
	bottom: .5em;
	left: 50%;
	transform: translateX(-50%);
	color: #fff;
	font-weight: bold;
	font-size: clamp(.75em, 1em, 1.5vw);
	margin: 0;
	width: 100%;
	padding: 0 2em;
	text-align: center;
	text-shadow: 0 1px 4px rgba(0,0,0,.5);
	pointer-events: none;
	transition: opacity .25s;
}

.tomorrow-filter.touched p.instructions {
	opacity: 0;
}

@media only screen and (max-width: 40em)
{
	p.instructions {
		bottom: -3em;
		color: #000;
		text-shadow: none;
	}
}



/* =========================================================
   slider
   ========================================================= */

.tomorrow-filter #slider {
	width: 95%;
	height: 2px;
	position: absolute;
	z-index: 20;
	bottom: min(5.5vw,calc(5% + 1.5em));
	left: 50%;
	transform: translateX(-50%);
	opacity: 0;
	transition: opacity .25s;
}

.tomorrow-filter.loaded #slider {
	opacity: 1;
}

.tomorrow-filter #slider div#channel {
	width: 100%;
	height: 100%;
	background-color: #fff;
	position: absolute;
	overflow: hidden;
	z-index: 1;
	transform: scaleX(0);
	transition: transform .25s ease .25s;
	transform-origin: 0 50%;
}

.tomorrow-filter.loaded #slider div#channel {
	transform: scaleX(1);
}

.tomorrow-filter #dragger {
	width: 5em;
	height: 2.5em;
	background-color: #fff;
	border-radius: 1.25em;
	border: .125em #000 solid;
	box-shadow: .25em .333em .5em rgba(0,0,0,.667);
	position: absolute;
	top: calc(-1.25em + 1px);
	left: 0;
	cursor: pointer;
	z-index: 10;
	transition: filter .25s;
}

.can-hover .tomorrow-filter #dragger:hover {
	filter: brightness(.9);
}

.tomorrow-filter #dragger::after {
	content: '';
	display: block;
	position: absolute;
	top: 0;
	left: 0;
	width: 100%;
	height: 100%;
	background: #fff;
	z-index: 2;
	border-radius: 50%;
}

.tomorrow-filter #dragger span {
	display: block;
	width: 100%;
	height: 100%;
	position: relative;
	z-index: 10;
}

.tomorrow-filter #dragger span::before {
	content: '';
	display: block;
	width: 75%;
	height: auto;
	border-radius: 1em;
	aspect-ratio: 5 / 1.75;
	background: #ff0010;
	position: absolute;
	top: 50%;
	left: 50%;
	transform: translate(-50%, -50%) scale(1);
	transition: transform .25s;
}

.tomorrow-filter #dragger span::after {
	content: '';
	display: block;
	width: 100%;
	height: 100%;
	position: absolute;
	top: 0;
	left: 0;
	background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 44 16'%3E%3Cpolygon fill='%23fff' points='12.47,3.99 12.47,12.01 5.698,8'/%3E%3Cpolygon fill='%23fff' points='31.53,12.01 31.53,3.99 38.302,8'/%3E%3C/svg%3E");
	background-repeat: no-repeat;
	background-position: 50% 50%;
	background-size: 70% auto;
}