// Padding and Margin sizes

$-spacing-small: 10px;
$-spacing-medium: 25px;
$-spacing-large: 35px;

//

.RV-Dummy {
	overflow: hidden;
	&--orange {
		background-color: #F4A460 !important;
	}
		
	&--blue {
		background-color: #6495ED !important;
	}
		
	&--green {
		background-color: #90EE90 !important;
	}
		
	&--red {
		background-color: #ce6d6d !important;
	}
		
	&--yellow{
		background-color: #eae144 !important;
	}
		
	background-color: #F4A460;

	&:nth-child(2n){
		background-color: #6495ED;
	}
	
	&:nth-child(3n){
		background-color: #90EE90;
	}
	
	&__Landscape {
		min-width: 200px;
		width: 100%;
		min-height: 130px;
	}
		
	&__Portrait{
		min-width: 130px;
		width: 100%;
		min-height: 200px;
	}
	
	&__Square {
		min-width: 300px;
		width: 100%;
		min-height: 300px;
	
		&--large {
			height: 500px;
			width: 500px;
		}
			
		&--small{
			height: 100px;
			width: 100px;
		}
	}

	&--square {
		height: 350px;
		width: 350px;
	}
		
	&--portrait {
		height: 350px;
		width: 150px;
	}
		
	&--landscape {
		width: 350px;
		height: 150px;
	}
	
	&--red {
		background-color: #d8583e;
	}
}
/**
 * Mixins to maintain aspect ratio of an element.
 */
 
@mixin RV-AspectRatio--XtoY($aspectX: 1, $aspectY: 1) {
		--aspectX: #{$aspectX};
		--aspectY: #{$aspectY};
		
		padding-top: calc(100% * calc(var(--aspectY) / var(--aspectX)));
}

@mixin RV-AspectRatio--1to2 {
	@include RV-AspectRatio--XtoY(1, 2);
}
		
@mixin RV-AspectRatio--2to1 {
	@include RV-AspectRatio--XtoY(2, 1);
}
	
@mixin RV-AspectRatio--3to2 {
	@include RV-AspectRatio--XtoY(3, 2);
}
		
@mixin RV-AspectRatio--4to3 {
	@include RV-AspectRatio--XtoY(4, 3);
}
		
@mixin RV-AspectRatio--16to9 {
	@include RV-AspectRatio--XtoY(16, 9);
}

@mixin RV-AspectRatio {
	position: relative;
	overflow: hidden;
	height: unset;
	width: unset;

	* {
		object-fit: cover;
		position: absolute;
		top: 0;
		left: 0;
		bottom: 0;
		right: 0;
	}
}

.RV-AspectRatio {
	@include RV-AspectRatio;
	
	&--1to2 {
		@include RV-AspectRatio--1to2;
	}
	
	&--2to1 {
		@include RV-AspectRatio--2to1;
	}
	
	&--3to2 {
		@include RV-AspectRatio--3to2;
	}
	
	&--4to3 {
		@include RV-AspectRatio--4to3;
	}
	
	&--16to9 {
		@include RV-AspectRatio--16to9;
	}

}
	

/**
 * This mixins helps you positioning objects (i.e. images, videos) to a 'focal point'.
 * A focal point is a manual choosen point in an object that will be in the center of the cropped object.
 * If the object is not cropped, the focal point does not apply. Best used with RV-AspectRatio.
 * The focal point is given in percentages relative to the objects size.
 
 * To set the focal point either use one the the predefined classes or set them using inline CSS:
 * class="RV-FocalPoint" style="--focalX: 44%; --focalY: 16.66%"
 * 
 */

@mixin RV-FocalPoint--upperHalf {
	--focalY: 25%;
}

@mixin RV-FocalPoint--lowerHalf {
	--focalY: 75%;
}

@mixin RV-FocalPoint--leftHalf {
	--focalX: 25%;
}

@mixin RV-FocalPoint--rightHalf {
	--focalX: 75%;
}

@mixin RV-FocalPoint($focalX: 50%, $focalY: 50%) {
	--focalX: #{$focalX};
	--focalY: #{$focalY};
	
	height: 100%;
	width: 100%;
	display: block;
	object-fit: cover;
	object-position: var(--focalX) var(--focalY);
}

.RV-FocalPoint {
	@include RV-FocalPoint;
	
	&--upperHalf {
		@include RV-FocalPoint--upperHalf;
	}
	
	&--lowerHalf {
		@include RV-FocalPoint--lowerHalf;
	}
	
	&--leftHalf {
		@include RV-FocalPoint--leftHalf;
	}
	
	&--rightHalf {
		@include RV-FocalPoint--rightHalf;
	}
}
	


	
@mixin RV-Rotation--degree($degree) {
	--rotationDegree: #{$degree};
}

@mixin RV-Rotation--left {
    @include RV-Rotation--degree(-90deg);
}

@mixin RV-Rotation--right {
    @include RV-Rotation--degree(90deg);
}

@mixin RV-Rotation--upsideDown {
    @include RV-Rotation--degree(180deg);
}

@mixin RV-Rotation {
	--rotationDegree: 0deg;
	transform: rotate(var(--rotationDegree));
}

.RV-Rotation {
	@include RV-Rotation;
	
	&--left {
         @include RV-Rotation--left;
	}
	
	&--right {
        @include RV-Rotation--right;
	}
	
	&--upsideDown {
        @include RV-Rotation--upsideDown;
	}
}
/**
 * This mixins lets to shape elements to squares or circles.
 * Note: Even if the class RV-Shape itself is not nessecary (at this point)
 * you still should use it to maintain compatiblity:
 * CSS: class="RV-Shape RV-Shape--square"
 * Stylues: 
 *	RV-Shape()
 *	RV-Shape--square()
 * You may want to combine this mixin with RV-FocalPoint.
 */
@mixin RV-Shape--square{
	width: 100%;
	position: relative;

	&:after {
		padding-bottom: 100%;
		content: '';
		display: block;
	}

	* {
		position: absolute;
		width: 100%;
		height: 100%;
	}
}

@mixin RV-Shape--circle {
	@include RV-Shape--square;

	&, * {
		clip-path: circle()
	}
}

.RV-Shape{
	&--square {
		@include RV-Shape--square;
	}

	&--circle {
		@include RV-Shape--circle;
	}
}
@mixin RV-Alignment--top {
	display: flex;
	align-content: start;
}

@mixin RV-Alignment--bottom {
	display: flex;
	align-content: end;
}

@mixin RV-Alignment--left {
	display: flex;
	justify-content: start;
}

@mixin RV-Alignment--right {
	display: flex;
	justify-content: end;
}

@mixin RV-Alignment--horizontalCenter {
	display: flex;
	justify-content: center;
}

@mixin RV-Alignment--verticalCenter {
	display: flex;
	align-items: center;
}

@mixin RV-Alignment--center {
	display: flex;
	align-items: center;
	justify-content: center;
}


.RV-Alignment {
	&--top {
		@include RV-Alignment--top;
	}
	
	&--bottom {
		@include RV-Alignment--bottom;
	}
	
	&--left {
		@include RV-Alignment--left;
	}
	
	&--right {
		@include RV-Alignment--right;
	}
	
	&--horizontalCenter {
		@include RV-Alignment--horizontalCenter;
	}
	
	&--verticalCenter {
		@include RV-Alignment--verticalCenter;
	}
	
	&--center {
		@include RV-Alignment--center;
	}
}
html {
	--spacing-factor: 1.5;
	
	--spacing-none: 0;
	
	--spacing-small: calc(var(--spacing-regular) / var(--spacing-factor));
	--spacing-regular: 1em;
	--spacing-medium: calc(var(--spacing-regular) * var(--spacing-factor));
	--spacing-large: calc(var(--spacing-regular) * (var(--spacing-factor) * var(--spacing-factor)));
	--spacing-extra-large: calc(var(--spacing-regular) * (var(--spacing-factor) * var(--spacing-factor) * var(--spacing-factor)));
	
	--spacing: var(--spacing-regular);
}

.RV-Spacing {
	&--none {
		--spacing: var(--spacing-none);
	}

	&--small {
		--spacing: var(--spacing-small);
	}
	
	&--regular {
		--spacing: var(--spacing-regular);
	}
	
	&--medium {
		--spacing: var(--spacing-medium);
	}
	
	&--large {
		--spacing: var(--spacing-large);
	}
	
	&--extra-large {
		--spacing: var(--spacing-extra-large);
	}
}
/*
 * Classes for easy flexrow usage
 */

/*
 * Orientation
 */

@mixin RV-Flex--horizontal {
	flex-direction: row;
}

@mixin RV-Flex--vertical {
	flex-direction: column;
}

/*
 * Typical Flexbox behavior, Row is horizontal, but item are wraped individualy
 */
@mixin RV-Flex--wrap {
	flex-direction: row;
	flex-wrap: wrap;
}

/*
 * Varios relative width of items to each other
 */

@mixin RV-Flex__Item--narrower {
	flex-grow: 2;
	flex-shrink: 10;
}

@mixin RV-Flex__Item--narrow {
	flex-grow: 4;
	flex-shrink: 8;
}

@mixin RV-Flex__Item--wide {
	flex-grow: 8;
	flex-shrink: 4;
}

@mixin RV-Flex__Item--wider {
	flex-grow: 10;
	flex-shrink: 2;
}

/*
 * Item has always the given width
 */
@mixin RV-Flex__Item--fixedSize {
	flex-basis: var(--fixedSize);
	flex-grow: 0;
	flex-shrink: 0;
}

/*
 * Item width relativ to the container
 */
@mixin RV-Flex__Item--half {
	overflow: hidden;
	flex-grow: 0;
	flex-shrink: 0;
	flex-basis: 50%;
}

@mixin RV-Flex__Item--third {
	overflow: hidden;
	flex-grow: 0;
	flex-shrink: 0;
	flex-basis: calc(100%/3);
}

@mixin RV-Flex__Item--quarter {
	overflow: hidden;
	flex-grow: 0;
	flex-shrink: 0;
	flex-basis: 25%;
}

@mixin RV-Flex__Item--content {
	flex-grow: 0;
	flex-shrink: 0;
	flex-basis: max-content;
}

/* ##########
 * Item class
 * ##########
*/

@mixin RV-Flex__Item {
	flex-grow: 5;
	flex-shrink: 5;
}

@mixin RV-Flex {
	display: flex;
	gap: var(--gap);
}

/* ##########
 * Block
  ########### */

.RV-Flex {
	$block: &;
	--gap: 0;
	@include RV-Flex;

	&__Item {
		--fixedSize: 100px;
		@include RV-Flex__Item;

		&--narrower {
			@include RV-Flex__Item--narrower;
		}

		&--narrow {
			@include RV-Flex__Item--narrow;
		}

		&--wide {
			@include RV-Flex__Item--wide;
		}

		&--wider {
			@include RV-Flex__Item--wider;
		}

		&--half {
			@include RV-Flex__Item--half;
		}

		&--third {
			@include RV-Flex__Item--third;
		}

		&--quarter {
			@include RV-Flex__Item--quarter;
		}

		&--fixedSize {
			@include RV-Flex__Item--fixedSize;
		}

		&--content {
			@include RV-Flex__Item--content;
		}
	}

}

/* 
 * ####
 * Item
 * ####
 */
@mixin RV-BreakPoint__Item--outside {
    flex-shrink: 999;
}

@mixin RV-BreakPoint__Item--inside {
    flex-grow: 0;
}

@mixin RV-BreakPoint__Item {
    @include RV-Flex__Item;
    flex-basis: calc(var(--breakPoint) * 999 - 100% * 999);
    overflow: hidden;
    --outer-spacing: 0;
    --inner-spacing: 0;
}

/* 
 * ####
 * Wrap
 * ####
 */

@mixin RV-BreakPoint--wrap__Item--outside {
    margin-bottom: -100vh;
}

/* 
 * ##########
 * Horizontal
 * ##########
 */

@mixin RV-BreakPoint--horizontal__Item--outside{
	margin-bottom: unset;
	height: unset;
}

@mixin RV-BreakPoint--horizontal {
	flex-wrap: nowrap;
	flex-direction: row;
}

/* 
 * ########
 * Vertical
 * ########
 */

@mixin RV-BreakPoint--vertical__Item--outside {
	margin-bottom: unset;
	height: unset;
}

@mixin RV-BreakPoint--vertical {
	flex-direction: column;
	flex-wrap: nowrap;
	height: 100vh;
}

/* 
 * #####
 * Block
 * #####
 */

@mixin RV-BreakPoint{
		@include RV-Flex;
		@include RV-Flex--wrap;
		
		overflow-y: hidden;
		
		//RV-Reset()
		gap: 0px;
}
.RV-BreakPoint {
	$block: &;
	--breakPoint: 500px;

	@include RV-BreakPoint;

	&__Item {
		@include RV-BreakPoint__Item;
		
		&--outside {
			@include RV-BreakPoint__Item--outside;
		}

		&--inside {
			@include RV-BreakPoint__Item--inside;
		}

	}
	
	&--wrap &__Item{
		&--outside {
			@include RV-BreakPoint--wrap__Item--outside;
		}
	}

	&--horizontal {
		@include RV-BreakPoint--horizontal;

		& #{$block}__Item {
			&--outside {
				@include RV-BreakPoint--wrap__Item--outside;
			}
		}
	}

	&--vertical {
		@include RV-BreakPoint--vertical;

		& #{$block}__Item {
			&--outside {
				@include RV-BreakPoint--vertical__Item--outside;
			}
		}

	}
}

@mixin RV-Grid--autoWidth {
	grid-template-columns: repeat(auto-fit, minmax(var(--itemMinWidth), 1fr));
	grid-template-rows: repeat(auto-fill, minmax(var(--itemHeight), 1fr));
	grid-auto-rows: minmax(var(--itemHeight), 1fr);
}

@mixin RV-Grid--fixedSize{
	grid-template-rows: repeat(auto-fill, minmax(var(--itemHeight), 1fr));
	grid-auto-rows: minmax(var(--itemHeight), 1fr);
	grid-template-columns: repeat(auto-fill, var(--itemWidth));
	justify-content: space-between;
}

@mixin RV-Grid--masonry__Item {
	width: 100%;
	margin-bottom: var(--gap);
	
	&:last-child {
		margin-bottom: 0;
	}
}
		
@mixin RV-Grid--masonry {
	display: block;
	column-count: auto;
	column-width: var(--itemWidth);
}		

@mixin RV-Grid__Item{
	height: calc(var(--itemHeight) - calc(2*var(--inner-spacing)));
	& > *  {
		height: 100%;
		width: 100%;
	}
}

@mixin RV-Grid{
	display: grid;
	grid-template-columns: repeat(auto-fill, var(--itemWidth));
	gap: var(--gap);
}

.RV-Grid {
	$block: &;
	--itemHeight: 300px;
	--itemWidth: 300px;
	--itemMinWidth: 300px;
	--gap: 15px;

	@include RV-Grid;
	&__Item {
		@include RV-Grid__Item;
	}

	&--autoWidth {
		@include RV-Grid--autoWidth;
	}

	&--masonry {
		@include RV-Grid--masonry;
		& #{$block}__Item {
			@include RV-Grid--masonry__Item;
		}
	}

	&--fixedSize {
		@include RV-Grid--fixedSize;
	}
}
/* #############
 * Element Mixins
 * ############# */

@mixin RV-Turner__Base{
  height: var(--base-height);
  flex-basis: var(--base-width);
  flex-shrink: 0;
  flex-grow: 1;
}

@mixin RV-Turner__Content {
  flex-grow: 9999;
  flex-basis: var(--base-width);
  min-width: var(--base-width);
  max-height: var(--base-height);
  overflow: hidden;
}

/* ############
 * Block Mixin
 * ############ */
@mixin RV-Turner($base-height, $base-width) {
  --base-height: #{$base-height};
  --base-width: #{$base-width};
  display: flex;
  max-width: calc(3 * var(--base-width));
  min-width: var(--base-width);
}

@mixin RV-Turner--horizontal__Base {
	width: var(--base-width);
}

@mixin RV-Turner--horizontal {
  flex-wrap: nowrap;
  flex-direction: row;
  overflow: hidden;
  height: var(--base-height);
}

@mixin RV-Turner--vertical {
	flex-wrap: nowrap;
	flex-direction: column;
}

@mixin RV-Turner--auto {
	flex-wrap: wrap;
}

.RV-Turner {
  $block: &;
  @include RV-Turner(300px, 300px);
  
  &--horizontal {
    @include RV-Turner--horizontal;
	
	#{$block}__Base {
		@include RV-Turner--horizontal__Base;
	}
  }

  &--vertical {
    @include RV-Turner--vertical;
  }
  
  &--auto {
	@include RV-Turner--auto;
  }

  &__Base {
    @include RV-Turner__Base;
  }
  
  &__Content {
    @include RV-Turner__Content;
  }
}

.RV-Label {
	display: contents;
}
@mixin RV-Icon {
    @include RV-Shape--square;
    background-repeat: no-repeat;
    display: block;
    background-size: contain;
    color: transparent;
    height: 100%;

    *  {
        width: 0;
    }

    img, .RV-Image {
        height: 100%;
        width: unset;
    }
}

.RV-Icon {
    @include RV-Icon;
}
.RV-Field {
	display: flex;
	flex-direction: row;
	justify-content: space-between;
	
	&--vertical {
		flex-direction: column;
	}
	
	&--horizontal {
		flex-direction: row;
	}
}
@mixin RV-Button {
    @include RV-Flex;
    @include RV-Flex--horizontal;
    align-items: center;
    height: var(--height);
}

@mixin RV-Button__Icon {
    height: 1.5em;
    img, .RV-Image {
        position: unset;
    }
}

.RV-Button {
    @include RV-Button;
    white-space: nowrap;
    overflow: hidden;
    --height: 2rem;

    &__Icon {
        @include RV-Button__Icon;
    }
}
.RV-Link {
	$block: &;
	text-align: center;
	
	width: max-content;
	&__Anchor {
		text-decoration: none;
	}
	
	&--button {
		position: relative;
		background-color: gray;
		padding: 10px;
		#{$block}__Anchor::after {
			content: '';
			position: absolute;
			top: 0;
			left: 0;
			width: 100%;
			height: 100%;
		}
	}
}
@mixin RV-Iconized__Text {
	order: 10;
}

@mixin RV-Iconized__Icon--small {
	--icon-size: var(--spacing-small);
}

@mixin RV-Iconized__Icon--regular {
	--icon-size: var(--spacing-regular);
}

@mixin RV-Iconized__Icon--medium {
	--icon-size: var(--spacing-medium);
}

@mixin RV-Iconized__Icon--large {
	--icon-size: var(--spacing-large);
}

@mixin RV-Iconized__Icon--extraLarge {
	--icon-size: var(--spacing-extra-large);
}

@mixin RV-Iconized__Icon--left {
	* {
		order: 5;
	}
}

@mixin RV-Iconized__Icon--right {
	* {
		order: 15;
	}
}

@mixin RV-Iconized__Icon {
	display: contents;
	* {
		height: 100%;
		height: var(--icon-size);
	}
}

@mixin RV-Iconized {
	--icon-size: var(--spacing-regular);
	
	display: inline-flex;
	position: relative;
	align-items: center;
	gap: calc(var(--icon-size) / 2);
}

.RV-Iconized {
	@include RV-Iconized;

	&__Text {
		@include RV-Iconized__Text;
	}

	&__Icon {
		@include RV-Iconized__Icon;
		
		&--small {
			@include RV-Iconized__Icon--small;	
		}
		
		&--regular {
			@include RV-Iconized__Icon--regular;	
		}
		
		&--medium {
			@include RV-Iconized__Icon--medium;	
		}
		
		&--large {
			@include RV-Iconized__Icon--large;	
		}
		
		&--extraLarge {
			@include RV-Iconized__Icon--extraLarge;	
		}
		
		&--right {
			@include RV-Iconized__Icon--right;
		}
		
		&--left {
			@include RV-Iconized__Icon--left;
		}
	}
}
//
//
@mixin RV-LinkList--horizontal {
    --itemHeight: var(--linkHeight);
    --itemMinWidth: var(--linkWidth);

    .RV-LinkList__List {
        @include RV-Grid;
        @include RV-Grid--autoWidth;
		
		gap: var(--spacing);
    }
}

@mixin RV-LinkList__List {
	list-style-type: none;
	padding: 0;
	margin: 0;
	
	display: flex;
	flex-direction: column;
	gap: var(--spacing);
}

@mixin RV-LinkList__Item {
	.RV-Link {
		padding: var(--linkHeight);
		box-sizing: border-box;
		width: 100%;
	}
}

@mixin RV-LinkList {
}

.RV-LinkList {
    --linkWidth: 12em;
	--linkHeight: 1em;
	
	&__List {
		@include RV-LinkList__List;
	}
	
	&__Item {
		@include RV-LinkList__Item;
	}
	
    &--horizontal {
        @include RV-LinkList--horizontal;
    }
}
.RV-Teaser {
	$block: &;
	@include RV-Turner(300px, 300px);
	
	&__Image {
		@include RV-Turner__Base;
	}
	
	&__Content {
		@include RV-Turner__Content;
		@include RV-Flex;
		@include RV-Flex--vertical;
	}
	
	&--auto {
		@include RV-Turner--auto;
	}
	
	&--horizontal {
    	@include RV-Turner--horizontal;
	
		#{$block}__Image {
			@include RV-Turner--horizontal__Base;
		}
	}

	&--vertical {
		@include RV-Turner--vertical;
	}
}